I get coworkers asking me on occasion how my setup works or what this or that thing is. I’ll start by laying out why I have this setup.
I do most things from the command line, therefore my shell environment has a lot of customization of functions, aliases, prompt, etc.
I have used zsh for quite a while and am pretty settled into it. I’ve used grml zsh setup in the past, but now use a mix of zimfw, oh-my-zsh, and custom stuff.
I work with GitHub a lot, so I use gh. Obviously I also use git a lot, too, so I use the git CLI tool, not any of the GUIs.
I use powerlevel10k for my prompt.
This is a very customizable prompt for zsh
that can show a lot of information about the current state of the shell.
The downside is that the maintainer has pretty much retired, but the project is pretty mature so the impact seems negligible.
I use zoxide for a "smarter" cd command, lsd as a better ls
command, direnv to control some environment variables per path, fzf, and other various little tools and libraries.
I use Neovim for my editor with various plugins.
I run everything in kitty terminal.
I have a ~/.zshenv file (this is sourced first by zsh) that sets some pathing and environment variables.
It also will source a ~/.zshrnv.local
for localized settings that I don’t want in git :).
I use the zimfw framework to manage my plugins, even oh-my-zsh plugins.
The top of my ~/.zshrc initializes zimfw, installs it if it is not there already, and processes the ~/.zimrc file that I have templated.
The rest of the ~/.zshrc
is setting options, aliases, functions, the usual.