mirror of
https://github.com/NotAShelf/neovim-flake.git
synced 2024-12-19 09:49:48 +01:00
Merge branch 'main' of github.com:NotAShelf/neovim-flake into nim-lang
This commit is contained in:
commit
38bf156537
74 changed files with 2027 additions and 1509 deletions
2
.github/workflows/cachix.yml
vendored
2
.github/workflows/cachix.yml
vendored
|
@ -38,7 +38,7 @@ jobs:
|
||||||
uses: DeterminateSystems/nix-installer-action@main
|
uses: DeterminateSystems/nix-installer-action@main
|
||||||
- uses: DeterminateSystems/magic-nix-cache-action@main
|
- uses: DeterminateSystems/magic-nix-cache-action@main
|
||||||
|
|
||||||
- uses: cachix/cachix-action@v13
|
- uses: cachix/cachix-action@v14
|
||||||
with:
|
with:
|
||||||
authToken: ${{ secrets.CACHIX_TOKEN }}
|
authToken: ${{ secrets.CACHIX_TOKEN }}
|
||||||
extraPullNames: nix-community
|
extraPullNames: nix-community
|
||||||
|
|
9
.github/workflows/check-docs.yml
vendored
9
.github/workflows/check-docs.yml
vendored
|
@ -39,8 +39,13 @@ jobs:
|
||||||
- name: Build documentation packages
|
- name: Build documentation packages
|
||||||
run: nix build .#${{ matrix.package }} --print-build-logs
|
run: nix build .#${{ matrix.package }} --print-build-logs
|
||||||
|
|
||||||
|
- name: Get current date
|
||||||
|
id: get-date
|
||||||
|
# output format: 2023-12-22-120000
|
||||||
|
run: echo "date=$(date +'%Y-%m-%d-%H%M%S')" >> ${GITHUB_OUTPUT}
|
||||||
|
|
||||||
- name: Upload doc artifacts
|
- name: Upload doc artifacts
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: doc
|
name: "${{ matrix.package }}"
|
||||||
path: result/share/doc/neovim-flake/
|
path: result/share/doc/neovim-flake/
|
||||||
|
|
|
@ -56,15 +56,8 @@ inputs: let
|
||||||
|
|
||||||
nix.enable = true;
|
nix.enable = true;
|
||||||
html.enable = isMaximal;
|
html.enable = isMaximal;
|
||||||
clang = {
|
css.enable = isMaximal;
|
||||||
enable = isMaximal;
|
|
||||||
lsp.server = "clangd";
|
|
||||||
};
|
|
||||||
sql.enable = isMaximal;
|
sql.enable = isMaximal;
|
||||||
rust = {
|
|
||||||
enable = isMaximal;
|
|
||||||
crates.enable = true;
|
|
||||||
};
|
|
||||||
java.enable = isMaximal;
|
java.enable = isMaximal;
|
||||||
ts.enable = isMaximal;
|
ts.enable = isMaximal;
|
||||||
svelte.enable = isMaximal;
|
svelte.enable = isMaximal;
|
||||||
|
@ -72,10 +65,20 @@ inputs: let
|
||||||
zig.enable = isMaximal;
|
zig.enable = isMaximal;
|
||||||
python.enable = isMaximal;
|
python.enable = isMaximal;
|
||||||
dart.enable = isMaximal;
|
dart.enable = isMaximal;
|
||||||
elixir.enable = false;
|
elixir.enable = isMaximal;
|
||||||
bash.enable = isMaximal;
|
bash.enable = isMaximal;
|
||||||
terraform.enable = isMaximal;
|
terraform.enable = isMaximal;
|
||||||
nim.enable = isMaximal;
|
nim.enable = isMaximal;
|
||||||
|
tailwind.enable = isMaximal;
|
||||||
|
clang = {
|
||||||
|
enable = isMaximal;
|
||||||
|
lsp.server = "clangd";
|
||||||
|
};
|
||||||
|
|
||||||
|
rust = {
|
||||||
|
enable = isMaximal;
|
||||||
|
crates.enable = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
vim.visuals = {
|
vim.visuals = {
|
||||||
|
@ -233,17 +236,7 @@ inputs: let
|
||||||
};
|
};
|
||||||
|
|
||||||
vim.presence = {
|
vim.presence = {
|
||||||
presence-nvim = {
|
neocord.enable = true;
|
||||||
enable = true;
|
|
||||||
auto_update = true;
|
|
||||||
image_text = "The Superior Text Editor";
|
|
||||||
client_id = "793271441293967371";
|
|
||||||
main_image = "neovim";
|
|
||||||
show_time = true;
|
|
||||||
rich_presence = {
|
|
||||||
editing_text = "Editing %s";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
137
docs/default.nix
137
docs/default.nix
|
@ -2,6 +2,7 @@
|
||||||
pkgs,
|
pkgs,
|
||||||
lib ? import ../lib/stdlib-extended.nix pkgs.lib,
|
lib ? import ../lib/stdlib-extended.nix pkgs.lib,
|
||||||
nmdSrc,
|
nmdSrc,
|
||||||
|
...
|
||||||
}: let
|
}: let
|
||||||
nmd = import nmdSrc {
|
nmd = import nmdSrc {
|
||||||
inherit lib;
|
inherit lib;
|
||||||
|
@ -29,6 +30,8 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
dontCheckDefinitions = {_module.check = false;};
|
||||||
|
|
||||||
githubDeclaration = user: repo: subpath: let
|
githubDeclaration = user: repo: subpath: let
|
||||||
urlRef = "main";
|
urlRef = "main";
|
||||||
in {
|
in {
|
||||||
|
@ -36,96 +39,100 @@
|
||||||
name = "<${repo}/${subpath}>";
|
name = "<${repo}/${subpath}>";
|
||||||
};
|
};
|
||||||
|
|
||||||
dontCheckDefinitions = {_module.check = false;};
|
|
||||||
|
|
||||||
nvimPath = toString ./..;
|
nvimPath = toString ./..;
|
||||||
|
|
||||||
buildOptionsDocs = args @ {
|
buildOptionsDocs = args @ {
|
||||||
modules,
|
modules,
|
||||||
includeModuleSystemsOptions ? true,
|
includeModuleSystemOptions ? true,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
options = (lib.evalModules {inherit modules;}).options;
|
inherit ((lib.evalModules {inherit modules;})) options;
|
||||||
in
|
in
|
||||||
pkgs.buildPackages.nixosOptionsDoc
|
pkgs.buildPackages.nixosOptionsDoc ({
|
||||||
({
|
|
||||||
options =
|
options =
|
||||||
if includeModuleSystemsOptions
|
if includeModuleSystemOptions
|
||||||
then options
|
then options
|
||||||
else builtins.removeAttrs (options ["_module"]);
|
else builtins.removeAttrs options ["_module"];
|
||||||
transformOptions = opt:
|
transformOptions = opt:
|
||||||
opt
|
opt
|
||||||
// {
|
// {
|
||||||
# Clean up declaration sites to not refer to local source tree
|
# Clean up declaration sites to not refer to the Home Manager
|
||||||
declarations =
|
# source tree.
|
||||||
map
|
declarations = map (decl:
|
||||||
(decl:
|
if lib.hasPrefix nvimPath (toString decl)
|
||||||
if lib.hasPrefix nvimPath (toString decl)
|
then
|
||||||
then
|
githubDeclaration "notashelf" "neovim-flake"
|
||||||
githubDeclaration "notashelf" "neovim-flake"
|
(lib.removePrefix "/" (lib.removePrefix nvimPath (toString decl)))
|
||||||
(lib.removePrefix "/" (lib.removePrefix nvimPath (toString decl)))
|
else if decl == "lib/modules.nix"
|
||||||
else decl)
|
then
|
||||||
opt.declarations;
|
# TODO: handle this in a better way (may require upstream
|
||||||
|
# changes to nixpkgs)
|
||||||
|
githubDeclaration "NixOS" "nixpkgs" decl
|
||||||
|
else decl)
|
||||||
|
opt.declarations;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
// builtins.removeAttrs args ["modules" "includeModuleSystemsOptions"]);
|
// builtins.removeAttrs args ["modules" "includeModuleSystemOptions"]);
|
||||||
|
|
||||||
nvimModuleDocs = buildOptionsDocs {
|
nvimModuleDocs = buildOptionsDocs {
|
||||||
modules =
|
modules =
|
||||||
import ../modules/modules.nix
|
import ../modules/modules.nix {
|
||||||
{
|
inherit lib pkgs;
|
||||||
inherit pkgs lib;
|
|
||||||
check = false;
|
check = false;
|
||||||
}
|
}
|
||||||
++ [scrubbedPkgsModule];
|
++ [scrubbedPkgsModule];
|
||||||
variablelistId = "neovim-flake-options";
|
variablelistId = "neovim-flake-options";
|
||||||
};
|
};
|
||||||
|
|
||||||
docs = nmd.buildDocBookDocs {
|
release-config = builtins.fromJSON (builtins.readFile ../release.json);
|
||||||
pathName = "neovim-flake";
|
revision = "release-${release-config.release}";
|
||||||
projectName = "neovim-flake";
|
# Generate the `man home-configuration.nix` package
|
||||||
modulesDocs = [
|
nvf-configuration-manual =
|
||||||
{
|
pkgs.runCommand "neovim-flake-reference-manpage" {
|
||||||
docBook = pkgs.linkFarm "nvim-module-docs-for-nmd" {
|
nativeBuildInputs = [pkgs.buildPackages.installShellFiles pkgs.nixos-render-docs];
|
||||||
"nmd-result/neovim-flake-options.xml" = nvimModuleDocs.optionsDocBook;
|
allowedReferences = ["out"];
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
documentsDirectory = ./.;
|
|
||||||
documentType = "book";
|
|
||||||
chunkToc = ''
|
|
||||||
<toc>
|
|
||||||
<d:tocentry xmlns:d="http://docbook.org/ns/docbook" linkend="book-neovim-flake-manual">
|
|
||||||
<?dbhtml filename="index.html"?>
|
|
||||||
<d:tocentry linkend="ch-options">
|
|
||||||
<?dbhtml filename="options.html"?>
|
|
||||||
</d:tocentry>
|
|
||||||
<d:tocentry linkend="ch-release-notes">
|
|
||||||
<?dbhtml filename="release-notes.html"?>
|
|
||||||
</d:tocentry>
|
|
||||||
</d:tocentry>
|
|
||||||
</toc>
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
options.json =
|
|
||||||
pkgs.runCommand "options.json"
|
|
||||||
# TODO: Use `nvimOptionsDoc.optionsJSON` directly once upstream
|
|
||||||
# `nixosOptionsDoc` is more customizable
|
|
||||||
{
|
|
||||||
meta.description = "List of neovim-flake options in JSON format";
|
|
||||||
} ''
|
} ''
|
||||||
mkdir -p $out/{share/doc,nix-support}
|
# Generate manpages.
|
||||||
cp -a ${nvimModuleDocs.optionsJSON}/share/doc/nixos $out/share/doc/neovim-flake
|
mkdir -p $out/share/man/man5
|
||||||
substitute \
|
mkdir -p $out/share/man/man1
|
||||||
${nvimModuleDocs.optionsJSON}/nix-support/hydra-build-products \
|
nixos-render-docs -j $NIX_BUILD_CORES options manpage \
|
||||||
$out/nix-support/hydra-build-products \
|
--revision ${revision} \
|
||||||
--replace \
|
${nvimModuleDocs.optionsJSON}/share/doc/nixos/options.json \
|
||||||
'${nvimModuleDocs.optionsJSON}/share/doc/nixos' \
|
$out/share/man/man5/neovim-flake.5
|
||||||
"$out/share/doc/neovim-flake"
|
cp ${./neovim-flake.1} $out/share/man/man1/neovim-flake.1
|
||||||
'';
|
'';
|
||||||
|
# Generate the HTML manual pages
|
||||||
|
neovim-flake-manual = pkgs.callPackage ./manual.nix {
|
||||||
|
inherit revision;
|
||||||
|
outputPath = "share/doc/neovim-flake";
|
||||||
|
nmd = nmdSrc;
|
||||||
|
options = {
|
||||||
|
neovim-flake = nvimModuleDocs.optionsJSON;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
html = neovim-flake-manual;
|
||||||
|
htmlOpenTool = pkgs.callPackage ./html-open-tool.nix {} {inherit html;};
|
||||||
|
in {
|
||||||
|
inherit nmdSrc;
|
||||||
|
|
||||||
inherit (docs) manPages;
|
options = {
|
||||||
|
# TODO: Use `hmOptionsDocs.optionsJSON` directly once upstream
|
||||||
|
# `nixosOptionsDoc` is more customizable.
|
||||||
|
json =
|
||||||
|
pkgs.runCommand "options.json" {
|
||||||
|
meta.description = "List of Home Manager options in JSON format";
|
||||||
|
} ''
|
||||||
|
mkdir -p $out/{share/doc,nix-support}
|
||||||
|
cp -a ${nvimModuleDocs.optionsJSON}/share/doc/nixos $out/share/doc/neovim-flake
|
||||||
|
substitute \
|
||||||
|
${nvimModuleDocs.optionsJSON}/nix-support/hydra-build-products \
|
||||||
|
$out/nix-support/hydra-build-products \
|
||||||
|
--replace \
|
||||||
|
'${nvimModuleDocs.optionsJSON}/share/doc/nixos' \
|
||||||
|
"$out/share/doc/neovim-flake"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
manual = {inherit (docs) html htmlOpenTool;};
|
manPages = nvf-configuration-manual;
|
||||||
|
manual = {inherit html htmlOpenTool;};
|
||||||
}
|
}
|
||||||
|
|
3
docs/footer.5
Normal file
3
docs/footer.5
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.SH "AUTHORS"
|
||||||
|
.PP
|
||||||
|
neovim-flake contributors
|
14
docs/header.5
Normal file
14
docs/header.5
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.TH "neovim-flake" "5" "01/01/1980" "neovim-flake"
|
||||||
|
.\" disable hyphenation
|
||||||
|
.nh
|
||||||
|
.\" disable justification (adjust text to left margin only)
|
||||||
|
.ad l
|
||||||
|
.\" enable line breaks after slashes
|
||||||
|
.cflags 4 /
|
||||||
|
.SH "NAME"
|
||||||
|
neovim-flake configuration specification
|
||||||
|
.SH "OPTIONS"
|
||||||
|
.PP
|
||||||
|
You can use the following options in
|
||||||
|
home\-configuration\&.nix:
|
||||||
|
.PP
|
8
docs/highlight-style.css
Normal file
8
docs/highlight-style.css
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
pre {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre code.hljs {
|
||||||
|
border: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
43
docs/html-open-tool.nix
Normal file
43
docs/html-open-tool.nix
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
{
|
||||||
|
writeShellScriptBin,
|
||||||
|
makeDesktopItem,
|
||||||
|
symlinkJoin,
|
||||||
|
}: {
|
||||||
|
html,
|
||||||
|
pathName ? "neovim-flake",
|
||||||
|
projectName ? pathName,
|
||||||
|
name ? "${pathName}-help",
|
||||||
|
}: let
|
||||||
|
helpScript = writeShellScriptBin name ''
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
if [[ ! -v BROWSER || -z $BROWSER ]]; then
|
||||||
|
for candidate in xdg-open open w3m; do
|
||||||
|
BROWSER="$(type -P $candidate || true)"
|
||||||
|
if [[ -x $BROWSER ]]; then
|
||||||
|
break;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -v BROWSER || -z $BROWSER ]]; then
|
||||||
|
echo "$0: unable to start a web browser; please set \$BROWSER"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
exec "$BROWSER" "${html}/share/doc/${pathName}/index.xhtml"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
desktopItem = makeDesktopItem {
|
||||||
|
name = "${pathName}-manual";
|
||||||
|
desktopName = "${projectName} Manual";
|
||||||
|
genericName = "View ${projectName} documentation in a web browser";
|
||||||
|
icon = "nix-snowflake";
|
||||||
|
exec = "${helpScript}/bin/${name}";
|
||||||
|
categories = ["System"];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
symlinkJoin {
|
||||||
|
inherit name;
|
||||||
|
paths = [helpScript desktopItem];
|
||||||
|
}
|
|
@ -1,50 +0,0 @@
|
||||||
<refentry xmlns="http://docbook.org/ns/docbook"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
||||||
<refmeta>
|
|
||||||
<refentrytitle>neovim-flake configuration</refentrytitle>
|
|
||||||
<manvolnum>5</manvolnum>
|
|
||||||
<refmiscinfo class="source">neovim-flake</refmiscinfo>
|
|
||||||
<!-- <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo> -->
|
|
||||||
</refmeta>
|
|
||||||
<refnamediv>
|
|
||||||
<refname>neovim configuration</refname>
|
|
||||||
<refpurpose>neovim-flake configuration specification</refpurpose>
|
|
||||||
</refnamediv>
|
|
||||||
<refsection>
|
|
||||||
<title>Description</title>
|
|
||||||
<para>
|
|
||||||
Custom configuration is done with the neovim-flake.lib.neovimConfiguration if home-manager module is not in use.
|
|
||||||
It takes in the configuration as a module.
|
|
||||||
|
|
||||||
<programlisting>
|
|
||||||
neovim-flake.lib.neovimConfiguration {
|
|
||||||
inherit pkgs;
|
|
||||||
modules = [{config = xxx;}];
|
|
||||||
};
|
|
||||||
</programlisting>
|
|
||||||
|
|
||||||
The output of the configuration function is an attrset.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
In case of the home-manager module, all options will be available under programs.neovim-flake once the module has
|
|
||||||
been imported from the flake inputs.
|
|
||||||
|
|
||||||
<programlisting>
|
|
||||||
{
|
|
||||||
options = "The options that were available to configure";
|
|
||||||
config = "The outputted configuration";
|
|
||||||
pkgs = "The package set used to evaluate the module";
|
|
||||||
neovim = "The built neovim package";
|
|
||||||
}
|
|
||||||
</programlisting>
|
|
||||||
</para>
|
|
||||||
</refsection>
|
|
||||||
<refsection>
|
|
||||||
<title>Options</title>
|
|
||||||
<para>
|
|
||||||
You can use the following options in your neovim configuration.
|
|
||||||
</para>
|
|
||||||
<xi:include href="./nmd-result/neovim-flake-options.xml" xpointer="neovim-flake-options"/>
|
|
||||||
</refsection>
|
|
||||||
</refentry>
|
|
|
@ -1,13 +0,0 @@
|
||||||
<reference xmlns="http://docbook.org/ns/docbook"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:xi="http://www.w3.org/2001/XInclude">
|
|
||||||
<title>neovim-flake Reference Pages</title>
|
|
||||||
<info>
|
|
||||||
<author><personname>neovim-flake contributors</personname></author>
|
|
||||||
<copyright>
|
|
||||||
<year>2023</year>
|
|
||||||
<holder>neovim-flake contributors</holder>
|
|
||||||
</copyright>
|
|
||||||
</info>
|
|
||||||
<xi:include href="man-configuration.xml" />
|
|
||||||
</reference>
|
|
65
docs/manual.nix
Normal file
65
docs/manual.nix
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
{
|
||||||
|
stdenv,
|
||||||
|
lib,
|
||||||
|
documentation-highlighter,
|
||||||
|
nmd,
|
||||||
|
revision,
|
||||||
|
outputPath ? "share/doc/neovim-flake",
|
||||||
|
options,
|
||||||
|
nixos-render-docs,
|
||||||
|
}:
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "neovim-flake-manual";
|
||||||
|
src = ./manual;
|
||||||
|
|
||||||
|
nativeBuildInputs = [nixos-render-docs];
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
mkdir -p out/media
|
||||||
|
|
||||||
|
mkdir -p out/highlightjs
|
||||||
|
cp -t out/highlightjs \
|
||||||
|
${documentation-highlighter}/highlight.pack.js \
|
||||||
|
${documentation-highlighter}/LICENSE \
|
||||||
|
${documentation-highlighter}/mono-blue.css \
|
||||||
|
${documentation-highlighter}/loader.js
|
||||||
|
|
||||||
|
substituteInPlace ./options.md \
|
||||||
|
--replace \
|
||||||
|
'@OPTIONS_JSON@' \
|
||||||
|
${options.neovim-flake}/share/doc/nixos/options.json
|
||||||
|
|
||||||
|
substituteInPlace ./manual.md \
|
||||||
|
--replace \
|
||||||
|
'@VERSION@' \
|
||||||
|
${revision}
|
||||||
|
|
||||||
|
cp -v ${nmd}/static/style.css out/style.css
|
||||||
|
cp -vt out/highlightjs ${nmd}/static/highlightjs/tomorrow-night.min.css
|
||||||
|
cp -v ${./highlight-style.css} out/highlightjs/highlight-style.css
|
||||||
|
|
||||||
|
cp -vr ${./release-notes} release-notes
|
||||||
|
|
||||||
|
nixos-render-docs manual html \
|
||||||
|
--manpage-urls ./manpage-urls.json \
|
||||||
|
--revision ${lib.trivial.revisionWithDefault revision} \
|
||||||
|
--stylesheet style.css \
|
||||||
|
--stylesheet highlightjs/tomorrow-night.min.css \
|
||||||
|
--stylesheet highlightjs/highlight-style.css \
|
||||||
|
--script highlightjs/highlight.pack.js \
|
||||||
|
--script highlightjs/loader.js \
|
||||||
|
--toc-depth 1 \
|
||||||
|
--section-toc-depth 1 \
|
||||||
|
manual.md \
|
||||||
|
out/index.xhtml
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
dest="$out/${outputPath}"
|
||||||
|
mkdir -p "$(dirname "$dest")"
|
||||||
|
mv out "$dest"
|
||||||
|
|
||||||
|
mkdir -p $out/nix-support/
|
||||||
|
echo "doc manual $dest index.html" >> $out/nix-support/hydra-build-products
|
||||||
|
'';
|
||||||
|
}
|
|
@ -1,31 +0,0 @@
|
||||||
<book xmlns="http://docbook.org/ns/docbook"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:xi="http://www.w3.org/2001/XInclude"
|
|
||||||
version="5.0"
|
|
||||||
xml:id="book-neovim-flake-manual">
|
|
||||||
<info>
|
|
||||||
<title>neovim-flake Manual</title>
|
|
||||||
</info>
|
|
||||||
<preface>
|
|
||||||
<title>Preface</title>
|
|
||||||
<para>
|
|
||||||
If you believe your problem is caused by a bug in neovim-flake then please consider reporting it over
|
|
||||||
<link xlink:href="tps://github.com/notashelf/neovim-flake/issues">the neovim-flake issue tracker</link>.
|
|
||||||
Bugfixes, feature additions and upstream changes are welcome over
|
|
||||||
<link xlink:href="https://github.com/notashelf/neovim-flake/pulls">the neovim-flake pull requests tab</link>.
|
|
||||||
</para>
|
|
||||||
</preface>
|
|
||||||
<xi:include href="manual/try-it-out.xml"/>
|
|
||||||
<xi:include href="manual/default-configs.xml"/>
|
|
||||||
<xi:include href="manual/custom-configs.xml"/>
|
|
||||||
<xi:include href="manual/custom-package.xml"/>
|
|
||||||
<xi:include href="manual/custom-plugins.xml"/>
|
|
||||||
<xi:include href="manual/home-manager.xml"/>
|
|
||||||
<xi:include href="manual/languages.xml"/>
|
|
||||||
<xi:include href="manual/hacking.xml"/>
|
|
||||||
<appendix xml:id="ch-options">
|
|
||||||
<title>Configuration Options</title>
|
|
||||||
<xi:include href="nmd-result/neovim-flake-options.xml" xpointer="neovim-flake-options" />
|
|
||||||
</appendix>
|
|
||||||
<xi:include href="release-notes/release-notes.xml"/>
|
|
||||||
</book>
|
|
|
@ -1,23 +1,20 @@
|
||||||
[[ch-custom-configuration]]
|
# Custom Configuration {#ch-custom-configuration}
|
||||||
== Custom Configuration
|
|
||||||
|
|
||||||
Custom configuration is done with the `neovimConfiguration` while using the flake as a standalone package.
|
Custom configuration is done with the `neovimConfiguration` while using the flake as a standalone package.
|
||||||
It takes in the configuration as a module. The output of the configuration function is an attrset.
|
It takes in the configuration as a module. The output of the configuration function is an attrset.
|
||||||
|
|
||||||
[source,nix]
|
```nix
|
||||||
----
|
|
||||||
{
|
{
|
||||||
options = "The options that were available to configure";
|
options = "The options that were available to configure";
|
||||||
config = "The outputted configuration";
|
config = "The outputted configuration";
|
||||||
pkgs = "The package set used to evaluate the module";
|
pkgs = "The package set used to evaluate the module";
|
||||||
neovim = "The built neovim package";
|
neovim = "The built neovim package";
|
||||||
}
|
}
|
||||||
----
|
```
|
||||||
|
|
||||||
The following is an example of a barebones vim configuration with the default theme enabled.
|
The following is an example of a barebones vim configuration with the default theme enabled.
|
||||||
|
|
||||||
[source,nix]
|
```nix
|
||||||
----
|
|
||||||
{
|
{
|
||||||
inputs.neovim-flake = {
|
inputs.neovim-flake = {
|
||||||
url = "github:notashelf/neovim-flake";
|
url = "github:notashelf/neovim-flake";
|
||||||
|
@ -59,10 +56,8 @@ The following is an example of a barebones vim configuration with the default th
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
----
|
```
|
||||||
|
|
||||||
Your built neovim configuration can be exposed as a flake output, or be added to your system packages to make
|
Your built neovim configuration can be exposed as a flake output, or be added to your system packages to make
|
||||||
it available across your system. You may also consider passing the flake output to home-manager to make it available
|
it available across your system. You may also consider passing the flake output to home-manager to make it available
|
||||||
to a specific user *without* using the home-manager module.
|
to a specific user _without_ using the home-manager module.
|
||||||
|
|
||||||
|
|
|
@ -1,14 +1,12 @@
|
||||||
[[ch-custom-package]]
|
# Custom Neovim Package {#ch-custom-package}
|
||||||
== Custom Neovim Package
|
|
||||||
|
|
||||||
As of v0.5, you may now specify the neovim package that will be wrapped with your configuration. This is done with the `vim.package` option.
|
As of v0.5, you may now specify the neovim package that will be wrapped with your configuration. This is done with the `vim.package` option.
|
||||||
|
|
||||||
[source,nix]
|
```nix
|
||||||
----
|
|
||||||
{inputs, pkgs, ...}: {
|
{inputs, pkgs, ...}: {
|
||||||
# using the neovim-nightly overlay
|
# using the neovim-nightly overlay
|
||||||
config.vim.package = inputs.neovim-overlay.packages.${pkgs.system}.neovim;
|
config.vim.package = inputs.neovim-overlay.packages.${pkgs.system}.neovim;
|
||||||
}
|
}
|
||||||
----
|
```
|
||||||
|
|
||||||
The neovim-nightly-overlay always exposes an unwrapped package. If using a different source, you are highly recommended to get an "unwrapped" version of the neovim package,similar to `neovim-unwrapped` in nixpkgs.
|
The neovim-nightly-overlay always exposes an unwrapped package. If using a different source, you are highly recommended to get an "unwrapped" version of the neovim package,similar to `neovim-unwrapped` in nixpkgs.
|
|
@ -1,74 +0,0 @@
|
||||||
[[ch-custom-plugins]]
|
|
||||||
== Custom Plugins
|
|
||||||
|
|
||||||
You can use custom plugins, before they are implemented in the flake.
|
|
||||||
To add a plugin, you need to add it to your config's `config.vim.startPlugins` array.
|
|
||||||
|
|
||||||
[[sec-new-method]]
|
|
||||||
=== New Method
|
|
||||||
As of version 0.5, we have a more extensive API for configuring plugins, under `vim.extraPlugins`.
|
|
||||||
|
|
||||||
Instead of using DAGs exposed by the library, you may use the extra plugin module as follows:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
{
|
|
||||||
config.vim.extraPlugins = with pkgs.vimPlugins; {
|
|
||||||
aerial = {
|
|
||||||
package = aerial-nvim;
|
|
||||||
setup = ''
|
|
||||||
require('aerial').setup {
|
|
||||||
-- some lua configuration here
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
harpoon = {
|
|
||||||
package = harpoon;
|
|
||||||
setup = "require('harpoon').setup {}";
|
|
||||||
after = ["aerial"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
[[sec-old-method]]
|
|
||||||
=== Old Method
|
|
||||||
Users who have not yet updated to 0.5, or prefer a more hands-on approach may use the old method where the load order
|
|
||||||
of the plugins is determined by DAGs.
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
{
|
|
||||||
# fetch plugin source from GitHub and add it to startPlugins
|
|
||||||
config.vim.startPlugins = [
|
|
||||||
(pkgs.fetchFromGitHub {
|
|
||||||
owner = "FrenzyExists";
|
|
||||||
repo = "aquarium-vim";
|
|
||||||
rev = "d09b1feda1148797aa5ff0dbca8d8e3256d028d5";
|
|
||||||
sha256 = "CtyEhCcGxxok6xFQ09feWpdEBIYHH+GIFVOaNZx10Bs=";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
However, just making the plugin available might not be enough. In that case, you can write custom vimscript
|
|
||||||
or lua config, using `config.vim.configRC` or `config.vim.luaConfigRC` respectively.
|
|
||||||
These options are attribute sets, and you need to give the configuration you're adding some name, like this:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
{
|
|
||||||
# this will create an "aquarium" section in your init.vim with the contents of your custom config
|
|
||||||
# which will be *appended* to the rest of your configuration, inside your init.vim
|
|
||||||
config.vim.configRC.aquarium = "colorscheme aquiarum";
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
Note: If your configuration needs to be put in a specific place in the config, you can use functions from
|
|
||||||
`inputs.neovim-flake.lib.nvim.dag` to order it.
|
|
||||||
Refer to https://github.com/nix-community/home-manager/blob/master/modules/lib/dag.nix to find out more about
|
|
||||||
the DAG system.
|
|
||||||
|
|
||||||
Also, if you successfully made your plugin work, please make a PR to add it to the flake, or open an issue
|
|
||||||
with your findings so that we can make it available for everyone easily.
|
|
10
docs/manual/custom-plugins.md
Normal file
10
docs/manual/custom-plugins.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Custom Plugins {#ch-custom-plugins}
|
||||||
|
|
||||||
|
You can use custom plugins, before they are implemented in the flake.
|
||||||
|
To add a plugin, you need to add it to your config's `config.vim.startPlugins` array.
|
||||||
|
|
||||||
|
```{=include=} sections
|
||||||
|
custom-plugins/new-method.md
|
||||||
|
custom-plugins/old-method.md
|
||||||
|
custom-plugins/configuring.md
|
||||||
|
```
|
23
docs/manual/custom-plugins/configuring.md
Normal file
23
docs/manual/custom-plugins/configuring.md
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# Configuring {#configuring-plugins}
|
||||||
|
|
||||||
|
Just making the plugin to your neovim configuration available might not always be enough.
|
||||||
|
In that case, you can write custom vimscript or lua config, using `config.vim.configRC` or `config.vim.luaConfigRC`
|
||||||
|
respectively. These options are attribute sets, and you need to give the configuration you're adding some name, like this:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
# this will create an "aquarium" section in your init.vim with the contents of your custom config
|
||||||
|
# which will be *appended* to the rest of your configuration, inside your init.vim
|
||||||
|
config.vim.configRC.aquarium = "colorscheme aquiarum";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
:::{.note}
|
||||||
|
If your configuration needs to be put in a specific place in the config, you can use functions from
|
||||||
|
`inputs.neovim-flake.lib.nvim.dag` to order it.
|
||||||
|
Refer to https://github.com/nix-community/home-manager/blob/master/modules/lib/dag.nix to find out more about
|
||||||
|
the DAG system.
|
||||||
|
:::
|
||||||
|
|
||||||
|
Also, if you successfully made your plugin work, please make a PR to add it to the flake, or open an issue
|
||||||
|
with your findings so that we can make it available for everyone easily.
|
26
docs/manual/custom-plugins/new-method.md
Normal file
26
docs/manual/custom-plugins/new-method.md
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# New Method {#sec-new-method}
|
||||||
|
|
||||||
|
As of version 0.5, we have a more extensive API for configuring plugins, under `vim.extraPlugins`.
|
||||||
|
|
||||||
|
Instead of using DAGs exposed by the library, you may use the extra plugin module as follows:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
config.vim.extraPlugins = with pkgs.vimPlugins; {
|
||||||
|
aerial = {
|
||||||
|
package = aerial-nvim;
|
||||||
|
setup = ''
|
||||||
|
require('aerial').setup {
|
||||||
|
-- some lua configuration here
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
harpoon = {
|
||||||
|
package = harpoon;
|
||||||
|
setup = "require('harpoon').setup {}";
|
||||||
|
after = ["aerial"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
18
docs/manual/custom-plugins/old-method.md
Normal file
18
docs/manual/custom-plugins/old-method.md
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# Old Method {#sec-old-method}
|
||||||
|
|
||||||
|
Users who have not yet updated to 0.5, or prefer a more hands-on approach may use the old method where the load order
|
||||||
|
of the plugins is determined by DAGs.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
# fetch plugin source from GitHub and add it to startPlugins
|
||||||
|
config.vim.startPlugins = [
|
||||||
|
(pkgs.fetchFromGitHub {
|
||||||
|
owner = "FrenzyExists";
|
||||||
|
repo = "aquarium-vim";
|
||||||
|
rev = "d09b1feda1148797aa5ff0dbca8d8e3256d028d5";
|
||||||
|
sha256 = "CtyEhCcGxxok6xFQ09feWpdEBIYHH+GIFVOaNZx10Bs=";
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
|
```
|
|
@ -1,36 +0,0 @@
|
||||||
[[ch-default-configs]]
|
|
||||||
== Default Configs
|
|
||||||
|
|
||||||
While you can configure neovim-flake yourself using the builder, here are a few default configurations you can use.
|
|
||||||
|
|
||||||
[[sec-default-tidal]]
|
|
||||||
=== Tidal Cycles
|
|
||||||
|
|
||||||
[source,console]
|
|
||||||
$ nix run github:notashelf/neovim-flake#tidal file.tidal
|
|
||||||
|
|
||||||
Utilizing https://github.com/tidalcycles/vim-tidal[vim-tidal] and mitchmindtree's fantastic https://github.com/mitchmindtree/tidalcycles.nix[tidalcycles.nix] start playing with tidal cycles in a single command.
|
|
||||||
|
|
||||||
In your tidal file, type a cycle e.g. `d1 $ s "drum"` and then press _ctrl+enter_. Super collider with superdirt, and a modified GHCI with tidal will start up and begin playing. Note, you need jack enabled on your system. If you are using pipewire, its as easy as setting `services.pipewire.jack.enable = true`.
|
|
||||||
|
|
||||||
|
|
||||||
[[sec-default-nix]]
|
|
||||||
=== Nix
|
|
||||||
|
|
||||||
[source,console]
|
|
||||||
$ nix run github:notashelf/neovim-flake#nix test.nix
|
|
||||||
|
|
||||||
Enables all the of neovim plugins, with language support for specifically Nix. This lets you see what a fully configured neovim setup looks like without downloading a whole bunch of language servers and associated tools.
|
|
||||||
|
|
||||||
[[sec-default-maximal]]
|
|
||||||
=== Maximal
|
|
||||||
|
|
||||||
[source,console]
|
|
||||||
$ nix shell github:notashelf/neovim-flake#maximal test.nix
|
|
||||||
|
|
||||||
It is the same fully configured neovim as with the <<sec-default-nix,Nix>> config, but with every supported language enabled.
|
|
||||||
|
|
||||||
[NOTE]
|
|
||||||
====
|
|
||||||
Running the maximal config will download *a lot* of packages as it is downloading language servers, formatters, and more.
|
|
||||||
====
|
|
10
docs/manual/default-configs.md
Normal file
10
docs/manual/default-configs.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Default Configs {#ch-default-configs}
|
||||||
|
|
||||||
|
While you can configure neovim-flake yourself using the builder, you can also use the pre-built configs that are available.
|
||||||
|
Here are a few default configurations you can use.
|
||||||
|
|
||||||
|
```{=include=} sections
|
||||||
|
default-configs/maximal.md
|
||||||
|
default-configs/nix.md
|
||||||
|
default-configs/tidal.md
|
||||||
|
```
|
13
docs/manual/default-configs/maximal.md
Normal file
13
docs/manual/default-configs/maximal.md
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# Maximal {#sec-default-maximal}
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ nix shell github:notashelf/neovim-flake#maximal test.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
It is the same fully configured neovim as with the [Nix](#sec-default-nix) config, but with every supported language enabled.
|
||||||
|
|
||||||
|
:::{.note}
|
||||||
|
|
||||||
|
Running the maximal config will download _a lot_ of packages as it is downloading language servers, formatters, and more.
|
||||||
|
|
||||||
|
:::
|
7
docs/manual/default-configs/nix.md
Normal file
7
docs/manual/default-configs/nix.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Nix {#sec-default-nix}
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ nix run github:notashelf/neovim-flake#nix test.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
Enables all the of neovim plugins, with language support for specifically Nix. This lets you see what a fully configured neovim setup looks like without downloading a whole bunch of language servers and associated tools.
|
12
docs/manual/default-configs/tidal.md
Normal file
12
docs/manual/default-configs/tidal.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Tidal Cycles {#sec-default-tidal}
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ nix run github:notashelf/neovim-flake#tidal file.tidal
|
||||||
|
```
|
||||||
|
|
||||||
|
Utilizing [vim-tidal](https://github.com/tidalcycles/vim-tidal) and mitchmindtree's fantastic
|
||||||
|
[tidalcycles.nix](https://github.com/mitchmindtree/tidalcycles.nix) start playing with tidal cycles in a single command.
|
||||||
|
|
||||||
|
In your tidal file, type a cycle e.g. `d1 $ s "drum"` and then press _ctrl+enter_. Super collider with superdirt, and a
|
||||||
|
modified GHCI with tidal will start up and begin playing. Note, you need jack enabled on your system. If you are using
|
||||||
|
pipewire, its as easy as setting `services.pipewire.jack.enable = true` in your configuration.
|
|
@ -1,412 +0,0 @@
|
||||||
[[ch-hacking]]
|
|
||||||
== Hacking neovim-flake
|
|
||||||
|
|
||||||
neovim-flake is designed for developers as much as it is for the end user. I would like any potential contributor
|
|
||||||
to be able to propagate their desired changes into the repository without the extra effort. As such, below are guides
|
|
||||||
(and guidelines) to streamline the contribution process and ensure that your valuable input seamlessly integrates
|
|
||||||
into neovim-flake's development without leaving question marks in your head.
|
|
||||||
|
|
||||||
:fork-a-repo: https://help.github.com/articles/fork-a-repo/
|
|
||||||
:open-issues: https://github.com/notashelf/neovim-flake/issues
|
|
||||||
:new-issue: https://github.com/notashelf/neovim-flake/issues/new
|
|
||||||
:seven-rules: https://cbea.ms/git-commit/#seven-rules
|
|
||||||
:example-commit-message: https://github.com/nix-community/home-manager/commit/69f8e47e9e74c8d3d060ca22e18246b7f7d988ef
|
|
||||||
|
|
||||||
This section is mainly directed towards those who wish to contribute code into neovim-flake. If you wish to instead
|
|
||||||
report a bug or discuss a potential feature implementation, first look among the already {open-issues}[open issues] and
|
|
||||||
if no matching issue exists you may open a {new-issue}[new issue] and describe your problem/request. While creating an
|
|
||||||
issue, please try to include as much information as you can, ideally also include relevant context in which an issue
|
|
||||||
occurs or a feature should be implemented.
|
|
||||||
|
|
||||||
[[sec-contrib-getting-started]]
|
|
||||||
=== Getting started
|
|
||||||
|
|
||||||
You naturally would like to start by forking the repository. If you are new to git, have a look at GitHub's
|
|
||||||
{fork-a-repo}[Fork a repo guide] for instructions on how you can do this. Once you have a fork of neovim-flake
|
|
||||||
you should create a branch starting at the most recent `main` branch.
|
|
||||||
Give your branch a reasonably descriptive name, suffixed by its type - i.e `feature/debugger` or `fix/pesky-bug`.
|
|
||||||
|
|
||||||
Implement your changes and commit them to the newly created branch and when you are happy with the result and positive
|
|
||||||
that it fulfills <<sec-guidelines>>. Once you are confident everything is in order, push the branch to GitHub and
|
|
||||||
{create-a-pull-request}[create a pull request], following the template that you will be prompted to fill.
|
|
||||||
|
|
||||||
[[sec-guidelines]]
|
|
||||||
=== Guidelines
|
|
||||||
:assertions: https://nixos.org/manual/nixos/stable/index.html#sec-assertions
|
|
||||||
:discussions-tab: https://github.com/NotAShelf/neovim-flake/discussions
|
|
||||||
|
|
||||||
If your contribution tightly follows the guidelines, then there is a good chance it will be merged without too much
|
|
||||||
trouble. Some of the guidelines will be strictly enforced, others will remain as gentle nudges towards the correct
|
|
||||||
direction. As we have no automated system enforcing those guidelines, please try to double check your changes before
|
|
||||||
making your pull request in order to avoid "faulty" code slipping by.
|
|
||||||
|
|
||||||
If you are uncertain how these rules affect the change you would like to make then feel free to start a
|
|
||||||
discussion in the {discussions-tab}[discussions tab] ideally (but not necessarily) before you start developing.
|
|
||||||
|
|
||||||
[[sec-documentation]]
|
|
||||||
==== Add adequate documentation
|
|
||||||
:nixpkgs-markdown: https://nixos.org/manual/nixpkgs/unstable/#sec-contributing-markup
|
|
||||||
:docbook: https://tdg.docbook.org/
|
|
||||||
:asciidoc: https://asciidoc.org/
|
|
||||||
|
|
||||||
Most, if not all, changes warrant changes to the documentation. Module options should be documented with
|
|
||||||
{nixpkgs-markdown}[Nixpkgs-flavoured Markdown], albeit with exceptions.
|
|
||||||
neovim-flake is itself documented using a combination of {docbook}[DocBook] and {asciidoc}[AsciiDoc] conventions.
|
|
||||||
|
|
||||||
The HTML version of this manual containing both the module option descriptions and the documentation of neovim-flake
|
|
||||||
(such as this page) can be generated and opened by typing the following in a shell within a clone of the
|
|
||||||
neovim-flake Git repository:
|
|
||||||
|
|
||||||
[source,console]
|
|
||||||
----
|
|
||||||
$ nix build .#docs-html
|
|
||||||
$ xdg-open ./result/share/doc/neovim-flake/index.html
|
|
||||||
----
|
|
||||||
|
|
||||||
[[sec-guidelines-code-style]]
|
|
||||||
==== Format your code
|
|
||||||
|
|
||||||
Make sure your code is formatted as described in <<sec-code-style>>. To maintain consistency throughout the project
|
|
||||||
you are encouraged to browse through existing code and adopt its style also in new code.
|
|
||||||
|
|
||||||
[[sec-guidelines-commit-message-style]]
|
|
||||||
==== Format your commit messages
|
|
||||||
|
|
||||||
Similar to <<sec-guidelines-code-style>> we encourage a consistent commit message format as described
|
|
||||||
in <<sec-commit-style>>.
|
|
||||||
|
|
||||||
[[sec-commit-style]]
|
|
||||||
==== Commits
|
|
||||||
|
|
||||||
The commits in your pull request should be reasonably self-contained. Which means each and every commit in
|
|
||||||
a pull request should make sense both on its own and in general context. That is, a second commit should not resolve
|
|
||||||
an issue that is introduced in an earlier commit. In particular, you will be asked to amend any commit that
|
|
||||||
introduces syntax errors or similar problems even if they are fixed in a later commit.
|
|
||||||
|
|
||||||
The commit messages should follow the {seven-rules}[seven rules], except for "Capitalize the subject line".
|
|
||||||
We also ask you to include the affected code component or module in the first line.
|
|
||||||
A commit message ideally, but not necessarily, follow the given template from home-manager's own documentation
|
|
||||||
|
|
||||||
----
|
|
||||||
{component}: {description}
|
|
||||||
|
|
||||||
{long description}
|
|
||||||
----
|
|
||||||
|
|
||||||
where `{component}` refers to the code component (or module) your change affects, `{description}` is a very brief
|
|
||||||
description of your change, and `{long description}` is an optional clarifying description. As a rare exception, if
|
|
||||||
there is no clear component, or your change affects many components, then the `{component}` part is optional.
|
|
||||||
See <<ex-commit-message>> for a commit message that fulfills these requirements.
|
|
||||||
|
|
||||||
[[ex-commit-message]]
|
|
||||||
.Compliant commit message
|
|
||||||
===============================================================================
|
|
||||||
The commit {example-commit-message}[69f8e47e9e74c8d3d060ca22e18246b7f7d988ef] contains the commit message
|
|
||||||
|
|
||||||
----
|
|
||||||
starship: allow running in Emacs if vterm is used
|
|
||||||
|
|
||||||
The vterm buffer is backed by libvterm and can handle Starship prompts
|
|
||||||
without issues.
|
|
||||||
----
|
|
||||||
===============================================================================
|
|
||||||
|
|
||||||
Long description can be ommitted if the change is too simple to warrant it. A minor fix in spelling or a formatting
|
|
||||||
change does not warrant long description, however, a module addition or removal does as you would like to provide the
|
|
||||||
relevant context for your changes.
|
|
||||||
|
|
||||||
Finally, when adding a new module, say `modules/foo.nix`, we use the fixed commit format `foo: add module`.
|
|
||||||
You can, of course, still include a long description if you wish.
|
|
||||||
|
|
||||||
In case of nested modules, i.e `modules/languages/java.nix` you are recommended to contain the parent as well - for
|
|
||||||
example `languages/java: some major change`.
|
|
||||||
|
|
||||||
|
|
||||||
[[sec-code-style]]
|
|
||||||
==== Code Style
|
|
||||||
:alejandra: https://github.com/kamadorueda/alejandra
|
|
||||||
|
|
||||||
**Treewide**
|
|
||||||
Keep lines at a reasonable width, ideally 80 characters or less. This also applies to string literals and module
|
|
||||||
descriptions and documentation.
|
|
||||||
|
|
||||||
**Nix**
|
|
||||||
neovim-flake is formatted by the {alejandra}[alejandra] tool and the formatting is checked in the pull
|
|
||||||
request and push workflows. Run the `nix fmt` command inside the project repository before submitting your
|
|
||||||
pull request.
|
|
||||||
|
|
||||||
While Alejandra is mostly opinionated on how code looks after formatting, certain changes are done at the
|
|
||||||
user's discretion based on how the original code was structured.
|
|
||||||
|
|
||||||
Please use one line code for attribute sets that contain only one subset.
|
|
||||||
For example:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
# parent modules should always be unfolded
|
|
||||||
# which means module = { value = ... } instead of module.value = { ... }
|
|
||||||
module = {
|
|
||||||
value = mkEnableOption "some description" // { default = true; }; # merges can be done inline where possible
|
|
||||||
|
|
||||||
# same as parent modules, unfold submodules
|
|
||||||
subModule = {
|
|
||||||
# this is an option that contains more than one nested value
|
|
||||||
someOtherValue = mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
description = "Some other description"
|
|
||||||
default = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
If you move a line down after the merge operator, Alejandra will automatically unfold the whole merged attrset
|
|
||||||
for you, which we **do not** want.
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
module = {
|
|
||||||
key = mkEnableOption "some description" // {
|
|
||||||
default = true; # we want this to be inline
|
|
||||||
};
|
|
||||||
# ...
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
For lists, it is mostly up to your own discretion how you want to format them, but please try to unfold lists if
|
|
||||||
they contain multiple items and especially if they are to include comments.
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
# this is ok
|
|
||||||
acceptableList = [
|
|
||||||
item1 # comment
|
|
||||||
item2
|
|
||||||
item3 # some other comment
|
|
||||||
item4
|
|
||||||
];
|
|
||||||
|
|
||||||
# this is not ok
|
|
||||||
listToBeAvoided = [item1 item2 /* comment */ item3 item4];
|
|
||||||
|
|
||||||
# this is ok
|
|
||||||
singleItemList = [item1];
|
|
||||||
----
|
|
||||||
|
|
||||||
[[sec-testing]]
|
|
||||||
=== Testing Your Changes
|
|
||||||
|
|
||||||
Once you have made your changes, you will need to test them throughly. If it is a module, add your module option to
|
|
||||||
`configuration.nix` (located in the root of this project) inside `neovimConfiguration`. Enable it, and then run the
|
|
||||||
maximal configuration with `nix run .#maximal -Lv` to check for build errors. If neovim opens in the current directory
|
|
||||||
without any error messages (you can check the output of `:messages` inside neovim to see if there are any errors), then
|
|
||||||
your changes are good to go. Open your pull request, and it will be reviewed as soon as posssible.
|
|
||||||
|
|
||||||
If it is not a new module, but a change to an existing one, then make sure the module you have changed is enabled in the
|
|
||||||
maximal configuration by editing `configuration.nix`, and then run it with `nix run .#maximal -Lv`. Same procedure as
|
|
||||||
adding a new module will apply here.
|
|
||||||
|
|
||||||
[[sec-keybinds]]
|
|
||||||
=== Keybinds
|
|
||||||
|
|
||||||
As of 0.4, there exists an API for writing your own keybinds and a couple of useful utility functions are available in
|
|
||||||
the https://github.com/NotAShelf/neovim-flake/tree/main/lib[extended standard library]. The following section contains
|
|
||||||
a general overview to how you may utilize said functions.
|
|
||||||
|
|
||||||
[[sec-custom-key-mappings]]
|
|
||||||
==== Custom Key Mappings Support for a Plugin
|
|
||||||
|
|
||||||
:maps: https://notashelf.github.io/neovim-flake/options.html#opt-vim.maps.command._name_.action
|
|
||||||
|
|
||||||
To set a mapping, you should define it in `vim.maps.<<mode>>`.
|
|
||||||
The available modes are:
|
|
||||||
|
|
||||||
* normal
|
|
||||||
* insert
|
|
||||||
* select
|
|
||||||
* visual
|
|
||||||
* terminal
|
|
||||||
* normalVisualOp
|
|
||||||
* visualOnly
|
|
||||||
* operator
|
|
||||||
* insertCommand
|
|
||||||
* lang
|
|
||||||
* command
|
|
||||||
|
|
||||||
An example, simple keybinding, can look like this:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
{
|
|
||||||
vim.maps.normal = {
|
|
||||||
"<leader>wq" = {
|
|
||||||
action = ":wq<CR>";
|
|
||||||
silent = true;
|
|
||||||
desc = "Save file and quit";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
There are many settings available in the options. Please refer to the {maps}[documentation] to see a list of them.
|
|
||||||
|
|
||||||
`neovim-flake` provides a list of helper commands, so that you don't have to write the mapping attribute sets every
|
|
||||||
time:
|
|
||||||
|
|
||||||
* `mkBinding = key: action: desc:` - makes a basic binding, with `silent` set to true.
|
|
||||||
* `mkExprBinding = key: action: desc:` - makes an expression binding, with `lua`, `silent`, and `expr` set to true.
|
|
||||||
* `mkLuaBinding = key: action: desc:` - makes an expression binding, with `lua`, and `silent` set to true.
|
|
||||||
|
|
||||||
Note that the Lua in these bindings is actual Lua, not pasted into a `:lua` command.
|
|
||||||
Therefore, you either pass in a function like `require('someplugin').some_function`, without actually calling it,
|
|
||||||
or you define your own function, like `function() require('someplugin').some_function() end`.
|
|
||||||
|
|
||||||
Additionally, to not have to repeat the descriptions, there's another utility function with its own set of functions:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
# Utility function that takes two attrsets:
|
|
||||||
# { someKey = "some_value" } and
|
|
||||||
# { someKey = { description = "Some Description"; }; }
|
|
||||||
# and merges them into
|
|
||||||
# { someKey = { value = "some_value"; description = "Some Description"; }; }
|
|
||||||
|
|
||||||
addDescriptionsToMappings = actualMappings: mappingDefinitions:
|
|
||||||
----
|
|
||||||
|
|
||||||
This function can be used in combination with the same `mkBinding` functions as above, except they only take two
|
|
||||||
arguments - `binding` and `action`, and have different names:
|
|
||||||
|
|
||||||
* `mkSetBinding = binding: action:` - makes a basic binding, with `silent` set to true.
|
|
||||||
* `mkSetExprBinding = binding: action:` - makes an expression binding, with `lua`, `silent`, and `expr` set to true.
|
|
||||||
* `mkSetLuaBinding = binding: action:` - makes an expression binding, with `lua`, and `silent` set to true.
|
|
||||||
|
|
||||||
You can read the source code of some modules to see them in action, but their usage should look something like this:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
# plugindefinition.nix
|
|
||||||
{lib, ...}:
|
|
||||||
with lib; {
|
|
||||||
options.vim.plugin = {
|
|
||||||
enable = mkEnableOption "Enable plugin";
|
|
||||||
|
|
||||||
# Mappings should always be inside an attrset called mappings
|
|
||||||
mappings = {
|
|
||||||
# mkMappingOption is a helper function from lib,
|
|
||||||
# that takes a description (which will also appear in which-key),
|
|
||||||
# and a default mapping (which can be null)
|
|
||||||
toggleCurrentLine = mkMappingOption "Toggle current line comment" "gcc";
|
|
||||||
toggleCurrentBlock = mkMappingOption "Toggle current block comment" "gbc";
|
|
||||||
|
|
||||||
toggleOpLeaderLine = mkMappingOption "Toggle line comment" "gc";
|
|
||||||
toggleOpLeaderBlock = mkMappingOption "Toggle block comment" "gb";
|
|
||||||
|
|
||||||
toggleSelectedLine = mkMappingOption "Toggle selected comment" "gc";
|
|
||||||
toggleSelectedBlock = mkMappingOption "Toggle selected block" "gb";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
# config.nix
|
|
||||||
{
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib;
|
|
||||||
with builtins; let
|
|
||||||
cfg = config.vim.plugin;
|
|
||||||
self = import ./plugindefinition.nix {inherit lib;};
|
|
||||||
mappingDefinitions = self.options.vim.plugin;
|
|
||||||
|
|
||||||
# addDescriptionsToMappings is a helper function from lib,
|
|
||||||
# that merges mapping values and their descriptions
|
|
||||||
# into one nice attribute set
|
|
||||||
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
|
||||||
in {
|
|
||||||
config = mkIf (cfg.enable) {
|
|
||||||
# ...
|
|
||||||
|
|
||||||
vim.maps.normal = mkMerge [
|
|
||||||
# mkSetBinding is another helper function from lib,
|
|
||||||
# that actually adds the mapping with a description.
|
|
||||||
(mkSetBinding mappings.findFiles "<cmd> Telescope find_files<CR>")
|
|
||||||
(mkSetBinding mappings.liveGrep "<cmd> Telescope live_grep<CR>")
|
|
||||||
(mkSetBinding mappings.buffers "<cmd> Telescope buffers<CR>")
|
|
||||||
(mkSetBinding mappings.helpTags "<cmd> Telescope help_tags<CR>")
|
|
||||||
(mkSetBinding mappings.open "<cmd> Telescope<CR>")
|
|
||||||
|
|
||||||
(mkSetBinding mappings.gitCommits "<cmd> Telescope git_commits<CR>")
|
|
||||||
(mkSetBinding mappings.gitBufferCommits "<cmd> Telescope git_bcommits<CR>")
|
|
||||||
(mkSetBinding mappings.gitBranches "<cmd> Telescope git_branches<CR>")
|
|
||||||
(mkSetBinding mappings.gitStatus "<cmd> Telescope git_status<CR>")
|
|
||||||
(mkSetBinding mappings.gitStash "<cmd> Telescope git_stash<CR>")
|
|
||||||
|
|
||||||
(mkIf config.vim.lsp.enable (mkMerge [
|
|
||||||
(mkSetBinding mappings.lspDocumentSymbols "<cmd> Telescope lsp_document_symbols<CR>")
|
|
||||||
(mkSetBinding mappings.lspWorkspaceSymbols "<cmd> Telescope lsp_workspace_symbols<CR>")
|
|
||||||
|
|
||||||
(mkSetBinding mappings.lspReferences "<cmd> Telescope lsp_references<CR>")
|
|
||||||
(mkSetBinding mappings.lspImplementations "<cmd> Telescope lsp_implementations<CR>")
|
|
||||||
(mkSetBinding mappings.lspDefinitions "<cmd> Telescope lsp_definitions<CR>")
|
|
||||||
(mkSetBinding mappings.lspTypeDefinitions "<cmd> Telescope lsp_type_definitions<CR>")
|
|
||||||
(mkSetBinding mappings.diagnostics "<cmd> Telescope diagnostics<CR>")
|
|
||||||
]))
|
|
||||||
|
|
||||||
(
|
|
||||||
mkIf config.vim.treesitter.enable
|
|
||||||
(mkSetBinding mappings.treesitter "<cmd> Telescope treesitter<CR>")
|
|
||||||
)
|
|
||||||
];
|
|
||||||
|
|
||||||
# ...
|
|
||||||
};
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
[NOTE]
|
|
||||||
====
|
|
||||||
If you have come across a plugin that has an API that doesn't seem to easily allow custom keybindings,
|
|
||||||
don't be scared to implement a draft PR. We'll help you get it done.
|
|
||||||
====
|
|
||||||
|
|
||||||
[[sec-additional-plugins]]
|
|
||||||
=== Adding Plugins
|
|
||||||
|
|
||||||
To add a new neovim plugin, first add the source url in the inputs section of `flake.nix`
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
{
|
|
||||||
inputs = {
|
|
||||||
# ...
|
|
||||||
neodev-nvim = {
|
|
||||||
url = "github:folke/neodev.nvim";
|
|
||||||
flake = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
----
|
|
||||||
|
|
||||||
Then add the name of the plugin into the `availablePlugins` variable in `lib/types/plugins.nix`:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
# ...
|
|
||||||
availablePlugins = [
|
|
||||||
# ...
|
|
||||||
"neodev-nvim"
|
|
||||||
];
|
|
||||||
----
|
|
||||||
|
|
||||||
You can now reference this plugin using its string name:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
config.vim.startPlugins = ["neodev-nvim"];
|
|
||||||
----
|
|
21
docs/manual/hacking.md
Normal file
21
docs/manual/hacking.md
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# Hacking neovim-flake {#ch-hacking}
|
||||||
|
|
||||||
|
neovim-flake is designed for developers as much as it is for the end user. I would like any potential contributor
|
||||||
|
to be able to propagate their desired changes into the repository without the extra effort. As such, below are guides
|
||||||
|
(and guidelines) to streamline the contribution process and ensure that your valuable input seamlessly integrates
|
||||||
|
into neovim-flake's development without leaving question marks in your head.
|
||||||
|
|
||||||
|
This section is mainly directed towards those who wish to contribute code into neovim-flake. If you wish to instead
|
||||||
|
report a bug or discuss a potential feature implementation, first look among the
|
||||||
|
already [open issues](https://github.com/notashelf/neovim-flake/issues) and if no matching issue exists you may open
|
||||||
|
a [new issue](https://github.com/notashelf/neovim-flake/issues/new) and describe your problem/request. While creating an
|
||||||
|
issue, please try to include as much information as you can, ideally also include relevant context in which an issue
|
||||||
|
occurs or a feature should be implemented.
|
||||||
|
|
||||||
|
```{=include=} sections
|
||||||
|
hacking/getting-started.md
|
||||||
|
hacking/guidelines.md
|
||||||
|
hacking/testing.md
|
||||||
|
hacking/keybinds.md
|
||||||
|
hacking/additional-plugins.md
|
||||||
|
```
|
33
docs/manual/hacking/additional-plugins.md
Normal file
33
docs/manual/hacking/additional-plugins.md
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# Adding Plugins {#sec-additional-plugins}
|
||||||
|
|
||||||
|
To add a new neovim plugin, first add the source url in the inputs section of `flake.nix`
|
||||||
|
|
||||||
|
```nix
|
||||||
|
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
# ...
|
||||||
|
neodev-nvim = {
|
||||||
|
url = "github:folke/neodev.nvim";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
# ...
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Then add the name of the plugin into the `availablePlugins` variable in `lib/types/plugins.nix`:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# ...
|
||||||
|
availablePlugins = [
|
||||||
|
# ...
|
||||||
|
"neodev-nvim"
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
You can now reference this plugin using its string name:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
config.vim.startPlugins = ["neodev-nvim"];
|
||||||
|
```
|
10
docs/manual/hacking/getting-started.md
Normal file
10
docs/manual/hacking/getting-started.md
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
# Getting Started {#sec-contrib-getting-started}
|
||||||
|
|
||||||
|
You naturally would like to start by forking the repository. If you are new to git, have a look at GitHub's
|
||||||
|
[Fork a repo guide](https://help.github.com/articles/fork-a-repo/) for instructions on how you can do this. Once you have a fork of neovim-flake
|
||||||
|
you should create a branch starting at the most recent `main` branch.
|
||||||
|
Give your branch a reasonably descriptive name, suffixed by its type - i.e `feature/debugger` or `fix/pesky-bug`.
|
||||||
|
|
||||||
|
Implement your changes and commit them to the newly created branch and when you are happy with the result and positive
|
||||||
|
that it fulfills [Guidelines](#sec-guidelines). Once you are confident everything is in order, push the branch to GitHub and
|
||||||
|
[create a pull request](https://help.github.com/articles/creating-a-pull-request), following the template that you will be prompted to fill.
|
158
docs/manual/hacking/guidelines.md
Normal file
158
docs/manual/hacking/guidelines.md
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
# Guidelines {#sec-guidelines}
|
||||||
|
|
||||||
|
If your contribution tightly follows the guidelines, then there is a good chance it will be merged without too much
|
||||||
|
trouble. Some of the guidelines will be strictly enforced, others will remain as gentle nudges towards the correct
|
||||||
|
direction. As we have no automated system enforcing those guidelines, please try to double check your changes before
|
||||||
|
making your pull request in order to avoid "faulty" code slipping by.
|
||||||
|
|
||||||
|
If you are uncertain how these rules affect the change you would like to make then feel free to start a
|
||||||
|
discussion in the [discussions tab](https://github.com/NotAShelf/neovim-flake/discussions) ideally (but not necessarily)
|
||||||
|
before you start developing.
|
||||||
|
|
||||||
|
## Adding Documentation {#sec-guidelines-documentation}
|
||||||
|
|
||||||
|
Most, if not all, changes warrant changes to the documentation. Module options should be documented with
|
||||||
|
[Nixpkgs-flavoured Markdown](https://nixos.org/manual/nixpkgs/unstable/#sec-contributing-markup), albeit with exceptions.
|
||||||
|
|
||||||
|
:::{.note}
|
||||||
|
|
||||||
|
As of v0.5, neovim-flake is itself documented using full markdown in both module options and the manual. With
|
||||||
|
v0.6, this manual has also been converted to markdown in full.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
The HTML version of this manual containing both the module option descriptions and the documentation of neovim-flake
|
||||||
|
(such as this page) can be generated and opened by typing the following in a shell within a clone of the
|
||||||
|
neovim-flake Git repository:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ nix build .#docs-html
|
||||||
|
$ xdg-open $PWD/result/share/doc/neovim-flake/index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
## Formatting Code {#sec-guidelines-formatting}
|
||||||
|
|
||||||
|
Make sure your code is formatted as described in [code-style section](#sec-guidelines-code-style). To maintain consistency throughout
|
||||||
|
the project you are encouraged to browse through existing code and adopt its style also in new code.
|
||||||
|
|
||||||
|
## Formatting Commits {#sec-guidelines-commit-message-style}
|
||||||
|
|
||||||
|
Similar to [code style guidelines](#sec-guidelines-code-style) we encourage a consistent commit message format as described
|
||||||
|
in [commit style guidelines](#sec-guidelines-commit-style).
|
||||||
|
|
||||||
|
## Commit Style {#sec-guidelines-commit-style}
|
||||||
|
|
||||||
|
The commits in your pull request should be reasonably self-contained. Which means each and every commit in
|
||||||
|
a pull request should make sense both on its own and in general context. That is, a second commit should not resolve
|
||||||
|
an issue that is introduced in an earlier commit. In particular, you will be asked to amend any commit that
|
||||||
|
introduces syntax errors or similar problems even if they are fixed in a later commit.
|
||||||
|
|
||||||
|
The commit messages should follow the [seven rules](https://chris.beams.io/posts/git-commit/#seven-rule),
|
||||||
|
except for "Capitalize the subject line". We also ask you to include the affected code component or module in
|
||||||
|
the first line. A commit message ideally, but not necessarily, follow the given template from home-manager's own documentation
|
||||||
|
|
||||||
|
```
|
||||||
|
{component}: {description}
|
||||||
|
|
||||||
|
{long description}
|
||||||
|
```
|
||||||
|
|
||||||
|
where `{component}` refers to the code component (or module) your change affects, `{description}` is a very brief
|
||||||
|
description of your change, and `{long description}` is an optional clarifying description. As a rare exception, if
|
||||||
|
there is no clear component, or your change affects many components, then the `{component}` part is optional.
|
||||||
|
See [example commit message](#sec-guidelines-ex-commit-message) for a commit message that fulfills these requirements.
|
||||||
|
|
||||||
|
## Example Commit {#sec-guidelines-ex-commit-message}
|
||||||
|
|
||||||
|
The commit [69f8e47e9e74c8d3d060ca22e18246b7f7d988ef](https://github.com/nix-community/home-manager/commit/69f8e47e9e74c8d3d060ca22e18246b7f7d988ef) contains the commit message
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
starship: allow running in Emacs if vterm is used
|
||||||
|
|
||||||
|
The vterm buffer is backed by libvterm and can handle Starship prompts
|
||||||
|
without issues.
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Long description can be ommitted if the change is too simple to warrant it. A minor fix in spelling or a formatting
|
||||||
|
change does not warrant long description, however, a module addition or removal does as you would like to provide the
|
||||||
|
relevant context for your changes.
|
||||||
|
|
||||||
|
Finally, when adding a new module, say `modules/foo.nix`, we use the fixed commit format `foo: add module`.
|
||||||
|
You can, of course, still include a long description if you wish.
|
||||||
|
|
||||||
|
In case of nested modules, i.e `modules/languages/java.nix` you are recommended to contain the parent as well - for
|
||||||
|
example `languages/java: some major change`.
|
||||||
|
|
||||||
|
## Code Style {#sec-guidelines-code-style}
|
||||||
|
|
||||||
|
**Treewide**
|
||||||
|
Keep lines at a reasonable width, ideally 80 characters or less. This also applies to string literals and module
|
||||||
|
descriptions and documentation.
|
||||||
|
|
||||||
|
**Nix**
|
||||||
|
neovim-flake is formatted by the [alejandra](https://github.com/kamadorueda/alejandra) tool and the formatting is checked in the pull
|
||||||
|
request and push workflows. Run the `nix fmt` command inside the project repository before submitting your
|
||||||
|
pull request.
|
||||||
|
|
||||||
|
While Alejandra is mostly opinionated on how code looks after formatting, certain changes are done at the
|
||||||
|
user's discretion based on how the original code was structured.
|
||||||
|
|
||||||
|
Please use one line code for attribute sets that contain only one subset.
|
||||||
|
For example:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
# parent modules should always be unfolded
|
||||||
|
# which means module = { value = ... } instead of module.value = { ... }
|
||||||
|
module = {
|
||||||
|
value = mkEnableOption "some description" // { default = true; }; # merges can be done inline where possible
|
||||||
|
|
||||||
|
# same as parent modules, unfold submodules
|
||||||
|
subModule = {
|
||||||
|
# this is an option that contains more than one nested value
|
||||||
|
someOtherValue = mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
description = "Some other description";
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you move a line down after the merge operator, Alejandra will automatically unfold the whole merged attrset
|
||||||
|
for you, which we **do not** want.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
module = {
|
||||||
|
key = mkEnableOption "some description" // {
|
||||||
|
default = true; # we want this to be inline
|
||||||
|
}; # ...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
For lists, it is mostly up to your own discretion how you want to format them, but please try to unfold lists if
|
||||||
|
they contain multiple items and especially if they are to include comments.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
|
||||||
|
# this is ok
|
||||||
|
|
||||||
|
acceptableList = [
|
||||||
|
item1 # comment
|
||||||
|
item2
|
||||||
|
item3 # some other comment
|
||||||
|
item4
|
||||||
|
];
|
||||||
|
|
||||||
|
# this is not ok
|
||||||
|
listToBeAvoided = [item1 item2 /* comment */ item3 item4];
|
||||||
|
|
||||||
|
# this is ok
|
||||||
|
acceptableList = [item1];
|
||||||
|
|
||||||
|
# this is not ok
|
||||||
|
listToBeAvoided = [
|
||||||
|
item1
|
||||||
|
];
|
||||||
|
```
|
166
docs/manual/hacking/keybinds.md
Normal file
166
docs/manual/hacking/keybinds.md
Normal file
|
@ -0,0 +1,166 @@
|
||||||
|
# Keybinds {#sec-keybinds}
|
||||||
|
|
||||||
|
As of 0.4, there exists an API for writing your own keybinds and a couple of useful utility functions are available in
|
||||||
|
the [extended standard library](https://github.com/NotAShelf/neovim-flake/tree/main/lib). The following section contains
|
||||||
|
a general overview to how you may utilize said functions.
|
||||||
|
|
||||||
|
## Custom Key Mappings Support for a Plugin {#sec-custom-key-mappings}
|
||||||
|
|
||||||
|
To set a mapping, you should define it in `vim.maps.<<mode>>`.
|
||||||
|
The available modes are:
|
||||||
|
|
||||||
|
- normal
|
||||||
|
- insert
|
||||||
|
- select
|
||||||
|
- visual
|
||||||
|
- terminal
|
||||||
|
- normalVisualOp
|
||||||
|
- visualOnly
|
||||||
|
- operator
|
||||||
|
- insertCommand
|
||||||
|
- lang
|
||||||
|
- command
|
||||||
|
|
||||||
|
An example, simple keybinding, can look like this:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{
|
||||||
|
vim.maps.normal = {
|
||||||
|
"<leader>wq" = {
|
||||||
|
action = ":wq<CR>";
|
||||||
|
silent = true;
|
||||||
|
desc = "Save file and quit";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
There are many settings available in the options. Please refer to the
|
||||||
|
[documentation](https://notashelf.github.io/neovim-flake/options.html#opt-vim.maps.command._name_.action)
|
||||||
|
to see a list of them.
|
||||||
|
|
||||||
|
`neovim-flake` provides a list of helper commands, so that you don't have to write the mapping attribute sets every
|
||||||
|
time:
|
||||||
|
|
||||||
|
- `mkBinding = key: action: desc:` - makes a basic binding, with `silent` set to true.
|
||||||
|
- `mkExprBinding = key: action: desc:` - makes an expression binding, with `lua`, `silent`, and `expr` set to true.
|
||||||
|
- `mkLuaBinding = key: action: desc:` - makes an expression binding, with `lua`, and `silent` set to true.
|
||||||
|
|
||||||
|
Note that the Lua in these bindings is actual Lua, not pasted into a `:lua` command.
|
||||||
|
Therefore, you either pass in a function like `require('someplugin').some_function`, without actually calling it,
|
||||||
|
or you define your own function, like `function() require('someplugin').some_function() end`.
|
||||||
|
|
||||||
|
Additionally, to not have to repeat the descriptions, there's another utility function with its own set of functions:
|
||||||
|
|
||||||
|
Utility function that takes two attrsets:
|
||||||
|
|
||||||
|
- `{ someKey = "some_value" }`
|
||||||
|
- `{ someKey = { description = "Some Description"; }; }`
|
||||||
|
|
||||||
|
and merges them into `{ someKey = { value = "some_value"; description = "Some Description"; }; }`
|
||||||
|
|
||||||
|
```
|
||||||
|
addDescriptionsToMappings = actualMappings: mappingDefinitions:
|
||||||
|
```
|
||||||
|
|
||||||
|
This function can be used in combination with the same `mkBinding` functions as above, except they only take two
|
||||||
|
arguments - `binding` and `action`, and have different names:
|
||||||
|
|
||||||
|
- `mkSetBinding = binding: action:` - makes a basic binding, with `silent` set to true.
|
||||||
|
- `mkSetExprBinding = binding: action:` - makes an expression binding, with `lua`, `silent`, and `expr` set to true.
|
||||||
|
- `mkSetLuaBinding = binding: action:` - makes an expression binding, with `lua`, and `silent` set to true.
|
||||||
|
|
||||||
|
You can read the source code of some modules to see them in action, but their usage should look something like this:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
|
||||||
|
# plugindefinition.nix
|
||||||
|
{lib, ...}: with lib; {
|
||||||
|
options.vim.plugin = {
|
||||||
|
enable = mkEnableOption "Enable plugin";
|
||||||
|
|
||||||
|
# Mappings should always be inside an attrset called mappings
|
||||||
|
mappings = {
|
||||||
|
# mkMappingOption is a helper function from lib,
|
||||||
|
# that takes a description (which will also appear in which-key),
|
||||||
|
# and a default mapping (which can be null)
|
||||||
|
toggleCurrentLine = mkMappingOption "Toggle current line comment" "gcc";
|
||||||
|
toggleCurrentBlock = mkMappingOption "Toggle current block comment" "gbc";
|
||||||
|
|
||||||
|
toggleOpLeaderLine = mkMappingOption "Toggle line comment" "gc";
|
||||||
|
toggleOpLeaderBlock = mkMappingOption "Toggle block comment" "gb";
|
||||||
|
|
||||||
|
toggleSelectedLine = mkMappingOption "Toggle selected comment" "gc";
|
||||||
|
toggleSelectedBlock = mkMappingOption "Toggle selected block" "gb";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```nix
|
||||||
|
|
||||||
|
# config.nix
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib;
|
||||||
|
with builtins; let
|
||||||
|
cfg = config.vim.plugin;
|
||||||
|
self = import ./plugindefinition.nix {inherit lib;};
|
||||||
|
mappingDefinitions = self.options.vim.plugin;
|
||||||
|
|
||||||
|
# addDescriptionsToMappings is a helper function from lib,
|
||||||
|
# that merges mapping values and their descriptions
|
||||||
|
# into one nice attribute set
|
||||||
|
mappings = addDescriptionsToMappings cfg.mappings mappingDefinitions;
|
||||||
|
in {
|
||||||
|
config = mkIf (cfg.enable) {
|
||||||
|
# ...
|
||||||
|
vim.maps.normal = mkMerge [
|
||||||
|
# mkSetBinding is another helper function from lib,
|
||||||
|
# that actually adds the mapping with a description.
|
||||||
|
(mkSetBinding mappings.findFiles "<cmd> Telescope find_files<CR>")
|
||||||
|
(mkSetBinding mappings.liveGrep "<cmd> Telescope live_grep<CR>")
|
||||||
|
(mkSetBinding mappings.buffers "<cmd> Telescope buffers<CR>")
|
||||||
|
(mkSetBinding mappings.helpTags "<cmd> Telescope help_tags<CR>")
|
||||||
|
(mkSetBinding mappings.open "<cmd> Telescope<CR>")
|
||||||
|
|
||||||
|
(mkSetBinding mappings.gitCommits "<cmd> Telescope git_commits<CR>")
|
||||||
|
(mkSetBinding mappings.gitBufferCommits "<cmd> Telescope git_bcommits<CR>")
|
||||||
|
(mkSetBinding mappings.gitBranches "<cmd> Telescope git_branches<CR>")
|
||||||
|
(mkSetBinding mappings.gitStatus "<cmd> Telescope git_status<CR>")
|
||||||
|
(mkSetBinding mappings.gitStash "<cmd> Telescope git_stash<CR>")
|
||||||
|
|
||||||
|
(mkIf config.vim.lsp.enable (mkMerge [
|
||||||
|
(mkSetBinding mappings.lspDocumentSymbols "<cmd> Telescope lsp_document_symbols<CR>")
|
||||||
|
(mkSetBinding mappings.lspWorkspaceSymbols "<cmd> Telescope lsp_workspace_symbols<CR>")
|
||||||
|
|
||||||
|
(mkSetBinding mappings.lspReferences "<cmd> Telescope lsp_references<CR>")
|
||||||
|
(mkSetBinding mappings.lspImplementations "<cmd> Telescope lsp_implementations<CR>")
|
||||||
|
(mkSetBinding mappings.lspDefinitions "<cmd> Telescope lsp_definitions<CR>")
|
||||||
|
(mkSetBinding mappings.lspTypeDefinitions "<cmd> Telescope lsp_type_definitions<CR>")
|
||||||
|
(mkSetBinding mappings.diagnostics "<cmd> Telescope diagnostics<CR>")
|
||||||
|
]))
|
||||||
|
|
||||||
|
(
|
||||||
|
mkIf config.vim.treesitter.enable
|
||||||
|
(mkSetBinding mappings.treesitter "<cmd> Telescope treesitter<CR>")
|
||||||
|
)
|
||||||
|
];
|
||||||
|
# ...
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
:::{.note}
|
||||||
|
|
||||||
|
If you have come across a plugin that has an API that doesn't seem to easily allow custom keybindings,
|
||||||
|
don't be scared to implement a draft PR. We'll help you get it done.
|
||||||
|
|
||||||
|
:::
|
11
docs/manual/hacking/testing.md
Normal file
11
docs/manual/hacking/testing.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
# Testing Changes {#sec-testing-changes}
|
||||||
|
|
||||||
|
Once you have made your changes, you will need to test them throughly. If it is a module, add your module option to
|
||||||
|
`configuration.nix` (located in the root of this project) inside `neovimConfiguration`. Enable it, and then run the
|
||||||
|
maximal configuration with `nix run .#maximal -Lv` to check for build errors. If neovim opens in the current directory
|
||||||
|
without any error messages (you can check the output of `:messages` inside neovim to see if there are any errors), then
|
||||||
|
your changes are good to go. Open your pull request, and it will be reviewed as soon as posssible.
|
||||||
|
|
||||||
|
If it is not a new module, but a change to an existing one, then make sure the module you have changed is enabled in the
|
||||||
|
maximal configuration by editing `configuration.nix`, and then run it with `nix run .#maximal -Lv`. Same procedure as
|
||||||
|
adding a new module will apply here.
|
|
@ -1,13 +1,11 @@
|
||||||
[[ch-hm-module]]
|
# Home Manager {#ch-hm-module}
|
||||||
== Home Manager
|
|
||||||
|
|
||||||
The Home Manager module allows us to customize the different `vim` options from inside the home-manager configuration
|
The Home Manager module allows us to customize the different `vim` options from inside the home-manager configuration
|
||||||
and it is the preferred way of configuring neovim-flake, both on NixOS and non-NixOS systems.
|
and it is the preferred way of configuring neovim-flake, both on NixOS and non-NixOS systems.
|
||||||
|
|
||||||
To use it, we first add the input flake.
|
To use it, we first add the input flake.
|
||||||
|
|
||||||
[source,nix]
|
```nix
|
||||||
----
|
|
||||||
{
|
{
|
||||||
neovim-flake = {
|
neovim-flake = {
|
||||||
url = github:notashelf/neovim-flake;
|
url = github:notashelf/neovim-flake;
|
||||||
|
@ -17,22 +15,20 @@ To use it, we first add the input flake.
|
||||||
# i.e inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- obsidian nvim needs to be in your inputs
|
# i.e inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- obsidian nvim needs to be in your inputs
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
----
|
```
|
||||||
|
|
||||||
Followed by importing the home-manager module somewhere in your configuration.
|
Followed by importing the home-manager module somewhere in your configuration.
|
||||||
|
|
||||||
[source,nix]
|
```nix
|
||||||
----
|
|
||||||
{
|
{
|
||||||
# assuming neovim-flake is in your inputs and inputs is in the argset
|
# assuming neovim-flake is in your inputs and inputs is in the argset
|
||||||
imports = [ inputs.neovim-flake.homeManagerModules.default ];
|
imports = [ inputs.neovim-flake.homeManagerModules.default ];
|
||||||
}
|
}
|
||||||
----
|
```
|
||||||
|
|
||||||
An example installation for standalone home-manager would look like this:
|
An example installation for standalone home-manager would look like this:
|
||||||
|
|
||||||
[source,nix]
|
```nix
|
||||||
----
|
|
||||||
{
|
{
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
@ -52,14 +48,12 @@ An example installation for standalone home-manager would look like this:
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
----
|
```
|
||||||
|
|
||||||
Once the module is imported, we will be able to define the following options (and much more) from inside the
|
Once the module is imported, we will be able to define the following options (and much more) from inside the
|
||||||
home-manager configuration.
|
home-manager configuration.
|
||||||
|
|
||||||
[source,nix]
|
```nix{
|
||||||
----
|
|
||||||
{
|
|
||||||
programs.neovim-flake = {
|
programs.neovim-flake = {
|
||||||
|
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -74,12 +68,8 @@ home-manager configuration.
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
----
|
```
|
||||||
|
|
||||||
[NOTE]
|
|
||||||
====
|
|
||||||
You may find all avaliable options in the https://notashelf.github.io/neovim-flake/options[appendix]
|
|
||||||
====
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
:::{.note}
|
||||||
|
You may find all avaliable options in the [appendix](https://notashelf.github.io/neovim-flake/options)
|
||||||
|
:::
|
|
@ -1,40 +0,0 @@
|
||||||
[[ch-languages]]
|
|
||||||
== Language Support
|
|
||||||
|
|
||||||
Language specific support means there is a combination of language specific plugins, `treesitter` support, `nvim-lspconfig` language servers, and `null-ls` integration. This gets you capabilities ranging from autocompletion to formatting to diagnostics. The following languages have sections under the `vim.languages` attribute. See the configuration docs for details.
|
|
||||||
|
|
||||||
* Rust: <<opt-vim.languages.rust.enable>>
|
|
||||||
* Nix: <<opt-vim.languages.nix.enable>>
|
|
||||||
* SQL: <<opt-vim.languages.sql.enable>>
|
|
||||||
* C/C++: <<opt-vim.languages.clang.enable>>
|
|
||||||
* Typescript/Javascript: <<opt-vim.languages.ts.enable>>
|
|
||||||
* Python: <<opt-vim.languages.python.enable>>:
|
|
||||||
* Zig: <<opt-vim.languages.zig.enable>>
|
|
||||||
* Markdown: <<opt-vim.languages.markdown.enable>>
|
|
||||||
* HTML: <<opt-vim.languages.html.enable>>
|
|
||||||
* SQL: <<opt-vim.languages.sql.enable>>
|
|
||||||
* Dart: <<opt-vim.languages.dart.enable>>
|
|
||||||
* Go: <<opt-vim.languages.go.enable>>
|
|
||||||
* Lua: <<opt-vim.languages.lua.enable>>
|
|
||||||
* PHP: <<opt-vim.languages.php.enable>>
|
|
||||||
|
|
||||||
Adding support for more languages, and improving support for existing ones are great places
|
|
||||||
where you can contribute with a PR.
|
|
||||||
|
|
||||||
=== LSP Custom Packages/Command
|
|
||||||
|
|
||||||
In any of the `opt.languages.<language>.lsp.package` options you can provide your own LSP package, or provide
|
|
||||||
the command to launch the language server, as a list of strings.
|
|
||||||
|
|
||||||
You can use this to skip automatic installation of a language server, and instead
|
|
||||||
use the one found in your `$PATH` during runtime, for example:
|
|
||||||
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
vim.languages.java = {
|
|
||||||
lsp = {
|
|
||||||
enable = true;
|
|
||||||
package = ["jdt-language-server" "-data" "~/.cache/jdtls/workspace"];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
----
|
|
24
docs/manual/languages.md
Normal file
24
docs/manual/languages.md
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# Language Support {#ch-languages}
|
||||||
|
|
||||||
|
Language specific support means there is a combination of language specific plugins, `treesitter` support, `nvim-lspconfig` language servers, and `null-ls` integration. This gets you capabilities ranging from autocompletion to formatting to diagnostics. The following languages have sections under the `vim.languages` attribute. See the configuration docs for details.
|
||||||
|
|
||||||
|
- Rust: [vim.languages.rust.enable](#opt-vim.languages.rust.enable)
|
||||||
|
- Nix: [vim.languages.nix.enable](#opt-vim.languages.nix.enable)
|
||||||
|
- SQL: [vim.languages.sql.enable](#opt-vim.languages.sql.enable)
|
||||||
|
- C/C++: [vim.languages.clang.enable](#opt-vim.languages.clang.enable)
|
||||||
|
- Typescript/Javascript: [vim.languages.ts.enable](#opt-vim.languages.ts.enable)
|
||||||
|
- Python: [vim.languages.python.enable](#opt-vim.languages.python.enable):
|
||||||
|
- Zig: [vim.languages.zig.enable](#opt-vim.languages.zig.enable)
|
||||||
|
- Markdown: [vim.languages.markdown.enable](#opt-vim.languages.markdown.enable)
|
||||||
|
- HTML: [vim.languages.html.enable](#opt-vim.languages.html.enable)
|
||||||
|
- Dart: [vim.languages.dart.enable](#opt-vim.languages.dart.enable)
|
||||||
|
- Go: [vim.languages.go.enable](#opt-vim.languages.go.enable)
|
||||||
|
- Lua: [vim.languages.lua.enable](#opt-vim.languages.lua.enable)
|
||||||
|
- PHP: [vim.languages.php.enable](#opt-vim.languages.php.enable)
|
||||||
|
|
||||||
|
Adding support for more languages, and improving support for existing ones are great places
|
||||||
|
where you can contribute with a PR.
|
||||||
|
|
||||||
|
```{=include=} sections
|
||||||
|
languages/lsp.md
|
||||||
|
```
|
16
docs/manual/languages/lsp.md
Normal file
16
docs/manual/languages/lsp.md
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
# LSP Custom Packages/Command {#sec-languages-custom-lsp-packages}
|
||||||
|
|
||||||
|
In any of the `opt.languages.<language>.lsp.package` options you can provide your own LSP package, or provide
|
||||||
|
the command to launch the language server, as a list of strings.
|
||||||
|
|
||||||
|
You can use this to skip automatic installation of a language server, and instead
|
||||||
|
use the one found in your `$PATH` during runtime, for example:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
vim.languages.java = {
|
||||||
|
lsp = {
|
||||||
|
enable = true;
|
||||||
|
package = ["jdt-language-server" "-data" "~/.cache/jdtls/workspace"];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
3
docs/manual/manpage-urls.json
Normal file
3
docs/manual/manpage-urls.json
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"nix.conf(5)": "https://nixos.org/manual/nix/stable/command-ref/conf-file.html"
|
||||||
|
}
|
26
docs/manual/manual.md
Normal file
26
docs/manual/manual.md
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# neovim-flake-manual {#neovim-flake-manual}
|
||||||
|
|
||||||
|
## Version @VERSION@
|
||||||
|
|
||||||
|
```{=include=} preface
|
||||||
|
preface.md
|
||||||
|
try-it-out.md
|
||||||
|
```
|
||||||
|
|
||||||
|
```{=include=} parts
|
||||||
|
custom-configs.md
|
||||||
|
custom-package.md
|
||||||
|
custom-plugins.md
|
||||||
|
default-configs.md
|
||||||
|
home-manager.md
|
||||||
|
languages.md
|
||||||
|
hacking.md
|
||||||
|
```
|
||||||
|
|
||||||
|
```{=include=} appendix html:into-file=//options.html
|
||||||
|
options.md
|
||||||
|
```
|
||||||
|
|
||||||
|
```{=include=} appendix html:into-file=//release-notes.html
|
||||||
|
release-notes/release-notes.md
|
||||||
|
```
|
7
docs/manual/options.md
Normal file
7
docs/manual/options.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Neovim Flake Configuration Options {#ch-options}
|
||||||
|
|
||||||
|
```{=include=} options
|
||||||
|
id-prefix: opt-
|
||||||
|
list-id: neovim-flake-options
|
||||||
|
source: @OPTIONS_JSON@
|
||||||
|
```
|
6
docs/manual/preface.md
Normal file
6
docs/manual/preface.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Preface {#sec-preface}
|
||||||
|
|
||||||
|
If you noticed a bug caused by neovim-flake then please consider reporting it over
|
||||||
|
[the neovim-flake issue tracker](https://github.com/notashelf/neovim-flake/issues).
|
||||||
|
Bugfixes, feature additions and upstreamed changes are welcome over
|
||||||
|
[the neovim-flake pull requests tab](https://github.com/notashelf/neovim-flake/pulls).
|
|
@ -1,53 +1,47 @@
|
||||||
[[ch-try-it-out]]
|
# Try it out {#ch-try-it-out}
|
||||||
== Try it out
|
|
||||||
|
|
||||||
Thanks to the portability of Nix, you can try out neovim-flake without actually installing it to your machine.
|
Thanks to the portability of Nix, you can try out neovim-flake without actually installing it to your machine.
|
||||||
Below are the commands you may run to try out different configurations provided by this flake. As of v0.5, three
|
Below are the commands you may run to try out different configurations provided by this flake. As of v0.5, three
|
||||||
configurations are provided:
|
configurations are provided:
|
||||||
|
|
||||||
* Nix
|
- Nix
|
||||||
* Tidal
|
- Tidal
|
||||||
* Maximal
|
- Maximal
|
||||||
|
|
||||||
You may try out any of the provided configurations using the `nix run` command on a system where Nix is installed.
|
You may try out any of the provided configurations using the `nix run` command on a system where Nix is installed.
|
||||||
|
|
||||||
[source,console]
|
```console
|
||||||
----
|
|
||||||
$ cachix use neovim-flake # Optional: it'll save you CPU resources and time
|
$ cachix use neovim-flake # Optional: it'll save you CPU resources and time
|
||||||
$ nix run github:notashelf/neovim-flake#nix # will run the default minimal configuration
|
$ nix run github:notashelf/neovim-flake#nix # will run the default minimal configuration
|
||||||
----
|
```
|
||||||
|
|
||||||
Do keep in mind that this is **susceptible to garbage collection** meaning it will be removed from your Nix store
|
Do keep in mind that this is **susceptible to garbage collection** meaning it will be removed from your Nix store
|
||||||
once you garbage collect. If you wish to install neovim-flake, please take a look at
|
once you garbage collect. If you wish to install neovim-flake, please take a look at
|
||||||
<<ch-custom-configuration,custom-configuration>> or <<ch-hm-module,home-manager>> sections for installation
|
[custom-configuration](#ch-custom-configuration) or [home-manager](#ch-hm-module) sections for installation
|
||||||
instructions.
|
instructions.
|
||||||
|
|
||||||
[[sec-using-prebuild-configs]]
|
## Using Prebuilt Configs {#sec-using-prebuild-configs}
|
||||||
=== Using Prebuilt Configs
|
|
||||||
|
|
||||||
[source,console]
|
```console
|
||||||
----
|
|
||||||
$ nix run github:notashelf/neovim-flake#nix
|
$ nix run github:notashelf/neovim-flake#nix
|
||||||
$ nix run github:notashelf/neovim-flake#tidal
|
$ nix run github:notashelf/neovim-flake#tidal
|
||||||
$ nix run github:notashelf/neovim-flake#maximal
|
$ nix run github:notashelf/neovim-flake#maximal
|
||||||
----
|
```
|
||||||
|
|
||||||
|
### Available Configs {#sec-available-configs}
|
||||||
|
|
||||||
[[sec-available-configs]]
|
#### Nix {#sec-configs-nix}
|
||||||
=== Available Configs
|
|
||||||
|
|
||||||
==== Nix
|
|
||||||
|
|
||||||
`Nix` configuration by default provides LSP/diagnostic support for Nix alongisde a set of visual and functional plugins.
|
`Nix` configuration by default provides LSP/diagnostic support for Nix alongisde a set of visual and functional plugins.
|
||||||
By running `nix run .`, which is the default package, you will build Neovim with this config.
|
By running `nix run .`, which is the default package, you will build Neovim with this config.
|
||||||
|
|
||||||
==== Tidal
|
#### Tidal {#sec-configs-tidal}
|
||||||
|
|
||||||
Tidal is an alternative config that adds vim-tidal on top of the plugins from the Nix configuration.
|
Tidal is an alternative config that adds vim-tidal on top of the plugins from the Nix configuration.
|
||||||
|
|
||||||
==== Maximal
|
#### Maximal {#sec-configs-maximal}
|
||||||
|
|
||||||
`Maximal` is the ultimate configuration that will enable support for more commonly used language as well as additional
|
`Maximal` is the ultimate configuration that will enable support for more commonly used language as well as additional
|
||||||
complementary plugins. Keep in mind, however, that this will pull a lot of dependencies.
|
complementary plugins. Keep in mind, however, that this will pull a lot of dependencies.
|
||||||
|
|
||||||
You are *strongly* recommended to use the binary cache if you would like to try the Maximal configuration.
|
You are _strongly_ recommended to use the binary cache if you would like to try the Maximal configuration.
|
29
docs/neovim-flake.1
Normal file
29
docs/neovim-flake.1
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
.Dd January 1, 1980
|
||||||
|
.Dt neovim-flake 1
|
||||||
|
.Os neovim-flake
|
||||||
|
.\" disable hyphenation
|
||||||
|
.nh
|
||||||
|
.\" disable justification (adjust text to left margin only)
|
||||||
|
.ad l
|
||||||
|
.\" enable line breaks after slashes
|
||||||
|
.cflags 4 /
|
||||||
|
.Sh NAME
|
||||||
|
.Nm neovim-flake
|
||||||
|
.Nd a extensible and distro-agonistic Neovim configuration wrapper in Nix
|
||||||
|
.
|
||||||
|
.Sh BUGS
|
||||||
|
.Pp
|
||||||
|
Please report any bugs on the
|
||||||
|
\m[blue]\fBproject issue tracker\fR\m[]\&.
|
||||||
|
|
||||||
|
.Sh AUTHOR
|
||||||
|
.Pp
|
||||||
|
\fBneovim-flake contributors\fR
|
||||||
|
.RS 4
|
||||||
|
Author.
|
||||||
|
.RE
|
||||||
|
|
||||||
|
.Sh COPYRIGHT
|
||||||
|
.br
|
||||||
|
Copyright \(co 2017\(en2022 neovim-flake contributors
|
||||||
|
.br
|
|
@ -1,14 +0,0 @@
|
||||||
[[ch-release-notes]]
|
|
||||||
[appendix]
|
|
||||||
== Release Notes
|
|
||||||
|
|
||||||
This section lists the release notes for tagged version of neovim-flake and current main.
|
|
||||||
|
|
||||||
:leveloffset: 1
|
|
||||||
|
|
||||||
include::rl-0.1.adoc[]
|
|
||||||
include::rl-0.2.adoc[]
|
|
||||||
include::rl-0.3.adoc[]
|
|
||||||
include::rl-0.4.adoc[]
|
|
||||||
include::rl-0.5.adoc[]
|
|
||||||
include::rl-0.6.adoc[]
|
|
12
docs/release-notes/release-notes.md
Normal file
12
docs/release-notes/release-notes.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Release Notes {#ch-release-notes}
|
||||||
|
|
||||||
|
This section lists the release notes for tagged version of neovim-flake and current main.
|
||||||
|
|
||||||
|
```{=include=} chapters
|
||||||
|
rl-0.1.md
|
||||||
|
rl-0.2.md
|
||||||
|
rl-0.3.md
|
||||||
|
rl-0.4.md
|
||||||
|
rl-0.5.md
|
||||||
|
rl-0.6.md
|
||||||
|
```
|
|
@ -1,32 +0,0 @@
|
||||||
[[sec-release-0.1]]
|
|
||||||
== Release 0.1
|
|
||||||
|
|
||||||
This is the current master branch and information here is not final. These are changes from the v0.01 tag.
|
|
||||||
|
|
||||||
Special thanks to https://github.com/nix-community/home-manager/[home-manager] for this release. Docs/manual generation, the new module evaluation system, and DAG implementation are from them.
|
|
||||||
|
|
||||||
[[sec-release-0.1-changelog]]
|
|
||||||
=== Changelog
|
|
||||||
|
|
||||||
https://github.com/jordanisaacs[jordanisaacs]:
|
|
||||||
|
|
||||||
* Removed hare language support (lsp/tree-sitter/etc). `vim.lsp.hare` is no longer defined. If you use hare and would like it added back, please file an issue.
|
|
||||||
|
|
||||||
* <<opt-vim.startPlugins>> & <<opt-vim.optPlugins>> are now an enum of `string` for options sourced from the flake inputs. Users can still provide vim plugin packages.
|
|
||||||
+
|
|
||||||
If you are contributing and adding a new plugin, add the plugin name to `availablePlugins` in https://github.com/jordanisaacs/neovim-flake/blob/20cec032bd74bc3d20ac17ce36cd84786a04fd3e/modules/lib/types-plugin.nix[types-plugin.nix].
|
|
||||||
|
|
||||||
* `neovimBuilder` has been removed for configuration. Using an overlay is no longer required. See the manual for the new way to configuration.
|
|
||||||
|
|
||||||
* Treesitter grammars are now configurable with <<opt-vim.treesitter.grammars>>. Utilizes the nixpkgs `nvim-treesitter` plugin rather than a custom input in order to take advantage of build support of pinned versions. See https://discourse.nixos.org/t/psa-if-you-are-on-unstable-try-out-nvim-treesitter-withallgrammars/23321?u=snowytrees[discourse] for more information. Packages can be found under the `vimPlugins.nvim-treesitter.builtGrammars` namespace.
|
|
||||||
|
|
||||||
* <<opt-vim.configRC>> and <<opt-vim.luaConfigRC>> are now of type DAG lines. This allows for ordering of the config. Usage is the same is in home-manager's `home.activation` option.
|
|
||||||
+
|
|
||||||
[source,nix]
|
|
||||||
----
|
|
||||||
vim.luaConfigRC = lib.nvim.dag.entryAnywhere "config here"
|
|
||||||
----
|
|
||||||
|
|
||||||
https://github.com/MoritzBoehme[MoritzBoehme]:
|
|
||||||
|
|
||||||
* `catppuccin` theme is now available as a neovim theme <<opt-vim.theme.style>> and lualine theme <<opt-vim.statusline.lualine.theme>>.
|
|
40
docs/release-notes/rl-0.1.md
Normal file
40
docs/release-notes/rl-0.1.md
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
# Release 0.1 {#sec-release-0.1}
|
||||||
|
|
||||||
|
This is the current master branch and information here is not final. These are changes from the v0.01 tag.
|
||||||
|
|
||||||
|
Special thanks to [home-manager](https://github.com/nix-community/home-manager/) for this release.
|
||||||
|
Docs/manual generation, the new module evaluation system, and DAG implementation are from them.
|
||||||
|
|
||||||
|
## Changelog {#sec-release-0.1-changelog}
|
||||||
|
|
||||||
|
[jordanisaacs](https://github.com/jordanisaacs):
|
||||||
|
|
||||||
|
- Removed hare language support (lsp/tree-sitter/etc). `vim.lsp.hare` is no longer defined.
|
||||||
|
If you use hare and would like it added back, please file an issue.
|
||||||
|
|
||||||
|
- [vim.stratPlugins](opt-vim.startPlugins) & [vim.optPlugins](opt-vim.optPlugins) are now
|
||||||
|
an enum of `string` for options sourced from the flake inputs. Users can still provide vim
|
||||||
|
plugin packages.
|
||||||
|
|
||||||
|
- If you are contributing and adding a new plugin, add the plugin name to `availablePlugins` in
|
||||||
|
[types-plugin.nix](https://github.com/jordanisaacs/neovim-flake/blob/20cec032bd74bc3d20ac17ce36cd84786a04fd3e/modules/lib/types-plugin.nix).
|
||||||
|
|
||||||
|
- `neovimBuilder` has been removed for configuration. Using an overlay is no longer required.
|
||||||
|
See the manual for the new way to configuration.
|
||||||
|
|
||||||
|
- Treesitter grammars are now configurable with [vim.treesitter.grammars](opt-vim.treesitter.grammars).
|
||||||
|
Utilizes the nixpkgs `nvim-treesitter` plugin rather than a custom input in order to take advantage of build support of pinned versions.
|
||||||
|
See [relevant discourse post](https://discourse.nixos.org/t/psa-if-you-are-on-unstable-try-out-nvim-treesitter-withallgrammars/23321?u=snowytrees)
|
||||||
|
for more information. Packages can be found under the `vimPlugins.nvim-treesitter.builtGrammars` namespace.
|
||||||
|
|
||||||
|
- [vim.configRC](opt-vim.configRC) and [vim.luaConfigRC](opt-vim.luaConfigRC) are now of type DAG lines.
|
||||||
|
This allows for ordering of the config. Usage is the same is in home-manager's `home.activation` option.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
vim.luaConfigRC = lib.nvim.dag.entryAnywhere "config here"
|
||||||
|
```
|
||||||
|
|
||||||
|
[MoritzBoehme](https://github.com/MoritzBoehme):
|
||||||
|
|
||||||
|
- `catppuccin` theme is now available as a neovim theme [vim.theme.style](opt-vim.theme.style) and lualine theme
|
||||||
|
[vim.statusline.lualine.theme](opt-vim.statusline.lualine.theme).
|
|
@ -1,46 +0,0 @@
|
||||||
[[sec-release-0.2]]
|
|
||||||
== Release 0.2
|
|
||||||
|
|
||||||
Release notes for release 0.2
|
|
||||||
|
|
||||||
|
|
||||||
[[sec-release-0.2-changelog]]
|
|
||||||
=== Changelog
|
|
||||||
|
|
||||||
https://github.com/notashelf[notashelf]:
|
|
||||||
|
|
||||||
* Added two minimap plugins under `vim.minimap`. `codewindow.nvim` is enabled by default, while `minimap.vim` is available with its code-minimap dependency.
|
|
||||||
|
|
||||||
* A complementary plugin, `obsidian.nvim` and the Neovim alternative for Emacs' orgmode with `orgmode.nvim` have been added. Both will be disabled by default.
|
|
||||||
|
|
||||||
* Smooth scrolling for ANY movement command is now available with `cinnamon.nvim`
|
|
||||||
|
|
||||||
* You will now notice a dashboard on startup. This is provided by the `alpha.nvim` plugin. You can use any of the three available dashboard plugins, or disable them entirely.
|
|
||||||
|
|
||||||
* There is now a scrollbar on active buffers, which can highlight errors by hooking to your LSPs. This is on by default, but can be toggled off under `vim.visuals` if seen necessary.
|
|
||||||
|
|
||||||
* Discord Rich Presence has been added through `presence.nvim` for those who want to flex that they are using the *superior* text editor.
|
|
||||||
|
|
||||||
* An icon picker is now available with telescope integration. You can use `:IconPickerInsert` or `:IconPickerYank` to add icons to your code.
|
|
||||||
|
|
||||||
* A general purpose cheatsheet has been added through `cheatsheet.nvim`. Forget no longer!
|
|
||||||
|
|
||||||
* `ccc.nvim` has been added to the default plugins to allow picking colors with ease.
|
|
||||||
|
|
||||||
* Most UI components of Neovim have been replaced through the help of `noice.nvim`. There are also notifications and custom UI elements available for Neovim messages and prompts.
|
|
||||||
|
|
||||||
* A (floating by default) terminal has been added through `toggleterm.nvim`.
|
|
||||||
|
|
||||||
* Harness the power of ethical (`tabnine.nvim`) and not-so-ethical (`copilot.lua`) AI by those new assistant plugins. Both are off by default, TabNine needs to be wrapped before it's working.
|
|
||||||
|
|
||||||
* Experimental mouse gestures have been addede through `gesture.nvim`. See plugin page and the relevant module for more details on how to use.
|
|
||||||
|
|
||||||
* Re-open last visited buffers via `nvim-session-manager`. Disabled by default as deleting buffers seems to be problematic at the moment.
|
|
||||||
|
|
||||||
* Most of NvimTree's configuration options have been changed with some options being toggled to off by default.
|
|
||||||
|
|
||||||
* Lualine had its configuration simplified and style toned down. Less color, more info.
|
|
||||||
|
|
||||||
* Modules where multiple plugin configurations were in the same directory have been simplified. Each plugin inside a single module gets its own directory to be imported.
|
|
||||||
|
|
||||||
* Separate config options with the same parent attribute have been merged into one for simplicity.
|
|
53
docs/release-notes/rl-0.2.md
Normal file
53
docs/release-notes/rl-0.2.md
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
# Release 0.2 {#sec-release-0.2}
|
||||||
|
|
||||||
|
Release notes for release 0.2
|
||||||
|
|
||||||
|
## Changelog {#sec-release-0.2-changelog}
|
||||||
|
|
||||||
|
[notashelf](https://github.com/notashelf):
|
||||||
|
|
||||||
|
- Added two minimap plugins under `vim.minimap`. `codewindow.nvim` is enabled by default, while `minimap.vim` is
|
||||||
|
available with its code-minimap dependency.
|
||||||
|
- A complementary plugin, `obsidian.nvim` and the Neovim alternative for Emacs' orgmode with `orgmode.nvim` have been
|
||||||
|
added. Both will be disabled by default.
|
||||||
|
|
||||||
|
- Smooth scrolling for ANY movement command is now available with `cinnamon.nvim`
|
||||||
|
|
||||||
|
- You will now notice a dashboard on startup. This is provided by the `alpha.nvim` plugin. You can use any of the
|
||||||
|
three available dashboard plugins, or disable them entirely.
|
||||||
|
|
||||||
|
- There is now a scrollbar on active buffers, which can highlight errors by hooking to your LSPs. This is on by
|
||||||
|
default, but can be toggled off under `vim.visuals` if seen necessary.
|
||||||
|
|
||||||
|
- Discord Rich Presence has been added through `presence.nvim` for those who want to flex that they are using
|
||||||
|
the _superior_ text editor.
|
||||||
|
|
||||||
|
- An icon picker is now available with telescope integration. You can use `:IconPickerInsert` or `:IconPickerYank`
|
||||||
|
to add icons to your code.
|
||||||
|
|
||||||
|
- A general-purpose cheatsheet has been added through `cheatsheet.nvim`. Forget no longer!
|
||||||
|
|
||||||
|
- `ccc.nvim` has been added to the default plugins to allow picking colors with ease.
|
||||||
|
|
||||||
|
- Most UI components of Neovim have been replaced through the help of `noice.nvim`. There are also notifications
|
||||||
|
and custom UI elements available for Neovim messages and prompts.
|
||||||
|
|
||||||
|
- A (floating by default) terminal has been added through `toggleterm.nvim`.
|
||||||
|
|
||||||
|
- Harness the power of ethical (`tabnine.nvim`) and not-so-ethical (`copilot.lua`) AI by those new assistant plugins.
|
||||||
|
Both are off by default, TabNine needs to be wrapped before it's working.
|
||||||
|
|
||||||
|
- Experimental mouse gestures have been added through `gesture.nvim`. See plugin page and the relevant module for
|
||||||
|
more details on how to use.
|
||||||
|
|
||||||
|
- Re-open last visited buffers via `nvim-session-manager`. Disabled by default as deleting buffers seems to be
|
||||||
|
problematic at the moment.
|
||||||
|
|
||||||
|
- Most of NvimTree's configuration options have been changed with some options being toggled to off by default.
|
||||||
|
|
||||||
|
- Lualine had its configuration simplified and style toned down. Less color, more info.
|
||||||
|
|
||||||
|
- Modules where multiple plugin configurations were in the same directory have been simplified. Each plugin inside
|
||||||
|
a single module gets its directory to be imported.
|
||||||
|
|
||||||
|
- Separate config options with the same parent attribute have been merged into one for simplicity.
|
|
@ -1,75 +0,0 @@
|
||||||
[[sec-release-0.3]]
|
|
||||||
== Release 0.3
|
|
||||||
|
|
||||||
Release 0.3 had to come out beore I wanted it to due to Neovim 0.9 dropping into nixpkgs-unstable. The treesitter changes
|
|
||||||
have prompted a treesitter rework, which was followed by reworking the languages system. Most of the changes to those are downstreamed
|
|
||||||
from the original repository. The feature requests that was originally planned for 0.3 have been moved to 0.4, which
|
|
||||||
should come out soon.
|
|
||||||
|
|
||||||
[[sec-release-0.3-changelog]]
|
|
||||||
=== Changelog
|
|
||||||
|
|
||||||
* We have transitioned to flake-parts, from flake-utils to extend the flexibility of this flake. This means the flake structure
|
|
||||||
is different than usual, but the functionality remains the same.
|
|
||||||
|
|
||||||
* We now provide a home-manager module. Do note that it is still far from perfect, but it works.
|
|
||||||
|
|
||||||
* `nodejs_16` is now bundled with `Copilot.lua` if the user has enabled Copilot assistant.
|
|
||||||
|
|
||||||
* which-key section titles have been fixed. This is to be changed once again in a possible keybind rewrite, but now it should
|
|
||||||
display the correct titles instad of `+prefix`
|
|
||||||
|
|
||||||
* Most of `presence.nvim`'s options have been made fully configurable through your configuration file.
|
|
||||||
|
|
||||||
* Most of the modules have been refactored to separate `config` and `options` attributes.
|
|
||||||
|
|
||||||
* Darwin has been deprecated as the zig package is marked as broken. We will attempt to use the zig overlay to return Darwin
|
|
||||||
support.
|
|
||||||
|
|
||||||
* `Fidget.nvim` has been added as a neat visual addition for LSP installations.
|
|
||||||
|
|
||||||
* `diffview.nvim` has been added to provide a convenient diff utility.
|
|
||||||
|
|
||||||
* Treesitter grammars are now configurable with <<opt-vim.treesitter.grammars>>. Utilizes the nixpkgs `nvim-treesitter` plugin rather than a custom input in order to take advantage of build support of pinned versions. See https://discourse.nixos.org/t/psa-if-you-are-on-unstable-try-out-nvim-treesitter-withallgrammars/23321?u=snowytrees[discourse] for more information. Packages can be found under the `pkgs.vimPlugins.nvim-treesitter.builtGrammars` attribute. Treesitter grammars for supported languages should be enabled within the module. By default no grammars are installed, thus the following grammars which do not have a language section are not included anymore: comment, toml, make, html, css, graphql, json.
|
|
||||||
|
|
||||||
* A new section has been added for language support: `vim.languages.<language>`. The options <<opt-vim.languages.enableLSP>>, <<opt-vim.languages.enableTreesitter>>, etc. will enable the respective section for all languages that have been enabled.
|
|
||||||
** All LSP languages have been moved here
|
|
||||||
** `plantuml` and `markdown` have been moved here
|
|
||||||
** A new section has been added for `html`. The old `vim.treesitter.autotagHtml` can be found at <<opt-vim.languages.html.treesitter.autotagHtml>>.
|
|
||||||
|
|
||||||
* <<opt-vim.git.gitsigns.codeActions>> has been added allowing you to turn on gitsigns codeactions.
|
|
||||||
|
|
||||||
* Removed the plugins document in the docs. Was too unwieldy to keep updated.
|
|
||||||
|
|
||||||
* `vim.visual.lspkind` has been moved to <<opt-vim.lsp.lspkind.enable>>
|
|
||||||
|
|
||||||
* Improved handling of completion formatting. When setting <<opt-vim.autocomplete.sources>>, can also include optional menu mapping. And can provide your own function with <<opt-vim.autocomplete.formatting.format>>.
|
|
||||||
|
|
||||||
* For <<opt-vim.visuals.indentBlankline.fillChar>> and <<opt-vim.visuals.indentBlankline.eolChar>> turning them off should use `null` rather than `""` now.
|
|
||||||
|
|
||||||
* Transparency has been made optional and has been disabled by default. <<opt-vim.theme.transparent>> option can be used to enable or
|
|
||||||
disable transparency for your configuration.
|
|
||||||
|
|
||||||
* Fixed deprecated configuration method for Tokyonight, and added new style "moon"
|
|
||||||
|
|
||||||
* Dart language support as well as extended flutter support has been added. Thanks to @FlafyDev for his contributions towards Dart
|
|
||||||
language support.
|
|
||||||
|
|
||||||
* Elixir language support has been added through `elixir-tools.nvim`.
|
|
||||||
|
|
||||||
* `hop.nvim` and `leap.nvim` have been added for fast navigation.
|
|
||||||
|
|
||||||
* `modes.nvim` has been added to the UI plugins as a minor error highlighter.
|
|
||||||
|
|
||||||
* `smartcollumn.nvim` has been added to dynamically display a colorcolumn when the limit has been exceeded, providing
|
|
||||||
per-buftype column position and more.
|
|
||||||
|
|
||||||
* `project.nvim` has been added for better project management inside Neovim.
|
|
||||||
|
|
||||||
* More configuration options have been added to `nvim-session-manager`.
|
|
||||||
|
|
||||||
* Editorconfig support has been added to the core functionality, with an enable option.
|
|
||||||
|
|
||||||
* `venn-nvim` has been dropped due to broken keybinds.
|
|
||||||
|
|
||||||
|
|
81
docs/release-notes/rl-0.3.md
Normal file
81
docs/release-notes/rl-0.3.md
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# Release 0.3 {#sec-release-0.3}
|
||||||
|
|
||||||
|
Release 0.3 had to come out beore I wanted it to due to Neovim 0.9 dropping into nixpkgs-unstable.
|
||||||
|
The treesitter changes have prompted a treesitter rework, which was followed by reworking the languages system.
|
||||||
|
Most of the changes to those are downstreamed from the original repository. The feature requests that was originally
|
||||||
|
planned for 0.3 have been moved to 0.4, which should come out soon.
|
||||||
|
|
||||||
|
## Changelog {#sec-release-0.3-changelog}
|
||||||
|
|
||||||
|
- We have transitioned to flake-parts, from flake-utils to extend the flexibility of this flake. This means the flake structure
|
||||||
|
is different than usual, but the functionality remains the same.
|
||||||
|
|
||||||
|
- We now provide a home-manager module. Do note that it is still far from perfect, but it works.
|
||||||
|
|
||||||
|
- `nodejs_16` is now bundled with `Copilot.lua` if the user has enabled Copilot assistant.
|
||||||
|
|
||||||
|
- which-key section titles have been fixed. This is to be changed once again in a possible keybind rewrite, but now it should
|
||||||
|
display the correct titles instad of `+prefix`
|
||||||
|
|
||||||
|
- Most of `presence.nvim`'s options have been made fully configurable through your configuration file.
|
||||||
|
|
||||||
|
- Most of the modules have been refactored to separate `config` and `options` attributes.
|
||||||
|
|
||||||
|
- Darwin has been deprecated as the zig package is marked as broken. We will attempt to use the zig overlay to return Darwin
|
||||||
|
support.
|
||||||
|
|
||||||
|
- `Fidget.nvim` has been added as a neat visual addition for LSP installations.
|
||||||
|
|
||||||
|
- `diffview.nvim` has been added to provide a convenient diff utility.
|
||||||
|
|
||||||
|
- Treesitter grammars are now configurable with [vim.treesitter.grammars](vim.treesitter.grammars).
|
||||||
|
Utilizes the nixpkgs `nvim-treesitter` plugin rather than a custom input in order to take advantage of build support of pinned versions.
|
||||||
|
See [discourse](https://discourse.nixos.org/t/psa-if-you-are-on-unstable-try-out-nvim-treesitter-withallgrammars/23321?u=snowytrees) for more information.
|
||||||
|
Packages can be found under the `pkgs.vimPlugins.nvim-treesitter.builtGrammars` attribute. Treesitter grammars for supported languages should be
|
||||||
|
enabled within the module. By default no grammars are installed, thus the following grammars which do not have a language section are not included anymore:
|
||||||
|
**comment**, **toml**, **make**, **html**, **css**, **graphql**, **json**.
|
||||||
|
|
||||||
|
- A new section has been added for language support: `vim.languages.<language>`.
|
||||||
|
|
||||||
|
- The options [vim.languages.enableLSP](vim.languages.enableLSP), [vim.languages.enableTreesitter](vim.languages.enableTreesitter), etc.
|
||||||
|
will enable the respective section for all languages that have been enabled.
|
||||||
|
- All LSP languages have been moved here
|
||||||
|
- `plantuml` and `markdown` have been moved here
|
||||||
|
- A new section has been added for `html`. The old `vim.treesitter.autotagHtml` can be found at <<opt-vim.languages.html.treesitter.autotagHtml>>.
|
||||||
|
|
||||||
|
- [vim.git.gitsigns.codeActions](vim.git.gitsigns.codeActions) has been added allowing you to turn on gitsigns codeactions.
|
||||||
|
|
||||||
|
- Removed the plugins document in the docs. Was too unwieldy to keep updated.
|
||||||
|
|
||||||
|
- `vim.visual.lspkind` has been moved to [vim.lsp.lspkind.enable](vim.lsp.lspkind.enable)
|
||||||
|
|
||||||
|
- Improved handling of completion formatting. When setting [vim.autocomplete.sources](vim.autocomplete.sources), can also include optional menu mapping.
|
||||||
|
And can provide your own function with [vim.autocomplete.formatting.format](vim.autocomplete.formatting.format).
|
||||||
|
|
||||||
|
- For [vim.visuals.indentBlankline.fillChar](vim.visuals.indentBlankline.fillChar) and [vim.visuals.indentBlankline.eolChar](vim.visuals.indentBlankline.eolChar)
|
||||||
|
turning them off should use `null` rather than `""` now.
|
||||||
|
|
||||||
|
- Transparency has been made optional and has been disabled by default. [vim.theme.transparent](vim.theme.transparent) option can be used to enable or
|
||||||
|
disable transparency for your configuration.
|
||||||
|
|
||||||
|
- Fixed deprecated configuration method for Tokyonight, and added new style "moon"
|
||||||
|
|
||||||
|
- Dart language support as well as extended flutter support has been added. Thanks to @FlafyDev for his contributions towards Dart
|
||||||
|
language support.
|
||||||
|
|
||||||
|
- Elixir language support has been added through `elixir-tools.nvim`.
|
||||||
|
|
||||||
|
- `hop.nvim` and `leap.nvim` have been added for fast navigation.
|
||||||
|
|
||||||
|
- `modes.nvim` has been added to the UI plugins as a minor error highlighter.
|
||||||
|
|
||||||
|
- `smartcollumn.nvim` has been added to dynamically display a colorcolumn when the limit has been exceeded, providing
|
||||||
|
per-buftype column position and more.
|
||||||
|
|
||||||
|
- `project.nvim` has been added for better project management inside Neovim.
|
||||||
|
|
||||||
|
- More configuration options have been added to `nvim-session-manager`.
|
||||||
|
|
||||||
|
- Editorconfig support has been added to the core functionality, with an enable option.
|
||||||
|
|
||||||
|
- `venn-nvim` has been dropped due to broken keybinds.
|
|
@ -1,72 +0,0 @@
|
||||||
[[sec-release-0.4]]
|
|
||||||
== Release 0.4
|
|
||||||
Following the release of v0.3, I have decided to release v0.4 with a massive new change: customizable keybinds. As of the 0.4 release, keybinds will no longer be hardcoded and instead provided by each module's own keybinds section. The old keybind system (`vim.keybinds = {}`) is now considered deprecated and the new lib functions are recommended to be used for adding keybinds for new plugins, or adding keybinds to existing plugins.
|
|
||||||
|
|
||||||
Alongside customizable keybinds, there are a few quality of life updates, such as `lazygit` integration and the new experimental Lua loader of Neovim 0.9 thanks to our awesome contributors who made this update possible during my absence.
|
|
||||||
|
|
||||||
|
|
||||||
[[sec-release-0.4-changelog]]
|
|
||||||
=== Changelog
|
|
||||||
|
|
||||||
https://github.com/n3oney[n3oney]:
|
|
||||||
|
|
||||||
* Streamlined keybind adding process towards new functions in extended stdlib.
|
|
||||||
|
|
||||||
* Moved default keybinds into keybinds section of each module
|
|
||||||
|
|
||||||
* Simplified luaConfigRC and configRC setting - they can now just take strings
|
|
||||||
|
|
||||||
* Refactored the resolveDag function - you can just provide a string now, which will default to dag.entryAnywhere
|
|
||||||
|
|
||||||
* Fixed formatting sometimes removing parts of files
|
|
||||||
|
|
||||||
* Made formatting synchronous
|
|
||||||
|
|
||||||
* Gave null-ls priority over other formatters
|
|
||||||
|
|
||||||
https://github.com/horriblename[horriblename]:
|
|
||||||
|
|
||||||
* Added `clangd` as alternative lsp for C/++.
|
|
||||||
|
|
||||||
* Added `toggleterm` integration for `lazygit`.
|
|
||||||
|
|
||||||
* Added new option `enableluaLoader` to enable neovim's experimental module loader for faster startup time.
|
|
||||||
|
|
||||||
* Fixed bug where flutter-tools can't find `dart` LSP
|
|
||||||
|
|
||||||
* Added Debug Adapter (DAP) support for clang, rust, go, python and dart.
|
|
||||||
|
|
||||||
https://github.com/notashelf[notashelf]:
|
|
||||||
|
|
||||||
* Made Copilot's Node package configurable. It is recommended to keep as default, but providing a different NodeJS version is now possible.
|
|
||||||
|
|
||||||
* Added <<opt-vim.cursorlineOpt>> for configuring Neovim's cursorlineOpt.
|
|
||||||
|
|
||||||
* Added `filetree.nvimTreeLua.view.cursorline`, default false, to enable cursorline in nvimtre.
|
|
||||||
|
|
||||||
* Added Fidget.nvim support for the Catppuccin theme.
|
|
||||||
|
|
||||||
* Updated bundled NodeJS version used by `Copilot.lua`. v16 is now marked as insecure on Nixpkgs, and we updated to v18
|
|
||||||
|
|
||||||
* Enabled Catppuccin modules for plugins available by default.
|
|
||||||
|
|
||||||
* Added experimental Svelte support under `vim.languages`.
|
|
||||||
|
|
||||||
* Removed unnecessary scrollbar element from notifications and codeaction warning UI.
|
|
||||||
|
|
||||||
* `vim.utility.colorizer` has been renamed to `vim.utility.ccc` after the plugin it uses
|
|
||||||
|
|
||||||
* Color preview via `nvim-colorizer.lua`
|
|
||||||
|
|
||||||
* Updated Lualine statusline UI
|
|
||||||
|
|
||||||
* Added vim-illuminate for smart highlighting
|
|
||||||
|
|
||||||
* Added a module for enabling Neovim's spellchecker
|
|
||||||
|
|
||||||
* Added prettierd as an alternative formatter to prettier - currently defaults to prettier
|
|
||||||
|
|
||||||
* Fixed presence.nvim inheriting the wrong client id
|
|
||||||
|
|
||||||
* Cleaned up documentation
|
|
||||||
|
|
73
docs/release-notes/rl-0.4.md
Normal file
73
docs/release-notes/rl-0.4.md
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
# Release 0.4 {#sec-release-0.4}
|
||||||
|
|
||||||
|
Following the release of v0.3, I have decided to release v0.4 with a massive new change: customizable keybinds.
|
||||||
|
As of the 0.4 release, keybinds will no longer be hardcoded and instead provided by each module's own keybinds section.
|
||||||
|
The old keybind system (`vim.keybinds = {}`) is now considered deprecated and the new lib functions are recommended to be
|
||||||
|
used for adding keybinds for new plugins, or adding keybinds to existing plugins.
|
||||||
|
|
||||||
|
Alongside customizable keybinds, there are a few quality of life updates, such as `lazygit` integration and the
|
||||||
|
new experimental Lua loader of Neovim 0.9 thanks to our awesome contributors who made this update possible during my absence.
|
||||||
|
|
||||||
|
## Changelog {#sec-release-0.4-changelog}
|
||||||
|
|
||||||
|
[n3oney](https://github.com/n3oney):
|
||||||
|
|
||||||
|
- Streamlined keybind adding process towards new functions in extended stdlib.
|
||||||
|
|
||||||
|
- Moved default keybinds into keybinds section of each module
|
||||||
|
|
||||||
|
- Simplified luaConfigRC and configRC setting - they can now just take strings
|
||||||
|
|
||||||
|
- Refactored the resolveDag function - you can just provide a string now, which will default to dag.entryAnywhere
|
||||||
|
|
||||||
|
- Fixed formatting sometimes removing parts of files
|
||||||
|
|
||||||
|
- Made formatting synchronous
|
||||||
|
|
||||||
|
- Gave null-ls priority over other formatters
|
||||||
|
|
||||||
|
[horriblename](https://github.com/horriblename):
|
||||||
|
|
||||||
|
- Added `clangd` as alternative lsp for C/++.
|
||||||
|
|
||||||
|
- Added `toggleterm` integration for `lazygit`.
|
||||||
|
|
||||||
|
- Added new option `enableluaLoader` to enable neovim's experimental module loader for faster startup time.
|
||||||
|
|
||||||
|
- Fixed bug where flutter-tools can't find `dart` LSP
|
||||||
|
|
||||||
|
- Added Debug Adapter (DAP) support for clang, rust, go, python and dart.
|
||||||
|
|
||||||
|
[notashelf](https://github.com/notashelf):
|
||||||
|
|
||||||
|
- Made Copilot's Node package configurable. It is recommended to keep as default, but providing a different NodeJS version is now possible.
|
||||||
|
|
||||||
|
- Added [vim.cursorlineOpt](vim.cursorlineOpt) for configuring Neovim's cursorlineOpt.
|
||||||
|
|
||||||
|
- Added `filetree.nvimTreeLua.view.cursorline`, default false, to enable cursorline in nvimtre.
|
||||||
|
|
||||||
|
- Added Fidget.nvim support for the Catppuccin theme.
|
||||||
|
|
||||||
|
- Updated bundled NodeJS version used by `Copilot.lua`. v16 is now marked as insecure on Nixpkgs, and we updated to v18
|
||||||
|
|
||||||
|
- Enabled Catppuccin modules for plugins available by default.
|
||||||
|
|
||||||
|
- Added experimental Svelte support under `vim.languages`.
|
||||||
|
|
||||||
|
- Removed unnecessary scrollbar element from notifications and codeaction warning UI.
|
||||||
|
|
||||||
|
- `vim.utility.colorizer` has been renamed to `vim.utility.ccc` after the plugin it uses
|
||||||
|
|
||||||
|
- Color preview via `nvim-colorizer.lua`
|
||||||
|
|
||||||
|
- Updated Lualine statusline UI
|
||||||
|
|
||||||
|
- Added vim-illuminate for smart highlighting
|
||||||
|
|
||||||
|
- Added a module for enabling Neovim's spellchecker
|
||||||
|
|
||||||
|
- Added prettierd as an alternative formatter to prettier - currently defaults to prettier
|
||||||
|
|
||||||
|
- Fixed presence.nvim inheriting the wrong client id
|
||||||
|
|
||||||
|
- Cleaned up documentation
|
|
@ -1,104 +0,0 @@
|
||||||
[[sec-release-0.5]]
|
|
||||||
== Release 0.5
|
|
||||||
|
|
||||||
|
|
||||||
[[sec-release-0.5-changelog]]
|
|
||||||
=== Changelog
|
|
||||||
|
|
||||||
https://github.com/vagahbond[vagahbond]:
|
|
||||||
* Added phan language server for PHP
|
|
||||||
|
|
||||||
* Added phpactor language server for PHP
|
|
||||||
|
|
||||||
https://github.com/horriblename[horriblename]:
|
|
||||||
|
|
||||||
* Added transparency support for tokyonight theme
|
|
||||||
|
|
||||||
* Fixed a bug where cmp's close and scrollDocs mappings wasn't working
|
|
||||||
|
|
||||||
* Streamlined and simplified extra plugin API with the addition of <<opt-vim.extraPlugins>>
|
|
||||||
|
|
||||||
* Allow using command names in place of LSP packages to avoid automatic installation
|
|
||||||
|
|
||||||
* Add lua LSP and treesitter support, and neodev.nvim plugin support
|
|
||||||
|
|
||||||
* Add <<opt-vim.lsp.mappings.toggleFormatOnSave>> keybind
|
|
||||||
|
|
||||||
https://github.com/amanse[amanse]:
|
|
||||||
|
|
||||||
* Added daily notes options for obsidian plugin
|
|
||||||
|
|
||||||
* Added jdt-language-server for Java
|
|
||||||
|
|
||||||
https://github.com/yavko[yavko]:
|
|
||||||
|
|
||||||
* Added Deno Language Server for javascript/typescript
|
|
||||||
|
|
||||||
* Added support for multiple languages <<opt-vim.spellChecking.languages>>, and added vim-dirtytalk <<opt-vim.spellChecking.enableProgrammingWordList>>
|
|
||||||
|
|
||||||
https://github.com/FrothyMarrow[frothymarrow]:
|
|
||||||
|
|
||||||
* Renamed `vim.visuals.cursorWordline` to <<opt-vim.visuals.cursorline.enable>>
|
|
||||||
|
|
||||||
* Added <<opt-vim.visuals.cursorline.lineNumbersOnly>> to display cursorline only in the presence of line numbers
|
|
||||||
|
|
||||||
* Added Oxocarbon to the list of available themes.
|
|
||||||
|
|
||||||
https://github.com/notashelf[notashelf]:
|
|
||||||
|
|
||||||
* Added GitHub Copilot to nvim-cmp completion sources.
|
|
||||||
|
|
||||||
* Added <<opt-vim.ui.borders.enable>> for global and individual plugin border configuration.
|
|
||||||
|
|
||||||
* LSP integrated breadcrumbs with <<opt-vim.ui.breadcrumbs.enable>> through nvim-navic
|
|
||||||
|
|
||||||
* LSP navigation helper with nvim-navbuddy, depends on nvim-navic (automatically enabled)
|
|
||||||
|
|
||||||
* Addeed nvim-navic integration for catppuccin theme
|
|
||||||
|
|
||||||
* Fixed mismatching zig language description
|
|
||||||
|
|
||||||
* Added support for `statix` and `deadnix` through <<opt-vim.languages.nix.extraDiagnostics.types>>
|
|
||||||
|
|
||||||
* Added lsp_lines plugin for showing diagnostic messages
|
|
||||||
|
|
||||||
* Added a configuration option for choosing the leader key
|
|
||||||
|
|
||||||
* The package used for neovim is now customizable by the user, using <<opt-vim.package>>. For best results, always use an unwrapped package
|
|
||||||
|
|
||||||
* Added highlight-undo plugin for highlighting undo/redo targets
|
|
||||||
|
|
||||||
* Added bash LSP and formatter support
|
|
||||||
|
|
||||||
* Disabled Lualine LSP status indicator for toggleterm buffer
|
|
||||||
|
|
||||||
* Added `nvim-docs-view`, a plugin to display lsp hover documentation in a side panel
|
|
||||||
|
|
||||||
* Switched to `nixosOptionsDoc` in option documentation.
|
|
||||||
To quote home-manager commit: "Output is mostly unchanged aside from some minor typographical and
|
|
||||||
formatting changes, along with better source links."
|
|
||||||
|
|
||||||
* Updated indent-blankine.nvim to v3 - this comes with a few option changes, which will be migrated with `renamedOptionModule`
|
|
||||||
|
|
||||||
|
|
||||||
https://github.com/jacekpoz[jacekpoz]:
|
|
||||||
|
|
||||||
* Fixed scrollOffset not being used
|
|
||||||
|
|
||||||
* Updated clangd to 16
|
|
||||||
|
|
||||||
* Disabled `useSystemClipboard` by default
|
|
||||||
|
|
||||||
https://github.com/ksonj[ksonj]:
|
|
||||||
|
|
||||||
* Add support to change mappings to utility/surround
|
|
||||||
|
|
||||||
* Add black-and-isort python formatter
|
|
||||||
|
|
||||||
* Removed redundant "Enable ..." in `mkEnableOption` descriptions
|
|
||||||
|
|
||||||
* Add options to modify LSP key bindings and add proper whichkey descriptions
|
|
||||||
|
|
||||||
* Changed type of `statusline.lualine.activeSection` and `statusline.lualine.inactiveSection` from `attrsOf str` to `attrsOf (listOf str)`
|
|
||||||
|
|
||||||
* Added `statusline.lualine.extraActiveSection` and `statusline.lualine.extraInactiveSection`
|
|
107
docs/release-notes/rl-0.5.md
Normal file
107
docs/release-notes/rl-0.5.md
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
# Release 0.5 {#sec-release-0.5}
|
||||||
|
|
||||||
|
Release notes for release 0.5
|
||||||
|
|
||||||
|
## Changelog {#sec-release-0.5-changelog}
|
||||||
|
|
||||||
|
[vagahbond](https://github.com/vagahbond):
|
||||||
|
|
||||||
|
- Added phan language server for PHP
|
||||||
|
|
||||||
|
- Added phpactor language server for PHP
|
||||||
|
|
||||||
|
[horriblename](https://github.com/horriblename):
|
||||||
|
|
||||||
|
- Added transparency support for tokyonight theme
|
||||||
|
|
||||||
|
- Fixed a bug where cmp's close and scrollDocs mappings wasn't working
|
||||||
|
|
||||||
|
- Streamlined and simplified extra plugin API with the addition of [vim.extraPlugins](vim.extraPlugins)
|
||||||
|
|
||||||
|
- Allow using command names in place of LSP packages to avoid automatic installation
|
||||||
|
|
||||||
|
- Add lua LSP and treesitter support, and neodev.nvim plugin support
|
||||||
|
|
||||||
|
- Add [vim.lsp.mappings.toggleFormatOnSave](vim.lsp.mappings.toggleFormatOnSave) keybind
|
||||||
|
|
||||||
|
[amanse](https://github.com/amanse):
|
||||||
|
|
||||||
|
- Added daily notes options for obsidian plugin
|
||||||
|
|
||||||
|
- Added jdt-language-server for Java
|
||||||
|
|
||||||
|
[yavko](https://github.com/yavko):
|
||||||
|
|
||||||
|
- Added Deno Language Server for javascript/typescript
|
||||||
|
|
||||||
|
- Added support for multiple languages [vim.spellChecking.languages](vim.spellChecking.languages), and added
|
||||||
|
vim-dirtytalk through [vim.spellChecking.enableProgrammingWordList](vim.spellChecking.enableProgrammingWordList)
|
||||||
|
|
||||||
|
[frothymarrow](https://github.com/FrothyMarrow):
|
||||||
|
|
||||||
|
- Renamed `vim.visuals.cursorWordline` to [vim.visuals.cursorline.enable](vim.visuals.cursorline.enable)
|
||||||
|
|
||||||
|
- Added [vim.visuals.cursorline.lineNumbersOnly](vim.visuals.cursorline.lineNumbersOnly) to display cursorline
|
||||||
|
only in the presence of line numbers
|
||||||
|
|
||||||
|
- Added Oxocarbon to the list of available themes.
|
||||||
|
|
||||||
|
[notashelf](https://github.com/notashelf):
|
||||||
|
|
||||||
|
- Added GitHub Copilot to nvim-cmp completion sources.
|
||||||
|
|
||||||
|
- Added [vim.ui.borders.enable](vim.ui.borders.enable) for global and individual plugin border configuration.
|
||||||
|
|
||||||
|
- LSP integrated breadcrumbs with [vim.ui.breadcrumbs.enable](vim.ui.breadcrumbs.enable) through nvim-navic
|
||||||
|
|
||||||
|
- LSP navigation helper with nvim-navbuddy, depends on nvim-navic (automatically enabled if navic is enabled)
|
||||||
|
|
||||||
|
- Addeed nvim-navic integration for catppuccin theme
|
||||||
|
|
||||||
|
- Fixed mismatching zig language description
|
||||||
|
|
||||||
|
- Added support for `statix` and `deadnix` through [vim.languages.nix.extraDiagnostics.types](vim.languages.nix.extraDiagnostics.types)
|
||||||
|
|
||||||
|
- Added `lsp_lines` plugin for showing diagnostic messages
|
||||||
|
|
||||||
|
- Added a configuration option for choosing the leader key
|
||||||
|
|
||||||
|
- The package used for neovim is now customizable by the user, using [vim.package](vim.package).
|
||||||
|
For best results, always use an unwrapped package
|
||||||
|
|
||||||
|
- Added highlight-undo plugin for highlighting undo/redo targets
|
||||||
|
|
||||||
|
- Added bash LSP and formatter support
|
||||||
|
|
||||||
|
- Disabled Lualine LSP status indicator for toggleterm buffer
|
||||||
|
|
||||||
|
- Added `nvim-docs-view`, a plugin to display lsp hover documentation in a side panel
|
||||||
|
|
||||||
|
- Switched to `nixosOptionsDoc` in option documentation.
|
||||||
|
To quote home-manager commit: "Output is mostly unchanged aside from some minor typographical and
|
||||||
|
formatting changes, along with better source links."
|
||||||
|
|
||||||
|
- Updated indent-blankine.nvim to v3 - this comes with a few option changes, which will be migrated with `renamedOptionModule`
|
||||||
|
|
||||||
|
[jacekpoz](https://github.com/jacekpoz):
|
||||||
|
|
||||||
|
- Fixed scrollOffset not being used
|
||||||
|
|
||||||
|
- Updated clangd to 16
|
||||||
|
|
||||||
|
- Disabled `useSystemClipboard` by default
|
||||||
|
|
||||||
|
[ksonj](https://github.com/ksonj):
|
||||||
|
|
||||||
|
- Add support to change mappings to utility/surround
|
||||||
|
|
||||||
|
- Add black-and-isort python formatter
|
||||||
|
|
||||||
|
- Removed redundant "Enable ..." in `mkEnableOption` descriptions
|
||||||
|
|
||||||
|
- Add options to modify LSP key bindings and add proper whichkey descriptions
|
||||||
|
|
||||||
|
- Changed type of `statusline.lualine.activeSection` and `statusline.lualine.inactiveSection`
|
||||||
|
from `attrsOf str` to `attrsOf (listOf str)`
|
||||||
|
|
||||||
|
- Added `statusline.lualine.extraActiveSection` and `statusline.lualine.extraInactiveSection`
|
|
@ -1,12 +0,0 @@
|
||||||
[[sec-release-0.6]]
|
|
||||||
== Release 0.6
|
|
||||||
|
|
||||||
Release notes for release 0.6
|
|
||||||
|
|
||||||
|
|
||||||
[[sec-release-0.6-changelog]]
|
|
||||||
=== Changelog
|
|
||||||
|
|
||||||
https://github.com/ksonj[ksonj]:
|
|
||||||
|
|
||||||
* Add Terraform language support
|
|
42
docs/release-notes/rl-0.6.md
Normal file
42
docs/release-notes/rl-0.6.md
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# Release 0.6 {#sec-release-0.6}
|
||||||
|
|
||||||
|
Release notes for release 0.6
|
||||||
|
|
||||||
|
## Changelog {#sec-release-0.6-changelog}
|
||||||
|
|
||||||
|
[ksonj](https://github.com/ksonj):
|
||||||
|
|
||||||
|
- Add Terraform language support
|
||||||
|
|
||||||
|
[horriblename](https://github.com/horriblename):
|
||||||
|
|
||||||
|
- Fixed empty winbar when breadcrumbs are disabled
|
||||||
|
|
||||||
|
[donnerinoern](https://github.com/donnerinoern):
|
||||||
|
|
||||||
|
- Added Gruvbox theme
|
||||||
|
|
||||||
|
- Added marksman LSP for Markdown
|
||||||
|
|
||||||
|
- Fixed markdown preview with Glow not working and added an option for changing the preview keybind
|
||||||
|
|
||||||
|
[notashelf](https://github.com/notashelf):
|
||||||
|
|
||||||
|
- Finished moving to `nixosOptionsDoc` in the documentation and changelog. We are fully free of asciidoc now
|
||||||
|
|
||||||
|
- Bumped plugin inputs to their latest versions
|
||||||
|
|
||||||
|
- Deprecated `presence.nvim` in favor of `neocord`. This means `vim.rich-presence.presence-nvim` is removed and will throw
|
||||||
|
a warning if used. You are recommended to rewrite your neocord config from scratch based on the
|
||||||
|
[official documentation](https://github.com/IogaMaster/neocord)
|
||||||
|
|
||||||
|
- Added support for css and tailwindcss through vscode-language-servers-extracted & tailwind-language-server.
|
||||||
|
Those can be enabled through `vim.languages.css` and `vim.languages.tailwind`
|
||||||
|
|
||||||
|
- Lualine module now allows customizing `always_divide_middle`, `ignore_focus` and `disabled_filetypes` through the new
|
||||||
|
options: [vim.statusline.lualine.alwaysDivideMiddle](vim.statusline.lualine.alwaysDivideMiddle),
|
||||||
|
[vim.statusline.lualine.ignoreFocus](vim.statusline.lualine.ignoreFocus) and
|
||||||
|
[vim.statusline.lualine.disabledFiletypes](vim.statusline.lualine.disabledFiletypes)
|
||||||
|
|
||||||
|
- Updated all plugin inputs to their latest versions (26.01.2024) - this brought minor color changess to the Catppuccin
|
||||||
|
theme
|
601
flake.lock
601
flake.lock
File diff suppressed because it is too large
Load diff
13
flake.nix
13
flake.nix
|
@ -63,7 +63,7 @@
|
||||||
|
|
||||||
# For generating documentation website
|
# For generating documentation website
|
||||||
nmd = {
|
nmd = {
|
||||||
url = "github:horriblename/nmd";
|
url = "sourcehut:~rycee/nmd";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -262,9 +262,9 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
# Presence
|
# Presence
|
||||||
presence-nvim = {
|
neocord = {
|
||||||
url = "github:andweeb/presence.nvim";
|
url = "github:IogaMaster/neocord";
|
||||||
flake = false;
|
flake = false; # uses flake-utils, avoid the flake
|
||||||
};
|
};
|
||||||
|
|
||||||
# Autopairs
|
# Autopairs
|
||||||
|
@ -341,6 +341,11 @@
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gruvbox = {
|
||||||
|
url = "github:ellisonleao/gruvbox.nvim";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
# Rust crates
|
# Rust crates
|
||||||
crates-nvim = {
|
crates-nvim = {
|
||||||
url = "github:Saecki/crates.nvim";
|
url = "github:Saecki/crates.nvim";
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
typesLanguage = import ./languages.nix {inherit lib;};
|
typesLanguage = import ./languages.nix {inherit lib;};
|
||||||
in {
|
in {
|
||||||
inherit (typesDag) dagOf;
|
inherit (typesDag) dagOf;
|
||||||
inherit (typesPlugin) pluginsOpt extraPluginType;
|
inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption;
|
||||||
inherit (typesLanguage) diagnostics mkGrammarOption;
|
inherit (typesLanguage) diagnostics mkGrammarOption;
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ with lib; let
|
||||||
"catppuccin"
|
"catppuccin"
|
||||||
"dracula"
|
"dracula"
|
||||||
"oxocarbon"
|
"oxocarbon"
|
||||||
|
"gruvbox"
|
||||||
"minimap-vim"
|
"minimap-vim"
|
||||||
"dashboard-nvim"
|
"dashboard-nvim"
|
||||||
"alpha-nvim"
|
"alpha-nvim"
|
||||||
|
@ -53,7 +54,7 @@ with lib; let
|
||||||
"cheatsheet-nvim"
|
"cheatsheet-nvim"
|
||||||
"ccc"
|
"ccc"
|
||||||
"cellular-automaton"
|
"cellular-automaton"
|
||||||
"presence-nvim"
|
"neocord"
|
||||||
"icon-picker-nvim"
|
"icon-picker-nvim"
|
||||||
"dressing-nvim"
|
"dressing-nvim"
|
||||||
"orgmode-nvim"
|
"orgmode-nvim"
|
||||||
|
@ -138,4 +139,25 @@ in {
|
||||||
inherit description default;
|
inherit description default;
|
||||||
type = pluginsType;
|
type = pluginsType;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# opts is a attrset of options, example:
|
||||||
|
# ```
|
||||||
|
# mkPluginSetupOption "telescope" {
|
||||||
|
# file_ignore_patterns = mkOption {
|
||||||
|
# description = "...";
|
||||||
|
# type = types.listOf types.str;
|
||||||
|
# default = [];
|
||||||
|
# };
|
||||||
|
# layout_config.horizontal = mkOption {...};
|
||||||
|
# }
|
||||||
|
# ```
|
||||||
|
mkPluginSetupOption = pluginName: opts:
|
||||||
|
mkOption {
|
||||||
|
description = "Option table to pass into the setup function of " + pluginName;
|
||||||
|
default = {};
|
||||||
|
type = types.submodule {
|
||||||
|
freeformType = with types; attrsOf anything;
|
||||||
|
options = opts;
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
74
modules/languages/css.nix
Normal file
74
modules/languages/css.nix
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (builtins) attrNames;
|
||||||
|
inherit (lib) mkEnableOption mkOption mkIf mkMerge isList types nvim;
|
||||||
|
|
||||||
|
cfg = config.vim.languages.css;
|
||||||
|
|
||||||
|
defaultServer = "vscode-langservers-extracted";
|
||||||
|
servers = {
|
||||||
|
vscode-langservers-extracted = {
|
||||||
|
package = pkgs.nodePackages.vscode-langservers-extracted;
|
||||||
|
lspConfig = ''
|
||||||
|
-- enable (broadcasting) snippet capability for completion
|
||||||
|
-- see <https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md#cssls>
|
||||||
|
local css_capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
css_capabilities.textDocument.completion.completionItem.snippetSupport = true
|
||||||
|
|
||||||
|
-- cssls setup
|
||||||
|
lspconfig.cssls.setup {
|
||||||
|
capabilities = css_capabilities;
|
||||||
|
on_attach = default_on_attach;
|
||||||
|
cmd = ${
|
||||||
|
if isList cfg.lsp.package
|
||||||
|
then nvim.lua.expToLua cfg.lsp.package
|
||||||
|
else ''{"${cfg.lsp.package}/bin/vscode-css-language-server", "--stdio"}''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
options.vim.languages.css = {
|
||||||
|
enable = mkEnableOption "CSS language support";
|
||||||
|
|
||||||
|
treesitter = {
|
||||||
|
enable = mkEnableOption "CSS treesitter" // {default = config.vim.languages.enableTreesitter;};
|
||||||
|
|
||||||
|
package = nvim.types.mkGrammarOption pkgs "css";
|
||||||
|
};
|
||||||
|
|
||||||
|
lsp = {
|
||||||
|
enable = mkEnableOption "CSS LSP support" // {default = config.vim.languages.enableLSP;};
|
||||||
|
|
||||||
|
server = mkOption {
|
||||||
|
description = "CSS LSP server to use";
|
||||||
|
type = with types; enum (attrNames servers);
|
||||||
|
default = defaultServer;
|
||||||
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
description = "CSS LSP server package, or the command to run as a list of strings";
|
||||||
|
example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]'';
|
||||||
|
type = with types; either package (listOf str);
|
||||||
|
default = servers.${cfg.lsp.server}.package;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable (mkMerge [
|
||||||
|
(mkIf cfg.treesitter.enable {
|
||||||
|
vim.treesitter.enable = true;
|
||||||
|
vim.treesitter.grammars = [cfg.treesitter.package];
|
||||||
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.lsp.enable {
|
||||||
|
vim.lsp.lspconfig.enable = true;
|
||||||
|
vim.lsp.lspconfig.sources.tailwindcss-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
}
|
|
@ -2,27 +2,29 @@
|
||||||
inherit (lib.nvim.languages) mkEnable;
|
inherit (lib.nvim.languages) mkEnable;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./markdown
|
./bash
|
||||||
./tidal
|
|
||||||
./dart
|
./dart
|
||||||
./elixir
|
./elixir
|
||||||
./bash
|
./markdown
|
||||||
|
./tidal
|
||||||
|
|
||||||
./clang.nix
|
./clang.nix
|
||||||
|
./css.nix
|
||||||
./go.nix
|
./go.nix
|
||||||
./nix.nix
|
|
||||||
./python.nix
|
|
||||||
./rust.nix
|
|
||||||
./sql.nix
|
|
||||||
./ts.nix
|
|
||||||
./zig.nix
|
|
||||||
./html.nix
|
./html.nix
|
||||||
./svelte.nix
|
|
||||||
./java.nix
|
./java.nix
|
||||||
./lua.nix
|
./lua.nix
|
||||||
./nim.nix
|
./nim.nix
|
||||||
|
./nix.nix
|
||||||
./php.nix
|
./php.nix
|
||||||
|
./python.nix
|
||||||
|
./rust.nix
|
||||||
|
./sql.nix
|
||||||
|
./svelte.nix
|
||||||
|
./tailwind.nix
|
||||||
./terraform.nix
|
./terraform.nix
|
||||||
|
./ts.nix
|
||||||
|
./zig.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
options.vim.languages = {
|
options.vim.languages = {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib) isList nvim mkEnableOption mkOption types mkIf mkMerge;
|
inherit (lib) isList nvim mkEnableOption mkOption types mkIf mkMerge getExe;
|
||||||
|
|
||||||
cfg = config.vim.languages.java;
|
cfg = config.vim.languages.java;
|
||||||
in {
|
in {
|
||||||
|
@ -38,7 +38,7 @@ in {
|
||||||
cmd = ${
|
cmd = ${
|
||||||
if isList cfg.lsp.package
|
if isList cfg.lsp.package
|
||||||
then nvim.lua.expToLua cfg.lsp.package
|
then nvim.lua.expToLua cfg.lsp.package
|
||||||
else ''{"${cfg.lsp.package}/bin/jdt-language-server", "-data", vim.fn.stdpath("cache").."/jdtls/workspace"}''
|
else ''{"${getExe cfg.lsp.package}", "-data", vim.fn.stdpath("cache").."/jdtls/workspace"}''
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
'';
|
'';
|
||||||
|
|
|
@ -4,9 +4,29 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib) nvim mkIf mkMerge;
|
inherit (lib) nvim mkIf mkMerge mkBinding isList;
|
||||||
|
|
||||||
cfg = config.vim.languages.markdown;
|
cfg = config.vim.languages.markdown;
|
||||||
|
self = import ./markdown.nix {
|
||||||
|
inherit lib config pkgs;
|
||||||
|
};
|
||||||
|
mappings = self.options.vim.languages.markdown.glow.mappings;
|
||||||
|
servers = {
|
||||||
|
marksman = {
|
||||||
|
package = pkgs.marksman;
|
||||||
|
lspConfig = ''
|
||||||
|
lspconfig.marksman.setup{
|
||||||
|
capabilities = capabilities;
|
||||||
|
on_attach = default_on_attach;
|
||||||
|
cmd = ${
|
||||||
|
if isList cfg.lsp.package
|
||||||
|
then nvim.lua.expToLua cfg.lsp.package
|
||||||
|
else ''{"${cfg.lsp.package}/bin/marksman", "server"}''
|
||||||
|
},
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable (mkMerge [
|
config = mkIf cfg.enable (mkMerge [
|
||||||
(mkIf cfg.treesitter.enable {
|
(mkIf cfg.treesitter.enable {
|
||||||
|
@ -18,13 +38,21 @@ in {
|
||||||
(mkIf cfg.glow.enable {
|
(mkIf cfg.glow.enable {
|
||||||
vim.startPlugins = ["glow-nvim"];
|
vim.startPlugins = ["glow-nvim"];
|
||||||
|
|
||||||
vim.globals = {
|
vim.maps.normal = mkMerge [
|
||||||
"glow_binary_path" = "${pkgs.glow}/bin";
|
(mkBinding cfg.glow.mappings.openPreview ":Glow<CR>" mappings.openPreview.description)
|
||||||
};
|
];
|
||||||
|
|
||||||
vim.configRC.glow = nvim.dag.entryAnywhere ''
|
vim.luaConfigRC.glow = nvim.dag.entryAnywhere ''
|
||||||
autocmd FileType markdown noremap <leader>p :Glow<CR>
|
require('glow').setup({
|
||||||
|
glow_path = "${pkgs.glow}/bin/glow"
|
||||||
|
});
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
|
||||||
|
(mkIf cfg.lsp.enable {
|
||||||
|
vim.lsp.lspconfig.enable = true;
|
||||||
|
|
||||||
|
vim.lsp.lspconfig.sources.markdown-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||||
|
})
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,17 +4,40 @@
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib) mkEnableOption mkOption types nvim;
|
inherit (builtins) attrNames;
|
||||||
|
inherit (lib) mkEnableOption mkMappingOption mkOption types nvim isList;
|
||||||
|
|
||||||
cfg = config.vim.languages.markdown;
|
cfg = config.vim.languages.markdown;
|
||||||
|
defaultServer = "marksman";
|
||||||
|
servers = {
|
||||||
|
marksman = {
|
||||||
|
package = pkgs.marksman;
|
||||||
|
lspConfig = ''
|
||||||
|
lspconfig.marksman.setup{
|
||||||
|
capabilities = capabilities;
|
||||||
|
on_attach = default_on_attach;
|
||||||
|
cmd = ${
|
||||||
|
if isList cfg.lsp.package
|
||||||
|
then nvim.lua.expToLua cfg.lsp.package
|
||||||
|
else ''{"${cfg.lsp.package}/bin/marksman", "server"}''
|
||||||
|
},
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
in {
|
in {
|
||||||
options.vim.languages.markdown = {
|
options.vim.languages.markdown = {
|
||||||
enable = mkEnableOption "Markdown markup language support";
|
enable = mkEnableOption "Markdown markup language support";
|
||||||
|
|
||||||
glow.enable = mkOption {
|
glow = {
|
||||||
type = types.bool;
|
enable = mkOption {
|
||||||
default = true;
|
type = types.bool;
|
||||||
description = "Enable markdown preview in neovim with glow";
|
default = true;
|
||||||
|
description = "Enable markdown preview in neovim with glow";
|
||||||
|
};
|
||||||
|
mappings = {
|
||||||
|
openPreview = mkMappingOption "Open preview" "<leader>p";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
treesitter = {
|
treesitter = {
|
||||||
|
@ -26,5 +49,22 @@ in {
|
||||||
mdPackage = nvim.types.mkGrammarOption pkgs "markdown";
|
mdPackage = nvim.types.mkGrammarOption pkgs "markdown";
|
||||||
mdInlinePackage = nvim.types.mkGrammarOption pkgs "markdown-inline";
|
mdInlinePackage = nvim.types.mkGrammarOption pkgs "markdown-inline";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
lsp = {
|
||||||
|
enable = mkEnableOption "Enable Markdown LSP support" // {default = config.vim.languages.enableLSP;};
|
||||||
|
|
||||||
|
server = mkOption {
|
||||||
|
description = "Markdown LSP server to use";
|
||||||
|
type = with types; enum (attrNames servers);
|
||||||
|
default = defaultServer;
|
||||||
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
description = "Markdown LSP server package, or the command to run as a list of strings";
|
||||||
|
example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]'';
|
||||||
|
type = with types; either package (listOf str);
|
||||||
|
default = servers.${cfg.lsp.server}.package;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
57
modules/languages/tailwind.nix
Normal file
57
modules/languages/tailwind.nix
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
inherit (builtins) attrNames;
|
||||||
|
inherit (lib) mkEnableOption mkOption mkIf mkMerge isList types nvim;
|
||||||
|
|
||||||
|
cfg = config.vim.languages.tailwind;
|
||||||
|
|
||||||
|
defaultServer = "tailwindcss-language-server";
|
||||||
|
servers = {
|
||||||
|
tailwindcss-language-server = {
|
||||||
|
package = pkgs.tailwindcss-language-server;
|
||||||
|
lspConfig = ''
|
||||||
|
lspconfig.tailwindcss.setup {
|
||||||
|
capabilities = capabilities;
|
||||||
|
on_attach = default_on_attach;
|
||||||
|
cmd = ${
|
||||||
|
if isList cfg.lsp.package
|
||||||
|
then nvim.lua.expToLua cfg.lsp.package
|
||||||
|
else ''{"${cfg.lsp.package}/bin/tailwindcss-language-server", "--stdio"}''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
options.vim.languages.tailwind = {
|
||||||
|
enable = mkEnableOption "Tailwindcss language support";
|
||||||
|
|
||||||
|
lsp = {
|
||||||
|
enable = mkEnableOption "Tailwindcss LSP support" // {default = config.vim.languages.enableLSP;};
|
||||||
|
|
||||||
|
server = mkOption {
|
||||||
|
description = "Tailwindcss LSP server to use";
|
||||||
|
type = with types; enum (attrNames servers);
|
||||||
|
default = defaultServer;
|
||||||
|
};
|
||||||
|
|
||||||
|
package = mkOption {
|
||||||
|
description = "Tailwindcss LSP server package, or the command to run as a list of strings";
|
||||||
|
example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]'';
|
||||||
|
type = with types; either package (listOf str);
|
||||||
|
default = servers.${cfg.lsp.server}.package;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable (mkMerge [
|
||||||
|
(mkIf cfg.lsp.enable {
|
||||||
|
vim.lsp.lspconfig.enable = true;
|
||||||
|
vim.lsp.lspconfig.sources.css-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||||
|
})
|
||||||
|
]);
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
_: {
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./presence-nvim
|
./neocord
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,26 +4,30 @@
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
inherit (lib) mkIf nvim boolToString;
|
inherit (lib) mkIf nvim boolToString;
|
||||||
|
inherit (lib.nvim.lua) listToLuaTable;
|
||||||
|
inherit (lib.strings) escapeNixString;
|
||||||
|
inherit (builtins) toString;
|
||||||
|
|
||||||
cfg = config.vim.presence.presence-nvim;
|
cfg = config.vim.presence.neocord;
|
||||||
in {
|
in {
|
||||||
config = mkIf cfg.enable {
|
config = mkIf cfg.enable {
|
||||||
vim.startPlugins = ["presence-nvim"];
|
vim.startPlugins = ["neocord"];
|
||||||
|
|
||||||
vim.luaConfigRC.presence-nvim = nvim.dag.entryAnywhere ''
|
vim.luaConfigRC.neocord = nvim.dag.entryAnywhere ''
|
||||||
-- Description of each option can be found in https://github.com/andweeb/presence.nvim
|
-- Description of each option can be found in https://github.com/IogaMaster/neocord#lua
|
||||||
require("presence").setup({
|
require("neocord").setup({
|
||||||
-- General options
|
-- General options
|
||||||
auto_update = true,
|
logo = "${cfg.logo}",
|
||||||
neovim_image_text = "${cfg.image_text}",
|
logo_tooltip = "${cfg.logo_tooltip}",
|
||||||
main_image = "${cfg.main_image}",
|
main_image = "${cfg.main_image}",
|
||||||
client_id = "${cfg.client_id}",
|
client_id = "${cfg.client_id}",
|
||||||
log_level = nil,
|
log_level = ${
|
||||||
debounce_timeout = 10,
|
if cfg.log_level == null
|
||||||
enable_line_number = "${boolToString cfg.enable_line_number}",
|
then "nil"
|
||||||
blacklist = {},
|
else "${escapeNixString cfg.log_level}"
|
||||||
buttons = "${boolToString cfg.buttons}",
|
},
|
||||||
file_assets = {},
|
debounce_timeout = ${toString cfg.debounce_timeout},
|
||||||
|
blacklist = ${listToLuaTable cfg.blacklist},
|
||||||
show_time = "${boolToString cfg.show_time}",
|
show_time = "${boolToString cfg.show_time}",
|
||||||
|
|
||||||
-- Rich Presence text options
|
-- Rich Presence text options
|
||||||
|
@ -34,6 +38,7 @@ in {
|
||||||
reading_text = "${cfg.rich_presence.reading_text}",
|
reading_text = "${cfg.rich_presence.reading_text}",
|
||||||
workspace_text = "${cfg.rich_presence.workspace_text}",
|
workspace_text = "${cfg.rich_presence.workspace_text}",
|
||||||
line_number_text = "${cfg.rich_presence.line_number_text}",
|
line_number_text = "${cfg.rich_presence.line_number_text}",
|
||||||
|
terminal_text = "${cfg.rich_presence.terminal_text}",
|
||||||
})
|
})
|
||||||
'';
|
'';
|
||||||
};
|
};
|
|
@ -1,6 +1,6 @@
|
||||||
_: {
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./config.nix
|
./config.nix
|
||||||
./presence-nvim.nix
|
./neocord.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
|
@ -1,31 +1,58 @@
|
||||||
{
|
{lib, ...}: let
|
||||||
config,
|
inherit (lib) mkEnableOption mkOption types literalExpression mkRemovedOptionModule;
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
inherit (lib) mkEnableOption mkOption types;
|
|
||||||
in {
|
in {
|
||||||
options.vim.presence.presence-nvim = {
|
imports = [
|
||||||
enable = mkEnableOption "presence.nvim plugin for discord rich presence";
|
(mkRemovedOptionModule ["vim" "presence" "presence-nvim"] ''
|
||||||
|
The option vim.presence.presence-nvim has been deprecated in favor of the new neocord module.
|
||||||
|
Options provided by the plugin remain mostly the same, but manual migration is required.
|
||||||
|
|
||||||
image_text = mkOption {
|
Please see neocord documentation and the neovim-flake options for more info
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
|
||||||
|
options.vim.presence.neocord = {
|
||||||
|
enable = mkEnableOption "neocord plugin for discord rich presence";
|
||||||
|
|
||||||
|
logo = mkOption {
|
||||||
|
type = types.str; # TODO: can the default be documented better, maybe with an enum?
|
||||||
|
default = "auto";
|
||||||
|
description = ''
|
||||||
|
Logo to be displayed on the RPC item
|
||||||
|
|
||||||
|
This must be either "auto" or an URL to your image of choice
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
logo_tooltip = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "The One True Text Editor";
|
default = "The One True Text Editor";
|
||||||
description = "Text displayed when hovering over the Neovim image";
|
description = "Text displayed when hovering over the Neovim image";
|
||||||
};
|
};
|
||||||
|
|
||||||
main_image = mkOption {
|
main_image = mkOption {
|
||||||
type = types.str;
|
type = types.enum ["language" "logo"];
|
||||||
default = "neovim";
|
default = "language";
|
||||||
description = "Main image to be displayed";
|
description = "Main image to be displayed";
|
||||||
};
|
};
|
||||||
|
|
||||||
client_id = mkOption {
|
client_id = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
default = "79327144129396737";
|
default = "1157438221865717891";
|
||||||
description = "Client ID of the application";
|
description = "Client ID of the application";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
log_level = mkOption {
|
||||||
|
type = with types; nullOr (enum ["debug" "info" "warn" "error"]);
|
||||||
|
default = null;
|
||||||
|
description = "Log level to be used by the plugin";
|
||||||
|
};
|
||||||
|
|
||||||
|
debounce_timeout = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 10;
|
||||||
|
description = "Number of seconds to debounce events";
|
||||||
|
};
|
||||||
|
|
||||||
auto_update = mkOption {
|
auto_update = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
|
@ -38,18 +65,19 @@ in {
|
||||||
description = "Show line number on the RPC item";
|
description = "Show line number on the RPC item";
|
||||||
};
|
};
|
||||||
|
|
||||||
buttons = mkOption {
|
|
||||||
type = types.bool;
|
|
||||||
default = true;
|
|
||||||
description = "Show buttons on the RPC item";
|
|
||||||
};
|
|
||||||
|
|
||||||
show_time = mkOption {
|
show_time = mkOption {
|
||||||
type = types.bool;
|
type = types.bool;
|
||||||
default = true;
|
default = true;
|
||||||
description = "Show time on the RPC item";
|
description = "Show time on the RPC item";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
blacklist = mkOption {
|
||||||
|
type = with types; listOf str;
|
||||||
|
default = [];
|
||||||
|
example = literalExpression ''["Alpha"]'';
|
||||||
|
description = "List of filetypes to ignore";
|
||||||
|
};
|
||||||
|
|
||||||
rich_presence = {
|
rich_presence = {
|
||||||
editing_text = mkOption {
|
editing_text = mkOption {
|
||||||
type = types.str;
|
type = types.str;
|
||||||
|
@ -92,6 +120,12 @@ in {
|
||||||
default = "Line %s out of %s";
|
default = "Line %s out of %s";
|
||||||
description = "Text displayed when showing line number";
|
description = "Text displayed when showing line number";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
terminal_text = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "Working on the terminal";
|
||||||
|
description = "Text displayed when working on the terminal";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
|
@ -20,10 +20,10 @@ in {
|
||||||
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}"},
|
||||||
disabled_filetypes = { 'alpha' },
|
disabled_filetypes = ${nvim.lua.listToLuaTable cfg.disabledFiletypes},
|
||||||
always_divide_middle = true,
|
always_divide_middle = ${boolToString cfg.alwaysDivideMiddle},
|
||||||
globalstatus = ${boolToString cfg.globalStatus},
|
globalstatus = ${boolToString cfg.globalStatus},
|
||||||
ignore_focus = {'NvimTree'},
|
ignore_focus = ${nvim.lua.listToLuaTable cfg.ignoreFocus},
|
||||||
extensions = {${optionalString config.vim.filetree.nvimTree.enable "'nvim-tree'"}},
|
extensions = {${optionalString config.vim.filetree.nvimTree.enable "'nvim-tree'"}},
|
||||||
refresh = {
|
refresh = {
|
||||||
statusline = ${toString cfg.refresh.statusline},
|
statusline = ${toString cfg.refresh.statusline},
|
||||||
|
@ -31,6 +31,7 @@ in {
|
||||||
winbar = ${toString cfg.refresh.winbar},
|
winbar = ${toString cfg.refresh.winbar},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
-- active sections
|
-- active sections
|
||||||
sections = {
|
sections = {
|
||||||
lualine_a = ${nvim.lua.luaTable (cfg.activeSection.a ++ cfg.extraActiveSection.a)},
|
lualine_a = ${nvim.lua.luaTable (cfg.activeSection.a ++ cfg.extraActiveSection.a)},
|
||||||
|
@ -40,7 +41,8 @@ in {
|
||||||
lualine_y = ${nvim.lua.luaTable (cfg.activeSection.y ++ cfg.extraActiveSection.y)},
|
lualine_y = ${nvim.lua.luaTable (cfg.activeSection.y ++ cfg.extraActiveSection.y)},
|
||||||
lualine_z = ${nvim.lua.luaTable (cfg.activeSection.z ++ cfg.extraActiveSection.z)},
|
lualine_z = ${nvim.lua.luaTable (cfg.activeSection.z ++ cfg.extraActiveSection.z)},
|
||||||
},
|
},
|
||||||
--
|
|
||||||
|
-- inactive sections
|
||||||
inactive_sections = {
|
inactive_sections = {
|
||||||
lualine_a = ${nvim.lua.luaTable (cfg.inactiveSection.a ++ cfg.extraInactiveSection.a)},
|
lualine_a = ${nvim.lua.luaTable (cfg.inactiveSection.a ++ cfg.extraInactiveSection.a)},
|
||||||
lualine_b = ${nvim.lua.luaTable (cfg.inactiveSection.b ++ cfg.extraInactiveSection.b)},
|
lualine_b = ${nvim.lua.luaTable (cfg.inactiveSection.b ++ cfg.extraInactiveSection.b)},
|
||||||
|
@ -49,9 +51,12 @@ in {
|
||||||
lualine_y = ${nvim.lua.luaTable (cfg.inactiveSection.y ++ cfg.extraInactiveSection.y)},
|
lualine_y = ${nvim.lua.luaTable (cfg.inactiveSection.y ++ cfg.extraInactiveSection.y)},
|
||||||
lualine_z = ${nvim.lua.luaTable (cfg.inactiveSection.z ++ cfg.extraInactiveSection.z)},
|
lualine_z = ${nvim.lua.luaTable (cfg.inactiveSection.z ++ cfg.extraInactiveSection.z)},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
-- tabline (currently unsupported)
|
||||||
tabline = {},
|
tabline = {},
|
||||||
|
|
||||||
${optionalString (breadcrumbsCfg.enable && breadcrumbsCfg.source == "nvim-navic") ''
|
${optionalString (breadcrumbsCfg.enable && breadcrumbsCfg.source == "nvim-navic") ''
|
||||||
|
-- enable winbar if nvim-navic is enabled
|
||||||
winbar = {
|
winbar = {
|
||||||
lualine_c = {
|
lualine_c = {
|
||||||
{
|
{
|
||||||
|
|
|
@ -24,11 +24,13 @@ in {
|
||||||
description = "Refresh rate for lualine";
|
description = "Refresh rate for lualine";
|
||||||
default = 1000;
|
default = 1000;
|
||||||
};
|
};
|
||||||
|
|
||||||
tabline = mkOption {
|
tabline = mkOption {
|
||||||
type = types.int;
|
type = types.int;
|
||||||
description = "Refresh rate for tabline";
|
description = "Refresh rate for tabline";
|
||||||
default = 1000;
|
default = 1000;
|
||||||
};
|
};
|
||||||
|
|
||||||
winbar = mkOption {
|
winbar = mkOption {
|
||||||
type = types.int;
|
type = types.int;
|
||||||
description = "Refresh rate for winbar";
|
description = "Refresh rate for winbar";
|
||||||
|
@ -42,6 +44,27 @@ in {
|
||||||
default = true;
|
default = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
alwaysDivideMiddle = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
description = "Always divide middle section";
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
disabledFiletypes = mkOption {
|
||||||
|
type = with types; listOf str;
|
||||||
|
description = "Filetypes to disable lualine on";
|
||||||
|
default = ["alpha"];
|
||||||
|
};
|
||||||
|
|
||||||
|
ignoreFocus = mkOption {
|
||||||
|
type = with types; listOf str;
|
||||||
|
default = ["NvimTree"];
|
||||||
|
description = ''
|
||||||
|
If current filetype is in this list it'll always be drawn as inactive statusline
|
||||||
|
and the last window will be drawn as active statusline.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
theme = let
|
theme = let
|
||||||
themeSupported = elem config.vim.theme.name supported_themes;
|
themeSupported = elem config.vim.theme.name supported_themes;
|
||||||
in
|
in
|
||||||
|
@ -175,6 +198,9 @@ in {
|
||||||
bg='${colorPuccin}',
|
bg='${colorPuccin}',
|
||||||
fg='lavender'
|
fg='lavender'
|
||||||
},
|
},
|
||||||
|
separator = {
|
||||||
|
right = ''
|
||||||
|
},
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
];
|
];
|
||||||
|
@ -220,6 +246,9 @@ in {
|
||||||
end,
|
end,
|
||||||
icon = ' ',
|
icon = ' ',
|
||||||
color = {bg='${colorPuccin}', fg='lavender'},
|
color = {bg='${colorPuccin}', fg='lavender'},
|
||||||
|
separator = {
|
||||||
|
left = '',
|
||||||
|
},
|
||||||
}
|
}
|
||||||
''
|
''
|
||||||
''
|
''
|
||||||
|
|
|
@ -3,4 +3,5 @@
|
||||||
"onedark"
|
"onedark"
|
||||||
"catppuccin"
|
"catppuccin"
|
||||||
"oxocarbon"
|
"oxocarbon"
|
||||||
|
"gruvbox"
|
||||||
]
|
]
|
||||||
|
|
|
@ -92,4 +92,40 @@
|
||||||
'';
|
'';
|
||||||
styles = ["dark" "light"];
|
styles = ["dark" "light"];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
gruvbox = {
|
||||||
|
setup = {
|
||||||
|
style ? "dark",
|
||||||
|
transparent ? false,
|
||||||
|
}: ''
|
||||||
|
-- Gruvbox theme
|
||||||
|
require("gruvbox").setup({
|
||||||
|
terminal_colors = true, -- add neovim terminal colors
|
||||||
|
undercurl = true,
|
||||||
|
underline = true,
|
||||||
|
bold = true,
|
||||||
|
italic = {
|
||||||
|
strings = true,
|
||||||
|
emphasis = true,
|
||||||
|
comments = true,
|
||||||
|
operators = false,
|
||||||
|
folds = true,
|
||||||
|
},
|
||||||
|
strikethrough = true,
|
||||||
|
invert_selection = false,
|
||||||
|
invert_signs = false,
|
||||||
|
invert_tabline = false,
|
||||||
|
invert_intend_guides = false,
|
||||||
|
inverse = true,
|
||||||
|
contrast = "",
|
||||||
|
palette_overrides = {},
|
||||||
|
overrides = {},
|
||||||
|
dim_inactive = false,
|
||||||
|
transparent_mode = ${lib.boolToString transparent},
|
||||||
|
})
|
||||||
|
vim.o.background = "${style}"
|
||||||
|
vim.cmd("colorscheme gruvbox")
|
||||||
|
'';
|
||||||
|
styles = ["dark" "light"];
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
4
release.json
Normal file
4
release.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"release": "v0.6",
|
||||||
|
"isReleaseBranch": false
|
||||||
|
}
|
Loading…
Reference in a new issue