X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=modules%2Fwebapps%2Fmastodon.nix;h=df2dbb23dac2a2eec289a037de296790071f3c1d;hb=f0255dd5bd2b793741fa1f6f349b89219c9bd56a;hp=26d5238f118968878e1c0c920a9d1c0992a10ac3;hpb=6551e648310639c215b3b8ea79066df761d950e1;p=perso%2FImmae%2FConfig%2FNix.git diff --git a/modules/webapps/mastodon.nix b/modules/webapps/mastodon.nix index 26d5238..df2dbb2 100644 --- a/modules/webapps/mastodon.nix +++ b/modules/webapps/mastodon.nix @@ -27,7 +27,7 @@ in ''; }; socketsPrefix = lib.mkOption { - type = lib.types.string; + type = lib.types.str; default = "live"; description = '' The prefix to use for Mastodon sockets. @@ -96,18 +96,24 @@ in }; config = lib.mkIf cfg.enable { - users.users = lib.optionalAttrs (cfg.user == name) (lib.singleton { - inherit name; - inherit uid; - group = cfg.group; - description = "Mastodon user"; - home = cfg.dataDir; - useDefaultShell = true; - }); - users.groups = lib.optionalAttrs (cfg.group == name) (lib.singleton { - inherit name; - inherit gid; - }); + users.users = lib.optionalAttrs (cfg.user == name) { + "${name}" = { + inherit uid; + group = cfg.group; + description = "Mastodon user"; + home = cfg.dataDir; + useDefaultShell = true; + }; + }; + users.groups = lib.optionalAttrs (cfg.group == name) { + "${name}" = { + inherit gid; + }; + }; + + systemd.slices.mastodon = { + description = "Mastodon slice"; + }; systemd.services.mastodon-streaming = { description = "Mastodon Streaming"; @@ -135,6 +141,7 @@ in ''; serviceConfig = { + Slice = "mastodon.slice"; User = cfg.user; EnvironmentFile = cfg.configFile; PrivateTmp = true; @@ -160,7 +167,7 @@ in environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; environment.SOCKET = cfg.sockets.rails; - path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.file ]; + path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.file pkgs.imagemagick ]; preStart = '' install -m 0755 -d ${cfg.dataDir}/tmp/cache @@ -175,6 +182,7 @@ in exec ./bin/tootctl cache clear ''; serviceConfig = { + Slice = "mastodon.slice"; User = cfg.user; EnvironmentFile = cfg.configFile; PrivateTmp = true; @@ -190,6 +198,36 @@ in unitConfig.RequiresMountsFor = cfg.dataDir; }; + systemd.services.mastodon-cleanup = { + description = "Cleanup mastodon"; + startAt = "daily"; + restartIfChanged = false; + + environment.RAILS_ENV = "production"; + environment.BUNDLE_PATH = "${cfg.workdir.gems}/${cfg.workdir.gems.ruby.gemPath}"; + environment.BUNDLE_GEMFILE = "${cfg.workdir.gems.confFiles}/Gemfile"; + environment.SOCKET = cfg.sockets.rails; + + path = [ cfg.workdir.gems cfg.workdir.gems.ruby pkgs.file ]; + + script = '' + exec ./bin/tootctl media remove --days 30 + ''; + + serviceConfig = { + User = cfg.user; + EnvironmentFile = cfg.configFile; + PrivateTmp = true; + Type = "oneshot"; + WorkingDirectory = cfg.workdir; + StateDirectory = cfg.systemdStateDirectory; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + RuntimeDirectoryPreserve = "yes"; + }; + + unitConfig.RequiresMountsFor = cfg.dataDir; + }; + systemd.services.mastodon-sidekiq = { description = "Mastodon Sidekiq"; wantedBy = [ "multi-user.target" ]; @@ -207,6 +245,7 @@ in ''; serviceConfig = { + Slice = "mastodon.slice"; User = cfg.user; EnvironmentFile = cfg.configFile; PrivateTmp = true;