From 83f0daa6c54c26ad240c46722d3ad84f853f517a Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Mon, 2 Nov 2026 19:55:32 +0100 Subject: modules/*: Fix various name mistakes and other issues --- 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/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/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/default.nix | 244 --------------------- modules/common/hooks/default.nix | 17 -- modules/common/hooks/scripts/sync-git-repo.sh | 23 -- modules/common/projects.json | 71 ------ modules/common/projects.json.license | 9 - modules/common/soispha/default.nix | 241 ++++++++++++++++++++ modules/common/soispha/hooks/default.nix | 17 ++ .../common/soispha/hooks/scripts/sync-git-repo.sh | 23 ++ modules/common/soispha/projects.json | 71 ++++++ modules/common/soispha/projects.json.license | 9 + 43 files changed, 475 insertions(+), 470 deletions(-) delete mode 100644 modules/common/default.nix delete mode 100644 modules/common/hooks/default.nix delete mode 100755 modules/common/hooks/scripts/sync-git-repo.sh delete mode 100644 modules/common/projects.json delete mode 100644 modules/common/projects.json.license create mode 100644 modules/common/soispha/default.nix create mode 100644 modules/common/soispha/hooks/default.nix create mode 100755 modules/common/soispha/hooks/scripts/sync-git-repo.sh create mode 100644 modules/common/soispha/projects.json create mode 100644 modules/common/soispha/projects.json.license (limited to 'modules') 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/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/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; - - 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; + home-manager.users.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/default.nix deleted file mode 100644 index facc9e9f..00000000 --- a/modules/common/default.nix +++ /dev/null @@ -1,244 +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 . -# This file contains common configuration applied to every host. -# It should only `enable` options defined in the `modules/by-name` directory. -{ - config, - pkgs, - lib, - ... -}: { - # 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; - }; - - root.home = { - username = "root"; - homeDirectory = config.users.users.root.home; - stateVersion = "23.05"; - enableNixpkgsReleaseCheck = true; - }; - }; - - soispha = { - age.enable = true; - boot.enable = true; - cleanup.enable = true; - documentation.enable = true; - - fonts = { - enable = true; - enableEmoji = true; - }; - - hardware = { - enable = lib.mkDefault true; - }; - home-manager.enable = true; - impermanence = { - enable = true; - - directories = [ - "/etc/nixos" - "/var/lib/systemd" - ]; - }; - - polkit.enable = true; - xdg.enable = true; - - services = { - adb = { - 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 = { - enable = true; - directories = let - data = "${config.home-manager.users.soispha.xdg.dataHome}/mpd"; - in { - inherit data; - playlists = "${data}/playlists"; - runtime = "/run/user/${builtins.toString config.users.users.soispha.uid}/mpd"; - music = config.home-manager.users.soispha.programs.beets.settings.directory; - }; - mpc = { - enable = true; - beetsPkg = config.home-manager.users.soispha.programs.beets.package; - }; - }; - ollama.enable = false; - postgresql.enable = false; - printing.enable = true; - scanning.enable = true; - snapper.enable = true; - water-reminder.enable = true; - systemDiff.enable = true; - unison = { - enable = lib.mkDefault true; - - foreign.userName = "soispha"; - dataDir = "${config.home-manager.users.soispha.xdg.dataHome}/unison"; - userSourceDir = "/srv/home/soispha"; - pathsToIgnore = let - extractTarget = attr: "~/${attr.target}"; - homeManagerSymlinks = - builtins.map extractTarget - (builtins.attrValues - config.home-manager.users.soispha.home.file); - in - [ - # TODO(@bpeetz): Move that to its respective module (after migrating it to - # by-name) <2025-05-09> - # Already synchronized by mbsync - "~/.local/share/maildir" - ] - ++ homeManagerSymlinks; - - pathsToSync = [ - "~/.local/share" - "~/.local/.Trash-1000" - - "~/media" - "~/documents" - "~/repos" - ]; - }; - }; - - programs = { - i3bar-river.enable = true; - i3status-rust.enable = true; - - qutebrowser = { - enable = true; - }; - - nvim = { - enable = true; - shell = pkgs.zsh; - }; - atuin = { - enable = true; - enableAge = lib.mkDefault true; - }; - direnv.enable = true; - git.enable = true; - imv.enable = true; - less.enable = true; - lf.enable = true; - ly.enable = lib.mkDefault true; - gpg.enable = true; - river = { - enable = lib.mkDefault true; - init = { - rules = [ - { - app-id = "float"; - title = "*"; - action = "float"; - } - { - app-id = "mpv"; - title = "*"; - action = "float"; - } - { - app-id = "ModernGL"; - title = "*"; - action = "float"; - } - { - app-id = "*"; - title = "Manim Slides"; - action = "float"; - } - { - app-id = "*"; - title = "floating please"; - action = "float"; - } - - { - app-id = "*"; - title = "*"; - action = "ssd"; - } - # # This remove the focus border around Firefox (which is useful because the Firefox is nearly always in its own tag.) - # { - # app-id = "firefox"; - # title = "*"; - # action = "csd"; - # } - ]; - generalSettings = { - # background - background-color = "0x002b36"; - border-color-focused = "0x93a1a1"; - border-color-unfocused = "0x586e75"; - - # keyboard repeat rate - set-repeat = ["50" "300"]; - - # Cursor - focus-follows-cursor = "normal"; - # hide-cursor = ["timeout" "2000"]; - hide-cursor = ["when-typing" "enabled"]; - set-cursor-warp = "on-output-change"; - xcursor-theme = ["Nordzy-cursors" "24"]; - }; - inputs = { - pointer-1133-49970-Logitech_Gaming_Mouse_G502 = [["pointer-accel" "0"] ["accel-profile" "none"]]; - pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I = [["pointer-accel" "0"] ["accel-profile" "none"]]; - }; - }; - }; - mpv.enable = true; - steam.enable = true; - ssh.enable = true; - swaylock.enable = true; - timewarrior.enable = true; - taskwarrior = { - enable = true; - enableAge = lib.mkDefault true; - - hooks = import ./hooks {inherit pkgs lib config;}; - }; - tskm = { - enable = true; - projects = builtins.fromJSON (builtins.readFile ./projects.json); - }; - nix-index.enable = true; - yt.enable = true; - zathura.enable = true; - zsh.enable = true; - fish.enable = true; - }; - - version.enable = true; - }; -} diff --git a/modules/common/hooks/default.nix b/modules/common/hooks/default.nix deleted file mode 100644 index 5b694039..00000000 --- a/modules/common/hooks/default.nix +++ /dev/null @@ -1,17 +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 . -{ - pkgs, - lib, - config, -}: { - sync-git-repos = config.lib.taskwarrior.mkHook "on-add" [pkgs.git] ./scripts/sync-git-repo.sh; - sync-git-repos-mod = config.lib.taskwarrior.mkHook "on-modify" [pkgs.git] ./scripts/sync-git-repo.sh; -} diff --git a/modules/common/hooks/scripts/sync-git-repo.sh b/modules/common/hooks/scripts/sync-git-repo.sh deleted file mode 100755 index fe0d0085..00000000 --- a/modules/common/hooks/scripts/sync-git-repo.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env sh - -# 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 . - -task_data="$(task _get rc.data.location)" -[ "$task_data" ] || die "Taskwarrior should have a location set" - -cd "$task_data" || die "(BUG?): Your data.location path is not accessable" - -[ -d ./.git/ ] || git init - -git add . -git commit --message="chore: Update" --no-gpg-sign - -# vim: ft=sh diff --git a/modules/common/projects.json b/modules/common/projects.json deleted file mode 100644 index ea14d6e4..00000000 --- a/modules/common/projects.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "aoc": { - "prefix": "programming/advent_of_code" - }, - "book": { - "prefix": "book" - }, - "buy": { - "prefix": "buy", - "subprojects": { - "books": {}, - "pc": {} - } - }, - "esc": {}, - "latex": { - "prefix": "programming/latex" - }, - "me": { - "subprojects": { - "bank": {}, - "google": {}, - "health": {}, - "job": {}, - "shop": {}, - "sweden": {} - } - }, - "server": { - "prefix": "config", - "subprojects": { - "b-peetz": {}, - "blog": {}, - "ci": {}, - "email": {}, - "nix-sync": {}, - "sudo-less": {} - } - }, - "smartphone": { - "prefix": "hardware" - }, - "system": { - "prefix": "config", - "subprojects": { - "backup": {}, - "bar": {}, - "email": {}, - "firefox": {}, - "gpg": {}, - "keyboard": {}, - "laptop": {}, - "music": {}, - "nvim": {}, - "rss": {}, - "shell": {}, - "task": {}, - "wm": {}, - "youtube": {} - } - }, - "timesinks": { - "subprojects": { - "games": {}, - "music": {}, - "netflix": {}, - "youtube": {} - } - }, - "uni": {} -} diff --git a/modules/common/projects.json.license b/modules/common/projects.json.license deleted file mode 100644 index eae6a84c..00000000 --- a/modules/common/projects.json.license +++ /dev/null @@ -1,9 +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 . diff --git a/modules/common/soispha/default.nix b/modules/common/soispha/default.nix new file mode 100644 index 00000000..9d6038cb --- /dev/null +++ b/modules/common/soispha/default.nix @@ -0,0 +1,241 @@ +# 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 . +# This file contains common configuration applied to every host. +# It should only `enable` options defined in the `modules/by-name` directory. +{ + config, + pkgs, + lib, + ... +}: { + # 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; + }; + + vhack = { + postgresql.enable = false; + persist = { + enable = true; + + directories = [ + "/etc/nixos" + "/var/lib/systemd" + "/var/log" + ]; + }; + + services.backup = { + storagebox = { + enable = lib.mkDefault true; + user = "u459143-sub1"; + sshHostKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIICf9svRenC/PLKIL9nk6K/pxQgoiFC41wTNvoIncOxs"; + }; + local = { + enable = lib.mkDefault true; + }; + }; + }; + + soispha = { + age.enable = true; + boot.enable = true; + cleanup.enable = true; + documentation.enable = true; + + fonts = { + enable = true; + enableEmoji = true; + }; + + hardware = { + enable = lib.mkDefault true; + }; + home-manager.enable = true; + + polkit.enable = true; + xdg.enable = true; + + services = { + adb = { + enable = true; + user = "soispha"; + }; + fwupd.enable = true; + mako.enable = true; + mpd = { + enable = true; + directories = let + data = "${config.home-manager.users.soispha.xdg.dataHome}/mpd"; + in { + inherit data; + playlists = "${data}/playlists"; + runtime = "/run/user/${builtins.toString config.users.users.soispha.uid}/mpd"; + music = config.home-manager.users.soispha.programs.beets.settings.directory; + }; + mpc = { + enable = true; + beetsPkg = config.home-manager.users.soispha.programs.beets.package; + }; + }; + ollama.enable = false; + printing.enable = true; + scanning.enable = true; + snapper.enable = true; + water-reminder.enable = true; + systemDiff.enable = true; + unison = { + enable = lib.mkDefault true; + + foreign.userName = "soispha"; + dataDir = "${config.home-manager.users.soispha.xdg.dataHome}/unison"; + userSourceDir = "/srv/home/soispha"; + pathsToIgnore = let + extractTarget = attr: "~/${attr.target}"; + homeManagerSymlinks = + builtins.map extractTarget + (builtins.attrValues + config.home-manager.users.soispha.home.file); + in + [ + # TODO(@bpeetz): Move that to its respective module (after migrating it to + # by-name) <2025-05-09> + # Already synchronized by mbsync + "~/.local/share/maildir" + ] + ++ homeManagerSymlinks; + + pathsToSync = [ + "~/.local/share" + "~/.local/.Trash-1000" + + "~/media" + "~/documents" + "~/repos" + ]; + }; + }; + + programs = { + i3bar-river.enable = true; + i3status-rust.enable = true; + + qutebrowser = { + enable = true; + }; + + nvim = { + enable = true; + shell = pkgs.zsh; + }; + atuin = { + enable = true; + enableAge = lib.mkDefault true; + }; + direnv.enable = true; + git.enable = true; + imv.enable = true; + less.enable = true; + lf.enable = true; + ly.enable = lib.mkDefault true; + gpg.enable = true; + river = { + enable = lib.mkDefault true; + init = { + rules = [ + { + app-id = "float"; + title = "*"; + action = "float"; + } + { + app-id = "mpv"; + title = "*"; + action = "float"; + } + { + app-id = "ModernGL"; + title = "*"; + action = "float"; + } + { + app-id = "*"; + title = "Manim Slides"; + action = "float"; + } + { + app-id = "*"; + title = "floating please"; + action = "float"; + } + + { + app-id = "*"; + title = "*"; + action = "ssd"; + } + # # This remove the focus border around Firefox (which is useful because the Firefox is nearly always in its own tag.) + # { + # app-id = "firefox"; + # title = "*"; + # action = "csd"; + # } + ]; + generalSettings = { + # background + background-color = "0x002b36"; + border-color-focused = "0x93a1a1"; + border-color-unfocused = "0x586e75"; + + # keyboard repeat rate + set-repeat = ["50" "300"]; + + # Cursor + focus-follows-cursor = "normal"; + # hide-cursor = ["timeout" "2000"]; + hide-cursor = ["when-typing" "enabled"]; + set-cursor-warp = "on-output-change"; + xcursor-theme = ["Nordzy-cursors" "24"]; + }; + inputs = { + pointer-1133-49970-Logitech_Gaming_Mouse_G502 = [["pointer-accel" "0"] ["accel-profile" "none"]]; + pointer-12951-6505-ZSA_Technology_Labs_Moonlander_Mark_I = [["pointer-accel" "0"] ["accel-profile" "none"]]; + }; + }; + }; + mpv.enable = true; + steam.enable = true; + ssh.enable = true; + swaylock.enable = true; + timewarrior.enable = true; + taskwarrior = { + enable = true; + enableAge = lib.mkDefault true; + + hooks = import ./hooks {inherit pkgs lib config;}; + }; + tskm = { + enable = true; + projects = builtins.fromJSON (builtins.readFile ./projects.json); + }; + nix-index.enable = true; + yt.enable = true; + zathura.enable = true; + zsh.enable = true; + fish.enable = true; + }; + + version.enable = true; + }; +} diff --git a/modules/common/soispha/hooks/default.nix b/modules/common/soispha/hooks/default.nix new file mode 100644 index 00000000..5b694039 --- /dev/null +++ b/modules/common/soispha/hooks/default.nix @@ -0,0 +1,17 @@ +# 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 . +{ + pkgs, + lib, + config, +}: { + sync-git-repos = config.lib.taskwarrior.mkHook "on-add" [pkgs.git] ./scripts/sync-git-repo.sh; + sync-git-repos-mod = config.lib.taskwarrior.mkHook "on-modify" [pkgs.git] ./scripts/sync-git-repo.sh; +} diff --git a/modules/common/soispha/hooks/scripts/sync-git-repo.sh b/modules/common/soispha/hooks/scripts/sync-git-repo.sh new file mode 100755 index 00000000..fe0d0085 --- /dev/null +++ b/modules/common/soispha/hooks/scripts/sync-git-repo.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env sh + +# 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 . + +task_data="$(task _get rc.data.location)" +[ "$task_data" ] || die "Taskwarrior should have a location set" + +cd "$task_data" || die "(BUG?): Your data.location path is not accessable" + +[ -d ./.git/ ] || git init + +git add . +git commit --message="chore: Update" --no-gpg-sign + +# vim: ft=sh diff --git a/modules/common/soispha/projects.json b/modules/common/soispha/projects.json new file mode 100644 index 00000000..ea14d6e4 --- /dev/null +++ b/modules/common/soispha/projects.json @@ -0,0 +1,71 @@ +{ + "aoc": { + "prefix": "programming/advent_of_code" + }, + "book": { + "prefix": "book" + }, + "buy": { + "prefix": "buy", + "subprojects": { + "books": {}, + "pc": {} + } + }, + "esc": {}, + "latex": { + "prefix": "programming/latex" + }, + "me": { + "subprojects": { + "bank": {}, + "google": {}, + "health": {}, + "job": {}, + "shop": {}, + "sweden": {} + } + }, + "server": { + "prefix": "config", + "subprojects": { + "b-peetz": {}, + "blog": {}, + "ci": {}, + "email": {}, + "nix-sync": {}, + "sudo-less": {} + } + }, + "smartphone": { + "prefix": "hardware" + }, + "system": { + "prefix": "config", + "subprojects": { + "backup": {}, + "bar": {}, + "email": {}, + "firefox": {}, + "gpg": {}, + "keyboard": {}, + "laptop": {}, + "music": {}, + "nvim": {}, + "rss": {}, + "shell": {}, + "task": {}, + "wm": {}, + "youtube": {} + } + }, + "timesinks": { + "subprojects": { + "games": {}, + "music": {}, + "netflix": {}, + "youtube": {} + } + }, + "uni": {} +} diff --git a/modules/common/soispha/projects.json.license b/modules/common/soispha/projects.json.license new file mode 100644 index 00000000..eae6a84c --- /dev/null +++ b/modules/common/soispha/projects.json.license @@ -0,0 +1,9 @@ +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 . -- cgit v1.3.1