aboutsummaryrefslogtreecommitdiff
path: root/common/.profile
blob: 53703b7bea23aa79a9aa3d36ee0970b666e31596 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/bin/bash
# ======================================
# Session launcher
# ======================================

start_session() {
    # Clean environment
    unset DISPLAY XAUTHORITY DBUS_SESSION_BUS_ADDRESS

    # Priority-ordered list of sessions (WM/DE)
    sessions=(
        "Hyprland"
        "bspwm"
        "sway"
        "gnome-session"
        "startplasma-x11"
        "startxfce4"
        "openbox"
        "i3"
    )

    # Handle saved session
    if [ -f "$HOME/.session" ]; then
        chosen_session=$(<"$HOME/.session")
        rm -f "$HOME/.session"
    fi

    launch_session() {
        local s="$1"
        case "$s" in
            bspwm)
                export XDG_SESSION_TYPE="x11"
                exec startx /usr/bin/bspwm
                ;;
            Hyprland|sway)
                exec dbus-launch --sh-syntax --exit-with-session "$s" >/dev/null 2>&1
                ;;
            gnome-session|startplasma-x11|startxfce4|openbox|i3)
                exec "$s"
                ;;
            *)
                return 1
                ;;
        esac
    }

    # Try saved session first
    if [ -n "$chosen_session" ]; then
        if launch_session "$chosen_session"; then
            exit
        else
            echo "Saved session '$chosen_session' not found. Falling back..."
        fi
    fi

    # Try default sessions in priority
    for wm in "${sessions[@]}"; do
        if command -v "$wm" >/dev/null 2>&1; then
            echo "Starting session: $wm"
            launch_session "$wm"
            exit
        fi
    done

    # Fallback: Check for common display managers
    for dm in gdm lightdm sddm; do
        if command -v "$dm" >/dev/null 2>&1; then
            echo "Launching display manager: $dm"
            exec "$dm"
        fi
    done

    echo "No suitable window manager or display manager found."
    exit 1
}

# -------------------------
# Only run session loader when:
# - No DISPLAY (not inside an existing GUI)
# - On first VT (tty1)
# -------------------------
if [ -z "$DISPLAY" ] && [ -n "$XDG_VTNR" ] && [ "$XDG_VTNR" -eq 1 ]; then
    start_session
fi