This is a practical 101 checklist for turning a fresh Ubuntu install into a useful daily workstation.

It is not a perfect dotfiles repo or a minimal Linux manifesto. The goal is simpler: get the machine updated, predictable, synced, backed up, and comfortable enough for daily work.

The Short Version

Area Good Default
System updates Update packages first, then reboot if the kernel changed
Drivers Check Additional Drivers before debugging display, Wi-Fi, or GPU issues
Package sources Use APT for system packages, Flatpak for desktop apps, official .deb or AppImage builds when needed
Browsers Keep Firefox as a baseline, then add Helium or Zen Browser if they fit your workflow
Sync Use the official Nextcloud Desktop client for a Nextcloud server; use Syncthing for peer-to-peer folders
Editor Try Gram if you want a modern open-source code editor; keep a terminal editor installed too
Terminal Use Ghostty for the terminal window, tmux for durable sessions, and Herdr for agent-heavy terminal work
Backups Configure file backups before you customize everything
Security Enable the firewall, use a password manager, set up SSH keys, and avoid random install scripts

First Hour Checklist

Start with updates and the boring tools you will need repeatedly:

sudo apt update
sudo apt upgrade

sudo apt install \
  ca-certificates \
  curl \
  git \
  gnupg \
  build-essential \
  unzip \
  p7zip-full \
  htop \
  btop \
  tree \
  ripgrep \
  fd-find \
  jq \
  fzf \
  direnv \
  tmux \
  flatpak \
  gnome-software-plugin-flatpak \
  ufw

If this is a laptop or desktop you sit in front of, enable the firewall:

sudo ufw enable
sudo ufw status

If this is a remote machine that you access over SSH, allow SSH before enabling the firewall:

sudo ufw allow OpenSSH
sudo ufw enable

Then check firmware and drivers:

  • open Software & Updates
  • check Additional Drivers
  • apply proprietary GPU or Wi-Fi drivers only when they match your hardware
  • reboot after kernel, driver, or firmware changes

Package Sources

Use different install paths for different kinds of software:

Source Use It For Notes
APT Core system tools, libraries, CLI utilities Best default for packages that integrate with the OS
Flatpak / Flathub Desktop applications Good isolation and usually fresher desktop builds
Official .deb Vendor-supported desktop apps Prefer the upstream package over random mirrors
AppImage Portable apps and one-off tools Easy to try, but use AppImageLauncher if you want desktop menu integration
Homebrew / mise / language managers Developer tools with fast release cycles Useful, but avoid mixing them blindly with system packages

The rule of thumb: install operating-system parts with the operating-system package manager, and install fast-moving user apps from the project’s official path.

If Flatpak is not already configured, add Flathub:

flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

Then restart the graphical software center or reboot once so desktop app listings refresh cleanly.

For AppImages, consider AppImageLauncher instead of manually keeping random .AppImage files in Downloads.

It is useful when you want:

  • AppImages moved into one predictable applications folder
  • desktop menu integration
  • easier launch behavior for apps that do not ship a .deb or Flatpak

Useful link:

Browsers

Keep Firefox installed even if it is not your main browser. It gives you a stable baseline for debugging websites, extensions, and login problems.

Then add one or two alternate browsers, not five.

Helium

Helium is a privacy-first Chromium-based browser that aims to remove the noisy parts of the modern browser experience.

It is useful when you want:

  • Chromium compatibility without making Chrome your daily browser
  • default ad and tracker blocking
  • a cleaner browser UI
  • official Linux packages instead of hand-rolled builds

Useful links:

Zen Browser

Zen Browser is another good candidate when you want a calmer daily browser rather than a stock browser profile with dozens of extensions.

It is useful when you want:

  • a modern desktop browser available on Linux
  • Flathub-friendly installation on Linux
  • a browser profile dedicated to writing, research, or logged-in work
  • separation from your default Firefox or Chromium profile

Useful links:

File Sync

For a normal Nextcloud setup, start with the official Nextcloud Desktop client.

Use it when you want:

  • automatic file sync between your laptop and a Nextcloud server
  • selective sync for large folders
  • desktop notifications for sync conflicts
  • a normal tray app that family members or coworkers can understand

Useful links:

If you do not need a server and just want peer-to-peer folder sync between machines, also look at Syncthing.

Useful link:

Security And Privacy Apps

