# hylmithecoder/opi_installer architecture

> Architecture diagram of the GitHub repository hylmithecoder/opi_installer, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/hylmithecoder/opi_installer
- Repository: https://github.com/hylmithecoder/opi_installer

## Overview

opiinstaller is a GUI and headless provisioning tool for writing Orange Pi OS or Armbian images to SD cards and configuring them offline. The primary workflow is drive discovery and safety filtering, confirmation, optional unmounting and image flashing, root-filesystem provisioning, then syncing. Configure-only mode enters provisioning without flashing. The README documents networking, account and SSH setup, SPI overlays, and factory-service deployment. The excerpts show the main orchestration and core module responsibilities; detailed wiring within unsampled code is represented only where documented.

Main entry points: [`src/configurator.rs`](https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs) (Offline rootfs setup), [`src/main.rs`](https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs) (Worker orchestration), [`src/flasher.rs`](https://github.com/hylmithecoder/opi_installer/blob/master/src/flasher.rs) (Image streaming), [`src/device.rs`](https://github.com/hylmithecoder/opi_installer/blob/master/src/device.rs) (Drive discovery and safety)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["User interface"]
  node_gui["Iced GUI<br/>[main.rs]"]
  node_confirmation["Write confirmation<br/>[main.rs]"]
end

subgraph group_execution["Privileged execution"]
  node_worker["Worker orchestration<br/>[main.rs]"]
  node_drive_scan["Drive discovery and safety<br/>[device.rs]"]
  node_unmount["Partition unmounting<br/>[device.rs]"]
  node_image_writer["Image streaming<br/>[flasher.rs]"]
  node_progress["Progress and IPC<br/>[main.rs]"]
end

subgraph group_provisioning["Rootfs provisioning"]
  node_rootfs["Offline rootfs setup<br/>[configurator.rs]"]
  node_wifi["Wi-Fi profiles<br/>[configurator.rs]"]
  node_accounts["Account password setup<br/>[configurator.rs]"]
  node_ssh["SSH enablement<br/>[configurator.rs]"]
  node_overlays["SPI overlay setup<br/>[configurator.rs]"]
  node_factory["Factory service deployment<br/>[configurator.rs]"]
end

subgraph group_host["Host and target"]
  node_block_devices[("Host block devices")]
  node_host_tools["Linux utilities"]
  node_image["OS image file"]
  node_root_filesystem[("Target root filesystem")]
  node_factory_assets["Factory assets"]
  node_systemd["Systemd service setup"]
end

node_user(("Operator"))

node_user -->|"configures"| node_gui
node_gui -->|"refreshes drives"| node_drive_scan
node_drive_scan -->|"runs lsblk"| node_host_tools
node_drive_scan -->|"inspects devices"| node_block_devices
node_gui -->|"requests confirmation"| node_confirmation
node_confirmation -->|"starts job"| node_worker
node_worker -->|"unmounts partitions"| node_unmount
node_unmount -->|"runs umount"| node_host_tools
node_worker -->|"flashes when requested"| node_image_writer
node_image_writer -->|"reads"| node_image
node_image_writer -->|"uses xz"| node_host_tools
node_image_writer -->|"writes image"| node_block_devices
node_worker -->|"provisions target"| node_rootfs
node_rootfs -->|"mounts and updates"| node_root_filesystem
node_rootfs -->|"writes profiles"| node_wifi
node_rootfs -->|"updates credentials"| node_accounts
node_rootfs -->|"enables access"| node_ssh
node_rootfs -->|"configures boot overlays"| node_overlays
node_rootfs -->|"installs service"| node_factory
node_factory -->|"copies binary and env"| node_factory_assets
node_factory -->|"creates and enables unit"| node_systemd
node_worker -->|"streams status"| node_progress
node_progress -->|"reports progress"| node_gui

click node_gui "https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs"
click node_confirmation "https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs"
click node_worker "https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs"
click node_drive_scan "https://github.com/hylmithecoder/opi_installer/blob/master/src/device.rs"
click node_unmount "https://github.com/hylmithecoder/opi_installer/blob/master/src/device.rs"
click node_image_writer "https://github.com/hylmithecoder/opi_installer/blob/master/src/flasher.rs"
click node_progress "https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs"
click node_rootfs "https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs"
click node_wifi "https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs"
click node_accounts "https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs"
click node_ssh "https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs"
click node_overlays "https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs"
click node_factory "https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs"
click node_factory_assets "https://github.com/hylmithecoder/opi_installer/tree/master/factory"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_gui,node_confirmation toneBlue
class node_worker,node_drive_scan,node_unmount,node_image_writer,node_progress toneAmber
class node_rootfs,node_wifi,node_accounts,node_ssh,node_overlays,node_factory toneMint
class node_block_devices,node_host_tools,node_image,node_root_filesystem,node_factory_assets,node_systemd toneRose
class node_user toneIndigo
```

## Components

### User interface

- [Iced GUI](https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs): `src/main.rs`
- [Write confirmation](https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs): `src/main.rs`

### Privileged execution

- [Worker orchestration](https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs): `src/main.rs`
- [Drive discovery and safety](https://github.com/hylmithecoder/opi_installer/blob/master/src/device.rs): `src/device.rs`
- [Partition unmounting](https://github.com/hylmithecoder/opi_installer/blob/master/src/device.rs): `src/device.rs`
- [Image streaming](https://github.com/hylmithecoder/opi_installer/blob/master/src/flasher.rs): `src/flasher.rs`
- [Progress and IPC](https://github.com/hylmithecoder/opi_installer/blob/master/src/main.rs): `src/main.rs`

### Rootfs provisioning

- [Offline rootfs setup](https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs): `src/configurator.rs`
- [Wi-Fi profiles](https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs): `src/configurator.rs`
- [Account password setup](https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs): `src/configurator.rs`
- [SSH enablement](https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs): `src/configurator.rs`
- [SPI overlay setup](https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs): `src/configurator.rs`
- [Factory service deployment](https://github.com/hylmithecoder/opi_installer/blob/master/src/configurator.rs): `src/configurator.rs`

### Host and target

- **Host block devices**
- **Linux utilities**
- **OS image file**
- **Target root filesystem**
- [Factory assets](https://github.com/hylmithecoder/opi_installer/tree/master/factory): `factory`
- **Systemd service setup**

### Other components

- **Operator**

## Connections

- Operator → Iced GUI: configures
- Iced GUI → Drive discovery and safety: refreshes drives
- Drive discovery and safety → Linux utilities: runs lsblk
- Drive discovery and safety → Host block devices: inspects devices
- Iced GUI → Write confirmation: requests confirmation
- Write confirmation → Worker orchestration: starts job
- Worker orchestration → Partition unmounting: unmounts partitions
- Partition unmounting → Linux utilities: runs umount
- Worker orchestration → Image streaming: flashes when requested
- Image streaming → OS image file: reads
- Image streaming → Linux utilities: uses xz
- Image streaming → Host block devices: writes image
- Worker orchestration → Offline rootfs setup: provisions target
- Offline rootfs setup → Target root filesystem: mounts and updates
- Offline rootfs setup → Wi-Fi profiles: writes profiles
- Offline rootfs setup → Account password setup: updates credentials
- Offline rootfs setup → SSH enablement: enables access
- Offline rootfs setup → SPI overlay setup: configures boot overlays
- Offline rootfs setup → Factory service deployment: installs service
- Factory service deployment → Factory assets: copies binary and env
- Factory service deployment → Systemd service setup: creates and enables unit
- Worker orchestration → Progress and IPC: streams status
- Progress and IPC → Iced GUI: reports progress
