flake-update-20260505
1-- Bépo keyboard layout support
2-- Remaps hjkl to ctsr (bépo home row) and related keys
3--
4-- Mappings applied:
5-- c → h (left) | h → t (find char)
6-- t → j (down) | j → r (replace)
7-- s → k (up) | k → s (substitute)
8-- r → l (right) | l → c (change)
9--
10
11local function apply_bepo_mappings()
12 local modes = { "n", "v", "o" } -- normal, visual, operator-pending
13
14 -- Movement: ctsr -> hjkl
15 for _, mode in ipairs(modes) do
16 vim.keymap.set(mode, "c", "h", { noremap = true, desc = "Left" })
17 vim.keymap.set(mode, "t", "j", { noremap = true, desc = "Down" })
18 vim.keymap.set(mode, "s", "k", { noremap = true, desc = "Up" })
19 vim.keymap.set(mode, "r", "l", { noremap = true, desc = "Right" })
20
21 -- Capitals
22 vim.keymap.set(mode, "C", "H", { noremap = true, desc = "Top of screen" })
23 vim.keymap.set(mode, "T", "J", { noremap = true, desc = "Join lines" })
24 vim.keymap.set(mode, "S", "K", { noremap = true, desc = "Keyword lookup" })
25 vim.keymap.set(mode, "R", "L", { noremap = true, desc = "Bottom of screen" })
26
27 -- Displaced keys: hjkl get the original ctsr functions
28 vim.keymap.set(mode, "h", "t", { noremap = true, desc = "Find char forward" })
29 vim.keymap.set(mode, "j", "r", { noremap = true, desc = "Replace char" })
30 vim.keymap.set(mode, "k", "s", { noremap = true, desc = "Substitute" })
31 vim.keymap.set(mode, "l", "c", { noremap = true, desc = "Change" })
32
33 -- Capitals for displaced
34 vim.keymap.set(mode, "H", "T", { noremap = true, desc = "Find char backward" })
35 vim.keymap.set(mode, "J", "R", { noremap = true, desc = "Replace mode" })
36 vim.keymap.set(mode, "K", "S", { noremap = true, desc = "Substitute line" })
37 vim.keymap.set(mode, "L", "C", { noremap = true, desc = "Change to EOL" })
38 end
39
40 -- Window navigation: w + ctsr
41 vim.keymap.set("n", "<C-w>c", "<C-w>h", { noremap = true, desc = "Window left" })
42 vim.keymap.set("n", "<C-w>t", "<C-w>j", { noremap = true, desc = "Window down" })
43 vim.keymap.set("n", "<C-w>s", "<C-w>k", { noremap = true, desc = "Window up" })
44 vim.keymap.set("n", "<C-w>r", "<C-w>l", { noremap = true, desc = "Window right" })
45
46 vim.notify("Bépo mappings applied", vim.log.levels.INFO)
47end
48
49return {
50 {
51 "bepo-mappings", -- Virtual plugin name
52 virtual = true,
53 lazy = false,
54 config = function()
55 -- Apply bépo mappings after everything else loads
56 vim.api.nvim_create_autocmd("VimEnter", {
57 callback = function()
58 vim.defer_fn(apply_bepo_mappings, 100)
59 end,
60 })
61 end,
62 },
63}