GuideSeptember 2, 20257 min read

How to Set Up a New Linux Dev Machine Without Losing Your Mind

Different distros, different package managers, different paths. Here is how to tame the chaos and get a consistent dev environment on any Linux machine.

The Linux Challenge

Linux is a fantastic platform for development, but it comes with a unique headache: fragmentation. Ubuntu uses apt. Fedora uses dnf. Arch uses pacman. Package names differ across distros. Config file paths sometimes vary. And if you work across multiple Linux machines or switch distros, you are essentially starting from scratch every time.

Even within a single distro, setting up a new machine means hours of installing build tools, configuring your shell, setting up your editor, generating SSH keys, restoring git config, and tracking down all those little tweaks you have accumulated over months or years. The process is manual, error-prone, and frustratingly slow.

The Manual Setup Nobody Enjoys

Here is what a typical Linux dev machine setup looks like on Ubuntu:

The manual grind on Ubuntu
# Install essential build tools $ sudo apt update && sudo apt install -y build-essential git curl wget # Install Node.js (via nvm because apt's version is ancient) $ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash $ nvm install --lts # Install Python build deps $ sudo apt install -y python3 python3-pip python3-venv # Install Docker $ sudo apt install -y docker.io docker-compose $ sudo usermod -aG docker $USER # Configure shell, git, SSH... $ cp /path/to/backup/.zshrc ~/.zshrc $ cp /path/to/backup/.gitconfig ~/.gitconfig # ...where was that backup again?

Now imagine doing this on Fedora, where half those commands change. Or on Arch, where the package names are different. If you maintain machines across distros, you are maintaining multiple mental checklists for the same goal: a working dev environment.

ConfigSync: One Workflow, Any Distro

ConfigSync eliminates the distro-specific busywork. On any new Linux machine, the setup is the same three commands:

Universal Linux setup
# Install ConfigSync $ npm install -g @inventivehq/configsync # Authenticate and pull your environment $ configsync setup --token cs_abc123 # Pull configs and install packages $ configsync pull --install

That is it. ConfigSync detects your distro, maps packages to the correct package manager, restores your configs, and runs your bootstrap script. Whether you are on Ubuntu, Fedora, or Arch, the result is the same: your fully configured development environment.

Cross-Platform Package Mapping

One of ConfigSync's most powerful features for Linux users is automatic package mapping. When you push from a Mac with Homebrew packages, ConfigSync maps them to the correct equivalents on Linux:

Homebrew (macOS)apt (Ubuntu/Debian)dnf (Fedora)pacman (Arch)
ripgrepripgrepripgrepripgrep
fdfd-findfd-findfd
visual-studio-code (cask)code (snap/apt repo)code (rpm repo)visual-studio-code-bin (AUR)
gitgitgitgit
jqjqjqjq
ghghghgithub-cli

The mapping table is built into ConfigSync and covers hundreds of common development packages. For anything not in the table, you can define custom mappings in your config.

Distro-Agnostic Modules

Most of your development configuration is already distro-agnostic. Your .zshrc, .gitconfig, .vimrc, and SSH config all live in the same paths on every Linux distro. ConfigSync's modules handle these seamlessly:

Modules that work everywhere
$ configsync pull --verbose Restoring from snapshot 2026-03-24T10:00:00Z... ✓ shell ~/.zshrc, ~/.zprofile (2 files) ✓ git ~/.gitconfig, ~/.gitignore_global (2 files) ✓ ssh ~/.ssh/config, 2 key pairs (encrypted) ✓ vim ~/.vimrc, ~/.config/nvim/ (4 files) ✓ vscode ~/.config/Code/User/settings.json, 18 extensions ✓ node ~/.npmrc, global packages ✓ python ~/.config/pip/pip.conf, global packages ✓ packages Installing 34 packages via apt... Restored 18 modules in 3m 12s.
ConfigSync automatically detects your Linux distro and package manager. You never need to tell it whether you are running Ubuntu, Fedora, or Arch — it figures it out and installs packages accordingly.

Template Conditionals for Linux-Specific Config

Sometimes you need slightly different config on Linux versus macOS. ConfigSync supports template conditionals in your tracked files:

Platform-aware .zshrc
# Common config (works everywhere) export EDITOR="nvim" alias ll="ls -la" # Platform-specific config {{#if platform == "linux"}} # Linux-specific paths export PATH="$HOME/.local/bin:$PATH" alias pbcopy="xclip -selection clipboard" alias pbpaste="xclip -selection clipboard -o" {{/if}} {{#if platform == "darwin"}} # macOS-specific paths export PATH="/opt/homebrew/bin:$PATH" {{/if}}

When ConfigSync restores a file with template conditionals, it evaluates them based on the target platform. The result is a clean config file with only the relevant sections, no commented-out blocks or platform checks cluttering your dotfiles.

A Bootstrap Script for Distro-Specific Setup

For things that go beyond config files and packages, use a bootstrap script. ConfigSync can detect your distro and branch accordingly:

~/.configsync/bootstrap.sh
#!/bin/bash # Detect package manager if command -v apt &> /dev/null; then PM="apt" sudo apt update elif command -v dnf &> /dev/null; then PM="dnf" elif command -v pacman &> /dev/null; then PM="pacman" fi # Install oh-my-zsh if missing if [ ! -d "$HOME/.oh-my-zsh" ]; then sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended fi # Install Docker if missing if ! command -v docker &> /dev/null; then curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER fi echo "Bootstrap complete for $PM-based system."

The bootstrap script runs automatically after configsync pull, handling anything that cannot be captured as a simple config file or package list. Combined with cross-platform package mapping and template conditionals, it gives you a fully automated setup on any Linux distro.

Stop Maintaining Distro-Specific Checklists

The whole point of using Linux for development is freedom of choice. You should not have to pay for that freedom with hours of setup time every time you provision a new machine or try a new distro. With ConfigSync, you push once from any machine and pull to any Linux distro. Your packages get mapped, your configs get restored, and your bootstrap script handles the rest.

Set up your environment once. Sync it everywhere.

Ready to try ConfigSync?

Sync your entire dev environment across machines in minutes. Free forever for up to 3 devices.