Unify desktop theming around Rider palette

This commit is contained in:
2026-03-21 22:46:55 -04:00
parent 8996455e4f
commit fc69fc8cd9
23 changed files with 1347 additions and 127 deletions

View File

@@ -1,4 +1,4 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")"
stow -t ~ zsh tmux nvim hypr waybar alacritty
stow -t ~ bash zsh tmux nvim hypr waybar alacritty rider-palette walker

118
bash/.bashrc Normal file
View File

@@ -0,0 +1,118 @@
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth
# append to the history file, don't overwrite it
shopt -s histappend
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
# make less more friendly for non-text input files, see lesspipe(1)
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color|*-256color) color_prompt=yes;;
esac
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
*)
;;
esac
# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
#alias dir='dir --color=auto'
#alias vdir='vdir --color=auto'
#alias grep='grep --color=auto'
#alias fgrep='fgrep --color=auto'
#alias egrep='egrep --color=auto'
fi
# colored GCC warnings and errors
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
# Shared Rider palette prompt
if [ -r ~/.config/rider-palette/bash-prompt.sh ]; then
. ~/.config/rider-palette/bash-prompt.sh
fi

View File

@@ -17,6 +17,7 @@
# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf
source = ~/.config/rider-palette/palette.hyprland.conf
################
@@ -36,7 +37,7 @@ monitor=DP-3,1920x1080@60, 3440x1200,1
$terminal = alacritty
$fileManager = thunar
$navigator = firefox
$menu = wofi --show drun
$menu = walker
#################
@@ -49,6 +50,7 @@ $menu = wofi --show drun
# exec-once = $terminal
# exec-once = nm-applet &
exec-once = waybar & hyprpaper & mako & hypridle
exec-once = walker --gapplication-service
#############################
@@ -78,8 +80,8 @@ general {
border_size = 1
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = rgba(33ccffff)
col.inactive_border = rgba(595959ff)
col.active_border = $func
col.inactive_border = $border
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = false
@@ -192,6 +194,7 @@ bind = $mainMod, E, exec, $fileManager bind = $mainMod, N, exec, $navigator
bind = $mainMod, V, togglefloating
bind = $mainMod, F, fullscreen
bind = $mainMod, R, exec, $menu
bind = $mainMod ALT, SPACE, exec, $menu
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, S, togglesplit, # dwindle
bind = $mainMod, Q, exec, hyprlock

View File

@@ -1,7 +1,7 @@
source = $HOME/.config/hypr/mocha.conf
source = ~/.config/rider-palette/palette.hyprland.conf
$accent = $mauve
$accentAlpha = $mauveAlpha
$accent = $func
$accentAlpha = $funcAlpha
$font = JetBrainsMono Nerd Font
# GENERAL
@@ -14,14 +14,14 @@ background {
monitor =
path = $HOME/.config/hypr/hyprlock-background.png
blur_passes = 0
color = $base
color = $bg
}
# LAYOUT
label {
monitor =
text = Layout: $LAYOUT
color = $text
color = $fg_bright
font_size = 25
font_family = $font
position = 30, -30
@@ -33,7 +33,7 @@ label {
label {
monitor =
text = $TIME
color = $text
color = $fg_bright
font_size = 90
font_family = $font
position = -30, 0
@@ -45,7 +45,7 @@ label {
label {
monitor =
text = cmd[update:43200000] date +"%A, %d %B %Y"
color = $text
color = $fg_bright
font_size = 25
font_family = $font
position = -30, -150
@@ -57,7 +57,7 @@ label {
{
monitor = "";
text = "$FPRINTPROMPT";
color = "$text";
color = "$fg_bright";
font_size = 14;
font_family = font;
position = "0, -107";
@@ -85,15 +85,15 @@ input-field {
dots_spacing = 0.2
dots_center = true
outer_color = $accent
inner_color = $surface0
font_color = $text
inner_color = $cursor_line
font_color = $fg_bright
fade_on_empty = false
placeholder_text = <span foreground="##$textAlpha"><i>󰌾 Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>
placeholder_text = <span foreground="##$fgBrightAlpha"><i>󰌾 Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>
hide_input = false
check_color = $accent
fail_color = $red
fail_color = $error
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
capslock_color = $yellow
capslock_color = $string
position = 0, -47
halign = center
valign = center

View File

@@ -172,6 +172,12 @@ vim.o.scrolloff = 10
-- See `:help 'confirm'`
vim.o.confirm = true
-- Folding via treesitter
vim.o.foldmethod = 'expr'
vim.o.foldexpr = 'v:lua.vim.treesitter.foldexpr()'
vim.o.foldlevel = 99
vim.o.foldlevelstart = 99
-- [[ Basic Keymaps ]]
-- See `:help vim.keymap.set()`
@@ -216,6 +222,18 @@ vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper win
-- [[ Basic Autocommands ]]
-- See `:help lua-guide-autocommands`
vim.opt.autoread = true
vim.opt.updatetime = 200
vim.api.nvim_create_autocmd({ 'FocusGained', 'BufEnter', 'CursorHold', 'CursorHoldI' }, {
command = 'checktime',
})
vim.api.nvim_create_autocmd('FileChangedShellPost', {
callback = function()
vim.notify 'File changed on disk. Buffer reloaded.'
end,
})
-- Highlight when yanking (copying) text
-- Try it with `yap` in normal mode
@@ -491,7 +509,15 @@ require('lazy').setup({
-- Automatically install LSPs and related tools to stdpath for Neovim
-- Mason must be loaded before its dependents so we need to set it up here.
-- NOTE: `opts = {}` is the same as calling `require('mason').setup({})`
{ 'mason-org/mason.nvim', opts = {} },
{
'mason-org/mason.nvim',
opts = {
registries = {
'github:mason-org/mason-registry',
'github:Crashdummyy/mason-registry',
},
},
},
'mason-org/mason-lspconfig.nvim',
'WhoIsSethDaniel/mason-tool-installer.nvim',
@@ -895,8 +921,12 @@ require('lazy').setup({
'folke/tokyonight.nvim',
priority = 1000, -- Make sure to load this before all the other start plugins.
config = function()
local rider_black = require 'custom.rider_black'
---@diagnostic disable-next-line: missing-fields
require('tokyonight').setup {
on_colors = rider_black.on_colors,
on_highlights = rider_black.on_highlights,
styles = {
comments = { italic = false }, -- Disable italics in comments
},
@@ -955,7 +985,7 @@ require('lazy').setup({
main = 'nvim-treesitter', -- Current releases expose `setup()` from the top-level module
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
opts = {
ensure_installed = { 'bash', 'c', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' },
ensure_installed = { 'bash', 'c', 'c_sharp', 'diff', 'html', 'lua', 'luadoc', 'markdown', 'markdown_inline', 'query', 'vim', 'vimdoc' },
-- Autoinstall languages that are not installed
auto_install = true,
highlight = {
@@ -991,6 +1021,12 @@ require('lazy').setup({
require 'kickstart.plugins.neo-tree',
require 'kickstart.plugins.gitsigns', -- adds gitsigns recommend keymaps
{ -- C# / .NET LSP via Roslyn
'seblyng/roslyn.nvim',
ft = 'cs',
opts = {},
},
-- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua`
-- This is the easiest way to modularize your config.
--

View File

@@ -0,0 +1,278 @@
local M = {}
local fallback_palette = {
bg = '#262626',
gutter = '#282828',
cursor_line = '#202424',
selection = '#08335E',
border = '#404040',
fg = '#BDBDBD',
fg_bright = '#F0F0F0',
fg_gutter = '#808080',
comment = '#85C46C',
keyword = '#6C95EB',
type = '#C191FF',
type_alt = '#E1BFFF',
func = '#39CC9B',
field = '#66C3CC',
string = '#C9A26D',
number = '#ED94C0',
escape = '#D688D4',
error = '#FF5647',
}
local function load_palette()
local palette_file = vim.fn.expand '~/.config/rider-palette/palette.json'
if vim.fn.filereadable(palette_file) == 0 then
return fallback_palette
end
local ok, data = pcall(vim.json.decode, table.concat(vim.fn.readfile(palette_file), '\n'))
if not ok or type(data) ~= 'table' or type(data.colors) ~= 'table' then
return fallback_palette
end
return vim.tbl_extend('force', fallback_palette, data.colors)
end
local palette = load_palette()
M.palette = palette
function M.on_colors(colors)
colors.bg = palette.bg
colors.bg_dark = palette.gutter
colors.bg_float = palette.bg
colors.bg_popup = palette.bg
colors.bg_sidebar = palette.gutter
colors.bg_statusline = palette.gutter
colors.bg_highlight = palette.cursor_line
colors.bg_search = palette.selection
colors.bg_visual = palette.selection
colors.border = palette.border
colors.fg = palette.fg
colors.fg_dark = palette.fg_gutter
colors.fg_float = palette.fg
colors.fg_gutter = palette.fg_gutter
colors.comment = palette.comment
colors.blue = palette.keyword
colors.cyan = palette.field
colors.green = palette.func
colors.magenta = palette.type
colors.orange = palette.string
colors.purple = palette.type
colors.red = palette.error
colors.teal = palette.func
colors.yellow = palette.string
colors.terminal_black = palette.gutter
end
local function set_many(hl, groups, spec)
for _, group in ipairs(groups) do
hl[group] = spec
end
end
function M.on_highlights(hl)
set_many(hl, {
'Normal',
'NormalNC',
'SignColumn',
'FoldColumn',
}, { fg = palette.fg, bg = palette.bg })
hl.EndOfBuffer = { fg = palette.bg, bg = palette.bg }
hl.NormalFloat = { fg = palette.fg, bg = palette.bg }
hl.FloatBorder = { fg = palette.border, bg = palette.bg }
hl.CursorLine = { bg = palette.cursor_line }
hl.CursorLineNr = { fg = palette.fg_bright, bg = palette.cursor_line, bold = true }
hl.LineNr = { fg = palette.fg_gutter, bg = palette.gutter }
hl.Folded = { fg = palette.fg_gutter, bg = palette.bg }
hl.FoldColumn = { fg = palette.fg_gutter, bg = palette.bg }
hl.ColorColumn = { bg = palette.cursor_line }
hl.Visual = { bg = palette.selection }
hl.Search = { bg = palette.selection, fg = palette.fg_bright }
hl.IncSearch = { bg = palette.keyword, fg = palette.bg }
hl.Pmenu = { fg = palette.fg, bg = palette.bg }
hl.PmenuSel = { fg = palette.fg_bright, bg = palette.cursor_line }
hl.WinSeparator = { fg = palette.border }
set_many(hl, {
'Comment',
'@comment',
'@comment.documentation',
'@comment.todo',
'@comment.note',
'@comment.warning',
}, { fg = palette.comment, italic = false })
set_many(hl, {
'Keyword',
'Conditional',
'Repeat',
'Exception',
'Include',
'PreProc',
'@keyword',
'@keyword.function',
'@keyword.return',
'@keyword.repeat',
'@keyword.conditional',
'@keyword.exception',
'@keyword.import',
'@keyword.directive',
'@keyword.operator',
'@conditional',
'@repeat',
'@exception',
'@include',
'@module',
'@namespace',
}, { fg = palette.keyword })
set_many(hl, {
'Type',
'StorageClass',
'Structure',
'Typedef',
'@type',
'@type.builtin',
'@type.definition',
'@type.qualifier',
'@module',
'@namespace',
'@attribute',
'@tag.attribute',
'@lsp.type.type',
'@lsp.type.class',
'@lsp.type.interface',
'@lsp.type.namespace',
'@lsp.type.typeParameter',
}, { fg = palette.type })
set_many(hl, {
'@constructor',
'@lsp.type.enum',
'@lsp.type.struct',
}, { fg = palette.type_alt })
set_many(hl, {
'Function',
'@function',
'@function.call',
'@function.method',
'@function.method.call',
'@method',
'@constructor.lua',
'@lsp.type.function',
'@lsp.type.method',
}, { fg = palette.func })
set_many(hl, {
'Identifier',
'@variable',
'@variable.member',
'@lsp.type.variable',
}, { fg = palette.fg_bright })
set_many(hl, {
'Constant',
'@constant',
'@field',
'@property',
'@lsp.type.property',
'@lsp.type.enumMember',
}, { fg = palette.field })
set_many(hl, {
'String',
'Character',
'@string',
'@string.documentation',
'@string.regex',
'@string.special.url',
'@lsp.type.string',
}, { fg = palette.string })
set_many(hl, {
'SpecialChar',
'@string.escape',
'@string.special',
}, { fg = palette.escape })
set_many(hl, {
'Number',
'Float',
'@number',
'@number.float',
'@lsp.type.number',
}, { fg = palette.number })
set_many(hl, {
'Boolean',
'@boolean',
'@constant.builtin.boolean',
}, { fg = palette.keyword })
set_many(hl, {
'@parameter',
'@lsp.type.parameter',
}, { fg = palette.fg_bright })
set_many(hl, {
'@variable.builtin',
'@constant.builtin',
'@function.builtin',
}, { fg = palette.fg_bright })
set_many(hl, {
'@lsp.typemod.function.defaultLibrary',
'@lsp.typemod.function.defaultLibrary.cs',
'@lsp.typemod.method.defaultLibrary',
'@lsp.typemod.method.defaultLibrary.cs',
'@lsp.type.extensionMethod',
'@lsp.type.extensionMethod.cs',
'@lsp.typemod.extensionMethod.defaultLibrary',
'@lsp.typemod.extensionMethod.defaultLibrary.cs',
}, { fg = palette.func })
set_many(hl, {
'@lsp.typemod.class.defaultLibrary',
'@lsp.typemod.class.defaultLibrary.cs',
'@lsp.typemod.interface.defaultLibrary',
'@lsp.typemod.interface.defaultLibrary.cs',
'@lsp.typemod.enum.defaultLibrary',
'@lsp.typemod.enum.defaultLibrary.cs',
'@lsp.typemod.type.defaultLibrary',
'@lsp.typemod.type.defaultLibrary.cs',
'@lsp.typemod.typeParameter.defaultLibrary',
'@lsp.typemod.typeParameter.defaultLibrary.cs',
'@lsp.typemod.namespace.defaultLibrary',
'@lsp.typemod.namespace.defaultLibrary.cs',
}, { fg = palette.type })
set_many(hl, {
'@lsp.typemod.struct.defaultLibrary',
'@lsp.typemod.struct.defaultLibrary.cs',
}, { fg = palette.type_alt })
set_many(hl, {
'@lsp.typemod.property.defaultLibrary',
'@lsp.typemod.property.defaultLibrary.cs',
'@lsp.typemod.variable.defaultLibrary',
'@lsp.typemod.variable.defaultLibrary.cs',
'@lsp.typemod.enumMember.defaultLibrary',
'@lsp.typemod.enumMember.defaultLibrary.cs',
}, { fg = palette.field })
set_many(hl, {
'Operator',
'Delimiter',
'@operator',
'@punctuation.delimiter',
'@punctuation.bracket',
'@punctuation.special',
}, { fg = palette.fg })
end
return M

View File

@@ -0,0 +1,22 @@
# Rider Palette Reuse
`palette.json` is the single source of truth for your shared Rider palette.
Regenerate all derived files with:
```bash
python3 ~/.config/rider-palette/generate.py
```
Generated outputs:
- `palette.sh`: shell env vars 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
- `bash-prompt.sh`: bash prompt using the shared palette
- `p10k.zsh`: Powerlevel10k overrides using the shared palette
This package is meant to be stowed from the dotfiles repo so that
`~/.config/rider-palette/*` becomes available to the rest of the system.

View File

@@ -0,0 +1,32 @@
# Generated from palette.json by generate.py. Do not edit directly.
# Rider-colored bash prompt using the shared palette.
# shellcheck shell=bash
if [ -r "$HOME/.config/rider-palette/palette.sh" ]; then
. "$HOME/.config/rider-palette/palette.sh"
fi
rider_fg() {
local hex="${1#\#}"
printf '\[\033[38;2;%d;%d;%dm\]' "$((16#${hex:0:2}))" "$((16#${hex:2:2}))" "$((16#${hex:4:2}))"
}
RIDER_RESET='\[\033[0m\]'
__rider_git_branch() {
command -v git >/dev/null 2>&1 || return 0
git rev-parse --is-inside-work-tree >/dev/null 2>&1 || return 0
local branch
branch="$(git symbolic-ref --quiet --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null)" || return 0
[ -n "$branch" ] || return 0
printf ' %sgit:%s%s' "$(rider_fg "$RIDER_FUNC")" "$branch" "$RIDER_RESET"
}
__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}"
}
PROMPT_COMMAND=__rider_set_bash_prompt

View File

@@ -0,0 +1,239 @@
#!/usr/bin/env python3
from __future__ import annotations
import json
from pathlib import Path
from textwrap import dedent
ROOT = Path(__file__).resolve().parent
PALETTE_FILE = ROOT / "palette.json"
def load_palette() -> dict[str, str]:
data = json.loads(PALETTE_FILE.read_text())
return data["colors"]
def hex_no_hash(value: str) -> str:
return value.lstrip("#")
def camel_from_snake(name: str) -> str:
head, *tail = name.split("_")
return head + "".join(part.capitalize() for part in tail)
def write(path: Path, content: str) -> None:
path.write_text(content.rstrip() + "\n")
def render_palette_sh(colors: dict[str, str]) -> str:
lines = [
"# Generated from palette.json by generate.py. Do not edit directly.",
"",
]
for name, value in colors.items():
lines.append(f'export RIDER_{name.upper()}="{value}"')
return "\n".join(lines)
def render_palette_css(colors: dict[str, str]) -> str:
lines = [
"/* Generated from palette.json by generate.py. Do not edit directly. */",
":root {",
]
for name, value in colors.items():
lines.append(f" --rider-{name.replace('_', '-')}: {value};")
lines.append("}")
lines.append("")
for name, value in colors.items():
lines.append(f"@define-color rider-{name.replace('_', '-')} {value};")
return "\n".join(lines)
def render_palette_hypr(colors: dict[str, str]) -> str:
lines = [
"# Generated from palette.json by generate.py. Do not edit directly.",
"# Usage:",
"# source = ~/.config/rider-palette/palette.hyprland.conf",
"",
]
for name, value in colors.items():
lines.append(f"${name} = rgb({hex_no_hash(value)})")
lines.append(f"${camel_from_snake(name)}Alpha = {hex_no_hash(value)}")
return "\n".join(lines)
def render_palette_rasi(colors: dict[str, str]) -> str:
lines = [
"/* Generated from palette.json by generate.py. Do not edit directly. */",
"* {",
]
for name, value in colors.items():
lines.append(f" rider-{name.replace('_', '-')}: {value};")
lines.append("}")
return "\n".join(lines)
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.
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 message-style "bg={colors['cursor_line']},fg={colors['fg_bright']}"
set -g message-command-style "bg={colors['cursor_line']},fg={colors['fg_bright']}"
set -g mode-style "bg={colors['selection']},fg={colors['fg_bright']}"
set -g pane-border-style "fg={colors['border']}"
set -g pane-active-border-style "fg={colors['keyword']}"
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 "
"""
).strip()
def render_bash_prompt() -> str:
return dedent(
"""
# Generated from palette.json by generate.py. Do not edit directly.
# Rider-colored bash prompt using the shared palette.
# shellcheck shell=bash
if [ -r "$HOME/.config/rider-palette/palette.sh" ]; then
. "$HOME/.config/rider-palette/palette.sh"
fi
rider_fg() {
local hex="${1#\\#}"
printf '\\[\\033[38;2;%d;%d;%dm\\]' "$((16#${hex:0:2}))" "$((16#${hex:2:2}))" "$((16#${hex:4:2}))"
}
RIDER_RESET='\\[\\033[0m\\]'
__rider_git_branch() {
command -v git >/dev/null 2>&1 || return 0
git rev-parse --is-inside-work-tree >/dev/null 2>&1 || return 0
local branch
branch="$(git symbolic-ref --quiet --short HEAD 2>/dev/null || git rev-parse --short HEAD 2>/dev/null)" || return 0
[ -n "$branch" ] || return 0
printf ' %sgit:%s%s' "$(rider_fg "$RIDER_FUNC")" "$branch" "$RIDER_RESET"
}
__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}"
}
PROMPT_COMMAND=__rider_set_bash_prompt
"""
).strip()
def render_p10k_zsh() -> str:
return dedent(
"""
# Generated from palette.json by generate.py. Do not edit directly.
# Rider-colored Powerlevel10k overrides using the shared palette.
[[ -r "$HOME/.config/rider-palette/palette.sh" ]] && source "$HOME/.config/rider-palette/palette.sh"
typeset -g POWERLEVEL9K_BACKGROUND="$RIDER_BG"
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="%F{$RIDER_BORDER}╭─%f"
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX="%F{$RIDER_BORDER}├─%f"
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%F{$RIDER_BORDER}╰─%f"
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX="%F{$RIDER_BORDER}─╮%f"
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX="%F{$RIDER_BORDER}─┤%f"
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX="%F{$RIDER_BORDER}─╯%f"
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR="%F{$RIDER_BORDER}\\uE0B1%f"
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR="%F{$RIDER_BORDER}\\uE0B3%f"
typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND="$RIDER_FG_BRIGHT"
typeset -g POWERLEVEL9K_DIR_FOREGROUND="$RIDER_KEYWORD"
typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND="$RIDER_TYPE"
typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND="$RIDER_FUNC"
typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR="$RIDER_FUNC"
typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR="$RIDER_BORDER"
typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND="$RIDER_FUNC"
typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND="$RIDER_FIELD"
typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND="$RIDER_NUMBER"
typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND="$RIDER_FUNC"
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND="$RIDER_FUNC"
typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND="$RIDER_ERROR"
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND="$RIDER_ERROR"
typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND="$RIDER_ERROR"
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND="$RIDER_STRING"
typeset -g POWERLEVEL9K_TIME_FOREGROUND="$RIDER_FIELD"
typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND="$RIDER_TYPE"
typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND="$RIDER_FG_BRIGHT"
"""
).strip()
def render_readme() -> str:
return dedent(
"""
# Rider Palette Reuse
`palette.json` is the single source of truth for your shared Rider palette.
Regenerate all derived files with:
```bash
python3 ~/.config/rider-palette/generate.py
```
Generated outputs:
- `palette.sh`: shell env vars 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
- `bash-prompt.sh`: bash prompt using the shared palette
- `p10k.zsh`: Powerlevel10k overrides using the shared palette
This package is meant to be stowed from the dotfiles repo so that
`~/.config/rider-palette/*` becomes available to the rest of the system.
"""
).strip()
def main() -> None:
colors = load_palette()
outputs = {
ROOT / "palette.sh": render_palette_sh(colors),
ROOT / "palette.css": render_palette_css(colors),
ROOT / "palette.hyprland.conf": render_palette_hypr(colors),
ROOT / "palette.rasi": render_palette_rasi(colors),
ROOT / "tmux.conf": render_tmux_conf(colors),
ROOT / "bash-prompt.sh": render_bash_prompt(),
ROOT / "p10k.zsh": render_p10k_zsh(),
ROOT / "README.md": render_readme(),
}
for path, content in outputs.items():
write(path, content)
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,39 @@
# Generated from palette.json by generate.py. Do not edit directly.
# Rider-colored Powerlevel10k overrides using the shared palette.
[[ -r "$HOME/.config/rider-palette/palette.sh" ]] && source "$HOME/.config/rider-palette/palette.sh"
typeset -g POWERLEVEL9K_BACKGROUND="$RIDER_BG"
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX="%F{$RIDER_BORDER}╭─%f"
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX="%F{$RIDER_BORDER}├─%f"
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX="%F{$RIDER_BORDER}╰─%f"
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX="%F{$RIDER_BORDER}─╮%f"
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX="%F{$RIDER_BORDER}─┤%f"
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX="%F{$RIDER_BORDER}─╯%f"
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR="%F{$RIDER_BORDER}\uE0B1%f"
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR="%F{$RIDER_BORDER}\uE0B3%f"
typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND="$RIDER_FG_BRIGHT"
typeset -g POWERLEVEL9K_DIR_FOREGROUND="$RIDER_KEYWORD"
typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND="$RIDER_TYPE"
typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND="$RIDER_FUNC"
typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR="$RIDER_FUNC"
typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR="$RIDER_BORDER"
typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND="$RIDER_FUNC"
typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND="$RIDER_FIELD"
typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND="$RIDER_NUMBER"
typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND="$RIDER_FUNC"
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND="$RIDER_FUNC"
typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND="$RIDER_ERROR"
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND="$RIDER_ERROR"
typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND="$RIDER_ERROR"
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND="$RIDER_STRING"
typeset -g POWERLEVEL9K_TIME_FOREGROUND="$RIDER_FIELD"
typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND="$RIDER_TYPE"
typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND="$RIDER_FG_BRIGHT"

View File

@@ -0,0 +1,40 @@
/* Generated from palette.json by generate.py. Do not edit directly. */
:root {
--rider-bg: #262626;
--rider-gutter: #282828;
--rider-cursor-line: #202424;
--rider-selection: #08335E;
--rider-border: #404040;
--rider-fg: #BDBDBD;
--rider-fg-bright: #F0F0F0;
--rider-fg-gutter: #808080;
--rider-comment: #85C46C;
--rider-keyword: #6C95EB;
--rider-type: #C191FF;
--rider-type-alt: #E1BFFF;
--rider-func: #39CC9B;
--rider-field: #66C3CC;
--rider-string: #C9A26D;
--rider-number: #ED94C0;
--rider-escape: #D688D4;
--rider-error: #FF5647;
}
@define-color rider-bg #262626;
@define-color rider-gutter #282828;
@define-color rider-cursor-line #202424;
@define-color rider-selection #08335E;
@define-color rider-border #404040;
@define-color rider-fg #BDBDBD;
@define-color rider-fg-bright #F0F0F0;
@define-color rider-fg-gutter #808080;
@define-color rider-comment #85C46C;
@define-color rider-keyword #6C95EB;
@define-color rider-type #C191FF;
@define-color rider-type-alt #E1BFFF;
@define-color rider-func #39CC9B;
@define-color rider-field #66C3CC;
@define-color rider-string #C9A26D;
@define-color rider-number #ED94C0;
@define-color rider-escape #D688D4;
@define-color rider-error #FF5647;

View File

@@ -0,0 +1,40 @@
# Generated from palette.json by generate.py. Do not edit directly.
# Usage:
# source = ~/.config/rider-palette/palette.hyprland.conf
$bg = rgb(262626)
$bgAlpha = 262626
$gutter = rgb(282828)
$gutterAlpha = 282828
$cursor_line = rgb(202424)
$cursorLineAlpha = 202424
$selection = rgb(08335E)
$selectionAlpha = 08335E
$border = rgb(404040)
$borderAlpha = 404040
$fg = rgb(BDBDBD)
$fgAlpha = BDBDBD
$fg_bright = rgb(F0F0F0)
$fgBrightAlpha = F0F0F0
$fg_gutter = rgb(808080)
$fgGutterAlpha = 808080
$comment = rgb(85C46C)
$commentAlpha = 85C46C
$keyword = rgb(6C95EB)
$keywordAlpha = 6C95EB
$type = rgb(C191FF)
$typeAlpha = C191FF
$type_alt = rgb(E1BFFF)
$typeAltAlpha = E1BFFF
$func = rgb(39CC9B)
$funcAlpha = 39CC9B
$field = rgb(66C3CC)
$fieldAlpha = 66C3CC
$string = rgb(C9A26D)
$stringAlpha = C9A26D
$number = rgb(ED94C0)
$numberAlpha = ED94C0
$escape = rgb(D688D4)
$escapeAlpha = D688D4
$error = rgb(FF5647)
$errorAlpha = FF5647

View File

@@ -0,0 +1,23 @@
{
"name": "rider-black",
"colors": {
"bg": "#262626",
"gutter": "#282828",
"cursor_line": "#202424",
"selection": "#08335E",
"border": "#404040",
"fg": "#BDBDBD",
"fg_bright": "#F0F0F0",
"fg_gutter": "#808080",
"comment": "#85C46C",
"keyword": "#6C95EB",
"type": "#C191FF",
"type_alt": "#E1BFFF",
"func": "#39CC9B",
"field": "#66C3CC",
"string": "#C9A26D",
"number": "#ED94C0",
"escape": "#D688D4",
"error": "#FF5647"
}
}

View File

@@ -0,0 +1,21 @@
/* Generated from palette.json by generate.py. Do not edit directly. */
* {
rider-bg: #262626;
rider-gutter: #282828;
rider-cursor-line: #202424;
rider-selection: #08335E;
rider-border: #404040;
rider-fg: #BDBDBD;
rider-fg-bright: #F0F0F0;
rider-fg-gutter: #808080;
rider-comment: #85C46C;
rider-keyword: #6C95EB;
rider-type: #C191FF;
rider-type-alt: #E1BFFF;
rider-func: #39CC9B;
rider-field: #66C3CC;
rider-string: #C9A26D;
rider-number: #ED94C0;
rider-escape: #D688D4;
rider-error: #FF5647;
}

View File

@@ -0,0 +1,20 @@
# Generated from palette.json by generate.py. Do not edit directly.
export RIDER_BG="#262626"
export RIDER_GUTTER="#282828"
export RIDER_CURSOR_LINE="#202424"
export RIDER_SELECTION="#08335E"
export RIDER_BORDER="#404040"
export RIDER_FG="#BDBDBD"
export RIDER_FG_BRIGHT="#F0F0F0"
export RIDER_FG_GUTTER="#808080"
export RIDER_COMMENT="#85C46C"
export RIDER_KEYWORD="#6C95EB"
export RIDER_TYPE="#C191FF"
export RIDER_TYPE_ALT="#E1BFFF"
export RIDER_FUNC="#39CC9B"
export RIDER_FIELD="#66C3CC"
export RIDER_STRING="#C9A26D"
export RIDER_NUMBER="#ED94C0"
export RIDER_ESCAPE="#D688D4"
export RIDER_ERROR="#FF5647"

View File

@@ -0,0 +1,19 @@
# Generated from palette.json by generate.py. Do not edit directly.
# Source this near the end of ~/.tmux.conf, after plugin/theme setup.
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 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 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 "

View File

@@ -18,6 +18,13 @@ bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
# Split panes in the same directory
bind '"' split-window -v -c "#{pane_current_path}"
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'
@@ -38,3 +45,6 @@ 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

@@ -0,0 +1,68 @@
force_keyboard_focus = true
close_when_open = true
click_to_close = true
single_click_activation = true
selection_wrap = true
resume_last_query = true
hide_quick_activation = true
hide_action_hints = true
hide_action_hints_dmenu = true
hide_return_action = true
theme = "rider-omarchy"
[shell]
exclusive_zone = -1
layer = "overlay"
anchor_top = true
anchor_bottom = true
anchor_left = true
anchor_right = true
[placeholders]
"default" = { input = "Search apps, files, commands", list = "No matches" }
[keybinds]
close = ["Escape"]
next = ["Down", "ctrl j"]
previous = ["Up", "ctrl k"]
left = ["Left"]
right = ["Right"]
down = ["Down"]
up = ["Up"]
toggle_exact = ["ctrl e"]
show_actions = ["alt Return"]
page_down = ["Page_Down"]
page_up = ["Page_Up"]
[providers]
default = ["desktopapplications", "calc", "websearch"]
empty = ["desktopapplications"]
max_results = 12
[[providers.prefixes]]
prefix = ";"
provider = "providerlist"
[[providers.prefixes]]
prefix = ">"
provider = "runner"
[[providers.prefixes]]
prefix = "/"
provider = "files"
[[providers.prefixes]]
prefix = "="
provider = "calc"
[[providers.prefixes]]
prefix = "$"
provider = "windows"
[[providers.prefixes]]
prefix = ":"
provider = "clipboard"
[[providers.prefixes]]
prefix = "@"
provider = "websearch"

View File

@@ -0,0 +1,99 @@
@import url("../../../rider-palette/palette.css");
* {
all: unset;
font-family: "JetBrainsMono Nerd Font", "JetBrains Mono", monospace;
font-size: 16px;
color: @rider-fg-bright;
}
window,
#window,
.background {
background: transparent;
}
box,
listview,
scrolledwindow {
background: transparent;
}
entry,
#input,
searchentry {
background: rgba(32, 36, 36, 0.96);
color: @rider-fg-bright;
border: 1px solid rgba(108, 149, 235, 0.35);
border-radius: 18px;
padding: 16px 18px;
margin: 0 0 16px 0;
min-height: 30px;
caret-color: @rider-func;
}
entry selection,
#input selection,
searchentry selection {
background: @rider-selection;
color: @rider-fg-bright;
}
listview,
#list,
.list {
background: rgba(38, 38, 38, 0.94);
border: 1px solid rgba(64, 64, 64, 0.95);
border-radius: 24px;
padding: 12px;
}
child,
.item,
row {
background: transparent;
border-radius: 18px;
padding: 10px 12px;
margin: 4px 0;
}
child:selected,
child:focus,
child:hover,
.item:selected,
.item:hover,
row:selected,
row:hover {
background: rgba(8, 51, 94, 0.92);
}
label,
.label,
#label {
color: @rider-fg-bright;
}
#sub,
.sub,
.dim-label,
.description {
color: @rider-fg-gutter;
}
#icon {
color: @rider-func;
margin-right: 14px;
}
#activationlabel,
.activationlabel,
.quick-activation {
color: @rider-string;
font-weight: 700;
}
#typeahead,
#placeholder,
.placeholder {
color: @rider-fg-gutter;
}

View File

@@ -1,80 +1,57 @@
// --// waybar config generated by wbarconfgen.sh //-- //
{
"layer": "top",
"position": "top",
"mod": "dock",
"margin-left": 0,
"margin-right": 0,
"margin-top": 0,
"margin-left": 10,
"margin-right": 10,
"margin-top": 10,
"margin-bottom": 0,
"exclusive": true,
"passthrough": false,
"gtk-layer-shell": true,
"reload_style_on_change": true,
"modules-left": [
"hyprland/workspaces"
"custom/launcher",
"hyprland/workspaces",
"hyprland/window"
],
"modules-center": [
"group/center"
"clock"
],
"modules-right": [
"group/right"
"network",
"bluetooth",
"pulseaudio",
"cpu",
"memory",
"tray",
"custom/power"
],
"custom/flexspace": {
"format": "",
"tooltip": false,
"expand": true
"custom/launcher": {
"format": "",
"tooltip": true,
"tooltip-format": "Open Walker",
"on-click": "walker",
"on-click-right": "thunar"
},
"memory": {
"interval": 1,
"rotate": 270,
"format": "{icon}",
"format-icons": [
"󰝦",
"󰪞",
"󰪟",
"󰪠",
"󰪡",
"󰪢",
"󰪣",
"󰪤",
"󰪥"
]
"interval": 5,
"format": "󰍛 {}%"
},
"cpu": {
"interval": 1,
"format": "{icon}",
"rotate": 270,
"format-icons": [
"󰝦",
"󰪞",
"󰪟",
"󰪠",
"󰪡",
"󰪢",
"󰪣",
"󰪤",
"󰪥"
]
"interval": 5,
"format": "󰻠 {usage}%"
},
"tray": {
"icon-size": 18,
"spacing": 6,
"rotate": 0
},
"group/system": {
"orientation": "horizontal",
"modules": [
"memory",
"cpu",
"pulseaudio"
]
},
"custom/power": {
"format": "",
"format": "",
"tooltip": false,
"menu": "on-click",
"menu-file": "$HOME/.config/waybar/power_menu.xml", // Menu file in resources folder
"menu-file": "$HOME/.config/waybar/power_menu.xml",
"menu-actions": {
"shutdown": "systemctl poweroff",
"reboot": "systemctl reboot",
@@ -84,28 +61,39 @@
"lock": "hyprlock"
}
},
"group/center": {
"orientation": "horizontal",
"modules": [
"clock"
]
},
"group/right": {
"orientation": "horizontal",
"modules": [
"tray",
"group/system",
"custom/power"
]
},
"hyprland/workspaces": {
"all-outputs": false,
"format": "{name}"
"sort-by-number": true,
"format": "{icon}",
"format-icons": {
"1": "󰎤",
"2": "󰎧",
"3": "󰎪",
"4": "󰎭",
"5": "󰎱",
"6": "󰎳",
"7": "󰎶",
"8": "󰎹",
"9": "󰎼",
"10": "󰽽",
"urgent": "",
"active": "",
"default": "",
"empty": ""
}
},
"hyprland/window": {
"separate-outputs": true,
"icon": true,
"max-length": 56,
"rewrite": {
"": "Desktop"
}
},
"clock": {
"format": "{:%R %a %d %b}",
"format": "󰃰 {:%a %d %b} 󰥔 {:%H:%M}",
"rotate": 0,
"on-click": "/usr/local/bin/ags -t ActivityCenter",
"on-click": "walker",
"tooltip-format": "<tt>{calendar}</tt>",
"calendar": {
"mode": "year",
@@ -114,10 +102,10 @@
"on-scroll": 1,
"on-click-right": "mode",
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"weeks": "<span color='#99ffdd'><b>{}</b></span>",
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
"today": "<span color='#ff6699'><b>{}</b></span>"
"months": "<span color='#C191FF'><b>{}</b></span>",
"weeks": "<span color='#66C3CC'><b>{}</b></span>",
"weekdays": "<span color='#C9A26D'><b>{}</b></span>",
"today": "<span color='#39CC9B'><b>{}</b></span>"
}
},
"actions": {
@@ -129,18 +117,45 @@
}
},
"pulseaudio": {
"format": "{icon}",
"format-muted": "",
"format": "{icon} {volume}%",
"format-muted": "󰖁 muted",
"format-icons": {
"default": [
"",
""
]
"󰕿",
"󰖀",
"󰕾"
],
"headphone": "󰋋",
"hands-free": "󰋎",
"headset": "󰋎",
"phone": "󰏲",
"portable": "󰄝",
"car": "󰄋"
},
"scroll-step": 5,
"on-click": "pavucontrol", // Open PulseAudio control GUI
"on-click-right": "pamixer -t", // Toggle mute
"on-scroll-up": "pamixer -i 5", // Increase volume
"on-scroll-down": "pamixer -d 5" // Decrease volume
"on-click": "pavucontrol",
"on-click-right": "pamixer -t",
"on-scroll-up": "pamixer -i 5",
"on-scroll-down": "pamixer -d 5"
},
"network": {
"interval": 5,
"format-wifi": "󰖩 {signalStrength}%",
"format-ethernet": "󰈀 ethernet",
"format-linked": "󰈀 linked",
"format-disconnected": "󰖪 offline",
"tooltip-format-wifi": "{essid} ({signalStrength}%)",
"tooltip-format-ethernet": "{ifname}",
"tooltip-format-disconnected": "Disconnected",
"on-click": "nm-connection-editor"
},
"bluetooth": {
"format": "󰂯 {status}",
"format-disabled": "󰂲 off",
"format-off": "󰂲 off",
"format-no-controller": "󰂲 n/a",
"format-on": "󰂯 on",
"format-connected": "󰂱 on",
"tooltip-format": "{controller_alias}\t{controller_address}"
}
}

View File

@@ -1,56 +1,153 @@
@define-color foreground #d8dee9;
@define-color background #1a1b26;
@import url("../rider-palette/palette.css");
@define-color foreground @rider-fg-bright;
@define-color foreground-muted @rider-fg-gutter;
@define-color background @rider-bg;
@define-color background-alt @rider-cursor-line;
@define-color accent @rider-func;
@define-color accent-alt @rider-keyword;
@define-color accent-soft @rider-field;
@define-color type @rider-type;
@define-color warning @rider-string;
@define-color danger @rider-error;
* {
background-color: @background;
color: @foreground;
font-family: 'JetBrainsMono Nerd Font Mono';
font-size: 20px;
font-size: 15px;
min-height: 0;
}
.modules-left {
margin-left: 8px;
window#waybar {
background: transparent;
color: @foreground;
}
.modules-right {}
tooltip {
background: @background;
border: 1px solid @accent-alt;
border-radius: 12px;
}
.modules-left,
.modules-center,
.modules-right {
margin: 0;
}
#custom-launcher,
#workspaces,
#window,
#clock,
#network,
#bluetooth,
#pulseaudio,
#cpu,
#memory,
#tray,
#custom-power {
background: @background;
border: 1px solid alpha(@accent-alt, 0.22);
border-radius: 14px;
margin: 0 5px;
padding: 0 12px;
min-height: 34px;
}
#custom-launcher {
background: @accent;
border-color: @accent;
color: @background;
font-size: 18px;
padding: 0 14px 0 12px;
}
#workspaces {
padding: 0 6px;
}
#workspaces button {
all: initial;
padding: 0 6px;
margin: 0 1.5px;
min-width: 9px;
opacity: 0.5;
min-width: 18px;
padding: 0 8px;
margin: 5px 2px;
border-radius: 10px;
color: @foreground-muted;
opacity: 0.9;
}
#workspaces button.empty {
opacity: 0.25;
color: @foreground-muted;
opacity: 0.45;
}
#workspaces button.visible {
opacity: 0.8;
color: @accent-alt;
background: alpha(@accent-alt, 0.12);
}
#workspaces button.active {
opacity: 1.0;
color: @background;
background: @accent;
opacity: 1;
}
#window {
color: @foreground-muted;
padding-right: 16px;
}
#clock {
border-color: alpha(@accent, 0.35);
color: @foreground;
font-weight: 700;
padding: 0 18px;
}
#network {
color: @accent-soft;
}
#bluetooth {
color: @type;
}
#pulseaudio {
color: @accent;
}
#cpu,
#memory,
#battery,
#pulseaudio,
#custom-omarchy,
#custom-screenrecording-indicator,
#custom-update,
#tray,
#bluetooth,
#network,
#custom-power,
#custom-expand-icon {
min-width: 24px;
font-size: 20px;
margin: 0px 2px;
#memory {
color: @warning;
}
#tray {
padding: 0 14px;
}
#custom-power {
color: @danger;
padding: 0 13px;
}
#custom-launcher:hover,
#workspaces button:hover,
#network:hover,
#bluetooth:hover,
#pulseaudio:hover,
#cpu:hover,
#memory:hover,
#tray:hover,
#custom-power:hover,
#clock:hover {
box-shadow: none;
background: @background-alt;
}
#custom-launcher:hover,
#workspaces button.active:hover {
background: @accent;
}
.hidden {
opacity: 0;

View File

@@ -118,4 +118,5 @@ source $ZSH/oh-my-zsh.sh
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
export PATH="$HOME/.local/bin:$PATH"
[[ -r ~/.config/rider-palette/p10k.zsh ]] && source ~/.config/rider-palette/p10k.zsh
export PATH="$HOME/.dotnet/tools:$HOME/.local/bin:$PATH"