Setting Up a New PC / Server with Pop!_OS 22.04

Software engineer and entrepreneur based in San Francisco.
I use a lot of checklists -- here's another one of mine, this time for setting up a PC / server with Pop!_OS. While these instructions are written specifically for Pop!_OS, they should work similarly for Ubuntu with minor adjustments.
Pre-Installation Steps
1. BIOS Configuration
Most modern PCs require disabling Secure Boot and TPM/device security features to install Linux distributions. To access BIOS:
- Power on your PC
- Immediately press and hold the
Delete
key- If that doesn't work, try tapping
F2
,F8
, orF12
during startup - Different manufacturers use different keys, but
Delete
is increasingly common
- If that doesn't work, try tapping
Navigate to:
- Security/Boot section
- Disable "Secure Boot"
- Disable "TPM Security" if present
- Save changes and exit
2. Boot Order Configuration
While still in BIOS:
- Navigate to Boot Order/Boot Priority section
- Move USB drive to the top of the boot order
- Save changes and exit
3. Prepare Installation Media
- Download the OS:
- Pop!_OS 22.04
- Or Ubuntu 22.04 if you prefer
- Download Etcher to create bootable USB
- Use Etcher to flash the OS image to your USB drive
Installation Process
Partitioning Guide
When you reach the disk partitioning step, here's how to set up your partitions:
Why These Partitions?
- EFI partition stores bootloader files
- Root partition holds your OS and all data
- Modern systems with sufficient RAM often don't need swap
EFI System Partition
Partition Name: EFI
Label: EFI
Create as: Primary Partition
File System: fat32
Mount point: /boot/efi
Size: 1GB # Being generous for safety
Root Partition
Partition Name: Root
Label: Pop_OS
Create as: Primary Partition
File System: ext4
Mount point: /
Size: Remaining space
💡 Pro tip: Leave 10MB free space before and after partitions for potential future adjustments.
Post-Installation Setup
System Updates
APT vs Pop!_Shop Pop!_OS uses APT for CLI package management and Pop!_Shop for GUI. Stick to one to avoid conflicts - I prefer APT for servers.
# Update package lists and upgrade system
sudo apt update
sudo apt upgrade
Setting Hostname
sudo hostnamectl set-hostname NEW_HOSTNAME
SSH Server Setup
Why SSH? SSH provides secure remote access to your server. Using key-based authentication is more secure than passwords.
# Install SSH server
sudo apt install openssh-server
# Configure SSH
sudo nano /etc/ssh/sshd_config
Add/modify these lines:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Set up SSH keys:
# Create .ssh directory
sudo mkdir -p ~/.ssh
sudo chmod 700 ~/.ssh
# Add your public key
echo "your-public-key" > ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# For root (if needed)
sudo mkdir -p /root/.ssh
sudo chmod 700 /root/.ssh
sudo cp ~/.ssh/authorized_keys /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys
Docker Installation
Why Docker? Docker containers provide isolated environments for running applications, making deployment and management easier.
Follow the official Docker installation guide for the latest instructions.
AppImage Management
# Create applications directory
sudo mkdir -p /opt/applications
# For each AppImage:
chmod +x your-app.AppImage
sudo mv your-app.AppImage /opt/applications/
# Create desktop entry
cat << EOF > ~/.local/share/applications/your-app.desktop
[Desktop Entry]
Name=Your App Name
Exec=/opt/applications/your-app.AppImage
Icon=/path/to/icon.png
Type=Application
Categories=Utility;
EOF
Set Micro as Default Editor
# Install Micro
sudo apt install micro
# Set as default editor
sudo update-alternatives --install /usr/bin/editor editor /usr/local/bin/micro 100
sudo update-alternatives --config editor
# Configure for git
echo 'export VISUAL=micro' >> ~/.bashrc
echo 'export EDITOR=micro' >> ~/.bashrc
source ~/.bashrc
Enable Automatic Reboot
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
Essential Tools Installation
Here's my curated list of must-have tools for development:
Tool | Description | Installation |
---|---|---|
Homebrew | Package manager | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
Lazygit | Git TUI | brew install lazygit |
Lazydocker | Docker TUI | brew install jesseduffield/lazydocker/lazydocker |
Node.js & npm | JavaScript runtime | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash |
pnpm | Fast package manager | npm install -g pnpm |
Python | Python runtime | sudo apt install python3 python3-pip |
pipx | Python app installer | python3 -m pip install --user pipx |
uv | Fast Python packager | curl -LsSf https://astral.sh/uv/install.sh | sh |
Warp | Modern terminal | Visit warp.dev for installation |
Micro | Terminal editor | sudo apt install micro |
Remember to test all services and configurations before considering the setup complete. This checklist has served me well in setting up numerous servers - I hope it helps you too!