diff --git a/export/nixosConfigurations.nix b/export/nixosConfigurations.nix index 70f9e2c..21e8a45 100644 --- a/export/nixosConfigurations.nix +++ b/export/nixosConfigurations.nix @@ -10,36 +10,58 @@ { ... }@inputs: { host, ... }@imports: let - host' = - name: snippets: - let - system = - { - namespace ? "fbs42", - nixpkgs ? "nixpkgs", - }: - inputs.${nixpkgs}.lib.nixosSystem { - specialArgs = { inherit inputs flake namespace; }; - modules = - builtins.concatLists ( - map ( - base: builtins.attrValues (flake.lib.scan { base = "${base}/host/${name}"; }) - ) flake.lib.schema.base - ) - ++ [ { config.networking.hostName = name; } ] - ++ [ nixosModules.default ] - ++ [ inputs.home-manager.nixosModules.default ] - ++ [ { config.home-manager.sharedModules = [ hmModules.default ]; } ] - ++ [ { config.home-manager.extraSpecialArgs = { inherit flake namespace; }; } ] - ++ builtins.attrValues nixosUsers - ++ builtins.attrValues nixosGroups; - }; + pre-switch-check = + { pkgs, lib, config, ... }: + { + config.system.preSwitchChecks.nvd = '' + nvd_check=y + if [[ -d /run/current-system ]] + then + ${lib.getExe pkgs.nvd} --nix-bin-dir ${config.nix.package}/bin diff /run/current-system "''${1}" + if [[ -t 0 ]]; then + printf 'really %s to %s? [y]es/[N]o ' "''${2}" "''${1}" + read -r nvd_check + fi + fi + [[ "''${nvd_check}" == y ]] + ''; + }; - cfg = - assert builtins.length snippets == 1; - builtins.head snippets; - in - system cfg; + system = + hostname: + { + namespace ? "fbs42", + nixpkgs ? "nixpkgs", + classes ? [ hostname ], + }: + inputs.${nixpkgs}.lib.nixosSystem { + specialArgs = { inherit inputs flake namespace; }; + modules = + builtins.concatLists ( + map ( + base: builtins.attrValues (flake.lib.scan { base = "${base}/host/${hostname}"; }) + ) flake.lib.schema.base + ) + ++ map (class: { + imports = map (input: input.${namespace}.${class} or { }) (builtins.attrValues inputs); + }) classes + ++ [ pre-switch-check ] + ++ [ { config.networking.hostName = hostname; } ] + ++ [ nixosModules.default ] + ++ inputs.${nixpkgs}.lib.optional (inputs ? home-manager) { + imports = [ inputs.home-manager.nixosModules.default ]; + config.home-manager = { + sharedModules = [ hmModules.default ]; + extraSpecialArgs = { inherit flake namespace; }; + }; + } + ++ builtins.attrValues nixosUsers + ++ builtins.attrValues nixosGroups; + }; in -builtins.mapAttrs host' host +builtins.mapAttrs ( + name: value: + assert builtins.length value == 1; + system name (builtins.head value) +) host diff --git a/flake.lock b/flake.lock index 71dbc34..340835b 100644 --- a/flake.lock +++ b/flake.lock @@ -1,61 +1,23 @@ { "nodes": { - "hardware": { - "locked": { - "lastModified": 1753122741, - "narHash": "sha256-nFxE8lk9JvGelxClCmwuJYftbHqwnc01dRN4DVLUroM=", - "owner": "nixos", - "repo": "nixos-hardware", - "rev": "cc66fddc6cb04ab479a1bb062f4d4da27c936a22", - "type": "github" - }, - "original": { - "owner": "nixos", - "repo": "nixos-hardware", - "type": "github" - } - }, - "home-manager": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1757808926, - "narHash": "sha256-K6PEI5PYY94TVMH0mX3MbZNYFme7oNRKml/85BpRRAo=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "f21d9167782c086a33ad53e2311854a8f13c281e", - "type": "github" - }, - "original": { - "owner": "nix-community", - "ref": "release-25.05", - "repo": "home-manager", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1757810152, - "narHash": "sha256-Vp9K5ol6h0J90jG7Rm4RWZsCB3x7v5VPx588TQ1dkfs=", + "lastModified": 1763966396, + "narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=", "owner": "nixos", "repo": "nixpkgs", - "rev": "9a094440e02a699be5c57453a092a8baf569bdad", + "rev": "5ae3b07d8d6527c42f17c876e404993199144b6a", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixos-25.05", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "root": { "inputs": { - "hardware": "hardware", - "home-manager": "home-manager", "nixpkgs": "nixpkgs" } } diff --git a/flake.nix b/flake.nix index 48864cb..ee3f3c4 100644 --- a/flake.nix +++ b/flake.nix @@ -1,12 +1,6 @@ { - inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; - hardware.url = "github:nixos/nixos-hardware"; - home-manager = { - url = "github:nix-community/home-manager/release-25.05"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; + # only used for nixfmt-tree + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; outputs = { self, ... }@inputs: import ./lib/flake.nix inputs ./.; }