diff --git a/bin/omarchy-menu b/bin/omarchy-menu index e600644e..fc6bd63f 100755 --- a/bin/omarchy-menu +++ b/bin/omarchy-menu @@ -204,8 +204,9 @@ show_hardware_menu() { } show_style_menu() { - case $(menu "Style" "󰸌 Theme\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in + case $(menu "Style" "󰸌 Theme\n󰟵 Unlock\n Font\n Background\n Hyprland\n󱄄 Screensaver\n About") in *Theme*) show_theme_menu ;; + *Unlock*) omarchy-launch-walker -m menus:omarchyunlocks --width 800 --minheight 400 ;; *Font*) show_font_menu ;; *Background*) show_background_menu ;; *Hyprland*) open_in_editor ~/.config/hypr/looknfeel.conf ;; diff --git a/bin/omarchy-plymouth-preview b/bin/omarchy-plymouth-preview new file mode 100755 index 00000000..0b83a956 --- /dev/null +++ b/bin/omarchy-plymouth-preview @@ -0,0 +1,72 @@ +#!/bin/bash + +# Render a Plymouth login-screen preview PNG by compositing the staged omarchy +# theme assets (recolored with the given text color) onto the background. + +if [[ $# -ne 4 ]]; then + echo "Usage: omarchy-plymouth-preview " >&2 + exit 1 +fi + +bg_hex="${1#\#}" +text_hex="${2#\#}" +logo_path="$3" +output_path="$4" + +if ! [[ $bg_hex =~ ^[0-9a-fA-F]{6}$ ]]; then + echo "Invalid background color: $1 (expected #RRGGBB)" >&2 + exit 1 +fi + +if ! [[ $text_hex =~ ^[0-9a-fA-F]{6}$ ]]; then + echo "Invalid text color: $2 (expected #RRGGBB)" >&2 + exit 1 +fi + +if [[ ! -f $logo_path ]]; then + echo "Logo file not found: $logo_path" >&2 + exit 1 +fi + +staging_dir=$(mktemp -d) +trap 'rm -rf "$staging_dir"' EXIT + +find ~/.local/share/omarchy/default/plymouth -maxdepth 1 -type f -exec cp -t "$staging_dir/" {} + +cp "$logo_path" "$staging_dir/logo.png" + +for asset in bullet.png entry.png lock.png; do + magick "$staging_dir/$asset" -channel RGB +level-colors "#$text_hex","#$text_hex" "$staging_dir/$asset" +done + +canvas_w=1920 +canvas_h=1080 + +logo_w=$(magick identify -format '%w' "$staging_dir/logo.png") +logo_h=$(magick identify -format '%h' "$staging_dir/logo.png") +entry_w=$(magick identify -format '%w' "$staging_dir/entry.png") +entry_h=$(magick identify -format '%h' "$staging_dir/entry.png") +lock_h=$(awk "BEGIN{print int($entry_h * 0.8)}") +lock_w=$(awk "BEGIN{print int(84 * $lock_h / 96)}") + +logo_x=$(( (canvas_w - logo_w) / 2 )) +logo_y=$(( (canvas_h - logo_h) / 2 )) +entry_x=$(( (canvas_w - entry_w) / 2 )) +entry_y=$(( logo_y + logo_h + 40 )) +lock_x=$(( entry_x - lock_w - 15 )) +lock_y=$(( entry_y + entry_h/2 - lock_h/2 )) +bullet_y=$(( entry_y + entry_h/2 - 4 )) + +bullet_args=() +for i in 0 1 2 3; do + bx=$(( entry_x + 20 + i * 12 )) + bullet_args+=( '(' "$staging_dir/bullet.png" -resize 7x7 ')' -geometry +${bx}+${bullet_y} -composite ) +done + +magick -size ${canvas_w}x${canvas_h} "xc:#$bg_hex" \ + "$staging_dir/logo.png" -geometry +${logo_x}+${logo_y} -composite \ + "$staging_dir/entry.png" -geometry +${entry_x}+${entry_y} -composite \ + \( "$staging_dir/lock.png" -resize ${lock_w}x${lock_h} \) -geometry +${lock_x}+${lock_y} -composite \ + "${bullet_args[@]}" \ + "$output_path" + +imv -f "$output_path" diff --git a/bin/omarchy-plymouth-reset b/bin/omarchy-plymouth-reset new file mode 100755 index 00000000..f765d5f1 --- /dev/null +++ b/bin/omarchy-plymouth-reset @@ -0,0 +1,15 @@ +#!/bin/bash + +# Restore the Plymouth boot theme to the omarchy default — copies the shipped +# assets into /usr/share without recoloring, then rebuilds the initramfs. + +theme_dir="/usr/share/plymouth/themes/omarchy" + +sudo find ~/.local/share/omarchy/default/plymouth -maxdepth 1 -type f -exec cp -t "$theme_dir/" {} + +sudo plymouth-set-default-theme omarchy + +if omarchy-cmd-present limine-mkinitcpio; then + sudo limine-mkinitcpio +else + sudo mkinitcpio -P +fi diff --git a/bin/omarchy-plymouth-set b/bin/omarchy-plymouth-set new file mode 100755 index 00000000..a65648d1 --- /dev/null +++ b/bin/omarchy-plymouth-set @@ -0,0 +1,58 @@ +#!/bin/bash + +# Configure the Plymouth boot theme with a custom background color, text color, and logo. +# Stages the change in a temp dir, then commits the staged files to /usr/share and +# rebuilds the initramfs. + +if [[ $# -ne 3 ]]; then + echo "Usage: omarchy-plymouth-set " >&2 + exit 1 +fi + +bg_hex="${1#\#}" +text_hex="${2#\#}" +logo_path="$3" + +if ! [[ $bg_hex =~ ^[0-9a-fA-F]{6}$ ]]; then + echo "Invalid background color: $1 (expected #RRGGBB)" >&2 + exit 1 +fi + +if ! [[ $text_hex =~ ^[0-9a-fA-F]{6}$ ]]; then + echo "Invalid text color: $2 (expected #RRGGBB)" >&2 + exit 1 +fi + +if [[ ! -f $logo_path ]]; then + echo "Logo file not found: $logo_path" >&2 + exit 1 +fi + +bg_r=$(awk -v n=$((16#${bg_hex:0:2})) 'BEGIN{printf "%.3f", n/255}') +bg_g=$(awk -v n=$((16#${bg_hex:2:2})) 'BEGIN{printf "%.3f", n/255}') +bg_b=$(awk -v n=$((16#${bg_hex:4:2})) 'BEGIN{printf "%.3f", n/255}') + +theme_dir="/usr/share/plymouth/themes/omarchy" +staging_dir=$(mktemp -d) +trap 'rm -rf "$staging_dir"' EXIT + +find ~/.local/share/omarchy/default/plymouth -maxdepth 1 -type f -exec cp -t "$staging_dir/" {} + +cp "$logo_path" "$staging_dir/logo.png" + +sed -i \ + -e "s/^Window.SetBackgroundTopColor.*/Window.SetBackgroundTopColor($bg_r, $bg_g, $bg_b);/" \ + -e "s/^Window.SetBackgroundBottomColor.*/Window.SetBackgroundBottomColor($bg_r, $bg_g, $bg_b);/" \ + "$staging_dir/omarchy.script" + +for asset in bullet.png entry.png lock.png progress_bar.png; do + magick "$staging_dir/$asset" -channel RGB +level-colors "#$text_hex","#$text_hex" "$staging_dir/$asset" +done + +sudo cp -a "$staging_dir/." "$theme_dir/" +sudo plymouth-set-default-theme omarchy + +if omarchy-cmd-present limine-mkinitcpio; then + sudo limine-mkinitcpio +else + sudo mkinitcpio -P +fi diff --git a/bin/omarchy-plymouth-set-by-theme b/bin/omarchy-plymouth-set-by-theme new file mode 100755 index 00000000..6f1f7fb0 --- /dev/null +++ b/bin/omarchy-plymouth-set-by-theme @@ -0,0 +1,22 @@ +#!/bin/bash + +# Resolve a theme by name and apply its unlock.png + colors.toml as the +# Plymouth boot screen via omarchy-plymouth-set. + +if [[ $# -ne 1 ]]; then + echo "Usage: omarchy-plymouth-set-by-theme " >&2 + exit 1 +fi + +theme=$1 + +if [[ -d ~/.config/omarchy/themes/$theme ]]; then + theme_dir=~/.config/omarchy/themes/$theme +else + theme_dir="$OMARCHY_PATH/themes/$theme" +fi + +bg=$(awk -F'"' '/^background/{print $2}' "$theme_dir/colors.toml") +text=$(awk -F'"' '/^foreground/{print $2}' "$theme_dir/colors.toml") + +exec omarchy-plymouth-set "$bg" "$text" "$theme_dir/unlock.png" diff --git a/bin/omarchy-theme-set-plymouth b/bin/omarchy-theme-set-plymouth deleted file mode 100755 index 11f4a446..00000000 --- a/bin/omarchy-theme-set-plymouth +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash - -# Configure the Plymouth boot theme with a custom background color, accent color, and logo. -# Stages the change in a temp dir, previews it as a composited image, then optionally -# commits the staged files to /usr/share and rebuilds the initramfs. - -if [[ $# -ne 3 ]]; then - echo "Usage: omarchy-theme-set-plymouth " >&2 - exit 1 -fi - -bg_hex="${1#\#}" -accent_hex="${2#\#}" -logo_path="$3" - -if ! [[ $bg_hex =~ ^[0-9a-fA-F]{6}$ ]]; then - echo "Invalid background color: $1 (expected #RRGGBB)" >&2 - exit 1 -fi - -if ! [[ $accent_hex =~ ^[0-9a-fA-F]{6}$ ]]; then - echo "Invalid accent color: $2 (expected #RRGGBB)" >&2 - exit 1 -fi - -if [[ ! -f $logo_path ]]; then - echo "Logo file not found: $logo_path" >&2 - exit 1 -fi - -bg_r=$(awk -v n=$((16#${bg_hex:0:2})) 'BEGIN{printf "%.3f", n/255}') -bg_g=$(awk -v n=$((16#${bg_hex:2:2})) 'BEGIN{printf "%.3f", n/255}') -bg_b=$(awk -v n=$((16#${bg_hex:4:2})) 'BEGIN{printf "%.3f", n/255}') - -theme_dir="/usr/share/plymouth/themes/omarchy" -staging_dir=$(mktemp -d) -preview_png=$(mktemp --suffix=.png) -trap 'rm -rf "$staging_dir" "$preview_png"' EXIT - -cp ~/.local/share/omarchy/default/plymouth/* "$staging_dir/" -cp "$logo_path" "$staging_dir/logo.png" - -sed -i \ - -e "s/^Window.SetBackgroundTopColor.*/Window.SetBackgroundTopColor($bg_r, $bg_g, $bg_b);/" \ - -e "s/^Window.SetBackgroundBottomColor.*/Window.SetBackgroundBottomColor($bg_r, $bg_g, $bg_b);/" \ - "$staging_dir/omarchy.script" - -for asset in bullet.png entry.png lock.png progress_bar.png; do - magick "$staging_dir/$asset" -channel RGB +level-colors "#$accent_hex","#$accent_hex" "$staging_dir/$asset" -done - -if gum confirm "Preview new login screen?"; then - canvas_w=1920 - canvas_h=1080 - - logo_w=$(magick identify -format '%w' "$staging_dir/logo.png") - logo_h=$(magick identify -format '%h' "$staging_dir/logo.png") - entry_w=$(magick identify -format '%w' "$staging_dir/entry.png") - entry_h=$(magick identify -format '%h' "$staging_dir/entry.png") - lock_h=$(awk "BEGIN{print int($entry_h * 0.8)}") - lock_w=$(awk "BEGIN{print int(84 * $lock_h / 96)}") - - logo_x=$(( (canvas_w - logo_w) / 2 )) - logo_y=$(( (canvas_h - logo_h) / 2 )) - entry_x=$(( (canvas_w - entry_w) / 2 )) - entry_y=$(( logo_y + logo_h + 40 )) - lock_x=$(( entry_x - lock_w - 15 )) - lock_y=$(( entry_y + entry_h/2 - lock_h/2 )) - bullet_y=$(( entry_y + entry_h/2 - 4 )) - - bullet_args=() - for i in 0 1 2 3; do - bx=$(( entry_x + 20 + i * 12 )) - bullet_args+=( '(' "$staging_dir/bullet.png" -resize 7x7 ')' -geometry +${bx}+${bullet_y} -composite ) - done - - magick -size ${canvas_w}x${canvas_h} "xc:#$bg_hex" \ - "$staging_dir/logo.png" -geometry +${logo_x}+${logo_y} -composite \ - "$staging_dir/entry.png" -geometry +${entry_x}+${entry_y} -composite \ - \( "$staging_dir/lock.png" -resize ${lock_w}x${lock_h} \) -geometry +${lock_x}+${lock_y} -composite \ - "${bullet_args[@]}" \ - "$preview_png" - - imv -f "$preview_png" -fi - -if gum confirm "Apply new login screen?"; then - sudo cp -a "$staging_dir/." "$theme_dir/" - sudo plymouth-set-default-theme omarchy - - if omarchy-cmd-present limine-mkinitcpio; then - sudo limine-mkinitcpio - else - sudo mkinitcpio -P - fi -fi diff --git a/default/elephant/omarchy_unlocks.lua b/default/elephant/omarchy_unlocks.lua new file mode 100644 index 00000000..8aacaccd --- /dev/null +++ b/default/elephant/omarchy_unlocks.lua @@ -0,0 +1,92 @@ +-- +-- Dynamic Omarchy Unlocks Menu for Elephant/Walker +-- +-- A "Default" entry restores the omarchy-shipped Plymouth via +-- omarchy-plymouth-reset. After that, every theme that has a preview-unlock.png +-- appears as a customised unlock; picking one runs omarchy-plymouth-set-by-theme +-- . Both run in a floating terminal so sudo can prompt. +-- +Name = "omarchyunlocks" +NamePretty = "Omarchy Unlocks" +HideFromProviderlist = true +FixedOrder = true + +local function file_exists(path) + local f = io.open(path, "r") + if f then + f:close() + return true + end + return false +end + +local function shell_escape(s) + return "'" .. s:gsub("'", "'\\''") .. "'" +end + +function GetEntries() + local entries = {} + local home = os.getenv("HOME") + local user_themes_dir = home .. "/.config/omarchy/themes" + local omarchy_path = os.getenv("OMARCHY_PATH") or "" + local default_themes_dir = omarchy_path .. "/themes" + local default_preview = omarchy_path .. "/default/plymouth/preview-unlock.png" + + local seen_themes = {} + + local function process_themes_from_dir(themes_dir) + local handle = io.popen("find -L '" .. themes_dir .. "' -mindepth 1 -maxdepth 1 -type d 2>/dev/null") + if not handle then + return + end + + for theme_path in handle:lines() do + local theme_name = theme_path:match(".*/(.+)$") + + if theme_name and not seen_themes[theme_name] then + seen_themes[theme_name] = true + + local preview_path = theme_path .. "/preview-unlock.png" + + if file_exists(preview_path) then + local display_name = theme_name:gsub("_", " "):gsub("%-", " ") + display_name = display_name:gsub("(%a)([%w_']*)", function(first, rest) + return first:upper() .. rest:lower() + end) + display_name = display_name .. " " + + table.insert(entries, { + Text = display_name, + Preview = preview_path, + PreviewType = "file", + Actions = { + activate = "omarchy-launch-floating-terminal-with-presentation " + .. shell_escape("omarchy-plymouth-set-by-theme " .. shell_escape(theme_name)), + }, + }) + end + end + end + + handle:close() + end + + process_themes_from_dir(user_themes_dir) + process_themes_from_dir(default_themes_dir) + + -- Default entry last — restores the shipped Plymouth. + local default_entry = { + Text = "Default ", + Actions = { + activate = "omarchy-launch-floating-terminal-with-presentation " + .. shell_escape("omarchy-plymouth-reset"), + }, + } + if file_exists(default_preview) then + default_entry.Preview = default_preview + default_entry.PreviewType = "file" + end + table.insert(entries, default_entry) + + return entries +end diff --git a/default/plymouth/preview-unlock.png b/default/plymouth/preview-unlock.png new file mode 100644 index 00000000..78c3e9c5 Binary files /dev/null and b/default/plymouth/preview-unlock.png differ diff --git a/install/config/walker-elephant.sh b/install/config/walker-elephant.sh index ad071dc9..a06f8c39 100644 --- a/install/config/walker-elephant.sh +++ b/install/config/walker-elephant.sh @@ -28,3 +28,4 @@ EOF mkdir -p ~/.config/elephant/menus ln -snf $OMARCHY_PATH/default/elephant/omarchy_themes.lua ~/.config/elephant/menus/omarchy_themes.lua ln -snf $OMARCHY_PATH/default/elephant/omarchy_background_selector.lua ~/.config/elephant/menus/omarchy_background_selector.lua +ln -snf $OMARCHY_PATH/default/elephant/omarchy_unlocks.lua ~/.config/elephant/menus/omarchy_unlocks.lua diff --git a/migrations/1777382905.sh b/migrations/1777382905.sh new file mode 100644 index 00000000..f524574f --- /dev/null +++ b/migrations/1777382905.sh @@ -0,0 +1,5 @@ +echo "Use interactive unlock (Plymouth) selector menu" + +mkdir -p ~/.config/elephant/menus +ln -snf $OMARCHY_PATH/default/elephant/omarchy_unlocks.lua ~/.config/elephant/menus/omarchy_unlocks.lua +omarchy-restart-walker diff --git a/themes/catppuccin-latte/preview-unlock.png b/themes/catppuccin-latte/preview-unlock.png new file mode 100644 index 00000000..a10534cc Binary files /dev/null and b/themes/catppuccin-latte/preview-unlock.png differ diff --git a/themes/catppuccin-latte/unlock.png b/themes/catppuccin-latte/unlock.png new file mode 100644 index 00000000..b209e93b Binary files /dev/null and b/themes/catppuccin-latte/unlock.png differ diff --git a/themes/catppuccin/preview-unlock.png b/themes/catppuccin/preview-unlock.png new file mode 100644 index 00000000..69974204 Binary files /dev/null and b/themes/catppuccin/preview-unlock.png differ diff --git a/themes/catppuccin/unlock.png b/themes/catppuccin/unlock.png new file mode 100644 index 00000000..14168e17 Binary files /dev/null and b/themes/catppuccin/unlock.png differ diff --git a/themes/ethereal/preview-unlock.png b/themes/ethereal/preview-unlock.png new file mode 100644 index 00000000..7061587c Binary files /dev/null and b/themes/ethereal/preview-unlock.png differ diff --git a/themes/ethereal/unlock.png b/themes/ethereal/unlock.png new file mode 100644 index 00000000..136b6d59 Binary files /dev/null and b/themes/ethereal/unlock.png differ diff --git a/themes/everforest/preview-unlock.png b/themes/everforest/preview-unlock.png new file mode 100644 index 00000000..be099bc1 Binary files /dev/null and b/themes/everforest/preview-unlock.png differ diff --git a/themes/everforest/unlock.png b/themes/everforest/unlock.png new file mode 100644 index 00000000..40e2cd80 Binary files /dev/null and b/themes/everforest/unlock.png differ diff --git a/themes/flexoki-light/preview-unlock.png b/themes/flexoki-light/preview-unlock.png new file mode 100644 index 00000000..024241b2 Binary files /dev/null and b/themes/flexoki-light/preview-unlock.png differ diff --git a/themes/flexoki-light/unlock.png b/themes/flexoki-light/unlock.png new file mode 100644 index 00000000..f160bb55 Binary files /dev/null and b/themes/flexoki-light/unlock.png differ diff --git a/themes/gruvbox/preview-unlock.png b/themes/gruvbox/preview-unlock.png new file mode 100644 index 00000000..9b09d6cd Binary files /dev/null and b/themes/gruvbox/preview-unlock.png differ diff --git a/themes/gruvbox/unlock.png b/themes/gruvbox/unlock.png new file mode 100644 index 00000000..777a7fb8 Binary files /dev/null and b/themes/gruvbox/unlock.png differ diff --git a/themes/hackerman/preview-unlock.png b/themes/hackerman/preview-unlock.png new file mode 100644 index 00000000..7d42ff6e Binary files /dev/null and b/themes/hackerman/preview-unlock.png differ diff --git a/themes/hackerman/unlock.png b/themes/hackerman/unlock.png new file mode 100644 index 00000000..80793337 Binary files /dev/null and b/themes/hackerman/unlock.png differ diff --git a/themes/kanagawa/preview-unlock.png b/themes/kanagawa/preview-unlock.png new file mode 100644 index 00000000..cef402b7 Binary files /dev/null and b/themes/kanagawa/preview-unlock.png differ diff --git a/themes/kanagawa/unlock.png b/themes/kanagawa/unlock.png new file mode 100644 index 00000000..a83180f7 Binary files /dev/null and b/themes/kanagawa/unlock.png differ diff --git a/themes/lumon/preview-unlock.png b/themes/lumon/preview-unlock.png new file mode 100644 index 00000000..a2f9e581 Binary files /dev/null and b/themes/lumon/preview-unlock.png differ diff --git a/themes/lumon/unlock.png b/themes/lumon/unlock.png new file mode 100644 index 00000000..18c566bb Binary files /dev/null and b/themes/lumon/unlock.png differ diff --git a/themes/matte-black/preview-unlock.png b/themes/matte-black/preview-unlock.png new file mode 100644 index 00000000..e23b4665 Binary files /dev/null and b/themes/matte-black/preview-unlock.png differ diff --git a/themes/matte-black/unlock.png b/themes/matte-black/unlock.png new file mode 100644 index 00000000..1a60e709 Binary files /dev/null and b/themes/matte-black/unlock.png differ diff --git a/themes/miasma/preview-unlock.png b/themes/miasma/preview-unlock.png new file mode 100644 index 00000000..d3d0254e Binary files /dev/null and b/themes/miasma/preview-unlock.png differ diff --git a/themes/miasma/unlock.png b/themes/miasma/unlock.png new file mode 100644 index 00000000..5d07e9be Binary files /dev/null and b/themes/miasma/unlock.png differ diff --git a/themes/nord/preview-unlock.png b/themes/nord/preview-unlock.png new file mode 100644 index 00000000..d002326f Binary files /dev/null and b/themes/nord/preview-unlock.png differ diff --git a/themes/nord/unlock.png b/themes/nord/unlock.png new file mode 100644 index 00000000..e6b204be Binary files /dev/null and b/themes/nord/unlock.png differ diff --git a/themes/osaka-jade/preview-unlock.png b/themes/osaka-jade/preview-unlock.png new file mode 100644 index 00000000..8db51932 Binary files /dev/null and b/themes/osaka-jade/preview-unlock.png differ diff --git a/themes/osaka-jade/unlock.png b/themes/osaka-jade/unlock.png new file mode 100644 index 00000000..ca4ac8c4 Binary files /dev/null and b/themes/osaka-jade/unlock.png differ diff --git a/themes/retro-82/preview-unlock.png b/themes/retro-82/preview-unlock.png new file mode 100644 index 00000000..1df397a2 Binary files /dev/null and b/themes/retro-82/preview-unlock.png differ diff --git a/themes/retro-82/unlock.png b/themes/retro-82/unlock.png new file mode 100644 index 00000000..b7216ca1 Binary files /dev/null and b/themes/retro-82/unlock.png differ diff --git a/themes/ristretto/preview-unlock.png b/themes/ristretto/preview-unlock.png new file mode 100644 index 00000000..ec51c946 Binary files /dev/null and b/themes/ristretto/preview-unlock.png differ diff --git a/themes/ristretto/unlock.png b/themes/ristretto/unlock.png new file mode 100644 index 00000000..f865bc5a Binary files /dev/null and b/themes/ristretto/unlock.png differ diff --git a/themes/rose-pine/preview-unlock.png b/themes/rose-pine/preview-unlock.png new file mode 100644 index 00000000..d087e423 Binary files /dev/null and b/themes/rose-pine/preview-unlock.png differ diff --git a/themes/rose-pine/unlock.png b/themes/rose-pine/unlock.png new file mode 100644 index 00000000..892ea41e Binary files /dev/null and b/themes/rose-pine/unlock.png differ diff --git a/themes/tokyo-night/preview-unlock.png b/themes/tokyo-night/preview-unlock.png new file mode 100644 index 00000000..bb4897a7 Binary files /dev/null and b/themes/tokyo-night/preview-unlock.png differ diff --git a/themes/tokyo-night/unlock.png b/themes/tokyo-night/unlock.png new file mode 100644 index 00000000..f5544419 Binary files /dev/null and b/themes/tokyo-night/unlock.png differ diff --git a/themes/vantablack/preview-unlock.png b/themes/vantablack/preview-unlock.png new file mode 100644 index 00000000..b2cd593c Binary files /dev/null and b/themes/vantablack/preview-unlock.png differ diff --git a/themes/vantablack/unlock.png b/themes/vantablack/unlock.png new file mode 100644 index 00000000..87d2cecb Binary files /dev/null and b/themes/vantablack/unlock.png differ diff --git a/themes/white/preview-unlock.png b/themes/white/preview-unlock.png new file mode 100644 index 00000000..71bce653 Binary files /dev/null and b/themes/white/preview-unlock.png differ diff --git a/themes/white/unlock.png b/themes/white/unlock.png new file mode 100644 index 00000000..87d2cecb Binary files /dev/null and b/themes/white/unlock.png differ