2026-07-14 15:03:07 -04:00
|
|
|
import QtQuick
|
|
|
|
|
import Quickshell
|
|
|
|
|
|
|
|
|
|
import qs.modules.common
|
|
|
|
|
// AppInventory.qml root is Item (not QtObject) so it can own its scanner
|
|
|
|
|
// Process child — the original QtObject root failed with "no default property."
|
|
|
|
|
import qs.modules.ii.appInventory
|
|
|
|
|
import qs.modules.ii.background
|
|
|
|
|
import qs.modules.ii.bar
|
|
|
|
|
import qs.modules.ii.cheatsheet
|
|
|
|
|
import qs.modules.ii.dock
|
|
|
|
|
import qs.modules.ii.lock
|
|
|
|
|
import qs.modules.ii.mediaControls
|
|
|
|
|
import qs.modules.ii.notificationPopup
|
|
|
|
|
import qs.modules.ii.onScreenDisplay
|
|
|
|
|
import qs.modules.ii.onScreenKeyboard
|
|
|
|
|
import qs.modules.ii.overview
|
|
|
|
|
import qs.modules.ii.polkit
|
|
|
|
|
import qs.modules.ii.regionSelector
|
|
|
|
|
import qs.modules.ii.screenCorners
|
|
|
|
|
import qs.modules.ii.screenTranslator
|
|
|
|
|
import qs.modules.ii.sessionScreen
|
|
|
|
|
import qs.modules.ii.sidebarLeft
|
|
|
|
|
import qs.modules.ii.sidebarRight
|
|
|
|
|
import qs.modules.ii.overlay
|
|
|
|
|
import qs.modules.ii.verticalBar
|
|
|
|
|
import qs.modules.ii.wallpaperSelector
|
quickshell: first-party lock/nav/session layer, retire the pill
Grows Souveraine's own surfaces on top of the borrowed ii shell and drops
the separate pill shell in favor of one integrated navigation rail.
Session arbiter (functions/Session.qml): probe logind's Can* methods over
busctl instead of guessing from installed binaries -- the answer carries the
polkit tier (yes/challenge/na), so a swapless phone reports hibernate as na
and refuses honestly rather than firing a verb that no-ops. Verbs run through
a Process that logs exit codes and tracks lastAction; refusals log too. The
busctl output is parsed with awk, not a sed regex buried under four escaping
layers -- the sed version returned nothing on the phone and left every
capability stuck at "unknown" (invisible on the laptop, where timing masked
it). Every structured result is JSON-over-string; quickshell maps a var
return to void.
Lock trust: screenLocked (the shell's lock request) is now distinct from
screenLockSecure (WlSessionLock.secure, the compositor's acknowledgement,
mirrored from LockScreen). Cards that disclose personal data gate on secure,
not on a button press. LockContentPolicy centralizes the ambient/personal/
step-up tiers so no card grows its own private rule.
New first-party namespace modules/souveraine/: LockMediaCard, LockSurfaceHost,
SystemGestureRail -- owned surfaces, not ii patches. IdleCoordinator gives one
staged idle vocabulary (dim/lock) gated behind nativeCoordinatorEnabled, off
until the native Wayland idle-notify is verified on the Pixel compositor;
hypridle stays the adapter. WallpaperAssets selects aspect-aware variants for
phone-vs-laptop display shapes.
Pill retired: pill/shell.qml and PillConfig gone, replaced by NavigationConfig
and the gesture rail. Hyprland starts qs -c souveraine directly; no secondary
shell, no qsConfig flip.
Verified on the phone: session.* reports challenge/na correctly, hibernate
and unlock refuse, inhibit round-trips with its reason.
2026-07-14 20:00:57 -04:00
|
|
|
import qs.modules.souveraine.navigation
|
2026-07-14 15:03:07 -04:00
|
|
|
|
|
|
|
|
// The Souveraine panel family — one family for both modes.
|
|
|
|
|
// Starts at exact panel parity with IllogicalImpulseFamily (our overridden
|
|
|
|
|
// components resolve in naturally); per-panel form-factor gates
|
|
|
|
|
// (Config.options.souveraine.phone) get added only where the modes genuinely
|
|
|
|
|
// differ, and removed as the modes homogenize. This file is the scoreboard
|
|
|
|
|
// of that convergence.
|
|
|
|
|
|
|
|
|
|
Scope {
|
|
|
|
|
// Non-UI service scope: hosts the app-inventory IPC surface (apps.*).
|
|
|
|
|
// Plain child, not a PanelLoader entry — it has no panel/visibility
|
|
|
|
|
// concerns, just a long-lived Scope holding the inventory + IpcHandler.
|
|
|
|
|
AppInventoryScope {}
|
|
|
|
|
|
|
|
|
|
PanelLoader { extraCondition: !Config.options.bar.vertical; component: Bar {} }
|
|
|
|
|
PanelLoader { component: Background {} }
|
|
|
|
|
PanelLoader { component: Cheatsheet {} }
|
|
|
|
|
PanelLoader { extraCondition: Config.options.dock.enable; component: Dock {} }
|
|
|
|
|
PanelLoader { component: Lock {} }
|
|
|
|
|
PanelLoader { component: MediaControls {} }
|
|
|
|
|
PanelLoader { component: NotificationPopup {} }
|
|
|
|
|
PanelLoader { component: OnScreenDisplay {} }
|
|
|
|
|
PanelLoader { component: OnScreenKeyboard {} }
|
|
|
|
|
PanelLoader { component: Overlay {} }
|
|
|
|
|
PanelLoader { component: Overview {} }
|
|
|
|
|
PanelLoader { component: Polkit {} }
|
|
|
|
|
PanelLoader { component: RegionSelector {} }
|
|
|
|
|
PanelLoader { component: ScreenCorners {} }
|
|
|
|
|
PanelLoader { component: ScreenTranslator {} }
|
|
|
|
|
PanelLoader { component: SessionScreen {} }
|
|
|
|
|
PanelLoader { component: SidebarLeft {} }
|
|
|
|
|
PanelLoader { component: SidebarRight {} }
|
quickshell: first-party lock/nav/session layer, retire the pill
Grows Souveraine's own surfaces on top of the borrowed ii shell and drops
the separate pill shell in favor of one integrated navigation rail.
Session arbiter (functions/Session.qml): probe logind's Can* methods over
busctl instead of guessing from installed binaries -- the answer carries the
polkit tier (yes/challenge/na), so a swapless phone reports hibernate as na
and refuses honestly rather than firing a verb that no-ops. Verbs run through
a Process that logs exit codes and tracks lastAction; refusals log too. The
busctl output is parsed with awk, not a sed regex buried under four escaping
layers -- the sed version returned nothing on the phone and left every
capability stuck at "unknown" (invisible on the laptop, where timing masked
it). Every structured result is JSON-over-string; quickshell maps a var
return to void.
Lock trust: screenLocked (the shell's lock request) is now distinct from
screenLockSecure (WlSessionLock.secure, the compositor's acknowledgement,
mirrored from LockScreen). Cards that disclose personal data gate on secure,
not on a button press. LockContentPolicy centralizes the ambient/personal/
step-up tiers so no card grows its own private rule.
New first-party namespace modules/souveraine/: LockMediaCard, LockSurfaceHost,
SystemGestureRail -- owned surfaces, not ii patches. IdleCoordinator gives one
staged idle vocabulary (dim/lock) gated behind nativeCoordinatorEnabled, off
until the native Wayland idle-notify is verified on the Pixel compositor;
hypridle stays the adapter. WallpaperAssets selects aspect-aware variants for
phone-vs-laptop display shapes.
Pill retired: pill/shell.qml and PillConfig gone, replaced by NavigationConfig
and the gesture rail. Hyprland starts qs -c souveraine directly; no secondary
shell, no qsConfig flip.
Verified on the phone: session.* reports challenge/na correctly, hibernate
and unlock refuse, inhibit round-trips with its reason.
2026-07-14 20:00:57 -04:00
|
|
|
PanelLoader {
|
|
|
|
|
extraCondition: Config.options.souveraine.phone
|
|
|
|
|
component: SystemGestureRail {}
|
|
|
|
|
}
|
2026-07-14 15:03:07 -04:00
|
|
|
PanelLoader { extraCondition: Config.options.bar.vertical; component: VerticalBar {} }
|
|
|
|
|
PanelLoader { component: WallpaperSelector {} }
|
|
|
|
|
}
|