|
|
@ -3,58 +3,91 @@ |
|
|
|
# |
|
|
|
# ~/.xsession |
|
|
|
# |
|
|
|
# Might be sourced by DM when on custom |
|
|
|
# TODO Test that on a DM I guess? |
|
|
|
# Sourced by display managers |
|
|
|
# |
|
|
|
|
|
|
|
# Load Xresources |
|
|
|
[ -f ~/.config/Xresources/main ] && xrdb -I"$HOME" ~/.config/Xresources/main |
|
|
|
|
|
|
|
# Disable the bell |
|
|
|
xset b off |
|
|
|
|
|
|
|
found=0 |
|
|
|
tryDM() { |
|
|
|
if [ $found -eq 0 ]; then |
|
|
|
parameters='' |
|
|
|
case $1 in |
|
|
|
awesome ) executable=awesome;; |
|
|
|
bspwm ) executable=bspwm;; |
|
|
|
catwm ) executable=catwm;; |
|
|
|
cinnamon ) executable=cinnamon-session;; |
|
|
|
dwm ) executable=dwm;; |
|
|
|
enlightenment ) executable=enlightenment_start;; |
|
|
|
ede ) executable=startede;; |
|
|
|
fluxbox ) executable=startfluxbox;; |
|
|
|
gnome ) executable=gnome-session;; |
|
|
|
gnome-classic ) executable=gnome-session; parameters="--session=gnome-classic";; |
|
|
|
i3|i3wm ) executable=i3;; |
|
|
|
icewm ) executable=icewm-session;; |
|
|
|
jwm ) executable=jwm;; |
|
|
|
kde ) executable=startkde;; |
|
|
|
mate ) executable=mate-session;; |
|
|
|
monster|monsterwm ) executable=monsterwm;; |
|
|
|
notion ) executable=notion;; |
|
|
|
openbox ) executable=openbox-session;; |
|
|
|
plasma ) executable=startplasma-x11;; |
|
|
|
unity ) executable=unity;; |
|
|
|
xfce|xfce4 ) executable=startxfce4;; |
|
|
|
xmonad ) executable=xmonad;; |
|
|
|
*) executable=$1;; |
|
|
|
esac |
|
|
|
if command -v "$executable" |
|
|
|
# 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 |
|
|
|
found=1 |
|
|
|
exec "$executable" $parameters |
|
|
|
startSession "$sessions_dir" "$session_name" |
|
|
|
fi |
|
|
|
fi |
|
|
|
done |
|
|
|
} |
|
|
|
|
|
|
|
if [ -n "$1" ] |
|
|
|
then |
|
|
|
tryDM "$1" |
|
|
|
trySession "$1" |
|
|
|
fi |
|
|
|
tryDM i3 |
|
|
|
tryDM xfce4 |
|
|
|
tryDM mate |
|
|
|
tryDM plasma |
|
|
|
tryDM gnome |
|
|
|
tryDM kde |
|
|
|
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 |