feat(firefox): add the desktop Firefox browser module (task 0032) #25
Reference in New Issue
Block a user
Delete Branch "task-0032-firefox-browser"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Task:
.claude/tasks/0032-firefox-browser.mdSummary
Adds Firefox as a single-purpose desktop Module (
modules/desktop/firefox.nix), configured entirely through home-manager'sprograms.firefoxand fanned out by the desktop aggregator atlib.mkDefault true, so any Host withmodules.desktop.enablebrings the browser up (neogaia inherits it through the desktop flag, no per-Host line).pkgs.firefox, builtfirefox-152.0.6), no package override, no NixOS-level program integration.uBlock0@raymondhill.net), Proton Pass (78272b6fa58f4a1abaac99321d503a20@proton.me), SponsorBlock (sponsorBlocker@ajay.app). No native messaging host.metaData.hidden(omission alone does not prune — Firefox reconciles them back in), withsearch.force = true.stylix.targets.firefox.colorTheme— the base target only themes fonts and reader view, socolorTheme(the Stylix-managed, signed Firefox Color add-on) supplies the chrome colors. No hand-written CSS, no flake input of ours.text/html,application/xhtml+xml, and the http/https schemes viaxdg.mimeApps.Fixes found during live confirmation
The manual launch on neogaia surfaced four things the build could not, each fixed and verified by deploying the home generation and living in the browser:
profiles.iniclobber — Firefox writes its ownprofiles.inion first launch, and home-manager refused to overwrite it, failing the entire activation, so the declarative profile never deployed (search and theming absent; policy extensions and mime handlers still worked because they don't touch the profile). Fixed byforce = trueon the generatedprofiles.inihome.file entry.colorTheme.enable(see above), plusprofiles.default.extensions.force = trueto acknowledge the managed extension-settings store.extensions.autoDisableScopes = 0; the policy-installed functional extensions are force-enabled by policy and unaffected.Live result: browser present on desktop, Nord chrome, DuckDuckGo default, extensions enabled, links land in it, and the address-bar highlight is legible.
Commits
ee672d2feat3e64bd0docssearch.forcedoes not prune builtins by omissione24f808fixprofiles.iniso the profile deploys09eb9a9docshome.filekey gotcha (writer's path form, not always absolute)e42101efeatcolorTheme+ scoped ADR note6484f94docsprofiles.iniand chrome-theming fixes in the taskbd32795fixautoDisableScopes = 0so the sideloaded Firefox Color add-on auto-enables7f7fc32fixReview
Risk
Overall: MEDIUM
mkDefaultline in the desktop aggregator; no existing module or caller is modified.search.force = true,extensions.force,profiles.iniownership, andxdg.mimeAppsauthoritatively overwrite runtime browser state, which a plain revert does not restore.OfferToSaveLogins = false, a password-manager extension, default-handler registration), though no auth/secret material is introduced.mkIf.Unaddressed findings
Standards — one, deliberately left: semicolons and multiple-sentences-per-line in
.claude/spec/firefox.mdand the pre-existing body of.claude/tasks/0032-firefox-browser.mdbreach the repo's authoring rules, left as-is because those files are generated by the spec/to-tasks skills, not authored by this change (the repo rule is to not reflow pre-existing prose). Prose authored here — ADR 0005, the module comments, the task's Implementation Notes — follows the rules.Spec — none outstanding. The original review's substantive gap (commercial engines not removed) is fixed; the four live-confirmation issues above are all fixed.
The final acceptance criterion — manual launch confirmation — is now satisfied on neogaia: Nord chrome, DuckDuckGo default, extensions enabled, links land in the browser, address-bar highlight legible.
— Claude
018d4becd1toe42101e08b