From 047a8ddf55e5cd927a410c8839d4ebedc87b4c04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A9lix=20Baylac-Jacqu=C3=A9?= Date: Sat, 26 Sep 2020 13:34:22 +0200 Subject: [PATCH] nixos/pleroma: add pleroma NixOS module --- modules/pleroma.nix | 84 +++++++++++++++++++++++++++++++++++++++++++++ readme.md | 2 +- 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 modules/pleroma.nix diff --git a/modules/pleroma.nix b/modules/pleroma.nix new file mode 100644 index 0000000..54b5e6d --- /dev/null +++ b/modules/pleroma.nix @@ -0,0 +1,84 @@ +{ config, lib, pkgs, stdenv }: +let + cfg = config.services.pleroma; +in { + options = { + services.pleroma = with lib; { + enable = mkEnableOption "pleroma"; + + package = mkOption { + type = types.package; + default = import ../default.nix { inherit pkgs stdenv; }; + description = "Pleroma package to use."; + }; + + runMigrationOnStartup = mkOption { + type = types.bool; + default = true; + description = "Run the database migrations on the Pleroma service startup."; + }; + + dataDir = mkOption { + type = types.str; + default = "/var/lib/pleroma"; + description = "Directory storing Pleroma's data."; + }; + + confDir = mkOption { + type = types.str; + default = "/etc/pleroma"; + description = "Directory storing Pleroma's configuration."; + }; + + user = mkOption { + type = types.str; + default = "pleroma"; + description = "User account under which pleroma runs."; + }; + + group = mkOption { + type = types.str; + default = "pleroma"; + description = "Group account under which pleroma runs."; + }; + }; + }; + + config = lib.mkIf cfg.enable { + users.users.pleroma = { + description = "Pleroma user"; + createHome = true; + home = cfg.dataDir; + }; + + postgresql.enable = true; + + systemd.services.pleroma = { + description = "Pleroma social network"; + after = [ "network-online.target" "postgresql.service" ]; + wantedBy = [ "multi-user.target" ]; + environment = { + MIX_ENV = "prod"; + }; + serviceConfig = { + User = cfg.user; + Group = cfg.group; + Type = "forking"; + WorkingDirectory = cfg.dataDir; + ExecStart = "${cfg.package}/bin/pleroma start"; + ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID"; + + # Systemd sandboxing directives. + # Taken from the upstream contrib systemd service at + # pleroma/installation/pleroma.service + PrivateTmp = true; + ProtectHome = true; + ProtectSystem = "full"; + PrivateDevices = false; + NoNewPrivileges = true; + CapabilityBoundingSet = "~CAP_SYS_ADMIN"; + }; + }; + + }; +} diff --git a/readme.md b/readme.md index a9f5ca5..ab0cc9b 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ ## TODO -- Add NixOS module. +- Add nginx config in NixOS module. ## Minor Annoyances