Adding stuff
This commit is contained in:
346
.local/bin/station-menu
Executable file
346
.local/bin/station-menu
Executable file
@@ -0,0 +1,346 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Launch the Station Menu or takes a parameter to jump straight to a submenu.
|
||||
|
||||
Set to true when going directly to a submenu, so we can exit directly
|
||||
BACK_TO_EXIT=false
|
||||
|
||||
back_to() {
|
||||
local parent_menu="$1"
|
||||
|
||||
if [[ $BACK_TO_EXIT == "true" ]]; then
|
||||
exit 0
|
||||
elif [[ -n $parent_menu ]]; then
|
||||
"$parent_menu"
|
||||
else
|
||||
show_main_menu
|
||||
fi
|
||||
}
|
||||
|
||||
toggle_existing_menu() {
|
||||
if pgrep -f "walker.*--dmenu" > /dev/null; then
|
||||
walker --close > /dev/null 2>&1
|
||||
exit 0
|
||||
fi
|
||||
}
|
||||
|
||||
menu() {
|
||||
local prompt="$1"
|
||||
local options="$2"
|
||||
local extra="$3"
|
||||
local preselect="$4"
|
||||
|
||||
read -r -a args <<<"$extra"
|
||||
|
||||
if [[ -n $preselect ]]; then
|
||||
local index
|
||||
index=$(echo -e "$options" | grep -nxF "$preselect" | cut -d: -f1)
|
||||
if [[ -n $index ]]; then
|
||||
args+=("-c" "$index")
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "$options" | station-launch-walker --dmenu --width 295 --minheight 1 --maxheight 630 -p "$prompt…" "${args[@]}" 2>/dev/null
|
||||
}
|
||||
|
||||
terminal() {
|
||||
xdg-terminal-exec --app-id=org.station.terminal "$@"
|
||||
}
|
||||
|
||||
present_terminal() {
|
||||
station-launch-floating-terminal-with-presentation $1
|
||||
}
|
||||
|
||||
open_in_editor() {
|
||||
notify-send "Editing config file" "$1"
|
||||
station-launch-editor "$1"
|
||||
}
|
||||
|
||||
show_trigger_menu() {
|
||||
case $(menu "Trigger" " Capture\n Share\n Toggle\n Hardware") in
|
||||
*Capture*) show_capture_menu ;;
|
||||
*Share*) show_share_menu ;;
|
||||
*Toggle*) show_toggle_menu ;;
|
||||
*Hardware*) show_hardware_menu ;;
|
||||
*) show_main_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
show_capture_menu() {
|
||||
case $(menu "Capture" " Screenshot\n Screenrecord\n Color") in
|
||||
*Screenshot*) station-cmd-screenshot ;;
|
||||
*Screenrecord*) show_screenrecord_menu ;;
|
||||
*Color*) pkill hyprpicker || hyprpicker -a ;;
|
||||
*) back_to show_trigger_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
get_webcam_list() {
|
||||
v4l2-ctl --list-devices 2>/dev/null | while IFS= read -r line; do
|
||||
if [[ $line != $'\t'* && -n $line ]]; then
|
||||
local name="$line"
|
||||
IFS= read -r device || break
|
||||
device=$(echo "$device" | tr -d '\t' | head -1)
|
||||
[[ -n $device ]] && echo "$device $name"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
show_webcam_select_menu() {
|
||||
local devices=$(get_webcam_list)
|
||||
local count=$(echo "$devices" | grep -c . 2>/dev/null || echo 0)
|
||||
|
||||
if [[ -z $devices ]] || ((count == 0)); then
|
||||
notify-send "No webcam devices found" -u critical -t 3000
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ((count == 1)); then
|
||||
echo "$devices" | awk '{print $1}'
|
||||
else
|
||||
menu "Select Webcam" "$devices" | awk '{print $1}'
|
||||
fi
|
||||
}
|
||||
|
||||
show_screenrecord_menu() {
|
||||
station-cmd-screenrecord --stop-recording && exit 0
|
||||
|
||||
case $(menu "Screenrecord" " With no audio\n With desktop audio\n With desktop + microphone audio\n With desktop + microphone audio + webcam") in
|
||||
*"With no audio") station-cmd-screenrecord ;;
|
||||
*"With desktop audio") station-cmd-screenrecord --with-desktop-audio ;;
|
||||
*"With desktop + microphone audio") station-cmd-screenrecord --with-desktop-audio --with-microphone-audio ;;
|
||||
*"With desktop + microphone audio + webcam")
|
||||
local device=$(show_webcam_select_menu) || {
|
||||
back_to show_capture_menu
|
||||
return
|
||||
}
|
||||
station-cmd-screenrecord --with-desktop-audio --with-microphone-audio --with-webcam --webcam-device="$device"
|
||||
;;
|
||||
*) back_to show_capture_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# show_share_menu() {
|
||||
# case $(menu "Share" " Clipboard\n File \n Folder") in
|
||||
# *Clipboard*) station-cmd-share clipboard ;;
|
||||
# *File*) terminal bash -c "station-cmd-share file" ;;
|
||||
# *Folder*) terminal bash -c "station-cmd-share folder" ;;
|
||||
# *) back_to show_trigger_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_toggle_menu() {
|
||||
# case $(menu "Toggle" " Screensaver\n Nightlight\n Idle Lock\n Top Bar\n Workspace Layout\n Window Gaps\n 1-Window Ratio\n Display Scaling") in
|
||||
#
|
||||
# *Screensaver*) station-toggle-screensaver ;;
|
||||
# *Nightlight*) station-toggle-nightlight ;;
|
||||
# *Idle*) station-toggle-idle ;;
|
||||
# *Bar*) station-toggle-waybar ;;
|
||||
# *Layout*) station-hyprland-workspace-layout-toggle ;;
|
||||
# *Ratio*) station-hyprland-window-single-square-aspect-toggle ;;
|
||||
# *Gaps*) station-hyprland-window-gaps-toggle ;;
|
||||
# *Scaling*) station-hyprland-monitor-scaling-cycle ;;
|
||||
# *) back_to show_trigger_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_hardware_menu() {
|
||||
# case $(menu "Toggle" " Hybrid GPU") in
|
||||
# *"Hybrid GPU"*) present_terminal station-toggle-hybrid-gpu ;;
|
||||
# *) show_trigger_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_style_menu() {
|
||||
# case $(menu "Style" " Background\n Hyprland\n Screensaver") in
|
||||
# *Background*) show_background_menu ;;
|
||||
# *Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;;
|
||||
# *Screensaver*) open_in_editor ~/.config/station/branding/screensaver.txt ;;
|
||||
# *) show_main_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_background_menu() {
|
||||
# station-launch-walker -m menus:stationBackgroundSelector --width 800 --minheight 400
|
||||
# }
|
||||
#
|
||||
# show_setup_menu() {
|
||||
# local options=" Audio\n Wifi\n Bluetooth\n Power Profile\n System Sleep\n Monitors"
|
||||
# [[ -f ~/.config/hypr/bindings.conf ]] && options="$options\n Keybindings"
|
||||
# [[ -f ~/.config/hypr/input.conf ]] && options="$options\n Input"
|
||||
# options="$options\n DNS\n Security\n Config"
|
||||
#
|
||||
# case $(menu "Setup" "$options") in
|
||||
# *Audio*) station-launch-audio ;;
|
||||
# *Wifi*) station-launch-wifi ;;
|
||||
# *Bluetooth*) station-launch-bluetooth ;;
|
||||
# *Power*) show_setup_power_menu ;;
|
||||
# *System*) show_setup_system_menu ;;
|
||||
# *Monitors*) open_in_editor ~/.config/hypr/monitors.conf ;;
|
||||
# *Keybindings*) open_in_editor ~/.config/hypr/bindings.conf ;;
|
||||
# *Input*) open_in_editor ~/.config/hypr/input.conf ;;
|
||||
# *DNS*) present_terminal station-setup-dns ;;
|
||||
# *Security*) show_setup_security_menu ;;
|
||||
# *Config*) show_setup_config_menu ;;
|
||||
# *) show_main_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_setup_power_menu() {
|
||||
# profile=$(menu "Power Profile" "$(station-powerprofiles-list)" "" "$(powerprofilesctl get)")
|
||||
#
|
||||
# if [[ $profile == "CNCLD" || -z $profile ]]; then
|
||||
# back_to show_setup_menu
|
||||
# else
|
||||
# powerprofilesctl set "$profile"
|
||||
# fi
|
||||
# }
|
||||
#
|
||||
# show_setup_security_menu() {
|
||||
# case $(menu "Setup" " Fingerprint\n Fido2") in
|
||||
# *Fingerprint*) present_terminal station-setup-fingerprint ;;
|
||||
# *Fido2*) present_terminal station-setup-fido2 ;;
|
||||
# *) show_setup_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_setup_config_menu() {
|
||||
# case $(menu "Setup" " Defaults\n Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Swayosd\n Walker\n Waybar\n XCompose") in
|
||||
# *Defaults*) open_in_editor ~/.config/uwsm/default ;;
|
||||
# *Hyprland*) open_in_editor ~/.config/hypr/hyprland.conf ;;
|
||||
# *Hypridle*) open_in_editor ~/.config/hypr/hypridle.conf && station-restart-hypridle ;;
|
||||
# *Hyprlock*) open_in_editor ~/.config/hypr/hyprlock.conf ;;
|
||||
# *Hyprsunset*) open_in_editor ~/.config/hypr/hyprsunset.conf && station-restart-hyprsunset ;;
|
||||
# *Swayosd*) open_in_editor ~/.config/swayosd/config.toml && station-restart-swayosd ;;
|
||||
# *Walker*) open_in_editor ~/.config/walker/config.toml && station-restart-walker ;;
|
||||
# *Waybar*) open_in_editor ~/.config/waybar/config.jsonc && station-restart-waybar ;;
|
||||
# *XCompose*) open_in_editor ~/.config/xcompose && station-restart-xcompose ;;
|
||||
# *) show_setup_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_setup_system_menu() {
|
||||
# local options=""
|
||||
#
|
||||
# if [[ -f ~/.local/state/station/toggles/suspend-off ]]; then
|
||||
# options="$options Enable Suspend"
|
||||
# else
|
||||
# options="$options Disable Suspend"
|
||||
# fi
|
||||
#
|
||||
# if station-hibernation-available; then
|
||||
# options="$options\n Disable Hibernate"
|
||||
# else
|
||||
# options="$options\n Enable Hibernate"
|
||||
# fi
|
||||
#
|
||||
# case $(menu "System" "$options") in
|
||||
# *Suspend*) station-toggle-suspend ;;
|
||||
# *"Enable Hibernate"*) present_terminal station-hibernation-setup ;;
|
||||
# *"Disable Hibernate"*) present_terminal station-hibernation-remove ;;
|
||||
# *) show_setup_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_update_menu() {
|
||||
# case $(menu "Update" " Config\n Process\n Hardware\n Firmware\n Password\n Timezone\n Time") in
|
||||
# *Config*) show_update_config_menu ;;
|
||||
# *Process*) show_update_process_menu ;;
|
||||
# *Hardware*) show_update_hardware_menu ;;
|
||||
# *Firmware*) present_terminal station-update-firmware ;;
|
||||
# *Timezone*) present_terminal station-tz-select ;;
|
||||
# *Time*) present_terminal station-update-time ;;
|
||||
# *Password*) show_update_password_menu ;;
|
||||
# *) show_main_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_update_process_menu() {
|
||||
# case $(menu "Restart" " Hypridle\n Hyprsunset\n Swayosd\n Walker\n Waybar") in
|
||||
# *Hypridle*) station-restart-hypridle ;;
|
||||
# *Hyprsunset*) station-restart-hyprsunset ;;
|
||||
# *Swayosd*) station-restart-swayosd ;;
|
||||
# *Walker*) station-restart-walker ;;
|
||||
# *Waybar*) station-restart-waybar ;;
|
||||
# *) show_update_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_update_config_menu() {
|
||||
# case $(menu "Use default config" " Hyprland\n Hypridle\n Hyprlock\n Hyprsunset\n Plymouth\n Swayosd\n Tmux\n Walker\n Waybar") in
|
||||
# *Hyprland*) present_terminal station-refresh-hyprland ;;
|
||||
# *Hypridle*) present_terminal station-refresh-hypridle ;;
|
||||
# *Hyprlock*) present_terminal station-refresh-hyprlock ;;
|
||||
# *Hyprsunset*) present_terminal station-refresh-hyprsunset ;;
|
||||
# *Plymouth*) present_terminal station-refresh-plymouth ;;
|
||||
# *Swayosd*) present_terminal station-refresh-swayosd ;;
|
||||
# *Tmux*) present_terminal station-refresh-tmux ;;
|
||||
# *Walker*) present_terminal station-refresh-walker ;;
|
||||
# *Waybar*) present_terminal station-refresh-waybar ;;
|
||||
# *) show_update_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_update_hardware_menu() {
|
||||
# case $(menu "Restart" " Audio\n Wi-Fi\n Bluetooth") in
|
||||
# *Audio*) present_terminal station-restart-pipewire ;;
|
||||
# *Wi-Fi*) present_terminal station-restart-wifi ;;
|
||||
# *Bluetooth*) present_terminal station-restart-bluetooth ;;
|
||||
# *) show_update_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_update_password_menu() {
|
||||
# case $(menu "Update Password" " Drive Encryption\n User") in
|
||||
# *Drive*) present_terminal station-drive-set-password ;;
|
||||
# *User*) present_terminal passwd ;;
|
||||
# *) show_update_menu ;;
|
||||
# esac
|
||||
# }
|
||||
#
|
||||
# show_system_menu() {
|
||||
# local options=" Screensaver\n Lock\n Suspend"
|
||||
# station-hibernation-available && options="$options\n Hibernate"
|
||||
# options="$options\n Logout\n Restart\n Shutdown"
|
||||
#
|
||||
# case $(menu "System" "$options") in
|
||||
# *Screensaver*) station-launch-screensaver force ;;
|
||||
# *Lock*) station-lock-screen ;;
|
||||
# *Suspend*) systemctl suspend ;;
|
||||
# *Hibernate*) systemctl hibernate ;;
|
||||
# *Logout*) station-system-logout ;;
|
||||
# *Restart*) station-system-reboot ;;
|
||||
# *Shutdown*) station-system-shutdown ;;
|
||||
# *) back_to show_main_menu ;;
|
||||
# esac
|
||||
# }
|
||||
|
||||
show_main_menu() {
|
||||
go_to_menu "$(menu "Go" " Apps\n Trigger\n Setup\n Update\n About\n System")"
|
||||
}
|
||||
|
||||
go_to_menu() {
|
||||
case "${1,,}" in
|
||||
*apps*) walker -p "Launch…" ;;
|
||||
*trigger*) show_trigger_menu ;;
|
||||
# *toggle*) show_toggle_menu ;;
|
||||
# *share*) show_share_menu ;;
|
||||
# *background*) show_background_menu ;;
|
||||
# *capture*) show_capture_menu ;;
|
||||
# *theme*) show_theme_menu ;;
|
||||
# *screenrecord*) show_screenrecord_menu ;;
|
||||
# *setup*) show_setup_menu ;;
|
||||
# *power*) show_setup_power_menu ;;
|
||||
# *update*) show_update_menu ;;
|
||||
# *system*) show_system_menu ;;
|
||||
esac
|
||||
}
|
||||
|
||||
toggle_existing_menu
|
||||
|
||||
if [[ -n $1 ]]; then
|
||||
BACK_TO_EXIT=true
|
||||
go_to_menu "$1"
|
||||
else
|
||||
show_main_menu
|
||||
fi
|
||||
Reference in New Issue
Block a user