Firefox
Firefox is themed through the Pywalfox browser extension.
Noctalia writes a pywal-compatible colors.json and can drive the extension either with a built-in host
(post_action = "firefox-theme", community template pywalfox-beta4+) or with the legacy Python pywalfox
package (community template pywalfox).
Prefer pywalfox-beta4+ when your Noctalia build includes Firefox theme support. Keep the legacy path only if
you still need it; both templates write $XDG_CACHE_HOME/wal/colors.json, so enable one, not both.
Recommended: pywalfox-beta4+ (built-in host)
Section titled “Recommended: pywalfox-beta4+ (built-in host)”No separate Python package. Noctalia is the native messaging host.
Requirements
Section titled “Requirements”- Noctalia with the built-in
firefox-themepost-action - Community template
pywalfox-beta4or newer - The Pywalfox extension
-
Install the Pywalfox extension from Firefox Add-ons.
-
Enable the community template in Noctalia:
- Open Settings → Templates (community templates)
- Open Browse Templates and enable
pywalfox-beta4(display name may look like Pywalfox (beta4)) - Leave the legacy
pywalfoxtemplate off
-
Apply a theme (change wallpaper / palette, or re-apply templates) so Noctalia writes
colors.jsonand runsfirefox-theme. That installs the user-local native messaging manifest when needed:~/.mozilla/native-messaging-hosts/pywalfox.json→ yournoctaliabinary. -
Restart Firefox once after the manifest is first installed so it picks up the host.
After that, palette and dark/light mode changes should update the browser without a separate daemon package.
Multiple open Firefox profiles are supported with the built-in host: each profile runs its own native-messaging process, and theme pushes fan out to all of them. The legacy Python host only refreshes one profile at a time.
Manual helpers
Section titled “Manual helpers”noctalia firefox-theme install # write the native messaging manifestnoctalia firefox-theme update # push colors to all running profile hostsnoctalia firefox-theme uninstall # remove the noctalia-owned manifestnoctalia firefox-theme --helpMigrating from the legacy Python host
Section titled “Migrating from the legacy Python host”- Disable the legacy
pywalfoxtemplate; enablepywalfox-beta4(or newer) instead. - If
~/.mozilla/native-messaging-hosts/pywalfox.jsonstill points at a non-Noctalia binary, remove that manifest (or uninstall the Python package’s host) — Noctalia will not overwrite a foreign host. - Re-apply templates (or change theme) so Noctalia can install its own manifest, then restart Firefox.
Optional cleanup: uninstall python-pywalfox when you no longer need it.
Legacy: pywalfox (Python host)
Section titled “Legacy: pywalfox (Python host)”Kept for existing setups until pywalfox-beta4+ is widely available. Uses the external pywalfox CLI via the
community template’s post_hook.
-
Install Pywalfox (Python):
Terminal window # Arch Linux / Manjaroparu -S python-pywalfox -
Install the Pywalfox browser extension from Firefox Add-ons.
-
Enable Firefox theming in Noctalia:
- Open Settings → Templates (community templates)
- Open Browse Templates and enable
pywalfox(display name may look like Firefox (Pywalfox)) - Leave
pywalfox-beta4off if you stay on this path
Pywalfox syncs Noctalia’s color scheme while the Python daemon / host is running. Theme updates follow Noctalia palette changes as long as that host stays up.
Troubleshooting
Section titled “Troubleshooting”- Template not listed: Community templates come from
https://api.noctalia.dev/templates. Refresh / reopen Settings after the catalog publishes the entry. Offline mode blocks catalog downloads. - Extension not connecting: Confirm the extension is enabled, the manifest exists under
~/.mozilla/native-messaging-hosts/pywalfox.json, and Firefox was restarted after install. - Colors file updates but Firefox does not: Confirm you enabled exactly one of
pywalfox-beta4+ or legacypywalfox, and that the manifestpathmatches the host you intend (noctalia vs Python). - Only one of several Firefox profiles refreshes: Expected with the legacy Python host. With
pywalfox-beta4+, restart each profile once after updating Noctalia so every profile is running the new host; then theme pushes should reach all open profiles. - Stuck on the Python host after switching to beta4: Check the
pathfield in the manifest; remove a foreign host entry before Noctalia can install its own.