These are my dotfiles. There are many like them, but these are mine. This started around 2001 or so when I used many different operating systems and environments. Now I mostly use macOS and Linux but still keep the environment in sync.
Favorite font at the moment: Iosevka Term
$ docker run --rm -it ghcr.io/statico/dotfiles
demouser@987552d4c629:/
〉
A random prompt color is picked at first install. Edit .zshlocal
for details.
curl -sL https://statico.link/zsh | zsh
chsh
or otherwise set your shell to use Zsh
Optionally create a .postinstall
with some machine-specific commands, like git config --global user.email "[email protected]"
". You can also create a .vimlocal
and .gvimlocal
for machine-specific Vim customizations.
install.zsh
to point at your ownMy first boss told me that I should have a digital toolkit -- a set of tools that I keep with me that I can use anywhere. In college I used many different kinds of Unix variants, and so it made sense to build a kit that could bootstrap my environment anywhere. Today, I use macOS, Windows, and various distributions of Linux, and this kit has proven invaluable in getting set up quickly on new hardware and VMs.
While this project includes a huge collection of configuration snippets I've collected over the years, a few parts stand out and are things I use daily:
My zshrc
, which has a minimal, customized prompt that I like the best, as well as many aliases and shortcuts to standardize environments (like making sure Unicode displays properly and ls
shows colors) and reduce keystrokes (like with my ~60 or so Git aliases). There are also a few functions that make host-specific customizations easy using a .zshlocal
script which never gets checked in. There are tons of tricks in there so it's worth a skim.
My vimrc
, which many people became interested in after reading my articles about Vim. I also have an update.sh
script which installs all of the Vim plugins and themes I like to use, and it gets run as part of the Zsh update process (aliased to ZU
). Is my Vim update thing better than Vundle or another plugin manager? Maybe. It's very simple and fast and works everywhere, so I stick with it.
Only a few reasons, honestly:
Easier completion - I can type /u/l/b/x
Tab and that completes to /usr/local/bin/x
I'm able to hack Ctrl-W to delete to the previous word or slash, so /usr/local/bin
Ctrl-W becomes /usr/local/
I've got a thing that shows me five red dots when a completion is in progress, such as when completing files from remote SSH servers.
Globbing - The **
recursive operator and qualifiers like (.)
and (/)
for globbing are essential, like rm **/.DS_Store
Legacy - I started using Zsh in 2002 or so when it was edgy.
Here's what I use the most often on the command line:
j foo
to cd
to the most commonly used directory that fuzzy-matches foo (via autojump)l
and ll
for long directory listings, ltr
for showing the most recent filesg
for git
, d
for docker
, dc
for docker-compose
, k
for tree
, y
for yarn
2>&1|less
to the command and hits Enter, running the command and viewing its output in a pagerZU
to update Vim plugins or just ZR
to restart Zsh after a .zshrc changerg
(ripgrep), then Ctrl-AvEnter (changing rg
to vrg
) to edit all of the files that matched in Vimcd
ing to a directory and then using Meta-P to pop to the previous directory (since auto_pushd
is enabled and silent)psl
to search for processes (since I never remember the pgrep
syntax and it's never been consistent across platforms)open
and trash
commands that work across macOS and Linuxst
for status, gd
for a git diff, gl
for a quick log, sci <message>
to commit everything with a message, or gap
to cherry pick and then gc <message>
to commit.colorprompt
command in its ~/.zshlocal
. I use ansimodes
or 256-colors.sh
to pick a color. (Both are already in the ~/bin/
directory, which is added to the $PATH
.)