diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-01-24 20:35:27 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-01-24 20:35:27 +0900 |
| commit | c80a54e42b52ce297f0f2f71af23c562832025c7 (patch) | |
| tree | dcce8bb977a770f473325d48f6f70b21d9818a40 /ar/.config/LazyVim/lua/plugins | |
init
Diffstat (limited to 'ar/.config/LazyVim/lua/plugins')
39 files changed, 2094 insertions, 0 deletions
diff --git a/ar/.config/LazyVim/lua/plugins/better-escape.lua b/ar/.config/LazyVim/lua/plugins/better-escape.lua new file mode 100644 index 0000000..8980a09 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/better-escape.lua @@ -0,0 +1,6 @@ +return { + "max397574/better-escape.nvim", + config = function() + require("better_escape").setup() + end, +} diff --git a/ar/.config/LazyVim/lua/plugins/bqf.lua b/ar/.config/LazyVim/lua/plugins/bqf.lua new file mode 100644 index 0000000..529c06d --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/bqf.lua @@ -0,0 +1,9 @@ +return { + "kevinhwang91/nvim-bqf", + ft = "qf", + keys = { + -- { "zn", false }, + -- { "zN", false }, + -- { "zf", false }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/catppuccin.lua b/ar/.config/LazyVim/lua/plugins/catppuccin.lua new file mode 100644 index 0000000..fa451bd --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/catppuccin.lua @@ -0,0 +1,92 @@ +return { + "catppuccin/nvim", + lazy = true, + name = "catppuccin", + priority = 1000, + opts = { + integrations = { + aerial = true, + alpha = true, + cmp = true, + dashboard = true, + flash = true, + gitsigns = true, + headlines = true, + illuminate = true, + indent_blankline = { enabled = true }, + leap = true, + lsp_trouble = true, + mason = true, + markdown = true, + mini = true, + native_lsp = { + enabled = true, + underlines = { + errors = { "undercurl" }, + hints = { "undercurl" }, + warnings = { "undercurl" }, + information = { "undercurl" }, + }, + }, + navic = { enabled = true, custom_bg = "lualine" }, + neotest = true, + neotree = true, + noice = true, + notify = true, + semantic_tokens = true, + telescope = true, + treesitter = true, + treesitter_context = true, + which_key = true, + }, + }, + config = function() + require("catppuccin").setup({ + transparent_background = true, -- disables setting the background color. + styles = { -- Handles the styles of general hi groups (see `:h highlight-args`): + comments = { "italic" }, -- Change the style of comments + conditionals = {}, + loops = {}, + functions = {}, + keywords = { "bold" }, + strings = {}, + variables = {}, + numbers = {}, + booleans = {}, + properties = {}, + types = {}, + operators = {}, + }, + color_overrides = { + mocha = { + rosewater = "#f5e0dc", + flamingo = "#f2cdcd", + pink = "#f5c2e7", + mauve = "#cba6f7", + red = "#f38ba8", + maroon = "#eba0ac", + peach = "#fab387", + yellow = "#f9e2af", + green = "#a6e3a1", + teal = "#94e2d5", + sky = "#89dceb", + sapphire = "#74c7ec", + blue = "#89b4fa", + lavender = "#b4befe", + text = "#cdd6f4", + subtext1 = "#bac2de", + subtext0 = "#a6adc8", + overlay2 = "#9399b2", + overlay1 = "#7f849c", + overlay0 = "#696D86", + surface2 = "#585b70", + surface1 = "#45475a", + surface0 = "#232728", + base = "#282828", + mantle = "#181825", + crust = "#11111b", + }, + }, + }) + end, +} diff --git a/ar/.config/LazyVim/lua/plugins/cmp.lua b/ar/.config/LazyVim/lua/plugins/cmp.lua new file mode 100644 index 0000000..3121e90 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/cmp.lua @@ -0,0 +1,50 @@ +return { + { + "L3MON4D3/LuaSnip", + keys = function() + return {} + end, + }, + { + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-emoji", + }, + ---@param opts cmp.ConfigSchema + opts = function(_, opts) + local has_words_before = function() + unpack = unpack or table.unpack + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil + end + + local luasnip = require("luasnip") + local cmp = require("cmp") + + opts.mapping = vim.tbl_extend("force", opts.mapping, { + ["<Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable() + -- this way you will only jump inside the snippet region + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + ["<S-Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }) + end, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/colorscheme.lua b/ar/.config/LazyVim/lua/plugins/colorscheme.lua new file mode 100644 index 0000000..6acb3d3 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/colorscheme.lua @@ -0,0 +1,11 @@ +return { + { "catppuccin/nvim", name = "catppuccin", opts = { transparent_background = true }, priority = 1000 }, + { + "LazyVim/LazyVim", + opts = { + -- colorscheme = "tokyonight", + colorscheme = "catppuccin", + -- colorscheme = "gruvbox", + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/comment.lua b/ar/.config/LazyVim/lua/plugins/comment.lua new file mode 100644 index 0000000..1979d56 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/comment.lua @@ -0,0 +1,23 @@ +return { + "numToStr/Comment.nvim", + lazy = "false", + keys = { + { + mode = "n", + "<leader>/", + function() + require("Comment.api").toggle.linewise.current() + end, + desc = "Toggle comment", + }, + { + mode = "v", + "<leader>/", + "<ESC><cmd>lua require('Comment.api').toggle.linewise(vim.fn.visualmode())<CR>", + desc = "Toggle comment", + }, + }, + config = function(_, opts) + require("Comment").setup(opts) + end, +} diff --git a/ar/.config/LazyVim/lua/plugins/dadbod.lua b/ar/.config/LazyVim/lua/plugins/dadbod.lua new file mode 100644 index 0000000..b3e8275 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/dadbod.lua @@ -0,0 +1,25 @@ +return { + "kristijanhusak/vim-dadbod-ui", + dependencies = { + { "tpope/vim-dadbod", lazy = true }, + { "kristijanhusak/vim-dadbod-completion", ft = { "sql", "mysql", "plsql" }, lazy = true }, + }, + cmd = { + "DBUI", + "DBUIToggle", + "DBUIAddConnection", + "DBUIFindBuffer", + }, + init = function() + -- Your DBUI configuration + vim.g.db_ui_use_nerd_fonts = 1 + end, + keys = { + { "<leader>ddb", "<cmd>DBUI<cr>", desc = "DB UI" }, + { "<leader>ddu", "<cmd>DBUIToggle<cr>", desc = "Toggle DB UI" }, + { "<leader>dda", "<cmd>DBUIAddConnection<cr>", desc = "Add Connection" }, + { "<leader>ddf", "<cmd>DBUIFindBuffer<cr>", desc = "Find buffer" }, + { "<leader>ddr", "<cmd>DBUIRenameBuffer<cr>", desc = "Rename buffer" }, + { "<leader>ddl", "<cmd>DBUILastQueryInfo<cr>", desc = "Last query info" }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/dashboard-nvim.lua b/ar/.config/LazyVim/lua/plugins/dashboard-nvim.lua new file mode 100644 index 0000000..8a1ffd6 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/dashboard-nvim.lua @@ -0,0 +1,68 @@ +local Util = require("lazyvim.util") +return { + "nvimdev/dashboard-nvim", + opts = function(_, opts) + local logo = [[ + ┌──────────────────────────────────────────────────────┐ + │ │ + │ ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ │ + │ ████╗ ██║██╔════╝██╔═══██╗██║ ██║██║████╗ ████║ │ + │ ██╔██╗ ██║█████╗ ██║ ██║██║ ██║██║██╔████╔██║ │ + │ ██║╚██╗██║██╔══╝ ██║ ██║╚██╗ ██╔╝██║██║╚██╔╝██║ │ + │ ██║ ╚████║███████╗╚██████╔╝ ╚████╔╝ ██║██║ ╚═╝ ██║ │ + │ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═══╝ ╚═╝╚═╝ ╚═╝ │ + └──────────────────────────────────────────────────────┘ + ]] + + logo = string.rep("\n", 5) .. logo .. "\n" + + local opts = { + theme = "doom", + hide = { + -- this is taken care of by lualine + -- enabling this messes up the actual laststatus setting after loading a file + statusline = false, + }, + + config = { + header = vim.split(logo, "\n"), + -- stylua: ignore + center = { + { action = "ene | startinsert", desc = " New file", icon = " ", key = "n" }, + { action = "Telescope oldfiles", desc = " Recent files", icon = " ", key = "r" }, + { action = "Telescope projects", desc = " Projects", icon = " ", key = "p" }, + { action = Util.telescope("files"), desc = " Find file", icon = " ", key = "f" }, + { action = "Telescope live_grep", desc = " Find word", icon = " ", key = "g" }, + { action = [[lua require("lazyvim.util").telescope.config_files()()]], desc = " Config", icon = " ", key = "c" }, + { action = 'lua require("persistence").load()', desc = " Restore Session", icon = " ", key = "s" }, + { action = "LazyExtras", desc = " Lazy Extras", icon = " ", key = "e" }, + { action = "Lazy", desc = " Lazy", icon = " ", key = "l" }, + { action = "Mason", desc = " Mason", icon = "◍ ", key = "m" }, + { action = "qa", desc = " Quit", icon = " ", key = "q" }, + }, + footer = function() + local stats = require("lazy").stats() + local ms = (math.floor(stats.startuptime * 100 + 0.5) / 100) + return { "⚡ Neovim loaded " .. stats.loaded .. "/" .. stats.count .. " plugins in " .. ms .. "ms" } + end, + }, + } + + for _, button in ipairs(opts.config.center) do + button.desc = button.desc .. string.rep(" ", 43 - #button.desc) + button.key_format = " %s" + end + + -- close Lazy and re-open when the dashboard is ready + if vim.o.filetype == "lazy" then + vim.cmd.close() + vim.api.nvim_create_autocmd("User", { + pattern = "DashboardLoaded", + callback = function() + require("lazy").show() + end, + }) + end + return opts + end, +} diff --git a/ar/.config/LazyVim/lua/plugins/example.lua b/ar/.config/LazyVim/lua/plugins/example.lua new file mode 100644 index 0000000..f84ebdc --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/example.lua @@ -0,0 +1,265 @@ +-- since this is just an example spec, don't actually load anything here and return an empty spec +-- stylua: ignore +if true then return {} end + +-- every spec file under the "plugins" directory will be loaded automatically by lazy.nvim +-- +-- In your plugin files, you can: +-- * add extra plugins +-- * disable/enabled LazyVim plugins +-- * override the configuration of LazyVim plugins +return { + -- add gruvbox + { "ellisonleao/gruvbox.nvim" }, + + -- Configure LazyVim to load gruvbox + { + "LazyVim/LazyVim", + opts = { + colorscheme = "gruvbox", + }, + }, + + -- change trouble config + { + "folke/trouble.nvim", + -- opts will be merged with the parent spec + opts = { use_diagnostic_signs = true }, + }, + + -- disable trouble + { "folke/trouble.nvim", enabled = false }, + + -- add symbols-outline + { + "simrat39/symbols-outline.nvim", + cmd = "SymbolsOutline", + keys = { { "<leader>cs", "<cmd>SymbolsOutline<cr>", desc = "Symbols Outline" } }, + config = true, + }, + + -- override nvim-cmp and add cmp-emoji + { + "hrsh7th/nvim-cmp", + dependencies = { "hrsh7th/cmp-emoji" }, + ---@param opts cmp.ConfigSchema + opts = function(_, opts) + table.insert(opts.sources, { name = "emoji" }) + end, + }, + + -- change some telescope options and a keymap to browse plugin files + { + "nvim-telescope/telescope.nvim", + keys = { + -- add a keymap to browse plugin files + -- stylua: ignore + { + "<leader>fp", + function() require("telescope.builtin").find_files({ cwd = require("lazy.core.config").options.root }) end, + desc = "Find Plugin File", + }, + }, + -- change some options + opts = { + defaults = { + layout_strategy = "horizontal", + layout_config = { prompt_position = "top" }, + sorting_strategy = "ascending", + winblend = 0, + }, + }, + }, + + -- add telescope-fzf-native + { + "telescope.nvim", + dependencies = { + "nvim-telescope/telescope-fzf-native.nvim", + build = "make", + config = function() + require("telescope").load_extension("fzf") + end, + }, + }, + + -- add pyright to lspconfig + { + "neovim/nvim-lspconfig", + ---@class PluginLspOpts + opts = { + ---@type lspconfig.options + servers = { + -- pyright will be automatically installed with mason and loaded with lspconfig + pyright = {}, + }, + }, + }, + + -- add tsserver and setup with typescript.nvim instead of lspconfig + { + "neovim/nvim-lspconfig", + dependencies = { + "jose-elias-alvarez/typescript.nvim", + init = function() + require("lazyvim.util").on_attach(function(_, buffer) + -- stylua: ignore + vim.keymap.set( "n", "<leader>co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) + vim.keymap.set("n", "<leader>cR", "TypescriptRenameFile", { desc = "Rename File", buffer = buffer }) + end) + end, + }, + ---@class PluginLspOpts + opts = { + ---@type lspconfig.options + servers = { + -- tsserver will be automatically installed with mason and loaded with lspconfig + tsserver = {}, + }, + -- you can do any additional lsp server setup here + -- return true if you don't want this server to be setup with lspconfig + ---@type table<string, fun(server:string, opts:_.lspconfig.options):boolean?> + setup = { + -- example to setup with typescript.nvim + tsserver = function(_, opts) + require("typescript").setup({ server = opts }) + return true + end, + -- Specify * to use this function as a fallback for any server + -- ["*"] = function(server, opts) end, + }, + }, + }, + + -- for typescript, LazyVim also includes extra specs to properly setup lspconfig, + -- treesitter, mason and typescript.nvim. So instead of the above, you can use: + { import = "lazyvim.plugins.extras.lang.typescript" }, + + -- add more treesitter parsers + { + "nvim-treesitter/nvim-treesitter", + opts = { + ensure_installed = { + "bash", + "html", + "javascript", + "json", + "lua", + "markdown", + "markdown_inline", + "python", + "query", + "regex", + "tsx", + "typescript", + "vim", + "yaml", + }, + }, + }, + + -- since `vim.tbl_deep_extend`, can only merge tables and not lists, the code above + -- would overwrite `ensure_installed` with the new value. + -- If you'd rather extend the default config, use the code below instead: + { + "nvim-treesitter/nvim-treesitter", + opts = function(_, opts) + -- add tsx and treesitter + vim.list_extend(opts.ensure_installed, { + "tsx", + "typescript", + }) + end, + }, + + -- the opts function can also be used to change the default opts: + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function(_, opts) + table.insert(opts.sections.lualine_x, "😄") + end, + }, + + -- or you can return new options to override all the defaults + { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + opts = function() + return { + --[[add your custom lualine config here]] + } + end, + }, + + -- use mini.starter instead of alpha + { import = "lazyvim.plugins.extras.ui.mini-starter" }, + + -- add jsonls and schemastore packages, and setup treesitter for json, json5 and jsonc + { import = "lazyvim.plugins.extras.lang.json" }, + + -- add any tools you want to have installed below + { + "williamboman/mason.nvim", + opts = { + ensure_installed = { + "stylua", + "shellcheck", + "shfmt", + "flake8", + }, + }, + }, + + -- Use <tab> for completion and snippets (supertab) + -- first: disable default <tab> and <s-tab> behavior in LuaSnip + { + "L3MON4D3/LuaSnip", + keys = function() + return {} + end, + }, + -- then: setup supertab in cmp + { + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-emoji", + }, + ---@param opts cmp.ConfigSchema + opts = function(_, opts) + local has_words_before = function() + unpack = unpack or table.unpack + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil + end + + local luasnip = require("luasnip") + local cmp = require("cmp") + + opts.mapping = vim.tbl_extend("force", opts.mapping, { + ["<Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable() + -- this way you will only jump inside the snippet region + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + ["<S-Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }) + end, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/file-browser.lua b/ar/.config/LazyVim/lua/plugins/file-browser.lua new file mode 100644 index 0000000..9a9ea2f --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/file-browser.lua @@ -0,0 +1,15 @@ +return { + "nvim-telescope/telescope-file-browser.nvim", + dependencies = { "nvim-telescope/telescope.nvim", "nvim-lua/plenary.nvim" }, + keys = { + { + mode = "n", + "<leader>sB", + ":Telescope file_browser path=%:p:h=%:p:h<cr>", + desc = "Browse Files", + }, + }, + config = function() + require("telescope").load_extension("file_browser") + end, +} diff --git a/ar/.config/LazyVim/lua/plugins/glow.lua b/ar/.config/LazyVim/lua/plugins/glow.lua new file mode 100644 index 0000000..e4702d2 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/glow.lua @@ -0,0 +1,8 @@ +return { + "ellisonleao/glow.nvim", + cmd = "Glow", + config = true, + keys = { + { mode = "n", "<leader>mf", "<cmd>Glow<cr>", desc = "Markdown Preview float" }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/goyo.lua b/ar/.config/LazyVim/lua/plugins/goyo.lua new file mode 100644 index 0000000..9d0f860 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/goyo.lua @@ -0,0 +1,53 @@ +vim.g.is_goyo_active = false + +vim.g.goyo_enter = function() + if vim.fn.executable("tmux") == 1 and vim.fn.strlen(vim.env.TMUX) > 0 then + vim.fn.system("tmux set status off") + if not string.find(vim.fn.system("tmux list-panes -F '#F'"), "Z") then + vim.fn.system("tmux resize-pane -Z") + end + end + + vim.g.default_colorscheme = vim.g.colors_name or "default" + vim.o.background = "light" + vim.wo.linebreak = true + vim.wo.wrap = true + vim.bo.textwidth = 0 + vim.bo.wrapmargin = 0 + vim.cmd("Goyo 80x85%") + vim.cmd("colorscheme seoul256") + vim.g.is_goyo_active = true +end + +vim.g.goyo_leave = function() + if vim.fn.executable("tmux") == 1 and vim.fn.strlen(vim.env.TMUX) > 0 then + vim.fn.system("tmux set status on") + if string.find(vim.fn.system("tmux list-panes -F '#F'"), "Z") then + vim.fn.system("tmux resize-pane -Z") + end + end + vim.cmd("Goyo!") + vim.cmd("colorscheme " .. vim.g.default_colorscheme) + vim.g.is_goyo_active = false +end + +vim.g.toggle_goyo = function() + if vim.g.is_goyo_active then + vim.g.goyo_leave() + else + vim.g.goyo_enter() + end +end + +return { + "junegunn/goyo.vim", + cmd = "Goyo", + keys = { + vim.api.nvim_set_keymap( + "n", + "<leader>gy", + "<cmd>lua vim.g.toggle_goyo()<CR>", + { noremap = true, silent = true, desc = "Toggle Goyo" } + ), + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/harpoon.lua b/ar/.config/LazyVim/lua/plugins/harpoon.lua new file mode 100644 index 0000000..a156e1d --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/harpoon.lua @@ -0,0 +1,19 @@ +return { + "ThePrimeagen/harpoon", + branch = "harpoon2", + opts = { + menu = { + width = vim.api.nvim_win_get_width(0) - 4, + }, + }, + keys = { + { + "<C-e>", + function() + local harpoon = require("harpoon") + harpoon.ui:toggle_quick_menu(harpoon:list()) + end, + desc = "Harpoon quick menu", + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/impatient.lua b/ar/.config/LazyVim/lua/plugins/impatient.lua new file mode 100644 index 0000000..d0877c9 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/impatient.lua @@ -0,0 +1,6 @@ +return { + "lewis6991/impatient.nvim", + config = function() + require("impatient") + end, +} diff --git a/ar/.config/LazyVim/lua/plugins/jukit.lua b/ar/.config/LazyVim/lua/plugins/jukit.lua new file mode 100644 index 0000000..f5ad24f --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/jukit.lua @@ -0,0 +1,79 @@ +return { + -- "luk400/vim-jukit", + -- lazy = false, + -- keys = { + -- { "<leader>os", false }, + -- { "<leader>ts", false }, + -- { "<leader>hs", false }, + -- { "<leader>ohs", false }, + -- { "<leader>hd", false }, + -- { "<leader>od", false }, + -- { "<leader>ohd", false }, + -- { "<leader>so", false }, + -- { "<leader>j", false }, + -- { "<leader>k", false }, + -- { "<leader>ah", false }, + -- { "<leader>sl", false }, + -- { "<space>", false }, + -- { "<cr>", false }, + -- { "<cr>", false }, + -- { "<leader>cc", false }, + -- { "<leader>all", false }, + -- { "<leader>co", false }, + -- { "<leader>cO", false }, + -- { "<leader>ct", false }, + -- { "<leader>cT", false }, + -- { "<leader>cd", false }, + -- { "<leader>cs", false }, + -- { "<leader>cM", false }, + -- { "<leader>cm", false }, + -- { "<leader>ck", false }, + -- { "<leader>cj", false }, + -- { "<leader>J", false }, + -- { "<leader>K", false }, + -- { "<leader>ddo", false }, + -- { "<leader>dda", false }, + -- { "<leader>np", false }, + -- { "<leader>ht", false }, + -- { "<leader>rht", false }, + -- { "<leader>pd", false }, + -- { "<leader>rpd", false }, + -- + -- { "<localleader>os", ":call jukit#splits#output()<cr>", desc = "", mode = "n" }, + -- { "<localleader>ts", ":call jukit#splits#term()<cr>", desc = "", mode = "n" }, + -- { "<localleader>hs", ":call jukit#splits#history()<cr>", desc = "", mode = "n" }, + -- { "<localleader>ohs", ":call jukit#splits#output_and_history()<cr>", desc = "", mode = "n" }, + -- { "<localleader>hd", ":call jukit#splits#close_history()<cr>", desc = "", mode = "n" }, + -- { "<localleader>od", ":call jukit#splits#close_output_split()<cr>", desc = "", mode = "n" }, + -- { "<localleader>ohd", ":call jukit#splits#close_output_and_history(1)<cr>", desc = "", mode = "n" }, + -- { "<localleader>so", ":call jukit#splits#show_last_cell_output(1)<cr>", desc = "", mode = "n" }, + -- { "<localleader>j", ":call jukit#splits#out_hist_scroll(1)<cr>", desc = "", mode = "n" }, + -- { "<localleader>k", ":call jukit#splits#out_hist_scroll(0)<cr>", desc = "", mode = "n" }, + -- { "<localleader>ah", ":call jukit#splits#toggle_auto_hist()<cr>", desc = "", mode = "n" }, + -- { "<localleader>sl", ":call jukit#layouts#set_layout()<cr>", desc = "", mode = "n" }, + -- { "<localleader><space>", ":call jukit#send#section(0)<cr>", desc = "", mode = "n" }, + -- { "<localleader><cr>", ":call jukit#send#line()<cr>", desc = "", mode = "n" }, + -- { "<localleader><cr>", ":<C-U>call jukit#send#selection()<cr>", desc = "", mode = "v" }, + -- { "<localleader>cc", ":call jukit#send#until_current_section()<cr>", desc = "", mode = "n" }, + -- { "<localleader>all", ":call jukit#send#all()<cr>", desc = "", mode = "n" }, + -- { "<localleader>co", ":call jukit#cells#create_below(0)<cr>", desc = "", mode = "n" }, + -- { "<localleader>cO", ":call jukit#cells#create_above(0)<cr>", desc = "", mode = "n" }, + -- { "<localleader>ct", ":call jukit#cells#create_below(1)<cr>", desc = "", mode = "n" }, + -- { "<localleader>cT", ":call jukit#cells#create_above(1)<cr>", desc = "", mode = "n" }, + -- { "<localleader>cd", ":call jukit#cells#delete()<cr>", desc = "", mode = "n" }, + -- { "<localleader>cs", ":call jukit#cells#split()<cr>", desc = "", mode = "n" }, + -- { "<localleader>cM", ":call jukit#cells#merge_above()<cr>", desc = "", mode = "n" }, + -- { "<localleader>cm", ":call jukit#cells#merge_below()<cr>", desc = "", mode = "n" }, + -- { "<localleader>ck", ":call jukit#cells#move_up()<cr>", desc = "", mode = "n" }, + -- { "<localleader>cj", ":call jukit#cells#move_down()<cr>", desc = "", mode = "n" }, + -- { "<localleader>J", ":call jukit#cells#jump_to_next_cell()<cr>", desc = "", mode = "n" }, + -- { "<localleader>K", ":call jukit#cells#jump_to_previous_cell()<cr>", desc = "", mode = "n" }, + -- { "<localleader>ddo", ":call jukit#cells#delete_outputs(0)<cr>", desc = "", mode = "n" }, + -- { "<localleader>dda", ":call jukit#cells#delete_outputs(1)<cr>", desc = "", mode = "n" }, + -- { "<localleader>np", ":call jukit#convert#notebook_convert('jupyter-notebook')<cr>", desc = "", mode = "n" }, + -- { "<localleader>ht", ":call jukit#convert#save_nb_to_file(0,1,'html')<cr>", desc = "", mode = "n" }, + -- { "<localleader>rht", ":call jukit#convert#save_nb_to_file(1,1,'html')<cr>", desc = "", mode = "n" }, + -- { "<localleader>pd", ":call jukit#convert#save_nb_to_file(0,1,'pdf')<cr>", desc = "", mode = "n" }, + -- { "<localleader>rpd", ":call jukit#convert#save_nb_to_file(1,1,'pdf')<cr>", desc = "", mode = "n" }, + -- }, +} diff --git a/ar/.config/LazyVim/lua/plugins/jupyter.lua b/ar/.config/LazyVim/lua/plugins/jupyter.lua new file mode 100644 index 0000000..0cb684b --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/jupyter.lua @@ -0,0 +1,345 @@ +local function get_commenter() + local commenter = { python = "# ", lua = "-- ", julia = "# ", fennel = ";; ", scala = "// ", r = "# " } + local bufnr = vim.api.nvim_get_current_buf() + local ft = vim.api.nvim_buf_get_option(bufnr, "filetype") + if ft == nil or ft == "" then + return commenter["python"] + elseif commenter[ft] == nil then + return commenter["python"] + end + + return commenter[ft] +end + +local CELL_MARKER = get_commenter() .. "%%" +vim.api.nvim_set_hl(0, "CellMarkerHl", { default = true, bg = "#c5c5c5", fg = "#111111" }) + +local function miniai_spec(mode) + local start_line = vim.fn.search("^" .. CELL_MARKER, "bcnW") + + if start_line == 0 then + start_line = 1 + else + if mode == "i" then + start_line = start_line + 1 + end + end + + local end_line = vim.fn.search("^" .. CELL_MARKER, "nW") - 1 + if end_line == -1 then + end_line = vim.fn.line("$") + end + + local last_col = math.max(vim.fn.getline(end_line):len(), 1) + + local from = { line = start_line, col = 1 } + local to = { line = end_line, col = last_col } + + return { from = from, to = to } +end + +local function show_cell_markers() + require("mini.hipatterns").enable(0, { + highlighters = { + marker = { pattern = "^" .. get_commenter() .. "%%%%", group = "CellMarkerHl" }, + }, + }) +end + +local function select_cell() + local bufnr = vim.api.nvim_get_current_buf() + local current_row = vim.api.nvim_win_get_cursor(0)[1] + local current_col = vim.api.nvim_win_get_cursor(0)[2] + + local start_line = nil + local end_line = nil + + for line = current_row, 1, -1 do + local line_content = vim.api.nvim_buf_get_lines(bufnr, line - 1, line, false)[1] + if line_content:find("^" .. CELL_MARKER) then + start_line = line + break + end + end + local line_count = vim.api.nvim_buf_line_count(bufnr) + for line = current_row + 1, line_count do + local line_content = vim.api.nvim_buf_get_lines(bufnr, line - 1, line, false)[1] + if line_content:find("^" .. CELL_MARKER) then + end_line = line + break + end + end + + if not start_line then + start_line = 1 + end + if not end_line then + end_line = line_count + end + return current_row, current_col, start_line, end_line +end + +local function execute_cell() + local current_row, current_col, start_line, end_line = select_cell() + if start_line and end_line then + vim.fn.setpos("'<", { 0, start_line + 1, 0, 0 }) + vim.fn.setpos("'>", { 0, end_line - 1, 0, 0 }) + require("iron.core").visual_send() + vim.api.nvim_win_set_cursor(0, { current_row, current_col }) + end +end + +local function delete_cell() + local _, _, start_line, end_line = select_cell() + if start_line and end_line then + local rows_to_select = end_line - start_line - 1 + vim.api.nvim_win_set_cursor(0, { start_line, 0 }) + vim.cmd("normal!V " .. rows_to_select .. "j") + vim.cmd("normal!d") + vim.cmd("normal!k") + end +end + +local function navigate_cell(up) + local is_up = up or false + local _, _, start_line, end_line = select_cell() + if is_up and start_line ~= 1 then + vim.api.nvim_win_set_cursor(0, { start_line - 1, 0 }) + elseif end_line then + local bufnr = vim.api.nvim_get_current_buf() + local line_count = vim.api.nvim_buf_line_count(bufnr) + if end_line ~= line_count then + vim.api.nvim_win_set_cursor(0, { end_line + 1, 0 }) + _, _, start_line, end_line = select_cell() + vim.api.nvim_win_set_cursor(0, { end_line - 1, 0 }) + end + end +end + +local function move_cell(dir) + local search_res + local result + if dir == "d" then + search_res = vim.fn.search("^" .. CELL_MARKER, "W") + if search_res == 0 then + result = "last" + end + else + search_res = vim.fn.search("^" .. CELL_MARKER, "bW") + if search_res == 0 then + result = "first" + vim.api.nvim_win_set_cursor(0, { 1, 0 }) + end + end + + return result +end + +local function insert_cell_before(content) + content = content or CELL_MARKER + local cell_object = miniai_spec("a") + vim.api.nvim_buf_set_lines(0, cell_object.from.line - 1, cell_object.from.line - 1, false, { content, "" }) + move_cell("u") +end + +local function insert_cell_after(content) + content = content or CELL_MARKER + vim.print(content) + local cell_object = miniai_spec("a") + vim.api.nvim_buf_set_lines(0, cell_object.to.line, cell_object.to.line, false, { content, "" }) + move_cell("d") +end + +local function insert_markdown_cell() + insert_cell_after(CELL_MARKER .. " [markdown]") +end + +local function repl_menu() + local cmd = require("hydra.keymap-util").cmd + + local hint = [[ + ^ + _a_: Insert Cell After + _b_: Insert Cell Before + _e_: Execute Cell + _j_: Next Cell + _k_: Previous Cell + _m_: Insert Markdown Cell + _x_: Delete Cell + ^ + _s_: Send Motion + _l_: Send Line + _t_: Send Until Cursor + _f_: Send File + ^ + _R_: Show REPL + _C_: Close REPL + _S_: Restart REPL + _F_: Focus + _H_: Hide + ^ + _c_: Clear + _L_: Clear Highlight + _<CR>_: ENTER + _I_: Interrupt + ^ + ^ ^ _q_: Quit +]] + + return { + name = "REPL", + hint = hint, + config = { + color = "pink", + invoke_on_body = true, + hint = { + border = "rounded", + position = "bottom-middle", + }, + }, + mode = "n", + body = "<A-n>", + -- stylua: ignore + heads = { + { "a", insert_cell_after, desc = "Insert Cell After", }, + { "b", insert_cell_before, desc = "Insert Cell Before", }, + { "e", execute_cell, desc = "Execute Cell", }, + { "j", navigate_cell , desc = "Next Cell", }, + { "k", function() navigate_cell(true) end, desc = "Previous Cell", }, + { "m", insert_markdown_cell, desc = "Insert Markdown Cell", }, + { "x", delete_cell, desc = "Delete Cell", }, + { "s", function() require("iron.core").run_motion("send_motion") end, desc = "Send Motion" }, + { "l", function() require("iron.core").send_line() end, desc = "Send Line" }, + { "t", function() require("iron.core").send_until_cursor() end, desc = "Send Until Cursor" }, + { "f", function() require("iron.core").send_file() end, desc = "Send File" }, + { "L", function() require("iron.marks").clear_hl() end, mode = {"v"}, desc = "Clear Highlight" }, + { "<CR>", function() require("iron.core").send(nil, string.char(13)) end, desc = "ENTER" }, + { "I", function() require("iron.core").send(nil, string.char(03)) end, desc = "Interrupt" }, + { "C", function() require("iron.core").close_repl() end, desc = "Close REPL" }, + { "c", function() require("iron.core").send(nil, string.char(12)) end, desc = "Clear" }, + { "R", cmd("IronRepl"), desc = "REPL" }, + { "S", cmd("IronRestart"), desc = "Restart" }, + { "F", cmd("IronFocus"), desc = "Focus" }, + { "H", cmd("IronHide"), desc = "Hide" }, + { "q", nil, { exit = true, nowait = true, desc = "Exit" } }, + }, + } +end + +return { + { + "goerz/jupytext.vim", + build = "pip install jupytext", + event = "VeryLazy", + dependencies = { "neovim/nvim-lspconfig" }, + opts = {}, + config = function() + -- The destination format: 'ipynb', 'markdown' or 'script', or a file extension: 'md', 'Rmd', 'jl', 'py', 'R', ..., 'auto' (script + -- extension matching the notebook language), or a combination of an extension and a format name, e.g. md:markdown, md:pandoc, + -- md:myst or py:percent, py:light, py:nomarker, py:hydrogen, py:sphinx. The default format for scripts is the 'light' format, + -- which uses few cell markers (none when possible). Alternatively, a format compatible with many editors is the 'percent' format, + -- which uses '# %%' as cell markers. The main formats (markdown, light, percent) preserve notebooks and text documents in a + -- roundtrip. Use the --test and and --test-strict commands to test the roundtrip on your files. Read more about the available + -- formats at https://jupytext.readthedocs.io/en/latest/formats.html (default: None) + vim.g.jupytext_fmt = "py:percent" + + -- Autocmd to set cell markers + vim.api.nvim_create_autocmd({ "BufEnter" }, { -- "BufWriteCmd" + group = vim.api.nvim_create_augroup("au_show_cell_markers", { clear = true }), + pattern = { "*.py", "*.r", "*.ipynb", "*.jl", "*.scala", "*.lua", "*.fnl" }, + callback = function(event) + show_cell_markers() + end, + }) + end, + }, + { + "Vigemus/iron.nvim", + event = "VeryLazy", + opts = function() + return { + config = { + -- Whether a repl should be discarded or not + scratch_repl = true, + -- Your repl definitions come here + + repl_definition = { + python = require("iron.fts.python").ipython, + scala = require("iron.fts.scala").scala, + }, + -- How the repl window will be displayed + -- See below for more information + repl_open_cmd = require("iron.view").right("50%"), + }, + -- If the highliht is on, you can change how it looks + -- For the available options, check nvim_set_hl + highlight = { + italic = true, + }, + ignore_blank_lines = true, -- ignore blank lines when sending visual select lines + } + end, + -- stylua: ignore + keys = { + { "<leader>i", function() end, mode = {"n", "x"}, desc = "+REPL" }, + { "<leader>im", function() end, mode = {"n", "x"}, desc = "+Mark" }, + { "<leader>ire>", execute_cell, desc = "Execute Cell" }, + { "<leader>irx", delete_cell, desc = "Delete Cell" }, + { "<leader>ir]", navigate_cell, desc = "Next Cell" }, + { "<leader>ir[", function() navigate_cell(true) end, desc = "Previous Cell" }, + { "<leader>is", function() require("iron.core").run_motion("send_motion") end, desc = "Send Motion" }, + { "<leader>is", function() require("iron.core").visual_send() end, mode = {"v"}, desc = "Send" }, + { "<leader>il", function() require("iron.core").send_line() end, desc = "Send Line" }, + { "<leader>it", function() require("iron.core").send_until_cursor() end, desc = "Send Until Cursor" }, + { "<leader>if", function() require("iron.core").send_file() end, desc = "Send File" }, + { "<leader>iL", function() require("iron.marks").clear_hl() end, mode = {"v"}, desc = "Clear Highlight" }, + { "<leader>i<cr>", function() require("iron.core").send(nil, string.char(13)) end, desc = "ENTER" }, + { "<leader>iI", function() require("iron.core").send(nil, string.char(03)) end, desc = "Interrupt" }, + { "<leader>iC", function() require("iron.core").close_repl() end, desc = "Close REPL" }, + { "<leader>ic", function() require("iron.core").send(nil, string.char(12)) end, desc = "Clear" }, + { "<leader>ims", function() require("iron.core").send_mark() end, desc = "Send Mark" }, + { "<leader>imm", function() require("iron.core").run_motion("mark_motion") end, desc = "Mark Motion" }, + { "<leader>imv", function() require("iron.core").mark_visual() end, mode = {"v"}, desc = "Mark Visual" }, + { "<leader>imr", function() require("iron.marks").drop_last() end, desc = "Remove Mark" }, + { "<leader>iR", "<cmd>IronRepl<cr>", desc = "REPL" }, + { "<leader>iS", "<cmd>IronRestart<cr>", desc = "Restart" }, + { "<leader>iF", "<cmd>IronFocus<cr>", desc = "Focus" }, + { "<leader>iH", "<cmd>IronHide<cr>", desc = "Hide" }, + }, + config = function(_, opts) + local iron = require("iron.core") + iron.setup(opts) + end, + }, + { + "folke/which-key.nvim", + event = "VeryLazy", + opts = { + defaults = { + ["<leader>i"] = { name = "+REPL" }, + ["<leader>im"] = { name = "+Mark" }, + }, + }, + }, + { + "anuvyklack/hydra.nvim", + event = { "VeryLazy" }, + opts = { + specs = { + repl = repl_menu, + }, + }, + config = function(_, opts) + local hydra = require("hydra") + for s, _ in pairs(opts.specs) do + hydra(opts.specs[s]()) + end + end, + }, + { + "echasnovski/mini.ai", + opts = function(_, opts) + opts.custom_textobjects = vim.tbl_extend("force", opts.custom_textobjects, { h = miniai_spec }) + end, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/lspconfig.lua b/ar/.config/LazyVim/lua/plugins/lspconfig.lua new file mode 100644 index 0000000..4d8db1c --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/lspconfig.lua @@ -0,0 +1,77 @@ +return { + "neovim/nvim-lspconfig", + init = function() + local keys = require("lazyvim.plugins.lsp.keymaps").get() + -- change a keymap + -- keys[#keys + 1] = { "K", "<cmd>echo 'hello'<cr>" } + -- keys[#keys + 1] = { "<c-k>", mode = { "i" }, false } + + -- disable a keymap + -- keys[#keys + 1] = { "K", false } + keys[#keys + 1] = { mode = { "i" }, "<c-k>", false } + + -- add a keymap + -- keys[#keys + 1] = { "H", "<cmd>echo 'hello'<cr>" } + end, + opts = { + servers = { + -- Ensure mason installs the server + clangd = { + keys = { + { "<leader>cR", "<cmd>ClangdSwitchSourceHeader<cr>", desc = "Switch Source/Header (C/C++)" }, + }, + root_dir = function(fname) + return require("lspconfig.util").root_pattern( + "Makefile", + "configure.ac", + "configure.in", + "config.h.in", + "meson.build", + "meson_options.txt", + "build.ninja" + )(fname) or require("lspconfig.util").root_pattern("compile_commands.json", "compile_flags.txt")( + fname + ) or require("lspconfig.util").find_git_ancestor(fname) + end, + capabilities = { + offsetEncoding = { "utf-16" }, + }, + cmd = { + "clangd", + "--background-index", + "--clang-tidy", + "--header-insertion=iwyu", + "--completion-style=detailed", + "--function-arg-placeholders", + "--fallback-style=llvm", + }, + init_options = { + usePlaceholders = true, + completeUnimported = true, + clangdFileStatus = true, + }, + }, + }, + setup = { + clangd = function(_, opts) + local clangd_ext_opts = require("lazyvim.util").opts("clangd_extensions.nvim") + require("clangd_extensions").setup(vim.tbl_deep_extend("force", clangd_ext_opts or {}, { server = opts })) + return false + end, + }, + }, + keys = { + { + -- mode = "n", + "<leader>rr", + ":w | :TermExec cmd='compiler \"%\"' size=50 direction=tab go_back=0<cr>", + desc = "Run Code", + }, + { + -- mode = "n", + "<leader>rd", + ":w | :TermExec cmd='compiler \"%\" -d' size=50 direction=tab go_back=0<cr>", + desc = "Debug Code", + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/lualine.lua b/ar/.config/LazyVim/lua/plugins/lualine.lua new file mode 100644 index 0000000..7c64086 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/lualine.lua @@ -0,0 +1,105 @@ +return { + "nvim-lualine/lualine.nvim", + event = "VeryLazy", + init = function() + vim.g.lualine_laststatus = vim.o.laststatus + if vim.fn.argc(-1) > 0 then + -- set an empty statusline till lualine loads + vim.o.statusline = " " + else + -- hide the statusline on the starter page + vim.o.laststatus = 0 + end + end, + opts = function() + -- PERF: we don't need this lualine require madness 🤷 + local lualine_require = require("lualine_require") + lualine_require.require = require + + local icons = require("lazyvim.config").icons + + vim.o.laststatus = vim.g.lualine_laststatus + + return { + options = { + theme = "auto", + component_separators = { left = " ", right = " " }, + section_separators = { left = " ", right = " " }, + globalstatus = true, + disabled_filetypes = { statusline = { "dashboard", "alpha", "starter" } }, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { "branch" }, + + lualine_c = { + LazyVim.lualine.root_dir(), + { + "diagnostics", + symbols = { + error = icons.diagnostics.Error, + warn = icons.diagnostics.Warn, + info = icons.diagnostics.Info, + hint = icons.diagnostics.Hint, + }, + }, + { "filetype", icon_only = true, separator = "", padding = { left = 1, right = 0 } }, + { LazyVim.lualine.pretty_path() }, + }, + lualine_x = { + -- stylua: ignore + { + function() return require("noice").api.status.command.get() end, + cond = function() return package.loaded["noice"] and require("noice").api.status.command.has() end, + color = LazyVim.ui.fg("Statement"), + }, + -- stylua: ignore + { + function() return require("noice").api.status.mode.get() end, + cond = function() return package.loaded["noice"] and require("noice").api.status.mode.has() end, + color = LazyVim.ui.fg("Constant"), + }, + -- stylua: ignore + { + function() return " " .. require("dap").status() end, + cond = function () return package.loaded["dap"] and require("dap").status() ~= "" end, + color = LazyVim.ui.fg("Debug"), + }, + { + require("lazy.status").updates, + cond = require("lazy.status").has_updates, + color = LazyVim.ui.fg("Special"), + }, + { + "diff", + symbols = { + added = icons.git.added, + modified = icons.git.modified, + removed = icons.git.removed, + }, + source = function() + local gitsigns = vim.b.gitsigns_status_dict + if gitsigns then + return { + added = gitsigns.added, + modified = gitsigns.changed, + removed = gitsigns.removed, + } + end + end, + }, + }, + lualine_y = { + { "progress", separator = " ", padding = { left = 1, right = 0 } }, + { "location", padding = { left = 0, right = 1 } }, + }, + lualine_z = { + function() + return " " .. os.date("%R") + end, + }, + }, + extensions = { "neo-tree", "lazy" }, + } + end, +} diff --git a/ar/.config/LazyVim/lua/plugins/magma.lua b/ar/.config/LazyVim/lua/plugins/magma.lua new file mode 100644 index 0000000..f648762 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/magma.lua @@ -0,0 +1,23 @@ +return { + "dccsillag/magma-nvim", + build = ":UpdateRemotePlugins", + keys = { + { + "<LocalLeader>r", + ":MagmaEvaluateOperator<CR>", + expr = true, + silent = true, + desc = "Evaluate Operator", + mode = "n", + }, + { "<LocalLeader>rr", ":MagmaEvaluateLine<CR>", silent = true, desc = "Evaluate Line", mode = "n" }, + { "<LocalLeader>rv", ":<C-u>MagmaEvaluateVisual<CR>", silent = true, desc = "Evaluate Visual", mode = "x" }, + { "<LocalLeader>rc", ":MagmaReevaluateCell<CR>", silent = true, desc = "Reevaluate Cell", mode = "n" }, + { "<LocalLeader>rd", ":MagmaDelete<CR>", silent = true, desc = "Delete", mode = "n" }, + { "<LocalLeader>ro", ":MagmaShowOutput<CR>", silent = true, desc = "Show Output", mode = "n" }, + { "<LocalLeader>ri", ":MagmaInit python3<CR>", silent = true, desc = "Init", mode = "n" }, + -- let g:magma_automatically_open_output = v:false + -- let g:magma_image_provider = "ueberzug" + -- let g:magma_image_provider = "kitty" + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/markdown-preview.lua b/ar/.config/LazyVim/lua/plugins/markdown-preview.lua new file mode 100644 index 0000000..328f2e9 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/markdown-preview.lua @@ -0,0 +1,23 @@ +return { + "iamcco/markdown-preview.nvim", + cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, + -- build = function() + -- vim.fn["mkdp#util#install"]() + -- end, + keys = { + { + "<leader>cp", + false, + }, + { + mode = "n", + "<leader>mp", + ft = "markdown", + "<cmd>MarkdownPreviewToggle<cr>", + desc = "Markdown Preview", + }, + }, + -- config = function() + -- vim.cmd([[do FileType]]) + -- end, +} diff --git a/ar/.config/LazyVim/lua/plugins/mason.lua b/ar/.config/LazyVim/lua/plugins/mason.lua new file mode 100644 index 0000000..96e320d --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/mason.lua @@ -0,0 +1,92 @@ +local options = { + ensure_installed = { + "black", + "clangd", + "codelldb", + "debugpy", + "docker-compose-language-service", + "dockerfile-language-server", + "eslint-lsp", + "hadolint", + "java-debug-adapter", + "java-test", + "jdtls", + "json-lsp", + "lua-language-server", + "markdownlint", + "marksman", + "prettier", + "pyright", + "ruff", + "shfmt", + "stylua", + "yaml-language-server", + }, + + max_concurrent_installers = 10, +} + +return { + "williamboman/mason.nvim", + cmd = { "Mason", "MasonInstall", "MasonInstallAll", "MasonUpdate" }, + opts = function() + return options + end, + build = ":MasonUpdate", + ---@param opts MasonSettings | {ensure_installed: string[]} + config = function(_, opts) + require("mason").setup(opts) + local mr = require("mason-registry") + mr:on("package:install:success", function() + vim.defer_fn(function() + -- trigger FileType event to possibly load this newly installed LSP server + require("lazy.core.handler.event").trigger({ + event = "FileType", + buf = vim.api.nvim_get_current_buf(), + }) + end, 100) + end) + local function ensure_installed() + for _, tool in ipairs(opts.ensure_installed) do + local p = mr.get_package(tool) + if not p:is_installed() then + p:install() + end + end + end + if mr.refresh then + mr.refresh(ensure_installed) + else + ensure_installed() + end + require("mason").setup(opts) + vim.api.nvim_create_user_command("MasonInstallAll", function() + if opts.ensure_installed and #opts.ensure_installed > 0 then + vim.cmd("MasonInstall " .. table.concat(opts.ensure_installed, " ")) + end + end, {}) + + vim.g.mason_binaries_list = opts.ensure_installed + end, + keys = { + { "<leader>cm", false }, + { + mode = "n", + "<leader>ms", + "<cmd>Mason<cr>", + desc = "Mason", + }, + { + mode = "n", + "<leader>mu", + "<cmd>MasonUpdate<cr>", + desc = "Mason Update", + }, + { + mode = "n", + "<leader>mi", + "<cmd>MasonInstallAll<cr>", + desc = "Mason Install All", + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/neogen.lua b/ar/.config/LazyVim/lua/plugins/neogen.lua new file mode 100644 index 0000000..0fbe48a --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/neogen.lua @@ -0,0 +1,33 @@ +local opts = { noremap = true, silent = true } +return { + "danymat/neogen", + dependencies = "nvim-treesitter/nvim-treesitter", + config = true, + version = "*", + keys = { + vim.api.nvim_set_keymap( + "n", + "<Leader>nf", + ":lua require('neogen').generate({type = 'file'})<CR>", + { desc = "generate file", noremap = true, silent = true } + ), + vim.api.nvim_set_keymap( + "n", + "<Leader>nn", + ":lua require('neogen').generate({type = 'func'})<CR>", + { desc = "generate function", noremap = true, silent = true } + ), + vim.api.nvim_set_keymap( + "n", + "<Leader>nc", + ":lua require('neogen').generate({ type = 'class' })<CR>", + { desc = "generate class", noremap = true, silent = true } + ), + vim.api.nvim_set_keymap( + "n", + "<Leader>nt", + ":lua require('neogen').generate({ type = 'type' })<CR>", + { desc = "generate type", noremap = true, silent = true } + ), + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/notify.lua b/ar/.config/LazyVim/lua/plugins/notify.lua new file mode 100644 index 0000000..828aaf1 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/notify.lua @@ -0,0 +1,6 @@ +return { + "rcarriga/nvim-notify", + opts = { + background_colour = "#000000", + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/nvim-neo-tree.lua b/ar/.config/LazyVim/lua/plugins/nvim-neo-tree.lua new file mode 100644 index 0000000..ebb7387 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/nvim-neo-tree.lua @@ -0,0 +1,16 @@ +local Util = require("lazyvim.util") +return { + "nvim-neo-tree/neo-tree.nvim", + branch = "v3.x", + cmd = "Neotree", + opts = {}, + keys = { + { + "<C-n>", + function() + require("neo-tree.command").execute({ toggle = false }) + end, + desc = "Focus Explorer NeoTree (root dir)", + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/obsidian.lua b/ar/.config/LazyVim/lua/plugins/obsidian.lua new file mode 100644 index 0000000..ed09f64 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/obsidian.lua @@ -0,0 +1,319 @@ +return { + "epwalsh/obsidian.nvim", + version = "*", -- recommended, use latest release instead of latest commit + lazy = true, + ft = "markdown", + dependencies = { + "nvim-lua/plenary.nvim", + "hrsh7th/nvim-cmp", + "nvim-telescope/telescope.nvim", + "epwalsh/pomo.nvim", + }, + config = function() + require("obsidian").setup({ + workspaces = { + { + name = "SI", + path = "~/Obsidian/SI", + }, + }, + notes_subdir = "/Resource/Unsorted notes", + log_level = vim.log.levels.INFO, + daily_notes = { + folder = "Area/Journal/Daily", + date_format = "%Y-%m-%d", + alias_format = "%B %e, %Y", + template = "nvim-todo-daily-template.md", + }, + templates = { + subdir = "Resource/Templates/Notes", + date_format = "%Y-%m-%d", + time_format = "%H:%M", + substitutions = { + date_alias = function() + return os.date("%B %-e, %Y") + end, + folder_name = function() + local currentFilePath = vim.fn.expand("%:p:h") + local _, _, currentFolderName = currentFilePath:find("([^/]+)$") + currentFolderName = currentFolderName:gsub(" ", "-") + return currentFolderName + end, + }, + }, + completion = { + nvim_cmp = true, + min_chars = 2, + }, + note_id_func = function(title) + local suffix = "" + if title ~= nil then + suffix = title:gsub(" ", "-"):gsub("[^A-Za-z0-9-]", ""):lower() + else + for _ = 1, 4 do + -- suffix = suffix .. string.char(math.random(65, 90)) + suffix = tostring(os.date("%Y-%m-%d")) + end + end + -- return tostring(os.date("%Y-%M-%d")) .. "-" .. suffix + -- return tostring(os.date("%Y-%m-%d")) + return suffix + end, + disable_frontmatter = true, + note_frontmatter_func = function(note) + local currentDate = os.date("%B %d, %Y") + -- local _, _, filename, parentPath = note.id:find("([^/]+)[^/]*$") + local _, _, parentPath = note.id:find(".*/(.*)/[^/]*$") + + parentPath = parentPath or "unsorted_notes" + note:add_alias(currentDate) + -- note:add_tag(filename) + note:add_tag(parentPath) + + local out = { id = os.date("%Y-%m-%d"), aliases = note.aliases, tags = note.tags } + if note.metadata ~= nil and not vim.tbl_isempty(note.metadata) then + for k, v in pairs(note.metadata) do + out[k] = v + end + end + + return out + end, + follow_url_func = function(url) + vim.fn.jobstart({ "open", url }) -- Mac OS + -- vim.fn.jobstart({"xdg-open", url}) -- linux + end, + use_advanced_uri = false, + open_app_foreground = true, + finder = "telescope.nvim", + finder_mappings = {}, + sort_by = "modified", + sort_reversed = true, + open_notes_in = "current", + ui = { + tick = 0, + enable = true, -- set to false to disable all additional syntax features + update_debounce = 200, -- update delay after a text change (in milliseconds) + checkboxes = { + [" "] = { char = "", hl_group = "ObsidianTodo" }, + ["x"] = { char = "", hl_group = "ObsidianDone" }, + [">"] = { char = "", hl_group = "ObsidianRightArrow" }, + ["~"] = { char = "", hl_group = "ObsidianTilde" }, + }, + external_link_icon = { char = "", hl_group = "ObsidianExtLinkIcon" }, + reference_text = { hl_group = "ObsidianRefText" }, + highlight_text = { hl_group = "ObsidianHighlightText" }, + tags = { hl_group = "ObsidianTag" }, + hl_groups = { + ObsidianTodo = { bold = true, fg = "#f78c6c" }, + ObsidianDone = { bold = true, fg = "#89ddff" }, + ObsidianRightArrow = { bold = true, fg = "#f78c6c" }, + ObsidianTilde = { bold = true, fg = "#ff5370" }, + ObsidianRefText = { underline = true, fg = "#c792ea" }, + ObsidianExtLinkIcon = { fg = "#c792ea" }, + ObsidianTag = { italic = true, fg = "#89ddff" }, + ObsidianHighlightText = { bg = "#75662e" }, + }, + }, + attachments = { + img_folder = "assets/imgs", -- This is the default + ---@param client obsidian.Client + ---@param path Path the absolute path to the image file + ---@return string + img_text_func = function(client, path) + local link_path + local vault_relative_path = client:vault_relative_path(path) + if vault_relative_path ~= nil then + link_path = vault_relative_path + else + link_path = tostring(path) + end + local display_name = vim.fs.basename(link_path) + return string.format("", display_name, link_path) + end, + }, + yaml_parser = "native", + mappings = {}, + }) + end, + cmd = { + "ObsidianOpen", + "ObsidianNew", + "ObsidianQuickSwitch", + "ObsidianFollowLink", + "ObsidianBacklinks", + "ObsidianToday", + "ObsidianYesterday", + "ObsidianTomorrow", + "ObsidianTemplate", + "ObsidianSearch", + "ObsidianWorkspace", + "ObsidianPasteImg", + "ObsidianRename", + "ObsidianLink", + "ObsidianLinkNew", + }, + keys = { + { + mode = { "i", "n" }, + "gf", + function() + return require("obsidian").util.gf_passthrough() + end, + desc = "goto file", + noremap = false, + expr = true, + buffer = true, + }, + { + mode = "n", + "<leader>cb", + function() + return require("obsidian").util.toggle_checkbox() + end, + buffer = true, + desc = "Check Box", + }, + { + mode = "n", + "<leader>ono", + function() + local query = vim.fn.input("Enter query: ") + if query and #query > 0 then + vim.cmd("ObsidianOpen " .. query) + end + end, + desc = "Open Note", + }, + { + mode = "n", + "<leader>onn", + function() + local title = vim.fn.input("Enter title: ") + if title and #title > 0 then + vim.cmd("ObsidianNew " .. title) + end + end, + desc = "New Note", + }, + { + mode = "n", + "<leader>os", + "<cmd> ObsidianQuickSwitch <CR>", + desc = "Quick Switch", + }, + { + mode = "n", + "<leader>o]", + "<cmd> ObsidianFollowLink <CR>", + desc = "Follow Link", + }, + { + mode = "n", + "<leader>o[", + "<cmd> ObsidianBacklinks <CR>", + desc = "Back Link", + }, + { + mode = "n", + "<leader>ont", + function() + local offset = vim.fn.input("Enter offset: ") + if offset and #offset > 0 then + vim.cmd("ObsidianToday " .. offset) + else + vim.cmd("ObsidianToday") + end + end, + desc = "Today Note", + }, + { + mode = "n", + "<leader>onh", + "<cmd> ObsidianYesterday <cr>", + desc = "Yesterday Note", + }, + { + mode = "n", + "<leader>onl", + "<cmd> ObsidianTomorrow <cr>", + desc = "Tomorrow Note", + }, + { + mode = "n", + "<leader>oti", + "<cmd>ObsidianTemplate<cr>", + desc = "Insert Templates", + }, + { + mode = "n", + "<leader>onf", + function() + local note = vim.fn.input("Enter note: ") + if note and #note > 0 then + vim.cmd("ObsidianSearch " .. note) + end + end, + desc = "Search Note", + }, + { + mode = "n", + "<leader>ow", + function() + local name = vim.fn.input("Enter name: ") + if name and #name > 0 then + vim.cmd("ObsidianWorkspace " .. name) + end + end, + desc = "Workspace Name", + }, + { + mode = "n", + "<leader>opi", + function() + local image = vim.fn.input("Enter image: ") + if image and #image > 0 then + vim.cmd("ObsidianPasteImg " .. image) + end + end, + desc = "Paste Image", + }, + { + mode = "n", + "<leader>onr", + function() + local name = vim.fn.input("Enter name: ") + if name and #name > 0 then + vim.cmd("ObsidianRename " .. name) + end + end, + desc = "Rename Note", + }, + { + mode = "v", + "<leader>ol", + function() + local query = vim.fn.input("Enter query: ") + if query and #query > 0 then + vim.cmd("ObsidianLink " .. query) + else + vim.cmd("ObsidianLink") + end + end, + desc = "Link Query", + }, + { + mode = "v", + "<leader>onl", + function() + local note = vim.fn.input("Enter note: ") + if note and #note > 0 then + vim.cmd("ObsidianLinkNew " .. note) + else + vim.cmd("ObsidianLinkNew") + end + end, + desc = "New Link Note", + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/oil.lua b/ar/.config/LazyVim/lua/plugins/oil.lua new file mode 100644 index 0000000..ffbbfe9 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/oil.lua @@ -0,0 +1,13 @@ +return { + "stevearc/oil.nvim", + opts = {}, + -- Optional dependencies + dependencies = { "nvim-tree/nvim-web-devicons" }, + cmd = { "Oil" }, + config = function() + require("oil").setup() + end, + keys = { + vim.keymap.set("n", "-", "<cmd>Oil<cr>", { desc = "Open parent directory" }), + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/playground.lua b/ar/.config/LazyVim/lua/plugins/playground.lua new file mode 100644 index 0000000..e696828 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/playground.lua @@ -0,0 +1,38 @@ +return { + "nvim-treesitter/playground", + dependencies = { "nvim-treesitter/nvim-treesitter" }, + cmd = { "TSPlaygroundToggle" }, + config = function() + require("nvim-treesitter.configs").setup({ + playground = { + enable = true, + disable = {}, + updatetime = 25, -- Debounced time for highlighting nodes in the playground from source code + persist_queries = false, -- Whether the query persists across vim sessions + keybindings = { + toggle_query_editor = "o", + toggle_hl_groups = "i", + toggle_injected_languages = "t", + toggle_anonymous_nodes = "a", + toggle_language_display = "I", + focus_language = "f", + unfocus_language = "F", + update = "R", + goto_node = "<cr>", + show_help = "?", + }, + }, + + query_linter = { + enable = true, + use_virtual_text = true, + lint_events = { "BufWrite", "CursorHold" }, + }, + }) + end, + keys = { + { mode = "n", "<leader>pg", "<cmd> TSPlaygroundToggle <cr>", desc = "Toggle Playground" }, + { mode = "n", "<leader>pc", "<cmd> TSHighlightCapturesUnderCurso <cr>", desc = "Highlight Captures" }, + { mode = "n", "<leader>pn", "<cmd> TSNodeUnderCursor <cr>", desc = "Node Under Cursor" }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/project.lua b/ar/.config/LazyVim/lua/plugins/project.lua new file mode 100644 index 0000000..313c8f8 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/project.lua @@ -0,0 +1,6 @@ +return { + "ahmedkhalf/project.nvim", + keys = { + { "<leader>pr", "<Cmd>ProjectRoot<CR>", desc = "Project Root" }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/refactoring.lua b/ar/.config/LazyVim/lua/plugins/refactoring.lua new file mode 100644 index 0000000..a7bdf99 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/refactoring.lua @@ -0,0 +1,35 @@ +return { + "ThePrimeagen/refactoring.nvim", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-treesitter/nvim-treesitter", + }, + config = function() + require("refactoring").setup() + end, + keys = { + vim.keymap.set("x", "<leader>re", function() + require("refactoring").refactor("Extract Function") + end, { desc = "Extract Function" }), + vim.keymap.set({ "x", "n" }, "<leader>rf", function() + require("refactoring").refactor("Extract Function To File") + end, { desc = "Extract Function To File" }), + -- Extract function supports only visual mode + vim.keymap.set("x", "<leader>rv", function() + require("refactoring").refactor("Extract Variable") + end, { desc = "Extract Variable" }), + -- Extract variable supports only visual mode + vim.keymap.set("n", "<leader>rI", function() + require("refactoring").refactor("Inline Function") + end, { desc = "Inline Function" }), + -- Inline func supports only normal + vim.keymap.set({ "n", "x" }, "<leader>ri", function() + require("refactoring").refactor("Inline Variable") + end, { desc = "Inline Variable" }), + -- Inline var supports both normal and visual mode + + vim.keymap.set("n", "<leader>rb", function() + require("refactoring").refactor("Extract Block") + end, { desc = "Extract Block" }), + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/seoul256.lua b/ar/.config/LazyVim/lua/plugins/seoul256.lua new file mode 100644 index 0000000..ddbc87b --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/seoul256.lua @@ -0,0 +1,3 @@ +return { + "junegunn/seoul256.vim", +} diff --git a/ar/.config/LazyVim/lua/plugins/tagbar.lua b/ar/.config/LazyVim/lua/plugins/tagbar.lua new file mode 100644 index 0000000..3824cfd --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/tagbar.lua @@ -0,0 +1,12 @@ +return { + "preservim/tagbar", + cmd = "TagbarToggle", + keys = { + { + mode = "n", + "<leader>tb", + "TagbarToggle", + desc = "Toggle Tagbar", + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/telescope.lua b/ar/.config/LazyVim/lua/plugins/telescope.lua new file mode 100644 index 0000000..0a96a09 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/telescope.lua @@ -0,0 +1,24 @@ +return { + "nvim-telescope/telescope.nvim", + keys = { + { "<leader>/", false }, + { "<C-f>", false }, + { "<C-b>", false }, + }, + opts = function() + local actions = require("telescope.actions") + + return { + defaults = { + mappings = { + i = { + ["<C-j>"] = actions.preview_scrolling_down, + ["<C-k>"] = actions.preview_scrolling_up, + ["<C-h>"] = actions.preview_scrolling_left, + ["<C-l>"] = actions.preview_scrolling_right, + }, + }, + }, + } + end, +} diff --git a/ar/.config/LazyVim/lua/plugins/tmux-navigator.lua b/ar/.config/LazyVim/lua/plugins/tmux-navigator.lua new file mode 100644 index 0000000..7b37cf7 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/tmux-navigator.lua @@ -0,0 +1,19 @@ +return { + { + "christoomey/vim-tmux-navigator", + cmd = { + "TmuxNavigateLeft", + "TmuxNavigateDown", + "TmuxNavigateUp", + "TmuxNavigateRight", + "TmuxNavigatePrevious", + }, + keys = { + { "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>", desc = "Tmux Navigate Left" }, + { "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>", desc = "Tmux Navigate Down" }, + { "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>", desc = "Tmux Navigate Up" }, + { "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>", desc = "Tmux Navigate Right" }, + { "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>", desc = "Tmux Navigate Previous" }, + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/tokyonight.lua b/ar/.config/LazyVim/lua/plugins/tokyonight.lua new file mode 100644 index 0000000..6dcb72f --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/tokyonight.lua @@ -0,0 +1,10 @@ +return { + "folke/tokyonight.nvim", + opts = { + transparent = true, + styles = { + sidebars = "transparent", + floats = "transparent", + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/treesj.lua b/ar/.config/LazyVim/lua/plugins/treesj.lua new file mode 100644 index 0000000..9cfb3ff --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/treesj.lua @@ -0,0 +1,32 @@ +return { + "Wansmer/treesj", + dependencies = { "nvim-treesitter/nvim-treesitter" }, + config = function() + require("treesj").setup({ + ---@type boolean Use default keymaps (<space>m - toggle, <space>j - join, <space>s - split) + use_default_keymaps = false, + ---@type boolean Node with syntax error will not be formatted + check_syntax_error = true, + ---If line after join will be longer than max value, + ---@type number If line after join will be longer than max value, node will not be formatted + max_join_length = 300, + ---Cursor behavior: + ---hold - cursor follows the node/place on which it was called + ---start - cursor jumps to the first symbol of the node being formatted + ---end - cursor jumps to the last symbol of the node being formatted + ---@type 'hold'|'start'|'end' + cursor_behavior = "hold", + ---@type boolean Notify about possible problems or not + notify = true, + ---@type boolean Use `dot` for repeat action + dot_repeat = true, + ---@type nil|function Callback for treesj error handler. func (err_text, level, ...other_text) + on_error = nil, + ---@type table Presets for languages + -- langs = {}, -- See the default presets in lua/treesj/langs + }) + end, + keys = { + { "<leader>j", "<cmd>TSJToggle<cr>", desc = "Toggle Treesj" }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/vimwiki.lua b/ar/.config/LazyVim/lua/plugins/vimwiki.lua new file mode 100644 index 0000000..697ef70 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/vimwiki.lua @@ -0,0 +1,37 @@ +return { + "vimwiki/vimwiki", + cmd = { "VimwikiIndex", "Vimwiki2HTML", "VimwikiAll2HTML" }, + keys = { + vim.api.nvim_set_keymap("n", "<leader>|", ":VimwikiSplitLink<CR>", { silent = true, desc = "Horizontal Split" }), + vim.api.nvim_set_keymap("n", "<leader>-", ":VimwikiVSplitLink<CR>", { silent = true, desc = "Vertical Split" }), + vim.api.nvim_set_keymap("n", "<leader>va", ":VimwikiAll2HTML<CR>", { silent = true, desc = "All Vimwiki to HTML" }), + vim.api.nvim_set_keymap( + "n", + "<leader>vc", + ":VimwikiColorize<CR>", + { silent = true, desc = "Colorize line or selection" } + ), + vim.api.nvim_set_keymap("n", "<leader>vd", ":VimwikiDeleteFile<CR>", { silent = true, desc = "Delete Wiki Page" }), + vim.api.nvim_set_keymap("n", "<leader>vh", ":Vimwiki2HTML<CR>", { silent = true, desc = "Vimwiki to HTML" }), + vim.api.nvim_set_keymap( + "n", + "<leader>vH", + ":Vimwiki2HTMLBrowse<CR>", + { silent = true, desc = "Convert current wiki to HTML" } + ), + vim.api.nvim_set_keymap("n", "<leader>vw", ":VimwikiIndex<CR>", { silent = true, desc = "Vimwiki Index" }), + vim.api.nvim_set_keymap( + "n", + "<leader>vn", + ":VimwikiGoto<CR>", + { silent = true, desc = "Goto or Create New Wiki Page" } + ), + vim.api.nvim_set_keymap("n", "<leader>vr", ":VimwikiRenameFile<CR>", { silent = true, desc = "Rename Wiki Page" }), + vim.api.nvim_set_keymap( + "n", + "<leader>vu", + ":VimwikiDiaryGenerateLinks<CR>", + { silent = true, desc = "Update Diary" } + ), + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/which-key.lua b/ar/.config/LazyVim/lua/plugins/which-key.lua new file mode 100644 index 0000000..94a6b3f --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/which-key.lua @@ -0,0 +1,55 @@ +return { + "folke/which-key.nvim", + opts = { + plugins = { spelling = true }, + defaults = { + mode = { "n", "v" }, + ["g"] = { name = "+goto" }, + ["gz"] = { name = "+surround" }, + ["z"] = { name = "+fold" }, + ["]"] = { name = "+next" }, + ["["] = { name = "+prev" }, + ["="] = { name = "+line paste" }, + ["\\"] = { name = "+local leader" }, + ["<leader>"] = { name = "+leader" }, + ["<leader><"] = { name = "+B/A paste & L/R indent" }, + ["<leader>="] = { name = "+paste & B/A filtter" }, + ["<leader>>"] = { name = "+B/A paste & L/R indent" }, + ["<leader>["] = { name = "+indent B/A cursor" }, + ["<leader>]"] = { name = "+indent B/A cursor" }, + ["<leader><tab>"] = { name = "+tabs" }, + ["<leader>b"] = { name = "+buffer" }, + ["<leader>c"] = { name = "+code" }, + ["<leader>cp"] = { name = "+copy" }, + ["<leader>dd"] = { name = "+db" }, + ["<leader>dP"] = { name = "+class/method" }, + ["<leader>f"] = { name = "+file/find" }, + ["<leader>h"] = { name = "+harpoon" }, + ["<leader>g"] = { name = "+git" }, + ["<leader>gh"] = { name = "+hunks" }, + ["<leader>gz"] = { name = "+surround" }, + ["<leader>m"] = { name = "+mason" }, + ["<leader>n"] = { name = "+annotation" }, + ["<leader>o"] = { name = "+obsidian" }, + ["<leader>on"] = { name = "+note" }, + ["<leader>op"] = { name = "+paste" }, + ["<leader>ot"] = { name = "+template" }, + ["<leader>p"] = { name = "+playground" }, + ["<leader>q"] = { name = "+quit/session" }, + ["<leader>r"] = { name = "+refactoring" }, + ["<leader>s"] = { name = "+search" }, + ["<leader>u"] = { name = "+ui" }, + ["<leader>w"] = { name = "+windows/which-key" }, + ["<leader>x"] = { name = "+trouble/quickfix" }, + }, + }, + keys = { + vim.keymap.set("n", "<leader>wK", function() + vim.cmd("WhichKey") + end, { desc = "Which-key All Key" }), + vim.keymap.set("n", "<leader>wk", function() + local input = vim.fn.input("WhichKey: ") + vim.cmd("WhichKey " .. input) + end, { desc = "Which-key Query Lookup" }), + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/yanky.lua b/ar/.config/LazyVim/lua/plugins/yanky.lua new file mode 100644 index 0000000..fb8ac2d --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/yanky.lua @@ -0,0 +1,31 @@ +return { + { + "gbprod/yanky.nvim", + dependencies = not jit.os:find("Windows") and { "kkharji/sqlite.lua" } or {}, + opts = { + highlight = { timer = 250 }, + ring = { storage = jit.os:find("Windows") and "shada" or "sqlite" }, + }, + keys = { + -- stylua: ignore + { "<leader>h", function() require("telescope").extensions.yank_history.yank_history({ }) end, desc = "Open Yank History" }, + { "<leader>y", "<Plug>(YankyYank)", mode = { "n", "x" }, desc = "Yank text" }, + { "<leader>p", "<Plug>(YankyPutAfter)", mode = { "n", "x" }, desc = "Put yanked text after cursor" }, + { "<leader>P", "<Plug>(YankyPutBefore)", mode = { "n", "x" }, desc = "Put yanked text before cursor" }, + { "<leader>gp", "<Plug>(YankyGPutAfter)", mode = { "n", "x" }, desc = "Put yanked text after selection" }, + { "<leader>gP", "<Plug>(YankyGPutBefore)", mode = { "n", "x" }, desc = "Put yanked text before selection" }, + { "<leader>[y", "<Plug>(YankyCycleForward)", desc = "Cycle forward through yank history" }, + { "<leader>]y", "<Plug>(YankyCycleBackward)", desc = "Cycle backward through yank history" }, + { "<leader>]p", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put indented after cursor (linewise)" }, + { "<leader>[p", "<Plug>(YankyPutIndentBeforeLinewise)", desc = "Put indented before cursor (linewise)" }, + { "<leader>]P", "<Plug>(YankyPutIndentAfterLinewise)", desc = "Put indented after cursor (linewise)" }, + { "<leader>[P", "<Plug>(YankyPutIndentBeforeLinewise)", desc = "Put indented before cursor (linewise)" }, + { "<leader>>p", "<Plug>(YankyPutIndentAfterShiftRight)", desc = "Put and indent right" }, + { "<leader><p", "<Plug>(YankyPutIndentAfterShiftLeft)", desc = "Put and indent left" }, + { "<leader>>P", "<Plug>(YankyPutIndentBeforeShiftRight)", desc = "Put before and indent right" }, + { "<leader><P", "<Plug>(YankyPutIndentBeforeShiftLeft)", desc = "Put before and indent left" }, + { "<leader>=p", "<Plug>(YankyPutAfterFilter)", desc = "Put after applying a filter" }, + { "<leader>=P", "<Plug>(YankyPutBeforeFilter)", desc = "Put before applying a filter" }, + }, + }, +} diff --git a/ar/.config/LazyVim/lua/plugins/zen-mode.lua b/ar/.config/LazyVim/lua/plugins/zen-mode.lua new file mode 100644 index 0000000..823aa94 --- /dev/null +++ b/ar/.config/LazyVim/lua/plugins/zen-mode.lua @@ -0,0 +1,11 @@ +return { + "folke/zen-mode.nvim", + opts = { + -- your configuration comes here + -- or leave it empty to use the default settings + -- refer to the configuration section below + }, + keys = { + { "<leader><cr>", "<cmd>ZenMode<cr>", desc = "Zen mode" }, + }, +} |
