Overview
My macOS / Ubuntu / WSL 2 / RHEL dotfiles.
Forked from the dotfiles of runesto.
About this project
I finally decided that I wanted to be able to execute a single command to "bootstrap" a new system to pull down all of my dotfiles and configs, as well as install all the tools I commonly use. In addition, I wanted to be able to re-execute that command at any time to synchronize anything that might have changed. Finally, I wanted to make it easy to re-integrate changes back in, so that other machines could be updated.
That command is dotfiles, and this is my "dotfiles" Git repo.
How the "dotfiles" command works
The three steps — copy/, link/, init/ — what each subdirectory is for, and which init scripts run on which
platform: the full walkthrough.
Hacking my dotfiles
Because the dotfiles script is completely self-contained, you should be able to delete everything
else from your dotfiles repo fork, and it will still work.
The only thing it really cares about are the /copy, /link and /init subdirectories, which will be ignored
if they are empty or don't exist.
If you modify things and notice a bug or an improvement, file an issue or a pull request and let me know.
Also, before installing, be sure to read my gently-worded note.
Installation
Prerequisites per platform, the warning to read first, and the one-line install: the installation guide.
Aliases and Functions
To keep things easy, the ~/.zshrc and ~/.bashrc files are very simple, and should never need to be modified.
Instead, add your aliases, functions, settings, etc into one of the files in the source subdirectory, or add a
new file. They're all automatically sourced when a new shell is opened.
Take a look, I have a lot of aliases and functions.
Scripts
The /bin directory is added to $PATH and contains:
- dotfiles - (re)initialize dotfiles. It might ask for your password (for
sudo). - eachdir - run one or more commands in one or more directories.
- isip - list bound IP addresses, or check if a specific IP is bound.
- sync-claude-deny - sync git-secret paths into Claude Code deny rules. Use
--checkto verify without modifying. - sort-claude-settings - sort arrays in Claude Code settings files for deterministic output.
- check-md-limits - enforce the markdown line-length and file-length limits. Run by the pre-commit hook and CI.
- claude-settings-merge - register the dotfiles-owned hooks and deny rules in
~/.claude/settings.json. - skill-trigger-eval - score how often a skill's description makes Claude load it.
- ai - start a fresh Claude session for one stage (
issue,plan,implement,review) on that stage's model.
The src function (defined in .zshrc and .bashrc) re-sources the files in
/source — every *sh under zsh, *.sh only under bash — useful after a change without opening a new shell.
Tips
A growing index of terminal tricks, repo features and bundled-tool basics lives in tips.md, with one
file per category under tips/.
Run tips in a shell to print them all, tips <FILE> (e.g. tips 22) for one section, tips <FILE>.<N>
(e.g. tips 22.3) for a single tip, tips <D>x for a whole decade, tips -l to list titles, or tips -h for usage.
License
Copyright © 2022-2026 Andreas Lind-Johansen Licensed under the MIT license.