Compare commits

..

18 Commits

Author SHA1 Message Date
jsarthak c0bb8b5f9a Fix fzf 2026-07-18 23:10:20 +05:30
jsarthak a7246fe879 Fix tmux paths 2026-07-18 22:55:40 +05:30
jsarthak e53b81fe55 Some shell fixes 2026-07-18 22:42:08 +05:30
jsarthak dd47827e13 feat(tmux): auto-name sessions with emoji + codename
- scripts/tmux-session-name.sh: generates random emoji + adj-noun name
  40 emojis x 40 adjectives x 40 nouns = 64,000 combinations
  Only renames numerically-named sessions (skips explicit names)

- tmux.conf.local: session-created hook calls the script automatically

- shell/common: added DOTFILES=$HOME/dotfiles env var so hooks and
  scripts can find the dotfiles root without hardcoded paths

Examples: '🐉 sonic-oracle', '🌟 electric-nebula', '🔱 nova-comet'
2026-07-18 15:18:50 +05:30
jsarthak 1ec7aff593 fix(tmux): always-on Neovim-style NORMAL/VISUAL mode indicator
NORMAL = always visible when working in tmux (green)
VISUAL = switches in when entering copy-mode via prefix+Enter (blue)

Uses pane-mode-changed hook with -F flag for clean format evaluation.
Default @mode_indicator set to NORMAL on config load.
2026-07-18 14:47:18 +05:30
jsarthak 04b03d85cd fix(tmux): fix NORMAL/VISUAL mode indicators
The #{?pane_in_mode,...} inline conditional was getting mangled by
oh-my-tmux's awk/sed pipeline that processes tmux_conf_theme_status_right.

Fix: use #{@mode_indicator} user-option in status_right, driven by:
  - bind Enter  → sets NORMAL indicator (green) on copy-mode entry
  - bind v      → sets VISUAL indicator (blue) on selection start
  - bind y/Esc  → clears indicator on copy/exit
  - pane-mode-changed hook → clears indicator when mode exits

Also fixed: encoding artifacts in status_right, missing bullet separator.
2026-07-18 14:44:53 +05:30
jsarthak f96891b6ec refactor: consolidate all branches into single-branch Strategy 1
- bash/.bashrc: replace oh-my-bash with minimal unified config
  sources common → aliases → OS overlay → .bashrc.local

- zsh/.zshrc: remove hardcoded macOS PATHs (moved to macos overlay)
  clean sourcing order: common → personal → aliases → OS → .zshrc.local

- shell/common: populated with universal exports (EDITOR, HISTSIZE, etc.)
- shell/macos: Homebrew, Antigravity, Flutter PATH, fzf init, macOS aliases
- shell/linux: xdg-open, xclip, fzf init for Linux

- nvim/plugins/work.lua: Copilot plugin (migrated from origin/work branch)
- nvim/plugins/_init.lua: conditional load via DOTFILES_PROFILE=work env var

- tmux/.tmux.conf.local: per-machine override hook (~/.tmux.conf.machine.local)

- bootstrap.sh: one-command new machine setup with profile support
  usage: bash bootstrap.sh [personal|work]

- .gitignore: comprehensive .local file ignore patterns

All branches (linux, mac, work, linux_personal, linux_work, mac_personal)
can now be deleted — all unique content is merged into master.
2026-07-18 14:38:41 +05:30
jsarthak 52cd32ab95 fix starship colors 2026-07-18 14:24:51 +05:30
jsarthak de44196750 tmux configuration redesign 2026-07-18 13:56:41 +05:30
jsarthak bd0fca3af6 modify starship 2026-07-17 21:57:08 +05:30
jsarthak e29bfd1594 modify tmux 2026-07-17 21:53:02 +05:30
jsarthak 5ea0114631 fix tabs in nvim 2026-03-20 12:52:26 +05:30
jsarthak 6e2eba211f fix oh my bash path 2026-03-16 20:57:29 +05:30
jsarthak 993e375a76 Move shell config 2026-03-15 14:55:55 +05:30
jsarthak d68beb82d9 Geany config changes 2026-03-15 14:32:21 +05:30
jsarthak 58080d0aa2 Change wezterm config file path 2026-03-15 14:28:04 +05:30
jsarthak 471d2e2b71 remove copilot from master 2026-03-15 14:20:33 +05:30
jsarthak 48d7990c10 ignore lazy lock 2026-03-15 14:19:37 +05:30
15 changed files with 462 additions and 263 deletions
+13
View File
@@ -1,2 +1,15 @@
# ── Neovim lock file ──────────────────────────────────────────────────────────
*nvim/.config/nvim/lazy-lock.json*
# ── OS clutter ────────────────────────────────────────────────────────────────
.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
+26 -160
View File
@@ -7,171 +7,37 @@ case $- in
*) return;;
esac
# Path to your oh-my-bash installation.
export OSH='$HOME/.oh-my-bash'
# ── Shared shell config ────────────────────────────────────────────────────────
[[ -f ~/.config/shell/common ]] && source ~/.config/shell/common
[[ -f ~/.config/shell/aliases ]] && source ~/.config/shell/aliases
# Set name of the theme to load. Optionally, if you set this to "random"
# it'll load a random theme each time that oh-my-bash is loaded.
OSH_THEME="font"
# ── 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
# If you set OSH_THEME to "random", you can ignore themes you don't like.
# OMB_THEME_RANDOM_IGNORED=("powerbash10k" "wanelo")
# You can also specify the list from which a theme is randomly selected:
# OMB_THEME_RANDOM_CANDIDATES=("font" "powerline-light" "minimal")
# ── Bash-specific init (starship, zoxide, fzf) ────────────────────────────────
if [[ -n "$BASH_VERSION" ]]; then
# History settings
HISTCONTROL=ignoreboth
HISTSIZE=10000
HISTFILESIZE=20000
shopt -s histappend checkwinsize
# Uncomment the following line to use case-sensitive completion.
OMB_CASE_SENSITIVE="true"
# Starship prompt
command -v starship >/dev/null && eval "$(starship init bash)"
# Uncomment the following line to use hyphen-insensitive completion. Case
# sensitive completion must be off. _ and - will be interchangeable.
OMB_HYPHEN_SENSITIVE="false"
# Zoxide (smarter cd)
command -v zoxide >/dev/null && eval "$(zoxide init bash)"
# Uncomment the following line to disable bi-weekly auto-update checks.
# DISABLE_AUTO_UPDATE="true"
# Uncomment the following line to change how often to auto-update (in days).
export UPDATE_OSH_DAYS=13
# 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.
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 don't want the repository to be considered dirty
# if there are untracked files.
# SCM_GIT_DISABLE_UNTRACKED_DIRTY="true"
# Uncomment the following line if you want to completely ignore the presence
# of untracked files in the repository.
# SCM_GIT_IGNORE_UNTRACKED="true"
# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output. One of the following values can
# be used to specify the timestamp format.
# * 'mm/dd/yyyy' # mm/dd/yyyy + time
# * 'dd.mm.yyyy' # dd.mm.yyyy + time
# * 'yyyy-mm-dd' # yyyy-mm-dd + time
# * '[mm/dd/yyyy]' # [mm/dd/yyyy] + [time] with colors
# * '[dd.mm.yyyy]' # [dd.mm.yyyy] + [time] with colors
# * '[yyyy-mm-dd]' # [yyyy-mm-dd] + [time] with colors
# If not set, the default value is 'yyyy-mm-dd'.
# HIST_STAMPS='yyyy-mm-dd'
# Uncomment the following line if you do not want OMB to overwrite the existing
# aliases by the default OMB aliases defined in lib/*.sh
# OMB_DEFAULT_ALIASES="check"
# Would you like to use another custom folder than $OSH/custom?
# OSH_CUSTOM=/path/to/new-custom-folder
# To disable the uses of "sudo" by oh-my-bash, please set "false" to
# this variable. The default behavior for the empty value is "true".
OMB_USE_SUDO=true
# To enable/disable display of Python virtualenv and condaenv
# OMB_PROMPT_SHOW_PYTHON_VENV=true # enable
# OMB_PROMPT_SHOW_PYTHON_VENV=false # disable
# To enable/disable Spack environment information
# OMB_PROMPT_SHOW_SPACK_ENV=true # enable
# OMB_PROMPT_SHOW_SPACK_ENV=false # disable
# Which completions would you like to load? (completions can be found in ~/.oh-my-bash/completions/*)
# Custom completions may be added to ~/.oh-my-bash/custom/completions/
# Example format: completions=(ssh git bundler gem pip pip3)
# Add wisely, as too many completions slow down shell startup.
completions=(
git
composer
ssh
)
# Which aliases would you like to load? (aliases can be found in ~/.oh-my-bash/aliases/*)
# Custom aliases may be added to ~/.oh-my-bash/custom/aliases/
# Example format: aliases=(vagrant composer git-avh)
# Add wisely, as too many aliases slow down shell startup.
aliases=(
general
)
# Which plugins would you like to load? (plugins can be found in ~/.oh-my-bash/plugins/*)
# Custom plugins may be added to ~/.oh-my-bash/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(
git
bashmarks
starship
)
# Which plugins would you like to conditionally load? (plugins can be found in ~/.oh-my-bash/plugins/*)
# Custom plugins may be added to ~/.oh-my-bash/custom/plugins/
# Example format:
# if [ "$DISPLAY" ] || [ "$SSH" ]; then
# plugins+=(tmux-autoattach)
# fi
# If you want to reduce the initialization cost of the "tput" command to
# initialize color escape sequences, you can uncomment the following setting.
# This disables the use of the "tput" command, and the escape sequences are
# initialized to be the ANSI version:
#
#OMB_TERM_USE_TPUT=no
source "$OSH"/oh-my-bash.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='mvim'
# fi
# Compilation flags
# export ARCHFLAGS="-arch x86_64"
# ssh
# export SSH_KEY_PATH="~/.ssh/rsa_id"
# Set personal aliases, overriding those provided by oh-my-bash libs,
# plugins, and themes. Aliases can be placed here, though oh-my-bash
# users are encouraged to define aliases within the OSH_CUSTOM folder.
# For a full list of active aliases, run `alias`.
#
# Example aliases
# alias bashconfig="mate ~/.bashrc"
# alias ohmybash="mate ~/.oh-my-bash"
# test if the prompt var is not set and also to prevent failures
# when `$PS1` is unset and `set -u` is used
if [ -z "${PS1:-}" ]; then
# prompt var is not set, so this is *not* an interactive shell
return
# fzf
[[ -f ~/.fzf.bash ]] && source ~/.fzf.bash
fi
# If we reach this line of code, then the prompt var is set, so
# this is an interactive shell.
# Put all the commands here that should run only if this is an
# interactive shell.
export EDITOR='nvim'
export MANROFFOPT="-c"
# Example command:
source ~/.config/shell/common
source ~/.config/shell/personal #added by 6500gitsetup
source ~/.config/shell/aliases
# ── 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
@@ -0,0 +1,85 @@
#!/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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
-1
View File
@@ -1 +0,0 @@
.*
@@ -75,7 +75,11 @@ require("lazy").setup({
"junegunn/seoul256.vim"
},
-- NOTE: Plugins can also be added by using a table,
-- ── Work-profile plugins (Copilot) ──────────────────────────────────────
-- 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
-- keys can be used to configure plugin behavior/loading/etc.
--
@@ -0,0 +1,8 @@
-- 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
@@ -0,0 +1,54 @@
#!/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
@@ -0,0 +1,16 @@
# ── 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
@@ -0,0 +1,21 @@
# ── 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
@@ -0,0 +1,20 @@
# ── 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"
+18 -18
View File
@@ -1,7 +1,7 @@
# starship.toml - Fully riced modern prompt config aligned with Carbonfox theme
format = """
$os$username$hostname$directory$git_branch$git_state$git_status$python$nodejs$rust$golang$cmd_duration$line_break\
$os$username$hostname$directory$git_branch$git_state$git_status$cmd_duration$line_break\
$character"""
# Wait 10 milliseconds for starship to check files under the current directory.
@@ -15,7 +15,7 @@ disabled = false
style = "bold white"
[username]
style_user = "bold #be95ff" # Carbonfox purple
style_user = "bold purple" # Use terminal purple
style_root = "bold red"
format = "[$user]($style)"
disabled = false
@@ -23,13 +23,13 @@ show_always = true
[hostname]
ssh_only = false
style = "bold #33b1ff" # Carbonfox blue/cyan
style = "bold cyan" # Use terminal cyan
format = "@[$hostname]($style) "
disabled = false
[directory]
style = "bold #08bdba" # Carbonfox teal
format = "in [ $path]($style)[$read_only]($read_only_style) "
style = "bold blue" # Use terminal blue
format = "in [ $path]($style)[$read_only]($read_only_style) "
truncation_length = 3
truncation_symbol = "…/"
truncate_to_repo = true
@@ -37,19 +37,19 @@ read_only = " 󰌾"
read_only_style = "bold red"
[character]
success_symbol = "[](bold #25be6a)" # Carbonfox green
error_symbol = "[](bold #ee5396)" # Carbonfox pink/red
vimcmd_symbol = "[](bold #08bdba)" # Carbonfox teal
success_symbol = "[](bold green)" # Use terminal green
error_symbol = "[](bold red)" # Use terminal red
vimcmd_symbol = "[](bold cyan)" # Use terminal cyan
[git_branch]
symbol = "🌱 "
style = "bold #ee5396" # Carbonfox pink
format = "on [$symbol$branch]($style) "
style = "bold red" # Use terminal red
format = "on [$symbol $branch]($style) "
truncation_symbol = ""
[git_status]
style = "bold #ee5396"
format = "([$all_status$ahead_behind]($style) )"
style = "bold red"
format = "([$all_status $ahead_behind]($style) )"
conflicted = "🏳"
ahead = "🏎💨"
behind = "😰"
@@ -67,28 +67,28 @@ cherry_pick = "[🍒 PICKING](bold red)"
[python]
symbol = "🐍 "
style = "bold #3ddbd9"
style = "bold green"
format = "via [$symbol$version]($style) "
[nodejs]
symbol = " "
style = "bold #25be6a"
style = "bold green"
format = "via [$symbol$version]($style) "
[rust]
symbol = "🦀 "
style = "bold #ff9e64"
style = "bold yellow"
format = "via [$symbol$version]($style) "
[golang]
symbol = " "
style = "bold #78a9ff"
style = "bold blue"
format = "via [$symbol$version]($style) "
[cmd_duration]
min_time = 100
style = "bold #e0af68" # Carbonfox yellow/orange
format = "underwent [$duration]($style) "
style = "bold yellow"
format = "took [$duration]($style) "
[status]
style = "bg:blue"
+62 -73
View File
@@ -71,42 +71,49 @@ tmux_conf_24b_colour=auto
# - tmux_conf_theme_synchronized
tmux_conf_theme=enabled
# Carbonfox Color Palette
color_bg="#161616"
color_fg="#f2f4f8"
color_black="#282828"
color_gray="#353535"
color_light_gray="#484848"
color_red="#ee5396"
color_green="#25be6a"
color_teal="#3ddbd9"
color_blue="#78a9ff"
color_purple="#be95ff"
color_cyan="#33b1ff"
color_white="#dfdfe0"
# Classic Monokai Color Palette
color_bg="#272822"
color_fg="#f8f8f2"
color_black="#1e1f1c"
color_gray="#3e3d32"
color_light_gray="#75715e"
color_red="#f92672"
color_green="#a6e22e" # Monokai Green (Session & Normal)
color_teal="#a6e22e" # Monokai Green
color_blue="#66d9ef" # Monokai Cyan/Blue
color_purple="#ae81ff" # Monokai Purple (Host & Visual)
color_cyan="#66d9ef" # Monokai Cyan (Active Window)
color_yellow="#e6db74" # Monokai Yellow (Date/Time)
color_white="#f8f8f2"
color_accent="$color_blue"
color_accent="$color_cyan" # Active window is Monokai Cyan
color_primary="default"
color_secondary="$color_gray"
color_fg_primary="$color_fg"
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_fg="$color_accent"
theme_mode_bg="$color_accent"
theme_mode_fg="$color_bg"
tmux_conf_theme_window_fg="$color_fg_primary"
tmux_conf_theme_window_fg="#a5afc2"
# window style
tmux_conf_theme_window_bg="default"
# highlight focused pane, possible values are:
# - true
# - false (default)
tmux_conf_theme_highlight_focused_pane=false
tmux_conf_theme_highlight_focused_pane=true
# focused pane colours:
tmux_conf_theme_focused_pane_fg="#f2f4f8"
tmux_conf_theme_focused_pane_bg="default"
# pane border style, possible values are:
@@ -174,7 +181,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="#{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="#[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]"
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,🔍,}"
# window current status style
# - built-in variables are:
@@ -189,7 +196,7 @@ tmux_conf_theme_window_status_format="#[fg=$color_gray,bg=default]#[fg=$color
# 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="#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]#[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_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_fg="$window_status_current_fg"
tmux_conf_theme_window_status_current_bg="$window_status_current_bg"
@@ -249,18 +256,19 @@ tmux_conf_theme_right_separator_sub=""
# - #{username}
# - #{username_ssh}
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] "
tmux_conf_theme_status_left=" #[fg=$color_teal,bg=default,bold]❐ #S #[fg=$color_gray,bg=default,none]"
# status left style
tmux_conf_theme_status_left_fg="$color_bg"
tmux_conf_theme_status_left_bg="$color_accent"
tmux_conf_theme_status_left_attr="bold"
tmux_conf_theme_status_left_fg="default"
tmux_conf_theme_status_left_bg="default"
tmux_conf_theme_status_left_attr="none"
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
tmux_conf_theme_status_right_fg="$color_red,$color_fg,$color_bg"
tmux_conf_theme_status_right_bg="default,$color_secondary,$color_purple"
tmux_conf_theme_status_right_attr="bold,none,bold"
tmux_conf_theme_status_right_fg="$color_red,$color_fg"
tmux_conf_theme_status_right_bg="default,default"
tmux_conf_theme_status_right_attr="bold,none"
# pairing indicator
tmux_conf_theme_pairing="⚇" # U+2687
@@ -352,38 +360,41 @@ tmux_conf_urlscan_options="--compact --dedupe"
# -- user customizations -------------------------------------------------------
# this is the place to override or undo settings
set-option -g detach-on-destroy off
# Source modular configurations
source-file "$HOME/dotfiles/tmux/config/settings.conf"
source-file "$HOME/dotfiles/tmux/config/keybindings.conf"
# increase history size
set -g history-limit 99999999
set status-bg default
setw -g window-status-separator " #[fg=#484848]• " #!important
# start with mouse mode enabled
set -g mouse on
# ── Auto-name sessions (emoji + codename) ─────────────────────────────────────
# Fires on every new session. Skips sessions the user explicitly named.
# 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}\""'
# Allow tmux to understand and pass through color queries
set -as terminal-overrides ",xterm*:Tc"
set -as terminal-overrides ",xterm*:RGB"
# ── Mode indicator (always-on, Neovim-style) ──────────────────────────────────
# NORMAL = working in tmux (default, always visible)
# VISUAL = in copy-mode (prefix + Enter)
#
# #{@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.
# force Vi mode
# really you should export VISUAL or EDITOR environment variable, see manual
set -g status-keys vi
set -g mode-keys vi
# Set NORMAL as the default on startup
set-window-option -g @mode_indicator "#[fg=#25be6a,bold] NORMAL "
# replace C-b by C-a instead of using both prefixes
set -gu prefix2
unbind C-a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# Switch between NORMAL and VISUAL whenever the pane mode changes
set-hook -g pane-mode-changed \
'if-shell -F "#{pane_in_mode}" \
"set-window-option -g @mode_indicator \"#[fg=#78a9ff,bold] VISUAL \"" \
"set-window-option -g @mode_indicator \"#[fg=#25be6a,bold] NORMAL \""'
unbind -T copy-mode-vi MouseDragEnd1Pane
# if you don't want Oh my tmux! to alter a binding, use #!important
# bind c new-window -c '#{pane_current_path}' #!important
# ── Per-machine local override (untracked) ────────────────────────────────────
# Create ~/.tmux.conf.machine.local on each machine for host-specific tweaks
# (e.g. different color scheme, right-side content, etc.)
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 -----------------------------------------------------------------------
@@ -427,28 +438,6 @@ set -g @plugin 'tmux-plugins/tmux-resurrect'
#set -g @continuum-restore 'on'
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 ----------------------------------------------------------
# to define a custom #{foo} variable, define a POSIX shell function between the
+67
View File
@@ -0,0 +1,67 @@
# ==============================================================================
# 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
@@ -0,0 +1,49 @@
# ==============================================================================
# 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"
+18 -10
View File
@@ -103,18 +103,26 @@ fi
# alias zshconfig="mate ~/.zshrc"
# alias ohmyzsh="mate ~/.oh-my-zsh"
export PATH="/Users/jsarthak/flutter-sdk/flutter/bin:$PATH"
source <(fzf --zsh)
# Added by Antigravity
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
# ── Shared shell config ────────────────────────────────────────────────────────────────
[[ -f ~/.config/shell/common ]] && source ~/.config/shell/common
[[ -f ~/.config/shell/personal ]] && source ~/.config/shell/personal
[[ -f ~/.config/shell/aliases ]] && source ~/.config/shell/aliases
MANPAGER="col -b | cat"
MANROFFOPT="-P-c"
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