I’ve spent way too much time tweaking my setup across Linux and macOS, but I actually enjoy the process. My environment is a mix of high-performance tools and keyboard-driven workflows that keep me out of the way of my own productivity.
The OS Situation
I’ve been using Linux on and off since 2012, but it’s been my daily driver since 2021. These days, I’m mostly on Fedora or Arch/CachyOS, with macOS as a fallback.
The biggest change came in 2024 when I finally ditched Windows for good. The tracking, forced features, and general bloat of Windows 11 made it unusable for me. Moving fully to Linux was the best move I’ve made for my digital sanity. My dotfiles are now fully cross-platform and XDG-compliant, so everything feels consistent regardless of the machine I’m on.
The Terminal & Shell
I spent some time with Kitty, but I’ve mostly settled into Ghostty lately. When I’m not in Ghostty, I’m using Konsole or just the default GNOME terminal, depending on which environment I’m currently tinkering with.
My shell is Zsh. It’s just the right balance of extensible and reliable. I’ve tried Fish, but I always end up coming back to Zsh for my primary workflows.
# A few essentials from my .zshrc
export EDITOR="nvim"
export XDG_CONFIG_HOME="$HOME/.config"
# Quick aliases
alias g='git'
alias v='nvim'
Neovim & VS Code
I split my time between Neovim and VSCodium (the open-source flavor of VS Code). Neovim is my go-to for fast edits and anything where I want to stay entirely in the terminal. Codium is there for larger projects or when I just want a GUI-based environment for specific tasks.
-- Essential Neovim bindings
vim.keymap.set('n', '<leader>ff', builtin.find_files, {})
vim.keymap.set('n', '<leader>fg', builtin.live_grep, {})
Modern CLI Tooling
Beyond the standard fzf and ripgrep, I’ve started relying on a few newer tools that have fundamentally changed how I work in the terminal:
- uv: Python package management that is actually fast.
- lazygit & lazydocker: These TUI tools make managing Git and containers significantly less tedious.
- yazi: A terminal file manager that’s incredibly snappy.
- docker & podman: For containerization, depending on security requirements.
Automating Everything
I don’t believe in manually configuring machines anymore. I use Ansible to deploy my entire workstation setup. It handles everything:
- Installing my core toolset (Ghostty, Neovim, Zsh, VSCodium).
- Managing system-level configs across both Linux and macOS.
- Symlinking dotfiles so I’m never starting from scratch.
- Bootstrapping tools like
uvandyazi.
Final Thoughts
A terminal-heavy setup isn’t for everyone, but for me, it’s about speed and consistency. Being able to spin up a new environment and have it feel exactly like my old one within minutes is worth the upfront effort. If you want to see the specifics, my dotfiles repository is public.