The installer asks for the language before the keyboard, and Setup > Language (omarchy language en|zh) switches it later. Under zh_CN the menu reads its labels from omarchy-menu.zh-cn.jsonc, the shell from I18nZh.js through I18n.tr, and notifications are worded by their sender through omarchy-text, which reads the same table. User text is never translated.
70 lines
2.7 KiB
Bash
Executable File
70 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Cycle the current active workspace through the dwindle, scrolling, and floating layouts
|
|
# omarchy:args=[back]
|
|
|
|
DIRECTION=${1:-next}
|
|
if [[ $DIRECTION != "next" && $DIRECTION != "back" ]]; then
|
|
echo "Usage: omarchy-hyprland-workspace-layout-toggle [back]" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ACTIVE_WORKSPACE=$(hyprctl activeworkspace -j | jq -r '.id')
|
|
# Named workspaces report a negative id, and Hyprland reads a leading "-" as a
|
|
# selector relative to the current workspace: targeting one lands on workspace 1
|
|
# and reconfigures that instead.
|
|
[[ $ACTIVE_WORKSPACE =~ ^[0-9]+$ ]] || exit 1
|
|
MODES_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/omarchy/workspace-layouts"
|
|
MODE_FILE="$MODES_DIR/$ACTIVE_WORKSPACE.lua"
|
|
|
|
CURRENT_MODE=$(omarchy-hyprland-workspace-layout-current)
|
|
|
|
if [[ $DIRECTION == "back" ]]; then
|
|
case "$CURRENT_MODE" in
|
|
dwindle) NEW_MODE=floating ;;
|
|
floating) NEW_MODE=scrolling ;;
|
|
*) NEW_MODE=dwindle ;;
|
|
esac
|
|
else
|
|
case "$CURRENT_MODE" in
|
|
dwindle) NEW_MODE=scrolling ;;
|
|
scrolling) NEW_MODE=floating ;;
|
|
*) NEW_MODE=dwindle ;;
|
|
esac
|
|
fi
|
|
|
|
APPLY="o.workspace_mode({ workspace = \"$ACTIVE_WORKSPACE\", mode = \"$NEW_MODE\" })"
|
|
|
|
# Saving a mode that did not apply would leave the file naming one layout while
|
|
# the screen shows another, and restore it at the next login.
|
|
APPLIED=0
|
|
if hyprctl eval "$APPLY" >/dev/null 2>&1; then
|
|
APPLIED=1
|
|
fi
|
|
|
|
if (( ! APPLIED )); then
|
|
omarchy-notification-send -g "$(omarchy-text "Workspace layout needs a Hyprland reload")"
|
|
elif [[ $NEW_MODE == "$(omarchy-hyprland-workspace-layout-default)" ]] && rm -f "$MODE_FILE"; then
|
|
# Cycled onto the default, a workspace goes back to following it, so a later
|
|
# change of the default reaches it too.
|
|
omarchy-notification-send -g "$(omarchy-text "Workspace layout set to %1" "$NEW_MODE")"
|
|
elif mkdir -p "$MODES_DIR" && printf '%s\n' "$APPLY" >"$MODE_FILE"; then
|
|
omarchy-notification-send -g "$(omarchy-text "Workspace layout set to %1" "$NEW_MODE")"
|
|
else
|
|
# The mode is on screen but nothing will bring it back, and the next press
|
|
# reads the mode from this file, so say so rather than counting it as set.
|
|
omarchy-notification-send -g "$(omarchy-text "Workspace layout set to %1 but could not be saved" "$NEW_MODE")"
|
|
fi
|
|
|
|
# The bar shows the focused workspace's layout.
|
|
if (( APPLIED )); then
|
|
omarchy-shell -q omarchy.workspaces refresh
|
|
fi
|
|
|
|
# Titlebars and shadows are set up while the config loads, and only
|
|
# when something floats, so the first floating workspace needs a reload to get
|
|
# them. Once the titlebar plugin is in, later ones have them already.
|
|
if (( APPLIED )) && [[ $NEW_MODE == "floating" ]] && ! hyprctl plugin list -j 2>/dev/null | jq -e 'any(.[]?; .name == "hyprbars")' >/dev/null 2>&1; then
|
|
hyprctl reload >/dev/null
|
|
fi
|