diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-01-29 18:17:13 +1100 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-01-29 18:17:13 +1100 |
| commit | 5118c8da96312627b86c55738c02c6c8ac6809d0 (patch) | |
| tree | ea620f10aa317927879ecbdd1eef9246186f047d /scheme | |
| parent | install: hypr install uwsm envs (diff) | |
| download | caelestia-cli-5118c8da96312627b86c55738c02c6c8ac6809d0.tar.gz caelestia-cli-5118c8da96312627b86c55738c02c6c8ac6809d0.tar.bz2 caelestia-cli-5118c8da96312627b86c55738c02c6c8ac6809d0.zip | |
scheme: dynamic light theme
Autodetect based on wallpaper
Also resize wallpaper so faster
And async magick blur so wallpaper doesnt block
Diffstat (limited to 'scheme')
| -rwxr-xr-x | scheme/apply-scheme.fish | 1 | ||||
| -rwxr-xr-x | scheme/gen-scheme.fish | 10 | ||||
| -rwxr-xr-x | scheme/islight.py | 16 | ||||
| -rwxr-xr-x | scheme/resizeimg.py | 29 |
4 files changed, 53 insertions, 3 deletions
diff --git a/scheme/apply-scheme.fish b/scheme/apply-scheme.fish index ecea2d5..462b4d8 100755 --- a/scheme/apply-scheme.fish +++ b/scheme/apply-scheme.fish @@ -79,7 +79,6 @@ end if test -d $CONFIG/gtk log 'Generating GTK+ schemes' gen-gtk $colours - $CONFIG/gtk/update-scheme.fish end # Reload programs if dynamic scheme diff --git a/scheme/gen-scheme.fish b/scheme/gen-scheme.fish index d8e8158..b0608e7 100755 --- a/scheme/gen-scheme.fish +++ b/scheme/gen-scheme.fish @@ -7,13 +7,19 @@ function nl-echo end end -. (dirname (status filename))/../util.fish +set -l src (dirname (status filename)) + +. $src/../util.fish set -l colour_names rosewater flamingo pink mauve red maroon peach yellow green teal sky sapphire blue lavender set -l layer_names text subtext1 subtext0 overlay2 overlay1 overlay0 surface2 surface1 surface0 base mantle crust test -f "$argv[1]" && set -l img "$argv[1]" || set -l img $CACHE/wallpaper/current -set -l colours_raw (okolors (realpath $img) -k 15 -w 0 -l 70,90,75,65,40,35,30,25,20,15,10,8,6) +set -l img ($src/resizeimg.py $img) + +$src/islight.py $img && set -l light_vals 40,6,8,10,45,50,55,60,65,70,75,80,85,90 || set -l light_vals 70,90,75,65,40,35,30,25,20,15,10,8,6 + +set -l colours_raw (okolors (realpath $img) -k 15 -w 0 -l $light_vals) set -l colours (string split ' ' $colours_raw[2])[2..] set -l layers (nl-echo $colours_raw | cut -f 1 -d ' ')[3..] diff --git a/scheme/islight.py b/scheme/islight.py new file mode 100755 index 0000000..1adcf3f --- /dev/null +++ b/scheme/islight.py @@ -0,0 +1,16 @@ +#!/bin/python + +import sys +from PIL import Image +from materialyoucolor.quantize import QuantizeCelebi +from materialyoucolor.score.score import Score +from materialyoucolor.hct import Hct +from resizeimg import resize + + +if __name__ == "__main__": + with Image.open(sys.argv[1]) as img: + img = resize(img)[0] + colours = QuantizeCelebi(list(img.getdata()), 128) + hct = Hct.from_int(Score.score(colours)[0]) + sys.exit(0 if hct.tone > 60 else 1) diff --git a/scheme/resizeimg.py b/scheme/resizeimg.py new file mode 100755 index 0000000..e18ffb8 --- /dev/null +++ b/scheme/resizeimg.py @@ -0,0 +1,29 @@ +#!/bin/python + +import sys +import math +from PIL import Image + + +def calc_size(w, h, b = 128): + ia = w * h + ba = b * b + s = math.sqrt(ba / ia) if ia > ba else 1 + return max(1, round(w * s)), max(1, round(h * s)) + + +def resize(img): + w, h = calc_size(img.width, img.height) + if w < img.width or h < img.height: + return img.resize((w, h), Image.Resampling.BICUBIC), True + return img, False + + +if __name__ == "__main__": + with Image.open(sys.argv[1]) as img: + img, resized = resize(img) + if resized: + img.save("/tmp/caelestia-resize.png") + print("/tmp/caelestia-resize.png") + else: + print(sys.argv[1]) |