{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixos-exporter = { url = "git+https://git.clerie.de/clerie/nixos-exporter.git"; inputs.nixpkgs.follows = "nixpkgs"; }; solid-xmpp-alarm = { url = "git+https://git.clerie.de/clerie/solid-xmpp-alarm.git"; 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"; 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") ]; }; in { aluminium = generateNixosSystem "aluminium"; backup-4 = generateNixosSystem "backup-4"; beryllium = generateNixosSystem "beryllium"; carbon = generateNixosSystem "carbon"; clerie-backup = generateNixosSystem "clerie-backup"; dn42-il-gw1 = generateNixosSystem "dn42-il-gw1"; dn42-il-gw5 = generateNixosSystem "dn42-il-gw5"; dn42-il-gw6 = generateNixosSystem "dn42-il-gw6"; dn42-ildix-clerie = generateNixosSystem "dn42-ildix-clerie"; gatekeeper = generateNixosSystem "gatekeeper"; hydra-1 = generateNixosSystem "hydra-1"; hydra-2 = generateNixosSystem "hydra-2"; minecraft-2 = generateNixosSystem "minecraft-2"; monitoring-3 = generateNixosSystem "monitoring-3"; nonat = generateNixosSystem "nonat"; osmium = generateNixosSystem "osmium"; palladium = generateNixosSystem "palladium"; porter = generateNixosSystem "porter"; schule = generateNixosSystem "schule"; storage-2 = generateNixosSystem "storage-2"; web-2 = generateNixosSystem "web-2"; }; colmena = { meta = { nixpkgs = import nixpkgs {}; }; defaults = { name, ... }: { deployment = { targetHost = "${name}.net.clerie.de"; targetUser = null; }; }; } // 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 = { inherit (pkgs) anycast_healthchecker flask-excel iot-data pyexcel-xlsx pyexcel-webio uptimestatus wetter; }; hydraJobs = { inherit (self) packages; nixosConfigurations = builtins.mapAttrs (name: host: host.config.system.build.toplevel) self.nixosConfigurations; }; }; }