diff --git a/flake.nix b/flake.nix index 8dadb7e..2d0ad50 100644 --- a/flake.nix +++ b/flake.nix @@ -30,91 +30,68 @@ config.android_sdk.accept_license = true; }; }; + + # Common modules shared across all hosts + commonModules = [ + agenix.nixosModules.default + { + environment.systemPackages = [ agenix.packages.${system}.default ]; + } + ( + { config, pkgs, ... }: + { + nixpkgs.overlays = [ overlayUnstable ]; + } + ) + ]; + + # Common home-manager modules + homeManagerModules = [ + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + } + ]; + + # Helper function to create a host configuration + mkHost = + { + hostPath, + extraModules ? [ ], + includeHomeManager ? true, + specialArgs ? { }, + }: + nixpkgs.lib.nixosSystem { + inherit system specialArgs; + modules = + commonModules + ++ (if includeHomeManager then homeManagerModules else [ ]) + ++ extraModules + ++ [ hostPath ]; + }; in { nixosConfigurations = { - nixbox = nixpkgs.lib.nixosSystem { - inherit system; - modules = [ - agenix.nixosModules.default - { - environment.systemPackages = [ agenix.packages.${system}.default ]; - } - ( - { config, pkgs, ... }: - { - nixpkgs.overlays = [ overlayUnstable ]; - } - ) - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - } - ./hosts/nixbox - ]; + nixbox = mkHost { + hostPath = ./hosts/nixbox; }; - flynode = nixpkgs.lib.nixosSystem { - inherit system; - modules = [ - agenix.nixosModules.default - { - environment.systemPackages = [ agenix.packages.${system}.default ]; - } - ( - { config, pkgs, ... }: - { - nixpkgs.overlays = [ overlayUnstable ]; - } - ) - nixos-hardware.nixosModules.lenovo-thinkpad-z13-gen1 - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - } - ./hosts/flynode - ]; + + flynode = mkHost { + hostPath = ./hosts/flynode; + extraModules = [ nixos-hardware.nixosModules.lenovo-thinkpad-z13-gen1 ]; }; - thewordnerd = nixpkgs.lib.nixosSystem { - inherit system; + + thewordnerd = mkHost { + hostPath = ./hosts/hub; + extraModules = [ simple-nixos-mailserver.nixosModule ]; specialArgs = { inherit inputs; }; - modules = [ - agenix.nixosModules.default - { - environment.systemPackages = [ agenix.packages.${system}.default ]; - } - ( - { config, pkgs, ... }: - { - nixpkgs.overlays = [ overlayUnstable ]; - } - ) - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - } - simple-nixos-mailserver.nixosModule - ./hosts/hub - ]; }; - garden = nixpkgs.lib.nixosSystem { - inherit system; + + garden = mkHost { + hostPath = ./hosts/garden; + includeHomeManager = false; specialArgs = { inherit inputs; }; - modules = [ - agenix.nixosModules.default - { - environment.systemPackages = [ agenix.packages.${system}.default ]; - } - ( - { config, pkgs, ... }: - { - nixpkgs.overlays = [ overlayUnstable ]; - } - ) - ./hosts/garden - ]; }; }; };