#!/usr/bin/env bash set -e set -o nounset set -o pipefail THIS_FILE=${BASH_SOURCE[0]} THIS=$(basename $THIS_FILE) LOG_LABEL=$(basename $THIS_FILE) SCRIPTS=${SCRIPTS:-$HOME/.local/scripts} LOG_FILE=${LOG_FILE:-"/tmp/$LOG_LABEL.log"} usage() { cat < FLAGS: -h | --help: Show this page. COMMANDS: close: Close window(s). focus: Focuses a window, handling special workspaces properly. launch: Launches an interactive picker in a new terminal. picker: Window picker that prompts for an action to perform on the window. toggle-floating: Toggles floating property of a window. Run "$THIS --help" for more information on a command. EOF } window_class="com.ghostty.$THIS" window_padding_x="10" log() { logging log --source "$THIS_FILE" "$@" } launch_usage() { cat < FLAGS: -h | --help: Show this page. EOF } # Launch in a new terminal window. launch() { if [[ $@ =~ ^-h ]] || [[ $@ =~ ^--help ]]; then launch_usage && exit 0 fi log "Launching terminal." ghostty --class="$window_class" --window-padding-x="$window_padding_x" \ --keybind="ctrl+c=quit" \ -e "${BASH_SOURCE[0]}" "$@" } show_picker() { log "Showing picker..." THIS="$THIS picker" "$SCRIPTS/hypr/utils/windows/windowctl-picker" "$@" return $? } ################################################## # MAIN ################################################## # Setup logging file and label. source "$SCRIPTS/hypr/logging" setup-logging "$LOG_LABEL" while [[ $# -gt 0 ]]; do if [[ $1 == "close" ]]; then shift THIS="$THIS close" "$SCRIPTS/hypr/utils/windows/close-windows" "$@" exit $? elif [[ $1 == "focus" ]]; then shift THIS="$THIS focus" "$SCRIPTS/hypr/utils/windows/focus-window" "$@" exit $? elif [[ $1 == "launch" ]]; then shift launch picker "$@" && exit 0 elif [[ $1 == "picker" ]]; then shift show_picker "$@" exit $? elif [[ $1 == "toggle-floating" ]]; then shift THIS="$THIS toggle-floating" "$SCRIPTS/hypr/utils/windows/window-toggle-floating" "$@" exit $? elif [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then usage && exit 0 else log --error "Unhandled arg: $1" exit 1 fi shift done # If we've reached here then no commands were passed / handled. usage && exit 1