diff --git a/configuration.nix b/configuration.nix index 718b4d2..9718a4b 100644 --- a/configuration.nix +++ b/configuration.nix @@ -64,6 +64,7 @@ inputs: let enable = isMaximal; crates.enable = true; }; + java.enable = isMaximal; ts.enable = isMaximal; svelte.enable = isMaximal; go.enable = isMaximal; diff --git a/docs/release-notes/rl-0.5.adoc b/docs/release-notes/rl-0.5.adoc index 7d7f2a0..9526493 100644 --- a/docs/release-notes/rl-0.5.adoc +++ b/docs/release-notes/rl-0.5.adoc @@ -16,7 +16,9 @@ https://github.com/horriblename[horriblename]: https://github.com/amanse[amanse]: -* Added daily notes options for obsidian plugin.a +* Added daily notes options for obsidian plugin. + +* Added jdt-language-server for Java. https://github.com/yavko[yavko]: diff --git a/lib/lua.nix b/lib/lua.nix index 1d4cdb9..c5c2ae5 100644 --- a/lib/lua.nix +++ b/lib/lua.nix @@ -13,7 +13,6 @@ else "'${value}'"; # convert an expression to lua - expToLua = exp: if builtins.isList exp then listToLuaTable exp # if list, convert to lua table diff --git a/modules/debugger/nvim-dap/nvim-dap.nix b/modules/debugger/nvim-dap/nvim-dap.nix index b0fcb5e..8348d05 100644 --- a/modules/debugger/nvim-dap/nvim-dap.nix +++ b/modules/debugger/nvim-dap/nvim-dap.nix @@ -15,7 +15,7 @@ with lib; { sources = mkOption { default = {}; description = "List of debuggers to install"; - type = with types; attrsOf string; + type = with types; attrsOf str; }; mappings = { diff --git a/modules/languages/default.nix b/modules/languages/default.nix index 9a5135e..2011971 100644 --- a/modules/languages/default.nix +++ b/modules/languages/default.nix @@ -23,6 +23,7 @@ in { ./zig.nix ./html.nix ./svelte.nix + ./java.nix ]; options.vim.languages = { diff --git a/modules/languages/java.nix b/modules/languages/java.nix new file mode 100644 index 0000000..1792824 --- /dev/null +++ b/modules/languages/java.nix @@ -0,0 +1,45 @@ +{ + pkgs, + config, + lib, + ... +}: +with lib; +with builtins; let + cfg = config.vim.languages.java; +in { + options.vim.languages.java = { + enable = mkEnableOption "Java language support"; + + treesitter = { + enable = mkEnableOption "Enable Java treesitter" // {default = config.vim.languages.enableTreesitter;}; + package = nvim.types.mkGrammarOption pkgs "java"; + }; + + lsp = { + enable = mkEnableOption "Java LSP support (java-language-server)" // {default = config.vim.languages.enableLSP;}; + + package = mkOption { + description = "java language server"; + type = types.package; + default = pkgs.jdt-language-server; + }; + }; + }; + + config = mkIf cfg.enable (mkMerge [ + (mkIf cfg.lsp.enable { + vim.lsp.lspconfig.enable = true; + vim.lsp.lspconfig.sources.jdtls = '' + lspconfig.jdtls.setup { + cmd = {"${cfg.lsp.package}/bin/jdt-language-server", "-data", vim.fn.stdpath("cache").."/jdtls/workspace"}, + } + ''; + }) + + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + vim.treesitter.grammars = [cfg.treesitter.package]; + }) + ]); +} diff --git a/modules/languages/nix.nix b/modules/languages/nix.nix index 26f9285..5ee616c 100644 --- a/modules/languages/nix.nix +++ b/modules/languages/nix.nix @@ -56,9 +56,9 @@ with builtins; let command = {"${cfg.format.package}/bin/nixpkgs-fmt"}, }, ''} - ''} }, - }; + }, + ''} } ''; }; diff --git a/modules/notes/orgmode/config.nix b/modules/notes/orgmode/config.nix index 355610d..1dadb50 100644 --- a/modules/notes/orgmode/config.nix +++ b/modules/notes/orgmode/config.nix @@ -7,33 +7,40 @@ with lib; with builtins; let cfg = config.vim.notes.orgmode; in { - config = mkIf (cfg.enable) { - vim.startPlugins = [ - "orgmode-nvim" - ]; + config = mkIf cfg.enable (mkMerge [ + { + vim.startPlugins = [ + "orgmode-nvim" + ]; - vim.luaConfigRC.orgmode = nvim.dag.entryAnywhere '' - -- Load custom treesitter grammar for org filetype - require('orgmode').setup_ts_grammar() + vim.luaConfigRC.orgmode = nvim.dag.entryAnywhere '' + -- Load custom treesitter grammar for org filetype + require('orgmode').setup_ts_grammar() - -- Treesitter configuration - require('nvim-treesitter.configs').setup { + -- Treesitter configuration + require('nvim-treesitter.configs').setup { - -- If TS highlights are not enabled at all, or disabled via `disable` prop, - -- highlighting will fallback to default Vim syntax highlighting - highlight = { - enable = true, - -- Required for spellcheck, some LaTex highlights and - -- code block highlights that do not have ts grammar - additional_vim_regex_highlighting = {'org'}, - }, - ensure_installed = {'org'}, -- Or run :TSUpdate org - } + -- If TS highlights are not enabled at all, or disabled via `disable` prop, + -- highlighting will fallback to default Vim syntax highlighting + highlight = { + enable = true, + -- Required for spellcheck, some LaTex highlights and + -- code block highlights that do not have ts grammar + additional_vim_regex_highlighting = {'org'}, + }, + } - require('orgmode').setup({ - org_agenda_files = ${cfg.orgAgendaFiles}, - org_default_notes_file = '${cfg.orgDefaultNotesFile}', - }) - ''; - }; + require('orgmode').setup({ + org_agenda_files = ${cfg.orgAgendaFiles}, + org_default_notes_file = '${cfg.orgDefaultNotesFile}', + }) + ''; + } + + (mkIf cfg.treesitter.enable { + vim.treesitter.enable = true; + + vim.treesitter.grammars = [cfg.treesitter.orgPackage]; + }) + ]); } diff --git a/modules/notes/orgmode/orgmode.nix b/modules/notes/orgmode/orgmode.nix index 3ba9e30..fee0c4b 100644 --- a/modules/notes/orgmode/orgmode.nix +++ b/modules/notes/orgmode/orgmode.nix @@ -1,21 +1,30 @@ { config, lib, + pkgs, ... }: with lib; with builtins; { options.vim.notes.orgmode = { enable = mkEnableOption "nvim-orgmode: Neovim plugin for Emac Orgmode. Get the best of both worlds"; + orgAgendaFiles = mkOption { type = types.str; default = "{'~/Documents/org/*', '~/my-orgs/**/*'}"; description = "List of org files to be used as agenda files."; }; + orgDefaultNotesFile = mkOption { type = types.str; default = "~/Documents/org/refile.org"; description = "Default org file to be used for notes."; }; + + treesitter = { + enable = mkEnableOption "Enable Orgmode treesitter" // {default = config.vim.languages.enableTreesitter;}; + + orgPackage = nvim.types.mkGrammarOption pkgs "org"; + }; }; } diff --git a/modules/theme/supported_themes.nix b/modules/theme/supported_themes.nix index 1d36628..d9459f1 100644 --- a/modules/theme/supported_themes.nix +++ b/modules/theme/supported_themes.nix @@ -27,8 +27,13 @@ }; dracula = { - setup = '' - require('dracula').setup({}); + setup = { + style ? null, + transparent, + }: '' + require('dracula').setup({ + transparent_bg = ${lib.boolToString transparent}, + }); require('dracula').load(); ''; }; diff --git a/modules/ui/breadcrumbs/config.nix b/modules/ui/breadcrumbs/config.nix index 18e84f0..0d988ca 100644 --- a/modules/ui/breadcrumbs/config.nix +++ b/modules/ui/breadcrumbs/config.nix @@ -3,161 +3,165 @@ lib, ... }: -with lib; with builtins; let + inherit (lib) optionalString boolToString mkIf optionals; + inherit (lib.nvim.lua) nullString; + cfg = config.vim.ui.breadcrumbs; nb = cfg.navbuddy; - - nilOrStr = v: - if v == null - then "nil" - else toString v; in { config = mkIf cfg.enable { vim.startPlugins = [ "nvim-lspconfig" ] - ++ lib.optionals (config.vim.lsp.lspsaga.enable && cfg.source == "lspsaga") [ + ++ optionals (cfg.source == "nvim-navic") [ + "nvim-navic" + ] + ++ optionals (config.vim.lsp.lspsaga.enable && cfg.source == "lspsaga") [ "lspsaga" ] - ++ lib.optionals (cfg.navbuddy.enable || cfg.source == "nvim-navic") [ + ++ optionals cfg.navbuddy.enable [ "nvim-navbuddy" + "nui-nvim" "nvim-navic" ]; - vim.luaConfigRC.breadcrumbs = nvim.dag.entryAfter ["lspconfig"] '' - local navbuddy = require("nvim-navbuddy") - local navic = require("nvim-navic") - local actions = require("nvim-navbuddy.actions") + vim.luaConfigRC.breadcrumbs = lib.nvim.dag.entryAfter ["lspconfig"] '' - require("nvim-navic").setup { - highlight = true - } - - -- TODO: wrap this in an optional string with navbuddy as the enable condition - navbuddy.setup { - window = { - border = "${nb.window.border}", -- "rounded", "double", "solid", "none" - size = "60%", - position = "50%", - scrolloff = ${(nilOrStr nb.window.scrolloff)}, - sections = { - left = { - size = "20%", - border = ${(nilOrStr nb.window.sections.left.border)}, - }, - - mid = { - size = "40%", - border = ${(nilOrStr nb.window.sections.mid.border)}, - }, - - right = { - border = ${(nilOrStr nb.window.sections.right.border)}, - preview = "leaf", - } - }, - }, - node_markers = { - enabled = ${boolToString nb.nodeMarkers.enable}, - icons = { - leaf = "${nb.nodeMarkers.icons.leaf}", - leaf_selected = "${nb.nodeMarkers.icons.leafSelected}", - branch = "${nb.nodeMarkers.icons.branch}", - }, - }, - - lsp = { - auto_attach = ${boolToString nb.lsp.autoAttach}, - -- preference = nil, -- TODO: convert list to lua table if not null - }, - - source_buffer = { - follow_node = ${boolToString nb.sourceBuffer.followNode}, - highlight = ${boolToString nb.sourceBuffer.highlight}, - reorient = "${nb.sourceBuffer.reorient}", - scrolloff = ${nilOrStr nb.sourceBuffer.scrolloff} - }, - - icons = { - File = "${cfg.navbuddy.icons.file}", - Module = "${cfg.navbuddy.icons.module}", - Namespace = "${cfg.navbuddy.icons.namespace}", - Package = "${cfg.navbuddy.icons.package}", - Class = "${cfg.navbuddy.icons.class}", - Method = "${cfg.navbuddy.icons.method}", - Property = "${cfg.navbuddy.icons.property}", - Field = "${cfg.navbuddy.icons.field}", - Constructor = "${cfg.navbuddy.icons.constructor}", - Enum = "${cfg.navbuddy.icons.enum}", - Interface = "${cfg.navbuddy.icons.interface}", - Function = "${cfg.navbuddy.icons.function}", - Variable = "${cfg.navbuddy.icons.variable}", - Constant = "${cfg.navbuddy.icons.constant}", - String = "${cfg.navbuddy.icons.string}", - Number = "${cfg.navbuddy.icons.number}", - Boolean = "${cfg.navbuddy.icons.boolean}", - Array = "${cfg.navbuddy.icons.array}", - Object = "${cfg.navbuddy.icons.object}", - Key = "${cfg.navbuddy.icons.key}", - Null = "${cfg.navbuddy.icons.null}", - EnumMember = "${cfg.navbuddy.icons.enumMember}", - Struct = "${cfg.navbuddy.icons.struct}", - Event = "${cfg.navbuddy.icons.event}", - Operator = "${cfg.navbuddy.icons.operator}", - TypeParameter = "${cfg.navbuddy.icons.typeParameter}" - }, - - -- make those configurable - use_default_mappings = ${toString (cfg.navbuddy.useDefaultMappings)}, - mappings = { - ["${cfg.navbuddy.mappings.close}"] = actions.close(), - ["${cfg.navbuddy.mappings.nextSibling}"] = actions.next_sibling(), - ["${cfg.navbuddy.mappings.previousSibling}"] = actions.previous_sibling(), - ["${cfg.navbuddy.mappings.close}"] = actions.parent(), - ["${cfg.navbuddy.mappings.children}"] = actions.children(), - ["${cfg.navbuddy.mappings.root}"] = actions.root(), - - ["${cfg.navbuddy.mappings.visualName}"] = actions.visual_name(), - ["${cfg.navbuddy.mappings.visualScope}"] = actions.visual_scope(), - - ["${cfg.navbuddy.mappings.yankName}"] = actions.yank_name(), - ["${cfg.navbuddy.mappings.yankScope}"] = actions.yank_scope(), - - ["${cfg.navbuddy.mappings.insertName}"] = actions.insert_name(), - ["${cfg.navbuddy.mappings.insertScope}"] = actions.insert_scope(), - - ["${cfg.navbuddy.mappings.appendName}"] = actions.append_name(), - ["${cfg.navbuddy.mappings.appendScope}"] = actions.append_scope(), - - ["${cfg.navbuddy.mappings.rename}"] = actions.rename(), - - ["${cfg.navbuddy.mappings.delete}"] = actions.delete(), - - ["${cfg.navbuddy.mappings.foldCreate}"] = actions.fold_create(), - ["${cfg.navbuddy.mappings.foldDelete}"] = actions.fold_delete(), - - ["${cfg.navbuddy.mappings.comment}"] = actions.comment(), - - ["${cfg.navbuddy.mappings.select}"] = actions.select(), - - ["${cfg.navbuddy.mappings.moveDown}"] = actions.move_down(), - ["${cfg.navbuddy.mappings.moveUp}"] = actions.move_up(), - - ["${cfg.navbuddy.mappings.telescope}"] = actions.telescope({ - layout_strategy = "horizontal", - layout_config = { - height = 0.60, - width = 0.75, - prompt_position = "top", - preview_width = 0.50 - }, - }), - - ["${cfg.navbuddy.mappings.help}"] = actions.help(), -- Open mappings help window - }, + ${optionalString (cfg.source == "nvim-navic") '' + local navic = require("nvim-navic") + require("nvim-navic").setup { + highlight = true } + ''} + + ${optionalString cfg.navbuddy.enable '' + local navbuddy = require("nvim-navbuddy") + local actions = require("nvim-navbuddy.actions") + navbuddy.setup { + window = { + border = "${nb.window.border}", -- "rounded", "double", "solid", "none" + size = "60%", + position = "50%", + scrolloff = ${(nullString nb.window.scrolloff)}, + sections = { + left = { + size = "20%", + border = ${(nullString nb.window.sections.left.border)}, + }, + + mid = { + size = "40%", + border = ${(nullString nb.window.sections.mid.border)}, + }, + + right = { + border = ${(nullString nb.window.sections.right.border)}, + preview = "leaf", + } + }, + }, + node_markers = { + enabled = ${boolToString nb.nodeMarkers.enable}, + icons = { + leaf = "${nb.nodeMarkers.icons.leaf}", + leaf_selected = "${nb.nodeMarkers.icons.leafSelected}", + branch = "${nb.nodeMarkers.icons.branch}", + }, + }, + + lsp = { + auto_attach = ${boolToString nb.lsp.autoAttach}, + -- preference = nil, -- TODO: convert list to lua table if not null + }, + + source_buffer = { + follow_node = ${boolToString nb.sourceBuffer.followNode}, + highlight = ${boolToString nb.sourceBuffer.highlight}, + reorient = "${nb.sourceBuffer.reorient}", + scrolloff = ${nullString nb.sourceBuffer.scrolloff} + }, + + icons = { + File = "${cfg.navbuddy.icons.file}", + Module = "${cfg.navbuddy.icons.module}", + Namespace = "${cfg.navbuddy.icons.namespace}", + Package = "${cfg.navbuddy.icons.package}", + Class = "${cfg.navbuddy.icons.class}", + Method = "${cfg.navbuddy.icons.method}", + Property = "${cfg.navbuddy.icons.property}", + Field = "${cfg.navbuddy.icons.field}", + Constructor = "${cfg.navbuddy.icons.constructor}", + Enum = "${cfg.navbuddy.icons.enum}", + Interface = "${cfg.navbuddy.icons.interface}", + Function = "${cfg.navbuddy.icons.function}", + Variable = "${cfg.navbuddy.icons.variable}", + Constant = "${cfg.navbuddy.icons.constant}", + String = "${cfg.navbuddy.icons.string}", + Number = "${cfg.navbuddy.icons.number}", + Boolean = "${cfg.navbuddy.icons.boolean}", + Array = "${cfg.navbuddy.icons.array}", + Object = "${cfg.navbuddy.icons.object}", + Key = "${cfg.navbuddy.icons.key}", + Null = "${cfg.navbuddy.icons.null}", + EnumMember = "${cfg.navbuddy.icons.enumMember}", + Struct = "${cfg.navbuddy.icons.struct}", + Event = "${cfg.navbuddy.icons.event}", + Operator = "${cfg.navbuddy.icons.operator}", + TypeParameter = "${cfg.navbuddy.icons.typeParameter}" + }, + + -- make those configurable + use_default_mappings = ${boolToString cfg.navbuddy.useDefaultMappings}, + mappings = { + ["${cfg.navbuddy.mappings.close}"] = actions.close(), + ["${cfg.navbuddy.mappings.nextSibling}"] = actions.next_sibling(), + ["${cfg.navbuddy.mappings.previousSibling}"] = actions.previous_sibling(), + ["${cfg.navbuddy.mappings.close}"] = actions.parent(), + ["${cfg.navbuddy.mappings.children}"] = actions.children(), + ["${cfg.navbuddy.mappings.root}"] = actions.root(), + + ["${cfg.navbuddy.mappings.visualName}"] = actions.visual_name(), + ["${cfg.navbuddy.mappings.visualScope}"] = actions.visual_scope(), + + ["${cfg.navbuddy.mappings.yankName}"] = actions.yank_name(), + ["${cfg.navbuddy.mappings.yankScope}"] = actions.yank_scope(), + + ["${cfg.navbuddy.mappings.insertName}"] = actions.insert_name(), + ["${cfg.navbuddy.mappings.insertScope}"] = actions.insert_scope(), + + ["${cfg.navbuddy.mappings.appendName}"] = actions.append_name(), + ["${cfg.navbuddy.mappings.appendScope}"] = actions.append_scope(), + + ["${cfg.navbuddy.mappings.rename}"] = actions.rename(), + + ["${cfg.navbuddy.mappings.delete}"] = actions.delete(), + + ["${cfg.navbuddy.mappings.foldCreate}"] = actions.fold_create(), + ["${cfg.navbuddy.mappings.foldDelete}"] = actions.fold_delete(), + + ["${cfg.navbuddy.mappings.comment}"] = actions.comment(), + + ["${cfg.navbuddy.mappings.select}"] = actions.select(), + + ["${cfg.navbuddy.mappings.moveDown}"] = actions.move_down(), + ["${cfg.navbuddy.mappings.moveUp}"] = actions.move_up(), + + ["${cfg.navbuddy.mappings.telescope}"] = actions.telescope({ + layout_strategy = "horizontal", + layout_config = { + height = 0.60, + width = 0.75, + prompt_position = "top", + preview_width = 0.50 + }, + }), + + ["${cfg.navbuddy.mappings.help}"] = actions.help(), -- Open mappings help window + }, + } + ''} ''; }; }