Setting up a productive dev environment on Linux
This is the companion piece to my post about why I use Linux for web development. That post covered the reasoning. This one covers the setup.
Terminal: Alacritty + tmux
I use Alacritty as my terminal emulator. It is GPU-accelerated, fast, and configured through a single YAML file. No menus, no settings dialogs. You edit the config and it reloads.
For session management I use tmux. Multiple windows, split panes, persistent sessions that survive terminal crashes. My tmux config is minimal. I remapped the prefix to Ctrl+a and set up a few keybindings for splitting and navigating panes.
# .tmux.conf
set -g prefix C-a
unbind C-b
bind C-a send-prefix
bind | split-window -h
bind - split-window -v
set -g mouse on
set -g default-terminal "tmux-256color"Shell: Zsh + minimal plugins
I use Zsh with a handful of plugins through zinit. No heavy frameworks like oh-my-zsh. The plugins I actually use:
- zsh-autosuggestions for fish-like suggestions from history
- zsh-syntax-highlighting for command syntax colors
- fzf integration for fuzzy finding files and history
My prompt is starship, which is fast and customizable without being bloated.
Editor: VSCodium
I use VSCodium, which is VS Code built from the open-source repository without Microsoft's telemetry and tracking. It looks and works identically to VS Code, supports the same extensions, and does not phone home.
The extensions I rely on:
- ESLint and Prettier for code formatting
- GitLens for git blame and history
- Tailwind CSS IntelliSense for autocomplete
- Error Lens for inline error display
Node management: fnm
I use fnm (Fast Node Manager) instead of nvm. It is written in Rust, starts up instantly (nvm adds noticeable delay to shell startup), and supports .node-version and .nvmrc files.
fnm install 22
fnm default 22Package management: pnpm
pnpm is my default package manager. Faster installs, strict dependency resolution, and workspace support for monorepos. I have written a separate post about pnpm workspaces if you want the details.
Other tools
- ripgrep (
rg) for searching code. Faster than grep and respects.gitignore. - fd for finding files. Faster than
findwith better defaults. - bat as a
catreplacement with syntax highlighting. - lazygit for a terminal git UI when the command line gets tedious.
- docker and docker compose for local services.
Dotfiles
I keep all of this in a dotfiles repository managed with GNU Stow. Each tool's config lives in its own directory, and stow creates the symlinks. Reinstalling on a new machine takes about 15 minutes.
The setup takes some upfront effort, but once it is dialed in, it is fast, stable, and entirely under your control.
Sources
Related posts
Why I use Linux for web development
My case for using Linux as a web development environment, and the practical advantages it has over Windows.
Why Pop!_OS is my Linux distro of choice
What makes Pop!_OS stand out as a Linux distribution for developers, and why I chose it over Ubuntu, Fedora, and Arch.
Understanding Linux file permissions (the stuff that trips people up)
A practical guide to Linux file permissions, ownership, and the common mistakes that break self-hosted services and Docker setups.
Enjoying the blog? Subscribe via RSS to get new posts in your reader.
Subscribe via RSS