refactor(nixos): simplify configurations.nix and lib

This commit refactors configurations.nix and lib/default.nix by removing the
extractConfigurations function and related code from lib/default.nix,
and moving the NixOS system building logic directly into configurations.nix.
It also changes the structure of hosts in manifest.nix to use a
hosts.nixos attribute.
This commit is contained in:
Mohammad Rafiq 2025-07-07 06:41:53 +08:00
parent 99f984a523
commit f7873d54d3
No known key found for this signature in database
3 changed files with 32 additions and 59 deletions

View file

@ -1,9 +1,31 @@
{ config, ... }: {
config,
lib,
inputs,
...
}:
let let
inherit (cfg.lib) extractConfigurations; inherit (lib) nixosSystem;
inherit (cfg.lib) flattenAttrs;
inherit (lib.attrsets) mapAttrs;
cfg = config.flake; cfg = config.flake;
hosts = cfg.manifest.hosts or { }; hosts = cfg.manifest.hosts or { };
mkConfigurations =
class: hosts:
mapAttrs (
_: value:
if class == "nixos" then
nixosSystem {
specialArgs = { inherit inputs; };
modules = [
(flattenAttrs cfg.modules.nixos)
(value.extraCfg or { })
];
}
else
{ }
) hosts;
in in
{ {
flake.nixosConfigurations = extractConfigurations "nixos/" hosts; flake.nixosConfigurations = mkConfigurations "nixos" hosts.nixos;
} }

View file

@ -1,59 +1,9 @@
{ { lib, ... }:
lib,
config,
inputs,
...
}:
let let
cfg = config.flake; inherit (lib.attrsets) concatMapAttrs;
inherit (lib.trivial) pipe;
inherit (lib.strings) removePrefix hasPrefix;
inherit (lib.attrsets)
concatMapAttrs
mapAttrs'
filterAttrs
mergeAttrsList
;
in in
{ {
flake.lib = rec { flake.lib = {
flattenAttrs = attrset: concatMapAttrs (_: v: v) attrset; flattenAttrs = attrset: concatMapAttrs (_: v: v) attrset;
mkSystem =
prefix: name: value:
let
hostName = removePrefix prefix name;
hostConfig = value;
flakeConfig = config;
mkProfileCfg =
profileList: # List of attrsets of nixos configs
pipe profileList [
(map flattenAttrs) # List of nixos configs
mergeAttrsList
];
in
{
name = hostName;
value = lib.nixosSystem {
specialArgs = {
inherit
inputs
hostName
hostConfig
flakeConfig
;
};
modules = [
(flattenAttrs cfg.modules.nixos)
(mkProfileCfg (value.profiles or [ ]))
(value.extraCfg or { })
];
};
};
extractConfigurations =
prefix: hosts:
pipe hosts [
(filterAttrs (name: _: hasPrefix prefix name))
(mapAttrs' (mkSystem prefix))
];
}; };
} }

View file

@ -1,3 +1,4 @@
let let
testCfg = testCfg =
{ hostName, ... }: { hostName, ... }:
@ -21,8 +22,8 @@ in
shell = "fish"; shell = "fish";
pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILdsZyY3gu8IGB8MzMnLdh+ClDxQQ2RYG9rkeetIKq8n rafiq"; pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILdsZyY3gu8IGB8MzMnLdh+ClDxQQ2RYG9rkeetIKq8n rafiq";
}; };
hosts = { hosts.nixos = {
"nixos/nemesis" = { nemesis = {
machine = { machine = {
platform = "amd"; platform = "amd";
gpu = "nvidia"; gpu = "nvidia";
@ -38,7 +39,7 @@ in
}; };
extraCfg = testCfg; extraCfg = testCfg;
}; };
"nixos/apollo" = { apollo = {
machine = { machine = {
platform = "intel"; platform = "intel";
root.drive = "/dev/disk/by-id/nvme-eui.002538d221b47b01"; root.drive = "/dev/disk/by-id/nvme-eui.002538d221b47b01";