about summary refs log tree commit diff
path: root/pkgs/applications/networking
diff options
context:
space:
mode:
authoraszlig <aszlig@redmoonstudios.org>2014-11-25 13:39:16 +0100
committeraszlig <aszlig@redmoonstudios.org>2014-11-25 14:14:43 +0100
commit690a845de93a49e85480ad5fae492fa14658ce85 (patch)
tree509b35c70ef1b7174e6861c2be6a39c73a1a91f3 /pkgs/applications/networking
parent518173ac24908eb21573a75765616833f6ec42ad (diff)
downloadnixlib-690a845de93a49e85480ad5fae492fa14658ce85.tar
nixlib-690a845de93a49e85480ad5fae492fa14658ce85.tar.gz
nixlib-690a845de93a49e85480ad5fae492fa14658ce85.tar.bz2
nixlib-690a845de93a49e85480ad5fae492fa14658ce85.tar.lz
nixlib-690a845de93a49e85480ad5fae492fa14658ce85.tar.xz
nixlib-690a845de93a49e85480ad5fae492fa14658ce85.tar.zst
nixlib-690a845de93a49e85480ad5fae492fa14658ce85.zip
chromium: Use Nix expressions for plugin settings.
We now create Nix expressions within the plugin output path(s) which
then will be imported and incorporated into the wrapper. This makes it
easier for other plugins to provide configuration settings to the main
Chromium wrapper.

Of course, in order to allow for external plugins we need to allow
passing a list of plugins to the Chromium derivation, but right now we
keep it internal and only use it for things such as NaCl (as soon as we
support it, of course).

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Diffstat (limited to 'pkgs/applications/networking')
-rw-r--r--pkgs/applications/networking/browsers/chromium/default.nix9
-rw-r--r--pkgs/applications/networking/browsers/chromium/plugins.nix31
2 files changed, 26 insertions, 14 deletions
diff --git a/pkgs/applications/networking/browsers/chromium/default.nix b/pkgs/applications/networking/browsers/chromium/default.nix
index aeb56d88eabe..3e35b704120c 100644
--- a/pkgs/applications/networking/browsers/chromium/default.nix
+++ b/pkgs/applications/networking/browsers/chromium/default.nix
@@ -69,14 +69,17 @@ in stdenv.mkDerivation {
   buildCommand = let
     browserBinary = "${chromium.browser}/libexec/chromium/chromium";
     sandboxBinary = "${chromium.sandbox}/bin/chromium-sandbox";
-  in ''
+    mkEnvVar = key: val: "--set '${key}' '${val}'";
+    envVars = chromium.plugins.settings.envVars or {};
+    flags = chromium.plugins.settings.flags or [];
+  in with stdenv.lib; ''
     mkdir -p "$out/bin" "$out/share/applications"
 
     ln -s "${chromium.browser}/share" "$out/share"
     makeWrapper "${browserBinary}" "$out/bin/chromium" \
       --set CHROMIUM_SANDBOX_BINARY_PATH "${sandboxBinary}" \
-      --run "export ${chromium.plugins.envVarsEnabled}" \
-      --add-flags "${chromium.plugins.flagsEnabled}"
+      ${concatStrings (mapAttrsToList mkEnvVar envVars)} \
+      --add-flags "${concatStringsSep " " flags}"
 
     ln -s "$out/bin/chromium" "$out/bin/chromium-browser"
     ln -s "${chromium.browser}/share/icons" "$out/share/icons"
diff --git a/pkgs/applications/networking/browsers/chromium/plugins.nix b/pkgs/applications/networking/browsers/chromium/plugins.nix
index 8098ec747227..55e0cc4caa21 100644
--- a/pkgs/applications/networking/browsers/chromium/plugins.nix
+++ b/pkgs/applications/networking/browsers/chromium/plugins.nix
@@ -62,29 +62,38 @@ let
       install -vD PepperFlash/libpepflashplayer.so \
         "$flash/lib/libpepflashplayer.so"
       mkdir -p "$flash/nix-support"
-      echo "--ppapi-flash-path='$flash/lib/libpepflashplayer.so'" \
-           "--ppapi-flash-version=$flashVersion" \
-           > "$flash/nix-support/chromium-flags"
+      cat > "$flash/nix-support/chromium-plugin.nix" <<NIXOUT
+        { flags = [
+            "--ppapi-flash-path='$flash/lib/libpepflashplayer.so'"
+            "--ppapi-flash-version=$flashVersion"
+          ];
+        }
+      NIXOUT
 
       install -vD libwidevinecdm.so \
         "$widevine/lib/libwidevinecdm.so"
       install -vD libwidevinecdmadapter.so \
         "$widevine/lib/libwidevinecdmadapter.so"
       mkdir -p "$widevine/nix-support"
-      echo "--register-pepper-plugins='${wvModule}${wvInfo}'" \
-        > "$widevine/nix-support/chromium-flags"
-      echo "NIX_CHROMIUM_PLUGIN_PATH_WIDEVINE=$widevine/lib" \
-        > "$widevine/nix-support/chromium-env-vars"
+      cat > "$widevine/nix-support/chromium-plugin.nix" <<NIXOUT
+        { flags = [ "--register-pepper-plugins='${wvModule}${wvInfo}'" ];
+          envVars.NIX_CHROMIUM_PLUGIN_PATH_WIDEVINE = "$widevine/lib";
+        }
+      NIXOUT
     '';
 
     passthru = let
       enabledPlugins = optional enablePepperFlash plugins.flash
                     ++ optional enableWideVine    plugins.widevine;
-      getFlags = plugin: "$(< ${plugin}/nix-support/chromium-flags)";
-      getEnvVars = plugin: "$(< ${plugin}/nix-support/chromium-env-vars)";
+      getNix = plugin: import "${plugin}/nix-support/chromium-plugin.nix";
+      mergeAttrsets = let
+        f = v: if all isAttrs v then mergeAttrsets v
+          else if all isList  v then concatLists   v
+          else if tail v == []  then head          v
+          else head (tail v);
+      in fold (l: r: zipAttrsWith (_: f) [ l r ]) {};
     in {
-      flagsEnabled = concatStringsSep " " (map getFlags enabledPlugins);
-      envVarsEnabled = concatStringsSep " " (map getEnvVars enabledPlugins);
+      settings = mergeAttrsets (map getNix enabledPlugins);
     };
   };
 in plugins