diff --git a/nixos/modules/services/web-apps/mediagoblin.nix b/nixos/modules/services/web-apps/mediagoblin.nix index a6f2e5cdd0a3c..02a8b2b1c11d4 100644 --- a/nixos/modules/services/web-apps/mediagoblin.nix +++ b/nixos/modules/services/web-apps/mediagoblin.nix @@ -25,14 +25,13 @@ let iniFormat = pkgs.formats.ini { }; - # we need to build our own GI_TYPELIB_PATH because celery and paster need this information, too and cannot easily be re-wrapped - GI_TYPELIB_PATH = + # we need to build our own GI_TYPELIB_PATH and GST_PLUGIN_PATH because celery, paster and gmg need this information and it cannot easily be re-wrapped + gst = let needsGst = (cfg.settings.mediagoblin.plugins ? "mediagoblin.media_types.audio") || (cfg.settings.mediagoblin.plugins ? "mediagoblin.media_types.video"); in - lib.makeSearchPathOutput "out" "lib/girepository-1.0" ( with pkgs.gst_all_1; [ pkgs.glib @@ -40,7 +39,18 @@ let gstreamer ] # audio and video share most dependencies, so we can just take audio - ++ lib.optionals needsGst cfg.package.optional-dependencies.audio + ++ lib.optionals needsGst cfg.package.optional-dependencies.audio; + GI_TYPELIB_PATH = lib.makeSearchPathOutput "out" "lib/girepository-1.0" gst; + GST_PLUGIN_PATH = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" gst; + + path = + lib.optionals (cfg.settings.mediagoblin.plugins ? "mediagoblin.media_types.stl") [ pkgs.blender ] + ++ lib.optionals (cfg.settings.mediagoblin.plugins ? "mediagoblin.media_types.pdf") ( + with pkgs; + [ + poppler_utils + unoconv + ] ); finalPackage = cfg.package.python.buildEnv.override { @@ -189,7 +199,7 @@ in if [[ "$USER" != mediagoblin ]]; then sudo='exec /run/wrappers/bin/sudo -u mediagoblin' fi - $sudo sh -c "cd /var/lib/mediagoblin; env GI_TYPELIB_PATH=${GI_TYPELIB_PATH} ${lib.getExe' finalPackage "gmg"} $@" + $sudo sh -c "cd /var/lib/mediagoblin; env GI_TYPELIB_PATH=${GI_TYPELIB_PATH} GST_PLUGIN_PATH=${GST_PLUGIN_PATH} PATH=$PATH:${lib.makeBinPath path} ${lib.getExe' finalPackage "gmg"} $*" '') ]; @@ -247,15 +257,7 @@ in let serviceDefaults = { wantedBy = [ "multi-user.target" ]; - path = - lib.optionals (cfg.settings.mediagoblin.plugins ? "mediagoblin.media_types.stl") [ pkgs.blender ] - ++ lib.optionals (cfg.settings.mediagoblin.plugins ? "mediagoblin.media_types.pdf") ( - with pkgs; - [ - poppler_utils - unoconv - ] - ); + inherit path; serviceConfig = { AmbientCapabilities = ""; CapabilityBoundingSet = [ "" ]; @@ -324,6 +326,7 @@ in Environment = [ "CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery" "GI_TYPELIB_PATH=${GI_TYPELIB_PATH}" + "GST_PLUGIN_PATH=${GST_PLUGIN_PATH}" "MEDIAGOBLIN_CONFIG=/var/lib/mediagoblin/mediagoblin.ini" "PASTE_CONFIG=${pasteConfig}" ]; @@ -349,6 +352,7 @@ in Environment = [ "CELERY_ALWAYS_EAGER=false" "GI_TYPELIB_PATH=${GI_TYPELIB_PATH}" + "GST_PLUGIN_PATH=${GST_PLUGIN_PATH}" ]; ExecStart = "${lib.getExe' finalPackage "paster"} serve /var/lib/mediagoblin/paste.ini"; };