services: Fix missing environment variables for user services

We add an additional 'core' user service (i.e. one that gets loaded
before all others by turnstile) which populates the TURNSTILE_ENV_DIR
with all manner of custom set env vars that are important for other
applications.

Most importantly, this sets up the XDG directory compliance for
applications either managed by turnstile or applications started through
turnstile on my system. So, for example `pass` knows to search for its
database in `XDG_DATA_HOME` and river knows to search for binaries in a
PATH which has been prefixed with my custom user binary location.
This commit is contained in:
Marty Oehme 2025-02-26 15:37:28 +01:00
parent 5f6627e7e7
commit 2e9701ea26
Signed by: Marty
GPG key ID: 4E535BC19C61886E
6 changed files with 36 additions and 12 deletions
desktop/.config/river
services/sv
loadenv
river
turnstile-ready
terminal/.config/nushell

View file

@ -4,12 +4,6 @@
if [ -d "$TURNSTILE_ENV_DIR" ]; then
echo "$DISPLAY" >"$TURNSTILE_ENV_DIR/DISPLAY"
echo "$WAYLAND_DISPLAY" >"$TURNSTILE_ENV_DIR/WAYLAND_DISPLAY"
echo "ADDING KEYCHAIN TO ENV"
keychain --eval --quiet --agents ssh,gpg C414FF88A557F29AFEF76C7E73BA40D5AFAF49C9
echo "$SSH_AUTH_SOCK">"$TURNSTILE_ENV_DIR/SSH_AUTH_SOCK"
echo "$SSH_AGENT_PID">"$TURNSTILE_ENV_DIR/SSH_AGENT_PID"
echo "$GPG_AGENT_INFO">"$TURNSTILE_ENV_DIR/GPG_AGENT_INFO"
echo "DONE ADDING KEYCHAIN TO ENV"
fi
mod="Mod4"

3
services/sv/loadenv/log/run Executable file
View file

@ -0,0 +1,3 @@
#!/usr/bin/env sh
exec vlogger -t loadenv -p daemon

29
services/sv/loadenv/run Executable file
View file

@ -0,0 +1,29 @@
#!/bin/sh
# Loadenv service ensures turstile environment gets populated with all
# profile-loaded environment variables.
#
# To use this service with other turnstile user services, ensure it gets
# started before anything else is started by putting it into `turnstile-ready`
# service conf as a core service.
#
# Will also load the profile file from a custom XDG-compliant
# ~/.config/sh/profile directory before falling back to the home directory
# ~/.profile file.
# This location can be manually overriden by putting the following into the
# service conf file:
# XDG_PROFILE=/my/location/somewhere/profile
[ -r ./conf ] && . ./conf
if [ -e "$HOME/.config/sh/profile" ]; then
XDG_PROFILE="${XDG_PROFILE:-HOME/.config/sh/profile}"
fi
ENV=${XDG_PROFILE:-$HOME/.profile} sh -i -c env | while IFS= read -r line; do
value=${line#*=}
name=${line%%=*}
echo "$value" > "$TURNSTILE_ENV_DIR/$name"
done
exec 2>&1
exec pause

View file

@ -2,9 +2,5 @@
[ -r ./conf ] && . ./conf
if [ -d "$TURNSTILE_ENV_DIR" ]; then
echo "$HOME/.local/bin:$PATH" > "$TURNSTILE_ENV_DIR/PATH"
fi
exec 2>&1
exec chpst -e "$TURNSTILE_ENV_DIR" river -log-level warning

View file

@ -1 +1 @@
core_services="dbus"
core_services="loadenv dbus"

View file

@ -63,7 +63,9 @@ alias l = ls
alias cl = clear
alias md = mkdir
def --env mcd [path: one_of(string glob)] {
def --env mcd [path: path] {
mkdir $path
cd $path
}
alias v = nvim