mirror of
https://github.com/marcogll/omarchy_setup.git
synced 2026-01-13 13:25:16 +00:00
docs(v3.5.0): update README for integrated mg_dotfiles and security improvements
- Integrated mg_dotfiles as regular directory (not submodule) - Added .zshrc.local.example template for local configs without secrets - Added mg_dotfiles/zsh/.zshrc.local to .gitignore to protect API keys - Updated README to reflect mg_dotfiles integration and new structure - Added nvim configuration directory with LazyVim setup
This commit is contained in:
163
mg_dotfiles/nvim/lua/config/keymaps.lua
Normal file
163
mg_dotfiles/nvim/lua/config/keymaps.lua
Normal file
@@ -0,0 +1,163 @@
|
||||
-- This file contains custom key mappings for Neovim.
|
||||
|
||||
-- Keymaps are automatically loaded on the VeryLazy event
|
||||
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
|
||||
-- Add any additional keymaps here
|
||||
|
||||
-- Map Ctrl+b in insert mode to delete to the end of the word without leaving insert mode
|
||||
vim.keymap.set("i", "<C-b>", "<C-o>de")
|
||||
|
||||
-- Map Ctrl+c to escape from other modes
|
||||
vim.keymap.set({ "i", "n", "v" }, "<C-c>", [[<C-\><C-n>]])
|
||||
|
||||
-- Screen Keys
|
||||
vim.keymap.set({ "n" }, "<leader>uk", "<cmd>Screenkey<CR>")
|
||||
|
||||
----- Tmux Navigation ------
|
||||
local nvim_tmux_nav = require("nvim-tmux-navigation")
|
||||
|
||||
vim.keymap.set("n", "<C-h>", nvim_tmux_nav.NvimTmuxNavigateLeft) -- Navigate to the left pane
|
||||
vim.keymap.set("n", "<C-j>", nvim_tmux_nav.NvimTmuxNavigateDown) -- Navigate to the bottom pane
|
||||
vim.keymap.set("n", "<C-k>", nvim_tmux_nav.NvimTmuxNavigateUp) -- Navigate to the top pane
|
||||
vim.keymap.set("n", "<C-l>", nvim_tmux_nav.NvimTmuxNavigateRight) -- Navigate to the right pane
|
||||
vim.keymap.set("n", "<C-\\>", nvim_tmux_nav.NvimTmuxNavigateLastActive) -- Navigate to the last active pane
|
||||
vim.keymap.set("n", "<C-Space>", nvim_tmux_nav.NvimTmuxNavigateNext) -- Navigate to the next pane
|
||||
|
||||
----- OBSIDIAN -----
|
||||
vim.keymap.set("n", "<leader>oc", "<cmd>ObsidianCheck<CR>", { desc = "Obsidian Check Checkbox" })
|
||||
vim.keymap.set("n", "<leader>ot", "<cmd>ObsidianTemplate<CR>", { desc = "Insert Obsidian Template" })
|
||||
vim.keymap.set("n", "<leader>oo", "<cmd>Obsidian Open<CR>", { desc = "Open in Obsidian App" })
|
||||
vim.keymap.set("n", "<leader>ob", "<cmd>ObsidianBacklinks<CR>", { desc = "Show ObsidianBacklinks" })
|
||||
vim.keymap.set("n", "<leader>ol", "<cmd>ObsidianLinks<CR>", { desc = "Show ObsidianLinks" })
|
||||
vim.keymap.set("n", "<leader>on", "<cmd>ObsidianNew<CR>", { desc = "Create New Note" })
|
||||
vim.keymap.set("n", "<leader>os", "<cmd>ObsidianSearch<CR>", { desc = "Search Obsidian" })
|
||||
vim.keymap.set("n", "<leader>oq", "<cmd>ObsidianQuickSwitch<CR>", { desc = "Quick Switch" })
|
||||
|
||||
----- OIL -----
|
||||
vim.keymap.set("n", "-", "<CMD>Oil<CR>", { desc = "Open parent directory" })
|
||||
|
||||
-- Delete all buffers but the current one
|
||||
vim.keymap.set(
|
||||
"n",
|
||||
"<leader>bq",
|
||||
'<Esc>:%bdelete|edit #|normal`"<Return>',
|
||||
{ desc = "Delete other buffers but the current one" }
|
||||
)
|
||||
|
||||
-- Disable key mappings in insert mode
|
||||
vim.api.nvim_set_keymap("i", "<A-j>", "<Nop>", { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap("i", "<A-k>", "<Nop>", { noremap = true, silent = true })
|
||||
|
||||
-- Disable key mappings in normal mode
|
||||
vim.api.nvim_set_keymap("n", "<A-j>", "<Nop>", { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap("n", "<A-k>", "<Nop>", { noremap = true, silent = true })
|
||||
|
||||
-- Disable key mappings in visual block mode
|
||||
vim.api.nvim_set_keymap("x", "<A-j>", "<Nop>", { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap("x", "<A-k>", "<Nop>", { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap("x", "J", "<Nop>", { noremap = true, silent = true })
|
||||
vim.api.nvim_set_keymap("x", "K", "<Nop>", { noremap = true, silent = true })
|
||||
|
||||
-- Redefine Ctrl+s to save with the custom function
|
||||
vim.api.nvim_set_keymap("n", "<C-s>", ":lua SaveFile()<CR>", { noremap = true, silent = true })
|
||||
|
||||
-- Grep keybinding for visual mode - search selected text
|
||||
vim.keymap.set("v", "<leader>sg", function()
|
||||
-- Get the selected text
|
||||
local start_pos = vim.fn.getpos("'<")
|
||||
local end_pos = vim.fn.getpos("'>")
|
||||
local lines = vim.fn.getline(start_pos[2], end_pos[2])
|
||||
|
||||
if #lines == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- Handle single line selection
|
||||
if #lines == 1 then
|
||||
lines[1] = string.sub(lines[1], start_pos[3], end_pos[3])
|
||||
else
|
||||
-- Handle multi-line selection
|
||||
lines[1] = string.sub(lines[1], start_pos[3])
|
||||
lines[#lines] = string.sub(lines[#lines], 1, end_pos[3])
|
||||
end
|
||||
|
||||
local selected_text = table.concat(lines, "\n")
|
||||
|
||||
-- Escape special characters for grep
|
||||
selected_text = vim.fn.escape(selected_text, "\\.*[]^$()+?{}")
|
||||
|
||||
-- Use the selected text for grep
|
||||
if pcall(require, "snacks") then
|
||||
require("snacks").picker.grep({ search = selected_text })
|
||||
elseif pcall(require, "fzf-lua") then
|
||||
require("fzf-lua").live_grep({ search = selected_text })
|
||||
else
|
||||
vim.notify("No grep picker available", vim.log.levels.ERROR)
|
||||
end
|
||||
end, { desc = "Grep Selected Text" })
|
||||
|
||||
-- Grep keybinding for visual mode with G - search selected text at root level
|
||||
vim.keymap.set("v", "<leader>sG", function()
|
||||
-- Get git root or fallback to cwd
|
||||
local git_root = vim.fn.system("git rev-parse --show-toplevel 2>/dev/null"):gsub("\n", "")
|
||||
local root = vim.v.shell_error == 0 and git_root ~= "" and git_root or vim.fn.getcwd()
|
||||
|
||||
-- Get the selected text
|
||||
local start_pos = vim.fn.getpos("'<")
|
||||
local end_pos = vim.fn.getpos("'>")
|
||||
local lines = vim.fn.getline(start_pos[2], end_pos[2])
|
||||
|
||||
if #lines == 0 then
|
||||
return
|
||||
end
|
||||
|
||||
-- Handle single line selection
|
||||
if #lines == 1 then
|
||||
lines[1] = string.sub(lines[1], start_pos[3], end_pos[3])
|
||||
else
|
||||
-- Handle multi-line selection
|
||||
lines[1] = string.sub(lines[1], start_pos[3])
|
||||
lines[#lines] = string.sub(lines[#lines], 1, end_pos[3])
|
||||
end
|
||||
|
||||
local selected_text = table.concat(lines, "\n")
|
||||
|
||||
-- Escape special characters for grep
|
||||
selected_text = vim.fn.escape(selected_text, "\\.*[]^$()+?{}")
|
||||
|
||||
-- Use the selected text for grep at root level
|
||||
if pcall(require, "snacks") then
|
||||
require("snacks").picker.grep({ search = selected_text, cwd = root })
|
||||
elseif pcall(require, "fzf-lua") then
|
||||
require("fzf-lua").live_grep({ search = selected_text, cwd = root })
|
||||
else
|
||||
vim.notify("No grep picker available", vim.log.levels.ERROR)
|
||||
end
|
||||
end, { desc = "Grep Selected Text (Root Dir)" })
|
||||
|
||||
-- Delete all marks
|
||||
vim.keymap.set("n", "<leader>md", function()
|
||||
vim.cmd("delmarks!")
|
||||
vim.cmd("delmarks A-Z0-9")
|
||||
vim.notify("All marks deleted")
|
||||
end, { desc = "Delete all marks" })
|
||||
|
||||
-- Custom save function
|
||||
function SaveFile()
|
||||
-- Check if a buffer with a file is open
|
||||
if vim.fn.empty(vim.fn.expand("%:t")) == 1 then
|
||||
vim.notify("No file to save", vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
|
||||
local filename = vim.fn.expand("%:t") -- Get only the filename
|
||||
local success, err = pcall(function()
|
||||
vim.cmd("silent! write") -- Try to save the file without showing the default message
|
||||
end)
|
||||
|
||||
if success then
|
||||
vim.notify(filename .. " Saved!") -- Show only the custom message if successful
|
||||
else
|
||||
vim.notify("Error: " .. err, vim.log.levels.ERROR) -- Show the error message if it fails
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user