{ config, lib, pkgs, namespace, ... }: with lib; let cfg = config.${namespace}.services.glances; in { imports = [ ./options.nix ]; config = mkIf cfg.enable { # Open firewall for glances if enabled networking.firewall = mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.port ]; allowedUDPPorts = [ cfg.port ]; }; # Install glances package environment.systemPackages = with pkgs; [ glances ]; # Configure systemd service for glances systemd.services.glances-server = { description = "Glances system monitoring web server"; enable = true; wantedBy = [ "multi-user.target" ]; after = [ "network.target" ]; path = with pkgs; [ bash glances ]; script = '' glances -w --bind ${cfg.bindAddress} --port ${toString cfg.port} ''; serviceConfig = { Type = "simple"; User = "glances"; Group = "glances"; Restart = "always"; RestartSec = "5"; StandardOutput = "journal"; StandardError = "journal"; }; }; # Create glances user and group users.users.glances = { isSystemUser = true; group = "glances"; description = "Glances monitoring user"; }; users.groups.glances = { }; }; }