Two desktop apps are worth configuring early because they affect the rest of your setup.

Bitwarden

Bitwarden is a good default password manager for a Linux desktop because it gives you browser extensions, desktop apps, mobile apps, and a self-hostable server path if you want one later.

Use it when you want:

  • one place for passwords, recovery codes, and secure notes
  • browser autofill without saving passwords in each browser profile
  • separate personal, work, and shared vaults
  • an easier path to using unique passwords everywhere

Useful links:

Proton VPN

Proton VPN is useful when you want a normal desktop VPN client for travel, public Wi-Fi, or separating everyday browsing from your home IP address.

Use it when you want:

  • a Linux VPN client from a privacy-focused provider
  • quick protection on airport, hotel, cafe, or coworking Wi-Fi
  • a separate network profile for casual browsing
  • VPN support without hand-maintaining raw WireGuard or OpenVPN configs

Useful links:

Code Editor

Install at least one graphical editor and one terminal editor.

For the graphical editor, Gram is worth testing if you want a modern open-source code editor with Linux builds.

Useful links:

For the terminal fallback:

sudo apt install vim nano

That fallback matters when your graphical session breaks, you SSH into the machine, or you need to edit a config file before the desktop tools are ready.

Terminal Stack

A practical terminal setup has three layers:

Layer Tool Role
Terminal emulator Ghostty The native terminal window you interact with
Session multiplexer tmux Durable panes, windows, detach, and reattach
Agent workspace Herdr Persistent terminal workspaces for coding agents

Ghostty

Ghostty is a fast native terminal emulator with Linux support.

Use it when you want a polished terminal window without building your workflow around a browser tab.

Useful links:

tmux

tmux is still the baseline for durable terminal sessions.

Use it when you want:

  • several shells inside one terminal
  • long-running commands that survive a closed terminal window
  • SSH-friendly detach and reattach
  • repeatable panes for logs, tests, servers, and editors

Start a session:

tmux new -s work

Detach with Ctrl-b, then d.

Reattach later:

tmux attach -t work

Useful link:

Herdr

Herdr makes more sense once you run coding agents or many supervised terminal tasks.

Use it when you want:

  • persistent terminal panes around tools like Codex, Claude Code, OpenCode, or similar agents
  • visible agent status across panes
  • a terminal-native workspace instead of a web dashboard
  • a control layer that can sit next to tmux-style workflows

Useful links:

Shell Quality of Life

These tools are small, but they compound quickly:

Tool Why Install It
ripgrep Fast text search across projects
fd-find Faster file finding than classic find for common interactive use
jq JSON filtering in scripts and API debugging
btop Process and resource monitoring
tree Quick folder structure previews
fzf Fuzzy selection for shell history, files, and scripts
direnv Per-project environment variables

On Ubuntu, some command names differ from upstream:

  • fd-find usually installs the command as fdfind
  • bat may install as batcat if you add it later

Backups Before Customization

Do this before spending hours tuning the desktop.

For normal user files:

  • use Backups / Deja Dup for a simple desktop backup
  • point it at an external disk, NAS, or cloud-backed folder
  • test restore at least once

For system snapshots:

  • consider Timeshift if you want OS-level restore points
  • keep snapshots on a separate disk if possible
  • do not confuse snapshots with real backups

For developer work:

  • push important repositories to Git remotes
  • keep dotfiles in a private Git repository if they contain machine-specific settings
  • never commit tokens, .env secrets, SSH private keys, or browser profiles

SSH And Git Basics

Generate a modern SSH key:

ssh-keygen -t ed25519 -C "[email protected]"

Start the agent and add the key:

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

Configure Git identity:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main

Use separate SSH keys for personal, work, and server automation contexts when possible.

Suggested Install Order

Use this order if you want a low-friction setup:

  1. Update Ubuntu and reboot.
  2. Check Additional Drivers.
  3. Install essential CLI packages.
  4. Enable the firewall.
  5. Configure backups.
  6. Install your browser set: Firefox baseline, then Helium or Zen Browser.
  7. Configure Bitwarden and Proton VPN.
  8. Install Nextcloud Desktop or Syncthing.
  9. Install Gram and terminal fallback editors.
  10. Install Ghostty.
  11. Configure tmux.
  12. Add Herdr only if you actually run agent-heavy terminal workflows.
  13. Create SSH keys and configure Git.
  14. Export or document the final app list.