merge main into breadcrumbs

This commit is contained in:
raf 2023-07-28 16:00:40 +03:00
commit d96d885fdd
No known key found for this signature in database
GPG key ID: 02D1DD3FA08B6B29
20 changed files with 205 additions and 63 deletions

View file

@ -188,6 +188,7 @@ inputs: let
}; };
vim.ui = { vim.ui = {
borders.enable = true;
noice.enable = true; noice.enable = true;
colorizer.enable = true; colorizer.enable = true;
modes-nvim.enable = false; # the theme looks terrible with catppuccin modes-nvim.enable = false; # the theme looks terrible with catppuccin

View file

@ -3,11 +3,42 @@
You can use custom plugins, before they are implemented in the flake. 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. To add a plugin, you need to add it to your config's `config.vim.startPlugins` array.
This is an example of adding the FrenzyExists/aquarium-vim plugin:
=== 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] [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"];
};
};
}
----
=== 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 orderof the plugins is determined by DAGs.
[source,nix]
----
{
# fetch plugin source from GitHub and add it to startPlugins
config.vim.startPlugins = [ config.vim.startPlugins = [
(pkgs.fetchFromGitHub { (pkgs.fetchFromGitHub {
owner = "FrenzyExists"; owner = "FrenzyExists";

View file

@ -43,38 +43,4 @@ Then we should be able to use the given module. E.g.
} }
---- ----
=== Custom vim/neovim plugins
It is possible to add custom plugins to your configuration by using the `vim.startPlugins` option and the this flake's lua DAG library.
Start by adding it to startPlugins. This example uses nvim-surround, but the process will be similar for other plugins as well.
[source,nix]
----
{
programs.neovim-flake = {
enable = true;
settings = {
vim.startPlugins = [ pkgs.vimPlugins.nvim-surround ];
};
};
}
----
Followed by requiring the plugin, should it need one, in the lua DAG. Please note that you're able to name the DAG to however you want, the name will add a `--SECTION <name>` in the init.vim, under which it will be initialized. `lib.nvim.dag.entryAfter ["name"]` could also be used to initialize a plugin only after a previous plugin has beeni initialize
Your final setup will likely look like this, where nvim-flake refers to your flake input or fetch.
[source,nix]
----
{
programs.neovim-flake = {
enable = true;
settings = {
vim.startPlugins = [ pkgs.vimPlugins.nvim-surround ];
luaConfigRC.nvim-surround = nvim-flake.lib.nvim.dag.entryAnywhere '' # nvim-flake is a reference to the flake. Please change this accordingly to your config.
require("nvim-surround").setup()
'';
};
};
}
----

View file

@ -8,14 +8,18 @@
https://github.com/horriblename[horriblename]: https://github.com/horriblename[horriblename]:
* Add transparency support for tokyonight theme. * Added transparency support for tokyonight theme.
* Fix bug where cmp's close and scrollDocs mappings wasn't working. * 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>>.
https://github.com/amanse[amanse]: https://github.com/amanse[amanse]:
* Add daily notes options for obsidian plugin * Added daily notes options for obsidian plugin.
https://github.com/notashelf[notashelf]: https://github.com/notashelf[notashelf]:
* Add GitHub Copilot to completion sources * Added GitHub Copilot to completion sources.
* Added <<opt-vim.ui.borders>> for global and individual plugin border configuration.

View file

@ -855,17 +855,17 @@
"nmd": { "nmd": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1680213367, "lastModified": 1687627428,
"narHash": "sha256-NbSXxpFAK5IMcsQTK0vSGy099HExx3SEagqW4Lpc+X8=", "narHash": "sha256-7zGfXuNS5RHqhpEdz2fwrtqvF86JRo5U1hrxZSYgcm8=",
"owner": "rycee", "owner": "~rycee",
"repo": "nmd", "repo": "nmd",
"rev": "abb15317ebd17e5a0a7dd105e2ce52f2700185a8", "rev": "824a380546b5d0d0eb701ff8cd5dbafb360750ff",
"type": "gitlab" "type": "sourcehut"
}, },
"original": { "original": {
"owner": "rycee", "owner": "~rycee",
"repo": "nmd", "repo": "nmd",
"type": "gitlab" "type": "sourcehut"
} }
}, },
"noice-nvim": { "noice-nvim": {

View file

@ -58,7 +58,7 @@
# For generating documentation website # For generating documentation website
nmd = { nmd = {
url = "gitlab:rycee/nmd"; url = "sourcehut:~rycee/nmd";
flake = false; flake = false;
}; };

View file

@ -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; inherit (typesPlugin) pluginsOpt extraPluginType;
inherit (typesLanguage) diagnostics mkGrammarOption; inherit (typesLanguage) diagnostics mkGrammarOption;
} }

View file

@ -92,15 +92,37 @@ with lib; let
"copilot-cmp" "copilot-cmp"
]; ];
# You can either use the name of the plugin or a package. # You can either use the name of the plugin or a package.
pluginsType = with types; pluginType = with types;
listOf (
nullOr ( nullOr (
either either
(enum availablePlugins)
package package
) (enum availablePlugins)
); );
pluginsType = types.listOf pluginType;
extraPluginType = with types;
submodule {
options = {
package = mkOption {
type = pluginType;
};
after = mkOption {
type = listOf str;
default = [];
description = "Setup this plugin after the following ones.";
};
setup = mkOption {
type = lines;
default = "";
description = "Lua code to run during setup.";
example = "require('aerial').setup {}";
};
};
};
in { in {
inherit extraPluginType;
pluginsOpt = { pluginsOpt = {
description, description,
default ? [], default ? [],

View file

@ -193,12 +193,14 @@ in {
local cmp = require'cmp' local cmp = require'cmp'
cmp.setup({ cmp.setup({
${optionalString (config.vim.ui.borders.enable) ''
-- explicitly enabled by setting ui.borders.enable = true
-- TODO: try to get nvim-cmp to follow global border style
window = { window = {
-- TODO: at some point, those need to be optional
-- but first nvim cmp module needs to be detached from "cfg.autocomplete"
completion = cmp.config.window.bordered(), completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(),
}, },
''}
snippet = { snippet = {
expand = function(args) expand = function(args)

View file

@ -158,6 +158,27 @@ in {
description = "List of plugins to optionally load"; description = "List of plugins to optionally load";
}; };
extraPlugins = mkOption {
type = types.attrsOf nvim.types.extraPluginType;
default = {};
description = ''
List of plugins and related config.
Note that these are setup after builtin plugins.
'';
example = literalExpression ''
with pkgs.vimPlugins; {
aerial = {
package = aerial-nvim;
setup = "require('aerial').setup {}";
};
harpoon = {
package = harpoon;
setup = "require('harpoon').setup {}";
after = ["aerial"];
};
}'';
};
globals = mkOption { globals = mkOption {
default = {}; default = {};
description = "Set containing global variable values"; description = "Set containing global variable values";
@ -297,6 +318,7 @@ in {
result; result;
in { in {
vim = { vim = {
startPlugins = map (x: x.package) (attrValues cfg.extraPlugins);
configRC = { configRC = {
globalsScript = nvim.dag.entryAnywhere (concatStringsSep "\n" globalsScript); globalsScript = nvim.dag.entryAnywhere (concatStringsSep "\n" globalsScript);
@ -314,6 +336,27 @@ in {
in in
nvim.dag.entryAfter ["globalsScript"] luaConfig; nvim.dag.entryAfter ["globalsScript"] luaConfig;
extraPluginConfigs = let
mkSection = r: ''
-- SECTION: ${r.name}
${r.data}
'';
mapResult = r: (wrapLuaConfig (concatStringsSep "\n" (map mkSection r)));
extraPluginsDag = mapAttrs (_: {
after,
setup,
...
}:
nvim.dag.entryAfter after setup)
cfg.extraPlugins;
pluginConfig = resolveDag {
name = "extra plugins config";
dag = extraPluginsDag;
inherit mapResult;
};
in
nvim.dag.entryAfter ["luaScript"] pluginConfig;
# This is probably not the right way to set the config. I'm not sure how it should look like. # This is probably not the right way to set the config. I'm not sure how it should look like.
mappings = let mappings = let
maps = [ maps = [

View file

@ -14,7 +14,14 @@ in {
vim.luaConfigRC.lsp-signature = nvim.dag.entryAnywhere '' vim.luaConfigRC.lsp-signature = nvim.dag.entryAnywhere ''
-- Enable lsp signature viewer -- Enable lsp signature viewer
require("lsp_signature").setup() require("lsp_signature").setup({
${optionalString (config.vim.ui.borders.plugins.lsp-signature.enable) ''
bind = true, -- This is mandatory, otherwise border config won't get registered.
handler_opts = {
border = "${config.vim.ui.borders.plugins.lsp-signature.style}"
}
''}
})
''; '';
}; };
} }

View file

@ -16,6 +16,13 @@ in {
vim.luaConfigRC.lspconfig = nvim.dag.entryAfter ["lsp-setup"] '' vim.luaConfigRC.lspconfig = nvim.dag.entryAfter ["lsp-setup"] ''
local lspconfig = require('lspconfig') local lspconfig = require('lspconfig')
${
# TODO: make border style configurable
optionalString (config.vim.ui.borders.enable) ''
require('lspconfig.ui.windows').default_options.border = '${config.vim.ui.borders.globalStyle}'
''
}
''; '';
} }
{ {

View file

@ -39,7 +39,11 @@ in {
vim.luaConfigRC.lspsage = nvim.dag.entryAnywhere '' vim.luaConfigRC.lspsage = nvim.dag.entryAnywhere ''
-- Enable lspsaga -- Enable lspsaga
local saga = require 'lspsaga' local saga = require 'lspsaga'
saga.init_lsp_saga() saga.init_lsp_saga({
${optionalString (config.vim.ui.borders.plugins.lspsaga.enable) ''
border_style = '${config.vim.ui.borders.plugins.lspsaga.style}',
''}
})
''; '';
}; };
} }

View file

@ -27,7 +27,7 @@ in {
vim.luaConfigRC.codewindow = nvim.dag.entryAnywhere '' vim.luaConfigRC.codewindow = nvim.dag.entryAnywhere ''
local codewindow = require('codewindow') local codewindow = require('codewindow')
codewindow.setup({ codewindow.setup({
exclude_filetypes = { 'NvimTree', 'orgagenda'}, exclude_filetypes = { 'NvimTree', 'orgagenda', 'Alpha'},
}) })
''; '';
}; };

View file

@ -0,0 +1,43 @@
{
config,
lib,
...
}: let
inherit (lib) mkOption mkEnableOption types;
cfg = config.vim.ui.borders;
defaultStyles = ["none" "single" "double" "rounded"];
in {
options.vim.ui.borders = {
enable = mkEnableOption "visible borders for most windows";
globalStyle = mkOption {
type = types.enum defaultStyles;
default = "rounded";
description = ''
global border style to use
'';
};
# TODO: make per-plugin borders configurable
plugins = let
mkPluginStyleOption = name: {
enable = mkEnableOption "whether to enable borders for the ${name} plugin" // {default = cfg.enable;};
style = mkOption {
type = types.enum (defaultStyles ++ lib.optionals (name != "which-key") ["shadow"]);
default = cfg.globalStyle;
description = "border style to use for the ${name} plugin";
};
};
in {
# despite not having it listed in example configuration, which-key does support the rounded type
# additionall, it supports a "shadow" type that is similar to none but is of higher contrast
which-key = mkPluginStyleOption "which-key";
lspsaga = mkPluginStyleOption "lspsaga";
nvim-cmp = mkPluginStyleOption "nvim-cmp";
lsp-signature = mkPluginStyleOption "lsp-signature";
};
};
}

View file

@ -0,0 +1,5 @@
_: {
imports = [
./borders.nix
];
}

View file

@ -66,7 +66,7 @@ in {
lsp = { lsp = {
auto_attach = ${boolToString nb.lsp.autoAttach}, auto_attach = ${boolToString nb.lsp.autoAttach},
preference = nil, -- TODO: convert list to lua table if not null -- preference = nil, -- TODO: convert list to lua table if not null
}, },
source_buffer = { source_buffer = {

View file

@ -7,5 +7,6 @@ _: {
./colorizer ./colorizer
./illuminate ./illuminate
./breadcrumbs ./breadcrumbs
./borders
]; ];
} }

View file

@ -32,7 +32,7 @@ in {
command_palette = true, -- position the cmdline and popupmenu together command_palette = true, -- position the cmdline and popupmenu together
long_message_to_split = true, -- long messages will be sent to a split long_message_to_split = true, -- long messages will be sent to a split
inc_rename = false, -- enables an input dialog for inc-rename.nvim inc_rename = false, -- enables an input dialog for inc-rename.nvim
lsp_doc_border = false, -- add a border to hover docs and signature help lsp_doc_border = ${boolToString (config.vim.ui.borders.enable)}, -- add a border to hover docs and signature help
}, },
format = { format = {

View file

@ -18,7 +18,13 @@ in {
["<leader>"] = "SPACE", ["<leader>"] = "SPACE",
["<cr>"] = "RETURN", ["<cr>"] = "RETURN",
["<tab>"] = "TAB", ["<tab>"] = "TAB",
} },
${lib.optionalString (config.vim.ui.borders.plugins.which-key.enable) ''
window = {
border = "${config.vim.ui.borders.plugins.which-key.style}",
},
''}
}) })
wk.register({ wk.register({