From ff70920a08fcfadcf1e65fb34d213c293fe4e3f7 Mon Sep 17 00:00:00 2001 From: nekochemist Date: Thu, 30 Apr 2026 02:32:19 +0500 Subject: [PATCH] modified: config/Kvantum/kvantum.kvconfig new file: config/Kvantum/matugen/matugen.kvconfig new file: config/Kvantum/matugen/matugen.svg modified: config/btop/btop.conf new file: config/btop/themes/matugen.theme modified: config/cava/config new file: config/cava/themes/matugen modified: config/clipse/config.json new file: config/clipse/matugen.json modified: config/fish/config.fish modified: config/fish/fish_variables new file: config/fish/functions/bx.fish deleted: config/fish/functions/fish_prompt.fish new file: config/fish/functions/ntodo.fish new file: config/fish/functions/o.fish modified: config/foot/foot.ini new file: config/foot/themes/input-matugen-theme.ini new file: config/foot/themes/input-matugen-theme.ini.bak new file: config/foot/themes/matugen-theme.ini new file: config/foot/themes/matugen-theme.ini.bak modified: config/foot/themes/theme.ini new file: config/foot/themes/theme.ini.bak new file: config/gtk-2.0/gtkfilechooser.ini new file: config/gtk-3.0/bookmarks new file: config/gtk-3.0/colors.css new file: config/gtk-3.0/colors.css.bak new file: config/gtk-3.0/colors.css.nak new file: config/gtk-3.0/gtk.css new file: config/gtk-3.0/gtk.css.backup new file: config/gtk-3.0/gtk.css.backup.1776208757 new file: config/gtk-3.0/settings.ini new file: config/gtk-4.0/assets new file: config/gtk-4.0/colors.css new file: config/gtk-4.0/colors.css.bak new file: config/gtk-4.0/gtk-dark.css new file: config/gtk-4.0/gtk.css new file: config/gtk-4.0/gtk.css.backup renamed: config/niri/dms/windowrules.kdl -> config/gtk-4.0/libadwaita-tweaks.css new file: config/gtk-4.0/libadwaita.css new file: config/gtk-4.0/settings.ini new file: config/hypr/colors-hyprlock.conf new file: config/hypr/colors.conf modified: config/hypr/hyprlock.conf modified: config/hypr/hyprlock.conf.bak modified: config/hypr/hyprtoolkit.conf modified: config/hyprwave/config.conf modified: config/hyprwhspr/config.json modified: config/hyprwhspr/mic_osd.pid new file: config/ironbar/colors.css modified: config/ironbar/config.json deleted: config/ironbar/schema-v0.18.0.json new file: config/ironbar/scripts/clipse.sh new file: config/ironbar/scripts/matugen.sh new file: config/ironbar/scripts/matugen.sh.bak modified: config/ironbar/scripts/pomo new file: config/ironbar/scripts/volume.sh modified: config/ironbar/style.css new file: config/ironbar/style.css.bak modified: config/kitty/current-theme.conf deleted: config/kitty/current-theme1.conf deleted: config/kitty/dank-tabs.conf modified: config/kitty/kitty.conf modified: config/kitty/kitty.conf.bak new file: config/kitty/themes/Matugen.conf modified: config/matugen/config.toml deleted: config/matugen/custom3.json new file: config/matugen/scripts/foot-apply-colors.sh new file: config/matugen/scripts/foot-apply-colors.sh.bak new file: config/matugen/scripts/foot-apply.sh new file: config/matugen/scripts/hyprwave-reload.sh new file: config/matugen/scripts/ironbar-toggle.sh new file: config/matugen/scripts/matugen-foot-apply.sh new file: config/matugen/scripts/swayosd-reload.sh new file: config/matugen/scripts/walker.sh new file: config/matugen/templates/Matugen.colors new file: config/matugen/templates/alacritty.toml new file: config/matugen/templates/btop.theme new file: config/matugen/templates/cava-colors.ini new file: config/matugen/templates/clipse_theme.json new file: config/matugen/templates/colors.css new file: config/matugen/templates/cosmic_postprocess.py new file: config/matugen/templates/cosmic_theme.ron new file: config/matugen/templates/dunstrc-colors new file: config/matugen/templates/firefox-colors.css new file: config/matugen/templates/foot-apply-colors.sh new file: config/matugen/templates/foot.ini new file: config/matugen/templates/fuzzel.ini new file: config/matugen/templates/ghostty new file: config/matugen/templates/gtk-colors.css new file: config/matugen/templates/helix.toml new file: config/matugen/templates/heroic.css new file: config/matugen/templates/hyprland-colors.conf new file: config/matugen/templates/hyprlock.conf new file: config/matugen/templates/hyprtoolkit.conf new file: config/matugen/templates/hyprwave.css new file: config/matugen/templates/hypwave.css new file: config/matugen/templates/ironbar.css new file: config/matugen/templates/kitty-colors.conf new file: config/matugen/templates/kvantum-colors.kvconfig new file: config/matugen/templates/kvantum-colors.svg new file: config/matugen/templates/labwc new file: config/matugen/templates/mako new file: config/matugen/templates/mango.conf new file: config/matugen/templates/matugen.obt new file: config/matugen/templates/mcfly.toml new file: config/matugen/templates/micro.micro new file: config/matugen/templates/midnight-discord.css new file: config/matugen/templates/neovim.lua new file: config/matugen/templates/neovim/README.md new file: config/matugen/templates/neovim/init.lua new file: config/matugen/templates/neovim/template.lua new file: config/matugen/templates/niri-colors.kdl new file: config/matugen/templates/nvim-colors.vim new file: config/matugen/templates/obsidian.css new file: config/matugen/templates/opencode-colors.json new file: config/matugen/templates/prismlauncher.json new file: config/matugen/templates/pywalfox-colors.json new file: config/matugen/templates/qtct-colors.conf new file: config/matugen/templates/quickshell.json new file: config/matugen/templates/quickshell.qml new file: config/matugen/templates/rmpc/nix-hm-example/README.md new file: config/matugen/templates/rmpc/nix-hm-example/matugen/default.nix new file: config/matugen/templates/rmpc/nix-hm-example/matugen/templates/cava.ini new file: config/matugen/templates/rmpc/nix-hm-example/matugen/templates/rmpc.ron new file: config/matugen/templates/rmpc/rmpc.ron new file: config/matugen/templates/rofi-colors.rasi new file: config/matugen/templates/spicetify.ini new file: config/matugen/templates/starship-colors.toml new file: config/matugen/templates/steam.css new file: config/matugen/templates/sway-colors.conf new file: config/matugen/templates/swaync-colors.css new file: config/matugen/templates/swayosd.css new file: config/matugen/templates/telegram-background-solid.svg new file: config/matugen/templates/telegram.tdesktop-theme new file: config/matugen/templates/telegram.tdesktop-theme.bak new file: config/matugen/templates/television.toml new file: config/matugen/templates/terminal-sequences new file: config/matugen/templates/tmux-colors.conf new file: config/matugen/templates/vivaldi.css new file: config/matugen/templates/walker.css new file: config/matugen/templates/wezterm_theme.toml new file: config/matugen/templates/windows_term.json new file: config/matugen/templates/windows_term_post.ps1 new file: config/matugen/templates/wine.reg new file: config/matugen/templates/yazi-theme.toml new file: config/matugen/templates/zathura-colors new file: config/matugen/templates/zed-colors.json new file: config/matugen/templates/zellij-theme.kdl.tera new file: config/matugen/templates/zen-userChrome.css new file: config/matugen/templates/zen-userContent.css new file: config/matugen/templates/zen.css modified: config/mimeapps.list modified: config/niri/binds.kdl new file: config/niri/clipse.sh new file: config/niri/colors.kdl modified: config/niri/config.kdl deleted: config/niri/dms/alttab.kdl deleted: config/niri/dms/binds.kdl deleted: config/niri/dms/colors.kdl deleted: config/niri/dms/cursor.kdl deleted: config/niri/dms/layout.kdl deleted: config/niri/dms/outputs.kdl deleted: config/niri/dms/profiles/profile_1776211496314_g03e3q.kdl deleted: config/niri/dms/wpblur.kdl modified: config/niri/layer-rule.kdl modified: config/niri/layout.kdl new file: config/niri/scripts/ocr.sh modified: config/niri/spawn-at-startup.kdl modified: config/niri/window-rule.kdl new file: config/nvim/colors/matugen.vim modified: config/nvim/init.lua modified: config/nvim/lazy-lock.json new file: config/nvim/lua/matugen.lua new file: config/nvim/lua/plugins/base16-nvim.lua renamed: config/nvim/lua/plugins/render-markdown.lua -> config/nvim/lua/plugins/render-markdown.lua.bak new file: config/nvim/lua/plugins/themery.lua new file: config/nvim/lua/plugins/zk-nvim.lua new file: config/rmpc/themes/matugen.ron new file: config/rudo/all-style.css new file: config/rudo/pins.json new file: config/rudo/settings.json new file: config/rudo/style.css new file: config/scripts/niri/ru.png new file: config/scripts/niri/us.png modified: config/starship.toml new file: config/stasis/stasis.rune new file: config/swaync/colors.css deleted: config/swaync/config_1.json modified: config/swaync/style.css deleted: config/swaync/style_1.css new file: config/swayosd/colors.css modified: config/swayosd/style.css new file: config/telegram/matugen.tdesktop-theme new file: config/telegram/matugen/background.jpg new file: config/telegram/matugen/background.svg new file: config/telegram/matugen/colors.tdesktop-theme deleted: config/termusic/tui.toml new file: config/tmux/colors.conf modified: config/tmux/tmux.conf modified: config/walker/config.toml modified: config/walker/themes/default/layout.xml new file: config/walker/themes/matugen/colors.css new file: config/walker/themes/matugen/item.xml new file: config/walker/themes/matugen/item_actionsmenu.xml new file: config/walker/themes/matugen/item_archlinuxpkgs.xml new file: config/walker/themes/matugen/item_bookmarks.xml new file: config/walker/themes/matugen/item_calc.xml new file: config/walker/themes/matugen/item_clipboard.xml new file: config/walker/themes/matugen/item_dmenu.xml new file: config/walker/themes/matugen/item_dnfpackages.xml new file: config/walker/themes/matugen/item_files.xml new file: config/walker/themes/matugen/item_providerlist.xml new file: config/walker/themes/matugen/item_symbols.xml new file: config/walker/themes/matugen/item_symbols_grid.xml new file: config/walker/themes/matugen/item_todo.xml new file: config/walker/themes/matugen/item_unicode.xml new file: config/walker/themes/matugen/keybind.xml new file: config/walker/themes/matugen/layout.xml new file: config/walker/themes/matugen/preview.xml new file: config/walker/themes/matugen/style.css modified: config/walker/themes/zzz/layout.xml modified: config/walker/themes/zzz/style.css deleted: config/waybar/config.jsonc deleted: config/waybar/config01.jsonc deleted: config/waybar/style.css deleted: config/waybar/style01.css new file: config/yazi/theme.toml modified: config/zathura/zathurarc deleted: config/zram-generator.conf modified: copy.sh modified: local/share/hyprwave/style.css --- config/Kvantum/kvantum.kvconfig | 2 +- config/Kvantum/matugen/matugen.kvconfig | 567 ++ config/Kvantum/matugen/matugen.svg | 6736 +++++++++++++++++ config/btop/btop.conf | 6 +- config/btop/themes/matugen.theme | 89 + config/cava/config | 4 +- config/cava/themes/matugen | 19 + config/clipse/config.json | 2 +- config/clipse/matugen.json | 28 + config/fish/config.fish | 5 + config/fish/fish_variables | 1 + config/fish/functions/bx.fish | 3 + config/fish/functions/fish_prompt.fish | 30 - config/fish/functions/ntodo.fish | 3 + config/fish/functions/o.fish | 3 + config/foot/foot.ini | 9 +- config/foot/themes/input-matugen-theme.ini | 28 + .../foot/themes/input-matugen-theme.ini.bak | 28 + config/foot/themes/matugen-theme.ini | 28 + config/foot/themes/matugen-theme.ini.bak | 28 + config/foot/themes/theme.ini | 3 +- config/foot/themes/theme.ini.bak | 39 + config/gtk-2.0/gtkfilechooser.ini | 11 + config/gtk-3.0/bookmarks | 6 + config/gtk-3.0/colors.css | 23 + config/gtk-3.0/colors.css.bak | 23 + config/gtk-3.0/colors.css.nak | 23 + config/gtk-3.0/gtk.css | 164 + config/gtk-3.0/gtk.css.backup | 184 + config/gtk-3.0/gtk.css.backup.1776208757 | 1 + config/gtk-3.0/settings.ini | 26 + config/gtk-4.0/assets | 1 + config/gtk-4.0/colors.css | 23 + config/gtk-4.0/colors.css.bak | 23 + config/gtk-4.0/gtk-dark.css | 1 + config/gtk-4.0/gtk.css | 3 + config/gtk-4.0/gtk.css.backup | 184 + .../libadwaita-tweaks.css} | 0 config/gtk-4.0/libadwaita.css | 1 + config/gtk-4.0/settings.ini | 7 + config/hypr/colors-hyprlock.conf | 116 + config/hypr/colors.conf | 102 + config/hypr/hyprlock.conf | 29 +- config/hypr/hyprlock.conf.bak | 57 +- config/hypr/hyprtoolkit.conf | 24 +- config/hyprwave/config.conf | 6 +- config/hyprwhspr/config.json | 3 +- config/hyprwhspr/mic_osd.pid | 2 +- config/ironbar/colors.css | 12 + config/ironbar/config.json | 84 +- config/ironbar/schema-v0.18.0.json | 6374 ---------------- config/ironbar/scripts/clipse.sh | 27 + config/ironbar/scripts/matugen.sh | 39 + config/ironbar/scripts/matugen.sh.bak | 56 + config/ironbar/scripts/pomo | 29 +- config/ironbar/scripts/volume.sh | 28 + config/ironbar/style.css | 93 +- config/ironbar/style.css.bak | 203 + config/kitty/current-theme.conf | 89 +- config/kitty/current-theme1.conf | 50 - config/kitty/dank-tabs.conf | 23 - config/kitty/kitty.conf | 8 +- config/kitty/kitty.conf.bak | 67 +- config/kitty/themes/Matugen.conf | 49 + config/matugen/config.toml | 231 +- config/matugen/custom3.json | 1 - config/matugen/scripts/foot-apply-colors.sh | 42 + .../matugen/scripts/foot-apply-colors.sh.bak | 42 + config/matugen/scripts/foot-apply.sh | 46 + config/matugen/scripts/hyprwave-reload.sh | 12 + config/matugen/scripts/ironbar-toggle.sh | 13 + config/matugen/scripts/matugen-foot-apply.sh | 22 + config/matugen/scripts/swayosd-reload.sh | 12 + config/matugen/scripts/walker.sh | 4 + config/matugen/templates/Matugen.colors | 150 + config/matugen/templates/alacritty.toml | 68 + config/matugen/templates/btop.theme | 89 + config/matugen/templates/cava-colors.ini | 19 + config/matugen/templates/clipse_theme.json | 28 + config/matugen/templates/colors.css | 7 + .../matugen/templates/cosmic_postprocess.py | 28 + config/matugen/templates/cosmic_theme.ron | 259 + config/matugen/templates/dunstrc-colors | 75 + config/matugen/templates/firefox-colors.css | 9 + config/matugen/templates/foot-apply-colors.sh | 42 + config/matugen/templates/foot.ini | 28 + config/matugen/templates/fuzzel.ini | 15 + config/matugen/templates/ghostty | 22 + config/matugen/templates/gtk-colors.css | 23 + config/matugen/templates/helix.toml | 128 + config/matugen/templates/heroic.css | 51 + config/matugen/templates/hyprland-colors.conf | 4 + config/matugen/templates/hyprlock.conf | 18 + config/matugen/templates/hyprtoolkit.conf | 7 + config/matugen/templates/hyprwave.css | 557 ++ config/matugen/templates/hypwave.css | 559 ++ config/matugen/templates/ironbar.css | 12 + config/matugen/templates/kitty-colors.conf | 49 + .../matugen/templates/kvantum-colors.kvconfig | 567 ++ config/matugen/templates/kvantum-colors.svg | 6736 +++++++++++++++++ config/matugen/templates/labwc | 21 + config/matugen/templates/mako | 16 + config/matugen/templates/mango.conf | 15 + config/matugen/templates/matugen.obt | 2476 ++++++ config/matugen/templates/mcfly.toml | 28 + config/matugen/templates/micro.micro | 45 + config/matugen/templates/midnight-discord.css | 100 + config/matugen/templates/neovim.lua | 37 + config/matugen/templates/neovim/README.md | 153 + config/matugen/templates/neovim/init.lua | 42 + config/matugen/templates/neovim/template.lua | 81 + config/matugen/templates/niri-colors.kdl | 29 + config/matugen/templates/nvim-colors.vim | 20 + config/matugen/templates/obsidian.css | 140 + config/matugen/templates/opencode-colors.json | 222 + config/matugen/templates/prismlauncher.json | 21 + config/matugen/templates/pywalfox-colors.json | 22 + config/matugen/templates/qtct-colors.conf | 5 + config/matugen/templates/quickshell.json | 11 + config/matugen/templates/quickshell.qml | 7 + .../templates/rmpc/nix-hm-example/README.md | 38 + .../rmpc/nix-hm-example/matugen/default.nix | 40 + .../nix-hm-example/matugen/templates/cava.ini | 17 + .../nix-hm-example/matugen/templates/rmpc.ron | 207 + config/matugen/templates/rmpc/rmpc.ron | 207 + config/matugen/templates/rofi-colors.rasi | 47 + config/matugen/templates/spicetify.ini | 25 + config/matugen/templates/starship-colors.toml | 226 + config/matugen/templates/steam.css | 30 + config/matugen/templates/sway-colors.conf | 28 + config/matugen/templates/swaync-colors.css | 29 + config/matugen/templates/swayosd.css | 8 + .../templates/telegram-background-solid.svg | 1 + .../matugen/templates/telegram.tdesktop-theme | 606 ++ .../templates/telegram.tdesktop-theme.bak | 275 + config/matugen/templates/television.toml | 19 + config/matugen/templates/terminal-sequences | 26 + config/matugen/templates/tmux-colors.conf | 18 + config/matugen/templates/vivaldi.css | 67 + config/matugen/templates/walker.css | 10 + config/matugen/templates/wezterm_theme.toml | 32 + config/matugen/templates/windows_term.json | 23 + .../matugen/templates/windows_term_post.ps1 | 10 + config/matugen/templates/wine.reg | 49 + config/matugen/templates/yazi-theme.toml | 921 +++ config/matugen/templates/zathura-colors | 93 + config/matugen/templates/zed-colors.json | 591 ++ .../matugen/templates/zellij-theme.kdl.tera | 133 + config/matugen/templates/zen-userChrome.css | 177 + config/matugen/templates/zen-userContent.css | 83 + config/matugen/templates/zen.css | 104 + config/mimeapps.list | 10 +- config/niri/binds.kdl | 10 +- config/niri/clipse.sh | 3 + config/niri/colors.kdl | 29 + config/niri/config.kdl | 4 +- config/niri/dms/alttab.kdl | 10 - config/niri/dms/binds.kdl | 221 - config/niri/dms/colors.kdl | 39 - config/niri/dms/cursor.kdl | 10 - config/niri/dms/layout.kdl | 22 - config/niri/dms/outputs.kdl | 1 - .../profiles/profile_1776211496314_g03e3q.kdl | 12 - config/niri/dms/wpblur.kdl | 9 - config/niri/layer-rule.kdl | 20 + config/niri/layout.kdl | 6 +- config/niri/scripts/ocr.sh | 57 + config/niri/spawn-at-startup.kdl | 9 +- config/niri/window-rule.kdl | 2 +- config/nvim/colors/matugen.vim | 20 + config/nvim/init.lua | 9 + config/nvim/lazy-lock.json | 54 +- config/nvim/lua/matugen.lua | 37 + config/nvim/lua/plugins/base16-nvim.lua | 8 + ...r-markdown.lua => render-markdown.lua.bak} | 0 config/nvim/lua/plugins/themery.lua | 9 + config/nvim/lua/plugins/zk-nvim.lua | 7 + config/rmpc/themes/matugen.ron | 207 + config/rudo/all-style.css | 467 ++ config/rudo/pins.json | 3 + config/rudo/settings.json | 41 + config/rudo/style.css | 257 + config/scripts/niri/ru.png | Bin 0 -> 174178 bytes config/scripts/niri/us.png | Bin 0 -> 369648 bytes config/starship.toml | 24 +- config/stasis/stasis.rune | 68 + config/swaync/colors.css | 29 + config/swaync/config_1.json | 97 - config/swaync/style.css | 56 +- config/swaync/style_1.css | 323 - config/swayosd/colors.css | 8 + config/swayosd/style.css | 16 +- config/telegram/matugen.tdesktop-theme | Bin 0 -> 13370 bytes config/telegram/matugen/background.jpg | Bin 0 -> 3359 bytes config/telegram/matugen/background.svg | 1 + config/telegram/matugen/colors.tdesktop-theme | 606 ++ config/termusic/tui.toml | 172 - config/tmux/colors.conf | 18 + config/tmux/tmux.conf | 2 + config/walker/config.toml | 2 +- config/walker/themes/default/layout.xml | 2 +- config/walker/themes/matugen/colors.css | 10 + config/walker/themes/matugen/item.xml | 73 + .../themes/matugen/item_actionsmenu.xml | 74 + .../themes/matugen/item_archlinuxpkgs.xml | 57 + .../walker/themes/matugen/item_bookmarks.xml | 81 + config/walker/themes/matugen/item_calc.xml | 65 + .../walker/themes/matugen/item_clipboard.xml | 61 + config/walker/themes/matugen/item_dmenu.xml | 46 + .../themes/matugen/item_dnfpackages.xml | 57 + config/walker/themes/matugen/item_files.xml | 66 + .../themes/matugen/item_providerlist.xml | 73 + config/walker/themes/matugen/item_symbols.xml | 53 + .../themes/matugen/item_symbols_grid.xml | 38 + config/walker/themes/matugen/item_todo.xml | 53 + config/walker/themes/matugen/item_unicode.xml | 53 + config/walker/themes/matugen/keybind.xml | 32 + config/walker/themes/matugen/layout.xml | 160 + config/walker/themes/matugen/preview.xml | 20 + config/walker/themes/matugen/style.css | 193 + config/walker/themes/zzz/layout.xml | 2 +- config/walker/themes/zzz/style.css | 2 +- config/waybar/config.jsonc | 234 - config/waybar/config01.jsonc | 76 - config/waybar/style.css | 93 - config/waybar/style01.css | 327 - config/yazi/theme.toml | 921 +++ config/zathura/zathurarc | 4 + config/zram-generator.conf | 4 - copy.sh | 2 +- local/share/hyprwave/style.css | 80 +- 231 files changed, 31057 insertions(+), 8511 deletions(-) create mode 100644 config/Kvantum/matugen/matugen.kvconfig create mode 100644 config/Kvantum/matugen/matugen.svg create mode 100644 config/btop/themes/matugen.theme create mode 100644 config/cava/themes/matugen create mode 100644 config/clipse/matugen.json create mode 100644 config/fish/functions/bx.fish delete mode 100644 config/fish/functions/fish_prompt.fish create mode 100644 config/fish/functions/ntodo.fish create mode 100644 config/fish/functions/o.fish create mode 100644 config/foot/themes/input-matugen-theme.ini create mode 100644 config/foot/themes/input-matugen-theme.ini.bak create mode 100644 config/foot/themes/matugen-theme.ini create mode 100644 config/foot/themes/matugen-theme.ini.bak create mode 100644 config/foot/themes/theme.ini.bak create mode 100644 config/gtk-2.0/gtkfilechooser.ini create mode 100644 config/gtk-3.0/bookmarks create mode 100644 config/gtk-3.0/colors.css create mode 100644 config/gtk-3.0/colors.css.bak create mode 100644 config/gtk-3.0/colors.css.nak create mode 100644 config/gtk-3.0/gtk.css create mode 100644 config/gtk-3.0/gtk.css.backup create mode 100644 config/gtk-3.0/gtk.css.backup.1776208757 create mode 100644 config/gtk-3.0/settings.ini create mode 120000 config/gtk-4.0/assets create mode 100644 config/gtk-4.0/colors.css create mode 100644 config/gtk-4.0/colors.css.bak create mode 120000 config/gtk-4.0/gtk-dark.css create mode 100644 config/gtk-4.0/gtk.css create mode 100644 config/gtk-4.0/gtk.css.backup rename config/{niri/dms/windowrules.kdl => gtk-4.0/libadwaita-tweaks.css} (100%) create mode 120000 config/gtk-4.0/libadwaita.css create mode 100644 config/gtk-4.0/settings.ini create mode 100644 config/hypr/colors-hyprlock.conf create mode 100644 config/hypr/colors.conf create mode 100644 config/ironbar/colors.css delete mode 100644 config/ironbar/schema-v0.18.0.json create mode 100755 config/ironbar/scripts/clipse.sh create mode 100755 config/ironbar/scripts/matugen.sh create mode 100755 config/ironbar/scripts/matugen.sh.bak create mode 100755 config/ironbar/scripts/volume.sh create mode 100644 config/ironbar/style.css.bak delete mode 100644 config/kitty/current-theme1.conf delete mode 100644 config/kitty/dank-tabs.conf create mode 100644 config/kitty/themes/Matugen.conf delete mode 100644 config/matugen/custom3.json create mode 100644 config/matugen/scripts/foot-apply-colors.sh create mode 100644 config/matugen/scripts/foot-apply-colors.sh.bak create mode 100644 config/matugen/scripts/foot-apply.sh create mode 100644 config/matugen/scripts/hyprwave-reload.sh create mode 100755 config/matugen/scripts/ironbar-toggle.sh create mode 100644 config/matugen/scripts/matugen-foot-apply.sh create mode 100644 config/matugen/scripts/swayosd-reload.sh create mode 100644 config/matugen/scripts/walker.sh create mode 100644 config/matugen/templates/Matugen.colors create mode 100644 config/matugen/templates/alacritty.toml create mode 100644 config/matugen/templates/btop.theme create mode 100644 config/matugen/templates/cava-colors.ini create mode 100644 config/matugen/templates/clipse_theme.json create mode 100644 config/matugen/templates/colors.css create mode 100755 config/matugen/templates/cosmic_postprocess.py create mode 100644 config/matugen/templates/cosmic_theme.ron create mode 100644 config/matugen/templates/dunstrc-colors create mode 100644 config/matugen/templates/firefox-colors.css create mode 100644 config/matugen/templates/foot-apply-colors.sh create mode 100644 config/matugen/templates/foot.ini create mode 100644 config/matugen/templates/fuzzel.ini create mode 100644 config/matugen/templates/ghostty create mode 100644 config/matugen/templates/gtk-colors.css create mode 100644 config/matugen/templates/helix.toml create mode 100644 config/matugen/templates/heroic.css create mode 100644 config/matugen/templates/hyprland-colors.conf create mode 100644 config/matugen/templates/hyprlock.conf create mode 100644 config/matugen/templates/hyprtoolkit.conf create mode 100644 config/matugen/templates/hyprwave.css create mode 100644 config/matugen/templates/hypwave.css create mode 100644 config/matugen/templates/ironbar.css create mode 100644 config/matugen/templates/kitty-colors.conf create mode 100644 config/matugen/templates/kvantum-colors.kvconfig create mode 100644 config/matugen/templates/kvantum-colors.svg create mode 100644 config/matugen/templates/labwc create mode 100644 config/matugen/templates/mako create mode 100644 config/matugen/templates/mango.conf create mode 100644 config/matugen/templates/matugen.obt create mode 100644 config/matugen/templates/mcfly.toml create mode 100644 config/matugen/templates/micro.micro create mode 100644 config/matugen/templates/midnight-discord.css create mode 100644 config/matugen/templates/neovim.lua create mode 100644 config/matugen/templates/neovim/README.md create mode 100644 config/matugen/templates/neovim/init.lua create mode 100644 config/matugen/templates/neovim/template.lua create mode 100644 config/matugen/templates/niri-colors.kdl create mode 100644 config/matugen/templates/nvim-colors.vim create mode 100644 config/matugen/templates/obsidian.css create mode 100644 config/matugen/templates/opencode-colors.json create mode 100644 config/matugen/templates/prismlauncher.json create mode 100644 config/matugen/templates/pywalfox-colors.json create mode 100644 config/matugen/templates/qtct-colors.conf create mode 100644 config/matugen/templates/quickshell.json create mode 100644 config/matugen/templates/quickshell.qml create mode 100644 config/matugen/templates/rmpc/nix-hm-example/README.md create mode 100644 config/matugen/templates/rmpc/nix-hm-example/matugen/default.nix create mode 100644 config/matugen/templates/rmpc/nix-hm-example/matugen/templates/cava.ini create mode 100644 config/matugen/templates/rmpc/nix-hm-example/matugen/templates/rmpc.ron create mode 100644 config/matugen/templates/rmpc/rmpc.ron create mode 100644 config/matugen/templates/rofi-colors.rasi create mode 100644 config/matugen/templates/spicetify.ini create mode 100644 config/matugen/templates/starship-colors.toml create mode 100644 config/matugen/templates/steam.css create mode 100644 config/matugen/templates/sway-colors.conf create mode 100644 config/matugen/templates/swaync-colors.css create mode 100644 config/matugen/templates/swayosd.css create mode 100644 config/matugen/templates/telegram-background-solid.svg create mode 100644 config/matugen/templates/telegram.tdesktop-theme create mode 100644 config/matugen/templates/telegram.tdesktop-theme.bak create mode 100644 config/matugen/templates/television.toml create mode 100644 config/matugen/templates/terminal-sequences create mode 100644 config/matugen/templates/tmux-colors.conf create mode 100644 config/matugen/templates/vivaldi.css create mode 100644 config/matugen/templates/walker.css create mode 100644 config/matugen/templates/wezterm_theme.toml create mode 100644 config/matugen/templates/windows_term.json create mode 100644 config/matugen/templates/windows_term_post.ps1 create mode 100644 config/matugen/templates/wine.reg create mode 100644 config/matugen/templates/yazi-theme.toml create mode 100644 config/matugen/templates/zathura-colors create mode 100644 config/matugen/templates/zed-colors.json create mode 100644 config/matugen/templates/zellij-theme.kdl.tera create mode 100644 config/matugen/templates/zen-userChrome.css create mode 100644 config/matugen/templates/zen-userContent.css create mode 100644 config/matugen/templates/zen.css create mode 100644 config/niri/clipse.sh create mode 100644 config/niri/colors.kdl delete mode 100644 config/niri/dms/alttab.kdl delete mode 100644 config/niri/dms/binds.kdl delete mode 100644 config/niri/dms/colors.kdl delete mode 100644 config/niri/dms/cursor.kdl delete mode 100644 config/niri/dms/layout.kdl delete mode 120000 config/niri/dms/outputs.kdl delete mode 100644 config/niri/dms/profiles/profile_1776211496314_g03e3q.kdl delete mode 100644 config/niri/dms/wpblur.kdl create mode 100644 config/niri/scripts/ocr.sh create mode 100644 config/nvim/colors/matugen.vim create mode 100644 config/nvim/lua/matugen.lua create mode 100644 config/nvim/lua/plugins/base16-nvim.lua rename config/nvim/lua/plugins/{render-markdown.lua => render-markdown.lua.bak} (100%) create mode 100644 config/nvim/lua/plugins/themery.lua create mode 100644 config/nvim/lua/plugins/zk-nvim.lua create mode 100644 config/rmpc/themes/matugen.ron create mode 100644 config/rudo/all-style.css create mode 100644 config/rudo/pins.json create mode 100644 config/rudo/settings.json create mode 100644 config/rudo/style.css create mode 100644 config/scripts/niri/ru.png create mode 100644 config/scripts/niri/us.png create mode 100644 config/stasis/stasis.rune create mode 100644 config/swaync/colors.css delete mode 100644 config/swaync/config_1.json delete mode 100644 config/swaync/style_1.css create mode 100644 config/swayosd/colors.css create mode 100644 config/telegram/matugen.tdesktop-theme create mode 100644 config/telegram/matugen/background.jpg create mode 100644 config/telegram/matugen/background.svg create mode 100644 config/telegram/matugen/colors.tdesktop-theme delete mode 100644 config/termusic/tui.toml create mode 100644 config/tmux/colors.conf create mode 100644 config/walker/themes/matugen/colors.css create mode 100644 config/walker/themes/matugen/item.xml create mode 100644 config/walker/themes/matugen/item_actionsmenu.xml create mode 100644 config/walker/themes/matugen/item_archlinuxpkgs.xml create mode 100644 config/walker/themes/matugen/item_bookmarks.xml create mode 100644 config/walker/themes/matugen/item_calc.xml create mode 100644 config/walker/themes/matugen/item_clipboard.xml create mode 100644 config/walker/themes/matugen/item_dmenu.xml create mode 100644 config/walker/themes/matugen/item_dnfpackages.xml create mode 100644 config/walker/themes/matugen/item_files.xml create mode 100644 config/walker/themes/matugen/item_providerlist.xml create mode 100644 config/walker/themes/matugen/item_symbols.xml create mode 100644 config/walker/themes/matugen/item_symbols_grid.xml create mode 100644 config/walker/themes/matugen/item_todo.xml create mode 100644 config/walker/themes/matugen/item_unicode.xml create mode 100644 config/walker/themes/matugen/keybind.xml create mode 100644 config/walker/themes/matugen/layout.xml create mode 100644 config/walker/themes/matugen/preview.xml create mode 100644 config/walker/themes/matugen/style.css delete mode 100644 config/waybar/config.jsonc delete mode 100644 config/waybar/config01.jsonc delete mode 100644 config/waybar/style.css delete mode 100644 config/waybar/style01.css create mode 100644 config/yazi/theme.toml delete mode 100644 config/zram-generator.conf mode change 100644 => 100755 copy.sh diff --git a/config/Kvantum/kvantum.kvconfig b/config/Kvantum/kvantum.kvconfig index 637b379..06dc5f8 100644 --- a/config/Kvantum/kvantum.kvconfig +++ b/config/Kvantum/kvantum.kvconfig @@ -1,2 +1,2 @@ [General] -theme=KvLibadwaitaDark# +theme=matugen diff --git a/config/Kvantum/matugen/matugen.kvconfig b/config/Kvantum/matugen/matugen.kvconfig new file mode 100644 index 0000000..324618f --- /dev/null +++ b/config/Kvantum/matugen/matugen.kvconfig @@ -0,0 +1,567 @@ +[%General] +author=Vince Liuice, based on KvAdapta by Tsu Jan +comment=An uncomplicated theme inspired by the Materia GTK theme +x11drag=menubar_and_primary_toolbar +alt_mnemonic=true +left_tabs=true +attach_active_tab=true +mirror_doc_tabs=true +group_toolbar_buttons=false +toolbar_item_spacing=0 +toolbar_interior_spacing=2 +spread_progressbar=true +composite=true +menu_shadow_depth=6 +spread_menuitems=true +tooltip_shadow_depth=2 +splitter_width=1 +scroll_width=9 +scroll_arrows=false +scroll_min_extent=60 +slider_width=2 +slider_handle_width=23 +slider_handle_length=22 +tickless_slider_handle_size=22 +center_toolbar_handle=true +check_size=16 +textless_progressbar=false +progressbar_thickness=2 +menubar_mouse_tracking=true +toolbutton_style=1 +double_click=false +translucent_windows=true +blurring=true +popup_blurring=true +vertical_spin_indicators=false +spin_button_width=24 +fill_rubberband=false +merge_menubar_with_toolbar=true +small_icon_size=16 +large_icon_size=32 +button_icon_size=16 +toolbar_icon_size=16 +combo_as_lineedit=true +animate_states=true +button_contents_shift=false +combo_menu=true +hide_combo_checkboxes=true +combo_focus_rect=false +groupbox_top_label=true +inline_spin_indicators=true +joined_inactive_tabs=false +layout_spacing=3 +layout_margin=3 +scrollbar_in_view=true +transient_scrollbar=true +transient_groove=false +submenu_overlap=0 +tooltip_delay=0 +tree_branch_line=true +no_window_pattern=false +opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam,qBittorrent +reduce_window_opacity=0 +respect_DE=true +scrollable_menu=false +submenu_delay=150 +no_inactiveness=false +reduce_menu_opacity=0 +click_behavior=0 +contrast=1.00 +dialog_button_layout=0 +intensity=1.00 +saturation=1.00 +shadowless_popup=false +drag_from_buttons=false +menu_blur_radius=10 +tooltip_blur_radius=10 + +[GeneralColors] +window.color=#18130b +base.color=#403930 +alt.base.color=#211c14 +button.color=#463f36 +light.color=#463f36 +mid.light.color=#4f4539 +dark.color=#18130b +mid.color=#211c14 +highlight.color=#f2be6e +inactive.highlight.color=#f2be6e +text.color=#fff3e6 +window.text.color=#fff3e6 +button.text.color=#fff3e6 +disabled.text.color=#362f27 +tooltip.text.color=#fff3e6 +highlight.text.color=#fff3e6 +link.color=#f2be6e +link.visited.color=#b6cea3 +progress.indicator.text.color=#fff3e6 + +[Hacks] +transparent_ktitle_label=true +transparent_dolphin_view=true +transparent_pcmanfm_sidepane=true +blur_translucent=true +transparent_menutitle=true +respect_darkness=true +kcapacitybar_as_progressbar=true +force_size_grip=true +iconless_pushbutton=true +iconless_menu=false +disabled_icon_opacity=100 +lxqtmainmenu_iconsize=16 +normal_default_pushbutton=true +single_top_toolbar=true +tint_on_mouseover=0 +transparent_pcmanfm_view=true +no_selection_tint=true +transparent_arrow_button=true +middle_click_scroll=false +opaque_colors=false +kinetic_scrolling=false +scroll_jump_workaround=true +centered_forms=false +noninteger_translucency=false +blur_only_active_window=false +style_vertical_toolbars=false + +[PanelButtonCommand] +frame=true +frame.element=button +frame.top=6 +frame.bottom=6 +frame.left=6 +frame.right=6 +interior=true +interior.element=button +indicator.size=8 +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +text.shadow=0 +text.margin=4 +text.iconspacing=4 +indicator.element=arrow +frame.expansion=0 + +[PanelButtonTool] +inherits=PanelButtonCommand +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +text.bold=false +indicator.element=arrow +indicator.size=0 +frame.expansion=0 + +[ToolbarButton] +frame=true +frame.element=tbutton +interior.element=tbutton +frame.top=16 +frame.bottom=16 +frame.left=16 +frame.right=16 +indicator.element=tarrow +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +text.bold=false +frame.expansion=32 + +[Dock] +inherits=PanelButtonCommand +interior.element=dock +frame.element=dock +frame.top=1 +frame.bottom=1 +frame.left=1 +frame.right=1 +text.normal.color=#fff3e6 + +[DockTitle] +inherits=PanelButtonCommand +frame=false +interior=false +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.bold=false + +[IndicatorSpinBox] +inherits=PanelButtonCommand +frame=true +interior=true +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +indicator.element=spin +indicator.size=8 +text.normal.color=#fff3e6 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 + +[RadioButton] +inherits=PanelButtonCommand +frame=false +interior.element=radio +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +min_width=+0.3font +min_height=+0.3font + +[CheckBox] +inherits=PanelButtonCommand +frame=false +interior.element=checkbox +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +min_width=+0.3font +min_height=+0.3font + +[Focus] +inherits=PanelButtonCommand +frame=true +frame.element=focus +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +frame.patternsize=14 + +[GenericFrame] +inherits=PanelButtonCommand +frame=true +interior=false +frame.element=common +interior.element=common +frame.top=1 +frame.bottom=1 +frame.left=1 +frame.right=1 + +[LineEdit] +inherits=PanelButtonCommand +frame.element=lineedit +interior.element=lineedit +frame.top=6 +frame.bottom=6 +frame.left=6 +frame.right=6 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 + +[ToolbarLineEdit] +frame.element=lineedit +interior.element=lineedit + +[DropDownButton] +inherits=PanelButtonCommand +indicator.element=arrow-down + +[IndicatorArrow] +indicator.element=arrow +indicator.size=8 + +[ToolboxTab] +inherits=PanelButtonCommand +text.normal.color=#fff3e6 +text.press.color=#fff3e6 +text.focus.color=#fff3e6 + +[Tab] +inherits=PanelButtonCommand +interior.element=tab +text.margin.left=8 +text.margin.right=8 +text.margin.top=2 +text.margin.bottom=2 +frame.element=tab +indicator.element=tab +indicator.size=22 +frame.top=9 +frame.bottom=3 +frame.left=6 +frame.right=6 +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +frame.expansion=0 +text.bold=false + +[TabFrame] +inherits=PanelButtonCommand +frame.element=tabframe +interior.element=tabframe +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 + +[TreeExpander] +inherits=PanelButtonCommand +indicator.size=8 +indicator.element=tree + +[HeaderSection] +inherits=PanelButtonCommand +interior.element=header +frame.element=header +frame.top=0 +frame.bottom=1 +frame.left=1 +frame.right=1 +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +frame.expansion=0 + +[SizeGrip] +indicator.element=resize-grip + +[Toolbar] +inherits=PanelButtonCommand +indicator.element=toolbar +indicator.size=5 +text.margin=0 +interior.element=menubar +frame.element=menubar +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +frame.left=0 +frame.right=0 +frame.top=0 +frame.bottom=4 +frame.expansion=0 + +[Slider] +inherits=PanelButtonCommand +frame.element=slider +focusFrame=true +interior.element=slider +frame.top=3 +frame.bottom=3 +frame.left=3 +frame.right=3 + +[SliderCursor] +inherits=PanelButtonCommand +frame=false +interior.element=slidercursor + +[Progressbar] +inherits=PanelButtonCommand +frame.element=progress +interior.element=progress +text.margin=0 +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +text.bold=false +frame.expansion=8 + +[ProgressbarContents] +inherits=PanelButtonCommand +frame=true +frame.element=progress-pattern +interior.element=progress-pattern + +[ItemView] +inherits=PanelButtonCommand +text.margin=0 +frame.element=itemview +interior.element=itemview +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=4 +text.margin.right=4 +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +min_width=+0.3font +min_height=+0.3font +frame.expansion=0 + +[Splitter] +indicator.size=48 + +[Scrollbar] +inherits=PanelButtonCommand +indicator.element=arrow +indicator.size=12 + +[ScrollbarSlider] +inherits=PanelButtonCommand +frame.element=scrollbarslider +interior=false +frame.left=5 +frame.right=5 +frame.top=5 +frame.bottom=5 +indicator.element=grip +indicator.size=12 + +[ScrollbarGroove] +inherits=PanelButtonCommand +interior=false +frame=false + +[Menu] +inherits=PanelButtonCommand +frame.top=10 +frame.bottom=10 +frame.left=10 +frame.right=10 +frame.element=menu +interior.element=menu +text.normal.color=#fff3e6 +text.shadow=false +frame.expansion=0 +text.bold=false + +[MenuItem] +inherits=PanelButtonCommand +frame=true +frame.element=menuitem +interior.element=menuitem +indicator.element=menuitem +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.margin.top=3 +text.margin.bottom=3 +text.margin.left=6 +text.margin.right=6 +frame.top=0 +frame.bottom=0 +frame.left=6 +frame.right=6 +text.bold=false +frame.expansion=0 + +[MenuBar] +inherits=PanelButtonCommand +frame.element=menubar +interior.element=menubar +frame.bottom=0 +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +frame.expansion=0 +text.bold=false + +[MenuBarItem] +inherits=PanelButtonCommand +interior=true +interior.element=menubaritem +frame.element=menubaritem +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.margin.left=4 +text.margin.right=4 +text.margin.top=0 +text.margin.bottom=0 +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 +text.bold=false +min_width=+0.3font +min_height=+0.3font +frame.expansion=0 + +[TitleBar] +inherits=PanelButtonCommand +frame=false +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 +interior.element=titlebar +indicator.size=16 +indicator.element=mdi +text.normal.color=#787878 +text.focus.color=#fff3e6 +text.bold=false +text.italic=true +frame.expansion=0 + +[ComboBox] +inherits=PanelButtonCommand +frame.element=combo +interior.element=combo +frame.top=6 +frame.bottom=6 +frame.left=6 +frame.right=6 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 +text.focus.color=#fff3e6 +text.press.color=#fff3e6 +text.toggle.color=#fff3e6 + +[GroupBox] +inherits=GenericFrame +frame=false +text.shadow=0 +text.margin=0 +text.normal.color=#fff3e6 +text.focus.color=#fff3e6 +text.bold=false +frame.expansion=0 + +[TabBarFrame] +inherits=GenericFrame +frame=true +frame.element=tabBarFrame +interior=false +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 + +[ToolTip] +inherits=GenericFrame +frame.top=6 +frame.bottom=6 +frame.left=6 +frame.right=6 +interior=true +text.shadow=0 +text.margin=0 +interior.element=tooltip +frame.element=tooltip +frame.expansion=6 + +[StatusBar] +inherits=GenericFrame +frame=false +interior=false + +[Window] +interior=true +interior.element=window +frame=true +frame.element=window +frame.bottom=10 +frame.top=10 diff --git a/config/Kvantum/matugen/matugen.svg b/config/Kvantum/matugen/matugen.svg new file mode 100644 index 0000000..68599e2 --- /dev/null +++ b/config/Kvantum/matugen/matugen.svg @@ -0,0 +1,6736 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/btop/btop.conf b/config/btop/btop.conf index 08a6ec3..4dc0669 100644 --- a/config/btop/btop.conf +++ b/config/btop/btop.conf @@ -2,7 +2,7 @@ #* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. #* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" -color_theme = "TTY" +color_theme = "/home/unconfer/.config/btop/themes/matugen.theme" #* If the theme set background should be shown, set to False if you want terminal background transparency. theme_background = true @@ -60,7 +60,7 @@ update_ms = 2000 #* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", #* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. -proc_sorting = "cpu direct" +proc_sorting = "user" #* Reverse sorting order, True or False. proc_reversed = false @@ -75,7 +75,7 @@ proc_colors = true proc_gradient = true #* If process cpu usage should be of the core it's running on or usage of the total available cpu power. -proc_per_core = false +proc_per_core = true #* Show process memory as bytes instead of percent. proc_mem_bytes = true diff --git a/config/btop/themes/matugen.theme b/config/btop/themes/matugen.theme new file mode 100644 index 0000000..1fb92e5 --- /dev/null +++ b/config/btop/themes/matugen.theme @@ -0,0 +1,89 @@ +# Matugen template for btop + + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#ffffff", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="" + +# Main text color +theme[main_fg]="#fff3e6" + +# Title color for boxes +theme[title]="#f2be6e" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#dcc3a1" + +# Background color of selected item in processes box +theme[selected_bg]="#f2be6e" + +# Foreground color of selected item in processes box +theme[selected_fg]="#2f1d00" + +# Color of inactive/disabled text +theme[inactive_fg]="#d2c4b4" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="#b6cea3" + +# Cpu box outline color +theme[cpu_box]="#aa9e8e" + +# Memory/disks box outline color +theme[mem_box]="#aa9e8e" + +# Net up/down box outline color +theme[net_box]="#aa9e8e" + +# Processes box outline color +theme[proc_box]="#aa9e8e" + +# Box divider line and small boxes line color +theme[div_line]="#7e7365" + +# Temperature graph colors +theme[temp_start]="#dcc3a1" +theme[temp_mid]="#f2be6e" +theme[temp_end]="#ffb4ab" + +# CPU graph colors +theme[cpu_start]="#dcc3a1" +theme[cpu_mid]="#f2be6e" +theme[cpu_end]="#ffb4ab" + +# Mem/Disk free meter +theme[free_start]="#dcc3a1" +theme[free_mid]="" +theme[free_end]="#867154" + +# Mem/Disk cached meter +theme[cached_start]="#b6cea3" +theme[cached_mid]="" +theme[cached_end]="#657b55" + +# Mem/Disk available meter +theme[available_start]="#f2be6e" +theme[available_mid]="" +theme[available_end]="#976c25" + +# Mem/Disk used meter +theme[used_start]="#ffb4ab" +theme[used_mid]="" +theme[used_end]="#da342e" + +# Download graph colors +theme[download_start]="#dcc3a1" +theme[download_mid]="#f2be6e" +theme[download_end]="#b6cea3" + +# Upload graph colors +theme[upload_start]="#dcc3a1" +theme[upload_mid]="#f2be6e" +theme[upload_end]="#b6cea3" \ No newline at end of file diff --git a/config/cava/config b/config/cava/config index 708c31b..38e061d 100644 --- a/config/cava/config +++ b/config/cava/config @@ -236,7 +236,7 @@ bar_delimiter = 59 # a terminal that can change color definitions such as Gnome-terminal or rxvt. # default is to keep current terminal color ; background = default - foreground = '#EEF7FD' +; foreground = '#EEF7FD' # SDL and sdl_glsl only support hex code colors, these are the default: ; background = '#11111' @@ -278,7 +278,7 @@ bar_delimiter = 59 # use theme file instead of defining colors in this file # themes are located in $HOME/.config/cava/themes -; theme = 'none' +theme = 'matugen' [smoothing] diff --git a/config/cava/themes/matugen b/config/cava/themes/matugen new file mode 100644 index 0000000..ba4a929 --- /dev/null +++ b/config/cava/themes/matugen @@ -0,0 +1,19 @@ +[color] +background = 'default' +foreground = '#f2be6e' + +; gradient = 0 +gradient = 1 +gradient_color_1 = '#976c25' +gradient_color_2 = '#f2be6e' +gradient_color_3 = '#ffffff' + +horizontal_gradient = 0 +; horizontal_gradient = 1 +horizontal_gradient_color_1 = '#976c25' +horizontal_gradient_color_2 = '#f2be6e' +horizontal_gradient_color_3 = '#ffffff' +horizontal_gradient_color_4 = '#f2be6e' +horizontal_gradient_color_5 = '#976c25' + + diff --git a/config/clipse/config.json b/config/clipse/config.json index 07091a9..3bd394f 100644 --- a/config/clipse/config.json +++ b/config/clipse/config.json @@ -6,7 +6,7 @@ "logFile": "clipse.log", "pollInterval": 50, "maxEntryLength": 65, - "themeFile": "custom_theme.json", + "themeFile": "matugen.json", "tempDir": "tmp_files", "keyBindings": { "choose": "enter", diff --git a/config/clipse/matugen.json b/config/clipse/matugen.json new file mode 100644 index 0000000..ef1ae6c --- /dev/null +++ b/config/clipse/matugen.json @@ -0,0 +1,28 @@ +{ + "useCustom": true, + "TitleFore": "#2f1d00", + "TitleBack": "#f2be6e", + "TitleInfo": "#b6cea3", + "NormalTitle": "#fff3e6", + "DimmedTitle": "#d2c4b4", + "SelectedTitle": "#b6cea3", + "NormalDesc": "#d2c4b4", + "DimmedDesc": "#d2c4b4", + "SelectedDesc": "#b6cea3", + "StatusMsg": "#dcc3a1", + "PinIndicatorColor": "#b6cea3", + "SelectedBorder": "#b6cea3", + "SelectedDescBorder": "#b6cea3", + "FilteredMatch": "#fff3e6", + "FilterPrompt": "#dcc3a1", + "FilterInfo": "#b6cea3", + "FilterText": "#fff3e6", + "FilterCursor": "#b6cea3", + "HelpKey": "#aa9e8e", + "HelpDesc": "#d2c4b4", + "PageActiveDot": "#b6cea3", + "PageInactiveDot": "#d2c4b4", + "DividerDot": "#b6cea3", + "PreviewedText": "#fff3e6", + "PreviewBorder": "#b6cea3" +} diff --git a/config/fish/config.fish b/config/fish/config.fish index 72535e9..13972fb 100644 --- a/config/fish/config.fish +++ b/config/fish/config.fish @@ -1,8 +1,13 @@ if status is-interactive starship init fish | source + bash ~/.config/matugen/scripts/foot-apply-colors.sh set -U fish_cursor_replace_one underscore set -gx TERMINAL foot + set -x ZK_NOTEBOOK_DIR ~/zk alias cat='bat' zoxide init fish | source # Commands to run in interactive sessions can go here end + +# uv +fish_add_path "/home/unconfer/.local/bin" diff --git a/config/fish/fish_variables b/config/fish/fish_variables index dca36cd..1104d00 100644 --- a/config/fish/fish_variables +++ b/config/fish/fish_variables @@ -10,3 +10,4 @@ SETUVAR _fisher_upgraded_to_4_4:\x1d SETUVAR fish_cursor_default:block SETUVAR fish_cursor_replace_one:underscore SETUVAR fish_greeting:\x1d +SETUVAR fish_user_paths:/home/unconfer/\x2elocal/bin diff --git a/config/fish/functions/bx.fish b/config/fish/functions/bx.fish new file mode 100644 index 0000000..6debc05 --- /dev/null +++ b/config/fish/functions/bx.fish @@ -0,0 +1,3 @@ +function bx --wraps='bash -x' --description 'alias bx=bash -x' + bash -x $argv +end diff --git a/config/fish/functions/fish_prompt.fish b/config/fish/functions/fish_prompt.fish deleted file mode 100644 index d58bf64..0000000 --- a/config/fish/functions/fish_prompt.fish +++ /dev/null @@ -1,30 +0,0 @@ -function fish_prompt --description 'Write out the prompt' - set -l last_status $status - set -l normal (set_color normal) - set -l status_color (set_color brgreen) - set -l cwd_color (set_color $fish_color_cwd) - set -l vcs_color (set_color brpurple) - set -l prompt_status "" - - # Since we display the prompt on a new line allow the directory names to be longer. - set -q fish_prompt_pwd_dir_length - or set -lx fish_prompt_pwd_dir_length 0 - - # Color the prompt differently when we're root - set -l suffix '❯' - if functions -q fish_is_root_user; and fish_is_root_user - if set -q fish_color_cwd_root - set cwd_color (set_color $fish_color_cwd_root) - end - set suffix '#' - end - - # Color the prompt in red on error - if test $last_status -ne 0 - set status_color (set_color $fish_color_error) - set prompt_status $status_color "[" $last_status "]" $normal - end - - echo -s (prompt_login) ' ' $cwd_color (prompt_pwd) $vcs_color (fish_vcs_prompt) $normal ' ' $prompt_status - echo -n -s $status_color $suffix ' ' $normal -end diff --git a/config/fish/functions/ntodo.fish b/config/fish/functions/ntodo.fish new file mode 100644 index 0000000..82e3e7a --- /dev/null +++ b/config/fish/functions/ntodo.fish @@ -0,0 +1,3 @@ +function ntodo --wraps=' nvim todo-2026-04-19-22.16.32.md' --description 'alias ntodo= nvim todo-2026-04-19-22.16.32.md' + nvim todo-2026-04-19-22.16.32.md $argv +end diff --git a/config/fish/functions/o.fish b/config/fish/functions/o.fish new file mode 100644 index 0000000..ce86668 --- /dev/null +++ b/config/fish/functions/o.fish @@ -0,0 +1,3 @@ +function o --wraps=xdg-open --description 'alias o=xdg-open' + xdg-open $argv +end diff --git a/config/foot/foot.ini b/config/foot/foot.ini index da660f4..079a42c 100644 --- a/config/foot/foot.ini +++ b/config/foot/foot.ini @@ -7,7 +7,8 @@ #app-id=foot #title=foot locked-title=no -include=~/.config/foot/themes/theme.ini +#include=~/.config/foot/themes/theme.ini +include=~/.config/foot/themes/matugen-theme.ini font=monospace font=IosevkaTerm Nerd Font:size=15:weight=semibold #font=Noto Color Emoji:size=12 @@ -60,10 +61,10 @@ visual=yes # command-focused=no [desktop-notifications] -# command=notify-send --wait --app-name ${app-id} --icon ${app-id} --category ${category} --urgency ${urgency} --expire-time ${expire-time} --hint STRING:image-path:${icon} --hint BOOLEAN:suppress-sound:${muted} --hint STRING:sound-name:${sound-name} --replace-id ${replace-id} ${action-argument} --print-id -- ${title} ${body} -# command-action-argument=--action ${action-name}=${action-label} + command=notify-send --wait --app-name ${app-id} --icon ${app-id} --category ${category} --urgency ${urgency} --expire-time ${expire-time} --hint STRING:image-path:${icon} --hint BOOLEAN:suppress-sound:${muted} --hint STRING:sound-name:${sound-name} --replace-id ${replace-id} ${action-argument} --print-id -- ${title} ${body} + command-action-argument=--action ${action-name}=${action-label} # close="" -# inhibit-when-focused=yes + inhibit-when-focused=yes [scrollback] diff --git a/config/foot/themes/input-matugen-theme.ini b/config/foot/themes/input-matugen-theme.ini new file mode 100644 index 0000000..ded1fab --- /dev/null +++ b/config/foot/themes/input-matugen-theme.ini @@ -0,0 +1,28 @@ +[colors-dark] +background={{colors.surface.default.hex_stripped}} +foreground={{colors.on_surface.default.hex_stripped}} +selection-background={{colors.primary_container.default.hex_stripped}} +selection-foreground={{colors.on_primary_container.default.hex_stripped}} +regular0={{colors.surface_container_lowest.default.hex_stripped}} +regular1={{colors.error.default.hex_stripped}} +regular2={{colors.tertiary.default.hex_stripped}} +regular3={{colors.secondary.default.hex_stripped}} +regular4={{colors.primary.default.hex_stripped}} +regular5={{colors.secondary_container.default.hex_stripped}} +regular6={{colors.tertiary_container.default.hex_stripped}} +regular7={{colors.on_surface_variant.default.hex_stripped}} +bright0={{colors.surface_container_high.default.hex_stripped}} +bright1={{colors.on_error_container.default.hex_stripped}} +bright2={{colors.on_tertiary_fixed.default.hex_stripped}} +bright3={{colors.on_secondary_fixed.default.hex_stripped}} +bright4={{colors.primary_container.default.hex_stripped}} +bright5={{colors.inverse_primary.default.hex_stripped}} +bright6={{colors.on_tertiary.default.hex_stripped}} +bright7={{colors.inverse_on_surface.default.hex_stripped}} +cursor={{colors.surface.default.hex_stripped}} {{colors.primary.default.hex_stripped}} +16={{colors.tertiary.default.hex_stripped}} +17={{colors.error_container.default.hex_stripped}} +search-box-no-match={{colors.surface_container.default.hex_stripped}} {{colors.error.default.hex_stripped}} +search-box-match={{colors.surface_container_high.default.hex_stripped}} {{colors.primary.default.hex_stripped}} +jump-labels={{colors.surface_container.default.hex_stripped}} {{colors.secondary.default.hex_stripped}} +urls={{colors.primary.default.hex_stripped}} diff --git a/config/foot/themes/input-matugen-theme.ini.bak b/config/foot/themes/input-matugen-theme.ini.bak new file mode 100644 index 0000000..c61046c --- /dev/null +++ b/config/foot/themes/input-matugen-theme.ini.bak @@ -0,0 +1,28 @@ +[colors-dark] +background={{colors.surface.default.hex_stripped}} +foreground={{colors.on_surface.default.hex_stripped}} +selection-background={{colors.primary_container.default.hex_stripped}} +selection-foreground={{colors.on_primary_container.default.hex_stripped}} +regular0={{colors.surface_container_lowest.default.hex_stripped}} +regular1={{colors.error.default.hex_stripped}} +regular2={{colors.tertiary.default.hex_stripped}} +regular3={{colors.secondary.default.hex_stripped}} +regular4={{colors.primary.default.hex_stripped}} +regular5={{colors.secondary_container.default.hex_stripped}} +regular6={{colors.tertiary_container.default.hex_stripped}} +regular7={{colors.on_surface_variant.default.hex_stripped}} +bright0={{colors.surface_container_high.default.hex_stripped}} +bright1={{colors.error_container.default.hex_stripped}} +bright2={{colors.tertiary_container.default.hex_stripped}} +bright3={{colors.secondary_container.default.hex_stripped}} +bright4={{colors.primary_container.default.hex_stripped}} +bright5={{colors.inverse_primary.default.hex_stripped}} +bright6={{colors.tertiary_fixed_dim.default.hex_stripped}} +bright7={{colors.surface_bright.default.hex_stripped}} +cursor={{colors.surface.default.hex_stripped}} {{colors.primary.default.hex_stripped}} +16={{colors.tertiary.default.hex_stripped}} +17={{colors.error_container.default.hex_stripped}} +search-box-no-match={{colors.surface_container.default.hex_stripped}} {{colors.error.default.hex_stripped}} +search-box-match={{colors.surface_container_high.default.hex_stripped}} {{colors.primary.default.hex_stripped}} +jump-labels={{colors.surface_container.default.hex_stripped}} {{colors.secondary.default.hex_stripped}} +urls={{colors.primary.default.hex_stripped}} diff --git a/config/foot/themes/matugen-theme.ini b/config/foot/themes/matugen-theme.ini new file mode 100644 index 0000000..f582d34 --- /dev/null +++ b/config/foot/themes/matugen-theme.ini @@ -0,0 +1,28 @@ +[colors-dark] +background=18130b +foreground=fff3e6 +selection-background=976c25 +selection-foreground=ffffff +regular0=0e0a04 +regular1=ffb4ab +regular2=b6cea3 +regular3=dcc3a1 +regular4=f2be6e +regular5=867154 +regular6=657b55 +regular7=d2c4b4 +bright0=352e26 +bright1=ffffff +bright2=0e2004 +bright3=261904 +bright4=976c25 +bright5=6f4a00 +bright6=142508 +bright7=362f27 +cursor=18130b f2be6e +16=b6cea3 +17=da342e +search-box-no-match=2a241c ffb4ab +search-box-match=352e26 f2be6e +jump-labels=2a241c dcc3a1 +urls=f2be6e diff --git a/config/foot/themes/matugen-theme.ini.bak b/config/foot/themes/matugen-theme.ini.bak new file mode 100644 index 0000000..4f30c3e --- /dev/null +++ b/config/foot/themes/matugen-theme.ini.bak @@ -0,0 +1,28 @@ +[colors-dark] +background=19120c +foreground=efe0d5 +selection-background=6b3b04 +selection-foreground=ffdcc1 +regular0=130d08 +regular1=ffb4ab +regular2=c3cb98 +regular3=e2c0a5 +regular4=ffb778 +regular5=5a422d +regular6=434a22 +regular7=d6c3b6 +bright0=312822 +bright1=ffdad6 +bright2=181e00 +bright3=2a1707 +bright4=6b3b04 +bright5=87521c +bright6=2d330e +bright7=372f28 +cursor=19120c ffb778 +16=c3cb98 +17=93000a +search-box-no-match=261e18 ffb4ab +search-box-match=312822 ffb778 +jump-labels=261e18 e2c0a5 +urls=ffb778 diff --git a/config/foot/themes/theme.ini b/config/foot/themes/theme.ini index 07b6983..4aa2204 100644 --- a/config/foot/themes/theme.ini +++ b/config/foot/themes/theme.ini @@ -1,5 +1,4 @@ -# _*_ conf _*_ -# Catppuccin Frappe + [colors-dark] foreground=EEF7FD diff --git a/config/foot/themes/theme.ini.bak b/config/foot/themes/theme.ini.bak new file mode 100644 index 0000000..07b6983 --- /dev/null +++ b/config/foot/themes/theme.ini.bak @@ -0,0 +1,39 @@ +# _*_ conf _*_ +# Catppuccin Frappe + +[colors-dark] +foreground=EEF7FD +background=07090B + +regular0=07090b +regular1=ff0100 +regular2=25C39F +regular3=FFDE00 +regular4=109FFF +regular5=FE31FF +regular6=00FED4 +regular7=eef7fd + +bright0=1f2830 +bright1=E46468 +bright2=82D1B9 +bright3=F6DB8B +bright4=8FD2F7 +bright5=F79DE7 +bright6=7EFEDE +bright7=d2dee7 + +cursor=eef7fd d2dee7 + +16=ff9e64 +17=db4b4b + +selection-foreground=07090b +selection-background=c1d6d6 + +search-box-no-match=232634 e78284 +search-box-match=c6d0f5 414559 + +jump-labels=232634 ef9f76 +urls=8caaee + diff --git a/config/gtk-2.0/gtkfilechooser.ini b/config/gtk-2.0/gtkfilechooser.ini new file mode 100644 index 0000000..62930e9 --- /dev/null +++ b/config/gtk-2.0/gtkfilechooser.ini @@ -0,0 +1,11 @@ +[Filechooser Settings] +LocationMode=path-bar +ShowHidden=false +ShowSizeColumn=true +GeometryX=-1 +GeometryY=-1 +GeometryWidth=-1 +GeometryHeight=-1 +SortColumn=name +SortOrder=ascending +StartupMode=recent diff --git a/config/gtk-3.0/bookmarks b/config/gtk-3.0/bookmarks new file mode 100644 index 0000000..f853488 --- /dev/null +++ b/config/gtk-3.0/bookmarks @@ -0,0 +1,6 @@ +file:///home/unconfer/docs +file:///home/unconfer/mus +file:///home/unconfer/imgs +file:///home/unconfer/vids +file:///home/unconfer/dwnlds +file:///home/unconfer/imgs/screenshots screenshots diff --git a/config/gtk-3.0/colors.css b/config/gtk-3.0/colors.css new file mode 100644 index 0000000..d72f9df --- /dev/null +++ b/config/gtk-3.0/colors.css @@ -0,0 +1,23 @@ +/* +* GTK Colors +* Generated with Matugen +*/ + +@define-color accent_color #f2be6e; +@define-color accent_fg_color #281800; +@define-color accent_bg_color #f2be6e; +@define-color window_bg_color #18130b; +@define-color window_fg_color #fff3e6; +@define-color headerbar_bg_color #18130b; +@define-color headerbar_fg_color #fff3e6; +@define-color popover_bg_color #18130b; +@define-color popover_fg_color #fff3e6; +@define-color view_bg_color #18130b; +@define-color view_fg_color #fff3e6; +@define-color card_bg_color #18130b; +@define-color card_fg_color #fff3e6; +@define-color sidebar_bg_color @window_bg_color; +@define-color sidebar_fg_color @window_fg_color; +@define-color sidebar_border_color @window_bg_color; +@define-color sidebar_backdrop_color @window_bg_color; + diff --git a/config/gtk-3.0/colors.css.bak b/config/gtk-3.0/colors.css.bak new file mode 100644 index 0000000..d72f9df --- /dev/null +++ b/config/gtk-3.0/colors.css.bak @@ -0,0 +1,23 @@ +/* +* GTK Colors +* Generated with Matugen +*/ + +@define-color accent_color #f2be6e; +@define-color accent_fg_color #281800; +@define-color accent_bg_color #f2be6e; +@define-color window_bg_color #18130b; +@define-color window_fg_color #fff3e6; +@define-color headerbar_bg_color #18130b; +@define-color headerbar_fg_color #fff3e6; +@define-color popover_bg_color #18130b; +@define-color popover_fg_color #fff3e6; +@define-color view_bg_color #18130b; +@define-color view_fg_color #fff3e6; +@define-color card_bg_color #18130b; +@define-color card_fg_color #fff3e6; +@define-color sidebar_bg_color @window_bg_color; +@define-color sidebar_fg_color @window_fg_color; +@define-color sidebar_border_color @window_bg_color; +@define-color sidebar_backdrop_color @window_bg_color; + diff --git a/config/gtk-3.0/colors.css.nak b/config/gtk-3.0/colors.css.nak new file mode 100644 index 0000000..d72f9df --- /dev/null +++ b/config/gtk-3.0/colors.css.nak @@ -0,0 +1,23 @@ +/* +* GTK Colors +* Generated with Matugen +*/ + +@define-color accent_color #f2be6e; +@define-color accent_fg_color #281800; +@define-color accent_bg_color #f2be6e; +@define-color window_bg_color #18130b; +@define-color window_fg_color #fff3e6; +@define-color headerbar_bg_color #18130b; +@define-color headerbar_fg_color #fff3e6; +@define-color popover_bg_color #18130b; +@define-color popover_fg_color #fff3e6; +@define-color view_bg_color #18130b; +@define-color view_fg_color #fff3e6; +@define-color card_bg_color #18130b; +@define-color card_fg_color #fff3e6; +@define-color sidebar_bg_color @window_bg_color; +@define-color sidebar_fg_color @window_fg_color; +@define-color sidebar_border_color @window_bg_color; +@define-color sidebar_backdrop_color @window_bg_color; + diff --git a/config/gtk-3.0/gtk.css b/config/gtk-3.0/gtk.css new file mode 100644 index 0000000..9ae6023 --- /dev/null +++ b/config/gtk-3.0/gtk.css @@ -0,0 +1,164 @@ +/** + * Aether Theme with Sharp Corners (Hyprland-inspired) + * GTK4/Adwaita Custom Styling + */ + +/* Dynamic color palette from Aether */ +/* Adwaita Color Overrides */ +@import 'colors.css'; +@define-color accent_bg_color @blue; +@define-color accent_fg_color @background; +@define-color accent_color @cyan; + +@define-color window_bg_color @background; +@define-color window_fg_color @foreground; + +/* Sidebar background and content */ +@define-color view_bg_color @black; +@define-color view_fg_color @foreground; +@define-color sidebar_bg_color @black; +@define-color sidebar_fg_color @foreground; +@define-color sidebar_backdrop_color @black; +@define-color sidebar_shade_color @black; + +@define-color headerbar_bg_color @background; +@define-color headerbar_fg_color @foreground; +@define-color headerbar_backdrop_color @black; +@define-color headerbar_shade_color @black; +@define-color card_bg_color @background; +@define-color card_fg_color @foreground; + +@define-color popover_bg_color @black; +@define-color popover_fg_color @foreground; + +@define-color destructive_bg_color @red; +@define-color destructive_fg_color @background; + +@define-color success_bg_color @green; +@define-color success_fg_color @background; + +@define-color warning_bg_color @yellow; +@define-color warning_fg_color @background; + +@define-color error_bg_color @red; +@define-color error_fg_color @background; + +@define-color dialog_bg_color @background; +@define-color dialog_fg_color @foreground; + +@define-color borders alpha(@foreground, 0.1); + +/* GTK3 Adwaita Legacy Color Variables */ +@define-color theme_fg_color @foreground; +@define-color theme_text_color @foreground; +@define-color theme_bg_color @background; +@define-color theme_base_color @black; +@define-color theme_selected_bg_color @blue; +@define-color theme_selected_fg_color @background; +@define-color insensitive_bg_color @background; +@define-color insensitive_fg_color @bright_black; +@define-color insensitive_base_color @black; +@define-color theme_unfocused_fg_color @foreground; +@define-color theme_unfocused_text_color @foreground; +@define-color theme_unfocused_bg_color @background; +@define-color theme_unfocused_base_color @black; +@define-color theme_unfocused_selected_bg_color @blue; +@define-color theme_unfocused_selected_fg_color @background; +@define-color unfocused_insensitive_color @bright_black; +@define-color unfocused_borders alpha(@foreground, 0.1); +@define-color warning_color @yellow; +@define-color error_color @red; +@define-color success_color @green; +@define-color destructive_color @red; + +/* Content View Colors */ +@define-color content_view_bg @black; +@define-color text_view_bg @black; + +/* GtkMessageDialog styling */ +/* Target the entire dialog's background */ +messagedialog { + background-color: @dialog_bg_color; +} + +/* Target the main message label inside the dialog */ +messagedialog label { + color: @dialog_fg_color; + font-size: 14pt; + font-weight: bold; +} + +/* Target the secondary, more detailed text (if any) */ +messagedialog .secondary-text { + font-size: 10pt; + font-style: italic; +} + +/* Target the buttons in the dialog's action area */ +messagedialog button { + background-color: @black; + color: @foreground; + border: 1px solid @bright_black; + padding: 10px; +} + +messagedialog button:hover { + background-color: @blue; +} + +banner revealer widget { + background: @bright_black; + padding: 5px; + color: @foreground; +} + +/* GtkAlertDialog styling */ +alertdialog.background { + background-color: @dialog_bg_color; + color: @dialog_fg_color; +} + +alertdialog .titlebar { + background-color: @headerbar_bg_color; + color: @headerbar_fg_color; +} + +alertdialog box { + background-color: @dialog_bg_color; +} + +alertdialog label { + color: @dialog_fg_color; +} + +filechooser .dialog-action-box { + border-top: 1px solid @bright_black; +} + +filechooser .dialog-action-box:backdrop { + border-top-color: @black; +} + +filechooser #pathbarbox { + border-bottom: 1px solid @bright_black; +} + +filechooserbutton:drop(active) { + box-shadow: none; + border-color: transparent; +} + +toast { + background-color: @black; + color: @foreground; +} + +toast button.circular.flat.image-button:hover { + color: @background; + background-color: @red; +} + +/* Sharp corners, Hyprland-inspired */ +* { + border-radius: 0; +} diff --git a/config/gtk-3.0/gtk.css.backup b/config/gtk-3.0/gtk.css.backup new file mode 100644 index 0000000..7892d44 --- /dev/null +++ b/config/gtk-3.0/gtk.css.backup @@ -0,0 +1,184 @@ +/** + * Aether Theme with Sharp Corners (Hyprland-inspired) + * GTK4/Adwaita Custom Styling + */ + +/* Dynamic color palette from Aether */ +@define-color background #07090B; +@define-color foreground #E6F0F7; + +@define-color black #07090B; +@define-color red #ff2a29; +@define-color green #82D1B9; +@define-color yellow #ffe747; +@define-color blue #458FEE; +@define-color magenta #FC4FF8; +@define-color cyan #79f7fb; +@define-color white #E6F0F7; +@define-color bright_black #6e7c8a; +@define-color bright_red #ff8585; +@define-color bright_green #b4e7d7; +@define-color bright_yellow #fff197; +@define-color bright_blue #94c1fa; +@define-color bright_magenta #ff99fd; +@define-color bright_cyan #a9fcff; +@define-color bright_white #d7e8f4; + +/* Adwaita Color Overrides */ +@define-color accent_bg_color @blue; +@define-color accent_fg_color @background; +@define-color accent_color @cyan; + +@define-color window_bg_color @background; +@define-color window_fg_color @foreground; + +/* Sidebar background and content */ +@define-color view_bg_color @black; +@define-color view_fg_color @foreground; +@define-color sidebar_bg_color @black; +@define-color sidebar_fg_color @foreground; +@define-color sidebar_backdrop_color @black; +@define-color sidebar_shade_color @black; + +@define-color headerbar_bg_color @background; +@define-color headerbar_fg_color @foreground; +@define-color headerbar_backdrop_color @black; +@define-color headerbar_shade_color @black; +@define-color card_bg_color @background; +@define-color card_fg_color @foreground; + +@define-color popover_bg_color @black; +@define-color popover_fg_color @foreground; + +@define-color destructive_bg_color @red; +@define-color destructive_fg_color @background; + +@define-color success_bg_color @green; +@define-color success_fg_color @background; + +@define-color warning_bg_color @yellow; +@define-color warning_fg_color @background; + +@define-color error_bg_color @red; +@define-color error_fg_color @background; + +@define-color dialog_bg_color @background; +@define-color dialog_fg_color @foreground; + +@define-color borders alpha(@foreground, 0.1); + +/* GTK3 Adwaita Legacy Color Variables */ +@define-color theme_fg_color @foreground; +@define-color theme_text_color @foreground; +@define-color theme_bg_color @background; +@define-color theme_base_color @black; +@define-color theme_selected_bg_color @blue; +@define-color theme_selected_fg_color @background; +@define-color insensitive_bg_color @background; +@define-color insensitive_fg_color @bright_black; +@define-color insensitive_base_color @black; +@define-color theme_unfocused_fg_color @foreground; +@define-color theme_unfocused_text_color @foreground; +@define-color theme_unfocused_bg_color @background; +@define-color theme_unfocused_base_color @black; +@define-color theme_unfocused_selected_bg_color @blue; +@define-color theme_unfocused_selected_fg_color @background; +@define-color unfocused_insensitive_color @bright_black; +@define-color unfocused_borders alpha(@foreground, 0.1); +@define-color warning_color @yellow; +@define-color error_color @red; +@define-color success_color @green; +@define-color destructive_color @red; + +/* Content View Colors */ +@define-color content_view_bg @black; +@define-color text_view_bg @black; + +/* GtkMessageDialog styling */ +/* Target the entire dialog's background */ +messagedialog { + background-color: @dialog_bg_color; +} + +/* Target the main message label inside the dialog */ +messagedialog label { + color: @dialog_fg_color; + font-size: 14pt; + font-weight: bold; +} + +/* Target the secondary, more detailed text (if any) */ +messagedialog .secondary-text { + font-size: 10pt; + font-style: italic; +} + +/* Target the buttons in the dialog's action area */ +messagedialog button { + background-color: @black; + color: @foreground; + border: 1px solid @bright_black; + padding: 10px; +} + +messagedialog button:hover { + background-color: @blue; +} + +banner revealer widget { + background: @bright_black; + padding: 5px; + color: @foreground; +} + +/* GtkAlertDialog styling */ +alertdialog.background { + background-color: @dialog_bg_color; + color: @dialog_fg_color; +} + +alertdialog .titlebar { + background-color: @headerbar_bg_color; + color: @headerbar_fg_color; +} + +alertdialog box { + background-color: @dialog_bg_color; +} + +alertdialog label { + color: @dialog_fg_color; +} + +filechooser .dialog-action-box { + border-top: 1px solid @bright_black; +} + +filechooser .dialog-action-box:backdrop { + border-top-color: @black; +} + +filechooser #pathbarbox { + border-bottom: 1px solid @bright_black; +} + +filechooserbutton:drop(active) { + box-shadow: none; + border-color: transparent; +} + +toast { + background-color: @black; + color: @foreground; +} + +toast button.circular.flat.image-button:hover { + color: @background; + background-color: @red; +} + +/* Sharp corners, Hyprland-inspired */ +* { + border-radius: 0; +} + diff --git a/config/gtk-3.0/gtk.css.backup.1776208757 b/config/gtk-3.0/gtk.css.backup.1776208757 new file mode 100644 index 0000000..c9763f7 --- /dev/null +++ b/config/gtk-3.0/gtk.css.backup.1776208757 @@ -0,0 +1 @@ +@import 'colors.css'; \ No newline at end of file diff --git a/config/gtk-3.0/settings.ini b/config/gtk-3.0/settings.ini new file mode 100644 index 0000000..ed6f01a --- /dev/null +++ b/config/gtk-3.0/settings.ini @@ -0,0 +1,26 @@ +[Settings] +gtk-theme-name=adw-gtk3-dark +gtk-icon-theme-name=Adwaita +gtk-font-name=IosevkaTerm Nerd Font Bold 11 +gtk-cursor-theme-name=Bibata-Modern-Ice +gtk-cursor-theme-size=24 +gtk-toolbar-style=3 +gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR +gtk-button-images=0 +gtk-menu-images=0 +gtk-enable-event-sounds=1 +gtk-enable-input-feedback-sounds=0 +gtk-xft-antialias=1 +gtk-xft-hinting=1 +gtk-xft-hintstyle=hintmedium +gtk-xft-rgba=rgb +gtk-application-prefer-dark-theme=1 +gtk-cursor-blink=true +gtk-cursor-blink-time=1000 +gtk-decoration-layout=icon:minimize,maximize,close +gtk-enable-animations=true +gtk-modules=colorreload-gtk-module +gtk-overlay-scrolling=false +gtk-primary-button-warps-slider=true +gtk-sound-theme-name=ocean +gtk-xft-dpi=98304 diff --git a/config/gtk-4.0/assets b/config/gtk-4.0/assets new file mode 120000 index 0000000..43b9c06 --- /dev/null +++ b/config/gtk-4.0/assets @@ -0,0 +1 @@ +/usr/share/themes/Materia-dark/gtk-4.0/assets \ No newline at end of file diff --git a/config/gtk-4.0/colors.css b/config/gtk-4.0/colors.css new file mode 100644 index 0000000..d72f9df --- /dev/null +++ b/config/gtk-4.0/colors.css @@ -0,0 +1,23 @@ +/* +* GTK Colors +* Generated with Matugen +*/ + +@define-color accent_color #f2be6e; +@define-color accent_fg_color #281800; +@define-color accent_bg_color #f2be6e; +@define-color window_bg_color #18130b; +@define-color window_fg_color #fff3e6; +@define-color headerbar_bg_color #18130b; +@define-color headerbar_fg_color #fff3e6; +@define-color popover_bg_color #18130b; +@define-color popover_fg_color #fff3e6; +@define-color view_bg_color #18130b; +@define-color view_fg_color #fff3e6; +@define-color card_bg_color #18130b; +@define-color card_fg_color #fff3e6; +@define-color sidebar_bg_color @window_bg_color; +@define-color sidebar_fg_color @window_fg_color; +@define-color sidebar_border_color @window_bg_color; +@define-color sidebar_backdrop_color @window_bg_color; + diff --git a/config/gtk-4.0/colors.css.bak b/config/gtk-4.0/colors.css.bak new file mode 100644 index 0000000..d72f9df --- /dev/null +++ b/config/gtk-4.0/colors.css.bak @@ -0,0 +1,23 @@ +/* +* GTK Colors +* Generated with Matugen +*/ + +@define-color accent_color #f2be6e; +@define-color accent_fg_color #281800; +@define-color accent_bg_color #f2be6e; +@define-color window_bg_color #18130b; +@define-color window_fg_color #fff3e6; +@define-color headerbar_bg_color #18130b; +@define-color headerbar_fg_color #fff3e6; +@define-color popover_bg_color #18130b; +@define-color popover_fg_color #fff3e6; +@define-color view_bg_color #18130b; +@define-color view_fg_color #fff3e6; +@define-color card_bg_color #18130b; +@define-color card_fg_color #fff3e6; +@define-color sidebar_bg_color @window_bg_color; +@define-color sidebar_fg_color @window_fg_color; +@define-color sidebar_border_color @window_bg_color; +@define-color sidebar_backdrop_color @window_bg_color; + diff --git a/config/gtk-4.0/gtk-dark.css b/config/gtk-4.0/gtk-dark.css new file mode 120000 index 0000000..fd29fc8 --- /dev/null +++ b/config/gtk-4.0/gtk-dark.css @@ -0,0 +1 @@ +/usr/share/themes/adw-gtk3-dark/gtk-4.0/gtk-dark.css \ No newline at end of file diff --git a/config/gtk-4.0/gtk.css b/config/gtk-4.0/gtk.css new file mode 100644 index 0000000..81577d9 --- /dev/null +++ b/config/gtk-4.0/gtk.css @@ -0,0 +1,3 @@ +@import url('colors.css'); +/*@import url('libadwaita.css'); +@import url('libadwaita-tweaks.css');*/ diff --git a/config/gtk-4.0/gtk.css.backup b/config/gtk-4.0/gtk.css.backup new file mode 100644 index 0000000..7892d44 --- /dev/null +++ b/config/gtk-4.0/gtk.css.backup @@ -0,0 +1,184 @@ +/** + * Aether Theme with Sharp Corners (Hyprland-inspired) + * GTK4/Adwaita Custom Styling + */ + +/* Dynamic color palette from Aether */ +@define-color background #07090B; +@define-color foreground #E6F0F7; + +@define-color black #07090B; +@define-color red #ff2a29; +@define-color green #82D1B9; +@define-color yellow #ffe747; +@define-color blue #458FEE; +@define-color magenta #FC4FF8; +@define-color cyan #79f7fb; +@define-color white #E6F0F7; +@define-color bright_black #6e7c8a; +@define-color bright_red #ff8585; +@define-color bright_green #b4e7d7; +@define-color bright_yellow #fff197; +@define-color bright_blue #94c1fa; +@define-color bright_magenta #ff99fd; +@define-color bright_cyan #a9fcff; +@define-color bright_white #d7e8f4; + +/* Adwaita Color Overrides */ +@define-color accent_bg_color @blue; +@define-color accent_fg_color @background; +@define-color accent_color @cyan; + +@define-color window_bg_color @background; +@define-color window_fg_color @foreground; + +/* Sidebar background and content */ +@define-color view_bg_color @black; +@define-color view_fg_color @foreground; +@define-color sidebar_bg_color @black; +@define-color sidebar_fg_color @foreground; +@define-color sidebar_backdrop_color @black; +@define-color sidebar_shade_color @black; + +@define-color headerbar_bg_color @background; +@define-color headerbar_fg_color @foreground; +@define-color headerbar_backdrop_color @black; +@define-color headerbar_shade_color @black; +@define-color card_bg_color @background; +@define-color card_fg_color @foreground; + +@define-color popover_bg_color @black; +@define-color popover_fg_color @foreground; + +@define-color destructive_bg_color @red; +@define-color destructive_fg_color @background; + +@define-color success_bg_color @green; +@define-color success_fg_color @background; + +@define-color warning_bg_color @yellow; +@define-color warning_fg_color @background; + +@define-color error_bg_color @red; +@define-color error_fg_color @background; + +@define-color dialog_bg_color @background; +@define-color dialog_fg_color @foreground; + +@define-color borders alpha(@foreground, 0.1); + +/* GTK3 Adwaita Legacy Color Variables */ +@define-color theme_fg_color @foreground; +@define-color theme_text_color @foreground; +@define-color theme_bg_color @background; +@define-color theme_base_color @black; +@define-color theme_selected_bg_color @blue; +@define-color theme_selected_fg_color @background; +@define-color insensitive_bg_color @background; +@define-color insensitive_fg_color @bright_black; +@define-color insensitive_base_color @black; +@define-color theme_unfocused_fg_color @foreground; +@define-color theme_unfocused_text_color @foreground; +@define-color theme_unfocused_bg_color @background; +@define-color theme_unfocused_base_color @black; +@define-color theme_unfocused_selected_bg_color @blue; +@define-color theme_unfocused_selected_fg_color @background; +@define-color unfocused_insensitive_color @bright_black; +@define-color unfocused_borders alpha(@foreground, 0.1); +@define-color warning_color @yellow; +@define-color error_color @red; +@define-color success_color @green; +@define-color destructive_color @red; + +/* Content View Colors */ +@define-color content_view_bg @black; +@define-color text_view_bg @black; + +/* GtkMessageDialog styling */ +/* Target the entire dialog's background */ +messagedialog { + background-color: @dialog_bg_color; +} + +/* Target the main message label inside the dialog */ +messagedialog label { + color: @dialog_fg_color; + font-size: 14pt; + font-weight: bold; +} + +/* Target the secondary, more detailed text (if any) */ +messagedialog .secondary-text { + font-size: 10pt; + font-style: italic; +} + +/* Target the buttons in the dialog's action area */ +messagedialog button { + background-color: @black; + color: @foreground; + border: 1px solid @bright_black; + padding: 10px; +} + +messagedialog button:hover { + background-color: @blue; +} + +banner revealer widget { + background: @bright_black; + padding: 5px; + color: @foreground; +} + +/* GtkAlertDialog styling */ +alertdialog.background { + background-color: @dialog_bg_color; + color: @dialog_fg_color; +} + +alertdialog .titlebar { + background-color: @headerbar_bg_color; + color: @headerbar_fg_color; +} + +alertdialog box { + background-color: @dialog_bg_color; +} + +alertdialog label { + color: @dialog_fg_color; +} + +filechooser .dialog-action-box { + border-top: 1px solid @bright_black; +} + +filechooser .dialog-action-box:backdrop { + border-top-color: @black; +} + +filechooser #pathbarbox { + border-bottom: 1px solid @bright_black; +} + +filechooserbutton:drop(active) { + box-shadow: none; + border-color: transparent; +} + +toast { + background-color: @black; + color: @foreground; +} + +toast button.circular.flat.image-button:hover { + color: @background; + background-color: @red; +} + +/* Sharp corners, Hyprland-inspired */ +* { + border-radius: 0; +} + diff --git a/config/niri/dms/windowrules.kdl b/config/gtk-4.0/libadwaita-tweaks.css similarity index 100% rename from config/niri/dms/windowrules.kdl rename to config/gtk-4.0/libadwaita-tweaks.css diff --git a/config/gtk-4.0/libadwaita.css b/config/gtk-4.0/libadwaita.css new file mode 120000 index 0000000..aee2e59 --- /dev/null +++ b/config/gtk-4.0/libadwaita.css @@ -0,0 +1 @@ +/usr/share/themes/adw-gtk3-dark/gtk-4.0/libadwaita.css \ No newline at end of file diff --git a/config/gtk-4.0/settings.ini b/config/gtk-4.0/settings.ini new file mode 100644 index 0000000..6537727 --- /dev/null +++ b/config/gtk-4.0/settings.ini @@ -0,0 +1,7 @@ +[Settings] +gtk-theme-name=adw-gtk3-dark +gtk-icon-theme-name=Adwaita +gtk-font-name=IosevkaTerm Nerd Font Bold 11 +gtk-cursor-theme-name=Bibata-Modern-Ice +gtk-cursor-theme-size=24 +gtk-application-prefer-dark-theme=1 diff --git a/config/hypr/colors-hyprlock.conf b/config/hypr/colors-hyprlock.conf new file mode 100644 index 0000000..e8bd391 --- /dev/null +++ b/config/hypr/colors-hyprlock.conf @@ -0,0 +1,116 @@ +# ┳┳┓┏┓┏┳┓┳┳┏┓┏┓┳┓ ┓┏┓┏┏┓┳┓┓ ┏┓┏┓┓┏┓ +# ┃┃┃┣┫ ┃ ┃┃┃┓┣ ┃┃━━┣┫┗┫┃┃┣┫┃ ┃┃┃ ┃┫ +# ┛ ┗┛┗ ┻ ┗┛┗┛┗┛┛┗ ┛┗┗┛┣┛┛┗┗┛┗┛┗┛┛┗┛ +# + + + + +# Image Path +$image = /home/unconfer/.walls/retro/a_logo_with_black_text_and_orange_circles_and_flowers.png + +# An alpha background +$surface_alpha = rgba(18130b4d) + +# All Colors + +$background = rgba(18130bff) + +$error = rgba(ffb4abff) + +$error_container = rgba(da342eff) + +$inverse_on_surface = rgba(362f27ff) + +$inverse_primary = rgba(6f4a00ff) + +$inverse_surface = rgba(ede1d4ff) + +$on_background = rgba(ede1d4ff) + +$on_error = rgba(4b0002ff) + +$on_error_container = rgba(ffffffff) + +$on_primary = rgba(2f1d00ff) + +$on_primary_container = rgba(ffffffff) + +$on_primary_fixed = rgba(281800ff) + +$on_primary_fixed_variant = rgba(583a00ff) + +$on_secondary = rgba(2c1e08ff) + +$on_secondary_container = rgba(ffffffff) + +$on_secondary_fixed = rgba(261904ff) + +$on_secondary_fixed_variant = rgba(4e3d24ff) + +$on_surface = rgba(fff3e6ff) + +$on_surface_variant = rgba(d2c4b4ff) + +$on_tertiary = rgba(142508ff) + +$on_tertiary_container = rgba(ffffffff) + +$on_tertiary_fixed = rgba(0e2004ff) + +$on_tertiary_fixed_variant = rgba(324625ff) + +$outline = rgba(aa9e8eff) + +$outline_variant = rgba(7e7365ff) + +$primary = rgba(f2be6eff) + +$primary_container = rgba(976c25ff) + +$primary_fixed = rgba(ffddb0ff) + +$primary_fixed_dim = rgba(f2be6eff) + +$scrim = rgba(000000ff) + +$secondary = rgba(dcc3a1ff) + +$secondary_container = rgba(867154ff) + +$secondary_fixed = rgba(f9debbff) + +$secondary_fixed_dim = rgba(dcc3a1ff) + +$shadow = rgba(000000ff) + +$source_color = rgba(ac9e8dff) + +$surface = rgba(18130bff) + +$surface_bright = rgba(463f36ff) + +$surface_container = rgba(2a241cff) + +$surface_container_high = rgba(352e26ff) + +$surface_container_highest = rgba(403930ff) + +$surface_container_low = rgba(211c14ff) + +$surface_container_lowest = rgba(0e0a04ff) + +$surface_dim = rgba(18130bff) + +$surface_tint = rgba(f2be6eff) + +$surface_variant = rgba(4f4539ff) + +$tertiary = rgba(b6cea3ff) + +$tertiary_container = rgba(657b55ff) + +$tertiary_fixed = rgba(d2eabdff) + +$tertiary_fixed_dim = rgba(b6cea3ff) + diff --git a/config/hypr/colors.conf b/config/hypr/colors.conf new file mode 100644 index 0000000..b5e4cca --- /dev/null +++ b/config/hypr/colors.conf @@ -0,0 +1,102 @@ +$image = /home/unconfer/.walls/retro/a_logo_with_black_text_and_orange_circles_and_flowers.png + +$background = rgba(18130bff) + +$error = rgba(ffb4abff) + +$error_container = rgba(da342eff) + +$inverse_on_surface = rgba(362f27ff) + +$inverse_primary = rgba(6f4a00ff) + +$inverse_surface = rgba(ede1d4ff) + +$on_background = rgba(ede1d4ff) + +$on_error = rgba(4b0002ff) + +$on_error_container = rgba(ffffffff) + +$on_primary = rgba(2f1d00ff) + +$on_primary_container = rgba(ffffffff) + +$on_primary_fixed = rgba(281800ff) + +$on_primary_fixed_variant = rgba(583a00ff) + +$on_secondary = rgba(2c1e08ff) + +$on_secondary_container = rgba(ffffffff) + +$on_secondary_fixed = rgba(261904ff) + +$on_secondary_fixed_variant = rgba(4e3d24ff) + +$on_surface = rgba(fff3e6ff) + +$on_surface_variant = rgba(d2c4b4ff) + +$on_tertiary = rgba(142508ff) + +$on_tertiary_container = rgba(ffffffff) + +$on_tertiary_fixed = rgba(0e2004ff) + +$on_tertiary_fixed_variant = rgba(324625ff) + +$outline = rgba(aa9e8eff) + +$outline_variant = rgba(7e7365ff) + +$primary = rgba(f2be6eff) + +$primary_container = rgba(976c25ff) + +$primary_fixed = rgba(ffddb0ff) + +$primary_fixed_dim = rgba(f2be6eff) + +$scrim = rgba(000000ff) + +$secondary = rgba(dcc3a1ff) + +$secondary_container = rgba(867154ff) + +$secondary_fixed = rgba(f9debbff) + +$secondary_fixed_dim = rgba(dcc3a1ff) + +$shadow = rgba(000000ff) + +$source_color = rgba(ac9e8dff) + +$surface = rgba(18130bff) + +$surface_bright = rgba(463f36ff) + +$surface_container = rgba(2a241cff) + +$surface_container_high = rgba(352e26ff) + +$surface_container_highest = rgba(403930ff) + +$surface_container_low = rgba(211c14ff) + +$surface_container_lowest = rgba(0e0a04ff) + +$surface_dim = rgba(18130bff) + +$surface_tint = rgba(f2be6eff) + +$surface_variant = rgba(4f4539ff) + +$tertiary = rgba(b6cea3ff) + +$tertiary_container = rgba(657b55ff) + +$tertiary_fixed = rgba(d2eabdff) + +$tertiary_fixed_dim = rgba(b6cea3ff) + diff --git a/config/hypr/hyprlock.conf b/config/hypr/hyprlock.conf index 1a56d36..0fc8706 100644 --- a/config/hypr/hyprlock.conf +++ b/config/hypr/hyprlock.conf @@ -8,6 +8,8 @@ # # you can get started by copying this config to ~/.config/hypr/hyprlock.conf # +# +source = colors.conf $font = IosevkaTerm NFM ExtraBold @@ -40,8 +42,8 @@ animations { background { monitor = - path = screenshot - blur_passes = 3 + path = $image + blur_passes = 4 } # for clock @@ -51,22 +53,23 @@ input-field { monitor = size = 20%, 5% outline_thickness = 3 - inner_color = rgba(0, 0, 0, 0.0) # no fill + inner_color = $background + border = $on_secondary_fixed_variant - outer_color = rgba(eef7fdee) - check_color = rgba(ffde00ee) - fail_color = rgba(ff0100ee) - - font_color = rgba(eef7fdee) + outer_color = $secondary + check_color = $inverse_primary + fail_color = $error_container + font_color = $primary_fixed fade_on_empty = false - rounding = 10 + rounding = 15 font_family = $font placeholder_text = input password - fail_text = $PAMFAIL + fail_text = authentication failed! # uncomment if you wish to display a message during authentication - #check_text = Authenticating... + check_text = authenticating + # uncomment to use a letter instead of a dot to indicate the typed password # dots_text_format = * @@ -88,6 +91,8 @@ label { font_size = 100 font_family = $font + color = $primary_fixed + position = 0%, -10% halign = center valign = top @@ -99,6 +104,7 @@ label { text = cmd[update:60000] date +"%A, %d %B %Y" # update every 60 seconds font_size = 25 font_family = $font + color = $primary_fixed position = 0%, -28% halign = center @@ -111,6 +117,7 @@ label { font_size = 24 onclick = niri msg action switch-layout next + color = $primary_fixed position = 13%, 20% halign = center valign = bottom diff --git a/config/hypr/hyprlock.conf.bak b/config/hypr/hyprlock.conf.bak index dca916d..997ed14 100644 --- a/config/hypr/hyprlock.conf.bak +++ b/config/hypr/hyprlock.conf.bak @@ -8,13 +8,18 @@ # # you can get started by copying this config to ~/.config/hypr/hyprlock.conf # +# +source = colors.conf $font = IosevkaTerm NFM ExtraBold general { hide_cursor = false -} + no_fade_in = true + disable_loading_bar = false + grace = 1 +} # uncomment to enable fingerprint authentication # auth { # fingerprint { @@ -26,18 +31,23 @@ general { # } animations { - enabled = false - bezier = linear, 1, 1, 0, 0 - animation = fadeIn, 1, 5, linear + enabled = true + bezier = easeOutQuint, 0, 1, 0.6, 0.99 + +# bezier = linear, 1, 1, 0, 0 + animation = fadeIn, 1, 1, linear animation = fadeOut, 1, 5, linear - animation = inputFieldDots, 1, 2, linear + animation = inputFieldDots, 1, 1.5, linear } background { monitor = path = screenshot - blur_passes = 4 + blur_passes = 3 + } +# for clock + input-field { monitor = @@ -45,22 +55,21 @@ input-field { outline_thickness = 3 inner_color = rgba(0, 0, 0, 0.0) # no fill - #outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg - #check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg - #fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg + outer_color = rgba(eef7fdee) + check_color = rgba(ffde00ee) + fail_color = rgba(ff0100ee) - outer_color = rgba(EEF7FDee) - check_color = rgba(FFDE00ee) - fail_color = rgba(FF0100ee) - - font_color = rgb(143, 143, 143) + font_color = rgba(eef7fdee) fade_on_empty = false - rounding = 3 + rounding = 10 font_family = $font - placeholder_text = Password here: + placeholder_text = input password fail_text = $PAMFAIL + # uncomment if you wish to display a message during authentication + #check_text = Authenticating... + # uncomment to use a letter instead of a dot to indicate the typed password # dots_text_format = * # dots_size = 0.4 @@ -69,19 +78,19 @@ input-field { # uncomment to use an input indicator that does not show the password length (similar to swaylock's input indicator) # hide_input = true - position = 0, -200 +position = 0%, 20% halign = center - valign = center + valign = bottom } # TIME label { monitor = text = $TIME # ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#variable-substitution - font_size = 90 + font_size = 100 font_family = $font - position = 0, -40 + position = 0%, -10% halign = center valign = top } @@ -93,7 +102,7 @@ label { font_size = 25 font_family = $font - position = 0, -200 + position = 0%, -28% halign = center valign = top } @@ -102,9 +111,9 @@ label { monitor = text = $LAYOUT[en,ru] font_size = 24 - onclick = hyprctl switchxkblayout all next + onclick = niri msg action switch-layout next - position = 250, -200 + position = 13%, 20% halign = center - valign = center + valign = bottom } diff --git a/config/hypr/hyprtoolkit.conf b/config/hypr/hyprtoolkit.conf index ace4dbd..225d38b 100644 --- a/config/hypr/hyprtoolkit.conf +++ b/config/hypr/hyprtoolkit.conf @@ -1,17 +1,7 @@ -background = 0xff07090b -base = 0xff171919 -text = 0xffeef7fd -alternate_base = 0xff1e2123 -bright_text = 0xffd2dee7 -accent = 0xff00fed4 -h1_size = 17 -h2_size = 14 -h3_size = 12 -font_size = 14 -small_font_size = 11 -icon_theme = -font_family = IosevkaTerm Nerd Font -font_family_monospace = -rounding_large = 10 -rounding_small = 5 - +background = 0xff18130b +base = 0xff2a241c +text = 0xfffff3e6 +alternate_base = 0xff352e26 +bright_text = 0xffd2c4b4 +accent = 0xfff2be6e +accent_secondary = 0xffdcc3a1 diff --git a/config/hyprwave/config.conf b/config/hyprwave/config.conf index 948b7c9..1ac3395 100644 --- a/config/hyprwave/config.conf +++ b/config/hyprwave/config.conf @@ -7,11 +7,11 @@ edge = left # Margin from the screen edge (in pixels) -margin = 20 +margin = 57 # Layer to render on # Options: background, bottom, top, overlay -layer = overlay +layer = top idle_timeout= 1 # Exclusive zone: 0 = respect other surfaces, -1 = overlap everything @@ -23,7 +23,7 @@ now_playing = true [Visualizer] # Enable/disable visualizer (horizontal layout only) -enabled = false +enabled = true # Idle timeout in seconds before visualizer appears # Set to 0 to disable auto-activation diff --git a/config/hyprwhspr/config.json b/config/hyprwhspr/config.json index e2dbde5..d652f29 100644 --- a/config/hyprwhspr/config.json +++ b/config/hyprwhspr/config.json @@ -5,5 +5,6 @@ "transcription_backend": "faster-whisper", "paste_mode": "ctrl_shift", "recording_mode": "auto", - "language": "ru" + "language": "ru", + "post_transcription_hook": "wl-copy" } diff --git a/config/hyprwhspr/mic_osd.pid b/config/hyprwhspr/mic_osd.pid index 84a3f85..426992e 100644 --- a/config/hyprwhspr/mic_osd.pid +++ b/config/hyprwhspr/mic_osd.pid @@ -1 +1 @@ -1774 \ No newline at end of file +1941 \ No newline at end of file diff --git a/config/ironbar/colors.css b/config/ironbar/colors.css new file mode 100644 index 0000000..808102b --- /dev/null +++ b/config/ironbar/colors.css @@ -0,0 +1,12 @@ +:root { + --color-dark-primary: #18130b; + --color-dark-secondary: #2a241c; + --color-white: #fff3e6; + --color-active: #f2be6e; + --color-urgent: #da342e; + --margin-lg: 1em; + --margin-sm: 1em; + +} + + diff --git a/config/ironbar/config.json b/config/ironbar/config.json index 64d353c..4f0a2f1 100644 --- a/config/ironbar/config.json +++ b/config/ironbar/config.json @@ -31,7 +31,10 @@ "type": "button", "name": "hyprwave", "class": "hyprwave-class", - "on_click": "!hyprwave-toggle visibility", + + "on_scroll_up": "swayosd-client --output-volume 5 --max-volume 200", + "on_scroll_down": "swayosd-client --output-volume -5 --max-volume 200", + "on_click": "!hyprwave-toggle visibility && sleep 0.009s && hyprwave-toggle expand", "widgets": [ { "type": "label", @@ -42,7 +45,64 @@ } ] }, - { +{ + "type": "custom", + "bar": [ + { + "type": "button", + "name": "volume-custom", + "class": "volume-custom-class", + "on_click": "!~/.config/ironbar/scripts/volume.sh", + "on_scroll_up": "swayosd-client --output-volume 5 --max-volume 200", + "on_scroll_down": "swayosd-client --output-volume -5 --max-volume 200", + "widgets": [ + { + "type": "label", + "label": " ", + "size": 16 + } + ] + } + ] + }, + +{ + "type": "custom", + "bar": [ + { + "type": "button", + "name": "clipboard-custom", + "class": "clipboard-custom-class", + "on_click": "!~/.config/ironbar/scripts/clipse.sh", + "widgets": [ + { + "type": "label", + "label": " ", + "size": 16 + } + ] + } + ] + }, + { + "type": "custom", + "bar": [ + { + "type": "button", + "name": "matugen", + "class": "matugen-class", + "on_click": "! bash ~/.config/ironbar/scripts/matugen.sh", + "widgets": [ + { + "type": "label", + "label": " ", + "size": 16 + } + ] + } + ] + }, + { "type": "notifications", "show_count": true, "icons": { @@ -54,6 +114,26 @@ "open_dnd": "󱅮 " } }, + { + "type": "custom", + "bar": [ + { + "type": "button", + "name": "niri-focus-column-custom", + "class": "niri-focus-column-class", + "on_click": "!niri msg action focus-column-left", + "on_click_right": "niri msg action focus-column-right", + "widgets": [ + { + "type": "label", + "label": "<->", + "size": 16 + } + ] + } + ] + }, + { diff --git a/config/ironbar/schema-v0.18.0.json b/config/ironbar/schema-v0.18.0.json deleted file mode 100644 index 515e14e..0000000 --- a/config/ironbar/schema-v0.18.0.json +++ /dev/null @@ -1,6374 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "title": "Config", - "description": "The following is a list of all top-level bar config options.\n\nThese options can either be written at the very top object of your config,\nor within an object in the [monitors](#monitors) config,\ndepending on your [use-case](#2-pick-your-use-case).", - "type": "object", - "properties": { - "anchor_to_edges": { - "description": "Whether to anchor the bar to the edges of the screen.\nSetting to false centers the bar.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "autohide": { - "description": "The duration in milliseconds before the bar is hidden after the cursor leaves.\nLeave unset to disable auto-hide behaviour.\n\n**Default**: `null`", - "type": [ - "integer", - "null" - ], - "format": "uint64", - "default": null, - "minimum": 0 - }, - "center": { - "description": "An array of modules to append to the center of the bar.\n\n**Default**: `[]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/ModuleConfig" - } - }, - "double_click_time": { - "description": "The time in milliseconds to wait for a double-click.\nCan be set to a number (e.g., `250`) or `\"gtk\"` to use GTK's setting.\n\n**Default**: `250`", - "$ref": "#/$defs/DoubleClickTime" - }, - "end": { - "description": "An array of modules to append to the end of the bar.\nDepending on the orientation, this is either the bottom or right edge.\n\n**Default**: `[]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/ModuleConfig" - } - }, - "exclusive_zone": { - "description": "Whether the bar should reserve an exclusive zone around it.\n\nWhen true, this prevents windows from rendering in the same space\nas the bar, causing them to shift.\n\n**Default**: `true` unless `start_hidden` is set.", - "type": [ - "boolean", - "null" - ], - "default": null - }, - "height": { - "description": "The bar's height in pixels.\n\nNote that GTK treats this as a target minimum,\nand if content inside the bar is over this,\nit will automatically expand to fit.\n\n**Default**: `42`", - "type": "integer", - "format": "int32", - "default": 42 - }, - "icon_overrides": { - "description": "Map of app IDs (or classes) to icon names,\noverriding the app's default icon.\n\n**Default**: `{}`", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "default": {} - }, - "icon_theme": { - "description": "The name of the GTK icon theme to use.\nLeave unset to use the default system theme.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "ironvar_defaults": { - "description": "A map of [ironvar](ironvar) keys and values\nto initialize Ironbar with on startup.\n\n**Default**: `{}`\n\n# Example\n\nThe following initializes an ironvar called `foo` set to `bar` on startup:\n\n```corn\n{ ironvar_defaults.foo = \"bar\" }\n```\n\nThe variable can then be immediately fetched without needing to be manually set:\n\n```sh\n$ ironbar get foo\nok\nbar\n```", - "type": [ - "object", - "null" - ], - "additionalProperties": { - "type": "string" - }, - "default": null - }, - "layer": { - "description": "The layer-shell layer to place the bar on.\n\nTaken from the\n[wlr_layer_shell](https://wayland.app/protocols/wlr-layer-shell-unstable-v1#zwlr_layer_shell_v1:enum:layer) definition:\n\n> These values indicate which layers a surface can be rendered in.\n> They are ordered by z depth, bottom-most first.\n> Traditional shell surfaces will typically be rendered between the bottom and top layers.\n> Fullscreen shell surfaces are typically rendered at the top layer.\n> Multiple surfaces can share a single layer, and ordering within a single layer is undefined.\n\n**Valid options**: `background`, `bottom`, `top`, `overlay`\n
\n**Default**: `top`", - "type": "string", - "enum": [ - "background", - "bottom", - "top", - "overlay" - ] - }, - "margin": { - "description": "The margin to use on each side of the bar, in pixels.\nObject which takes `top`, `bottom`, `left` and `right` keys.\n\n**Default**: `0` on all sides.\n\n# Example\n\nThe following would set a 10px margin around each edge.\n\n```corn\n{\n margin.top = 10\n margin.bottom = 10\n margin.left = 10\n margin.right = 10\n}\n```", - "$ref": "#/$defs/MarginConfig" - }, - "monitors": { - "description": "A map of monitor names to configs.\nMonitor names can be supplied in two formats:\n\n- Connector names (`DP-1`, `HDMI-2`)\n- Descriptions (`ASUSTek COMPUTER INC PA278QV M4LMQS060475`).\n A `starts_with` is applied allowing you to omit part of the description if convenient.\n\nThe config values can be either:\n\n- a single object, which denotes a single bar for that monitor,\n- an array of multiple objects, which denotes multiple for that monitor.\n\nProviding this option overrides the single, global `bar` option.", - "type": [ - "object", - "null" - ], - "additionalProperties": { - "$ref": "#/$defs/MonitorConfig" - } - }, - "name": { - "description": "A unique identifier for the bar, used for controlling it over IPC.\nIf not set, uses a generated integer suffix.\n\n**Default**: `bar-n`", - "type": [ - "string", - "null" - ], - "default": null - }, - "popup_autohide": { - "description": "Whether to enable autohide behaviour on the popup.\n\nWhen enabled, clicking outside the popup will close it.\nOn some compositors, this may also aggressively steal mouse/keyboard focus.\n\n**Default**: `false`", - "type": "boolean", - "default": false - }, - "popup_gap": { - "description": "The size of the gap in pixels\nbetween the bar and the popup window.\n\n**Default**: `5`", - "type": "integer", - "format": "int32", - "default": 5 - }, - "position": { - "description": "The bar's position on screen.\n\n**Valid options**: `top`, `bottom`, `left`, `right`\n
\n**Default**: `bottom`", - "$ref": "#/$defs/BarPosition" - }, - "start": { - "description": "An array of modules to append to the start of the bar.\nDepending on the orientation, this is either the top of the left edge.\n\n**Default**: `[]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/ModuleConfig" - } - }, - "start_hidden": { - "description": "Whether the bar should be hidden when Ironbar starts.\n\n**Default**: `false`, unless `autohide` is set.", - "type": [ - "boolean", - "null" - ], - "default": null - } - }, - "$defs": { - "AdapterStatus": { - "type": "object", - "properties": { - "disabled": { - "description": "The value of `{adapter_status}` formatting token when adapter is disabled.\n\n**Default**: `\"Bluetooth disabled\"`", - "type": "string", - "default": "Bluetooth disabled" - }, - "disabling": { - "description": "The value of `{adapter_status}` formatting token when adapter is disabling.\n\n**Default**: `\"Disabling Bluetooth...\"`", - "type": "string", - "default": "Disabling Bluetooth..." - }, - "enabled": { - "description": "The value of `{adapter_status}` formatting token when adapter is enabled.\n\n**Default**: `\"Bluetooth enabled\"`", - "type": "string", - "default": "Bluetooth enabled" - }, - "enabling": { - "description": "The value of `{adapter_status}` formatting token when adapter is enabling.\n\n**Default**: `\"Enabling Bluetooth...\"`", - "type": "string", - "default": "Enabling Bluetooth..." - }, - "not_found": { - "description": "The value of `{adapter_status}` formatting token when adapter not found.\n\n**Default**: `\"No Bluetooth adapters found\"`", - "type": "string", - "default": "No Bluetooth adapters found" - } - } - }, - "BarConfig": { - "description": "The following is a list of all top-level bar config options.\n\nThese options can either be written at the very top object of your config,\nor within an object in the [monitors](#monitors) config,\ndepending on your [use-case](#2-pick-your-use-case).", - "type": "object", - "properties": { - "anchor_to_edges": { - "description": "Whether to anchor the bar to the edges of the screen.\nSetting to false centers the bar.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "autohide": { - "description": "The duration in milliseconds before the bar is hidden after the cursor leaves.\nLeave unset to disable auto-hide behaviour.\n\n**Default**: `null`", - "type": [ - "integer", - "null" - ], - "format": "uint64", - "default": null, - "minimum": 0 - }, - "center": { - "description": "An array of modules to append to the center of the bar.\n\n**Default**: `[]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/ModuleConfig" - } - }, - "end": { - "description": "An array of modules to append to the end of the bar.\nDepending on the orientation, this is either the bottom or right edge.\n\n**Default**: `[]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/ModuleConfig" - } - }, - "exclusive_zone": { - "description": "Whether the bar should reserve an exclusive zone around it.\n\nWhen true, this prevents windows from rendering in the same space\nas the bar, causing them to shift.\n\n**Default**: `true` unless `start_hidden` is set.", - "type": [ - "boolean", - "null" - ], - "default": null - }, - "height": { - "description": "The bar's height in pixels.\n\nNote that GTK treats this as a target minimum,\nand if content inside the bar is over this,\nit will automatically expand to fit.\n\n**Default**: `42`", - "type": "integer", - "format": "int32", - "default": 42 - }, - "layer": { - "description": "The layer-shell layer to place the bar on.\n\nTaken from the\n[wlr_layer_shell](https://wayland.app/protocols/wlr-layer-shell-unstable-v1#zwlr_layer_shell_v1:enum:layer) definition:\n\n> These values indicate which layers a surface can be rendered in.\n> They are ordered by z depth, bottom-most first.\n> Traditional shell surfaces will typically be rendered between the bottom and top layers.\n> Fullscreen shell surfaces are typically rendered at the top layer.\n> Multiple surfaces can share a single layer, and ordering within a single layer is undefined.\n\n**Valid options**: `background`, `bottom`, `top`, `overlay`\n
\n**Default**: `top`", - "type": "string", - "enum": [ - "background", - "bottom", - "top", - "overlay" - ] - }, - "margin": { - "description": "The margin to use on each side of the bar, in pixels.\nObject which takes `top`, `bottom`, `left` and `right` keys.\n\n**Default**: `0` on all sides.\n\n# Example\n\nThe following would set a 10px margin around each edge.\n\n```corn\n{\n margin.top = 10\n margin.bottom = 10\n margin.left = 10\n margin.right = 10\n}\n```", - "$ref": "#/$defs/MarginConfig" - }, - "name": { - "description": "A unique identifier for the bar, used for controlling it over IPC.\nIf not set, uses a generated integer suffix.\n\n**Default**: `bar-n`", - "type": [ - "string", - "null" - ], - "default": null - }, - "popup_autohide": { - "description": "Whether to enable autohide behaviour on the popup.\n\nWhen enabled, clicking outside the popup will close it.\nOn some compositors, this may also aggressively steal mouse/keyboard focus.\n\n**Default**: `false`", - "type": "boolean", - "default": false - }, - "popup_gap": { - "description": "The size of the gap in pixels\nbetween the bar and the popup window.\n\n**Default**: `5`", - "type": "integer", - "format": "int32", - "default": 5 - }, - "position": { - "description": "The bar's position on screen.\n\n**Valid options**: `top`, `bottom`, `left`, `right`\n
\n**Default**: `bottom`", - "$ref": "#/$defs/BarPosition" - }, - "start": { - "description": "An array of modules to append to the start of the bar.\nDepending on the orientation, this is either the top of the left edge.\n\n**Default**: `[]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/ModuleConfig" - } - }, - "start_hidden": { - "description": "Whether the bar should be hidden when Ironbar starts.\n\n**Default**: `false`, unless `autohide` is set.", - "type": [ - "boolean", - "null" - ], - "default": null - } - } - }, - "BarPosition": { - "type": "string", - "enum": [ - "top", - "bottom", - "left", - "right" - ] - }, - "BatteryModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "format": { - "description": "The format string to use for the widget button label.\nFor available tokens, see [below](#formatting-tokens).\n\n**Default**: `{percentage}%`", - "type": "string", - "default": "{percentage}%" - }, - "icon_size": { - "description": "The size to render the icon at, in pixels.\n\n**Default**: `24`", - "type": "integer", - "format": "int32", - "default": 24 - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "thresholds": { - "description": "A map of threshold names to apply as classes,\nagainst the battery percentage at which to apply them.\n\nThresholds work by applying the nearest value\nabove the current percentage, if present.\n\nFor example, using the below config:\n```corn\n{\n end = [\n {\n type = \"battery\"\n format = \"{percentage}%\"\n thresholds.warning = 20\n thresholds.critical = 5\n }\n ]\n}\n```\nAt battery levels below 20%,\nthe `.warning` class will be applied to the top-level widget.\nBelow 5%, `.critical` will be applied instead.\nAbove 20%, no class applies.\n\n**Default**: `{}`", - "type": "object", - "additionalProperties": { - "type": "number", - "format": "double" - }, - "default": {} - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "Bindmode": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - } - } - }, - "BluetoothModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "adapter_status": { - "description": "Values of `{adapter_status}` formatting token.", - "$ref": "#/$defs/AdapterStatus" - }, - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "device_status": { - "description": "Values of `{device_status}` formatting token.", - "$ref": "#/$defs/DeviceStatus" - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "format": { - "description": "Format strings for on-bar button.", - "$ref": "#/$defs/FormatConfig" - }, - "icon_size": { - "description": "Size to render the icons at, in pixels (image icons only).\n\n**Default** `32`", - "type": "integer", - "format": "int32", - "default": 32 - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "popup": { - "description": "Popup related configuration.", - "$ref": "#/$defs/PopupConfig" - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "BoxWidget": { - "type": "object", - "properties": { - "class": { - "description": "Widget class name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "halign": { - "description": "Horizontal alignment of the box relative to its parent.\n\n**Valid options**: `start`, `center`, `end`, `fill`\n**Default**: `fill`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleAlignment" - }, - { - "type": "null" - } - ] - }, - "name": { - "description": "Widget name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "orientation": { - "description": "Whether child widgets should be horizontally or vertically added.\n\n**Valid options**: `horizontal`, `vertical`, `h`, `v`\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "valign": { - "description": "Vertical alignment of the box relative to its parent.\n\n**Valid options**: `start`, `center`, `end`, `fill`\n**Default**: `fill`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleAlignment" - }, - { - "type": "null" - } - ] - }, - "widgets": { - "description": "Modules and widgets to add to this box.\n\n**Default**: `null`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/WidgetConfig" - } - } - } - }, - "ButtonWidget": { - "type": "object", - "properties": { - "class": { - "description": "Widget class name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "label": { - "description": "Widget text label. Pango markup and embedded scripts are supported.\n\nThis is a shorthand for adding a label widget to the button.\nIgnored if `widgets` is set.\n\nThis is a [Dynamic String](dynamic-values#dynamic-string).\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "name": { - "description": "Widget name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click": { - "description": "Command to execute. More on this [below](#commands).\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "widgets": { - "description": "Modules and widgets to add to this box.\n\n**Default**: `null`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/WidgetConfig" - } - } - } - }, - "CairoModule": { - "type": "object", - "properties": { - "common": { - "description": "See [common options](module-level-options#common-options).", - "anyOf": [ - { - "$ref": "#/$defs/CommonConfig" - }, - { - "type": "null" - } - ] - }, - "frequency": { - "description": "The number of milliseconds between each draw call.\n\n**Default**: `200`", - "type": "integer", - "format": "uint64", - "default": 200, - "minimum": 0 - }, - "height": { - "description": "The canvas height in pixels.\n\n**Default**: `42`", - "type": "integer", - "format": "uint32", - "default": 42, - "minimum": 0 - }, - "path": { - "description": "The path to the Lua script to load.\nThis can be absolute, or relative to the working directory.\n\nThe script must contain the entry `draw` function.\n\n**Required**", - "type": "string", - "default": "" - }, - "width": { - "description": "The canvas width in pixels.\n\n**Default**: `42`", - "type": "integer", - "format": "uint32", - "default": 42, - "minimum": 0 - } - } - }, - "ClipboardModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "icon": { - "description": "The icon to show on the bar widget button.\nSupports [image](images) icons.\n\n**Default**: `󰨸`", - "type": "string", - "default": "󰨸" - }, - "icon_size": { - "description": "The size to render the icon at.\nNote this only applies to image-type icons.\n\n**Default**: `32`", - "type": "integer", - "format": "int32", - "default": 32 - }, - "image_max_height": { - "description": "The maximum height to render copied images at.\n\n**Default**: `64.0`", - "type": "number", - "format": "double", - "default": 64.0 - }, - "image_max_width": { - "description": "The maximum width to render copied images at.\n\n**Default**: `256.0`", - "type": "number", - "format": "double", - "default": 256.0 - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "max_items": { - "description": "The maximum number of items to keep in the history,\nand to show in the popup.\n\n**Default**: `10`", - "type": "integer", - "format": "uint", - "default": 10, - "minimum": 0 - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - } - } - }, - "ClockModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "format": { - "description": "The format string to use for the date/time shown on the bar.\nPango markup is supported.\n\nDetail on available tokens can be found here:\n\n\n**Default**: `%d/%m/%Y %H:%M`", - "type": "string", - "default": "%d/%m/%Y %H:%M" - }, - "format_popup": { - "description": "The format string to use for the date/time shown in the popup header.\nPango markup is supported.\n\nDetail on available tokens can be found here:\n\n\n**Default**: `%H:%M:%S`", - "type": "string", - "default": "%H:%M:%S" - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "locale": { - "description": "The locale to use when formatting dates.\n\nNote this will not control the calendar -\nfor that you must set `LC_TIME`.\n\n**Valid options**: See [here](https://docs.rs/pure-rust-locales/0.8.1/pure_rust_locales/enum.Locale.html#variants)\n
\n**Default**: `$LC_TIME` or `$LANG` or `'POSIX'`", - "type": "string", - "default": "en_GB" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "CommonConfig": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "CustomEntry": { - "description": "Individual shell command entry.", - "type": "object", - "properties": { - "icon": { - "description": "Name of the image icon to show next to the label.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "label": { - "description": "Text to display on the button.", - "type": "string", - "default": "" - }, - "on_click": { - "description": "Shell command to execute when the button is clicked.\nThis is run using `sh -c`.", - "type": "string", - "default": "" - } - } - }, - "CustomModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "bar": { - "description": "Modules and widgets to add to the bar container.\n\n**Default**: `[]`", - "type": "array", - "items": { - "$ref": "#/$defs/WidgetConfig" - } - }, - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "popup": { - "description": "Modules and widgets to add to the popup container.\n\n**Default**: `null`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/$defs/WidgetConfig" - } - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "bar" - ] - }, - "DeviceStatus": { - "type": "object", - "properties": { - "connected": { - "description": "The value of `{device_status}` formatting token when device is connected.\n\n**Default**: `\"Connected\"`", - "type": "string", - "default": "Connected" - }, - "connecting": { - "description": "The value of `{device_status}` formatting token when device is connecting.\n\n**Default**: `\"Connecting...\"`", - "type": "string", - "default": "Connecting..." - }, - "disconnected": { - "description": "The value of `{device_status}` formatting token when device is disconnected.\n\n**Default**: `\"Disconnect\"`", - "type": "string", - "default": "Disconnected" - }, - "disconnecting": { - "description": "The value of `{device_status}` formatting token when device is disconnecting.\n\n**Default**: `\"Disconnecting...\"`", - "type": "string", - "default": "Disconnecting..." - } - } - }, - "DoubleClickTime": { - "description": "Double-click time configuration", - "anyOf": [ - { - "description": "Use GTK's gtk-double-click-time setting", - "type": "string", - "const": "gtk" - }, - { - "description": "Milliseconds", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - ] - }, - "DynamicBool": { - "anyOf": [ - { - "description": "Either a script or variable, to be determined.", - "type": "string" - }, - { - "$ref": "#/$defs/Script" - }, - { - "type": "string" - } - ] - }, - "EllipsizeMode": { - "type": "string", - "enum": [ - "none", - "start", - "middle", - "end" - ] - }, - "Favorites": { - "anyOf": [ - { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string" - } - } - }, - { - "type": "array", - "items": { - "type": "string" - } - } - ] - }, - "FocusedModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "icon_size": { - "description": "Icon size in pixels.\n\n**Default**: `32`", - "type": "integer", - "format": "int32", - "default": 32 - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_icon": { - "description": "Whether to show icon on the bar.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "show_title": { - "description": "Whether to show app name on the bar.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - } - } - }, - "FormatConfig": { - "type": "object", - "properties": { - "connected": { - "description": "Format string to use for the widget button when bluetooth adapter is enabled and a device is connected.\n\n**Default**: `\" {device_alias}\"`", - "type": "string", - "default": " {device_alias}" - }, - "connected_battery": { - "description": "Format string to use for the widget button when bluetooth adapter is enabled, a device is connected and `{device_battery_percent}` is available.\n\n**Default**: `\" {device_alias} • {device_battery_percent}%\"`", - "type": "string", - "default": " {device_alias} • {device_battery_percent}%" - }, - "disabled": { - "description": "Format string to use for the widget button when bluetooth adapter is disabled.\n\n**Default**: `\" Off\"`", - "type": "string", - "default": " Off" - }, - "enabled": { - "description": "Format string to use for the widget button when bluetooth adapter is enabled but no devices are connected.\n\n**Default**: `\" On\"`", - "type": "string", - "default": " On" - }, - "not_found": { - "description": "Format string to use for the widget button when bluetooth adapter not found.\n\n**Default**: `\"\"`", - "type": "string", - "default": "" - } - } - }, - "Icons": { - "type": "object", - "properties": { - "caps_off": { - "description": "Icon to show when capslock is disabled.\n\n**Default**: `\"\"`", - "type": "string", - "default": "" - }, - "caps_on": { - "description": "Icon to show when capslock is enabled.\n\n**Default**: `󰪛`", - "type": "string", - "default": "󰪛" - }, - "layout_map": { - "description": "Map of icons or labels to show for a particular keyboard layout.\n\nIf a layout is not present in the map,\nit will fall back to using its actual name.\n\n**Default**: `{}`\n\n# Example\n\n```corn\n{\n type = \"keyboard\"\n show_layout = true\n icons.layout_map.'English (US)' = \"EN\"\n icons.layout_map.Ukrainian = \"UA\"\n}\n```", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "default": {} - }, - "num_off": { - "description": "Icon to show when num lock is disabled.\n\n**Default**: `\"\"`", - "type": "string", - "default": "" - }, - "num_on": { - "description": "Icon to show when num lock is enabled.\n\n**Default**: ``", - "type": "string", - "default": "" - }, - "scroll_off": { - "description": "Icon to show when scroll lock is disabled.\n\n**Default**: `\"\"`", - "type": "string", - "default": "" - }, - "scroll_on": { - "description": "Icon to show when scroll lock is enabled.\n\n**Default**: ``", - "type": "string", - "default": "" - } - } - }, - "Icons2": { - "type": "object", - "properties": { - "page_back": { - "description": "Icon to show for page back button.\n\n**Default**: `󰅁`", - "type": "string", - "default": "󰅁" - }, - "page_forward": { - "description": "Icon to show for page back button.\n\n**Default**: `>`", - "type": "string", - "default": "󰅂" - } - } - }, - "Icons3": { - "type": "object", - "properties": { - "album": { - "description": "Icon to display nex to album name.\n\n**Default**: `󰀥`", - "type": "string", - "default": "󰀥" - }, - "artist": { - "description": "Icon to display nex to artist name.\n\n**Default**: `󰠃`", - "type": "string", - "default": "󰠃" - }, - "next": { - "description": "Icon to display for next button.\n\n**Default**: `󰒭`", - "type": "string", - "default": "󰒭" - }, - "pause": { - "description": "Icon to display when paused.\n\n**Default**: ``", - "type": "string", - "default": "" - }, - "play": { - "description": "Icon to display when playing.\n\n**Default**: ``", - "type": "string", - "default": "" - }, - "prev": { - "description": "Icon to display for previous button.\n\n**Default**: `󰒮`", - "type": "string", - "default": "󰒮" - }, - "track": { - "description": "Icon to display nex to track title.\n\n**Default**: `󰎈`", - "type": "string", - "default": "󰎈" - }, - "volume": { - "description": "Icon to display under volume slider.\n\n**Default**: `󰕾`", - "type": "string", - "default": "󰕾" - } - } - }, - "Icons4": { - "type": "object", - "properties": { - "closed_dnd": { - "description": "Icon to show when the panel is closed, with DnD enabled.\nTakes higher priority than count-based icons.\n\n**Default**: `󱅯`", - "type": "string", - "default": "󱅯" - }, - "closed_none": { - "description": "Icon to show when the panel is closed, with no notifications.\n\n**Default**: `󰍥`", - "type": "string", - "default": "󰍥" - }, - "closed_some": { - "description": "Icon to show when the panel is closed, with notifications.\n\n**Default**: `󱥂`", - "type": "string", - "default": "󱥂" - }, - "open_dnd": { - "description": "Icon to show when the panel is open, with DnD enabled.\nTakes higher priority than count-based icons.\n\n**Default**: `󱅮`", - "type": "string", - "default": "󱅮" - }, - "open_none": { - "description": "Icon to show when the panel is open, with no notifications.\n\n**Default**: `󰍡`", - "type": "string", - "default": "󰍡" - }, - "open_some": { - "description": "Icon to show when the panel is open, with notifications.\n\n**Default**: `󱥁`", - "type": "string", - "default": "󱥁" - } - } - }, - "Icons5": { - "type": "object", - "properties": { - "muted": { - "description": "Icon to show for muted outputs.\n\n**Default**: `󰝟`", - "type": "string", - "default": "󰝟" - }, - "volume_high": { - "description": "Icon to show for high volume levels.\n\n**Default**: `󰕾`", - "type": "string", - "default": "󰕾" - }, - "volume_low": { - "description": "Icon to show for low volume levels.\n\n**Default**: `󰕿`", - "type": "string", - "default": "󰕿" - }, - "volume_medium": { - "description": "Icon to show for medium volume levels.\n\n**Default**: `󰖀`", - "type": "string", - "default": "󰖀" - } - } - }, - "ImageWidget": { - "type": "object", - "properties": { - "class": { - "description": "Widget class name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "name": { - "description": "Widget name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "size": { - "description": "The width/height of the image.\nAspect ratio is preserved.\n\n**Default**: `32`", - "type": "integer", - "format": "int32", - "default": 32 - }, - "src": { - "description": "Image source.\n\nThis is an [image](image) via [Dynamic String](dynamic-values#dynamic-string).\n\n**Required**", - "type": "string", - "default": "" - } - } - }, - "Interval": { - "anyOf": [ - { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - { - "$ref": "#/$defs/Intervals" - } - ] - }, - "Intervals": { - "type": "object", - "properties": { - "cpu": { - "description": "The number of seconds between refreshing CPU data.\n\n**Default**: `5`", - "type": "integer", - "format": "uint64", - "default": 5, - "minimum": 0 - }, - "disks": { - "description": "The number of seconds between refreshing disk data.\n\n**Default**: `5`", - "type": "integer", - "format": "uint64", - "default": 5, - "minimum": 0 - }, - "memory": { - "description": "The number of seconds between refreshing memory data.\n\n**Default**: `5`", - "type": "integer", - "format": "uint64", - "default": 5, - "minimum": 0 - }, - "networks": { - "description": "The number of seconds between refreshing network data.\n\n**Default**: `5`", - "type": "integer", - "format": "uint64", - "default": 5, - "minimum": 0 - }, - "system": { - "description": "The number of seconds between refreshing system data.\n\n**Default**: `5`", - "type": "integer", - "format": "uint64", - "default": 5, - "minimum": 0 - }, - "temps": { - "description": "The number of seconds between refreshing temperature data.\n\n**Default**: `5`", - "type": "integer", - "format": "uint64", - "default": 5, - "minimum": 0 - } - } - }, - "KeyboardModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "icon_size": { - "description": "Size to render the icons at, in pixels (image icons only).\n\n**Default** `32`", - "type": "integer", - "format": "int32", - "default": 32 - }, - "icons": { - "description": "Player state icons.\n\nSee [icons](#icons).", - "$ref": "#/$defs/Icons" - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "seat": { - "description": "The Wayland seat to attach to.\nYou almost certainly do not need to change this.\n\n**Default**: `seat0`", - "type": "string", - "default": "seat0" - }, - "show_caps": { - "description": "Whether to show capslock indicator.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "show_layout": { - "description": "Whether to show the current keyboard layout.\n\n **Default**: `true`", - "type": "boolean", - "default": true - }, - "show_num": { - "description": "Whether to show num lock indicator.\n\n **Default**: `true`", - "type": "boolean", - "default": true - }, - "show_scroll": { - "description": "Whether to show scroll lock indicator.\n\n **Default**: `true`", - "type": "boolean", - "default": true - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "LabelModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "label": { - "description": "The text to show on the label.\nThis is a [Dynamic String](dynamic-values#dynamic-string).\n\n**Required**", - "type": "string" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "label" - ] - }, - "LabelWidget": { - "type": "object", - "properties": { - "class": { - "description": "Widget class name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "label": { - "description": "Widget text label. Pango markup and embedded scripts are supported.\n\nThis is a [Dynamic String](dynamic-values#dynamic-string).\n\n**Required**", - "type": "string" - }, - "name": { - "description": "Widget name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "label" - ] - }, - "LauncherModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "favorites": { - "description": "List of app IDs (or classes) to always show regardless of open state,\nin the order specified.\n\n**Default**: `null`", - "type": [ - "array", - "null" - ], - "default": null, - "items": { - "type": "string" - } - }, - "icon_size": { - "description": "Size in pixels to render icon at (image icons only).\n\n**Default**: `32`", - "type": "integer", - "format": "int32", - "default": 32 - }, - "icons": { - "description": "Module UI icons (separate from app icons shown for items).\n\nSee [icons](#icons).", - "$ref": "#/$defs/Icons2" - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "launch_command": { - "description": "Command used to launch applications.\n\n**Default**: `gtk-launch`", - "type": "string", - "default": "gtk-launch {app_name}" - }, - "minimize_focused": { - "description": "Whether to minimize a window if it is focused when clicked.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "page_size": { - "description": "The number of items to show on a page.\n\nWhen the number of items reaches the page size,\npagination controls appear at the start of the widget\nwhich can be used to move forward/back through the list of items.\n\nIf there are too many to fit, the overflow will be truncated\nby the next widget.\n\n**Default**: `1000`.", - "type": "integer", - "format": "uint", - "default": 1000, - "minimum": 0 - }, - "pagination_icon_size": { - "description": "Size in pixels to render pagination icons at (image icons only).\n\n**Default**: `16`", - "type": "integer", - "format": "int32", - "default": 16 - }, - "reversed": { - "description": "Whether items should be added from right-to-left\ninstead of left-to-right.\n\nThis includes favourites.\n\n**Default**: `false`", - "type": "boolean", - "default": false - }, - "show_icons": { - "description": "Whether to show application icons on the bar.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "show_names": { - "description": "Whether to show application names on the bar.\n\n**Default**: `false`", - "type": "boolean", - "default": false - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "Truncate application names on the bar if they get too long.\nSee [truncate options](module-level-options#truncate-mode).\n\n**Default**: `Auto (end)`", - "$ref": "#/$defs/TruncateMode" - }, - "truncate_popup": { - "description": "Truncate application names in popups if they get too long.\nSee [truncate options](module-level-options#truncate-mode).\n\n**Default**: `{ mode = \"middle\" max_length = 25 }`", - "$ref": "#/$defs/TruncateMode" - } - } - }, - "MarginConfig": { - "type": "object", - "properties": { - "bottom": { - "type": "integer", - "format": "int32", - "default": 0 - }, - "left": { - "type": "integer", - "format": "int32", - "default": 0 - }, - "right": { - "type": "integer", - "format": "int32", - "default": 0 - }, - "top": { - "type": "integer", - "format": "int32", - "default": 0 - } - } - }, - "MenuConfig": { - "description": "An individual entry in the main menu section.", - "oneOf": [ - { - "description": "Contains all applications matching the configured `categories`.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "xdg_entry" - } - }, - "$ref": "#/$defs/XdgEntry", - "required": [ - "type" - ] - }, - { - "description": "Contains all applications not covered by `xdg_entry` categories.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "xdg_other" - } - }, - "required": [ - "type" - ] - }, - { - "description": "Individual shell command entry.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "custom" - } - }, - "$ref": "#/$defs/CustomEntry", - "required": [ - "type" - ] - } - ] - }, - "MenuModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "center": { - "description": "Items to add to the start of the main menu.\n\nBy default, this shows a number of XDG entries\nthat should cover all common applications.\n\n**Default**: See `examples/menu/default`", - "type": "array", - "items": { - "$ref": "#/$defs/MenuConfig" - } - }, - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "end": { - "description": "Items to add to the end of the main menu.\n\n**Default**: `[]`", - "type": "array", - "items": { - "$ref": "#/$defs/MenuConfig" - } - }, - "height": { - "description": "Fixed height of the menu.\n\nWhen set, if the number of (sub)menu entries exceeds this value,\na scrollbar will be shown.\n\nLeave null to resize dynamically.\n\n**Default**: `null`", - "type": [ - "integer", - "null" - ], - "format": "int32", - "default": null - }, - "label": { - "description": "Label to show on the menu button on the bar.\n\n**Default**: `≡`", - "type": [ - "string", - "null" - ], - "default": "≡" - }, - "label_icon": { - "description": "Icon to show on the menu button on the bar.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "label_icon_size": { - "description": "Size of the `label_icon` image.", - "type": "integer", - "format": "int32", - "default": 16 - }, - "launch_command": { - "description": "Command used to launch applications.\n\n**Default**: `gtk-launch`", - "type": "string", - "default": "gtk-launch {app_name}" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "start": { - "description": "Items to add to the start of the main menu.\n\n**Default**: `[]`", - "type": "array", - "items": { - "$ref": "#/$defs/MenuConfig" - } - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "Truncate options to apply to (sub)menu item labels.\n\nSee [truncate options](module-level-options#truncate-mode).\n\n**Default**: `Auto (end)`", - "$ref": "#/$defs/TruncateMode" - }, - "width": { - "description": "Fixed width of the menu.\n\nCan be used with `truncate` options\nto customise how item labels are truncated.\n\n**Default**: `null`", - "type": [ - "integer", - "null" - ], - "format": "int32", - "default": null - } - } - }, - "ModuleAlignment": { - "oneOf": [ - { - "description": "Align widget to the start (left for horizontal, top for vertical).", - "type": "string", - "const": "start" - }, - { - "description": "Align widget to the center.", - "type": "string", - "const": "center" - }, - { - "description": "Align widget to the end (right for horizontal, bottom for vertical).", - "type": "string", - "const": "end" - }, - { - "description": "Stretch widget to fill available space.", - "type": "string", - "const": "fill" - } - ] - }, - "ModuleConfig": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "battery" - } - }, - "$ref": "#/$defs/BatteryModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "bindmode" - } - }, - "$ref": "#/$defs/Bindmode", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "bluetooth" - } - }, - "$ref": "#/$defs/BluetoothModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "cairo" - } - }, - "$ref": "#/$defs/CairoModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "clipboard" - } - }, - "$ref": "#/$defs/ClipboardModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "clock" - } - }, - "$ref": "#/$defs/ClockModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "custom" - } - }, - "$ref": "#/$defs/CustomModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "focused" - } - }, - "$ref": "#/$defs/FocusedModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "keyboard" - } - }, - "$ref": "#/$defs/KeyboardModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "label" - } - }, - "$ref": "#/$defs/LabelModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "launcher" - } - }, - "$ref": "#/$defs/LauncherModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "menu" - } - }, - "$ref": "#/$defs/MenuModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "music" - } - }, - "$ref": "#/$defs/MusicModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "network_manager" - } - }, - "$ref": "#/$defs/NetworkManagerModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "notifications" - } - }, - "$ref": "#/$defs/NotificationsModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "script" - } - }, - "$ref": "#/$defs/ScriptModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "sys_info" - } - }, - "$ref": "#/$defs/SysInfoModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "tray" - } - }, - "$ref": "#/$defs/TrayModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "volume" - } - }, - "$ref": "#/$defs/VolumeModule", - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "workspaces" - } - }, - "$ref": "#/$defs/WorkspacesModule", - "required": [ - "type" - ] - } - ] - }, - "ModuleJustification": { - "type": "string", - "enum": [ - "left", - "right", - "center", - "fill" - ] - }, - "ModuleOrientation": { - "type": "string", - "enum": [ - "horizontal", - "vertical" - ] - }, - "MonitorConfig": { - "oneOf": [ - { - "type": "object", - "properties": { - "Single": { - "$ref": "#/$defs/BarConfig" - } - }, - "additionalProperties": false, - "required": [ - "Single" - ] - }, - { - "type": "object", - "properties": { - "Multiple": { - "type": "array", - "items": { - "$ref": "#/$defs/BarConfig" - } - } - }, - "additionalProperties": false, - "required": [ - "Multiple" - ] - } - ] - }, - "MusicModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "cover_image_size": { - "description": "Size to render the album art image at inside the popup, in pixels.\n\n**Default**: `128`", - "type": "integer", - "format": "int32", - "default": 128 - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "format": { - "description": "Format of current song info to display on the bar.\n\nInfo on formatting tokens [below](#formatting-tokens).\n\n**Default**: `{title} / {artist}`", - "type": "string", - "default": "{title} / {artist}" - }, - "host": { - "description": "*[MPD Only]*\nTCP or Unix socket address of the MPD server.\nFor TCP, this should include the port number.\n\n**Default**: `localhost:6600`", - "type": "string", - "default": "localhost:6600" - }, - "icon_size": { - "description": "Size to render the icons at, in pixels (image icons only).\n\n**Default** `32`", - "type": "integer", - "format": "int32", - "default": 32 - }, - "icons": { - "description": "Player state icons.\n\nSee [icons](#icons).", - "$ref": "#/$defs/Icons3" - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "music_dir": { - "description": "*[MPD Only]*\nPath to root of the MPD server's music directory.\nThis is required for displaying album art.\n\n**Default**: `$HOME/Music`", - "type": "string", - "default": "/home/jake/Music" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "player_type": { - "description": "Type of player to connect to", - "$ref": "#/$defs/PlayerType" - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "show_status_icon": { - "description": "Whether to show the play/pause status icon\non the bar.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - }, - "truncate_popup_album": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - }, - "truncate_popup_artist": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - }, - "truncate_popup_title": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - } - } - }, - "NetworkManagerModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "icon_size": { - "type": "integer", - "format": "int32", - "default": 24 - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "NotificationsModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "icons": { - "description": "SwayNC state icons.\n\nSee [icons](#icons).", - "$ref": "#/$defs/Icons4" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "show_count": { - "description": "Whether to show the current notification count.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "PlayerType": { - "type": "string", - "enum": [ - "mpd", - "mpris" - ] - }, - "PopupConfig": { - "type": "object", - "properties": { - "device": { - "description": "Device box related configuration", - "$ref": "#/$defs/PopupDeviceConfig" - }, - "disabled": { - "description": "Format string to use for the message that is displayed when the adapter is not found or disabled.\n\n**Default**: `\"{adapter_status}\"`", - "type": "string", - "default": "{adapter_status}" - }, - "header": { - "description": "Format string to use for the header of popup window.\n\n**Default**: `\" Enable Bluetooth\"`", - "type": "string", - "default": " Enable Bluetooth" - }, - "max_height": { - "description": "The maximum height the window can reach before scrolling.\nSpecify either as `pixels` or `devices`.\nLeave blank to allow the popup to grow indefinitely.\n\n**Default**: `Some(SizeLimit::Pixel(330))`", - "anyOf": [ - { - "$ref": "#/$defs/SizeLimit" - }, - { - "type": "null" - } - ] - } - } - }, - "PopupDeviceConfig": { - "type": "object", - "properties": { - "footer": { - "description": "Format string to use for the footer of device box.\n\n**Default**: `\"{device_status}\"`", - "type": "string", - "default": "{device_status}" - }, - "footer_battery": { - "description": "Format string to use for the footer of device box when `{device_battery_percent}` is available.\n\n**Default**: `\"{device_status} • Battery {device_battery_percent}%\"`", - "type": "string", - "default": "{device_status} • Battery {device_battery_percent}%" - }, - "header": { - "description": "Format string to use for the header of device box.\n\n**Default**: `\"{device_alias}\"`", - "type": "string", - "default": "{device_alias}" - }, - "header_battery": { - "description": "Format string to use for the header of device box when `{device_battery_percent}` is available.\n\n**Default**: `\"{device_alias}\"`", - "type": "string", - "default": "{device_alias}" - } - } - }, - "ProgressWidget": { - "type": "object", - "properties": { - "class": { - "description": "Widget class name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "label": { - "description": "Text label to show for the progress bar.\n\nThis is a [Dynamic String](dynamic-values#dynamic-string).\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "length": { - "description": "The progress bar length, in pixels.\nGTK will automatically determine the size if left blank.\n\n**Default**: `null`", - "type": [ - "integer", - "null" - ], - "format": "int32", - "default": null - }, - "max": { - "description": "The maximum progress bar value.\n\n**Default**: `100`", - "type": "number", - "format": "double", - "default": 100.0 - }, - "name": { - "description": "Widget name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "orientation": { - "description": "Orientation of the progress bar.\n\n**Valid options**: `horizontal`, `vertical`, `h`, `v`\n
\n**Default**: `horizontal`", - "$ref": "#/$defs/ModuleOrientation" - }, - "value": { - "description": "Script to run to get the progress bar value.\nOutput must be a valid percentage.\n\nNote that this expects a numeric value between `0`-`max` as output.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - } - } - }, - "ReservedTrayAction": { - "description": "Reserved tray click actions", - "oneOf": [ - { - "description": "Open the tray icon's popup menu", - "type": "string", - "const": "menu" - }, - { - "description": "Trigger the tray icon's default (primary) action", - "type": "string", - "const": "default" - }, - { - "description": "Trigger the tray icon's secondary action", - "type": "string", - "const": "secondary" - }, - { - "description": "Do nothing", - "type": "string", - "const": "none" - } - ] - }, - "Script": { - "type": "object", - "properties": { - "cmd": { - "type": "string", - "default": "" - }, - "interval": { - "type": "integer", - "format": "uint64", - "default": 5000, - "minimum": 0 - }, - "mode": { - "$ref": "#/$defs/ScriptMode" - } - } - }, - "ScriptInput": { - "anyOf": [ - { - "type": "string" - }, - { - "$ref": "#/$defs/Script" - } - ] - }, - "ScriptMode": { - "type": "string", - "enum": [ - "poll", - "watch" - ] - }, - "ScriptModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "cmd": { - "description": "Path to script to execute.\n\nThis can be an absolute path,\nor relative to the working directory.\n\n**Required**", - "type": "string", - "default": "" - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "interval": { - "description": "Time in milliseconds between executions.\n\n**Default**: `5000`", - "type": "integer", - "format": "uint64", - "default": 5000, - "minimum": 0 - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "mode": { - "description": "Script execution mode.\nSee [modes](#modes) for more info.\n\n**Valid options**: `poll`, `watch`\n
\n**Default**: `poll`", - "$ref": "#/$defs/ScriptMode" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "SizeLimit": { - "oneOf": [ - { - "type": "object", - "properties": { - "devices": { - "type": "integer", - "format": "int32" - } - }, - "additionalProperties": false, - "required": [ - "devices" - ] - }, - { - "type": "object", - "properties": { - "pixels": { - "type": "integer", - "format": "int32" - } - }, - "additionalProperties": false, - "required": [ - "pixels" - ] - } - ] - }, - "SliderWidget": { - "type": "object", - "properties": { - "class": { - "description": "Widget class name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "length": { - "description": "The slider length.\nGTK will automatically determine the size if left blank.\n\n**Default**: `null`", - "type": [ - "integer", - "null" - ], - "format": "int32", - "default": null - }, - "max": { - "description": "Maximum slider value.\n\n**Default**: `100`", - "type": "number", - "format": "double", - "default": 100.0 - }, - "min": { - "description": "Minimum slider value.\n\n**Default**: `0`", - "type": "number", - "format": "double", - "default": 0.0 - }, - "name": { - "description": "Widget name.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "on_change": { - "description": "Command to execute when the slider changes.\nMore on this [below](#slider).\n\nNote that this will provide the floating point value as an argument.\nIf your input program requires an integer, you will need to round it.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ], - "default": null - }, - "orientation": { - "description": "Orientation of the slider.\n\n**Valid options**: `horizontal`, `vertical`, `h`, `v`\n
\n**Default**: `horizontal`", - "$ref": "#/$defs/ModuleOrientation" - }, - "show_label": { - "description": "Whether to show the value label above the slider.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "step": { - "description": "If the increment to change when scrolling with the mousewheel.\nIf left blank, GTK will use the default value,\ndetermined by the current environment.\n\n**Default**: `null`", - "type": [ - "number", - "null" - ], - "format": "double", - "default": null - }, - "value": { - "description": "Script to run to get the slider value.\nOutput must be a valid number.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - } - } - }, - "SortOrder": { - "oneOf": [ - { - "description": "Shows workspaces in the order they're added", - "type": "string", - "const": "added" - }, - { - "description": "Shows workspaces in the order of their displayed labels,\naccounting for any mappings supplied in `name_map`.\nIn most cases, this is likely their number.\n\nWorkspaces are sorted numerically first,\nand named workspaces are added to the end in alphabetical order.", - "type": "string", - "const": "label" - }, - { - "description": "Shows workspaces in the order of their real names,\nas supplied by the compositor.\nIn most cases, this is likely their number.\n\nWorkspaces are sorted numerically first,\nand named workspaces are added to the end in alphabetical order.", - "type": "string", - "const": "name" - } - ] - }, - "SysInfoModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "direction": { - "description": "The orientation by which the labels are laid out.\n\n**Valid options**: `horizontal`, `vertical`, `h`, `v`\n
\n**Default** : `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "format": { - "description": "List of strings including formatting tokens.\nFor available tokens, see [below](#formatting-tokens).\n\n**Required**", - "type": "array", - "default": [], - "items": { - "type": "string" - } - }, - "interval": { - "description": "Number of seconds between refresh.\n\nThis can be set as a global interval,\nor passed as an object to customize the interval per-system.\n\n**Default**: `5`", - "$ref": "#/$defs/Interval" - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "TransitionType": { - "type": "string", - "enum": [ - "none", - "crossfade", - "slide_start", - "slide_end" - ] - }, - "TrayClickAction": { - "description": "Action to perform when clicking on a tray icon", - "anyOf": [ - { - "description": "Reserved action", - "$ref": "#/$defs/ReservedTrayAction" - }, - { - "description": "Run a custom shell command", - "type": "string" - } - ] - }, - "TrayModule": { - "description": "Click action handlers for tray icons", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "direction": { - "description": "The direction in which to pack tray icons.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal` for horizontal bars, `vertical` for vertical bars", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "icon_size": { - "description": "Size in pixels to display the tray icons as.\n\n**Default**: `16`", - "type": "integer", - "format": "uint32", - "default": 16, - "minimum": 0 - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "prefer_theme_icons": { - "description": "Requests that icons from the theme be used over the item-provided item.\nMost items only provide one or the other so this will have no effect in most circumstances.\n\n**Default**: `true`", - "type": "boolean", - "default": true - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "TruncateMode": { - "description": "Some modules provide options for truncating text.\nThis is controlled using a common `TruncateMode` type,\nwhich is defined below.\n\nThe option can be configured in one of two modes.\n\n**Default**: `Auto (end)`", - "anyOf": [ - { - "description": "Do not truncate content.\n\nSetting this option may cause excessively long content to overflow other widgets,\nshifting them off-screen.\n\n# Example\n\n```corn\n{ truncate = \"off\" }", - "type": "null" - }, - { - "description": "Auto mode lets GTK decide when to ellipsize.\n\nTo use this mode, set the truncate option to a string\ndeclaring the location to truncate text from and place the ellipsis.\n\n# Example\n\n```corn\n{ truncate = \"start\" }\n```\n\n**Valid options**: `start`, `middle`, `end`\n
\n**Default**: `end`", - "$ref": "#/$defs/EllipsizeMode" - }, - { - "description": "Length mode defines a fixed point at which to ellipsize.\n\nGenerally you will want to set only one of `length` or `max_length`,\nbut you can set both if required.\n\n# Example\n\n```corn\n{\n truncate.mode = \"start\"\n truncate.length = 50\n truncate.max_length = 70\n}\n```", - "type": "object", - "properties": { - "length": { - "description": "The fixed width (in characters) of the widget.\n\nThe widget will be expanded to this width\nif it would have otherwise been smaller.\n\nLeave unset to let GTK automatically handle.\n\n**Default**: `null`", - "type": [ - "integer", - "null" - ], - "format": "int32" - }, - "max_length": { - "description": "The maximum number of characters to show\nbefore truncating.\n\nLeave unset to let GTK automatically handle.\n\n**Default**: `null`", - "type": [ - "integer", - "null" - ], - "format": "int32" - }, - "mode": { - "description": "The location to truncate text from and place the ellipsis.\n**Valid options**: `start`, `middle`, `end`\n
\n**Default**: `null`", - "$ref": "#/$defs/EllipsizeMode" - } - }, - "required": [ - "mode" - ] - } - ] - }, - "VolumeModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "format": { - "description": "The format string to use for the widget button label.\nFor available tokens, see [below](#formatting-tokens).\n\n**Default**: `{icon} {percentage}%`", - "type": "string", - "default": "{icon} {percentage}%" - }, - "icons": { - "description": "Volume state icons.\n\nSee [icons](#icons).", - "$ref": "#/$defs/Icons5" - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "max_volume": { - "description": "Maximum value to allow volume sliders to reach.\nPulse supports values > 100 but this may result in distortion.\n\n**Default**: `100`", - "type": "number", - "format": "double", - "default": 100.0 - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - }, - "truncate": { - "description": "See [truncate options](module-level-options#truncate-mode).\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/TruncateMode" - }, - { - "type": "null" - } - ] - } - } - }, - "Widget": { - "oneOf": [ - { - "description": "A container to place nested widgets inside.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "box" - } - }, - "$ref": "#/$defs/BoxWidget", - "required": [ - "type" - ] - }, - { - "description": "A text label. Pango markup is supported.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "label" - } - }, - "$ref": "#/$defs/LabelWidget", - "required": [ - "type" - ] - }, - { - "description": "A clickable button, which can run a command when clicked.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "button" - } - }, - "$ref": "#/$defs/ButtonWidget", - "required": [ - "type" - ] - }, - { - "description": "An image or icon from disk or http.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "image" - } - }, - "$ref": "#/$defs/ImageWidget", - "required": [ - "type" - ] - }, - { - "description": "A draggable slider.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "slider" - } - }, - "$ref": "#/$defs/SliderWidget", - "required": [ - "type" - ] - }, - { - "description": "A progress bar.", - "type": "object", - "properties": { - "type": { - "type": "string", - "const": "progress" - } - }, - "$ref": "#/$defs/ProgressWidget", - "required": [ - "type" - ] - } - ] - }, - "WidgetConfig": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - }, - "anyOf": [ - { - "description": "A custom-module specific basic widget", - "$ref": "#/$defs/Widget" - }, - { - "description": "A native Ironbar module, such as `clock` or `focused`.\nAll widgets are supported, including their popups.", - "$ref": "#/$defs/ModuleConfig" - } - ] - }, - "WorkspacesModule": { - "description": "The following are module-level options which are present on **all** modules.\n\nEach module also provides options specific to its type.\nFor details on those, check the relevant module documentation.\n\nFor information on the Script type, and embedding scripts in strings,\nsee [here](script).\nFor information on styling, please see the [styling guide](styling-guide).", - "type": "object", - "properties": { - "all_monitors": { - "description": "Whether to display workspaces from all monitors.\nWhen false, only shows workspaces on the current monitor.\n\n**Default**: `false`", - "type": "boolean", - "default": false - }, - "class": { - "description": "Sets one or more CSS classes,\nallowing you to target it in CSS using `.class`.\n\nUnlike [name](#name), the `class` property is not expected to be unique.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "disable_popup": { - "description": "Prevents the popup from opening on-click for this widget.", - "type": "boolean", - "default": false - }, - "favorites": { - "description": "Workspaces which should always be shown.\nThis can either be an array of workspace names,\nor a map of monitor names to arrays of workspace names.\n\n**Default**: `{}`\n\n# Example\n\n```corn\n// array format\n{\n type = \"workspaces\"\n favorites = [\"1\", \"2\", \"3\"]\n}\n\n// map format\n{\n type = \"workspaces\"\n favorites.DP-1 = [\"1\", \"2\", \"3\"]\n favorites.DP-2 = [\"4\", \"5\", \"6\"]\n}\n```", - "$ref": "#/$defs/Favorites" - }, - "hidden": { - "description": "A list of workspace names to never show.\n\nThis may be useful for scratchpad/special workspaces, for example.\n\n**Default**: `[]`", - "type": "array", - "default": [], - "items": { - "type": "string" - } - }, - "icon_size": { - "description": "The size to render icons at (image icons only).\n\n**Default**: `32`", - "type": "integer", - "format": "int32", - "default": 32 - }, - "justify": { - "description": "The justification (alignment) of the widget text shown on the bar.\n\n**Valid options**: `left`, `right`, `center`, `fill`\n
\n**Default**: `left`", - "$ref": "#/$defs/ModuleJustification" - }, - "name": { - "description": "Sets the unique widget name,\nallowing you to target it in CSS using `#name`.\n\nIt is best practise (although not required) to ensure that the value is\nglobally unique throughout the Ironbar instance\nto avoid clashes.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "name_map": { - "description": "Map of actual workspace names to custom names.\n\nCustom names can be [images](images).\n\nIf a workspace is not present in the map,\nit will fall back to using its actual name.", - "type": "object", - "additionalProperties": { - "type": "string" - }, - "default": {} - }, - "on_click_left": { - "description": "A [script](scripts) to run when the module is left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_left_double": { - "description": "A [script](scripts) to run when the module is double-left-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_left_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle": { - "description": "A [script](scripts) to run when the module is middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_click_middle = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_middle_double": { - "description": "A [script](scripts) to run when the module is double-middle-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_middle_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right": { - "description": "A [script](scripts) to run when the module is right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n/// # Example\n\n```corn\n{ on_click_right = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_click_right_double": { - "description": "A [script](scripts) to run when the module is double-right-clicked.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n\n# Example\n\n```corn\n{ on_click_right_double = \"echo 'double click' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_enter": { - "description": "A [script](scripts) to run when the cursor begins hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_enter = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_mouse_exit": { - "description": "A [script](scripts) to run when the cursor stops hovering over the module.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_mouse_exit = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_down": { - "description": "A [script](scripts) to run when the module is scrolled down on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_down = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "on_scroll_up": { - "description": "A [script](scripts) to run when the module is scrolled up on.\n\n**Supported script types**: `oneshot`.\n
\n**Default**: `null`\n# Example\n\n```corn\n{ on_scroll_up = \"echo 'event' >> log.txt\" }\n```", - "anyOf": [ - { - "$ref": "#/$defs/ScriptInput" - }, - { - "type": "null" - } - ] - }, - "orientation": { - "description": "The orientation to display the widget contents.\nSetting to vertical will rotate text 90 degrees.\n\n**Valid options**: `horizontal`, `vertical`\n
\n**Default**: `horizontal`", - "anyOf": [ - { - "$ref": "#/$defs/ModuleOrientation" - }, - { - "type": "null" - } - ] - }, - "show_if": { - "description": "Shows the module only if the dynamic boolean evaluates to true.\n\nThis allows for modules to be dynamically shown or hidden\nbased on custom events.\n\n**Default**: `null`", - "anyOf": [ - { - "$ref": "#/$defs/DynamicBool" - }, - { - "type": "null" - } - ] - }, - "smooth_scroll_speed": { - "description": "A multiplier from `0.0` - `10.0` to control the speed\nof smooth scrolling on trackpad.\n\n**Default**: `1.0`", - "type": [ - "number", - "null" - ], - "format": "double" - }, - "sort": { - "description": "The method used for sorting workspaces.\n\n- `added` always appends to the end.\n- `label` sorts by displayed value.\n- `name` sorts by workspace name.\n\n**Valid options**: `added`, `label`, `name`.\n
\n**Default**: `label`", - "$ref": "#/$defs/SortOrder" - }, - "tooltip": { - "description": "Shows this text on hover.\nSupports embedding scripts between `{{double braces}}`.\n\nNote that full dynamic string support is not currently supported.\n\n**Default**: `null`", - "type": [ - "string", - "null" - ] - }, - "transition_duration": { - "description": "The length in milliseconds\nof the transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Default**: `250`", - "type": [ - "integer", - "null" - ], - "format": "uint32", - "minimum": 0 - }, - "transition_type": { - "description": "The transition animation to use when showing/hiding the widget.\n\nNote this has no effect if `show_if` is not configured.\n\n**Valid options**: `slide_start`, `slide_end`, `crossfade`, `none`\n
\n**Default**: `slide_start`", - "anyOf": [ - { - "$ref": "#/$defs/TransitionType" - }, - { - "type": "null" - } - ] - } - } - }, - "XdgEntry": { - "type": "object", - "properties": { - "categories": { - "description": "XDG categories the associated submenu should contain.", - "type": "array", - "default": [], - "items": { - "type": "string" - } - }, - "icon": { - "description": "Name of the image icon to show next to the label.", - "type": [ - "string", - "null" - ], - "default": null - }, - "label": { - "description": "Text to display on the button.", - "type": "string", - "default": "" - } - } - } - } -} diff --git a/config/ironbar/scripts/clipse.sh b/config/ironbar/scripts/clipse.sh new file mode 100755 index 0000000..d25d159 --- /dev/null +++ b/config/ironbar/scripts/clipse.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Ищем первое окно с заголовком "clipse" +WIN_INFO=$(niri msg -j windows | jq -c '.[] | select(.title == "clipse")' | head -1) + +# Если окна нет — запускаем приложение +if [ -z "$WIN_INFO" ]; then + footclient -T clipse clipse + exit 0 +fi + +# Извлекаем ID и статус фокуса +ID=$(echo "$WIN_INFO" | jq -r '.id') +IS_FOCUSED=$(echo "$WIN_INFO" | jq -r '.is_focused') + +if [ "$IS_FOCUSED" = "true" ]; then + # Окно уже сфокусировано — ваша логика здесь + echo "Окно 'clipse' уже в фокусе. Выполняем заданное действие..." + + # Примеры действий (раскомментируйте нужное): + niri msg action close-window --id "$ID" + # niri msg action minimize-window --id "$ID" + # niri msg action focus-window-next +else + # Окно существует, но не в фокусе — переключаемся на него + niri msg action focus-window --id "$ID" +fi diff --git a/config/ironbar/scripts/matugen.sh b/config/ironbar/scripts/matugen.sh new file mode 100755 index 0000000..d12d7a9 --- /dev/null +++ b/config/ironbar/scripts/matugen.sh @@ -0,0 +1,39 @@ +#!/bin/bash +exec &>>"$HOME/.cache/matugen-wallpaper.log" +set -x + +export WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-1}" +export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}" +export PATH="/usr/local/bin:/usr/bin:/bin:$PATH" + +WALL_DIR="${1:-$HOME/.walls}" + +# Варианты prefer для случайного выбора +PREFER_OPTIONS=("darkness" "lightness" "saturation" "less-saturation" "value") + +get_random_image() { + local image + image=$(find "$WALL_DIR" -type f \( \ + -iname "*.jpg" -o -iname "*.jpeg" -o \ + -iname "*.png" -o -iname "*.webp" -o \ + -iname "*.gif" \ + \) 2>/dev/null | shuf -n1) + [[ -z "$image" ]] && { + echo "Ошибка: изображения не найдены в $WALL_DIR" >&2 + return 1 + } + echo "$image" +} + +IMAGE=$(get_random_image) || exit 1 +PREFER="${PREFER_OPTIONS[RANDOM % ${#PREFER_OPTIONS[@]}]}" + +echo "Изображение: $IMAGE" +echo "Prefer: $PREFER" + +matugen image "$IMAGE" \ + --prefer "$PREFER" \ + -m dark \ + --verbose + +notify-send "[INFO]" "Обои изменены" -i "$IMAGE" 2>/dev/null || true diff --git a/config/ironbar/scripts/matugen.sh.bak b/config/ironbar/scripts/matugen.sh.bak new file mode 100755 index 0000000..29ebe7c --- /dev/null +++ b/config/ironbar/scripts/matugen.sh.bak @@ -0,0 +1,56 @@ +#!/bin/bash +# ~/bin/matugen-random-wall.sh +export WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-0}" +export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}" + +WALL_DIR="${1:-$HOME/.walls}" +IMAGE_EXTS=("jpg" "jpeg" "png" "webp" "gif") + +# Функция получения случайного изображения +get_random_image() { + local images=() + for ext in "${IMAGE_EXTS[@]}"; do + while IFS= read -r -d '' file; do + images+=("$file") + done < <(find "$WALL_DIR" -type f -iname "*.$ext" -print0 2>/dev/null) + done + + if [[ ${#images[@]} -eq 0 ]]; then + echo "Ошибка: изображения не найдены в $WALL_DIR" >&2 + return 1 + fi + echo "${images[RANDOM % ${#images[@]}]}" +} + +# Функция получения безопасного случайного индекса цвета +get_random_color_index() { + local image="$1" + local max_index + + # Запрашиваем JSON с цветами, извлекаем массив и считаем элементы + # 2>/dev/null скрывает лишние логи, оставляем только чистый JSON + max_index=$(matugen image "$image" --json hex 2>/dev/null | + jq -r '.colors[].source_color' 2>/dev/null | wc -l) + + # Если jq не сработал или цветов нет — фоллбэк на 1 + if [[ -z "$max_index" || "$max_index" -eq 0 ]]; then + max_index=1 + fi + + echo $((RANDOM % max_index)) +} + +# Получаем случайное изображение +IMAGE=$(get_random_image) || exit 1 +echo "→ Выбрано изображение: $IMAGE" + +# Получаем валидный случайный индекс цвета +COLOR_INDEX=$(get_random_color_index "$IMAGE") +echo "→ Выбран индекс цвета: $COLOR_INDEX" + +# Запускаем matugen +matugen image $IMAGE \ + --source-color-index $COLOR_INDEX \ + -m dark \ + --verbose +notify-send "[INFO]" "wallpapers was changed" -i "$IMAGE" diff --git a/config/ironbar/scripts/pomo b/config/ironbar/scripts/pomo index 6e2892c..a4c72f6 100755 --- a/config/ironbar/scripts/pomo +++ b/config/ironbar/scripts/pomo @@ -1,9 +1,28 @@ #!/bin/bash -ID=$(niri msg -j windows | jq -r '.[] | select(.app_id == "pomo") | .id' | head -1) +# Ищем первое окно pavucontrol +WIN_INFO=$(niri msg -j windows | jq -c '.[] | select(.app_id == "pomo")' | head -1) -if [ -n "$ID" ] && [ "$ID" != "null" ]; then - niri msg action focus-window --id "$ID" -else - footclient --app-id=pomo pomo +# Если окна нет — запускаем +if [ -z "$WIN_INFO" ]; then + footclient --app-id=pomo pomo + exit 0 +fi + +# Извлекаем ID и статус фокуса +ID=$(echo "$WIN_INFO" | jq -r '.id') +IS_FOCUSED=$(echo "$WIN_INFO" | jq -r '.is_focused') + +if [ "$IS_FOCUSED" = "true" ]; then + # 🔹 Окно уже сфокусировано — ваша логика здесь + niri msg action close-window --id "$ID" + niri msg action focus-window-previous + + # Примеры действий (раскомментируйте нужное): + # niri msg action close-window --id "$ID" # закрыть + # niri msg action minimize-window --id "$ID" # свернуть + # niri msg action focus-window-next # переключить на следующее окно +else + # 🔹 Окно существует, но не в фокусе — фокусируем его + niri msg action focus-window --id "$ID" fi diff --git a/config/ironbar/scripts/volume.sh b/config/ironbar/scripts/volume.sh new file mode 100755 index 0000000..38a007f --- /dev/null +++ b/config/ironbar/scripts/volume.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Ищем первое окно pavucontrol +WIN_INFO=$(niri msg -j windows | jq -c '.[] | select(.app_id == "org.pulseaudio.pavucontrol")' | head -1) + +# Если окна нет — запускаем +if [ -z "$WIN_INFO" ]; then + pavucontrol + exit 0 +fi + +# Извлекаем ID и статус фокуса +ID=$(echo "$WIN_INFO" | jq -r '.id') +IS_FOCUSED=$(echo "$WIN_INFO" | jq -r '.is_focused') + +if [ "$IS_FOCUSED" = "true" ]; then + # 🔹 Окно уже сфокусировано — ваша логика здесь + niri msg action close-window --id "$ID" + niri msg action focus-window-previous + + # Примеры действий (раскомментируйте нужное): + # niri msg action close-window --id "$ID" # закрыть + # niri msg action minimize-window --id "$ID" # свернуть + # niri msg action focus-window-next # переключить на следующее окно +else + # 🔹 Окно существует, но не в фокусе — фокусируем его + niri msg action focus-window --id "$ID" +fi diff --git a/config/ironbar/style.css b/config/ironbar/style.css index 1e9f574..5c424ea 100644 --- a/config/ironbar/style.css +++ b/config/ironbar/style.css @@ -1,4 +1,4 @@ -:root { +/*:root { --color-dark-primary: #07090b; --color-dark-secondary: #1f2830; --color-white: #eef7fd; @@ -8,13 +8,15 @@ --margin-lg: 1em; --margin-sm: 1em; } +*/ + +@import "colors.css"; * { - border: none; box-shadow: none; background-image: none; font-family: IosevkaTerm NF; - min-height: 20px; + min-height: 30px; min-width: 20px; } @@ -69,14 +71,35 @@ button:active { background-color: var(--color-dark-secondary); } -#end>*+* {} +.notifications { + border-radius: 0px 0px 0px 0px; +} +.notifications .button { + + border-radius: 0px 20px 20px 0px; + +} + +.notifications .count { + + font-size: 0.8em; + border-radius: 0px 0px 0px 0px; +} + + +/*#end>*+* {} +*/ .sysinfo>*+* { margin-left: var(--margin-sm); } .clock { font-weight: bold; + padding-top: 15px; + padding-bottom: 15px; + + border-radius: 0px 20px 0px 0px; } .popup-clock .calendar-clock { @@ -93,23 +116,18 @@ button:active { } .workspaces { - /*(max-width: 5px; - max-height: 5px; - - ga:width: ;p: 10em; - */ + padding-left: 15px; padding-right: 15px; - min-width: 15px; - min-height: 15px; + min-width: 20px; + min-height: 20px; } .workspaces .item { - min-width: 15px; - - min-height: 15px; + min-width: 1.2em; border-radius: 50%; + min-height: 1.1em; padding: 0px; background-color: var(--color-dark-secondary); box-shadow: none; @@ -151,33 +169,38 @@ button:active { } -.notifications .count { - /*max-height: 10px; - - max-width: 10px; - -*/ -} - -.notifications label { - /*max-height: 10px; - - max-width: 10px; - -*/ -} - - -/* по name на кнопке */ #my-btn { - border-radius: 8px; - + border-radius: 0px 0px 20px 0px; padding-top: 10px; } #pomo { - border-radius: 8px; + border-radius: 0px 20px 20px 0px; padding-top: 10px; padding-left: 10px; } + +#hyprwave { + + border-radius: 0px 20px 20px 0px; + +} + +.tray { + + border-radius: 0px 20px 20px 0px; + +} + +.tray .item { + border-radius: 0px 20px 20px 0px; + +} + +#volume-custom { + border-radius: 0px 20px 20px 0px; + border-radius: 0px 20px 20px 0px; + + +} diff --git a/config/ironbar/style.css.bak b/config/ironbar/style.css.bak new file mode 100644 index 0000000..ccaff25 --- /dev/null +++ b/config/ironbar/style.css.bak @@ -0,0 +1,203 @@ +:root { + --color-dark-primary: #07090b; + --color-dark-secondary: #1f2830; + --color-white: #eef7fd; + --color-active: #00fed4; + --color-urgent: #ff0100; + + --margin-lg: 1em; + --margin-sm: 1em; +} + +* { + box-shadow: none; + background-image: none; + font-family: IosevkaTerm NF; + min-height: 30px; + min-width: 20px; +} + +scale>trough { + background-color: var(--color-dark-secondary); +} + +scale>trough>highlight { + background-color: var(--color-active); + border-style: solid; + border-color: var(--color-active); + border-width: 0em; +} + +scale>trough>slider { + background-color: var(--color-white); +} + +switch>slider { + background-color: var(--color-white); +} + +switch:checked { + background-color: var(--color-active); +} + +switch:not(:checked) { + background-color: var(--color-dark-secondary); +} + +#bar, +popover, +popover contents, +calendar { + background-color: var(--color-dark-primary); +} + +box, +button, +label { + background-color: #0000; + color: var(--color-white); +} + +button { + padding-left: var(--margin-sm); + padding-right: var(--margin-sm); +} + +button:hover, +button:active { + background-color: var(--color-dark-secondary); +} + +.notifications { + border-radius: 0px 0px 0px 0px; +} + +.notifications .button { + + border-radius: 0px 20px 20px 0px; + +} + +.notifications .count { + + font-size: 0.8em; + border-radius: 0px 0px 0px 0px; +} + + +/*#end>*+* {} +*/ +.sysinfo>*+* { + margin-left: var(--margin-sm); +} + +.clock { + font-weight: bold; + padding-top: 15px; + padding-bottom: 15px; + + border-radius: 0px 20px 0px 0px; +} + +.popup-clock .calendar-clock { + font-size: 2.0em; +} + +.popup-clock .calendar .today { + background-color: var(--color-active); +} + +.focused .icon { + padding-top: 0.5em; + +} + +.workspaces { + + padding-left: 15px; + padding-right: 15px; + min-width: 20px; + min-height: 20px; + +} + +.workspaces .item { + min-width: 1.2em; + border-radius: 50%; + min-height: 1.2em; + padding: 0px; + background-color: var(--color-dark-secondary); + box-shadow: none; + margin: 5px 1px 0px 1px; +} + +.workspaces .item.visible { + background-color: var(--color-white); + box-shadow: none; +} + +.workspaces .item.focused { + background-color: var(--color-active); + border-radius: 10px; + min-height: 35px; + box-shadow: none; + +} + +.workspaces .item.urgent { + background-color: var(--color-urgent); + box-shadow: none; + min-width: 10px; + padding-left: 0px; + padding-right: 0px; +} + +.workspaces .item .text-icon { + font-size: 0; + min-width: 0; +} + +.workspaces .item label { + opacity: 0; + font-size: 0; + min-width: 15px; + min-height: 15px; + + +} + +#my-btn { + border-radius: 0px 0px 20px 0px; + padding-top: 10px; +} + +#pomo { + border-radius: 0px 20px 20px 0px; + + padding-top: 10px; + padding-left: 10px; +} + +#hyprwave { + + border-radius: 0px 20px 20px 0px; + +} + +.tray { + + border-radius: 0px 20px 20px 0px; + +} + +.tray .item { + border-radius: 0px 20px 20px 0px; + +} + +#volume-custom { + border-radius: 0px 20px 20px 0px; + border-radius: 0px 20px 20px 0px; + + +} diff --git a/config/kitty/current-theme.conf b/config/kitty/current-theme.conf index 7d21454..652394c 100644 --- a/config/kitty/current-theme.conf +++ b/config/kitty/current-theme.conf @@ -1,50 +1,49 @@ -# vim:ft=kitty +cursor #f2be6e +cursor_text_color #2f1d00 -## name: Tokyo Night -## license: popachcka-rulet -## author: an idiot -## upstream: /////////gol +foreground #fff3e6 +background #0e0a04 +selection_foreground #2c1e08 +selection_background #dcc3a1 +url_color #dcc3a1 +#: black 000000 767676 +color0 #18130b +color8 #403930 +#: red cc0403 f2201f +color1 #1e0b06 +color9 #9c3b21 +#: green 19cb00 23fd00 +color2 #dcc3a1 +color10 #f9debb +#: yellow cecb00 fffd00 +color3 #b6cea3 +color11 #d2eabd +#: blue 0d73cc 1a8fff +color4 #583a00 +color12 #f2be6e +#: magenta cb1ed1 fd28ff +color5 #4e3d24 +color13 #dcc3a1 +#: cyan 0dcdcd 14ffff +color6 #324625 +color14 #b6cea3 +#: white dddddd ffffff +color7 #d2c4b4 +color15 #fff3e6 -background #07090B -foreground #EEF7FD -selection_background #C1D6D6 -selection_foreground #07090B -url_color #73daca -cursor #c0caf5 -cursor_text_color #1a1b26 +mark1_foreground #281800 +mark1_background #ffddb0 +mark2_foreground #261904 +mark2_background #f9debb +mark3_foreground #0e2004 +mark3_background #d2eabd -# Tabs -active_tab_background #C1D6D6 -active_tab_foreground #25C39F -inactive_tab_background #5C6871 -inactive_tab_foreground #07090B -#tab_bar_background #15161e +active_tab_foreground #2f1d00 +active_tab_background #f2be6e +inactive_tab_foreground #ffffff +inactive_tab_background #976c25 -# Windows -active_border_color #25C39F -inactive_border_color #C0CAF5 - -# normal -color0 #07090B -color1 #FF0100 -color2 #25C39F -color3 #FFDE00 -color4 #109FFF -color5 #FE31FF -color6 #00FED4 -color7 #EEF7FD - -# bright - color8 #1f2830 - color9 #E46468 - color10 #82D1B9 - color11 #F6DB8B - color12 #8FD2F7 - color13 #F79DE7 - color14 #7EFEDE - color15 #d2dee7 - -# extended colors -color16 #ff9e64 -color17 #db4b4b +active_border_color #f2be6e +inactive_border_color #2f1d00 +# bell_border_color #ff5a00 diff --git a/config/kitty/current-theme1.conf b/config/kitty/current-theme1.conf deleted file mode 100644 index f2d9728..0000000 --- a/config/kitty/current-theme1.conf +++ /dev/null @@ -1,50 +0,0 @@ -# vim:ft=kitty - -## name: Tokyo Night -## license: MIT -## author: Folke Lemaitre -## upstream: https://github.com/folke/tokyonight.nvim/raw/main/extras/kitty/tokyonight_night.conf - - -background #1a1b26 -foreground #c0caf5 -selection_background #283457 -selection_foreground #c0caf5 -url_color #73daca -cursor #c0caf5 -cursor_text_color #1a1b26 - -# Tabs -active_tab_background #7aa2f7 -active_tab_foreground #16161e -inactive_tab_background #292e42 -inactive_tab_foreground #545c7e -#tab_bar_background #15161e - -# Windows -active_border_color #7aa2f7 -inactive_border_color #292e42 - -# normal -color0 #15161e -color1 #f7768e -color2 #9ece6a -color3 #e0af68 -color4 #7aa2f7 -color5 #bb9af7 -color6 #7dcfff -color7 #a9b1d6 - -# bright -color8 #414868 -color9 #f7768e -color10 #9ece6a -color11 #e0af68 -color12 #7aa2f7 -color13 #bb9af7 -color14 #7dcfff -color15 #c0caf5 - -# extended colors -color16 #ff9e64 -color17 #db4b4b diff --git a/config/kitty/dank-tabs.conf b/config/kitty/dank-tabs.conf deleted file mode 100644 index 0922283..0000000 --- a/config/kitty/dank-tabs.conf +++ /dev/null @@ -1,23 +0,0 @@ -tab_bar_edge top -tab_bar_style powerline -tab_powerline_style slanted -tab_bar_align left -tab_bar_min_tabs 2 -tab_bar_margin_width 0.0 -tab_bar_margin_height 2.5 1.5 -tab_bar_margin_color #09070d - -tab_bar_background #09070d - -active_tab_foreground #1e1e00 -active_tab_background #b8a8f0 -active_tab_font_style bold - -inactive_tab_foreground #c9b8d9 -inactive_tab_background #09070d -inactive_tab_font_style normal - -tab_activity_symbol " ● " - -tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title[:30]}{title[30:] and '…'} [{index}]" -active_tab_title_template "{fmt.fg.red}{bell_symbol}{activity_symbol}{fmt.fg.tab}{title[:30]}{title[30:] and '…'} [{index}]" diff --git a/config/kitty/kitty.conf b/config/kitty/kitty.conf index 35f880f..352235e 100644 --- a/config/kitty/kitty.conf +++ b/config/kitty/kitty.conf @@ -266,8 +266,7 @@ #: }}} #: Text cursor customization {{{ - - cursor #eef7fd +# cursor #eef7fd #: Default text cursor color. If set to the special value none the #: cursor will be rendered with a "reverse video" effect. Its color @@ -278,8 +277,7 @@ #: background and foreground colors have very low contrast. Note that #: some themes set this value, so if you want to override it, place #: your value after the lines where the theme file is included. - - cursor_text_color background +# cursor_text_color background #: The color of text under the cursor. If you want it rendered with #: the background color of the cell underneath instead, use the @@ -2835,6 +2833,6 @@ bold_italic_font auto # BEGIN_KITTY_THEME -#Tokyo Night +# Matugen include current-theme.conf # END_KITTY_THEME diff --git a/config/kitty/kitty.conf.bak b/config/kitty/kitty.conf.bak index 8cad09d..15b0a65 100644 --- a/config/kitty/kitty.conf.bak +++ b/config/kitty/kitty.conf.bak @@ -267,7 +267,7 @@ #: Text cursor customization {{{ -# cursor #cccccc + cursor #eef7fd #: Default text cursor color. If set to the special value none the #: cursor will be rendered with a "reverse video" effect. Its color @@ -279,7 +279,7 @@ #: some themes set this value, so if you want to override it, place #: your value after the lines where the theme file is included. -# cursor_text_color #111111 + cursor_text_color background #: The color of text under the cursor. If you want it rendered with #: the background color of the cell underneath instead, use the @@ -299,7 +299,7 @@ #: the cursor shape to beam at shell prompts. You can avoid this by #: setting shell_integration to no-cursor. -# cursor_shape_unfocused hollow +cursor_shape_unfocused beam #: Defines the text cursor shape when the OS window is not focused. #: The unfocused cursor shape can be one of block, beam, underline, @@ -374,7 +374,7 @@ #: Scrollback {{{ -# scrollback_lines 2000 + scrollback_lines 10000 #: Number of lines of history to keep in memory for scrolling back. #: Memory is allocated on demand. Negative numbers are (effectively) @@ -1001,7 +1001,7 @@ #: set the vertical and horizontal sides. Three values set top, #: horizontal and bottom. Four values set top, right, bottom and left. -# window_padding_width 0 + window_padding_width 5 #: The window padding (in pts) (blank area between the text and the #: window border). A single value sets all four sides. Two values set @@ -1314,9 +1314,8 @@ #: }}} #: Color scheme {{{ - - foreground #C1D6D6 - background #07090B +#foreground #C1D6D6 +# background #07090B #: The foreground and background colors. @@ -1442,9 +1441,8 @@ #: How much to dim text that has the DIM/FAINT attribute set. One #: means no dimming and zero means fully dimmed (i.e. invisible). - -selection_foreground #07090B -selection_background #ffffff +# selection_foreground #07090B +# selection_background #ffffff #: The foreground and background colors for text selected with the @@ -1460,9 +1458,8 @@ selection_background #ffffff #: The 256 terminal colors. There are 8 basic colors, each color has a #: dull and bright version, for the first 16 colors. You can set the #: remaining 240 colors as color16 to color255. - -color0 #07090B -color8 #5C6871 +#color0 #07090B + #color8 #5C6871 #596269 good #464646 #7E7E7F @@ -1474,28 +1471,24 @@ color8 #5C6871 #181818 #: black - -color1 #FF0100 -color9 #E46468 + #color1 #FF0100 + #color9 #E46468 #F87173 #: red - -color2 #25C39F - -color10 #82D1B9 +# color2 #25C39F +# color10 #82D1B9 #92ED47 from zzz #A1F7C6 #: green - -color3 #FFDE00 +# color3 #FFDE00 #FEDE00 #F4DA00 #F4DA00 #EFFF2B ##BAF000 -color11 #F6DB8B +# color11 #F6DB8B #FFC777 #F6DB8B #FDC849 @@ -1503,11 +1496,10 @@ color11 #F6DB8B #ECE782 #: yellow - -color4 #109FFF +# color4 #109FFF #1C55E3 #00A9FF -color12 #8FD2F7 +# color12 #8FD2F7 #1BB7F9 #2EB6FF #8077EA @@ -1519,9 +1511,8 @@ color12 #8FD2F7 #96E1FF #: blue - -color5 #FE31FF -color13 #F79DE7 +# color5 #FE31FF +# color13 #F79DE7 #EF61D6 #FFA4A5 #FF498C @@ -1529,11 +1520,10 @@ color13 #F79DE7 #F586FF #: magenta - -color6 #00FED4 +# color6 #00FED4 #00FFD3 #22BEE8 -color14 #7EFEDE +# color14 #7EFEDE #7EFEDE #65E09F good green #4EC2D9 @@ -1543,9 +1533,8 @@ color14 #7EFEDE #DFFBE8 #: cyan - -color7 #EEF7FD -color15 #C1D6D6 + #color7 #EEF7FD + #color15 #C1D6D6 #: white @@ -2843,3 +2832,9 @@ bold_font auto italic_font auto bold_italic_font auto # END_KITTY_FONTS + + +# BEGIN_KITTY_THEME +#Tokyo Night +include Matugen.conf +# END_KITTY_THEME diff --git a/config/kitty/themes/Matugen.conf b/config/kitty/themes/Matugen.conf new file mode 100644 index 0000000..652394c --- /dev/null +++ b/config/kitty/themes/Matugen.conf @@ -0,0 +1,49 @@ +cursor #f2be6e +cursor_text_color #2f1d00 + +foreground #fff3e6 +background #0e0a04 +selection_foreground #2c1e08 +selection_background #dcc3a1 +url_color #dcc3a1 + +#: black 000000 767676 +color0 #18130b +color8 #403930 +#: red cc0403 f2201f +color1 #1e0b06 +color9 #9c3b21 +#: green 19cb00 23fd00 +color2 #dcc3a1 +color10 #f9debb +#: yellow cecb00 fffd00 +color3 #b6cea3 +color11 #d2eabd +#: blue 0d73cc 1a8fff +color4 #583a00 +color12 #f2be6e +#: magenta cb1ed1 fd28ff +color5 #4e3d24 +color13 #dcc3a1 +#: cyan 0dcdcd 14ffff +color6 #324625 +color14 #b6cea3 +#: white dddddd ffffff +color7 #d2c4b4 +color15 #fff3e6 + +mark1_foreground #281800 +mark1_background #ffddb0 +mark2_foreground #261904 +mark2_background #f9debb +mark3_foreground #0e2004 +mark3_background #d2eabd + +active_tab_foreground #2f1d00 +active_tab_background #f2be6e +inactive_tab_foreground #ffffff +inactive_tab_background #976c25 + +active_border_color #f2be6e +inactive_border_color #2f1d00 +# bell_border_color #ff5a00 diff --git a/config/matugen/config.toml b/config/matugen/config.toml index b73422c..e3fa65e 100644 --- a/config/matugen/config.toml +++ b/config/matugen/config.toml @@ -1,17 +1,16 @@ [config] # If set to enabled, it will check for updates when you run the matugen command, notifying you that an update is avaiable. # WARNING: Matugen needs to be compiled with the `update-informer` feature for this to work. -version_check = false # The color which should be used as the source_color if no good color was found from an image. # Can be defined in any css format. # The cli flag will override this if used. -fallback_color = "#ffbf9b" +#fallback_color = "#ffbf9b" # Which color to choose if multiple good colors were found from an image. # choices: [darkness, lightness, saturation, less-saturation, value, closest-to-fallback] # The cli flag will override this if used. -prefer = "closest-to-fallback" +#prefer = "closest-to-fallback" # Enables caching which will cache the colorscheme, custom colors, etc. into a cache folder located in # Windows: C:\Users\user\AppData\Roaming\InioX\matugen\cache\images\ @@ -25,12 +24,12 @@ caching = false # Changing the syntax # Expr is for keywords like {{ }} -expr_prefix = "{{" -expr_postfix = "}}" +#expr_prefix = "{{" +#expr_postfix = "}}" # Block is for stuff like for loops etc. -block_prefix = "<*" -block_postfix = "*>" +#block_prefix = "<*" +#block_postfix = "*>" # Imports json files just like `--import-json` does. # Relative paths will be resolved from the path `config.toml` is in. @@ -40,7 +39,7 @@ block_postfix = "*>" # Value from -1 to 1. # -1 represents minimum contrast, 0 represents standard (i.e. the design as spec'd), # and 1 represents maximum contrast. -contrast = 1.0 +contrast = 0.3 [config.wallpaper] # Whether to set the wallpaper or not @@ -49,76 +48,172 @@ set = true # The base command to run for applying the wallpaper. # Keywords like {{ image }} or anything that works inside of hooks works here. # You could also set a static color if you use the color keywords and the wallpaper setter supports it. -command = "awww img --transition-type center {{ image }}" +#command = "swaybg -i '{{ image }}' '*'" +#command = "swaybg -i '{{ image }}' > /tmp/swaybg_error.log 2>&1" +#command = "swaybg -o DP-1 -i '{{ image }}' " + +command = "env WAYLAND_DISPLAY=$WAYLAND_DISPLAY XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR swaybg -o DP-1 -i '{{ image }}' -m fill" +#command = "WAYLAND_DISPLAY=wayland-0 swaybg -i '{{ image }}' -m fill" # For example, killing the wallpaper daemon. Usage is like a normal hook. # pre_hook = "" -[templates] -#[templates.includeme] -#input_path = "./include.txt" -# The output path is optional if you just want to import the template anyways. -# output_path = "./a/include.txt" +#[templates] +[templates.foot] +input_path = '~/.config/matugen/templates/foot.ini' +output_path = "~/.config/foot/themes/matugen-theme.ini" -#[templates.name1] -# Relative paths will be resolved from the path `config.toml` is in. -#input_path = "./colors.whatever-extension" -#output_path = "./a/colors-generated.whatever-extension" +[templates.foot-init] +input_path = "~/.config/matugen/templates/foot-apply-colors.sh" +output_path = "~/.config/matugen/scripts/foot-apply-colors.sh" +post_hook = "bash ~/.config/matugen/scripts/foot-apply-colors.sh" -# Defaults to a value of 0 if unspecified, determines the order that each template is processed. -# You can use index = n to force a particular template hook to run after everything else, and index = -n for before everything else -#index = 1 +[templates.cava] +input_path = '~/.config/matugen/templates/cava-colors.ini' +output_path = '~/.config/cava/themes/matugen' +post_hook = 'pkill -USR1 cava || true' -# Defaults to the type from CLI if unspecified. -# One of `SchemeContent`, `SchemeExpressive`, `SchemeFidelity`, `SchemeFruitSalad`, `SchemeMonochrome`, `SchemeNeutral`, `SchemeRainbow`, `SchemeTonalSpot`, `SchemeVibrant` -#type = "SchemeExpressive" +[templates.kitty] +input_path = '~/.config/matugen/templates/kitty-colors.conf' +output_path = '~/.config/kitty/themes/Matugen.conf' +post_hook = "kitty +kitten themes --reload-in=all Matugen" -# For testing of the `--continue-on-error` flag -# [templates.ishoulderror] -# Relative paths will be resolved from the path `config.toml` is in. -# input_path = "./error-testing.txt" -# output_path = "./a/error-testing.txt" +[templates.clipse] +input_path = '~/.config/matugen/templates/clipse_theme.json' +output_path = '~/.config/clipse/matugen.json' -# This will use a different input path depending on what mode you use. -# input_path_modes = { dark = "./colors.whatever-extension", light = "./colors.whatever-extension" } -# This will compare all of the colors inside the array with the color you set as `compare_to`, and returns the closest color to it. -# You can then use `{{closest_color}}` inside hooks. -#colors_to_compare = [ -# { name = "black", color = "#000000" }, -# { name = "red", color = "#ff0000" }, -# { name = "maroon", color = "#800000" }, -# { name = "yellow", color = "#ffff00" }, -# { name = "olive", color = "#808000" }, -# { name = "lime", color = "#00ff00" }, -# { name = "green", color = "#008000" }, -# { name = "aqua", color = "#00ffff" }, -# { name = "teal", color = "#008080" }, -# { name = "blue", color = "#0000ff" }, -# { name = "navy", color = "#000080" }, -# { name = "fuchsia", color = "#ff00ff" }, -# { name = "purple", color = "#800080" }, -#] -#compare_to = "{{colors.primary.default.hex}}" +[templates.hyprland] +input_path = '~/.config/matugen/templates/hyprland-colors.conf' +output_path = '~/.config/hypr/colors.conf' -# Runs before the template is exported. You can use keywords here. -# If you want the command to be async, add an & symbol to the end of the command on unix. -#pre_hook = 'echo "source color {{colors.source_color.default.hex}}, source image {{image}}, closest color {{closest_color}}"' -# Runs after the template is exported. You can use keywords here. -# If you want the command to be async, add an & symbol to the end of the command on unix. -#post_hook = 'echo "after gen"' +[templates.hyprlock] +input_path = '~/.config/matugen/templates/hyprlock.conf' +output_path = '~/.config/hypr/colors-hyprlock.conf' -# For overriding the prefix for a specific template only -#expr_prefix = "{{" -#expr_postfix = "}}" -# Only hex values -# https://m3.material.io/styles/color/advanced/adjust-existing-colors#1cc12e43-237b-45b9-8fe0-9a3549c1f61e -# If you want to use the original color without any harmonization, add `_source` after the name like: `{{ color_source }}` -# Example: To use the original red color you would use `{{ red_source }}` instead of `{{ red }}` +[templates.ironbar] +input_path = "~/.config/matugen/templates/ironbar.css" +output_path = "~/.config/ironbar/colors.css" +post_hook = "bash ~/.config/matugen/scripts/ironbar-toggle.sh" -# If you don't want to use the other colors that are automatically generated (on_color, on_color_container) you can just import a custom json with the colors instead. -# For an example of importing json see: https://iniox.github.io/#matugen/usage/importing-json -[config.custom_colors] -red = "#ff0000" -blue = "#0000ff" -green = "#00ff00" +[templates.telegram_background] +pre_hook = 'mkdir -p ~/.config/telegram/matugen' +input_path = '~/.config/matugen/templates/telegram-background-solid.svg' +output_path = '~/.config/telegram/matugen/background.svg' +post_hook = 'magick ~/.config/telegram/matugen/background.svg ~/.config/telegram/matugen/background.jpg' +index = 0 + +[templates.telegram] +input_path = '~/.config/matugen/templates/telegram.tdesktop-theme' +output_path = '~/.config/telegram/matugen/colors.tdesktop-theme' +post_hook = 'zip -qj - ~/.config/telegram/matugen/colors.tdesktop-theme ~/.config/telegram/matugen/background.jpg >~/.config/telegram/matugen.tdesktop-theme' +index = 1 + +[templates.niri] +input_path = '~/.config/matugen/templates/niri-colors.kdl' +output_path = '~/.config/niri/colors.kdl' +post_hook = 'niri msg action load-config-file' + +[templates.nvim] +input_path = "~/.config/matugen/templates/neovim.lua" +output_path = "~/.config/nvim/lua/matugen.lua" +post_hook = 'pkill -SIGUSR1 nvim' + +[templates.gtk3] +input_path = '~/.config/matugen/templates/gtk-colors.css' +output_path = '~/.config/gtk-3.0/colors.css' +post_hook = 'gsettings set org.gnome.desktop.interface gtk-theme ""; gsettings set org.gnome.desktop.interface gtk-theme adw-gtk3-{{mode}}' + +[templates.gtk4] +input_path = '~/.config/matugen/templates/gtk-colors.css' +output_path = '~/.config/gtk-4.0/colors.css' + +[templates.prismlauncher] +input_path = '~/.config/matugen/templates/prismlauncher.json' +output_path = '~/.local/share/PrismLauncher/themes/Matugen/theme.json' +post_hook = 'cp ~/.local/share/PrismLauncher/themes/Matugen/theme.json ~/.local/share/ElyPrismLauncher/themes/Matugen/theme.json' +# ... +[templates.kvantum_kvconfig] +input_path = '~/.config/matugen/templates/kvantum-colors.kvconfig' +output_path = '~/.config/Kvantum/matugen/matugen.kvconfig' + +[templates.kvantum_svg] +input_path = '~/.config/matugen/templates/kvantum-colors.svg' +output_path = '~/.config/Kvantum/matugen/matugen.svg' + +[templates.hyprtoolkit] +input_path = "~/.config/matugen/templates/hyprtoolkit.conf" +output_path = "~/.config/hypr/hyprtoolkit.conf" + +[templates.pywalfox] +input_path = '~/.config/matugen/templates/pywalfox-colors.json' +output_path = '~/.cache/wal/colors.json' +post_hook = 'pywalfox update' + +# [templates.firefox-website-colors] +# input_path = "~/.config/matugen/templates/firefox-colors.css" +# output_path = "~/.zen/j0ceihqh.Default (release)/chrome/userChrome.css" + +[templates.rmpc] +input_path = '~/.config/matugen/templates/rmpc/rmpc.ron' +output_path = '~/.config/rmpc/themes/matugen.ron' + +[templates.starship] +input_path = '~/.config/matugen/templates/starship-colors.toml' +output_path = '~/.config/starship.toml' +# ... +[templates.tmux] +input_path = '~/.config/matugen/templates/tmux-colors.conf' +output_path = '~/.config/tmux/colors.conf' +#post_hook = "tmux info >/dev/null 2>&1 && tmux source-file ~/.config/tmux/colors.conf" + +[templates.yazi] +input_path = '~/.config/matugen/templates/yazi-theme.toml' +output_path = '~/.config/yazi/theme.toml' +# ... +#[templates.zathura] +#input_path = '~/.config/matugen/templates/zathura-colors' +#output_path = '~/.config/zathura/zathurarc' +# ... +[templates.swaync] +input_path = "~/.config/matugen/templates/swaync-colors.css" +output_path = "~/.config/swaync/colors.css" +post_hook = "swaync-client -rs" + +# ... +# ... +# +[templates.obsidian] +input_path = '~/.config/matugen/templates/obsidian.css' +output_path = '~/.obsidian/unconfer/.obsidian/themes/Matugen/theme.css' + +[templates.btop] +input_path = '~/.config/matugen/templates/btop.theme' +output_path = '~/.config/btop/themes/matugen.theme' +post_hook = 'pkill -USR2 btop || true' +# ... +# +[templates.walker] +input_path = '~/.config/matugen/templates/walker.css' +output_path = '~/.config/walker/themes/matugen/colors.css' +post_hook = 'bash ~/.config/matugen/scripts/walker.sh' + +[templates.hyprwave] +input_path = '~/.config/matugen/templates/hyprwave.css' +output_path = '~/.local/share/hyprwave/themes/matugen.css' +post_hook = "bash ~/.config/matugen/scripts/hyprwave-reload.sh" + +[templates.swayosd] +input_path = '~/.config/matugen/templates/swayosd.css' +output_path = '~/.config/swayosd/colors.css' +#post_hook = "env WAYLAND_DISPLAY=$WAYLAND_DISPLAY DBUS_SESSION_BUS_ADDRESS='unix:path=$XDG_RUNTIME_DIR/bus' XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR pkill swayosd-server && sleep 0.1s && swayosd-server " +post_hook = "bash ~/.config/matugen/scripts/swayosd-reload.sh" + + +[templates.zen-userChrome] +input_path = "~/.config/matugen/templates/zen-userChrome.css" +output_path = "/home/unconfer/.zen/j0ceihqh.Default (release)/chrome/userChrome.css" + +[templates.zen-userContent] +input_path = "~/.config/matugen/templates/zen-userContent.css" +output_path = "/home/unconfer/.zen/j0ceihqh.Default (release)/chrome/userContent.css" diff --git a/config/matugen/custom3.json b/config/matugen/custom3.json deleted file mode 100644 index 0967ef4..0000000 --- a/config/matugen/custom3.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/config/matugen/scripts/foot-apply-colors.sh b/config/matugen/scripts/foot-apply-colors.sh new file mode 100644 index 0000000..7a09d4a --- /dev/null +++ b/config/matugen/scripts/foot-apply-colors.sh @@ -0,0 +1,42 @@ +#!/bin/ bash +# Применить цвета через OSC ко всем foot-инстансам +# Согласно foot-ctlseqs(7) + +for pts in /dev/pts/[0-9]*; do + # OSC 10: default foreground (foreground) + printf '\e]10;#fff3e6\007' >>"$pts" 2>/dev/null + + # OSC 11: default background (background) + printf '\e]11;#18130b\007' >>"$pts" 2>/dev/null + + # OSC 12: cursor color (первое значение из cursor в foot.ini) + printf '\e]12;#f2be6e\007' >>"$pts" 2>/dev/null + + # OSC 17: selection background + printf '\e]17;#976c25\007' >>"$pts" 2>/dev/null + + # OSC 19: selection foreground + printf '\e]19;#ffffff\007' >>"$pts" 2>/dev/null + + # OSC 4: palette colors 0-15 (regular0-7, bright0-7) + printf '\e]4;0;#0e0a04\007' >>"$pts" 2>/dev/null + printf '\e]4;1;#ffb4ab\007' >>"$pts" 2>/dev/null + printf '\e]4;2;#b6cea3\007' >>"$pts" 2>/dev/null + printf '\e]4;3;#dcc3a1\007' >>"$pts" 2>/dev/null + printf '\e]4;4;#f2be6e\007' >>"$pts" 2>/dev/null + printf '\e]4;5;#867154\007' >>"$pts" 2>/dev/null + printf '\e]4;6;#657b55\007' >>"$pts" 2>/dev/null + printf '\e]4;7;#d2c4b4\007' >>"$pts" 2>/dev/null + printf '\e]4;8;#352e26\007' >>"$pts" 2>/dev/null + printf '\e]4;9;#ffffff\007' >>"$pts" 2>/dev/null + printf '\e]4;10;#0e2004\007' >>"$pts" 2>/dev/null + printf '\e]4;11;#261904\007' >>"$pts" 2>/dev/null + printf '\e]4;12;#976c25\007' >>"$pts" 2>/dev/null + printf '\e]4;13;#6f4a00\007' >>"$pts" 2>/dev/null + printf '\e]4;14;#142508\007' >>"$pts" 2>/dev/null + printf '\e]4;15;#362f27\007' >>"$pts" 2>/dev/null + + # Дополнительные индексы палитры (16, 17), если используются + printf '\e]4;16;#b6cea3\007' >>"$pts" 2>/dev/null + printf '\e]4;17;#da342e\007' >>"$pts" 2>/dev/null +done diff --git a/config/matugen/scripts/foot-apply-colors.sh.bak b/config/matugen/scripts/foot-apply-colors.sh.bak new file mode 100644 index 0000000..cae33b7 --- /dev/null +++ b/config/matugen/scripts/foot-apply-colors.sh.bak @@ -0,0 +1,42 @@ +#!/bin/ bash +# Применить цвета через OSC ко всем foot-инстансам +# Согласно foot-ctlseqs(7) + +for pts in /dev/pts/[0-9]*; do + # OSC 10: default foreground (foreground) + printf '\e]10;#e7e2d5\007' >>"$pts" 2>/dev/null + + # OSC 11: default background (background) + printf '\e]11;#15140c\007' >>"$pts" 2>/dev/null + + # OSC 12: cursor color (первое значение из cursor в foot.ini) + printf '\e]12;#15140c\007' >>"$pts" 2>/dev/null + + # OSC 17: selection background + printf '\e]17;#4f4800\007' >>"$pts" 2>/dev/null + + # OSC 19: selection foreground + printf '\e]19;#f0e58b\007' >>"$pts" 2>/dev/null + + # OSC 4: palette colors 0-15 (regular0-7, bright0-7) + printf '\e]4;0;#0f0e07\007' >>"$pts" 2>/dev/null + printf '\e]4;1;#ffb4ab\007' >>"$pts" 2>/dev/null + printf '\e]4;2;#a6d0b8\007' >>"$pts" 2>/dev/null + printf '\e]4;3;#cec7a3\007' >>"$pts" 2>/dev/null + printf '\e]4;4;#d3c972\007' >>"$pts" 2>/dev/null + printf '\e]4;5;#4b472b\007' >>"$pts" 2>/dev/null + printf '\e]4;6;#284e3c\007' >>"$pts" 2>/dev/null + printf '\e]4;7;#cbc6b5\007' >>"$pts" 2>/dev/null + printf '\e]4;8;#2c2a21\007' >>"$pts" 2>/dev/null + printf '\e]4;9;#ffdad6\007' >>"$pts" 2>/dev/null + printf '\e]4;10;#002113\007' >>"$pts" 2>/dev/null + printf '\e]4;11;#1f1c05\007' >>"$pts" 2>/dev/null + printf '\e]4;12;#4f4800\007' >>"$pts" 2>/dev/null + printf '\e]4;13;#686013\007' >>"$pts" 2>/dev/null + printf '\e]4;14;#103726\007' >>"$pts" 2>/dev/null + printf '\e]4;15;#323127\007' >>"$pts" 2>/dev/null + + # Дополнительные индексы палитры (16, 17), если используются + printf '\e]4;16;#a6d0b8\007' >>"$pts" 2>/dev/null + printf '\e]4;17;#93000a\007' >>"$pts" 2>/dev/null +done diff --git a/config/matugen/scripts/foot-apply.sh b/config/matugen/scripts/foot-apply.sh new file mode 100644 index 0000000..0bd68a3 --- /dev/null +++ b/config/matugen/scripts/foot-apply.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +apply_osc4() { + local idx=$1 hex=$2 + printf '\e]4;%d;rgb:%s/%s/%s\007' \ + "$idx" "${hex:0:2}" "${hex:2:2}" "${hex:4:2}" +} + +apply_fg() { + local h=$1 + printf '\e]10;rgb:%s/%s/%s\007' "${h:0:2}" "${h:2:2}" "${h:4:2}" +} +apply_bg() { + local h=$1 + printf '\e]11;rgb:%s/%s/%s\007' "${h:0:2}" "${h:2:2}" "${h:4:2}" +} +apply_sel_bg() { + local h=$1 + printf '\e]17;rgb:%s/%s/%s\007' "${h:0:2}" "${h:2:2}" "${h:4:2}" +} +apply_sel_fg() { + local h=$1 + printf '\e]19;rgb:%s/%s/%s\007' "${h:0:2}" "${h:2:2}" "${h:4:2}" +} + +apply_fg "{{colors.on_surface.default.hex_stripped}}" +apply_bg "{{colors.surface.default.hex_stripped}}" +apply_sel_bg "{{colors.primary_container.default.hex_stripped}}" +apply_sel_fg "{{colors.on_primary_container.default.hex_stripped}}" + +apply_osc4 0 "{{colors.surface_container_lowest.default.hex_stripped}}" +apply_osc4 1 "{{colors.error.default.hex_stripped}}" +apply_osc4 2 "{{colors.tertiary.default.hex_stripped}}" +apply_osc4 3 "{{colors.secondary.default.hex_stripped}}" +apply_osc4 4 "{{colors.primary.default.hex_stripped}}" +apply_osc4 5 "{{colors.secondary_container.default.hex_stripped}}" +apply_osc4 6 "{{colors.tertiary_container.default.hex_stripped}}" +apply_osc4 7 "{{colors.on_surface_variant.default.hex_stripped}}" +apply_osc4 8 "{{colors.surface_container_high.default.hex_stripped}}" +apply_osc4 9 "{{colors.error_container.default.hex_stripped}}" +apply_osc4 10 "{{colors.tertiary_container.default.hex_stripped}}" +apply_osc4 11 "{{colors.secondary_container.default.hex_stripped}}" +apply_osc4 12 "{{colors.primary_container.default.hex_stripped}}" +apply_osc4 13 "{{colors.inverse_primary.default.hex_stripped}}" +apply_osc4 14 "{{colors.surface_bright.default.hex_stripped}}" +apply_osc4 15 "{{colors.on_surface.default.hex_stripped}}" diff --git a/config/matugen/scripts/hyprwave-reload.sh b/config/matugen/scripts/hyprwave-reload.sh new file mode 100644 index 0000000..1878c46 --- /dev/null +++ b/config/matugen/scripts/hyprwave-reload.sh @@ -0,0 +1,12 @@ +# ~/.config/matugen/scripts/hyprwave-reload.sh +#!/bin/bash +#!/bin/bash + +if ! pgrep -x hyprwave >/dev/null; then + hyprwave & + sleep 0.5 +fi + +hyprwave-toggle set-theme matugen +sleep 1s +hyprwave-toggle visibility diff --git a/config/matugen/scripts/ironbar-toggle.sh b/config/matugen/scripts/ironbar-toggle.sh new file mode 100755 index 0000000..04fb03f --- /dev/null +++ b/config/matugen/scripts/ironbar-toggle.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +COMMAND="ironbar" + +# Проверяем, существует ли процесс с указанной командной строкой +if pgrep -x "$COMMAND" >/dev/null 2>&1; then + notify-send "[INFO]" "ironbar уже работает, запускаю остановку... " -t 700 + pkill -x ironbar + exec $COMMAND &>/dev/null & +else + notify-send "[INFO]" "ironbar не активен, запускаю..." -t 700 + exec $COMMAND &>/dev/null & +fi diff --git a/config/matugen/scripts/matugen-foot-apply.sh b/config/matugen/scripts/matugen-foot-apply.sh new file mode 100644 index 0000000..9f4fb01 --- /dev/null +++ b/config/matugen/scripts/matugen-foot-apply.sh @@ -0,0 +1,22 @@ +#!/usr/bin/env bash +# Применить цвета через OSC4 ко всем foot-инстансам +for pts in /dev/pts/[0-9]*; do + printf '\e]11;#{{colors.surface.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]10;#{{colors.on_surface.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;0;#{{colors.surface_container_lowest.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;1;#{{colors.error.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;2;#{{colors.tertiary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;3;#{{colors.secondary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;4;#{{colors.primary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;5;#{{colors.secondary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;6;#{{colors.tertiary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;7;#{{colors.on_surface_variant.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;8;#{{colors.surface_container_high.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;9;#{{colors.error_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;10;#{{colors.tertiary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;11;#{{colors.secondary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;12;#{{colors.primary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;13;#{{colors.inverse_primary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;14;#{{colors.tertiary_fixed_dim.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;15;#{{colors.surface_bright.default.hex_stripped}}\007' >>"$pts" 2>/dev/null +done diff --git a/config/matugen/scripts/swayosd-reload.sh b/config/matugen/scripts/swayosd-reload.sh new file mode 100644 index 0000000..cf7f66d --- /dev/null +++ b/config/matugen/scripts/swayosd-reload.sh @@ -0,0 +1,12 @@ +# ~/.config/matugen/scripts/swayosd-reload.sh +#!/bin/bash +#env WAYLAND_DISPLAY=$WAYLAND_DISPLAY DBUS_SESSION_BUS_ADDRESS='unix:path=$XDG_RUNTIME_DIR/bus' XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR + +export WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-1}" +export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}" +export PATH="/usr/local/bin:/usr/bin:/bin:$PATH" +pkill swayosd-server 2>/dev/null +sleep 0.2 +swayosd-server & +disown +exit 0 diff --git a/config/matugen/scripts/walker.sh b/config/matugen/scripts/walker.sh new file mode 100644 index 0000000..2714f09 --- /dev/null +++ b/config/matugen/scripts/walker.sh @@ -0,0 +1,4 @@ +#!/bin/bash +pkill walker +sleep 0.4 +walker --gapplication-service & diff --git a/config/matugen/templates/Matugen.colors b/config/matugen/templates/Matugen.colors new file mode 100644 index 0000000..e2da8dd --- /dev/null +++ b/config/matugen/templates/Matugen.colors @@ -0,0 +1,150 @@ +[ColorEffects:Disabled] +Color={{colors.surface_dim.default.hex}} +ColorAmount=0 +ColorEffect=0 +ContrastAmount=0.65 +ContrastEffect=1 +IntensityAmount=0.1 +IntensityEffect=2 + +[ColorEffects:Inactive] +ChangeSelectionColor=true +Color={{colors.surface_variant.default.hex}} +ColorAmount=0.025 +ColorEffect=2 +ContrastAmount=0.1 +ContrastEffect=2 +Enable=false +IntensityAmount=0 +IntensityEffect=0 + +[Colors:Button] +BackgroundAlternate={{colors.surface_container_low.default.hex}} +BackgroundNormal={{colors.surface_container_high.default.hex}} +DecorationFocus={{colors.primary.default.hex}} +DecorationHover={{colors.primary.default.hex}} +ForegroundActive={{colors.primary.default.hex}} +ForegroundInactive={{colors.on_surface_variant.default.hex}} +ForegroundLink={{colors.secondary.default.hex}} +ForegroundNegative={{colors.error.default.hex}} +ForegroundNeutral={{colors.tertiary.default.hex}} +ForegroundNormal={{colors.on_surface.default.hex}} +ForegroundPositive={{colors.tertiary_fixed.default.hex}} +ForegroundVisited={{colors.on_secondary_container.default.hex}} + +[Colors:Complementary] +BackgroundAlternate={{colors.surface_container_low.default.hex}} +BackgroundNormal={{colors.surface.default.hex}} +DecorationFocus={{colors.primary.default.hex}} +DecorationHover={{colors.primary.default.hex}} +ForegroundActive={{colors.primary.default.hex}} +ForegroundInactive={{colors.on_surface_variant.default.hex}} +ForegroundLink={{colors.secondary.default.hex}} +ForegroundNegative={{colors.error.default.hex}} +ForegroundNeutral={{colors.tertiary.default.hex}} +ForegroundNormal={{colors.on_primary_container.default.hex}} +ForegroundPositive={{colors.tertiary_fixed.default.hex}} +ForegroundVisited={{colors.on_secondary_container.default.hex}} + +[Colors:Header] +BackgroundAlternate={{colors.surface.default.hex}} +BackgroundNormal={{colors.surface_container.default.hex}} +DecorationFocus={{colors.primary.default.hex}} +DecorationHover={{colors.primary.default.hex}} +ForegroundActive={{colors.primary.default.hex}} +ForegroundInactive={{colors.on_surface_variant.default.hex}} +ForegroundLink={{colors.secondary.default.hex}} +ForegroundNegative={{colors.error.default.hex}} +ForegroundNeutral={{colors.tertiary.default.hex}} +ForegroundNormal={{colors.on_surface.default.hex}} +ForegroundPositive={{colors.tertiary_fixed.default.hex}} +ForegroundVisited={{colors.on_secondary_container.default.hex}} + +[Colors:Header][Inactive] +BackgroundAlternate={{colors.surface_container.default.hex}} +BackgroundNormal={{colors.surface_container.default.hex}} +DecorationFocus={{colors.primary.default.hex}} +DecorationHover={{colors.primary.default.hex}} +ForegroundActive={{colors.primary.default.hex}} +ForegroundInactive={{colors.on_surface_variant.default.hex}} +ForegroundLink={{colors.secondary.default.hex}} +ForegroundNegative={{colors.error.default.hex}} +ForegroundNeutral={{colors.tertiary.default.hex}} +ForegroundNormal={{colors.on_surface.default.hex}} +ForegroundPositive={{colors.tertiary_fixed.default.hex}} +ForegroundVisited={{colors.on_secondary_container.default.hex}} + +[Colors:Selection] +BackgroundAlternate={{colors.surface_container_low.default.hex}} +BackgroundNormal={{colors.primary.default.hex}} +DecorationFocus={{colors.primary.default.hex}} +DecorationHover={{colors.primary.default.hex}} +ForegroundActive={{colors.on_primary.default.hex}} +ForegroundInactive={{colors.on_surface_variant.default.hex}} +ForegroundLink={{colors.secondary_fixed.default.hex}} +ForegroundNegative={{colors.error_container.default.hex}} +ForegroundNeutral={{colors.tertiary_fixed_dim.default.hex}} +ForegroundNormal={{colors.secondary_fixed.default.hex}} +ForegroundPositive={{colors.tertiary_container.default.hex}} +ForegroundVisited={{colors.on_secondary_container.default.hex}} + +[Colors:Tooltip] +BackgroundAlternate={{colors.surface.default.hex}} +BackgroundNormal={{colors.surface_container.default.hex}} +DecorationFocus={{colors.primary.default.hex}} +DecorationHover={{colors.primary.default.hex}} +ForegroundActive={{colors.primary.default.hex}} +ForegroundInactive={{colors.on_surface_variant.default.hex}} +ForegroundLink={{colors.secondary.default.hex}} +ForegroundNegative={{colors.error.default.hex}} +ForegroundNeutral={{colors.tertiary.default.hex}} +ForegroundNormal={{colors.on_background.default.hex}} +ForegroundPositive={{colors.tertiary_fixed.default.hex}} +ForegroundVisited={{colors.on_secondary_container.default.hex}} + +[Colors:View] +BackgroundAlternate={{colors.surface_container.default.hex}} +BackgroundNormal={{colors.background.default.hex}} +DecorationFocus={{colors.primary_container.default.hex}} +DecorationHover={{colors.on_primary.default.hex}} +ForegroundActive={{colors.primary.default.hex}} +ForegroundInactive={{colors.on_surface_variant.default.hex}} +ForegroundLink={{colors.secondary.default.hex}} +ForegroundNegative={{colors.error.default.hex}} +ForegroundNeutral={{colors.tertiary.default.hex}} +ForegroundNormal={{colors.on_background.default.hex}} +ForegroundPositive={{colors.tertiary_fixed.default.hex}} +ForegroundVisited={{colors.on_secondary_container.default.hex}} + +[Colors:Window] +BackgroundAlternate={{colors.primary_container.default.hex}} +BackgroundNormal={{colors.surface_container.default.hex}} +DecorationFocus={{colors.primary.default.hex}} +DecorationHover={{colors.primary.default.hex}} +ForegroundActive={{colors.primary.default.hex}} +ForegroundInactive={{colors.on_surface_variant.default.hex}} +ForegroundLink={{colors.secondary.default.hex}} +ForegroundNegative={{colors.error.default.hex}} +ForegroundNeutral={{colors.tertiary.default.hex}} +ForegroundNormal={{colors.on_background.default.hex}} +ForegroundPositive={{colors.tertiary_fixed.default.hex}} +ForegroundVisited={{colors.on_secondary_container.default.hex}} + +[General] +ColorScheme=Matugen +Name=Matugen + +[Appearance] +color_scheme=Matugen + +[KDE] +contrast=4 + +[WM] +activeBackground={{colors.primary_container.default.hex}} +activeBlend={{colors.on_primary_container.default.hex}} +activeForeground={{colors.on_primary_container.default.hex}} +inactiveBackground={{colors.surface.default.hex}} +inactiveBlend={{colors.on_surface_variant.default.hex}} +inactiveForeground={{colors.on_surface_variant.default.hex}} + diff --git a/config/matugen/templates/alacritty.toml b/config/matugen/templates/alacritty.toml new file mode 100644 index 0000000..053e2ce --- /dev/null +++ b/config/matugen/templates/alacritty.toml @@ -0,0 +1,68 @@ +[colors.primary] +background = '{{colors.background.default.hex}}' +foreground = '{{colors.on_surface.default.hex}}' + +[colors.cursor] +text = '{{colors.on_surface.default.hex}}' +cursor = '{{colors.on_surface_variant.default.hex}}' + +[colors.vi_mode_cursor] +text = '{{colors.background.default.hex}}' +cursor = '{{colors.primary.default.hex}}' + +[colors.search.matches] +foreground = '{{colors.surface_variant.default.hex}}' +background = '{{colors.tertiary.default.hex}}' + +[colors.search.focused_match] +foreground = '{{colors.surface_variant.default.hex}}' +background = '{{colors.primary.default.hex}}' + +[colors.footer_bar] +foreground = '{{colors.surface_variant.default.hex}}' +background = '{{colors.inverse_surface.default.hex}}' + +[colors.hints.start] +foreground = '{{colors.surface_variant.default.hex}}' +background = '{{colors.secondary.default.hex}}' + +[colors.hints.end] +foreground = '{{colors.surface_variant.default.hex}}' +background = '{{colors.secondary.default.hex}}' + +[colors.selection] +text = '{{colors.background.default.hex}}' +background = '{{colors.primary.default.hex}}' + + +[colors.normal] +black = '#181818' +red = '{{colors.error.default.hex}}' +green = '{{colors.primary.default.hex}}' +yellow = '{{colors.inverse_primary.default.hex}}' +blue = '{{colors.primary.default.hex}}' +magenta = '{{colors.tertiary.default.hex}}' +cyan = '{{colors.secondary.default.hex}}' +white = '#BAC2DE' + + +[colors.bright] +black = '#585B70' +red = '#F38BA8' +green = '#A6E3A1' +yellow = '#F9E2AF' +blue = '#89B4FA' +magenta = '#F5C2E7' +cyan = '#94E2D5' +white = '#A6ADC8' + + +[colors.dim] +black = '#45475A' +red = '#F38BA8' +green = '#A6E3A1' +yellow = '#F9E2AF' +blue = '#89B4FA' +magenta = '#F5C2E7' +cyan = '#94E2D5' +white = '#BAC2DE' diff --git a/config/matugen/templates/btop.theme b/config/matugen/templates/btop.theme new file mode 100644 index 0000000..d1f8c8d --- /dev/null +++ b/config/matugen/templates/btop.theme @@ -0,0 +1,89 @@ +# Matugen template for btop + + +# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255" +# example for white: "#ffffff", "#ff" or "255 255 255". + +# All graphs and meters can be gradients +# For single color graphs leave "mid" and "end" variable empty. +# Use "start" and "end" variables for two color gradient +# Use "start", "mid" and "end" for three color gradient + +# Main background, empty for terminal default, need to be empty if you want transparent background +theme[main_bg]="" + +# Main text color +theme[main_fg]="{{colors.on_surface.default.hex}}" + +# Title color for boxes +theme[title]="{{colors.primary.default.hex}}" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="{{colors.secondary.default.hex}}" + +# Background color of selected item in processes box +theme[selected_bg]="{{colors.primary.default.hex}}" + +# Foreground color of selected item in processes box +theme[selected_fg]="{{colors.on_primary.default.hex}}" + +# Color of inactive/disabled text +theme[inactive_fg]="{{colors.on_surface_variant.default.hex}}" + +# Misc colors for processes box including mini cpu graphs, details memory graph and details status text +theme[proc_misc]="{{colors.tertiary.default.hex}}" + +# Cpu box outline color +theme[cpu_box]="{{colors.outline.default.hex}}" + +# Memory/disks box outline color +theme[mem_box]="{{colors.outline.default.hex}}" + +# Net up/down box outline color +theme[net_box]="{{colors.outline.default.hex}}" + +# Processes box outline color +theme[proc_box]="{{colors.outline.default.hex}}" + +# Box divider line and small boxes line color +theme[div_line]="{{colors.outline_variant.default.hex}}" + +# Temperature graph colors +theme[temp_start]="{{colors.secondary.default.hex}}" +theme[temp_mid]="{{colors.primary.default.hex}}" +theme[temp_end]="{{colors.error.default.hex}}" + +# CPU graph colors +theme[cpu_start]="{{colors.secondary.default.hex}}" +theme[cpu_mid]="{{colors.primary.default.hex}}" +theme[cpu_end]="{{colors.error.default.hex}}" + +# Mem/Disk free meter +theme[free_start]="{{colors.secondary.default.hex}}" +theme[free_mid]="" +theme[free_end]="{{colors.secondary_container.default.hex}}" + +# Mem/Disk cached meter +theme[cached_start]="{{colors.tertiary.default.hex}}" +theme[cached_mid]="" +theme[cached_end]="{{colors.tertiary_container.default.hex}}" + +# Mem/Disk available meter +theme[available_start]="{{colors.primary.default.hex}}" +theme[available_mid]="" +theme[available_end]="{{colors.primary_container.default.hex}}" + +# Mem/Disk used meter +theme[used_start]="{{colors.error.default.hex}}" +theme[used_mid]="" +theme[used_end]="{{colors.error_container.default.hex}}" + +# Download graph colors +theme[download_start]="{{colors.secondary.default.hex}}" +theme[download_mid]="{{colors.primary.default.hex}}" +theme[download_end]="{{colors.tertiary.default.hex}}" + +# Upload graph colors +theme[upload_start]="{{colors.secondary.default.hex}}" +theme[upload_mid]="{{colors.primary.default.hex}}" +theme[upload_end]="{{colors.tertiary.default.hex}}" \ No newline at end of file diff --git a/config/matugen/templates/cava-colors.ini b/config/matugen/templates/cava-colors.ini new file mode 100644 index 0000000..f4813b2 --- /dev/null +++ b/config/matugen/templates/cava-colors.ini @@ -0,0 +1,19 @@ +[color] +background = 'default' +foreground = '{{colors.primary.default.hex}}' + +; gradient = 0 +gradient = 1 +gradient_color_1 = '{{colors.primary_container.default.hex}}' +gradient_color_2 = '{{colors.primary.default.hex}}' +gradient_color_3 = '{{colors.on_primary_container.default.hex}}' + +horizontal_gradient = 0 +; horizontal_gradient = 1 +horizontal_gradient_color_1 = '{{colors.primary_container.default.hex}}' +horizontal_gradient_color_2 = '{{colors.primary.default.hex}}' +horizontal_gradient_color_3 = '{{colors.on_primary_container.default.hex}}' +horizontal_gradient_color_4 = '{{colors.primary.default.hex}}' +horizontal_gradient_color_5 = '{{colors.primary_container.default.hex}}' + + diff --git a/config/matugen/templates/clipse_theme.json b/config/matugen/templates/clipse_theme.json new file mode 100644 index 0000000..ae9fdd7 --- /dev/null +++ b/config/matugen/templates/clipse_theme.json @@ -0,0 +1,28 @@ +{ + "useCustom": true, + "TitleFore": "{{colors.on_primary.default.hex}}", + "TitleBack": "{{colors.primary.default.hex}}", + "TitleInfo": "{{colors.tertiary.default.hex}}", + "NormalTitle": "{{colors.on_surface.default.hex}}", + "DimmedTitle": "{{colors.on_surface_variant.default.hex}}", + "SelectedTitle": "{{colors.tertiary.default.hex}}", + "NormalDesc": "{{colors.on_surface_variant.default.hex}}", + "DimmedDesc": "{{colors.on_surface_variant.default.hex}}", + "SelectedDesc": "{{colors.tertiary.default.hex}}", + "StatusMsg": "{{colors.secondary.default.hex}}", + "PinIndicatorColor": "{{colors.tertiary.default.hex}}", + "SelectedBorder": "{{colors.tertiary.default.hex}}", + "SelectedDescBorder": "{{colors.tertiary.default.hex}}", + "FilteredMatch": "{{colors.on_surface.default.hex}}", + "FilterPrompt": "{{colors.secondary.default.hex}}", + "FilterInfo": "{{colors.tertiary.default.hex}}", + "FilterText": "{{colors.on_surface.default.hex}}", + "FilterCursor": "{{colors.tertiary.default.hex}}", + "HelpKey": "{{colors.outline.default.hex}}", + "HelpDesc": "{{colors.on_surface_variant.default.hex}}", + "PageActiveDot": "{{colors.tertiary.default.hex}}", + "PageInactiveDot": "{{colors.on_surface_variant.default.hex}}", + "DividerDot": "{{colors.tertiary.default.hex}}", + "PreviewedText": "{{colors.on_surface.default.hex}}", + "PreviewBorder": "{{colors.tertiary.default.hex}}" +} diff --git a/config/matugen/templates/colors.css b/config/matugen/templates/colors.css new file mode 100644 index 0000000..f246856 --- /dev/null +++ b/config/matugen/templates/colors.css @@ -0,0 +1,7 @@ +/* +* Css Colors +* Generated with Matugen +*/ +<* for name, value in colors *> + @define-color {{name}} {{value.default.hex}}; +<* endfor *> diff --git a/config/matugen/templates/cosmic_postprocess.py b/config/matugen/templates/cosmic_postprocess.py new file mode 100755 index 0000000..825b1f1 --- /dev/null +++ b/config/matugen/templates/cosmic_postprocess.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python3 +import re, sys, pathlib + +def normalize_channels(text: str) -> str: + # Matches lines like: red: 255, or red: 64.0, + pattern = re.compile(r"(red|green|blue|alpha):\s*([0-9]+(?:\.[0-9]+)?)") + def repl(m): + channel = m.group(1) + value = float(m.group(2)) + # alpha stays either 255 or value; we will convert it to 1.0 if >1 and channel==alpha + if channel == 'alpha': + return f"{channel}: {1.0 if value > 1 else value}" + if value > 1: + return f"{channel}: {value/255.0}" + return m.group(0) + return pattern.sub(repl, text) + +def main(): + if len(sys.argv) < 2: + print("Usage: cosmic_postprocess.py ", file=sys.stderr) + sys.exit(1) + path = pathlib.Path(sys.argv[1]).expanduser() + data = path.read_text() + new = normalize_channels(data) + path.write_text(new) + +if __name__ == '__main__': + main() diff --git a/config/matugen/templates/cosmic_theme.ron b/config/matugen/templates/cosmic_theme.ron new file mode 100644 index 0000000..1ca23fa --- /dev/null +++ b/config/matugen/templates/cosmic_theme.ron @@ -0,0 +1,259 @@ +( + palette: Dark(( + name: "matugen-cosmic-dark", + bright_red: ( + red: {{ colors.error.default.red }}, + green: {{ colors.error.default.green }}, + blue: {{ colors.error.default.blue }}, + alpha: 255.0, + ), + bright_green: ( + red: {{ colors.tertiary.default.red }}, + green: {{ colors.tertiary.default.green }}, + blue: {{ colors.tertiary.default.blue }}, + alpha: 255.0, + ), + bright_orange: ( + red: {{ colors.secondary.default.red }}, + green: {{ colors.secondary.default.green }}, + blue: {{ colors.secondary.default.blue }}, + alpha: 255.0, + ), + gray_1: ( + red: {{ colors.surface_dim.default.red }}, + green: {{ colors.surface_dim.default.green }}, + blue: {{ colors.surface_dim.default.blue }}, + alpha: 255.0, + ), + gray_2: ( + red: {{ colors.surface.default.red }}, + green: {{ colors.surface.default.green }}, + blue: {{ colors.surface.default.blue }}, + alpha: 255.0, + ), + neutral_0: ( + red: 0.0, + green: 0.0, + blue: 0.0, + alpha: 1.0, + ), + neutral_1: ( + red: {{ colors.surface_dim.default.red }}, + green: {{ colors.surface_dim.default.green }}, + blue: {{ colors.surface_dim.default.blue }}, + alpha: 255.0, + ), + neutral_2: ( + red: {{ colors.surface.default.red }}, + green: {{ colors.surface.default.green }}, + blue: {{ colors.surface.default.blue }}, + alpha: 255.0, + ), + neutral_3: ( + red: {{ colors.surface_container_low.default.red }}, + green: {{ colors.surface_container_low.default.green }}, + blue: {{ colors.surface_container_low.default.blue }}, + alpha: 255.0, + ), + neutral_4: ( + red: {{ colors.surface_container.default.red }}, + green: {{ colors.surface_container.default.green }}, + blue: {{ colors.surface_container.default.blue }}, + alpha: 255.0, + ), + neutral_5: ( + red: {{ colors.surface_container_high.default.red }}, + green: {{ colors.surface_container_high.default.green }}, + blue: {{ colors.surface_container_high.default.blue }}, + alpha: 255.0, + ), + neutral_6: ( + red: {{ colors.surface_container_highest.default.red }}, + green: {{ colors.surface_container_highest.default.green }}, + blue: {{ colors.surface_container_highest.default.blue }}, + alpha: 255.0, + ), + neutral_7: ( + red: {{ colors.on_surface_variant.default.red }}, + green: {{ colors.on_surface_variant.default.green }}, + blue: {{ colors.on_surface_variant.default.blue }}, + alpha: 255.0, + ), + neutral_8: ( + red: {{ colors.on_surface.default.red }}, + green: {{ colors.on_surface.default.green }}, + blue: {{ colors.on_surface.default.blue }}, + alpha: 255.0, + ), + neutral_9: ( + red: {{ colors.surface_bright.default.red }}, + green: {{ colors.surface_bright.default.green }}, + blue: {{ colors.surface_bright.default.blue }}, + alpha: 255.0, + ), + neutral_10: ( + red: 1.0, + green: 1.0, + blue: 1.0, + alpha: 1.0, + ), + accent_blue: ( + red: {{ colors.primary.default.red }}, + green: {{ colors.primary.default.green }}, + blue: {{ colors.primary.default.blue }}, + alpha: 255.0, + ), + accent_indigo: ( + red: {{ colors.primary.default.red }}, + green: {{ colors.primary.default.green }}, + blue: {{ colors.primary.default.blue }}, + alpha: 255.0, + ), + accent_purple: ( + red: {{ colors.tertiary.default.red }}, + green: {{ colors.tertiary.default.green }}, + blue: {{ colors.tertiary.default.blue }}, + alpha: 255.0, + ), + accent_pink: ( + red: {{ colors.secondary.default.red }}, + green: {{ colors.secondary.default.green }}, + blue: {{ colors.secondary.default.blue }}, + alpha: 255.0, + ), + accent_red: ( + red: {{ colors.error.default.red }}, + green: {{ colors.error.default.green }}, + blue: {{ colors.error.default.blue }}, + alpha: 255.0, + ), + accent_orange: ( + red: {{ colors.secondary.default.red }}, + green: {{ colors.secondary.default.green }}, + blue: {{ colors.secondary.default.blue }}, + alpha: 255.0, + ), + accent_yellow: ( + red: {{ colors.tertiary.default.red }}, + green: {{ colors.tertiary.default.green }}, + blue: {{ colors.tertiary.default.blue }}, + alpha: 255.0, + ), + accent_green: ( + red: {{ colors.tertiary.default.red }}, + green: {{ colors.tertiary.default.green }}, + blue: {{ colors.tertiary.default.blue }}, + alpha: 255.0, + ), + accent_warm_grey: ( + red: {{ colors.on_surface_variant.default.red }}, + green: {{ colors.on_surface_variant.default.green }}, + blue: {{ colors.on_surface_variant.default.blue }}, + alpha: 255.0, + ), + ext_warm_grey: ( + red: {{ colors.outline.default.red }}, + green: {{ colors.outline.default.green }}, + blue: {{ colors.outline.default.blue }}, + alpha: 255.0, + ), + ext_orange: ( + red: {{ colors.secondary.default.red }}, + green: {{ colors.secondary.default.green }}, + blue: {{ colors.secondary.default.blue }}, + alpha: 255.0, + ), + ext_yellow: ( + red: {{ colors.tertiary.default.red }}, + green: {{ colors.tertiary.default.green }}, + blue: {{ colors.tertiary.default.blue }}, + alpha: 255.0, + ), + ext_blue: ( + red: {{ colors.primary.default.red }}, + green: {{ colors.primary.default.green }}, + blue: {{ colors.primary.default.blue }}, + alpha: 255.0, + ), + ext_purple: ( + red: {{ colors.tertiary.default.red }}, + green: {{ colors.tertiary.default.green }}, + blue: {{ colors.tertiary.default.blue }}, + alpha: 255.0, + ), + ext_pink: ( + red: {{ colors.secondary.default.red }}, + green: {{ colors.secondary.default.green }}, + blue: {{ colors.secondary.default.blue }}, + alpha: 255.0, + ), + ext_indigo: ( + red: {{ colors.primary.default.red }}, + green: {{ colors.primary.default.green }}, + blue: {{ colors.primary.default.blue }}, + alpha: 255.0, + ), + )), + spacing: ( + space_none: 0, + space_xxxs: 4, + space_xxs: 8, + space_xs: 12, + space_s: 16, + space_m: 24, + space_l: 32, + space_xl: 48, + space_xxl: 64, + space_xxxl: 128, + ), + corner_radii: ( + radius_0: (0.0, 0.0, 0.0, 0.0), + radius_xs: (4.0, 4.0, 4.0, 4.0), + radius_s: (8.0, 8.0, 8.0, 8.0), + radius_m: (16.0, 16.0, 16.0, 16.0), + radius_l: (32.0, 32.0, 32.0, 32.0), + radius_xl: (160.0, 160.0, 160.0, 160.0), + ), + neutral_tint: Some(( + red: {{ colors.surface_container_high.default.red }}, + green: {{ colors.surface_container_high.default.green }}, + blue: {{ colors.surface_container_high.default.blue }}, + )), + bg_color: Some(( + red: {{ colors.surface.default.red }}, + green: {{ colors.surface.default.green }}, + blue: {{ colors.surface.default.blue }}, + alpha: 0.6, + )), + primary_container_bg: None, + secondary_container_bg: None, + text_tint: Some(( + red: {{ colors.on_surface.default.red }}, + green: {{ colors.on_surface.default.green }}, + blue: {{ colors.on_surface.default.blue }}, + )), + accent: Some(( + red: {{ colors.primary.default.red }}, + green: {{ colors.primary.default.green }}, + blue: {{ colors.primary.default.blue }}, + )), + success: Some(( + red: {{ colors.tertiary.default.red }}, + green: {{ colors.tertiary.default.green }}, + blue: {{ colors.tertiary.default.blue }}, + )), + warning: Some(( + red: {{ colors.secondary.default.red }}, + green: {{ colors.secondary.default.green }}, + blue: {{ colors.secondary.default.blue }}, + )), + destructive: Some(( + red: {{ colors.error.default.red }}, + green: {{ colors.error.default.green }}, + blue: {{ colors.error.default.blue }}, + )), + is_frosted: true, + gaps: (0, 10), + active_hint: 2, + window_hint: None, +) diff --git a/config/matugen/templates/dunstrc-colors b/config/matugen/templates/dunstrc-colors new file mode 100644 index 0000000..8d6d085 --- /dev/null +++ b/config/matugen/templates/dunstrc-colors @@ -0,0 +1,75 @@ +[global] +monitor = 0 +follow = none +width = 400 +height = 400 +origin = top-center +offset = 10x20 +scale = 0 +notification_limit = 0 +progress_bar = true +progress_bar_height = 10 +progress_bar_frame_width = 1 +progress_bar_min_width = 150 +progress_bar_max_width = 300 +indicate_hidden = yes +transparency = 0 +separator_height = 2 +padding = 8 +horizontal_padding = 8 +text_icon_padding = 0 +frame_width = 1 +sort = yes +font = FiraCode 12 +line_height = 0 +markup = full +format = "%s\n%b" +alignment = left +vertical_alignment = center +show_age_threshold = 60 +ellipsize = middle +ignore_newline = no +stack_duplicates = true +hide_duplicate_count = false +show_indicators = yes +icon_position = left +min_icon_size = 0 +max_icon_size = 32 +icon_path = /usr/share/icons/gnome/16x16/status/:/usr/share/icons/gnome/16x16/devices/ +icon_path = /usr/share/icons/Papirus-Dark/48x48/actions/:/usr/share/icons/Papirus-Dark/48x48/apps/:/usr/share/icons/Papirus-Dark/48x48/devices/:/usr/share/icons/Papirus-Dark/48x48/emblems/:/usr/share/icons/Papirus-Dark/48x48/emotes/:/usr/share/icons/Papirus-Dark/48x48/mimetypes/:/usr/share/icons/Papirus-Dark/48x48/places/:/usr/share/icons/Papirus-Dark/48x48/status/ +sticky_history = yes +history_length = 20 +browser = /usr/bin/xdg-open +always_run_script = true +title = Dunst +class = Dunst +corner_radius = 8 +ignore_dbusclose = false +force_xwayland = false +force_xinerama = false +mouse_left_click = close_current +mouse_middle_click = do_action, close_current +mouse_right_click = close_all +separator_color = frame +frame_color = "{{colors.primary.default.hex}}" +highlight = "{{colors.primary.default.hex}}" +separator_color= "{{colors.outline.default.hex}}" +[experimental] +per_monitor_dpi = false +[urgency_low] +timeout = 3 +background = "{{colors.surface.default.hex}}" +foreground = "{{colors.on_surface.default.hex}}" +highlight = "{{colors.primary_container.default.hex}}" +[urgency_normal] +timeout = 6 +background = "{{colors.surface.default.hex}}" +foreground = "{{colors.on_surface.default.hex}}" +highlight = "{{colors.primary_container.default.hex}}" +[urgency_critical] +timeout = 0 +background = "{{colors.surface.default.hex}}" +foreground = "{{colors.on_surface.default.hex}}" +highlight = "{{colors.error.default.hex}}" + + diff --git a/config/matugen/templates/firefox-colors.css b/config/matugen/templates/firefox-colors.css new file mode 100644 index 0000000..ead3492 --- /dev/null +++ b/config/matugen/templates/firefox-colors.css @@ -0,0 +1,9 @@ +:root { +<* for name, value in colors *> + --{{name}}: {{value.default.hex}}; +<* endfor *> + +<* for name, value in colors *> + --{{name}}_rgb: {{value.default.red}} {{value.default.green}} {{value.default.blue}}; +<* endfor *> +} diff --git a/config/matugen/templates/foot-apply-colors.sh b/config/matugen/templates/foot-apply-colors.sh new file mode 100644 index 0000000..2807e9a --- /dev/null +++ b/config/matugen/templates/foot-apply-colors.sh @@ -0,0 +1,42 @@ +#!/bin/ bash +# Применить цвета через OSC ко всем foot-инстансам +# Согласно foot-ctlseqs(7) + +for pts in /dev/pts/[0-9]*; do + # OSC 10: default foreground (foreground) + printf '\e]10;#{{colors.on_surface.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + + # OSC 11: default background (background) + printf '\e]11;#{{colors.surface.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + + # OSC 12: cursor color (первое значение из cursor в foot.ini) + printf '\e]12;#{{colors.primary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + + # OSC 17: selection background + printf '\e]17;#{{colors.primary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + + # OSC 19: selection foreground + printf '\e]19;#{{colors.on_primary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + + # OSC 4: palette colors 0-15 (regular0-7, bright0-7) + printf '\e]4;0;#{{colors.surface_container_lowest.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;1;#{{colors.error.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;2;#{{colors.tertiary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;3;#{{colors.secondary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;4;#{{colors.primary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;5;#{{colors.secondary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;6;#{{colors.tertiary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;7;#{{colors.on_surface_variant.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;8;#{{colors.surface_container_high.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;9;#{{colors.on_error_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;10;#{{colors.on_tertiary_fixed.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;11;#{{colors.on_secondary_fixed.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;12;#{{colors.primary_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;13;#{{colors.inverse_primary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;14;#{{colors.on_tertiary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;15;#{{colors.inverse_on_surface.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + + # Дополнительные индексы палитры (16, 17), если используются + printf '\e]4;16;#{{colors.tertiary.default.hex_stripped}}\007' >>"$pts" 2>/dev/null + printf '\e]4;17;#{{colors.error_container.default.hex_stripped}}\007' >>"$pts" 2>/dev/null +done diff --git a/config/matugen/templates/foot.ini b/config/matugen/templates/foot.ini new file mode 100644 index 0000000..ded1fab --- /dev/null +++ b/config/matugen/templates/foot.ini @@ -0,0 +1,28 @@ +[colors-dark] +background={{colors.surface.default.hex_stripped}} +foreground={{colors.on_surface.default.hex_stripped}} +selection-background={{colors.primary_container.default.hex_stripped}} +selection-foreground={{colors.on_primary_container.default.hex_stripped}} +regular0={{colors.surface_container_lowest.default.hex_stripped}} +regular1={{colors.error.default.hex_stripped}} +regular2={{colors.tertiary.default.hex_stripped}} +regular3={{colors.secondary.default.hex_stripped}} +regular4={{colors.primary.default.hex_stripped}} +regular5={{colors.secondary_container.default.hex_stripped}} +regular6={{colors.tertiary_container.default.hex_stripped}} +regular7={{colors.on_surface_variant.default.hex_stripped}} +bright0={{colors.surface_container_high.default.hex_stripped}} +bright1={{colors.on_error_container.default.hex_stripped}} +bright2={{colors.on_tertiary_fixed.default.hex_stripped}} +bright3={{colors.on_secondary_fixed.default.hex_stripped}} +bright4={{colors.primary_container.default.hex_stripped}} +bright5={{colors.inverse_primary.default.hex_stripped}} +bright6={{colors.on_tertiary.default.hex_stripped}} +bright7={{colors.inverse_on_surface.default.hex_stripped}} +cursor={{colors.surface.default.hex_stripped}} {{colors.primary.default.hex_stripped}} +16={{colors.tertiary.default.hex_stripped}} +17={{colors.error_container.default.hex_stripped}} +search-box-no-match={{colors.surface_container.default.hex_stripped}} {{colors.error.default.hex_stripped}} +search-box-match={{colors.surface_container_high.default.hex_stripped}} {{colors.primary.default.hex_stripped}} +jump-labels={{colors.surface_container.default.hex_stripped}} {{colors.secondary.default.hex_stripped}} +urls={{colors.primary.default.hex_stripped}} diff --git a/config/matugen/templates/fuzzel.ini b/config/matugen/templates/fuzzel.ini new file mode 100644 index 0000000..68756b1 --- /dev/null +++ b/config/matugen/templates/fuzzel.ini @@ -0,0 +1,15 @@ +# Fuzzel Colors +# Generated with Matugen + +[colors] +background={{colors.background.default.hex_stripped}}ff +text={{colors.on_surface.default.hex_stripped}}ff +prompt={{colors.secondary.default.hex_stripped}}ff +placeholder={{colors.tertiary.default.hex_stripped}}ff +input={{colors.primary.default.hex_stripped}}ff +match={{colors.tertiary.default.hex_stripped}}ff +selection={{colors.primary.default.hex_stripped}}ff +selection-text={{colors.on_surface.default.hex_stripped}}ff +selection-match={{colors.on_primary.default.hex_stripped}}ff +counter={{colors.secondary.default.hex_stripped}}ff +border={{colors.primary.default.hex_stripped}}ff \ No newline at end of file diff --git a/config/matugen/templates/ghostty b/config/matugen/templates/ghostty new file mode 100644 index 0000000..a868c67 --- /dev/null +++ b/config/matugen/templates/ghostty @@ -0,0 +1,22 @@ +background = {{colors.background.default.hex}} +foreground = {{colors.on_surface.default.hex}} +cursor-color = {{colors.primary.default.hex}} +cursor-text = {{colors.on_primary.default.hex}} +selection-background = {{colors.secondary_container.default.hex}} +selection-foreground = {{colors.on_secondary_container.default.hex}} +palette = 0={{colors.surface_container_high.default.hex}} +palette = 1={{colors.error.default.hex}} +palette = 2={{colors.primary.default.hex}} +palette = 3={{colors.tertiary.default.hex}} +palette = 4={{colors.secondary.default.hex}} +palette = 5={{colors.primary_fixed.default.hex}} +palette = 6={{colors.secondary_fixed.default.hex}} +palette = 7={{colors.on_surface_variant.default.hex}} +palette = 8={{colors.outline.default.hex}} +palette = 9={{colors.error_container.default.hex}} +palette = 10={{colors.primary_container.default.hex}} +palette = 11={{colors.tertiary_container.default.hex}} +palette = 12={{colors.secondary_container.default.hex}} +palette = 13={{colors.inverse_primary.default.hex}} +palette = 14={{colors.outline_variant.default.hex}} +palette = 15={{colors.on_surface.default.hex}} diff --git a/config/matugen/templates/gtk-colors.css b/config/matugen/templates/gtk-colors.css new file mode 100644 index 0000000..64abe77 --- /dev/null +++ b/config/matugen/templates/gtk-colors.css @@ -0,0 +1,23 @@ +/* +* GTK Colors +* Generated with Matugen +*/ + +@define-color accent_color {{colors.primary_fixed_dim.default.hex}}; +@define-color accent_fg_color {{colors.on_primary_fixed.default.hex}}; +@define-color accent_bg_color {{colors.primary_fixed_dim.default.hex}}; +@define-color window_bg_color {{colors.surface_dim.default.hex}}; +@define-color window_fg_color {{colors.on_surface.default.hex}}; +@define-color headerbar_bg_color {{colors.surface_dim.default.hex}}; +@define-color headerbar_fg_color {{colors.on_surface.default.hex}}; +@define-color popover_bg_color {{colors.surface_dim.default.hex}}; +@define-color popover_fg_color {{colors.on_surface.default.hex}}; +@define-color view_bg_color {{colors.surface.default.hex}}; +@define-color view_fg_color {{colors.on_surface.default.hex}}; +@define-color card_bg_color {{colors.surface.default.hex}}; +@define-color card_fg_color {{colors.on_surface.default.hex}}; +@define-color sidebar_bg_color @window_bg_color; +@define-color sidebar_fg_color @window_fg_color; +@define-color sidebar_border_color @window_bg_color; +@define-color sidebar_backdrop_color @window_bg_color; + diff --git a/config/matugen/templates/helix.toml b/config/matugen/templates/helix.toml new file mode 100644 index 0000000..0e5502c --- /dev/null +++ b/config/matugen/templates/helix.toml @@ -0,0 +1,128 @@ +# Helix Theme Template using Material You with improved contrast + +# --- Syntax Elements --- + +"attribute" = "{{ colors.primary.default.hex }}" +"type" = "{{ colors.secondary.default.hex }}" +"type.enum.variant" = "{{ colors.secondary.default.hex }}" +"constructor" = "{{ colors.primary_fixed.default.hex }}" + +"constant" = "{{ colors.tertiary.default.hex }}" +"constant.character" = "{{ colors.tertiary.default.hex }}" +"constant.character.escape" = "{{ colors.tertiary_container.default.hex }}" + +"string" = "{{ colors.primary.default.hex }}" +"string.regexp" = "{{ colors.tertiary_container.default.hex }}" +"string.special" = "{{ colors.primary_fixed.default.hex }}" +"string.special.symbol" = "{{ colors.error.default.hex }}" + +"comment" = { fg = "{{ colors.on_surface_variant.default.hex }}", modifiers = ["italic"] } + +"variable" = "{{ colors.on_background.default.hex }}" +"variable.parameter" = { fg = "{{ colors.error_container.default.hex }}", modifiers = ["italic"] } +"variable.builtin" = "{{ colors.error.default.hex }}" +"variable.other.member" = "{{ colors.primary.default.hex }}" + +"label" = "{{ colors.primary_fixed.default.hex }}" + +"punctuation" = "{{ colors.on_surface_variant.default.hex }}" +"punctuation.special" = "{{ colors.secondary.default.hex }}" + +"keyword" = "{{ colors.primary.default.hex }}" +"keyword.control.conditional" = { fg = "{{ colors.primary.default.hex }}", modifiers = ["italic"] } + +"operator" = "{{ colors.secondary.default.hex }}" + +"function" = "{{ colors.primary.default.hex }}" +"function.macro" = "{{ colors.primary_container.default.hex }}" + +"tag" = "{{ colors.primary.default.hex }}" +"namespace" = { fg = "{{ colors.secondary.default.hex }}", modifiers = ["italic"] } + +"special" = "{{ colors.primary.default.hex }}" + +# --- Markup --- + +"markup.heading.1" = "{{ colors.error.default.hex }}" +"markup.heading.2" = "{{ colors.primary.default.hex }}" +"markup.heading.3" = "{{ colors.secondary.default.hex }}" +"markup.heading.4" = "{{ colors.tertiary.default.hex }}" +"markup.heading.5" = "{{ colors.primary_fixed.default.hex }}" +"markup.heading.6" = "{{ colors.on_primary_fixed_variant.default.hex }}" + +"markup.list" = "{{ colors.secondary.default.hex }}" +"markup.list.unchecked" = "{{ colors.on_surface_variant.default.hex }}" +"markup.list.checked" = "{{ colors.primary_fixed.default.hex }}" + +"markup.bold" = { fg = "{{ colors.primary.default.hex }}", modifiers = ["bold"] } +"markup.italic" = { fg = "{{ colors.secondary.default.hex }}", modifiers = ["italic"] } + +"markup.link.url" = { fg = "{{ colors.primary.default.hex }}", modifiers = ["italic", "underlined"] } +"markup.link.text" = "{{ colors.primary_fixed.default.hex }}" +"markup.link.label" = "{{ colors.tertiary.default.hex }}" +"markup.raw" = "{{ colors.on_tertiary_container.default.hex }}" +"markup.quote" = "{{ colors.tertiary_container.default.hex }}" + +# --- Diff --- + +"diff.plus" = "{{ colors.tertiary.default.hex }}" +"diff.minus" = "{{ colors.error.default.hex }}" +"diff.delta" = "{{ colors.primary.default.hex }}" + +# --- UI Elements --- + +"ui.background" = { fg = "{{ colors.on_background.default.hex }}", bg = "none" } + +"ui.linenr" = { fg = "{{ colors.on_surface_variant.default.hex }}" } +"ui.linenr.selected" = { fg = "{{ colors.primary_fixed.default.hex }}" } + +"ui.statusline" = { fg = "{{ colors.on_primary_container.default.hex }}", bg = "none" } +"ui.statusline.inactive" = { fg = "{{ colors.on_surface_variant.default.hex }}", bg = "none" } +"ui.statusline.normal" = { fg = "{{ colors.background.default.hex }}", bg = "none", modifiers = ["bold"] } +"ui.statusline.insert" = { fg = "{{ colors.background.default.hex }}", bg = "none", modifiers = ["bold"] } +"ui.statusline.select" = { fg = "{{ colors.background.default.hex }}", bg = "none", modifiers = ["bold"] } + +"ui.popup" = { fg = "{{ colors.on_surface.default.hex }}", bg = "none" } +"ui.window" = { fg = "{{ colors.on_surface_variant.default.hex }}" } +"ui.help" = { fg = "{{ colors.on_surface_variant.default.hex }}", bg = "none" } + +"ui.bufferline" = { fg = "{{ colors.on_surface_variant.default.hex }}", bg = "none" } +"ui.bufferline.active" = { fg = "{{ colors.on_primary.default.hex }}", bg = "{{ colors.primary.default.hex }}", underline = { color = "{{ colors.primary.default.hex }}", style = "line" } } +"ui.bufferline.background" = { bg = "none" } + +"ui.text" = "{{ colors.on_background.default.hex }}" +"ui.text.focus" = { fg = "{{ colors.primary.default.hex }}", bg = "none", modifiers = ["bold"] } +"ui.text.inactive" = { fg = "{{ colors.on_surface_variant.default.hex }}" } +"ui.text.directory" = { fg = "{{ colors.primary.default.hex }}" } + +"ui.virtual" = "{{ colors.on_surface_variant.default.hex }}" +"ui.virtual.ruler" = { bg = "none" } +"ui.virtual.indent-guide" = "{{ colors.surface_container_low.default.hex }}" +"ui.virtual.inlay-hint" = { fg = "{{ colors.on_surface_variant.default.hex }}", bg = "none" } +"ui.virtual.jump-label" = { fg = "{{ colors.primary_container.default.hex }}", modifiers = ["bold"] } + +"ui.selection" = { bg = "{{ colors.outline_variant.default.hex }}" } + +"ui.cursor" = { fg = "{{ colors.background.default.hex }}", bg = "{{ colors.on_primary_container.default.hex }}" } +"ui.cursor.primary" = { fg = "{{ colors.background.default.hex }}", bg = "{{ colors.primary_fixed.default.hex }}" } +"ui.cursor.match" = { fg = "{{ colors.on_primary_container.default.hex }}", modifiers = ["bold"] } + +"ui.highlight" = { bg = "{{ colors.secondary_container.default.hex }}", modifiers = ["bold"] } + +"ui.menu" = { fg = "{{ colors.on_surface.default.hex }}", bg = "none" } +"ui.menu.selected" = { fg = "{{ colors.primary.default.hex }}", bg = "none", modifiers = ["bold"] } + +# --- Diagnostics --- + +"diagnostic.error" = { fg = "{{ colors.error.default.hex }}", underline = { color = "{{ colors.error.default.hex }}", style = "curl" } } +"diagnostic.warning" = { fg = "{{ colors.secondary.default.hex }}", underline = { color = "{{ colors.secondary.default.hex }}", style = "curl" } } +"diagnostic.info" = { fg = "{{ colors.tertiary.default.hex }}", underline = { color = "{{ colors.tertiary.default.hex }}", style = "curl" } } +"diagnostic.hint" = { fg = "{{ colors.tertiary_container.default.hex }}", underline = { color = "{{ colors.tertiary_container.default.hex }}", style = "curl" } } +"diagnostic.unnecessary" = { modifiers = ["dim"] } + +# --- Fallbacks (non-template usage) --- + +error = "{{ colors.error.default.hex }}" +warning = "{{ colors.tertiary.default.hex }}" +info = "{{ colors.primary.default.hex }}" +hint = "{{ colors.secondary.default.hex }}" diff --git a/config/matugen/templates/heroic.css b/config/matugen/templates/heroic.css new file mode 100644 index 0000000..fb505f3 --- /dev/null +++ b/config/matugen/templates/heroic.css @@ -0,0 +1,51 @@ +body.matugen { + --accent: {{colors.tertiary.default.hex}}; + --accent-overlay: {{colors.inverse_primary.default.hex}}; + + --primary: {{colors.primary.default.hex}}; + --primary-hover: {{colors.primary_container.default.hex}}; + --navbar-accent: var(--primary); + + --background: {{colors.background.default.hex}}; + --body-background: {{colors.surface.default.hex}}; + --navbar-background: {{colors.surface_container.default.hex}}; + + --background-darker: var(--background); + --current-background: var(--body-background); + --navbar-active-background: {{colors.surface_container_high.default.hex}}; + + --gradient-body-background: linear-gradient( + 90deg, + var(--background-darker) -32px, + var(--body-background) 64px, + var(--body-background) 100% + ); + + --input-background: var(--navbar-background); + --modal-background: var(--body-background); + --modal-border: var(--body-background); + + --success: {{colors.tertiary.default.hex}}; + --success-hover: {{colors.tertiary_container.default.hex}}; + --danger: {{colors.error.default.hex}}; + --danger-hover: {{colors.error_container.default.hex}}; + + --text-default: {{colors.on_surface.default.hex}}; + --text-title: {{colors.on_surface.default.hex}}; + --text-secondary: {{colors.on_surface_variant.default.hex}}; + --text-tertiary: {{colors.outline.default.hex}}; + --text-hover: {{colors.primary.default.hex}}; + + --text-title: {{colors.on_surface.default.hex}}; + --action-icon: {{colors.on_surface.default.hex}}; + --action-icon-hover: {{colors.primary.default.hex}}; + --action-icon-active: {{colors.primary_container.default.hex}}; + --icons-background: {{colors.surface_variant.default.hex}}; + --icon-disabled: {{colors.on_surface_variant.default.hex}}; + + --anticheat-denied: var(--danger); + --anticheat-broken: var(--accent); + --anticheat-running: var(--primary); + --anticheat-supported: var(--success); + --anticheat-planned: {{colors.secondary.default.hex}}; +} diff --git a/config/matugen/templates/hyprland-colors.conf b/config/matugen/templates/hyprland-colors.conf new file mode 100644 index 0000000..dd6403a --- /dev/null +++ b/config/matugen/templates/hyprland-colors.conf @@ -0,0 +1,4 @@ +$image = {{image}} +<* for name, value in colors *> +${{name}} = rgba({{value.default.hex_stripped}}ff) +<* endfor *> diff --git a/config/matugen/templates/hyprlock.conf b/config/matugen/templates/hyprlock.conf new file mode 100644 index 0000000..b0f257a --- /dev/null +++ b/config/matugen/templates/hyprlock.conf @@ -0,0 +1,18 @@ +# ┳┳┓┏┓┏┳┓┳┳┏┓┏┓┳┓ ┓┏┓┏┏┓┳┓┓ ┏┓┏┓┓┏┓ +# ┃┃┃┣┫ ┃ ┃┃┃┓┣ ┃┃━━┣┫┗┫┃┃┣┫┃ ┃┃┃ ┃┫ +# ┛ ┗┛┗ ┻ ┗┛┗┛┗┛┛┗ ┛┗┗┛┣┛┛┗┗┛┗┛┗┛┛┗┛ +# + + + + +# Image Path +$image = {{image}} + +# An alpha background +$surface_alpha = rgba({{colors.surface.default.hex_stripped}}4d) + +# All Colors +<* for name, value in colors *> +${{name}} = rgba({{value.default.hex_stripped}}ff) +<* endfor *> diff --git a/config/matugen/templates/hyprtoolkit.conf b/config/matugen/templates/hyprtoolkit.conf new file mode 100644 index 0000000..bbba701 --- /dev/null +++ b/config/matugen/templates/hyprtoolkit.conf @@ -0,0 +1,7 @@ +background = 0xff{{colors.surface.default.hex_stripped}} +base = 0xff{{colors.surface_container.default.hex_stripped}} +text = 0xff{{colors.on_surface.default.hex_stripped}} +alternate_base = 0xff{{colors.surface_container_high.default.hex_stripped}} +bright_text = 0xff{{colors.on_surface_variant.default.hex_stripped}} +accent = 0xff{{colors.primary.default.hex_stripped}} +accent_secondary = 0xff{{colors.secondary.default.hex_stripped}} diff --git a/config/matugen/templates/hyprwave.css b/config/matugen/templates/hyprwave.css new file mode 100644 index 0000000..edc47c4 --- /dev/null +++ b/config/matugen/templates/hyprwave.css @@ -0,0 +1,557 @@ +/* ======================================== + HyprWave - Matugen Theme + ======================================== */ + +:root { + /* Background Colors - Deep Black */ + --bg-primary: {{colors.surface.default.hex}}; + --bg-secondary: {{colors.surface.default.hex}}; + --bg-album-cover: {{colors.on_secondary_fixed.default.hex}}; + --bg-album-secondary: {{colors.on_secondary_fixed.default.hex}}; + + /* Button Colors - Default (Prev/Next) - Soft White */ + --btn-default: {{colors.primary.default.hex}}; + --btn-default-secondary: {{colors.primary.default.hex}}; + + --btn-default-active: {{colors.inverse_primary.default.hex}}; + --btn-default-hover: {{colors.primary_container.default.hex}}; + --btn-default-hover-secondary: {{colors.primary_container.default.hex}}; + + /* Button Colors - Play/Pause - Bright White */ + --btn-play: {{colors.primary.default.hex}}; + --btn-play-secondary: {{colors.primary.default.hex}}; + --btn-play-hover: {{colors.primary_container.default.hex}}; + --btn-play-hover-secondary: {{colors.primary_container.default.hex}}; + --btn-play-active: {{colors.inverse_primary.default.hex}}; + --btn-play-active-secondary: {{colors.inverse_primary.default.hex}}; + + /* Button Colors - Expand - Cool White */ + --btn-expand: {{colors.primary.default.hex}}; + --btn-expand-secondary: {{colors.primary.default.hex}}; + --btn-expand-hover: {{colors.primary_container.default.hex}}; + --btn-expand-hover-secondary: {{colors.primary_container.default.hex}}; + --btn-expand-active: {{colors.inverse_primary.default.hex}}; + --btn-expand-active-secondary: {{colors.inverse_primary.default.hex}}; + + /* Progress Bar Colors */ + --progress-bg: {{colors.inverse_on_surface.default.hex}}; + --progress-fill-start: #ff0100; + --progress-fill-end: {{colors.primary.default.hex}}; + + /* Slider Handle Colors */ + --handle-color: {{colors.primary.default.hex}}; + --handle-hover: {{colors.primary.default.hex}}; + --handle-border: {{colors.primary.default.hex}}; + --handle-shadow: {{colors.primary.default.hex}}; + + /* Text Colors - Bright white on pure black */ + --text-primary: {{colors.primary.default.hex}}; + --text-secondary: {{colors.primary_container.default.hex}}; + --text-tertiary: {{colors.primary_container.default.hex}}; + --text-muted: {{colors.primary.default.hex}}; + + /* Border Colors */ + --border-primary: {{colors.primary.default.hex}}; + --border-button: rgba(100, 100, 100, 0); + --border-button-hover: rgba(120, 120, 120, 0); + --border-play: rgba(255, 255, 255, 0); + --border-play-hover: rgba(255, 255, 255, 0); + --border-expand: rgba(235, 235, 240, 0); + --border-expand-hover: rgba(245, 245, 250, 0); + + /* Shadow Colors */ + --shadow-default: rgba(0, 0, 0, 0); + --shadow-button: rgba(0, 0, 0, 0); + --shadow-play: rgba(255, 255, 255, 0); + --shadow-play-hover: rgba(255, 255, 255, 0); + --shadow-expand: rgba(235, 235, 240, 0); + --shadow-expand-hover: rgba(245, 245, 250, 0); + --shadow-focus: rgba(255, 255, 255, 0); + + /* Spacing & Sizes */ + --border-radius-container: 20px; + --border-radius-section: 20px; + --border-radius-album: 4px; + --border-radius-button: 50%; + --border-radius-progress: 4px; + + --padding-container: 20px; + --padding-section: 20px; +} + +/* Visualizer bars - pure white with strong glow */ + +/* ======================================== + Base Styles + ======================================== */ + +/* GTK4 transparent window - CRITICAL for compositor transparency */ +window { + background-color: transparent; +} + +/* Ensure ALL window-level elements are transparent */ + + +/* Main container - transparent */ +.main-container { + background: transparent; + min-height: 500px; + min-width: 500px; +} + +/* ======================================== + Control Container (Vertical Bar) + ======================================== */ + +.control-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + border: 4px solid var(--border-primary); + padding: var(--padding-container); + margin: 0; +} + +/* ======================================== + Control Container (Horizontal Bar) + For Top/Bottom Layouts + ======================================== */ + +.control-container-horizontal { + /* Match the vertical style exactly for consistency */ + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + /* Keeps the pill shape */ + border: 4px solid var(--border-primary); + + /* Horizontal padding is critical here to prevent buttons + from touching the rounded edges */ + padding: 8px 24px; + margin: 0; +} + +/* ======================================== + Expanded Section (Album Details Card) + ======================================== */ + +.expanded-section { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: var(--padding-section); + margin: 0; + margin-top: 4px; + /* Reduced spacing from control bar */ + + +} + +/* ======================================== + Expanded Section (Horizontal Layout) + For Top/Bottom Layouts + ======================================== */ + +.expanded-section-horizontal { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + + + /* Slightly different padding/margin to look good below/above the bar */ + padding: var(--padding-section); + margin-top: 2px; + /* Adds gap between control bar and this panel */ + margin-bottom: 2px; + + /* Ensure it doesn't get too squeezed */ + min-width: 300px; +} + +/* Album cover */ +.album-cover { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 4px solid var(--border-button); + box-shadow: 0 4px 16px var(--shadow-button); +} + +/* ======================================== + Text Styles + ======================================== */ + +/* Source label (e.g., "Spotify") */ +.source-label { + color: var(--text-muted); + font-size: 11px; + font-weight: 500; + margin-top: 8px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +/* Track title */ +.track-title { + color: var(--text-primary); + font-size: 14px; + font-weight: 600; + margin-top: 4px; +} + +/* Artist label */ +.artist-label { + color: var(--text-secondary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* Time remaining */ +.time-remaining { + color: var(--text-tertiary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* ======================================== + Progress Bar - FIXED FOR GTK4 + ======================================== */ + +.track-progress { + min-height: 4px; + margin-top: 8px; + margin-bottom: 4px; +} + +/* The background track */ +.track-progress trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* The filled progress portion - GTK4 specific */ +.track-progress progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* GTK4 also needs this for the fill bar to show */ +progressbar trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +progressbar progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* ======================================== + Control Buttons - FIXED ROUNDED SHAPE + ======================================== */ + +/* All control buttons - base styles */ +.control-button { + padding: 0; + + /* Add margin to compensate for removed border */ + margin: 1.5px; + /* Same as the old border width */ + + min-width: 44px; + min-height: 44px; + + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + + border: none; + box-shadow: + inset 0 0 0 1.5px var(--border-button), + 0 4px 16px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.2); + + border-radius: 50%; +} + +.control-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + box-shadow: + 0 6px 20px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.25); + transform: translateY(-1px); +} + +.control-button:active { + transform: scale(0.96); + box-shadow: + 0 2px 8px var(--shadow-button), + inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +/* ======================================== + Play/Pause Button (Blue) + ======================================== */ + +.play-button { + background: linear-gradient(135deg, var(--btn-play), var(--btn-play-secondary)); + border-color: var(--border-play); + box-shadow: + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.play-button:hover { + background: linear-gradient(135deg, var(--btn-play-hover), var(--btn-play-hover-secondary)); + border-color: var(--border-play-hover); + box-shadow: + 0 6px 20px var(--shadow-play-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.play-button:active { + background: linear-gradient(135deg, var(--btn-play-active), var(--btn-play-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-play), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Expand Button (Purple) + ======================================== */ + +.expand-button { + background: linear-gradient(135deg, var(--btn-expand), var(--btn-expand-secondary)); + border-color: var(--border-expand); + box-shadow: + 0 4px 16px var(--shadow-expand), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.expand-button:hover { + background: linear-gradient(135deg, var(--btn-expand-hover), var(--btn-expand-hover-secondary)); + border-color: var(--border-expand-hover); + box-shadow: + 0 6px 20px var(--shadow-expand-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.expand-button:active { + background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-expand), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Previous/Next Buttons + ======================================== */ + +.prev-button, +.next-button { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); +} + +.prev-button:hover, +.next-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); +} + +/* ======================================== + Focus & Accessibility + ======================================== */ + +button { + outline: none; +} + +button:focus { + outline: none; + box-shadow: + 0 0 0 3px var(--shadow-focus), + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +/* ======================================== + Notification Styles + ======================================== */ + +.notification-window { + background: transparent; +} + +.notification-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 10px 12px; + /* Reduced from 12px to 10px vertical padding */ + min-width: 280px; + /* Reduced from 320px */ + max-width: 300px; + /* Added max-width */ +} + +.notification-album { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 4px solid var(--border-button); + margin: 5px; +} + +.notification-header { + color: var(--text-muted); + font-size: 10px; + /* Reduced from 11px */ + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 6px; + /* Reduced from 8px */ +} + +.notification-song { + color: var(--text-primary); + font-size: 13px; + /* Reduced from 14px */ + font-weight: 600; + line-height: 1.2; + /* Added for tighter spacing */ +} + +.notification-artist { + color: var(--text-secondary); + font-size: 11px; + /* Reduced from 12px */ + font-weight: 500; + line-height: 1.2; + /* Added for tighter spacing */ +} + +/* ======================================== + Volume Control Styles + ======================================== */ + +.volume-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 12px; + margin: 0px; +} + +.volume-icon { + min-width: 20px; + min-height: 20px; +} + +.volume-percentage { + color: var(--text-primary); + font-size: 13px; + font-weight: 600; + min-width: 40px; +} + +/* Volume slider - similar to progress bar but with different colors */ +.volume-slider { + min-height: 24px; + min-width: 24px; +} + +/* The background track */ +.volume-slider trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The filled portion */ +.volume-slider progress { + background: linear-gradient(90deg, var(--btn-default), var(--btn-default-secondary)); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The slider handle */ +.volume-slider slider { + min-height: 16px; + min-width: 16px; + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + border: 2px solid var(--border-button); + border-radius: 50%; + +} + +.volume-slider slider:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + transform: scale(1.1); +} + +.volume-slider slider:active { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + transform: scale(0.95); +} + +/* GTK4 specific for vertical sliders */ +.volume-slider.vertical trough { + min-width: 6px; +} + +.volume-slider.vertical progress { + min-width: 6px; +} + + +/* ======================================== + Visualizer Bars - Idle Mode Animation + ======================================== */ + +/* Container padding to keep bars inside control bar edges */ +.visualizer-container { + padding: 0px; + /* 5px padding on left/right keeps bars inside */ + padding-bottom: 1px; + /* Small bottom padding to align with control bar bottom */ + border-radius: 0 0 12px 12px; +} + +Smooth control bar height transitions for idle mode */ .control-container-horizontal { + transition: all 0.1s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Smooth button fade transitions */ +.control-button { + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1), + opacity 0.3s ease-in-out; +} + +/* Ensure overlay respects size changes */ +overlay { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Vertical Display (for vertical layouts) */ +.vertical-display-container { + background: transparent; + padding: 8px 4px; +} + +.vertical-display-label { + font-family: 'IosevkaTerm Nerd Font', monospace; + font-size: 28px; + font-weight: bold; + color: white; + /* Match visualizer bar color */ + letter-spacing: 0px; + line-height: 1.2; +} + + + diff --git a/config/matugen/templates/hypwave.css b/config/matugen/templates/hypwave.css new file mode 100644 index 0000000..10c90ba --- /dev/null +++ b/config/matugen/templates/hypwave.css @@ -0,0 +1,559 @@ +/* ======================================== + HyprWave - Matugen Theme + ======================================== */ + +:root { + /* Background Colors - Deep Black */ + --bg-primary: {{colors.surface.default.hex}}; + --bg-secondary: {{colors.surface.default.hex}}; + ; + --bg-album-cover: {{colors.on_secondary_fixed.default.hex}}; + --bg-album-secondary: {{colors.on_secondary_fixed.default.hex}}; + + /* Button Colors - Default (Prev/Next) - Soft White */ + --btn-default: {{colors.primary.default.hex}}; + --btn-default-secondary: {{colors.primary.default.hex}}; + + --btn-default-active: {{colors.inverse_primary.default.hex}}; + --btn-default-hover: {{colors.primary_container.default.hex}}; + --btn-default-hover-secondary: {{colors.primary_container.default.hex}}; + + /* Button Colors - Play/Pause - Bright White */ + --btn-play: {{colors.primary.default.hex}}; + --btn-play-secondary: {{colors.primary.default.hex}}; + --btn-play-hover: {{colors.primary_container.default.hex}}; + --btn-play-hover-secondary: {{colors.primary_container.default.hex}}; + --btn-play-active: {{colors.inverse_primary.default.hex}}; + --btn-play-active-secondary: {{colors.inverse_primary.default.hex}}; + + /* Button Colors - Expand - Cool White */ + --btn-expand: {{colors.primary.default.hex}}; + --btn-expand-secondary: {{colors.primary.default.hex}}; + --btn-expand-hover: {{colors.primary_container.default.hex}}; + --btn-expand-hover-secondary: {{colors.primary_container.default.hex}}; + --btn-expand-active: {{colors.inverse_primary.default.hex}}; + --btn-expand-active-secondary: {{colors.inverse_primary.default.hex}}; + + /* Progress Bar Colors */ + --progress-bg: {{colors.inverse_on_surface.default.hex}}; + --progress-fill-start: #ff0100; + --progress-fill-end: {{colors.primary.default.hex}}; + + /* Slider Handle Colors */ + --handle-color: {{colors.primary.default.hex}}; + --handle-hover: {{colors.primary.default.hex}}; + --handle-border: {{colors.primary.default.hex}}; + --handle-shadow: {{colors.primary.default.hex}}; + + /* Text Colors - Bright white on pure black */ + --text-primary: {{colors.primary.default.hex}}; + --text-secondary: {{colors.primary_container.default.hex}}; + --text-tertiary: {{colors.primary_container.default.hex}}; + --text-muted: {{colors.primary.default.hex}} +; + + /* Border Colors */ + --border-primary: {{colors.primary.default.hex}}; + --border-button: rgba(100, 100, 100, 0); + --border-button-hover: rgba(120, 120, 120, 0); + --border-play: rgba(255, 255, 255, 0); + --border-play-hover: rgba(255, 255, 255, 0); + --border-expand: rgba(235, 235, 240, 0); + --border-expand-hover: rgba(245, 245, 250, 0); + + /* Shadow Colors */ + --shadow-default: rgba(0, 0, 0, 0); + --shadow-button: rgba(0, 0, 0, 0); + --shadow-play: rgba(255, 255, 255, 0); + --shadow-play-hover: rgba(255, 255, 255, 0); + --shadow-expand: rgba(235, 235, 240, 0); + --shadow-expand-hover: rgba(245, 245, 250, 0); + --shadow-focus: rgba(255, 255, 255, 0); + + /* Spacing & Sizes */ + --border-radius-container: 20px; + --border-radius-section: 20px; + --border-radius-album: 4px; + --border-radius-button: 50%; + --border-radius-progress: 4px; + + --padding-container: 20px; + --padding-section: 20px; +} + +/* Visualizer bars - pure white with strong glow */ + +/* ======================================== + Base Styles + ======================================== */ + +/* GTK4 transparent window - CRITICAL for compositor transparency */ +window { + background-color: transparent; +} + +/* Ensure ALL window-level elements are transparent */ + + +/* Main container - transparent */ +.main-container { + background: transparent; + min-height: 500px; + min-width: 500px; +} + +/* ======================================== + Control Container (Vertical Bar) + ======================================== */ + +.control-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + border: 4px solid var(--border-primary); + padding: var(--padding-container); + margin: 0; +} + +/* ======================================== + Control Container (Horizontal Bar) + For Top/Bottom Layouts + ======================================== */ + +.control-container-horizontal { + /* Match the vertical style exactly for consistency */ + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-container); + /* Keeps the pill shape */ + border: 4px solid var(--border-primary); + + /* Horizontal padding is critical here to prevent buttons + from touching the rounded edges */ + padding: 8px 24px; + margin: 0; +} + +/* ======================================== + Expanded Section (Album Details Card) + ======================================== */ + +.expanded-section { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: var(--padding-section); + margin: 0; + margin-top: 4px; + /* Reduced spacing from control bar */ + + +} + +/* ======================================== + Expanded Section (Horizontal Layout) + For Top/Bottom Layouts + ======================================== */ + +.expanded-section-horizontal { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + + + /* Slightly different padding/margin to look good below/above the bar */ + padding: var(--padding-section); + margin-top: 2px; + /* Adds gap between control bar and this panel */ + margin-bottom: 2px; + + /* Ensure it doesn't get too squeezed */ + min-width: 300px; +} + +/* Album cover */ +.album-cover { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 4px solid var(--border-button); + box-shadow: 0 4px 16px var(--shadow-button); +} + +/* ======================================== + Text Styles + ======================================== */ + +/* Source label (e.g., "Spotify") */ +.source-label { + color: var(--text-muted); + font-size: 11px; + font-weight: 500; + margin-top: 8px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +/* Track title */ +.track-title { + color: var(--text-primary); + font-size: 14px; + font-weight: 600; + margin-top: 4px; +} + +/* Artist label */ +.artist-label { + color: var(--text-secondary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* Time remaining */ +.time-remaining { + color: var(--text-tertiary); + font-size: 12px; + font-weight: 500; + margin-top: 2px; +} + +/* ======================================== + Progress Bar - FIXED FOR GTK4 + ======================================== */ + +.track-progress { + min-height: 4px; + margin-top: 8px; + margin-bottom: 4px; +} + +/* The background track */ +.track-progress trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* The filled progress portion - GTK4 specific */ +.track-progress progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* GTK4 also needs this for the fill bar to show */ +progressbar trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +progressbar progress { + background: linear-gradient(90deg, var(--progress-fill-start), var(--progress-fill-end)); + border-radius: var(--border-radius-progress); + min-height: 4px; +} + +/* ======================================== + Control Buttons - FIXED ROUNDED SHAPE + ======================================== */ + +/* All control buttons - base styles */ +.control-button { + padding: 0; + + /* Add margin to compensate for removed border */ + margin: 1.5px; + /* Same as the old border width */ + + min-width: 44px; + min-height: 44px; + + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + + border: none; + box-shadow: + inset 0 0 0 1.5px var(--border-button), + 0 4px 16px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.2); + + border-radius: 50%; +} + +.control-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + box-shadow: + 0 6px 20px var(--shadow-button), + inset 0 1px 1px rgba(255, 255, 255, 0.25); + transform: translateY(-1px); +} + +.control-button:active { + transform: scale(0.96); + box-shadow: + 0 2px 8px var(--shadow-button), + inset 0 2px 4px rgba(0, 0, 0, 0.2); +} + +/* ======================================== + Play/Pause Button (Blue) + ======================================== */ + +.play-button { + background: linear-gradient(135deg, var(--btn-play), var(--btn-play-secondary)); + border-color: var(--border-play); + box-shadow: + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.play-button:hover { + background: linear-gradient(135deg, var(--btn-play-hover), var(--btn-play-hover-secondary)); + border-color: var(--border-play-hover); + box-shadow: + 0 6px 20px var(--shadow-play-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.play-button:active { + background: linear-gradient(135deg, var(--btn-play-active), var(--btn-play-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-play), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Expand Button (Purple) + ======================================== */ + +.expand-button { + background: linear-gradient(135deg, var(--btn-expand), var(--btn-expand-secondary)); + border-color: var(--border-expand); + box-shadow: + 0 4px 16px var(--shadow-expand), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +.expand-button:hover { + background: linear-gradient(135deg, var(--btn-expand-hover), var(--btn-expand-hover-secondary)); + border-color: var(--border-expand-hover); + box-shadow: + 0 6px 20px var(--shadow-expand-hover), + inset 0 1px 1px rgba(255, 255, 255, 0.4); +} + +.expand-button:active { + background: linear-gradient(135deg, var(--btn-expand-active), var(--btn-expand-active-secondary)); + box-shadow: + 0 2px 10px var(--shadow-expand), + inset 0 2px 4px rgba(0, 0, 0, 0.15); +} + +/* ======================================== + Previous/Next Buttons + ======================================== */ + +.prev-button, +.next-button { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); +} + +.prev-button:hover, +.next-button:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); +} + +/* ======================================== + Focus & Accessibility + ======================================== */ + +button { + outline: none; +} + +button:focus { + outline: none; + box-shadow: + 0 0 0 3px var(--shadow-focus), + 0 4px 16px var(--shadow-play), + inset 0 1px 1px rgba(255, 255, 255, 0.3); +} + +/* ======================================== + Notification Styles + ======================================== */ + +.notification-window { + background: transparent; +} + +.notification-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 10px 12px; + /* Reduced from 12px to 10px vertical padding */ + min-width: 280px; + /* Reduced from 320px */ + max-width: 300px; + /* Added max-width */ +} + +.notification-album { + background: linear-gradient(135deg, var(--bg-album-cover), var(--bg-album-secondary)); + border-radius: var(--border-radius-album); + border: 4px solid var(--border-button); + margin: 5px; +} + +.notification-header { + color: var(--text-muted); + font-size: 10px; + /* Reduced from 11px */ + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + margin-bottom: 6px; + /* Reduced from 8px */ +} + +.notification-song { + color: var(--text-primary); + font-size: 13px; + /* Reduced from 14px */ + font-weight: 600; + line-height: 1.2; + /* Added for tighter spacing */ +} + +.notification-artist { + color: var(--text-secondary); + font-size: 11px; + /* Reduced from 12px */ + font-weight: 500; + line-height: 1.2; + /* Added for tighter spacing */ +} + +/* ======================================== + Volume Control Styles + ======================================== */ + +.volume-container { + background: linear-gradient(145deg, var(--bg-primary), var(--bg-secondary)); + border-radius: var(--border-radius-section); + border: 4px solid var(--border-primary); + padding: 12px; + margin: 0px; +} + +.volume-icon { + min-width: 20px; + min-height: 20px; +} + +.volume-percentage { + color: var(--text-primary); + font-size: 13px; + font-weight: 600; + min-width: 40px; +} + +/* Volume slider - similar to progress bar but with different colors */ +.volume-slider { + min-height: 24px; + min-width: 24px; +} + +/* The background track */ +.volume-slider trough { + background: var(--progress-bg); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The filled portion */ +.volume-slider progress { + background: linear-gradient(90deg, var(--btn-default), var(--btn-default-secondary)); + border-radius: var(--border-radius-progress); + min-height: 6px; + min-width: 6px; +} + +/* The slider handle */ +.volume-slider slider { + min-height: 16px; + min-width: 16px; + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + border: 2px solid var(--border-button); + border-radius: 50%; + +} + +.volume-slider slider:hover { + background: linear-gradient(135deg, var(--btn-default-hover), var(--btn-default-hover-secondary)); + border-color: var(--border-button-hover); + transform: scale(1.1); +} + +.volume-slider slider:active { + background: linear-gradient(135deg, var(--btn-default), var(--btn-default-secondary)); + transform: scale(0.95); +} + +/* GTK4 specific for vertical sliders */ +.volume-slider.vertical trough { + min-width: 6px; +} + +.volume-slider.vertical progress { + min-width: 6px; +} + + +/* ======================================== + Visualizer Bars - Idle Mode Animation + ======================================== */ + +/* Container padding to keep bars inside control bar edges */ +.visualizer-container { + padding: 0px; + /* 5px padding on left/right keeps bars inside */ + padding-bottom: 1px; + /* Small bottom padding to align with control bar bottom */ + border-radius: 0 0 12px 12px; +} + +Smooth control bar height transitions for idle mode */ .control-container-horizontal { + transition: all 0.1s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Smooth button fade transitions */ +.control-button { + transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1), + opacity 0.3s ease-in-out; +} + +/* Ensure overlay respects size changes */ +overlay { + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); +} + +/* Vertical Display (for vertical layouts) */ +.vertical-display-container { + background: transparent; + padding: 8px 4px; +} + +.vertical-display-label { + font-family: 'IosevkaTerm Nerd Font', monospace; + font-size: 28px; + font-weight: bold; + color: white; + /* Match visualizer bar color */ + letter-spacing: 0px; + line-height: 1.2; +} + + + diff --git a/config/matugen/templates/ironbar.css b/config/matugen/templates/ironbar.css new file mode 100644 index 0000000..f554366 --- /dev/null +++ b/config/matugen/templates/ironbar.css @@ -0,0 +1,12 @@ +:root { + --color-dark-primary: {{colors.surface.default.hex}}; + --color-dark-secondary: {{colors.surface_container.default.hex}}; + --color-white: {{colors.on_surface.default.hex}}; + --color-active: {{colors.primary.default.hex}}; + --color-urgent: {{colors.error_container.default.hex}}; + --margin-lg: 1em; + --margin-sm: 1em; + +} + + diff --git a/config/matugen/templates/kitty-colors.conf b/config/matugen/templates/kitty-colors.conf new file mode 100644 index 0000000..f495f72 --- /dev/null +++ b/config/matugen/templates/kitty-colors.conf @@ -0,0 +1,49 @@ +cursor {{ colors.primary.dark.hex }} +cursor_text_color {{ colors.on_primary.dark.hex }} + +foreground {{ colors.on_surface.dark.hex }} +background {{ colors.surface_container_lowest.dark.hex }} +selection_foreground {{ colors.on_secondary.dark.hex }} +selection_background {{ colors.secondary.dark.hex }} +url_color {{ colors.secondary.dark.hex }} + +#: black 000000 767676 +color0 {{ colors.surface.dark.hex }} +color8 {{ colors.surface_container_highest.dark.hex }} +#: red cc0403 f2201f +color1 {{ base16.base08.dark.hex | lighten: -20.0 }} +color9 {{ base16.base08.dark.hex | lighten: 10.0 }} +#: green 19cb00 23fd00 +color2 {{ colors.secondary_fixed_dim.dark.hex }} +color10 {{ colors.secondary_fixed.dark.hex }} +#: yellow cecb00 fffd00 +color3 {{ colors.tertiary_fixed_dim.dark.hex }} +color11 {{ colors.tertiary_fixed.dark.hex }} +#: blue 0d73cc 1a8fff +color4 {{ colors.on_primary_fixed_variant.dark.hex }} +color12 {{ colors.primary.dark.hex }} +#: magenta cb1ed1 fd28ff +color5 {{ colors.on_secondary_fixed_variant.dark.hex }} +color13 {{ colors.secondary.dark.hex }} +#: cyan 0dcdcd 14ffff +color6 {{ colors.on_tertiary_fixed_variant.dark.hex }} +color14 {{ colors.tertiary.dark.hex }} +#: white dddddd ffffff +color7 {{ colors.on_surface_variant.dark.hex }} +color15 {{ colors.on_surface.dark.hex }} + +mark1_foreground {{ colors.on_primary_fixed.dark.hex }} +mark1_background {{ colors.primary_fixed.dark.hex }} +mark2_foreground {{ colors.on_secondary_fixed.dark.hex }} +mark2_background {{ colors.secondary_fixed.dark.hex }} +mark3_foreground {{ colors.on_tertiary_fixed.dark.hex }} +mark3_background {{ colors.tertiary_fixed.dark.hex }} + +active_tab_foreground {{ colors.on_primary.dark.hex }} +active_tab_background {{ colors.primary.dark.hex }} +inactive_tab_foreground {{ colors.on_primary_container.dark.hex }} +inactive_tab_background {{ colors.primary_container.dark.hex }} + +active_border_color {{ colors.primary.dark.hex }} +inactive_border_color {{ colors.on_primary.dark.hex }} +# bell_border_color #ff5a00 diff --git a/config/matugen/templates/kvantum-colors.kvconfig b/config/matugen/templates/kvantum-colors.kvconfig new file mode 100644 index 0000000..9b44d78 --- /dev/null +++ b/config/matugen/templates/kvantum-colors.kvconfig @@ -0,0 +1,567 @@ +[%General] +author=Vince Liuice, based on KvAdapta by Tsu Jan +comment=An uncomplicated theme inspired by the Materia GTK theme +x11drag=menubar_and_primary_toolbar +alt_mnemonic=true +left_tabs=true +attach_active_tab=true +mirror_doc_tabs=true +group_toolbar_buttons=false +toolbar_item_spacing=0 +toolbar_interior_spacing=2 +spread_progressbar=true +composite=true +menu_shadow_depth=6 +spread_menuitems=true +tooltip_shadow_depth=2 +splitter_width=1 +scroll_width=9 +scroll_arrows=false +scroll_min_extent=60 +slider_width=2 +slider_handle_width=23 +slider_handle_length=22 +tickless_slider_handle_size=22 +center_toolbar_handle=true +check_size=16 +textless_progressbar=false +progressbar_thickness=2 +menubar_mouse_tracking=true +toolbutton_style=1 +double_click=false +translucent_windows=true +blurring=true +popup_blurring=true +vertical_spin_indicators=false +spin_button_width=24 +fill_rubberband=false +merge_menubar_with_toolbar=true +small_icon_size=16 +large_icon_size=32 +button_icon_size=16 +toolbar_icon_size=16 +combo_as_lineedit=true +animate_states=true +button_contents_shift=false +combo_menu=true +hide_combo_checkboxes=true +combo_focus_rect=false +groupbox_top_label=true +inline_spin_indicators=true +joined_inactive_tabs=false +layout_spacing=3 +layout_margin=3 +scrollbar_in_view=true +transient_scrollbar=true +transient_groove=false +submenu_overlap=0 +tooltip_delay=0 +tree_branch_line=true +no_window_pattern=false +opaque=kaffeine,kmplayer,subtitlecomposer,kdenlive,vlc,smplayer,smplayer2,avidemux,avidemux2_qt4,avidemux3_qt4,avidemux3_qt5,kamoso,QtCreator,VirtualBox,trojita,dragon,digikam,qBittorrent +reduce_window_opacity=0 +respect_DE=true +scrollable_menu=false +submenu_delay=150 +no_inactiveness=false +reduce_menu_opacity=0 +click_behavior=0 +contrast=1.00 +dialog_button_layout=0 +intensity=1.00 +saturation=1.00 +shadowless_popup=false +drag_from_buttons=false +menu_blur_radius=10 +tooltip_blur_radius=10 + +[GeneralColors] +window.color={{colors.surface.default.hex}} +base.color={{colors.surface_container_highest.default.hex}} +alt.base.color={{colors.surface_container_low.default.hex}} +button.color={{colors.surface_bright.default.hex}} +light.color={{colors.surface_bright.default.hex}} +mid.light.color={{colors.surface_variant.default.hex}} +dark.color={{colors.surface.default.hex}} +mid.color={{colors.surface_container_low.default.hex}} +highlight.color={{colors.primary.default.hex}} +inactive.highlight.color={{colors.primary_fixed_dim.default.hex}} +text.color={{colors.on_surface.default.hex}} +window.text.color={{colors.on_surface.default.hex}} +button.text.color={{colors.on_surface.default.hex}} +disabled.text.color={{colors.inverse_on_surface.default.hex}} +tooltip.text.color={{colors.on_surface.default.hex}} +highlight.text.color={{colors.on_surface.default.hex}} +link.color={{colors.primary.default.hex}} +link.visited.color={{colors.tertiary_fixed_dim.default.hex}} +progress.indicator.text.color={{colors.on_surface.default.hex}} + +[Hacks] +transparent_ktitle_label=true +transparent_dolphin_view=true +transparent_pcmanfm_sidepane=true +blur_translucent=true +transparent_menutitle=true +respect_darkness=true +kcapacitybar_as_progressbar=true +force_size_grip=true +iconless_pushbutton=true +iconless_menu=false +disabled_icon_opacity=100 +lxqtmainmenu_iconsize=16 +normal_default_pushbutton=true +single_top_toolbar=true +tint_on_mouseover=0 +transparent_pcmanfm_view=true +no_selection_tint=true +transparent_arrow_button=true +middle_click_scroll=false +opaque_colors=false +kinetic_scrolling=false +scroll_jump_workaround=true +centered_forms=false +noninteger_translucency=false +blur_only_active_window=false +style_vertical_toolbars=false + +[PanelButtonCommand] +frame=true +frame.element=button +frame.top=6 +frame.bottom=6 +frame.left=6 +frame.right=6 +interior=true +interior.element=button +indicator.size=8 +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +text.shadow=0 +text.margin=4 +text.iconspacing=4 +indicator.element=arrow +frame.expansion=0 + +[PanelButtonTool] +inherits=PanelButtonCommand +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +text.bold=false +indicator.element=arrow +indicator.size=0 +frame.expansion=0 + +[ToolbarButton] +frame=true +frame.element=tbutton +interior.element=tbutton +frame.top=16 +frame.bottom=16 +frame.left=16 +frame.right=16 +indicator.element=tarrow +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +text.bold=false +frame.expansion=32 + +[Dock] +inherits=PanelButtonCommand +interior.element=dock +frame.element=dock +frame.top=1 +frame.bottom=1 +frame.left=1 +frame.right=1 +text.normal.color={{colors.on_surface.default.hex}} + +[DockTitle] +inherits=PanelButtonCommand +frame=false +interior=false +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.bold=false + +[IndicatorSpinBox] +inherits=PanelButtonCommand +frame=true +interior=true +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +indicator.element=spin +indicator.size=8 +text.normal.color={{colors.on_surface.default.hex}} +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 + +[RadioButton] +inherits=PanelButtonCommand +frame=false +interior.element=radio +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +min_width=+0.3font +min_height=+0.3font + +[CheckBox] +inherits=PanelButtonCommand +frame=false +interior.element=checkbox +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +min_width=+0.3font +min_height=+0.3font + +[Focus] +inherits=PanelButtonCommand +frame=true +frame.element=focus +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +frame.patternsize=14 + +[GenericFrame] +inherits=PanelButtonCommand +frame=true +interior=false +frame.element=common +interior.element=common +frame.top=1 +frame.bottom=1 +frame.left=1 +frame.right=1 + +[LineEdit] +inherits=PanelButtonCommand +frame.element=lineedit +interior.element=lineedit +frame.top=6 +frame.bottom=6 +frame.left=6 +frame.right=6 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 + +[ToolbarLineEdit] +frame.element=lineedit +interior.element=lineedit + +[DropDownButton] +inherits=PanelButtonCommand +indicator.element=arrow-down + +[IndicatorArrow] +indicator.element=arrow +indicator.size=8 + +[ToolboxTab] +inherits=PanelButtonCommand +text.normal.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} + +[Tab] +inherits=PanelButtonCommand +interior.element=tab +text.margin.left=8 +text.margin.right=8 +text.margin.top=2 +text.margin.bottom=2 +frame.element=tab +indicator.element=tab +indicator.size=22 +frame.top=9 +frame.bottom=3 +frame.left=6 +frame.right=6 +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +frame.expansion=0 +text.bold=false + +[TabFrame] +inherits=PanelButtonCommand +frame.element=tabframe +interior.element=tabframe +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 + +[TreeExpander] +inherits=PanelButtonCommand +indicator.size=8 +indicator.element=tree + +[HeaderSection] +inherits=PanelButtonCommand +interior.element=header +frame.element=header +frame.top=0 +frame.bottom=1 +frame.left=1 +frame.right=1 +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +frame.expansion=0 + +[SizeGrip] +indicator.element=resize-grip + +[Toolbar] +inherits=PanelButtonCommand +indicator.element=toolbar +indicator.size=5 +text.margin=0 +interior.element=menubar +frame.element=menubar +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +frame.left=0 +frame.right=0 +frame.top=0 +frame.bottom=4 +frame.expansion=0 + +[Slider] +inherits=PanelButtonCommand +frame.element=slider +focusFrame=true +interior.element=slider +frame.top=3 +frame.bottom=3 +frame.left=3 +frame.right=3 + +[SliderCursor] +inherits=PanelButtonCommand +frame=false +interior.element=slidercursor + +[Progressbar] +inherits=PanelButtonCommand +frame.element=progress +interior.element=progress +text.margin=0 +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +text.bold=false +frame.expansion=8 + +[ProgressbarContents] +inherits=PanelButtonCommand +frame=true +frame.element=progress-pattern +interior.element=progress-pattern + +[ItemView] +inherits=PanelButtonCommand +text.margin=0 +frame.element=itemview +interior.element=itemview +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=4 +text.margin.right=4 +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +min_width=+0.3font +min_height=+0.3font +frame.expansion=0 + +[Splitter] +indicator.size=48 + +[Scrollbar] +inherits=PanelButtonCommand +indicator.element=arrow +indicator.size=12 + +[ScrollbarSlider] +inherits=PanelButtonCommand +frame.element=scrollbarslider +interior=false +frame.left=5 +frame.right=5 +frame.top=5 +frame.bottom=5 +indicator.element=grip +indicator.size=12 + +[ScrollbarGroove] +inherits=PanelButtonCommand +interior=false +frame=false + +[Menu] +inherits=PanelButtonCommand +frame.top=10 +frame.bottom=10 +frame.left=10 +frame.right=10 +frame.element=menu +interior.element=menu +text.normal.color={{colors.on_surface.default.hex}} +text.shadow=false +frame.expansion=0 +text.bold=false + +[MenuItem] +inherits=PanelButtonCommand +frame=true +frame.element=menuitem +interior.element=menuitem +indicator.element=menuitem +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.margin.top=3 +text.margin.bottom=3 +text.margin.left=6 +text.margin.right=6 +frame.top=0 +frame.bottom=0 +frame.left=6 +frame.right=6 +text.bold=false +frame.expansion=0 + +[MenuBar] +inherits=PanelButtonCommand +frame.element=menubar +interior.element=menubar +frame.bottom=0 +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +frame.expansion=0 +text.bold=false + +[MenuBarItem] +inherits=PanelButtonCommand +interior=true +interior.element=menubaritem +frame.element=menubaritem +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 +text.margin.left=4 +text.margin.right=4 +text.margin.top=0 +text.margin.bottom=0 +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} +text.bold=false +min_width=+0.3font +min_height=+0.3font +frame.expansion=0 + +[TitleBar] +inherits=PanelButtonCommand +frame=false +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 +interior.element=titlebar +indicator.size=16 +indicator.element=mdi +text.normal.color=#787878 +text.focus.color={{colors.on_surface.default.hex}} +text.bold=false +text.italic=true +frame.expansion=0 + +[ComboBox] +inherits=PanelButtonCommand +frame.element=combo +interior.element=combo +frame.top=6 +frame.bottom=6 +frame.left=6 +frame.right=6 +text.margin.top=2 +text.margin.bottom=2 +text.margin.left=2 +text.margin.right=2 +text.focus.color={{colors.on_surface.default.hex}} +text.press.color={{colors.on_surface.default.hex}} +text.toggle.color={{colors.on_surface.default.hex}} + +[GroupBox] +inherits=GenericFrame +frame=false +text.shadow=0 +text.margin=0 +text.normal.color={{colors.on_surface.default.hex}} +text.focus.color={{colors.on_surface.default.hex}} +text.bold=false +frame.expansion=0 + +[TabBarFrame] +inherits=GenericFrame +frame=true +frame.element=tabBarFrame +interior=false +frame.top=2 +frame.bottom=2 +frame.left=2 +frame.right=2 + +[ToolTip] +inherits=GenericFrame +frame.top=6 +frame.bottom=6 +frame.left=6 +frame.right=6 +interior=true +text.shadow=0 +text.margin=0 +interior.element=tooltip +frame.element=tooltip +frame.expansion=6 + +[StatusBar] +inherits=GenericFrame +frame=false +interior=false + +[Window] +interior=true +interior.element=window +frame=true +frame.element=window +frame.bottom=10 +frame.top=10 diff --git a/config/matugen/templates/kvantum-colors.svg b/config/matugen/templates/kvantum-colors.svg new file mode 100644 index 0000000..6de9d61 --- /dev/null +++ b/config/matugen/templates/kvantum-colors.svg @@ -0,0 +1,6736 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/matugen/templates/labwc b/config/matugen/templates/labwc new file mode 100644 index 0000000..d977d78 --- /dev/null +++ b/config/matugen/templates/labwc @@ -0,0 +1,21 @@ +window.active.border.color: {{colors.primary.default.hex}} +window.inactive.border.color: {{colors.background.default.hex}} +window.active.title.bg.color: {{colors.primary_container.default.hex}} +window.active.label.text.color: {{colors.on_primary_container.default.hex}} +window.inactive.label.text.color: {{colors.on_secondary_container.default.hex}} +window.inactive.title.bg.color: {{colors.secondary_container.default.hex}} +window.inactive.button.unpressed.image.color: {{colors.on_secondary_container.default.hex}} +window.active.button.unpressed.image.color: {{colors.on_primary_container.default.hex}} +window.button.hover.bg.color: {{colors.background.default.hex_alpha|set_alpha: 0.2}} + +menu.items.bg.color: {{colors.secondary_container.default.hex}} +menu.items.text.color: {{colors.on_secondary_container.default.hex}} +menu.items.active.bg.color: {{colors.primary_container.default.hex}} +menu.items.active.text.color: {{colors.on_primary_container.default.hex}} +menu.separator.color: {{colors.tertiary_container.default.hex}} +menu.title.bg.color: {{colors.on_tertiary_container.default.hex}} + +osd.bg.color: {{colors.secondary_container.default.hex}} +osd.label.text.color: {{colors.on_secondary_container.default.hex}} + +snapping.overlay.edge.bg.color: {{colors.primary_container.default.hex_alpha|set_alpha: 0.5}} diff --git a/config/matugen/templates/mako b/config/matugen/templates/mako new file mode 100644 index 0000000..d94cc0d --- /dev/null +++ b/config/matugen/templates/mako @@ -0,0 +1,16 @@ +# Material You colors + +background-color={{colors.on_primary.default.hex}} +text-color={{colors.tertiary.default.hex}} +border-color={{colors.tertiary_container.default.hex}} +# Per-mode settings + +[mode=do-not-disturb] +invisible=1 +on-notify=none + +[mode=silent] +on-notify=none + +[urgency=high] +border-color={{colors.error_container.default.hex}} diff --git a/config/matugen/templates/mango.conf b/config/matugen/templates/mango.conf new file mode 100644 index 0000000..3a1161e --- /dev/null +++ b/config/matugen/templates/mango.conf @@ -0,0 +1,15 @@ +rootcolor={{colors.background.dark.hex_stripped}}ff + +bordercolor={{colors.outline_variant.dark.hex_stripped}}ff + +focuscolor={{colors.primary_container.dark.hex_stripped}}ff + +maximizescreencolor={{colors.secondary.dark.hex_stripped}}ff + +urgentcolor={{colors.error.dark.hex_stripped}}ff + +scratchpadcolor={{colors.tertiary.dark.hex_stripped}}ff + +globalcolor={{colors.secondary_container.dark.hex_stripped}}ff + +overlaycolor={{colors.tertiary_container.dark.hex_stripped}}ff diff --git a/config/matugen/templates/matugen.obt b/config/matugen/templates/matugen.obt new file mode 100644 index 0000000..8e40a19 --- /dev/null +++ b/config/matugen/templates/matugen.obt @@ -0,0 +1,2476 @@ +@OBSThemeMeta { + name: 'Matugen'; + id: 'com.obsproject.matugen'; + author: 'Matugen Generator'; + dark: 'true'; +} + +@OBSThemeVars { + /* --- MATUGEN COLOR MAPPING --- */ + + /* Primary Accents (Blue mapping) */ + --blue1: {{colors.primary_fixed.default.hex}}; + --blue2: {{colors.primary_container.default.hex}}; + --blue3: {{colors.primary.default.hex}}; + --blue4: {{colors.on_primary_container.default.hex}}; + --blue5: {{colors.inverse_primary.default.hex}}; + + /* Error / Danger (Red mapping) */ + --red1: #E85E75; + --red2: {{colors.error_container.default.hex}}; + --red3: {{colors.error.default.hex}}; + --red4: {{colors.on_error_container.default.hex}}; + --red5: #7D1224; + + /* Secondary Accents (Pink mapping -> Secondary) */ + --pink1: {{colors.secondary_fixed.default.hex}}; + --pink2: {{colors.secondary_container.default.hex}}; + --pink3: {{colors.secondary.default.hex}}; + --pink4: {{colors.on_secondary_container.default.hex}}; + /* ИСПРАВЛЕНО: inverse_secondary -> on_secondary (это темный цвет в темной теме) */ + --pink5: {{colors.on_secondary.default.hex}}; + + /* Tertiary Accents (Teal mapping -> Tertiary) */ + --teal1: {{colors.tertiary_fixed.default.hex}}; + --teal2: {{colors.tertiary_container.default.hex}}; + --teal3: {{colors.tertiary.default.hex}}; + --teal4: {{colors.on_tertiary_container.default.hex}}; + /* ИСПРАВЛЕНО: inverse_tertiary -> on_tertiary */ + --teal5: {{colors.on_tertiary.default.hex}}; + + /* Purple mapping */ + --purple1: #997FDC; + --purple2: {{colors.secondary_fixed_dim.default.hex}}; + --purple3: {{colors.secondary.default.hex}}; + --purple4: {{colors.on_secondary_container.default.hex}}; + --purple5: #3D2380; + + /* Green & Yellow (Static) */ + --green1: #59D966; + --green2: #37D247; + --green3: #25A231; + --green4: #1E8528; + --green5: #17641E; + + --yellow1: #EABC48; + --yellow2: #E5AF24; + --yellow3: #B88A16; + --yellow4: #926E11; + --yellow5: #6E520D; + + /* Neutrals / Greys (Surface Mapping) */ + --grey1: {{colors.outline.default.hex}}; + --grey2: {{colors.outline_variant.default.hex}}; + --grey3: {{colors.surface_container_highest.default.hex}}; + --grey4: {{colors.surface_container_high.default.hex}}; + --grey5: {{colors.surface_container.default.hex}}; + --grey6: {{colors.surface.default.hex}}; + --grey7: {{colors.surface_dim.default.hex}}; + --grey8: {{colors.shadow.default.hex}}; + + /* Text */ + --white1: {{colors.on_surface.default.hex}}; + --white2: {{colors.on_surface_variant.default.hex}}; + --white3: {{colors.on_surface_variant.default.hex}}; + --white4: #C2C2C2; + --white5: #ADADAD; + + --black1: {{colors.inverse_surface.default.hex}}; + --black2: #1F1F1F; + --black3: #333333; + --black4: #474747; + --black5: #5C5C5C; + + /* --- Base Theme Logic --- */ + --bg_window: var(--grey7); + --bg_base: var(--grey6); + --bg_preview: var(--grey8); + + --primary: var(--blue3); + --primary_light: var(--blue2); + --primary_lighter: var(--blue1); + --primary_dark: var(--blue4); + --primary_darker: var(--blue5); + + --warning: var(--yellow3); + --danger: var(--red3); + + --text: var(--white1); + --text_light: var(--white2); + --text_muted: var(--grey1); + + --text_disabled: var(--text_muted); + --text_inactive: var(--white2); + + /* Layout */ + --font_base_value: var(--obsFontScale); + --padding_base_value: var(--obsPadding); + --spacing_base_value: calc(2 + calc(var(--obsPadding) / 2)); + + --highlight_width: 1px; + --highlight_color: var(--primary_lighter); + --border_highlight: "transparent"; + + /* OS Fixes */ + --os_mac_font_base_value: calc(1.2 * var(--obsFontScale)); + + --font_base: calc(1pt * var(--font_base_value)); + --font_small: max(7pt, calc(0.8pt * var(--font_base_value))); + --font_xsmall: max(6.25pt, calc(0.85pt * var(--font_base_value))); + --font_large: calc(1.1pt * var(--font_base_value)); + --font_xlarge: calc(1.5pt * var(--font_base_value)); + --font_heading: calc(2.5pt * var(--font_base_value)); + + --icon_base: calc(calc(max(2, var(--obsPadding)) * 1px) + 12px); + --icon_small: calc(4px + var(--font_base_value)); + + --spacing_base: min(max(1px, calc(0.4 * var(--spacing_base_value))), 2px); + --spacing_large: min(max(2px, calc(1px * var(--spacing_base_value))), 4px); + --spacing_small: max(1px, calc(0.25px * var(--spacing_base_value))); + --spacing_title: 4px; + + --padding_base: calc(0.5px * var(--padding_base_value)); + --padding_large: min(max(1px, calc(1px * var(--padding_base_value))), 5px); + --padding_xlarge: min(max(2px, calc(1.75px * var(--padding_base_value))), 10px); + --padding_small: max(0px, calc(0.25px * var(--padding_base_value))); + + --padding_container: max(4px, var(--padding_base)); + --padding_wide: min(calc(12px + max(var(--padding_base_value), 4)), 24px); + --padding_menu: calc(4px + calc(2 * var(--padding_base_value))); + --padding_menubar: max(6px, calc(2px + calc(1.25 * var(--padding_base_value)))); + + --padding_base_border: calc(var(--padding_base) + 1px); + --spinbox_button_height: calc(var(--input_height_half) - 1px); + + --volume_slider: calc(calc(4px + var(--font_base_value)) / 4); + --volume_slider_box: calc(var(--volume_slider) * 4); + --volume_slider_label: calc(var(--volume_slider_box) * 2); + + --scrollbar_size: 12px; + --settings_scrollbar_size: calc(var(--scrollbar_size) + 9px); + --scrollbar_handle: var(--grey4); + --scrollbar_bg: var(--grey6); + --scrollbar_hover: var(--grey3); + --scrollbar_down: var(--grey2); + --scrollbar_border: var(--grey2); + + /* Inputs / Controls */ + --border_color: var(--grey4); + --border_radius: 4px; + --border_radius_small: 2px; + --border_radius_large: 6px; + + --input_font_scale: calc(var(--font_base_value) * 2.2); + --input_font_padding: calc(var(--padding_base_value) * 2); + + --input_height_base: max(calc(var(--input_font_scale) + var(--input_font_padding)), 24); + --input_padding: calc(2px + var(--padding_base)); + --input_text_padding: max(calc(6px + var(--padding_base)), 8px); + --input_height: calc(var(--input_height_base) - calc(var(--input_padding) * 2px)); + --input_height_half: calc(var(--input_height_base) / 2); + + --input_bg: var(--grey4); + --input_bg_hover: var(--grey7); + --input_bg_focus: var(--grey7); + + --list_item_bg_selected: var(--primary); + --list_item_bg_hover: var(--primary_light); + + --input_border: var(--grey1); + --input_border_width: 1px; + --input_border_hover: var(--grey1); + --input_border_focus: var(--primary); + + --spacing_input: var(--spacing_base); + + --button_bg: var(--input_bg); + --button_bg_hover: var(--grey3); + --button_bg_down: var(--grey7); + --button_bg_disabled: var(--grey6); + + --button_border_width: var(--input_border_width); + --button_border: var(--button_bg); + --button_border_hover: var(--grey1); + --button_border_focus: var(--grey1); + + --tab_bg: var(--button_bg_disabled); + --tab_bg_hover: var(--button_bg_hover); + --tab_bg_down: var(--primary); + --tab_bg_disabled: var(--button_bg_disabled); + + --tab_border: var(--border_color); + --tab_border_hover: var(--button_border_hover); + --tab_border_focus: var(--primary_lighter); + --tab_border_selected: var(--primary); + + --tab_padding_base: calc(5px + var(--padding_base)); + --tab_padding_large: calc(9px + var(--padding_base)); + + --preview_scale_width: calc(calc(var(--input_text_padding) * 3.5) * calc(var(--font_base_value) / 10)); + --separator_hover: var(--white1); + + --action_row_base: calc(var(--input_height_base) * 0.75); + --action_row_height: calc(var(--action_row_base) + calc(var(--action_row_padding) * 2)); + --action_row_border: 3px; + --action_row_input_width: calc(var(--action_row_base) * 4); + --action_row_collapse: calc(var(--action_row_base) + var(--padding_large)); + --action_row_collapse_radius: calc(var(--action_row_collapse) / 2); + --action_row_padding: calc(var(--padding_large) * 1.5); + --action_row_padding_x: calc(var(--action_row_padding) * 2); + --action_row_padding_nested: calc(var(--action_row_padding_x) * 1.5); + + --toggle_border: 1; + --toggle_margin: 3; + --toggle_width: calc(var(--action_row_base) * 1.8); + --toggle_height: calc(var(--action_row_base) * 0.9); + --toggle_handle: calc(calc(calc(var(--toggle_height) * 0.9) - calc(var(--toggle_border) * 2)) - var(--toggle_margin)); + --toggle_radius: calc(var(--toggle_height) / 2); + + /* Qt Palette variables */ + --palette_window: var(--bg_window); + --palette_windowText: var(--text); + --palette_base: var(--bg_base); + --palette_light: var(--grey2); + --palette_mid: var(--grey7); + --palette_dark: var(--grey6); + --palette_highlight: var(--primary); + --palette_highlightedText: var(--text); + --palette_text: var(--text); + --palette_link: var(--blue2); + --palette_linkVisited: var(--blue2); + --palette_button: var(--button_bg); + --palette_buttonText: var(--text); + --palette_text_active: var(--text); + --palette_text_disabled: var(--text_disabled); + --palette_text_inactive: var(--text_inactive); +} + +.bg_window { + background-color: var(--bg_window); +} + +.bg-base { + background-color: var(--bg_base); +} + +.text-title { + font-size: var(--font_large); + font-weight: bold; +} + +.text-heading { + font-size: var(--font_heading); + font-weight: bold; +} + +.text-large { + font-size: var(--font_large); +} + +.text-bright { + color: var(--primary_light); +} + +.text-muted { + color: var(--text_muted); +} + +.text-warning { + color: var(--warning); +} + +.text-danger { + color: var(--danger); +} + +.text-success { + color: var(--green3); +} + +.frame-notice { + background: var(--grey8); + border: 1px solid var(--grey6); + border-radius: var(--border_radius); + padding: var(--padding_xlarge) var(--padding_large); +} + +.frame-notice QLabel { + padding: var(--padding_large) 0px; +} + +.dialog-container { + padding: var(--padding_large) var(--padding_xlarge); +} + +.dialog-frame { + background-color: var(--grey6); + border-radius: var(--border_radius); + border: 1px solid var(--border_color); + margin: var(--spacing_base); +} + +.dialog-frame > QWidget { + margin: var(--spacing_base) 0; +} + +.button-primary { + background-color: var(--primary_dark); + border-color: var(--primary); + outline: none; +} + +.button-primary:hover, +.button-primary:focus { + background-color: var(--primary); + border-color: var(--white3); +} + +.button-primary:hover { + border-color: var(--primary_light); +} + +.margin { + margin: var(--spacing_base); +} + +.margin-x { + margin-left: var(--spacing_base); + margin-right: var(--spacing_base); +} + +.margin-left { + margin-left: var(--spacing_base); +} + +.margin-right { + margin-right: var(--spacing_base); +} + +.margin-y { + margin-top: var(--spacing_base); + margin-bottom: var(--spacing_base); +} + +.margin-top { + margin-top: var(--spacing_base); +} + +.margin-bottom { + margin-bottom: var(--spacing_base); +} + +/* Icon Overrides */ + +.icon-plus { + qproperty-icon: url(theme:Dark/plus.svg); +} + +.icon-minus { + qproperty-icon: url(theme:Dark/minus.svg); +} + +.icon-trash { + qproperty-icon: url(theme:Dark/trash.svg); +} + +.icon-clear { + qproperty-icon: url(theme:Dark/entry-clear.svg); +} + +.icon-gear { + qproperty-icon: url(theme:Dark/settings/general.svg); +} + +.icon-dots-vert { + qproperty-icon: url(theme:Dark/dots-vert.svg); +} + +.icon-refresh { + qproperty-icon: url(theme:Dark/refresh.svg); +} + +.icon-cogs { + qproperty-icon: url(theme:Dark/cogs.svg); +} + +.icon-touch { + qproperty-icon: url(theme:Dark/interact.svg); +} + +.icon-up { + qproperty-icon: url(theme:Dark/up.svg); +} + +.icon-down { + qproperty-icon: url(theme:Dark/down.svg); +} + +.icon-pause { + qproperty-icon: url(theme:Dark/media-pause.svg); +} + +.icon-filter { + qproperty-icon: url(theme:Dark/filter.svg); +} + +.icon-revert { + qproperty-icon: url(theme:Dark/revert.svg); +} + +.icon-save { + qproperty-icon: url(theme:Dark/save.svg); +} + +.icon-close { + qproperty-icon: url(theme:Dark/close.svg); +} + +/* Media icons */ + +.icon-media-play { + qproperty-icon: url(theme:Dark/media/media_play.svg); +} + +.icon-media-pause { + qproperty-icon: url(theme:Dark/media/media_pause.svg); +} + +.icon-media-restart { + qproperty-icon: url(theme:Dark/media/media_restart.svg); +} + +.icon-media-stop { + qproperty-icon: url(theme:Dark/media/media_stop.svg); +} + +.icon-media-next { + qproperty-icon: url(theme:Dark/media/media_next.svg); +} + +.icon-media-prev { + qproperty-icon: url(theme:Dark/media/media_previous.svg); +} + +/* Default widget style, we override only what is needed. */ + +QWidget { + alternate-background-color: var(--bg_base); + color: var(--text); + selection-background-color: var(--primary); + selection-color: var(--text); + font-size: var(--font_base); + font-family: 'Open Sans', '.AppleSystemUIFont', Helvetica, Arial, 'MS Shell Dlg', sans-serif; +} + +QWidget:disabled { + color: var(--text_disabled); +} + +/* Container windows */ + +QDialog, +QMainWindow, +QStatusBar, +QMenuBar, +QMenu { + background-color: var(--bg_window); +} + +/* macOS Separator Fix */ + +QMainWindow::separator { + background: transparent; + width: var(--spacing_large); + height: var(--spacing_large); + margin: 0px; +} + +QMainWindow::separator:hover { + border: 1px solid var(--separator_hover); + margin: 1px; +} + +/* General Widgets */ + +QLabel, +QGroupBox, +QCheckBox { + background: transparent; +} + +QComboBox, +QCheckBox, +QPushButton, +QSpinBox, +QDoubleSpinBox { + margin-top: var(--spacing_input); + margin-bottom: var(--spacing_input); +} + +QListView QWidget, +QListWidget QWidget { + margin-top: 0; + margin-bottom: 0; +} + +* [frameShape="1"], +* [frameShape="2"], +* [frameShape="3"], +* [frameShape="4"], +* [frameShape="5"], +* [frameShape="6"] { + border: 1px solid var(--bg_base); +} + +QCheckBox, +QGroupBox, +QMenuBar, +QRadioButton { + spacing: var(--spacing_small); +} + +/* Misc */ + +QAbstractItemView { + background-color: var(--bg_base); +} + +QToolTip { + background-color: var(--bg_base); + color: var(--text); + border: none; +} + +QProgressBar { + text-align: center; + border-radius: 4px; + border-top: 2px solid transparent; +} + +QProgressBar::chunk { + background: var(--blue3); + border-top: 1px solid var(--blue2); + border-bottom: 2px solid var(--blue4); + border-radius: var(--border_radius_small); +} + +/* Context Menu */ + +QMenu::indicator { + left: var(--padding_large); +} + +QMenu::icon { + left: var(--padding_xlarge); +} + +QMenu::separator { + background: var(--border_color); + height: 1px; + margin: var(--spacing_base) var(--spacing_large); +} + +QMenu::item:disabled { + color: var(--text_disabled); + background: transparent; +} + +QMenu::right-arrow { + image: url(theme:Dark/expand.svg); +} + +/* Top Menu Bar Items */ +QMenuBar::item { + background-color: transparent; + padding: var(--padding_large) var(--padding_menubar); +} + +QMenuBar::item:selected { + background: var(--primary); +} + +/* Item Lists */ +QListWidget { + border-radius: var(--border_radius); +} + +QListWidget::item { + color: var(--text); +} + +QListView, +QListWidget, +QMenu { + padding: var(--spacing_base); + outline: none; +} + +QMenu { + border: 1px solid var(--border_color); +} + +QListWidget::item, +SourceTreeItem { + padding: var(--padding_large) var(--padding_large); +} + +QMenu::item { + padding: var(--padding_large) var(--padding_menu); + padding-right: 20px; +} + +QListView::item, +QListWidget::item, +QMenu::item { + border-radius: var(--border_radius); + color: var(--text); + border: 1px solid transparent; +} + +SourceTreeItem { + border-radius: var(--border_radius); + color: var(--text); +} + +/* Temporary fix for plugins affected by fix in #11555 */ +QListView::item, +QListWidget::item, +SourceTreeItem { + min-height: var(--padding_menu); +} + +SourceTreeItem .checkbox-icon { + margin-right: 0; + margin-left: var(--spacing_large); +} + +SourceTree .indicator-expand { + margin-right: var(--spacing_large); + margin-left: 0; +} + +QMenu::item:selected, +QListView::item:selected, +QListWidget::item:selected { + background-color: var(--primary); + border-color: var(--primary_light); +} + +QMenu::item:hover, +QListView::item:hover, +QListWidget::item:hover { + background: var(--grey4); + border: 1px solid var(--grey3); +} + +QMenu::item:focus, +QListView::item:focus, +QListWidget::item:focus, +QMenu::item:selected:focus, +QListView::item:selected:focus, +QListWidget::item:selected:focus { + border: 1px solid var(--white3); +} + +QMenu::item:selected:hover, +QListView::item:selected:hover, +QListWidget::item:selected:hover { + background: var(--primary_light); + border: 1px solid var(--primary_lighter); + color: var(--text); +} + +QListView::item:disabled, +QListView::item:disabled:hover, +QListWidget::item:disabled, +QListWidget::item:disabled:hover { + background: transparent; + color: var(--text_disabled); +} + +QListView QLineEdit, +QListWidget QLineEdit { + padding: 0; + padding-bottom: 1px; + margin: 0; + border: var(--input_border_width) solid var(--white1); + border-radius: var(--border_radius); +} + +QListView QLineEdit:focus, +QListWidget QLineEdit:focus { + border: 1px solid var(--grey1); +} + +/* Settings QList */ + +OBSBasicSettings QScrollBar:vertical { + width: var(--settings_scrollbar_size); + margin-left: 9px; +} + +OBSBasicSettings QScrollBar:horizontal { + height: var(--settings_scrollbar_size); +} + +/* Settings properties view */ +OBSBasicSettings #PropertiesContainer { + background-color: var(--bg_base); +} + +/* Dock Widget */ +OBSDock > QWidget { + background: var(--bg_base); + border-bottom-left-radius: var(--border_radius); + border-bottom-right-radius: var(--border_radius); + border: 1px solid var(--border_color); + border-top: none; +} + +OBSDock QToolBar { + padding: 1px; + margin: 0px; + border-top: 1px solid var(--border_color); + spacing: 0; +} + +OBSDock QToolBar::separator { + background: transparent; + width: var(--spacing_large); + border: none; +} + +OBSDock QToolBar QToolButton { + background: transparent; + border: 1px solid transparent; + margin: 1px; + margin-top: 2px; + padding: var(--padding_large); + max-width: var(--icon_small); + max-height: var(--icon_small); +} + +OBSDock QToolBar QToolButton:hover { + border-color: var(--grey1); +} + +OBSDock QToolBar QToolButton:disabled { + background: var(--grey7); +} + +#transitionsFrame { + padding: var(--padding_container); +} + +OBSDock QLabel { + background: transparent; +} + +QDockWidget { + font-size: var(--font_base); + font-weight: bold; + + titlebar-close-icon: url(theme:Dark/close.svg); + titlebar-normal-icon: url(theme:Dark/popout.svg); +} + +QDockWidget::title { + text-align: left; + background-color: var(--button_bg); + padding: var(--padding_large); + border-top-left-radius: var(--border_radius); + border-top-right-radius: var(--border_radius); +} + +QDockWidget::close-button, +QDockWidget::float-button { + border: none; + border-radius: var(--border_radius); + background: transparent; + margin-right: 1px; + min-width: var(--icon_base); + min-height: var(--icon_base); + icon-size: var(--icon_base); + padding: var(--padding_base); +} + +QDockWidget::close-button:hover, +QDockWidget::float-button:hover { + background: var(--button_bg_hover); +} + +QDockWidget::close-button:pressed, +QDockWidget::float-button:pressed { + background: var(--button_bg_down); + padding: 1px -1px -1px 1px; +} + +QAbstractScrollArea { + border-radius: var(--border_radius); +} + +/* ScrollAreaContents */ +QScrollArea > QWidget > QWidget { + background: transparent; +} + +/* Qt enforces a padding inside its status bar, so we + * oversize it and use margin to crunch it back down + */ +OBSBasicStatusBar { + margin-top: var(--spacing_large); + border-top: 1px solid var(--border_color); + background: var(--bg_base); +} + +StatusBarWidget > QFrame { + border: 0px solid var(--border_color); + border-left-width: 1px; + padding: 0px var(--padding_xlarge) var(--padding_small); +} + +/* Group Box */ + +QGroupBox { + background: var(--bg_base); + border-radius: var(--border_radius); + padding-top: var(--input_height_base); + padding-bottom: var(--padding_large); + font-weight: bold; + margin-bottom: var(--spacing_large); +} + +QGroupBox::title { + subcontrol-origin: margin; + left: var(--spacing_title); + top: var(--spacing_title); +} + + +/* ScrollBars */ + +QScrollBar { + background-color: var(--scrollbar_bg); + margin: 0px; + border-radius: var(--border_radius); + border: 1px solid var(--grey6); +} + +::corner { + background-color: var(--bg_window); + border: none; +} + +QScrollBar:vertical { + width: var(--scrollbar_size); +} + +QScrollBar::add-line:vertical, +QScrollBar::sub-line:vertical { + border: none; + background: none; + height: 0px; +} + +QScrollBar::up-arrow:vertical, +QScrollBar::down-arrow:vertical, +QScrollBar::add-page:vertical, +QScrollBar::sub-page:vertical { + border: none; + background: none; + color: none; +} + +QScrollBar:horizontal { + height: var(--scrollbar_size); +} + +QScrollBar::add-line:horizontal, +QScrollBar::sub-line:horizontal { + border: none; + background: none; + width: 0px; +} + +QScrollBar::left-arrow:horizontal, +QScrollBar::right-arrow:horizontal, +QScrollBar::add-page:horizontal, +QScrollBar::sub-page:horizontal { + border: none; + background: none; + color: none; +} + +QScrollBar::handle { + background-color: var(--scrollbar_handle); + margin: 2px; + border-radius: var(--border_radius_small); + border: 1px solid var(--scrollbar_handle); +} + +QScrollBar::handle:hover { + background-color: var(--scrollbar_hover); + border-color: var(--scrollbar_border); +} + +QScrollBar::handle:pressed { + background-color: var(--scrollbar_down); + border-color: var(--scrollbar_down); +} + +QScrollBar::handle:vertical { + min-height: 32px; +} + +QScrollBar::handle:horizontal { + min-width: 32px; +} + +QScrollBar::handle:disabled { + background: transparent; + border-color: transparent; +} + +OBSDock QScrollBar { + border-radius: 0; +} + +OBSDock QListWidget::corner { + background: transparent; + border-top: 1px solid var(--border_color); + border-left: 1px solid var(--border_color); +} + +OBSDock QScrollBar:horizontal { + border-top: 1px solid var(--border_color); +} + +OBSDock QScrollBar:vertical { + border-left: 1px solid var(--border_color); +} + +/* Source Context Bar */ + +#contextContainer { + background-color: var(--bg_base); + margin-top: 4px; + border-radius: var(--border_radius); +} + +#contextContainer QPushButton { + padding-left: 12px; + padding-right: 12px; +} + +QPushButton#sourcePropertiesButton { + qproperty-icon: url(theme:Dark/settings/general.svg); + icon-size: var(--icon_base); +} + +QPushButton#sourceFiltersButton { + qproperty-icon: url(theme:Dark/filter.svg); + icon-size: var(--icon_base); +} + +/* Scenes and Sources toolbar */ + +QToolBar { + background-color: transparent; + border: none; + margin: var(--spacing_base) 0px; + spacing: var(--spacing_base); +} + +QToolBarExtension { + background: var(--button_bg); + min-width: 12px; + max-width: 12px; + padding: 4px 0px; + margin-left: 0px; + + qproperty-icon: url(theme:Dark/dots-vert.svg); +} + + +/* Tab Widget */ + +/* The tab widget frame */ +QTabWidget::pane { + border-top: 4px solid var(--tab_bg); +} + +QTabBar { + outline: none; +} + +QTabWidget::tab-bar { + alignment: left; +} + +QTabBar QToolButton { + background: var(--button_bg); + border: none; +} + +QTabBar::tab:top { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +QTabBar::tab:bottom { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +QTabBar::tab { + background: var(--tab_bg); + color: var(--text); + border: none; + padding: var(--tab_padding_base) var(--tab_padding_large); + min-width: 50px; + margin: 1px 0px; + margin-right: 2px; + border: 1px solid var(--tab_border); +} + +QTabBar::tab:pressed { + background: var(--tab_bg_down); +} + +QTabBar::tab:hover { + background: var(--tab_bg_hover); + border-color: var(--tab_border_hover); + color: var(--text); +} + +QTabBar::tab:focus { + border-color: var(--tab_border_focus); +} + +QTabBar::tab:selected { + background: var(--tab_bg_down); + color: var(--text); +} + +QTabBar::tab:top { + border-bottom: 0px solid transparent; + margin-bottom: 0px; +} + +QTabBar::tab:bottom { + border-top: 0px solid transparent; + margin-top: 0px; +} + +QTabBar QToolButton { + background: var(--button_bg); + min-width: 16px; + padding: 0px; +} + +/* ComboBox */ + +QComboBox, +QDateTimeEdit { + background-color: var(--input_bg); + border: 1px solid var(--input_bg); + border-radius: var(--border_radius); + padding: var(--input_padding) var(--input_text_padding); + height: var(--input_height); +} + +QComboBox QAbstractItemView { + padding: var(--spacing_base) var(--spacing_large); + border: 1px solid var(--border_color); + outline: none; +} + +QComboBox QAbstractItemView::item { + padding: var(--padding_large) var(--padding_xlarge); +} + +QComboBox QAbstractItemView::item:selected, +QComboBox QAbstractItemView::item:hover { + background-color: var(--list_item_bg_selected); +} + +QComboBox:hover, +QComboBox:focus, +QDateTimeEdit:hover, +QDateTimeEdit:selected { + border-color: var(--input_border_hover); +} + +QComboBox:on { + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +QComboBox::drop-down, +QDateTimeEdit::drop-down { + border: none; + border-left: 1px solid var(--grey6); + width: var(--input_height); +} + +QComboBox::down-arrow, +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(theme:Dark/collapse.svg); + width: 100%; +} + +QComboBox:editable:hover { + background-color: var(--input_bg_hover); + border-color: var(--input_border_hover); +} + +QComboBox:on, +QDateTimeEdit:on, +QComboBox:editable:focus { + background-color: var(--input_bg_focus); + border-color: var(--input_border_focus); +} + +QComboBox::drop-down:editable, +QDateTimeEdit::drop-down:editable { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +QComboBox::down-arrow:editable, +QDateTimeEdit::down-arrow:editable { + qproperty-alignment: AlignTop; + image: url(theme:Dark/collapse.svg); + width: 100%; +} + +/* Textedits etc */ + +QLineEdit, +QTextEdit, +QPlainTextEdit { + background-color: var(--input_bg); + border: none; + border-radius: var(--border_radius); + padding: var(--input_padding) var(--input_text_padding); + border: 1px solid var(--input_bg); + height: var(--input_height); +} + +QLineEdit:hover, +QTextEdit:hover, +QPlainTextEdit:hover { + background-color: var(--input_bg_hover); + border-color: var(--input_border_hover); +} + +QLineEdit:focus, +QTextEdit:focus, +QPlainTextEdit:focus { + background-color: var(--input_bg_focus); + border-color: var(--input_border_focus); +} + +QLineEdit:read-only, +QLineEdit:read-only:hover, +QLineEdit:read-only:focus { + background-color: transparent; + border-color: var(--input_bg); +} + +QTextEdit:!editable, +QTextEdit:!editable:hover, +QTextEdit:!editable:focus { + background-color: var(--input_bg); +} + +/* Spinbox and doubleSpinbox */ + +QSpinBox, +QDoubleSpinBox { + background-color: var(--input_bg); + border: var(--input_border_width) solid var(--input_bg); + border-radius: var(--border_radius); + padding: var(--input_padding) var(--input_text_padding); + height: var(--input_height); + max-height: var(--input_height); +} + +QSpinBox:hover, +QDoubleSpinBox:hover { + background-color: var(--input_bg_hover); + border-color: var(--input_border_hover); +} + +QSpinBox:focus, +QDoubleSpinBox:focus { + background-color: var(--input_bg_focus); + border-color: var(--input_border_focus); +} + +QSpinBox::up-button, +QDoubleSpinBox::up-button { + subcontrol-origin: padding; + /* position at the top right corner */ + subcontrol-position: top right; + + width: var(--input_height); + height: var(--spinbox_button_height); + border-left: 1px solid var(--grey6); + border-bottom: 1px solid transparent; + border-radius: 0px; + border-top-right-radius: var(--border_radius_small); +} + +QSpinBox::down-button, +QDoubleSpinBox::down-button { + subcontrol-origin: padding; + /* position at the top right corner */ + subcontrol-position: bottom right; + + width: var(--input_height); + height: var(--spinbox_button_height); + border-left: 1px solid var(--grey6); + border-top: 1px solid var(--grey6); + border-radius: 0px; + border-bottom-right-radius: var(--border_radius_small); +} + +QSpinBox::up-button:hover, +QSpinBox::down-button:hover, +QDoubleSpinBox::up-button:hover, +QDoubleSpinBox::down-button:hover { + background-color: var(--button_bg_hover); +} + +QSpinBox::up-button:pressed, +QSpinBox::down-button:pressed, +QDoubleSpinBox::up-button:pressed, +QDoubleSpinBox::down-button:pressed { + background-color: var(--button_bg_down); +} + +QSpinBox::up-button:disabled, +QSpinBox::up-button:off, +QSpinBox::down-button:disabled, +QSpinBox::down-button:off { + background-color: var(--button_bg_disabled); +} + +QDoubleSpinBox::up-button:disabled, +QDoubleSpinBox::up-button:off, +QDoubleSpinBox::down-button:disabled, +QDoubleSpinBox::down-button:off { + background-color: var(--button_bg_disabled); +} + +QSpinBox::up-arrow, +QDoubleSpinBox::up-arrow { + image: url(theme:Dark/up.svg); + width: 100%; + margin: 2px; +} + +QSpinBox::down-arrow, +QDoubleSpinBox::down-arrow { + image: url(theme:Dark/down.svg); + width: 100%; + padding: 2px; +} + +/* Controls Dock */ +#controlsFrame { + padding: var(--padding_container); +} + +#controlsFrame QPushButton { + margin: var(--spacing_base) var(--spacing_small); +} + +#streamButton, +#recordButton, +#replayBufferButton, +#broadcastButton { + padding: var(--padding_large); +} + +#pauseRecordButton, +#saveReplayButton, +#virtualCamConfigButton { + padding: var(--padding_large) var(--padding_large); + width: var(--input_height); + max-width: var(--input_height); +} + +/* Primary Control Button Checked Coloring */ +#streamButton:!hover:!pressed.state-active, +#recordButton:!hover:!pressed.state-active, +#pauseRecordButton:!hover:!pressed.state-active, +#replayBufferButton:!hover:!pressed.state-active, +#virtualCamButton:!hover:!pressed.state-active, +#modeSwitch:!hover:!pressed.state-active, +#broadcastButton:!hover:!pressed.state-active { + background: var(--primary); +} + +/* Primary Control Button Hover Coloring */ +#streamButton:hover:!pressed.state-active, +#recordButton:hover:!pressed.state-active, +#pauseRecordButton:hover:!pressed.state-active, +#replayBufferButton:!pressed.state-active, +#virtualCamButton:!pressed.state-active, +#modeSwitch:hover:!pressed.state-active, +#broadcastButton:hover:!pressed.state-active { + background: var(--primary_light); + color: var(--text); +} + + +/* Buttons */ + +QPushButton { + background-color: var(--button_bg); + color: var(--text); + border: 1px solid var(--button_border); + border-radius: var(--border_radius); + height: var(--input_height); + max-height: var(--input_height); + margin-top: var(--spacing_input); + margin-bottom: var(--spacing_input); + padding: var(--input_padding) var(--padding_wide); + icon-size: var(--icon_base); + outline: none; +} + +QPushButton:hover { + background-color: var(--button_bg_hover); +} + +QPushButton:hover, +QPushButton:focus { + border-color: var(--button_border_hover); +} + +QPushButton::flat { + background-color: var(--button_bg); +} + +QPushButton:checked { + background-color: var(--primary); + border-color: var(--primary_light); +} + +QPushButton:checked:hover, +QPushButton:checked:focus { + border-color: var(--primary_lighter); +} + +QPushButton:pressed, +QPushButton:pressed:hover { + background-color: var(--button_bg_down); + border-color: var(--button_border); +} + +QPushButton:disabled { + background-color: var(--button_bg_disabled); + border-color: var(--button_border); +} + +QPushButton::menu-indicator { + image: url(theme:Dark/down.svg); + subcontrol-position: right; + subcontrol-origin: padding; + width: 25px; +} + +QToolButton { + border: 1px solid var(--button_border); +} + +QToolButton, +.btn-tool { + background-color: var(--button_bg); + padding: var(--padding_base) var(--padding_base); + margin: 0px 0px; + border: 1px solid var(--button_border); + border-radius: var(--border_radius); + icon-size: var(--icon_base); +} + +QToolButton:last-child, +.btn-tool:last-child { + margin-right: 0px; +} + +QToolButton:hover, +QToolButton:focus, +.btn-tool:hover, +.btn-tool:focus, +.indicator-mute::indicator:hover, +.indicator-mute::indicator:focus { + border-color: var(--button_border); + background-color: var(--button_bg_hover); +} + +QToolButton:pressed, +QToolButton:pressed:hover, +.btn-tool:pressed, +.btn-tool:pressed:hover { + background-color: var(--button_bg_down); + border-color: var(--button_border); +} + +QToolButton:disabled, +.btn-tool:disabled { + background-color: var(--button_bg_disabled); + border-color: transparent; +} + +/* Sliders */ + +QSlider::groove { + background-color: var(--grey4); + border: none; + border-radius: 2px; +} + +QSlider::groove:horizontal { + height: 4px; +} + +QSlider::groove:vertical { + width: 4px; +} + +QSlider::sub-page:horizontal { + background-color: var(--blue2); + border-radius: 2px; +} + +QSlider::sub-page:horizontal:disabled { + background-color: var(--grey4); + border-radius: 2px; +} + +QSlider::add-page:horizontal:disabled { + background-color: var(--grey7); + border-radius: 2px; +} + +QSlider::add-page:vertical { + background-color: var(--blue2); + border-radius: 2px; +} + +QSlider::add-page:vertical:disabled { + background-color: var(--grey4); + border-radius: 2px; +} + +QSlider::sub-page:vertical:disabled { + background-color: var(--grey7); + border-radius: 2px; +} + +QSlider::handle { + background-color: var(--white1); + border-radius: var(--border_radius); +} + +QSlider::handle:horizontal { + height: 10px; + width: 20px; + /* Handle is placed by default on the contents rect of the groove. Expand outside the groove */ + margin: -3px 0; +} + +QSlider::handle:vertical { + width: 10px; + height: 20px; + /* Handle is placed by default on the contents rect of the groove. Expand outside the groove */ + margin: 0 -3px; +} + +QSlider::handle:hover { + background-color: var(--white4); +} + +QSlider::handle:pressed { + background-color: var(--white3); +} + +QSlider::handle:disabled { + background-color: var(--white5); +} + +/* Volume Control */ + +#stackedMixerArea QPushButton { + width: var(--icon_base); + height: var(--icon_base); + background-color: var(--button_bg); + padding: var(--padding_base_border) var(--padding_base_border); + margin: 0px; + border: var(--highlight_width) solid var(--button_border); + border-radius: var(--border_radius); + icon-size: var(--icon_base); +} + +/* This is an incredibly cursed but necessary fix */ +#stackedMixerArea QPushButton:!hover { + background-color: var(--button_bg); +} + +#stackedMixerArea QPushButton:hover { + background-color: var(--button_bg_hover); + border-color: var(--button_border_hover); +} + +#stackedMixerArea QPushButton:pressed { + background-color: var(--button_bg_down); +} + +#stackedMixerArea { + border: none; + padding: 0px; +} + +VolControl { + background: var(--bg_base); +} + +VolControl QLabel { + font-size: var(--font_small); + margin: var(--spacing_small) 0px; +} + +VolControl #volLabel { + padding: var(--padding_base) 0px var(--padding_base); + text-align: center; + font-size: var(--font_base); + color: var(--text_muted); +} + +/* Horizontal Mixer */ +#hMixerScrollArea VolControl { + padding: 0px var(--padding_xlarge) var(--padding_base); + border-bottom: 1px solid var(--border_color); +} + +#hMixerScrollArea VolControl QSlider { + margin: 0px 0px var(--padding_base); +} + +#hMixerScrollArea VolControl QSlider::groove:horizontal { + background: var(--bg_window); + height: var(--volume_slider); +} + +/* Vertical Mixer */ +#vMixerScrollArea VolControl { + padding: var(--padding_container) 0px var(--padding_container); + border-right: 1px solid var(--border_color); +} + +#vMixerScrollArea VolControl QSlider { + width: var(--volume_slider_box); + margin: 0px var(--padding_xlarge); +} + +#vMixerScrollArea VolControl #volLabel { + padding: var(--padding_base) 0px var(--padding_base); + min-width: var(--volume_slider_label); + margin-left: var(--padding_xlarge); + text-align: center; +} + +#vMixerScrollArea VolControl QSlider::groove:vertical { + background: var(--bg_window); + width: var(--volume_slider); +} + +#vMixerScrollArea VolControl #volMeterFrame { + padding: var(--padding_large) var(--padding_xlarge) var(--padding_large) 0px; +} + +#vMixerScrollArea VolControl QLabel { + padding: 0px var(--padding_large); +} + +#vMixerScrollArea VolControl QPushButton { + margin-left: var(--spacing_base); + margin-right: var(--padding_xlarge); +} + +#vMixerScrollArea VolControl .indicator-mute { + margin-left: var(--padding_xlarge); +} + +VolumeMeter { + background: transparent; +} + +VolumeMeter { + qproperty-backgroundNominalColor: var(--green5); + qproperty-backgroundWarningColor: var(--yellow5); + qproperty-backgroundErrorColor: var(--red5); + qproperty-foregroundNominalColor: var(--green2); + qproperty-foregroundWarningColor: var(--yellow2); + qproperty-foregroundErrorColor: var(--red2); + qproperty-magnitudeColor: rgb(0, 0, 0); + qproperty-majorTickColor: var(--white1); + qproperty-minorTickColor: var(--grey1); +} + +/* Status Bar */ + +QStatusBar::item { + border: none; +} + +/* Table View */ + +QTableView { + background: var(--bg_base); + gridline-color: var(--grey1); +} + +QTableView::item { + margin: 0px; + padding: 0px; +} + +QTableView QLineEdit { + background: var(--input_bg_focus); + padding: 0; + margin: 0; +} + +QTableView QPushButton, +QTableView QToolButton { + padding: 0px; + margin: -1px; + border-radius: 0px; +} + +QHeaderView::section { + background-color: var(--button_bg); + color: var(--text); + border: none; + border-left: 1px solid var(--bg_window); + border-right: 1px solid var(--bg_window); + padding: 3px 0px; + margin-bottom: 2px; +} + +/* Canvas / Preview background color */ + +OBSQTDisplay { + qproperty-displayBackgroundColor: var(--bg_preview); +} + +/* Filters Window */ + +OBSBasicFilters #widget, +OBSBasicFilters #widget_2 { + margin: 0px; + padding: 0px; + padding-bottom: var(--padding_base); +} + +OBSBasicFilters #widget QPushButton, +OBSBasicFilters #widget_2 QPushButton { + min-width: 16px; + padding: var(--padding_base) var(--padding_large); + margin-top: 0px; +} + +/* Preview/Program labels */ + +.label-preview-title { + font-size: var(--font_xlarge); + font-weight: bold; + color: var(--text_light); + margin-bottom: 4px; +} + +/* Settings Icons */ + +OBSBasicSettings { + qproperty-generalIcon: url(theme:Dark/settings/general.svg); + qproperty-appearanceIcon: url(theme:Dark/settings/appearance.svg); + qproperty-streamIcon: url(theme:Dark/settings/stream.svg); + qproperty-outputIcon: url(theme:Dark/settings/output.svg); + qproperty-audioIcon: url(theme:Dark/settings/audio.svg); + qproperty-videoIcon: url(theme:Dark/settings/video.svg); + qproperty-hotkeysIcon: url(theme:Dark/settings/hotkeys.svg); + qproperty-accessibilityIcon: url(theme:Dark/settings/accessibility.svg); + qproperty-advancedIcon: url(theme:Dark/settings/advanced.svg); +} + +/* Checkboxes */ + +QCheckBox::indicator, +QGroupBox::indicator, +QTableView::indicator { + width: var(--icon_base); + height: var(--icon_base); + margin-right: var(--spacing_large); +} + +QGroupBox::indicator { + margin-left: 2px; +} + +QCheckBox::indicator:unchecked, +QGroupBox::indicator:unchecked, + + +QCheckBox::indicator:unchecked:hover, +QGroupBox::indicator:unchecked:hover, + + +QCheckBox::indicator:checked, +QGroupBox::indicator:checked, + + +QCheckBox::indicator:checked:hover, +QGroupBox::indicator:checked:hover, + + +QCheckBox::indicator:checked:disabled, +QGroupBox::indicator:checked:disabled, + + +QCheckBox::indicator:unchecked:disabled, +QGroupBox::indicator:unchecked:disabled, + + +/* Icon Checkboxes */ +.checkbox-icon { + outline: none; + background: transparent; + max-width: var(--icon_base); + max-height: var(--icon_base); + padding: var(--padding_base); + margin-right: var(--spacing_large); + border: var(--highlight_width) solid transparent; + border-radius: var(--border_radius); +} + +.checkbox-icon::indicator { + width: var(--icon_base); + height: var(--icon_base); +} + +.checkbox-icon:hover, +.checkbox-icon:focus { + border-color: var(--primary_lighter); +} + +/* Locked CheckBox */ + +.indicator-lock::indicator:checked, +.indicator-lock::indicator:checked:hover { + image: url(theme:Dark/locked.svg); +} + +.indicator-lock::indicator:unchecked, +.indicator-lock::indicator:unchecked:hover { + image: url(:res/images/unlocked.svg); +} + +/* Visibility CheckBox */ + +.indicator-visibility::indicator:checked, +.indicator-visibility::indicator:checked:hover { + image: url(theme:Dark/visible.svg); +} + +.indicator-visibility::indicator:unchecked, +.indicator-visibility::indicator:unchecked:hover { + image: url(:res/images/invisible.svg); +} + +/* Mute CheckBox */ + +.indicator-mute { + outline: none; +} + +.indicator-mute::indicator, +.indicator-mute::indicator:unchecked { + width: var(--icon_base); + height: var(--icon_base); + background-color: var(--button_bg); + padding: var(--padding_base_border) var(--padding_base_border); + margin: 0px; + border: var(--highlight_width) solid var(--button_border); + border-radius: var(--border_radius); + icon-size: var(--icon_base); +} + +.indicator-mute::indicator:hover, +.indicator-mute::indicator:unchecked:hover { + background-color: var(--button_bg_hover); + padding: var(--padding_base_border) var(--padding_base_border); + margin: 0px; + border: var(--highlight_width) solid var(--button_border_hover); + icon-size: var(--icon_base); +} + +.indicator-mute::indicator:pressed, +.indicator-mute::indicator:pressed:hover { + background-color: var(--button_bg_down); + border-color: var(--button_border); +} + +.indicator-mute::indicator:checked { + image: url(theme:Dark/mute.svg); +} + +.indicator-mute::indicator:indeterminate { + image: url(theme:Dark/unassigned.svg); +} + +.indicator-mute::indicator:unchecked { + image: url(theme:Dark/settings/audio.svg); +} + +.indicator-mute::indicator:unchecked:hover { + image: url(theme:Dark/settings/audio.svg); +} + +.indicator-mute::indicator:unchecked:focus { + image: url(theme:Dark/settings/audio.svg); +} + +.indicator-mute::indicator:checked:hover { + image: url(theme:Dark/mute.svg); +} + +.indicator-mute::indicator:checked:focus { + image: url(theme:Dark/mute.svg); +} + +.indicator-mute::indicator:checked:disabled { + image: url(theme:Dark/mute.svg); +} + +.indicator-mute::indicator:unchecked:disabled { + image: url(theme:Dark/settings/audio.svg); +} + +#hotkeyFilterReset { + margin-top: 0px; +} + +OBSHotkeyWidget { + padding: 8px 0px; + margin: 2px 0px; +} + +OBSHotkeyLabel { + padding: 4px 0px; +} + +OBSHotkeyWidget QPushButton { + min-width: 16px; + padding: var(--padding_base); + margin-top: 0px; + margin-left: var(--spacing_base); +} + + +/* Sources List Group Collapse Checkbox */ + +.indicator-expand::indicator:checked, +.indicator-expand::indicator:checked:hover { + image: url(theme:Dark/expand.svg); +} + +.indicator-expand::indicator:unchecked, +.indicator-expand::indicator:unchecked:hover { + image: url(theme:Dark/collapse.svg); +} + +/* Source Icons */ + +.source-icon { + margin-right: var(--spacing_large); +} + +OBSBasic { + qproperty-imageIcon: url(theme:Dark/sources/image.svg); + qproperty-colorIcon: url(theme:Dark/sources/brush.svg); + qproperty-slideshowIcon: url(theme:Dark/sources/slideshow.svg); + qproperty-audioInputIcon: url(theme:Dark/sources/microphone.svg); + qproperty-audioOutputIcon: url(theme:Dark/settings/audio.svg); + qproperty-desktopCapIcon: url(theme:Dark/settings/video.svg); + qproperty-windowCapIcon: url(theme:Dark/sources/window.svg); + qproperty-gameCapIcon: url(theme:Dark/sources/gamepad.svg); + qproperty-cameraIcon: url(theme:Dark/sources/camera.svg); + qproperty-textIcon: url(theme:Dark/sources/text.svg); + qproperty-mediaIcon: url(theme:Dark/sources/media.svg); + qproperty-browserIcon: url(theme:Dark/sources/globe.svg); + qproperty-groupIcon: url(theme:Dark/sources/group.svg); + qproperty-sceneIcon: url(theme:Dark/sources/scene.svg); + qproperty-defaultIcon: url(theme:Dark/sources/default.svg); + qproperty-audioProcessOutputIcon: url(theme:Dark/sources/windowaudio.svg); +} + +/* Scene Tree Grid Mode */ + +SceneTree { + qproperty-gridItemWidth: 154; + qproperty-gridItemHeight: var(--input_height_base); +} + +.list-grid SceneTree::item { + color: var(--text); + background-color: var(--button_bg); + border-radius: var(--border_radius); + margin: var(--spacing_base); +} + +.list-grid SceneTree::item:selected { + background-color: var(--list_item_bg_selected); +} + +.list-grid SceneTree::item:checked { + background-color: var(--primary); +} + +.list-grid SceneTree::item:hover { + background-color: var(--list_item_bg_hover); +} + +.list-grid SceneTree::item:selected:hover { + background-color: var(--list_item_bg_hover); +} + +/* Studio Mode T-Bar */ + +.slider-tbar { + height: 24px; +} + +.slider-tbar::groove:horizontal { + height: 8px; +} + +.slider-tbar::sub-page:horizontal { + background: var(--blue2); +} + +.slider-tbar::handle:horizontal { + width: 12px; + height: 24px; + margin: -24px 0px; +} + +/* YouTube Integration */ +OBSYoutubeActions { + qproperty-thumbPlaceholder: url(theme:Dark/sources/image.svg); +} + +#ytEventList QLabel { + color: var(--text); + background-color: var(--button_bg); + border: none; + border-radius: var(--border_radius); + padding: 4px 20px; +} + +#ytEventList QLabel:hover { + background-color: var(--button_bg_hover); +} + +#ytEventList .row-selected { + background-color: var(--primary); + border: none; +} + +#ytEventList .row-selected:hover { + background-color: var(--primary_light); + color: var(--text); +} + +/* Calendar Widget */ +QDateTimeEdit::down-arrow { + qproperty-alignment: AlignTop; + image: url(theme:Dark/down.svg); + width: 100%; +} + +QDateTimeEdit:on { + background-color: var(--grey7); +} + +/* Calendar Top Bar */ +QCalendarWidget QWidget#qt_calendar_navigationbar { + background-color: var(--bg_base); + padding: var(--padding_base) var(--padding_large); +} + +/* Calendar Top Bar Buttons */ +QCalendarWidget QToolButton { + background-color: var(--button_bg); + padding: 2px 16px; + border-radius: var(--border_radius); + margin: var(--spacing_base); +} + +#qt_calendar_monthbutton::menu-indicator { + image: url(theme:Dark/down.svg); + subcontrol-position: right; + padding-top: var(--padding_small); + padding-right: var(--padding_base); + height: 10px; + width: 10px; +} + +QCalendarWidget #qt_calendar_prevmonth { + padding: var(--padding_small); + qproperty-icon: url(theme:Dark/left.svg); + icon-size: var(--icon_base); +} + +QCalendarWidget #qt_calendar_nextmonth { + padding: var(--padding_small); + qproperty-icon: url(theme:Dark/right.svg); + icon-size: var(--icon_base); +} + +QCalendarWidget QToolButton:hover { + background-color: var(--button_bg_hover); + border-radius: var(--border_radius); +} + +QCalendarWidget QToolButton:pressed { + background-color: var(--button_bg_down); +} + +/* Month Dropdown Menu */ +QCalendarWidget QMenu {} + +/* Year spinbox */ +QCalendarWidget QSpinBox { + background-color: var(--input_bg); + border: none; + border-radius: var(--border_radius); + margin: 0px var(--spacing_base) 0px 0px; + padding: var(--padding_base) 16px; +} + +QCalendarWidget QSpinBox::up-button { + subcontrol-origin: border; + subcontrol-position: top right; + width: 16px; +} + +QCalendarWidget QSpinBox::down-button { + subcontrol-origin: border; + subcontrol-position: bottom right; + width: 16px; +} + +QCalendarWidget QSpinBox::up-arrow { + width: 10px; + height: 10px; +} + +QCalendarWidget QSpinBox::down-arrow { + width: 10px; + height: 10px; +} + +/* Days of the Week Bar */ +QCalendarWidget QWidget { + alternate-background-color: var(--grey7); +} + +QCalendarWidget QAbstractItemView:enabled { + background-color: var(--bg_base); + color: var(--text); +} + +QCalendarWidget QAbstractItemView:disabled { + color: var(--text_disabled); +} + +/* VirtualCam Plugin Fixes */ + +#VirtualProperties QWidget { + margin-top: 0; + margin-bottom: 0; +} + +/* Disable icons on QDialogButtonBox */ +QDialogButtonBox { + dialogbuttonbox-buttons-have-icons: 0; +} + +/* Stats dialog */ +OBSBasicStats { + background: var(--bg_base); +} + +/* Advanced audio dialog */ +OBSBasicAdvAudio #scrollAreaWidgetContents { + background: var(--bg_base); +} + +#previewScalePercent, +#previewScalingMode { + background: transparent; + color: var(--text_muted); + font-size: var(--font_xsmall); + height: 14px; + max-height: 14px; + padding: 0px; + margin: 0; + border: none; + border-radius: 0; +} + +#previewXContainer { + border: 1px solid var(--grey6); +} + +#previewScalePercent { + padding: 0px var(--input_text_padding); + min-width: var(--preview_scale_width); +} + +#previewScalingMode { + padding: 0px var(--input_text_padding); + border: 1px solid var(--grey6); +} + +#previewScalingMode:hover, +#previewScalingMode:focus { + border-color: var(--input_border_hover); +} + +#previewScalingMode:on { + background-color: var(--input_bg_focus); + border-color: var(--input_border_focus); +} + +#previewXScrollBar, +#previewYScrollBar { + background: transparent; + border: 1px solid var(--grey6); + border-radius: 0; +} + +#previewXScrollBar { + border-left: none; + height: 16px; +} + +#previewXScrollBar::handle, +#previewYScrollBar::handle { + margin: 3px; +} + +#previewYScrollBar { + width: 16px; +} + +#previewZoomInButton { + border: none; + border-radius: 0px; + outline: none; +} + +#previewZoomOutButton { + border: none; + border-radius: 0px; + outline: none; +} + +#previewZoomInButton:!hover, +#previewZoomOutButton:!hover { + background-color: transparent; +} + +#previewZoomInButton:pressed, +#previewZoomOutButton:pressed { + background-color: var(--button_bg); +} + +#previewZoomInButton:focus, +#previewZoomOutButton:focus { + border: 1px solid var(--input_border_hover); +} + +/* Idian Widgets */ +idian--Group { + border-radius: var(--border_radius); + font-weight: bold; + margin: 0 0 var(--spacing_base); + min-width: 300px; + max-width: 600px; +} + +idian--Group .header .title { + font-weight: bold; + padding: var(--padding_large) 0; +} + +idian--Group .header .description { + color: var(--text_muted); + padding: var(--spacing_small) 0; +} + +idian--PropertiesList { + border-width: 0; + padding: 0; + margin: var(--spacing_base) 0; +} + +idian--Row { + background: var(--grey5); + margin: 0; + padding: var(--action_row_padding) var(--action_row_padding_x); +} + +idian--Row.keyFocus { + background: var(--grey4); + border: var(--highlight_width) solid var(--grey4); +} + +idian--Row.cursor-pointer.hover { + background: var(--grey4); + border: var(--highlight_width) solid var(--grey1); +} + +idian--Row.first { + border-top-left-radius: var(--border_radius); + border-top-right-radius: var(--border_radius); +} + +idian--Row.last { + border-bottom-left-radius: var(--border_radius); + border-bottom-right-radius: var(--border_radius); +} + +idian--Row > QLabel.description { + font-size: var(--font_small); + color: var(--text_muted); +} + +idian--ToggleSwitch { + qproperty-background: var(--grey6); + qproperty-background_hover: var(--grey7); + qproperty-background_checked: var(--primary); + qproperty-background_checked_hover: var(--primary_light); + + min-width: var(--toggle_width); + min-height: var(--toggle_height); + + border-radius: var(--toggle_radius); + + qproperty-handleColor: var(--white1); + qproperty-handleSize: var(--toggle_handle); + + border: var(--highlight_width) solid transparent; +} + +idian--ToggleSwitch:hover { + border-color: var(--grey4); +} + +idian--ToggleSwitch:checked:hover { + border-color: var(--white1); +} + +idian--ToggleSwitch.keyFocus { + border-color: var(--highlight_color); +} + +idian--Row idian--ToggleSwitch:hover, +idian--Row.hover > idian--ToggleSwitch.row-buddy { + border-color: var(--grey1); +} + +idian--Row idian--ToggleSwitch:checked:hover, +idian--Row.hover idian--ToggleSwitch.row-buddy:checked { + border-color: var(--white1); +} + +idian--Row QComboBox { + background-color: transparent; + min-height: var(--action_row_base); + max-height: var(--action_row_base); + min-width: var(--action_row_input_width); + border: var(--highlight_width) solid transparent; + padding: 0; + padding-left: var(--padding_xlarge); + margin: 0; +} + +idian--Row QComboBox:focus { + border-color: transparent; +} + +idian--Row QComboBox:hover { + border-color: var(--grey1); +} + +idian--Row QComboBox.keyFocus { + border-color: var(--highlight_color); +} + +idian--Row QComboBox::drop-down { + border: none; +} + +idian--Row QComboBox::down-arrow { + image: url(theme:Dark/collapse.svg); +} + +idian--Row QComboBox QAbstractItemView { + outline: none; +} + +idian--Row QComboBox QAbstractItemView::item { + background-color: var(--bg_base); + padding: var(--padding_base) var(--padding_large); +} + +idian--Row QComboBox QAbstractItemView::item:hover, +idian--Row QComboBox QAbstractItemView::item:selected { + background-color: var(--list_item_bg_selected); + padding: var(--padding_base) var(--padding_large); +} + +idian--Row QPushButton, +idian--Row QSpinBox, +idian--Row QDoubleSpinBox { + margin: 0; + padding: var(--padding_base) var(--action_row_padding_x); +} + +idian--PropertiesListSpacer { + max-height: var(--spacing_small); + min-height: var(--spacing_small); + background-color: var(--bg_window); +} + +idian--Row idian--CheckBox { + outline: none; +} + +idian--Row idian--CheckBox::indicator, +idian--Row idian--CheckBox::indicator:unchecked:hover { + border: var(--highlight_width) solid transparent; + border-radius: var(--border_radius); +} + +idian--Row.hover > idian--CheckBox.row-buddy::indicator, +idian--Row > idian--CheckBox::indicator:unchecked:hover, +idian--Row > idian--CheckBox::indicator:hover { + border-color: var(--grey1); +} + +idian--Row.hover > idian--CheckBox.row-buddy::indicator:unchecked, + + +idian--Row idian--CheckBox.keyFocus::indicator, + + +idian--Row idian--CheckBox.keyFocus::indicator, +idian--Row idian--CheckBox.keyFocus::indicator:unchecked, +idian--Row idian--CheckBox.keyFocus::indicator:hover, +idian--Row idian--CheckBox.keyFocus::indicator:unchecked:hover { + border-color: var(--highlight_color); +} + +idian--CollapsibleRow { + margin: 0; + padding: 0; + border: none; +} + +idian--CollapsibleRow.keyFocus { + border: var(--highlight_width) solid var(--highlight_color); +} + +idian--CollapsibleRow idian--PropertiesList { + border-radius: 0; + border-left: 1px solid var(--grey5); + border-right: 1px solid var(--grey5); + border-bottom: 1px solid var(--grey5); + margin: var(--spacing_small) 0px 0px; +} + +idian--CollapsibleRow idian--PropertiesList idian--Row { + background-color: var(--grey6); + padding-left: var(--action_row_padding_nested); +} + +idian--CollapsibleRow idian--Row.first, +idian--CollapsibleRow idian--Row.last { + border-radius: 0; +} + +idian--CollapsibleRow idian--PropertiesList idian--ToggleSwitch { + qproperty-background: var(--grey7); + qproperty-background_hover: var(--grey6); +} + +idian--ExpandButton { + background: transparent; + min-width: var(--action_row_collapse); + max-width: var(--action_row_collapse); + min-height: var(--action_row_collapse); + max-height: var(--action_row_collapse); + border: none; +} + +idian--ExpandButton::indicator { + background: var(--grey5); + border-radius: var(--action_row_collapse_radius); + padding: var(--padding_large); + image: url(theme:Dark/down.svg); + border: var(--highlight_width) solid var(--grey5); +} + +idian--ExpandButton::indicator:checked { + image: url(theme:Dark/up.svg); +} + +idian--ExpandButton.keyFocus, +idian--ExpandButton.keyFocus::indicator { + border-color: var(--highlight_color); +} + +idian--RowFrame .btn-frame { + background: var(--grey5); + padding: var(--action_row_padding) var(--action_row_padding_x); +} + +idian--RowFrame.hover .btn-frame { + background: var(--grey4); +} + +idian--RowFrame.hover idian--Row, +idian--RowFrame.hover idian--Row.hover { + background: var(--grey4); + border: 2px solid var(--grey1); + border-right: none; +} + +idian--RowFrame.hover .row-buddy { + background: var(--grey4); + border: 2px solid var(--grey1); + border-left: none; +} + +idian--RowFrame.hover idian--ExpandButton::indicator { + border-color: var(--grey1); +} diff --git a/config/matugen/templates/mcfly.toml b/config/matugen/templates/mcfly.toml new file mode 100644 index 0000000..5bf280a --- /dev/null +++ b/config/matugen/templates/mcfly.toml @@ -0,0 +1,28 @@ +# Matugen template for McFly +# Uses crossterm named colors — hex is not supported by McFly's color parser. +# Named colors are resolved by the terminal emulator, which matugen +# themes separately, so the accent color tracks the Material You palette. + +[colors.menubar] +bg = "dark_blue" +fg = "aqua" + +[colors.darkmode] +prompt = "dark_blue" +timing = "dark_grey" +results_fg = "grey" +results_bg = "black" +results_hl = "dark_blue" +results_selection_fg = "black" +results_selection_bg = "dark_blue" +results_selection_hl = "white" + +[colors.lightmode] +prompt = "dark_blue" +timing = "grey" +results_fg = "black" +results_bg = "white" +results_hl = "dark_blue" +results_selection_fg = "white" +results_selection_bg = "dark_blue" +results_selection_hl = "black" diff --git a/config/matugen/templates/micro.micro b/config/matugen/templates/micro.micro new file mode 100644 index 0000000..b057922 --- /dev/null +++ b/config/matugen/templates/micro.micro @@ -0,0 +1,45 @@ +color-link default "{{ colors.on_surface.default.hex }}" +color-link comment "{{ colors.outline.default.hex }}" +color-link selection "{{ colors.on_primary.default.hex }},{{ colors.primary_container.default.hex }}" +color-link hlsearch "{{ colors.secondary.default.hex }}" + +color-link identifier "{{ colors.primary.default.hex }}" +color-link identifier.class "{{ colors.primary.default.hex }}" +color-link identifier.var "{{ colors.primary.default.hex }}" + +color-link constant "{{ colors.tertiary.default.hex }}" +color-link constant.number "{{ colors.tertiary.default.hex }}" +color-link constant.string "{{ colors.secondary.default.hex }}" + +color-link symbol "{{ colors.tertiary_container.default.hex }}" +color-link symbol.brackets "{{ colors.on_surface_variant.default.hex }}" +color-link symbol.tag "{{ colors.primary.default.hex }}" + +color-link type "{{ colors.primary.default.hex }}" +color-link type.keyword "{{ colors.secondary.default.hex }}" + +color-link special "{{ colors.tertiary_container.default.hex }}" +color-link statement "{{ colors.primary_container.default.hex }}" +color-link preproc "{{ colors.tertiary_container.default.hex }}" + +color-link underlined "{{ colors.secondary.default.hex }}" +color-link error "bold {{ colors.error.default.hex }}" +color-link todo "bold {{ colors.tertiary.default.hex }}" + +color-link diff-added "{{ colors.secondary.default.hex }}" +color-link diff-modified "{{ colors.tertiary.default.hex }}" +color-link diff-deleted "{{ colors.error.default.hex }}" + +color-link gutter-error "{{ colors.error.default.hex }}" +color-link gutter-warning "{{ colors.tertiary.default.hex }}" + +color-link scrollbar "{{ colors.on_surface_variant.default.hex }}" +color-link statusline "{{ colors.on_surface.default.hex }},{{ colors.surface.default.hex }}" +color-link tabbar "{{ colors.on_surface.default.hex }},{{ colors.surface.default.hex }}" +color-link indent-char "{{ colors.surface_variant.default.hex }}" +color-link line-number "{{ colors.outline_variant.default.hex }}" +color-link current-line-number "{{ colors.primary.default.hex }}" + +color-link cursor-line "{{ colors.surface_variant.default.hex }},{{ colors.on_surface.default.hex }}" +color-link color-column "{{ colors.surface_variant.default.hex }}" +color-link type.extended "default" \ No newline at end of file diff --git a/config/matugen/templates/midnight-discord.css b/config/matugen/templates/midnight-discord.css new file mode 100644 index 0000000..1c12cbd --- /dev/null +++ b/config/matugen/templates/midnight-discord.css @@ -0,0 +1,100 @@ +/** + * @name midnight + * @description A dark, rounded discord theme. + * @author refact0r + * @version 1.6.2 + * @invite nz87hXyvcy + * @website https://github.com/refact0r/midnight-discord + * @source https://github.com/refact0r/midnight-discord/blob/master/midnight.theme.css + * @authorId 508863359777505290 + * @authorLink https://www.refact0r.dev +*/ + +/* IMPORTANT: make sure to enable dark mode in discord settings for the theme to apply properly!!! */ + +@import url('https://refact0r.github.io/midnight-discord/build/midnight.css'); + +/* customize things here */ +:root { + /* font, change to 'gg sans' for default discord font*/ + --font: 'figtree'; + + /* top left corner text */ + --corner-text: 'Midnight'; + + /* color of status indicators and window controls */ + --online-indicator: {{colors.inverse_primary.default.hex}}; /* change to #23a55a for default green */ + --dnd-indicator: {{colors.error.default.hex}}; /* change to #f13f43 for default red */ + --idle-indicator: {{colors.tertiary_container.default.hex}}; /* change to #f0b232 for default yellow */ + --streaming-indicator: {{colors.on_primary.default.hex}}; /* change to #593695 for default purple */ + + /* accent colors */ + --accent-1: {{colors.tertiary.default.hex}}; /* links */ + --accent-2: {{colors.primary.default.hex}}; /* general unread/mention elements, some icons when active */ + --accent-3: {{colors.primary.default.hex}}; /* accent buttons */ + --accent-4: {{colors.surface_bright.default.hex}}; /* accent buttons when hovered */ + --accent-5: {{colors.primary_fixed_dim.default.hex}}; /* accent buttons when clicked */ + --accent-new: {{colors.inverse_primary.default.hex}}; /* user panel mute & deafen buttons */ + --mention: {{colors.surface.default.hex}}; /* mentions & mention messages */ + --mention-hover: {{colors.surface_bright.default.hex}}; /* mentions & mention messages when hovered */ + + /* text colors */ + --text-0: {{colors.surface.default.hex}}; /* text on colored elements */ + --text-1: {{colors.on_surface.default.hex}}; /* other normally white text */ + --text-2: {{colors.on_surface.default.hex}}; /* headings and important text */ + --text-3: {{colors.on_surface_variant.default.hex}}; /* normal text */ + --text-4: {{colors.on_surface_variant.default.hex}}; /* icon buttons and channels */ + --text-5: {{colors.outline.default.hex}}; /* muted channels/chats and timestamps */ + + /* background and dark colors */ + --bg-1: {{colors.surface_variant.default.hex}}; /* dark buttons when clicked */ + --bg-2: {{colors.surface_container_high.default.hex}}; /* dark buttons */ + --bg-3: {{colors.surface_container_low.default.hex}}; /* spacing, secondary elements */ + --bg-4: {{colors.surface.default.hex}}; /* main background color */ + --hover: {{colors.surface_bright.default.hex}}; /* channels and buttons when hovered */ + --active: {{colors.surface_bright.default.hex}}; /* channels and buttons when clicked or selected */ + --message-hover: {{colors.surface_bright.default.hex}}; /* messages when hovered */ + + /* amount of spacing and padding */ + --spacing: 12px; + + /* animations */ + /* ALL ANIMATIONS CAN BE DISABLED WITH REDUCED MOTION IN DISCORD SETTINGS */ + --list-item-transition: 0.2s ease; /* channels/members/settings hover transition */ + --unread-bar-transition: 0.2s ease; /* unread bar moving into view transition */ + --moon-spin-transition: 0.4s ease; /* moon icon spin */ + --icon-spin-transition: 1s ease; /* round icon button spin (settings, emoji, etc.) */ + + /* corner roundness (border-radius) */ + --roundness-xl: 22px; /* roundness of big panel outer corners */ + --roundness-l: 20px; /* popout panels */ + --roundness-m: 16px; /* smaller panels, images, embeds */ + --roundness-s: 12px; /* members, settings inputs */ + --roundness-xs: 10px; /* channels, buttons */ + --roundness-xxs: 8px; /* searchbar, small elements */ + + /* direct messages moon icon */ + /* change to block to show, none to hide */ + --discord-icon: none; /* discord icon */ + --moon-icon: block; /* moon icon */ + --moon-icon-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* custom icon url */ + --moon-icon-size: auto; + + /* filter uncolorable elements to fit theme */ + /* (just set to none, they're too much work to configure) */ + --login-bg-filter: saturate(0.3) hue-rotate(-15deg) brightness(0.4); /* login background artwork */ + --green-to-accent-3-filter: hue-rotate(56deg) saturate(1.43); /* add friend page explore icon */ + --blurple-to-accent-3-filter: hue-rotate(304deg) saturate(0.84) brightness(1.2); /* add friend page school icon */ +} + +/* Selected chat/friend text */ +.selected_f5eb4b, +.selected_f6f816 .link_d8bfb3 { + color: var(--text-0) !important; + background: var(--accent-3) !important; +} + +.selected_f6f816 .link_d8bfb3 * { + color: var(--text-0) !important; + fill: var(--text-0) !important; +} diff --git a/config/matugen/templates/neovim.lua b/config/matugen/templates/neovim.lua new file mode 100644 index 0000000..8608549 --- /dev/null +++ b/config/matugen/templates/neovim.lua @@ -0,0 +1,37 @@ +local M = {} + +function M.setup() + require("base16-colorscheme").setup({ + -- Background tones + base00 = "{{colors.surface.default.hex}}", -- Default Background + base01 = "{{colors.surface_container.default.hex}}", -- Lighter Background (status bars) + base02 = "{{colors.surface_container_high.default.hex}}", -- Selection Background + base03 = "{{colors.outline.default.hex}}", -- Comments, Invisibles + -- Foreground tones + base04 = "{{colors.on_surface_variant.default.hex}}", -- Dark Foreground (status bars) + base05 = "{{colors.on_surface.default.hex}}", -- Default Foreground + base06 = "{{colors.on_surface.default.hex}}", -- Light Foreground + base07 = "{{colors.on_background.default.hex}}", -- Lightest Foreground + -- Accent colors + base08 = "{{colors.error.default.hex}}", -- Variables, XML Tags, Errors + base09 = "{{colors.tertiary.default.hex}}", -- Integers, Constants + base0A = "{{colors.secondary.default.hex}}", -- Classes, Search Background + base0B = "{{colors.primary.default.hex}}", -- Strings, Diff Inserted + base0C = "{{colors.tertiary_fixed_dim.default.hex}}", -- Regex, Escape Chars + base0D = "{{colors.primary_fixed_dim.default.hex}}", -- Functions, Methods + base0E = "{{colors.secondary_fixed_dim.default.hex}}", -- Keywords, Storage + base0F = "{{colors.error_container.default.hex}}", -- Deprecated, Embedded Tags + }) +end + +-- Register a signal handler for SIGUSR1 (matugen updates) +local signal = vim.uv.new_signal() +signal:start( + "sigusr1", + vim.schedule_wrap(function() + package.loaded["matugen"] = nil + require("matugen").setup() + end) +) + +return M diff --git a/config/matugen/templates/neovim/README.md b/config/matugen/templates/neovim/README.md new file mode 100644 index 0000000..500522b --- /dev/null +++ b/config/matugen/templates/neovim/README.md @@ -0,0 +1,153 @@ +# Matugen + Neovim + +> [!NOTE] +> This theme is primarily a proof-of-concept with sample colors chosen. While +> it is usable and somewhat complete, the colors themselves may not necessarily +> look the best, so it's important you style them accordingly if you are +> unsatisfied with the result. Additionally, this setup only styles basic +> Neovim colors + Lualine. Other plugins that manage their own highlight groups +> are not covered by this guide (e.g. Neogit) + + +## The `base16-colorscheme` Plugin + +As with any program broad and free as Neovim, there are infinite ways to go +about styling it. However, the easiest approach is to utilize +the `base16-colorscheme` plugin. This plugin allows you to pass in an arbitrary +list of 16 color values, and it will automatically propagate them to all +highlight groups in a reasonable fashion. + +```lua +-- THIS IS NOT THE ENTIRE TEMPLATE FILE +-- To see why, continue reading below... +require('base16-colorscheme').setup({ + base00 = "{{colors.background.default.hex}}", + base01 = "{{colors.surface_container_lowest.default.hex}}", + base02 = "{{colors.surface_container_low.default.hex}}", + base03 = "{{colors.outline_variant.default.hex}}", + base04 = "{{colors.on_surface_variant.default.hex}}", + base05 = "{{colors.on_surface.default.hex}}", + base06 = "{{colors.inverse_on_surface.default.hex}}", + base07 = "{{colors.surface_bright.default.hex}}", + base08 = "{{colors.tertiary.default.hex | lighten: -5}}", + base09 = "{{colors.tertiary.default.hex}}", + base0A = "{{colors.secondary.default.hex}}", + base0B = "{{colors.primary.default.hex}}", + base0C = "{{colors.tertiary_container.default.hex}}", + base0D = "{{colors.primary_container.default.hex}}", + base0E = "{{colors.secondary_container.default.hex}}", + base0F = "{{colors.secondary.default.hex | lighten: -10}}", +}) +``` + +While this `.setup()` call takes care of mostly everything, some additional +calls to `nvim_set_hl` may be needed to tweak colors to your liking: + +``` lua +-- Make selected text stand out more +vim.api.nvim_set_hl(0, 'Visual', { + bg = '{{colors.primary_container.default.hex}}', + fg = '{{colors.background.default.hex}}', +}) +``` + +## Lualine (and plugins that manage their own colors) + +Because Lualine has its own specific named highlight groups, the +`base16-colorscheme` plugin cannot style it within its `setup` function. +Thankfully, Lualine is flexible enough to offer the following configuration +option, which aids the process a little: + +```lua +require('lualine').setup({ + options = { + theme = "base16", + } +}) +``` + +Setting this option tells Lualine to base its highlight group colors off of +some internal 16 base values (which `base16-colorscheme` sets). While this helps, +it unfortunately does not give us full hot-reloading out of the box. In addition +to this, Lualine must be **re-sourced upon every matugen update** in order to +refresh its colors. + +If you are using an unmodified (or simple) Lualine configuration, all you need +to do add a `require('lualine').setup({})` to the end of matugen's +`template.lua`, which will re-setup Lualine as the output file gets sourced. +However, if your Lualine setup is a bit complex, it can be sub-optimal to copy +its entire setup function into the matugen template file. + +One solution to this is to refactor your Lualine setup into its own file, and +then just call `dofile()` on said file from both your `init.lua` and matugen +template. _(This is not necessary, but helps tidy your configuration up)_ + +## Init Hook + +It's a good idea to attempt to source matugen's generated file upon Neovim's +startup, falling back to a default colorscheme when the matugen file is +unavailable. The following code snippet can be added in your `init.lua` or +adjacent to safely perform this source: + +```lua +local function source_matugen() + -- Update this with the location of your output file + local matugen_path = os.getenv("HOME") .. "/.config/nvim/generated.lua" -- dofile doesn't expand $HOME or ~ + + local file, err = io.open(matugen_path, "r") + -- If the matugen file does not exist (yet or at all), we must initialize a color scheme ourselves + if err ~= nil then + -- Some placeholder theme, this will be overwritten once matugen kicks in + vim.cmd('colorscheme base16-catppuccin-mocha') + + -- Optionally print something to the user + vim.print("A matugen style file was not found, but that's okay! The colorscheme will dynamically change if matugen runs!") + else + dofile(matugen_path) + io.close(file) + end +end +``` + +## Updating Neovim with New Colors + +Neovim does not support hot-reloading directly, so we must register an +`autocmd` to listen process signals and execute Lua code as a result. This is +fairly simply, as shown below: + +> [!NOTE] The below `autocmd` is only tested for Linux. Separate workarounds +> may be required for other systems. + +```lua +-- Register an autocmd to listen for matugen updates +vim.api.nvim_create_autocmd("Signal", { + pattern = "SIGUSR1", + callback = auxiliary_function, +}) + + +-- Main entrypoint on matugen reloads +local function auxiliary_function() + -- Load the matugen style file to get all the new colors + source_matugen() + + -- Because reloading base16 overwrites lualine configuration, just source lualine here + dofile(os.getenv("HOME") .. '/.config/nvim/config/plugins/lualine-nvim.lua') -- path of your lualine setup + + -- Any other options you wish to set upon matugen reloads can also go here! + vim.api.nvim_set_hl(0, "Comment", { italic = true }) +end +``` + +## Matugen Config + +Create an entry in matugen's `config.toml` as shown below: + +```toml +[templates.neovim] +input_path = './template.lua' +output_path = '~/.config/nvim/generated.lua' +post_hook = 'pkill -SIGUSR1 nvim' +``` + +With any luck, your Neovim should now be stylized to match your wallpaper! diff --git a/config/matugen/templates/neovim/init.lua b/config/matugen/templates/neovim/init.lua new file mode 100644 index 0000000..c8fc139 --- /dev/null +++ b/config/matugen/templates/neovim/init.lua @@ -0,0 +1,42 @@ +-- An example subset of your init.lua + +local function source_matugen() + -- Update this with the location of your output file + local matugen_path = os.getenv("HOME") .. "/.config/nvim/matugen.lua" -- dofile doesn't expand $HOME or ~ + + local file, err = io.open(matugen_path, "r") + -- If the matugen file does not exist (yet or at all), we must initialize a color scheme ourselves + if err ~= nil then + -- Some placeholder theme, this will be overwritten once matugen kicks in + vim.cmd('colorscheme base16-catppuccin-mocha') + + -- Optionally print something to the user + vim.print("A matugen style file was not found, but that's okay! The colorscheme will dynamically change if matugen runs!") + else + dofile(matugen_path) + io.close(file) + end +end + +-- Main entrypoint on matugen reloads +local function auxiliary_function() + -- Load the matugen style file to get all the new colors + local matugen_path = os.getenv("HOME") .. "/.config/nvim/generated.lua" + source_matugen() + + -- Because reloading base16 overwrites lualine configuration, just source lualine here + dofile(os.getenv("HOME") .. '/.config/nvim/config/plugins/lualine-nvim.lua') -- path of your lualine setup + + -- Any other options you wish to set upon matugen reloads can also go here! + vim.api.nvim_set_hl(0, "Comment", { italic = true }) +end + +-- Register an autocmd to listen for matugen updates +vim.api.nvim_create_autocmd("Signal", { + pattern = "SIGUSR1", + callback = auxiliary_function, +}) + +-- Additionally call this function once on startup to query for matugen's theme +-- or set a default +auxiliary_function() diff --git a/config/matugen/templates/neovim/template.lua b/config/matugen/templates/neovim/template.lua new file mode 100644 index 0000000..aecba64 --- /dev/null +++ b/config/matugen/templates/neovim/template.lua @@ -0,0 +1,81 @@ +return { + { + "RRethy/base16-nvim", + priority = 1000, + config = function() + -- Настройка базовой палитры base16 + require("base16-colorscheme").setup({ + base00 = "{{colors.background.default.hex}}", + base01 = "{{colors.surface_container_lowest.default.hex}}", + base02 = "{{colors.surface_container_low.default.hex}}", + base03 = "{{colors.outline_variant.default.hex}}", + base04 = "{{colors.on_surface_variant.default.hex}}", + base05 = "{{colors.on_surface.default.hex}}", + base06 = "{{colors.inverse_on_surface.default.hex}}", + base07 = "{{colors.surface_bright.default.hex}}", + + base08 = "{{colors.tertiary.default.hex | lighten: -5}}", + base09 = "{{colors.tertiary.default.hex}}", + base0A = "{{colors.secondary.default.hex}}", + base0B = "{{colors.primary.default.hex}}", + base0C = "{{colors.tertiary_container.default.hex}}", + base0D = "{{colors.primary_container.default.hex}}", + base0E = "{{colors.secondary_container.default.hex}}", + base0F = "{{colors.secondary.default.hex | lighten: -10}}", + }) + + -- Вспомогательная функция для массовой установки групп подсветки + local function set_hl_multiple(groups, value) + for _, group in ipairs(groups) do + vim.api.nvim_set_hl(0, group, value) + end + end + + -- Кастомные группы подсветки + vim.api.nvim_set_hl(0, "Visual", { + bg = "{{colors.primary_container.default.hex}}", + fg = "{{colors.on_primary_container.default.hex}}", + }) + + set_hl_multiple({ "String", "TSString" }, { + fg = "{{colors.tertiary.default.hex | lighten: -15.0 }}", + }) + + set_hl_multiple({ "TSComment", "Comment" }, { + fg = "{{colors.outline.default.hex}}", + italic = true, + }) + + set_hl_multiple({ "TSMethod", "Method" }, { + fg = "{{colors.tertiary.default.hex}}", + }) + + set_hl_multiple({ "TSFunction", "Function" }, { + fg = "{{colors.secondary.default.hex}}", + }) + + set_hl_multiple({ "Keyword", "TSKeyword", "TSKeywordFunction", "TSRepeat" }, { + fg = "{{colors.inverse_primary.default.hex}}", + }) + + -- Автоматическая перезагрузка темы при изменении файла конфигурации + local theme_file_path = vim.fn.stdpath("config") .. "/lua/plugins/dankcolors.lua" + if not _G._matugen_theme_watcher then + local uv = vim.uv or vim.loop + _G._matugen_theme_watcher = uv.new_fs_event() + _G._matugen_theme_watcher:start( + theme_file_path, + {}, + vim.schedule_wrap(function() + -- Перезагружаем файл и повторно вызываем конфиг плагина + local ok, new_spec = pcall(dofile, theme_file_path) + if ok and new_spec and new_spec[1] and new_spec[1].config then + new_spec[1].config() + vim.notify("Matugen theme reloaded", vim.log.levels.INFO) + end + end) + ) + end + end, + }, +} diff --git a/config/matugen/templates/niri-colors.kdl b/config/matugen/templates/niri-colors.kdl new file mode 100644 index 0000000..bf721e9 --- /dev/null +++ b/config/matugen/templates/niri-colors.kdl @@ -0,0 +1,29 @@ +layout { + focus-ring { + active-color "{{colors.primary.default.hex}}" + inactive-color "{{colors.outline.default.hex}}" + urgent-color "{{colors.error.default.hex}}" + } + + border { + active-color "{{colors.primary.default.hex}}" + inactive-color "{{colors.outline.default.hex}}" + urgent-color "{{colors.error.default.hex}}" + } + + shadow { + off + color "{{colors.shadow.default.hex}}70" + } + + tab-indicator { + active-color "{{colors.primary.default.hex}}" + inactive-color "{{colors.outline.default.hex}}" + urgent-color "{{colors.error.default.hex}}" + } + + insert-hint { + color "{{colors.primary.default.hex}}80" + } +} + diff --git a/config/matugen/templates/nvim-colors.vim b/config/matugen/templates/nvim-colors.vim new file mode 100644 index 0000000..943a2dd --- /dev/null +++ b/config/matugen/templates/nvim-colors.vim @@ -0,0 +1,20 @@ +hi Comment guibg=None guifg={{ base16.base03.dark.hex }} + +hi Delimiter guibg=None guifg={{ base16.base05.dark.hex }} +hi Operator guibg=None guifg={{ base16.base05.dark.hex }} + +hi Todo guibg=None guifg={{ base16.base06.dark.hex }} + +hi Identifier guibg=None guifg={{ base16.base08.dark.hex }} +hi Constant guibg=None guifg={{ base16.base09.dark.hex }} +hi Type guibg=None guifg={{ base16.base0a.dark.hex }} +hi String guibg=None guifg={{ base16.base0b.dark.hex }} +hi Special guibg=None guifg={{ base16.base0c.dark.hex }} +hi PreProc guibg=None guifg={{ base16.base0c.dark.hex }} +hi Function guibg=None guifg={{ base16.base0d.dark.hex }} +hi Statement guibg=None guifg={{ base16.base0e.dark.hex }} + +hi Error guibg={{ colors.error_container.dark.hex }} guifg={{ colors.on_error_container.dark.hex }} +hi StatusLine guibg={{ colors.primary.dark.hex }} guifg={{ colors.on_primary.dark.hex }} +hi StatusLineNC guibg={{ colors.primary_container.dark.hex }} guifg={{ colors.on_primary_container.dark.hex }} +hi Selection guibg={{ base16.base02.dark.hex }} diff --git a/config/matugen/templates/obsidian.css b/config/matugen/templates/obsidian.css new file mode 100644 index 0000000..eb2618b --- /dev/null +++ b/config/matugen/templates/obsidian.css @@ -0,0 +1,140 @@ +/* Matugen Obsidian Dynamic Colors Snippet + * Place output in: /.obsidian/snippets/matugen.css + * Then enable it in: Settings → Appearance → CSS Snippets + */ + +.theme-dark, .theme-light { + + /* ── Material You RGB helpers ──────────────────────────── */ + --mat-bg-rgb: {{colors.background.default.red}}, {{colors.background.default.green}}, {{colors.background.default.blue}}; + --mat-surface-rgb: {{colors.surface.default.red}}, {{colors.surface.default.green}}, {{colors.surface.default.blue}}; + --mat-on-surface-rgb: {{colors.on_surface.default.red}}, {{colors.on_surface.default.green}}, {{colors.on_surface.default.blue}}; + --mat-primary-rgb: {{colors.primary.default.red}}, {{colors.primary.default.green}}, {{colors.primary.default.blue}}; + --mat-on-primary-rgb: {{colors.on_primary.default.red}}, {{colors.on_primary.default.green}}, {{colors.on_primary.default.blue}}; + + /* ── Core Backgrounds ──────────────────────────────────── */ + --background-primary: {{colors.background.default.hex}}; + --background-primary-alt: {{colors.surface_dim.default.hex}}; + --background-secondary: {{colors.surface_container_low.default.hex}}; + --background-secondary-alt: {{colors.surface_container.default.hex}}; + + /* ── Titlebar ──────────────────────────────────────────── */ + --titlebar-background: {{colors.surface_dim.default.hex}}; + --titlebar-background-focused: {{colors.surface_container_low.default.hex}}; + --titlebar-text-color: {{colors.on_surface.default.hex}}; + + /* ── Borders & Dividers ────────────────────────────────── */ + --background-modifier-border: {{colors.outline_variant.default.hex}}; + --background-modifier-border-focus: {{colors.outline.default.hex}}; + --background-modifier-border-hover: {{colors.outline.default.hex}}; + + /* ── Text Colors ───────────────────────────────────────── */ + --text-normal: {{colors.on_surface.default.hex}}; + --text-muted: {{colors.on_surface_variant.default.hex}}; + --text-faint: {{colors.outline.default.hex}}; + --text-on-accent: {{colors.on_primary.default.hex}}; + --text-selection: rgba({{colors.primary.default.red}}, {{colors.primary.default.green}}, {{colors.primary.default.blue}}, 0.25); + + /* ── Accent & Interactive ──────────────────────────────── */ + --interactive-accent: {{colors.primary.default.hex}}; + --interactive-accent-hover: {{colors.primary_container.default.hex}}; + --interactive-accent-rgb: {{colors.primary.default.red}}, {{colors.primary.default.green}}, {{colors.primary.default.blue}}; + --text-accent: {{colors.primary.default.hex}}; + --text-accent-hover: {{colors.primary_container.default.hex}}; + + /* ── Hover & Active Modifiers ──────────────────────────── */ + --background-modifier-hover: rgba(var(--mat-on-surface-rgb), 0.06); + --background-modifier-active-hover: rgba(var(--mat-primary-rgb), 0.15); + --background-modifier-success: {{colors.tertiary_container.default.hex}}; + --background-modifier-error: {{colors.error_container.default.hex}}; + --background-modifier-error-hover: {{colors.error.default.hex}}; + + /* ── Obsidian Color Scale (--color-base-XX) ────────────── */ + --color-base-00: {{colors.background.default.hex}}; + --color-base-05: {{colors.surface_dim.default.hex}}; + --color-base-10: {{colors.surface_container_lowest.default.hex}}; + --color-base-20: {{colors.surface_container_low.default.hex}}; + --color-base-25: {{colors.surface_container.default.hex}}; + --color-base-30: {{colors.surface_container_high.default.hex}}; + --color-base-35: {{colors.surface_container_highest.default.hex}}; + --color-base-40: {{colors.outline_variant.default.hex}}; + --color-base-50: {{colors.outline.default.hex}}; + --color-base-60: {{colors.on_surface_variant.default.hex}}; + --color-base-70: {{colors.on_surface.default.hex}}; + --color-base-100: {{colors.inverse_surface.default.hex}}; + + /* ── Semantic Colors ───────────────────────────────────── */ + --color-red: {{colors.error.default.hex}}; + --color-orange: {{colors.tertiary.default.hex}}; + --color-yellow: {{colors.secondary.default.hex}}; + --color-green: {{colors.tertiary_container.default.hex}}; + --color-cyan: {{colors.secondary_container.default.hex}}; + --color-blue: {{colors.primary.default.hex}}; + --color-purple: {{colors.secondary.default.hex}}; + --color-pink: {{colors.tertiary.default.hex}}; + + /* ── Headings ──────────────────────────────────────────── */ + --h1-color: {{colors.primary.default.hex}}; + --h2-color: {{colors.primary.default.hex}}; + --h3-color: {{colors.secondary.default.hex}}; + --h4-color: {{colors.tertiary.default.hex}}; + --h5-color: {{colors.on_surface_variant.default.hex}}; + --h6-color: {{colors.outline.default.hex}}; + + /* ── Links ─────────────────────────────────────────────── */ + --link-color: {{colors.primary.default.hex}}; + --link-color-hover: {{colors.on_primary_container.default.hex}}; + --link-external-color: {{colors.tertiary.default.hex}}; + --link-unresolved-color: {{colors.outline.default.hex}}; + + /* ── Tags ──────────────────────────────────────────────── */ + --tag-color: {{colors.on_primary_container.default.hex}}; + --tag-background: {{colors.primary_container.default.hex}}; + --tag-border-color: {{colors.primary.default.hex}}; + --tag-color-hover: {{colors.on_primary.default.hex}}; + --tag-background-hover: {{colors.primary.default.hex}}; + + /* ── Checkboxes ────────────────────────────────────────── */ + --checkbox-color: {{colors.primary.default.hex}}; + --checkbox-color-hover: {{colors.primary_container.default.hex}}; + --checkbox-border-color: {{colors.outline.default.hex}}; + --checkbox-marker-color: {{colors.on_primary.default.hex}}; + + /* ── Code Blocks ───────────────────────────────────────── */ + --code-background: {{colors.surface_container_low.default.hex}}; + --code-normal: {{colors.on_surface.default.hex}}; + --code-comment: {{colors.outline.default.hex}}; + --code-function: {{colors.primary.default.hex}}; + --code-important: {{colors.error.default.hex}}; + --code-keyword: {{colors.secondary.default.hex}}; + --code-operator: {{colors.tertiary.default.hex}}; + --code-property: {{colors.on_surface_variant.default.hex}}; + --code-punctuation: {{colors.outline_variant.default.hex}}; + --code-string: {{colors.tertiary.default.hex}}; + --code-tag: {{colors.error.default.hex}}; + --code-value: {{colors.secondary.default.hex}}; + + /* ── Scrollbar ─────────────────────────────────────────── */ + --scrollbar-thumb-bg: rgba(var(--mat-on-surface-rgb), 0.12); + --scrollbar-active-thumb-bg: rgba(var(--mat-on-surface-rgb), 0.25); + --scrollbar-bg: transparent; + + /* ── Inputs ────────────────────────────────────────────── */ + --input-shadow: none; + --input-shadow-hover: 0 0 0 2px {{colors.outline.default.hex}}; + + /* ── Graph View ────────────────────────────────────────── */ + --graph-node: {{colors.primary.default.hex}}; + --graph-node-unresolved: {{colors.outline.default.hex}}; + --graph-node-focused: {{colors.on_primary_container.default.hex}}; + --graph-node-tag: {{colors.secondary.default.hex}}; + --graph-node-attachment: {{colors.tertiary.default.hex}}; + --graph-line: {{colors.outline_variant.default.hex}}; + --graph-background: {{colors.background.default.hex}}; + +} + +/* ── Active line highlight ─────────────────────────────────── */ +.cm-active { + background-color: rgba(var(--mat-on-surface-rgb), 0.03) !important; +} \ No newline at end of file diff --git a/config/matugen/templates/opencode-colors.json b/config/matugen/templates/opencode-colors.json new file mode 100644 index 0000000..2d46be8 --- /dev/null +++ b/config/matugen/templates/opencode-colors.json @@ -0,0 +1,222 @@ +{ + "$schema": "https://opencode.ai/theme.json", + "defs": { + "primary": "{{colors.primary.default.hex}}", + "on_primary": "{{colors.on_primary.default.hex}}", + "secondary": "{{colors.secondary.default.hex}}", + "on_secondary": "{{colors.on_secondary.default.hex}}", + "surface": "{{colors.surface.default.hex}}", + "on_surface": "{{colors.on_surface.default.hex}}", + "surface_variant": "{{colors.surface_variant.default.hex}}", + "on_surface_variant": "{{colors.on_surface_variant.default.hex}}", + "background": "{{colors.surface.default.hex}}", + "on_background": "{{colors.on_surface.default.hex}}", + "error": "{{colors.error.default.hex}}", + "on_error": "{{colors.on_error.default.hex}}", + "outline": "{{colors.outline.default.hex}}", + "outline_variant": "{{colors.outline_variant.default.hex}}" + }, + "theme": { + "primary": { + "dark": "primary", + "light": "primary" + }, + "secondary": { + "dark": "secondary", + "light": "secondary" + }, + "accent": { + "dark": "primary", + "light": "primary" + }, + "error": { + "dark": "error", + "light": "error" + }, + "warning": { + "dark": "secondary", + "light": "secondary" + }, + "success": { + "dark": "secondary", + "light": "secondary" + }, + "info": { + "dark": "primary", + "light": "primary" + }, + "text": { + "dark": "on_surface", + "light": "on_surface" + }, + "textMuted": { + "dark": "on_surface_variant", + "light": "on_surface_variant" + }, + "background": { + "dark": "background", + "light": "background" + }, + "backgroundPanel": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "backgroundElement": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "border": { + "dark": "outline_variant", + "light": "outline_variant" + }, + "borderActive": { + "dark": "outline", + "light": "outline" + }, + "borderSubtle": { + "dark": "outline_variant", + "light": "outline_variant" + }, + "diffAdded": { + "dark": "secondary", + "light": "secondary" + }, + "diffRemoved": { + "dark": "error", + "light": "error" + }, + "diffContext": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "diffHunkHeader": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "diffHighlightAdded": { + "dark": "secondary", + "light": "secondary" + }, + "diffHighlightRemoved": { + "dark": "error", + "light": "error" + }, + "diffAddedBg": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "diffRemovedBg": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "diffContextBg": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "diffLineNumber": { + "dark": "on_surface_variant", + "light": "on_surface_variant" + }, + "diffAddedLineNumberBg": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "diffRemovedLineNumberBg": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "markdownText": { + "dark": "on_surface", + "light": "on_surface" + }, + "markdownHeading": { + "dark": "primary", + "light": "primary" + }, + "markdownLink": { + "dark": "primary", + "light": "primary" + }, + "markdownLinkText": { + "dark": "secondary", + "light": "secondary" + }, + "markdownCode": { + "dark": "secondary", + "light": "secondary" + }, + "markdownBlockQuote": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "markdownEmph": { + "dark": "secondary", + "light": "secondary" + }, + "markdownStrong": { + "dark": "primary", + "light": "primary" + }, + "markdownHorizontalRule": { + "dark": "surface_variant", + "light": "surface_variant" + }, + "markdownListItem": { + "dark": "primary", + "light": "primary" + }, + "markdownListEnumeration": { + "dark": "secondary", + "light": "secondary" + }, + "markdownImage": { + "dark": "primary", + "light": "primary" + }, + "markdownImageText": { + "dark": "secondary", + "light": "secondary" + }, + "markdownCodeBlock": { + "dark": "on_surface", + "light": "on_surface" + }, + "syntaxComment": { + "dark": "on_surface_variant", + "light": "on_surface_variant" + }, + "syntaxKeyword": { + "dark": "primary", + "light": "primary" + }, + "syntaxFunction": { + "dark": "secondary", + "light": "secondary" + }, + "syntaxVariable": { + "dark": "on_surface", + "light": "on_surface" + }, + "syntaxString": { + "dark": "secondary", + "light": "secondary" + }, + "syntaxNumber": { + "dark": "secondary", + "light": "secondary" + }, + "syntaxType": { + "dark": "primary", + "light": "primary" + }, + "syntaxOperator": { + "dark": "on_surface", + "light": "on_surface" + }, + "syntaxPunctuation": { + "dark": "on_surface_variant", + "light": "on_surface_variant" + } + } +} + diff --git a/config/matugen/templates/prismlauncher.json b/config/matugen/templates/prismlauncher.json new file mode 100644 index 0000000..798ab45 --- /dev/null +++ b/config/matugen/templates/prismlauncher.json @@ -0,0 +1,21 @@ +{ + "colors": { + "AlternateBase": "{{colors.surface.default.hex}}", + "Base": "{{colors.surface.default.hex}}", + "BrightText": "{{colors.secondary.default.hex}}", + "Button": "{{colors.surface_variant.default.hex}}", + "ButtonText": "{{colors.on_surface.default.hex}}", + "Highlight": "{{colors.primary.default.hex}}", + "HighlightedText": "{{colors.on_primary.default.hex}}", + "Link": "{{colors.primary.default.hex}}", + "Text": "{{colors.on_surface.default.hex}}", + "ToolTipBase": "{{colors.surface_variant.default.hex}}", + "ToolTipText": "{{colors.on_surface.default.hex}}", + "Window": "{{colors.surface.default.hex}}", + "WindowText": "{{colors.on_surface.default.hex}}", + "fadeAmount": 0.5, + "fadeColor": "{{colors.surface_variant.default.hex}}" + }, + "name": "Matugen", + "widgets": "Fusion" +} diff --git a/config/matugen/templates/pywalfox-colors.json b/config/matugen/templates/pywalfox-colors.json new file mode 100644 index 0000000..6a67aec --- /dev/null +++ b/config/matugen/templates/pywalfox-colors.json @@ -0,0 +1,22 @@ +{ + "wallpaper": "{{image}}", + "alpha": "100", + "colors": { + "color0": "{{colors.surface.dark.hex}}", + "color1": "", + "color2": "", + "color3": "{{colors.primary.default.hex}}", + "color4": "", + "color5": "{{colors.secondary.default.hex}}", + "color6": "", + "color7": "{{colors.surface_container_highest.default.hex}}", + "color8": "", + "color9": "", + "color10": "{{colors.primary.default.hex}}", + "color11": "", + "color12": "", + "color13": "{{colors.secondary.default.hex}}", + "color14": "", + "color15": "{{colors.on_background.default.hex}}" + } +} diff --git a/config/matugen/templates/qtct-colors.conf b/config/matugen/templates/qtct-colors.conf new file mode 100644 index 0000000..5d35cb4 --- /dev/null +++ b/config/matugen/templates/qtct-colors.conf @@ -0,0 +1,5 @@ +[ColorScheme] +active_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.scrim.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}} +disabled_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.scrim.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}} +inactive_colors={{colors.on_background.default.hex}}, {{colors.surface.default.hex}}, #ffffff, #cacaca, #9f9f9f, #b8b8b8, {{colors.on_background.default.hex}}, #ffffff, {{colors.on_surface.default.hex}}, {{colors.background.default.hex}}, {{colors.background.default.hex}}, {{colors.shadow.default.hex}}, {{colors.primary_container.default.hex}}, {{colors.on_primary_container.default.hex}}, {{colors.secondary.default.hex}}, {{colors.primary.default.hex}}, {{colors.surface.default.hex}}, {{colors.scrim.default.hex}}, {{colors.surface.default.hex}}, {{colors.on_surface.default.hex}}, {{colors.secondary.default.hex}} + diff --git a/config/matugen/templates/quickshell.json b/config/matugen/templates/quickshell.json new file mode 100644 index 0000000..dce17ae --- /dev/null +++ b/config/matugen/templates/quickshell.json @@ -0,0 +1,11 @@ +{ + "md3": {<* for name, color in colors *> + "{{ name }}": "{{ color.default.hex }}"<* if {{ loop.last }} *><* else *>,<* endif *><* endfor *> + }, + "palette": {<* for name, palette in palettes *><* for shade, color in palette *> + "{{ name }}{{ shade }}": "{{ color.hex }}"<* if {{ loop.last }} *><* else *>,<* endif *><* endfor *><* if {{ loop.last }} *><* else *>,<* endif *><* endfor *> + }, + "base16": {<* for name, color in base16 *> + "{{ name }}": "{{ color.default.hex }}"<* if {{ loop.last }} *><* else *>,<* endif *><* endfor *> + } +} diff --git a/config/matugen/templates/quickshell.qml b/config/matugen/templates/quickshell.qml new file mode 100644 index 0000000..09933d9 --- /dev/null +++ b/config/matugen/templates/quickshell.qml @@ -0,0 +1,7 @@ +import QtQuick + +QtObject { + <* for name, value in colors *> + readonly property color {{name}}: "{{value.default.hex}}" + <* endfor *> +} diff --git a/config/matugen/templates/rmpc/nix-hm-example/README.md b/config/matugen/templates/rmpc/nix-hm-example/README.md new file mode 100644 index 0000000..f4cd7b3 --- /dev/null +++ b/config/matugen/templates/rmpc/nix-hm-example/README.md @@ -0,0 +1,38 @@ +# Example Nix Home Manager Module + +This module includes matugen and configures rmpc and cava. + +To use, import it in your `home.nix`: + +``` + imports = [ + ./matugen + ... + ]; +``` + +## How does it work? + +The module: + +- creates a `~/.config/matugen/config.toml` preset with templates for rmpc and cava. +This tells Matugen that when it runs, it should process the files in `./templates` +and store the results into the appropriate target directories. +- installs the `./templates/` folder and it contents at `~/.config/matugen/templates/` +- imports and enables Matugen + +## Notes + +- Rmpc needs to be enabled in your NixOS/Home Manager modules separately. +- `~/.config/rmpc/config.ron` needs to be edited to use the theme: +``` + theme: Some("matugen"), +``` +- I am yet to figure out if there's a way to modularize the rmpc config, such +that the UI layout would not need to be altered just because the colors change. +As such, if the layout included here is not to your liking, you'd need to edit +`./templates/rmpc.ron` accodringly. +- In this theme, cava is embedded in rmpc. While rmpc allows us to set the bar +colors in three different ways (single, rows, gradient), `horizontal_gradient` +does not appear to be supported at the moment. +See [Cava/Theming](https://rmpc.mierak.dev/next/configuration/cava/#theming) diff --git a/config/matugen/templates/rmpc/nix-hm-example/matugen/default.nix b/config/matugen/templates/rmpc/nix-hm-example/matugen/default.nix new file mode 100644 index 0000000..5e0ea4f --- /dev/null +++ b/config/matugen/templates/rmpc/nix-hm-example/matugen/default.nix @@ -0,0 +1,40 @@ +{inputs, config, ...}: +let + cfgdir = "${config.home.homeDirectory}/.config"; +in { + # Make sure to include matugen in your flake.nix inputs: + # ```nix + # { + # ... + # inputs = { + # ... + # matugen.url = "github:/InioX/Matugen"; + # }; + # ... + # } + # ``` + imports = [ + inputs.matugen.nixosModules.default + ]; + + home.file."matugen/templates" = { + source = ./templates; + target = "${cfgdir}/matugen/templates"; + recursive = true; + }; + + home.file.".config/matugen/config.toml".text = '' +[config] + +[templates.cava] +input_path = '${./templates/cava.ini}' +output_path = '${cfgdir}/cava/themes/matugen.ini' +post_hook = 'pkill -USR1 cava' + +[templates.rmpc] +input_path = '${./templates/rmpc.ron}' +output_path = '${cfgdir}/rmpc/themes/matugen.ron' + ''; + + programs.matugen.enable = true; +} diff --git a/config/matugen/templates/rmpc/nix-hm-example/matugen/templates/cava.ini b/config/matugen/templates/rmpc/nix-hm-example/matugen/templates/cava.ini new file mode 100644 index 0000000..b3222a5 --- /dev/null +++ b/config/matugen/templates/rmpc/nix-hm-example/matugen/templates/cava.ini @@ -0,0 +1,17 @@ +[color] +background = 'default' +foreground = '{{colors.primary.default.hex}}' + +; gradient = 0 +gradient = 1 +gradient_color_1 = '{{colors.primary_container.default.hex}}' +gradient_color_2 = '{{colors.primary.default.hex}}' +gradient_color_3 = '{{colors.on_primary_container.default.hex}}' + +horizontal_gradient = 0 +; horizontal_gradient = 1 +horizontal_gradient_color_1 = '{{colors.primary_container.default.hex}}' +horizontal_gradient_color_2 = '{{colors.primary.default.hex}}' +horizontal_gradient_color_3 = '{{colors.on_primary_container.default.hex}}' +horizontal_gradient_color_4 = '{{colors.primary.default.hex}}' +horizontal_gradient_color_5 = '{{colors.primary_container.default.hex}}' diff --git a/config/matugen/templates/rmpc/nix-hm-example/matugen/templates/rmpc.ron b/config/matugen/templates/rmpc/nix-hm-example/matugen/templates/rmpc.ron new file mode 100644 index 0000000..aab7d0d --- /dev/null +++ b/config/matugen/templates/rmpc/nix-hm-example/matugen/templates/rmpc.ron @@ -0,0 +1,207 @@ +#![enable(implicit_some)] +#![enable(unwrap_newtypes)] +#![enable(unwrap_variant_newtypes)] +( + default_album_art_path: None, + show_song_table_header: true, + draw_borders: true, + format_tag_separator: " | ", + browser_column_widths: [20, 38, 42], + background_color: None, + text_color: Some("{{ colors.secondary.default.hex }}"), + header_background_color: None, + modal_background_color: None, + modal_backdrop: false, + preview_label_style: (fg: "{{ colors.primary.default.hex }}"), + preview_metadata_group_style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold"), + tab_bar: ( + active_style: (fg: "{{ colors.on_secondary.default.hex }}", bg: "{{ colors.secondary.default.hex }}", modifiers: "Bold"), + inactive_style: (fg: "{{ colors.secondary.default.hex }}", modifiers: "Bold"), + ), + highlighted_item_style: (fg: "{{ colors.secondary.default.hex }}", modifiers: "Bold"), + current_item_style: (fg: "{{ colors.secondary.default.hex }}", bg: "{{ colors.inverse_primary.default.hex }}", modifiers: "Bold"), + borders_style: (fg: "{{ colors.secondary.default.hex }}"), + highlight_border_style: (fg: "{{ colors.secondary.default.hex }}"), + symbols: ( + song: "S", + dir: "D", + playlist: "P", + marker: "M", + ellipsis: "...", + song_style: None, + dir_style: None, + playlist_style: None, + ), + level_styles: ( + info: (fg: "blue", bg: "black"), + warn: (fg: "yellow", bg: "black"), + error: (fg: "red", bg: "black"), + debug: (fg: "light_green", bg: "black"), + trace: (fg: "magenta", bg: "black"), + ), + progress_bar: ( + symbols: ["[", "-", ">", " ", "]"], + track_style: ( + fg: "{{ colors.on_secondary.default.hex }}", + ), + elapsed_style: ( + fg: "{{ colors.secondary.default.hex }}", + ), + thumb_style: ( + fg: "{{ colors.secondary.default.hex }}", + ), + use_track_when_empty: false, + ), + scrollbar: ( + symbols: ["│", "█", "▲", "▼"], + track_style: (fg: "{{ colors.secondary.default.hex }}"), + ends_style: (fg: "{{ colors.secondary_fixed.default.hex }}"), + thumb_style: (fg: "{{ colors.primary.default.hex }}"), + ), + song_table_format: [ + ( + prop: ( + kind: Property(Artist), + style: (fg: "{{ colors.primary_fixed.default.hex }}"), + default: (kind: Text("Unknown"), style: (fg: "{{ colors.primary_fixed.default.hex }}")) + ), + width: "20%", + ), + ( + prop: ( + kind: Property(Title), + style: (fg: "{{ colors.primary.default.hex }}"), + default: (kind: Text("Unknown"), style: (fg: "{{ colors.primary_fixed.default.hex }}")) + ), + width: "35%", + ), + ( + prop: (kind: Property(Album), style: (fg: "{{ colors.primary_fixed.default.hex }}"), + default: (kind: Text("Unknown Album"), style: (fg: "{{ colors.primary_fixed.default.hex }}")) + ), + width: "30%", + ), + ( + prop: (kind: Property(Duration), style: (fg: "{{ colors.primary.default.hex }}"), + default: (kind: Text("-"), style: (fg: "{{ colors.primary_fixed.default.hex }}")) + ), + width: "15%", + alignment: Right, + ), + ], + components: {}, + layout: Split( + direction: Vertical, + panes: [ + ( + pane: Pane(Header), + size: "2", + ), + ( + pane: Pane(Tabs), + size: "3", + ), + ( + pane: Pane(TabContent), + size: "100%", + ), + ( + pane: Pane(ProgressBar), + size: "1", + ), + ], + ), + header: ( + rows: [ + ( + left: [ + (kind: Text("["), style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold")), + ( + kind: Property(Status(StateV2(playing_label: "Playing", paused_label: "Paused", stopped_label: "Stopped"))), + style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold") + ), + (kind: Text("]"), style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold")) + ], + center: [ + (kind: Property(Song(Title)), style: (modifiers: "Bold"), + default: (kind: Text("No Song"), style: (modifiers: "Bold")) + ) + ], + right: [ + (kind: Property(Widget(ScanStatus)), style: (fg: "{{ colors.primary.default.hex }}")), + (kind: Property(Widget(Volume)), style: (fg: "{{ colors.primary.default.hex }}")) + ] + ), + ( + left: [ + (kind: Property(Status(Elapsed))), + (kind: Text(" / ")), + (kind: Property(Status(Duration))), + (kind: Text(" (")), + (kind: Property(Status(Bitrate))), + (kind: Text(" kbps)")) + ], + center: [ + (kind: Property(Song(Artist)), style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold"), + default: (kind: Text("Unknown"), style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold")) + ), + (kind: Text(" - ")), + (kind: Property(Song(Album)), + style: (fg: "{{ colors.primary.default.hex }}"), + default: (kind: Text("Unknown Album")) + ) + ], + right: [ + ( + kind: Property(Widget(States( + active_style: (fg: "{{ colors.primary.default.hex }}", modifiers: "Bold"), + separator_style: (fg: "{{ colors.primary.default.hex }}"))) + ), + style: (fg: "{{ colors.secondary_fixed_dim.default.hex }}") + ), + ] + ), + ], + ), + browser_song_format: [ + ( + kind: Group([ + (kind: Property(Track), style: (fg: "{{ colors.primary.default.hex }}")), + (kind: Text(" ")), + ]) + ), + ( + kind: Group([ + (kind: Property(Artist), style: (fg: "{{ colors.primary.default.hex }}")), + (kind: Text(" - ")), + (kind: Property(Title), style: (fg: "{{ colors.primary.default.hex }}")), + ]), + default: (kind: Property(Filename), style: (fg: "{{ colors.primary.default.hex }}")) + ), + ], + lyrics: ( + timestamp: false + ), + cava: ( + + bar_width: 2, // width of a single bar in columns + bar_spacing: 1, // free space between bars in columns + + orientation: Bottom, + + // A simple color gradient. + // This is a map where keys are percent values of the height where the + // color starts. After that it is linearly interpolated towards the next + // value. Keys must be between 0 and 100 and if the first or last key + // are not 0 and 100 respectively, the lowest and highest value will be + // used as 0 and 100. + // Only hex and RGB colors are supported here and your terminal must + // support them as well! + // rmpc does not support `horizontal_gradient` (yet?) + bar_color: Gradient({ + 0: "{{colors.primary_container.default.hex}}", + 50: "{{colors.primary.default.hex}}", + 100: "{{colors.on_primary_container.default.hex}}" + }) + ), +) diff --git a/config/matugen/templates/rmpc/rmpc.ron b/config/matugen/templates/rmpc/rmpc.ron new file mode 100644 index 0000000..aab7d0d --- /dev/null +++ b/config/matugen/templates/rmpc/rmpc.ron @@ -0,0 +1,207 @@ +#![enable(implicit_some)] +#![enable(unwrap_newtypes)] +#![enable(unwrap_variant_newtypes)] +( + default_album_art_path: None, + show_song_table_header: true, + draw_borders: true, + format_tag_separator: " | ", + browser_column_widths: [20, 38, 42], + background_color: None, + text_color: Some("{{ colors.secondary.default.hex }}"), + header_background_color: None, + modal_background_color: None, + modal_backdrop: false, + preview_label_style: (fg: "{{ colors.primary.default.hex }}"), + preview_metadata_group_style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold"), + tab_bar: ( + active_style: (fg: "{{ colors.on_secondary.default.hex }}", bg: "{{ colors.secondary.default.hex }}", modifiers: "Bold"), + inactive_style: (fg: "{{ colors.secondary.default.hex }}", modifiers: "Bold"), + ), + highlighted_item_style: (fg: "{{ colors.secondary.default.hex }}", modifiers: "Bold"), + current_item_style: (fg: "{{ colors.secondary.default.hex }}", bg: "{{ colors.inverse_primary.default.hex }}", modifiers: "Bold"), + borders_style: (fg: "{{ colors.secondary.default.hex }}"), + highlight_border_style: (fg: "{{ colors.secondary.default.hex }}"), + symbols: ( + song: "S", + dir: "D", + playlist: "P", + marker: "M", + ellipsis: "...", + song_style: None, + dir_style: None, + playlist_style: None, + ), + level_styles: ( + info: (fg: "blue", bg: "black"), + warn: (fg: "yellow", bg: "black"), + error: (fg: "red", bg: "black"), + debug: (fg: "light_green", bg: "black"), + trace: (fg: "magenta", bg: "black"), + ), + progress_bar: ( + symbols: ["[", "-", ">", " ", "]"], + track_style: ( + fg: "{{ colors.on_secondary.default.hex }}", + ), + elapsed_style: ( + fg: "{{ colors.secondary.default.hex }}", + ), + thumb_style: ( + fg: "{{ colors.secondary.default.hex }}", + ), + use_track_when_empty: false, + ), + scrollbar: ( + symbols: ["│", "█", "▲", "▼"], + track_style: (fg: "{{ colors.secondary.default.hex }}"), + ends_style: (fg: "{{ colors.secondary_fixed.default.hex }}"), + thumb_style: (fg: "{{ colors.primary.default.hex }}"), + ), + song_table_format: [ + ( + prop: ( + kind: Property(Artist), + style: (fg: "{{ colors.primary_fixed.default.hex }}"), + default: (kind: Text("Unknown"), style: (fg: "{{ colors.primary_fixed.default.hex }}")) + ), + width: "20%", + ), + ( + prop: ( + kind: Property(Title), + style: (fg: "{{ colors.primary.default.hex }}"), + default: (kind: Text("Unknown"), style: (fg: "{{ colors.primary_fixed.default.hex }}")) + ), + width: "35%", + ), + ( + prop: (kind: Property(Album), style: (fg: "{{ colors.primary_fixed.default.hex }}"), + default: (kind: Text("Unknown Album"), style: (fg: "{{ colors.primary_fixed.default.hex }}")) + ), + width: "30%", + ), + ( + prop: (kind: Property(Duration), style: (fg: "{{ colors.primary.default.hex }}"), + default: (kind: Text("-"), style: (fg: "{{ colors.primary_fixed.default.hex }}")) + ), + width: "15%", + alignment: Right, + ), + ], + components: {}, + layout: Split( + direction: Vertical, + panes: [ + ( + pane: Pane(Header), + size: "2", + ), + ( + pane: Pane(Tabs), + size: "3", + ), + ( + pane: Pane(TabContent), + size: "100%", + ), + ( + pane: Pane(ProgressBar), + size: "1", + ), + ], + ), + header: ( + rows: [ + ( + left: [ + (kind: Text("["), style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold")), + ( + kind: Property(Status(StateV2(playing_label: "Playing", paused_label: "Paused", stopped_label: "Stopped"))), + style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold") + ), + (kind: Text("]"), style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold")) + ], + center: [ + (kind: Property(Song(Title)), style: (modifiers: "Bold"), + default: (kind: Text("No Song"), style: (modifiers: "Bold")) + ) + ], + right: [ + (kind: Property(Widget(ScanStatus)), style: (fg: "{{ colors.primary.default.hex }}")), + (kind: Property(Widget(Volume)), style: (fg: "{{ colors.primary.default.hex }}")) + ] + ), + ( + left: [ + (kind: Property(Status(Elapsed))), + (kind: Text(" / ")), + (kind: Property(Status(Duration))), + (kind: Text(" (")), + (kind: Property(Status(Bitrate))), + (kind: Text(" kbps)")) + ], + center: [ + (kind: Property(Song(Artist)), style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold"), + default: (kind: Text("Unknown"), style: (fg: "{{ colors.tertiary.default.hex }}", modifiers: "Bold")) + ), + (kind: Text(" - ")), + (kind: Property(Song(Album)), + style: (fg: "{{ colors.primary.default.hex }}"), + default: (kind: Text("Unknown Album")) + ) + ], + right: [ + ( + kind: Property(Widget(States( + active_style: (fg: "{{ colors.primary.default.hex }}", modifiers: "Bold"), + separator_style: (fg: "{{ colors.primary.default.hex }}"))) + ), + style: (fg: "{{ colors.secondary_fixed_dim.default.hex }}") + ), + ] + ), + ], + ), + browser_song_format: [ + ( + kind: Group([ + (kind: Property(Track), style: (fg: "{{ colors.primary.default.hex }}")), + (kind: Text(" ")), + ]) + ), + ( + kind: Group([ + (kind: Property(Artist), style: (fg: "{{ colors.primary.default.hex }}")), + (kind: Text(" - ")), + (kind: Property(Title), style: (fg: "{{ colors.primary.default.hex }}")), + ]), + default: (kind: Property(Filename), style: (fg: "{{ colors.primary.default.hex }}")) + ), + ], + lyrics: ( + timestamp: false + ), + cava: ( + + bar_width: 2, // width of a single bar in columns + bar_spacing: 1, // free space between bars in columns + + orientation: Bottom, + + // A simple color gradient. + // This is a map where keys are percent values of the height where the + // color starts. After that it is linearly interpolated towards the next + // value. Keys must be between 0 and 100 and if the first or last key + // are not 0 and 100 respectively, the lowest and highest value will be + // used as 0 and 100. + // Only hex and RGB colors are supported here and your terminal must + // support them as well! + // rmpc does not support `horizontal_gradient` (yet?) + bar_color: Gradient({ + 0: "{{colors.primary_container.default.hex}}", + 50: "{{colors.primary.default.hex}}", + 100: "{{colors.on_primary_container.default.hex}}" + }) + ), +) diff --git a/config/matugen/templates/rofi-colors.rasi b/config/matugen/templates/rofi-colors.rasi new file mode 100644 index 0000000..e6506e2 --- /dev/null +++ b/config/matugen/templates/rofi-colors.rasi @@ -0,0 +1,47 @@ +* { + primary: {{colors.primary.default.hex}}; + primary-fixed: {{colors.primary_fixed.default.hex}}; + primary-fixed-dim: {{colors.primary_fixed_dim.default.hex}}; + on-primary: {{colors.on_primary.default.hex}}; + on-primary-fixed: {{colors.on_primary_fixed.default.hex}}; + on-primary-fixed-variant: {{colors.on_primary_fixed_variant.default.hex}}; + primary-container: {{colors.primary_container.default.hex}}; + on-primary-container: {{colors.on_primary_container.default.hex}}; + secondary: {{colors.secondary.default.hex}}; + secondary-fixed: {{colors.secondary_fixed.default.hex}}; + secondary-fixed-dim: {{colors.secondary_fixed_dim.default.hex}}; + on-secondary: {{colors.on_secondary.default.hex}}; + on-secondary-fixed: {{colors.on_secondary_fixed.default.hex}}; + on-secondary-fixed-variant: {{colors.on_secondary_fixed_variant.default.hex}}; + secondary-container: {{colors.secondary_container.default.hex}}; + on-secondary-container: {{colors.on_secondary_container.default.hex}}; + tertiary: {{colors.tertiary.default.hex}}; + tertiary-fixed: {{colors.tertiary_fixed.default.hex}}; + tertiary-fixed-dim: {{colors.tertiary_fixed_dim.default.hex}}; + on-tertiary: {{colors.on_tertiary.default.hex}}; + on-tertiary-fixed: {{colors.on_tertiary_fixed.default.hex}}; + on-tertiary-fixed-variant: {{colors.on_tertiary_fixed_variant.default.hex}}; + tertiary-container: {{colors.tertiary_container.default.hex}}; + on-tertiary-container: {{colors.on_tertiary_container.default.hex}}; + error: {{colors.error.default.hex}}; + on-error: {{colors.on_error.default.hex}}; + error-container: {{colors.error_container.default.hex}}; + on-error-container: {{colors.on_error_container.default.hex}}; + surface: {{colors.surface.default.hex}}; + on-surface: {{colors.on_surface.default.hex}}; + on-surface-variant: {{colors.on_surface_variant.default.hex}}; + outline: {{colors.outline.default.hex}}; + outline-variant: {{colors.outline_variant.default.hex}}; + shadow: {{colors.shadow.default.hex}}; + scrim: {{colors.scrim.default.hex}}; + inverse-surface: {{colors.inverse_surface.default.hex}}; + inverse-on-surface: {{colors.inverse_on_surface.default.hex}}; + inverse-primary: {{colors.inverse_primary.default.hex}}; + surface-dim: {{colors.surface_dim.default.hex}}; + surface-bright: {{colors.surface_bright.default.hex}}; + surface-container-lowest: {{colors.surface_container_lowest.default.hex}}; + surface-container-low: {{colors.surface_container_low.default.hex}}; + surface-container: {{colors.surface_container.default.hex}}; + surface-container-high: {{colors.surface_container_high.default.hex}}; + surface-container-highest: {{colors.surface_container_highest.default.hex}}; +} diff --git a/config/matugen/templates/spicetify.ini b/config/matugen/templates/spicetify.ini new file mode 100644 index 0000000..3235f91 --- /dev/null +++ b/config/matugen/templates/spicetify.ini @@ -0,0 +1,25 @@ +[matugen] +main = {{ colors.background.default.hex_stripped }} +main-secondary = {{ colors.surface_bright.default.hex_stripped }} +accent = {{ colors.primary.default.hex_stripped }} +button = {{ colors.primary.default.hex_stripped }} +button-secondary = {{ colors.secondary.default.hex_stripped }} +button-active = {{ colors.primary_fixed.default.hex_stripped }} +button-disabled = {{ colors.surface_bright.default.hex_stripped }} + +misc = {{ colors.tertiary.default.hex_stripped }} +subtext = {{ colors.on_surface_variant.default.hex_stripped }} +text = {{ colors.on_background.default.hex_stripped }} +sidebar = {{ colors.surface.default.hex_stripped }} +player = {{ colors.surface.default.hex_stripped }} +card = {{ colors.surface_bright.default.hex_stripped }} +notification = {{ colors.surface.default.hex_stripped }} +notification-error = {{ colors.error.default.hex_stripped }} +shadow = {{ colors.shadow.default.hex_stripped }} + +nav-active-text = {{ colors.primary.default.hex_stripped }} +nav-active = {{ colors.primary.default.hex_stripped }} +tab-active = {{ colors.surface.default.hex_stripped }} +play-button = {{ colors.primary.default.hex_stripped }} + +playback-bar = {{ colors.primary_fixed.default.hex_stripped }} diff --git a/config/matugen/templates/starship-colors.toml b/config/matugen/templates/starship-colors.toml new file mode 100644 index 0000000..5086b27 --- /dev/null +++ b/config/matugen/templates/starship-colors.toml @@ -0,0 +1,226 @@ +format = ''' +$directory$git_branch$rust$python +$character''' + +palette = 'colors' + +[palettes.colors] +color1 = '{{colors.primary_fixed_dim.default.hex}}' +color2 = '{{colors.on_primary.default.hex}}' +color3 = '{{colors.on_surface_variant.default.hex}}' +color4 = '{{colors.surface_container.default.hex}}' +color5 = '{{colors.on_primary.default.hex}}' +color6 = '{{colors.surface_dim.default.hex}}' +color7 = '{{colors.surface.default.hex}}' +color8 = '{{colors.primary.default.hex}}' +color9 = '{{colors.tertiary.default.hex}}' + +# Prompt symbols +[character] +success_symbol = '[❯](bold green)' # The 'success_symbol' segment is being set to '➜' with the color 'bold green' +error_symbol = "[](@{error})" + +[aws] +symbol = " " + +[buf] +symbol = " " + +[bun] +symbol = " " + +[c] +symbol = " " + +[cpp] +symbol = " " + +[cmake] +symbol = " " + +[conda] +symbol = " " + +[crystal] +symbol = " " + +[dart] +symbol = " " + +[deno] +symbol = " " + +[directory] +read_only = " 󰌾" + +[docker_context] +symbol = " " + +[elixir] +symbol = " " + +[elm] +symbol = " " + +[fennel] +symbol = " " + +[fortran] +symbol = " " + +[fossil_branch] +symbol = " " + +[gcloud] +symbol = " " + +[git_branch] +symbol = " " + +[git_commit] +tag_symbol = '  ' + +[golang] +symbol = " " + +[gradle] +symbol = " " + +[guix_shell] +symbol = " " + +[haskell] +symbol = " " + +[haxe] +symbol = " " + +[hg_branch] +symbol = " " + +[hostname] +ssh_symbol = " " + +[java] +symbol = " " + +[julia] +symbol = " " + +[kotlin] +symbol = " " + +[lua] +symbol = " " + +[memory_usage] +symbol = "󰍛 " + +[meson] +symbol = "󰔷 " + +[nim] +symbol = "󰆥 " + +[nix_shell] +symbol = " " + +[nodejs] +symbol = " " + +[ocaml] +symbol = " " + +[os.symbols] +Alpaquita = " " +Alpine = " " +AlmaLinux = " " +Amazon = " " +Android = " " +AOSC = " " +Arch = " " +Artix = " " +CachyOS = " " +CentOS = " " +Debian = " " +DragonFly = " " +Elementary = " " +Emscripten = " " +EndeavourOS = " " +Fedora = " " +FreeBSD = " " +Garuda = "󰛓 " +Gentoo = " " +HardenedBSD = "󰞌 " +Illumos = "󰈸 " +Ios = "󰀷 " +Kali = " " +Linux = " " +Mabox = " " +Macos = " " +Manjaro = " " +Mariner = " " +MidnightBSD = " " +Mint = " " +NetBSD = " " +NixOS = " " +Nobara = " " +OpenBSD = "󰈺 " +openSUSE = " " +OracleLinux = "󰌷 " +Pop = " " +Raspbian = " " +Redhat = " " +RedHatEnterprise = " " +RockyLinux = " " +Redox = "󰀘 " +Solus = "󰠳 " +SUSE = " " +Ubuntu = " " +Unknown = " " +Void = " " +Windows = "󰍲 " +Zorin = " " + +[package] +symbol = "󰏗 " + +[perl] +symbol = " " + +[php] +symbol = " " + +[pijul_channel] +symbol = " " + +[pixi] +symbol = "󰏗 " + +[python] +symbol = " " + +[rlang] +symbol = "󰟔 " + +[ruby] +symbol = " " + +[rust] +symbol = "󱘗 " + +[scala] +symbol = " " + +[status] +symbol = " " + +[swift] +symbol = " " + +[xmake] +symbol = " " + +[zig] +symbol = " " + diff --git a/config/matugen/templates/steam.css b/config/matugen/templates/steam.css new file mode 100644 index 0000000..4a2211b --- /dev/null +++ b/config/matugen/templates/steam.css @@ -0,0 +1,30 @@ +/* +* GTK 4 Colors +* Converted from Matugen template +*/ + +:root { + --adw-accent-rgb: {{ colors.primary.default.red }} {{ colors.primary.default.green }} {{ colors.primary.default.blue }}; + --adw-accent-bg-rgb: {{ colors.primary.default.red }} {{ colors.primary.default.green }} {{ colors.primary.default.blue }}; + --adw-accent-fg-rgb: {{ colors.on_primary.default.red }} {{ colors.on_primary.default.green }} {{ colors.on_primary.default.blue }}; + + --adw-window-bg-rgb: {{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}; + --adw-window-fg-rgb: {{ colors.on_background.default.red }} {{ colors.on_background.default.green }} {{ colors.on_background.default.blue }}; + + --adw-headerbar-bg-rgb: {{ colors.surface_dim.default.red }} {{ colors.surface_dim.default.green }} {{ colors.surface_dim.default.blue }}; + --adw-headerbar-fg-rgb: {{ colors.on_surface.default.red }} {{ colors.on_surface.default.green }} {{ colors.on_surface.default.blue }}; + + --adw-popover-bg-rgb: {{ colors.surface_dim.default.red }} {{ colors.surface_dim.default.green }} {{ colors.surface_dim.default.blue }}; + --adw-popover-fg-rgb: {{ colors.on_surface.default.red }} {{ colors.on_surface.default.green }} {{ colors.on_surface.default.blue }}; + + --adw-view-bg-rgb: {{ colors.surface.default.red }} {{ colors.surface.default.green }} {{ colors.surface.default.blue }}; + --adw-view-fg-rgb: {{ colors.on_surface.default.red }} {{ colors.on_surface.default.green }} {{ colors.on_surface.default.blue }}; + + --adw-card-bg-rgb: {{ colors.surface.default.red }} {{ colors.surface.default.green }} {{ colors.surface.default.blue }}; + --adw-card-fg-rgb: {{ colors.on_surface.default.red }} {{ colors.on_surface.default.green }} {{ colors.on_surface.default.blue }}; + + --adw-sidebar-bg-rgb: {{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}; + --adw-sidebar-fg-rgb: {{ colors.on_background.default.red }} {{ colors.on_background.default.green }} {{ colors.on_background.default.blue }}; + --adw-sidebar-border-rgb: {{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}; + --adw-sidebar-backdrop-rgb: {{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}; +} diff --git a/config/matugen/templates/sway-colors.conf b/config/matugen/templates/sway-colors.conf new file mode 100644 index 0000000..acfbc41 --- /dev/null +++ b/config/matugen/templates/sway-colors.conf @@ -0,0 +1,28 @@ +:root { + --cc-bg: {{colors.surface.default.hex}}; + --noti-border-color: {{colors.primary.default.hex}}; + --noti-bg: {{colors.surface.default.hex}}; + --noti-bg-alpha: 0.0; + --noti-bg-darker: {{colors.surface.default.hex}}; + --noti-bg-hover: {{colors.on_secondary_fixed.default.hex}}; + --noti-bg-focus: {{colors.primary_container.default.hex_stripped}}; + --noti-close-bg: {{colors.primary_container.default.hex}} + --noti-close-bg-hover: {{colors.inverse_primary.default.hex}}; + --text-color: {{colors.on_surface.default.hex}}; + --text-color-disabled: rgb(150, 150, 150); + --bg-selected: {{colors.primary_container.default.hex}}; + --notification-icon-size: 64px; + --notification-app-icon-size: calc(var(--notification-icon-size) / 3); + --notification-group-icon-size: 32px; + --border: 4px solid var(--noti-border-color); + --border-radius: 12px; + --notification-shadow: 0; + --font-size-body: 15px; + --font-size-summary: 16px; + /* Deprecated variables (because of their typos). Keeeping them around for backwards compatibility. */ + --hover-tranistion: background 0.15s ease-out-quad; + --group-collapse-tranistion: opacity 100ms ease-out-quad; + --hover-transition: var(--hover-tranistion); + --group-collapse-transition: var(--group-collapse-tranistion); +} + diff --git a/config/matugen/templates/swaync-colors.css b/config/matugen/templates/swaync-colors.css new file mode 100644 index 0000000..ede73bc --- /dev/null +++ b/config/matugen/templates/swaync-colors.css @@ -0,0 +1,29 @@ +:root { + --cc-bg: {{colors.surface.default.hex}}; + --noti-border-color: {{colors.primary.default.hex}}; + --noti-bg: {{colors.surface.default.hex}}; + --noti-bg-alpha: ; + --noti-bg-darker: {{colors.surface.default.hex}}; + --noti-bg-hover: {{colors.on_secondary_fixed.default.hex}}; + --noti-bg-focus: {{colors.primary_container.default.hex_stripped}}; + --noti-close-bg: {{colors.primary_container.default.hex}} + --noti-close-bg-hover: {{colors.inverse_primary.default.hex}}; + --text-color: {{colors.on_surface.default.hex}}; + --text-color-disabled: rgb(150, 150, 150); + --bg-selected: {{colors.primary_container.default.hex}}; + --notification-icon-size: 64px; + --notification-app-icon-size: calc(var(--notification-icon-size) / 3); + --notification-group-icon-size: 32px; + --border: 4px solid var(--noti-border-color); + --border-radius: 12px; + --notification-shadow: 0; + --font-size-body: 15px; + --font-size-summary: 16px; + /* Deprecated variables (because of their typos). Keeeping them around for backwards compatibility. */ + --hover-tranistion: background 0.15s ease-out-quad; + --group-collapse-tranistion: opacity 100ms ease-out-quad; + --hover-transition: var(--hover-tranistion); + --group-collapse-transition: var(--group-collapse-tranistion); +} + + diff --git a/config/matugen/templates/swayosd.css b/config/matugen/templates/swayosd.css new file mode 100644 index 0000000..f8de7cd --- /dev/null +++ b/config/matugen/templates/swayosd.css @@ -0,0 +1,8 @@ +:root { + --border: {{colors.primary.default.hex}}; + --background: {{colors.surface.default.hex}}; + --background-progress: {{colors.on_secondary_fixed.default.hex}}; + + + +} diff --git a/config/matugen/templates/telegram-background-solid.svg b/config/matugen/templates/telegram-background-solid.svg new file mode 100644 index 0000000..edda3f4 --- /dev/null +++ b/config/matugen/templates/telegram-background-solid.svg @@ -0,0 +1 @@ + diff --git a/config/matugen/templates/telegram.tdesktop-theme b/config/matugen/templates/telegram.tdesktop-theme new file mode 100644 index 0000000..dab7a0f --- /dev/null +++ b/config/matugen/templates/telegram.tdesktop-theme @@ -0,0 +1,606 @@ +// vim: filetype=qml + +windowBg: {{colors.surface_container.default.hex}} /* #282e33 */; // white: fallback for background +windowFg: {{colors.on_surface.default.hex}} /* #f5f5f5 */; // black: fallback for text +windowBgOver: {{colors.surface_container_high.default.hex}} /* #313b43 */; // light gray: fallback for background with mouse over +windowBgRipple: {{colors.surface_container_highest.default.hex}} /* #3f4850 */; // darker gray: fallback for ripple effect +windowFgOver: {{colors.on_surface.default.hex | auto_lightness: 5}} /* #e9ecf0 */; // black: fallback for text with mouse over +windowSubTextFg: {{colors.on_surface_variant.default.hex}} /* #82868a */; // gray: fallback for additional text +windowSubTextFgOver: {{colors.on_surface_variant.default.hex | auto_lightness: 5}} /* #797b7f */; // darker gray: fallback for additional text with mouse over +windowBoldFg: windowFg /* #e9e8e8 */; // dark gray: fallback for bold text +windowBoldFgOver: windowBoldFg /* #e9e9e9 */; // dark gray: fallback for bold text with mouse over +windowBgActive: {{colors.primary.default.hex}} /* #3fc1b0 */; // bright blue: fallback for blue filled active areas +windowFgActive: {{colors.on_primary.default.hex}} /* #ffffff */; // white: fallback for text on active areas (NOTE(eqrfns): this unfortunately can be used in radically different (and unexpected) places) +windowActiveTextFg: {{colors.primary.default.hex}} /* #4be1c3 */; // online blue: fallback for active text like online status +windowShadowFg: {{colors.shadow.default.hex}}; // black: fallback for shadow +windowShadowFgFallback: windowBg; // gray: fallback for shadow without opacity +shadowFg: {{colors.shadow.default.hex}}18; // most shadows (including opacity) +slideFadeOutBg: {{colors.scrim.default.hex}}3c; // slide animation (chat to profile) fade out filling +slideFadeOutShadowFg: windowShadowFg; // slide animation (chat to profile) fade out right section shadow +imageBg: {{colors.scrim.default.hex}}; // image background fallback (when photo size is less than minimum allowed) +imageBgTransparent: {{colors.on_surface.default.hex}} /* #ffffff */; // image background when displaying an image with opacity where no opacity is needed +activeButtonBg: {{colors.primary_container.default.hex}} /* #2da192 */; // default active button background (NOTE(eqrfns): this is also used for folder icons in "My folders" list) +activeButtonBgOver: {{colors.primary_container.default.hex | auto_lightness: 5}} /* #32a896 */; // default active button background with mouse over +activeButtonBgRipple: {{colors.inverse_primary.default.hex}} /* #42b8a6 */; // default active button ripple effect +activeButtonFg: {{colors.on_primary_container.default.hex}} /* #ffffff */; // default active button text +activeButtonFgOver: {{colors.on_primary_container.default.hex}} /* #ffffff */; // default active button text with mouse over +activeButtonSecondaryFg: {{colors.on_primary_container.default.hex}} /* #8ee4d9 */; // default active button additional text (selected messages counter in forward / delete buttons) +activeButtonSecondaryFgOver: activeButtonSecondaryFg; // default active button additional text with mouse over +activeLineFg: {{colors.primary.default.hex}} /* #3ee2c9 */; // default active line (like code input field bottom border when you log in and field is focused) +activeLineFgError: {{colors.error.default.hex}} /* #f57878 */; // default active line for error state (like code input field bottom border when you log in and you've entered incorrect code) +lightButtonBg: {{colors.surface_container.default.hex}} /* #282e33 */; // default light button background (like buttons in boxes) +lightButtonBgOver: {{colors.surface_container_high.default.hex}} /* #313b43 */; // default light button background with mouse over +lightButtonBgRipple: {{ colors.surface_container_highest.default.hex }} /* #3c474f */; // default light button ripple effect +lightButtonFg: {{colors.primary.default.hex}} /* #79e8d9 */; // default light button text +lightButtonFgOver: lightButtonFg; // default light button text with mouse over +attentionButtonFg: {{colors.error.default.hex}} /* #f57474 */; // default attention button text (like confirm button on log out) +attentionButtonFgOver: {{colors.error.default.hex | auto_lightness: 5}} /* #e76060 */; // default attention button text with mouse over +attentionButtonBgOver: {{colors.on_error.default.hex}}64 /* #613a3a64 */; // default attention button background with mouse over +attentionButtonBgRipple: {{colors.on_error_container.default.hex}} /* #f4c3c2 */; // default attention button ripple effect +outlineButtonBg: windowBg; // default left outlined button background (like shared media links in profiles) +outlineButtonBgOver: {{colors.surface_container_high.default.hex}} /* #313b43 */; // default left outlined button background with mouse over +outlineButtonOutlineFg: {{colors.primary.default.hex}} /* #29baa7 */; // default left outlined button left outline border (NOTE(eqrfns): outlineButton* colors seem unused?) +outlineButtonBgRipple: {{colors.surface_container_highest.default.hex}} /* #3c474f */; // default left outlined button ripple effect +menuBg: {{colors.surface_container.default.hex}} /* #282e33 */; // default popup menu background +menuBgOver: {{colors.on_surface.default.hex}} /* #ffffff */; // default popup menu item background with mouse over +menuBgRipple: {{colors.surface_container_high.default.hex}} /* #26292d */; // default popup menu item ripple effect +menuIconFg: {{colors.outline.default.hex}} /* #808080 */; // default popup menu item icon (like main menu) +menuIconFgOver: {{colors.on_surface_variant.default.hex}} /* #dcdcdc */; // default popup menu item icon with mouse over +menuSubmenuArrowFg: #ff00ff /*#757575 */ ; // default popup menu submenu arrow icon (like in message field context menu in case of RTL system language) (NOTE(eqrfns): seems unused?) +menuFgDisabled: {{colors.on_surface_variant.default.hex}} /* #737373 */; // default popup menu item disabled text (like unavailable items in message field context menu) (NOTE(eqrfns): this shows up for a split second in context menus sometimes) +menuSeparatorFg: {{colors.surface_container_highest.default.hex}} /* #42484d */; // default popup menu separator (like in message field context menu) +scrollBarBg: {{colors.on_surface.default.hex}}53 /* #ffffff53 */; // default scroll bar current rectangle, the bar itself (like in chats list) +scrollBarBgOver: {{colors.on_surface.default.hex}}7a /* #ffffff7a */; // default scroll bar current rectangle with mouse over it +scrollBg: {{colors.on_surface.default.hex}}1a /* #ffffff1a */; // default scroll bar background +scrollBgOver: {{colors.on_surface.default.hex}}2c /* #ffffff2c */; // default scroll bar background with mouse over the scroll bar +smallCloseIconFg: {{colors.outline.default.hex}} /* #6d6d6d */; // small X icon (like in Show all sessions box to the right for sessions termination) +smallCloseIconFgOver: {{colors.on_surface_variant.default.hex}} /* #a3a3a3 */; // small X icon with mouse over +radialFg: {{colors.scrim.default.hex | invert}} /* windowFgActive */; // default radial loader line (like in Media Viewer when loading a photo) +radialBg: {{colors.scrim.default.hex}}56; // default radial loader background (like in Media Viewer when loading a photo) +placeholderFg: {{colors.on_surface_variant.default.hex}} /* #818991 */; // default input field placeholder when field is not focused (like in phone input field when you log in) +placeholderFgActive: {{colors.outline.default.hex}} /* #5d6165 */; // default input field placeholder when field is focused +inputBorderFg: {{colors.outline.default.hex}} /* #6f6f6f */; // default input field bottom border (like in code input field when you log in and field is not focused) +filterInputBorderFg: {{colors.surface_container_highest.default.hex}} /* #3d444b */; // default rounded input field border (like in chats list search field when field is focused) +filterInputInactiveBg: {{colors.surface_container_highest.default.hex}} /* #3d444b */; // default rounded input field background (like in chats list search field when field is inactive) +checkboxFg: {{colors.outline.default.hex}} /* #6c6c6c */; // default unchecked checkbox rounded rectangle (and also emoji category icons) +sliderBgInactive: {{colors.outline.default.hex}} /* #545454 */; // default slider not active bar (like in Settings when you choose interface scale or custom notifications count) +sliderBgActive: windowBgActive; // default slider active bar (like in Settings when you choose interface scale or custom notifications count) (NOTE(eqrfns): this is actualy a highlight bar under the emoji/sticker/gif tabs?) +tooltipBg: {{colors.surface_container.default.hex}} /* #282e33 */; // tooltip background (like when you put mouse over the message timestamp and wait) +tooltipFg: {{colors.on_surface_variant.default.hex}} /* #9a9e9c */; // tooltip text +tooltipBorderFg: {{colors.surface_container_high.default.hex}} /* #313b43 */; // tooltip border +titleShadow: {{colors.shadow.default.hex}}03; // one pixel line shadow at the bottom of custom window title +titleBg: {{colors.surface_container_highest.default.hex}} /* #3a4047 */; // custom window title background when window is inactive +titleBgActive: titleBg; // custom window title background when window is active +titleButtonBg: titleBg; // custom window title minimize/maximize/restore button background when window is inactive (Windows only) +titleButtonFg: {{colors.on_surface_variant.default.hex}} /* #8b9096 */; // custom window title minimize/maximize/restore button icon when window is inactive (Windows only) +titleButtonBgOver: #4c535b; // custom window title minimize/maximize/restore button background with mouse over when window is inactive (Windows only) +titleButtonFgOver: #e0e0e0; // custom window title minimize/maximize/restore button icon with mouse over when window is inactive (Windows only) +titleButtonBgActive: titleButtonBg; // custom window title minimize/maximize/restore button background when window is active (Windows only) +titleButtonFgActive: titleButtonFg; // custom window title minimize/maximize/restore button icon when window is active (Windows only) +titleButtonBgActiveOver: titleButtonBgOver; // custom window title minimize/maximize/restore button background with mouse over when window is active (Windows only) +titleButtonFgActiveOver: titleButtonFgOver; // custom window title minimize/maximize/restore button icon with mouse over when window is active (Windows only) +titleButtonCloseBg: titleButtonBg; // custom window title close button background when window is inactive (Windows only) +titleButtonCloseFg: titleButtonFg; // custom window title close button icon when window is inactive (Windows only) +titleButtonCloseBgOver: {{colors.error_container.default.hex}} /* #e81123 */; // custom window title close button background with mouse over when window is inactive (Windows only) +titleButtonCloseFgOver: {{colors.on_error_container.default.hex}} /* windowFgActive */; // custom window title close button icon with mouse over when window is inactive (Windows only) +titleButtonCloseBgActive: titleButtonCloseBg; // custom window title close button background when window is active (Windows only) +titleButtonCloseFgActive: titleButtonCloseFg; // custom window title close button icon when window is active (Windows only) +titleButtonCloseBgActiveOver: titleButtonCloseBgOver; // custom window title close button background with mouse over when window is active (Windows only) +titleButtonCloseFgActiveOver: titleButtonCloseFgOver; // custom window title close button icon with mouse over when window is active (Windows only) +titleFg: {{colors.outline.default.hex}} /* #666666 */; // custom window title text when window is inactive (macOS only) +titleFgActive: {{colors.outline.default.hex}} /* #808080 */; // custom window title text when window is active (macOS only) +trayCounterBg: #f23c34; // tray icon counter background +trayCounterBgMute: #888888; // tray icon counter background if all unread messages are muted +trayCounterFg: #ffffff; // tray icon counter text +trayCounterBgMacInvert: #ffffff; // tray icon counter background when tray icon is pressed or when dark theme of macOS is used (macOS only) +trayCounterFgMacInvert: #ffffff01; // tray icon counter text when tray icon is pressed or when dark theme of macOS is used (macOS only) +layerBg: {{colors.scrim.default.hex}}7f; // box and main menu background layer fade +cancelIconFg: {{colors.outline.default.hex}} /* #666666 */; // default for settings close icon and box search cancel icon +cancelIconFgOver: {{colors.on_surface_variant.default.hex}} /* #dcdcdc */; // default for settings close icon and box search cancel icon with mouse over +boxBg: windowBg; // box background +boxTextFg: windowFg; // box text +boxTextFgGood: {{colors.primary.default.hex}} /* #56dbce */; // accepted box text (like when choosing username that is not occupied) (NOTE(eqrfns): this is also used for the selected messages checkmark background) +boxTextFgError: {{colors.error.default.hex}} /* #d84d4d */; // rejecting box text (like when choosing username that is occupied) +boxTitleFg: {{colors.on_surface_variant.default.hex}} /* #ebebeb */; // box title text +boxSearchBg: {{colors.surface_container.default.hex}} /* #282e33 */; // box search field background (like in contacts box) +boxTitleAdditionalFg: {{colors.outline.default.hex}} /* #808080 */; // box title additional text (like in create group box when you see chosen members count) +boxTitleCloseFg: cancelIconFg; // settings close icon and box search cancel icon (like in contacts box) +boxTitleCloseFgOver: cancelIconFgOver; // settings close icon and box search cancel icon (like in contacts box) with mouse over +membersAboutLimitFg: {{colors.outline.default.hex}} /* #5e6065 */; // text in channel members box about the limit (max 200 last members are shown) (NOTE(eqrfns): haven't seen this yet) +contactsBg: {{colors.surface_container.default.hex}} /* #222528 */; // contacts (and some other) box row background +contactsBgOver: {{colors.surface_container.default.hex}} /* #282e33 */; // contacts (and some other) box row background with mouse over +contactsNameFg: boxTextFg; // contacts (and some other) box row name text +contactsStatusFg: {{colors.outline.default.hex}} /* #808080 */; // contacts (and some other) box row additional text (like last seen stamp) +contactsStatusFgOver: {{colors.outline.default.hex}} /* #808080 */; // contacts (and some other) box row additional text (like last seen stamp) with mouse over +contactsStatusFgOnline: {{colors.primary.default.hex}} /* #55e1d3 */; // contacts (and some other) box row active additional text (like online status) +photoCropFadeBg: layerBg; // avatar crop box fade background (when choosing a new photo in Settings or for a group) +photoCropPointFg: {{colors.on_surface.default.hex}}7f /* #ffffff7f */; // avatar crop box corner rectangles (when choosing a new photo in Settings or for a group) +callArrowFg: {{colors.tertiary.default.hex}} /* #2bc7b7 */; // received phone call arrow (NOTE(eqrfns): this is not the color you see in chats, instead this is used by the "Calls" overview you can find in the hamburger menu) +callArrowMissedFg: {{colors.error.default.hex}} /* #dd5b4a */; // missed phone call arrow (in calls list box) +introBg: windowBg; // login background +introTitleFg: {{colors.on_surface_variant.default.hex}} /* #eeeeee */; // login title text +introDescriptionFg: {{colors.on_surface_variant.default.hex}}99 /* #999999 */; // login description text +introErrorFg: {{colors.error.default.hex}} /* #999999 */; // login error text (like when providing a wrong log in code) +introCoverTopBg: {{colors.primary_container.default.hex}} /* #188173 */; // intro gradient top (from) (NOTE(eqrfns): haven't checked this) +introCoverBottomBg: {{colors.primary_container.default.hex}} /* #188173 */; // intro gradient bottom (to) +introCoverIconsFg: {{colors.on_primary_container.default.hex}} /* #34a493 */; // intro cloud graphics +introCoverPlaneTrace: {{colors.on_primary_container.default.hex}} /* #329d8f */; // intro plane traces +introCoverPlaneInner: #ced9e2; // intro plane part (NOTE(eqrfns): haven't seen this yet) +introCoverPlaneOuter: #97a9b5; // intro plane part (NOTE(eqrfns): haven't seen this yet) +introCoverPlaneTop: #ffffff; // intro plane part (NOTE(eqrfns): haven't seen this yet) +dialogsMenuIconFg: menuIconFg; // main menu and lock telegram icon +dialogsMenuIconFgOver: menuIconFgOver; // main menu and lock telegram icon with mouse over +dialogsBg: windowBg; // chat list background +dialogsNameFg: {{colors.on_surface.default.hex}} /* #f5f5f5 */; // chat list name text +dialogsChatIconFg: dialogsNameFg; // chat list group or channel icon +dialogsDateFg: {{colors.outline.default.hex}} /* #6d727c */; // chat list date text +dialogsTextFg: {{colors.outline.default.hex}} /* #8d939e */; // chat list message text +dialogsTextFgService: {{colors.on_surface_variant.default.hex}} /* #ebebeb */; // chat list group sender name text (or media message type text) +dialogsDraftFg: {{colors.error.default.hex}} /* #ec6657 */; // chat list draft label +dialogsVerifiedIconBg: {{colors.secondary.default.hex}} /* #53edde */; // chat list verified icon background +dialogsVerifiedIconFg: {{colors.surface_container.default.hex}} /* #282e33 */; // chat list verified icon check (NOTE(eqrfns): not sure where this is used, but it is referenced in the code) +dialogsSendingIconFg: {{colors.outline.default.hex}} /* #727272 */; // chat list sending message icon (clock) +dialogsSentIconFg: {{colors.primary.default.hex}} /* #20eed9 */; // chat list sent message tick / double tick icon +dialogsUnreadBg: {{colors.primary_container.default.hex}} /* #05a091 */; // chat list unread badge background for not muted chat +dialogsUnreadBgMuted: {{colors.primary_container.default.hex | saturate: -50, "hsl" | auto_lightness: 5}}99 /* #495159 */; // chat list unread badge background for muted chat (NOTE(eqrfns): this is also used for the "pinned" icon, and also for folder icons in the "add to folder" submenu of a chat "More" menu. I hate this...) +dialogsUnreadFg: {{colors.on_primary_container.default.hex}} /* #ffffff */; // chat list unread badge text +dialogsOnlineBadgeFg: {{colors.primary.default.hex}} /* #0ae7d1 */; // chat list online status +dialogsBgOver: {{colors.surface_container_highest.default.hex}} /* #353c43 */; // chat list background with mouse over +dialogsNameFgOver: windowBoldFgOver; // chat list name text with mouse over +dialogsChatIconFgOver: dialogsNameFgOver; // chat list group or channel icon with mouse over +dialogsDateFgOver: {{colors.outline.default.hex}} /* #6d727c */; // chat list date text with mouse over +dialogsTextFgOver: {{colors.on_surface_variant.default.hex}} /* #a3a7ae */; // chat list message text with mouse over +dialogsTextFgServiceOver: {{colors.on_surface.default.hex}} /* #f0f0f0 */; // chat list group sender name text with mouse over +dialogsDraftFgOver: dialogsDraftFg; // chat list draft label with mouse over +dialogsVerifiedIconBgOver: {{colors.secondary.default.hex}} /* #53edde */; // chat list verified icon background with mouse over +dialogsVerifiedIconFgOver: dialogsVerifiedIconFg; // chat list verified icon check with mouse over +dialogsSendingIconFgOver: dialogsSendingIconFg; // chat list sending message icon (clock) with mouse over +dialogsSentIconFgOver: {{colors.primary.default.hex}} /* #41f0de */; // chat list sent message tick / double tick icon with mouse over +dialogsUnreadBgOver: {{colors.primary_container.default.hex}} /* #009687 */; // chat list unread badge background for not muted chat with mouse over +dialogsUnreadBgMutedOver: {{colors.primary_container.default.hex | saturate: -40, "hsl" | auto_lightness: 5}}99 /* #555e67 */; // chat list unread badge background for muted chat with mouse over +dialogsUnreadFgOver: dialogsUnreadFg; // chat list unread badge text with mouse over +dialogsBgActive: {{colors.primary_container.default.hex}} /* #009687 */; // chat list background for current (active) chat +dialogsNameFgActive: {{colors.on_primary_container.default.hex}} /* windowFgActive */; // chat list name text for current (active) chat +dialogsChatIconFgActive: dialogsNameFgActive; // chat list group or channel icon for current (active) chat +dialogsDateFgActive: {{colors.on_primary_container.default.hex}} /* windowFgActive */; // chat list date text for current (active) chat +dialogsTextFgActive: {{colors.on_primary_container.default.hex}} /* windowFgActive */; // chat list message text for current (active) chat +dialogsTextFgServiceActive: dialogsTextFgActive; // chat list group sender name text for current (active) chat +dialogsDraftFgActive: {{colors.on_primary_container.default.hex}}99 /* #c6f7f3 */; // chat list draft label for current (active) chat +dialogsVerifiedIconBgActive: dialogsTextFgActive; // chat list verified icon background for current (active) chat +dialogsVerifiedIconFgActive: dialogsBgActive; // chat list verified icon check for current (active) chat +dialogsSendingIconFgActive: {{colors.on_primary_container.default.hex}}99 /* #ffffff99 */; // chat list sending message icon (clock) for current (active) chat +dialogsSentIconFgActive: dialogsTextFgActive; // chat list sent message tick / double tick icon for current (active) chat +dialogsUnreadBgActive: dialogsTextFgActive; // chat list unread badge background for not muted chat for current (active) chat +dialogsUnreadBgMutedActive: {{colors.on_primary_container.default.hex}}99 /* #cbf7e8 */; // chat list unread badge background for muted chat for current (active) chat +dialogsUnreadFgActive: {{colors.primary_container.default.hex}} /* #039d8e */; // chat list unread badge text for current (active) chat +dialogsOnlineBadgeFgActive: {{colors.on_primary_container.default.hex}} /* #ffffff */; // chat list online status for current (active) chat +dialogsRippleBg: {{colors.surface_variant.default.hex}} /* #43474d */; // +dialogsRippleBgActive: {{colors.inverse_primary.default.hex}} /* #12a796 */; // +dialogsForwardBg: dialogsBgActive; // forwarding panel background (when forwarding messages in the smallest window size) +dialogsForwardFg: dialogsNameFgActive; // forwarding panel text (when forwarding messages in the smallest window size) +searchedBarBg: {{colors.surface_container_highest.default.hex}} /* #3a4047 */; // search results bar background (in chats list, contacts box..) +searchedBarFg: {{colors.on_surface_variant.default.hex}} /* #a8a8a8 */; // search results bar text (in chats list, contacts box..) +topBarBg: {{colors.surface_container.default.hex}} /* #282e33 */; // top bar background (in chat view, media overview..) +emojiPanBg: windowBg; // emoji panel background +emojiPanCategories: {{colors.surface_container_low.default.hex}} /* #20262b */; // emoji panel categories background +emojiPanHeaderFg: {{colors.outline.default.hex}}/* #90949a */; // emoji panel section header text +emojiPanHeaderBg: {{colors.on_surface.default.hex}}f2 /* #fffffff2 */; // emoji panel section header background +stickerPanDeleteBg: {{colors.scrim.default.hex}}cc; // delete X button background for custom sent stickers in stickers panel (legacy) +stickerPanDeleteFg: windowFgActive; // delete X button icon for custom sent stickers in stickers panel (legacy) +stickerPreviewBg: {{colors.scrim.default.hex}}b0; // sticker and GIF preview background (when you press and hold on a sticker) +historyTextInFg: windowFg; // inbox message text +historyTextInFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // inbox message selected text or text in a selected message +historyTextOutFg: {{colors.on_secondary_container.default.hex}} /* #e4ecf2 */; // outbox message text +historyTextOutFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // outbox message selected text or text in a selected message +historyLinkInFg: {{colors.primary.default.hex}} /* #37e1ca */; // inbox message link +historyLinkInFgSelected: {{colors.on_secondary_container.default.hex | auto_lightness: -5}} /* #a7fff3 */; // inbox message link in a selected text or message +historyLinkOutFg: {{colors.on_secondary_container.default.hex | blend: {{colors.tertiary.default.hex}}, 0.5}} /* #37e1ca */; // outbox message link +historyLinkOutFgSelected: {{colors.on_secondary_container.default.hex | auto_lightness: -5}} /* #a7fff3 */; // outbox message link in a selected text or message +historyFileNameInFg: historyTextInFg; // inbox media filename text +historyFileNameInFgSelected: historyTextInFgSelected /* #ffffff */; // inbox media filename text in a selected message +historyFileNameOutFg: historyTextOutFg; // outbox media filename text +historyFileNameOutFgSelected: historyTextOutFgSelected /* #ffffff */; // outbox media filename text in a selected message +historyOutIconFg: {{colors.on_secondary_container.default.hex}} /* #40e6c5 */; // outbox message tick / double tick icon +historyOutIconFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // outbox message tick / double tick icon in a selected message +historyIconFgInverted: {{colors.secondary.dark.hex}} /* windowFgActive */; // media message tick / double tick icon (like in sent photo) (NOTE(eqrfns): forcing the dark theme looks better here IMO) +historySendingOutIconFg: {{colors.on_secondary_container.default.hex}} /* #9dfadd */; // outbox sending message icon (clock) +historySendingInIconFg: {{colors.outline.default.hex}} /* #76838b */; // inbox sending message icon (clock) (like in sent messages to yourself or in sent messages to a channel) +historySendingInvertedIconFg: {{colors.on_surface.default.hex}}c8 /* #ffffffc8 */; // media sending message icon (clock) (like in sent photo) +historyCallArrowInFg: {{colors.tertiary.default.hex}} /* #26c2ab */; // received phone call arrow +historyCallArrowInFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // received phone call arrow in a selected message +historyCallArrowMissedInFg: callArrowMissedFg; // missed phone call arrow +historyCallArrowMissedInFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // missed phone call arrow in a selected message +historyCallArrowOutFg: {{colors.on_secondary_container.default.hex}} /* #ffffff */; // outgoing phone call arrow +historyCallArrowOutFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // outgoing phone call arrow +historyUnreadBarBg: {{colors.surface_container_highest.default.hex}} /* #33393f */; // new unread messages bar background +historyUnreadBarBorder: shadowFg; // new unread messages bar shadow +historyUnreadBarFg: {{colors.primary.default.hex}} /* #3cd3bf */; // new unread messages bar text +historyForwardChooseBg: {{colors.scrim.default.hex}}4c; // forwarding messages in a large window size "choose recipient" background +historyForwardChooseFg: {{colors.primary.default.hex}} /* windowFgActive */; // forwarding messages in a large window size "choose recipient" text +historyPeer1NameFg: {{colors.primary.default.hex | blend: {{"#ec7577" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #ec7577 */; // red group member name +historyPeer1NameFgSelected: historyTextInFgSelected /* #ffffff */; // red group member name in a selected message +historyPeer1UserpicBg: #ff845e; // red userpic background +historyPeer2NameFg: {{colors.primary.default.hex | blend: {{"#86d67f" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #86d67f */; // green group member name +historyPeer2NameFgSelected: historyTextInFgSelected /* #ffffff */; // green group member name in a selected message +historyPeer2UserpicBg: #9ad164; // green userpic background +historyPeer3NameFg: {{colors.primary.default.hex | blend: {{"#e4c054" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #e4c054 */; // yellow group member name +historyPeer3NameFgSelected: historyTextInFgSelected /* #ffffff */; // yellow group member name in a selected message +historyPeer3UserpicBg: #e5ca77; // yellow userpic background (actually unused) +historyPeer4NameFg: {{colors.primary.default.hex | blend: {{"#68c7f3" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #68c7f3 */; // blue group member name +historyPeer4NameFgSelected: historyTextInFgSelected /* #ffffff */; // blue group member name in a selected message +historyPeer4UserpicBg: #5caffa; // blue userpic background +historyPeer5NameFg: {{colors.primary.default.hex | blend: {{"#b383f3" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #b383f3 */; // purple group member name +historyPeer5NameFgSelected: historyTextInFgSelected /* #ffffff */; // purple group member name in a selected message +historyPeer5UserpicBg: #b694f9; // purple userpic background +historyPeer6NameFg: {{colors.primary.default.hex | blend: {{"#e16794" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #e16794 */; // pink group member name +historyPeer6NameFgSelected: historyTextInFgSelected /* #ffffff */; // pink group member name in a selected message +historyPeer6UserpicBg: #ff8aac; // pink userpic background +historyPeer7NameFg: {{colors.primary.default.hex | blend: {{"#57c9e0" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #57c9e0 */; // sea group member name +historyPeer7NameFgSelected: historyTextInFgSelected /* #ffffff */; // sea group member name in a selected message +historyPeer7UserpicBg: #5bcbe3; // sea userpic background +historyPeer8NameFg: {{colors.primary.default.hex | blend: {{"#efb05d" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #efb05d */; // orange group member name +historyPeer8NameFgSelected: historyTextInFgSelected /* #ffffff */; // orange group member name in a selected message +historyPeer8UserpicBg: #febb5b; // orange userpic background +historyPeerUserpicFg: #ffffff /* windowFgActive */; // default userpic initials +historyScrollBarBg: {{colors.on_surface_variant.default.hex}}7a /* #8989897a */; // scroll bar current rectangle, the bar itself in the chat view (adjusted) +historyScrollBarBgOver: {{colors.outline.default.hex}}bc /* #6b6b6bbc */; // scroll bar current rectangle with mouse over it in the chat view (adjusted) +historyScrollBg: {{colors.outline.default.hex | auto_lightness: 5}}4c /* #5f5f5f4c */; // scroll bar background (adjusted) +historyScrollBgOver: {{colors.outline.default.hex}}6b /* #6262626b */; // scroll bar background with mouse over the scroll bar (adjusted) +historyPeer1UserpicBg2: #d45246; // the second red userpic background +historyPeer2UserpicBg2: #46ba43; // the second green userpic background +historyPeer3UserpicBg2: #e5ca77; // the second yellow userpic background (actually unused) +historyPeer4UserpicBg2: #408acf; // the second blue userpic background +historyPeer5UserpicBg2: #6c61df; // the second purple userpic background +historyPeer6UserpicBg2: #d95574; // the second pink userpic background +historyPeer7UserpicBg2: #359ad4; // the second sea userpic background +historyPeer8UserpicBg2: #f68136; // the second orange userpic background +historyPeerSavedMessagesBg2: historyPeer4UserpicBg2; // the second saved messages userpic background +msgInBg: {{colors.surface_container_high.default.hex}} /* #33393f */; // inbox message background +msgInBgSelected: {{colors.primary_container.default.hex}} /* #009687 */; // inbox selected message background (and background of selected text in those messages) +msgOutBg: {{colors.secondary_container.default.hex}} /* #2a2f33 */; // outbox message background +msgOutBgSelected: {{colors.primary_container.default.hex}} /* #009687 */; // outbox selected message background (and background of selected text in those messages) +msgSelectOverlay: {{colors.primary.default.hex}}4c /* #35d4bf4c */; // overlay which is filling the media parts of selected messages (like in selected photo message) +msgStickerOverlay: {{colors.primary.default.hex}}7f /* #35d4bf7f */; // overlay which is filling the selected sticker message (NOTE(eqrfns): this color is somehow bugged, it randomy does not get updated when I change the theme) +msgInServiceFg: windowActiveTextFg; // inbox message information text (like information about a forwarded message original sender) +msgInServiceFgSelected: {{colors.on_surface.default.hex}} /* #ffffff */; // inbox selected message information text (like information about a forwarded message original sender) +msgOutServiceFg: {{colors.on_secondary_container.default.hex}} /* #60e5ca */; // outbox message information text (like information about a forwarded message original sender) +msgOutServiceFgSelected: {{colors.on_secondary_container.default.hex}} /* #ffffff */; // outbox message information text (like information about a forwarded message original sender) +msgInShadow: {{colors.shadow.default.hex}}00; // inbox message shadow (below the bubble) +msgInShadowSelected: {{colors.shadow.default.hex}}00; // inbox selected message shadow (below the bubble) +msgOutShadow: {{colors.shadow.default.hex}}00; // outbox message shadow (below the bubble) +msgOutShadowSelected: {{colors.primary_container.default.hex}}00 /* #37a78d00 */; // outbox selected message shadow (below the bubble) +msgInDateFg: {{colors.secondary.default.hex}} /* #828d94 */; // inbox message time text +msgInDateFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // inbox selected message time text +msgOutDateFg: {{colors.on_secondary_container.default.hex}}99 /* #737f87 */; // outbox message time text +msgOutDateFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // outbox selected message time text +msgServiceFg: {{colors.secondary.default.hex}}; // service message text (like date dividers or service message about the group title being changed) +msgServiceBg: {{colors.surface_variant.default.hex}}c8 /* #363c43c8 */; // service message background (like in a service message about group title being changed) (adjusted) +msgServiceBgSelected: {{colors.inverse_primary.default.hex}} /* #009687 */; // service message selected text background (like in a service message about group title being changed) (adjusted) +msgInReplyBarColor: {{colors.primary.default.hex}} /* #32ceb7 */; // inbox message reply outline (NOTE(eqrfns): this can be seen at east in the interface scale preview) +msgInReplyBarSelColor: {{colors.on_surface.default.hex}} /* #ffffff */; // inbox selected message reply outline (NOTE(eqrfns): coudn't figure out how to see this) +msgOutReplyBarColor: {{colors.on_secondary_container.default.hex}} /* #32ceb7 */; // outbox message reply outline +msgOutReplyBarSelColor: {{colors.on_primary_container.default.hex}} /* #ffffff */; // outbox selected message reply outline +msgImgReplyBarColor: msgServiceFg; // sticker message reply outline (NOTE(eqrfns): this is the color of the text that shows up when you reply with a sticker. This took me some time to figure out) +msgInMonoFg: {{colors.tertiary.default.hex | auto_lightness: -10}} /* #5aab9f */; // inbox message monospace text (like a message sent with `test` text) +msgOutMonoFg: {{colors.on_secondary_container.default.hex | auto_lightness: 5 | blend: {{colors.tertiary.default.hex}}, 1.0}} /* #c2f2ec */; // outbox message monospace text (NOTE(eqrfns): not sure if this is OK) +msgInMonoFgSelected: {{colors.on_primary_container.default.hex | auto_lightness: -5}} /* #a7fff3 */; // inbox message monospace text in a selected text or message +msgOutMonoFgSelected: {{colors.on_primary_container.default.hex | auto_lightness: -5}} /* #c9fff8 */; // outbox message monospace text in a selected text or message +msgDateImgFg: {{colors.secondary.dark.hex}} /* msgServiceFg */; // media message time text (like time text in a sent photo) (NOTE(eqrfns): forced dark theme looks better IMO) +msgDateImgBg: {{colors.scrim.default.hex}}54; // media message time bubble background (like time bubble in a sent photo) or file with thumbnail download icon circle background +msgDateImgBgOver: {{colors.scrim.default.hex}}74; // media message download icon circle background with mouse over (like file with thumbnail download icon) +msgDateImgBgSelected: {{colors.scrim.default.hex}}87 /* #1c706587 */; // selected media message time bubble background +msgFileThumbLinkInFg: lightButtonFg; // inbox media file message with thumbnail download / open with button text +msgFileThumbLinkInFgSelected: lightButtonFgOver; // inbox selected media file message with thumbnail download / open with button text +msgFileThumbLinkOutFg: {{colors.on_secondary_container.default.hex}} /* #60e5ca */; // outbox media file message with thumbnail download / open with button text +msgFileThumbLinkOutFgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // outbox selected media file message with thumbnail download / open with button text +msgFileInBg: {{colors.primary.default.hex}} /* #50d4c2 */; // inbox audio file download circle background (NOTE(eqrfns): this is actually used for ANY file) +msgFileInBgOver: {{colors.primary.default.hex | auto_lightness: 10}} /* #48cfbd */; // inbox audio file download circle background with mouse over (NOTE(eqrfns): this is actualy for the play circle in the audio files overiew) +msgFileInBgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // inbox selected audio file download circle background (NOTE(eqrfns): this is used both for the overview, and for the chat history) +msgFileOutBg: {{colors.on_secondary_container.default.hex}} /* #11bfab */; // outbox audio file download circle background +msgFileOutBgOver: {{colors.on_secondary_container.default.hex | auto_lightness: 10}} /* #ffffff */; // outbox audio file download circle background with mouse over (NOTE(eqrfns): seems to be unused in the source code?) +msgFileOutBgSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // outbox selected audio file download circle background +msgFile1Bg: #72b1df; // blue shared links / files without image square thumbnail +msgFile1BgDark: #5c9ece; // blue shared files without image download circle background +msgFile1BgOver: #5294c4; // blue shared files without image download circle background with mouse over +msgFile1BgSelected: #5099d0; // blue shared files without image download circle background if file is selected +msgFile2Bg: #5fbe67; // green shared links / shared files without image square thumbnail +msgFile2BgDark: #4da859; // green shared files without image download circle background +msgFile2BgOver: #44a050; // green shared files without image download circle background with mouse over +msgFile2BgSelected: #50ac9b; // green shared files without image download circle background if file is selected +msgFile3Bg: #e47272; // red shared links / shared files without image square thumbnail +msgFile3BgDark: #cd5b5e; // red shared files without image download circle background +msgFile3BgOver: #c35154; // red shared files without image download circle background with mouse over +msgFile3BgSelected: #9f6a82; // red shared files without image download circle background if file is selected +msgFile4Bg: #efc274; // yellow shared links / shared files without image square thumbnail +msgFile4BgDark: #e6a561; // yellow shared files without image download circle background +msgFile4BgOver: #dc9c5a; // yellow shared files without image download circle background with mouse over +msgFile4BgSelected: #b19d84; // yellow shared files without image download circle background if file is selected +historyFileInIconFg: msgInBg /* #33393f */; // inbox file without thumbnail (like audio file) download arrow icon +historyFileInIconFgSelected: msgInBgSelected /* #009687 */; // inbox selected file without thumbnail (like audio file) download arrow icon +historyFileInRadialFg: {{colors.surface_container_highest.default.hex}} /* #33393f */; // inbox file without thumbnail (like audio file) radial download animation line +historyFileInRadialFgSelected: historyFileInIconFgSelected; // inbox selected file without thumbnail (like audio file) radial download animation line +historyFileOutIconFg: msgOutBg /* #33393f */; // outbox file without thumbnail (like audio file) download arrow icon +historyFileOutIconFgSelected: msgOutBgSelected /* #009687 */; // outbox selected file without thumbnail (like audio file) download arrow icon +historyFileOutRadialFg: historyFileOutIconFg; // outbox file without thumbnail (like audio file) radial download animation line +historyFileOutRadialFgSelected: historyFileOutIconFgSelected /* #009687 */; // outbox selected file without thumbnail (like audio file) radial download animation line (NOTE(eqrfns): you need to start downloading the file and then select the message to see this) +historyFileThumbIconFg: {{colors.on_surface.default.hex}} /* #efefef */; // file with thumbnail (or photo / video) download arrow icon +historyFileThumbIconFgSelected: {{colors.on_surface.default.hex}} /* #ffffff */; // selected file with thumbnail (or photo / video) download arrow icon +historyFileThumbRadialFg: historyFileThumbIconFg; // file with thumbnail (or photo / video) radial download animation line +historyFileThumbRadialFgSelected: {{colors.on_surface.default.hex}} /* #ffffff */; // selected file with thumbnail (or photo / video) radial download animation line +historyVideoMessageProgressFg: historyFileThumbIconFg; // radial playback progress in round video messages +msgWaveformInActive: windowBgActive; // inbox voice message active waveform lines (like played part of currently playing voice message) +msgWaveformInActiveSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // inbox selected voice message active waveform lines (like played part of currently playing voice message) +msgWaveformInInactive: {{colors.outline.default.hex}} /* #5d6b76 */; // inbox voice message inactive waveform lines (like upcoming part of currently playing voice message) +msgWaveformInInactiveSelected: {{colors.on_primary_container.default.hex}}80 /* #41d1be */; // inbox selected voice message inactive waveform lines (like upcoming part of currently playing voice message) +msgWaveformOutActive: {{colors.on_secondary_container.default.hex}} /* #11bfab */; // outbox voice message active waveform lines (like played part of currently playing voice message) +msgWaveformOutActiveSelected: {{colors.on_primary_container.default.hex}} /* #ffffff */; // outbox selected voice message active waveform lines (like played part of currently playing voice message) +msgWaveformOutInactive: {{colors.on_secondary_container.default.hex}}80 /* #596874 */; // outbox voice message inactive waveform lines (like upcoming part of currently playing voice message) +msgWaveformOutInactiveSelected: {{colors.on_primary_container.default.hex}}80 /* #41d1be */; // outbox selected voice message inactive waveform lines (like upcoming part of currently playing voice message) +msgBotKbOverBgAdd: {{colors.on_surface.default.hex}}14 /* #ffffff14 */; // this is painted over a bot inline keyboard button (which has msgServiceBg background) when mouse is over that button +msgBotKbIconFg: msgServiceFg; // bot inline keyboard button icon in the top-right corner (like in @vote bot when a poll is ready to be shared) +msgBotKbRippleBg: {{colors.on_surface_variant.default.hex}}10 /* #9e9d9d10 */; // bot inline keyboard button ripple effect +mediaInFg: msgInDateFg; // inbox media message status text (like in file that is being downloaded) +mediaInFgSelected: msgInDateFgSelected; // inbox selected media message status text (like in file that is being downloaded) +mediaOutFg: msgOutDateFg; // outbox media message status text (like in file that is being downloaded) +mediaOutFgSelected: msgOutDateFgSelected; // outbox selected media message status text (like in file that is being downloaded) +youtubePlayIconBg: #e83131c8; // youtube play icon background (when a link to a youtube video with a webpage preview is sent) NOTE(eqrfns): deliberately a static color +youtubePlayIconFg: #ffffff /* windowFgActive */; // youtube play icon arrow (when a link to a youtube video with a webpage preview is sent) NOTE(eqrfns): deliberately a static color +videoPlayIconBg: {{colors.scrim.default.hex}}7f; // other video play icon background (like when a link to a vimeo video with a webpage preview is sent) +videoPlayIconFg: {{colors.on_surface.default.hex}} /* #ffffff */; // other video play icon arrow (like when a link to a vimeo video with a webpage preview is sent) +toastBg: {{colors.shadow.default.hex}}b2; // toast notification background (like when you click on your t.me link when editing your username) +toastFg: {{colors.shadow.default.hex | invert}} /* windowFgActive */; // toast notification text (like when you click on your t.me link when editing your username) +reportSpamBg: {{colors.surface_container_highest.default.hex}} /* #363c42 */; // report spam panel background (like a non contact user writes your for the first time) +reportSpamFg: windowFg; // report spam panel text (when you send a report from that panel) +historyToDownBg: {{colors.secondary_container.default.hex}} /* #434d57 */; // arrow button background (to scroll to the end of the viewed chat) +historyToDownBgOver: {{colors.secondary_container.default.hex | auto_lightness: 10}} /* #515b65 */; // arrow button background with mouse over +historyToDownBgRipple: {{colors.secondary_container.default.hex | auto_lightness: 20}} /* #636d77 */; // arrow button ripple effect +historyToDownFg: {{colors.on_secondary_container.default.hex}} /* #adb4ba */; // arrow button icon +historyToDownFgOver: {{colors.on_secondary_container.default.hex}} /* menuIconFgOver */; // arrow button icon with mouse over +historyToDownShadow: {{colors.shadow.default.hex}}40; // arrow button shadow +historyComposeAreaBg: {{colors.surface_container.default.hex}} /* #282e33 */; // history compose area background (message write area / reply information / forwarding information) +historyComposeAreaFg: historyTextInFg; // history compose area text +historyComposeAreaFgService: msgInDateFg; // history compose area text when replying to a media message +historyComposeIconFg: menuIconFg; // history compose area icon (like emoji, attach, bot command..) +historyComposeIconFgOver: menuIconFgOver; // history compose area icon with mouse over +historySendIconFg: windowBgActive; // send message icon +historySendIconFgOver: windowBgActive; // send message icon with mouse over +historyPinnedBg: historyComposeAreaBg; // pinned message area background +historyReplyBg: historyComposeAreaBg; // reply / forward / edit message area background +historyReplyIconFg: windowBgActive; // reply / forward / edit message left icon +historyReplyCancelFg: cancelIconFg; // reply / forward / edit message cancel button +historyReplyCancelFgOver: cancelIconFgOver; // reply / forward / edit message cancel button with mouse over +historyComposeButtonBg: historyComposeAreaBg; // unblock / join channel / mute channel button background +historyComposeButtonBgOver: {{colors.surface_container_high.default.hex}} /* #31363c */; // unblock / join channel / mute channel button background with mouse over +historyComposeButtonBgRipple: {{colors.surface_container_low.default.hex}} /* #272b2f */; // unblock / join channel / mute channel button ripple effect +overviewCheckBg: {{colors.scrim.default.hex}}40; // shared files / links checkbox background for not selected rows when some rows are selected +overviewCheckFg: {{colors.on_surface.default.hex}} /* #ffffff */; // shared files / links checkbox icon for not selected rows when some rows are selected +overviewCheckFgActive: {{colors.on_primary.default.hex}} /* #ffffff */; // shared files / links checkbox icon for selected rows (NOTE(eqrfns): this is used over primary (boxTextFgGood al least)) +overviewPhotoSelectOverlay: {{colors.primary.default.hex}}33 /* #40ace333 */; // shared photos / videos / links fill for selected rows +profileStatusFgOver: #ff00ff /* #9c9c9c */; // group members list in group profile user last seen text with mouse over (NOTE(eqrfns): seems unused in the sources?) +profileVerifiedCheckBg: windowBgActive; // profile verified check icon background +profileVerifiedCheckFg: {{colors.on_surface.default.hex}} /* #ffffff */; // profile verified check icon tick +profileAdminStartFg: windowBgActive; // group members list admin star icon +notificationsBoxMonitorFg: windowFg; // custom notifications settings box monitor color +notificationsBoxScreenBg: dialogsBgActive; // #6389a8; // custom notifications settings box monitor screen background +notificationSampleUserpicFg: windowBgActive; // custom notifications settings box small sample userpic placeholder +notificationSampleCloseFg: {{colors.on_surface.default.hex}} /* #d7d7d7 */; // custom notifications settings box small sample close button placeholder (NOTE(eqrfns): haven't seen this) +notificationSampleTextFg: {{colors.on_surface.default.hex}} /* #d7d7d7 */; // custom notifications settings box small sample text placeholder (NOTE(eqrfns): haven't seen this) +notificationSampleNameFg: {{colors.on_surface_variant.default.hex}} /* #939393 */; // custom notifications settings box small sample name placeholder (NOTE(eqrfns): haven't seen this) +changePhoneSimcardFrom: notificationSampleTextFg; // change phone number box left simcard icon +changePhoneSimcardTo: notificationSampleNameFg; // change phone number box right simcard and plane icons +mainMenuBg: windowBg; // main menu background +mainMenuCoverBg: windowBgActive /* #009687 */; // main menu top cover background (NOTE(eqrfns): these "cover" colors don't seem to show up anywhere) +mainMenuCoverFg: windowFgActive; // main menu top cover text +mainMenuCloudFg: activeButtonFg; // main menu top cover saved messages / archive button icon +mainMenuCloudBg: activeButtonBg /* #0e837d */; // main menu top cover saved messages / archive button background +mediaPlayerBg: windowBg; // audio file player background +mediaPlayerActiveFg: windowBgActive; // audio file player playback progress already played part +mediaPlayerInactiveFg: sliderBgInactive; // audio file player playback progress upcoming (not played yet) part with mouse over +mediaPlayerDisabledFg: #9dd1ef; // audio file player loading progress (when you're playing an audio file and switch to the previous one which is not loaded yet) +mediaviewFileBg: windowBg; // file rectangle background (when you view a png file in Media Viewer and go to a previous, not loaded yet, file) +mediaviewFileNameFg: windowFg; // file name in file rectangle +mediaviewFileSizeFg: windowSubTextFg; // file size text in file rectangle +mediaviewFileRedCornerFg: #d55959; // red file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .pdf) +mediaviewFileYellowCornerFg: #e8a659; // yellow file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .zip) +mediaviewFileGreenCornerFg: #49a957; // green file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .exe) +mediaviewFileBlueCornerFg: #599dcf; // blue file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .dmg) +mediaviewFileExtFg: activeButtonFg; // file extension text in file thumbnail placeholder in file rectangle +mediaviewMenuBg: #ff00ff /* #383838 */; // context menu in Media Viewer background (NOTE(eqrfns): seems defined, but unreferenced in the sources) +mediaviewMenuBgOver: {{colors.surface_container_highest.dark.hex}} /* #505050 */; // context menu item background with mouse over (NOTE(eqrfns): this is actually the inactive side of the playback speed control slider for some reason) +mediaviewMenuBgRipple: #ff00ff /* #676767 */; // context menu item ripple effect (NOTE(eqrfns): also unused?) +mediaviewMenuFg: {{colors.on_surface.dark.hex}} /* windowFgActive */; // context menu item text +mediaviewBg: {{colors.surface_container_low.dark.hex}}eb /* #222222eb */; // Media Viewer background +mediaviewVideoBg: imageBg; // Media Viewer background when viewing a video in full screen +mediaviewControlBg: {{colors.scrim.default.hex}}3c; // controls background (like next photo / previous photo) +mediaviewControlFg: {{colors.primary.dark.hex}} /* windowFgActive */; // controls icon (like next photo / previous photo) +mediaviewCaptionBg: {{colors.surface_container_lowest.dark.hex}}a9 /* #11111180 */; // caption text background (when viewing photo with caption) +mediaviewCaptionFg: mediaviewControlFg; // caption text +mediaviewTextLinkFg: {{colors.primary.dark.hex}} /* #66f7e4 */; // caption text link +mediaviewSaveMsgBg: toastBg; // save to file toast message background in Media Viewer +mediaviewSaveMsgFg: toastFg; // save to file toast message text +mediaviewPlaybackActive: {{colors.on_surface_variant.dark.hex}} /* #c7c7c7 */; // video playback progress already played part +mediaviewPlaybackInactive: {{colors.on_surface_variant.dark.hex}}55 /* #252525 */; // video playback progress upcoming (not played yet) part +mediaviewPlaybackActiveOver: {{colors.on_surface.dark.hex}} /* #ffffff */; // video playback progress already played part with mouse over +mediaviewPlaybackInactiveOver: {{colors.on_surface_variant.dark.hex}}aa /* #474747 */; // video playback progress upcoming (not played yet) part with mouse over (NOTE(eqrfns): this actually only shows up when rewinding the video. I assume this is the "buffered" part, but not sure) +mediaviewPlaybackProgressFg: {{colors.on_surface.dark.hex}}c7 /* #ffffffc7 */; // video playback progress text +mediaviewPlaybackIconFg: mediaviewPlaybackActive; // video playback controls icon +mediaviewPlaybackIconFgOver: mediaviewPlaybackActiveOver; // video playback controls icon with mouse over +mediaviewTransparentBg: {{colors.on_surface.default.hex}} /* #ffffff */; // transparent filling part (when viewing a transparent .png file in Media Viewer) (NOTE(eqrfns): this is one of the checkerboard colors) +mediaviewTransparentFg: {{colors.on_surface_variant.default.hex}} /* #cccccc */; // another transparent filling part (NOTE(eqrfns): this is annother checkerboard color) +notificationBg: windowBg; // custom notification window background +callBg: {{colors.surface_container.dark.hex}}f2 /* #26282cf2 */; // phone call popup background +callNameFg: {{colors.on_surface.dark.hex}} /* #ffffff */; // phone call popup name text +callFingerprintBg: {{colors.scrim.dark.hex}}66; // phone call popup emoji fingerprint background +callStatusFg: {{colors.on_surface_variant.dark.hex}} /* #aaabac */; // phone call popup status text (NOTE(eqrfns): haven't seen this on Linux) +callIconFg: {{colors.on_surface.dark.hex}} /* #ffffff */; // phone call popup answer, hangup and mute mic icon +callAnswerBg: {{colors.primary_container.dark.hex}} /* #5ad1bf */; // phone call popup answer button background (NOTE(eqrfns): this is one of those "bugged" colors that sometimes get stuck on theme change) +callAnswerRipple: {{colors.inverse_primary.dark.hex}} /* #42c2b1 */; // phone call popup answer button ripple effect +callAnswerBgOuter: {{colors.primary.dark.hex}}26 /* #3febc926 */; // phone call popup answer button outer ripple effect +callHangupBg: {{colors.error_container.dark.hex}} /* #d75a5a */; // phone call popup hangup button background +callHangupRipple: {{colors.on_error_container.dark.hex}}19 /* #c04646 */; // phone call popup hangup button ripple effect +callCancelBg: {{colors.on_surface.dark.hex}} /* #ffffff */; // phone call popup line busy cancel button background +callCancelFg: {{colors.inverse_on_surface.dark.hex}}; // phone call popup line busy cancel button icon +callCancelRipple: #f1f1f1; // phone call popup line busy cancel button ripple effect +callMuteRipple: {{colors.on_surface.default.hex}}12 /* #ffffff12 */; // phone call popup mute mic ripple effect +callBarBg: dialogsBgActive; // active phone call bar background +callBarMuteRipple: dialogsRippleBgActive; // active phone call bar mute and hangup button ripple effect +callBarBgMuted: #8f8f8f; // phone call bar with muted mic background +callBarUnmuteRipple: #7f7f7f; // phone call bar with muted mic mute and hangup button ripple effect +callBarFg: dialogsNameFgActive; // phone call bar text and icons +importantTooltipBg: toastBg; // +importantTooltipFg: toastFg; // +importantTooltipFgLink: {{colors.primary.dark.hex}} /* #65fce8 */; // group call important tooltip text link color (NOTE(eqrfns): haven't seen this yet) +filterInputActiveBg: {{colors.surface_container_highest.default.hex}} /* #3d444b */; // default rounded input field active background (like in chats list search field when field is focused) +botKbBg: {{colors.surface_container_highest.default.hex}} /* #3d444b */; // bot keyboard button background +botKbDownBg: {{colors.surface_variant.default.hex}} /* #494f55 */; // bot keyboard button ripple effect +emojiIconFg: {{colors.outline.default.hex}} /* #6c7278 */; // emoji category icon +emojiIconFgActive: #ff00ff /* #36cdb9 */; // active emoji category icon (NOTE(eqrfns): seems to be missing in the sources) +overviewCheckBorder: {{colors.outline.default.hex}} /* #e4eaef */; // shared media round checkbox border +sideBarBg: {{colors.surface_container_lowest.default.hex}} /* #18191d */; // filters side bar background +sideBarBgActive: {{colors.surface_container.default.hex}} /* #282e33 */; // filters side bar active background +sideBarBgRipple: {{colors.surface_container_low.default.hex}} /* #22272b */; // filters side bar ripple effect +sideBarTextFg: {{colors.outline.default.hex}} /* #8d939e */; // filters side bar text +sideBarTextFgActive: {{colors.primary.default.hex}} /* #24c9b9 */; // filters side bar active item text +sideBarIconFg: {{colors.outline.default.hex}} /* #8d939e */; // filters side bar icon +sideBarIconFgActive: {{colors.primary.default.hex}} /* #25dbc9 */; // filters side bar active item icon +sideBarBadgeBg: {{colors.primary.default.hex}} /* #25dbc9 */; // filters side bar badge background +sideBarBadgeBgMuted: {{colors.outline.default.hex}} /* #8d939e */; // filters side bar unimportant badge background +statisticsChartInactive: {{colors.surface_container_high.default.hex}} /* #313a43d8 */; // inactive area in footer of statistic charts (NOTE(eqrfns): haven't seen this) +statisticsChartActive: {{colors.outline_variant.default.hex}} /* #596879d8 */; // sides in footer of statistic charts (NOTE(eqrfns): haven't seen this) + +// The following colors are not automatically exported into a theme as of Telegram Desktop 6.6.4. +// You can find them in the Telegram/lib_ui/ui/colors.palette file of the Telegram Desktop sources. +groupCallMenuBg: {{colors.surface_container.dark.hex}} /* #292d33 */; // group members list in group profile user last seen text with mouse over (NOTE(eqrfns): this is also used as a context menu background in media view) +groupCallMenuBgOver: {{colors.surface_container_high.dark.hex}} /* #343940 */; // group call popup menu with mouse over +groupCallMenuBgRipple: {{colors.surface_container_highest.dark.hex}} /* #3a4047 */; // group call popup menu ripple effect +groupCallMembersFg: {{colors.on_surface.dark.hex}} /* #ffffff */; // group call member name text (NOTE(eqrfns): this is used for the media view context menu text) +sideBarBadgeFg: {{colors.surface_container_lowest.default.hex}} /* #ffffff */; // filters side bar badge text (NOTE(eqrfns): this is used for sidebar counters) +callBgOpaque: {{colors.surface_container_low.dark.hex}} /* #1b1f23 */; // phone call popup background +callBgButton: {{colors.surface_container_lowest.dark.hex}}7f /* #1b1f237f */; // phone call window control buttons bg (NOTE(eqrfns): this is used for the top bar with signal strength and random emojis) +callIconBg: {{colors.on_surface.dark.hex}}1f /* #ffffff1f */; // phone call mute mic and camera button background +callIconBgActive: {{colors.on_surface.dark.hex}}e5 /* #ffffffe5 */; // phone call line busy cancel, muted mic and camera button background +callIconFgActive: {{colors.inverse_on_surface.dark.hex}} /* #222222 */; // phone call line busy cancel, muted mic and camera icon +callIconActiveRipple: {{colors.inverse_on_surface.dark.hex}}19 /* #f1f1f1 */; // phone call line busy cancel, muted mic and camera ripple effect +groupCallBg: {{colors.surface_container_low.dark.hex}} /* #1a2026 */; // group call popup background +groupCallActiveFg: {{colors.primary.dark.hex}} /* #4db8ff */; // group call active controls text (NOTE(eqrfns): this is used for regular calls too) +groupCallMembersBg: {{colors.surface_container.dark.hex}} /* #2c333d */; // group call members list background +groupCallMembersBgOver: {{colors.surface_container_high.dark.hex}} /* #323a45 */; // group call members list row with mouse over +groupCallMembersBgRipple: {{colors.surface_container_highest.dark.hex}} /* #39424f */; // group call member row ripple effect +groupCallMemberActiveIcon: {{colors.tertiary.dark.hex}} /* #8deb90 */; // group call active member icon +groupCallMemberActiveStatus: {{colors.tertiary.dark.hex}} /* #8deb90 */; // group call active member status text +groupCallMemberInactiveIcon: {{colors.outline.dark.hex}} /* #84888f */; // group call inactive member icon +groupCallMemberInactiveStatus: {{colors.secondary.dark.hex}} /* #61c0ff */; // group call inactive member status text +groupCallMemberMutedIcon: {{colors.error.dark.hex}} /* #ed7372 */; // group call muted by admin member icon +groupCallMemberNotJoinedStatus: {{colors.on_surface_variant.dark.hex}} /* #91979e */; // group call non joined member status text +groupCallIconFg: {{colors.on_surface.dark.hex}} /* #ffffff */; // group call mute / settings / leave icon +// I'll leave these group call button colors as they are for now. +groupCallLive1: #0dcc39; // group call live button color1 +groupCallLive2: #0bb6bd; // group call live button color2 +groupCallMuted1: #0992ef; // group call muted button color1 +groupCallMuted2: #16ccfb; // group call muted button color2 +groupCallForceMutedBar1: #c65493; // group call force muted top bar color1 +groupCallForceMutedBar2: #7a6af1; // group call force muted top bar color2 +groupCallForceMutedBar3: #5f95e8; // group call force muted top bar color3 +groupCallForceMuted1: #4f9cff; // group call force muted button color1 +groupCallForceMuted2: #9b52e9; // group call force muted button color2 +groupCallForceMuted3: #eb5353; // group call force muted button color3 +groupCallLeaveBg: #f75c5c7f; // group call leave button background +groupCallLeaveBgRipple: #f75c5c9e; // group call leave button ripple effect +groupCallVideoTextFg: #ffffffe0; // group call text over video +groupCallVideoSubTextFg: #ffffffc0; // group call additional text over video +// NOTE(eqrfns): These "chart" colors are also used for syntax highlighting! +// Unfortunately, there is probably no way to make them look good with high-contrast themes in both inbox and outbox messages +// if using non-surface background (like secondary_container, as in my case) for outbox messages. +statisticsChartLineBlue: {{colors.primary.default.hex | blend: {{"#327fe5" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #327fe5 */; // represents blue color on statistical charts +statisticsChartLineGreen: {{colors.primary.default.hex | blend: {{"#61c752" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #61c752 */; // represents green color on statistical charts +statisticsChartLineRed: {{colors.primary.default.hex | blend: {{"#e05356" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #e05356 */; // represents red color on statistical charts +statisticsChartLineGolden: {{colors.primary.default.hex | blend: {{"#eba52d" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #eba52d */; // represents golden color on statistical charts +statisticsChartLineLightblue: {{colors.primary.default.hex | blend: {{"#58a8ed" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #58a8ed */; // represents lightblue color on statistical charts +statisticsChartLineLightgreen: {{colors.primary.default.hex | blend: {{"#8fcf39" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #8fcf39 */; // represents lightgreen color on statistical charts +statisticsChartLineOrange: {{colors.primary.default.hex | blend: {{"#f28c39" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #f28c39 */; // represents orange color on statistical charts +statisticsChartLineIndigo: {{colors.primary.default.hex | blend: {{"#7f79f3" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #7f79f3 */; // represents indigo color on statistical charts +statisticsChartLinePurple: {{colors.primary.default.hex | blend: {{"#9f79e8" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #9f79e8 */; // represents purple color on statistical charts +statisticsChartLineCyan: {{colors.primary.default.hex | blend: {{"#40d0ca" | to_color}}, 1.0 | harmonize: {{colors.primary.default.hex}}}} /* #40d0ca */; // represents cyan color on statistical charts +//botKbColor: windowBoldFgOver; // bot keyboard button text +//botKbPrimaryBg: #298acfcc; // bot keyboard Primary button background +//botKbDangerBg: #e05356cc; // bot keyboard Danger button background +//botKbSuccessBg: #61c752cc; // bot keyboard Success button background +//botKbInlinePrimaryBg: #378eaeb3; // inline bot keyboard Primary button background +//botKbInlineDangerBg: #c9543eb3; // inline bot keyboard Danger button background +//botKbInlineSuccessBg: #489d38b3; // inline bot keyboard Success button background +//boxDividerBg: windowBgOver; // gray divider in boxes and layers +//boxDividerFg: windowShadowFg; // gray divider shadow in boxes and layers +//paymentsTipActive: #01ad0f; // tip button text in payments checkout form +//dialogsArchiveFg: #525252 | dialogsNameFg; // chat list archive name text +//dialogsScamFg: dialogsDraftFg; // chat list scam label +//dialogsArchiveFgOver: #525252 | dialogsNameFgOver; // chat list archive name text with mouse over +//dialogsScamFgOver: dialogsDraftFgOver; // chat list scam label with mouse over +//dialogsScamFgActive: dialogsDraftFgActive; // chat list scam label for current (active) chat +//emojiSubIconFgActive: #666666 | windowBoldFg; // active emoji subcategory icon +//stickerPanPremium1: #5a99ff; // premium sticker pack icon gradient 1 +//stickerPanPremium2: #45b9f3; // premium sticker pack icon gradient 2 +//historyPeerSavedMessagesBg: historyPeer4UserpicBg; // saved messages userpic background +//historyPeerArchiveUserpicBg: dialogsUnreadBgMuted; // archive folder userpic background +//settingsIconBg1: #f06964; // red settings icon background +//settingsIconBg2: #6dc534; // green settings icon background +//settingsIconBg3: #ed9f20; // light-orange settings icon background +//settingsIconBg4: #56b3f5; // light-blue settings icon background +//settingsIconBg5: #7595ff; // dark-blue settings icon background +//settingsIconBg6: #b580e2; // purple settings icon background +//settingsIconBg8: #f2925b; // dark-orange settings icon background +//settingsIconBgArchive: #9da2b0; // archive main menu icon background +//settingsIconFg: #ffffff; // settings icon shape +//mapPointDrop: #fd4444; // geo location marker background +//mapPointDot: #ffffff; // geo location marker point +//overviewCheckBgActive: windowBgActive; // shared media / files / links checkbox background for selected rows +//mediaviewPlaybackIconRipple: #ffffff14; // video playback controls ripple effect +//mediaviewPipControlsFg: #ffffffd9; // picture-in-picture controls +//mediaviewPipControlsFgOver: #ffffff; // picture-in-picture controls with mouse over +//mediaviewPipPlaybackActive: #ffffffda; // picture-in-picture playback progress already played part +//mediaviewPipPlaybackInactive: #ffffff26; // picture-in-picture playback progress upcoming (not played yet) part +//outdatedFg: #ffffff; // operating system version is outdated bar text +//outdateSoonBg: #e08543; // operating system version is soon outdated bar background +//outdatedBg: #e05745; // operating system version is already outdated bar background +//spellUnderline: #ff000088 | attentionButtonFg; // misspelled words +//walletTitleBg: #121213; // wallet window title background when window is inactive +//walletTitleBgActive: walletTitleBg; // wallet window title background when window is active +//walletTitleButtonBg: walletTitleBg; // wallet window title minimize/maximize/restore button background when window is inactive (Windows only) +//walletTitleButtonFg: #5a5a5b; // wallet window title minimize/maximize/restore button icon when window is inactive (Windows only) +//walletTitleButtonBgOver: #373738; // wallet window title minimize/maximize/restore button background with mouse over when window is inactive (Windows only) +//walletTitleButtonFgOver: #747475; // wallet window title minimize/maximize/restore button icon with mouse over when window is inactive (Windows only) +//walletTitleButtonBgActive: walletTitleButtonBg; // wallet window title minimize/maximize/restore button background when window is active (Windows only) +//walletTitleButtonFgActive: walletTitleButtonFg; // wallet window title minimize/maximize/restore button icon when window is active (Windows only) +//walletTitleButtonBgActiveOver: walletTitleButtonBgOver; // wallet window title minimize/maximize/restore button background with mouse over when window is active (Windows only) +//walletTitleButtonFgActiveOver: walletTitleButtonFgOver; // wallet window title minimize/maximize/restore button icon with mouse over when window is active (Windows only) +//walletTitleButtonCloseBg: walletTitleButtonBg; // wallet window title close button background when window is inactive (Windows only) +//walletTitleButtonCloseFg: walletTitleButtonFg; // wallet window title close button icon when window is inactive (Windows only) +//walletTitleButtonCloseBgOver: titleButtonCloseBgOver; // wallet window title close button background with mouse over when window is inactive (Windows only) +//walletTitleButtonCloseFgOver: titleButtonCloseFgOver; // wallet window title close button icon with mouse over when window is inactive (Windows only) +//walletTitleButtonCloseBgActive: walletTitleButtonCloseBg; // wallet window title close button background when window is active (Windows only) +//walletTitleButtonCloseFgActive: walletTitleButtonCloseFg; // wallet window title close button icon when window is active (Windows only) +//walletTitleButtonCloseBgActiveOver: walletTitleButtonCloseBgOver; // wallet window title close button background with mouse over when window is active (Windows only) +//walletTitleButtonCloseFgActiveOver: walletTitleButtonCloseFgOver; // wallet window title close button icon with mouse over when window is active (Windows only) +//walletTopBg: #1e1f21; // wallet top part background +//walletBalanceFg: #ffffff; // wallet balance text +//walletSubBalanceFg: #f9f9f9; // wallet balance label text +//walletTopLabelFg: #999999; // wallet top updated label text +//walletTopIconFg: walletTopLabelFg; // wallet top refresh and menu icons +//walletTopIconRipple: #ffffff12; // wallet top menu icon ripple effect +//songCoverOverlayFg: #00000066; // song cover overlay +//photoEditorItemBaseHandleFg: #3ccaef; // photo editor handle circle +//premiumButtonBg1: #55a5ff; // upgrade to premium button gradient 1 +//premiumButtonBg2: #a767ff; // upgrade to premium button gradient 2 +//premiumButtonBg3: #db5c9d; // upgrade to premium button gradient 3 +//premiumButtonFg: #ffffff; // upgrade to premium button text +//premiumIconBg1: #f38926; // icon in premium settings gradient 1 +//premiumIconBg2: #e44456; // icon in premium settings gradient 2 +//premiumIconBg3: #4acd43; // icon in premium settings gradient 3 +//creditsBg1: #ffb222; // credits icon gradient 1, normal +//creditsBg2: #FFD951; // credits icon gradient 2, light +//creditsBg3: #f0b400; // credits icon gradient 3, dark +//creditsFg: #ba7000; // credits text on light background +//creditsStroke: #da8735; // credits icon stroke +//currencyFg: #168acd; // currency icon, blue +//rankAdminFg: #49a355; // admin badge text and pill, green +//rankOwnerFg: #956ac8; // owner badge text and pill, purple +//rankUserFg: windowSubTextFg; // regular user badge text, gray diff --git a/config/matugen/templates/telegram.tdesktop-theme.bak b/config/matugen/templates/telegram.tdesktop-theme.bak new file mode 100644 index 0000000..4d9f09d --- /dev/null +++ b/config/matugen/templates/telegram.tdesktop-theme.bak @@ -0,0 +1,275 @@ +// --- Window & Basic Colors --- +windowBg: {{colors.background.default.hex}}; +windowFg: {{colors.on_background.default.hex}}; +windowBgOver: {{colors.surface_container_low.default.hex}}; +windowBgRipple: {{colors.surface_container_high.default.hex}}; +windowFgOver: {{colors.on_surface.default.hex}}; +windowSubTextFg: {{colors.on_surface_variant.default.hex}}; +windowSubTextFgOver: {{colors.on_surface.default.hex}}; +windowBoldFg: {{colors.on_surface.default.hex}}; +windowBoldFgOver: {{colors.on_surface.default.hex}}; +windowBgActive: {{colors.primary.default.hex}}; +windowFgActive: {{colors.on_primary.default.hex}}; +windowActiveTextFg: {{colors.primary.default.hex}}; +windowShadowFg: #0000005c; +windowShadowFgFallback: {{colors.background.default.hex}}; +shadowFg: {{colors.on_background.default.hex}}33; +slideFadeOutBg: #0000003c; +slideFadeOutShadowFg: #0000005c; +imageBg: {{colors.background.default.hex}}; +imageBgTransparent: #ffffff; + +// --- Buttons --- +activeButtonBg: {{colors.primary.default.hex}}; +activeButtonBgOver: {{colors.primary.default.hex}}e6; +activeButtonBgRipple: {{colors.primary.default.hex}}cc; +activeButtonFg: {{colors.on_primary.default.hex}}; +activeButtonFgOver: {{colors.on_primary.default.hex}}; +activeButtonSecondaryFg: {{colors.on_primary.default.hex}}; +activeButtonSecondaryFgOver: {{colors.on_primary.default.hex}}; +activeLineFg: {{colors.primary.default.hex}}; +activeLineFgError: {{colors.error.default.hex}}; +lightButtonBg: {{colors.background.default.hex}}; +lightButtonBgOver: {{colors.surface_container_low.default.hex}}; +lightButtonBgRipple: {{colors.surface_container_high.default.hex}}; +lightButtonFg: {{colors.primary.default.hex}}; +lightButtonFgOver: {{colors.primary.default.hex}}; +attentionButtonFg: {{colors.error.default.hex}}; +attentionButtonFgOver: {{colors.on_error.default.hex}}; +attentionButtonBgOver: {{colors.error.default.hex}}; +attentionButtonBgRipple: {{colors.error.default.hex}}; +outlineButtonBg: {{colors.background.default.hex}}; +outlineButtonBgOver: {{colors.surface_container_low.default.hex}}; +outlineButtonOutlineFg: {{colors.primary.default.hex}}; +outlineButtonBgRipple: {{colors.surface_container_high.default.hex}}; + +// --- Menus --- +menuBg: {{colors.surface_container.default.hex}}; +menuBgOver: {{colors.surface_container_high.default.hex}}; +menuBgRipple: {{colors.surface_container_highest.default.hex}}; +menuIconFg: {{colors.on_surface_variant.default.hex}}; +menuIconFgOver: {{colors.primary.default.hex}}; +menuSubmenuArrowFg: {{colors.on_surface_variant.default.hex}}; +menuFgDisabled: {{colors.outline.default.hex}}; +menuSeparatorFg: {{colors.outline_variant.default.hex}}; + +// --- Scrollbars & Inputs --- +scrollBarBg: {{colors.primary.default.hex}}66; +scrollBarBgOver: {{colors.primary.default.hex}}aa; +scrollBg: #0000001a; +scrollBgOver: #0000002c; +smallCloseIconFg: {{colors.on_surface_variant.default.hex}}; +smallCloseIconFgOver: {{colors.on_surface.default.hex}}; +radialFg: {{colors.on_primary_container.default.hex}}; +radialBg: #00000056; +placeholderFg: {{colors.on_surface_variant.default.hex}}; +placeholderFgActive: {{colors.primary.default.hex}}; +inputBorderFg: {{colors.outline_variant.default.hex}}; +filterInputBorderFg: {{colors.primary.default.hex}}; +checkboxFg: {{colors.primary.default.hex}}; +sliderBgInactive: {{colors.surface_container_high.default.hex}}; +sliderBgActive: {{colors.primary.default.hex}}; +tooltipBg: {{colors.surface_container_highest.default.hex}}; +tooltipFg: {{colors.on_surface.default.hex}}; +tooltipBorderFg: {{colors.primary.default.hex}}; + +// --- Title Bar & Trays --- +titleBg: {{colors.background.default.hex}}; +titleShadow: #00000003; +titleButtonFg: {{colors.on_surface_variant.default.hex}}; +titleButtonBgOver: {{colors.surface_container_low.default.hex}}; +titleButtonFgOver: {{colors.on_surface.default.hex}}; +titleButtonCloseBgOver: #e81123; +titleButtonCloseFgOver: #ffffff; +titleFgActive: {{colors.on_surface.default.hex}}; +titleFg: {{colors.on_surface_variant.default.hex}}; +trayCounterBg: {{colors.primary.default.hex}}; +trayCounterBgMute: {{colors.surface_container_high.default.hex}}; +trayCounterFg: {{colors.on_primary.default.hex}}; +trayCounterBgMacInvert: #ffffff; +trayCounterFgMacInvert: #ffffff01; + +// --- Box & Overlays --- +layerBg: #0000007f; +cancelIconFg: {{colors.on_surface_variant.default.hex}}; +cancelIconFgOver: {{colors.on_surface.default.hex}}; +boxBg: {{colors.background.default.hex}}; +boxTextFg: {{colors.on_background.default.hex}}; +boxTextFgGood: {{colors.primary.default.hex}}; +boxTextFgError: {{colors.error.default.hex}}; +boxTitleFg: {{colors.on_background.default.hex}}; +boxSearchBg: {{colors.surface_container_low.default.hex}}; +boxSearchCancelIconFg: {{colors.on_surface_variant.default.hex}}; +boxSearchCancelIconFgOver: {{colors.on_surface.default.hex}}; +boxTitleAdditionalFg: {{colors.on_surface_variant.default.hex}}; +boxTitleCloseFg: {{colors.on_surface_variant.default.hex}}; +boxTitleCloseFgOver: {{colors.on_surface.default.hex}}; +membersAboutLimitFg: {{colors.error.default.hex}}; + +// --- Contacts & Intro --- +contactsBg: {{colors.background.default.hex}}; +contactsBgOver: {{colors.surface_container_low.default.hex}}; +contactsNameFg: {{colors.on_background.default.hex}}; +contactsStatusFg: {{colors.on_surface_variant.default.hex}}; +contactsStatusFgOver: {{colors.on_surface_variant.default.hex}}; +contactsStatusFgOnline: {{colors.primary.default.hex}}; +photoCropFadeBg: #0000007f; +photoCropPointFg: #ffffff7f; +introBg: {{colors.background.default.hex}}; +introTitleFg: {{colors.on_background.default.hex}}; +introDescriptionFg: {{colors.on_surface_variant.default.hex}}; +introErrorFg: {{colors.error.default.hex}}; +introCoverTopBg: {{colors.primary.default.hex}}; +introCoverBottomBg: {{colors.background.default.hex}}; +introCoverIconsFg: {{colors.primary.default.hex}}; +introCoverPlaneTrace: {{colors.primary.default.hex}}69; +introCoverPlaneInner: {{colors.primary.default.hex}}; +introCoverPlaneOuter: {{colors.background.default.hex}}; +introCoverPlaneTop: #ffffff; + +// --- Dialogs (Chat list) --- +dialogsMenuIconFg: {{colors.on_surface_variant.default.hex}}; +dialogsMenuIconFgOver: {{colors.primary.default.hex}}; +dialogsBg: {{colors.background.default.hex}}; +dialogsNameFg: {{colors.on_background.default.hex}}; +dialogsChatIconFg: {{colors.on_background.default.hex}}; +dialogsDateFg: {{colors.on_surface_variant.default.hex}}; +dialogsTextFg: {{colors.on_surface_variant.default.hex}}; +dialogsTextFgService: {{colors.primary.default.hex}}; +dialogsDraftFg: {{colors.error.default.hex}}; +dialogsVerifiedIconBg: {{colors.primary.default.hex}}; +dialogsVerifiedIconFg: {{colors.on_primary.default.hex}}; +dialogsSendingIconFg: {{colors.on_surface_variant.default.hex}}; +dialogsSentIconFg: {{colors.primary.default.hex}}; +dialogsUnreadBg: {{colors.primary.default.hex}}; +dialogsUnreadBgMuted: {{colors.outline_variant.default.hex}}; +dialogsUnreadFg: {{colors.on_primary.default.hex}}; +dialogsBgOver: {{colors.surface_container_low.default.hex}}; +dialogsNameFgOver: {{colors.on_surface.default.hex}}; +dialogsChatIconFgOver: {{colors.on_surface.default.hex}}; +dialogsDateFgOver: {{colors.on_surface.default.hex}}; +dialogsTextFgOver: {{colors.on_surface.default.hex}}; +dialogsTextFgServiceOver: {{colors.primary.default.hex}}; +dialogsDraftFgOver: {{colors.error.default.hex}}; +dialogsVerifiedIconBgOver: {{colors.primary.default.hex}}; +dialogsVerifiedIconFgOver: {{colors.on_primary.default.hex}}; +dialogsSendingIconFgOver: {{colors.on_surface.default.hex}}; +dialogsSentIconFgOver: {{colors.primary.default.hex}}; +dialogsUnreadBgOver: {{colors.primary.default.hex}}; +dialogsUnreadBgMutedOver: {{colors.surface_container_high.default.hex}}; +dialogsUnreadFgOver: {{colors.on_primary.default.hex}}; +dialogsBgActive: {{colors.surface_container_high.default.hex}}; +dialogsNameFgActive: {{colors.on_surface.default.hex}}; +dialogsChatIconFgActive: {{colors.on_surface.default.hex}}; +dialogsDateFgActive: {{colors.on_surface.default.hex}}; +dialogsTextFgActive: {{colors.on_surface.default.hex}}; +dialogsTextFgServiceActive: {{colors.on_surface.default.hex}}; +dialogsDraftFgActive: {{colors.on_surface.default.hex}}; +dialogsVerifiedIconBgActive: {{colors.on_surface.default.hex}}; +dialogsVerifiedIconFgActive: {{colors.surface_container_high.default.hex}}; +dialogsSendingIconFgActive: {{colors.on_surface.default.hex}}99; +dialogsSentIconFgActive: {{colors.on_surface.default.hex}}; +dialogsUnreadBgActive: {{colors.on_primary_container.default.hex}}; +dialogsUnreadBgMutedActive: {{colors.on_surface_variant.default.hex}}; +dialogsUnreadFgActive: {{colors.primary_container.default.hex}}; +dialogsForwardBg: {{colors.surface_container_low.default.hex}}; +dialogsForwardFg: {{colors.on_surface.default.hex}}; +searchedBarBg: {{colors.surface_container_low.default.hex}}; +searchedBarBorder: {{colors.background.default.hex}}; +searchedBarFg: {{colors.on_surface_variant.default.hex}}; +topBarBg: {{colors.background.default.hex}}; +emojiPanBg: {{colors.background.default.hex}}; +emojiPanCategories: {{colors.surface_container_low.default.hex}}; +emojiPanHeaderFg: {{colors.on_surface.default.hex}}; +emojiPanHeaderBg: {{colors.surface_container_low.default.hex}}; + +// --- History (Chat) --- +historyTextInFg: {{colors.on_surface.default.hex}}; +historyTextOutFg: {{colors.on_primary.default.hex}}; +historyCaptionInFg: {{colors.on_surface.default.hex}}; +historyCaptionOutFg: {{colors.on_primary.default.hex}}; +historyFileNameInFg: {{colors.on_surface.default.hex}}; +historyFileNameOutFg: {{colors.on_primary.default.hex}}; +historyOutIconFg: {{colors.on_primary.default.hex}}; +historyOutIconFgSelected: #ffffff; +historyIconFgInverted: {{colors.on_primary.default.hex}}; +historySendingOutIconFg: {{colors.on_primary.default.hex}}aa; +historySendingInIconFg: {{colors.on_surface_variant.default.hex}}; +historySendingInvertedIconFg: #ffffffc8; +historySystemBg: {{colors.surface_container_high.default.hex}}7f; +historySystemBgSelected: {{colors.primary.default.hex}}a2; +historySystemFg: #ffffff; +historyUnreadBarBg: {{colors.surface_container_high.default.hex}}; +historyUnreadBarBorder: {{colors.surface_container_high.default.hex}}; +historyUnreadBarFg: {{colors.primary.default.hex}}; + +// Peer Colors (Multi-color names in groups) +historyPeer1NameFg: {{colors.error.default.hex}}; +historyPeer1UserpicBg: {{colors.error.default.hex}}; +historyPeer2NameFg: {{colors.primary.default.hex}}; +historyPeer2UserpicBg: {{colors.primary.default.hex}}; +historyPeer3NameFg: {{colors.tertiary.default.hex}}; +historyPeer3UserpicBg: {{colors.tertiary.default.hex}}; +historyPeer4NameFg: {{colors.secondary.default.hex}}; +historyPeer4UserpicBg: {{colors.secondary.default.hex}}; +historyPeer5NameFg: {{colors.inverse_primary.default.hex}}; +historyPeer5UserpicBg: {{colors.inverse_primary.default.hex}}; +historyPeerUserpicFg: {{colors.background.default.hex}}; + +// Messages +msgInBg: {{colors.surface_container_high.default.hex}}; +msgInBgSelected: {{colors.surface_container_highest.default.hex}}; +msgOutBg: {{colors.primary.default.hex}}; +msgOutBgSelected: {{colors.primary_fixed_dim.default.hex}}; +msgSelectOverlay: {{colors.primary.default.hex}}4c; +msgInDateFg: {{colors.on_surface_variant.default.hex}}; +msgInDateFgSelected: {{colors.on_surface.default.hex}}; +msgOutDateFg: {{colors.on_primary.default.hex}}99; +msgOutDateFgSelected: {{colors.on_primary.default.hex}}; +msgServiceBg: {{colors.surface_container_high.default.hex}}7f; +msgServiceFg: #ffffff; +msgInReplyBarColor: {{colors.primary.default.hex}}; +msgOutReplyBarColor: {{colors.on_primary.default.hex}}; +msgInMonoFg: {{colors.primary.default.hex}}; +msgOutMonoFg: {{colors.on_primary.default.hex}}; + +// Files & Media +msgFileInBg: {{colors.primary.default.hex}}; +msgFileInBgOver: {{colors.primary_fixed_dim.default.hex}}; +msgFileOutBg: {{colors.background.default.hex}}; +historyFileInRadialFg: {{colors.primary.default.hex}}; +historyFileOutRadialFg: {{colors.background.default.hex}}; +msgWaveformInActive: {{colors.primary.default.hex}}; +msgWaveformInInactive: {{colors.surface_container_highest.default.hex}}; +msgWaveformOutActive: {{colors.on_primary.default.hex}}; +msgWaveformOutInactive: {{colors.on_primary.default.hex}}80; + +// --- Compose Area --- +historyComposeAreaBg: {{colors.background.default.hex}}; +historyComposeAreaFg: {{colors.on_background.default.hex}}; +historyComposeIconFg: {{colors.on_surface_variant.default.hex}}; +historyComposeIconFgOver: {{colors.primary.default.hex}}; +historySendIconFg: {{colors.primary.default.hex}}; +historySendIconFgOver: {{colors.primary_fixed_dim.default.hex}}; +historyReplyBg: {{colors.background.default.hex}}; +historyReplyIconFg: {{colors.primary.default.hex}}; +historyReplyCancelFg: {{colors.on_surface_variant.default.hex}}; + +// --- SideBar (Main Menu) --- +sideBarBg: {{colors.background.default.hex}}; +sideBarBgActive: {{colors.surface_container_high.default.hex}}; +sideBarBgRipple: {{colors.primary.default.hex}}33; +sideBarTextFgActive: {{colors.primary.default.hex}}; +sideBarIconFgActive: {{colors.primary.default.hex}}; +sideBarTextFg: {{colors.on_surface_variant.default.hex}}; +sideBarIconFg: {{colors.on_surface_variant.default.hex}}; + +// --- Media View --- +mediaviewBg: {{colors.background.default.hex}}eb; +mediaviewFileBg: {{colors.background.default.hex}}; +mediaviewFileNameFg: {{colors.on_background.default.hex}}; +mediaviewMenuBg: {{colors.surface_container.default.hex}}; +mediaviewMenuFg: #ffffff; +mediaviewPlaybackActive: {{colors.primary.default.hex}}; +mediaviewPlaybackInactive: {{colors.surface_container_high.default.hex}}; + diff --git a/config/matugen/templates/television.toml b/config/matugen/templates/television.toml new file mode 100644 index 0000000..8e080c7 --- /dev/null +++ b/config/matugen/templates/television.toml @@ -0,0 +1,19 @@ +# Television Colors +# Generated with Matugen + +background = '{{colors.surface.default.hex}}' +border_fg = '{{colors.outline.default.hex}}' +text_fg = '{{colors.on_surface.default.hex}}' +dimmed_text_fg = '{{colors.on_surface_variant.default.hex}}' +input_text_fg = '{{colors.secondary.default.hex}}' +result_count_fg = '{{colors.secondary.default.hex}}' +result_name_fg = '{{colors.on_surface.default.hex}}' +result_line_number_fg = '{{colors.secondary.default.hex}}' +result_value_fg = '{{colors.secondary.default.hex}}' +selection_bg = '{{colors.primary.default.hex}}' +selection_fg = '{{colors.on_primary.default.hex}}' +match_fg = '{{colors.inverse_primary.default.hex}}' +preview_title_fg = '{{colors.tertiary.default.hex}}' +channel_mode_fg = '{{colors.tertiary.default.hex}}' +remote_control_mode_fg = '{{colors.secondary.default.hex}}' +send_to_channel_mode_fg = '{{colors.tertiary.default.hex}}' diff --git a/config/matugen/templates/terminal-sequences b/config/matugen/templates/terminal-sequences new file mode 100644 index 0000000..fce83a0 --- /dev/null +++ b/config/matugen/templates/terminal-sequences @@ -0,0 +1,26 @@ +]4;0;{{colors.surface.dark.hex}} +\]4;8;{{colors.surface_container_high.dark.hex}} +\]4;1;{{colors.error.dark.hex | auto_lightness: 15 }} +\]4;9;{{colors.error.dark.hex | auto_lightness: 10 }} +\]4;2;{{colors.tertiary.dark.hex | auto_lightness: 25 }} +\]4;10;{{colors.tertiary.dark.hex | auto_lightness: 10 }} +\]4;3;{{colors.tertiary.dark.hex | auto_lightness: 20 }} +\]4;11;{{colors.tertiary_fixed.dark.hex | auto_lightness: 10 }} +\]4;4;{{colors.secondary.dark.hex | auto_lightness: 25 }} +\]4;12;{{colors.secondary.dark.hex | auto_lightness: 10 }} +\]4;5;{{colors.secondary.dark.hex | auto_lightness: 20 }} +\]4;13;{{colors.secondary_fixed.dark.hex| auto_lightness: 10 }} +\]4;6;{{colors.primary.dark.hex | auto_lightness: 10 }} +\]4;14;{{colors.primary.dark.hex | auto_lightness: -5 }} +\]4;7;{{colors.on_surface_variant.dark.hex}} +\]4;15;{{colors.on_surface.dark.hex}} +\]11;{{colors.surface.dark.hex}} +\]19;{{colors.surface.dark.hex}} +\]4;232;{{colors.surface.dark.hex}} +\]4;257;{{colors.surface.dark.hex}} +\]708;{{colors.surface.dark.hex}} +\]10;{{colors.on_surface.dark.hex}} +\]17;{{colors.on_surface.dark.hex}} +\]4;256;{{colors.on_surface.dark.hex}} +\]12;{{colors.on_surface.dark.hex}} +\]13;{{colors.on_surface.dark.hex}} \ No newline at end of file diff --git a/config/matugen/templates/tmux-colors.conf b/config/matugen/templates/tmux-colors.conf new file mode 100644 index 0000000..f35e432 --- /dev/null +++ b/config/matugen/templates/tmux-colors.conf @@ -0,0 +1,18 @@ +# Auto-generated by Matugen + +set -g status-bg "{{colors.surface_container_lowest.default.hex}}" +set -gq @thm_bar_bg "{{colors.surface_container_lowest.default.hex}}" + +set -gq @thm_bg "{{colors.surface.default.hex}}" +set -gq @thm_fg "{{colors.on_surface.default.hex}}" +set -gq @thm_primary "{{colors.primary.default.hex}}" +set -gq @thm_inverse_primary "{{colors.inverse_primary.default.hex}}" +set -gq @thm_surface_low "{{colors.surface_container_low.default.hex}}" +set -gq @thm_surface "{{colors.surface_container.default.hex}}" +set -gq @thm_surface_variant "{{colors.surface_container_high.default.hex}}" +set -gq @thm_outline "{{colors.outline_variant.default.hex}}" +set -gq @thm_text_variant "{{colors.on_surface_variant.default.hex}}" + +# Some variables/options must be re-set, which can be done here +set -g status-style "bg=#{@thm_bg},fg=#{@thm_fg}" +set -g window-active-style "bg=#{@thm_bg},fg=#{@thm_fg}" diff --git a/config/matugen/templates/vivaldi.css b/config/matugen/templates/vivaldi.css new file mode 100644 index 0000000..37b48b7 --- /dev/null +++ b/config/matugen/templates/vivaldi.css @@ -0,0 +1,67 @@ +#browser { +--colorFg: {{colors.on_surface.default.rgb}} !important; /* foreground text */ +--colorFgAlpha: {{colors.on_surface.default.rgba | set_alpha: 0.10}} !important; /* foreground text */ +--colorFgIntense: {{colors.on_surface.default.rgb}} !important; /* foreground text */ +--colorFgFaded: {{colors.on_surface.default.rgb | set_lightness: -10.0}} !important; /* unfocused window foreground text */ +--colorFgFadedMore: {{colors.on_surface.default.rgb | set_lightness: -15.0}} !important; /* unfocused window foreground text */ +--colorFgFadedMost: {{colors.on_surface.default.rgb | set_lightness: -25.0}} !important; /* unfocused window foreground text */ +--colorBg: {{colors.secondary_container.default.rgb}} !important; /* adress bar and selected tab and settings sidebar */ +--colorBgAlpha: {{colors.secondary_container.default.rgba | set_alpha: 0.90}} !important; /* adress bar and selected tab and settings sidebar */ +--colorBgAlphaHeavy: {{colors.secondary_container.default.rgba | set_alpha: 0.65}} !important; /* adress bar and selected tab and settings sidebar */ +--colorBgAlphaHeavier: {{colors.secondary_container.default.rgba | set_alpha: 0.25}} !important; /* adress bar and selected tab and settings sidebar */ +--colorBgAlphaBlur: {{colors.surface.default.rgb}} !important; /* adress bar and selected tab */ +--colorBgDark: {{colors.surface.default.rgb}} !important; /* n/a */ +--colorBgDarker: {{colors.surface.default.rgb | set_lightness: -10.0}} !important; /* n/a */ +--colorBgLight: {{colors.surface.default.rgb | set_lightness: 5.0}} !important; /* unfocused adress bar and selected tab */ +--colorBgLighter: {{colors.surface.default.rgb | set_lightness: 15.0}} !important; /* unfocused adress bar and selected tab */ +--colorBgLightIntense: {{colors.surface_dim.default.rgb | set_lightness: 15.0}} !important; /* n/a */ +--colorBgIntense: {{colors.surface_dim.default.rgb}} !important; /* search field */ +--colorBgIntenser: {{colors.surface_dim.default.rgb | set_lightness: -5.0}} !important; /* search field */ +--colorBgIntserAlpha: {{colors.surface_dim.default.rgba | set_lightness: -5.0 | set_alpha: 0.92}} !important; /* search field */ +--colorBgInverse: {{colors.surface_variant.default.rgb}} !important; /* only on crtl+f => not found */ +--colorBgInverser: {{colors.surface_variant.default.rgb | set_lightness: 10.0}} !important; /* only on crtl+f => not found */ +--colorBgFaded: {{colors.primary.default.rgb}} !important; /* n/a */ +--colorHighlightBg: {{colors.primary.default.rgb}} !important; /* text highlight and search field border */ +--colorHighlightBgFaded: {{colors.primary_fixed_dim.default.rgb | set_lightness: 10.0}} !important; /* text highlight and search field border */ +--colorHighlightBgAlpha: {{colors.primary.default.rgba | set_alpha: 0.10}} !important; /* text highlight and search field border */ +--colorHighlightBgDark: {{colors.inverse_primary .default.rgb | set_lightness: -10.0}} !important; /* text highlight and search field border */ +--colorHighlightFg: {{colors.on_primary.default.rgb}} !important; /* selected text */ +--colorHighlightFgAlpha: {{colors.on_primary.default.rgba | set_alpha: 0.50}} !important; /* selected text */ +--colorHighlightFgAlphaHeavy: {{colors.on_primary.default.rgba | set_alpha: 0.25}} !important; /* selected text */ +--colorAccentBg: {{colors.surface.default.rgb}} !important; /* tab bg color */ +--colorAccentBgAlpha: {{colors.surface.default.rgba | set_alpha: 0.55}} !important; /* tab bg color */ +--colorAccentBgAlphaHeavy: {{colors.surface.default.rgba | set_alpha: 0.35}} !important; /* tab bg color */ +--colorAccentBgDark: {{colors.surface_container_low.default.rgb}} !important; /* n/a */ +--colorAccentBgDarker: {{colors.surface_container_lowest.default.rgb}} !important; /* n/a */ +--colorAccentBgFaded: {{colors.surface_dim.default.rgb}} !important; /* unfocused tab bg color */ +--colorAccentBgFadedMore: {{colors.surface_container_low.default.rgb}} !important; /* n/a */ +--colorAccentBgFadedMost: {{colors.surface_container_lowest.default.rgb}} !important; /* n/a */ +--colorAccentBorder: {{colors.outline_variant.default.rgb}} !important; /* n/a */ +--colorAccentBorderDark: {{colors.outline_variant.default.rgb | set_lightness: -10.0}} !important; /* n/a */ +--colorAccentFg: {{colors.on_surface.default.rgb}} !important; /* tab titles and vivaldi sign */ +--colorAccentFgFaded: {{colors.on_surface_variant.default.rgb | set_lightness: -20.0}} !important; /* tab titles and vivaldi sign */ +--colorAccentFgAlpha: {{colors.on_surface.default.rgba | set_alpha: 0.15}} !important; /* tab titles and vivaldi sign */ +--colorAccentFgAlphaHeavy: {{colors.on_surface.default.rgba | set_alpha: 0.35}} !important; /* tab titles and vivaldi sign */ +--colorBorder: {{colors.outline.default.rgb}} !important; /* some borders */ +--colorBorderDisabled: {{colors.surface_tint.default.rgb}} !important; /* some borders disabled */ +--colorBorderSubtle: {{colors.outline.default.rgb | set_lightness: -5.0}} !important; /* some borders disabled */ +--colorBorderIntense: {{colors.outline_variant.default.rgb}} !important; /* some borders disabled */ +--colorSuccessBg: rgb(118 100.00% 32.75%); +--colorSuccessBgAlpha: rgba(118 100.00% 32.75% / 0.10); +--colorSuccessFg: rgb(0 0.00% 100.00%); +--colorWarningBg: rgb(48 100.00% 50.00%); +--colorWarningBgAlpha: rgba(48 100.00% 50.00% / 0.10); +--colorWarningFg: rgb(0 0.00% 0.00%); +--colorErrorBg: {{colors.error_container.default.rgb}} !important; +--colorErrorBgAlpha: {{colors.error_container.default.rgba | set_alpha: 0.10}} !important; +--colorErrorFg: {{colors.on_error.default.rgb}} !important; +/* --colorWindowBg: {{colors.error.default.rgb}} !important; new page monotone bg (replaces image background) */ +/* --colorWindowFg: {{colors.error.default.rgb}} !important; fg for previos*/ +} + +/* in some color schemes settings appear too bright. this is meant to fix it. */ +.vivaldi-settings, +.settings-content, +.settings-sidebar { + background-color: {{colors.surface.default.rgb}} !important; +} diff --git a/config/matugen/templates/walker.css b/config/matugen/templates/walker.css new file mode 100644 index 0000000..22a4a85 --- /dev/null +++ b/config/matugen/templates/walker.css @@ -0,0 +1,10 @@ +:root{ +--window_bg_color: {{colors.surface.default.hex}}; +--accent_bg_color: {{colors.primary.default.hex}}; +--theme_fg_color: {{colors.on_error_container.default.hex}}; +--error_bg_color: {{colors.on_tertiary.default.hex}}; +--error_fg_color: {{colors.surface_container_lowest.default.hex}}; +--hover_fg_color: {{colors.on_secondary_fixed.default.hex}}; + + +}; diff --git a/config/matugen/templates/wezterm_theme.toml b/config/matugen/templates/wezterm_theme.toml new file mode 100644 index 0000000..7640228 --- /dev/null +++ b/config/matugen/templates/wezterm_theme.toml @@ -0,0 +1,32 @@ +[colors] +background = "{{colors.background.default.hex}}" +foreground = "{{colors.on_surface.default.hex}}" +cursor_bg = "{{colors.on_surface.default.hex}}" +cursor_border = "{{colors.on_surface.default.hex}}" +cursor_fg = "{{colors.on_surface_variant.default.hex}}" +selection_bg = "{{colors.secondary_fixed_dim.default.hex}}" +selection_fg = "{{colors.on_secondary.default.hex}}" + +split = "{{colors.secondary_fixed_dim.default.hex}}" + +ansi = [ + "#191919", + "#D90202", + "#7FB11B", + "#FFD739", + "#3570D7", + "#BE84FF", + "#66D9EF", + "#F8F8F8" +] + +brights = [ + "#4D4D4D", + "#FF4747", + "#A0D04D", + "#FFEB4D", + "#6A9FF7", + "#D9A6FF", + "#80F5FF", + "#FFFFFF" +] diff --git a/config/matugen/templates/windows_term.json b/config/matugen/templates/windows_term.json new file mode 100644 index 0000000..adc829f --- /dev/null +++ b/config/matugen/templates/windows_term.json @@ -0,0 +1,23 @@ +{ + "name": "Matugen Dark Generated Theme", + "black": "{{colors.surface.dark.hex}}", + "red": "{{colors.error.dark.hex | auto_lightness: 15 }}", + "green": "{{colors.tertiary.dark.hex | auto_lightness: 25 }}", + "yellow": "{{colors.tertiary.dark.hex | auto_lightness: 20 }}", + "blue": "{{colors.secondary.dark.hex | auto_lightness: 25 }}", + "purple": "{{colors.secondary.dark.hex | auto_lightness: 20 }}", + "cyan": "{{colors.primary.dark.hex | auto_lightness: 10 }}", + "white": "{{colors.on_surface_variant.dark.hex}}", + "brightBlack": "{{colors.surface_container_high.dark.hex}}", + "brightRed": "{{colors.error.dark.hex | auto_lightness: 10 }}", + "brightGreen": "{{colors.tertiary.dark.hex | auto_lightness: 10 }}", + "brightYellow": "{{colors.tertiary_fixed.dark.hex | auto_lightness: 10 }}", + "brightBlue": "{{colors.secondary.dark.hex | auto_lightness: 10 }}", + "brightPurple": "{{colors.secondary_fixed.dark.hex| auto_lightness: 10 }}", + "brightCyan": "{{colors.primary.dark.hex | auto_lightness: -5 }}", + "brightWhite": "{{colors.on_surface.dark.hex}}", + "background": "{{colors.surface.dark.hex}}", + "foreground": "{{colors.on_surface.dark.hex}}", + "selectionBackground": "{{colors.primary.dark.hex}}", + "cursorColor": "{{colors.on_surface.dark.hex}}" +} \ No newline at end of file diff --git a/config/matugen/templates/windows_term_post.ps1 b/config/matugen/templates/windows_term_post.ps1 new file mode 100644 index 0000000..c39c18e --- /dev/null +++ b/config/matugen/templates/windows_term_post.ps1 @@ -0,0 +1,10 @@ +# Path to Windows Terminal settings +$p = "$env:LOCALAPPDATA\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\settings.json" +# Load the new scheme from the specified JSON file +$n = Get-Content "C:\Windows\Temp\matugen_windows_term.json" | ConvertFrom-Json +# Load existing settings +$s = Get-Content $p | ConvertFrom-Json +# Remove any existing scheme with the same name and add the new scheme +$s.schemes = @($s.schemes | Where-Object { $_.name -ne $n.name }) + $n +# Save the updated settings back to the file with sufficient depth to preserve structure +$s | ConvertTo-Json -Depth 10 | Set-Content $p \ No newline at end of file diff --git a/config/matugen/templates/wine.reg b/config/matugen/templates/wine.reg new file mode 100644 index 0000000..a5b0fa0 --- /dev/null +++ b/config/matugen/templates/wine.reg @@ -0,0 +1,49 @@ +Windows Registry Editor Version 5.00 + +[HKEY_CURRENT_USER\Software\Wine\X11 Driver] +"Decorated"="N" + +[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes] +"AppsUseClassicTheme"=dword:00000001 + +Windows Registry Editor Version 5.00 + +[HKEY_CURRENT_USER\Control Panel\Colors] +"ActiveBorder"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"ActiveTitle"="{{ colors.surface_dim.default.red }} {{ colors.surface_dim.default.green }} {{ colors.surface_dim.default.blue }}" +"AppWorkSpace"="{{ colors.surface.default.red }} {{ colors.surface.default.green }} {{ colors.surface.default.blue }}" +"Background"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" + +"ButtonAlternativeFace"="{{ colors.primary.default.red }} {{ colors.primary.default.green }} {{ colors.primary.default.blue }}" +"ButtonDkShadow"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"ButtonFace"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"ButtonHilight"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"ButtonLight"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"ButtonShadow"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"ButtonText"="{{ colors.on_background.default.red }} {{ colors.on_background.default.green }} {{ colors.on_background.default.blue }}" + +"GradientActiveTitle"="{{ colors.surface_dim.default.red }} {{ colors.surface_dim.default.green }} {{ colors.surface_dim.default.blue }}" +"GradientInactiveTitle"="{{ colors.surface_dim.default.red }} {{ colors.surface_dim.default.green }} {{ colors.surface_dim.default.blue }}" +"GrayText"="{{ colors.secondary_container.default.red }} {{ colors.secondary_container.default.green }} {{ colors.secondary_container.default.blue }}" + +"Hilight"="{{ colors.primary_container.default.red }} {{ colors.primary_container.default.green }} {{ colors.primary_container.default.blue }}" +"HilightText"="{{ colors.primary.default.red }} {{ colors.primary.default.green }} {{ colors.primary.default.blue }}" + +"InactiveBorder"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"InactiveTitle"="{{ colors.surface_dim.default.red }} {{ colors.surface_dim.default.green }} {{ colors.surface_dim.default.blue }}" +"InactiveTitleText"="{{ colors.on_background.default.red }} {{ colors.on_background.default.green }} {{ colors.on_background.default.blue }}" + +"InfoText"="{{ colors.on_surface.default.red }} {{ colors.on_surface.default.green }} {{ colors.on_surface.default.blue }}" +"InfoWindow"="{{ colors.surface.default.red }} {{ colors.surface.default.green }} {{ colors.surface.default.blue }}" + +"Menu"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"MenuBar"="{{ colors.surface_dim.default.red }} {{ colors.surface_dim.default.green }} {{ colors.surface_dim.default.blue }}" +"MenuHilight"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"MenuText"="{{ colors.on_background.default.red }} {{ colors.on_background.default.green }} {{ colors.on_background.default.blue }}" + +"Scrollbar"="{{ colors.surface_container_low.default.red }} {{ colors.surface_container_low.default.green }} {{ colors.surface_container_low.default.blue }}" +"TitleText"="{{ colors.on_background.default.red }} {{ colors.on_background.default.green }} {{ colors.on_background.default.blue }}" + +"Window"="{{ colors.surface_container_low.default.red }} {{ colors.surface_container_low.default.green }} {{ colors.surface_container_low.default.blue }}" +"WindowFrame"="{{ colors.background.default.red }} {{ colors.background.default.green }} {{ colors.background.default.blue }}" +"WindowText"="{{ colors.on_background.default.red }} {{ colors.on_background.default.green }} {{ colors.on_background.default.blue }}" diff --git a/config/matugen/templates/yazi-theme.toml b/config/matugen/templates/yazi-theme.toml new file mode 100644 index 0000000..a82f620 --- /dev/null +++ b/config/matugen/templates/yazi-theme.toml @@ -0,0 +1,921 @@ +# : Manager [[[ + +[mgr] +cwd = { fg = "{{colors.on_surface.default.hex}}" } + +# Find +find_keyword = { fg = "{{colors.error.default.hex}}", bold = true, italic = true, underline = true } +find_position = { fg = "{{colors.error.default.hex}}", bold = true, italic = true } + +# Marker +marker_copied = { fg = "{{colors.tertiary_fixed.default.hex | auto_lightness: 20.0}}", bg = "{{colors.tertiary_fixed.default.hex | auto_lightness: 20.0}}" } +marker_cut = { fg = "{{colors.tertiary_fixed.default.hex}}", bg = "{{colors.tertiary_fixed.default.hex}}" } +marker_marked = { fg = "{{colors.error.default.hex}}", bg = "{{colors.error.default.hex}}" } +marker_selected = { fg = "{{colors.tertiary.default.hex}}", bg = "{{colors.tertiary.default.hex}}" } + +# Count +count_copied = { fg = "{{colors.on_tertiary_fixed.default.hex}}", bg = "{{colors.tertiary_fixed.default.hex}}" } +count_cut = { fg = "{{colors.on_tertiary_fixed.default.hex}}", bg = "{{colors.tertiary_fixed.default.hex}}" } +count_selected = { fg = "{{colors.on_primary.default.hex}}", bg = "{{colors.tertiary.default.hex}}" } + +# Border +border_symbol = "│" +border_style = { fg = "{{colors.surface_tint.default.hex}}" } + +# : ]]] + + +# : Indicator [[[ + +[indicator] +padding = { open = "█", close = "█" } + +# : ]]] + + +# : Tabs [[[ + +[tabs] +active = { fg = "{{colors.primary.default.hex}}", bold = true, bg = "{{colors.surface.default.hex}}" } +inactive = { fg = "{{colors.secondary.default.hex}}", bg = "{{colors.surface.default.hex}}" } +sep_inner = { open = "[", close = "]" } + +# : ]]] + + +# : Mode [[[ + +[mode] +# Mode +normal_main = { bg = "{{colors.primary.default.hex}}", fg = "{{colors.on_primary.default.hex}}", bold = true } +normal_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" } + +# Select mode +select_main = { bg = "{{colors.secondary.default.hex}}", fg = "{{colors.on_secondary.default.hex}}", bold = true } +select_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" } + +# Unset mode +unset_main = { bg = "{{colors.tertiary.default.hex}}", fg = "{{colors.on_tertiary.default.hex}}", bold = true } +unset_alt = { bg = "{{colors.surface_variant.default.hex}}", fg = "{{colors.on_surface_variant.default.hex}}" } + +# : ]]] + + +# : Status [[[ + +[status] +sep_left = { open = "🭁", close = "🭠" } +sep_right = { open = "🭁", close = "🭠" } + +# Permissions +perm_type = { fg = "{{colors.secondary.default.hex | auto_lightness: 30.0}}" } +perm_write = { fg = "{{colors.tertiary.default.hex | auto_lightness: 30.0}}" } +perm_read = { fg = "{{colors.error.default.hex | auto_lightness: 30.0}}" } +perm_exec = { fg = "{{colors.tertiary_fixed.default.hex | auto_lightness: 30.0}}" } +perm_sep = { fg = "{{colors.primary_fixed.default.hex | auto_lightness: 30.0}}" } + +# Progress +progress_label = { bold = true } +progress_normal = { fg = "{{colors.primary.default.hex}}", bg = "{{colors.surface_bright.default.hex}}" } +progress_error = { fg = "{{colors.error.default.hex}}", bg = "{{colors.surface_bright.default.hex}}" } + +# : ]]] + + +# : Which [[[ + +[which] +cols = 3 +mask = { bg = "{{colors.surface_bright.default.hex}}" } +cand = { fg = "{{colors.primary.default.hex}}" } +rest = { fg = "{{colors.on_primary.default.hex}}" } +desc = { fg = "{{colors.on_surface.default.hex}}" } +separator = " ▶ " +separator_style = { fg = "{{colors.on_surface.default.hex}}" } + +# : ]]] + + +# : Notify [[[ + +[notify] +title_info = { fg = "{{colors.tertiary.default.hex}}" } +title_warn = { fg = "{{colors.primary.default.hex}}" } +title_error = { fg = "{{colors.error.default.hex}}" } + +# : ]]] + + +# : Picker [[[ + +[pick] +border = { fg = "{{colors.primary.default.hex}}" } +active = { fg = "{{colors.tertiary.default.hex}}", bold = true } +inactive = {} + +# : ]]] + + +# : Input [[[ + +[input] +border = { fg = "{{colors.primary.default.hex}}" } +value = { fg = "{{colors.on_surface.default.hex}}" } + +# : ]]] + + +# : Completion [[[ + +[cmp] +border = { fg = "{{colors.primary.default.hex}}", bg = "{{colors.on_primary.default.hex}}" } + +# : ]]] + + +# : Tasks [[[ + +[tasks] +border = { fg = "{{colors.primary.default.hex}}" } +title = {} +hovered = { fg = "{{colors.tertiary_fixed.default.hex}}", underline = true } + +# : ]]] + + +# : Help [[[ + +[help] +on = { fg = "{{colors.on_surface.default.hex}}" } +run = { fg = "{{colors.on_surface.default.hex}}" } +footer = { fg = "{{colors.on_secondary.default.hex}}", bg = "{{colors.secondary.default.hex}}" } + +# : ]]] + + +# : File-specific styles [[[ + +[filetype] + +rules = [ + # Images + { mime = "image/*", fg = "#94e2d5" }, + + # Media + { mime = "{audio,video}/*", fg = "#f9e2af" }, + + # Archives + { mime = "application/{zip,rar,7z*,tar,gzip,xz,zstd,bzip*,lzma,compress,archive,cpio,arj,xar,ms-cab*}", fg = "#f5c2e7" }, + + # Documents + { mime = "application/{pdf,doc,rtf}", fg = "#a6e3a1" }, + + # Special files + { name = "*", is = "orphan", bg = "{{colors.error_container.default.hex}}" }, + { name = "*", is = "exec", fg = "{{colors.on_error_container.default.hex}}" }, + + # Fallback + { url = "*", fg = "{{colors.on_surface.default.hex}}" }, + { url = "*/", fg = "{{colors.surface_tint.default.hex}}" }, +] + +# : ]]] + +[icon] +globs = [] +dirs = [ + { name = ".config", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".git", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".github", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".npm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Desktop", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Development", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Documents", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Downloads", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Library", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Movies", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Music", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Pictures", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Public", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Videos", text = "", fg = "{{colors.primary.default.hex}}" }, +] +files = [ + { name = ".babelrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".bash_profile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".bashrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".clang-format", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".clang-tidy", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".codespellrc", text = "󰓆", fg = "{{colors.primary.default.hex}}" }, + { name = ".condarc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".dockerignore", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = ".ds_store", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".editorconfig", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".env", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".eslintignore", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".eslintrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".git-blame-ignore-revs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".gitattributes", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".gitconfig", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".gitignore", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".gitlab-ci.yml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".gitmodules", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".gtkrc-2.0", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".gvimrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".justfile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".luacheckrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".luaurc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".mailmap", text = "󰊢", fg = "{{colors.primary.default.hex}}" }, + { name = ".nanorc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".npmignore", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".npmrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".nuxtrc", text = "󱄆", fg = "{{colors.primary.default.hex}}" }, + { name = ".nvmrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".pnpmfile.cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".pre-commit-config.yaml", text = "󰛢", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierignore", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc.cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc.json", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc.json5", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc.mjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc.toml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc.yaml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".prettierrc.yml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".pylintrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".settings.json", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".SRCINFO", text = "󰣇", fg = "{{colors.primary.default.hex}}" }, + { name = ".vimrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".Xauthority", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".xinitrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".Xresources", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".xsession", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".zprofile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".zshenv", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = ".zshrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "_gvimrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "_vimrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "AUTHORS", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "AUTHORS.txt", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "brewfile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bspwmrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "build", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "build.gradle", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "build.zig.zon", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bun.lock", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bun.lockb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cantorrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "checkhealth", text = "󰓙", fg = "{{colors.primary.default.hex}}" }, + { name = "cmakelists.txt", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "code_of_conduct", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "code_of_conduct.md", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "commit_editmsg", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "commitlint.config.js", text = "󰜘", fg = "{{colors.primary.default.hex}}" }, + { name = "commitlint.config.ts", text = "󰜘", fg = "{{colors.primary.default.hex}}" }, + { name = "compose.yaml", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = "compose.yml", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = "config", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "containerfile", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = "copying", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "copying.lesser", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Directory.Build.props", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Directory.Build.targets", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Directory.Packages.props", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "docker-compose.yaml", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = "docker-compose.yml", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = "dockerfile", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = "eslint.config.cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "eslint.config.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "eslint.config.mjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "eslint.config.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ext_typoscript_setup.txt", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "favicon.ico", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fp-info-cache", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fp-lib-table", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "FreeCAD.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Gemfile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gnumakefile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "go.mod", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "go.sum", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "go.work", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gradle-wrapper.properties", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gradle.properties", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gradlew", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "groovy", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gruntfile.babel.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gruntfile.coffee", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gruntfile.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gruntfile.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gtkrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gulpfile.babel.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gulpfile.coffee", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gulpfile.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gulpfile.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hypridle.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hyprland.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hyprlandd.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hyprlock.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hyprpaper.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hyprsunset.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "i18n.config.js", text = "󰗊", fg = "{{colors.primary.default.hex}}" }, + { name = "i18n.config.ts", text = "󰗊", fg = "{{colors.primary.default.hex}}" }, + { name = "i3blocks.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "i3status.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "index.theme", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ionic.config.json", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "Jenkinsfile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "justfile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kalgebrarc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kdeglobals", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kdenlive-layoutsrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kdenliverc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kritadisplayrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kritarc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "license", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "license.md", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "lxde-rc.xml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "lxqt.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "makefile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mix.lock", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mpv.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "next.config.cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "next.config.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "next.config.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "node_modules", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "nuxt.config.cjs", text = "󱄆", fg = "{{colors.primary.default.hex}}" }, + { name = "nuxt.config.js", text = "󱄆", fg = "{{colors.primary.default.hex}}" }, + { name = "nuxt.config.mjs", text = "󱄆", fg = "{{colors.primary.default.hex}}" }, + { name = "nuxt.config.ts", text = "󱄆", fg = "{{colors.primary.default.hex}}" }, + { name = "package-lock.json", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "package.json", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "PKGBUILD", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "platformio.ini", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "playwright.config.cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "playwright.config.cts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "playwright.config.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "playwright.config.mjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "playwright.config.mts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "playwright.config.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pnpm-lock.yaml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pnpm-workspace.yaml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pom.xml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "prettier.config.cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "prettier.config.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "prettier.config.mjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "prettier.config.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "prisma.config.mts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "prisma.config.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "procfile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "PrusaSlicer.ini", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "PrusaSlicerGcodeViewer.ini", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "py.typed", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "QtProject.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "rakefile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "readme", text = "󰂺", fg = "{{colors.primary.default.hex}}" }, + { name = "readme.md", text = "󰂺", fg = "{{colors.primary.default.hex}}" }, + { name = "rmd", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "robots.txt", text = "󰚩", fg = "{{colors.primary.default.hex}}" }, + { name = "security", text = "󰒃", fg = "{{colors.primary.default.hex}}" }, + { name = "security.md", text = "󰒃", fg = "{{colors.primary.default.hex}}" }, + { name = "settings.gradle", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "svelte.config.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sxhkdrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sym-lib-table", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tailwind.config.js", text = "󱏿", fg = "{{colors.primary.default.hex}}" }, + { name = "tailwind.config.mjs", text = "󱏿", fg = "{{colors.primary.default.hex}}" }, + { name = "tailwind.config.ts", text = "󱏿", fg = "{{colors.primary.default.hex}}" }, + { name = "tmux.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tmux.conf.local", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tsconfig.json", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "unlicense", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vagrantfile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vercel.json", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vite.config.cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vite.config.cts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vite.config.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vite.config.mjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vite.config.mts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vite.config.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vitest.config.cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vitest.config.cts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vitest.config.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vitest.config.mjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vitest.config.mts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vitest.config.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vlcrc", text = "󰕼", fg = "{{colors.primary.default.hex}}" }, + { name = "webpack", text = "󰜫", fg = "{{colors.primary.default.hex}}" }, + { name = "weston.ini", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "workspace", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "wrangler.jsonc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "wrangler.toml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xdph.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xmobarrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xmobarrc.hs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xmonad.hs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xorg.conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xsettingsd.conf", text = "", fg = "{{colors.primary.default.hex}}" }, +] +exts = [ + { name = "3gp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "3mf", text = "󰆧", fg = "{{colors.primary.default.hex}}" }, + { name = "7z", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "a", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "aac", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ada", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "adb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ads", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ai", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "aif", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "aiff", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "android", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ape", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "apk", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "apl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "app", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "applescript", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "asc", text = "󰦝", fg = "{{colors.primary.default.hex}}" }, + { name = "asm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ass", text = "󰨖", fg = "{{colors.primary.default.hex}}" }, + { name = "astro", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "avif", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "awk", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "azcli", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bak", text = "󰁯", fg = "{{colors.primary.default.hex}}" }, + { name = "bash", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bat", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bazel", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bib", text = "󱉟", fg = "{{colors.primary.default.hex}}" }, + { name = "bicep", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bicepparam", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bin", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "blade.php", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "blend", text = "󰂫", fg = "{{colors.primary.default.hex}}" }, + { name = "blp", text = "󰺾", fg = "{{colors.primary.default.hex}}" }, + { name = "bmp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bqn", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "brep", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "bz", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bz2", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bz3", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "bzl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "c", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "c++", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cache", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cast", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cbl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ccm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cfc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cfg", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cfm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "clj", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cljc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cljd", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cljs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cmake", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cob", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cobol", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "coffee", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "conda", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "conf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "config.ru", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cow", text = "󰆚", fg = "{{colors.primary.default.hex}}" }, + { name = "cp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cpp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cppm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cpy", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cr", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "crdownload", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cs", text = "󰌛", fg = "{{colors.primary.default.hex}}" }, + { name = "csh", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cshtml", text = "󱦗", fg = "{{colors.primary.default.hex}}" }, + { name = "cson", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "csproj", text = "󰪮", fg = "{{colors.primary.default.hex}}" }, + { name = "css", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "csv", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cu", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cue", text = "󰲹", fg = "{{colors.primary.default.hex}}" }, + { name = "cuh", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cxx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "cxxm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "d", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "d.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "dart", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "db", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "dconf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "desktop", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "diff", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "dll", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "doc", text = "󰈬", fg = "{{colors.primary.default.hex}}" }, + { name = "Dockerfile", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = "dockerignore", text = "󰡨", fg = "{{colors.primary.default.hex}}" }, + { name = "docx", text = "󰈬", fg = "{{colors.primary.default.hex}}" }, + { name = "dot", text = "󱁉", fg = "{{colors.primary.default.hex}}" }, + { name = "download", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "drl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "dropbox", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "dump", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "dwg", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "dxf", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "ebook", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ebuild", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "edn", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "eex", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ejs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "el", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "elc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "elf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "elm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "eln", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "env", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "eot", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "epp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "epub", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "erb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "erl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ex", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "exe", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "exs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "f#", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "f3d", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "f90", text = "󱈚", fg = "{{colors.primary.default.hex}}" }, + { name = "fbx", text = "󰆧", fg = "{{colors.primary.default.hex}}" }, + { name = "fcbak", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fcmacro", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fcmat", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fcparam", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fcscript", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fcstd", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fcstd1", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fctb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fctl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fdmdownload", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "feature", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fish", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "flac", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "flc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "flf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fnl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fodg", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fodp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fods", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fodt", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "frag", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fsi", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fsscript", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "fsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gcode", text = "󰐫", fg = "{{colors.primary.default.hex}}" }, + { name = "gd", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gemspec", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "geom", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gif", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "git", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "glb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gleam", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "glsl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gnumakefile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "go", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "godot", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gpr", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gql", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gradle", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "graphql", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gresource", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "gv", text = "󱁉", fg = "{{colors.primary.default.hex}}" }, + { name = "gz", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "h", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "haml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hbs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "heex", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hex", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hh", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hpp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hrl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "htm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "html", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "http", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "huff", text = "󰡘", fg = "{{colors.primary.default.hex}}" }, + { name = "hurl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "hxx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ical", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "icalendar", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ico", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ics", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ifb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ifc", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "ige", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "iges", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "igs", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "image", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "img", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "import", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "info", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ini", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ino", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ipynb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "iso", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ixx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "jar", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "java", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "jl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "jpeg", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "jpg", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "json", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "json5", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "jsonc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "jsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "jwmrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "jxl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kbx", text = "󰯄", fg = "{{colors.primary.default.hex}}" }, + { name = "kdb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kdbx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kdenlive", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kdenlivetitle", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kicad_dru", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kicad_mod", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kicad_pcb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kicad_prl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kicad_pro", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kicad_sch", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kicad_sym", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kicad_wks", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ko", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kpp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kra", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "krz", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ksh", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kt", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "kts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "lck", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "leex", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "less", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "lff", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "lhs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "lib", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "license", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "liquid", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "lock", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "log", text = "󰌱", fg = "{{colors.primary.default.hex}}" }, + { name = "lrc", text = "󰨖", fg = "{{colors.primary.default.hex}}" }, + { name = "lua", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "luac", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "luau", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "m", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "m3u", text = "󰲹", fg = "{{colors.primary.default.hex}}" }, + { name = "m3u8", text = "󰲹", fg = "{{colors.primary.default.hex}}" }, + { name = "m4a", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "m4v", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "magnet", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "makefile", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "markdown", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "material", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "md", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "md5", text = "󰕥", fg = "{{colors.primary.default.hex}}" }, + { name = "mdx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mint", text = "󰌪", fg = "{{colors.primary.default.hex}}" }, + { name = "mjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mk", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mkv", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mli", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mo", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mobi", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mojo", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mov", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mp3", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mp4", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mpp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "msf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "mustache", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "nfo", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "nim", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "nix", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "norg", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "nswag", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "nu", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "o", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "obj", text = "󰆧", fg = "{{colors.primary.default.hex}}" }, + { name = "odf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "odg", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "odin", text = "󰟢", fg = "{{colors.primary.default.hex}}" }, + { name = "odp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ods", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "odt", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "oga", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ogg", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ogv", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ogx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "opus", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "org", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "otf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "out", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "part", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "patch", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pck", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pcm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pdf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "php", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pls", text = "󰲹", fg = "{{colors.primary.default.hex}}" }, + { name = "ply", text = "󰆧", fg = "{{colors.primary.default.hex}}" }, + { name = "pm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "png", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "po", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pot", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ppt", text = "󰈧", fg = "{{colors.primary.default.hex}}" }, + { name = "pptx", text = "󰈧", fg = "{{colors.primary.default.hex}}" }, + { name = "prisma", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pro", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ps1", text = "󰨊", fg = "{{colors.primary.default.hex}}" }, + { name = "psb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "psd", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "psd1", text = "󰨊", fg = "{{colors.primary.default.hex}}" }, + { name = "psm1", text = "󰨊", fg = "{{colors.primary.default.hex}}" }, + { name = "pub", text = "󰷖", fg = "{{colors.primary.default.hex}}" }, + { name = "pxd", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pxi", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "py", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pyc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pyd", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pyi", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pyo", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pyw", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "pyx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "qm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "qml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "qrc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "qss", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "query", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "R", text = "󰟔", fg = "{{colors.primary.default.hex}}" }, + { name = "r", text = "󰟔", fg = "{{colors.primary.default.hex}}" }, + { name = "rake", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "rar", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "rasi", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "razor", text = "󱦘", fg = "{{colors.primary.default.hex}}" }, + { name = "rb", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "res", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "resi", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "rlib", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "rmd", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "rproj", text = "󰗆", fg = "{{colors.primary.default.hex}}" }, + { name = "rs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "rss", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "s", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sass", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sbt", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "scad", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "scala", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "scm", text = "󰘧", fg = "{{colors.primary.default.hex}}" }, + { name = "scss", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sh", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sha1", text = "󰕥", fg = "{{colors.primary.default.hex}}" }, + { name = "sha224", text = "󰕥", fg = "{{colors.primary.default.hex}}" }, + { name = "sha256", text = "󰕥", fg = "{{colors.primary.default.hex}}" }, + { name = "sha384", text = "󰕥", fg = "{{colors.primary.default.hex}}" }, + { name = "sha512", text = "󰕥", fg = "{{colors.primary.default.hex}}" }, + { name = "sig", text = "󰘧", fg = "{{colors.primary.default.hex}}" }, + { name = "signature", text = "󰘧", fg = "{{colors.primary.default.hex}}" }, + { name = "skp", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "sldasm", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "sldprt", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "slim", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sln", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "slnx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "slvs", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "sml", text = "󰘧", fg = "{{colors.primary.default.hex}}" }, + { name = "so", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sol", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "spec.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "spec.jsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "spec.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "spec.tsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "spx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sql", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sqlite", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sqlite3", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "srt", text = "󰨖", fg = "{{colors.primary.default.hex}}" }, + { name = "ssa", text = "󰨖", fg = "{{colors.primary.default.hex}}" }, + { name = "ste", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "step", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "stl", text = "󰆧", fg = "{{colors.primary.default.hex}}" }, + { name = "stories.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "stories.jsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "stories.mjs", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "stories.svelte", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "stories.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "stories.tsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "stories.vue", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "stp", text = "󰻫", fg = "{{colors.primary.default.hex}}" }, + { name = "strings", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "styl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sub", text = "󰨖", fg = "{{colors.primary.default.hex}}" }, + { name = "sublime", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "suo", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "sv", text = "󰍛", fg = "{{colors.primary.default.hex}}" }, + { name = "svelte", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "svg", text = "󰜡", fg = "{{colors.primary.default.hex}}" }, + { name = "svgz", text = "󰜡", fg = "{{colors.primary.default.hex}}" }, + { name = "svh", text = "󰍛", fg = "{{colors.primary.default.hex}}" }, + { name = "swift", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "t", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tbc", text = "󰛓", fg = "{{colors.primary.default.hex}}" }, + { name = "tcl", text = "󰛓", fg = "{{colors.primary.default.hex}}" }, + { name = "templ", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "terminal", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "test.js", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "test.jsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "test.ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "test.tsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tex", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tfvars", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tgz", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tmpl", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tmux", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "toml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "torrent", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tres", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ts", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tscn", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tsconfig", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "tsx", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ttf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "twig", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "txt", text = "󰈙", fg = "{{colors.primary.default.hex}}" }, + { name = "txz", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "typ", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "typoscript", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "ui", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "v", text = "󰍛", fg = "{{colors.primary.default.hex}}" }, + { name = "vala", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vert", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vh", text = "󰍛", fg = "{{colors.primary.default.hex}}" }, + { name = "vhd", text = "󰍛", fg = "{{colors.primary.default.hex}}" }, + { name = "vhdl", text = "󰍛", fg = "{{colors.primary.default.hex}}" }, + { name = "vi", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vim", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vsh", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vsix", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "vue", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "wasm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "wav", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "webm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "webmanifest", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "webp", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "webpack", text = "󰜫", fg = "{{colors.primary.default.hex}}" }, + { name = "wma", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "wmv", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "woff", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "woff2", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "wrl", text = "󰆧", fg = "{{colors.primary.default.hex}}" }, + { name = "wrz", text = "󰆧", fg = "{{colors.primary.default.hex}}" }, + { name = "wv", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "wvc", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "x", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xaml", text = "󰙳", fg = "{{colors.primary.default.hex}}" }, + { name = "xcf", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xcplayground", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xcstrings", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xls", text = "󰈛", fg = "{{colors.primary.default.hex}}" }, + { name = "xlsx", text = "󰈛", fg = "{{colors.primary.default.hex}}" }, + { name = "xm", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xml", text = "󰗀", fg = "{{colors.primary.default.hex}}" }, + { name = "xpi", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xslt", text = "󰗀", fg = "{{colors.primary.default.hex}}" }, + { name = "xul", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "xz", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "yaml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "yml", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "zig", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "zip", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "zsh", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "zst", text = "", fg = "{{colors.primary.default.hex}}" }, + { name = "🔥", text = "", fg = "{{colors.primary.default.hex}}" }, +] +conds = [ + # Special files + { if = "orphan", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "link", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "block", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "char", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "fifo", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "sock", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "sticky", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "dummy", text = "", fg = "{{colors.primary.default.hex}}" }, + + # Fallback + { if = "dir", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "exec", text = "", fg = "{{colors.primary.default.hex}}" }, + { if = "!dir", text = "", fg = "{{colors.primary.default.hex}}" }, +] +# : }}} diff --git a/config/matugen/templates/zathura-colors b/config/matugen/templates/zathura-colors new file mode 100644 index 0000000..47d4ff2 --- /dev/null +++ b/config/matugen/templates/zathura-colors @@ -0,0 +1,93 @@ +" ----------------------------------------------------------------------------- +" Zathura settings +" ----------------------------------------------------------------------------- + +set selection-clipboard clipboard +" Colors +set default-bg "{{colors.on_primary.default.rgba | set_alpha: 1.0}}" +set default-fg "{{colors.primary.default.hex}}" + +set statusbar-bg "{{colors.on_primary.default.hex}}" +set statusbar-fg "{{colors.primary.default.hex}}" + +set inputbar-bg "{{colors.on_primary.default.hex}}" +set inputbar-fg "{{colors.primary.default.hex}}" + +set notification-error-bg "{{colors.on_error.default.hex}}" +set notification-error-fg "{{colors.error.default.hex}}" + +set notification-warning-bg "{{colors.primary_fixed.default.hex}}" +set notification-warning-fg "{{colors.error_container.default.hex}}" + +set highlight-color "{{colors.primary_fixed.default.hex}}" +set highlight-active-color "{{colors.primary_fixed_dim.default.hex}}" + +set completion-highlight-fg "{{colors.on_primary.default.hex}}" +set completion-highlight-bg {{colors.primary.default.hex}}"" + +set completion-bg "{{colors.on_primary.default.hex}}" +set completion-fg "{{colors.primary.default.hex}}" + +set notification-bg "{{colors.on_primary.default.hex}}" +set notification-fg "{{colors.primary.default.hex}}" + +set recolor "true" +set recolor-lightcolor "{{colors.on_primary.default.rgba | set_alpha: 1.0}}" +set recolor-darkcolor "{{colors.primary.default.hex}}" +set recolor-reverse-video "true" +set recolor-keephue "true" + +" Clipboard +set selection-clipboard clipboard + +" Search +set incremental-search true +set search-hadjust true + +" Autoadjust +set adjust-open width + +" Typography +set font "FiraCode Nerd Font 12" + +" ----------------------------------------------------------------------------- +" Zathura mappings +" ----------------------------------------------------------------------------- +" remove status bar +set guioptions none +" Zoom in/out +map [normal] z zoom in +map [normal] Z zoom out +map [fullscreen] z zoom in +map [fullscreen] Z zoom out + +" Toggle mode +map [normal] D toggle_page_mode +map [fullscreen] D toggle_page_mode + +" Scroll +map [normal] u scroll half-up +map [normal] d scroll half-down +map [fullscreen] u scroll half-up +map [fullscreen] d scroll half-down + +" Fullscreen +map [normal] f toggle_fullscreen +map [fullscreen] f toggle_fullscreen + +" Reload +map [normal] reload +map [fullscreen] reload + +" Status bar +map [normal] b toggle_statusbar +map [fullscreen] b toggle_statusbar + +" Set width as in mupdf +map [normal] H adjust_window best-fit +map [normal] W adjust_window width +map [fullscreen] H adjust_window best-fit +map [fullscreen] W adjust_window width + +map [normal] i set recolor +map [fullscreen] i set recolor diff --git a/config/matugen/templates/zed-colors.json b/config/matugen/templates/zed-colors.json new file mode 100644 index 0000000..4d9a0c4 --- /dev/null +++ b/config/matugen/templates/zed-colors.json @@ -0,0 +1,591 @@ +{ + "$schema": "https://zed.dev/schema/themes/v0.2.0.json", + "name": "Matugen", + "author": "Matugen", + "themes": [ + { + "name": "Matugen Dark", + "appearance": "dark", + "style": { + "accents": [ + "{{colors.primary.dark.hex}}", + "{{colors.secondary.dark.hex}}", + "{{colors.tertiary.dark.hex}}" + ], + "background.appearance": "opaque", + "border": "{{colors.outline_variant.dark.hex}}", + "border.variant": "{{colors.outline.dark.hex}}", + "border.focused": "{{colors.primary.dark.hex}}", + "border.selected": "{{colors.primary.dark.hex}}", + "border.transparent": "{{colors.outline_variant.dark.hex}}40", + "border.disabled": "{{colors.outline_variant.dark.hex}}60", + "elevated_surface.background": "{{colors.surface_container_high.dark.hex}}", + "surface.background": "{{colors.surface.dark.hex}}", + "background": "{{colors.background.dark.hex}}", + "element.background": "{{colors.surface_container.dark.hex}}", + "element.hover": "{{colors.surface_container_high.dark.hex}}", + "element.active": "{{colors.surface_container_highest.dark.hex}}", + "element.selected": "{{colors.secondary_container.dark.hex}}", + "element.disabled": "{{colors.surface_variant.dark.hex}}", + "drop_target.background": "{{colors.primary_container.dark.hex}}80", + "ghost_element.background": null, + "ghost_element.hover": "{{colors.surface_container.dark.hex}}80", + "ghost_element.active": "{{colors.surface_container_high.dark.hex}}", + "ghost_element.selected": "{{colors.secondary_container.dark.hex}}80", + "ghost_element.disabled": "{{colors.surface_variant.dark.hex}}60", + "text": "{{colors.on_surface.dark.hex}}", + "text.muted": "{{colors.on_surface_variant.dark.hex}}", + "text.placeholder": "{{colors.on_surface_variant.dark.hex}}99", + "text.disabled": "{{colors.on_surface.dark.hex}}60", + "text.accent": "{{colors.primary.dark.hex}}", + "icon": "{{colors.on_surface.dark.hex}}", + "icon.muted": "{{colors.on_surface_variant.dark.hex}}", + "icon.disabled": "{{colors.on_surface.dark.hex}}60", + "icon.placeholder": "{{colors.on_surface_variant.dark.hex}}80", + "icon.accent": "{{colors.primary.dark.hex}}", + "status_bar.background": "{{colors.surface.dark.hex}}", + "title_bar.background": "{{colors.surface.dark.hex}}", + "title_bar.inactive_background": "{{colors.surface_dim.dark.hex}}", + "toolbar.background": "{{colors.surface_container_low.dark.hex}}", + "tab_bar.background": "{{colors.surface_container.dark.hex}}", + "tab.inactive_background": "{{colors.surface_container_low.dark.hex}}", + "tab.active_background": "{{colors.surface_container_high.dark.hex}}", + "search.match_background": "{{colors.tertiary_container.dark.hex}}80", + "panel.background": "{{colors.surface_container_low.dark.hex}}", + "panel.focused_border": "{{colors.primary.dark.hex}}", + "pane.focused_border": "{{colors.primary.dark.hex}}", + "scrollbar.thumb.background": "{{colors.on_surface_variant.dark.hex}}80", + "scrollbar.thumb.hover_background": "{{colors.on_surface_variant.dark.hex}}c0", + "scrollbar.thumb.border": "{{colors.outline_variant.dark.hex}}40", + "scrollbar.track.background": "{{colors.surface_container.dark.hex}}", + "scrollbar.track.border": "{{colors.outline_variant.dark.hex}}20", + "editor.foreground": "{{colors.on_surface.dark.hex}}", + "editor.background": "{{colors.surface_container_low.dark.hex}}", + "editor.gutter.background": "{{colors.surface_container_low.dark.hex}}", + "editor.subheader.background": "{{colors.surface_container.dark.hex}}", + "editor.indent_guide": "{{colors.outline_variant.dark.hex}}60", + "editor.indent_guide_active": "{{colors.outline.dark.hex}}", + "editor.active_line.background": "{{colors.surface_container_high.dark.hex}}80", + "editor.highlighted_line.background": "{{colors.surface_container_high.dark.hex}}60", + "editor.line_number": "{{colors.on_surface_variant.dark.hex}}", + "editor.active_line_number": "{{colors.primary.dark.hex}}", + "editor.invisible": "{{colors.outline_variant.dark.hex}}80", + "editor.wrap_guide": "{{colors.outline_variant.dark.hex}}40", + "editor.active_wrap_guide": "{{colors.outline.dark.hex}}80", + "editor.document_highlight.read_background": "{{colors.primary_container.dark.hex}}60", + "editor.document_highlight.write_background": "{{colors.secondary_container.dark.hex}}80", + "terminal.background": "{{colors.surface_container_low.dark.hex}}", + "terminal.foreground": "{{colors.on_surface.dark.hex}}", + "terminal.bright_foreground": "{{colors.on_surface.dark.hex}}", + "terminal.dim_foreground": "{{colors.on_surface_variant.dark.hex}}", + "terminal.ansi.black": "{{colors.surface_dim.dark.hex}}", + "terminal.ansi.bright_black": "{{colors.surface_container_high.dark.hex}}", + "terminal.ansi.dim_black": "{{colors.surface.dark.hex}}", + "terminal.ansi.red": "{{colors.error.dark.hex}}", + "terminal.ansi.bright_red": "{{colors.error.dark.hex}}", + "terminal.ansi.dim_red": "{{colors.on_error_container.dark.hex}}", + "terminal.ansi.green": "{{colors.tertiary.dark.hex}}", + "terminal.ansi.bright_green": "{{colors.tertiary.dark.hex}}", + "terminal.ansi.dim_green": "{{colors.on_tertiary_container.dark.hex}}", + "terminal.ansi.yellow": "{{colors.tertiary_fixed_dim.dark.hex}}", + "terminal.ansi.bright_yellow": "{{colors.tertiary_fixed.dark.hex}}", + "terminal.ansi.dim_yellow": "{{colors.on_tertiary_fixed.dark.hex}}", + "terminal.ansi.blue": "{{colors.primary.dark.hex}}", + "terminal.ansi.bright_blue": "{{colors.primary.dark.hex}}", + "terminal.ansi.dim_blue": "{{colors.on_primary_container.dark.hex}}", + "terminal.ansi.magenta": "{{colors.secondary.dark.hex}}", + "terminal.ansi.bright_magenta": "{{colors.secondary.dark.hex}}", + "terminal.ansi.dim_magenta": "{{colors.on_secondary_container.dark.hex}}", + "terminal.ansi.cyan": "{{colors.primary_fixed_dim.dark.hex}}", + "terminal.ansi.bright_cyan": "{{colors.primary_fixed.dark.hex}}", + "terminal.ansi.dim_cyan": "{{colors.on_primary_fixed_variant.dark.hex}}", + "terminal.ansi.white": "{{colors.on_surface.dark.hex}}", + "terminal.ansi.bright_white": "{{colors.on_surface.dark.hex}}", + "terminal.ansi.dim_white": "{{colors.on_surface_variant.dark.hex}}", + "link_text.hover": "{{colors.primary.dark.hex}}", + "conflict": "{{colors.error.dark.hex}}", + "conflict.background": "{{colors.error_container.dark.hex}}80", + "conflict.border": "{{colors.on_error_container.dark.hex}}", + "created": "{{colors.tertiary.dark.hex}}", + "created.background": "{{colors.tertiary_container.dark.hex}}80", + "created.border": "{{colors.on_tertiary_container.dark.hex}}", + "deleted": "{{colors.error.dark.hex}}", + "deleted.background": "{{colors.error_container.dark.hex}}80", + "deleted.border": "{{colors.on_error_container.dark.hex}}", + "error": "{{colors.error.dark.hex}}", + "error.background": "{{colors.error_container.dark.hex}}", + "error.border": "{{colors.on_error_container.dark.hex}}", + "hidden": "{{colors.outline_variant.dark.hex}}", + "hidden.border": "{{colors.outline_variant.dark.hex}}60", + "hint": "{{colors.primary.dark.hex}}", + "hint.background": "{{colors.primary_container.dark.hex}}80", + "hint.border": "{{colors.on_primary_container.dark.hex}}", + "ignored": "{{colors.on_surface_variant.dark.hex}}60", + "ignored.background": "{{colors.surface_variant.dark.hex}}40", + "ignored.border": "{{colors.outline_variant.dark.hex}}40", + "info": "{{colors.primary.dark.hex}}", + "info.background": "{{colors.primary_container.dark.hex}}80", + "info.border": "{{colors.on_primary_container.dark.hex}}", + "modified": "{{colors.secondary.dark.hex}}", + "modified.background": "{{colors.secondary_container.dark.hex}}80", + "modified.border": "{{colors.on_secondary_container.dark.hex}}", + "predictive": "{{colors.on_surface_variant.dark.hex}}80", + "predictive.border": "{{colors.outline.dark.hex}}", + "predictive.background": "{{colors.surface_container_highest.dark.hex}}80", + "renamed": "{{colors.secondary.dark.hex}}", + "renamed.border": "{{colors.on_secondary_container.dark.hex}}", + "renamed.background": "{{colors.secondary_container.dark.hex}}80", + "success": "{{colors.tertiary.dark.hex}}", + "success.background": "{{colors.tertiary_container.dark.hex}}80", + "success.border": "{{colors.on_tertiary_container.dark.hex}}", + "unreachable": "{{colors.on_surface_variant.dark.hex}}60", + "unreachable.background": "{{colors.surface_variant.dark.hex}}40", + "unreachable.border": "{{colors.outline_variant.dark.hex}}60", + "warning": "{{colors.tertiary_fixed_dim.dark.hex}}", + "warning.background": "{{colors.tertiary_container.dark.hex}}80", + "warning.border": "{{colors.on_tertiary_container.dark.hex}}", + "players": [ + { + "cursor": "{{colors.primary.dark.hex}}", + "background": "{{colors.primary_container.dark.hex}}80", + "selection": "{{colors.primary_container.dark.hex}}60" + }, + { + "cursor": "{{colors.secondary.dark.hex}}", + "background": "{{colors.secondary_container.dark.hex}}80", + "selection": "{{colors.secondary_container.dark.hex}}60" + } + ], + "syntax": { + "boolean": { + "color": "{{colors.tertiary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "comment": { + "color": "{{colors.on_surface_variant.dark.hex}}", + "font_style": "italic", + "font_weight": null + }, + "comment.doc": { + "color": "{{colors.on_surface_variant.dark.hex}}", + "font_style": "italic", + "font_weight": null + }, + "constant": { + "color": "{{colors.tertiary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "constructor": { + "color": "{{colors.secondary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "emphasis": { + "color": "{{colors.primary.dark.hex}}", + "font_style": "italic", + "font_weight": null + }, + "emphasis.strong": { + "color": "{{colors.primary.dark.hex}}", + "font_style": null, + "font_weight": 700 + }, + "function": { + "color": "{{colors.primary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "keyword": { + "color": "{{colors.secondary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "number": { + "color": "{{colors.tertiary_fixed.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "operator": { + "color": "{{colors.on_surface_variant.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "property": { + "color": "{{colors.on_surface.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation": { + "color": "{{colors.on_surface_variant.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation.bracket": { + "color": "{{colors.secondary_fixed.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation.delimiter": { + "color": "{{colors.on_surface_variant.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation.list_marker": { + "color": "{{colors.on_surface_variant.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation.special": { + "color": "{{colors.secondary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "string": { + "color": "{{colors.tertiary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "string.escape": { + "color": "{{colors.tertiary_fixed_dim.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "string.regex": { + "color": "{{colors.tertiary_fixed.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "string.special": { + "color": "{{colors.on_tertiary_container.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "string.special.symbol": { + "color": "{{colors.tertiary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "tag": { + "color": "{{colors.secondary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "text.literal": { + "color": "{{colors.tertiary.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "type": { + "color": "{{colors.primary_fixed.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "variable": { + "color": "{{colors.on_surface.dark.hex}}", + "font_style": null, + "font_weight": null + }, + "variable.special": { + "color": "{{colors.primary.dark.hex}}", + "font_style": null, + "font_weight": null + } + } + } + }, + { + "name": "Matugen Light", + "appearance": "light", + "style": { + "accents": [ + "{{colors.primary.light.hex}}", + "{{colors.secondary.light.hex}}", + "{{colors.tertiary.light.hex}}" + ], + "background.appearance": "opaque", + "border": "{{colors.outline_variant.light.hex}}", + "border.variant": "{{colors.outline.light.hex}}", + "border.focused": "{{colors.primary.light.hex}}", + "border.selected": "{{colors.primary.light.hex}}", + "border.transparent": "{{colors.outline_variant.light.hex}}40", + "border.disabled": "{{colors.outline_variant.light.hex}}60", + "elevated_surface.background": "{{colors.surface_container_high.light.hex}}", + "surface.background": "{{colors.surface.light.hex}}", + "background": "{{colors.background.light.hex}}", + "element.background": "{{colors.surface_container.light.hex}}", + "element.hover": "{{colors.surface_container_high.light.hex}}", + "element.active": "{{colors.surface_container_highest.light.hex}}", + "element.selected": "{{colors.secondary_container.light.hex}}", + "element.disabled": "{{colors.surface_variant.light.hex}}", + "drop_target.background": "{{colors.primary_container.light.hex}}80", + "ghost_element.background": null, + "ghost_element.hover": "{{colors.surface_container.light.hex}}80", + "ghost_element.active": "{{colors.surface_container_high.light.hex}}", + "ghost_element.selected": "{{colors.secondary_container.light.hex}}80", + "ghost_element.disabled": "{{colors.surface_variant.light.hex}}60", + "text": "{{colors.on_surface.light.hex}}", + "text.muted": "{{colors.on_surface_variant.light.hex}}", + "text.placeholder": "{{colors.on_surface_variant.light.hex}}99", + "text.disabled": "{{colors.on_surface.light.hex}}60", + "text.accent": "{{colors.primary.light.hex}}", + "icon": "{{colors.on_surface.light.hex}}", + "icon.muted": "{{colors.on_surface_variant.light.hex}}", + "icon.disabled": "{{colors.on_surface.light.hex}}60", + "icon.placeholder": "{{colors.on_surface_variant.light.hex}}80", + "icon.accent": "{{colors.primary.light.hex}}", + "status_bar.background": "{{colors.surface.light.hex}}", + "title_bar.background": "{{colors.surface.light.hex}}", + "title_bar.inactive_background": "{{colors.surface_dim.light.hex}}", + "toolbar.background": "{{colors.surface_container_low.light.hex}}", + "tab_bar.background": "{{colors.surface_container.light.hex}}", + "tab.inactive_background": "{{colors.surface_container_low.light.hex}}", + "tab.active_background": "{{colors.surface_container_high.light.hex}}", + "search.match_background": "{{colors.tertiary_container.light.hex}}80", + "panel.background": "{{colors.surface_container_low.light.hex}}", + "panel.focused_border": "{{colors.primary.light.hex}}", + "pane.focused_border": "{{colors.primary.light.hex}}", + "scrollbar.thumb.background": "{{colors.on_surface_variant.light.hex}}80", + "scrollbar.thumb.hover_background": "{{colors.on_surface_variant.light.hex}}c0", + "scrollbar.thumb.border": "{{colors.outline_variant.light.hex}}40", + "scrollbar.track.background": "{{colors.surface_container.light.hex}}", + "scrollbar.track.border": "{{colors.outline_variant.light.hex}}20", + "editor.foreground": "{{colors.on_surface.light.hex}}", + "editor.background": "{{colors.surface_container_low.light.hex}}", + "editor.gutter.background": "{{colors.surface_container_low.light.hex}}", + "editor.subheader.background": "{{colors.surface_container.light.hex}}", + "editor.indent_guide": "{{colors.outline_variant.light.hex}}60", + "editor.indent_guide_active": "{{colors.outline.light.hex}}", + "editor.active_line.background": "{{colors.surface_container_high.light.hex}}80", + "editor.highlighted_line.background": "{{colors.surface_container_high.light.hex}}60", + "editor.line_number": "{{colors.on_surface_variant.light.hex}}", + "editor.active_line_number": "{{colors.primary.light.hex}}", + "editor.invisible": "{{colors.outline_variant.light.hex}}80", + "editor.wrap_guide": "{{colors.outline_variant.light.hex}}40", + "editor.active_wrap_guide": "{{colors.outline.light.hex}}80", + "editor.document_highlight.read_background": "{{colors.primary_container.light.hex}}60", + "editor.document_highlight.write_background": "{{colors.secondary_container.light.hex}}80", + "terminal.background": "{{colors.surface_container_low.light.hex}}", + "terminal.foreground": "{{colors.on_surface.light.hex}}", + "terminal.bright_foreground": "{{colors.on_surface.light.hex}}", + "terminal.dim_foreground": "{{colors.on_surface_variant.light.hex}}", + "terminal.ansi.black": "{{colors.surface_dim.light.hex}}", + "terminal.ansi.bright_black": "{{colors.surface_container_high.light.hex}}", + "terminal.ansi.dim_black": "{{colors.surface.light.hex}}", + "terminal.ansi.red": "{{colors.error.light.hex}}", + "terminal.ansi.bright_red": "{{colors.error.light.hex}}", + "terminal.ansi.dim_red": "{{colors.on_error_container.light.hex}}", + "terminal.ansi.green": "{{colors.tertiary.light.hex}}", + "terminal.ansi.bright_green": "{{colors.tertiary.light.hex}}", + "terminal.ansi.dim_green": "{{colors.on_tertiary_container.light.hex}}", + "terminal.ansi.yellow": "{{colors.tertiary_fixed_dim.light.hex}}", + "terminal.ansi.bright_yellow": "{{colors.tertiary_fixed.light.hex}}", + "terminal.ansi.dim_yellow": "{{colors.on_tertiary_fixed.light.hex}}", + "terminal.ansi.blue": "{{colors.primary.light.hex}}", + "terminal.ansi.bright_blue": "{{colors.primary.light.hex}}", + "terminal.ansi.dim_blue": "{{colors.on_primary_container.light.hex}}", + "terminal.ansi.magenta": "{{colors.secondary.light.hex}}", + "terminal.ansi.bright_magenta": "{{colors.secondary.light.hex}}", + "terminal.ansi.dim_magenta": "{{colors.on_secondary_container.light.hex}}", + "terminal.ansi.cyan": "{{colors.primary_fixed_dim.light.hex}}", + "terminal.ansi.bright_cyan": "{{colors.primary_fixed.light.hex}}", + "terminal.ansi.dim_cyan": "{{colors.on_primary_fixed_variant.light.hex}}", + "terminal.ansi.white": "{{colors.on_surface.light.hex}}", + "terminal.ansi.bright_white": "{{colors.on_surface.light.hex}}", + "terminal.ansi.dim_white": "{{colors.on_surface_variant.light.hex}}", + "link_text.hover": "{{colors.primary.light.hex}}", + "conflict": "{{colors.error.light.hex}}", + "conflict.background": "{{colors.error_container.light.hex}}80", + "conflict.border": "{{colors.on_error_container.light.hex}}", + "created": "{{colors.tertiary.light.hex}}", + "created.background": "{{colors.tertiary_container.light.hex}}80", + "created.border": "{{colors.on_tertiary_container.light.hex}}", + "deleted": "{{colors.error.light.hex}}", + "deleted.background": "{{colors.error_container.light.hex}}80", + "deleted.border": "{{colors.on_error_container.light.hex}}", + "error": "{{colors.error.light.hex}}", + "error.background": "{{colors.error_container.light.hex}}", + "error.border": "{{colors.on_error_container.light.hex}}", + "hidden": "{{colors.outline_variant.light.hex}}", + "hidden.border": "{{colors.outline_variant.light.hex}}60", + "hint": "{{colors.primary.light.hex}}", + "hint.background": "{{colors.primary_container.light.hex}}80", + "hint.border": "{{colors.on_primary_container.light.hex}}", + "ignored": "{{colors.on_surface_variant.light.hex}}60", + "ignored.background": "{{colors.surface_variant.light.hex}}40", + "ignored.border": "{{colors.outline_variant.light.hex}}40", + "info": "{{colors.primary.light.hex}}", + "info.background": "{{colors.primary_container.light.hex}}80", + "info.border": "{{colors.on_primary_container.light.hex}}", + "modified": "{{colors.secondary.light.hex}}", + "modified.background": "{{colors.secondary_container.light.hex}}80", + "modified.border": "{{colors.on_secondary_container.light.hex}}", + "predictive": "{{colors.on_surface_variant.light.hex}}80", + "predictive.border": "{{colors.outline.light.hex}}", + "predictive.background": "{{colors.surface_container_highest.light.hex}}80", + "renamed": "{{colors.secondary.light.hex}}", + "renamed.border": "{{colors.on_secondary_container.light.hex}}", + "renamed.background": "{{colors.secondary_container.light.hex}}80", + "success": "{{colors.tertiary.light.hex}}", + "success.background": "{{colors.tertiary_container.light.hex}}80", + "success.border": "{{colors.on_tertiary_container.light.hex}}", + "unreachable": "{{colors.on_surface_variant.light.hex}}60", + "unreachable.background": "{{colors.surface_variant.light.hex}}40", + "unreachable.border": "{{colors.outline_variant.light.hex}}60", + "warning": "{{colors.tertiary_fixed_dim.light.hex}}", + "warning.background": "{{colors.tertiary_container.light.hex}}80", + "warning.border": "{{colors.on_tertiary_container.light.hex}}", + "players": [ + { + "cursor": "{{colors.primary.light.hex}}", + "background": "{{colors.primary_container.light.hex}}80", + "selection": "{{colors.primary_container.light.hex}}60" + }, + { + "cursor": "{{colors.secondary.light.hex}}", + "background": "{{colors.secondary_container.light.hex}}80", + "selection": "{{colors.secondary_container.light.hex}}60" + } + ], + "syntax": { + "boolean": { + "color": "{{colors.tertiary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "comment": { + "color": "{{colors.on_surface_variant.light.hex}}", + "font_style": "italic", + "font_weight": null + }, + "comment.doc": { + "color": "{{colors.on_surface_variant.light.hex}}", + "font_style": "italic", + "font_weight": null + }, + "constant": { + "color": "{{colors.tertiary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "constructor": { + "color": "{{colors.secondary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "emphasis": { + "color": "{{colors.primary.light.hex}}", + "font_style": "italic", + "font_weight": null + }, + "emphasis.strong": { + "color": "{{colors.primary.light.hex}}", + "font_style": null, + "font_weight": 700 + }, + "function": { + "color": "{{colors.primary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "keyword": { + "color": "{{colors.secondary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "number": { + "color": "{{colors.tertiary_fixed.light.hex}}", + "font_style": null, + "font_weight": null + }, + "operator": { + "color": "{{colors.on_surface_variant.light.hex}}", + "font_style": null, + "font_weight": null + }, + "property": { + "color": "{{colors.on_surface.light.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation": { + "color": "{{colors.on_surface_variant.light.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation.bracket": { + "color": "{{colors.secondary_fixed.light.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation.delimiter": { + "color": "{{colors.on_surface_variant.light.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation.list_marker": { + "color": "{{colors.on_surface_variant.light.hex}}", + "font_style": null, + "font_weight": null + }, + "punctuation.special": { + "color": "{{colors.secondary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "string": { + "color": "{{colors.tertiary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "string.escape": { + "color": "{{colors.tertiary_fixed_dim.light.hex}}", + "font_style": null, + "font_weight": null + }, + "string.regex": { + "color": "{{colors.tertiary_fixed.light.hex}}", + "font_style": null, + "font_weight": null + }, + "string.special": { + "color": "{{colors.on_tertiary_container.light.hex}}", + "font_style": null, + "font_weight": null + }, + "string.special.symbol": { + "color": "{{colors.tertiary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "tag": { + "color": "{{colors.secondary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "text.literal": { + "color": "{{colors.tertiary.light.hex}}", + "font_style": null, + "font_weight": null + }, + "type": { + "color": "{{colors.primary_fixed.light.hex}}", + "font_style": null, + "font_weight": null + }, + "variable": { + "color": "{{colors.on_surface.light.hex}}", + "font_style": null, + "font_weight": null + }, + "variable.special": { + "color": "{{colors.primary.light.hex}}", + "font_style": null, + "font_weight": null + } + } + } + } + ] +} diff --git a/config/matugen/templates/zellij-theme.kdl.tera b/config/matugen/templates/zellij-theme.kdl.tera new file mode 100644 index 0000000..a3189f4 --- /dev/null +++ b/config/matugen/templates/zellij-theme.kdl.tera @@ -0,0 +1,133 @@ +themes { + matugen { + // Text: readable content on surfaces + text_unselected { + base {{colors.on_surface.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background {{colors.surface_container.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_0 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + text_selected { + base {{colors.on_surface.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background {{colors.surface_container_high.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_0 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + + // Ribbon (tab bar) + ribbon_selected { + base {{colors.on_primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_0 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.on_primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.primary_container.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + ribbon_unselected { + base {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background {{colors.surface_container_high.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_0 {{colors.error.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.on_surface.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + + // Table + table_title { + base {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background 0 + emphasis_0 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.outline.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + table_cell_selected { + base {{colors.on_surface.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background {{colors.surface_container_high.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_0 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + table_cell_unselected { + base {{colors.on_surface.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background {{colors.surface_container.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_0 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + + // List + list_selected { + base {{colors.on_surface.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background {{colors.surface_container_high.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_0 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + list_unselected { + base {{colors.on_surface.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background {{colors.surface_container.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_0 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + + // Frame (pane borders) + frame_selected { + base {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background 0 + emphasis_0 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 0 + } + frame_highlight { + base {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background 0 + emphasis_0 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.on_surface_variant.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + + // Exit codes + exit_code_success { + base {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background 0 + emphasis_0 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 {{colors.surface_container.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_2 {{colors.secondary_container.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_3 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + exit_code_error { + base {{colors.error.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + background 0 + emphasis_0 {{colors.on_error_container.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + emphasis_1 0 + emphasis_2 0 + emphasis_3 0 + } + + // Multiplayer user colors + multiplayer_user_colors { + player_1 {{colors.primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_2 {{colors.secondary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_3 {{colors.tertiary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_4 {{colors.on_primary_fixed.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_5 {{colors.on_secondary_fixed.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_6 {{colors.on_tertiary_fixed.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_7 {{colors.error.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_8 {{colors.outline.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_9 {{colors.inverse_primary.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + player_10 {{colors.primary_fixed_dim.dark.rgb | replace: "rgb(", "" | replace: ")", "" | replace: ", ", " "}} + } + } +} diff --git a/config/matugen/templates/zen-userChrome.css b/config/matugen/templates/zen-userChrome.css new file mode 100644 index 0000000..f909038 --- /dev/null +++ b/config/matugen/templates/zen-userChrome.css @@ -0,0 +1,177 @@ +* { + --base: {{colors.surface_container_lowest.default.hex}}; + --surface: {{colors.surface_container_low.default.hex}}; + --overlay: {{colors.surface_container.default.hex}}; + --muted: {{colors.surface_container_high.default.hex}}; + --subtle: {{colors.surface_container_highest.default.hex}}; + --text: {{colors.on_surface.default.hex}}; + --secondary: {{colors.secondary.default.hex}}; + --primary: {{colors.primary.default.hex}}; + --on_primary: {{colors.on_primary.default.hex}}; +} + +:root { + /* --- Core Palette Overrides --- */ + --zen-colors-primary: var(--base) !important; + --zen-primary-color: var(--base) !important; + --zen-colors-secondary: var(--surface) !important; + --zen-colors-tertiary: var(--overlay) !important; + --zen-colors-border: var(--primary) !important; + + /* --- Internal Zen Color Variables --- */ + --zen-primary-color: var(--primary) !important; + --zen-colors-primary: var(--base) !important; + --zen-colors-secondary: var(--surface) !important; + --zen-colors-tertiary: var(--base) !important; + + /* --- Backgrounds --- */ + --toolbar-bgcolor: var(--base) !important; + --newtab-background-color: var(--overlay) !important; + --zen-themed-toolbar-bg: var(--base) !important; + --zen-main-browser-background: var(--base) !important; + --toolbox-bgcolor-inactive: var(--base) !important; + --zen-urlbar-background: var(--surface) !important; + --zen-colors-input-bg: var(--surface) !important; + --zen-themed-toolbar-bg-transparent: transparent !important; + + /* --- Text & Icons --- */ + --lwt-text-color: var(--text) !important; + --toolbarbutton-icon-fill: var(--primary) !important; + --toolbar-field-color: var(--text) !important; + --toolbar-field-focus-color: var(--text) !important; + --toolbar-color: var(--text) !important; + --toolbox-textcolor: var(--text) !important; + --toolbox-textcolor-inactive: var(--text) !important; + --tab-selected-textcolor: var(--primary) !important; + --newtab-text-primary-color: var(--text) !important; + + /* --- Popups, Menus & Sidebars --- */ + --arrowpanel-color: var(--text) !important; + --arrowpanel-background: var(--overlay) !important; + --sidebar-text-color: var(--text) !important; + --lwt-sidebar-text-color: var(--text) !important; + --lwt-sidebar-background-color: var(--base) !important; +} + +/* --- Sidebar & Layout --- */ + +#navigator-toolbox, +#zen-tabbox-wrapper, +.sidebar-panel { + background-color: var(--base) !important; +} + +#zen-sidebar-splitter { + background-color: var(--base) !important; + opacity: 1 !important; +} + +.sidebar-placesTree { + background-color: var(--surface) !important; +} + +#zen-workspaces-button { + background-color: var(--surface) !important; +} + +#zen-appcontent-navbar-container { + background-color: var(--base) !important; +} + +/* --- Navigation Controls --- */ + +#back-button .toolbarbutton-icon, +#forward-button .toolbarbutton-icon, +#reload-button .toolbarbutton-icon, +#stop-button .toolbarbutton-icon, +#PanelUI-menu-button .toolbarbutton-icon, +#unified-extensions-button .toolbarbutton-icon, +#nav-bar-overflow-button .toolbarbutton-icon, +#zen-toggle-compact-mode .toolbarbutton-icon { + fill: var(--primary) !important; + color: var(--primary) !important; +} + +#back-button[disabled] .toolbarbutton-icon, +#forward-button[disabled] .toolbarbutton-icon { + opacity: 0.3 !important; +} + +toolbar .toolbarbutton-1 { + &:not([disabled]) { + &:is([open], [checked]) > :is( + .toolbarbutton-icon, + .toolbarbutton-text, + .toolbarbutton-badge-stack + ) { + fill: var(--base); + } + } +} + +/* --- URL Bar --- */ + +#urlbar-input { + color: var(--text) !important; +} + +#urlbar-input::selection { + background-color: var(--primary) !important; + color: var(--on_primary) !important; +} + +.urlbar-background { + background-color: var(--base) !important; +} + +#urlbar-input-container { + background-color: var(--base) !important; +} + +.urlbarView-url { + color: var(--primary) !important; +} + +.urlbarView-favicon { + background-color: var(--base) !important; +} + +#urlbar-results { + background-color: var(--overlay) !important; + color: var(--text) !important; +} + +/* --- UI Components --- */ + +#zen-toast-container { + color: var(--primary) !important; +} + +#PanelUI-menu-button[open] .toolbarbutton-icon { + fill: var(--primary) !important; +} + +#permissions-granted-icon { + color: var(--base) !important; +} + +.tab-background[selected=""] { + background: var(--overlay) !important; +} + +.content-shortcuts { + background-color: var(--surface) !important; + border-color: var(--secondary) !important; +} + +#zenEditBookmarkPanelFaviconContainer { + background: var(--base) !important; +} + +#TabsToolbar { + background-color: var(--base) !important; +} + +hbox#titlebar { + background-color: var(--base) !important; +} diff --git a/config/matugen/templates/zen-userContent.css b/config/matugen/templates/zen-userContent.css new file mode 100644 index 0000000..dc75d17 --- /dev/null +++ b/config/matugen/templates/zen-userContent.css @@ -0,0 +1,83 @@ +/* Common variables affecting all pages */ + @-moz-document url-prefix("about:") { + :root { + --in-content-page-color: {{colors.secondary.default.hex}} !important; + --color-accent-primary: {{colors.primary.default.hex}} !important; + /* --color-accent-primary-hover: rgb(249, 217, 240) !important; + --color-accent-primary-active: rgb(245, 195, 219) !important; */ + background-color: {{colors.surface_container.default.hex}} !important; + --in-content-page-background: {{colors.surface_container.default.hex}} !important; + } + + } + + /* Variables and styles specific to about:newtab and about:home */ + @-moz-document url("about:newtab"), url("about:home") { + + :root { + --newtab-background-color: {{colors.surface_container.default.hex}} !important; + --newtab-background-color-secondary: {{colors.surface_container_high.default.hex}} !important; + --newtab-element-hover-color: {{colors.surface_container_high.default.hex}} !important; + --newtab-text-primary-color: {{colors.secondary.default.hex}} !important; + --newtab-wordmark-color: {{colors.secondary.default.hex}} !important; + --newtab-primary-action-background: {{colors.primary.default.hex}} !important; + } + + .icon { + color: {{colors.primary.default.hex}} !important; + } + + .card-outer:is(:hover, :focus, .active):not(.placeholder) .card-title { + color: {{colors.primary.default.hex}} !important; + } + } + + /* Variables and styles specific to about:preferences */ + @-moz-document url-prefix("about:preferences") { + :root { + --zen-colors-tertiary: {{colors.surface_container_low.default.hex}} !important; + --in-content-text-color: {{colors.secondary.default.hex}} !important; + --link-color: {{colors.primary.default.hex}} !important; + /* --link-color-hover: rgb(249, 217, 240) !important; */ + --zen-colors-primary: {{colors.surface_container_high.default.hex}} !important; + --in-content-box-background: {{colors.surface_container_high.default.hex}} !important; + --zen-primary-color: {{colors.primary.default.hex}} !important; + } + + button, + groupbox menulist { + background: {{colors.surface_container_high.default.hex}} !important; + color: {{colors.secondary.default.hex}} !important; + } + + .main-content { + background-color: {{colors.surface_container_lowest.default.hex}} !important; + } + } + + /* Variables and styles specific to about:addons */ + @-moz-document url-prefix("about:addons") { + :root { + --zen-dark-color-mix-base: {{colors.surface_container_low.default.hex}} !important; + --background-color-box: {{colors.surface_container.default.hex}} !important; + } + } + + /* Variables and styles specific to about:protections */ + @-moz-document url-prefix("about:protections") { + :root { + --zen-primary-color: {{colors.surface_container.default.hex}} !important; + --in-content-primary-button-text-color-hover: {{colors.secondary.default.hex}} !important; + --in-content-primary-button-background: {{colors.surface_container.default.hex}} !important; + --in-content-primary-button-text-color: {{colors.secondary.default.hex}} !important; + } + + .card { + background-color: {{colors.surface_container_high.default.hex}} !important; + } + } + /* Pane UI button visibility issue fix */ + #PanelUI-menu-button[open] .toolbarbutton-icon { + fill: {{colors.primary.default.hex}} !important; + } +} \ No newline at end of file diff --git a/config/matugen/templates/zen.css b/config/matugen/templates/zen.css new file mode 100644 index 0000000..9d5da94 --- /dev/null +++ b/config/matugen/templates/zen.css @@ -0,0 +1,104 @@ +/* DMS Matugen Zen Browser Theme */ +:root { + --zen-primary-color: {{colors.primary_container.default.hex}} !important; + --toolbarbutton-icon-fill: {{colors.primary.default.hex}} !important; + --toolbar-field-color: {{colors.on_background.default.hex}} !important; + --tab-selected-textcolor: {{colors.primary.default.hex}} !important; + --toolbar-color: {{colors.on_background.default.hex}} !important; + --arrowpanel-color: {{colors.on_surface.default.hex}} !important; + --arrowpanel-background: {{colors.surface_container.default.hex}} !important; + --sidebar-text-color: {{colors.on_background.default.hex}} !important; + --zen-main-browser-background: {{colors.background.default.hex}} !important; +} + +.sidebar-placesTree { + background-color: {{colors.surface_container.default.hex}} !important; +} + +#zen-workspaces-button { + background-color: {{colors.surface_container.default.hex}} !important; +} + +#TabsToolbar { + background-color: {{colors.background.default.hex}} !important; +} + +.urlbar-background { + background-color: {{colors.surface_container.default.hex}} !important; +} + +.urlbar-input::selection { + color: {{colors.on_primary.default.hex}} !important; + background-color: {{colors.primary.default.hex}} !important; +} + +.urlbarView-url { + color: {{colors.on_surface_variant.default.hex}} !important; +} + +toolbar .toolbarbutton-1 { + &:not([disabled]) { + &:is([open], [checked]) + > :is( + .toolbarbutton-icon, + .toolbarbutton-text, + .toolbarbutton-badge-stack + ) { + fill: {{colors.primary.default.hex}} + } + } +} +.identity-color-blue { + --identity-tab-color: {{base16.base0d.dark.color}} !important; + --identity-icon-color: {{base16.base0d.dark.color}} !important; +} +.identity-color-turquoise { + --identity-tab-color: {{base16.base0c.dark.color}} !important; + --identity-icon-color: {{base16.base0c.dark.color}} !important; +} +.identity-color-green { + --identity-tab-color: {{base16.base0b.dark.color}} !important; + --identity-icon-color: {{base16.base0b.dark.color}} !important; +} +.identity-color-yellow { + --identity-tab-color: {{base16.base0a.dark.color}} !important; + --identity-icon-color: {{base16.base0a.dark.color}} !important; +} +.identity-color-orange { + --identity-tab-color: {{base16.base09.dark.color}} !important; + --identity-icon-color: {{base16.base09.dark.color}} !important; +} +.identity-color-red { + --identity-tab-color: {{base16.base08.dark.color}} !important; + --identity-icon-color: {{base16.base08.dark.color}} !important; +} +.identity-color-pink { + --identity-tab-color: {{base16.base0e.dark.color}} !important; + --identity-icon-color: {{base16.base0e.dark.color}} !important; +} +.identity-color-purple { + --identity-tab-color: {{base16.base0e.dark.color}} !important; + --identity-icon-color: {{base16.base0e.dark.color}} !important; +} +#zen-appcontent-navbar-container { + background-color: {{colors.background.default.hex}} !important; +} + +#PanelUI-menu-button .toolbarbutton-icon, +#downloads-button .toolbarbutton-icon, +#unified-extensions-button .toolbarbutton-icon { + fill: {{colors.primary.default.hex}} !important; + color: {{colors.primary.default.hex}} !important; +} + +#PanelUI-menu-button .toolbarbutton-badge-stack, +#downloads-button .toolbarbutton-badge-stack, +#unified-extensions-button .toolbarbutton-badge-stack { + fill: {{colors.primary.default.hex}} !important; + color: {{colors.primary.default.hex}} !important; +} + +toolbar .toolbarbutton-1 > .toolbarbutton-icon { + fill: {{colors.primary.default.hex}} !important; +} + diff --git a/config/mimeapps.list b/config/mimeapps.list index 6abaefe..563711b 100644 --- a/config/mimeapps.list +++ b/config/mimeapps.list @@ -21,7 +21,7 @@ image/jpeg=gimp.desktop;org.gnome.gThumb.desktop;org.gnome.eog.desktop; image/png=gimp.desktop;org.gnome.eog.desktop; image/webp=org.gnome.eog.desktop; text/html=zen.desktop;userapp-Zen-PIXJK3.desktop; -text/plain=neovide.desktop; +text/plain=neovide.desktop;nvim.desktop; video/mp4=mpv.desktop; video/webm=mpv.desktop; x-scheme-handler/chrome=zen.desktop;userapp-Zen-PIXJK3.desktop;firefox.desktop; @@ -34,6 +34,7 @@ application/vnd.sqlite3=neovide.desktop; text/x-csrc=neovide.desktop; video/mpeg=mpv.desktop; text/x-c++hdr=neovide.desktop; +application/x-shellscript=nvim.desktop; [Default Applications] application/fb2=org.pwmt.zathura.desktop @@ -65,7 +66,7 @@ image/vnd.djvu=org.pwmt.zathura.desktop image/webp=org.gnome.eog.desktop text/fb2+xml=org.pwmt.zathura.desktop text/html=zen.desktop -text/plain=neovide.desktop +text/plain=nvim.desktop text/xml=com.github.johnfactotum.Foliate.desktop video/mp4=mpv.desktop video/webm=mpv.desktop @@ -75,11 +76,12 @@ x-scheme-handler/discord=equibop.desktop x-scheme-handler/http=zen.desktop x-scheme-handler/https=zen.desktop x-scheme-handler/mailto=zen.desktop; -x-scheme-handler/tg=org.telegram.desktop.desktop -x-scheme-handler/tonsite=org.telegram.desktop.desktop +x-scheme-handler/tg=org.fagram._54c5bda1f706fd3ba4d74713b044bfea.desktop +x-scheme-handler/tonsite=org.fagram._54c5bda1f706fd3ba4d74713b044bfea.desktop text/x-csrc=neovide.desktop video/=mpv.desktop video/mkv=mpv.desktop video/x-matroska=mpv.desktop video/all=mplayer.desktop text/x-c++hdr=neovide.desktop +application/x-shellscript=nvim.desktop diff --git a/config/niri/binds.kdl b/config/niri/binds.kdl index 9ab82c4..b83f9a4 100644 --- a/config/niri/binds.kdl +++ b/config/niri/binds.kdl @@ -11,7 +11,7 @@ binds { Mod+Shift+Slash { show-hotkey-overlay; } Super+F{ maximize-column;} - Mod+M { spawn "hyprwave-toggle" "visibility"; } + Mod+M { spawn-sh "hyprwave-toggle visibility && hyprwave-toggle expand"; } // Suggested binds for running programs: terminal, app launcher, screen locker. Mod+Q repeat=false { spawn "footclient"; } //Mod+D { spawn "fuzzel"; } @@ -23,6 +23,7 @@ binds { // Mod+D repeat=false { spawn-sh "qs -c noctalia-shell ipc call launcher toggle"; } Mod+Grave repeat=false { toggle-overview; } Super+W { spawn-sh "footclient -T clipse clipse"; } + // Mod+W {spawn-sh "bash ~/.config/niri/clipse.sh";} Mod+Escape { spawn "hyprlock"; } Mod+Shift+Return { spawn "shutdown" "now"; } Mod+Ctrl+S { screenshot-window write-to-disk=false; } @@ -31,6 +32,7 @@ binds { Mod+Shift+P{spawn "shutdown" "-c";} Alt+I repeat=false {spawn "hyprpicker" "-a";} Mod+Alt+S allow-when-locked=true hotkey-overlay-title=null { spawn-sh "pkill orca || exec orca"; } // такое себе + Mod+E repeat=false {spawn-sh "bash ~/.config/niri/scripts/ocr.sh";} // Mod+Shift+G {} // Example volume keys mappings for PipeWire & WirePlumber. @@ -60,7 +62,7 @@ binds { // Open/close the Overview: a zoomed-out view of workspaces and windows. // You can also move the mouse into the top-left hot corner, // or do a four-finger swipe up on a touchpad. - Mod+O repeat=false { toggle-overview; } + Mod+O repeat=false { spawn-sh "bash ~/.config/ironbar/scripts/matugen.sh"; } //Mod+Escape repeat=false { toggle-overview; } @@ -247,8 +249,8 @@ binds { Mod+Shift+W { toggle-column-tabbed-display; } // Cycling through the presets in reverse order is also possible. // Mod+R { switch-preset-column-width-back; } - Mod+Shift+R repeat=false { switch-preset-window-height; } - Mod+Ctrl+R { reset-window-height; } + Mod+R repeat=false { switch-preset-window-height; } + Mod+Shift+R { reset-window-height; } Mod+Shift+F repeat=false { fullscreen-window; } // Expand the focused column to space not taken up by other fully visible columns. diff --git a/config/niri/clipse.sh b/config/niri/clipse.sh new file mode 100644 index 0000000..13187da --- /dev/null +++ b/config/niri/clipse.sh @@ -0,0 +1,3 @@ +#!/bin/bash +bash ~/.config/matugen/scripts/foot-apply-colors.sh +footclient -T clipse clipse diff --git a/config/niri/colors.kdl b/config/niri/colors.kdl new file mode 100644 index 0000000..a3d2626 --- /dev/null +++ b/config/niri/colors.kdl @@ -0,0 +1,29 @@ +layout { + focus-ring { + active-color "#f2be6e" + inactive-color "#aa9e8e" + urgent-color "#ffb4ab" + } + + border { + active-color "#f2be6e" + inactive-color "#aa9e8e" + urgent-color "#ffb4ab" + } + + shadow { + off + color "#00000070" + } + + tab-indicator { + active-color "#f2be6e" + inactive-color "#aa9e8e" + urgent-color "#ffb4ab" + } + + insert-hint { + color "#f2be6e80" + } +} + diff --git a/config/niri/config.kdl b/config/niri/config.kdl index 3ee0277..ef64efb 100644 --- a/config/niri/config.kdl +++ b/config/niri/config.kdl @@ -64,7 +64,7 @@ environment{ QT_QPA_PLATFORM "wayland" ELECTRON_OZONE_PLATFORM_HINT "wayland" //ЖQT_STYLE_OVERRIDE "adwaita" - QT_STYLE_OVERRIDE "kvantum" + // QT_STYLE_OVERRIDE "kvantum" } xwayland-satellite { // off @@ -85,3 +85,5 @@ include "output-pc.kdl" include "spawn-at-startup.kdl" include "animation.kdl" include "layout.kdl" + +include "colors.kdl" diff --git a/config/niri/dms/alttab.kdl b/config/niri/dms/alttab.kdl deleted file mode 100644 index 3f291e7..0000000 --- a/config/niri/dms/alttab.kdl +++ /dev/null @@ -1,10 +0,0 @@ -// ! DO NOT EDIT ! - // ! AUTO-GENERATED BY DMS ! - // ! CHANGES WILL BE OVERWRITTEN ! - // ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE ! - - recent-windows { - highlight { - corner-radius 10 - } - } diff --git a/config/niri/dms/binds.kdl b/config/niri/dms/binds.kdl deleted file mode 100644 index dc1d7cc..0000000 --- a/config/niri/dms/binds.kdl +++ /dev/null @@ -1,221 +0,0 @@ -binds { - // === System & Overview === - Mod+D repeat=false { toggle-overview; } - Mod+Tab repeat=false { toggle-overview; } - Mod+Shift+Slash { show-hotkey-overlay; } - - // === Application Launchers === - Mod+T hotkey-overlay-title="Open Terminal" { spawn "ghostty"; } - Mod+Space hotkey-overlay-title="Application Launcher" { - spawn "dms" "ipc" "call" "spotlight" "toggle"; - } - Mod+V hotkey-overlay-title="Clipboard Manager" { - spawn "dms" "ipc" "call" "clipboard" "toggle"; - } - Mod+M hotkey-overlay-title="Task Manager" { - spawn "dms" "ipc" "call" "processlist" "focusOrToggle"; - } - - Super+X hotkey-overlay-title="Power Menu: Toggle" { spawn "dms" "ipc" "call" "powermenu" "toggle"; } - Mod+Comma hotkey-overlay-title="Settings" { - spawn "dms" "ipc" "call" "settings" "focusOrToggle"; - } - Mod+Y hotkey-overlay-title="Browse Wallpapers" { - spawn "dms" "ipc" "call" "dankdash" "wallpaper"; - } - Mod+N hotkey-overlay-title="Notification Center" { spawn "dms" "ipc" "call" "notifications" "toggle"; } - Mod+Shift+N hotkey-overlay-title="Notepad" { spawn "dms" "ipc" "call" "notepad" "toggle"; } - - // === Security === - Mod+Alt+L hotkey-overlay-title="Lock Screen" { - spawn "dms" "ipc" "call" "lock" "lock"; - } - Mod+Shift+E { quit; } - Ctrl+Alt+Delete hotkey-overlay-title="Task Manager" { - spawn "dms" "ipc" "call" "processlist" "focusOrToggle"; - } - - // === Audio Controls === - XF86AudioRaiseVolume allow-when-locked=true { - spawn "dms" "ipc" "call" "audio" "increment" "3"; - } - XF86AudioLowerVolume allow-when-locked=true { - spawn "dms" "ipc" "call" "audio" "decrement" "3"; - } - XF86AudioMute allow-when-locked=true { - spawn "dms" "ipc" "call" "audio" "mute"; - } - XF86AudioMicMute allow-when-locked=true { - spawn "dms" "ipc" "call" "audio" "micmute"; - } - XF86AudioPause allow-when-locked=true { - spawn "dms" "ipc" "call" "mpris" "playPause"; - } - XF86AudioPlay allow-when-locked=true { - spawn "dms" "ipc" "call" "mpris" "playPause"; - } - XF86AudioPrev allow-when-locked=true { - spawn "dms" "ipc" "call" "mpris" "previous"; - } - XF86AudioNext allow-when-locked=true { - spawn "dms" "ipc" "call" "mpris" "next"; - } - Ctrl+XF86AudioRaiseVolume allow-when-locked=true { - spawn "dms" "ipc" "call" "mpris" "increment" "3"; - } - Ctrl+XF86AudioLowerVolume allow-when-locked=true { - spawn "dms" "ipc" "call" "mpris" "decrement" "3"; - } - - // === Brightness Controls === - XF86MonBrightnessUp allow-when-locked=true { - spawn "dms" "ipc" "call" "brightness" "increment" "5" ""; - } - XF86MonBrightnessDown allow-when-locked=true { - spawn "dms" "ipc" "call" "brightness" "decrement" "5" ""; - } - - // === Window Management === - Mod+Q repeat=false { close-window; } - Mod+F { maximize-column; } - Mod+Shift+F { fullscreen-window; } - Mod+Shift+T { toggle-window-floating; } - Mod+Shift+V { switch-focus-between-floating-and-tiling; } - Mod+W { toggle-column-tabbed-display; } - Mod+Shift+W hotkey-overlay-title="Create window rule" { spawn "dms" "ipc" "call" "window-rules" "toggle"; } - - // === Focus Navigation === - Mod+Left { focus-column-left; } - Mod+Down { focus-window-down; } - Mod+Up { focus-window-up; } - Mod+Right { focus-column-right; } - Mod+H { focus-column-left; } - Mod+J { focus-window-down; } - Mod+K { focus-window-up; } - Mod+L { focus-column-right; } - - // === Window Movement === - Mod+Shift+Left { move-column-left; } - Mod+Shift+Down { move-window-down; } - Mod+Shift+Up { move-window-up; } - Mod+Shift+Right { move-column-right; } - Mod+Shift+H { move-column-left; } - Mod+Shift+J { move-window-down; } - Mod+Shift+K { move-window-up; } - Mod+Shift+L { move-column-right; } - - // === Column Navigation === - Mod+Home { focus-column-first; } - Mod+End { focus-column-last; } - Mod+Ctrl+Home { move-column-to-first; } - Mod+Ctrl+End { move-column-to-last; } - - // === Monitor Navigation === - Mod+Ctrl+Left { focus-monitor-left; } - //Mod+Ctrl+Down { focus-monitor-down; } - //Mod+Ctrl+Up { focus-monitor-up; } - Mod+Ctrl+Right { focus-monitor-right; } - Mod+Ctrl+H { focus-monitor-left; } - Mod+Ctrl+J { focus-monitor-down; } - Mod+Ctrl+K { focus-monitor-up; } - Mod+Ctrl+L { focus-monitor-right; } - - // === Move to Monitor === - Mod+Shift+Ctrl+Left { move-column-to-monitor-left; } - Mod+Shift+Ctrl+Down { move-column-to-monitor-down; } - Mod+Shift+Ctrl+Up { move-column-to-monitor-up; } - Mod+Shift+Ctrl+Right { move-column-to-monitor-right; } - Mod+Shift+Ctrl+H { move-column-to-monitor-left; } - Mod+Shift+Ctrl+J { move-column-to-monitor-down; } - Mod+Shift+Ctrl+K { move-column-to-monitor-up; } - Mod+Shift+Ctrl+L { move-column-to-monitor-right; } - - // === Workspace Navigation === - Mod+Page_Down { focus-workspace-down; } - Mod+Page_Up { focus-workspace-up; } - Mod+U { focus-workspace-down; } - Mod+I { focus-workspace-up; } - Mod+Ctrl+Down { move-column-to-workspace-down; } - Mod+Ctrl+Up { move-column-to-workspace-up; } - Mod+Ctrl+U { move-column-to-workspace-down; } - Mod+Ctrl+I { move-column-to-workspace-up; } - - // === Workspace Management === - Ctrl+Shift+R hotkey-overlay-title="Rename Workspace" { - spawn "dms" "ipc" "call" "workspace-rename" "open"; - } - - // === Move Workspaces === - Mod+Shift+Page_Down { move-workspace-down; } - Mod+Shift+Page_Up { move-workspace-up; } - Mod+Shift+U { move-workspace-down; } - Mod+Shift+I { move-workspace-up; } - - // === Mouse Wheel Navigation === - Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } - Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } - Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } - Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } - - Mod+WheelScrollRight { focus-column-right; } - Mod+WheelScrollLeft { focus-column-left; } - Mod+Ctrl+WheelScrollRight { move-column-right; } - Mod+Ctrl+WheelScrollLeft { move-column-left; } - - Mod+Shift+WheelScrollDown { focus-column-right; } - Mod+Shift+WheelScrollUp { focus-column-left; } - Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } - Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } - - // === Numbered Workspaces === - Mod+1 { focus-workspace 1; } - Mod+2 { focus-workspace 2; } - Mod+3 { focus-workspace 3; } - Mod+4 { focus-workspace 4; } - Mod+5 { focus-workspace 5; } - Mod+6 { focus-workspace 6; } - Mod+7 { focus-workspace 7; } - Mod+8 { focus-workspace 8; } - Mod+9 { focus-workspace 9; } - - // === Move to Numbered Workspaces === - Mod+Shift+1 { move-column-to-workspace 1; } - Mod+Shift+2 { move-column-to-workspace 2; } - Mod+Shift+3 { move-column-to-workspace 3; } - Mod+Shift+4 { move-column-to-workspace 4; } - Mod+Shift+5 { move-column-to-workspace 5; } - Mod+Shift+6 { move-column-to-workspace 6; } - Mod+Shift+7 { move-column-to-workspace 7; } - Mod+Shift+8 { move-column-to-workspace 8; } - Mod+Shift+9 { move-column-to-workspace 9; } - - // === Column Management === - Mod+BracketLeft { consume-or-expel-window-left; } - Mod+BracketRight { consume-or-expel-window-right; } - Mod+Period { expel-window-from-column; } - - // === Sizing & Layout === - Mod+R { switch-preset-column-width; } - Mod+Shift+R { switch-preset-window-height; } - Mod+Ctrl+R { reset-window-height; } - Mod+Ctrl+F { expand-column-to-available-width; } - Mod+C { center-column; } - Mod+Ctrl+C { center-visible-columns; } - - // === Manual Sizing === - Mod+Minus { set-column-width "-10%"; } - Mod+Equal { set-column-width "+10%"; } - Mod+Shift+Minus { set-window-height "-10%"; } - Mod+Shift+Equal { set-window-height "+10%"; } - - // === Screenshots === - XF86Launch1 { screenshot; } - Ctrl+XF86Launch1 { screenshot-screen; } - Alt+XF86Launch1 { screenshot-window; } - Print { screenshot; } - Ctrl+Print { screenshot-screen; } - Alt+Print { screenshot-window; } - // === System Controls === - Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; } - Mod+Shift+P { power-off-monitors; } -} diff --git a/config/niri/dms/colors.kdl b/config/niri/dms/colors.kdl deleted file mode 100644 index 37650a6..0000000 --- a/config/niri/dms/colors.kdl +++ /dev/null @@ -1,39 +0,0 @@ -// ! Auto-generated file. Do not edit directly. -// Remove `include "dms/colors.kdl"` from your config to override. - -layout { - background-color "transparent" - - focus-ring { - active-color "#b8a8f0" - inactive-color "#c9b8d9" - urgent-color "#f38ba8" - } - - border { - active-color "#b8a8f0" - inactive-color "#c9b8d9" - urgent-color "#f38ba8" - } - - shadow { - color "#00000070" - } - - tab-indicator { - active-color "#b8a8f0" - inactive-color "#c9b8d9" - urgent-color "#f38ba8" - } - - insert-hint { - color "#b8a8f080" - } -} - -recent-windows { - highlight { - active-color "#745b8c" - urgent-color "#f38ba8" - } -} diff --git a/config/niri/dms/cursor.kdl b/config/niri/dms/cursor.kdl deleted file mode 100644 index 66f77fc..0000000 --- a/config/niri/dms/cursor.kdl +++ /dev/null @@ -1,10 +0,0 @@ -// ! DO NOT EDIT ! -// ! AUTO-GENERATED BY DMS ! -// ! CHANGES WILL BE OVERWRITTEN ! -// ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE ! - -cursor { - xcursor-theme "Bibata-Modern-Ice" - xcursor-size 21 - hide-when-typing -} \ No newline at end of file diff --git a/config/niri/dms/layout.kdl b/config/niri/dms/layout.kdl deleted file mode 100644 index 72566f6..0000000 --- a/config/niri/dms/layout.kdl +++ /dev/null @@ -1,22 +0,0 @@ -// ! DO NOT EDIT ! - // ! AUTO-GENERATED BY DMS ! - // ! CHANGES WILL BE OVERWRITTEN ! - // ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE ! - - layout { - gaps 10 - - border { - width 2 - } - - focus-ring { - width 2 - } - } - window-rule { - geometry-corner-radius 10 - clip-to-geometry true - tiled-state true - draw-border-with-background false - } diff --git a/config/niri/dms/outputs.kdl b/config/niri/dms/outputs.kdl deleted file mode 120000 index 21614dd..0000000 --- a/config/niri/dms/outputs.kdl +++ /dev/null @@ -1 +0,0 @@ -/home/unconfer/.config/niri/dms/profiles/profile_1776211496314_g03e3q.kdl \ No newline at end of file diff --git a/config/niri/dms/profiles/profile_1776211496314_g03e3q.kdl b/config/niri/dms/profiles/profile_1776211496314_g03e3q.kdl deleted file mode 100644 index 334b0ca..0000000 --- a/config/niri/dms/profiles/profile_1776211496314_g03e3q.kdl +++ /dev/null @@ -1,12 +0,0 @@ -// Auto-generated by DMS - do not edit manually - -output "DP-1" { - mode "1920x1080@165.000" - scale 1 - position x=0 y=0 - variable-refresh-rate on-demand=true - hot-corners { - top-left - } -} - diff --git a/config/niri/dms/wpblur.kdl b/config/niri/dms/wpblur.kdl deleted file mode 100644 index 3d58802..0000000 --- a/config/niri/dms/wpblur.kdl +++ /dev/null @@ -1,9 +0,0 @@ -// ! DO NOT EDIT ! -// ! AUTO-GENERATED BY DMS ! -// ! CHANGES WILL BE OVERWRITTEN ! -// ! PLACE YOUR CUSTOM CONFIGURATION ELSEWHERE ! - -layer-rule { - match namespace="dms:blurwallpaper" - place-within-backdrop true -} diff --git a/config/niri/layer-rule.kdl b/config/niri/layer-rule.kdl index 7bfeeec..597a41f 100644 --- a/config/niri/layer-rule.kdl +++ b/config/niri/layer-rule.kdl @@ -20,9 +20,29 @@ layer-rule { } // Put swaybg inside the overview backdrop. layer-rule { + match layer="backdground" + match at-startup=true + match namespace="^awww-daemon$" + + place-within-backdrop true +} + + +layer-rule { + match layer="backdground" + //match at-startup=true match namespace="^mpvpaper$" place-within-backdrop true } +layer-rule { + match layer="backdground" + match at-startup=true + match namespace="^wallpaper$" + + place-within-backdrop true +} + + diff --git a/config/niri/layout.kdl b/config/niri/layout.kdl index 2e8ad82..b7cd0be 100644 --- a/config/niri/layout.kdl +++ b/config/niri/layout.kdl @@ -10,12 +10,14 @@ layout{ } preset-window-heights { - proportion 0.5 - proportion 1.0 + proportion 0.33333 + proportion 0.5 + proportion 0.66666 } default-column-width { proportion 1.0; } + // By default focus ring and border are rendered as a solid background rectangle // behind windows. That is, they will show up through semitransparent windows. // This is because windows using client-side decorations can have an arbitrary shape. diff --git a/config/niri/scripts/ocr.sh b/config/niri/scripts/ocr.sh new file mode 100644 index 0000000..acc33b3 --- /dev/null +++ b/config/niri/scripts/ocr.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +# ocr-screenshot.sh — slurp + grim → zbar/tesseract → wl-clipboard + +set -euo pipefail + +TMPDIR=$(mktemp -d) +trap 'rm -rf "$TMPDIR"' EXIT + +IMG="$TMPDIR/shot.png" +PROC="$TMPDIR/proc.png" +TXT="$TMPDIR/out" + +GEOMETRY=$(slurp) || { + notify-send "OCR" "Отменено" + exit 0 +} +grim -g "$GEOMETRY" "$IMG" + +# 1. Сначала пробуем zbar (QR, штрихкоды) +QR_RESULT=$(zbarimg --quiet --raw "$IMG" 2>/dev/null || true) + +if [[ -n "$QR_RESULT" ]]; then + printf '%s' "$QR_RESULT" | wl-copy + xdg-open "${QR_RESULT:0:80}" + exit 0 +fi + +# 2. Если QR не найден — обычный OCR +#magick "$IMG" \ +# -colorspace Gray \ +# -resize 300% \ +# -unsharp 0x1 \ +# -threshold 50% \ +# "$PROC" + +magick "$IMG" \ + -colorspace Gray \ + -resize 300% \ + -unsharp 0x0.5+1+0 \ + -level 20%,80% \ + "$PROC" +tesseract "$PROC" "$TXT" \ + -l rus+eng \ + --oem 1 \ + --psm 4 \ + -c preserve_interword_spaces=1 \ + 2>/dev/null + +RESULT=$(cat "${TXT}.txt" | sed '/^$/d' | sed 's/[[:space:]]\+/ /g' | xargs) + +if [[ -z "$RESULT" ]]; then + notify-send "OCR" "Ничего не распознано" + exit 1 +fi + +printf '%s' "$RESULT" | wl-copy +notify-send "OCR — Текст" "Скопировано: ${RESULT:0:80}…" diff --git a/config/niri/spawn-at-startup.kdl b/config/niri/spawn-at-startup.kdl index 0d79cbf..fb180e3 100644 --- a/config/niri/spawn-at-startup.kdl +++ b/config/niri/spawn-at-startup.kdl @@ -4,11 +4,16 @@ spawn-sh-at-startup "foot --server" spawn-sh-at-startup "bash ~/.config/niri/caps" spawn-at-startup "mpDris2" spawn-at-startup "swayosd-server" -spawn-at-startup "hyprwave" +spawn-sh-at-startup "hyprwave && hyprwave-toggle visibility" spawn-at-startup "swaync" spawn-at-startup "clipse" "-listen" -spawn-sh-at-startup "swaybg -c 07090b" +//spawn-sh-at-startup "swaybg -c 07090b" +//spawn-at-startup "awww-daemon" +//spawn-sh-at-startup "bash ~/.config/ironbar/scripts/matugen.sh" spawn-sh-at-startup "walker --gapplication-service" spawn-at-startup "ironbar" +spawn-at-startup "rudo" +spawn-sh-at-startup "pywalfox start" +spawn-at-startup "stasis" diff --git a/config/niri/window-rule.kdl b/config/niri/window-rule.kdl index 489724b..ecbea94 100644 --- a/config/niri/window-rule.kdl +++ b/config/niri/window-rule.kdl @@ -95,7 +95,7 @@ window-rule { window-rule { // open-maximized false - geometry-corner-radius 10 + geometry-corner-radius 12 tiled-state true clip-to-geometry true open-maximized true diff --git a/config/nvim/colors/matugen.vim b/config/nvim/colors/matugen.vim new file mode 100644 index 0000000..933e6f7 --- /dev/null +++ b/config/nvim/colors/matugen.vim @@ -0,0 +1,20 @@ +hi Comment guibg=None guifg=#115b73 + +hi Delimiter guibg=None guifg=#0a83ac +hi Operator guibg=None guifg=#0a83ac + +hi Todo guibg=None guifg=#0697c8 + +hi Identifier guibg=None guifg=#02abe4 +hi Constant guibg=None guifg=#2f4043 +hi Type guibg=None guifg=#666353 +hi String guibg=None guifg=#212626 +hi Special guibg=None guifg=#1d1f1e +hi PreProc guibg=None guifg=#1d1f1e +hi Function guibg=None guifg=#1d1f1e +hi Statement guibg=None guifg=#1d1f1e + +hi Error guibg=#da342e guifg=#ffffff +hi StatusLine guibg=#8ccff0 guifg=#002431 +hi StatusLineNC guibg=#347c9a guifg=#ffffff +hi Selection guibg=#154757 diff --git a/config/nvim/init.lua b/config/nvim/init.lua index 2514f9e..ff67813 100644 --- a/config/nvim/init.lua +++ b/config/nvim/init.lua @@ -1,2 +1,11 @@ -- bootstrap lazy.nvim, LazyVim and your plugins require("config.lazy") +require("matugen").setup() + +--vim.api.nvim_create_autocmd("User", { +-- pattern = "VeryLazy", +-- once = true, +-- callback = function() +-- require("matugen").setup() +-- end, +--}) diff --git a/config/nvim/lazy-lock.json b/config/nvim/lazy-lock.json index 1d356be..089863a 100644 --- a/config/nvim/lazy-lock.json +++ b/config/nvim/lazy-lock.json @@ -1,44 +1,44 @@ { - "LazyVim": { "branch": "main", "commit": "fca0af57cc3851b14f96a795a9c9bfafc5096dd1" }, - "LuaSnip": { "branch": "master", "commit": "5a1e39223db9a0498024a77b8441169d260c8c25" }, - "base16-nvim": { "branch": "master", "commit": "4a6ef31745f851e11424a12b63fb3d2a80b2916c" }, - "blink.cmp": { "branch": "main", "commit": "451168851e8e2466bc97ee3e026c3dcb9141ce07" }, + "LazyVim": { "branch": "main", "commit": "83d90f339defdb109a6ede333865a66ffc7ef6aa" }, + "LuaSnip": { "branch": "master", "commit": "642b0c595e11608b4c18219e93b88d7637af27bc" }, + "base16-nvim": { "branch": "master", "commit": "17781884af64e4205f84dde41d6030a61d0eb0dc" }, + "blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" }, "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, - "catppuccin": { "branch": "main", "commit": "384f304c8b04664c9e0091fbfb3923c5f97c1bcf" }, + "catppuccin": { "branch": "main", "commit": "426dbebe06b5c69fd846ceb17b42e12f890aedf1" }, "conform.nvim": { "branch": "master", "commit": "086a40dc7ed8242c03be9f47fbcee68699cc2395" }, "flash.nvim": { "branch": "main", "commit": "fcea7ff883235d9024dc41e638f164a450c14ca2" }, "friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" }, - "gitsigns.nvim": { "branch": "main", "commit": "7c4faa3540d0781a28588cafbd4dd187a28ac6e3" }, - "grug-far.nvim": { "branch": "main", "commit": "dc4684e163971bb1f5bfb93fbd4bb3e892bf9b15" }, + "gitsigns.nvim": { "branch": "main", "commit": "6d808f99bd63303646794406e270bd553ad7792e" }, + "grug-far.nvim": { "branch": "main", "commit": "21604255d0e8f9968322f61f2b6c09e5efe1285a" }, "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" }, "lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" }, - "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, - "markview.nvim": { "branch": "main", "commit": "918f3f92e87d28a487af89912d774521a52f9888" }, + "lualine.nvim": { "branch": "master", "commit": "a905eeebc4e63fdc48b5135d3bf8aea5618fb21c" }, + "markview.nvim": { "branch": "main", "commit": "e27dee8b2a61f89ac3a06deae0264ad1d3f7b62c" }, "marp-nvim": { "branch": "main", "commit": "4f38e6ffe2f5ea260f35f7ff3e4e424b9f8bea29" }, - "mason-lspconfig.nvim": { "branch": "main", "commit": "a676ab7282da8d651e175118bcf54483ca11e46d" }, - "mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" }, - "mini.ai": { "branch": "main", "commit": "4b0a6207341d895b6cfe9bcb1e4d3e8607bfe4f4" }, - "mini.hipatterns": { "branch": "main", "commit": "2c5dce6dc7443de814d16f7470549811ee86e664" }, - "mini.icons": { "branch": "main", "commit": "5b9076dae1bfbe47ba4a14bc8b967cde0ab5d77e" }, - "mini.nvim": { "branch": "main", "commit": "9990c41f10f54f29a888d13024c9f765037bde23" }, - "mini.pairs": { "branch": "main", "commit": "b7fde3719340946feb75017ef9d75edebdeb0566" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "0a3b42c3e503df87aef6d6513e13148381495c3a" }, + "mason.nvim": { "branch": "main", "commit": "12ddd182d9efbdc848b540f16484a583d52da0fb" }, + "mini.ai": { "branch": "main", "commit": "43eb2074843950a3a25aae56a5f41362ec043bfa" }, + "mini.hipatterns": { "branch": "main", "commit": "9eff319bbe66adfaf781a0d0e174baa08ba94909" }, + "mini.icons": { "branch": "main", "commit": "bac6317300e205335df425296570d84322730067" }, + "mini.pairs": { "branch": "main", "commit": "42387c7fe68fc0b6e95eaf37f1bb76e7bffaa0d9" }, "noice.nvim": { "branch": "main", "commit": "7bfd942445fb63089b59f97ca487d605e715f155" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" }, - "nvim-lint": { "branch": "master", "commit": "606b823a57b027502a9ae00978ebf4f5d5158098" }, - "nvim-lspconfig": { "branch": "master", "commit": "dd261ad5266ab5bbec249d21efeceda98ff3e1a6" }, + "nvim-lint": { "branch": "master", "commit": "eab58b48eb11d7745c11c505e0f3057165902461" }, + "nvim-lspconfig": { "branch": "master", "commit": "e146efacbafed3789ac568abcc5a981c5decaa58" }, "nvim-parinfer": { "branch": "master", "commit": "3968e669d9f02589aa311d33cb475b16b27c5fbb" }, - "nvim-snippy": { "branch": "master", "commit": "7e500286eb880032391107f6d0ee28211ba3eb3c" }, - "nvim-treesitter": { "branch": "main", "commit": "ebc3201290b8372df2b3a1c23b71b9f007d972ff" }, - "nvim-treesitter-textobjects": { "branch": "main", "commit": "4e91b5d0394329a229725b021a8ea217099826ef" }, - "nvim-ts-autotag": { "branch": "main", "commit": "8e1c0a389f20bf7f5b0dd0e00306c1247bda2595" }, + "nvim-snippy": { "branch": "master", "commit": "f8b34f206a14eb00b5723dbc15e9a5911f1210ab" }, + "nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" }, + "nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" }, + "nvim-ts-autotag": { "branch": "main", "commit": "88c1453db4ba7dd24131086fe51fdf74e587d275" }, "persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" }, - "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, - "render-markdown.nvim": { "branch": "main", "commit": "e3c18ddd27a853f85a6f513a864cf4f2982b9f26" }, - "snacks.nvim": { "branch": "main", "commit": "a049339328e2599ad6e85a69fa034ac501e921b2" }, + "plenary.nvim": { "branch": "master", "commit": "74b06c6c75e4eeb3108ec01852001636d85a932b" }, + "snacks.nvim": { "branch": "main", "commit": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e" }, + "themery.nvim": { "branch": "main", "commit": "bfa58f4b279d21cb515b28023e1b68ec908584b2" }, "todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" }, - "tokyonight.nvim": { "branch": "main", "commit": "5da1b76e64daf4c5d410f06bcb6b9cb640da7dfd" }, + "tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" }, "trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" }, "ts-comments.nvim": { "branch": "main", "commit": "123a9fb12e7229342f807ec9e6de478b1102b041" }, "which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }, - "xkbswitch.nvim": { "branch": "master", "commit": "aae56d49db9baf0d9b9675a77da35173d8d87a30" } + "xkbswitch.nvim": { "branch": "master", "commit": "aae56d49db9baf0d9b9675a77da35173d8d87a30" }, + "zk": { "branch": "main", "commit": "dea1ee6cd6d07568c92ea8353063d4d85c58a964" } } diff --git a/config/nvim/lua/matugen.lua b/config/nvim/lua/matugen.lua new file mode 100644 index 0000000..40db7bc --- /dev/null +++ b/config/nvim/lua/matugen.lua @@ -0,0 +1,37 @@ +local M = {} + +function M.setup() + require("base16-colorscheme").setup({ + -- Background tones + base00 = "#18130b", -- Default Background + base01 = "#2a241c", -- Lighter Background (status bars) + base02 = "#352e26", -- Selection Background + base03 = "#aa9e8e", -- Comments, Invisibles + -- Foreground tones + base04 = "#d2c4b4", -- Dark Foreground (status bars) + base05 = "#fff3e6", -- Default Foreground + base06 = "#fff3e6", -- Light Foreground + base07 = "#ede1d4", -- Lightest Foreground + -- Accent colors + base08 = "#ffb4ab", -- Variables, XML Tags, Errors + base09 = "#b6cea3", -- Integers, Constants + base0A = "#dcc3a1", -- Classes, Search Background + base0B = "#f2be6e", -- Strings, Diff Inserted + base0C = "#b6cea3", -- Regex, Escape Chars + base0D = "#f2be6e", -- Functions, Methods + base0E = "#dcc3a1", -- Keywords, Storage + base0F = "#da342e", -- Deprecated, Embedded Tags + }) +end + +-- Register a signal handler for SIGUSR1 (matugen updates) +local signal = vim.uv.new_signal() +signal:start( + "sigusr1", + vim.schedule_wrap(function() + package.loaded["matugen"] = nil + require("matugen").setup() + end) +) + +return M diff --git a/config/nvim/lua/plugins/base16-nvim.lua b/config/nvim/lua/plugins/base16-nvim.lua new file mode 100644 index 0000000..8c207b8 --- /dev/null +++ b/config/nvim/lua/plugins/base16-nvim.lua @@ -0,0 +1,8 @@ +return { + "RRethy/base16-nvim", + config = function() + require("matugen").setup() + end, + lazy = false, + priority = 1000, -- загружать раньше других +} diff --git a/config/nvim/lua/plugins/render-markdown.lua b/config/nvim/lua/plugins/render-markdown.lua.bak similarity index 100% rename from config/nvim/lua/plugins/render-markdown.lua rename to config/nvim/lua/plugins/render-markdown.lua.bak diff --git a/config/nvim/lua/plugins/themery.lua b/config/nvim/lua/plugins/themery.lua new file mode 100644 index 0000000..f6aca49 --- /dev/null +++ b/config/nvim/lua/plugins/themery.lua @@ -0,0 +1,9 @@ +return { + "zaldih/themery.nvim", + lazy = false, + config = function() + require("themery").setup({ + -- add the config here + }) + end + } diff --git a/config/nvim/lua/plugins/zk-nvim.lua b/config/nvim/lua/plugins/zk-nvim.lua new file mode 100644 index 0000000..c52e05e --- /dev/null +++ b/config/nvim/lua/plugins/zk-nvim.lua @@ -0,0 +1,7 @@ +return { + "zk-org/zk-nvim", + name = "zk", + opts = { + -- See Setup section below + }, +} diff --git a/config/rmpc/themes/matugen.ron b/config/rmpc/themes/matugen.ron new file mode 100644 index 0000000..3dfbc6a --- /dev/null +++ b/config/rmpc/themes/matugen.ron @@ -0,0 +1,207 @@ +#![enable(implicit_some)] +#![enable(unwrap_newtypes)] +#![enable(unwrap_variant_newtypes)] +( + default_album_art_path: None, + show_song_table_header: true, + draw_borders: true, + format_tag_separator: " | ", + browser_column_widths: [20, 38, 42], + background_color: None, + text_color: Some("#dcc3a1"), + header_background_color: None, + modal_background_color: None, + modal_backdrop: false, + preview_label_style: (fg: "#f2be6e"), + preview_metadata_group_style: (fg: "#b6cea3", modifiers: "Bold"), + tab_bar: ( + active_style: (fg: "#2c1e08", bg: "#dcc3a1", modifiers: "Bold"), + inactive_style: (fg: "#dcc3a1", modifiers: "Bold"), + ), + highlighted_item_style: (fg: "#dcc3a1", modifiers: "Bold"), + current_item_style: (fg: "#dcc3a1", bg: "#6f4a00", modifiers: "Bold"), + borders_style: (fg: "#dcc3a1"), + highlight_border_style: (fg: "#dcc3a1"), + symbols: ( + song: "S", + dir: "D", + playlist: "P", + marker: "M", + ellipsis: "...", + song_style: None, + dir_style: None, + playlist_style: None, + ), + level_styles: ( + info: (fg: "blue", bg: "black"), + warn: (fg: "yellow", bg: "black"), + error: (fg: "red", bg: "black"), + debug: (fg: "light_green", bg: "black"), + trace: (fg: "magenta", bg: "black"), + ), + progress_bar: ( + symbols: ["[", "-", ">", " ", "]"], + track_style: ( + fg: "#2c1e08", + ), + elapsed_style: ( + fg: "#dcc3a1", + ), + thumb_style: ( + fg: "#dcc3a1", + ), + use_track_when_empty: false, + ), + scrollbar: ( + symbols: ["│", "█", "▲", "▼"], + track_style: (fg: "#dcc3a1"), + ends_style: (fg: "#f9debb"), + thumb_style: (fg: "#f2be6e"), + ), + song_table_format: [ + ( + prop: ( + kind: Property(Artist), + style: (fg: "#ffddb0"), + default: (kind: Text("Unknown"), style: (fg: "#ffddb0")) + ), + width: "20%", + ), + ( + prop: ( + kind: Property(Title), + style: (fg: "#f2be6e"), + default: (kind: Text("Unknown"), style: (fg: "#ffddb0")) + ), + width: "35%", + ), + ( + prop: (kind: Property(Album), style: (fg: "#ffddb0"), + default: (kind: Text("Unknown Album"), style: (fg: "#ffddb0")) + ), + width: "30%", + ), + ( + prop: (kind: Property(Duration), style: (fg: "#f2be6e"), + default: (kind: Text("-"), style: (fg: "#ffddb0")) + ), + width: "15%", + alignment: Right, + ), + ], + components: {}, + layout: Split( + direction: Vertical, + panes: [ + ( + pane: Pane(Header), + size: "2", + ), + ( + pane: Pane(Tabs), + size: "3", + ), + ( + pane: Pane(TabContent), + size: "100%", + ), + ( + pane: Pane(ProgressBar), + size: "1", + ), + ], + ), + header: ( + rows: [ + ( + left: [ + (kind: Text("["), style: (fg: "#b6cea3", modifiers: "Bold")), + ( + kind: Property(Status(StateV2(playing_label: "Playing", paused_label: "Paused", stopped_label: "Stopped"))), + style: (fg: "#b6cea3", modifiers: "Bold") + ), + (kind: Text("]"), style: (fg: "#b6cea3", modifiers: "Bold")) + ], + center: [ + (kind: Property(Song(Title)), style: (modifiers: "Bold"), + default: (kind: Text("No Song"), style: (modifiers: "Bold")) + ) + ], + right: [ + (kind: Property(Widget(ScanStatus)), style: (fg: "#f2be6e")), + (kind: Property(Widget(Volume)), style: (fg: "#f2be6e")) + ] + ), + ( + left: [ + (kind: Property(Status(Elapsed))), + (kind: Text(" / ")), + (kind: Property(Status(Duration))), + (kind: Text(" (")), + (kind: Property(Status(Bitrate))), + (kind: Text(" kbps)")) + ], + center: [ + (kind: Property(Song(Artist)), style: (fg: "#b6cea3", modifiers: "Bold"), + default: (kind: Text("Unknown"), style: (fg: "#b6cea3", modifiers: "Bold")) + ), + (kind: Text(" - ")), + (kind: Property(Song(Album)), + style: (fg: "#f2be6e"), + default: (kind: Text("Unknown Album")) + ) + ], + right: [ + ( + kind: Property(Widget(States( + active_style: (fg: "#f2be6e", modifiers: "Bold"), + separator_style: (fg: "#f2be6e"))) + ), + style: (fg: "#dcc3a1") + ), + ] + ), + ], + ), + browser_song_format: [ + ( + kind: Group([ + (kind: Property(Track), style: (fg: "#f2be6e")), + (kind: Text(" ")), + ]) + ), + ( + kind: Group([ + (kind: Property(Artist), style: (fg: "#f2be6e")), + (kind: Text(" - ")), + (kind: Property(Title), style: (fg: "#f2be6e")), + ]), + default: (kind: Property(Filename), style: (fg: "#f2be6e")) + ), + ], + lyrics: ( + timestamp: false + ), + cava: ( + + bar_width: 2, // width of a single bar in columns + bar_spacing: 1, // free space between bars in columns + + orientation: Bottom, + + // A simple color gradient. + // This is a map where keys are percent values of the height where the + // color starts. After that it is linearly interpolated towards the next + // value. Keys must be between 0 and 100 and if the first or last key + // are not 0 and 100 respectively, the lowest and highest value will be + // used as 0 and 100. + // Only hex and RGB colors are supported here and your terminal must + // support them as well! + // rmpc does not support `horizontal_gradient` (yet?) + bar_color: Gradient({ + 0: "#976c25", + 50: "#f2be6e", + 100: "#ffffff" + }) + ), +) diff --git a/config/rudo/all-style.css b/config/rudo/all-style.css new file mode 100644 index 0000000..a5c928e --- /dev/null +++ b/config/rudo/all-style.css @@ -0,0 +1,467 @@ +/* Rudo Example Themes - Comprehensive CSS Reference + * ================================================= + * + * Copy sections you want to use into ~/.config/rudo/style.css + * All values shown are examples - customize colors, sizes, and effects to taste. + */ + +/* ============================================================ + * THEME 1: Glassmorphism (Modern translucent) + * ============================================================ */ + +.dock-surface { + padding: 10px 14px; + border-radius: 24px; + border: 1px solid rgba(255, 255, 255, 0.18); + background: rgba(255, 255, 255, 0.08); + backdrop-filter: blur(20px); + box-shadow: + 0 8px 32px rgba(0, 0, 0, 0.37), + inset 0 1px 0 rgba(255, 255, 255, 0.2); +} + +.dock-item, +.picker-button { + min-width: 48px; + min-height: 48px; + border-radius: 14px; + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.05); + transition: all 0.2s ease; +} + +.dock-item:hover, +.picker-button:hover { + background: rgba(255, 255, 255, 0.15); + border-color: rgba(255, 255, 255, 0.25); + transform: scale(1.05); +} + +.dock-item.is-active { + background: rgba(120, 180, 255, 0.25); + border-color: rgba(120, 180, 255, 0.5); + box-shadow: 0 0 15px rgba(120, 180, 255, 0.3); +} + +.dock-indicator { + min-width: 6px; + min-height: 6px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.4); +} + +.dock-indicator.is-active { + min-width: 20px; + background: linear-gradient(90deg, #7ec8e3, #a8d5e5); +} + +/* ============================================================ + * THEME 2: Minimal Dark (Clean & understated) + * ============================================================ */ + +/* +.dock-surface { + padding: 6px 10px; + border-radius: 12px; + border: none; + background: rgba(20, 20, 25, 0.85); + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4); +} + +.dock-item, +.picker-button { + min-width: 40px; + min-height: 40px; + border-radius: 8px; + border: none; + background: transparent; +} + +.dock-item:hover, +.picker-button:hover { + background: rgba(255, 255, 255, 0.06); +} + +.dock-item.is-active { + background: rgba(255, 255, 255, 0.1); +} + +.dock-indicator { + min-width: 4px; + min-height: 4px; + background: #888; +} + +.dock-indicator.is-active { + min-width: 16px; + background: #fff; +} + +.dock-separator { + margin: 0 6px; + background: rgba(255, 255, 255, 0.1); +} +*/ + +/* ============================================================ + * THEME 3: Neon Cyberpunk (Vibrant & colorful) + * ============================================================ */ + +/* +.dock-surface { + padding: 12px 16px; + border-radius: 20px; + border: 1px solid rgba(0, 255, 255, 0.3); + background: rgba(10, 10, 20, 0.95); + box-shadow: + 0 0 30px rgba(0, 255, 255, 0.2), + inset 0 1px 0 rgba(255, 255, 255, 0.1); +} + +.dock-item, +.picker-button { + min-width: 50px; + min-height: 50px; + border-radius: 16px; + border: 1px solid rgba(255, 0, 255, 0.2); + background: rgba(255, 0, 255, 0.05); +} + +.dock-item:hover, +.picker-button:hover { + border-color: rgba(255, 0, 255, 0.5); + background: rgba(255, 0, 255, 0.15); + box-shadow: 0 0 20px rgba(255, 0, 255, 0.3); +} + +.dock-item.is-active { + border-color: rgba(0, 255, 255, 0.6); + background: rgba(0, 255, 255, 0.15); + box-shadow: 0 0 25px rgba(0, 255, 255, 0.4); +} + +.dock-item.is-running { + border-color: rgba(255, 165, 0, 0.3); +} + +.dock-indicator { + background: #ff00ff; + box-shadow: 0 0 10px #ff00ff; +} + +.dock-indicator.is-active { + background: #00ffff; + box-shadow: 0 0 15px #00ffff; +} + +.launch-spinner { + color: #ff00ff; +} +*/ + +/* ============================================================ + * THEME 4: macOS-style (Familiar & polished) + * ============================================================ */ + +/* +.dock-surface { + padding: 8px 12px; + border-radius: 18px; + border: 1px solid rgba(255, 255, 255, 0.15); + background: rgba(30, 30, 35, 0.75); + backdrop-filter: blur(25px) saturate(180%); + box-shadow: + 0 10px 40px rgba(0, 0, 0, 0.4), + 0 1px 0 rgba(255, 255, 255, 0.1) inset; +} + +.dock-item, +.picker-button { + min-width: 46px; + min-height: 46px; + border-radius: 12px; + border: none; + background: transparent; + transition: transform 0.15s ease; +} + +.dock-item:hover, +.picker-button:hover { + background: rgba(255, 255, 255, 0.08); + transform: translateY(-3px); +} + +.dock-item.is-active { + background: rgba(255, 255, 255, 0.12); +} + +.dock-item.is-running { + border-color: rgba(255, 165, 0, 0.3); +} + +.dock-indicator { + min-width: 4px; + min-height: 4px; + background: rgba(255, 255, 255, 0.6); +} + +.dock-indicator.is-active { + min-width: 18px; + background: linear-gradient(90deg, #60a5fa, #3b82f6); +} +*/ + +/* ============================================================ + * THEME 5: High Contrast (Accessibility focused) + * ============================================================ */ + +/* +.dock-surface { + padding: 10px 14px; + border-radius: 8px; + border: 2px solid #000; + background: #fff; + box-shadow: 0 4px 0 #000; +} + +.dock-item, +.picker-button { + min-width: 48px; + min-height: 48px; + border-radius: 6px; + border: 2px solid #000; + background: #fff; +} + +.dock-item:hover, +.picker-button:hover { + background: #000; + color: #fff; +} + +.dock-item.is-active { + background: #0066cc; + border-color: #000; +} + +.dock-indicator { + min-width: 8px; + min-height: 8px; + background: #000; +} + +.dock-indicator.is-active { + min-width: 24px; + background: #0066cc; +} + +.dock-hover-strip { + background: #000; + border-radius: 4px; +} +*/ + +/* ============================================================ + * PICKER POPUP STYLING (applies to all themes) + * ============================================================ */ + +.picker { + padding: 16px; + background: rgba(30, 30, 35, 0.98); + border-radius: 16px; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.picker-row { + padding: 12px 16px; + border-radius: 12px; + border: 1px solid transparent; + background: rgba(255, 255, 255, 0.03); + transition: all 0.15s ease; +} + +.picker-row:hover { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.15); +} + +.picker-row-title { + font-weight: 600; + font-size: 14px; +} + +.picker-row-subtitle { + font-size: 12px; + opacity: 0.5; +} + +.picker-empty { + padding: 40px; + font-size: 14px; + opacity: 0.5; +} + +/* ============================================================ + * CONTEXT MENU STYLING + * ============================================================ */ + +.item-menu { + padding: 12px; + background: rgba(30, 30, 35, 0.98); + border-radius: 12px; + border: 1px solid rgba(255, 255, 255, 0.1); + min-width: 200px; +} + +.item-menu-title { + font-weight: 700; + font-size: 15px; + padding: 4px 8px; +} + +.item-menu-subtitle { + font-size: 12px; + opacity: 0.5; + padding: 0 8px 8px; +} + +.item-menu-section { + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + opacity: 0.4; + padding: 8px; +} + +.item-menu button { + padding: 8px 12px; + border-radius: 8px; + border: none; + background: rgba(255, 255, 255, 0.05); + margin: 2px 0; +} + +.item-menu button:hover { + background: rgba(255, 255, 255, 0.1); +} + +.item-menu button.is-active { + background: rgba(120, 180, 255, 0.2); +} + +/* ============================================================ + * ADVANCED: Animations & Transitions + * ============================================================ */ + +/* Smooth reveal animation */ +.dock-surface { + animation: dock-appear 0.3s ease-out; +} + +@keyframes dock-appear { + from { + opacity: 0; + transform: translateY(20px) scale(0.95); + } + + to { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +/* Bounce effect on launch */ +.dock-item.is-launching { + animation: launching-pulse 1s ease-in-out infinite; +} + +@keyframes launching-pulse { + + 0%, + 100% { + transform: scale(1); + } + + 50% { + transform: scale(0.95); + } +} + +/* Glow effect for active items */ +.dock-item.is-active { + background: rgba(120, 180, 255, 0.25); +} + +/* ============================================================ + * UTILITY: Hide elements + * ============================================================ */ + +/* Hide the pin button completely (alternative to settings.json) */ +/* +.picker-button { + display: none; +} +*/ + +/* Hide separators */ +/* +.dock-separator { + display: none; +} +*/ + +/* Hide hover strip (if autohide is on but you want invisible trigger) */ +/* +.dock-hover-strip { + background: transparent; +} +*/ + +/* ============================================================ + * INDIVIDUAL ELEMENT REFERENCE + * ============================================================ + +Available CSS Classes: +---------------------- +- .rudo-window - Main window container +- .dock-surface - The dock bar itself +- .dock-item - App icons/buttons +- .picker-button - "Pin an application" button +- .dock-indicator - Dot below icons +- .dock-separator - Line between pinned/running +- .dock-hover-strip - Hover area for autohide +- .is-active - Modifier: active window +- .is-running - Modifier: has open windows +- .is-launching - Modifier: app is launching +- .is-drop-target - Modifier: drag hover state +- .launch-spinner - Loading spinner +- .picker - App picker popup container +- .picker-row - Picker list items +- .picker-row-title - App name in picker +- .picker-row-subtitle - App ID in picker +- .picker-empty - No results message +- .item-menu - Right-click context menu +- .item-menu-title - App name in menu +- .item-menu-subtitle - App ID in menu +- .item-menu-section - "Windows" header in menu + +Tips: +----- +1. Use browser DevTools (GTK Inspector) to debug live: + GTK_DEBUG=interactive rudo + +2. Changes to style.css are detected every 700ms and reload automatically + +3. Combine multiple themes by uncommenting sections or mixing properties + +4. RGBA format for transparency: rgba(R, G, B, 0.0-1.0) + Example: rgba(255, 100, 50, 0.8) = orange at 80% opacity + +5. Common effects: + - backdrop-filter: blur(20px) // Glass effect (requires compositor) + - box-shadow: 0 4px 20px rgba(0,0,0,0.3) // Soft shadow + - transition: all 0.2s ease // Smooth animations + - transform: scale(1.1) // Grow effect + +*/ diff --git a/config/rudo/pins.json b/config/rudo/pins.json new file mode 100644 index 0000000..72fcfb7 --- /dev/null +++ b/config/rudo/pins.json @@ -0,0 +1,3 @@ +{ + "pins": [] +} \ No newline at end of file diff --git a/config/rudo/settings.json b/config/rudo/settings.json new file mode 100644 index 0000000..8310875 --- /dev/null +++ b/config/rudo/settings.json @@ -0,0 +1,41 @@ +{ + "autohide": { + "enabled": true, + "delay_secs": 2 + }, + "show_pin_button": false, + "icon_size": 24, + "position": "bottom", + "animation_duration_ms": 200, + "menu": { + "enabled": false, + "icon": "system-lock-screen-symbolic", + "position": "end", + "items": [ + { + "label": "Lock", + "icon": "system-lock-screen-symbolic", + "command": "swaylock -f", + "confirm": false + }, + { + "label": "Logout", + "icon": "system-log-out-symbolic", + "command": "loginctl terminate-user $USER", + "confirm": true + }, + { + "label": "Restart", + "icon": "system-restart-symbolic", + "command": "systemctl reboot", + "confirm": true + }, + { + "label": "Shutdown", + "icon": "system-shutdown-symbolic", + "command": "systemctl poweroff", + "confirm": true + } + ] + } +} diff --git a/config/rudo/style.css b/config/rudo/style.css new file mode 100644 index 0000000..6cb5d3d --- /dev/null +++ b/config/rudo/style.css @@ -0,0 +1,257 @@ +.dock-surface { + padding: 10px 14px; + border-radius: 12px; + border: none; + background: #07090b; + /*backdrop-filter: blur(20px);*/ + /*box-shadow: + 0 8px 32px rgba(0, 0, 0, 0.37), + inset 0 1px 0 rgba(255, 255, 255, 0.2); + */ +} + +.dock-item, +.picker-button { + min-width: 48px; + min-height: 48px; + border-radius: 14px; + border: 0px solid rgba(255, 255, 255, 1); + background: #343849; + transition: all 0.2s ease; +} + +.dock-item:hover, +.picker-button:hover { + background: #1f2830; + border-color: rgba(255, 255, 255, 0.25); + transform: scale(1.05); + border-radius: 14px; + +} + +.dock-item.is-active { + background: #00fed4; + border-color: #00fed4; + /*box-shadow: 0 0 15px rgba(120, 180, 255, 0.3); + */ +} + +.dock-indicator { + min-width: 6px; + min-height: 6px; + border-radius: 999px; + background: #1f2830; +} + +.dock-indicator.is-active { + min-width: 20px; + background: #00fed4; + /*linear-gradient(90deg, #7ec8e3, #a8d5e5);*/ +} + + +/* ============================================================ + * PICKER POPUP STYLING (applies to all themes) + * ============================================================ */ + +.picker { + padding: 16px; + background: rgba(30, 30, 35, 0.9); + border-radius: 16px; + border: 0px solid rgba(255, 255, 255, 0.1); +} + +.picker-row { + padding: 12px 16px; + border-radius: 12px; + border: 1px solid transparent; + background: rgba(255, 255, 255, 0.03); + transition: all 0.15s ease; +} + +.picker-row:hover { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(255, 255, 255, 0.15); +} + +.picker-row-title { + font-weight: 600; + font-size: 14px; +} + +.picker-row-subtitle { + font-size: 12px; + opacity: 0.5; +} + +.picker-empty { + padding: 40px; + font-size: 14px; + opacity: 0.5; +} + +/* ============================================================ + * CONTEXT MENU STYLING + * ============================================================ */ + +.item-menu { + padding: 12px; + background: #1f2830; + border-radius: 12px; + border: 1px solid rgba(255, 255, 255, 0.1); + min-width: 200px; +} + +.item-menu-title { + font-weight: 700; + font-size: 15px; + padding: 4px 8px; +} + +.item-menu-subtitle { + font-size: 12px; + opacity: 0.5; + padding: 0 8px 8px; +} + +.item-menu-section { + font-size: 11px; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.5px; + opacity: 0.4; + padding: 8px; +} + +.item-menu button { + padding: 8px 12px; + border-radius: 8px; + border: none; + background: rgba(255, 255, 255, 0.05); + margin: 2px 0; +} + +.item-menu button:hover { + background: rgba(255, 255, 255, 0.1); +} + +.item-menu button.is-active { + background: rgba(120, 180, 255, 0.2); +} + +/* ============================================================ + * ADVANCED: Animations & Transitions + * ============================================================ */ + +/* Smooth reveal animation */ +.dock-surface { + animation: dock-appear 0.2s spring; +} + +@keyframes dock-appear { + from { + opacity: 0; + transform: translateY(20px) scale(0.95); + } + + to { + opacity: 1; + transform: translateY(0) scale(1); + } +} + +/* Bounce effect on launch */ +.dock-item.is-launching { + animation: launching-pulse 1s ease-in-out infinite; +} + +@keyframes launching-pulse { + + 0%, + 100% { + transform: scale(1); + } + + 50% { + transform: scale(0.95); + } +} + +/* Glow effect for active items */ +.dock-item.is-active { + background: #1f2830; +} + + +/* ============================================================ + * UTILITY: Hide elements + * ============================================================ */ + +/* Hide the pin button completely (alternative to settings.json) */ +/* +.picker-button { + display: none; +} +*/ + +/* Hide separators */ +/* +.dock-separator { + display: none; +} +*/ + +/* Hide hover strip (if autohide is on but you want invisible trigger) */ +/* +.dock-hover-strip { + background: transparent; +} +*/ + +/* ============================================================ + * INDIVIDUAL ELEMENT REFERENCE + * ============================================================ + +Available CSS Classes: +---------------------- +- .rudo-window - Main window container +- .dock-surface - The dock bar itself +- .dock-item - App icons/buttons +- .picker-button - "Pin an application" button +- .dock-indicator - Dot below icons +- .dock-separator - Line between pinned/running +- .dock-hover-strip - Hover area for autohide +- .is-active - Modifier: active window +- .is-running - Modifier: has open windows +- .is-launching - Modifier: app is launching +- .is-drop-target - Modifier: drag hover state +- .launch-spinner - Loading spinner +- .picker - App picker popup container +- .picker-row - Picker list items +- .picker-row-title - App name in picker +- .picker-row-subtitle - App ID in picker +- .picker-empty - No results message +- .item-menu - Right-click context menu +- .item-menu-title - App name in menu +- .item-menu-subtitle - App ID in menu +- .item-menu-section - "Windows" header in menu + +Tips: +----- +1. Use browser DevTools (GTK Inspector) to debug live: + GTK_DEBUG=interactive rudo + +2. Changes to style.css are detected every 700ms and reload automatically + +3. Combine multiple themes by uncommenting sections or mixing properties + +4. RGBA format for transparency: rgba(R, G, B, 0.0-1.0) + Example: rgba(255, 100, 50, 0.8) = orange at 80% opacity + +5. Common effects: + - backdrop-filter: blur(20px) // Glass effect (requires compositor) + - box-shadow: 0 4px 20px rgba(0,0,0,0.3) // Soft shadow + - transition: all 0.2s ease // Smooth animations + - transform: scale(1.1) // Grow effect + +*/ diff --git a/config/scripts/niri/ru.png b/config/scripts/niri/ru.png new file mode 100644 index 0000000000000000000000000000000000000000..680d9c31370a1c9cadbbb02cd6277d808220b189 GIT binary patch literal 174178 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‰MX=Y8B2`amjKoS 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�N>1Z7;*2@i<-0@3>nsecJW2- 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≦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 literal 0 HcmV?d00001 diff --git a/config/starship.toml b/config/starship.toml index b87117d..67041d0 100644 --- a/config/starship.toml +++ b/config/starship.toml @@ -1,15 +1,25 @@ -"$schema" = 'https://starship.rs/config-schema.json' +format = ''' +$directory$git_branch$rust$python +$character''' -# Inserts a blank line between shell prompts -add_newline = false +palette = 'colors' -scan_timeout = 120 +[palettes.colors] +color1 = '#f2be6e' +color2 = '#2f1d00' +color3 = '#d2c4b4' +color4 = '#2a241c' +color5 = '#2f1d00' +color6 = '#18130b' +color7 = '#18130b' +color8 = '#f2be6e' +color9 = '#b6cea3' -# Replace the '❯' symbol in the prompt with '➜' -[character] # The name of the module we are configuring is 'character' +# Prompt symbols +[character] success_symbol = '[❯](bold green)' # The 'success_symbol' segment is being set to '➜' with the color 'bold green' +error_symbol = "[](@{error})" -# Disable the package module, hiding it from the prompt completely [aws] symbol = " " diff --git a/config/stasis/stasis.rune b/config/stasis/stasis.rune new file mode 100644 index 0000000..00d850b --- /dev/null +++ b/config/stasis/stasis.rune @@ -0,0 +1,68 @@ +# This file was auto-generated by Stasis on first run +# Feel free to customize it to your needs +# Master config reference: `/usr/share/doc/stasis/stasis.rune` + +@author "Dustin Pilgrim" +@description "Lightweight feature packed idle manager for Wayland" + +default: + # Optional: listen for loginctl lock/unlock-session signals (default false) + # NOTE: this only updates internal state when lock/unlock signals are received; + # it does not actually run your locker command. + #enable_loginctl true + + # Optional: listen for session D-Bus inhibit traffic (default true). + # This gate is not browser-only: browsers, Steam, and other desktop apps can + # request inhibit through standard D-Bus/portal paths. + # Browser/media-tab inhibit lives here, not under monitor_media. + # Disable this only if you explicitly do not want D-Bus inhibit requests + # to pause idle progression. + #enable_dbus_inhibit false + + # Optional: run before suspending (e.g., ensure lock is up) + #pre_suspend_command "swaylock" + + # Non-browser media/audio inhibit only. Browser/media-tab inhibit is handled + # by enable_dbus_inhibit above. + monitor_media true + ignore_remote_media true # ignore remote players (spotify/kdeconnect/etc.) + + # Optional: ignore these media sources for media inhibit (case-insensitive) + #media_blacklist ["spotify"] + + # Debounce window in seconds before starting the plan (default 0) + #debounce_seconds 4 + + # Notify when resuming from IPC pause (e.g., `stasis pause 1h`) + #notify_on_unpause true + + # Global gate: notifications before steps only happen if this is true + #notify_before_action true + + # App/process inhibit patterns (strings or regex literals) + inhibit_apps [ + "vlc" + "mpv" + r"steam_app_.*" + ] + + lock_screen: + timeout 600 # 5 minute(s) + command "hyprlock" + + # Optional per-step notification: + #notification "Locking in 10s" + #notify_seconds_before 10 + end + + dpms: + timeout 60 # 1 minute(s) after lock + command "niri msg action power-off-monitors" + resume_command "niri msg action power-on-monitors" + end + + suspend: + timeout 1800 # 30 minute(s) after dpms + command "systemctl suspend" + end +end diff --git a/config/swaync/colors.css b/config/swaync/colors.css new file mode 100644 index 0000000..865173d --- /dev/null +++ b/config/swaync/colors.css @@ -0,0 +1,29 @@ +:root { + --cc-bg: #18130b; + --noti-border-color: #f2be6e; + --noti-bg: #18130b; + --noti-bg-alpha: ; + --noti-bg-darker: #18130b; + --noti-bg-hover: #261904; + --noti-bg-focus: 976c25; + --noti-close-bg: #976c25 + --noti-close-bg-hover: #6f4a00; + --text-color: #fff3e6; + --text-color-disabled: rgb(150, 150, 150); + --bg-selected: #976c25; + --notification-icon-size: 64px; + --notification-app-icon-size: calc(var(--notification-icon-size) / 3); + --notification-group-icon-size: 32px; + --border: 4px solid var(--noti-border-color); + --border-radius: 12px; + --notification-shadow: 0; + --font-size-body: 15px; + --font-size-summary: 16px; + /* Deprecated variables (because of their typos). Keeeping them around for backwards compatibility. */ + --hover-tranistion: background 0.15s ease-out-quad; + --group-collapse-tranistion: opacity 100ms ease-out-quad; + --hover-transition: var(--hover-tranistion); + --group-collapse-transition: var(--group-collapse-tranistion); +} + + diff --git a/config/swaync/config_1.json b/config/swaync/config_1.json deleted file mode 100644 index 859a341..0000000 --- a/config/swaync/config_1.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "$schema": "/etc/xdg/swaync/configschema.json", - "positionX": "right", - "positionY": "top", - "cssPriority": "user", - "control-center-width": 450, - "fit-to-screen": true, - - "notification-window-width": 400, - "notification-icon-size": 40, - "notification-body-image-height": 500, - "notification-body-image-width": 500, - "notification-inline-replies": true, - "notification-2fa-action": false, - - "timeout": 4, - "timeout-low": 4, - "timeout-critical": 6, - - "keyboard-shortcuts": true, - "image-visibility": "when-available", - "transition-time": 200, - "hide-on-clear": false, - "hide-on-action": false, - "script-fail-notify": true, - - "widgets": [ - "mpris", - "dnd", - "notifications", - "buttons-grid" - ], - - "widget-config": { - "backlight": { - "device": "amdgpu_bl1", - "label": "󰃠", - "slider": true, - "min": 10 - }, - "volume": { - "device": "default", - "label": "", - "slider": true - }, - - "dnd": { - "text": "Do not disturb" - }, - - "mpris": { - "image-size": 110, - "image-radius": 12, - "autohide": false, - "blacklist": [ "org.mpris.MediaPlayer2.playerctld"] - }, - - "buttons-grid": { - "actions": [ - { - "label": "󰌪", - "type": "toggle", - "command": "bash -c $HOME/.config/swaync/scripts/quiet.sh", - "update-command": "bash -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && $HOME/.config/swaync/scripts/update_quiet.sh'" - }, - { - "label": "", - "type": "toggle", - "command": "bash -c $HOME/.config/swaync/scripts/inhibit.sh", - "update-command": "bash -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && $HOME/.config/swaync/scripts/update_inhibit.sh'" - }, - { - "label": "", - "type": "toggle", - "command": "pactl set-source-mute @DEFAULT_SOURCE@ toggle", - "update-command": "bash -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && $HOME/.config/swaync/scripts/update_mic.sh'" - }, - { - "label": "", - "command": "hyprctl dispatch exec alacritty -- -e htop ; swaync-client -cp" - }, - { - "label": "", - "command": "hyprctl dispatch exec alacritty -- -e nvtop ; swaync-client -cp" - }, - { - "label": "", - "command": "hyprctl dispatch exec nwg-look ; swaync-client -cp" - }, - { - "label": "", - "command": "swaync-client -cp ; bash -c $HOME/.config/rofi/bin/logout" - } - ] - } - } - } diff --git a/config/swaync/style.css b/config/swaync/style.css index 4c82adc..a489c16 100644 --- a/config/swaync/style.css +++ b/config/swaync/style.css @@ -1,4 +1,4 @@ -:root { +/*:root { --cc-bg: #07090b; --noti-border-color: #eef7fd; --noti-bg: #07090b; @@ -11,20 +11,21 @@ --text-color: #eef7fd; --text-color-disabled: rgb(150, 150, 150); --bg-selected: #1f2830; - --notification-icon-size: 64px; + --notification-icon-size: 64px; --notification-app-icon-size: calc(var(--notification-icon-size) / 3); --notification-group-icon-size: 32px; --border: 4px solid var(--noti-border-color); - --border-radius: 10px; + --border-radius: 12px; --notification-shadow: 0; --font-size-body: 15px; --font-size-summary: 16px; - /* Deprecated variables (because of their typos). Keeeping them around for backwards compatibility. */ --hover-tranistion: background 0.15s ease-out-quad; --group-collapse-tranistion: opacity 100ms ease-out-quad; --hover-transition: var(--hover-tranistion); --group-collapse-transition: var(--group-collapse-tranistion); } +*/ +@import "colors.css"; /* Fallback for older CSS themes */ /* Fallback for older CSS themes @@ -45,7 +46,8 @@ notificationwindow, blankwindow, blankwindow { - background: #07090b; + background: var(--cc-bg); + min-height: 50px; } .close-button { @@ -73,7 +75,10 @@ blankwindow { .notification-row { background: none; outline: none; - margin: 10px; + margin: 0px; + padding: 10px; + min-width: 50px; + min-height: 100px; } .notification-row:focus { @@ -81,14 +86,17 @@ blankwindow { } .notification-row .notification-background { - padding: 0px 0px; + padding: 0px; } .notification-row .notification-background .notification { /* The actual notification */ border-radius: var(--border-radius); border: var(--border); - padding: 0; + padding: 0px; + margin: 0px; + /*min-height: 100px; + */ transition: var(--hover-tranistion); background: rgba(var(--noti-bg), var(--noti-bg-alpha)); } @@ -107,10 +115,11 @@ blankwindow { .notification-row .notification-background .notification .notification-default-action { /* The large action that also displays the notification summary and body */ - padding: 10px; - margin: 0; + /* padding: 10px; + margin: 100; +*/ box-shadow: none; - background: #07090b; + background: var(--cc-bg); border: none; color: var(--text-color); transition: var(--hover-tranistion); @@ -129,7 +138,7 @@ blankwindow { } .notification-row .notification-background .notification .notification-default-action .notification-content { - background: #07090b; + background: var(--cc-bg); border-radius: var(--border-radius); padding: 0; } @@ -140,7 +149,8 @@ blankwindow { -gtk-icon-size: var(--notification-icon-size); border-radius: 20px; /* Size in px */ - margin: 10px; + margin: 20px; + } .notification-row .notification-background .notification .notification-default-action .notification-content .app-icon { @@ -153,6 +163,7 @@ blankwindow { .notification-row .notification-background .notification .notification-default-action .notification-content .text-box label { /* Fixes base GTK 4 CSS setting a filter of opacity 50% for some odd reason */ + background: var(--cc-bg); filter: none; } @@ -160,30 +171,36 @@ blankwindow { /* Notification summary/title */ font-size: var(--font-size-summary); font-weight: bold; - background: #07090b; + background: var(--cc-bg); color: var(--text-color); text-shadow: none; + margin-top: 10px; + padding-top: 10px; + min-height: 20px; + } .notification-row .notification-background .notification .notification-default-action .notification-content .text-box .time { /* Notification time-ago */ font-size: var(--font-size-summary); font-weight: bold; - background: #07090b; + background: var(--cc-bg); color: var(--text-color); text-shadow: none; margin-right: 30px; + } .notification-row .notification-background .notification .notification-default-action .notification-content .text-box .body { /* Notification body */ font-size: var(--font-size-body); font-weight: normal; - background: #07090b; + background: var(--cc-bg); color: var(--text-color); text-shadow: none; margin: 10px; padding: 10px; + } .notification-row .notification-background .notification .notification-default-action .notification-content progressbar { @@ -201,6 +218,7 @@ blankwindow { .notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply { /* The inline reply section */ margin-top: 4px; + background: var(--cc-bg); } .notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-entry { @@ -223,7 +241,7 @@ blankwindow { background: initial; color: var(--text-color-disabled); border: var(--border); - border-color: #07090b; + border-color: var(--cc-bg); } .notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:hover { @@ -231,7 +249,7 @@ blankwindow { } .notification-row .notification-background .notification .notification-alt-actions { - background: none; + background: var(--cc-bg); border-bottom-left-radius: var(--border-radius); border-bottom-right-radius: var(--border-radius); padding: 4px; @@ -340,7 +358,7 @@ blankwindow { .control-center .control-center-list { /* List of notifications */ - background: #07090b; + background: var(--cc-bg); } .control-center .control-center-list .notification { diff --git a/config/swaync/style_1.css b/config/swaync/style_1.css deleted file mode 100644 index a309731..0000000 --- a/config/swaync/style_1.css +++ /dev/null @@ -1,323 +0,0 @@ -@define-color background #08080b; -@define-color text #acb0d0; -@define-color text-alt #787c99; -@define-color background-alt #0e0e14; -@define-color selected alpha(@text-alt, .4); -@define-color hover alpha(@selected, .4); -@define-color urgent @text-alt; - -* { - color: @text; - all: unset; - font-size: 0.95rem; - font-family: "CaskaydiaCove Nerd Font Propo"; - transition: 200ms; - font-weight: 700; -} - -.notification { - padding: 0 5px; - border-radius: 15px; - border: 2px solid @background; - color: @text; -} - -.notification-background { - background: @background; - box-shadow: none; - border-radius: 15px; - margin: 8px; -} - -.notification-row .inline-reply-entry { - padding: 5px 10px; - background: @background-alt; - border-radius: 15px; -} - -.notification-row .inline-reply-button { - padding: 5px 10px; - border-radius: 15px; - background: @hover; -} - -.notification-row .inline-reply .inline-reply-button:hover { - background: @selected; -} - -.notification .notification-content { - margin: 10px; -} - -.notification-content .text-box { - margin: 0 0 0 15px; -} - -.notification-content .time { - font-size: 0.95rem; - padding: 2px 0; - font-weight: 800; -} - -.notification .summary { - font-weight: 800; - margin-bottom: 2px; - padding: 2px 0; - font-size: 1rem; -} - -.notification .body { - color: @text-alt; - font-size: 0.8rem; -} - -.notification.critical { - border-color: @urgent; -} - -.notification.low progress, -.notification.normal progress, -.notification.critical progress { - background: @selected; -} - -.notification-background .close-button { - margin: 6px; - padding: 2px; - border-radius: 6px; - background: transparent; -} - -.notification-background .close-button:hover { - background: @hover; -} - -.notification > *:last-child > * { - min-height: 3.2em; -} - -.notification > *:last-child > * .notification-action { - background: @hover; - margin: 0 6px 9px 6px; - border-radius: 8px; -} - -.notification > *:last-child > * .notification-action:hover { - background: @selected; -} - -.notification > *:last-child > * .notification-action:active { - background: @selected; -} - -.control-center { - background: @background; - border-radius: 15px; - margin: 5px; - padding: 12px; -} - -.control-center .notification-background { - background: @background-alt; - margin: 7px 0; -} - -/* I dont want to see close buttons in notification center */ -.control-center .notification-background .close-button, -.notification-group-close-button{ - opacity: 0; -} - -/* Notifications expanded-group */ -.notification-group { - margin: 0px 8px; -} - -.notification-group-headers { - font-weight: bold; - color: @text; -} - -.notification-group-headers > label { - margin: 0 3px; - font-size: 1rem; -} - -.notification-group-icon { - color: @text; -} - -.notification-group-collapse-button, -.notification-group-close-all-button { - background: transparent; - color: @text; - margin: 4px; - border-radius: 6px; - padding: 4px; -} - -/* Do not disturb */ -.widget-dnd { - padding: 8px 14px; - border-radius: 12px; - margin: 5px 0; - color: @text; - background: @background-alt; -} - -.widget-dnd > label { - font-size: 1rem; -} - -.widget-dnd switch { - background: @hover; - border-radius: 8px; - box-shadow: none; - padding: 2px; -} - -.widget-dnd switch slider { - background: @text; - border-radius: 8px; -} - -.widget-volume, -.widget-backlight { - padding: 8px 14px; - margin: 5px 0; - border-radius: 12px; - color: @text; - font-weight: 800; - background: @background-alt; -} - -.widget-volume label, -.widget-backlight label { - font-size: 1.1rem; -} - -.widget-volume slider, -.widget-backlight slider { - border-radius: 24px; - margin: -8px; - background: @text; - box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.15), 0 4px 4px rgba(0, 0, 0, 0.4); - opacity: 1; -} - -.widget-volume trough, -.widget-backlight trough { - background: @hover; - margin-left: 8px; - border-radius: 12px; -} - -.widget-volume highlight, -.widget-backlight highlight { - padding: 3.5px; - border-radius: 12px; - background: @text; -} - -.widget-dnd switch:hover, -.widget-buttons-grid button:hover, -.control-center .notification-group-collapse-button:hover, -.control-center .notification-group-close-all-button:hover -{ - background: @hover; -} - -.widget-mpris { - background: @background-alt; - border-radius: 15px; - margin: 5px 0; - padding: 0 10px; -} - -.mpris-overlay { - background: @background-alt; -} - -.widget-mpris-player { - background: @background-alt; - color: @text; - margin: 0 5px; - padding: 10px 0 15px; -} - -/* Control buttons for mpris widget */ -.widget-mpris-player .image-button:hover { - border-radius: 8px; - background: @hover; -} - -.widget-mpris-player button { - padding: 5px; - margin: 0 2.5px; -} - -.widget-mpris-player .mpris-overlay > box:last-child { - border-radius: 16px; - padding: 0 5px; - background: alpha(@hover, .3); -} - -.widget-mpris-album-art { - border-radius: 16px; - margin: 6px 4px; -} - -.widget-mpris-title, -.widget-mpris-subtitle { - font-weight: 700; - margin: 0 3px; -} - -.widget-mpris-title { - font-size: 1.2rem; -} - -.widget-mpris-subtitle { - font-size: 0.9rem; - color: @text-alt; -} - -.widget-buttons-grid { - border-radius: 12px; - padding: 6px 15px; - background: @background-alt; -} - -.widget-buttons-grid button { - padding: 10px 10px; - margin: 3px; - background: @hover; - border-radius: 15px; -} - -.widget-buttons-grid button > label { - font-size: 16px; - color: @text; -} - -.widget-buttons-grid button:hover { - background: @selected; -} - -.widget-buttons-grid button:checked { - background-color: @text; -} - -.widget-buttons-grid button:checked > label { - color: @background; -} - -/* Change color for plaseholder when no notifications */ -.control-center-list-placeholder { - color: @text; -} - -/* Avoid 'annoying' backgroud */ -.blank-window { - background: transparent; -} diff --git a/config/swayosd/colors.css b/config/swayosd/colors.css new file mode 100644 index 0000000..d065d43 --- /dev/null +++ b/config/swayosd/colors.css @@ -0,0 +1,8 @@ +:root { + --border: #f2be6e; + --background: #18130b; + --background-progress: #261904; + + + +} diff --git a/config/swayosd/style.css b/config/swayosd/style.css index 2461c74..bd198b6 100644 --- a/config/swayosd/style.css +++ b/config/swayosd/style.css @@ -1,7 +1,10 @@ +@import "colors.css"; + + window#osd { border-radius: 20px; - border: 4px solid #eef7fd; - background: #07090b; + border: 4px solid var(--border); + background: var(--background); #container { margin: 16px; @@ -9,7 +12,7 @@ window#osd { image, label { - color: #eef7fd; + color: var(--border); } progressbar:disabled, @@ -21,7 +24,7 @@ window#osd { segmentedprogress { min-height: 6px; border-radius: 999px; - background: #d2dee7; + background: var(--background-progress); border: none; } @@ -30,7 +33,7 @@ window#osd { min-height: inherit; border-radius: inherit; border: none; - background: #07090b; + background: var(--background); } progress, @@ -38,7 +41,7 @@ window#osd { min-height: inherit; border-radius: inherit; border: none; - background: #eef7fd; + background: var(--border); } segment { @@ -49,3 +52,4 @@ window#osd { } } } + diff --git a/config/telegram/matugen.tdesktop-theme b/config/telegram/matugen.tdesktop-theme new file mode 100644 index 0000000000000000000000000000000000000000..1c4cd10b61d827179f0389e44ea9c3b3626d35d9 GIT binary patch literal 13370 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 I{Lk!v0Yg$H!T^#15 zD=*-~w4VUcz(xj?C+xtQN}a9X8dvd6vuMbNK%OY1K84stqBgf(&zw1=VH|jrHP=J1 zc3S79kt0P(f23R>djke6W-u9T#&U&~JQe1U#7q88LDDq}^J432b^c1_-w#L@ diff --git a/config/telegram/matugen/colors.tdesktop-theme b/config/telegram/matugen/colors.tdesktop-theme new file mode 100644 index 0000000..daa34b9 --- /dev/null +++ b/config/telegram/matugen/colors.tdesktop-theme @@ -0,0 +1,606 @@ +// vim: filetype=qml + +windowBg: #2a241c /* #282e33 */; // white: fallback for background +windowFg: #fff3e6 /* #f5f5f5 */; // black: fallback for text +windowBgOver: #352e26 /* #313b43 */; // light gray: fallback for background with mouse over +windowBgRipple: #403930 /* #3f4850 */; // darker gray: fallback for ripple effect +windowFgOver: #ffe7cd /* #e9ecf0 */; // black: fallback for text with mouse over +windowSubTextFg: #d2c4b4 /* #82868a */; // gray: fallback for additional text +windowSubTextFgOver: #c8b7a4 /* #797b7f */; // darker gray: fallback for additional text with mouse over +windowBoldFg: windowFg /* #e9e8e8 */; // dark gray: fallback for bold text +windowBoldFgOver: windowBoldFg /* #e9e9e9 */; // dark gray: fallback for bold text with mouse over +windowBgActive: #f2be6e /* #3fc1b0 */; // bright blue: fallback for blue filled active areas +windowFgActive: #2f1d00 /* #ffffff */; // white: fallback for text on active areas (NOTE(eqrfns): this unfortunately can be used in radically different (and unexpected) places) +windowActiveTextFg: #f2be6e /* #4be1c3 */; // online blue: fallback for active text like online status +windowShadowFg: #000000; // black: fallback for shadow +windowShadowFgFallback: windowBg; // gray: fallback for shadow without opacity +shadowFg: #00000018; // most shadows (including opacity) +slideFadeOutBg: #0000003c; // slide animation (chat to profile) fade out filling +slideFadeOutShadowFg: windowShadowFg; // slide animation (chat to profile) fade out right section shadow +imageBg: #000000; // image background fallback (when photo size is less than minimum allowed) +imageBgTransparent: #fff3e6 /* #ffffff */; // image background when displaying an image with opacity where no opacity is needed +activeButtonBg: #976c25 /* #2da192 */; // default active button background (NOTE(eqrfns): this is also used for folder icons in "My folders" list) +activeButtonBgOver: #ab7b2a /* #32a896 */; // default active button background with mouse over +activeButtonBgRipple: #6f4a00 /* #42b8a6 */; // default active button ripple effect +activeButtonFg: #ffffff /* #ffffff */; // default active button text +activeButtonFgOver: #ffffff /* #ffffff */; // default active button text with mouse over +activeButtonSecondaryFg: #ffffff /* #8ee4d9 */; // default active button additional text (selected messages counter in forward / delete buttons) +activeButtonSecondaryFgOver: activeButtonSecondaryFg; // default active button additional text with mouse over +activeLineFg: #f2be6e /* #3ee2c9 */; // default active line (like code input field bottom border when you log in and field is focused) +activeLineFgError: #ffb4ab /* #f57878 */; // default active line for error state (like code input field bottom border when you log in and you've entered incorrect code) +lightButtonBg: #2a241c /* #282e33 */; // default light button background (like buttons in boxes) +lightButtonBgOver: #352e26 /* #313b43 */; // default light button background with mouse over +lightButtonBgRipple: #403930 /* #3c474f */; // default light button ripple effect +lightButtonFg: #f2be6e /* #79e8d9 */; // default light button text +lightButtonFgOver: lightButtonFg; // default light button text with mouse over +attentionButtonFg: #ffb4ab /* #f57474 */; // default attention button text (like confirm button on log out) +attentionButtonFgOver: #ff9d92 /* #e76060 */; // default attention button text with mouse over +attentionButtonBgOver: #4b000264 /* #613a3a64 */; // default attention button background with mouse over +attentionButtonBgRipple: #ffffff /* #f4c3c2 */; // default attention button ripple effect +outlineButtonBg: windowBg; // default left outlined button background (like shared media links in profiles) +outlineButtonBgOver: #352e26 /* #313b43 */; // default left outlined button background with mouse over +outlineButtonOutlineFg: #f2be6e /* #29baa7 */; // default left outlined button left outline border (NOTE(eqrfns): outlineButton* colors seem unused?) +outlineButtonBgRipple: #403930 /* #3c474f */; // default left outlined button ripple effect +menuBg: #2a241c /* #282e33 */; // default popup menu background +menuBgOver: #fff3e6 /* #ffffff */; // default popup menu item background with mouse over +menuBgRipple: #352e26 /* #26292d */; // default popup menu item ripple effect +menuIconFg: #aa9e8e /* #808080 */; // default popup menu item icon (like main menu) +menuIconFgOver: #d2c4b4 /* #dcdcdc */; // default popup menu item icon with mouse over +menuSubmenuArrowFg: #ff00ff /*#757575 */ ; // default popup menu submenu arrow icon (like in message field context menu in case of RTL system language) (NOTE(eqrfns): seems unused?) +menuFgDisabled: #d2c4b4 /* #737373 */; // default popup menu item disabled text (like unavailable items in message field context menu) (NOTE(eqrfns): this shows up for a split second in context menus sometimes) +menuSeparatorFg: #403930 /* #42484d */; // default popup menu separator (like in message field context menu) +scrollBarBg: #fff3e653 /* #ffffff53 */; // default scroll bar current rectangle, the bar itself (like in chats list) +scrollBarBgOver: #fff3e67a /* #ffffff7a */; // default scroll bar current rectangle with mouse over it +scrollBg: #fff3e61a /* #ffffff1a */; // default scroll bar background +scrollBgOver: #fff3e62c /* #ffffff2c */; // default scroll bar background with mouse over the scroll bar +smallCloseIconFg: #aa9e8e /* #6d6d6d */; // small X icon (like in Show all sessions box to the right for sessions termination) +smallCloseIconFgOver: #d2c4b4 /* #a3a3a3 */; // small X icon with mouse over +radialFg: #ffffff /* windowFgActive */; // default radial loader line (like in Media Viewer when loading a photo) +radialBg: #00000056; // default radial loader background (like in Media Viewer when loading a photo) +placeholderFg: #d2c4b4 /* #818991 */; // default input field placeholder when field is not focused (like in phone input field when you log in) +placeholderFgActive: #aa9e8e /* #5d6165 */; // default input field placeholder when field is focused +inputBorderFg: #aa9e8e /* #6f6f6f */; // default input field bottom border (like in code input field when you log in and field is not focused) +filterInputBorderFg: #403930 /* #3d444b */; // default rounded input field border (like in chats list search field when field is focused) +filterInputInactiveBg: #403930 /* #3d444b */; // default rounded input field background (like in chats list search field when field is inactive) +checkboxFg: #aa9e8e /* #6c6c6c */; // default unchecked checkbox rounded rectangle (and also emoji category icons) +sliderBgInactive: #aa9e8e /* #545454 */; // default slider not active bar (like in Settings when you choose interface scale or custom notifications count) +sliderBgActive: windowBgActive; // default slider active bar (like in Settings when you choose interface scale or custom notifications count) (NOTE(eqrfns): this is actualy a highlight bar under the emoji/sticker/gif tabs?) +tooltipBg: #2a241c /* #282e33 */; // tooltip background (like when you put mouse over the message timestamp and wait) +tooltipFg: #d2c4b4 /* #9a9e9c */; // tooltip text +tooltipBorderFg: #352e26 /* #313b43 */; // tooltip border +titleShadow: #00000003; // one pixel line shadow at the bottom of custom window title +titleBg: #403930 /* #3a4047 */; // custom window title background when window is inactive +titleBgActive: titleBg; // custom window title background when window is active +titleButtonBg: titleBg; // custom window title minimize/maximize/restore button background when window is inactive (Windows only) +titleButtonFg: #d2c4b4 /* #8b9096 */; // custom window title minimize/maximize/restore button icon when window is inactive (Windows only) +titleButtonBgOver: #4c535b; // custom window title minimize/maximize/restore button background with mouse over when window is inactive (Windows only) +titleButtonFgOver: #e0e0e0; // custom window title minimize/maximize/restore button icon with mouse over when window is inactive (Windows only) +titleButtonBgActive: titleButtonBg; // custom window title minimize/maximize/restore button background when window is active (Windows only) +titleButtonFgActive: titleButtonFg; // custom window title minimize/maximize/restore button icon when window is active (Windows only) +titleButtonBgActiveOver: titleButtonBgOver; // custom window title minimize/maximize/restore button background with mouse over when window is active (Windows only) +titleButtonFgActiveOver: titleButtonFgOver; // custom window title minimize/maximize/restore button icon with mouse over when window is active (Windows only) +titleButtonCloseBg: titleButtonBg; // custom window title close button background when window is inactive (Windows only) +titleButtonCloseFg: titleButtonFg; // custom window title close button icon when window is inactive (Windows only) +titleButtonCloseBgOver: #da342e /* #e81123 */; // custom window title close button background with mouse over when window is inactive (Windows only) +titleButtonCloseFgOver: #ffffff /* windowFgActive */; // custom window title close button icon with mouse over when window is inactive (Windows only) +titleButtonCloseBgActive: titleButtonCloseBg; // custom window title close button background when window is active (Windows only) +titleButtonCloseFgActive: titleButtonCloseFg; // custom window title close button icon when window is active (Windows only) +titleButtonCloseBgActiveOver: titleButtonCloseBgOver; // custom window title close button background with mouse over when window is active (Windows only) +titleButtonCloseFgActiveOver: titleButtonCloseFgOver; // custom window title close button icon with mouse over when window is active (Windows only) +titleFg: #aa9e8e /* #666666 */; // custom window title text when window is inactive (macOS only) +titleFgActive: #aa9e8e /* #808080 */; // custom window title text when window is active (macOS only) +trayCounterBg: #f23c34; // tray icon counter background +trayCounterBgMute: #888888; // tray icon counter background if all unread messages are muted +trayCounterFg: #ffffff; // tray icon counter text +trayCounterBgMacInvert: #ffffff; // tray icon counter background when tray icon is pressed or when dark theme of macOS is used (macOS only) +trayCounterFgMacInvert: #ffffff01; // tray icon counter text when tray icon is pressed or when dark theme of macOS is used (macOS only) +layerBg: #0000007f; // box and main menu background layer fade +cancelIconFg: #aa9e8e /* #666666 */; // default for settings close icon and box search cancel icon +cancelIconFgOver: #d2c4b4 /* #dcdcdc */; // default for settings close icon and box search cancel icon with mouse over +boxBg: windowBg; // box background +boxTextFg: windowFg; // box text +boxTextFgGood: #f2be6e /* #56dbce */; // accepted box text (like when choosing username that is not occupied) (NOTE(eqrfns): this is also used for the selected messages checkmark background) +boxTextFgError: #ffb4ab /* #d84d4d */; // rejecting box text (like when choosing username that is occupied) +boxTitleFg: #d2c4b4 /* #ebebeb */; // box title text +boxSearchBg: #2a241c /* #282e33 */; // box search field background (like in contacts box) +boxTitleAdditionalFg: #aa9e8e /* #808080 */; // box title additional text (like in create group box when you see chosen members count) +boxTitleCloseFg: cancelIconFg; // settings close icon and box search cancel icon (like in contacts box) +boxTitleCloseFgOver: cancelIconFgOver; // settings close icon and box search cancel icon (like in contacts box) with mouse over +membersAboutLimitFg: #aa9e8e /* #5e6065 */; // text in channel members box about the limit (max 200 last members are shown) (NOTE(eqrfns): haven't seen this yet) +contactsBg: #2a241c /* #222528 */; // contacts (and some other) box row background +contactsBgOver: #2a241c /* #282e33 */; // contacts (and some other) box row background with mouse over +contactsNameFg: boxTextFg; // contacts (and some other) box row name text +contactsStatusFg: #aa9e8e /* #808080 */; // contacts (and some other) box row additional text (like last seen stamp) +contactsStatusFgOver: #aa9e8e /* #808080 */; // contacts (and some other) box row additional text (like last seen stamp) with mouse over +contactsStatusFgOnline: #f2be6e /* #55e1d3 */; // contacts (and some other) box row active additional text (like online status) +photoCropFadeBg: layerBg; // avatar crop box fade background (when choosing a new photo in Settings or for a group) +photoCropPointFg: #fff3e67f /* #ffffff7f */; // avatar crop box corner rectangles (when choosing a new photo in Settings or for a group) +callArrowFg: #b6cea3 /* #2bc7b7 */; // received phone call arrow (NOTE(eqrfns): this is not the color you see in chats, instead this is used by the "Calls" overview you can find in the hamburger menu) +callArrowMissedFg: #ffb4ab /* #dd5b4a */; // missed phone call arrow (in calls list box) +introBg: windowBg; // login background +introTitleFg: #d2c4b4 /* #eeeeee */; // login title text +introDescriptionFg: #d2c4b499 /* #999999 */; // login description text +introErrorFg: #ffb4ab /* #999999 */; // login error text (like when providing a wrong log in code) +introCoverTopBg: #976c25 /* #188173 */; // intro gradient top (from) (NOTE(eqrfns): haven't checked this) +introCoverBottomBg: #976c25 /* #188173 */; // intro gradient bottom (to) +introCoverIconsFg: #ffffff /* #34a493 */; // intro cloud graphics +introCoverPlaneTrace: #ffffff /* #329d8f */; // intro plane traces +introCoverPlaneInner: #ced9e2; // intro plane part (NOTE(eqrfns): haven't seen this yet) +introCoverPlaneOuter: #97a9b5; // intro plane part (NOTE(eqrfns): haven't seen this yet) +introCoverPlaneTop: #ffffff; // intro plane part (NOTE(eqrfns): haven't seen this yet) +dialogsMenuIconFg: menuIconFg; // main menu and lock telegram icon +dialogsMenuIconFgOver: menuIconFgOver; // main menu and lock telegram icon with mouse over +dialogsBg: windowBg; // chat list background +dialogsNameFg: #fff3e6 /* #f5f5f5 */; // chat list name text +dialogsChatIconFg: dialogsNameFg; // chat list group or channel icon +dialogsDateFg: #aa9e8e /* #6d727c */; // chat list date text +dialogsTextFg: #aa9e8e /* #8d939e */; // chat list message text +dialogsTextFgService: #d2c4b4 /* #ebebeb */; // chat list group sender name text (or media message type text) +dialogsDraftFg: #ffb4ab /* #ec6657 */; // chat list draft label +dialogsVerifiedIconBg: #dcc3a1 /* #53edde */; // chat list verified icon background +dialogsVerifiedIconFg: #2a241c /* #282e33 */; // chat list verified icon check (NOTE(eqrfns): not sure where this is used, but it is referenced in the code) +dialogsSendingIconFg: #aa9e8e /* #727272 */; // chat list sending message icon (clock) +dialogsSentIconFg: #f2be6e /* #20eed9 */; // chat list sent message tick / double tick icon +dialogsUnreadBg: #976c25 /* #05a091 */; // chat list unread badge background for not muted chat +dialogsUnreadBgMuted: #766e5f99 /* #495159 */; // chat list unread badge background for muted chat (NOTE(eqrfns): this is also used for the "pinned" icon, and also for folder icons in the "add to folder" submenu of a chat "More" menu. I hate this...) +dialogsUnreadFg: #ffffff /* #ffffff */; // chat list unread badge text +dialogsOnlineBadgeFg: #f2be6e /* #0ae7d1 */; // chat list online status +dialogsBgOver: #403930 /* #353c43 */; // chat list background with mouse over +dialogsNameFgOver: windowBoldFgOver; // chat list name text with mouse over +dialogsChatIconFgOver: dialogsNameFgOver; // chat list group or channel icon with mouse over +dialogsDateFgOver: #aa9e8e /* #6d727c */; // chat list date text with mouse over +dialogsTextFgOver: #d2c4b4 /* #a3a7ae */; // chat list message text with mouse over +dialogsTextFgServiceOver: #fff3e6 /* #f0f0f0 */; // chat list group sender name text with mouse over +dialogsDraftFgOver: dialogsDraftFg; // chat list draft label with mouse over +dialogsVerifiedIconBgOver: #dcc3a1 /* #53edde */; // chat list verified icon background with mouse over +dialogsVerifiedIconFgOver: dialogsVerifiedIconFg; // chat list verified icon check with mouse over +dialogsSendingIconFgOver: dialogsSendingIconFg; // chat list sending message icon (clock) with mouse over +dialogsSentIconFgOver: #f2be6e /* #41f0de */; // chat list sent message tick / double tick icon with mouse over +dialogsUnreadBgOver: #976c25 /* #009687 */; // chat list unread badge background for not muted chat with mouse over +dialogsUnreadBgMutedOver: #81705599 /* #555e67 */; // chat list unread badge background for muted chat with mouse over +dialogsUnreadFgOver: dialogsUnreadFg; // chat list unread badge text with mouse over +dialogsBgActive: #976c25 /* #009687 */; // chat list background for current (active) chat +dialogsNameFgActive: #ffffff /* windowFgActive */; // chat list name text for current (active) chat +dialogsChatIconFgActive: dialogsNameFgActive; // chat list group or channel icon for current (active) chat +dialogsDateFgActive: #ffffff /* windowFgActive */; // chat list date text for current (active) chat +dialogsTextFgActive: #ffffff /* windowFgActive */; // chat list message text for current (active) chat +dialogsTextFgServiceActive: dialogsTextFgActive; // chat list group sender name text for current (active) chat +dialogsDraftFgActive: #ffffff99 /* #c6f7f3 */; // chat list draft label for current (active) chat +dialogsVerifiedIconBgActive: dialogsTextFgActive; // chat list verified icon background for current (active) chat +dialogsVerifiedIconFgActive: dialogsBgActive; // chat list verified icon check for current (active) chat +dialogsSendingIconFgActive: #ffffff99 /* #ffffff99 */; // chat list sending message icon (clock) for current (active) chat +dialogsSentIconFgActive: dialogsTextFgActive; // chat list sent message tick / double tick icon for current (active) chat +dialogsUnreadBgActive: dialogsTextFgActive; // chat list unread badge background for not muted chat for current (active) chat +dialogsUnreadBgMutedActive: #ffffff99 /* #cbf7e8 */; // chat list unread badge background for muted chat for current (active) chat +dialogsUnreadFgActive: #976c25 /* #039d8e */; // chat list unread badge text for current (active) chat +dialogsOnlineBadgeFgActive: #ffffff /* #ffffff */; // chat list online status for current (active) chat +dialogsRippleBg: #4f4539 /* #43474d */; // +dialogsRippleBgActive: #6f4a00 /* #12a796 */; // +dialogsForwardBg: dialogsBgActive; // forwarding panel background (when forwarding messages in the smallest window size) +dialogsForwardFg: dialogsNameFgActive; // forwarding panel text (when forwarding messages in the smallest window size) +searchedBarBg: #403930 /* #3a4047 */; // search results bar background (in chats list, contacts box..) +searchedBarFg: #d2c4b4 /* #a8a8a8 */; // search results bar text (in chats list, contacts box..) +topBarBg: #2a241c /* #282e33 */; // top bar background (in chat view, media overview..) +emojiPanBg: windowBg; // emoji panel background +emojiPanCategories: #211c14 /* #20262b */; // emoji panel categories background +emojiPanHeaderFg: #aa9e8e/* #90949a */; // emoji panel section header text +emojiPanHeaderBg: #fff3e6f2 /* #fffffff2 */; // emoji panel section header background +stickerPanDeleteBg: #000000cc; // delete X button background for custom sent stickers in stickers panel (legacy) +stickerPanDeleteFg: windowFgActive; // delete X button icon for custom sent stickers in stickers panel (legacy) +stickerPreviewBg: #000000b0; // sticker and GIF preview background (when you press and hold on a sticker) +historyTextInFg: windowFg; // inbox message text +historyTextInFgSelected: #ffffff /* #ffffff */; // inbox message selected text or text in a selected message +historyTextOutFg: #ffffff /* #e4ecf2 */; // outbox message text +historyTextOutFgSelected: #ffffff /* #ffffff */; // outbox message selected text or text in a selected message +historyLinkInFg: #f2be6e /* #37e1ca */; // inbox message link +historyLinkInFgSelected: #ffffff /* #a7fff3 */; // inbox message link in a selected text or message +historyLinkOutFg: #ffffff /* #37e1ca */; // outbox message link +historyLinkOutFgSelected: #ffffff /* #a7fff3 */; // outbox message link in a selected text or message +historyFileNameInFg: historyTextInFg; // inbox media filename text +historyFileNameInFgSelected: historyTextInFgSelected /* #ffffff */; // inbox media filename text in a selected message +historyFileNameOutFg: historyTextOutFg; // outbox media filename text +historyFileNameOutFgSelected: historyTextOutFgSelected /* #ffffff */; // outbox media filename text in a selected message +historyOutIconFg: #ffffff /* #40e6c5 */; // outbox message tick / double tick icon +historyOutIconFgSelected: #ffffff /* #ffffff */; // outbox message tick / double tick icon in a selected message +historyIconFgInverted: #dcc3a1 /* windowFgActive */; // media message tick / double tick icon (like in sent photo) (NOTE(eqrfns): forcing the dark theme looks better here IMO) +historySendingOutIconFg: #ffffff /* #9dfadd */; // outbox sending message icon (clock) +historySendingInIconFg: #aa9e8e /* #76838b */; // inbox sending message icon (clock) (like in sent messages to yourself or in sent messages to a channel) +historySendingInvertedIconFg: #fff3e6c8 /* #ffffffc8 */; // media sending message icon (clock) (like in sent photo) +historyCallArrowInFg: #b6cea3 /* #26c2ab */; // received phone call arrow +historyCallArrowInFgSelected: #ffffff /* #ffffff */; // received phone call arrow in a selected message +historyCallArrowMissedInFg: callArrowMissedFg; // missed phone call arrow +historyCallArrowMissedInFgSelected: #ffffff /* #ffffff */; // missed phone call arrow in a selected message +historyCallArrowOutFg: #ffffff /* #ffffff */; // outgoing phone call arrow +historyCallArrowOutFgSelected: #ffffff /* #ffffff */; // outgoing phone call arrow +historyUnreadBarBg: #403930 /* #33393f */; // new unread messages bar background +historyUnreadBarBorder: shadowFg; // new unread messages bar shadow +historyUnreadBarFg: #f2be6e /* #3cd3bf */; // new unread messages bar text +historyForwardChooseBg: #0000004c; // forwarding messages in a large window size "choose recipient" background +historyForwardChooseFg: #f2be6e /* windowFgActive */; // forwarding messages in a large window size "choose recipient" text +historyPeer1NameFg: #ffb5a1 /* #ec7577 */; // red group member name +historyPeer1NameFgSelected: historyTextInFgSelected /* #ffffff */; // red group member name in a selected message +historyPeer1UserpicBg: #ff845e; // red userpic background +historyPeer2NameFg: #b4d188 /* #86d67f */; // green group member name +historyPeer2NameFgSelected: historyTextInFgSelected /* #ffffff */; // green group member name in a selected message +historyPeer2UserpicBg: #9ad164; // green userpic background +historyPeer3NameFg: #ebc16d /* #e4c054 */; // yellow group member name +historyPeer3NameFgSelected: historyTextInFgSelected /* #ffffff */; // yellow group member name in a selected message +historyPeer3UserpicBg: #e5ca77; // yellow userpic background (actually unused) +historyPeer4NameFg: #84d2e6 /* #68c7f3 */; // blue group member name +historyPeer4NameFgSelected: historyTextInFgSelected /* #ffffff */; // blue group member name in a selected message +historyPeer4UserpicBg: #5caffa; // blue userpic background +historyPeer5NameFg: #e6b7f2 /* #b383f3 */; // purple group member name +historyPeer5NameFgSelected: historyTextInFgSelected /* #ffffff */; // purple group member name in a selected message +historyPeer5UserpicBg: #b694f9; // purple userpic background +historyPeer6NameFg: #ffb3b6 /* #e16794 */; // pink group member name +historyPeer6NameFgSelected: historyTextInFgSelected /* #ffffff */; // pink group member name in a selected message +historyPeer6UserpicBg: #ff8aac; // pink userpic background +historyPeer7NameFg: #81d4d6 /* #57c9e0 */; // sea group member name +historyPeer7NameFgSelected: historyTextInFgSelected /* #ffffff */; // sea group member name in a selected message +historyPeer7UserpicBg: #5bcbe3; // sea userpic background +historyPeer8NameFg: #f5bd6f /* #efb05d */; // orange group member name +historyPeer8NameFgSelected: historyTextInFgSelected /* #ffffff */; // orange group member name in a selected message +historyPeer8UserpicBg: #febb5b; // orange userpic background +historyPeerUserpicFg: #ffffff /* windowFgActive */; // default userpic initials +historyScrollBarBg: #d2c4b47a /* #8989897a */; // scroll bar current rectangle, the bar itself in the chat view (adjusted) +historyScrollBarBgOver: #aa9e8ebc /* #6b6b6bbc */; // scroll bar current rectangle with mouse over it in the chat view (adjusted) +historyScrollBg: #9f927f4c /* #5f5f5f4c */; // scroll bar background (adjusted) +historyScrollBgOver: #aa9e8e6b /* #6262626b */; // scroll bar background with mouse over the scroll bar (adjusted) +historyPeer1UserpicBg2: #d45246; // the second red userpic background +historyPeer2UserpicBg2: #46ba43; // the second green userpic background +historyPeer3UserpicBg2: #e5ca77; // the second yellow userpic background (actually unused) +historyPeer4UserpicBg2: #408acf; // the second blue userpic background +historyPeer5UserpicBg2: #6c61df; // the second purple userpic background +historyPeer6UserpicBg2: #d95574; // the second pink userpic background +historyPeer7UserpicBg2: #359ad4; // the second sea userpic background +historyPeer8UserpicBg2: #f68136; // the second orange userpic background +historyPeerSavedMessagesBg2: historyPeer4UserpicBg2; // the second saved messages userpic background +msgInBg: #352e26 /* #33393f */; // inbox message background +msgInBgSelected: #976c25 /* #009687 */; // inbox selected message background (and background of selected text in those messages) +msgOutBg: #867154 /* #2a2f33 */; // outbox message background +msgOutBgSelected: #976c25 /* #009687 */; // outbox selected message background (and background of selected text in those messages) +msgSelectOverlay: #f2be6e4c /* #35d4bf4c */; // overlay which is filling the media parts of selected messages (like in selected photo message) +msgStickerOverlay: #f2be6e7f /* #35d4bf7f */; // overlay which is filling the selected sticker message (NOTE(eqrfns): this color is somehow bugged, it randomy does not get updated when I change the theme) +msgInServiceFg: windowActiveTextFg; // inbox message information text (like information about a forwarded message original sender) +msgInServiceFgSelected: #fff3e6 /* #ffffff */; // inbox selected message information text (like information about a forwarded message original sender) +msgOutServiceFg: #ffffff /* #60e5ca */; // outbox message information text (like information about a forwarded message original sender) +msgOutServiceFgSelected: #ffffff /* #ffffff */; // outbox message information text (like information about a forwarded message original sender) +msgInShadow: #00000000; // inbox message shadow (below the bubble) +msgInShadowSelected: #00000000; // inbox selected message shadow (below the bubble) +msgOutShadow: #00000000; // outbox message shadow (below the bubble) +msgOutShadowSelected: #976c2500 /* #37a78d00 */; // outbox selected message shadow (below the bubble) +msgInDateFg: #dcc3a1 /* #828d94 */; // inbox message time text +msgInDateFgSelected: #ffffff /* #ffffff */; // inbox selected message time text +msgOutDateFg: #ffffff99 /* #737f87 */; // outbox message time text +msgOutDateFgSelected: #ffffff /* #ffffff */; // outbox selected message time text +msgServiceFg: #dcc3a1; // service message text (like date dividers or service message about the group title being changed) +msgServiceBg: #4f4539c8 /* #363c43c8 */; // service message background (like in a service message about group title being changed) (adjusted) +msgServiceBgSelected: #6f4a00 /* #009687 */; // service message selected text background (like in a service message about group title being changed) (adjusted) +msgInReplyBarColor: #f2be6e /* #32ceb7 */; // inbox message reply outline (NOTE(eqrfns): this can be seen at east in the interface scale preview) +msgInReplyBarSelColor: #fff3e6 /* #ffffff */; // inbox selected message reply outline (NOTE(eqrfns): coudn't figure out how to see this) +msgOutReplyBarColor: #ffffff /* #32ceb7 */; // outbox message reply outline +msgOutReplyBarSelColor: #ffffff /* #ffffff */; // outbox selected message reply outline +msgImgReplyBarColor: msgServiceFg; // sticker message reply outline (NOTE(eqrfns): this is the color of the text that shows up when you reply with a sticker. This took me some time to figure out) +msgInMonoFg: #d0e0c4 /* #5aab9f */; // inbox message monospace text (like a message sent with `test` text) +msgOutMonoFg: #f4f2ed /* #c2f2ec */; // outbox message monospace text (NOTE(eqrfns): not sure if this is OK) +msgInMonoFgSelected: #ffffff /* #a7fff3 */; // inbox message monospace text in a selected text or message +msgOutMonoFgSelected: #ffffff /* #c9fff8 */; // outbox message monospace text in a selected text or message +msgDateImgFg: #dcc3a1 /* msgServiceFg */; // media message time text (like time text in a sent photo) (NOTE(eqrfns): forced dark theme looks better IMO) +msgDateImgBg: #00000054; // media message time bubble background (like time bubble in a sent photo) or file with thumbnail download icon circle background +msgDateImgBgOver: #00000074; // media message download icon circle background with mouse over (like file with thumbnail download icon) +msgDateImgBgSelected: #00000087 /* #1c706587 */; // selected media message time bubble background +msgFileThumbLinkInFg: lightButtonFg; // inbox media file message with thumbnail download / open with button text +msgFileThumbLinkInFgSelected: lightButtonFgOver; // inbox selected media file message with thumbnail download / open with button text +msgFileThumbLinkOutFg: #ffffff /* #60e5ca */; // outbox media file message with thumbnail download / open with button text +msgFileThumbLinkOutFgSelected: #ffffff /* #ffffff */; // outbox selected media file message with thumbnail download / open with button text +msgFileInBg: #f2be6e /* #50d4c2 */; // inbox audio file download circle background (NOTE(eqrfns): this is actually used for ANY file) +msgFileInBgOver: #eea93f /* #48cfbd */; // inbox audio file download circle background with mouse over (NOTE(eqrfns): this is actualy for the play circle in the audio files overiew) +msgFileInBgSelected: #ffffff /* #ffffff */; // inbox selected audio file download circle background (NOTE(eqrfns): this is used both for the overview, and for the chat history) +msgFileOutBg: #ffffff /* #11bfab */; // outbox audio file download circle background +msgFileOutBgOver: #e6e6e6 /* #ffffff */; // outbox audio file download circle background with mouse over (NOTE(eqrfns): seems to be unused in the source code?) +msgFileOutBgSelected: #ffffff /* #ffffff */; // outbox selected audio file download circle background +msgFile1Bg: #72b1df; // blue shared links / files without image square thumbnail +msgFile1BgDark: #5c9ece; // blue shared files without image download circle background +msgFile1BgOver: #5294c4; // blue shared files without image download circle background with mouse over +msgFile1BgSelected: #5099d0; // blue shared files without image download circle background if file is selected +msgFile2Bg: #5fbe67; // green shared links / shared files without image square thumbnail +msgFile2BgDark: #4da859; // green shared files without image download circle background +msgFile2BgOver: #44a050; // green shared files without image download circle background with mouse over +msgFile2BgSelected: #50ac9b; // green shared files without image download circle background if file is selected +msgFile3Bg: #e47272; // red shared links / shared files without image square thumbnail +msgFile3BgDark: #cd5b5e; // red shared files without image download circle background +msgFile3BgOver: #c35154; // red shared files without image download circle background with mouse over +msgFile3BgSelected: #9f6a82; // red shared files without image download circle background if file is selected +msgFile4Bg: #efc274; // yellow shared links / shared files without image square thumbnail +msgFile4BgDark: #e6a561; // yellow shared files without image download circle background +msgFile4BgOver: #dc9c5a; // yellow shared files without image download circle background with mouse over +msgFile4BgSelected: #b19d84; // yellow shared files without image download circle background if file is selected +historyFileInIconFg: msgInBg /* #33393f */; // inbox file without thumbnail (like audio file) download arrow icon +historyFileInIconFgSelected: msgInBgSelected /* #009687 */; // inbox selected file without thumbnail (like audio file) download arrow icon +historyFileInRadialFg: #403930 /* #33393f */; // inbox file without thumbnail (like audio file) radial download animation line +historyFileInRadialFgSelected: historyFileInIconFgSelected; // inbox selected file without thumbnail (like audio file) radial download animation line +historyFileOutIconFg: msgOutBg /* #33393f */; // outbox file without thumbnail (like audio file) download arrow icon +historyFileOutIconFgSelected: msgOutBgSelected /* #009687 */; // outbox selected file without thumbnail (like audio file) download arrow icon +historyFileOutRadialFg: historyFileOutIconFg; // outbox file without thumbnail (like audio file) radial download animation line +historyFileOutRadialFgSelected: historyFileOutIconFgSelected /* #009687 */; // outbox selected file without thumbnail (like audio file) radial download animation line (NOTE(eqrfns): you need to start downloading the file and then select the message to see this) +historyFileThumbIconFg: #fff3e6 /* #efefef */; // file with thumbnail (or photo / video) download arrow icon +historyFileThumbIconFgSelected: #fff3e6 /* #ffffff */; // selected file with thumbnail (or photo / video) download arrow icon +historyFileThumbRadialFg: historyFileThumbIconFg; // file with thumbnail (or photo / video) radial download animation line +historyFileThumbRadialFgSelected: #fff3e6 /* #ffffff */; // selected file with thumbnail (or photo / video) radial download animation line +historyVideoMessageProgressFg: historyFileThumbIconFg; // radial playback progress in round video messages +msgWaveformInActive: windowBgActive; // inbox voice message active waveform lines (like played part of currently playing voice message) +msgWaveformInActiveSelected: #ffffff /* #ffffff */; // inbox selected voice message active waveform lines (like played part of currently playing voice message) +msgWaveformInInactive: #aa9e8e /* #5d6b76 */; // inbox voice message inactive waveform lines (like upcoming part of currently playing voice message) +msgWaveformInInactiveSelected: #ffffff80 /* #41d1be */; // inbox selected voice message inactive waveform lines (like upcoming part of currently playing voice message) +msgWaveformOutActive: #ffffff /* #11bfab */; // outbox voice message active waveform lines (like played part of currently playing voice message) +msgWaveformOutActiveSelected: #ffffff /* #ffffff */; // outbox selected voice message active waveform lines (like played part of currently playing voice message) +msgWaveformOutInactive: #ffffff80 /* #596874 */; // outbox voice message inactive waveform lines (like upcoming part of currently playing voice message) +msgWaveformOutInactiveSelected: #ffffff80 /* #41d1be */; // outbox selected voice message inactive waveform lines (like upcoming part of currently playing voice message) +msgBotKbOverBgAdd: #fff3e614 /* #ffffff14 */; // this is painted over a bot inline keyboard button (which has msgServiceBg background) when mouse is over that button +msgBotKbIconFg: msgServiceFg; // bot inline keyboard button icon in the top-right corner (like in @vote bot when a poll is ready to be shared) +msgBotKbRippleBg: #d2c4b410 /* #9e9d9d10 */; // bot inline keyboard button ripple effect +mediaInFg: msgInDateFg; // inbox media message status text (like in file that is being downloaded) +mediaInFgSelected: msgInDateFgSelected; // inbox selected media message status text (like in file that is being downloaded) +mediaOutFg: msgOutDateFg; // outbox media message status text (like in file that is being downloaded) +mediaOutFgSelected: msgOutDateFgSelected; // outbox selected media message status text (like in file that is being downloaded) +youtubePlayIconBg: #e83131c8; // youtube play icon background (when a link to a youtube video with a webpage preview is sent) NOTE(eqrfns): deliberately a static color +youtubePlayIconFg: #ffffff /* windowFgActive */; // youtube play icon arrow (when a link to a youtube video with a webpage preview is sent) NOTE(eqrfns): deliberately a static color +videoPlayIconBg: #0000007f; // other video play icon background (like when a link to a vimeo video with a webpage preview is sent) +videoPlayIconFg: #fff3e6 /* #ffffff */; // other video play icon arrow (like when a link to a vimeo video with a webpage preview is sent) +toastBg: #000000b2; // toast notification background (like when you click on your t.me link when editing your username) +toastFg: #ffffff /* windowFgActive */; // toast notification text (like when you click on your t.me link when editing your username) +reportSpamBg: #403930 /* #363c42 */; // report spam panel background (like a non contact user writes your for the first time) +reportSpamFg: windowFg; // report spam panel text (when you send a report from that panel) +historyToDownBg: #867154 /* #434d57 */; // arrow button background (to scroll to the end of the viewed chat) +historyToDownBgOver: #a28b6b /* #515b65 */; // arrow button background with mouse over +historyToDownBgRipple: #b6a38a /* #636d77 */; // arrow button ripple effect +historyToDownFg: #ffffff /* #adb4ba */; // arrow button icon +historyToDownFgOver: #ffffff /* menuIconFgOver */; // arrow button icon with mouse over +historyToDownShadow: #00000040; // arrow button shadow +historyComposeAreaBg: #2a241c /* #282e33 */; // history compose area background (message write area / reply information / forwarding information) +historyComposeAreaFg: historyTextInFg; // history compose area text +historyComposeAreaFgService: msgInDateFg; // history compose area text when replying to a media message +historyComposeIconFg: menuIconFg; // history compose area icon (like emoji, attach, bot command..) +historyComposeIconFgOver: menuIconFgOver; // history compose area icon with mouse over +historySendIconFg: windowBgActive; // send message icon +historySendIconFgOver: windowBgActive; // send message icon with mouse over +historyPinnedBg: historyComposeAreaBg; // pinned message area background +historyReplyBg: historyComposeAreaBg; // reply / forward / edit message area background +historyReplyIconFg: windowBgActive; // reply / forward / edit message left icon +historyReplyCancelFg: cancelIconFg; // reply / forward / edit message cancel button +historyReplyCancelFgOver: cancelIconFgOver; // reply / forward / edit message cancel button with mouse over +historyComposeButtonBg: historyComposeAreaBg; // unblock / join channel / mute channel button background +historyComposeButtonBgOver: #352e26 /* #31363c */; // unblock / join channel / mute channel button background with mouse over +historyComposeButtonBgRipple: #211c14 /* #272b2f */; // unblock / join channel / mute channel button ripple effect +overviewCheckBg: #00000040; // shared files / links checkbox background for not selected rows when some rows are selected +overviewCheckFg: #fff3e6 /* #ffffff */; // shared files / links checkbox icon for not selected rows when some rows are selected +overviewCheckFgActive: #2f1d00 /* #ffffff */; // shared files / links checkbox icon for selected rows (NOTE(eqrfns): this is used over primary (boxTextFgGood al least)) +overviewPhotoSelectOverlay: #f2be6e33 /* #40ace333 */; // shared photos / videos / links fill for selected rows +profileStatusFgOver: #ff00ff /* #9c9c9c */; // group members list in group profile user last seen text with mouse over (NOTE(eqrfns): seems unused in the sources?) +profileVerifiedCheckBg: windowBgActive; // profile verified check icon background +profileVerifiedCheckFg: #fff3e6 /* #ffffff */; // profile verified check icon tick +profileAdminStartFg: windowBgActive; // group members list admin star icon +notificationsBoxMonitorFg: windowFg; // custom notifications settings box monitor color +notificationsBoxScreenBg: dialogsBgActive; // #6389a8; // custom notifications settings box monitor screen background +notificationSampleUserpicFg: windowBgActive; // custom notifications settings box small sample userpic placeholder +notificationSampleCloseFg: #fff3e6 /* #d7d7d7 */; // custom notifications settings box small sample close button placeholder (NOTE(eqrfns): haven't seen this) +notificationSampleTextFg: #fff3e6 /* #d7d7d7 */; // custom notifications settings box small sample text placeholder (NOTE(eqrfns): haven't seen this) +notificationSampleNameFg: #d2c4b4 /* #939393 */; // custom notifications settings box small sample name placeholder (NOTE(eqrfns): haven't seen this) +changePhoneSimcardFrom: notificationSampleTextFg; // change phone number box left simcard icon +changePhoneSimcardTo: notificationSampleNameFg; // change phone number box right simcard and plane icons +mainMenuBg: windowBg; // main menu background +mainMenuCoverBg: windowBgActive /* #009687 */; // main menu top cover background (NOTE(eqrfns): these "cover" colors don't seem to show up anywhere) +mainMenuCoverFg: windowFgActive; // main menu top cover text +mainMenuCloudFg: activeButtonFg; // main menu top cover saved messages / archive button icon +mainMenuCloudBg: activeButtonBg /* #0e837d */; // main menu top cover saved messages / archive button background +mediaPlayerBg: windowBg; // audio file player background +mediaPlayerActiveFg: windowBgActive; // audio file player playback progress already played part +mediaPlayerInactiveFg: sliderBgInactive; // audio file player playback progress upcoming (not played yet) part with mouse over +mediaPlayerDisabledFg: #9dd1ef; // audio file player loading progress (when you're playing an audio file and switch to the previous one which is not loaded yet) +mediaviewFileBg: windowBg; // file rectangle background (when you view a png file in Media Viewer and go to a previous, not loaded yet, file) +mediaviewFileNameFg: windowFg; // file name in file rectangle +mediaviewFileSizeFg: windowSubTextFg; // file size text in file rectangle +mediaviewFileRedCornerFg: #d55959; // red file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .pdf) +mediaviewFileYellowCornerFg: #e8a659; // yellow file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .zip) +mediaviewFileGreenCornerFg: #49a957; // green file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .exe) +mediaviewFileBlueCornerFg: #599dcf; // blue file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .dmg) +mediaviewFileExtFg: activeButtonFg; // file extension text in file thumbnail placeholder in file rectangle +mediaviewMenuBg: #ff00ff /* #383838 */; // context menu in Media Viewer background (NOTE(eqrfns): seems defined, but unreferenced in the sources) +mediaviewMenuBgOver: #403930 /* #505050 */; // context menu item background with mouse over (NOTE(eqrfns): this is actually the inactive side of the playback speed control slider for some reason) +mediaviewMenuBgRipple: #ff00ff /* #676767 */; // context menu item ripple effect (NOTE(eqrfns): also unused?) +mediaviewMenuFg: #fff3e6 /* windowFgActive */; // context menu item text +mediaviewBg: #211c14eb /* #222222eb */; // Media Viewer background +mediaviewVideoBg: imageBg; // Media Viewer background when viewing a video in full screen +mediaviewControlBg: #0000003c; // controls background (like next photo / previous photo) +mediaviewControlFg: #f2be6e /* windowFgActive */; // controls icon (like next photo / previous photo) +mediaviewCaptionBg: #0e0a04a9 /* #11111180 */; // caption text background (when viewing photo with caption) +mediaviewCaptionFg: mediaviewControlFg; // caption text +mediaviewTextLinkFg: #f2be6e /* #66f7e4 */; // caption text link +mediaviewSaveMsgBg: toastBg; // save to file toast message background in Media Viewer +mediaviewSaveMsgFg: toastFg; // save to file toast message text +mediaviewPlaybackActive: #d2c4b4 /* #c7c7c7 */; // video playback progress already played part +mediaviewPlaybackInactive: #d2c4b455 /* #252525 */; // video playback progress upcoming (not played yet) part +mediaviewPlaybackActiveOver: #fff3e6 /* #ffffff */; // video playback progress already played part with mouse over +mediaviewPlaybackInactiveOver: #d2c4b4aa /* #474747 */; // video playback progress upcoming (not played yet) part with mouse over (NOTE(eqrfns): this actually only shows up when rewinding the video. I assume this is the "buffered" part, but not sure) +mediaviewPlaybackProgressFg: #fff3e6c7 /* #ffffffc7 */; // video playback progress text +mediaviewPlaybackIconFg: mediaviewPlaybackActive; // video playback controls icon +mediaviewPlaybackIconFgOver: mediaviewPlaybackActiveOver; // video playback controls icon with mouse over +mediaviewTransparentBg: #fff3e6 /* #ffffff */; // transparent filling part (when viewing a transparent .png file in Media Viewer) (NOTE(eqrfns): this is one of the checkerboard colors) +mediaviewTransparentFg: #d2c4b4 /* #cccccc */; // another transparent filling part (NOTE(eqrfns): this is annother checkerboard color) +notificationBg: windowBg; // custom notification window background +callBg: #2a241cf2 /* #26282cf2 */; // phone call popup background +callNameFg: #fff3e6 /* #ffffff */; // phone call popup name text +callFingerprintBg: #00000066; // phone call popup emoji fingerprint background +callStatusFg: #d2c4b4 /* #aaabac */; // phone call popup status text (NOTE(eqrfns): haven't seen this on Linux) +callIconFg: #fff3e6 /* #ffffff */; // phone call popup answer, hangup and mute mic icon +callAnswerBg: #976c25 /* #5ad1bf */; // phone call popup answer button background (NOTE(eqrfns): this is one of those "bugged" colors that sometimes get stuck on theme change) +callAnswerRipple: #6f4a00 /* #42c2b1 */; // phone call popup answer button ripple effect +callAnswerBgOuter: #f2be6e26 /* #3febc926 */; // phone call popup answer button outer ripple effect +callHangupBg: #da342e /* #d75a5a */; // phone call popup hangup button background +callHangupRipple: #ffffff19 /* #c04646 */; // phone call popup hangup button ripple effect +callCancelBg: #fff3e6 /* #ffffff */; // phone call popup line busy cancel button background +callCancelFg: #362f27; // phone call popup line busy cancel button icon +callCancelRipple: #f1f1f1; // phone call popup line busy cancel button ripple effect +callMuteRipple: #fff3e612 /* #ffffff12 */; // phone call popup mute mic ripple effect +callBarBg: dialogsBgActive; // active phone call bar background +callBarMuteRipple: dialogsRippleBgActive; // active phone call bar mute and hangup button ripple effect +callBarBgMuted: #8f8f8f; // phone call bar with muted mic background +callBarUnmuteRipple: #7f7f7f; // phone call bar with muted mic mute and hangup button ripple effect +callBarFg: dialogsNameFgActive; // phone call bar text and icons +importantTooltipBg: toastBg; // +importantTooltipFg: toastFg; // +importantTooltipFgLink: #f2be6e /* #65fce8 */; // group call important tooltip text link color (NOTE(eqrfns): haven't seen this yet) +filterInputActiveBg: #403930 /* #3d444b */; // default rounded input field active background (like in chats list search field when field is focused) +botKbBg: #403930 /* #3d444b */; // bot keyboard button background +botKbDownBg: #4f4539 /* #494f55 */; // bot keyboard button ripple effect +emojiIconFg: #aa9e8e /* #6c7278 */; // emoji category icon +emojiIconFgActive: #ff00ff /* #36cdb9 */; // active emoji category icon (NOTE(eqrfns): seems to be missing in the sources) +overviewCheckBorder: #aa9e8e /* #e4eaef */; // shared media round checkbox border +sideBarBg: #0e0a04 /* #18191d */; // filters side bar background +sideBarBgActive: #2a241c /* #282e33 */; // filters side bar active background +sideBarBgRipple: #211c14 /* #22272b */; // filters side bar ripple effect +sideBarTextFg: #aa9e8e /* #8d939e */; // filters side bar text +sideBarTextFgActive: #f2be6e /* #24c9b9 */; // filters side bar active item text +sideBarIconFg: #aa9e8e /* #8d939e */; // filters side bar icon +sideBarIconFgActive: #f2be6e /* #25dbc9 */; // filters side bar active item icon +sideBarBadgeBg: #f2be6e /* #25dbc9 */; // filters side bar badge background +sideBarBadgeBgMuted: #aa9e8e /* #8d939e */; // filters side bar unimportant badge background +statisticsChartInactive: #352e26 /* #313a43d8 */; // inactive area in footer of statistic charts (NOTE(eqrfns): haven't seen this) +statisticsChartActive: #7e7365 /* #596879d8 */; // sides in footer of statistic charts (NOTE(eqrfns): haven't seen this) + +// The following colors are not automatically exported into a theme as of Telegram Desktop 6.6.4. +// You can find them in the Telegram/lib_ui/ui/colors.palette file of the Telegram Desktop sources. +groupCallMenuBg: #2a241c /* #292d33 */; // group members list in group profile user last seen text with mouse over (NOTE(eqrfns): this is also used as a context menu background in media view) +groupCallMenuBgOver: #352e26 /* #343940 */; // group call popup menu with mouse over +groupCallMenuBgRipple: #403930 /* #3a4047 */; // group call popup menu ripple effect +groupCallMembersFg: #fff3e6 /* #ffffff */; // group call member name text (NOTE(eqrfns): this is used for the media view context menu text) +sideBarBadgeFg: #0e0a04 /* #ffffff */; // filters side bar badge text (NOTE(eqrfns): this is used for sidebar counters) +callBgOpaque: #211c14 /* #1b1f23 */; // phone call popup background +callBgButton: #0e0a047f /* #1b1f237f */; // phone call window control buttons bg (NOTE(eqrfns): this is used for the top bar with signal strength and random emojis) +callIconBg: #fff3e61f /* #ffffff1f */; // phone call mute mic and camera button background +callIconBgActive: #fff3e6e5 /* #ffffffe5 */; // phone call line busy cancel, muted mic and camera button background +callIconFgActive: #362f27 /* #222222 */; // phone call line busy cancel, muted mic and camera icon +callIconActiveRipple: #362f2719 /* #f1f1f1 */; // phone call line busy cancel, muted mic and camera ripple effect +groupCallBg: #211c14 /* #1a2026 */; // group call popup background +groupCallActiveFg: #f2be6e /* #4db8ff */; // group call active controls text (NOTE(eqrfns): this is used for regular calls too) +groupCallMembersBg: #2a241c /* #2c333d */; // group call members list background +groupCallMembersBgOver: #352e26 /* #323a45 */; // group call members list row with mouse over +groupCallMembersBgRipple: #403930 /* #39424f */; // group call member row ripple effect +groupCallMemberActiveIcon: #b6cea3 /* #8deb90 */; // group call active member icon +groupCallMemberActiveStatus: #b6cea3 /* #8deb90 */; // group call active member status text +groupCallMemberInactiveIcon: #aa9e8e /* #84888f */; // group call inactive member icon +groupCallMemberInactiveStatus: #dcc3a1 /* #61c0ff */; // group call inactive member status text +groupCallMemberMutedIcon: #ffb4ab /* #ed7372 */; // group call muted by admin member icon +groupCallMemberNotJoinedStatus: #d2c4b4 /* #91979e */; // group call non joined member status text +groupCallIconFg: #fff3e6 /* #ffffff */; // group call mute / settings / leave icon +// I'll leave these group call button colors as they are for now. +groupCallLive1: #0dcc39; // group call live button color1 +groupCallLive2: #0bb6bd; // group call live button color2 +groupCallMuted1: #0992ef; // group call muted button color1 +groupCallMuted2: #16ccfb; // group call muted button color2 +groupCallForceMutedBar1: #c65493; // group call force muted top bar color1 +groupCallForceMutedBar2: #7a6af1; // group call force muted top bar color2 +groupCallForceMutedBar3: #5f95e8; // group call force muted top bar color3 +groupCallForceMuted1: #4f9cff; // group call force muted button color1 +groupCallForceMuted2: #9b52e9; // group call force muted button color2 +groupCallForceMuted3: #eb5353; // group call force muted button color3 +groupCallLeaveBg: #f75c5c7f; // group call leave button background +groupCallLeaveBgRipple: #f75c5c9e; // group call leave button ripple effect +groupCallVideoTextFg: #ffffffe0; // group call text over video +groupCallVideoSubTextFg: #ffffffc0; // group call additional text over video +// NOTE(eqrfns): These "chart" colors are also used for syntax highlighting! +// Unfortunately, there is probably no way to make them look good with high-contrast themes in both inbox and outbox messages +// if using non-surface background (like secondary_container, as in my case) for outbox messages. +statisticsChartLineBlue: #bac3ff /* #327fe5 */; // represents blue color on statistical charts +statisticsChartLineGreen: #b7d085 /* #61c752 */; // represents green color on statistical charts +statisticsChartLineRed: #ffb5a0 /* #e05356 */; // represents red color on statistical charts +statisticsChartLineGolden: #f2bd6f /* #eba52d */; // represents golden color on statistical charts +statisticsChartLineLightblue: #8fcff3 /* #58a8ed */; // represents lightblue color on statistical charts +statisticsChartLineLightgreen: #c5cd7a /* #8fcf39 */; // represents lightgreen color on statistical charts +statisticsChartLineOrange: #f8bb7b /* #f28c39 */; // represents orange color on statistical charts +statisticsChartLineIndigo: #d3bcfb /* #7f79f3 */; // represents indigo color on statistical charts +statisticsChartLinePurple: #e2b8f5 /* #9f79e8 */; // represents purple color on statistical charts +statisticsChartLineCyan: #86d6c0 /* #40d0ca */; // represents cyan color on statistical charts +//botKbColor: windowBoldFgOver; // bot keyboard button text +//botKbPrimaryBg: #298acfcc; // bot keyboard Primary button background +//botKbDangerBg: #e05356cc; // bot keyboard Danger button background +//botKbSuccessBg: #61c752cc; // bot keyboard Success button background +//botKbInlinePrimaryBg: #378eaeb3; // inline bot keyboard Primary button background +//botKbInlineDangerBg: #c9543eb3; // inline bot keyboard Danger button background +//botKbInlineSuccessBg: #489d38b3; // inline bot keyboard Success button background +//boxDividerBg: windowBgOver; // gray divider in boxes and layers +//boxDividerFg: windowShadowFg; // gray divider shadow in boxes and layers +//paymentsTipActive: #01ad0f; // tip button text in payments checkout form +//dialogsArchiveFg: #525252 | dialogsNameFg; // chat list archive name text +//dialogsScamFg: dialogsDraftFg; // chat list scam label +//dialogsArchiveFgOver: #525252 | dialogsNameFgOver; // chat list archive name text with mouse over +//dialogsScamFgOver: dialogsDraftFgOver; // chat list scam label with mouse over +//dialogsScamFgActive: dialogsDraftFgActive; // chat list scam label for current (active) chat +//emojiSubIconFgActive: #666666 | windowBoldFg; // active emoji subcategory icon +//stickerPanPremium1: #5a99ff; // premium sticker pack icon gradient 1 +//stickerPanPremium2: #45b9f3; // premium sticker pack icon gradient 2 +//historyPeerSavedMessagesBg: historyPeer4UserpicBg; // saved messages userpic background +//historyPeerArchiveUserpicBg: dialogsUnreadBgMuted; // archive folder userpic background +//settingsIconBg1: #f06964; // red settings icon background +//settingsIconBg2: #6dc534; // green settings icon background +//settingsIconBg3: #ed9f20; // light-orange settings icon background +//settingsIconBg4: #56b3f5; // light-blue settings icon background +//settingsIconBg5: #7595ff; // dark-blue settings icon background +//settingsIconBg6: #b580e2; // purple settings icon background +//settingsIconBg8: #f2925b; // dark-orange settings icon background +//settingsIconBgArchive: #9da2b0; // archive main menu icon background +//settingsIconFg: #ffffff; // settings icon shape +//mapPointDrop: #fd4444; // geo location marker background +//mapPointDot: #ffffff; // geo location marker point +//overviewCheckBgActive: windowBgActive; // shared media / files / links checkbox background for selected rows +//mediaviewPlaybackIconRipple: #ffffff14; // video playback controls ripple effect +//mediaviewPipControlsFg: #ffffffd9; // picture-in-picture controls +//mediaviewPipControlsFgOver: #ffffff; // picture-in-picture controls with mouse over +//mediaviewPipPlaybackActive: #ffffffda; // picture-in-picture playback progress already played part +//mediaviewPipPlaybackInactive: #ffffff26; // picture-in-picture playback progress upcoming (not played yet) part +//outdatedFg: #ffffff; // operating system version is outdated bar text +//outdateSoonBg: #e08543; // operating system version is soon outdated bar background +//outdatedBg: #e05745; // operating system version is already outdated bar background +//spellUnderline: #ff000088 | attentionButtonFg; // misspelled words +//walletTitleBg: #121213; // wallet window title background when window is inactive +//walletTitleBgActive: walletTitleBg; // wallet window title background when window is active +//walletTitleButtonBg: walletTitleBg; // wallet window title minimize/maximize/restore button background when window is inactive (Windows only) +//walletTitleButtonFg: #5a5a5b; // wallet window title minimize/maximize/restore button icon when window is inactive (Windows only) +//walletTitleButtonBgOver: #373738; // wallet window title minimize/maximize/restore button background with mouse over when window is inactive (Windows only) +//walletTitleButtonFgOver: #747475; // wallet window title minimize/maximize/restore button icon with mouse over when window is inactive (Windows only) +//walletTitleButtonBgActive: walletTitleButtonBg; // wallet window title minimize/maximize/restore button background when window is active (Windows only) +//walletTitleButtonFgActive: walletTitleButtonFg; // wallet window title minimize/maximize/restore button icon when window is active (Windows only) +//walletTitleButtonBgActiveOver: walletTitleButtonBgOver; // wallet window title minimize/maximize/restore button background with mouse over when window is active (Windows only) +//walletTitleButtonFgActiveOver: walletTitleButtonFgOver; // wallet window title minimize/maximize/restore button icon with mouse over when window is active (Windows only) +//walletTitleButtonCloseBg: walletTitleButtonBg; // wallet window title close button background when window is inactive (Windows only) +//walletTitleButtonCloseFg: walletTitleButtonFg; // wallet window title close button icon when window is inactive (Windows only) +//walletTitleButtonCloseBgOver: titleButtonCloseBgOver; // wallet window title close button background with mouse over when window is inactive (Windows only) +//walletTitleButtonCloseFgOver: titleButtonCloseFgOver; // wallet window title close button icon with mouse over when window is inactive (Windows only) +//walletTitleButtonCloseBgActive: walletTitleButtonCloseBg; // wallet window title close button background when window is active (Windows only) +//walletTitleButtonCloseFgActive: walletTitleButtonCloseFg; // wallet window title close button icon when window is active (Windows only) +//walletTitleButtonCloseBgActiveOver: walletTitleButtonCloseBgOver; // wallet window title close button background with mouse over when window is active (Windows only) +//walletTitleButtonCloseFgActiveOver: walletTitleButtonCloseFgOver; // wallet window title close button icon with mouse over when window is active (Windows only) +//walletTopBg: #1e1f21; // wallet top part background +//walletBalanceFg: #ffffff; // wallet balance text +//walletSubBalanceFg: #f9f9f9; // wallet balance label text +//walletTopLabelFg: #999999; // wallet top updated label text +//walletTopIconFg: walletTopLabelFg; // wallet top refresh and menu icons +//walletTopIconRipple: #ffffff12; // wallet top menu icon ripple effect +//songCoverOverlayFg: #00000066; // song cover overlay +//photoEditorItemBaseHandleFg: #3ccaef; // photo editor handle circle +//premiumButtonBg1: #55a5ff; // upgrade to premium button gradient 1 +//premiumButtonBg2: #a767ff; // upgrade to premium button gradient 2 +//premiumButtonBg3: #db5c9d; // upgrade to premium button gradient 3 +//premiumButtonFg: #ffffff; // upgrade to premium button text +//premiumIconBg1: #f38926; // icon in premium settings gradient 1 +//premiumIconBg2: #e44456; // icon in premium settings gradient 2 +//premiumIconBg3: #4acd43; // icon in premium settings gradient 3 +//creditsBg1: #ffb222; // credits icon gradient 1, normal +//creditsBg2: #FFD951; // credits icon gradient 2, light +//creditsBg3: #f0b400; // credits icon gradient 3, dark +//creditsFg: #ba7000; // credits text on light background +//creditsStroke: #da8735; // credits icon stroke +//currencyFg: #168acd; // currency icon, blue +//rankAdminFg: #49a355; // admin badge text and pill, green +//rankOwnerFg: #956ac8; // owner badge text and pill, purple +//rankUserFg: windowSubTextFg; // regular user badge text, gray diff --git a/config/termusic/tui.toml b/config/termusic/tui.toml deleted file mode 100644 index d89a490..0000000 --- a/config/termusic/tui.toml +++ /dev/null @@ -1,172 +0,0 @@ -version = "2" -com = "same" - -[behavior] -quit_server_on_exit = false -confirm_quit = false - -[coverart] -align = "bottom right" -size_scale = 0 -hidden = false - -[style.library] -foreground_color = "Foreground" -background_color = "Background" -border_color = "Green" -highlight_color = "LightWhite" -highlight_symbol = ">" - -[style.playlist] -foreground_color = "Foreground" -background_color = "Background" -border_color = "Green" -highlight_color = "LightWhite" -highlight_symbol = "!" -current_track_symbol = "!" -use_loop_mode_symbol = true - -[style.lyric] -foreground_color = "Foreground" -background_color = "Background" -border_color = "Green" - -[style.progress] -foreground_color = "LightBlack" -background_color = "Background" -border_color = "Green" - -[style.important_popup] -foreground_color = "Yellow" -background_color = "Reset" -border_color = "Yellow" - -[style.fallback] -foreground_color = "Foreground" -background_color = "Reset" -border_color = "Blue" -highlight_color = "LightYellow" - -[theme] -name = "Native" -author = "Termusic Developers" - -[theme.primary] -background = "native" -foreground = "native" - -[theme.cursor] -text = "native" -cursor = "native" - -[theme.normal] -black = "native" -red = "native" -green = "native" -yellow = "native" -blue = "native" -magenta = "native" -cyan = "native" -white = "native" - -[theme.bright] -black = "native" -red = "native" -green = "native" -yellow = "native" -blue = "native" -magenta = "native" -cyan = "native" -white = "native" - -[keys] -escape = "escape" -quit = "q" - -[keys.view] -view_library = "1" -view_database = "2" -view_podcasts = "3" -open_config = "shift+C" -open_help = "control+h" - -[keys.navigation] -up = "k" -down = "j" -left = "h" -right = "l" -goto_top = "g" -goto_bottom = "shift+G" - -[keys.global_player] -toggle_pause = "space" -next_track = "n" -previous_track = "shift+N" -volume_up = "+" -volume_down = "-" -seek_forward = "f" -seek_backward = "b" -speed_up = "control+f" -speed_down = "control+b" -toggle_prefetch = "control+g" -save_playlist = "control+s" - -[keys.global_lyric] -adjust_offset_forwards = "shift+F" -adjust_offset_backwards = "shift+B" -cycle_frames = "shift+T" - -[keys.library] -load_track = "l" -load_dir = "shift+L" -delete = "d" -yank = "y" -paste = "p" -cycle_root = "o" -add_root = "a" -remove_root = "shift+A" -search = "/" -youtube_search = "s" -open_tag_editor = "t" - -[keys.playlist] -delete = "d" -delete_all = "shift+D" -shuffle = "r" -cycle_loop_mode = "m" -play_selected = "l" -search = "/" -swap_up = "shift+K" -swap_down = "shift+J" -add_random_songs = "s" -add_random_album = "shift+S" - -[keys.database] -add_selected = "l" -add_all = "shift+L" - -[keys.podcast] -search = "s" -mark_played = "m" -mark_all_played = "shift+M" -refresh_feed = "r" -refresh_all_feeds = "shift+R" -download_episode = "d" -delete_local_episode = "shift+D" -delete_feed = "x" -delete_all_feeds = "shift+X" - -[keys.adjust_cover_art] -move_left = "control+shift+arrowleft" -move_right = "control+shift+arrowright" -move_up = "control+shift+arrowup" -move_down = "control+shift+arrowdown" -increase_size = "control+shift+pageup" -decrease_size = "control+shift+pagedown" -toggle_hide = "control+shift+end" - -[keys.config] -save = "control+s" - -[ytdlp] -extra_args = "" diff --git a/config/tmux/colors.conf b/config/tmux/colors.conf new file mode 100644 index 0000000..49b5745 --- /dev/null +++ b/config/tmux/colors.conf @@ -0,0 +1,18 @@ +# Auto-generated by Matugen + +set -g status-bg "#0e0a04" +set -gq @thm_bar_bg "#0e0a04" + +set -gq @thm_bg "#18130b" +set -gq @thm_fg "#fff3e6" +set -gq @thm_primary "#f2be6e" +set -gq @thm_inverse_primary "#6f4a00" +set -gq @thm_surface_low "#211c14" +set -gq @thm_surface "#2a241c" +set -gq @thm_surface_variant "#352e26" +set -gq @thm_outline "#7e7365" +set -gq @thm_text_variant "#d2c4b4" + +# Some variables/options must be re-set, which can be done here +set -g status-style "bg=#{@thm_bg},fg=#{@thm_fg}" +set -g window-active-style "bg=#{@thm_bg},fg=#{@thm_fg}" diff --git a/config/tmux/tmux.conf b/config/tmux/tmux.conf index 353f033..851906a 100644 --- a/config/tmux/tmux.conf +++ b/config/tmux/tmux.conf @@ -26,3 +26,5 @@ bind -n M-p breakp bind -n M-c kill-pane bind -n M-t choose-tree -wZ bind -n M-q confirm-before -p "Kill entire window? (y/n)" kill-window +source-file ~/.config/tmux/colors.conf + diff --git a/config/walker/config.toml b/config/walker/config.toml index 76a7c93..86ba401 100644 --- a/config/walker/config.toml +++ b/config/walker/config.toml @@ -6,7 +6,7 @@ single_click_activation = true # activate items with a single click opposed to selection_wrap = false # wrap list if at bottom or top global_argument_delimiter = "#" # query: firefox#https://benz.dev => part after delimiter will be ignored when querying. this should be the same as in the elephant config exact_search_prefix = "'" # disable fuzzy searching -theme = "zzz" # theme to use +theme = "matugen" # theme to use disable_mouse = false # disable mouse (on input and list only) debug = false # enables debug printing for some stuff, f.e. keybinds page_jump_items = 10 # number of items to skip with Page Up/Down diff --git a/config/walker/themes/default/layout.xml b/config/walker/themes/default/layout.xml index 070782b..1344603 100644 --- a/config/walker/themes/default/layout.xml +++ b/config/walker/themes/default/layout.xml @@ -17,7 +17,7 @@ center center 600 - 570 + 650 + horizontal + 10 + + + + 2 + + + + + + large + + + + + + vertical + true + true + true + 0 + + + + end + true + true + 0 + + + + + + end + true + true + 0 + 0 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_actionsmenu.xml b/config/walker/themes/matugen/item_actionsmenu.xml new file mode 100644 index 0000000..815efd3 --- /dev/null +++ b/config/walker/themes/matugen/item_actionsmenu.xml @@ -0,0 +1,74 @@ + + + + + + horizontal + 10 + + + + 2 + + + + + + large + + + + + + horizontal + true + true + true + 0 + + + + end + true + true + true + 0 + + + + + + end + true + true + 0 + 0.5 + + + + + + + + + + + + + + + + + diff --git a/config/walker/themes/matugen/item_archlinuxpkgs.xml b/config/walker/themes/matugen/item_archlinuxpkgs.xml new file mode 100644 index 0000000..eee87ff --- /dev/null +++ b/config/walker/themes/matugen/item_archlinuxpkgs.xml @@ -0,0 +1,57 @@ + + + + + + horizontal + 10 + + + + vertical + true + true + true + 0 + + + + false + true + true + 0 + + + + + + true + true + true + 0 + 0 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_bookmarks.xml b/config/walker/themes/matugen/item_bookmarks.xml new file mode 100644 index 0000000..4cd8292 --- /dev/null +++ b/config/walker/themes/matugen/item_bookmarks.xml @@ -0,0 +1,81 @@ + + + + + + horizontal + 10 + + + + 2 + + + + + + large + + + + + + 48 + + + + + + vertical + true + true + 0 + + + + true + true + true + true + 0 + + + + + + true + true + true + 0 + 0 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_calc.xml b/config/walker/themes/matugen/item_calc.xml new file mode 100644 index 0000000..03294c1 --- /dev/null +++ b/config/walker/themes/matugen/item_calc.xml @@ -0,0 +1,65 @@ + + + + + + horizontal + 10 + + + + 48 + + + + + + vertical + true + true + true + 0 + + + + false + true + true + 0 + + + + + + true + true + true + 0 + 0 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_clipboard.xml b/config/walker/themes/matugen/item_clipboard.xml new file mode 100644 index 0000000..d1ed622 --- /dev/null +++ b/config/walker/themes/matugen/item_clipboard.xml @@ -0,0 +1,61 @@ + + + + + + horizontal + 10 + + + vertical + 5 + + + + vertical + true + true + true + 0 + + + + true + 0 + 1 + true + 3 + true + + + + + + 0 + + + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_dmenu.xml b/config/walker/themes/matugen/item_dmenu.xml new file mode 100644 index 0000000..682bbe1 --- /dev/null +++ b/config/walker/themes/matugen/item_dmenu.xml @@ -0,0 +1,46 @@ + + + + + + horizontal + 10 + + + + vertical + true + true + true + 0 + + + + true + 0 + 1 + 3 + true + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_dnfpackages.xml b/config/walker/themes/matugen/item_dnfpackages.xml new file mode 100644 index 0000000..eee87ff --- /dev/null +++ b/config/walker/themes/matugen/item_dnfpackages.xml @@ -0,0 +1,57 @@ + + + + + + horizontal + 10 + + + + vertical + true + true + true + 0 + + + + false + true + true + 0 + + + + + + true + true + true + 0 + 0 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_files.xml b/config/walker/themes/matugen/item_files.xml new file mode 100644 index 0000000..c5686ec --- /dev/null +++ b/config/walker/themes/matugen/item_files.xml @@ -0,0 +1,66 @@ + + + + + + horizontal + 10 + + + + large + + + + + + vertical + true + true + true + 0 + + + + false + true + true + 0 + 1 + + + + + + false + true + true + 0 + 1 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_providerlist.xml b/config/walker/themes/matugen/item_providerlist.xml new file mode 100644 index 0000000..b06e437 --- /dev/null +++ b/config/walker/themes/matugen/item_providerlist.xml @@ -0,0 +1,73 @@ + + + + + + horizontal + 10 + + + + 2 + + + + + + large + + + + + + horizontal + true + true + true + 5 + + + + false + true + true + 0 + + + + + + end + true + true + 0 + 0.5 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_symbols.xml b/config/walker/themes/matugen/item_symbols.xml new file mode 100644 index 0000000..09bb53a --- /dev/null +++ b/config/walker/themes/matugen/item_symbols.xml @@ -0,0 +1,53 @@ + + + + + + horizontal + 10 + + + + 2 + + + + + + vertical + true + true + true + 0 + + + + false + true + true + 0 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/item_symbols_grid.xml b/config/walker/themes/matugen/item_symbols_grid.xml new file mode 100644 index 0000000..3c586e7 --- /dev/null +++ b/config/walker/themes/matugen/item_symbols_grid.xml @@ -0,0 +1,38 @@ + + + + + + vertical + 10 + + + + + + + + + true + true + + + + true + true + 0.5 + 2 + + + + + + diff --git a/config/walker/themes/matugen/item_todo.xml b/config/walker/themes/matugen/item_todo.xml new file mode 100644 index 0000000..7a7a1d7 --- /dev/null +++ b/config/walker/themes/matugen/item_todo.xml @@ -0,0 +1,53 @@ + + + + + + horizontal + 10 + + + + 48 + + + + + + vertical + true + true + 0 + + + + true + true + true + true + 0 + + + + + + false + true + 0 + 0 + + + + + + diff --git a/config/walker/themes/matugen/item_unicode.xml b/config/walker/themes/matugen/item_unicode.xml new file mode 100644 index 0000000..a93cbab --- /dev/null +++ b/config/walker/themes/matugen/item_unicode.xml @@ -0,0 +1,53 @@ + + + + + + horizontal + 10 + + + + 3 + + + + + + vertical + true + true + true + 0 + + + + false + true + true + 0 + + + + + + + + false + center + 0 + 0.5 + + + + diff --git a/config/walker/themes/matugen/keybind.xml b/config/walker/themes/matugen/keybind.xml new file mode 100644 index 0000000..b347a0c --- /dev/null +++ b/config/walker/themes/matugen/keybind.xml @@ -0,0 +1,32 @@ + + + + + + vertical + + + + + + + + + + + + + 5 + + + + + diff --git a/config/walker/themes/matugen/layout.xml b/config/walker/themes/matugen/layout.xml new file mode 100644 index 0000000..1344603 --- /dev/null +++ b/config/walker/themes/matugen/layout.xml @@ -0,0 +1,160 @@ + + + + + + true + Walker + + + + hidden + horizontal + center + center + 600 + 650 + + + + vertical + true + true + 10 + + + + hidden + horizontal + fill + true + true + + + + fill + true + true + + + + + + + + horizontal + 10 + + + + Waiting for elephant... + true + true + false + 0.5 + + + + + + No Results + true + true + 0.5 + + + + + + false + true + true + true + 500 + 500 + 400 + true + true + automatic + automatic + + + + 1 + 1 + false + + + + + + + + + + + + + + true + 10 + + + + 10 + + + + + + true + end + 10 + + + + + + + + + 0 + false + + + + + + + + diff --git a/config/walker/themes/matugen/preview.xml b/config/walker/themes/matugen/preview.xml new file mode 100644 index 0000000..f8d6c74 --- /dev/null +++ b/config/walker/themes/matugen/preview.xml @@ -0,0 +1,20 @@ + + + + + + 300 + 500 + + + + true + true + + + + diff --git a/config/walker/themes/matugen/style.css b/config/walker/themes/matugen/style.css new file mode 100644 index 0000000..74e6abe --- /dev/null +++ b/config/walker/themes/matugen/style.css @@ -0,0 +1,193 @@ +@import "colors.css"; + +* { + all: unset; +} + +popover { + background: var(--window_bg_color); + border: 4px solid var(--accent_fg_color); + border-radius: 15px; + padding: 10px; +} + +.normal-icons { + -gtk-icon-size: 16px; +} + +.large-icons { + -gtk-icon-size: 32px; +} + +scrollbar { + opacity: 0; +} + +.box-wrapper { + box-shadow: + 0 19px 38px rgba(0, 0, 0, 0), + 0 15px 12px rgba(0, 0, 0, 0); + background: var(--window_bg_color); + padding: 20px; + border-radius: 20px; + border: 4px solid var(--accent_bg_color); +} + +.preview-box, +.elephant-hint, +.placeholder { + color: @theme_fg_color; +} + +.box {} + +.search-container { + border-radius: 10px; +} + +.input placeholder { + opacity: 1.0; +} + +.input selection { + background: var(--hover_fg_color); +} + +.input { + caret-color: @theme_fg_color; + background: (var(--window_bg_color)); + padding: 10px; + color: @theme_fg_color; +} + +.input:focus, +.input:active {} + +.content-container {} + +.placeholder {} + +.scroll {} + +.list { + color: @theme_fg_color; +} + +child {} + +.item-box { + border-radius: 10px; + padding: 10px; +} + +.item-quick-activation { + background: var(--accent_bg_color); + border-radius: 10px; + padding: 10px; +} + +/* child:hover .item-box, */ +child:selected .item-box, +row:selected .item-box { + background: var(--hover_fg_color); +} + +.item-text-box {} + +.item-subtext { + font-size: 12px; + opacity: 1.0; +} + +.providerlist .item-subtext { + font-size: unset; + opacity: 1.0; +} + +.item-image-text { + font-size: 28px; +} + +.preview { + border: 4px solid var(--accent_bg_color); + /* padding: 10px; */ + border-radius: 10px; + color: @theme_fg_color; +} + +.calc .item-text { + font-size: 24px; +} + +.calc .item-subtext {} + +.symbols .item-image { + font-size: 24px; +} + +.todo.done .item-text-box { + opacity: 1.0; +} + +.todo.urgent { + font-size: 24px; +} + +.todo.active { + font-weight: bold; +} + +.bluetooth.disconnected { + opacity: 0.8; +} + +.preview .large-icons { + -gtk-icon-size: 64px; +} + +.keybinds { + padding-top: 10px; + border-top: 1px solid lighter var(--window_bg_color); + font-size: 12px; + color: @theme_fg_color; +} + +.global-keybinds {} + +.item-keybinds {} + +.keybind {} + +.keybind-button { + opacity: 0.5; +} + +.keybind-button:hover { + opacity: 0.75; +} + +.keybind-bind { + text-transform: lowercase; + opacity: 0.35; +} + +.keybind-label { + padding: 2px 4px; + border-radius: 4px; + border: 1px solid @theme_fg_color; +} + +.error { + padding: 10px; + background: var(--error_bg_color); + color: @error_fg_color; +} + +:not(.calc).current { + font-style: italic; +} + +.preview-content.archlinuxpkgs, +.preview-content.dnfpackages { + font-family: IosevkaTerm Nerd Font; +} diff --git a/config/walker/themes/zzz/layout.xml b/config/walker/themes/zzz/layout.xml index 070782b..1344603 100644 --- a/config/walker/themes/zzz/layout.xml +++ b/config/walker/themes/zzz/layout.xml @@ -17,7 +17,7 @@ center center 600 - 570 + 650