#!/usr/bin/env bash

export XDG_CURRENT_DESKTOP=river
export XDG_SESSION_DESKTOP="${XDG_SESSION_DESKTOP:-river}"
export XDG_SESSION_TYPE=wayland
VARIABLES="DESKTOP_SESSION XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE"
VARIABLES="${VARIABLES} DISPLAY WAYLAND_DISPLAY"
SESSION_TARGET="river-session.target"
SESSION_SHUTDOWN_TARGET="river-session-shutdown.target"
SESSION_XDG_AUTOSTART_TARGET="river-xdg-autostart.target"
SNI_CHECK="/usr/share/tileos/scripts/wait-sni-ready"

if hash dbus-update-activation-environment 2>/dev/null; then
    # shellcheck disable=SC2086
    dbus-update-activation-environment --systemd ${VARIABLES:- --all}
fi

# reset failed state of all user units
systemctl --user reset-failed

# shellcheck disable=SC2086
systemctl --user import-environment $VARIABLES
systemctl --user start "$SESSION_TARGET"

# declare cleanup handler and run it on init termination via kill, Ctrl-C or 'riverctl exit'
session_cleanup () {
    # stop the session target and unset the variables
    systemctl --user start --job-mode=replace-irreversibly "$SESSION_SHUTDOWN_TARGET"
    if [ -n "$VARIABLES" ]; then
        # shellcheck disable=SC2086
        systemctl --user unset-environment $VARIABLES
    fi
}
trap session_cleanup EXIT INT TERM

# Wait for StatusNotifierWatcher is available and start XDG Autostart target
"$SNI_CHECK" && systemctl --user start "$SESSION_XDG_AUTOSTART_TARGET"

# Polkit agent
riverctl spawn "/usr/bin/mate-polkit"

# Wallpaper
riverctl spawn "$HOME"/.azotebg

# Include keybindings
riverctl spawn "$HOME"/.config/river/keybindings.sh

# Keybindings help overlay
riverctl spawn /usr/share/tileos/scripts/help.sh & disown

# Clipboard daemon
pkill -U $USER -x wl-paste
wl-paste --watch cliphist store & disown
wl-paste --watch pkill -U $USER -x -RTMIN+9 waybar & disown

# Playerctl daemon
pkill -U $USER -x playerctl
playerctl -a metadata --format \'{{status}} {{title}}\' --follow | while read line; do pkill -U $USER -x -RTMIN+5 waybar; done & disown

# Run nwg-drawer as a daemon
pkill -U $USER -x nwg-drawer
nwg-drawer -r & disown

# Start PCmanFM-Qt as a daemon
pkill -U $USER -x pcmanfm-qt
pcmanfm-qt -d & disown

# Start swayosd daemon
pkill -U $USER -x swayosd-server
swayosd-server & disown

# Screenshot notification
riverctl spawn /usr/share/tileos/scripts/screenshot-notify.sh & disown

# Set background and border color
riverctl background-color 0x002b36
riverctl border-color-focused 0x8aadf4
riverctl border-color-unfocused 0xa5adcb
riverctl border-width 2

# Window rules

# Make all views with an app-id that starts with "floating_shell" start floating.
riverctl rule-add -app-id "floating_shell" float
# Set floating view for some apps
riverctl rule-add -app-id "engrampa" float
riverctl rule-add -app-id "calamares" float
riverctl rule-add -app-id "nwg-look" float
riverctl rule-add -app-id "qt5ct" float
riverctl rule-add -app-id "qt6ct" float
riverctl rule-add -app-id "pavucontrol" float
riverctl rule-add -app-id "wdisplays" float
riverctl rule-add -title "Picture-in-Picture" float
riverctl rule-add -title "Firefox — Sharing Indicator" float

# Set the default layout generator to be rivertile and start it.
# River will send the process group of the init executable SIGTERM on exit.
riverctl default-layout rivertile
rivertile -view-padding 6 -outer-padding 6
