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:
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:
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) |
|---|---|---|---|
| ripgrep | ripgrep | ripgrep | ripgrep |
| fd | fd-find | fd-find | fd |
| visual-studio-code (cask) | code (snap/apt repo) | code (rpm repo) | visual-studio-code-bin (AUR) |
| git | git | git | git |
| jq | jq | jq | jq |
| gh | gh | gh | github-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:
Template Conditionals for Linux-Specific Config
Sometimes you need slightly different config on Linux versus macOS. ConfigSync supports template conditionals in your tracked files:
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:
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.