{ description = "Aether - web server configuration"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nixos-raspberrypi.url = "github:nvmd/nixos-raspberrypi/main"; 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; }; nixConfig = { extra-substituters = [ "https://nixos-raspberrypi.cachix.org" ]; extra-trusted-public-keys = [ "nixos-raspberrypi.cachix.org-1:4iMO9LXa8BqhU+Rpg6LQKiGa2lsNh/j2oiYLNOQ5sPI=" ]; }; outputs = inputs@{ self, nixpkgs, nixos-raspberrypi, agenix, ... }: let inherit (nixpkgs) lib; # Extra config applied to each module # (Mostly used for injecting flake inputs) extraConfig = { deploy-rpi5 = { imports = with nixos-raspberrypi.nixosModules; [ raspberry-pi-5.base raspberry-pi-5.page-size-16k raspberry-pi-5.display-vc4 ]; }; }; 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" = nixos-raspberrypi.lib.nixosSystem { specialArgs = inputs // { aether = self.nixosModules; }; modules = [ agenix.nixosModules.default ./aether/hardware-configuration.nix ./aether/config.nix ]; }; nixosConfigurations.default = self.nixosConfigurations."toki-aether"; }; }