70 Commits

Author SHA1 Message Date
Ihar Hrachyshka
922a645e84 firefox: apply configPath to package wrapper
This is a counterpart for: https://github.com/NixOS/nixpkgs/pull/556611

When configPath is overridden, if wrapper supports the new appDataDir
argument, we pass configPath's absolute form to tell the app to look for
its datadir in the correct directory.

This will become necessary on macOS 27+ where Firefox that is not signed
by Mozilla has no access to its default datadir.
2026-09-10 22:57:58 -05:00
teto
a14065d14e firefox: more precise documentation of StoreID 2026-07-28 17:15:42 -05:00
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
a786067676 mkFirefoxModule: assert managed package for global extensions
Reject globalExtensions when Home Manager has no browser-managed policy
carrier. This follows up the global extension policy work with a clear
failure mode, a regression test, and a news entry so affected users know
how to fix package = null setups.
2026-06-18 12:53:30 -05:00
Mikilio
9f9b23ae21 mkFirefox: add policy to accept added extensions
This commit adds extensions added via
profiles.<name>.globalExtensions to the policy.
In consequence the extensions are added without complaint and don't need
to be enabled manually.

Co-authored-by: khaneliman <khaneliman@users.noreply.github.com>
2026-06-18 12:38:01 -05:00
glmlm
6274683ee4 mkFirefoxModule: add warning for dropped options on wrapped packages
Warns only if the package lacks a `cfg` override and relevant options are configured.

References
https://github.com/nix-community/home-manager/pull/9486
2026-06-18 08:17:43 -05:00
glmlm
8aec76cc1e mkFirefoxModule: fix unexpected argument error on derivatives
Fix a compilation error when using a wrapper package that does not accept the `cfg` argument in its override.

Closes #9485
2026-06-15 09:26:48 -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
7f8bbc93d6 mkFirefoxModule: document impermanence extensions
Clarify that extensions.autoDisableScopes only handles manual extension approval. Firefox still owns mutable extension runtime state, so impermanent setups must persist the relevant profile state or configure supported extension settings declaratively.

Closes #6398
2026-04-26 21:59:15 -05:00
Austin Horstman
c97d921373 mkFirefoxModule: add firefox devedition example
Help explain profile name requirement for devedition. Firefox won't load
profile unless the name matches.
2026-04-26 21:47:58 -05:00
Austin Horstman
c968134e06 floorp: fix Darwin app bundle name
The package attribute is floorp-bin, but the macOS bundle is Floorp.app. Allow Firefox-family modules to override the derived Darwin app name so Floorp paths match the real package layout.
2026-04-26 09:55:25 -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
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
Austin Horstman
01ea51d706 treewide: use inherit for attribute assignments
This change converts redundant attribute assignments of the form `a =
a;` or `a = someSet.a;` into cleaner `inherit` statements. This reduces
verbosity and follows common Nix style for bringing attributes into
scope.

Statix Codes: W03 (manual_inherit), W04 (manual_inherit_from)

Also include statix and the rule in our configuration.
2026-04-08 14:47:48 -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
Austin Horstman
ae8003d8b6 mkFirefoxModule: remove visible option
Just default everything to show options to remove confusion / chance of
disabling documentation. We already set visible = true so it wasn't even
being used really.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-02-15 14:42:12 -06:00
Austin Horstman
4e235a8746 treewide: nix fmt
nix fmt updated in nixpkgs with string handling changes

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2026-01-13 22:51:16 -06:00
Austin Horstman
5200f3903f mkFirefoxModule: support extensions without addonID
Properly handle extensions missing addonId without eval error.

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
Ivy Pierlot
fccb44df77 mkFirefoxModule: make policies work on darwin 2025-08-31 18:39:22 -05:00
Austin Horstman
2b73c2fcca treewide: remove config dependency on docs (#7547)
Tested with rebased
https://github.com/nix-community/home-manager/pull/6411 so I could find
all instances of config usage in docs.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
Co-authored-by: Robert Helgesson <robert@rycee.net>
2025-07-26 17:11:53 -05:00
Austin Horstman
b4752b0eda treewide: format with latest stable formatter
Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-07-23 10:27:52 -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
dbac1fbcd6 mkFirefoxModule: set NoDefaultBookmarks when a profile has bookmarks are enabled
This resolves issue that someone might try and configure bookmarks and a
policy will prevent it from applying properly.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-07-06 12:50:40 -05:00
Austin Horstman
b4486ff44a mkFirefoxModule: add extension settings example to policies (#7397)
Add an example of using extension settings to control installation and
accesibility of a extension in the policies option.

Signed-off-by: Austin Horstman <khaneliman12@gmail.com>
2025-07-06 10:40:29 -05:00
bricked
153e680c42 firefox: add release option (#6784)
Adds the `release` option to declare what upstream release version is
used to fetch rom `releases.mozilla.org`. Used to fetch
language packs. See
https://github.com/nix-community/home-manager/issues/6758#issuecomment-2781465236.
2025-07-06 09:35:49 -05:00
Yiheng He
1b25908d1d firefox: fix user.js extensions.settings creation
Creates the user.js if profile.extensions.settings is set.
This fixes the case when profile.extensions.settings is set but every
other option in the mkIf is false, resulting in no user.js creation.
2025-07-02 15:59:50 -05:00
nakoo
4e9efaa68b misc: add librewolf native messaging hosts (#7127) 2025-05-29 21:07:27 -05:00
Ihar Hrachyshka
75268f6252 tests: enable all firefox tests on darwin (plus derivations) (#6960) 2025-05-03 10:51:18 -05:00
Austin Horstman
9c46dc881c mkFirefoxModule: support wrapped darwin derivations (#6913)
Wrapped firefox support was added for Darwin. We can now pass the extra parameters to wrap firefox on Darwin.
2025-04-27 20:15:17 -05: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
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
1827e84344 mkFirefoxModule: fix userChrome 2025-04-16 12:57:22 -07:00
Jacob Birkett
7ede02c32a progs: firefox: *.userChrome may be path or drv (#6761)
This allows `programs.firefox.profiles.*.userChrome` to be set to a:
derivation, path/path-like string to directory or file, or multiline
text to be used as content verbatim.

This allows setting, for example(s):
```nix
programs.firefox.profiles."jacob.default".userChrome = pkgs.wavefox;
programs.firefox.profiles."jacob.default".userChrome =
    "${pkgs.wavefox}/userChrome.css";
```
2025-04-16 11:28:18 -05:00
Austin Horstman
cba2f9ce95 treewide: reformat nixfmt-rfc-style
Reformat repository using new nixfmt-rfc-style.
2025-04-08 08:50:05 -07:00
Austin Horstman
55cf1f1632 firefox: fix missing lib (#6744) 2025-04-01 08:25:30 -05:00
Austin Horstman
0b491b460f treewide: remove with lib (#6735)
Continuation of `with lib;` cleanup.
2025-03-31 22:32:16 -05:00
Kira Bruneau
ad0614a1ec firefox: don't show migration warning when bookmarks isn't set (#6689) 2025-03-23 18:13:55 -05:00
Kira Bruneau
0e75a40458 firefox: fix assertion when missing force for extensions (#6688) 2025-03-23 14:04:29 -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
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
Andrew Marshall
04c915bcf1 firefox: Support paths for userChrome & userContent (#3856)
A path may be preferred for some uses, and allowing it avoids the user
needing to `builtins.readFile`, thus creating duplicates and making it
more difficult to determine the actual store path.
2025-03-07 12:11:10 +01:00
HPsaucii
70fbbf05a5 Firefox: Apply global extension force setting to declarative extensions (#6567)
Respect the parent force option for the extension settings storage.js
2025-03-03 20:44:45 -06:00
Kilian Mio
87743e9383 firefox: deprecate vendorPath (#6519)
This is a reaction to PR #6460
2025-02-26 08:20:52 -06:00
Brieuc Dubois
61d8fc9af0 firefox: Allow to add PKCS11 modules (#5608) 2025-02-22 12:51:06 -06:00