diff --git a/flake-module.nix b/flake-module.nix new file mode 100644 index 000000000..466698c4b --- /dev/null +++ b/flake-module.nix @@ -0,0 +1,32 @@ +{ lib, flake-parts-lib, moduleLocation, ... }: +let inherit (lib) toString mapAttrs mkOption types; +in { + options = { + flake = flake-parts-lib.mkSubmoduleOptions { + homeConfigurations = mkOption { + type = types.lazyAttrsOf types.raw; + default = { }; + description = '' + Instantiated Home-Manager configurations. + + `homeConfigurations` is for specific installations. If you want to expose + reusable configurations, add them to `homeModules` in the form of modules, so + that you can reference them in this or another flake's `homeConfigurations`. + ''; + }; + homeModules = mkOption { + type = types.lazyAttrsOf types.unspecified; + default = { }; + apply = mapAttrs (k: v: { + _file = "${toString moduleLocation}#homeModules.${k}"; + imports = [ v ]; + }); + description = '' + Home-Manager modules. + + You may use this for reusable pieces of configuration, service modules, etc. + ''; + }; + }; + }; +} diff --git a/flake.nix b/flake.nix index 3a90f89c0..30f3dfb8e 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,11 @@ # unofficial; deprecated in Nix 2.8 darwinModule = self.darwinModules.default; + flakeModules = rec { + home-manager = import ./flake-module.nix; + default = home-manager; + }; + templates = { standalone = { path = ./templates/standalone;