From 5521c6c5b67a31cc95a7cc3e5f0aae5ca2d83e77 Mon Sep 17 00:00:00 2001 From: Colin Date: Mon, 2 Dec 2024 21:35:20 +0000 Subject: [PATCH] firefox-extensions.default-zoom: load the zoom from managed storage this allows it to be configurable per device this changeset probably does *too* much -- a lot can likely be dropped --- hosts/common/programs/firefox/addons.nix | 12 +++++++ hosts/common/programs/firefox/default.nix | 1 + .../default-zoom/background.js | 33 +++++++++++++++++-- .../default-zoom/default.nix | 4 +-- .../default-zoom/managed_storage.json | 11 +++++++ .../default-zoom/manifest.json | 19 ++++++++--- 6 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 pkgs/by-name/firefox-extensions/default-zoom/managed_storage.json diff --git a/hosts/common/programs/firefox/addons.nix b/hosts/common/programs/firefox/addons.nix index 84fda44d1..c9ec67aec 100644 --- a/hosts/common/programs/firefox/addons.nix +++ b/hosts/common/programs/firefox/addons.nix @@ -69,6 +69,7 @@ in }; # uBlock configuration: + # TODO: shouldn't this be ~/.mozilla/managed-storage, not ~/.mozilla/firefox/managed-storage? fs.".mozilla/firefox/managed-storage/uBlock0@raymondhill.net.json".symlink.target = cfg.addons.ublock-origin.package.makeConfig { # more filter lists are available here: # - @@ -96,5 +97,16 @@ in # (getUasset "ublock-annoyances-cookies") ]; }; + + fs.".mozilla/managed-storage/default-zoom@uninsane.org.json".symlink.text = '' + { + "name": "default-zoom@uninsane.org", + "description": "ignored", + "type": "storage", + "data": { + "zoom": 1.70 + } + } + ''; }; } diff --git a/hosts/common/programs/firefox/default.nix b/hosts/common/programs/firefox/default.nix index bde1b6b56..91e81d60f 100644 --- a/hosts/common/programs/firefox/default.nix +++ b/hosts/common/programs/firefox/default.nix @@ -278,6 +278,7 @@ in # redirect librewolf configs to the firefox configs; this way addons don't have to care about the firefox/librewolf distinction. # XXX: this `../` logic assumes `dotDir` is a direct child of ~, and not a path with multiple components! fs."${cfg.browser.dotDir}/profiles.ini".symlink.target = "../.mozilla/firefox/profiles.ini"; + # TODO: shouldn't this be ~/.mozilla/managed-storage, not ~/.mozilla/firefox/managed-storage? fs."${cfg.browser.dotDir}/managed-storage".symlink.target = "../.mozilla/firefox/managed-storage"; }; diff --git a/pkgs/by-name/firefox-extensions/default-zoom/background.js b/pkgs/by-name/firefox-extensions/default-zoom/background.js index 104a5ba82..c0329c785 100644 --- a/pkgs/by-name/firefox-extensions/default-zoom/background.js +++ b/pkgs/by-name/firefox-extensions/default-zoom/background.js @@ -1,5 +1,7 @@ // simplified implementation of -// + +console.info("[default-zoom]", "background.js: initializing"); + // XXX(2024-12-01): this implementation works for any tabs loaded with ctrl+t, and ctrl+l. // it works for the homepage too, except for a first-run edge case wherein the homepage is loaded // before any extensions are loaded @@ -10,21 +12,46 @@ // - desko: youtube.com is most comfortable 1.6 - 1.8 // - desko: wikipedia.org is most comfortable 1.7 - 1.9 // - lappy: amazon.com is most comfortable 1.0 - 1.2 -let defaultZoom = 1.7; +let defaultZoom = 1; + +// retrieving settings: +// - +// - manifest.json requires `permissions = [ "storage" ]` +// - retrieve with `browser.storage.{backend}.get(...)` +// - e.g. +function applyConfig(storedConfig) { + console.info("[default-zoom]", "applyConfig"); + if (storedConfig && storedConfig.zoom) { + console.info("[default-zoom]", "applyConfig -> zoom", storedConfig.zoom); + defaultZoom = storedConfig.zoom; + } +} + +function onConfigError(error) { + console.info("[default-zoom]", "onConfigError"); + console.error(error); +} function setZoom(tabId, changeInfo) { + console.info("[default-zoom]", "setZoom"); if (changeInfo.status) { + console.info("[default-zoom]", "setZoom -> changeInfo.status exists"); const gettingZoom = browser.tabs.getZoom(tabId); gettingZoom.then((currentZoom) => { + console.info("[default-zoom]", "setZoom -> tabs.getZoom complete"); if (defaultZoom !== 1 && currentZoom === 1) { + console.info("[default-zoom]", "setZoom -> tabs.setZoom", defaultZoom); browser.tabs.setZoom(tabId, defaultZoom); } }); } } +browser.storage.managed.get("zoom").then(applyConfig, onConfigError); + +browser.tabs.onUpdated.addListener(setZoom); browser.tabs.onCreated.addListener((tab) => { browser.tabs.setZoom(tab.id, defaultZoom); }); -browser.tabs.onUpdated.addListener(setZoom); +console.info("[default-zoom]", "background.js: initialized"); diff --git a/pkgs/by-name/firefox-extensions/default-zoom/default.nix b/pkgs/by-name/firefox-extensions/default-zoom/default.nix index 9f275efa5..f89ef3d69 100644 --- a/pkgs/by-name/firefox-extensions/default-zoom/default.nix +++ b/pkgs/by-name/firefox-extensions/default-zoom/default.nix @@ -13,7 +13,7 @@ stdenvNoCC.mkDerivation { buildPhase = '' runHook preBuild zip -j firefox.zip \ - background.html background.js manifest.json + background.html background.js managed_storage.json manifest.json runHook postBuild ''; @@ -23,5 +23,5 @@ stdenvNoCC.mkDerivation { runHook postInstall ''; - passthru.extid = "@default-zoom"; + passthru.extid = "default-zoom@uninsane.org"; } diff --git a/pkgs/by-name/firefox-extensions/default-zoom/managed_storage.json b/pkgs/by-name/firefox-extensions/default-zoom/managed_storage.json new file mode 100644 index 000000000..291dc4a6f --- /dev/null +++ b/pkgs/by-name/firefox-extensions/default-zoom/managed_storage.json @@ -0,0 +1,11 @@ +{ + "$schema": "http://json-schema.org/draft-03/schema#", + "type": "object", + "properties": { + "zoom": { + "title": "zoom", + "description": "default zoom", + "type": "number" + } + } +} diff --git a/pkgs/by-name/firefox-extensions/default-zoom/manifest.json b/pkgs/by-name/firefox-extensions/default-zoom/manifest.json index f324acda2..ca3e3f929 100644 --- a/pkgs/by-name/firefox-extensions/default-zoom/manifest.json +++ b/pkgs/by-name/firefox-extensions/default-zoom/manifest.json @@ -1,17 +1,26 @@ { "manifest_version": 2, + + "name": "Default Zoom", + "short_name": "Default Zoom", + "description": "statically configure a default zoom value for new tabs", + "author": "colin@uninsane.org", + "version": "0.1.0", + "browser_specific_settings": { "gecko": { - "id": "@default-zoom" + "id": "default-zoom@uninsane.org", + "strict_min_version": "57.0" } }, - "name": "Default zoom", - "description": "statically configure a default zoom value for new tabs", - "version": "0.1.0", + "background": { "scripts": [ "background.js" ] }, - "permissions": [] + "permissions": [ + "storage", + "unlimitedStorage" + ] }