My terminal setup
A brief overview of my terminal setup.
If you’re reading this, you’re likely no stranger to the rabbit hole of r/unixporn and similar repositories of terminal configurations. I, too, have spent considerable time refining my terminal setup, but I’ve come to adopt the philosophy that the terminal is a tool not a canvas for design experiments.
Terminal emulator
When it comes to terminal emulators, there are several solid options out there. I use Kitty, primarily because it ticks all the boxes for me, it works well with neovim it’s fast (GPU-accelerated) and works seamlessly across different platforms and I only need to maintain one config file.
I have made few adjustments that change the font and use all of the screen
font_family JetBrainsMono Nerd Font
bold_font JetBrainsMono Nerd Font
italic_font JetBrainsMono Nerd Font
bold_italic_font JetBrainsMono Nerd Font
macos_traditional_fullscreen no
Plugins and theme
While I used to manually curate my shell plugins (and honestly, it was pretty sweet), I’ve recently embraced a more practical approach. OhMyZsh handles my plugins and Powerlevel10k handles my ZSH theme now - it might not be as nice as my previous setup, but it gets the job done without the maintenance overhead.
Functions and aliases
I had a grave of unused aliases and functions copied from others configs, but now I only have a few that I use regularly
# create a new directory and cd into it
function mkcd() {
mkdir -p "$1" && cd "$1"
}
# interactive file select for staging
function gadd() {
git status --short | cut -c 4- | gum choose --no-limit | xargs git add
}
# interactive commit for conventional commits
function gcommit() {
TYPE=$(gum choose "fix" "feat" "docs" "style" "refactor" "test" "chore" "revert" "batman")
SCOPE=$(gum input --placeholder "scope")
test -n "$SCOPE" && SCOPE="($SCOPE)"
SUMMARY=$(gum input --value "$TYPE$SCOPE: " --placeholder "Summary of this change")
DESCRIPTION=$(gum write --placeholder "Details of this change")
gum confirm "Commit changes?" && git commit -S -m "$SUMMARY" -m "$DESCRIPTION"
}
# select which remote and branch to push to
function gpush() {
REMOTE=$(git remote | gum choose)
BRANCH=$(git branch --show-current)
git push $REMOTE $BRANCH
}
CLIs
Beyond the basics, there are two CLIs that earn their keep:
- GitHub’s
gh
cli - because sometimes the browser is overkill - My git server CLI - technically not installed on my computer, its sends commands over SSH to my git server running soft-serve
Conclusion
This setup isn’t about having the coolest or most extensive configuration. It’s about having exactly what you need and nothing more. These tools work for me, but your ideal set of tools might differ based on your specific needs and preferences.
Questions or comments? Send an email.