new: programming/new-tab
This commit is contained in:
		
							parent
							
								
									767da3d956
								
							
						
					
					
						commit
						ca127a9411
					
				
					 2 changed files with 201 additions and 0 deletions
				
			
		
							
								
								
									
										194
									
								
								content/programming/new-tab.tree
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								content/programming/new-tab.tree
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,194 @@
 | 
			
		|||
%% title = "on changing the Firefox New Tab, and software freedom"
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5H8S7S3M4619R112A"
 | 
			
		||||
- the date is 4th of June, 2025.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5NYWPNCRTDF05NA26"
 | 
			
		||||
- a young riki moe comes up with a _\~brilliant\~_ idea:
 | 
			
		||||
 | 
			
		||||
> I will customise my browser's New Tab page! it'll be so cool, i'll put some cool artwork there and it'll be way more fun to look at than my current `about:blank`
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5J7N58SKKH6KN09YF"
 | 
			
		||||
- so he innocently opens a blank .html file, and starts typing away.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN50MBYT24D1MRK982H"
 | 
			
		||||
    - armed with his text editor and knowledge of web technologies, he conjures up a minimal, yet aesthetic New Tab.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5DM7E3WH3YZP1701D"
 | 
			
		||||
    - pleased with the result, he goes to his Firefox's settings, sets the page as his homepage, and goes to also set it as the New Tab page...
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN5K0PR3QHFHC3C3T87"
 | 
			
		||||
        - only to find that there is no such option.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN511DJ29F4J7YF7F6R"
 | 
			
		||||
- bemused by the asymmetry in the browser's Settings page, he turns to [Kagi](https://kagi.com) in search of answers, and finds [this page](https://support.mozilla.org/en-US/questions/1085762#answer-786861), where a community member says:
 | 
			
		||||
 | 
			
		||||
> Firefox 41 no longer uses the browser.newtab.url setting in about:config because it was constantly attacked by malware. Starting in Firefox 41, you need an add-on to change the new tab page.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN514HQC0HJHV0DPXZW"
 | 
			
		||||
- Sigh.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5MGPAJNPNRJJWYFCP"
 | 
			
		||||
- so he turns to an extension proposed by the community member, only to find its UX subpar.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5EMKHBQ4XT7V57S6K"
 | 
			
		||||
    - he opens a new tab, and the address bar is focused, but the URL is not selected... so to type over it he has to hit `<kbd>Ctrl</kbd> <kbd>A</kbd>`{=html}, and only _then_ he can type in his search query.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN57RJH0Y4PCNWY6BFC"
 | 
			
		||||
        - (we'll glance over the fact that this whole affair required him to set up an entire web server on his PC, because extensions can't navigate to `file://`.)
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5WRF5WXAPZZZD4TA5"
 | 
			
		||||
- he decides to declare a bitter victory, and goes to sleep for the night.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN58DPB7S5E9RGHE821"
 | 
			
		||||
- ...
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5MP38ZHWT4KQPD8QH"
 | 
			
		||||
- the next day. 5th of June, 2025.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN533256QHE8KK80JSG"
 | 
			
		||||
