Arcturus

  • Home
  • Posts
  • About
  • Contact
Arc-Jr

Building the future with React, TypeScript, and modern web technologies.

Navigation

  • Home
  • Posts
  • About
  • Contact

Resources

  • GitHub
  • Bun Documentation
  • React Documentation

2026 Arc-Jr. All rights reserved.

Built with love using React 19 and Bun

Posts/Ubuntu 24.04 Developer Environment Setup Guide
linuxubuntudeveloper

Ubuntu 24.04 Developer Environment Setup Guide

This guide provides reproducible steps for setting up a consistent software developer environment across different Ubuntu 24.04 installation types. This guide elicits my preferences in an Ubuntu linux environment, but can be scaled up or down rather easily.

November 10, 202512 min read
Several squirtles in sunglasses looking tough

On this page

  • Table of Contents
  • Section A: Fresh Ubuntu Install on Computer
  • 1. System Update
  • 2. Install Essential Build Tools
  • 3. Install ZSH and Oh My Zsh
  • 4. Install Mise
  • 5. Install Programming Languages
  • Rust (Direct Install - NOT via Mise)
  • Go (Direct Install - NOT via Mise)
  • Node.js (via Mise)
  • Bun (Direct Install - NOT via Mise)
  • Python (via Mise)
  • Additional Languages
  • 6. Install Docker
  • 7. Install Podman
  • 8. Database Setup via Docker/Podman
  • PostgreSQL Container
  • SQLite Container
  • Neo4j Container
  • 9. Install Terminal Tools
  • Ghostty (with fallback)
  • Zellij
  • Neovim
  • LazyVim
  • LazyDocker
  • 10. Install AI Tools
  • Ollama
  • Amazon Q
  • Claude Code
  • loclaude (Local Claude Code with Ollama)
  • 11. Install Development Tools
  • GitHub CLI
  • 12. Install IDEs
  • VSCode
  • Zed
  • 13. Install Browsers
  • Brave
  • Firefox
  • 14. Install Design Tools
  • Figma
  • 15. Configure Git
  • 16. Reboot
  • Section B: VirtualBox Ubuntu on Windows
  • Prerequisites on Windows Host
  • VirtualBox VM Setup
  • Continue with Section A Steps
  • Section C: Ubuntu on Windows via WSL2
  • Prerequisites on Windows
  • WSL-Specific Configuration
  • Enable systemd
  • Install Windows Terminal (Optional but Recommended)
  • Continue with Section A Steps
  • VSCode WSL Integration
  • Section D: Omakub-based Setup
  • 1. Install Omakub
  • 2. Post-Omakub Customizations
  • Install Rust (NOT via Mise)
  • Install Go (Direct Install)
  • Install Languages via Mise
  • Install Bun (NOT via Mise)
  • Install Podman
  • Install Zellij
  • Install LazyVim
  • Install LazyDocker
  • Install Ollama
  • Install Amazon Q
  • Install Claude Code
  • Install loclaude
  • Install VSCode
  • Install Zed
  • Install Brave Browser
  • Install Figma
  • Install C# Support
  • 3. Setup Databases via Docker
  • 4. Configure Git
  • 5. Reboot
  • Post-Installation Verification
  • Troubleshooting
  • Mise not found after installation
  • Docker permission denied
  • WSL systemd not working
  • Go not found after installation
  • loclaude doctor fails
  • loclaude GPU not detected
  • Maintenance
  • Update all Mise tools
  • Update Rust
  • Update Go
  • Update system packages
  • Update Bun
  • Update loclaude
  • Update Ollama models

View the Github Gist here.

v1.1.0-rc.1

Last updated 2025-01-25

This guide provides reproducible steps for setting up a consistent software developer environment across different Ubuntu 24.04 installation types. This guide elicits some of my preferences in an Ubuntu linux environment, but can be scaled up or down rather easily.

Table of Contents

  • Section A: Fresh Ubuntu Install on Computer
  • Section B: VirtualBox Ubuntu on Windows
  • Section C: Ubuntu on Windows via WSL2
  • Section D: Omakub-based Setup

Section A: Fresh Ubuntu Install on Computer

1. System Update

sudo apt update && sudo apt upgrade -y

2. Install Essential Build Tools

sudo apt install -y build-essential curl wget git ssh libssl-dev pkg-config \ ca-certificates gnupg lsb-release software-properties-common

3. Install ZSH and Oh My Zsh

# Install ZSH sudo apt install -y zsh # Set ZSH as default shell chsh -s $(which zsh) # Install Oh My Zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

4. Install Mise

Mise Documentation

curl https://mise.run | sh echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc source ~/.zshrc

5. Install Programming Languages

Rust (Direct Install - NOT via Mise)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source "$HOME/.cargo/env"

Go (Direct Install - NOT via Mise)

Go is installed directly from the official tarball. This provides more control over the installation and avoids potential issues with mise shims in certain toolchains.

# Remove any existing Go installation sudo rm -rf /usr/local/go # Download and extract Go (check https://go.dev/dl/ for latest version) GO_VERSION="1.23.4" wget "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" sudo tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" rm "go${GO_VERSION}.linux-amd64.tar.gz" # Add Go to PATH echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.zshrc echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.zshrc source ~/.zshrc # Verify installation go version

Alternative: Go via Mise

If you prefer version management through Mise:

mise use --global go@latest

Node.js (via Mise)

mise use --global node@lts

Bun (Direct Install - NOT via Mise)

curl -fsSL https://bun.sh/install | bash

Python (via Mise)

mise use --global python@latest

Additional Languages

# C/C++ (already installed via build-essential) # C# sudo apt install -y dotnet-sdk-8.0 # Zig mise use --global zig@latest # Elixir mise use --global elixir@latest # Java mise use --global java@latest

6. Install Docker

# Add Docker's official GPG key sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg # Add repository echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # Install Docker sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # Add user to docker group sudo usermod -aG docker $USER newgrp docker

7. Install Podman

sudo apt install -y podman

8. Database Setup via Docker/Podman

Databases are primarily run as containers. Here are example commands:

PostgreSQL Container

docker run -d \ --name postgres \ -e POSTGRES_PASSWORD=postgres \ -p 5432:5432 \ -v postgres_data:/var/lib/postgresql/data \ postgres:latest

SQLite Container

docker run -d \ --name sqlite \ -v sqlite_data:/data \ nouchka/sqlite3:latest

Neo4j Container

docker run -d \ --name neo4j \ -p 7474:7474 -p 7687:7687 \ -e NEO4J_AUTH=neo4j/password \ -v neo4j_data:/data \ neo4j:latest

Note: Replace docker with podman if using Podman.

9. Install Terminal Tools

Ghostty (with fallback)

# Try installing Ghostty # Check https://ghostty.org for latest installation instructions # If unavailable, use Alacritty as fallback: # sudo apt install -y alacritty

Zellij

cargo install zellij

Neovim

mise use --global neovim@latest # Using apt # sudo apt install -y neovim

LazyVim

# Backup existing config mv ~/.config/nvim ~/.config/nvim.bak 2>/dev/null mv ~/.local/share/nvim ~/.local/share/nvim.bak 2>/dev/null # Install LazyVim git clone https://github.com/LazyVim/starter ~/.config/nvim rm -rf ~/.config/nvim/.git

LazyDocker

curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash

10. Install AI Tools

Ollama

curl -fsSL https://ollama.com/install.sh | sh

Amazon Q

# Install via npm npm install -g @aws/amazon-q-developer-cli

Claude Code

npm install -g @anthropic-ai/claude-code

loclaude (Local Claude Code with Ollama)

loclaude Documentation

loclaude lets you run Claude Code against local Ollama models instead of the Anthropic API. Useful for avoiding rate limits and keeping code on your machine.

Prerequisites: Docker, Claude Code CLI, and Ollama v0.14.2+ (loclaude can manage Ollama via Docker).

# Install via npm npm install -g loclaude # Or via bun (recommended) bun install -g loclaude # Verify installation and check prerequisites loclaude doctor

Quick Start:

# Initialize a project with Docker Compose for Ollama + Open WebUI loclaude init # Start the Ollama container loclaude docker-up # Pull a model (GPU with 16GB+ VRAM) loclaude models-pull qwen3-coder:30b # Or for CPU / limited VRAM loclaude models-pull qwen2.5-coder:7b # Run Claude Code with local model loclaude run

GPU vs CPU Mode:

  • loclaude init auto-detects GPU availability
  • Use loclaude init --no-gpu to force CPU-only mode
  • CPU mode works but expect ~10-20 tokens/sec with smaller models

Configuration (.loclaude/config.json):

{ "ollama": { "url": "http://localhost:11434", "defaultModel": "qwen3-coder:30b" }, "docker": { "composeFile": "./docker-compose.yml", "gpu": true } }

Common Commands:

loclaude docker-up # Start containers loclaude docker-down # Stop containers loclaude docker-status # Check container status loclaude models # List installed models loclaude models-pull <name> # Pull a model loclaude run # Run Claude Code (interactive model picker) loclaude run -m <model> # Run with specific model loclaude doctor # Check system requirements

11. Install Development Tools

GitHub CLI

sudo apt install -y gh

12. Install IDEs

VSCode

# Download from vendor wget -O vscode.deb 'https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64' sudo dpkg -i vscode.deb sudo apt install -f -y rm vscode.deb

