diff --git a/.config/alacritty/alacritty.toml b/.config/alacritty/alacritty.toml index 90fa728..0ce41b9 100644 --- a/.config/alacritty/alacritty.toml +++ b/.config/alacritty/alacritty.toml @@ -1,6 +1,8 @@ [font] size = 9.0 -normal = { family = "ComicMono", style = "Regular" } +# The NerdFont of ComitMono is created with: https://github.com/ryanoasis/nerd-fonts?tab=readme-ov-file#font-patcher +# normal = { family = "ComicMono Nerd Font", style = "Regular" } +normal = { family = "ComicMono Nerd Font", style = "Regular" } [env] WINIT_X11_SCALE_FACTOR = "1.55" diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua new file mode 100644 index 0000000..cc88e0f --- /dev/null +++ b/.config/nvim/init.lua @@ -0,0 +1,2 @@ +require("config.defaults") +require("config.lazy") diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim_ similarity index 100% rename from .config/nvim/init.vim rename to .config/nvim/init.vim_ diff --git a/.config/nvim/lazy-lock.json b/.config/nvim/lazy-lock.json new file mode 100644 index 0000000..8c3641a --- /dev/null +++ b/.config/nvim/lazy-lock.json @@ -0,0 +1,35 @@ +{ + "LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" }, + "cmp-buffer": { "branch": "main", "commit": "b74fab3656eea9de20a9b8116afa3cfc4ec09657" }, + "cmp-cmdline": { "branch": "main", "commit": "d126061b624e0af6c3a556428712dd4d4194ec6d" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" }, + "cmp-nvim-lsp-signature-help": { "branch": "main", "commit": "031e6ba70b0ad5eee49fd2120ff7a2e325b17fa7" }, + "cmp-path": { "branch": "main", "commit": "c642487086dbd9a93160e1679a1327be111cbc25" }, + "cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" }, + "emmet-vim": { "branch": "master", "commit": "e98397144982d1e75b20d94d55a82de3ec8f648d" }, + "fugitive-gitea": { "branch": "master", "commit": "d93176028d13820f941c165c14039a6019744a5a" }, + "fugitive-gitlab.vim": { "branch": "master", "commit": "3584cf7e607ba7822f991d407a8d780e05aae287" }, + "gitsigns.nvim": { "branch": "main", "commit": "c7d37ca22b461f64e26f8f6701b2586128ed0bef" }, + "goyo.vim": { "branch": "master", "commit": "fa0263d456dd43f5926484d1c4c7022dfcb21ba9" }, + "gruvbox.nvim": { "branch": "main", "commit": "58a2cda2e953a99e2f87c12b7fb4602da4e0709c" }, + "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, + "limelight.vim": { "branch": "master", "commit": "0c8cc7f503a775c505dc9c67f1f5041ab4d5f1fd" }, + "lualine.nvim": { "branch": "master", "commit": "a94fc68960665e54408fe37dcf573193c4ce82c9" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "7f0bf635082bb9b7d2b37766054526a6ccafdb85" }, + "mason.nvim": { "branch": "main", "commit": "7dc4facca9702f95353d5a1f87daf23d78e31c2a" }, + "nvim-autopairs": { "branch": "master", "commit": "23320e75953ac82e559c610bec5a90d9c6dfa743" }, + "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, + "nvim-lspconfig": { "branch": "master", "commit": "d6dc63670d3dc5204b1e874af4cbf340cb5d9d18" }, + "nvim-tree.lua": { "branch": "master", "commit": "0a52012d611f3c1492b8d2aba363fabf734de91d" }, + "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, + "nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" }, + "nvim-web-devicons": { "branch": "master", "commit": "3362099de3368aa620a8105b19ed04c2053e38c0" }, + "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, + "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" }, + "toggleterm.nvim": { "branch": "main", "commit": "9a88eae817ef395952e08650b3283726786fb5fb" }, + "vim-fubitive": { "branch": "master", "commit": "c85ca8fa2098aa05e816f5d0839a0dad6bfcca5a" }, + "vim-fugitive": { "branch": "master", "commit": "61b51c09b7c9ce04e821f6cf76ea4f6f903e3cf4" }, + "vim-rhubarb": { "branch": "master", "commit": "5496d7c94581c4c9ad7430357449bb57fc59f501" }, + "vimwiki": { "branch": "dev", "commit": "72792615e739d0eb54a9c8f7e0a46a6e2407c9e8" }, + "which-key.nvim": { "branch": "main", "commit": "370ec46f710e058c9c1646273e6b225acf47cbed" } +} diff --git a/.config/nvim/lua/config/defaults.lua b/.config/nvim/lua/config/defaults.lua new file mode 100644 index 0000000..d48a1ab --- /dev/null +++ b/.config/nvim/lua/config/defaults.lua @@ -0,0 +1,119 @@ +vim.g.mapleader = " " +vim.g.maplocalleader = " " + +-- look for modifier-lines in files and apply them +vim.opt.modeline = true +vim.opt.modelineexpr = true + +-- do no enter a linebreak at end of files (not unix-like, since it makes text-files binary for unix!) +vim.opt.fixendofline = false + +-- improve line numbering +vim.opt.number = true +vim.opt.relativenumber = true + +-- highlight current line +vim.opt.cursorline = true + +-- show meaningful chars for non-printable situations, e.g. nbsp or wrappings +vim.opt.list = true +vim.opt.listchars = "tab:› ,trail:·,nbsp:␣,extends:»,precedes:«" + +-- highlight search results +vim.opt.hlsearch = true +vim.cmd([[highlight LineNr ctermfg=7]]) +vim.cmd([[highlight CursorLineNr ctermbg=green]]) +vim.cmd([[highlight CursorLine ctermbg=green]]) + +-- do not wrap long lines +vim.opt.wrap = false + +-- break lines at words, not chars +vim.opt.linebreak = true + +-- indent by 2 chars by default, make tabstops also 2 chars and expand tabs to spaces +vim.opt.tabstop = 8 +vim.opt.softtabstop = 2 +vim.opt.softtabstop = -1 +vim.opt.shiftwidth = 2 +vim.opt.expandtab = true + +-- fold code after some nesting +vim.opt.foldlevel = 100 + +-- make backspace behave like in other applications +vim.opt.backspace = "indent,eol,start" + +-- simply clear search +vim.keymap.set("n", "/", "nohlsearch") + +-- add some quickfix shortcuts for easier navigation +vim.keymap.set("n", "cn", "cnext") +vim.keymap.set("n", "n", "cnext") +vim.keymap.set("n", "cp", "cprevious") +vim.keymap.set("n", "p", "cprevious") +vim.keymap.set("n", "cc", "cclose") +vim.keymap.set("n", "co", "copen") +vim.keymap.set("n", "cf", "cfirst") +vim.keymap.set("n", "cl", "clast") + +-- simple spellchecks +vim.keymap.set("n", "ss", "set spell!") +vim.keymap.set("n", "sd", "set spelllang=de_de") +vim.keymap.set("n", "se", "set spelllang=en_us") + +-- make navigation easer on a german keyboard! +vim.keymap.set("n", "ä", "]") +vim.keymap.set("n", "ö", "[") +vim.keymap.set("n", "", "") +vim.keymap.set("n", "", "") +vim.keymap.set("n", ",", ";") +vim.keymap.set("n", ";", ",") + +-- simpler navigation in diffs +if vim.api.nvim_win_get_option(0, "diff") then + vim.keymap.set("n", "1", "diffget LOCAL") + vim.keymap.set("n", "2", "diffget BASE") + vim.keymap.set("n", "3", "diffget REMOTE") + vim.keymap.set("n", "n", "]c") + vim.keymap.set("n", "p", "[c") +end + +-- autocommands for specific files +local configgroup = vim.api.nvim_create_augroup('configgroup', { clear = true }) + +function fix_filetype(pattern, filetype) + vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, { + pattern = pattern, + group = configgroup, + callback = function() + vim.opt.filetype = filetype + end, + }) +end + +-- fix filetypes +fix_filetype("*Containerfile", "dockerfile") +fix_filetype("~/.config/git/*", "gitconfig") + +-- adjust settings per filetype +-- git +vim.api.nvim_create_autocmd("FileType", { + pattern = "gitconfig", + group = configgroup, + callback = function() + vim.opt_local.expandtab = false + vim.opt_local.shiftwidth = 4 + vim.opt_local.tabstop = 4 + end, +}) +-- lua +vim.api.nvim_create_autocmd("FileType", { + pattern = "lua", + group = configgroup, + callback = function() + vim.opt_local.expandtab = false + vim.opt_local.shiftwidth = 4 + vim.opt_local.tabstop = 4 + end, +}) diff --git a/.config/nvim/lua/config/lazy.lua b/.config/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..9e773e2 --- /dev/null +++ b/.config/nvim/lua/config/lazy.lua @@ -0,0 +1,35 @@ +-- Bootstrap lazy.nvim +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) + +-- Make sure to setup `mapleader` and `maplocalleader` before +-- loading lazy.nvim so that mappings are correct. +-- This is also a good place to setup other settings (vim.opt) +-- vim.g.mapleader = " " +-- vim.g.maplocalleader = "\\" + +-- Setup lazy.nvim +require("lazy").setup({ + spec = { + -- import your plugins + { import = "plugins" }, + }, + -- Configure any other settings here. See the documentation for more details. + -- colorscheme that will be used when installing plugins. + install = { colorscheme = { "habamax" } }, + -- automatically check for plugin updates + checker = { enabled = true, notify = false }, +}) diff --git a/.config/nvim/lua/plugins/autocompletion.lua b/.config/nvim/lua/plugins/autocompletion.lua new file mode 100644 index 0000000..6bc152c --- /dev/null +++ b/.config/nvim/lua/plugins/autocompletion.lua @@ -0,0 +1,67 @@ +return { + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-nvim-lsp", -- language server as completion source + "hrsh7th/cmp-buffer", -- buffers as completion source + "hrsh7th/cmp-path", -- paths as completion source + "hrsh7th/cmp-cmdline", -- cmdline as completion source + + "hrsh7th/cmp-nvim-lsp-signature-help", -- emphasize current parameter in completions + + "L3MON4D3/LuaSnip", -- I use luasnip anyway + "saadparwaiz1/cmp_luasnip", -- luasnip completion source + }, + config = function() + local cmp = require("cmp") + local luasnip = require("luasnip") + require("luasnip.loaders.from_snipmate").lazy_load() + require("luasnip.loaders.from_lua").lazy_load() + local has_words_before = function () + 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 + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = { + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping.complete(), + [""] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = true + }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = 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" }), + }, + sources = { + { name = "nvim_lsp" }, + { name = "nvim_lsp_signature_help" }, + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + }, + }) + end, +} diff --git a/.config/nvim/lua/plugins/emmet-vim.lua b/.config/nvim/lua/plugins/emmet-vim.lua new file mode 100644 index 0000000..0110931 --- /dev/null +++ b/.config/nvim/lua/plugins/emmet-vim.lua @@ -0,0 +1,4 @@ +return { + "mattn/emmet-vim", + config = function() end, +} diff --git a/.config/nvim/lua/plugins/fugitive.lua b/.config/nvim/lua/plugins/fugitive.lua new file mode 100644 index 0000000..81d2473 --- /dev/null +++ b/.config/nvim/lua/plugins/fugitive.lua @@ -0,0 +1,22 @@ +return { + { + "tpope/vim-fugitive", + lazy = false, + keys = { + -- replaced by telescope + -- { "gg", "Ggrep ", desc = "Git grep" }, + { "gb", "G blame", desc = "Git blame" }, + { "gll", "G log --graph --format='%h (%ar) %s :: %aN <%aE>'", desc = "Git blame" }, + { "glx", "Gclog -- %" }, + { "gl0", "0Gclog -- %" }, + }, + }, + -- Github integration for :GBrowse + { "tpope/vim-rhubarb" }, + -- Gitea integration for :GBrowse + { "borissov/fugitive-gitea" }, + -- Gitlab integration for :GBrowse + { "shumphrey/fugitive-gitlab.vim" }, + -- Bitbucket integration for :GBrowse + { "tommcdo/vim-fubitive" }, +} diff --git a/.config/nvim/lua/plugins/gitsigns.lua b/.config/nvim/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..8d89c22 --- /dev/null +++ b/.config/nvim/lua/plugins/gitsigns.lua @@ -0,0 +1,25 @@ +local function my_attach_change(bufnr) + local gs = require "gitsigns" + vim.keymap.set("n", "tb", gs.toggle_current_line_blame, { buffer = bufnr }) +end + +return { + "lewis6991/gitsigns.nvim", + lazy = false, + opts = { + on_attach = my_attach_change, + signs = { + add = { text = "+" }, + change = { text = "~" }, + delete = { text = "-" }, + topdelete = { text = "-" }, + }, + signs_staged = { + add = { text = "+" }, + change = { text = "~" }, + delete = { text = "-" }, + topdelete = { text = "-" }, + }, + word_diff = false + }, +} diff --git a/.config/nvim/lua/plugins/goyo.lua b/.config/nvim/lua/plugins/goyo.lua new file mode 100644 index 0000000..c3bc5ad --- /dev/null +++ b/.config/nvim/lua/plugins/goyo.lua @@ -0,0 +1,24 @@ +return { + "junegunn/goyo.vim", + dependencies = { + "junegunn/limelight.vim", + "nvim-lualine/lualine.nvim", + }, + lazy = false, + config = function () + vim.keymap.set("n", "gg", function() + require('lualine').hide() + vim.cmd([[Goyo]]) + vim.cmd([[Limelight!! 0.8]]) + end) + end + -- "pocco81/true-zen.nvim", + -- config = function () + -- vim.keymap.set("n", "gwg", function() + -- vim.cmd([[TZAtaraxis]]) + -- end) + -- vim.keymap.set("n", "gww", function() + -- require('lualine').hide() + -- end) + -- end +} diff --git a/.config/nvim/lua/plugins/gruvbox.lua b/.config/nvim/lua/plugins/gruvbox.lua new file mode 100644 index 0000000..cb3d551 --- /dev/null +++ b/.config/nvim/lua/plugins/gruvbox.lua @@ -0,0 +1,20 @@ +return { + { + -- "lifepillar/vim-gruvbox8", + -- priority = 1000, --ensure loading before other plugins + -- opts = {}, + -- config = function() + -- vim.g.gruvbox_contrast_dark = "hard" + -- --vim.cmd("colorscheme gruvbox8") + -- end, + --}, { + "ellisonleao/gruvbox.nvim", + priority = 1000, + opts = { + contrast = "hard", + }, + config = function() + vim.cmd("colorscheme gruvbox") + end + } +} diff --git a/.config/nvim/lua/plugins/lsp.lua b/.config/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..312e936 --- /dev/null +++ b/.config/nvim/lua/plugins/lsp.lua @@ -0,0 +1,115 @@ +local on_attach = function(_, bufnr) + local ts = require("telescope.builtin") + local opts = { noremap = true, silent = true, buffer = bufnr } + vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, opts) + vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) + vim.keymap.set("n", "ge", vim.diagnostic.open_float, opts) + vim.keymap.set("n", "gf", function() vim.lsp.buf.format { async = true } end, opts) + vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts) + vim.keymap.set("n", "gk", vim.lsp.buf.hover, opts) + vim.keymap.set("n", "gK", vim.lsp.buf.signature_help, opts) + vim.keymap.set("n", "gn", function() vim.diagnostic.jump({ count = 1, float = true }) end, opts) + vim.keymap.set("n", "gN", function() vim.diagnostic.jump({ count = -1, float = true }) end, opts) + vim.keymap.set("n", "gr", ts.lsp_references, opts) + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") +end + +return { + "mason-org/mason-lspconfig.nvim", + dependencies = { + { "mason-org/mason.nvim", opts = {} }, + "neovim/nvim-lspconfig", + "nvim-telescope/telescope.nvim", + "hrsh7th/nvim-cmp", -- IMPORTANT: autocomplete must be configured correctly! + -- { + -- 'stevearc/dressing.nvim', + -- opts = {}, + -- event='VeryLazy' + -- } + }, + opts = {}, + config = function() + local masonlsp = require("mason-lspconfig") + masonlsp.setup({ + -- possibilities: https://mason-registry.dev/registry/list + ensure_installed = { + "bashls", + "cssls", + "docker_language_server", + "eslint", + "gopls", + "harper_ls", + "html", + "jsonls", + "lua_ls", + "terraformls", + "ts_ls", + "vue_ls", + }, + }) + local vue_language_server_path = vim.fn.expand '$MASON/packages' .. + '/vue-language-server' .. '/node_modules/@vue/language-server' + local vue_plugin = { + name = '@vue/typescript-plugin', + location = vue_language_server_path, + languages = { 'vue' }, + configNamespace = 'typescript', + } + local home_dir = os.getenv('HOME') + local capabilities = require("cmp_nvim_lsp").default_capabilities() + capabilities.textDocument.completion.completionItem.snippetSupport = true + local opts = { + on_attach = on_attach, + capabilities = capabilities, + } + -- A list of language-server-configs https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.md + vim.lsp.config("bashls", opts) + vim.lsp.config("cssls", opts) + vim.lsp.config("docker_language_server", opts) + vim.lsp.config("eslint", {}) + vim.lsp.config("gopls", opts) + vim.lsp.config("harper_ls", { -- spelling and grammer checks + on_attach = on_attach, + capabilities = capabilities, + filetypes = { "markdown", "asciidoc", "text", "vimwiki" }, + }) + vim.lsp.config("html", opts) + vim.lsp.config("jsonls", opts) + vim.lsp.config("lua_ls", { + on_attach = on_attach, + capabilities = capabilities, + settings = { + Lua = { + diagnostics = { + globals = { "vim" } + }, + telemetry = { enable = false }, + } + } + }) + vim.lsp.config("terraformls", opts) + vim.lsp.config("ts_ls", { + on_attach = on_attach, + capabilities = capabilities, + init_options = { + plugins = { + vue_plugin, + }, + }, + filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' }, + }) + vim.lsp.config('vue_ls', opts) + vim.lsp.enable({ + "cssls", + "eslint", + "html", + "harper_ls", + "jsonls", + "lua_ls", + "terraformls", + "ts_ls", + "vue_ls", + }) + end, +} diff --git a/.config/nvim/lua/plugins/lualine.lua b/.config/nvim/lua/plugins/lualine.lua new file mode 100644 index 0000000..e4800c5 --- /dev/null +++ b/.config/nvim/lua/plugins/lualine.lua @@ -0,0 +1,15 @@ +return { + "nvim-lualine/lualine.nvim", + dependencies = { + 'nvim-tree/nvim-web-devicons' + }, + opts = { + sections = { + lualine_c = { { "filename", path = 1 } }, + }, + inactive_sections = { + lualine_c = { { 'filename', path = 1 } }, + }, + }, +} + diff --git a/.config/nvim/lua/plugins/luasnip.lua b/.config/nvim/lua/plugins/luasnip.lua new file mode 100644 index 0000000..0117a2f --- /dev/null +++ b/.config/nvim/lua/plugins/luasnip.lua @@ -0,0 +1,4 @@ +return { + "L3MON4D3/LuaSnip", + version = "v2.*", -- just because the docs mention it +} diff --git a/.config/nvim/lua/plugins/nvim-autopairs.lua b/.config/nvim/lua/plugins/nvim-autopairs.lua new file mode 100644 index 0000000..df40400 --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-autopairs.lua @@ -0,0 +1,7 @@ +return { + -- add closing parenthesis automatically + "windwp/nvim-autopairs", + event = "InsertEnter", + config = true, + opts = {}, +} diff --git a/.config/nvim/lua/plugins/nvim-telescope.lua b/.config/nvim/lua/plugins/nvim-telescope.lua new file mode 100644 index 0000000..86435af --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-telescope.lua @@ -0,0 +1,16 @@ +return { + "nvim-telescope/telescope.nvim", + dependencies = { + 'nvim-lua/plenary.nvim' + -- do not forget to install ripgrep!!! + -- https://github.com/nvim-telescope/telescope.nvim/issues/522#issuecomment-1374795374 + }, + opts = { + }, + config = function() + local ts = require("telescope.builtin") + vim.keymap.set("n", "", ts.find_files) + vim.keymap.set("n", "fg", ts.live_grep) + vim.keymap.set("n", "ff", ts.oldfiles) + end, +} diff --git a/.config/nvim/lua/plugins/nvim-tree.lua b/.config/nvim/lua/plugins/nvim-tree.lua new file mode 100644 index 0000000..74a91c9 --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-tree.lua @@ -0,0 +1,116 @@ +local function my_attach_change(bufnr) + local api = require "nvim-tree.api" + local function opts(desc) + return { desc = "nvim-tree: " .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } + end + api.config.mappings.default_on_attach(bufnr) + vim.keymap.set("n", "?", api.tree.toggle_help, opts("Help")) + vim.keymap.set("n", "I", api.tree.toggle_hidden_filter, opts("Toggle Filter: Dotfiles")) + -- vim.keymap.set("n", "O", function() + -- api.node.open.edit() + -- current = api.tree.get_node_under_cursor() + -- if current.type ~= "directory" then + -- api.tree.close() + -- end + -- end, opts("Open and clode Tree")) + -- vim.keymap.set("n", "o", api.node.open.edit, opts("Open")) + + -- add my most used NERDTree mappings + -- vim.keymap.set("n", "ma", api.fs.create, opts("NERDTree add a childnode")) + -- vim.keymap.set("n", "mc", function() api.fs.copy.node(); api.fs.paste(); end, opts("NERDTree copy the current node")) + -- vim.keymap.set("n", "md", api.fs.remove, opts("NERDTree delete the current node")) + -- vim.keymap.set("n", "mm", api.fs.rename_full, opts("NERDTree move the current node")) + -- vim.keymap.set("n", "mo", api.node.run.system, opts("NERDTree open the current node with system editor")) +end + + +return { + { + "nvim-tree/nvim-tree.lua", + lazy = false, + keys = { + { "e", "NvimTreeFindFile", desc = "NvimTree" }, + { "E", "NvimTreeClose", desc = "Close NvimTree" }, + }, + opts = { + on_attach = my_attach_change, + filters = { + dotfiles = true, + git_ignored = false, + }, + view = { + signcolumn = "no", + width = 40, + }, + renderer = { + -- root_folder_label = ":~", + -- root_folder_label = ":.", + root_folder_label = function(path) + return vim.fn.fnamemodify(path, ":h:t") .. "/" .. vim.fn.fnamemodify(path, ":t") .. "/" + end, + group_empty = true, + icons = { + padding = { + icon = " ", + }, + --padding = { + -- folder_arrow = " ", + -- icon = "", + --}, + --show = { + -- file = false, + -- folder = false, + -- folder_arrow = true, + --}, + --glyphs = { + -- folder = { + -- arrow_closed = "▸ ", + -- arrow_open = "▾ ", + -- }, + -- git = { + -- unstaged = "✗ ", + -- staged = "✓ ", + -- unmerged = " ", + -- renamed = "➜ ", + -- untracked = "★ ", + -- deleted = " ", + -- ignored = "◌ ", + -- }, + --}, + }, + }, + diagnostics = { + enable = true, + icons = { + hint = " ", + info = " ", + warning = " ", + error = " ", + }, + }, + }, + init = function() + vim.g.loaded_netrw = 1 + vim.g.loaded_netrwPlugin = 1 + end, + }, + { + "nvim-tree/nvim-web-devicons", + }, + -- { + -- "scrooloose/nerdtree", + -- init = function() + -- vim.g.NERDTreeGitStatusShowIgnored = 1 + -- vim.cmd([[let NERDTreeMinimalUI=1]]) + -- vim.cmd([[let NERDTreeDirArrows=1]]) + -- vim.cmd([[let NERDTreeAutoDeleteBuffer=1]]) + -- -- vim.keymap.set("n", "n", ":NERDTreeToggle") + -- end, + -- keys = { + -- { "e", "NERDTreeFocus", desc = "NERDTree" }, + -- }, + -- }, + -- { + -- "Xuyuanp/nerdtree-git-plugin", + -- }, +} diff --git a/.config/nvim/lua/plugins/nvim-treesitter.lua b/.config/nvim/lua/plugins/nvim-treesitter.lua new file mode 100644 index 0000000..c1bacab --- /dev/null +++ b/.config/nvim/lua/plugins/nvim-treesitter.lua @@ -0,0 +1,20 @@ +return { + "nvim-treesitter/nvim-treesitter", + lazy = false, + config = function() + local configs = require("nvim-treesitter.configs") + configs.setup({ + ensure_installed = "all", + ignore_install = { "ipkg" }, + sync_install = false, + auto_install = true, + highlight = { enable = true }, + indent = { enable = true }, + }) + vim.opt.foldexpr = "v:lua.vim.treesitter.foldexpr()" + --vim.opt.foldtext = "v:lua.vim.treesitter.foldtext()" + vim.opt.foldmethod = "expr" + end, +} + + diff --git a/.config/nvim/lua/plugins/toggleterm.lua b/.config/nvim/lua/plugins/toggleterm.lua new file mode 100644 index 0000000..9539e7a --- /dev/null +++ b/.config/nvim/lua/plugins/toggleterm.lua @@ -0,0 +1,10 @@ +vim.keymap.set('t', '', [[]], {}) +vim.keymap.set('t', '', [[ToggleTerm]], {}) + +return { + "akinsho/toggleterm.nvim", + opts = {}, + keys = { + { "", [[ToggleTerm]] }, + }, +} diff --git a/.config/nvim/lua/plugins/ts-autotag.lua b/.config/nvim/lua/plugins/ts-autotag.lua new file mode 100644 index 0000000..df20fe5 --- /dev/null +++ b/.config/nvim/lua/plugins/ts-autotag.lua @@ -0,0 +1,8 @@ +return { + -- add closing HTML tags automatically + "windwp/nvim-ts-autotag", + lazy = false, + config = function() + require 'nvim-ts-autotag'.setup() + end, +} diff --git a/.config/nvim/lua/plugins/vimwiki.lua b/.config/nvim/lua/plugins/vimwiki.lua new file mode 100644 index 0000000..322a77c --- /dev/null +++ b/.config/nvim/lua/plugins/vimwiki.lua @@ -0,0 +1,30 @@ +local wikipath = "~/Development/nemoinho/gitea.nehrke.info/nemoinho/vimwiki/" +--vim.cmd("let g:vimwiki_list = [{'path': '~/Development/nemoinho/gitea.nehrke.info/nemoinho/vimwiki/' }]") +vim.g.vimwiki_table_mappings = 0 +vim.g.vimwiki_list = { { path = wikipath, auto_export = 1 } } +vim.g.vimwiki_autowriteall = 0 +vim.g.vimwiki_url_maxsave = 0 +local vimwikiconfig = vim.api.nvim_create_augroup('configgroup', { clear = true }) +vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, { + pattern = "diary.wiki", + group = vimwikiconfig, + callback = function() vim.cmd([[VimwikiDiaryGenerateLinks]]) end, +}) +vim.api.nvim_create_autocmd("FileType", { + pattern = "vimwiki", + group = vimwikiconfig, + callback = function() + vim.opt_local.wrap = true + vim.opt_local.number = false + vim.opt_local.relativenumber = false + vim.keymap.set("n", "ws", function() + vim.cmd("call system('sleep 2 && cd " .. wikipath .. " && git add . && git commit -m " .. '"Auto commit"' .. " && git push')") + end) + vim.keymap.set("n", "we", "VimwikiMakeDiaryNote") + end, +}) + +return { + "vimwiki/vimwiki", + config = function() end, +} diff --git a/.config/nvim/lua/plugins/which-key.lua b/.config/nvim/lua/plugins/which-key.lua new file mode 100644 index 0000000..b99ad2c --- /dev/null +++ b/.config/nvim/lua/plugins/which-key.lua @@ -0,0 +1,4 @@ +return { + "folke/which-key.nvim", + opts = {}, +} diff --git a/.config/nvim/snippets/typescript.snippets b/.config/nvim/snippets/typescript.snippets new file mode 100644 index 0000000..b28264a --- /dev/null +++ b/.config/nvim/snippets/typescript.snippets @@ -0,0 +1,36 @@ +snippet xhandler Create initial handler for nuxt + import { defineEventHandler } from 'h3' + import { useRuntimeConfig } from 'nitropack/runtime' + + export default defineEventHandler((event) => { + ${0} + }) + +snippet xrunconf Load runtime config in nuxt/nitro + const ${1:config} = useRuntimeConfig() + ${0} + +snippet xref Add ref + const ${1} = ref${3}(${2:''}) + ${0} + +snippet xcom Add computed + const ${1} = computed(() => ${2}) + ${0} + +snippet xfun Add a function in a const + const ${1} = (${2}) => ${4:{}} + $0 + +snippet xstore Define a pinia store + import { defineStore } from 'pinia' + + export const use${2} = defineStore('$1', () => { + $0 + return { + } + }) + +snippet xufetch Add a useFetch call + const { data: ${1:data} } = useFetch('${2}', {${3}}) + $0 diff --git a/.config/nvim/snippets/vue.snippets b/.config/nvim/snippets/vue.snippets new file mode 100644 index 0000000..4aee951 --- /dev/null +++ b/.config/nvim/snippets/vue.snippets @@ -0,0 +1,44 @@ +snippet xscript Create initial skeleton + + + + +snippet xpagemeta Add page meta + definePageMeta({ ${0} }) + +snippet xulocalepath Add localePath + const ${1:localePath} = useLocalePath() + +snippet xlocalepath get locale localePath + localePath('${1}') + +snippet xlp get locale localePath + localePath('${1}') + +snippet xui18n Add useI18n + const { t${1} } = useI18n() + $0 + +snippet xuroute Add useRoute + const ${1:route} = useRoute() + $0 + +snippet xufetch Add a useFetch call + const { data: ${1:data} } = useFetch('${2}', {${3}}) + $0 + +snippet xref Add ref + const ${1} = ref${3}(${2:''}) + ${0} + +snippet xcom Add computed + const ${1} = computed(() => ${2}) + ${0} + +snippet xfun Add a function in a const + const ${1} = (${2}) => ${4:{}} + $0 diff --git a/.vimrc b/.vimrc deleted file mode 100644 index 747183b..0000000 --- a/.vimrc +++ /dev/null @@ -1,251 +0,0 @@ -" Start: Manage plugins -set nocompatible -filetype off -set runtimepath+=~/.vim/bundle/Vundle.vim -call vundle#begin() -" Plugin-Manager -Plugin 'git@github.com:VundleVim/Vundle.vim' - -" A wiki within vim -Plugin 'git@github.com:vimwiki/vimwiki' - -" A navigable visualization of vim's file-history -Plugin 'git@github.com:mbbill/undotree' - -" A handy file-browser for vim -Plugin 'git@github.com:scrooloose/nerdtree' - -" Utilities which are required by vim-snipmate -Plugin 'git@github.com:MarcWeber/vim-addon-mw-utils' -" Utilities which are required by vim-snipmate -Plugin 'git@github.com:tomtom/tlib_vim' -" Manage snippets as short cuts for vim -Plugin 'git@github.com:garbas/vim-snipmate' - -" Add support for typecript-syntax -Plugin 'git@github.com:leafgarland/typescript-vim' - -" Improve foldings on yaml-files (These are otherwise really unconvenient in vim) -Plugin 'git@github.com:pedrohdz/vim-yaml-folds' - -" Add git-support, especially the command :Git -Plugin 'git@github.com:tpope/vim-fugitive' - -" Autoformat tables in vim -Plugin 'git@github.com:godlygeek/tabular' - -" Add git-status-marker in nerdtree -Plugin 'git@github.com:Xuyuanp/nerdtree-git-plugin' - -" Enable syntax-checks -Plugin 'git@github.com:vim-syntastic/syntastic' - -" Add markers for changed lines -Plugin 'git@github.com:airblade/vim-gitgutter' - -" A magigical search-term for pretty much everything within vim -Plugin 'git@github.com:ctrlpvim/ctrlp.vim' - -" Add a bunch of support for csv-files -Plugin 'git@github.com:chrisbra/csv.vim' - -" A navigable view of the tags/marks within a file -Plugin 'git@github.com:preservim/tagbar' - -" Add support for js-syntax -Plugin 'git@github.com:jelera/vim-javascript-syntax' - -" A 'surround' command similiar to the 'inner' commands (cs'" to change quotes) -Plugin 'git@github.com:tpope/vim-surround' - -" A cool theme with good readability -Plugin 'git@github.com:lifepillar/vim-gruvbox8' - -" A tool to remove every noisy output to concentrate on writing! -Plugin 'git@github.com:junegunn/goyo.vim' - -" Add support for hcl (terraform, packer, etc.) -Plugin 'git@github.com:hashivim/vim-terraform' -Plugin 'git@github.com:hashivim/vim-packer' - -" Add closing-tags in HTML/XML -Plugin 'git@github.com:alvan/vim-closetag.git' - -" A tool to build HTML with a simplified selector-language -Plugin 'git@github.com:mattn/emmet-vim.git' - -" Add a status/tabline at the bottom -Plugin 'git@github.com:vim-airline/vim-airline.git' - -" A calendar-integration -Plugin 'git@github.com:mattn/calendar-vim.git' - -" Papercolor -Plugin 'git@github.com:NLKNguyen/papercolor-theme.git' - -call vundle#end() -" End: Manage plugins -filetype plugin on - -syntax on - -let mapleader = "," - -let g:gruvbox_contrast_dark = 'hard' -let g:vimwiki_table_mappings = 0 -let g:vimwiki_folding = 'expr' -let g:vimwiki_list = [{'path': '~/Development/nemoinho/gitea.nehrke.info/nemoinho/vimwiki/', 'auto_export': 1}] -let g:vimwiki_autowriteall = 0 -let g:vimwiki_url_maxsave = 0 -let g:NERDTreeGitStatusShowIgnored = 1 -let NERDTreeMinimalUI = 1 -let NERDTreeDirArrows = 1 -let g:snipMate = { 'snippet_version' : 1 } -let g:tagbar_ctags_bin = '~/.local/opt/ctags/bin/ctags' -let g:ctrlp_custom_ignore = 'node_modules\|dist' - -set bg=dark -" Settings -set listchars=tab:›\ ,trail:·,nbsp:_,extends:»,precedes:« -set list -set hlsearch -set number -set relativenumber -set nowrap -set linebreak -" Enable vim configs in the first or last lines of a file -set modeline -set modelineexpr -" Avoid an extra line at the end of the file -set nofixendofline - -set tabstop=4 -set shiftwidth=4 -set expandtab -set backspace=indent,eol,start - -" specific for MacVim set a pleasing font-size -set guifont=Menlo\ Regular:h15 - -highlight LineNr ctermfg=7 -highlight CusrsorLineNr ctermbg=green -highlight CusrsorLine ctermbg=green - -colorscheme gruvbox8 - -" ease CTRL-] since it's very hard to type on german keyboards -" However I can't just remap the command to the matching position since this -" is not a valid input for most unix-terminals. Therefore I just drop the -" CTRL-prefix and use the letter where the bracket would be on us keyboards. -" See: https://stackoverflow.com/a/16748339/4316528 -nnoremap ä -" just don't work right now and that seems like a convenient keybinding -nnoremap ö - -" General utilities -nnoremap cd :cd %:p:h -nnoremap gg :Goyo -nnoremap l :set nu! relativenumber! wrap! -nnoremap m :make -nnoremap q :qa! -nnoremap gv :vertical wincmd f - -" Snipmate -imap l snipMateNextOrTrigger -smap l snipMateNextOrTrigger - -" Open shell with Ctrl+d to enable a toggle between a shell and vim -nnoremap :botright terminal ++close -inoremap :botright terminal ++close -" nvim uses a different terminal approach – more vim-like actually :-P -if has('nvim') - nnoremap :botright :split term://bash:resize -100:set winheight=10 wfhi - inoremap :botright :split term://bash:resize -100:set winheight=10 wfhi - tnoremap -endif - -" Handle nerdtree and other utility-windows -nnoremap , :NERDTreeFocus -nnoremap c :NERDTreeClose -nnoremap n :NERDTreeToggle -nnoremap t :TagbarToggle -nnoremap u :UndotreeToggle - -" Git -nnoremap ga. :Git add % -nnoremap gaa :Git add . -nnoremap gb :Git blame -nnoremap gc :Git commit -nnoremap gd :Git diff -nnoremap gl :Git lg -nnoremap gp :Git push -u origin -nnoremap gs :Git status -nnoremap tw :set textwidth=72 -nnoremap go :Git pull -nnoremap gf :set textwidth=100 colorcolumn=101 spellgqqmaggV/^#kgq`a - -" Install these files to ~/.vim/spell/ -" http://ftp.vim.org/vim/runtime/spell/en.utf-8.spl -" http://ftp.vim.org/vim/runtime/spell/de.utf-8.spl -nnoremap ss :set spell! -nnoremap sd :set spelllang=de_de -nnoremap se :set spelllang=en_us - -" Tabularize -nnoremap t, :Tabularize /,/l1 -nnoremap tc :Tabularize /;/l1 -nnoremap tp :Tabularize /\|/l1 -nnoremap tt :Tabularize /\|/l1 - -" Open CtrlP faster -nnoremap p :CtrlP - -" diffs -if &diff - nnoremap 1 :diffget LOCAL - nnoremap 2 :diffget BASE - nnoremap 3 :diffget REMOTE - nnoremap n ]c - nnoremap p [c - nnoremap ä ]c - nnoremap ö [c -endif - -augroup configgroup - autocmd! - autocmd BufRead,BufNewFile ~/.config/git/* set filetype=gitconfig - autocmd FileType gitconfig set tabstop=4 softtabstop=8 shiftwidth=0 noexpandtab - autocmd FileType terraform set tabstop=2 softtabstop=2 shiftwidth=0 expandtab foldmethod=marker foldmarker={,} foldlevel=2 - autocmd FileType javascript set tabstop=2 softtabstop=2 shiftwidth=2 expandtab foldlevel=5 - autocmd FileType yaml set tabstop=2 softtabstop=2 shiftwidth=2 expandtab foldlevel=4 - - " Close when only Nerdtree would remain - autocmd BufEnter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif - - " Copy global wrap in diff (This way I can use the same behavior in diff as in normal views) - autocmd FilterWritePre * if &diff | setlocal wrap< | endif - - " vimwiki - autocmd BufRead,BufNewFile diary.wiki VimwikiDiaryGenerateLinks - autocmd BufRead,BufNewFile *.wiki set wrap nonumber norelativenumber - "autocmd BufRead,BufNewFile *.wiki Goyo 80 | set wrap - autocmd FileType vimwiki set tabstop=2 softtabstop=2 shiftwidth=2 expandtab foldlevel=10 - autocmd FileType vimwiki nnoremap d :VimwikiDiaryIndex - autocmd FileType vimwiki nnoremap to :VimwikiTOC - autocmd FileType vimwiki nnoremap q :Goyo!:q - " On mac ctrl+space is occupied by their spotlight search... - " So I need a workaround to avoid apples stupid keyboard-thing - autocmd FileType vimwiki nnoremap :VimwikiToggleListItemj - autocmd FileType vimwiki nnoremap m :VimwikiToggleListItem - autocmd FileType vimwiki nnoremap :VimwikiToggleListItem - " end of apple workarounds, I might get used to one of these... - autocmd FileType vimwiki nnoremap x :call system('git add . && git commit -m "Auto commit" && git push') - autocmd FileType vimwiki nnoremap ZZ :Goyo!:x - " Fix broken backspace functionality on mac - if has("unix") - let s:uname = system("uname -s") - if s:uname == "Darwin" - autocmd FileType vimwiki nnoremap VimwikiGoBackLink - endif - endif -augroup end