Created
January 5, 2026 15:03
-
-
Save jgarcia/819e7e1d467dc07df585505e044f27e1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| vim.g.keyboard_layout = vim.fn.system("defaults read ~/Library/Preferences/com.apple.HIToolbox.plist AppleSelectedInputSources | grep -q Colemak && echo 'colemak' || echo 'qwerty'"):gsub("\n", "") | |
| function ToggleKeyboardLayout() | |
| if vim.g.keyboard_layout == "colemak" then | |
| vim.g.keyboard_layout = "qwerty" | |
| -- Unmap Colemak bindings | |
| vim.keymap.del({"n", "v", "o"}, "n") | |
| vim.keymap.del({"n", "v", "o"}, "e") | |
| vim.keymap.del({"n", "v", "o"}, "i") | |
| vim.keymap.del("n", "t") | |
| -- Restore QWERTY defaults | |
| vim.keymap.set("n", "i", "i", { desc = "Insert mode" }) | |
| vim.keymap.set("n", "o", "o", { desc = "Open line below" }) | |
| -- Window movement for QWERTY | |
| vim.keymap.set("n", "<leader>h", "<C-w>h", { desc = "Move to left window" }) | |
| vim.keymap.set("n", "<leader>j", "<C-w>j", { desc = "Move to window below" }) | |
| vim.keymap.set("n", "<leader>k", "<C-w>k", { desc = "Move to window above" }) | |
| vim.keymap.set("n", "<leader>l", "<C-w>l", { desc = "Move to right window" }) | |
| print("Switched to QWERTY layout") | |
| else | |
| vim.g.keyboard_layout = "colemak" | |
| -- Colemak movement keys: h,j,k,l -> h,n,e,i | |
| -- h = left (stays the same) | |
| -- n = down (j in QWERTY) | |
| -- e = up (k in QWERTY) | |
| -- i = right (l in QWERTY) | |
| vim.keymap.set({"n", "v", "o"}, "n", "j", { desc = "Move down" }) | |
| vim.keymap.set({"n", "v", "o"}, "e", "k", { desc = "Move up" }) | |
| vim.keymap.set({"n", "v", "o"}, "i", "l", { desc = "Move right" }) | |
| -- Remap insert mode since i is now right movement | |
| vim.keymap.set("n", "t", "i", { desc = "Insert mode" }) | |
| vim.keymap.set("n", "l", "i", { desc = "Insert mode" }) | |
| -- Search navigation | |
| vim.keymap.set("n", "k", "n", { desc = "Next search result" }) | |
| vim.keymap.set("n", "<C-w>i", "<C-w>l", { desc = "Move to right window" }) | |
| -- Window movement for Colemak | |
| vim.keymap.set("n", "<leader>h", "<C-w>h", { desc = "Move to left window" }) | |
| vim.keymap.set("n", "<leader>n", "<C-w>j", { desc = "Move to window below" }) | |
| vim.keymap.set("n", "<leader>e", "<C-w>k", { desc = "Move to window above" }) | |
| vim.keymap.set("n", "<leader>i", "<C-w>l", { desc = "Move to right window" }) | |
| print("Switched to Colemak layout") | |
| end | |
| end | |
| -- Set initial layout if Colemak | |
| if vim.g.keyboard_layout == "colemak" then | |
| ToggleKeyboardLayout() | |
| ToggleKeyboardLayout() | |
| end | |
| -- Key mapping for layout toggle | |
| vim.keymap.set("n", "<leader>kl", ToggleKeyboardLayout, { desc = "Toggle keyboard layout" }) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment