ArchRiot is the answer to every time you've thought "why can't Linux just work correctly from the start?" We've spent hundreds of hours perfecting the details so you get a blazing-fast, secure, beautiful system that actually respects your time and intelligence.
Curated to be correct:
- 🪟 Hyprland Tiling - Makes other Window Managers feel primitive
- ⚡ Go Installer - Atomic operations, instant rollbacks, zero dependency hell
- 🛡️ Privacy - Zero telemetry, zero tracking, zero corporate data harvesting
- 🎨 Aesthetics - Carefully crafted dark themes that work at any hour
- 💻 Development - Zed, Neovim, shell enhancements, and other upgrades
Built on Arch Linux with Hyprland, because compromises are for other people. This isn't maintained by committee or corporate roadmap -- it's maintained by someone with an obsessive, singular focus on getting it right the first time, because crappy Linux environments are an insult to what computing should be.
<iframe width="560" height="315" src="https://www.youtube.com/embed/qrraIOvAcdg?si=yooSbgD0FJKLuAkc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>-
🔥 Method 1 — Install Script (existing Arch):
curl -fsSL https://ArchRiot.org/setup.sh | bash -
⚡ Method 2 — ArchRiot ISO (fresh install):
- Download from Releases and boot the ISO: https://github.com/CyphrRiot/ArchRiot/releases
- See: ⚡ Method 2 — ArchRiot ISO
Transform your current Arch system into ArchRiot
curl -fsSL https://ArchRiot.org/setup.sh | bashPerfect for:
- 🏠 System preservation - Keep your data, configs, and custom tweaks intact
- 🔧 Arch variants - CachyOS, Manjaro, EndeavourOS, or pure Arch installations
- 🎨 Desktop upgrade - Transform just your desktop environment, leave the rest alone
- ⚡ Quick wins - Get ArchRiot's best features without starting over
What you get:
- ArchRiot desktop environment and apps
- Hyprland tiling window manager
- CypherRiot themes and customizations
- Keeps your existing system intact
- 📥 Download ArchRiot Linux ISO
Note: Do not use wget for this. Curl is your friend:
curl -L -o archriot.iso https://github.com/CyphrRiot/ArchRiot/releases/download/v2.27/archriot.iso-
💾 Download Ventoy
- Download Ventoy and create a bootable USB drive
- Pro tip: Ventoy lets you boot multiple ISOs from one USB - perfect for testing
-
📂 Copy ISO to Ventoy Drive
- Copy the ArchRiot ISO file directly to your Ventoy USB drive
- No flashing needed - just copy the file
-
⚡ Boot ArchRiot ISO
- Boot from USB (disable Secure Boot if your BIOS is being difficult)
- Select ArchRiot ISO from Ventoy menu
Note: In some weird, rare cases, dhcpd is not running. In this case, run:
sudo systemctl start dhcpcd
Then run curl -fsSL https://ArchRiot.org/setup.sh | bash to continue the final step of the installation.
Note: If There's a wifi issue (after first boot), see: ISO Install: Wi‑Fi abort fix (iwd PSKs)
iwctl
device list
station {device} scan
station {device} get-networks
station {device} connect {network}
station {device} show
exitPerfect for:
- 🖥️ Fresh hardware - New builds, clean slates, virtual machines
- 🚀 Instant gratification - Boot →
riot→ Perfect desktop in minutes - 💀 System replacement - When your current setup has disappointed you for the last time
- 🎯 Zero configuration - For people who have better things to do than tweak configs
What you get:
- Complete Arch Linux + ArchRiot system
- Boot ISO → Run
riot→ Complete guided setup - Hyprland, themes, apps all pre-configured
- No manual setup required
Troubleshooting (ISO Install): Wi‑Fi abort at “Wi‑Fi configuration/services not properly set on target”
Cause
- The live ISO uses iwd/iwctl, while the installer’s first‑boot handoff previously expected NetworkManager (NM) connections on the target. If no usable connection is set up on the target, the installer aborts to avoid rebooting without network.
Fix without modifying the ISO Run these from the archiso prompt after the error (target root is mounted at /mnt):
- Preferred: copy iwd PSKs and enable iwd + DHCP (no NetworkManager)
# Enable iwd on target; avoid conflicts
arch-chroot /mnt systemctl enable iwd
arch-chroot /mnt systemctl mask wpa_supplicant
# Ensure DHCP will bring up networking at boot (when not using NM)
arch-chroot /mnt pacman -Sy --noconfirm --needed dhcpcd
arch-chroot /mnt systemctl enable dhcpcd
# Copy the live iwd credentials (PSKs) to the target
arch-chroot /mnt mkdir -p /var/lib/iwd
cp -a /var/lib/iwd/*.psk /mnt/var/lib/iwd/ 2>/dev/null || true
arch-chroot /mnt chmod 600 /var/lib/iwd/*.psk 2>/dev/null || true- Optional alternative: use NetworkManager on the target (with iwd backend)
# Install and enable NetworkManager on target
arch-chroot /mnt pacman -Sy --noconfirm --needed networkmanager iwd
arch-chroot /mnt bash -lc 'mkdir -p /etc/NetworkManager/conf.d &&
printf "[device]\nwifi.backend=iwd\n" > /etc/NetworkManager/conf.d/10-wifi-backend.conf &&
printf "[connection]\nwifi.powersave=2\n" > /etc/NetworkManager/conf.d/40-wifi-powersave.conf'
arch-chroot /mnt systemctl enable NetworkManager
# Seed NM connections from iwd (best effort)
for f in /var/lib/iwd/*.psk; do
[ -e "$f" ] || continue
ssid="$(basename "$f" .psk)"
pass="$(awk -F= '/^Passphrase=/{print $2}' "$f")"
if [ -n "$pass" ]; then
arch-chroot /mnt nmcli c add type wifi ifname "*" con-name "$ssid" ssid "$ssid"
arch-chroot /mnt nmcli c modify "$ssid" wifi-sec.key-mgmt wpa-psk wifi-sec.psk "$pass"
else
echo "No Passphrase in $f; skipping NM import for $ssid (PSK-only)"
fi
done
arch-chroot /mnt bash -lc 'chmod 600 /etc/NetworkManager/system-connections/*.nmconnection 2>/dev/null || true'- Reboot and connect
- iwd path: system should auto‑connect from PSKs; if not, run “iwctl” and connect to your SSID.
- NM path: use “nmtui” if auto‑connect doesn’t happen.
Quick workaround
- Use a wired (Ethernet) connection during install; the safety gate will pass with a detected wired link.
Note on Secure Boot
- This specific Wi‑Fi abort is not caused by Secure Boot. Some systems still require disabling Secure Boot for other reasons; consult your vendor’s guide if needed.
Security Note: Your system remains secure through LUKS disk encryption and screen lock. Passwordless sudo is standard for automated system installations and doesn't compromise security when disk encryption is properly configured.
Warning: On multi‑monitor setups, upgrading may temporarily stop Brave while displays are being reconciled.
Mitigation:
- Prefer upgrading with Brave closed.
- If Brave is affected, safely recover with:
~/.local/share/archriot/install/archriot --displays-enforce~/.local/share/archriot/install/archriot --waybar-reload- Displays are also re‑applied automatically at next login (login‑time enforcement).
The only command you need to remember:
curl -fsSL https://ArchRiot.org/setup.sh | bashThis downloads and runs our bulletproof Go binary installer with intelligent YAML configuration. Upgrading is exactly the same command - because simplicity is the ultimate sophistication.
What happens: Automatic package installation, configuration deployment, and system setup with complete rollback capability if anything goes wrong.
The keyboard shortcuts that'll make you wonder how you ever used a mouse
Your gateway to ArchRiot mastery - memorize these first
| Keybinding | Action |
|---|---|
SUPER + H |
Show HELP - Your lifeline when lost |
SUPER + D |
App launcher - Find anything instantly |
SUPER + RETURN |
Terminal - Your command center (Ghostty) |
SUPER + L |
Lock screen - Beautiful CypherRiot styling |
SUPER + ESCAPE |
Power menu - Sleep, restart, or shutdown |
Tiling mastery - where ArchRiot really shines
| Keybinding | Action |
|---|---|
SUPER + W or SUPER + Q |
Close window - Goodbye forever |
SUPER + V |
Toggle floating - Break free |
SUPER + J |
Toggle split - Reorganize space |
SUPER + Arrow Keys |
Move focus - Navigate like a pro |
SUPER + SHIFT + Arrow Keys |
Swap windows - Rearrange perfection |
SUPER + CTRL + Arrow Keys |
Smart movement - Let Hyprland think |
SUPER + SHIFT + TAB |
Fix off-screen windows - Manual rescue tool |
SUPER + 1-4 |
Switch workspace - Your digital rooms |
SUPER + SHIFT + 1-4 |
Move window to workspace - Relocate |
SUPER + SHIFT + RETURN |
Floating terminal - When you need overlay power |
The tools that matter, one keystroke away
| Keybinding | Action |
|---|---|
SUPER + F |
File manager - Navigate your digital kingdom (Thunar) |
SUPER + B |
Browser - Privacy-focused web (Brave) |
SUPER + Z |
Code editor - Modern development (Zed) |
SUPER + N |
Text editor - Power user paradise (Neovim) |
SUPER + O |
Simple text editor - Clean and fast (GNOME) |
SUPER + T |
System monitor - See everything (btop) |
SUPER + SHIFT + RETURN |
Floating terminal - Overlay power mode |
Stay connected without selling your soul to data miners
| Keybinding | Action |
|---|---|
SUPER + E |
Email - Encrypted and private (Proton Mail) |
SUPER + G |
Telegram messenger - Focus-or-launch (native/Flatpak) |
SUPER + S |
Signal messenger - Smart Signal integration |
SUPER + M |
Google Messages - When you must use the machine |
SUPER + K |
Google Keep - Quick notes and lists |
SUPER + X |
X/Twitter |
Note: SUPER + SHIFT + K — Stabilize session: relaunches Waybar, restarts hypridle, and enforces displays (no full reload).
Capture your ArchRiot greatness and share it with the world
| Keybinding | Action |
|---|---|
SUPER + SHIFT + S |
Region screenshot - Select exactly what matters |
SUPER + SHIFT + W |
Window screenshot - Perfect app captures |
SUPER + SHIFT + F |
Full screen - Show off your entire desktop |
Kooha |
Screen recorder - Make tutorials (launch via SUPER+D) |
Keep your desktop fresh with ArchRiot's intelligent wallpaper system and automatic color theming
| Keybinding | Action |
|---|---|
SUPER + CTRL + SPACE |
Cycle backgrounds - Fresh vibes on demand |
🌈 Dynamic Color Theming:
- Optional intelligent theming - Enable in Control Panel to extract colors from your wallpaper
- Real-time waybar updates - When enabled, workspace colors, CPU indicators, and accents change instantly to match your wallpaper
- Toggle control - Enable/disable dynamic theming in the Control Panel or keep classic CypherRiot colors
- Smart fallback - Always reverts to beautiful CypherRiot theme when disabled
⚠️ Upgrade note - System upgrades will reset dynamic theming to CypherRiot defaults (simply re-enable in Control Panel)
🎛️ Control Panel Magic:
- Launch ArchRiot Control Panel for drag-and-drop wallpaper management
- Dynamic theming toggle - Enable wallpaper-based colors or stick with CypherRiot classics
- System wallpapers (1-15) + your custom collection (U1, U2, etc.) perfectly organized
- Changes apply instantly - no restarts, no waiting, just beauty
🖼️ Custom Wallpaper Power Moves:
# Pro method: Use the Control Panel's file chooser
# Quick method: Drop files directly into ~/.config/archriot/backgrounds/
# Clean house - remove specific wallpaper
rm ~/.config/archriot/backgrounds/user_01.jpg
# Nuclear option - start fresh
rm ~/.config/archriot/backgrounds/*Keep your ArchRiot system running like a well-oiled machine
archriot # ArchRiot's intelligent installer/upgrade engine
# Automatically detects if upgrade is needed
# Prompts for confirmation before proceeding
migrate # Backup/restore wizard - your insurance policy
sudo systemctl reboot # Fresh start - sometimes you need it
sudo systemctl poweroff # Graceful shutdown - not a crashHardware media keys that actually work - imagine that!
XF86AudioRaiseVolume # Volume up - with gorgeous overlay
XF86AudioLowerVolume # Volume down - smooth as silk
XF86AudioMute # Toggle mute - instant feedback
XF86AudioMicMute # Microphone toggle - privacy at a keystroke
XF86AudioPlay/Pause # Media control - works with everything
# Beautiful volume overlay appears instantly with progress bar
# These are your actual hardware keys working the way they shouldYour desktop's mission control - everything you need at a glance
Click tomato timer # Pomodoro focus mode - stay productive
Double-click tomato timer # Reset to 25:00 - fresh start
Click network icon # Network manager - connect anywhere
Click volume icon # Audio settings - fine-tune your sound
Click battery icon # Power management - stay charged- Docked (external display connected): closing the lid does not suspend; system does not idle-suspend.
- Undocked: closing the lid suspends; idle suspend occurs at 30 minutes by default.
Implemented via:
/etc/systemd/logind.conf.d/10-docked-ignore-lid.conf:HandleLidSwitchDocked=ignore,HandleLidSwitch=suspend,HandleLidSwitchExternalPower=suspend
/etc/systemd/logind.conf.d/20-idle-ignore.conf:IdleAction=ignore(logind does not idle-suspend)
- hypridle:
- 10 min:
on-timeout = lock(reliable hyprlock trigger) - 30 min:
on-timeout = $HOME/.local/share/archriot/install/archriot --suspend-if-undocked || $HOME/.local/bin/suspend-if-undocked.sh(suspends only when undocked)
- 10 min:
- kanshi autostart (hotplug profiles) for dock/undock screen management
Note: We never restart systemd-logind during install/upgrade; drop-ins take effect after reboot or a manual restart you perform later.
The relentless march toward Linux perfection
🔥 Current Release: v3.9.8 - Docs & UX polish: Brave wrapper consolidation, Waybar logs/reload guidance, fractional scaling notes, Control Panel sizing, Thunar opacity
🚀 Recent Milestones:
- v2.7.4: DPMS wake fixes and system optimization
- v2.7.3: Enhanced theme consistency and bug fixes
- v2.7.2: Critical yay installation + dependency fixes
- v2.7.1: Hardware module path issue fixes
- v2.7.0: Bulletproof fail-fast error handling - because failure is not an option
- v2.6.14: Waybar 3-state + package safety restoration
- v2.6.13: Bulletproof setup.sh + Control Panel UX improvements
# View all version changes
git log --grep="FIX" --onelineThe command center that makes Linux actually user-friendly
ArchRiot's Control Panel isn't just another settings app - it's the missing piece that makes advanced Linux features accessible to humans. Built with modern GTK4, it's fast, beautiful, and actually makes sense.
Launch it: SUPER+C or run archriot-control-panel from anywhere
- 🍅 Pomodoro Timer - Waybar-integrated productivity timer with 5-60 minute intervals
- 💡 Blue Light Filter - Real-time screen temperature control (2500K-5000K) via hyprsunset
- 🛡️ Mullvad VPN - Account management with privacy controls and auto-connect
- 🔊 Audio System - Safe mute/unmute controls without breaking services
- 📷 Camera Control - Device permissions, resolution settings, and live preview testing
- 🖥️ Display Settings - Monitor resolution and scaling with live preview
- 🔋 Power Management - Battery profiles (Power Saver, Balanced, Performance)
- Account Privacy - Sensitive information hidden by default with show/hide toggle
- Safe Controls - Mute instead of killing services, permissions instead of breaking :
- Live Preview - Real-time system changes with "Exit without Saving" option
- Educational Content - "Learn More" dialogs with comprehensive feature explanations
Because you deserve software that doesn't suck
- GTK4 Application - Cutting-edge interface with gorgeous CypherRiot theming
- Real-time Integration - Watch changes happen instantly - no "apply" buttons needed
- Bulletproof Persistence - Your settings survive reboots, updates, and system chaos
- Modular Architecture - Built right from day one - extensible and maintainable
Your perfect ArchRiot setup is precious - protect it like the digital treasure it is
ArchRiot automatically installs and integrates Migrate - our battle-tested backup and recovery system. This isn't some afterthought tool - it's your insurance policy against hardware failures, user errors, and the inevitable "what did I just delete?" moments.
Because spending weeks recreating your perfect setup is a special kind of hell.
- Complete System Backup - Every dotfile, every tweak, every perfect configuration preserved
- Interactive TUI - Gorgeous terminal interface that makes complex operations simple
- Live System Recovery - Restore without nuking your system - keep working while fixing
- Cross-Installation Migration - Clone your setup to new machines in minutes
- Zero Maintenance - Updates automatically with ArchRiot - one less thing to worry about
migrate # Launch interactive backup/restore interfaceNo flags, no complexity - just run migrate and use the intuitive menu to backup or restore your entire ArchRiot setup in minutes!
- Terminal: Ghostty (replaces Kitty) with 90% transparency and dark theme
- Browser: Brave (replaces Chromium) with native Wayland support
- File Manager: Thunar (replaces Nautilus) with comprehensive dark theming
- Shell: Fish as default (replaces Bash) with proper PATH configuration
- Theme: CypherRiot integrated as unified theme system
- Code Editor: Zed (Wayland) + Neovim with proper theme integration
- Applications: All major apps now run native Wayland (no more XWayland issues)
- Migrate Backup Tool: CyphrRiot's comprehensive system backup/restore solution (built-in)
- Memory Optimization: Intelligent memory management that actually works
- Blue Light Filter: hyprsunset at 3500K for reduced eye strain (configurable)
- GTK Theming: Dark theme everywhere - no more jarring white dialogs
- DPI Scaling: Fixed scaling issues for consistent UI across all applications
Linux's default memory management is aggressively stupid about caching. The kernel will happily consume 90%+ of your RAM for file caches, then struggle to free it when applications actually need memory.
ArchRiot's Solution: Comprehensive memory management tuning that provides:
Core Improvements:
- Smart Caching - Reserves 1GB RAM, reduces aggressive file system caching
- Minimal Swapping - 10% swappiness (vs 60% default) keeps everything in RAM
- Lag-Free Writing - 5% dirty page limit prevents massive write bursts
- Background Cleanup - 2% background writeback for smooth performance
Advanced Protection:
- Memory Overcommit Control - Prevents dangerous memory allocation that causes crashes
- Proactive Defragmentation - Reduces memory fragmentation for better allocation
- Smart OOM Killer - Kills problematic processes, not random system services
- Enhanced Responsiveness - Optimized dirty page intervals and memory bandwidth
Real-World Impact:
- No more lag spikes when opening applications or switching windows
- Better responsiveness under heavy memory pressure (tested with 75%+ RAM usage)
- Reduced swap usage with intelligent RAM utilization
- System stability under extreme load - no freezes or crashes
Result: Your system stays fast and responsive even when running multiple applications, compiling code, or under extreme stress testing.
ArchRiot includes a highly customized Waybar (status bar) with comprehensive system integration:
Built-in Modules:
- 🍅 Tomato Timer - Built-in Pomodoro timer (idle/running/break/finished)
- 🛡️ Mullvad VPN Status - Real-time VPN connection status with location display
- 📊 System Monitoring - CPU aggregate usage, accurate memory monitoring
- 📊 Visual System Metrics - Temperature, CPU, memory, and volume
- shown as intuitive bar indicators (▁ ▂ ▃ ▄ ▅ ▆ ▇ █)
- 🎤 Microphone Control - Visual mic status with one-click toggle
- 📶 Network Management - WiFi status with nmtui integration
- 🔊 Audio Controls - Volume display with hardware key integration
Technical Improvements:
- CSS Parser Fixed - Eliminated all !important declarations causing waybar errors
- Custom Separators - Clean, organized module layout for better readability
- Transparency System - Consistent 90-98% opacity across all applications
- Font Optimization - Improved date format (Sunday • July 13 • 01:49 PM)
- Error-free Operation - All modules validated and tested for reliability
- Proton Mail (SUPER+E / XF86Mail) - Privacy-focused email in floating window
- Telegram (SUPER+G) - Private messaging app
- Signal (SUPER+S) - Private messaging app
- Google Messages (SUPER+M) - Web-based messaging in floating window
- X/Twitter (SUPER+X) - Social platform in floating window
- GitHub - Development platform with proper icons from homarr-labs
- Percentage-based sizing - Windows scale properly across different screen resolutions (1080p, 1440p, 4K, ultrawide)
- Smart centering - All floating windows automatically center regardless of monitor size
- Cross-resolution compatibility - No hardcoded pixel positions, works on any display setup
- Optimized app windows:
- X/Twitter:
40% x 90%(mobile-style layout with responsive height) - Proton Mail:
45% x 80%(perfect email reading dimensions) - Google Messages:
40% x 85%(comfortable messaging interface) - Signal:
40% x 80%(maintains native desktop experience)
- X/Twitter:
- Future-proof design - Window rules adapt automatically to new monitor configurations
ArchRiot automatically detects and installs optimal drivers for all major GPUs:
- NVIDIA: Proprietary drivers with Wayland and hardware acceleration
- AMD/Radeon: Open-source Mesa drivers with Vulkan support
- Intel: Mesa drivers including Intel Arc support
All GPUs get proper Wayland integration and hardware video acceleration for optimal performance.
Performance Features:
- Hardware acceleration - Video playback, compositing effects, and application rendering
- Wayland native support - No XWayland compatibility issues
- Automatic driver selection - No manual configuration required
- Vulkan support - Modern graphics API for gaming and development
- Multi-monitor optimization - Proper scaling and display management
- SUPER+D = SUPER+SPACE (Unified app launcher)
- Left-click Arch icon - nwg-drawer app grid
- Right-click Arch icon - fuzzel app launcher
- XF86Mail - Floating Proton Mail window
- SUPER+SHIFT+S - Region screenshot (primary)
- SUPER+SHIFT+W - Window screenshot
- SUPER+SHIFT+F - Full screen screenshot
- Key repeat enabled (40 rate, 600 delay for responsive typing)
- All media keys - Volume, brightness, playback controls
- Local and dynamic: The help window is generated from your Hyprland config (inline comments on bind lines).
- Sources:
- ~/.config/hypr/keybindings.conf (preferred)
- ~/.config/hypr/hyprland.conf (fallback)
- How to add descriptions: append a comment after a bind line, e.g. bind = $mod, D, exec, fuzzel # App launcher
- Launch: SUPER+SHIFT+H opens a compact web app window (Brave app mode) showing current binds.
- Tip: Edit your binds and press SUPER+SHIFT+H again to regenerate.
You can switch the workspace module style in your Waybar config. Edit ~/.config/waybar/config and change the module name from:
- hyprland/workspaces#rw (default: “Rewrite” style with per-window icons)
to any of these:
- hyprland/workspaces Circles (● ◉ ○)
- hyprland/workspaces#numbers Plain 1..4
- hyprland/workspaces#roman I II III IV
- hyprland/workspaces#kanji 一 二 三 四
- hyprland/workspaces#pacman Pac‑Man themed
- hyprland/workspaces#cam Uno/Due/Tre/Quattro
- hyprland/workspaces#4 Numbers + per‑workspace icons
Notes:
- Persistent workspaces default to 1–4; 5–6 appear automatically when occupied. To change persistence, adjust persistent-workspaces in config/waybar/ModulesWorkspaces.
- Reload the bar safely after changes: archriot --waybar-reload
- Gnome Text Editor - Default for text/markdown files (clean, modern text editing with CypherRiot theme)
- Papers - Default PDF viewer (GNOME's modern document viewer)
- MPV - Video playback with optimal performance
- Better waybar network - nmtui instead of impala for reliable WiFi management
- Screenshot tools - grim/slurp/hyprshot integration for all capture needs
- Screen recording - Kooha for simple GUI-based screen recording
- Removed 37signals/Basecamp tools - Hey, Basecamp web apps
- Removed corporate social - Discord, proprietary messaging
- Removed heavy productivity - Obsidian, LibreOffice, OBS Studio, KDEnlive, Pinta
- Removed proprietary services - 1Password, Typora, Dropbox, Spotify, Zoom
- Removed entertainment - YouTube webapp, WhatsApp webapp
System Updates:
sudo pacman -Syu # Standard Arch Linux system update
yay -Syu # Update AUR packagesArchRiot Updates:
curl -fsSL https://ArchRiot.org/setup.sh | bash # Update ArchRiot (same as install)Automatic Update Notifications: ArchRiot automatically checks for updates every 4 hours and shows a notification dialog when newer versions are available. You can install updates, ignore notifications, or simply close the dialog.
Update dialog options:
- Install from cURL — uses the maintainer’s install/packages.yaml (may reintroduce packages you previously removed).
- Install from Local — uses your local ~/.local/share/archriot/install/packages.yaml and respects packages you’ve removed.
When to choose which:
- Local: you’ve removed packages you don’t want reintroduced, you’ve customized modules locally, or you want the safest upgrade that preserves your current set.
- cURL: you want to align to the maintainer’s latest package set, you’re repairing a broken local state, or you prefer the canonical defaults after larger changes.
Extras:
-
View Diff — shows a unified diff between your local packages.yaml and the maintainer’s, so you can preview changes before upgrading.
-
Local safety check — a smoke test runs before “Local” upgrades and will block if it detects packages that would be reintroduced. You can optionally allowlist specific packages via ~/.config/archriot/upgrade-allowlist.txt.
-
Bluesky (optional) — The Bluesky PWA is not installed by default. To enable it:
mkdir -p ~/.local/share/applications cp ~/.local/share/archriot/config/applications/xtras/Bluesky.desktop ~/.local/share/applications/ update-desktop-database ~/.local/share/applications
It will then appear in Fuzzel as "Bluesky."
Brave wrapper and per-user flags
- Launchers: Only two visible entries: Brave and Brave (Private). The internal archriot-brave.desktop is hidden and used for default browser mapping; it won’t appear in launchers.
- Wrapper: The archriot-brave launcher enforces Wayland when available and enables GPU rasterization by default for stability and performance.
- Per-user overrides: Create ~/.config/archriot/brave-flags.conf (one flag per line) to add or override flags. Examples: --disable-gpu --ozone-platform=x11
- Precedence: Command-line args > brave-flags.conf > built-in defaults. Duplicate flags are resolved by key (higher precedence wins).
- PATH: The wrapper is also available at ~/.local/bin/archriot-brave for consistent shell access.
- Defaults applied automatically (when on Wayland): --ozone-platform=wayland --enable-features=UseOzonePlatform --enable-gpu-rasterization
The ArchRiot updater downloads the latest YAML configuration and pre-built binary, then intelligently applies only the changes needed. The YAML-based system ensures atomic updates with proper dependency resolution - no partial failures or broken states like traditional shell script updaters.
- Confirm active portals:
- systemctl --user status xdg-desktop-portal xdg-desktop-portal-hyprland
- ps aux | grep xdg-desktop-portal
- Verify preferred portal selection:
- Check ~/.config/xdg-desktop-portal/portals.conf (or /etc/xdg-desktop-portal/portals.conf)
- Ensure default=hyprland;gtk; and hyprland is selected for ScreenCast/Screenshot/Clipboard
- Reset portals (fix stale processes):
- systemctl --user restart xdg-desktop-portal xdg-desktop-portal-hyprland
- If needed: pkill xdg-desktop-portal; pkill xdg-desktop-portal-hyprland; then restart the services
- Quick screencast tests:
- Kooha: kooha (record a short clip). You should see a Wayland screencast prompt and successful capture on clean installs.
- OBS Studio: In Sources, click + and ensure "Screen Capture (PipeWire)" is available. Select it and verify monitor/window capture works. If missing, restart portals (see above) or relaunch your Hyprland session.
- Common issues and fixes:
- Make sure xdg-desktop-portal-hyprland is installed and up to date
- Avoid conflicting portals; ensure hyprland is first in the default list
- If prompts do not appear, restart the user session or relaunch Hyprland
- Reload without duplicates:
- Send a config reload: archriot --waybar-reload (sends SIGUSR2; auto-restarts Waybar on crash)
- If the bar is unresponsive, restart cleanly: killall waybar; archriot --waybar-launch
- Check single-instance status and logs:
- Status: archriot --waybar-status
- Logs: tail -n 200 ~/.cache/archriot/runtime.log
- Idle/Lock screen not triggering? See "Hypridle: Lock Not Triggering (exec syntax)" below
- Dynamic detection tips:
- Network: modules/scripts should auto-detect active interfaces; ensure your interface is up (ip link), and NetworkManager is running if you rely on it
- Temperature: scripts try coretemp/k10temp/zenpower first, then thermal zones; install lm_sensors and run sensors-detect if temps are missing
- Battery: laptop-only; verify /sys/class/power_supply/BAT* exists
- Common fixes:
- After theme/config changes, prefer SIGUSR2 reloads (pkill -SIGUSR2 waybar) over full restarts for stability
- If modules look stale, restart portals (see Portals Troubleshooting) and then Waybar
- Validate your configs exist under ~/.config/waybar and that custom scripts are executable
If your WiFi drops when the screen locks or during idle:
- Quick diagnostic (read-only)
- Run:
~/.local/share/archriot/install/archriot --wifi-powersave-check
- This prints:
- NetworkManager drop-in status: expects wifi.powersave=2 at /etc/NetworkManager/conf.d/40-wifi-powersave.conf
- Runtime power save on your wireless interface (e.g., wlan0): expects power_save off
- Fix NetworkManager drop-in (persistent)
- If the drop-in is missing or not set to 2:
echo -e "[connection]\nwifi.powersave=2" | sudo tee /etc/NetworkManager/conf.d/40-wifi-powersave.conf
sudo systemctl reload NetworkManager
- Turn off runtime WiFi power save (temporary)
- If the diagnostic shows “power_save on” for your interface:
sudo iw dev <iface> set power_save off
- Replace with your wireless interface (e.g., wlan0). This helps avoid WiFi power saving while the session is locked.
- Re-run the check
- Verify both the drop-in and runtime state:
~/.local/share/archriot/install/archriot --wifi-powersave-check
migrate🎯 Migrate is a separate project by Cypher Riot that gets automatically installed during ArchRiot setup. It's a TUI (Text User Interface) with no command-line options. Simply run the command and use the interactive menu to:
- Create comprehensive system backups
- Restore from previous backups
- Migrate configurations between installations
- Preserve all your customizations
Integration Details: ArchRiot automatically downloads and installs the latest version of Migrate from CypherRiot/Migrate during installation, ensuring you always have the most current backup capabilities without any manual setup.
There is one theme: CypherRiot, a beautiful Neo Tokyo Dark inspired theme. If you don't like it, the theme files are at ~/.local/share/archriot/config/ and can be edited.
Visual Design:
- Style: Custom Neo Tokyo Dark aesthetic with dark elegance
- Color Palette: Deep purples, electric blues, and charcoal backgrounds
- Integration: Complete system theming (waybar, hyprlock, fuzzel, terminals, applications)
- Backgrounds: 23 riot-themed wallpapers for dynamic cycling
System Integration:
- Window Manager: CypherRiot colors in Hyprland decorations and borders
- Status Bar: Custom waybar with CypherRiot purple accents and consistent styling
- Lock Screen: Beautiful hyprlock with CypherRiot theme and system status
- Applications: Unified theming across GTK, terminal, and desktop applications
- Instant application: Background changes apply immediately
- Persistent settings: Background preferences survive reboots and updates
Background System:
- CypherRiot collection: 23 riot-themed wallpapers included
- Easy cycling: Use
SUPER + CTRL + SPACEto cycle through backgrounds - Dynamic switching: Script-based background rotation for variety
- High quality: Curated wallpapers optimized for the CypherRiot aesthetic
Advanced Customization:
- Background location:
~/.local/share/archriot/backgrounds/(consolidated directory) - Custom backgrounds: Add your own wallpapers to the backgrounds directory
- Script integration: Background cycling integrates with waybar and system status
- Application consistency: CypherRiot theme provides unified styling across all applications
For developers and power users who want to customize the system before installation:
git clone https://github.com/CyphrRiot/ArchRiot.git ~/.local/share/archriot
# Edit install/packages.yaml to customize
~/.local/share/archriot/install/archriotArchRiot uses a modern YAML-based configuration system that replaces traditional shell scripts. The entire system is defined in install/packages.yaml, which contains:
Structure:
- Categories (core, desktop, development, system, media)
- Modules within each category (base, hyprland, tools, etc.)
- Each module defines:
packages:- List of packages to installconfigs:- Configuration files to deploy with patterns and targetscommands:- Post-installation commands to rundepends:- Dependencies on other modulestype:- Installation type (pacman, yay, flatpak, etc.)
Example module:
desktop:
hyprland:
packages: [hyprland, waybar, wofi, hyprpaper]
configs:
- pattern: "config/hypr/*"
target: "~/.config/hypr/"
preserve_if_exists: [monitors.conf]
- pattern: "config/waybar/*"
target: "~/.config/waybar/"
commands: ["systemctl --user enable hyprland"]
depends: [core.base]
type: pacmanThis YAML system provides clean separation of packages, configurations, and commands while maintaining full dependency resolution and proper installation ordering.
ArchRiot includes an intelligent preservation system via install/preserve.yaml that maintains your personal customizations during upgrades and reinstalls. This ensures your keyboard layout, application preferences, and other settings survive system updates.
Preserved Settings:
- Keyboard Configuration - Layout (us, fr, de), variant, and model
- Default Applications - Browser, terminal, file manager, and dock preferences
- User Customizations - Any settings you've modified in Hyprland configs
How It Works:
- Detection - Scans existing configs for user-customizable settings
- Backup - Creates timestamped backups in
~/.cache/archriot/ - Extraction - Pulls out your personal settings using defined patterns
- Restoration - Optionally applies saved settings to new configs
Example preserve.yaml entry:
user_customizable_settings:
- name: "kb_layout"
description: "Keyboard layout (us, fr, de, etc.)"
pattern: "kb_layout"
- name: "browser"
description: "Default browser application"
pattern: "$browser"The system prompts during installation: "Restore your hyprland modifications?" allowing you to choose whether to apply your saved preferences to the fresh configuration.
The elevator pitch - everything that makes ArchRiot special in one place
🪟 Wayland Excellence: Hyprland compositor with smooth animations, intelligent tiling, and zero XWayland compromises
💻 Developer Paradise: Fish shell, Zed editor, Neovim, modern CLI tools (lsd, ripgrep), and containers that just work
🛡️ Privacy Arsenal: Brave browser, Proton Mail, Mullvad VPN, Signal messaging, and Feather Wallet - all with native Wayland support
🎨 Visual Perfection: CypherRiot dark themes, optional blue light filtering, and beautiful interfaces that don't hurt your eyes at 3AM
⚡ Performance Tuned: Intelligent memory management, hardware acceleration, and optimized audio stack for lag-free computing
ArchRiot was (once) a heavily customized fork with these key distinctions:
- Privacy-first approach - Proton Mail, Brave browser, Signal messaging vs. corporate alternatives
- Developer-focused - Zed editor, modern CLI tools, Fish shell, comprehensive dev environment
- Performance over bloat - Lightweight applications, intelligent memory management, native Wayland
- Clean aesthetics - CypherRiot theme, consistent dark mode, minimal distractions
- Built-in backup system - Integrated Migrate tool for complete system backup/restore
- Enhanced window management - Responsive percentage-based sizing across all resolutions
- Comprehensive GPU support - Automatic detection and optimization for NVIDIA, AMD, Intel
- Advanced Waybar integration - Custom modules, Pomodoro timer, VPN status, system monitoring
- Modern application stack - Ghostty terminal, Brave browser, native Wayland applications
- Intelligent system tuning - Memory management fixes, blue light filtering, DPI scaling
ArchRiot transforms Omarchy from a general productivity setup into a specialized development and privacy-focused environment.
ArchRiot includes a comprehensive verification system to ensure everything is working correctly:
The ArchRiot installer validates everything automatically as it runs. You don't need separate validation because the installer IS the validation system:
Real-time validation during installation:
- YAML configuration integrity and module dependencies
- Essential packages (yay, git, base-devel)
- Desktop environment (Hyprland, Waybar, fuzzel, mako)
- Configuration file deployment verification
- Applications (terminal, file manager, browser, text editor)
- System services (audio, network, bluetooth)
- Network connectivity and repository accessibility
- Memory, disk space, and system requirements
If anything fails: The installer stops immediately with clear error messages and diagnostic information. Fix the issue and re-run - it's completely safe and idempotent.
- Detailed failure analysis with specific recommendations
- Fix suggestions for failed components
Installation logs are in ~/.cache/archriot/install.log and can be reviewed for the full installation details or any errors during the installation process.
After fresh installation, you should see:
- Default theme: CypherRiot (Neo Tokyo Dark aesthetic)
- Default background: riot_zero.png (riot-themed wallpaper)
- PDF files: Show proper document icons (not thumbnails)
- Image files: Show thumbnail previews in Thunar
- Waybar: Running with tomato timer, system stats, and transparent microphone button
See Advanced Usage: CLI Flags for the complete list and details.
Jump to Advanced Usage: CLI Flags
- Exec-once (Waybar):
- exec-once = $HOME/.local/share/archriot/install/archriot --waybar-launch
- Reload (Waybar):
- bind = $mod SHIFT, SPACE, exec, $HOME/.local/share/archriot/install/archriot --waybar-reload
- Wallet:
- bind = $mod, R, exec, $HOME/.local/share/archriot/install/archriot --wallet
- Pomodoro:
- bind = $mod, comma, exec, $HOME/.local/share/archriot/install/archriot --pomodoro-click
- Bluesky is not installed by default and does not appear in Fuzzel on a clean install.
- If a previous install left a desktop entry behind, the installer now removes it from:
~/.local/share/applications/,/usr/local/share/applications/,/usr/share/applications/(both Bluesky.desktop/bluesky.desktop)- Then refreshes the desktop database.
Enable Bluesky (opt-in):
cp ~/.local/share/archriot/config/applications/xtras/Bluesky.desktop ~/.local/share/applications/
update-desktop-database ~/.local/share/applicationsThese first-class CLI flags replace legacy helper scripts and are used directly in Hyprland keybinds. All of them execute the built binary at: $HOME/.local/share/archriot/install/archriot
-
--waybar-launch
- Purpose: Single-instance launcher with non-blocking lock and robust logging.
- Behavior: Ensures exactly one Waybar instance; writes logs to ~/.cache/archriot/runtime.log.
- Example (Hyprland exec-once): exec-once = $HOME/.local/share/archriot/install/archriot --waybar-launch
-
--waybar-reload
- Purpose: Robust Waybar reload. Uses SIGUSR2 when possible; fallback to controlled restart.
- Behavior: Dedupe PIDs and avoid duplicate Waybar after reloads/resume.
- Example (default bind): SUPER+SHIFT+SPACE → archriot --waybar-reload
-
--wallet
- Purpose: Focus-or-launch the configured wallet; avoids duplicate instances.
- Example (default bind): SUPER+R → archriot --wallet
-
--pomodoro-click
- Purpose: Simulate a click on the Waybar tomato timer (toggle/reset via module behavior).
- Example (default bind): SUPER+, → archriot --pomodoro-click
-
--upgrade-smoketest
- Purpose: Local upgrade smoketest used by the update dialog.
- Exit codes: 0 OK; 2 potential reintroductions; 3 unavailable. Honor allowlist at ~/.config/archriot/upgrade-allowlist.txt
-
--stay-awake
- Purpose: Prevent system suspend while a task runs; always detaches so your app isn't tied to the launcher.
- Usage:
- archriot --stay-awake curl -L -o file.iso https://example.com/file.iso
- archriot --stay-awake
- Notes: Uses systemd-inhibit to block sleep; does not affect screen lock.
-
--volume
- Purpose: Unified audio control for speakers and microphone across PipeWire/PulseAudio.
- Backend priority: wpctl (PipeWire with starred sink/source) → pamixer → pactl
- Usage:
- archriot --volume toggle # Toggle speaker mute
- archriot --volume inc # Increase volume 5%
- archriot --volume dec # Decrease volume 5%
- archriot --volume get # Get current volume percentage
-
--suspend-if-undocked
- Purpose: Suspend only when undocked (no external display connected) and not on AC/USB-PD; intended for idle managers.
- Behavior: No-ops when an external display or AC/USB-PD is detected; otherwise calls systemctl suspend.
- Example (Hypridle listener): on-timeout = $HOME/.local/share/archriot/install/archriot --suspend-if-undocked
Symptoms:
- Screen never locks after idle timeout, but
hyprlockworks when launched manually. - Hypridle verbose logs show attempts to run
exec, /usr/bin/hyprlockand errors likeexec,: command not found.
Cause:
- Hyprland config style (
exec, ...) was mistakenly used inside hypridle.conf. - Hypridle expects either
lock(useslock_cmd) or a direct executable path. It does not interpretexec,.
Fix:
- In
~/.config/hypr/hypridle.conf, replace:
on-timeout = exec, /usr/bin/hyprlockwith either:
on-timeout = lockor (explicit path):
on-timeout = /usr/bin/hyprlock- Use absolute paths in
general {}and listeners to avoid PATH/env issues under Hyprland:
general {
lock_cmd = /usr/bin/hyprlock
before_sleep_cmd = /usr/bin/loginctl lock-session
after_sleep_cmd = /usr/bin/hyprctl dispatch dpms on
}- Restart hypridle:
pkill hypridle
hyprctl dispatch exec hypridleNotes:
-
Waybar’s
idle_inhibitormodule can block idle. Ensure it’s not activated if locks don’t trigger. -
Brightness dim at 5 minutes won’t affect external HDMI/DP displays; consider adding DPMS off/on at lock for a visible cue on external monitors.
-
Troubleshooting:
- Check backend: wpctl status | head -30
- Test manually: archriot --volume get
- Waybar uses this for all volume controls (scroll, click, microphone)
-
--brightness
- Purpose: Backlight control for laptop displays.
- Usage:
- archriot --brightness up # Increase brightness
- archriot --brightness down # Decrease brightness
- Notes: Uses brightnessctl; integrates with Waybar backlight module scroll actions
-
--startup-background
- Purpose: Start wallpaper at login from saved preferences; avoids theme apply during boot to prevent races.
- Behavior: Reads ~/.config/archriot/background-prefs.json (key: current_background), falls back to riot_01.jpg or the first available image under ~/.local/share/archriot/backgrounds, writes the state file at ~/.config/archriot/.current-background, and restarts swaybg detached.
- Example (Hyprland exec-once): exec-once = $HOME/.local/share/archriot/install/archriot --startup-background
-
--swaybg-next
- Purpose: Cycle to the next wallpaper and refresh theming if dynamic theming is enabled.
- Behavior: Iterates images in ~/.local/share/archriot/backgrounds, updates ~/.config/archriot/.current-background, restarts swaybg detached, and triggers best-effort theme refresh.
- Example (default bind): SUPER+CTRL+SPACE → $HOME/.local/share/archriot/install/archriot --swaybg-next
-
--waybar-workspace-click (optional; recommend native on-click "activate" for correct per‑monitor routing)
- Purpose: Safe Waybar workspace click handler (numeric-only).
- Usage: $HOME/.local/share/archriot/install/archriot --waybar-workspace-click {name}
- Notes: Validates numeric workspace and dispatches: hyprctl dispatch workspace {name}
- Example (custom modules): "on-click": "$HOME/.local/share/archriot/install/archriot --waybar-workspace-click {name} "
-
--waybar-cpu
- Purpose: Aggregate CPU usage meter for Waybar.
- Behavior: Reads /proc/stat deltas; renders a bar, percentage, and class via JSON.
- Example (Waybar): "exec": "$HOME/.local/share/archriot/install/archriot --waybar-cpu"
-
--waybar-temp
- Purpose: CPU temperature meter for Waybar.
- Behavior: Autodetects sensor (hwmon coretemp/k10temp/zenpower → temp1_input; x86_pkg_temp thermal zone; thermal_zone0 fallback), renders bar and class via JSON.
- Example (Waybar): "exec": "$HOME/.local/share/archriot/install/archriot --waybar-temp"
-
--waybar-volume
- Purpose: Speaker volume meter for Waybar.
- Backend priority: wpctl (PipeWire) → pamixer → pactl. Renders bar and icon via JSON; shows “audio not ready” gracefully.
- Example (Waybar): "exec": "$HOME/.local/share/archriot/install/archriot --waybar-volume"
-
--waybar-memory
- Purpose: Memory usage meter for Waybar.
- Behavior: Computes traditional percentage, shows modern vs traditional in tooltip; renders bar and class via JSON.
- Example (Waybar): "exec": "$HOME/.local/share/archriot/install/archriot --waybar-memory"
-
--stabilize-session
- Purpose: Session recovery utility. Dedupe Waybar and relaunch a single, managed instance; restart hypridle to ensure idle/lock policy is active.
- Usage:
- archriot --stabilize-session
- archriot --stabilize-session --inhibit # starts a detached sleep inhibitor for long-running work
-
--zed
- Purpose: Focus-or-launch Zed (native > Flatpak) with Wayland-friendly environment; focuses an existing window if present.
- Example (bind): SUPER+Z → $HOME/.local/share/archriot/install/archriot --zed
- Example (desktop entry Exec): $HOME/.local/share/archriot/install/archriot --zed %U
-
--welcome
- Purpose: Launch the ArchRiot Welcome window (Python GTK) in a detached manner.
- Example (Hyprland exec-once): sleep 2 && $HOME/.local/share/archriot/install/archriot --welcome
These are already present by default; use if you need to reapply or test live.
# Reload Waybar safely
hyprctl keyword bind "$mod SHIFT, SPACE, exec, $HOME/.local/share/archriot/install/archriot --waybar-reload"
# Wallet
hyprctl keyword bind "$mod, R, exec, $HOME/.local/share/archriot/install/archriot --wallet"
# Pomodoro
hyprctl keyword bind "$mod, comma, exec, $HOME/.local/share/archriot/install/archriot --pomodoro-click"
# Telegram (PATH-resolved; shows 2s 'Opening Telegram...' notification)
hyprctl keyword bind "$mod, G, exec, sh -lc 'notify-send -t 2000 "Telegram" "Opening Telegram..." >/dev/null 2>&1; Telegram'"ArchRiot routes all browser launches through a PATH-resolved wrapper: archriot-brave.
-
Executable resolution:
- The installer ensures the wrapper is on PATH.
- Any stale
/usr/local/bin/archriot-braveis proactively removed during install/upgrade to avoid shadowing.
-
Defaults and overrides:
- Defaults enable Wayland/Ozone and GPU rasterization.
- User flags file:
~/.config/archriot/brave-flags.conf - Flag precedence: CLI flags > user flags file > wrapper defaults
- Example (user flags file; one flag per line): --ozone-platform-hint=wayland --enable-gpu-rasterization
-
Verify GPU acceleration:
- Open:
brave://gpu - Expectation: Most features show “Hardware accelerated.”
- If debugging issues, you can temporarily launch with a safe mode: archriot-brave --disable-gpu
- Crash on workspace/monitor switch: test with the safe mode above. If stable, keep
--disable-gputemporarily and verify GPU drivers (Mesa/NVIDIA) and Wayland flags; report your GPU/driver combo.
- Open:
-
Handler policy and verification:
- HTTP/HTTPS should resolve to the wrapper via the Brave desktop entry.
- Verify current defaults: xdg-settings get default-web-browser xdg-mime query default x-scheme-handler/http xdg-mime query default x-scheme-handler/https
- Expected: ArchRiot’s wrapper desktop entry is the default (
archriot-brave.desktop). Only “Brave” and “Brave (Private)” should appear as visible handlers in common menus.
Notes:
- This wrapper approach avoids
$HOMEexpansion pitfalls and keeps a consistent Wayland configuration by default. - Use CLI flags for one-off tests; prefer the user flags file for persistent changes.
Some multi‑monitor Wayland setups benefit from these flags. Add them to ~/.config/archriot/brave-flags.conf (one per line), then restart Brave:
--disable-features=WaylandWpColorManagerV1
--enable-features=VaapiVideoDecoder,VaapiIgnoreDriverChecks,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE,UseOzonePlatform
--ozone-platform=wayland
--enable-gpu-rasterization
--enable-zero-copy
--ignore-gpu-blocklist
Tip:
- Test incrementally and keep only what you need.
- Flag precedence: command‑line args > brave‑flags.conf > defaults.
See:
- 🧰 Advanced Usage: CLI Flags — waybar commands (launch/reload/status)
- 🔧 Troubleshooting — logs path, SIGUSR2 reloads, dedupe tips, and recovery steps
If your display configuration should not be automatically enforced (for example, to prevent your laptop panel from being disabled), you can opt out safely:
-
Disable enforcement (no monitor changes will be applied):
- Create the marker file:
- touch ~/.config/archriot/disable-display-enforcement
- Create the marker file:
-
Re-enable enforcement:
- Remove the marker file:
- rm ~/.config/archriot/disable-display-enforcement
- Remove the marker file:
Notes:
- The login-time service will no-op when this marker exists.
- You can still run manual commands when needed:
- ~/.local/share/archriot/install/archriot --displays-enforce
- ~/.local/share/archriot/install/archriot --waybar-reload
If you see display glitches or crashes on multi‑monitor setups immediately after an install or upgrade, it’s likely a partial‑upgrade ABI mismatch (e.g., Hyprland/wlroots/portals not in sync). Fix by fully upgrading first, then run the installer again:
sudo pacman -Sy archlinux-keyring && yay -Syu && yay -Yc && sudo paccache -rPro tip: run the installer with --strict-abi to block installation until compositor/Wayland updates are applied.
If you see pacman errors like “could not lock database” or “failed to synchronize,” try these steps:
Symptoms:
- could not lock database (db.lck present)
- failed to synchronize packages / failed retrieving file
- temporary failure in name resolution
Steps:
- Ensure no other package manager is running (pacman/yay/paru).
- Clear stale lock (safe if no pacman is running): sudo rm -f /var/lib/pacman/db.lck
- Refresh databases: sudo pacman -Sy sudo pacman -Syy
- Retry your install/upgrade and watch for transient mirror/network hiccups.
- Run:
~/.local/share/archriot/install/archriot --preflight - What it checks (no changes made; safe to run anytime):
- Config: validates
packages.yaml - Binary path: confirms you’re using
$HOME/.local/share/archriot/install/archriot - Hyprland binds: verifies
SUPER+G(Telegram) andSUPER+S(Signal) - Exec-once: ensures Waybar uses
archriot --waybar-launch - Memory tuning: shows opt-in status (does not modify kernel settings)
- Waybar: shows instance count (does not kill any process); logs at ~/.cache/archriot/runtime.log
- Config: validates
By default, ArchRiot disables ZRAM to prevent compressed-RAM thrash and lockups under pressure, and applies minimal, safe VM settings system‑wide (vm.zone_reclaim_mode=0 and vm.overcommit_memory=0). To re‑enable ZRAM, remove or edit /etc/systemd/zram-generator.conf (set zram-size to a non‑zero value), and if you use systemd-swap, enable it with: sudo systemctl enable --now systemd-swap.service; then reboot. For advanced, dynamic tuning (including vm.min_free_kbytes ≈ 1% of RAM capped at 256MB, swappiness/dirty ratios), opt‑in by creating the flag file and re‑running install/upgrade. Optional (opt‑in): touch ~/.config/archriot/enable-memory-optimizations and re‑run installer/upgrade; verify /etc/sysctl.d/99-memory-optimization.conf contains the computed vm.min_free_kbytes.
touch ~/.config/archriot/enable-memory-optimizationsApply now (opt-in):
sudo cp ~/.local/share/archriot/config/system/99-memory-optimization.conf /etc/sysctl.d/99-memory-optimization.conf
total_kb=$(awk '/MemTotal/ {print $2}' /proc/meminfo); calc=$(awk -v t="$total_kb" 'BEGIN {m=int(t*0.01); if (m > 262144) m=262144; print m}'); sudo sed -i "s/^vm.min_free_kbytes=.*/vm.min_free_kbytes=$calc/" /etc/sysctl.d/99-memory-optimization.conf
sudo sysctl -p /etc/sysctl.d/99-memory-optimization.confRevert quickly (if anything feels off):
sudo sed -i 's/^vm.overcommit*memory=.*/vm.overcommit*memory=0/; s/^vm.overcommit_ratio=.*/vm.overcommit_ratio=50/; s/^vm.min_free_kbytes=.*/vm.min_free_kbytes=262144/' /etc/sysctl.d/99-memory-optimization.conf
sudo sysctl -p /etc/sysctl.d/99-memory-optimization.confIf your system boots to a blinking cursor instead of starting Hyprland:
- Get to a terminal: Press
CTRL+ALT+F3 - Login with your username and password
- Re-run the installer to fix GPU/graphics issues:
curl -fsSL https://ArchRiot.org/setup.sh | bash - Reboot after the script completes
This issue is almost always GPU-related and the installer will detect and fix graphics driver problems automatically.
Live fix without rebuilding the ISO. Apply in this order:
-
Enable iwd and avoid conflicts: sudo systemctl enable --now iwd sudo systemctl mask wpa_supplicant
-
Unblock radio: rfkill list sudo rfkill unblock all
-
Reload Mediatek driver with ASPM disabled (stability fix): sudo modprobe -r mt7921e sudo modprobe mt7921e disable_aspm=1 If the module refuses to unload, disconnect the interface first (via iwctl), then retry.
-
Check for missing firmware: dmesg | grep -i firmware If you see missing Mediatek firmware messages:
- On an installed system with network: sudo pacman -Syu linux-firmware sudo modprobe -r mt7921e && sudo modprobe mt7921e disable_aspm=1
- On live ISO without network: Copy required Mediatek firmware files to /lib/firmware/mediatek from another machine/USB, then reload the module.
-
Connect using iwd (iwctl): iwctl device list station {device} scan station {device} get-networks station {device} connect {network} station {device} show exit
-
Persist after install (recommended): Create /etc/modprobe.d/mt7921e.conf with: options mt7921e disable_aspm=1
-
Verify:
- PCIe device bound to mt7921e: lspci -k | grep -A3 -i 7921
- Radio unblocked: rfkill list
- Link visible/connected: iw dev
If your system still sleeps after ~10 minutes and interrupts downloads, ensure idle suspend is disabled at logind and that Hypridle isn’t triggering suspend earlier than expected.
- Verify logind idle policy (no idle suspend)
- Confirm the ArchRiot drop-in exists and disables idle action:
cat /etc/systemd/logind.conf.d/20-idle-ignore.conf
# Expect:
# [Login]
# IdleAction=ignore- Check effective settings:
loginctl show-logind -p IdleAction -p IdleActionUSec
# Expect: IdleAction=ignore- If missing, create the drop-in (requires reboot to take effect):
sudo mkdir -p /etc/systemd/logind.conf.d
printf "[Login]\nIdleAction=ignore\n" | sudo tee /etc/systemd/logind.conf.d/20-idle-ignore.conf
# Reboot to apply, or be aware that restarting logind can disrupt your session:
# sudo systemctl restart systemd-logind- Hypridle behavior (lock vs suspend)
- ArchRiot’s intended defaults:
- Lock at 10 minutes
- Suspend at 30 minutes, only when undocked (native: archriot --suspend-if-undocked; fallback: suspend-if-undocked.sh)
- Check if Hypridle is running:
pgrep -a hypridle || echo "hypridle not running"- Temporarily stop Hypridle (for testing):
pkill hypridle- If you want to keep downloads going (no auto-suspend):
- Edit your Hypridle config (commonly at ~/.config/hypr/hypridle.conf) to remove or comment the suspend on-timeout action that calls suspend-if-undocked.sh.
- Keep the 10-minute lock action if desired; remove only the suspend action.
- Make suspend opt-in during long downloads (inhibitor)
- Use a one-off sleep inhibitor while running a download:
systemd-inhibit --what=sleep --why="Active download" your-download-command-here- Or keep the session awake until you cancel:
systemd-inhibit --what=sleep --why="Keep awake for downloads" bash -c 'while :; do sleep 300; done'- Optional hard-disable of system sleep targets
- If you want to completely prevent sleep system-wide:
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target- Re-enable later:
sudo systemctl unmask sleep.target suspend.target hibernate.target hybrid-sleep.target- Verification checklist
- Logind shows idle ignore:
loginctl show-logind -p IdleAction -p IdleActionUSec- No active Hypridle suspend action is present; only lock is configured (or Hypridle not running during long downloads).
- Inhibitors show expected blockers during downloads:
systemd-inhibit --list- The system remains awake past your previous timeout (e.g., run a 20-minute no-op test):
timeout 1200 bash -c 'date; sleep 1200; date'Note:
- ArchRiot does not restart systemd-logind during install/upgrade. After creating or modifying drop-ins under /etc/systemd/logind.conf.d, reboot to apply cleanly.
- Keeping the lock at 10 minutes while disabling suspend preserves security without interrupting transfers.
For contributors and power users who want to build from source
# Build ArchRiot from source (in repo directory)
make # Build the Go binary
make test # Run test suite
make dev # Development build
# Version checking
cat ~/.local/share/archriot/VERSION # Show installed ArchRiot version- Main Repository: https://github.com/CyphrRiot/ArchRiot
- Maintenance: Active, with regular updates and improvements
- Community: Open to issues, suggestions, and contributions
Stay connected for updates, tips, and Linux excellence
Building the Linux system you actually want to use
- Fresh Arch Linux installation (recommended)
- Internet connection for package downloads
- 4GB+ RAM (8GB+ recommended for development)
- 8GB+ storage (10GB+ for full development setup)
- CPU: Any modern processor (optimized for both Intel/AMD)
- GPU: Any modern graphics card (see GPU Support section for full compatibility details)
Note: ArchRiot began as a unique rice1 and evolved from DHH's Omarchy installer, but has since become a completely distinct Linux distribution based on Arch. It features a custom installer, advanced Go-based package management system, and many custom applications and tools focused on privacy, development productivity, and clean aesthetics.
ArchRiot is designed for bare metal hardware. While it works perfectly in VMs, you're missing the full experience. This system is built to replace whatever disappointing Linux distribution you're currently stuck with. Install it on real hardware where it belongs.
For VM testing:
- VirtualBox/VMware: Works out of the box with the ArchRiot ISO
- QEMU/KVM: Full acceleration support with virtio drivers
- Recommended VM specs: 4GB+ RAM, 20GB+ storage, EFI boot enabled
Hardware compatibility:
- Multi-GPU systems: Automatic detection and driver installation
- High-DPI displays: Proper scaling across all applications
- Gaming hardware: Full support for NVIDIA/AMD/Intel graphics
- Modern laptops: Battery management, backlight control, and power profiles
- Per‑monitor scaling is supported and configured via Hyprland monitors (editable in
~/.config/hypr/monitors.conf) or the Control Panel’s Display Settings. - Wayland‑native apps render crisply at fractional scales (e.g., 0.9, 1.25). XWayland apps may look slightly soft at non‑integer scales.
- Brave/PWAs: ArchRiot’s Brave wrapper sets
--force-device-scale-factor=1and--high-dpi-support=1to prevent content shrink at scales below 1.0. Use per‑site/page zoom in Brave for fine‑tuning at >1.0 scales. - Mixed‑DPI (multi‑monitor): Prefer per‑monitor Wayland scaling; avoid global Xft.dpi hacks. Use kanshi profiles if you hot‑plug monitors frequently.
- Verification:
hyprctl monitorsshows current scale per display- Waybar and GTK apps should scale cleanly as you adjust monitor scale
- Screenshots reflect scaled geometry as expected
- Known quirks:
- Some Electron apps under XWayland can appear soft at fractional scales — install Wayland builds when available
- Legacy toolkits may ignore fractional scaling; consider alternatives or run with specific toolkit flags if needed
Hardware
- Intel iGPU (modern/Arc), AMD Radeon, NVIDIA proprietary
Displays
- Single monitor
- Multi‑monitor (dock/undock)
- Fractional scaling (0.9, 1.25)
Locale
- en‑US
- One non‑Latin (e.g., ja‑JP or ar)
Validation checklist
- Waybar single‑instance works; reload is SIGUSR2‑first; ~/.cache/archriot/runtime.log present
- Portals OK: Kooha screencast prompt works; OBS shows “Screen Capture (PipeWire)”
- Help binds: SUPER+H opens website; SUPER+SHIFT+H shows local help with current binds
- Thunar “Open Terminal Here” launches Ghostty
- Zed focus‑or‑launch (native > Flatpak) via SUPER+Z
- Updater dialog: non‑blocking; copy includes logs path
- Brave wrapper: brave://gpu shows acceleration; safe‑mode fixes any crash on workspace/monitor switch
- Fractional scaling behaves as documented; Brave content not shrunken at <1.0
- Control Panel window scales (60% x 85%) across monitors/scales
- Screenshots (optional): capture confirmations for README refresh
You're done! If the installer finished, your ArchRiot system is ready to rock. Reboot and enjoy your perfectly configured desktop.
Something not working? Re-run the installer - it's designed to fix problems and maintain your system.
🎉 Thank you Vaxryy for creating Hyprland—the compositor that doesn't suck.
And, thank you to JaKoolIt for your amazing scripts!
- Tarso Galvão (surtarso)
- GitHub: https://github.com/surtarso
- Notable contributions: Expanded Waybar workspace styles (ModulesWorkspaces), per-window icon mapping, related Waybar config polish.
ArchRiot is structured so that the entrypoint (source/main.go) only parses CLI flags and delegates to modular packages. This keeps the core small, testable, and safe to evolve.
-
Entrypoint (delegation-only)
source/main.go- Parses flags
- Delegates to package functions
- Contains no feature logic; only minimal glue
-
Core session helpers
source/session/- Waybar lifecycle:
LaunchWaybar,ReloadWaybar,SweepWaybar - Reload coalescer for Hyprland:
ReloadHyprland,ReloadHyprlandImmediate - Power and stability:
PowerMenu,StabilizeSession,RebootNow - Environment guards and flows:
SuspendGuard,MullvadStartup - UX helpers:
PomodoroClick,PomodoroDelayToggle,WorkspaceClick,WelcomeLaunch,StartupBackground
- Waybar lifecycle:
-
Theming
source/theming/+source/theming/applications/- Theme registry and application (e.g., Waybar, Ghostty, Hyprland, Text Editor)
- Integrated with the reload coalescer to avoid double reloads
-
Display and workspace tools
source/displays/(e.g.,Autogenfor kanshi)source/waybartools/(e.g.,SetupTemperature)source/windows/(e.g.,Switcher,FixOffscreen)
-
Upgrade, guardrails, and secure boot
source/upgradeguard/(e.g.,PreInstallABI guard for compositor/Wayland)source/upgrunner/(e.g.,Bootstrapupgrade flow orchestration)source/secboot/(e.g.,RunContinuation,RestoreHyprlandConfig)
-
CLI utilities and installer helpers
source/cli/(e.g.,ShowHelp,ValidateConfig)source/installer/(e.g.,EnsureYaybootstrap)source/executor/,source/orchestrator/(installation orchestration)
Key rules (enforced in code and process)
main.gois an entrypoint only: parse flags → delegate to packages.- Every CLI flag maps to a dedicated package function (no feature logic in
main.go). - One change at a time; always run
makeafter every change and stage exact files. - Remove unreachable or duplicate code immediately to prevent drift.
-
New first‑class memory clean:
~/.local/share/archriot/install/archriot --memory-clean- Options:
--if-low(only clean when MemAvailable < 1024 MB by default)--threshold-mb N(adjust threshold)--notify
- Elevation is automatic: root → pkexec (GUI) → sudo fallback
-
Optional low‑memory stabilize (no compositor reload):
~/.local/share/archriot/install/archriot --stabilize-session --memory-clean --notify
-
Optional keybinding (disabled by default unless you enable it):
bind = $mod CTRL SHIFT, K, exec, $HOME/.local/share/archriot/install/archriot --stabilize-session --memory-clean --notify # Stabilize (low-memory)
- Installer hang mitigation: per-command timeouts with output capture to prevent stalls; non‑critical commands continue, critical commands fail fast with clear logs. Extended timeouts for pacman/yay operations.
- Hypridle reliability: autostart now uses an absolute path (/usr/bin/hypridle); ensureIdleLockSetup appends the same to avoid PATH/env timing issues after upgrades.
- GTK Control Panel safety: settings reapply runs only when a GUI session is detected; forces GSK_RENDERER=gl; automatic cairo software-renderer fallback if GL fails to avoid GTK OpenGL context errors.
- Brave multi‑monitor flags: documented optional flags for Wayland multi‑monitor stability/performance under the Brave Wrapper section.
- Documentation polish: fixed TOC/deep links; removed duplication (Memory Tuning); updated version badge and Current Release to v3.6.1.
- 🔑 Keybindings Help (SUPER+SHIFT+H): Local, dynamic help window generated from your Hyprland config; opens as a compact Brave “app” window. GTK fallback available.
- ✉️ Telegram (SUPER+G): Focus-or-launch behavior now mirrors Fuzzel; includes a resilient delayed-retry on cold starts.
- 🛡️ Mullvad during upgrade: Auto-reconnect guard if you start the upgrade connected (no service restarts or NM changes).
- 🧩 Installer guard (ABI mismatch): Warns if Hyprland/wlroots/portal/Wayland upgrades are pending; use
--strict-abito block install until the system is upgraded. - 🔋 Battery “Full”: Shows 100% when the controller reports “fully-charged” for clearer UX.
- 📚 README polish: Emoji “Navigate This Guide,” Quick Install panel, and deep technical content consolidated into Advanced Usage and Troubleshooting.
ArchRiot is released under the MIT License, enabling community contributions and modifications.
Focused on a unified default font, UI polish, and Wayland-friendly scaling.
- Paper Mono as the default system monospace font
- Shipped in config/fonts and installed to ~/.local/share/fonts
- Applied across GTK3/GTK4, Waybar, Fuzzel, Ghostty, Control Panel, Welcome, and Zed
- Symbols coverage via ttf-nerd-fonts-symbols retained for icons/glyphs
- Brave webapps and windows scale correctly at fractional monitor scales
- Added --force-device-scale-factor=1 --high-dpi-support=1 to Brave (Wayland)
- Prevents content shrinking inside PWAs when monitor scale is < 1.0 (e.g., 0.9)
- Thunar “Open Terminal Here” launches Ghostty directly
- Reliable even without exo preferred apps configured
- Control Panel wallpaper section no longer grows offscreen
- Background slider wrapped in a horizontal scroller
- Current wallpaper label wraps/ellipsizes to preserve layout
Paper Mono by Paper Design is used as the default system monospace font in ArchRiot 3.4.
- Project: https://github.com/paper-design/paper-mono/tree/main
- The font files are included under
config/fontsand are installed to~/.local/share/fontsduring setup. - Please refer to the upstream repository for license and attribution details.
curl -fsSL https://ArchRiot.org/setup.sh | bash
Focused on persistence and UX polish for volume controls, keybindings, and SSH keys.
- No duplicate volume notifications
- Hardware XF86 audio keybindings now invoke Volume.sh with --no-notify to prevent double toasts
- Waybar visuals remain unchanged (scroll/click still works as before)
- Persistent user keybindings
- Hyprland uses config/hypr/hyprland.conf directly by default (no separate keybindings.conf).
- Installer preserves this file (alongside monitors.conf) so your binds survive repairs
- Shell persistence and SSH
- Advises putting personal aliases in ~/.config/fish/conf.d/local.fish (preserved by installer)
- Provides ~/.config/fish/conf.d/ssh-agent.fish (not installed by default). To enable: ln -s ~/.local/share/archriot/config/fish/conf.d/ssh-agent.fish ~/.config/fish/conf.d/ssh-agent.fish
- Unified fullscreen examples
- Documented, optional binds you can enable in keybindings.conf:
- bind = $mod, F11, fullscreen
- bind = ALT, RETURN, fullscreen
- Documented, optional binds you can enable in keybindings.conf:
curl -fsSL https://ArchRiot.org/setup.sh | bash
Focused on stability and UX polish related to Waybar modules, audio, and app bindings.
- AMD CPU temperature detection for Waybar custom temp module (k10temp/zenpower), plus Intel and generic fallbacks
- Waybar audio resiliency: volume module degrades gracefully when pamixer/PipeWire aren't ready, preventing crashes
- Hardware volume keys in Hyprland: XF86AudioRaiseVolume, XF86AudioLowerVolume, XF86AudioMute, XF86AudioMicMute wired to Volume.sh
- Keyboard settings launcher now respects $VISUAL/$EDITOR and falls back across common editors
- Bluesky launcher (.desktop) and PWA window rules for a consistent floating panel experience
- Waybar Mullvad module definition present; shows disconnected when Mullvad isn't installed
curl -fsSL https://ArchRiot.org/setup.sh | bash
Focused on reliability, portability, and predictable behavior across diverse hardware — while staying true to ArchRiot’s privacy-first, dev-centric philosophy.
-
Waybar portability
- Network module no longer hardcodes interface names; auto-detects reliably.
- Temperature module no longer hardcodes hwmon paths; auto-detects sensors across hardware.
- Flicker-free reloads via SIGUSR2 (no kill/restart).
-
Screen recording indicator
- Kooha recording dot shown as the left-most item on the right; click-to-stop recording.
- Clean, lightweight PipeWire-based detection; zero idle footprint when idle.
-
Portals stack aligned with Hyprland
- Added xdg-desktop-portal, xdg-desktop-portal-hyprland, xdg-desktop-portal-gtk for consistent screencast/screenshot/file chooser behavior.
-
Audio reliability
- rtkit added for PipeWire/WirePlumber realtime scheduling under load.
-
Memory tuning (opt-in)
- When enabled, vm.min_free_kbytes ≈ 1% of RAM (capped at 256MB) and overcommit heuristic (vm.overcommit_memory=0) to avoid exec starvation while maintaining responsiveness.
-
GPU auto-detect
- Installs the correct NVIDIA/AMD/Intel driver and VA stack based on lspci detection.
-
Hyprlock polish
- CPU and memory label refresh reduced to 5s to lower background CPU use while locked.
-
Fuzzel stays
- We do not use Walker; Fuzzel remains the launcher.
-
TRIM disabled by default
- No automatic fstrim.timer enablement (especially important for LUKS+btrfs). If you want weekly TRIM, enable
fstrim.timeryourself and consider addingdiscardto your LUKS mapping (with the usual privacy trade-offs).
- No automatic fstrim.timer enablement (especially important for LUKS+btrfs). If you want weekly TRIM, enable
-
Brave VA-API flags not forced
- We didn’t add aggressive browser flags by default; if you want hardware decode, verify with
vainfoand adjust your browser flags locally as needed.
- We didn’t add aggressive browser flags by default; if you want hardware decode, verify with
- Secure Boot guided sbctl flow (end-to-end).
- Optional systemd-oomd integration (opt-in with protected slices).
Run the one-liner:
curl -fsSL https://ArchRiot.org/setup.sh | bash
Thanks for the feedback and testing that shaped 3.0. This release focuses on rock-solid defaults and cross-hardware portability without compromising ArchRiot’s principles.
- Installer safeguard:
- monitors.conf backup/edits are now skipped when Hyprland is active (hyprctl -j monitors succeeds).
- Prevents display resets and Brave crashes during upgrades.
- Process guardrails (docs):
- plan.md updated with non‑negotiable rules to avoid compositor reloads in installer flows, never add new .sh for features (use Go flags), only edit README at the bottom, and gate systemd unit enable/start on unit existence.
- No user‑visible feature changes; this is a safety and reliability release.
- Portal stall recovery:
- New flag:
~/.local/share/archriot/install/archriot --portals-restart - Safely restarts
xdg-desktop-portal-hyprlandandxdg-desktop-portalvia systemd --user when available; falls back to best‑effort kill+start.
- New flag:
- Optional keybinding (commented suggestion):
bind = $mod SHIFT, P, exec, $HOME/.local/share/archriot/install/archriot --portals-restart # Restart portals
- No compositor reloads; this is a targeted reliability improvement.
- Hyprland config safety during upgrades:
- Diff-aware config copy: skip writes when unchanged (prevents auto-reload).
- No monitors.conf backup/sed during install (zero display churn).
- Always enforce displays post-config updates (no Brave gating).
- Edit-time stability:
- kanshi autostart disabled inside Hyprland to avoid reload-induced output flips while editing.
- No compositor reloads; this is a reliability-focused release.
Footnotes
-
In the context of Linux, "rice" is slang for customizing or tweaking a desktop environment or user interface to make it look aesthetically pleasing or highly personalized, often with a focus on minimalism, unique themes, or lightweight setups. It comes from the term "ricer," originally used in car culture to describe heavily modified cars (inspired by "rice burner" for Japanese cars). ↩




