#!/usr/bin/env bash SCRIPTS=${SCRIPTS:-$HOME/.local/scripts} THIS_FILE=${BASH_SOURCE[0]} LOG_LABEL=$(basename $THIS_FILE) LOG_FILE=${LOG_FILE:-$LOG_LABEL.log} THIS=${THIS:-$LOG_LABEL} usage() { cat < FLAGS: -p | --previous: Switch to the previously active workspace. -t | --to : Workspace to switch to. -h | --help: Show this help page. EOF } log() { logging log --source "$THIS_FILE" "$@" } ################################################################################ # MAIN ################################################################################ # Setup logging file and label. source "$SCRIPTS/hypr/logging" setup-logging "$LOG_FILE" "$LOG_LABEL" target_workspace="" active_workspace=$(hyprctl activewindow -j | jq -r '.workspace.name') while [[ $# -gt 0 ]]; do if [[ $1 =~ ^-h ]] || [[ $1 =~ ^--help ]]; then usage && exit 0 elif [[ $1 =~ ^-t ]] || [[ $1 =~ ^--to ]]; then target_workspace=$1 elif [[ $1 =~ ^-p ]] || [[ $1 =~ ^--previous ]]; then target_workspace="previous" else target_workspace=$1 fi shift done # Read from stdin if no workspace was supplied. if [[ -z $target_workspace ]]; then read -p "Workspace: " target_workspace fi if [[ -z target_workspace ]]; then log --error "Must supply a workpsace to switch to." usage && exit 1 fi # If active window is on a special workspace, then toggle the special workspace off. if [[ $active_workspace =~ ^special ]]; then log "Toggling special workspace: '$active_workspace'" hyprctl dispatch togglespecialworkspace ${active_workspace#special:} >/dev/null 2>&1 # Only toggle the special workspace if trying to switch to previous and we're currently # on a special workspace. if [[ $target_workspace == "previous" ]]; then exit 0 fi fi log "Switching to workspace: $target_workspace" hyprctl dispatch workspace $target_workspace >/dev/null 2>&1