OpenRiot — Project Progress
Status: IN PROGRESS — Not yet installable Version: 0.1 Last Updated: 2026-03-31
What Is OpenRiot?
OpenRiot is a polished, opinionated OpenBSD desktop system built in the spirit of ArchRiot. The goal is a one-command post-install setup (curl -fsSL https://openriot.org/setup.sh | sh) that transforms a base OpenBSD installation into a fully-configured Sway + Waybar desktop — same CypherRiot aesthetics, same keybindings, same workflow — but running on OpenBSD’s audited, pledge/unveil-secured base.
Philosophy:
- ArchRiot = rolling release, bleeding-edge Hyprland, Arch Linux base
- OpenRiot = stable OpenBSD base, Sway (i3-compatible Wayland compositor), same rice
Architecture Overview
OpenRiot has three layers:
Layer 1: ISO Builder → Produces bootable OpenBSD + autoinstall ISO
Layer 2: Base Install → OpenBSD autoinstall ( unattended or guided)
Layer 3: setup.sh + Go CLI → Packages, Sway, Waybar, Fish, dotfiles
Layer 1: ISO Builder (build-iso.sh)
Location: ~/Code/OpenRiot/build-iso.sh
Downloads the OpenBSD install ISO, injects an install.conf (autoinstall answers) and optionally a site79.tgz (custom files overlay), then repacks into a bootable ISO.
Flow:
OpenBSD snapshots/amd64/install79.iso
↓ (download, verify SHA256)
.inject(install.conf)
↓ (optional)
.inject(site79.tgz)
↓ (xorriso repack)
isos/openriot-VERSION-OPENBSD_VERSION.iso
Key files:
autoinstall/install.conf— autoinstall answer file (hostname/root password/user/password/timezone all = ask; sets location = http from cdn.openbsd.org)site/directory — custom files overlaid on target system (empty for now; populated in later steps)is/os/directory — output for built ISOs
Status: ✅ Working, tested, committed
Layer 2: Base OpenBSD Install
The ISO boots into the standard OpenBSD installer. When (A)utoinstall is selected, the installer reads install.conf from the CD root and pre-fills all answers except disk selection (which always prompts to prevent accidental data loss).
What the base install gets you:
- OpenBSD -current (7.9 snapshots) base system
- All sets (base, comp, games, man, xbase, xfont, xserv, xshare)
- User account with wheel sudo/doas access
- Network configured for HTTP install from cdn.openbsd.org
Status: ✅ Works via autoinstall.manual disk selection.
Layer 3: Post-Install Setup (setup.sh + Go CLI)
After base OpenBSD is installed and rebooted, run:
curl -fsSL https://openriot.org/setup.sh | sh
This installs and configures:
| Component | Package/Source | Notes |
|---|---|---|
| Sway | pkg_add sway |
Wayland compositor (i3-compatible) |
| Waybar | pkg_add waybar |
Status bar |
| Foot | pkg_add foot |
Terminal (replaces ghostty) |
| Fish | pkg_add fish |
Shell |
| Neovim | pkg_add neovim |
Editor |
| Firefox | pkg_add firefox |
Browser |
| Mako | pkg_add mako |
Notifications |
| Wofi | pkg_add wofi |
App launcher |
| Grim/Slurp | pkg_add grim slurp |
Screenshots |
| wl-clipboard | pkg_add wl-clipboard |
Clipboard |
| doas | OpenBSD built-in | sudo replacement |
| Swaylock | pkg_add swaylock |
Lock screen |
| swayidle | pkg_add swayidle |
Idle management |
| wlsunset | pkg_add wlsunset |
Blue light filter |
| bcrypt | OpenBSD base | Password hashing |
Dotfiles are cloned from ~/.dotfiles (user’s own repo) and symlinked.
Status: 🔴 Not yet written — this is the next major task (Step D in the plan below).
Current Project State
✅ Completed
| Item | Location | Notes |
|---|---|---|
| ISO builder | build-iso.sh |
Downloads, verifies, injects, repacks |
| Autoinstall config | autoinstall/install.conf |
Asks hostname/password/user/timezone; disk prompts |
| site79.tgz support | site/ dir + build-iso.sh step |
Empty for now; ready for custom files |
| Sway config | config/sway/ |
Ported from ~/.config/sway; OpenBSD fixes applied |
| Jekyll site | _layouts/, _config.yml, assets/css/style.scss |
Midnight theme, CypherRiot CSS |
| README | README.md |
Badges, IN PROGRESS warning, install methods |
| CNAME | CNAME |
openriot.org |
| Blowfish emoji | _layouts/default.html, README.md, _config.yml |
Replaced 🎭 with 🐡 |
🔴 Not Yet Done
| Item | Priority | Blocking |
|---|---|---|
setup.sh script |
Critical | Blocks end-to-end install |
| Go installer port | Critical | setup.sh depends on it |
| Package list (packages.yaml) | Critical | Need pkg_add equivalent of ArchRiot’s packages.yaml |
| OpenBSD dotfiles structure | High | How to organize installed configs |
| Control panel (Go) | Medium | Nice to have; not blocking |
site79.tgz populated files |
Medium | doas.conf, pkg.conf, hostname |
| Backgrounds/wallpapers | Low | CypherRiot backgrounds not yet available |
| Swaylock dynamic wallpaper | Low | Requires backgrounds + openriot binary |
Step-by-Step Build Plan
Phase 1: ISO Builder (DONE ✅)
build-iso.shwritten and tested- SHA256 verification working (correctly parses OpenBSD’s
SHA256 (file) = hashformat) install.confcreated (autoinstall answers)site79.tgzinjection working (skips when dir empty)- ISO output:
isos/openriot-0.1-7.9.iso - Version bumped to 0.1
Phase 2: Post-Install Setup Script (NEXT 🔴)
- Write
setup.sh(thecurl | shbootstrap)- Detect OpenBSD version
- Install packages via
pkg_add - Clone/fetch dotfiles
- Deploy Sway + Waybar configs
- Set Fish as default shell
- Configure doas
- Start Sway
Proposed setup.sh structure:
#!/bin/sh
set -e
echo "=== OpenRiot Setup ==="
# 1. Check we're on OpenBSD
if [ "$(uname)" != "OpenBSD" ]; then
echo "ERROR: OpenRiot requires OpenBSD"
exit 1
fi
# 2. Detect architecture and install packages
pkg_add -v sway waybar foot fish neovim \
git curl doas \
grim slurp wl-clipboard mako wofi \
firefox btop transmission-gtk \
python3
# 3. Fish as default shell for user
chsh -s /usr/local/bin/fish
# 4. Clone dotfiles
if [ -d "$HOME/.dotfiles" ]; then
echo "Dotfiles already exist, skipping clone"
else
git clone https://github.com/CyphrRiot/dotfiles.git "$HOME/.dotfiles"
fi
# 5. Deploy Sway config
mkdir -p "$HOME/.config/sway"
cp "$HOME/.dotfiles/sway/config" "$HOME/.config/sway/config" 2>/dev/null || true
cp "$HOME/.dotfiles/sway/keybindings.conf" "$HOME/.config/sway/keybindings.conf" 2>/dev/null || true
cp "$HOME/.dotfiles/sway/windowrules.conf" "$HOME/.config/sway/windowrules.conf" 2>/dev/null || true
# 6. Deploy Waybar config
mkdir -p "$HOME/.config/waybar"
cp -r "$HOME/.dotfiles/waybar/"*. "$HOME/.config/waybar/" 2>/dev/null || true
# 7. Deploy Fish config
cp -r "$HOME/.dotfiles/fish/"*. "$HOME/.config/fish/" 2>/dev/null || true
# 8. Doas config (passwordless for wheel)
echo "permit nopass :wheel" > /etc/doas.conf
# 9. Waybar autostart (already in Sway config)
echo "=== OpenRiot ready! Run 'sway' from tty to start ==="
Phase 3: Go Installer Port (later 🔴)
Port the ArchRiot Go CLI to OpenBSD. Key differences from ArchRiot:
| ArchRiot | OpenRiot |
|---|---|
pacman + yay (AUR) |
pkg_add |
systemd user services |
rc.d / doas |
| Hyprland | Sway |
hyprlock |
swaylock |
hypridle |
swayidle |
brightnessctl |
N/A (no brightness control on OpenBSD) |
gsettings |
N/A (no GNOME deps) |
i3-autotiling (AUR) |
Not available |
$HOME/.local/share/archriot/ |
$HOME/.local/share/openriot/ |
| ArchRiot Hyprland modules | Sway/Waybar equivalents |
Go packages to port/rewrite:
source/main.go— entry point, CLI flagssource/installer/— pacman/yay → pkg_addsource/session/— systemd → rc.d / direct commandssource/waybar/— largely compatible (Waybar works on Sway)source/theming/— largely compatiblesource/upgradeguard/— pacman db → pkg infosource/upgrunner/— pacman → pkg_add
Go packages likely reusable without changes:
source/cli/source/logger/source/config/(loader, types, dependency validator)source/executor/source/crypto/source/display/source/windows/
File Reference
ISO Builder
| File | Purpose |
|---|---|
build-iso.sh |
Main build script; downloads ISO, injects files, repacks |
autoinstall/install.conf |
Autoinstall answer file |
site/ |
Directory for custom files to overlay on target system |
is/os/ |
Output directory for built ISOs |
Sway Config (ported from ~/.config/sway)
| File | Purpose |
|---|---|
config/sway/config |
Main Sway config; sources other files |
config/sway/keybindings.conf |
All keybindings (bindsym) |
config/sway/monitors.conf |
Monitor/workspace config |
config/sway/windowrules.conf |
for_window rules |
config/sway/swayidle.conf |
Idle/lock configuration (reference) |
config/sway/swaylock.conf |
Swaylock config |
config/sway/swaylock-wrapper.sh |
Lock screen background generator (calls Python script) |
config/sway/swaylock-wrapper.py |
Generates dynamic lock screen with time/date/crypto |
Jekyll Site
| File | Purpose |
|---|---|
_config.yml |
Jekyll config; Midnight theme, OpenRiot title/description |
_layouts/default.html |
Page layout; Midnight CSS overrides, footer, JS |
assets/css/style.scss |
Custom CSS (imports Midnight, then CypherRiot overrides) |
README.md |
GitHub Pages landing page |
CNAME |
Domain: openriot.org |
OpenBSD-Specific Reference
Package Management
# Install packages
pkg_add -v package1 package2
# Update packages
pkg_add -u
# Search packages
pkg_info -Q searchterm
# List installed
pkg_info
Services (rc.d)
# Enable service
rcctl enable service
# Start now
rcctl start service
# Disable
rcctl disable service
Key Services for Desktop
| Service | Purpose |
|---|---|
apmd |
Power management (battery, suspend, lid) |
sndiod |
Audio (disable with sndiod_flags=NO) |
sshd |
SSH (enabled by default on install) |
Network/WiFi
OpenBSD uses iwx for Intel WiFi 6 (AX211). Configure in /etc/hostname.if:
# /etc/hostname.iwx0
nwid YOUR_SSID wpakey YOUR_PASSWORD
inet autoconf
Then: sh /etc/netstart
System Updates
# Patch and upgrade
syspatch -a && sysupgrade
# Package updates
pkg_add -u
Doas (sudo replacement)
# /etc/doas.conf
permit nopass :wheel
Disk Encryption
OpenBSD supports softraid encryption (full-disk encryption). During install, choose (E)ncrpyt when prompted for the root disk. This sets up a passphrase prompt at boot.
OpenBSD vs Linux: Key Differences for the Installer
| Topic | ArchRiot (Linux) | OpenRiot (OpenBSD) |
|---|---|---|
| Package manager | pacman + yay (AUR) | pkg_add |
| Init system | systemd | rc.d (OpenBSD base) |
| Compiler toolchain | base + AUR | base + comp79.tgz |
| WiFi driver | networkmanager/iwd | iwx (Intel), urtwn, athn |
| Brightness | brightnessctl | N/A (no standard tool) |
| Lock screen | hyprlock | swaylock |
| Idle | hypridle | swayidle |
| Notifications | mako | mako |
| Screenshots | grim + slurp | grim + slurp |
| Font rendering | fontconfig | fontconfig |
| Desktop entry | .desktop files | same |
| XDG dirs | same | same |
| User systemd | systemctl –user | N/A (use raw commands) |
| Session lock | hyprlock | swaylock |
| Idle dim | brightnessctl | N/A |
Known Issues
brightnessctlnot available on OpenBSD — removed from swayidle in config/sway/config. No standard brightness control tool on OpenBSD.gsettingsnot available on OpenBSD — commented out in sway/config. GTK theming handled differently.i3-autotilingnot available on OpenBSD pkg repo — commented out. Sway’s default dwindle layout handles most tiling.hyprlocknot available on OpenBSD — replaced withswaylockin swayidle.- Control panel — ArchRiot’s GTK4 control panel has not been ported.
setup.sh— not yet written; this is the critical next step.- Go installer — not yet ported;
setup.shwill be shell-only until Go port is done. - Wallpapers/backgrounds — not yet available in OpenRiot; swaylock-wrapper.py references
~/.local/share/openriot/backgrounds/which doesn’t exist yet. openriot.orgsite — currently serves Jekyll site only;setup.shis not yet hosted at the domain.
TODO List
P0 — Critical (must have before first install)
- Write
setup.shbootstrap script - Host
setup.shatopenriot.org/setup.sh - Test
setup.shon a real OpenBSD installation - Fix any package name differences
P1 — Important (full desktop experience)
- Write
install/packages.yaml(pkg_add equivalent of ArchRiot’s packages.yaml) - Port Go installer (or significant subset) to OpenBSD
- Populate
site/with useful files (doas.conf, pkg_add.conf, etc.) - Copy/configure Waybar modules from ArchRiot
- Copy/configure Fish shell config from ArchRiot
- Copy/configure Neovim config from ArchRiot
P2 — Nice to have
- Port Go control panel to OpenBSD (GTK4 or Go TUI)
- Swaylock dynamic wallpaper with OpenBSD backgrounds
- OpenRiot wallpapers (CypherRiot theme ported)
- Test on real hardware (ThinkPad X1 Carbon Gen 13)
- Test WiFi (AX211 vs BE201)
P3 — Future
- Release ISO with pre-baked setup.sh included
- Create OpenRiot.org release page with ISO downloads
- Announce on misc@openbsd.org
Credits
- ArchRiot — The project OpenRiot is derived from. See github.com/CyphrRiot/ArchRiot
- OpenBSD — The operating system base. See openbsd.org
- Sway — The Wayland compositor. See swaywm.org
- Midnight Theme — GitHub Pages Jekyll theme. See pages-themes/midnight
License
MIT License — same as ArchRiot ```