Systant is designed as a userspace controller rather than a system
daemon, so it makes more sense to run as a user service with access
to the user's environment, PATH, and session (for audio control, etc).
Changes:
- Remove user/group options (runs as current user)
- Use systemd.user.services instead of systemd.services
- Remove hardening options (not needed and would restrict access)
- Add package to environment.systemPackages
Enable with: systemctl --user enable --now systant
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Relative paths in package.nix don't resolve correctly when
the flake is used as an input in another flake. Pass src
explicitly from the flake instead.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- nix/package.nix: two-phase build with fixed-output derivation for deps
- nix/nixos-module.nix: systemd service with systant.enable and systant.configFile
- flake.nix: expose nixosModules.default and overlays.default
Usage in NixOS config:
systant.enable = true;
systant.configFile = ./systant.toml;
When deps change, update hash: nix build .#systant 2>&1 | grep 'got:'
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
A lightweight system monitoring agent that:
- Collects metrics via configurable shell commands
- Publishes to MQTT with Home Assistant auto-discovery
- Supports entity types: sensor, binary_sensor, light, switch, button
- Responds to commands over MQTT for controllable entities
Architecture:
- src/config.ts: TOML config loading and validation
- src/mqtt.ts: MQTT client with HA discovery
- src/entities.ts: Entity state polling and command handling
- index.ts: CLI entry point (run, check, once commands)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>