Automated setup script for Linux distributions (Ubuntu and Fedora) with development tools and dotfiles. Supports both full desktop installations and minimal WSL2 setups.
- Ubuntu 24.04+ (via APT)
- Fedora Workstation (via DNF)
- WSL2 (Ubuntu or Fedora)
- Screenshots
- Quick Start
- Setup Modes
- Modular Architecture
- What Gets Installed
- Distribution-Specific Notes
sudo apt update
sudo apt install -y git# Generate SSH key
ssh-keygen -t ed25519 -C "your.email@example.com"
# Start the ssh-agent
eval "$(ssh-agent -s)"
# Add your SSH key to the agent
ssh-add ~/.ssh/id_ed25519
# Display your public key
cat ~/.ssh/id_ed25519.pubAdd the key to GitHub:
- Go to https://github.com/settings/keys
- Click "New SSH key"
- Paste your public key and save
git clone git@github.com:yourusername/linux-setup.git
cd linux-setup
chmod +x setup.sh
./setup.shThe script will automatically detect your distribution (Ubuntu or Fedora) and environment (native Linux or WSL2) and present appropriate setup options.
After the script completes:
- Log out and log back in for shell changes to take effect (or reboot for full desktop installs)
- Configure Git credentials:
git config --global user.name "Your Name" git config --global user.email "your.email@example.com"
The master script (setup.sh) offers three setup modes:
Installs everything: shell, dev tools, GUI apps, GNOME extensions, and desktop customization.
Terminal-focused setup with:
- Zsh and dotfiles
- Neovim with full configuration
- CLI utilities (tmux, fzf, ripgrep, etc.)
- Claude Code CLI
- Optional: Micromamba, Docker
Skips: GUI apps, GNOME extensions, Ghostty, VS Code
Pick and choose individual modules to install.
The setup is organized into focused modules for easier maintenance and flexibility:
linux-setup/
├── setup.sh # Master orchestration script
├── modules/
│ ├── common.sh # Shared utilities and functions
│ ├── core.sh # Essential packages and system updates
│ ├── shell.sh # Zsh, Oh My Zsh, dotfiles, fonts
│ ├── dev-tools.sh # Neovim, Docker, LaTeX, Micromamba, CLI tools
│ ├── desktop.sh # GUI apps, GNOME extensions, customization
│ └── wsl.sh # WSL2-specific minimal setup
You can run modules independently:
# Install just the shell configuration
./modules/shell.sh
# Install just Neovim and dev tools
./modules/dev-tools.sh
# Install just desktop components
./modules/desktop.shEach module sources common.sh for shared functionality and can be executed standalone.
Core Module (modules/core.sh)
- System updates and essential build tools
- Git and Git LFS
- curl, wget, unzip
- Distribution-specific development packages
Shell Module (modules/shell.sh)
- Zsh with Oh My Zsh
- Zsh plugins (syntax highlighting, autosuggestions)
- JetBrainsMono Nerd Font for terminal use
- Dotfiles symlinked from repository
Dev Tools Module (modules/dev-tools.sh)
Individual functions for selective installation:
- Neovim with full plugin setup (via Lazy.nvim)
- Includes: Python, Node.js, Rust, ripgrep, fd-find, xclip
- Docker with Docker Compose
- LaTeX distribution (texlive)
- Micromamba for Python environment management
- CLI utilities: tmux, tree, htop, btop, jq, fzf, tldr, imagemagick
- Cheat - command-line cheatsheets
- Claude Code CLI and claude-history
Desktop Module (modules/desktop.sh)
Only installed on full desktop setups:
- Ghostty terminal with configuration (Ubuntu - manual for Fedora)
- VS Code with curated extensions and theme
- GNOME Extensions:
- Extension Manager
- Blur My Shell
- Dash to Dock (customized)
- Custom Hot Corners
- Flatpak with Flathub
- GUI Applications:
- Browsers: Google Chrome, Microsoft Edge
- Communication: Discord, Signal
- Media: Spotify (Flatpak)
- Productivity: Obsidian, Anki
- Desktop Customization:
- Wallpaper configuration
- Dock favorites
- Yaru-blue theme
WSL2 Module (modules/wsl.sh)
Minimal terminal-focused setup:
- Core system packages
- Shell configuration
- Neovim and CLI utilities
- Claude Code CLI
- Optional: Micromamba, Docker
- WSL2-specific Git configuration
- Uses
aptpackage manager - Neovim installed via snap
- Most applications installed from official
.debpackages - Ghostty installed via community installer
- Uses
dnfpackage manager - Neovim installed from official repos
- Some applications installed via Flatpak (Spotify, Signal, Obsidian)
- Ghostty requires manual installation (see https://ghostty.org)
- Cheat tool requires manual installation
The script automatically handles differences between distributions:
- Build tools:
build-essential(Ubuntu) vs@development-tools(Fedora) - Python packages:
python3-venv(Ubuntu) vspython3-virtualenv(Fedora) - Image processing:
imagemagick(Ubuntu) vsImageMagick(Fedora) - Docker: Different repository setup for each distribution


