Development

Dotfiles 2017: Cutting Even Deeper

Achieve terminal clarity through ruthless pruning—eliminating magic loaders, unused scripts, and platform complexity to create a fast, honest, and maintainable development environment

One Year Later: Time to Prune

My dotfiles is stable. They are modular, sourced dynamically, backed by a dumb install script that just works. But I start to feel a new kind of friction: knowing that some things were still there… just because they always had been.

So this update was about honesty. I walked through every file and asked myself: do I still use this? Would I miss it if it were gone?

Spoiler: most of the time, the answer was “no.”

No More Magic: Goodbye load.zsh

One of the first things to go was load.zsh. It used to scan and load every .zsh file in a folder. That worked — until it didn’t.

Over time, I’d accumulated stray .zsh scripts that got sourced without much intention. They weren’t wrong. But they weren’t needed either.

So I got rid of the magic loader. Now, each file is explicitly sourced via .zshrc.symlink. It’s clear, deliberate, and easier to trace.

source "$ZSH/aliases.zsh"
source "$ZSH/functions.zsh"
source "$ZSH/prompt.zsh"
Old PatternNew Pattern
load.zsh loopDirect source
Auto-includesExplicit config
Easy to forgetHard to ignore

This refactor made it obvious which files mattered — and which didn’t.

Safer Aliases by Default

This version also introduced safer CLI behavior. Simple things that protect me from myself.

alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

It’s annoying the first time. But after a few months, you realize: maybe overwriting or deleting files silently was never a good idea.

Combined with alias ls='ls -GFh', I now have:

  • readable directory listings
  • protected file operations
  • consistent behavior across machines
AliasPurpose
cp -iPrompt before overwrite
mv -iPrompt before move
rm -iPrompt before delete

Safer by default. Less regret.

One Zsh to Rule Them All

I removed macOS-specific tweaks, paths, and helpers. Not because they were bad — but because they weren’t being used.

I also consolidated shell config back into zshrc.symlink, simplifying platform checks and customizations.

export PATH="$HOME/bin:$PATH"
source "$ZSH/aliases.zsh"
source "$ZSH/functions.zsh"

There’s no platform branching. No “if Darwin then…” conditions. If something breaks on Linux, I’ll fix it — but I’m not optimizing prematurely.

This cleaned-up .zshrc.symlink is now just:

  • Exports
  • Aliases
  • Functions
  • Prompt

It’s readable. And more importantly, it’s obvious where things live.

Pruned. Sharpened. Ready.

2017’s update wasn’t flashy. It was careful.

I removed load.zsh. I removed old helpers. I removed folder structures I didn’t use. I removed tools I didn’t need. And every removal made the setup feel lighter — more mine.

This setup now:

  • Starts faster
  • Has fewer hidden surprises
  • Onboards new machines quicker
  • Is easier to debug

That’s what dotfiles are about. Not showing off — but making your environment disappear so you can focus on the work.

Check out the full diff