modular session management daemon

tests fr this time :3 #30

Closed parzivale.tngl.sh
targeting master from parzivale.tngl.sh/sessiond:master
Closed opened by and assigned to parzivale.tngl.sh
targeting master from parzivale.tngl.sh/sessiond:master
Commits 90

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
fix(tests): restore integration tests after bevy_ecs rebase
style: cargo fmt
ci: upload coverage badge to Garage S3 and update README
test(session): expand unit tests for set_session_state and set_state
refactor(tests,ci): use cargo-nextest and CARGO_BIN_EXE for binary discovery
fix(ci): pre-build daemon binary before cargo test
fix(tests): pass numeric uid/gid for seat-user/seat-group in CI
fix(ci): survive cargo-llvm-cov target dir clean in integration tests
fix(ci): pre-build daemon binary into llvm-cov target dir
fix(ci): scope coverage and test workflows to --package daemon
ci: add cargo test workflow
chore: run cargo fmt and nix fmt
fix(ci): add which dep and build daemon binary before coverage run
test: spawn daemon as subprocess to avoid same-PID client/server issue
test: fix integration test hangs by closing connections before stopping daemon
fix(ci): add gcc for linker in check and coverage workflows
feat(ci): publish coverage badge back to repo
fix(ci): add gcc for linker in check and coverage workflows
ci: trigger pipeline run
fix(ci): add required branch filters to spindle workflow triggers
chore(ci): add tangled spindle workflows for fmt, check, and coverage
fix(session): don't bind non-vt sessions to a seat
docs(known-issues): document noctalia polkit agent `XDG_SESSION_ID` conflict
refactor(session-core): replace batched sessions event with per-session session_added
chore(npins): update pins to v8
docs(readme): move building instructions into `docs/INSTALL.md`
docs(readme): describe wire protocol and consolekit feature
feat(nix): implement user lingering support for nix modules
feat(user): recreate runtime dir and cgroup for lingering users on startup
feat(user): keep runtime dir and cgroup alive for lingering users
feat(user): add lingering to protocol and cli
refactor(session): resolve username from uid instead of trusting the client
chore(ecs): don't reexport bevy_ecs world/entity
chore(deps): disable bevy_ecs default features to drop reflect and async_executor
fix(tests): stop overriding default polkit package in tests
feat(pam): export DBUS_SESSION_BUS_ADDRESS on session open
fix(nix): set ConsoleKit polkit package by default
docs(install): document ConsoleKit polkit package
fix(daemon): hibernate by writing disk to /sys/power/state
add hibernate and suspend
fix feature gate and tests
feature gate consolekit
implement ConsoleKit db
lint
implement ConsoleKit compatibility layer
let user shutdown if more than one session belongs to them
harden graceful shutdown
graceful shutdown
poweroff and reboot
tests
track if session is local
update flake.lock
match session to seat by id instead of name
store device on ecs
store seat and client in ecs
store session in ecs
init world
client id
use SessionId wherever it makes sense
update crates
fix: resolve clippy warnings
get session by uid
readme
add shell completions
rework cli
configurable pam service
delegate cgroup management and fix user/group permissions management
improve finix and nixos vms
tty switching, seat management
XDG_RUNTIME_DIR creation
active session tracking
lock-session unlock-session and improved semantics of terminate/kill
kill-session and terminate-session
rename to sessiond
get session by pid
cgroup handling
rename pam protocol
init finix vm
add moxseatd to nixos-vm
daemon: added leader, timestamp and seat(need registration protocol though)
ctl: init
daemon: introduce info object
daemon: init