From 86f31edec2fe734378b45cc542074f84861dde17 Mon Sep 17 00:00:00 2001 From: Alex Selimov Date: Sat, 14 Mar 2026 10:58:18 -0400 Subject: [PATCH 1/2] latest config updates --- bin/swap_mode.sh | 88 ++++++------------------------------------- config/ghostty/config | 5 +++ home/.tmux.conf | 4 +- home/.zshrc | 57 ++++++++++++---------------- 4 files changed, 42 insertions(+), 112 deletions(-) diff --git a/bin/swap_mode.sh b/bin/swap_mode.sh index 521e853..8b14f5b 100755 --- a/bin/swap_mode.sh +++ b/bin/swap_mode.sh @@ -2,21 +2,24 @@ NVIM_CONF="${HOME}/.config/nvim/init.lua" GHOSTTY_CONF="${HOME}/.config/ghostty/config" -DUNST_CONF="${HOME}/.config/dunst/dunstrc" +GEMINI_CONF="${HOME}/repos/SelimovDE/gemini/settings.json" [ -f "$NVIM_CONF" ] || { echo "Missing $NVIM_CONF"; exit 1; } [ -f "$GHOSTTY_CONF" ] || { echo "Missing $GHOSTTY_CONF"; exit 1; } -[ -f "$DUNST_CONF" ] || { echo "Missing $DUNST_CONF"; exit 1; } +[ -f "$GEMINI_CONF" ] || { echo "Missing $GEMINI_CONF"; exit 1; } +which sed set_light_mode() { sed -E -i 's/^([[:space:]]*theme[[:space:]]*=[[:space:]]*)zenwritten-dark/\1zenwritten-light/' "$GHOSTTY_CONF" sed -E -i 's/(vim.g.light_mode[[:space:]]*=[[:space:]]*).*/\1true/' "$NVIM_CONF" + sed -i 's/"theme": "Zenwritten Dark"/"theme": "Zenwritten Light"/' "$GEMINI_CONF" MODE="light" } set_dark_mode() { sed -E -i 's/^([[:space:]]*theme[[:space:]]*=[[:space:]]*)zenwritten-light/\1zenwritten-dark/' "$GHOSTTY_CONF" sed -E -i 's/(vim.g.light_mode[[:space:]]*=[[:space:]]*).*/\1false/' "$NVIM_CONF" + sed -i 's/"theme": "Zenwritten Light"/"theme": "Zenwritten Dark"/' "$GEMINI_CONF" MODE="dark" } @@ -54,80 +57,11 @@ for dir in "${XDG_RUNTIME_DIR:-}" "${TMPDIR:-/tmp}" "/tmp" "$HOME/.local/state/n done -# Reload Ghostty: send SIGUSR2 to running ghostty processes (macOS/Linux) -pkill -USR2 -x ghostty 2>/dev/null +# Reload Ghostty via AppleScript menu click +osascript -e 'tell application "System Events" + tell process "Ghostty" + click menu item "Reload Configuration" of menu "Ghostty" of menu bar item "Ghostty" of menu bar 1 + end tell +end tell' 2>/dev/null || true echo "Switched to ${MODE} mode" - -# Script for changing between light and dark modes on Linux -if [ "$(uname)" != "Darwin" ]; then - if [ "$MODE" == "dark" ]; then - echo "Swapping to dark mode" - # GTK Theme - gsettings set org.gnome.desktop.interface gtk-theme '' - gsettings set org.gnome.desktop.interface gtk-theme 'WhiteSur-Dark' - gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' - sed -i -e 's@Net/ThemeName.*@Net/ThemeName "WhiteSur-Dark"@' ~/.xsettingsd - - # Rofi theme - sed -i -e "s/light.rasi/dark.rasi/" $HOME/.config/rofi/config.rasi - # Swap dunst urgency_low background and foreground - sed -E -i '/^\[urgency_low\]/,/^\[.*\]/ { - s/^([[:space:]]*background[[:space:]]*=[[:space:]]*).*/\1"#3d3839"/ - s/^([[:space:]]*foreground[[:space:]]*=[[:space:]]*).*/\1"#8e8e8e"/ - }' "$DUNST_CONF" - - # Swap dunst urgency_normal background and foreground - sed -E -i '/^\[urgency_normal\]/,/^\[.*\]/ { - s/^([[:space:]]*background[[:space:]]*=[[:space:]]*).*/\1"#3d3839"/ - s/^([[:space:]]*foreground[[:space:]]*=[[:space:]]*).*/\1"#BBBBBB"/ - }' "$DUNST_CONF" - - # Plasma theme - if [[ "$XDG_CURRENT_DESKTOP" == "KDE" ]]; then - plasma-apply-lookandfeel -a com.github.vinceliuice.WhiteSur-dark - plasma-apply-cursortheme phinger-cursors-dark - kwriteconfig6 --file kdeglobals --group Icons --key Theme Papirus-Dark - kwriteconfig6 --file ksplashrc --group KSplash --key Theme Breeze - kquitapp6 plasmashell - sleep 0.3 - kstart5 plasmashell - fi - - else - echo "Swapping to light mode" - # GTK Theme - gsettings set org.gnome.desktop.interface gtk-theme '' - gsettings set org.gnome.desktop.interface gtk-theme 'WhiteSur-Light' - gsettings set org.gnome.desktop.interface color-scheme 'default' - sed -i -e 's@Net/ThemeName.*@Net/ThemeName "WhiteSur-Light"@' ~/.xsettingsd - # Swap dunst urgency_low background and foreground - sed -E -i '/^\[urgency_low\]/,/^\[.*\]/ { - s/^([[:space:]]*background[[:space:]]*=[[:space:]]*).*/\1"#8e8e8e"/ - s/^([[:space:]]*foreground[[:space:]]*=[[:space:]]*).*/\1"#3d3839"/ - }' "$DUNST_CONF" - - # Swap dunst urgency_normal background and foreground - sed -E -i '/^\[urgency_normal\]/,/^\[.*\]/ { - s/^([[:space:]]*background[[:space:]]*=[[:space:]]*).*/\1"#BBBBBB"/ - s/^([[:space:]]*foreground[[:space:]]*=[[:space:]]*).*/\1"#191919"/ - }' "$DUNST_CONF" - - # Rofi theme - sed -i -e "s/dark.rasi/light.rasi/" $HOME/.config/rofi/config.rasi - # - # Plasma theme - if [[ "$XDG_CURRENT_DESKTOP" == "KDE" ]]; then - plasma-apply-lookandfeel -a com.github.vinceliuice.WhiteSur-alt - plasma-apply-cursortheme phinger-cursors-dark - kwriteconfig6 --file kdeglobals --group Icons --key Theme Papirus - kwriteconfig6 --file ksplashrc --group KSplash --key Theme Breeze - kquitapp6 plasmashell - sleep 0.3 - kstart6 plasmashell - fi - fi - - killall dunst - killall -HUP xsettingsd -fi diff --git a/config/ghostty/config b/config/ghostty/config index 22da348..170bd0c 100644 --- a/config/ghostty/config +++ b/config/ghostty/config @@ -30,3 +30,8 @@ split-inherit-working-directory = true keybind = cmd+shift+p=ignore +window-save-state = always +confirm-close-surface = true +keybind = cmd+shift+t=close_surface + + diff --git a/home/.tmux.conf b/home/.tmux.conf index 73de293..c02cb51 100644 --- a/home/.tmux.conf +++ b/home/.tmux.conf @@ -13,8 +13,8 @@ set -g prefix C-p bind C-p send-prefix #Sane split commands -bind | split-window -h -c "#{pane_current_path}" -bind - split-window -v -c "#{pane_current_path}" +bind v split-window -h -c "#{pane_current_path}" +bind s split-window -v -c "#{pane_current_path}" unbind '"' unbind % diff --git a/home/.zshrc b/home/.zshrc index 6ad2844..1313001 100644 --- a/home/.zshrc +++ b/home/.zshrc @@ -63,6 +63,7 @@ zstyle -e ':completion:*:hosts' hosts 'reply=( ${=${${(f)"$(cat {/etc/ssh_,~/ar.ssh/known_}hosts(|2)(N) 2>/dev/null)"}%%[#| ]*}//,/ } ${=${${${${(@M)${(f)"$(cat ~/.ssh/config 2>/dev/null)"}:#Host *}#Host }:#*\**}:#*\?*}} )' +source <(k completion zsh) #============================================================================== # Plugins & Tools @@ -80,42 +81,23 @@ load_nvm() { # Create placeholder functions that load nvm once, then call the real command nvm() { - unset -f nvm node npm gemini + unset -f nvm node npm load_nvm nvm "$@" } node() { - unset -f nvm node npm gemini + unset -f nvm node npm load_nvm node "$@" } npm() { - unset -f nvm node npm gemini + unset -f nvm node npm load_nvm npm "$@" } -gemini() { - unset -f nvm node npm gemini - load_nvm - gemini "$@" -} - -claude() { - unset -f claude - export ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic - export ANTHROPIC_AUTH_TOKEN="$(pass list zai_token)" - npm 2>&1 1>/dev/null - claude "$@" -} - -codex() { - unset -f codex - npm 2>&1 1>/dev/null - codex "$@" -} # ghcup [ -f "/home/aselimov/.ghcup/env" ] && . "/home/aselimov/.ghcup/env" # ghcup-env @@ -132,8 +114,15 @@ if command -v jenv >/dev/null 2>&1; then eval "$(jenv init -)" fi -# starship -eval "$(starship init zsh)" +# Simple notify function +notify() { + local cmd="$*" + eval "$cmd" + local rc=$? + osascript -e "display notification \"Done (exit=$rc)\" with title \"${cmd//\"/\\\"}\"" + return $rc +} + # zsh-autosuggestions source "$HOME/.config/zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" @@ -157,21 +146,16 @@ bindkey '^[[B' history-substring-search-down #============================================================================== if [ "$(uname)" = "Darwin" ]; then - export PATH="/opt/homebrew/bin:$PATH" + export PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:/opt/homebrew/bin:$PATH" alias ls="gls --classify --group-directories-first --color" - GEMINI_BIN=$(which gemini) - function gemini(){ - source ~/.gemini_project && $GEMINI_BIN "$@" - } export NVIM_JDTLS_JAVA_HOME="/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home/" - # I only start tmux by default on Mac because of dwm+swallow patch else alias ls="ls --classify --group-directories-first --color" fi -if [[ -z "$TMUX" ]] && [[ -n "$PS1" ]] && [[ -z "$NO_TMUX" ]]; then - tmux attach -t dev || tmux new -s dev -fi +#if [[ -z "$TMUX" ]] && [[ -n "$PS1" ]] && [[ -z "$NO_TMUX" ]]; then +# tmux attach -t dev || tmux new -s dev +#fi # pnpm export PNPM_HOME="/home/aselimov/.local/share/pnpm" @@ -180,3 +164,10 @@ case ":$PATH:" in *) export PATH="$PNPM_HOME:$PATH" ;; esac # pnpm end + +# Added by LM Studio CLI (lms) +export PATH="$PATH:/Users/aselimov/.lmstudio/bin" +# End of LM Studio CLI section + +# starship +eval "$(starship init zsh)" From a14e1172d990bd77b46b36fd60b8b35126d1d8b0 Mon Sep 17 00:00:00 2001 From: Alex Selimov Date: Thu, 26 Mar 2026 22:36:22 -0400 Subject: [PATCH 2/2] latest config changes --- bin/swap_mode.sh | 4 +++ config/ghostty/config | 3 -- home/.profile | 12 ++++++- home/.zshrc | 3 -- setup_mac.sh | 77 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 7 deletions(-) create mode 100755 setup_mac.sh diff --git a/bin/swap_mode.sh b/bin/swap_mode.sh index 8b14f5b..75b339b 100755 --- a/bin/swap_mode.sh +++ b/bin/swap_mode.sh @@ -3,16 +3,19 @@ NVIM_CONF="${HOME}/.config/nvim/init.lua" GHOSTTY_CONF="${HOME}/.config/ghostty/config" GEMINI_CONF="${HOME}/repos/SelimovDE/gemini/settings.json" +CLAUDE_CONF="${HOME}/.claude.json" [ -f "$NVIM_CONF" ] || { echo "Missing $NVIM_CONF"; exit 1; } [ -f "$GHOSTTY_CONF" ] || { echo "Missing $GHOSTTY_CONF"; exit 1; } [ -f "$GEMINI_CONF" ] || { echo "Missing $GEMINI_CONF"; exit 1; } +[ -f "$CLAUDE_CONF" ] || { echo "Missing $CLAUDE_CONF"; exit 1; } which sed set_light_mode() { sed -E -i 's/^([[:space:]]*theme[[:space:]]*=[[:space:]]*)zenwritten-dark/\1zenwritten-light/' "$GHOSTTY_CONF" sed -E -i 's/(vim.g.light_mode[[:space:]]*=[[:space:]]*).*/\1true/' "$NVIM_CONF" sed -i 's/"theme": "Zenwritten Dark"/"theme": "Zenwritten Light"/' "$GEMINI_CONF" + sed -i 's/"theme": "dark"/"theme": "light"/' "$CLAUDE_CONF" MODE="light" } @@ -20,6 +23,7 @@ set_dark_mode() { sed -E -i 's/^([[:space:]]*theme[[:space:]]*=[[:space:]]*)zenwritten-light/\1zenwritten-dark/' "$GHOSTTY_CONF" sed -E -i 's/(vim.g.light_mode[[:space:]]*=[[:space:]]*).*/\1false/' "$NVIM_CONF" sed -i 's/"theme": "Zenwritten Light"/"theme": "Zenwritten Dark"/' "$GEMINI_CONF" + sed -i 's/"theme": "light"/"theme": "dark"/' "$CLAUDE_CONF" MODE="dark" } diff --git a/config/ghostty/config b/config/ghostty/config index 170bd0c..4b261f0 100644 --- a/config/ghostty/config +++ b/config/ghostty/config @@ -30,8 +30,5 @@ split-inherit-working-directory = true keybind = cmd+shift+p=ignore -window-save-state = always confirm-close-surface = true keybind = cmd+shift+t=close_surface - - diff --git a/home/.profile b/home/.profile index 54c686a..b6728f5 100644 --- a/home/.profile +++ b/home/.profile @@ -2,5 +2,15 @@ [ -f "/home/aselimov/.ghcup/env" ] && . "/home/aselimov/.ghcup/env" # ghcup-env -export PATH="$PATH:/usr/local/cuda-12.8/bin:$HOME/bin:$HOME/.local/bin" +export PATH="$PATH:$HOME/.local/bin" + +if [ "$(uname)" = "Darwin" ]; then + export PATH="$HOME/bin:/opt/homebrew/opt/gnu-sed/libexec/gnubin:/opt/homebrew/bin:$PATH" +fi + export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-12.8/lib64" + +# Added by LM Studio CLI (lms) +export PATH="$PATH:/Users/aselimov/.lmstudio/bin" +# End of LM Studio CLI section + diff --git a/home/.zshrc b/home/.zshrc index 1313001..04d8c37 100644 --- a/home/.zshrc +++ b/home/.zshrc @@ -16,8 +16,6 @@ setopt HIST_IGNORE_SPACE # Don't save commands starting with space # Environment Variables #============================================================================== -source ~/.profile - export OMPI_MCA_rmaps_base_oversubscribe=1 export CLICOLOR=1 export LSCOLORS=ExGxBxDxCxEgEdxbxgxcxd @@ -146,7 +144,6 @@ bindkey '^[[B' history-substring-search-down #============================================================================== if [ "$(uname)" = "Darwin" ]; then - export PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:/opt/homebrew/bin:$PATH" alias ls="gls --classify --group-directories-first --color" export NVIM_JDTLS_JAVA_HOME="/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home/" else diff --git a/setup_mac.sh b/setup_mac.sh new file mode 100755 index 0000000..4d7f4fb --- /dev/null +++ b/setup_mac.sh @@ -0,0 +1,77 @@ +#!/bin/bash +# Full macOS setup script. +# Deploys dotfiles, sets up neovim config, and installs brew applications. + +set -e + +SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) + +# --- SSH keygen --- +SSH_KEY="$HOME/.ssh/id_ed25519" +echo "=== Setting up SSH key ===" +if [ -f "$SSH_KEY" ]; then + echo "SSH key already exists at $SSH_KEY, skipping." +else + read -rp "Enter email for SSH key: " ssh_email + ssh-keygen -t ed25519 -C "$ssh_email" -f "$SSH_KEY" + eval "$(ssh-agent -s)" + ssh-add "$SSH_KEY" + echo "Public key:" + cat "${SSH_KEY}.pub" +fi +echo + +# --- Deploy dotfiles --- +echo "=== Deploying dotfiles ===" +"$SCRIPT_DIR/deploy.sh" + +# --- Neovim config --- +NVIM_CONFIG="$HOME/.config/nvim" +NVIM_REPO="https://forge.alexselimov.com/aselimov/neovim.git" + +echo "=== Setting up neovim config ===" +if [ -d "$NVIM_CONFIG" ]; then + if [ -L "$NVIM_CONFIG" ]; then + echo "Removing existing symlink at $NVIM_CONFIG" + rm "$NVIM_CONFIG" + elif [ -d "$NVIM_CONFIG/.git" ]; then + echo "Neovim config already cloned at $NVIM_CONFIG, pulling latest..." + git -C "$NVIM_CONFIG" pull + echo "Done." + echo + else + echo "Backing up existing $NVIM_CONFIG -> ${NVIM_CONFIG}.bak" + mv "$NVIM_CONFIG" "${NVIM_CONFIG}.bak" + fi +fi + +if [ ! -d "$NVIM_CONFIG/.git" ]; then + echo "Cloning neovim config..." + git clone "$NVIM_REPO" "$NVIM_CONFIG" + echo "Done." + echo +fi + +# --- Homebrew --- +echo "=== Checking for Homebrew ===" +if ! command -v brew &>/dev/null; then + echo "Homebrew not found. Installing..." + /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +fi + +echo "=== Installing brew formulae ===" +brew install neovim +brew install coreutils +brew install gnu-sed +brew install starship +brew install nvm +brew install kubectl + +echo "=== Installing brew casks ===" +brew install --cask anytype +brew install --cask ghostty +brew install --cask helium +brew install --cask flowvision + +echo +echo "macOS setup complete!"