Skip to content

System Integration

P3DROVFX edited this page Oct 12, 2026 · 4 revisions

System Integration

This is the page about everything ii-p3drovfx does below the pretty surfaces: audio, networking, Bluetooth, power, displays, security prompts, window management helpers and system monitoring. The design rule is always the same — one shared service singleton per domain (in services/), consumed by every surface. The Bar, the Dashboard, the Dynamic Island and the desktop widgets never disagree about your battery level, because they're all reading the same object.

Where to find all of this in practice: the everyday controls surface as Dashboard quick toggles (Super + N), with the deeper options in the matching Settings pages (Super + I). Most features work out of the box; the ones that need a one-time system step tell you exactly what to run — Tailscale prints its sudo tailscale set --operator command in the dialog, DNS over TLS ships its own polkit rule, and features that need an external tool (EasyEffects, warp-cli, ddcutil, songrec…) simply light up once it's installed.


Audio

Backed by PipeWire through Quickshell's audio stack:

  • Output/input device selection and per-app volume via the Dashboard's volume mixer dialog
  • Audio protection — optional guard against sudden bangs: caps how much the volume can jump at once and enforces a maximum level
  • EasyEffects integration (toggle + presets from the shell), mono audio for accessibility, and a Soundcore / Galaxy Buds pair of services for earbud battery and ANC control
  • Music recognition (songrec) one toggle away, and an OSD that shows volume changes wherever you are — including inside the Dynamic Island

Networking & privacy

  • Wi-Fi / Ethernet via NetworkManager: network list, connect/disconnect, password prompts — all inline in the Dashboard
  • VPN — a proper multi-provider service: NetworkManager profiles (with .ovpn / WireGuard import, auto-detected), plus native NordVPN and ProtonVPN CLI support when installed
  • Tailscale — status, exit nodes and connection control (the service even tells you the exact sudo tailscale set --operator=$USER command it needs, once)
  • DNS over TLS — per-link DoT on top of systemd-resolved: enabling points the default-route link at your chosen resolver (resolvectl dns <link> <ip>#<name>), disabling reverts to whatever DHCP handed out — your saved profiles are never touched. Re-applies itself when the default route changes. Ships a polkit rule for passwordless resolvectl.
  • Cloudflare WARP — a warp-cli quick toggle
  • LocalSend — AirDrop-style file sharing with auto-start, download path, notifications and the Dynamic Island drop target
  • A configurable user agent for the shell's own web requests, and Work Safety network-keyword triggers (see Wallpaper System)

Bluetooth

Device management without leaving the shell: pairing, connecting, battery levels of peripherals, per-device detail dialogs, a Bar widget and Dynamic Island connection events. One robustness detail: if the Bluetooth radio is rfkill-blocked, turning Bluetooth on unblocks it first — no more silent failures where the toggle just bounces back.

Power & battery

  • Battery state everywhere (Bar widget with multiple styles, popup, lock screen, widgets), with configurable low (20%) and critical (5%) thresholds and automatic suspend at 3%
  • Power profiles (performance / balanced / power-saver) as a quick toggle
  • Keep awake — the idle inhibitor, grown up: quick durations (15/30/60/120 min by default), persistence policy (never / until reboot / always), an expiry warning notification with an Extend button, and integration with Hyprland's idle system
  • The session screen (power menu) for lock / logout / suspend / reboot / shutdown — with the launcher's confirmable power commands as the keyboard-first alternative
  • Per-app usage & energy history — the App Usage settings page tracks which apps you use and (on supported hardware, via RAPL) how much energy they cost, with charts and a battery view

Displays & comfort

  • Brightness through both brightnessctl (laptop backlights) and ddcutil (external monitors over DDC/CI) — every connected screen gets a working slider
  • Night Light (Hyprsunset-based, scheduled, with manual-persistence policy), Anti-Flashbang, Screen Shaders (custom GLSL over the whole screen), keyboard-backlight auto-off, and an OLED saver (cursor hiding + dismiss hint)
  • Idle dim — after two minutes idle (hypridle.conf) the shell fades a 50 % black scrim over every screen, the lock screen included, and lifts it on any input. It replaced dimming the backlight, which never reached external monitors, rounded low brightness levels down to off, and looked like a brightness keypress to the OSDs
  • Displays settings page with monitor management and profiles (backed by monitor_manager.py)
  • Touch-friendly: touch gestures (configurable bindings through a gesture action registry) and an on-screen keyboard with an auto-show service that pops it up when a text field gains focus on touch devices — on by default now, with a split layout for thumb typing; the whole touch-first experience is the Tablet Family

Window management helpers

  • Tiling Assistant — drag-to-tile zones, co-resizing of neighboring windows, an overlay editor for custom zones, and gap handling; configured from Settings → Window Tiling
  • Window rules — Hyprland window rules managed graphically from Settings → Windows
  • Scroll behavior tuning (faster touchpad scrolling, mouse-vs-touchpad detection thresholds) and a "dead pixel" workaround for Hyprland's right-edge interaction quirk

Security & session

  • Polkit agent — the shell ships its own native agent (PolkitService.qml), so pkexec and friends produce a Material 3 dialog instead of a foreign popup
  • Lock screen — with blur / desaturate / color-wash / vignette effects, a zoom animation, widget and notification support, and its own wallpaper
  • Keyring storage — API credentials (TickTick, Gmail…) go into the system keyring via KeyringStorage.qml, with .env as fallback — never into config.json
  • Conflict killer — detects processes that fight with the shell (e.g. another notification daemon) and offers a dialog to deal with them

Monitoring & info

  • Resource usage — CPU, RAM, disk, temperatures for the Bar's system monitor and the resource widgets; optional Docker container monitoring in the Bar
  • Updates — an update-count service with the About & Updates page, plus a configurable update command. Checking for fork updates runs on its own schedule (off, every 10 minutes, hourly, daily — the default — or weekly; Config.options.update.autoCheckInterval), and new commits come with a changelog grouped into New, Fixes, Look and Internals. Summarize new commits with AI (Settings → About, Config.options.update.aiSummary, off by default) adds a short summary once an update is at least aiSummaryMinCommits (10) commits deep
  • The CLI — installed as both ii-p3drovfx and II-P3DROVFX, so the command matches however the fork's name is written; the contributors credited on the About page come from CONTRIBUTORS.json at the top of the ii folder
  • Weather (with per-widget layouts), Sports scores, Calendar (including khal sync), Email (Gmail API), Google Drive — each its own service feeding widgets, the Cheat Sheet and At a Glance
  • Default applications for shell actions (terminal, task manager, network settings, volume mixer…) are configurable under Config.options.apps

Input synthesis

A small Ydotool service wraps ydotool for the features that need to type or click for you (e.g. the on-screen keyboard) — with the uinput permissions documented in the setup.


The service layer at a glance

Everything above follows the same pattern: services/*.qml singletons own the system state, talk to CLIs/daemons (nmcli, bluetoothctl, resolvectl, tailscale, brightnessctl, ddcutil, warp-cli, docker, …) or native APIs (PipeWire, D-Bus, Hyprland IPC), and expose reactive properties. UI components — quick toggles, bar widgets, island notches, desktop pills — bind to them and stay in sync for free. If you're hunting for where a behavior lives, services/ is almost always the answer; see Architecture for the full map.


Related pages

← Back to Home

Clone this wiki locally