{ description = "NixOS configuration for all hosts"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; stylix = { url = "github:nix-community/stylix"; 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, ... }: let system = "x86_64-linux"; repoLocalPath = let fromEnv = builtins.getEnv "NIXOS_CONFIG_ROOT"; in if fromEnv != "" then fromEnv else "/home/alisceon/.nixos_config"; overlays = [ inputs.nur.overlays.default (_final: prev: { # openldap 2.6.13 currently flakes in its test suite when bottles pulls # in the i686 variant for its multi-arch FHS environment. openldap = prev.openldap.overrideAttrs (old: { doCheck = if old.version == "2.6.13" then false else old.doCheck; }); }) ]; pkgs = import nixpkgs { inherit system; config.allowUnfree = true; flake.setFlakeRegistry = true; inherit overlays; }; sharedSpecialArgs = { inherit repoLocalPath; repoRoot = self; }; sharedModules = [ ./nixos/modules/base.nix inputs.stylix.nixosModules.stylix inputs.home-manager.nixosModules.home-manager ({ ... }: { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.extraSpecialArgs = { inherit pkgs repoLocalPath; repoRoot = self; }; home-manager.backupFileExtension = "backup"; }) ]; mkHost = { hostName, nixosModules ? [ ], hmModules ? [ ], extraModules ? [ ], }: nixpkgs.lib.nixosSystem { inherit system pkgs; specialArgs = sharedSpecialArgs; modules = sharedModules ++ [ (./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/stylix.nix ]; workstationHomeModules = [ ./home/profiles/workstation.nix ./home/modules/wm/sway/default.nix ]; serverModules = [ ./nixos/modules/profiles/server.nix ]; serverHomeModules = [ ]; in { nixosConfigurations = { electra = mkHost { hostName = "electra"; nixosModules = workstationModules; hmModules = workstationHomeModules ++ [ ./home/hosts/alisceon/electra.nix ]; }; tower = mkHost { hostName = "tower"; nixosModules = workstationModules; hmModules = workstationHomeModules ++ [ ./home/hosts/alisceon/tower.nix ]; }; tesla-nixos = mkHost { hostName = "tesla-nixos"; nixosModules = serverModules; hmModules = serverHomeModules; extraModules = [ inputs.nix-minecraft.nixosModules.minecraft-servers { nixpkgs.overlays = [ inputs.nix-minecraft.overlay ]; } ]; }; nuc = mkHost { hostName = "nuc"; nixosModules = serverModules; hmModules = serverHomeModules; }; }; }; }