# shiphan/lilight architecture

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

- Interactive diagram: https://gitdiagram.com/shiphan/lilight
- Repository: https://github.com/shiphan/lilight

## Overview

Lilight is a Linux screen-brightness tool. A user invokes its CLI to read brightness or request a change; configuration supplies defaults, and changes use systemd-logind over D-Bus when available, falling back to sysfs. An optional daemon accepts IPC requests and dispatches brightness changes through the same operation. The library also exposes IIO illuminance reading. The README lists sensor-based automatic adjustment as future work; sampled code does not show it wired into brightness control. Main-source excerpts are partial, so uncertain CLI-to-daemon client details are omitted.

Main entry points: [`src/main.rs`](https://github.com/shiphan/lilight/blob/main/src/main.rs) (Command dispatcher), [`src/sysfs.rs`](https://github.com/shiphan/lilight/blob/main/src/sysfs.rs) (Sysfs devices), [`src/daemon.rs`](https://github.com/shiphan/lilight/blob/main/src/daemon.rs) (Daemon runtime), [`src/cli.rs`](https://github.com/shiphan/lilight/blob/main/src/cli.rs) (CLI arguments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI and configuration"]
  node_cli_args["CLI arguments<br/>[cli.rs]"]
  node_main["Command dispatcher<br/>[main.rs]"]
  node_config["Config loader<br/>[config.rs]"]
  node_value["Value parser<br/>[cli.rs]"]
end

subgraph group_control["Brightness control"]
  node_setter["Brightness setter<br/>[main.rs]"]
  node_getter["Brightness reader<br/>[main.rs]"]
  node_transition["Transition logic<br/>[main.rs]"]
  node_sysfs["Sysfs devices<br/>[sysfs.rs]"]
  node_dbus_proxy["Logind proxy<br/>[dbus.rs]"]
end

subgraph group_daemon["Daemon IPC"]
  node_daemon_runtime["Daemon runtime<br/>[daemon.rs]"]
  node_ipc_request["Set request<br/>[daemon.rs]"]
  node_daemon_client["IPC client<br/>[main.rs]"]
end

subgraph group_sensors["Sensors and mapping"]
  node_iio["IIO reader<br/>[sysfs.rs]"]
  node_curve["Curve mapping<br/>[curve.rs]"]
end

node_user(("User"))
node_kernel["Linux sysfs"]
node_logind["systemd-logind"]
node_sensor["IIO sensor"]

node_user -->|"invokes"| node_cli_args
node_cli_args -->|"parses command"| node_main
node_main -->|"loads settings"| node_config
node_main -->|"parses value"| node_value
node_main -->|"reads brightness"| node_getter
node_getter -->|"reads values"| node_sysfs
node_sysfs -->|"reads sysfs"| node_kernel
node_main -->|"sets brightness"| node_setter
node_setter -.->|"tries D-Bus"| node_dbus_proxy
node_dbus_proxy -.->|"sets brightness"| node_logind
node_setter -->|"applies steps"| node_transition
node_transition -->|"writes brightness"| node_sysfs
node_main -->|"starts daemon"| node_daemon_runtime
node_daemon_client -->|"sends request"| node_ipc_request
node_ipc_request -->|"dispatches"| node_daemon_runtime
node_daemon_runtime -->|"calls setter"| node_setter
node_iio -->|"reads illuminance"| node_sensor
node_curve -.->|"maps values"| node_iio

click node_cli_args "https://github.com/shiphan/lilight/blob/main/src/cli.rs"
click node_main "https://github.com/shiphan/lilight/blob/main/src/main.rs"
click node_config "https://github.com/shiphan/lilight/blob/main/src/config.rs"
click node_value "https://github.com/shiphan/lilight/blob/main/src/cli.rs"
click node_setter "https://github.com/shiphan/lilight/blob/main/src/main.rs"
click node_getter "https://github.com/shiphan/lilight/blob/main/src/main.rs"
click node_transition "https://github.com/shiphan/lilight/blob/main/src/main.rs"
click node_sysfs "https://github.com/shiphan/lilight/blob/main/src/sysfs.rs"
click node_dbus_proxy "https://github.com/shiphan/lilight/blob/main/src/dbus.rs"
click node_daemon_runtime "https://github.com/shiphan/lilight/blob/main/src/daemon.rs"
click node_ipc_request "https://github.com/shiphan/lilight/blob/main/src/daemon.rs"
click node_daemon_client "https://github.com/shiphan/lilight/blob/main/src/main.rs"
click node_iio "https://github.com/shiphan/lilight/blob/main/src/sysfs.rs"
click node_curve "https://github.com/shiphan/lilight/blob/main/src/curve.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_cli_args,node_main,node_config,node_value,node_user toneBlue
class node_setter,node_getter,node_transition,node_sysfs,node_dbus_proxy toneAmber
class node_daemon_runtime,node_ipc_request,node_daemon_client toneMint
class node_iio,node_curve toneRose
class node_kernel,node_logind,node_sensor toneIndigo
```

## Components

### CLI and configuration

- [CLI arguments](https://github.com/shiphan/lilight/blob/main/src/cli.rs): `src/cli.rs`
- [Command dispatcher](https://github.com/shiphan/lilight/blob/main/src/main.rs): `src/main.rs`
- [Config loader](https://github.com/shiphan/lilight/blob/main/src/config.rs): `src/config.rs`
- [Value parser](https://github.com/shiphan/lilight/blob/main/src/cli.rs): `src/cli.rs`

### Brightness control

- [Brightness setter](https://github.com/shiphan/lilight/blob/main/src/main.rs): `src/main.rs`
- [Brightness reader](https://github.com/shiphan/lilight/blob/main/src/main.rs): `src/main.rs`
- [Transition logic](https://github.com/shiphan/lilight/blob/main/src/main.rs): `src/main.rs`
- [Sysfs devices](https://github.com/shiphan/lilight/blob/main/src/sysfs.rs): `src/sysfs.rs`
- [Logind proxy](https://github.com/shiphan/lilight/blob/main/src/dbus.rs): `src/dbus.rs`

### Daemon IPC

- [Daemon runtime](https://github.com/shiphan/lilight/blob/main/src/daemon.rs): `src/daemon.rs`
- [Set request](https://github.com/shiphan/lilight/blob/main/src/daemon.rs): `src/daemon.rs`
- [IPC client](https://github.com/shiphan/lilight/blob/main/src/main.rs): `src/main.rs`

### Sensors and mapping

- [IIO reader](https://github.com/shiphan/lilight/blob/main/src/sysfs.rs): `src/sysfs.rs`
- [Curve mapping](https://github.com/shiphan/lilight/blob/main/src/curve.rs): `src/curve.rs`

### Other components

- **User**
- **Linux sysfs**
- **systemd-logind**
- **IIO sensor**

## Connections

- User → CLI arguments: invokes
- CLI arguments → Command dispatcher: parses command
- Command dispatcher → Config loader: loads settings
- Command dispatcher → Value parser: parses value
- Command dispatcher → Brightness reader: reads brightness
- Brightness reader → Sysfs devices: reads values
- Sysfs devices → Linux sysfs: reads sysfs
- Command dispatcher → Brightness setter: sets brightness
- Brightness setter → Logind proxy: tries D-Bus
- Logind proxy → systemd-logind: sets brightness
- Brightness setter → Transition logic: applies steps
- Transition logic → Sysfs devices: writes brightness
- Command dispatcher → Daemon runtime: starts daemon
- IPC client → Set request: sends request
- Set request → Daemon runtime: dispatches
- Daemon runtime → Brightness setter: calls setter
- IIO reader → IIO sensor: reads illuminance
- Curve mapping → IIO reader: maps values
