Personal development environment for Linux and macOS. Based on SeongwoongCho/dotfiles with custom extensions for ML/DL workflows.
# HTTPS, not SSH: this repo is public, so a brand new machine can clone it
# before it has any credentials.
git clone https://github.com/GitGyun/dotfiles.git ~/.dotfiles
cd ~/.dotfiles
sudo bash src/install.sh # core profile (default)
sudo bash src/install.sh full # everything
sudo bash src/install.sh standard # without AI tools
sudo bash src/install.sh minimal # zsh + nvim + git onlysudo is required for the apt steps; per-user tooling is dropped back to the
invoking user automatically.
Partway through, the installer offers to run gh auth login (choose SSH as
the git protocol). That is the only manual step: it registers this machine with
GitHub so the same run can clone the private secrets repo and lay down your git
identity, SSH config, tokens and Google Drive remote. Declining is fine — fetch
them later with bash src/install-secrets.sh. Set DOTFILES_SKIP_GH_AUTH=1 to
never prompt.
On the very first machine only, set up the Drive remote afterwards:
bash src/setup-rclone-drive.shdotup # git pull + relink + plugin updates
dotup-full # + system packages# First time: create a private repo at github.com/GitGyun/dotfiles-secret
dotsecret # push local secrets to private repoManaged secrets: ~/.gitconfig.secret, ~/.ssh/config, ~/.netrc, HuggingFace token,
W&B settings, rclone config.
Repo layout and destinations are defined by SECRET_MAP in src/install-secrets.sh.
rclone is installed by every profile, and the secrets repo carries a ready
rclone.conf, so mydrive: works on a new machine with no interaction.
The one-time setup, needed only on the first machine or after the OAuth token is revoked:
bash src/setup-rclone-drive.sh # prompts for the GCP OAuth client
bash src/setup-rclone-drive.sh --status # report only
# headless machine: authorize on one that has a browser, then
rclone authorize "drive" "<client id>" "<client secret>"
bash src/setup-rclone-drive.sh --token '<the JSON it printed>'It stores the GCP client id/secret in ~/.config/rclone/gcp-oauth.env and
offers to push both files to the secrets repo when done.
| Profile | What's Included |
|---|---|
| core | apt-only Linux bootstrap: zsh + tmux + prebuilt neovim + modern CLI tools + AI CLIs (subset of nvim plugins) |
| minimal | zsh + oh-my-zsh + zinit + starship + neovim + git + secrets |
| standard | minimal + tmux + LSP servers + plugins |
| full | standard + Claude Code + oh-my-claudecode + LSP plugins |
~/.dotfiles/
zsh/
zshrc -> ~/.zshrc
zsh.d/
10-functions.zsh -> ~/.zsh.d/ (utility functions)
20-aliases.zsh (common aliases)
30-git.zsh (git aliases/functions)
zshenv -> ~/.zshenv (unset TMOUT)
nvim/ -> ~/.config/nvim/
tmux/
tmux.conf -> ~/.tmux.conf
statusbar.tmux -> ~/.tmux/statusbar.tmux
git/
gitconfig -> ~/.gitconfig
config/
starship.toml -> ~/.config/starship.toml
versions.sh (package version management)
src/
install.sh (main installer)
install-prerequisite.sh (system packages)
install-secrets.sh (private repo sync)
install-omz.sh (oh-my-zsh)
update.sh (updater)
assets/
LS_COLORS, Xmodmap, mrtazz_custom.zsh-theme
Cross-shell prompt configured in config/starship.toml:
- Username (always shown, green)
- Directory (cyan, 5-level truncation)
- Git branch (red)
- Conda environment (yellow)
CUDA_VISIBLE_DEVICES(purple, shown when set)- Command duration (> 5s)
- Hostname (SSH only)
| Plugin | Loading | Description |
|---|---|---|
| alias-tips | sync | Shows alias hints when you type a full command |
| fzf-tab | sync | Replaces Tab completion with fzf interface |
| zsh-autosuggestions | async | Fish-like command suggestions |
| zsh-syntax-highlighting | async | Syntax highlighting for commands |
| Tool | Replaces | Usage |
|---|---|---|
| zoxide | cd |
z <keyword>, zi (interactive) |
| eza | ls |
ls, aliased globally |
| bat | cat |
bat, aliased as batcat |
| fzf + fd | find |
Fuzzy file finding, fuzzyvim to open in nvim |
| duf | df |
df, aliased globally |
- Auto-reload: zshrc/zsh.d changes are detected and reloaded automatically at each prompt
- Conda env preservation:
source ~/.zshrcpreserves your active conda environment - Timezone: Asia/Seoul
- TMOUT: Disabled via zshenv (prevents SSH session timeout)
| Alias | Command |
|---|---|
vim |
nvim |
tmux |
tmux -u (UTF-8 mode) |
| Alias | Description |
|---|---|
ug <ids> |
Set CUDA_VISIBLE_DEVICES (e.g., ug 0,1) |
autoug [n] |
Auto-assign GPU per tmux pane ($G shorthand set) |
gpu |
Watch gpustat |
gpusmi |
Watch nvidia-smi |
cudav |
Show CUDA version |
autoug assigns GPUs based on tmux pane index:
# 8 panes, 8 GPUs -> each pane runs autoug
autoug # pane1->GPU0, pane2->GPU1, ... pane8->GPU7
autoug 2 # pane1->0,1 pane2->2,3 (2 GPUs per pane)
# Use $G as shorthand
python main.py --shard_id $GWorks with prefix + y (synchronize-panes) -- each pane gets its own GPU.
| Command | Description |
|---|---|
split4 |
Split into 4 panes (2x2 grid, equal size) |
split8 |
Split into 8 panes (2x4 grid, equal size) |
# 8 GPU workflow: split + auto-assign
split8
# prefix + y (sync on)
autoug
# prefix + y (sync off)| Alias | Description |
|---|---|
pylist |
List python processes |
| Alias | Command |
|---|---|
ga |
git add |
gst |
git status |
gd |
git diff |
gcm |
git commit -m |
gps / gpl |
git push / git pull |
gclone <user> <repo> |
Clone from GitHub |
gra <user> <repo> |
Add remote origin |
gitsetup --name <n> --email <e> |
Configure git user |
| Alias/Function | Description |
|---|---|
du |
du -hd 1 |
gdown <id> <name> |
Download from Google Drive |
howmany <dir> "<pattern>" |
Count files matching pattern |
pyclean |
Remove __pycache__ files |
up <path> |
Set PYTHONPATH (clear with up) |
fix-dns |
Fix slow DNS with dnsmasq split DNS |
dothelp |
Show all aliases, functions, keybindings |
| Alias | Description |
|---|---|
dotup |
Update dotfiles (git + plugins) |
dotup-full |
Full update (+ system packages) |
dotsecret |
Save secrets to private repo |
dotcd |
cd to ~/.dotfiles |
Lazy.nvim plugin manager with full LSP and modern editing.
Sonokai (andromeda style, italic keywords) -- configured in nvim/lua/plugins/sonokai.lua.
| Plugin | Purpose |
|---|---|
| telescope | Fuzzy finder (Ctrl+P files, Ctrl+O grep) |
| nvim-cmp | Autocompletion (LSP + snippets) |
| treesitter | Syntax highlighting |
| mason + mason-lspconfig | LSP auto-installer (clangd, pylsp, jedi, lua_ls, bashls) |
| conform.nvim | Format on save (black, shfmt, clang-format, stylua) |
| gitsigns | Git diff in gutter + inline blame |
| nvim-tree | File explorer (" to toggle) |
| barbar | Buffer tabs (bubblegum theme) |
| auto-session | Automatic session save/restore |
| snacks.nvim | Dashboard, indent guides, notifications |
| yanky | Yank history (<leader>p) |
| markview | Markdown preview |
| Key | Action |
|---|---|
,s |
Save file |
,R |
Reload config |
@ |
Clear search highlight |
Ctrl+P |
Find files (Telescope) |
Ctrl+O |
Live grep (Telescope) |
[b / ]b |
Previous/Next buffer |
,d |
Go to definition |
,g |
Go back |
,b / ,v |
Insert ipdb breakpoint above/below |
,p |
Yank history |
" |
Toggle file explorer |
F2 |
LSP rename |
F4 |
Code action |
F8 |
Toggle paste mode |
F9 |
Toggle line numbers + indent guides |
y / yy |
Yank to system clipboard (OSC52) |
Prefix: Ctrl+A
Real-time CPU, RAM, and GPU usage with color gradients:
- CPU (red shades): idle to 80%+ heat
- RAM (orange shades): low to 90%+ warning
- GPU (green shades): idle to 90%+ full load
- Date/time on the right
| Key | Action |
|---|---|
v |
Vertical split |
s |
Horizontal split |
h/j/k/l |
Navigate panes |
Ctrl+h/j/k/l |
Navigate (vim-aware) |
c |
New window |
0-9 |
Select window |
e |
Toggle sync mode (with color change) |
r |
Reload config |
> / < |
Resize pane width |
+ / - |
Resize pane height |
Esc / Enter |
Enter copy mode |
A |
Rename window |
| Plugin | Key | Description |
|---|---|---|
| tmux-resurrect | Session save/restore across reboots | |
| tmux-continuum | Auto-save sessions | |
| extrakto | prefix+Tab |
Extract text from pane |
| tmux-thumbs | prefix+F |
Vimium-style text copy from screen |
| tmux-fzf | prefix+Ctrl+F |
fzf search for sessions/windows/panes |
| tmux-sessionx | prefix+o |
Session manager (create/switch/delete) |
| prefix-highlight | Shows when prefix is active |
Side-by-side diffs with forest-night theme (gruvbox-dark syntax). Enabled globally via gitconfig.
| Alias | Command |
|---|---|
co |
checkout |
cob |
checkout -b |
undo |
reset --soft HEAD^ |
cm |
commit -m |
Credentials stored in ~/.gitconfig.secret (included via [include]), managed by dotsecret command.
| Feature | Linux | macOS |
|---|---|---|
| Package install | apt + cargo + scripts | Homebrew |
| Xmodmap | Symlinked | Skipped |
| DNS fix | dnsmasq split DNS | Skipped |
| locale-gen | Runs | Skipped |
| Nerd Fonts | Manual install | brew install font-fira-code-nerd-font |
| tmux statusbar | CPU/RAM/GPU | CPU/RAM (no nvidia-smi) |
Run dothelp in your terminal for a categorized reference of all aliases, functions, keybindings, and plugins.
dothelp # show everything
dothelp alias # aliases only
dothelp func # functions only
dothelp key # keybindings only
dothelp accel # GPU commands
dothelp vim # neovim keys
dothelp tmux # tmux keys
dothelp plugin # plugin list