From edd25555261c17f74580245b8305cf7edefa4267 Mon Sep 17 00:00:00 2001 From: tilpner Date: Thu, 5 Mar 2020 16:45:36 +0100 Subject: Initial commit --- nix/lib.nix | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 nix/lib.nix (limited to 'nix/lib.nix') diff --git a/nix/lib.nix b/nix/lib.nix new file mode 100644 index 0000000..df1097f --- /dev/null +++ b/nix/lib.nix @@ -0,0 +1,77 @@ +{ pkgs, lib }: + +with lib; +rec { + mozlz4 = pkgs.callPackage ./mozlz4.nix {}; + + flattenAttrs = set: + let recurse = k: v: + if isAttrs v + then mapAttrsToList (k': recurse "${k}.${k'}") v + else nameValuePair k v; + in listToAttrs (flatten (mapAttrsToList recurse set)); + + mkValueString = v: + if isInt v then toString v + else if isString v then "\"${v}\"" + else if true == v then "true" + else if false == v then "false" + else abort "unsupported value type: ${builtins.typeOf v}"; + + toUserPrefs = settings: pkgs.writeText "user.js" + (lib.concatStringsSep "\n" + (lib.mapAttrsToList (k: v: "user_pref(\"${k}\", ${mkValueString v});") + (flattenAttrs settings))); + + toSearchConfig = settings: pkgs.runCommand "search.json.mozlz4" {} '' + ${mozlz4.compress} < ${pkgs.writeText "search.json" (builtins.toJSON settings)} > $out + ''; + + profile = { preferences, search }: pkgs.runCommand "profile" {} '' + mkdir $out + ln -s ${toUserPrefs preferences} $out/user.js + # ln -s ${toSearchConfig search} $out/search.json.mozlz4 + cp ${../search-with-qj.json.mozlz4} $out/search.json.mozlz4 + ''; + + mkPolicies = policies: pkgs.writeText "policies.json" (builtins.toJSON { + inherit policies; + }); + + bundle = { policies }: + let + firefox = pkgs.firefox-unwrapped; + patched = pkgs.runCommand "firefox-bundle" { + nativeBuildInputs = [ pkgs.nix ]; + disallowedReferences = [ firefox ]; + } '' + cp -r ${firefox} $out + chmod -R +w $out + substituteInPlace $out/bin/firefox \ + --replace ${firefox} $out + + mkdir $out/lib/firefox/distribution + cp ${mkPolicies policies} $out/lib/firefox/distribution/policies.json + ''; + wrapped = pkgs.wrapFirefox patched { + browserName = "firefox"; + version = "custom"; + }; + in wrapped; + + launcher = firefox: pkgs.writeShellScriptBin "firefox" '' + # FF doesn't accept ro profiles, tries to create lockfile + TMP_PROFILE="$(mktemp -d)" + function finish() { + echo deleting profile + # rm -rv "$TMP_PROFILE" + } + trap finish EXIT + # cp -r ''${profile} "$TMP_PROFILE" + chmod u+rwx -R "$TMP_PROFILE" + + ${firefox}/bin/firefox \ + --no-remote \ + --profile "$TMP_PROFILE" + ''; +} -- cgit v1.2.3