mirror of
https://github.com/nix-community/home-manager
synced 2024-11-13 22:59:44 +01:00
home-environment: add home.sessionSearchVariables
This commit introduces `home.sessionSearchVariables` option, that is created to be a "generic" version of `home.sessionPath` for any environment variables that is similar to PATH (e.g.: MANPATH). This allows composition of those variables between multiple modules, avoiding issues like this one: https://github.com/nix-community/home-manager/pull/4579/files#r1364374048 This commit also reimplements `home.sessionPath` as terms of `home.sessionSearchVariables`, to reduce code duplication and show that the code is correct.
This commit is contained in:
parent
1aabb0a31b
commit
7d4f510f26
3 changed files with 48 additions and 4 deletions
|
@ -319,6 +319,28 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
home.sessionSearchVariables = mkOption {
|
||||
default = { };
|
||||
type = with types; attrsOf (listOf str);
|
||||
example = {
|
||||
MANPATH = [
|
||||
"$HOME/.npm-packages/man"
|
||||
"\${xdg.configHome}/.local/share/man"
|
||||
];
|
||||
};
|
||||
description = ''
|
||||
Extra directories to add to arbitrary PATH-like environment
|
||||
variables (e.g.: {env}`MANPATH`). The values will be concatenated
|
||||
by `:`.
|
||||
|
||||
These directories are added to the environment variable in a
|
||||
double-quoted context, so expressions like `$HOME` are
|
||||
expanded by the shell. However, since expressions like `~` or
|
||||
`*` are escaped, they will end up in the environment
|
||||
verbatim.
|
||||
'';
|
||||
};
|
||||
|
||||
home.sessionVariablesExtra = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
|
@ -555,11 +577,17 @@ in
|
|||
export __HM_SESS_VARS_SOURCED=1
|
||||
|
||||
${config.lib.shell.exportAll cfg.sessionVariables}
|
||||
'' + lib.optionalString (cfg.sessionPath != [ ]) ''
|
||||
export PATH="$PATH''${PATH:+:}${concatStringsSep ":" cfg.sessionPath}"
|
||||
'' + cfg.sessionVariablesExtra;
|
||||
'' + concatStringsSep "\n"
|
||||
(mapAttrsToList
|
||||
(env: values: ''
|
||||
export ${env}="''$${env}''${${env}:+:}${concatStringsSep ":" values}"'')
|
||||
cfg.sessionSearchVariables)
|
||||
+ cfg.sessionVariablesExtra;
|
||||
};
|
||||
|
||||
home.sessionSearchVariables.PATH =
|
||||
mkIf (cfg.sessionPath != [ ]) cfg.sessionPath;
|
||||
|
||||
home.packages = [ config.home.sessionVariablesPackage ];
|
||||
|
||||
# A dummy entry acting as a boundary between the activation
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
home-session-variables = ./session-variables.nix;
|
||||
home-session-path = ./session-path.nix;
|
||||
home-session-search-variables = ./session-search-variables.nix;
|
||||
home-session-variables = ./session-variables.nix;
|
||||
}
|
||||
|
|
15
tests/modules/home-environment/session-search-variables.nix
Normal file
15
tests/modules/home-environment/session-search-variables.nix
Normal file
|
@ -0,0 +1,15 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
({ ... }: { config.home.sessionSearchVariables.TEST = [ "foo" ]; })
|
||||
({ ... }: { config.home.sessionSearchVariables.TEST = [ "bar" "baz" ]; })
|
||||
];
|
||||
|
||||
nmt.script = ''
|
||||
hmSessVars=home-path/etc/profile.d/hm-session-vars.sh
|
||||
assertFileExists $hmSessVars
|
||||
assertFileContains $hmSessVars \
|
||||
'export TEST="$TEST''${TEST:+:}bar:baz:foo"'
|
||||
'';
|
||||
}
|
Loading…
Reference in a new issue