- 
                Notifications
    You must be signed in to change notification settings 
- Fork 16
Description
Description
This was tested using the home-manager module.
When using xremap through a systemd service, the launched terminal has none of
the variables defined in home.sessionVariables. I believe this is expected
behavior, since systemd services have access to a limited number of environment
variables. Likewise, any other program launched by xremap also does not have
access to them.
I'm not creating this issue looking for a solution, since I already found one:
{lib, pkgs, ...}:
{
  programs.bash.initExtra = lib.mkOrder 99 ''
    if [ -n "$__SHELL_FROM_XREMAP" ]; then
      . ${config.home.profileDirectory}/etc/profile.d/hm-session-vars.sh
    fi
  '';
  systemd.user.services.xremap.Service = {
    EnvironmentFile = builtins.toString (
      pkgs.writeText "xremap-session-vars-as-env-d" (
        builtins.concatStringsSep "\n" (
          lib.mapAttrsToList (n: v: "${n}=\"${builtins.toString v}\"") (
            config.home.sessionVariables // { __SHELL_FROM_XREMAP = 1; }
          )
        )
      )
    );
  };
}What it does is expose the session variables to the service, while also adding a
check for the shell --- in this case, Bash --- to source the session variables
if called from xremap, since they are source on ~/.profile, which is not
sourced in such case, since there's no login.
That last part is needed for the shell to avoid /etc/profile or the shell
specific --- in this case, /etc/bashrc --- overriding the session variables
exposed to the service, since they are being sourced on the shell call, that is,
after the session variables were exposed to the service environment.
I was wondering if it would warrant a section in the docs/HOWTO.md; an
addition of an option to the home-manager module to apply what was described in
the solution --- be happy to make the PR in any of those two cases ---;
or just the closing of the issue for being to much of an edge case.