Xrefs: GitHub issue
One problem I had with my Sway setup is that setting environment
variables in my config.fish
(the Fish equivalent to .bashrc
or
.zshrc
) is not always sufficient.
In particular, I need my environment variables to be available in at least the following places:
- my Fish shell,
- applications launched from Sway (e.g. using keybindings),
- applications launched as a systemd service (e.g. the Emacs server daemon).
Setting variables in the shell profile has the problem that they are not
picked up by systemd services. Another option seems to be
~/.pam_environment
, but this
is deprecated.
One solution, coming from
this GitHub issue, is to use environment.d
provided by
systemd, and import these variables into Sway:
Create the directory
~/.config/environment.d/
.Create one or more files containing variables. E.g.
wayland.conf
containing:1 2 3 4
# Wayland configuration GDK_BACKEND=wayland XDG_SESSION_TYPE=wayland SDL_VIDEO_DRIVER=wayland
Instead of directly launching
sway
from your display manager or shell config, create a wrapper scriptswayrun.sh
, based on this comment. You could put this in e.g./usr/local/bin/
or somewhere in your homedir. This script calls a systemd generator to read all environment variables set inenvironment.d
and exports them.1 2 3 4 5 6 7 8 9 10 11 12
#!/usr/bin/env bash set -euo pipefail # Export all variables set -a # Call the systemd generator that reads all files in environment.d source /dev/fd/0 <<EOF $(/usr/lib/systemd/user-environment-generators/30-systemd-environment-d-generator) EOF set +a exec sway
In your display manager or shell config, replace
exec sway
byexec ~/path/to/swayrun.sh
.
All your environment variables set in the environment.d
directory will
now be shared between your shell, Sway and systemd services.
Note that I am currently only using this setup on my laptop - not on my
server. I am not exactly sure how well this would work when SSHing.
Currently Fish inherits all environment variables from Sway and does not
set any of them itself. This works fine without SSH, but you may need to
source the environment.d
generator script from Fish as well. Since
Fish uses a somewhat different syntax from Bash and Zsh, this in itself
is not completely trivial so I have not yet looked into this.