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}