X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=modules%2Fwebapps%2Fmediagoblin.nix;h=19bbc2e8ce6c394ea282dfcde04d8e2598bcefbf;hb=6c7d42fc4844bc4f9af72dab531be8377825296a;hp=6808c8267b3313693f197a508bd8fa93e2aeeea1;hpb=996a68c2ec15260dd0c6e8d3d60460e32571d3b7;p=perso%2FImmae%2FConfig%2FNix.git diff --git a/modules/webapps/mediagoblin.nix b/modules/webapps/mediagoblin.nix index 6808c82..19bbc2e 100644 --- a/modules/webapps/mediagoblin.nix +++ b/modules/webapps/mediagoblin.nix @@ -6,7 +6,6 @@ let uid = config.ids.uids.mediagoblin; gid = config.ids.gids.mediagoblin; - fullPackage = cfg.package.withPlugins cfg.plugins; paste_local = pkgs.writeText "paste_local.ini" '' [DEFAULT] debug = false @@ -16,8 +15,8 @@ let [app:mediagoblin] use = egg:mediagoblin#app - config = ${cfg.configFile} ${fullPackage}/mediagoblin.ini - /mgoblin_static = ${fullPackage}/mediagoblin/static + config = ${cfg.configFile} ${cfg.package}/mediagoblin.ini + /mgoblin_static = ${cfg.package}/mediagoblin/static [loggers] keys = root @@ -47,7 +46,7 @@ let [server:main] use = egg:waitress#main - unix_socket = ${cfg.socketsDir}/mediagoblin.sock + unix_socket = ${cfg.sockets.paster} unix_socket_perms = 777 url_scheme = https ''; @@ -88,32 +87,71 @@ in package = lib.mkOption { type = lib.types.package; default = pkgs.webapps.mediagoblin; + example = lib.literalExample '' + pkgs.webapps.mediagoblin.withPlugins (p: [p.basicsearch]) + ''; description = '' Mediagoblin package to use. ''; }; - plugins = lib.mkOption { - type = lib.types.listOf lib.types.package; - default = []; + systemdStateDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if varDir is outside of /var/lib + default = assert lib.strings.hasPrefix "/var/lib/" cfg.dataDir; + lib.strings.removePrefix "/var/lib/" cfg.dataDir; + description = '' + Adjusted Mediagoblin data directory for systemd + ''; + readOnly = true; + }; + systemdRuntimeDirectory = lib.mkOption { + type = lib.types.str; + # Use ReadWritePaths= instead if socketsDir is outside of /run + default = assert lib.strings.hasPrefix "/run/" cfg.socketsDir; + lib.strings.removePrefix "/run/" cfg.socketsDir; + description = '' + Adjusted Mediagoblin sockets directory for systemd + ''; + readOnly = true; + }; + sockets = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + paster = "${cfg.socketsDir}/mediagoblin.sock"; + }; + readOnly = true; + description = '' + Mediagoblin sockets + ''; + }; + pids = lib.mkOption { + type = lib.types.attrsOf lib.types.path; + default = { + paster = "${cfg.socketsDir}/mediagoblin.pid"; + celery = "${cfg.socketsDir}/mediagoblin-celeryd.pid"; + }; + readOnly = true; description = '' - Mediagoblin plugins to use. + Mediagoblin pid files ''; }; }; config = lib.mkIf cfg.enable { - users.users = lib.optionalAttrs (cfg.user == name) (lib.singleton { - inherit name; - inherit uid; - group = cfg.group; - description = "Mediagoblin 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 = "Mediagoblin user"; + home = cfg.dataDir; + useDefaultShell = true; + }; + }; + users.groups = lib.optionalAttrs (cfg.group == name) { + "${name}" = { + inherit gid; + }; + }; systemd.services.mediagoblin-web = { description = "Mediagoblin service"; @@ -126,14 +164,18 @@ in script = '' exec ./bin/paster serve \ ${paste_local} \ - --pid-file=${cfg.socketsDir}/mediagoblin.pid + --pid-file=${cfg.pids.paster} ''; preStop = '' exec ./bin/paster serve \ - --pid-file=${cfg.socketsDir}/mediagoblin.pid \ + --pid-file=${cfg.pids.paster} \ ${paste_local} stop ''; preStart = '' + if [ -d ${cfg.dataDir}/plugin_static/ ]; then + rm ${cfg.dataDir}/plugin_static/coreplugin_basic_auth + ln -sf ${cfg.package}/mediagoblin/plugins/basic_auth/static ${cfg.dataDir}/plugin_static/coreplugin_basic_auth + fi ./bin/gmg -cf ${cfg.configFile} dbupdate ''; @@ -143,8 +185,10 @@ in Restart = "always"; TimeoutSec = 15; Type = "simple"; - WorkingDirectory = fullPackage; - PIDFile = "${cfg.socketsDir}/mediagoblin.pid"; + WorkingDirectory = cfg.package; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + StateDirectory= cfg.systemdStateDirectory; + PIDFile = cfg.pids.paster; }; unitConfig.RequiresMountsFor = cfg.dataDir; @@ -170,24 +214,13 @@ in Restart = "always"; TimeoutSec = 60; Type = "simple"; - WorkingDirectory = fullPackage; - PIDFile = "${cfg.socketsDir}/mediagoblin-celeryd.pid"; + WorkingDirectory = cfg.package; + RuntimeDirectory = cfg.systemdRuntimeDirectory; + StateDirectory= cfg.systemdStateDirectory; + PIDFile = cfg.pids.celery; }; unitConfig.RequiresMountsFor = cfg.dataDir; }; - - system.activationScripts.mediagoblin = { - deps = [ "users" ]; - text = '' - install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.socketsDir} - install -m 0755 -o ${cfg.user} -g ${cfg.group} -d ${cfg.dataDir} - if [ -d ${cfg.dataDir}/plugin_static/ ]; then - rm ${cfg.dataDir}/plugin_static/coreplugin_basic_auth - ln -sf ${fullPackage}/mediagoblin/plugins/basic_auth/static ${cfg.dataDir}/plugin_static/coreplugin_basic_auth - fi - ''; - }; - }; }