57 Commits

Author SHA1 Message Date
github-actions 909c25eefd [CI] chore: update flake 2025-11-25 02:06:40 +00:00
github-actions 434841e000 [CI] chore: update flake 2025-11-23 02:19:03 +00:00
github-actions 178e73a065 [CI] emojis: update data 2025-11-23 01:39:22 +00:00
github-actions 1cfd405eaa [CI] chore: update flake 2025-11-19 01:58:19 +00:00
github-actions 03d485ec07 [CI] chore: update flake 2025-11-18 01:58:41 +00:00
github-actions 0c08188584 [CI] chore: update flake 2025-11-16 02:11:44 +00:00
github-actions d89c438284 [CI] chore: update flake 2025-11-15 02:01:51 +00:00
github-actions f9acac8fb2 [CI] chore: update flake 2025-11-13 02:00:29 +00:00
github-actions 1e3d75fa8f [CI] chore: update flake 2025-11-10 02:04:22 +00:00
github-actions 5a80ac77ed [CI] chore: update flake 2025-11-09 02:02:36 +00:00
github-actions 9323fbf1b4 [CI] chore: update flake 2025-11-07 01:58:39 +00:00
github-actions c05f6ef57a [CI] chore: update flake 2025-11-05 01:59:44 +00:00
Evence Wang 57dfea955e shell: fix log rules arg (#67) 2025-11-04 23:13:00 +11:00
github-actions 0ae99bbe39 [CI] chore: update flake 2025-11-04 01:58:32 +00:00
github-actions f13803af6b [CI] chore: update flake 2025-11-02 02:09:23 +00:00
github-actions 1cea6fb42a [CI] chore: update flake 2025-11-01 02:01:08 +00:00
github-actions 94d5477908 [CI] chore: update flake 2025-10-30 02:00:53 +00:00
github-actions a8590220bb [CI] chore: update flake 2025-10-27 02:05:30 +00:00
github-actions 27be3dbd84 [CI] chore: update flake 2025-10-26 02:01:08 +00:00
2 * r + 2 * t cc458bf859 scheme: ignore empty lines in schemes 2025-10-25 22:41:34 +11:00
github-actions b2ea4e3aad [CI] chore: update flake 2025-10-24 01:50:36 +00:00
github-actions 98da4c0266 [CI] chore: update flake 2025-10-23 02:00:03 +00:00
github-actions a9f8bde28e [CI] chore: update flake 2025-10-22 01:58:45 +00:00
github-actions d0f8a06e59 [CI] chore: update flake 2025-10-20 02:07:40 +00:00
github-actions dcca082ee6 [CI] chore: update flake 2025-10-19 02:10:10 +00:00
Davi Ribeiro 4593b823d7 wallpaper: fix random for multi-monitor setup (#63) 2025-10-17 04:59:13 +11:00
Givani Boekestijn c6f46db36c feat: add wallpaper post-hook for dynamic theming (#61)
* feat: add wallpaper post-hook for dynamic theming

Adds support for running custom shell commands after wallpaper changes
via the `wallpaper.postHook` config option in `~/.config/caelestia/cli.json`.

The wallpaper path is made available to the hook via the $WALLPAPER_PATH
environment variable. This enables integration with tools like `matugen`
or `pywal` for dynamic theming based on wallpaper colors.

The hook runs after apply_colours() in set_wallpaper(), ensuring it
executes for all wallpaper change methods (UI, IPC, and direct CLI).

* Replaced comment in example config with no-op command
2025-10-17 04:56:32 +11:00
github-actions 40fbf3bd68 [CI] chore: update flake 2025-10-16 01:53:51 +00:00
github-actions 8dc745c936 [CI] chore: update flake 2025-10-15 01:54:51 +00:00
github-actions 14ee3c66ef [CI] chore: update flake 2025-10-14 01:52:02 +00:00
github-actions 601d08bdec [CI] chore: update flake 2025-10-12 02:00:34 +00:00
github-actions e9668d58f5 [CI] chore: update flake 2025-10-11 01:45:56 +00:00
github-actions 3f7f3bab15 [CI] chore: update flake 2025-10-09 01:51:33 +00:00
github-actions 1394e32a7e [CI] chore: update flake 2025-10-08 01:55:44 +00:00
Davi Ribeiro f912d33f26 nix: fix toggle app2unit (#60) 2025-10-07 15:14:35 +11:00
github-actions 8b1d0257df [CI] chore: update flake 2025-10-07 01:49:44 +00:00
github-actions 276f18d198 [CI] chore: update flake 2025-10-05 02:04:47 +00:00
github-actions ebbd636b79 [CI] chore: update flake 2025-10-04 01:45:05 +00:00
github-actions ee7c7c2d5d [CI] chore: update flake 2025-10-03 01:49:13 +00:00
github-actions 28a831779e [CI] chore: update flake 2025-10-02 01:49:11 +00:00
github-actions 069d3a95da [CI] chore: update flake 2025-09-30 01:47:52 +00:00
github-actions af79030bf5 [CI] chore: update flake 2025-09-28 02:00:02 +00:00
github-actions 1de7da5f2b [CI] chore: update flake 2025-09-27 01:46:12 +00:00
github-actions 4be834aa11 [CI] chore: update flake 2025-09-26 01:51:20 +00:00
github-actions 8399eee947 [CI] chore: update flake 2025-09-25 01:51:43 +00:00
github-actions 62e5dc317a [CI] chore: update flake 2025-09-24 01:50:54 +00:00
github-actions 60a6be2dfd [CI] chore: update flake 2025-09-23 01:49:21 +00:00
github-actions 7fc5bcca1a [CI] chore: update flake 2025-09-22 01:59:18 +00:00
github-actions 64fd3a4a28 [CI] chore: update flake 2025-09-21 02:02:29 +00:00
github-actions dd982bcb96 [CI] chore: update flake 2025-09-20 01:46:38 +00:00
github-actions 1bac394029 [CI] chore: update flake 2025-09-19 01:51:52 +00:00
github-actions b36794bbb5 [CI] chore: update flake 2025-09-18 01:48:31 +00:00
github-actions c3e8a6de72 [CI] chore: update flake 2025-09-17 01:48:57 +00:00
github-actions 65df31dca4 [CI] chore: update flake 2025-09-16 01:48:54 +00:00
2 * r + 2 * t ad6df1c9d2 record: add extraArgs config 2025-09-15 23:18:08 +10:00
github-actions e038c5d86a [CI] chore: update flake 2025-09-15 01:57:49 +00:00
2 * r + 2 * t e560a6e3d2 version: catch correct error 2025-09-14 20:45:57 +10:00
9 changed files with 87 additions and 52 deletions
+6
View File
@@ -130,6 +130,12 @@ All configuration options are in `~/.config/caelestia/cli.json`.
```json ```json
{ {
"record": {
"extraArgs": []
},
"wallpaper": {
"postHook": "echo $WALLPAPER_PATH"
},
"theme": { "theme": {
"enableTerm": true, "enableTerm": true,
"enableHypr": true, "enableHypr": true,
+3 -2
View File
@@ -65,10 +65,11 @@ python3.pkgs.buildPythonApplication {
substituteInPlace src/caelestia/subcommands/screenshot.py \ substituteInPlace src/caelestia/subcommands/screenshot.py \
--replace-fail '"qs", "-c", "caelestia"' '"caelestia-shell"' --replace-fail '"qs", "-c", "caelestia"' '"caelestia-shell"'
# Use config bin instead of discord + fix todoist # Use config bin instead of discord + fix todoist + fix app2unit
substituteInPlace src/caelestia/subcommands/toggle.py \ substituteInPlace src/caelestia/subcommands/toggle.py \
--replace-fail 'discord' ${discordBin} \ --replace-fail 'discord' ${discordBin} \
--replace-fail 'todoist' 'todoist.desktop' --replace-fail 'todoist' 'todoist.desktop'\
--replace-fail 'app2unit' ${app2unit}/bin/app2unit
# Use config style instead of darkly # Use config style instead of darkly
substituteInPlace src/caelestia/data/templates/qtct.conf \ substituteInPlace src/caelestia/data/templates/qtct.conf \
Generated
+10 -10
View File
@@ -9,11 +9,11 @@
"quickshell": "quickshell" "quickshell": "quickshell"
}, },
"locked": { "locked": {
"lastModified": 1757726711, "lastModified": 1763974329,
"narHash": "sha256-nihMIyW+IN01jLH+XhRDJ4V/9ulD/iqi0dvA7gYlclA=", "narHash": "sha256-8bljTh08KrIzTwzJEM8rGCg56hGtIH6/oT0LctCPTOQ=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "shell", "repo": "shell",
"rev": "a57dd9343a2643f73f3994dc230b824617f89ecf", "rev": "11282f6abe32f9671dc0a7ce49d64bc4f2d79e6b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -24,11 +24,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1757487488, "lastModified": 1763835633,
"narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=", "narHash": "sha256-HzxeGVID5MChuCPESuC0dlQL1/scDKu+MmzoVBJxulM=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "ab0f3607a6c7486ea22229b92ed2d355f1482ee0", "rev": "050e09e091117c3d7328c7b2b7b577492c43c134",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -46,11 +46,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1756981260, "lastModified": 1763629934,
"narHash": "sha256-GhuD9QVimjynHI0OOyZsqJsnlXr2orowh9H+HYz4YMs=", "narHash": "sha256-jWz10RbNAyylJbH4cUTLS/CsDjkd8gxfT8OsIgQIgEg=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "6eb12551baf924f8fdecdd04113863a754259c34", "rev": "ed036d514b0fdbce03158a0b331305be166f4555",
"revCount": 672, "revCount": 708,
"type": "git", "type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell" "url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}, },
+38 -30
View File
@@ -132,6 +132,7 @@
😯 hushed face epic face hushed omg stunned surprised whoa woah 😯 hushed face epic face hushed omg stunned surprised whoa woah
😲 :o :O astonished face astonished cost face no omg shocked totally way 😲 :o :O astonished face astonished cost face no omg shocked totally way
😳 :$ flushed face amazed awkward crazy dazed dead disbelief embarrassed face flushed geez heat hot impressed jeez what wow 😳 :$ flushed face amazed awkward crazy dazed dead disbelief embarrassed face flushed geez heat hot impressed jeez what wow
🫪 distorted face anxiety bloated panic shocked surprised vulnerable
🥺 pleading face begging big eyes face mercy not pleading please pretty puppy sad why 🥺 pleading face begging big eyes face mercy not pleading please pretty puppy sad why
🥹 face holding back tears admiration aww back cry embarrassed face feelings grateful gratitude holding joy please proud resist sad tears 🥹 face holding back tears admiration aww back cry embarrassed face feelings grateful gratitude holding joy please proud resist sad tears
😦 frowning face with open mouth caught face frown frowning guard mouth open scared scary surprise what wow 😦 frowning face with open mouth caught face frown frowning guard mouth open scared scary surprise what wow
@@ -205,6 +206,7 @@
💋 kiss mark dating emotion heart kiss kissing lips mark romance sexy 💋 kiss mark dating emotion heart kiss kissing lips mark romance sexy
💯 hundred points 100 a+ agree clearly definitely faithful fleek full hundred keep perfect point score true truth yup 💯 hundred points 100 a+ agree clearly definitely faithful fleek full hundred keep perfect point score true truth yup
💢 anger symbol anger angry comic mad symbol upset 💢 anger symbol anger angry comic mad symbol upset
🫯 fight cloud argument brawl debate disagreement fight ruckus wrestle
💥 collision bomb boom collide comic explode 💥 collision bomb boom collide comic explode
💫 dizzy comic shining shooting star stars 💫 dizzy comic shining shooting star stars
💦 sweat droplets comic drip droplet droplets drops splashing squirt sweat water wet work workout 💦 sweat droplets comic drip droplet droplets drops splashing squirt sweat water wet work workout
@@ -449,6 +451,7 @@
🧟‍♂️ man zombie apocalypse dead halloween horror man scary undead walking zombie 🧟‍♂️ man zombie apocalypse dead halloween horror man scary undead walking zombie
🧟‍♀️ woman zombie apocalypse dead halloween horror scary undead walking woman zombie 🧟‍♀️ woman zombie apocalypse dead halloween horror scary undead walking woman zombie
🧌 troll fairy fantasy monster tale trolling 🧌 troll fairy fantasy monster tale trolling
🫈 hairy creature bigfoot cryptid forest giant hairy sasquatch woodwose yeti
💆 person getting massage face getting headache massage person relax relaxing salon soothe spa tension therapy treatment 💆 person getting massage face getting headache massage person relax relaxing salon soothe spa tension therapy treatment
💆‍♂️ man getting massage face getting headache man massage relax relaxing salon soothe spa tension therapy treatment 💆‍♂️ man getting massage face getting headache man massage relax relaxing salon soothe spa tension therapy treatment
💆‍♀️ woman getting massage face getting headache massage relax relaxing salon soothe spa tension therapy treatment woman 💆‍♀️ woman getting massage face getting headache massage relax relaxing salon soothe spa tension therapy treatment woman
@@ -458,42 +461,43 @@
🚶 person walking amble gait hike man pace pedestrian person stride stroll walk walking 🚶 person walking amble gait hike man pace pedestrian person stride stroll walk walking
🚶‍♂️ man walking amble gait hike man pace pedestrian stride stroll walk walking 🚶‍♂️ man walking amble gait hike man pace pedestrian stride stroll walk walking
🚶‍♀️ woman walking amble gait hike man pace pedestrian stride stroll walk walking woman 🚶‍♀️ woman walking amble gait hike man pace pedestrian stride stroll walk walking woman
🚶‍➡️ person walking facing right amble gait hike man pace pedestrian person stride stroll walk walking 🚶‍➡️ person walking: facing right amble facing gait hike man pace pedestrian person right stride stroll walk walking
🚶‍♀️‍➡️ woman walking facing right amble gait hike man pace pedestrian stride stroll walk walking woman 🚶‍♀️‍➡️ woman walking: facing right amble facing gait hike man pace pedestrian right stride stroll walk walking woman
🚶‍♂️‍➡️ man walking facing right amble gait hike man pace pedestrian stride stroll walk walking 🚶‍♂️‍➡️ man walking: facing right amble facing gait hike man pace pedestrian right stride stroll walk walking
🧍 person standing person stand standing 🧍 person standing person stand standing
🧍‍♂️ man standing man stand standing 🧍‍♂️ man standing man stand standing
🧍‍♀️ woman standing stand standing woman 🧍‍♀️ woman standing stand standing woman
🧎 person kneeling kneel kneeling knees person 🧎 person kneeling kneel kneeling knees person
🧎‍♂️ man kneeling kneel kneeling knees man 🧎‍♂️ man kneeling kneel kneeling knees man
🧎‍♀️ woman kneeling kneel kneeling knees woman 🧎‍♀️ woman kneeling kneel kneeling knees woman
🧎‍➡️ person kneeling facing right kneel kneeling knees person 🧎‍➡️ person kneeling: facing right facing kneel kneeling knees person right
🧎‍♀️‍➡️ woman kneeling facing right kneel kneeling knees woman 🧎‍♀️‍➡️ woman kneeling: facing right facing kneel kneeling knees right woman
🧎‍♂️‍➡️ man kneeling facing right kneel kneeling knees man 🧎‍♂️‍➡️ man kneeling: facing right facing kneel kneeling knees man right
🧑‍🦯 person with white cane accessibility blind cane person probing white 🧑‍🦯 person with white cane accessibility blind cane person probing white
🧑‍🦯‍➡️ person with white cane facing right accessibility blind cane person probing white 🧑‍🦯‍➡️ person with white cane: facing right accessibility blind cane facing person probing right white
👨‍🦯 man with white cane accessibility blind cane man probing white 👨‍🦯 man with white cane accessibility blind cane man probing white
👨‍🦯‍➡️ man with white cane facing right accessibility blind cane man probing white 👨‍🦯‍➡️ man with white cane: facing right accessibility blind cane facing man probing right white
👩‍🦯 woman with white cane accessibility blind cane probing white woman 👩‍🦯 woman with white cane accessibility blind cane probing white woman
👩‍🦯‍➡️ woman with white cane facing right accessibility blind cane probing white woman 👩‍🦯‍➡️ woman with white cane: facing right accessibility blind cane facing probing right white woman
🧑‍🦼 person in motorized wheelchair accessibility motorized person wheelchair 🧑‍🦼 person in motorized wheelchair accessibility motorized person wheelchair
🧑‍🦼‍➡️ person in motorized wheelchair facing right accessibility motorized person wheelchair 🧑‍🦼‍➡️ person in motorized wheelchair: facing right accessibility facing motorized person right wheelchair
👨‍🦼 man in motorized wheelchair accessibility man motorized wheelchair 👨‍🦼 man in motorized wheelchair accessibility man motorized wheelchair
👨‍🦼‍➡️ man in motorized wheelchair facing right accessibility man motorized wheelchair 👨‍🦼‍➡️ man in motorized wheelchair: facing right accessibility facing man motorized right wheelchair
👩‍🦼 woman in motorized wheelchair accessibility motorized wheelchair woman 👩‍🦼 woman in motorized wheelchair accessibility motorized wheelchair woman
👩‍🦼‍➡️ woman in motorized wheelchair facing right accessibility motorized wheelchair woman 👩‍🦼‍➡️ woman in motorized wheelchair: facing right accessibility facing motorized right wheelchair woman
🧑‍🦽 person in manual wheelchair accessibility manual person wheelchair 🧑‍🦽 person in manual wheelchair accessibility manual person wheelchair
🧑‍🦽‍➡️ person in manual wheelchair facing right accessibility manual person wheelchair 🧑‍🦽‍➡️ person in manual wheelchair: facing right accessibility facing manual person right wheelchair
👨‍🦽 man in manual wheelchair accessibility man manual wheelchair 👨‍🦽 man in manual wheelchair accessibility man manual wheelchair
👨‍🦽‍➡️ man in manual wheelchair facing right accessibility man manual wheelchair 👨‍🦽‍➡️ man in manual wheelchair: facing right accessibility facing man manual right wheelchair
👩‍🦽 woman in manual wheelchair accessibility manual wheelchair woman 👩‍🦽 woman in manual wheelchair accessibility manual wheelchair woman
👩‍🦽‍➡️ woman in manual wheelchair facing right accessibility manual wheelchair woman 👩‍🦽‍➡️ woman in manual wheelchair: facing right accessibility facing manual right wheelchair woman
🏃 person running fast hurry marathon move person quick race racing run rush speed 🏃 person running fast hurry marathon move person quick race racing run rush speed
🏃‍♂️ man running fast hurry man marathon move quick race racing run rush speed 🏃‍♂️ man running fast hurry man marathon move quick race racing run rush speed
🏃‍♀️ woman running fast hurry marathon move quick race racing run rush speed woman 🏃‍♀️ woman running fast hurry marathon move quick race racing run rush speed woman
🏃‍➡️ person running facing right fast hurry marathon move person quick race racing run rush speed 🏃‍➡️ person running: facing right facing fast hurry marathon move person quick race racing right run rush speed
🏃‍♀️‍➡️ woman running facing right fast hurry marathon move quick race racing run rush speed woman 🏃‍♀️‍➡️ woman running: facing right facing fast hurry marathon move quick race racing right run rush speed woman
🏃‍♂️‍➡️ man running facing right fast hurry man marathon move quick race racing run rush speed 🏃‍♂️‍➡️ man running: facing right facing fast hurry man marathon move quick race racing right run rush speed
🧑‍🩰 ballet dancer ballet dancer
💃 woman dancing dance dancer dancing elegant festive flair flamenco groove lets salsa tango woman 💃 woman dancing dance dancer dancing elegant festive flair flamenco groove lets salsa tango woman
🕺 man dancing dance dancer dancing elegant festive flair flamenco groove lets man salsa tango 🕺 man dancing dance dancer dancing elegant festive flair flamenco groove lets man salsa tango
🕴️ person in suit levitating business levitating person suit 🕴️ person in suit levitating business levitating person suit
@@ -711,6 +715,7 @@
🐳 spouting whale animal beach face ocean spouting whale 🐳 spouting whale animal beach face ocean spouting whale
🐋 whale animal beach ocean 🐋 whale animal beach ocean
🐬 dolphin animal beach flipper ocean 🐬 dolphin animal beach flipper ocean
🫍 orca marine ocean whale
🦭 seal animal lion ocean sea 🦭 seal animal lion ocean sea
🐟️ fish animal dinner fishes fishing pisces zodiac 🐟️ fish animal dinner fishes fishing pisces zodiac
🐠 tropical fish animal fish fishes tropical 🐠 tropical fish animal fish fishes tropical
@@ -910,6 +915,7 @@
🧭 compass direction magnetic navigation orienteering 🧭 compass direction magnetic navigation orienteering
🏔️ snow-capped mountain cold mountain snow snow-capped 🏔️ snow-capped mountain cold mountain snow snow-capped
⛰️ mountain mountain ⛰️ mountain mountain
🛘 landslide avalanche danger disaster earthquake mountain mudslide rocks
🌋 volcano eruption mountain nature 🌋 volcano eruption mountain nature
🗻 mount fuji fuji mount mountain nature 🗻 mount fuji fuji mount mountain nature
🏕️ camping camping 🏕️ camping camping
@@ -1270,10 +1276,11 @@
🎧️ headphone earbud sound 🎧️ headphone earbud sound
📻️ radio entertainment tbt video 📻️ radio entertainment tbt video
🎷 saxophone instrument music sax 🎷 saxophone instrument music sax
🎺 trumpet instrument music
🪊 trombone brass instrument jazz music sad slide
🪗 accordion box concertina instrument music squeeze squeezebox 🪗 accordion box concertina instrument music squeeze squeezebox
🎸 guitar instrument music strat 🎸 guitar instrument music strat
🎹 musical keyboard instrument keyboard music musical piano 🎹 musical keyboard instrument keyboard music musical piano
🎺 trumpet instrument music
🎻 violin instrument music 🎻 violin instrument music
🪕 banjo music stringed 🪕 banjo music stringed
🥁 drum drumsticks music 🥁 drum drumsticks music
@@ -1334,8 +1341,9 @@
📑 bookmark tabs bookmark mark marker tabs 📑 bookmark tabs bookmark mark marker tabs
🔖 bookmark mark 🔖 bookmark mark
🏷️ label tag 🏷️ label tag
💰️ money bag bag bank bet billion cash cost dollar gold million money moneybag paid paying pot rich win
🪙 coin dollar euro gold metal money rich silver treasure 🪙 coin dollar euro gold metal money rich silver treasure
💰️ money bag bag bank bet billion cash cost dollar gold million money moneybag paid paying pot rich win
🪎 treasure chest gem gold jewels loot money prize silver valuables wealth
💴 yen banknote bank banknote bill currency money note yen 💴 yen banknote bank banknote bill currency money note yen
💵 dollar banknote bank banknote bill currency dollar money note 💵 dollar banknote bank banknote bill currency dollar money note
💶 euro banknote 100 bank banknote bill currency euro money note rich 💶 euro banknote 100 bank banknote bill currency euro money note rich
@@ -1608,16 +1616,16 @@
🫟 splatter drip holi ink liquid mess paint spill stain 🫟 splatter drip holi ink liquid mess paint spill stain
#️⃣ keycap: # keycap #️⃣ keycap: # keycap
*️⃣ keycap: * keycap *️⃣ keycap: * keycap
0️⃣ keycap: 0 keycap 0️⃣ keycap: 0 0 keycap zero
1️⃣ keycap: 1 keycap 1️⃣ keycap: 1 1 keycap one
2️⃣ keycap: 2 keycap 2️⃣ keycap: 2 2 keycap two
3️⃣ keycap: 3 keycap 3️⃣ keycap: 3 3 keycap three
4️⃣ keycap: 4 keycap 4️⃣ keycap: 4 4 four keycap
5️⃣ keycap: 5 keycap 5️⃣ keycap: 5 5 five keycap
6️⃣ keycap: 6 keycap 6️⃣ keycap: 6 6 keycap six
7️⃣ keycap: 7 keycap 7️⃣ keycap: 7 7 keycap seven
8️⃣ keycap: 8 keycap 8️⃣ keycap: 8 8 eight keycap
9️⃣ keycap: 9 keycap 9️⃣ keycap: 9 9 keycap nine
🔟 keycap: 10 keycap 🔟 keycap: 10 keycap
🔠 input latin uppercase abcd input latin letters uppercase 🔠 input latin uppercase abcd input latin letters uppercase
🔡 input latin lowercase abcd input latin letters lowercase 🔡 input latin lowercase abcd input latin letters lowercase
+10 -1
View File
@@ -7,7 +7,7 @@ from argparse import Namespace
from datetime import datetime from datetime import datetime
from caelestia.utils.notify import close_notification, notify from caelestia.utils.notify import close_notification, notify
from caelestia.utils.paths import recording_notif_path, recording_path, recordings_dir from caelestia.utils.paths import recording_notif_path, recording_path, recordings_dir, user_config_path
RECORDER = "gpu-screen-recorder" RECORDER = "gpu-screen-recorder"
@@ -63,6 +63,15 @@ class Command:
if self.args.sound: if self.args.sound:
args += ["-a", "default_output"] args += ["-a", "default_output"]
try:
config = json.loads(user_config_path.read_text())
if "record" in config and "extraArgs" in config["record"]:
args += config["record"]["extraArgs"]
except (json.JSONDecodeError, FileNotFoundError):
pass
except TypeError as e:
raise ValueError(f"Config option 'record.extraArgs' should be an array: {e}")
recording_path.parent.mkdir(parents=True, exist_ok=True) recording_path.parent.mkdir(parents=True, exist_ok=True)
proc = subprocess.Popen([RECORDER, *args, "-o", str(recording_path)], start_new_session=True) proc = subprocess.Popen([RECORDER, *args, "-o", str(recording_path)], start_new_session=True)
+1 -1
View File
@@ -27,7 +27,7 @@ class Command:
# Start the shell # Start the shell
args = ["qs", "-c", "caelestia", "-n"] args = ["qs", "-c", "caelestia", "-n"]
if self.args.log_rules: if self.args.log_rules:
args.append("--log-rules", self.args.log_rules) args.extend(["--log-rules", self.args.log_rules])
if self.args.daemon: if self.args.daemon:
args.append("-d") args.append("-d")
subprocess.run(args) subprocess.run(args)
+1 -1
View File
@@ -200,7 +200,7 @@ scheme: Scheme = None
def read_colours_from_file(path: Path) -> dict[str, str]: def read_colours_from_file(path: Path) -> dict[str, str]:
return {k.strip(): v.strip() for k, v in (line.split(" ") for line in path.read_text().splitlines())} return {k.strip(): v.strip() for k, v in (line.split(" ") for line in path.read_text().splitlines() if line)}
def get_scheme_path() -> Path: def get_scheme_path() -> Path:
+1 -1
View File
@@ -36,7 +36,7 @@ def print_version() -> None:
shell_ver = subprocess.check_output(["/usr/lib/caelestia/version", "-s"], text=True).strip() shell_ver = subprocess.check_output(["/usr/lib/caelestia/version", "-s"], text=True).strip()
print("Shell:") print("Shell:")
print(" ", shell_ver) print(" ", shell_ver)
except subprocess.CalledProcessError: except FileNotFoundError:
print("Shell: version helper not available") print("Shell: version helper not available")
print() print()
+17 -6
View File
@@ -1,5 +1,7 @@
import json import json
import os
import random import random
import subprocess
from argparse import Namespace from argparse import Namespace
from pathlib import Path from pathlib import Path
@@ -11,6 +13,7 @@ from caelestia.utils.hypr import message
from caelestia.utils.material import get_colours_for_image from caelestia.utils.material import get_colours_for_image
from caelestia.utils.paths import ( from caelestia.utils.paths import (
compute_hash, compute_hash,
user_config_path,
wallpaper_link_path, wallpaper_link_path,
wallpaper_path_path, wallpaper_path_path,
wallpaper_thumbnail_path, wallpaper_thumbnail_path,
@@ -48,12 +51,7 @@ def get_wallpapers(args: Namespace) -> list[Path]:
return walls return walls
monitors = message("monitors") monitors = message("monitors")
filter_size = monitors[0]["width"], monitors[0]["height"] filter_size = min(m["width"] for m in monitors), min(m["height"] for m in monitors)
for monitor in monitors[1:]:
if filter_size[0] > monitor["width"]:
filter_size[0] = monitor["width"]
if filter_size[1] > monitor["height"]:
filter_size[1] = monitor["height"]
return [f for f in walls if check_wall(f, filter_size, args.threshold)] return [f for f in walls if check_wall(f, filter_size, args.threshold)]
@@ -158,6 +156,19 @@ def set_wallpaper(wall: Path | str, no_smart: bool) -> None:
scheme.update_colours() scheme.update_colours()
apply_colours(scheme.colours, scheme.mode) apply_colours(scheme.colours, scheme.mode)
# Run custom post-hook if configured
try:
cfg = json.loads(user_config_path.read_text()).get("wallpaper", {})
if post_hook := cfg.get("postHook"):
subprocess.run(
post_hook,
shell=True,
env={**os.environ, "WALLPAPER_PATH": str(wall)},
stderr=subprocess.DEVNULL,
)
except (FileNotFoundError, json.JSONDecodeError):
pass
def set_random(args: Namespace) -> None: def set_random(args: Namespace) -> None:
wallpapers = get_wallpapers(args) wallpapers = get_wallpapers(args)