50 lines
1.6 KiB
Nix
50 lines
1.6 KiB
Nix
{ self, nixpkgs, nixos-exporter, solid-xmpp-alarm, ... }@inputs:
|
|
|
|
rec {
|
|
generateNixosSystem = {
|
|
name,
|
|
system ? "x86_64-linux",
|
|
}: let
|
|
localNixpkgs = nixpkgs.lib.attrByPath [ "nixpkgs-${name}" ] nixpkgs inputs;
|
|
in localNixpkgs.lib.nixosSystem {
|
|
system = system;
|
|
modules = [
|
|
({ ... }: {
|
|
/*
|
|
Make the contents of the flake availiable to modules.
|
|
Useful for having the monitoring server scraping the
|
|
target config from all other servers automatically.
|
|
*/
|
|
_module.args._nixfiles = self;
|
|
})
|
|
../configuration/common
|
|
({ ... }: {
|
|
nixpkgs.overlays = [
|
|
(_: _: {
|
|
inherit (nixos-exporter.packages."x86_64-linux")
|
|
nixos-exporter;
|
|
})
|
|
];
|
|
})
|
|
solid-xmpp-alarm.nixosModules.solid-xmpp-alarm
|
|
(../hosts + "/${name}/configuration.nix")
|
|
];
|
|
};
|
|
|
|
mapToNixosConfigurations = hosts: builtins.mapAttrs (name: host: generateNixosSystem host) hosts;
|
|
|
|
generateColmenaHost = name: hostSystem: {
|
|
deployment = {
|
|
targetHost = "${name}.net.clerie.de";
|
|
targetUser = null;
|
|
};
|
|
nixpkgs.system = hostSystem.config.nixpkgs.system;
|
|
imports = hostSystem._module.args.modules;
|
|
deployment.allowLocalDeployment = builtins.any (n: n == name) [ "schule" "osmium" ];
|
|
};
|
|
|
|
mapToColmenaHosts = hosts: builtins.mapAttrs (generateColmenaHost) hosts;
|
|
|
|
buildHosts = hosts: builtins.mapAttrs (name: host: host.config.system.build.toplevel) (nixpkgs.lib.filterAttrs (name: host: (builtins.substring 0 1 name) != "_") hosts);
|
|
}
|