{ description = "NixOS configuration for RAD-Development Servers"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; nixos-modules = { url = "github:SuperSandro2000/nixos-modules"; inputs.nixpkgs-lib.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs = { nixpkgs.follows = "nixpkgs"; nixpkgs-stable.follows = "nixpkgs"; }; }; }; outputs = { nixpkgs, nixos-hardware, nixos-modules, home-manager, sops-nix, ... }: let inherit (nixpkgs) lib; src = builtins.filterSource (path: type: type == "directory" || lib.hasSuffix ".nix" (baseNameOf path)) ./.; ls = dir: lib.attrNames (builtins.readDir (src + "/${dir}")); fileList = dir: map (file: ./. + "/${dir}/${file}") (ls dir); in { nixosConfigurations = let constructSystem = { hostname, system ? "x86_64-linux", modules ? [], users ? ["dennis"], }: lib.nixosSystem { inherit system; modules = [ nixos-modules.nixosModule home-manager.nixosModules.home-manager sops-nix.nixosModules.sops ./systems/programs.nix ./systems/configuration.nix ./systems/${hostname}/hardware.nix ./systems/${hostname}/configuration.nix { config.networking.hostName = "${hostname}"; } ] ++ modules ++ fileList "modules" ++ map(user: { config, lib, pkgs, ... }@args: { users.users.${user} = import ./users/${user} (args // { name = "${user}"; }); }) users ++ map(user: { home-manager.users.${user} = import ./users/${user}/home.nix; }) users; }; in { photon = constructSystem { hostname = "photon"; users = ["dennis"]; }; palatine-hill = constructSystem { hostname = "palatine-hill"; users = ["alice"]; }; }; }; }