diff options
author | tilpner | 2020-06-14 21:48:09 +0200 |
---|---|---|
committer | tilpner | 2020-06-14 21:48:09 +0200 |
commit | 2992d92e6ce0d7c96ccded0747d8815d8cfed956 (patch) | |
tree | a6c1476ae01a75bbf0df862794e72527c4291f94 /nix | |
parent | 684014d933414615660ef9f7ed398ace21e6e216 (diff) | |
download | firefox-profiles-2992d92e6ce0d7c96ccded0747d8815d8cfed956.tar.gz firefox-profiles-2992d92e6ce0d7c96ccded0747d8815d8cfed956.tar.xz firefox-profiles-2992d92e6ce0d7c96ccded0747d8815d8cfed956.zip |
lib: add escape-hatch exporting mechanism
Diffstat (limited to 'nix')
-rw-r--r-- | nix/lib.nix | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/nix/lib.nix b/nix/lib.nix index e152df9..179223b 100644 --- a/nix/lib.nix +++ b/nix/lib.nix @@ -84,6 +84,42 @@ rec { }) // { inherit policies preferences; }; in wrapped; + # This attempts to provide a start for deploying Nix-configured profiles to + # systems which do not have Nix installed, and where /nix/store is undesired. + # It does this by bundling all referenced store items into $out, and rewriting + # references to those store items. + export = { selfPath, policies ? {}, preferences ? {} }: pkgs.stdenv.mkDerivation rec { + name = "firefox-profile-export"; + nativeBuildInputs = [ pkgs.jq ]; + + allowedRequisites = []; + + buildCommand = + let + policyFile = mkPolicies policies; + prefsFile = mkPrefs preferences; + + closure = pkgs.closureInfo { + rootPaths = [ + policyFile prefsFile + ]; + }; + in '' + mkdir $out $out/store + + storePaths=$(cat ${closure}/store-paths) + for p in $storePaths; do + cp -a "$p" $out/store/"$(basename "$p" | sed -e 's|\([a-z0-9]\{32\}\)-||')" + done + + mv $out/store/prefs.js $out/ + jq < $out/store/policies.json > $out/policies.json + + find $out -type f -print0 | + xargs -0I{} -- sed -i -e "s|$NIX_STORE/\\([a-z0-9]\{32\}\\)-|${selfPath}/store/|g" "{}" + ''; + }; + launcher = firefox: pkgs.writeShellScriptBin "firefox" '' # FF doesn't accept ro profiles, tries to create lockfile TMP_PROFILE="$(mktemp -d)" |