From b7752eef57e008c0d2a7dad868e98ff8b802bd22 Mon Sep 17 00:00:00 2001 From: Cara Salter Date: Mon, 30 May 2022 00:11:41 -0400 Subject: dist: Initial nixos module --- flake.nix | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/flake.nix b/flake.nix index 31ef857..fa2148d 100644 --- a/flake.nix +++ b/flake.nix @@ -34,6 +34,67 @@ }; defaultApp = apps.homeworld; + nixosModules.homeworld = { config, lib, ... }: { + options = { + services.homeworld.enable = lib.mkEnableOption "enable homeworld server"; + services.homeworld.environment-file-location = lib.mkOption { + type = lib.types.path; + default = "/var/lib/homeworld/.env"; + description = "The location of the environment file"; + }; + }; + + config = lib.mkIf config.services.homeworld.enable { + users.groups.homeworld = { + members = [ "homeworld" "${config.services.postgresql.superUser}" ]; + }; + users.users.homeworld = { + createHome = true; + isSystemUser = true; + home = "/var/lib/homeworld"; + group = "homeworld"; + }; + + systemd.services.homeworld = { + wantedBy = [ "multi-user.target" ]; + after = [ "homeworld-init.service" "postgresql.service" ]; + requires = [ "homeworld-init.service" "postgresql.service" ]; + serviceConfig = { + User = "homeworld"; + Group = "homeworld"; + Restart = "always"; + WorkingDirectory = "/var/lib/homeworld"; + ExecStart = "${defaultPackage}/bin/homeworld"; + EnvironmentFile = + "${config.services.homeworld.environment-file-location}"; + }; + }; + + systemd.services.homeworld-init = { + wantedBy = [ "multi-user.target" ]; + requires = [ "postgresql.service" ]; + after = [ "postgresql.service" ]; + description = "Init for Homeworld"; + + script = with pkgs; '' + if ! [ -e /var/lib/postgresql/.homeworld-inited ]; then + ${config.services.postgresql.package}/bin/createuser homeworld + ${config.services.postgresql.package}/bin/createdb -O homeworld homeworld + touch /var/lib/postgresql/.homeworld-inited + fi + ''; + + serviceConfig = { + Type = "oneshot"; + User = "${config.services.postgresql.superUser}"; + Group = "homeworld"; + }; + }; + + services.postgresql.enable = true; + }; + }; + # `nix develop` devShell = pkgs.mkShell { nativeBuildInputs = with pkgs; [ rustc cargo ] ++ deps; -- cgit v1.2.3