commit 174c45fbd1f7238258de13859df79dc9ebe602c0 Author: Joe Frikker Date: Fri Jun 2 17:01:19 2023 -0400 nvim + home-manager diff --git a/home-manager/home-fish.nix b/home-manager/home-fish.nix new file mode 100644 index 0000000..53865b6 --- /dev/null +++ b/home-manager/home-fish.nix @@ -0,0 +1,122 @@ +pkgs: + { + enable = true; + shellAliases = { + nsh = "nix-shell --command fish"; + }; +# interactiveShellInit = '' +# function fish_prompt +# set -l last_status $status +# if not set -q __fish_git_prompt_show_informative_status +# set -g __fish_git_prompt_show_informative_status 1 +# end +# if not set -q __fish_git_prompt_hide_untrackedfiles +# set -g __fish_git_prompt_hide_untrackedfiles 1 +# end +# +# if not set -q __fish_git_prompt_color_branch +# set -g __fish_git_prompt_color_branch magenta --bold +# end +# if not set -q __fish_git_prompt_showupstream +# set -g __fish_git_prompt_showupstream "informative" +# end +# if not set -q __fish_git_prompt_char_upstream_ahead +# set -g __fish_git_prompt_char_upstream_ahead "↑" +# end +# if not set -q __fish_git_prompt_char_upstream_behind +# set -g __fish_git_prompt_char_upstream_behind "↓" +# end +# if not set -q __fish_git_prompt_char_upstream_prefix +# set -g __fish_git_prompt_char_upstream_prefix "" +# end +# +# if not set -q __fish_git_prompt_char_stagedstate +# set -g __fish_git_prompt_char_stagedstate "●" +# end +# if not set -q __fish_git_prompt_char_dirtystate +# set -g __fish_git_prompt_char_dirtystate "✚" +# end +# if not set -q __fish_git_prompt_char_untrackedfiles +# set -g __fish_git_prompt_char_untrackedfiles "…" +# end +# if not set -q __fish_git_prompt_char_invalidstate +# set -g __fish_git_prompt_char_invalidstate "✖" +# end +# if not set -q __fish_git_prompt_char_cleanstate +# set -g __fish_git_prompt_char_cleanstate "✔" +# end +# +# if not set -q __fish_git_prompt_color_dirtystate +# set -g __fish_git_prompt_color_dirtystate blue +# end +# if not set -q __fish_git_prompt_color_stagedstate +# set -g __fish_git_prompt_color_stagedstate yellow +# end +# if not set -q __fish_git_prompt_color_invalidstate +# set -g __fish_git_prompt_color_invalidstate red +# end +# if not set -q __fish_git_prompt_color_untrackedfiles +# set -g __fish_git_prompt_color_untrackedfiles $fish_color_normal +# end +# if not set -q __fish_git_prompt_color_cleanstate +# set -g __fish_git_prompt_color_cleanstate green --bold +# end +# +# if not set -q __fish_prompt_normal +# set -g __fish_prompt_normal (set_color normal) +# end +# +# set -l color_cwd +# set -l prefix +# set -l suffix +# switch "$USER" +# case root toor +# if set -q fish_color_cwd_root +# set color_cwd $fish_color_cwd_root +# else +# set color_cwd $fish_color_cwd +# end +# set suffix '#' +# case '*' +# set color_cwd $fish_color_cwd +# set suffix '$' +# end +# +# # PWD +# set_color $color_cwd +# echo -n (prompt_pwd) +# set_color normal +# +# printf '%s ' (fish_git_prompt) +# +# if not test $last_status -eq 0 +# set_color $fish_color_error +# echo -n "[$last_status] " +# set_color normal +# end +# +# echo -n "$suffix " +# end +# ''; + plugins = [ + { + name = "nix-env"; + src = pkgs.fetchFromGitHub { + owner = "lilyball"; + repo = "nix-env.fish"; + rev = "7b65bd228429e852c8fdfa07601159130a818cfa"; + sha256 = "RG/0rfhgq6aEKNZ0XwIqOaZ6K5S4+/Y5EEMnIdtfPhk="; + }; + } + { + name = "fzf"; + src = pkgs.fetchFromGitHub { + owner = "PatrickF1"; + repo = "fzf.fish"; + rev = "63c8f8e65761295da51029c5b6c9e601571837a1"; + sha256 = "036n50zr9kyg6ad408zn7wq2vpfwhmnfwab465km4dk60ywmrlcb"; + + }; + } + ]; + } diff --git a/home-manager/home-neovim.nix b/home-manager/home-neovim.nix new file mode 100644 index 0000000..4cf8ee7 --- /dev/null +++ b/home-manager/home-neovim.nix @@ -0,0 +1,62 @@ +pkgs: + { + enable = true; + viAlias = true; + extraConfig = '' + set et + set nofixeol + set number + set ts=2 + set sts=-1 + set sw=2 + ''; + plugins = with pkgs.vimPlugins; [ + vim-gitgutter + { + plugin = nvim-lspconfig; + type = "lua"; + config = '' + -- Mappings. + -- See `:help vim.diagnostic.*` for documentation on any of the below functions + local opts = { noremap=true, silent=true } + vim.keymap.set('n', 'e', vim.diagnostic.open_float, opts) + vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, opts) + vim.keymap.set('n', ']d', vim.diagnostic.goto_next, opts) + vim.keymap.set('n', 'q', vim.diagnostic.setloclist, opts) + + -- Use an on_attach function to only map the following keys + -- after the language server attaches to the current buffer + local on_attach = function(client, bufnr) + -- Enable completion triggered by + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + + -- Mappings. + -- See `:help vim.lsp.*` for documentation on any of the below functions + local bufopts = { noremap=true, silent=true, buffer=bufnr } + vim.keymap.set('n', 'gD', vim.lsp.buf.declaration, bufopts) + vim.keymap.set('n', 'gd', vim.lsp.buf.definition, bufopts) + vim.keymap.set('n', 'K', vim.lsp.buf.hover, bufopts) + vim.keymap.set('n', 'gi', vim.lsp.buf.implementation, bufopts) + vim.keymap.set('n', '', vim.lsp.buf.signature_help, bufopts) + vim.keymap.set('n', 'wa', vim.lsp.buf.add_workspace_folder, bufopts) + vim.keymap.set('n', 'wr', vim.lsp.buf.remove_workspace_folder, bufopts) + vim.keymap.set('n', 'wl', function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, bufopts) + vim.keymap.set('n', 'D', vim.lsp.buf.type_definition, bufopts) + vim.keymap.set('n', 'rn', vim.lsp.buf.rename, bufopts) + vim.keymap.set('n', 'ca', vim.lsp.buf.code_action, bufopts) + vim.keymap.set('n', 'gr', vim.lsp.buf.references, bufopts) + vim.keymap.set('n', 'f', vim.lsp.buf.formatting, bufopts) + end + + require('lspconfig')['hls'].setup{ + on_attach = on_attach, + } + require('lspconfig')['rust_analyzer'].setup{ + on_attach = on_attach, + } + ''; + } + ]; + } diff --git a/home-manager/home-starship.nix b/home-manager/home-starship.nix new file mode 100644 index 0000000..821c000 --- /dev/null +++ b/home-manager/home-starship.nix @@ -0,0 +1,20 @@ +{ + enable = true; + settings = { + add_newline = false; + git_branch.symbol = " "; + git_status.ahead = "⇡\${count}"; + git_status.behind = "⇣\${count}"; + git_status.diverged = "⇕⇡\${ahead_count}⇣\${behind_count}"; + git_status.format = "([\\[\$conflicted\$staged\$ahead_behind\\]](\$style) )"; + java.symbol = " "; + line_break.disabled = true; + nix_shell.symbol = " "; + nodejs.symbol = " "; + package.disabled = true; + python.symbol = " "; + package.symbol = " "; + rust.symbol = " "; + shell.disabled = false; + }; +} diff --git a/home-manager/home-tmux.nix b/home-manager/home-tmux.nix new file mode 100644 index 0000000..3120d9e --- /dev/null +++ b/home-manager/home-tmux.nix @@ -0,0 +1,14 @@ +{ + baseIndex = 1; + clock24 = true; + enable = true; + escapeTime = 0; + keyMode = "vi"; + mouse = true; + shortcut = "Space"; + extraConfig = '' +bind-key -T copy-mode-vi 'v' send -X begin-selection +bind-key -T copy-mode-vi 'y' send -X copy-selection-and-cancel +set -g status off + ''; +} diff --git a/home-manager/home.nix b/home-manager/home.nix new file mode 100644 index 0000000..26e8bfd --- /dev/null +++ b/home-manager/home.nix @@ -0,0 +1,70 @@ +{ config, pkgs, ... }: + +{ + # Home Manager needs a bit of information about you and the + # paths it should manage. + home.username = "jfrikker"; + home.homeDirectory = "/Users/jfrikker"; + + home.packages = [ + # pkgs.apacheKafka + pkgs.aws-iam-authenticator + pkgs.awscli + pkgs.bat + pkgs.emacs + pkgs.fd + # pkgs.ghc + # pkgs.go + # pkgs.haskellPackages.cabal-install + # pkgs.haskellPackages.haskell-language-server + # pkgs.inconsolata-nerdfont + pkgs.jdt-language-server + pkgs.jsonnet + pkgs.kubectl + pkgs.maven + pkgs.mysql-client + pkgs.neovide + pkgs.neovim + pkgs.nodejs-16_x + pkgs.nodePackages.typescript-language-server + pkgs.postgresql + pkgs.ripgrep + # pkgs.rlwrap + pkgs.rust-analyzer + pkgs.rustup + # pkgs.sbcl + pkgs.source-code-pro + pkgs.xonsh + pkgs.yarn + # pkgs.zellij + ]; + + # This value determines the Home Manager release that your + # configuration is compatible with. This helps avoid breakage + # when a new Home Manager release introduces backwards + # incompatible changes. + # + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + home.stateVersion = "22.05"; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + + programs.bash.enable = true; + programs.bottom.enable = true; + programs.fish = import ./home-fish.nix pkgs; + programs.fzf.enable = true; + programs.git.enable = true; + programs.java.enable = true; + programs.java.package = pkgs.jdk17; + programs.jq.enable = true; + programs.k9s.enable = true; + programs.lazygit.enable = true; + programs.starship = import ./home-starship.nix; + programs.tmux = import ./home-tmux.nix; + + # programs.neovim = import ./home-neovim.nix pkgs; +} diff --git a/nvim/.gitignore b/nvim/.gitignore new file mode 100644 index 0000000..ed1d552 --- /dev/null +++ b/nvim/.gitignore @@ -0,0 +1,9 @@ +tt.* +.tests +doc/tags +debug +.repro +foo.* +*.log +data +lazy-lock.json diff --git a/nvim/.neoconf.json b/nvim/.neoconf.json new file mode 100644 index 0000000..7c48087 --- /dev/null +++ b/nvim/.neoconf.json @@ -0,0 +1,15 @@ +{ + "neodev": { + "library": { + "enabled": true, + "plugins": true + } + }, + "neoconf": { + "plugins": { + "lua_ls": { + "enabled": true + } + } + } +} diff --git a/nvim/LICENSE b/nvim/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/nvim/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/nvim/README.md b/nvim/README.md new file mode 100644 index 0000000..185280b --- /dev/null +++ b/nvim/README.md @@ -0,0 +1,4 @@ +# 💤 LazyVim + +A starter template for [LazyVim](https://github.com/LazyVim/LazyVim). +Refer to the [documentation](https://lazyvim.github.io/installation) to get started. diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..2514f9e --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,2 @@ +-- bootstrap lazy.nvim, LazyVim and your plugins +require("config.lazy") diff --git a/nvim/lua/config/autocmds.lua b/nvim/lua/config/autocmds.lua new file mode 100644 index 0000000..27e9e06 --- /dev/null +++ b/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/nvim/lua/config/keymaps.lua b/nvim/lua/config/keymaps.lua new file mode 100644 index 0000000..e6b5242 --- /dev/null +++ b/nvim/lua/config/keymaps.lua @@ -0,0 +1,4 @@ +-- 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.keymap.set("n", "w", "w", { desc = "Write file"}) diff --git a/nvim/lua/config/lazy.lua b/nvim/lua/config/lazy.lua new file mode 100644 index 0000000..f4c3482 --- /dev/null +++ b/nvim/lua/config/lazy.lua @@ -0,0 +1,47 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + -- bootstrap lazy.nvim + -- stylua: ignore + vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath }) +end +vim.opt.rtp:prepend(vim.env.LAZY or lazypath) + +require("lazy").setup({ + spec = { + -- add LazyVim and import its plugins + { "LazyVim/LazyVim", import = "lazyvim.plugins" }, + -- import any extras modules here + { import = "lazyvim.plugins.extras.lang.typescript" }, + { import = "lazyvim.plugins.extras.lang.json" }, + -- { import = "lazyvim.plugins.extras.ui.mini-animate" }, + { import = "lazyvim.plugins.extras.dap.core" }, + -- 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 = { "catppuccin" } }, + checker = { enabled = false }, -- automatically check for plugin updates + performance = { + rtp = { + -- disable some rtp plugins + disabled_plugins = { + "gzip", + -- "matchit", + -- "matchparen", + -- "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + }, + }, + }, +}) diff --git a/nvim/lua/config/options.lua b/nvim/lua/config/options.lua new file mode 100644 index 0000000..cf419be --- /dev/null +++ b/nvim/lua/config/options.lua @@ -0,0 +1,11 @@ +-- 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 + +local opt = vim.opt +opt.autowriteall = true +opt.colorcolumn = "121" +opt.hidden = false +opt.tabstop = 4 +opt.shiftwidth = 4 +opt.relativenumber = false diff --git a/nvim/lua/plugins/colors.lua b/nvim/lua/plugins/colors.lua new file mode 100644 index 0000000..84bb0c8 --- /dev/null +++ b/nvim/lua/plugins/colors.lua @@ -0,0 +1,8 @@ +return { + { + "LazyVim/LazyVim", + opts = { + colorscheme = "catppuccin-macchiato", + }, + }, +} diff --git a/nvim/lua/plugins/lsp.lua b/nvim/lua/plugins/lsp.lua new file mode 100644 index 0000000..869c1d5 --- /dev/null +++ b/nvim/lua/plugins/lsp.lua @@ -0,0 +1,92 @@ +return { + { "jay-babu/mason-nvim-dap.nvim", tag = "v2.0.1" }, + { + "neovim/nvim-lspconfig", + dependencies = { + { "mfussenegger/nvim-jdtls" }, + }, + opts = { + autoformat = false, + servers = { + jdtls = {}, + }, + setup = { + jdtls = function(_, opts) + vim.api.nvim_create_autocmd("Filetype", { + pattern = "java", -- autocmd to start jdtls + callback = function() + -- use this function notation to build some variables + local root_markers = { ".git", "mvnw", "gradlew", "pom.xml", "build.gradle" } + local root_dir = require("jdtls.setup").find_root(root_markers) + + -- calculate workspace dir + local project_name = vim.fn.fnamemodify(vim.fn.getcwd(), ":p:h:t") + local workspace_dir = vim.fn.stdpath("data") .. "/site/java/workspace-root/" .. project_name + -- os.execute("mkdir " .. workspace_dir) + + -- get the mason install path + local install_path = require("mason-registry").get_package("jdtls"):get_install_path() + local debug_install_path = require("mason-registry").get_package("java-debug-adapter"):get_install_path() + local test_install_path = require("mason-registry").get_package("java-test"):get_install_path() + + -- get the current OS + local os + if vim.fn.has("macunix") then + os = "mac" + elseif vim.fn.has("win32") then + os = "win" + else + os = "linux" + end + + -- return the server config + local config = { + cmd = { + "java", + "-Declipse.application=org.eclipse.jdt.ls.core.id1", + "-Dosgi.bundles.defaultStartLevel=4", + "-Declipse.product=org.eclipse.jdt.ls.core.product", + "-Dlog.protocol=true", + "-Dlog.level=ALL", + -- "-javaagent:" .. install_path .. "/lombok.jar", + "-Xms1g", + "--add-modules=ALL-SYSTEM", + "--add-opens", + "java.base/java.util=ALL-UNNAMED", + "--add-opens", + "java.base/java.lang=ALL-UNNAMED", + "-jar", + vim.fn.glob(install_path .. "/plugins/org.eclipse.equinox.launcher_*.jar"), + "-configuration", + install_path .. "/config_" .. os, + "-data", + workspace_dir, + }, + root_dir = root_dir, + settings = { + java = { + referencesCodeLens = { + enabled = false, + }, + }, + }, + init_options = { + bundles = vim.list_extend({ + vim.fn.glob(debug_install_path .. "/extension/server/com.microsoft.java.debug.plugin-*.jar", true), + }, vim.split(vim.fn.glob(test_install_path .. "/extension/server/*.jar", true), "\n")), + }, + ["on_attach"] = function(client, bufnr) + require("jdtls").setup_dap() + require("jdtls.setup").add_commands() + vim.keymap.set("n", "cc", function() require('jdtls').compile() end, {buffer = bufnr, desc = "Java Errors"}) + end, + } + require("jdtls").start_or_attach(config) + end, + }) + return true + end, + }, + }, + }, +} diff --git a/nvim/lua/plugins/plugins.lua b/nvim/lua/plugins/plugins.lua new file mode 100644 index 0000000..a6b5a6f --- /dev/null +++ b/nvim/lua/plugins/plugins.lua @@ -0,0 +1,97 @@ +return { + { + "stevearc/dressing.nvim", + enabled = false, + }, + { + "akinsho/bufferline.nvim", + enabled = false, + }, + { + "SmiteshP/nvim-navic", + enabled = false, + }, + { + "folke/trouble.nvim", + enabled = false, + }, + -- { + -- "folke/todo-comments.nvim", + -- enabled = false, + -- }, + { + "windwp/nvim-spectre", + enabled = false, + }, + { + "ggandor/flit.nvim", + enabled = false, + }, + -- { + -- "rafamadriz/friendly-snippets", + -- enabled = false, + -- }, + { + "folke/noice.nvim", + enabled = false, + opts = { + cmdline = { + view = "cmdline", + }, + }, + }, + { + "echasnovski/mini.pairs", + enabled = false, + }, + { + "echasnovski/mini.indentscope", + opts = { + draw = { + animation = require("mini.indentscope").gen_animation.none(), + }, + }, + }, + -- { + -- "hrsh7th/nvim-cmp", + -- opts = function(_, opts) + -- local cmp = require("cmp") + -- opts.sources = cmp.config.sources({ + -- { name = "nvim_lsp" }, + -- -- { name = "luasnip" }, + -- }) + -- return opts + -- end, + -- }, + { + "nvim-treesitter/nvim-treesitter-context", + depends = { + { "nvim-treesitter/nvim-treesitter" }, + }, + main = "treesitter-context", + }, + { + "nvim-telescope/telescope.nvim", + opts = function(opts) + local actions = require("telescope.actions") + opts.defaults = { + mappings = { + i = { + [""] = actions.close, + }, + }, + path_display = { "shorten" }, + pickers = { + buffers = { + mappings = { + i = { + [""] = actions.delete_buffer, + }, + }, + }, + }, + } + return opts + end, + }, +} diff --git a/nvim/stylua.toml b/nvim/stylua.toml new file mode 100644 index 0000000..5d6c50d --- /dev/null +++ b/nvim/stylua.toml @@ -0,0 +1,3 @@ +indent_type = "Spaces" +indent_width = 2 +column_width = 120 \ No newline at end of file