1
0
mirror of https://github.com/nix-community/home-manager synced 2024-06-26 16:38:34 +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:
Thiago Kenji Okada 2023-10-18 21:46:54 +01:00
parent 1aabb0a31b
commit 7d4f510f26
3 changed files with 48 additions and 4 deletions

View File

@ -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

View File

@ -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;
}

View 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"'
'';
}