Personal development environment configuration using Neovim, Zsh, Tmux, and AI tools.
git clone git@github.com:SeongwoongCho/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
bash src/install.sh [profile]
gitsetup --name "Your Name" --email "your@email.com"| Profile | Description | Use Case |
|---|---|---|
minimal |
zsh + nvim + git | Basic dev environment |
standard |
+ tmux + LSP + plugins | Full local dev |
full |
+ Claude Code + all LSPs | Default - Complete environment |
# Examples
bash src/install.sh minimal # Lightweight setup
bash src/install.sh standard # Without AI tools
bash src/install.sh # Full (default)docker build \
--build-arg USER_ID=$(id -u) \
--build-arg USER_NAME=$(id -un) \
-t ${IMAGE_NAME} .
bash run_docker.sh ${IMAGE_NAME} ${CONTAINER_NAME}~/.dotfiles/
├── nvim/ # Neovim configuration (Lazy.nvim)
│ ├── init.lua # Entry point
│ └── lua/
│ ├── config/ # Core settings (keymaps, options)
│ └── plugins/ # Plugin configurations
├── zsh/
│ ├── zshrc # Main shell config
│ └── zsh.d/ # Modular shell scripts
│ ├── 10-functions.zsh # Utility functions
│ ├── 20-aliases.zsh # Common aliases
│ └── 30-git.zsh # Git shortcuts
├── tmux/
│ ├── tmux.conf # Tmux configuration
│ └── statusbar.tmux # Dynamic status bar
├── git/
│ └── gitconfig # Git settings
├── ssh/
│ └── config # SSH configuration
├── assets/ # Themes, colors, keymaps
├── config/ # Version management
│ ├── versions.sh # Default versions + auto-detection
│ └── versions.d/ # Environment-specific overrides
│ ├── ubuntu-20.04.sh
│ ├── ubuntu-22.04.sh
│ ├── ubuntu-24.04.sh
│ └── local.sh # Local overrides (gitignored)
└── src/ # Installation scripts
├── install.sh # Main installer (profile-based)
├── install-prerequisite.sh # Dependencies
├── install-secrets.sh # Secrets fetch/save (private repo)
├── install-omz.sh # Oh-My-Zsh
├── update.sh # Update without rebuilding
└── cleanse.sh # Cleanup script
- Shell: Zsh with Oh-My-Zsh + zplug
- Multiplexer: Tmux with TPM (prefix:
Ctrl-A) - Theme: mrtazz_custom + Oceanic Next
- Auto-reload: Changes to zshrc, themes, and zsh.d modules are automatically detected and applied
alias-tips- Reminds you of aliaseszsh-syntax-highlighting- Command highlightingzsh-autosuggestions- Fish-like suggestionsfzf+fd- Fuzzy findingzoxide- Smarter cd command
| Original | Replacement | Description |
|---|---|---|
ls |
eza |
Modern ls with colors and icons |
cd |
z (zoxide) |
Smart directory jumping |
cat |
batcat |
Syntax highlighting |
df |
duf |
Disk usage with better UI |
du |
dust |
Disk usage tree view |
grep |
rg (ripgrep) |
Faster grep |
find |
fd |
Faster find |
git diff |
delta |
Side-by-side diffs with syntax highlighting |
| - | jq |
JSON processor |
| - | gh |
GitHub CLI |
| - | glab |
GitLab CLI |
| - | ast-grep |
AST-based code search/replace |
| - | shfmt |
Shell script formatter |
| - | bun |
Fast JavaScript runtime |
Git uses delta as the pager for beautiful side-by-side diffs with the forest-night theme.
Gitconfig aliases:
| Alias | Command |
|---|---|
co |
checkout |
cob |
checkout -b |
undo |
reset --soft HEAD^ |
cm |
commit -m |
Shell aliases:
| Alias | Command | Description |
|---|---|---|
ga |
git add |
Stage files |
gst |
git status |
Show status |
gd |
git diff |
Show diff |
gcm |
git commit -m |
Commit with message |
gcmd |
git commit -m "." |
Quick dot commit |
gcl |
git clone |
Clone repo |
gps |
git push |
Push |
gpl |
git pull |
Pull |
guname |
git config --file ~/.gitconfig.secret user.name |
Get/set git user name |
guemail |
git config --file ~/.gitconfig.secret user.email |
Get/set git user email |
Git functions:
| Function | Description |
|---|---|
gitsetup --name <name> --email <email> |
Configure git user name and email |
gclone <user> <repo> |
Clone from GitHub (git@github.com:user/repo.git) |
gra <user> <repo> |
Add GitHub remote origin |
vimconflicts |
Open all git conflict files in nvim |
LSP Support:
- C/C++: clangd
- Python: pylsp + jedi_language_server
- Lua: lua_ls
- Auto-install via Mason
Key Plugins:
telescope.nvim- Fuzzy findernvim-cmp- Autocompletiontreesitter- Syntax highlightinggitsigns- Git integrationcodeium- AI completion
- Claude Code with oh-my-claudecode + superpowers plugins
- OpenAI Codex CLI for code generation
- LSP plugins for multiple languages (TypeScript, Python, Go, Rust, C/C++, etc.)
Sensitive config files (tokens, credentials) are stored in a separate private repository and automatically fetched during installation.
# Fetch secrets (runs automatically during install/update)
bash src/install-secrets.sh
# Save current secrets to private repo
bash src/install-secrets.sh --saveSecret file mapping is defined in src/install-secrets.sh (SECRET_MAP). To add a new secret, append an entry in the format "path_in_repo:destination:permissions".
| Secret | Destination | Description |
|---|---|---|
config/glab-cli/config.yml |
~/.config/glab-cli/config.yml |
GitLab CLI auth token |
git/gitconfig.secret |
~/.gitconfig.secret |
Git user name/email |
Setup: Create a private repo (e.g., dotfiles-secret) and set DOTFILES_SECRETS_REPO env var if using a non-default URL.
Docker containers often have slow DNS resolution. This is automatically fixed during installation, but you can also run it manually:
fix-dns # Diagnose and fix DNS latency
fix-dns --check # Diagnose only (no changes)
fix-dns --force # Fix without confirmationomc update # Update OMC (CLAUDE.md, plugin, HUD)
claude # Launch Claude CodeSet visible devices for hardware accelerators. Selected devices are displayed in the shell prompt.
| Command | Environment Variable | Prompt Display |
|---|---|---|
ug <ids> / usegpu |
CUDA_VISIBLE_DEVICES |
cuda:0,1 |
uh <ids> / usehpu |
HABANA_VISIBLE_DEVICES |
habana:0 |
um <ids> / usemaccel |
MACCEL_VISIBLE_DEVICES |
maccel:0,1 |
ug 0,1 # Use NVIDIA GPU 0 and 1
uh 0 # Use Intel Gaudi HPU 0
um 0 # Use Mobilint NPU 0
ug # Clear selection (use all)Real-time monitoring aliases for accelerators. NPU usage is also displayed in tmux statusbar when npustat is available.
| Alias | Command | Description |
|---|---|---|
gpu |
watch gpustat --color |
NVIDIA GPU monitoring |
gpusmi |
watch nvidia-smi |
nvidia-smi output |
npu |
watch npustat --color |
Mobilint NPU monitoring |
hpusmi |
watch hl-smi |
Intel Gaudi HPU monitoring |
Note: npustat is a custom tool (similar to gpustat) installed from ~/.dotfiles/npustat.
Set PYTHONPATH easily. The path is displayed in the shell prompt when set.
| Command | Environment Variable | Prompt Display |
|---|---|---|
up <path> |
PYTHONPATH |
pypath:~/project |
up . # Set PYTHONPATH to current directory
up /path/to # Set PYTHONPATH to specified path
up # Clear PYTHONPATHView dotfiles commands, aliases, keybindings, and plugins at a glance.
dothelp # Show all categories
dothelp alias # Aliases only
dothelp func # Functions only
dothelp key # All keybindings
dothelp vim # Neovim keys only
dothelp tmux # Tmux keys only
dothelp accel # Accelerator commands
dothelp plugin # Installed plugins| Alias | Description |
|---|---|
jn |
jupyter notebook |
jna |
jupyter notebook --ip 0.0.0.0 |
jl |
jupyter lab |
jla |
jupyter lab --ip 0.0.0.0 --allow-root |
jnlist |
List running Jupyter notebooks |
tblist |
List running TensorBoard processes |
pylist |
List running Python processes |
| Alias | Description |
|---|---|
cudav |
Show CUDA version (nvcc --version) |
cudnnv |
Show cuDNN version |
cmo / cmakeauto |
CMake preset for Mobilint Aries2 |
cmo_r / cmakeauto_r |
CMake preset for Mobilint Regulus |
| Function | Description |
|---|---|
pyclean |
Remove Python cache files |
howmany <dir> "*.ext" |
Count files matching pattern |
fuzzyvim |
Open file with fzf + vim |
buo <files> |
Backup files before overwriting |
colorprint <file> / cpr |
Display file with ANSI color rendering |
myrsync <port> <args> |
rsync with custom SSH port |
- Leader:
,(comma) - Local Leader:
.(period)
| Key | Action |
|---|---|
,R |
Reload config |
,s |
Save file |
@ |
Clear search highlight |
<C-p> |
Find files |
<C-o> |
Live grep |
<F8> |
Toggle paste mode |
<F9> |
Toggle line numbers |
| Key | Action |
|---|---|
[b / ]b |
Previous/Next buffer |
,g |
Go back (after goto-definition) |
<C-h/j/k/l> |
Navigate splits (vim-tmux) |
| Key | Action |
|---|---|
y / yy |
Yank to system clipboard |
,b |
Insert ipdb breakpoint above |
,v |
Insert ipdb breakpoint below |
< / > (visual) |
Indent and keep selection |
| Key | Action |
|---|---|
v |
Vertical split (side by side) |
s |
Horizontal split (top/bottom) |
hjkl |
Navigate panes |
c |
New window |
0-9 |
Select window by number |
q |
Display pane numbers |
r |
Reload config |
e |
Toggle sync mode (all panes) |
>/< |
Resize pane width |
+/- |
Resize pane height |
Esc/Enter |
Enter copy mode |
Create files in zsh/zsh.d/ with numeric prefix:
10-19: Functions20-29: Aliases30-39: Git
Update dotfiles when remote repository changes, without rebuilding Docker image.
| Command | Description |
|---|---|
dotup |
Fast update (git pull + relink + secrets + plugins) |
dotup-full |
Full update (includes system packages) |
dotsecret |
Save secrets to private repo |
dotup --versions |
Show current version configuration |
dotcd |
Navigate to dotfiles directory |
omc update |
Update Oh-My-ClaudeCode components |
dotup # Daily use - quick sync
├── git pull
├── Relink symlinks (zshrc, gitconfig, nvim, tmux...)
├── Fetch secrets from private repo
├── Detect version config changes → warn if --packages needed
├── Sync Neovim plugins (Lazy)
├── Update Tmux plugins (TPM)
└── Update Zplug plugins
dotup-full # When packages changed
├── (all above)
└── Reinstall system packages with version management# Regular update
dotup
# Full update including system packages
dotup-full # alias for update.sh --full
dotup --packages # equivalent
# Check versions before updating
dotup --versions
# Override specific version
VERSION_NEOVIM=v0.9.5 dotup-full
# Apply changes to current shell
source ~/.zshrc # or: exec zshPackage versions are managed per-environment to ensure compatibility.
config/versions.sh # Default versions
↓
config/versions.d/ubuntu-22.04.sh # OS-specific override
↓
config/versions.d/local.sh # Machine-specific (gitignored)
↓
Environment variable # Highest priority
| Category | Packages | Install Method |
|---|---|---|
| Core | Neovim, Lua, Luarocks, Node.js | Built from source / NodeSource |
| Rust/Cargo | tree-sitter-cli, git-delta, eza, du-dust, ast-grep | cargo install |
| Python (uv) | pynvim, gpustat, npustat, pre-commit, black, isort, jedi_language_server, python-lsp-server | uv tool install |
| Scripts | zoxide, shfmt, bun, uv | Installer scripts |
| Image | kitty, magick (luarocks) | Custom installers |
| WakeMeOps | glab | APT repo (WakeMeOps) |
| Mobilint | mobilint-cli, mobilint-qb-runtime | APT repo / uv |
Note: apt packages use Ubuntu defaults (tested for that release). Rust is installed via rustup if not present.
# Create override for new Ubuntu version
cat > config/versions.d/ubuntu-26.04.sh << 'EOF'
#!/bin/bash
export VERSION_NEOVIM="v0.12.0"
EOF# Machine-specific settings (not tracked by git)
cat > config/versions.d/local.sh << 'EOF'
#!/bin/bash
export VERSION_NEOVIM="v0.9.5" # Use older version on this machine
EOF-
Claude Code slow in Docker: DNS resolution delay. Run
fix-dnsor check manually:# Diagnose curl -w "DNS: %{time_namelookup}s\n" -o /dev/null -s https://api.anthropic.com # Fix (if DNS > 1s) fix-dns --force
-
Special characters missing: Install Nerd Font (D2Coding Mono Hack)
-
LSP not working: Restart Neovim for Mason to install servers
-
Codeium permission error:
chown -R $(whoami):$(whoami) ~/.cache/nvim/codeium chmod -R 755 ~/.cache/nvim/codeium
bash src/cleanse.sh # Remove all dotfiles symlinksMIT