mirror of
https://github.com/theupriser/steamify-cachyos.git
synced 2026-10-03 17:41:58 +02:00
- Menu detects what is on and applies only the changes: SteamOS conversion, SteamOS theme, Steam Deck/Machine icons, single user mode, and Steam Machine support (only on Fremont hardware) - Everything is reversible: KDE settings go through an undo journal (lib/state.sh), system files are restored from their backups - Steam Machine support: LED driver, udev rule giving the user the LED files, steamos-manager for Steam's hardware settings; OpenRGB dropped - Edit Plasma files only while plasmashell is stopped so it can't overwrite them - README and AGENTS.md describe the menu, the component model and the test environment
78 lines
3.2 KiB
Bash
78 lines
3.2 KiB
Bash
#!/bin/bash
|
|
# "Return to Gaming Mode" desktop shortcut and the sudoers rule it needs.
|
|
# Sourced by setup-gamescope-boot.sh; not meant to be run on its own.
|
|
|
|
create_desktop_shortcut() {
|
|
# Determine the home directory of the target user
|
|
local user_home
|
|
user_home="$(getent passwd "$TARGET_USER" | cut -d: -f6)"
|
|
|
|
# Locate the correct Desktop directory
|
|
local desktop_dir
|
|
if [[ -f "$user_home/.config/user-dirs.dirs" ]]; then
|
|
desktop_dir=$(grep '^XDG_DESKTOP_DIR=' "$user_home/.config/user-dirs.dirs" | cut -d '"' -f 2)
|
|
desktop_dir="${desktop_dir/\$HOME/$user_home}"
|
|
fi
|
|
desktop_dir="${desktop_dir:-$user_home/Desktop}"
|
|
|
|
mkdir -p "$desktop_dir"
|
|
|
|
# On SDDM, steamos-session-select logging out is enough: Relogin=true
|
|
# logs straight back in to the newly selected session, like SteamOS.
|
|
# plasma-login-manager needs the sync bridge run and a restart, which
|
|
# the shortcut can't sudo for interactively (Terminal=false), so it gets
|
|
# a password-less rule scoped to exactly those two commands.
|
|
local exec_line="steamos-session-select gamescope"
|
|
if [[ "$LOGIN_MANAGER" == "plasmalogin" ]]; then
|
|
exec_line="sh -c 'steamos-session-select gamescope && sudo -n /usr/bin/systemctl start sync-steamos-session.service && sudo -n /usr/bin/systemctl restart plasmalogin'"
|
|
local sudoers_tmp
|
|
sudoers_tmp="$(mktemp)"
|
|
cat > "$sudoers_tmp" << EOF
|
|
$TARGET_USER ALL=(root) NOPASSWD: /usr/bin/systemctl start sync-steamos-session.service, /usr/bin/systemctl restart plasmalogin
|
|
EOF
|
|
if sudo visudo -cf "$sudoers_tmp" >/dev/null; then
|
|
sudo install -m 0440 -o root -g root "$sudoers_tmp" /etc/sudoers.d/gamescope-session-switch
|
|
ok "Installed /etc/sudoers.d/gamescope-session-switch for the shortcut."
|
|
else
|
|
warn "Generated sudoers rule failed validation; the shortcut will not be able to restart plasmalogin."
|
|
fi
|
|
rm -f "$sudoers_tmp"
|
|
else
|
|
sudo rm -f /etc/sudoers.d/gamescope-session-switch
|
|
fi
|
|
|
|
# SteamOS itself uses Valve's "gaming-return" icon (Steam logo with a
|
|
# return arrow; the Deck-style arrow is only used on Steam Deck
|
|
# hardware). It comes with the Vapor theme; without it, use Steam's icon.
|
|
local shortcut_icon="steam"
|
|
[[ -f "$user_home/.local/share/icons/hicolor/scalable/actions/gaming-return.svg" ]] &&
|
|
shortcut_icon="gaming-return"
|
|
|
|
# 2. Generate the .desktop shortcut with instant session switcher strings
|
|
local shortcut_path="$desktop_dir/Return to Gaming Mode.desktop"
|
|
info "Creating 'Return to Gaming Mode' desktop shortcut at: $shortcut_path"
|
|
|
|
cat << EOF > "$shortcut_path"
|
|
[Desktop Entry]
|
|
Name=Return to Gaming Mode
|
|
Comment=Switch session back to Gamescope
|
|
Exec=$exec_line
|
|
Icon=$shortcut_icon
|
|
Terminal=false
|
|
Type=Application
|
|
Categories=System;
|
|
EOF
|
|
|
|
# Fix permissions for the target user and KDE Plasma desktop ecosystem
|
|
chmod +x "$shortcut_path"
|
|
|
|
ok "Desktop shortcut created successfully."
|
|
}
|
|
|
|
remove_desktop_shortcut() {
|
|
local desktop_dir
|
|
desktop_dir="$(xdg-user-dir DESKTOP 2>/dev/null || echo "$HOME/Desktop")"
|
|
rm -f "$desktop_dir/Return to Gaming Mode.desktop"
|
|
sudo rm -f /etc/sudoers.d/gamescope-session-switch
|
|
}
|