Prefs.js to Nix

prefs-js-to-nix is a small CLI for anyone managing their Firefox or Thunderbird configuration with Nix, using Home Manager or similar. It does what it says on the tin, converting user_pref calls to Nix attributes. For example, given a file like this:

❯ cat ~/.mozilla/firefox/*/prefs.js 
// Mozilla User Preferences

// [omitted]
user_pref("app.normandy.first_run", false);
user_pref("app.normandy.migrationsApplied", 12);
// [omitted]
user_pref("toolkit.telemetry.previousBuildID", "20250806102122");
user_pref("toolkit.telemetry.reportingpolicy.firstRun", false);

You get output like this:

❯ src/prefsjs2nix.js < ~/.mozilla/firefox/*/prefs.js
{
  "app.normandy.first_run" = false;
  "app.normandy.migrationsApplied" = 12;
  # omitted
  "toolkit.telemetry.previousBuildID" = "20250806102122";
  "toolkit.telemetry.reportingpolicy.firstRun" = false;
}
4 Likes

I think I just used something like

( echo 'prefs={}; user_pref=(n,v)=>prefs[n]=v;' ; cat prefs.js; echo 'console.log(JSON.stringify(prefs));' ) | node > prefs.json
nix eval --impure --expr 'builtins.fromJSON (builtins.readFile ./prefs.json)'
1 Like

That’s nice. Thank you !