Register generated VS Code theme extension
This commit is contained in:
@@ -5,6 +5,56 @@
|
|||||||
|
|
||||||
VS_CODE_THEME_DESCRIPTOR="$HOME/.config/omarchy/current/theme/vscode.json"
|
VS_CODE_THEME_DESCRIPTOR="$HOME/.config/omarchy/current/theme/vscode.json"
|
||||||
GENERATED_THEME="$HOME/.config/omarchy/current/theme/vscode-theme.json"
|
GENERATED_THEME="$HOME/.config/omarchy/current/theme/vscode-theme.json"
|
||||||
|
GENERATED_EXTENSION_NAME="omarchy-theme"
|
||||||
|
GENERATED_EXTENSION_ID="local.$GENERATED_EXTENSION_NAME"
|
||||||
|
GENERATED_EXTENSION_VERSION="1.0.0"
|
||||||
|
|
||||||
|
register_generated_extension() {
|
||||||
|
local ext_dir="$1"
|
||||||
|
local ext_base extensions_file obsolete_file relative tmp
|
||||||
|
|
||||||
|
ext_base=$(dirname "$ext_dir")
|
||||||
|
extensions_file="$ext_base/extensions.json"
|
||||||
|
obsolete_file="$ext_base/.obsolete"
|
||||||
|
relative=$(basename "$ext_dir")
|
||||||
|
|
||||||
|
if [[ -f $obsolete_file ]]; then
|
||||||
|
tmp=$(mktemp)
|
||||||
|
if jq --arg key "$GENERATED_EXTENSION_ID-$GENERATED_EXTENSION_VERSION" 'del(.[$key])' "$obsolete_file" >"$tmp"; then
|
||||||
|
mv "$tmp" "$obsolete_file"
|
||||||
|
[[ $(jq 'length' "$obsolete_file") == "0" ]] && rm -f "$obsolete_file"
|
||||||
|
else
|
||||||
|
rm -f "$tmp"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
[[ -f $extensions_file ]] || printf '[]\n' >"$extensions_file"
|
||||||
|
|
||||||
|
tmp=$(mktemp)
|
||||||
|
if jq \
|
||||||
|
--arg id "$GENERATED_EXTENSION_ID" \
|
||||||
|
--arg version "$GENERATED_EXTENSION_VERSION" \
|
||||||
|
--arg fs_path "$ext_dir" \
|
||||||
|
--arg external "file://$ext_dir" \
|
||||||
|
--arg relative "$relative" \
|
||||||
|
'map(select(.identifier.id != $id)) + [{
|
||||||
|
identifier: { id: $id },
|
||||||
|
version: $version,
|
||||||
|
location: {
|
||||||
|
"$mid": 1,
|
||||||
|
fsPath: $fs_path,
|
||||||
|
external: $external,
|
||||||
|
path: $fs_path,
|
||||||
|
scheme: "file"
|
||||||
|
},
|
||||||
|
relativeLocation: $relative
|
||||||
|
}]' \
|
||||||
|
"$extensions_file" >"$tmp"; then
|
||||||
|
mv "$tmp" "$extensions_file"
|
||||||
|
else
|
||||||
|
rm -f "$tmp"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# Install generated theme as a local extension for a given editor
|
# Install generated theme as a local extension for a given editor
|
||||||
install_generated_extension() {
|
install_generated_extension() {
|
||||||
@@ -19,15 +69,15 @@ install_generated_extension() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p "$ext_dir/themes"
|
mkdir -p "$ext_dir/themes"
|
||||||
cp "$GENERATED_THEME" "$ext_dir/themes/omarchy-color-theme.json"
|
ln -sfn "$GENERATED_THEME" "$ext_dir/themes/omarchy-color-theme.json"
|
||||||
|
|
||||||
cat > "$ext_dir/package.json" <<EOF
|
cat > "$ext_dir/package.json" <<EOF
|
||||||
{
|
{
|
||||||
"name": "omarchy-theme",
|
"name": "$GENERATED_EXTENSION_NAME",
|
||||||
"displayName": "Omarchy",
|
"displayName": "Omarchy",
|
||||||
"description": "Omarchy color theme",
|
"description": "Omarchy color theme",
|
||||||
"publisher": "local",
|
"publisher": "local",
|
||||||
"version": "1.0.0",
|
"version": "$GENERATED_EXTENSION_VERSION",
|
||||||
"engines": { "vscode": "^1.70.0" },
|
"engines": { "vscode": "^1.70.0" },
|
||||||
"categories": ["Themes"],
|
"categories": ["Themes"],
|
||||||
"contributes": {
|
"contributes": {
|
||||||
@@ -39,6 +89,8 @@ install_generated_extension() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
register_generated_extension "$ext_dir"
|
||||||
}
|
}
|
||||||
|
|
||||||
set_theme() {
|
set_theme() {
|
||||||
@@ -61,7 +113,7 @@ set_theme() {
|
|||||||
fi
|
fi
|
||||||
elif [[ -f "$GENERATED_THEME" ]]; then
|
elif [[ -f "$GENERATED_THEME" ]]; then
|
||||||
# VS Code only discovers local color themes through an extension package.
|
# VS Code only discovers local color themes through an extension package.
|
||||||
install_generated_extension "$ext_base/omarchy-theme"
|
install_generated_extension "$ext_base/$GENERATED_EXTENSION_NAME"
|
||||||
theme_name="Omarchy"
|
theme_name="Omarchy"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -6,38 +6,38 @@ return {
|
|||||||
priority = 1000,
|
priority = 1000,
|
||||||
opts = {
|
opts = {
|
||||||
colors = {
|
colors = {
|
||||||
bg = "{{ bg }}",
|
bg = "{{ bg }}",
|
||||||
dark_bg = "{{ dark_bg }}",
|
dark_bg = "{{ dark_bg }}",
|
||||||
darker_bg = "{{ darker_bg }}",
|
darker_bg = "{{ darker_bg }}",
|
||||||
lighter_bg = "{{ lighter_bg }}",
|
lighter_bg = "{{ lighter_bg }}",
|
||||||
|
|
||||||
fg = "{{ fg }}",
|
fg = "{{ fg }}",
|
||||||
dark_fg = "{{ dark_fg }}",
|
dark_fg = "{{ dark_fg }}",
|
||||||
light_fg = "{{ light_fg }}",
|
light_fg = "{{ light_fg }}",
|
||||||
bright_fg = "{{ bright_fg }}",
|
bright_fg = "{{ bright_fg }}",
|
||||||
muted = "{{ muted }}",
|
muted = "{{ muted }}",
|
||||||
|
|
||||||
red = "{{ red }}",
|
red = "{{ red }}",
|
||||||
yellow = "{{ yellow }}",
|
yellow = "{{ yellow }}",
|
||||||
orange = "{{ orange }}",
|
orange = "{{ orange }}",
|
||||||
green = "{{ green }}",
|
green = "{{ green }}",
|
||||||
cyan = "{{ cyan }}",
|
cyan = "{{ cyan }}",
|
||||||
blue = "{{ blue }}",
|
blue = "{{ blue }}",
|
||||||
purple = "{{ purple }}",
|
purple = "{{ purple }}",
|
||||||
brown = "{{ brown }}",
|
brown = "{{ brown }}",
|
||||||
|
|
||||||
bright_red = "{{ bright_red }}",
|
bright_red = "{{ bright_red }}",
|
||||||
bright_yellow = "{{ bright_yellow }}",
|
bright_yellow = "{{ bright_yellow }}",
|
||||||
bright_green = "{{ bright_green }}",
|
bright_green = "{{ bright_green }}",
|
||||||
bright_cyan = "{{ bright_cyan }}",
|
bright_cyan = "{{ bright_cyan }}",
|
||||||
bright_blue = "{{ bright_blue }}",
|
bright_blue = "{{ bright_blue }}",
|
||||||
bright_purple = "{{ bright_purple }}",
|
bright_purple = "{{ bright_purple }}",
|
||||||
|
|
||||||
accent = "{{ accent }}",
|
accent = "{{ accent }}",
|
||||||
cursor = "{{ cursor }}",
|
cursor = "{{ cursor }}",
|
||||||
foreground = "{{ foreground }}",
|
foreground = "{{ foreground }}",
|
||||||
background = "{{ background }}",
|
background = "{{ background }}",
|
||||||
selection = "{{ selection }}",
|
selection = "{{ selection }}",
|
||||||
selection_foreground = "{{ selection_foreground }}",
|
selection_foreground = "{{ selection_foreground }}",
|
||||||
selection_background = "{{ selection_background }}",
|
selection_background = "{{ selection_background }}",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -365,9 +365,18 @@ exit 1
|
|||||||
EOF
|
EOF
|
||||||
chmod +x "$FAKE_BIN/omarchy-toggle-enabled"
|
chmod +x "$FAKE_BIN/omarchy-toggle-enabled"
|
||||||
|
|
||||||
|
mkdir -p "$PI_TMPDIR/.vscode/extensions"
|
||||||
|
echo '{"local.omarchy-theme-1.0.0":true}' >"$PI_TMPDIR/.vscode/extensions/.obsolete"
|
||||||
PATH="$FAKE_BIN:$ROOT/bin:$PATH" HOME="$PI_TMPDIR" "$ROOT/bin/omarchy-theme-set-vscode"
|
PATH="$FAKE_BIN:$ROOT/bin:$PATH" HOME="$PI_TMPDIR" "$ROOT/bin/omarchy-theme-set-vscode"
|
||||||
jq -e '.contributes.themes[0].uiTheme == "vs"' "$PI_TMPDIR/.vscode/extensions/omarchy-theme/package.json" >/dev/null || fail "vscode generated light theme uses VS Code light uiTheme"
|
jq -e '.contributes.themes[0].uiTheme == "vs"' "$PI_TMPDIR/.vscode/extensions/omarchy-theme/package.json" >/dev/null || fail "vscode generated light theme uses VS Code light uiTheme"
|
||||||
pass "vscode generated light theme uses VS Code light uiTheme"
|
pass "vscode generated light theme uses VS Code light uiTheme"
|
||||||
|
[[ -L $PI_TMPDIR/.vscode/extensions/omarchy-theme/themes/omarchy-color-theme.json ]] || fail "vscode generated theme references current theme file"
|
||||||
|
[[ $(readlink "$PI_TMPDIR/.vscode/extensions/omarchy-theme/themes/omarchy-color-theme.json") == "$PI_TMPDIR/.config/omarchy/current/theme/vscode-theme.json" ]] || fail "vscode generated theme references current theme file"
|
||||||
|
pass "vscode generated theme references current theme file"
|
||||||
|
[[ ! -f $PI_TMPDIR/.vscode/extensions/.obsolete ]] || fail "vscode generated theme clears obsolete extension marker"
|
||||||
|
pass "vscode generated theme clears obsolete extension marker"
|
||||||
|
jq -e '.[] | select(.identifier.id == "local.omarchy-theme" and .relativeLocation == "omarchy-theme")' "$PI_TMPDIR/.vscode/extensions/extensions.json" >/dev/null || fail "vscode generated theme registers local extension"
|
||||||
|
pass "vscode generated theme registers local extension"
|
||||||
|
|
||||||
for binary in \
|
for binary in \
|
||||||
omarchy-update \
|
omarchy-update \
|
||||||
|
|||||||
Reference in New Issue
Block a user