Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions bin/omarchy-theme-set
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,29 @@ NEXT_THEME_PATH="$HOME/.config/omarchy/current/next-theme"
USER_THEMES_PATH="$HOME/.config/omarchy/themes"
OMARCHY_THEMES_PATH="$OMARCHY_PATH/themes"

capture_workspace_layouts() {
hyprctl workspaces -j 2>/dev/null | jq -r '.[] | select(.tiledLayout != null and .tiledLayout != "") | [.id, .tiledLayout] | @tsv' 2>/dev/null
}

restore_workspace_layouts() {
local workspace_layouts="$1"
local workspace_id workspace_layout

while IFS=$'\t' read -r workspace_id workspace_layout; do
[[ -n $workspace_id && -n $workspace_layout ]] || continue
hyprctl keyword workspace "$workspace_id, layout:$workspace_layout" >/dev/null 2>&1
done <<<"$workspace_layouts"
}

THEME_NAME=$(echo "$1" | sed -E 's/<[^>]+>//g' | tr '[:upper:]' '[:lower:]' | tr ' ' '-')

if [[ ! -d $OMARCHY_THEMES_PATH/$THEME_NAME ]] && [[ ! -d $USER_THEMES_PATH/$THEME_NAME ]]; then
echo "Theme '$THEME_NAME' does not exist"
exit 1
fi

workspace_layouts=$(capture_workspace_layouts)

# Setup clean next theme directory (for atomic theme config swapping)
rm -rf "$NEXT_THEME_PATH"
mkdir -p "$NEXT_THEME_PATH"
Expand Down Expand Up @@ -45,6 +61,7 @@ fi
omarchy-restart-swayosd
omarchy-restart-terminal
omarchy-restart-hyprctl
restore_workspace_layouts "$workspace_layouts"
omarchy-restart-btop
omarchy-restart-opencode
omarchy-restart-mako
Expand Down