From ed804a5c3ca9fbda28b36c030acebd1bbea41265 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:09:42 +1100 Subject: scheme: refactor schemes Schemes can have multiple flavours, and each flavour can have a light/dark mode --- .gitignore | 2 +- completions/caelestia.fish | 17 ++++++- data/schemes/catppuccin/frappe/dark.txt | 29 ++++++++++++ data/schemes/catppuccin/latte/light.txt | 29 ++++++++++++ data/schemes/catppuccin/macchiato/dark.txt | 29 ++++++++++++ data/schemes/catppuccin/mocha/dark.txt | 29 ++++++++++++ data/schemes/frappe.txt | 29 ------------ data/schemes/latte.txt | 29 ------------ data/schemes/macchiato.txt | 29 ------------ data/schemes/mocha.txt | 29 ------------ data/schemes/onedark.txt | 29 ------------ data/schemes/onedark/dark.txt | 29 ++++++++++++ scheme/main.fish | 74 ++++++++++++++++++++++++------ wallpaper.fish | 9 ++-- 14 files changed, 226 insertions(+), 166 deletions(-) create mode 100644 data/schemes/catppuccin/frappe/dark.txt create mode 100644 data/schemes/catppuccin/latte/light.txt create mode 100644 data/schemes/catppuccin/macchiato/dark.txt create mode 100644 data/schemes/catppuccin/mocha/dark.txt delete mode 100644 data/schemes/frappe.txt delete mode 100644 data/schemes/latte.txt delete mode 100644 data/schemes/macchiato.txt delete mode 100644 data/schemes/mocha.txt delete mode 100644 data/schemes/onedark.txt create mode 100644 data/schemes/onedark/dark.txt diff --git a/.gitignore b/.gitignore index 16a1db5..8c7f4ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -/data/schemes/dynamic.txt +/data/schemes/dynamic/ diff --git a/completions/caelestia.fish b/completions/caelestia.fish index 2eac75c..b2a2916 100644 --- a/completions/caelestia.fish +++ b/completions/caelestia.fish @@ -51,8 +51,23 @@ set -l commands workspace workspacegroup movetoworkspace movetoworkspacegroup complete -c caelestia -n "$seen workspace-action && not $seen $commands" -a "$commands" # Scheme -set -l commands dynamic mocha macchiato frappe latte +set -q XDG_DATA_HOME && set -l data_dir $XDG_DATA_HOME || set -l data_dir $HOME/.local/share +set -l scheme_dir $data_dir/caelestia/scripts/data/schemes +set -l commands (basename -a (find $scheme_dir/ -mindepth 1 -maxdepth 1 -type d)) complete -c caelestia -n "$seen scheme && not $seen $commands" -a "$commands" +for scheme in $commands + set -l flavours (basename -a (find $scheme_dir/$scheme/ -mindepth 1 -maxdepth 1 -type d) 2> /dev/null) + set -l modes (basename -s .txt (find $scheme_dir/$scheme/ -mindepth 1 -maxdepth 1 -type f) 2> /dev/null) + if test -n "$modes" + complete -c caelestia -n "$seen scheme && $seen $scheme && not $seen $modes" -a "$modes" + else + complete -c caelestia -n "$seen scheme && $seen $scheme && not $seen $flavours" -a "$flavours" + for flavour in $flavours + set -l modes (basename -s .txt (find $scheme_dir/$scheme/$flavour/ -mindepth 1 -maxdepth 1 -type f)) + complete -c caelestia -n "$seen scheme && $seen $scheme && $seen $flavour && not $seen $modes" -a "$modes" + end + end +end # Record set -l not_seen "$seen record && not $has_opt -s h help" diff --git a/data/schemes/catppuccin/frappe/dark.txt b/data/schemes/catppuccin/frappe/dark.txt new file mode 100644 index 0000000..b572562 --- /dev/null +++ b/data/schemes/catppuccin/frappe/dark.txt @@ -0,0 +1,29 @@ +rosewater f2d5cf +flamingo eebebe +pink f4b8e4 +mauve ca9ee6 +red e78284 +maroon ea999c +peach ef9f76 +yellow e5c890 +green a6d189 +teal 81c8be +sky 99d1db +sapphire 85c1dc +blue 8caaee +lavender babbf1 +text c6d0f5 +subtext1 b5bfe2 +subtext0 a5adce +overlay2 949cbb +overlay1 838ba7 +overlay0 737994 +surface2 626880 +surface1 51576d +surface0 414559 +base 303446 +mantle 292c3c +crust 232634 +success a6d189 +error e78284 +accent 99d1db \ No newline at end of file diff --git a/data/schemes/catppuccin/latte/light.txt b/data/schemes/catppuccin/latte/light.txt new file mode 100644 index 0000000..ec3b601 --- /dev/null +++ b/data/schemes/catppuccin/latte/light.txt @@ -0,0 +1,29 @@ +rosewater dc8a78 +flamingo dd7878 +pink ea76cb +mauve 8839ef +red d20f39 +maroon e64553 +peach fe640b +yellow df8e1d +green 40a02b +teal 179299 +sky 04a5e5 +sapphire 209fb5 +blue 1e66f5 +lavender 7287fd +text 4c4f69 +subtext1 5c5f77 +subtext0 6c6f85 +overlay2 7c7f93 +overlay1 8c8fa1 +overlay0 9ca0b0 +surface2 acb0be +surface1 bcc0cc +surface0 ccd0da +base eff1f5 +mantle e6e9ef +crust dce0e8 +success 40a02b +error d20f39 +accent 1e66f5 \ No newline at end of file diff --git a/data/schemes/catppuccin/macchiato/dark.txt b/data/schemes/catppuccin/macchiato/dark.txt new file mode 100644 index 0000000..ad234a2 --- /dev/null +++ b/data/schemes/catppuccin/macchiato/dark.txt @@ -0,0 +1,29 @@ +rosewater f4dbd6 +flamingo f0c6c6 +pink f5bde6 +mauve c6a0f6 +red ed8796 +maroon ee99a0 +peach f5a97f +yellow eed49f +green a6da95 +teal 8bd5ca +sky 91d7e3 +sapphire 7dc4e4 +blue 8aadf4 +lavender b7bdf8 +text cad3f5 +subtext1 b8c0e0 +subtext0 a5adcb +overlay2 939ab7 +overlay1 8087a2 +overlay0 6e738d +surface2 5b6078 +surface1 494d64 +surface0 363a4f +base 24273a +mantle 1e2030 +crust 181926 +success a6da95 +error ed8796 +accent b7bdf8 \ No newline at end of file diff --git a/data/schemes/catppuccin/mocha/dark.txt b/data/schemes/catppuccin/mocha/dark.txt new file mode 100644 index 0000000..77e96eb --- /dev/null +++ b/data/schemes/catppuccin/mocha/dark.txt @@ -0,0 +1,29 @@ +rosewater f5e0dc +flamingo f2cdcd +pink f5c2e7 +mauve cba6f7 +red f38ba8 +maroon eba0ac +peach fab387 +yellow f9e2af +green a6e3a1 +teal 94e2d5 +sky 89dceb +sapphire 74c7ec +blue 89b4fa +lavender b4befe +text cdd6f4 +subtext1 bac2de +subtext0 a6adc8 +overlay2 9399b2 +overlay1 7f849c +overlay0 6c7086 +surface2 585b70 +surface1 45475a +surface0 313244 +base 1e1e2e +mantle 181825 +crust 11111b +success a6e3a1 +error f38ba8 +accent cba6f7 \ No newline at end of file diff --git a/data/schemes/frappe.txt b/data/schemes/frappe.txt deleted file mode 100644 index b572562..0000000 --- a/data/schemes/frappe.txt +++ /dev/null @@ -1,29 +0,0 @@ -rosewater f2d5cf -flamingo eebebe -pink f4b8e4 -mauve ca9ee6 -red e78284 -maroon ea999c -peach ef9f76 -yellow e5c890 -green a6d189 -teal 81c8be -sky 99d1db -sapphire 85c1dc -blue 8caaee -lavender babbf1 -text c6d0f5 -subtext1 b5bfe2 -subtext0 a5adce -overlay2 949cbb -overlay1 838ba7 -overlay0 737994 -surface2 626880 -surface1 51576d -surface0 414559 -base 303446 -mantle 292c3c -crust 232634 -success a6d189 -error e78284 -accent 99d1db \ No newline at end of file diff --git a/data/schemes/latte.txt b/data/schemes/latte.txt deleted file mode 100644 index ec3b601..0000000 --- a/data/schemes/latte.txt +++ /dev/null @@ -1,29 +0,0 @@ -rosewater dc8a78 -flamingo dd7878 -pink ea76cb -mauve 8839ef -red d20f39 -maroon e64553 -peach fe640b -yellow df8e1d -green 40a02b -teal 179299 -sky 04a5e5 -sapphire 209fb5 -blue 1e66f5 -lavender 7287fd -text 4c4f69 -subtext1 5c5f77 -subtext0 6c6f85 -overlay2 7c7f93 -overlay1 8c8fa1 -overlay0 9ca0b0 -surface2 acb0be -surface1 bcc0cc -surface0 ccd0da -base eff1f5 -mantle e6e9ef -crust dce0e8 -success 40a02b -error d20f39 -accent 1e66f5 \ No newline at end of file diff --git a/data/schemes/macchiato.txt b/data/schemes/macchiato.txt deleted file mode 100644 index ad234a2..0000000 --- a/data/schemes/macchiato.txt +++ /dev/null @@ -1,29 +0,0 @@ -rosewater f4dbd6 -flamingo f0c6c6 -pink f5bde6 -mauve c6a0f6 -red ed8796 -maroon ee99a0 -peach f5a97f -yellow eed49f -green a6da95 -teal 8bd5ca -sky 91d7e3 -sapphire 7dc4e4 -blue 8aadf4 -lavender b7bdf8 -text cad3f5 -subtext1 b8c0e0 -subtext0 a5adcb -overlay2 939ab7 -overlay1 8087a2 -overlay0 6e738d -surface2 5b6078 -surface1 494d64 -surface0 363a4f -base 24273a -mantle 1e2030 -crust 181926 -success a6da95 -error ed8796 -accent b7bdf8 \ No newline at end of file diff --git a/data/schemes/mocha.txt b/data/schemes/mocha.txt deleted file mode 100644 index 77e96eb..0000000 --- a/data/schemes/mocha.txt +++ /dev/null @@ -1,29 +0,0 @@ -rosewater f5e0dc -flamingo f2cdcd -pink f5c2e7 -mauve cba6f7 -red f38ba8 -maroon eba0ac -peach fab387 -yellow f9e2af -green a6e3a1 -teal 94e2d5 -sky 89dceb -sapphire 74c7ec -blue 89b4fa -lavender b4befe -text cdd6f4 -subtext1 bac2de -subtext0 a6adc8 -overlay2 9399b2 -overlay1 7f849c -overlay0 6c7086 -surface2 585b70 -surface1 45475a -surface0 313244 -base 1e1e2e -mantle 181825 -crust 11111b -success a6e3a1 -error f38ba8 -accent cba6f7 \ No newline at end of file diff --git a/data/schemes/onedark.txt b/data/schemes/onedark.txt deleted file mode 100644 index 6485f5e..0000000 --- a/data/schemes/onedark.txt +++ /dev/null @@ -1,29 +0,0 @@ -rosewater edcbc5 -flamingo d3a4a4 -pink d792c6 -mauve c678dd -red be5046 -maroon e06c75 -peach d19a66 -yellow e5c07b -green 98c379 -teal 56b6c2 -sky 90ccd7 -sapphire 389dcc -blue 61afef -lavender 8e98d9 -text abb2bf -subtext1 95a0b5 -subtext0 838b9c -overlay2 767f8f -overlay1 666e7c -overlay0 5c6370 -surface2 4b5263 -surface1 3c414f -surface0 30343e -base 282c34 -mantle 21242b -crust 1e2126 -success 98c379 -error be5046 -accent d19a66 \ No newline at end of file diff --git a/data/schemes/onedark/dark.txt b/data/schemes/onedark/dark.txt new file mode 100644 index 0000000..6485f5e --- /dev/null +++ b/data/schemes/onedark/dark.txt @@ -0,0 +1,29 @@ +rosewater edcbc5 +flamingo d3a4a4 +pink d792c6 +mauve c678dd +red be5046 +maroon e06c75 +peach d19a66 +yellow e5c07b +green 98c379 +teal 56b6c2 +sky 90ccd7 +sapphire 389dcc +blue 61afef +lavender 8e98d9 +text abb2bf +subtext1 95a0b5 +subtext0 838b9c +overlay2 767f8f +overlay1 666e7c +overlay0 5c6370 +surface2 4b5263 +surface1 3c414f +surface0 30343e +base 282c34 +mantle 21242b +crust 1e2126 +success 98c379 +error be5046 +accent d19a66 \ No newline at end of file diff --git a/scheme/main.fish b/scheme/main.fish index 26063d7..7b0dc8f 100755 --- a/scheme/main.fish +++ b/scheme/main.fish @@ -1,32 +1,76 @@ #!/bin/fish +# Usage: +# caelestia scheme [mode] +# caelestia scheme [flavour] +# caelestia scheme [scheme] + +function set-scheme -a path name mode + mkdir -p $C_STATE/scheme + + # Update scheme colours + cp $path $C_STATE/scheme/current.txt + + # Update scheme name + echo -n $name > $C_STATE/scheme/current-name.txt + + # Update scheme mode + echo -n $mode > $C_STATE/scheme/current-mode.txt + + log "Changed scheme to $name ($mode)" +end + set -l src (dirname (status filename))/.. +set -l schemes $src/data/schemes . $src/util.fish -set -l valid_schemes (path change-extension '' $src/data/schemes/* | sed 's!.*/!!') -set -l light_schemes latte +set -l valid_schemes (basename -a $schemes/*) test -z "$argv" && set -l argv[1] (random choice $valid_schemes) if contains -- "$argv[1]" $valid_schemes - mkdir -p $C_STATE/scheme + set -l flavours (basename -a (find $schemes/$argv[1]/ -mindepth 1 -maxdepth 1 -type d) 2> /dev/null) + set -l modes (basename -s .txt (find $schemes/$argv[1]/ -mindepth 1 -maxdepth 1 -type f) 2> /dev/null) - # Update scheme colours - cp $src/data/schemes/$argv[1].txt $C_STATE/scheme/current.txt - - # Update scheme name - echo -n $argv[1] > $C_STATE/scheme/current-name.txt + if test -n "$modes" + # Scheme only has one flavour, so second arg is mode + if test -z "$argv[2]" + # Try to use current mode if not provided and current mode exists for flavour, otherwise random mode + set argv[2] (cat $C_STATE/scheme/current-mode.txt 2> /dev/null) + contains -- "$argv[2]" $modes || set argv[2] (random choice $modes) + end - # Update scheme mode - if test $argv[1] = dynamic - set colour_scheme (cat $C_STATE/scheme/dynamic-mode.txt) + if contains -- "$argv[2]" $modes + # Provided valid mode + set-scheme $schemes/$argv[1]/$argv[2].txt $argv[1] $argv[2] + else + error "Invalid mode for $argv[1]: $argv[2]" + end else - contains -- "$argv[1]" $light_schemes && set colour_scheme light || set colour_scheme dark - end - echo -n $colour_scheme > $C_STATE/scheme/current-mode.txt + # Scheme has multiple flavours, so second arg is flavour + test -z "$argv[2]" && set -l argv[2] (random choice $flavours) - log "Changed scheme to $argv[1]" + if contains -- "$argv[2]" $flavours + # Provided valid flavour + set -l modes (basename -s .txt $schemes/$argv[1]/$argv[2]/*.txt) + if test -z "$argv[3]" + # Try to use current mode if not provided and current mode exists for flavour, otherwise random mode + set argv[3] (cat $C_STATE/scheme/current-mode.txt 2> /dev/null) + contains -- "$argv[3]" $modes || set argv[3] (random choice $modes) + end + + if contains -- "$argv[3]" $modes + # Provided valid mode + set-scheme $schemes/$argv[1]/$argv[2]/$argv[3].txt $argv[1]-$argv[2] $argv[3] + else + error "Invalid mode for $argv[1] $argv[2]: $argv[3]" + end + else + # Invalid flavour + error "Invalid flavour for $argv[1]: $argv[2]" + end + end else error "Invalid scheme: $argv[1]" end diff --git a/wallpaper.fish b/wallpaper.fish index d6c146e..0db1f7d 100755 --- a/wallpaper.fish +++ b/wallpaper.fish @@ -108,10 +108,11 @@ else # Generate colour scheme for wallpaper set -l src (dirname (status filename)) - set -q _flag_T && set -l theme --theme $_flag_T - $src/scheme/gen-scheme.fish $theme $chosen_wallpaper > $src/data/schemes/dynamic.txt - if test -f $C_STATE/scheme/current-name.txt -a "$(cat $C_STATE/scheme/current-name.txt)" = 'dynamic' - caelestia scheme dynamic > /dev/null + mkdir -p $src/data/schemes/dynamic + $src/scheme/gen-scheme.fish --theme dark $chosen_wallpaper > $src/data/schemes/dynamic/dark.txt + $src/scheme/gen-scheme.fish --theme light $chosen_wallpaper > $src/data/schemes/dynamic/light.txt + if test "$(cat $C_STATE/scheme/current-name.txt 2> /dev/null)" = 'dynamic' + caelestia scheme dynamic $_flag_T > /dev/null end # Store the wallpaper chosen -- cgit v1.2.3-freya