From a2ab78894d4baf14113d3b8ea86aea650e939661 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Fri, 7 Aug 2026 10:57:24 +0100 Subject: [PATCH] add NixOS module --- flake.nix | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/flake.nix b/flake.nix index ca476af..71a80c9 100644 --- a/flake.nix +++ b/flake.nix @@ -90,5 +90,64 @@ ''; }; }; + + flake.nixosModules.default = + { + config, + lib, + pkgs, + ... + }: + let + cfg = config.services.starhaven; + in + { + options.services.starhaven = { + enable = lib.mkEnableOption "the starhaven.dev server"; + + package = lib.mkOption { + type = lib.types.package; + default = self.packages.${pkgs.stdenv.hostPlatform.system}.default; + description = "The starhaven package to run."; + }; + + externalBase = lib.mkOption { + type = lib.types.str; + example = "https://starhaven.dev"; + description = "External base URL (with scheme)."; + }; + + environmentFile = lib.mkOption { + type = lib.types.nullOr lib.types.path; + default = null; + description = '' + Path to an EnvironmentFile providing OAUTH_PRIVATE_KEYS and + COOKIE_SECRET. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + systemd.services.starhaven = { + description = "starhaven.dev server"; + wantedBy = [ "multi-user.target" ]; + after = [ "network-online.target" ]; + wants = [ "network-online.target" ]; + + environment = { + HTTP_EXTERNAL_BASE = cfg.externalBase; + XDG_DATA_HOME = "/var/lib"; + }; + + serviceConfig = { + ExecStart = lib.getExe cfg.package; + EnvironmentFile = lib.mkIf (cfg.environmentFile != null) cfg.environmentFile; + DynamicUser = true; + StateDirectory = "starhaven"; + Restart = "on-failure"; + }; + }; + }; + }; }; } -- 2.51.2