While this isn't quite my cup of tea, it's nice to see Firefox being forked instead of Chromium. With this, there's now at least three significantly modified Firefox forks, alongside Zen and Floorp.
That's a sweet idea and I'm glad to see your comment about maintaining it as a patch on top of Firefox sources so you can roll in their security fixes.
I've run into the restrictions regarding addons.mozilla.org myself using Vimium C, but it didn't happen often enough for me to consider switching my browser over it. I think I'd rather have something that makes my entire Linux desktop environment keyboard centric at that point, like homerow seems to do for macOS.
I like the hints API, especially that it can hint on browser elements. However, power users may find it desirable to be able to use the hints system to select arbitrary kinds of elements. Perhaps you could extend the hint functionality to allow callers to pass a CSS selector that determines what elements get hinted? One use case is to write a command that lets the user choose an element and copy its text.
Ah, I missed that option, sorry. I was looking at `glide.hints.show'. Are CSS selectors usable with that function? The documentation doesn't say so. Also, would you consider making it return a promise instead of taking a callback? I think that would be more ergonomic.
ah yeah sorry about that, the API docs aren't quite complete yet.
I'd recommend just looking at the glide.d.ts[0], it should be pretty readable (I hope).
Yes the TS API supports it as well with the `selector` property:
```
glide.hints.show({ selector: "..." });
```
> Also, would you consider making it return a promise instead of taking a callback? I think that would be more ergonomic.
The reason it doesn't return a Promise directly is because the hints that are generated are not static, try scrolling while hints are active and you'll see them refresh.
So the return type would have to be something else to work well with this functionality imo.
Is it possible to automatically install extensions and set native Firefox configuration through the config? All my other programs are setup by just cloning my dotfiles and I really wish Firefox had that option.
I've never managed to figure out how to configure extensions through the Firefox JS APIs, but installing an add-on using the internal APIs isn't too hard. I do it in my VimFX config.js[0]. Hope this is useful.
No problem, thanks for making Glide. I'm looking forward to trying it. Also, feel free to take inspiration from anything else you might stumble upon in my configs.
This looks really cool! My current setup is Firefox with VimFX[0] and an elaborate config.js, but when the NixOS package gets merged I will definitely try it.
For anyone wanting to stick to stock Firefox ESR, I highly recommend checking out VimFX.
The big downside of VimFX compared to Glide is lack of Firefox internal API documentation. I've had to dig through Firefox source code several times to find out how to do things e.g. wrangle tabs that would have been easy to do with the WebExtensions APIs. The fact that Glide makes these APIs available in the config file is the part I'm most excited about.
I haven't looked at the source too deeply yet to investigate how you implement the fork, but you state that it's a fork of Firefox, how do you plan to integrate fixes from Firefox (security, etc)?
It's implemented as a set of patches + new files for net new files I add myself, then to build it, the firefox source is downloaded and patched automatically - so bumping the underlying firefox version is generally very easy.
I'm currently actually tracking the firefox beta channel because the frequent small updates are so easy to do.
found this on your ʕ•ᴥ•ʔ Bear Blog. having fun with it. set it up like my zen browser (with the sidebar + pinned tabs) and testing it out for my productivity stack at work. I themed out the glide-hint css via userChrome.css to better match my aesthetics. keep up the great work, i will be keenly following along.
i typically have 5 tabs open, no more, no less. i always have them in the same order so that i can navigate via alt+1, alt+2, alt+3, etc.. one tab is always my personalised homescreen which has all the main links+software i use in a day. having them in the same order means i don't even need to look at the sidebar to navigate to them, it just helps to see what tab i am focused on sometimes.
Huh. I always end up with a mini tab explosion every time I do anything intensive like skimming docs or shopping/product comparison. Does that ever happen to you? Or do you just close all the resulting tabs as soon as you're done?
Sorry if the questions are a little much; as a tab hoarder I'm always curious when productive people make do with small numbers of tabs.
no worries about the questions, happy to share. i am pretty good at closing off unused tabs as i don't like the clutter.
for comparative work i use split tabs and for document skimming i use reader mode + anytime i feel overwhelmed i will start saving things to pocket to skim or search through later.
While this isn't quite my cup of tea, it's nice to see Firefox being forked instead of Chromium. With this, there's now at least three significantly modified Firefox forks, alongside Zen and Floorp.
That's a sweet idea and I'm glad to see your comment about maintaining it as a patch on top of Firefox sources so you can roll in their security fixes.
I've run into the restrictions regarding addons.mozilla.org myself using Vimium C, but it didn't happen often enough for me to consider switching my browser over it. I think I'd rather have something that makes my entire Linux desktop environment keyboard centric at that point, like homerow seems to do for macOS.
Author here - happy to answer any questions :)
I like the hints API, especially that it can hint on browser elements. However, power users may find it desirable to be able to use the hints system to select arbitrary kinds of elements. Perhaps you could extend the hint functionality to allow callers to pass a CSS selector that determines what elements get hinted? One use case is to write a command that lets the user choose an element and copy its text.
You can use CSS selectors already! https://glide-browser.app/hints#excmds
I've used it to add keymappings so that hints only apply to certain kinds of buttons on a page, e.g. https://github.com/RobertCraigie/dotfiles/blob/ecfd6f66e8a77...
Ah, I missed that option, sorry. I was looking at `glide.hints.show'. Are CSS selectors usable with that function? The documentation doesn't say so. Also, would you consider making it return a promise instead of taking a callback? I think that would be more ergonomic.
ah yeah sorry about that, the API docs aren't quite complete yet.
I'd recommend just looking at the glide.d.ts[0], it should be pretty readable (I hope).
Yes the TS API supports it as well with the `selector` property:
``` glide.hints.show({ selector: "..." }); ```
> Also, would you consider making it return a promise instead of taking a callback? I think that would be more ergonomic.
The reason it doesn't return a Promise directly is because the hints that are generated are not static, try scrolling while hints are active and you'll see them refresh.
So the return type would have to be something else to work well with this functionality imo.
[0]: https://github.com/glide-browser/glide/blob/8171c5c2af000b71...
Is it possible to automatically install extensions and set native Firefox configuration through the config? All my other programs are setup by just cloning my dotfiles and I really wish Firefox had that option.
You can't configure extensions yet but you can set prefs! https://glide-browser.app/api#glide.prefs.set
I've never managed to figure out how to configure extensions through the Firefox JS APIs, but installing an add-on using the internal APIs isn't too hard. I do it in my VimFX config.js[0]. Hope this is useful.
0: https://ba.ln.ea.cx/src/marsironpi/dotfiles/tree/common/.vim...
oh that is very helpful, thanks for sharing :)
No problem, thanks for making Glide. I'm looking forward to trying it. Also, feel free to take inspiration from anything else you might stumble upon in my configs.
Can it provide vim keybindings and modes inside a textbox?
Yes! All standard input elements have vim motions support but fair warning that a lot of the standard motions aren't implemented yet.
This looks really cool! My current setup is Firefox with VimFX[0] and an elaborate config.js, but when the NixOS package gets merged I will definitely try it.
For anyone wanting to stick to stock Firefox ESR, I highly recommend checking out VimFX.
0: https://github.com/akhodakivskiy/VimFx
The big downside of VimFX compared to Glide is lack of Firefox internal API documentation. I've had to dig through Firefox source code several times to find out how to do things e.g. wrangle tabs that would have been easy to do with the WebExtensions APIs. The fact that Glide makes these APIs available in the config file is the part I'm most excited about.
Pretty cool.
I have been using Vimium[1] on Chrome which works ok.
1. https://chromewebstore.google.com/detail/vimium/dbepggeogbai...
Does it work on chrome:// pages? That always bugged me about the Vimium Firefox port.
Vimium C has this option, you have to enable 'extensions-on-chrome-urls' flag.
It does not.
Whoa, so excited to try this out! As a regular Firefox user, does it pull over my settings?
Currently the easiest way to pull over settings I'm aware of is to use Firefox Sync[0]. I haven't looked into other settings import solutions yet.
[0]: https://www.firefox.com/en-GB/features/sync/
I haven't looked at the source too deeply yet to investigate how you implement the fork, but you state that it's a fork of Firefox, how do you plan to integrate fixes from Firefox (security, etc)?
It's implemented as a set of patches + new files for net new files I add myself, then to build it, the firefox source is downloaded and patched automatically - so bumping the underlying firefox version is generally very easy.
I'm currently actually tracking the firefox beta channel because the frequent small updates are so easy to do.
great thanks
found this on your ʕ•ᴥ•ʔ Bear Blog. having fun with it. set it up like my zen browser (with the sidebar + pinned tabs) and testing it out for my productivity stack at work. I themed out the glide-hint css via userChrome.css to better match my aesthetics. keep up the great work, i will be keenly following along.
1. https://freeimage.host/i/KMQu3EQ 2. https://freeimage.host/i/KMQAJ9t
How many tabs do you have open on average? Do you ever have trouble finding tabs with just being able to see the favicon?
i typically have 5 tabs open, no more, no less. i always have them in the same order so that i can navigate via alt+1, alt+2, alt+3, etc.. one tab is always my personalised homescreen which has all the main links+software i use in a day. having them in the same order means i don't even need to look at the sidebar to navigate to them, it just helps to see what tab i am focused on sometimes.
with glide you can also make keymaps:
glide.keymaps.set("normal", "gd", () => openOrFocus("docs.google.com/document", "https://docs.google.com"), { description: "Go Docs" });
so i can close a tab quickly in normal mode using: tx. then hit gd to open google docs as an example.
i do have a hidden bookmarks bar with a ton of junk and sites i rarely open, but it is there if i need to find something.
Huh. I always end up with a mini tab explosion every time I do anything intensive like skimming docs or shopping/product comparison. Does that ever happen to you? Or do you just close all the resulting tabs as soon as you're done?
Sorry if the questions are a little much; as a tab hoarder I'm always curious when productive people make do with small numbers of tabs.
no worries about the questions, happy to share. i am pretty good at closing off unused tabs as i don't like the clutter.
for comparative work i use split tabs and for document skimming i use reader mode + anytime i feel overwhelmed i will start saving things to pocket to skim or search through later.
Oh wow this is very cool, thank you for sharing!!
no worries, thanks to you!
Cool. Currently on some websites I hit TAB until I reach the needed button/input. Try it right now on hacker news.