From 90738d470f43a0a25a7cf0b0780fcb218c23aa34 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Fri, 14 Feb 2025 16:54:49 +0800 Subject: [PATCH] flake-parts/setups: move default specialArgs and modules to own flake-parts module --- configs/flake-parts/default.nix | 5 + configs/flake-parts/flake-parts.nix | 13 ++ configs/flake-parts/setups.nix | 53 ++++++ modules/flake-parts/setups/home-manager.nix | 114 ++++++------- modules/flake-parts/setups/nixos.nix | 155 +++++++++--------- modules/flake-parts/setups/nixvim.nix | 98 ++++++----- .../setups/shared/config-options.nix | 4 +- .../flake-parts/setups/wrapper-manager.nix | 53 +++--- 8 files changed, 273 insertions(+), 222 deletions(-) create mode 100644 configs/flake-parts/flake-parts.nix create mode 100644 configs/flake-parts/setups.nix diff --git a/configs/flake-parts/default.nix b/configs/flake-parts/default.nix index bf692cbc..e0960a6c 100644 --- a/configs/flake-parts/default.nix +++ b/configs/flake-parts/default.nix @@ -4,8 +4,13 @@ ./packages.nix ./templates.nix + # Here's where the shared setup configurations for this entire cluster came + # from. + ./setups.nix + # Environment configurations. ./disko.nix + ./flake-parts.nix ./home-manager.nix ./nixos.nix ./nixvim.nix diff --git a/configs/flake-parts/flake-parts.nix b/configs/flake-parts/flake-parts.nix new file mode 100644 index 00000000..b485e4d9 --- /dev/null +++ b/configs/flake-parts/flake-parts.nix @@ -0,0 +1,13 @@ +# This is simply to make using my flake modules a bit easier for my private +# configurations. +{ config, lib, ... }: + +{ + flake.flakeModules = { + default = ../../modules/flake-parts; + + # A little module to make it convenient for setting up the baseline of all + # of the configurations. + baseSetupsConfig = ./setups.nix; + }; +} diff --git a/configs/flake-parts/setups.nix b/configs/flake-parts/setups.nix new file mode 100644 index 00000000..0cdd046f --- /dev/null +++ b/configs/flake-parts/setups.nix @@ -0,0 +1,53 @@ +# The baseline configuration for all of the setup type in this cluster. Take +# note this is also exported as a flake-parts module to be easily used in +# private configurations. +{ lib, ... }: + +let + homeManagerModules = ../../modules/home-manager; + nixosModules = ../../modules/nixos; + nixvimModules = ../../modules/nixvim; + wrapperManagerModules = ../../modules/wrapper-manager; +in { + setups.home-manager = { + sharedSpecialArgs = { + foodogsquaredModulesPath = builtins.toString homeManagerModules; + }; + sharedModules = [ + homeManagerModules + ../../modules/home-manager/_private + ]; + }; + + setups.nixos = { + sharedSpecialArgs = { + foodogsquaredUtils = + import ../../lib/utils/nixos.nix { inherit lib; }; + foodogsquaredModulesPath = builtins.toString nixosModules; + }; + sharedModules = [ + nixosModules + ../../modules/nixos/_private + ]; + }; + + setups.nixvim = { + sharedSpecialArgs = { + foodogsquaredModulesPath = builtins.toString nixvimModules; + }; + sharedModules = [ + nixvimModules + ../../modules/nixvim/_private + ]; + }; + + setups.wrapper-manager = { + sharedSpecialArgs = { + foodogsquaredModulesPath = builtins.toString wrapperManagerModules; + }; + sharedModules = [ + wrapperManagerModules + ../../modules/wrapper-manager/_private + ]; + }; +} diff --git a/modules/flake-parts/setups/home-manager.nix b/modules/flake-parts/setups/home-manager.nix index ebe77e22..03891717 100644 --- a/modules/flake-parts/setups/home-manager.nix +++ b/modules/flake-parts/setups/home-manager.nix @@ -6,17 +6,13 @@ let cfg = config.setups.home-manager; partsConfig = config; - homeManagerModules = ../../home-manager; # A thin wrapper around the home-manager configuration function. mkHome = { pkgs, lib ? pkgs.lib, system, homeManagerBranch ? "home-manager" , extraModules ? [ ], specialArgs ? { } }: inputs.${homeManagerBranch}.lib.homeManagerConfiguration { - extraSpecialArgs = specialArgs // { - foodogsquaredModulesPath = builtins.toString homeManagerModules; - }; - inherit pkgs lib; + extraSpecialArgs = specialArgs; modules = extraModules; }; @@ -219,6 +215,8 @@ in { config = let hmUserConfig = partsConfig.setups.home-manager.configs.${name}; in { + # The rationale for this is we're making sure that it is + # synced with the NixOS user settings. userConfig = { isNormalUser = lib.mkDefault true; createHome = lib.mkDefault true; @@ -348,64 +346,60 @@ in { ]); }; - config = lib.mkIf (cfg.configs != { }) { - setups.home-manager.sharedNixpkgsConfig = config.setups.sharedNixpkgsConfig; + config = lib.mkMerge [ + { + setups.home-manager.sharedNixpkgsConfig = config.setups.sharedNixpkgsConfig; + } - # Import our own home-manager modules. - setups.home-manager.sharedModules = [ - homeManagerModules + (lib.mkIf (cfg.configs != { }) { + flake = let + # A quick data structure we can pass through multiple build pipelines. + pureHomeManagerConfigs = let + generatePureConfigs = username: metadata: + lib.listToAttrs (builtins.map (system: + let + nixpkgs = inputs.${metadata.nixpkgs.branch}; - # Import our private modules... - ../../home-manager/_private - ]; + # We won't apply the overlays here since it is set + # modularly. + pkgs = import nixpkgs { + inherit system; + inherit (metadata.nixpkgs) config; + }; + in lib.nameValuePair system (mkHome { + inherit pkgs system; + inherit (metadata) homeManagerBranch; + extraModules = cfg.sharedModules ++ cfg.standaloneConfigModules + ++ metadata.modules; + })) metadata.systems); + in lib.mapAttrs generatePureConfigs cfg.configs; + in { + homeConfigurations = let + renameSystems = name: system: config: + lib.nameValuePair "${name}-${system}" config; + in lib.concatMapAttrs + (name: configs: lib.mapAttrs' (renameSystems name) configs) + pureHomeManagerConfigs; - flake = let - # A quick data structure we can pass through multiple build pipelines. - pureHomeManagerConfigs = let - generatePureConfigs = username: metadata: - lib.listToAttrs (builtins.map (system: - let - nixpkgs = inputs.${metadata.nixpkgs.branch}; + deploy.nodes = let + validConfigs = + lib.filterAttrs (name: _: cfg.configs.${name}.deploy != null) + pureHomeManagerConfigs; - # We won't apply the overlays here since it is set - # modularly. - pkgs = import nixpkgs { - inherit system; - inherit (metadata.nixpkgs) config; + generateDeployNode = name: system: config: + lib.nameValuePair "home-manager-${name}-${system}" (let + deployConfig = cfg.configs.${name}.deploy; + deployConfig' = + lib.attrsets.removeAttrs deployConfig [ "profiles" ]; + in deployConfig' // { + profiles = cfg.configs.${name}.deploy.profiles { + inherit name config system; }; - in lib.nameValuePair system (mkHome { - inherit pkgs system; - inherit (metadata) homeManagerBranch; - extraModules = cfg.sharedModules ++ cfg.standaloneConfigModules - ++ metadata.modules; - })) metadata.systems); - in lib.mapAttrs generatePureConfigs cfg.configs; - in { - homeConfigurations = let - renameSystems = name: system: config: - lib.nameValuePair "${name}-${system}" config; - in lib.concatMapAttrs - (name: configs: lib.mapAttrs' (renameSystems name) configs) - pureHomeManagerConfigs; - - deploy.nodes = let - validConfigs = - lib.filterAttrs (name: _: cfg.configs.${name}.deploy != null) - pureHomeManagerConfigs; - - generateDeployNode = name: system: config: - lib.nameValuePair "home-manager-${name}-${system}" (let - deployConfig = cfg.configs.${name}.deploy; - deployConfig' = - lib.attrsets.removeAttrs deployConfig [ "profiles" ]; - in deployConfig' // { - profiles = cfg.configs.${name}.deploy.profiles { - inherit name config system; - }; - }); - in lib.concatMapAttrs - (name: configs: lib.mapAttrs' (generateDeployNode name) configs) - validConfigs; - }; - }; + }); + in lib.concatMapAttrs + (name: configs: lib.mapAttrs' (generateDeployNode name) configs) + validConfigs; + }; + }) + ]; } diff --git a/modules/flake-parts/setups/nixos.nix b/modules/flake-parts/setups/nixos.nix index aca5c40c..2e95327c 100644 --- a/modules/flake-parts/setups/nixos.nix +++ b/modules/flake-parts/setups/nixos.nix @@ -7,7 +7,6 @@ let cfg = config.setups.nixos; partsConfig = config; - nixosModules = ../../nixos; # A thin wrapper around the NixOS configuration function. mkHost = @@ -17,12 +16,7 @@ let # on nixpkgs.lib.nixosSystem flake output. nixosSystem = args: import "${pkgs.path}/nixos/lib/eval-config.nix" args; in (lib.makeOverridable nixosSystem) { - inherit pkgs; - specialArgs = specialArgs // { - foodogsquaredUtils = - import ../../../lib/utils/nixos.nix { inherit lib; }; - foodogsquaredModulesPath = builtins.toString nixosModules; - }; + inherit pkgs specialArgs; modules = extraModules ++ [{ nixpkgs.hostPlatform = lib.mkForce system; }]; @@ -272,88 +266,85 @@ in { }; }; - config = lib.mkIf (cfg.configs != { }) { - setups.nixos.sharedNixpkgsConfig = config.setups.sharedNixpkgsConfig; + config = lib.mkMerge [ + { + setups.nixos.sharedNixpkgsConfig = config.setups.sharedNixpkgsConfig; + } - setups.nixos.sharedModules = [ - # Import our own public NixOS modules. - nixosModules + (lib.mkIf (cfg.configs != { }) { - # Import our private modules. - ../../nixos/_private - ]; + flake = let + # A quick data structure we can pass through multiple build pipelines. + pureNixosConfigs = let + validConfigs = + lib.filterAttrs (_: v: v.shouldBePartOfNixOSConfigurations) + cfg.configs; - flake = let - # A quick data structure we can pass through multiple build pipelines. - pureNixosConfigs = let - validConfigs = - lib.filterAttrs (_: v: v.shouldBePartOfNixOSConfigurations) - cfg.configs; + generatePureConfigs = hostname: metadata: + lib.listToAttrs (builtins.map (system: + let + nixpkgs = inputs.${metadata.nixpkgs.branch}; - generatePureConfigs = hostname: metadata: - lib.listToAttrs (builtins.map (system: - let - nixpkgs = inputs.${metadata.nixpkgs.branch}; - - # We won't apply the overlays here since it is set - # modularly. - pkgs = import nixpkgs { - inherit system; - inherit (metadata.nixpkgs) config; - }; - in lib.nameValuePair system (mkHost { - inherit pkgs system; - inherit (metadata) specialArgs; - extraModules = cfg.sharedModules ++ metadata.modules; - })) metadata.systems); - in lib.mapAttrs generatePureConfigs validConfigs; - in { - nixosConfigurations = let - renameSystem = name: system: config: - lib.nameValuePair "${name}-${system}" config; - in lib.concatMapAttrs - (name: configs: lib.mapAttrs' (renameSystem name) configs) - pureNixosConfigs; - - deploy.nodes = let - validConfigs = - lib.filterAttrs (name: _: cfg.configs.${name}.deploy != null) - pureNixosConfigs; - - generateDeployNode = name: system: config: - lib.nameValuePair "nixos-${name}-${system}" - (let deployConfig = cfg.configs.${name}.deploy; - in deployConfig // { - profiles = cfg.configs.${name}.deploy.profiles { - inherit name config system; - }; - }); - in lib.concatMapAttrs - (name: configs: lib.mapAttrs' (generateDeployNode name) configs) - validConfigs; - }; - - perSystem = { system, lib, ... }: { - images = let - validImages = lib.filterAttrs (host: metadata: - metadata.formats != null && (lib.elem system metadata.systems)) - cfg.configs; - - generateImages = name: metadata: - let - buildImage = format: - lib.nameValuePair "${name}-${format}" (mkImage { - inherit format system; - pkgs = import inputs.${metadata.nixpkgs.branch} { + # We won't apply the overlays here since it is set + # modularly. + pkgs = import nixpkgs { inherit system; inherit (metadata.nixpkgs) config; }; + in lib.nameValuePair system (mkHost { + inherit pkgs system; + inherit (metadata) specialArgs; extraModules = cfg.sharedModules ++ metadata.modules; - }); + })) metadata.systems); + in lib.mapAttrs generatePureConfigs validConfigs; + in { + nixosConfigurations = let + renameSystem = name: system: config: + lib.nameValuePair "${name}-${system}" config; + in lib.concatMapAttrs + (name: configs: lib.mapAttrs' (renameSystem name) configs) + pureNixosConfigs; - images = builtins.map buildImage metadata.formats; - in lib.listToAttrs images; - in lib.concatMapAttrs generateImages validImages; - }; - }; + deploy.nodes = let + validConfigs = + lib.filterAttrs (name: _: cfg.configs.${name}.deploy != null) + pureNixosConfigs; + + generateDeployNode = name: system: config: + lib.nameValuePair "nixos-${name}-${system}" + (let deployConfig = cfg.configs.${name}.deploy; + in deployConfig // { + profiles = cfg.configs.${name}.deploy.profiles { + inherit name config system; + }; + }); + in lib.concatMapAttrs + (name: configs: lib.mapAttrs' (generateDeployNode name) configs) + validConfigs; + }; + + perSystem = { system, lib, ... }: { + images = let + validImages = lib.filterAttrs (host: metadata: + metadata.formats != null && (lib.elem system metadata.systems)) + cfg.configs; + + generateImages = name: metadata: + let + buildImage = format: + lib.nameValuePair "${name}-${format}" (mkImage { + inherit format system; + pkgs = import inputs.${metadata.nixpkgs.branch} { + inherit system; + inherit (metadata.nixpkgs) config; + }; + extraModules = cfg.sharedModules ++ metadata.modules; + }); + + images = builtins.map buildImage metadata.formats; + in lib.listToAttrs images; + in lib.concatMapAttrs generateImages validImages; + }; + }) +]; } diff --git a/modules/flake-parts/setups/nixvim.nix b/modules/flake-parts/setups/nixvim.nix index 37490313..6d2480cf 100644 --- a/modules/flake-parts/setups/nixvim.nix +++ b/modules/flake-parts/setups/nixvim.nix @@ -8,16 +8,13 @@ let partsConfig = config; cfg = config.setups.nixvim; - nixvimModules = ../../nixvim; mkNixvimConfig = { system, pkgs, nixvimBranch ? "nixvim", modules ? [ ] , specialArgs ? { }, }: inputs.${nixvimBranch}.legacyPackages.${system}.makeNixvimWithModule { inherit pkgs; module = { imports = modules; }; - extraSpecialArgs = specialArgs // { - foodogsquaredModulesPath = builtins.toString nixvimModules; - }; + extraSpecialArgs = specialArgs; }; modulesOption = lib.mkOption { @@ -208,7 +205,7 @@ in { attrsOf (submodule [ nixvimIntegrationModule ({ config, lib, ... }: { - config.modules = + config.modules = lib.optionals (config.nixvim.instance != null) [ inputs.${config.nixvim.branch}.nixosModules.nixvim ]; }) ]); @@ -219,59 +216,56 @@ in { attrsOf (submodule [ nixvimIntegrationModule ({ config, lib, ... }: { - config.modules = + config.modules = lib.optionals (config.nixvim.instance != null) [ inputs.${config.nixvim.branch}.homeManagerModules.nixvim ]; }) ]); }; - config = lib.mkIf (cfg.configs != { }) { - setups.nixvim.sharedNixpkgsConfig = config.setups.sharedNixpkgsConfig; + config = lib.mkMerge [ + { + setups.nixvim.sharedNixpkgsConfig = config.setups.sharedNixpkgsConfig; + } - setups.nixvim.sharedModules = [ - nixvimModules + (lib.mkIf (cfg.configs != { }) { + perSystem = { system, config, lib, ... }: + (let + validConfigs = + lib.filterAttrs (_: metadata: lib.elem system metadata.systems) + cfg.configs; - # Import our private modules. - ../../nixvim/_private - ]; + nixvimConfigurations = let + generateNixvimConfigs = name: metadata: + let + mkNixvimConfig' = component: + let + pkgs = import inputs.${component.nixpkgsBranch} { + inherit (component.nixpkgs) config overlays; + inherit system; + }; + neovimPackage = component.neovimPackage pkgs; + in lib.nameValuePair + "${name}-${component.nixpkgsBranch}-${neovimPackage.pname}" + (mkNixvimConfig { + inherit system pkgs; + inherit (component) nixvimBranch; + modules = cfg.sharedModules ++ cfg.standaloneConfigModules + ++ metadata.modules ++ [{ package = neovimPackage; }]; + }); + nixvimConfigs = builtins.map mkNixvimConfig' metadata.components; + in lib.listToAttrs nixvimConfigs; + in lib.concatMapAttrs generateNixvimConfigs validConfigs; + in { + # We'll reuse these. + inherit nixvimConfigurations; - perSystem = { system, config, lib, ... }: - (let - validConfigs = - lib.filterAttrs (_: metadata: lib.elem system metadata.systems) - cfg.configs; - - nixvimConfigurations = let - generateNixvimConfigs = name: metadata: - let - mkNixvimConfig' = component: - let - pkgs = import inputs.${component.nixpkgsBranch} { - inherit (component.nixpkgs) config overlays; - inherit system; - }; - neovimPackage = component.neovimPackage pkgs; - in lib.nameValuePair - "${name}-${component.nixpkgsBranch}-${neovimPackage.pname}" - (mkNixvimConfig { - inherit system pkgs; - inherit (component) nixvimBranch; - modules = cfg.sharedModules ++ cfg.standaloneConfigModules - ++ metadata.modules ++ [{ package = neovimPackage; }]; - }); - nixvimConfigs = builtins.map mkNixvimConfig' metadata.components; - in lib.listToAttrs nixvimConfigs; - in lib.concatMapAttrs generateNixvimConfigs validConfigs; - in { - # We'll reuse these. - inherit nixvimConfigurations; - - checks = lib.mapAttrs' (name: nvim: - lib.nameValuePair "nixvim-check-${name}" - (inputs.nixvim.lib.${system}.check.mkTestDerivationFromNvim { - inherit nvim; - name = "${name} configuration"; - })) nixvimConfigurations; - }); - }; + checks = lib.mapAttrs' (name: nvim: + lib.nameValuePair "nixvim-check-${name}" + (inputs.nixvim.lib.${system}.check.mkTestDerivationFromNvim { + inherit nvim; + name = "${name} configuration"; + })) nixvimConfigurations; + }); + }) + ]; } diff --git a/modules/flake-parts/setups/shared/config-options.nix b/modules/flake-parts/setups/shared/config-options.nix index a525eecc..38e56d39 100644 --- a/modules/flake-parts/setups/shared/config-options.nix +++ b/modules/flake-parts/setups/shared/config-options.nix @@ -1,6 +1,6 @@ { systems }: -{ lib, name, ... }: { +{ lib, name, config, ... }: { options = { systems = lib.mkOption { type = with lib.types; listOf str; @@ -54,6 +54,6 @@ }; config.modules = lib.singleton { - _module.args = { inherit (config) firstSetupArgs; } + _module.args = { inherit (config) firstSetupArgs; }; }; } diff --git a/modules/flake-parts/setups/wrapper-manager.nix b/modules/flake-parts/setups/wrapper-manager.nix index 72a41864..f17608b6 100644 --- a/modules/flake-parts/setups/wrapper-manager.nix +++ b/modules/flake-parts/setups/wrapper-manager.nix @@ -156,31 +156,32 @@ in { ]); }; - config = lib.mkIf (cfg.configs != { }) { - setups.wrapper-manager.sharedNixpkgsConfig = - config.setups.sharedNixpkgsConfig; + config = lib.mkMerge [ + { + setups.wrapper-manager.sharedNixpkgsConfig = + config.setups.sharedNixpkgsConfig; + } - setups.wrapper-manager.sharedModules = - [ ../../wrapper-manager ../../wrapper-manager/_private ]; - - perSystem = { system, config, lib, ... }: - let - validWrapperManagerConfigs = - lib.filterAttrs (_: metadata: lib.elem system metadata.systems) - cfg.configs; - in { - wrapperManagerPackages = lib.mapAttrs (name: metadata: - let - pkgs = import inputs.${metadata.nixpkgs.branch} { - inherit (metadata.nixpkgs) config; - inherit system; - }; - in mkWrapperManagerPackage { - inherit pkgs; - inherit (metadata.wrapper-manager) src; - modules = cfg.sharedModules ++ cfg.standaloneModules - ++ metadata.modules; - }) validWrapperManagerConfigs; - }; - }; + (lib.mkIf (cfg.configs != { }) { + perSystem = { system, config, lib, ... }: + let + validWrapperManagerConfigs = + lib.filterAttrs (_: metadata: lib.elem system metadata.systems) + cfg.configs; + in { + wrapperManagerPackages = lib.mapAttrs (name: metadata: + let + pkgs = import inputs.${metadata.nixpkgs.branch} { + inherit (metadata.nixpkgs) config; + inherit system; + }; + in mkWrapperManagerPackage { + inherit pkgs; + inherit (metadata.wrapper-manager) src; + modules = cfg.sharedModules ++ cfg.standaloneModules + ++ metadata.modules; + }) validWrapperManagerConfigs; + }; + }); + ]; }