mirror of
https://github.com/caelestia-dots/cli.git
synced 2026-06-06 07:19:29 -05:00
Compare commits
112 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d890f7c3af | |||
| bca7b12072 | |||
| fe8adde6c1 | |||
| 9c309473f4 | |||
| 6e5ab6db53 | |||
| 170405fbb0 | |||
| 6a91c7b990 | |||
| bdc5f91009 | |||
| 164bda5462 | |||
| fe071cb285 | |||
| 2d5bec14a5 | |||
| 2395347d36 | |||
| cf6092b77b | |||
| 6dad795297 | |||
| 016a566bb7 | |||
| 2240ad4adf | |||
| fccf32250e | |||
| 90fc2a981e | |||
| 6cdb131e3a | |||
| ecf0c6156a | |||
| 52a3a3c50e | |||
| 6b3f927d2c | |||
| 74ddac98eb | |||
| d09e36299a | |||
| 50c8f9c84d | |||
| 33fb69dc8c | |||
| 7de6c60631 | |||
| 0cd11ef665 | |||
| 64686104a1 | |||
| 08dc3e0e87 | |||
| 7900d05459 | |||
| 315f1daf9d | |||
| ad555d5129 | |||
| 70a8624eac | |||
| 86b0c94bd1 | |||
| 55d75a1175 | |||
| 55590bd9e4 | |||
| 337c711371 | |||
| f3ea42d43a | |||
| e33e6ccf72 | |||
| b049cb1749 | |||
| 78e0b9d795 | |||
| e9f3f00bb9 | |||
| 8c83ae1e6a | |||
| 10639b5de0 | |||
| e1efe59e55 | |||
| b1e4e92e98 | |||
| 3e59c5acc2 | |||
| 1eead86151 | |||
| 02442e0f85 | |||
| 5fa4d1b278 | |||
| c0813790c2 | |||
| ed12d4cb82 | |||
| 1e1edfcd38 | |||
| 0fdab31bc7 | |||
| 909c25eefd | |||
| 434841e000 | |||
| 178e73a065 | |||
| 1cfd405eaa | |||
| 03d485ec07 | |||
| 0c08188584 | |||
| d89c438284 | |||
| f9acac8fb2 | |||
| 1e3d75fa8f | |||
| 5a80ac77ed | |||
| 9323fbf1b4 | |||
| c05f6ef57a | |||
| 57dfea955e | |||
| 0ae99bbe39 | |||
| f13803af6b | |||
| 1cea6fb42a | |||
| 94d5477908 | |||
| a8590220bb | |||
| 27be3dbd84 | |||
| cc458bf859 | |||
| b2ea4e3aad | |||
| 98da4c0266 | |||
| a9f8bde28e | |||
| d0f8a06e59 | |||
| dcca082ee6 | |||
| 4593b823d7 | |||
| c6f46db36c | |||
| 40fbf3bd68 | |||
| 8dc745c936 | |||
| 14ee3c66ef | |||
| 601d08bdec | |||
| e9668d58f5 | |||
| 3f7f3bab15 | |||
| 1394e32a7e | |||
| f912d33f26 | |||
| 8b1d0257df | |||
| 276f18d198 | |||
| ebbd636b79 | |||
| ee7c7c2d5d | |||
| 28a831779e | |||
| 069d3a95da | |||
| af79030bf5 | |||
| 1de7da5f2b | |||
| 4be834aa11 | |||
| 8399eee947 | |||
| 62e5dc317a | |||
| 60a6be2dfd | |||
| 7fc5bcca1a | |||
| 64fd3a4a28 | |||
| dd982bcb96 | |||
| 1bac394029 | |||
| b36794bbb5 | |||
| c3e8a6de72 | |||
| 65df31dca4 | |||
| ad6df1c9d2 | |||
| e038c5d86a | |||
| e560a6e3d2 |
@@ -18,6 +18,32 @@ The main control script for the Caelestia dotfiles.
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
<details><summary id="optional-dependencies">Optional dependencies</summary>
|
||||||
|
|
||||||
|
- [`papirus-folders`](https://github.com/PapirusDevelopmentTeam/papirus-folders) - automatic folder icon color syncing with theme
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> For automatic Papirus folder icon color syncing, `papirus-folders` needs to be able to run with `sudo` without a password prompt.
|
||||||
|
>
|
||||||
|
> **Recommended** - Create a sudoers file:
|
||||||
|
> ```fish
|
||||||
|
> # Fish shell
|
||||||
|
> echo "$USER ALL=(ALL) NOPASSWD: "(which papirus-folders) | sudo tee /etc/sudoers.d/papirus-folders
|
||||||
|
> sudo chmod 440 /etc/sudoers.d/papirus-folders
|
||||||
|
> ```
|
||||||
|
> ```sh
|
||||||
|
> # Bash/other shells
|
||||||
|
> echo "$USER ALL=(ALL) NOPASSWD: $(which papirus-folders)" | sudo tee /etc/sudoers.d/papirus-folders
|
||||||
|
> sudo chmod 440 /etc/sudoers.d/papirus-folders
|
||||||
|
> ```
|
||||||
|
>
|
||||||
|
> **Alternatively** - Edit the main sudoers file by running `sudo visudo` and adding at the end:
|
||||||
|
> ```
|
||||||
|
> your_username ALL=(ALL) NOPASSWD: /usr/bin/papirus-folders
|
||||||
|
> ```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Arch linux
|
### Arch linux
|
||||||
@@ -130,6 +156,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,
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ complete -c caelestia -n "$seen screenshot" -s 'f' -l 'freeze' -d 'Freeze while
|
|||||||
# Record
|
# Record
|
||||||
complete -c caelestia -n "$seen record" -s 'r' -l 'region' -d 'Capture region'
|
complete -c caelestia -n "$seen record" -s 'r' -l 'region' -d 'Capture region'
|
||||||
complete -c caelestia -n "$seen record" -s 's' -l 'sound' -d 'Capture sound'
|
complete -c caelestia -n "$seen record" -s 's' -l 'sound' -d 'Capture sound'
|
||||||
|
complete -c caelestia -n "$seen record" -s 'c' -l 'clipboard' -d 'Copy recording path to clipboard'
|
||||||
|
|
||||||
# Clipboard
|
# Clipboard
|
||||||
complete -c caelestia -n "$seen clipboard" -s 'd' -l 'delete' -d 'Delete from cliboard history'
|
complete -c caelestia -n "$seen clipboard" -s 'd' -l 'delete' -d 'Delete from cliboard history'
|
||||||
|
|||||||
+3
-2
@@ -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
@@ -9,11 +9,11 @@
|
|||||||
"quickshell": "quickshell"
|
"quickshell": "quickshell"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1757726711,
|
"lastModified": 1770949235,
|
||||||
"narHash": "sha256-nihMIyW+IN01jLH+XhRDJ4V/9ulD/iqi0dvA7gYlclA=",
|
"narHash": "sha256-OFeud9FjaOk6xHp/9igYl/+Zw6FJDyZNrIDNi47gsG0=",
|
||||||
"owner": "caelestia-dots",
|
"owner": "caelestia-dots",
|
||||||
"repo": "shell",
|
"repo": "shell",
|
||||||
"rev": "a57dd9343a2643f73f3994dc230b824617f89ecf",
|
"rev": "93e8880842b03e251bf59d1ba316f2393c68574f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -24,11 +24,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1757487488,
|
"lastModified": 1770841267,
|
||||||
"narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=",
|
"narHash": "sha256-9xejG0KoqsoKEGp2kVbXRlEYtFFcDTHjidiuX8hGO44=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "ab0f3607a6c7486ea22229b92ed2d355f1482ee0",
|
"rev": "ec7c70d12ce2fc37cb92aff673dcdca89d187bae",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -46,11 +46,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1756981260,
|
"lastModified": 1769593411,
|
||||||
"narHash": "sha256-GhuD9QVimjynHI0OOyZsqJsnlXr2orowh9H+HYz4YMs=",
|
"narHash": "sha256-WW00FaBiUmQyxvSbefvgxIjwf/WmRrEGBbwMHvW/7uQ=",
|
||||||
"ref": "refs/heads/master",
|
"ref": "refs/heads/master",
|
||||||
"rev": "6eb12551baf924f8fdecdd04113863a754259c34",
|
"rev": "1e4d804e7f3fa7465811030e8da2bf10d544426a",
|
||||||
"revCount": 672,
|
"revCount": 732,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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 let’s salsa tango woman
|
💃 woman dancing dance dancer dancing elegant festive flair flamenco groove let’s salsa tango woman
|
||||||
🕺 man dancing dance dancer dancing elegant festive flair flamenco groove let’s man salsa tango
|
🕺 man dancing dance dancer dancing elegant festive flair flamenco groove let’s 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
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ tertiary_paletteKeyColor 376942
|
|||||||
neutral_paletteKeyColor 1E1E26
|
neutral_paletteKeyColor 1E1E26
|
||||||
neutral_variant_paletteKeyColor 23252D
|
neutral_variant_paletteKeyColor 23252D
|
||||||
background 23262D
|
background 23262D
|
||||||
onBackground 02200B
|
onBackground F5F5F6
|
||||||
surface 050505
|
surface 050505
|
||||||
surfaceDim 1E1E24
|
surfaceDim 1E1E24
|
||||||
surfaceBright 1E1E24
|
surfaceBright 1E1E24
|
||||||
@@ -82,6 +82,16 @@ sky cefb97
|
|||||||
sapphire 85ef77
|
sapphire 85ef77
|
||||||
blue 65eea0
|
blue 65eea0
|
||||||
lavender 90f79e
|
lavender 90f79e
|
||||||
|
klink 65eea0
|
||||||
|
klinkSelection 65eea0
|
||||||
|
kvisited 73fa90
|
||||||
|
kvisitedSelection 73fa90
|
||||||
|
knegative 8affab
|
||||||
|
knegativeSelection 8affab
|
||||||
|
kneutral d0f9f4
|
||||||
|
kneutralSelection d0f9f4
|
||||||
|
kpositive 8af797
|
||||||
|
kpositiveSelection 8af797
|
||||||
text e0e3e4
|
text e0e3e4
|
||||||
subtext1 bec8cc
|
subtext1 bec8cc
|
||||||
subtext0 889296
|
subtext0 889296
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ tertiary_paletteKeyColor 376942
|
|||||||
neutral_paletteKeyColor 1E1E26
|
neutral_paletteKeyColor 1E1E26
|
||||||
neutral_variant_paletteKeyColor 23252D
|
neutral_variant_paletteKeyColor 23252D
|
||||||
background 23262D
|
background 23262D
|
||||||
onBackground 02200B
|
onBackground F5F5F6
|
||||||
surface 1E1E24
|
surface 1E1E24
|
||||||
surfaceDim 1E1E24
|
surfaceDim 1E1E24
|
||||||
surfaceBright 1E1E24
|
surfaceBright 1E1E24
|
||||||
@@ -82,6 +82,16 @@ sky cefb97
|
|||||||
sapphire 85ef77
|
sapphire 85ef77
|
||||||
blue 65eea0
|
blue 65eea0
|
||||||
lavender 90f79e
|
lavender 90f79e
|
||||||
|
klink 65eea0
|
||||||
|
klinkSelection 65eea0
|
||||||
|
kvisited 73fa90
|
||||||
|
kvisitedSelection 73fa90
|
||||||
|
knegative 8affab
|
||||||
|
knegativeSelection 8affab
|
||||||
|
kneutral d0f9f4
|
||||||
|
kneutralSelection d0f9f4
|
||||||
|
kpositive 8af797
|
||||||
|
kpositiveSelection 8af797
|
||||||
text e0e3e4
|
text e0e3e4
|
||||||
subtext1 bec8cc
|
subtext1 bec8cc
|
||||||
subtext0 889296
|
subtext0 889296
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor BD93F9
|
||||||
|
secondary_paletteKeyColor 50FA7B
|
||||||
|
tertiary_paletteKeyColor FF79C6
|
||||||
|
neutral_paletteKeyColor 282A36
|
||||||
|
neutral_variant_paletteKeyColor 44475A
|
||||||
|
background 282A36
|
||||||
|
onBackground F8F8F2
|
||||||
|
surface 343746
|
||||||
|
surfaceDim 21222C
|
||||||
|
surfaceBright 4D4F66
|
||||||
|
surfaceContainerLowest 191A21
|
||||||
|
surfaceContainerLow 3C3F4E
|
||||||
|
surfaceContainer 3E4153
|
||||||
|
surfaceContainerHigh 4D4F66
|
||||||
|
surfaceContainerHighest 565970
|
||||||
|
onSurface F8F8F2
|
||||||
|
surfaceVariant 3E4153
|
||||||
|
onSurfaceVariant F8F8F2
|
||||||
|
inverseSurface F8F8F2
|
||||||
|
inverseOnSurface 282A36
|
||||||
|
outline 6272A4
|
||||||
|
outlineVariant 4D4F66
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint BD93F9
|
||||||
|
primary BD93F9
|
||||||
|
onPrimary 282A36
|
||||||
|
primaryContainer 4D4F66
|
||||||
|
onPrimaryContainer BD93F9
|
||||||
|
inversePrimary 9D73D9
|
||||||
|
secondary 50FA7B
|
||||||
|
onSecondary 282A36
|
||||||
|
secondaryContainer 4D4F66
|
||||||
|
onSecondaryContainer 50FA7B
|
||||||
|
tertiary FF79C6
|
||||||
|
onTertiary 282A36
|
||||||
|
tertiaryContainer 4D4F66
|
||||||
|
onTertiaryContainer FF79C6
|
||||||
|
error FF5555
|
||||||
|
onError 282A36
|
||||||
|
errorContainer 4C3743
|
||||||
|
onErrorContainer FF5555
|
||||||
|
primaryFixed BD93F9
|
||||||
|
primaryFixedDim 9D73D9
|
||||||
|
onPrimaryFixed 282A36
|
||||||
|
onPrimaryFixedVariant 3E4153
|
||||||
|
secondaryFixed 50FA7B
|
||||||
|
secondaryFixedDim 30DA5B
|
||||||
|
onSecondaryFixed 282A36
|
||||||
|
onSecondaryFixedVariant 3E4153
|
||||||
|
tertiaryFixed FF79C6
|
||||||
|
tertiaryFixedDim DF59A6
|
||||||
|
onTertiaryFixed 282A36
|
||||||
|
onTertiaryFixedVariant 3E4153
|
||||||
|
term0 282A36
|
||||||
|
term1 FF5555
|
||||||
|
term2 50FA7B
|
||||||
|
term3 F1FA8C
|
||||||
|
term4 BD93F9
|
||||||
|
term5 FF79C6
|
||||||
|
term6 8BE9FD
|
||||||
|
term7 F8F8F2
|
||||||
|
term8 6272A4
|
||||||
|
term9 FF6E6E
|
||||||
|
term10 69FF94
|
||||||
|
term11 FFFFA5
|
||||||
|
term12 D6ACFF
|
||||||
|
term13 FF92DF
|
||||||
|
term14 A4FFFF
|
||||||
|
term15 FFFFFF
|
||||||
|
rosewater F8F8F2
|
||||||
|
flamingo FFB86C
|
||||||
|
pink FF79C6
|
||||||
|
mauve BD93F9
|
||||||
|
red FF5555
|
||||||
|
maroon FF6E6E
|
||||||
|
peach FFB86C
|
||||||
|
yellow F1FA8C
|
||||||
|
green 50FA7B
|
||||||
|
teal 8BE9FD
|
||||||
|
sky 8BE9FD
|
||||||
|
sapphire 8BE9FD
|
||||||
|
blue BD93F9
|
||||||
|
lavender BD93F9
|
||||||
|
klink BD93F9
|
||||||
|
klinkSelection BD93F9
|
||||||
|
kvisited FF79C6
|
||||||
|
kvisitedSelection FF79C6
|
||||||
|
knegative FF5555
|
||||||
|
knegativeSelection FF5555
|
||||||
|
kneutral F1FA8C
|
||||||
|
kneutralSelection F1FA8C
|
||||||
|
kpositive 50FA7B
|
||||||
|
kpositiveSelection 50FA7B
|
||||||
|
text F8F8F2
|
||||||
|
subtext1 F8F8F2
|
||||||
|
subtext0 E6E6E6
|
||||||
|
overlay2 A0A0A0
|
||||||
|
overlay1 8A8A8A
|
||||||
|
overlay0 6272A4
|
||||||
|
surface2 3E4153
|
||||||
|
surface1 343746
|
||||||
|
surface0 282A36
|
||||||
|
base 282A36
|
||||||
|
mantle 21222C
|
||||||
|
crust 191A21
|
||||||
|
success 50FA7B
|
||||||
|
onSuccess 282A36
|
||||||
|
successContainer 4D4F66
|
||||||
|
onSuccessContainer F8F8F2
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor 8CCFB0
|
||||||
|
secondary_paletteKeyColor E5C76B
|
||||||
|
tertiary_paletteKeyColor E5A5C5
|
||||||
|
neutral_paletteKeyColor 2D3139
|
||||||
|
neutral_variant_paletteKeyColor 3A3F4B
|
||||||
|
background 141B1E
|
||||||
|
onBackground E8E8E8
|
||||||
|
surface 232A2D
|
||||||
|
surfaceDim 0F1416
|
||||||
|
surfaceBright 3A4145
|
||||||
|
surfaceContainerLowest 0A0E10
|
||||||
|
surfaceContainerLow 2A3235
|
||||||
|
surfaceContainer 2E3538
|
||||||
|
surfaceContainerHigh 3A4145
|
||||||
|
surfaceContainerHighest 434A4E
|
||||||
|
onSurface E8E8E8
|
||||||
|
surfaceVariant 2E3538
|
||||||
|
onSurfaceVariant B3B9BE
|
||||||
|
inverseSurface E8E8E8
|
||||||
|
inverseOnSurface 141B1E
|
||||||
|
outline 8A8F94
|
||||||
|
outlineVariant 3A4145
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint 8CCFB0
|
||||||
|
primary 8CCFB0
|
||||||
|
onPrimary 141B1E
|
||||||
|
primaryContainer 3A4145
|
||||||
|
onPrimaryContainer 8CCFB0
|
||||||
|
inversePrimary 6FA98C
|
||||||
|
secondary E5C76B
|
||||||
|
onSecondary 141B1E
|
||||||
|
secondaryContainer 3A4145
|
||||||
|
onSecondaryContainer E5C76B
|
||||||
|
tertiary E5A5C5
|
||||||
|
onTertiary 141B1E
|
||||||
|
tertiaryContainer 3A4145
|
||||||
|
onTertiaryContainer E5A5C5
|
||||||
|
error E57474
|
||||||
|
onError 141B1E
|
||||||
|
errorContainer 4A2C2C
|
||||||
|
onErrorContainer E57474
|
||||||
|
primaryFixed 8CCFB0
|
||||||
|
primaryFixedDim 6FA98C
|
||||||
|
onPrimaryFixed 141B1E
|
||||||
|
onPrimaryFixedVariant 3A3F4B
|
||||||
|
secondaryFixed E5C76B
|
||||||
|
secondaryFixedDim C4A855
|
||||||
|
onSecondaryFixed 141B1E
|
||||||
|
onSecondaryFixedVariant 3A3F4B
|
||||||
|
tertiaryFixed E5A5C5
|
||||||
|
tertiaryFixedDim C888A4
|
||||||
|
onTertiaryFixed 141B1E
|
||||||
|
onTertiaryFixedVariant 3A3F4B
|
||||||
|
term0 141B1E
|
||||||
|
term1 E57474
|
||||||
|
term2 8CCFB0
|
||||||
|
term3 E5C76B
|
||||||
|
term4 67B0E8
|
||||||
|
term5 C47FD5
|
||||||
|
term6 6CBFBF
|
||||||
|
term7 E8E8E8
|
||||||
|
term8 8A8F94
|
||||||
|
term9 E57474
|
||||||
|
term10 8CCFB0
|
||||||
|
term11 E5C76B
|
||||||
|
term12 67B0E8
|
||||||
|
term13 C47FD5
|
||||||
|
term14 6CBFBF
|
||||||
|
term15 E8E8E8
|
||||||
|
rosewater E8E8E8
|
||||||
|
flamingo E5A5C5
|
||||||
|
pink E5A5C5
|
||||||
|
mauve C47FD5
|
||||||
|
red E57474
|
||||||
|
maroon E57474
|
||||||
|
peach E59A84
|
||||||
|
yellow E5C76B
|
||||||
|
green 8CCFB0
|
||||||
|
teal 6CBFBF
|
||||||
|
sky 67B0E8
|
||||||
|
sapphire 67B0E8
|
||||||
|
blue 67B0E8
|
||||||
|
lavender 67B0E8
|
||||||
|
klink 67B0E8
|
||||||
|
klinkSelection 67B0E8
|
||||||
|
kvisited C47FD5
|
||||||
|
kvisitedSelection C47FD5
|
||||||
|
knegative E57474
|
||||||
|
knegativeSelection E57474
|
||||||
|
kneutral E5C76B
|
||||||
|
kneutralSelection E5C76B
|
||||||
|
kpositive 8CCFB0
|
||||||
|
kpositiveSelection 8CCFB0
|
||||||
|
text E8E8E8
|
||||||
|
subtext1 B3B9BE
|
||||||
|
subtext0 8A8F94
|
||||||
|
overlay2 7A7F84
|
||||||
|
overlay1 6A6F74
|
||||||
|
overlay0 5A5F64
|
||||||
|
surface2 2E3538
|
||||||
|
surface1 232A2D
|
||||||
|
surface0 1A2023
|
||||||
|
base 141B1E
|
||||||
|
mantle 0F1416
|
||||||
|
crust 0A0E10
|
||||||
|
success 8CCFB0
|
||||||
|
onSuccess 141B1E
|
||||||
|
successContainer 3A4145
|
||||||
|
onSuccessContainer E8E8E8
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor 7FBBB3
|
||||||
|
secondary_paletteKeyColor 83C092
|
||||||
|
tertiary_paletteKeyColor A7C080
|
||||||
|
neutral_paletteKeyColor 2E383C
|
||||||
|
neutral_variant_paletteKeyColor 374145
|
||||||
|
background 1E2326
|
||||||
|
onBackground D3C6AA
|
||||||
|
surface 252B2E
|
||||||
|
surfaceDim 15191C
|
||||||
|
surfaceBright 343E43
|
||||||
|
surfaceContainerLowest 11161A
|
||||||
|
surfaceContainerLow 2A3338
|
||||||
|
surfaceContainer 2E383C
|
||||||
|
surfaceContainerHigh 343E43
|
||||||
|
surfaceContainerHighest 3A4448
|
||||||
|
onSurface D3C6AA
|
||||||
|
surfaceVariant 374145
|
||||||
|
onSurfaceVariant 9DA9A0
|
||||||
|
inverseSurface D3C6AA
|
||||||
|
inverseOnSurface 1E2326
|
||||||
|
outline 859289
|
||||||
|
outlineVariant 414B50
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint 7FBBB3
|
||||||
|
primary 7FBBB3
|
||||||
|
onPrimary 1E2326
|
||||||
|
primaryContainer 414B50
|
||||||
|
onPrimaryContainer A7C080
|
||||||
|
inversePrimary 5A9A8F
|
||||||
|
secondary 83C092
|
||||||
|
onSecondary 1E2326
|
||||||
|
secondaryContainer 414B50
|
||||||
|
onSecondaryContainer A7C080
|
||||||
|
tertiary A7C080
|
||||||
|
onTertiary 1E2326
|
||||||
|
tertiaryContainer 414B50
|
||||||
|
onTertiaryContainer D3C6AA
|
||||||
|
error E67E80
|
||||||
|
onError 1E2326
|
||||||
|
errorContainer 4C3743
|
||||||
|
onErrorContainer E67E80
|
||||||
|
primaryFixed 7FBBB3
|
||||||
|
primaryFixedDim 5A9A8F
|
||||||
|
onPrimaryFixed 1E2326
|
||||||
|
onPrimaryFixedVariant 374145
|
||||||
|
secondaryFixed 83C092
|
||||||
|
secondaryFixedDim 5F8C6F
|
||||||
|
onSecondaryFixed 1E2326
|
||||||
|
onSecondaryFixedVariant 374145
|
||||||
|
tertiaryFixed A7C080
|
||||||
|
tertiaryFixedDim 7F9D5F
|
||||||
|
onTertiaryFixed 1E2326
|
||||||
|
onTertiaryFixedVariant 374145
|
||||||
|
term0 1E2326
|
||||||
|
term1 E67E80
|
||||||
|
term2 A7C080
|
||||||
|
term3 DBBC7F
|
||||||
|
term4 7FBBB3
|
||||||
|
term5 D699B6
|
||||||
|
term6 83C092
|
||||||
|
term7 D3C6AA
|
||||||
|
term8 859289
|
||||||
|
term9 E67E80
|
||||||
|
term10 A7C080
|
||||||
|
term11 DBBC7F
|
||||||
|
term12 7FBBB3
|
||||||
|
term13 D699B6
|
||||||
|
term14 83C092
|
||||||
|
term15 D3C6AA
|
||||||
|
rosewater D3C6AA
|
||||||
|
flamingo D699B6
|
||||||
|
pink D699B6
|
||||||
|
mauve D699B6
|
||||||
|
red E67E80
|
||||||
|
maroon E67E80
|
||||||
|
peach E69875
|
||||||
|
yellow DBBC7F
|
||||||
|
green A7C080
|
||||||
|
teal 83C092
|
||||||
|
sky 7FBBB3
|
||||||
|
sapphire 7FBBB3
|
||||||
|
blue 7FBBB3
|
||||||
|
lavender 7FBBB3
|
||||||
|
klink 7FBBB3
|
||||||
|
klinkSelection 7FBBB3
|
||||||
|
kvisited 83C092
|
||||||
|
kvisitedSelection 83C092
|
||||||
|
knegative E67E80
|
||||||
|
knegativeSelection E67E80
|
||||||
|
kneutral DBBC7F
|
||||||
|
kneutralSelection DBBC7F
|
||||||
|
kpositive A7C080
|
||||||
|
kpositiveSelection A7C080
|
||||||
|
text D3C6AA
|
||||||
|
subtext1 9DA9A0
|
||||||
|
subtext0 859289
|
||||||
|
overlay2 7A8478
|
||||||
|
overlay1 6F7A6F
|
||||||
|
overlay0 5F6A5F
|
||||||
|
surface2 2E383C
|
||||||
|
surface1 252B2E
|
||||||
|
surface0 1E2326
|
||||||
|
base 1E2326
|
||||||
|
mantle 15191C
|
||||||
|
crust 11161A
|
||||||
|
success A7C080
|
||||||
|
onSuccess 1E2326
|
||||||
|
successContainer 414B50
|
||||||
|
onSuccessContainer D3C6AA
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor 7FBBB3
|
||||||
|
secondary_paletteKeyColor 83C092
|
||||||
|
tertiary_paletteKeyColor A7C080
|
||||||
|
neutral_paletteKeyColor 2E383C
|
||||||
|
neutral_variant_paletteKeyColor 374145
|
||||||
|
background 2D353B
|
||||||
|
onBackground D3C6AA
|
||||||
|
surface 343F44
|
||||||
|
surfaceDim 232A2E
|
||||||
|
surfaceBright 475258
|
||||||
|
surfaceContainerLowest 1E2326
|
||||||
|
surfaceContainerLow 3B474E
|
||||||
|
surfaceContainer 3D484D
|
||||||
|
surfaceContainerHigh 475258
|
||||||
|
surfaceContainerHighest 4C5258
|
||||||
|
onSurface D3C6AA
|
||||||
|
surfaceVariant 3D484D
|
||||||
|
onSurfaceVariant 9DA9A0
|
||||||
|
inverseSurface D3C6AA
|
||||||
|
inverseOnSurface 2D353B
|
||||||
|
outline 859289
|
||||||
|
outlineVariant 475258
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint 7FBBB3
|
||||||
|
primary 7FBBB3
|
||||||
|
onPrimary 2D353B
|
||||||
|
primaryContainer 475258
|
||||||
|
onPrimaryContainer A7C080
|
||||||
|
inversePrimary 5A9A8F
|
||||||
|
secondary 83C092
|
||||||
|
onSecondary 2D353B
|
||||||
|
secondaryContainer 475258
|
||||||
|
onSecondaryContainer A7C080
|
||||||
|
tertiary A7C080
|
||||||
|
onTertiary 2D353B
|
||||||
|
tertiaryContainer 475258
|
||||||
|
onTertiaryContainer D3C6AA
|
||||||
|
error E67E80
|
||||||
|
onError 2D353B
|
||||||
|
errorContainer 4C3743
|
||||||
|
onErrorContainer E67E80
|
||||||
|
primaryFixed 7FBBB3
|
||||||
|
primaryFixedDim 5A9A8F
|
||||||
|
onPrimaryFixed 2D353B
|
||||||
|
onPrimaryFixedVariant 374145
|
||||||
|
secondaryFixed 83C092
|
||||||
|
secondaryFixedDim 5F8C6F
|
||||||
|
onSecondaryFixed 2D353B
|
||||||
|
onSecondaryFixedVariant 374145
|
||||||
|
tertiaryFixed A7C080
|
||||||
|
tertiaryFixedDim 7F9D5F
|
||||||
|
onTertiaryFixed 2D353B
|
||||||
|
onTertiaryFixedVariant 374145
|
||||||
|
term0 2D353B
|
||||||
|
term1 E67E80
|
||||||
|
term2 A7C080
|
||||||
|
term3 DBBC7F
|
||||||
|
term4 7FBBB3
|
||||||
|
term5 D699B6
|
||||||
|
term6 83C092
|
||||||
|
term7 D3C6AA
|
||||||
|
term8 859289
|
||||||
|
term9 E67E80
|
||||||
|
term10 A7C080
|
||||||
|
term11 DBBC7F
|
||||||
|
term12 7FBBB3
|
||||||
|
term13 D699B6
|
||||||
|
term14 83C092
|
||||||
|
term15 D3C6AA
|
||||||
|
rosewater D3C6AA
|
||||||
|
flamingo D699B6
|
||||||
|
pink D699B6
|
||||||
|
mauve D699B6
|
||||||
|
red E67E80
|
||||||
|
maroon E67E80
|
||||||
|
peach E69875
|
||||||
|
yellow DBBC7F
|
||||||
|
green A7C080
|
||||||
|
teal 83C092
|
||||||
|
sky 7FBBB3
|
||||||
|
sapphire 7FBBB3
|
||||||
|
blue 7FBBB3
|
||||||
|
lavender 7FBBB3
|
||||||
|
klink 7FBBB3
|
||||||
|
klinkSelection 7FBBB3
|
||||||
|
kvisited 83C092
|
||||||
|
kvisitedSelection 83C092
|
||||||
|
knegative E67E80
|
||||||
|
knegativeSelection E67E80
|
||||||
|
kneutral DBBC7F
|
||||||
|
kneutralSelection DBBC7F
|
||||||
|
kpositive A7C080
|
||||||
|
kpositiveSelection A7C080
|
||||||
|
text D3C6AA
|
||||||
|
subtext1 9DA9A0
|
||||||
|
subtext0 859289
|
||||||
|
overlay2 7A8478
|
||||||
|
overlay1 6F7A6F
|
||||||
|
overlay0 5F6A5F
|
||||||
|
surface2 3D484D
|
||||||
|
surface1 343F44
|
||||||
|
surface0 2D353B
|
||||||
|
base 2D353B
|
||||||
|
mantle 232A2E
|
||||||
|
crust 1E2326
|
||||||
|
success A7C080
|
||||||
|
onSuccess 2D353B
|
||||||
|
successContainer 475258
|
||||||
|
onSuccessContainer D3C6AA
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor 3A94C5
|
||||||
|
secondary_paletteKeyColor 35A77C
|
||||||
|
tertiary_paletteKeyColor 8DA101
|
||||||
|
neutral_paletteKeyColor E6E2CC
|
||||||
|
neutral_variant_paletteKeyColor E0DCC7
|
||||||
|
background FDF6E3
|
||||||
|
onBackground 5C6A72
|
||||||
|
surface F3EAD3
|
||||||
|
surfaceDim FDF6E3
|
||||||
|
surfaceBright FFFBF0
|
||||||
|
surfaceContainerLowest FFFBF0
|
||||||
|
surfaceContainerLow FDF6E3
|
||||||
|
surfaceContainer F3EAD3
|
||||||
|
surfaceContainerHigh EAE4CA
|
||||||
|
surfaceContainerHighest E0DCC7
|
||||||
|
onSurface 5C6A72
|
||||||
|
surfaceVariant EAE4CA
|
||||||
|
onSurfaceVariant 6F7C84
|
||||||
|
inverseSurface 5C6A72
|
||||||
|
inverseOnSurface FDF6E3
|
||||||
|
outline 939F91
|
||||||
|
outlineVariant E0DCC7
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint 3A94C5
|
||||||
|
primary 3A94C5
|
||||||
|
onPrimary FFFBF0
|
||||||
|
primaryContainer E0DCC7
|
||||||
|
onPrimaryContainer 8DA101
|
||||||
|
inversePrimary 5FAFD7
|
||||||
|
secondary 35A77C
|
||||||
|
onSecondary FFFBF0
|
||||||
|
secondaryContainer E0DCC7
|
||||||
|
onSecondaryContainer 8DA101
|
||||||
|
tertiary 8DA101
|
||||||
|
onTertiary FFFBF0
|
||||||
|
tertiaryContainer E0DCC7
|
||||||
|
onTertiaryContainer 5C6A72
|
||||||
|
error F85552
|
||||||
|
onError FFFBF0
|
||||||
|
errorContainer E6E2CC
|
||||||
|
onErrorContainer F85552
|
||||||
|
primaryFixed 3A94C5
|
||||||
|
primaryFixedDim 5FAFD7
|
||||||
|
onPrimaryFixed FFFBF0
|
||||||
|
onPrimaryFixedVariant E0DCC7
|
||||||
|
secondaryFixed 35A77C
|
||||||
|
secondaryFixedDim 5FC198
|
||||||
|
onSecondaryFixed FFFBF0
|
||||||
|
onSecondaryFixedVariant E0DCC7
|
||||||
|
tertiaryFixed 8DA101
|
||||||
|
tertiaryFixedDim A7C080
|
||||||
|
onTertiaryFixed FFFBF0
|
||||||
|
onTertiaryFixedVariant E0DCC7
|
||||||
|
term0 5C6A72
|
||||||
|
term1 F85552
|
||||||
|
term2 8DA101
|
||||||
|
term3 DFA000
|
||||||
|
term4 3A94C5
|
||||||
|
term5 DF69BA
|
||||||
|
term6 35A77C
|
||||||
|
term7 5C6A72
|
||||||
|
term8 939F91
|
||||||
|
term9 F85552
|
||||||
|
term10 8DA101
|
||||||
|
term11 DFA000
|
||||||
|
term12 3A94C5
|
||||||
|
term13 DF69BA
|
||||||
|
term14 35A77C
|
||||||
|
term15 5C6A72
|
||||||
|
rosewater 5C6A72
|
||||||
|
flamingo DF69BA
|
||||||
|
pink DF69BA
|
||||||
|
mauve DF69BA
|
||||||
|
red F85552
|
||||||
|
maroon F85552
|
||||||
|
peach E66868
|
||||||
|
yellow DFA000
|
||||||
|
green 8DA101
|
||||||
|
teal 35A77C
|
||||||
|
sky 3A94C5
|
||||||
|
sapphire 3A94C5
|
||||||
|
blue 3A94C5
|
||||||
|
lavender 3A94C5
|
||||||
|
klink 3A94C5
|
||||||
|
klinkSelection 3A94C5
|
||||||
|
kvisited 35A77C
|
||||||
|
kvisitedSelection 35A77C
|
||||||
|
knegative F85552
|
||||||
|
knegativeSelection F85552
|
||||||
|
kneutral DFA000
|
||||||
|
kneutralSelection DFA000
|
||||||
|
kpositive 8DA101
|
||||||
|
kpositiveSelection 8DA101
|
||||||
|
text 5C6A72
|
||||||
|
subtext1 6F7C84
|
||||||
|
subtext0 939F91
|
||||||
|
overlay2 A6B0A0
|
||||||
|
overlay1 B9C0B0
|
||||||
|
overlay0 CCD3C2
|
||||||
|
surface2 EAE4CA
|
||||||
|
surface1 F3EAD3
|
||||||
|
surface0 FDF6E3
|
||||||
|
base FDF6E3
|
||||||
|
mantle FFFBF0
|
||||||
|
crust FFFEF9
|
||||||
|
success 8DA101
|
||||||
|
onSuccess FFFBF0
|
||||||
|
successContainer E0DCC7
|
||||||
|
onSuccessContainer 5C6A72
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor 7FBBB3
|
||||||
|
secondary_paletteKeyColor 83C092
|
||||||
|
tertiary_paletteKeyColor A7C080
|
||||||
|
neutral_paletteKeyColor 2E383C
|
||||||
|
neutral_variant_paletteKeyColor 374145
|
||||||
|
background 323C41
|
||||||
|
onBackground D3C6AA
|
||||||
|
surface 3A454A
|
||||||
|
surfaceDim 282F34
|
||||||
|
surfaceBright 4D585D
|
||||||
|
surfaceContainerLowest 232A2E
|
||||||
|
surfaceContainerLow 414D54
|
||||||
|
surfaceContainer 434E53
|
||||||
|
surfaceContainerHigh 4D585D
|
||||||
|
surfaceContainerHighest 525C61
|
||||||
|
onSurface D3C6AA
|
||||||
|
surfaceVariant 434E53
|
||||||
|
onSurfaceVariant 9DA9A0
|
||||||
|
inverseSurface D3C6AA
|
||||||
|
inverseOnSurface 323C41
|
||||||
|
outline 859289
|
||||||
|
outlineVariant 4D585D
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint 7FBBB3
|
||||||
|
primary 7FBBB3
|
||||||
|
onPrimary 323C41
|
||||||
|
primaryContainer 4D585D
|
||||||
|
onPrimaryContainer A7C080
|
||||||
|
inversePrimary 5A9A8F
|
||||||
|
secondary 83C092
|
||||||
|
onSecondary 323C41
|
||||||
|
secondaryContainer 4D585D
|
||||||
|
onSecondaryContainer A7C080
|
||||||
|
tertiary A7C080
|
||||||
|
onTertiary 323C41
|
||||||
|
tertiaryContainer 4D585D
|
||||||
|
onTertiaryContainer D3C6AA
|
||||||
|
error E67E80
|
||||||
|
onError 323C41
|
||||||
|
errorContainer 4C3743
|
||||||
|
onErrorContainer E67E80
|
||||||
|
primaryFixed 7FBBB3
|
||||||
|
primaryFixedDim 5A9A8F
|
||||||
|
onPrimaryFixed 323C41
|
||||||
|
onPrimaryFixedVariant 374145
|
||||||
|
secondaryFixed 83C092
|
||||||
|
secondaryFixedDim 5F8C6F
|
||||||
|
onSecondaryFixed 323C41
|
||||||
|
onSecondaryFixedVariant 374145
|
||||||
|
tertiaryFixed A7C080
|
||||||
|
tertiaryFixedDim 7F9D5F
|
||||||
|
onTertiaryFixed 323C41
|
||||||
|
onTertiaryFixedVariant 374145
|
||||||
|
term0 323C41
|
||||||
|
term1 E67E80
|
||||||
|
term2 A7C080
|
||||||
|
term3 DBBC7F
|
||||||
|
term4 7FBBB3
|
||||||
|
term5 D699B6
|
||||||
|
term6 83C092
|
||||||
|
term7 D3C6AA
|
||||||
|
term8 859289
|
||||||
|
term9 E67E80
|
||||||
|
term10 A7C080
|
||||||
|
term11 DBBC7F
|
||||||
|
term12 7FBBB3
|
||||||
|
term13 D699B6
|
||||||
|
term14 83C092
|
||||||
|
term15 D3C6AA
|
||||||
|
rosewater D3C6AA
|
||||||
|
flamingo D699B6
|
||||||
|
pink D699B6
|
||||||
|
mauve D699B6
|
||||||
|
red E67E80
|
||||||
|
maroon E67E80
|
||||||
|
peach E69875
|
||||||
|
yellow DBBC7F
|
||||||
|
green A7C080
|
||||||
|
teal 83C092
|
||||||
|
sky 7FBBB3
|
||||||
|
sapphire 7FBBB3
|
||||||
|
blue 7FBBB3
|
||||||
|
lavender 7FBBB3
|
||||||
|
klink 7FBBB3
|
||||||
|
klinkSelection 7FBBB3
|
||||||
|
kvisited 83C092
|
||||||
|
kvisitedSelection 83C092
|
||||||
|
knegative E67E80
|
||||||
|
knegativeSelection E67E80
|
||||||
|
kneutral DBBC7F
|
||||||
|
kneutralSelection DBBC7F
|
||||||
|
kpositive A7C080
|
||||||
|
kpositiveSelection A7C080
|
||||||
|
text D3C6AA
|
||||||
|
subtext1 9DA9A0
|
||||||
|
subtext0 859289
|
||||||
|
overlay2 7A8478
|
||||||
|
overlay1 6F7A6F
|
||||||
|
overlay0 5F6A5F
|
||||||
|
surface2 434E53
|
||||||
|
surface1 3A454A
|
||||||
|
surface0 323C41
|
||||||
|
base 323C41
|
||||||
|
mantle 282F34
|
||||||
|
crust 232A2E
|
||||||
|
success A7C080
|
||||||
|
onSuccess 323C41
|
||||||
|
successContainer 4D585D
|
||||||
|
onSuccessContainer D3C6AA
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor 88C0D0
|
||||||
|
secondary_paletteKeyColor 81A1C1
|
||||||
|
tertiary_paletteKeyColor 5E81AC
|
||||||
|
neutral_paletteKeyColor 3B4252
|
||||||
|
neutral_variant_paletteKeyColor 434C5E
|
||||||
|
background 2E3440
|
||||||
|
onBackground ECEFF4
|
||||||
|
surface 3B4252
|
||||||
|
surfaceDim 242933
|
||||||
|
surfaceBright 4C566A
|
||||||
|
surfaceContainerLowest 1F232C
|
||||||
|
surfaceContainerLow 424A5E
|
||||||
|
surfaceContainer 434C5E
|
||||||
|
surfaceContainerHigh 4C566A
|
||||||
|
surfaceContainerHighest 55606E
|
||||||
|
onSurface ECEFF4
|
||||||
|
surfaceVariant 434C5E
|
||||||
|
onSurfaceVariant D8DEE9
|
||||||
|
inverseSurface ECEFF4
|
||||||
|
inverseOnSurface 2E3440
|
||||||
|
outline 616E88
|
||||||
|
outlineVariant 4C566A
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint 88C0D0
|
||||||
|
primary 88C0D0
|
||||||
|
onPrimary 2E3440
|
||||||
|
primaryContainer 4C566A
|
||||||
|
onPrimaryContainer 88C0D0
|
||||||
|
inversePrimary 6FA3B3
|
||||||
|
secondary 81A1C1
|
||||||
|
onSecondary 2E3440
|
||||||
|
secondaryContainer 4C566A
|
||||||
|
onSecondaryContainer 81A1C1
|
||||||
|
tertiary 5E81AC
|
||||||
|
onTertiary 2E3440
|
||||||
|
tertiaryContainer 4C566A
|
||||||
|
onTertiaryContainer 5E81AC
|
||||||
|
error BF616A
|
||||||
|
onError 2E3440
|
||||||
|
errorContainer 4C3743
|
||||||
|
onErrorContainer BF616A
|
||||||
|
primaryFixed 88C0D0
|
||||||
|
primaryFixedDim 6FA3B3
|
||||||
|
onPrimaryFixed 2E3440
|
||||||
|
onPrimaryFixedVariant 434C5E
|
||||||
|
secondaryFixed 81A1C1
|
||||||
|
secondaryFixedDim 6A84A4
|
||||||
|
onSecondaryFixed 2E3440
|
||||||
|
onSecondaryFixedVariant 434C5E
|
||||||
|
tertiaryFixed 5E81AC
|
||||||
|
tertiaryFixedDim 4A6A8F
|
||||||
|
onTertiaryFixed 2E3440
|
||||||
|
onTertiaryFixedVariant 434C5E
|
||||||
|
term0 3B4252
|
||||||
|
term1 BF616A
|
||||||
|
term2 A3BE8C
|
||||||
|
term3 EBCB8B
|
||||||
|
term4 81A1C1
|
||||||
|
term5 B48EAD
|
||||||
|
term6 88C0D0
|
||||||
|
term7 E5E9F0
|
||||||
|
term8 4C566A
|
||||||
|
term9 BF616A
|
||||||
|
term10 A3BE8C
|
||||||
|
term11 EBCB8B
|
||||||
|
term12 81A1C1
|
||||||
|
term13 B48EAD
|
||||||
|
term14 8FBCBB
|
||||||
|
term15 ECEFF4
|
||||||
|
rosewater ECEFF4
|
||||||
|
flamingo B48EAD
|
||||||
|
pink B48EAD
|
||||||
|
mauve B48EAD
|
||||||
|
red BF616A
|
||||||
|
maroon BF616A
|
||||||
|
peach D08770
|
||||||
|
yellow EBCB8B
|
||||||
|
green A3BE8C
|
||||||
|
teal 8FBCBB
|
||||||
|
sky 88C0D0
|
||||||
|
sapphire 81A1C1
|
||||||
|
blue 5E81AC
|
||||||
|
lavender 5E81AC
|
||||||
|
klink 88C0D0
|
||||||
|
klinkSelection 88C0D0
|
||||||
|
kvisited 81A1C1
|
||||||
|
kvisitedSelection 81A1C1
|
||||||
|
knegative BF616A
|
||||||
|
knegativeSelection BF616A
|
||||||
|
kneutral EBCB8B
|
||||||
|
kneutralSelection EBCB8B
|
||||||
|
kpositive A3BE8C
|
||||||
|
kpositiveSelection A3BE8C
|
||||||
|
text ECEFF4
|
||||||
|
subtext1 D8DEE9
|
||||||
|
subtext0 616E88
|
||||||
|
overlay2 5A677E
|
||||||
|
overlay1 4F5B73
|
||||||
|
overlay0 434C5E
|
||||||
|
surface2 434C5E
|
||||||
|
surface1 3B4252
|
||||||
|
surface0 2E3440
|
||||||
|
base 2E3440
|
||||||
|
mantle 242933
|
||||||
|
crust 1F232C
|
||||||
|
success A3BE8C
|
||||||
|
onSuccess 2E3440
|
||||||
|
successContainer 4C566A
|
||||||
|
onSuccessContainer ECEFF4
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor 268BD2
|
||||||
|
secondary_paletteKeyColor 2AA198
|
||||||
|
tertiary_paletteKeyColor 6C71C4
|
||||||
|
neutral_paletteKeyColor 002B36
|
||||||
|
neutral_variant_paletteKeyColor 073642
|
||||||
|
background 002B36
|
||||||
|
onBackground FDF6E3
|
||||||
|
surface 073642
|
||||||
|
surfaceDim 001F29
|
||||||
|
surfaceBright 0D4250
|
||||||
|
surfaceContainerLowest 00151D
|
||||||
|
surfaceContainerLow 0A404E
|
||||||
|
surfaceContainer 094B59
|
||||||
|
surfaceContainerHigh 0D4250
|
||||||
|
surfaceContainerHighest 11505E
|
||||||
|
onSurface FDF6E3
|
||||||
|
surfaceVariant 094B59
|
||||||
|
onSurfaceVariant 93A1A1
|
||||||
|
inverseSurface FDF6E3
|
||||||
|
inverseOnSurface 002B36
|
||||||
|
outline 586E75
|
||||||
|
outlineVariant 0D4250
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint 268BD2
|
||||||
|
primary 268BD2
|
||||||
|
onPrimary 002B36
|
||||||
|
primaryContainer 0D4250
|
||||||
|
onPrimaryContainer 268BD2
|
||||||
|
inversePrimary 2075B2
|
||||||
|
secondary 2AA198
|
||||||
|
onSecondary 002B36
|
||||||
|
secondaryContainer 0D4250
|
||||||
|
onSecondaryContainer 2AA198
|
||||||
|
tertiary 6C71C4
|
||||||
|
onTertiary 002B36
|
||||||
|
tertiaryContainer 0D4250
|
||||||
|
onTertiaryContainer 6C71C4
|
||||||
|
error DC322F
|
||||||
|
onError 002B36
|
||||||
|
errorContainer 4C3743
|
||||||
|
onErrorContainer DC322F
|
||||||
|
primaryFixed 268BD2
|
||||||
|
primaryFixedDim 2075B2
|
||||||
|
onPrimaryFixed 002B36
|
||||||
|
onPrimaryFixedVariant 094B59
|
||||||
|
secondaryFixed 2AA198
|
||||||
|
secondaryFixedDim 228178
|
||||||
|
onSecondaryFixed 002B36
|
||||||
|
onSecondaryFixedVariant 094B59
|
||||||
|
tertiaryFixed 6C71C4
|
||||||
|
tertiaryFixedDim 5C61A4
|
||||||
|
onTertiaryFixed 002B36
|
||||||
|
onTertiaryFixedVariant 094B59
|
||||||
|
term0 002B36
|
||||||
|
term1 DC322F
|
||||||
|
term2 859900
|
||||||
|
term3 B58900
|
||||||
|
term4 268BD2
|
||||||
|
term5 D33682
|
||||||
|
term6 2AA198
|
||||||
|
term7 EEE8D5
|
||||||
|
term8 586E75
|
||||||
|
term9 CB4B16
|
||||||
|
term10 859900
|
||||||
|
term11 B58900
|
||||||
|
term12 268BD2
|
||||||
|
term13 6C71C4
|
||||||
|
term14 2AA198
|
||||||
|
term15 FDF6E3
|
||||||
|
rosewater FDF6E3
|
||||||
|
flamingo EEE8D5
|
||||||
|
pink D33682
|
||||||
|
mauve 6C71C4
|
||||||
|
red DC322F
|
||||||
|
maroon CB4B16
|
||||||
|
peach CB4B16
|
||||||
|
yellow B58900
|
||||||
|
green 859900
|
||||||
|
teal 2AA198
|
||||||
|
sky 2AA198
|
||||||
|
sapphire 268BD2
|
||||||
|
blue 268BD2
|
||||||
|
lavender 6C71C4
|
||||||
|
klink 268BD2
|
||||||
|
klinkSelection 268BD2
|
||||||
|
kvisited 6C71C4
|
||||||
|
kvisitedSelection 6C71C4
|
||||||
|
knegative DC322F
|
||||||
|
knegativeSelection DC322F
|
||||||
|
kneutral B58900
|
||||||
|
kneutralSelection B58900
|
||||||
|
kpositive 859900
|
||||||
|
kpositiveSelection 859900
|
||||||
|
text FDF6E3
|
||||||
|
subtext1 93A1A1
|
||||||
|
subtext0 839496
|
||||||
|
overlay2 657B83
|
||||||
|
overlay1 586E75
|
||||||
|
overlay0 073642
|
||||||
|
surface2 094B59
|
||||||
|
surface1 073642
|
||||||
|
surface0 002B36
|
||||||
|
base 002B36
|
||||||
|
mantle 001F29
|
||||||
|
crust 00151D
|
||||||
|
success 859900
|
||||||
|
onSuccess 002B36
|
||||||
|
successContainer 0D4250
|
||||||
|
onSuccessContainer FDF6E3
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
primary_paletteKeyColor 7AA2F7
|
||||||
|
secondary_paletteKeyColor 9ECE6A
|
||||||
|
tertiary_paletteKeyColor BB9AF7
|
||||||
|
neutral_paletteKeyColor 1A1B26
|
||||||
|
neutral_variant_paletteKeyColor 292E42
|
||||||
|
background 1A1B26
|
||||||
|
onBackground C0CAF5
|
||||||
|
surface 24283B
|
||||||
|
surfaceDim 16161E
|
||||||
|
surfaceBright 3B4261
|
||||||
|
surfaceContainerLowest 0F0F14
|
||||||
|
surfaceContainerLow 2B3048
|
||||||
|
surfaceContainer 2A2F41
|
||||||
|
surfaceContainerHigh 3B4261
|
||||||
|
surfaceContainerHighest 414868
|
||||||
|
onSurface C0CAF5
|
||||||
|
surfaceVariant 2A2F41
|
||||||
|
onSurfaceVariant A9B1D6
|
||||||
|
inverseSurface C0CAF5
|
||||||
|
inverseOnSurface 1A1B26
|
||||||
|
outline 565F89
|
||||||
|
outlineVariant 3B4261
|
||||||
|
shadow 000000
|
||||||
|
scrim 000000
|
||||||
|
surfaceTint 7AA2F7
|
||||||
|
primary 7AA2F7
|
||||||
|
onPrimary 1A1B26
|
||||||
|
primaryContainer 3B4261
|
||||||
|
onPrimaryContainer 7AA2F7
|
||||||
|
inversePrimary 5A7FD7
|
||||||
|
secondary 9ECE6A
|
||||||
|
onSecondary 1A1B26
|
||||||
|
secondaryContainer 3B4261
|
||||||
|
onSecondaryContainer 9ECE6A
|
||||||
|
tertiary BB9AF7
|
||||||
|
onTertiary 1A1B26
|
||||||
|
tertiaryContainer 3B4261
|
||||||
|
onTertiaryContainer BB9AF7
|
||||||
|
error F7768E
|
||||||
|
onError 1A1B26
|
||||||
|
errorContainer 4C3743
|
||||||
|
onErrorContainer F7768E
|
||||||
|
primaryFixed 7AA2F7
|
||||||
|
primaryFixedDim 5A7FD7
|
||||||
|
onPrimaryFixed 1A1B26
|
||||||
|
onPrimaryFixedVariant 2A2F41
|
||||||
|
secondaryFixed 9ECE6A
|
||||||
|
secondaryFixedDim 7EAE4A
|
||||||
|
onSecondaryFixed 1A1B26
|
||||||
|
onSecondaryFixedVariant 2A2F41
|
||||||
|
tertiaryFixed BB9AF7
|
||||||
|
tertiaryFixedDim 9B7AD7
|
||||||
|
onTertiaryFixed 1A1B26
|
||||||
|
onTertiaryFixedVariant 2A2F41
|
||||||
|
term0 1A1B26
|
||||||
|
term1 F7768E
|
||||||
|
term2 9ECE6A
|
||||||
|
term3 E0AF68
|
||||||
|
term4 7AA2F7
|
||||||
|
term5 BB9AF7
|
||||||
|
term6 7DCFFF
|
||||||
|
term7 C0CAF5
|
||||||
|
term8 565F89
|
||||||
|
term9 F7768E
|
||||||
|
term10 9ECE6A
|
||||||
|
term11 E0AF68
|
||||||
|
term12 7AA2F7
|
||||||
|
term13 BB9AF7
|
||||||
|
term14 7DCFFF
|
||||||
|
term15 C0CAF5
|
||||||
|
rosewater C0CAF5
|
||||||
|
flamingo BB9AF7
|
||||||
|
pink F7768E
|
||||||
|
mauve BB9AF7
|
||||||
|
red F7768E
|
||||||
|
maroon E0AF68
|
||||||
|
peach FF9E64
|
||||||
|
yellow E0AF68
|
||||||
|
green 9ECE6A
|
||||||
|
teal 1ABC9C
|
||||||
|
sky 7DCFFF
|
||||||
|
sapphire 2AC3DE
|
||||||
|
blue 7AA2F7
|
||||||
|
lavender 7DCFFF
|
||||||
|
klink 7AA2F7
|
||||||
|
klinkSelection 7AA2F7
|
||||||
|
kvisited BB9AF7
|
||||||
|
kvisitedSelection BB9AF7
|
||||||
|
knegative F7768E
|
||||||
|
knegativeSelection F7768E
|
||||||
|
kneutral E0AF68
|
||||||
|
kneutralSelection E0AF68
|
||||||
|
kpositive 9ECE6A
|
||||||
|
kpositiveSelection 9ECE6A
|
||||||
|
text C0CAF5
|
||||||
|
subtext1 A9B1D6
|
||||||
|
subtext0 9AA5CE
|
||||||
|
overlay2 787C99
|
||||||
|
overlay1 696D85
|
||||||
|
overlay0 565F89
|
||||||
|
surface2 2A2F41
|
||||||
|
surface1 24283B
|
||||||
|
surface0 1A1B26
|
||||||
|
base 1A1B26
|
||||||
|
mantle 16161E
|
||||||
|
crust 0F0F14
|
||||||
|
success 9ECE6A
|
||||||
|
onSuccess 1A1B26
|
||||||
|
successContainer 3B4261
|
||||||
|
onSuccessContainer C0CAF5
|
||||||
@@ -15,8 +15,10 @@
|
|||||||
@import url("https://refact0r.github.io/midnight-discord/build/midnight.css");
|
@import url("https://refact0r.github.io/midnight-discord/build/midnight.css");
|
||||||
|
|
||||||
body {
|
body {
|
||||||
/* font, change to '' for default discord font */
|
/* font options */
|
||||||
--font: "figtree";
|
--font: "figtree"; /* change to '' for default discord font */
|
||||||
|
--code-font: "JetBrainsMono NF"; /* change to '' for default discord font */
|
||||||
|
font-weight: 400; /* normal text font weight. DOES NOT AFFECT BOLD TEXT */
|
||||||
|
|
||||||
/* sizes */
|
/* sizes */
|
||||||
--gap: 12px; /* spacing between panels */
|
--gap: 12px; /* spacing between panels */
|
||||||
@@ -27,13 +29,14 @@ body {
|
|||||||
--animations: on; /* turn off to disable all midnight animations/transitions */
|
--animations: on; /* turn off to disable all midnight animations/transitions */
|
||||||
--list-item-transition: 0.2s ease; /* transition for list items */
|
--list-item-transition: 0.2s ease; /* transition for list items */
|
||||||
--dms-icon-svg-transition: 0.4s ease; /* transition for the dms icon */
|
--dms-icon-svg-transition: 0.4s ease; /* transition for the dms icon */
|
||||||
|
--border-hover-transition: 0.2s ease; /* transition for borders when hovered */
|
||||||
|
|
||||||
/* top bar options */
|
/* top bar options */
|
||||||
--top-bar-height: var(
|
--top-bar-height: var(
|
||||||
--gap
|
--gap
|
||||||
); /* height of the titlebar/top bar (discord default is 36px, 24px recommended if moving/hiding top bar buttons) */
|
); /* height of the titlebar/top bar (discord default is 36px, 24px recommended if moving/hiding top bar buttons) */
|
||||||
--top-bar-button-position: hide; /* off: default position, hide: hide inbox/support buttons completely, serverlist: move inbox button to server list, titlebar: move inbox button to titlebar (will hide title) */
|
--top-bar-button-position: titlebar; /* off: default position, hide: hide inbox/support buttons completely, serverlist: move inbox button to server list, titlebar: move inbox button to titlebar (will hide title) */
|
||||||
--top-bar-title-position: hide; /* off: default centered position, hide: hide title completely, left: left align title (like old discord) */
|
--top-bar-title-position: off; /* off: default centered position, hide: hide title completely, left: left align title (like old discord) */
|
||||||
--subtle-top-bar-title: off; /* off: default, on: hide the icon and use subtle text color (like old discord) */
|
--subtle-top-bar-title: off; /* off: default, on: hide the icon and use subtle text color (like old discord) */
|
||||||
|
|
||||||
/* window controls */
|
/* window controls */
|
||||||
@@ -42,9 +45,9 @@ body {
|
|||||||
|
|
||||||
/* dms button icon options */
|
/* dms button icon options */
|
||||||
--custom-dms-icon: custom; /* off: use default discord icon, hide: remove icon entirely, custom: use custom icon */
|
--custom-dms-icon: custom; /* off: use default discord icon, hide: remove icon entirely, custom: use custom icon */
|
||||||
--dms-icon-svg-url: url("https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg"); /* icon svg url. MUST BE A SVG. */
|
--dms-icon-svg-url: url("https://refact0r.github.io/midnight-discord/assets/Font_Awesome_5_solid_moon.svg"); /* icon svg url. MUST BE A SVG. */
|
||||||
--dms-icon-svg-size: 90%; /* size of the svg (css mask-size) */
|
--dms-icon-svg-size: 90%; /* size of the svg (css mask-size) */
|
||||||
--dms-icon-color-before: var(--icon-secondary); /* normal icon color */
|
--dms-icon-color-before: var(--icon-subtle); /* normal icon color */
|
||||||
--dms-icon-color-after: var(--white); /* icon color when button is hovered/selected */
|
--dms-icon-color-after: var(--white); /* icon color when button is hovered/selected */
|
||||||
|
|
||||||
/* dms button background options */
|
/* dms button background options */
|
||||||
@@ -71,12 +74,11 @@ body {
|
|||||||
--bg-floating: #{c.$surface}; /* you can set this to a more opaque color if floating panels look too transparent */
|
--bg-floating: #{c.$surface}; /* you can set this to a more opaque color if floating panels look too transparent */
|
||||||
|
|
||||||
/* chatbar options */
|
/* chatbar options */
|
||||||
--custom-chatbar: aligned; /* off: default chatbar, aligned: chatbar aligned with the user panel, separated: chatbar separated from chat */
|
--custom-chatbar: off; /* off: default chatbar, separated: chatbar separated from chat */
|
||||||
--chatbar-height: 47px; /* height of the chatbar (52px by default, 47px recommended for aligned, 56px recommended for separated) */
|
--chatbar-height: 47px; /* height of the chatbar (56px by default, 47px to align with user panel, 56px recommended for separated) */
|
||||||
--chatbar-padding: 8px; /* padding of the chatbar. only applies in aligned mode. */
|
|
||||||
|
|
||||||
/* other options */
|
/* other options */
|
||||||
--small-user-panel: off; /* turn on to make the user panel smaller like in old discord */
|
--small-user-panel: off; /* off: default user panel, on: smaller user panel like in old discord */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* color options */
|
/* color options */
|
||||||
|
|||||||
@@ -15,3 +15,7 @@
|
|||||||
@define-color sidebar_fg_color @window_fg_color;
|
@define-color sidebar_fg_color @window_fg_color;
|
||||||
@define-color sidebar_border_color @window_bg_color;
|
@define-color sidebar_border_color @window_bg_color;
|
||||||
@define-color sidebar_backdrop_color @window_bg_color;
|
@define-color sidebar_backdrop_color @window_bg_color;
|
||||||
|
@define-color theme_selected_bg_color alpha(@accent_color, 0.15);
|
||||||
|
@define-color theme_selected_fg_color @primary;
|
||||||
|
|
||||||
|
@import "thunar.css";
|
||||||
|
|||||||
@@ -0,0 +1,202 @@
|
|||||||
|
/* Thunar theme */
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Global Resets
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
.thunar * {
|
||||||
|
outline: none;
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Window & Background
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
.thunar.background {
|
||||||
|
background: {{ $surface }};
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .titlebar {
|
||||||
|
background: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .titlebutton.close {
|
||||||
|
margin: 0 15px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Layout Containers
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
/* Paned separator between sidebar and main view */
|
||||||
|
.thunar paned > separator {
|
||||||
|
min-width: 4px;
|
||||||
|
margin-right: -7px;
|
||||||
|
margin-left: -7px;
|
||||||
|
background: none;
|
||||||
|
background-image: none;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Main file view frame */
|
||||||
|
.thunar .frame.standard-view {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px 15px 0 0;
|
||||||
|
border-radius: 15px;
|
||||||
|
background-color: {{ $surfaceContainerLow }};
|
||||||
|
animation: fading 400ms ease forwards;
|
||||||
|
opacity: 0;
|
||||||
|
animation-delay: 250ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .frame.standard-view .view:not(.rubberband),
|
||||||
|
.thunar .frame.standard-view .view *:not(.rubberband) {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .frame.standard-view .view *:selected {
|
||||||
|
color: {{ $primary }};
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .rubberband {
|
||||||
|
background-color: alpha({{ $primary }}, 0.15);
|
||||||
|
border: 1px solid alpha({{ $primary }}, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Tabs */
|
||||||
|
.thunar header.top {
|
||||||
|
background: none;
|
||||||
|
padding: 0 10px 0 0;
|
||||||
|
margin: 3px 0 -3px -2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar header.top tabs .reorderable-page {
|
||||||
|
margin: 0;
|
||||||
|
transition: all ease 300ms;
|
||||||
|
}
|
||||||
|
.thunar header.top tabs .reorderable-page + .reorderable-page {
|
||||||
|
margin: 0 0 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar header.top tabs .reorderable-page:hover {
|
||||||
|
background-color: alpha({{ $primary }}, 0.08);
|
||||||
|
|
||||||
|
}
|
||||||
|
.thunar header.top tabs .reorderable-page:checked {
|
||||||
|
color: {{ $primary }};
|
||||||
|
background-color: alpha({{ $primary }}, 0.15);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Sidebar Navigation
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
.thunar .sidebar {
|
||||||
|
padding: 0 20px;
|
||||||
|
background: none;
|
||||||
|
animation: fading 600ms ease forwards;
|
||||||
|
animation-delay: 100ms;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .sidebar .view {
|
||||||
|
padding: 8px 4px;
|
||||||
|
border-radius: 10px;
|
||||||
|
background: none;
|
||||||
|
transition: all ease 300ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .sidebar .view:hover {
|
||||||
|
background: alpha({{ $onSurface }}, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .sidebar .view:selected {
|
||||||
|
background: alpha({{ $primary }}, 0.15);
|
||||||
|
color: {{ $primary }};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Path Bar & Location Buttons
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
.thunar .path-bar-button {
|
||||||
|
margin: 0;
|
||||||
|
padding: 8px 5px;
|
||||||
|
transition: all ease 0.4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .location-button.toggle:checked,
|
||||||
|
.thunar .path-bar-button.toggle:checked {
|
||||||
|
padding: 8px 25px;
|
||||||
|
background: alpha({{ $primary }}, 0.15);
|
||||||
|
color: {{ $primary }};
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .location-button.path-bar-button:not(:checked) {
|
||||||
|
background-color: {{ $surfaceContainerLow }};
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .location-button.path-bar-button:not(:checked):hover {
|
||||||
|
background: alpha({{ $primary }}, 0.08);
|
||||||
|
color: alpha({{ $primary }}, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .location-button.toggle+.location-button.toggle:checked {
|
||||||
|
margin-left: 0px;
|
||||||
|
padding: 0 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .titlebar {
|
||||||
|
padding: 15px 0 5px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Buttons
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
.thunar button.toggle:checked {
|
||||||
|
color: {{ $primary }};
|
||||||
|
}
|
||||||
|
|
||||||
|
.thunar .image-button {
|
||||||
|
padding: 8px;
|
||||||
|
margin: 0 0 0 8px;
|
||||||
|
transition: all ease 0.4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Status Bar
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
.thunar statusbar {
|
||||||
|
background-color: {{ $surfaceContainerLow }};
|
||||||
|
border-radius: 15px;
|
||||||
|
padding: 10px 10px;
|
||||||
|
margin: 15px 5px 15px -10px;
|
||||||
|
color: {{ $onSurface }};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Image preview
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
.thunar box.vertical .image {
|
||||||
|
margin: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* =============================================================================
|
||||||
|
Animation
|
||||||
|
============================================================================= */
|
||||||
|
|
||||||
|
@keyframes fading {
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -71,6 +71,7 @@ def parse_args() -> (argparse.ArgumentParser, argparse.Namespace):
|
|||||||
record_parser.add_argument("-r", "--region", nargs="?", const="slurp", help="record a region")
|
record_parser.add_argument("-r", "--region", nargs="?", const="slurp", help="record a region")
|
||||||
record_parser.add_argument("-s", "--sound", action="store_true", help="record audio")
|
record_parser.add_argument("-s", "--sound", action="store_true", help="record audio")
|
||||||
record_parser.add_argument("-p", "--pause", action="store_true", help="pause/resume the recording")
|
record_parser.add_argument("-p", "--pause", action="store_true", help="pause/resume the recording")
|
||||||
|
record_parser.add_argument("-c", "--clipboard", action="store_true", help="copy recording path to clipboard")
|
||||||
|
|
||||||
# Create parser for clipboard opts
|
# Create parser for clipboard opts
|
||||||
clipboard_parser = command_parser.add_parser("clipboard", help="open clipboard history")
|
clipboard_parser = command_parser.add_parser("clipboard", help="open clipboard history")
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
from pathlib import Path
|
||||||
import json
|
import json
|
||||||
import re
|
import re
|
||||||
import shutil
|
import shutil
|
||||||
@@ -7,7 +8,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 +64,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)
|
||||||
|
|
||||||
@@ -99,6 +109,10 @@ class Command:
|
|||||||
except IOError:
|
except IOError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
if self.args.clipboard:
|
||||||
|
file_uri = Path(new_path).resolve().as_uri() + "\n"
|
||||||
|
subprocess.run(["wl-copy", "--type", "text/uri-list"], input=file_uri.encode())
|
||||||
|
|
||||||
action = notify(
|
action = notify(
|
||||||
"--action=watch=Watch",
|
"--action=watch=Watch",
|
||||||
"--action=open=Open",
|
"--action=open=Open",
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ def get_colours_for_image(image: Path | str = wallpaper_thumbnail_path, scheme=N
|
|||||||
scheme = get_scheme()
|
scheme = get_scheme()
|
||||||
|
|
||||||
cache_base = scheme_cache_dir / compute_hash(image)
|
cache_base = scheme_cache_dir / compute_hash(image)
|
||||||
cache = (cache_base / scheme.variant / scheme.mode).with_suffix(".json")
|
cache = (cache_base / scheme.variant / scheme.flavour / scheme.mode).with_suffix(".json")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with cache.open("r") as f:
|
with cache.open("r") as f:
|
||||||
|
|||||||
@@ -142,7 +142,7 @@ def lighten(colour: Hct, amount: float) -> Hct:
|
|||||||
|
|
||||||
def darken(colour: Hct, amount: float) -> Hct:
|
def darken(colour: Hct, amount: float) -> Hct:
|
||||||
diff = colour.tone * amount
|
diff = colour.tone * amount
|
||||||
return Hct.from_hct(colour.hue, colour.chroma + diff / 5, colour.tone - diff)
|
return Hct.from_hct(colour.hue, colour.chroma - diff / 5, colour.tone - diff)
|
||||||
|
|
||||||
|
|
||||||
def get_scheme(scheme: str) -> DynamicScheme:
|
def get_scheme(scheme: str) -> DynamicScheme:
|
||||||
@@ -172,10 +172,21 @@ def gen_scheme(scheme, primary: Hct) -> dict[str, str]:
|
|||||||
|
|
||||||
# Material colours
|
# Material colours
|
||||||
primary_scheme = get_scheme(scheme.variant)(primary, not light, 0)
|
primary_scheme = get_scheme(scheme.variant)(primary, not light, 0)
|
||||||
for colour in vars(MaterialDynamicColors).keys():
|
if hasattr(MaterialDynamicColors, "all_colors"): # materialyoucolor-python >= 3.0.0
|
||||||
colour_name = getattr(MaterialDynamicColors, colour)
|
dyn_colours = MaterialDynamicColors()
|
||||||
if hasattr(colour_name, "get_hct"):
|
for colour in dyn_colours.all_colors:
|
||||||
colours[colour] = colour_name.get_hct(primary_scheme)
|
colours[colour.name] = colour.get_hct(primary_scheme)
|
||||||
|
else:
|
||||||
|
for colour in vars(MaterialDynamicColors).keys():
|
||||||
|
colour_name = getattr(MaterialDynamicColors, colour)
|
||||||
|
if hasattr(colour_name, "get_hct"):
|
||||||
|
colours[colour] = colour_name.get_hct(primary_scheme)
|
||||||
|
|
||||||
|
# Backwards compatibility with old colour names
|
||||||
|
if "primaryPaletteKeyColor" in colours: # materialyoucolor-python >= 3.0.0
|
||||||
|
for colour in "primary", "secondary", "tertiary", "neutral":
|
||||||
|
colours[f"{colour}_paletteKeyColor"] = colours[f"{colour}PaletteKeyColor"]
|
||||||
|
colours["neutral_variant_paletteKeyColor"] = colours["neutralVariantPaletteKeyColor"]
|
||||||
|
|
||||||
# Harmonize terminal colours
|
# Harmonize terminal colours
|
||||||
for i, hct in enumerate(light_gruvbox if light else dark_gruvbox):
|
for i, hct in enumerate(light_gruvbox if light else dark_gruvbox):
|
||||||
@@ -205,6 +216,12 @@ def gen_scheme(scheme, primary: Hct) -> dict[str, str]:
|
|||||||
for name, hct in colours.items():
|
for name, hct in colours.items():
|
||||||
colours[name].chroma -= 15
|
colours[name].chroma -= 15
|
||||||
|
|
||||||
|
# Darken surfaces for hard flavour
|
||||||
|
if scheme.flavour == "hard":
|
||||||
|
for colour in "background", *(k for k in colours.keys() if k.startswith("surface")):
|
||||||
|
colours[colour] = lighten(colours[colour], 0.4) if light else darken(colours[colour], 0.8)
|
||||||
|
colours["term0"] = lighten(colours["term0"], 0.4) if light else darken(colours["term0"], 0.9)
|
||||||
|
|
||||||
# FIXME: deprecated stuff
|
# FIXME: deprecated stuff
|
||||||
colours["text"] = colours["onBackground"]
|
colours["text"] = colours["onBackground"]
|
||||||
colours["subtext1"] = colours["onSurfaceVariant"]
|
colours["subtext1"] = colours["onSurfaceVariant"]
|
||||||
@@ -219,6 +236,18 @@ def gen_scheme(scheme, primary: Hct) -> dict[str, str]:
|
|||||||
colours["mantle"] = darken(colours["surface"], 0.03)
|
colours["mantle"] = darken(colours["surface"], 0.03)
|
||||||
colours["crust"] = darken(colours["surface"], 0.05)
|
colours["crust"] = darken(colours["surface"], 0.05)
|
||||||
|
|
||||||
|
# More darkening if hard flavour
|
||||||
|
if scheme.flavour == "hard":
|
||||||
|
for colour in "base", "mantle", "crust":
|
||||||
|
colours[colour] = lighten(colours[colour], 0.4) if light else darken(colours[colour], 0.9)
|
||||||
|
for i in range(3):
|
||||||
|
colours[f"overlay{i}"] = (
|
||||||
|
lighten(colours[f"overlay{i}"], 0.4) if light else darken(colours[f"overlay{i}"], 0.8)
|
||||||
|
)
|
||||||
|
colours[f"surface{i}"] = (
|
||||||
|
lighten(colours[f"surface{i}"], 0.4) if light else darken(colours[f"surface{i}"], 0.8)
|
||||||
|
)
|
||||||
|
|
||||||
# For debugging
|
# For debugging
|
||||||
# print("\n".join(["{}: \x1b[48;2;{};{};{}m \x1b[0m".format(n, *c.to_rgba()[:3]) for n, c in colours.items()]))
|
# print("\n".join(["{}: \x1b[48;2;{};{};{}m \x1b[0m".format(n, *c.to_rgba()[:3]) for n, c in colours.items()]))
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
@@ -229,7 +229,9 @@ def get_scheme_flavours(name: str = None) -> list[str]:
|
|||||||
if name is None:
|
if name is None:
|
||||||
name = get_scheme().name
|
name = get_scheme().name
|
||||||
|
|
||||||
return ["default"] if name == "dynamic" else [f.name for f in (scheme_data_dir / name).iterdir() if f.is_dir()]
|
return (
|
||||||
|
["default", "hard"] if name == "dynamic" else [f.name for f in (scheme_data_dir / name).iterdir() if f.is_dir()]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_scheme_modes(name: str = None, flavour: str = None) -> list[str]:
|
def get_scheme_modes(name: str = None, flavour: str = None) -> list[str]:
|
||||||
|
|||||||
+193
-42
@@ -2,6 +2,10 @@ import json
|
|||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import tempfile
|
||||||
|
import shutil
|
||||||
|
import fcntl
|
||||||
|
import sys
|
||||||
|
|
||||||
from caelestia.utils.colour import get_dynamic_colours
|
from caelestia.utils.colour import get_dynamic_colours
|
||||||
from caelestia.utils.logging import log_exception
|
from caelestia.utils.logging import log_exception
|
||||||
@@ -37,7 +41,7 @@ def gen_replace(colours: dict[str, str], template: Path, hash: bool = False) ->
|
|||||||
return template
|
return template
|
||||||
|
|
||||||
|
|
||||||
def gen_replace_dynamic(colours: dict[str, str], template: Path) -> str:
|
def gen_replace_dynamic(colours: dict[str, str], template: Path, mode: str) -> str:
|
||||||
def fill_colour(match: re.Match) -> str:
|
def fill_colour(match: re.Match) -> str:
|
||||||
data = match.group(1).strip().split(".")
|
data = match.group(1).strip().split(".")
|
||||||
if len(data) != 2:
|
if len(data) != 2:
|
||||||
@@ -48,10 +52,16 @@ def gen_replace_dynamic(colours: dict[str, str], template: Path) -> str:
|
|||||||
return getattr(colours_dyn[col], form)
|
return getattr(colours_dyn[col], form)
|
||||||
|
|
||||||
# match atomic {{ . }} pairs
|
# match atomic {{ . }} pairs
|
||||||
field = r"\{\{((?:(?!\{\{|\}\}).)*)\}\}"
|
dotField = r"\{\{((?:(?!\{\{|\}\}).)*)\}\}"
|
||||||
|
|
||||||
|
# match {{ mode }}
|
||||||
|
modeField = r"\{\{\s*mode\s*\}\}"
|
||||||
|
|
||||||
colours_dyn = get_dynamic_colours(colours)
|
colours_dyn = get_dynamic_colours(colours)
|
||||||
template_content = template.read_text()
|
template_content = template.read_text()
|
||||||
template_filled = re.sub(field, fill_colour, template_content)
|
|
||||||
|
template_filled = re.sub(dotField, fill_colour, template_content)
|
||||||
|
template_filled = re.sub(modeField, mode, template_filled)
|
||||||
|
|
||||||
return template_filled
|
return template_filled
|
||||||
|
|
||||||
@@ -101,8 +111,11 @@ def gen_sequences(colours: dict[str, str]) -> str:
|
|||||||
|
|
||||||
def write_file(path: Path, content: str) -> None:
|
def write_file(path: Path, content: str) -> None:
|
||||||
path.parent.mkdir(parents=True, exist_ok=True)
|
path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
path.write_text(content)
|
|
||||||
|
|
||||||
|
with tempfile.NamedTemporaryFile("w") as f:
|
||||||
|
f.write(content)
|
||||||
|
f.flush()
|
||||||
|
shutil.move(f.name, path)
|
||||||
|
|
||||||
@log_exception
|
@log_exception
|
||||||
def apply_terms(sequences: str) -> None:
|
def apply_terms(sequences: str) -> None:
|
||||||
@@ -114,9 +127,15 @@ def apply_terms(sequences: str) -> None:
|
|||||||
for pt in pts_path.iterdir():
|
for pt in pts_path.iterdir():
|
||||||
if pt.name.isdigit():
|
if pt.name.isdigit():
|
||||||
try:
|
try:
|
||||||
with pt.open("a") as f:
|
# Use non-blocking write with timeout to prevent hangs
|
||||||
f.write(sequences)
|
import os
|
||||||
except PermissionError:
|
fd = os.open(str(pt), os.O_WRONLY | os.O_NONBLOCK | os.O_NOCTTY)
|
||||||
|
try:
|
||||||
|
os.write(fd, sequences.encode())
|
||||||
|
finally:
|
||||||
|
os.close(fd)
|
||||||
|
except (PermissionError, OSError, BlockingIOError):
|
||||||
|
# Skip terminals that are busy, closed, or inaccessible
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
@@ -169,15 +188,130 @@ def apply_htop(colours: dict[str, str]) -> None:
|
|||||||
subprocess.run(["killall", "-USR2", "htop"], stderr=subprocess.DEVNULL)
|
subprocess.run(["killall", "-USR2", "htop"], stderr=subprocess.DEVNULL)
|
||||||
|
|
||||||
|
|
||||||
|
def sync_papirus_colors(hex_color: str) -> None:
|
||||||
|
"""Sync Papirus folder icon colors using hue/saturation analysis"""
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
["which", "papirus-folders"],
|
||||||
|
capture_output=True,
|
||||||
|
check=False
|
||||||
|
)
|
||||||
|
if result.returncode != 0:
|
||||||
|
return
|
||||||
|
except Exception:
|
||||||
|
return
|
||||||
|
|
||||||
|
papirus_paths = [
|
||||||
|
Path("/usr/share/icons/Papirus"),
|
||||||
|
Path("/usr/share/icons/Papirus-Dark"),
|
||||||
|
Path.home() / ".local/share/icons/Papirus",
|
||||||
|
Path.home() / ".icons/Papirus",
|
||||||
|
]
|
||||||
|
|
||||||
|
if not any(p.exists() for p in papirus_paths):
|
||||||
|
return
|
||||||
|
|
||||||
|
r = int(hex_color[0:2], 16)
|
||||||
|
g = int(hex_color[2:4], 16)
|
||||||
|
b = int(hex_color[4:6], 16)
|
||||||
|
|
||||||
|
# Brightness and saturation
|
||||||
|
max_val = max(r, g, b)
|
||||||
|
min_val = min(r, g, b)
|
||||||
|
brightness = max_val
|
||||||
|
saturation = 0 if max_val == 0 else ((max_val - min_val) * 100) // max_val
|
||||||
|
|
||||||
|
# Low saturation = grayscale
|
||||||
|
if saturation < 20:
|
||||||
|
if brightness < 85:
|
||||||
|
color = "black"
|
||||||
|
elif brightness < 170:
|
||||||
|
color = "grey"
|
||||||
|
else:
|
||||||
|
color = "white"
|
||||||
|
# Medium-low saturation with high brightness = pale variants
|
||||||
|
elif saturation < 60 and brightness > 180:
|
||||||
|
use_pale = True
|
||||||
|
color = _determine_hue_color(r, g, b, brightness, use_pale)
|
||||||
|
else:
|
||||||
|
color = _determine_hue_color(r, g, b, brightness, False)
|
||||||
|
|
||||||
|
try:
|
||||||
|
subprocess.Popen(
|
||||||
|
["sudo", "-n", "papirus-folders", "-C", color, "-u"],
|
||||||
|
stderr=subprocess.DEVNULL,
|
||||||
|
stdout=subprocess.DEVNULL,
|
||||||
|
start_new_session=True
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def _determine_hue_color(r: int, g: int, b: int, brightness: int, use_pale: bool) -> str:
|
||||||
|
if b > r and b > g:
|
||||||
|
# Blue dominant
|
||||||
|
r_ratio = (r * 100) // b if b > 0 else 0
|
||||||
|
g_ratio = (g * 100) // b if b > 0 else 0
|
||||||
|
rg_diff = abs(r - g)
|
||||||
|
|
||||||
|
if r_ratio > 70 and g_ratio > 70:
|
||||||
|
# Both R and G high relative to B = light blue/periwinkle
|
||||||
|
if rg_diff < 15:
|
||||||
|
return "blue"
|
||||||
|
elif r > g:
|
||||||
|
return "violet"
|
||||||
|
else:
|
||||||
|
return "cyan"
|
||||||
|
elif r_ratio > 60 and r > g:
|
||||||
|
return "violet"
|
||||||
|
elif g_ratio > 60 and g > r:
|
||||||
|
return "cyan"
|
||||||
|
else:
|
||||||
|
return "blue"
|
||||||
|
elif r > g and r > b:
|
||||||
|
# Red dominant
|
||||||
|
if g > b + 30:
|
||||||
|
# Orange/yellow-ish/brown
|
||||||
|
rg_ratio = (g * 100) // r if r > 0 else 0
|
||||||
|
if use_pale:
|
||||||
|
if rg_ratio > 70 and brightness < 220:
|
||||||
|
return "palebrown"
|
||||||
|
else:
|
||||||
|
return "paleorange"
|
||||||
|
else:
|
||||||
|
if rg_ratio > 70 and brightness < 180:
|
||||||
|
return "brown"
|
||||||
|
else:
|
||||||
|
return "orange"
|
||||||
|
elif b > g + 20:
|
||||||
|
return "pink"
|
||||||
|
else:
|
||||||
|
return "pink" if use_pale else "red"
|
||||||
|
elif g > r and g > b:
|
||||||
|
# Green dominant
|
||||||
|
if r > b + 30:
|
||||||
|
return "yellow"
|
||||||
|
else:
|
||||||
|
return "green"
|
||||||
|
else:
|
||||||
|
return "grey"
|
||||||
|
|
||||||
|
|
||||||
@log_exception
|
@log_exception
|
||||||
def apply_gtk(colours: dict[str, str], mode: str) -> None:
|
def apply_gtk(colours: dict[str, str], mode: str) -> None:
|
||||||
template = gen_replace(colours, templates_dir / "gtk.css", hash=True)
|
gtk_template = gen_replace(colours, templates_dir / "gtk.css", hash=True)
|
||||||
write_file(config_dir / "gtk-3.0/gtk.css", template)
|
thunar_template = gen_replace(colours, templates_dir / "thunar.css", hash=True)
|
||||||
write_file(config_dir / "gtk-4.0/gtk.css", template)
|
|
||||||
|
for gtk_version in ["gtk-3.0", "gtk-4.0"]:
|
||||||
|
gtk_config_dir = config_dir / gtk_version
|
||||||
|
write_file(gtk_config_dir / "gtk.css", gtk_template)
|
||||||
|
write_file(gtk_config_dir / "thunar.css", thunar_template)
|
||||||
|
|
||||||
subprocess.run(["dconf", "write", "/org/gnome/desktop/interface/gtk-theme", "'adw-gtk3-dark'"])
|
subprocess.run(["dconf", "write", "/org/gnome/desktop/interface/gtk-theme", "'adw-gtk3-dark'"])
|
||||||
subprocess.run(["dconf", "write", "/org/gnome/desktop/interface/color-scheme", f"'prefer-{mode}'"])
|
subprocess.run(["dconf", "write", "/org/gnome/desktop/interface/color-scheme", f"'prefer-{mode}'"])
|
||||||
subprocess.run(["dconf", "write", "/org/gnome/desktop/interface/icon-theme", f"'Papirus-{mode.capitalize()}'"])
|
subprocess.run(["dconf", "write", "/org/gnome/desktop/interface/icon-theme", f"'Papirus-{mode.capitalize()}'"])
|
||||||
|
|
||||||
|
sync_papirus_colors(colours["primary"])
|
||||||
|
|
||||||
|
|
||||||
@log_exception
|
@log_exception
|
||||||
@@ -224,47 +358,64 @@ def apply_cava(colours: dict[str, str]) -> None:
|
|||||||
|
|
||||||
|
|
||||||
@log_exception
|
@log_exception
|
||||||
def apply_user_templates(colours: dict[str, str]) -> None:
|
def apply_user_templates(colours: dict[str, str], mode: str) -> None:
|
||||||
if not user_templates_dir.is_dir():
|
if not user_templates_dir.is_dir():
|
||||||
return
|
return
|
||||||
|
|
||||||
for file in user_templates_dir.iterdir():
|
for file in user_templates_dir.iterdir():
|
||||||
if file.is_file():
|
if file.is_file():
|
||||||
content = gen_replace_dynamic(colours, file)
|
content = gen_replace_dynamic(colours, file, mode)
|
||||||
write_file(theme_dir / file.name, content)
|
write_file(theme_dir / file.name, content)
|
||||||
|
|
||||||
|
|
||||||
def apply_colours(colours: dict[str, str], mode: str) -> None:
|
def apply_colours(colours: dict[str, str], mode: str) -> None:
|
||||||
|
# Use file-based lock to prevent concurrent theme changes
|
||||||
|
lock_file = c_state_dir / "theme.lock"
|
||||||
|
c_state_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
cfg = json.loads(user_config_path.read_text())["theme"]
|
with open(lock_file, 'w') as lock_fd:
|
||||||
except (FileNotFoundError, json.JSONDecodeError, KeyError):
|
try:
|
||||||
cfg = {}
|
fcntl.flock(lock_fd.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||||
|
except BlockingIOError:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
cfg = json.loads(user_config_path.read_text())["theme"]
|
||||||
|
except (FileNotFoundError, json.JSONDecodeError, KeyError):
|
||||||
|
cfg = {}
|
||||||
|
|
||||||
def check(key: str) -> bool:
|
def check(key: str) -> bool:
|
||||||
return cfg[key] if key in cfg else True
|
return cfg[key] if key in cfg else True
|
||||||
|
|
||||||
if check("enableTerm"):
|
if check("enableTerm"):
|
||||||
apply_terms(gen_sequences(colours))
|
apply_terms(gen_sequences(colours))
|
||||||
if check("enableHypr"):
|
if check("enableHypr"):
|
||||||
apply_hypr(gen_conf(colours))
|
apply_hypr(gen_conf(colours))
|
||||||
if check("enableDiscord"):
|
if check("enableDiscord"):
|
||||||
apply_discord(gen_scss(colours))
|
apply_discord(gen_scss(colours))
|
||||||
if check("enableSpicetify"):
|
if check("enableSpicetify"):
|
||||||
apply_spicetify(colours, mode)
|
apply_spicetify(colours, mode)
|
||||||
if check("enableFuzzel"):
|
if check("enableFuzzel"):
|
||||||
apply_fuzzel(colours)
|
apply_fuzzel(colours)
|
||||||
if check("enableBtop"):
|
if check("enableBtop"):
|
||||||
apply_btop(colours)
|
apply_btop(colours)
|
||||||
if check("enableNvtop"):
|
if check("enableNvtop"):
|
||||||
apply_nvtop(colours)
|
apply_nvtop(colours)
|
||||||
if check("enableHtop"):
|
if check("enableHtop"):
|
||||||
apply_htop(colours)
|
apply_htop(colours)
|
||||||
if check("enableGtk"):
|
if check("enableGtk"):
|
||||||
apply_gtk(colours, mode)
|
apply_gtk(colours, mode)
|
||||||
if check("enableQt"):
|
if check("enableQt"):
|
||||||
apply_qt(colours, mode)
|
apply_qt(colours, mode)
|
||||||
if check("enableWarp"):
|
if check("enableWarp"):
|
||||||
apply_warp(colours, mode)
|
apply_warp(colours, mode)
|
||||||
if check("enableCava"):
|
if check("enableCava"):
|
||||||
apply_cava(colours)
|
apply_cava(colours)
|
||||||
apply_user_templates(colours)
|
apply_user_templates(colours, mode)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
try:
|
||||||
|
lock_file.unlink()
|
||||||
|
except FileNotFoundError:
|
||||||
|
pass
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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)]
|
||||||
|
|
||||||
@@ -108,7 +106,7 @@ def get_colours_for_wall(wall: Path | str, no_smart: bool) -> None:
|
|||||||
scheme = Scheme(
|
scheme = Scheme(
|
||||||
{
|
{
|
||||||
"name": name,
|
"name": name,
|
||||||
"flavour": "default",
|
"flavour": scheme.flavour,
|
||||||
"mode": smart_opts["mode"],
|
"mode": smart_opts["mode"],
|
||||||
"variant": smart_opts["variant"],
|
"variant": smart_opts["variant"],
|
||||||
"colours": scheme.colours,
|
"colours": scheme.colours,
|
||||||
@@ -117,7 +115,7 @@ def get_colours_for_wall(wall: Path | str, no_smart: bool) -> None:
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
"name": name,
|
"name": name,
|
||||||
"flavour": "default",
|
"flavour": scheme.flavour,
|
||||||
"mode": scheme.mode,
|
"mode": scheme.mode,
|
||||||
"variant": scheme.variant,
|
"variant": scheme.variant,
|
||||||
"colours": get_colours_for_image(get_thumb(wall, cache), scheme),
|
"colours": get_colours_for_image(get_thumb(wall, cache), scheme),
|
||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user