{ inputs = { # General inputs stable.url = "nixpkgs/nixos-24.11"; unstable.url = "nixpkgs/nixos-unstable"; # Flake helpers flake-utils.url = "github:numtide/flake-utils"; # System inputs disko = { url = "github:nix-community/disko"; inputs.nixpkgs.follows = "stable"; }; impermanence.url = "github:nix-community/impermanence"; lanzaboote = { url = "github:nix-community/lanzaboote/v0.4.1"; inputs.nixpkgs.follows = "stable"; }; # Hardware specific jovian = { url = "github:Jovian-Experiments/Jovian-NixOS"; inputs.nixpkgs.follows = "unstable"; }; # Service inputs mailserver = { url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-24.11"; inputs.nixpkgs.follows = "stable"; }; minecraft.url = "github:Infinidoge/nix-minecraft"; # Home inputs hm = { url = "github:nix-community/home-manager/release-24.11"; inputs.nixpkgs.follows = "stable"; }; nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "unstable"; }; # Specific apps blender.url = "github:edolstra/nix-warez?dir=blender"; }; outputs = inputs: with inputs; flake-utils.lib.eachDefaultSystemPassThrough (system: let mkNix = name: channel: channel.lib.nixosSystem { modules = [ (./hosts + "/${name}") ]; specialArgs = inputs; }; mkHome = extraModules: hm.lib.homeManagerConfiguration { modules = [ ./modules/home ] ++ extraModules; extraSpecialArgs = inputs; pkgs = builtins.getAttr system stable.legacyPackages; }; hostChannels = { tower = stable; intuos = stable; jupiter = unstable; redmond = stable; midas = stable; kitty = stable; prophet = stable; }; in { nixosConfigurations = builtins.mapAttrs (name: channel: mkNix name channel) hostChannels; homeConfigurations = { default = mkHome [ ]; desktop = mkHome [{ home.guifull.enable = true; }]; generic = mkHome [{ targets.genericLinux.enable = true; }]; genericDesktop = mkHome [{ home.guifull.enable = true; targets.genericLinux.enable = true; }]; }; } ); }