{ config, lib, pkgs, ... }: with lib; let cfg = config.programs.librewolf; mkOverridesFile = prefs: '' // Generated by Home Manager. ${concatStrings (mapAttrsToList (name: value: '' defaultPref("${name}", ${builtins.toJSON value}); '') prefs)} ''; in { meta.maintainers = [ maintainers.onny ]; options.programs.librewolf = { enable = mkEnableOption (lib.mdDoc "Librewolf browser, a privacy enhanced Firefox fork"); package = mkOption { type = types.package; default = pkgs.librewolf; defaultText = literalExpression "pkgs.librewolf"; description = lib.mdDoc "The LibreWolf package to use."; }; settings = mkOption { type = with types; attrsOf (either bool (either int str)); default = { }; example = literalExpression '' { "webgl.disabled" = false; "privacy.resistFingerprinting" = false; } ''; description = lib.mdDoc '' Attribute set of LibreWolf settings and overrides. Refer to for details on supported values. ''; }; }; config = mkIf cfg.enable { assertions = [ (lib.hm.assertions.assertPlatform "programs.librewolf" pkgs lib.platforms.linux) ]; home.packages = [ cfg.package ]; home.file.".librewolf/librewolf.overrides.cfg".text = mkOverridesFile cfg.settings; }; }