I am still in the process of ironing out how I want my control scheme, but when looking for a web browser to run in Gaming Mode on my Steam Deck that worked well (Firefox was being funky when run in Gaming Mode/Big Picture) I experimented a little bit with Qutebrowser.
https://qutebrowser.org/doc/quickstart.html Edit figured out how to share steam controller profiles, it is under the gear icon -> layout details, here is my draft vim/qutebrowser profile, try it out and let me know what you think!
steam://controllerconfig/2919876185/3227309282
Qutebrowser is downloadable from the Discover package manager in Desktop Mode on the Steam Deck (then find Qutebrowser in start menu ->right click add to steam). Qutebrowser is designed for a linux window manager like I3 where you don’t really use a mouse much, everything in Qutebrowser is meant to be navigated with keyboard commands, no mouse required in the style of Vim keyboard commands. lt also prioritizes using screen real estate efficiently which is a boon for the Steam Deck. Like Vim, Qutebrowser has modes, an input mode (entered by pressing the i key) where you can enter text normally and a navigation mode (entered by pressing escape) that you use the keyboard letters to navigate and input web browser commands. In my control scheme you simply press the menu button to toggle between input and navigation modes.
While this might initially seem like the last software on the planet you would want to try to adapt to using with the Steam Deck’s onboard controls, the wisdom of Vim-style keybindings mean that almost every important function in the software is kept to the letters on the main keyboard, i.e. a-z. We can build a nice control scheme with the idea of mapping all the web browser controls to the steam deck while simultaneously mapping letters a-z to the steam deck…
-
The hjkl keys as up/down left/right navigation in vim naturally map to the left joystick, holding shift (long press R1 bumper) and hitting these keys navigates to previous page/next page/tab to the left/tab to the right
-
the entire top row of letters on the keyboard can be assigned to a touch menu on the left trackpad and the entire third row of letters can be assigned to a touch menu on the right trackpad.
-
The shift key can be mapped to long pressing the R1 bumper.
-
That leaves 5 letters remaining, put f aside and map a s d g to the back buttons of the steam deck. Backspace maps naturally to the x facebutton on the steam deck, the a facebutton to Enter and the b facebutton to Spacebar.
-
Finally, the last letter f can be mapped to the y facebutton on the Steam Deck. In qutebrowser f is an important key as it prompts what are called hints. When you press f you see something like this…
If you input a sequence of keys shown, Qutebrowser will navigate the cursor to that spot and left click. The really nice accident of this Steam Deck control scheme is that Qutebrowser by default only uses letters that are mapped to physical buttons on the Steam Deck (hjkl asdf and g) in this Steam Controller configuration.
With f bound to the y facebutton on the Steam Deck, it is natural to bind a similar command / that allows to search on the page (bound to long pressing the y facebutton).
Clicking the leftstick inputs o which opens up the prompt to navigate to a url, clicking the right stick inputs : which is used to access Qutebrowsers advanced commands and settings.
The thing about running Qutebrowser in Gaming Mode is that you can use a separate control scheme in Steam designed exclusively for using Qutebrowser. Obviously, inputting bulk text with the touchscreen keyboard is going to be faster, but I think this control configuration is worth exploring since the modal nature of Vim style keyboard commands reduces the amount of necessary keybindings to fully utilize and navigate a web browser by a huge amount. The left joystick being a good fit for hjkl is the icing on the cake!
I had some doubts going into this post, but you make some good points and you’ve clearly put some serious thought into what the best way to do this is.
I’ll try it out, are you able to share/upload the control scheme?
I am not sure where controller profiles export to locally (if someone knows tell me!) so I can find the file and share, but I shared my steam deck controller profile under “Qute Browser”.
There’s a way to share a link to a control profile, where clicking on the link in desktop mode will open it in Steam to be applied immediately. But I’ve never done it myself, and I’m not sure how to do it actually.
That said, I found your profile. The community control layout tabs didn’t show anything, but hitting “show all profiles” from that screen brings up 4 different ones with your username as the creator.
Nice idea, I never thought about using this control scheme on the Steam Deck. For those who don’t want to leave Firefox for many reasons like the extensions and the saved user data, one can also use an extension to get this functionality in Firefox. I used it in the past (and may comeback to it soon) and love it.
Surfing Keys: https://addons.mozilla.org/en-US/firefox/addon/surfingkeys_ff
Here is an older screenshot of the functionalities it provides besides the control scheme (configuration is done through in JavaScript):
Yeah that looks like it would be a drop in replacement for qutebrowser in this contex, that is what makes this hack work right? A roughly reasonable mapping of letters and commands for the Steam Deck that took a long time to memorize feels possible but in practice unlikely to be worth the effort for any particular individual program/workflow in isolation… but if you can memorize a simple mapping of 26 letters and 3-4 modifier keys and apply that single instance of memorization to an entire class of programs that support vim-style keyboard bindings than that memorization becomes an order of magnitude less tedious.
Yes, that’s the beauty. Now that I think of how I would implement such a control scheme, I would probably make both touchpads show a radial menu with half keys on the left and right as soon as I touch the pads. And when I leave touching it would mean a press on that particular key. I already experimented and have a non uploaded control scheme that works like this for RetroArch. It’s amazing what is all possible with Steam Input!
Isn’t there something like this already builtin popup half keypads like I described? Not sure if this could be used. Wouldn’t it be basically perfect and what you/we need?
Edit: And a backpedal click would then switch the mode back to mouse cursor on the right pad. I also have this already working for RetroArch. (Dang you reminded me to finish and upload it.)
Isn’t there something like this already builtin popup half keypads like I described? Not sure if this could be used. Wouldn’t it be basically perfect and what you/we need?
I think so but the integration with vim style controls for easy navigation and command input was a key reason I made this particular control scheme. Learning this control scheme gets you vim (or emacs with evil bindings for that matter) which through its terminal emulator gives you basically complete control over your steamdeck from text navigation and input to moving and deleting files, to web browsing, to inputting any number of terminal commands. There is a huge range of software with vim keybindings especially when you include community made plugins.
Edit: And a backpedal click would then switch the mode back to mouse cursor on the right pad. I also have this already working for RetroArch. (Dang you reminded me to finish and upload it.)
Dooooo itttt
I foresee people using this layout to set high scores on a typing wpm challenge
I too would like to test out this control scheme
Awesome work!
I remember using Qutebrowser on my Pinephone as well. How tf does this cute little browser that is meant to be used exclusively with the keyboard manage to be so usable on devices that do not even have a keyboard?
How tf does this cute little browser that is meant to be used exclusively with the keyboard manage to be so usable on devices that do not even have a keyboard?
Yeah, it is a pretty funny quirk. Qutebrowser was obviously made with the complete intention of using a keyboard but because it commits to that with such laser focus it actually ends up being paradoxically much more flexible than it was designed to be.
When I sat down and thought about trying to map emacs commands to my steam deck, my brain just broke. How do you manage key chords? What letter keys do you prioritize easy access to? Every solution feels obtuse.
Whereas with Vim keybindings it all just kind of fell in to place in my mind after I assigned the left joystick to hjkl. The result is a control scheme that easily blows any other steam deck onboard control scheme for navigating a web browser and entering text, clear out of the water, especially when you use hints (f). I didn’t set out to do anything other than see what would happen if I tried out a silly gimmick, but the power of vim turned my fools errand into a slick control scheme that puts basically every other method of navigating a web browser and entering text with a gamepad to shame, Nintendo, Sony, Microsoft, Steam…. None of their design teams can hold a candle to Vim I guess.
Impressive
Great idea!
I’ll probably stick with Firefox but I will set this up using the Vimium browser extension which has a very similar hint based link selection.