Prepare inclusion in nixos-search (#2971)
* Add flake.lock and clean up flake.nix Add a lockfile to work around https://github.com/NixOS/nix/issues/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 https://github.com/nix-community/home-manager/pull/2442#issuecomment-1133670487 * 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.main
parent
2070389247
commit
64ab7d6e8d
@ -1,2 +1 @@ |
||||
/flake.lock |
||||
/result* |
||||
|
@ -0,0 +1,94 @@ |
||||
{ |
||||
"nodes": { |
||||
"flake-compat": { |
||||
"flake": false, |
||||
"locked": { |
||||
"lastModified": 1650374568, |
||||
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", |
||||
"owner": "edolstra", |
||||
"repo": "flake-compat", |
||||
"rev": "b4a34015c698c7793d592d66adbab377907a2be8", |
||||
"type": "github" |
||||
}, |
||||
"original": { |
||||
"owner": "edolstra", |
||||
"repo": "flake-compat", |
||||
"type": "github" |
||||
} |
||||
}, |
||||
"nixpkgs": { |
||||
"locked": { |
||||
"lastModified": 1654230545, |
||||
"narHash": "sha256-8Vlwf0x8ow6pPOK2a04bT+pxIeRnM1+O0Xv9/CuDzRs=", |
||||
"owner": "nixos", |
||||
"repo": "nixpkgs", |
||||
"rev": "236cc2971ac72acd90f0ae3a797f9f83098b17ec", |
||||
"type": "github" |
||||
}, |
||||
"original": { |
||||
"owner": "nixos", |
||||
"ref": "nixos-unstable", |
||||
"repo": "nixpkgs", |
||||
"type": "github" |
||||
} |
||||
}, |
||||
"nmd": { |
||||
"flake": false, |
||||
"locked": { |
||||
"lastModified": 1653339422, |
||||
"narHash": "sha256-8nc7lcYOgih3YEmRMlBwZaLLJYpLPYKBlewqHqx8ieg=", |
||||
"owner": "rycee", |
||||
"repo": "nmd", |
||||
"rev": "9e7a20e6ee3f6751f699f79c0b299390f81f7bcd", |
||||
"type": "gitlab" |
||||
}, |
||||
"original": { |
||||
"owner": "rycee", |
||||
"repo": "nmd", |
||||
"type": "gitlab" |
||||
} |
||||
}, |
||||
"nmt": { |
||||
"flake": false, |
||||
"locked": { |
||||
"lastModified": 1648075362, |
||||
"narHash": "sha256-u36WgzoA84dMVsGXzml4wZ5ckGgfnvS0ryzo/3zn/Pc=", |
||||
"owner": "rycee", |
||||
"repo": "nmt", |
||||
"rev": "d83601002c99b78c89ea80e5e6ba21addcfe12ae", |
||||
"type": "gitlab" |
||||
}, |
||||
"original": { |
||||
"owner": "rycee", |
||||
"repo": "nmt", |
||||
"type": "gitlab" |
||||
} |
||||
}, |
||||
"root": { |
||||
"inputs": { |
||||
"flake-compat": "flake-compat", |
||||
"nixpkgs": "nixpkgs", |
||||
"nmd": "nmd", |
||||
"nmt": "nmt", |
||||
"utils": "utils" |
||||
} |
||||
}, |
||||
"utils": { |
||||
"locked": { |
||||
"lastModified": 1653893745, |
||||
"narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", |
||||
"owner": "numtide", |
||||
"repo": "flake-utils", |
||||
"rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", |
||||
"type": "github" |
||||
}, |
||||
"original": { |
||||
"owner": "numtide", |
||||
"repo": "flake-utils", |
||||
"type": "github" |
||||
} |
||||
} |
||||
}, |
||||
"root": "root", |
||||
"version": 7 |
||||
} |
@ -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" ]; |
||||
}; |
||||
} |
Loading…
Reference in new issue