124 lines
3.3 KiB
Nix
124 lines
3.3 KiB
Nix
inputs@{
|
|
nixpkgs,
|
|
deploy-rs,
|
|
self,
|
|
pkgsForSystem,
|
|
...
|
|
}:
|
|
|
|
rec {
|
|
configs =
|
|
configs: builtins.foldl' (acc: val: nixpkgs.lib.recursiveUpdate (config val) acc) { } configs;
|
|
config =
|
|
{
|
|
hostname,
|
|
capabilities,
|
|
type,
|
|
home-only ? null,
|
|
extra-modules ? [ ],
|
|
system ? "x86_64-linux",
|
|
deploy-hostname ? hostname,
|
|
deploy-options ? {
|
|
user = if builtins.isNull home-only then "root" else home-only;
|
|
sshUser = if builtins.isNull home-only then "jana" else home-only;
|
|
},
|
|
home-manager ? builtins.isNull home-only,
|
|
stateVersion ? "26.05",
|
|
}:
|
|
with nixpkgs.lib;
|
|
let
|
|
inherit (nixpkgs) lib;
|
|
matches-capabilities =
|
|
# all requirements are contained in the machine capabilities
|
|
requirements: lib.all (req: builtins.elem req capabilities) requirements;
|
|
program =
|
|
{
|
|
requirements ? [ ],
|
|
home-config,
|
|
system-config ? { },
|
|
}:
|
|
# if (matches-capabilities requirements) then
|
|
if (true) then
|
|
{
|
|
inherit home-config system-config;
|
|
}
|
|
else
|
|
{
|
|
# home-config = _: { };
|
|
};
|
|
specialArgsForHomeSystem =
|
|
{
|
|
system,
|
|
type,
|
|
capabilities,
|
|
}:
|
|
home-only: {
|
|
pkgs = pkgsForSystem system;
|
|
flakes = inputs;
|
|
inherit inputs;
|
|
inherit (inputs.secrets.packages.${system}) secrets;
|
|
machine = {
|
|
inherit
|
|
type
|
|
capabilities
|
|
stateVersion
|
|
home-only
|
|
program
|
|
;
|
|
};
|
|
};
|
|
specialArgsForSystem = system: specialArgsForHomeSystem system null;
|
|
|
|
specialArgs = specialArgsForSystem {
|
|
inherit system type capabilities;
|
|
};
|
|
modules =
|
|
extra-modules
|
|
++ [ ./hosts/${hostname}/configuration.nix ]
|
|
++ (
|
|
if builtins.isNull home-only then
|
|
[ ./defaults/machine-config.nix ]
|
|
else
|
|
[ ./defaults/machine-or-home-config.nix ]
|
|
)
|
|
++ (
|
|
if home-manager then
|
|
[
|
|
inputs.home-manager.nixosModules.default
|
|
{
|
|
home-manager.extraSpecialArgs = specialArgs;
|
|
}
|
|
]
|
|
else
|
|
[ ]
|
|
);
|
|
in
|
|
{
|
|
deploy.nodes.${hostname} = {
|
|
hostname = deploy-hostname;
|
|
fastConnection = true;
|
|
profiles.system = {
|
|
path =
|
|
if (builtins.isNull home-only) then
|
|
deploy-rs.lib.x86_64-linux.activate.nixos self.nixosConfigurations.${hostname}
|
|
else
|
|
deploy-rs.lib.x86_64-linux.activate.home-manager self.nixosConfigurations.${hostname};
|
|
}
|
|
// deploy-options;
|
|
};
|
|
|
|
nixosConfigurations.${hostname} =
|
|
if builtins.isNull home-only then
|
|
(nixosSystem {
|
|
inherit system modules specialArgs;
|
|
})
|
|
else
|
|
inputs.home-manager.lib.homeManagerConfiguration {
|
|
extraSpecialArgs = specialArgsForHomeSystem {
|
|
inherit system type capabilities;
|
|
} home-only;
|
|
inherit modules;
|
|
pkgs = pkgsForSystem system;
|
|
};
|
|
};
|
|
}
|