summaryrefslogtreecommitdiffstats
path: root/pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-11-04 17:56:37 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-11-05 22:47:43 +0100
commit36e836abf8ead21c88154a7e962a8d397d74b78f (patch)
treef8336765778eb22e847e11bfb9d7c92e334810cd /pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch
parentflake.nix: Don't perform source mapping via sources and raw_sources (diff)
downloadnixos-config-36e836abf8ead21c88154a7e962a8d397d74b78f.zip
pkgs/rollup: Init
Diffstat (limited to 'pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch')
-rw-r--r--pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch1098
1 files changed, 1098 insertions, 0 deletions
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
new file mode 100644
index 00000000..242115be
--- /dev/null
+++ b/pkgs/by-name/ro/rollup/patches2/0005-modules-Fix-various-name-mistakes-and-other-issues.patch
@@ -0,0 +1,1098 @@
+From 1daf25c665a1abf14f060f0599d156d84a04d825 Mon Sep 17 00:00:00 2001
+From: Benedikt Peetz <benedikt.peetz@b-peetz.de>
+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
+ "<Alt+Ctrl+Meta+Shift-Z>" = [
+ "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
+