mirror of
https://github.com/nix-community/home-manager
synced 2024-11-27 05:29:46 +01:00
Fix type of various sessionVariables
options
Unfortunately, using `attrsOf` is not possible since it results in too eager evaluation. In particular, the home.sessionVariables = { FOO = "Hello"; BAR = "${config.home.sessionVariables.FOO} World!"; }; example will cause an infinite recursion. This commit restores the option type of - `home.sessionVariables`, - `pam.sessionVariables`, - `programs.bash.sessionVariables`, and - `programs.zsh.sessionVariables` to `attrs`. It also adds test cases for the above options to avoid regressions. Fixes #659
This commit is contained in:
parent
c5f230e682
commit
b6e613c771
16 changed files with 133 additions and 13 deletions
|
@ -149,7 +149,7 @@ in
|
||||||
|
|
||||||
home.sessionVariables = mkOption {
|
home.sessionVariables = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
type = with types; attrsOf (either int str);
|
type = types.attrs;
|
||||||
example = { EDITOR = "emacs"; GS_OPTIONS = "-sPAPERSIZE=a4"; };
|
example = { EDITOR = "emacs"; GS_OPTIONS = "-sPAPERSIZE=a4"; };
|
||||||
description = ''
|
description = ''
|
||||||
Environment variables to always set at login.
|
Environment variables to always set at login.
|
||||||
|
@ -167,19 +167,19 @@ in
|
||||||
variable may have a runtime dependency on another session
|
variable may have a runtime dependency on another session
|
||||||
variable. In particular code like
|
variable. In particular code like
|
||||||
<programlisting language="nix">
|
<programlisting language="nix">
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
FOO = "Hello";
|
FOO = "Hello";
|
||||||
BAR = "$FOO World!";
|
BAR = "$FOO World!";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
may not work as expected. If you need to reference another
|
may not work as expected. If you need to reference another
|
||||||
session variable, then do so inside Nix instead. The above
|
session variable, then do so inside Nix instead. The above
|
||||||
example then becomes
|
example then becomes
|
||||||
<programlisting language="nix">
|
<programlisting language="nix">
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
FOO = "Hello";
|
FOO = "Hello";
|
||||||
BAR = "''${config.home.sessionVariables.FOO} World!";
|
BAR = "''${config.home.sessionVariables.FOO} World!";
|
||||||
};
|
};
|
||||||
</programlisting>
|
</programlisting>
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -14,7 +14,7 @@ in
|
||||||
options = {
|
options = {
|
||||||
pam.sessionVariables = mkOption {
|
pam.sessionVariables = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
type = with types; attrsOf (either int str);
|
type = types.attrs;
|
||||||
example = { EDITOR = "vim"; };
|
example = { EDITOR = "vim"; };
|
||||||
description = ''
|
description = ''
|
||||||
Environment variables that will be set for the PAM session.
|
Environment variables that will be set for the PAM session.
|
||||||
|
|
|
@ -72,7 +72,7 @@ in
|
||||||
|
|
||||||
sessionVariables = mkOption {
|
sessionVariables = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
type = with types; attrsOf (either int str);
|
type = types.attrs;
|
||||||
example = { MAILCHECK = 30; };
|
example = { MAILCHECK = 30; };
|
||||||
description = ''
|
description = ''
|
||||||
Environment variables that will be set for the Bash session.
|
Environment variables that will be set for the Bash session.
|
||||||
|
|
|
@ -202,7 +202,7 @@ in
|
||||||
|
|
||||||
sessionVariables = mkOption {
|
sessionVariables = mkOption {
|
||||||
default = {};
|
default = {};
|
||||||
type = with types; attrsOf (either int str);
|
type = types.attrs;
|
||||||
example = { MAILCHECK = 30; };
|
example = { MAILCHECK = 30; };
|
||||||
description = "Environment variables that will be set for zsh session.";
|
description = "Environment variables that will be set for zsh session.";
|
||||||
};
|
};
|
||||||
|
|
|
@ -31,8 +31,12 @@ import nmt {
|
||||||
{
|
{
|
||||||
i3-keybindings = ./modules/services/window-managers/i3-keybindings.nix;
|
i3-keybindings = ./modules/services/window-managers/i3-keybindings.nix;
|
||||||
}
|
}
|
||||||
|
// import ./modules/misc/pam
|
||||||
// import ./modules/systemd
|
// import ./modules/systemd
|
||||||
)
|
)
|
||||||
|
// import ./modules/home-environment
|
||||||
|
// import ./modules/programs/bash
|
||||||
// import ./modules/programs/ssh
|
// import ./modules/programs/ssh
|
||||||
// import ./modules/programs/tmux;
|
// import ./modules/programs/tmux
|
||||||
|
// import ./modules/programs/zsh;
|
||||||
}
|
}
|
||||||
|
|
3
tests/modules/home-environment/default.nix
Normal file
3
tests/modules/home-environment/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
home-session-variables = ./session-variables.nix;
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Only source this once.
|
||||||
|
if [ -n "$__HM_SESS_VARS_SOURCED" ]; then return; fi
|
||||||
|
export __HM_SESS_VARS_SOURCED=1
|
||||||
|
|
||||||
|
export V1="v1"
|
||||||
|
export V2="v2-v1"
|
19
tests/modules/home-environment/session-variables.nix
Normal file
19
tests/modules/home-environment/session-variables.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
home.sessionVariables = {
|
||||||
|
V1 = "v1";
|
||||||
|
V2 = "v2-${config.home.sessionVariables.V1}";
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-path/etc/profile.d/hm-session-vars.sh
|
||||||
|
assertFileContent \
|
||||||
|
home-path/etc/profile.d/hm-session-vars.sh \
|
||||||
|
${./session-variables-expected.txt}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
3
tests/modules/misc/pam/default.nix
Normal file
3
tests/modules/misc/pam/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
pam-session-variables = ./session-variables.nix;
|
||||||
|
}
|
2
tests/modules/misc/pam/session-variables-expected.txt
Normal file
2
tests/modules/misc/pam/session-variables-expected.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
V1 OVERRIDE="v1"
|
||||||
|
V2 OVERRIDE="v2-v1"
|
19
tests/modules/misc/pam/session-variables.nix
Normal file
19
tests/modules/misc/pam/session-variables.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
pam.sessionVariables = {
|
||||||
|
V1 = "v1";
|
||||||
|
V2 = "v2-${config.pam.sessionVariables.V1}";
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-files/.pam_environment
|
||||||
|
assertFileContent \
|
||||||
|
home-files/.pam_environment \
|
||||||
|
${./session-variables-expected.txt}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
3
tests/modules/programs/bash/default.nix
Normal file
3
tests/modules/programs/bash/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
bash-session-variables = ./session-variables.nix;
|
||||||
|
}
|
|
@ -0,0 +1,8 @@
|
||||||
|
# -*- mode: sh -*-
|
||||||
|
|
||||||
|
. "@homeDirectory@/.nix-profile/etc/profile.d/hm-session-vars.sh"
|
||||||
|
|
||||||
|
export V1="v1"
|
||||||
|
export V2="v2-v1"
|
||||||
|
|
||||||
|
|
28
tests/modules/programs/bash/session-variables.nix
Normal file
28
tests/modules/programs/bash/session-variables.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.bash = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
sessionVariables = {
|
||||||
|
V1 = "v1";
|
||||||
|
V2 = "v2-${config.programs.bash.sessionVariables.V1}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-files/.profile
|
||||||
|
assertFileContent \
|
||||||
|
home-files/.profile \
|
||||||
|
${
|
||||||
|
pkgs.substituteAll {
|
||||||
|
src = ./session-variables-expected.txt;
|
||||||
|
inherit (config.home) homeDirectory;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
3
tests/modules/programs/zsh/default.nix
Normal file
3
tests/modules/programs/zsh/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
zsh-session-variables = ./session-variables.nix;
|
||||||
|
}
|
22
tests/modules/programs/zsh/session-variables.nix
Normal file
22
tests/modules/programs/zsh/session-variables.nix
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
sessionVariables = {
|
||||||
|
V1 = "v1";
|
||||||
|
V2 = "v2-${config.programs.zsh.sessionVariables.V1}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-files/.zshrc
|
||||||
|
assertFileRegex home-files/.zshrc 'export V1="v1"'
|
||||||
|
assertFileRegex home-files/.zshrc 'export V2="v2-v1"'
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue