aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/sh
diff options
context:
space:
mode:
Diffstat (limited to 'sh')
-rw-r--r--sh/.config/profile.d/20-dotnet.sh5
-rw-r--r--sh/.config/profile.d/20-go.sh8
-rw-r--r--sh/.config/profile.d/20-perl.sh5
-rw-r--r--sh/.config/profile.d/20-ruby.sh3
-rw-r--r--sh/.profile48
5 files changed, 50 insertions, 19 deletions
diff --git a/sh/.config/profile.d/20-dotnet.sh b/sh/.config/profile.d/20-dotnet.sh
index 9e89365..f7ac5a6 100644
--- a/sh/.config/profile.d/20-dotnet.sh
+++ b/sh/.config/profile.d/20-dotnet.sh
@@ -2,4 +2,7 @@
export OMNISHARPHOME="$XDG_CONFIG_HOME/omnisharp"
export DOTNET_CLI_HOME="$XDG_DATA_HOME/dotnet"
-export PATH="$PATH:$DOTNET_CLI_HOME/tools"
+
+append_path "$DOTNET_CLI_HOME/tools"
+
+export PATH
diff --git a/sh/.config/profile.d/20-go.sh b/sh/.config/profile.d/20-go.sh
index 58d8115..252ba47 100644
--- a/sh/.config/profile.d/20-go.sh
+++ b/sh/.config/profile.d/20-go.sh
@@ -1,7 +1,9 @@
#!/bin/sh
-export GOPATH="$XDG_DATA_HOME/go"
-export PATH="$PATH:$GOPATH/bin"
-
# See: https://drewdevault.com/2022/05/25/Google-has-been-DDoSing-sourcehut.html
export GOPRIVATE=git.sr.ht
+export GOPATH="$XDG_DATA_HOME/go"
+
+append_path "$GOPATH/bin"
+
+export PATH
diff --git a/sh/.config/profile.d/20-perl.sh b/sh/.config/profile.d/20-perl.sh
index 8ee3b93..13d5e0b 100644
--- a/sh/.config/profile.d/20-perl.sh
+++ b/sh/.config/profile.d/20-perl.sh
@@ -5,4 +5,7 @@ export PERL_LOCAL_LIB_ROOT="$XDG_DATA_HOME/perl"
export PERL5LIB="$PERL_LOCAL_LIB_ROOT/lib/perl5"
export PERL_MB_OPT="--install_base '$PERL_LOCAL_LIB_ROOT'"
export PERL_MM_OPT="INSTALL_BASE=$PERL_LOCAL_LIB_ROOT"
-export PATH="$PATH:$PERL_LOCAL_LIB_ROOT/bin"
+
+append_path "$PERL_LOCAL_LIB_ROOT/bin"
+
+export PATH
diff --git a/sh/.config/profile.d/20-ruby.sh b/sh/.config/profile.d/20-ruby.sh
index 1336853..757bd95 100644
--- a/sh/.config/profile.d/20-ruby.sh
+++ b/sh/.config/profile.d/20-ruby.sh
@@ -2,5 +2,6 @@
if command -v ruby >/dev/null && command -v gem >/dev/null; then
GEM_USER_DIR="$(ruby -r rubygems -e 'puts Gem.user_dir')"
- export PATH="$PATH:$GEM_USER_DIR"
+ [ -d "$GEM_USER_DIR" ] && append_path "$GEM_USER_DIR"
+ export PATH
fi
diff --git a/sh/.profile b/sh/.profile
index 7095e1a..658c65b 100644
--- a/sh/.profile
+++ b/sh/.profile
@@ -1,29 +1,51 @@
#!/bin/sh
-# shellcheck disable=2046
+# shellcheck disable=2046,1090
+
+# Most of this script is a user scoped version of /etc/profile
+
+# Append "$1" to $PATH when not already in.
+# This function API is accessible to scripts in $XDG_CONFIG_HOME/profile.d
+append_path() {
+ case ":$PATH:" in
+ *:"$1":*) ;;
+ *)
+ PATH="${PATH:+$PATH:}$1"
+ ;;
+ esac
+}
# Use systemd-environment-d-generator(8) to generate environment, and export those variables
+# NOTE: To avoid overriding PATH, we rename it and append it separately
#
# See: https://wiki.archlinux.org/title/Environment_variables#Per_Wayland_session
for gen in /usr/lib/systemd/user-environment-generators/*; do
if [ -e "$gen" ]; then
- export $($gen | xargs)
+ export $($gen | sed 's/^PATH=/GEN_PATH=/' | xargs)
+ append_path "$GEN_PATH"
+ unset GEN_PATH
fi
done
+append_path "$HOME/.local/bin"
+
+# Force PATH to be environment
+export PATH
+
+# Load profiles from $XDG_CONFIG_HOME/profile.d
+if test -d "$XDG_CONFIG_HOME"/profile.d/; then
+ for profile in "$XDG_CONFIG_HOME"/profile.d/*.sh; do
+ test -r "$profile" && . "$profile"
+ done
+ unset profile
+fi
+
+# Unload our profile API functions
+unset -f append_path
+
# Manually parse and export XDG user directories. xdg-user-dirs-update is disabled in
-# $XDG_CONFIG_HOME/user-dirs.conf due to how it handles non-existant directories
+# $XDG_CONFIG_HOME/user-dirs.conf due to how it handles non-existent directories
#
# See: https://wiki.archlinux.org/title/XDG_user_directories
if [ -e "$HOME/.config/user-dirs.dirs" ]; then
export $(xargs <"$HOME/.config/user-dirs.dirs")
fi
-
-# Adopt the behavior of the system wide configuration for application specific settings
-#
-# See: https://wiki.archlinux.org/title/Command-line_shell#/etc/profile
-for script in "$XDG_CONFIG_HOME"/profile.d/*.sh; do
- if [ -r "$script" ]; then
- # shellcheck disable=1090
- . "$script"
- fi
-done