mirror of
https://github.com/NotAShelf/nvf.git
synced 2025-09-06 10:21:31 +00:00
Merge branch 'main' into v0.7
This commit is contained in:
commit
141a272747
44 changed files with 702 additions and 649 deletions
260
docs/default.nix
260
docs/default.nix
|
@ -2,131 +2,131 @@
|
|||
inputs,
|
||||
pkgs,
|
||||
lib,
|
||||
manpageUrls ? pkgs.path + "/doc/manpage-urls.json",
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkForce evalModules;
|
||||
inherit (lib.strings) hasPrefix removePrefix;
|
||||
inherit (lib.attrsets) isAttrs mapAttrs optionalAttrs recursiveUpdate isDerivation;
|
||||
inherit (builtins) fromJSON readFile;
|
||||
inherit ((lib.importJSON ../release.json)) release;
|
||||
|
||||
# release data
|
||||
release-config = fromJSON (readFile ../release.json);
|
||||
revision = release-config.release;
|
||||
|
||||
# From home-manager:
|
||||
#
|
||||
# Recursively replace each derivation in the given attribute set
|
||||
# with the same derivation but with the `outPath` attribute set to
|
||||
# the string `"\${pkgs.attribute.path}"`. This allows the
|
||||
# documentation to refer to derivations through their values without
|
||||
# establishing an actual dependency on the derivation output.
|
||||
#
|
||||
# This is not perfect, but it seems to cover a vast majority of use
|
||||
# cases.
|
||||
#
|
||||
# Caveat: even if the package is reached by a different means, the
|
||||
# path above will be shown and not e.g.
|
||||
# `${config.services.foo.package}`.
|
||||
scrubDerivations = prefixPath: attrs: let
|
||||
scrubDerivation = name: value: let
|
||||
pkgAttrName = prefixPath + "." + name;
|
||||
in
|
||||
if isAttrs value
|
||||
then
|
||||
scrubDerivations pkgAttrName value
|
||||
// optionalAttrs (isDerivation value) {
|
||||
outPath = "\${${pkgAttrName}}";
|
||||
}
|
||||
else value;
|
||||
in
|
||||
mapAttrs scrubDerivation attrs;
|
||||
|
||||
# Make sure the used package is scrubbed to avoid actually
|
||||
# instantiating derivations.
|
||||
scrubbedPkgsModule = {
|
||||
imports = [
|
||||
{
|
||||
_module.args = {
|
||||
pkgs = mkForce (scrubDerivations "pkgs" pkgs);
|
||||
pkgs_i686 = mkForce {};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# Specify the path to the module entrypoint
|
||||
nvimPath = toString ./..;
|
||||
buildOptionsDocs = args @ {
|
||||
modules,
|
||||
includeModuleSystemOptions ? true,
|
||||
warningsAreErrors ? true,
|
||||
...
|
||||
}: let
|
||||
inherit ((evalModules {inherit modules;})) options;
|
||||
|
||||
# Declaration of the Github site URL.
|
||||
# Takes a user, repo, and subpath, and returns a declaration site
|
||||
# as a string.
|
||||
githubDeclaration = user: repo: subpath: let
|
||||
urlRef = "github.com";
|
||||
branch = "main";
|
||||
in {
|
||||
url = "https://${urlRef}/${user}/${repo}/blob/${branch}/${subpath}";
|
||||
name = "<${repo}/${subpath}>";
|
||||
};
|
||||
in
|
||||
pkgs.buildPackages.nixosOptionsDoc ({
|
||||
inherit warningsAreErrors;
|
||||
|
||||
options =
|
||||
if includeModuleSystemOptions
|
||||
then options
|
||||
else builtins.removeAttrs options ["_module"];
|
||||
|
||||
transformOptions = opt:
|
||||
recursiveUpdate opt {
|
||||
# Clean up declaration sites to not refer to the nvf
|
||||
# source tree.
|
||||
declarations = map (decl:
|
||||
if hasPrefix nvimPath (toString decl)
|
||||
then
|
||||
githubDeclaration "notashelf" "nvf"
|
||||
(removePrefix "/" (removePrefix nvimPath (toString decl)))
|
||||
else if decl == "lib/modules.nix"
|
||||
then
|
||||
# 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" "includeModuleSystemOptions"]);
|
||||
|
||||
nvimModuleDocs = buildOptionsDocs {
|
||||
nvimModuleDocs = pkgs.nixosOptionsDoc {
|
||||
variablelistId = "nvf-options";
|
||||
warningsAreErrors = true;
|
||||
|
||||
modules =
|
||||
import ../modules/modules.nix {
|
||||
inherit lib pkgs;
|
||||
check = false;
|
||||
}
|
||||
++ [scrubbedPkgsModule];
|
||||
inherit
|
||||
(
|
||||
(lib.evalModules {
|
||||
modules =
|
||||
import ../modules/modules.nix {
|
||||
inherit lib pkgs;
|
||||
}
|
||||
++ [
|
||||
(
|
||||
let
|
||||
# From nixpkgs:
|
||||
#
|
||||
# Recursively replace each derivation in the given attribute set
|
||||
# with the same derivation but with the `outPath` attribute set to
|
||||
# the string `"\${pkgs.attribute.path}"`. This allows the
|
||||
# documentation to refer to derivations through their values without
|
||||
# establishing an actual dependency on the derivation output.
|
||||
#
|
||||
# This is not perfect, but it seems to cover a vast majority of use
|
||||
# cases.
|
||||
#
|
||||
# Caveat: even if the package is reached by a different means, the
|
||||
# path above will be shown and not e.g.
|
||||
# `${config.services.foo.package}`.
|
||||
scrubDerivations = namePrefix: pkgSet:
|
||||
builtins.mapAttrs (
|
||||
name: value: let
|
||||
wholeName = "${namePrefix}.${name}";
|
||||
in
|
||||
if builtins.isAttrs value
|
||||
then
|
||||
scrubDerivations wholeName value
|
||||
// lib.optionalAttrs (lib.isDerivation value) {
|
||||
inherit (value) drvPath;
|
||||
outPath = "\${${wholeName}}";
|
||||
}
|
||||
else value
|
||||
)
|
||||
pkgSet;
|
||||
in {
|
||||
_module = {
|
||||
check = false;
|
||||
args.pkgs = lib.mkForce (scrubDerivations "pkgs" pkgs);
|
||||
};
|
||||
}
|
||||
)
|
||||
];
|
||||
})
|
||||
)
|
||||
options
|
||||
;
|
||||
|
||||
transformOptions = opt:
|
||||
opt
|
||||
// {
|
||||
declarations =
|
||||
map (
|
||||
decl:
|
||||
if lib.hasPrefix (toString ../.) (toString decl)
|
||||
then
|
||||
lib.pipe decl [
|
||||
toString
|
||||
(lib.removePrefix (toString ../.))
|
||||
(lib.removePrefix "/")
|
||||
(x: {
|
||||
url = "https://github.com/NotAShelf/nvf/blob/main/${decl}";
|
||||
name = "<nvf/${x}>";
|
||||
})
|
||||
]
|
||||
else if decl == "lib/modules.nix"
|
||||
then {
|
||||
url = "https://github.com/NixOS/nixpkgs/blob/master/${decl}";
|
||||
name = "<nixpkgs/lib/modules.nix>";
|
||||
}
|
||||
else decl
|
||||
)
|
||||
opt.declarations;
|
||||
};
|
||||
};
|
||||
|
||||
# Generate the HTML manual pages
|
||||
html = pkgs.callPackage ./manual.nix {
|
||||
inherit release;
|
||||
inherit (nvimModuleDocs) optionsJSON;
|
||||
};
|
||||
in {
|
||||
inherit (inputs) nmd;
|
||||
|
||||
# TODO: Use `hmOptionsDocs.optionsJSON` directly once upstream
|
||||
# `nixosOptionsDoc` is more customizable.
|
||||
options.json =
|
||||
pkgs.runCommand "options.json" {
|
||||
meta.description = "List of nvf options in JSON format";
|
||||
} ''
|
||||
mkdir -p $out/{share/doc,nix-support}
|
||||
cp -a ${nvimModuleDocs.optionsJSON}/share/doc/nixos $out/share/doc/nvf
|
||||
substitute \
|
||||
${nvimModuleDocs.optionsJSON}/nix-support/hydra-build-products \
|
||||
$out/nix-support/hydra-build-products \
|
||||
--replace \
|
||||
'${nvimModuleDocs.optionsJSON}/share/doc/nixos' \
|
||||
"$out/share/doc/nvf"
|
||||
'';
|
||||
|
||||
# Generate the `man home-configuration.nix` package
|
||||
nvf-configuration-manual =
|
||||
manPages =
|
||||
pkgs.runCommand "nvf-reference-manpage" {
|
||||
nativeBuildInputs = [pkgs.buildPackages.installShellFiles pkgs.nixos-render-docs];
|
||||
nativeBuildInputs = [
|
||||
pkgs.buildPackages.installShellFiles
|
||||
pkgs.nixos-render-docs
|
||||
];
|
||||
allowedReferences = ["out"];
|
||||
} ''
|
||||
# Generate manpages.
|
||||
mkdir -p $out/share/man/man5
|
||||
mkdir -p $out/share/man/man1
|
||||
mkdir -p $out/share/man/{man5,man1}
|
||||
|
||||
nixos-render-docs -j $NIX_BUILD_CORES options manpage \
|
||||
--revision ${revision} \
|
||||
--revision ${release} \
|
||||
--header ${./man/header.5} \
|
||||
--footer ${./man/footer.5} \
|
||||
${nvimModuleDocs.optionsJSON}/share/doc/nixos/options.json \
|
||||
|
@ -135,38 +135,8 @@
|
|||
cp ${./man/nvf.1} $out/share/man/man1/nvf.1
|
||||
'';
|
||||
|
||||
# Generate the HTML manual pages
|
||||
nvf-manual = pkgs.callPackage ./manual.nix {
|
||||
inherit revision manpageUrls;
|
||||
outputPath = "share/doc/nvf";
|
||||
options = {
|
||||
nvf = nvimModuleDocs.optionsJSON;
|
||||
};
|
||||
manual = {
|
||||
inherit html;
|
||||
htmlOpenTool = pkgs.callPackage ./html-open-tool.nix {inherit html;};
|
||||
};
|
||||
|
||||
html = nvf-manual;
|
||||
htmlOpenTool = pkgs.callPackage ./html-open-tool.nix {} {inherit html;};
|
||||
in {
|
||||
inherit (inputs) nmd;
|
||||
|
||||
options = {
|
||||
# TODO: Use `hmOptionsDocs.optionsJSON` directly once upstream
|
||||
# `nixosOptionsDoc` is more customizable.
|
||||
json =
|
||||
pkgs.runCommand "options.json" {
|
||||
meta.description = "List of nvf options in JSON format";
|
||||
} ''
|
||||
mkdir -p $out/{share/doc,nix-support}
|
||||
cp -a ${nvimModuleDocs.optionsJSON}/share/doc/nixos $out/share/doc/nvf
|
||||
substitute \
|
||||
${nvimModuleDocs.optionsJSON}/nix-support/hydra-build-products \
|
||||
$out/nix-support/hydra-build-products \
|
||||
--replace \
|
||||
'${nvimModuleDocs.optionsJSON}/share/doc/nixos' \
|
||||
"$out/share/doc/nvf"
|
||||
'';
|
||||
};
|
||||
|
||||
manPages = nvf-configuration-manual;
|
||||
manual = {inherit html htmlOpenTool;};
|
||||
}
|
||||
|
|
|
@ -2,13 +2,9 @@
|
|||
writeShellScriptBin,
|
||||
makeDesktopItem,
|
||||
symlinkJoin,
|
||||
}: {
|
||||
html,
|
||||
pathName ? "nvf",
|
||||
projectName ? pathName,
|
||||
name ? "${pathName}-help",
|
||||
}: let
|
||||
helpScript = writeShellScriptBin name ''
|
||||
helpScript = writeShellScriptBin "nvf-help" ''
|
||||
set -euo pipefail
|
||||
|
||||
if [[ ! -v BROWSER || -z $BROWSER ]]; then
|
||||
|
@ -24,20 +20,23 @@
|
|||
echo "$0: unable to start a web browser; please set \$BROWSER"
|
||||
exit 1
|
||||
else
|
||||
exec "$BROWSER" "${html}/share/doc/${pathName}/index.xhtml"
|
||||
exec "$BROWSER" "${html}/share/doc/nvf/index.xhtml"
|
||||
fi
|
||||
'';
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
name = "${pathName}-manual";
|
||||
desktopName = "${projectName} Manual";
|
||||
genericName = "View ${projectName} documentation in a web browser";
|
||||
name = "nvf-manual";
|
||||
desktopName = "nvf Manual";
|
||||
genericName = "View nvf documentation in a web browser";
|
||||
icon = "nix-snowflake";
|
||||
exec = "${helpScript}/bin/${name}";
|
||||
exec = "${helpScript}/bin/nvf-help";
|
||||
categories = ["System"];
|
||||
};
|
||||
in
|
||||
symlinkJoin {
|
||||
inherit name;
|
||||
paths = [helpScript desktopItem];
|
||||
name = "nvf-help";
|
||||
paths = [
|
||||
helpScript
|
||||
desktopItem
|
||||
];
|
||||
}
|
||||
|
|
|
@ -4,11 +4,10 @@
|
|||
# build inputs
|
||||
nixos-render-docs,
|
||||
documentation-highlighter,
|
||||
path,
|
||||
# nrd configuration
|
||||
manpageUrls,
|
||||
revision,
|
||||
options,
|
||||
outputPath ? "share/doc/nvf",
|
||||
release,
|
||||
optionsJSON,
|
||||
}:
|
||||
stdenvNoCC.mkDerivation {
|
||||
name = "nvf-manual";
|
||||
|
@ -20,9 +19,11 @@ stdenvNoCC.mkDerivation {
|
|||
nativeBuildInputs = [nixos-render-docs];
|
||||
|
||||
buildPhase = ''
|
||||
mkdir -p out/{highlightjs,media}
|
||||
dest="$out/share/doc/nvf"
|
||||
mkdir -p "$(dirname "$dest")"
|
||||
mkdir -p $dest/{highlightjs,media}
|
||||
|
||||
cp -vt out/highlightjs \
|
||||
cp -vt $dest/highlightjs \
|
||||
${documentation-highlighter}/highlight.pack.js \
|
||||
${documentation-highlighter}/LICENSE \
|
||||
${documentation-highlighter}/mono-blue.css \
|
||||
|
@ -31,38 +32,32 @@ stdenvNoCC.mkDerivation {
|
|||
substituteInPlace ./options.md \
|
||||
--subst-var-by \
|
||||
OPTIONS_JSON \
|
||||
${options.nvf}/share/doc/nixos/options.json
|
||||
${optionsJSON}/share/doc/nixos/options.json
|
||||
|
||||
substituteInPlace ./manual.md \
|
||||
--subst-var-by \
|
||||
NVF_VERSION \
|
||||
${revision}
|
||||
${release}
|
||||
|
||||
# copy stylesheet
|
||||
cp ${./static/style.css} out/style.css
|
||||
cp ${./static/style.css} "$dest/style.css"
|
||||
|
||||
# copy release notes
|
||||
cp -vr ${./release-notes} release-notes
|
||||
|
||||
# generate manual from
|
||||
nixos-render-docs manual html \
|
||||
--manpage-urls ${manpageUrls} \
|
||||
--revision ${lib.trivial.revisionWithDefault revision} \
|
||||
--manpage-urls ${path + "/doc/manpage-urls.json"} \
|
||||
--revision ${lib.trivial.revisionWithDefault release} \
|
||||
--stylesheet style.css \
|
||||
--script highlightjs/highlight.pack.js \
|
||||
--script highlightjs/loader.js \
|
||||
--toc-depth 2 \
|
||||
--section-toc-depth 1 \
|
||||
manual.md \
|
||||
out/index.xhtml
|
||||
'';
|
||||
"$dest/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
|
||||
mkdir -p $out/nix-support/
|
||||
echo "doc manual $dest index.html" >> $out/nix-support/hydra-build-products
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Custom Plugins {#ch-custom-plugins}
|
||||
|
||||
**nvf**, by default, exposes a wide variety of plugins as module options
|
||||
for your convience and bundles necessary dependencies into **nvf**'s runtime.
|
||||
for your convenience and bundles necessary dependencies into **nvf**'s runtime.
|
||||
In case a plugin is not available in **nvf**, you may consider making a pull
|
||||
request to **nvf** to include it as a module or you may add it to your
|
||||
configuration locally.
|
||||
|
|
|
@ -11,7 +11,7 @@ entries in nvf:
|
|||
inserted before the rest of the DAG
|
||||
2. `globalsScript` - used to set globals defined in `vim.globals`
|
||||
3. `basic` - used to set basic configuration options
|
||||
4. `theme` - used to set up the theme, which has to be done before other plugins
|
||||
4. `theme` (this is simply placed before `pluginConfigs`, meaning that surrounding entries don't depend on it) - used to set up the theme, which has to be done before other plugins
|
||||
5. `pluginConfigs` - the result of the nested `vim.pluginRC` (internal option,
|
||||
see the [Custom Plugins](/index.xhtml#ch-custom-plugins) page for adding your own
|
||||
plugins) DAG, used to set up internal plugins
|
||||
|
|
|
@ -48,6 +48,18 @@ vim.maps."<leader>m" = {
|
|||
};
|
||||
```
|
||||
|
||||
### `vim.lsp.nvimCodeActionMenu` removed in favor of `vim.ui.fastaction` {#sec-nvim-code-action-menu-deprecation}
|
||||
|
||||
The nvim-code-action-menu plugin has been archived and broken for a long time,
|
||||
so it's being replaced with a young, but better alternative called
|
||||
fastaction.nvim. Simply remove everything set under
|
||||
`vim.lsp.nvimCodeActionMenu`, and set `vim.ui.fastaction.enable` to `true`.
|
||||
|
||||
Note that we are looking to add more alternatives in the future like
|
||||
dressing.nvim and actions-preview.nvim, in case fastaction doesn't work for
|
||||
everyone.
|
||||
|
||||
|
||||
## Changelog {#sec-release-0.7-changelog}
|
||||
|
||||
[ItsSorae](https://github.com/ItsSorae):
|
||||
|
@ -77,6 +89,7 @@ vim.maps."<leader>m" = {
|
|||
longer filtered and thus should be used instead.
|
||||
- Add dap-go for better dap configurations
|
||||
- Make noice.nvim customizable
|
||||
- Standardize border style options and add custom borders
|
||||
|
||||
[rust-tools.nvim]: https://github.com/simrat39/rust-tools.nvim
|
||||
[rustaceanvim]: https://github.com/mrcjkb/rustaceanvim
|
||||
|
@ -95,7 +108,8 @@ vim.maps."<leader>m" = {
|
|||
|
||||
- Fix "Emac" typo
|
||||
|
||||
- Add [new-file-template.nvim] to automatically fill new file contents using templates.
|
||||
- Add [new-file-template.nvim] to automatically fill new file contents using
|
||||
templates.
|
||||
|
||||
[diniamo](https://github.com/diniamo):
|
||||
|
||||
|
@ -117,7 +131,6 @@ vim.maps."<leader>m" = {
|
|||
plugin's options can now be found under `indentBlankline.setupOpts`, the
|
||||
previous iteration of the module also included out of place/broken options,
|
||||
which have been removed for the time being. These are:
|
||||
|
||||
- `listChar` - this was already unused
|
||||
- `fillChar` - this had nothing to do with the plugin, please configure it
|
||||
yourself by adding `vim.opt.listchars:append({ space = '<char>' })` to your
|
||||
|
@ -126,6 +139,9 @@ vim.maps."<leader>m" = {
|
|||
yourself by adding `vim.opt.listchars:append({ eol = '<char>' })` to your
|
||||
lua configuration
|
||||
|
||||
- Replace `vim.lsp.nvimCodeActionMenu` with `vim.ui.fastaction`, see the
|
||||
breaking changes section above for more details
|
||||
|
||||
[Neovim documentation on `vim.cmd`]: https://neovim.io/doc/user/lua.html#vim.cmd()
|
||||
|
||||
- Make Neovim's configuration file entirely Lua based. This comes with a few
|
||||
|
@ -172,7 +188,31 @@ vim.maps."<leader>m" = {
|
|||
- Add `nvf-print-config` & `nvf-print-config-path` helper scripts to Neovim
|
||||
closure. Both of those scripts have been automatically added to your PATH upon
|
||||
using neovimConfig or `programs.nvf.enable`.
|
||||
|
||||
- `nvf-print-config` will display your `init.lua`, in full.
|
||||
- `nvf-print-config-path` will display the path to _a clone_ of your
|
||||
`init.lua`. This is not the path used by the Neovim wrapper, but an
|
||||
identical clone.
|
||||
|
||||
- Add `vim.ui.breadcrumbs.lualine` to allow fine-tuning breadcrumbs behaviour on
|
||||
Lualine. Only `vim.ui.breadcrumbs.lualine.winbar` is supported for the time
|
||||
being.
|
||||
|
||||
- [](#opt-vim.ui.breadcrumbs.lualine.winbar.enable) has been added to allow
|
||||
controlling the default behaviour of the `nvim-navic` component on Lualine,
|
||||
which used to occupy `winbar.lualine_c` as long as breadcrumbs are enabled.
|
||||
- `vim.ui.breadcrumbs.alwaysRender` has been renamed to
|
||||
[](#opt-vim.ui.breadcrumbs.lualine.winbar.alwaysRender) to be conform to the
|
||||
new format.
|
||||
|
||||
- Add [basedpyright](https://github.com/detachhead/basedpyright) as a Python LSP
|
||||
server and make it default.
|
||||
|
||||
- Add [python-lsp-server](https://github.com/python-lsp/python-lsp-server) as an
|
||||
additional Python LSP server.
|
||||
|
||||
[ppenguin](https://github.com/ppenguin):
|
||||
|
||||
- Telescope:
|
||||
- Fixed `project-nvim` command and keybinding
|
||||
- Added default ikeybind/command for `Telescope resume` (`<leader>fr`)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue