Compare commits

..

18 commits

Author SHA1 Message Date
raf
6c0f1bb8fb
Merge 2bfedb14dc into 9d0247c599 2024-05-18 12:53:49 +02:00
9d0247c599
statusline/lualine: add a left separator to the searchcount component 2024-05-17 19:10:58 +03:00
f0f2c08e9f
lsp/null-ls: use string type for diagnostic format 2024-05-16 19:35:19 +03:00
cfbed8ceb1
modules/wrapper: remove redundant instances of literalExpression 2024-05-16 19:13:44 +03:00
1ce25d7ca3
modules: reorder args 2024-05-16 19:11:39 +03:00
eefc7a9d1d
lsp/null-lsp: allow null-ls options to be configured
This should probably still be converted to setupOpts. Missing docs
2024-05-16 19:11:37 +03:00
74c94b8a54
flake: fix recursive module alias 2024-05-16 19:11:36 +03:00
raf
74df3a5f03
Merge pull request #292 from jacekpoz/main
languages/ocaml: init
2024-05-16 13:32:44 +00:00
jacekpoz
7224c1e6af
languages/ocaml: add ocaml to maximal config 2024-05-16 14:39:43 +02:00
jacekpoz
f343ab8b3a
languages/ocaml: add formatter to nvf's env 2024-05-16 14:25:23 +02:00
jacekpoz
208d1e6741
languages/ocaml: follow other languages' format 2024-05-16 14:25:07 +02:00
493854e44f
lualine: improve consistency between components; add more diagnostic sources 2024-05-16 07:45:15 +03:00
jacekpoz
cc0aba4e21
languages/ocaml: add formatting support 2024-05-15 21:09:46 +02:00
jacekpoz
db810bbf9f
languages/ocaml: init 2024-05-15 20:40:15 +02:00
raf
1fd4a2a1b8
Merge pull request #291 from NotAShelf/lualine-refactor
lualine: increase theme compatibility; fix component definitions
2024-05-15 15:38:15 +00:00
7cafa56cdb
docs: update 0.7 release notes 2024-05-15 13:09:46 +03:00
b5f38b8e5e
lualine: increase theme compatibility; fix component definitions 2024-05-15 13:09:45 +03:00
355d4830e5
flake: update inputs 2024-05-15 13:09:19 +03:00
13 changed files with 339 additions and 200 deletions

View file

@ -73,6 +73,7 @@ inputs: let
go.enable = isMaximal; go.enable = isMaximal;
elixir.enable = isMaximal; elixir.enable = isMaximal;
zig.enable = isMaximal; zig.enable = isMaximal;
ocaml.enable = isMaximal;
python.enable = isMaximal; python.enable = isMaximal;
dart.enable = isMaximal; dart.enable = isMaximal;
bash.enable = isMaximal; bash.enable = isMaximal;

View file

