forked from Shinonome/caelestia-cli
scheme: refactor schemes
Schemes can have multiple flavours, and each flavour can have a light/dark mode
This commit is contained in:
+1
-1
@@ -1 +1 @@
|
||||
/data/schemes/dynamic.txt
|
||||
/data/schemes/dynamic/
|
||||
|
||||
@@ -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"
|
||||
|
||||
+59
-15
@@ -1,32 +1,76 @@
|
||||
#!/bin/fish
|
||||
|
||||
# Usage:
|
||||
# caelestia scheme <scheme> <flavour> [mode]
|
||||
# caelestia scheme <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
|
||||
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 name
|
||||
echo -n $argv[1] > $C_STATE/scheme/current-name.txt
|
||||
|
||||
# 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
|
||||
|
||||
+5
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user