modular session management daemon

feat(daemon)!: read configuration as Dhall #36

Closed parzivale.tngl.sh
targeting master from parzivale.tngl.sh/sessiond:feat/dhall-config
Closed opened by and assigned to parzivale.tngl.sh
targeting master from parzivale.tngl.sh/sessiond:feat/dhall-config
Commits 100

docs: tidy changelog formatting and condense the Dhall entry
docs: update changelog
feat(daemon)!: derive user config from a context function
chore(deps): bump sessiond-serde-dhall to 3.0.0
docs: update changelog
feat(daemon)!: read configuration as Dhall
refactor(cgroup): remove cgroup delegation object
fix(cgroup): resolve root cgroup from `/proc/self/cgroup`
refactor: make protocol objects entity components
fix: protocol descriptions and summaries
fix: make delegated cgroup readable to everyone
feat(cgroup): add delegation
refactor(cgroup): make cgroups independent, store as session components
refactor(vt): update vt state in schedule
feat(session-management): stage v2 sessions until done
refactor(daemon): centralize session and user lookups in registries
refactor(daemon): organize ECS types by domain module
fix(user): sync states in schedule
fix: change license to gpl3Only in package.nix
docs: update changelog
feat(ctl): add optional seat observation
fix(ctl): initialize user objects for user commands
feat(ctl): use comfy_table for cli commands
feat(daemon): add session state recovery across restarts
refactor(daemon): move socket into runtime directory
fix: move consolekit syncing into a system
refactor(protocol): split out power commands into separate protocol
feat(daemon): add sd_notify lifecycle notifications
fix(terminal): use proper vt switch watching
fix(session): better by_pid lookup
feat: remove seat management in favor of seat client
docs(clients): change name of sessiond-dinit
fix(seat): dont check permissions for OpenSeat (protocol filter already does that)
docs(changelog): mark v0.1.1 as released
deps(hyprwire): update
fix(package): move ConsoleKit D-Bus policy into source tree
docs: add initial changelog
fix(package): use buildFeatures for specifying consolekit feature
feat(consolekit): add ability to reboot/poweroff
docs(configuration): add section about configuring the daemon
feat(power): add configurable reboot and poweroff commands
feat(power): add configurable suspend and hibernate commands
feat(logging): add log target flag
chore(protocol): license protocol files under MIT
fix(session): let user control power if non user sessions are active
feat(protocol): add session class enum
fix: set user environment variables
fix(package.nix): fix ability to disable consolekit backend
deps(hyprwire): update to 0.5.0
refactor(ecs): run protocol reconciliation as a notify schedule
refactor(ecs): move protocol notifications into reconciliation
feat(ecs): move some Sessiond struct fields into ECS resource
feat(ecs): cleanup ecs module
fix: stop storing booleans and Options in world
fix: use queries instead of storing ownership entities
feat(tests): improve vm tests
refactor(cgroup): turn CgroupManager trait into struct
fix: use queries instead of storing seat entities
fix: use queries instead of storing user entities
fix: use queries instead of storing client entities
fix: use queries instead of storing session entities
fix: formatting
fix(session): only local vt bound sessions can become active
docs(clients): add sessiond-uaccess to known clients
feat(session_management): propagate session environment
refactor(session_management): split up unsafe and safe session protocols
chore(deps): update hyprwire
chore(deps): replace users with uzers
feat(cli): implement locking/unlocking all sessions
feat(protocol): expose privileged operation capabilities
refactor: simplify module-qualified helper names
feat(seat): terminate seat
feat(cli): add seat commands
chore(seat): store device and client objects
chore(seat): track client pid
chore(protocol): prepare seat info object shape
feat(user): implement kill/terminate commands
fix(nix): simplify pam sessiond registration
feat(config): add default-seat field in config
refactor(user): remove imperative lingering
feat(config): wire daemon settings
feat(config): define daemon config schema
chore(libseat): split libseat package into sessiond-libseat
docs(readme): remove link to pipeline from coverage badge
docs(readme): document user service manager scope
refactor(session-management): implement RAII create_session method
chore(nix): update flake.lock
fix(package): skip checks
docs(seat): document seat management
fix(seat): synchronize VT and device state
feat(seat): finish libseat
feat(nix): package libseat
feat(libseat): initialize abi compatible libseat library
fix(tests): update integration test for session_added protocol change
fix(clippy): resolve use_self and redundant_pub_crate warnings
ci: add clippy workflow for PRs and pushes
refactor(sessiond): make Sessiond generic over CgroupManager
ci: switch to rustup to get rust 1.95+ for bevy_ecs 0.19
refactor(cgroup): introduce CgroupManager trait with SystemCgroupManager and DummyCgroupManager
fix(ci): correct Tangled secret name for S3 upload