11 — Tools Setup: The Environment You Ship In

Your tools are as much a part of your competence as your code. A C engineer who cannot pull up gdb, run -fsanitize=address, and read Compiler Explorer output is not a C engineer yet. This folder is the exhaustive setup: what to install Day 1, what to defer, and honest opinions on every tool where the community is divided.

Total time to complete Day 1 setup: 30 minutes on macOS or Ubuntu 26.04. File 09_day_one_setup_script.md is the actual shell script; the rest is context so you know what you just installed and why.

Files in this folder

#

File

What it gives you

00

README.md

This overview + Day-1 checklist

01

01_os_and_shell.md

macOS vs Ubuntu vs WSL2 tradeoffs

02

02_compilers_and_toolchains.md

gcc 15, clang 20, ccache, mold

03

03_editor_and_lsp.md

VS Code + clangd or Neovim + clangd

04

04_debuggers_and_sanitizers.md

gdb, lldb, rr, ASan/UBSan/TSan/MSan, valgrind

05

05_build_and_package.md

Make, CMake, Meson, pkg-config

06

06_profilers_and_tracers.md

perf, Instruments, hotspot, bpftrace, Tracy

07

07_containers_and_vms.md

OrbStack/Colima, QEMU, multipass/lima

08

08_ai_assist_for_c.md

Honest AI-for-C policy

09

09_day_one_setup_script.md

Actual bash script to run

10

10_hardware_notes.md

Apple Silicon vs Linux box, cloud specs

The 30-minute Day-1 checklist

Print this. Cross items off as you install.

Base OS (choose one):

  • macOS 15+ with Homebrew installed

  • Ubuntu 26.04 LTS “Resolute Raccoon” (native, VM, or WSL2)

Compilers & core toolchain:

  • gcc 15.x (brew install gcc or apt install gcc)

  • clang 20.x (bundled with Xcode CLT on Mac; apt install clang lldb on Linux)

  • make + cmake + ninja + pkg-config

  • ccache (brew install ccache / apt install ccache)

  • mold linker on Linux (apt install mold); on Mac stay with ld64 — mold’s Mac port is not ready

Debug & sanitizers:

  • gdb (Linux) / lldb (Mac, comes with Xcode)

  • valgrind (Linux only; not on Apple Silicon)

  • ASan/UBSan already built into gcc + clang — verify with a test build

Editor:

  • VS Code + llvm-vs-code-extensions.vscode-clangd extension, and disable the Microsoft C/C++ extension (they conflict). Or:

  • Neovim with nvim-lspconfig + mason.nvim + clangd

Terminal / shell:

  • zsh (default on Mac) or bash — leave the shell alone at first

  • tmux optional but recommended

  • ripgrep (rg), fd, bat, fzf — quality-of-life

Version control:

  • git 2.40+ configured with your name/email

  • GitHub SSH key set up

References open in browser tabs:

Once every box is checked, run hello.c:

#include <stdio.h>
int main(void) { printf("day 1.\n"); return 0; }

Build with gcc -std=c17 -Wall -Wextra -Wpedantic -O2 -g -fsanitize=address,undefined hello.c -o hello && ./hello. If it prints day 1. you are ready for month one.

What most people get wrong about tool setup

They spend Day 1 through Day 30 tweaking dotfiles and neovim configs and never write C. Rule: 30 minutes of setup, then 6 months of C code, then permit yourself another 30 minutes of tool tweaking. Every hour spent on your editor colorscheme is an hour not spent on K.N. King’s exercises.

Return to ../README.md · Next: 01_os_and_shell.md