Compare commits

..

1 Commits

Author SHA1 Message Date
jsarthak cfce67e2e4 fix bashrc 2026-07-17 22:11:38 +05:30
14 changed files with 106 additions and 470 deletions
-13
View File
@@ -1,15 +1,2 @@
# ── Neovim lock file ──────────────────────────────────────────────────────────
*nvim/.config/nvim/lazy-lock.json* *nvim/.config/nvim/lazy-lock.json*
# ── OS clutter ────────────────────────────────────────────────────────────────
.DS_Store .DS_Store
Thumbs.db
# ── Per-machine local overrides (Strategy 1: Dynamic Runtime Sourcing) ────────
# These files are stowed/created on each machine but never committed.
# They contain secrets, host-specific paths, work credentials, etc.
**/*.local
**/.zshrc.local
**/.tmux.conf.local
**/.gitconfig.local
**/.env.local
+4 -34
View File
@@ -7,37 +7,7 @@ case $- in
*) return;; *) return;;
esac esac
# ── Shared shell config ──────────────────────────────────────────────────────── # Example command:
[[ -f ~/.config/shell/common ]] && source ~/.config/shell/common source ~/.config/shell/common
[[ -f ~/.config/shell/aliases ]] && source ~/.config/shell/aliases source ~/.config/shell/personal #added by 6500gitsetup
source ~/.config/shell/aliases
# ── OS detection — source the right platform overlay ──────────────────────────
case "$(uname -s)" in
Darwin) [[ -f ~/.config/shell/macos ]] && source ~/.config/shell/macos ;;
Linux) [[ -f ~/.config/shell/linux ]] && source ~/.config/shell/linux ;;
esac
# ── Bash-specific init (starship, zoxide, fzf) ────────────────────────────────
if [[ -n "$BASH_VERSION" ]]; then
# History settings
HISTCONTROL=ignoreboth
HISTSIZE=10000
HISTFILESIZE=20000
shopt -s histappend checkwinsize
# Starship prompt
command -v starship >/dev/null && eval "$(starship init bash)"
# Zoxide (smarter cd)
command -v zoxide >/dev/null && eval "$(zoxide init bash)"
# fzf
[[ -f ~/.fzf.bash ]] && source ~/.fzf.bash
fi
export EDITOR='nvim'
export MANROFFOPT="-c"
# ── Per-machine local override (untracked) ────────────────────────────────────
# Create ~/.bashrc.local on each machine for secrets / host-specific tweaks.
[[ -f ~/.bashrc.local ]] && source ~/.bashrc.local
-85
View File
@@ -1,85 +0,0 @@
#!/usr/bin/env bash
# bootstrap.sh — Set up dotfiles on a new machine
# Usage: bash bootstrap.sh [--profile personal|work]
#
# This script stows all dotfile packages, copies shell config files,
# and creates untracked .local stub files for per-machine overrides.
set -e
DOTFILES_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROFILE="${1:-personal}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Dotfiles Bootstrap"
echo " Profile : $PROFILE"
echo " OS : $(uname -s)"
echo " Host : $(hostname)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
# ── 1. Stow all packages ───────────────────────────────────────────────────────
# shell is excluded from global .stow-local-ignore, handled separately below
PACKAGES="zsh bash tmux nvim starship alacritty kitty ghostty wezterm zed btop vim"
for pkg in $PACKAGES; do
if [[ -d "$DOTFILES_DIR/$pkg" ]]; then
echo " stow → $pkg"
stow --adopt --dir="$DOTFILES_DIR" --target="$HOME" "$pkg" 2>/dev/null || \
echo " ⚠ stow $pkg skipped (already linked or conflict)"
fi
done
# ── 2. Copy shell config files manually (stow-local-ignore excludes `shell`) ──
SHELL_SRC="$DOTFILES_DIR/shell/.config/shell"
SHELL_DST="$HOME/.config/shell"
mkdir -p "$SHELL_DST"
for f in common aliases personal work macos linux; do
if [[ -f "$SHELL_SRC/$f" ]]; then
echo " copy shell/$f$SHELL_DST/$f"
cp -n "$SHELL_SRC/$f" "$SHELL_DST/$f" 2>/dev/null || true
fi
done
# ── 3. Create untracked .local stub files ─────────────────────────────────────
create_stub() {
local file="$1" comment="$2"
if [[ ! -f "$file" ]]; then
echo "# $comment" > "$file"
echo " created stub → $file"
else
echo " exists (skipped) → $file"
fi
}
create_stub "$HOME/.zshrc.local" "Per-machine zsh overrides — never committed"
create_stub "$HOME/.bashrc.local" "Per-machine bash overrides — never committed"
create_stub "$HOME/.tmux.conf.machine.local" "Per-machine tmux overrides — never committed"
create_stub "$HOME/.gitconfig.local" "Per-machine git identity — never committed"
# ── 4. Inject profile into .zshrc.local if requested ──────────────────────────
if [[ "$PROFILE" == "work" ]]; then
if ! grep -q "DOTFILES_PROFILE" "$HOME/.zshrc.local" 2>/dev/null; then
echo "" >> "$HOME/.zshrc.local"
echo "# Work profile — load work-specific shell config and nvim plugins" >> "$HOME/.zshrc.local"
echo "export DOTFILES_PROFILE=work" >> "$HOME/.zshrc.local"
echo "source ~/.config/shell/work" >> "$HOME/.zshrc.local"
echo " → injected DOTFILES_PROFILE=work into ~/.zshrc.local"
fi
fi
# ── 5. macOS-specific setup ───────────────────────────────────────────────────
if [[ "$(uname -s)" == "Darwin" ]]; then
# Install Homebrew if missing
if ! command -v brew >/dev/null 2>&1; then
echo " Installing Homebrew…"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Done! Next steps:"
echo " 1. Edit ~/.zshrc.local — add secrets / tokens"
echo " 2. Edit ~/.gitconfig.local — add your git identity for this machine"
echo " 3. Run: exec zsh (or source ~/.bashrc for bash)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
@@ -75,11 +75,7 @@ require("lazy").setup({
"junegunn/seoul256.vim" "junegunn/seoul256.vim"
}, },
-- ── Work-profile plugins (Copilot) ────────────────────────────────────── -- NOTE: Plugins can also be added by using a table,
-- Loaded only when DOTFILES_PROFILE=work is set (via ~/.zshrc.local).
-- On work machines add: export DOTFILES_PROFILE=work
(os.getenv("DOTFILES_PROFILE") == "work" and require("kickstart.plugins.work") or {}),
-- with the first argument being the link and the following -- with the first argument being the link and the following
-- keys can be used to configure plugin behavior/loading/etc. -- keys can be used to configure plugin behavior/loading/etc.
-- --
@@ -1,8 +0,0 @@
-- Work-machine plugins (Copilot + CopilotChat)
-- Loaded only when DOTFILES_PROFILE=work is set in the environment.
-- Add this to your ~/.zshrc.local on work machines:
-- export DOTFILES_PROFILE=work
return {
"github/copilot.vim",
require("kickstart.plugins.copilot_chat"),
}
-54
View File
@@ -1,54 +0,0 @@
#!/usr/bin/env bash
# tmux-session-name.sh — Auto-name new tmux sessions with emoji + codename
#
# Called by the session-created hook in .tmux.conf
# Usage: tmux-session-name.sh <current_session_name> <session_id>
CURRENT_NAME="${1:-}"
SESSION_ID="${2:-}"
# Skip if name is empty or not a plain number (user explicitly named it)
if [[ -z "$CURRENT_NAME" || ! "$CURRENT_NAME" =~ ^[0-9]+$ ]]; then
exit 0
fi
# ── Name pool ─────────────────────────────────────────────────────────────────
EMOJIS=(
"⚡" "🔥" "🌙" "🚀" "🎯" "💎" "🌊" "🎸" "🦊" "🐉"
"🌟" "🎭" "🔮" "🦋" "🌸" "🏔️" "🎪" "🦁" "🐺" "🦅"
"🐬" "🌋" "⚗️" "🧠" "🔭" "🎲" "🏹" "🌀" "🦄" "🐙"
"🎮" "🛸" "🌈" "🔱" "⚜️" "🧬" "🦾" "💫" "🎆" "🌌"
)
ADJECTIVES=(
swift blazing cosmic silent wild golden dark frozen epic neon
cyber ghost storm iron crystal hyper zen rogue nova apex
void shadow turbo lunar sonic electric primal ancient savage brave
mystic toxic ultra prime omega alpha delta sigma raging burning
)
NOUNS=(
wolf phoenix raven otter falcon dragon viper lynx shark cobra
titan spectre nexus cipher forge matrix pulse blade hawk panther
manta kraken hydra mantis raptor condor jaguar orca wraith banshee
golem oracle anvil tempest quasar nebula comet prism zenith apex
)
# ── Pick random combination ───────────────────────────────────────────────────
# We use absolute arithmetic expansion to avoid negative index quirks
EMOJI="${EMOJIS[$((RANDOM % ${#EMOJIS[@]}))]}"
ADJ="${ADJECTIVES[$((RANDOM % ${#ADJECTIVES[@]}))]}"
NOUN="${NOUNS[$((RANDOM % ${#NOUNS[@]}))]}"
NEW_NAME="${EMOJI} ${ADJ}-${NOUN}"
# ── Rename ────────────────────────────────────────────────────────────────────
if [[ -n "$SESSION_ID" ]]; then
# Use -t with the specific session ID to avoid targeting the wrong session
tmux rename-session -t "$SESSION_ID" "$NEW_NAME" 2>/dev/null
else
# Called standalone — just print the name
echo "$NEW_NAME"
fi
-16
View File
@@ -1,16 +0,0 @@
# ── Truly shared exports / env vars ───────────────────────────────────────────
# Sourced by both .zshrc and .bashrc on ALL machines (all OSes, all profiles).
# Keep this minimal — only things that apply 100% universally.
export EDITOR='nvim'
export VISUAL='nvim'
# Dotfiles root — used by scripts and tmux hooks
export DOTFILES="$HOME/dotfiles"
# Man page rendering
export MANROFFOPT="-c"
# Better history defaults (bash and zsh honour these)
export HISTSIZE=10000
export HISTFILESIZE=20000
-21
View File
@@ -1,21 +0,0 @@
# ── Linux-specific shell config ───────────────────────────────────────────────
# Sourced automatically from .zshrc / .bashrc on Linux hosts only.
# xdg-open alias (Linux equivalent of macOS `open`)
alias open="xdg-open"
# Clipboard helpers (if xclip is present)
if command -v xclip >/dev/null 2>&1; then
alias pbcopy="xclip -selection clipboard"
alias pbpaste="xclip -selection clipboard -o"
fi
# fzf shell integration (Linux path)
# Set up fzf key bindings and fuzzy completion
eval "$(fzf --bash)"
[[ -f ~/.fzf.zsh ]] && source ~/.fzf.zsh
# Zoxide (smarter cd) — in case not already initialized by bashrc
if [[ -n "$ZSH_VERSION" ]]; then
command -v zoxide >/dev/null && eval "$(zoxide init zsh)"
fi
-20
View File
@@ -1,20 +0,0 @@
# ── macOS-specific shell config ───────────────────────────────────────────────
# Sourced automatically from .zshrc / .bashrc on Darwin hosts only.
# Homebrew
eval "$(/opt/homebrew/bin/brew shellenv)" 2>/dev/null
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"
# Antigravity
export PATH="/Users/jsarthak/.antigravity/antigravity/bin:$PATH"
# Flutter SDK
export PATH="/Users/jsarthak/flutter-sdk/flutter/bin:$PATH"
export PATH="/Users/jsarthak/.local/bin:$PATH"
# fzf shell integration (macOS path)
source <(fzf --zsh) 2>/dev/null || true
# macOS convenience aliases
alias finder="open -a Finder ."
alias brewup="brew update && brew upgrade && brew cleanup"
+17 -17
View File
@@ -1,7 +1,7 @@
# starship.toml - Fully riced modern prompt config aligned with Carbonfox theme # starship.toml - Fully riced modern prompt config aligned with Carbonfox theme
format = """ format = """
$os$username$hostname$directory$git_branch$git_state$git_status$cmd_duration$line_break\ $os$username$hostname$directory$git_branch$git_state$git_status$python$nodejs$rust$golang$cmd_duration$line_break\
$character""" $character"""
# Wait 10 milliseconds for starship to check files under the current directory. # Wait 10 milliseconds for starship to check files under the current directory.
@@ -15,7 +15,7 @@ disabled = false
style = "bold white" style = "bold white"
[username] [username]
style_user = "bold purple" # Use terminal purple style_user = "bold #be95ff" # Carbonfox purple
style_root = "bold red" style_root = "bold red"
format = "[$user]($style)" format = "[$user]($style)"
disabled = false disabled = false
@@ -23,12 +23,12 @@ show_always = true
[hostname] [hostname]
ssh_only = false ssh_only = false
style = "bold cyan" # Use terminal cyan style = "bold #33b1ff" # Carbonfox blue/cyan
format = "@[$hostname]($style) " format = "@[$hostname]($style) "
disabled = false disabled = false
[directory] [directory]
style = "bold blue" # Use terminal blue style = "bold #08bdba" # Carbonfox teal
format = "in [ $path]($style)[$read_only]($read_only_style) " format = "in [ $path]($style)[$read_only]($read_only_style) "
truncation_length = 3 truncation_length = 3
truncation_symbol = "…/" truncation_symbol = "…/"
@@ -37,19 +37,19 @@ read_only = " 󰌾"
read_only_style = "bold red" read_only_style = "bold red"
[character] [character]
success_symbol = "[](bold green)" # Use terminal green success_symbol = "[](bold #25be6a)" # Carbonfox green
error_symbol = "[](bold red)" # Use terminal red error_symbol = "[](bold #ee5396)" # Carbonfox pink/red
vimcmd_symbol = "[](bold cyan)" # Use terminal cyan vimcmd_symbol = "[](bold #08bdba)" # Carbonfox teal
[git_branch] [git_branch]
symbol = "🌱 " symbol = "🌱 "
style = "bold red" # Use terminal red style = "bold #ee5396" # Carbonfox pink
format = "on [$symbol $branch]($style) " format = "on [$symbol$branch]($style) "
truncation_symbol = "" truncation_symbol = ""
[git_status] [git_status]
style = "bold red" style = "bold #ee5396"
format = "([$all_status $ahead_behind]($style) )" format = "([$all_status$ahead_behind]($style) )"
conflicted = "🏳" conflicted = "🏳"
ahead = "🏎💨" ahead = "🏎💨"
behind = "😰" behind = "😰"
@@ -67,28 +67,28 @@ cherry_pick = "[🍒 PICKING](bold red)"
[python] [python]
symbol = "🐍 " symbol = "🐍 "
style = "bold green" style = "bold #3ddbd9"
format = "via [$symbol$version]($style) " format = "via [$symbol$version]($style) "
[nodejs] [nodejs]
symbol = " " symbol = " "
style = "bold green" style = "bold #25be6a"
format = "via [$symbol$version]($style) " format = "via [$symbol$version]($style) "
[rust] [rust]
symbol = "🦀 " symbol = "🦀 "
style = "bold yellow" style = "bold #ff9e64"
format = "via [$symbol$version]($style) " format = "via [$symbol$version]($style) "
[golang] [golang]
symbol = " " symbol = " "
style = "bold blue" style = "bold #78a9ff"
format = "via [$symbol$version]($style) " format = "via [$symbol$version]($style) "
[cmd_duration] [cmd_duration]
min_time = 100 min_time = 100
style = "bold yellow" style = "bold #e0af68" # Carbonfox yellow/orange
format = "took [$duration]($style) " format = "underwent [$duration]($style) "
[status] [status]
style = "bg:blue" style = "bg:blue"
+73 -62
View File
@@ -71,49 +71,42 @@ tmux_conf_24b_colour=auto
# - tmux_conf_theme_synchronized # - tmux_conf_theme_synchronized
tmux_conf_theme=enabled tmux_conf_theme=enabled
# Classic Monokai Color Palette # Carbonfox Color Palette
color_bg="#272822" color_bg="#161616"
color_fg="#f8f8f2" color_fg="#f2f4f8"
color_black="#1e1f1c" color_black="#282828"
color_gray="#3e3d32" color_gray="#353535"
color_light_gray="#75715e" color_light_gray="#484848"
color_red="#f92672" color_red="#ee5396"
color_green="#a6e22e" # Monokai Green (Session & Normal) color_green="#25be6a"
color_teal="#a6e22e" # Monokai Green color_teal="#3ddbd9"
color_blue="#66d9ef" # Monokai Cyan/Blue color_blue="#78a9ff"
color_purple="#ae81ff" # Monokai Purple (Host & Visual) color_purple="#be95ff"
color_cyan="#66d9ef" # Monokai Cyan (Active Window) color_cyan="#33b1ff"
color_yellow="#e6db74" # Monokai Yellow (Date/Time) color_white="#dfdfe0"
color_white="#f8f8f2"
color_accent="$color_cyan" # Active window is Monokai Cyan color_accent="$color_blue"
color_primary="default" color_primary="default"
color_secondary="$color_gray" color_secondary="$color_gray"
color_fg_primary="$color_fg" color_fg_primary="$color_fg"
color_fg_secondary="$color_white" color_fg_secondary="$color_white"
# Curve variables bound to palette colors
color_blue_curve="$color_purple"
color_cyan_curve="$color_yellow"
color_purple_curve="$color_purple"
window_status_current_bg="default" window_status_current_bg="default"
window_status_current_fg="$color_accent" window_status_current_fg="$color_accent"
theme_mode_bg="$color_accent" theme_mode_bg="$color_accent"
theme_mode_fg="$color_bg" theme_mode_fg="$color_bg"
tmux_conf_theme_window_fg="#a5afc2" tmux_conf_theme_window_fg="$color_fg_primary"
# window style # window style
tmux_conf_theme_window_bg="default" tmux_conf_theme_window_bg="default"
# highlight focused pane, possible values are: # highlight focused pane, possible values are:
# - true # - true
# - false (default) # - false (default)
tmux_conf_theme_highlight_focused_pane=true tmux_conf_theme_highlight_focused_pane=false
# focused pane colours: # focused pane colours:
tmux_conf_theme_focused_pane_fg="#f2f4f8"
tmux_conf_theme_focused_pane_bg="default" tmux_conf_theme_focused_pane_bg="default"
# pane border style, possible values are: # pane border style, possible values are:
@@ -181,7 +174,7 @@ tmux_conf_theme_window_status_attr="none"
# tmux_conf_theme_window_status_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}" # tmux_conf_theme_window_status_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}"
#tmux_conf_theme_window_status_format="#{circled_window_index} #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}" #tmux_conf_theme_window_status_format="#{circled_window_index} #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}"
# tmux_conf_theme_window_status_format=" #I: #(despell -e #W) #W #{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" # tmux_conf_theme_window_status_format=" #I: #(despell -e #W) #W #{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}"
tmux_conf_theme_window_status_format="#[fg=$color_light_gray,bg=default]#I: #(bash $HOME/dotfiles/tmux/tmux-window-name.sh '#W' '#{pane_current_path}')#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" tmux_conf_theme_window_status_format="#[fg=$color_gray,bg=default]#[fg=$color_fg,bg=$color_gray]#I: #(bash /Users/jsarthak/dotfiles/tmux/tmux-window-name.sh '#W' '#{pane_current_path}')#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}#[fg=$color_gray,bg=default]"
# window current status style # window current status style
# - built-in variables are: # - built-in variables are:
@@ -196,7 +189,7 @@ tmux_conf_theme_window_status_format="#[fg=$color_light_gray,bg=default]#I: #(ba
# tmux_conf_theme_window_status_current_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}" # tmux_conf_theme_window_status_current_format="#I #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}"
#tmux_conf_theme_window_status_current_format="#{circled_window_index} #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}" #tmux_conf_theme_window_status_current_format="#{circled_window_index} #W#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,!,}#{?window_zoomed_flag,Z,}"
# tmux_conf_theme_window_status_current_format="#I: #(despell -e #W) #[fg=$tmux_conf_theme_window_status_current_fg]#W*#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" # tmux_conf_theme_window_status_current_format="#I: #(despell -e #W) #[fg=$tmux_conf_theme_window_status_current_fg]#W*#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}"
tmux_conf_theme_window_status_current_format="#[fg=$color_accent,bg=default,bold]#I: #(bash $HOME/dotfiles/tmux/tmux-window-name.sh '#W' '#{pane_current_path}')#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" tmux_conf_theme_window_status_current_format="#[fg=$color_accent,bg=default]#[fg=$color_bg,bg=$color_accent,bold]#I: #(bash /Users/jsarthak/dotfiles/tmux/tmux-window-name.sh '#W' '#{pane_current_path}')#{?#{||:#{window_bell_flag},#{window_zoomed_flag}}, ,}#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}#[fg=$color_accent,bg=default]"
tmux_conf_theme_window_status_current_fg="$window_status_current_fg" tmux_conf_theme_window_status_current_fg="$window_status_current_fg"
tmux_conf_theme_window_status_current_bg="$window_status_current_bg" tmux_conf_theme_window_status_current_bg="$window_status_current_bg"
@@ -256,19 +249,18 @@ tmux_conf_theme_right_separator_sub=""
# - #{username} # - #{username}
# - #{username_ssh} # - #{username_ssh}
tmux_conf_theme_status_left=" #[fg=$color_teal,bg=default,bold]❐ #S #[fg=$color_gray,bg=default,none]" tmux_conf_theme_status_left=" ❐ #S #[fg=$color_accent,bg=default,none]"
tmux_conf_theme_status_right=" #{prefix}#{mouse}#{pairing}#{synchronized} |#[fg=default,bg=default] #[fg=$color_secondary,bg=default,none]#[fg=$color_fg,bg=$color_secondary,none]󰔚 #{?uptime_d,#{uptime_d}d,}#{?uptime_h,#{uptime_h}h,}#{?uptime_m,#{uptime_m}m,}#[fg=$color_secondary,bg=default,none] |#[fg=default,bg=default] #[fg=$color_purple,bg=default,none]#[fg=$color_bg,bg=$color_purple,bold]󰊪 #{username}#{root}@#{hostname}#[fg=$color_purple,bg=default,none] "
# status left style # status left style
tmux_conf_theme_status_left_fg="default" tmux_conf_theme_status_left_fg="$color_bg"
tmux_conf_theme_status_left_bg="default" tmux_conf_theme_status_left_bg="$color_accent"
tmux_conf_theme_status_left_attr="none" tmux_conf_theme_status_left_attr="bold"
tmux_conf_theme_status_right=" #{prefix}#{mouse}#{pairing}#{synchronized}#{@mode_indicator} | #[fg=$color_fg,bg=default,none]󰔚 #{?uptime_d,#{uptime_d}d,}#{?uptime_h,#{uptime_h}h,}#{?uptime_m,#{uptime_m}m,} #[fg=$color_gray]│ #[fg=$color_cyan,bg=default,bold]󱑒 %d %b %H:%M #[fg=$color_gray]│ #[fg=$color_purple,bg=default,bold]󰊪 #{username}#{root}@#{hostname}"
# status right style # status right style
tmux_conf_theme_status_right_fg="$color_red,$color_fg" tmux_conf_theme_status_right_fg="$color_red,$color_fg,$color_bg"
tmux_conf_theme_status_right_bg="default,default" tmux_conf_theme_status_right_bg="default,$color_secondary,$color_purple"
tmux_conf_theme_status_right_attr="bold,none" tmux_conf_theme_status_right_attr="bold,none,bold"
# pairing indicator # pairing indicator
tmux_conf_theme_pairing="⚇" # U+2687 tmux_conf_theme_pairing="⚇" # U+2687
@@ -360,41 +352,38 @@ tmux_conf_urlscan_options="--compact --dedupe"
# -- user customizations ------------------------------------------------------- # -- user customizations -------------------------------------------------------
# Source modular configurations # this is the place to override or undo settings
source-file "$HOME/dotfiles/tmux/config/settings.conf" set-option -g detach-on-destroy off
source-file "$HOME/dotfiles/tmux/config/keybindings.conf"
setw -g window-status-separator " #[fg=#484848]• " #!important # increase history size
set -g history-limit 99999999
set status-bg default
# ── Auto-name sessions (emoji + codename) ───────────────────────────────────── # start with mouse mode enabled
# Fires on every new session. Skips sessions the user explicitly named. set -g mouse on
# Script lives in ~/dotfiles/scripts/tmux-session-name.sh
# set-hook -g session-created \
# 'run-shell "bash $HOME/dotfiles/scripts/tmux-session-name.sh \"#{session_name}\" \"#{session_id}\""'
# ── Mode indicator (always-on, Neovim-style) ────────────────────────────────── # Allow tmux to understand and pass through color queries
# NORMAL = working in tmux (default, always visible) set -as terminal-overrides ",xterm*:Tc"
# VISUAL = in copy-mode (prefix + Enter) set -as terminal-overrides ",xterm*:RGB"
#
# #{@mode_indicator} is a window user-option set via pane-mode-changed hook.
# We use -F flag so #{pane_in_mode} is evaluated as a tmux format (1=in mode).
# This bypasses oh-my-tmux's awk pipeline which mangles inline #{?...} conditionals.
# Set NORMAL as the default on startup # force Vi mode
set-window-option -g @mode_indicator "#[fg=#25be6a,bold] NORMAL " # really you should export VISUAL or EDITOR environment variable, see manual
set -g status-keys vi
set -g mode-keys vi
# Switch between NORMAL and VISUAL whenever the pane mode changes # replace C-b by C-a instead of using both prefixes
set-hook -g pane-mode-changed \ set -gu prefix2
'if-shell -F "#{pane_in_mode}" \ unbind C-a
"set-window-option -g @mode_indicator \"#[fg=#78a9ff,bold] VISUAL \"" \ unbind C-b
"set-window-option -g @mode_indicator \"#[fg=#25be6a,bold] NORMAL \""' set -g prefix C-a
bind C-a send-prefix
# ── Per-machine local override (untracked) ──────────────────────────────────── unbind -T copy-mode-vi MouseDragEnd1Pane
# Create ~/.tmux.conf.machine.local on each machine for host-specific tweaks # if you don't want Oh my tmux! to alter a binding, use #!important
# (e.g. different color scheme, right-side content, etc.) # bind c new-window -c '#{pane_current_path}' #!important
if-shell 'test -f ~/.tmux.conf.machine.local' \
'source-file ~/.tmux.conf.machine.local'
# move status line to top
set -g status-position bottom
# -- tpm ----------------------------------------------------------------------- # -- tpm -----------------------------------------------------------------------
@@ -438,6 +427,28 @@ set -g @plugin 'tmux-plugins/tmux-resurrect'
#set -g @continuum-restore 'on' #set -g @continuum-restore 'on'
set -g @plugin 'tmux-plugins/tmux-logging' set -g @plugin 'tmux-plugins/tmux-logging'
# switch windows alt+number
bind-key -n M-1 select-window -t 1
bind-key -n M-2 select-window -t 2
bind-key -n M-3 select-window -t 3
bind-key -n M-4 select-window -t 4
bind-key -n M-5 select-window -t 5
bind-key -n M-6 select-window -t 6
bind-key -n M-7 select-window -t 7
bind-key -n M-8 select-window -t 8
bind-key -n M-9 select-window -t 9
# Toggle popup window with Ctrl+
bind-key -n -N 'Toggle popup window' M-p if-shell -F '#{==:#{session_name},popup}' {
detach-client
} {
display-popup -d "#{pane_current_path}" -xC -yC -w 70% -h 65% -E 'tmux attach-session -t popup || tmux new-session -s popup'
}
bind-key -n M-f "tmux-sessionizer\n"
# Set alignment
set -g status-justify left
# set -g status-style fg=default,bg=default
# set mode-style "fg=black,bg=default"
# -- custom variables ---------------------------------------------------------- # -- custom variables ----------------------------------------------------------
# to define a custom #{foo} variable, define a POSIX shell function between the # to define a custom #{foo} variable, define a POSIX shell function between the
-67
View File
@@ -1,67 +0,0 @@
# ==============================================================================
# TMUX KEYBINDINGS
# ==============================================================================
# Prefix key override: change from C-b to C-a
set -gu prefix2
unbind C-a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Fast window switching with Alt + Number
bind-key -n M-1 select-window -t 1
bind-key -n M-2 select-window -t 2
bind-key -n M-3 select-window -t 3
bind-key -n M-4 select-window -t 4
bind-key -n M-5 select-window -t 5
bind-key -n M-6 select-window -t 6
bind-key -n M-7 select-window -t 7
bind-key -n M-8 select-window -t 8
bind-key -n M-9 select-window -t 9
# Toggle centered popup scratch terminal with Alt + p
bind-key -n -N 'Toggle popup window' M-p if-shell -F '#{==:#{session_name},popup}' {
detach-client
} {
display-popup -d "#{pane_current_path}" -xC -yC -w 70% -h 65% -E 'tmux attach-session -t popup || tmux new-session -s popup'
}
# Run tmux-sessionizer with Alt + f
bind-key -n M-f send-keys "tmux-sessionizer\n"
# Sleek centered FZF popup search overlays (requires fzf)
# Alt-s: Fuzzy search and switch sessions in popup
bind-key -n M-s display-popup -w 65% -h 50% -E "tmux list-sessions | fzf --reverse --header='Jump to Session' | cut -d: -f1 | xargs tmux switch-client -t"
# Alt-w: Fuzzy search and switch windows in popup
bind-key -n M-w display-popup -w 75% -h 60% -E "tmux list-windows -a -F '#{session_name}:#{window_index} - #{window_name}' | fzf --reverse --header='Jump to Window' | cut -d' ' -f1 | xargs tmux select-window -t"
# ==============================================================================
# COPY MODE (VI MODE) & INSTANT STATUS REDRAW
# ==============================================================================
# Force immediate status redraw when entering copy mode
bind-key [ copy-mode \; refresh-client -S
# vi-copy navigation and selection bindings with instant status bar update
bind-key -T copy-mode-vi v send-keys -X begin-selection \; refresh-client -S
bind-key -T copy-mode-vi V send-keys -X select-line \; refresh-client -S
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; refresh-client -S
bind-key -T copy-mode-vi q send-keys -X cancel \; refresh-client -S
bind-key -T copy-mode-vi Escape send-keys -X cancel \; refresh-client -S
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel \; refresh-client -S
# Mouse Drag Selection: copy to clipboard and redraw instantly without leaving copy-mode
unbind -T copy-mode-vi MouseDragEnd1Pane
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-selection-and-cancel \; refresh-client -S
# ==============================================================================
# PANE NAVIGATION & RESIZING OVERRIDES (NO PREFIX)
# ==============================================================================
# Resize panes using Shift + Arrow keys
bind -n S-Left resize-pane -L 2
bind -n S-Right resize-pane -R 2
bind -n S-Up resize-pane -U 2
bind -n S-Down resize-pane -D 2
-49
View File
@@ -1,49 +0,0 @@
# ==============================================================================
# TMUX GENERAL SETTINGS
# ==============================================================================
# Detach behavior: keep tmux alive when closing the last window/pane in a session
set-option -g detach-on-destroy off
# Increase scrollback history limit
set -g history-limit 99999999
# Enable mouse mode (scrolling, selecting, pane resizing)
set -g mouse on
# Terminal colors and overrides: pass through truecolor support
set -as terminal-overrides ",xterm*:Tc"
set -as terminal-overrides ",xterm*:RGB"
set -as terminal-overrides ",alacritty:Tc"
set -as terminal-overrides ",kitty:Tc"
set -as terminal-overrides ",wezterm:Tc"
# Force VI mode for command status line and pane navigation/copy mode
set -g status-keys vi
set -g mode-keys vi
# Keep the status line positioned at the bottom
set -g status-position bottom
# Left-justify the window list and set a subtle dot separator between windows
set -g status-justify left
setw -g window-status-separator " #[fg=#484848]• "
# ==============================================================================
# PANE STYLING & BORDER STATUS LINE
# ==============================================================================
# Custom pane border colors
set -g pane-border-style "fg=#353535,bg=default"
set -g pane-active-border-style "fg=#78a9ff,bg=default"
# Disable status line on the pane borders
set -g pane-border-status off
# ==============================================================================
# POPUP WINDOW STYLING
# ==============================================================================
# Make popups transparent
set -g popup-style "bg=default"
set -g popup-border-style "fg=#353535,bg=default"
+10 -18
View File
@@ -103,26 +103,18 @@ fi
# alias zshconfig="mate ~/.zshrc" # alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh" # alias ohmyzsh="mate ~/.oh-my-zsh"
export PATH="/Users/jsarthak/flutter-sdk/flutter/bin:$PATH"
# ── Shared shell config ──────────────────────────────────────────────────────────────── source <(fzf --zsh)
[[ -f ~/.config/shell/common ]] && source ~/.config/shell/common
[[ -f ~/.config/shell/personal ]] && source ~/.config/shell/personal # Added by Antigravity
[[ -f ~/.config/shell/aliases ]] && source ~/.config/shell/aliases export PATH="/Users/jsarthak/.antigravity/antigravity/bin:$PATH"
export PATH="/Users/jsarthak/flutter-sdk/flutter/bin:$PATH"
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"
source ~/.config/shell/common
source ~/.config/shell/personal
source ~/.config/shell/aliases
MANPAGER="col -b | cat" MANPAGER="col -b | cat"
MANROFFOPT="-P-c" MANROFFOPT="-P-c"
eval "$(zoxide init zsh)" eval "$(zoxide init zsh)"
# ── Strategy 1: Dynamic Runtime Sourcing ─────────────────────────────────────────
# Detect OS and source the matching platform overlay.
# macos → shell/.config/shell/macos (Homebrew, Flutter, fzf, Antigravity)
# linux → shell/.config/shell/linux (xdg-open, xclip, fzf)
case "$(uname -s)" in
Darwin) [[ -f ~/.config/shell/macos ]] && source ~/.config/shell/macos ;;
Linux) [[ -f ~/.config/shell/linux ]] && source ~/.config/shell/linux ;;
esac
# ── Per-machine local override (untracked) ──────────────────────────────────
# Create ~/.zshrc.local on each machine for secrets / profile sourcing.
# On work machines: export DOTFILES_PROFILE=work && source ~/.config/shell/work
[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local