Best layout for IntelliJ developer?

I just picked up the Model01 a couple of weeks ago, and have been slowly retraining myself to type with it. While the actual typing itself is getting better, I am still struggling on re-learning all the modifier keys. To make things more complicated, I do a lot of work in IntelliJ which uses a significant number of modifier key combinations in shortcuts. To this extent, I find the lack of an Alt key on the left hand side very difficult to work with.

I can only presume that others here use IntelliJ as well; are you using the default layout for the Model01 or have you found you needed to remap IJ shortcuts or the Model01 keymap to better handle the shortcuts?

Is there a good approach to adding the Alt modifier on the left hand side? I’ve considered using Fn-Cmd for Alt, but that throws off most of the short cuts which use Alt since the vast majority of keys are mapped to other keys when using the Fn modifier.

I’ve considered the Butterfly key but it isn’t in a convenient location on the keyboard (on the right hand side).

Has anyone come up with a good solution for this?

Thanks,

Eric

I have a full set of modifiers on each side, but I don’t have them on the thumb keys. I use Qukeys to put them on the home row keys, which makes modifier combos very comfortable. I have shift under my index finger, control on the middle finger, alt/option on the ring finger, and cmd/gui on the pinky on each hand. If I was an exclusive macOS user who didn’t use Emacs, I’d probably swap cmd with ctrl. The only combo that I find even mildly awkward is the middle finger and pinky without the ring finger (because their tendons are connected), which is why I ordered the modifiers that way.

All that said, OneShot modifiers are a less drastic and more obvious solution to the problem.

1 Like

I’m confused though. If you use Qukeys like that, how does that handle things like alt-d? Don’t you need the ‘D’ key for the Alt modifier in which case how do you get the Alt-D combination?

Do you have a copy of your configuration somewhere that I can look at to get inspired?

Thanks!

Eric

I use the right-hand modifiers when typing left-side letter keys, and vice versa.

I don’t have a convenient Kaleidoscope sketch to show you, unfortunately, because I use different firmware that gives me features Kaleidoscope doesn’t support. I think the Qukeys example firmware file has home-row modifiers, though.

1 Like

Out of interest, what firmware are you using?

I rewrote Kaleidoscope from scratch to address some issues I had with it, and so that I could make a plugin that allowed me to arbitrarily reassign shifted and unshifted symbols. It’s very similar to Kaleidoscope, so I call it Kaleidoglyph. (I would have called it Kaleidograph, but there’s a graphing program named Kaleidagraph.)

1 Like

I use IntelliJ on Mac and Linux, but I’ve completely changed the Keyobardio map. I have shift on the pinkies, and all other modifiers on the thumb arcs (I also have an extra ctrl where the caps-lock key on a traditional keyboard would be).

If you don’t want to change the original layout that much, then you could move cmd or backspace to the butterfly key, and free up one thumb slot for left-alt.

@albx79 I actually like having the BS and the CMD on the thumb arc, but I like the idea of duplicating modifiers on the home row like @merlin has done. That being said, given that I’m still very new on this keyboard, I’d love to see how others have redone their maps after using it for a while to leverage your experiences with it.

Can you share your map/firmware customizations for me to view?

Thanks,

Eric

Sure, you can find it here: https://github.com/albx79/Model01-Firmware (I only modified the layout).

