Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

399 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dotfiles

Personal development environment for Linux and macOS. Based on SeongwoongCho/dotfiles with custom extensions for ML/DL workflows.


Quick Start

# 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 only

sudo 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.sh

Existing Environment Update

dotup                            # git pull + relink + plugin updates
dotup-full                       # + system packages

Secrets Management

# First time: create a private repo at github.com/GitGyun/dotfiles-secret
dotsecret                        # push local secrets to private repo

Managed 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.

Google Drive (rclone)

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.


Installation Profiles

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

Architecture

~/.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

Shell (Zsh)

Prompt: Starship

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 Manager: Zinit

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

Key Tools

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

Features

  • Auto-reload: zshrc/zsh.d changes are detected and reloaded automatically at each prompt
  • Conda env preservation: source ~/.zshrc preserves your active conda environment
  • Timezone: Asia/Seoul
  • TMOUT: Disabled via zshenv (prevents SSH session timeout)

Aliases

Editor & Terminal

Alias Command
vim nvim
tmux tmux -u (UTF-8 mode)

GPU Management

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 $G

Works with prefix + y (synchronize-panes) -- each pane gets its own GPU.

Tmux Pane Splitting

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)

Monitoring

Alias Description
pylist List python processes

Git

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

Utilities

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

Dotfiles Management

Alias Description
dotup Update dotfiles (git + plugins)
dotup-full Full update (+ system packages)
dotsecret Save secrets to private repo
dotcd cd to ~/.dotfiles

Neovim

Lazy.nvim plugin manager with full LSP and modern editing.

Colorscheme

Sonokai (andromeda style, italic keywords) -- configured in nvim/lua/plugins/sonokai.lua.

Plugins

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

Keybindings (Leader: ,)

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)

Tmux

Prefix: Ctrl+A

Dynamic Statusbar

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 Bindings

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

Plugins (TPM)

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

Git

Delta (diff pager)

Side-by-side diffs with forest-night theme (gruvbox-dark syntax). Enabled globally via gitconfig.

Aliases

Alias Command
co checkout
cob checkout -b
undo reset --soft HEAD^
cm commit -m

Secrets

Credentials stored in ~/.gitconfig.secret (included via [include]), managed by dotsecret command.


Cross-Platform Support

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)

Quick Reference

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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages