Timeline: ~45 minutes total
- ISO creation: 10-15 min
- Installation: 10-15 min
- First boot (automatic): 5-10 min
- User setup: 15-20 min
git clone https://github.com/jaelliot/geckoforge.git
cd geckoforge
# Build the ISO
./tools/kiwi-build.sh profile
# ISO will be in: out/geckoforge-leap156-kde.x86_64-*.isoLinux:
# Find your USB device
lsblk
# Write ISO (replace sdX with your device)
sudo dd if=out/geckoforge-*.iso of=/dev/sdX bs=4M status=progress
sudo syncmacOS:
diskutil list
diskutil unmountDisk /dev/diskN
sudo dd if=geckoforge-*.iso of=/dev/rdiskN bs=1m- Insert USB into target machine
- Enter BIOS/UEFI (F2, F12, or Del)
- Disable Secure Boot temporarily
- Boot from USB
- Welcome: Select language
- License: Accept
- Disk setup:
- Select disk
- Choose Guided - Use Entire Disk
- Enable Encrypt Disk (LUKS2)
- Set strong passphrase
- Partitioning: Confirm Btrfs layout
- Timezone: Select region
- User account: Create user and password
- Installation: Wait 10-15 minutes
- Reboot: Remove USB
System automatically:
- ✅ Boots into KDE Plasma
- ✅ Runs
geckoforge-firstboot.service(installs NVIDIA driver) - ✅ Runs
geckoforge-nix.service(installs Nix) - ✅ Prompts for reboot
Wait time: ~5-10 minutes
After automatic reboot:
# NVIDIA driver installed?
nvidia-smi
# Nix installed?
nix --version
# Check logs
journalctl -u geckoforge-firstboot.service
journalctl -u geckoforge-nix.serviceRun the setup wizard:
mkdir -p ~/git
cd ~/git
git clone https://github.com/jaelliot/geckoforge.git
cd geckoforge
# Run wizard
./scripts/firstrun-user.shThis installs:
- Docker (removes Podman and prompts before deleting data)
- NVIDIA Container Toolkit for Docker (when GPU detected)
- Flatpak apps (Postman, DBeaver, OBS, Signal, Android Studio)
- Home-Manager bootstrap (Nix dotfiles)
Time: 15-20 minutes
# Link example config
ln -s ~/git/geckoforge/home ~/git/home
# Edit with your info
nano ~/git/home/home.nix
# Update: username, email
# Apply
home-manager switch --flake ~/git/home# When prompted by firstrun-user.sh, enter your repo URL
# It will clone to ~/git/home
# Apply
cd ~/git/home
home-manager switch --flake .Log out and back in for full effect.
# Nix works?
nix run nixpkgs#hello
# Docker works?
docker run hello-world
# GPU works? (NVIDIA only)
nvidia-smi
docker run --rm --gpus all \
nvidia/cuda:12.4.0-base nvidia-smi
# TeX Live ready?
cd ~/git/geckoforge/docs
less tex-verification.md
# Flatpaks installed?
flatpak list- Reboot → enter BIOS/UEFI
- Re-enable Secure Boot
- Enroll MOK (if prompted)
- Verify:
mokutil --sb-state
cd ~/git/geckoforge
./scripts/harden.shConfigures:
- Firewall (firewalld)
- Automatic security updates
- Optional: fail2ban, auditd
If you use Synergy to share keyboard/mouse across multiple computers:
cd ~/git/geckoforge
./scripts/setup-synergy.shRequirements:
- Synergy license from symless.com
- Downloaded Synergy RPM
The script will guide you through installation and configuration.
Time: 5 minutes
Geckoforge includes the Mystical Blue (Jux) theme - a professional dark blue aesthetic.
Activate the theme:
cd ~/git/geckoforge
./scripts/setup-jux-theme.shThen:
- Log out and back in
- Theme is active!
Time: 2 minutes
Details: See Theme Guide
Geckoforge includes Mozilla Thunderbird with hardened anti-phishing settings.
- Open Thunderbird (from application menu or
thunderbirdcommand) - Add your email accounts:
- Gmail: Use OAuth2 authentication
- Outlook: Use OAuth2 authentication
- ProtonMail: Run
~/git/geckoforge/scripts/setup-protonmail-bridge.shfirst
To open a link:
- Right-click → Copy Link Location
- Inspect the URL
- Paste into browser if safe
Complete setup guide: Thunderbird Setup Documentation
Time: 10-15 minutes per email account
Geckoforge includes a comprehensive encrypted backup system for DevOps workflows.
cd ~/git/geckoforge
# Configure cloud provider and encryption
./scripts/setup-rclone.sh
# Test backup system
./scripts/check-backups.sh --test
# Enable automated backups
systemctl --user enable --now rclone-backup-critical.timer
systemctl --user enable --now rclone-backup-projects.timer
# Verify operation
systemctl --user list-timers- Critical (Daily): SSH keys, GPG keys, AWS credentials, Kubernetes configs, documents
- Projects (Weekly): Git repositories, development workspaces, VS Code settings
- Infrastructure (Monthly): Infrastructure as Code, Ansible playbooks, Terraform configs
- Google Drive: 15GB free, good for personal use
- AWS S3: Pay-as-you-go, best for professional use
- Backblaze B2: Cheaper alternative to S3
- OneDrive: If you have O365 subscription
- Zero-knowledge encryption: Data encrypted client-side before upload
- AES-256 encryption: Industry-standard encryption strength
- Filename obfuscation: Even file names are encrypted
- Password protection: Dual-password system (encryption + salt)
# Health check
./scripts/check-backups.sh
# View backup logs
ls ~/.local/share/rclone/logs/
# Service status
systemctl --user status rclone-backup-critical.serviceComplete guide: Backup & Recovery Documentation
# OS
sudo zypper patch
# Nix apps
cd ~/git/home
nix flake update
home-manager switch --flake .
# Flatpaks
flatpak updateOS (Snapper):
sudo snapper list
sudo snapper rollback 42
sudo rebootApps (Nix):
home-manager generations
home-manager rollbacklspci | grep -i nvidia # Verify GPU detected
sudo /usr/local/sbin/firstboot-nvidia.sh
sudo rebootsource ~/.nix-profile/etc/profile.d/nix.sh
# Or log out and back innewgrp docker
~/git/geckoforge/scripts/setup-docker.sh~/git/geckoforge/scripts/docker-nvidia-install.sh
~/git/geckoforge/scripts/docker-nvidia-verify.shThis repository uses lefthook for automated quality checks.
# Via zypper (openSUSE)
sudo zypper install lefthook
# Or via Home-Manager (add to home/modules/development.nix)
home.packages = with pkgs; [
lefthook
shellcheck
markdownlint-cli
];# Install hooks
lefthook install
# Verify installation
lefthook versionHooks run automatically on commit and push. To run manually:
# Run pre-commit checks
lefthook run pre-commit
# Run pre-push checks
lefthook run pre-push
# Run specific check
lefthook run pre-commit --commands shellcheck# Skip all hooks (NOT RECOMMENDED)
git commit --no-verify
# Skip specific check
LEFTHOOK_EXCLUDE=shellcheck git commit -m "WIP: prototype"
# Document bypasses in daily summary!See .cursor/rules/25-lefthook-quality.mdc for full quality gate documentation.
Geckoforge uses zsh with Oh My Zsh and Powerlevel10k for a powerful DevOps terminal experience.
Features:
- Instant prompt - Shell appears immediately, loads config in background
- Autosuggestions - Commands from history appear as you type (press
→to accept) - Syntax highlighting - Invalid commands show in red before you execute
- DevOps plugins - Native completion for kubectl, terraform, docker, aws
- fzf integration - Press
Ctrl+Rfor fuzzy history search - Context-aware prompt - Current kubectl context, AWS profile, Terraform workspace
- Safety coloring - Production contexts appear RED, staging YELLOW
- Large history - 50,000 commands with deduplication
- Privacy mode - Space-prefixed commands excluded from history
After first boot, change your default shell:
# Change default shell to zsh
./scripts/setup-shell.sh
# Log out and back in
# (Ctrl+D or close terminal)
# After logging back in, activate Oh My Zsh configuration
cd ~/git/home
home-manager switch --flake .
# Start a new terminal to see the Powerlevel10k promptAs you type commands, zsh suggests from your history in gray text:
# You type: kubect
# Suggestion appears: kubectl get pods -n production
# Press → (right arrow) to accept the full suggestion
# Or press Alt+F to accept word-by-wordTips:
- Suggestions are based on your most recent matching commands
- Works great for long Docker/Kubernetes commands
- Press
Tabfor traditional completion if you don't want history
Press Ctrl+R to open fuzzy finder for your command history:
# Press Ctrl+R
# Type: docker run
# See ALL matching commands from history
# Navigate with arrow keys, press Enter to selectOther fzf shortcuts:
Ctrl+T- Fuzzy find files in current directoryAlt+C- Fuzzy find and cd into directory
Sensitive commands: Prefix with space to exclude from history:
# This WILL be saved to history:
aws configure set region us-east-1
# This WON'T be saved (note the leading space):
aws configure set aws_access_key_id AKIA...
export DATABASE_PASSWORD=secret123Context awareness: The prompt shows your kubectl context and AWS profile. Production contexts appear in RED as a visual warning.
kubectl plugin:
k- Alias forkubectlkgp- Get podskgd- Get deployments- Tab completion for resources, namespaces, contexts
docker plugin:
dps-docker psdex-docker exec -it- Tab completion for containers, images
terraform plugin:
tf- Alias forterraform- Tab completion for commands, workspaces
aws plugin:
- Tab completion for AWS CLI commands
- Profile completion
After first boot, change your default shell:
# Change default shell to zsh
./scripts/setup-shell.sh
# Log out and back in
# Activate Oh My Zsh configuration
cd ~/git/home
home-manager switch --flake .Edit ~/.p10k.zsh (managed by Home-Manager) or run:
p10k configureConfiguration is stored in home/modules/shell.nix for version control.
Default AWS configuration:
- Region: us-east-1
- Output: json
Configure credentials:
aws configure
# Enter AWS Access Key ID and Secret Access Key- Customize KDE: Right-click desktop → Configure
- Import Firefox profile
- Set up SSH keys:
ssh-keygen -t ed25519 - Install dev tools: Edit
~/git/home/modules/development.nix - Configure backups
See full documentation in docs/ directory.