theme: template configs and refresh apex assets

- template theme selection in alacritty, btop, fuzzel, ghostty, waybar, swaync, wezterm, zathura, gemini, zsh, and nvim astroui

- add apex-aeon assets and refresh apex-neon palettes across terminals, editors, and UI components

- switch UI fonts to GeistMono in GTK/Qt, Hyprland/Hyprlock, Kitty, Zed, and Satty

- add refresh-apex-themes helper to sync theme outputs
This commit is contained in:
s0wlz (Matthias Puchstein)
2025-12-31 07:42:44 +01:00
parent f5f02e9f49
commit 0b8e001bde
65 changed files with 2283 additions and 799 deletions

View File

@@ -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

View File

@@ -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"

View File

@@ -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"

View File

@@ -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

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1 @@
theme = "{{ .chezmoi.config.data.theme }}"

View File

@@ -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

View File

@@ -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

View File

@@ -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

129
dot_config/gtk-4.0/gtk.css Normal file
View File

@@ -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;
}
}

View File

@@ -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

View File

@@ -1 +0,0 @@
source = ~/.config/hypr/hyprland.d/theme-apex-neon.conf

View File

@@ -0,0 +1 @@
source = ~/.config/hypr/hyprland.d/theme-{{ .chezmoi.config.data.theme }}.conf

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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 (07)
# 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 (815)
# 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

View File

@@ -49,7 +49,7 @@ color7 #ededed
# Bright bank (815)
# 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

View File

@@ -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

View File

@@ -161,4 +161,4 @@ end
M.load()
return M
return M

View File

@@ -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

View File

@@ -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]

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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

View File

@@ -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

View File

@@ -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"

View File

@@ -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;
}

View File

@@ -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;
}
}

View File

@@ -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);
}

View File

@@ -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

View File

@@ -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

View File

@@ -0,0 +1 @@
/* Apex Aeon - Spicetify overrides */

View File

@@ -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

View File

@@ -1 +1 @@
/* Apex Neon - Spicetify overrides */
/* Apex Neon - Spicetify overrides */

View File

@@ -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;
}

View File

@@ -0,0 +1 @@
@import "themes/{{ .chezmoi.config.data.theme }}.css";

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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",
]

View File

@@ -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",
]

View File

@@ -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

View File

@@ -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"

View File

@@ -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"

View File

@@ -0,0 +1 @@
include {{ .chezmoi.homeDir }}/.config/zathura/themes/{{ .chezmoi.config.data.theme }}.zathurarc

View File

@@ -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)",

View File

@@ -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 @@
}
}
}
]
}

View File

@@ -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)'

View File

@@ -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)'

View File

@@ -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

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"
}
}

View File

@@ -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"