Personal dotfiles managed with chezmoi . Supports Ubuntu and Rocky Linux 9.
bootstrap.sh [OPTIONS] ← single entry point
│
├─ chezmoi apply (deploy configs to ~)
│
├─ scripts/install.sh (base packages, dev tools, Claude Code)
│ ├─ --kb: scripts/install_kb.sh (gcloud, obsidian-cli, qmd, gws)
│ └─ --local-llm: scripts/install_local_llm.sh (ollama, llama.cpp, vLLM, gemma4)
│
├─ --auth → scripts/auth.sh (GitHub, Google, HuggingFace OAuth)
│
├─ --setup → scripts/setup.sh (git config, env vars → ~/.config/personal/env)
│
└─ --data → scripts/setup_data_repos.sh (clone /data knowledge repos)
Fresh machine (full setup) git clone https://github.com/hgryoo/dotfiles ~ /dotfiles
cd ~ /dotfiles
cp secrets.env.template secrets.env
$EDITOR secrets.env # fill in API keys
bash bootstrap.sh --all # chezmoi + install + auth + setup + kb + llm Fresh machine (base only) git clone https://github.com/hgryoo/dotfiles ~ /dotfiles
bash ~ /dotfiles/bootstrap.sh Packages only (skip chezmoi) bash bootstrap.sh --install-only # base only
bash bootstrap.sh --install-only --kb # base + knowledge base
bash bootstrap.sh --install-only --local-llm # base + local LLM
bash bootstrap.sh --install-only --kb --local-llm # base + kb + llm Flag What it does (none) chezmoi apply + base install --setup+ interactive git config, env vars → ~/.config/personal/env --auth+ service OAuth (GitHub, Google, HuggingFace) --kb+ knowledge base tools (gcloud, obsidian-cli, qmd, gws) --local-llm+ local LLM (ollama, llama.cpp, vLLM, gemma4) --alleverything above --install-onlyskip chezmoi, run install.sh only
Script Purpose scripts/install.shBase packages, dev tools, AI CLI scripts/install_kb.shKnowledge base tools: gcloud, obsidian-cli, qmd, gws scripts/install_local_llm.shLocal LLM: Ollama, llama.cpp, vLLM, Gemma 4 scripts/auth.shInteractive OAuth login for services scripts/setup.shOne-time personalization: git config, env vars, summary scripts/setup_data_repos.shClone Claude knowledge repos into /data (cubrid_cv, cub_sys, hgryoo, references) scripts/sync_knowledge.shrsync ~/obsidian/ ↔ ~/knowledge/ (pull/push)
Source file Deployed to dot_bashrc.tmpl~/.bashrcdot_bash_aliases~/.bash_aliasesdot_bash_exports~/.bash_exportsdot_gitconfig.tmpl~/.gitconfigdot_vimrc~/.vimrcdot_config/nvim/init.lua~/.config/nvim/init.luadot_config/direnv/~/.config/direnv/dot_config/htop/htoprc~/.config/htop/htoprcdot_config/Code/User/settings.json~/.config/Code/User/settings.jsondot_claude/settings.json~/.claude/settings.jsondot_claude/karpathy-skills.md~/.claude/karpathy-skills.md
Base (scripts/install.sh) Tool Method Base build tools (gcc, cmake, ninja, bison) apt / dnf + source CUBRID build deps (GCC 10, Java, systemtap) PPA / toolset uv curl installer Rust / rustup curl installer oh-my-bash curl installer Neovim PPA / dnf direnv apt / dnf fzf apt / dnf just curl installer gh (GitHub CLI) apt repo / dnf repo rtk curl installer markitdown uv tool installlazydiff cargo installlazygit GitHub release binary Claude Code curl installer oh-my-claudecode (omc) npm
CUBRID tools (cubrid/tools/, git submodules) Tool Method Ollama curl installer llama.cpp build from source (CUDA auto-detected) vLLM uv venv at ~/.local/share/vllm-env Gemma 4 (4b) ollama pull gemma4:4b
Knowledge Base Architecture External sources (Google Drive, JIRA)
↓
~/knowledge/ ← local snapshot, Claude Code reference
↕ scripts/sync_knowledge.sh pull/push
~/obsidian/ ← Obsidian vault (source of truth + Claude-generated docs)
bash scripts/sync_knowledge.sh pull # ~/obsidian/ → ~/knowledge/
bash scripts/sync_knowledge.sh push # ~/knowledge/ → ~/obsidian/
qmd embed # regenerate search embeddings
qmd query " your question" # semantic search across knowledge base # Edit a dotfile and preview the diff
chezmoi edit ~ /.bashrc
chezmoi diff
# Apply changes
chezmoi apply
# Pull upstream changes and apply
git -C ~ /dotfiles pull --ff-only
chezmoi init --source=~ /dotfiles --applySwitch between CUBRID builds without restarting your shell:
use-cubrid # default: ~/cubrid/install.out
use-cubrid /path/to/other/build # custom path A direnv template for per-directory automatic activation is at ~/.config/direnv/templates/envrc-cubrid.
secrets.env is git-ignored. Use secrets.env.template as the starting point:
cp secrets.env.template secrets.env
$EDITOR secrets.env Keys managed: ANTHROPIC_API_KEY, GITHUB_TOKEN, HUGGINGFACE_TOKEN,
JIRA_URL/USERNAME/PASSWORD, GOOGLE_CLIENT_ID/SECRET.