- unsatisfied with the subpar UX, he decides that he must create a browser extension himself.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5SZGQ3CTT9DP8QJVF"
 | 
			
		||||
    - so he turns to [Mozilla's official documentation](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension), and conjures up his first ever `manifest.json`...
 | 
			
		||||
 | 
			
		||||
    ```json
 | 
			
		||||
    {
 | 
			
		||||
      "manifest_version": 2,
 | 
			
		||||
      "name": "riki's new tab",
 | 
			
		||||
      "version": "1.0",
 | 
			
		||||
      "description": "riki.moe's new tab page!",
 | 
			
		||||
      "icons": {
 | 
			
		||||
        "48": "icon-48.png",
 | 
			
		||||
        "96": "icon-96.png"
 | 
			
		||||
      },
 | 
			
		||||
 | 
			
		||||
      "chrome_url_overrides": {
 | 
			
		||||
        "newtab": "index.html"
 | 
			
		||||
      },
 | 
			
		||||
      "chrome_settings_overrides": {
 | 
			
		||||
        "homepage": "index.html"
 | 
			
		||||
      }
 | 
			
		||||
    }    
 | 
			
		||||
    ```
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5SSANM732FB8M6ZSV"
 | 
			
		||||
    - and with `about:debugging`'s help, installing the extension temporarily, everything seems to work!
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN57TB4QYCGQQ14B6HV"
 | 
			
		||||
- so, as suggested by [another guide](https://extensionworkshop.com/documentation/publish/package-your-extension/), he zips up the extension's files and goes to Firefox's Extensions to install it permanently.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN591B70QCPGJJFE191"
 | 
			
		||||
- but what's this!?
 | 
			
		||||
 | 
			
		||||
> This addon could not be installed because it appears to be corrupt.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5VJJ02N2JVMHHGQ49"
 | 
			
		||||
    - okay now folks. This [browser]{style="color: var(--syntax-function)"} is [Pissing]{style="color: var(--syntax-function)"} me off. I'm the original [    ]{style="white-space: pre;"} [Starwalker]{style="color: var(--syntax-function)"}
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN547317B3MJ248MZQZ"
 | 
			
		||||
- so! he looks for any issues with his packaging.
 | 
			
		||||
maybe there's an unneeded subdirectory?
 | 
			
		||||
maybe there's a missing extension ID?
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5JNV1BTNJZFSR0GEP"
 | 
			
		||||
    - or maybe Firefox is stopping him from loading the extension... just because?
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5XF90PKNZY888MM60"
 | 
			
		||||
- so he takes a wild guess: _a cryptographic signature, it must be!_
 | 
			
		||||
and looks for a way to bypass that.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5Y817KP7TYAB5ERK0"
 | 
			
		||||
    - because, fuck that.
 | 
			
		||||
    why would you need a signature on an extension you're not even gonna share with anyone.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5J2ND0NNKQ1SD87TF"
 | 
			
		||||
- and a promise appears! _Firefox Developer Edition_ ~(Electric Boogaloo)~
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5KH4PF43CRKW06N1J"
 | 
			
		||||
    - apparently, there's a special version of Firefox that can load unsigned addons!
 | 
			
		||||
    so he tries to load his .zip file in that, and...
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN52V5WWHJ6H0KHA83C"
 | 
			
		||||
        - it doesn't work!!! :oh:
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5YPQYSD7TSNJ5JKPW"
 | 
			
		||||
- dismayed, he decides it is time to sign the Deal with the Devil.
 | 
			
		||||
he will cryptographically sign his addon.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN507D4J286EBQ81DRJ"
 | 
			
		||||
    - but... that requires a Firefox account.
 | 
			
		||||
    and an API token from that account.
 | 
			
		||||
    that you pass in via a command line parameter, because fuck security, I guess.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN58HQ49AN421DM0CKE"
 | 
			
		||||
        - (imagine going through all that security charade, only to find out the official toolkit for web extensions requires passing sensitive credentials in an insecure way... ain't that fun! good thing `fish --private` exists, but huge kudos to all the other processes on my system that may have read `web-ext`'s command line arguments while it was mincing away at Doing the Signature.)
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5QQ5W6Y1S9PRTYBSE"
 | 
			
		||||
- and a 10 minutes later-break later, he has an .xpi, ready to be chewed on by Firefox.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5SD0MJ5QY9KJCTZQ5"
 | 
			
		||||
    - and all that.
 | 
			
		||||
    to change his New Tab page.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5V3RVY3CTAHY5RA6G"
 | 
			
		||||
    - God bless America.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0GYAZY3D902X36X7Y1BG6Z"
 | 
			
		||||
        - freedom of voice, freedom of choice...!
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5HHEZ8G2YGBPC562S"
 | 
			
		||||
- okay now, story time's over.
 | 
			
		||||
as already established, we've teleported ourselves to the US of A, so Now, it's Interrogation Time.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5EF3CE30MQ2YYZSFW"
 | 
			
		||||
    - why the fuck is this not just a setting.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN5BF7PD99J064M3HDZ"
 | 
			
		||||
        - "because malware." excuse me, but why the fuck is malware allowed to touch my Firefox settings.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5BXAPZ43AYEKGDRV5"
 | 
			
		||||
    - and why the fuck does loading an extension into Firefox require sending its details to Mozilla and adding it to your online developer profile.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN5R6VS27M5GN8WZBP2"
 | 
			
		||||
        - what if I don't have an internet connection at the moment.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN50FY3Q2FYM44366TS"
 | 
			
		||||
        - what if my addon contains sensitive data that I _really_ don't wanna send to foreign servers.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN5MAAGAWRS944E8TSH"
 | 
			
		||||
        - or what if I just want to change my fucking New Tab page to something I like but don't necessarily want to share with others.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN59TGB6HVKCC1PZEEB"
 | 
			
		||||
        - EVEN IF it's unlisted and nobody can see the addon, this *ABSOLUTELY SHOULD NOT BE NECESSARY.*
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5FC4RQH8K0RFPESSQ"
 | 
			
		||||
- but hey! at least I have cute furry art on my New Tab page now.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5DQ6EZZQ2H1052X00"
 | 
			
		||||
    - was it worth it?
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN5T9DPBGQY21ZSHTYY"
 | 
			
		||||
        - ...eh, maybe?
 | 
			
		||||
        I'll let you judge that.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN56GC7QS0A40D3V4HN"
 | 
			
		||||
    - I'm just sorely disappointed at where we've come, where even changing your browser's New Tab page to something custom is considered a security vulnerability.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0G5CN5SCQFHJ1Q8P74AYYK"
 | 
			
		||||
    - and this post is not meant to throw flak at Mozilla or, god forbid, any specific individual (or individual_s_).
 | 
			
		||||
    I understand where a lot of this additional security barrage comes from, and out of sheer care for regular users, I agree with it.
 | 
			
		||||
 | 
			
		||||
        % id = "01JX0G5CN5YFV15HV6YWJ14G8K"
 | 
			
		||||
        - what I don't agree with is how in the name of security, we're taking away our collective freedoms as human beings.
 | 
			
		||||
 | 
			
		||||
            % id = "01JX0G5CN54C2GM4BGYVRT9FR2"
 | 
			
		||||
            - I feel insulted that I cannot change the way my browser looks to make it feel more at home, and express my belonging to a subculture.
 | 
			
		||||
 | 
			
		||||
% id = "01JX0G5CN5XVJXCFMQ99XJENAA"
 | 
			
		||||
- and that's all I wanted to say.
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0GYAZYJA8R8W5P7RS55TK3"
 | 
			
		||||
    - this was supposed to be a fun post like, "hey, did you know you can put cool shit on your New Tab page?"
 | 
			
		||||
 | 
			
		||||
    I'm so disappointed it came to this.
 | 
			
		||||
| 
						 | 
				
			
			@ -26,6 +26,13 @@ if you've been wondering what I've been up to, you've come to the right place.
 | 
			
		|||
        if you want to read any of the posts, follow the links.
 | 
			
		||||
        it's like that by design.
 | 
			
		||||
 | 
			
		||||
% tags = ["programming"]
 | 
			
		||||
  id = "01JX0GYB1D4W3A6FRPBG738N4F"
 | 
			
		||||
- ### [on changing the Firefox New Tab, and software freedom][page:programming/new-tab]
 | 
			
		||||
 | 
			
		||||
    % id = "01JX0GYB1DSPZEKZK9JWZC12FY"
 | 
			
		||||
    - a rant on how we keep locking down our software and taking away our freedom of expression in the name of security.
 | 
			
		||||
 | 
			
		||||
% tags = ["music"]
 | 
			
		||||
  id = "01JQYKYRF2RRY2DEV2Z8MSYJ4F"
 | 
			
		||||
- ### [Kettel - Dubio][page:music/dubio]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue