# amir16yp/hos architecture

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

- Interactive diagram: https://gitdiagram.com/amir16yp/hos
- Repository: https://github.com/amir16yp/hos
- Video tour (about a minute): https://gitdiagram.com/amir16yp/hos/video

## Overview

hOS is a Linux-based desktop OS project; the sampled runtime tree centers on HOSWM, its graphical session and standalone applications, and the native init/services system. The main user workflow is: start a session, discover input devices, render and present a desktop, then launch GUI apps that communicate with the window server. README capabilities also include networking, power, time, sound, settings, installation, and authentication. Some links reflect README or module documentation because their implementations were not sampled; those links are limited to explicitly documented interactions.

Main entry points: [`HOSWM/src/client.rs`](https://github.com/amir16yp/hos/blob/main/HOSWM/src/client.rs) (Rust / C clients), [`HOSWM/src/init/ipc.rs`](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/ipc.rs) (Service IPC), [`HOSWM/src/main.rs`](https://github.com/amir16yp/hos/blob/main/HOSWM/src/main.rs) (HOSWM session), [`HOSWM/src/init/supervisor.rs`](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/supervisor.rs) (Init supervisor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_session["Desktop session"]
  node_server["HOSWM session<br/>[main.rs]"]
  node_devices["Input discovery<br/>[input.rs]"]
  node_desktop["Window desktop<br/>[desktop.rs]"]
end

subgraph group_graphics["Graphics and ABI"]
  node_display["Framebuffer / DRM<br/>[framebuffer.rs]"]
  node_surfaces["Surfaces and fonts<br/>[surface.rs]"]
  node_abi["Window ABI<br/>[abi.rs]"]
  node_client["Rust / C clients<br/>[client.rs]"]
end

subgraph group_apps["Desktop applications"]
  node_terminal["Terminal<br/>[hos-terminal.rs]"]
  node_files["File browser<br/>[hos-files.rs]"]
  node_image["Image viewer<br/>[hos-image.rs]"]
  node_paint["Paint<br/>[hos-paint.rs]"]
  node_installer["Installer<br/>[hos-installer.rs]"]
  node_settings["Settings<br/>[hos-settings.rs]"]
end

subgraph group_services["System services"]
  node_supervisor["Init supervisor<br/>[supervisor.rs]"]
  node_ipc["Service IPC<br/>[ipc.rs]"]
  node_network["Network service<br/>[net.rs]"]
  node_power["Power service<br/>[power.rs]"]
  node_time["Time service<br/>[ntp.rs]"]
  node_sound["Sound service<br/>[sound.rs]"]
  node_service_state["System settings<br/>[sys.rs]"]
  node_hosctl["Service control CLI<br/>[hosctl.rs]"]
end

subgraph group_support["Session support"]
  node_preview["Image previews<br/>[preview.rs]"]
  node_config["Session config<br/>[config.rs]"]
end

node_user(("User"))
node_wpa["wpa_supplicant"]
node_shell(("Shell user"))

node_user -->|"uses session"| node_server
node_server -->|"scans input"| node_devices
node_server -->|"runs session"| node_desktop
node_server -->|"presents frames"| node_display
node_desktop -->|"draws with"| node_surfaces
node_server -->|"serves windows"| node_abi
node_terminal -->|"uses client"| node_client
node_files -->|"uses client"| node_client
node_image -->|"uses client"| node_client
node_paint -->|"uses client"| node_client
node_installer -->|"uses client"| node_client
node_settings -->|"uses client"| node_client
node_client -->|"sends requests"| node_abi
node_files -->|"reads thumbnails"| node_preview
node_image -->|"generates thumbnails"| node_preview
node_desktop -->|"reads preferences"| node_config
node_server -->|"starts session"| node_supervisor
node_supervisor -->|"supervises"| node_network
node_supervisor -->|"supervises"| node_power
node_supervisor -->|"supervises"| node_time
node_supervisor -->|"supervises"| node_sound
node_network -->|"serves protocol"| node_ipc
node_power -->|"serves protocol"| node_ipc
node_time -->|"serves protocol"| node_ipc
node_sound -->|"serves protocol"| node_ipc
node_settings -->|"reads / writes"| node_ipc
node_ipc -->|"persists settings"| node_service_state
node_shell -->|"runs commands"| node_hosctl
node_hosctl -->|"sends requests"| node_ipc
node_network -.->|"controls Wi-Fi"| node_wpa

click node_server "https://github.com/amir16yp/hos/blob/main/HOSWM/src/main.rs"
click node_devices "https://github.com/amir16yp/hos/blob/main/HOSWM/src/input.rs"
click node_desktop "https://github.com/amir16yp/hos/blob/main/HOSWM/src/desktop.rs"
click node_display "https://github.com/amir16yp/hos/blob/main/HOSWM/src/framebuffer.rs"
click node_surfaces "https://github.com/amir16yp/hos/blob/main/HOSWM/src/surface.rs"
click node_abi "https://github.com/amir16yp/hos/blob/main/HOSWM/src/abi.rs"
click node_client "https://github.com/amir16yp/hos/blob/main/HOSWM/src/client.rs"
click node_terminal "https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-terminal.rs"
click node_files "https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-files.rs"
click node_image "https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-image.rs"
click node_paint "https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-paint.rs"
click node_installer "https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-installer.rs"
click node_settings "https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-settings.rs"
click node_preview "https://github.com/amir16yp/hos/blob/main/HOSWM/src/preview.rs"
click node_config "https://github.com/amir16yp/hos/blob/main/HOSWM/src/config.rs"
click node_supervisor "https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/supervisor.rs"
click node_ipc "https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/ipc.rs"
click node_network "https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/net.rs"
click node_power "https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/power.rs"
click node_time "https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/ntp.rs"
click node_sound "https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/sound.rs"
click node_service_state "https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/sys.rs"
click node_hosctl "https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/bin/hosctl.rs"

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_server,node_devices,node_desktop,node_user,node_shell toneBlue
class node_display,node_surfaces,node_abi,node_client toneAmber
class node_terminal,node_files,node_image,node_paint,node_installer,node_settings toneMint
class node_supervisor,node_ipc,node_network,node_power,node_time,node_sound,node_service_state,node_hosctl toneRose
class node_preview,node_config,node_wpa toneIndigo
```

## Components

### Desktop session

- [HOSWM session](https://github.com/amir16yp/hos/blob/main/HOSWM/src/main.rs): `HOSWM/src/main.rs`
- [Input discovery](https://github.com/amir16yp/hos/blob/main/HOSWM/src/input.rs): `HOSWM/src/input.rs`
- [Window desktop](https://github.com/amir16yp/hos/blob/main/HOSWM/src/desktop.rs): `HOSWM/src/desktop.rs`

### Graphics and ABI

- [Framebuffer / DRM](https://github.com/amir16yp/hos/blob/main/HOSWM/src/framebuffer.rs): `HOSWM/src/framebuffer.rs`
- [Surfaces and fonts](https://github.com/amir16yp/hos/blob/main/HOSWM/src/surface.rs): `HOSWM/src/surface.rs`
- [Window ABI](https://github.com/amir16yp/hos/blob/main/HOSWM/src/abi.rs): `HOSWM/src/abi.rs`
- [Rust / C clients](https://github.com/amir16yp/hos/blob/main/HOSWM/src/client.rs): `HOSWM/src/client.rs`

### Desktop applications

- [Terminal](https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-terminal.rs): `HOSWM/src/bin/hos-terminal.rs`
- [File browser](https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-files.rs): `HOSWM/src/bin/hos-files.rs`
- [Image viewer](https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-image.rs): `HOSWM/src/bin/hos-image.rs`
- [Paint](https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-paint.rs): `HOSWM/src/bin/hos-paint.rs`
- [Installer](https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-installer.rs): `HOSWM/src/bin/hos-installer.rs`
- [Settings](https://github.com/amir16yp/hos/blob/main/HOSWM/src/bin/hos-settings.rs): `HOSWM/src/bin/hos-settings.rs`

### System services

- [Init supervisor](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/supervisor.rs): `HOSWM/src/init/supervisor.rs`
- [Service IPC](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/ipc.rs): `HOSWM/src/init/ipc.rs`
- [Network service](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/net.rs): `HOSWM/src/init/net.rs`
- [Power service](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/power.rs): `HOSWM/src/init/power.rs`
- [Time service](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/ntp.rs): `HOSWM/src/init/ntp.rs`
- [Sound service](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/sound.rs): `HOSWM/src/init/sound.rs`
- [System settings](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/sys.rs): `HOSWM/src/init/sys.rs`
- [Service control CLI](https://github.com/amir16yp/hos/blob/main/HOSWM/src/init/bin/hosctl.rs): `HOSWM/src/init/bin/hosctl.rs`

### Session support

- [Image previews](https://github.com/amir16yp/hos/blob/main/HOSWM/src/preview.rs): `HOSWM/src/preview.rs`
- [Session config](https://github.com/amir16yp/hos/blob/main/HOSWM/src/config.rs): `HOSWM/src/config.rs`

### Other components

- **User**
- **wpa_supplicant**
- **Shell user**

## Connections

- User → HOSWM session: uses session
- HOSWM session → Input discovery: scans input
- HOSWM session → Window desktop: runs session
- HOSWM session → Framebuffer / DRM: presents frames
- Window desktop → Surfaces and fonts: draws with
- HOSWM session → Window ABI: serves windows
- Terminal → Rust / C clients: uses client
- File browser → Rust / C clients: uses client
- Image viewer → Rust / C clients: uses client
- Paint → Rust / C clients: uses client
- Installer → Rust / C clients: uses client
- Settings → Rust / C clients: uses client
- Rust / C clients → Window ABI: sends requests
- File browser → Image previews: reads thumbnails
- Image viewer → Image previews: generates thumbnails
- Window desktop → Session config: reads preferences
- HOSWM session → Init supervisor: starts session
- Init supervisor → Network service: supervises
- Init supervisor → Power service: supervises
- Init supervisor → Time service: supervises
- Init supervisor → Sound service: supervises
- Network service → Service IPC: serves protocol
- Power service → Service IPC: serves protocol
- Time service → Service IPC: serves protocol
- Sound service → Service IPC: serves protocol
- Settings → Service IPC: reads / writes
- Service IPC → System settings: persists settings
- Shell user → Service control CLI: runs commands
- Service control CLI → Service IPC: sends requests
- Network service → wpa_supplicant: controls Wi-Fi
