# NixOS module: runs a Sausage world as a service (see README, "As a service"). # Create the world once: sudo -u sausage nix run git+https://gitea.surma.technology/surma/sausage -- init /var/lib/sausage/world { config, lib, pkgs, ... }: let cfg = config.services.sausage; in { options.services.sausage = { enable = lib.mkEnableOption "the Sausage world"; world = lib.mkOption { type = lib.types.str; default = "/var/lib/sausage/world"; }; flake = lib.mkOption { type = lib.types.str; default = "git+https://gitea.surma.technology/surma/sausage"; }; }; config = lib.mkIf cfg.enable { users.users.sausage = { isSystemUser = true; group = "sausage"; home = "/var/lib/sausage"; createHome = true; }; users.groups.sausage = { }; systemd.services.sausage = { description = "Sausage world"; wantedBy = [ "multi-user.target" ]; after = [ "network-online.target" ]; wants = [ "network-online.target" ]; path = [ pkgs.nix pkgs.git ]; serviceConfig = { User = "sausage"; WorkingDirectory = "/var/lib/sausage"; ExecStart = "${pkgs.nix}/bin/nix run ${cfg.flake}#loop -- --headless ${cfg.world}"; Restart = "on-failure"; RestartSec = 5; TimeoutStopSec = 30; }; }; }; }