From 3bdfc3552ecc9fc80012bcf786e007abd93e8d79 Mon Sep 17 00:00:00 2001 From: Bernardo Magri Date: Sat, 6 Jun 2026 15:46:17 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20bump=20to=20NixOS=2026.05=20(Yarara)=20?= =?UTF-8?q?=E2=80=94=20WIP,=20desktop=20unverified=20on=20hardware?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps nixpkgs nixos-25.11 -> nixos-26.05, home-manager release-25.11 -> release-26.05, and pins stylix to release-26.05 (was unpinned master). `nix flake check --no-build` and `nomarchy-eval-matrix` are both clean and the full system builds (nixos-system-nomarchy-26.05). Breaking-change fixes required by 26.05: - stylix-compat: drop the `programs.neovim.initLua` shim — HM 26.05 declares it natively, so the shim was a duplicate-option error. - swww was renamed to awww (binaries gone, no `init` subcommand). Dropped swww entirely and unified the wallpaper path on swaybg (the daemon this distro actually runs): nomarchy-theme-bg-next now delegates to nomarchy-theme-bg-set, swaybg added to the theme-engine script deps, swww removed from package lists. - default config: add a placeholder `fileSystems."/"` — 26.05's systemd stage-1 forces fsType during plain toplevel eval (the VM build overrides it). - services.resolved: extraConfig removed, domains/fallbackDns renamed -> migrated to settings.Resolve.* (RFC42). - systemd.sleep.extraConfig removed -> settings.Sleep.HibernateDelaySec (RFC42). - X11 'virtio' video driver removed -> dropped from vm-guest.nix and nomarchy-live.nix (modesetting drives virtio-gpu). - nomarchy-eval-matrix: define /persist + /home in the impermanence scenarios (26.05 maps fsType over every neededForBoot filesystem). - README/MIGRATION/installer: stale swww references -> swaybg. KNOWN BLOCKER (why this is on a branch, not main): In a headless QEMU VM, Hyprland boots and inits GL (virgl) fine but is OOM-killed after ~19s (3.4 GB peak). Likely a no-display-consumer artifact of headless rendering (unthrottled frames), but a real Hyprland-26.05 memory regression can't be ruled out without a real display. Verify on real hardware (a fresh ISO install) before merging to main; if the desktop is stable there, the OOM was the headless VM and this can merge. Co-Authored-By: Claude Opus 4.8 --- README.md | 2 +- bin/utils/nomarchy-eval-matrix | 12 ++ core/system/hibernate.nix | 6 +- core/system/network.nix | 12 +- core/system/vm-guest.nix | 4 +- docs/MIGRATION.md | 2 +- docs/SCRIPTS.md | 8 +- features/default.nix | 1 - features/scripts/default.nix | 1 - flake.lock | 113 +++++++++++-------- flake.nix | 15 ++- hosts/nomarchy-live.nix | 4 +- installer/install.sh | 2 +- themes/engine/scripts.nix | 2 +- themes/engine/scripts/nomarchy-theme-bg-next | 22 ++-- themes/engine/stylix-compat.nix | 17 +-- 16 files changed, 128 insertions(+), 95 deletions(-) diff --git a/README.md b/README.md index e703f85..2d0346c 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ - **Modular Merging Architecture:** Distro code and user code are strictly separated. You can update the distro core without ever touching or breaking your personal configurations. - **Interactive "Smart" Installer:** Detects hardware, sets up networking, localizes timezones/keymaps, and offers multi-select software profiles. - **Erase Your Darlings (Optional):** Optional BTRFS root-wipe on boot ensures your system stays pristine and 100% declarative. -- **Dynamic Theming Engine:** 20+ built-in themes with instant UI feedback via IPC (swww, waybar, and stylix). +- **Dynamic Theming Engine:** 20+ built-in themes with instant UI feedback via IPC (swaybg, waybar, and stylix). - **Portable State (`nomarchy-sync`):** Easily backup and sync your declarative config and dynamic state (theme/wallpaper choices) to a private Git repo. --- diff --git a/bin/utils/nomarchy-eval-matrix b/bin/utils/nomarchy-eval-matrix index 84d276c..8773ac8 100755 --- a/bin/utils/nomarchy-eval-matrix +++ b/bin/utils/nomarchy-eval-matrix @@ -50,6 +50,16 @@ let forced = x: (builtins.tryEval (builtins.seq x true)).success; + # Real impermanence installs define /persist + /home via disko; the eval + # scenarios must too, because nixpkgs 26.05's systemd stage-1 maps fsType + # over every neededForBoot filesystem and impermanence marks both + # neededForBoot (core/system/impermanence.nix). Without device+fsType here, + # the toplevel eval throws on a config that has no disko layer. + impermanenceFs = { + "/persist" = { device = "/dev/disk/by-label/persist"; fsType = "ext4"; }; + "/home" = { device = "/dev/disk/by-label/home"; fsType = "ext4"; }; + }; + # Combined opt-in scenarios. Each enables as many compatible toggles as # possible so CI does ~3 full-system evals, not one per toggle. Home-side # options go under home-manager.users.nomarchy.nomarchy.*. @@ -75,6 +85,7 @@ let keymap = { layout = "de"; variant = "nodeadkeys"; }; toggles = { waybar = false; idle = false; nightlight = false; }; }; + fileSystems = impermanenceFs; }; # desktop preset — conflicts with the laptop formFactor, so its own eval. @@ -85,6 +96,7 @@ let # impermanence multi-disk variant (alternate mainLuksName). "impermanence-multi" = { nomarchy.system.impermanence = { enable = true; mainLuksName = "crypted_main"; }; + fileSystems = impermanenceFs; }; }; diff --git a/core/system/hibernate.nix b/core/system/hibernate.nix index fa09859..69edc9a 100644 --- a/core/system/hibernate.nix +++ b/core/system/hibernate.nix @@ -7,9 +7,9 @@ in config = lib.mkIf cfg.enable { # Wait this long after suspend before hibernating, and use the same # delay as the idle-action timeout so the two paths agree. - systemd.sleep.extraConfig = '' - HibernateDelaySec=${toString (cfg.idleMinutes * 60)} - ''; + # nixpkgs 26.05 replaced systemd.sleep.extraConfig with the RFC42-style + # `settings` attrset. + systemd.sleep.settings.Sleep.HibernateDelaySec = cfg.idleMinutes * 60; services.logind = { settings.Login = { diff --git a/core/system/network.nix b/core/system/network.nix index 9d7cb77..e53153e 100644 --- a/core/system/network.nix +++ b/core/system/network.nix @@ -19,11 +19,13 @@ in services.resolved = { enable = lib.mkDefault (cfg.dns != "DHCP"); dnssec = lib.mkDefault "allow-downgrade"; - domains = lib.mkDefault [ "~." ]; - fallbackDns = lib.mkDefault [ "9.9.9.9" "149.112.112.112" ]; - extraConfig = lib.mkDefault '' - DNSOverTLS=opportunistic - ''; + # nixpkgs 26.05 moved resolved.conf options into the RFC42-style `settings` + # attrset (extraConfig dropped; domains/fallbackDns renamed). + settings.Resolve = { + Domains = lib.mkDefault [ "~." ]; + FallbackDNS = lib.mkDefault [ "9.9.9.9" "149.112.112.112" ]; + DNSOverTLS = lib.mkDefault "opportunistic"; + }; }; environment.systemPackages = [ diff --git a/core/system/vm-guest.nix b/core/system/vm-guest.nix index 5d95487..e7a6c7a 100644 --- a/core/system/vm-guest.nix +++ b/core/system/vm-guest.nix @@ -15,7 +15,9 @@ # Improve VM resolution and guest experience services.spice-vdagentd.enable = true; services.qemuGuest.enable = true; - services.xserver.videoDrivers = [ "qxl" "virtio" "modesetting" ]; + # nixpkgs 26.05 removed the standalone X11 'virtio' driver; modesetting + # drives virtio-gpu via KMS, so it covers the same hardware. + services.xserver.videoDrivers = [ "qxl" "modesetting" ]; # Provide the flake to the VM for local rebuilding environment.etc."nomarchy".source = lib.mkDefault inputs.self; diff --git a/docs/MIGRATION.md b/docs/MIGRATION.md index 6986767..2653175 100644 --- a/docs/MIGRATION.md +++ b/docs/MIGRATION.md @@ -135,7 +135,7 @@ create minimal versions to start: mpv fastfetch chromium - # …add anything you want; mako/hyprlock/swww/rofi/etc. ship with Nomarchy. + # …add anything you want; mako/hyprlock/swaybg/rofi/etc. ship with Nomarchy. ]; # Enable Nomarchy's curated app configurations diff --git a/docs/SCRIPTS.md b/docs/SCRIPTS.md index 45d76d6..a74cc71 100644 --- a/docs/SCRIPTS.md +++ b/docs/SCRIPTS.md @@ -122,8 +122,8 @@ Phase B (per-batch PRs) refines those into `port-from-omarchy`, | `nomarchy-show-done` | `themes/engine/scripts` | features/scripts/utils/nomarchy-launch-floating-terminal-with-presentation | `kept` | | | `nomarchy-show-logo` | `themes/engine/scripts` | features/scripts/utils/nomarchy-launch-floating-terminal-with-presentation | `kept` | | | `nomarchy-skill` | `features/scripts/utils` | core/home/configs.nix | `kept` | | -| `nomarchy-state` | `features/scripts/utils` | core/system/scripts/nomarchy-system-reboot,core/system/scripts/nomarchy-system-shutdown, +14 more | `kept` | | -| `nomarchy-state-write` | `features/scripts/utils` | core/system/scripts/nomarchy-toggle-idle,features/scripts/utils/nomarchy-hyprland-monitor-scaling-cycle, +9 more | `kept` | | +| `nomarchy-state` | `features/scripts/utils` | core/system/scripts/nomarchy-system-reboot,core/system/scripts/nomarchy-system-shutdown, +13 more | `kept` | | +| `nomarchy-state-write` | `features/scripts/utils` | core/system/scripts/nomarchy-toggle-idle,features/scripts/utils/nomarchy-hyprland-monitor-scaling-cycle, +8 more | `kept` | | | `nomarchy-sudo-passwordless-toggle` | `core/system/scripts` | core/home/config/nomarchy-skill/SKILL.md | `kept` | | | `nomarchy-sudo-reset` | `core/system/scripts` | core/home/config/nomarchy-skill/SKILL.md | `kept` | | | `nomarchy-swayosd-brightness` | `core/system/scripts` | core/system/scripts/nomarchy-brightness-display,core/system/scripts/nomarchy-brightness-display-apple | `kept` | | @@ -137,10 +137,10 @@ Phase B (per-batch PRs) refines those into `port-from-omarchy`, | `nomarchy-test-installer` | `features/scripts/utils` | README.md,features/scripts/utils/nomarchy-test-vm | `kept` | | | `nomarchy-test-live-iso` | `features/scripts/utils` | hosts/nomarchy-live.nix | `kept` | | | `nomarchy-test-vm` | `features/scripts/utils` | features/scripts/utils/nomarchy-test-live-iso | `kept` | | -| `nomarchy-theme` | `features/scripts/utils` | README.md,bin/utils/nomarchy-docs-scripts, +17 more | `kept` | | +| `nomarchy-theme` | `features/scripts/utils` | README.md,bin/utils/nomarchy-docs-scripts, +18 more | `kept` | | | `nomarchy-theme-bg-install` | `themes/engine/scripts` | core/home/config/nomarchy-skill/SKILL.md | `kept` | | | `nomarchy-theme-bg-next` | `themes/engine/scripts` | README.md,core/home/config/nomarchy-skill/SKILL.md, +1 more | `kept` | | -| `nomarchy-theme-bg-set` | `themes/engine/scripts` | features/apps/elephant/config/menus/nomarchy_background_selector.lua,features/scripts/utils/nomarchy-wallpaper | `kept` | | +| `nomarchy-theme-bg-set` | `themes/engine/scripts` | features/apps/elephant/config/menus/nomarchy_background_selector.lua,features/scripts/utils/nomarchy-wallpaper, +1 more | `kept` | | | `nomarchy-theme-current` | `themes/engine/scripts` | core/home/config/nomarchy-skill/SKILL.md,themes/engine/scripts/nomarchy-theme-next | `kept` | | | `nomarchy-theme-install` | `themes/engine/scripts` | core/home/config/nomarchy-skill/SKILL.md | `kept` | | | `nomarchy-theme-list` | `themes/engine/scripts` | core/home/config/nomarchy-skill/SKILL.md,features/scripts/utils/nomarchy-theme, +2 more | `kept` | | diff --git a/features/default.nix b/features/default.nix index 7332423..8bf8e2a 100644 --- a/features/default.nix +++ b/features/default.nix @@ -45,7 +45,6 @@ in # hyprlock, mpv, etc. — which broke notifications and the lock screen. home.packages = (with pkgs; [ # Hyprland ecosystem - swww # Wallpaper daemon mako # Notification daemon hyprlock # Lock screen diff --git a/features/scripts/default.nix b/features/scripts/default.nix index 5734c64..6dfc1cf 100644 --- a/features/scripts/default.nix +++ b/features/scripts/default.nix @@ -14,7 +14,6 @@ let # Category-specific dependencies categoryDeps = with pkgs; { appearance = [ - swww libnotify ]; diff --git a/flake.lock b/flake.lock index f632b92..091d17a 100644 --- a/flake.lock +++ b/flake.lock @@ -38,11 +38,11 @@ "base16-helix": { "flake": false, "locked": { - "lastModified": 1760703920, - "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", + "lastModified": 1776754714, + "narHash": "sha256-E3OAK27smtATTmX45uoTSRsVD+Y+ZiVVfgM/tjpbtYg=", "owner": "tinted-theming", "repo": "base16-helix", - "rev": "d646af9b7d14bff08824538164af99d0c521b185", + "rev": "4d508123037e7851ad36ebf7d9c48b0e9e1eb581", "type": "github" }, "original": { @@ -91,11 +91,11 @@ ] }, "locked": { - "lastModified": 1773889306, - "narHash": "sha256-PAqwnsBSI9SVC2QugvQ3xeYCB0otOwCacB1ueQj2tgw=", + "lastModified": 1780290312, + "narHash": "sha256-eTAlX0CwgB84Ts3GaBd944A3DRXVMzgA0EqroZBISUo=", "owner": "nix-community", "repo": "disko", - "rev": "5ad85c82cc52264f4beddc934ba57f3789f28347", + "rev": "115e5211780054d8a890b41f0b7734cafad54dfe", "type": "github" }, "original": { @@ -132,11 +132,11 @@ "firefox-gnome-theme": { "flake": false, "locked": { - "lastModified": 1775176642, - "narHash": "sha256-2veEED0Fg7Fsh81tvVDNYR6SzjqQxa7hbi18Jv4LWpM=", + "lastModified": 1779670703, + "narHash": "sha256-UdfMivNMwCCqQsYDg5pSz8X2IOaOrIZLIIy+Bg3CO2o=", "owner": "rafaelmardojai", "repo": "firefox-gnome-theme", - "rev": "179704030c5286c729b5b0522037d1d51341022c", + "rev": "942159e73e40bf785816f7f1f5feed9ef3d7c8f9", "type": "github" }, "original": { @@ -153,11 +153,11 @@ ] }, "locked": { - "lastModified": 1775087534, - "narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=", + "lastModified": 1778716662, + "narHash": "sha256-m1Yf0wZ8j1OHjTc2UwHwyQRSnNeSgLJOd7q5Y45hzi4=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b", + "rev": "f7c1a2d347e4c52d5fb8d10cb4d94b5884e546fb", "type": "github" }, "original": { @@ -206,16 +206,16 @@ ] }, "locked": { - "lastModified": 1775425411, - "narHash": "sha256-KY6HsebJHEe5nHOWP7ur09mb0drGxYSzE3rQxy62rJo=", + "lastModified": 1780361225, + "narHash": "sha256-wnV9ttf4fPWNonBIQmvlrSlNpQYgx5HgWWd007mwIFA=", "owner": "nix-community", "repo": "home-manager", - "rev": "0d02ec1d0a05f88ef9e74b516842900c41f0f2fe", + "rev": "e28654b71096e08c019d4861ca26acb646f583d8", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-25.11", + "ref": "release-26.05", "repo": "home-manager", "type": "github" } @@ -282,12 +282,15 @@ } }, "nixos-hardware": { + "inputs": { + "nixpkgs": "nixpkgs" + }, "locked": { - "lastModified": 1775490113, - "narHash": "sha256-2ZBhDNZZwYkRmefK5XLOusCJHnoeKkoN95hoSGgMxWM=", + "lastModified": 1780310866, + "narHash": "sha256-fPBRVf6A5xlACYcOI59shGrjURuvwu0lRsDoSCEXt/I=", "owner": "NixOS", "repo": "nixos-hardware", - "rev": "c775c2772ba56e906cbeb4e0b2db19079ef11ff7", + "rev": "4ed851c979641e28597a05086332d75cdc9e395f", "type": "github" }, "original": { @@ -298,18 +301,15 @@ }, "nixpkgs": { "locked": { - "lastModified": 1775811116, - "narHash": "sha256-t+HZK42pB6N+i5RGbuy7Xluez/VvWbembBdvzsc23Ss=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "54170c54449ea4d6725efd30d719c5e505f1c10e", - "type": "github" + "lastModified": 1767892417, + "narHash": "sha256-8bW3q88CEg2u4hSP66Vf4lpbLonHz7hqDNBMcCY7E9U=", + "rev": "3497aa5c9457a9d88d71fa93a4a8368816fbeeba", + "type": "tarball", + "url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre924538.3497aa5c9457/nixexprs.tar.xz" }, "original": { - "owner": "nixos", - "ref": "nixos-25.11", - "repo": "nixpkgs", - "type": "github" + "type": "tarball", + "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" } }, "nixpkgs-lib": { @@ -327,6 +327,22 @@ "type": "github" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1780453794, + "narHash": "sha256-bXMRa9VTsHSPXL4Cw8R6JJLQeY3Y/IP4+YJCYVmQ7FY=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "6b316287bae2ee04c9b93c8c858d930fd07d7338", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-26.05", + "repo": "nixpkgs", + "type": "github" + } + }, "nur": { "inputs": { "flake-parts": [ @@ -339,11 +355,11 @@ ] }, "locked": { - "lastModified": 1775228139, - "narHash": "sha256-ebbeHmg+V7w8050bwQOuhmQHoLOEOfqKzM1KgCTexK4=", + "lastModified": 1779766384, + "narHash": "sha256-P7Ohnlq8b8b2fU+Sgkrej7LBTM60LBTkHleLuYzmLmU=", "owner": "nix-community", "repo": "NUR", - "rev": "601971b9c89e0304561977f2c28fa25e73aa7132", + "rev": "57800b7ab648725ccd33551d01484ee14952ad3f", "type": "github" }, "original": { @@ -359,7 +375,7 @@ "impermanence": "impermanence", "nix-colors": "nix-colors", "nixos-hardware": "nixos-hardware", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "stylix": "stylix", "walker": "walker" } @@ -384,15 +400,16 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1775927784, - "narHash": "sha256-9Gm33hvgcy4hR7O9EjWrw2kipyVBIHgNUtAHyWgLDhg=", + "lastModified": 1780702455, + "narHash": "sha256-+srjPGNy67nKytYwdlepycL51IG6S34sS4MKRZXK8G0=", "owner": "danth", "repo": "stylix", - "rev": "8f6e6b3844b3b0b59470e276bd3fe9ab04600081", + "rev": "54fa19702f4f2c7f6a981a92850678933588af9a", "type": "github" }, "original": { "owner": "danth", + "ref": "release-26.05", "repo": "stylix", "type": "github" } @@ -446,11 +463,11 @@ "tinted-schemes": { "flake": false, "locked": { - "lastModified": 1772661346, - "narHash": "sha256-4eu3LqB9tPqe0Vaqxd4wkZiBbthLbpb7llcoE/p5HT0=", + "lastModified": 1777806186, + "narHash": "sha256-PDF0/wObw4nIsSBeXVYLsloXOiphXCgIdsrNcVXguKs=", "owner": "tinted-theming", "repo": "schemes", - "rev": "13b5b0c299982bb361039601e2d72587d6846294", + "rev": "0c94645546f4f3ddac77a1a5fce54eb95bf50795", "type": "github" }, "original": { @@ -462,11 +479,11 @@ "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1772934010, - "narHash": "sha256-x+6+4UvaG+RBRQ6UaX+o6DjEg28u4eqhVRM9kpgJGjQ=", + "lastModified": 1778379944, + "narHash": "sha256-wPDFzMGSlARlw0Sfsn48Q2+jPSfk6N0Ng6BC/d+7Q24=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "c3529673a5ab6e1b6830f618c45d9ce1bcdd829d", + "rev": "fe0203a198690e71a5ff11e08812a4673de3678d", "type": "github" }, "original": { @@ -478,11 +495,11 @@ "tinted-zed": { "flake": false, "locked": { - "lastModified": 1772909925, - "narHash": "sha256-jx/5+pgYR0noHa3hk2esin18VMbnPSvWPL5bBjfTIAU=", + "lastModified": 1778378178, + "narHash": "sha256-OXPXRIQgGwV77HjYRryOHguh4ALX96jkg+tseLkGgHA=", "owner": "tinted-theming", "repo": "base16-zed", - "rev": "b4d3a1b3bcbd090937ef609a0a3b37237af974df", + "rev": "9cd816033ff969415b190722cddf134e78a5665f", "type": "github" }, "original": { @@ -500,11 +517,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1775815794, - "narHash": "sha256-4aYljsM+f09YLERdo+kQjg9lvxVc6yxc+rPRFdgeXxw=", + "lastModified": 1777789924, + "narHash": "sha256-fX3ErzTmHRO9z1SzHC2VZUgKOgRfO13X/joC5a3QN7Q=", "owner": "abenz1267", "repo": "walker", - "rev": "a0b5fa92e05c7d52936472c5027265b14e746bae", + "rev": "93d44d1cb41732e1370e4b949429ae8e34ea05a4", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 6fb14d8..9e2de6d 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "Nomarchy - A NixOS-based distribution with Omarchy flavour"; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05"; nixos-hardware.url = "github:NixOS/nixos-hardware"; disko = { @@ -16,7 +16,7 @@ }; home-manager = { - url = "github:nix-community/home-manager/release-25.11"; + url = "github:nix-community/home-manager/release-26.05"; inputs.nixpkgs.follows = "nixpkgs"; }; @@ -25,7 +25,9 @@ # input" warning. Just URL it. nix-colors.url = "github:misterio77/nix-colors"; stylix = { - url = "github:danth/stylix"; + # Pinned to the matching release branch (tested against nixpkgs 26.05) + # rather than master, which targets unstable. + url = "github:danth/stylix/release-26.05"; inputs.nixpkgs.follows = "nixpkgs"; }; walker = { @@ -237,6 +239,13 @@ system.stateVersion = "25.11"; networking.hostName = "nomarchy"; + # This config is only ever built as a VM (`.build.vm`), where the + # qemu-vm module supplies the real root fs (via mkVMOverride). But + # nixpkgs 26.05's systemd stage-1 forces `fileSystems."/".fsType` + # during plain toplevel evaluation (`nix flake check`), so provide a + # placeholder root fs for eval; the VM build overrides it. + fileSystems."/" = lib.mkDefault { device = "/dev/disk/by-label/nixos"; fsType = "ext4"; }; + virtualisation.vmVariant.virtualisation.memorySize = 4096; virtualisation.vmVariant.virtualisation.cores = 2; diff --git a/hosts/nomarchy-live.nix b/hosts/nomarchy-live.nix index bbda20c..c7e4660 100644 --- a/hosts/nomarchy-live.nix +++ b/hosts/nomarchy-live.nix @@ -47,7 +47,9 @@ boot.initrd.availableKernelModules = [ "amdgpu" "radeon" "nouveau" "i915" "virtio_gpu" ]; - services.xserver.videoDrivers = [ "amdgpu" "radeon" "nouveau" "modesetting" "fbdev" "virtio" ]; + # 'virtio' X11 driver was removed in nixpkgs 26.05; modesetting drives + # virtio-gpu via KMS. + services.xserver.videoDrivers = [ "amdgpu" "radeon" "nouveau" "modesetting" "fbdev" ]; # VM guest agents. Without these the virtio-gpu connector only advertises # its 1024x768 fallback mode, so Hyprland's `monitor = , highres, …` rule diff --git a/installer/install.sh b/installer/install.sh index 7b05d92..aa877ed 100755 --- a/installer/install.sh +++ b/installer/install.sh @@ -1773,7 +1773,7 @@ EOF # User-level packages (Home Manager). # - # Nomarchy already ships the core Hyprland ecosystem (mako, hyprlock, swww, + # Nomarchy already ships the core Hyprland ecosystem (mako, hyprlock, swaybg, # wl-clipboard, grim, slurp, rofi, etc.). The list below includes the # default user apps and a menu of extras — uncomment what you want and # run \`nomarchy-env-update\`. diff --git a/themes/engine/scripts.nix b/themes/engine/scripts.nix index 3156fd6..15e013e 100644 --- a/themes/engine/scripts.nix +++ b/themes/engine/scripts.nix @@ -11,7 +11,7 @@ let findutils gawk jq - swww + swaybg libnotify gum brightnessctl diff --git a/themes/engine/scripts/nomarchy-theme-bg-next b/themes/engine/scripts/nomarchy-theme-bg-next index 963ae63..61e5635 100755 --- a/themes/engine/scripts/nomarchy-theme-bg-next +++ b/themes/engine/scripts/nomarchy-theme-bg-next @@ -1,8 +1,8 @@ #!/usr/bin/env bash set -e -# Cycles through the background images available for the current theme. -# Declarative + Hybrid (instant swww) for Nomarchy NixOS. +# Cycles through the background images available for the current theme, +# then applies the pick via nomarchy-theme-bg-set (see the note at the end). STATE_DIR="$HOME/.config/nomarchy" STATE_FILE="$STATE_DIR/state.json" @@ -45,13 +45,11 @@ done NEXT_INDEX=$(((INDEX + 1) % TOTAL)) NEW_BG="$BG_DIR/${BACKGROUNDS[$NEXT_INDEX]}" -nomarchy-state-write wallpaper "$NEW_BG" - -# Instant feedback via swww -if pgrep -x swww-daemon >/dev/null; then - swww img "$NEW_BG" --transition-type outer --transition-pos 0.85,0.97 --transition-step 90 -else - swww init && swww img "$NEW_BG" -fi - -echo "Background set to $NEW_BG declaratively." +# Apply through the shared setter: it persists state.json, updates the +# ~/.config/nomarchy/current/background symlink, and restarts swaybg — the +# single wallpaper daemon this distro actually runs. Previously this script +# drove swww directly, but it gated on `swww-daemon` (never running, since +# swaybg owns the wallpaper), so it spawned a second daemon competing with +# swaybg. swww was also renamed to awww and dropped its `init` subcommand in +# nixpkgs 26.05, so unifying on swaybg fixes both at once. +exec nomarchy-theme-bg-set "$NEW_BG" diff --git a/themes/engine/stylix-compat.nix b/themes/engine/stylix-compat.nix index ad0d9e6..fbfbbe9 100644 --- a/themes/engine/stylix-compat.nix +++ b/themes/engine/stylix-compat.nix @@ -1,19 +1,16 @@ -{ config, lib, ... }: +{ lib, ... }: # Compatibility shims for stylix target modules # Stylix unconditionally imports all target modules, which expect certain # program options to exist. This module defines stub options for programs # we don't use to prevent evaluation errors. +# +# Note: the neovim `initLua` shim was dropped at the 26.05 bump — Home Manager +# now declares `programs.neovim.initLua` natively, so re-declaring it here is +# both redundant and a duplicate-option error. { options = { - # Neovim: stylix uses initLua but home-manager uses extraLuaConfig - programs.neovim.initLua = lib.mkOption { - type = lib.types.lines; - default = ""; - description = "Lua code to run at init (compatibility shim for stylix)"; - }; - # OpenCode: stylix expects programs.opencode options programs.opencode = { tui = lib.mkOption { @@ -28,8 +25,4 @@ }; }; }; - - config = lib.mkIf (config.programs.neovim.initLua != "") { - programs.neovim.extraLuaConfig = config.programs.neovim.initLua; - }; }