From a5c07e033b4660e1aabf45ec42eb1e4b4c07db8f Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Wed, 4 Nov 2026 20:09:47 +0100 Subject: pkgs/rollup: Finish first mvp --- pkgs/by-name/ro/rollup/Cargo.lock | 23 + pkgs/by-name/ro/rollup/Cargo.toml | 1 + pkgs/by-name/ro/rollup/patches2/0001-add | 21 + .../patches2/0001-hosts-apzu-Add-host.toml.patch | 21 - pkgs/by-name/ro/rollup/patches2/0002-changes | 391 +++++++ ...e-extra_modules-to-import-dependency-modu.patch | 391 ------- ...ays-use-extra_lib-also-for-options.mkEnab.patch | 564 ---------- ...-a-stable-unstable-marker-in-the-filename.patch | 278 ----- pkgs/by-name/ro/rollup/patches2/0004-rename | 278 +++++ ...ix-various-name-mistakes-and-other-issues.patch | 1098 -------------------- .../0006-lib-Merge-with-the-extraLib.patch | 145 --- pkgs/by-name/ro/rollup/patches2/0006-remove | 145 +++ ...on-t-perform-source-mapping-via-sources-a.patch | 65 -- pkgs/by-name/ro/rollup/src/main.rs | 208 ++-- pkgs/by-name/ro/rollup/src/parse.rs | 289 ++++++ 15 files changed, 1272 insertions(+), 2646 deletions(-) create mode 100644 pkgs/by-name/ro/rollup/patches2/0001-add delete mode 100644 pkgs/by-name/ro/rollup/patches2/0001-hosts-apzu-Add-host.toml.patch create mode 100644 pkgs/by-name/ro/rollup/patches2/0002-changes delete mode 100644 pkgs/by-name/ro/rollup/patches2/0002-treewide-Use-extra_modules-to-import-dependency-modu.patch delete mode 100644 pkgs/by-name/ro/rollup/patches2/0003-modules-Always-use-extra_lib-also-for-options.mkEnab.patch delete mode 100644 pkgs/by-name/ro/rollup/patches2/0004-pkgs-Use-a-stable-unstable-marker-in-the-filename.patch create mode 100644 pkgs/by-name/ro/rollup/patches2/0004-rename delete mode 100644 pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch delete mode 100644 pkgs/by-name/ro/rollup/patches2/0006-lib-Merge-with-the-extraLib.patch create mode 100644 pkgs/by-name/ro/rollup/patches2/0006-remove delete mode 100644 pkgs/by-name/ro/rollup/patches2/0007-flake.nix-Don-t-perform-source-mapping-via-sources-a.patch create mode 100644 pkgs/by-name/ro/rollup/src/parse.rs (limited to 'pkgs') diff --git a/pkgs/by-name/ro/rollup/Cargo.lock b/pkgs/by-name/ro/rollup/Cargo.lock index dc5d553a..4184cc11 100644 --- a/pkgs/by-name/ro/rollup/Cargo.lock +++ b/pkgs/by-name/ro/rollup/Cargo.lock @@ -104,6 +104,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d07550c9036bf2ae0c684c4297d503f838287c83c53686d05370d0e139ae570" +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + [[package]] name = "heck" version = "0.5.0" @@ -122,6 +128,16 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + [[package]] name = "proc-macro2" version = "1.0.107" @@ -146,6 +162,7 @@ version = "0.1.0" dependencies = [ "anyhow", "clap", + "pretty_assertions", ] [[package]] @@ -191,3 +208,9 @@ checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ "windows-link", ] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" diff --git a/pkgs/by-name/ro/rollup/Cargo.toml b/pkgs/by-name/ro/rollup/Cargo.toml index ce857a6e..51fecd59 100644 --- a/pkgs/by-name/ro/rollup/Cargo.toml +++ b/pkgs/by-name/ro/rollup/Cargo.toml @@ -18,3 +18,4 @@ homepage = "" [dependencies] clap = { version = "4.6", features = ["derive"] } anyhow = "1.0.104" +pretty_assertions = "1.4.1" diff --git a/pkgs/by-name/ro/rollup/patches2/0001-add b/pkgs/by-name/ro/rollup/patches2/0001-add new file mode 100644 index 00000000..0d9213b6 --- /dev/null +++ b/pkgs/by-name/ro/rollup/patches2/0001-add @@ -0,0 +1,21 @@ +From 60e073a216a039cc49f35db9d26ecc60c7e3feb9 Mon Sep 17 00:00:00 2001 +From: Benedikt Peetz +Date: Mon, 2 Nov 2026 15:03:48 +0100 +Subject: [PATCH 1/7] hosts/apzu: Add host.toml + +--- + hosts/by-name/apzu/host.toml | 2 ++ + 1 file changed, 2 insertions(+) + create mode 100644 hosts/by-name/apzu/host.toml + +diff --git a/hosts/by-name/apzu/host.toml b/hosts/by-name/apzu/host.toml +new file mode 100644 +index 00000000..9e975618 +--- /dev/null ++++ b/hosts/by-name/apzu/host.toml +@@ -0,0 +1,2 @@ ++hostname = "apzu.fritzbox.com" ++nixpkgs = "unstable" +-- +2.55.0 + diff --git a/pkgs/by-name/ro/rollup/patches2/0001-hosts-apzu-Add-host.toml.patch b/pkgs/by-name/ro/rollup/patches2/0001-hosts-apzu-Add-host.toml.patch deleted file mode 100644 index 0d9213b6..00000000 --- a/pkgs/by-name/ro/rollup/patches2/0001-hosts-apzu-Add-host.toml.patch +++ /dev/null @@ -1,21 +0,0 @@ -From 60e073a216a039cc49f35db9d26ecc60c7e3feb9 Mon Sep 17 00:00:00 2001 -From: Benedikt Peetz -Date: Mon, 2 Nov 2026 15:03:48 +0100 -Subject: [PATCH 1/7] hosts/apzu: Add host.toml - ---- - hosts/by-name/apzu/host.toml | 2 ++ - 1 file changed, 2 insertions(+) - create mode 100644 hosts/by-name/apzu/host.toml - -diff --git a/hosts/by-name/apzu/host.toml b/hosts/by-name/apzu/host.toml -new file mode 100644 -index 00000000..9e975618 ---- /dev/null -+++ b/hosts/by-name/apzu/host.toml -@@ -0,0 +1,2 @@ -+hostname = "apzu.fritzbox.com" -+nixpkgs = "unstable" --- -2.55.0 - diff --git a/pkgs/by-name/ro/rollup/patches2/0002-changes b/pkgs/by-name/ro/rollup/patches2/0002-changes new file mode 100644 index 00000000..c231408f --- /dev/null +++ b/pkgs/by-name/ro/rollup/patches2/0002-changes @@ -0,0 +1,391 @@ +From 4f492b1253fb14354068a04e6ca37889e1c6b773 Mon Sep 17 00:00:00 2001 +From: Benedikt Peetz +Date: Mon, 2 Nov 2026 15:05:07 +0100 +Subject: [PATCH 2/7] treewide: Use `extra_modules` to import dependency + modules + +--- + flake.nix | 28 ++++++++++++------- + .../tiamat/legacy-disk-module/module.nix | 4 +-- + hosts/default.nix | 19 ++++++------- + modules/by-name/ag/age/module.nix | 4 +-- + modules/by-name/bo/boot/module.nix | 6 ++-- + modules/by-name/di/disks/module.nix | 4 +-- + modules/by-name/ho/home-manager/module.nix | 4 +-- + modules/by-name/im/impermanence/module.nix | 4 +-- + modules/by-name/ni/nix-index/module.nix | 4 +-- + modules/by-name/nv/nvim/module.nix | 4 +-- + tests/default.nix | 23 ++++++--------- + tests/old/by-name/nv/nvim-neorg/test.nix | 4 +-- + tests/old/infrastructure/default.nix | 2 +- + 13 files changed, 55 insertions(+), 55 deletions(-) + +diff --git a/flake.nix b/flake.nix +index 9e306ef7..860ce277 100644 +--- a/flake.nix ++++ b/flake.nix +@@ -24,14 +24,22 @@ + lib = packageSets.unstable.lib; + extra_lib = raw_sources.library.nixLib; + +- extra_modules = [ +- sources.agenix.nixosModules.default +- sources.turtle.nixosModules.nixos +- sources.disko.nixosModules.default +- sources.impermanence.nixosModules.impermanence +- sources.simple-nixos-mailserver.nixosModule +- sources.rocie.nixosModules.default +- ]; ++ extra_modules = { ++ nixos = { ++ agenix = sources.agenix.nixosModules.default; ++ turtle = sources.turtle.nixosModules.nixos; ++ disko = sources.disko.nixosModules.default; ++ impermanence = sources.impermanence.nixosModules.impermanence; ++ simple-nixos-mailserver = sources.simple-nixos-mailserver.nixosModule; ++ rocie = sources.rocie.nixosModules.default; ++ home-manager = sources.home-manager.nixosModules.home-manager; ++ lanzaboote = sources.lanzaboote.nixosModules.lanzaboote; ++ }; ++ home = { ++ nix-index-database = sources.nix-index-database.homeModules.nix-index; ++ nixvim = sources.nixvim.homeManagerModule; ++ }; ++ }; + module_args = { + inherit + sources +@@ -48,6 +56,7 @@ + # Needs to be a special argument, because it is used for determining the `imports` + # value (via `mkByName`). + extra_lib ++ extra_modules + ; + }; + +@@ -64,7 +73,6 @@ + extra_lib + module_args + special_args +- extra_modules + system + ; + inherit +@@ -78,7 +86,7 @@ + deployChecks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) sources.deploy-rs.lib; + tests = lib.attrsets.filterAttrs (_: v: !(v ? meta && v.meta.broken)) (import ./tests + { +- inherit sources packageSets extra_modules module_args special_args extra_lib; ++ inherit sources packageSets module_args special_args extra_lib; + }); + # myPkgsFlat = + # builtins.listToAttrs +diff --git a/hosts/by-name/tiamat/legacy-disk-module/module.nix b/hosts/by-name/tiamat/legacy-disk-module/module.nix +index 955d2026..8c49f6eb 100644 +--- a/hosts/by-name/tiamat/legacy-disk-module/module.nix ++++ b/hosts/by-name/tiamat/legacy-disk-module/module.nix +@@ -11,7 +11,7 @@ + config, + lib, + pkgs, +- modules, ++ extra_modules, + ... + }: let + # FIXME: The iso redeploy requires a bigger efi partition <2024-05-12> +@@ -48,7 +48,7 @@ in { + }; + + imports = [ +- modules.disko.nixosModules.default ++ extra_modules.nixos.disko + ]; + + config = lib.mkIf cfg.enable { +diff --git a/hosts/default.nix b/hosts/default.nix +index 4a3d52fc..4f5d2982 100644 +--- a/hosts/default.nix ++++ b/hosts/default.nix +@@ -2,7 +2,6 @@ + self, + extra_lib, + module_args, +- extra_modules, + special_args, + nixpkgs-stable, + nixpkgs-unstable, +@@ -24,17 +23,15 @@ + in + nixpkgs.lib.nixosSystem { + specialArgs = special_args; +- modules = +- extra_modules +- ++ [ +- { +- _module.args = module_args; +- } +- path ++ modules = [ ++ { ++ _module.args = module_args; ++ } ++ path + +- ../modules +- # ../modules/common +- ]; ++ ../modules ++ # ../modules/common ++ ]; + }; + mkDeployHost = name: path: let + host_file = builtins.fromTOML (builtins.readFile path + "/host.toml"); +diff --git a/modules/by-name/ag/age/module.nix b/modules/by-name/ag/age/module.nix +index 9a498ab6..6eb0f9c4 100644 +--- a/modules/by-name/ag/age/module.nix ++++ b/modules/by-name/ag/age/module.nix +@@ -1,7 +1,7 @@ + { + config, + lib, +- modules, ++ extra_modules, + pkgs, + ... + }: let +@@ -12,7 +12,7 @@ in { + }; + + imports = [ +- modules.agenix.nixosModules.default ++ extra_modules.nixos.agenix + ]; + + config = lib.mkIf cfg.enable { +diff --git a/modules/by-name/bo/boot/module.nix b/modules/by-name/bo/boot/module.nix +index 86ad58da..8d3cbe5f 100644 +--- a/modules/by-name/bo/boot/module.nix ++++ b/modules/by-name/bo/boot/module.nix +@@ -11,7 +11,7 @@ + config, + lib, + pkgs, +- modules, ++ extra_modules, + modulesPath, + system, + specialArgs, +@@ -94,7 +94,7 @@ in { + }; + + imports = [ +- modules.lanzaboote.nixosModules.lanzaboote ++ extra_modules.nixos.lanzaboote + ]; + + config = lib.mkIf cfg.enable { +@@ -130,7 +130,7 @@ in { + lanzabooteInstallHook = import "${modulesPath}/../lib/eval-config.nix" { + inherit system specialArgs; + modules = [ +- modules.lanzaboote.nixosModules.lanzaboote ++ extra_modules.nixos.lanzaboote + + { + # Copy the relevant config into the eval-module context. +diff --git a/modules/by-name/di/disks/module.nix b/modules/by-name/di/disks/module.nix +index ed5c939a..0a46c402 100644 +--- a/modules/by-name/di/disks/module.nix ++++ b/modules/by-name/di/disks/module.nix +@@ -11,7 +11,7 @@ + config, + lib, + pkgs, +- modules, ++ extra_modules, + ... + }: let + cfg = config.soispha.disks; +@@ -42,7 +42,7 @@ in { + }; + + imports = [ +- modules.disko.nixosModules.default ++ extra_modules.nixos.disko + ]; + + config = lib.mkIf cfg.enable { +diff --git a/modules/by-name/ho/home-manager/module.nix b/modules/by-name/ho/home-manager/module.nix +index d7eccbd6..e20cfa6d 100644 +--- a/modules/by-name/ho/home-manager/module.nix ++++ b/modules/by-name/ho/home-manager/module.nix +@@ -11,7 +11,7 @@ + config, + lib, + system, +- modules, ++ extra_modules, + ... + }: let + cfg = config.soispha.home-manager; +@@ -21,7 +21,7 @@ in { + }; + + imports = [ +- modules.home-manager.nixosModules.home-manager ++ extra_modules.nixos.home-manager + ]; + + # TODO: Find a way to throw this error below, when a user `enable`s a home-manager +diff --git a/modules/by-name/im/impermanence/module.nix b/modules/by-name/im/impermanence/module.nix +index 0fbd7425..0de6f3e6 100644 +--- a/modules/by-name/im/impermanence/module.nix ++++ b/modules/by-name/im/impermanence/module.nix +@@ -1,7 +1,7 @@ + { + config, + lib, +- modules, ++ extra_modules, + ... + }: let + cfg = config.vhack.persist; +@@ -46,7 +46,7 @@ in { + }; + + imports = [ +- modules.impermanence.nixosModules.impermanence ++ extra_modules.nixos.impermanence + ]; + + config = lib.mkIf cfg.enable { +diff --git a/modules/by-name/ni/nix-index/module.nix b/modules/by-name/ni/nix-index/module.nix +index 72be6b52..269c6f95 100644 +--- a/modules/by-name/ni/nix-index/module.nix ++++ b/modules/by-name/ni/nix-index/module.nix +@@ -10,7 +10,7 @@ + { + config, + lib, +- modules, ++ extra_modules, + ... + }: let + cfg = config.soispha.programs.nix-index; +@@ -27,7 +27,7 @@ in { + + home-manager.users.soispha = { + imports = [ +- modules.nix-index-database.homeModules.nix-index ++ extra_modules.home.nix-index-database + ]; + + programs.nix-index = { +diff --git a/modules/by-name/nv/nvim/module.nix b/modules/by-name/nv/nvim/module.nix +index f6f9ba95..f6e2162e 100644 +--- a/modules/by-name/nv/nvim/module.nix ++++ b/modules/by-name/nv/nvim/module.nix +@@ -11,7 +11,7 @@ + pkgs, + lib, + config, +- modules, ++ extra_modules, + libraries, + ... + }: let +@@ -51,7 +51,7 @@ in { + + home-manager.users.soispha = { + imports = [ +- modules.nixvim.homeModules.nixvim ++ extra_modules.home.nixvim + ]; + + home.sessionVariables = { +diff --git a/tests/default.nix b/tests/default.nix +index 870ecfb5..6ab6b5fa 100644 +--- a/tests/default.nix ++++ b/tests/default.nix +@@ -1,6 +1,5 @@ + { + packageSets, +- extra_modules, + module_args, + special_args, + extra_lib, +@@ -86,12 +85,10 @@ + ]; + }; + name_server = {nodes, ...}: { +- imports = +- extra_modules +- ++ [ +- ./common/acme/client.nix +- ./common/dns/server.nix +- ]; ++ imports = [ ++ ./common/acme/client.nix ++ ./common/dns/server.nix ++ ]; + + vhack.dns.zones = let + mkDomain = attr: let +@@ -129,14 +126,12 @@ + + args.nodes + (builtins.mapAttrs (_: _: { +- imports = +- extra_modules +- ++ [ +- ./common/acme/client.nix +- ./common/dns/client.nix ++ imports = [ ++ ./common/acme/client.nix ++ ./common/dns/client.nix + +- ../modules +- ]; ++ ../modules ++ ]; + }) + args.nodes) + ]; +diff --git a/tests/old/by-name/nv/nvim-neorg/test.nix b/tests/old/by-name/nv/nvim-neorg/test.nix +index 9f160df5..82cb533d 100644 +--- a/tests/old/by-name/nv/nvim-neorg/test.nix ++++ b/tests/old/by-name/nv/nvim-neorg/test.nix +@@ -9,7 +9,7 @@ + # If not, see . + { + mkTest, +- extraModules, ++ extra_modules, + pkgs, + ... + }: +@@ -34,7 +34,7 @@ mkTest { + }; + home-manager.users.soispha = { + imports = [ +- extraModules.nixvim.homeManagerModule ++ extra_modules.home.nixvim + ]; + }; + }; +diff --git a/tests/old/infrastructure/default.nix b/tests/old/infrastructure/default.nix +index cd21198c..4696a99f 100644 +--- a/tests/old/infrastructure/default.nix ++++ b/tests/old/infrastructure/default.nix +@@ -47,7 +47,7 @@ nixos-lib.runTest { + machine = {config, ...}: { + imports = + [ +- extraModules.home-manager ++ extra_modules.home.home-manager + ../../modules/by-name/us/users/module.nix + ] + ++ configuration.imports; +-- +2.55.0 + diff --git a/pkgs/by-name/ro/rollup/patches2/0002-treewide-Use-extra_modules-to-import-dependency-modu.patch b/pkgs/by-name/ro/rollup/patches2/0002-treewide-Use-extra_modules-to-import-dependency-modu.patch deleted file mode 100644 index c231408f..00000000 --- a/pkgs/by-name/ro/rollup/patches2/0002-treewide-Use-extra_modules-to-import-dependency-modu.patch +++ /dev/null @@ -1,391 +0,0 @@ -From 4f492b1253fb14354068a04e6ca37889e1c6b773 Mon Sep 17 00:00:00 2001 -From: Benedikt Peetz -Date: Mon, 2 Nov 2026 15:05:07 +0100 -Subject: [PATCH 2/7] treewide: Use `extra_modules` to import dependency - modules - ---- - flake.nix | 28 ++++++++++++------- - .../tiamat/legacy-disk-module/module.nix | 4 +-- - hosts/default.nix | 19 ++++++------- - modules/by-name/ag/age/module.nix | 4 +-- - modules/by-name/bo/boot/module.nix | 6 ++-- - modules/by-name/di/disks/module.nix | 4 +-- - modules/by-name/ho/home-manager/module.nix | 4 +-- - modules/by-name/im/impermanence/module.nix | 4 +-- - modules/by-name/ni/nix-index/module.nix | 4 +-- - modules/by-name/nv/nvim/module.nix | 4 +-- - tests/default.nix | 23 ++++++--------- - tests/old/by-name/nv/nvim-neorg/test.nix | 4 +-- - tests/old/infrastructure/default.nix | 2 +- - 13 files changed, 55 insertions(+), 55 deletions(-) - -diff --git a/flake.nix b/flake.nix -index 9e306ef7..860ce277 100644 ---- a/flake.nix -+++ b/flake.nix -@@ -24,14 +24,22 @@ - lib = packageSets.unstable.lib; - extra_lib = raw_sources.library.nixLib; - -- extra_modules = [ -- sources.agenix.nixosModules.default -- sources.turtle.nixosModules.nixos -- sources.disko.nixosModules.default -- sources.impermanence.nixosModules.impermanence -- sources.simple-nixos-mailserver.nixosModule -- sources.rocie.nixosModules.default -- ]; -+ extra_modules = { -+ nixos = { -+ agenix = sources.agenix.nixosModules.default; -+ turtle = sources.turtle.nixosModules.nixos; -+ disko = sources.disko.nixosModules.default; -+ impermanence = sources.impermanence.nixosModules.impermanence; -+ simple-nixos-mailserver = sources.simple-nixos-mailserver.nixosModule; -+ rocie = sources.rocie.nixosModules.default; -+ home-manager = sources.home-manager.nixosModules.home-manager; -+ lanzaboote = sources.lanzaboote.nixosModules.lanzaboote; -+ }; -+ home = { -+ nix-index-database = sources.nix-index-database.homeModules.nix-index; -+ nixvim = sources.nixvim.homeManagerModule; -+ }; -+ }; - module_args = { - inherit - sources -@@ -48,6 +56,7 @@ - # Needs to be a special argument, because it is used for determining the `imports` - # value (via `mkByName`). - extra_lib -+ extra_modules - ; - }; - -@@ -64,7 +73,6 @@ - extra_lib - module_args - special_args -- extra_modules - system - ; - inherit -@@ -78,7 +86,7 @@ - deployChecks = builtins.mapAttrs (system: deployLib: deployLib.deployChecks self.deploy) sources.deploy-rs.lib; - tests = lib.attrsets.filterAttrs (_: v: !(v ? meta && v.meta.broken)) (import ./tests - { -- inherit sources packageSets extra_modules module_args special_args extra_lib; -+ inherit sources packageSets module_args special_args extra_lib; - }); - # myPkgsFlat = - # builtins.listToAttrs -diff --git a/hosts/by-name/tiamat/legacy-disk-module/module.nix b/hosts/by-name/tiamat/legacy-disk-module/module.nix -index 955d2026..8c49f6eb 100644 ---- a/hosts/by-name/tiamat/legacy-disk-module/module.nix -+++ b/hosts/by-name/tiamat/legacy-disk-module/module.nix -@@ -11,7 +11,7 @@ - config, - lib, - pkgs, -- modules, -+ extra_modules, - ... - }: let - # FIXME: The iso redeploy requires a bigger efi partition <2024-05-12> -@@ -48,7 +48,7 @@ in { - }; - - imports = [ -- modules.disko.nixosModules.default -+ extra_modules.nixos.disko - ]; - - config = lib.mkIf cfg.enable { -diff --git a/hosts/default.nix b/hosts/default.nix -index 4a3d52fc..4f5d2982 100644 ---- a/hosts/default.nix -+++ b/hosts/default.nix -@@ -2,7 +2,6 @@ - self, - extra_lib, - module_args, -- extra_modules, - special_args, - nixpkgs-stable, - nixpkgs-unstable, -@@ -24,17 +23,15 @@ - in - nixpkgs.lib.nixosSystem { - specialArgs = special_args; -- modules = -- extra_modules -- ++ [ -- { -- _module.args = module_args; -- } -- path -+ modules = [ -+ { -+ _module.args = module_args; -+ } -+ path - -- ../modules -- # ../modules/common -- ]; -+ ../modules -+ # ../modules/common -+ ]; - }; - mkDeployHost = name: path: let - host_file = builtins.fromTOML (builtins.readFile path + "/host.toml"); -diff --git a/modules/by-name/ag/age/module.nix b/modules/by-name/ag/age/module.nix -index 9a498ab6..6eb0f9c4 100644 ---- a/modules/by-name/ag/age/module.nix -+++ b/modules/by-name/ag/age/module.nix -@@ -1,7 +1,7 @@ - { - config, - lib, -- modules, -+ extra_modules, - pkgs, - ... - }: let -@@ -12,7 +12,7 @@ in { - }; - - imports = [ -- modules.agenix.nixosModules.default -+ extra_modules.nixos.agenix - ]; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/bo/boot/module.nix b/modules/by-name/bo/boot/module.nix -index 86ad58da..8d3cbe5f 100644 ---- a/modules/by-name/bo/boot/module.nix -+++ b/modules/by-name/bo/boot/module.nix -@@ -11,7 +11,7 @@ - config, - lib, - pkgs, -- modules, -+ extra_modules, - modulesPath, - system, - specialArgs, -@@ -94,7 +94,7 @@ in { - }; - - imports = [ -- modules.lanzaboote.nixosModules.lanzaboote -+ extra_modules.nixos.lanzaboote - ]; - - config = lib.mkIf cfg.enable { -@@ -130,7 +130,7 @@ in { - lanzabooteInstallHook = import "${modulesPath}/../lib/eval-config.nix" { - inherit system specialArgs; - modules = [ -- modules.lanzaboote.nixosModules.lanzaboote -+ extra_modules.nixos.lanzaboote - - { - # Copy the relevant config into the eval-module context. -diff --git a/modules/by-name/di/disks/module.nix b/modules/by-name/di/disks/module.nix -index ed5c939a..0a46c402 100644 ---- a/modules/by-name/di/disks/module.nix -+++ b/modules/by-name/di/disks/module.nix -@@ -11,7 +11,7 @@ - config, - lib, - pkgs, -- modules, -+ extra_modules, - ... - }: let - cfg = config.soispha.disks; -@@ -42,7 +42,7 @@ in { - }; - - imports = [ -- modules.disko.nixosModules.default -+ extra_modules.nixos.disko - ]; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/ho/home-manager/module.nix b/modules/by-name/ho/home-manager/module.nix -index d7eccbd6..e20cfa6d 100644 ---- a/modules/by-name/ho/home-manager/module.nix -+++ b/modules/by-name/ho/home-manager/module.nix -@@ -11,7 +11,7 @@ - config, - lib, - system, -- modules, -+ extra_modules, - ... - }: let - cfg = config.soispha.home-manager; -@@ -21,7 +21,7 @@ in { - }; - - imports = [ -- modules.home-manager.nixosModules.home-manager -+ extra_modules.nixos.home-manager - ]; - - # TODO: Find a way to throw this error below, when a user `enable`s a home-manager -diff --git a/modules/by-name/im/impermanence/module.nix b/modules/by-name/im/impermanence/module.nix -index 0fbd7425..0de6f3e6 100644 ---- a/modules/by-name/im/impermanence/module.nix -+++ b/modules/by-name/im/impermanence/module.nix -@@ -1,7 +1,7 @@ - { - config, - lib, -- modules, -+ extra_modules, - ... - }: let - cfg = config.vhack.persist; -@@ -46,7 +46,7 @@ in { - }; - - imports = [ -- modules.impermanence.nixosModules.impermanence -+ extra_modules.nixos.impermanence - ]; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/ni/nix-index/module.nix b/modules/by-name/ni/nix-index/module.nix -index 72be6b52..269c6f95 100644 ---- a/modules/by-name/ni/nix-index/module.nix -+++ b/modules/by-name/ni/nix-index/module.nix -@@ -10,7 +10,7 @@ - { - config, - lib, -- modules, -+ extra_modules, - ... - }: let - cfg = config.soispha.programs.nix-index; -@@ -27,7 +27,7 @@ in { - - home-manager.users.soispha = { - imports = [ -- modules.nix-index-database.homeModules.nix-index -+ extra_modules.home.nix-index-database - ]; - - programs.nix-index = { -diff --git a/modules/by-name/nv/nvim/module.nix b/modules/by-name/nv/nvim/module.nix -index f6f9ba95..f6e2162e 100644 ---- a/modules/by-name/nv/nvim/module.nix -+++ b/modules/by-name/nv/nvim/module.nix -@@ -11,7 +11,7 @@ - pkgs, - lib, - config, -- modules, -+ extra_modules, - libraries, - ... - }: let -@@ -51,7 +51,7 @@ in { - - home-manager.users.soispha = { - imports = [ -- modules.nixvim.homeModules.nixvim -+ extra_modules.home.nixvim - ]; - - home.sessionVariables = { -diff --git a/tests/default.nix b/tests/default.nix -index 870ecfb5..6ab6b5fa 100644 ---- a/tests/default.nix -+++ b/tests/default.nix -@@ -1,6 +1,5 @@ - { - packageSets, -- extra_modules, - module_args, - special_args, - extra_lib, -@@ -86,12 +85,10 @@ - ]; - }; - name_server = {nodes, ...}: { -- imports = -- extra_modules -- ++ [ -- ./common/acme/client.nix -- ./common/dns/server.nix -- ]; -+ imports = [ -+ ./common/acme/client.nix -+ ./common/dns/server.nix -+ ]; - - vhack.dns.zones = let - mkDomain = attr: let -@@ -129,14 +126,12 @@ - - args.nodes - (builtins.mapAttrs (_: _: { -- imports = -- extra_modules -- ++ [ -- ./common/acme/client.nix -- ./common/dns/client.nix -+ imports = [ -+ ./common/acme/client.nix -+ ./common/dns/client.nix - -- ../modules -- ]; -+ ../modules -+ ]; - }) - args.nodes) - ]; -diff --git a/tests/old/by-name/nv/nvim-neorg/test.nix b/tests/old/by-name/nv/nvim-neorg/test.nix -index 9f160df5..82cb533d 100644 ---- a/tests/old/by-name/nv/nvim-neorg/test.nix -+++ b/tests/old/by-name/nv/nvim-neorg/test.nix -@@ -9,7 +9,7 @@ - # If not, see . - { - mkTest, -- extraModules, -+ extra_modules, - pkgs, - ... - }: -@@ -34,7 +34,7 @@ mkTest { - }; - home-manager.users.soispha = { - imports = [ -- extraModules.nixvim.homeManagerModule -+ extra_modules.home.nixvim - ]; - }; - }; -diff --git a/tests/old/infrastructure/default.nix b/tests/old/infrastructure/default.nix -index cd21198c..4696a99f 100644 ---- a/tests/old/infrastructure/default.nix -+++ b/tests/old/infrastructure/default.nix -@@ -47,7 +47,7 @@ nixos-lib.runTest { - machine = {config, ...}: { - imports = - [ -- extraModules.home-manager -+ extra_modules.home.home-manager - ../../modules/by-name/us/users/module.nix - ] - ++ configuration.imports; --- -2.55.0 - diff --git a/pkgs/by-name/ro/rollup/patches2/0003-modules-Always-use-extra_lib-also-for-options.mkEnab.patch b/pkgs/by-name/ro/rollup/patches2/0003-modules-Always-use-extra_lib-also-for-options.mkEnab.patch deleted file mode 100644 index c44f0ba8..00000000 --- a/pkgs/by-name/ro/rollup/patches2/0003-modules-Always-use-extra_lib-also-for-options.mkEnab.patch +++ /dev/null @@ -1,564 +0,0 @@ -From 82481ecb3850d7ec0bcd1dfee721600a2302a7ce Mon Sep 17 00:00:00 2001 -From: Benedikt Peetz -Date: Mon, 2 Nov 2026 15:10:37 +0100 -Subject: [PATCH 3/7] modules/*: Always use `extra_lib`, also for - `options.mkEnable` - ---- - modules/by-name/al/alacritty/module.nix | 4 ++-- - modules/by-name/au/ausweisapp/module.nix | 4 ++-- - modules/by-name/ca/calibre/module.nix | 4 ++-- - modules/by-name/ca/cargo/module.nix | 4 ++-- - modules/by-name/fo/foot/module.nix | 4 ++-- - modules/by-name/gt/gtk/module.nix | 4 ++-- - modules/by-name/hl/lhedger/module.nix | 4 ++-- - modules/by-name/ia/iamb/module.nix | 4 ++-- - modules/by-name/lf/lf/module.nix | 4 ++-- - modules/by-name/lu/lutris/module.nix | 4 ++-- - modules/by-name/ma/mandb/module.nix | 4 ++-- - modules/by-name/me/mergiraf/module.nix | 4 ++-- - modules/by-name/mp/mpdpopm/module.nix | 4 ++-- - modules/by-name/ni/nix/module.nix | 4 ++-- - modules/by-name/ni/nixos-option/module.nix | 4 ++-- - modules/by-name/nv/nvim/module.nix | 4 ++-- - modules/by-name/op/openssh/module.nix | 4 ++-- - modules/by-name/pi/pipewire/module.nix | 4 ++-- - modules/by-name/pl/plymouth/module.nix | 4 ++-- - modules/by-name/ri/river/keymap.nix | 2 +- - modules/by-name/ro/rofi/module.nix | 4 ++-- - modules/by-name/si/signal/module.nix | 4 ++-- - modules/by-name/so/sound/module.nix | 4 ++-- - modules/by-name/st/starship/module.nix | 4 ++-- - modules/by-name/sw/swaybg/module.nix | 4 ++-- - modules/by-name/sw/swayidle/module.nix | 4 ++-- - 26 files changed, 51 insertions(+), 51 deletions(-) - -diff --git a/modules/by-name/al/alacritty/module.nix b/modules/by-name/al/alacritty/module.nix -index 73860a57..74b938ec 100644 ---- a/modules/by-name/al/alacritty/module.nix -+++ b/modules/by-name/al/alacritty/module.nix -@@ -11,13 +11,13 @@ - config, - lib, - pkgs, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.alacritty; - in { - options.soispha.programs.alacritty = { -- enable = libraries.base.options.mkEnable "alacritty"; -+ enable = extra_lib.options.mkDefaultEnabled "alacritty"; - - package = lib.mkPackageOption pkgs "alacritty" {}; - }; -diff --git a/modules/by-name/au/ausweisapp/module.nix b/modules/by-name/au/ausweisapp/module.nix -index e74f3d91..93716ed9 100644 ---- a/modules/by-name/au/ausweisapp/module.nix -+++ b/modules/by-name/au/ausweisapp/module.nix -@@ -1,13 +1,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.ausweisapp; - in { - options.soispha.programs.ausweisapp = { -- enable = libraries.base.options.mkEnable "AusweisApp"; -+ enable = extra_lib.options.mkDefaultEnabled "AusweisApp"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/ca/calibre/module.nix b/modules/by-name/ca/calibre/module.nix -index 4188e360..76b245e0 100644 ---- a/modules/by-name/ca/calibre/module.nix -+++ b/modules/by-name/ca/calibre/module.nix -@@ -10,13 +10,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.calibre; - in { - options.soispha.programs.calibre = { -- enable = libraries.base.options.mkEnable "calibre"; -+ enable = extra_lib.options.mkDefaultEnabled "calibre"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/ca/cargo/module.nix b/modules/by-name/ca/cargo/module.nix -index 6b675a03..a4216020 100644 ---- a/modules/by-name/ca/cargo/module.nix -+++ b/modules/by-name/ca/cargo/module.nix -@@ -10,13 +10,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.cargo; - in { - options.soispha.programs.cargo = { -- enable = libraries.base.options.mkEnable "cargo"; -+ enable = extra_lib.options.mkDefaultEnabled "cargo"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/fo/foot/module.nix b/modules/by-name/fo/foot/module.nix -index 8d5cfe2b..d0189e21 100644 ---- a/modules/by-name/fo/foot/module.nix -+++ b/modules/by-name/fo/foot/module.nix -@@ -10,14 +10,14 @@ - { - config, - lib, -- libraries, -+ extra_lib, - pkgs, - ... - }: let - cfg = config.soispha.foot; - in { - options.soispha.foot = { -- enable = libraries.base.options.mkEnable "foot terminal"; -+ enable = extra_lib.options.mkDefaultEnabled "foot terminal"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/gt/gtk/module.nix b/modules/by-name/gt/gtk/module.nix -index 44442077..cfb000a0 100644 ---- a/modules/by-name/gt/gtk/module.nix -+++ b/modules/by-name/gt/gtk/module.nix -@@ -12,7 +12,7 @@ - pkgs, - lib, - packageSets, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.gtk; -@@ -20,7 +20,7 @@ - homeConfig = config.home-manager.users.soispha; - in { - options.soispha.gtk = { -- enable = libraries.base.options.mkEnable "gtk themes"; -+ enable = extra_lib.options.mkDefaultEnabled "gtk themes"; - }; - - config.home-manager.users.soispha = lib.mkIf cfg.enable { -diff --git a/modules/by-name/hl/lhedger/module.nix b/modules/by-name/hl/lhedger/module.nix -index 68de85d0..2a9a9e3a 100644 ---- a/modules/by-name/hl/lhedger/module.nix -+++ b/modules/by-name/hl/lhedger/module.nix -@@ -11,14 +11,14 @@ - config, - lib, - pkgs, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.hledger; - ledgerFile = "${config.home-manager.users.soispha.xdg.dataHome}/hledger/2025.journal"; - in { - options.soispha.hledger = { -- enable = libraries.base.options.mkEnable "hledger"; -+ enable = extra_lib.options.mkDefaultEnabled "hledger"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/ia/iamb/module.nix b/modules/by-name/ia/iamb/module.nix -index ef46f5e0..8b8697ac 100644 ---- a/modules/by-name/ia/iamb/module.nix -+++ b/modules/by-name/ia/iamb/module.nix -@@ -10,13 +10,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.iamb; - in { - options.soispha.programs.iamb = { -- enable = libraries.base.options.mkEnable "iamb"; -+ enable = extra_lib.options.mkDefaultEnabled "iamb"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/lf/lf/module.nix b/modules/by-name/lf/lf/module.nix -index 2d80f68e..9d9447d6 100644 ---- a/modules/by-name/lf/lf/module.nix -+++ b/modules/by-name/lf/lf/module.nix -@@ -14,7 +14,7 @@ - shell_library, - system, - lib, -- libraries, -+ extra_lib, - ... - }: let - real_commands = import ./commands {inherit pkgs sysLib shell_library system;}; -@@ -23,7 +23,7 @@ - # HACK: There is no (easy) way for me to make sure, that the `clearmaps` command is - # generated in the lf config before the keymapping commands. - # This command injection works around that. <2026-07-21> -- commands = libraries.extra.warnMerge real_commands { -+ commands = extra_lib.warnMerge real_commands { - __clearmaps_injection = '' - :{{ - clearmaps -diff --git a/modules/by-name/lu/lutris/module.nix b/modules/by-name/lu/lutris/module.nix -index 6864bacb..7772b269 100644 ---- a/modules/by-name/lu/lutris/module.nix -+++ b/modules/by-name/lu/lutris/module.nix -@@ -10,7 +10,7 @@ - { - lib, - config, -- libraries, -+ extra_lib, - pkgs, - ... - }: let -@@ -19,7 +19,7 @@ - inherit (config.home-manager.users.soispha.home) homeDirectory; - in { - options.soispha.programs.lutris = { -- enable = libraries.base.options.mkEnable "Lutris"; -+ enable = extra_lib.options.mkDefaultEnabled "Lutris"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/ma/mandb/module.nix b/modules/by-name/ma/mandb/module.nix -index 64d586db..83992729 100644 ---- a/modules/by-name/ma/mandb/module.nix -+++ b/modules/by-name/ma/mandb/module.nix -@@ -10,13 +10,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.services.mandb; - in { - options.soispha.services.mandb = { -- enable = libraries.base.options.mkEnable "mandb"; -+ enable = extra_lib.options.mkDefaultEnabled "mandb"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/me/mergiraf/module.nix b/modules/by-name/me/mergiraf/module.nix -index 693969e6..e1048ca1 100644 ---- a/modules/by-name/me/mergiraf/module.nix -+++ b/modules/by-name/me/mergiraf/module.nix -@@ -10,13 +10,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.mergiraf; - in { - options.soispha.programs.mergiraf = { -- enable = libraries.base.options.mkEnable "mergiraf"; -+ enable = extra_lib.options.mkDefaultEnabled "mergiraf"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/mp/mpdpopm/module.nix b/modules/by-name/mp/mpdpopm/module.nix -index 82943fe8..03529095 100644 ---- a/modules/by-name/mp/mpdpopm/module.nix -+++ b/modules/by-name/mp/mpdpopm/module.nix -@@ -10,7 +10,7 @@ - { - config, - pkgs, -- libraries, -+ extra_lib, - lib, - ... - }: let -@@ -19,7 +19,7 @@ - settingsFormat = pkgs.formats.json {}; - in { - options.soispha.services.mpdpopm = { -- enable = libraries.base.options.mkEnable "mpdpopm"; -+ enable = extra_lib.options.mkDefaultEnabled "mpdpopm"; - - settings = lib.mkOption { - # Setting this type allows for correct merging behavior -diff --git a/modules/by-name/ni/nix/module.nix b/modules/by-name/ni/nix/module.nix -index e46d6e85..11b2d7e4 100644 ---- a/modules/by-name/ni/nix/module.nix -+++ b/modules/by-name/ni/nix/module.nix -@@ -9,7 +9,7 @@ - # If not, see . - { - pkgs, -- libraries, -+ extra_lib, - config, - lib, - # flakes -@@ -56,7 +56,7 @@ - cfg = config.soispha.nix; - in { - options.soispha.nix = { -- enable = libraries.base.options.mkEnable "nix"; -+ enable = extra_lib.options.mkDefaultEnabled "nix"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/ni/nixos-option/module.nix b/modules/by-name/ni/nixos-option/module.nix -index 0053d357..3e41bd34 100644 ---- a/modules/by-name/ni/nixos-option/module.nix -+++ b/modules/by-name/ni/nixos-option/module.nix -@@ -1,13 +1,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.nixos-option; - in { - options.soispha.programs.nixos-option = { -- enable = libraries.base.options.mkEnable "nixos-option"; -+ enable = extra_lib.options.mkDefaultEnabled "nixos-option"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/nv/nvim/module.nix b/modules/by-name/nv/nvim/module.nix -index f6e2162e..e63c9565 100644 ---- a/modules/by-name/nv/nvim/module.nix -+++ b/modules/by-name/nv/nvim/module.nix -@@ -12,12 +12,12 @@ - lib, - config, - extra_modules, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.nvim; - -- plgs = builtins.attrValues (libraries.extra.mkByName { -+ plgs = builtins.attrValues (extra_lib.mkByName { - useShards = false; - baseDirectory = ./plgs; - fileName = "default.nix"; -diff --git a/modules/by-name/op/openssh/module.nix b/modules/by-name/op/openssh/module.nix -index 3182f7ba..e1464338 100644 ---- a/modules/by-name/op/openssh/module.nix -+++ b/modules/by-name/op/openssh/module.nix -@@ -1,13 +1,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.vhack.openssh; - in { - options.vhack.openssh = { -- enable = libraries.base.options.mkEnable "openssh"; -+ enable = extra_lib.options.mkDefaultEnabled "openssh"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/pi/pipewire/module.nix b/modules/by-name/pi/pipewire/module.nix -index 57610806..df8eca0a 100644 ---- a/modules/by-name/pi/pipewire/module.nix -+++ b/modules/by-name/pi/pipewire/module.nix -@@ -10,13 +10,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.pipewire; - in { - options.soispha.pipewire = { -- enable = libraries.base.options.mkEnable "pipewire and wireplumber"; -+ enable = extra_lib.options.mkDefaultEnabled "pipewire and wireplumber"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/pl/plymouth/module.nix b/modules/by-name/pl/plymouth/module.nix -index 5e4735b9..f64c9464 100644 ---- a/modules/by-name/pl/plymouth/module.nix -+++ b/modules/by-name/pl/plymouth/module.nix -@@ -11,13 +11,13 @@ - config, - pkgs, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.services.plymouth; - in { - options.soispha.services.plymouth = { -- enable = libraries.base.options.mkEnable "plymouth"; -+ enable = extra_lib.options.mkDefaultEnabled "plymouth"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/ri/river/keymap.nix b/modules/by-name/ri/river/keymap.nix -index 897d11df..feabf379 100644 ---- a/modules/by-name/ri/river/keymap.nix -+++ b/modules/by-name/ri/river/keymap.nix -@@ -1,7 +1,7 @@ - { - lib, - pkgs, -- libraries, -+ extra_lib, - config, - ... - }: let -diff --git a/modules/by-name/ro/rofi/module.nix b/modules/by-name/ro/rofi/module.nix -index f2b404d6..ac23b499 100644 ---- a/modules/by-name/ro/rofi/module.nix -+++ b/modules/by-name/ro/rofi/module.nix -@@ -10,13 +10,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.rofi; - in { - options.soispha.programs.rofi = { -- enable = libraries.base.options.mkEnable "rofi"; -+ enable = extra_lib.options.mkDefaultEnabled "rofi"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/si/signal/module.nix b/modules/by-name/si/signal/module.nix -index 0e9c4437..e7cef901 100644 ---- a/modules/by-name/si/signal/module.nix -+++ b/modules/by-name/si/signal/module.nix -@@ -1,13 +1,13 @@ - { - config, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.signal; - in { - options.soispha.signal = { -- enable = libraries.base.options.mkEnable "signal"; -+ enable = extra_lib.options.mkDefaultEnabled "signal"; - }; - config = lib.mkIf cfg.enable { - soispha.impermanence.userDirectories = [ -diff --git a/modules/by-name/so/sound/module.nix b/modules/by-name/so/sound/module.nix -index 06df63e5..67187ff3 100644 ---- a/modules/by-name/so/sound/module.nix -+++ b/modules/by-name/so/sound/module.nix -@@ -9,14 +9,14 @@ - # If not, see . - { - config, -- libraries, -+ extra_lib, - lib, - ... - }: let - cfg = config.soispha.sound; - in { - options.soispha.sound = { -- enable = libraries.base.options.mkEnable "sound based on pipewire"; -+ enable = extra_lib.options.mkDefaultEnabled "sound based on pipewire"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/st/starship/module.nix b/modules/by-name/st/starship/module.nix -index a271d645..903f97b6 100644 ---- a/modules/by-name/st/starship/module.nix -+++ b/modules/by-name/st/starship/module.nix -@@ -11,13 +11,13 @@ - lib, - pkgs, - config, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.starship; - in { - options.soispha.programs.starship = { -- enable = libraries.base.options.mkEnable "starship"; -+ enable = extra_lib.options.mkDefaultEnabled "starship"; - - showBattery = lib.mkOption { - type = lib.types.bool; -diff --git a/modules/by-name/sw/swaybg/module.nix b/modules/by-name/sw/swaybg/module.nix -index fa6a079a..216a0c59 100644 ---- a/modules/by-name/sw/swaybg/module.nix -+++ b/modules/by-name/sw/swaybg/module.nix -@@ -11,13 +11,13 @@ - config, - lib, - pkgs, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.swaybg; - in { - options.soispha.programs.swaybg = { -- enable = libraries.base.options.mkEnable "swaybg"; -+ enable = extra_lib.options.mkDefaultEnabled "swaybg"; - }; - - config = lib.mkIf cfg.enable { -diff --git a/modules/by-name/sw/swayidle/module.nix b/modules/by-name/sw/swayidle/module.nix -index 9bda534f..953ec83f 100644 ---- a/modules/by-name/sw/swayidle/module.nix -+++ b/modules/by-name/sw/swayidle/module.nix -@@ -11,14 +11,14 @@ - config, - pkgs, - lib, -- libraries, -+ extra_lib, - ... - }: let - cfg = config.soispha.programs.swayidle; - swaylock = lib.getExe pkgs.swaylock; - in { - options.soispha.programs.swayidle = { -- enable = libraries.base.options.mkEnable "swayidle"; -+ enable = extra_lib.options.mkDefaultEnabled "swayidle"; - }; - - config = lib.mkIf cfg.enable { --- -2.55.0 - diff --git a/pkgs/by-name/ro/rollup/patches2/0004-pkgs-Use-a-stable-unstable-marker-in-the-filename.patch b/pkgs/by-name/ro/rollup/patches2/0004-pkgs-Use-a-stable-unstable-marker-in-the-filename.patch deleted file mode 100644 index 9f275376..00000000 --- a/pkgs/by-name/ro/rollup/patches2/0004-pkgs-Use-a-stable-unstable-marker-in-the-filename.patch +++ /dev/null @@ -1,278 +0,0 @@ -From 4e606441932dfac2c99d12ed2fa2413c45d1dec6 Mon Sep 17 00:00:00 2001 -From: Benedikt Peetz -Date: Mon, 2 Nov 2026 19:53:17 +0100 -Subject: [PATCH 4/7] pkgs/*: Use a `stable`/`unstable` marker in the filename - ---- - .../aumo/{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.stable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../lock/{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../mpp/{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.stable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../sw/{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../{package.nix => package.unstable.nix} | 0 - .../tskm/{package.nix => package.unstable.nix} | 0 - .../yt/{package.nix => package.unstable.nix} | 0 - pkgs/default.nix | 18 +++++++++++------- - 40 files changed, 11 insertions(+), 7 deletions(-) - rename pkgs/by-name/au/aumo/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/ba/battery/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/be/beetsExtraPlugins/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/br/brightness/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/co/con2pdf/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/ct/ctpv-64-types/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/di/direnv-patched/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/fd/fd_list/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/fe/fetchmail-common-name/{package.nix => package.stable.nix} (100%) - rename pkgs/by-name/fi/fish-mk-maps/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/fi/fish-patched/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/fu/fupdate-flake/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/fu/fupdate-sys/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/fu/fupdate/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/gi/git-cgit/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/gi/git-cm/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/gi/git-edit-index/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/hi/hibernate/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/i3/i3bar-river-patched/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/lf/lf-make-map/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/lo/lock/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/mp/mpdpopm/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/mp/mpp-beetrm/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/mp/mpp-lyrics/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/mp/mpp-searchadd/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/mp/mpp/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/no/notify-run/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/qu/qutebrowser-patched/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/ri/river-mk-keymap/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/sc/screenshot_persistent/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/sc/screenshot_temporary/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/st/stalwart-mail-patched/{package.nix => package.stable.nix} (100%) - rename pkgs/by-name/st/stamp/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/sw/sw/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/sy/systemd-toggle/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/ta/tails-iso/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/tr/tree-sitter-yts/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/ts/tskm/{package.nix => package.unstable.nix} (100%) - rename pkgs/by-name/yt/yt/{package.nix => package.unstable.nix} (100%) - -diff --git a/pkgs/by-name/au/aumo/package.nix b/pkgs/by-name/au/aumo/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/au/aumo/package.nix -rename to pkgs/by-name/au/aumo/package.unstable.nix -diff --git a/pkgs/by-name/ba/battery/package.nix b/pkgs/by-name/ba/battery/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/ba/battery/package.nix -rename to pkgs/by-name/ba/battery/package.unstable.nix -diff --git a/pkgs/by-name/be/beetsExtraPlugins/package.nix b/pkgs/by-name/be/beetsExtraPlugins/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/be/beetsExtraPlugins/package.nix -rename to pkgs/by-name/be/beetsExtraPlugins/package.unstable.nix -diff --git a/pkgs/by-name/br/brightness/package.nix b/pkgs/by-name/br/brightness/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/br/brightness/package.nix -rename to pkgs/by-name/br/brightness/package.unstable.nix -diff --git a/pkgs/by-name/co/con2pdf/package.nix b/pkgs/by-name/co/con2pdf/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/co/con2pdf/package.nix -rename to pkgs/by-name/co/con2pdf/package.unstable.nix -diff --git a/pkgs/by-name/ct/ctpv-64-types/package.nix b/pkgs/by-name/ct/ctpv-64-types/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/ct/ctpv-64-types/package.nix -rename to pkgs/by-name/ct/ctpv-64-types/package.unstable.nix -diff --git a/pkgs/by-name/di/direnv-patched/package.nix b/pkgs/by-name/di/direnv-patched/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/di/direnv-patched/package.nix -rename to pkgs/by-name/di/direnv-patched/package.unstable.nix -diff --git a/pkgs/by-name/fd/fd_list/package.nix b/pkgs/by-name/fd/fd_list/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/fd/fd_list/package.nix -rename to pkgs/by-name/fd/fd_list/package.unstable.nix -diff --git a/pkgs/by-name/fe/fetchmail-common-name/package.nix b/pkgs/by-name/fe/fetchmail-common-name/package.stable.nix -similarity index 100% -rename from pkgs/by-name/fe/fetchmail-common-name/package.nix -rename to pkgs/by-name/fe/fetchmail-common-name/package.stable.nix -diff --git a/pkgs/by-name/fi/fish-mk-maps/package.nix b/pkgs/by-name/fi/fish-mk-maps/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/fi/fish-mk-maps/package.nix -rename to pkgs/by-name/fi/fish-mk-maps/package.unstable.nix -diff --git a/pkgs/by-name/fi/fish-patched/package.nix b/pkgs/by-name/fi/fish-patched/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/fi/fish-patched/package.nix -rename to pkgs/by-name/fi/fish-patched/package.unstable.nix -diff --git a/pkgs/by-name/fu/fupdate-flake/package.nix b/pkgs/by-name/fu/fupdate-flake/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/fu/fupdate-flake/package.nix -rename to pkgs/by-name/fu/fupdate-flake/package.unstable.nix -diff --git a/pkgs/by-name/fu/fupdate-sys/package.nix b/pkgs/by-name/fu/fupdate-sys/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/fu/fupdate-sys/package.nix -rename to pkgs/by-name/fu/fupdate-sys/package.unstable.nix -diff --git a/pkgs/by-name/fu/fupdate/package.nix b/pkgs/by-name/fu/fupdate/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/fu/fupdate/package.nix -rename to pkgs/by-name/fu/fupdate/package.unstable.nix -diff --git a/pkgs/by-name/gi/git-cgit/package.nix b/pkgs/by-name/gi/git-cgit/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/gi/git-cgit/package.nix -rename to pkgs/by-name/gi/git-cgit/package.unstable.nix -diff --git a/pkgs/by-name/gi/git-cm/package.nix b/pkgs/by-name/gi/git-cm/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/gi/git-cm/package.nix -rename to pkgs/by-name/gi/git-cm/package.unstable.nix -diff --git a/pkgs/by-name/gi/git-edit-index/package.nix b/pkgs/by-name/gi/git-edit-index/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/gi/git-edit-index/package.nix -rename to pkgs/by-name/gi/git-edit-index/package.unstable.nix -diff --git a/pkgs/by-name/hi/hibernate/package.nix b/pkgs/by-name/hi/hibernate/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/hi/hibernate/package.nix -rename to pkgs/by-name/hi/hibernate/package.unstable.nix -diff --git a/pkgs/by-name/i3/i3bar-river-patched/package.nix b/pkgs/by-name/i3/i3bar-river-patched/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/i3/i3bar-river-patched/package.nix -rename to pkgs/by-name/i3/i3bar-river-patched/package.unstable.nix -diff --git a/pkgs/by-name/lf/lf-make-map/package.nix b/pkgs/by-name/lf/lf-make-map/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/lf/lf-make-map/package.nix -rename to pkgs/by-name/lf/lf-make-map/package.unstable.nix -diff --git a/pkgs/by-name/lo/lock/package.nix b/pkgs/by-name/lo/lock/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/lo/lock/package.nix -rename to pkgs/by-name/lo/lock/package.unstable.nix -diff --git a/pkgs/by-name/mp/mpdpopm/package.nix b/pkgs/by-name/mp/mpdpopm/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/mp/mpdpopm/package.nix -rename to pkgs/by-name/mp/mpdpopm/package.unstable.nix -diff --git a/pkgs/by-name/mp/mpp-beetrm/package.nix b/pkgs/by-name/mp/mpp-beetrm/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/mp/mpp-beetrm/package.nix -rename to pkgs/by-name/mp/mpp-beetrm/package.unstable.nix -diff --git a/pkgs/by-name/mp/mpp-lyrics/package.nix b/pkgs/by-name/mp/mpp-lyrics/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/mp/mpp-lyrics/package.nix -rename to pkgs/by-name/mp/mpp-lyrics/package.unstable.nix -diff --git a/pkgs/by-name/mp/mpp-searchadd/package.nix b/pkgs/by-name/mp/mpp-searchadd/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/mp/mpp-searchadd/package.nix -rename to pkgs/by-name/mp/mpp-searchadd/package.unstable.nix -diff --git a/pkgs/by-name/mp/mpp/package.nix b/pkgs/by-name/mp/mpp/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/mp/mpp/package.nix -rename to pkgs/by-name/mp/mpp/package.unstable.nix -diff --git a/pkgs/by-name/no/notify-run/package.nix b/pkgs/by-name/no/notify-run/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/no/notify-run/package.nix -rename to pkgs/by-name/no/notify-run/package.unstable.nix -diff --git a/pkgs/by-name/qu/qutebrowser-patched/package.nix b/pkgs/by-name/qu/qutebrowser-patched/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/qu/qutebrowser-patched/package.nix -rename to pkgs/by-name/qu/qutebrowser-patched/package.unstable.nix -diff --git a/pkgs/by-name/ri/river-mk-keymap/package.nix b/pkgs/by-name/ri/river-mk-keymap/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/ri/river-mk-keymap/package.nix -rename to pkgs/by-name/ri/river-mk-keymap/package.unstable.nix -diff --git a/pkgs/by-name/sc/screenshot_persistent/package.nix b/pkgs/by-name/sc/screenshot_persistent/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/sc/screenshot_persistent/package.nix -rename to pkgs/by-name/sc/screenshot_persistent/package.unstable.nix -diff --git a/pkgs/by-name/sc/screenshot_temporary/package.nix b/pkgs/by-name/sc/screenshot_temporary/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/sc/screenshot_temporary/package.nix -rename to pkgs/by-name/sc/screenshot_temporary/package.unstable.nix -diff --git a/pkgs/by-name/st/stalwart-mail-patched/package.nix b/pkgs/by-name/st/stalwart-mail-patched/package.stable.nix -similarity index 100% -rename from pkgs/by-name/st/stalwart-mail-patched/package.nix -rename to pkgs/by-name/st/stalwart-mail-patched/package.stable.nix -diff --git a/pkgs/by-name/st/stamp/package.nix b/pkgs/by-name/st/stamp/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/st/stamp/package.nix -rename to pkgs/by-name/st/stamp/package.unstable.nix -diff --git a/pkgs/by-name/sw/sw/package.nix b/pkgs/by-name/sw/sw/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/sw/sw/package.nix -rename to pkgs/by-name/sw/sw/package.unstable.nix -diff --git a/pkgs/by-name/sy/systemd-toggle/package.nix b/pkgs/by-name/sy/systemd-toggle/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/sy/systemd-toggle/package.nix -rename to pkgs/by-name/sy/systemd-toggle/package.unstable.nix -diff --git a/pkgs/by-name/ta/tails-iso/package.nix b/pkgs/by-name/ta/tails-iso/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/ta/tails-iso/package.nix -rename to pkgs/by-name/ta/tails-iso/package.unstable.nix -diff --git a/pkgs/by-name/tr/tree-sitter-yts/package.nix b/pkgs/by-name/tr/tree-sitter-yts/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/tr/tree-sitter-yts/package.nix -rename to pkgs/by-name/tr/tree-sitter-yts/package.unstable.nix -diff --git a/pkgs/by-name/ts/tskm/package.nix b/pkgs/by-name/ts/tskm/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/ts/tskm/package.nix -rename to pkgs/by-name/ts/tskm/package.unstable.nix -diff --git a/pkgs/by-name/yt/yt/package.nix b/pkgs/by-name/yt/yt/package.unstable.nix -similarity index 100% -rename from pkgs/by-name/yt/yt/package.nix -rename to pkgs/by-name/yt/yt/package.unstable.nix -diff --git a/pkgs/default.nix b/pkgs/default.nix -index 4fdb94fe..bc7d70e7 100644 ---- a/pkgs/default.nix -+++ b/pkgs/default.nix -@@ -6,16 +6,20 @@ - inherit (unstable_pkgs) lib; - - mergePkgs = pkgs: lib.callPackageWith (extra_lib.warnMerge pkgs in_tree_pkgs "the ./pkgs/by-name set"); -- callPackageStable = lib.callPackageWith (mergePkgs stable_pkgs); -- callPackageUnstable = lib.callPackageWith (mergePkgs unstable_pkgs); -+ callPackageStable = mergePkgs stable_pkgs; -+ callPackageUnstable = mergePkgs unstable_pkgs; - - in_tree_pkgs = extra_lib.mkByName { - baseDirectory = ./by-name; -- fileName = "package.nix"; -- finalizeFunction = name: value: -- if value.stable -- then callPackageStable value.pkg {} -- else callPackageUnstable value.pkg {}; -+ fileRegex = "package.(stable|unstable).nix"; -+ finalizeFunction = name: pkgPathList: let -+ # When specifying a regex `mkByName` returns a list of candidates. -+ # But we know, that there can only be one. -+ pkgPath = builtins.head pkgPathList; -+ in -+ if (builtins.match "(stable)" (builtins.baseNameOf pkgPath)) == ["stable"] -+ then callPackageStable pkgPath {} -+ else callPackageUnstable pkgPath {}; - }; - in - in_tree_pkgs --- -2.55.0 - diff --git a/pkgs/by-name/ro/rollup/patches2/0004-rename b/pkgs/by-name/ro/rollup/patches2/0004-rename new file mode 100644 index 00000000..9f275376 --- /dev/null +++ b/pkgs/by-name/ro/rollup/patches2/0004-rename @@ -0,0 +1,278 @@ +From 4e606441932dfac2c99d12ed2fa2413c45d1dec6 Mon Sep 17 00:00:00 2001 +From: Benedikt Peetz +Date: Mon, 2 Nov 2026 19:53:17 +0100 +Subject: [PATCH 4/7] pkgs/*: Use a `stable`/`unstable` marker in the filename + +--- + .../aumo/{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.stable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../lock/{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../mpp/{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.stable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../sw/{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../{package.nix => package.unstable.nix} | 0 + .../tskm/{package.nix => package.unstable.nix} | 0 + .../yt/{package.nix => package.unstable.nix} | 0 + pkgs/default.nix | 18 +++++++++++------- + 40 files changed, 11 insertions(+), 7 deletions(-) + rename pkgs/by-name/au/aumo/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/ba/battery/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/be/beetsExtraPlugins/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/br/brightness/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/co/con2pdf/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/ct/ctpv-64-types/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/di/direnv-patched/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/fd/fd_list/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/fe/fetchmail-common-name/{package.nix => package.stable.nix} (100%) + rename pkgs/by-name/fi/fish-mk-maps/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/fi/fish-patched/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/fu/fupdate-flake/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/fu/fupdate-sys/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/fu/fupdate/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/gi/git-cgit/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/gi/git-cm/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/gi/git-edit-index/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/hi/hibernate/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/i3/i3bar-river-patched/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/lf/lf-make-map/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/lo/lock/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/mp/mpdpopm/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/mp/mpp-beetrm/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/mp/mpp-lyrics/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/mp/mpp-searchadd/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/mp/mpp/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/no/notify-run/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/qu/qutebrowser-patched/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/ri/river-mk-keymap/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/sc/screenshot_persistent/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/sc/screenshot_temporary/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/st/stalwart-mail-patched/{package.nix => package.stable.nix} (100%) + rename pkgs/by-name/st/stamp/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/sw/sw/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/sy/systemd-toggle/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/ta/tails-iso/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/tr/tree-sitter-yts/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/ts/tskm/{package.nix => package.unstable.nix} (100%) + rename pkgs/by-name/yt/yt/{package.nix => package.unstable.nix} (100%) + +diff --git a/pkgs/by-name/au/aumo/package.nix b/pkgs/by-name/au/aumo/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/au/aumo/package.nix +rename to pkgs/by-name/au/aumo/package.unstable.nix +diff --git a/pkgs/by-name/ba/battery/package.nix b/pkgs/by-name/ba/battery/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/ba/battery/package.nix +rename to pkgs/by-name/ba/battery/package.unstable.nix +diff --git a/pkgs/by-name/be/beetsExtraPlugins/package.nix b/pkgs/by-name/be/beetsExtraPlugins/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/be/beetsExtraPlugins/package.nix +rename to pkgs/by-name/be/beetsExtraPlugins/package.unstable.nix +diff --git a/pkgs/by-name/br/brightness/package.nix b/pkgs/by-name/br/brightness/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/br/brightness/package.nix +rename to pkgs/by-name/br/brightness/package.unstable.nix +diff --git a/pkgs/by-name/co/con2pdf/package.nix b/pkgs/by-name/co/con2pdf/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/co/con2pdf/package.nix +rename to pkgs/by-name/co/con2pdf/package.unstable.nix +diff --git a/pkgs/by-name/ct/ctpv-64-types/package.nix b/pkgs/by-name/ct/ctpv-64-types/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/ct/ctpv-64-types/package.nix +rename to pkgs/by-name/ct/ctpv-64-types/package.unstable.nix +diff --git a/pkgs/by-name/di/direnv-patched/package.nix b/pkgs/by-name/di/direnv-patched/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/di/direnv-patched/package.nix +rename to pkgs/by-name/di/direnv-patched/package.unstable.nix +diff --git a/pkgs/by-name/fd/fd_list/package.nix b/pkgs/by-name/fd/fd_list/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/fd/fd_list/package.nix +rename to pkgs/by-name/fd/fd_list/package.unstable.nix +diff --git a/pkgs/by-name/fe/fetchmail-common-name/package.nix b/pkgs/by-name/fe/fetchmail-common-name/package.stable.nix +similarity index 100% +rename from pkgs/by-name/fe/fetchmail-common-name/package.nix +rename to pkgs/by-name/fe/fetchmail-common-name/package.stable.nix +diff --git a/pkgs/by-name/fi/fish-mk-maps/package.nix b/pkgs/by-name/fi/fish-mk-maps/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/fi/fish-mk-maps/package.nix +rename to pkgs/by-name/fi/fish-mk-maps/package.unstable.nix +diff --git a/pkgs/by-name/fi/fish-patched/package.nix b/pkgs/by-name/fi/fish-patched/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/fi/fish-patched/package.nix +rename to pkgs/by-name/fi/fish-patched/package.unstable.nix +diff --git a/pkgs/by-name/fu/fupdate-flake/package.nix b/pkgs/by-name/fu/fupdate-flake/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/fu/fupdate-flake/package.nix +rename to pkgs/by-name/fu/fupdate-flake/package.unstable.nix +diff --git a/pkgs/by-name/fu/fupdate-sys/package.nix b/pkgs/by-name/fu/fupdate-sys/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/fu/fupdate-sys/package.nix +rename to pkgs/by-name/fu/fupdate-sys/package.unstable.nix +diff --git a/pkgs/by-name/fu/fupdate/package.nix b/pkgs/by-name/fu/fupdate/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/fu/fupdate/package.nix +rename to pkgs/by-name/fu/fupdate/package.unstable.nix +diff --git a/pkgs/by-name/gi/git-cgit/package.nix b/pkgs/by-name/gi/git-cgit/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/gi/git-cgit/package.nix +rename to pkgs/by-name/gi/git-cgit/package.unstable.nix +diff --git a/pkgs/by-name/gi/git-cm/package.nix b/pkgs/by-name/gi/git-cm/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/gi/git-cm/package.nix +rename to pkgs/by-name/gi/git-cm/package.unstable.nix +diff --git a/pkgs/by-name/gi/git-edit-index/package.nix b/pkgs/by-name/gi/git-edit-index/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/gi/git-edit-index/package.nix +rename to pkgs/by-name/gi/git-edit-index/package.unstable.nix +diff --git a/pkgs/by-name/hi/hibernate/package.nix b/pkgs/by-name/hi/hibernate/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/hi/hibernate/package.nix +rename to pkgs/by-name/hi/hibernate/package.unstable.nix +diff --git a/pkgs/by-name/i3/i3bar-river-patched/package.nix b/pkgs/by-name/i3/i3bar-river-patched/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/i3/i3bar-river-patched/package.nix +rename to pkgs/by-name/i3/i3bar-river-patched/package.unstable.nix +diff --git a/pkgs/by-name/lf/lf-make-map/package.nix b/pkgs/by-name/lf/lf-make-map/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/lf/lf-make-map/package.nix +rename to pkgs/by-name/lf/lf-make-map/package.unstable.nix +diff --git a/pkgs/by-name/lo/lock/package.nix b/pkgs/by-name/lo/lock/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/lo/lock/package.nix +rename to pkgs/by-name/lo/lock/package.unstable.nix +diff --git a/pkgs/by-name/mp/mpdpopm/package.nix b/pkgs/by-name/mp/mpdpopm/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/mp/mpdpopm/package.nix +rename to pkgs/by-name/mp/mpdpopm/package.unstable.nix +diff --git a/pkgs/by-name/mp/mpp-beetrm/package.nix b/pkgs/by-name/mp/mpp-beetrm/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/mp/mpp-beetrm/package.nix +rename to pkgs/by-name/mp/mpp-beetrm/package.unstable.nix +diff --git a/pkgs/by-name/mp/mpp-lyrics/package.nix b/pkgs/by-name/mp/mpp-lyrics/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/mp/mpp-lyrics/package.nix +rename to pkgs/by-name/mp/mpp-lyrics/package.unstable.nix +diff --git a/pkgs/by-name/mp/mpp-searchadd/package.nix b/pkgs/by-name/mp/mpp-searchadd/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/mp/mpp-searchadd/package.nix +rename to pkgs/by-name/mp/mpp-searchadd/package.unstable.nix +diff --git a/pkgs/by-name/mp/mpp/package.nix b/pkgs/by-name/mp/mpp/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/mp/mpp/package.nix +rename to pkgs/by-name/mp/mpp/package.unstable.nix +diff --git a/pkgs/by-name/no/notify-run/package.nix b/pkgs/by-name/no/notify-run/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/no/notify-run/package.nix +rename to pkgs/by-name/no/notify-run/package.unstable.nix +diff --git a/pkgs/by-name/qu/qutebrowser-patched/package.nix b/pkgs/by-name/qu/qutebrowser-patched/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/qu/qutebrowser-patched/package.nix +rename to pkgs/by-name/qu/qutebrowser-patched/package.unstable.nix +diff --git a/pkgs/by-name/ri/river-mk-keymap/package.nix b/pkgs/by-name/ri/river-mk-keymap/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/ri/river-mk-keymap/package.nix +rename to pkgs/by-name/ri/river-mk-keymap/package.unstable.nix +diff --git a/pkgs/by-name/sc/screenshot_persistent/package.nix b/pkgs/by-name/sc/screenshot_persistent/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/sc/screenshot_persistent/package.nix +rename to pkgs/by-name/sc/screenshot_persistent/package.unstable.nix +diff --git a/pkgs/by-name/sc/screenshot_temporary/package.nix b/pkgs/by-name/sc/screenshot_temporary/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/sc/screenshot_temporary/package.nix +rename to pkgs/by-name/sc/screenshot_temporary/package.unstable.nix +diff --git a/pkgs/by-name/st/stalwart-mail-patched/package.nix b/pkgs/by-name/st/stalwart-mail-patched/package.stable.nix +similarity index 100% +rename from pkgs/by-name/st/stalwart-mail-patched/package.nix +rename to pkgs/by-name/st/stalwart-mail-patched/package.stable.nix +diff --git a/pkgs/by-name/st/stamp/package.nix b/pkgs/by-name/st/stamp/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/st/stamp/package.nix +rename to pkgs/by-name/st/stamp/package.unstable.nix +diff --git a/pkgs/by-name/sw/sw/package.nix b/pkgs/by-name/sw/sw/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/sw/sw/package.nix +rename to pkgs/by-name/sw/sw/package.unstable.nix +diff --git a/pkgs/by-name/sy/systemd-toggle/package.nix b/pkgs/by-name/sy/systemd-toggle/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/sy/systemd-toggle/package.nix +rename to pkgs/by-name/sy/systemd-toggle/package.unstable.nix +diff --git a/pkgs/by-name/ta/tails-iso/package.nix b/pkgs/by-name/ta/tails-iso/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/ta/tails-iso/package.nix +rename to pkgs/by-name/ta/tails-iso/package.unstable.nix +diff --git a/pkgs/by-name/tr/tree-sitter-yts/package.nix b/pkgs/by-name/tr/tree-sitter-yts/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/tr/tree-sitter-yts/package.nix +rename to pkgs/by-name/tr/tree-sitter-yts/package.unstable.nix +diff --git a/pkgs/by-name/ts/tskm/package.nix b/pkgs/by-name/ts/tskm/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/ts/tskm/package.nix +rename to pkgs/by-name/ts/tskm/package.unstable.nix +diff --git a/pkgs/by-name/yt/yt/package.nix b/pkgs/by-name/yt/yt/package.unstable.nix +similarity index 100% +rename from pkgs/by-name/yt/yt/package.nix +rename to pkgs/by-name/yt/yt/package.unstable.nix +diff --git a/pkgs/default.nix b/pkgs/default.nix +index 4fdb94fe..bc7d70e7 100644 +--- a/pkgs/default.nix ++++ b/pkgs/default.nix +@@ -6,16 +6,20 @@ + inherit (unstable_pkgs) lib; + + mergePkgs = pkgs: lib.callPackageWith (extra_lib.warnMerge pkgs in_tree_pkgs "the ./pkgs/by-name set"); +- callPackageStable = lib.callPackageWith (mergePkgs stable_pkgs); +- callPackageUnstable = lib.callPackageWith (mergePkgs unstable_pkgs); ++ callPackageStable = mergePkgs stable_pkgs; ++ callPackageUnstable = mergePkgs unstable_pkgs; + + in_tree_pkgs = extra_lib.mkByName { + baseDirectory = ./by-name; +- fileName = "package.nix"; +- finalizeFunction = name: value: +- if value.stable +- then callPackageStable value.pkg {} +- else callPackageUnstable value.pkg {}; ++ fileRegex = "package.(stable|unstable).nix"; ++ finalizeFunction = name: pkgPathList: let ++ # When specifying a regex `mkByName` returns a list of candidates. ++ # But we know, that there can only be one. ++ pkgPath = builtins.head pkgPathList; ++ in ++ if (builtins.match "(stable)" (builtins.baseNameOf pkgPath)) == ["stable"] ++ then callPackageStable pkgPath {} ++ else callPackageUnstable pkgPath {}; + }; + in + in_tree_pkgs +-- +2.55.0 + diff --git a/pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch b/pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch deleted file mode 100644 index 242115be..00000000 --- a/pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch +++ /dev/null @@ -1,1098 +0,0 @@ -From 1daf25c665a1abf14f060f0599d156d84a04d825 Mon Sep 17 00:00:00 2001 -From: Benedikt Peetz -Date: Mon, 2 Nov 2026 19:55:32 +0100 -Subject: [PATCH 5/7] modules/*: Fix various name mistakes and other issues - ---- - hosts/by-name/apzu/configuration.nix | 32 +++++------ - hosts/by-name/tiamat/configuration.nix | 43 ++++++++------- - modules/by-name/ad/adb/module.nix | 2 +- - modules/by-name/at/atuin/module.nix | 9 ++- - modules/by-name/au/ausweisapp/module.nix | 2 +- - modules/by-name/ba/backup/module.nix | 29 ++++++++-- - modules/by-name/bl/bluetooth/module.nix | 2 +- - modules/by-name/bo/boot/module.nix | 2 +- - modules/by-name/ca/calibre/module.nix | 2 +- - modules/by-name/co/constants/module.nix | 4 ++ - modules/by-name/di/direnv/module.nix | 4 +- - modules/by-name/fi/fish/keymappings.nix | 22 ++++---- - modules/by-name/fw/fwupd/module.nix | 4 +- - modules/by-name/ia/iamb/module.nix | 2 +- - modules/by-name/im/impermanence/module.nix | 12 ++-- - modules/by-name/lu/lutris/module.nix | 5 +- - modules/by-name/ma/mail/module.nix | 18 ++++-- - modules/by-name/ma/mandb/module.nix | 4 +- - modules/by-name/mp/mpv/module.nix | 2 +- - modules/by-name/ms/msr/module.nix | 2 +- - modules/by-name/ne/networking/module.nix | 8 +-- - modules/by-name/ni/nixpkgs/module.nix | 9 ++- - modules/by-name/nv/nvim/module.nix | 2 +- - .../nv/nvim/plgs/lsp/servers/servers/ltex.nix | 2 + - modules/by-name/ol/ollama/module.nix | 2 +- - modules/by-name/pi/pipewire/module.nix | 2 +- - modules/by-name/po/polkit/module.nix | 2 +- - modules/by-name/pr/printing/module.nix | 8 +-- - modules/by-name/ri/river/keymap.nix | 6 +- - modules/by-name/ri/river/module.nix | 4 +- - modules/by-name/ro/rocie/module.nix | 5 ++ - modules/by-name/si/signal/module.nix | 2 +- - modules/by-name/so/sound/module.nix | 4 +- - modules/by-name/ss/ssh/module.nix | 52 +++--------------- - modules/by-name/us/users/module.nix | 4 +- - modules/by-name/wa/waydroid/module.nix | 2 +- - modules/by-name/xd/xdg/module.nix | 2 +- - modules/common/{ => soispha}/default.nix | 55 +++++++++---------- - .../common/{ => soispha}/hooks/default.nix | 0 - .../hooks/scripts/sync-git-repo.sh | 0 - modules/common/{ => soispha}/projects.json | 0 - .../{ => soispha}/projects.json.license | 0 - 42 files changed, 195 insertions(+), 178 deletions(-) - rename modules/common/{ => soispha}/default.nix (90%) - rename modules/common/{ => soispha}/hooks/default.nix (100%) - rename modules/common/{ => soispha}/hooks/scripts/sync-git-repo.sh (100%) - rename modules/common/{ => soispha}/projects.json (100%) - rename modules/common/{ => soispha}/projects.json.license (100%) - -diff --git a/hosts/by-name/apzu/configuration.nix b/hosts/by-name/apzu/configuration.nix -index a27688ba..fe5be0af 100644 ---- a/hosts/by-name/apzu/configuration.nix -+++ b/hosts/by-name/apzu/configuration.nix -@@ -10,8 +10,23 @@ - {...}: { - imports = [ - ./hardware.nix -+ ../../../modules/common/soispha - ]; - -+ vhack.users = { -+ enable = true; -+ users = [ -+ { -+ name = "soispha"; -+ groups = ["wheel" "audio"]; -+ enableDeprecatedPlugdev = true; -+ uid = 1000; -+ sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIME4ZVa+IoZf6T3U08JG93i6QIAJ4amm7mkBzO14JSkz"; -+ hashedPassword = "$y$jFT$3qI9MYLDHPUdGKsVa8skV0$TOjX0SFHWuj52zd7/kmkNtG5EqQwYcqv0FKXWbLaro6"; -+ } -+ ]; -+ }; -+ - soispha = { - bluetooth.enable = true; - -@@ -20,10 +35,6 @@ - enable = true; - }; - -- impermanence.directories = [ -- "/var/log" -- ]; -- - power.enable = true; - - programs = { -@@ -55,19 +66,6 @@ - enable = true; - systemName = "x86_64-linux"; - }; -- users = { -- enable = true; -- users = [ -- { -- name = "soispha"; -- groups = ["wheel" "audio"]; -- enableDeprecatedPlugdev = true; -- uid = 1000; -- sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIME4ZVa+IoZf6T3U08JG93i6QIAJ4amm7mkBzO14JSkz"; -- hashedPassword = "$y$jFT$3qI9MYLDHPUdGKsVa8skV0$TOjX0SFHWuj52zd7/kmkNtG5EqQwYcqv0FKXWbLaro6"; -- } -- ]; -- }; - }; - - system.stateVersion = "23.05"; -diff --git a/hosts/by-name/tiamat/configuration.nix b/hosts/by-name/tiamat/configuration.nix -index 35378aa9..462bbe9a 100644 ---- a/hosts/by-name/tiamat/configuration.nix -+++ b/hosts/by-name/tiamat/configuration.nix -@@ -10,13 +10,33 @@ - { - lib, - system, -- externalBinaries, -+ sources, - ... - }: { - imports = [ - ./hardware.nix - ]; - -+ vhack = { -+ # TODO: Hard-code all the uids/gids <2025-05-13> -+ persist.directories = [ -+ "/var/lib/nixos" -+ ]; -+ users = { -+ enable = true; -+ users = [ -+ { -+ name = "soispha"; -+ groups = ["wheel" "audio"]; -+ enableDeprecatedPlugdev = true; -+ uid = 1000; -+ sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIME4ZVa+IoZf6T3U08JG93i6QIAJ4amm7mkBzO14JSkz"; -+ hashedPassword = "$y$jFT$qi3wS9njrMl2y55b3NOBI0$j40Qt6AAkMSfZ82KPhqMaUaPztWtPps1wOqaXaF/L.6"; -+ } -+ ]; -+ }; -+ }; -+ - soispha = { - bluetooth = {enable = true;}; - networking = { -@@ -29,12 +49,6 @@ - systemName = "x86_64-linux"; - }; - -- # TODO: Hard-code all the uids/gids <2025-05-13> -- impermanence.directories = [ -- "/var/lib/nixos" -- "/var/log" -- ]; -- - services = { - unison.foreign.address = "apzu.fritz.box"; - }; -@@ -48,7 +62,7 @@ - # Support Unicode input - "" = [ - "spawn" -- "${lib.getExe externalBinaries.qmk_firmware.packages.${system}.qmk_unicode_type} 106 65377" -+ "${lib.getExe sources.qmk_firmware.packages.${system}.qmk_unicode_type} 106 65377" - ]; - }; - }; -@@ -66,19 +80,6 @@ - enable = true; - keyMap = "us"; - }; -- users = { -- enable = true; -- users = [ -- { -- name = "soispha"; -- groups = ["wheel" "audio"]; -- enableDeprecatedPlugdev = true; -- uid = 1000; -- sshKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIME4ZVa+IoZf6T3U08JG93i6QIAJ4amm7mkBzO14JSkz"; -- hashedPassword = "$y$jFT$qi3wS9njrMl2y55b3NOBI0$j40Qt6AAkMSfZ82KPhqMaUaPztWtPps1wOqaXaF/L.6"; -- } -- ]; -- }; - }; - - system.stateVersion = "23.05"; -diff --git a/modules/by-name/ad/adb/module.nix b/modules/by-name/ad/adb/module.nix -index 89cb1439..9d07a5be 100644 ---- a/modules/by-name/ad/adb/module.nix -+++ b/modules/by-name/ad/adb/module.nix -@@ -32,7 +32,7 @@ in { - - users = { - users."${cfg.user}".extraGroups = ["adbusers"]; -- groups.adbusers.gid = config.soispha.constants.ids.gids.adbusers; -+ groups.adbusers.gid = config.vhack.constants.ids.gids.adbusers; - }; - }; - } -diff --git a/modules/by-name/at/atuin/module.nix b/modules/by-name/at/atuin/module.nix -index d68e830c..b9e9645a 100644 ---- a/modules/by-name/at/atuin/module.nix -+++ b/modules/by-name/at/atuin/module.nix -@@ -10,12 +10,15 @@ - { - config, - lib, -- externalBinaries, -- system, -+ extra_modules, - ... - }: let - cfg = config.soispha.programs.atuin; - in { -+ imports = [ -+ extra_modules.nixos.turtle -+ ]; -+ - options.soispha.programs.atuin = { - enable = lib.mkEnableOption "atuin"; - -@@ -47,7 +50,7 @@ in { - - home-manager.users.soispha = { - imports = [ -- externalBinaries.turtle.nixosModules.home-manager -+ extra_modules.home.turtle - ]; - - programs.turtle = { -diff --git a/modules/by-name/au/ausweisapp/module.nix b/modules/by-name/au/ausweisapp/module.nix -index 93716ed9..ee3e8917 100644 ---- a/modules/by-name/au/ausweisapp/module.nix -+++ b/modules/by-name/au/ausweisapp/module.nix -@@ -11,7 +11,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanence.userDirectories = [ -+ vhack.persist.userDirectories.soispha = [ - ".config/AusweisApp" - ]; - soispha.services.unison.pathsToSync = [ -diff --git a/modules/by-name/ba/backup/module.nix b/modules/by-name/ba/backup/module.nix -index ca7a469c..7ac6e081 100644 ---- a/modules/by-name/ba/backup/module.nix -+++ b/modules/by-name/ba/backup/module.nix -@@ -113,10 +113,31 @@ in { - }; - }; - -- vhack.programs.ssh = lib.mkIf cfg.storagebox.enable { -- enable = true; -- rootKnownHosts = { -- "[${cfg.storagebox.user}.your-storagebox.de]:23" = cfg.storagebox.sshHostKey; -+ systemd.tmpfiles.settings = lib.mkIf cfg.storagebox.enable { -+ "10-backup-module" = { -+ "/root/.ssh/config".f = let -+ knownHostsFile = pkgs.writeTextFile { -+ name = "known-hosts-file"; -+ text = '' -+ [${cfg.storagebox.user}.your-storagebox.de]:23 ${cfg.storagebox.sshHostKey} -+ ''; -+ }; -+ in { -+ group = "root"; -+ user = "root"; -+ mode = "0755"; -+ -+ # Don't try to authenticate via password for these, because we need to use the -+ # forced commands, and they are only provided via the ssh key login. -+ # So password login is a footgun (it is, however, valid to use it for non-root -+ # use-cases) -+ argument = '' -+ Host *.your-storagebox.de -+ PasswordAuthentication no -+ Port 23 -+ UserKnownHostsFile ${knownHostsFile} -+ ''; -+ }; - }; - }; - -diff --git a/modules/by-name/bl/bluetooth/module.nix b/modules/by-name/bl/bluetooth/module.nix -index 7750e70d..14f47129 100644 ---- a/modules/by-name/bl/bluetooth/module.nix -+++ b/modules/by-name/bl/bluetooth/module.nix -@@ -19,7 +19,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanence.directories = [ -+ vhack.persist.directories = [ - "/var/lib/bluetooth" - ]; - -diff --git a/modules/by-name/bo/boot/module.nix b/modules/by-name/bo/boot/module.nix -index 8d3cbe5f..f26ce8f7 100644 ---- a/modules/by-name/bo/boot/module.nix -+++ b/modules/by-name/bo/boot/module.nix -@@ -100,7 +100,7 @@ in { - config = lib.mkIf cfg.enable { - # This should only be necessary for `lanzaboote`, but that is the current default in - # this module. -- soispha.impermanence.directories = [ -+ vhack.persist.directories = [ - "/var/lib/sbctl" - ]; - -diff --git a/modules/by-name/ca/calibre/module.nix b/modules/by-name/ca/calibre/module.nix -index 76b245e0..f56c8490 100644 ---- a/modules/by-name/ca/calibre/module.nix -+++ b/modules/by-name/ca/calibre/module.nix -@@ -20,7 +20,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanence.userDirectories = [ -+ vhack.persist.userDirectories.soispha = [ - ".config/calibre" - ]; - soispha.services.unison.pathsToSync = [ -diff --git a/modules/by-name/co/constants/module.nix b/modules/by-name/co/constants/module.nix -index de094cdd..51bf68b7 100644 ---- a/modules/by-name/co/constants/module.nix -+++ b/modules/by-name/co/constants/module.nix -@@ -68,6 +68,10 @@ - nm-iodine = 354; - fwupd-refresh = 355; - avahi = 356; -+ adbusers = 357; -+ lpadmin = 358; -+ msr = 359; -+ polkituser = 360; - - # As per the NixOS file, the uids should not be greater or equal to 400; - }; -diff --git a/modules/by-name/di/direnv/module.nix b/modules/by-name/di/direnv/module.nix -index 97e56827..e868ebba 100644 ---- a/modules/by-name/di/direnv/module.nix -+++ b/modules/by-name/di/direnv/module.nix -@@ -17,14 +17,14 @@ - cfg = config.soispha.programs.direnv; - direnvCfg = config.home-manager.users.soispha.programs.direnv; - -- inherit (sources) devshells nixpkgs; -+ inherit (sources) devshells nixpkgs-unstable; - - pre-cache = pkgs.runCommand "pre-cache.sh" {} '' - cat "${./pre-cache.sh}" > $out - - substituteInPlace $out \ - --replace-fail "%DEVSHELLS_REPO%" "${devshells}" \ -- --replace-fail "%DEVSHELLS_REPO_REF%" "${devshells.sourceInfo.rev}.${builtins.readFile "${nixpkgs}/.git-revision"}" -+ --replace-fail "%DEVSHELLS_REPO_REF%" "${devshells.sourceInfo.rev}.${builtins.readFile "${nixpkgs-unstable}/.git-revision"}" - ''; - - landrun-fish = pkgs.writeShellApplication { -diff --git a/modules/by-name/fi/fish/keymappings.nix b/modules/by-name/fi/fish/keymappings.nix -index fe9ab86e..187c5d5a 100644 ---- a/modules/by-name/fi/fish/keymappings.nix -+++ b/modules/by-name/fi/fish/keymappings.nix -@@ -227,7 +227,7 @@ in { - cmd = "__fish_man_page"; - sets_mode_to = "default"; - }; -- "\\e\\[1\;9A" = { -+ "\\e\\[1\\;9A" = { - cmd = "history-token-search-backward"; - sets_mode_to = "default"; - }; -@@ -305,7 +305,7 @@ in { - cmd = "fish_clipboard_copy"; - sets_mode_to = "default"; - }; -- "\\e\\[1\;9D" = { -+ "\\e\\[1\\;9D" = { - cmd = "prevd-or-backward-word"; - sets_mode_to = "default"; - }; -@@ -349,7 +349,7 @@ in { - cmd = "commandline -i \\n (commandline --search-field >/dev/null && echo --search-field) expand-abbr"; - sets_mode_to = "default"; - }; -- "\\e\\[1\;9B" = { -+ "\\e\\[1\\;9B" = { - cmd = "history-token-search-forward"; - sets_mode_to = "default"; - }; -@@ -490,10 +490,10 @@ in { - }; - }; - "default" = { -- # "\\e\\[1\;9A" = {cmd = "history-token-search-backward";}; -- # "\\e\\[1\;9B" = {cmd = "history-token-search-forward";}; -- # "\\e\\[1\;9C" = {cmd = "nextd-or-forward-word";}; -- # "\\e\\[1\;9D" = {cmd = "prevd-or-backward-word";}; -+ # "\\e\\[1\\;9A" = {cmd = "history-token-search-backward";}; -+ # "\\e\\[1\\;9B" = {cmd = "history-token-search-forward";}; -+ # "\\e\\[1\\;9C" = {cmd = "nextd-or-forward-word";}; -+ # "\\e\\[1\\;9D" = {cmd = "prevd-or-backward-word";}; - - "down" = {cmd = "down-or-search";}; - "ctrl-y" = {cmd = "yank";}; -@@ -1015,7 +1015,7 @@ in { - cmd = "kill-whole-line end-selection repaint-mode"; - sets_mode_to = "default"; - }; -- "\\e\\[1\;9B" = { -+ "\\e\\[1\\;9B" = { - cmd = "history-token-search-forward"; - sets_mode_to = "default"; - }; -@@ -1051,11 +1051,11 @@ in { - cmd = "end-selection repaint-mode"; - sets_mode_to = "default"; - }; -- "\\e\\[1\;9D" = { -+ "\\e\\[1\\;9D" = { - cmd = "prevd-or-backward-word"; - sets_mode_to = "default"; - }; -- "\\e\\[1\;9C" = { -+ "\\e\\[1\\;9C" = { - cmd = "nextd-or-forward-word"; - sets_mode_to = "default"; - }; -@@ -1099,7 +1099,7 @@ in { - cmd = "__fish_whatis_current_token"; - sets_mode_to = "default"; - }; -- "\\e\\[1\;9A" = { -+ "\\e\\[1\\;9A" = { - cmd = "history-token-search-backward"; - sets_mode_to = "default"; - }; -diff --git a/modules/by-name/fw/fwupd/module.nix b/modules/by-name/fw/fwupd/module.nix -index 7252c170..4a58101a 100644 ---- a/modules/by-name/fw/fwupd/module.nix -+++ b/modules/by-name/fw/fwupd/module.nix -@@ -22,8 +22,8 @@ in { - services.fwupd.enable = true; - - users = { -- users.fwupd-refresh.uid = config.soispha.constants.ids.uids.fwupd-refresh; -- groups.fwupd-refresh.gid = config.soispha.constants.ids.gids.fwupd-refresh; -+ users.fwupd-refresh.uid = config.vhack.constants.ids.uids.fwupd-refresh; -+ groups.fwupd-refresh.gid = config.vhack.constants.ids.gids.fwupd-refresh; - }; - }; - } -diff --git a/modules/by-name/ia/iamb/module.nix b/modules/by-name/ia/iamb/module.nix -index 8b8697ac..ee466d4e 100644 ---- a/modules/by-name/ia/iamb/module.nix -+++ b/modules/by-name/ia/iamb/module.nix -@@ -20,7 +20,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanence.userDirectories = [ -+ vhack.persist.userDirectories.soispha = [ - ".config/iamb/profiles" - ]; - -diff --git a/modules/by-name/im/impermanence/module.nix b/modules/by-name/im/impermanence/module.nix -index 0de6f3e6..a0c308d5 100644 ---- a/modules/by-name/im/impermanence/module.nix -+++ b/modules/by-name/im/impermanence/module.nix -@@ -6,11 +6,11 @@ - }: let - cfg = config.vhack.persist; - -- userDirectories = lib.debug.traceValSeqN 2 (lib.mapAttrs (_: dirs: { -- directories = -- dirs; -+ userDirectories = -+ lib.mapAttrs (_: dirs: { -+ directories = dirs; - }) -- cfg.userDirectories); -+ cfg.userDirectories; - in { - options.vhack.persist = { - enable = lib.mkEnableOption "persisting directories and files with impermanence"; -@@ -30,7 +30,7 @@ in { - }; - - userDirectories = lib.mkOption { -- type = lib.attrsOf lib.types.listOf (lib.types.either lib.types.str (lib.types.submodule { -+ type = lib.types.attrsOf (lib.types.listOf (lib.types.either lib.types.str (lib.types.submodule { - options = { - directory = lib.mkOption { - type = lib.types.str; -@@ -39,7 +39,7 @@ in { - type = lib.types.str; - }; - }; -- })); -+ }))); - default = []; - description = "The directories to persist, for each user."; - }; -diff --git a/modules/by-name/lu/lutris/module.nix b/modules/by-name/lu/lutris/module.nix -index 7772b269..54f8f955 100644 ---- a/modules/by-name/lu/lutris/module.nix -+++ b/modules/by-name/lu/lutris/module.nix -@@ -23,7 +23,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanence.userDirectories = [ -+ vhack.persist.userDirectories.soispha = [ - ".config/lutris" - ]; - soispha.services.unison.pathsToSync = [ -@@ -33,6 +33,9 @@ in { - "${homeDirectory}/.local/share/lutris/install" - ]; - -+ # For some reason `lutris` depends on `gtk+-2`. -+ soispha.nixpkgs.problemHandlers."gtk+".broken = "warn"; -+ - # TODO: This should also have something, to avoid giving the games network access: 'https://github.com/lutris/docs/blob/master/DisableNetworkAccess.md' <2026-07-10> - home-manager.users.soispha = { - programs.lutris = { -diff --git a/modules/by-name/ma/mail/module.nix b/modules/by-name/ma/mail/module.nix -index e4cb83cc..540dc1fa 100644 ---- a/modules/by-name/ma/mail/module.nix -+++ b/modules/by-name/ma/mail/module.nix -@@ -1,10 +1,15 @@ - { - config, - lib, -+ extra_modules, - ... - }: let - cfg = config.vhack.mail; - in { -+ imports = [ -+ extra_modules.nixos.simple-nixos-mailserver -+ ]; -+ - options.vhack.mail = { - enable = lib.mkEnableOption "sophisticated mail setup with simple-nixos-mailserver"; - fqdn = lib.mkOption { -@@ -323,11 +328,14 @@ in { - - dkim = let - dkimKeys = -- builtins.mapAttrs (name: value: { -- selectors."mail".keyFile = -- value.dkimPrivateKeyPath; -- }) -- cfg.security.dkimKeys; -+ if cfg.security.dkimKeys == null -+ then {} -+ else -+ builtins.mapAttrs (name: value: { -+ selectors."mail".keyFile = -+ value.dkimPrivateKeyPath; -+ }) -+ cfg.security.dkimKeys; - in { - domains = lib.mkIf (cfg.security.dkimKeys != null) dkimKeys; - keyDirectory = lib.mkIf (cfg.security.dkimKeys == null) "/var/lib/mail/dkim"; -diff --git a/modules/by-name/ma/mandb/module.nix b/modules/by-name/ma/mandb/module.nix -index 83992729..a2467070 100644 ---- a/modules/by-name/ma/mandb/module.nix -+++ b/modules/by-name/ma/mandb/module.nix -@@ -21,8 +21,8 @@ in { - - config = lib.mkIf cfg.enable { - users = { -- users.mandb.uid = config.soispha.constants.ids.uids.mandb; -- groups.mandb.gid = config.soispha.constants.ids.gids.mandb; -+ users.mandb.uid = config.vhack.constants.ids.uids.mandb; -+ groups.mandb.gid = config.vhack.constants.ids.gids.mandb; - }; - }; - } -diff --git a/modules/by-name/mp/mpv/module.nix b/modules/by-name/mp/mpv/module.nix -index fed2074d..6843b4fd 100644 ---- a/modules/by-name/mp/mpv/module.nix -+++ b/modules/by-name/mp/mpv/module.nix -@@ -23,7 +23,7 @@ in { - soispha.services.unison.pathsToSync = [ - "~/.local/state/mpv" - ]; -- soispha.impermanance.userDirectories = [ -+ vhack.persist.userDirectories.soispha = [ - ".local/state/mpv" - ]; - -diff --git a/modules/by-name/ms/msr/module.nix b/modules/by-name/ms/msr/module.nix -index 521b3a40..4aa02b9c 100644 ---- a/modules/by-name/ms/msr/module.nix -+++ b/modules/by-name/ms/msr/module.nix -@@ -11,7 +11,7 @@ in { - - config = lib.mkIf cfg.enable { - users = { -- groups.msr.gid = config.soispha.constants.ids.gids.msr; -+ groups.msr.gid = config.vhack.constants.ids.gids.msr; - }; - }; - } -diff --git a/modules/by-name/ne/networking/module.nix b/modules/by-name/ne/networking/module.nix -index 075a1a5a..94c50af0 100644 ---- a/modules/by-name/ne/networking/module.nix -+++ b/modules/by-name/ne/networking/module.nix -@@ -96,7 +96,7 @@ in { - }; - }; - -- soispha.impermanence.directories = [ -+ vhack.persist.directories = [ - "/etc/NetworkManager" - ]; - users = { -@@ -104,11 +104,11 @@ in { - "${cfg.userName}".extraGroups = [ - "networkmanager" # allows to configure NetworkManager as this user - ]; -- nm-iodine.uid = config.soispha.constants.ids.uids.nm-iodine; -- wpa_supplicant.uid = config.soispha.constants.ids.uids.wpa_supplicant; -+ nm-iodine.uid = config.vhack.constants.ids.uids.nm-iodine; -+ wpa_supplicant.uid = config.vhack.constants.ids.uids.wpa_supplicant; - }; - groups = { -- wpa_supplicant.gid = config.soispha.constants.ids.gids.wpa_supplicant; -+ wpa_supplicant.gid = config.vhack.constants.ids.gids.wpa_supplicant; - }; - }; - }) -diff --git a/modules/by-name/ni/nixpkgs/module.nix b/modules/by-name/ni/nixpkgs/module.nix -index 1ded8444..2971c0e3 100644 ---- a/modules/by-name/ni/nixpkgs/module.nix -+++ b/modules/by-name/ni/nixpkgs/module.nix -@@ -27,10 +27,15 @@ in { - example = "[ steam steam-unwrapped ]"; - type = lib.types.listOf lib.types.str; - }; -+ problemHandlers = lib.mkOption { -+ description = "Decide how to handle a package marked with problems."; -+ example = "{ \"gtk+\".broken = \"warn\"; }"; -+ type = lib.types.attrsOf (lib.types.attrsOf lib.types.anything); -+ }; - }; - - config = let -- myPkgsOverlay = self: super: packageSets.soispha; -+ myPkgsOverlay = self: super: packageSets.in_tree; - in - lib.mkIf cfg.enable - { -@@ -44,6 +49,8 @@ in { - config = { - hostSystem = cfg.systemName; - -+ problems.handlers = cfg.problemHandlers; -+ - allowUnfreePredicate = pkg: - builtins.elem (lib.getName pkg) cfg.unfreePackageNames; - }; -diff --git a/modules/by-name/nv/nvim/module.nix b/modules/by-name/nv/nvim/module.nix -index e63c9565..17cc8dcc 100644 ---- a/modules/by-name/nv/nvim/module.nix -+++ b/modules/by-name/nv/nvim/module.nix -@@ -45,7 +45,7 @@ in { - soispha.services.unison.pathsToSync = [ - "~/.local/state/nvim" - ]; -- soispha.impermanence.userDiretories = [ -+ vhack.persist.userDirectories.soispha = [ - ".local/state/nvim" - ]; - -diff --git a/modules/by-name/nv/nvim/plgs/lsp/servers/servers/ltex.nix b/modules/by-name/nv/nvim/plgs/lsp/servers/servers/ltex.nix -index e55cf377..5c0024f0 100644 ---- a/modules/by-name/nv/nvim/plgs/lsp/servers/servers/ltex.nix -+++ b/modules/by-name/nv/nvim/plgs/lsp/servers/servers/ltex.nix -@@ -10,6 +10,7 @@ - { - config, - lib, -+ pkgs, - ... - }: let - cfg = config.soispha.programs.nvim; -@@ -41,6 +42,7 @@ in { - ]; - in { - enable = true; -+ package = pkgs.ltex-ls-plus; - inherit filetypes; - settings = { - enabled = filetypes; -diff --git a/modules/by-name/ol/ollama/module.nix b/modules/by-name/ol/ollama/module.nix -index f819c035..ebc1fbf9 100644 ---- a/modules/by-name/ol/ollama/module.nix -+++ b/modules/by-name/ol/ollama/module.nix -@@ -19,7 +19,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanence.directories = [ -+ vhack.persist.directories = [ - # Set the mode to 700, so that it is private enough for systemd. - { - directory = "/var/lib/private"; -diff --git a/modules/by-name/pi/pipewire/module.nix b/modules/by-name/pi/pipewire/module.nix -index df8eca0a..5bec816d 100644 ---- a/modules/by-name/pi/pipewire/module.nix -+++ b/modules/by-name/pi/pipewire/module.nix -@@ -20,7 +20,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanence.userDirectories = [ -+ vhack.persist.userDirectories.soispha = [ - ".local/state/wireplumber" - ]; - }; -diff --git a/modules/by-name/po/polkit/module.nix b/modules/by-name/po/polkit/module.nix -index d8dd51b0..ae9dc775 100644 ---- a/modules/by-name/po/polkit/module.nix -+++ b/modules/by-name/po/polkit/module.nix -@@ -21,6 +21,6 @@ in { - config = lib.mkIf cfg.enable { - security.polkit.enable = true; - -- users.groups.polkituser.gid = config.soispha.constants.ids.gids.polkituser; -+ users.groups.polkituser.gid = config.vhack.constants.ids.gids.polkituser; - }; - } -diff --git a/modules/by-name/pr/printing/module.nix b/modules/by-name/pr/printing/module.nix -index 2e230570..bd554856 100644 ---- a/modules/by-name/pr/printing/module.nix -+++ b/modules/by-name/pr/printing/module.nix -@@ -19,7 +19,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanence.directories = [ -+ vhack.persist.directories = [ - "/var/lib/cups" - ]; - -@@ -31,9 +31,9 @@ in { - }; - - users = { -- users.avahi.uid = config.soispha.constants.ids.uids.avahi; -- groups.avahi.gid = config.soispha.constants.ids.gids.avahi; -- groups.lpadmin.gid = config.soispha.constants.ids.gids.lpadmin; -+ users.avahi.uid = config.vhack.constants.ids.uids.avahi; -+ groups.avahi.gid = config.vhack.constants.ids.gids.avahi; -+ groups.lpadmin.gid = config.vhack.constants.ids.gids.lpadmin; - }; - - services.printing = { -diff --git a/modules/by-name/ri/river/keymap.nix b/modules/by-name/ri/river/keymap.nix -index feabf379..af16da26 100644 ---- a/modules/by-name/ri/river/keymap.nix -+++ b/modules/by-name/ri/river/keymap.nix -@@ -5,7 +5,7 @@ - config, - ... - }: let -- index2tag = input: builtins.toString (libraries.base.pow 2 (input - 1)); -+ index2tag = input: builtins.toString (extra_lib.math.pow 2 (input - 1)); - - mkTagCommand = name: index: [name (index2tag index)]; - mkSpawn' = pkg: binaryName: args: further: (further -@@ -94,7 +94,7 @@ in { - "T" = ["send-to-output" "next"]; - "N" = ["send-to-output" "previous"]; - -- "0" = ["set-view-tags" (builtins.toString ((libraries.base.pow 2 32) - 1))]; -+ "0" = ["set-view-tags" (builtins.toString ((extra_lib.math.pow 2 32) - 1))]; - "p" = ["send-to-previous-tags"]; - - "1" = mkTagCommand "set-view-tags" 1; -@@ -132,7 +132,7 @@ in { - "T" = ["focus-output" "next"]; - "N" = ["focus-output" "previous"]; - -- "0" = ["set-focused-tags" (builtins.toString ((libraries.base.pow 2 32) - 1))]; -+ "0" = ["set-focused-tags" (builtins.toString ((extra_lib.math.pow 2 32) - 1))]; - "p" = ["focus-previous-tags"]; - - "1" = mkTagCommand "set-focused-tags" 1; -diff --git a/modules/by-name/ri/river/module.nix b/modules/by-name/ri/river/module.nix -index f9ecea0f..a381e897 100644 ---- a/modules/by-name/ri/river/module.nix -+++ b/modules/by-name/ri/river/module.nix -@@ -12,7 +12,7 @@ - lib, - system, - pkgs, -- externalBinaries, -+ sources, - ... - }: let - cfg = config.soispha.programs.river; -@@ -200,7 +200,7 @@ in { - ]; - - config = lib.mkIf cfg.enable { -- services.udev.packages = lib.mkIf cfg.unicodeInput.enable [externalBinaries.qmk_firmware.packages.${system}.qmk_unicode_type]; -+ services.udev.packages = lib.mkIf cfg.unicodeInput.enable [sources.qmk_firmware.packages.${system}.qmk_unicode_type]; - - home-manager.users.soispha = { - xdg.desktopEntries."river" = { -diff --git a/modules/by-name/ro/rocie/module.nix b/modules/by-name/ro/rocie/module.nix -index 1e419b82..54af3f40 100644 ---- a/modules/by-name/ro/rocie/module.nix -+++ b/modules/by-name/ro/rocie/module.nix -@@ -1,11 +1,16 @@ - { - config, - lib, -+ extra_modules, - ... - }: let - cfg = config.vhack.rocie; - data = "/var/lib/rocie"; - in { -+ imports = [ -+ extra_modules.nixos.rocie -+ ]; -+ - options.vhack.rocie = { - enable = lib.mkEnableOption "Rocie integration into vhack.eu"; - -diff --git a/modules/by-name/si/signal/module.nix b/modules/by-name/si/signal/module.nix -index e7cef901..4506517f 100644 ---- a/modules/by-name/si/signal/module.nix -+++ b/modules/by-name/si/signal/module.nix -@@ -10,7 +10,7 @@ in { - enable = extra_lib.options.mkDefaultEnabled "signal"; - }; - config = lib.mkIf cfg.enable { -- soispha.impermanence.userDirectories = [ -+ vhack.persist.userDirectories.soispha = [ - ".config/Signal" - ]; - }; -diff --git a/modules/by-name/so/sound/module.nix b/modules/by-name/so/sound/module.nix -index 67187ff3..732a78e2 100644 ---- a/modules/by-name/so/sound/module.nix -+++ b/modules/by-name/so/sound/module.nix -@@ -32,8 +32,8 @@ in { - }; - - users = { -- users.rtkit.uid = config.soispha.constants.ids.uids.rtkit; -- groups.rtkit.gid = config.soispha.constants.ids.gids.rtkit; -+ users.rtkit.uid = config.vhack.constants.ids.uids.rtkit; -+ groups.rtkit.gid = config.vhack.constants.ids.gids.rtkit; - }; - - # TODO: Find a better way to set the default volume <2024-03-10> -diff --git a/modules/by-name/ss/ssh/module.nix b/modules/by-name/ss/ssh/module.nix -index 39c203fd..6926547e 100644 ---- a/modules/by-name/ss/ssh/module.nix -+++ b/modules/by-name/ss/ssh/module.nix -@@ -29,53 +29,19 @@ - in { - options.soispha.programs.ssh = { - enable = lib.mkEnableOption "ssh config"; -- rootKnownHosts = lib.mkOption { -- type = lib.types.attrsOf lib.types.str; -- description = '' -- An attrset of keys (the domain) and values (the host key.) -- These are only applied to the root user. -- ''; -- default = {}; -- apply = value: -- builtins.concatStringsSep "\n" -- (lib.attrsets.mapAttrsToList (hostName: hostKey: "${hostName} ${hostKey}") value); -- }; - }; - - config = lib.mkIf cfg.enable { -- home-manager.users = { -- root.programs.ssh = { -- enable = true; -- enableDefaultConfig = false; -+ home-manager.users.soispha.programs.ssh = { -+ enable = true; -+ enableDefaultConfig = false; - -- settings = { -- "Host *" = mkDefaultMatchBlock ( -- builtins.toString (pkgs.writeTextFile { -- name = "root-known-hosts"; -- text = cfg.rootKnownHosts; -- }) -- ); -- "Host *.your-storagebox.de" = { -- # Don't try to authenticate via password for these, because we need to use the -- # forced commands, and they are only provided via the ssh key login. -- # So password login is a footgun (it is, however, valid to use it for non-root -- # use-cases) -- PasswordAuthentication = false; -- }; -- }; -- }; -- -- soispha.programs.ssh = { -- enable = true; -- enableDefaultConfig = false; -- -- settings = { -- "Host *" = mkDefaultMatchBlock "${config.home-manager.users.soispha.xdg.dataHome}/ssh/known_hosts"; -- "Host *.your-storagebox.de" = { -- # Port 22 is for sftp, and when we connect as user, we probably want an -- # interactive shell. -- Port = 23; -- }; -+ settings = { -+ "Host *" = mkDefaultMatchBlock "${config.home-manager.users.soispha.xdg.dataHome}/ssh/known_hosts"; -+ "Host *.your-storagebox.de" = { -+ # Port 22 is for sftp, and when we connect as user, we probably want an -+ # interactive shell. -+ Port = 23; - }; - }; - }; -diff --git a/modules/by-name/us/users/module.nix b/modules/by-name/us/users/module.nix -index 0f84b58b..b7f6297f 100644 ---- a/modules/by-name/us/users/module.nix -+++ b/modules/by-name/us/users/module.nix -@@ -11,6 +11,8 @@ - hashedPassword, - uid, - sshKey, -+ groups, -+ enableDeprecatedPlugdev, - }: { - inherit name; - value = { -@@ -18,7 +20,7 @@ - isNormalUser = true; - createHome = true; - home = "/home/${name}"; -- extraGroups = cfg.groups ++ lib.optional cfg.enableDeprecatedPlugdev "plugdev"; -+ extraGroups = groups ++ lib.optional enableDeprecatedPlugdev "plugdev"; - openssh.authorizedKeys.keys = [ - sshKey - ]; -diff --git a/modules/by-name/wa/waydroid/module.nix b/modules/by-name/wa/waydroid/module.nix -index a55ccf90..aa4e1911 100644 ---- a/modules/by-name/wa/waydroid/module.nix -+++ b/modules/by-name/wa/waydroid/module.nix -@@ -21,7 +21,7 @@ in { - # FIXME: Running `waydroid session start` causes all fuse mounts instances to coredump <2023-09-02> - # Thus this setting must be false. - virtualisation.waydroid.enable = false; -- soispha.impermanence.directories = [ -+ vhack.persist.directories = [ - "/var/lib/waydroid" - ]; - }; -diff --git a/modules/by-name/xd/xdg/module.nix b/modules/by-name/xd/xdg/module.nix -index 21f18874..92bb3059 100644 ---- a/modules/by-name/xd/xdg/module.nix -+++ b/modules/by-name/xd/xdg/module.nix -@@ -49,7 +49,7 @@ in { - }; - - config = lib.mkIf cfg.enable { -- soispha.impermanance.userDirectories = [ -+ vhack.persist.userDirectories.soispha = [ - ".local/share" - ".cache" - -diff --git a/modules/common/default.nix b/modules/common/soispha/default.nix -similarity index 90% -rename from modules/common/default.nix -rename to modules/common/soispha/default.nix -index facc9e9f..9d6038cb 100644 ---- a/modules/common/default.nix -+++ b/modules/common/soispha/default.nix -@@ -17,19 +17,34 @@ - }: { - # TODO(@bpeetz): Move this file to default options in their respective modules. <2025-05-31> - -- home-manager.users = { -- soispha.home = { -- username = "soispha"; -- homeDirectory = config.users.users.soispha.home; -- stateVersion = "23.05"; -- enableNixpkgsReleaseCheck = true; -+ home-manager.users.soispha.home = { -+ username = "soispha"; -+ homeDirectory = config.users.users.soispha.home; -+ stateVersion = "23.05"; -+ enableNixpkgsReleaseCheck = true; -+ }; -+ -+ vhack = { -+ postgresql.enable = false; -+ persist = { -+ enable = true; -+ -+ directories = [ -+ "/etc/nixos" -+ "/var/lib/systemd" -+ "/var/log" -+ ]; - }; - -- root.home = { -- username = "root"; -- homeDirectory = config.users.users.root.home; -- stateVersion = "23.05"; -- enableNixpkgsReleaseCheck = true; -+ services.backup = { -+ storagebox = { -+ enable = lib.mkDefault true; -+ user = "u459143-sub1"; -+ sshHostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIICf9svRenC/PLKIL9nk6K/pxQgoiFC41wTNvoIncOxs"; -+ }; -+ local = { -+ enable = lib.mkDefault true; -+ }; - }; - }; - -@@ -48,14 +63,6 @@ - enable = lib.mkDefault true; - }; - home-manager.enable = true; -- impermanence = { -- enable = true; -- -- directories = [ -- "/etc/nixos" -- "/var/lib/systemd" -- ]; -- }; - - polkit.enable = true; - xdg.enable = true; -@@ -65,15 +72,6 @@ - enable = true; - user = "soispha"; - }; -- backup = { -- storagebox = { -- enable = lib.mkDefault true; -- user = "u459143-sub1"; -- }; -- local = { -- enable = lib.mkDefault true; -- }; -- }; - fwupd.enable = true; - mako.enable = true; - mpd = { -@@ -92,7 +90,6 @@ - }; - }; - ollama.enable = false; -- postgresql.enable = false; - printing.enable = true; - scanning.enable = true; - snapper.enable = true; -diff --git a/modules/common/hooks/default.nix b/modules/common/soispha/hooks/default.nix -similarity index 100% -rename from modules/common/hooks/default.nix -rename to modules/common/soispha/hooks/default.nix -diff --git a/modules/common/hooks/scripts/sync-git-repo.sh b/modules/common/soispha/hooks/scripts/sync-git-repo.sh -similarity index 100% -rename from modules/common/hooks/scripts/sync-git-repo.sh -rename to modules/common/soispha/hooks/scripts/sync-git-repo.sh -diff --git a/modules/common/projects.json b/modules/common/soispha/projects.json -similarity index 100% -rename from modules/common/projects.json -rename to modules/common/soispha/projects.json -diff --git a/modules/common/projects.json.license b/modules/common/soispha/projects.json.license -similarity index 100% -rename from modules/common/projects.json.license -rename to modules/common/soispha/projects.json.license --- -2.55.0 - diff --git a/pkgs/by-name/ro/rollup/patches2/0006-lib-Merge-with-the-extraLib.patch b/pkgs/by-name/ro/rollup/patches2/0006-lib-Merge-with-the-extraLib.patch deleted file mode 100644 index 1cca069c..00000000 --- a/pkgs/by-name/ro/rollup/patches2/0006-lib-Merge-with-the-extraLib.patch +++ /dev/null @@ -1,145 +0,0 @@ -From b30b9eed670d9f02eccb1120f18cbf084caf32f0 Mon Sep 17 00:00:00 2001 -From: Benedikt Peetz -Date: Mon, 2 Nov 2026 19:56:15 +0100 -Subject: [PATCH 6/7] lib: Merge with the `extraLib` - ---- - lib/default.nix | 126 ------------------------------------------------ - 1 file changed, 126 deletions(-) - delete mode 100644 lib/default.nix - -diff --git a/lib/default.nix b/lib/default.nix -deleted file mode 100644 -index 1cdbf936..00000000 ---- a/lib/default.nix -+++ /dev/null -@@ -1,126 +0,0 @@ --# nixos-config - My current NixOS configuration --# --# Copyright (C) 2025 Benedikt Peetz --# SPDX-License-Identifier: GPL-3.0-or-later --# --# This file is part of my nixos-config. --# --# You should have received a copy of the License along with this program. --# If not, see . --{lib}: rec { -- /* -- Converts `number` from a binary number to a decimal one. -- -- The input is indented to be a number composed only of `1`s and `0` (e.g., 10010.) -- -- # Type -- -- binaryToDecimal :: Int -> Int -- -- # Arguments -- -- number -- : The sequence of `1`s and `0`s defining a binary number, in little endian. -- -- # Examples -- -- binaryToDecimal 1001 -- => 9 -- */ -- binaryToDecimal = number: let -- binaryList = -- builtins.map lib.strings.toInt (lib.lists.reverseList (lib.strings.stringToCharacters (builtins.toString number))); -- in -- builtins.foldl' (acc: num: acc + num) 0 -- (lib.lists.imap0 (index: elem: elem * (pow 2 index)) binaryList); -- -- /* -- Converts `string` to a (probably) unique numerical id. -- -- This is achieved by hashing the string and returning the first six hex-digits -- converted to a base 10 number. -- -- # Type -- -- idFromString :: String -> Int -- -- # Arguments -- -- string -- : The string to use as seed for the id generation. -- -- # Examples -- -- idFromString "3d-printer" -- => 10365713 -- */ -- idFromString = string: let -- inputSeed = -- builtins.concatStringsSep "" -- (lib.lists.take 6 -- (lib.strings.stringToCharacters (builtins.hashString "sha256" string))); -- in -- lib.trivial.fromHexString inputSeed; -- -- /* -- source: https://github.com/NixOS/nix/issues/10387#issuecomment-2494597690 -- -- Raises the `base` to the power of `power`. -- -- Considering the small input size and the lack of a built-in power function [2], -- this naive power implementation should satisfy reasonable performance -- requirements. -- -- Due to the lack of a modulo and bitwise AND operator, it is questionable whether -- the recursive exponentiation by squaring [1] implementation would even be -- faster. -- -- [1]: https://en.wikipedia.org/wiki/Exponentiation_by_squaring -- [2]: https://github.com/NixOS/nix/issues/10387 -- -- # Type -- -- pow :: Number -> Number -> Number -- -- # Arguments -- -- base -- : The base number to be raised. -- -- power -- : The exponent to raise `base` to. -- -- # Examples -- -- pow 2 5 -- => 32 -- */ -- pow = base: power: -- if power == 0 -- then 1 -- else if power > 0 -- then (base * (pow base (power - 1))) -- else builtins.throw "Negative powers are not supported"; -- -- options = { -- /* -- Generate an enable option definition, that defaults to true. -- -- This conveniently allows the composition of a “common” module set. -- -- # Type -- -- mkEnable :: String -> AttrSet -- -- # Arguments -- -- name -- : The name to use in the option description. -- */ -- mkEnable = name: -- (lib.mkEnableOption name) -- // { -- default = true; -- }; -- }; --} --- -2.55.0 - diff --git a/pkgs/by-name/ro/rollup/patches2/0006-remove b/pkgs/by-name/ro/rollup/patches2/0006-remove new file mode 100644 index 00000000..1cca069c --- /dev/null +++ b/pkgs/by-name/ro/rollup/patches2/0006-remove @@ -0,0 +1,145 @@ +From b30b9eed670d9f02eccb1120f18cbf084caf32f0 Mon Sep 17 00:00:00 2001 +From: Benedikt Peetz +Date: Mon, 2 Nov 2026 19:56:15 +0100 +Subject: [PATCH 6/7] lib: Merge with the `extraLib` + +--- + lib/default.nix | 126 ------------------------------------------------ + 1 file changed, 126 deletions(-) + delete mode 100644 lib/default.nix + +diff --git a/lib/default.nix b/lib/default.nix +deleted file mode 100644 +index 1cdbf936..00000000 +--- a/lib/default.nix ++++ /dev/null +@@ -1,126 +0,0 @@ +-# nixos-config - My current NixOS configuration +-# +-# Copyright (C) 2025 Benedikt Peetz +-# SPDX-License-Identifier: GPL-3.0-or-later +-# +-# This file is part of my nixos-config. +-# +-# You should have received a copy of the License along with this program. +-# If not, see . +-{lib}: rec { +- /* +- Converts `number` from a binary number to a decimal one. +- +- The input is indented to be a number composed only of `1`s and `0` (e.g., 10010.) +- +- # Type +- +- binaryToDecimal :: Int -> Int +- +- # Arguments +- +- number +- : The sequence of `1`s and `0`s defining a binary number, in little endian. +- +- # Examples +- +- binaryToDecimal 1001 +- => 9 +- */ +- binaryToDecimal = number: let +- binaryList = +- builtins.map lib.strings.toInt (lib.lists.reverseList (lib.strings.stringToCharacters (builtins.toString number))); +- in +- builtins.foldl' (acc: num: acc + num) 0 +- (lib.lists.imap0 (index: elem: elem * (pow 2 index)) binaryList); +- +- /* +- Converts `string` to a (probably) unique numerical id. +- +- This is achieved by hashing the string and returning the first six hex-digits +- converted to a base 10 number. +- +- # Type +- +- idFromString :: String -> Int +- +- # Arguments +- +- string +- : The string to use as seed for the id generation. +- +- # Examples +- +- idFromString "3d-printer" +- => 10365713 +- */ +- idFromString = string: let +- inputSeed = +- builtins.concatStringsSep "" +- (lib.lists.take 6 +- (lib.strings.stringToCharacters (builtins.hashString "sha256" string))); +- in +- lib.trivial.fromHexString inputSeed; +- +- /* +- source: https://github.com/NixOS/nix/issues/10387#issuecomment-2494597690 +- +- Raises the `base` to the power of `power`. +- +- Considering the small input size and the lack of a built-in power function [2], +- this naive power implementation should satisfy reasonable performance +- requirements. +- +- Due to the lack of a modulo and bitwise AND operator, it is questionable whether +- the recursive exponentiation by squaring [1] implementation would even be +- faster. +- +- [1]: https://en.wikipedia.org/wiki/Exponentiation_by_squaring +- [2]: https://github.com/NixOS/nix/issues/10387 +- +- # Type +- +- pow :: Number -> Number -> Number +- +- # Arguments +- +- base +- : The base number to be raised. +- +- power +- : The exponent to raise `base` to. +- +- # Examples +- +- pow 2 5 +- => 32 +- */ +- pow = base: power: +- if power == 0 +- then 1 +- else if power > 0 +- then (base * (pow base (power - 1))) +- else builtins.throw "Negative powers are not supported"; +- +- options = { +- /* +- Generate an enable option definition, that defaults to true. +- +- This conveniently allows the composition of a “common” module set. +- +- # Type +- +- mkEnable :: String -> AttrSet +- +- # Arguments +- +- name +- : The name to use in the option description. +- */ +- mkEnable = name: +- (lib.mkEnableOption name) +- // { +- default = true; +- }; +- }; +-} +-- +2.55.0 + diff --git a/pkgs/by-name/ro/rollup/patches2/0007-flake.nix-Don-t-perform-source-mapping-via-sources-a.patch b/pkgs/by-name/ro/rollup/patches2/0007-flake.nix-Don-t-perform-source-mapping-via-sources-a.patch deleted file mode 100644 index 83b4beaa..00000000 --- a/pkgs/by-name/ro/rollup/patches2/0007-flake.nix-Don-t-perform-source-mapping-via-sources-a.patch +++ /dev/null @@ -1,65 +0,0 @@ -From d0ff20e0e24023c120f47cc3a7b9782152daaa19 Mon Sep 17 00:00:00 2001 -From: Benedikt Peetz -Date: Mon, 2 Nov 2026 19:56:49 +0100 -Subject: [PATCH 7/7] flake.nix: Don't perform source mapping via sources and - raw_sources - ---- - flake.nix | 16 +++++++--------- - 1 file changed, 7 insertions(+), 9 deletions(-) - -diff --git a/flake.nix b/flake.nix -index 860ce277..9b729bd0 100644 ---- a/flake.nix -+++ b/flake.nix -@@ -4,16 +4,13 @@ - inputs = {}; - - outputs = {self, ...}: let -- raw_sources = import ./unflake.nix; -+ sources = import ./unflake.nix; - - system = "x86_64-linux"; - -- # Filter out the nixpkgs's from the sources, so we always use the `packageSets`. -- sources = builtins.removeAttrs raw_sources ["nixpkgs-stable" "nixpkgs-unstable" "library"]; -- - packageSets = rec { -- stable = raw_sources.nixpkgs-stable.legacyPackages.${system}; -- unstable = raw_sources.nixpkgs-unstable.legacyPackages.${system}; -+ stable = sources.nixpkgs-stable.legacyPackages.${system}; -+ unstable = sources.nixpkgs-unstable.legacyPackages.${system}; - - in_tree = import ./pkgs { - unstable_pkgs = unstable; -@@ -22,7 +19,7 @@ - }; - }; - lib = packageSets.unstable.lib; -- extra_lib = raw_sources.library.nixLib; -+ extra_lib = sources.library.extraLib {inherit lib;}; - - extra_modules = { - nixos = { -@@ -37,7 +34,8 @@ - }; - home = { - nix-index-database = sources.nix-index-database.homeModules.nix-index; -- nixvim = sources.nixvim.homeManagerModule; -+ nixvim = sources.nixvim.homeModules.nixvim; -+ turtle = sources.turtle.nixosModules.home-manager; - }; - }; - module_args = { -@@ -76,7 +74,7 @@ - system - ; - inherit -- (raw_sources) -+ (sources) - nixpkgs-unstable - nixpkgs-stable - deploy-rs --- -2.55.0 - diff --git a/pkgs/by-name/ro/rollup/src/main.rs b/pkgs/by-name/ro/rollup/src/main.rs index 8285e702..48b395a5 100644 --- a/pkgs/by-name/ro/rollup/src/main.rs +++ b/pkgs/by-name/ro/rollup/src/main.rs @@ -1,105 +1,145 @@ -use core::fmt; -use std::{path::PathBuf, process::Command}; +use std::{ + io::Write, + path::PathBuf, + process::{Command, Stdio}, +}; -use anyhow::{Context, Result}; +use anyhow::{Context, Result, bail}; use clap::Parser; +use crate::parse::Patch; + +mod parse; + #[derive(Parser)] struct Cli { /// The file to pull the patch to rollup from. - patch_file: PathBuf, -} + patch_files: Vec, -struct Diff { - files: Vec, -} - -struct FileDiff { - from: PathBuf, + /// Which repository to use as a target for the rollup + /// + /// Needs to be clean. + #[arg(short, long)] to: PathBuf, - diff: String, - index: String, -} -impl fmt::Display for FileDiff { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - writeln!( - f, - "diff --git a/{} b/{}", - self.from.display(), - self.to.display() - )?; - writeln!(f, "--- a/{}", self.from.display())?; - writeln!(f, "+++ b/{}", self.to.display())?; - writeln!(f, "index {}", self.index)?; - writeln!(f, "{}", self.diff)?; - - Ok(()) - } -} - -macro_rules! take { - ($line:expr, $prefix:literal) => { - $line.strip_prefix($prefix).unwrap().trim() - }; + #[arg(short, long)] + debug: bool, } fn main() -> Result<()> { let args = Cli::parse(); - let data = Command::new("filterdiff") - .arg(&args.patch_file) - .output() - .context("Failed to run `filterdiff` for patch analysis")?; - - let stdout = String::from_utf8(data.stdout).unwrap(); - - let mut diff = Diff { files: vec![] }; - let mut file_diff_from = None; - let mut file_diff_to = None; - let mut file_diff_diff: Option = None; - let mut file_diff_index: Option = None; - for (idx, line) in stdout.lines().enumerate() { - eprintln!("{}", line); - - if line.starts_with("---") { - file_diff_from = Some(PathBuf::from(take!(line, "--- a/"))); - } else if line.starts_with("+++") { - file_diff_to = Some(PathBuf::from(take!(line, "+++ b/"))); - } else if line.starts_with("index") { - file_diff_index = Some(take!(line, "index").to_owned()); - } else if line.starts_with("diff --git") { - if idx != 0 { - diff.files.push(FileDiff { - from: file_diff_from.take().unwrap(), - to: file_diff_to.take().unwrap(), - diff: file_diff_diff.take().unwrap(), - index: file_diff_index.take().unwrap(), - }); - } - } else { - match file_diff_diff.as_mut() { - Some(str) => { - str.push_str(line); - str.push('\n'); + let mut patches = vec![]; + for file in &args.patch_files { + patches.push(parse::parse_file(file, args.debug)?); + } + + eprintln!("Successfully parsed all {} patch files.", patches.len()); + + { + let git_check = Command::new("git") + .args([ + "-C", + args.to.display().to_string().as_str(), + "status", + "--porcelain", + ]) + .output() + .context("Failed to run `git status --procelain`")?; + if !git_check.stdout.is_empty() { + bail!( + "`--to` (`{}`) workspace is dirty, refusing to continue.", + args.to.display() + ); + } + } + + for (idx, patch) in patches.iter().enumerate() { + eprintln!( + "Applying {}. patch: `{}`...", + idx + 1, + args.patch_files[idx].display() + ); + + let mut final_diffs = vec![]; + for file_diff in &patch.files { + match file_diff { + parse::FileDiff::Add { path, .. } => { + if args.to.join(path).exists() { + bail!("A file was added, that already existed. This should be impossible.") + } + final_diffs.push(file_diff.to_owned()); } - None => { - let mut base = line.to_owned(); - base.push('\n'); - file_diff_diff = Some(base); + parse::FileDiff::Remove { path, .. } => { + if args.to.join(path).exists() { + final_diffs.push(file_diff.to_owned()); + } else { + eprintln!( + "Dropping remove of `{}`, as the file does not exist in the rollup target.", + path.display() + ); + } + } + parse::FileDiff::Change { from, to, .. } => { + if args.to.join(from).exists() { + if from != to && args.to.join(to).exists() { + bail!( + "A rename (`{}` -> `{}`) tried to rename a path to an already existing path. This should be impossible.", + from.display(), + to.display() + ) + } + final_diffs.push(file_diff.to_owned()); + } else { + eprintln!( + "Dropping change to `{}`, as the file does not exist in the rollup target.", + from.display() + ); + } } } } - } - diff.files.push(FileDiff { - from: file_diff_from.unwrap(), - to: file_diff_to.unwrap(), - diff: file_diff_diff.unwrap(), - index: file_diff_index.unwrap(), - }); - - for file in diff.files { - eprintln!("{}", file) + + let filtered_patch = Patch { + files: final_diffs, + commit_message: patch.commit_message.clone(), + }; + + let mut apply_child = Command::new("git") + .args(["-C", args.to.display().to_string().as_str(), "apply", "-"]) + .stdin(Stdio::piped()) + .spawn()?; + let mut stdin = apply_child.stdin.take().expect("is piped"); + write!(stdin, "{}", filtered_patch)?; + drop(stdin); + let status = apply_child.wait()?; + if !status.success() { + bail!("git apply failed.") + } + + let add = Command::new("git") + .args(["-C", args.to.display().to_string().as_str(), "add", "."]) + .status()?; + if !add.success() { + bail!("git add ., failed.") + } + + let mut commit_child = Command::new("git") + .args([ + "-C", + args.to.display().to_string().as_str(), + "commit", + "--file=-", + ]) + .stdin(Stdio::piped()) + .spawn()?; + let mut stdin = commit_child.stdin.take().expect("is piped"); + write!(stdin, "{}", filtered_patch.commit_message)?; + drop(stdin); + let status = apply_child.wait()?; + if !status.success() { + bail!("git commit failed.") + } } Ok(()) diff --git a/pkgs/by-name/ro/rollup/src/parse.rs b/pkgs/by-name/ro/rollup/src/parse.rs new file mode 100644 index 00000000..ceb9d44f --- /dev/null +++ b/pkgs/by-name/ro/rollup/src/parse.rs @@ -0,0 +1,289 @@ +use core::fmt; +use std::{ + fs, + path::{Path, PathBuf}, + process::Command, +}; + +use anyhow::{Context, Result}; +use pretty_assertions::assert_eq; + +pub(crate) struct Patch { + pub(crate) files: Vec, + pub(crate) commit_message: String, +} + +impl fmt::Display for Patch { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + for file in &self.files { + write!(f, "{}", file)?; + } + + Ok(()) + } +} + +#[derive(Clone)] +pub(crate) enum FileDiff { + Add { + path: PathBuf, + diff: String, + }, + Remove { + path: PathBuf, + diff: String, + index: String, + deleted: String, + }, + Change { + from: PathBuf, + to: PathBuf, + diff: String, + index: String, + }, +} +impl FileDiff { + fn from_parts( + from: PathBuf, + to: PathBuf, + diff: String, + index: Option, + deleted: Option, + ) -> Self { + let diff = diff.trim().to_owned(); + + if from.display().to_string() == "/dev/null" { + Self::Add { path: to, diff } + } else if to.display().to_string() == "/dev/null" { + Self::Remove { + path: from, + diff, + index: index.unwrap(), + deleted: deleted.unwrap(), + } + } else { + Self::Change { + from, + to, + diff, + index: index.unwrap(), + } + } + } +} + +impl fmt::Display for FileDiff { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + FileDiff::Add { path, diff } => { + // writeln!(f, "diff --git /dev/null b/{}", path.display())?; + writeln!(f, "--- /dev/null")?; + writeln!(f, "+++ b/{}", path.display())?; + writeln!(f, "{}", diff)?; + } + FileDiff::Remove { + path, + diff, + index, + deleted, + } => { + writeln!(f, "diff --git a/{} b/{}", path.display(), path.display())?; + writeln!(f, "deleted {}", deleted)?; + writeln!(f, "index {}", index)?; + writeln!(f, "+++ /dev/null")?; + writeln!(f, "{}", diff)?; + } + FileDiff::Change { + from, + to, + diff, + index, + } => { + writeln!(f, "diff --git a/{} b/{}", from.display(), to.display())?; + writeln!(f, "index {}", index)?; + writeln!(f, "--- a/{}", from.display())?; + writeln!(f, "+++ b/{}", to.display())?; + writeln!(f, "{}", diff)?; + } + } + + Ok(()) + } +} + +macro_rules! expect { + (if $gate:ident -> $prefix:literal from $line:expr; assign |$strp_line:ident| $callback:block) => { + expect!(@base continue; if $gate -> $prefix from $line; assign |$strp_line| $callback) + }; + (@no_wrap if $gate:ident -> $prefix:literal from $line:expr; assign |$strp_line:ident| $callback:block) => { + expect!(@base (); if $gate -> $prefix from $line; assign |$strp_line| $callback) + }; + (@base $continue:expr; if $gate:ident -> $prefix:literal from $line:expr; assign |$strp_line:ident| $callback:block) => { + if $gate.is_none() { + let $strp_line: &str = $line + .strip_prefix($prefix) + .expect(concat!( + "Expectected '", + $prefix, + "' prefix, while trying to fill '", + stringify!($gate), + "'" + )) + .trim(); + $gate = Some((|$strp_line: &str| $callback)($strp_line)); + $continue; + } + }; +} + +pub(crate) fn parse_file(file: &Path, debug: bool) -> Result { + let data = Command::new("filterdiff") + .arg(&file) + .output() + .context("Failed to run `filterdiff` for patch analysis")?; + + let filterdiff_output = String::from_utf8(data.stdout).unwrap(); + if debug { + eprintln!("{}", filterdiff_output); + eprintln!("****************************"); + } + + let commit_message = { + let raw_message = fs::read_to_string(file)?; + + let mut commit = None; + let mut date = None; + let mut author = None; + let mut final_message = None; + for line in raw_message.lines() { + expect!(if commit -> "From " from line; assign |strp_line| { + let (id, fake_date) = strp_line.split_once(' ').unwrap(); + assert_eq!(fake_date, "Mon Sep 17 00:00:00 2001"); + id.to_owned() + }); + expect!(if author -> "From: " from line; assign |strp_line| { + strp_line.to_owned() + }); + expect!(if date -> "Date: " from line; assign |strp_line| { + strp_line.to_owned() + }); + expect!(if final_message -> "Subject: " from line; assign |strp_line| { + if strp_line.starts_with('[') { + let chars = strp_line.chars().take_while(|ch| *ch != ']').collect::(); + assert_eq!(&chars[1..=5], "PATCH"); + strp_line[chars.len()+1..].to_owned() + } else { + unreachable!("Email subjects always start with [PATCH x/y]"); + } + }); + if line == "---" { + break; + } + final_message.as_mut().unwrap().push_str(line); + final_message.as_mut().unwrap().push('\n'); + } + + if debug { + eprintln!("Patch data:"); + eprintln!(" Author: {}", author.unwrap()); + eprintln!(" Commit: {}", commit.unwrap()); + eprintln!(" Date: {}", date.unwrap()); + for line in final_message.as_ref().unwrap().lines() { + eprintln!(" {}", line); + } + eprintln!("****************************"); + } + + final_message.unwrap().trim().to_owned() + }; + + let mut diff = Patch { + files: vec![], + commit_message, + }; + let mut fd_from = None; + let mut fd_to = None; + let mut fd_diff: Option = None; + let mut fd_index: Option = None; + let mut fd_deleted: Option = None; + let mut git_diff = None; + for (idx, line) in filterdiff_output.lines().enumerate() { + if debug { + eprintln!("{}", line); + } + + if line.starts_with("diff --git") { + if idx != 0 { + diff.files.push(FileDiff::from_parts( + fd_from.take().unwrap(), + fd_to.take().unwrap(), + fd_diff.take().unwrap(), + fd_index.take(), + fd_deleted.take(), + )); + } + git_diff = Some(line.to_owned()); + continue; + } + + if line.starts_with("deleted") { + expect!(if fd_deleted -> "deleted" from line; assign |strp_line| { + strp_line.to_owned() + }); + } + + if line.starts_with("index") { + expect!(if fd_index -> "index" from line; assign |strp_line| { + strp_line.to_owned() + }); + } + + if fd_deleted.is_some() { + let git_diff = git_diff.clone().unwrap(); + expect!(@no_wrap if fd_from -> "diff --git a/" from git_diff; assign |strp_line| { + let (from, _to) = strp_line.split_once(' ').unwrap(); + PathBuf::from(from) + }); + } else { + expect!(if fd_from -> "---" from line; assign |strp_line| { + if strp_line != "/dev/null" { + PathBuf::from(strp_line.strip_prefix("a/").unwrap()) + } else { + PathBuf::from(strp_line) + } + }); + } + expect!(if fd_to -> "+++" from line; assign |strp_line| { + if strp_line != "/dev/null" { + PathBuf::from(strp_line.strip_prefix("b/").unwrap()) + } else { + PathBuf::from(strp_line) + } + }); + + match fd_diff.as_mut() { + Some(str) => { + str.push_str(line); + str.push('\n'); + } + None => { + let mut base = line.to_owned(); + base.push('\n'); + fd_diff = Some(base); + } + } + } + diff.files.push(FileDiff::from_parts( + fd_from.take().unwrap(), + fd_to.take().unwrap(), + fd_diff.take().unwrap(), + fd_index.take(), + fd_deleted.take(), + )); + + let check_content = diff.to_string(); + + assert_eq!(filterdiff_output, check_content); + + Ok(diff) +} -- cgit v1.3.1