@ -35,3 +35,10 @@ Release notes for release 0.7
to nixpkgs. A pull request is currently open. to nixpkgs. A pull request is currently open.
- Remove vim-tidal and friends - Remove vim-tidal and friends
- Cleaned up Lualine module to reduce theme dependency on Catppuccin, and fixed
blending issues in component separators.
[jacekpoz](https://github.com/jacekpoz):
- Added [ocaml-lsp](https://github.com/ocaml/ocaml-lsp) support.

View file

@ -134,11 +134,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1715087517, "lastModified": 1715534503,
"narHash": "sha256-CLU5Tsg24Ke4+7sH8azHWXKd0CFd4mhLWfhYgUiDBpQ=", "narHash": "sha256-5ZSVkFadZbFP1THataCaSf0JH2cAH3S29hU9rrxTEqk=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b211b392b8486ee79df6cdfb1157ad2133427a29", "rev": "2057814051972fa1453ddfb0d98badbea9b83c06",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -387,11 +387,11 @@
"plugin-cmp-treesitter": { "plugin-cmp-treesitter": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1702163214, "lastModified": 1715596479,
"narHash": "sha256-K7F9iqmB13ONenwsbaND8F4010MvHQXp7DxMFfcsZ4A=", "narHash": "sha256-8WAk9S+/7vSz7bVHdEzjbKUokU144fvnByIeJ1gAWhU=",
"owner": "ray-x", "owner": "ray-x",
"repo": "cmp-treesitter", "repo": "cmp-treesitter",
"rev": "13e4ef8f4dd5639fca2eb9150e68f47639a9b37d", "rev": "958fcfa0d8ce46d215e19cc3992c542f576c4123",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -483,11 +483,11 @@
"plugin-crates-nvim": { "plugin-crates-nvim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1715069896, "lastModified": 1715690194,
"narHash": "sha256-AhjnPo3SM7o7foj5ppv0CW+jfJe6ACerq4YFgJfY3/8=", "narHash": "sha256-R1y1OIep4tcFd4mhylZ/A2zdwOmEQtCzuVBOBYu0qUI=",
"owner": "Saecki", "owner": "Saecki",
"repo": "crates.nvim", "repo": "crates.nvim",
"rev": "7d8541ec0e3b30ac2c43864d3ee13a632e1231ed", "rev": "d556c00d60c9421c913ee54ff690df2a34f6264e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -611,11 +611,11 @@
"plugin-gesture-nvim": { "plugin-gesture-nvim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1715081943, "lastModified": 1715211052,
"narHash": "sha256-h6alx5TjskXYQ3H9fFfC4QyxsGbpjQkoZFVvLi1sgFI=", "narHash": "sha256-vRXQBoKhmYid1M1d4OI/PolwQIwMn1x7EgxeW6Dzj0o=",
"owner": "notomo", "owner": "notomo",
"repo": "gesture.nvim", "repo": "gesture.nvim",
"rev": "591b350bfc87932a748f4838ad724eea6fb073e0", "rev": "9b3d6361b37628f8869cd237416a1674103c0dc1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -723,11 +723,11 @@
"plugin-image-nvim": { "plugin-image-nvim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714464812, "lastModified": 1715712794,
"narHash": "sha256-UfJzROXnjaiF+kIaBYAt5GSL107vT5NrpXj+Gh535Yk=", "narHash": "sha256-7mZ7a9fU/6RxnzUiYxgIsZA2wGXTalfR2cPBp6kLO3Q=",
"owner": "3rd", "owner": "3rd",
"repo": "image.nvim", "repo": "image.nvim",
"rev": "604692f493519128c58893c28273d4247bc71a4d", "rev": "b979fa1194443c97dd8cb6053a4cec163c9048f5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -755,11 +755,11 @@
"plugin-leap-nvim": { "plugin-leap-nvim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714857300, "lastModified": 1715716911,
"narHash": "sha256-RodnRoiQTH/+XoPk30neLiYIptPJnCvL94keIQXjq2g=", "narHash": "sha256-vRL++RVDywO6nP5dHQiO1NSQ17SMmHm4AgjTQfv642o=",
"owner": "ggandor", "owner": "ggandor",
"repo": "leap.nvim", "repo": "leap.nvim",
"rev": "f1f19fc268b406b00b50091f51f16d9634fbe449", "rev": "b1ecfb63c0b8babfd0dcd6b5ca6de37bbf3526cd",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -787,11 +787,11 @@
"plugin-lsp-signature": { "plugin-lsp-signature": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1710647656, "lastModified": 1715342515,
"narHash": "sha256-O7y7pcCvF0xUFamG+wMLe4mC6hUQ679rJV+ZUoWB0oY=", "narHash": "sha256-f4AuZnt2m2VA90baSbZt6+elzjXmJKPFTO28v8auoYc=",
"owner": "ray-x", "owner": "ray-x",
"repo": "lsp_signature.nvim", "repo": "lsp_signature.nvim",
"rev": "c6aeb2f1d2538bbdfdaab1664d9d4c3c75aa9db8", "rev": "aed5d1162b0f07bb3af34bedcc5f70a2b6466ed8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -931,11 +931,11 @@
"plugin-noice-nvim": { "plugin-noice-nvim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714737209, "lastModified": 1715763787,
"narHash": "sha256-jR9tX6AhY+DXPqGXqGqCkG/sL9+mLxpwOqfwjHHN0Ac=", "narHash": "sha256-sn8CiNq9JJXIxB6EEX98XaHhwyBPP7X1zqYMHLgdqd0=",
"owner": "folke", "owner": "folke",
"repo": "noice.nvim", "repo": "noice.nvim",
"rev": "f4decbc7a80229ccc9f86026b74bdcf0c39e38a7", "rev": "61947de3d5904375ea94e0c13db2537488ad9829",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1012,11 +1012,11 @@
"plugin-nvim-cmp": { "plugin-nvim-cmp": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1715160812, "lastModified": 1715507122,
"narHash": "sha256-/zTOFwCSBETBgkILpP8h82ZjN7LiMV0Uk5d2TEnQVU4=", "narHash": "sha256-wyHbTXFqvt3kXo+EaHdrEggMDOnw4enAAf4pA9ZQm2g=",
"owner": "hrsh7th", "owner": "hrsh7th",
"repo": "nvim-cmp", "repo": "nvim-cmp",
"rev": "cd2cf0c124d3de577fb5449746568ee8e601afc8", "rev": "24122371810089d390847d8ba66325c1f1aa64c0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1076,11 +1076,11 @@
"plugin-nvim-dap": { "plugin-nvim-dap": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1713432622, "lastModified": 1715700682,
"narHash": "sha256-kEn2INrNMQSLHY3gpSVV+cTx9f1nFeUCM6by9WGn5Sg=", "narHash": "sha256-Gh1Vt8NLZ2MZUUB2EmTWYM0owUrpIpVyzxBgyBOwXWk=",
"owner": "mfussenegger", "owner": "mfussenegger",
"repo": "nvim-dap", "repo": "nvim-dap",
"rev": "6ae8a14828b0f3bff1721a35a1dfd604b6a933bb", "rev": "559d0bbdbc4be4c7e774423061263771be1dbde8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1140,11 +1140,11 @@
"plugin-nvim-lspconfig": { "plugin-nvim-lspconfig": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1715152811, "lastModified": 1715682701,
"narHash": "sha256-LMzLDbkKVmRRhwaUaroCRGUsKe/fwzgwV1gbvr/t6WQ=", "narHash": "sha256-kmo8UfTxarnxZLjL2qOeh4Jo/krxx3uqq073YnsFYxQ=",
"owner": "neovim", "owner": "neovim",
"repo": "nvim-lspconfig", "repo": "nvim-lspconfig",
"rev": "a3d9395455f2b2e3b50a0b0f37b8b4c23683f44a", "rev": "a27179f56c6f98a4cdcc79ee2971b514815a4940",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1236,11 +1236,11 @@
"plugin-nvim-session-manager": { "plugin-nvim-session-manager": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714905094, "lastModified": 1715419340,
"narHash": "sha256-VduhmnnRPIdi6GZ+TZUnZfpY4Lt8z5JBTKgl7oobtdY=", "narHash": "sha256-SrJJWC/newJRB879zMUbLzOJQ8qtcHfLF/7GLPFlSRQ=",
"owner": "Shatur", "owner": "Shatur",
"repo": "neovim-session-manager", "repo": "neovim-session-manager",
"rev": "892c55f7256fe170301a1fdd21752982c75c3507", "rev": "a0b9d25154be573bc0f99877afb3f57cf881cce7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1268,11 +1268,11 @@
"plugin-nvim-tree-lua": { "plugin-nvim-tree-lua": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714794673, "lastModified": 1715647490,
"narHash": "sha256-rY4FbuqBM4zOUkaA3QBc+UrpfTha8uGtp+lIzrYK+cg=", "narHash": "sha256-YqHAEztx6gEEm0GoDXC5djnIP030oGGRcskp8LPqVoc=",
"owner": "nvim-tree", "owner": "nvim-tree",
"repo": "nvim-tree.lua", "repo": "nvim-tree.lua",
"rev": "64f61e4c913047a045ff90bd188dd3b54ee443cf", "rev": "2bc725a3ebc23f0172fb0ab4d1134b81bcc13812",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1284,11 +1284,11 @@
"plugin-nvim-treesitter-context": { "plugin-nvim-treesitter-context": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714689136, "lastModified": 1715659155,
"narHash": "sha256-gHbLt0ApyPPQU8Q+lde0Zv8XBR6pESKzvIzIXHkd5eI=", "narHash": "sha256-EYAIm8qicpfvOzg5xPWRwuWMPcUa/hg+q3so+s9sw5g=",
"owner": "nvim-treesitter", "owner": "nvim-treesitter",
"repo": "nvim-treesitter-context", "repo": "nvim-treesitter-context",
"rev": "2650e6431f7daba5d9c2c64134fa5eb2312eb3d7", "rev": "df58c81237ffe2b277e14a1692212162a34e2e2a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1316,11 +1316,11 @@
"plugin-nvim-web-devicons": { "plugin-nvim-web-devicons": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1715028064, "lastModified": 1715644375,
"narHash": "sha256-DSUTxUFCesXuaJjrDNvurILUt1IrO5MI5ukbZ8D87zQ=", "narHash": "sha256-1trRSUVyWFl3K+7xHXQGNl/EwE0ggyigQpZ+kmRPsk8=",
"owner": "nvim-tree", "owner": "nvim-tree",
"repo": "nvim-web-devicons", "repo": "nvim-web-devicons",
"rev": "5b9067899ee6a2538891573500e8fd6ff008440f", "rev": "e37bb1feee9e7320c76050a55443fa843b4b6f83",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1348,11 +1348,11 @@
"plugin-onedark": { "plugin-onedark": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1706527208, "lastModified": 1715454207,
"narHash": "sha256-1+aO8vrUGEe/NIVI1C1xJyuQVPQZ1s510lopkEVP7No=", "narHash": "sha256-GERMsVNELbeRrKsiPeSKcwNI+bH4C79koTBRtRMGqvc=",
"owner": "navarasu", "owner": "navarasu",
"repo": "onedark.nvim", "repo": "onedark.nvim",
"rev": "1230aaf2a427b2c5b73aba6e4a9a5881d3e69429", "rev": "8e4b79b0e6495ddf29552178eceba1e147e6cecf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1364,11 +1364,11 @@
"plugin-orgmode-nvim": { "plugin-orgmode-nvim": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1715114055, "lastModified": 1715684611,
"narHash": "sha256-SmofuYt4fLhtl5qedYlmCRgOmZaw3nmlnMg0OMzyKnM=", "narHash": "sha256-T/vjpYbrq1LTNitnSGGmguVr5UV83AFhNGmeNS2H9J0=",
"owner": "nvim-orgmode", "owner": "nvim-orgmode",
"repo": "orgmode", "repo": "orgmode",
"rev": "cda615fa7c8607bfb7aaf7d2c9424dd5969f2625", "rev": "8ec0bcc6f6476d246159f738081256c97a7a9b2c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1444,11 +1444,11 @@
"plugin-rose-pine": { "plugin-rose-pine": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1713451685, "lastModified": 1715697761,
"narHash": "sha256-AdPSz5+nCOnLWexBasHuxRxEKbL4WVg+uV78//W5nLs=", "narHash": "sha256-AdPSz5+nCOnLWexBasHuxRxEKbL4WVg+uV78//W5nLs=",
"owner": "rose-pine", "owner": "rose-pine",
"repo": "neovim", "repo": "neovim",
"rev": "17b466e79479758b332a3cac12544a3ad2be6241", "rev": "b6fe88c3282cf9f117a3e836d761c2d78d02f417",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1540,11 +1540,11 @@
"plugin-telescope": { "plugin-telescope": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714700089, "lastModified": 1715697240,
"narHash": "sha256-SoEetPE7f7Y0kUa4+7dH+EOs/0WBsMDxeOkbVNuoSjE=", "narHash": "sha256-lHMbJAQ0ja2UrUantxQOVWMG502oo6QDod7AmpCw1yE=",
"owner": "nvim-telescope", "owner": "nvim-telescope",
"repo": "telescope.nvim", "repo": "telescope.nvim",
"rev": "fac83a556e7b710dc31433dec727361ca062dbe9", "rev": "6f6bb8065567b56c42e283b06e8a1c670c0092a1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1636,11 +1636,11 @@
"plugin-vim-fugitive": { "plugin-vim-fugitive": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1714601825, "lastModified": 1715753556,
"narHash": "sha256-0ujueJ226zEmjkFwodSukO1Zu5gMvTmx/dCtT5VBhek=", "narHash": "sha256-icKBJ/1J15h4dNS7NMfjMM/kjMPy8YMiyTI2pGTwYJY=",
"owner": "tpope", "owner": "tpope",
"repo": "vim-fugitive", "repo": "vim-fugitive",
"rev": "ce882460cf3db12e99f8bf579cbf99e331f6dd4f", "rev": "5b0347b5231a0f40abc311ccaf7bbf02d3ce3a5a",
"type": "github" "type": "github"
}, },
"original": { "original": {

View file

@ -49,7 +49,7 @@
nixosModules.neovim-flake has been deprecated. nixosModules.neovim-flake has been deprecated.
Please use the nixosModules.nvf instead Please use the nixosModules.nvf instead
'' ''
self.nixosModules.neovim-flake; self.nixosModules.nvf;
nvf = { nvf = {
imports = [(import ./flake/modules/nixos.nix self.packages inputs)]; imports = [(import ./flake/modules/nixos.nix self.packages inputs)];

View file

@ -25,7 +25,7 @@ inputs: {
# check can be disabled while calling this file is called # check can be disabled while calling this file is called
# to avoid checking in all modules # to avoid checking in all modules
nvimModules = import ./modules.nix { nvimModules = import ./modules.nix {
inherit check pkgs; inherit pkgs check;
lib = extendedLib; lib = extendedLib;
}; };

View file

@ -1,7 +1,7 @@
{ {
check ? true,
pkgs, pkgs,
lib, lib,
check ? true,
}: let }: let
inherit (lib.modules) mkDefault; inherit (lib.modules) mkDefault;
inherit (lib.lists) concatLists; inherit (lib.lists) concatLists;

View file

@ -14,6 +14,7 @@ in {
./markdown.nix ./markdown.nix
./nim.nix ./nim.nix
./nix.nix ./nix.nix
./ocaml.nix
./php.nix ./php.nix
./python.nix ./python.nix
./rust.nix ./rust.nix

View file

@ -0,0 +1,105 @@
{
config,
pkgs,
lib,
...
}: let
inherit (builtins) attrNames;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.modules) mkIf mkMerge;
inherit (lib.meta) getExe;
inherit (lib.lists) isList;
inherit (lib.types) either enum listOf package str;
inherit (lib.nvim.types) mkGrammarOption;
inherit (lib.nvim.lua) expToLua;
cfg = config.vim.languages.ocaml;
defaultServer = "ocaml-lsp";
servers = {
ocaml-lsp = {
package = pkgs.ocamlPackages.ocaml-lsp;
lspConfig = ''
lspconfig.ocamllsp.setup {
capabilities = capabilities,
on_attach = default_on_attach,
cmd = ${
if isList cfg.lsp.package
then expToLua cfg.lsp.package
else ''{"${getExe cfg.lsp.package}"}''
};
}
'';
};
};
defaultFormat = "ocamlformat";
formats = {
ocamlformat = {
package = pkgs.ocamlPackages.ocamlformat;
nullConfig = ''
table.insert(
ls_sources,
null_ls.builtins.formatting.ocamlformat.with({
command = "${cfg.format.package}/bin/ocamlformat",
})
)
'';
};
};
in {
options.vim.languages.ocaml = {
enable = mkEnableOption "OCaml language support";
treesitter = {
enable = mkEnableOption "OCaml treesitter" // {default = config.vim.languages.enableTreesitter;};
package = mkGrammarOption pkgs "ocaml";
};
lsp = {
enable = mkEnableOption "OCaml LSP support (ocaml-lsp)" // {default = config.vim.languages.enableLSP;};
server = mkOption {
description = "OCaml LSP server to user";
type = enum (attrNames servers);
default = defaultServer;
};
package = mkOption {
description = "OCaml language server package, or the command to run as a list of strings";
type = either package (listOf str);
default = servers.${cfg.lsp.server}.package;
};
};
format = {
enable = mkEnableOption "OCaml formatting support (ocamlformat)" // {default = config.vim.languages.enableFormat;};
type = mkOption {
description = "OCaml formatter to use";
type = enum (attrNames formats);
default = defaultFormat;
};
package = mkOption {
description = "OCaml formatter package";
type = package;
default = formats.${cfg.format.type}.package;
};
};
};
config = mkIf cfg.enable (mkMerge [
(mkIf cfg.lsp.enable {
vim.lsp.lspconfig.enable = true;
vim.lsp.lspconfig.sources.ocaml-lsp = servers.${cfg.lsp.server}.lspConfig;
})
(mkIf cfg.treesitter.enable {
vim.treesitter.enable = true;
vim.treesitter.grammars = [cfg.treesitter.package];
})
(mkIf cfg.format.enable {
vim.lsp.null-ls.enable = true;
vim.lsp.null-ls.sources.ocamlformat = formats.${cfg.format.type}.nullConfig;
vim.extraPackages = [formats.${cfg.format.type}.package];
})
]);
}

View file

@ -5,6 +5,7 @@
}: let }: let
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.attrsets) mapAttrs; inherit (lib.attrsets) mapAttrs;
inherit (lib.trivial) boolToString;
inherit (lib.nvim.dag) entryAnywhere entryAfter entryBetween; inherit (lib.nvim.dag) entryAnywhere entryAfter entryBetween;
cfg = config.vim.lsp; cfg = config.vim.lsp;
@ -12,26 +13,36 @@ in {
config = mkIf cfg.null-ls.enable (mkMerge [ config = mkIf cfg.null-ls.enable (mkMerge [
{ {
vim = { vim = {
startPlugins = [
"none-ls"
"plenary-nvim"
];
# null-ls implies LSP already being set up
# since it will hook into LSPs to receive information
lsp.enable = true; lsp.enable = true;
startPlugins = ["none-ls"];
luaConfigRC.null_ls-setup = entryAnywhere '' luaConfigRC = {
local null_ls = require("null-ls") # early setup for null-ls
local null_helpers = require("null-ls.helpers") null_ls-setup = entryAnywhere ''
local null_methods = require("null-ls.methods") local null_ls = require("null-ls")
local ls_sources = {} local null_helpers = require("null-ls.helpers")
''; local null_methods = require("null-ls.methods")
local ls_sources = {}
'';
luaConfigRC.null_ls = entryAfter ["null_ls-setup" "lsp-setup"] '' # null-ls setup
require('null-ls').setup({ null_ls = entryAfter ["null_ls-setup" "lsp-setup"] ''
debug = false, require('null-ls').setup({
diagnostics_format = "[#{m}] #{s} (#{c})", debug = ${boolToString cfg.null-ls.debug},
debounce = 250, diagnostics_format = "${cfg.null-ls.diagnostics_format}",
default_timeout = 5000, debounce = ${toString cfg.null-ls.debounce},
sources = ls_sources, default_timeout = ${toString cfg.null-ls.default_timeout},
on_attach = default_on_attach sources = ls_sources,
}) on_attach = default_on_attach
''; })
'';
};
}; };
} }
{ {

View file

@ -1,10 +1,30 @@
{lib, ...}: let {lib, ...}: let
inherit (lib.options) mkEnableOption mkOption; inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) attrsOf str; inherit (lib.types) attrsOf str int;
in { in {
options.vim.lsp.null-ls = { options.vim.lsp.null-ls = {
enable = mkEnableOption "null-ls, also enabled automatically"; enable = mkEnableOption "null-ls, also enabled automatically";
debug = mkEnableOption "debugging information for `null-ls";
diagnostics_format = mkOption {
type = str;
default = "[#{m}] #{s} (#{c})";
description = "Diagnostic output format for null-ls";
};
debounce = mkOption {
type = int;
default = 250;
description = "Default debounce";
};
default_timeout = mkOption {
type = int;
default = 5000;
description = "Default timeout value, in miliseconds";
};
sources = mkOption { sources = mkOption {
description = "null-ls sources"; description = "null-ls sources";
type = attrsOf str; type = attrsOf str;

View file

@ -3,6 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (builtins) map;
inherit (lib.modules) mkIf mkMerge; inherit (lib.modules) mkIf mkMerge;
inherit (lib.trivial) boolToString; inherit (lib.trivial) boolToString;
inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.dag) entryAnywhere;
@ -31,44 +32,46 @@ in {
}; };
}) })
(mkIf cfg.enable { (mkIf cfg.enable {
vim.startPlugins = [ vim = {
"lualine" startPlugins = ["lualine"];
];
vim.luaConfigRC.lualine = entryAnywhere '' luaConfigRC.lualine = entryAnywhere ''
local lualine = require('lualine') local lualine = require('lualine')
lualine.setup ${toLuaObject cfg.setupOpts} lualine.setup ${toLuaObject cfg.setupOpts}
''; '';
# this is for backwards-compatibility # this is for backwards-compatibility
vim.statusline.lualine.setupOpts = { statusline.lualine.setupOpts = {
options = { options = {
icons_enabled = cfg.icons.enable; icons_enabled = cfg.icons.enable;
theme = cfg.theme; theme = cfg.theme;
component_separators = [cfg.componentSeparator.left cfg.componentSeparator.right]; component_separators = [cfg.componentSeparator.left cfg.componentSeparator.right];
section_separators = [cfg.sectionSeparator.left cfg.sectionSeparator.right]; section_separators = [cfg.sectionSeparator.left cfg.sectionSeparator.right];
globalstatus = cfg.globalStatus; globalstatus = cfg.globalStatus;
refresh = cfg.refresh; refresh = cfg.refresh;
}; };
sections = { sections = {
lualine_a = builtins.map mkLuaInline (cfg.activeSection.a ++ cfg.extraActiveSection.a); lualine_a = map mkLuaInline (cfg.activeSection.a ++ cfg.extraActiveSection.a);
lualine_b = builtins.map mkLuaInline (cfg.activeSection.b ++ cfg.extraActiveSection.b); lualine_b = map mkLuaInline (cfg.activeSection.b ++ cfg.extraActiveSection.b);
lualine_c = builtins.map mkLuaInline (cfg.activeSection.c ++ cfg.extraActiveSection.c); lualine_c = map mkLuaInline (cfg.activeSection.c ++ cfg.extraActiveSection.c);
lualine_x = builtins.map mkLuaInline (cfg.activeSection.x ++ cfg.extraActiveSection.x); lualine_x = map mkLuaInline (cfg.activeSection.x ++ cfg.extraActiveSection.x);
lualine_y = builtins.map mkLuaInline (cfg.activeSection.y ++ cfg.extraActiveSection.y); lualine_y = map mkLuaInline (cfg.activeSection.y ++ cfg.extraActiveSection.y);
lualine_z = builtins.map mkLuaInline (cfg.activeSection.z ++ cfg.extraActiveSection.z); lualine_z = map mkLuaInline (cfg.activeSection.z ++ cfg.extraActiveSection.z);
};
inactive_sections = {
lualine_a = map mkLuaInline (cfg.inactiveSection.a ++ cfg.extraInactiveSection.a);
lualine_b = map mkLuaInline (cfg.inactiveSection.b ++ cfg.extraInactiveSection.b);
lualine_c = map mkLuaInline (cfg.inactiveSection.c ++ cfg.extraInactiveSection.c);
lualine_x = map mkLuaInline (cfg.inactiveSection.x ++ cfg.extraInactiveSection.x);
lualine_y = map mkLuaInline (cfg.inactiveSection.y ++ cfg.extraInactiveSection.y);
lualine_z = map mkLuaInline (cfg.inactiveSection.z ++ cfg.extraInactiveSection.z);
};
# probably don't need this?
tabline = [];
}; };
inactive_sections = {
lualine_a = builtins.map mkLuaInline (cfg.inactiveSection.a ++ cfg.extraInactiveSection.a);
lualine_b = builtins.map mkLuaInline (cfg.inactiveSection.b ++ cfg.extraInactiveSection.b);
lualine_c = builtins.map mkLuaInline (cfg.inactiveSection.c ++ cfg.extraInactiveSection.c);
lualine_x = builtins.map mkLuaInline (cfg.inactiveSection.x ++ cfg.extraInactiveSection.x);
lualine_y = builtins.map mkLuaInline (cfg.inactiveSection.y ++ cfg.extraInactiveSection.y);
lualine_z = builtins.map mkLuaInline (cfg.inactiveSection.z ++ cfg.extraInactiveSection.z);
};
# probably don't need this?
tabline = [];
}; };
}) })
]; ];

View file

@ -10,19 +10,45 @@
inherit (lib.nvim.types) mkPluginSetupOption; inherit (lib.nvim.types) mkPluginSetupOption;
supported_themes = import ./supported_themes.nix; supported_themes = import ./supported_themes.nix;
colorPuccin = builtin_themes = [
if config.vim.statusline.lualine.theme == "catppuccin" "auto"
then "#181825" "16color"
else "none"; "gruvbox"
"ayu_dark"
"ayu_light"
"ayu_mirage"
"codedark"
"dracula"
"everforest"
"gruvbox"
"gruvbox_light"
"gruvbox_material"
"horizon"
"iceberg_dark"
"iceberg_light"
"jellybeans"
"material"
"modus_vivendi"
"molokai"
"nightfly"
"nord"
"oceanicnext"
"onelight"
"palenight"
"papercolor_dark"
"papercolor_light"
"powerline"
"seoul256"
"solarized_dark"
"tomorrow"
"wombat"
];
in { in {
options.vim.statusline.lualine = { options.vim.statusline.lualine = {
enable = mkEnableOption "lualine statusline plugin";
setupOpts = mkPluginSetupOption "Lualine" {}; setupOpts = mkPluginSetupOption "Lualine" {};
enable = mkEnableOption "lualine statusline plugin"; icons.enable = mkEnableOption "icons for lualine" // {default = true;};
icons = {
enable = mkEnableOption "icons for lualine" // {default = true;};
};
refresh = { refresh = {
statusline = mkOption { statusline = mkOption {
@ -73,47 +99,15 @@ in {
theme = let theme = let
themeSupported = elem config.vim.theme.name supported_themes; themeSupported = elem config.vim.theme.name supported_themes;
themesConcatted = builtin_themes ++ optional themeSupported config.vim.theme.name;
in in
mkOption { mkOption {
description = "Theme for lualine"; type = enum themesConcatted;
type = enum ([
"auto"
"16color"
"gruvbox"
"ayu_dark"
"ayu_light"
"ayu_mirage"
"codedark"
"dracula"
"everforest"
"gruvbox"
"gruvbox_light"
"gruvbox_material"
"horizon"
"iceberg_dark"
"iceberg_light"
"jellybeans"
"material"
"modus_vivendi"
"molokai"
"nightfly"
"nord"
"oceanicnext"
"onelight"
"palenight"
"papercolor_dark"
"papercolor_light"
"powerline"
"seoul256"
"solarized_dark"
"tomorrow"
"wombat"
]
++ optional themeSupported config.vim.theme.name);
default = "auto"; default = "auto";
# TODO: xml generation error if the closing '' is on a new line. # TODO: xml generation error if the closing '' is on a new line.
# issue: https://gitlab.com/rycee/nmd/-/issues/10 # issue: https://gitlab.com/rycee/nmd/-/issues/10
defaultText = ''`config.vim.theme.name` if theme supports lualine else "auto"''; defaultText = ''`config.vim.theme.name` if theme supports lualine else "auto"'';
description = "Theme for lualine";
}; };
sectionSeparator = { sectionSeparator = {
@ -171,15 +165,14 @@ in {
"filetype", "filetype",
colored = true, colored = true,
icon_only = true, icon_only = true,
icon = { align = 'left' }, icon = { align = 'left' }
color = {bg='${colorPuccin}', fg='lavender'},
} }
'' ''
'' ''
{ {
"filename", "filename",
color = {bg='${colorPuccin}'}, symbols = {modified = ' ', readonly = ' '},
symbols = {modified = '', readonly = ''}, separator = {right = ''}
} }
'' ''
]; ];
@ -200,13 +193,7 @@ in {
removed = 'DiffDelete', -- Changes the diff's removed color you removed = 'DiffDelete', -- Changes the diff's removed color you
}, },
symbols = {added = '+', modified = '~', removed = '-'}, -- Changes the diff symbols symbols = {added = '+', modified = '~', removed = '-'}, -- Changes the diff symbols
color = { separator = {right = ''}
bg='${colorPuccin}',
fg='lavender'
},
separator = {
right = ''
},
} }
'' ''
]; ];
@ -251,18 +238,17 @@ in {
return msg return msg
end, end,
icon = ' ', icon = ' ',
color = {bg='${colorPuccin}', fg='lavender'}, separator = {left = ''},
separator = {
left = '',
},
} }
'' ''
'' ''
{ {
"diagnostics", "diagnostics",
sources = {'nvim_lsp', 'nvim_diagnostic', 'coc'}, sources = {'nvim_lsp', 'nvim_diagnostic', 'nvim_diagnostic', 'vim_lsp', 'coc'},
symbols = {error = '󰅙 ', warn = ' ', info = ' ', hint = '󰌵 '}, symbols = {error = '󰅙 ', warn = ' ', info = ' ', hint = '󰌵 '},
color = {bg='${colorPuccin}', fg='lavender'}, colored = true,
update_in_insert = false,
always_visible = false,
diagnostics_color = { diagnostics_color = {
color_error = { fg = 'red' }, color_error = { fg = 'red' },
color_warn = { fg = 'yellow' }, color_warn = { fg = 'yellow' },
@ -282,14 +268,14 @@ in {
'searchcount', 'searchcount',
maxcount = 999, maxcount = 999,
timeout = 120, timeout = 120,
color = {bg='${colorPuccin}', fg='lavender'} separator = {left = ''}
} }
'' ''
'' ''
{ {
"branch", "branch",
icon = ' ', icon = ' ',
color = {bg='${colorPuccin}', fg='lavender'}, separator = {left = ''}
} }
'' ''
]; ];
@ -302,15 +288,11 @@ in {
'' ''
{ {
"progress", "progress",
separator = { separator = {left = ''}
left = '',
},
} }
'' ''
'' ''
{ {"location"}
"location",
}
'' ''
'' ''
{ {
@ -320,38 +302,44 @@ in {
unix = '', -- e712 unix = '', -- e712
dos = '', -- e70f dos = '', -- e70f
mac = '', -- e711 mac = '', -- e711
}, }
} }
'' ''
]; ];
}; };
}; };
extraActiveSection = { extraActiveSection = {
a = mkOption { a = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for activeSection.a"; description = "Extra entries for activeSection.a";
default = []; default = [];
}; };
b = mkOption { b = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for activeSection.b"; description = "Extra entries for activeSection.b";
default = []; default = [];
}; };
c = mkOption { c = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for activeSection.c"; description = "Extra entries for activeSection.c";
default = []; default = [];
}; };
x = mkOption { x = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for activeSection.x"; description = "Extra entries for activeSection.x";
default = []; default = [];
}; };
y = mkOption { y = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for activeSection.y"; description = "Extra entries for activeSection.y";
default = []; default = [];
}; };
z = mkOption { z = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for activeSection.z"; description = "Extra entries for activeSection.z";
@ -402,26 +390,31 @@ in {
description = "Extra entries for inactiveSection.a"; description = "Extra entries for inactiveSection.a";
default = []; default = [];
}; };
b = mkOption { b = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for inactiveSection.b"; description = "Extra entries for inactiveSection.b";
default = []; default = [];
}; };
c = mkOption { c = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for inactiveSection.c"; description = "Extra entries for inactiveSection.c";
default = []; default = [];
}; };
x = mkOption { x = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for inactiveSection.x"; description = "Extra entries for inactiveSection.x";
default = []; default = [];
}; };
y = mkOption { y = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for inactiveSection.y"; description = "Extra entries for inactiveSection.y";
default = []; default = [];
}; };
z = mkOption { z = mkOption {
type = listOf str; type = listOf str;
description = "Extra entries for inactiveSection.z"; description = "Extra entries for inactiveSection.z";

View file

@ -3,7 +3,7 @@
lib, lib,
... ...
}: let }: let
inherit (lib.options) mkOption mkEnableOption literalExpression; inherit (lib.options) mkOption mkEnableOption literalMD;
inherit (lib.types) package bool str listOf attrsOf; inherit (lib.types) package bool str listOf attrsOf;
inherit (lib.nvim.types) pluginsOpt extraPluginType; inherit (lib.nvim.types) pluginsOpt extraPluginType;
in { in {
@ -38,7 +38,7 @@ in {
startPlugins = pluginsOpt { startPlugins = pluginsOpt {
default = ["plenary-nvim"]; default = ["plenary-nvim"];
example = literalExpression '' example = ''
[pkgs.vimPlugins.telescope-nvim] [pkgs.vimPlugins.telescope-nvim]
''; '';
@ -54,7 +54,7 @@ in {
optPlugins = pluginsOpt { optPlugins = pluginsOpt {
default = []; default = [];
example = literalExpression '' example = ''
[pkgs.vimPlugins.vim-ghost] [pkgs.vimPlugins.vim-ghost]
''; '';
description = '' description = ''
@ -80,7 +80,8 @@ in {
your custom plugins using nvf's modified DAG library. your custom plugins using nvf's modified DAG library.
''; '';
example = literalExpression '' example = literalMD ''
```nix
with pkgs.vimPlugins; { with pkgs.vimPlugins; {
aerial = { aerial = {
package = aerial-nvim; package = aerial-nvim;
@ -93,13 +94,14 @@ in {
after = ["aerial"]; # place harpoon configuration after aerial after = ["aerial"]; # place harpoon configuration after aerial
}; };
} }
```
''; '';
}; };
extraPackages = mkOption { extraPackages = mkOption {
type = listOf package; type = listOf package;
default = []; default = [];
example = literalExpression ''[pkgs.fzf pkgs.ripgrep]''; example = ''[pkgs.fzf pkgs.ripgrep]'';
description = '' description = ''
List of additional packages to make available to the Neovim List of additional packages to make available to the Neovim
wrapper. wrapper.
@ -107,7 +109,7 @@ in {
}; };
# this defaults to `true` in the wrapper # this defaults to `true` in the wrapper
# and since we passs this value to the wrapper # and since we pass this value to the wrapper
# with an inherit, it should be `true` here as well # with an inherit, it should be `true` here as well
withRuby = withRuby =
mkEnableOption '' mkEnableOption ''
@ -118,29 +120,25 @@ in {
}; };
withNodeJs = mkEnableOption '' withNodeJs = mkEnableOption ''
NodeJs support in the Neovim wrapper. NodeJs support in the Neovim wrapper
''; '';
luaPackages = mkOption { luaPackages = mkOption {
type = listOf str; type = listOf str;
default = []; default = [];
example = literalExpression ''["magick" "serpent"]''; example = ''["magick" "serpent"]'';
description = '' description = "List of lua packages to install";
List of lua packages to install.
'';
}; };
withPython3 = mkEnableOption '' withPython3 = mkEnableOption ''
Python3 support in the Neovim wrapper. Python3 support in the Neovim wrapper
''; '';
python3Packages = mkOption { python3Packages = mkOption {
type = listOf str; type = listOf str;
default = []; default = [];
example = literalExpression ''["pynvim"]''; example = ''["pynvim"]'';
description = '' description = "List of python packages to install";
List of python packages to install.
'';
}; };
}; };
} }