Watch
1
0
Fork
You've already forked souveraine
0
souveraine/surfaces/quickshell/shell.qml
Fimeg fbda26e9c8 shell: register the Brightness IPC target on startup
Brightness is a singleton nothing instantiates, so 'qs ipc call
brightness increment' answered 'Target not found' while still exiting
0 — the lever's || brightnessctl fallback never fired. Pull the
singleton in so the lever owns brightness again.
2026-08-19 13:14:20 -04:00

82 lines
3.1 KiB
QML

//@ pragma UseQApplication
//@ pragma Env QS_NO_RELOAD_POPUP=1
//@ pragma Env QT_QUICK_CONTROLS_STYLE=Basic
//@ pragma Env QT_QUICK_FLICKABLE_WHEEL_DECELERATION=10000
// Souveraine shell entry — `qs -c souveraine`.
// One family, two modes (desktop and phone), converging over time. Panels
// that differ by form factor are gated on Config.options.souveraine.phone
// inside SouveraineFamily; a panel is "homogenized" when its gate is gone.
// No panelFamily switching: this config loads SouveraineFamily, period.
// ii's tree is borrowed underneath (composed by deploy.sh) until each piece
// is owned outright.
import "modules/common"
import "modules/ii/lock"
import "modules/souveraine/boot"
import "services"
import "panelFamilies"
import QtQuick
import QtQuick.Window
import Quickshell
import Quickshell.Io
import Quickshell.Hyprland
ShellRoot {
id: root
// NOTE: no DeviceConnectNotification here — the phone's ii snapshot
// predates it, and version-dependent types don't belong in the entry file.
ReloadPopup {}
// Boot bloom overlay. Top-level (NOT inside the Config.ready LazyLoader) so
// it maps as Hyprland's first surface, before the rest of the shell loads —
// covering all of Hyprland's boot render and continuing the C splash's
// bloom until the lockscreen is secure. Signals the splash to release DRM
// master on its first frame; LockScreen clears GlobalStates.bootBloomActive.
BootBloom {}
// The lock, top-level and ungated, for both of the reasons the docs give.
//
// Boot (`session-authority-boot-order.md` Phase A.1): no surface may
// precede the lock decision. Behind `Config.ready` it could, and once did —
// an NM password dialog rendered before the lockscreen.
//
// Reload (TASK-48): a `LazyLoader` whose `active` is false when quickshell
// propagates reloads has no item to hand its successor, so the new
// `WlSessionLock` never adopts the live compositor lock. As a direct child
// of `ShellRoot` — itself a `ReloadPropagator` — this matches its
// predecessor positionally, with no `reloadableId` needed, and the adopt
// path in `LockScreen.qml` finally has something to adopt.
//
// It must stay a direct child. Wrapping it in any conditional loader
// reintroduces both failures at once.
Lock {}
// A normal XDG app window in this process. Its desktop/sidebar launchers
// call the `settings` IPC target; no second Quickshell/session scope is
// created.
SettingsWindow {}
Component.onCompleted: {
MaterialThemeLoader.reapplyTheme()
SessiondBridge.claimAuthority()
SessiondBridge.load()
Hyprsunset.load()
FirstRunExperience.load()
ConflictKiller.load()
CrashReporter.start()
Cliphist.refresh()
Wallpapers.load()
Updates.load()
// Brightness is a singleton nothing references, so its IPC target
// never registers and the lever's `||` fallback never fires.
Brightness.initializeMonitor(0)
}
LazyLoader {
active: Config.ready
component: SouveraineFamily {}
}
}