From e1b8e670c99b16e9d3639bb036343b175a6b34d4 Mon Sep 17 00:00:00 2001 From: Jordan Holt Date: Sat, 7 Jan 2023 18:58:10 +0000 Subject: [PATCH] Add development runtimes --- hosts/atlas/default.nix | 3 ++ modules/default.nix | 6 +++ modules/dev/java.nix | 16 ++++++ modules/dev/lua.nix | 16 ++++++ modules/dev/node.nix | 16 ++++++ modules/dev/python.nix | 16 ++++++ modules/dev/rust.nix | 19 +++++++ modules/dev/zig.nix | 16 ++++++ modules/editors/neovim/default.nix | 52 +++++++++++++++++-- modules/editors/neovim/init.lua | 2 + modules/editors/neovim/lua/config/lsp.lua | 32 ------------ .../editors/neovim/lua/config/lsp/java.lua | 6 +++ modules/editors/neovim/lua/config/lsp/lua.lua | 22 ++++++++ .../editors/neovim/lua/config/lsp/node.lua | 17 ++++++ .../editors/neovim/lua/config/lsp/python.lua | 6 +++ .../editors/neovim/lua/config/lsp/rust.lua | 5 ++ modules/editors/neovim/lua/config/lsp/zig.lua | 5 ++ modules/editors/neovim/lua/config/plugins.lua | 24 +++------ 18 files changed, 228 insertions(+), 51 deletions(-) create mode 100644 modules/dev/java.nix create mode 100644 modules/dev/lua.nix create mode 100644 modules/dev/node.nix create mode 100644 modules/dev/python.nix create mode 100644 modules/dev/rust.nix create mode 100644 modules/dev/zig.nix delete mode 100644 modules/editors/neovim/lua/config/lsp.lua create mode 100644 modules/editors/neovim/lua/config/lsp/java.lua create mode 100644 modules/editors/neovim/lua/config/lsp/lua.lua create mode 100644 modules/editors/neovim/lua/config/lsp/node.lua create mode 100644 modules/editors/neovim/lua/config/lsp/python.lua create mode 100644 modules/editors/neovim/lua/config/lsp/rust.lua create mode 100644 modules/editors/neovim/lua/config/lsp/zig.lua diff --git a/hosts/atlas/default.nix b/hosts/atlas/default.nix index 54cc8fa..a57f1b3 100644 --- a/hosts/atlas/default.nix +++ b/hosts/atlas/default.nix @@ -27,6 +27,9 @@ with lib.my; desktop = { firefox.enable = true; }; + dev = { + node.enable = true; + }; editors = { neovim.enable = true; vscode.enable = true; diff --git a/modules/default.nix b/modules/default.nix index 8cd0f94..b6f6848 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -3,6 +3,12 @@ ./options.nix ./desktop/firefox.nix ./desktop/gnome.nix + ./dev/java.nix + ./dev/lua.nix + ./dev/node.nix + ./dev/python.nix + ./dev/rust.nix + ./dev/zig.nix ./editors/neovim ./editors/vscode.nix ./security/gpg.nix diff --git a/modules/dev/java.nix b/modules/dev/java.nix new file mode 100644 index 0000000..1ec11a7 --- /dev/null +++ b/modules/dev/java.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: + +with lib; +with lib.my; +let cfg = config.modules.dev.java; +in { + options.modules.dev.java = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + user.packages = with pkgs; [ + jdk + ]; + }; +} \ No newline at end of file diff --git a/modules/dev/lua.nix b/modules/dev/lua.nix new file mode 100644 index 0000000..db7f5d0 --- /dev/null +++ b/modules/dev/lua.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: + +with lib; +with lib.my; +let cfg = config.modules.dev.lua; +in { + options.modules.dev.lua = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + user.packages = with pkgs; [ + lua + ]; + }; +} \ No newline at end of file diff --git a/modules/dev/node.nix b/modules/dev/node.nix new file mode 100644 index 0000000..42ad34d --- /dev/null +++ b/modules/dev/node.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: + +with lib; +with lib.my; +let cfg = config.modules.dev.node; +in { + options.modules.dev.node = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + user.packages = with pkgs; [ + nodejs_latest + ]; + }; +} \ No newline at end of file diff --git a/modules/dev/python.nix b/modules/dev/python.nix new file mode 100644 index 0000000..5ba84b0 --- /dev/null +++ b/modules/dev/python.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: + +with lib; +with lib.my; +let cfg = config.modules.dev.python; +in { + options.modules.dev.python = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + user.packages = with pkgs; [ + python310 + ]; + }; +} \ No newline at end of file diff --git a/modules/dev/rust.nix b/modules/dev/rust.nix new file mode 100644 index 0000000..556eb35 --- /dev/null +++ b/modules/dev/rust.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: + +with lib; +with lib.my; +let cfg = config.modules.dev.rust; +in { + options.modules.dev.rust = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + user.packages = with pkgs; [ + rustc + rustup + rustfmt + rust-bindgen + ]; + }; +} \ No newline at end of file diff --git a/modules/dev/zig.nix b/modules/dev/zig.nix new file mode 100644 index 0000000..eaef914 --- /dev/null +++ b/modules/dev/zig.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ... }: + +with lib; +with lib.my; +let cfg = config.modules.dev.zig; +in { + options.modules.dev.zig = { + enable = mkBoolOpt false; + }; + + config = mkIf cfg.enable { + user.packages = with pkgs; [ + zig + ]; + }; +} \ No newline at end of file diff --git a/modules/editors/neovim/default.nix b/modules/editors/neovim/default.nix index 5dcc41a..459eb13 100644 --- a/modules/editors/neovim/default.nix +++ b/modules/editors/neovim/default.nix @@ -2,7 +2,9 @@ with lib; with lib.my; -let cfg = config.modules.editors.neovim; +let + cfg = config.modules.editors.neovim; + dev = config.modules.dev; in { options.modules.editors.neovim = { enable = mkBoolOpt false; @@ -12,6 +14,9 @@ in { user.packages = with pkgs; [ (neovim.override { configure = { + customRC = '' + luafile ~/.config/nvim/init.lua + ''; packages.myPlugins = with pkgs.vimPlugins; { start = [ (nvim-treesitter.withPlugins ( @@ -57,15 +62,56 @@ in { zig ] )) + nvim-lspconfig ]; }; }; }) - ]; + ] ++ + + # Install appropriate language servers + (if dev.java.enable then [ + java-language-server # Java + ltex-ls # LaTeX + ] else []) ++ + (if dev.lua.enable then [ + sumneko-lua-language-server # Lua + ] else []) ++ + (if dev.node.enable then [ + nodePackages.bash-language-server # Bash + nodePackages.dockerfile-language-server-nodejs # Dockerfile + nodePackages.graphql-language-service-cli # GraphQL + nodePackages.purescript-language-server # PureScript + nodePackages.svelte-language-server # Svelte + nodePackages.typescript-language-server # JavaScript/TypeScript + nodePackages.vim-language-server # Vim + nodePackages.vscode-langservers-extracted # HTML, CSS, JSON, ESLint + nodePackages.vue-language-server # Vue.js + nodePackages.yaml-language-server # YAML + ] else []) ++ + (if dev.python.enable then [ + cmake-language-server # CMake + python310Packages.python-lsp-server # Python + ] else []) ++ + (if dev.rust.enable then [ + rust-analyzer # Rust + ] else []) ++ + (if dev.zig.enable then [ + zls # Zig + ] else []); home.configFile = { - "nvim/init.lua" = { source = ./init.lua; }; + "nvim/init.lua".source = ./init.lua; "nvim/lua" = { source = ./lua; recursive = true; }; + "nvim/lua/config/lsp.lua".text = '' + -- This file is autogenerated, do not edit. + ${if dev.java.enable then "require('config.lsp.java')\n" else ""} + ${if dev.lua.enable then "require('config.lsp.lua')\n" else ""} + ${if dev.node.enable then "require('config.lsp.node')\n" else ""} + ${if dev.python.enable then "require('config.lsp.python')\n" else ""} + ${if dev.rust.enable then "require('config.lsp.rust')\n" else ""} + ${if dev.zig.enable then "require('config.lsp.zig')\n" else ""} + ''; }; env.EDITOR = "nvim"; diff --git a/modules/editors/neovim/init.lua b/modules/editors/neovim/init.lua index 1d3ad80..fe172e6 100644 --- a/modules/editors/neovim/init.lua +++ b/modules/editors/neovim/init.lua @@ -1,4 +1,6 @@ require("config.core") require("config.keymap") +require("config.treesitter") require("config.plugins") +require("config.lsp") diff --git a/modules/editors/neovim/lua/config/lsp.lua b/modules/editors/neovim/lua/config/lsp.lua deleted file mode 100644 index 2f2a6c8..0000000 --- a/modules/editors/neovim/lua/config/lsp.lua +++ /dev/null @@ -1,32 +0,0 @@ -require("nvim-lsp-installer").setup({ - ensure_installed = { - "bashls", - "cmake", - "cssls", - "dockerls", - "eslint", - "graphql", - "html", - "jsonls", - "tsserver", - "ltex", - "sumneko_lua", - "marksman", - "pylsp", - "rust_analyzer", - "stylelint_lsp", - "vimls", - "lemminx", - "yamlls", - "zls", - }, - ui = { - check_outdated_servers_on_open = false, - icons = { - server_installed = "", - server_pending = "", - server_uninstalled = "", - }, - }, -}) - diff --git a/modules/editors/neovim/lua/config/lsp/java.lua b/modules/editors/neovim/lua/config/lsp/java.lua new file mode 100644 index 0000000..2d5c17b --- /dev/null +++ b/modules/editors/neovim/lua/config/lsp/java.lua @@ -0,0 +1,6 @@ +lspconfig = require('lspconfig') + +-- Requires Java +lspconfig.java_language_server.setup{} +lspconfig.ltex.setup{} + diff --git a/modules/editors/neovim/lua/config/lsp/lua.lua b/modules/editors/neovim/lua/config/lsp/lua.lua new file mode 100644 index 0000000..71bef6e --- /dev/null +++ b/modules/editors/neovim/lua/config/lsp/lua.lua @@ -0,0 +1,22 @@ +lspconfig = require('lspconfig') + +-- Requires Lua +lspconfig.sumneko_lua.setup { + settings = { + Lua = { + runtime = { + -- Tell the language server which version of Lua you're using (most likely LuaJIT in the case of Neovim) + version = 'LuaJIT', + }, + diagnostics = { + -- Get the language server to recognize the `vim` global + globals = {'vim'}, + }, + -- Do not send telemetry data containing a randomized but unique identifier + telemetry = { + enable = false, + }, + }, + }, +} + diff --git a/modules/editors/neovim/lua/config/lsp/node.lua b/modules/editors/neovim/lua/config/lsp/node.lua new file mode 100644 index 0000000..5d46bbe --- /dev/null +++ b/modules/editors/neovim/lua/config/lsp/node.lua @@ -0,0 +1,17 @@ +lspconfig = require('lspconfig') + +-- Requires Node.js +lspconfig.bashls.setup{} +lspconfig.cssls.setup{} +lspconfig.dockerls.setup{} +lspconfig.eslint.setup{} +lspconfig.graphql.setup{} +lspconfig.html.setup{} +lspconfig.jsonls.setup{} +lspconfig.purescriptls.setup{} +lspconfig.svelte.setup{} +lspconfig.tsserver.setup{} +lspconfig.vimls.setup{} +lspconfig.vuels.setup{} +lspconfig.yamlls.setup{} + diff --git a/modules/editors/neovim/lua/config/lsp/python.lua b/modules/editors/neovim/lua/config/lsp/python.lua new file mode 100644 index 0000000..dce7699 --- /dev/null +++ b/modules/editors/neovim/lua/config/lsp/python.lua @@ -0,0 +1,6 @@ +lspconfig = require('lspconfig') + +-- Requires Python +lspconfig.cmake.setup{} +lspconfig.pylsp.setup{} + diff --git a/modules/editors/neovim/lua/config/lsp/rust.lua b/modules/editors/neovim/lua/config/lsp/rust.lua new file mode 100644 index 0000000..bedf56a --- /dev/null +++ b/modules/editors/neovim/lua/config/lsp/rust.lua @@ -0,0 +1,5 @@ +lspconfig = require('lspconfig') + +-- Requires Rust +lspconfig.rls.setup{} + diff --git a/modules/editors/neovim/lua/config/lsp/zig.lua b/modules/editors/neovim/lua/config/lsp/zig.lua new file mode 100644 index 0000000..d55155f --- /dev/null +++ b/modules/editors/neovim/lua/config/lsp/zig.lua @@ -0,0 +1,5 @@ +lspconfig = require('lspconfig') + +-- Requires Zig +lspconfig.zls.setup{} + diff --git a/modules/editors/neovim/lua/config/plugins.lua b/modules/editors/neovim/lua/config/plugins.lua index f710e6a..d067503 100644 --- a/modules/editors/neovim/lua/config/plugins.lua +++ b/modules/editors/neovim/lua/config/plugins.lua @@ -39,31 +39,25 @@ return packer.startup(function(use) use { "wbthomason/packer.nvim", opt = true } use { "mbbill/undotree" } use { "nvim-lua/plenary.nvim" } - use { - "nvim-treesitter/nvim-treesitter", - event = "BufEnter", - run = ":TSUpdate", - config = [[require('config.treesitter')]] - } use { "tpope/vim-fugitive", event = "User InGitRepo" } -- Editing - use { "andymass/vim-matchup", after = "nvim-treesitter" } + use { "andymass/vim-matchup" } use { "godlygeek/tabular" } - use { "JoosepAlviste/nvim-ts-context-commentstring", after = "nvim-treesitter" } + use { "JoosepAlviste/nvim-ts-context-commentstring" } use { "kana/vim-textobj-user" } use { "mg979/vim-visual-multi", branch = "master" } - use { "nvim-treesitter/nvim-treesitter-context", after = "nvim-treesitter" } - use { "nvim-treesitter/nvim-treesitter-textobjects", after = "nvim-treesitter" } - use { "p00f/nvim-ts-rainbow", after = "nvim-treesitter" } + use { "nvim-treesitter/nvim-treesitter-context" } + use { "nvim-treesitter/nvim-treesitter-textobjects" } + use { "p00f/nvim-ts-rainbow" } use { "terryma/vim-expand-region" } use { "tommcdo/vim-exchange", event = "VimEnter" } use { "tpope/vim-abolish" } use { "tpope/vim-commentary", event = "VimEnter" } use { "tpope/vim-repeat", event = "VimEnter" } use { "tpope/vim-surround", event = "VimEnter" } - use { "windwp/nvim-autopairs", after = "nvim-treesitter" } - use { "windwp/nvim-ts-autotag", after = "nvim-treesitter" } + use { "windwp/nvim-autopairs" } + use { "windwp/nvim-ts-autotag" } -- UI use { "junegunn/goyo.vim" } @@ -71,13 +65,11 @@ return packer.startup(function(use) use { "markonm/traces.vim" } -- Searching - use { "nvim-telescope/telescope.nvim", after = "nvim-treesitter", config = [[require('config.telescope')]] } + use { "nvim-telescope/telescope.nvim", config = [[require('config.telescope')]] } use { "cljoly/telescope-repo.nvim", requires = "telescope.nvim" } use { "dyng/ctrlsf.vim" } -- LSP - use { "neovim/nvim-lspconfig" } - use { "williamboman/nvim-lsp-installer", config = [[require('config.lsp')]] } use { "jose-elias-alvarez/null-ls.nvim" } if PACKER_BOOTSTRAP then