Skip to content

Instantly share code, notes, and snippets.

@jgarcia
Created January 5, 2026 15:03
Show Gist options
  • Select an option

  • Save jgarcia/819e7e1d467dc07df585505e044f27e1 to your computer and use it in GitHub Desktop.

Select an option

Save jgarcia/819e7e1d467dc07df585505e044f27e1 to your computer and use it in GitHub Desktop.
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