diff --git a/flake.nix b/flake.nix index 6bff343..800f02a 100644 --- a/flake.nix +++ b/flake.nix @@ -65,127 +65,87 @@ }: let pkgs = nixpkgs.legacyPackages.x86_64-linux.pkgs; + inherit (nixpkgs) lib; + + # Build a host's nixosConfiguration from the shared boilerplate. + # Per-host differences are expressed as flags / extraModules rather + # than copy-pasted module blocks. + mkHost = + { hostname # name of the ./ and ./home/ dirs + , system ? "x86_64-linux" + , homeHost ? hostname # which home/<...> config to use (iso reuses nixy) + , packages ? true # import common/packages.nix + , suspend ? true # import common/suspend.nix + , hardware ? true # import /hardware-configuration.nix + , sops ? true # wire sops-nix + , hm ? true # wire home-manager + , hmBackup ? true # set home-manager.backupFileExtension + , nixosLib ? nixpkgs.lib # nixosSystem source (iso uses `nixos`) + , extraModules ? [ ] + }: + nixosLib.nixosSystem { + inherit system; + modules = + [ + { _module.args = inputs; } + { _module.args.system = system; } + { nix.registry.nixpkgs.flake = nixpkgs; } + ] + ++ lib.optional packages ./common/packages.nix + ++ lib.optional suspend ./common/suspend.nix + ++ [ (./. + "/${hostname}/configuration.nix") ] + ++ lib.optional hardware (./. + "/${hostname}/hardware-configuration.nix") + ++ lib.optional sops sops-nix.nixosModules.sops + ++ lib.optionals hm [ + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.akill = import (./home + "/${homeHost}/home.nix"); + home-manager.extraSpecialArgs = { inherit inputs system; }; + } + ] + ++ lib.optional (hm && hmBackup) { home-manager.backupFileExtension = "home_backup"; } + ++ extraModules; + }; in { nixosConfigurations = { - nixy = nixpkgs.lib.nixosSystem rec { - system = "x86_64-linux"; - modules = [ - { _module.args = inputs; } - { _module.args.system = system; } - { nix.registry.nixpkgs.flake = nixpkgs; } - ./common/packages.nix - ./common/suspend.nix - ./nixy/configuration.nix - ./nixy/hardware-configuration.nix - sops-nix.nixosModules.sops - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.akill = import ./home/nixy/home.nix; - home-manager.extraSpecialArgs = { inherit inputs system; }; - home-manager.backupFileExtension = "home_backup"; - } - ]; - }; + nixy = mkHost { hostname = "nixy"; }; - fuji = nixpkgs.lib.nixosSystem rec { - system = "x86_64-linux"; - modules = [ - { _module.args = inputs; } - { _module.args.system = system; } - { nix.registry.nixpkgs.flake = nixpkgs; } - ./common/packages.nix - ./common/suspend.nix - ./fuji/configuration.nix - ./fuji/hardware-configuration.nix - sops-nix.nixosModules.sops - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.akill = import ./home/fuji/home.nix; - home-manager.extraSpecialArgs = { inherit inputs system; }; - home-manager.backupFileExtension = "home_backup"; - } - ]; - }; + fuji = mkHost { hostname = "fuji"; }; - nixy_iso = nixos.lib.nixosSystem rec { - system = "x86_64-linux"; - modules = [ - { _module.args = inputs; } - { _module.args.system = system; } - { nix.registry.nixpkgs.flake = nixpkgs; } + nixy_iso = mkHost { + hostname = "nixy"; + hardware = false; + nixosLib = nixos.lib; + extraModules = [ { isoImage.squashfsCompression = "gzip -Xcompression-level 1"; } - ./common/packages.nix - ./common/suspend.nix - ./nixy/configuration.nix "${nixos}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix" - sops-nix.nixosModules.sops - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.akill = import ./home/nixy/home.nix; - home-manager.extraSpecialArgs = { inherit inputs system; }; - home-manager.backupFileExtension = "home_backup"; - } ]; }; - mediabox = nixpkgs.lib.nixosSystem rec { - system = "x86_64-linux"; - modules = [ - { _module.args = inputs; } - { _module.args.system = system; } - { nix.registry.nixpkgs.flake = nixpkgs; } - ./common/packages.nix - ./common/suspend.nix - ./mediabox/configuration.nix - ./mediabox/hardware-configuration.nix - ./modules/qbittorrent.nix - sops-nix.nixosModules.sops - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.akill = import ./home/mediabox/home.nix; - home-manager.extraSpecialArgs = { inherit inputs system; }; - } - ]; + mediabox = mkHost { + hostname = "mediabox"; + hmBackup = false; + extraModules = [ ./modules/qbittorrent.nix ]; }; - blue = nixpkgs.lib.nixosSystem rec { - system = "x86_64-linux"; - modules = [ - { _module.args = inputs; } - { _module.args.system = system; } - { nix.registry.nixpkgs.flake = nixpkgs; } - ./blue/configuration.nix - ./blue/hardware-configuration.nix - ./common/packages.nix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - home-manager.users.akill = import ./home/blue/home.nix; - home-manager.extraSpecialArgs = { inherit inputs system; }; - } - ]; + blue = mkHost { + hostname = "blue"; + suspend = false; + sops = false; + hmBackup = false; }; - magpie = nixpkgs.lib.nixosSystem rec { + magpie = mkHost { + hostname = "magpie"; system = "aarch64-linux"; - modules = [ - { _module.args = inputs; } - { _module.args.system = system; } - { nix.registry.nixpkgs.flake = nixpkgs; } - ./magpie/configuration.nix - ./magpie/hardware-configuration.nix + packages = false; + suspend = false; + hm = false; + extraModules = [ simple-nixos-mailserver.nixosModule - sops-nix.nixosModules.sops (builtins.toPath "${nixpkgs}/nixos/modules/profiles/qemu-guest.nix") ]; };