20 Things to Do After Installing Ubuntu 26.04 LTS (2026)

Tested on: Ubuntu 26.04 LTS (Resolute Raccoon) · Debian 12 · Fedora 44 · Arch Linux — Last updated: June 2026
A fresh Ubuntu install is a minimal foundation — the kernel is running, but the system isn't ready for real work. These 20 steps harden security, install the tools you'll actually use, tune performance, and eliminate the friction that slows down daily development workflows. Where commands differ across distros, Fedora/RHEL (DNF) and Arch (pacman) equivalents are shown inline.
- Prerequisites
- 1. Update the Entire System
- 2. Install Essential CLI Tools
- 3. Install GPU Drivers
- 4. Enable the Firewall
- 5. Install Flatpak and Add Flathub
- 6. Install a Better Browser
- 7. Configure Git
- 8. Set Up a Python Development Environment
- 9. Install Docker
- 10. Enable Automatic Security Updates
- 11. Install and Configure tmux
- 12. Switch to Zsh with Oh My Zsh
- 13. Harden SSH
- 14. Install VS Code
- 15. Set Up System Backups with Timeshift
- 16. Install Bitwarden for Password Management
- 17. Enable SSD TRIM
- 18. Install Ollama for Local AI
- 19. Manage Dotfiles with a Git Bare Repository
- 20. Install a Nerd Font and Configure Your Terminal
Prerequisites
- Ubuntu 26.04 LTS installed (minimal or full desktop)
- A user account with
sudoprivileges - Working internet connection
- Basic familiarity with the terminal
1. Update the Entire System
Before touching anything else, bring the system fully up to date. The installer image may be months old.
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
# Fedora
sudo dnf update -y
# Arch
sudo pacman -SyuReboot after kernel or firmware updates: sudo reboot
2. Install Essential CLI Tools
These cover network diagnostics, archive handling, build toolchains, and shell quality-of-life. Install them once and you won't be hunting for them later.
# Ubuntu/Debian
sudo apt install -y
curl wget git vim htop btop
build-essential net-tools
unzip p7zip-full
bash-completion software-properties-common
dnsutils traceroute nmap
jq tree ncdu fd-find ripgrep
# Fedora
sudo dnf install -y curl wget git vim htop btop
gcc make net-tools unzip p7zip bash-completion
bind-utils traceroute nmap jq tree ncdu fd-find ripgrep
# Arch
sudo pacman -S --needed curl wget git vim htop btop
base-devel net-tools unzip p7zip bash-completion
bind-tools traceroute nmap jq tree ncdu fd ripgrepbtop is a modern replacement for htop with GPU visibility. ripgrep and fd are faster alternatives to grep and find that you'll use constantly once you have them.
3. Install GPU Drivers
NVIDIA
# Ubuntu — let the system detect the best driver
sudo ubuntu-drivers autoinstall
# Or pin a specific version (check available versions first)
ubuntu-drivers devices
sudo apt install nvidia-driver-550
# Fedora (RPM Fusion required)
sudo dnf install akmod-nvidia xorg-x11-drv-nvidia-cuda
# Arch
sudo pacman -S nvidia nvidia-utils nvidia-settingsAfter installing NVIDIA drivers, reboot and verify with:
nvidia-smi+-----------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 CUDA Version: 12.4 |
+-----------------------------------------------------------------------------+AMD
AMD GPU support is built into the kernel via the amdgpu driver. For the latest firmware blobs (fixes for newer GPUs):
# Ubuntu
sudo apt install linux-firmware
sudo update-initramfs -u4. Enable the Firewall
Ubuntu ships with ufw installed but disabled. Enable it now, before opening any services.
# Ubuntu — ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh # If you plan to SSH into this machine
sudo ufw enable
sudo ufw status verboseStatus: active
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere# Fedora — firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --state
sudo firewall-cmd --list-all
# Arch — install ufw first
sudo pacman -S ufw
sudo systemctl enable --now ufw
sudo ufw enable5. Install Flatpak and Add Flathub
Flatpak provides sandboxed, distro-agnostic application packaging. Flathub is the primary repository. Ubuntu still ships Snap by default, but Flatpak gives you a much broader and more consistently updated app catalog.
# Ubuntu/Debian
sudo apt install flatpak gnome-software-plugin-flatpak
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Fedora (Flatpak is pre-installed; just add Flathub)
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# Arch
sudo pacman -S flatpakLog out and back in after this step so Flatpak paths are picked up by your desktop session.
6. Install a Better Browser
Ubuntu 26.04 ships Firefox as a Snap. The native .deb from Mozilla's own repository is faster to start and easier to manage.
# Remove Snap Firefox first (Ubuntu)
sudo snap remove firefox
# Add Mozilla's official apt repository
sudo install -d -m 0755 /etc/apt/keyrings
wget -q https://packages.mozilla.org/apt/repo-signing-key.gpg -O- |
sudo tee /etc/apt/keyrings/packages.mozilla.org.asc > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/packages.mozilla.org.asc]
https://packages.mozilla.org/apt mozilla main" |
sudo tee /etc/apt/sources.list.d/mozilla.list
sudo apt update && sudo apt install firefox -y
# Or install Brave
curl -fsS https://dl.brave.com/install.sh | sh# Arch
sudo pacman -S firefox
# Brave via AUR
yay -S brave-bin7. Configure Git
Set your identity and defaults globally. This avoids git nagging you on every repo and ensures commits are attributed correctly.
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global core.editor vim
git config --global init.defaultBranch main
git config --global pull.rebase false
git config --global core.autocrlf inputGenerate an Ed25519 SSH key for GitHub/GitLab (stronger and shorter than RSA):
ssh-keygen -t ed25519 -C "you@example.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
cat ~/.ssh/id_ed25519.pub
# Paste this output into GitHub → Settings → SSH KeysTest the connection:
ssh -T git@github.com
# Hi yourusername! You've successfully authenticated...8. Set Up a Python Development Environment
Ubuntu ships a system Python that you should never pollute with pip installs. Use pyenv for version management and virtual environments for project isolation.
# Ubuntu/Debian — system packages first
sudo apt install -y python3 python3-pip python3-venv pipx
# Install pyenv (all distros)
curl https://pyenv.run | bashAdd to ~/.bashrc or ~/.zshrc:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"source ~/.bashrc
# Install a specific Python version
pyenv install 3.12.4
pyenv global 3.12.4
python --version
# Python 3.12.49. Install Docker
Use the official install script — it handles repo setup, GPG keys, and package installation in one step.
# Ubuntu — official script
curl -fsSL https://get.docker.com | sudo sh
# Add your user to the docker group (avoids sudo for every docker command)
sudo usermod -aG docker $USER
newgrp docker
# Verify
docker run --rm hello-world# Fedora
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# Arch
sudo pacman -S docker docker-compose
sudo systemctl enable --now docker
sudo usermod -aG docker $USER10. Enable Automatic Security Updates
You don't want to manually apply CVE patches. Configure unattended security updates — they apply only security fixes, not version upgrades that could break things.
# Ubuntu — unattended-upgrades (usually pre-installed)
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
# Select "Yes" at the promptVerify the configuration at /etc/apt/apt.conf.d/50unattended-upgrades. The key lines should be uncommented:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";# Fedora
sudo dnf install dnf-automatic
sudo systemctl enable --now dnf-automatic.timer
# Configure /etc/dnf/automatic.conf: set apply_updates = yes11. Install and Configure tmux
tmux keeps sessions alive over SSH drops and lets you split your terminal into panes. Essential for any server work.
sudo apt install tmux # Ubuntu
sudo dnf install tmux # Fedora
sudo pacman -S tmux # ArchCreate a minimal ~/.tmux.conf:
cat > ~/.tmux.conf << 'EOF'
set -g prefix C-a
unbind C-b
bind C-a send-prefix
set -g mouse on
set -g history-limit 10000
set -g base-index 1
set -g default-terminal "screen-256color"
EOFKey workflow: tmux new -s main to start, Ctrl+a d to detach, tmux attach -t main to reconnect.
12. Switch to Zsh with Oh My Zsh
sudo apt install zsh # Ubuntu
sudo dnf install zsh # Fedora
sudo pacman -S zsh # Arch
# Install Oh My Zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Install syntax highlighting and autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlightingIn ~/.zshrc, update the plugins line:
plugins=(git docker python zsh-autosuggestions zsh-syntax-highlighting)Then: source ~/.zshrc
13. Harden SSH
sudo apt install openssh-server # Ubuntu
sudo systemctl enable --now sshEdit /etc/ssh/sshd_config:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
X11Forwarding no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2sudo sshd -t # Test config for syntax errors
sudo systemctl restart sshOnly disable password auth after you've confirmed key-based login works from another terminal session.
14. Install VS Code
# Ubuntu/Debian — official Microsoft repo
wget -qO- https://packages.microsoft.com/keys/microsoft.asc |
gpg --dearmor | sudo tee /etc/apt/keyrings/packages.microsoft.gpg > /dev/null
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/packages.microsoft.gpg]
https://packages.microsoft.com/repos/code stable main" |
sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update && sudo apt install code
# Fedora
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[code]nname=VS Codenbaseurl=https://packages.microsoft.com/yumrepos/vscodenenabled=1ngpgcheck=1ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
sudo dnf install code
# Arch (AUR)
yay -S visual-studio-code-bin15. Set Up System Backups with Timeshift
A misconfigured package or kernel update can leave you with an unbootable system. Timeshift creates incremental filesystem snapshots you can restore in minutes — before that happens.
# Ubuntu
sudo apt install timeshift
# Fedora
sudo dnf install timeshift
# Arch (AUR)
yay -S timeshiftOpen Timeshift from the application launcher. Choose RSYNC as the snapshot type, select your system partition as the target, and set a schedule (daily snapshots, keep last 5). Run a manual snapshot immediately after setup:
sudo timeshift --create --comments "fresh install baseline"
sudo timeshift --listStore snapshots on a separate partition or external drive, not the same disk as the system. A snapshot on a failing disk recovers nothing.
16. Install Bitwarden for Password Management
Reusing passwords or storing them in a browser is a security hole. Bitwarden is open-source, self-hostable, and has a native Linux desktop app plus browser extension.
# Install via Flatpak (all distros)
flatpak install flathub com.bitwarden.desktop
# Or download the .deb / .rpm from bitwarden.com
# CLI version (for terminal use and scripting)
sudo apt install bitwarden-cli # Ubuntu — or via npm:
npm install -g @bitwarden/cli
# Verify CLI
bw --version
bw loginOnce logged in, you can pull credentials directly from the terminal: bw get password github.com. Useful for automation scripts that need credentials without hardcoding them.
17. Enable SSD TRIM
If you're running Ubuntu on an SSD, TRIM tells the drive which blocks are no longer in use, preventing write performance from degrading over months. Ubuntu enables it by default — verify it's active:
# Check if TRIM is supported by your drive
sudo hdparm -I /dev/sda | grep -i trim
# Check the fstrim timer status
sudo systemctl status fstrim.timer
# Enable if not active
sudo systemctl enable fstrim.timer --now
# Run TRIM manually once
sudo fstrim -v /The weekly fstrim timer is enough for most workloads. Daily TRIM is rarely needed and adds unnecessary wear cycles on low-end drives.
18. Install Ollama for Local AI
Run large language models locally — no API key, no data leaving your machine. Ollama handles downloads, GPU offloading, and exposes a local API compatible with OpenAI clients.
# Install Ollama (all distros)
curl -fsSL https://ollama.com/install.sh | sh
# Start the service
sudo systemctl enable --now ollama
# Pull and run a model
ollama pull llama3.2
ollama run llama3.2
# List available models
ollama list
# Use via API
curl http://localhost:11434/api/generate -d '{
"model": "llama3.2",
"prompt": "Explain Linux namespaces in one paragraph",
"stream": false
}'For GPU acceleration: NVIDIA users need CUDA installed (covered in step 3). AMD users on ROCm-supported hardware get automatic GPU offloading. CPU-only inference is slower but works on any machine.
19. Manage Dotfiles with a Git Bare Repository
Your shell config, tmux settings, vim/neovim config, and git globals are the foundation of your workflow. A bare git repo lets you version-control them without symlinks or external tools.
# Initialize a bare repo in your home directory
git init --bare $HOME/.dotfiles
# Create an alias (add to ~/.bashrc or ~/.zshrc)
echo "alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'" >> ~/.bashrc
source ~/.bashrc
# Suppress untracked files (your entire home would show otherwise)
dotfiles config --local status.showUntrackedFiles no
# Start tracking files
dotfiles add ~/.bashrc ~/.zshrc ~/.gitconfig ~/.tmux.conf
dotfiles commit -m "initial dotfiles"
# Push to a private remote
dotfiles remote add origin git@github.com:youruser/dotfiles.git
dotfiles push -u origin mainOn a new machine, clone with: git clone --bare git@github.com:youruser/dotfiles.git $HOME/.dotfiles then check out. Your entire environment is reproducible in minutes.
20. Install a Nerd Font and Configure Your Terminal
Nerd Fonts patch developer fonts with thousands of icons used by tools like Starship prompt, lsd, bat, and neovim plugins. Without them, your terminal renders boxes instead of icons.
# Download JetBrains Mono Nerd Font (popular choice)
mkdir -p ~/.local/share/fonts
cd ~/.local/share/fonts
wget https://github.com/ryanoasis/nerd-fonts/releases/latest/download/JetBrainsMono.tar.xz
tar -xf JetBrainsMono.tar.xz
fc-cache -fv
# Verify font is available
fc-list | grep -i jetbrainsSet the font in your terminal emulator: GNOME Terminal → Preferences → Profile → Text → Custom font → "JetBrainsMono Nerd Font Mono". Then install a modern prompt:
# Install Starship prompt (all distros)
curl -sS https://starship.rs/install.sh | sh
# Add to ~/.bashrc or ~/.zshrc
echo 'eval "$(starship init bash)"' >> ~/.bashrc
# or for zsh:
echo 'eval "$(starship init zsh)"' >> ~/.zshrc
source ~/.bashrcStarship auto-detects git branches, Python virtualenvs, Node.js versions, and Kubernetes contexts — showing only what's relevant in the current directory.
