mirror of
https://github.com/LukeHagar/omarchy.git
synced 2025-12-06 04:20:23 +00:00
48 lines
1.8 KiB
Bash
Executable File
48 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Note: We cannot use `jq` to update settings.json because it’s JSONC (allows comments),
|
||
# which jq doesn’t support.
|
||
|
||
# Parameters: EDITOR_CMD SETTINGS_PATH SKIP_FLAG EDITOR_NAME
|
||
EDITOR_CMD="${1:-code}"
|
||
SETTINGS_PATH="${2:-$HOME/.config/Code/User/settings.json}"
|
||
SKIP_FLAG="${3:-$HOME/.local/state/omarchy/toggles/skip-vscode-theme-changes}"
|
||
EDITOR_NAME="${4:-VS Code}"
|
||
|
||
VS_CODE_THEME="$HOME/.config/omarchy/current/theme/vscode.json"
|
||
|
||
if omarchy-cmd-present "$EDITOR_CMD" && [[ ! -f "$SKIP_FLAG" ]]; then
|
||
if [[ -f "$VS_CODE_THEME" ]]; then
|
||
theme_name=$(jq -r '.name' "$VS_CODE_THEME")
|
||
extension=$(jq -r '.extension' "$VS_CODE_THEME")
|
||
|
||
# Install $EDITOR_NAME theme extension
|
||
if [[ -n "$extension" ]] && ! "$EDITOR_CMD" --list-extensions | grep -Fxq "$extension"; then
|
||
"$EDITOR_CMD" --install-extension "$extension" >/dev/null
|
||
fi
|
||
|
||
# Create config file if there isn't already one
|
||
mkdir -p "$(dirname "$SETTINGS_PATH")"
|
||
if [[ ! -f "$SETTINGS_PATH" ]]; then
|
||
printf '{\n}\n' >"$SETTINGS_PATH"
|
||
fi
|
||
|
||
# Create a `workbench.colorTheme` entry in settings.
|
||
if ! grep -q '"workbench.colorTheme"' "$SETTINGS_PATH"; then
|
||
# Insert `"workbench.colorTheme": "",` immediately after the first `{`
|
||
# Use sed's first-match range (0,/{/) to only replace the first `{`
|
||
sed -i --follow-symlinks -E '0,/\{/{s/\{/{\ "workbench.colorTheme": "",/}' "$SETTINGS_PATH"
|
||
fi
|
||
|
||
# Update theme
|
||
sed -i --follow-symlinks -E \
|
||
"s/(\"workbench.colorTheme\"[[:space:]]*:[[:space:]]*\")[^\"]*(\")/\1$theme_name\2/" \
|
||
"$SETTINGS_PATH"
|
||
else
|
||
# Remove theme from settings.json when the theme doesn't have $EDITOR_NAME support
|
||
if [[ -f "$SETTINGS_PATH" ]]; then
|
||
sed -i --follow-symlinks -E 's/\"workbench\.colorTheme\"[[:space:]]*:[^,}]*,?//' "$SETTINGS_PATH"
|
||
fi
|
||
fi
|
||
fi
|