{ description = "JawZ NixOS flake setup"; inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; nixpkgs-small.url = "github:nixos/nixpkgs?ref=nixos-unstable-small"; nur.url = "github:nix-community/nur"; ucodenix.url = "github:e-tho/ucodenix"; nix-gaming.url = "github:fufexan/nix-gaming"; hyprland.url = "github:hyprwm/Hyprland"; home-manager.url = "github:nix-community/home-manager"; sops-nix.url = "github:Mic92/sops-nix"; nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; jawz-scripts.url = "path:///home/jawz/Development/Scripts"; }; outputs = { self, ... }@inputs: let inherit (self) outputs; system = "x86_64-linux"; makePkgs = repo: import repo { inherit system; config.allowUnfree = true; }; createConfig = name: let useGUI = name == "workstation"; nixpkgsSelect = if useGUI then inputs.nixpkgs else inputs.nixpkgs-small; pkgs = nixpkgsSelect |> makePkgs; overlayFile = import ./overlay.nix { inherit pkgs; }; lib = nixpkgsSelect.lib // inputs.home-manager.lib; in lib.nixosSystem { inherit system; specialArgs = { inherit inputs outputs; }; modules = [ { nixpkgs.overlays = [ overlayFile ]; } ./hosts/${name}/configuration.nix inputs.nur.modules.nixos.default inputs.sops-nix.nixosModules.sops inputs.nixos-cosmic.nixosModules.default ]; }; in { nixosConfigurations = { workstation = "workstation" |> createConfig; miniserver = "miniserver" |> createConfig; server = "server" |> createConfig; }; }; }