anchor.diff:        in
           [ (wrapper cfg.package { }) ];
   
  -    home.file.".mozilla/${extensionPath}" = mkIf (cfg.extensions != []) (
  -      let
  -        extensionsEnv = pkgs.buildEnv {
  -          name = "hm-firefox-extensions";
  -          paths = cfg.extensions;
  +    home.file = mkMerge (
  +      [{
  +        ".mozilla/${extensionPath}" = mkIf (cfg.extensions != []) (
  +          let
  +            extensionsEnv = pkgs.buildEnv {
  +              name = "hm-firefox-extensions";
  +              paths = cfg.extensions;
  +            };
  +          in {
  +            source = "${extensionsEnv}/share/mozilla/${extensionPath}";
  +            recursive = true;
  +          }
  +        );
  +
  +        ".mozilla/firefox/profiles.ini" = mkIf (cfg.profiles != {}) {
  +          text = profilesIni;
           };
  -      in
  -        {
  -          source = "${extensionsEnv}/share/mozilla/${extensionPath}";
  -          recursive = true;
  -        }
  +      }]
  +      ++ flip mapAttrsToList cfg.profiles (_: profile: {
  +        ".mozilla/firefox/${profile.path}/chrome/userChrome.css" =
  +          mkIf (profile.userChrome != "") {
  +            text = profile.userChrome;
  +          };
  +
  +        ".mozilla/firefox/${profile.path}/user.js" =
  +          mkIf (profile.settings != {} || profile.extraConfig != "") {
  +            text = mkUserJs profile.settings profile.extraConfig;
  +          };
  +      })
       );
     };
   }
  
positive.code:   };
  
    config = mkIf cfg.enable {
      home.packages =
        let
          # A bit of hackery to force a config into the wrapper.
  
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;
  