tonarchy

tonarchy

https://git.tonybtw.com/tonarchy.git git://git.tonybtw.com/tonarchy.git

Merged everything into 1 repo.

Commit
0fad40d1a8c22008c9ebb48c77097f9e12ecbdf5
Parent
dbc4d49
Author
tonybanters <tonybanters@gmail.com>
Date
2026-01-22 00:08:32

Diff

diff --git a/.gitignore b/.gitignore
index ef6f883..7290fe8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@
 compile_commands.json
 /tonarchy
 /tonarchy-static
+/tonarchy-mkiso
 .cache/
 
 *.iso
@@ -15,3 +16,5 @@ test-disk*
 
 result
 notes/
+
+out/
diff --git a/Makefile b/Makefile
index 73ad683..9e6ac98 100644
--- a/Makefile
+++ b/Makefile
@@ -4,22 +4,97 @@ LDFLAGS =
 STATIC_LDFLAGS = -static
 
 TARGET = tonarchy
-SRC = tonarchy.c
+SRC = src/tonarchy.c
+LATEST_ISO = $(shell ls -t out/*.iso 2>/dev/null | head -1)
+TEST_DISK = test-disk.qcow2
 
-.PHONY: all clean install static
+.PHONY: all clean install static mkiso build-iso test test-disk clean-iso clean-vm
 
 all: $(TARGET)
 
 static: $(TARGET)-static
 
+mkiso: tonarchy-mkiso
+
 $(TARGET): $(SRC)
 	$(CC) $(CFLAGS) $(SRC) -o $(TARGET) $(LDFLAGS)
 
 $(TARGET)-static: $(SRC)
 	$(CC) $(CFLAGS) $(SRC) -o $(TARGET)-static $(STATIC_LDFLAGS)
 
-clean:
-	rm -f $(TARGET) $(TARGET)-static
+tonarchy-mkiso: src/tonarchy-mkiso.c
+	$(CC) $(CFLAGS) src/tonarchy-mkiso.c -o tonarchy-mkiso
+
+build-iso: tonarchy-mkiso
+	./tonarchy-mkiso --iso-profile ./iso --out-dir ./out
+
+test:
+	@if [ -z "$(LATEST_ISO)" ]; then echo "No ISO found. Run 'make build-iso' first"; exit 1; fi
+	@if [ ! -f "$(TEST_DISK)" ]; then \
+		echo "Creating test disk..."; \
+		qemu-img create -f qcow2 "$(TEST_DISK)" 20G; \
+	fi
+	@OVMF_CODE=$$(find /usr/share/edk2 /usr/share/OVMF -name "OVMF_CODE*.fd" 2>/dev/null | grep x64 | head -1); \
+	if [ -z "$$OVMF_CODE" ]; then \
+		echo "Error: OVMF not found. Install with: sudo pacman -S edk2-ovmf"; \
+		exit 1; \
+	fi; \
+	OVMF_VARS=$$(find /usr/share/edk2 /usr/share/OVMF -name "OVMF_VARS*.fd" 2>/dev/null | grep x64 | head -1); \
+	if [ ! -f ./OVMF_VARS.fd ]; then \
+		cp "$$OVMF_VARS" ./OVMF_VARS.fd; \
+	fi; \
+	echo "Starting UEFI VM with ISO: $(LATEST_ISO)"; \
+	qemu-system-x86_64 \
+		-cpu host -enable-kvm -machine q35,accel=kvm \
+		-smp $$(nproc) \
+		-m 8192 \
+		-drive file=$(TEST_DISK),format=qcow2,if=virtio \
+		-drive if=pflash,format=raw,readonly=on,file=$$OVMF_CODE \
+		-drive if=pflash,format=raw,file=./OVMF_VARS.fd \
+		-drive file="$(LATEST_ISO)",media=cdrom,readonly=on,cache=none \
+		-boot order=d \
+		-vga virtio \
+		-display gtk \
+		-usb -device usb-tablet \
+		-netdev user,id=net0,hostfwd=tcp::2222-:22 \
+		-device virtio-net-pci,netdev=net0 \
+		-boot menu=on
+
+test-disk:
+	@if [ ! -f "$(TEST_DISK)" ]; then \
+		echo "No test disk found. Run 'make test' first to install."; \
+		exit 1; \
+	fi
+	@OVMF_CODE=$$(find /usr/share/edk2 /usr/share/OVMF -name "OVMF_CODE*.fd" 2>/dev/null | grep x64 | head -1); \
+	if [ -z "$$OVMF_CODE" ]; then \
+		echo "Error: OVMF not found. Install with: sudo pacman -S edk2-ovmf"; \
+		exit 1; \
+	fi; \
+	echo "Booting from installed disk: $(TEST_DISK)"; \
+	echo "SSH available at: ssh -p 2222 user@localhost"; \
+	qemu-system-x86_64 \
+		-cpu host -enable-kvm -machine q35,accel=kvm \
+		-smp $$(nproc) \
+		-m 8192 \
+		-drive file=$(TEST_DISK),format=qcow2,if=virtio \
+		-drive if=pflash,format=raw,readonly=on,file=$$OVMF_CODE \
+		-drive if=pflash,format=raw,file=./OVMF_VARS.fd \
+		-vga virtio \
+		-display gtk \
+		-usb -device usb-tablet \
+		-netdev user,id=net0,hostfwd=tcp::2222-:22 \
+		-device virtio-net-pci,netdev=net0 \
+		-boot menu=on
+
+clean-vm:
+	rm -f $(TEST_DISK) OVMF_VARS.fd
+
+clean-iso:
+	rm -rf out/*.iso
+	sudo rm -rf /tmp/tonarchy_iso_work
+
+clean: clean-iso clean-vm
+	rm -f $(TARGET) $(TARGET)-static tonarchy-mkiso
 
 install: $(TARGET)
 	install -Dm755 $(TARGET) /usr/local/bin/$(TARGET)
diff --git a/assets/firefox/alacritty/alacritty.toml b/assets/firefox/alacritty/alacritty.toml
new file mode 100644
index 0000000..0c8ac79
--- /dev/null
+++ b/assets/firefox/alacritty/alacritty.toml
@@ -0,0 +1,37 @@
+[window]
+# opacity=0.9
+[window.padding]
+y = 6 
+x = 6  
+
+[font]
+# normal = { family = "JetBrainsMono Nerd Font Propo", style = "Regular" }
+normal = { family = "Iosevka Nerd Font Propo", style = "Regular" }
+# size = 20
+size = 14
+
+[colors.bright]
+black   = "#444b6a"
+blue    = "#7da6ff"
+cyan    = "#0db9d7"
+green   = "#b9f27c"
+magenta = "#bb9af7"
+red     = "#ff7a93"
+white   = "#acb0d0"
+yellow  = "#ff9e64"
+
+
+[colors.primary]
+background = "#1a1b26"
+foreground = "#c0caf5"
+
+[colors.normal]
+black   = "#15161e"
+red     = "#f7768e"
+green   = "#9ece6a"
+yellow  = "#e0af68"
+blue    = "#7aa2f7"
+magenta = "#bb9af7"
+cyan    = "#7dcfff"
+white   = "#a9b1d6"
+
diff --git a/assets/firefox/fastfetch/config.jsonc b/assets/firefox/fastfetch/config.jsonc
new file mode 100644
index 0000000..2d69209
--- /dev/null
+++ b/assets/firefox/fastfetch/config.jsonc
@@ -0,0 +1,52 @@
+{
+    "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+    "logo": {
+        "type": "file",
+        "source": "~/.config/fastfetch/logo.txt",
+        "padding": {
+            "top": 1
+        },
+        "color": {
+            "1": "green"
+        }
+    },
+    "display": {
+        "separator": "  ",
+        "color": {
+            "keys": "magenta"
+        },
+        "size": {
+            "ndigits": 0,
+            "maxPrefix": "MB"
+        },
+        "key": {
+            "type": "icon"
+        }
+    },
+    "modules": [
+        {
+            "type": "title",
+            "color": {
+                "user": "green",
+                "at": "red",
+                "host": "blue"
+            }
+        },
+        {
+            "type": "os",
+            "key": "OS", 
+            "format": "Tonarchy"
+        },
+        "kernel",
+        "memory",
+        "packages",
+        "uptime",
+        {
+            "type": "colors",
+            "key": "Colors", 
+            "block": {
+                "range": [1, 6]
+            }
+        }
+    ]
+}
diff --git a/assets/firefox/fastfetch/logo.txt b/assets/firefox/fastfetch/logo.txt
new file mode 100644
index 0000000..b53317b
--- /dev/null
+++ b/assets/firefox/fastfetch/logo.txt
@@ -0,0 +1,6 @@
+  ████████╗
+  ╚══██╔══╝
+     ██║
+     ██║
+     ██║
+     ╚═╝
diff --git a/assets/firefox/favicon.png b/assets/firefox/favicon.png
new file mode 100644
index 0000000..5ba7616
Binary files /dev/null and b/assets/firefox/favicon.png differ
diff --git a/assets/firefox/firefox-policies/policies.json b/assets/firefox/firefox-policies/policies.json
new file mode 100644
index 0000000..115ccd7
--- /dev/null
+++ b/assets/firefox/firefox-policies/policies.json
@@ -0,0 +1,9 @@
+{
+  "policies": {
+    "OverrideFirstRunPage": "",
+    "OverridePostUpdatePage": "",
+    "DisableProfileImport": true,
+    "DontCheckDefaultBrowser": true,
+    "NoDefaultBookmarks": true
+  }
+}
diff --git a/assets/firefox/firefox/default-release/addonStartup.json.lz4 b/assets/firefox/firefox/default-release/addonStartup.json.lz4
new file mode 100644
index 0000000..016258a
Binary files /dev/null and b/assets/firefox/firefox/default-release/addonStartup.json.lz4 differ
diff --git a/assets/firefox/firefox/default-release/extension-settings.json b/assets/firefox/firefox/default-release/extension-settings.json
new file mode 100644
index 0000000..4e8c579
--- /dev/null
+++ b/assets/firefox/firefox/default-release/extension-settings.json
@@ -0,0 +1 @@
+{"version":3,"commands":{},"prefs":{"websites.hyperlinkAuditingEnabled":{"initialValue":{},"precedenceList":[{"id":"uBlock0@raymondhill.net","installDate":1757217118929,"value":false,"enabled":true}]},"network.networkPredictionEnabled":{"initialValue":{"network.prefetch-next":false,"network.http.speculative-parallel-limit":0,"network.dns.disablePrefetch":true},"precedenceList":[{"id":"uBlock0@raymondhill.net","installDate":1757217118929,"value":false,"enabled":true}]}},"url_overrides":{},"default_search":{}}
\ No newline at end of file
diff --git a/assets/firefox/firefox/default-release/extensions.json b/assets/firefox/firefox/default-release/extensions.json
new file mode 100644
index 0000000..47bcd05
--- /dev/null
+++ b/assets/firefox/firefox/default-release/extensions.json
@@ -0,0 +1 @@
+{"schemaVersion":37,"addons":[{"id":"{4520dc08-80f4-4b2e-982a-c17af42e5e4d}","syncGUID":"{c0e20b74-a551-4e4f-b868-990f41a7c0b2}","version":"1.0","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Tokyo Night","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1757217151279,"updateDate":1757217151279,"applyBackgroundUpdates":1,"path":"/home/tony/.mozilla/firefox/cjaa927r.default/extensions/{4520dc08-80f4-4b2e-982a-c17af42e5e4d}.xpi","skinnable":false,"sourceURI":"https://addons.mozilla.org/firefox/downloads/file/3952418/tokyo_night_milav-1.0.xpi","releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"53.0","maxVersion":"*"}],"targetPlatforms":[],"signedState":2,"signedTypes":[2,0],"signedDate":1653183292000,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"requestedPermissions":null,"icons":{},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":{"source":"amo","sourceURL":"https://addons.mozilla.org/en-US/firefox/search/?q=tokyonight","method":"link"},"recommendationState":null,"rootURI":"jar:file:///home/tony/.mozilla/firefox/cjaa927r.default/extensions/%7B4520dc08-80f4-4b2e-982a-c17af42e5e4d%7D.xpi!/","location":"app-profile"},{"id":"formautofill@mozilla.org","syncGUID":"{e51e6ffe-1898-415c-823d-afc045d8ac22}","version":"1.0.1","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Form Autofill","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[],"data_collection":[]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":{},"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-addons/formautofill/","location":"app-builtin-addons"},{"id":"newtab@mozilla.org","syncGUID":"{e2c6e3e6-e7df-4a61-9541-1cb0166bf033}","version":"145.2.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"New Tab","description":"","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"142.0a1","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[],"data_collection":[]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":{},"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-addons/newtab/","location":"app-builtin-addons"},{"id":"pictureinpicture@mozilla.org","syncGUID":"{08d94614-17e7-41dc-9e2e-f6c0c564efec}","version":"1.0.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Picture-In-Picture","description":"Fixes for web compatibility with Picture-in-Picture","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"88.0a1","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":[],"origins":[],"data_collection":[]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":{},"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-addons/pictureinpicture/","location":"app-builtin-addons"},{"id":"addons-search-detection@mozilla.com","syncGUID":"{966b37c0-6cf3-4a9e-a8cb-28c00584d294}","version":"3.0.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Add-ons Search Detection","description":"","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["telemetry","webRequest","webRequestBlocking"],"origins":["<all_urls>"],"data_collection":[]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":{},"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-addons/search-detection/","location":"app-builtin-addons"},{"id":"webcompat@mozilla.org","syncGUID":"{4f72ddb6-7b6e-44fb-9a78-78a9c4950247}","version":"145.11.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Web Compatibility Interventions","description":"Urgent post-release fixes for web compatibility.","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"102.0","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["cookies","mozillaAddons","scripting","tabs","webNavigation","webRequest","webRequestBlocking"],"origins":["<all_urls>"],"data_collection":[]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":{"persistentListeners":{"webRequest":{"onBeforeRequest":[[{"incognito":null,"tabId":null,"types":["main_frame"],"urls":["*://login.microsoftonline.com/*","*://login.microsoftonline.us/*","*://steamcommunity.com/*","*://store.steampowered.com/*","*://help.steampowered.com/*","*://checkout.steampowered.com/*","*://steam.tv/*"],"windowId":null},["blocking"]],[{"incognito":null,"tabId":null,"types":["image"],"urls":["*://track.adform.net/Serving/TrackPoint/*","*://pixel.advertising.com/firefox-etp","*://*.advertising.com/*.js*","*://*.advertising.com/*","*://securepubads.g.doubleclick.net/gampad/*ad-blk*","*://pubads.g.doubleclick.net/gampad/*ad-blk*","*://securepubads.g.doubleclick.net/gampad/*xml_vmap1*","*://pubads.g.doubleclick.net/gampad/*xml_vmap1*","*://vast.adsafeprotected.com/vast*","*://securepubads.g.doubleclick.net/gampad/*xml_vmap2*","*://pubads.g.doubleclick.net/gampad/*xml_vmap2*","*://securepubads.g.doubleclick.net/gampad/*ad*","*://pubads.g.doubleclick.net/gampad/*ad*","*://www.facebook.com/platform/impression.php*","https://ads.stickyadstv.com/firefox-etp","*://ads.stickyadstv.com/auto-user-sync*","*://ads.stickyadstv.com/user-matching*","https://static.adsafeprotected.com/firefox-etp-pixel","*://*.adsafeprotected.com/*.gif*","*://*.adsafeprotected.com/*.png*","*://*.adsafeprotected.com/*.js*","*://*.adsafeprotected.com/*/adj*","*://*.adsafeprotected.com/*/imp/*","*://*.adsafeprotected.com/*/Serving/*","*://*.adsafeprotected.com/*/unit/*","*://*.adsafeprotected.com/jload","*://*.adsafeprotected.com/jload?*","*://*.adsafeprotected.com/jsvid","*://*.adsafeprotected.com/jsvid?*","*://*.adsafeprotected.com/mon*","*://*.adsafeprotected.com/tpl","*://*.adsafeprotected.com/tpl?*","*://*.adsafeprotected.com/services/pub*","*://*.adsafeprotected.com/*"],"windowId":null},["blocking"]],[{"incognito":null,"tabId":null,"types":["imageset"],"urls":["*://track.adform.net/Serving/TrackPoint/*","*://pixel.advertising.com/firefox-etp","*://*.advertising.com/*.js*","*://*.advertising.com/*","*://securepubads.g.doubleclick.net/gampad/*ad-blk*","*://pubads.g.doubleclick.net/gampad/*ad-blk*","*://securepubads.g.doubleclick.net/gampad/*xml_vmap1*","*://pubads.g.doubleclick.net/gampad/*xml_vmap1*","*://vast.adsafeprotected.com/vast*","*://securepubads.g.doubleclick.net/gampad/*xml_vmap2*","*://pubads.g.doubleclick.net/gampad/*xml_vmap2*","*://securepubads.g.doubleclick.net/gampad/*ad*","*://pubads.g.doubleclick.net/gampad/*ad*","*://www.facebook.com/platform/impression.php*","https://ads.stickyadstv.com/firefox-etp","*://ads.stickyadstv.com/auto-user-sync*","*://ads.stickyadstv.com/user-matching*","https://static.adsafeprotected.com/firefox-etp-pixel","*://*.adsafeprotected.com/*.gif*","*://*.adsafeprotected.com/*.png*","*://*.adsafeprotected.com/*.js*","*://*.adsafeprotected.com/*/adj*","*://*.adsafeprotected.com/*/imp/*","*://*.adsafeprotected.com/*/Serving/*","*://*.adsafeprotected.com/*/unit/*","*://*.adsafeprotected.com/jload","*://*.adsafeprotected.com/jload?*","*://*.adsafeprotected.com/jsvid","*://*.adsafeprotected.com/jsvid?*","*://*.adsafeprotected.com/mon*","*://*.adsafeprotected.com/tpl","*://*.adsafeprotected.com/tpl?*","*://*.adsafeprotected.com/services/pub*","*://*.adsafeprotected.com/*"],"windowId":null},["blocking"]],[{"incognito":null,"tabId":null,"types":["xmlhttprequest"],"urls":["*://track.adform.net/Serving/TrackPoint/*","*://pagead2.googlesyndication.com/pagead/*.js*fcd=true","*://pagead2.googlesyndication.com/pagead/js/*.js*fcd=true","*://pixel.advertising.com/firefox-etp","*://cdn.cmp.advertising.com/firefox-etp","*://*.advertising.com/*.js*","*://*.advertising.com/*","*://securepubads.g.doubleclick.net/gampad/*ad-blk*","*://pubads.g.doubleclick.net/gampad/*ad-blk*","*://securepubads.g.doubleclick.net/gampad/*xml_vmap1*","*://pubads.g.doubleclick.net/gampad/*xml_vmap1*","*://vast.adsafeprotected.com/vast*","*://securepubads.g.doubleclick.net/gampad/*xml_vmap2*","*://pubads.g.doubleclick.net/gampad/*xml_vmap2*","*://securepubads.g.doubleclick.net/gampad/*ad*","*://pubads.g.doubleclick.net/gampad/*ad*","*://www.facebook.com/platform/impression.php*","https://ads.stickyadstv.com/firefox-etp","*://ads.stickyadstv.com/auto-user-sync*","*://ads.stickyadstv.com/user-matching*","https://static.adsafeprotected.com/firefox-etp-pixel","https://static.adsafeprotected.com/firefox-etp-js","*://*.adsafeprotected.com/*.gif*","*://*.adsafeprotected.com/*.png*","*://*.adsafeprotected.com/*.js*","*://*.adsafeprotected.com/*/adj*","*://*.adsafeprotected.com/*/imp/*","*://*.adsafeprotected.com/*/Serving/*","*://*.adsafeprotected.com/*/unit/*","*://*.adsafeprotected.com/jload","*://*.adsafeprotected.com/jload?*","*://*.adsafeprotected.com/jsvid","*://*.adsafeprotected.com/jsvid?*","*://*.adsafeprotected.com/mon*","*://*.adsafeprotected.com/tpl","*://*.adsafeprotected.com/tpl?*","*://*.adsafeprotected.com/services/pub*","*://*.adsafeprotected.com/*"],"windowId":null},["blocking"]],[{"incognito":null,"tabId":null,"types":["image"],"urls":["https://smartblock.firefox.etp/facebook.svg","https://smartblock.firefox.etp/play.svg","https://smartblock.firefox.etp/instagram.svg","https://smartblock.firefox.etp/tiktok.svg","https://smartblock.firefox.etp/disqus.svg","https://smartblock.firefox.etp/x-logo.svg"],"windowId":null},["blocking"]],[{"incognito":null,"tabId":null,"types":["script"],"urls":["*://s7.addthis.com/icons/official-addthis-angularjs/current/dist/official-addthis-angularjs.min.js*","*://track.adform.net/serving/scripts/trackpoint/","*://track.adform.net/serving/scripts/trackpoint/async/","*://*.adnxs.com/*/ast.js*","*://*.adnxs.com/*/pb.js*","*://*.adnxs.com/*/prebid*","*://www.everestjs.net/static/st.v3.js*","*://static.adsafeprotected.com/vans-adapter-google-ima.js","*://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js","*://cdn.branch.io/branch-latest.min.js*","*://pub.doubleverify.com/signals/pub.js*","*://c.amazon-adsystem.com/aax2/apstag.js","*://aax.amazon-adsystem.com/e/dtb/bid/*/prebid*","*://auth.9c9media.ca/auth/main.js","*://static.chartbeat.com/js/chartbeat.js","*://static.chartbeat.com/js/chartbeat_video.js","*://static.criteo.net/js/ld/publishertag.js","*://libs.coremetrics.com/eluminate.js","*://connect.facebook.net/*/sdk.js*","*://connect.facebook.net/*/all.js*","*://secure.cdn.fastclick.net/js/cnvr-launcher/*/launcher-stub.min.js*","*://www.google-analytics.com/analytics.js*","*://www.google-analytics.com/gtm/js*","*://www.googletagmanager.com/gtm.js*","*://www.google-analytics.com/plugins/ua/ec.js","*://ssl.google-analytics.com/ga.js","*://s0.2mdn.net/instream/html5/ima3.js","*://imasdk.googleapis.com/js/sdkloader/ima3.js","*://www.googleadservices.com/pagead/conversion_async.js","*://www.googletagservices.com/tag/js/gpt.js*","*://pagead2.googlesyndication.com/tag/js/gpt.js*","*://pagead2.googlesyndication.com/gpt/pubads_impl_*.js*","*://securepubads.g.doubleclick.net/tag/js/gpt.js*","*://securepubads.g.doubleclick.net/gpt/pubads_impl_*.js*","*://script.ioam.de/iam.js","*://cdn.adsafeprotected.com/iasPET.1.js","*://static.adsafeprotected.com/iasPET.1.js","*://adservex.media.net/videoAds.js*","*://*.moatads.com/*/moatad.js*","*://*.moatads.com/*/moatapi.js*","*://*.moatads.com/*/moatheader.js*","*://*.moatads.com/*/yi.js*","*://*.imrworldwide.com/v60.js","*://cdn.optimizely.com/js/*.js","*://cdn.optimizely.com/public/*.js","*://id.rambler.ru/rambler-id-helper/auth_events.js","*://media.richrelevance.com/rrserver/js/1.2/p13n.js","*://www.gstatic.com/firebasejs/*/firebase-messaging.js*","*://js.maxmind.com/js/apis/geoip2/*/geoip2.js","*://s.webtrends.com/js/advancedLinkTracking.js","*://s.webtrends.com/js/webtrends.js","*://s.webtrends.com/js/webtrends.min.js","https://www.instagram.com/embed.js","https://platform.instagram.com/*/embeds.js","https://www.tiktok.com/embed.js","*://*.disqus.com/embed.js","*://openfpcdn.io/botd/v1","https://platform.twitter.com/widgets.js"],"windowId":null},["blocking"]]],"onBeforeSendHeaders":[[{"incognito":null,"tabId":null,"types":["sub_frame"],"urls":["*://trends.google.com/trends/embed*"],"windowId":null},["blocking","requestHeaders"]]],"onHeadersReceived":[[{"incognito":null,"tabId":null,"types":["sub_frame"],"urls":["*://trends.google.com/trends/embed*"],"windowId":null},["blocking","responseHeaders"]]]}}},"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-addons/webcompat/","location":"app-builtin-addons"},{"id":"ipp-activator@mozilla.com","syncGUID":"{ae140180-7269-4a85-91ef-1e3f0e0a8cf6}","version":"0.1","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"IPP Activator","description":"A system add-on to activate IPP in 143","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"143.0","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["tabs","cookies","webRequest"],"origins":["<all_urls>"],"data_collection":[]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":{},"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-addons/ipp-activator/","location":"app-builtin-addons"},{"id":"data-leak-blocker@mozilla.com","syncGUID":"{7c93116e-12ec-4e4d-9c66-2eb57234b227}","version":"144.0.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Data Leak Blocker","description":"","creator":null,"developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"139.0","maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["mozillaAddons"],"origins":[],"data_collection":[]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":{},"hidden":true,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-addons/data-leak-blocker/","location":"app-builtin-addons"},{"id":"default-theme@mozilla.org","syncGUID":"{536114e4-1639-4ac8-aa02-c5b0016ae7b4}","version":"1.4.2","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"System theme — auto","description":"Follow the operating system setting for buttons, menus, and windows.","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1757216887154,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"requestedPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://default-theme/","location":"app-builtin"},{"id":"firefox-compact-light@mozilla.org","syncGUID":"{eab4007f-be9d-4365-8aae-c65323dc9274}","version":"1.3.3","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Light","description":"A theme with a light color scheme.","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1757216888025,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"requestedPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/light/","location":"app-builtin"},{"id":"firefox-compact-dark@mozilla.org","syncGUID":"{9e860bad-f025-48ca-9e3d-76a87d16515b}","version":"1.3.3","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Dark","description":"A theme with a dark color scheme.","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1757216888025,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"requestedPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/dark/","location":"app-builtin"},{"id":"firefox-alpenglow@mozilla.org","syncGUID":"{27443336-e639-480e-a72f-15c8feafb2c1}","version":"1.5.1","type":"theme","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Firefox Alpenglow","description":"Use a colorful appearance for buttons, menus, and windows.","creator":"Mozilla","developers":null,"translators":null,"contributors":null},"visible":true,"active":false,"userDisabled":true,"appDisabled":false,"embedderDisabled":false,"installDate":1757216888025,"applyBackgroundUpdates":1,"path":null,"skinnable":false,"sourceURI":null,"releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":null,"maxVersion":null}],"targetPlatforms":[],"signedDate":null,"seen":true,"dependencies":[],"userPermissions":null,"optionalPermissions":null,"requestedPermissions":null,"icons":{"32":"icon.svg"},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":null,"recommendationState":null,"rootURI":"resource://builtin-themes/alpenglow/","location":"app-builtin"},{"id":"uBlock0@raymondhill.net","syncGUID":"{edf5ea1b-36af-4fae-8de6-701dc0520faf}","version":"1.68.0","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":"dashboard.html","optionsType":3,"optionsBrowserStyle":false,"aboutURL":null,"defaultLocale":{"name":"uBlock Origin","description":"Finally, an efficient blocker. Easy on CPU and memory.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1757217118929,"updateDate":1764908580349,"applyBackgroundUpdates":1,"path":"/home/tony/.mozilla/firefox/cjaa927r.default/extensions/uBlock0@raymondhill.net.xpi","skinnable":false,"sourceURI":"https://addons.mozilla.org/firefox/downloads/file/4629131/ublock_origin-1.68.0.xpi","releaseNotesURI":null,"softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[{"name":"uBlock Origin","description":"Finally, an efficient blocker. Easy on CPU and memory.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["en"]},{"name":"uBlock Origin","description":"高効率ブロッカーついに登場。CPU とメモリーに負担をかけません。","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ja"]},{"name":"uBlock Origin","description":"Lõpuks on valminud tõhus blokeerija. Protsessori- ja mälusõbralik.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["et"]},{"name":"uBlock Origin","description":"Enfin un blocador eficaç. Sollicita pauc lo CPU e la memòria","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["oc"]},{"name":"uBlock Origin","description":"O'r diwedd, rhwystrydd effeithlon sy'n gwell ar y CPU a'r cof.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["cy"]},{"name":"uBlock Origin","description":"Finalmente, um bloqueador eficiente. Leve para a CPU e a memória.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["pt-PT"]},{"name":"uBlock Origin","description":"మొత్తానికి RAM ఇంకా CPU పై తేలికయిన, ఒక సమర్థవంతమైన నిరోధిని.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["te"]},{"name":"uBlock Origin","description":"Un bloqueur de nuisances efficace, qui ménagera votre processeur et votre mémoire vive.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["fr"]},{"name":"uBlock Origin","description":"Akhirnya, pemblokir iklan yang efisien. Ringan penggunaan CPU dan memori.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["id"]},{"name":"uBlock Origin","description":"ਆਖਰਕਾਰ ਪ੍ਰਭਾਵੀ ਬਲੌਕਰ ਹੈ। CPU ਅਤੇ ਮੈਮੋਰੀ ਲਈ ਸੌਖਾ।","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["pa"]},{"name":"uBlock Origin","description":"Behingoz, blokeatzaile eraginkor bat. PUZ eta memorian arina.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["eu"]},{"name":"uBlock Origin","description":"Konečně efektivní blokovač. Nezatěžuje CPU a paměť.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["cs"]},{"name":"uBlock Origin","description":"Végre egy hatékony reklám- és követésblokkoló böngészőkhöz, amely kíméletes a processzorral és a memóriával.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["hu"]},{"name":"uBlock Origin","description":"একটি শক্তিশালী বিজ্ঞাপন প্রতিরোধক, অবশেষে তৈরী হল। যা সিপিইউ এবং মেমরির জন্য সহনীয়।","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["bn"]},{"name":"uBlock Origin","description":"Einlik, in effisjinte adblocker. Brûkt hast gjin prosessorkrêft of ûnthâld.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["fy"]},{"name":"uBlock Origin","description":"Най-накрая, ефективен блокер. Щадящ процесора и паметта.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["bg"]},{"name":"uBlock Origin","description":"Äntligen en effektiv blockerare. Lätt för både processor och minne.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["sv"]},{"name":"uBlock Origin","description":"Ugu dambeyntii, xannibaado hufan. Ku fudud oo ku saabsan CPU iyo xusuusta.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["so"]},{"name":"uBlock Origin","description":"Ефективний блокувальник реклами таки з’явився. Не навантажує процесор та пам'ять.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["uk"]},{"name":"uBlock Origin","description":"ಕೊನೆಗೆ, ಒಂದು ದಕ್ಷ ನಿರ್ಬಂಧಕ. ಮಿತವಾದ ಸಿಪಿಯೂ ಹಾಗು ಮೆಮೊರಿ ಬಳಿಕೇಒಂದಿಗೆ .","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["kn"]},{"name":"uBlock Origin","description":"آخر کار، ایک مؤثر اشتہار کو روکنے والا، یہ کم cpu اور میموری لیتا ہے.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ur"]},{"name":"uBlock Origin","description":"Finfine rendimenta reklamoblokilo. Afabla por ĉefprocesoro kaj memoro.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["eo"]},{"name":"uBlock Origin","description":"Cuối cùng, đã có một công cụ chặn quảng cáo hiệu quả, tiêu tốn ít CPU và bộ nhớ.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["vi"]},{"name":"uBlock Origin","description":"وأخيراً, مانع اعلانات كفوء. خفيف على المعالج و الذاكرة.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ar"]},{"name":"uBlock Origin","description":"이 부가 기능은 효율적인 차단기입니다. CPU와 메모리에 주는 부담이 적습니다.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ko"]},{"name":"uBlock Origin","description":"Finalmente, un blocker efficiente. Leggero sulla CPU e sulla memoria.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["it"]},{"name":"uBlock Origin","description":"இறுதியாக, ஒரு திறமையான விளம்பரத் தடுப்பான். கணினியின் மையச் செயற்பகுதியின் மேலும் நினைவகத்தின் மேலும் இலகுவானது.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ta"]},{"name":"uBlock Origin","description":"आख़िरकार, क्रोमियम-बेस्ड ब्राउज़रों के लिए एक कुशल अवरोधक। सीपीयू और मेमोरी पर कम भार के साथ।\n","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["hi"]},{"name":"uBlock Origin","description":"Pagaliau, efektyvus blokatorius, neapkraunantis nei procesoriaus, nei darbinės atminties.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["lt"]},{"name":"uBlock Origin","description":"Më në fund, një bllokues efikas që nuk e rëndon procesorin dhe memorien.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["sq"]},{"name":"uBlock Origin","description":"Конечно, ефикасен блокер. Лесен на CPU и меморија.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["mk"]},{"name":"uBlock Origin","description":"අවසානයේදී, මධ්‍ය සැකසුම් ඒකකය සහ මතකය අඩුවෙන් භාවිතා කරන කාර්යක්‍ෂම අවහිරකයක් ඇත.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["si"]},{"name":"uBlock Origin","description":"Endelig en effektiv blokkeringsutvidelse. Lavt CPU- og minnebruk.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["no"]},{"name":"uBlock Origin","description":"มาแล้ว! โปรแกรมบล็อกโฆษณาได้อย่างมีประสิทธิภาพ โดยที่ไม่กินซีพียูหรือแรม","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["th"]},{"name":"uBlock Origin","description":"როგორც იქნა, მძლავრი და შედეგიანი რეკლამების შემზღუდავი. ზოგავს CPU-ს და მეხსიერებას.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ka"]},{"name":"uBlock Origin","description":"शेवटी, एक कार्यक्षम ब्लॉकर क्रोमियम आधारित ब्राउझरांसाठी. सीपीयू आणि मेमरी वर सोपे जातो.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["mr"]},{"name":"uBlock Origin","description":"Hatimaye, kizuizi kinachofaa. Nyepesi kwenye CPU na kumbukumbu.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["sw"]},{"name":"uBlock Origin","description":"Endelig en effektiv blokkeringsutvidelse. Lavt CPU- og minnebruk.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["nb"]},{"name":"uBlock Origin","description":"Axır ki, prosessor və yaddaş yükünü azaldan səmərəli bir əngəlləyici var.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["az"]},{"name":"uBlock Origin","description":"Ó fin, un bloqueador eficiente que non chupa toda a memoria e o procesador.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["gl"]},{"name":"uBlock Origin","description":"Finalment, un blocador eficient que utilitza pocs recursos de memòria i processador.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ca"]},{"name":"uBlock Origin","description":"Finally, an efficient blocker. Easy on CPU and memory.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["en-GB"]},{"name":"uBlock Origin","description":"Konečne efektívny blokovač. Nezaťažuje CPU ani pamäť.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["sk"]},{"name":"uBlock Origin","description":"Коначно, ефикасан блокатор. Ниски процесорски и меморијски захтеви.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["sr"]},{"name":"uBlock Origin","description":"Endlich ein effizienter Blocker, der wenig Prozessorleistung und Arbeitsspeicher verbraucht.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["de"]},{"name":"uBlock Origin","description":"Тинех Интернет тишкерӳҫӗ валли хӑвӑрт та витӗмлӗ чаркӑч пур.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["cv"]},{"name":"uBlock Origin","description":"بالاخره، یک بلاکر کارآمد. کم حجم بر روی پردازنده و حافظه.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["fa"]},{"name":"uBlock Origin","description":"一款高效的网络请求过滤工具,占用极低的内存和 CPU。","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["zh-CN"]},{"name":"uBlock Origin","description":"അവസാനം, ഒരു കാര്യക്ഷമമായ ബ്ലോക്കര്‍. ലഘുവായ CPU, memory ഉപയോഗം.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ml"]},{"name":"uBlock Origin","description":"Наконец-то, быстрый и эффективный блокировщик для браузеров.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ru"]},{"name":"uBlock Origin","description":"Beidzot, efektīvs bloķētājs. Nepārslogo procesoru un atmiņu.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["lv"]},{"name":"uBlock Origin","description":"Končno, učinkovita, procesorju in pomnilniku prijazna razširitev za blokiranje oglasov.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["sl"]},{"name":"uBlock Origin","description":"Nareszcie skuteczny bloker charakteryzujący się niskim użyciem procesora i pamięci.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["pl"]},{"name":"uBlock Origin","description":"Mainam na pangharang sa content. Magaan sa CPU at memorya.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["fil"]},{"name":"uBlock Origin","description":"Erfin, ur stanker saotradurioù efedus hag a zouj d'ho reizhiad korvoiñ ha d'ho memor.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["br-FR"]},{"name":"uBlock Origin","description":"Konačno, efikasan blokator. Lak na CPU i memoriji.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["hr"]},{"name":"uBlock Origin","description":"Akhirnya, penyekat yang cekap. Tidak membebankan CPU dan memori.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ms"]},{"name":"uBlock Origin","description":"Viimeinkin tehokas estotyökalu, joka ei kuormita prosessoria ja muistia.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["fi"]},{"name":"uBlock Origin","description":"Нарэшце, эфектыўны блакавальнік. Не нагружае працэсар і памяць.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["be"]},{"name":"uBlock Origin","description":"Վերջապե՛ս, արդյունավետ արգելափակիչ։ Խնայում է մշակիչը և հիշողությունը։","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["hy"]},{"name":"uBlock Origin","description":"Жарнамаларды жақсы өшіретін Addon'дардың бірі. Компьютердің қуатың аз алады.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["kk"]},{"name":"uBlock Origin","description":"În sfârșit, un blocant eficient. Are un impact mic asupra procesorului și memoriei.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["ro"]},{"name":"uBlock Origin","description":"અંતે, એક કાર્યક્ષમ અવરોધક. સીપીયુ અને મેમરી પર સરળ.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["gu"]},{"name":"uBlock Origin","description":"Por fin, un bloqueador eficiente con uso mínimo de procesador y memoria.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["es"]},{"name":"uBlock Origin","description":"終於有一款高效能的封鎖工具。對 CPU 和記憶體的占用極低。","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["zh-TW"]},{"name":"uBlock Origin","description":"Επιτέλους, ένας αποτελεσματικός blocker. Ελαφρύς για τον επεξεργαστή και τη μνήμη.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["el"]},{"name":"uBlock Origin","description":"סוף סוף, חוסם יעיל. קל על המעבד והזיכרון.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["he"]},{"name":"uBlock Origin","description":"Até que enfim, um bloqueador eficiente. Bem otimizado para CPU e memória.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["pt-BR"]},{"name":"uBlock Origin","description":"Endelig en effektiv blocker. Lavt CPU- og hukommelsesforbrug.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["da"]},{"name":"uBlock Origin","description":"Sonunda, etkili bir engelleyici. İşlemciyi ve belleği yormaz.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["tr"]},{"name":"uBlock Origin","description":"Eindelijk, een efficiënte adblocker. Gebruikt weinig processorkracht en geheugen.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["nl"]},{"name":"uBlock Origin","description":"Konačno, efikasan bloker. Štedljiv na procesoru i memoriji.","creator":"Raymond Hill & contributors","developers":null,"translators":null,"contributors":null,"locales":["bs"]}],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"92.0","maxVersion":"*"}],"targetPlatforms":[],"signedState":2,"signedTypes":[2,1],"signedDate":1764775619000,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["alarms","dns","menus","privacy","storage","tabs","unlimitedStorage","webNavigation","webRequest","webRequestBlocking"],"origins":["<all_urls>","http://*/*","https://*/*","file://*/*","https://easylist.to/*","https://*.fanboy.co.nz/*","https://filterlists.com/*","https://forums.lanik.us/*","https://github.com/*","https://*.github.io/*","https://github.com/uBlockOrigin/*","https://ublockorigin.github.io/*","https://*.reddit.com/r/uBlockOrigin/*"],"data_collection":["none"]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{"16":"img/ublock.svg","32":"img/ublock.svg","48":"img/ublock.svg","64":"img/ublock.svg","96":"img/ublock.svg","128":"img/ublock.svg"},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":{"persistentListeners":{"webRequest":{"onBeforeRequest":[[{"incognito":null,"tabId":null,"types":null,"urls":["moz-extension://a49b8822-5428-4b40-a099-a0a2462fa78b/web_accessible_resources/*"],"windowId":null},["blocking"]],[{"incognito":null,"tabId":null,"types":null,"urls":["http://*/*","https://*/*","ws://*/*","wss://*/*"],"windowId":null},["blocking"]]]}}},"hidden":false,"installTelemetryInfo":{"source":"amo","sourceURL":"https://addons.mozilla.org/en-US/firefox/search/?q=ublock%20origin","method":"link"},"recommendationState":{"validNotAfter":1922563619000,"validNotBefore":1764775619000,"states":["recommended-android","recommended"]},"rootURI":"jar:file:///home/tony/.mozilla/firefox/cjaa927r.default/extensions/uBlock0@raymondhill.net.xpi!/","location":"app-profile"},{"id":"addon@darkreader.org","syncGUID":"{28732445-196d-47e5-babd-7469490ebcd9}","version":"4.9.119","type":"extension","loader":null,"updateURL":null,"installOrigins":null,"manifestVersion":2,"optionsURL":null,"optionsType":null,"optionsBrowserStyle":true,"aboutURL":null,"defaultLocale":{"name":"Dark Reader","description":"Dark mode for every website. Take care of your eyes, use dark theme for night and daily browsing.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null},"visible":true,"active":true,"userDisabled":false,"appDisabled":false,"embedderDisabled":false,"installDate":1760672859705,"updateDate":1768479551951,"applyBackgroundUpdates":1,"path":"/home/tony/.mozilla/firefox/cjaa927r.default/extensions/addon@darkreader.org.xpi","skinnable":false,"sourceURI":"https://addons.mozilla.org/firefox/downloads/file/4665768/darkreader-4.9.119.xpi","releaseNotesURI":"https://addons.mozilla.org/en-US/firefox/addon/darkreader/versions/4.9.119/updateinfo/","softDisabled":false,"foreignInstall":false,"strictCompatibility":true,"locales":[{"name":"Dark Reader","description":"Dark mode for every website. Take care of your eyes, use dark theme for night and daily browsing.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["en"]},{"name":"Dark Reader","description":"あらゆるサイトにダークテーマを。夜間や毎日のブラウジングにDark Readerで目を気遣います。","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["ja"]},{"name":"Dark Reader","description":"Tema escuro para todos os websites. Cuide dos seus olhos, use o Dark Reader para navegação noturna e diária.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["pt-PT"]},{"name":"Dark Reader","description":"ప్రతి వెబ్‌సైట్‌కి ముదురు థీమ్. మీ కళ్లను కాపాడుకోండి, రాత్రి మరియు పగలు బ్రౌజింగ్ట్‌కి ముదురు థీమ్ ఉపయోగించండి.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["te"]},{"name":"Dark Reader","description":"Thème sombre pour tous les sites. Prenez soin de vos yeux, profitez d'un thème sombre pour naviguer de jour comme de nuit.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["fr"]},{"name":"Dark Reader","description":"Тъмен режим за всеки уебсайт. Погрижете се за очите си, използвайте тъмна тема за нощно и ежедневно сърфиране.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["bg"]},{"name":"Dark Reader","description":"Mode malam untuk semua situs web. Menjaga mata anda, menggunakan tema gelap untuk berselancar siang dan malam hari.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["id"]},{"name":"Dark Reader","description":"প্রত্যেক ওয়েবসাইটের জন্য ডার্কমোড। নিজ চোখের যত্ম নিন, নিত্যকার ব্রাউজিং এর জন্য ব্যবহার করুন ডার্ক থিম।","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["bn"]},{"name":"Dark Reader","description":"حالت تاریک برای همه سایت ها. مراقب چشمانتان باشید، برای وبگردی در شب یا روز از حالت تاریک استفاده کنید.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["fa-IR"]},{"name":"Dark Reader","description":"Mörkt läge på alla webbplatser. Ta hand om dina ögon och använd ett mörkt tema för att surfa på natten och dagen.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["sv"]},{"name":"Dark Reader","description":"Tmavý motiv pro každou stránku. Používejte Dark Reader pro celodenní prohlížení webu a šetřete tak své oči.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["cs"]},{"name":"Dark Reader","description":"Темний вигляд для кожного мережевого сайту. Піклуйтеся про свої очі, використовуйте темний вид для нічного та щоденного перегляду.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["uk"]},{"name":"Dark Reader","description":"الوضع المظلم لجميع المواقع. اعتن بعينيك، استعمل التنسيق الداكن للتصفح اليومي في الليل.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["ar"]},{"name":"Dark Reader","description":"සියළුම අඩවි සදහා අඳුරු ප්‍රකාරය. ඔබගේ නෙත් රැකගන්න, රාත්‍රී සහ දිවා කාලයේ දී වියමන අඩවි පිරික්සීමට අඳුරු තේමාව භාවිතා කරන්න.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["si"]},{"name":"Dark Reader","description":"Chế độ tối cho mọi trang web. Bảo vệ đôi mắt của bạn, sử dụng khi duyệt web vào ban đêm và hàng ngày.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["vi"]},{"name":"Dark Reader","description":"모든 웹사이트에 다크 모드를 적용합니다. 밤이나 일상적인 웹 브라우징 시 어두운 테마를 사용하여 눈을 보호하세요.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["ko"]},{"name":"Dark Reader","description":"Modo oscuro para cada sitio web. Cuide sus ojos, use el tema oscuro para la navegación nocturna y diaria.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["es-419"]},{"name":"Dark Reader","description":"Tema scuro per ogni sito. Proteggi i tuoi occhi usando il tema scuro mentre navighi, sia di giorno che di notte.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["it"]},{"name":"Dark Reader","description":"Mørkt tema for alle nettsteder. Ta vare på øynene, bruk Dark Reader for nettleseren, dag og kveld.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["no"]},{"name":"Dark Reader","description":"हर वेबसाइट के लिए डार्क थीम। अपनी आंखों की देखभाल करें, रात और हर रोज़ की ब्राउज़िंग के लिए डार्क रीडर का उपयोग करें।","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["hi"]},{"name":"Dark Reader","description":"Dunkler Modus für jede Website. Schonen Sie Ihre Augen und verwenden Sie Dark Reader für die Nacht und das tägliche Surfen.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["de"]},{"name":"Dark Reader","description":"เปลี่ยนเป็นโหมดมืดให้กับทุกๆเว็บเพื่อปกป้องสายตาของคุณ ใช้ธีมสีมืดสำหรับตอนกลางคืนและการท่องเว็บในชีวิตประจำวัน","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["th"]},{"name":"Dark Reader","description":"Dark mode for every website. Take care of your eyes, use dark theme for night and daily browsing.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["en-GB"]},{"name":"Dark Reader","description":"Tmavý režim pre každú stránku. Šetrite svoje oči a používajte tmavý motív po celý deň.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["sk"]},{"name":"Dark Reader","description":"Тамни режим за сваки сајт. Пазите на своје очи, користите тамну тему дању и ноћу.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["sr"]},{"name":"Dark Reader","description":"حالت تاریک برای همه سایت ها. مراقب چشمانتان باشید، برای وبگردی در شب یا روز از حالت تاریک استفاده کنید.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["fa"]},{"name":"Dark Reader","description":"Mod gelap untuk setiap laman web. Jaga mata anda, gunakan tema gelap untuk melayari laman web, malam dan siang.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["ms"]},{"name":"Dark Reader","description":"为每个网站启用暗色模式。呵护双眼,使用暗色主题进行夜间和日常浏览。","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["zh-CN"]},{"name":"Dark Reader","description":"Тёмная тема для каждого сайта. Берегите зрение, используйте Дарк Ридер для ночного или ежедневного просмотра веб-страниц.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["ru"]},{"name":"Dark Reader","description":"Mørk tilstand for alle hjemmesider. Beskyt dine øjne og brug mørke temaer for browsing on dagen og natten.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["da-DK"]},{"name":"Dark Reader","description":"Pozwala na korzystanie z trybu ciemnego na każdej stronie internetowej. Zadbaj o swój wzrok, używając ciemnego motywu do przeglądania w dzień i w nocy.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["pl"]},{"name":"Dark Reader","description":"Dark mode para sa lahat ng website. Alagaan ang iyong mga mata, gamitin ang dark theme para sa gabi at pang-araw-araw na browsing.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["fil"]},{"name":"Dark Reader","description":"Temă întunecată pentru orice site. Ai grijă de ochii tăi, folosește Dark Reader pentru cititul noaptea și de zi cu zi.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["ro"]},{"name":"Dark Reader","description":"Цёмная Тэма для кожнага сайта. Беражыце свае вочы, карыстайцеся Дарк Рыдарам для начнога ці штодзённага прагляду вэб-старонак.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["be"]},{"name":"Dark Reader","description":"Dark mode for every website. Take care of your eyes, use dark theme for night and daily browsing.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["en-US"]},{"name":"Dark Reader","description":"Σκούρα εμφάνιση για όλες τις ιστοσελίδες. Φροντίστε τα μάτια σας κάνοντας χρήση σκούρας εμφάνισης στο καθημερινό σας σερφάρισμα.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["el"]},{"name":"Dark Reader","description":"Tema oscuro para todos los sitios. Cuide sus ojos, utilice Dark Reader para navegar durante el día y la noche.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["es"]},{"name":"Dark Reader","description":"Tema escuro para todos os sites. Mantenha os seus olhos relaxados usando o tema escuro em sua navegação diária.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["pt-BR"]},{"name":"Dark Reader","description":"為每個網站提供深色模式。保護您的眼睛,使用 Dark Reader 進行夜間和日間瀏覽。","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["zh-TW"]},{"name":"Dark Reader","description":"מצב אפל לכל אתר. תשמור על העיניים שלך, השתמש בעיצוב כהה לגלישה בלילה וגם ביום.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["he"]},{"name":"Dark Reader","description":"Her web sitesi için koyu mod. Gözlerinize iyi bakın, gece ve günlük gezinti için koyu renk tema kullanın.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["tr"]},{"name":"Dark Reader","description":"Donkere modus voor elke website. Zorg goed voor je ogen, gebruik donkere modus voor gebruik in de nacht of zelfs overdag.","creator":"Alexander Shutau","developers":null,"translators":null,"contributors":null,"locales":["nl"]}],"targetApplications":[{"id":"toolkit@mozilla.org","minVersion":"78.0","maxVersion":"*"}],"targetPlatforms":[],"signedState":2,"signedTypes":[2,1],"signedDate":1768419338000,"seen":true,"dependencies":[],"incognito":"spanning","userPermissions":{"permissions":["alarms","contextMenus","storage","tabs","theme"],"origins":["<all_urls>"],"data_collection":[]},"optionalPermissions":{"permissions":[],"origins":[],"data_collection":[]},"requestedPermissions":{"permissions":[],"origins":[],"data_collection":[]},"icons":{"16":"icons/dr_16.png","48":"icons/dr_48.png","128":"icons/dr_128.png"},"iconURL":null,"blocklistAttentionDismissed":false,"blocklistState":0,"blocklistURL":null,"startupData":null,"hidden":false,"installTelemetryInfo":{"source":"amo","sourceURL":"https://addons.mozilla.org/en-US/firefox/search/?q=dark%20reader","method":"link"},"recommendationState":{"validNotAfter":1926207338000,"validNotBefore":1768419338000,"states":["recommended-android","recommended"]},"rootURI":"jar:file:///home/tony/.mozilla/firefox/cjaa927r.default/extensions/addon@darkreader.org.xpi!/","location":"app-profile"}]}
\ No newline at end of file
diff --git a/assets/firefox/firefox/default-release/extensions/addon@darkreader.org.xpi b/assets/firefox/firefox/default-release/extensions/addon@darkreader.org.xpi
new file mode 100644
index 0000000..5ffaa1a
Binary files /dev/null and b/assets/firefox/firefox/default-release/extensions/addon@darkreader.org.xpi differ
diff --git a/assets/firefox/firefox/default-release/extensions/uBlock0@raymondhill.net.xpi b/assets/firefox/firefox/default-release/extensions/uBlock0@raymondhill.net.xpi
new file mode 100644
index 0000000..bd13d45
Binary files /dev/null and b/assets/firefox/firefox/default-release/extensions/uBlock0@raymondhill.net.xpi differ
diff --git a/assets/firefox/firefox/default-release/extensions/{4520dc08-80f4-4b2e-982a-c17af42e5e4d}.xpi b/assets/firefox/firefox/default-release/extensions/{4520dc08-80f4-4b2e-982a-c17af42e5e4d}.xpi
new file mode 100644
index 0000000..ac8e617
Binary files /dev/null and b/assets/firefox/firefox/default-release/extensions/{4520dc08-80f4-4b2e-982a-c17af42e5e4d}.xpi differ
diff --git a/assets/firefox/firefox/default-release/user.js b/assets/firefox/firefox/default-release/user.js
new file mode 100644
index 0000000..2a553d4
--- /dev/null
+++ b/assets/firefox/firefox/default-release/user.js
@@ -0,0 +1,1303 @@
+/******
+*    name: arkenfox user.js
+*    date: 13 January 2025
+* version: 133
+*    urls: https://github.com/arkenfox/user.js [repo]
+*        : https://arkenfox.github.io/gui/ [interactive]
+* license: MIT: https://github.com/arkenfox/user.js/blob/master/LICENSE.txt
+
+* README:
+
+  1. Consider using Tor Browser if it meets your needs or fits your threat model
+       * https://2019.www.torproject.org/about/torusers.html
+  2. Read the entire wiki
+       * https://github.com/arkenfox/user.js/wiki
+  3. If you skipped step 2, return to step 2
+  4. Make changes in a user-overrides.js
+       * There are often trade-offs and conflicts between security vs privacy vs anti-tracking
+         and these need to be balanced against functionality & convenience & breakage
+       * Some site breakage and unintended consequences will happen. Everyone's experience will differ
+         e.g. some user data is erased on exit (section 2800), change this to suit your needs
+       * While not 100% definitive, search for "[SETUP" tags
+  5. Some tag info
+       [SETUP-SECURITY] it's one item, read it
+            [SETUP-WEB] can cause some websites to break
+         [SETUP-CHROME] changes how Firefox itself behaves (i.e. not directly website related)
+  6. Override Recipes: https://github.com/arkenfox/user.js/issues/1080
+
+* RELEASES: https://github.com/arkenfox/user.js/releases
+
+  * Use the arkenfox release that matches your Firefox version
+    - DON'T wait for arkenfox to update Firefox, nothing major changes these days
+  * Each release
+    - run prefsCleaner to reset prefs made inactive, including deprecated (9999)
+  * ESR
+    - It is recommended to not use the updater, or you will get a later version which may cause issues.
+      So you should manually append your overrides (and keep a copy), and manually update when you
+      change ESR releases (arkenfox is already past that release)
+    - If you decide to keep updating, then the onus is on you - also see section 9999
+
+* INDEX:
+
+  0100: STARTUP
+  0200: GEOLOCATION
+  0300: QUIETER FOX
+  0400: SAFE BROWSING
+  0600: BLOCK IMPLICIT OUTBOUND
+  0700: DNS / DoH / PROXY / SOCKS
+  0800: LOCATION BAR / SEARCH BAR / SUGGESTIONS / HISTORY / FORMS
+  0900: PASSWORDS
+  1000: DISK AVOIDANCE
+  1200: HTTPS (SSL/TLS / OCSP / CERTS / HPKP)
+  1600: REFERERS
+  1700: CONTAINERS
+  2000: PLUGINS / MEDIA / WEBRTC
+  2400: DOM (DOCUMENT OBJECT MODEL)
+  2600: MISCELLANEOUS
+  2700: ETP (ENHANCED TRACKING PROTECTION)
+  2800: SHUTDOWN & SANITIZING
+  4000: FPP (fingerprintingProtection)
+  4500: OPTIONAL RFP (resistFingerprinting)
+  5000: OPTIONAL OPSEC
+  5500: OPTIONAL HARDENING
+  6000: DON'T TOUCH
+  7000: DON'T BOTHER
+  8000: DON'T BOTHER: FINGERPRINTING
+  9000: NON-PROJECT RELATED
+  9999: DEPRECATED / RENAMED
+
+******/
+
+/* START: internal custom pref to test for syntax errors
+ * [NOTE] Not all syntax errors cause parsing to abort i.e. reaching the last debug pref
+ * no longer necessarily means that all prefs have been applied. Check the console right
+ * after startup for any warnings/error messages related to non-applied prefs
+ * [1] https://blog.mozilla.org/nnethercote/2018/03/09/a-new-preferences-parser-for-firefox/ ***/
+user_pref("_user.js.parrot", "START: Oh yes, the Norwegian Blue... what's wrong with it?");
+
+/* 0000: disable about:config warning ***/
+user_pref("browser.aboutConfig.showWarning", false);
+
+/*** [SECTION 0100]: STARTUP ***/
+user_pref("_user.js.parrot", "0100 syntax error: the parrot's dead!");
+/* 0102: set startup page [SETUP-CHROME]
+ * 0=blank, 1=home, 2=last visited page, 3=resume previous session
+ * [NOTE] Session Restore is cleared with history (2811), and not used in Private Browsing mode
+ * [SETTING] General>Startup>Restore previous session ***/
+user_pref("browser.startup.page", 0);
+/* 0103: set HOME+NEWWINDOW page
+ * about:home=Firefox Home (default, see 0105), custom URL, about:blank
+ * [SETTING] Home>New Windows and Tabs>Homepage and new windows ***/
+user_pref("browser.startup.homepage", "about:blank");
+/* 0104: set NEWTAB page
+ * true=Firefox Home (default, see 0105), false=blank page
+ * [SETTING] Home>New Windows and Tabs>New tabs ***/
+user_pref("browser.newtabpage.enabled", false);
+/* 0105: disable sponsored content on Firefox Home (Activity Stream)
+ * [SETTING] Home>Firefox Home Content ***/
+user_pref("browser.newtabpage.activity-stream.showSponsored", false); // [FF58+]
+user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false); // [FF83+] Shortcuts>Sponsored shortcuts
+/* 0106: clear default topsites
+ * [NOTE] This does not block you from adding your own ***/
+user_pref("browser.newtabpage.activity-stream.default.sites", "");
+
+/*** [SECTION 0200]: GEOLOCATION ***/
+user_pref("_user.js.parrot", "0200 syntax error: the parrot's definitely deceased!");
+/* 0202: disable using the OS's geolocation service ***/
+user_pref("geo.provider.ms-windows-location", false); // [WINDOWS]
+user_pref("geo.provider.use_corelocation", false); // [MAC]
+user_pref("geo.provider.use_geoclue", false); // [FF102+] [LINUX]
+
+/*** [SECTION 0300]: QUIETER FOX ***/
+user_pref("_user.js.parrot", "0300 syntax error: the parrot's not pinin' for the fjords!");
+/** RECOMMENDATIONS ***/
+/* 0320: disable recommendation pane in about:addons (uses Google Analytics) ***/
+user_pref("extensions.getAddons.showPane", false); // [HIDDEN PREF]
+/* 0321: disable recommendations in about:addons' Extensions and Themes panes [FF68+] ***/
+user_pref("extensions.htmlaboutaddons.recommendations.enabled", false);
+/* 0322: disable personalized Extension Recommendations in about:addons and AMO [FF65+]
+ * [NOTE] This pref has no effect when Health Reports (0331) are disabled
+ * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to make personalized extension recommendations
+ * [1] https://support.mozilla.org/kb/personalized-extension-recommendations ***/
+user_pref("browser.discovery.enabled", false);
+/* 0323: disable shopping experience [FF116+]
+ * [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1840156#c0 ***/
+user_pref("browser.shopping.experience2023.enabled", false); // [DEFAULT: false]
+
+/** TELEMETRY ***/
+/* 0330: disable new data submission [FF41+]
+ * If disabled, no policy is shown or upload takes place, ever
+ * [1] https://bugzilla.mozilla.org/1195552 ***/
+user_pref("datareporting.policy.dataSubmissionEnabled", false);
+/* 0331: disable Health Reports
+ * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to send technical... data ***/
+user_pref("datareporting.healthreport.uploadEnabled", false);
+/* 0332: disable telemetry
+ * The "unified" pref affects the behavior of the "enabled" pref
+ * - If "unified" is false then "enabled" controls the telemetry module
+ * - If "unified" is true then "enabled" only controls whether to record extended data
+ * [NOTE] "toolkit.telemetry.enabled" is now LOCKED to reflect prerelease (true) or release builds (false) [2]
+ * [1] https://firefox-source-docs.mozilla.org/toolkit/components/telemetry/telemetry/internals/preferences.html
+ * [2] https://medium.com/georg-fritzsche/data-preference-changes-in-firefox-58-2d5df9c428b5 ***/
+user_pref("toolkit.telemetry.unified", false);
+user_pref("toolkit.telemetry.enabled", false); // see [NOTE]
+user_pref("toolkit.telemetry.server", "data:,");
+user_pref("toolkit.telemetry.archive.enabled", false);
+user_pref("toolkit.telemetry.newProfilePing.enabled", false); // [FF55+]
+user_pref("toolkit.telemetry.shutdownPingSender.enabled", false); // [FF55+]
+user_pref("toolkit.telemetry.updatePing.enabled", false); // [FF56+]
+user_pref("toolkit.telemetry.bhrPing.enabled", false); // [FF57+] Background Hang Reporter
+user_pref("toolkit.telemetry.firstShutdownPing.enabled", false); // [FF57+]
+/* 0333: disable Telemetry Coverage
+ * [1] https://blog.mozilla.org/data/2018/08/20/effectively-measuring-search-in-firefox/ ***/
+user_pref("toolkit.telemetry.coverage.opt-out", true); // [HIDDEN PREF]
+user_pref("toolkit.coverage.opt-out", true); // [FF64+] [HIDDEN PREF]
+user_pref("toolkit.coverage.endpoint.base", "");
+/* 0335: disable Firefox Home (Activity Stream) telemetry ***/
+user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
+user_pref("browser.newtabpage.activity-stream.telemetry", false);
+
+/** STUDIES ***/
+/* 0340: disable Studies
+ * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to install and run studies ***/
+user_pref("app.shield.optoutstudies.enabled", false);
+/* 0341: disable Normandy/Shield [FF60+]
+ * Shield is a telemetry system that can push and test "recipes"
+ * [1] https://mozilla.github.io/normandy/ ***/
+user_pref("app.normandy.enabled", false);
+user_pref("app.normandy.api_url", "");
+
+/** CRASH REPORTS ***/
+/* 0350: disable Crash Reports ***/
+user_pref("breakpad.reportURL", "");
+user_pref("browser.tabs.crashReporting.sendReport", false); // [FF44+]
+   // user_pref("browser.crashReports.unsubmittedCheck.enabled", false); // [FF51+] [DEFAULT: false]
+/* 0351: enforce no submission of backlogged Crash Reports [FF58+]
+ * [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to send backlogged crash reports  ***/
+user_pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false); // [DEFAULT: false]
+
+/** OTHER ***/
+/* 0360: disable Captive Portal detection
+ * [1] https://www.eff.org/deeplinks/2017/08/how-captive-portals-interfere-wireless-security-and-privacy ***/
+user_pref("captivedetect.canonicalURL", "");
+user_pref("network.captive-portal-service.enabled", false); // [FF52+]
+/* 0361: disable Network Connectivity checks [FF65+]
+ * [1] https://bugzilla.mozilla.org/1460537 ***/
+user_pref("network.connectivity-service.enabled", false);
+
+/*** [SECTION 0400]: SAFE BROWSING (SB)
+   SB has taken many steps to preserve privacy. If required, a full url is never sent
+   to Google, only a part-hash of the prefix, hidden with noise of other real part-hashes.
+   Firefox takes measures such as stripping out identifying parameters and since SBv4 (FF57+)
+   doesn't even use cookies. (#Turn on browser.safebrowsing.debug to monitor this activity)
+
+   [1] https://feeding.cloud.geek.nz/posts/how-safe-browsing-works-in-firefox/
+   [2] https://wiki.mozilla.org/Security/Safe_Browsing
+   [3] https://support.mozilla.org/kb/how-does-phishing-and-malware-protection-work
+   [4] https://educatedguesswork.org/posts/safe-browsing-privacy/
+***/
+user_pref("_user.js.parrot", "0400 syntax error: the parrot's passed on!");
+/* 0401: disable SB (Safe Browsing)
+ * [WARNING] Do this at your own risk! These are the master switches
+ * [SETTING] Privacy & Security>Security>... Block dangerous and deceptive content ***/
+   // user_pref("browser.safebrowsing.malware.enabled", false);
+   // user_pref("browser.safebrowsing.phishing.enabled", false);
+/* 0402: disable SB checks for downloads (both local lookups + remote)
+ * This is the master switch for the safebrowsing.downloads* prefs (0403, 0404)
+ * [SETTING] Privacy & Security>Security>... "Block dangerous downloads" ***/
+   // user_pref("browser.safebrowsing.downloads.enabled", false);
+/* 0403: disable SB checks for downloads (remote)
+ * To verify the safety of certain executable files, Firefox may submit some information about the
+ * file, including the name, origin, size and a cryptographic hash of the contents, to the Google
+ * Safe Browsing service which helps Firefox determine whether or not the file should be blocked
+ * [SETUP-SECURITY] If you do not understand this, or you want this protection, then override this ***/
+user_pref("browser.safebrowsing.downloads.remote.enabled", false);
+   // user_pref("browser.safebrowsing.downloads.remote.url", ""); // Defense-in-depth
+/* 0404: disable SB checks for unwanted software
+ * [SETTING] Privacy & Security>Security>... "Warn you about unwanted and uncommon software" ***/
+   // user_pref("browser.safebrowsing.downloads.remote.block_potentially_unwanted", false);
+   // user_pref("browser.safebrowsing.downloads.remote.block_uncommon", false);
+/* 0405: disable "ignore this warning" on SB warnings [FF45+]
+ * If clicked, it bypasses the block for that session. This is a means for admins to enforce SB
+ * [TEST] see https://github.com/arkenfox/user.js/wiki/Appendix-A-Test-Sites#-mozilla
+ * [1] https://bugzilla.mozilla.org/1226490 ***/
+   // user_pref("browser.safebrowsing.allowOverride", false);
+
+/*** [SECTION 0600]: BLOCK IMPLICIT OUTBOUND [not explicitly asked for - e.g. clicked on] ***/
+user_pref("_user.js.parrot", "0600 syntax error: the parrot's no more!");
+/* 0601: disable link prefetching
+ * [1] https://developer.mozilla.org/docs/Web/HTTP/Link_prefetching_FAQ ***/
+user_pref("network.prefetch-next", false);
+/* 0602: disable DNS prefetching
+ * [1] https://developer.mozilla.org/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control ***/
+user_pref("network.dns.disablePrefetch", true);
+user_pref("network.dns.disablePrefetchFromHTTPS", true);
+/* 0603: disable predictor / prefetching ***/
+user_pref("network.predictor.enabled", false);
+user_pref("network.predictor.enable-prefetch", false); // [FF48+] [DEFAULT: false]
+/* 0604: disable link-mouseover opening connection to linked server
+ * [1] https://news.slashdot.org/story/15/08/14/2321202/how-to-quash-firefoxs-silent-requests ***/
+user_pref("network.http.speculative-parallel-limit", 0);
+/* 0605: disable mousedown speculative connections on bookmarks and history [FF98+] ***/
+user_pref("browser.places.speculativeConnect.enabled", false);
+/* 0610: enforce no "Hyperlink Auditing" (click tracking)
+ * [1] https://www.bleepingcomputer.com/news/software/major-browsers-to-prevent-disabling-of-click-tracking-privacy-risk/ ***/
+   // user_pref("browser.send_pings", false); // [DEFAULT: false]
+
+/*** [SECTION 0700]: DNS / DoH / PROXY / SOCKS ***/
+user_pref("_user.js.parrot", "0700 syntax error: the parrot's given up the ghost!");
+/* 0702: set the proxy server to do any DNS lookups when using SOCKS
+ * e.g. in Tor, this stops your local DNS server from knowing your Tor destination
+ * as a remote Tor node will handle the DNS request
+ * [1] https://trac.torproject.org/projects/tor/wiki/doc/TorifyHOWTO/WebBrowsers ***/
+user_pref("network.proxy.socks_remote_dns", true);
+/* 0703: disable using UNC (Uniform Naming Convention) paths [FF61+]
+ * [SETUP-CHROME] Can break extensions for profiles on network shares
+ * [1] https://bugzilla.mozilla.org/1413868 ***/
+user_pref("network.file.disable_unc_paths", true); // [HIDDEN PREF]
+/* 0704: disable GIO as a potential proxy bypass vector
+ * Gvfs/GIO has a set of supported protocols like obex, network, archive, computer,
+ * dav, cdda, gphoto2, trash, etc. From FF87-117, by default only sftp was accepted
+ * [1] https://bugzilla.mozilla.org/1433507
+ * [2] https://en.wikipedia.org/wiki/GVfs
+ * [3] https://en.wikipedia.org/wiki/GIO_(software) ***/
+user_pref("network.gio.supported-protocols", ""); // [HIDDEN PREF] [DEFAULT: "" FF118+]
+/* 0705: disable proxy direct failover for system requests [FF91+]
+ * [WARNING] Default true is a security feature against malicious extensions [1]
+ * [SETUP-CHROME] If you use a proxy and you trust your extensions
+ * [1] https://blog.mozilla.org/security/2021/10/25/securing-the-proxy-api-for-firefox-add-ons/ ***/
+   // user_pref("network.proxy.failover_direct", false);
+/* 0706: disable proxy bypass for system request failures [FF95+]
+ * RemoteSettings, UpdateService, Telemetry [1]
+ * [WARNING] If false, this will break the fallback for some security features
+ * [SETUP-CHROME] If you use a proxy and you understand the security impact
+ * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1732792,1733994,1733481 ***/
+   // user_pref("network.proxy.allow_bypass", false);
+/* 0710: enable DNS-over-HTTPS (DoH) [FF60+]
+ * 0=default, 2=increased (TRR (Trusted Recursive Resolver) first), 3=max (TRR only), 5=off (no rollout)
+ * see "doh-rollout.home-region": USA 2019, Canada 2021, Russia/Ukraine 2022 [3]
+ * [SETTING] Privacy & Security>DNS over HTTPS
+ * [1] https://hacks.mozilla.org/2018/05/a-cartoon-intro-to-dns-over-https/
+ * [2] https://wiki.mozilla.org/Security/DOH-resolver-policy
+ * [3] https://support.mozilla.org/kb/firefox-dns-over-https
+ * [4] https://www.eff.org/deeplinks/2020/12/dns-doh-and-odoh-oh-my-year-review-2020 ***/
+   // user_pref("network.trr.mode", 3);
+/* 0712: set DoH provider
+ * The custom uri is the value shown when you "Choose provider>Custom>"
+ * [NOTE] If you USE custom then "network.trr.uri" should be set the same
+ * [SETTING] Privacy & Security>DNS over HTTPS>Increased/Max>Choose provider ***/
+   // user_pref("network.trr.uri", "https://example.dns");
+   // user_pref("network.trr.custom_uri", "https://example.dns");
+
+/*** [SECTION 0800]: LOCATION BAR / SEARCH BAR / SUGGESTIONS / HISTORY / FORMS ***/
+user_pref("_user.js.parrot", "0800 syntax error: the parrot's ceased to be!");
+/* 0801: disable location bar making speculative connections [FF56+]
+ * [1] https://bugzilla.mozilla.org/1348275 ***/
+user_pref("browser.urlbar.speculativeConnect.enabled", false);
+/* 0802: disable location bar contextual suggestions
+ * [NOTE] The UI is controlled by the .enabled pref
+ * [SETTING] Search>Address Bar>Suggestions from...
+ * [1] https://blog.mozilla.org/data/2021/09/15/data-and-firefox-suggest/ ***/
+user_pref("browser.urlbar.quicksuggest.enabled", false); // [FF92+]
+user_pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false); // [FF95+]
+user_pref("browser.urlbar.suggest.quicksuggest.sponsored", false); // [FF92+]
+/* 0803: disable live search suggestions
+ * [NOTE] Both must be true for live search to work in the location bar
+ * [SETUP-CHROME] Override these if you trust and use a privacy respecting search engine
+ * [SETTING] Search>Show search suggestions | Show search suggestions in address bar results ***/
+user_pref("browser.search.suggest.enabled", false);
+user_pref("browser.urlbar.suggest.searches", false);
+/* 0805: disable urlbar trending search suggestions [FF118+]
+ * [SETTING] Search>Search Suggestions>Show trending search suggestions (FF119) ***/
+user_pref("browser.urlbar.trending.featureGate", false);
+/* 0806: disable urlbar suggestions ***/
+user_pref("browser.urlbar.addons.featureGate", false); // [FF115+]
+user_pref("browser.urlbar.fakespot.featureGate", false); // [FF130+] [DEFAULT: false]
+user_pref("browser.urlbar.mdn.featureGate", false); // [FF117+] [HIDDEN PREF]
+user_pref("browser.urlbar.pocket.featureGate", false); // [FF116+] [DEFAULT: false]
+user_pref("browser.urlbar.weather.featureGate", false); // [FF108+] [DEFAULT: false]
+user_pref("browser.urlbar.yelp.featureGate", false); // [FF124+]
+/* 0807: disable urlbar clipboard suggestions [FF118+] ***/
+   // user_pref("browser.urlbar.clipboard.featureGate", false);
+/* 0808: disable recent searches [FF120+]
+ * [NOTE] Recent searches are cleared with history (2811)
+ * [1] https://support.mozilla.org/kb/search-suggestions-firefox ***/
+   // user_pref("browser.urlbar.recentsearches.featureGate", false);
+/* 0810: disable search and form history
+ * [NOTE] We also clear formdata on exit (2811)
+ * [SETUP-WEB] Be aware that autocomplete form data can be read by third parties [1][2]
+ * [SETTING] Privacy & Security>History>Custom Settings>Remember search and form history
+ * [1] https://blog.mindedsecurity.com/2011/10/autocompleteagain.html
+ * [2] https://bugzilla.mozilla.org/381681 ***/
+user_pref("browser.formfill.enable", false);
+/* 0815: disable tab-to-search [FF85+]
+ * Alternatively, you can exclude on a per-engine basis by unchecking them in Options>Search
+ * [SETTING] Search>Address Bar>When using the address bar, suggest>Search engines ***/
+   // user_pref("browser.urlbar.suggest.engines", false);
+/* 0820: disable coloring of visited links
+ * [SETUP-HARDEN] Bulk rapid history sniffing was mitigated in 2010 [1][2]. Slower and more expensive
+ * redraw timing attacks were largely mitigated in FF77+ [3]. Using RFP (4501) further hampers timing
+ * attacks. Don't forget clearing history on exit (2811). However, social engineering [2#limits][4][5]
+ * and advanced targeted timing attacks could still produce usable results
+ * [1] https://developer.mozilla.org/docs/Web/CSS/Privacy_and_the_:visited_selector
+ * [2] https://dbaron.org/mozilla/visited-privacy
+ * [3] https://bugzilla.mozilla.org/1632765
+ * [4] https://earthlng.github.io/testpages/visited_links.html (see github wiki APPENDIX A on how to use)
+ * [5] https://lcamtuf.blogspot.com/2016/08/css-mix-blend-mode-is-bad-for-keeping.html ***/
+   // user_pref("layout.css.visited_links_enabled", false);
+/* 0830: enable separate default search engine in Private Windows and its UI setting
+ * [SETTING] Search>Default Search Engine>Choose a different default search engine for Private Windows only ***/
+user_pref("browser.search.separatePrivateDefault", true); // [FF70+]
+user_pref("browser.search.separatePrivateDefault.ui.enabled", true); // [FF71+]
+
+/*** [SECTION 0900]: PASSWORDS
+   [1] https://support.mozilla.org/kb/use-primary-password-protect-stored-logins-and-pas
+***/
+user_pref("_user.js.parrot", "0900 syntax error: the parrot's expired!");
+/* 0903: disable auto-filling username & password form fields
+ * can leak in cross-site forms *and* be spoofed
+ * [NOTE] Username & password is still available when you enter the field
+ * [SETTING] Privacy & Security>Logins and Passwords>Autofill logins and passwords
+ * [1] https://freedom-to-tinker.com/2017/12/27/no-boundaries-for-user-identities-web-trackers-exploit-browser-login-managers/
+ * [2] https://homes.esat.kuleuven.be/~asenol/leaky-forms/ ***/
+user_pref("signon.autofillForms", false);
+/* 0904: disable formless login capture for Password Manager [FF51+] ***/
+user_pref("signon.formlessCapture.enabled", false);
+/* 0905: limit (or disable) HTTP authentication credentials dialogs triggered by sub-resources [FF41+]
+ * hardens against potential credentials phishing
+ * 0 = don't allow sub-resources to open HTTP authentication credentials dialogs
+ * 1 = don't allow cross-origin sub-resources to open HTTP authentication credentials dialogs
+ * 2 = allow sub-resources to open HTTP authentication credentials dialogs (default) ***/
+user_pref("network.auth.subresource-http-auth-allow", 1);
+/* 0906: enforce no automatic authentication on Microsoft sites [FF91+] [WINDOWS 10+]
+ * [SETTING] Privacy & Security>Logins and Passwords>Allow Windows single sign-on for...
+ * [1] https://support.mozilla.org/kb/windows-sso ***/
+   // user_pref("network.http.windows-sso.enabled", false); // [DEFAULT: false]
+/* 0907: enforce no automatic authentication on Microsoft sites [FF131+] [MAC]
+ * On macOS, SSO only works on corporate devices ***/
+   // user_pref("network.http.microsoft-entra-sso.enabled", false); // [DEFAULT: false]
+
+/*** [SECTION 1000]: DISK AVOIDANCE ***/
+user_pref("_user.js.parrot", "1000 syntax error: the parrot's gone to meet 'is maker!");
+/* 1001: disable disk cache
+ * [NOTE] We also clear cache on exit (2811)
+ * [SETUP-CHROME] If you think disk cache helps perf, then feel free to override this ***/
+user_pref("browser.cache.disk.enable", false);
+/* 1002: set media cache in Private Browsing to in-memory and increase its maximum size
+ * [NOTE] MSE (Media Source Extensions) are already stored in-memory in PB ***/
+user_pref("browser.privatebrowsing.forceMediaMemoryCache", true); // [FF75+]
+user_pref("media.memory_cache_max_size", 65536);
+/* 1003: disable storing extra session data [SETUP-CHROME]
+ * define on which sites to save extra session data such as form content, cookies and POST data
+ * 0=everywhere, 1=unencrypted sites, 2=nowhere ***/
+user_pref("browser.sessionstore.privacy_level", 2);
+/* 1005: disable automatic Firefox start and session restore after reboot [FF62+] [WINDOWS]
+ * [1] https://bugzilla.mozilla.org/603903 ***/
+user_pref("toolkit.winRegisterApplicationRestart", false);
+/* 1006: disable favicons in shortcuts [WINDOWS]
+ * URL shortcuts use a cached randomly named .ico file which is stored in your
+ * profile/shortcutCache directory. The .ico remains after the shortcut is deleted
+ * If set to false then the shortcuts use a generic Firefox icon ***/
+user_pref("browser.shell.shortcutFavicons", false);
+
+/*** [SECTION 1200]: HTTPS (SSL/TLS / OCSP / CERTS / HPKP)
+   Your cipher and other settings can be used in server side fingerprinting
+   [TEST] https://www.ssllabs.com/ssltest/viewMyClient.html
+   [TEST] https://browserleaks.com/ssl
+   [TEST] https://ja3er.com/
+   [1] https://www.securityartwork.es/2017/02/02/tls-client-fingerprinting-with-bro/
+***/
+user_pref("_user.js.parrot", "1200 syntax error: the parrot's a stiff!");
+/** SSL (Secure Sockets Layer) / TLS (Transport Layer Security) ***/
+/* 1201: require safe negotiation
+ * Blocks connections to servers that don't support RFC 5746 [2] as they're potentially vulnerable to a
+ * MiTM attack [3]. A server without RFC 5746 can be safe from the attack if it disables renegotiations
+ * but the problem is that the browser can't know that. Setting this pref to true is the only way for the
+ * browser to ensure there will be no unsafe renegotiations on the channel between the browser and the server
+ * [SETUP-WEB] SSL_ERROR_UNSAFE_NEGOTIATION: is it worth overriding this for that one site?
+ * [STATS] SSL Labs (May 2024) reports over 99.7% of top sites have secure renegotiation [4]
+ * [1] https://wiki.mozilla.org/Security:Renegotiation
+ * [2] https://datatracker.ietf.org/doc/html/rfc5746
+ * [3] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555
+ * [4] https://www.ssllabs.com/ssl-pulse/ ***/
+user_pref("security.ssl.require_safe_negotiation", true);
+/* 1206: disable TLS1.3 0-RTT (round-trip time) [FF51+]
+ * This data is not forward secret, as it is encrypted solely under keys derived using
+ * the offered PSK. There are no guarantees of non-replay between connections
+ * [1] https://github.com/tlswg/tls13-spec/issues/1001
+ * [2] https://www.rfc-editor.org/rfc/rfc9001.html#name-replay-attacks-with-0-rtt
+ * [3] https://blog.cloudflare.com/tls-1-3-overview-and-q-and-a/ ***/
+user_pref("security.tls.enable_0rtt_data", false);
+
+/** OCSP (Online Certificate Status Protocol)
+   [1] https://scotthelme.co.uk/revocation-is-broken/
+   [2] https://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
+***/
+/* 1211: enforce OCSP fetching to confirm current validity of certificates
+ * 0=disabled, 1=enabled (default), 2=enabled for EV certificates only
+ * OCSP (non-stapled) leaks information about the sites you visit to the CA (cert authority)
+ * It's a trade-off between security (checking) and privacy (leaking info to the CA)
+ * [NOTE] This pref only controls OCSP fetching and does not affect OCSP stapling
+ * [SETTING] Privacy & Security>Security>Certificates>Query OCSP responder servers...
+ * [1] https://en.wikipedia.org/wiki/Ocsp ***/
+user_pref("security.OCSP.enabled", 1); // [DEFAULT: 1]
+/* 1212: set OCSP fetch failures (non-stapled, see 1211) to hard-fail
+ * [SETUP-WEB] SEC_ERROR_OCSP_SERVER_ERROR
+ * When a CA cannot be reached to validate a cert, Firefox just continues the connection (=soft-fail)
+ * Setting this pref to true tells Firefox to instead terminate the connection (=hard-fail)
+ * It is pointless to soft-fail when an OCSP fetch fails: you cannot confirm a cert is still valid (it
+ * could have been revoked) and/or you could be under attack (e.g. malicious blocking of OCSP servers)
+ * [1] https://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox/
+ * [2] https://www.imperialviolet.org/2014/04/19/revchecking.html ***/
+user_pref("security.OCSP.require", true);
+
+/** CERTS / HPKP (HTTP Public Key Pinning) ***/
+/* 1223: enable strict PKP (Public Key Pinning)
+ * 0=disabled, 1=allow user MiTM (default; such as your antivirus), 2=strict
+ * [SETUP-WEB] MOZILLA_PKIX_ERROR_KEY_PINNING_FAILURE ***/
+user_pref("security.cert_pinning.enforcement_level", 2);
+/* 1224: enable CRLite [FF73+]
+ * 0 = disabled
+ * 1 = consult CRLite but only collect telemetry
+ * 2 = consult CRLite and enforce both "Revoked" and "Not Revoked" results
+ * 3 = consult CRLite and enforce "Not Revoked" results, but defer to OCSP for "Revoked" (default)
+ * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1429800,1670985,1753071
+ * [2] https://blog.mozilla.org/security/tag/crlite/ ***/
+user_pref("security.remote_settings.crlite_filters.enabled", true);
+user_pref("security.pki.crlite_mode", 2);
+
+/** MIXED CONTENT ***/
+/* 1241: disable insecure passive content (such as images) on https pages ***/
+   // user_pref("security.mixed_content.block_display_content", true); // Defense-in-depth (see 1244)
+/* 1244: enable HTTPS-Only mode in all windows
+ * When the top-level is HTTPS, insecure subresources are also upgraded (silent fail)
+ * [SETTING] to add site exceptions: Padlock>HTTPS-Only mode>On (after "Continue to HTTP Site")
+ * [SETTING] Privacy & Security>HTTPS-Only Mode (and manage exceptions)
+ * [TEST] http://example.com [upgrade]
+ * [TEST] http://httpforever.com/ | http://http.rip [no upgrade] ***/
+user_pref("dom.security.https_only_mode", true); // [FF76+]
+   // user_pref("dom.security.https_only_mode_pbm", true); // [FF80+]
+/* 1245: enable HTTPS-Only mode for local resources [FF77+] ***/
+   // user_pref("dom.security.https_only_mode.upgrade_local", true);
+/* 1246: disable HTTP background requests [FF82+]
+ * When attempting to upgrade, if the server doesn't respond within 3 seconds, Firefox sends
+ * a top-level HTTP request without path in order to check if the server supports HTTPS or not
+ * This is done to avoid waiting for a timeout which takes 90 seconds
+ * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1642387,1660945 ***/
+user_pref("dom.security.https_only_mode_send_http_background_request", false);
+
+/** UI (User Interface) ***/
+/* 1270: display warning on the padlock for "broken security" (if 1201 is false)
+ * Bug: warning padlock not indicated for subresources on a secure page! [2]
+ * [1] https://wiki.mozilla.org/Security:Renegotiation
+ * [2] https://bugzilla.mozilla.org/1353705 ***/
+user_pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
+/* 1272: display advanced information on Insecure Connection warning pages
+ * only works when it's possible to add an exception
+ * i.e. it doesn't work for HSTS discrepancies (https://subdomain.preloaded-hsts.badssl.com/)
+ * [TEST] https://expired.badssl.com/ ***/
+user_pref("browser.xul.error_pages.expert_bad_cert", true);
+
+/*** [SECTION 1600]: REFERERS
+                  full URI: https://example.com:8888/foo/bar.html?id=1234
+     scheme+host+port+path: https://example.com:8888/foo/bar.html
+          scheme+host+port: https://example.com:8888
+   [1] https://feeding.cloud.geek.nz/posts/tweaking-referrer-for-privacy-in-firefox/
+***/
+user_pref("_user.js.parrot", "1600 syntax error: the parrot rests in peace!");
+/* 1602: control the amount of cross-origin information to send [FF52+]
+ * 0=send full URI (default), 1=scheme+host+port+path, 2=scheme+host+port ***/
+user_pref("network.http.referer.XOriginTrimmingPolicy", 2);
+
+/*** [SECTION 1700]: CONTAINERS ***/
+user_pref("_user.js.parrot", "1700 syntax error: the parrot's bit the dust!");
+/* 1701: enable Container Tabs and its UI setting [FF50+]
+ * [SETTING] General>Tabs>Enable Container Tabs
+ * https://wiki.mozilla.org/Security/Contextual_Identity_Project/Containers ***/
+user_pref("privacy.userContext.enabled", true);
+user_pref("privacy.userContext.ui.enabled", true);
+/* 1702: set behavior on "+ Tab" button to display container menu on left click [FF74+]
+ * [NOTE] The menu is always shown on long press and right click
+ * [SETTING] General>Tabs>Enable Container Tabs>Settings>Select a container for each new tab ***/
+   // user_pref("privacy.userContext.newTabContainerOnLeftClick.enabled", true);
+/* 1703: set external links to open in site-specific containers [FF123+]
+ * [SETUP-WEB] Depending on your container extension(s) and their settings
+ * true=Firefox will not choose a container (so your extension can)
+ * false=Firefox will choose the container/no-container (default)
+ * [1] https://bugzilla.mozilla.org/1874599 ***/
+   // user_pref("browser.link.force_default_user_context_id_for_external_opens", true);
+
+/*** [SECTION 2000]: PLUGINS / MEDIA / WEBRTC ***/
+user_pref("_user.js.parrot", "2000 syntax error: the parrot's snuffed it!");
+/* 2002: force WebRTC inside the proxy [FF70+] ***/
+user_pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true);
+/* 2003: force a single network interface for ICE candidates generation [FF42+]
+ * When using a system-wide proxy, it uses the proxy interface
+ * [1] https://developer.mozilla.org/docs/Web/API/RTCIceCandidate
+ * [2] https://wiki.mozilla.org/Media/WebRTC/Privacy ***/
+user_pref("media.peerconnection.ice.default_address_only", true);
+/* 2004: force exclusion of private IPs from ICE candidates [FF51+]
+ * [SETUP-HARDEN] This will protect your private IP even in TRUSTED scenarios after you
+ * grant device access, but often results in breakage on video-conferencing platforms ***/
+   // user_pref("media.peerconnection.ice.no_host", true);
+/* 2020: disable GMP (Gecko Media Plugins)
+ * [1] https://wiki.mozilla.org/GeckoMediaPlugins ***/
+   // user_pref("media.gmp-provider.enabled", false);
+
+/*** [SECTION 2400]: DOM (DOCUMENT OBJECT MODEL) ***/
+user_pref("_user.js.parrot", "2400 syntax error: the parrot's kicked the bucket!");
+/* 2402: prevent scripts from moving and resizing open windows ***/
+user_pref("dom.disable_window_move_resize", true);
+
+/*** [SECTION 2600]: MISCELLANEOUS ***/
+user_pref("_user.js.parrot", "2600 syntax error: the parrot's run down the curtain!");
+/* 2603: remove temp files opened from non-PB windows with an external application
+ * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=302433,1738574 ***/
+user_pref("browser.download.start_downloads_in_tmp_dir", true); // [FF102+]
+user_pref("browser.helperApps.deleteTempFileOnExit", true);
+/* 2606: disable UITour backend so there is no chance that a remote page can use it ***/
+user_pref("browser.uitour.enabled", false);
+   // user_pref("browser.uitour.url", ""); // Defense-in-depth
+/* 2608: reset remote debugging to disabled
+ * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/16222 ***/
+user_pref("devtools.debugger.remote-enabled", false); // [DEFAULT: false]
+/* 2615: disable websites overriding Firefox's keyboard shortcuts [FF58+]
+ * 0 (default) or 1=allow, 2=block
+ * [SETTING] to add site exceptions: Ctrl+I>Permissions>Override Keyboard Shortcuts ***/
+   // user_pref("permissions.default.shortcuts", 2);
+/* 2616: remove special permissions for certain mozilla domains [FF35+]
+ * [1] resource://app/defaults/permissions ***/
+user_pref("permissions.manager.defaultsUrl", "");
+/* 2619: use Punycode in Internationalized Domain Names to eliminate possible spoofing
+ * [SETUP-WEB] Might be undesirable for non-latin alphabet users since legitimate IDN's are also punycoded
+ * [TEST] https://www.xn--80ak6aa92e.com/ (www.apple.com)
+ * [1] https://wiki.mozilla.org/IDN_Display_Algorithm
+ * [2] https://en.wikipedia.org/wiki/IDN_homograph_attack
+ * [3] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=punycode+firefox
+ * [4] https://www.xudongz.com/blog/2017/idn-phishing/ ***/
+user_pref("network.IDN_show_punycode", true);
+/* 2620: enforce PDFJS, disable PDFJS scripting
+ * This setting controls if the option "Display in Firefox" is available in the setting below
+ *   and by effect controls whether PDFs are handled in-browser or externally ("Ask" or "Open With")
+ * [WHY] pdfjs is lightweight, open source, and secure: the last exploit was June 2015 [1]
+ *   It doesn't break "state separation" of browser content (by not sharing with OS, independent apps).
+ *   It maintains disk avoidance and application data isolation. It's convenient. You can still save to disk.
+ * [NOTE] JS can still force a pdf to open in-browser by bundling its own code
+ * [SETUP-CHROME] You may prefer a different pdf reader for security/workflow reasons
+ * [SETTING] General>Applications>Portable Document Format (PDF)
+ * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=pdf.js+firefox ***/
+user_pref("pdfjs.disabled", false); // [DEFAULT: false]
+user_pref("pdfjs.enableScripting", false); // [FF86+]
+/* 2624: disable middle click on new tab button opening URLs or searches using clipboard [FF115+] */
+user_pref("browser.tabs.searchclipboardfor.middleclick", false); // [DEFAULT: false NON-LINUX]
+/* 2630: disable content analysis by DLP (Data Loss Prevention) agents
+ * DLP agents are background processes on managed computers that allow enterprises to monitor locally running
+ * applications for data exfiltration events, which they can allow/block based on customer defined DLP policies.
+ * 0=Block all requests, 1=Warn on all requests (which lets the user decide), 2=Allow all requests
+ * [1] https://github.com/chromium/content_analysis_sdk */
+user_pref("browser.contentanalysis.enabled", false); // [FF121+] [DEFAULT: false]
+user_pref("browser.contentanalysis.default_result", 0); // [FF127+] [DEFAULT: 0]
+
+/** DOWNLOADS ***/
+/* 2651: enable user interaction for security by always asking where to download
+ * [SETUP-CHROME] On Android this blocks longtapping and saving images
+ * [SETTING] General>Downloads>Always ask you where to save files ***/
+user_pref("browser.download.useDownloadDir", false);
+/* 2652: disable downloads panel opening on every download [FF96+] ***/
+user_pref("browser.download.alwaysOpenPanel", false);
+/* 2653: disable adding downloads to the system's "recent documents" list ***/
+user_pref("browser.download.manager.addToRecentDocs", false);
+/* 2654: enable user interaction for security by always asking how to handle new mimetypes [FF101+]
+ * [SETTING] General>Files and Applications>What should Firefox do with other files ***/
+user_pref("browser.download.always_ask_before_handling_new_types", true);
+
+/** EXTENSIONS ***/
+/* 2660: limit allowed extension directories
+ * 1=profile, 2=user, 4=application, 8=system, 16=temporary, 31=all
+ * The pref value represents the sum: e.g. 5 would be profile and application directories
+ * [SETUP-CHROME] Breaks usage of files which are installed outside allowed directories
+ * [1] https://archive.is/DYjAM ***/
+user_pref("extensions.enabledScopes", 5); // [HIDDEN PREF]
+   // user_pref("extensions.autoDisableScopes", 15); // [DEFAULT: 15]
+/* 2661: disable bypassing 3rd party extension install prompts [FF82+]
+ * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1659530,1681331 ***/
+user_pref("extensions.postDownloadThirdPartyPrompt", false);
+/* 2662: disable webextension restrictions on certain mozilla domains (you also need 4503) [FF60+]
+ * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1384330,1406795,1415644,1453988 ***/
+   // user_pref("extensions.webextensions.restrictedDomains", "");
+
+/*** [SECTION 2700]: ETP (ENHANCED TRACKING PROTECTION) ***/
+user_pref("_user.js.parrot", "2700 syntax error: the parrot's joined the bleedin' choir invisible!");
+/* 2701: enable ETP Strict Mode [FF86+]
+ * ETP Strict Mode enables Total Cookie Protection (TCP)
+ * [NOTE] Adding site exceptions disables all ETP protections for that site and increases the risk of
+ * cross-site state tracking e.g. exceptions for SiteA and SiteB means PartyC on both sites is shared
+ * [1] https://blog.mozilla.org/security/2021/02/23/total-cookie-protection/
+ * [SETTING] to add site exceptions: Urlbar>ETP Shield
+ * [SETTING] to manage site exceptions: Options>Privacy & Security>Enhanced Tracking Protection>Manage Exceptions ***/
+user_pref("browser.contentblocking.category", "strict"); // [HIDDEN PREF]
+/* 2702: disable ETP web compat features [FF93+]
+ * [SETUP-HARDEN] Includes skip lists, heuristics (SmartBlock) and automatic grants
+ * Opener and redirect heuristics are granted for 30 days, see [3]
+ * [1] https://blog.mozilla.org/security/2021/07/13/smartblock-v2/
+ * [2] https://hg.mozilla.org/mozilla-central/rev/e5483fd469ab#l4.12
+ * [3] https://developer.mozilla.org/docs/Web/Privacy/State_Partitioning#storage_access_heuristics ***/
+   // user_pref("privacy.antitracking.enableWebcompat", false);
+
+/*** [SECTION 2800]: SHUTDOWN & SANITIZING ***/
+user_pref("_user.js.parrot", "2800 syntax error: the parrot's bleedin' demised!");
+/* 2810: enable Firefox to clear items on shutdown
+ * [NOTE] In FF129+ clearing "siteSettings" on shutdown (2811), or manually via site data (2820) and
+ * via history (2830), will no longer remove sanitize on shutdown "cookie and site data" site exceptions (2815)
+ * [SETTING] Privacy & Security>History>Custom Settings>Clear history when Firefox closes | Settings ***/
+user_pref("privacy.sanitize.sanitizeOnShutdown", false);
+
+/** SANITIZE ON SHUTDOWN: IGNORES "ALLOW" SITE EXCEPTIONS | v2 migration is FF128+ ***/
+/* 2811: set/enforce what items to clear on shutdown (if 2810 is true) [SETUP-CHROME]
+ * [NOTE] If "history" is true, downloads will also be cleared ***/
+user_pref("privacy.clearOnShutdown.cache", true);     // [DEFAULT: true]
+user_pref("privacy.clearOnShutdown_v2.cache", true);  // [FF128+] [DEFAULT: true]
+user_pref("privacy.clearOnShutdown.downloads", true); // [DEFAULT: true]
+user_pref("privacy.clearOnShutdown.formdata", true);  // [DEFAULT: true]
+user_pref("privacy.clearOnShutdown.history", true);   // [DEFAULT: true]
+user_pref("privacy.clearOnShutdown_v2.historyFormDataAndDownloads", true); // [FF128+] [DEFAULT: true]
+   // user_pref("privacy.clearOnShutdown.siteSettings", false); // [DEFAULT: false]
+   // user_pref("privacy.clearOnShutdown_v2.siteSettings", false); // [FF128+] [DEFAULT: false]
+/* 2812: set Session Restore to clear on shutdown (if 2810 is true) [FF34+]
+ * [NOTE] Not needed if Session Restore is not used (0102) or it is already cleared with history (2811)
+ * [NOTE] If true, this prevents resuming from crashes (also see 5008) ***/
+   // user_pref("privacy.clearOnShutdown.openWindows", true);
+
+/** SANITIZE ON SHUTDOWN: RESPECTS "ALLOW" SITE EXCEPTIONS FF103+ | v2 migration is FF128+ ***/
+/* 2815: set "Cookies" and "Site Data" to clear on shutdown (if 2810 is true) [SETUP-CHROME]
+ * [NOTE] Exceptions: A "cookie" permission also controls "offlineApps" (see note below). For cross-domain logins,
+ * add exceptions for both sites e.g. https://www.youtube.com (site) + https://accounts.google.com (single sign on)
+ * [NOTE] "offlineApps": Offline Website Data: localStorage, service worker cache, QuotaManager (IndexedDB, asm-cache)
+ * [NOTE] "sessions": Active Logins (has no site exceptions): refers to HTTP Basic Authentication [1], not logins via cookies
+ * [WARNING] Be selective with what sites you "Allow", as they also disable partitioning (1767271)
+ * [SETTING] to add site exceptions: Ctrl+I>Permissions>Cookies>Allow (when on the website in question)
+ * [SETTING] to manage site exceptions: Options>Privacy & Security>Permissions>Settings
+ * [1] https://en.wikipedia.org/wiki/Basic_access_authentication ***/
+user_pref("privacy.clearOnShutdown.cookies", false); // Cookies
+user_pref("privacy.clearOnShutdown.offlineApps", true); // Site Data
+user_pref("privacy.clearOnShutdown.sessions", true);  // Active Logins [DEFAULT: true]
+user_pref("privacy.clearOnShutdown_v2.cookiesAndStorage", true); // Cookies, Site Data, Active Logins [FF128+]
+
+/** SANITIZE SITE DATA: IGNORES "ALLOW" SITE EXCEPTIONS ***/
+/* 2820: set manual "Clear Data" items [SETUP-CHROME] [FF128+]
+ * Firefox remembers your last choices. This will reset them when you start Firefox
+ * [SETTING] Privacy & Security>Browser Privacy>Cookies and Site Data>Clear Data ***/
+user_pref("privacy.clearSiteData.cache", true);
+user_pref("privacy.clearSiteData.cookiesAndStorage", false); // keep false until it respects "allow" site exceptions
+user_pref("privacy.clearSiteData.historyFormDataAndDownloads", true);
+   // user_pref("privacy.clearSiteData.siteSettings", false);
+
+/** SANITIZE HISTORY: IGNORES "ALLOW" SITE EXCEPTIONS | clearHistory migration is FF128+ ***/
+/* 2830: set manual "Clear History" items, also via Ctrl-Shift-Del [SETUP-CHROME]
+ * Firefox remembers your last choices. This will reset them when you start Firefox
+ * [NOTE] Regardless of what you set "downloads" to, as soon as the dialog
+ * for "Clear Recent History" is opened, it is synced to the same as "history"
+ * [SETTING] Privacy & Security>History>Custom Settings>Clear History ***/
+user_pref("privacy.cpd.cache", true);    // [DEFAULT: true]
+user_pref("privacy.clearHistory.cache", true);
+user_pref("privacy.cpd.formdata", true); // [DEFAULT: true]
+user_pref("privacy.cpd.history", true);  // [DEFAULT: true]
+   // user_pref("privacy.cpd.downloads", true); // not used, see note above
+user_pref("privacy.clearHistory.historyFormDataAndDownloads", true);
+user_pref("privacy.cpd.cookies", false);
+user_pref("privacy.cpd.sessions", true); // [DEFAULT: true]
+user_pref("privacy.cpd.offlineApps", false); // [DEFAULT: false]
+user_pref("privacy.clearHistory.cookiesAndStorage", false);
+   // user_pref("privacy.cpd.openWindows", false); // Session Restore
+   // user_pref("privacy.cpd.passwords", false);
+   // user_pref("privacy.cpd.siteSettings", false);
+   // user_pref("privacy.clearHistory.siteSettings", false);
+
+/** SANITIZE MANUAL: TIMERANGE ***/
+/* 2840: set "Time range to clear" for "Clear Data" (2820) and "Clear History" (2830)
+ * Firefox remembers your last choice. This will reset the value when you start Firefox
+ * 0=everything, 1=last hour, 2=last two hours, 3=last four hours, 4=today
+ * [NOTE] Values 5 (last 5 minutes) and 6 (last 24 hours) are not listed in the dropdown,
+ * which will display a blank value, and are not guaranteed to work ***/
+user_pref("privacy.sanitize.timeSpan", 0);
+
+/*** [SECTION 4000]: FPP (fingerprintingProtection)
+   RFP (4501) overrides FPP
+
+   In FF118+ FPP is on by default in private windows (4001) and in FF119+ is controlled
+   by ETP (2701). FPP will also use Remote Services in future to relax FPP protections
+   on a per site basis for compatibility (4004).
+
+   https://searchfox.org/mozilla-central/source/toolkit/components/resistfingerprinting/RFPTargetsDefault.inc
+
+   [NOTE] RFPTargets + granular overrides are somewhat experimental and may produce unexpected results
+   - e.g. FrameRate can only be controlled per process, not per origin
+
+   1826408 - restrict fonts to system (kBaseFonts + kLangPackFonts) (Windows, Mac, some Linux)
+      https://searchfox.org/mozilla-central/search?path=StandardFonts*.inc
+   1858181 - subtly randomize canvas per eTLD+1, per session and per window-mode (FF120+)
+***/
+user_pref("_user.js.parrot", "4000 syntax error: the parrot's bereft of life!");
+/* 4001: enable FPP in PB mode [FF114+]
+ * [NOTE] In FF119+, FPP for all modes (7016) is enabled with ETP Strict (2701) ***/
+   // user_pref("privacy.fingerprintingProtection.pbmode", true); // [DEFAULT: true FF118+]
+/* 4002: set global FPP overrides [FF114+]
+ * uses "RFPTargets" [1] which despite the name these are not used by RFP
+ * e.g. "+AllTargets,-CSSPrefersColorScheme,-JSDateTimeUTC" = all targets but allow prefers-color-scheme and do not change timezone
+ * e.g. "-AllTargets,+CanvasRandomization,+JSDateTimeUTC" = no targets but do use FPP canvas and change timezone
+ * [NOTE] Not supported by arkenfox. Either use RFP or FPP at defaults
+ * [1] https://searchfox.org/mozilla-central/source/toolkit/components/resistfingerprinting/RFPTargets.inc ***/
+   // user_pref("privacy.fingerprintingProtection.overrides", "");
+/* 4003: set granular FPP overrides
+ * JSON format: e.g."[{\"firstPartyDomain\": \"netflix.com\", \"overrides\": \"-CanvasRandomization,-FrameRate,\"}]"
+ * [NOTE] Not supported by arkenfox. Either use RFP or FPP at defaults ***/
+   // user_pref("privacy.fingerprintingProtection.granularOverrides", "");
+/* 4004: disable remote FPP overrides [FF127+] ***/
+   // user_pref("privacy.fingerprintingProtection.remoteOverrides.enabled", false);
+
+/*** [SECTION 4500]: OPTIONAL RFP (resistFingerprinting)
+   RFP overrides FPP (4000)
+
+   FF128+ Arkenfox by default uses FPP (automatically enabled with ETP Strict). For most people
+   this is all you need. To use RFP instead, add RFP (4501) to your overrides, and optionally
+   add letterboxing (4504), spoof_english (4506), and webgl (4520).
+
+   RFP is an all-or-nothing buy in: you cannot pick and choose what parts you want
+   [TEST] https://arkenfox.github.io/TZP/tzp.html
+
+   [WARNING] DO NOT USE extensions to alter RFP protected metrics
+
+    418986 - limit window.screen & CSS media queries (FF41)
+   1360039 - spoof navigator.hardwareConcurrency as 2 (FF55)
+ FF56
+   1333651 - spoof User Agent & Navigator API
+      version: android version spoofed as ESR (FF119 or lower)
+      OS: JS spoofed as Windows 10, OS 10.15, Android 10, or Linux | HTTP Headers spoofed as Windows or Android
+   1369319 - disable device sensor API
+   1369357 - disable site specific zoom
+   1337161 - hide gamepads from content
+   1372072 - spoof network information API as "unknown" when dom.netinfo.enabled = true
+   1333641 - reduce fingerprinting in WebSpeech API
+ FF57
+   1369309 - spoof media statistics
+   1382499 - reduce screen co-ordinate fingerprinting in Touch API
+   1217290 & 1409677 - enable some fingerprinting resistance for WebGL
+   1354633 - limit MediaError.message to a whitelist
+ FF58+
+   1372073 - spoof/block fingerprinting in MediaDevices API (FF59)
+      Spoof: enumerate devices as one "Internal Camera" and one "Internal Microphone"
+      Block: suppresses the ondevicechange event
+   1039069 - warn when language prefs are not set to "en*" (FF59)
+   1222285 & 1433592 - spoof keyboard events and suppress keyboard modifier events (FF59)
+      Spoofing mimics the content language of the document. Currently it only supports en-US.
+      Modifier events suppressed are SHIFT and both ALT keys. Chrome is not affected.
+   1337157 - disable WebGL debug renderer info (FF60)
+   1459089 - disable OS locale in HTTP Accept-Language headers (ANDROID) (FF62)
+   1479239 - return "no-preference" with prefers-reduced-motion (FF63)
+   1363508 & 1826051 - spoof/suppress Pointer Events (FF64, FF132)
+   1492766 - spoof pointerEvent.pointerid (FF65)
+   1485266 - disable exposure of system colors to CSS or canvas (FF67)
+   1494034 - return "light" with prefers-color-scheme (FF67)
+   1564422 - spoof audioContext outputLatency (FF70)
+   1595823 - return audioContext sampleRate as 44100 (FF72)
+   1607316 - spoof pointer as coarse and hover as none (ANDROID) (FF74)
+   1621433 - randomize canvas (previously FF58+ returned an all-white canvas) (FF78)
+   1506364 - return "no-preference" with prefers-contrast (FF80)
+   1653987 - limit font visibility to bundled and "Base Fonts" (Windows, Mac, some Linux) (FF80)
+   1461454 - spoof smooth=true and powerEfficient=false for supported media in MediaCapabilities (FF82)
+    531915 - use fdlibm's sin, cos and tan in jsmath (FF93, ESR91.1)
+   1756280 - enforce navigator.pdfViewerEnabled as true and plugins/mimeTypes as hard-coded values (FF100-115)
+   1692609 - reduce JS timing precision to 16.67ms (previously FF55+ was 100ms) (FF102)
+   1422237 - return "srgb" with color-gamut (FF110)
+   1794628 - return "none" with inverted-colors (FF114)
+   1787790 - normalize system fonts (FF128)
+   1835987 - spoof timezone as Atlantic/Reykjavik (previously FF55+ was UTC) (FF128)
+   1834307 - always use smooth scrolling (FF132)
+   1918202 - spoof screen orientation based on spoofed screen size and platform (FF132)
+      previously it always returned landscape-primary and an angle of 0 (FF50+)
+   1390465 - load all subtitles in WebVTT (Video Text Tracks) (FF133)
+   1873382 - make spoofed devicePixelRatio and CSS media queries match (FF133)
+      previously FF41+ devicePixelRatio was hardcoded as 1 and FF127+ as 2
+      previously FF41+ CSS media queries were spoofed as zoom level at a devicePixelRatio of 1
+***/
+user_pref("_user.js.parrot", "4500 syntax error: the parrot's popped 'is clogs");
+/* 4501: enable RFP
+ * [NOTE] pbmode applies if true and the original pref is false
+ * [SETUP-WEB] RFP can cause some website breakage: mainly canvas, use a canvas site exception via the urlbar.
+ * RFP also has a few side effects: mainly that timezone is GMT, and websites will prefer light theme ***/
+   // user_pref("privacy.resistFingerprinting", true); // [FF41+]
+   // user_pref("privacy.resistFingerprinting.pbmode", true); // [FF114+]
+/* 4502: set RFP new window size max rounded values [FF55+]
+ * [SETUP-CHROME] sizes round down in hundreds: width to 200s and height to 100s, to fit your screen
+ * [1] https://bugzilla.mozilla.org/1330882 ***/
+user_pref("privacy.window.maxInnerWidth", 1600);
+user_pref("privacy.window.maxInnerHeight", 900);
+/* 4503: disable mozAddonManager Web API [FF57+]
+ * [NOTE] To allow extensions to work on AMO, you also need 2662
+ * [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=1384330,1406795,1415644,1453988 ***/
+user_pref("privacy.resistFingerprinting.block_mozAddonManager", true);
+/* 4504: enable letterboxing [FF67+]
+ * Dynamically resizes the inner window by applying margins in stepped ranges [2]
+ * If you use the dimension pref, then it will only apply those resolutions.
+ * The format is "width1xheight1, width2xheight2, ..." (e.g. "800x600, 1000x1000")
+ * [SETUP-WEB] This is independent of RFP (4501). If you're not using RFP, or you are but
+ * dislike the margins, then flip this pref, keeping in mind that it is effectively fingerprintable
+ * [WARNING] DO NOT USE: the dimension pref is only meant for testing
+ * [1] https://bugzilla.mozilla.org/1407366
+ * [2] https://hg.mozilla.org/mozilla-central/rev/7211cb4f58ff#l5.13 ***/
+   // user_pref("privacy.resistFingerprinting.letterboxing", true); // [HIDDEN PREF]
+   // user_pref("privacy.resistFingerprinting.letterboxing.dimensions", ""); // [HIDDEN PREF]
+/* 4505: disable RFP by domain [FF91+]
+ * [NOTE] Working examples: "arkenfox.github.io", "*github.io"
+ * Non-working examples: "https://arkenfox.github.io", "github.io", "*arkenfox.github.io" ***/
+   // user_pref("privacy.resistFingerprinting.exemptedDomains", "*.example.invalid");
+/* 4506: disable RFP spoof english prompt [FF59+]
+ * 0=prompt, 1=disabled, 2=enabled
+ * [NOTE] When changing from value 2, preferred languages ('intl.accept_languages') is not reset.
+ * [SETUP-WEB] when enabled, sets 'en-US, en' for displaying pages and 'en-US' as locale.
+ * [SETTING] General>Language>Choose your preferred language for displaying pages>Choose>Request English... ***/
+user_pref("privacy.spoof_english", 1);
+/* 4510: disable using system colors
+ * [SETTING] General>Language and Appearance>Fonts and Colors>Colors>Use system colors ***/
+user_pref("browser.display.use_system_colors", false); // [DEFAULT: false NON-WINDOWS]
+/* 4511: disable using system accent colors ***/
+user_pref("widget.non-native-theme.use-theme-accent", false); // [DEFAULT: false WINDOWS]
+/* 4512: enforce links targeting new windows to open in a new tab instead
+ * 1=most recent window or tab, 2=new window, 3=new tab
+ * Stops malicious window sizes and some screen resolution leaks.
+ * You can still right-click a link and open in a new window
+ * [SETTING] General>Tabs>Open links in tabs instead of new windows
+ * [TEST] https://arkenfox.github.io/TZP/tzp.html#screen
+ * [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/9881 ***/
+user_pref("browser.link.open_newwindow", 3); // [DEFAULT: 3]
+/* 4513: set all open window methods to abide by "browser.link.open_newwindow" (4512)
+ * [1] https://searchfox.org/mozilla-central/source/dom/tests/browser/browser_test_new_window_from_content.js ***/
+user_pref("browser.link.open_newwindow.restriction", 0);
+/* 4520: disable WebGL (Web Graphics Library) ***/
+   // user_pref("webgl.disabled", true);
+
+/*** [SECTION 5000]: OPTIONAL OPSEC
+   Disk avoidance, application data isolation, eyeballs...
+***/
+user_pref("_user.js.parrot", "5000 syntax error: the parrot's taken 'is last bow");
+/* 5001: start Firefox in PB (Private Browsing) mode
+ * [NOTE] In this mode all windows are "private windows" and the PB mode icon is not displayed
+ * [NOTE] The P in PB mode can be misleading: it means no "persistent" disk state such as history,
+ * caches, searches, cookies, localStorage, IndexedDB etc (which you can achieve in normal mode).
+ * In fact, PB mode limits or removes the ability to control some of these, and you need to quit
+ * Firefox to clear them. PB is best used as a one off window (Menu>New Private Window) to provide
+ * a temporary self-contained new session. Close all private windows to clear the PB session.
+ * [SETTING] Privacy & Security>History>Custom Settings>Always use private browsing mode
+ * [1] https://wiki.mozilla.org/Private_Browsing
+ * [2] https://support.mozilla.org/kb/common-myths-about-private-browsing ***/
+   // user_pref("browser.privatebrowsing.autostart", true);
+/* 5002: disable memory cache
+ * capacity: -1=determine dynamically (default), 0=none, n=memory capacity in kibibytes ***/
+   // user_pref("browser.cache.memory.enable", false);
+   // user_pref("browser.cache.memory.capacity", 0);
+/* 5003: disable saving passwords
+ * [NOTE] This does not clear any passwords already saved
+ * [SETTING] Privacy & Security>Logins and Passwords>Ask to save logins and passwords for websites ***/
+   // user_pref("signon.rememberSignons", false);
+/* 5004: disable permissions manager from writing to disk [FF41+] [RESTART]
+ * [NOTE] This means any permission changes are session only
+ * [1] https://bugzilla.mozilla.org/967812 ***/
+   // user_pref("permissions.memory_only", true); // [HIDDEN PREF]
+/* 5005: disable intermediate certificate caching [FF41+] [RESTART]
+ * [NOTE] This affects login/cert/key dbs. The effect is all credentials are session-only.
+ * Saved logins and passwords are not available. Reset the pref and restart to return them ***/
+   // user_pref("security.nocertdb", true);
+/* 5006: disable favicons in history and bookmarks
+ * [NOTE] Stored as data blobs in favicons.sqlite, these don't reveal anything that your
+ * actual history (and bookmarks) already do. Your history is more detailed, so
+ * control that instead; e.g. disable history, clear history on exit, use PB mode
+ * [NOTE] favicons.sqlite is sanitized on Firefox close ***/
+   // user_pref("browser.chrome.site_icons", false);
+/* 5007: exclude "Undo Closed Tabs" in Session Restore ***/
+   // user_pref("browser.sessionstore.max_tabs_undo", 0);
+/* 5008: disable resuming session from crash
+ * [TEST] about:crashparent ***/
+   // user_pref("browser.sessionstore.resume_from_crash", false);
+/* 5009: disable "open with" in download dialog [FF50+]
+ * Application data isolation [1]
+ * [1] https://bugzilla.mozilla.org/1281959 ***/
+   // user_pref("browser.download.forbid_open_with", true);
+/* 5010: disable location bar suggestion types
+ * [SETTING] Search>Address Bar>When using the address bar, suggest ***/
+   // user_pref("browser.urlbar.suggest.history", false);
+   // user_pref("browser.urlbar.suggest.bookmark", false);
+   // user_pref("browser.urlbar.suggest.openpage", false);
+   // user_pref("browser.urlbar.suggest.topsites", false); // [FF78+]
+/* 5011: disable location bar dropdown
+ * This value controls the total number of entries to appear in the location bar dropdown ***/
+   // user_pref("browser.urlbar.maxRichResults", 0);
+/* 5012: disable location bar autofill
+ * [1] https://support.mozilla.org/kb/address-bar-autocomplete-firefox#w_url-autocomplete ***/
+   // user_pref("browser.urlbar.autoFill", false);
+/* 5013: disable browsing and download history
+ * [NOTE] We also clear history and downloads on exit (2811)
+ * [SETTING] Privacy & Security>History>Custom Settings>Remember browsing and download history ***/
+   // user_pref("places.history.enabled", false);
+/* 5014: disable Windows jumplist [WINDOWS] ***/
+   // user_pref("browser.taskbar.lists.enabled", false);
+   // user_pref("browser.taskbar.lists.frequent.enabled", false);
+   // user_pref("browser.taskbar.lists.recent.enabled", false);
+   // user_pref("browser.taskbar.lists.tasks.enabled", false);
+/* 5016: discourage downloading to desktop
+ * 0=desktop, 1=downloads (default), 2=custom
+ * [SETTING] To set your custom default "downloads": General>Downloads>Save files to ***/
+   // user_pref("browser.download.folderList", 2);
+/* 5017: disable Form Autofill
+ * If .supportedCountries includes your region (browser.search.region) and .supported
+ * is "detect" (default), then the UI will show. Stored data is not secure, uses JSON
+ * [SETTING] Privacy & Security>Forms and Autofill>Autofill addresses
+ * [1] https://wiki.mozilla.org/Firefox/Features/Form_Autofill ***/
+   // user_pref("extensions.formautofill.addresses.enabled", false); // [FF55+]
+   // user_pref("extensions.formautofill.creditCards.enabled", false); // [FF56+]
+/* 5018: limit events that can cause a pop-up ***/
+   // user_pref("dom.popup_allowed_events", "click dblclick mousedown pointerdown");
+/* 5019: disable page thumbnail collection ***/
+   // user_pref("browser.pagethumbnails.capturing_disabled", true); // [HIDDEN PREF]
+/* 5020: disable Windows native notifications and use app notications instead [FF111+] [WINDOWS] ***/
+   // user_pref("alerts.useSystemBackend.windows.notificationserver.enabled", false);
+/* 5021: disable location bar using search
+ * Don't leak URL typos to a search engine, give an error message instead
+ * Examples: "secretplace,com", "secretplace/com", "secretplace com", "secret place.com"
+ * [NOTE] This does not affect explicit user action such as using search buttons in the
+ * dropdown, or using keyword search shortcuts you configure in options (e.g. "d" for DuckDuckGo) ***/
+   // user_pref("keyword.enabled", false);
+
+/*** [SECTION 5500]: OPTIONAL HARDENING
+   Not recommended. Overriding these can cause breakage and performance issues,
+   they are mostly fingerprintable, and the threat model is practically nonexistent
+***/
+user_pref("_user.js.parrot", "5500 syntax error: this is an ex-parrot!");
+/* 5501: disable MathML (Mathematical Markup Language) [FF51+]
+ * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=mathml ***/
+   // user_pref("mathml.disabled", true); // 1173199
+/* 5502: disable in-content SVG (Scalable Vector Graphics) [FF53+]
+ * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=firefox+svg ***/
+   // user_pref("svg.disabled", true); // 1216893
+/* 5503: disable graphite
+ * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=firefox+graphite
+ * [2] https://en.wikipedia.org/wiki/Graphite_(SIL) ***/
+   // user_pref("gfx.font_rendering.graphite.enabled", false);
+/* 5504: disable asm.js [FF22+]
+ * [1] http://asmjs.org/
+ * [2] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=asm.js
+ * [3] https://rh0dev.github.io/blog/2017/the-return-of-the-jit/ ***/
+   // user_pref("javascript.options.asmjs", false);
+/* 5505: disable Ion and baseline JIT to harden against JS exploits [RESTART]
+ * [NOTE] When both Ion and JIT are disabled, and trustedprincipals
+ * is enabled, then Ion can still be used by extensions (1599226)
+ * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=firefox+jit
+ * [2] https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/ ***/
+   // user_pref("javascript.options.ion", false);
+   // user_pref("javascript.options.baselinejit", false);
+   // user_pref("javascript.options.jit_trustedprincipals", true); // [FF75+] [HIDDEN PREF]
+/* 5506: disable WebAssembly [FF52+]
+ * Vulnerabilities [1] have increasingly been found, including those known and fixed
+ * in native programs years ago [2]. WASM has powerful low-level access, making
+ * certain attacks (brute-force) and vulnerabilities more possible
+ * [STATS] ~0.2% of websites, about half of which are for cryptomining / malvertising [2][3]
+ * [1] https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=wasm
+ * [2] https://spectrum.ieee.org/tech-talk/telecom/security/more-worries-over-the-security-of-web-assembly
+ * [3] https://www.zdnet.com/article/half-of-the-websites-using-webassembly-use-it-for-malicious-purposes ***/
+   // user_pref("javascript.options.wasm", false);
+/* 5507: disable rendering of SVG OpenType fonts ***/
+   // user_pref("gfx.font_rendering.opentype_svg.enabled", false);
+/* 5508: disable all DRM content (EME: Encryption Media Extension)
+ * Optionally hide the UI setting which also disables the DRM prompt
+ * [SETTING] General>DRM Content>Play DRM-controlled content
+ * [TEST] https://bitmovin.com/demos/drm
+ * [1] https://www.eff.org/deeplinks/2017/10/drms-dead-canary-how-we-just-lost-web-what-we-learned-it-and-what-we-need-do-next ***/
+   // user_pref("media.eme.enabled", false);
+   // user_pref("browser.eme.ui.enabled", false);
+/* 5509: disable IPv6 if using a VPN
+ * This is an application level fallback. Disabling IPv6 is best done at an OS/network
+ * level, and/or configured properly in system wide VPN setups.
+ * [NOTE] PHP defaults to IPv6 with "localhost". Use "php -S 127.0.0.1:PORT"
+ * [SETUP-WEB] PR_CONNECT_RESET_ERROR
+ * [TEST] https://ipleak.org/
+ * [1] https://www.internetsociety.org/tag/ipv6-security/ (Myths 2,4,5,6) ***/
+   // user_pref("network.dns.disableIPv6", true);
+/* 5510: control when to send a cross-origin referer
+ * 0=always (default), 1=only if base domains match, 2=only if hosts match
+ * [NOTE] Will cause breakage: older modems/routers and some sites e.g banks, vimeo, icloud, instagram ***/
+   // user_pref("network.http.referer.XOriginPolicy", 2);
+/* 5511: set DoH bootstrap address [FF89+]
+ * Firefox uses the system DNS to initially resolve the IP address of your DoH server.
+ * When set to a valid, working value that matches your "network.trr.uri" (0712) Firefox
+ * won't use the system DNS. If the IP doesn't match then DoH won't work ***/
+   // user_pref("network.trr.bootstrapAddr", "10.0.0.1"); // [HIDDEN PREF]
+
+/*** [SECTION 6000]: DON'T TOUCH ***/
+user_pref("_user.js.parrot", "6000 syntax error: the parrot's 'istory!");
+/* 6001: enforce Firefox blocklist
+ * [WHY] It includes updates for "revoked certificates"
+ * [1] https://blog.mozilla.org/security/2015/03/03/revoking-intermediate-certificates-introducing-onecrl/ ***/
+user_pref("extensions.blocklist.enabled", true); // [DEFAULT: true]
+/* 6002: enforce no referer spoofing
+ * [WHY] Spoofing can affect CSRF (Cross-Site Request Forgery) protections ***/
+user_pref("network.http.referer.spoofSource", false); // [DEFAULT: false]
+/* 6004: enforce a security delay on some confirmation dialogs such as install, open/save
+ * [1] https://www.squarefree.com/2004/07/01/race-conditions-in-security-dialogs/ ***/
+user_pref("security.dialog_enable_delay", 1000); // [DEFAULT: 1000]
+/* 6008: enforce no First Party Isolation [FF51+]
+ * [WARNING] Replaced with network partitioning (FF85+) and TCP (2701), and enabling FPI
+ * disables those. FPI is no longer maintained except at Tor Project for Tor Browser's config ***/
+user_pref("privacy.firstparty.isolate", false); // [DEFAULT: false]
+/* 6009: enforce SmartBlock shims (about:compat) [FF81+]
+ * [1] https://blog.mozilla.org/security/2021/03/23/introducing-smartblock/ ***/
+user_pref("extensions.webcompat.enable_shims", true); // [HIDDEN PREF] [DEFAULT: true]
+/* 6010: enforce no TLS 1.0/1.1 downgrades
+ * [TEST] https://tls-v1-1.badssl.com:1010/ ***/
+user_pref("security.tls.version.enable-deprecated", false); // [DEFAULT: false]
+/* 6011: enforce disabling of Web Compatibility Reporter [FF56+]
+ * Web Compatibility Reporter adds a "Report Site Issue" button to send data to Mozilla
+ * [WHY] To prevent wasting Mozilla's time with a custom setup ***/
+user_pref("extensions.webcompat-reporter.enabled", false); // [DEFAULT: false]
+/* 6012: enforce Quarantined Domains [FF115+]
+ * [WHY] https://support.mozilla.org/kb/quarantined-domains */
+user_pref("extensions.quarantinedDomains.enabled", true); // [DEFAULT: true]
+/* 6050: prefsCleaner: previously active items removed from arkenfox 115-127 ***/
+   // user_pref("accessibility.force_disabled", "");
+   // user_pref("browser.urlbar.dnsResolveSingleWordsAfterSearch", "");
+   // user_pref("geo.provider.network.url", "");
+   // user_pref("geo.provider.network.logging.enabled", "");
+   // user_pref("geo.provider.use_gpsd", "");
+   // user_pref("network.protocol-handler.external.ms-windows-store", "");
+   // user_pref("privacy.partition.always_partition_third_party_non_cookie_storage", "");
+   // user_pref("privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage", "");
+   // user_pref("privacy.partition.serviceWorkers", "");
+
+/*** [SECTION 7000]: DON'T BOTHER ***/
+user_pref("_user.js.parrot", "7000 syntax error: the parrot's pushing up daisies!");
+/* 7001: disable APIs
+ * Location-Aware Browsing, Full Screen
+ * [WHY] The API state is easily fingerprintable.
+ * Geo is behind a prompt (7002). Full screen requires user interaction ***/
+   // user_pref("geo.enabled", false);
+   // user_pref("full-screen-api.enabled", false);
+/* 7002: set default permissions
+ * Location, Camera, Microphone, Notifications [FF58+] Virtual Reality [FF73+]
+ * 0=always ask (default), 1=allow, 2=block
+ * [WHY] These are fingerprintable via Permissions API, except VR. Just add site
+ * exceptions as allow/block for frequently visited/annoying sites: i.e. not global
+ * [SETTING] to add site exceptions: Ctrl+I>Permissions>
+ * [SETTING] to manage site exceptions: Options>Privacy & Security>Permissions>Settings ***/
+   // user_pref("permissions.default.geo", 0);
+   // user_pref("permissions.default.camera", 0);
+   // user_pref("permissions.default.microphone", 0);
+   // user_pref("permissions.default.desktop-notification", 0);
+   // user_pref("permissions.default.xr", 0); // Virtual Reality
+/* 7003: disable non-modern cipher suites [1]
+ * [WHY] Passive fingerprinting. Minimal/non-existent threat of downgrade attacks
+ * [1] https://browserleaks.com/ssl ***/
+   // user_pref("security.ssl3.ecdhe_ecdsa_aes_128_sha", false);
+   // user_pref("security.ssl3.ecdhe_ecdsa_aes_256_sha", false);
+   // user_pref("security.ssl3.ecdhe_rsa_aes_128_sha", false);
+   // user_pref("security.ssl3.ecdhe_rsa_aes_256_sha", false);
+   // user_pref("security.ssl3.rsa_aes_128_gcm_sha256", false); // no PFS
+   // user_pref("security.ssl3.rsa_aes_256_gcm_sha384", false); // no PFS
+   // user_pref("security.ssl3.rsa_aes_128_sha", false); // no PFS
+   // user_pref("security.ssl3.rsa_aes_256_sha", false); // no PFS
+/* 7004: control TLS versions
+ * [WHY] Passive fingerprinting and security ***/
+   // user_pref("security.tls.version.min", 3); // [DEFAULT: 3]
+   // user_pref("security.tls.version.max", 4);
+/* 7005: disable SSL session IDs [FF36+]
+ * [WHY] Passive fingerprinting and perf costs. These are session-only
+ * and isolated with network partitioning (FF85+) and/or containers ***/
+   // user_pref("security.ssl.disable_session_identifiers", true);
+/* 7007: referers
+ * [WHY] Only cross-origin referers (1602, 5510) matter ***/
+   // user_pref("network.http.sendRefererHeader", 2);
+   // user_pref("network.http.referer.trimmingPolicy", 0);
+/* 7008: set the default Referrer Policy [FF59+]
+ * 0=no-referer, 1=same-origin, 2=strict-origin-when-cross-origin, 3=no-referrer-when-downgrade
+ * [WHY] Defaults are fine. They can be overridden by a site-controlled Referrer Policy ***/
+   // user_pref("network.http.referer.defaultPolicy", 2); // [DEFAULT: 2]
+   // user_pref("network.http.referer.defaultPolicy.pbmode", 2); // [DEFAULT: 2]
+/* 7010: disable HTTP Alternative Services [FF37+]
+ * [WHY] Already isolated with network partitioning (FF85+) ***/
+   // user_pref("network.http.altsvc.enabled", false);
+/* 7011: disable website control over browser right-click context menu
+ * [WHY] Just use Shift-Right-Click ***/
+   // user_pref("dom.event.contextmenu.enabled", false);
+/* 7012: disable icon fonts (glyphs) and local fallback rendering
+ * [WHY] Breakage, font fallback is equivalency, also RFP
+ * [1] https://bugzilla.mozilla.org/789788
+ * [2] https://gitlab.torproject.org/legacy/trac/-/issues/8455 ***/
+   // user_pref("gfx.downloadable_fonts.enabled", false); // [FF41+]
+   // user_pref("gfx.downloadable_fonts.fallback_delay", -1);
+/* 7013: disable Clipboard API
+ * [WHY] Fingerprintable. Breakage. Cut/copy/paste require user
+ * interaction, and paste is limited to focused editable fields ***/
+   // user_pref("dom.event.clipboardevents.enabled", false);
+/* 7014: disable System Add-on updates
+ * [WHY] It can compromise security. System addons ship with prefs, use those ***/
+   // user_pref("extensions.systemAddon.update.enabled", false); // [FF62+]
+   // user_pref("extensions.systemAddon.update.url", ""); // [FF44+]
+/* 7015: enable the DNT (Do Not Track) HTTP header
+ * [WHY] DNT is enforced with Tracking Protection which is used in ETP Strict (2701) ***/
+   // user_pref("privacy.donottrackheader.enabled", true);
+/* 7016: customize ETP settings
+ * [NOTE] FPP (fingerprintingProtection) is ignored when RFP (4501) is enabled
+ * [WHY] Arkenfox only supports strict (2701) which sets these at runtime ***/
+   // user_pref("network.cookie.cookieBehavior", 5); // [DEFAULT: 5]
+   // user_pref("network.cookie.cookieBehavior.optInPartitioning", true); // [ETP FF132+]
+   // user_pref("network.http.referer.disallowCrossSiteRelaxingDefault", true);
+   // user_pref("network.http.referer.disallowCrossSiteRelaxingDefault.top_navigation", true); // [FF100+]
+   // user_pref("privacy.bounceTrackingProtection.mode", 1); // [FF131+] [ETP FF133+]
+   // user_pref("privacy.fingerprintingProtection", true); // [FF114+] [ETP FF119+]
+   // user_pref("privacy.partition.network_state.ocsp_cache", true); // [DEFAULT: true FF123+]
+   // user_pref("privacy.query_stripping.enabled", true); // [FF101+]
+   // user_pref("privacy.trackingprotection.enabled", true);
+   // user_pref("privacy.trackingprotection.socialtracking.enabled", true);
+   // user_pref("privacy.trackingprotection.cryptomining.enabled", true); // [DEFAULT: true]
+   // user_pref("privacy.trackingprotection.fingerprinting.enabled", true); // [DEFAULT: true]
+/* 7017: disable service workers
+ * [WHY] Already isolated with TCP (2701) behind a pref (2710) ***/
+   // user_pref("dom.serviceWorkers.enabled", false);
+/* 7018: disable Web Notifications [FF22+]
+ * [WHY] Web Notifications are behind a prompt (7002)
+ * [1] https://blog.mozilla.org/en/products/firefox/block-notification-requests/ ***/
+   // user_pref("dom.webnotifications.enabled", false);
+/* 7019: disable Push Notifications [FF44+]
+ * [WHY] Website "push" requires subscription, and the API is required for CRLite (1224)
+ * [NOTE] To remove all subscriptions, reset "dom.push.userAgentID"
+ * [1] https://support.mozilla.org/kb/push-notifications-firefox ***/
+   // user_pref("dom.push.enabled", false);
+/* 7020: disable WebRTC (Web Real-Time Communication)
+ * [WHY] Firefox desktop uses mDNS hostname obfuscation and the private IP is never exposed until
+ * required in TRUSTED scenarios; i.e. after you grant device (microphone or camera) access
+ * [TEST] https://browserleaks.com/webrtc
+ * [1] https://groups.google.com/g/discuss-webrtc/c/6stQXi72BEU/m/2FwZd24UAQAJ
+ * [2] https://datatracker.ietf.org/doc/html/draft-ietf-mmusic-mdns-ice-candidates#section-3.1.1 ***/
+   // user_pref("media.peerconnection.enabled", false);
+/* 7021: enable GPC (Global Privacy Control) in non-PB windows
+ * [WHY] Passive and active fingerprinting. Mostly redundant with Tracking Protection
+ * in ETP Strict (2701) and sanitizing on close (2800s) ***/
+   // user_pref("privacy.globalprivacycontrol.enabled", true);
+
+/*** [SECTION 8000]: DON'T BOTHER: FINGERPRINTING
+   [WHY] They are insufficient to help anti-fingerprinting and do more harm than good
+   [WARNING] DO NOT USE with RFP. RFP already covers these and they can interfere
+***/
+user_pref("_user.js.parrot", "8000 syntax error: the parrot's crossed the Jordan");
+/* 8001: prefsCleaner: reset items useless for anti-fingerprinting ***/
+   // user_pref("browser.display.use_document_fonts", "");
+   // user_pref("browser.zoom.siteSpecific", "");
+   // user_pref("device.sensors.enabled", "");
+   // user_pref("dom.enable_performance", "");
+   // user_pref("dom.enable_resource_timing", "");
+   // user_pref("dom.gamepad.enabled", "");
+   // user_pref("dom.maxHardwareConcurrency", "");
+   // user_pref("dom.w3c_touch_events.enabled", "");
+   // user_pref("dom.webaudio.enabled", "");
+   // user_pref("font.system.whitelist", "");
+   // user_pref("general.appname.override", "");
+   // user_pref("general.appversion.override", "");
+   // user_pref("general.buildID.override", "");
+   // user_pref("general.oscpu.override", "");
+   // user_pref("general.platform.override", "");
+   // user_pref("general.useragent.override", "");
+   // user_pref("media.navigator.enabled", "");
+   // user_pref("media.ondevicechange.enabled", "");
+   // user_pref("media.video_stats.enabled", "");
+   // user_pref("media.webspeech.synth.enabled", "");
+   // user_pref("ui.use_standins_for_native_colors", "");
+   // user_pref("webgl.enable-debug-renderer-info", "");
+
+/*** [SECTION 9000]: NON-PROJECT RELATED ***/
+user_pref("_user.js.parrot", "9000 syntax error: the parrot's cashed in 'is chips!");
+/* 9001: disable welcome notices ***/
+user_pref("browser.startup.homepage_override.mstone", "ignore"); // [HIDDEN PREF]
+/* 9002: disable General>Browsing>Recommend extensions/features as you browse [FF67+] ***/
+user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
+user_pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
+/* 9004: disable search terms [FF110+]
+ * [SETTING] Search>Search Bar>Use the address bar for search and navigation>Show search terms instead of URL... ***/
+user_pref("browser.urlbar.showSearchTerms.enabled", false);
+
+/*** [SECTION 9999]: DEPRECATED / RENAMED ***/
+user_pref("_user.js.parrot", "9999 syntax error: the parrot's shuffled off 'is mortal coil!");
+/* ESR115.x still uses all the following prefs
+// [NOTE] replace the * with a slash in the line above to re-enable active ones
+// FF116
+// 4506: set RFP's font visibility level (1402) [FF94+]
+   // [-] https://bugzilla.mozilla.org/1838415
+   // user_pref("layout.css.font-visibility.resistFingerprinting", 1); // [DEFAULT: 1]
+// FF117
+// 1221: disable Windows Microsoft Family Safety cert [FF50+] [WINDOWS]
+   // 0=disable detecting Family Safety mode and importing the root
+   // 1=only attempt to detect Family Safety mode (don't import the root)
+   // 2=detect Family Safety mode and import the root
+   // [1] https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/21686
+   // [-] https://bugzilla.mozilla.org/1844908
+user_pref("security.family_safety.mode", 0);
+// 7018: disable service worker Web Notifications [FF44+]
+   // [WHY] Web Notifications are behind a prompt (7002)
+   // [1] https://blog.mozilla.org/en/products/firefox/block-notification-requests/
+   // [-] https://bugzilla.mozilla.org/1842457
+   // user_pref("dom.webnotifications.serviceworker.enabled", false);
+// FF118
+// 1402: limit font visibility (Windows, Mac, some Linux) [FF94+]
+   // Uses hardcoded lists with two parts: kBaseFonts + kLangPackFonts [1], bundled fonts are auto-allowed
+   // In normal windows: uses the first applicable: RFP over TP over Standard
+   // In Private Browsing windows: uses the most restrictive between normal and private
+   // 1=only base system fonts, 2=also fonts from optional language packs, 3=also user-installed fonts
+   // [1] https://searchfox.org/mozilla-central/search?path=StandardFonts*.inc
+   // [-] https://bugzilla.mozilla.org/1847599
+   // user_pref("layout.css.font-visibility.private", 1);
+   // user_pref("layout.css.font-visibility.standard", 1);
+   // user_pref("layout.css.font-visibility.trackingprotection", 1);
+// 2623: disable permissions delegation [FF73+]
+   // Currently applies to cross-origin geolocation, camera, mic and screen-sharing
+   // permissions, and fullscreen requests. Disabling delegation means any prompts
+   // for these will show/use their correct 3rd party origin
+   // [1] https://groups.google.com/forum/#!topic/mozilla.dev.platform/BdFOMAuCGW8/discussion
+   // [-] https://bugzilla.mozilla.org/1697151
+   // user_pref("permissions.delegation.enabled", false);
+// FF119
+// 0211: use en-US locale regardless of the system or region locale
+   // [SETUP-WEB] May break some input methods e.g xim/ibus for CJK languages [1]
+   // [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=867501,1629630
+   // [-] https://bugzilla.mozilla.org/1846224
+   // user_pref("javascript.use_us_english_locale", true); // [HIDDEN PREF]
+// 0711: disable skipping DoH when parental controls are enabled [FF70+]
+   // [-] https://bugzilla.mozilla.org/1586941
+user_pref("network.dns.skipTRR-when-parental-control-enabled", false);
+// FF123
+// 0334: disable PingCentre telemetry (used in several System Add-ons) [FF57+]
+   // Defense-in-depth: currently covered by 0331
+   // [-] https://bugzilla.mozilla.org/1868988
+user_pref("browser.ping-centre.telemetry", false);
+// FF126
+// 9003: disable What's New toolbar icon [FF69+]
+   // [-] https://bugzilla.mozilla.org/1724300
+user_pref("browser.messaging-system.whatsNewPanel.enabled", false);
+// FF127
+  // 2630: disable content analysis by DLP (Data Loss Prevention) agents - replaced by default_result
+  // [-] https://bugzilla.mozilla.org/1880314
+user_pref("browser.contentanalysis.default_allow", false);
+// 4511: enforce non-native widget theme
+   // Security: removes/reduces system API calls, e.g. win32k API [1]
+   // Fingerprinting: provides a uniform look and feel across platforms [2]
+   // [1] https://bugzilla.mozilla.org/1381938
+   // [2] https://bugzilla.mozilla.org/1411425
+   // [-] https://bugzilla.mozilla.org/1848899
+user_pref("widget.non-native-theme.enabled", true); // [DEFAULT: true]
+// ***/
+
+/* ESR128.x still uses all the following prefs
+// [NOTE] replace the * with a slash in the line above to re-enable active ones
+// FF132
+/* 2617: remove webchannel whitelist
+   // [-] https://bugzilla.mozilla.org/1275612
+   // user_pref("webchannel.allowObject.urlWhitelist", "");
+// ***/
+
+/* END: internal custom pref to test for syntax errors ***/
+user_pref("_user.js.parrot", "SUCCESS: No no he's not dead, he's, he's restin'!");
diff --git a/assets/firefox/firefox/profiles.ini b/assets/firefox/firefox/profiles.ini
new file mode 100644
index 0000000..3f4488a
--- /dev/null
+++ b/assets/firefox/firefox/profiles.ini
@@ -0,0 +1,9 @@
+[General]
+StartWithLastProfile=1
+Version=2
+
+[Profile0]
+Name=default-release
+IsRelative=1
+Path=default-release
+Default=1
diff --git a/assets/firefox/rofi/config.rasi b/assets/firefox/rofi/config.rasi
new file mode 100644
index 0000000..488136c
--- /dev/null
+++ b/assets/firefox/rofi/config.rasi
@@ -0,0 +1,29 @@
+configuration{
+    modi: ["drun", "window", "run"];
+    icon-theme: "Papirus-Dark";
+    show-icons: true;
+    terminal: "alacritty";
+    drun-display-format: "{icon} {name}";
+    location: 0;
+    disable-history: false;
+    sidebar-mode: false;
+    display-drun: " ";
+    display-run: " ";
+    display-window: " ";
+    
+    //adding vim keybindings
+    kb-row-up: "Up,Control+k";
+    kb-row-left: "Left,Control+h";
+    kb-row-right: "Right,Control+l";
+    kb-row-down: "Down,Control+j";
+
+    kb-accept-entry: "Control+z,Control+y,Return,KP_Enter";
+
+    //fixing up
+    kb-remove-to-eol: "";
+    kb-move-char-back: "Control+b";
+    kb-remove-char-back: "BackSpace";
+    kb-move-char-forward: "Control+f";
+    kb-mode-complete: "Control+o";
+}
+@theme "tokyonight.rasi"
diff --git a/assets/firefox/rofi/tokyonight.rasi b/assets/firefox/rofi/tokyonight.rasi
new file mode 100644
index 0000000..bd64a99
--- /dev/null
+++ b/assets/firefox/rofi/tokyonight.rasi
@@ -0,0 +1,137 @@
+/*
+ * Tokyonight colorscheme (big icons) for rofi
+ * User: w8ste
+ */
+
+
+// define colors etc.
+* {
+    bg: #24283b;
+    hv: #9274ca; 
+    primary: #444b6a;  // TokyoNight bright black
+    ug: #0B2447;
+    font: "Monospace 11";
+    background-color: @bg;
+    //dark: @bg;
+    border: 0px;
+    kl: #7aa2f7;
+    black: #000000;
+
+    transparent: rgba(46,52,64,0);
+}
+
+// defines different aspects of the window
+window {
+    width: 700;
+    /*since line wont work with height, i comment it out 
+    if you rather control the size via height
+    just comment it out */
+    //height: 500;
+
+    orientation: horizontal;
+    location: center;
+    anchor: center;
+    transparency: "screenshot";
+    border-color: @transparent;   
+    border: 0px;
+    border-radius: 6px;
+    spacing: 0;
+    children: [ mainbox ];
+}
+
+mainbox {
+    spacing: 0;
+    children: [ inputbar, message, listview ];
+}
+
+inputbar {
+    color: @kl;
+    padding: 11px;
+    border: 3px 3px 2px 3px;
+    border-color: @primary;
+    border-radius: 6px 6px 0px 0px;
+}
+
+message {
+    padding: 0;
+    border-color: @primary;
+    border: 0px 1px 1px 1px;
+}
+
+entry, prompt, case-indicator {
+    text-font: inherit;
+    text-color: inherit;
+}
+
+entry {
+    cursor: pointer;
+}
+
+prompt {
+    margin: 0px 5px 0px 0px;
+}
+
+listview {
+    layout: vertical;
+    //spacing: 5px;
+    padding: 8px;
+    lines: 7;
+    columns: 2;
+    border: 0px 3px 3px 3px; 
+    border-radius: 0px 0px 6px 6px;
+    border-color: @primary;
+    dynamic: false;
+}
+
+element {
+    padding: 2px;
+    vertical-align: 1;
+    color: @kl;
+    font: inherit;
+}
+
+element-text {
+    background-color: inherit;
+    text-color: inherit;
+    vertical-align: 0.5;
+}
+
+element selected.normal {
+    color: @black;
+    background-color: @hv;
+}
+
+element normal active {
+    background-color: @hv;
+    color: @black;
+}
+
+element-icon {
+    background-color: inherit;
+    text-color: inherit;
+    size: 2.5em;
+}
+
+element normal urgent {
+    background-color: @primary;
+}
+
+element selected active {
+    background: @hv;
+    foreground: @bg;
+}
+
+button {
+    padding: 6px;
+    color: @primary;
+    horizonatal-align: 0.5;
+
+    border: 2px 0px 2px 2px;
+    border-radius: 4px 0px 0px 4px;
+    border-color: @primary;
+}
+
+button selected normal {
+    border: 2px 0px 2px 2px;
+    border-color: @primary;
+}
diff --git a/assets/firefox/xfce4/desktop/accels.scm b/assets/firefox/xfce4/desktop/accels.scm
new file mode 100644
index 0000000..c9f68a8
--- /dev/null
+++ b/assets/firefox/xfce4/desktop/accels.scm
@@ -0,0 +1,47 @@
+; xfdesktop GtkAccelMap rc-file         -*- scheme -*-
+; this file is an automated accelerator map dump
+;
+; (gtk_accel_path "<Actions>/XfceDesktop/primary-menu-2" "Menu")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/open-with-other" "")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/activate-3" "Return")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/properties-3" "<Alt>KP_Enter")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/trash" "Delete")
+; (gtk_accel_path "<Actions>/XfceDesktop/next-background" "")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/cut-2" "")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/cut" "<Primary>x")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/unselect-all" "Escape")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/copy-2" "<Primary>Insert")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/activate" "space")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/activate-2" "KP_Space")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/open" "<Primary>o")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/select-all" "<Primary>a")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/properties-2" "<Alt>ISO_Enter")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/empty-trash" "")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/open-trash" "")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/trash-3" "")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/properties" "<Alt>Return")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/copy" "<Primary>c")
+; (gtk_accel_path "<Actions>/XfceDesktop/reload-2" "Reload")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/delete-3" "")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/trash-2" "KP_Delete")
+; (gtk_accel_path "<Actions>/XfceDesktop/reload" "<Primary>r")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/paste-into-folder" "")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/paste-2" "<Shift>Insert")
+; (gtk_accel_path "<Actions>/XfceDesktop/secondary-menu" "<Primary><Shift>F10")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/delete-2" "<Shift>KP_Delete")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/toggle-cursor-2" "<Primary>KP_Space")
+; (gtk_accel_path "<Actions>/XfceDesktop/reload-1" "F5")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/open-filesystem" "")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/activate-5" "KP_Enter")
+; (gtk_accel_path "<Actions>/XfceDesktop/primary-menu" "<Shift>F10")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/create-document" "")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/create-folder" "<Primary><Shift>n")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/toggle-cursor" "<Primary>space")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/toggle-show-hidden" "<Primary>h")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/open-home" "<Alt>Home")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/activate-4" "ISO_Enter")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/delete" "<Shift>Delete")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/paste" "<Primary>v")
+; (gtk_accel_path "<Actions>/XfdesktopFileIconManager/rename" "F2")
+; (gtk_accel_path "<Actions>/XfdesktopIconView/arrange-icons" "")
+; (gtk_accel_path "<Actions>/XfceDesktop/secondary-menu-2" "<Primary>Menu")
diff --git a/assets/firefox/xfce4/desktop/icons.screen0.yaml b/assets/firefox/xfce4/desktop/icons.screen0.yaml
new file mode 100644
index 0000000..5abf43d
--- /dev/null
+++ b/assets/firefox/xfce4/desktop/icons.screen0.yaml
@@ -0,0 +1,23 @@
+#
+# DO NOT EDIT THIS FILE WHILE XFDESKTOP IS RUNNING
+#
+configs:
+- level: 0
+  monitors:
+  - id: "bfcbb767e4ae5aefeabbf8fe3b89cbf6f633e165"
+    display_name: "Chimei Innolux Corporation 0x1417 (eDP-1)"
+    geometry:
+      x: 0
+      y: 0
+      width: 1920
+      height: 1200
+  icons:
+    "/home/tony":
+      row: 0
+      col: 0
+    "/":
+      row: 1
+      col: 0
+    "trash:///":
+      row: 2
+      col: 0
diff --git a/assets/firefox/xfce4/xfce4-screenshooter b/assets/firefox/xfce4/xfce4-screenshooter
new file mode 100644
index 0000000..b8704c8
--- /dev/null
+++ b/assets/firefox/xfce4/xfce4-screenshooter
@@ -0,0 +1,12 @@
+app=/nix/store/rryzli57rm1i4wyyv26yj537xgvyllvk-brave-1.85.111/bin/brave
+custom_action_command=none
+last_user=
+last_extension=png
+show_in_folder=false
+screenshot_dir=file:///home/tony/Pictures
+action=2
+delay=0
+region=2
+show_mouse=1
+show_border=1
+
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/displays.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/displays.xml
new file mode 100644
index 0000000..d48d1ce
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/displays.xml
@@ -0,0 +1,7 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="displays" version="1.0">
+  <property name="ActiveProfile" type="string" value="Default"/>
+  <property name="Notify" type="int" value="1"/>
+  <property name="AutoEnableProfiles" type="int" value="3"/>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/keyboards.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/keyboards.xml
new file mode 100644
index 0000000..b6758de
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/keyboards.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="keyboards" version="1.0">
+  <property name="Default" type="empty">
+    <property name="KeyRepeat" type="empty">
+      <property name="Delay" type="int" value="201"/>
+      <property name="Rate" type="int" value="38"/>
+    </property>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/thunar.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/thunar.xml
new file mode 100644
index 0000000..8da6326
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/thunar.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="thunar" version="1.0">
+  <property name="last-view" type="string" value="ThunarIconView"/>
+  <property name="last-icon-view-zoom-level" type="string" value="THUNAR_ZOOM_LEVEL_100_PERCENT"/>
+  <property name="last-window-width" type="int" value="1132"/>
+  <property name="last-window-height" type="int" value="816"/>
+  <property name="last-window-maximized" type="bool" value="false"/>
+  <property name="last-separator-position" type="int" value="170"/>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-appfinder.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-appfinder.xml
new file mode 100644
index 0000000..3e9fd53
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-appfinder.xml
@@ -0,0 +1,46 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfce4-appfinder" version="1.0">
+  <property name="actions" type="array">
+    <value type="int" value="5"/>
+    <value type="int" value="4"/>
+    <value type="int" value="3"/>
+    <value type="int" value="2"/>
+    <value type="int" value="1"/>
+    <property name="action-5" type="empty">
+      <property name="type" type="int" value="0"/>
+      <property name="pattern" type="string" value="/"/>
+      <property name="command" type="string" value="exo-open --launch FileManager %S"/>
+      <property name="save" type="bool" value="false"/>
+    </property>
+    <property name="action-4" type="empty">
+      <property name="type" type="int" value="0"/>
+      <property name="pattern" type="string" value="#"/>
+      <property name="command" type="string" value="exo-open --launch TerminalEmulator man %s"/>
+      <property name="save" type="bool" value="false"/>
+    </property>
+    <property name="action-3" type="empty">
+      <property name="type" type="int" value="0"/>
+      <property name="pattern" type="string" value="!w"/>
+      <property name="command" type="string" value="exo-open --launch WebBrowser http://en.wikipedia.org/wiki/%s"/>
+      <property name="save" type="bool" value="false"/>
+    </property>
+    <property name="action-2" type="empty">
+      <property name="type" type="int" value="0"/>
+      <property name="pattern" type="string" value="$"/>
+      <property name="command" type="string" value="exo-open --launch TerminalEmulator %s"/>
+      <property name="save" type="bool" value="true"/>
+    </property>
+    <property name="action-1" type="empty">
+      <property name="type" type="int" value="1"/>
+      <property name="pattern" type="string" value="^(file|http|https):\/\/(.*)$"/>
+      <property name="command" type="string" value="exo-open \0"/>
+      <property name="save" type="bool" value="false"/>
+    </property>
+  </property>
+  <property name="last" type="empty">
+    <property name="window-height" type="int" value="422"/>
+    <property name="window-width" type="int" value="580"/>
+    <property name="pane-position" type="int" value="180"/>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
new file mode 100644
index 0000000..095ccd7
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml
@@ -0,0 +1,60 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfce4-desktop" version="1.0">
+  <property name="last-settings-migration-version" type="uint" value="1"/>
+  <property name="backdrop" type="empty">
+    <property name="screen0" type="empty">
+      <property name="monitorVirtual-1" type="empty">
+        <property name="workspace0" type="empty">
+          <property name="last-image" type="string" value="/usr/share/wallpapers/wall1.jpg"/>
+        </property>
+      </property>
+      <property name="monitoreDP-1" type="empty">
+        <property name="workspace0" type="empty">
+          <property name="last-image" type="string" value="/usr/share/wallpapers/wall1.jpg"/>
+        </property>
+      </property>
+      <property name="monitorHDMI-1" type="empty">
+        <property name="workspace0" type="empty">
+          <property name="last-image" type="string" value="/usr/share/wallpapers/wall1.jpg"/>
+        </property>
+      </property>
+      <property name="monitorHDMI-2" type="empty">
+        <property name="workspace0" type="empty">
+          <property name="last-image" type="string" value="/usr/share/wallpapers/wall1.jpg"/>
+        </property>
+      </property>
+      <property name="monitorDP-1" type="empty">
+        <property name="workspace0" type="empty">
+          <property name="last-image" type="string" value="/usr/share/wallpapers/wall1.jpg"/>
+        </property>
+      </property>
+      <property name="monitorDP-2" type="empty">
+        <property name="workspace0" type="empty">
+          <property name="last-image" type="string" value="/usr/share/wallpapers/wall1.jpg"/>
+        </property>
+      </property>
+      <property name="monitorVGA-1" type="empty">
+        <property name="workspace0" type="empty">
+          <property name="last-image" type="string" value="/usr/share/wallpapers/wall1.jpg"/>
+        </property>
+      </property>
+    </property>
+  </property>
+  <property name="desktop-menu" type="empty">
+    <property name="show" type="bool" value="true"/>
+  </property>
+  <property name="last" type="empty">
+    <property name="window-width" type="int" value="672"/>
+    <property name="window-height" type="int" value="547"/>
+  </property>
+  <property name="desktop-icons" type="empty">
+    <property name="show-hidden-files" type="bool" value="false"/>
+    <property name="file-icons" type="empty">
+      <property name="show-home" type="bool" value="false"/>
+      <property name="show-filesystem" type="bool" value="false"/>
+      <property name="show-trash" type="bool" value="false"/>
+      <property name="show-removable" type="bool" value="false"/>
+    </property>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
new file mode 100644
index 0000000..b376f95
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml
@@ -0,0 +1,199 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfce4-keyboard-shortcuts" version="1.0">
+  <property name="commands" type="empty">
+    <property name="default" type="empty">
+      <property name="&lt;Alt&gt;F1" type="empty"/>
+      <property name="&lt;Alt&gt;F2" type="empty">
+        <property name="startup-notify" type="empty"/>
+      </property>
+      <property name="&lt;Alt&gt;F3" type="empty">
+        <property name="startup-notify" type="empty"/>
+      </property>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Delete" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;l" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;t" type="empty"/>
+      <property name="XF86Display" type="empty"/>
+      <property name="&lt;Super&gt;p" type="empty"/>
+      <property name="&lt;Primary&gt;Escape" type="empty"/>
+      <property name="XF86WWW" type="empty"/>
+      <property name="HomePage" type="empty"/>
+      <property name="XF86Mail" type="empty"/>
+      <property name="Print" type="empty"/>
+      <property name="&lt;Alt&gt;Print" type="empty"/>
+      <property name="&lt;Shift&gt;Print" type="empty"/>
+      <property name="&lt;Super&gt;e" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;f" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Escape" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Shift&gt;Escape" type="empty"/>
+      <property name="&lt;Super&gt;r" type="empty">
+        <property name="startup-notify" type="empty"/>
+      </property>
+      <property name="&lt;Alt&gt;&lt;Super&gt;s" type="empty"/>
+    </property>
+    <property name="custom" type="empty">
+      <property name="&lt;Alt&gt;F2" type="string" value="xfce4-appfinder --collapsed">
+        <property name="startup-notify" type="bool" value="true"/>
+      </property>
+      <property name="&lt;Alt&gt;Print" type="string" value="xfce4-screenshooter -w"/>
+      <property name="&lt;Super&gt;r" type="string" value="xfce4-appfinder -c">
+        <property name="startup-notify" type="bool" value="true"/>
+      </property>
+      <property name="XF86WWW" type="string" value="exo-open --launch WebBrowser"/>
+      <property name="XF86Mail" type="string" value="exo-open --launch MailReader"/>
+      <property name="&lt;Alt&gt;F3" type="string" value="xfce4-appfinder">
+        <property name="startup-notify" type="bool" value="true"/>
+      </property>
+      <property name="Print" type="string" value="xfce4-screenshooter"/>
+      <property name="&lt;Primary&gt;Escape" type="string" value="xfdesktop --menu"/>
+      <property name="&lt;Shift&gt;Print" type="string" value="xfce4-screenshooter -r"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Delete" type="string" value="xfce4-session-logout"/>
+      <property name="&lt;Alt&gt;&lt;Super&gt;s" type="string" value="orca"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;t" type="string" value="exo-open --launch TerminalEmulator"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;f" type="string" value="thunar"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;l" type="string" value="xflock4"/>
+      <property name="&lt;Alt&gt;F1" type="string" value="xfce4-popup-applicationsmenu"/>
+      <property name="&lt;Super&gt;p" type="string" value="xfce4-display-settings --minimal"/>
+      <property name="&lt;Primary&gt;&lt;Shift&gt;Escape" type="string" value="xfce4-taskmanager"/>
+      <property name="&lt;Super&gt;e" type="string" value="thunar"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Escape" type="string" value="xkill"/>
+      <property name="HomePage" type="string" value="exo-open --launch WebBrowser"/>
+      <property name="XF86Display" type="string" value="xfce4-display-settings --minimal"/>
+      <property name="override" type="bool" value="true"/>
+      <property name="&lt;Super&gt;d" type="string" value="rofi -show drun"/>
+      <property name="&lt;Super&gt;Return" type="string" value="alacritty"/>
+    </property>
+  </property>
+  <property name="xfwm4" type="empty">
+    <property name="default" type="empty">
+      <property name="&lt;Alt&gt;Insert" type="empty"/>
+      <property name="Escape" type="empty"/>
+      <property name="Left" type="empty"/>
+      <property name="Right" type="empty"/>
+      <property name="Up" type="empty"/>
+      <property name="Down" type="empty"/>
+      <property name="&lt;Alt&gt;Tab" type="empty"/>
+      <property name="&lt;Alt&gt;&lt;Shift&gt;Tab" type="empty"/>
+      <property name="&lt;Alt&gt;Delete" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Down" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Left" type="empty"/>
+      <property name="&lt;Shift&gt;&lt;Alt&gt;Page_Down" type="empty"/>
+      <property name="&lt;Alt&gt;F4" type="empty"/>
+      <property name="&lt;Alt&gt;F6" type="empty"/>
+      <property name="&lt;Alt&gt;F7" type="empty"/>
+      <property name="&lt;Alt&gt;F8" type="empty"/>
+      <property name="&lt;Alt&gt;F9" type="empty"/>
+      <property name="&lt;Alt&gt;F10" type="empty"/>
+      <property name="&lt;Alt&gt;F11" type="empty"/>
+      <property name="&lt;Alt&gt;F12" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Shift&gt;&lt;Alt&gt;Left" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;End" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Home" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Shift&gt;&lt;Alt&gt;Right" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Shift&gt;&lt;Alt&gt;Up" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_1" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_2" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_3" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_4" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_5" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_6" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_7" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_8" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;KP_9" type="empty"/>
+      <property name="&lt;Alt&gt;space" type="empty"/>
+      <property name="&lt;Shift&gt;&lt;Alt&gt;Page_Up" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Right" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;d" type="empty"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Up" type="empty"/>
+      <property name="&lt;Super&gt;Tab" type="empty"/>
+      <property name="&lt;Primary&gt;F1" type="empty"/>
+      <property name="&lt;Primary&gt;F2" type="empty"/>
+      <property name="&lt;Primary&gt;F3" type="empty"/>
+      <property name="&lt;Primary&gt;F4" type="empty"/>
+      <property name="&lt;Primary&gt;F5" type="empty"/>
+      <property name="&lt;Primary&gt;F6" type="empty"/>
+      <property name="&lt;Primary&gt;F7" type="empty"/>
+      <property name="&lt;Primary&gt;F8" type="empty"/>
+      <property name="&lt;Primary&gt;F9" type="empty"/>
+      <property name="&lt;Primary&gt;F10" type="empty"/>
+      <property name="&lt;Primary&gt;F11" type="empty"/>
+      <property name="&lt;Primary&gt;F12" type="empty"/>
+      <property name="&lt;Super&gt;KP_Left" type="empty"/>
+      <property name="&lt;Super&gt;KP_Right" type="empty"/>
+      <property name="&lt;Super&gt;KP_Down" type="empty"/>
+      <property name="&lt;Super&gt;KP_Up" type="empty"/>
+      <property name="&lt;Super&gt;KP_Page_Up" type="empty"/>
+      <property name="&lt;Super&gt;KP_Home" type="empty"/>
+      <property name="&lt;Super&gt;KP_End" type="empty"/>
+      <property name="&lt;Super&gt;KP_Next" type="empty"/>
+    </property>
+    <property name="custom" type="empty">
+      <property name="&lt;Primary&gt;F12" type="string" value="workspace_12_key"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Down" type="string" value="down_workspace_key"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;End" type="string" value="move_window_next_workspace_key"/>
+      <property name="&lt;Primary&gt;&lt;Shift&gt;&lt;Alt&gt;Left" type="string" value="move_window_left_key"/>
+      <property name="Right" type="string" value="right_key"/>
+      <property name="&lt;Shift&gt;&lt;Alt&gt;Page_Down" type="string" value="lower_window_key"/>
+      <property name="&lt;Primary&gt;&lt;Shift&gt;&lt;Alt&gt;Right" type="string" value="move_window_right_key"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Right" type="string" value="right_workspace_key"/>
+      <property name="&lt;Alt&gt;F6" type="string" value="stick_window_key"/>
+      <property name="&lt;Primary&gt;F11" type="string" value="workspace_11_key"/>
+      <property name="&lt;Alt&gt;Delete" type="string" value="del_workspace_key"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;d" type="string" value="show_desktop_key"/>
+      <property name="&lt;Super&gt;KP_Page_Up" type="string" value="tile_up_right_key"/>
+      <property name="&lt;Alt&gt;F7" type="string" value="move_window_key"/>
+      <property name="&lt;Alt&gt;space" type="string" value="popup_menu_key"/>
+      <property name="&lt;Super&gt;KP_Home" type="string" value="tile_up_left_key"/>
+      <property name="Escape" type="string" value="cancel_key"/>
+      <property name="&lt;Super&gt;KP_Next" type="string" value="tile_down_right_key"/>
+      <property name="&lt;Shift&gt;&lt;Alt&gt;Page_Up" type="string" value="raise_window_key"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Home" type="string" value="move_window_prev_workspace_key"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Left" type="string" value="left_workspace_key"/>
+      <property name="&lt;Alt&gt;F12" type="string" value="above_key"/>
+      <property name="&lt;Primary&gt;&lt;Shift&gt;&lt;Alt&gt;Up" type="string" value="move_window_up_key"/>
+      <property name="&lt;Alt&gt;F8" type="string" value="resize_window_key"/>
+      <property name="&lt;Super&gt;KP_End" type="string" value="tile_down_left_key"/>
+      <property name="&lt;Primary&gt;&lt;Alt&gt;Up" type="string" value="up_workspace_key"/>
+      <property name="&lt;Alt&gt;F9" type="string" value="hide_window_key"/>
+      <property name="&lt;Primary&gt;F10" type="string" value="workspace_10_key"/>
+      <property name="Left" type="string" value="left_key"/>
+      <property name="&lt;Alt&gt;Insert" type="string" value="add_workspace_key"/>
+      <property name="override" type="bool" value="true"/>
+      <property name="&lt;Super&gt;q" type="string" value="close_window_key"/>
+      <property name="Down" type="string" value="down_key"/>
+      <property name="Up" type="string" value="up_key"/>
+      <property name="&lt;Super&gt;f" type="string" value="maximize_window_key"/>
+      <property name="&lt;Super&gt;Up" type="string" value="tile_up_key"/>
+      <property name="&lt;Super&gt;Down" type="string" value="tile_down_key"/>
+      <property name="&lt;Super&gt;Left" type="string" value="tile_left_key"/>
+      <property name="&lt;Super&gt;Right" type="string" value="tile_right_key"/>
+      <property name="&lt;Super&gt;2" type="string" value="workspace_2_key"/>
+      <property name="&lt;Super&gt;1" type="string" value="workspace_1_key"/>
+      <property name="&lt;Super&gt;3" type="string" value="workspace_3_key"/>
+      <property name="&lt;Super&gt;4" type="string" value="workspace_4_key"/>
+      <property name="&lt;Super&gt;5" type="string" value="workspace_5_key"/>
+      <property name="&lt;Super&gt;6" type="string" value="workspace_6_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;exclam" type="string" value="move_window_workspace_1_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;at" type="string" value="move_window_workspace_2_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;numbersign" type="string" value="move_window_workspace_3_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;dollar" type="string" value="move_window_workspace_4_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;percent" type="string" value="move_window_workspace_5_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;asciicircum" type="string" value="move_window_workspace_6_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;ampersand" type="string" value="move_window_workspace_7_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;asterisk" type="string" value="move_window_workspace_8_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;parenleft" type="string" value="move_window_workspace_9_key"/>
+      <property name="&lt;Super&gt;Tab" type="string" value="next_workspace_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;ISO_Left_Tab" type="string" value="prev_workspace_key"/>
+      <property name="&lt;Super&gt;7" type="string" value="workspace_7_key"/>
+      <property name="&lt;Super&gt;8" type="string" value="workspace_8_key"/>
+      <property name="&lt;Super&gt;9" type="string" value="workspace_9_key"/>
+      <property name="&lt;Shift&gt;&lt;Super&gt;f" type="string" value="fullscreen_key"/>
+      <property name="&lt;Super&gt;j" type="string" value="cycle_windows_key"/>
+      <property name="&lt;Super&gt;k" type="string" value="cycle_reverse_windows_key"/>
+    </property>
+  </property>
+  <property name="providers" type="array">
+    <value type="string" value="commands"/>
+    <value type="string" value="xfwm4"/>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml
new file mode 100644
index 0000000..d67d43b
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-notifyd.xml
@@ -0,0 +1,10 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfce4-notifyd" version="1.0">
+  <property name="log-max-size-enabled" type="bool" value="true"/>
+  <property name="applications" type="empty">
+    <property name="known_applications" type="array">
+      <value type="string" value="xfce4-power-manager"/>
+    </property>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
new file mode 100644
index 0000000..2bf57ad
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
@@ -0,0 +1,95 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfce4-panel" version="1.0">
+  <property name="configver" type="int" value="2"/>
+  <property name="panels" type="array">
+    <value type="int" value="1"/>
+    <property name="dark-mode" type="bool" value="true"/>
+    <property name="panel-1" type="empty">
+      <property name="position" type="string" value="p=8;x=960;y=1183"/>
+      <property name="length" type="double" value="100"/>
+      <property name="position-locked" type="bool" value="true"/>
+      <property name="icon-size" type="uint" value="29"/>
+      <property name="size" type="uint" value="31"/>
+      <property name="plugin-ids" type="array">
+        <value type="int" value="11"/>
+        <value type="int" value="4"/>
+        <value type="int" value="5"/>
+        <value type="int" value="2"/>
+        <value type="int" value="3"/>
+        <value type="int" value="6"/>
+        <value type="int" value="7"/>
+        <value type="int" value="8"/>
+        <value type="int" value="9"/>
+      </property>
+      <property name="background-style" type="uint" value="0"/>
+      <property name="mode" type="uint" value="0"/>
+    </property>
+  </property>
+  <property name="plugins" type="empty">
+    <property name="plugin-2" type="string" value="tasklist">
+      <property name="grouping" type="uint" value="1"/>
+      <property name="show-labels" type="bool" value="true"/>
+      <property name="flat-buttons" type="bool" value="false"/>
+      <property name="show-handle" type="bool" value="false"/>
+      <property name="show-tooltips" type="bool" value="false"/>
+      <property name="sort-order" type="uint" value="1"/>
+    </property>
+    <property name="plugin-3" type="string" value="separator">
+      <property name="expand" type="bool" value="true"/>
+      <property name="style" type="uint" value="0"/>
+    </property>
+    <property name="plugin-4" type="string" value="pager">
+      <property name="rows" type="uint" value="1"/>
+      <property name="miniature-view" type="bool" value="false"/>
+      <property name="numbering" type="bool" value="false"/>
+      <property name="workspace-scrolling" type="bool" value="true"/>
+      <property name="wrap-workspaces" type="bool" value="false"/>
+    </property>
+    <property name="plugin-5" type="string" value="separator">
+      <property name="style" type="uint" value="1"/>
+      <property name="expand" type="bool" value="false"/>
+    </property>
+    <property name="plugin-6" type="string" value="systray">
+      <property name="square-icons" type="bool" value="true"/>
+    </property>
+    <property name="plugin-7" type="string" value="separator">
+      <property name="style" type="uint" value="0"/>
+    </property>
+    <property name="plugin-8" type="string" value="clock">
+      <property name="mode" type="uint" value="2"/>
+      <property name="digital-layout" type="uint" value="3"/>
+      <property name="digital-time-font" type="string" value="Iosevka Nerd Font Propo Semi-Bold Oblique 14"/>
+    </property>
+    <property name="plugin-9" type="string" value="separator">
+      <property name="style" type="uint" value="0"/>
+    </property>
+    <property name="plugin-11" type="string" value="whiskermenu">
+      <property name="button-icon" type="string" value="/usr/share/tonarchy/favicon.png"/>
+      <property name="menu-width" type="int" value="499"/>
+      <property name="launcher-icon-size" type="int" value="1"/>
+      <property name="category-show-name" type="bool" value="true"/>
+      <property name="launcher-show-tooltip" type="bool" value="true"/>
+      <property name="launcher-show-description" type="bool" value="true"/>
+      <property name="view-mode" type="int" value="2"/>
+      <property name="launcher-show-name" type="bool" value="false"/>
+      <property name="favorites" type="array">
+      </property>
+      <property name="recent" type="array">
+        <value type="string" value="Alacritty.desktop"/>
+        <value type="string" value="firefox.desktop"/>
+        <value type="string" value="xfce-settings-manager.desktop"/>
+        <value type="string" value="xfce-keyboard-settings.desktop"/>
+        <value type="string" value="rofi.desktop"/>
+      </property>
+      <property name="position-categories-alternate" type="bool" value="true"/>
+      <property name="position-categories-horizontal" type="bool" value="false"/>
+      <property name="position-profile-alternate" type="bool" value="true"/>
+      <property name="position-search-alternate" type="bool" value="false"/>
+      <property name="position-commands-alternate" type="bool" value="false"/>
+      <property name="profile-shape" type="int" value="0"/>
+      <property name="button-single-row" type="bool" value="false"/>
+      <property name="default-category" type="int" value="2"/>
+    </property>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml
new file mode 100644
index 0000000..be9b2e3
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml
@@ -0,0 +1,8 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfce4-power-manager" version="1.0">
+  <property name="xfce4-power-manager" type="empty">
+    <property name="brightness-switch-restore-on-exit" type="int" value="1"/>
+    <property name="brightness-switch" type="int" value="0"/>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-settings-editor.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-settings-editor.xml
new file mode 100644
index 0000000..61f92f8
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-settings-editor.xml
@@ -0,0 +1,9 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfce4-settings-editor" version="1.0">
+  <property name="last" type="empty">
+    <property name="window-width" type="int" value="624"/>
+    <property name="window-height" type="int" value="450"/>
+    <property name="paned-position" type="int" value="180"/>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-settings-manager.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-settings-manager.xml
new file mode 100644
index 0000000..7b23a35
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfce4-settings-manager.xml
@@ -0,0 +1,8 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfce4-settings-manager" version="1.0">
+  <property name="last" type="empty">
+    <property name="window-width" type="int" value="824"/>
+    <property name="window-height" type="int" value="500"/>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml
new file mode 100644
index 0000000..5402b65
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml
@@ -0,0 +1,94 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xfwm4" version="1.0">
+  <property name="general" type="empty">
+    <property name="workspace_names" type="array">
+      <value type="string" value="1"/>
+      <value type="string" value="2"/>
+      <value type="string" value="3"/>
+      <value type="string" value="4"/>
+      <value type="string" value="5"/>
+      <value type="string" value="Workspace 6"/>
+      <value type="string" value="Workspace 7"/>
+    </property>
+    <property name="workspace_count" type="int" value="5"/>
+    <property name="activate_action" type="string" value="bring"/>
+    <property name="borderless_maximize" type="bool" value="true"/>
+    <property name="box_move" type="bool" value="false"/>
+    <property name="box_resize" type="bool" value="false"/>
+    <property name="button_layout" type="string" value="O|SHMC"/>
+    <property name="button_offset" type="int" value="0"/>
+    <property name="button_spacing" type="int" value="0"/>
+    <property name="click_to_focus" type="bool" value="true"/>
+    <property name="cycle_apps_only" type="bool" value="false"/>
+    <property name="cycle_draw_frame" type="bool" value="true"/>
+    <property name="cycle_raise" type="bool" value="false"/>
+    <property name="cycle_hidden" type="bool" value="true"/>
+    <property name="cycle_minimum" type="bool" value="true"/>
+    <property name="cycle_minimized" type="bool" value="false"/>
+    <property name="cycle_preview" type="bool" value="true"/>
+    <property name="cycle_tabwin_mode" type="int" value="0"/>
+    <property name="cycle_workspaces" type="bool" value="false"/>
+    <property name="double_click_action" type="string" value="maximize"/>
+    <property name="double_click_distance" type="int" value="5"/>
+    <property name="double_click_time" type="int" value="250"/>
+    <property name="easy_click" type="string" value="Alt"/>
+    <property name="focus_delay" type="int" value="250"/>
+    <property name="focus_hint" type="bool" value="true"/>
+    <property name="focus_new" type="bool" value="true"/>
+    <property name="frame_opacity" type="int" value="100"/>
+    <property name="frame_border_top" type="int" value="0"/>
+    <property name="full_width_title" type="bool" value="true"/>
+    <property name="horiz_scroll_opacity" type="bool" value="false"/>
+    <property name="inactive_opacity" type="int" value="100"/>
+    <property name="maximized_offset" type="int" value="0"/>
+    <property name="mousewheel_rollup" type="bool" value="true"/>
+    <property name="move_opacity" type="int" value="100"/>
+    <property name="placement_mode" type="string" value="center"/>
+    <property name="placement_ratio" type="int" value="20"/>
+    <property name="popup_opacity" type="int" value="100"/>
+    <property name="prevent_focus_stealing" type="bool" value="false"/>
+    <property name="raise_delay" type="int" value="250"/>
+    <property name="raise_on_click" type="bool" value="true"/>
+    <property name="raise_on_focus" type="bool" value="false"/>
+    <property name="raise_with_any_button" type="bool" value="true"/>
+    <property name="repeat_urgent_blink" type="bool" value="false"/>
+    <property name="resize_opacity" type="int" value="100"/>
+    <property name="scroll_workspaces" type="bool" value="true"/>
+    <property name="shadow_delta_height" type="int" value="0"/>
+    <property name="shadow_delta_width" type="int" value="0"/>
+    <property name="shadow_delta_x" type="int" value="0"/>
+    <property name="shadow_delta_y" type="int" value="-3"/>
+    <property name="shadow_opacity" type="int" value="50"/>
+    <property name="show_app_icon" type="bool" value="false"/>
+    <property name="show_dock_shadow" type="bool" value="true"/>
+    <property name="show_frame_shadow" type="bool" value="true"/>
+    <property name="show_popup_shadow" type="bool" value="false"/>
+    <property name="snap_resist" type="bool" value="false"/>
+    <property name="snap_to_border" type="bool" value="true"/>
+    <property name="snap_to_windows" type="bool" value="false"/>
+    <property name="snap_width" type="int" value="10"/>
+    <property name="vblank_mode" type="string" value="auto"/>
+    <property name="theme" type="string" value="Default"/>
+    <property name="tile_on_move" type="bool" value="true"/>
+    <property name="title_alignment" type="string" value="center"/>
+    <property name="title_font" type="string" value="Iosevka Nerd Font Propo Heavy Oblique 12"/>
+    <property name="title_horizontal_offset" type="int" value="0"/>
+    <property name="titleless_maximize" type="bool" value="false"/>
+    <property name="title_shadow_active" type="string" value="false"/>
+    <property name="title_shadow_inactive" type="string" value="false"/>
+    <property name="title_vertical_offset_active" type="int" value="0"/>
+    <property name="title_vertical_offset_inactive" type="int" value="0"/>
+    <property name="toggle_workspaces" type="bool" value="false"/>
+    <property name="unredirect_overlays" type="bool" value="true"/>
+    <property name="urgent_blink" type="bool" value="false"/>
+    <property name="use_compositing" type="bool" value="true"/>
+    <property name="wrap_cycle" type="bool" value="true"/>
+    <property name="wrap_layout" type="bool" value="true"/>
+    <property name="wrap_resistance" type="int" value="10"/>
+    <property name="wrap_windows" type="bool" value="false"/>
+    <property name="wrap_workspaces" type="bool" value="false"/>
+    <property name="zoom_desktop" type="bool" value="true"/>
+    <property name="zoom_pointer" type="bool" value="true"/>
+  </property>
+</channel>
diff --git a/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
new file mode 100644
index 0000000..4dc2518
--- /dev/null
+++ b/assets/firefox/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.1" encoding="UTF-8"?>
+
+<channel name="xsettings" version="1.0">
+  <property name="Net" type="empty">
+    <property name="ThemeName" type="string" value="Adwaita-dark"/>
+    <property name="IconThemeName" type="string" value="Adwaita"/>
+    <property name="DoubleClickTime" type="empty"/>
+    <property name="DoubleClickDistance" type="empty"/>
+    <property name="DndDragThreshold" type="empty"/>
+    <property name="CursorBlink" type="empty"/>
+    <property name="CursorBlinkTime" type="empty"/>
+    <property name="SoundThemeName" type="empty"/>
+    <property name="EnableEventSounds" type="empty"/>
+    <property name="EnableInputFeedbackSounds" type="empty"/>
+  </property>
+  <property name="Xft" type="empty">
+    <property name="DPI" type="empty"/>
+    <property name="Antialias" type="empty"/>
+    <property name="Hinting" type="empty"/>
+    <property name="HintStyle" type="empty"/>
+    <property name="RGBA" type="empty"/>
+  </property>
+  <property name="Gtk" type="empty">
+    <property name="CanChangeAccels" type="empty"/>
+    <property name="ColorPalette" type="empty"/>
+    <property name="FontName" type="string" value="Iosevka Nerd Font Ultra-Bold 16"/>
+    <property name="MonospaceFontName" type="empty"/>
+    <property name="IconSizes" type="empty"/>
+    <property name="KeyThemeName" type="empty"/>
+    <property name="MenuImages" type="empty"/>
+    <property name="ButtonImages" type="empty"/>
+    <property name="MenuBarAccel" type="empty"/>
+    <property name="CursorThemeName" type="empty"/>
+    <property name="CursorThemeSize" type="empty"/>
+    <property name="DecorationLayout" type="string" value="icon,menu:minimize,maximize,close"/>
+    <property name="DialogsUseHeader" type="empty"/>
+    <property name="TitlebarMiddleClick" type="empty"/>
+  </property>
+  <property name="Gdk" type="empty">
+    <property name="WindowScalingFactor" type="int" value="1"/>
+  </property>
+</channel>
diff --git a/assets/wallpapers/wall1.jpg b/assets/wallpapers/wall1.jpg
new file mode 100644
index 0000000..b242f2f
Binary files /dev/null and b/assets/wallpapers/wall1.jpg differ
diff --git a/iso/airootfs/etc/group b/iso/airootfs/etc/group
new file mode 100644
index 0000000..18acc30
--- /dev/null
+++ b/iso/airootfs/etc/group
@@ -0,0 +1 @@
+root:x:0:root
diff --git a/iso/airootfs/etc/gshadow b/iso/airootfs/etc/gshadow
new file mode 100644
index 0000000..3d5d111
--- /dev/null
+++ b/iso/airootfs/etc/gshadow
@@ -0,0 +1 @@
+root:::root
diff --git a/iso/airootfs/etc/mkinitcpio.conf.d/archiso.conf b/iso/airootfs/etc/mkinitcpio.conf.d/archiso.conf
new file mode 100644
index 0000000..bc796a6
--- /dev/null
+++ b/iso/airootfs/etc/mkinitcpio.conf.d/archiso.conf
@@ -0,0 +1 @@
+HOOKS=(base udev modconf archiso block filesystems keyboard)
diff --git a/iso/airootfs/etc/pacman.d/mirrorlist b/iso/airootfs/etc/pacman.d/mirrorlist
new file mode 100644
index 0000000..8175eb8
--- /dev/null
+++ b/iso/airootfs/etc/pacman.d/mirrorlist
@@ -0,0 +1,5 @@
+Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch
+Server = https://mirror.rackspace.com/archlinux/$repo/os/$arch
+Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch
+Server = https://archlinux.mirror.rafal.ca/$repo/os/$arch
+Server = https://mirror.leaseweb.net/archlinux/$repo/os/$arch
diff --git a/iso/airootfs/etc/passwd b/iso/airootfs/etc/passwd
new file mode 100644
index 0000000..aebc492
--- /dev/null
+++ b/iso/airootfs/etc/passwd
@@ -0,0 +1 @@
+root:x:0:0:root:/root:/bin/bash
diff --git a/iso/airootfs/etc/shadow b/iso/airootfs/etc/shadow
new file mode 100644
index 0000000..7edfd69
--- /dev/null
+++ b/iso/airootfs/etc/shadow
@@ -0,0 +1 @@
+root::14871::::::
diff --git a/iso/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf b/iso/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf
new file mode 100644
index 0000000..fc7465e
--- /dev/null
+++ b/iso/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf
@@ -0,0 +1,3 @@
+[Service]
+ExecStart=
+ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root %I $TERM
diff --git a/iso/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service b/iso/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service
new file mode 120000
index 0000000..e874a9b
--- /dev/null
+++ b/iso/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service
@@ -0,0 +1 @@
+/usr/lib/systemd/system/NetworkManager.service
\ No newline at end of file
diff --git a/iso/airootfs/etc/systemd/system/systemd-firstboot.service b/iso/airootfs/etc/systemd/system/systemd-firstboot.service
new file mode 120000
index 0000000..dc1dc0c
--- /dev/null
+++ b/iso/airootfs/etc/systemd/system/systemd-firstboot.service
@@ -0,0 +1 @@
+/dev/null
\ No newline at end of file
diff --git a/iso/airootfs/root/.automated_script.sh b/iso/airootfs/root/.automated_script.sh
new file mode 100644
index 0000000..155c836
--- /dev/null
+++ b/iso/airootfs/root/.automated_script.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+if [[ $(tty) == "/dev/tty1" ]]; then
+    setfont ter-v32b
+    pacman-key --init
+    pacman-key --populate archlinux
+    clear
+    /usr/local/bin/tonarchy
+fi
diff --git a/iso/airootfs/root/.bash_profile b/iso/airootfs/root/.bash_profile
new file mode 100644
index 0000000..77b20ea
--- /dev/null
+++ b/iso/airootfs/root/.bash_profile
@@ -0,0 +1,5 @@
+[[ -f ~/.bashrc ]] && . ~/.bashrc
+
+if [[ -z $DISPLAY && $(tty) == /dev/tty1 ]]; then
+    exec ~/.automated_script.sh
+fi
diff --git a/iso/airootfs/usr/local/bin/tonarchy b/iso/airootfs/usr/local/bin/tonarchy
new file mode 100755
index 0000000..18c50d2
Binary files /dev/null and b/iso/airootfs/usr/local/bin/tonarchy differ
diff --git a/iso/efiboot/loader/entries/tonarchy.conf b/iso/efiboot/loader/entries/tonarchy.conf
new file mode 100644
index 0000000..2ff98cb
--- /dev/null
+++ b/iso/efiboot/loader/entries/tonarchy.conf
@@ -0,0 +1,4 @@
+title   Tonarchy (x86_64, UEFI)
+linux   /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux
+initrd  /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img
+options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL%
diff --git a/iso/efiboot/loader/loader.conf b/iso/efiboot/loader/loader.conf
new file mode 100644
index 0000000..4664463
--- /dev/null
+++ b/iso/efiboot/loader/loader.conf
@@ -0,0 +1,2 @@
+timeout 3
+default tonarchy.conf
diff --git a/iso/packages.x86_64 b/iso/packages.x86_64
new file mode 100644
index 0000000..7f9dcb6
--- /dev/null
+++ b/iso/packages.x86_64
@@ -0,0 +1,24 @@
+base
+linux
+linux-firmware
+mkinitcpio
+mkinitcpio-archiso
+squashfs-tools
+efibootmgr
+ncurses
+gcc
+make
+git
+pacman
+arch-install-scripts
+e2fsprogs
+dosfstools
+btrfs-progs
+gptfdisk
+util-linux
+terminus-font
+fzf
+kbd
+networkmanager
+dhcpcd
+archlinux-keyring
diff --git a/iso/pacman.conf b/iso/pacman.conf
new file mode 100644
index 0000000..8382015
--- /dev/null
+++ b/iso/pacman.conf
@@ -0,0 +1,13 @@
+[options]
+HoldPkg = pacman glibc
+Architecture = auto
+CheckSpace
+ParallelDownloads = 5
+SigLevel = Required DatabaseOptional
+LocalFileSigLevel = Optional
+
+[core]
+Include = /etc/pacman.d/mirrorlist
+
+[extra]
+Include = /etc/pacman.d/mirrorlist
diff --git a/iso/profiledef.sh b/iso/profiledef.sh
new file mode 100644
index 0000000..cdf5a9d
--- /dev/null
+++ b/iso/profiledef.sh
@@ -0,0 +1,21 @@
+#!/usr/bin/env bash
+
+iso_name="tonarchy"
+iso_label="TONARCHY_$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m)"
+iso_publisher="Tony <https://tonarchy.org>"
+iso_application="Tonarchy Installer"
+iso_version="$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y.%m.%d)"
+install_dir="arch"
+buildmodes=('iso')
+bootmodes=('uefi.systemd-boot')
+arch="x86_64"
+pacman_conf="pacman.conf"
+airootfs_image_type="squashfs"
+airootfs_image_tool_options=('-comp' 'zstd' '-Xcompression-level' '15' '-b' '512K')
+bootstrap_tarball_compression=('zstd' '-c' '-T0' '--auto-threads=logical' '--long' '-19')
+file_permissions=(
+  ["/root/.automated_script.sh"]="0:0:755"
+  ["/usr/local/bin/tonarchy"]="0:0:755"
+  ["/etc/shadow"]="0:0:400"
+  ["/etc/gshadow"]="0:0:400"
+)
diff --git a/src/tonarchy-mkiso.c b/src/tonarchy-mkiso.c
new file mode 100644
index 0000000..1cf0b14
--- /dev/null
+++ b/src/tonarchy-mkiso.c
@@ -0,0 +1,344 @@
+#define _GNU_SOURCE
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <time.h>
+
+static FILE *log_file = NULL;
+
+void logger_init(const char *log_path) {
+    log_file = fopen(log_path, "a");
+    if (log_file) {
+        time_t now = time(NULL);
+        char *timestamp = ctime(&now);
+        timestamp[strlen(timestamp) - 1] = '\0';
+        fprintf(log_file, "\n=== Tonarchy ISO Build Log - %s ===\n", timestamp);
+        fflush(log_file);
+    }
+}
+
+void logger_close(void) {
+    if (log_file) {
+        fclose(log_file);
+        log_file = NULL;
+    }
+}
+
+#define LOG_INFO(fmt, ...) do { \
+    printf("[INFO] " fmt "\n", ##__VA_ARGS__); \
+    if (log_file) { \
+        fprintf(log_file, "[INFO] " fmt "\n", ##__VA_ARGS__); \
+        fflush(log_file); \
+    } \
+} while(0)
+
+#define LOG_ERROR(fmt, ...) do { \
+    fprintf(stderr, "[ERROR] " fmt "\n", ##__VA_ARGS__); \
+    if (log_file) { \
+        fprintf(log_file, "[ERROR] " fmt "\n", ##__VA_ARGS__); \
+        fflush(log_file); \
+    } \
+} while(0)
+
+#define LOG_WARN(fmt, ...) do { \
+    fprintf(stderr, "[WARN] " fmt "\n", ##__VA_ARGS__); \
+    if (log_file) { \
+        fprintf(log_file, "[WARN] " fmt "\n", ##__VA_ARGS__); \
+        fflush(log_file); \
+    } \
+} while(0)
+
+int create_directory(const char *path, mode_t mode);
+
+int run_command(const char *cmd) {
+    LOG_INFO("Running: %s", cmd);
+    int ret = system(cmd);
+    if (ret != 0) {
+        LOG_ERROR("Command failed with code %d: %s", ret, cmd);
+        return 0;
+    }
+    return 1;
+}
+
+int create_directory(const char *path, mode_t mode) {
+    struct stat st;
+    if (stat(path, &st) == 0) {
+        return 1;
+    }
+
+    if (mkdir(path, mode) != 0) {
+        LOG_ERROR("Failed to create directory: %s", path);
+        return 0;
+    }
+    return 1;
+}
+
+int build_tonarchy_static(const char *tonarchy_src) {
+    LOG_INFO("Building tonarchy static binary...");
+
+    char cmd[1024];
+    snprintf(cmd, sizeof(cmd), "cd '%s' && make clean && make static CC=musl-gcc", tonarchy_src);
+
+    if (!run_command(cmd)) {
+        LOG_ERROR("Failed to build tonarchy-static");
+        return 0;
+    }
+
+    char binary_path[512];
+    snprintf(binary_path, sizeof(binary_path), "%s/tonarchy-static", tonarchy_src);
+
+    struct stat st;
+    if (stat(binary_path, &st) != 0) {
+        LOG_ERROR("tonarchy-static binary not found at %s", binary_path);
+        return 0;
+    }
+
+    LOG_INFO("Built tonarchy-static successfully");
+    return 1;
+}
+
+int clean_airootfs(const char *iso_profile) {
+    LOG_INFO("Cleaning airootfs...");
+
+    char cmd[512];
+
+    snprintf(cmd, sizeof(cmd), "sudo rm -rf '%s/airootfs/usr'", iso_profile);
+    if (!run_command(cmd)) {
+        LOG_WARN("Failed to clean airootfs/usr");
+    }
+
+    snprintf(cmd, sizeof(cmd), "sudo rm -rf '%s/airootfs/root/tonarchy'", iso_profile);
+    if (!run_command(cmd)) {
+        LOG_WARN("Failed to clean airootfs/root/tonarchy");
+    }
+
+    return 1;
+}
+
+int clean_work_dir(const char *work_dir) {
+    LOG_INFO("Cleaning work directory...");
+
+    char cmd[512];
+
+    snprintf(cmd, sizeof(cmd), "sudo umount -R '%s' 2>/dev/null || true", work_dir);
+    run_command(cmd);
+
+    snprintf(cmd, sizeof(cmd), "sudo rm -rf '%s'", work_dir);
+    if (!run_command(cmd)) {
+        LOG_ERROR("Failed to remove work directory: %s", work_dir);
+        return 0;
+    }
+
+    sync();
+    sleep(1);
+
+    return 1;
+}
+
+int prepare_airootfs(const char *iso_profile, const char *tonarchy_src) {
+    LOG_INFO("Preparing airootfs...");
+
+    char cmd[1024];
+    char src_path[512];
+    char dest_path[512];
+
+    snprintf(cmd, sizeof(cmd), "mkdir -p '%s/airootfs/usr/local/bin'", iso_profile);
+    if (!run_command(cmd)) {
+        LOG_ERROR("Failed to create airootfs/usr/local/bin");
+        return 0;
+    }
+
+    snprintf(cmd, sizeof(cmd), "mkdir -p '%s/airootfs/usr/share'", iso_profile);
+    if (!run_command(cmd)) {
+        LOG_ERROR("Failed to create airootfs/usr/share");
+        return 0;
+    }
+
+    snprintf(src_path, sizeof(src_path), "%s/tonarchy-static", tonarchy_src);
+    snprintf(dest_path, sizeof(dest_path), "%s/airootfs/usr/local/bin/tonarchy", iso_profile);
+    snprintf(cmd, sizeof(cmd), "cp '%s' '%s'", src_path, dest_path);
+    if (!run_command(cmd)) {
+        LOG_ERROR("Failed to copy tonarchy binary");
+        return 0;
+    }
+
+    snprintf(cmd, sizeof(cmd), "chmod 755 '%s'", dest_path);
+    if (!run_command(cmd)) {
+        LOG_ERROR("Failed to set permissions on tonarchy binary");
+        return 0;
+    }
+
+    snprintf(src_path, sizeof(src_path), "%s/assets/firefox", tonarchy_src);
+    snprintf(dest_path, sizeof(dest_path), "%s/airootfs/usr/share/tonarchy", iso_profile);
+    snprintf(cmd, sizeof(cmd), "cp -r '%s' '%s'", src_path, dest_path);
+    if (!run_command(cmd)) {
+        LOG_ERROR("Failed to copy tonarchy config files");
+        return 0;
+    }
+
+    snprintf(src_path, sizeof(src_path), "%s/assets/wallpapers", tonarchy_src);
+    snprintf(dest_path, sizeof(dest_path), "%s/airootfs/usr/share/wallpapers", iso_profile);
+    snprintf(cmd, sizeof(cmd), "cp -r '%s' '%s' 2>/dev/null || true", src_path, dest_path);
+    run_command(cmd);
+
+    LOG_INFO("Setting proper ownership for airootfs...");
+    snprintf(cmd, sizeof(cmd), "sudo chown -R root:root '%s/airootfs/usr'", iso_profile);
+    if (!run_command(cmd)) {
+        LOG_ERROR("Failed to set ownership on airootfs");
+        return 0;
+    }
+
+    return 1;
+}
+
+int run_mkarchiso(const char *iso_profile, const char *work_dir, const char *out_dir) {
+    LOG_INFO("Building ISO with mkarchiso...");
+
+    if (!create_directory(out_dir, 0755)) {
+        return 0;
+    }
+
+    if (!create_directory(work_dir, 0755)) {
+        return 0;
+    }
+
+    char cmd[1024];
+    snprintf(cmd, sizeof(cmd), "sudo mkarchiso -v -w '%s' -o '%s' '%s'", work_dir, out_dir, iso_profile);
+
+    if (!run_command(cmd)) {
+        LOG_ERROR("mkarchiso failed");
+        return 0;
+    }
+
+    return 1;
+}
+
+const char* find_latest_iso(const char *out_dir) {
+    static char iso_path[512];
+    char cmd[1024];
+
+    snprintf(cmd, sizeof(cmd), "ls -t '%s'/*.iso 2>/dev/null | head -n1", out_dir);
+
+    FILE *fp = popen(cmd, "r");
+    if (!fp) {
+        return NULL;
+    }
+
+    if (fgets(iso_path, sizeof(iso_path), fp) != NULL) {
+        iso_path[strcspn(iso_path, "\n")] = 0;
+        pclose(fp);
+        return iso_path;
+    }
+
+    pclose(fp);
+    return NULL;
+}
+
+int main(int argc, char *argv[]) {
+    logger_init("/tmp/tonarchy-mkiso.log");
+
+    LOG_INFO("Tonarchy ISO Builder starting...");
+
+    char tonarchy_src[512];
+    char iso_profile[512];
+    char out_dir[512];
+    const char *work_dir = "/tmp/tonarchy_iso_work";
+
+    const char *custom_iso_profile = NULL;
+    const char *custom_out_dir = NULL;
+
+    for (int i = 1; i < argc; i++) {
+        if (strcmp(argv[i], "--iso-profile") == 0 && i + 1 < argc) {
+            custom_iso_profile = argv[++i];
+        } else if (strcmp(argv[i], "--out-dir") == 0 && i + 1 < argc) {
+            custom_out_dir = argv[++i];
+        } else if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
+            printf("Usage: %s [OPTIONS]\n", argv[0]);
+            printf("\nOptions:\n");
+            printf("  --iso-profile PATH    Path to ISO profile directory (default: ./iso)\n");
+            printf("  --out-dir PATH        Output directory for ISO (default: ./out)\n");
+            printf("  -h, --help            Show this help message\n");
+            return 0;
+        }
+    }
+
+    if (getcwd(tonarchy_src, sizeof(tonarchy_src)) == NULL) {
+        LOG_ERROR("Failed to get current directory");
+        return 1;
+    }
+
+    if (custom_iso_profile) {
+        snprintf(iso_profile, sizeof(iso_profile), "%s", custom_iso_profile);
+    } else {
+        snprintf(iso_profile, sizeof(iso_profile), "%s/iso", tonarchy_src);
+    }
+
+    if (custom_out_dir) {
+        snprintf(out_dir, sizeof(out_dir), "%s", custom_out_dir);
+    } else {
+        snprintf(out_dir, sizeof(out_dir), "%s/out", tonarchy_src);
+    }
+
+    LOG_INFO("Tonarchy source: %s", tonarchy_src);
+    LOG_INFO("ISO profile: %s", iso_profile);
+    LOG_INFO("Work directory: %s", work_dir);
+    LOG_INFO("Output directory: %s", out_dir);
+
+    if (!build_tonarchy_static(tonarchy_src)) {
+        LOG_ERROR("Build failed");
+        logger_close();
+        return 1;
+    }
+
+    if (!clean_airootfs(iso_profile)) {
+        LOG_ERROR("Failed to clean airootfs");
+        logger_close();
+        return 1;
+    }
+
+    if (!clean_work_dir(work_dir)) {
+        LOG_ERROR("Failed to clean work directory");
+        logger_close();
+        return 1;
+    }
+
+    if (!prepare_airootfs(iso_profile, tonarchy_src)) {
+        LOG_ERROR("Failed to prepare airootfs");
+        logger_close();
+        return 1;
+    }
+
+    if (!run_mkarchiso(iso_profile, work_dir, out_dir)) {
+        LOG_ERROR("Failed to build ISO");
+        logger_close();
+        return 1;
+    }
+
+    if (!clean_work_dir(work_dir)) {
+        LOG_WARN("Failed to clean work directory after build");
+    }
+
+    LOG_INFO("Syncing filesystem...");
+    sync();
+    sleep(2);
+
+    const char *iso_path = find_latest_iso(out_dir);
+    if (iso_path) {
+        LOG_INFO("===================================");
+        LOG_INFO("ISO created successfully!");
+        LOG_INFO("Location: %s", iso_path);
+        LOG_INFO("Test with: make test");
+        LOG_INFO("===================================");
+    } else {
+        LOG_ERROR("ISO was built but could not be found in output directory");
+        logger_close();
+        return 1;
+    }
+
+    logger_close();
+    return 0;
+}
diff --git a/tonarchy.c b/src/tonarchy.c
similarity index 100%
rename from tonarchy.c
rename to src/tonarchy.c
diff --git a/tonarchy.h b/src/tonarchy.h
similarity index 100%
rename from tonarchy.h
rename to src/tonarchy.h
diff --git a/todo.txt b/todo.txt
new file mode 100644
index 0000000..dc02d4a
--- /dev/null
+++ b/todo.txt
@@ -0,0 +1,11 @@
+- remove suckless
+- add fd
+- add nvim dots back to xfce
+- add nvim dots to oxwm
+- make oxwm use alacritty or fix st
+- add picom config to dots and handle alacritty transparency
+- add pcmanfm or thunar to oxwm
+- modify rofi config to user one of the actual fonts
+- look into scaling in xfce
+- add 3rd option for waylanders, potentially with niri + quickshell (noctalia) or niri + waybar
+- support bios
diff --git a/packages/base.txt b/walls/packages/base.txt
similarity index 100%
rename from packages/base.txt
rename to walls/packages/base.txt
diff --git a/packages/beginner.txt b/walls/packages/beginner.txt
similarity index 100%
rename from packages/beginner.txt
rename to walls/packages/beginner.txt
diff --git a/packages/de_cinnamon.txt b/walls/packages/de_cinnamon.txt
similarity index 100%
rename from packages/de_cinnamon.txt
rename to walls/packages/de_cinnamon.txt
diff --git a/packages/de_gnome.txt b/walls/packages/de_gnome.txt
similarity index 100%
rename from packages/de_gnome.txt
rename to walls/packages/de_gnome.txt
diff --git a/packages/de_hyprland.txt b/walls/packages/de_hyprland.txt
similarity index 100%
rename from packages/de_hyprland.txt
rename to walls/packages/de_hyprland.txt
diff --git a/packages/de_kde.txt b/walls/packages/de_kde.txt
similarity index 100%
rename from packages/de_kde.txt
rename to walls/packages/de_kde.txt
diff --git a/packages/de_sway.txt b/walls/packages/de_sway.txt
similarity index 100%
rename from packages/de_sway.txt
rename to walls/packages/de_sway.txt
diff --git a/packages/dev_tools.txt b/walls/packages/dev_tools.txt
similarity index 100%
rename from packages/dev_tools.txt
rename to walls/packages/dev_tools.txt
diff --git a/packages/display_wayland.txt b/walls/packages/display_wayland.txt
similarity index 100%
rename from packages/display_wayland.txt
rename to walls/packages/display_wayland.txt
diff --git a/packages/display_xorg.txt b/walls/packages/display_xorg.txt
similarity index 100%
rename from packages/display_xorg.txt
rename to walls/packages/display_xorg.txt
diff --git a/packages/docker.txt b/walls/packages/docker.txt
similarity index 100%
rename from packages/docker.txt
rename to walls/packages/docker.txt
diff --git a/packages/gaming.txt b/walls/packages/gaming.txt
similarity index 100%
rename from packages/gaming.txt
rename to walls/packages/gaming.txt
diff --git a/packages/suckless.txt b/walls/packages/suckless.txt
similarity index 100%
rename from packages/suckless.txt
rename to walls/packages/suckless.txt