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 0000000..680d9c3
Binary files /dev/null and b/config/scripts/niri/ru.png differ
diff --git a/config/scripts/niri/us.png b/config/scripts/niri/us.png
new file mode 100644
index 0000000..363a2f2
Binary files /dev/null and b/config/scripts/niri/us.png differ
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 0000000..1c4cd10
Binary files /dev/null and b/config/telegram/matugen.tdesktop-theme differ
diff --git a/config/telegram/matugen/background.jpg b/config/telegram/matugen/background.jpg
new file mode 100644
index 0000000..8a4165a
Binary files /dev/null and b/config/telegram/matugen/background.jpg differ
diff --git a/config/telegram/matugen/background.svg b/config/telegram/matugen/background.svg
new file mode 100644
index 0000000..ef5d674
--- /dev/null
+++ b/config/telegram/matugen/background.svg
@@ -0,0 +1 @@
+
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
+
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