{ description = "NixOS configuration for all hosts"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable"; nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager/release-25.11"; inputs.nixpkgs.follows = "nixpkgs"; }; noctalia = { url = "github:noctalia-dev/noctalia-shell"; inputs.nixpkgs.follows = "nixpkgs"; inputs.noctalia-qs.follows = "noctalia-qs"; }; noctalia-qs = { url = "github:noctalia-dev/noctalia-qs"; inputs.nixpkgs.follows = "nixpkgs"; }; nix-minecraft.url = "github:Infinidoge/nix-minecraft"; }; outputs = inputs @ { self, nixpkgs, nixpkgs-unstable, ... }: let repoLocalPath = let fromEnv = builtins.getEnv "NIXOS_CONFIG_ROOT"; in if fromEnv != "" then fromEnv else "/home/alisceon/.nixos_config"; overlays = [ inputs.nur.overlays.default ]; mkPkgs = system: import nixpkgs { inherit system; config.allowUnfree = true; flake.setFlakeRegistry = true; inherit overlays; }; mkPkgsUnstable = system: import nixpkgs-unstable { inherit system; config.allowUnfree = true; flake.setFlakeRegistry = true; inherit overlays; }; mkSharedModules = pkgs: pkgs-unstable: [ ./nixos/modules/base.nix ./nixos/modules/services/wireguard-peer.nix inputs.home-manager.nixosModules.home-manager ({ ... }: { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = { inherit pkgs repoLocalPath pkgs-unstable; repoRoot = self; }; home-manager.backupFileExtension = "backup"; }) ]; mkHost = { hostName, system, nixosModules ? [ ], hmModules ? [ ], extraModules ? [ ], }: let pkgs = mkPkgs system; pkgs-unstable = mkPkgsUnstable system; in nixpkgs.lib.nixosSystem { inherit system pkgs; specialArgs = { inherit repoLocalPath pkgs-unstable; repoRoot = self; }; modules = (mkSharedModules pkgs pkgs-unstable) ++ [ (./nixos/hosts + "/${hostName}/configuration.nix") ] ++ nixosModules ++ extraModules ++ [ { home-manager.users.alisceon.imports = [ inputs.noctalia.homeModules.default ./home/profiles/base.nix ] ++ hmModules; home-manager.users.root.imports = [ ./home/users/root/default.nix ]; } ]; }; workstationModules = [ ./nixos/modules/profiles/workstation.nix ./nixos/modules/wm/sway.nix ./nixos/modules/theme ]; workstationHomeModules = [ ./home/profiles/workstation.nix ./home/modules/wm/sway/default.nix ]; serverModules = [ ./nixos/modules/profiles/server.nix ]; serverHomeModules = [ ]; in { nixosConfigurations = { electra = mkHost { hostName = "electra"; system = "x86_64-linux"; nixosModules = workstationModules; hmModules = workstationHomeModules ++ [ ./home/hosts/alisceon/electra.nix ]; }; tower = mkHost { hostName = "tower"; system = "x86_64-linux"; nixosModules = workstationModules; hmModules = workstationHomeModules ++ [ ./home/hosts/alisceon/tower.nix ]; }; tesla-nixos = mkHost { hostName = "tesla-nixos"; system = "x86_64-linux"; nixosModules = serverModules; hmModules = serverHomeModules; extraModules = [ inputs.nix-minecraft.nixosModules.minecraft-servers { nixpkgs.overlays = [ inputs.nix-minecraft.overlay ]; } ]; }; nuc = mkHost { hostName = "nuc"; system = "x86_64-linux"; nixosModules = serverModules; hmModules = serverHomeModules; }; alisceon-core = mkHost { hostName = "alisceon-core"; system = "aarch64-linux"; nixosModules = serverModules; hmModules = serverHomeModules; }; }; }; }