Files
omarchy/migrations/1767306902.sh
David Heinemeier Hansson 4a07b94cb6 Use theme config templates with singular color definition (#4053)
* Attempt to templaterize the theme specific files

* Cleanup

* Slim down

* Combine render into -set

* Pull out the dynamic template rendering again, but simpler

* Fix vars

* Variables are lowercase

* Better presentation

* Fix missing colors

* Provide stripped values too

* Fix colors for regular hex format

* Bring back explicit btop themes

They're too involved to derive from a basic color set

* Make an atomic swap of the theme directories

* No longer used by walker to cancel

* Explain why

* Remove redundant const

* Consistent const naming

* No longe have $THEMES_DIR

* Correct the blue

* Set opencode colors too

* Fix colors for readability

* Move the templates together with the others in default

* Split user themes and default themes

* Fix paths

* Look for both user themes and default themes

Plus speed things up

* Migrate to the new setup where default themes live inside omarchy

* Explicitly store the name of the current theme

* Cleanup

* No longer need omarchy-theme-next since themes are now fully rendered, not symlinks

* Get current theme name from the new theme.name file

* Look for user background images in dedicated directory

* Need yq for toml

* Need yq to parse colors.toml

* Look for backgrounds matching the new theme.name

We no longer have symlinks

* Migrate existing user backgrounds to the new proper location

* Install user backgrounds in the correct path

* Fix quoting

* Just rely on the system theme for opencode and get ready for USRSIG2 being available to live reload

* Fix template generation for rgb colors
2026-01-03 18:22:14 -08:00

63 lines
2.0 KiB
Bash

echo "Migrate to new theme setup"
omarchy-pkg-add yq
# Move user-added backgrounds from Omarchy theme folders to user config
OMARCHY_DIR="$HOME/.local/share/omarchy"
USER_BACKGROUNDS_DIR="$HOME/.config/omarchy/backgrounds"
if [[ -d "$OMARCHY_DIR/themes" ]]; then
cd "$OMARCHY_DIR"
# Get list of git-tracked background files (relative to omarchy dir)
mapfile -t TRACKED_BACKGROUNDS < <(git ls-files --cached 'themes/*/backgrounds/*' 2>/dev/null)
# Find all background files and check if they're untracked (user-added)
for theme_dir in themes/*/; do
theme_name=$(basename "$theme_dir")
backgrounds_dir="themes/$theme_name/backgrounds"
[[ -d "$backgrounds_dir" ]] || continue
for bg_file in "$backgrounds_dir"/*; do
[[ -f "$bg_file" ]] || continue
# Check if this file is tracked by git
is_tracked=false
for tracked in "${TRACKED_BACKGROUNDS[@]}"; do
if [[ "$tracked" == "$bg_file" ]]; then
is_tracked=true
break
fi
done
if [[ "$is_tracked" == "false" ]]; then
# This is a user-added background, move it to user config
user_theme_bg_dir="$USER_BACKGROUNDS_DIR/$theme_name"
mkdir -p "$user_theme_bg_dir"
mv "$bg_file" "$user_theme_bg_dir/"
echo "Moved user background: $bg_file -> $user_theme_bg_dir/"
fi
done
done
fi
THEMES_DIR="$HOME/.config/omarchy/themes"
CURRENT_THEME_LINK="$HOME/.config/omarchy/current/theme"
# Get current theme name from symlink before removing anything
CURRENT_THEME_NAME=""
if [[ -L $CURRENT_THEME_LINK ]]; then
CURRENT_THEME_NAME=$(basename "$(readlink "$CURRENT_THEME_LINK")")
elif [[ -f "$HOME/.config/omarchy/current/theme.name" ]]; then
CURRENT_THEME_NAME=$(cat "$HOME/.config/omarchy/current/theme.name")
fi
# Remove all symlinks from ~/.config/omarchy/themes
find "$THEMES_DIR" -mindepth 1 -maxdepth 1 -type l -delete
# Re-apply the current theme with the new system
if [[ -n $CURRENT_THEME_NAME ]]; then
omarchy-theme-set "$CURRENT_THEME_NAME"
fi