These are my personal dotfiles. They contains my shell and terminal settings for MacOS (what I currently use), as well as git and neovim configurations.
Important
Don’t blindly use my settings unless you know what that entails. Use at your own risk! If you want to give them a try, fork the repo, review the content, and remove anything you don't want or need.
To install these dotfiles into a brand new machine, simply run the command:
# first, create the folder structure to prevent GNU stow from linking the
# directories rather than their content.
mkdir -p ~/.config
# then symlink them using stow
# TIP: can use the -R flag instead of the -S to (R)elink them
stow -d <this-repo-path>/home -t $HOME . -SIf you don't like/want the dependency on stow, you can symlink manually using the ln command
or make hard copies if you are into that sort of thing.
The actual dotfiles are contained within the home/ dir, which replicates the same structure of
the $HOME system directory. I chose to do so (over a topical approach for example) to optimize for ease
of management/maintenance over clean content segregation. I use GNU Stow
to symlink the dotfiles on new systems, and it requires the files to have the same structure they should
have in the destination dir.
home/
├── .config/
│ ├── delta/theme.gitconfig # delta diff tool color theme
│ ├── ghostty/config.ghostty # ghostty terminal prefs
│ ├── git/ # git aliases, identities, and other specific configs
│ ├── nvim/ # nvim lua configs (submodule)
│ ├── zsh/ # shell tools setup files (bat/zoxide/etc...)
│ └── starship.toml # cross-platform shell prompt settings
│
├── dev/personal/* # markdownlint config for personal projects
├── .gitconfig # global git config
│
│ # shell configuration
├── .zalias
├── .zshenv
└── .zshrcI used to have one giant .zshrc file with all Zsh configurations in there.
Nowadays, I split it up into multiple files listed below (still gotta understand whether I actually like it or not tbh).
.zshenv— loaded first for all shells. Sets locale/language, XDG base dirs, global path variables ($PERSONAL,$WORK,$DOTFILES_REPO, …), default editor, and telemetry opt-out..zshrc— loaded for interactive shells. Bootstraps Homebrew, loads shell plugins (fzf-tab, zsh-autosuggestions, zsh-syntax-highlighting), and sources aliases and tool configurations from the.config/zsh/dir..zalias— all my custom shell aliases, sourced by.zshrc..config/zsh/completion.zsh— initialises the zsh completion system (compinit) with a 24h cache optimisation to keep shell startup fast..config/zsh/keybindings.zsh— shell keybinding configuration..config/zsh/dev.zsh— dev environment setup: exports$GOPATHand initialises fnm for Node.js version management..config/zsh/fzf.zsh,.config/zsh/fzf-tab.zsh— fzf keybindings/config and fzf-tab integration (replaces the default completion menu with fzf)..config/zsh/bat.zsh,.config/zsh/zoxide.zsh,.config/zsh/tirith.zsh— tool-specific setup configuration files.
I use Starship as custom cross-shell prompt.
The actual configurations for starship are defined within the .config/starship.toml file,
while its integration setup with the zsh shell is done by the .config/zsh/starship.zsh file, sourced by .zshrc.
Similarly to what I've done with Zsh configs, I also decided to split Git configs across multiple files,
then composed via [include] directives from the root .gitconfig:
.gitconfig— it's the root config file. Sets core behaviours:mainas the default branch, pull-as-rebase, rerere, untracked cache, and line-ending normalisation..config/git/aliases.gitconfig— defines custom git subcommands, invoked asgit <alias>..config/git/delta.gitconfig— configures git-delta as the default pager..config/delta/theme.gitconfig— contains the color theme used by delta..config/git/lfs.gitconfig— Git LFS filter configuration..config/git/ignore— global.gitignorefile
In the past, I was using two separate identities for personal and work-related use. Nowadays, I use the same. However, I like to use my pseudoonim on my personal projects, while using my full name on work-related repos. I achieve this, by defining the following two git identities, which gets applied as the default git config.
.config/git/identity.personal.gitconfig— personal identity, applied as the default for all repos under~/dev/personal/..config/git/identity.work.gitconfig— work identity, applied as the default for all repos under~/dev/<work>/.
Additionally, I've defined the following git aliases to make my life easier:
whoami- displays the currently applied identity in the current dir.set-personal/set-workto easily override the default for a specific repo.set-noneto remove any override and rely back to the default.
.config/nvim— Neovim configs. Tracked as a git submodule pointing toAmheklerior/nvim.dev/personal/.markdownlintrc— markdownlint config for personal projects.
They are part of my System Environment Setup for quickly setting up new machines.
Licensed under MIT © Andrea Amato 2026
For information, see TLDR Legal / MIT