feat: all new colors

This commit is contained in:
2026-03-22 04:01:03 -04:00
parent 2082904cd1
commit 73e2ea9e9a
14 changed files with 301 additions and 75 deletions

View File

@@ -1,3 +1,5 @@
import = ["~/.config/rider-palette/alacritty.toml"]
[font]
size = 16
@@ -20,21 +22,3 @@ style = "Bold Italic"
[window]
opacity = 0.95
padding = { x = 5, y = 5 }
[colors.primary]
background = "#1a1b26"
foreground = "#c0caf5"
[colors.normal]
black = "#1e1e2e"
red = "#f38ba8"
green = "#a6e3a1"
yellow = "#f9e2af"
blue = "#61afef"
magenta = "#f5c2e7"
cyan = "#94e2d5"
white = "#cdd6f4"
[colors.cursor]
text = "CellBackground"
cursor = "CellForeground"

View File

@@ -1,8 +1,8 @@
local M = {}
local fallback_palette = {
bg = '#262626',
gutter = '#282828',
bg = '#191A1C',
gutter = '#191A1C',
cursor_line = '#202424',
selection = '#08335E',
border = '#404040',
@@ -41,11 +41,11 @@ M.palette = palette
function M.on_colors(colors)
colors.bg = palette.bg
colors.bg_dark = palette.gutter
colors.bg_dark = palette.bg
colors.bg_float = palette.bg
colors.bg_popup = palette.bg
colors.bg_sidebar = palette.gutter
colors.bg_statusline = palette.gutter
colors.bg_sidebar = palette.bg
colors.bg_statusline = palette.bg
colors.bg_highlight = palette.cursor_line
colors.bg_search = palette.selection
colors.bg_visual = palette.selection
@@ -64,7 +64,7 @@ function M.on_colors(colors)
colors.red = palette.error
colors.teal = palette.func
colors.yellow = palette.string
colors.terminal_black = palette.gutter
colors.terminal_black = palette.bg
end
local function set_many(hl, groups, spec)

View File

@@ -10,11 +10,12 @@ python3 ~/.config/rider-palette/generate.py
Generated outputs:
- `palette.sh`: shell env vars for prompts and scripts
- `palette.sh`: shell env vars plus shared `LS_COLORS` for prompts and scripts
- `palette.css`: CSS variables for Waybar and Wofi
- `palette.hyprland.conf`: Hyprlang variables for Hyprland and Hyprlock
- `palette.rasi`: Rasi variables for Rofi
- `tmux.conf`: tmux status and pane colors
- `alacritty.toml`: Alacritty color theme
- `bash-prompt.sh`: bash prompt using the shared palette
- `p10k.zsh`: Powerlevel10k overrides using the shared palette

View File

@@ -0,0 +1,73 @@
# Generated from palette.json by generate.py. Do not edit directly.
[colors.primary]
background = "#191A1C"
foreground = "#BDBDBD"
dim_foreground = "#808080"
bright_foreground = "#F0F0F0"
[colors.cursor]
text = "#191A1C"
cursor = "#F0F0F0"
[colors.vi_mode_cursor]
text = "#191A1C"
cursor = "#6C95EB"
[colors.selection]
text = "#F0F0F0"
background = "#08335E"
[colors.search.matches]
foreground = "#F0F0F0"
background = "#404040"
[colors.search.focused_match]
foreground = "#191A1C"
background = "#39CC9B"
[colors.hints.start]
foreground = "#191A1C"
background = "#C9A26D"
[colors.hints.end]
foreground = "#F0F0F0"
background = "#202424"
[colors.line_indicator]
foreground = "None"
background = "None"
[colors.footer_bar]
foreground = "#F0F0F0"
background = "#191A1C"
[colors.normal]
black = "#191A1C"
red = "#FF5647"
green = "#39CC9B"
yellow = "#C9A26D"
blue = "#6C95EB"
magenta = "#C191FF"
cyan = "#66C3CC"
white = "#BDBDBD"
[colors.bright]
black = "#404040"
red = "#FF5647"
green = "#85C46C"
yellow = "#C9A26D"
blue = "#6C95EB"
magenta = "#E1BFFF"
cyan = "#66C3CC"
white = "#F0F0F0"
[colors.dim]
black = "#202424"
red = "#FF5647"
green = "#85C46C"
yellow = "#C9A26D"
blue = "#6C95EB"
magenta = "#C191FF"
cyan = "#66C3CC"
white = "#808080"

View File

@@ -26,7 +26,7 @@ __rider_git_branch() {
}
__rider_set_bash_prompt() {
PS1="${debian_chroot:+($debian_chroot)}$(rider_fg "$RIDER_FG_BRIGHT")\u@\h${RIDER_RESET}$(rider_fg "$RIDER_BORDER"):$(rider_fg "$RIDER_KEYWORD")\w${RIDER_RESET}$(__rider_git_branch)$(rider_fg "$RIDER_BORDER") \$ ${RIDER_RESET}"
PS1="${debian_chroot:+($debian_chroot)}$(rider_fg "$RIDER_FG_BRIGHT")\u@\h${RIDER_RESET}$(rider_fg "$RIDER_BORDER"):$(rider_fg "$RIDER_KEYWORD")\w${RIDER_RESET}$(__rider_git_branch)$(rider_fg "$RIDER_BORDER") \\$ ${RIDER_RESET}"
}
PROMPT_COMMAND=__rider_set_bash_prompt

View File

@@ -20,6 +20,11 @@ def hex_no_hash(value: str) -> str:
return value.lstrip("#")
def hex_to_rgb(value: str) -> tuple[int, int, int]:
value = hex_no_hash(value)
return tuple(int(value[index:index + 2], 16) for index in (0, 2, 4))
def camel_from_snake(name: str) -> str:
head, *tail = name.split("_")
return head + "".join(part.capitalize() for part in tail)
@@ -29,6 +34,81 @@ def write(path: Path, content: str) -> None:
path.write_text(content.rstrip() + "\n")
def sgr_fg(value: str, *, bold: bool = False) -> str:
red, green, blue = hex_to_rgb(value)
parts = []
if bold:
parts.append("1")
parts.append(f"38;2;{red};{green};{blue}")
return ";".join(parts)
def build_ls_colors(colors: dict[str, str]) -> str:
entries = {
"no": "0",
"fi": "0",
"di": sgr_fg(colors["func"], bold=True),
"ln": sgr_fg(colors["field"], bold=True),
"or": sgr_fg(colors["error"], bold=True),
"mi": "0",
"so": sgr_fg(colors["type"]),
"pi": sgr_fg(colors["string"]),
"do": sgr_fg(colors["func"], bold=True),
"bd": sgr_fg(colors["number"]),
"cd": sgr_fg(colors["number"]),
"su": sgr_fg(colors["error"], bold=True),
"sg": sgr_fg(colors["escape"], bold=True),
"ex": sgr_fg(colors["func"], bold=True),
"*.tar": sgr_fg(colors["string"]),
"*.tgz": sgr_fg(colors["string"]),
"*.gz": sgr_fg(colors["string"]),
"*.bz2": sgr_fg(colors["string"]),
"*.xz": sgr_fg(colors["string"]),
"*.zip": sgr_fg(colors["string"]),
"*.7z": sgr_fg(colors["string"]),
"*.zst": sgr_fg(colors["string"]),
"*.rar": sgr_fg(colors["string"]),
"*.jpg": sgr_fg(colors["field"]),
"*.jpeg": sgr_fg(colors["field"]),
"*.png": sgr_fg(colors["field"]),
"*.gif": sgr_fg(colors["field"]),
"*.svg": sgr_fg(colors["field"]),
"*.webp": sgr_fg(colors["field"]),
"*.mp3": sgr_fg(colors["type"]),
"*.flac": sgr_fg(colors["type"]),
"*.wav": sgr_fg(colors["type"]),
"*.mp4": sgr_fg(colors["type"]),
"*.mkv": sgr_fg(colors["type"]),
"*.mov": sgr_fg(colors["type"]),
"*.pdf": sgr_fg(colors["number"]),
"*.md": sgr_fg(colors["comment"]),
"*.txt": sgr_fg(colors["fg"]),
"*.log": sgr_fg(colors["comment"]),
"*.conf": sgr_fg(colors["keyword"]),
"*.json": sgr_fg(colors["keyword"]),
"*.yaml": sgr_fg(colors["keyword"]),
"*.yml": sgr_fg(colors["keyword"]),
"*.toml": sgr_fg(colors["keyword"]),
"*.ini": sgr_fg(colors["keyword"]),
"*.sh": sgr_fg(colors["func"], bold=True),
"*.bash": sgr_fg(colors["func"], bold=True),
"*.zsh": sgr_fg(colors["func"], bold=True),
"*.py": sgr_fg(colors["func"]),
"*.js": sgr_fg(colors["keyword"]),
"*.ts": sgr_fg(colors["keyword"]),
"*.tsx": sgr_fg(colors["keyword"]),
"*.jsx": sgr_fg(colors["keyword"]),
"*.lua": sgr_fg(colors["type_alt"]),
"*.rs": sgr_fg(colors["type_alt"]),
"*.go": sgr_fg(colors["type_alt"]),
"*.c": sgr_fg(colors["field"]),
"*.h": sgr_fg(colors["field"]),
"*.cpp": sgr_fg(colors["field"]),
"*.hpp": sgr_fg(colors["field"]),
}
return ":".join(f"{key}={value}" for key, value in entries.items())
def render_palette_sh(colors: dict[str, str]) -> str:
lines = [
"# Generated from palette.json by generate.py. Do not edit directly.",
@@ -36,6 +116,9 @@ def render_palette_sh(colors: dict[str, str]) -> str:
]
for name, value in colors.items():
lines.append(f'export RIDER_{name.upper()}="{value}"')
lines.append("")
lines.append("# Shared Rider palette for GNU ls and compatible tools.")
lines.append(f'export LS_COLORS="{build_ls_colors(colors)}"')
return "\n".join(lines)
@@ -81,11 +164,17 @@ def render_tmux_conf(colors: dict[str, str]) -> str:
return dedent(
f"""
# Generated from palette.json by generate.py. Do not edit directly.
# Source this near the end of ~/.tmux.conf, after plugin/theme setup.
# Source this near the end of ~/.tmux.conf.
set -g status-style "bg={colors['bg']},fg={colors['fg_bright']}"
set -g status-left-style "bg={colors['bg']},fg={colors['fg_bright']}"
set -g status-right-style "bg={colors['bg']},fg={colors['fg_bright']}"
set -g status-left-length 48
set -g status-right-length 80
set -g status-justify centre
set -g window-status-separator " "
set -g status-left "#[fg={colors['bg']},bg={colors['func']},bold] #S #[fg={colors['func']},bg={colors['bg']}]"
set -g status-right "#[fg={colors['field']},bg={colors['bg']}]#[fg={colors['bg']},bg={colors['field']}] %Y-%m-%d #[fg={colors['string']},bg={colors['field']}]#[fg={colors['bg']},bg={colors['string']}] %H:%M#[fg={colors['string']},bg={colors['bg']}]"
set -g message-style "bg={colors['cursor_line']},fg={colors['fg_bright']}"
set -g message-command-style "bg={colors['cursor_line']},fg={colors['fg_bright']}"
@@ -96,9 +185,89 @@ def render_tmux_conf(colors: dict[str, str]) -> str:
set -g clock-mode-colour "{colors['keyword']}"
set -g window-status-style "bg={colors['bg']},fg={colors['fg_gutter']}"
set -g window-status-current-style "bg={colors['cursor_line']},fg={colors['fg_bright']}"
set -g window-status-current-format "#[fg={colors['func']},bg={colors['cursor_line']},bold] #I #W "
set -g window-status-format "#[fg={colors['fg_gutter']},bg={colors['bg']}] #I #W "
set -g window-status-current-style "bg={colors['bg']},fg={colors['fg_bright']}"
set -g window-status-current-format "#[fg={colors['func']},bg={colors['bg']}]#[fg={colors['bg']},bg={colors['func']},bold] #I #[fg={colors['func']},bg={colors['border']}]#[fg={colors['fg_bright']},bg={colors['border']}] #W #[fg={colors['border']},bg={colors['bg']}]"
set -g window-status-format "#[fg={colors['cursor_line']},bg={colors['bg']}]#[fg={colors['fg_gutter']},bg={colors['cursor_line']}] #I #[fg={colors['cursor_line']},bg={colors['border']}]#[fg={colors['fg_bright']},bg={colors['border']}] #W #[fg={colors['border']},bg={colors['bg']}]"
"""
).strip()
def render_alacritty_toml(colors: dict[str, str]) -> str:
return dedent(
f"""
# Generated from palette.json by generate.py. Do not edit directly.
[colors.primary]
background = "{colors['bg']}"
foreground = "{colors['fg']}"
dim_foreground = "{colors['fg_gutter']}"
bright_foreground = "{colors['fg_bright']}"
[colors.cursor]
text = "{colors['bg']}"
cursor = "{colors['fg_bright']}"
[colors.vi_mode_cursor]
text = "{colors['bg']}"
cursor = "{colors['keyword']}"
[colors.selection]
text = "{colors['fg_bright']}"
background = "{colors['selection']}"
[colors.search.matches]
foreground = "{colors['fg_bright']}"
background = "{colors['border']}"
[colors.search.focused_match]
foreground = "{colors['bg']}"
background = "{colors['func']}"
[colors.hints.start]
foreground = "{colors['bg']}"
background = "{colors['string']}"
[colors.hints.end]
foreground = "{colors['fg_bright']}"
background = "{colors['cursor_line']}"
[colors.line_indicator]
foreground = "None"
background = "None"
[colors.footer_bar]
foreground = "{colors['fg_bright']}"
background = "{colors['bg']}"
[colors.normal]
black = "{colors['bg']}"
red = "{colors['error']}"
green = "{colors['func']}"
yellow = "{colors['string']}"
blue = "{colors['keyword']}"
magenta = "{colors['type']}"
cyan = "{colors['field']}"
white = "{colors['fg']}"
[colors.bright]
black = "{colors['border']}"
red = "{colors['error']}"
green = "{colors['comment']}"
yellow = "{colors['string']}"
blue = "{colors['keyword']}"
magenta = "{colors['type_alt']}"
cyan = "{colors['field']}"
white = "{colors['fg_bright']}"
[colors.dim]
black = "{colors['cursor_line']}"
red = "{colors['error']}"
green = "{colors['comment']}"
yellow = "{colors['string']}"
blue = "{colors['keyword']}"
magenta = "{colors['type']}"
cyan = "{colors['field']}"
white = "{colors['fg_gutter']}"
"""
).strip()
@@ -203,11 +372,12 @@ def render_readme() -> str:
Generated outputs:
- `palette.sh`: shell env vars for prompts and scripts
- `palette.sh`: shell env vars plus shared `LS_COLORS` for prompts and scripts
- `palette.css`: CSS variables for Waybar and Wofi
- `palette.hyprland.conf`: Hyprlang variables for Hyprland and Hyprlock
- `palette.rasi`: Rasi variables for Rofi
- `tmux.conf`: tmux status and pane colors
- `alacritty.toml`: Alacritty color theme
- `bash-prompt.sh`: bash prompt using the shared palette
- `p10k.zsh`: Powerlevel10k overrides using the shared palette
@@ -226,6 +396,7 @@ def main() -> None:
ROOT / "palette.hyprland.conf": render_palette_hypr(colors),
ROOT / "palette.rasi": render_palette_rasi(colors),
ROOT / "tmux.conf": render_tmux_conf(colors),
ROOT / "alacritty.toml": render_alacritty_toml(colors),
ROOT / "bash-prompt.sh": render_bash_prompt(),
ROOT / "p10k.zsh": render_p10k_zsh(),
ROOT / "README.md": render_readme(),

View File

@@ -1,7 +1,7 @@
/* Generated from palette.json by generate.py. Do not edit directly. */
:root {
--rider-bg: #262626;
--rider-gutter: #282828;
--rider-bg: #191A1C;
--rider-gutter: #191A1C;
--rider-cursor-line: #202424;
--rider-selection: #08335E;
--rider-border: #404040;
@@ -20,8 +20,8 @@
--rider-error: #FF5647;
}
@define-color rider-bg #262626;
@define-color rider-gutter #282828;
@define-color rider-bg #191A1C;
@define-color rider-gutter #191A1C;
@define-color rider-cursor-line #202424;
@define-color rider-selection #08335E;
@define-color rider-border #404040;

View File

@@ -2,10 +2,10 @@
# Usage:
# source = ~/.config/rider-palette/palette.hyprland.conf
$bg = rgb(262626)
$bgAlpha = 262626
$gutter = rgb(282828)
$gutterAlpha = 282828
$bg = rgb(191A1C)
$bgAlpha = 191A1C
$gutter = rgb(191A1C)
$gutterAlpha = 191A1C
$cursor_line = rgb(202424)
$cursorLineAlpha = 202424
$selection = rgb(08335E)

View File

@@ -1,8 +1,8 @@
{
"name": "rider-black",
"colors": {
"bg": "#262626",
"gutter": "#282828",
"bg": "#191A1C",
"gutter": "#191A1C",
"cursor_line": "#202424",
"selection": "#08335E",
"border": "#404040",

View File

@@ -1,7 +1,7 @@
/* Generated from palette.json by generate.py. Do not edit directly. */
* {
rider-bg: #262626;
rider-gutter: #282828;
rider-bg: #191A1C;
rider-gutter: #191A1C;
rider-cursor-line: #202424;
rider-selection: #08335E;
rider-border: #404040;

View File

@@ -1,7 +1,7 @@
# Generated from palette.json by generate.py. Do not edit directly.
export RIDER_BG="#262626"
export RIDER_GUTTER="#282828"
export RIDER_BG="#191A1C"
export RIDER_GUTTER="#191A1C"
export RIDER_CURSOR_LINE="#202424"
export RIDER_SELECTION="#08335E"
export RIDER_BORDER="#404040"
@@ -18,3 +18,6 @@ export RIDER_STRING="#C9A26D"
export RIDER_NUMBER="#ED94C0"
export RIDER_ESCAPE="#D688D4"
export RIDER_ERROR="#FF5647"
# Shared Rider palette for GNU ls and compatible tools.
export LS_COLORS="no=0:fi=0:di=1;38;2;108;149;235:ln=1;38;2;102;195;204:or=1;38;2;255;86;71:mi=0:so=38;2;193;145;255:pi=38;2;201;162;109:do=1;38;2;57;204;155:bd=38;2;237;148;192:cd=38;2;237;148;192:su=1;38;2;255;86;71:sg=1;38;2;214;136;212:ex=1;38;2;57;204;155:*.tar=38;2;201;162;109:*.tgz=38;2;201;162;109:*.gz=38;2;201;162;109:*.bz2=38;2;201;162;109:*.xz=38;2;201;162;109:*.zip=38;2;201;162;109:*.7z=38;2;201;162;109:*.zst=38;2;201;162;109:*.rar=38;2;201;162;109:*.jpg=38;2;102;195;204:*.jpeg=38;2;102;195;204:*.png=38;2;102;195;204:*.gif=38;2;102;195;204:*.svg=38;2;102;195;204:*.webp=38;2;102;195;204:*.mp3=38;2;193;145;255:*.flac=38;2;193;145;255:*.wav=38;2;193;145;255:*.mp4=38;2;193;145;255:*.mkv=38;2;193;145;255:*.mov=38;2;193;145;255:*.pdf=38;2;237;148;192:*.md=38;2;133;196;108:*.txt=38;2;189;189;189:*.log=38;2;133;196;108:*.conf=38;2;108;149;235:*.json=38;2;108;149;235:*.yaml=38;2;108;149;235:*.yml=38;2;108;149;235:*.toml=38;2;108;149;235:*.ini=38;2;108;149;235:*.sh=1;38;2;57;204;155:*.bash=1;38;2;57;204;155:*.zsh=1;38;2;57;204;155:*.py=38;2;57;204;155:*.js=38;2;108;149;235:*.ts=38;2;108;149;235:*.tsx=38;2;108;149;235:*.jsx=38;2;108;149;235:*.lua=38;2;225;191;255:*.rs=38;2;225;191;255:*.go=38;2;225;191;255:*.c=38;2;102;195;204:*.h=38;2;102;195;204:*.cpp=38;2;102;195;204:*.hpp=38;2;102;195;204"

View File

@@ -1,19 +1,23 @@
# Generated from palette.json by generate.py. Do not edit directly.
# Source this near the end of ~/.tmux.conf, after plugin/theme setup.
# Source this near the end of ~/.tmux.conf.
set -g status-style "bg=#262626,fg=#F0F0F0"
set -g status-left-style "bg=#262626,fg=#F0F0F0"
set -g status-right-style "bg=#262626,fg=#F0F0F0"
set -g status-left-length 30
set -g status-right-length 30
set -g status-justify centre
set -g window-status-separator " "
set -g status-left "#[fg=#191A1C,bg=#39CC9B,bold] #S #[fg=#39CC9B,bg=#191A1C]"
set -g status-right "#[fg=#66C3CC,bg=#191A1C]#[fg=#191A1C,bg=#66C3CC] %Y-%m-%d #[fg=#C9A26D,bg=#66C3CC]#[fg=#191A1C,bg=#C9A26D] %H:%M #[fg=#C9A26D,bg=#191A1C]"
set -g message-style "bg=#202424,fg=#F0F0F0"
set -g message-command-style "bg=#202424,fg=#F0F0F0"
set -g mode-style "bg=#08335E,fg=#F0F0F0"
set -g mode-style "bg=#39CC9B,fg=#191A1C"
set -g pane-border-style "fg=#404040"
set -g pane-active-border-style "fg=#6C95EB"
set -g clock-mode-colour "#6C95EB"
set -g window-status-style "bg=#262626,fg=#808080"
set -g window-status-current-style "bg=#202424,fg=#F0F0F0"
set -g window-status-current-format "#[fg=#39CC9B,bg=#202424,bold] #I #W "
set -g window-status-format "#[fg=#808080,bg=#262626] #I #W "
set -g window-status-style "bg=#191A1C,fg=#808080"
set -g window-status-current-style "bg=#191A1C,fg=#F0F0F0"
set -g window-status-current-format "#[fg=#39CC9B,bg=#191A1C]#[fg=#191A1C,bg=#39CC9B,bold] #I #[fg=#39CC9B,bg=#404040]#[fg=#F0F0F0,bg=#404040] #W #[fg=#404040,bg=#191A1C]"
set -g window-status-format "#[fg=#202424,bg=#191A1C]#[fg=#808080,bg=#202424] #I #[fg=#202424,bg=#404040]#[fg=#F0F0F0,bg=#404040] #W #[fg=#404040,bg=#191A1C]"

View File

@@ -11,6 +11,7 @@ set -g default-terminal "tmux-256color"
set -g base-index 1
set -g pane-base-index 1
set -g renumber-windows on
set -g status-position top
# using vim motions
bind-key h select-pane -L
@@ -25,26 +26,5 @@ bind % split-window -h -c "#{pane_current_path}"
# New window in same directory
bind c new-window -c "#{pane_current_path}"
# list of plugins
set -g @plugin 'tmux-plugins/tpm'
# set -g @plugin '2kabhishek/tmux2k'
set -g @plugin 'catppuccin/tmux'
set-option -g status-position top
set -g @catppuccin_flavor 'mocha' # latte, frappe, macchiato or mocha
set -g @catppuccin_window_status_style "rounded"
# configure theme
# set -g @tmux2k-theme 'catppuccin'
# set -g @tmux2k-theme 'onedark'
# set -g @tmux2k-icons-only true
# Use window name instead of pane title
set -g @catppuccin_window_text "#W"
set -g @catppuccin_window_current_text "#W"
# initialize TMUX plugin manager
run '~/.tmux/plugins/tpm/tpm'
# Shared Rider palette overrides
source-file ~/.config/rider-palette/tmux.conf

View File

@@ -120,3 +120,13 @@ source $ZSH/oh-my-zsh.sh
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
[[ -r ~/.config/rider-palette/p10k.zsh ]] && source ~/.config/rider-palette/p10k.zsh
export PATH="$HOME/.dotnet/tools:$HOME/.local/bin:$PATH"
# Apply the shared Rider palette last so it wins over OMZ defaults.
if [[ -r ~/.config/rider-palette/palette.sh ]]; then
source ~/.config/rider-palette/palette.sh
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}"
fi
if ls --color=auto -d . >/dev/null 2>&1; then
alias ls='ls --color=auto'
fi