Shared configuration for macOS and Linux development machines.
On a new machine:
curl -fsSL https://raw.githubusercontent.com/sluongng/dotfiles/master/init.sh | bashFrom an existing checkout:
./init.shThe bootstrap is safe to rerun. It links common shell, terminal, editor, Git,
and Codex configuration, then installs every tracked Codex skill. Files that
would be replaced are moved under ~/.dotfiles-backups/<timestamp>/.
The platform-specific split is deliberate:
- macOS installs Karabiner configuration.
- Linux installs Hyprland, Waybar, Mako, systemd user, and libinput gesture configuration.
- Package installation is not performed by default. Set
DOTFILES_INSTALL_PACKAGES=1to run the macOS Brewfile; Linux packages remain host-managed. - Mail configuration is opt-in with
DOTFILES_INSTALL_MAIL=1. - Existing checkouts are not pulled implicitly. Set
DOTFILES_UPDATE=1to usegit pull --ff-onlybefore provisioning.
Useful overrides:
DOTFILES_DIR=/path/to/checkout ./init.sh
XDG_CONFIG_HOME=/path/to/config ./init.sh
CODEX_HOME=/path/to/codex-home ./init.shLocal secrets, Codex state, Git credentials, and machine-specific project trust entries are intentionally kept outside this repository.
The shared Neovim configuration uses vim.pack and the current
nvim-treesitter main branch on both macOS and Linux. It requires Neovim
0.12 or newer, Git, curl, tar, a C compiler, and tree-sitter CLI 0.26.1
or newer. The Brewfile supplies the macOS dependencies; Linux packages remain
host-managed.
Run :PackUpdate! to update plugins and synchronize all configured Tree-sitter
parsers. The optional local Tree-sitter grammar checkout does not affect the
portable plugin lockfile:
export NVIM_TREE_SITTER_BAZELRC_PATH=~/work/misc/tree-sitter-bazelrc