summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-01-29 18:17:13 +1100
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-01-29 18:17:13 +1100
commit5118c8da96312627b86c55738c02c6c8ac6809d0 (patch)
treeea620f10aa317927879ecbdd1eef9246186f047d
parentinstall: hypr install uwsm envs (diff)
downloadcaelestia-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
-rw-r--r--.gitignore1
-rwxr-xr-xinstall/scripts.fish2
-rwxr-xr-xscheme/apply-scheme.fish1
-rwxr-xr-xscheme/gen-scheme.fish10
-rwxr-xr-xscheme/islight.py16
-rwxr-xr-xscheme/resizeimg.py29
-rwxr-xr-xwallpaper.fish2
7 files changed, 56 insertions, 5 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c18dd8d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+__pycache__/
diff --git a/install/scripts.fish b/install/scripts.fish
index adb139e..54b6068 100755
--- a/install/scripts.fish
+++ b/install/scripts.fish
@@ -2,7 +2,7 @@
. (dirname (status filename))/util.fish
-install-deps git hyprland-git hyprpaper-git okolors-git imagemagick wl-clipboard fuzzel-git socat foot jq
+install-deps git hyprland-git hyprpaper-git okolors-git imagemagick wl-clipboard fuzzel-git socat foot jq python python-pillow python-materialyoucolor-git
install-optional-deps 'vesktop-bin (discord client)' 'btop (system monitor)' 'wf-recorder (screen recorder)' 'grim (screenshot tool)' 'firefox (web browser)' 'spotify-adblock (music player)'
set -l dist $CONFIG/scripts
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])
diff --git a/wallpaper.fish b/wallpaper.fish
index 95e40a7..0fe0e2c 100755
--- a/wallpaper.fish
+++ b/wallpaper.fish
@@ -114,5 +114,5 @@ else
mkdir -p $cache_dir
echo $chosen_wallpaper > $last_wallpaper_path
ln -sf $chosen_wallpaper "$cache_dir/current"
- magick $chosen_wallpaper -fill black -colorize 10% -blur 0x10 "$cache_dir/blur"
+ magick $chosen_wallpaper -fill black -colorize 10% -blur 0x10 "$cache_dir/blur" &
end