yino/REQUIREMENTS.md
2026-02-21 17:12:35 +01:00

487 lines
21 KiB
Markdown

# Requirements: Yino
> Generated during /opsx:explore session on 2026-02-21
> Status: Draft — pending architect review
## 1. Project Overview
### Vision
Yino ("Yino Is Not Omarchy") is a full-fidelity port of [Omarchy](https://github.com/basecamp/omarchy) from Arch
Linux to Debian Linux. It delivers the same opinionated, keyboard-driven Hyprland desktop experience but on a stable
Debian base instead of Arch's rolling release.
### Problem Being Solved
Omarchy is Arch-only. Users who want its curated desktop experience but prefer or require Debian's stability and
ecosystem (enterprise environments, known hardware support, LTS lifecycle) have no option today. Yino fills that gap.
### Success Criteria
- SC-001: A user can boot a Yino ISO, complete an unattended installation (offline-capable), and arrive at a working
Hyprland desktop identical in look, feel, and functionality to Omarchy
- SC-002: All Omarchy `omarchy-*` commands have working `yino-*` equivalents
- SC-003: Omarchy themes install and work on Yino without modification (file structure compatibility)
- SC-004: Upstream Omarchy changes can be evaluated and ported to Yino with reasonable effort
### Context
- **Greenfield vs. existing:** Partial existing work. A QEMU VM helper (`bin/yino-vm`), a preseed config
(`iso/preseed.cfg`), and reference documentation exist. The preseed achieves a bootable Hyprland system but uses a
fragile approach (nested echo statements in `late_command`, network dependency on sid). The project needs a clean
architecture before proceeding further.
- **Upstream reference:** Omarchy @ `463417a` (`dev` branch), analyzed 2026-02-16. See `docs/Omarchy.md`.
- **Base OS:** Debian 13 "Trixie" (stable, released August 2025)
## 2. Stakeholders & Users
### Primary User
Single-user desktop operator. Same persona as Omarchy's target: a developer who wants an opinionated, pre-configured
Linux desktop and doesn't want to assemble it themselves.
### Technical Ability
Comfortable with Linux basics (terminal, sudo, SSH). Does not want to compile kernels or debug Wayland protocols.
Expects things to work out of the box after installation.
### Scale
Single machine per installation. No fleet management, no multi-user, no remote deployment (for now).
### Target Hardware
- Architecture: amd64 only
- Reference hardware: Framework 13 AMD Ryzen 7040 (future, not immediate)
- Immediate target: QEMU VM (development and testing)
## 3. Functional Requirements
### 3.1 ISO Generation & Installation
**FR-001: Offline-capable installation ISO**
- The project shall produce tooling to generate a custom Debian 13 (Trixie) installation ISO
- The ISO shall contain all packages needed for a complete Yino installation, including packages not in Trixie stable
(downloaded from sid and cached/slipstreamed into the ISO)
- Installation shall work without network access (offline-capable)
- _Priority: Must_
- _Acceptance criteria:_ Running the ISO build script produces a bootable ISO. Booting that ISO in a network-isolated
QEMU VM results in a complete Yino installation.
**FR-002: Unattended installation via preseed**
- The Debian installer shall be driven by a preseed configuration
- Preseed scope is limited to base OS concerns: locale, partitioning, encryption, filesystem, user account, bootloader
- The preseed shall configure: LUKS full-disk encryption, btrfs filesystem, a single user account with automatic login,
GRUB bootloader with serial console support (for VM testing)
- _Priority: Must_
- _Acceptance criteria:_ The installation completes without user interaction beyond the LUKS passphrase (which is
hardcoded for dev/test, prompted in production).
**FR-003: Post-install configuration via installer script**
- All desktop environment setup, package installation, and configuration shall be handled by a separate installer
script, not by the preseed `late_command`
- The installer shall follow Omarchy's phased architecture (preflight, packaging, config, login, post-install)
- The installer shall be idempotent (safe to re-run)
- _Priority: Must_
- _Acceptance criteria:_ The preseed triggers the installer (via a first-boot systemd service or equivalent). The
installer runs the full phase sequence and produces a working desktop.
**FR-004: ISO build script**
- A reproducible build script shall take the stock Debian 13 DVD ISO, inject the preseed, cached packages, and
installer, and produce the final Yino ISO
- Downloaded assets (Debian ISO, sid .debs) shall be cached in the `download/` directory
- _Priority: Must_
- _Acceptance criteria:_ Running the build script twice with the same inputs produces functionally identical ISOs.
### 3.2 Desktop Environment
**FR-010: Hyprland compositor**
- Hyprland shall be the sole compositor (Wayland-only, no X11)
- Launched via UWSM through SDDM with automatic login
- Configuration shall follow Omarchy's structure: `hyprland.conf` sourcing `bindings.conf`, `monitors.conf`,
`input.conf`, `looknfeel.conf`
- _Priority: Must_
- _Acceptance criteria:_ After installation, the system boots to a Hyprland desktop with working window tiling,
workspaces, and keybindings matching Omarchy's defaults.
**FR-011: Status bar (Waybar)**
- Waybar shall provide the top status bar
- Module layout shall match Omarchy: logo + workspaces (left), clock + indicators (center), tray + network + audio +
cpu + battery (right)
- _Priority: Must_
**FR-012: Application launcher (Walker)**
- Walker shall be the application launcher, bound to Super + Space
- Provides fuzzy search across applications, files, and commands
- _Note:_ Walker is not packaged for Debian. Must be built from source or packaged as .deb.
- _Priority: Must_
**FR-013: Notification daemon (Mako)**
- Mako shall handle desktop notifications with theme-aware styling
- _Priority: Must_
**FR-014: On-screen display (SwayOSD)**
- SwayOSD shall provide OSD for volume, brightness, and caps lock changes
- _Note:_ Trixie has 0.1.0 (old). Sid has 0.3.0. Use sid version.
- _Priority: Should_
**FR-015: Lock screen (Hyprlock)**
- Hyprlock shall provide the lock screen with theme-aware styling
- _Priority: Must_
**FR-016: Idle management (Hypridle)**
- Hypridle shall manage screen dimming, locking, and suspend after configurable idle timeouts
- _Priority: Must_
**FR-017: Night light (Hyprsunset)**
- Hyprsunset shall provide blue light filtering
- _Note:_ Not packaged in any Debian suite. Must be built from source. Alternative: `wlsunset` is in Debian.
- _Priority: Should_
**FR-018: Terminal emulators**
- Ghostty shall be the default terminal
- Alacritty shall also be installed
- _Note:_ Ghostty is not packaged for Debian. Community .deb builds exist (debian.griffo.io). Evaluate whether to
use community builds or build from source.
- _Priority: Must (Ghostty), Should (Alacritty pre-installed)_
**FR-019: Neovim**
- Neovim shall be installed with a configuration equivalent to Omarchy's `omarchy-nvim`
- The configuration shall include LSP, Treesitter, and the pixel.nvim colorscheme (ANSI-color-adaptive)
- _Note:_ Can be delivered as dotfiles overlay rather than a .deb package.
- _Priority: Must_
**FR-020: Browser**
- Chromium shall be the default browser
- _Note:_ Omarchy ships a custom `omarchy-chromium` with live Material Design 3 theme switching. This is significant
build effort. Standard Debian Chromium is acceptable for v1; custom build is a future enhancement.
- _Priority: Must (standard Chromium), Could (live theme switching via custom build)_
### 3.3 Configuration System
**FR-030: Three-layer configuration system**
- Yino shall implement Omarchy's 3-layer config system:
- Layer 1 (Default): `~/.local/share/yino/default/` — factory defaults, overwritten on update
- Layer 2 (Theme): `~/.local/share/yino/themes/<name>/` — theme overrides
- Layer 3 (User): `~/.config/` — user customizations, highest priority
- _Priority: Must_
**FR-031: Keybindings**
- All Omarchy default keybindings shall be replicated (Super as primary modifier)
- Super + Return = Terminal, Super + Space = Walker, Super + W = Close, etc.
- Full keybinding reference accessible via Super + K
- _Priority: Must_
**FR-032: User hooks**
- Users shall be able to place scripts in `~/.config/yino/hooks/` for event-driven customization
- The `yino-hook` command shall dispatch named hooks
- _Priority: Should_
### 3.4 Theming
**FR-040: Theme system**
- Yino shall support Omarchy's theme format: a directory containing up to 10 files (alacritty.toml, btop.theme,
hyprland.conf, hyprlock.conf, mako.ini, neovim.lua, swayosd.css, walker.css, waybar.css, backgrounds/)
- `yino-theme-set <name>` shall atomically restyle all themed components
- _Priority: Must_
- _Acceptance criteria:_ Installing an Omarchy community theme (e.g., synthwave84) via its git URL works without
modification.
**FR-041: Built-in themes**
- All 14 Omarchy built-in themes shall be included
- _Priority: Must_
**FR-042: Community theme support**
- `yino-theme-install <git-url>` shall install third-party themes from Git repositories
- _Priority: Must_
### 3.5 Menu System
**FR-050: Yino menu**
- `yino-menu` shall replicate Omarchy's hierarchical menu system via Walker
- Menu structure: Apps, Learn, Trigger, Style, Setup, Install, Remove, Update, About, System
- All submenus shall have working Debian equivalents of their Omarchy counterparts
- _Priority: Must_
### 3.6 System Management
**FR-060: Update system**
- `yino-update` shall: create a btrfs snapshot, pull latest Yino from git, run pending migrations, re-run the
installer pipeline idempotently
- _Priority: Must_
**FR-061: Snapshot management**
- Btrfs snapshots via Snapper with configurable limits
- `yino-snapshot` for manual snapshot creation
- _Priority: Must_
**FR-062: Migration system**
- Timestamped migration scripts that run once per system (same mechanism as Omarchy)
- Tracked in a state file so they don't re-run
- _Priority: Must_
### 3.7 Security
**FR-070: Full-disk encryption**
- LUKS encryption is mandatory during installation
- _Priority: Must_
**FR-071: Firewall**
- UFW enabled by default
- _Priority: Must_
**FR-072: GPG and keyring**
- GPG agent configured for signing
- GNOME keyring auto-unlocked on login
- _Priority: Must_
**FR-073: SSH configuration**
- Connection stability tweaks matching Omarchy
- _Priority: Should_
### 3.8 Boot
**FR-080: Plymouth boot splash**
- Custom Yino-branded Plymouth theme (adapted from Omarchy's Tokyo Night theme)
- LUKS passphrase prompt over the splash, progress bar animation
- _Priority: Should_
**FR-081: SDDM auto-login**
- SDDM configured for automatic login to hyprland-uwsm session
- Single-user model: disk decryption authenticates the user
- _Priority: Must_
### 3.9 Applications & Utilities
**FR-090: Pre-installed applications**
- The following shall be installed: Chromium, Nautilus (file manager), evince (PDF viewer), mpv (media player),
LibreOffice
- _Priority: Must_
**FR-091: Pre-installed CLI utilities**
- The following shall be installed: btop, fastfetch, ripgrep, fzf, bat, eza, zoxide, dust, jq, gum, lazygit
- _Priority: Must_
**FR-092: Development tools**
- Docker and docker-compose, GitHub CLI (gh), mise (dev tool version manager)
- _Priority: Should_
**FR-093: Optional applications**
- Spotify, Typora, Obsidian, Signal, 1Password — installable via `yino-menu` > Install
- These should be available to install, not necessarily pre-installed
- _Priority: Could_
### 3.10 Shell Scripts (yino-* commands)
**FR-100: Command parity**
- Every `omarchy-*` command shall have a `yino-*` equivalent
- Package management wrappers shall use `apt` instead of `pacman`/`yay`
- All Arch-specific logic shall be replaced with Debian equivalents
- _Priority: Must_
**FR-101: Hardware detection and fixes**
- Hardware-specific fixes from Omarchy shall be ported where applicable to Debian
- NVIDIA, Bluetooth, printing, audio, Wi-Fi power save, USB autosuspend
- Apple-specific fixes: evaluate relevance, defer if not needed for target hardware
- _Priority: Should_
## 4. Non-Functional Requirements
**NFR-001: Debian stable as base**
- Trixie (Debian 13) is the base. All packages shall come from Trixie stable where available.
- Packages not in Trixie (primarily the Hyprland ecosystem) shall be sourced from sid, cached, and included in the ISO.
- No runtime dependency on sid repositories. After installation, the system shall be fully functional without network.
- _Rationale:_ Debian stable's conservative updates are the whole point of Yino over Omarchy/Arch.
**NFR-002: Package sourcing tiers**
- Tier 1 — Trixie stable (use directly): ~90% of packages (Mako, swaybg, SDDM, Alacritty, Neovim, all CLI tools,
pipewire, cups, fonts, etc.)
- Tier 2 — sid .debs (download, cache, slipstream): Hyprland ecosystem (12+ packages), UWSM, newer Waybar (0.15),
newer SwayOSD (0.3.0)
- Tier 3 — Build from source or external (cache as .debs): Walker, Ghostty, Hyprsunset, lazydocker
- _Rationale:_ The entire Hyprland ecosystem was deliberately removed from Trixie (Debian Bug #1107152). sid is the
only official Debian source.
**NFR-003: Offline installation**
- A completed Yino ISO shall contain all packages needed for installation. No network required during install.
- Network may be used during ISO build to download and cache packages.
**NFR-004: Reproducible ISO builds**
- The ISO build process shall be scripted and deterministic given the same input packages.
- All downloaded assets cached in `download/`.
**NFR-005: Upstream tracking**
- Yino shall track upstream Omarchy development on the `dev` branch.
- The `docs/Omarchy.md` analysis document shall be kept current.
- Changes shall be evaluated and ported where applicable using the Arch-to-Debian mapping in `docs/Omarchy.md` §14.
**NFR-006: Naming convention**
- All scripts shall use the `yino-` prefix (not `omarchy-`).
- Internal paths shall use `yino` (e.g., `~/.local/share/yino/`, `yino-first-boot.service`).
- Config directory: `~/.config/yino/` (for Yino-specific config; component configs like Hyprland remain in their
standard locations).
**NFR-007: QEMU testability**
- The system shall boot and be fully functional in a QEMU VM (including software-rendered cursors and virtual GPU).
- The `bin/yino-vm` helper shall remain the primary development/test tool.
**NFR-008: Idempotent installer**
- The installer script shall be safe to run multiple times. Re-running shall bring the system to the desired state
without duplication or breakage.
**NFR-009: Maintainability**
- No shell scripts written as nested echo statements inside preseed `late_command`.
- Preseed handles base OS only. Installer is a separate, readable, version-controlled script tree.
- Clear separation: preseed → first-boot trigger → installer phases.
## 5. Constraints
### Technical
- **Debian 13 Trixie only.** No support for Bookworm (12) or older.
- **amd64 only.** No arm64 or other architectures.
- **Wayland only.** No X11 support or fallback.
- **No custom Debian package repository** (for now). Packages not in Debian are cached as .deb files and included
in the ISO. A proper apt repo is future work.
- **No Secure Boot.** Same as Omarchy — explicitly not supported.
### Business / Process
- **Minimize dependencies.** Discuss with owner before adding anything not in Omarchy.
- **Match upstream Omarchy.** When multiple approaches exist, prefer the one Omarchy uses. Deviate only where strictly
necessary for Debian compatibility.
- **KISS.** Simple solutions preferred. Less is more.
### Scope Exclusions (explicit "Won't" for now)
- Custom Chromium build with live theme switching (use standard Debian Chromium)
- Custom apt package repository infrastructure
- Multi-architecture support (arm64)
- Fleet deployment or multi-user scenarios
- Apple hardware-specific fixes (T2 chip, SPI keyboard, NVMe suspend)
## 6. Assumptions & Dependencies
### Assumptions
- A-001: Debian 13 Trixie remains the current stable release throughout development
- A-002: Hyprland ecosystem packages in sid remain buildable/installable on a Trixie base (library compatibility)
- A-003: Omarchy's `dev` branch remains the active development branch
- A-004: The QEMU VM provides sufficient test coverage for the initial development phase
- A-005: Community Ghostty .deb builds (e.g., debian.griffo.io) are trustworthy for development; production may
require building from source
### Dependencies
- D-001: Upstream Omarchy repository (`basecamp/omarchy`) for reference configs, themes, and scripts
- D-002: Debian sid repository for Hyprland ecosystem .debs
- D-003: Stock Debian 13 DVD ISO (`debian-13.x.x-amd64-DVD-1.iso`) as build input
- D-004: QEMU + OVMF for development testing
## 7. Open Questions
- OQ-001: **sid library compatibility** — Will the Hyprland stack from sid install cleanly on a Trixie base, or will
it pull in cascading sid dependencies that destabilize the system? Needs a spike: download the Hyprland .debs from
sid and attempt install on a clean Trixie system.
- OQ-002: **Walker build** — Walker is a Go application. What are its build dependencies? Can we produce a static
binary and ship it without a .deb? Or should we package it properly?
- OQ-003: **Ghostty sourcing** — Build from source (Zig toolchain needed), use community .debs, or defer Ghostty and
use Alacritty/foot as default terminal?
- OQ-004: **Hyprsunset vs. wlsunset** — Hyprsunset is not in Debian at all. `wlsunset` is in Trixie stable and
provides similar functionality. Is Omarchy compatibility worth the build effort, or is wlsunset an acceptable
substitute?
- OQ-005: **Waybar version** — Trixie ships 0.12.0, sid has 0.15.0. Does Omarchy's Waybar config require features
from 0.15? If so, Waybar moves to Tier 2 (sid).
- OQ-006: **ISO build tool**`live-build`, `simple-cdd`, or manual ISO remastering (extract, inject preseed +
packages, repackage)? Each has tradeoffs in complexity vs. control.
- OQ-007: **Omarchy theme names** — The analysis document doesn't list all 14 built-in theme names. Need to inspect
the upstream `themes/` directory to enumerate them.
- OQ-008: **Update channel model** — Omarchy has 4 channels (stable/rc/edge/dev). Yino on Debian stable likely needs
only 1-2. What's the right model?
## 8. Glossary
| Term | Definition |
|:-----|:-----------|
| **Omarchy** | Upstream Arch Linux-based desktop distribution by Basecamp/DHH |
| **Yino** | "Yino Is Not Omarchy" — this project; Debian-based port of Omarchy |
| **Trixie** | Debian 13, the current stable release (August 2025) |
| **sid** | Debian unstable — rolling release, always the newest packages |
| **forky** | Debian testing — the future Debian 14 |
| **Hyprland** | Wayland compositor and tiling window manager |
| **UWSM** | Universal Wayland Session Manager — launches Hyprland via SDDM |
| **Walker** | Application launcher used by Omarchy (fuzzy search over apps/files/commands) |
| **SDDM** | Simple Desktop Display Manager — handles login/auto-login |
| **preseed** | Debian installer automation format (answer file for `debian-installer`) |
| **OPR** | Omarchy Package Repository — custom Arch packages built by the Omarchy team |
| **Snapper** | Btrfs snapshot management tool |
| **LUKS** | Linux Unified Key Setup — full-disk encryption |
| **Plymouth** | Boot splash screen system |
| **pixel.nvim** | Neovim colorscheme that adapts to terminal ANSI colors (0-15) |
| **slipstream** | To inject additional packages/files into an existing ISO image |
## Appendix: Priority Matrix
### Must Have (required for a functional system)
| ID | Requirement |
|:---|:------------|
| FR-001 | Offline-capable installation ISO |
| FR-002 | Unattended installation via preseed |
| FR-003 | Post-install configuration via installer script |
| FR-004 | ISO build script |
| FR-010 | Hyprland compositor |
| FR-011 | Waybar status bar |
| FR-012 | Walker application launcher |
| FR-013 | Mako notifications |
| FR-015 | Hyprlock lock screen |
| FR-016 | Hypridle idle management |
| FR-018 | Ghostty terminal (or acceptable substitute) |
| FR-019 | Neovim with config |
| FR-020 | Chromium browser (standard) |
| FR-030 | Three-layer configuration system |
| FR-031 | Keybindings (Omarchy defaults) |
| FR-040 | Theme system (Omarchy-compatible format) |
| FR-041 | 14 built-in themes |
| FR-042 | Community theme support |
| FR-050 | Yino menu |
| FR-060 | Update system |
| FR-061 | Snapshot management |
| FR-062 | Migration system |
| FR-070 | LUKS full-disk encryption |
| FR-071 | UFW firewall |
| FR-072 | GPG and keyring |
| FR-081 | SDDM auto-login |
| FR-090 | Pre-installed GUI applications |
| FR-091 | Pre-installed CLI utilities |
| FR-100 | yino-* command parity |
### Should Have (expected but not blocking)
| ID | Requirement |
|:---|:------------|
| FR-014 | SwayOSD on-screen display |
| FR-017 | Hyprsunset / night light |
| FR-032 | User hooks |
| FR-073 | SSH configuration |
| FR-080 | Plymouth boot splash |
| FR-092 | Development tools (Docker, gh, mise) |
| FR-101 | Hardware detection and fixes |
### Could Have (desirable, defer if needed)
| ID | Requirement |
|:---|:------------|
| FR-020 | Custom Chromium with live theme switching |
| FR-093 | Optional applications (Spotify, Typora, Obsidian, Signal, 1Password) |
### Won't Have (explicitly out of scope)
| Item | Reason |
|:-----|:-------|
| Custom apt repository | Premature; cache .debs directly for now |
| arm64 support | amd64 only |
| Multi-user / fleet deployment | Single-user desktop only |
| Apple hardware fixes | Not relevant to target hardware |
| Secure Boot | Same as Omarchy — not supported |