Make arrow-up/down, Pos1, End, Del ... more easy

Solution 1:

from arch wiki link I followed the steps and succeeded in "Arch Linux" and "Ubuntu 20.04" OS'es for While Keeping Caps Lock key + u,h,j,n etc keys. This method allows to highlight the text with Shift+Caps+h keys as mentioned in the link.

Before proceeding, read the Precautions & Preparations link

Step 1

Edit the file /usr/share/X11/xkb/types/complete
Original Content in Ubuntu 20.04

default xkb_types "complete" {
    include "basic"
    include "mousekeys"
    include "pc"
    include "iso9995"
    include "level5"
    include "extra"
    include "numpad"
};

After Edits

default xkb_types "complete" {
    include "basic"
    include "mousekeys"
    include "pc"
    include "iso9995"
    include "level5"
    include "extra"
    include "numpad"
    
       type "CUST_CAPSLOCK" {
       modifiers= Shift+Lock; 
       map[Shift] = Level2;            //maps shift and no Lock. Shift+Alt goes here, too, because Alt isn't in modifiers.
       map[Lock] = Level3;
       map[Shift+Lock] = Level3;       //maps shift and Lock. Shift+Lock+Alt goes here, too.
       level_name[Level1]= "Base";
       level_name[Level2]= "Shift";
       level_name[Level3]= "Lock";
   };
};

Step 2

Edit the file /usr/share/X11/xkb/compat/complete

After Edits

default xkb_compatibility "complete" {
    include "basic"
    augment "iso9995"
    augment "mousekeys"
    augment "accessx(full)"
    augment "misc"
    augment "xfree86"
    augment "level5"
    augment "caps(caps_lock)"
    
       interpret Caps_Lock+AnyOfOrNone(all) {
       action= SetMods(modifiers=Lock);
   };
};

Step 3

Edit the file /usr/share/X11/xkb/symbols/us #change us with your actual symbols file.

Some of the edited content

    key <AC05> {    [     g,    G       ]   };
//  key <AC06> {    [     h,    H       ]   };
    key <AC06> {
       type= "CUST_CAPSLOCK",
       symbols[Group1]= [               h,               H,               Left],
       actions[Group1]= [      NoAction(),      NoAction(),   RedirectKey(keycode=<LEFT>, clearmods=Lock) ]
  };
    key <AC07> {    [     j,    J       ]   };
    key <AC08> {    [     k,    K       ]   };

Like wise, edit the symbol files as per your requirement. key symbols can be obtained by

xev | grep keysym command

$ xev | grep keysym
    state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
    state 0x0, keycode 112 (keysym 0xff55, Prior), same_screen YES,
    state 0x0, keycode 112 (keysym 0xff55, Prior), same_screen YES,
    state 0x0, keycode 117 (keysym 0xff56, Next), same_screen YES,
    state 0x0, keycode 117 (keysym 0xff56, Next), same_screen YES,
    state 0x0, keycode 22 (keysym 0xff08, BackSpace), same_screen YES,
    state 0x0, keycode 22 (keysym 0xff08, BackSpace), same_screen YES,
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES,
    state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
    state 0x0, keycode 110 (keysym 0xff50, Home), same_screen YES,
    state 0x0, keycode 115 (keysym 0xff57, End), same_screen YES,
    state 0x0, keycode 115 (keysym 0xff57, End), same_screen YES,
$ 

Step 4
Run the below command to apply the changes immedeately

sudo udevadm trigger --subsystem-match=input --action=change

Source of above command is https://askubuntu.com/a/1075707/739431

Solution 2:

To solve this kind of problem some keyboard layouts include extra layers other than those offered by shift/capslock and regular modifier keys. One example is the Neo (wikipedia; docs (in german); docs (google translated)).

Neo offers 6 layers and the movement-keys-layer you are willing is the fourth layer. (The layers are 1-lowercase, 2-uppercase, 3-special chars, 4-movements+numbers, 5-greek chars (for formulas); 6-math symbols+greek uppercase.

Just like what happens with shift that takes you from layer 1 to layer 2 (lowercase to uppercase regular text), a single keystroke to M4 keys (shown on the image, seems to be equivalent to qwertz's < and alt-gr) takes you to the fourth layer.

Neo's 4th layer:

neo keyboard layout fourth layer (image taken from official website)

It is possible to see that up-down for example are not vim like, they are one above other just regular keyboards.

Movements' key locations on neo's fourth layer:

movement key
home a
end g
del r
up e
down d
pgUp q
pgDown t
ESC z
backspace w

The first two layers are optimized for german. But since you still want to stay with qwertz layout, there is a variation, called neoquertz, where those layers 1 and 2 will be regular qwertz lowercase and uppercase respectively. This way you will feel more like home, just as you wanted.

According to their documentation, they are already included in major OS's, including Linux (install instrutions) (where it is installed as keyboard variant), but I wouldn't guarantee that they would work out of the box. - In my case (ubuntu/xfce), it wasn't necessary to apt or install anything, I had only to set configurations. When following their instructions, differently from what was stated, it only worked after a reset and only in the login screen, after login qwerty came back, so more tweaking was needed. localectl list-x11-keymap-variants only lists neo and not neo_quartz. The graphical login had slightly different keyboard behavior compared to tty1-6. Be careful about not using neo instead of neo_quertz, otherwise you will be stuck trying to type your username and password in a layout you have no clue where the positions are. And don't forget: shift together with other key types it uppercase, whereas capslock together with other key types the layer3 symbol (if you have symbols in your passwords you will need to know this).

Solution 3:

You can edit you own keyboard mapping by editing or creating a new symbols map from an existing map in /usr/share/X11/xkb/symbols

and you can get the current value of each key on your keyboard by using the following command:

xev | grep keysym

Here is the map of adresses of each hardware keyboard key keyboard keys

good keyboarding!