Public chezmoi source for Windows, WSL Ubuntu, macOS, and NixOS dotfiles and agent workflows.
NixOS provides git, curl, and mise as system packages and enables programs.nix-ld so mise's prebuilt Node binary can run. Clone this repository over HTTPS, then run the NixOS-only bootstrap from the checkout:
mkdir -p ~/repos
git clone https://github.com/kisepichu/dotfiles.git ~/repos/dotfiles
cd ~/repos/dotfiles
./scripts/bootstrap-nixos.shThe bootstrap applies this chezmoi source non-interactively, installs the declared mise tools, and installs Codex and Claude Code under ~/.local/bin. Re-running it restores chezmoi-managed files to the repository state, so commit intentional local edits first. It does not perform any login or create credentials.
Create a dedicated GitHub key on the NixOS machine after the bootstrap:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github_glaceon
cat ~/.ssh/id_ed25519_github_glaceon.pubRegister only the displayed public key in GitHub, then add this host entry to ~/.ssh/config:
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github_glaceon
IdentitiesOnly yeschmod 600 ~/.ssh/config
ssh -T git@github.comComplete the agent authentication manually on that machine:
codex login
claude loginThis path is for a Windows/WSL-first workflow on a new Mac. It is separate from the WSL bootstrap.
xcode-select --install
mkdir -p ~/repos
git clone https://github.com/kisepichu/dotfiles.git ~/repos/dotfiles
cd ~/repos/dotfiles
./scripts/bootstrap-macos.shAfter the script completes, open Karabiner-Elements once and grant the permissions requested by macOS.
Detailed notes: docs/macos-initial-setup.md
-
Install WSL and Ubuntu from Windows.
wsl --install -d Ubuntu
-
Update WSL, then open the Ubuntu shell.
wsl --update -
Clone this repository in WSL.
sudo apt-get update sudo apt-get install -y git mkdir -p ~/repos git clone https://github.com/kisepichu/dotfiles.git ~/repos/dotfiles cd ~/repos/dotfiles
-
Run the WSL bootstrap.
./scripts/bootstrap-wsl-ubuntu.sh
-
Restart the shell after the bootstrap changes the default shell to fish.
exec fish -l
Install Docker Engine directly inside WSL Ubuntu when container-based project work is needed.
Docker Engine expects systemd in WSL. Current Ubuntu installs through wsl --install should use systemd by default; verify it when needed:
cat /proc/1/commIf the output is not systemd, enable it inside the distro and restart WSL:
sudoedit /etc/wsl.confAdd or update this section while preserving any existing settings:
[boot]
systemd=truewsl --terminate UbuntuReplace Ubuntu with the distro name when it differs.
cd ~/repos/dotfiles
./scripts/install-docker-engine-wsl.shThe script prompts before adding your user to the docker group. Accept only if you want to run Docker without sudo; Docker daemon access is effectively root-equivalent inside the WSL distro.
Then close and reopen the WSL session if you accepted the group change. Verify the install:
docker run --rm hello-world
docker compose versionIf you declined the group change, use sudo for daemon access:
sudo docker run --rm hello-world
docker compose versionThe script follows Docker's official Ubuntu apt repository flow and installs docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, and docker-compose-plugin.
Nix is not part of the core bootstrap. Install it explicitly when a reproducible nix develop shell or optional Nix-managed tooling is wanted. The script uses the Determinate Nix Installer and supports macOS and WSL Ubuntu.
cd ~/repos/dotfiles
./scripts/install-nix.shOn WSL, the script detects whether systemd is PID 1. If it is not (no systemd=true in /etc/wsl.conf), it installs with --init none so the install does not depend on a systemd-managed nix-daemon. For a systemd-managed daemon, enable systemd in WSL first (see the Docker section above).
Options:
NIX_INSTALL_NO_CONFIRM=1runs the installer non-interactively.NIX_INSTALL_DETERMINATE=1installs Determinate Nix instead of upstream Nix.
Open a new shell after installing; conf.d/nix.fish sources the nix profile automatically. To uninstall a Determinate install:
/nix/nix-installer uninstallRust is managed by mise (declared in ~/.config/mise/config.toml). After chezmoi apply, mise install installs the toolchain and run_onchange_after_45-rust-components.sh.tmpl adds the rust-analyzer and rust-src components that neovim (rustaceanvim) needs. No manual step is required; open neovim in a Rust project and the LSP starts.
Before committing, run:
prek run --all-filesIf prek is not available, run:
pre-commit run --all-files