feat(docs): Add neovim module documentation

This commit is contained in:
Jalil David Salamé Messina 2024-02-16 20:36:20 +01:00
parent d47b04a887
commit db8bae6f31
Signed by: jalil
GPG key ID: F016B9E770737A0B
5 changed files with 132 additions and 121 deletions

View file

@ -6,22 +6,15 @@ let
hash = "sha256-pLP73zlmGkbC/zV6bwnB6ijRf9gVkj5/VYMGLhiQ1/Q=";
};
filterVisible = toplevelOption: option: option // { visible = option.visible && builtins.elemAt option.loc 0 == toplevelOption; };
home-eval = lib.evalModules { modules = [ ../home/options.nix ]; specialArgs = { inherit pkgs; }; };
nvim-eval = lib.evalModules { modules = [ ../nvim/options.nix ]; };
nixos-eval = lib.evalModules { modules = [ ../nixos/options.nix ]; };
home-eval = lib.evalModules {
modules = [ ../home/options.nix ];
specialArgs = { inherit pkgs; };
};
nixos-markdown = (pkgs.nixosOptionsDoc {
inherit (nixos-eval) options;
transformOptions = filterVisible "jconfig";
}).optionsCommonMark;
home-markdown = (pkgs.nixosOptionsDoc {
inherit (home-eval) options;
transformOptions = filterVisible "jhome";
}).optionsCommonMark;
home-markdown = (pkgs.nixosOptionsDoc { inherit (home-eval) options; transformOptions = filterVisible "jhome"; }).optionsCommonMark;
nvim-markdown = (pkgs.nixosOptionsDoc { inherit (nvim-eval) options; transformOptions = filterVisible "jhome"; }).optionsCommonMark;
nixos-markdown = (pkgs.nixosOptionsDoc { inherit (nixos-eval) options; transformOptions = filterVisible "jconfig"; }).optionsCommonMark;
in
{
inherit nixos-markdown home-markdown;
inherit nixos-markdown nvim-markdown home-markdown;
docs = pkgs.stdenvNoCC.mkDerivation {
name = "nixos-configuration-book";
src = ./.;
@ -31,8 +24,9 @@ in
ln -s ${highlight} ./theme/highlight.js
# copy generated options removing the declared by statement
sed '/^\*Declared by:\*$/,/^$/d' <${home-markdown} >> src/home-options.md
sed '/^\*Declared by:\*$/,/^$/d' <${nixos-markdown} >> src/nixos-options.md
sed '/^\*Declared by:\*$/,/^$/d' <${home-markdown} >> ./src/home-options.md
sed '/^\*Declared by:\*$/,/^$/d' <${nvim-markdown} >> ./src/nvim-options.md
sed '/^\*Declared by:\*$/,/^$/d' <${nixos-markdown} >> ./src/nixos-options.md
'';
nativeBuildInputs = [ pkgs.mdbook-toc ];

View file

@ -2,4 +2,5 @@
- [Nix Based Configuration](./configuration-overview.md)
- [NixOS Module Options](./nixos-options.md)
- [Neovim Module Options](./nvim-options.md)
- [Home Manager Module Options](./home-options.md)

13
docs/src/nvim-options.md Normal file
View file

@ -0,0 +1,13 @@
# Neovim Module Options
Here you will find the neovim options and their default values (if they have
any).
You might also want to take a look at the [NixNeovim
Manual](https://nixneovim.github.io/NixNeovim/options.html) or search the
available options through [NixNeovim option
search](https://nixneovim.github.io/nixneovim-option-search/).
## Table of Contents
<!-- toc -->

View file

@ -1,90 +1,112 @@
{ pkgs, ... }: {
{ pkgs, config, lib, ... }:
let
cfg = config.jhome.nvim;
in
{
imports = [
./options.nix
];
programs.nixneovim = {
enable = true;
package = pkgs.neovim-nightly;
defaultEditor = true;
colorschemes.gruvbox-nvim = {
config = lib.mkIf cfg.enable {
programs.nixneovim = {
enable = true;
bold = true;
transparentBg = true;
trueColor = true;
package = pkgs.neovim-nightly;
defaultEditor = true;
globals.mapleader = " ";
# Appearance
colorschemes.gruvbox-nvim.enable = true;
colorschemes.gruvbox-nvim.bold = true;
colorschemes.gruvbox-nvim.transparentBg = true;
colorschemes.gruvbox-nvim.trueColor = true;
options.number = true;
options.relativenumber = true;
options.colorcolumn = "+1";
options.cursorline = true;
options.wrap = false;
options.splitright = true;
# Tabs & indentation
options.smarttab = true;
options.autoindent = true;
options.smartindent = true;
# Search path
options.path = ".,/usr/include,**";
options.wildmenu = true;
options.hlsearch = true;
options.incsearch = true;
options.ignorecase = true; # Search ignores cases
options.smartcase = true; # Unless it has a capital letter
# Enable local configuration :h 'exrc'
options.exrc = true; # safe since nvim 0.9
plugins = import ./plugins;
mappings = import ./mappings.nix;
augroups = import ./augroups.nix;
extraPlugins =
(with pkgs.vimExtraPlugins; [ dressing-nvim rustaceanvim idris2-nvim nui-nvim nvim-lint ])
++ (with pkgs.vimPlugins; [ lualine-lsp-progress nvim-web-devicons FTerm-nvim cmp-cmdline formatter-nvim ]);
# Formatting
extraPackages = with pkgs; [ stylua shfmt taplo yamlfmt nixpkgs-fmt ];
extraLuaPreConfig = ''
-- Lua Pre Config
if vim.fn.has 'termguicolors' then
-- Enable RGB colors
vim.g.termguicolors = true
end
-- Useful function
local has_words_before = function()
-- unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0
and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match '%s' == nil
end
-- END: Lua Pre Config
'';
extraLuaPostConfig = ''
do -- Setup cmp-cmdline
local cmp = require "cmp"
cmp.setup.cmdline("/", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources { {name = "rg" }, { name = "buffer" } },
})
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } })
})
end
do -- Setup dressing.nvim
-- require("dressing").setup()
end
do -- Setup formatter.nvim
-- local util = require "formatter.util"
require("formatter").setup {
logging = true,
log_level = vim.log.levels.WARN,
["*"] = { require("formatter.filetypes.any").remove_trailing_whitespace },
-- Filetype Formatting
c = { require("formatter.filetypes.c").clangformat },
sh = { require("formatter.filetypes.sh").shfmt },
cpp = { require("formatter.filetypes.cpp").clangformat },
lua = { require("formatter.filetypes.lua").stylua },
nix = { require("formatter.filetypes.nix").nixpkgs-fmt },
zig = { require("formatter.filetypes.zig").zigfmt },
rust = { require("formatter.filetypes.rust").rustfmt },
toml = { require("formatter.filetypes.toml").taplo },
yaml = { require("formatter.filetypes.yaml").yamlfmt },
}
end
do -- Setup idris2-nvim
require("idris2").setup { }
end
do -- Setup nvim-lint
require("lint").linters_by_ft = {
latex = { "chktex", "typos" },
}
end
'';
};
globals.mapleader = " ";
options = import ./options.nix;
plugins = import ./plugins;
mappings = import ./mappings.nix;
augroups = import ./augroups.nix;
extraPlugins = builtins.attrValues {
inherit (pkgs.vimExtraPlugins) dressing-nvim rustaceanvim idris2-nvim nui-nvim nvim-lint;
inherit (pkgs.vimPlugins) lualine-lsp-progress nvim-web-devicons FTerm-nvim cmp-cmdline formatter-nvim;
};
# Formatting
extraPackages = builtins.attrValues {
# Formatters
inherit (pkgs) stylua shfmt taplo yamlfmt alejandra;
};
extraLuaPreConfig = ''
-- Lua Pre Config
if vim.fn.has 'termguicolors' then
-- Enable RGB colors
vim.g.termguicolors = true
end
-- Useful function
local has_words_before = function()
-- unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0
and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match '%s' == nil
end
-- END: Lua Pre Config
'';
extraLuaPostConfig = ''
do -- Setup cmp-cmdline
local cmp = require "cmp"
cmp.setup.cmdline("/", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources { {name = "rg" }, { name = "buffer" } },
})
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } })
})
end
do -- Setup dressing.nvim
-- require("dressing").setup()
end
do -- Setup formatter.nvim
-- local util = require "formatter.util"
require("formatter").setup {
logging = true,
log_level = vim.log.levels.WARN,
["*"] = { require("formatter.filetypes.any").remove_trailing_whitespace },
-- Filetype Formatting
c = { require("formatter.filetypes.c").clangformat },
sh = { require("formatter.filetypes.sh").shfmt },
cpp = { require("formatter.filetypes.cpp").clangformat },
lua = { require("formatter.filetypes.lua").stylua },
nix = { require("formatter.filetypes.nix").alejandra },
zig = { require("formatter.filetypes.zig").zigfmt },
rust = { require("formatter.filetypes.rust").rustfmt },
toml = { require("formatter.filetypes.toml").taplo },
yaml = { require("formatter.filetypes.yaml").yamlfmt },
}
end
do -- Setup idris2-nvim
require("idris2").setup { }
end
do -- Setup nvim-lint
require("lint").linters_by_ft = {
latex = { "chktex", "typos" },
}
end
'';
};
}

View file

@ -1,22 +1,3 @@
{
# Appearance
number = true;
relativenumber = true;
colorcolumn = "+1";
cursorline = true;
wrap = false;
splitright = true;
# Tabs & indentation
smarttab = true;
autoindent = true;
smartindent = true;
# Search path
path = ".,/usr/include,**";
wildmenu = true;
hlsearch = true;
incsearch = true;
ignorecase = true; # Search ignores cases
smartcase = true; # Unless it has a capital letter
# Enable local configuration :h 'exrc'
exrc = true; # safe since nvim 0.9
{ lib, ... }: {
options.jhome.nvim.enable = lib.mkEnableOption "jalil's neovim configuration" // { default = true; example = false; };
}