diff --git a/apply.sh b/apply.sh index 9c1fe1c..44e5c2d 100755 --- a/apply.sh +++ b/apply.sh @@ -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 diff --git a/bash/.bashrc b/bash/.bashrc new file mode 100644 index 0000000..84994df --- /dev/null +++ b/bash/.bashrc @@ -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 diff --git a/hypr/.config/hypr/hyprland.conf b/hypr/.config/hypr/hyprland.conf index 2a48114..f3639c9 100644 --- a/hypr/.config/hypr/hyprland.conf +++ b/hypr/.config/hypr/hyprland.conf @@ -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 diff --git a/hypr/.config/hypr/hyprlock.conf b/hypr/.config/hypr/hyprlock.conf index ce9c0af..829f321 100644 --- a/hypr/.config/hypr/hyprlock.conf +++ b/hypr/.config/hypr/hyprlock.conf @@ -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 = 󰌾 Logged in as $USER + placeholder_text = 󰌾 Logged in as $USER hide_input = false check_color = $accent - fail_color = $red + fail_color = $error fail_text = $FAIL ($ATTEMPTS) - capslock_color = $yellow + capslock_color = $string position = 0, -47 halign = center valign = center diff --git a/nvim/.config/nvim/init.lua b/nvim/.config/nvim/init.lua index 85368fb..87f9240 100644 --- a/nvim/.config/nvim/init.lua +++ b/nvim/.config/nvim/init.lua @@ -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', '', '', { 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. -- diff --git a/nvim/.config/nvim/lua/custom/rider_black.lua b/nvim/.config/nvim/lua/custom/rider_black.lua new file mode 100644 index 0000000..9663197 --- /dev/null +++ b/nvim/.config/nvim/lua/custom/rider_black.lua @@ -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 diff --git a/rider-palette/.config/rider-palette/README.md b/rider-palette/.config/rider-palette/README.md new file mode 100644 index 0000000..33625c3 --- /dev/null +++ b/rider-palette/.config/rider-palette/README.md @@ -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. diff --git a/rider-palette/.config/rider-palette/__pycache__/generate.cpython-313.pyc b/rider-palette/.config/rider-palette/__pycache__/generate.cpython-313.pyc new file mode 100644 index 0000000..49e1e81 Binary files /dev/null and b/rider-palette/.config/rider-palette/__pycache__/generate.cpython-313.pyc differ diff --git a/rider-palette/.config/rider-palette/bash-prompt.sh b/rider-palette/.config/rider-palette/bash-prompt.sh new file mode 100644 index 0000000..faec067 --- /dev/null +++ b/rider-palette/.config/rider-palette/bash-prompt.sh @@ -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 diff --git a/rider-palette/.config/rider-palette/generate.py b/rider-palette/.config/rider-palette/generate.py new file mode 100644 index 0000000..6fbf056 --- /dev/null +++ b/rider-palette/.config/rider-palette/generate.py @@ -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() diff --git a/rider-palette/.config/rider-palette/p10k.zsh b/rider-palette/.config/rider-palette/p10k.zsh new file mode 100644 index 0000000..8bf02d0 --- /dev/null +++ b/rider-palette/.config/rider-palette/p10k.zsh @@ -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" diff --git a/rider-palette/.config/rider-palette/palette.css b/rider-palette/.config/rider-palette/palette.css new file mode 100644 index 0000000..1bcc5c0 --- /dev/null +++ b/rider-palette/.config/rider-palette/palette.css @@ -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; diff --git a/rider-palette/.config/rider-palette/palette.hyprland.conf b/rider-palette/.config/rider-palette/palette.hyprland.conf new file mode 100644 index 0000000..0ffe34e --- /dev/null +++ b/rider-palette/.config/rider-palette/palette.hyprland.conf @@ -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 diff --git a/rider-palette/.config/rider-palette/palette.json b/rider-palette/.config/rider-palette/palette.json new file mode 100644 index 0000000..a206ced --- /dev/null +++ b/rider-palette/.config/rider-palette/palette.json @@ -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" + } +} diff --git a/rider-palette/.config/rider-palette/palette.rasi b/rider-palette/.config/rider-palette/palette.rasi new file mode 100644 index 0000000..78e6b14 --- /dev/null +++ b/rider-palette/.config/rider-palette/palette.rasi @@ -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; +} diff --git a/rider-palette/.config/rider-palette/palette.sh b/rider-palette/.config/rider-palette/palette.sh new file mode 100644 index 0000000..5a4a310 --- /dev/null +++ b/rider-palette/.config/rider-palette/palette.sh @@ -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" diff --git a/rider-palette/.config/rider-palette/tmux.conf b/rider-palette/.config/rider-palette/tmux.conf new file mode 100644 index 0000000..8bdedb0 --- /dev/null +++ b/rider-palette/.config/rider-palette/tmux.conf @@ -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 " diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf index 0287acb..ebe8f1f 100644 --- a/tmux/.tmux.conf +++ b/tmux/.tmux.conf @@ -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 diff --git a/walker/.config/walker/config.toml b/walker/.config/walker/config.toml new file mode 100644 index 0000000..13d2c7b --- /dev/null +++ b/walker/.config/walker/config.toml @@ -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" diff --git a/walker/.config/walker/themes/rider-omarchy/style.css b/walker/.config/walker/themes/rider-omarchy/style.css new file mode 100644 index 0000000..ecbec06 --- /dev/null +++ b/walker/.config/walker/themes/rider-omarchy/style.css @@ -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; +} diff --git a/waybar/.config/waybar/config.jsonc b/waybar/.config/waybar/config.jsonc index 7f3ff18..79e59fa 100644 --- a/waybar/.config/waybar/config.jsonc +++ b/waybar/.config/waybar/config.jsonc @@ -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": "{calendar}", "calendar": { "mode": "year", @@ -114,10 +102,10 @@ "on-scroll": 1, "on-click-right": "mode", "format": { - "months": "{}", - "weeks": "{}", - "weekdays": "{}", - "today": "{}" + "months": "{}", + "weeks": "{}", + "weekdays": "{}", + "today": "{}" } }, "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}" } } diff --git a/waybar/.config/waybar/style.css b/waybar/.config/waybar/style.css index 9d9ce12..cdc6f4c 100644 --- a/waybar/.config/waybar/style.css +++ b/waybar/.config/waybar/style.css @@ -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; diff --git a/zsh/.zshrc b/zsh/.zshrc index f030d9b..4efcc05 100644 --- a/zsh/.zshrc +++ b/zsh/.zshrc @@ -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"