These are the dotfiles I use on my systems and development environments.
To install these dotfiles:
-
Clone this repository with Git.
-
Set up the dotfiles.
If you're on a Unix-based system (Linux, macOS, Windows Subsystem for Linux), run:
SSH_AUTH_SOCK="${SSH_AUTH_SOCK:-}" ./setup.shIf you're on Windows, open a PowerShell session and run:
setup-windows.ps1
All the dotfiles will be symlinked to their destinations so you can update them just by pulling the latest changes.
This section describes the customizations and configurations included in these dotfiles.
design-spec: Design specifications for new features.validate-spec: Validate a specification (spec) to spot ambiguities, inconsistencies, unclear or missing instructions, data, information, or requirements.
ansible-developer: Develop Ansible roles and playbooks.git-commit: Execute Git commit with conventional commit message.nix-developer: Develop declarative Nix and NixOS configurations.systemd-developer: Develop and debug systemd units, timers, sandboxing, and watchdogs.terraform-developer: Develop declarative Terraform configurations.
apply-infra-change: Apply a change to a running service or host with a pre-change backup, a reviewed dry-run, and verified results.troubleshoot-host: Investigate an unresponsive, frozen, or crashed host after recovery.tune-host-power: Estimate and lower the power consumption of a physical host with measured baselines and reversible experiments.
capture-learnings: Distill durable lessons from the current session and saved memories into version-controlled agent instructions and skills.create-skill: Create, improve, consolidate, and diagnose agent skills.fetch-web-source: Fetch documentation or source at the version in use when a web page does not serve it.
edit-google-docs: Edit Google Docs through the Docs API while preserving native styles and keeping suggestions small.
The dotfiles include configuration files for the following software:
- Antigravity CLI
- Claude Code
- cURL
- Git:
.gitconfig: Global Git config containing core preferences, and productivity aliases.gitignore: Global Git ignore list to exclude common temporary, system, and editor files.
- iTerm2
- Nano
- Nix
- SSH client:
.ssh/config: generic client configuration. It includes~/.ssh/config.d/*first, so host blocks that are local to a machine (which key authenticates to which host, agent forwarding) live there, outside the repository, and take precedence. Keys are added to the agent on first use with an eight-hour lifetime, but only on the machine that owns the agent: on a remote host the agent is the one forwarded from the client, and the key would be sent there.- The shells reuse the SSH agent that the host already runs instead of
starting one per terminal: the inherited socket, the one the systemd user
manager publishes, well-known socket paths, and agents started by hand, in
this order. On Crostini,
setup.shpulls Debian'sssh-agent.serviceinto the user session because no graphical session starts it there.
- Terraform
- Tmux
- Visual Studio Code
- Wget
- Windows Subsystem for Linux
The dotfiles include customization and configuration files for different shells.
To avoid repetitions, the customizations are categorized considering the type of
shell they are applicable to. All the customizations are in the
.shells directory:
- The
.bashdirectory contains scripts for Bash. - The
.shdirectory contains scripts for the Bourne shell. - The
.zshdirectory contains scripts for the Z shell. - The scripts in the
.alldirectory are executed by all the shells.
The dotfiles include the following Git hooks. For each Git hook type,
.git-hooks/git-hook-runner.sh will run the hooks listed in the
.git-hooks/<Git hook name>.d directory in alphabetic order.
commit-msghooks:-
100-gerrit-commit-msg: adds aChange-Idtrailer to the commit message. Useful when working with Gerrit. This hook runs on every commit, but it exits without modifying the message because the global Git configuration setsgerrit.createChangeIdtofalse. Enable it for a given repository by running the following command in that repository:git config --bool gerrit.createChangeId "true"
-