aboutsummaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-20 16:10:21 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-05-20 16:14:26 +0200
commit368cb6b0d25db2ae23be42ad51584de059997e51 (patch)
tree3282e45d3ebced63c8498a47e83a255c35de620b /modules
parentrefactor(hm): Rename to `modules/home` (diff)
downloadnixos-config-368cb6b0d25db2ae23be42ad51584de059997e51.zip
refactor(sys): Modularize and move to `modules/system` or `pkgs`
Diffstat (limited to '')
-rwxr-xr-xmodules/system/boot/boot_pictures/gnu.png (renamed from sys/boot/boot_pictures/gnu.png)bin327518 -> 327518 bytes
-rwxr-xr-xmodules/system/boot/boot_pictures/gnulin_emb_1.png (renamed from sys/boot/boot_pictures/gnulin_emb_1.png)bin207444 -> 207444 bytes
-rwxr-xr-xmodules/system/boot/boot_pictures/gnulin_emb_2.png (renamed from sys/boot/boot_pictures/gnulin_emb_2.png)bin208347 -> 208347 bytes
-rw-r--r--modules/system/boot/default.nix129
-rw-r--r--modules/system/boot/iso_entry/archlive_iso.nix (renamed from sys/boot/archlive_iso.nix)0
-rw-r--r--modules/system/boot/iso_entry/signing_key.nix (renamed from sys/boot/signing_key.nix)0
-rw-r--r--modules/system/cleanup/default.nix18
-rw-r--r--modules/system/default.nix26
-rw-r--r--modules/system/disks/default.nix (renamed from sys/disks/default.nix)18
-rw-r--r--modules/system/disks/fstrim.nix (renamed from sys/disks/fstrim.nix)0
-rw-r--r--modules/system/disks/hibernate.nix (renamed from sys/disks/hibernate.nix)1
-rw-r--r--modules/system/documentation/default.nix24
-rw-r--r--modules/system/fonts/default.nix55
-rw-r--r--modules/system/fonts/emoji_font.xml (renamed from sys/font/font.xml)0
-rw-r--r--modules/system/hardware/default.nix68
-rw-r--r--modules/system/impermanence/default.nix55
-rw-r--r--modules/system/libvirtd/default.nix (renamed from sys/libvirtd/default.nix)0
-rw-r--r--modules/system/locale/default.nix (renamed from sys/locale/default.nix)18
-rw-r--r--modules/system/locale/keymaps/dvorak_modified.xkb (renamed from sys/locale/keymaps/dvorak_modified.xkb)0
-rw-r--r--modules/system/locale/keymaps/us_modified.xkb (renamed from sys/locale/keymaps/us_modified.xkb)0
-rw-r--r--modules/system/networking/default.nix81
-rw-r--r--modules/system/polkit/default.nix14
-rw-r--r--modules/system/power/default.nix33
-rw-r--r--modules/system/secrets/default.nix82
-rw-r--r--modules/system/secrets/lf/cd_paths (renamed from sys/secrets/lf/cd_paths)0
-rw-r--r--modules/system/secrets/nheko/conf.apzu (renamed from sys/secrets/nheko/conf.apzu)0
-rw-r--r--modules/system/secrets/nheko/conf.isimud (renamed from sys/secrets/nheko/conf.isimud)0
-rw-r--r--modules/system/secrets/nheko/conf.tiamat (renamed from sys/secrets/nheko/conf.tiamat)0
-rw-r--r--modules/system/secrets/secrets.nix (renamed from sys/secrets/secrets.nix)0
-rw-r--r--modules/system/secrets/serverphone/ca.key (renamed from sys/secrets/serverphone/ca.key)0
-rw-r--r--modules/system/secrets/serverphone/server.key (renamed from sys/secrets/serverphone/server.key)0
-rw-r--r--modules/system/secrets/taskserver/ca.cert (renamed from sys/secrets/taskserver/ca.cert)0
-rw-r--r--modules/system/secrets/taskserver/credentials (renamed from sys/secrets/taskserver/credentials)0
-rw-r--r--modules/system/secrets/taskserver/private.key (renamed from sys/secrets/taskserver/private.key)0
-rw-r--r--modules/system/secrets/taskserver/public.cert (renamed from sys/secrets/taskserver/public.cert)0
-rwxr-xr-xmodules/system/secrets/update.sh (renamed from sys/secrets/update.sh)0
-rw-r--r--modules/system/services/adb/default.nix (renamed from sys/svcs/adb/default.nix)0
-rw-r--r--modules/system/services/backup/default.nix (renamed from sys/svcs/backup/default.nix)11
-rw-r--r--modules/system/services/dconf/default.nix7
-rw-r--r--modules/system/services/default.nix (renamed from sys/svcs/default.nix)4
-rw-r--r--modules/system/services/fwupd/default.nix14
-rw-r--r--modules/system/services/issue_file/default.nix (renamed from sys/svcs/getty/default.nix)13
-rw-r--r--modules/system/services/nix/default.nix (renamed from sys/svcs/nix/default.nix)1
-rw-r--r--modules/system/services/openssh/default.nix (renamed from sys/svcs/openssh/default.nix)0
-rw-r--r--modules/system/services/postgresql/default.nix17
-rw-r--r--modules/system/services/printing/default.nix45
-rw-r--r--modules/system/services/scanning/default.nix25
-rw-r--r--modules/system/services/serverphone/certificates/ca.crt (renamed from sys/svcs/serverphone/certificates/ca.crt)0
-rw-r--r--modules/system/services/serverphone/certificates/server.crt (renamed from sys/svcs/serverphone/certificates/server.crt)0
-rw-r--r--modules/system/services/serverphone/default.nix (renamed from sys/svcs/serverphone/default.nix)0
l---------modules/system/services/serverphone/keys/key_1 (renamed from sys/svcs/serverphone/keys/key_1)0
l---------modules/system/services/serverphone/keys/key_2 (renamed from sys/svcs/serverphone/keys/key_2)0
-rw-r--r--modules/system/services/snapper/default.nix53
-rw-r--r--modules/system/services/steam/default.nix (renamed from sys/svcs/steam/default.nix)8
-rw-r--r--modules/system/services/swaylock/default.nix (renamed from sys/svcs/swaylock/default.nix)0
-rw-r--r--modules/system/services/xdg/default.nix (renamed from sys/svcs/xdg/default.nix)0
-rwxr-xr-xmodules/system/services/xdg/scripts/lf_wrapper.sh (renamed from sys/svcs/xdg/scripts/lf_wrapper.sh)0
-rwxr-xr-xmodules/system/services/xdg/scripts/ranger_wrapper.sh (renamed from sys/svcs/xdg/scripts/ranger_wrapper.sh)0
-rw-r--r--modules/system/sound/default.nix38
-rw-r--r--modules/system/tempfiles/default.nix20
-rw-r--r--modules/system/users/default.nix50
-rw-r--r--modules/system/version/default.nix19
-rw-r--r--modules/system/waydroid/default.nix (renamed from sys/waydroid/default.nix)1
63 files changed, 914 insertions, 34 deletions
diff --git a/sys/boot/boot_pictures/gnu.png b/modules/system/boot/boot_pictures/gnu.png
index d07dee3e..d07dee3e 100755
--- a/sys/boot/boot_pictures/gnu.png
+++ b/modules/system/boot/boot_pictures/gnu.png
Binary files differ
diff --git a/sys/boot/boot_pictures/gnulin_emb_1.png b/modules/system/boot/boot_pictures/gnulin_emb_1.png
index 483f2681..483f2681 100755
--- a/sys/boot/boot_pictures/gnulin_emb_1.png
+++ b/modules/system/boot/boot_pictures/gnulin_emb_1.png
Binary files differ
diff --git a/sys/boot/boot_pictures/gnulin_emb_2.png b/modules/system/boot/boot_pictures/gnulin_emb_2.png
index 48cd6ad7..48cd6ad7 100755
--- a/sys/boot/boot_pictures/gnulin_emb_2.png
+++ b/modules/system/boot/boot_pictures/gnulin_emb_2.png
Binary files differ
diff --git a/modules/system/boot/default.nix b/modules/system/boot/default.nix
new file mode 100644
index 00000000..1e6fa99b
--- /dev/null
+++ b/modules/system/boot/default.nix
@@ -0,0 +1,129 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.soispha.boot;
+in {
+ options.soispha.boot = {
+ enable = lib.mkEnableOption "Bootloader configuration";
+ # TODO: Add this option <2024-05-16>
+ # enableIsoEntry = lib.mkEnableOption "an tails iso boot entry";
+ };
+
+ config = lib.mkIf cfg.enable (
+ # let
+ # cfg = config.boot.loader.systemd-boot;
+ # inherit (config.boot.loader) efi;
+ #
+ # esa = n: lib.strings.escapeShellArg n;
+ #
+ # bootMountPoint =
+ # if cfg.xbootldrMountPoint != null
+ # then cfg.xbootldrMountPoint
+ # else efi.efiSysMountPoint;
+ #
+ # nixosDir = "/EFI/nixos";
+ #
+ # # FIXME: This system has two big problems:
+ # # 1. It does not updated files, which still have the same name
+ # # 2. It forgets about files, which were 'deleted' in this configuration (these just
+ # # stay on disk forever) <2024-05-11>
+ # copyExtraFiles = ''
+ # echo "[systemd-boot] copying files to ${bootMountPoint}"
+ # empty_file=$(mktemp)
+ #
+ # ${lib.concatStrings (lib.mapAttrsToList (n: v:
+ # /*
+ # bash
+ # */
+ # ''
+ # if ! [ -e ${esa "${bootMountPoint}/${n}"} ]; then
+ # install -Dp "${v}" ${esa "${bootMountPoint}/${n}"}
+ # install -D "$empty_file" ${esa "${bootMountPoint}/${nixosDir}/.extra-files/${n}"}
+ # fi
+ # '')
+ # cfg.extraFiles)}
+ #
+ # ${lib.concatStrings (lib.mapAttrsToList (n: v:
+ # /*
+ # bash
+ # */
+ # ''
+ # # if ! [ -e ${esa "${bootMountPoint}/loader/entries/${n}"} ]; then
+ # install -Dp "${pkgs.writeText n v}" ${esa "${bootMountPoint}/loader/entries/${n}"}
+ # install -D "$empty_file" ${esa "${bootMountPoint}/${nixosDir}/.extra-files/loader/entries/${n}"}
+ # # fi
+ # '')
+ # cfg.extraEntries)}
+ # '';
+ # in
+ {
+ # FIXME: Reactviate this whole iso thing when a disko redeploy is done.
+ # (and switch to tails instead of arch) <2024-05-12>
+ #
+ # system.activationScripts = {
+ # copyExtraFilesForBoot = copyExtraFiles;
+ # };
+
+ boot = {
+ initrd = {
+ kernelModules = ["nvme" "btrfs"];
+ };
+
+ kernelPackages = pkgs.linuxPackages_latest;
+
+ lanzaboote = {
+ enable = true;
+ pkiBundle = "/etc/secureboot";
+
+ settings = {
+ # Disable editing the kernel command line (which could allow someone to become root)
+ editor = false;
+ };
+ };
+
+ loader = {
+ systemd-boot = {
+ # Lanzaboote currently replaces the systemd-boot module.
+ # This setting is usually set to true in configuration.nix
+ # generated at installation time. So we force it to false
+ # for now.
+ enable = false;
+
+ # extraEntries = {
+ # "live.conf" = ''
+ # title Archlinux Live ISO
+ # linux /live/vmlinuz-linux
+ # initrd /live/initramfs-linux.img
+ # options img_dev=${config.soispha.disks.disk} img_loop=/archlinux.iso copytoram
+ # '';
+ # };
+ #
+ # extraFiles = let
+ # iso = import ./archlive_iso.nix {inherit pkgs;};
+ # in {
+ # "archlinux.iso" = "${iso}/archlinux.iso";
+ # "live/initramfs-linux.img" = "${iso}/live/initramfs-linux.img";
+ # "live/vmlinuz-linux" = "${iso}/live/vmlinuz-linux";
+ # };
+ };
+
+ grub = {
+ enable = false;
+ # theme = pkgs.nixos-grub2-theme;
+ splashImage = ./boot_pictures/gnu.png;
+ efiSupport = true;
+ device = "nodev"; # only for efi
+ };
+
+ efi = {
+ canTouchEfiVariables = true;
+ efiSysMountPoint = "/boot";
+ };
+ };
+ };
+ }
+ );
+}
diff --git a/sys/boot/archlive_iso.nix b/modules/system/boot/iso_entry/archlive_iso.nix
index d19a4a87..d19a4a87 100644
--- a/sys/boot/archlive_iso.nix
+++ b/modules/system/boot/iso_entry/archlive_iso.nix
diff --git a/sys/boot/signing_key.nix b/modules/system/boot/iso_entry/signing_key.nix
index 788447be..788447be 100644
--- a/sys/boot/signing_key.nix
+++ b/modules/system/boot/iso_entry/signing_key.nix
diff --git a/modules/system/cleanup/default.nix b/modules/system/cleanup/default.nix
new file mode 100644
index 00000000..4e192f7d
--- /dev/null
+++ b/modules/system/cleanup/default.nix
@@ -0,0 +1,18 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.cleanup;
+in {
+ # remove all the bloat, which NixOS installs by default
+ options.soispha.cleanup = {
+ enable = lib.mkEnableOption "avoiding of nixos' default installed packages";
+ };
+
+ config = lib.mkIf cfg.enable {
+ environment = {
+ defaultPackages = lib.mkForce [];
+ };
+ };
+}
diff --git a/modules/system/default.nix b/modules/system/default.nix
new file mode 100644
index 00000000..0eef0b7f
--- /dev/null
+++ b/modules/system/default.nix
@@ -0,0 +1,26 @@
+{config, ...}: let
+ cfg = config.soispha;
+in {
+ imports = [
+ ./boot
+ ./cleanup
+ ./disks
+ ./documentation
+ ./fonts
+ ./hardware
+ ./impermanence
+ ./locale
+ ./networking
+ ./polkit
+ ./power
+ ./secrets
+ ./services
+ ./sound
+ ./tempfiles
+ ./users
+ ./version
+ ./waydroid
+ ];
+ options = {};
+ config = {};
+}
diff --git a/sys/disks/default.nix b/modules/system/disks/default.nix
index 2283db96..c0e5bcfd 100644
--- a/sys/disks/default.nix
+++ b/modules/system/disks/default.nix
@@ -14,29 +14,25 @@
in {
options.soispha.disks = {
enable = lib.mkEnableOption "disk setup with disko";
+
disk = lib.mkOption {
type = lib.types.path;
example = lib.literalExpression "/dev/disk/by-uuid/0442cb6d-f13a-4635-b487-fa76189774c5";
- description = ''
- The disk used for installing the OS.
- '';
- };
- ssd = lib.mkOption {
- type = lib.types.bool;
- example = lib.literalExpression "true";
- default = false;
- description = lib.mdDoc "Enable ssd specific improvements, like trim";
+ description = "The disk used for installing the OS.";
};
+
+ ssd = lib.mkEnableOption "ssd specific improvements, like trim";
+
swap = {
uuid = lib.mkOption {
type = lib.types.str;
example = lib.literalExpression "d1d20ae7-3d8a-44da-86da-677dbbb10c89";
- description = lib.mdDoc "The uuid of the swapfile";
+ description = "The uuid of the swapfile";
};
resumeOffset = lib.mkOption {
type = lib.types.str;
example = lib.literalExpression "134324224";
- description = lib.mdDoc "The resume offset of the swapfile";
+ description = "The resume offset of the swapfile";
};
};
};
diff --git a/sys/disks/fstrim.nix b/modules/system/disks/fstrim.nix
index 6daeb65e..6daeb65e 100644
--- a/sys/disks/fstrim.nix
+++ b/modules/system/disks/fstrim.nix
diff --git a/sys/disks/hibernate.nix b/modules/system/disks/hibernate.nix
index ad7ca12c..a50e5b57 100644
--- a/sys/disks/hibernate.nix
+++ b/modules/system/disks/hibernate.nix
@@ -12,6 +12,7 @@
ExecStart = "${pkgs.bash}/bin/bash -c \"${pkgs.util-linux}/bin/swapon /swap/swapfile && ${pkgs.util-linux}/bin/swapoff /dev/zram0\"";
};
};
+
hibernate-resume = {
wantedBy = ["systemd-hibernate.service"];
unitConfig = {
diff --git a/modules/system/documentation/default.nix b/modules/system/documentation/default.nix
new file mode 100644
index 00000000..0e998d6c
--- /dev/null
+++ b/modules/system/documentation/default.nix
@@ -0,0 +1,24 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.documentation;
+in {
+ options.soispha.documentation = {
+ enable = lib.mkEnableOption "documentation";
+ };
+ config = lib.mkIf cfg.enable {
+ documentation = {
+ nixos = {
+ includeAllModules = true;
+
+ enable = true;
+ };
+ dev = {
+ # Add man pages aimed at developers (I guess c library stuff, and the like)
+ enable = true;
+ };
+ };
+ };
+}
diff --git a/modules/system/fonts/default.nix b/modules/system/fonts/default.nix
new file mode 100644
index 00000000..fa99c1f3
--- /dev/null
+++ b/modules/system/fonts/default.nix
@@ -0,0 +1,55 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.soispha.fonts;
+in {
+ options.soispha.fonts = {
+ enable = lib.mkEnableOption "fonts";
+
+ fonts = lib.mkOption {
+ type = lib.types.listOf lib.types.path;
+ example = lib.literalExpression ''["SourceCodePro" "Overpass" "FiraCode"]'';
+ default = [
+ "SourceCodePro"
+ "Overpass"
+ ];
+ description = "The nerd-fonts to install";
+ };
+
+ enableEmoji = lib.mkEnableOpiton "emoji font support";
+ };
+
+ config = lib.mkIf cfg.enable {
+ fonts = {
+ packages = let
+ nerdFont = pkgs.nerdfonts.override {
+ inherit (cfg) fonts;
+ };
+ in
+ [
+ nerdFont
+ ]
+ ++ (with pkgs; [liberation_ttf])
+ ++ lib.optional cfg.enableEmoji pkgs.noto-fonts-emoji;
+
+ fontconfig = {
+ # NOTE: This is responsible for color emoji support <2023-08-28>
+ # WARNING: This could lead to broken font rendering, if the emoji font is used as
+ # a fallback for normal characters <2024-05-16>
+ localConf = lib.mkIf cfg.enableEmoji (builtins.readFile ./emoji_font.xml);
+
+ defaultFonts = {
+ serif = lib.mkForce ["Liberation Serif"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji";
+ sansSerif = lib.mkForce ["Overpass Nerd Font Propo"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji";
+ monospace = lib.mkForce ["SauceCodePro Nerd Font Mono"] ++ lib.optional cfg.enableEmoji "Noto Color Emoji";
+ emoji = lib.mkIf cfg.enableEmoji (lib.mkForce ["Noto Color Emoji"]);
+ };
+ allowType1 = false;
+ allowBitmaps = false;
+ };
+ };
+ };
+}
diff --git a/sys/font/font.xml b/modules/system/fonts/emoji_font.xml
index f3f6bb3e..f3f6bb3e 100644
--- a/sys/font/font.xml
+++ b/modules/system/fonts/emoji_font.xml
diff --git a/modules/system/hardware/default.nix b/modules/system/hardware/default.nix
new file mode 100644
index 00000000..acf9fb2e
--- /dev/null
+++ b/modules/system/hardware/default.nix
@@ -0,0 +1,68 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.soispha.hardware;
+in {
+ options.soispha.hardware = {
+ enable = lib.mkEnableOption "udev rules for devices I use";
+ moonlander = {
+ enableLiveTraining = lib.mkEnableOption "udev rules for live training";
+ enableFlashing = lib.mkEnableOption "udev rules for firmware flashing";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ hardware = {
+ keyboard.zsa.enable = false;
+ nitrokey.enable = true;
+
+ # TODO: Remove this once I know, that it is no longer necessary <2024-05-16>
+ onlykey.enable = true;
+
+ opengl = {
+ enable = true;
+ extraPackages = builtins.attrValues {
+ inherit
+ (pkgs)
+ vaapiVdpau
+ libvdpau-va-gl
+ ;
+ };
+ };
+ };
+
+ # TODO: Remove the support for the old keyboards <2024-05-16>
+ services.udev.extraRules =
+ lib.mkIf cfg.moonlander.enableLiveTraining ''
+ # Rules for Oryx web flashing and live training
+ KERNEL=="hidraw*", ATTRS{idVendor}=="16c0", MODE="0664", GROUP="plugdev"
+ KERNEL=="hidraw*", ATTRS{idVendor}=="3297", MODE="0664", GROUP="plugdev"
+
+ # Legacy rules for live training over webusb (Not needed for firmware v21+)
+ # Rule for all ZSA keyboards
+ SUBSYSTEM=="usb", ATTR{idVendor}=="3297", GROUP="plugdev"
+ # Rule for the Moonlander
+ SUBSYSTEM=="usb", ATTR{idVendor}=="3297", ATTR{idProduct}=="1969", GROUP="plugdev"
+ # Rule for the Ergodox EZ
+ SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="1307", GROUP="plugdev"
+ # Rule for the Planck EZ
+ SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="6060", GROUP="plugdev"
+ ''
+ + lib.mkIf cfg.moonlander.enableFlashing
+ ''
+ # Wally Flashing rules for the Ergodox EZ
+ ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1"
+ ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1"
+ SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", MODE:="0666"
+ KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", MODE:="0666"
+
+ # Wally Flashing rules for the Moonlander and Planck EZ
+ SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", \
+ MODE:="0666", \
+ SYMLINK+="stm32_dfu"
+ '';
+ };
+}
diff --git a/modules/system/impermanence/default.nix b/modules/system/impermanence/default.nix
new file mode 100644
index 00000000..dca30083
--- /dev/null
+++ b/modules/system/impermanence/default.nix
@@ -0,0 +1,55 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.impermanence;
+in {
+ options.soispha.impermanence = {
+ enable = lib.mkEnableOption "persisting directories and files with impermanence";
+
+ directories = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default =
+ [
+ "/etc/nixos"
+ "/var/log"
+ "/var/lib/systemd"
+ ]
+ ++ lib.optional config.networking.networkmanager.enable "/etc/NetworkManager"
+ ++ lib.optional config.boot.lanzaboote.enable "/etc/secureboot"
+ ++ lib.optional config.hardware.bluetooth.enable "/var/lib/bluetooth"
+ ++ lib.optional config.virtualisation.waydroid.enable "/var/lib/waydroid"
+ ++ lib.optional config.services.postgresql.enable "/var/lib/postgresql";
+
+ defaultText = lib.literalExpression ''
+ [
+ "/etc/nixos"
+ "/var/log"
+ "/var/lib/systemd"
+ ]
+ ++ lib.optional config.networking.networkmanager.enable "/etc/NetworkManager"
+ ++ lib.optional config.boot.lanzaboote.enable "/etc/secureboot"
+ ++ lib.optional config.hardware.bluetooth.enable "/var/lib/bluetooth"
+ ++ lib.optional config.virtualisation.waydroid.enable "/var/lib/waydroid"
+ ++ lib.optional config.services.postgresql.enable "/var/lib/postgresql"
+ '';
+ description = "The directories to persist";
+ };
+ };
+
+ config = lib.mkIf cfg.enable {
+ # needed for the hm impermanence config
+ programs.fuse.userAllowOther = true;
+
+ environment.persistence = {
+ "/srv" = {
+ hideMounts = true;
+ inherit (cfg) directories;
+ files = [
+ "/etc/machine-id"
+ ];
+ };
+ };
+ };
+}
diff --git a/sys/libvirtd/default.nix b/modules/system/libvirtd/default.nix
index 5c519550..5c519550 100644
--- a/sys/libvirtd/default.nix
+++ b/modules/system/libvirtd/default.nix
diff --git a/sys/locale/default.nix b/modules/system/locale/default.nix
index 7912b45b..10569216 100644
--- a/sys/locale/default.nix
+++ b/modules/system/locale/default.nix
@@ -6,19 +6,27 @@
cfg = config.soispha.locale;
in {
options.soispha.locale = {
- enable = lib.mkEnableOption (lib.mdDoc "locale");
+ enable = lib.mkEnableOption "locale setup";
+
keyMap = lib.mkOption {
type = lib.types.str;
example = "us";
default = "dvorak";
+ description = "The console key map language to use";
+ };
+
+ timeZone = lib.mkOption {
+ type = lib.types.str;
+ default = "Europe/Berlin";
+ description = "The time zone to use";
};
};
config = lib.mkIf cfg.enable {
- # Set your time zone.
- time.timeZone = "Europe/Berlin";
+ time = {
+ inherit (cfg) timeZone;
+ };
- # Select internationalisation properties.
i18n = {
defaultLocale = "en_CA.UTF-8";
extraLocaleSettings = {
@@ -35,7 +43,7 @@ in {
services.xserver.xkb.extraLayouts = {
"us-modified" = {
- description = "standard us with german and swedish extra chars.";
+ description = "standard us with caps as compose key.";
languages = ["eng" "swe" "deu"];
symbolsFile = ./keymaps/us_modified.xkb;
};
diff --git a/sys/locale/keymaps/dvorak_modified.xkb b/modules/system/locale/keymaps/dvorak_modified.xkb
index 63f5d4fb..63f5d4fb 100644
--- a/sys/locale/keymaps/dvorak_modified.xkb
+++ b/modules/system/locale/keymaps/dvorak_modified.xkb
diff --git a/sys/locale/keymaps/us_modified.xkb b/modules/system/locale/keymaps/us_modified.xkb
index 6299a5e9..6299a5e9 100644
--- a/sys/locale/keymaps/us_modified.xkb
+++ b/modules/system/locale/keymaps/us_modified.xkb
diff --git a/modules/system/networking/default.nix b/modules/system/networking/default.nix
new file mode 100644
index 00000000..aaaab782
--- /dev/null
+++ b/modules/system/networking/default.nix
@@ -0,0 +1,81 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.networking;
+in {
+ options.soispha.networking = {
+ enable = lib.mkEnableOption "networking";
+
+ networkManager = {
+ enable = lib.mkEnableOption "NetworkManager";
+ };
+
+ hostName = lib.mkOption {
+ type = lib.types.str;
+ example = "apzu";
+ description = "The name of the host";
+ };
+ };
+
+ config =
+ lib.mkIf cfg.enable {
+ systemd.network = {
+ networks = {
+ "tap0" = {
+ name = "tap0";
+ bridge = [
+ "virbr0"
+ ];
+ };
+ "enp4s0" = {
+ name = "enp4s0";
+ networkConfig = {
+ DHCP = "yes";
+ DNSOverTLS = "yes";
+ DNSSEC = "yes";
+ };
+ bridge = [
+ "virbr0"
+ ];
+ };
+ };
+
+ netdevs = {
+ "tap0" = {
+ netdevConfig = {
+ Name = "tap0";
+ Kind = "tap";
+ };
+ tapConfig = {
+ User = "${config.users.users.soispha.uid}";
+ Group = "libvirtd";
+ };
+ };
+ "virbr0" = {
+ netdevConfig = {
+ Name = "br0";
+ Kind = "bridge";
+ };
+ };
+ };
+ };
+ }
+ // lib.mkIf cfg.networkManager.enable {
+ networking = {
+ networkmanager = {
+ enable = true;
+ dns = "default";
+ wifi = {
+ powersave = true;
+ };
+ };
+ inherit (cfg) hostName;
+ };
+
+ users.users.soispha.extraGroups = [
+ "networkmanager" # allows to configure networkmanager as this user
+ ];
+ };
+}
diff --git a/modules/system/polkit/default.nix b/modules/system/polkit/default.nix
new file mode 100644
index 00000000..fb13505b
--- /dev/null
+++ b/modules/system/polkit/default.nix
@@ -0,0 +1,14 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.polkit;
+in {
+ options.soispha.polkit = {
+ enable = lib.mkEnableOption "polkit";
+ };
+ config = lib.mkIf cfg.enable {
+ security.polkit.enable = true;
+ };
+}
diff --git a/modules/system/power/default.nix b/modules/system/power/default.nix
new file mode 100644
index 00000000..13013879
--- /dev/null
+++ b/modules/system/power/default.nix
@@ -0,0 +1,33 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.power;
+in {
+ options.soispha.power = {
+ enable = lib.mkEnableOption "power optimizations";
+ };
+
+ config = lib.mkIf cfg.enable {
+ # see this for reference: https://github.com/NixOS/nixpkgs/issues/211345
+ services = {
+ # conflicts with tlp
+ power-profiles-daemon.enable = false;
+
+ thermald.enable = true;
+
+ tlp = {
+ enable = true;
+ settings = {
+ CPU_BOOST_ON_AC = 1;
+ CPU_BOOST_ON_BAT = 0;
+ CPU_SCALING_GOVERNOR_ON_AC = "performance";
+ CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
+ SATA_LINKPWR_ON_AC = "max_performance";
+ SATA_LINKPWR_ON_BAT = "min_power";
+ };
+ };
+ };
+ };
+}
diff --git a/modules/system/secrets/default.nix b/modules/system/secrets/default.nix
new file mode 100644
index 00000000..bbfaf9c1
--- /dev/null
+++ b/modules/system/secrets/default.nix
@@ -0,0 +1,82 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ inherit (config.networking) hostName;
+ # mkFakeSecret = secretName: {
+ # name = secretName;
+ # value = {
+ # path = "/dev/null";
+ # };
+ # };
+ # fakeSecrets =
+ # builtins.listToAttrs (lib.debug.traceValSeqN 2 (builtins.map mkFakeSecret
+ # (lib.debug.traceValSeqN 2 (builtins.attrNames secrets))));
+ cfg = config.soispha.secrets;
+in {
+ options.soispha.secrets = {
+ enable = lib.mkEnableOption "secrets through agenix";
+ };
+
+ config = lib.mkIf cfg.enable {
+ age = {
+ secrets = {
+ # TODO: Remove this, as I'm no longer using nheko <2024-05-16>
+ nheko = {
+ file = ./nheko/conf. + hostName;
+ mode = "700";
+ owner = "soispha";
+ group = "users";
+ };
+
+ lf_cd_paths = {
+ file = ./lf/cd_paths;
+ mode = "700";
+ owner = "soispha";
+ group = "users";
+ };
+
+ # FIXME: Reactive when serverphone is merged in tree again <2024-05-11>
+ #
+ # serverphoneCa = {
+ # file = ./serverphone/ca.key;
+ # mode = "700";
+ # owner = "serverphone";
+ # group = "serverphone";
+ # };
+ # serverphoneServer = {
+ # file = ./serverphone/server.key;
+ # mode = "700";
+ # owner = "serverphone";
+ # group = "serverphone";
+ # };
+
+ taskserverPrivate = {
+ file = ./taskserver/private.key;
+ mode = "700";
+ owner = "soispha";
+ group = "users";
+ };
+ taskserverPublic = {
+ file = ./taskserver/public.cert;
+ mode = "700";
+ owner = "soispha";
+ group = "users";
+ };
+ taskserverCA = {
+ file = ./taskserver/ca.cert;
+ mode = "700";
+ owner = "soispha";
+ group = "users";
+ };
+ taskserverCredentials = {
+ file = ./taskserver/credentials;
+ mode = "700";
+ owner = "soispha";
+ group = "users";
+ };
+ };
+ };
+ };
+}
diff --git a/sys/secrets/lf/cd_paths b/modules/system/secrets/lf/cd_paths
index fff32c61..fff32c61 100644
--- a/sys/secrets/lf/cd_paths
+++ b/modules/system/secrets/lf/cd_paths
diff --git a/sys/secrets/nheko/conf.apzu b/modules/system/secrets/nheko/conf.apzu
index a4f704ea..a4f704ea 100644
--- a/sys/secrets/nheko/conf.apzu
+++ b/modules/system/secrets/nheko/conf.apzu
diff --git a/sys/secrets/nheko/conf.isimud b/modules/system/secrets/nheko/conf.isimud
index ef6c52b6..ef6c52b6 100644
--- a/sys/secrets/nheko/conf.isimud
+++ b/modules/system/secrets/nheko/conf.isimud
diff --git a/sys/secrets/nheko/conf.tiamat b/modules/system/secrets/nheko/conf.tiamat
index 51cab7df..51cab7df 100644
--- a/sys/secrets/nheko/conf.tiamat
+++ b/modules/system/secrets/nheko/conf.tiamat
diff --git a/sys/secrets/secrets.nix b/modules/system/secrets/secrets.nix
index cd6447b7..cd6447b7 100644
--- a/sys/secrets/secrets.nix
+++ b/modules/system/secrets/secrets.nix
diff --git a/sys/secrets/serverphone/ca.key b/modules/system/secrets/serverphone/ca.key
index d49c5395..d49c5395 100644
--- a/sys/secrets/serverphone/ca.key
+++ b/modules/system/secrets/serverphone/ca.key
diff --git a/sys/secrets/serverphone/server.key b/modules/system/secrets/serverphone/server.key
index a2720406..a2720406 100644
--- a/sys/secrets/serverphone/server.key
+++ b/modules/system/secrets/serverphone/server.key
diff --git a/sys/secrets/taskserver/ca.cert b/modules/system/secrets/taskserver/ca.cert
index 203d62a8..203d62a8 100644
--- a/sys/secrets/taskserver/ca.cert
+++ b/modules/system/secrets/taskserver/ca.cert
diff --git a/sys/secrets/taskserver/credentials b/modules/system/secrets/taskserver/credentials
index f3aaf502..f3aaf502 100644
--- a/sys/secrets/taskserver/credentials
+++ b/modules/system/secrets/taskserver/credentials
diff --git a/sys/secrets/taskserver/private.key b/modules/system/secrets/taskserver/private.key
index 5afecdaf..5afecdaf 100644
--- a/sys/secrets/taskserver/private.key
+++ b/modules/system/secrets/taskserver/private.key
diff --git a/sys/secrets/taskserver/public.cert b/modules/system/secrets/taskserver/public.cert
index 1cf9b5f0..1cf9b5f0 100644
--- a/sys/secrets/taskserver/public.cert
+++ b/modules/system/secrets/taskserver/public.cert
diff --git a/sys/secrets/update.sh b/modules/system/secrets/update.sh
index edc4ae8a..edc4ae8a 100755
--- a/sys/secrets/update.sh
+++ b/modules/system/secrets/update.sh
diff --git a/sys/svcs/adb/default.nix b/modules/system/services/adb/default.nix
index 4055dbb1..4055dbb1 100644
--- a/sys/svcs/adb/default.nix
+++ b/modules/system/services/adb/default.nix
diff --git a/sys/svcs/backup/default.nix b/modules/system/services/backup/default.nix
index 91433bf9..705dcf23 100644
--- a/sys/svcs/backup/default.nix
+++ b/modules/system/services/backup/default.nix
@@ -9,16 +9,18 @@
${pkgs.snap-sync-forked}/bin/snap-sync-forked --UUID "${cfg.backupDiskUuid}" --noconfirm;
${pkgs.util-linux}/bin/umount "/run/media/${cfg.backupDiskUuid}";
'';
- cfg = config.soispha.fs.backup;
+
+ cfg = config.soispha.backup;
in {
- options.soispha.fs.backup = {
- enable = lib.mkEnableOption (lib.mdDoc "backups with snap-sync");
+ options.soispha.backup = {
+ enable = lib.mkEnableOption "backups with my forked snap-sync";
backupDiskUuid = lib.mkOption {
type = lib.types.str;
example = lib.literalExpression "d1d20ae7-3d8a-44da-86da-677dbbb10c89";
- description = lib.mdDoc "The UUID of the backup disk";
+ description = "The UUID of the backup disk";
};
};
+
config = lib.mkIf cfg.enable {
systemd = {
services.backup = {
@@ -31,6 +33,7 @@ in {
ExecStart = "${backup-script}/bin/backsnap";
};
};
+
timers.backup = {
wantedBy = ["timers.target"];
unitConfig = {
diff --git a/modules/system/services/dconf/default.nix b/modules/system/services/dconf/default.nix
new file mode 100644
index 00000000..f6598a9b
--- /dev/null
+++ b/modules/system/services/dconf/default.nix
@@ -0,0 +1,7 @@
+{...}: {
+ # needed to make home-manager play nice with some apps. See:
+ # https://nix-community.github.io/home-manager/index.xhtml#_why_do_i_get_an_error_message_about_literal_ca_desrt_dconf_literal_or_literal_dconf_service_literal
+ programs.dconf.enable = true;
+ # FIXME: This should also be parameterized. <2024-05-16>
+}
+# vim: nolinebreak nowrap textwidth=0
diff --git a/sys/svcs/default.nix b/modules/system/services/default.nix
index 56a16055..76ef26e2 100644
--- a/sys/svcs/default.nix
+++ b/modules/system/services/default.nix
@@ -1,16 +1,16 @@
{...}: {
imports = [
+ #./serverphone
./adb
./backup
./dconf
./fwupd
- ./getty
+ ./issue_file
./nix
./openssh
./postgresql
./printing
./scanning
- #./serverphone
./snapper
./steam
./swaylock
diff --git a/modules/system/services/fwupd/default.nix b/modules/system/services/fwupd/default.nix
new file mode 100644
index 00000000..5ad4f467
--- /dev/null
+++ b/modules/system/services/fwupd/default.nix
@@ -0,0 +1,14 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.services.fwupd;
+in {
+ options.soispha.services.fwupd = {
+ enable = lib.mkEnableOption "fwupd";
+ };
+ config = lib.mkIf cfg.enable {
+ services.fwupd.enable = true;
+ };
+}
diff --git a/sys/svcs/getty/default.nix b/modules/system/services/issue_file/default.nix
index 7e8a4e46..930be1d9 100644
--- a/sys/svcs/getty/default.nix
+++ b/modules/system/services/issue_file/default.nix
@@ -1,10 +1,7 @@
-{
- lib,
- config,
- ...
-}: {
- services.getty = {
- greetingLine = lib.mkForce ''
+{config, ...}: {
+ environment.etc.issue = {
+ # Friendly greeting on the virtual consoles.
+ text = ''
[?25l[?7l 
 ▗▄▄▄ ▗▄▄▄▄ ▄▄▄▖ 
 ▜███▙ ▜███▙ ▟███▛ 
@@ -27,7 +24,7 @@
 ▟███▛ ▜███▙ ▜███▙ 
 ▝▀▀▀ ▀▀▀▀▘ ▀▀▀▘ 
 
-  NixOS ${config.system.nixos.label} 
+  NixOS ${config.system.nixos.label} 
 --------------

  date: \d
diff --git a/sys/svcs/nix/default.nix b/modules/system/services/nix/default.nix
index 5766fcdd..65fc7273 100644
--- a/sys/svcs/nix/default.nix
+++ b/modules/system/services/nix/default.nix
@@ -1,5 +1,6 @@
{
pkgs,
+
# flakes
nixpkgs_as_input,
templates,
diff --git a/sys/svcs/openssh/default.nix b/modules/system/services/openssh/default.nix
index b733dbe7..b733dbe7 100644
--- a/sys/svcs/openssh/default.nix
+++ b/modules/system/services/openssh/default.nix
diff --git a/modules/system/services/postgresql/default.nix b/modules/system/services/postgresql/default.nix
new file mode 100644
index 00000000..c47a235c
--- /dev/null
+++ b/modules/system/services/postgresql/default.nix
@@ -0,0 +1,17 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.services.postgresql;
+in {
+ options.soispha.services.postgresql = {
+ enable = lib.mkEnableOption "postgresql";
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.postgresql = {
+ enable = true;
+ };
+ };
+}
diff --git a/modules/system/services/printing/default.nix b/modules/system/services/printing/default.nix
new file mode 100644
index 00000000..85d15b16
--- /dev/null
+++ b/modules/system/services/printing/default.nix
@@ -0,0 +1,45 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.services.printing;
+in {
+ options.soispha.services.printing = {
+ enable = lib.mkEnableOption "default printing configuration";
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.avahi = {
+ enable = true;
+ nssmdns4 = true;
+ nssmdns6 = true;
+ openFirewall = true;
+ };
+
+ services.printing = {
+ enable = true;
+ startWhenNeeded = true;
+ webInterface = true;
+
+ # deletes `/var/cache/cups`, `/var/lib/cups` and `/var/spool/cups` on cups startup
+ stateless = true;
+
+ drivers = [];
+ };
+
+ hardware = {
+ printers = {
+ ensurePrinters = [
+ {
+ name = "Brother";
+ description = "Brother DCP-9022CDW";
+ model = "everywhere";
+ deviceUri = "dnssd://Brother%20DCP-9022CDW._ipp._tcp.local/?uuid=e3248000-80ce-11db-8000-30055c773bcf";
+ }
+ ];
+ ensureDefaultPrinter = "Brother";
+ };
+ };
+ };
+}
diff --git a/modules/system/services/scanning/default.nix b/modules/system/services/scanning/default.nix
new file mode 100644
index 00000000..dda507fa
--- /dev/null
+++ b/modules/system/services/scanning/default.nix
@@ -0,0 +1,25 @@
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}: let
+ cfg = config.soispha.services.scanning;
+in {
+ options.soispha.services.scanning = {
+ enable = lib.mkEnableOption "default scanning configuration";
+ };
+
+ config = lib.mkIf cfg.enable {
+ hardware = {
+ sane = {
+ enable = true;
+ extraBackends = [pkgs.sane-airscan];
+ };
+ };
+
+ users.users.soispha.extraGroups = [
+ "scanner" # for permission to access the scanner.
+ ];
+ };
+}
diff --git a/sys/svcs/serverphone/certificates/ca.crt b/modules/system/services/serverphone/certificates/ca.crt
index 7a4ae6f9..7a4ae6f9 100644
--- a/sys/svcs/serverphone/certificates/ca.crt
+++ b/modules/system/services/serverphone/certificates/ca.crt
diff --git a/sys/svcs/serverphone/certificates/server.crt b/modules/system/services/serverphone/certificates/server.crt
index f994cdc8..f994cdc8 100644
--- a/sys/svcs/serverphone/certificates/server.crt
+++ b/modules/system/services/serverphone/certificates/server.crt
diff --git a/sys/svcs/serverphone/default.nix b/modules/system/services/serverphone/default.nix
index 20125a75..20125a75 100644
--- a/sys/svcs/serverphone/default.nix
+++ b/modules/system/services/serverphone/default.nix
diff --git a/sys/svcs/serverphone/keys/key_1 b/modules/system/services/serverphone/keys/key_1
index 67720882..67720882 120000
--- a/sys/svcs/serverphone/keys/key_1
+++ b/modules/system/services/serverphone/keys/key_1
diff --git a/sys/svcs/serverphone/keys/key_2 b/modules/system/services/serverphone/keys/key_2
index 24df7207..24df7207 120000
--- a/sys/svcs/serverphone/keys/key_2
+++ b/modules/system/services/serverphone/keys/key_2
diff --git a/modules/system/services/snapper/default.nix b/modules/system/services/snapper/default.nix
new file mode 100644
index 00000000..bf8201a4
--- /dev/null
+++ b/modules/system/services/snapper/default.nix
@@ -0,0 +1,53 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.services.snapper;
+in {
+ options.soispha.services.snapper = {
+ enable = lib.mkEnableOption "snapper config";
+ };
+
+ config = lib.mkIf cfg.enable {
+ services.snapper = {
+ configs = {
+ srv = {
+ SUBVOLUME = "/srv";
+ FSTYPE = "btrfs";
+ # users and groups allowed to work with config
+ ALLOW_GROUPS = ["wheel"];
+
+ # sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots
+ # directory
+ SYNC_ACL = true;
+
+ # run daily number cleanup
+ NUMBER_CLEANUP = false;
+
+ # limit for number cleanup
+ NUMBER_MIN_AGE = 1800;
+ NUMBER_LIMIT = 50;
+ NUMBER_LIMIT_IMPORTANT = 10;
+
+ # create hourly snapshots
+ TIMELINE_CREATE = true;
+
+ # cleanup hourly snapshots after some time
+ TIMELINE_CLEANUP = true;
+
+ # limits for timeline cleanup
+ TIMELINE_MIN_AGE = 1800;
+ TIMELINE_LIMIT_HOURLY = 7;
+ TIMELINE_LIMIT_DAILY = 3;
+ TIMELINE_LIMIT_WEEKLY = 2;
+ TIMELINE_LIMIT_MONTHLY = 0;
+ TIMELINE_LIMIT_YEARLY = 2;
+
+ # cleanup empty pre-post-pairs
+ EMPTY_PRE_POST_CLEANUP = true;
+ };
+ };
+ };
+ };
+}
diff --git a/sys/svcs/steam/default.nix b/modules/system/services/steam/default.nix
index 54091493..6e507fd9 100644
--- a/sys/svcs/steam/default.nix
+++ b/modules/system/services/steam/default.nix
@@ -7,16 +7,16 @@
cfg = config.soispha.services.steam;
in {
options.soispha.services.steam = {
- enable = lib.mkOption {
- default = false;
- description = lib.mdDoc "Steam";
- };
+ enable = lib.mkEnableOption "Stream";
};
+
config = lib.mkIf cfg.enable {
programs.steam = {
enable = true;
};
+
environment.systemPackages = [
+ # TODO: Why is this package needed? <2024-05-16>
pkgs.wineWowPackages.waylandFull
];
};
diff --git a/sys/svcs/swaylock/default.nix b/modules/system/services/swaylock/default.nix
index 6cbcef28..6cbcef28 100644
--- a/sys/svcs/swaylock/default.nix
+++ b/modules/system/services/swaylock/default.nix
diff --git a/sys/svcs/xdg/default.nix b/modules/system/services/xdg/default.nix
index 5140a832..5140a832 100644
--- a/sys/svcs/xdg/default.nix
+++ b/modules/system/services/xdg/default.nix
diff --git a/sys/svcs/xdg/scripts/lf_wrapper.sh b/modules/system/services/xdg/scripts/lf_wrapper.sh
index 16603fe4..16603fe4 100755
--- a/sys/svcs/xdg/scripts/lf_wrapper.sh
+++ b/modules/system/services/xdg/scripts/lf_wrapper.sh
diff --git a/sys/svcs/xdg/scripts/ranger_wrapper.sh b/modules/system/services/xdg/scripts/ranger_wrapper.sh
index e148bf19..e148bf19 100755
--- a/sys/svcs/xdg/scripts/ranger_wrapper.sh
+++ b/modules/system/services/xdg/scripts/ranger_wrapper.sh
diff --git a/modules/system/sound/default.nix b/modules/system/sound/default.nix
new file mode 100644
index 00000000..f49cf95a
--- /dev/null
+++ b/modules/system/sound/default.nix
@@ -0,0 +1,38 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.sound;
+in {
+ options.soispha.sound = {
+ enable = lib.mkEnableOption "sound based on pipewire";
+ };
+
+ config = lib.mkIf cfg.enable {
+ sound.enable = true;
+ hardware.pulseaudio.enable = false;
+ security.rtkit.enable = true;
+
+ services.pipewire = {
+ enable = true;
+ alsa.enable = true;
+ alsa.support32Bit = true;
+ pulse.enable = true;
+ jack.enable = true;
+ };
+
+ # TODO: Find a better way to set the default volume <2024-03-10>
+ #
+ # environment.etc.pipewire-pulse-config = {
+ # target = "pipewire/pipewire-pulse.conf.d/pipewire-pulse-config.conf";
+ # text = ''
+ # # Extra scripts can be started here. Setup in default.pa can be moved in
+ # # a script or in pulse.cmd below
+ # context.exec = [
+ # { path = "${pkgs.pulseaudio}/bin/pactl" args = "set-sink-volume 0 13%" }
+ # ]
+ # '';
+ # };
+ };
+}
diff --git a/modules/system/tempfiles/default.nix b/modules/system/tempfiles/default.nix
new file mode 100644
index 00000000..fa17f112
--- /dev/null
+++ b/modules/system/tempfiles/default.nix
@@ -0,0 +1,20 @@
+{
+ config,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.temfiles;
+in {
+ options.soispha.tempfiles = {
+ enable = lib.mkEnableOption "systemd tempfiles generation";
+ };
+
+ config = lib.mkIf cfg.enable {
+ systemd.tmpfiles.rules = [
+ # TODO: Find a way to move this file to the lf home manager config.
+ #
+ # This file is needed to trash stuff on the root ('/') temp file system.
+ "d /.Trash 1777 root root"
+ ];
+ };
+}
diff --git a/modules/system/users/default.nix b/modules/system/users/default.nix
new file mode 100644
index 00000000..a44df7e8
--- /dev/null
+++ b/modules/system/users/default.nix
@@ -0,0 +1,50 @@
+{
+ config,
+ pkgs,
+ lib,
+ ...
+}: let
+ cfg = config.soispha.users;
+in {
+ options.soispha.users = {
+ enable = lib.mkEnableOption "user set-up for soispha";
+ hashedPassword = lib.mkOption {
+ type = lib.types.str;
+ example = lib.literalExpression "$y$jFT$ONrCqZIJKB7engmfA4orD/$0GO58/wV5wrYWj0cyONhyujZPjFmbT0XKtx2AvXLG0B";
+ description = "The hashed password of the user";
+ };
+ groups = lib.mkOption {
+ type = lib.types.listOf lib.types.str;
+ default = ["wheel"];
+ description = "The groups the soispha user should be part of";
+ };
+
+ # Although deprecated, this helps with old udev rules, that still use this group.
+ # TODO: Try to find a way to remove this option (i.e. set it always to false).
+ enableDeprecatedPlugdev = lib.mkEnableOption "the deprecated plugdev group for the user";
+ };
+
+ config = lib.mkIf cfg.enable {
+ # Ensure that the default shell of the user is actually enabled.
+ programs.zsh.enable = true;
+
+ users = {
+ mutableUsers = false;
+
+ users.soispha = {
+ isNormalUser = true;
+ home = "/home/soispha";
+ createHome = true;
+ shell = pkgs.zsh;
+ initialHashedPassword = cfg.hashedPassword;
+ extraGroups = cfg.groups ++ lib.optional cfg.enableDeprecatedPlugdev "plugdev";
+
+ uid = 1000;
+ openssh.authorizedKeys.keys = [
+ # TODO: This should be parameterized. <2024-05-16>
+ "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIME4ZVa+IoZf6T3U08JG93i6QIAJ4amm7mkBzO14JSkz"
+ ];
+ };
+ };
+ };
+}
diff --git a/modules/system/version/default.nix b/modules/system/version/default.nix
new file mode 100644
index 00000000..77cada14
--- /dev/null
+++ b/modules/system/version/default.nix
@@ -0,0 +1,19 @@
+{
+ config,
+ lib,
+ self,
+ ...
+}: let
+ cfg = config.soispha.version;
+in {
+ options.soispha.version = {
+ enable = lib.mkEnableOption "storing the git revision in /etc/nixos_git_rev";
+ };
+ config = lib.mkIf cfg.enable {
+ environment.etc.nixos_git_rev = {
+ text = builtins.toString (self.longRev
+ or self.lastModified
+ or "unknown");
+ };
+ };
+}
diff --git a/sys/waydroid/default.nix b/modules/system/waydroid/default.nix
index 09c388a6..4680db63 100644
--- a/sys/waydroid/default.nix
+++ b/modules/system/waydroid/default.nix
@@ -1,4 +1,5 @@
{...}: {
# 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;
}