My thumb-arcs are Backspace-Shift-Cmd-Alt and Ctrl-Cmd-Shift-Space on my work (Mac) Model 01, the one I use at home on Linux is Backspace-Shift-Alt-Ctrl and Ctrl-GUI-Shift-Space (tho writing this, I’m probably going to swap so that Ctrl is in the 3rd slot, not the 4th. My hands are fairly large, but reaching the closest-to-center thumb keys isn’t very comfortable.

I’ve remapped one or two things in IJ to be more comfortable, and will probably remap the stock Enter key to be a high-numbered fn-key, and assign that to autotype, because Ctrl-space on the Mac isn’t working out for me. I’ve got Enter on the butterfly key.

My sketch is https://github.com/kajsa/Model01-Firmware, and viewable here.

I use IntelliJ most of the day. I didn’t remap any keys in IntelliJ, but I modified my layout a lot to make the layout more effective for programming.

I have alt keys on both sides, but I find myself using the left one most of the time.
You can ignore or remap the danish keys, if you don’t want/need an international layout.

Here is my layout:

@merlin

I use the right-hand modifiers when typing left-side letter keys, and vice versa .

I tried your mappings today (using the home-row for modifiers with QuKeys), and really enjoyed it. However, I find that any combinations using the function keys (F1-F12) fails. At first I thought it was because the Fn layer mapped different keys, but after thinking about it, I realized that QuKeys is based on the key address, and not the actual keymap. So I’m not entirely sure why it was failing.

For instance, with the following QuKeys configuration, using a ctrl,alt,arrow (K, L, Fn & H held simultaneously), I don’t get the expected result, but rather just get a back arrow. Similarly, if I try Alt-F1

  QUKEYS(
    kaleidoscope::plugin::Qukey(0,KeyAddr(2,4), Key_LeftShift),   // left index
    kaleidoscope::plugin::Qukey(0,KeyAddr(2,3), Key_LeftControl), // left middle
    kaleidoscope::plugin::Qukey(0,KeyAddr(2,2), Key_LeftAlt),     // left ring
    kaleidoscope::plugin::Qukey(0,KeyAddr(2,1), Key_LeftGui),     // left pinky
    
    kaleidoscope::plugin::Qukey(0,KeyAddr(2,11), Key_RightShift),   // right index
    kaleidoscope::plugin::Qukey(0,KeyAddr(2,12), Key_RightControl), // right middle
    kaleidoscope::plugin::Qukey(0,KeyAddr(2,13), Key_RightAlt),     // right ring
    kaleidoscope::plugin::Qukey(0,KeyAddr(2,14), Key_LeftGui)      // right pinky
    );
  Qukeys.activate();

Is there a reason why QuKey doesn’t work with the Fn layer/button? Or moreover, is there a way I can make it work with it?

After a little more playing around with it, it seems that it is based on the ordering of the key presses. If I hold Fn down last, it works. If Fn is held anywhere but the last keypress, the combination fails. Is this expected behaviour?

Thanks!

Eric

@lasse Thanks! I looked at your firmware, and like some of the overall changes you made. I’ll have to take a closer look how you implemented a few options. But why did you bother remapping the Ctrl-ZXCV to Fn-ZXCV? Is there a particular use for that change? Do you find it makes something specifically easier?

Thanks,

Eric

But why did you bother remapping the Ctrl-ZXCV to Fn-ZXCV? Is there a particular use for that change? Do you find it makes something specifically easier?

I did many iterations on the layout and took note of everything that annoyed me.
At that time I thought reaching ctrl+zxcv was annoying and I remember using the palm key as an alternative was easier sometimes. I just tried noticing and to my slight surprise I noticed that I actually don’t use fn+zxcv. I use left ctrl, which is not optimal. The good thing is that the layout gives your four ways to reach those commonly used keys!

Bonus info. I tried to make a “text editing wizard mode”. So if you use the right fn, you lock the fn layer and then you can use ZXCV for copy paste without any modifiers. It is a cool idea and it works really well, but I don’t actually use it that much. :wink: I am thinking about sacrificing the mouse keys to make the text edit mode cooler, but to be honest I am too satisfied to work on the layout right now.

Sorry I took so long to reply. The answer to both questions is yes. It doesn’t work with fn in your case because those qukeys are only defined on the base layer. That’s the first argument in the kaleidoscope::plugin::Qukey() definitions. Those qukeys only exist on the base layer (layer 0). You can make them exist on all layers by changing that to -1 if that’s what you want.