mirror of
https://github.com/nix-community/home-manager
synced 2024-06-30 02:18:32 +02: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
|
@ -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 {
|
home.sessionVariablesExtra = mkOption {
|
||||||
type = types.lines;
|
type = types.lines;
|
||||||
default = "";
|
default = "";
|
||||||
|
@ -555,11 +577,17 @@ in
|
||||||
export __HM_SESS_VARS_SOURCED=1
|
export __HM_SESS_VARS_SOURCED=1
|
||||||
|
|
||||||
${config.lib.shell.exportAll cfg.sessionVariables}
|
${config.lib.shell.exportAll cfg.sessionVariables}
|
||||||
'' + lib.optionalString (cfg.sessionPath != [ ]) ''
|
'' + concatStringsSep "\n"
|
||||||
export PATH="$PATH''${PATH:+:}${concatStringsSep ":" cfg.sessionPath}"
|
(mapAttrsToList
|
||||||
'' + cfg.sessionVariablesExtra;
|
(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 ];
|
home.packages = [ config.home.sessionVariablesPackage ];
|
||||||
|
|
||||||
# A dummy entry acting as a boundary between the activation
|
# 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-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 New Issue
Block a user