{ description = "Aether - web server configuration"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; rpi5-kernel.url = "gitlab:vriska/nix-rpi5"; rpi5-kernel.inputs.nixpkgs.follows = "nixpkgs"; agenix.url = "github:ryantm/agenix"; agenix.inputs.nixpkgs.follows = "nixpkgs"; agenix.inputs.darwin.follows = ""; forgejo-tokyo-night.url = "https://git.tokinanpa.dev/toki/forgejo-tokyo-night/archive/main.tar.gz"; forgejo-tokyo-night.flake = false; }; outputs = inputs@{ self, nixpkgs, agenix, rpi5-kernel, ... }: let inherit (nixpkgs) lib; # Extra config applied to each module # (Mostly used for injecting flake inputs) extraConfig = { deploy-rpi5 = { aether.deploy.rpi5._internal.kernelPackages = lib.mkDefault rpi5-kernel.legacyPackages.aarch64-linux.linuxPackages_rpi5; }; }; moduleNames = let sub = builtins.readDir ./modules; in builtins.filter (d: sub.${d} == "directory") (builtins.attrNames sub); deployNames = let sub = builtins.readDir ./deploy; in builtins.map (d: "deploy-${d}") (builtins.filter (d: sub.${d} == "directory") (builtins.attrNames sub)); modules = lib.genAttrs moduleNames (name: ./modules/${name}); deployments = lib.genAttrs deployNames (name: ./deploy/${lib.removePrefix "deploy-" name}); modulesWithCfg = builtins.mapAttrs (k: v: { imports = [ v ]; } // extraConfig.${k} or {}) modules; deploymentsWithCfg = builtins.mapAttrs (k: v: { imports = [ v ]; } // extraConfig.${k} or {}) deployments; in { nixosModules = modulesWithCfg // deploymentsWithCfg // { all.imports = lib.attrValues modulesWithCfg; }; nixosConfigurations."toki-aether" = nixpkgs.lib.nixosSystem { specialArgs = inputs // { aether = self.nixosModules; }; modules = [ agenix.nixosModules.default ./aether/hardware-configuration.nix ./aether/config.nix ]; }; nixosConfigurations.default = self.nixosConfigurations."toki-aether"; }; }