aboutsummaryrefslogtreecommitdiff
path: root/nix/lib.nix
diff options
context:
space:
mode:
authortilpner2020-03-05 16:45:36 +0100
committertilpner2020-03-05 16:45:36 +0100
commitedd25555261c17f74580245b8305cf7edefa4267 (patch)
tree796138422abba300105ac8634fa3fe68bd30252a /nix/lib.nix
downloadfirefox-profiles-edd25555261c17f74580245b8305cf7edefa4267.tar.gz
firefox-profiles-edd25555261c17f74580245b8305cf7edefa4267.tar.xz
firefox-profiles-edd25555261c17f74580245b8305cf7edefa4267.zip
Initial commit
Diffstat (limited to 'nix/lib.nix')
-rw-r--r--nix/lib.nix77
1 files changed, 77 insertions, 0 deletions
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"
+ '';
+}