I use a Logitech G604, which has 6 side buttons, a tilting wheel, and adjustable DPI. It also supports onboard profile storage, so even though Ratbag (a community-supported Logitech config tool on Linux) doesn’t support it, I can config it though G-Hub on Windows, and use those profiles on any machine/OS.
M1, M2, and M3 are all assigned to their defaults. I was very tempted to set the wheel-tilt actions as M4 and M5 (forwards and backwards), but ended up assigning those to side buttons (see below). Instead, the wheel-tilt buttons are macros that change tabs in an application; the macros press ctrl-pgup and ctrl-pgdown.
This works in almost all Windows and Linux programs I use regularly, including Firefox, VSCode, Zed, and Chromium. I use these binds especially often in Firefox (during research projects) and VSCode (during programming projects). By default, the two extra buttons on the top change the DPI of the mouse, but I end up pressing them by accident in some games, losing me precious time. I made the top buttons move the left and right scroll. I don’t use these very often, but they come in handy when a page has overflow.
I moved the page-forwards and page-backwards buttons to the side.
Most modern games detect the “forwards” button as an input (Factorio respects forwards and backwards!), so I have that set to push-to-talk in games that support it. Some games also handle the backwards button as a UI-back action
I assigned one button to ctrl. In most contexts (browsers, VSCode, etc), ctrl-clicking a link (or a variable name) has special meaning (open in a new tab, or go to definition), so I can press this button instead of reaching for the ctrl key. In many of the same programs, ctrl-scroll changes the zoom, so having this makes zooming in and out a one-hand gesture. I also created a “Next Window” bind that presses alt-tab, which performs a window switch on Windows and most Linux desktop environments.
It wasn’t enough to set the button to hold alt-tab - its a press-and-release macro like the tab switching
I assigned “Battery Level” to a button I don’t use all that much (its hard to reach) - it just sets the mouse LED to yellow or red if the battery is low or very low.
The G-Shift button is a modifier key that changes the binds for all other buttons when held.
I have Spotify or Youtube running in the background a lot. When the G-Shift key is held, M1 and M2 become “Next Track” and “Previous Track”, and M3 becomes “Play/Pause”. I can’t overstate how useful these combinations are. My previous laptop had dedicated keyboard key combos for these, but my new one does not, so these binds serve that purpose. The scroll wheel also becomes a volume control (great for quick volume adjustments in games). Both Windows and KDE handle the volume events from the mouse well. I don’t change the DPI often, but the DPI buttons become actual DPI buttons in G-Shift mode.
I don’t use any G-Shift modifiers on the side key - it’s a little hard to press two side buttons at a time.
The rubber thumbrest is starting to separate from the body. Right now, its held on with super glue.
Logitech no longer sells the G604, and does not have a replacement with equivalent functionality. I fear for the day this mouse dies, since I’d have to find a replacement that 1) supports wireless (this one has a USB dongle, but also has a bluetooth mode) 2) has on-board memory (for Linux, or using it with other machines) 3) has as many buttons, and 4) supports macro assignments.