Desktop Setup

A record of how my Linux desktop is put together, kept mostly so I can rebuild it without having to remember everything. The install is scripted in arch.sh; this page is the readable summary of what that script sets up.

The script #

One script covers my typical use cases of a Linux machine. arch.sh installs the base system; --desktop adds the Wayland desktop and applications, and --vm adjusts for a virtual machine guest. The hostname and CPU microcode are arguments. Partitioning is deliberately hard-coded and edited by hand before each run, depending on the intended disk layout of the hardware. After installing packages the script opens a shell in the new system, where one sets the root password, creates a user, etc.

Base system #

  • Arch Linux on an amd64 machine with UEFI. GPT disk with EFI, swap, and ext4 root partitions.
  • systemd-boot, the linux kernel with mkinitcpio, CPU microcode, and TLP for power management.
  • NetworkManager with systemd-resolved. On a desktop, libvirt for virtual machines.
  • paru as the AUR helper; reflector keeps the mirror list current.
  • Locale en_US.UTF-8; time zone America/Chicago.

Desktop #

  • Wayland with Hyprland. greetd and ReGreet for login; waybar, rofi, dunst, swaybg, swaylock, and wlogout.
  • foot as the terminal. grim and flameshot for screenshots; nwg-displays, wlr-randr, brightnessctl, and gammastep for displays.
  • fcitx5 with Chewing for Chinese input.
  • GTK and icon themes from Kanagawa and Everforest; phinger cursors.
  • Fonts: Iosevka, Hack, Nerd Font symbols, Aleo, Besley, Drafting Mono, Noto (including CJK and emoji), and Cantarell.

Everyday tools #

  • Shell and editing: bash, neovim, tmux, fd, fzf, ripgrep, zoxide, yazi, jq.
  • Development: gcc, clang, rustup, go, gdb, valgrind, git, devtools, Docker, uv, fnm, bun, and QEMU/KVM with virt-manager.
  • Networking: tcpdump, Wireshark, nmap, bind tools, inetutils, OpenVPN, Tailscale.
  • Files and sync: rsync, syncthing, Nextcloud client, nautilus, file-roller, 7zip.
  • Documents: TeX Live, biber, zathura, pdftk, JabRef, Obsidian, calibre.
  • Media: PipeWire, pavucontrol, cmus, VLC, imv, ImageMagick, ffmpeg, yt-dlp, OBS.
  • Browsers and mail: Firefox, Chrome, Thunderbird, newsboat; pass with browserpass; ente-auth.
  • Also: Transmission, Zoom, SpeedCrunch, Safe Eyes, NetHack, logiops, blueman, CUPS.