Is there a way to package FireFox with all of it's configurations and extensions into an installer package to redistribute?
I would like to cut back on having to setup FireFox the same on every system it gets installed on.
The Firefox install_directory\browser\defaults\profile (if it exists) is the template directory that Firefox uses to populate a new profile. It is similar to the Windows Default User, or Gnu/Linux /etc/skel concepts. The contents inside (if any) are copied to a new profile, and Firefox immediately starts using it (if valid/relevant). "New profile" means: a user starting Firefox for the very first time, or a user with an existing profile starting Firefox in a new profile, or an action like Reset Firefox.
To hardcode this into the Firefox installer: Using 7-Zip for example, extract the installer, and create the \browser\defaults\profile directory structure inside core. Next, start Firefox in a new profile, make the required changes in Firefox Tools (Alt + T) > Options, and about:config, install the required extensions via Firefox Tools (Alt + T) > Add-ons > [Get Add-ons, and/or the Search bar on the top right], open the profile folder via Firefox Help (Alt + H) > Troubleshooting Information > Show Folder, and exit Firefox.
Finally, copy the required folders/files from the opened profile folder into \core\browser\defaults\profile. Here's a list of the folders/files that can be potentially used. A quick way to decide is to mentally separate the folders/files into two categories: user-related and Firefox-related, so user-related folders/files would include extensions, chrome, cert8.db, cookies.sqlite etc. and can be used as templates whereas Firefox-related folders/files would include healthreport, minidumps, times.json etc. and should be ignored.
In our example we would need to copy prefs.js which holds the changes made via Options and about:config, and also the extensions folder which contains the installed extensions. One thing to note is that it would be good to open prefs.js in an editor like Notepad++ to remove the path and user specific information. Also, files like addons.*, extensions.* shouldn't be copied. These will be created including user/path info correctly for the end users by Firefox.
As for packaging there are various methods:
Using 7-Zip zip the customized core and setup.exe in a top-level .7z archive (.7z file/zip format) and convert it into a .exe setup using 7-Zip SFX Maker for example.
A further option (if needed) would be to wrap this .exe into a .msi (Windows Installer) setup using for example EXE to MSI Converter.
Yet another option would be to package an existing Firefox install_directory including \browser\defaults\profile, as a .msi using wItem.
Still another option is to run Firefox via the network. Install and customize Firefox on a central PC, create and populate the install_directory\browser\defaults\profile, and finally distribute the firefox.exe shortcut to the other systems' Desktop and/or Start Menu. Also, enable offline cache for better performance and to avoid network congestion/storms.
Also, if you have a Configuration/Systems Management application (a third-party suite, or Microsoft SMS/SCCM), it would be possible to just point to the setup.exe as the program to run, and the Management application itself does the necessary transferring and/or packaging of the (now customized) core, and setup.exe and executes setup.exe on the clients. (setup.exe is the actual Firefox installer. The downloaded Firefox installer itself actually invokes setup.exe, and optionally passes any arguments to it.)