// ~/.config/xkb/symbols/vim_keys

xkb_symbols "basic" {
    include "us(basic)"
    include "custom(altgr)"

    clear  lock;
    clear  mod5;
    clear  control;

    // Define a custom modifier (Mode_switch)
    modifier_map Mod5 { <MDSW> };

    // Remap Caps Lock to AltGr (ISO_Level3_Shift)
    key <CAPS> {
        type[Group1] = "ONE_LEVEL",
        symbols[Group1] = [ ISO_Level3_Shift ],
        actions[Group1] = [ SetMods(modifiers=Mod5) ]
    };

    // Remap h, j, k, l to arrow keys when Mode_switch is active
    key <AC06> { [ Left ] };
    key <AC07> { [ Down ] };
    key <AC08> { [ Up ] };
    key <AC09> { [ Right ] };

    // Assign keys to the CtrlMod modifier
    key <RCTL> { [ Control_R, Control_R ] };
    key <LCTL> { [ Control_L, Control_L ] };

    // Define Ctrl+Mode_switch+J as PageDown
    key <I194> { [ Control_R, ISO_Level3_Shift, Prior ] };
    key <I194> { [ Control_L, ISO_Level3_Shift, Prior ] };

    // Define Ctrl+Mode_switch+K as PageUp
    key <I196> { [ Control_R, ISO_Level3_Shift, Next ] };
    key <I196> { [ Control_L, ISO_Level3_Shift, Next ] };

    // Define Ctrl+Mode_switch+H as Home
    key <AC06> { [ Control_R, ISO_Level3_Shift, Home ] };
    key <AC06> { [ Control_L, ISO_Level3_Shift, Home ] };

    // Define Ctrl+Mode_switch+L as End
    key <AC09> { [ Control_R, ISO_Level3_Shift, End ] };
    key <AC09> { [ Control_L, ISO_Level3_Shift, End ] };

    // Make 'q' act as Escape when in Mode_switch
    key <AD03> { [ q, Q, Escape ] };

    // Shift+Caps to use normal Caps Lock
    modifier_map Mod5 { Shift+CapsLock, <MDSW> };
};
