xsession: add option importedVariables
This option lists the environment variables to be imported into the systemd user session. Also add a basic test of the xsession module.
This commit is contained in:
parent
f83c49baa3
commit
95d55b8da1
|
@ -65,8 +65,7 @@ in
|
||||||
then [ pkgs.qgnomeplatform ]
|
then [ pkgs.qgnomeplatform ]
|
||||||
else [ pkgs.libsForQt5.qtstyleplugins ];
|
else [ pkgs.libsForQt5.qtstyleplugins ];
|
||||||
|
|
||||||
xsession.profileExtra =
|
xsession.importedVariables = [ "QT_QPA_PLATFORMTHEME" ];
|
||||||
"systemctl --user import-environment QT_QPA_PLATFORMTHEME";
|
|
||||||
|
|
||||||
# Enable GTK+ style for Qt4 in either case.
|
# Enable GTK+ style for Qt4 in either case.
|
||||||
# It doesn’t support the platform theme packages.
|
# It doesn’t support the platform theme packages.
|
||||||
|
|
|
@ -42,5 +42,7 @@ in
|
||||||
WantedBy = [ "graphical-session.target" ];
|
WantedBy = [ "graphical-session.target" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
xsession.importedVariables = [ "GDK_PIXBUF_MODULE_FILE" ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,10 +62,31 @@ in
|
||||||
default = "";
|
default = "";
|
||||||
description = "Extra shell commands to run during initialization.";
|
description = "Extra shell commands to run during initialization.";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
importedVariables = mkOption {
|
||||||
|
type = types.listOf (types.strMatching "[a-zA-Z_][a-zA-Z0-9_]*");
|
||||||
|
example = [ "GDK_PIXBUF_ICON_LOADER" ];
|
||||||
|
visible = false;
|
||||||
|
description = ''
|
||||||
|
Environment variables to import into the user systemd
|
||||||
|
session. The will be available for use by graphical
|
||||||
|
services.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
|
xsession.importedVariables = [
|
||||||
|
"DBUS_SESSION_BUS_ADDRESS"
|
||||||
|
"DISPLAY"
|
||||||
|
"SSH_AUTH_SOCK"
|
||||||
|
"XAUTHORITY"
|
||||||
|
"XDG_DATA_DIRS"
|
||||||
|
"XDG_RUNTIME_DIR"
|
||||||
|
"XDG_SESSION_ID"
|
||||||
|
];
|
||||||
|
|
||||||
systemd.user = {
|
systemd.user = {
|
||||||
services = mkIf (config.home.keyboard != null) {
|
services = mkIf (config.home.keyboard != null) {
|
||||||
setxkbmap = {
|
setxkbmap = {
|
||||||
|
@ -118,13 +139,10 @@ in
|
||||||
# script starts up graphical-session.target.
|
# script starts up graphical-session.target.
|
||||||
systemctl --user stop graphical-session.target graphical-session-pre.target
|
systemctl --user stop graphical-session.target graphical-session-pre.target
|
||||||
|
|
||||||
systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS
|
${optionalString (cfg.importedVariables != []) (
|
||||||
systemctl --user import-environment DISPLAY
|
"systemctl --user import-environment "
|
||||||
systemctl --user import-environment SSH_AUTH_SOCK
|
+ toString (unique cfg.importedVariables)
|
||||||
systemctl --user import-environment XAUTHORITY
|
)}
|
||||||
systemctl --user import-environment XDG_DATA_DIRS
|
|
||||||
systemctl --user import-environment XDG_RUNTIME_DIR
|
|
||||||
systemctl --user import-environment XDG_SESSION_ID
|
|
||||||
|
|
||||||
${cfg.profileExtra}
|
${cfg.profileExtra}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ 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/misc/pam
|
||||||
|
// import ./modules/misc/xsession
|
||||||
// import ./modules/systemd
|
// import ./modules/systemd
|
||||||
)
|
)
|
||||||
// import ./modules/home-environment
|
// import ./modules/home-environment
|
||||||
|
|
16
tests/modules/misc/xsession/basic-xprofile-expected.txt
Normal file
16
tests/modules/misc/xsession/basic-xprofile-expected.txt
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
. "/test-home/.nix-profile/etc/profile.d/hm-session-vars.sh"
|
||||||
|
|
||||||
|
if [[ -e "$HOME/.profile" ]]; then
|
||||||
|
. "$HOME/.profile"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If there are any running services from a previous session.
|
||||||
|
# Need to run this in xprofile because the NixOS xsession
|
||||||
|
# script starts up graphical-session.target.
|
||||||
|
systemctl --user stop graphical-session.target graphical-session-pre.target
|
||||||
|
|
||||||
|
systemctl --user import-environment DBUS_SESSION_BUS_ADDRESS DISPLAY SSH_AUTH_SOCK XAUTHORITY XDG_DATA_DIRS XDG_RUNTIME_DIR XDG_SESSION_ID EXTRA_IMPORTED_VARIABLE
|
||||||
|
|
||||||
|
profile extra commands
|
||||||
|
|
||||||
|
export HM_XPROFILE_SOURCED=1
|
18
tests/modules/misc/xsession/basic-xsession-expected.txt
Normal file
18
tests/modules/misc/xsession/basic-xsession-expected.txt
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
if [[ ! -v HM_XPROFILE_SOURCED ]]; then
|
||||||
|
. ~/.xprofile
|
||||||
|
fi
|
||||||
|
unset HM_XPROFILE_SOURCED
|
||||||
|
|
||||||
|
systemctl --user start hm-graphical-session.target
|
||||||
|
|
||||||
|
init extra commands
|
||||||
|
|
||||||
|
window manager command
|
||||||
|
|
||||||
|
systemctl --user stop graphical-session.target
|
||||||
|
systemctl --user stop graphical-session-pre.target
|
||||||
|
|
||||||
|
# Wait until the units actually stop.
|
||||||
|
while [[ -n "$(systemctl --user --no-legend --state=deactivating list-units)" ]]; do
|
||||||
|
sleep 0.5
|
||||||
|
done
|
30
tests/modules/misc/xsession/basic.nix
Normal file
30
tests/modules/misc/xsession/basic.nix
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
home.homeDirectory = "/test-home";
|
||||||
|
|
||||||
|
xsession = {
|
||||||
|
enable = true;
|
||||||
|
windowManager.command = "window manager command";
|
||||||
|
importedVariables = [ "EXTRA_IMPORTED_VARIABLE" ];
|
||||||
|
initExtra = "init extra commands";
|
||||||
|
profileExtra = "profile extra commands";
|
||||||
|
};
|
||||||
|
|
||||||
|
nmt.script = ''
|
||||||
|
assertFileExists home-files/.xprofile
|
||||||
|
assertFileContent \
|
||||||
|
home-files/.xprofile \
|
||||||
|
${./basic-xprofile-expected.txt}
|
||||||
|
|
||||||
|
assertFileExists home-files/.xsession
|
||||||
|
assertFileContent \
|
||||||
|
home-files/.xsession \
|
||||||
|
${./basic-xsession-expected.txt}
|
||||||
|
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
3
tests/modules/misc/xsession/default.nix
Normal file
3
tests/modules/misc/xsession/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
xsession-basic = ./basic.nix;
|
||||||
|
}
|
Loading…
Reference in a new issue