nix-config/modules/plume.nix

94 lines
2.2 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.services.plume;
in
{
options.services.plume = with lib; {
enable = mkEnableOption "Plume";
envFile = mkOption {
type = types.path;
description = "Path to .env file";
};
user = mkOption {
type = types.str;
default = "plume";
description = "System user to run Plume";
};
group = mkOption {
type = types.str;
default = "plume";
description = "System group to run Plume";
};
};
config = lib.mkIf cfg.enable {
systemd.tmpfiles.rules = [
"d ${config.users.users.${cfg.user}.home} 0700 ${cfg.user} ${cfg.group} -"
];
ids.uids.plume = 499;
users.users.${cfg.user} = {
uid = config.ids.uids.plume;
inherit (cfg) group;
home = "/var/lib/plume";
};
users.groups.${cfg.group} = {};
services.postgresql = {
enable = true;
initialScript = pkgs.writeText "plume-initScript" ''
CREATE ROLE plume WITH LOGIN PASSWORD 'plume' CREATEDB;
CREATE DATABASE plume;
GRANT ALL PRIVILEGES ON DATABASE plume TO plume;
'';
# TODO: update to postgresql 15
};
systemd.services.plume = {
description = "Plume";
after = [ "postgresql.service" ];
requires = [ "postgresql.service" ];
wantedBy = [ "multi-user.target" ];
path = [ pkgs.plume ];
script = ''
ln -sf ${cfg.envFile} .env
mkdir -p static/media
for f in ${pkgs.plume}/share/plume/static/*; do
n=$(basename "$f")
if [ "$n" != media ]; then
rm -f "static/$n"
ln -s "$f" "static/$n"
fi
done
plm migration run
plm search init
exec plume
'';
serviceConfig = {
User = cfg.user;
Group = cfg.group;
Restart = "on-failure";
WorkingDirectory = config.users.users.${cfg.user}.home;
};
};
environment.systemPackages = [ (pkgs.writeScriptBin "plume-setup" ''
#! ${pkgs.runtimeShell} -e
plm() {
sudo -u ${config.services.plume.user} -- ${pkgs.plume}/bin/plm $@
}
plm migration run
plm instance new
plm users new --admin
systemctl start plume.service
'') ];
};
}