From dfb97eb1d0cb79a7995eeb76261a3547b0a2a29a Mon Sep 17 00:00:00 2001 From: Anton Volnuhin Date: Mon, 2 Mar 2026 18:40:51 +0300 Subject: [PATCH] sync live config changes into chezmoi source Re-add live edits: - fish: gpt-5.2 model, llm.py, rewritten s/icat with ghostty support, new ils function, bass plugin, removed copilot-cli plugin - karabiner: ghostty/moonlight/rdp apps, new caps rules, opt-W shortcut - kitty: cursor_trail, font_size 14.5 - nvim: removed auto-session-nvim-tree, auto-session config update - wezterm: scrollback 1M, border_top 2cell - tmux-nova: local nerdfonts rendering patches - zshrc: track file, includes LM Studio PATH Also fix: chezmoi template error on macOS (osRelease.id without linux guard) Co-Authored-By: Claude Opus 4.6 (1M context) --- dot_tmux/plugins/tmux-nova/scripts/nova.sh | 36 ++++- dot_zshrc | 136 +++++++++++++++++++ private_dot_config/karabiner.edn | 50 +++---- private_dot_config/kitty/kitty.conf | 4 +- private_dot_config/nvim/init.lua | 3 +- private_dot_config/private_fish/fish_plugins | 1 + private_dot_config/wezterm/wezterm.lua | 4 +- 7 files changed, 201 insertions(+), 33 deletions(-) create mode 100644 dot_zshrc diff --git a/dot_tmux/plugins/tmux-nova/scripts/nova.sh b/dot_tmux/plugins/tmux-nova/scripts/nova.sh index e9f93de..33fc884 100644 --- a/dot_tmux/plugins/tmux-nova/scripts/nova.sh +++ b/dot_tmux/plugins/tmux-nova/scripts/nova.sh @@ -63,6 +63,7 @@ status_style_bg=$(get_option "@nova-status-style-bg" "#44475a") status_style_fg=$(get_option "@nova-status-style-fg" "#f8f8f2") status_style_active_bg=$(get_option "@nova-status-style-active-bg" "#6272a4") status_style_active_fg=$(get_option "@nova-status-style-active-fg" "#f8f8f2") +status_style_activity_fg=$(get_option "@nova-status-activity-fg" "#ff79C6") tmux set-option -g status-style "bg=$status_style_bg,fg=$status_style_fg" # @@ -84,6 +85,7 @@ IFS=' ' read -r -a segments_left <<< $segments_left tmux set-option -g status-left "" first_left_segment=true +first_left_nerdfont=$(get_option "@nova-nerdfonts-first" "") for segment in "${segments_left[@]}"; do segment_content=$(get_option "@nova-segment-$segment" "mode") segment_colors=$(get_option "@nova-segment-$segment-colors" "#282a36 #f8f8f2") @@ -92,6 +94,11 @@ for segment in "${segments_left[@]}"; do # condition everything on the non emptiness of the evaluated segment tmux set-option -ga status-left "#{?#{w:#{E:@nova-segment-$segment}}," + if [ $nerdfonts = true ] && [ $first_left_segment = true ]; then + tmux set-option -ga status-left "#[fg=${segment_colors[0]}#,bg=${segment_colors[1]}]" + tmux set-option -ga status-left "$first_left_nerdfont" + fi + if [ $nerdfonts = true ] && [ $first_left_segment = false ]; then tmux set-option -ga status-left "#[bg=${segment_colors[0]}]" tmux set-option -ga status-left "$nerdfonts_left" @@ -129,10 +136,23 @@ if [ $nerdfonts = true ]; then tmux set-window-option -ga window-status-current-format "$nerdfonts_left" fi -tmux set-window-option -g window-status-format "#[fg=$status_style_fg]#[bg=$status_style_bg]" -tmux set-window-option -ga window-status-format "$(padding $padding)" +tmux set-window-option -g window-status-format "#{?window_activity_flag," +tmux set-window-option -ga window-status-format "#[bg=$status_style_activity_fg#,fg=$status_style_bg]," +tmux set-window-option -ga window-status-format "#[fg=$status_style_fg#,bg=$status_style_bg]}" + +if [ $nerdfonts = true ]; then + tmux set-window-option -ga window-status-format "$(padding $(($padding + 1)))" +else + tmux set-window-option -ga window-status-format "$(padding $padding)" +fi + tmux set-window-option -ga window-status-format "$pane" -tmux set-window-option -ga window-status-format "$(padding $padding)" + +if [ $nerdfonts = true ]; then + tmux set-window-option -ga window-status-format "$(padding $(($padding + 1)))" +else + tmux set-window-option -ga window-status-format "$(padding $padding)" +fi if [ $nerdfonts = true ]; then tmux set-window-option -ga window-status-current-format "#[fg=${status_style_active_fg}]#[bg=${status_style_active_bg}]" @@ -156,6 +176,9 @@ fi segments_right=$(get_option "@nova-segments-0-right" "") IFS=' ' read -r -a segments_right <<< $segments_right +last_right_nerdfont=$(get_option "@nova-nerdfonts-last" "") +last_segment=${segments_right[${#segments_right[@]}-1]} + tmux set-option -g status-right "" for segment in "${segments_right[@]}"; do @@ -180,6 +203,11 @@ for segment in "${segments_right[@]}"; do tmux set-option -ga status-right "$segment_content" tmux set-option -ga status-right "$(padding $padding)" + if [ $nerdfonts = true ] && [ $segment = $last_segment ]; then + tmux set-option -ga status-right "#[fg=${segment_colors[0]}#,bg=${segment_colors[1]}]" + tmux set-option -ga status-right "$last_right_nerdfont" + fi + # set the bg color for the next nerdfonts seperator [ $nerdfonts = true ] && tmux set-option -ga status-right "#[bg=${segment_colors[0]}]" @@ -206,7 +234,7 @@ for ((row=1; row <= rows; row++)); do segment_colors=$(get_option "@nova-segment-$segment-colors" "#282a36 #f8f8f2") IFS=' ' read -r -a segment_colors <<< $segment_colors if [ "$segment_content" != "" ]; then - if [ $nerdfonts = true ] && [ "$(tmux show-option -gqv status-format[$row])" != "#[align=left]"]; then + if [ $nerdfonts = true ] && [[ "$(tmux show-option -gqv status-format[$row])" != *"#[align=left]" ]]; then tmux set-option -ga status-format[$row] "#[fg=${nerdfonts_color},bg=#${segment_colors[0]}]" tmux set-option -ga status-format[$row] "$nerdfonts_left" fi diff --git a/dot_zshrc b/dot_zshrc new file mode 100644 index 0000000..1cceb03 --- /dev/null +++ b/dot_zshrc @@ -0,0 +1,136 @@ + + +autoload -Uz compinit && compinit # keep this near the top + + + +# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. +# Initialization code that may require console input (password prompts, [y/n] +# confirmations, etc.) must go above this block; everything else may go below. +if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then + source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" +fi + +# If you come from bash you might have to change your $PATH. +# export PATH=$HOME/bin:$HOME/.local/bin:/usr/local/bin:$PATH + +# Path to your Oh My Zsh installation. +export ZSH="$HOME/.oh-my-zsh" + +# Set name of the theme to load --- if set to "random", it will +# load a random theme each time Oh My Zsh is loaded, in which case, +# to know which specific one was loaded, run: echo $RANDOM_THEME +# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes +ZSH_THEME="robbyrussell" + +# Set list of themes to pick from when loading at random +# Setting this variable when ZSH_THEME=random will cause zsh to load +# a theme from this variable instead of looking in $ZSH/themes/ +# If set to an empty array, this variable will have no effect. +# ZSH_THEME_RANDOM_CANDIDATES=( "robbyrussell" "agnoster" ) + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +# HYPHEN_INSENSITIVE="true" + +# Uncomment one of the following lines to change the auto-update behavior +# zstyle ':omz:update' mode disabled # disable automatic updates +# zstyle ':omz:update' mode auto # update automatically without asking +# zstyle ':omz:update' mode reminder # just remind me to update when it's time + +# Uncomment the following line to change how often to auto-update (in days). +# zstyle ':omz:update' frequency 13 + +# Uncomment the following line if pasting URLs and other text is messed up. +# DISABLE_MAGIC_FUNCTIONS="true" + +# Uncomment the following line to disable colors in ls. +# DISABLE_LS_COLORS="true" + +# Uncomment the following line to disable auto-setting terminal title. +# DISABLE_AUTO_TITLE="true" + +# Uncomment the following line to enable command auto-correction. +# ENABLE_CORRECTION="true" + +# Uncomment the following line to display red dots whilst waiting for completion. +# You can also set it to another string to have that shown instead of the default red dots. +# e.g. COMPLETION_WAITING_DOTS="%F{yellow}waiting...%f" +# Caution: this setting can cause issues with multiline prompts in zsh < 5.7.1 (see #5765) +# COMPLETION_WAITING_DOTS="true" + +# Uncomment the following line if you want to disable marking untracked files +# under VCS as dirty. This makes repository status check for large repositories +# much, much faster. +# DISABLE_UNTRACKED_FILES_DIRTY="true" + +# Uncomment the following line if you want to change the command execution time +# stamp shown in the history command output. +# You can set one of the optional three formats: +# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd" +# or set a custom format using the strftime function format specifications, +# see 'man strftime' for details. +# HIST_STAMPS="mm/dd/yyyy" + +# Would you like to use another custom folder than $ZSH/custom? +# ZSH_CUSTOM=/path/to/new-custom-folder + +# Which plugins would you like to load? +# Standard plugins can be found in $ZSH/plugins/ +# Custom plugins may be added to $ZSH_CUSTOM/plugins/ +# Example format: plugins=(rails git textmate ruby lighthouse) +# Add wisely, as too many plugins slow down shell startup. +plugins=(git) + +source $ZSH/oh-my-zsh.sh + +# User configuration + +# export MANPATH="/usr/local/man:$MANPATH" + +# You may need to manually set your language environment +# export LANG=en_US.UTF-8 + +# Preferred editor for local and remote sessions +# if [[ -n $SSH_CONNECTION ]]; then +# export EDITOR='vim' +# else +# export EDITOR='nvim' +# fi + +# Compilation flags +# export ARCHFLAGS="-arch $(uname -m)" + +# Set personal aliases, overriding those provided by Oh My Zsh libs, +# plugins, and themes. Aliases can be placed here, though Oh My Zsh +# users are encouraged to define aliases within a top-level file in +# the $ZSH_CUSTOM folder, with .zsh extension. Examples: +# - $ZSH_CUSTOM/aliases.zsh +# - $ZSH_CUSTOM/macos.zsh +# For a full list of active aliases, run `alias`. +# +# Example aliases +# alias zshconfig="mate ~/.zshrc" +# alias ohmyzsh="mate ~/.oh-my-zsh" +source /opt/homebrew/share/powerlevel10k/powerlevel10k.zsh-theme + + +# Fish-style “ghost” history hints +source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh + +# Real-time colourising (must be *last*) +source $(brew --prefix)/opt/zsh-fast-syntax-highlighting/share/zsh-fast-syntax-highlighting/fast-syntax-highlighting.plugin.zsh + + + +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh +eval "$(atuin init zsh --disable-up-arrow)" + +# Added by LM Studio CLI (lms) +export PATH="$PATH:/Users/anton/.cache/lm-studio/bin" +# End of LM Studio CLI section + diff --git a/private_dot_config/karabiner.edn b/private_dot_config/karabiner.edn index 5dc5567..74751ee 100644 --- a/private_dot_config/karabiner.edn +++ b/private_dot_config/karabiner.edn @@ -12,6 +12,7 @@ :arc ["^company\\.thebrowser\\.Browser$"] :kitty ["^net\\.kovidgoyal\\.kitty$"] :wezterm ["^com.github.wez.wezterm$"] + :ghostty ["^com.mitchellh.ghostty$"] :webapp ["^com\\.apple\\.Safari\\.WebApp\\..+$"] :perplexity ["^ai\\.perplexity\\.mac$"] :gemini ["^com\\.apple\\.Safari\\.WebApp\\.1550A740-0D4C-4C62-BA9B-438AA340471C$"] @@ -29,7 +30,9 @@ :dataspell ["^com\\.jetbrains\\.dataspell$"] :vikunja ["^com\\.Unite\\.Vikunja$"] :tana ["^inc\\.tana\\.desktop$"] - :gfn ["^com\\.nvidia\\.gfnpc\\.mall$"]} + :gfn ["^com\\.nvidia\\.gfnpc\\.mall$"] + :moonlight ["^com\\.moonlight-stream\\.Moonlight$"] + :rdp ["^com\\.microsoft\\.rdc$"]} :input-sources {:en {:language "en"} :ru {:language "ru"}} @@ -71,7 +74,7 @@ {:des "Alternative language switches: Lcmd->English, Rcmd->Russian, Rshift-> Russian" - :rules [[:left_command :left_command nil {:alone {:input :en}}] + :rules [:!moonlight [:left_command :left_command nil {:alone {:input :en}}] [:right_command :right_command nil {:alone {:input :ru}}] ;; [:right_shift :right_shift nil {:alone {:input :ru}}] [:!Qt [:!Qt {:input :en}]] @@ -81,13 +84,21 @@ ;; [:!Ctab [:!Ctab {:input :en}]] ]} - {:des "Caps->Russian, LShift->English" - :rules [[:##caps_lock ["capskey" 1] :ru {:alone {:input :en} + {:des "Caps switches languages" + :rules [:!moonlight [:##caps_lock ["capskey" 1] :ru {:alone {:input :en} :afterup ["capskey" 0]}] [:##caps_lock ["capskey" 1] :en {:alone {:input :ru} :afterup ["capskey" 0]}] ]} + {:des "Caps switches languages" + :rules [:moonlight [:##caps_lock :!Cspacebar] + [:##caps_lock :!Cspacebar] + [:right_control :right_command] + [:left_command :left_control] + [:right_command :right_control] + ]} + {:des "Tab as Hyper(⌘+⌥+^+⇧)" :rules [:capskey [:tab :!!Sleft_command]]} @@ -97,14 +108,16 @@ {:des "⌘W->⌘H in Tana" :rules [:tana [:!Cw :!Ch]]} - - - {:des "Caps+↑, Caps+↓ to Control+Opt+arrow" + {:des "Caps+↑, Caps+↓ to Control+Opt+arrow" :rules [[:up_arrow :!QESup_arrow :capskey] [:down_arrow :!QESdown_arrow :capskey] [:1 :!QE1 :capskey] [:2 :!QE2 :capskey] [:4 :!!4 :capskey] + [:x :!TFf :capskey] + [:c :!TFc :capskey] + [:n :!!n :capskey] + [:!S1 :!QES1 :capskey] [:!S2 :!QES2 :capskey] [:!Sup_arrow :!QESm :capskey] @@ -118,22 +131,12 @@ {:des "Caps+T to start Kitty, Caps+B->Bing, Caps+G->Bard, Caps+O->Poe, Caps+P->ChatGPT4, Caps+␣->AllGPT" :rules [:capskey - [:r [[:open "/Applications/kitty.app"] {:input :en}] :!kitty] - [:r [:!Ct {:input :en}] :kitty] - [:k [[:open "/Applications/WezTerm.app"] {:input :en}] :!wezterm] - [:k :!Ct :wezterm] - [:a [[:open "/Applications/Arc.app"] {:input :en}] :!arc] - [:a :!Ch :arc] - [:g [:open "/Users/anton/Applications/Gemini.app"] :!gemini] - [:g :!Ch :gemini] + [:k [[:open "/Applications/kitty.app"] {:input :en}] :!kitty] + [:k [:!Ct {:input :en}] :kitty] + [:r [[:open "/Applications/Ghostty.app"] {:input :en}] :!ghostty] + [:r :!Ct :ghostty] [:t [:open "/Applications/Tana.app"] :!tana] [:t :!Ch :tana] - [:c [:open "/Users/anton/Applications/Copilot.app"] :!copilot] - [:c :!Ch :copilot] - [:y [:open "/Applications/You.app"] :!youcom] - [:y :!Ch :youcom] - [:d [:open "/Applications/Claude.app"] :!claude] - [:d :!Ch :claude] [:h [:open "/Applications/Heptabase.app"] :!hepta] [:h :!Ch :hepta] [:w [:open "/Applications/Setia Wiki.app"] :!wiki] @@ -147,8 +150,6 @@ [:l :!Ch :librechat] ; [:j [:open "/Applications/JupyterLab.app"] :!jupyter] ; [:j :!Ch :jupyter] - [:m [:open "/Applications/Meta.ai.app"] :!metaai] - [:m :!Ch :metaai] [:v [:open "/Applications/Vikunja.app"] :!vikunja] [:v :!Ch :vikunja] ]} @@ -156,6 +157,9 @@ {:des "⌘W->⌘H in Heptabase" :rules [:hepta [:!Cw :!Ch]]} + {:des "opt-W->⌘H" + :rules [[:!Ow :!Ch]]} + {:des "⌘W->⌘H in Safari ChatGPT app" :rules [:webapp [:!Cw :!Ch]]} diff --git a/private_dot_config/kitty/kitty.conf b/private_dot_config/kitty/kitty.conf index 015d643..1bfaa8a 100644 --- a/private_dot_config/kitty/kitty.conf +++ b/private_dot_config/kitty/kitty.conf @@ -3,7 +3,7 @@ include ./theme.conf #map ctrl+shift+f combine : show_scrollback : send_text normal,application / map ctrl+f6 detach_window new-tab map ctrl+f5 detach_window tab-left - +cursor_trail 0 #: Fonts {{{ @@ -72,7 +72,7 @@ font_features Menligaturized-Regular -liga #font_family MesloLGS NF shell . allow_remote_control yes - font_size 15 + font_size 14.5 #macos_thicken_font 1 text_composition_strategy 1.7 50 diff --git a/private_dot_config/nvim/init.lua b/private_dot_config/nvim/init.lua index c07a65d..137d3d9 100644 --- a/private_dot_config/nvim/init.lua +++ b/private_dot_config/nvim/init.lua @@ -206,7 +206,6 @@ vim.keymap.set('n', 'u', require('undotree').toggle, { noremap = true, s vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions" local auto_session = require("auto-session") -local auto_session_nvim_tree = require("auto-session-nvim-tree") auto_session.setup({ log_level = "error", @@ -220,7 +219,7 @@ auto_session.setup({ restore_upcoming_session = true, -- This is necessary!! }, }) -auto_session_nvim_tree.setup(auto_session) +-- require("auto-session-nvim-tree").setup(auto_session) require('nvim-treesitter.configs').setup { ensure_installed = { 'c','query','vimdoc','vim','bash', 'go', 'css', 'python', 'html', 'javascript', 'json', 'jsonc', 'lua', 'rust', 'typescript' }, diff --git a/private_dot_config/private_fish/fish_plugins b/private_dot_config/private_fish/fish_plugins index faa819e..7745678 100644 --- a/private_dot_config/private_fish/fish_plugins +++ b/private_dot_config/private_fish/fish_plugins @@ -11,3 +11,4 @@ jhillyerd/plugin-git patrickf1/fzf.fish lilyball/nix-env.fish ilancosman/tide@v6 +edc/bass diff --git a/private_dot_config/wezterm/wezterm.lua b/private_dot_config/wezterm/wezterm.lua index 5a28703..49fb9c6 100644 --- a/private_dot_config/wezterm/wezterm.lua +++ b/private_dot_config/wezterm/wezterm.lua @@ -5,7 +5,7 @@ local wezterm = require 'wezterm' local config = wezterm.config_builder() local act = wezterm.action -config.scrollback_lines = 5000000 +config.scrollback_lines = 1000000 config.enable_scroll_bar = false config.default_cursor_style = 'BlinkingBar' @@ -120,7 +120,7 @@ config.window_frame = { border_left_width = '1cell', border_right_width = '0.5cell', border_bottom_height = '0.25cell', - border_top_height = '1.2cell', + border_top_height = '2cell', border_left_color = '#1c2836', border_right_color = '#1c2836', border_bottom_color = '#1c2836',