diff --git a/flake.nix b/flake.nix index 7e423bc..83e71d2 100644 --- a/flake.nix +++ b/flake.nix @@ -10,40 +10,12 @@ inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = { self, nixpkgs, nixos-exporter, solid-xmpp-alarm, ... }: let - pkgs = import nixpkgs { - overlays = [ - (import ./pkgs/overlay.nix) - ]; - system = "x86_64-linux"; - }; - system = "x86_64-linux"; + outputs = { self, nixpkgs, nixos-exporter, solid-xmpp-alarm, ... }@inputs: let + helper = (import ./lib/flake-helper.nix) inputs; in { nixosConfigurations = let - generateNixosSystem = name: nixpkgs.lib.nixosSystem { - system = "x86_64-linux"; - 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.${system}) - nixos-exporter; - }) - ]; - }) - solid-xmpp-alarm.nixosModules.solid-xmpp-alarm - (./hosts + "/${name}/configuration.nix") - ]; - }; + inherit (helper) + generateNixosSystem; in { aluminium = generateNixosSystem "aluminium"; backup-4 = generateNixosSystem "backup-4"; @@ -74,19 +46,16 @@ meta = { nixpkgs = import nixpkgs {}; }; + } // helper.mapToColmenaHosts self.nixosConfigurations; - defaults = { name, ... }: { - deployment = { - targetHost = "${name}.net.clerie.de"; - targetUser = null; - }; + packages.x86_64-linux = let + pkgs = import nixpkgs { + overlays = [ + (import ./pkgs/overlay.nix) + ]; + system = "x86_64-linux"; }; - } // builtins.mapAttrs (name: host: { - nixpkgs.system = host.config.nixpkgs.system; - imports = host._module.args.modules; - deployment.allowLocalDeployment = builtins.any (n: n == name) [ "schule" "osmium" ]; - }) self.nixosConfigurations; - packages.x86_64-linux = { + in { inherit (pkgs) anycast_healthchecker flask-excel @@ -100,7 +69,7 @@ hydraJobs = { inherit (self) packages; - nixosConfigurations = builtins.mapAttrs (name: host: host.config.system.build.toplevel) self.nixosConfigurations; + nixosConfigurations = helper.buildHosts self.nixosConfigurations; iso = self.nixosConfigurations._iso.config.system.build.isoImage; }; }; diff --git a/lib/flake-helper.nix b/lib/flake-helper.nix new file mode 100644 index 0000000..352ca51 --- /dev/null +++ b/lib/flake-helper.nix @@ -0,0 +1,42 @@ +{ self, nixpkgs, nixos-exporter, solid-xmpp-alarm, ... }@inputs: + +rec { + generateNixosSystem = name: nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + 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") + ]; + }; + + 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) hosts; +}