mirror of
https://github.com/caelestia-dots/cli.git
synced 2026-06-05 14:59:29 -05:00
feat: thunar & papirus-folders theming + new schemes (#80)
* feat: GTK app theming system
- Implemented custom.css import for user-managed app themes
- process_app_themes() to dynamically update colors in imported CSS files
- Inline comment markers for color replacement (e.g, /* accent-color */)
- Papirus icon color syncing with weighted hue/saturation algorithm
This allows users to create modular app themes that automatically update when the scheme/wallpaper changes
Example usage:
.app .element { color: #24BD5C; /* accent-color */ }
.app .element:hover { background: rgba(36, 189, 92, 0.15); /* accent-color with 15% opacity */ }
* feat: atomic theme changes with locking and mode-specific CSS
- Implemented locking to prevent concurrent theme changes
- Added mode-light/mode-dark CSS markers for dynamic property reordering
- Made terminal writes and Papirus sync non-blocking to prevent hangs
- Only save scheme.json after successful theme application
Fixes race conditions during rapid theme switching and ensures Shell and GTK apps scheme stay in sync.
* theme: added to color mapping for custom theming, new schemes
* theme: quick fixes, cleanup
* theme: include thunar.css as template, with new theming system
* theme: modified GTK theming approach
- Dropped comment targeted theming in favor for existing {{ }} replacement
- [app].css.template file created for customization, bypassing built in default if present
- Handling *.template for added templates to be parsed and added to import
* theme: fixes for thunar.css
* theme: remove .template file use
* theme: path button color adjustment, non-active hover
* fixes & cleanup
* thunar css fixes
* more css fixes
* format
* fix tab vert spacing
---------
Co-authored-by: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
This commit is contained in:
@@ -18,6 +18,32 @@ The main control script for the Caelestia dotfiles.
|
||||
|
||||
</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
|
||||
|
||||
### Arch linux
|
||||
|
||||
@@ -4,7 +4,7 @@ tertiary_paletteKeyColor 376942
|
||||
neutral_paletteKeyColor 1E1E26
|
||||
neutral_variant_paletteKeyColor 23252D
|
||||
background 23262D
|
||||
onBackground 02200B
|
||||
onBackground F5F5F6
|
||||
surface 050505
|
||||
surfaceDim 1E1E24
|
||||
surfaceBright 1E1E24
|
||||
@@ -82,6 +82,16 @@ sky cefb97
|
||||
sapphire 85ef77
|
||||
blue 65eea0
|
||||
lavender 90f79e
|
||||
klink 65eea0
|
||||
klinkSelection 65eea0
|
||||
kvisited 73fa90
|
||||
kvisitedSelection 73fa90
|
||||
knegative 8affab
|
||||
knegativeSelection 8affab
|
||||
kneutral d0f9f4
|
||||
kneutralSelection d0f9f4
|
||||
kpositive 8af797
|
||||
kpositiveSelection 8af797
|
||||
text e0e3e4
|
||||
subtext1 bec8cc
|
||||
subtext0 889296
|
||||
|
||||
@@ -4,7 +4,7 @@ tertiary_paletteKeyColor 376942
|
||||
neutral_paletteKeyColor 1E1E26
|
||||
neutral_variant_paletteKeyColor 23252D
|
||||
background 23262D
|
||||
onBackground 02200B
|
||||
onBackground F5F5F6
|
||||
surface 1E1E24
|
||||
surfaceDim 1E1E24
|
||||
surfaceBright 1E1E24
|
||||
@@ -82,6 +82,16 @@ sky cefb97
|
||||
sapphire 85ef77
|
||||
blue 65eea0
|
||||
lavender 90f79e
|
||||
klink 65eea0
|
||||
klinkSelection 65eea0
|
||||
kvisited 73fa90
|
||||
kvisitedSelection 73fa90
|
||||
knegative 8affab
|
||||
knegativeSelection 8affab
|
||||
kneutral d0f9f4
|
||||
kneutralSelection d0f9f4
|
||||
kpositive 8af797
|
||||
kpositiveSelection 8af797
|
||||
text e0e3e4
|
||||
subtext1 bec8cc
|
||||
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,3 +15,7 @@
|
||||
@define-color sidebar_fg_color @window_fg_color;
|
||||
@define-color sidebar_border_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;
|
||||
}
|
||||
}
|
||||
+176
-36
@@ -4,6 +4,8 @@ import subprocess
|
||||
from pathlib import Path
|
||||
import tempfile
|
||||
import shutil
|
||||
import fcntl
|
||||
import sys
|
||||
|
||||
from caelestia.utils.colour import get_dynamic_colours
|
||||
from caelestia.utils.logging import log_exception
|
||||
@@ -125,9 +127,15 @@ def apply_terms(sequences: str) -> None:
|
||||
for pt in pts_path.iterdir():
|
||||
if pt.name.isdigit():
|
||||
try:
|
||||
with pt.open("a") as f:
|
||||
f.write(sequences)
|
||||
except PermissionError:
|
||||
# Use non-blocking write with timeout to prevent hangs
|
||||
import os
|
||||
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
|
||||
|
||||
|
||||
@@ -180,16 +188,131 @@ def apply_htop(colours: dict[str, str]) -> None:
|
||||
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
|
||||
def apply_gtk(colours: dict[str, str], mode: str) -> None:
|
||||
template = gen_replace(colours, templates_dir / "gtk.css", hash=True)
|
||||
write_file(config_dir / "gtk-3.0/gtk.css", template)
|
||||
write_file(config_dir / "gtk-4.0/gtk.css", template)
|
||||
gtk_template = gen_replace(colours, templates_dir / "gtk.css", hash=True)
|
||||
thunar_template = gen_replace(colours, templates_dir / "thunar.css", hash=True)
|
||||
|
||||
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/color-scheme", f"'prefer-{mode}'"])
|
||||
subprocess.run(["dconf", "write", "/org/gnome/desktop/interface/icon-theme", f"'Papirus-{mode.capitalize()}'"])
|
||||
|
||||
sync_papirus_colors(colours["primary"])
|
||||
|
||||
|
||||
@log_exception
|
||||
def apply_qt(colours: dict[str, str], mode: str) -> None:
|
||||
@@ -246,36 +369,53 @@ def apply_user_templates(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:
|
||||
cfg = json.loads(user_config_path.read_text())["theme"]
|
||||
except (FileNotFoundError, json.JSONDecodeError, KeyError):
|
||||
cfg = {}
|
||||
with open(lock_file, 'w') as lock_fd:
|
||||
try:
|
||||
fcntl.flock(lock_fd.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||
except BlockingIOError:
|
||||
return
|
||||
|
||||
def check(key: str) -> bool:
|
||||
return cfg[key] if key in cfg else True
|
||||
try:
|
||||
cfg = json.loads(user_config_path.read_text())["theme"]
|
||||
except (FileNotFoundError, json.JSONDecodeError, KeyError):
|
||||
cfg = {}
|
||||
|
||||
if check("enableTerm"):
|
||||
apply_terms(gen_sequences(colours))
|
||||
if check("enableHypr"):
|
||||
apply_hypr(gen_conf(colours))
|
||||
if check("enableDiscord"):
|
||||
apply_discord(gen_scss(colours))
|
||||
if check("enableSpicetify"):
|
||||
apply_spicetify(colours, mode)
|
||||
if check("enableFuzzel"):
|
||||
apply_fuzzel(colours)
|
||||
if check("enableBtop"):
|
||||
apply_btop(colours)
|
||||
if check("enableNvtop"):
|
||||
apply_nvtop(colours)
|
||||
if check("enableHtop"):
|
||||
apply_htop(colours)
|
||||
if check("enableGtk"):
|
||||
apply_gtk(colours, mode)
|
||||
if check("enableQt"):
|
||||
apply_qt(colours, mode)
|
||||
if check("enableWarp"):
|
||||
apply_warp(colours, mode)
|
||||
if check("enableCava"):
|
||||
apply_cava(colours)
|
||||
apply_user_templates(colours, mode)
|
||||
def check(key: str) -> bool:
|
||||
return cfg[key] if key in cfg else True
|
||||
|
||||
if check("enableTerm"):
|
||||
apply_terms(gen_sequences(colours))
|
||||
if check("enableHypr"):
|
||||
apply_hypr(gen_conf(colours))
|
||||
if check("enableDiscord"):
|
||||
apply_discord(gen_scss(colours))
|
||||
if check("enableSpicetify"):
|
||||
apply_spicetify(colours, mode)
|
||||
if check("enableFuzzel"):
|
||||
apply_fuzzel(colours)
|
||||
if check("enableBtop"):
|
||||
apply_btop(colours)
|
||||
if check("enableNvtop"):
|
||||
apply_nvtop(colours)
|
||||
if check("enableHtop"):
|
||||
apply_htop(colours)
|
||||
if check("enableGtk"):
|
||||
apply_gtk(colours, mode)
|
||||
if check("enableQt"):
|
||||
apply_qt(colours, mode)
|
||||
if check("enableWarp"):
|
||||
apply_warp(colours, mode)
|
||||
if check("enableCava"):
|
||||
apply_cava(colours)
|
||||
apply_user_templates(colours, mode)
|
||||
|
||||
finally:
|
||||
try:
|
||||
lock_file.unlink()
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user