forked from nix-community/home-manager
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Prepare inclusion in nixos-search (nix-community#2971)
* Add flake.lock and clean up flake.nix Add a lockfile to work around NixOS/nix#6541 (and because it's a good idea anyway). Also use flake-utils, and restrict ourselves to the five platforms supported by nixpkgs. Otherwise, the IFD for nmd fails on weird platforms. This fixes `nix flake check`. Remove the redundant `apps` output, see nix-community#2442 (comment) * nixos,nix-darwin: factor out into a common module * nixos,nix-darwin: make `home-managers.users` shallowly visible Make sure the option is included in the NixOS/nix-darwin manual (but the HM submodule options aren't). Also add a static description to the HM submodule type so that we don't need to evaluate the submodules just to build the option manual. This makes nixos-search able to index the home-manager flake. Also clean up some TODOs. * flake: add nmd and nmt This avoids having to use `pkgs.fetchFromGitLab` in an IFD, which causes issues when indexing packages with nixos-search because `pkgs` is instantiated with every platform.
- Loading branch information
Showing
12 changed files
with
365 additions
and
358 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1 @@ | ||
/flake.lock | ||
/result* |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
# This module is the common base for the NixOS and nix-darwin modules. | ||
# For OS-specific configuration, please edit nixos/default.nix or nix-darwin/default.nix instead. | ||
|
||
{ 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; | ||
osConfig = config; | ||
modulesPath = builtins.toString ./modules; | ||
} // cfg.extraSpecialArgs; | ||
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; | ||
|
||
# Make activation script use same version of Nix as system as a whole. | ||
# This avoids problems with Nix not being in PATH. | ||
home.extraActivationPath = [ config.nix.package ]; | ||
}; | ||
}) | ||
] ++ cfg.sharedModules; | ||
} // { | ||
description = "Home Manager module"; | ||
}; | ||
|
||
# TODO: hack until https://github.com/NixOS/nixpkgs/pull/173621 lands | ||
hmModule = hmModule' // { | ||
substSubModules = m: | ||
hmModule'.substSubModules m // { | ||
inherit (hmModule') description; | ||
}; | ||
}; | ||
|
||
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. | ||
''; | ||
}; | ||
|
||
extraSpecialArgs = mkOption { | ||
type = types.attrs; | ||
default = { }; | ||
example = literalExpression "{ inherit emacs-overlay; }"; | ||
description = '' | ||
Extra <literal>specialArgs</literal> passed to Home Manager. This | ||
option can be used to pass additional arguments to all modules. | ||
''; | ||
}; | ||
|
||
sharedModules = mkOption { | ||
type = with types; listOf raw; | ||
default = [ ]; | ||
example = literalExpression "[ { home.packages = [ nixpkgs-fmt ]; } ]"; | ||
description = '' | ||
Extra modules added to all users. | ||
''; | ||
}; | ||
|
||
verbose = mkEnableOption "verbose output on activation"; | ||
|
||
users = mkOption { | ||
type = types.attrsOf hmModule; | ||
default = { }; | ||
# Prevent the entire submodule being included in the documentation. | ||
visible = "shallow"; | ||
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" ]; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.