diff --git a/dot_config/alacritty/alacritty.toml b/dot_config/alacritty/alacritty.toml.tmpl similarity index 57% rename from dot_config/alacritty/alacritty.toml rename to dot_config/alacritty/alacritty.toml.tmpl index 2dc2751..afb3794 100644 --- a/dot_config/alacritty/alacritty.toml +++ b/dot_config/alacritty/alacritty.toml.tmpl @@ -1,5 +1,5 @@ [general] -import = ["~/.config/alacritty/themes/apex-neon.toml"] +import = ["~/.config/alacritty/themes/{{ .chezmoi.config.data.theme }}.toml"] live_config_reload = true ipc_socket = true @@ -9,8 +9,8 @@ opacity = 0.7 padding = { x = 4, y = 4 } [font] -normal = { family = "Inconsolata Nerd Font Mono", style = "Regular" } -size = 9 +normal = { family = "GeistMono Nerd Font", style = "Regular" } +size = 8 [mouse] hide_when_typing = true diff --git a/dot_config/alacritty/themes/apex-aeon.toml b/dot_config/alacritty/themes/apex-aeon.toml new file mode 100644 index 0000000..c711f43 --- /dev/null +++ b/dot_config/alacritty/themes/apex-aeon.toml @@ -0,0 +1,63 @@ +# APEX AEON — Alacritty theme (colors only) + +[colors.primary] +background = "#f5f5f5" +foreground = "#0a0a0a" +dim_foreground = "#737373" +bright_foreground = "#ffffff" + +[colors.cursor] +text = "#0a0a0a" +cursor = "#ff0044" + +[colors.vi_mode_cursor] +text = "#0a0a0a" +cursor = "#007a88" + +[colors.selection] +text = "#0a0a0a" +background = "#ff0044" + +[colors.search.matches] +foreground = "#0a0a0a" +background = "#ff0044" + +[colors.search.focused_match] +foreground = "#0a0a0a" +background = "#d18f00" + +[colors.hints.start] +foreground = "#0a0a0a" +background = "#d18f00" + +[colors.hints.end] +foreground = "#0a0a0a" +background = "#007a88" + +[colors.line_indicator] +foreground = "None" +background = "None" + +[colors.footer_bar] +foreground = "#0a0a0a" +background = "#e8e8e8" + +[colors.normal] +black = "#0a0a0a" +red = "#ff0044" +green = "#00b377" +yellow = "#d18f00" +blue = "#007a88" +magenta = "#7a3cff" +cyan = "#007a88" +white = "#f5f5f5" + +[colors.bright] +black = "#737373" +red = "#ff4d6d" +green = "#33d6a6" +yellow = "#ffbf40" +blue = "#33bccc" +magenta = "#a680ff" +cyan = "#33bccc" +white = "#ffffff" \ No newline at end of file diff --git a/dot_config/alacritty/themes/apex-neon.toml b/dot_config/alacritty/themes/apex-neon.toml index 91f7bef..edf015e 100644 --- a/dot_config/alacritty/themes/apex-neon.toml +++ b/dot_config/alacritty/themes/apex-neon.toml @@ -43,21 +43,21 @@ foreground = "#ededed" background = "#141414" [colors.normal] -black = "#050505" -red = "#ff0044" -green = "#00ff99" -yellow = "#ffb700" -blue = "#00eaff" +black = "#050505" +red = "#ff0044" +green = "#00ff99" +yellow = "#ffb700" +blue = "#00eaff" magenta = "#9d00ff" -cyan = "#00eaff" -white = "#ededed" +cyan = "#00eaff" +white = "#ededed" [colors.bright] -black = "#262626" -red = "#ff8899" -green = "#2bffb2" -yellow = "#ffd24d" -blue = "#5af3ff" +black = "#737373" +red = "#ff8899" +green = "#2bffb2" +yellow = "#ffd24d" +blue = "#5af3ff" magenta = "#c84dff" -cyan = "#5af3ff" -white = "#ffffff" +cyan = "#5af3ff" +white = "#ffffff" \ No newline at end of file diff --git a/dot_config/btop/btop.conf b/dot_config/btop/btop.conf.tmpl similarity index 99% rename from dot_config/btop/btop.conf rename to dot_config/btop/btop.conf.tmpl index fe05d75..024c635 100644 --- a/dot_config/btop/btop.conf +++ b/dot_config/btop/btop.conf.tmpl @@ -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 = "/home/mpuchstein/.config/btop/themes/apex-neon.theme" +color_theme = "{{ .chezmoi.homeDir }}/.config/btop/themes/{{ .chezmoi.config.data.theme }}.theme" #* If the theme set background should be shown, set to False if you want terminal background transparency. theme_background = true diff --git a/dot_config/btop/themes/apex-aeon.theme b/dot_config/btop/themes/apex-aeon.theme new file mode 100644 index 0000000..884bf10 --- /dev/null +++ b/dot_config/btop/themes/apex-aeon.theme @@ -0,0 +1,89 @@ +# Apex Aeon — Btop Theme +# DNA: State over Decoration + +# Main background, empty for terminal default, black for dark themes +theme[main_bg]="#f5f5f5" + +# Main text color +theme[main_fg]="#0a0a0a" + +# Title color for boxes +theme[title]="#0a0a0a" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#ff0044" + +# Background color of selected item in processes box +theme[selected_bg]="#ff0044" + +# Foreground color of selected item in processes box +theme[selected_fg]="#0a0a0a" + +# Color of inactive/disabled text +theme[inactive_fg]="#737373" + +# Color of text appearing on top of graphs, i.e. usage percentage +theme[graph_text]="#737373" + +# Background color of the percentage meters +theme[meter_bg]="#e8e8e8" + +# Misc colors for processes box including mini cpu graphs, used memory percentage, and entries filter +theme[proc_misc]="#007a88" + +# Cpu box outline color +theme[cpu_box]="#737373" + +# Memory box outline color +theme[mem_box]="#737373" + +# Net box outline color +theme[net_box]="#737373" + +# Processes box outline color +theme[proc_box]="#737373" + +# Box divider line and small boxes line color +theme[div_line]="#737373" + +# Temperature graph colors +theme[temp_start]="#007a88" +theme[temp_mid]="#7a3cff" +theme[temp_end]="#ff0044" + +# CPU graph colors +theme[cpu_start]="#007a88" +theme[cpu_mid]="#7a3cff" +theme[cpu_end]="#ff0044" + +# Mem graph colors +theme[free_start]="#00b377" +theme[free_mid]="#d18f00" +theme[free_end]="#ff0044" + +theme[cached_start]="#007a88" +theme[cached_mid]="#7a3cff" +theme[cached_end]="#ff0044" + +theme[available_start]="#00b377" +theme[available_mid]="#d18f00" +theme[available_end]="#ff0044" + +theme[used_start]="#007a88" +theme[used_mid]="#7a3cff" +theme[used_end]="#ff0044" + +# Download graph colors +theme[download_start]="#007a88" +theme[download_mid]="#7a3cff" +theme[download_end]="#ff0044" + +# Upload graph colors +theme[upload_start]="#007a88" +theme[upload_mid]="#7a3cff" +theme[upload_end]="#ff0044" + +# Process path color +theme[process_start]="#007a88" +theme[process_mid]="#7a3cff" +theme[process_end]="#ff0044" \ No newline at end of file diff --git a/dot_config/btop/themes/apex-neon.theme b/dot_config/btop/themes/apex-neon.theme new file mode 100644 index 0000000..a430d27 --- /dev/null +++ b/dot_config/btop/themes/apex-neon.theme @@ -0,0 +1,89 @@ +# Apex Neon — Btop Theme +# DNA: State over Decoration + +# Main background, empty for terminal default, black for dark themes +theme[main_bg]="#050505" + +# Main text color +theme[main_fg]="#ededed" + +# Title color for boxes +theme[title]="#ededed" + +# Highlight color for keyboard shortcuts +theme[hi_fg]="#ff0044" + +# Background color of selected item in processes box +theme[selected_bg]="#ff0044" + +# Foreground color of selected item in processes box +theme[selected_fg]="#050505" + +# Color of inactive/disabled text +theme[inactive_fg]="#737373" + +# Color of text appearing on top of graphs, i.e. usage percentage +theme[graph_text]="#737373" + +# Background color of the percentage meters +theme[meter_bg]="#141414" + +# Misc colors for processes box including mini cpu graphs, used memory percentage, and entries filter +theme[proc_misc]="#00eaff" + +# Cpu box outline color +theme[cpu_box]="#262626" + +# Memory box outline color +theme[mem_box]="#262626" + +# Net box outline color +theme[net_box]="#262626" + +# Processes box outline color +theme[proc_box]="#262626" + +# Box divider line and small boxes line color +theme[div_line]="#262626" + +# Temperature graph colors +theme[temp_start]="#00eaff" +theme[temp_mid]="#9d00ff" +theme[temp_end]="#ff0044" + +# CPU graph colors +theme[cpu_start]="#00eaff" +theme[cpu_mid]="#9d00ff" +theme[cpu_end]="#ff0044" + +# Mem graph colors +theme[free_start]="#00ff99" +theme[free_mid]="#ffb700" +theme[free_end]="#ff0044" + +theme[cached_start]="#00eaff" +theme[cached_mid]="#9d00ff" +theme[cached_end]="#ff0044" + +theme[available_start]="#00ff99" +theme[available_mid]="#ffb700" +theme[available_end]="#ff0044" + +theme[used_start]="#00eaff" +theme[used_mid]="#9d00ff" +theme[used_end]="#ff0044" + +# Download graph colors +theme[download_start]="#00eaff" +theme[download_mid]="#9d00ff" +theme[download_end]="#ff0044" + +# Upload graph colors +theme[upload_start]="#00eaff" +theme[upload_mid]="#9d00ff" +theme[upload_end]="#ff0044" + +# Process path color +theme[process_start]="#00eaff" +theme[process_mid]="#9d00ff" +theme[process_end]="#ff0044" \ No newline at end of file diff --git a/dot_config/btop/themes/empty_apex-neon.theme b/dot_config/btop/themes/empty_apex-neon.theme deleted file mode 100644 index 7503e6e..0000000 --- a/dot_config/btop/themes/empty_apex-neon.theme +++ /dev/null @@ -1,63 +0,0 @@ -# APEX NEON - BTOP THEME -# Bashtop theme with #050505 background and Razor Red accents - -theme[main_bg]="#050505" - -# Main text color -theme[main_fg]="#ededed" - -# Title color for boxes -theme[title]="#ededed" - -# Highlight color for keyboard shortcuts -theme[hi_fg]="#ff0044" - -# Background color of selected item in processes box -theme[selected_bg]="#00eaff" - -# Foreground color of selected item in processes box -theme[selected_fg]="#050505" - -# Color of inactive/disabled text -theme[inactive_fg]="#404040" - -# Color of text appearing on top of graphs (i.e uptime, network graph) -theme[graph_text]="#ededed" - -# Misc colors for processes box including mini cpu graphs, details memory graph and details status text -theme[proc_misc]="#00eaff" - -# Cpu box outline color -theme[cpu_box]="#ff0044" - -# Memory box outline color -theme[mem_box]="#ff0044" - -# Net box outline color -theme[net_box]="#ff0044" - -# Processes box outline color -theme[proc_box]="#ff0044" - -# Box divider line and small boxes line color -theme[div_line]="#262626" - -# Temperature graph colors (Green -> Yellow -> Red) -theme[temp_start]="#00ff99" -theme[temp_mid]="#ffb700" -theme[temp_end]="#ff0044" - -# CPU graph colors (Teal -> Cyan -> Purple) -theme[cpu_start]="#00eaff" -theme[cpu_mid]="#0088cc" -theme[cpu_end]="#9d00ff" - -# Upload graph colors (start -> mid -> end) -theme[upload_start]="#9d00ff" -theme[upload_mid]="#ff0044" -theme[upload_end]="#ff0044" - -# Download graph colors (start -> mid -> end) -theme[download_start]="#00eaff" -theme[download_mid]="#0088cc" -theme[download_end]="#0088cc" diff --git a/dot_config/fuzzel/fuzzel.ini b/dot_config/fuzzel/fuzzel.ini.tmpl similarity index 97% rename from dot_config/fuzzel/fuzzel.ini rename to dot_config/fuzzel/fuzzel.ini.tmpl index 9dcf46c..8cc124a 100644 --- a/dot_config/fuzzel/fuzzel.ini +++ b/dot_config/fuzzel/fuzzel.ini.tmpl @@ -55,7 +55,7 @@ inner-pad=20 # enable-mouse=yes -include=~/.config/fuzzel/themes/apex-neon.ini +include=~/.config/fuzzel/themes/{{ .chezmoi.config.data.theme }}.ini # include=~/.config/fuzzel/themes/owl.ini #[colors] # background=fdf6e3ff diff --git a/dot_config/fuzzel/themes/apex-aeon.ini b/dot_config/fuzzel/themes/apex-aeon.ini new file mode 100644 index 0000000..3027163 --- /dev/null +++ b/dot_config/fuzzel/themes/apex-aeon.ini @@ -0,0 +1,15 @@ +# Apex Aeon — Fuzzel Theme +# DNA: State over Decoration + +[colors] +background=f5f5f5ff +text=0a0a0aff +match=007a88ff +selection=ff0044ff +selection-text=0a0a0aff +selection-match=007a88ff +border=007a88ff + +[border] +width=2 +radius=0 \ No newline at end of file diff --git a/dot_config/ghostty/config.tmpl b/dot_config/ghostty/config.tmpl new file mode 100644 index 0000000..4771fd0 --- /dev/null +++ b/dot_config/ghostty/config.tmpl @@ -0,0 +1 @@ +theme = "{{ .chezmoi.config.data.theme }}" diff --git a/dot_config/ghostty/themes/apex-aeon b/dot_config/ghostty/themes/apex-aeon new file mode 100644 index 0000000..f77e8e9 --- /dev/null +++ b/dot_config/ghostty/themes/apex-aeon @@ -0,0 +1,26 @@ +# Apex Aeon - Ghostty theme +# DNA: State over Decoration + +background = #f5f5f5 +foreground = #0a0a0a + +cursor-color = #ff0044 +selection-background = #ff0044 +selection-foreground = #0a0a0a + +palette = 0=#0a0a0a +palette = 1=#ff0044 +palette = 2=#00b377 +palette = 3=#d18f00 +palette = 4=#007a88 +palette = 5=#7a3cff +palette = 6=#007a88 +palette = 7=#f5f5f5 +palette = 8=#737373 +palette = 9=#ff4d6d +palette = 10=#33d6a6 +palette = 11=#ffbf40 +palette = 12=#33bccc +palette = 13=#a680ff +palette = 14=#33bccc +palette = 15=#ffffff \ No newline at end of file diff --git a/dot_config/ghostty/themes/apex-neon b/dot_config/ghostty/themes/apex-neon new file mode 100644 index 0000000..3e2f37a --- /dev/null +++ b/dot_config/ghostty/themes/apex-neon @@ -0,0 +1,26 @@ +# Apex Neon - Ghostty theme +# DNA: State over Decoration + +background = #050505 +foreground = #ededed + +cursor-color = #ff0044 +selection-background = #ff0044 +selection-foreground = #050505 + +palette = 0=#050505 +palette = 1=#ff0044 +palette = 2=#00ff99 +palette = 3=#ffb700 +palette = 4=#00eaff +palette = 5=#9d00ff +palette = 6=#00eaff +palette = 7=#ededed +palette = 8=#737373 +palette = 9=#ff8899 +palette = 10=#2bffb2 +palette = 11=#ffd24d +palette = 12=#5af3ff +palette = 13=#c84dff +palette = 14=#5af3ff +palette = 15=#ffffff \ No newline at end of file diff --git a/dot_config/gtk-3.0/settings.ini b/dot_config/gtk-3.0/settings.ini index 029a1a9..513c0d1 100644 --- a/dot_config/gtk-3.0/settings.ini +++ b/dot_config/gtk-3.0/settings.ini @@ -1,7 +1,7 @@ [Settings] gtk-theme-name=Adwaita gtk-icon-theme-name=Adwaita -gtk-font-name=InconsolataGo Nerd Font Mono 11 +gtk-font-name=GeistMono Nerd Font 11 gtk-cursor-theme-name=volantes gtk-cursor-theme-size=24 gtk-toolbar-style=GTK_TOOLBAR_ICONS diff --git a/dot_config/gtk-4.0/gtk.css b/dot_config/gtk-4.0/gtk.css new file mode 100644 index 0000000..492891d --- /dev/null +++ b/dot_config/gtk-4.0/gtk.css @@ -0,0 +1,129 @@ +/* Apex Theme System — GTK4 / Libadwaita */ +/* Auto-generated from Apex DNA */ + + +/* Scheme: Apex Neon (dark) */ + +@media (prefers-color-scheme: dark) { + + :root { + /* Core Surfaces */ + @define-color window_bg_color #050505; + @define-color window_fg_color #ededed; + + @define-color view_bg_color #050505; + @define-color view_fg_color #ededed; + + @define-color headerbar_bg_color #141414; + @define-color headerbar_fg_color #ededed; + @define-color headerbar_border_color #262626; + @define-color headerbar_backdrop_color @window_bg_color; + @define-color headerbar_shade_color rgba(0, 0, 0, 0.07); + + @define-color popover_bg_color #141414; + @define-color popover_fg_color #ededed; + + @define-color card_bg_color #141414; + @define-color card_fg_color #ededed; + @define-color card_shade_color rgba(0, 0, 0, 0.07); + + @define-color dialog_bg_color #141414; + @define-color dialog_fg_color #ededed; + + /* Accents */ + @define-color accent_color #00eaff; + @define-color accent_bg_color #00eaff; + @define-color accent_fg_color #050505; + + @define-color destructive_color #ff0044; + @define-color destructive_bg_color #ff0044; + @define-color destructive_fg_color #050505; + + @define-color success_color #00ff99; + @define-color success_bg_color #00ff99; + @define-color success_fg_color #050505; + + @define-color warning_color #ffb700; + @define-color warning_bg_color #ffb700; + @define-color warning_fg_color #050505; + + @define-color error_color #ff8899; + @define-color error_bg_color #ff8899; + @define-color error_fg_color #050505; + + /* UI Elements */ + @define-color borders #262626; + @define-color sidebar_bg_color #141414; + @define-color sidebar_fg_color #ededed; + @define-color sidebar_backdrop_color @window_bg_color; + @define-color sidebar_shade_color rgba(0, 0, 0, 0.07); + + /* Custom Apex Palette */ + @define-color apex_razor #ff0044; + @define-color apex_void #050505; + @define-color apex_stealth #404040; + } +} + +/* Scheme: Apex Aeon (light) */ + +@media (prefers-color-scheme: light) { + + :root { + /* Core Surfaces */ + @define-color window_bg_color #f5f5f5; + @define-color window_fg_color #0a0a0a; + + @define-color view_bg_color #f5f5f5; + @define-color view_fg_color #0a0a0a; + + @define-color headerbar_bg_color #e8e8e8; + @define-color headerbar_fg_color #0a0a0a; + @define-color headerbar_border_color #737373; + @define-color headerbar_backdrop_color @window_bg_color; + @define-color headerbar_shade_color rgba(0, 0, 0, 0.07); + + @define-color popover_bg_color #e8e8e8; + @define-color popover_fg_color #0a0a0a; + + @define-color card_bg_color #e8e8e8; + @define-color card_fg_color #0a0a0a; + @define-color card_shade_color rgba(0, 0, 0, 0.07); + + @define-color dialog_bg_color #e8e8e8; + @define-color dialog_fg_color #0a0a0a; + + /* Accents */ + @define-color accent_color #007a88; + @define-color accent_bg_color #007a88; + @define-color accent_fg_color #f5f5f5; + + @define-color destructive_color #ff0044; + @define-color destructive_bg_color #ff0044; + @define-color destructive_fg_color #f5f5f5; + + @define-color success_color #00b377; + @define-color success_bg_color #00b377; + @define-color success_fg_color #f5f5f5; + + @define-color warning_color #d18f00; + @define-color warning_bg_color #d18f00; + @define-color warning_fg_color #f5f5f5; + + @define-color error_color #ff4d6d; + @define-color error_bg_color #ff4d6d; + @define-color error_fg_color #f5f5f5; + + /* UI Elements */ + @define-color borders #737373; + @define-color sidebar_bg_color #e8e8e8; + @define-color sidebar_fg_color #0a0a0a; + @define-color sidebar_backdrop_color @window_bg_color; + @define-color sidebar_shade_color rgba(0, 0, 0, 0.07); + + /* Custom Apex Palette */ + @define-color apex_razor #ff0044; + @define-color apex_void #f5f5f5; + @define-color apex_stealth #a0a0a0; + } +} diff --git a/dot_config/gtk-4.0/settings.ini b/dot_config/gtk-4.0/settings.ini index c766c77..f35178f 100644 --- a/dot_config/gtk-4.0/settings.ini +++ b/dot_config/gtk-4.0/settings.ini @@ -1,7 +1,7 @@ [Settings] gtk-theme-name=Adwaita gtk-icon-theme-name=Adwaita -gtk-font-name=InconsolataGo Nerd Font Mono 11 +gtk-font-name=GeistMono Nerd Font 11 gtk-cursor-theme-name=volantes gtk-cursor-theme-size=24 gtk-application-prefer-dark-theme=1 diff --git a/dot_config/hypr/hyprland.d/00-theme.conf b/dot_config/hypr/hyprland.d/00-theme.conf deleted file mode 100644 index a3f2064..0000000 --- a/dot_config/hypr/hyprland.d/00-theme.conf +++ /dev/null @@ -1 +0,0 @@ -source = ~/.config/hypr/hyprland.d/theme-apex-neon.conf diff --git a/dot_config/hypr/hyprland.d/00-theme.conf.tmpl b/dot_config/hypr/hyprland.d/00-theme.conf.tmpl new file mode 100644 index 0000000..7efeb52 --- /dev/null +++ b/dot_config/hypr/hyprland.d/00-theme.conf.tmpl @@ -0,0 +1 @@ +source = ~/.config/hypr/hyprland.d/theme-{{ .chezmoi.config.data.theme }}.conf diff --git a/dot_config/hypr/hyprland.d/60-rules.conf b/dot_config/hypr/hyprland.d/60-rules.conf index 89236ef..b84f894 100644 --- a/dot_config/hypr/hyprland.d/60-rules.conf +++ b/dot_config/hypr/hyprland.d/60-rules.conf @@ -29,7 +29,7 @@ group { groupbar{ enabled = true height = 12 - font_family = InconsolataGo Nerd Font Mono + font_family = GeistMono Nerd Font font_size = 8 font_weight_active = semibold font_weight_inactive = normal diff --git a/dot_config/hypr/hyprland.d/theme-apex-aeon.conf b/dot_config/hypr/hyprland.d/theme-apex-aeon.conf new file mode 100644 index 0000000..3e63f64 --- /dev/null +++ b/dot_config/hypr/hyprland.d/theme-apex-aeon.conf @@ -0,0 +1,85 @@ +############################# +### APEX AEON THEME ### +############################# + +# The Void (Backgrounds) +# Pure, unadulterated darkness. None of that "grey-blue" nonsense. +$base = rgb(f5f5f5) +$baseAlpha = f5f5f5 + +$surface = rgb(e8e8e8) +$surfaceAlpha = e8e8e8 + +$overlay = rgb(737373) +$overlayAlpha = 737373 + +$muted = rgb(a0a0a0) +$mutedAlpha = a0a0a0 + +$subtle = rgb(a0a0a0) +$subtleAlpha = a0a0a0 + +# The Signal (Text) +# Stark white for maximum readability. +$text = rgb(0a0a0a) +$textAlpha = 0a0a0a + +# Accents (Aggressive) +# "Razor Red" - For errors or active borders. Blood-like. +$love = rgb(ff0044) +$loveAlpha = ff0044 + +# "Warning Gold" +$gold = rgb(d18f00) +$goldAlpha = d18f00 + +# "Toxic Green" - Because nature isn't always nice. +$pine = rgb(00b377) +$pineAlpha = 00b377 + +# "Electric Cyan" - Cold, digital logic. +$foam = rgb(007a88) +$foamAlpha = 007a88 + +# "Deep Void Purple" +$iris = rgb(7a3cff) +$irisAlpha = 7a3cff + +# "Pale Rose" (Mapped to alert color) +$rose = rgb(ff4d6d) +$roseAlpha = ff4d6d + +# Highlight variants +$highlight_low = rgb(e8e8e8) +$highlight_lowAlpha = e8e8e8 + +$highlight_med = rgb(737373) +$highlight_medAlpha = 737373 + +$highlight_high = rgb(a0a0a0) +$highlight_highAlpha = a0a0a0 + +# Theme-specific definitions +$splash_text = rgba($textAlphaee) +$dec_shadow = rgba(000000ee) # Hard shadows + +# Border configurations +# Sharp, thin, and aggressive. +$border_active = rgba($loveAlphaff) rgba($irisAlphaff) 45deg +$border_inactive = rgba($mutedAlpha44) rgba($surfaceAlpha44) 45deg + +$border_nogroup_active = rgba($foamAlphaff) rgba($pineAlphaff) 45deg +$border_nogroup_inactive = rgba($mutedAlpha44) rgba($surfaceAlpha44) 45deg + +$border_group_active = rgba($goldAlphaff) rgba($loveAlphaff) 45deg +$border_group_inactive = rgba($mutedAlpha66) rgba($surfaceAlpha66) 45deg + +$border_grouplocked_active = rgba($foamAlphaff) rgba($irisAlphaff) 45deg +$border_grouplocked_inactive = rgba($foamAlpha66) rgba($irisAlpha66) 45deg + +# Group bar configurations +$groupbar_text = rgba($baseAlphaff) +$groupbar_active = rgba($loveAlphaff) rgba($irisAlphaaa) +$groupbar_inactive = rgba($surfaceAlphaee) rgba($mutedAlphaaa) +$groupbar_grouplocked_active = rgba($foamAlphaff) rgba($irisAlphaff) +$groupbar_grouplocked_inactive = rgba($foamAlphaaa) rgba($irisAlphaaa) \ No newline at end of file diff --git a/dot_config/hypr/hyprland.d/theme-apex-neon.conf b/dot_config/hypr/hyprland.d/theme-apex-neon.conf index 3de993f..9f0b22f 100644 --- a/dot_config/hypr/hyprland.d/theme-apex-neon.conf +++ b/dot_config/hypr/hyprland.d/theme-apex-neon.conf @@ -45,9 +45,9 @@ $foamAlpha = 00eaff $iris = rgb(9d00ff) $irisAlpha = 9d00ff -# "Pale Rose" -$rose = rgb(ff80bf) -$roseAlpha = ff80bf +# "Pale Rose" (Mapped to alert color) +$rose = rgb(ff8899) +$roseAlpha = ff8899 # Highlight variants $highlight_low = rgb(141414) @@ -82,4 +82,4 @@ $groupbar_text = rgba($baseAlphaff) $groupbar_active = rgba($loveAlphaff) rgba($irisAlphaaa) $groupbar_inactive = rgba($surfaceAlphaee) rgba($mutedAlphaaa) $groupbar_grouplocked_active = rgba($foamAlphaff) rgba($irisAlphaff) -$groupbar_grouplocked_inactive = rgba($foamAlphaaa) rgba($irisAlphaaa) +$groupbar_grouplocked_inactive = rgba($foamAlphaaa) rgba($irisAlphaaa) \ No newline at end of file diff --git a/dot_config/hypr/hyprlock.conf.tmpl b/dot_config/hypr/hyprlock.conf.tmpl index f36b2df..97c08c6 100644 --- a/dot_config/hypr/hyprlock.conf.tmpl +++ b/dot_config/hypr/hyprlock.conf.tmpl @@ -56,7 +56,7 @@ label { text = cmd[update:1000] echo "$(date +"%A, %B %d")" color = rgba(242, 243, 244, 0.75) font_size = 22 - font_family = Inconsolata Nerd Font Mono + font_family = GeistMono Nerd Font position = 0, 300 halign = center valign = center @@ -70,7 +70,7 @@ label { text = cmd[update:1000] echo "$(date +"%-I:%M")" color = rgba(242, 243, 244, 0.75) font_size = 95 - font_family = Inconsolata Nerd Font Mono Bold + font_family = GeistMono Nerd Font position = 0, 200 halign = center valign = center diff --git a/dot_config/kitty/kitty.d/10-fonts.conf b/dot_config/kitty/kitty.d/10-fonts.conf index 2637706..f5e5a69 100644 --- a/dot_config/kitty/kitty.d/10-fonts.conf +++ b/dot_config/kitty/kitty.d/10-fonts.conf @@ -1,8 +1,10 @@ # BEGIN_KITTY_FONTS -font_family family='InconsolataGo Nerd Font Mono' postscript_name=InconsolataGoNFM -bold_font auto -italic_font auto -bold_italic_font auto +font_family family='GeistMono Nerd Font' +bold_font family='GeistMono Nerd Font' +italic_font family='GeistMono Nerd Font' +bold_italic_font family='GeistMono Nerd Font' # END_KITTY_FONTS -font_size 9.0 +font_size 8.0 + +symbol_map U+E000-U+F8FF,U+F0000-U+FFFFF GeistMono Nerd Font diff --git a/dot_config/kitty/kitty.d/30-emoji.conf b/dot_config/kitty/kitty.d/30-emoji.conf index d12b4ab..2e9a4b0 100644 --- a/dot_config/kitty/kitty.d/30-emoji.conf +++ b/dot_config/kitty/kitty.d/30-emoji.conf @@ -1,2 +1,2 @@ # Force emoji glyphs to a color emoji font (requires the font to be installed). -symbol_map U+2600-U+26FF,U+2700-U+27BF,U+1F000-U+1FAFF Noto Color Emoji +symbol_map U+2600-U+26FF,U+1F000-U+1FAFF Noto Color Emoji diff --git a/dot_config/kitty/themes/apex-aeon.conf b/dot_config/kitty/themes/apex-aeon.conf new file mode 100644 index 0000000..d2d3990 --- /dev/null +++ b/dot_config/kitty/themes/apex-aeon.conf @@ -0,0 +1,66 @@ +## APEX AEON - KITTY THEME ## +## Spec-accurate: color = state, not decoration + +# --- Core --- +foreground #0a0a0a +background #f5f5f5 + +# Selection: "target locked" +selection_background #ff0044 +selection_foreground #0a0a0a + +# Cursor: Razor Red beam +cursor #ff0044 +cursor_text_color #0a0a0a +cursor_shape beam + +# URLs: informational cyan +url_color #007a88 + +# Borders (optional) +active_border_color #ff0044 +inactive_border_color #737373 + +# Optional: subtle UI hint for visual bell +visual_bell_color #ff4d6d + +# Spacing +window_padding_width 4 + +# --- 16-COLOR ANSI TABLE (Apex Aeon spec) --- + +# Normal bank (0–7) +# color0: Black (Void) +color0 #0a0a0a +# color1: Red (Razor) +color1 #ff0044 +# color2: Green (OK) +color2 #00b377 +# color3: Yellow (Gold) +color3 #d18f00 +# color4: Blue (Info) +color4 #007a88 +# color5: Magenta (Purple) +color5 #7a3cff +# color6: Cyan (Info mapped) +color6 #007a88 +# color7: White (Stark) +color7 #f5f5f5 + +# Bright bank (8–15) +# color8: Bright black (UI separators) +color8 #737373 +# color9: Bright red (Alerts) +color9 #ff4d6d +# color10: Bright green (Active success) +color10 #33d6a6 +# color11: Bright yellow (Urgent warning) +color11 #ffbf40 +# color12: Bright blue (Active info) +color12 #33bccc +# color13: Bright magenta (Elevated special) +color13 #a680ff +# color14: Bright cyan (Active tech signal) +color14 #33bccc +# color15: Bright white (Extreme highlight) +color15 #ffffff \ No newline at end of file diff --git a/dot_config/kitty/themes/apex-neon.conf b/dot_config/kitty/themes/apex-neon.conf index 8246ce5..74ab105 100644 --- a/dot_config/kitty/themes/apex-neon.conf +++ b/dot_config/kitty/themes/apex-neon.conf @@ -49,7 +49,7 @@ color7 #ededed # Bright bank (8–15) # color8: Bright black (UI separators) -color8 #262626 +color8 #737373 # color9: Bright red (Alerts) color9 #ff8899 # color10: Bright green (Active success) @@ -63,5 +63,4 @@ color13 #c84dff # color14: Bright cyan (Active tech signal) color14 #5af3ff # color15: Bright white (Extreme highlight) -color15 #ffffff - +color15 #ffffff \ No newline at end of file diff --git a/dot_config/nvim/colors/apex-aeon.lua b/dot_config/nvim/colors/apex-aeon.lua new file mode 100644 index 0000000..15fb36d --- /dev/null +++ b/dot_config/nvim/colors/apex-aeon.lua @@ -0,0 +1,164 @@ +-- Apex Aeon: Standalone Theme Engine +-- Philosophy: State over Decoration. Red is Presence. Cyan is Data. + +local M = {} + +M.palette = { + -- The Void + void = "#f5f5f5", -- Background + panel = "#e8e8e8", -- Dark Surface (Statusline/Gutter) + border = "#737373", -- Muted Border + stealth = "#a0a0a0", -- Comments / Ignored + + -- The Signal + text = "#0a0a0a", -- Stark White + dim = "#737373", -- Muted Text + + -- The Hunter (Presence) + razor = "#ff0044", -- PRIMARY: Cursor, Current Match, Active Border + alert = "#ff4d6d", -- ERROR: Readable text on Red + + -- The HUD (Data) + tech = "#007a88", -- INFO: Selection, Search Match, Constants + toxic = "#00b377", -- SUCCESS: Strings + amber = "#d18f00", -- WARNING: Types, Search + azure = "#005577", -- STRUCT: Functions (Deep Blue) + sacred = "#7a3cff", -- SPECIAL: Keywords, Root +} + +function M.load() + vim.cmd "hi clear" + if vim.fn.exists "syntax_on" then vim.cmd "syntax reset" end + vim.o.background = "light" + vim.g.colors_name = "apex-aeon" + + local p = M.palette + local groups = { + -- CANVAS & UI ----------------------------------------------------------- + Normal = { fg = p.text, bg = p.void }, + NormalNC = { fg = p.dim, bg = p.void }, -- Non-focused windows + SignColumn = { bg = p.void }, + FoldColumn = { fg = p.stealth, bg = p.void }, + VertSplit = { fg = p.razor }, -- Deprecated in nvim 0.10, but good fallback + WinSeparator = { fg = p.razor }, -- The Cage (Red Borders) + EndOfBuffer = { fg = p.void }, -- Hide tildes + + -- CURSOR & NAVIGATION ("The Hunter") ------------------------------------ + Cursor = { fg = p.void, bg = p.razor }, -- Red Beam + TermCursor = { fg = p.void, bg = p.razor }, + CursorLine = { bg = p.panel }, + CursorLineNr = { fg = p.razor, bold = true }, -- Red Line Number (You are here) + LineNr = { fg = p.stealth }, -- Other lines fade out + + -- SELECTION & SEARCH ("Terminator Vision") ------------------------------ + Visual = { fg = p.void, bg = p.tech, bold = true }, -- Cyan (Data Lock) + VisualNOS = { fg = p.void, bg = p.border }, + + Search = { fg = p.void, bg = p.tech }, -- Cyan (Potential Targets) + IncSearch = { fg = p.void, bg = p.razor }, -- Red (Acquiring...) + CurSearch = { fg = p.void, bg = p.razor, bold = true }, -- Red (Target Locked) + + -- STATUS & MESSAGES ----------------------------------------------------- + StatusLine = { fg = p.text, bg = p.panel }, + StatusLineNC = { fg = p.dim, bg = p.void }, + WildMenu = { fg = p.void, bg = p.tech }, + Pmenu = { fg = p.text, bg = p.panel }, + PmenuSel = { fg = p.void, bg = p.razor, bold = true }, -- Red Menu Selection + PmenuSbar = { bg = p.panel }, + PmenuThumb = { bg = p.stealth }, + + -- SYNTAX HIGHLIGHTING --------------------------------------------------- + Comment = { fg = p.stealth, italic = true }, + Constant = { fg = p.tech }, -- Cyan (Digital values) + String = { fg = p.toxic }, -- Green (Organic strings) + Character = { fg = p.toxic }, + Number = { fg = p.tech }, + Boolean = { fg = p.tech }, + Float = { fg = p.tech }, + + Identifier = { fg = p.text }, -- Variables (White) + Function = { fg = p.azure }, -- Deep Blue (Structure) + + Statement = { fg = p.sacred }, -- Purple (Keywords) + Conditional = { fg = p.sacred }, + Repeat = { fg = p.sacred }, + Label = { fg = p.sacred }, + Operator = { fg = p.tech }, -- Cyan (Tech) + Keyword = { fg = p.sacred }, + Exception = { fg = p.razor }, -- Red (Errors) + + PreProc = { fg = p.sacred }, + Include = { fg = p.sacred }, + Define = { fg = p.sacred }, + Macro = { fg = p.sacred }, + PreCondit = { fg = p.sacred }, + + Type = { fg = p.amber }, -- Yellow (Types/Classes) + StorageClass = { fg = p.amber }, + Structure = { fg = p.amber }, + Typedef = { fg = p.amber }, + + Special = { fg = p.tech }, + SpecialChar = { fg = p.tech }, + Tag = { fg = p.tech }, + Delimiter = { fg = p.dim }, -- Subtle delimiters + Debug = { fg = p.razor }, + + Underlined = { underline = true }, + Ignore = { fg = p.stealth }, + Error = { fg = p.razor }, + Todo = { fg = p.void, bg = p.amber, bold = true }, + + -- DIAGNOSTICS ----------------------------------------------------------- + DiagnosticError = { fg = p.razor }, + DiagnosticWarn = { fg = p.amber }, + DiagnosticInfo = { fg = p.tech }, + DiagnosticHint = { fg = p.dim }, + + DiagnosticUnderlineError = { sp = p.razor, underline = true }, + DiagnosticUnderlineWarn = { sp = p.amber, underline = true }, + + -- PLUGINS: TELESCOPE ("The HUD") ---------------------------------------- + TelescopeNormal = { bg = p.void }, + TelescopeBorder = { fg = p.razor, bg = p.void }, -- Red Border + TelescopePromptNormal = { fg = p.text, bg = p.void }, + TelescopePromptBorder = { fg = p.tech, bg = p.void }, -- Cyan Input Border + TelescopePromptTitle = { fg = p.void, bg = p.tech }, -- Cyan Label + TelescopePreviewTitle = { fg = p.void, bg = p.razor }, -- Red Label + TelescopeResultsTitle = { fg = p.void, bg = p.panel }, + TelescopeSelection = { fg = p.void, bg = p.razor }, -- Red Selection + + -- PLUGINS: NEO-TREE ("Stealth") ----------------------------------------- + NeoTreeNormal = { bg = p.void }, + NeoTreeNormalNC = { bg = p.void }, + NeoTreeVertSplit = { fg = p.panel, bg = p.void }, + NeoTreeWinSeparator = { fg = p.panel, bg = p.void }, -- Fade out tree border + NeoTreeRootName = { fg = p.razor, bold = true }, -- Root is Red + NeoTreeGitAdded = { fg = p.toxic }, + NeoTreeGitConflict = { fg = p.amber }, + NeoTreeGitDeleted = { fg = p.razor }, + NeoTreeGitModified = { fg = p.tech }, + + -- PLUGINS: GITSIGNS ----------------------------------------------------- + GitSignsAdd = { fg = p.toxic, bg = p.void }, + GitSignsChange = { fg = p.tech, bg = p.void }, + GitSignsDelete = { fg = p.razor, bg = p.void }, + + -- PLUGINS: CMP (Completion) --------------------------------------------- + CmpItemAbbrDeprecated = { fg = p.dim, strikethrough = true }, + CmpItemAbbrMatch = { fg = p.tech, bold = true }, + CmpItemAbbrMatchFuzzy = { fg = p.tech, bold = true }, + CmpItemKindFunction = { fg = p.azure }, + CmpItemKindMethod = { fg = p.azure }, + CmpItemKindKeyword = { fg = p.sacred }, + CmpItemKindVariable = { fg = p.text }, + } + + for group, highlight in pairs(groups) do + vim.api.nvim_set_hl(0, group, highlight) + end +end + +M.load() + +return M \ No newline at end of file diff --git a/dot_config/nvim/colors/apex-neon.lua b/dot_config/nvim/colors/apex-neon.lua index e1cadb2..2e3ca9d 100644 --- a/dot_config/nvim/colors/apex-neon.lua +++ b/dot_config/nvim/colors/apex-neon.lua @@ -161,4 +161,4 @@ end M.load() -return M +return M \ No newline at end of file diff --git a/dot_config/nvim/lua/plugins/astroui.lua b/dot_config/nvim/lua/plugins/astroui.lua.tmpl similarity index 95% rename from dot_config/nvim/lua/plugins/astroui.lua rename to dot_config/nvim/lua/plugins/astroui.lua.tmpl index 7e6bf1f..079bce0 100644 --- a/dot_config/nvim/lua/plugins/astroui.lua +++ b/dot_config/nvim/lua/plugins/astroui.lua.tmpl @@ -9,7 +9,7 @@ return { ---@type AstroUIOpts opts = { -- change colorscheme - colorscheme = "apex-neon", + colorscheme = "{{ .chezmoi.config.data.theme }}", -- AstroUI allows you to easily modify highlight groups easily for any and all colorschemes highlights = { init = { -- this table overrides highlights in all themes diff --git a/dot_config/owlry/config.toml b/dot_config/owlry/config.toml.tmpl similarity index 99% rename from dot_config/owlry/config.toml rename to dot_config/owlry/config.toml.tmpl index 58986a4..6b7239c 100644 --- a/dot_config/owlry/config.toml +++ b/dot_config/owlry/config.toml.tmpl @@ -52,7 +52,7 @@ border_radius = 12 # Built-in: owl, catppuccin-mocha, dracula, gruvbox-dark, nord, # one-dark, rose-pine, solarized-dark, tokyo-night # Or leave unset for GTK default -theme = "apex-neon" +theme = "{{ .chezmoi.config.data.theme }}" # Color overrides (applied on top of theme) # [appearance.colors] diff --git a/dot_config/owlry/themes/apex-aeon.css b/dot_config/owlry/themes/apex-aeon.css new file mode 100644 index 0000000..f6c8928 --- /dev/null +++ b/dot_config/owlry/themes/apex-aeon.css @@ -0,0 +1,171 @@ + + +/* + * Owlry - Apex Aeon Theme + * "State over Decoration." + * + * A high-contrast theme built for focus and clinical clarity. + * Color exists to signal STATE, not to decorate space. + * + * Author: S0wlz (Owlibou) + * + * Usage: Set theme = "apex-aeon" in config.toml + */ + +:root { + /* Core surfaces */ + --owlry-bg: #f5f5f5; + --owlry-bg-secondary: #e8e8e8; + --owlry-border: #737373; + --owlry-text: #0a0a0a; + --owlry-text-secondary: #737373; + + /* The Predator - primary accent */ + --owlry-accent: #ff0044; + --owlry-accent-bright: #ff4d6d; + + /* Provider badges - mapped to Apex semantics */ + --owlry-badge-app: #007a88; /* Cyan: apps are informational */ + --owlry-badge-bookmark: #d18f00; /* Yellow: bookmarks need attention */ + --owlry-badge-calc: #ffbf40; /* Bright Yellow: calculator results */ + --owlry-badge-clip: #7a3cff; /* Purple: clipboard is special */ + --owlry-badge-cmd: #7a3cff; /* Purple: commands are elevated */ + --owlry-badge-dmenu: #00b377; /* Green: dmenu is success/pipe */ + --owlry-badge-emoji: #a680ff; /* Bright Purple: emoji is special */ + --owlry-badge-file: #33bccc; /* Bright Cyan: file search is active info */ + --owlry-badge-script: #33d6a6; /* Bright Green: scripts execute successfully */ + --owlry-badge-ssh: #007a88; /* Cyan: SSH is technical/info */ + --owlry-badge-sys: #ff0044; /* Red: system actions are critical */ + --owlry-badge-uuctl: #d18f00; /* Yellow: uuctl requires attention */ + --owlry-badge-web: #007a88; /* Cyan: web is informational */ + + /* Widget badges */ + --owlry-badge-media: #a680ff; /* Bright Purple: media is special */ + --owlry-badge-weather: #33bccc; /* Bright Cyan: weather is active info */ + --owlry-badge-pomo: #ff4d6d; /* Alert Red: pomodoro demands attention */ +} + +.owlry-main { + background-color: rgba(245, 245, 245, 0.98); + border: 1px solid rgba(115, 115, 115, 0.8); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.8), + 0 0 0 1px rgba(255, 0, 68, 0.1); +} + +.owlry-search { + background-color: rgba(232, 232, 232, 0.9); + border: 2px solid rgba(115, 115, 115, 0.8); + color: var(--owlry-text); + caret-color: var(--owlry-accent); +} + +.owlry-search:focus { + border-color: var(--owlry-accent); + box-shadow: 0 0 0 2px rgba(255, 0, 68, 0.3); +} + +.owlry-result-row:hover { + background-color: rgba(232, 232, 232, 0.8); +} + +.owlry-result-row:selected { + background-color: rgba(255, 0, 68, 0.15); + border-left: 3px solid var(--owlry-accent); +} + +.owlry-result-row:selected .owlry-result-name { + color: var(--owlry-accent-bright); +} + +.owlry-result-row:selected .owlry-result-icon { + color: var(--owlry-accent); +} + +/* Provider badges - styled per Apex semantics */ +.owlry-badge-app { + background-color: rgba(0, 122, 136, 0.15); + color: var(--owlry-badge-app); +} + +.owlry-badge-bookmark { + background-color: rgba(209, 143, 0, 0.15); + color: var(--owlry-badge-bookmark); +} + +.owlry-badge-calc { + background-color: rgba(255, 191, 64, 0.15); + color: var(--owlry-badge-calc); +} + +.owlry-badge-clip { + background-color: rgba(122, 60, 255, 0.15); + color: var(--owlry-badge-clip); +} + +.owlry-badge-cmd { + background-color: rgba(122, 60, 255, 0.15); + color: var(--owlry-badge-cmd); +} + +.owlry-badge-dmenu { + background-color: rgba(0, 179, 119, 0.15); + color: var(--owlry-badge-dmenu); +} + +.owlry-badge-emoji { + background-color: rgba(166, 128, 255, 0.15); + color: var(--owlry-badge-emoji); +} + +.owlry-badge-file { + background-color: rgba(51, 188, 204, 0.15); + color: var(--owlry-badge-file); +} + +.owlry-badge-script { + background-color: rgba(51, 214, 166, 0.15); + color: var(--owlry-badge-script); +} + +.owlry-badge-ssh { + background-color: rgba(0, 122, 136, 0.15); + color: var(--owlry-badge-ssh); +} + +.owlry-badge-sys { + background-color: rgba(255, 0, 68, 0.15); + color: var(--owlry-badge-sys); +} + +.owlry-badge-uuctl { + background-color: rgba(209, 143, 0, 0.15); + color: var(--owlry-badge-uuctl); +} + +.owlry-badge-web { + background-color: rgba(0, 122, 136, 0.15); + color: var(--owlry-badge-web); +} + +/* Widget badges */ +.owlry-badge-media { + background-color: rgba(166, 128, 255, 0.15); + color: var(--owlry-badge-media); +} + +.owlry-badge-weather { + background-color: rgba(51, 188, 204, 0.15); + color: var(--owlry-badge-weather); +} + +.owlry-badge-pomo { + background-color: rgba(255, 77, 109, 0.15); + color: var(--owlry-badge-pomo); +} + +/* Filter button - default uses The Predator */ +.owlry-filter-button:checked { + background-color: rgba(255, 0, 68, 0.2); + color: var(--owlry-accent); + border-color: rgba(255, 0, 68, 0.5); +} \ No newline at end of file diff --git a/dot_config/owlry/themes/apex-neon.css b/dot_config/owlry/themes/apex-neon.css index 90505a9..d2d7b91 100644 --- a/dot_config/owlry/themes/apex-neon.css +++ b/dot_config/owlry/themes/apex-neon.css @@ -1,43 +1,14 @@ + + /* * Owlry - Apex Neon Theme * "State over Decoration." * - * A high-contrast dark theme built for focus and clinical clarity. + * A high-contrast theme built for focus and clinical clarity. * Color exists to signal STATE, not to decorate space. * * Author: S0wlz (Owlibou) * - * ───────────────────────────────────────────────────────────────── - * APEX DNA - Semantic Color Roles: - * - * RED is the Predator: Active intent, cursor, current location, critical errors - * CYAN is Informational: Technical data, links, neutral highlights - * PURPLE is Sacred: Root access, special modes, exceptional states - * GREEN is Success: Completion, OK states, positive feedback - * YELLOW is Warning: Caution, load states, attention needed - * - * Rule: If a UI element is not important, it does not glow. - * ───────────────────────────────────────────────────────────────── - * - * Core Palette: - * - Void Black: #050505 (absolute background) - * - Dark Surface: #141414 (inputs, inactive elements) - * - Light Surface: #262626 (separators, borders) - * - Stark White: #ededed (primary text) - * - Muted: #737373 (secondary text) - * - Razor Red: #ff0044 (THE accent - focus, cursor, selection) - * - Electric Cyan: #00eaff (info, links, technical) - * - Sacred Purple: #9d00ff (special, root, elevated) - * - Neon Green: #00ff99 (success, OK) - * - Warning Yellow: #ffb700 (warning, caution) - * - * Bright Escalations: - * - Alert Red: #ff8899 (distinguishable from cursor) - * - Active Cyan: #5af3ff (active info) - * - Active Green: #2bffb2 (active success) - * - Urgent Yellow: #ffd24d (urgent warning) - * - Elevated Purple:#c84dff (elevated special) - * * Usage: Set theme = "apex-neon" in config.toml */ @@ -197,148 +168,4 @@ background-color: rgba(255, 0, 68, 0.2); color: var(--owlry-accent); border-color: rgba(255, 0, 68, 0.5); -} - -/* Provider-specific filter buttons - follow Apex semantics */ -.owlry-filter-app:checked { - background-color: rgba(0, 234, 255, 0.15); - color: var(--owlry-badge-app); - border-color: rgba(0, 234, 255, 0.5); -} - -.owlry-filter-bookmark:checked { - background-color: rgba(255, 183, 0, 0.15); - color: var(--owlry-badge-bookmark); - border-color: rgba(255, 183, 0, 0.5); -} - -.owlry-filter-calc:checked { - background-color: rgba(255, 210, 77, 0.15); - color: var(--owlry-badge-calc); - border-color: rgba(255, 210, 77, 0.5); -} - -.owlry-filter-clip:checked { - background-color: rgba(157, 0, 255, 0.15); - color: var(--owlry-badge-clip); - border-color: rgba(157, 0, 255, 0.5); -} - -.owlry-filter-cmd:checked { - background-color: rgba(157, 0, 255, 0.15); - color: var(--owlry-badge-cmd); - border-color: rgba(157, 0, 255, 0.5); -} - -.owlry-filter-dmenu:checked { - background-color: rgba(0, 255, 153, 0.15); - color: var(--owlry-badge-dmenu); - border-color: rgba(0, 255, 153, 0.5); -} - -.owlry-filter-emoji:checked { - background-color: rgba(200, 77, 255, 0.15); - color: var(--owlry-badge-emoji); - border-color: rgba(200, 77, 255, 0.5); -} - -.owlry-filter-file:checked { - background-color: rgba(90, 243, 255, 0.15); - color: var(--owlry-badge-file); - border-color: rgba(90, 243, 255, 0.5); -} - -.owlry-filter-script:checked { - background-color: rgba(43, 255, 178, 0.15); - color: var(--owlry-badge-script); - border-color: rgba(43, 255, 178, 0.5); -} - -.owlry-filter-ssh:checked { - background-color: rgba(0, 234, 255, 0.15); - color: var(--owlry-badge-ssh); - border-color: rgba(0, 234, 255, 0.5); -} - -.owlry-filter-sys:checked { - background-color: rgba(255, 0, 68, 0.15); - color: var(--owlry-badge-sys); - border-color: rgba(255, 0, 68, 0.5); -} - -.owlry-filter-uuctl:checked { - background-color: rgba(255, 183, 0, 0.15); - color: var(--owlry-badge-uuctl); - border-color: rgba(255, 183, 0, 0.5); -} - -.owlry-filter-web:checked { - background-color: rgba(0, 234, 255, 0.15); - color: var(--owlry-badge-web); - border-color: rgba(0, 234, 255, 0.5); -} - -/* Widget filter buttons */ -.owlry-filter-media:checked { - background-color: rgba(200, 77, 255, 0.15); - color: var(--owlry-badge-media); - border-color: rgba(200, 77, 255, 0.5); -} - -.owlry-filter-weather:checked { - background-color: rgba(90, 243, 255, 0.15); - color: var(--owlry-badge-weather); - border-color: rgba(90, 243, 255, 0.5); -} - -.owlry-filter-pomodoro:checked { - background-color: rgba(255, 136, 153, 0.15); - color: var(--owlry-badge-pomo); - border-color: rgba(255, 136, 153, 0.5); -} - -/* Scrollbar - subtle in Void, The Predator on active */ -scrollbar slider { - background-color: rgba(38, 38, 38, 0.8); -} - -scrollbar slider:hover { - background-color: rgba(64, 64, 64, 0.9); -} - -scrollbar slider:active { - background-color: var(--owlry-accent); -} - -/* Text selection - Apex Hard Rule: black text on red (target locked) */ -selection { - background-color: var(--owlry-accent); - color: #050505; -} - -/* Mode indicator - The Predator marks current mode */ -.owlry-mode-indicator { - background-color: rgba(255, 0, 68, 0.2); - color: var(--owlry-accent); - border: 1px solid rgba(255, 0, 68, 0.3); -} - -/* Hints bar */ -.owlry-hints { - border-top: 1px solid rgba(38, 38, 38, 0.8); -} - -.owlry-hints-label { - color: var(--owlry-text-secondary); -} - -/* Tag badges in results */ -.owlry-tag-badge { - background-color: rgba(38, 38, 38, 0.6); - color: var(--owlry-text-secondary); -} - -.owlry-result-row:selected .owlry-tag-badge { - background-color: rgba(255, 136, 153, 0.25); - color: var(--owlry-accent-bright); -} +} \ No newline at end of file diff --git a/dot_config/qt6ct/qt6ct.conf b/dot_config/qt6ct/qt6ct.conf index d14f236..51f5844 100644 --- a/dot_config/qt6ct/qt6ct.conf +++ b/dot_config/qt6ct/qt6ct.conf @@ -6,8 +6,8 @@ standard_dialogs=gtk3 style=kvantum [Fonts] -fixed="InconsolataGo Nerd Font Mono,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular" -general="InconsolataGo Nerd Font Mono,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular" +fixed="GeistMono Nerd Font,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular" +general="GeistMono Nerd Font,9,-1,5,400,0,0,0,0,0,0,0,0,0,0,1,Regular" [Interface] activate_item_on_single_click=1 diff --git a/dot_config/satty/config.toml b/dot_config/satty/config.toml index 420f03f..0a73020 100644 --- a/dot_config/satty/config.toml +++ b/dot_config/satty/config.toml @@ -37,7 +37,7 @@ brush-smooth-history-size = 0 # Font to use for text annotations [font] -family = "InconsolataGo Nerd Font Mono" +family = "GeistMono Nerd Font" style = "Regular" # Custom colours for the colour palette diff --git a/dot_config/sherlock/config.toml b/dot_config/sherlock/config.toml.tmpl similarity index 94% rename from dot_config/sherlock/config.toml rename to dot_config/sherlock/config.toml.tmpl index cf8f97f..e09efdf 100644 --- a/dot_config/sherlock/config.toml +++ b/dot_config/sherlock/config.toml.tmpl @@ -44,7 +44,7 @@ exec_inplace = "control-return" [files] config = "/home/mpuchstein/.config/sherlock/config.toml" -css = "/home/mpuchstein/.config/sherlock/themes/apex-neon.css" +css = "{{ .chezmoi.homeDir }}/.config/sherlock/themes/{{ .chezmoi.config.data.theme }}.css" # css = "/home/mpuchstein/.config/sherlock/themes/rose-pine_v3.css" fallback = "/home/mpuchstein/.config/sherlock/fallback.json" alias = "/home/mpuchstein/.config/sherlock/sherlock_alias.json" diff --git a/dot_config/sherlock/themes/apex-aeon.css b/dot_config/sherlock/themes/apex-aeon.css new file mode 100644 index 0000000..368dc64 --- /dev/null +++ b/dot_config/sherlock/themes/apex-aeon.css @@ -0,0 +1,126 @@ + +/* Apex Aeon - Sherlock Theme (Parser Compliant) */ + +/* 1. PALETTE DEFINITIONS */ +@define-color apex_base #f5f5f5; +@define-color apex_surface #e8e8e8; +@define-color apex_overlay #737373; +@define-color apex_muted #a0a0a0; +@define-color apex_text #0a0a0a; +@define-color apex_love #ff0044; +@define-color apex_foam #007a88; +@define-color apex_gold #d18f00; + +/* 2. WINDOW & INPUT */ +window { + background-color: @apex_base; + color: @apex_text; + border: 2px solid @apex_love; + border-radius: 10px; + padding: 6px; +} + +entry { + background-color: @apex_surface; + color: @apex_text; + caret-color: @apex_love; + border: 1px solid @apex_overlay; + border-radius: 7px; + padding: 6px 9px; + margin-bottom: 6px; +} + +entry:focus { + border-color: @apex_love; + box-shadow: 0 0 10px rgba(255, 0, 68, 0.2); +} + +entry selection { + background-color: @apex_foam; + color: #0a0a0a; +} + +/* 3. LIST & SELECTION */ +listview { + background-color: transparent; +} + +/* The actual row selection - Informational */ +listview > row:selected { + background-color: @apex_foam; + color: #0a0a0a; + border-radius: 7px; + border: none; + outline: none; +} + +/* 4. TILES (The Items) */ +.tile, .launcher-tile, .launcher-item, .item { + background-color: @apex_surface; + color: @apex_text; + border-radius: 7px; + padding: 4px 10px; + margin-bottom: 4px; +} + +/* When the ROW is selected, make the TILE transparent so info shows through */ +listview > row:selected .tile, +listview > row:selected .launcher-tile, +listview > row:selected .item { + background-color: transparent; + color: #0a0a0a; +} + +/* Force TEXT on selection */ +listview > row:selected label, +listview > row:selected .title, +listview > row:selected .description, +listview > row:selected .subtitle { + color: #0a0a0a; +} + +/* Force ICONS on selection */ +listview > row:selected image, +listview > row:selected .icon { + color: #0a0a0a; +} + +/* 5. WIDGETS (Weather Fix without !important) */ +.widget, .weather-widget, .music-widget { + background-color: @apex_surface; + border: 1px solid @apex_overlay; + color: @apex_text; + border-radius: 7px; +} + +/* Specific overrides for weather internals */ +.weather-widget box { + background-color: transparent; +} + +.weather-widget label { + color: @apex_text; +} + +/* Temperature info */ +.weather-widget .temperature { + color: @apex_foam; + font-weight: 800; +} + +.weather-widget .condition { + color: @apex_muted; +} + +/* 6. SCROLLBARS */ +scrollbar slider { + background-color: @apex_overlay; + min-width: 6px; + border-radius: 10px; +} +scrollbar slider:hover { background-color: @apex_love; } + +progressbar progress { + background-color: @apex_love; + border-radius: 4px; +} \ No newline at end of file diff --git a/dot_config/sherlock/themes/apex-neon.css b/dot_config/sherlock/themes/apex-neon.css index e1ab5b5..e652ba4 100644 --- a/dot_config/sherlock/themes/apex-neon.css +++ b/dot_config/sherlock/themes/apex-neon.css @@ -1,4 +1,5 @@ -/* * APEX NEON - SHERLOCK THEME (PARSER COMPLIANT) */ + +/* Apex Neon - Sherlock Theme (Parser Compliant) */ /* 1. PALETTE DEFINITIONS */ @define-color apex_base #050505; @@ -8,7 +9,7 @@ @define-color apex_text #ededed; @define-color apex_love #ff0044; @define-color apex_foam #00eaff; -@define-color apex_gold #ffb700; +@define-color apex_gold #ffb700; /* 2. WINDOW & INPUT */ window { @@ -40,11 +41,11 @@ entry selection { } /* 3. LIST & SELECTION */ -listview { - background-color: transparent; +listview { + background-color: transparent; } -/* The actual row selection - Electric Cyan */ +/* The actual row selection - Informational */ listview > row:selected { background-color: @apex_foam; color: #050505; @@ -62,15 +63,15 @@ listview > row:selected { margin-bottom: 4px; } -/* When the ROW is selected, make the TILE transparent so Cyan shows through */ -listview > row:selected .tile, -listview > row:selected .launcher-tile, +/* When the ROW is selected, make the TILE transparent so info shows through */ +listview > row:selected .tile, +listview > row:selected .launcher-tile, listview > row:selected .item { background-color: transparent; color: #050505; } -/* Force TEXT Black on selection */ +/* Force TEXT on selection */ listview > row:selected label, listview > row:selected .title, listview > row:selected .description, @@ -78,7 +79,7 @@ listview > row:selected .subtitle { color: #050505; } -/* Force ICONS Black on selection */ +/* Force ICONS on selection */ listview > row:selected image, listview > row:selected .icon { color: #050505; @@ -101,7 +102,7 @@ listview > row:selected .icon { color: @apex_text; } -/* Temperature Cyan */ +/* Temperature info */ .weather-widget .temperature { color: @apex_foam; font-weight: 800; @@ -122,4 +123,4 @@ scrollbar slider:hover { background-color: @apex_love; } progressbar progress { background-color: @apex_love; border-radius: 4px; -} +} \ No newline at end of file diff --git a/dot_config/sherlock/themes/rose-pine.css b/dot_config/sherlock/themes/rose-pine.css index 49bd2ac..5740751 100644 --- a/dot_config/sherlock/themes/rose-pine.css +++ b/dot_config/sherlock/themes/rose-pine.css @@ -45,7 +45,7 @@ window, .root { background-color: var(--rp-base); color: var(--rp-text); - font-family: "JetBrainsMono Nerd Font", "FiraCode Nerd Font", + font-family: "GeistMono Nerd Font", "FiraCode Nerd Font", "Iosevka", system-ui, sans-serif; } @@ -257,4 +257,3 @@ scrollbar slider { .info-label { color: var(--rp-foam); } - diff --git a/dot_config/spicetify/config-xpui.ini b/dot_config/spicetify/config-xpui.ini.tmpl similarity index 85% rename from dot_config/spicetify/config-xpui.ini rename to dot_config/spicetify/config-xpui.ini.tmpl index f2eae9a..28fa263 100644 --- a/dot_config/spicetify/config-xpui.ini +++ b/dot_config/spicetify/config-xpui.ini.tmpl @@ -1,7 +1,7 @@ [Setting] spotify_path = $HOME/.local/share/spotify-launcher/install/usr/share/spotify/ -current_theme = apex-neon -color_scheme = apex-neon +current_theme = {{ .chezmoi.config.data.theme }} +color_scheme = {{ .chezmoi.config.data.theme }} inject_theme_js = 1 replace_colors = 1 always_enable_devtools = 0 diff --git a/dot_config/spicetify/private_Themes/apex-aeon/color.ini b/dot_config/spicetify/private_Themes/apex-aeon/color.ini new file mode 100644 index 0000000..9e82cec --- /dev/null +++ b/dot_config/spicetify/private_Themes/apex-aeon/color.ini @@ -0,0 +1,17 @@ + +[apex-aeon] +text = 0a0a0a +subtext = a0a0a0 +main = f5f5f5 +sidebar = f5f5f5 +player = f5f5f5 +card = e8e8e8 +shadow = 000000 +selected-row = 007a88 +button = 007a88 +button-active = ff0044 +button-disabled = a0a0a0 +tab-active = 737373 +notification = 007a88 +notification-error = ff0044 +misc = d18f00 \ No newline at end of file diff --git a/dot_config/spicetify/private_Themes/apex-aeon/user.css b/dot_config/spicetify/private_Themes/apex-aeon/user.css new file mode 100644 index 0000000..503f559 --- /dev/null +++ b/dot_config/spicetify/private_Themes/apex-aeon/user.css @@ -0,0 +1 @@ +/* Apex Aeon - Spicetify overrides */ \ No newline at end of file diff --git a/dot_config/spicetify/private_Themes/apex-neon/color.ini b/dot_config/spicetify/private_Themes/apex-neon/color.ini index 00a1dc9..aabc0bf 100644 --- a/dot_config/spicetify/private_Themes/apex-neon/color.ini +++ b/dot_config/spicetify/private_Themes/apex-neon/color.ini @@ -1,3 +1,4 @@ + [apex-neon] text = ededed subtext = 404040 @@ -13,4 +14,4 @@ button-disabled = 404040 tab-active = 262626 notification = 00eaff notification-error = ff0044 -misc = ffb700 +misc = ffb700 \ No newline at end of file diff --git a/dot_config/spicetify/private_Themes/apex-neon/user.css b/dot_config/spicetify/private_Themes/apex-neon/user.css index aaa216a..54b8437 100644 --- a/dot_config/spicetify/private_Themes/apex-neon/user.css +++ b/dot_config/spicetify/private_Themes/apex-neon/user.css @@ -1 +1 @@ -/* Apex Neon - Spicetify overrides */ +/* Apex Neon - Spicetify overrides */ \ No newline at end of file diff --git a/dot_config/swaync/style.css b/dot_config/swaync/style.css deleted file mode 100644 index c26c9ec..0000000 --- a/dot_config/swaync/style.css +++ /dev/null @@ -1,201 +0,0 @@ -/* Apex Neon for SwayNotificationCenter - State over decoration. If it isn't important, it doesn't glow. */ - -@define-color base #050505; /* Void */ -@define-color surface #141414; /* Panel */ -@define-color overlay #262626; /* Border */ -@define-color text #ededed; /* Foreground */ -@define-color muted #737373; /* Subtext */ - -@define-color red #ff0044; /* Active intent / destructive */ -@define-color cyan #00eaff; /* Info / hover */ -@define-color green #00ff99; /* Enabled / OK */ -@define-color purple #9d00ff; /* Special mode */ -@define-color alert #ff8899; /* Critical (distinct from "you are here" red) */ - -* { - all: unset; - font-family: "JetBrainsMono Nerd Font", "Inter", sans-serif; - font-size: 12px; - color: @text; -} - -/* ===== Windows ===== */ -.control-center, -.notification-window { - background-color: rgba(5, 5, 5, 0.92); -} - -.control-center { - border: 2px solid @overlay; - border-radius: 12px; - padding: 10px; - box-shadow: 0 16px 40px rgba(0, 0, 0, 0.70); -} - -.notification-window { - border: 2px solid @overlay; - border-radius: 12px; - padding: 8px; - box-shadow: 0 14px 34px rgba(0, 0, 0, 0.70); -} - -/* ===== Title row ===== */ -.widget-title { - margin-bottom: 8px; -} - -.widget-title label { - font-size: 15px; - font-weight: 800; -} - -.widget-title button { - background-color: @surface; - border: 1px solid @overlay; - border-radius: 10px; - padding: 6px 10px; -} - -.widget-title button:hover { - border-color: @red; -} - -.widget-title button:active { - background-color: @red; - color: @base; /* text turns black on red, non-negotiable */ -} - -/* ===== DND ===== */ -.widget-dnd { - background-color: @surface; - border: 1px solid @overlay; - border-radius: 10px; - padding: 8px 10px; - margin-bottom: 10px; -} - -.widget-dnd label { - font-weight: 700; -} - -.widget-dnd switch { - background-color: @overlay; - border-radius: 999px; - padding: 3px; -} - -.widget-dnd switch slider { - background-color: @text; - border-radius: 999px; - min-width: 18px; - min-height: 18px; -} - -.widget-dnd switch:checked { - background-color: @purple; -} - -.widget-dnd switch:checked slider { - background-color: @base; -} - -/* ===== Notifications list: remove "giant grey slab" ===== */ -.widget-notifications { - background-color: transparent; -} - -.notification-group, -.notification-group-headers, -.notification-group-icon { - background-color: transparent; -} - -/* ===== Notification card ===== */ -.notification-row { - background-color: transparent; - margin: 0 0 8px 0; - outline: none; -} - -.notification { - background-color: @surface; - border: 1px solid @overlay; - border-radius: 12px; - padding: 10px; - box-shadow: 0 10px 24px rgba(0, 0, 0, 0.60); -} - -.notification-row:hover .notification { - border-color: @cyan; -} - -.notification-row:focus .notification { - border-color: @red; -} - -/* Urgency */ -.notification.critical { - border-color: @alert; - box-shadow: 0 0 0 1px @alert; -} - -.image { - border-radius: 10px; - margin-right: 8px; -} - -.summary { - font-weight: 800; - font-size: 13px; -} - -.body { - color: @muted; - margin-top: 2px; -} - -.time { - color: @cyan; - font-weight: 700; -} - -/* Notification actions */ -.notification-action { - background-color: @overlay; - border-radius: 10px; - padding: 5px 8px; - margin-top: 6px; -} - -.notification-action:hover { - box-shadow: inset 0 0 0 1px @cyan; -} - -.notification-action:active { - background-color: @cyan; - color: @base; -} - -/* Close button */ -.close-button { - background-color: @overlay; - border-radius: 8px; - padding: 3px; -} - -.close-button:hover { - background-color: @red; - color: @base; -} - -.close-button:active { - background-color: @red; - color: @base; -} - -/* ===== Popup notifications container (safe even if class names differ) ===== */ -.floating-notifications.background { - background-color: transparent; - padding: 0; -} diff --git a/dot_config/swaync/style.css.tmpl b/dot_config/swaync/style.css.tmpl new file mode 100644 index 0000000..2f2e6e1 --- /dev/null +++ b/dot_config/swaync/style.css.tmpl @@ -0,0 +1 @@ +@import "themes/{{ .chezmoi.config.data.theme }}.css"; diff --git a/dot_config/swaync/themes/apex-aeon.css b/dot_config/swaync/themes/apex-aeon.css index ddf9631..21d96eb 100644 --- a/dot_config/swaync/themes/apex-aeon.css +++ b/dot_config/swaync/themes/apex-aeon.css @@ -31,9 +31,8 @@ /* Base Structure */ * { - font-family: "GeistMono Nerd Font"; + font-family: "JetBrainsMono Nerd Font"; font-weight: 500; - font-size: 12px; } .control-center { @@ -103,7 +102,7 @@ .widget-title { color: @razor; font-weight: bold; - font-size: 1.1rem; + font-size: 1.2rem; } .widget-label { @@ -144,4 +143,4 @@ .widget-menubar > button:hover { background: @razor; color: @void; -} +} \ No newline at end of file diff --git a/dot_config/swaync/themes/apex-neon.css b/dot_config/swaync/themes/apex-neon.css index d204a1a..fe23a00 100644 --- a/dot_config/swaync/themes/apex-neon.css +++ b/dot_config/swaync/themes/apex-neon.css @@ -31,9 +31,8 @@ /* Base Structure */ * { - font-family: "GeistMono Nerd Font"; + font-family: "JetBrainsMono Nerd Font"; font-weight: 500; - font-size: 12px; } .control-center { @@ -103,7 +102,7 @@ .widget-title { color: @razor; font-weight: bold; - font-size: 1.1rem; + font-size: 1.2rem; } .widget-label { @@ -144,4 +143,4 @@ .widget-menubar > button:hover { background: @razor; color: @void; -} +} \ No newline at end of file diff --git a/dot_config/waybar/style.css b/dot_config/waybar/style.css deleted file mode 100644 index 2daff8f..0000000 --- a/dot_config/waybar/style.css +++ /dev/null @@ -1,262 +0,0 @@ -@define-color base #050505; /* Void Black */ -@define-color surface #141414; /* Dark Surface */ -@define-color overlay #262626; /* Light Surface */ -@define-color text #ededed; /* Stark White */ -@define-color muted #737373; /* Muted Text (spec) */ - -@define-color love #ff0044; /* Razor Red */ -@define-color foam #00eaff; /* Electric Cyan */ -@define-color pine #00ff99; /* Toxic Green */ -@define-color gold #ffb700; /* Warning Gold */ -@define-color iris #9d00ff; /* Void Purple */ -@define-color stealth #404040; /* GEMINI: Stealth */ -@define-color alert #ff8899; /* Apex Neon: BrRed = Alerts */ - -@define-color hl_low #141414; -@define-color hl_med #262626; -@define-color hl_high #262626; /* keep borders “light surface”, not random gray */ - -@define-color bar_alpha rgba(5, 5, 5, 0.85); -@define-color surface_alpha rgba(5, 5, 5, 0.9); -@define-color overlay_alpha rgba(20, 20, 20, 0.9); - -/* Bar */ -window#waybar { - background: @bar_alpha; - color: @text; - border-bottom: 1px solid @overlay; -} - -/* Extra breathing room for the first/last pill in each section */ -#left > :first-child, -#center > :first-child, -#right > :first-child { margin-top: 6px; } - -#left > :last-child, -#center > :last-child, -#right > :last-child { margin-bottom: 6px; } - -/* Typography */ -* { - font-family: "InconsolataGo Nerd Font Mono", "InconsolataGo Nerd Font", monospace; - font-size: 11px; -} - -/* Workspaces */ -#workspaces { - margin: 0; - padding: 2px 3px; - background: transparent; - font-size: 10px; -} - -/* Default workspace = neutral surface */ -#workspaces button { - background: @surface_alpha; - color: @muted; /* inactive should look “off” */ - border: 1px solid @overlay; /* light surface border */ - border-radius: 5px; - margin: 1px; - padding: 2px 5px; -} - -/* Hover = red target lock */ -#workspaces button:hover { - background: @overlay_alpha; - border-color: @love; - color: @text; -} - -/* Active = razor red "target locked" */ -#workspaces button.active { - background: @love; - color: @base; /* spec: black text on red */ - border-color: @love; -} - -/* Urgent = alert red, not focus red */ -#workspaces button.urgent { - background: @alert; - color: @base; - border-color: @alert; - box-shadow: 0 0 6px rgba(255, 136, 153, 0.55); -} - -/* Shared pill look for ALL modules */ -#cpu, -#memory, -#disk, -#network, -#privacy, -#wireplumber, -#clock, -#idle_inhibitor, -#gamemode, -#battery, -#power-profiles-daemon, -#bluetooth, -#tray, -#temperature, -#custom-swaync, -#custom-temps-cycle, -#custom-hyprsunset, -#custom-alhp { - background: @surface_alpha; - color: @text; - border: 1px solid @overlay; - border-radius: 6px; - padding: 2px 6px; - margin: 2px 2px; -} - -/* Universal hover = red selection cue */ -#cpu:hover, -#memory:hover, -#disk:hover, -#network:hover, -#privacy:hover, -#wireplumber:hover, -#clock:hover, -#idle_inhibitor:hover, -#gamemode:hover, -#battery:hover, -#power-profiles-daemon:hover, -#bluetooth:hover, -#tray:hover, -#temperature:hover, -#custom-swaync:hover, -#custom-temps-cycle:hover, -#custom-hyprsunset:hover, -#custom-alhp:hover { - background: @overlay_alpha; - border-color: @love; -} - -/* State-driven styling: low urgency = border, high urgency = full pill */ -#cpu.warning, -#memory.warning, -#disk.warning, -#battery.warning, -#temperature.warning, -#custom-temps-cycle.warning { - border-color: @gold; -} - -#custom-alhp.stale, -#wireplumber.muted { - border-color: @gold; -} - -#custom-swaync.unread { - border-color: @foam; -} - -#idle_inhibitor.activated { border-color: @foam; } - -#privacy { border-color: @iris; } -#privacy-item, -#privacy-item.screenshare, -#privacy-item.audio-in, -#privacy-item.audio-out { color: @iris; } - -#cpu.critical, -#memory.critical, -#disk.critical, -#battery.critical, -#network.disconnected, -#network.disabled, -#temperature.critical, -#custom-temps-cycle.critical, -#custom-alhp.bad, -#custom-alhp.down { - background: @alert; - color: @base; - border-color: @alert; -} - -#wireplumber.muted { color: @muted; } -#idle_inhibitor.deactivated { color: @muted; } - -/* Group wrappers */ -#group-temps, -#group-volume { - background: transparent; - border: 0; - margin: 0; - padding: 0; -} - -#custom-temps-cycle.down { color: @muted; } - -#group-temps #temperature { margin: 1px 0; } -#group-temps #temperature:hover { background: @overlay_alpha; border-color: @love; } - -#group-temps #temperature.critical { - background: @alert; - color: @base; - border-color: @alert; -} - -#group-temps #temperature.warning { border-color: @gold; } - -/* Tray */ -#tray > .passive { opacity: 0.7; } -#tray > .needs-attention { - background: @alert; - color: @base; - border: 1px solid @alert; - box-shadow: 0 0 6px rgba(255, 136, 153, 0.4); -} - -/* Volume group sizing */ -#group-volume #wireplumber { - margin: 1px 0; - padding: 2px 3px; -} -#group-volume #wireplumber:hover { background: @overlay_alpha; border-color: @love; } - -/* Tooltips */ -tooltip, -window#waybar tooltip { - background: @surface; - color: @text; - border: 1px solid @overlay; - border-radius: 8px; - padding: 6px 8px; -} - -/* Popup menus */ -menu, -.menu, -popover, -.popover { - background: @surface; - color: @text; - border: 1px solid @overlay; - border-radius: 8px; - padding: 6px 8px; -} - -menuitem, -.menuitem { - background: transparent; - color: @text; - border-radius: 6px; - padding: 6px 8px; -} - -menuitem:hover, -.menuitem:hover { - background: @overlay_alpha; - border: 1px solid @love; -} - -menuitem:disabled, -.menuitem:disabled { color: @muted; } - -menu separator, -.menu separator { - background: @overlay; - min-height: 1px; - margin: 6px 0; -} diff --git a/dot_config/waybar/style.css.tmpl b/dot_config/waybar/style.css.tmpl new file mode 100644 index 0000000..9b0a705 --- /dev/null +++ b/dot_config/waybar/style.css.tmpl @@ -0,0 +1,243 @@ +@import "themes/{{ .chezmoi.config.data.theme }}.css"; + +@define-color bar_bg alpha(@background, 0.85); +@define-color pill_bg alpha(@panel, 0.9); +@define-color pill_hover alpha(@panel, 0.98); +@define-color alert_shadow alpha(@error, 0.45); + +/* Bar */ +window#waybar { + background: @bar_bg; + color: @foreground; + border-bottom: 1px solid @border; +} + +/* Extra breathing room for the first/last pill in each section */ +#left > :first-child, +#center > :first-child, +#right > :first-child { margin-top: 6px; } + +#left > :last-child, +#center > :last-child, +#right > :last-child { margin-bottom: 6px; } + +/* Typography */ +* { + font-family: "GeistMono Nerd Font", monospace; + font-size: 11px; +} + +/* Workspaces */ +#workspaces { + margin: 0; + padding: 2px 3px; + background: transparent; + font-size: 10px; +} + +#workspaces button { + background: @pill_bg; + color: @dim; + border: 1px solid @border; + border-radius: 5px; + margin: 1px; + padding: 2px 5px; +} + +#workspaces button:hover { + background: @pill_hover; + border-color: @accent; + color: @foreground; +} + +#workspaces button.active { + background: @accent; + color: @background; + border-color: @accent; +} + +#workspaces button.urgent { + background: @error; + color: @background; + border-color: @error; + box-shadow: 0 0 6px @alert_shadow; +} + +/* Shared pill look for ALL modules */ +#cpu, +#memory, +#disk, +#network, +#privacy, +#wireplumber, +#clock, +#idle_inhibitor, +#gamemode, +#battery, +#power-profiles-daemon, +#bluetooth, +#tray, +#temperature, +#custom-swaync, +#custom-temps-cycle, +#custom-hyprsunset, +#custom-alhp { + background: @pill_bg; + color: @foreground; + border: 1px solid @border; + border-radius: 6px; + padding: 2px 6px; + margin: 2px 2px; +} + +#cpu:hover, +#memory:hover, +#disk:hover, +#network:hover, +#privacy:hover, +#wireplumber:hover, +#clock:hover, +#idle_inhibitor:hover, +#gamemode:hover, +#battery:hover, +#power-profiles-daemon:hover, +#bluetooth:hover, +#tray:hover, +#temperature:hover, +#custom-swaync:hover, +#custom-temps-cycle:hover, +#custom-hyprsunset:hover, +#custom-alhp:hover { + background: @pill_hover; + border-color: @accent; +} + +/* State-driven styling: low urgency = border, high urgency = full pill */ +#cpu.warning, +#memory.warning, +#disk.warning, +#battery.warning, +#temperature.warning, +#custom-temps-cycle.warning { + border-color: @warning; +} + +#custom-alhp.stale, +#wireplumber.muted { + border-color: @warning; +} + +#custom-swaync.unread { + border-color: @info; +} + +#idle_inhibitor.activated { border-color: @info; } + +#privacy { border-color: @sacred; } +#privacy-item, +#privacy-item.screenshare, +#privacy-item.audio-in, +#privacy-item.audio-out { color: @sacred; } + +#cpu.critical, +#memory.critical, +#disk.critical, +#battery.critical, +#network.disconnected, +#network.disabled, +#temperature.critical, +#custom-temps-cycle.critical, +#custom-alhp.bad, +#custom-alhp.down { + background: @error; + color: @background; + border-color: @error; +} + +#wireplumber.muted { color: @dim; } +#idle_inhibitor.deactivated { color: @dim; } + +/* Group wrappers */ +#group-temps, +#group-volume { + background: transparent; + border: 0; + margin: 0; + padding: 0; +} + +#custom-temps-cycle.down { color: @dim; } + +#group-temps #temperature { margin: 1px 0; } +#group-temps #temperature:hover { background: @pill_hover; border-color: @accent; } + +#group-temps #temperature.critical { + background: @error; + color: @background; + border-color: @error; +} + +#group-temps #temperature.warning { border-color: @warning; } + +/* Tray */ +#tray > .passive { opacity: 0.7; } +#tray > .needs-attention { + background: @error; + color: @background; + border: 1px solid @error; + box-shadow: 0 0 6px @alert_shadow; +} + +/* Volume group sizing */ +#group-volume #wireplumber { + margin: 1px 0; + padding: 2px 3px; +} +#group-volume #wireplumber:hover { background: @pill_hover; border-color: @accent; } + +/* Tooltips */ +tooltip, +window#waybar tooltip { + background: @panel; + color: @foreground; + border: 1px solid @border; + border-radius: 8px; + padding: 6px 8px; +} + +/* Popup menus */ +menu, +.menu, +popover, +.popover { + background: @panel; + color: @foreground; + border: 1px solid @border; + border-radius: 8px; + padding: 6px 8px; +} + +menuitem, +.menuitem { + background: transparent; + color: @foreground; + border: 1px solid transparent; + border-radius: 6px; + padding: 6px 8px; +} + +menuitem:hover, +.menuitem:hover { + background: @pill_hover; + border-color: @accent; +} + +menuitem:disabled, +.menuitem:disabled { color: @dim; } + +menu separator, +.menu separator { + background: @border; + min-height: 1px; + margin: 6px 0; +} diff --git a/dot_config/waybar/themes/apex-aeon.css b/dot_config/waybar/themes/apex-aeon.css new file mode 100644 index 0000000..ef926f9 --- /dev/null +++ b/dot_config/waybar/themes/apex-aeon.css @@ -0,0 +1,25 @@ +/* Apex Aeon — Waybar Color Palette */ +/* DNA: State over Decoration */ + +@define-color void #f5f5f5; +@define-color stark #0a0a0a; +@define-color razor #ff0044; +@define-color tech #007a88; +@define-color toxic #00b377; +@define-color amber #d18f00; +@define-color sacred #7a3cff; +@define-color alert #ff4d6d; + +@define-color panel #e8e8e8; +@define-color border #737373; +@define-color stealth #a0a0a0; +@define-color dim #737373; + +/* Semantic mappings for easier integration */ +@define-color background @void; +@define-color foreground @stark; +@define-color accent @razor; +@define-color info @tech; +@define-color success @toxic; +@define-color warning @amber; +@define-color error @alert; \ No newline at end of file diff --git a/dot_config/waybar/themes/apex-neon.css b/dot_config/waybar/themes/apex-neon.css new file mode 100644 index 0000000..886227d --- /dev/null +++ b/dot_config/waybar/themes/apex-neon.css @@ -0,0 +1,25 @@ +/* Apex Neon — Waybar Color Palette */ +/* DNA: State over Decoration */ + +@define-color void #050505; +@define-color stark #ededed; +@define-color razor #ff0044; +@define-color tech #00eaff; +@define-color toxic #00ff99; +@define-color amber #ffb700; +@define-color sacred #9d00ff; +@define-color alert #ff8899; + +@define-color panel #141414; +@define-color border #262626; +@define-color stealth #404040; +@define-color dim #737373; + +/* Semantic mappings for easier integration */ +@define-color background @void; +@define-color foreground @stark; +@define-color accent @razor; +@define-color info @tech; +@define-color success @toxic; +@define-color warning @amber; +@define-color error @alert; \ No newline at end of file diff --git a/dot_config/wezterm/colors/apex-aeon.toml b/dot_config/wezterm/colors/apex-aeon.toml new file mode 100644 index 0000000..922eb9a --- /dev/null +++ b/dot_config/wezterm/colors/apex-aeon.toml @@ -0,0 +1,35 @@ +# APEX AEON - WezTerm color scheme +# Spec-accurate: color = state, not decoration + +[colors] +foreground = "#0a0a0a" +background = "#f5f5f5" + +cursor_bg = "#ff0044" +cursor_border = "#ff0044" +cursor_fg = "#0a0a0a" + +selection_bg = "#ff0044" +selection_fg = "#0a0a0a" + +ansi = [ + "#0a0a0a", + "#ff0044", + "#00b377", + "#d18f00", + "#007a88", + "#7a3cff", + "#007a88", + "#f5f5f5", +] + +brights = [ + "#737373", + "#ff4d6d", + "#33d6a6", + "#ffbf40", + "#33bccc", + "#a680ff", + "#33bccc", + "#ffffff", +] \ No newline at end of file diff --git a/dot_config/wezterm/colors/apex-neon.toml b/dot_config/wezterm/colors/apex-neon.toml new file mode 100644 index 0000000..551c807 --- /dev/null +++ b/dot_config/wezterm/colors/apex-neon.toml @@ -0,0 +1,35 @@ +# APEX NEON - WezTerm color scheme +# Spec-accurate: color = state, not decoration + +[colors] +foreground = "#ededed" +background = "#050505" + +cursor_bg = "#ff0044" +cursor_border = "#ff0044" +cursor_fg = "#050505" + +selection_bg = "#ff0044" +selection_fg = "#050505" + +ansi = [ + "#050505", + "#ff0044", + "#00ff99", + "#ffb700", + "#00eaff", + "#9d00ff", + "#00eaff", + "#ededed", +] + +brights = [ + "#737373", + "#ff8899", + "#2bffb2", + "#ffd24d", + "#5af3ff", + "#c84dff", + "#5af3ff", + "#ffffff", +] \ No newline at end of file diff --git a/dot_config/wezterm/wezterm.lua.tmpl b/dot_config/wezterm/wezterm.lua.tmpl new file mode 100644 index 0000000..9a3a0bc --- /dev/null +++ b/dot_config/wezterm/wezterm.lua.tmpl @@ -0,0 +1,19 @@ +-- Pull in the wezterm API +local wezterm = require("wezterm") + +-- This will hold the configuration. +local config = wezterm.config_builder() + +-- This is where you actually apply your config choices. + +-- For example, changing the initial geometry for new windows: +config.initial_cols = 120 +config.initial_rows = 28 + +-- or, changing the font size and color scheme. +config.font_size = 10 +config.color_scheme_dirs = { wezterm.config_dir .. "/colors" } +config.color_scheme = "{{ .chezmoi.config.data.theme }}" + +-- Finally, return the configuration to wezterm: +return config diff --git a/dot_config/zathura/themes/apex-aeon.zathurarc b/dot_config/zathura/themes/apex-aeon.zathurarc new file mode 100644 index 0000000..1bfd76f --- /dev/null +++ b/dot_config/zathura/themes/apex-aeon.zathurarc @@ -0,0 +1,46 @@ +# Apex Aeon — Zathura Theme +# DNA: State over Decoration + +# Core +set default-bg "#f5f5f5" +set default-fg "#0a0a0a" + +# Status Bar +set statusbar-bg "#e8e8e8" +set statusbar-fg "#0a0a0a" + +# Input Bar +set inputbar-bg "#e8e8e8" +set inputbar-fg "#0a0a0a" + +# Completion +set completion-bg "#e8e8e8" +set completion-fg "#0a0a0a" +set completion-group-bg "#737373" +set completion-group-fg "#737373" +set completion-highlight-bg "#ff0044" +set completion-highlight-fg "#0a0a0a" + +# Notifications +set notification-bg "#e8e8e8" +set notification-fg "#0a0a0a" +set notification-error-bg "#ff4d6d" +set notification-error-fg "#f5f5f5" +set notification-warning-bg "#d18f00" +set notification-warning-fg "#f5f5f5" + +# Selection & Highlight +set highlight-color "rgba(ff0044, 0.5)" +set highlight-active-color "rgba(ff0044, 0.8)" + +# Recolor (Dark Mode for PDFs) +# In Neon (Dark), we want dark paper (background) and light ink (foreground). +# In Aeon (Light), we want light paper and dark ink (standard). +set recolor-lightcolor "#f5f5f5" +set recolor-darkcolor "#0a0a0a" + +# Default recolor state +# Ideally, only true for dark themes, but Zathura config is static. +# Users can toggle with Ctrl+R. +set recolor "false" +set recolor-keephue "true" \ No newline at end of file diff --git a/dot_config/zathura/themes/apex-neon.zathurarc b/dot_config/zathura/themes/apex-neon.zathurarc new file mode 100644 index 0000000..e0ce10f --- /dev/null +++ b/dot_config/zathura/themes/apex-neon.zathurarc @@ -0,0 +1,46 @@ +# Apex Neon — Zathura Theme +# DNA: State over Decoration + +# Core +set default-bg "#050505" +set default-fg "#ededed" + +# Status Bar +set statusbar-bg "#141414" +set statusbar-fg "#ededed" + +# Input Bar +set inputbar-bg "#141414" +set inputbar-fg "#ededed" + +# Completion +set completion-bg "#141414" +set completion-fg "#ededed" +set completion-group-bg "#262626" +set completion-group-fg "#737373" +set completion-highlight-bg "#ff0044" +set completion-highlight-fg "#050505" + +# Notifications +set notification-bg "#141414" +set notification-fg "#ededed" +set notification-error-bg "#ff8899" +set notification-error-fg "#050505" +set notification-warning-bg "#ffb700" +set notification-warning-fg "#050505" + +# Selection & Highlight +set highlight-color "rgba(ff0044, 0.5)" +set highlight-active-color "rgba(ff0044, 0.8)" + +# Recolor (Dark Mode for PDFs) +# In Neon (Dark), we want dark paper (background) and light ink (foreground). +# In Aeon (Light), we want light paper and dark ink (standard). +set recolor-lightcolor "#050505" +set recolor-darkcolor "#ededed" + +# Default recolor state +# Ideally, only true for dark themes, but Zathura config is static. +# Users can toggle with Ctrl+R. +set recolor "false" +set recolor-keephue "true" \ No newline at end of file diff --git a/dot_config/zathura/zathurarc.tmpl b/dot_config/zathura/zathurarc.tmpl new file mode 100644 index 0000000..77a2da2 --- /dev/null +++ b/dot_config/zathura/zathurarc.tmpl @@ -0,0 +1 @@ +include {{ .chezmoi.homeDir }}/.config/zathura/themes/{{ .chezmoi.config.data.theme }}.zathurarc diff --git a/dot_config/zed/private_settings.json b/dot_config/zed/private_settings.json index b0e1b5f..6aee7a0 100644 --- a/dot_config/zed/private_settings.json +++ b/dot_config/zed/private_settings.json @@ -8,8 +8,8 @@ // command palette (cmd-shift-p / ctrl-shift-p) { "ui_font_weight": 400.0, - "ui_font_family": "InconsolataGo Nerd Font Mono", - "buffer_font_family": "InconsolataGo Nerd Font Mono", + "ui_font_family": "GeistMono Nerd Font", + "buffer_font_family": "GeistMono Nerd Font", "icon_theme": { "mode": "system", "light": "Zed (Default)", diff --git a/dot_config/zed/themes/apex.json b/dot_config/zed/themes/apex.json index 657bf27..32c0ac3 100644 --- a/dot_config/zed/themes/apex.json +++ b/dot_config/zed/themes/apex.json @@ -3,6 +3,7 @@ "name": "Apex", "author": "S0wlz (Owlibou)", "themes": [ + { "name": "Apex Neon", "appearance": "dark", @@ -137,7 +138,7 @@ "terminal.ansi.magenta": "#9d00ff", "terminal.ansi.cyan": "#00eaff", "terminal.ansi.white": "#ededed", - "terminal.ansi.bright_black": "#262626", + "terminal.ansi.bright_black": "#737373", "terminal.ansi.bright_red": "#ff8899", "terminal.ansi.bright_green": "#2bffb2", "terminal.ansi.bright_yellow": "#ffd24d", @@ -314,6 +315,7 @@ } } }, + { "name": "Apex Aeon", "appearance": "light", @@ -324,7 +326,7 @@ "elevated_surface.background": "#ffffff", "panel.background": "#e8e8e8", "panel.focused_border": "#ff0044", - "panel.indent_guide": "#a0a0a066", + "panel.indent_guide": "#73737366", "panel.indent_guide_active": "#737373aa", "panel.indent_guide_hover": "#737373cc", "tab_bar.background": "#e8e8e8", @@ -358,14 +360,14 @@ "#d18f00" ], "element.background": "#ffffff", - "element.hover": "#e8e8e8", - "element.active": "#e8e8e8", - "element.selected": "#e8e8e8", + "element.hover": "#737373", + "element.active": "#737373", + "element.selected": "#737373", "element.disabled": "#e8e8e8", "ghost_element.background": null, - "ghost_element.hover": "#a0a0a033", - "ghost_element.active": "#a0a0a044", - "ghost_element.selected": "#a0a0a033", + "ghost_element.hover": "#73737366", + "ghost_element.active": "#73737388", + "ghost_element.selected": "#73737366", "ghost_element.disabled": null, "drop_target.background": "#33bccc22", "editor.background": "#f5f5f5", @@ -376,14 +378,14 @@ "editor.highlighted_line.background": "#e8e8e8", "editor.line_number": "#737373", "editor.active_line_number": "#ff0044", - "editor.wrap_guide": "#e8e8e8", - "editor.active_wrap_guide": "#a0a0a0", - "editor.indent_guide": "#a0a0a066", + "editor.wrap_guide": "#737373", + "editor.active_wrap_guide": "#737373", + "editor.indent_guide": "#73737366", "editor.indent_guide_active": "#737373aa", - "editor.invisible": "#a0a0a088", + "editor.invisible": "#73737388", "editor.document_highlight.read_background": "#007a881a", "editor.document_highlight.write_background": "#ff00441a", - "editor.document_highlight.bracket_background": "#a0a0a033", + "editor.document_highlight.bracket_background": "#73737366", "search.match_background": "#33bccc44", "scrollbar.track.background": "#f5f5f5", "scrollbar.track.border": "#f5f5f5", @@ -431,10 +433,10 @@ "conflict.border": "#ff4d6d", "ignored": "#737373", "ignored.background": "#7373731a", - "ignored.border": "#a0a0a0", + "ignored.border": "#737373", "hidden": "#737373", "hidden.background": "#7373731a", - "hidden.border": "#a0a0a0", + "hidden.border": "#737373", "terminal.background": "#f5f5f5", "terminal.foreground": "#0a0a0a", "terminal.bright_foreground": "#0a0a0a", @@ -625,5 +627,6 @@ } } } + ] } diff --git a/dot_config/zsh/apex-aeon.zsh b/dot_config/zsh/apex-aeon.zsh new file mode 100644 index 0000000..3963e5b --- /dev/null +++ b/dot_config/zsh/apex-aeon.zsh @@ -0,0 +1,488 @@ +# Apex Aeon — Predator Cockpit (Zsh) — v1 +# Two-bus design: +# [precmd radar] -> after-action + context bursts (event-driven) +# [promptline] -> LEFT: identity + territory +# RIGHT: intel + vcs + friction (stable) + +setopt prompt_subst +setopt no_beep + +zmodload zsh/datetime 2>/dev/null + +# ----------------------------------------------------------------------------- +# 1) PALETTE (Apex Aeon DNA) +# ----------------------------------------------------------------------------- +typeset -gA C +C[VOID]="#f5f5f5" +C[WHITE]="#0a0a0a" +C[MUTED]="#737373" +C[RAZOR]="#ff0044" +C[CYAN]="#007a88" +C[GOLD]="#d18f00" +C[OK]="#00b377" +C[PURPLE]="#7a3cff" +C[ALERT]="#ff4d6d" + +# ----------------------------------------------------------------------------- +# 2) ICONS / GLYPHS (Nerd Font optional) +# ----------------------------------------------------------------------------- +typeset -gA I +I[OS]="" +I[SSH]="" +I[ROOT]="" +I[GIT]="" +I[JOBS]="" +I[RADAR]="⌁" +I[RET]="↩" + +typeset -gA S +S[PL_L]="" +S[PL_R]="" +S[DOT]="·" + +# ----------------------------------------------------------------------------- +# 3) CONFIG +# ----------------------------------------------------------------------------- +typeset -gA APEX +APEX[SLOW_SOFT_MS]=750 +APEX[SLOW_HARD_MS]=2000 + +APEX[STARTUP_BURST]=1 +APEX[SHOW_AAR]=1 +APEX[SHOW_CONTEXT_BURST]=1 +APEX[SHOW_VCS]=1 +APEX[SHOW_INTEL]=1 +APEX[SHOW_JOBS]=1 +APEX[SHOW_RO]=1 +APEX[GIT_AHEAD_BEHIND]=1 + +# Ops commands (also match wrappers like sudo/doas/command) +APEX[OPS_RE]='^((sudo|doas|command)[[:space:]]+)*((pacman|yay|paru|apt|dnf|brew|systemctl|docker|kubectl|helm|git))([[:space:]]|$)' + +# Session-ish commands (spawn a subshell; exit codes are often “not a failure”) +APEX[SESSION_RE]='^((sudo|doas|command)[[:space:]]+)*chezmoi[[:space:]]+cd([[:space:]]|$)' + +# ----------------------------------------------------------------------------- +# 4) STATE +# ----------------------------------------------------------------------------- +typeset -gF apex_cmd_start=0.0 +typeset -g apex_last_cmd="" +typeset -g apex_has_run_cmd=0 + +typeset -g apex_startup_done=0 +typeset -g apex_pwd_changed=1 + +# Sticky intel +typeset -g apex_venv_name="" +typeset -g apex_target_sig="" +typeset -g apex_mode_sig="" + +# Git state +typeset -g apex_in_git=0 +typeset -g apex_git_branch="" +typeset -g apex_git_dirty_wt=0 +typeset -g apex_git_dirty_ix=0 +typeset -g apex_git_op="" +typeset -g apex_git_up_ok=0 +typeset -g apex_git_ahead=0 +typeset -g apex_git_behind=0 + +# Radar previous snapshots (transition detection) +typeset -g apex_prev_in_git=-1 +typeset -g apex_prev_git_branch="" +typeset -g apex_prev_git_op="" +typeset -g apex_prev_venv_name="" +typeset -g apex_prev_target_sig="" +typeset -g apex_prev_proj_sig="" + +# ----------------------------------------------------------------------------- +# 5) UTILITIES +# ----------------------------------------------------------------------------- +apex__short_cmd() { + local s="$1" + s="${s//$' +'/ }" + s="${s#"${s%%[![:space:]]*}"}" # ltrim + s="${s%"${s##*[![:space:]]}"}" # rtrim + print -r -- "${s[1,90]}" +} + +apex__project_sig() { + local s="" + [[ -f package.json ]] && s+="node" + [[ -f pnpm-lock.yaml ]] && s+="+pnpm" + [[ -f bun.lockb ]] && s+="+bun" + [[ -f yarn.lock ]] && s+="+yarn" + + [[ -f pyproject.toml || -f requirements.txt ]] && s+="${s:+ }py" + [[ -f uv.lock ]] && s+="+uv" + + [[ -f Cargo.toml ]] && s+="${s:+ }rust" + [[ -f go.mod ]] && s+="${s:+ }go" + + [[ -n "$s" ]] && print -r -- "$s" +} + +# ----------------------------------------------------------------------------- +# 6) INTEL (sticky; updated each prompt) +# ----------------------------------------------------------------------------- +apex_update_intel() { + # Target (cheap env-based; no kubectl calls) + if [[ -n "$AWS_PROFILE" ]]; then + apex_target_sig="aws:${AWS_PROFILE}" + elif [[ -n "$GOOGLE_CLOUD_PROJECT" ]]; then + apex_target_sig="gcp:${GOOGLE_CLOUD_PROJECT}" + elif [[ -n "$KUBE_CONTEXT" ]]; then + apex_target_sig="kube:${KUBE_CONTEXT}" + else + apex_target_sig="" + fi + + # Mode + if [[ -n "$IN_NIX_SHELL" ]]; then + apex_mode_sig="nix" + elif [[ -n "$DIRENV_DIR" ]]; then + apex_mode_sig="direnv" + else + apex_mode_sig="" + fi + + # Venv + apex_venv_name="" + if [[ -n "$VIRTUAL_ENV" ]]; then + apex_venv_name="$(basename "$VIRTUAL_ENV")" + elif [[ -n "$CONDA_DEFAULT_ENV" ]]; then + apex_venv_name="$CONDA_DEFAULT_ENV" + fi +} + +# ----------------------------------------------------------------------------- +# 7) GIT +# ----------------------------------------------------------------------------- +apex_git_update() { + apex_in_git=0 + apex_git_branch="" + apex_git_dirty_wt=0 + apex_git_dirty_ix=0 + apex_git_op="" + apex_git_up_ok=0 + apex_git_ahead=0 + apex_git_behind=0 + + command git rev-parse --is-inside-work-tree &>/dev/null || return + apex_in_git=1 + + apex_git_branch="$( + command git symbolic-ref --quiet --short HEAD 2>/dev/null \ + || command git rev-parse --short HEAD 2>/dev/null + )" + + local gd; gd="$(command git rev-parse --git-dir 2>/dev/null)" || return + [[ -d "$gd/rebase-apply" || -d "$gd/rebase-merge" ]] && apex_git_op="rebase" + [[ -f "$gd/MERGE_HEAD" ]] && apex_git_op="merge" + [[ -f "$gd/CHERRY_PICK_HEAD" ]] && apex_git_op="cherry-pick" + [[ -f "$gd/BISECT_LOG" ]] && apex_git_op="bisect" + + # Dirty markers + command git diff --quiet --ignore-submodules -- 2>/dev/null || apex_git_dirty_wt=1 + command git diff --cached --quiet --ignore-submodules -- 2>/dev/null || apex_git_dirty_ix=1 + + # Upstream (earned ✓) + if command git rev-parse --abbrev-ref --symbolic-full-name @{u} &>/dev/null; then + local counts behind ahead + counts="$(command git rev-list --left-right --count @{u}...HEAD 2>/dev/null)" || return + local IFS=$' \t' + read -r behind ahead <<<"$counts" + apex_git_behind="${behind:-0}" + apex_git_ahead="${ahead:-0}" + + if (( apex_git_dirty_wt == 0 && apex_git_dirty_ix == 0 )) && [[ -z "$apex_git_op" ]]; then + [[ "$apex_git_behind" == "0" && "$apex_git_ahead" == "0" ]] && apex_git_up_ok=1 + fi + fi +} + +# ----------------------------------------------------------------------------- +# 8) LEFT PROMPTLINE: IDENTITY + TERRITORY +# ----------------------------------------------------------------------------- +apex_identity() { + local is_root=0 is_ssh=0 color label + (( EUID == 0 )) && is_root=1 + [[ -n "$SSH_CONNECTION$SSH_TTY" ]] && is_ssh=1 + + if (( is_root )); then + color="${C[PURPLE]}" + if (( is_ssh )); then + label="${I[ROOT]} @%m" + else + label="${I[ROOT]} root" + fi + elif (( is_ssh )); then + color="${C[CYAN]}" + label="${I[SSH]} %n@%m" + else + return 0 + fi + + print -n "%F{${color}}${S[PL_L]}%f%K{${color}}%F{${C[VOID]}}%B ${label} %b%f%k%F{${color}}${S[PL_R]}%f " +} + +apex_territory() { + print -n "%F{${C[RAZOR]}}${S[PL_L]}%f%K{${C[RAZOR]}}%F{${C[VOID]}}%B ${I[OS]}%b %F{${C[WHITE]}}%B%~%b %f%k%F{${C[RAZOR]}}${S[PL_R]}%f" +} + +# ----------------------------------------------------------------------------- +# 9) RIGHT PROMPT (RPROMPT): INTEL + VCS + FRICTION +# ----------------------------------------------------------------------------- +apex_intel_r() { + (( APEX[SHOW_INTEL] )) || return 0 + if [[ -n "$apex_target_sig" ]]; then + print -n "%F{${C[CYAN]}}(${apex_target_sig})%f" + elif [[ -n "$apex_mode_sig" ]]; then + print -n "%F{${C[CYAN]}}(${apex_mode_sig})%f" + elif [[ -n "$apex_venv_name" ]]; then + print -n "%F{${C[CYAN]}}(${apex_venv_name})%f" + fi +} + +apex_vcs_r() { + (( APEX[SHOW_VCS] )) || return 0 + (( apex_in_git )) || return 0 + + if [[ -n "$apex_git_op" ]]; then + print -n "%F{${C[ALERT]}}${I[GIT]} ${apex_git_branch} ${apex_git_op}%f" + return 0 + fi + + print -n "%F{${C[CYAN]}}${I[GIT]} ${apex_git_branch}%f" + + local mark="" + (( apex_git_dirty_ix )) && mark+="+" + (( apex_git_dirty_wt )) && mark+="!" + [[ -n "$mark" ]] && print -n "%F{${C[GOLD]}} ${mark}%f" + + (( apex_git_up_ok )) && print -n "%F{${C[OK]}} ✓%f" + + if (( APEX[GIT_AHEAD_BEHIND] )); then + (( apex_git_ahead > 0 )) && print -n "%F{${C[MUTED]}} ⇡${apex_git_ahead}%f" + (( apex_git_behind > 0 )) && print -n "%F{${C[MUTED]}} ⇣${apex_git_behind}%f" + fi +} + +apex_friction_r() { + if (( APEX[SHOW_RO] )) && [[ ! -w . ]]; then + print -n "%F{${C[GOLD]}}${I[ROOT]} ro%f" + return 0 + fi + + if (( APEX[SHOW_JOBS] )); then + local jc + jc=$(jobs -p 2>/dev/null | wc -l | tr -d ' ') + if [[ -n "$jc" && "$jc" != "0" ]]; then + print -n "%F{${C[MUTED]}}${I[JOBS]} ${jc}%f" + return 0 + fi + fi +} + +build_rprompt() { + local s out="" + local sep="%F{${C[MUTED]}} ${S[DOT]} %f" + + s="$(apex_intel_r)"; [[ -n "$s" ]] && out+="$s" + s="$(apex_vcs_r)"; [[ -n "$s" ]] && out+="${out:+$sep}$s" + s="$(apex_friction_r)"; [[ -n "$s" ]] && out+="${out:+$sep}$s" + + [[ -n "$out" ]] && out="%F{${C[MUTED]}}[%f${out}%F{${C[MUTED]}}]%f" + print -n "$out" +} + +# ----------------------------------------------------------------------------- +# 10) RADAR (precmd) +# ----------------------------------------------------------------------------- +apex_radar_aar() { + (( APEX[SHOW_AAR] )) || return 0 + + local ec=$1 cmd="$2" dur="$3" + local -i ms=${4:-0} + + local show=0 + (( ec != 0 )) && show=1 + [[ -n "$dur" ]] && show=1 + [[ "$cmd" =~ ${APEX[OPS_RE]} ]] && show=1 + (( show )) || return 0 + + local short; short="$(apex__short_cmd "$cmd")" + + local dur_color="${C[MUTED]}" + (( ms >= ${APEX[SLOW_HARD_MS]} )) && dur_color="${C[GOLD]}" + + local dur_chunk="" + if [[ -n "$dur" ]]; then + if (( ms >= ${APEX[SLOW_HARD_MS]} )); then + dur_chunk=" %F{${dur_color}}%B${dur}%b%f" + else + dur_chunk=" %F{${dur_color}}${dur}%f" + fi + fi + + # Session commands: don't scream in red for “rc:1” + if [[ "$cmd" =~ ${APEX[SESSION_RE]} ]]; then + if (( ec == 0 )); then + print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[OK]}}${I[RET]}%f %F{${C[WHITE]}}${short}%f${dur_chunk}" + else + print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[GOLD]}}${I[RET]}%f %F{${C[WHITE]}}${short}%f %F{${C[MUTED]}}rc:${ec}%f${dur_chunk}" + fi + return 0 + fi + + if (( ec == 0 )); then + print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[OK]}}✓%f %F{${C[WHITE]}}${short}%f${dur_chunk}" + return 0 + fi + + # Signals: 128 + signal number + case $ec in + 130) # SIGINT (Ctrl+C) + print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[CYAN]}}^C%f %F{${C[WHITE]}}${short}%f${dur_chunk}" + ;; + 141) # SIGPIPE + print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[MUTED]}}PIPE%f %F{${C[WHITE]}}${short}%f${dur_chunk}" + ;; + 143) # SIGTERM + print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[GOLD]}}TERM%f %F{${C[WHITE]}}${short}%f${dur_chunk}" + ;; + *) + print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[ALERT]}}✘ ${ec}%f %F{${C[WHITE]}}${short}%f${dur_chunk}" + ;; + esac +} + +apex_radar_context_burst() { + (( APEX[SHOW_CONTEXT_BURST] )) || return 0 + + local proj_sig; proj_sig="$(apex__project_sig 2>/dev/null || print -r -- "")" + + local emit=0 + if (( apex_startup_done == 0 )); then + (( APEX[STARTUP_BURST] )) && emit=1 + fi + (( apex_pwd_changed )) && emit=1 + [[ "$apex_venv_name" != "$apex_prev_venv_name" ]] && emit=1 + [[ "$apex_target_sig" != "$apex_prev_target_sig" ]] && emit=1 + (( apex_in_git != apex_prev_in_git )) && emit=1 + [[ "$apex_git_branch" != "$apex_prev_git_branch" ]] && emit=1 + [[ "$apex_git_op" != "$apex_prev_git_op" ]] && emit=1 + [[ "$proj_sig" != "$apex_prev_proj_sig" ]] && emit=1 + + (( emit )) || return 0 + + # If nothing to say, say nothing. + if [[ -z "$proj_sig" && -z "$apex_venv_name" && -z "$apex_target_sig" ]] && (( apex_in_git == 0 )); then + apex_pwd_changed=0 + apex_startup_done=1 + return 0 + fi + + local out="%F{${C[MUTED]}}${I[RADAR]}%f " + + # Git first + if (( apex_in_git )); then + if [[ -n "$apex_git_op" ]]; then + out+="%F{${C[ALERT]}}${I[GIT]} ${apex_git_branch} ${apex_git_op}%f" + else + out+="%F{${C[CYAN]}}${I[GIT]} ${apex_git_branch}%f" + fi + fi + + [[ -n "$proj_sig" ]] && out+="${out:+ %F{${C[MUTED]}}·%f }%F{${C[MUTED]}}${proj_sig}%f" + [[ -n "$apex_venv_name" ]] && out+="${out:+ %F{${C[MUTED]}}·%f }%F{${C[CYAN]}}(${apex_venv_name})%f" + [[ -n "$apex_target_sig" ]] && out+="${out:+ %F{${C[MUTED]}}·%f }%F{${C[CYAN]}}(${apex_target_sig})%f" + + print -P "$out" + + apex_prev_venv_name="$apex_venv_name" + apex_prev_target_sig="$apex_target_sig" + apex_prev_in_git="$apex_in_git" + apex_prev_git_branch="$apex_git_branch" + apex_prev_git_op="$apex_git_op" + apex_prev_proj_sig="$proj_sig" + + apex_pwd_changed=0 + apex_startup_done=1 +} + +# ----------------------------------------------------------------------------- +# 11) HOOKS +# ----------------------------------------------------------------------------- +apex_preexec_hook() { + apex_has_run_cmd=1 + apex_cmd_start=${EPOCHREALTIME:-$EPOCHSECONDS} + apex_last_cmd="$1" +} + +apex_chpwd_hook() { + apex_pwd_changed=1 +} + +apex_precmd_hook() { + local ec=$? + + apex_update_intel + apex_git_update + + # Did a command actually run since the last prompt? + local ran=0 + (( apex_has_run_cmd )) && ran=1 + + if (( ran )); then + local now=${EPOCHREALTIME:-$EPOCHSECONDS} + local -i ms + ms=$(( (now - apex_cmd_start) * 1000 )) + + # Show time if: slow OR ops OR failed. + local dur="" + if (( ms >= ${APEX[SLOW_SOFT_MS]} )) || [[ "$apex_last_cmd" =~ ${APEX[OPS_RE]} ]] || (( ec != 0 )); then + dur="$(printf "%.2fs" $(( ms / 1000.0 )))" + fi + + apex_radar_aar $ec "$apex_last_cmd" "$dur" $ms + + apex_has_run_cmd=0 + + # Spacer between AAR and context burst / prompt. + print -r -- "" + fi + + apex_radar_context_burst +} + +autoload -Uz add-zsh-hook +add-zsh-hook preexec apex_preexec_hook +add-zsh-hook precmd apex_precmd_hook +add-zsh-hook chpwd apex_chpwd_hook + +# ----------------------------------------------------------------------------- +# 12) PROMPT BUILD +# ----------------------------------------------------------------------------- +build_prompt() { + local ec=$? + + # Line 1: identity + territory (left) + print -n "$(apex_identity)" + print -n "$(apex_territory)" + print -n $' +' + + # Line 2: trigger posture + if (( EUID == 0 )); then + print -n "%F{${C[PURPLE]}}❯%f " + elif (( ec != 0 )); then + print -n "%F{${C[ALERT]}}❯%f " + else + print -n "%F{${C[CYAN]}}❯%f " + fi +} + +PROMPT='$(build_prompt)' +RPROMPT='$(build_rprompt)' \ No newline at end of file diff --git a/dot_config/zsh/apex-neon.zsh b/dot_config/zsh/apex-neon.zsh index 830858d..dd4dd15 100644 --- a/dot_config/zsh/apex-neon.zsh +++ b/dot_config/zsh/apex-neon.zsh @@ -56,8 +56,6 @@ APEX[SHOW_JOBS]=1 APEX[SHOW_RO]=1 APEX[GIT_AHEAD_BEHIND]=1 -ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=${C[MUTED]}" - # Ops commands (also match wrappers like sudo/doas/command) APEX[OPS_RE]='^((sudo|doas|command)[[:space:]]+)*((pacman|yay|paru|apt|dnf|brew|systemctl|docker|kubectl|helm|git))([[:space:]]|$)' @@ -102,7 +100,8 @@ typeset -g apex_prev_proj_sig="" # ----------------------------------------------------------------------------- apex__short_cmd() { local s="$1" - s="${s//$'\n'/ }" + s="${s//$' +'/ }" s="${s#"${s%%[![:space:]]*}"}" # ltrim s="${s%"${s##*[![:space:]]}"}" # rtrim print -r -- "${s[1,90]}" @@ -353,7 +352,7 @@ apex_radar_aar() { 143) # SIGTERM print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[GOLD]}}TERM%f %F{${C[WHITE]}}${short}%f${dur_chunk}" ;; - *) + *) print -P "%F{${C[MUTED]}}${I[RADAR]}%f %F{${C[ALERT]}}✘ ${ec}%f %F{${C[WHITE]}}${short}%f${dur_chunk}" ;; esac @@ -472,7 +471,8 @@ build_prompt() { # Line 1: identity + territory (left) print -n "$(apex_identity)" print -n "$(apex_territory)" - print -n $'\n' + print -n $' +' # Line 2: trigger posture if (( EUID == 0 )); then @@ -485,4 +485,4 @@ build_prompt() { } PROMPT='$(build_prompt)' -RPROMPT='$(build_rprompt)' +RPROMPT='$(build_rprompt)' \ No newline at end of file diff --git a/dot_config/zsh/dot_zshrc b/dot_config/zsh/dot_zshrc.tmpl similarity index 94% rename from dot_config/zsh/dot_zshrc rename to dot_config/zsh/dot_zshrc.tmpl index e74a11e..b3fa2e5 100644 --- a/dot_config/zsh/dot_zshrc +++ b/dot_config/zsh/dot_zshrc.tmpl @@ -28,4 +28,4 @@ bindkey -M vicmd 'k' history-substring-search-up bindkey -M vicmd 'j' history-substring-search-down # Initialize Apex Neon Theme -source ~/.config/zsh/apex-neon.zsh +source ~/.config/zsh/{{ .chezmoi.config.data.theme }}.zsh diff --git a/dot_gemini/settings.json b/dot_gemini/settings.json.tmpl similarity index 51% rename from dot_gemini/settings.json rename to dot_gemini/settings.json.tmpl index d94c4ae..6db005c 100644 --- a/dot_gemini/settings.json +++ b/dot_gemini/settings.json.tmpl @@ -5,6 +5,6 @@ } }, "ui": { - "theme": "/home/mpuchstein/Dev/Themes/apex/dist/gemini/apex-neon.json" + "theme": "{{ .chezmoi.homeDir }}/.gemini/themes/{{ .chezmoi.config.data.theme }}.json" } } diff --git a/dot_gemini/themes/apex-aeon.json b/dot_gemini/themes/apex-aeon.json new file mode 100644 index 0000000..a1d3e92 --- /dev/null +++ b/dot_gemini/themes/apex-aeon.json @@ -0,0 +1,24 @@ +{ + "name": "Apex Aeon", + "type": "custom", + "Background": "#f5f5f5", + "Foreground": "#0a0a0a", + "LightBlue": "#33bccc", + "AccentBlue": "#007a88", + "AccentPurple": "#7a3cff", + "AccentCyan": "#33bccc", + "AccentGreen": "#00b377", + "AccentYellow": "#d18f00", + "AccentRed": "#ff0044", + "Comment": "#737373", + "Gray": "#a0a0a0", + "DiffAdded": "#00b377", + "DiffRemoved": "#ff0044", + "DiffModified": "#d18f00", + "text": { + "primary": "#0a0a0a", + "secondary": "#737373", + "accent": "#007a88", + "response": "#0a0a0a" + } +} \ No newline at end of file diff --git a/dot_gemini/themes/apex-neon.json b/dot_gemini/themes/apex-neon.json new file mode 100644 index 0000000..db11b47 --- /dev/null +++ b/dot_gemini/themes/apex-neon.json @@ -0,0 +1,24 @@ +{ + "name": "Apex Neon", + "type": "custom", + "Background": "#050505", + "Foreground": "#ededed", + "LightBlue": "#5af3ff", + "AccentBlue": "#00eaff", + "AccentPurple": "#9d00ff", + "AccentCyan": "#5af3ff", + "AccentGreen": "#00ff99", + "AccentYellow": "#ffb700", + "AccentRed": "#ff0044", + "Comment": "#737373", + "Gray": "#404040", + "DiffAdded": "#00ff99", + "DiffRemoved": "#ff0044", + "DiffModified": "#ffb700", + "text": { + "primary": "#ededed", + "secondary": "#737373", + "accent": "#00eaff", + "response": "#ededed" + } +} \ No newline at end of file diff --git a/dot_local/bin/executable_refresh-apex-themes b/dot_local/bin/executable_refresh-apex-themes new file mode 100644 index 0000000..95742ec --- /dev/null +++ b/dot_local/bin/executable_refresh-apex-themes @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +set -euo pipefail + +apex_dist="${APEX_DIST_DIR:-$HOME/Dev/Themes/apex/dist}" + +if [[ ! -d "$apex_dist" ]]; then + echo "apex dist not found: $apex_dist" >&2 + exit 1 +fi + +source_dir="${CHEZMOI_SOURCE_DIR:-}" +if [[ -z "$source_dir" ]] && command -v chezmoi >/dev/null 2>&1; then + source_dir="$(chezmoi source-path 2>/dev/null || true)" +fi +if [[ -z "$source_dir" ]] && [[ -d "./dot_config" ]]; then + source_dir="$(pwd)" +fi +if [[ -z "$source_dir" ]]; then + echo "could not determine chezmoi source dir (set CHEZMOI_SOURCE_DIR)" >&2 + exit 1 +fi + +mkdir -p "$source_dir/dot_config/alacritty/themes" +cp "$apex_dist/alacritty/"*.toml "$source_dir/dot_config/alacritty/themes/" + +mkdir -p "$source_dir/dot_config/btop/themes" +cp "$apex_dist/btop/"*.theme "$source_dir/dot_config/btop/themes/" + +mkdir -p "$source_dir/dot_config/fuzzel/themes" +for src in "$apex_dist"/fuzzel/*-fuzzel.ini; do + base="$(basename "$src" -fuzzel.ini)" + cp "$src" "$source_dir/dot_config/fuzzel/themes/${base}.ini" +done + +mkdir -p "$source_dir/dot_config/gtk-4.0" +cp "$apex_dist/gtk4/gtk.css" "$source_dir/dot_config/gtk-4.0/gtk.css" + +mkdir -p "$source_dir/dot_gemini/themes" +cp "$apex_dist/gemini/"*.json "$source_dir/dot_gemini/themes/" + +mkdir -p "$source_dir/dot_config/ghostty/themes" +cp "$apex_dist/ghostty/"* "$source_dir/dot_config/ghostty/themes/" + +mkdir -p "$source_dir/dot_config/hypr/hyprland.d" +for src in "$apex_dist"/hyprland/*-colors.conf; do + base="$(basename "$src" -colors.conf)" + cp "$src" "$source_dir/dot_config/hypr/hyprland.d/theme-${base}.conf" +done + +mkdir -p "$source_dir/dot_config/kitty/themes" +cp "$apex_dist/kitty/"*.conf "$source_dir/dot_config/kitty/themes/" + +mkdir -p "$source_dir/dot_config/nvim/colors" +cp "$apex_dist/nvim/colors/"*.lua "$source_dir/dot_config/nvim/colors/" + +mkdir -p "$source_dir/dot_config/owlry/themes" +cp "$apex_dist/owlry/"*.css "$source_dir/dot_config/owlry/themes/" + +mkdir -p "$source_dir/dot_config/sherlock/themes" +cp "$apex_dist/sherlock/"*.css "$source_dir/dot_config/sherlock/themes/" + +mkdir -p "$source_dir/dot_config/spicetify/private_Themes/apex-neon" +cp "$apex_dist/spicetify/apex-neon-color.ini" "$source_dir/dot_config/spicetify/private_Themes/apex-neon/color.ini" +cp "$apex_dist/spicetify/apex-neon-user.css" "$source_dir/dot_config/spicetify/private_Themes/apex-neon/user.css" + +mkdir -p "$source_dir/dot_config/spicetify/private_Themes/apex-aeon" +cp "$apex_dist/spicetify/apex-aeon-color.ini" "$source_dir/dot_config/spicetify/private_Themes/apex-aeon/color.ini" +cp "$apex_dist/spicetify/apex-aeon-user.css" "$source_dir/dot_config/spicetify/private_Themes/apex-aeon/user.css" + +mkdir -p "$source_dir/dot_config/swaync/themes" +for src in "$apex_dist"/swaync/*-style.css; do + base="$(basename "$src" -style.css)" + cp "$src" "$source_dir/dot_config/swaync/themes/${base}.css" +done + +mkdir -p "$source_dir/dot_config/waybar/themes" +for src in "$apex_dist"/waybar/*-colors.css; do + base="$(basename "$src" -colors.css)" + cp "$src" "$source_dir/dot_config/waybar/themes/${base}.css" +done + +mkdir -p "$source_dir/dot_config/wezterm/colors" +cp "$apex_dist/wezterm/"*.toml "$source_dir/dot_config/wezterm/colors/" + +mkdir -p "$source_dir/dot_config/zathura/themes" +for src in "$apex_dist"/zathura/*-zathurarc; do + base="$(basename "$src" -zathurarc)" + cp "$src" "$source_dir/dot_config/zathura/themes/${base}.zathurarc" +done + +mkdir -p "$source_dir/dot_config/zed/themes" +cp "$apex_dist/zed/"*.json "$source_dir/dot_config/zed/themes/" + +mkdir -p "$source_dir/dot_config/zsh" +for src in "$apex_dist"/zsh/*.zsh-theme; do + base="$(basename "$src" .zsh-theme)" + cp "$src" "$source_dir/dot_config/zsh/${base}.zsh" +done + +printf "Refreshed apex themes from %s -> %s\n" "$apex_dist" "$source_dir"