Dean's List
  1. blog
  2. dotfiles

Building a Future Proof Development Environment with dotfiles

DD
Written by: Dean Cochran Published: 11/12/2025
Building a Future Proof Development Environment with dotfiles

Dotfiles are the backbone of your development environment. They define how your tools behave, how your workflow feels, and ultimately how productive you are. For me, dotfiles aren’t just configs—they’re an investment in my future.


Contents

My Philosophy

I’m 27, and I want tools that will scale with me for decades. Switching tools later is costly, so I’m building a foundation now that prioritizes:

  • Longevity: Tools that are future-proof and actively maintained.
  • Portability: My environment should be reproducible anywhere—Linux, macOS, or Windows (via WSL).
  • Transparency: Every tweak should be visible and versioned, so I always know what changed and why.

Your dotfiles are more than configs—they’re your digital DNA. They define how you think, move, and work in the terminal.

Core Tools in My Setup

Here’s what I use and why:

1. Neovim (Custom LazyVim)

  • Modern Vim with Lua-based extensibility.
  • Blazing fast, minimal, and endlessly scriptable.
  • Plugins managed declaratively for reproducibility.

2. Tmux

  • Terminal multiplexer for running multiple sessions in one window.
  • Perfect for remote work and persistent workflows.
  • My keybindings emphasize speed and mnemonic consistency.

3. Nix

  • Declarative package manager and system configuration tool.
  • Ensures every machine I touch is configured identically.
  • Ideal for managing dependencies, tools, and bootstrap scripts.

4. Zsh

  • A powerful shell with first-class customization.
  • Plugins like zsh-autosuggestions and zsh-syntax-highlighting improve UX.
  • Custom aliases and functions reduce repetitive typing.

How I Structure My Dotfiles

My dotfiles live in a single version-controlled directory, structured by tool:


~/dotfiles
├── zsh/
│   ├── .zshrc
│   ├── aliases.zsh
│   ├── functions.zsh
├── nvim/
│   ├── init.lua
│   ├── lua/
│   │   ├── plugins.lua
│   │   ├── settings.lua
├── tmux/
│   ├── .tmux.conf
├── nix/
│   ├── configuration.nix
├── bootstrap.sh
  • Modular Design: Each tool’s config lives in its own folder.
  • Version-Controlled: The entire repo is tracked with Git.
  • Bootstrap Script: Automates installation, symlinking, and dependency setup.

Managing Dotfiles with GNU Stow

GNU Stow is a lightweight symlink manager that makes maintaining dotfiles painless.

Instead of manually creating symlinks, Stow automates the process based on folder structure.

Directory Layout

Each subfolder (e.g. zsh/, nvim/, tmux/) mirrors how the files should appear in your $HOME directory.

Example:

~/dotfiles/zsh/.zshrc → ~/.zshrc

Using Stow

Run stow from within your dotfiles folder:

cd ~/dotfiles
stow zsh
stow nvim
stow tmux

To undo symlinks:

stow -D zsh

To stow everything at once:

stow */

This makes your setup modular, reproducible, and easy to extend.

Cloning and Bootstrapping

To install your dotfiles on a new machine:

1. Clone Your Repo

git clone https://github.com/yourusername/dotfiles.git ~/dotfiles
cd ~/dotfiles

2. Run the Bootstrap Script

Your bootstrap.sh can:

  • Install system dependencies via Nix or Homebrew.
  • Use Stow to link configs.
  • Set up Neovim plugins and shells.

Example bootstrap.sh:

#!/usr/bin/env bash
set -e

echo "Checking for Nix..."
if ! command -v nix &> /dev/null; then
    echo "Nix not found. Installing..."
    curl -L https://nixos.org/nix/install | sh
    . "$HOME/.nix-profile/etc/profile.d/nix.sh"
fi

echo "Installing dependencies via Nix..."
nix-env -iA nixpkgs.stow nixpkgs.tmux nixpkgs.neovim nixpkgs.zsh

echo "Symlinking dotfiles..."
cd ~/dotfiles
stow zsh nvim tmux

echo "Setup complete! 🎉"

Run it:

chmod +x bootstrap.sh
./bootstrap.sh

Keeping Your Dotfiles Updated

Once set up, updating and syncing your dotfiles is simple.

Pull Latest Changes

cd ~/dotfiles
git pull
stow */

Commit New Changes

When you modify a config file:

cd ~/dotfiles
git add .
git commit -m "Update zsh aliases and Neovim plugins"
git push

You can even create a post-commit hook to automatically re-stow after every commit.

Why This Setup Works

  • Reproducibility: One repo, one command, same environment anywhere.
  • Simplicity: Stow keeps the filesystem clean—no manual symlink management.
  • Future-Proofing: Nix ensures long-term reproducibility across versions and platforms.
  • Transparency: Every configuration lives under version control.

This system scales—from laptops to servers, from WSL to macOS—without friction.

Closing Thought

Your dotfiles are your second brain for development. They evolve as you do. When thoughtfully built, they turn every terminal into your terminal—consistent, efficient, and uniquely yours.

Invest in them now, and they’ll quietly repay you for the rest of your career.