anchor.diff:    cfg = config.programs.firefox;
   
     extensionPath = "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
  +
  +  profiles =
  +    flip mapAttrs' cfg.profiles (_: profile:
  +      nameValuePair "Profile${toString profile.id}" {
  +        Name = profile.name;
  +        Path = profile.path;
  +        IsRelative = 1;
  +        Default = if profile.isDefault then 1 else 0;
  +      }
  +    ) // {
  +      General = {
  +        StartWithLastProfile = 1;
  +      };
  +    };
  +
  +  profilesIni = generators.toINI {} profiles;
  +
  +  mkUserJs = prefs: extraPrefs: ''
  +    // Generated by Home Manager.
  +
  +    ${concatStrings (mapAttrsToList (name: value: ''
  +      user_pref("${name}", ${builtins.toJSON value});
  +    '') prefs)}
  +
  +    ${extraPrefs}
  +  '';
   
   in
   
  
positive.code:       in
          [ (wrapper cfg.package { }) ];
  
      home.file.".mozilla/${extensionPath}" = mkIf (cfg.extensions != []) (
        let
          extensionsEnv = pkgs.buildEnv {
            name = "hm-firefox-extensions";
            paths = cfg.extensions;
          };
        in
          {
            source = "${extensionsEnv}/share/mozilla/${extensionPath}";
            recursive = true;
          }
      );
    };
  }
  
negative.code:         '';
        };
  
        profiles = mkOption {
          type = types.attrsOf (types.submodule ({config, name, ...}: {
            options = {
              name = mkOption {
                type = types.str;
                default = name;
                description = "Profile name.";
              };
  
              id = mkOption {
                type = types.ints.unsigned;
                default = 0;
                description = ''
                  Profile ID. This should be set to a unique number per profile.
                '';
              };
  
              settings = mkOption {
                type = with types; attrsOf (either bool (either int str));
                default = {};
                example = literalExample ''
                  {
                    "browser.startup.homepage" = "https://nixos.org";
                    "browser.search.region" = "GB";
                    "browser.search.isUS" = false;
                    "distribution.searchplugins.defaultLocale" = "en-GB";
                    "general.useragent.locale" = "en-GB";
                    "browser.bookmarks.showMobileBookmarks" = true;
                  }
                '';
                description = "Attribute set of Firefox preferences.";
              };
  
              extraConfig = mkOption {
                type = types.lines;
                default = "";
                description = ''
                  Extra preferences to add to <filename>user.js</filename>.
                '';
              };
  
              userChrome = mkOption {
                type = types.lines;
                default = "";
                description = "Custom Firefox CSS.";
                example = ''
                  /* Hide tab bar in FF Quantum */
                  @-moz-document url("chrome://browser/content/browser.xul") {
                    #TabsToolbar {
                      visibility: collapse !important;
                      margin-bottom: 21px !important;
                    }
  
                    #sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header {
                      visibility: collapse !important;
                    }
                  }
                '';
              };
  
              path = mkOption {
                type = types.str;
                default = name;
                description = "Profile path.";
              };
  
              isDefault = mkOption {
                type = types.bool;
                default = config.id == 0;
                defaultText = "true if profile ID is 0";
                description = "Whether this is a default profile.";
              };
            };
          }));
          default = {};
          description = "Attribute set of Firefox profiles.";
        };
  
        enableAdobeFlash = mkOption {
          type = types.bool;
          default = false;
  