diff --git a/.ideavimrc b/.config/ideavim/ideavimrc similarity index 95% rename from .ideavimrc rename to .config/ideavim/ideavimrc index ee6a258..48cf34f 100644 --- a/.ideavimrc +++ b/.config/ideavim/ideavimrc @@ -1,3 +1,6 @@ +" ~/.config/ideavim/ideavimrc +" New-Item -ItemType SymbolicLink -Path ~\.config\ideavim/ideavimrc -Target ~\.dotfiles\.config/ideavim/ideavimrc +" ln -sf ~/.dotfiles/.config/ideavim/ideavimrc """ Basic Configs """ let mapleader = " " " set to diff --git a/.config/nvim/.DS_Store b/.config/nvim/.DS_Store new file mode 100644 index 0000000..423eb9c Binary files /dev/null and b/.config/nvim/.DS_Store differ diff --git a/.config/nvim/.neoconf.json b/.config/nvim/.neoconf.json new file mode 100644 index 0000000..7c48087 --- /dev/null +++ b/.config/nvim/.neoconf.json @@ -0,0 +1,15 @@ +{ + "neodev": { + "library": { + "enabled": true, + "plugins": true + } + }, + "neoconf": { + "plugins": { + "lua_ls": { + "enabled": true + } + } + } +} diff --git a/.config/nvim/.options/obsidian.all.lua b/.config/nvim/.options/obsidian.all.lua new file mode 100644 index 0000000..f0cbf04 --- /dev/null +++ b/.config/nvim/.options/obsidian.all.lua @@ -0,0 +1,22 @@ +return { + "epwalsh/obsidian.nvim", + version = "*", -- recommended, use latest release instead of latest commit + lazy = true, + ft = "markdown", + dependencies = { + -- Required. + "nvim-lua/plenary.nvim", + + -- see below for full list of optional dependencies 👇 + }, + opts = { + workspaces = { + { + name = "All", + path = "~/Obsidian", + }, + }, + + -- see below for full list of options 👇 + }, +} \ No newline at end of file diff --git a/.config/nvim/README.md b/.config/nvim/README.md new file mode 100644 index 0000000..6ed6a69 --- /dev/null +++ b/.config/nvim/README.md @@ -0,0 +1,8 @@ +# Colemak *LazyVim* + +- Replace the default `hjkl` movement keys with `hnei` +- `j->e`, `k->n`, `h->h`, `l->i` + +```sh +ln -s ~/.dotfiles/.config/nvim/ ~/.config/nvim +``` \ No newline at end of file diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..2514f9e --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,2 @@ +-- bootstrap lazy.nvim, LazyVim and your plugins +require("config.lazy") diff --git a/.config/nvim/lua/.DS_Store b/.config/nvim/lua/.DS_Store new file mode 100644 index 0000000..2bcd0e8 Binary files /dev/null and b/.config/nvim/lua/.DS_Store differ diff --git a/.config/nvim/lua/config/autocmds.lua b/.config/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..27e9e06 --- /dev/null +++ b/.config/nvim/lua/config/autocmds.lua @@ -0,0 +1,3 @@ +-- Autocmds are automatically loaded on the VeryLazy event +-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua +-- Add any additional autocmds here diff --git a/.config/nvim/lua/config/keymaps.lua b/.config/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..450022b --- /dev/null +++ b/.config/nvim/lua/config/keymaps.lua @@ -0,0 +1,146 @@ +-- 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 + +vim.g.mapleader = " " + +-- ================= GENERAL KEYBINDS ================= +-- SAVE/QUIT {{{ +vim.keymap.set("n", "Q", "q", { desc = "Q to quit" }) +vim.keymap.set("n", "", "w", { desc = "S to write file" }) +--}}} + +-- NVIM CONFIG SHORTCUTS {{{ +-- stylua: ignore +vim.keymap.set("n", "rc", "e $HOME/.config/nvim/lua/config/options.lua", { desc = "Open nvim options.lua" }) +vim.keymap.set("n", "rp", "e $HOME/.config/nvim/lua/plugins/.", { desc = "lazy plugins dir" }) +--}}} + +-- UNDO +vim.keymap.set({ "n", "v" }, "l", "u", { desc = "Undo" }) + +-- INSERT +vim.keymap.set({ "n", "v" }, "l", "i", { desc = "Insert" }) +vim.keymap.set({ "n", "v" }, "L", "I", { desc = "Insert at line start" }) + +-- YANK TO SYSTEM CLIPBOARD +vim.keymap.set("v", "Y", '"+y', { desc = "Copy to (System) Clipboard" }) + +-- SEARCH {{{ +vim.keymap.set("n", "", "nohlsearch", { desc = "clear search highlight" }) +--}}} + +-- SPACE TO TAB{{{ +vim.keymap.set("n", "tt", "%s/ /\t/g", { desc = "space to tab" }) +vim.keymap.set("v", "tt", "s/ /\t/g", { desc = "space to tab" }) +--}}} + +-- MISC {{{ +vim.keymap.set("n", "o", "za", { desc = "folding" }) +vim.keymap.set("i", "", "A {}iko", { desc = "insert a pair of {} and goto next line" }) +--}}} + +-- ================= CURSOR MOVEMENT ===================== {{{ +-- NEW CURSOR MOVEMENT (ARROW KEY RESIZE WINDOWS) +-- ^ +-- e +-- < h i > +-- n +-- v +-- +vim.keymap.set({ "n", "v", "", "s", "x" }, "e", "k", { desc = "move cursor ⇧" }) +vim.keymap.set({ "n", "v", "", "s", "x" }, "n", "j", { desc = "move cursor ⇩" }) +vim.keymap.set({ "n", "v", "", "s", "x" }, "h", "h", { desc = "move cursor ⇩" }) +vim.keymap.set({ "n", "v", "", "s", "x" }, "i", "l", { desc = "move cursor ⇹" }) + +vim.keymap.set({ "n", "v" }, "E", "5k", { desc = "Move 5up K -> U" }) +vim.keymap.set({ "n", "v" }, "N", "5j", { desc = "Move 5down J -> E" }) + +vim.keymap.set({ "n", "v" }, "H", "0", { desc = "Move start of line" }) +vim.keymap.set({ "n", "v" }, "I", "$", { desc = "Move end of line" }) + +vim.keymap.set("n", "gu", "gk", { desc = "move up gk -> gu" }) +vim.keymap.set("n", "ge", "gj", { desc = "move down gj -> ge" }) + +vim.keymap.set("n", "\v", "v$h", { desc = "???" }) + +-- FASTER IN-LINE NAVIGATION + +-- SET h (SAME AS n, CURSOR LEFT) TO 'END OF WORD' +vim.keymap.set("n", "j", "e", { desc = "Move cursor to end of word" }) +-- CTRL + U OR E WILL MOVE UP/DOWN THE VIEW PORT WITHOUT MOVING THE CURSOR + +vim.keymap.set({ "n", "v" }, "", "5", { desc = "Move viewport ⇧" }) +vim.keymap.set({ "n", "v" }, "", "5", { desc = "Move viewport ⇩" }) + +-- INSERT MODE CURSOR MOVEMENT +vim.keymap.set("i", "", "A") + +-- COMMAND MODE CURSOR MOVEMENT +vim.keymap.set("c", "", "") +vim.keymap.set("c", "", "") +vim.keymap.set("c", "", "") +vim.keymap.set("c", "", "") +vim.keymap.set("c", "", "") +vim.keymap.set("c", "", "") +vim.keymap.set("c", "", "") +vim.keymap.set("c", "", "") +--}}} + +-- ================= SPLIT MANAGMENT ===================== {{{ +vim.keymap.set("n", "E", "set nosplitbelowsplitset splitbelow", { desc = "Split ⇧" }) +vim.keymap.set("n", "N", "set splitbelowsplit", { desc = "Split ⇩" }) +vim.keymap.set("n", "H", "set nosplitrightvsplitset splitright", { desc = "Split ⇩" }) +vim.keymap.set("n", "I", "set splitrightvsplit", { desc = "Split ⇹" }) + +vim.keymap.set({ "n", "t" }, "e", "k", { desc = "Move cursor to split ⇧" }) +vim.keymap.set({ "n", "t" }, "n", "j", { desc = "Move cursor to split ⇩" }) +vim.keymap.set({ "n", "t" }, "h", "h", { desc = "Move cursor to split ⇩" }) +vim.keymap.set({ "n", "t" }, "i", "l", { desc = "Move cursor to split ⇹" }) + +vim.keymap.set({ "n", "t" }, "", "", { desc = "Move cursor to split ⇧" }) +vim.keymap.set({ "n", "t" }, "", "", { desc = "Move cursor to split ⇩" }) +vim.keymap.set({ "n", "t" }, "", "", { desc = "Move cursor to split ⇩" }) +vim.keymap.set({ "n", "t" }, "", "", { desc = "Move cursor to split ⇹" }) + +vim.keymap.set("n", "", "res -5", { desc = "Resize split 0,-5" }) +vim.keymap.set("n", "", "res +5", { desc = "Resize split 0,+5" }) +vim.keymap.set("n", "", "vertical resize +5", { desc = "Resize split +5,0" }) +vim.keymap.set("n", "", "vertical resize -5", { desc = "Resize split -5,0" }) + +vim.keymap.set("n", "H", "tK", { desc = "Make splits [H]orizontal" }) +vim.keymap.set("n", "V", "tH", { desc = "Make splits [V]ertical" }) + +vim.keymap.set("n", "ri", "bK", { desc = "Rotate splits 90" }) +vim.keymap.set("n", "rh", "bH", { desc = "Rotate splits -90" }) + +vim.keymap.set("n", "q", "jq", { desc = "Close Split ⇩ (Below)" }) +--}}} + +-- TAB MANAGEMENT {{{ +vim.keymap.set("n", "", "tabe", { desc = "New [Tab]" }) + +vim.keymap.set("n", "h", "-tabnext", { desc = "Select Tab ⇩" }) +vim.keymap.set("n", "i", "+tabnext", { desc = "Select Tab ⇹" }) + +vim.keymap.set("n", "H", "-tabmove", { desc = "Tab move ⇩" }) +vim.keymap.set("n", "I", "+tabmove", { desc = "Tab move ⇹" }) + +-- NOTE: Doesn't seem to work: +-- vim.keymap.set("n", "c", "tab split", { desc = "New Tab from [C]urrent" }) +-- vim.keymap.set('n', 'dw', '/\(\<\w\+\>\)\_s*\1', {desc='adjacent duplicate words'}) + +--vim.keymap.del("n", "j") +--vim.keymap.del("n", "k") +--vim.keymap.del("n", "l") +-- }}} + +-- =================== TERM BEHAVIORS ==================== +vim.keymap.set("t", "", "", { desc = "escape terminal, allowing excmds" }) +vim.keymap.set("t", "", "", { desc = "close terminal" }) + +--vim: set fdm=marker fdl=0 + +-- buffers +vim.keymap.set("n", "", "bprevious", { desc = "Prev Buffer" }) +vim.keymap.set("n", "", "bnext", { desc = "Next Buffer" }) diff --git a/.config/nvim/lua/config/lazy.lua b/.config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..d73bfa1 --- /dev/null +++ b/.config/nvim/lua/config/lazy.lua @@ -0,0 +1,53 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not (vim.uv or vim.loop).fs_stat(lazypath) then + local lazyrepo = "https://github.com/folke/lazy.nvim.git" + local out = vim.fn.system({ "git", "clone", "--filter=blob:none", "--branch=stable", lazyrepo, lazypath }) + if vim.v.shell_error ~= 0 then + vim.api.nvim_echo({ + { "Failed to clone lazy.nvim:\n", "ErrorMsg" }, + { out, "WarningMsg" }, + { "\nPress any key to exit..." }, + }, true, {}) + vim.fn.getchar() + os.exit(1) + end +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + -- import/override with your plugins + { import = "plugins" }, + }, + defaults = { + -- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup. + -- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default. + lazy = false, + -- It's recommended to leave version=false for now, since a lot the plugin that support versioning, + -- have outdated releases, which may break your Neovim install. + version = false, -- always use the latest git commit + -- version = "*", -- try installing the latest stable version for plugins that support semver + }, + install = { colorscheme = { "tokyonight", "habamax" } }, + checker = { + enabled = true, -- check for plugin updates periodically + notify = false, -- notify on update + }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, +}) diff --git a/.config/nvim/lua/config/options.lua b/.config/nvim/lua/config/options.lua new file mode 100644 index 0000000..3ea1454 --- /dev/null +++ b/.config/nvim/lua/config/options.lua @@ -0,0 +1,3 @@ +-- Options are automatically loaded before lazy.nvim startup +-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua +-- Add any additional options here diff --git a/.config/nvim/lua/plugins/catppuccin.lua b/.config/nvim/lua/plugins/catppuccin.lua new file mode 100644 index 0000000..c6e52c7 --- /dev/null +++ b/.config/nvim/lua/plugins/catppuccin.lua @@ -0,0 +1,54 @@ +return { + "catppuccin/nvim", + lazy = true, + name = "catppuccin", + opts = { + integrations = { + aerial = true, + alpha = true, + cmp = true, + dashboard = true, + flash = true, + grug_far = 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, + }, + }, + specs = { + { + "akinsho/bufferline.nvim", + optional = true, + opts = function(_, opts) + if (vim.g.colors_name or ""):find("catppuccin") then + opts.highlights = require("catppuccin.groups.integrations.bufferline").get() + end + end, + }, + }, +} diff --git a/.config/nvim/lua/plugins/colorscheme.lua b/.config/nvim/lua/plugins/colorscheme.lua new file mode 100644 index 0000000..ab99258 --- /dev/null +++ b/.config/nvim/lua/plugins/colorscheme.lua @@ -0,0 +1,13 @@ +return { + -- add gruvbox + { "ellisonleao/gruvbox.nvim" }, + { "catppuccin/nvim", name = "catppuccin", priority = 1000 }, + + -- Configure LazyVim to load gruvbox + { + "LazyVim/LazyVim", + opts = { + colorscheme = "catppuccin", + }, + }, +} diff --git a/.config/nvim/lua/plugins/dashboard.lua b/.config/nvim/lua/plugins/dashboard.lua new file mode 100644 index 0000000..ab6e2f4 --- /dev/null +++ b/.config/nvim/lua/plugins/dashboard.lua @@ -0,0 +1,68 @@ +return { + { + "nvimdev/dashboard-nvim", + lazy = false, -- As https://github.com/nvimdev/dashboard-nvim/pull/450, dashboard-nvim shouldn't be lazy-loaded to properly handle stdin. + opts = function() + local logo = [[ + ██╗███████╗ ██████╗ ███╗ ██╗██╗ ██╗ + ██║██╔════╝██╔═████╗████╗ ██║╚██╗ ██╔╝ + ██║███████╗██║██╔██║██╔██╗ ██║ ╚████╔╝ +██ ██║╚════██║████╔╝██║██║╚██╗██║ ╚██╔╝ +╚█████╔╝███████║╚██████╔╝██║ ╚████║ ██║ + ╚════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═╝ + ]] + + logo = string.rep("\n", 8) .. logo .. "\n\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 = 'lua LazyVim.pick()()', desc = " Find File", icon = " ", key = "f" }, + { action = 'lua LazyVim.pick("oldfiles")()', desc = " Recent Files", icon = " ", key = "r" }, + { action = 'lua LazyVim.pick("live_grep")()', desc = " Find Text", icon = "ï€ą ", key = "g" }, + { action = 'lua LazyVim.pick.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 = "x" }, + { action = "Lazy", desc = " Lazy", icon = "ó°’Č ", key = "l" }, + { action = function() vim.api.nvim_input("qa") end, 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 + + -- open dashboard after closing lazy + if vim.o.filetype == "lazy" then + vim.api.nvim_create_autocmd("WinClosed", { + pattern = tostring(vim.api.nvim_get_current_win()), + once = true, + callback = function() + vim.schedule(function() + vim.api.nvim_exec_autocmds("UIEnter", { group = "dashboard" }) + end) + end, + }) + end + + return opts + end, + }, +} diff --git a/.config/nvim/lua/plugins/example.lua b/.config/nvim/lua/plugins/example.lua new file mode 100644 index 0000000..17f53d6 --- /dev/null +++ b/.config/nvim/lua/plugins/example.lua @@ -0,0 +1,197 @@ +-- 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 }, + + -- 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 + { + "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 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").lsp.on_attach(function(_, buffer) + -- stylua: ignore + vim.keymap.set( "n", "co", "TypescriptOrganizeImports", { buffer = buffer, desc = "Organize Imports" }) + vim.keymap.set("n", "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 + 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, { + function() + return "😄" + end, + }) + 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", + }, + }, + }, +} diff --git a/.config/nvim/lua/plugins/neo-tree.lua b/.config/nvim/lua/plugins/neo-tree.lua new file mode 100644 index 0000000..615367b --- /dev/null +++ b/.config/nvim/lua/plugins/neo-tree.lua @@ -0,0 +1,127 @@ +return { + "nvim-neo-tree/neo-tree.nvim", + cmd = "Neotree", + keys = { + { + "fe", + function() + require("neo-tree.command").execute({ toggle = true, dir = LazyVim.root() }) + end, + desc = "Explorer NeoTree (Root Dir)", + }, + { + "fE", + function() + require("neo-tree.command").execute({ toggle = true, dir = vim.uv.cwd() }) + end, + desc = "Explorer NeoTree (cwd)", + }, + { "e", "fe", desc = "Explorer NeoTree (Root Dir)", remap = true }, + { "E", "fE", desc = "Explorer NeoTree (cwd)", remap = true }, + { + "ge", + function() + require("neo-tree.command").execute({ source = "git_status", toggle = true }) + end, + desc = "Git Explorer", + }, + { + "be", + function() + require("neo-tree.command").execute({ source = "buffers", toggle = true }) + end, + desc = "Buffer Explorer", + }, + }, + deactivate = function() + vim.cmd([[Neotree close]]) + end, + init = function() + -- FIX: use `autocmd` for lazy-loading neo-tree instead of directly requiring it, + -- because `cwd` is not set up properly. + vim.api.nvim_create_autocmd("BufEnter", { + group = vim.api.nvim_create_augroup("Neotree_start_directory", { clear = true }), + desc = "Start Neo-tree with directory", + once = true, + callback = function() + if package.loaded["neo-tree"] then + return + else + local stats = vim.uv.fs_stat(vim.fn.argv(0)) + if stats and stats.type == "directory" then + require("neo-tree") + end + end + end, + }) + end, + opts = { + sources = { "filesystem", "buffers", "git_status" }, + open_files_do_not_replace_types = { "terminal", "Trouble", "trouble", "qf", "Outline" }, + filesystem = { + bind_to_cwd = false, + follow_current_file = { enabled = true }, + use_libuv_file_watcher = true, + }, + window = { + mappings = { + -- MARKED + ["i"] = "open", + -- MARKED + ["e"] = "noop", + ["h"] = "close_node", + [""] = "none", + ["Y"] = { + function(state) + local node = state.tree:get_node() + local path = node:get_id() + vim.fn.setreg("+", path, "c") + end, + desc = "Copy Path to Clipboard", + }, + ["O"] = { + function(state) + require("lazy.util").open(state.tree:get_node().path, { system = true }) + end, + desc = "Open with System Application", + }, + ["P"] = { "toggle_preview", config = { use_float = false } }, + }, + }, + default_component_configs = { + indent = { + with_expanders = true, -- if nil and file nesting is enabled, will enable expanders + expander_collapsed = "", + expander_expanded = "", + expander_highlight = "NeoTreeExpander", + }, + git_status = { + symbols = { + unstaged = "󰄱", + staged = "󰱒", + }, + }, + }, + }, + config = function(_, opts) + local function on_move(data) + LazyVim.lsp.on_rename(data.source, data.destination) + end + + local events = require("neo-tree.events") + opts.event_handlers = opts.event_handlers or {} + vim.list_extend(opts.event_handlers, { + { event = events.FILE_MOVED, handler = on_move }, + { event = events.FILE_RENAMED, handler = on_move }, + }) + require("neo-tree").setup(opts) + vim.api.nvim_create_autocmd("TermClose", { + pattern = "*lazygit", + callback = function() + if package.loaded["neo-tree.sources.git_status"] then + require("neo-tree.sources.git_status").refresh() + end + end, + }) + end, +} diff --git a/.config/nvim/lua/plugins/wakatime.lua b/.config/nvim/lua/plugins/wakatime.lua new file mode 100644 index 0000000..e37e7b5 --- /dev/null +++ b/.config/nvim/lua/plugins/wakatime.lua @@ -0,0 +1,3 @@ +return { + { 'wakatime/vim-wakatime', lazy = false }, +} \ No newline at end of file diff --git a/.config/nvim/stylua.toml b/.config/nvim/stylua.toml new file mode 100644 index 0000000..5d6c50d --- /dev/null +++ b/.config/nvim/stylua.toml @@ -0,0 +1,3 @@ +indent_type = "Spaces" +indent_width = 2 +column_width = 120 \ No newline at end of file diff --git a/.gitignore b/.gitignore index fbf3574..7a08a9b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,16 @@ *private* .private.env.* -nvim/tt.* -nvim/.tests -nvim/doc/tags -nvim/debug -nvim/.repro -nvim/foo.* -nvim/*.log -nvim/data -nvim/lazy-lock.json -nvim/lazyvim.json +.config/nvim/tt.* +.config/nvim/.tests +.config/nvim/doc/tags +.config/nvim/debug +.config/nvim/.repro +.config/nvim/foo.* +.config/nvim/*.log +.config/nvim/data +.config/nvim/lazy-lock.json +.config/nvim/lazyvim.json +.config/nvim/lua/plugins/obsidian.lua test/ test.* *.gz diff --git a/.haskline b/.haskline index 6750f58..66ff3be 100644 --- a/.haskline +++ b/.haskline @@ -1,3 +1 @@ -editMode: Vi -bind: ctrl-p up -bind: ctrl-n down \ No newline at end of file +editMode: Vi \ No newline at end of file diff --git a/mac/neovide.toml b/mac/neovide.toml new file mode 100644 index 0000000..e8e00ed --- /dev/null +++ b/mac/neovide.toml @@ -0,0 +1,19 @@ +# ~/.config/neovide/config.toml +# ln -sf ~/.dotfiles/mac/neovide.toml ~/.config/neovide/config.toml +fork = false +frame = "full" +idle = true +maximized = false +neovim-bin = "/opt/homebrew/bin/nvim" +no-multigrid = false +srgb = false +tabs = true +theme = "auto" +title-hidden = true +vsync = true +wsl = false + +[font] +normal = ["CaskaydiaCove Nerd Font"] # Will use the bundled Fira Code Nerd Font by default +size = 14.0 + diff --git a/vscode/vscode.vimrc b/vscode/vscode.vimrc index c0e0b3a..a520fbf 100644 --- a/vscode/vscode.vimrc +++ b/vscode/vscode.vimrc @@ -1,6 +1,6 @@ " ~/.config/vscode/vscode.vimrc " New-Item -ItemType SymbolicLink -Path ~\.config\vscode\vscode.vimrc -Target ~\.dotfiles\vscode\vscode.vimrc -" mkdir -p ~/.config/vscode && ln -s ~/.dotfiles/vscode/vscode.vimrc ~/.config/vscode/vscode.vimrc +" mkdir -p ~/.config/vscode && ln -sf ~/.dotfiles/vscode/vscode.vimrc ~/.config/vscode/vscode.vimrc " And go to vscode vim setting: "vim.vimrc.path": "$HOME/.config/vscode/vscode.vimrc",