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:
parent
99f984a523
commit
f7873d54d3
3 changed files with 32 additions and 59 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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))
|
|
||||||
];
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue