Skip to content
klee1611Public

About

A streamlined and customizable setup for personal developing environment. Including personal Neovim setup with Lua-based configurations, plugin management, and shell productivity enhancements for an efficient development environment.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

Β 

History

84 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Dotfiles πŸ› οΈ

CI Tests PRs Welcome

Personal dotfiles for macOS β€” automated setup for Neovim, Zsh, and Tmux using dotbot.

πŸ“– Docs: https://klee1611.github.io/dotfiles/

πŸ“ Structure

dotfiles/
β”œβ”€β”€ _scripts/
β”‚   β”œβ”€β”€ init.sh          # Install Homebrew packages, Go, Python, Node
β”‚   β”œβ”€β”€ zsh_init.sh      # Install oh-my-zsh and plugins
β”‚   └── nvim_cleanup.sh  # Remove corrupted Neovim caches
β”œβ”€β”€ nvim/                # Neovim configuration (Lua)
β”‚   β”œβ”€β”€ init.lua
β”‚   └── lua/
β”‚       β”œβ”€β”€ core/        # options, keymaps
β”‚       └── plugins/     # one file per plugin
β”œβ”€β”€ tmux/
β”‚   β”œβ”€β”€ tmux.conf        # Base config (gpakosz/.tmux)
β”‚   └── tmux.conf.local  # Local overrides
β”œβ”€β”€ zsh/
β”‚   β”œβ”€β”€ aliases          # Shell aliases
β”‚   β”œβ”€β”€ zsh_functions    # Shell functions
β”‚   β”œβ”€β”€ load_secrets     # Keychain secret helpers (secret-set, secret-run, …)
β”‚   └── secrets.list     # Names of secrets stored in Keychain
β”œβ”€β”€ website/             # Documentation site (VitePress)
β”œβ”€β”€ dotbot/              # Dotbot submodule
β”œβ”€β”€ install.conf.yaml    # Symlink manifest
└── install.sh           # Entry point

πŸš€ Installation

Prerequisites

  • macOS
  • Homebrew

Steps

git clone https://github.com/klee1611/dotfiles.git
cd dotfiles
./install.sh

This will:

  1. Install Homebrew packages (git, nvim, nvm, pyenv, pnpm, asdf, curl, wget, ripgrep, pipx, uv)
  2. Install gvm and Go 1.25.7 (binary install) as the default
  3. Install Python 3.10.0 via pyenv as the global version
  4. Set up oh-my-zsh with plugins
  5. Symlink all config files via dotbot

Then restart your shell:

source ~/.zshrc

Symlinks created

Symlink Source
~/.zshrc zshrc
~/.config/zsh/ zsh/*
~/.config/nvim/ nvim/*
~/.tmux.conf tmux/tmux.conf
~/.tmux.conf.local tmux/tmux.conf.local

βš™οΈ Zsh

Shell framework: oh-my-zsh
Plugins: zsh-completions, zsh-syntax-highlighting, zsh-autosuggestions, git, autojump, asdf

Startup optimizations:

  • HOMEBREW_PREFIX detected via path check β€” no brew --prefix subprocess
  • NVM default node version prepended to PATH directly from $NVM_DIR/alias/default β€” node is available to all processes (including nvim plugins) without sourcing nvm.sh
  • nvm command lazy-loads full NVM shell integration on first use
  • pyenv shims prepended to PATH directly β€” no eval "$(pyenv init --path)" subprocess
  • GVM lazy-loaded on first use of gvm or go

Editor: vi, vim, $EDITOR, $VISUAL all point to nvim

πŸ” Secrets Management

Static API tokens live in macOS Keychain and are handed to one command at a time. Nothing is exported into your shell, nothing is written to files, and values are never passed as command arguments.

zsh/secrets.list (committed) lists only the names you expect to have stored.

Prefer a login over a stored key

Where a CLI has a login flow, use it β€” there is no long-lived secret to store or leak:

Service Login
Claude Code / Avante claude login
AWS aws configure sso once, then aws sso login (short-lived credentials)
Google Cloud gcloud auth login and gcloud auth application-default login

Only tokens with no login flow (e.g. KAGGLE_API_TOKEN) belong in secrets.list.

Setup

secret-set KAGGLE_API_TOKEN       # prompts for the value (hidden, with confirmation)

Use

secret-run KAGGLE_API_TOKEN -- python train.py

Only that command (and what it starts) sees the token. Each read shows a macOS Keychain dialog asking for your login password β€” choose Allow, not Always Allow (that re-trusts security and makes reads silent again). Only approve a dialog right after running something that needs a secret.

Commands

Command Description
secret-set VAR Store or replace a secret (prompts; never pass the value inline)
secret-run VAR... -- cmd Run one command with those secrets in its environment
secret-get VAR Print a secret's value
secret-del VAR Remove a secret from Keychain
secret-list Show which tracked secrets are stored (never reads values)

To add a token, append its name to zsh/secrets.list and run secret-set once.

πŸ–₯️ Tmux

Based on gpakosz/.tmux. Customizations in tmux/tmux.conf.local:

Keybinding Action
Ctrl+b / Ctrl+a Prefix (either works)
prefix h j k l Move between panes
prefix - / | Split top-bottom / side-by-side
prefix n / p Next / previous window (p restored from the base config's paste)
prefix P Choose a buffer to paste

Mouse support and vi copy mode are enabled. Selection is copied to the system clipboard via pbcopy.

πŸ“ Neovim

Plugin manager: lazy.nvim
Leader key: ,

Key mappings

Key Action
F2 Toggle file explorer (nvim-tree)
F3 Toggle code outline (aerial)
,f Refresh file explorer
,n Find current file in explorer
,ff File browser (Telescope)
,fg Live grep (Telescope)
,fb Buffers (Telescope)
,fh Help tags (Telescope)
,t Open terminal in split
Ctrl+↑ / ↓ Increase / decrease split height
Ctrl+← / β†’ Increase / decrease split width
tc / tn / tp / tk New / next / previous / close tab
t1–t9, t0 Jump to tab 1–10

Plugins

Plugin Purpose
lazy.nvim Plugin manager
mason.nvim LSP/DAP/formatter/linter installer
nvim-lspconfig LSP server configs (basedpyright, gopls, lua_ls, …)
nvim-cmp Completion engine
nvim-treesitter Syntax highlighting
conform.nvim Formatting (prettier, stylua, ruff)
nvim-lint Linting (ruff, mypy, eslint_d)
nvim-dap Debugger
telescope.nvim Fuzzy finder
nvim-tree File explorer
aerial.nvim Code outline
diffview.nvim Git diff viewer
copilot.lua + copilot-cmp GitHub Copilot in completion
avante.nvim AI sidebar; drives Claude Code over ACP

AI: Claude Code via Avante

nvim/lua/plugins/ai.lua points avante.nvim at the local Claude Code CLI over ACP (Agent Client Protocol), so the sidebar runs the same agent as the claude terminal β€” same tools, same session history, same claude login credentials. No ANTHROPIC_API_KEY required.

Prerequisite (once):

npm install -g @agentclientprotocol/claude-agent-acp
claude login   # if you have not already
Key Action
,aa Ask β€” open the sidebar and prompt Claude Code
,an New conversation
,at Toggle the sidebar
,af Focus the sidebar
,az Zen mode (full-screen, CLI-like)
,ae Edit the visual selection in place
,aS Stop the running agent
,ar Refresh the sidebar
,ac Add the current buffer as context
,aB Add all open buffers as context
,ah Browse conversation history
,aM Pick the Claude Code model
,am Pick the permission mode (default, acceptEdits, plan, auto, bypassPermissions)
,aC Toggle selection hints
,as Toggle inline suggestions
,ad Toggle debug output
,aR Toggle the repo map

Inside the sidebar:

Key Action
<CR> / Ctrl+s Submit (normal / insert mode)
Tab / Shift+Tab Switch between input and response windows
Shift+Tab Expand a tool-use block
A / a Apply all diffs / apply diff at cursor
r / e Retry / edit your last request
@ / d Add / remove a context file
x Toggle the code window
q Close the sidebar

Reviewing the diffs Claude produces:

Key Action
]x / [x Next / previous conflict
co / ct Keep ours / theirs
ca / cb / cc Keep all theirs / both / the block at the cursor

:AvanteSwitchProvider claude falls back to the plain Anthropic HTTP API (needs ANTHROPIC_API_KEY β€” run secret-set ANTHROPIC_API_KEY and paste it at the prompt; Avante reads it from Keychain on demand); :AvanteSwitchProvider claude-code returns to ACP.

First launch

nvim  # lazy.nvim installs all plugins automatically

Then install LSP servers, formatters, and linters:

:Mason

Troubleshooting

Mason fails to install gopls:

go version          # should show go1.25.7
go install golang.org/x/tools/gopls@latest

Treesitter parser errors:

./_scripts/nvim_cleanup.sh
nvim  # reinstalls parsers on next launch

πŸ“œ License

MIT

β˜• Support This Project

If you find this project helpful, consider supporting its development:

"Buy Me A Coffee"

Or visit: https://www.buymeacoffee.com/klee1611

Happy coding! πŸš€

About

A streamlined and customizable setup for personal developing environment. Including personal Neovim setup with Lua-based configurations, plugin management, and shell productivity enhancements for an efficient development environment.

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages