Compare commits

...

13 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
16 changed files with 630 additions and 314 deletions
+13
View File
@@ -1,2 +1,15 @@
# ── 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
+26 -160
View File
@@ -7,171 +7,37 @@ case $- in
*) return;; *) return;;
esac esac
# Path to your oh-my-bash installation. # ── Shared shell config ────────────────────────────────────────────────────────
export OSH='/home/jsarthak/.oh-my-bash' [[ -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" # ── OS detection — source the right platform overlay ──────────────────────────
# it'll load a random theme each time that oh-my-bash is loaded. case "$(uname -s)" in
OSH_THEME="font" 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. # ── Bash-specific init (starship, zoxide, fzf) ────────────────────────────────
# OMB_THEME_RANDOM_IGNORED=("powerbash10k" "wanelo") if [[ -n "$BASH_VERSION" ]]; then
# You can also specify the list from which a theme is randomly selected: # History settings
# OMB_THEME_RANDOM_CANDIDATES=("font" "powerline-light" "minimal") HISTCONTROL=ignoreboth
HISTSIZE=10000
HISTFILESIZE=20000
shopt -s histappend checkwinsize
# Uncomment the following line to use case-sensitive completion. # Starship prompt
OMB_CASE_SENSITIVE="true" command -v starship >/dev/null && eval "$(starship init bash)"
# Uncomment the following line to use hyphen-insensitive completion. Case # Zoxide (smarter cd)
# sensitive completion must be off. _ and - will be interchangeable. command -v zoxide >/dev/null && eval "$(zoxide init bash)"
OMB_HYPHEN_SENSITIVE="false"
# Uncomment the following line to disable bi-weekly auto-update checks. # fzf
# DISABLE_AUTO_UPDATE="true" [[ -f ~/.fzf.bash ]] && source ~/.fzf.bash
# 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
fi fi
# If we reach this line of code, then the prompt var is set, so export EDITOR='nvim'
# this is an interactive shell. export MANROFFOPT="-c"
# Put all the commands here that should run only if this is an
# interactive shell.
# Example command: # ── Per-machine local override (untracked) ────────────────────────────────────
source ~/.config/shell/common # Create ~/.bashrc.local on each machine for secrets / host-specific tweaks.
source ~/.config/shell/personal #added by 6500gitsetup [[ -f ~/.bashrc.local ]] && source ~/.bashrc.local
source ~/.config/shell/aliases
+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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
+9 -1
View File
@@ -3,7 +3,15 @@ local options = {
base46 = { base46 = {
theme = "tokyodark", -- default theme theme = "tokyodark", -- default theme
hl_add = {}, hl_add = {},
hl_override = {}, hl_override = {
TbBufOn = {
bold = true,
fg = "green",
},
St_FileName = {
bold = true,
},
},
integrations = {}, integrations = {},
changed_themes = {}, changed_themes = {},
transparency = true, transparency = true,
@@ -75,7 +75,11 @@ require("lazy").setup({
"junegunn/seoul256.vim" "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 -- 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.
-- --
@@ -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"
+78 -58
View File
@@ -1,5 +1,7 @@
# starship.toml - Fully riced modern prompt config aligned with Carbonfox theme
format = """ format = """
$username$hostname$directory$git_branch$git_state$git_status$cmd_duration$line_break\ $os$username$hostname$directory$git_branch$git_state$git_status$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.
@@ -8,75 +10,93 @@ scan_timeout = 10
# Disable the blank line at the start of the prompt # Disable the blank line at the start of the prompt
add_newline = true add_newline = true
# # Define custom colors
# [palettes.foo]
# # Overwrite existing color
# blue = '21'
# # Define new color
# mustard = '#af8700'
[directory]
style = "purple"
truncation_length = 3
format = ': [$path]($style)[$read_only]($read_only_style) '
truncation_symbol = ".../"
truncate_to_repo =true
[character]
success_symbol = '[](bold green)'
# success_symbol = '[➜](bold green)'
error_symbol = '[✗](bold purple) '
vimcmd_symbol = "[](green)"
[git_branch]
symbol = '🌱 '
# truncation_length = 4
truncation_symbol = ''
format = '[$symbol$branch]($style) '
[git_status]
conflicted = '🏳'
ahead = '🏎💨'
behind = '😰'
diverged = '😵'
up_to_date = '✓'
untracked = '🤷'
stashed = '📦'
modified = '📝'
staged = '[++\($count\)](green)'
renamed = '👅'
deleted = '🗑'
[git_state]
format = '[\($state( $progress_current of $progress_total)\)]($style) '
cherry_pick = '[🍒 PICKING](bold red)'
[cmd_duration]
min_time = 100
format = 'underwent [$duration](bold yellow)'
[os] [os]
disabled = false disabled = false
style = "bold white"
[username] [username]
style_user = 'white bold' style_user = "bold purple" # Use terminal purple
style_root = 'black bold' style_root = "bold red"
format = '[$user]($style) ' format = "[$user]($style)"
disabled = false disabled = false
show_always = true show_always = true
[hostname] [hostname]
ssh_only = false ssh_only = false
format = '@(bold blue) [$hostname](bold red) ' style = "bold cyan" # Use terminal cyan
trim_at = '.ciena.com' format = "@[$hostname]($style) "
disabled = false disabled = false
[directory]
style = "bold blue" # Use terminal blue
format = "in [ $path]($style)[$read_only]($read_only_style) "
truncation_length = 3
truncation_symbol = "…/"
truncate_to_repo = true
read_only = " 󰌾"
read_only_style = "bold red"
[character]
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 red" # Use terminal red
format = "on [$symbol $branch]($style) "
truncation_symbol = ""
[git_status]
style = "bold red"
format = "([$all_status $ahead_behind]($style) )"
conflicted = "🏳"
ahead = "🏎💨"
behind = "😰"
diverged = "😵"
untracked = "🤷"
stashed = "📦"
modified = "📝"
staged = '[++\($count\)](green)'
renamed = "👅"
deleted = "🗑"
[git_state]
format = "([$state( $progress_current of $progress_total)]($style) )"
cherry_pick = "[🍒 PICKING](bold red)"
[python]
symbol = "🐍 "
style = "bold green"
format = "via [$symbol$version]($style) "
[nodejs]
symbol = " "
style = "bold green"
format = "via [$symbol$version]($style) "
[rust]
symbol = "🦀 "
style = "bold yellow"
format = "via [$symbol$version]($style) "
[golang]
symbol = " "
style = "bold blue"
format = "via [$symbol$version]($style) "
[cmd_duration]
min_time = 100
style = "bold yellow"
format = "took [$duration]($style) "
[status] [status]
style = 'bg:blue' style = "bg:blue"
symbol = '🔴 ' symbol = "🔴 "
success_symbol = '🟢 SUCCESS' success_symbol = "🟢 SUCCESS"
format = '[\[$symbol$common_meaning$signal_name$maybe_int\]]($style) ' format = '[[\[$symbol$common_meaning$signal_name$maybe_int\]]($style) ]'
map_symbol = true map_symbol = true
disabled = false disabled = true
[conda] [conda]
format = "[$symbol$environment]($style) " format = "[$symbol$environment]($style) "
+75 -84
View File
@@ -71,40 +71,49 @@ tmux_conf_24b_colour=auto
# - tmux_conf_theme_synchronized # - tmux_conf_theme_synchronized
tmux_conf_theme=enabled tmux_conf_theme=enabled
color_yellow="yellow" # Classic Monokai Color Palette
color_reg="red" color_bg="#272822"
color_green="green" color_fg="#f8f8f2"
color_teal="teal" color_black="#1e1f1c"
color_white="white" color_gray="#3e3d32"
color_pink="pink" color_light_gray="#75715e"
color_black="black" color_red="#f92672"
color_blue="blue" color_green="#a6e22e" # Monokai Green (Session & Normal)
color_mauve="#FFE3E3" color_teal="#a6e22e" # Monokai Green
color_offwhite="#F9F9F2" color_blue="#66d9ef" # Monokai Cyan/Blue
color_grey="grey" 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="blue" color_accent="$color_cyan" # Active window is Monokai Cyan
color_primary="default" color_primary="default"
color_secondary="$color_grey" color_secondary="$color_gray"
color_fg_primary="default" color_fg_primary="$color_fg"
color_fg_secondary="$color_offwhite" 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_fg_primary" theme_mode_fg="$color_bg"
tmux_conf_theme_window_fg="$color_fg_primary" tmux_conf_theme_window_fg="#a5afc2"
# 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=false tmux_conf_theme_highlight_focused_pane=true
# 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:
@@ -172,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="#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=" #I:#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,🔍,}"
# window current status style # window current status style
# - built-in variables are: # - built-in variables are:
@@ -187,7 +196,7 @@ tmux_conf_theme_window_status_format=" #I:#W #{?#{||:#{window_bell_flag},#{windo
# 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="#I:#[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_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"
@@ -210,9 +219,9 @@ tmux_conf_theme_window_status_last_attr="bold"
# status left/right sections separators # status left/right sections separators
tmux_conf_theme_left_separator_main="" tmux_conf_theme_left_separator_main=""
tmux_conf_theme_left_separator_sub="|" tmux_conf_theme_left_separator_sub=""
tmux_conf_theme_right_separator_main="" tmux_conf_theme_right_separator_main=""
tmux_conf_theme_right_separator_sub="\u2022" tmux_conf_theme_right_separator_sub=""
# tmux_conf_theme_left_separator_main='\uE0B0' # /!\ you don't need to install Powerline # tmux_conf_theme_left_separator_main='\uE0B0' # /!\ you don't need to install Powerline
# tmux_conf_theme_left_separator_sub='\uE0B1' # yku only need fonts patched with # tmux_conf_theme_left_separator_sub='\uE0B1' # yku only need fonts patched with
# tmux_conf_theme_right_separator_main='\uE0B2' # Powerline symbols or the standalone # tmux_conf_theme_right_separator_main='\uE0B2' # Powerline symbols or the standalone
@@ -247,18 +256,19 @@ tmux_conf_theme_right_separator_sub="\u2022"
# - #{username} # - #{username}
# - #{username_ssh} # - #{username_ssh}
tmux_conf_theme_status_left=" [#S]" tmux_conf_theme_status_left=" #[fg=$color_teal,bg=default,bold]❐ #S #[fg=$color_gray,bg=default,none]│"
tmux_conf_theme_status_right=" #{prefix}#{mouse}#{pairing}#{synchronized} |\u2022 #{username}#{root} |\u2022 #{hostname} |\u2022 ↑ #{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} "
# status left style # status left style
tmux_conf_theme_status_left_fg="$color_black,$color_fg_primary,$color_fg_primary" tmux_conf_theme_status_left_fg="default"
tmux_conf_theme_status_left_bg="$color_primary,$color_primary,$color_primary" tmux_conf_theme_status_left_bg="default"
tmux_conf_theme_status_left_attr="bold,none,none" 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 # status right style
tmux_conf_theme_status_right_fg="$color_fg_primary,$color_fg_primary,$color_fg_primary,$color_fg_primary" tmux_conf_theme_status_right_fg="$color_red,$color_fg"
tmux_conf_theme_status_right_bg="$color_primary,$color_primary,$color_primary,$color_primary" tmux_conf_theme_status_right_bg="default,default"
tmux_conf_theme_status_right_attr="bold,none,bold,none" tmux_conf_theme_status_right_attr="bold,none"
# pairing indicator # pairing indicator
tmux_conf_theme_pairing="⚇" # U+2687 tmux_conf_theme_pairing="⚇" # U+2687
@@ -267,14 +277,14 @@ tmux_conf_theme_pairing_bg="none"
tmux_conf_theme_pairing_attr="none" tmux_conf_theme_pairing_attr="none"
# prefix indicator # prefix indicator
tmux_conf_theme_prefix="⌨" # U+2328 tmux_conf_theme_prefix="󰘳 "
tmux_conf_theme_prefix_fg="none" tmux_conf_theme_prefix_fg="$color_red"
tmux_conf_theme_prefix_bg="none" tmux_conf_theme_prefix_bg="none"
tmux_conf_theme_prefix_attr="none" tmux_conf_theme_prefix_attr="bold"
# mouse indicator # mouse indicator
tmux_conf_theme_mouse="↗" # U+2197 tmux_conf_theme_mouse="󰍽 "
tmux_conf_theme_mouse_fg="none" tmux_conf_theme_mouse_fg="$color_teal"
tmux_conf_theme_mouse_bg="none" tmux_conf_theme_mouse_bg="none"
tmux_conf_theme_mouse_attr="none" tmux_conf_theme_mouse_attr="none"
@@ -285,8 +295,8 @@ tmux_conf_theme_root_bg="none"
tmux_conf_theme_root_attr="bold,blink" tmux_conf_theme_root_attr="bold,blink"
# synchronized indicator # synchronized indicator
tmux_conf_theme_synchronized="⚏" # U+268F tmux_conf_theme_synchronized="󰓦 "
tmux_conf_theme_synchronized_fg="none" tmux_conf_theme_synchronized_fg="$color_green"
tmux_conf_theme_synchronized_bg="none" tmux_conf_theme_synchronized_bg="none"
tmux_conf_theme_synchronized_attr="none" tmux_conf_theme_synchronized_attr="none"
@@ -350,38 +360,41 @@ tmux_conf_urlscan_options="--compact --dedupe"
# -- user customizations ------------------------------------------------------- # -- user customizations -------------------------------------------------------
# this is the place to override or undo settings # Source modular configurations
set-option -g detach-on-destroy off source-file "$HOME/dotfiles/tmux/config/settings.conf"
source-file "$HOME/dotfiles/tmux/config/keybindings.conf"
# increase history size setw -g window-status-separator " #[fg=#484848]• " #!important
set -g history-limit 99999999
set status-bg default
# start with mouse mode enabled # ── Auto-name sessions (emoji + codename) ─────────────────────────────────────
set -g mouse on # 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 # ── Mode indicator (always-on, Neovim-style) ──────────────────────────────────
set -as terminal-overrides ",xterm*:Tc" # NORMAL = working in tmux (default, always visible)
set -as terminal-overrides ",xterm*:RGB" # 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 # Set NORMAL as the default on startup
# really you should export VISUAL or EDITOR environment variable, see manual set-window-option -g @mode_indicator "#[fg=#25be6a,bold] NORMAL "
set -g status-keys vi
set -g mode-keys vi
# replace C-b by C-a instead of using both prefixes # Switch between NORMAL and VISUAL whenever the pane mode changes
set -gu prefix2 set-hook -g pane-mode-changed \
unbind C-a 'if-shell -F "#{pane_in_mode}" \
unbind C-b "set-window-option -g @mode_indicator \"#[fg=#78a9ff,bold] VISUAL \"" \
set -g prefix C-a "set-window-option -g @mode_indicator \"#[fg=#25be6a,bold] NORMAL \""'
bind C-a send-prefix
unbind -T copy-mode-vi MouseDragEnd1Pane # ── Per-machine local override (untracked) ────────────────────────────────────
# if you don't want Oh my tmux! to alter a binding, use #!important # Create ~/.tmux.conf.machine.local on each machine for host-specific tweaks
# bind c new-window -c '#{pane_current_path}' #!important # (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 ----------------------------------------------------------------------- # -- tpm -----------------------------------------------------------------------
@@ -425,28 +438,6 @@ 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
@@ -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"
+86
View File
@@ -0,0 +1,86 @@
#!/bin/bash
# tmux-window-name.sh - Auto emoji/icon plugin replacement for tmux window titles
# Zero dependencies, fast shell-based script mapping commands to Nerd Font glyphs.
cmd="$1"
path="$2"
# Get basename of the directory
base_dir=$(basename "$path")
if [ "$base_dir" = "$USER" ]; then
base_dir="~"
fi
icon=""
name="$cmd"
case "$cmd" in
zsh|bash|sh|fish|ksh)
icon=""
name="$base_dir"
;;
nvim|vim|vi)
icon=""
name="nvim ($base_dir)"
;;
emacs)
icon=""
name="emacs ($base_dir)"
;;
git|lazygit|gh)
icon=""
name="${cmd} ($base_dir)"
;;
node|npm|yarn|pnpm|bun)
icon=""
name="${cmd} ($base_dir)"
;;
python|python3|pip|ipython)
icon=""
;;
docker|docker-compose|lazydocker)
icon=""
name="${cmd} ($base_dir)"
;;
cargo|rustc|rustup)
icon=""
name="${cmd} ($base_dir)"
;;
go)
icon=""
;;
htop|top|btop)
icon="󰓅"
;;
curl|wget)
icon="󰖟"
;;
man)
icon="󰈦"
;;
less|more)
icon="📄"
;;
make|cmake|just)
icon="🛠️"
;;
ssh|scp|sftp|mosh-client|mosh)
icon="🔑"
;;
sudo)
icon="🔒"
;;
terraform|tofu)
icon="󱁢"
name="${cmd} ($base_dir)"
;;
grep|rg|find|fd)
icon="🔍"
;;
sleep)
icon="💤"
;;
esac
# Output the formatted name
echo "$icon $name"
+18 -10
View File
@@ -103,18 +103,26 @@ 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"
source <(fzf --zsh) # ── Shared shell config ────────────────────────────────────────────────────────────────
[[ -f ~/.config/shell/common ]] && source ~/.config/shell/common
# Added by Antigravity [[ -f ~/.config/shell/personal ]] && source ~/.config/shell/personal
export PATH="/Users/jsarthak/.antigravity/antigravity/bin:$PATH" [[ -f ~/.config/shell/aliases ]] && source ~/.config/shell/aliases
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