Skip to content

💾  Ian's dotfiles, utils, and Zsh/Vim/tmux configs

Notifications You must be signed in to change notification settings

statico/dotfiles

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

💾 Ian's Dotfiles and Neovim config

build status

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.

CleanShot 2026-01-22 at 21 42 05@2x

Favorite font at the moment: Iosevka Term

Demo

$ docker run --rm -it ghcr.io/statico/dotfiles
demouser@987552d4c629:/
〉

A random prompt color is picked at first install. Edit .zshlocal for details.

Installation

  1. curl -sL statico.link/zsh | zsh (redirects to the install.zsh file in this repo)
  2. chsh or otherwise set your shell to use Zsh
  3. Restart your shell

Optionally create a .postinstall with some machine-specific commands, like git config --global user.email "my-work-email@example.com"". You can also create a .vimlocal and .gvimlocal for machine-specific Vim customizations (though I primarily use Neovim now, the Vim config is kept for historical reasons).

Customizing

  • Fork this repo
  • Update install.zsh to point at your own
  • Go nuts

Highlights (or, Why I Use This)

My 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 Neovim configuration (in .config/nvim/init.lua), which I use as my primary editor. I also keep my old vimrc for historical reasons, which many people became interested in after reading my articles about Vim.

Why Zsh instead of Bash?

Only a few reasons, honestly:

  • Easier completion - I can type /u/l/b/xTab 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/binCtrl-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.

Common Tricks

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 files
  • Other single-character aliases: g for git, d for docker, dc for docker-compose, k for tree, y for yarn
  • Meta-L which appends 2>&1|less to the command and hits Enter, running the command and viewing its output in a pager
  • ZU to update Neovim plugins or just ZR to restart Zsh after a .zshrc change
  • Searching with rg (ripgrep), then Ctrl-AvEnter (changing rg to vrg) to edit all of the files that matched in Neovim
  • cding 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 Linux
  • If I'm typing a command but realize that I need to do something else first, Meta-Q queues the current command and clears the command line, then pastes it back in after I enter and run another command first.
  • Git commands: st 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.
  • Ctrl-G Ctrl-G quick switches to a git branch thanks to fzf-git.sh
  • Fuzzy history search using Ctrl-R and FZF
  • Each host gets a different 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.)

See also

Sponsor this project

 

Packages

 
 
 

Contributors 2

  •  
  •