GHLUAAACTSVHSMSSM6AX2SDM4LAELPJ3WP5BADYFJFSGWRWZRDCQC C7OJKDCC4YPDQSGQBXE5K6WX327JJZ2BL7ADEX7H4MIN4ABL5P5AC LVZ6RPMIUE6CY4PQGXVRMWBIZHM5RIKOUF5M34QMP7OAXYIWYHTAC AN6E6FU2QXUOPIHQ6PMNTWILSBAVPFB53VVAQKNXLEAAQHD2RUZQC BAHAE6MCRPVFMSXFJOS2LOYDD4VQ6XLW5SDNINV2JV6RQRV4N4EAC QXOXQGW2OPGJQP5HUCNITHM3K4HDX4ZDTCW7TO3UGYL3EGA2JCRQC VYTCMSMP4GIZALMBRUA7FATGPITKJHW2PHNQVXOVHHAI4O5TW6BAC MQT74AV47PUYNCX27OMFK6BFN7PP4DX46JAACN2EPRYXUXV7EL3AC 5G7WRBMWKG6DMCOHE6WQHTYZACUHO2UPBZRWN72CFH7P45NN5E7QC KE4A6XYYKVBEVCWG4TPFRAO5EYJHCJB25VWNXB2NZNXNEPSDKH6QC ISKRPSY5MU5XKIV7FTBDYDPRKV6ONINH2SDIXY7QDGTXNCYN7YFQC 4R56PJDQPYZ5FLFAMZSNY7UI5TKF6N5YCHCJU3ZBV5FHB46GYM5QC QOY7D3GZ3WF7HAMEHAW2CIUB5TDQCFE3YDZEO23R5MFQEBN635WAC AHAA7UNL2RRXP7KERGVCC42GB564WS5BYSSFEOXW3EKVMB2UVEOAC ONJIY3TNGUJSQ4HRL2AIMDKYWYFICVZAHRU2GVY7LZ7ULWPY7NWQC XPKDQGFUFF4BT32ODPEJRZGBEOGZVDRAEN2EOWU7DBIN2QQX6KUAC VS6GXDU54DGMQJW7OCOZZCVEGE6F5SWXTW7NCDJUH67JN5MQQESQC SCB7IK7YNYAR3WTV2XYGPYCGCUW2GPJSWAA5S2ZGCYSZ5AZKXIDAC IWF6U7STQMYPIDITGO3MP3OBHFAS7MALD4KWOHTRSTA74HCCLQXQC IBVEQMEGESMK2XG57I3GJHWSBWOPLC5LURET4PS6URA465F4F67QC LNEFSFVU4YSTF7V36E24OWJN7ZLB4H2ZQS7K3NYIZ2D6H32CWCTAC RNQOZELE32XPE36GFN2I6P54AEV37ICKNRLGQF2JZ7WY2ZUKB57AC KOXYNEPMHOWPUOUDAIDAVC2ZPUCLFGN23BM6QJ4UIDGVN73SUO7AC LLRYXY25L67F5SIWZCZ3MXBC67T6LMQ3JBBJJR2ESKALWHXT4YGAC HWCVAVGHMRTGNMV7WXWM6XB6KMMZQCMZQXWHQV4MPKXZOCAOGXKAC E5WANV7PYNPZFSJE4AMZABQ76TUNKVZN3M6ZFD5V6CKAFKG444NAC UH6ZL2HFCGZTK5LBAIWXYWP7F7ZO5ZY3OLHVCY6DOCDSH6ATSILQC 5UP7XCUKX3WWRV6QSJ45TGTQ5PLT6Y76SKTSKVXUMSZSK3RXQEKQC ACIH4ICHLFEBDGCFL4ZHMKMBILEQBU3VE4PE3MSXG5JKO2L2PYKQC 3JJNSJEGODVFHBIC2AOLOB3JZSFPPQBENWFLKHTSOGH7YGVW6GTQC IWFDDZQDLBZCSPQP3O2AWL5IHHM7KG5KL5JF7QG5AFLXSPLQQUTAC LYEDM2AG74FSFHLK5J4ZPYJVT2VTQBKA6BPP2W6LWR3GBQM76PDAC 4FC27KXBPPCFYKQXB6VJDN7KPP3LG3FKEIYQG5D6MB6MCSMLAPFAC QLNAG54SY2IRDB6QKQSTAPUTTL7RY6W65CQEW62Z5F7CAVSL4UNQC 47PYJSHOM4S3MOFQOWE67T3PI7XYH3RRXUB3Q43WK3ASFCKC65QAC OYR4AJTYZQUIAAVGO4O4O7AXFQUVC7AAVAXRGWKIIJRPUJCCZYMQC B4J4KJXLDXXL6RUF3G5OIN75UXHLE3PB47MCBJ55RMF3F65IR4OQC CEOUX7SJMJXGN4SC6UZ3DN72RBPLEZVCHOL3TI6LZSEC5J2P57BAC 376IPKLC26EILJWYLCGA2UJEIH3XG3HCZA4EEZAQ44KMS5CNSUYQC K2QR5DH4B46SHW4YYNROPVXPNQ7PYEUL6ZNILU3CDHJBYJFZLBNAC R6GGCI2NTP5I47FC7DCPEGA645PIKD6CGUBG2DMYEO36XHESUYGAC DPREV4LQNG3JNN6IIAS32BD2YQ6JUPN3ICN3FSRIFVLB2V6Y6DKQC WTNKZA5LDOJJ3KUFFBMOIL4EZ5MUSRZGYVOJPB6DE2FHWQIAZCYAC TECVLWPUOQ4D2WKME4ZMRALDA7GV6EI2AKRR3J7Z3UESO4H2J73QC A45NZHXJNQ2OD6NOU7VIWLW34T4E3RKDZHHAKD2IAYHC2NRD5MIAC J4AF2SGNGYFN6W3Y5WSLBUEHDPQURTXJUXXY7DWRQ6JTV5DCUNYAC T2G6MVXVU46MCUW4KMFDBHDEJIZCZEFO3FUSC2WUSZDJBS25CFKAC GGOPOZP7GTPGU5HMR6ACGRYXTCXWN7GZD5WFG4DSZTOLNTABWYNQC RNWOGVNATUUYTVBM44BM57OMCKDNOA5J4OKUNB5OJI2QGLFTTEIQC NXH6QM5S5OM2GWIB5PLFHG62HSZ7IAVCEGFCOY2CCO3KT3HOQYGQC SBIL66XUEAYRITCGPQUNJUUVUWOFPDD4Q3F2POQRBNMS6GDUZAPQC HYBPXVO2BD6SK7IVFLS6YZFEN2HMSZDALXIUCJGSKVB3LYMLCWJAC VREOGU5SQRHXG6SVSDYBEM43DPZJUONEGPTZA76IE6OG6C773WGAC DLMU5B7JBMU5J7HSRMPD7OYA7AY5OCT2ZWUKKF2X3SFHE6OTV6TAC KOOY3COZPQEG54NAEZK7P2EJKVZO2I25RU5Y34BWU63EJYFECFAAC XRXDBN7R2R5E72KIXTUMYBMI52JZ7MUITBN4HMXRQCYA4IG2V6ZQC 2NP43MBCO3Z2NA5WWNF4MUTKQ4ACNQTXNY5K42P5I6KSMFV4KDKQC 7P6ZBYH5MTUTYKTOVNFLD5HMFQOCBEDMEYQQOHZU2SX3MFEHCMXQC CSG2VQG5JHDIRDRDB5BHCTLWZ7LRQDLOMATR7D67HSTRFEDYLDCAC inputs: self: super: letinherit (super) mkDefault;in {# Dendritic pattern helpers for building NixOS/Darwin configurations# These use modules defined in flake.modules.* (from dendritic-style host definitions)# Note: These use hjem, NOT home-manager# mkNixos: Looks up module from flake.modules.nixos.${name}mkNixos = system: name:inputs.os.lib.nixosSystem {specialArgs = inputs // {inherit inputs;lib = self;self = inputs.self;keys = inputs.self.keys;};modules = [inputs.self.flake.modules.nixos.${name}{ nixpkgs.hostPlatform = mkDefault system; }{nixpkgs.overlays =lethasOverlay = i: i ? overlays && i.overlays ? default && i.overlays.default != { };inmap (i: i.overlays.default) (builtins.filter hasOverlay (builtins.attrValues inputs));}inputs.home.nixosModules.defaultinputs.agenix.nixosModules.defaultinputs.agenix-rekey.nixosModules.default];};# mkNixos': Takes module directly (useful when defining module inline)mkNixos' = system: name: module:inputs.os.lib.nixosSystem {specialArgs = inputs // {inherit inputs;lib = self;self = inputs.self;keys = inputs.self.keys;};modules = [module{ nixpkgs.hostPlatform = mkDefault system; }{nixpkgs.overlays =lethasOverlay = i: i ? overlays && i.overlays ? default && i.overlays.default != { };inmap (i: i.overlays.default) (builtins.filter hasOverlay (builtins.attrValues inputs));}inputs.home.nixosModules.defaultinputs.agenix.nixosModules.defaultinputs.agenix-rekey.nixosModules.default];};mkDarwin = system: name:inputs.os-darwin.lib.darwinSystem {specialArgs = inputs // {inherit inputs;lib = self;self = inputs.self;keys = inputs.self.keys;};modules = [inputs.self.flake.modules.darwin.${name}{ nixpkgs.hostPlatform = mkDefault system; }];};}
inputs: self: super: letfilesystem = import ./filesystem.nix inputs self super;option = import ./option.nix inputs self super;system = import ./system.nix inputs self super;values = import ./values.nix inputs self super;dendritic = import ./dendritic.nix inputs self super;in filesystem // option // system // values // dendritic // { inherit inputs; }
inputs: self: super: letflakeOutputs = inputs.self;inherit (self) attrValues filter getAttrFromPath hasAttrByPath collectNix;# collect common modules that should be applied to all systems# collect input modules and overlays from flake inputscollectInputs = letinputs' = attrValues inputs;in path: inputs'|> filter (hasAttrByPath path)|> map (getAttrFromPath path);inputHomeModules = collectInputs [ "homeModules" "default" ];inputOverlays = collectInputs [ "overlays" "default" ];overlayModule = { nixpkgs.overlays = inputOverlays; };# special arguments passed to all modulesspecialArgs = inputs // {inherit inputs;lib = self;self = flakeOutputs;keys = flakeOutputs.keys;};in {# wrapper for nixosSystem that automatically applies common modulesnixosSystem' = config: super.nixosSystem {inherit (config) system;inherit specialArgs;modules = config.modules ++ [overlayModule{}};darwinSystem' = config: super.darwinSystem {inherit (config) system;inherit specialArgs;modules = config.modules ++ [overlayModule{}};}] ++ modulesDarwin ++ inputModulesDarwin;home-manager.sharedModules = inputHomeModules ++ modulesCommon;# wrapper for darwinSystem that automatically applies common modules] ++ modulesCommon ++ modulesLinux ++ inputModulesLinux;home-manager = {useGlobalPkgs = true;useUserPackages = true;_module.args = {inherit (config) system;};pkgs = import inputs.os {inherit (config) system;};};}];lib = self;sharedModules = inputHomeModules ++ [{backupFileExtension = ".hm-bak"; # Clobber dotfiles by default.inputModulesLinux = collectInputs [ "nixosModules" "default" ] ++ [inputs.agenix.nixosModules.default];inputModulesDarwin = collectInputs [ "darwinModules" "default" ] ++ [inputs.home-manager.darwinModules.home-manager];inputs.home-manager.nixosModules.home-managermodulesCommon = collectNix (inputs.self + /modules/common);modulesLinux = collectNix (inputs.self + /modules/linux);modulesDarwin = collectNix (inputs.self + /modules/darwin);
_: self: _: letinherit (self) merge mkMerge;in {# creates a mergeable attribute set that can be called as a function# allows syntax like: merge { option1 = value1; } <| conditionalOptionsmerge = mkMerge [] // {__functor = self: next: self // {contents = self.contents ++ [ next ];};};# convenience functions for common enable patternsenabled = merge { enable = true; };disabled = merge { enable = false; };}
lib: letinterface = "ts0";in {class = "nixos";config = lib.nixosSystem' {system = "x86_64-linux";modules = [({ pkgs, lib, config, keys, self, ... }: {imports = [(self + /modules/system.nix)(self + /modules/nix.nix)];type = "desktop";nixpkgs.hostPlatform.system = "x86_64-linux";# Allow unfree packages for graphicsunfree.allowedNames = ["nvidia-x11""nvidia-settings""nvidia-persistenced"];};};home-manager.sharedModules = [{home.stateVersion = "24.11";}];system.stateVersion = "24.11";})];};}customUsers = enabled {passwordFile = self + /secrets/date-password.age;primaryUserExtraGroups = [ "wheel" "networkmanager" "docker" ];openssh = enabled {idFile = self + /secrets/date-id.age;};network = enabled {hostName = "date";};age-rekey = enabled {hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEzfoVKZDyiyyMiX1JRFaaTELspG25MlLNq0kI2AANTa root@date";(self + /modules/desktop-hardware.nix)(self + /modules/openssh.nix)(self + /modules/age-rekey.nix)(self + /modules/network.nix)(self + /modules/users.nix)inherit (lib) enabled;
inherit (lib) inputs enabled;interface = "ts0";in {config = lib.nixosSystem' {modules = [inputs.disko.nixosModules.disko};}({ pkgs, lib, modulesPath, config, keys, self, ... }: {imports = [# hetzner(modulesPath + "/installer/scan/not-detected.nix")(modulesPath + "/profiles/qemu-guest.nix")(self + /modules/dr-radka.nix)(self + /modules/nix.nix)];nixpkgs.hostPlatform.system = "x86_64-linux";};};};age.secrets.dr-radka-environment = {owner = "dr-radka";group = "dr-radka";};cache = enabled {fqdn = "cache2.plumj.am";};ci-runner = enabled {url = "https://git.plumj.am/";labels = ["kiwi:host""docpad-infra:host""self-hosted:host"];};tokenFile = self + /secrets/plum-forgejo-runner-token.age;secretKeyFile = self + /secrets/kiwi-cache-key.age;system.stateVersion = "24.11";})];home-manager.sharedModules = [{home.stateVersion = "24.11";}];rekeyFile = self + /secrets/kiwi-dr-radka-environment.age;age.secrets.acmeEnvironment.rekeyFile = self + /secrets/acme-environment.age;};customUsers = enabled {passwordFile = self + /secrets/kiwi-password.age;buildUser = true;network = enabled {hostName = "kiwi";domain = "dr-radka.pl";tcpPorts = [ 22 80 443 ];};systemd.services.sshd = {after = [ "agenix.service" ];wants = [ "agenix.service" ];openssh = enabled {idFile = self + /secrets/kiwi-id.age;age-rekey = enabled {hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIElcSHxI64xqUUKEY83tKyzEH+fYT5JCWn3qCqtw16af root@kiwi";type = "server";(self + /modules/cache.nix)(self + /modules/ci-runners.nix)(self + /modules/openssh.nix)(self + /modules/age-rekey.nix)(self + /modules/network.nix)(self + /modules/users.nix)(self + /modules/system.nix)(self + /modules/server-disks.nix)system = "x86_64-linux";class = "nixos";lib: let
config = lib.darwinSystem' {modules = [imports = [(self + /modules/system.nix)(self + /modules/nix.nix)];};system.stateVersion = 5;})launchanim = 0;};# Disable hot corners.wvous-tl-corner = 0;wvous-tr-corner = 0;wvous-bl-corner = 0;wvous-br-corner = 0;defaults.CustomSystemPreferences."com.apple.dock" = {autohide-time-modifier = 0.0;autohide-delay = 0.0;expose-animation-duration = 0.0;springboard-show-duration = 0.0;springboard-hide-duration = 0.0;springboard-page-duration = 0.0;persistent-apps = [{ app = "/Users/jam/Applications/Home Manager Apps/Alacritty.app"; }{ app = "/Users/jam/Applications/Home Manager Apps/Arc.app"; }{ app = "/Users/jam/Applications/Home Manager Apps/Karabiner-Elements.app"; }];};enable-spring-load-actions-on-all-items = true;tilesize = 48;magnification = false;show-recents = false;mru-spaces = false;mouse-over-hilite-stack = true;defaults.dock = {autohide = true;showhidden = true; # Translucent.defaults.trackpad = {Clicking = false; # No touch-to-click.Dragging = false; # No tap-to-drag.};defaults.loginwindow = {DisableConsoleAccess = true;GuestEnabled = false;};defaults.SoftwareUpdate.AutomaticallyInstallMacOSUpdates = true;# Thanks github/rgbcube for the stuff below.defaults.CustomSystemPreferences."com.apple.AdLib" = {allowApplePersonalizedAdvertising = false;allowIdentifierForAdvertising = false;forceLimitAdTracking = true;personalizedAdsMigrated = false;};system = {primaryUser = "jam";nixpkgs.hostPlatform.system = "aarch64-darwin";nixpkgs.config.allowUnfree = true; # Only blanket allow is possible on nix-darwin.type = "desktop";];};}({ self, ... }: {system = "aarch64-darwin";lib: {class = "darwin";
inherit (lib) inputs enabled;interface = "ts0";in {config = lib.nixosSystem' {modules = [({ pkgs, lib, config, keys, self, ... }: {imports = [(self + /modules/system.nix)(self + /modules/nix.nix)];nixpkgs.hostPlatform.system = "x86_64-linux";};wsl = enabled {usbip = enabled {};extraBin = [{ src = "${lib.getExe' pkgs.coreutils-full "ls"}"; }{ src = "${lib.getExe pkgs.bash}"; }{ src = "${lib.getExe' pkgs.linuxPackages.usbip "usbip"}"; }];wslConf = {automount.root = "/mnt";automount.options = "metadata,uid=1000,gid=100,noatime";boot.systemd = true;interop.enabled = true;network.generateHosts = true;};};system.stateVersion = "24.11";})];home-manager.sharedModules = [{home.stateVersion = "24.11";}];customUsers = enabled {passwordFile = self + /secrets/pear-password.age;primaryUserExtraGroups = [ "wheel" "dialout" "docker" ];};interop.appendWindowsPath = false; # Do not add Windows executables to WSL path.# Necessary for usbip.# autoAttach = [ "1-9" ]; # Add device IDs like "4-1" to auto-attach USB devices.# Allow USB passthrough.defaultUser = "jam";startMenuLaunchers = false; # Hide from start menu.useWindowsDriver = true; # Use Windows graphics drivers.docker-desktop.enable = true; # Allow docker-desktop to use NixOS-WSL.openssh = enabled {idFile = self + /secrets/pear-id.age;};network = enabled {hostName = "pear";isWsl = true;};age-rekey = enabled {hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL2/Pg/5ohT3Dacnzjw9pvkeoQ1hEFwG5l1vRkr3v2sQ root@pear";type = "desktop";(self + /modules/wsl-backup.nix)(self + /modules/openssh.nix)(self + /modules/age-rekey.nix)(self + /modules/network.nix)(self + /modules/users.nix)};}inputs.os-wsl.nixosModules.wslsystem = "x86_64-linux";class = "nixos";lib: let
inherit (lib) inputs enabled;interface = "ts0";in {config = lib.nixosSystem' {modules = [inputs.disko.nixosModules.disko};}({ pkgs, lib, modulesPath, config, keys, self, ... }: {imports = [# hetzner(modulesPath + "/installer/scan/not-detected.nix")(modulesPath + "/profiles/qemu-guest.nix")];nixpkgs.hostPlatform.system = "x86_64-linux";};};cache = enabled {fqdn = "cache1.${config.networking.domain}";};ci-runner = enabled {url = "https://git.plumj.am/";labels = ["plum:host""docpad-infra:host""self-hosted:host"];withDocker = true;};tokenFile = self + /secrets/plum-forgejo-runner-token.age;secretKeyFile = self + /secrets/plum-cache-key.age;home-manager.sharedModules = [{home.stateVersion = "24.11";}];system.stateVersion = "24.11";})];age.secrets.acmeEnvironment.rekeyFile = self + /secrets/acme-environment.age;};};customUsers = enabled {passwordFile = self + /secrets/plum-password.age;buildUser = true;forgejoUser = true;systemd.services.sshd = {after = [ "agenix.service" ];wants = [ "agenix.service" ];openssh = enabled {idFile = self + /secrets/plum-id.age;};network = enabled {hostName = "plum";domain = "plumj.am";tcpPorts = [ 22 80 443 ];age-rekey = enabled {hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBH1S3dhOYCCltqrseHc3YZFHc9XU90PsvDo7frzUGrr root@plum";type = "server";(self + /modules/cache.nix)(self + /modules/ci-runners.nix)(self + /modules/openssh.nix)(self + /modules/age-rekey.nix)(self + /modules/network.nix)(self + /modules/users.nix)(self + /modules/forgejo.nix)(self + /modules/grafana)(self + /modules/matrix)(self + /modules/uptime-kuma.nix)(self + /modules/goatcounter.nix)(self + /modules/site.nix)(self + /modules/system.nix)(self + /modules/nix.nix)(self + /modules/server-disks.nix)system = "x86_64-linux";class = "nixos";lib: let
lib: letinherit (lib) inputs enabled;interface = "ts0";in {class = "nixos";config = lib.nixosSystem' {system = "x86_64-linux";modules = [({ pkgs, lib, config, keys, self, ... }: {imports = [(self + /modules/system.nix)(self + /modules/nix.nix)];type = "desktop";isGaming = true;nixpkgs.hostPlatform.system = "x86_64-linux";# Allow unfree packages for gaming and graphicsunfree.allowedNames = ["nvidia-x11""nvidia-settings""nvidia-persistenced""steam""steam-original""steam-unwrapped""steamPackages.steam"];};};# Ignore power button short presses.services.logind.settings.Login.HandlePowerKey = "ignore";home-manager.sharedModules = [{home.stateVersion = "24.11";}];system.stateVersion = "24.11";})];};}customUsers = enabled {passwordFile = self + /secrets/yuzu-password.age;primaryUserExtraGroups = [ "wheel" "networkmanager" "docker" ];};openssh = enabled {idFile = self + /secrets/yuzu-id.age;};network = enabled {hostName = "yuzu";age-rekey = enabled {hostPubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFDLlddona4PlORWd+QpR/7F5H46/Dic9vV23/YSrZl0 root@yuzu";(self + /modules/desktop-hardware.nix)(self + /modules/openssh.nix)(self + /modules/age-rekey.nix)(self + /modules/network.nix)(self + /modules/users.nix)