Zed

# Download from vendor # TODO resolve issues with GPU renderer via vulkan installation curl -f https://zed.dev/install.sh | sh

13. Install Browsers

Brave

# Download from vendor wget -O brave.deb 'https://laptop-updates.brave.com/latest/linux' sudo dpkg -i brave.deb sudo apt install -f -y rm brave.deb

Firefox

# Download from vendor wget -O firefox.tar.bz2 'https://download.mozilla.org/?product=firefox-latest&os=linux64&lang=en-US' tar -xjf firefox.tar.bz2 sudo mv firefox /opt/ sudo ln -s /opt/firefox/firefox /usr/local/bin/firefox rm firefox.tar.bz2

14. Install Design Tools

Figma

# Download from vendor wget -O figma.AppImage 'https://desktop.figma.com/linux/Figma.AppImage' chmod +x figma.AppImage sudo mv figma.AppImage /opt/figma sudo ln -s /opt/figma /usr/local/bin/figma

15. Configure Git

git config --global user.name "Your Name" git config --global user.email "your.email@example.com" git config --global init.defaultBranch main

16. Reboot

sudo reboot

Section B: VirtualBox Ubuntu on Windows

Prerequisites on Windows Host

  1. Download and install VirtualBox
  2. Download Ubuntu 24.04 Desktop ISO

VirtualBox VM Setup

  1. Create New VM

    • Name: Ubuntu-Dev
    • Type: Linux
    • Version: Ubuntu (64-bit)
    • Memory: 8192 MB (minimum, 16384 MB recommended)
    • Create virtual hard disk: VDI, Dynamically allocated, 50 GB minimum
  2. VM Settings

    • System → Processor: 4 CPUs minimum
    • Display → Video Memory: 128 MB
    • Storage → Add Ubuntu ISO to optical drive
    • Network → Adapter 1: NAT or Bridged Adapter
  3. Install Ubuntu

    • Start VM and follow Ubuntu installation wizard
    • Choose "Normal installation"
    • Install third-party software for graphics and Wi-Fi hardware
  4. Install VirtualBox Guest Additions

sudo apt update sudo apt install -y build-essential dkms linux-headers-$(uname -r) # Insert Guest Additions CD from VirtualBox menu: Devices → Insert Guest Additions CD sudo mount /dev/cdrom /mnt sudo /mnt/VBoxLinuxAdditions.run sudo reboot
  1. Enable Shared Clipboard and Drag-and-Drop
    • VirtualBox menu: Devices → Shared Clipboard → Bidirectional
    • Devices → Drag and Drop → Bidirectional

Continue with Section A Steps

After Guest Additions installation, follow all steps from Section A starting from step 1.


Section C: Ubuntu on Windows via WSL2

Prerequisites on Windows

  1. Enable WSL2

Open PowerShell as Administrator:

wsl --install

If WSL is already installed, ensure WSL2 is default:

wsl --set-default-version 2
  1. Install Ubuntu 24.04
wsl --install -d Ubuntu-24.04
  1. Launch Ubuntu and Create User

Launch "Ubuntu 24.04" from Start menu and create your user account.

WSL-Specific Configuration

Enable systemd

sudo tee /etc/wsl.conf > /dev/null <<EOF [boot] systemd=true [interop] enabled=true appendWindowsPath=true EOF

Restart WSL from PowerShell:

wsl --shutdown

Relaunch Ubuntu.

Install Windows Terminal (Optional but Recommended)

From PowerShell:

winget install Microsoft.WindowsTerminal

Continue with Section A Steps

Follow all steps from Section A with these WSL-specific notes:

Modifications for WSL:

  1. Docker: Use Docker Desktop for Windows with WSL2 backend instead of Docker CE:

    • Install Docker Desktop for Windows
    • Enable WSL2 integration in Docker Desktop settings
    • Skip Docker installation steps from Section A
  2. loclaude: Works in WSL2 with Docker Desktop integration. Ensure Docker Desktop WSL2 backend is enabled.

  3. Ghostty: Not available on WSL. Use Windows Terminal instead.

  4. GUI Applications:

    • VSCode: Install on Windows and use WSL extension
    • Browsers: Use Windows versions
    • Figma: Use Windows version or web app
  5. Zed: Install Windows version if available, or use VSCode

VSCode WSL Integration

On Windows, install VSCode and the WSL extension:

winget install Microsoft.VisualStudioCode

In VSCode, install the "WSL" extension. Then from Ubuntu terminal:

code .

This will connect VSCode on Windows to your WSL environment.


Section D: Omakub-based Setup

Omakub is an opinionated Ubuntu 24.04 setup that includes many developer tools out of the box.

1. Install Omakub

wget -qO- https://omakub.org/install | bash

