refactor!: switch to dendritic pattern

BREAKING CHANGE: complete reorganization of the repository
This commit is contained in:
2026-09-30 18:36:06 +02:00
parent 12684b4e9c
commit 5f4a7a4a42
323 changed files with 7117 additions and 7380 deletions
+50
View File
@@ -0,0 +1,50 @@
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
boot = {
initrd = {
availableKernelModules = ["ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
kernelModules = [];
};
kernelModules = [];
extraModulePackages = [];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/28b965a5-940b-4990-87fe-039c9f373bf0";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/EBAD-6B85";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
"/tank" = {
device = "/dev/disk/by-uuid/ed00871e-a14a-428f-b6e4-5b56febd756a";
fsType = "ext4";
};
};
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}
+99
View File
@@ -0,0 +1,99 @@
{
config,
inputs,
...
}: let
m = config.flake.modules.nixos;
in {
flake-file.inputs.srvos = {
url = "github:nix-community/srvos";
inputs.nixpkgs.follows = "nixpkgs";
};
flake.modules.nixos.NaroMk3 = {...}: {
imports = [
inputs.srvos.nixosModules.server
inputs.srvos.nixosModules.hardware-hetzner-cloud
inputs.srvos.nixosModules.mixins-terminfo
./_hardware.nix
m.system-default
m.kernel
m.hardened
m.loader
m.docker
m.endlessh
m.ssh
];
mySystem = {
boot = {
kernel = {
hardened = true;
cpuVendor = "amd";
};
grub = {
enable = true;
device = "/dev/sdb";
};
};
dev.docker.enable = true;
misc.keymap = "fr-bepo";
networking = {
hostname = "NaroMk3";
id = "0003beef";
firewall = {
openPorts = [
22 # Gitea SSH
25 # SMTP
80 # HTTP
443 # HTTPS
465 # SMTPS
993 # IMAPS
];
};
};
packages.nix.gc.automatic = true;
services = {
endlessh.enable = false;
ssh = {
enable = true;
allowedUsers = ["phundrak"];
passwordAuthentication = false;
port = 2222; # port 22 will be used by Gitea
};
};
users = {
root.disablePassword = true;
phundrak = {
enable = true;
trusted = true;
};
};
};
# This option defines the first version of NixOS you have installed
# on this particular machine, and is used to maintain compatibility
# with application data (e.g. databases) created on older NixOS
# versions.
#
# Most users should NEVER change this value after the initial
# install, for any reason, even if you've upgraded your system to a
# new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and
# OS are pulled from, so changing it will NOT upgrade your system -
# see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT
# mean your system is out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all
# the changes it would make to your configuration, and migrated your
# data accordingly.
#
# For more information, see `man configuration.nix` or
# https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion
system.stateVersion = "25.05"; # Did you read the comment?
};
}
+42
View File
@@ -0,0 +1,42 @@
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd = {
availableKernelModules = ["ahci" "xhci_pci" "ehci_pci" "megaraid_sas" "usbhid" "usb_storage" "sd_mod" "sr_mod"];
kernelModules = [];
};
kernelModules = ["kvm-intel"];
extraModulePackages = [];
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/d2e703f7-90e0-43e7-9872-ce036f201c4b";
fsType = "ext4";
};
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
# networking.interfaces.eno2.useDHCP = lib.mkDefault true;
# networking.interfaces.eno3.useDHCP = lib.mkDefault true;
# networking.interfaces.eno4.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+82
View File
@@ -0,0 +1,82 @@
{config, ...}: let
m = config.flake.modules.nixos;
in {
flake.modules.nixos.elcafe = {config, ...}: {
imports = [
./_hardware.nix
m.system-default
m.sops-system
m.kernel
m.hardened
m.loader
m.docker
m.endlessh
m.ssh
m.traefik
];
sops.secrets = {
"elcafe/traefik/env".restartUnits = ["traefik.service"];
"elcafe/traefik/dynamic".restartUnits = ["traefik.service"];
};
mySystem = {
boot = {
kernel = {
hardened = true;
cpuVendor = "intel";
};
grub = {
enable = true;
device = "/dev/sdh";
};
zfs = {
enable = true;
pools = ["tank"];
};
};
dev.docker = {
enable = true;
storage = "/tank/docker/";
};
misc.keymap = "fr";
networking = {
hostname = "elcafe";
id = "501c7fb9";
};
packages.nix.gc.automatic = true;
services = {
endlessh.enable = true;
ssh = {
enable = true;
allowedUsers = ["phundrak"];
passwordAuthentication = true;
};
traefik = {
enable = false;
environmentFiles = [config.sops.secrets."elcafe/traefik/env".path];
dynamicConfigFile = config.sops.secrets."elcafe/traefik/dynamic".path;
};
};
users = {
root.disablePassword = true;
phundrak = {
enable = true;
trusted = true;
};
creug = {
enable = true;
sudo = true;
};
};
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It's perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.11"; # Did you read the comment?
};
}
+46
View File
@@ -0,0 +1,46 @@
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd.availableKernelModules = ["ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci"];
initrd.kernelModules = [];
kernelModules = ["kvm-intel"];
extraModulePackages = [];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/1a8adc62-a11c-4d80-a000-9d37a4fce7b7";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/4032-0CCF";
fsType = "vfat";
};
};
swapDevices = [{device = "/dev/disk/by-uuid/85b7722a-4859-4fe6-b838-660314443638";}];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s25.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wwp0s29u1u4.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+106
View File
@@ -0,0 +1,106 @@
{config, ...}: let
m = config.flake.modules.nixos;
in {
flake.modules.nixos.gampo = {
config,
pkgs,
...
}: {
imports = [
./_hardware.nix
m.system-default
m.sops-system
m.kernel
m.loader
m.plymouth
m.hyprland
m.xserver
m.docker
m.bluetooth
m.fingerprint
m.corne
m.ibm-trackpoint
m.opentablet
m.sound
m.i18n-input
m.appimage
m.flatpak
m.steam
m.fwupd
m.ssh
];
mySystem = {
boot = {
plymouth.enable = true;
kernel = {
cpuVendor = "intel";
package = pkgs.linuxPackages;
};
systemd-boot = true;
};
desktop = {
hyprland.enable = true;
xserver = {
enable = true;
de = "gnome";
};
};
dev.docker = {
enable = true;
podman.enable = true;
autoprune.enable = true;
};
hardware = {
bluetooth.enable = true;
fingerprint.enable = true;
input = {
corne.allowHidAccess = true;
ibmTrackpoint.disable = true;
opentablet.enable = true;
};
sound.enable = true;
};
i18n.input.enable = true;
misc.keymap = "fr-bepo";
networking = {
hostname = "gampo";
id = "0630b33f";
};
packages = {
appimage.enable = true;
flatpak.enable = true;
nix = {
gc.automatic = true;
nix-ld.enable = true;
};
};
services = {
fwupd.enable = true;
ssh.enable = true;
};
users = {
root.disablePassword = true;
phundrak = {
enable = true;
trusted = true;
};
};
};
sops.secrets.extraHosts = {
inherit (config.users.users.root) group;
owner = config.users.users.phundrak.name;
mode = "0440";
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database
# versions on your system were taken. It‘s perfectly fine and
# recommended to leave this value at the release version of the
# first install of this system. Before changing this value read
# the documentation for this option (e.g. man configuration.nix or
# on https://nixos.org/nixos/options.html).
system.stateVersion = "23.11"; # Did you read the comment?
};
}
+50
View File
@@ -0,0 +1,50 @@
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "thunderbolt" "usb_storage" "usbhid" "sd_mod"];
initrd.kernelModules = [];
kernelModules = ["kvm-amd"];
extraModulePackages = [];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/3738e245-f6aa-4ed8-a97b-c7bf199a7810";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/A2C1-2147";
fsType = "vfat";
options = ["fmask=0077" "dmask=0077"];
};
"/home" = {
device = "/dev/disk/by-uuid/532f1e53-2cd7-4345-82ec-7309f816cfb8";
fsType = "btrfs";
};
};
swapDevices = [{device = "/dev/disk/by-uuid/acdf872f-274c-4316-aeed-11bb1bbde6b8";}];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp17s0u9.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+181
View File
@@ -0,0 +1,181 @@
{config, ...}: let
m = config.flake.modules.nixos;
in {
flake.modules.nixos.marpa = {
config,
pkgs,
...
}: {
imports = [
./_hardware.nix
m.system-default
m.sops-system
m.kernel
m.loader
m.plymouth
m.hyprland
# m.niri
m.waydroid
m.xserver
m.docker
m.qemu
m.bluetooth
m.corne
m.opentablet
m.sound
m.i18n-input
m.appimage
m.flatpak
m.steam
m.fwupd
m.harmonia
m.languagetool
m.printing
m.ssh
m.sunshine
];
fileSystems = {
"/home".options = [
"compress=zstd:3" # Good balance of compression vs speed
"space_cache=v2" # Better performance
"noatime" # Don't update access times (less writes)
];
"/mnt/ai" = {
device = "/dev/disk/by-uuid/47e87286-caaa-4e43-b2fd-b9eceac90fe9";
fsType = "btrfs";
options = [
"compress=zstd:3" # Good balance of compression vs speed
"space_cache=v2" # Better performance
"noatime" # Don't update access times (less writes)
];
};
"/mnt/games" = {
device = "/dev/disk/by-uuid/a8453133-76dc-44bd-a825-444c3305fd9b";
fsType = "btrfs";
options = [
"compress=zstd:3" # Good balance of compression vs speed
"space_cache=v2" # Better performance
"noatime" # Don't update access times (less writes)
];
};
"/games" = {
device = "/dev/disk/by-uuid/77d32db8-2e85-4593-b6b8-55d4f9d14e1a";
fsType = "ext4";
};
};
services.displayManager.autoLogin = {
user = "phundrak";
enable = true;
};
mySystem = {
boot = {
plymouth.enable = true;
kernel = {
cpuVendor = "amd";
v4l2loopback.enable = true;
extraModprobeConfig = ''
options snd_usb_audio vid=0x1235 pid=0x8212 device_setup=1
'';
};
systemd-boot = true;
};
desktop = {
hyprland.enable = true;
niri.enable = true;
waydroid.enable = true;
xserver = {
enable = true;
de = "gnome";
};
};
dev = {
docker = {
enable = true;
podman.enable = true;
autoprune.enable = true;
};
qemu.enable = true;
};
hardware = {
amdgpu.enable = true;
bluetooth.enable = true;
input = {
corne.allowHidAccess = true;
opentablet.enable = true;
};
sound = {
enable = true;
noisetorch = true;
jack = true;
scarlett.enable = true;
};
};
i18n.input.enable = true;
misc.keymap = "fr-bepo";
networking = {
hostname = "marpa";
id = "7EA4A111";
firewall.openPortRanges = [
{
# Sunshine
from = 1714;
to = 1764;
}
];
};
packages = {
appimage.enable = true;
flatpak.enable = true;
nix.nix-ld.enable = true;
};
services = {
fwupd.enable = true;
harmonia = {
enable = true;
signKeyPaths = [config.sops.secrets."marpa/nix-cache-priv-key".path];
};
languagetool.enable = true;
printing.enable = true;
ssh.enable = true;
sunshine = {
enable = true;
autostart = true;
};
};
users = {
root.disablePassword = true;
phundrak = {
enable = true;
trusted = true;
};
};
};
sops.secrets = {
"marpa/nix-cache-priv-key" = {};
extraHosts = {
inherit (config.users.users.root) group;
owner = config.users.users.phundrak.name;
mode = "0440";
};
};
services.udev.extraHwdb = ''
mouse:usb:047d:80a6:*
LIBINPUT_MIDDLE_EMULATION_ENABLED=1
'';
security.polkit.enable = true;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It‘s perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "23.11"; # Did you read the comment?
};
}
+78
View File
@@ -0,0 +1,78 @@
{config, ...}: let
m = config.flake.modules.nixos;
in {
flake.modules.nixos.pinetab2-base = {config, ...}: {
imports = [
m.system-default
m.sops-system
m.hyprland
m.niri
m.waydroid
m.xserver
m.amdgpu
m.docker
m.bluetooth
m.opentablet
m.sound
m.i18n-input
m.appimage
m.flatpak
m.ssh
m.pinetab2
];
system.stateVersion = "25.11";
mySystem = {
desktop = {
hyprland.enable = true;
niri.enable = true;
waydroid.enable = true;
xserver = {
enable = true;
de = "gnome";
};
};
dev.docker = {
enable = true;
podman.enable = true;
autoprune.enable = true;
};
hardware = {
bluetooth.enable = true;
input.opentablet.enable = true;
pinetab2.enable = true;
sound.enable = true;
};
i18n.input.enable = true;
misc.keymap = "fr-bepo";
networking = {
hostname = "pinetab2";
id = "99a11b15";
wifi.disablePowersave = true;
};
packages = {
appimage.enable = true;
flatpak.enable = true;
nix = {
gc.automatic = true;
nix-ld.enable = true;
};
};
services.ssh.enable = true;
users = {
root.disablePassword = true;
phundrak = {
enable = true;
trusted = true;
};
};
};
sops.secrets.extraHosts = {
inherit (config.users.users.root) group;
owner = config.users.users.phundrak.name;
mode = "0440";
};
};
}
+39
View File
@@ -0,0 +1,39 @@
{...}: {
flake.modules.nixos.pinetab2-gnome = {
pkgs,
config,
...
}: {
# https://github.com/systemd/systemd/pull/35304#issuecomment-3855146191
# gnome autorotate expects 'normal' is the _display panel_ normal, but
# mutter autoconfiguration rotates by 90deg.
# compensating with gdctl for now, though it would be better to 'properly'
# fix this.
services.udev = {
extraHwdb = ''
sensor:modalias:*sc7a20:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 0, 1; 0, 1, 0
'';
extraRules = ''
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1018", ATTRS{idProduct}=="1006", ENV{SYSTEMD_WANTS}+="landscape.service", TAG+="systemd"
'';
};
systemd.services.landscape = {
script = ''
${pkgs.mutter}/bin/gdctl set --logical-monitor --primary --monitor=DSI-1 --transform normal
'';
serviceConfig.User = "phundrak";
serviceConfig.Type = "oneshot";
environment = {
"DBUS_SESSION_BUS_ADDRESS" = "unix:path=/run/user/${toString config.users.users."phundrak".uid}/bus";
};
};
environment.systemPackages = with pkgs; [
gnomeExtensions.arc-menu
gnomeExtensions.dash-to-dock
gnomeExtensions.dash-to-panel
gnomeExtensions.gjs-osk
gnomeExtensions.one-window-wonderland
];
};
}
+45
View File
@@ -0,0 +1,45 @@
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd.availableKernelModules = ["xhci_pci" "ahci" "mpt3sas" "usb_storage" "usbhid" "sd_mod"];
initrd.kernelModules = [];
kernelModules = ["kvm-amd"];
extraModulePackages = [];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/6f6bb286-3848-482e-b18c-940b459425c8";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/8A5A-5720";
fsType = "vfat";
options = ["fmask=0077" "dmask=0077"];
};
};
swapDevices = [{device = "/dev/disk/by-uuid/a0be51cb-11fa-4087-a14b-c314e35fc34f";}];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp4s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+75
View File
@@ -0,0 +1,75 @@
{config, ...}: let
m = config.flake.modules.nixos;
in {
flake.modules.nixos.tilo = {...}: {
imports = [
./_hardware.nix
m.system-default
m.kernel
m.hardened
m.loader
m.docker
m.calibre
m.endlessh
m.jellyfin
m.plex
m.ssh
];
mySystem = {
boot = {
kernel = {
hardened = true;
cpuVendor = "amd";
};
zfs = {
enable = true;
pools = ["tank"];
};
};
dev.docker.enable = true;
misc.keymap = "fr-bepo";
networking = {
hostname = "tilo";
id = "7110b33f";
firewall = {
openPorts = [
80 # HTTP
443 # HTTPS
25565 # Minecraft
];
};
};
packages.nix.gc.automatic = true;
services = {
calibre.enable = true;
endlessh.enable = true;
jellyfin.enable = true;
plex = {
enable = true;
dataDir = "/tank/web/stacks/plex/plex-config";
};
ssh = {
enable = true;
allowedUsers = ["phundrak"];
passwordAuthentication = false;
};
};
users = {
root.disablePassword = true;
phundrak = {
enable = true;
trusted = true;
};
};
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It‘s perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.11"; # Did you read the comment?
};
}