44 Commits

Author SHA1 Message Date
Batuhan Baserdem, Ph.D.
3c6f1244ed firefox: allow setting persistent StoreID
Added a new config option programs.firefox.profiles.<name>.storeId.
Setting this option now writes the StoreID both to the profiles.ini
and to the settings."toolkit.profiles.storeID" of the profile.
Firefox has two different profile implementations;
- the old one that home-manager module can declare
- the new "Selectable Profile Service" introduced in 150
The new profiles are managed in a runtime db, and reads from profiles.ini
Migration without database operations is not possible right now,
but when it becomes available, this option will stop home-manager from
clobbering the linked storeIDs.
2026-07-07 15:46:26 -05:00
Dionisie Stratulat
3b3ff17621 firefox: legacyUserProfileCustomizations when userChrome is present
When a user configures the userChrome option, automatically enable the
`toolkit.legacyUserProfileCustomizations.stylesheets` preference with
`mkDefault` priority so that the user chrome CSS is actually loaded.
The user can still override this in the settings option if needed.
2026-06-25 14:15:06 -05:00
Austin Horstman
6459fc4aee firefox: assert bookmarks migration warning 2026-06-04 12:20:09 -05:00
Austin Horstman
917e3469fe mkFirefoxModule: allow per-extension settings force
Fixes the force acknowledgement logic for extension settings so an
extension-specific force flag is sufficient for that extension.

References
https://github.com/nix-community/home-manager/discussions/7910
2026-05-17 21:42:38 -05:00
Austin Horstman
8a2fdaf6b4 tests: fix firefox program tests 2026-04-26 09:55:25 -05:00
Austin Horstman
ed2ee7b313 tests: enable more tests on darwin
Several programs / modules support darwin but weren't being tested on
darwin.
2026-04-25 15:59:45 -05:00
Austin Horstman
6012cf1fed mkFirefoxModule: make profile extensions extensible
Restore nested option extensibility for
`programs.firefox.profiles.<name>.extensions` by keeping it as a plain
submodule.

This removes the deprecated `programs.firefox.profiles.<name>.extensions
= [ ... ]` shorthand. Add-ons must now be declared with
`programs.firefox.profiles.<name>.extensions.packages`, while
declarative settings remain under `extensions.settings`.

Add a regression test for downstream `extensions.*` option extension and
a news entry documenting the migration.
2026-04-23 23:19:12 -05:00
Austin Horstman
b869d6cadb firefox: default configPath to XDG on 26.05
Use `lib.hm.deprecations.mkStateVersionOptionDefault` to keep the legacy `.mozilla/firefox` default for existing configurations while switching new Linux configurations to `"${config.xdg.configHome}/mozilla/firefox"`.

Add focused tests for the legacy and XDG defaults plus a news entry describing the transition.

Closes #8200.
Supersedes #8716 and the earlier attempt in #8672.

Co-authored-by: Heitor <44377258+HeitorAugustoLN@users.noreply.github.com>
2026-04-23 22:58:59 -05:00
Austin Horstman
4bf1f0bcd1 mkFirefoxModule: reject container id 0
Set the default Firefox container id to 1 and reject ids outside the
supported 1..4294967293 range.

Firefox reserves userContextId = 0 for the default, non-container
context:
- nsIScriptSecurityManager::DEFAULT_USER_CONTEXT_ID = 0:

https://searchfox.org/firefox-main/source/caps/nsIScriptSecurityManager.idl
- nsIPrincipal documents that the default userContext returns
DEFAULT_USER_CONTEXT_ID:

https://searchfox.org/firefox-main/source/caps/nsIPrincipal.idl#1135-1147
- Mozilla review discussion also distinguishes default context 0 from
public identities:
  https://bugzilla.mozilla.org/show_bug.cgi?id=1337964#c7

Also cover the lower bound with a dedicated Firefox container test and
update the default container fixture.
2026-04-23 22:07:30 -05:00
Austin Horstman
d035caf3ac mkFirefoxModule: serialize path prefs as strings
Treat Nix paths like plain string preferences when generating user.js so
values such as browser.bookmarks.file are not JSON-quoted twice.

Add a regression case in the Firefox settings test for a path-valued
preference.
2026-04-23 22:06:37 -05:00
André Kugland
a913ae61bf firefox: add handlers.json configuration
Adds support for configuring Firefox's handlers.json file to
manage MIME type and URL scheme handlers declaratively (at
`programs.firefox.profiles.<profile>.handlers`). Handlers control
how Firefox opens files and protocols (e.g., PDF viewers,
`mailto:` handlers).
2026-02-20 16:08:03 -06:00
Timothy Gallion
d21bee5abf floorp: Fix tests for floorp-bin change
Several of the `floorp` tests were broken by the upstream switch to
`floorp-bin`. Most changes were to do with not being able to use
`programs.floorp.wrappedPackageName` in expected results.
2026-01-15 20:29:15 -06:00
Benedikt Rips
2318e30ea1 tests: hostPlatform -> stdenv.hostPlatform 2025-11-03 07:59:03 -06:00
Austin Horstman
bcccb01d0a tests/firefox: change test case to verify we handle missing addonId
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-10-10 08:40:00 -05:00
musjj
c7f4214fac firefox: new permission checks for extensions
Add two new options to customize how extension permissions are checked:

- `extensions.exhaustivePermissions`
  Ensures that the permissions requested by all extensions managed by
  home-manager are authorized
- `extensions.exactPermissions`
  When enabled, the user must authorize only the permissions that the
  extensions requests, not more nor less.
2025-10-09 21:06:28 -05:00
bricked
d52da303ef firefox: add extension permissions (#7402)
Adds extension permissions as suggested in
https://github.com/nix-community/home-manager/issues/7001.
Adds the 'profiles.<name>.extensions.settings.<name>.permissions' to Firefox
derivatives. If set, this option adds an assertion that fails if an extension
package requests permissions that weren't added to the permissions option. In
order to not require 'profiles.<name>.extensions.force' to be set when only
permissions, but no extension settings were defined, the relevant assertions
were changed. They now check whether any 'extensions.settings.<name>.settings'
was set instead of checking whether 'extensions.settings' was set.

---------

Co-authored-by: Robert Helgesson <robert@rycee.net>
Co-authored-by: awwpotato <awwpotato@voidq.com>
2025-07-10 15:33:18 -05:00
Austin Horstman
fd9e55f5fa tests/firefox: add bookmark policy to profile bookmarks test
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-07-06 12:50:40 -05:00
Yiheng He
89af52d9a8 tests/firefox: add extension user.js test 2025-07-02 15:59:50 -05:00
Austin Horstman
0f355844e5 tests/firefox: fix bookmarks test (#7292)
Not run in CI so didn't notice. We had a shared file. But, now attrset
and list differ in what they can generate. Separate the expected test
files.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-06-18 14:39:32 -05:00
xaltsc
0edffd088e firefox: allow separators in bookmarks (#7284)
Allow users to create separators in their Firefox bookmarks.

Co-authored-by: xaltsc <hey@xaltsc.dev>
2025-06-16 15:51:11 -05:00
Ihar Hrachyshka
75268f6252 tests: enable all firefox tests on darwin (plus derivations) (#6960) 2025-05-03 10:51:18 -05:00
K900
abfad3d295 treewide: substituteAll -> replaceVars/substitute
substituteAll is now officially deprecated.
2025-04-24 13:40:11 +02:00
Austin Horstman
c42f04c83f mkFirefoxModule: revert userChrome changes (#6887)
Reverting all the recent userChrome changes because of too many issues
and bikeshedding.
2025-04-22 20:44:48 -05:00
Austin Horstman
991a480472 mkFirefoxModule: userchrome support derivations (#6844) 2025-04-18 19:57:48 -05:00
Austin Horstman
72526a5f7c tests/firefox: fix test commands (#6840)
Tests passed, but looks like `nmt` was swallowing the command not found
errors.
2025-04-17 14:45:55 -05:00
Austin Horstman
2c71aae678 tests/firefox: validate folder linking
Make sure we're linking all folder contents when a directory is
provided.
2025-04-17 08:01:20 -07:00
Austin Horstman
baa2a0b3bd tests/firefox: consolidate userChrome.css test files
Not sure why I had two of them..
2025-04-17 08:01:20 -07:00
Austin Horstman
c3c91dd8b4 mkFirefoxModule: fix userChrome with leading comment (#6836)
userChrome lines that started with a leading comment would cause an eval failure.
2025-04-17 09:31:27 -05:00
Austin Horstman
c6b75d69b6 tests/firefox: add userchrome test cases 2025-04-16 12:57:22 -07:00
Austin Horstman
cba2f9ce95 treewide: reformat nixfmt-rfc-style
Reformat repository using new nixfmt-rfc-style.
2025-04-08 08:50:05 -07:00
Kira Bruneau
4f4538467f firefox: fix migrate search v7 test for all firefox forks (#6690) 2025-03-23 16:36:33 -05:00
bricked
62d6a8931e firefox: fix bookmarks backwards compatibility
The legacy attrset option type for `firefox.profiles.<name>.bookmarks`
was accidentally removed in 9d55428. This adds back support for this
type by refactoring the bookmarks submodule. This also adds a new test
ensuring this won't happen again.
2025-03-23 14:04:01 -05:00
Kira Bruneau
8b629b5424 firefox: migrate search config to v12 2025-03-19 15:16:09 -05:00
Kira Bruneau
b44d79a5b2 firefox: migrate search config to v11 2025-03-19 15:16:09 -05:00
Kira Bruneau
c1dc900a1a firefox: migrate search config to v7 2025-03-19 15:16:09 -05:00
Kira Bruneau
9d554281e0 firefox: refactor bookmarks into a submodule & require force (#6402)
This splits the bookmarks submodule into a seperate file, to make it easier to maintain (like how the search module was previously split out in #5697).

This also refactors bookmarks to require a new force option, to be more explicit about overriding existing bookmarks.
2025-03-19 13:37:13 -05:00
Austin Horstman
95711f9266 treewide: remove with lib (#6512)
* nixos: remove with lib
* nix-darwin: remove with lib
* home-manager: remove with lib
* modules/accounts: remove with lib
* modules/config: remove with lib
* modules/i18n: remove with lib
* modules/misc: remove with lib
* modules: remove with lib
* modules/targets: remove with lib
* tests/modules/firefox: remove with lib
* tests/modules/services: remove with lib
2025-03-07 14:16:46 -06:00
Austin Horstman
e495cd8c80 tests/firefox: add profiles-extensions (#6510)
Wasn't actually running test because it wasn't included. Also had to fix
test after some of the recent changes.
2025-02-21 22:41:22 -06:00
HPsaucii
27ffa35178 firefox: add support for configuring extensions
This commit refactors programs.firefox.profiles.<name>.extensions in
order to support both installation of extensions (addons) and their
configuration. It does this by setting the
`extensions.webextensions.ExtensionStorageIDB.enabled` user_pref to
false.

When this preference is set to false, support for storing extension
settings in sqlite databases, also known as IndexedDB or IDB, is
reverted back to the JSON format present in firefox versions prior to
version 63, as seen here:
https://blog.mozilla.org/addons/2018/08/03/new-backend-for-storage-local-api/

IndexedDB was made the default due to performance improvements, but had
the consequence of removing any possibility of declarative extension
configuration without the assistance of firefox's policy system. The
policy system is supported by a small amount of extensions, such as
uBlock Origin, but has to be explicitly supported. Even when supported,
it provides significantly less granular control when compared to the
JSON storage format.
2025-02-17 12:17:38 -08:00
Danil Suetin
0ee8bfdd04 firefox: add preConfig
Add `preConfig`, which acts like `extraConfig`, but placed before
`settings`. This will allow to overwrite settings in `preConfig`,
using `settings` option.
2025-01-29 18:36:43 +01:00
Scharada
122f70545b firefox: change container.json version to 5 2024-10-19 09:02:11 +02:00
Austin Horstman
346973b338 tests/firefox: add shared path test
Used to make sure that profiles that share a common generated path still
build properly.
2024-10-18 08:31:24 -05:00
Kilian Mio
2b13611eae floorp: add module
Also fix tests for Firefox module derivatives.
2024-10-12 00:21:33 +02:00
Kira Bruneau
271c83e21e firefox: organize tests by submodule (#5698)
Split off from #5697, organizes firefox tests by submodule.

This is intended to match directory structure setup for the new search submodule.
2024-10-07 23:06:52 +02:00