#!/bin/sh # # ~/.xsession # # Sourced by display managers # # Load Xresources [ -f ~/.config/Xresources/main ] && xrdb -I"$HOME" ~/.config/Xresources/main # Disable the bell xset b off # Folders to search for desktop environments (DE) in sessions_dirs="/usr/share/xsessions" # If we have locally installed DE try them before system ones sessions_dir_local="$HOME/.local/share/xsessions" if [ -d "$sessions_dir_local" ] then sessions_dirs="$sessions_dir_local $sessions_dirs" fi # If we have junest installed DE try them before all others sessions_dir_junest="$HOME/.local/share/xsessions" if [ -d "$sessions_dir_junest" ] then sessions_dirs="$sessions_dir_junest $sessions_dirs" fi startSession() { session_dir="$1" session_name="$2" session_file="${session_dir}/${session_name}.desktop" executable="$(grep ^Exec= "$session_file" | cut -d'=' -f2)" # TODO Does this work with parameters? # gnome-classic might need some # If this is a Junest DE, we need to wrap it if [ "$sessions_dir" = "$sessions_dir_junest" ] then # Some DMs enforce that to you, # which shows warning on Junest unset LD_PRELOAD # The intended way: # exec ~/.local/bin/junest "$executable" $parameters # Too restricted to the outside (e.g. Yubikey isn't accessible) # The custom way exec ~/.local/bin/junest --backend-args "--dev-bind /run /run" "$executable" $parameters # The fallback wrappers way # export PATH="$PATH:~/.junest/usr/bin_wrappers" # exec "$executable" $parameters # Should work but doesn't, I forgot why # The "I do what I want" way #exec bwrap --bind $HOME/.junest / --bind $HOME $HOME --bind /tmp /tmp --proc /proc --dev-bind /dev /dev --dev-bind /run /run "$executable" $parameters # Even Alacritty doesn't work here fi exec "$executable" $parameters } trySession() { # session_name session_name="$1" for sessions_dir in $sessions_dirs do session_file="$sessions_dir/${session_name}.desktop" if [ -f "$session_file" ] then startSession "$sessions_dir" "$session_name" fi done } if [ -n "$1" ] then trySession "$1" fi trySession i3 trySession xfce4 trySession mate trySession plasma trySession gnome trySession kde # If we found nothing by then, # I guess it's up to the DM to default to something