diff options
author | Mx Kookie <kookie@spacekookie.de> | 2020-12-21 07:10:40 +0100 |
---|---|---|
committer | Mx Kookie <kookie@spacekookie.de> | 2020-12-21 07:10:40 +0100 |
commit | 3f3e44beca1a6431c54372294c87ea226d2ea9e7 (patch) | |
tree | ffefe6460c8c233026f0f849bf762690f0146271 /infra/libkookie/home-manager/nix-darwin | |
parent | 53e4aeed9ab362fb286bd814307773dbaf08b16e (diff) | |
parent | 2b1892e646f2e48591c53b3293622720e1a3bdca (diff) |
Add 'infra/libkookie/home-manager/' from commit '2b1892e646f2e48591c53b3293622720e1a3bdca'
git-subtree-dir: infra/libkookie/home-manager
git-subtree-mainline: 53e4aeed9ab362fb286bd814307773dbaf08b16e
git-subtree-split: 2b1892e646f2e48591c53b3293622720e1a3bdca
Diffstat (limited to 'infra/libkookie/home-manager/nix-darwin')
-rw-r--r-- | infra/libkookie/home-manager/nix-darwin/default.nix | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/infra/libkookie/home-manager/nix-darwin/default.nix b/infra/libkookie/home-manager/nix-darwin/default.nix new file mode 100644 index 000000000000..12d02174332d --- /dev/null +++ b/infra/libkookie/home-manager/nix-darwin/default.nix @@ -0,0 +1,107 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + + cfg = config.home-manager; + + extendedLib = import ../modules/lib/stdlib-extended.nix pkgs.lib; + + hmModule = types.submoduleWith { + specialArgs = { lib = extendedLib; }; + modules = [ + ({ name, ... }: { + imports = import ../modules/modules.nix { + inherit pkgs; + lib = extendedLib; + useNixpkgsModule = !cfg.useGlobalPkgs; + }; + + config = { + submoduleSupport.enable = true; + submoduleSupport.externalPackageInstall = cfg.useUserPackages; + + home.username = config.users.users.${name}.name; + home.homeDirectory = config.users.users.${name}.home; + }; + }) + ]; + }; + +in + +{ + options = { + home-manager = { + useUserPackages = mkEnableOption '' + installation of user packages through the + <option>users.users.‹name?›.packages</option> option. + ''; + + useGlobalPkgs = mkEnableOption '' + using the system configuration's <literal>pkgs</literal> + argument in Home Manager. This disables the Home Manager + options <option>nixpkgs.*</option> + ''; + + backupFileExtension = mkOption { + type = types.nullOr types.str; + default = null; + example = "backup"; + description = '' + On activation move existing files by appending the given + file extension rather than exiting with an error. + ''; + }; + + verbose = mkEnableOption "verbose output on activation"; + + users = mkOption { + type = types.attrsOf hmModule; + default = {}; + description = '' + Per-user Home Manager configuration. + ''; + }; + }; + }; + + config = mkIf (cfg.users != {}) { + warnings = + flatten (flip mapAttrsToList cfg.users (user: config: + flip map config.warnings (warning: + "${user} profile: ${warning}" + ) + )); + + assertions = + flatten (flip mapAttrsToList cfg.users (user: config: + flip map config.assertions (assertion: + { + inherit (assertion) assertion; + message = "${user} profile: ${assertion.message}"; + } + ) + )); + + users.users = mkIf cfg.useUserPackages ( + mapAttrs (username: usercfg: { + packages = [ usercfg.home.path ]; + }) cfg.users + ); + + environment.pathsToLink = mkIf cfg.useUserPackages [ "/etc/profile.d" ]; + + system.activationScripts.postActivation.text = + concatStringsSep "\n" (mapAttrsToList (username: usercfg: '' + echo Activating home-manager configuration for ${username} + sudo -u ${username} -i ${pkgs.writeShellScript "activation-${username}" '' + ${lib.optionalString (cfg.backupFileExtension != null) + "export HOME_MANAGER_BACKUP_EXT=${lib.escapeShellArg cfg.backupFileExtension}"} + ${lib.optionalString cfg.verbose "export VERBOSE=1"} + exec ${usercfg.home.activationPackage}/activate + ''} + '') cfg.users); + }; +} |