Make development environment for every machines
Currently, I use chezmoi as the management tool.
# TODO: eventually we don't these "manual" steps
brew install chezmoi age
uv tool install ansible-core # Installs all ansible executables
ansible-galaxy collection install community.general # For homebrew module
chezmoi init git@github.com:daviddwlee84/dotfiles.git
- Nix
- GNU Stow
- oh-my-zsh
- NeoVim + LazyVim
- LazyGit, ...?
- Tmux / Zellij
- alacritty.toml
- environment variables for API keys (encrypt)
- improve ~/.zshrc that check command first (if/exists guard)
- "tags" for different profile
- Compare different alternatives
- separate different function in different shell script (and source them in the rc file)
- Install
just- Use package manager for each platform Packages - Just Programmer's Manual
- Maybe use the
https://just.systems/install.shinstallation script and set the target location to~/.local/bin/just? - If without "sudo" permission, can we install to user-space?!
- Pueue
- Homebrew
- linux (build from cargo / download binary + setup systemd service?)
- Mirror
- Python
- Ubuntu (docker)
- aosp-monthly | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror -> timeout, seems got banned?!
- Ubuntu - USTC Mirror Help
advanced
-
Clash
-
FRP
-
ssh keys
-
platform difference (cuda, mac)
-
CLI tools?! -> run_once_*.sh
-
Inside GFW then use different profile (sync proxy settings like for docker?!)
-
Improve
.ansible.cfg -
Agent Skills
-
Coding Agents global config
- Claude Code notification hook - Hooks reference - Claude Code Docs
- hooks for different matcher for notification?! (permission_prompt, idle_prompt, auth_success, elicitation_dialog)
- Claude Code notification hook - Hooks reference - Claude Code Docs
-
Install docker
- with convenience script:
curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh ./get-docker.sh --dry-run - macOS maybe use OrbStack?!
- setup for non-root user Post-installation steps | Docker Docs
- use Ansible to maintain?!
- with convenience script:
-
benchmark the oh-my-zsh, nvim startup time
- oh-my-zsh vs. antidote
- sharkdp/hyperfine: A command-line benchmarking tool coding env
-
Python
- UV (must have)
- with or without miniforge
- default python version?!
-
Mise: to manage different runtime (e.g. Python & NodeJS nvm)
- vs. ASDF
- Mise + Python Cookbook | mise-en-place vs. Pure UV
- nvm startup time super long
- nl-scripts/dev-bootstrap at main · daviddwlee84/nl-scripts - add
chezmoiscript - daviddwlee84/DevEnvPack: Bring my development environment everywhere. vim, tmux, bash, zsh, VSCode, docker, and so on.
Examples
- omerxx/dotfiles: My dotfiles synced from localhost and remote machines
- logandonley/dotfiles
- The ultimate dotfiles setup: chezmoi + ansible
- bartekspitza/dotfiles
docker run --rm -it ubuntu:latest bash
export GITHUB_USERNAME=logandonley
# NOTE: if you prefer to use the system package manager to install chezmoi, then don't use this script
apt update -y && apt install curl -y
sh -c "$(curl -fsLS get.chezmoi.io/lb)" -- init --apply git@github.com:$GITHUB_USERNAME/dotfiles.git
# or wget
apt update -y && apt install wget -y
sh -c "$(wget -qO- https://get.chezmoi.io/lb)" -- init --apply "git@github.com:$GITHUB_USERNAME/dotfiles.git"# To test, you can run:
chezmoi state delete-bucket --bucket=scriptState # Clear script state to re-run
chezmoi apply -v# Test Claude Code notification hook
echo '{"hook_event_name":"Stop"}' | ~/.claude/hooks/notify.sh
echo '{"hook_event_name":"Notification","title":"Test Title","message":"Test message","notification_type":"info"}' | ~/.claude/hooks/notify.sh- Why I'm Ditching Nix Home Manager - And What I'm Using Instead (from Nix to GNU Stow)