Skip to content

Setting Up a Linux Development Environment

A clean, repeatable development environment reduces friction. This article lists the minimal tools and a recommended initial configuration for a modern Linux developer workstation, with examples for Debian/Ubuntu and notes for other distributions.

Install these packages on Debian/Ubuntu systems to cover compilation, version control, networking, and a capable editor:

Terminal window
sudo apt update && sudo apt install -y build-essential git curl neovim python3 python3-pip cmake gdb pkg-config

On Fedora/RHEL-based systems use dnf:

Terminal window
sudo dnf install @development-tools git curl neovim python3 python3-pip cmake gdb pkgconf-pkg-config

These packages provide a working toolchain for compiled languages (GCC/clang via build-essential or @development-tools), cmake for modern builds, gdb for native debugging, and neovim as a powerful editor.

  1. Install and configure git (name + email).
  2. Create a local ~/projects directory and choose a shell (bash or zsh).
  3. Configure a basic ~/.gitconfig with credential.helper and a sensible core.editor.
  4. Create a small ~/.config/nvim/init.lua to enable LSP and completion (see the Neovim article for details).
  5. Create a ~/projects/example workspace and test building a small C program with gcc -o hello hello.c.

Run these commands to confirm the most important tools are available:

Terminal window
git --version && gcc --version && cmake --version && nvim --version && gdb --version

With the core toolchain installed, proceed to learn compiling from source, working with cmake, and configuring Neovim for code navigation and debugging.

This topic is an important part of building a reliable Linux development workflow. Understanding it clearly will make later tasks easier, because it reduces guesswork and helps you recognize when a step is missing or misapplied.

  • Try the commands or configuration shown here in a safe test environment.
  • Compare how the concepts apply across different distributions or tools.
  • Keep a short note of what worked and what failed so you can diagnose future problems faster.
  • Revisit the related article in the series to deepen the connections between topics.
  • Skipping verification steps and assuming the system is configured correctly.
  • Copying commands without adapting paths, package names, or tool versions for your environment.
  • Treating this topic as an isolated tip rather than part of a larger workflow.