This will install:

  • ZSH with Oh My Zsh
  • Docker
  • Neovim
  • Various terminal tools
  • And more...

2. Post-Omakub Customizations

After Omakub installation, add the following tools specific to your workflow:

Install Rust (NOT via Mise)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh source "$HOME/.cargo/env"

Install Go (Direct Install)

# Remove any existing Go installation sudo rm -rf /usr/local/go # Download and extract Go GO_VERSION="1.23.4" wget "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" sudo tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" rm "go${GO_VERSION}.linux-amd64.tar.gz" # Add Go to PATH echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.zshrc echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.zshrc source ~/.zshrc

Install Languages via Mise

mise use --global node@lts mise use --global python@latest mise use --global zig@latest mise use --global elixir@latest mise use --global java@latest

Install Bun (NOT via Mise)

curl -fsSL https://bun.sh/install | bash

Install Podman

sudo apt install -y podman

Install Zellij

cargo install zellij

Install LazyVim

mv ~/.config/nvim ~/.config/nvim.bak 2>/dev/null mv ~/.local/share/nvim ~/.local/share/nvim.bak 2>/dev/null git clone https://github.com/LazyVim/starter ~/.config/nvim rm -rf ~/.config/nvim/.git

Install LazyDocker

curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash

Install Ollama

curl -fsSL https://ollama.com/install.sh | sh

Install Amazon Q

npm install -g @aws/amazon-q-developer-cli

Install Claude Code

npm install -g @anthropic-ai/claude-code

Install loclaude

# Via npm npm install -g loclaude # Or via bun bun install -g loclaude # Verify loclaude doctor # Quick setup for a project loclaude init loclaude docker-up loclaude models-pull qwen3-coder:30b

Install VSCode

wget -O vscode.deb 'https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64' sudo dpkg -i vscode.deb sudo apt install -f -y rm vscode.deb

Install Zed

curl -f https://zed.dev/install.sh | sh

Install Brave Browser

wget -O brave.deb 'https://laptop-updates.brave.com/latest/linux' sudo dpkg -i brave.deb sudo apt install -f -y rm brave.deb

Install Figma

wget -O figma.AppImage 'https://desktop.figma.com/linux/Figma.AppImage' chmod +x figma.AppImage sudo mv figma.AppImage /opt/figma sudo ln -s /opt/figma /usr/local/bin/figma

Install C# Support

sudo apt install -y dotnet-sdk-8.0

3. Setup Databases via Docker

Follow the same database container setup from Section A, Step 8.

4. Configure Git

git config --global user.name "Your Name" git config --global user.email "your.email@example.com" git config --global init.defaultBranch main

5. Reboot

sudo reboot

Post-Installation Verification

Run these commands to verify installations:

# Languages rustc --version go version node --version bun --version python --version # Tools docker --version podman --version zellij --version nvim --version gh --version ollama --version # AI Tools claude --version loclaude --version loclaude doctor # Databases (if running containers) docker ps # Check running containers

Troubleshooting

Mise not found after installation

export PATH="$HOME/.local/bin:$PATH" echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

Docker permission denied

sudo usermod -aG docker $USER newgrp docker

WSL systemd not working

Ensure Windows version is 11 or Windows 10 with build 19041 or higher.

Go not found after installation

export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:$HOME/go/bin echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.zshrc echo 'export PATH=$PATH:$HOME/go/bin' >> ~/.zshrc source ~/.zshrc

loclaude doctor fails

Common issues:

# Docker not running sudo systemctl start docker # Ollama version too old (requires >= 0.14.2) loclaude docker-down docker pull ollama/ollama:latest loclaude docker-up # Claude Code not installed npm install -g @anthropic-ai/claude-code

loclaude GPU not detected

# Verify NVIDIA drivers nvidia-smi # Test Docker GPU access docker run --rm --gpus all nvidia/cuda:12.0-base nvidia-smi # If missing, install NVIDIA Container Toolkit sudo apt install -y nvidia-container-toolkit sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker # Re-init with GPU loclaude init --gpu --force

Maintenance

Update all Mise tools

mise upgrade

Update Rust

rustup update

Update Go

# Check current version go version # Download new version (update GO_VERSION) GO_VERSION="1.23.4" sudo rm -rf /usr/local/go wget "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" sudo tar -C /usr/local -xzf "go${GO_VERSION}.linux-amd64.tar.gz" rm "go${GO_VERSION}.linux-amd64.tar.gz" go version

Update system packages

sudo apt update && sudo apt upgrade -y

Update Bun

bun upgrade

Update loclaude

npm update -g loclaude # or bun update -g loclaude

Update Ollama models

loclaude models-pull qwen3-coder:30b # Re-pull to get latest