mirror of
https://github.com/NotAShelf/neovim-flake.git
synced 2024-11-07 14:55:59 +01:00
Compare commits
7 commits
ee84fff21c
...
41830a79b8
Author | SHA1 | Date | |
---|---|---|---|
41830a79b8 | |||
e0790f2bdb | |||
bf090172d2 | |||
7481423bed | |||
6eba2a5585 | |||
1847b9f1bf | |||
d06ff3d7db |
25 changed files with 253 additions and 603 deletions
|
@ -15,10 +15,6 @@ inputs: let
|
|||
configuration.imports = modules;
|
||||
};
|
||||
|
||||
tidalConfig = {
|
||||
config.vim.languages.tidal.enable = true;
|
||||
};
|
||||
|
||||
mainConfig = isMaximal: {
|
||||
config.vim = {
|
||||
viAlias = true;
|
||||
|
@ -58,7 +54,10 @@ inputs: let
|
|||
enableTreesitter = true;
|
||||
enableExtraDiagnostics = true;
|
||||
|
||||
nim.enable = false;
|
||||
nix.enable = true;
|
||||
markdown.enable = true;
|
||||
|
||||
html.enable = isMaximal;
|
||||
css.enable = isMaximal;
|
||||
sql.enable = isMaximal;
|
||||
|
@ -69,10 +68,7 @@ inputs: let
|
|||
zig.enable = isMaximal;
|
||||
python.enable = isMaximal;
|
||||
dart.enable = isMaximal;
|
||||
elixir.enable = isMaximal;
|
||||
bash.enable = isMaximal;
|
||||
terraform.enable = isMaximal;
|
||||
nim.enable = false;
|
||||
tailwind.enable = isMaximal;
|
||||
typst.enable = isMaximal;
|
||||
clang = {
|
||||
|
@ -252,5 +248,5 @@ inputs: let
|
|||
};
|
||||
};
|
||||
in {
|
||||
inherit neovimConfiguration mainConfig tidalConfig;
|
||||
inherit neovimConfiguration mainConfig;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ Below are the commands you may run to try out different configurations provided
|
|||
configurations are provided:
|
||||
|
||||
- Nix
|
||||
- Tidal
|
||||
- Maximal
|
||||
|
||||
You may try out any of the provided configurations using the `nix run` command on a system where Nix is installed.
|
||||
|
@ -22,7 +21,6 @@ once you garbage collect.
|
|||
|
||||
```console
|
||||
$ nix run github:notashelf/nvf#nix
|
||||
$ nix run github:notashelf/nvf#tidal
|
||||
$ nix run github:notashelf/nvf#maximal
|
||||
```
|
||||
|
||||
|
@ -33,10 +31,6 @@ $ nix run github:notashelf/nvf#maximal
|
|||
`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.
|
||||
|
||||
#### Tidal {#sec-configs-tidal}
|
||||
|
||||
Tidal is an alternative config that adds vim-tidal on top of the plugins from the Nix configuration.
|
||||
|
||||
#### Maximal {#sec-configs-maximal}
|
||||
|
||||
`Maximal` is the ultimate configuration that will enable support for more commonly used language as well as additional
|
||||
|
|
|
@ -6,14 +6,27 @@ Release notes for release 0.7
|
|||
|
||||
[ItsSorae](https://github.com/ItsSorae):
|
||||
|
||||
- Added support for [typst](https://typst.app/) under `vim.languages.typst`.
|
||||
This will enable the `typst-lsp` language server, and the `typstfmt` formatter.
|
||||
- Added support for [typst](https://typst.app/) under `vim.languages.typst`
|
||||
This will enable the `typst-lsp` language server, and the `typstfmt` formatter
|
||||
|
||||
[frothymarrow](https://github.com/frothymarrow):
|
||||
|
||||
- Modified type for [](#opt-vim.visuals.fidget-nvim.setupOpts.progress.display.overrides)
|
||||
from `anything` to a `submodule` for better type checking.
|
||||
from `anything` to a `submodule` for better type checking
|
||||
|
||||
[horriblename](https://github.com/horriblename)
|
||||
|
||||
- Fix broken treesitter-context keybinds in visual mode
|
||||
|
||||
[NotAShelf](https://github.com/notashelf)
|
||||
|
||||
- Add `deno fmt` as the default Markdown formatter. This will be enabled
|
||||
automatically if you have autoformatting enabled, but can be disabled manually
|
||||
if you choose to.
|
||||
|
||||
- Remove vim-tidal and friends
|
||||
|
||||
- Remove unmaintained Elixir language module. This has been long broken, and was
|
||||
unmaintained due to my disinterest in using Elixir. If you depend on Elixir
|
||||
language support, please create an issue. Do keep in mind that elixirls **does
|
||||
not exist in nixpkgs**.
|
||||
|
|
194
flake.lock
194
flake.lock
|
@ -1,22 +1,5 @@
|
|||
{
|
||||
"nodes": {
|
||||
"dirt-samples-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1667426233,
|
||||
"narHash": "sha256-Zl2bi9QofcrhU63eMtg+R6lhV9ExQS/0XNTJ+oq65Uo=",
|
||||
"owner": "tidalcycles",
|
||||
"repo": "dirt-samples",
|
||||
"rev": "92f2145e661b397e62ca0ff3965819e7c7db0dad",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tidalcycles",
|
||||
"ref": "master",
|
||||
"repo": "dirt-samples",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
|
@ -180,22 +163,6 @@
|
|||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1693844670,
|
||||
"narHash": "sha256-t69F2nBB8DNQUWHD809oJZJVE+23XBrth4QZuVd6IE0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3c15feef7770eb5500a4b8792623e2d6f598c9c1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1702350026,
|
||||
"narHash": "sha256-A+GNZFZdfl4JdDphYKBJ5Ef1HOiFsP18vQe9mqjmUis=",
|
||||
|
@ -579,38 +546,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plugin-elixir-ls": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1713724318,
|
||||
"narHash": "sha256-1kLMxznNRRJ7M10zkuWexA/sPFaN449M0SKUjLrnc8c=",
|
||||
"owner": "elixir-lsp",
|
||||
"repo": "elixir-ls",
|
||||
"rev": "8486de473a219dcdb72408702f8d56d0227c7366",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "elixir-lsp",
|
||||
"repo": "elixir-ls",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plugin-elixir-tools": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1713617654,
|
||||
"narHash": "sha256-pJgtW51FLs+Yr+tlQckRmGkRnSUQNI3fEROn3D51mMs=",
|
||||
"owner": "elixir-tools",
|
||||
"repo": "elixir-tools.nvim",
|
||||
"rev": "3c4f8344a341818417b3d75c04eb96d894cb4640",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "elixir-tools",
|
||||
"repo": "elixir-tools.nvim",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plugin-fidget-nvim": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
|
@ -1829,8 +1764,6 @@
|
|||
"plugin-diffview-nvim": "plugin-diffview-nvim",
|
||||
"plugin-dracula": "plugin-dracula",
|
||||
"plugin-dressing-nvim": "plugin-dressing-nvim",
|
||||
"plugin-elixir-ls": "plugin-elixir-ls",
|
||||
"plugin-elixir-tools": "plugin-elixir-tools",
|
||||
"plugin-fidget-nvim": "plugin-fidget-nvim",
|
||||
"plugin-flutter-tools": "plugin-flutter-tools",
|
||||
"plugin-gesture-nvim": "plugin-gesture-nvim",
|
||||
|
@ -1906,7 +1839,6 @@
|
|||
"plugin-which-key": "plugin-which-key",
|
||||
"rnix-lsp": "rnix-lsp",
|
||||
"systems": "systems_2",
|
||||
"tidalcycles": "tidalcycles",
|
||||
"zig": "zig"
|
||||
}
|
||||
},
|
||||
|
@ -1935,23 +1867,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"superdirt-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1611740180,
|
||||
"narHash": "sha256-GtnqZeMFqFkVhgx2Exu0wY687cHa7mNnVCgjQd6fiIA=",
|
||||
"owner": "musikinformatik",
|
||||
"repo": "superdirt",
|
||||
"rev": "7abb62e89649daa1232b9cbd6427241868abd30e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "musikinformatik",
|
||||
"ref": "master",
|
||||
"repo": "superdirt",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
|
@ -1982,62 +1897,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"tidal-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1654350756,
|
||||
"narHash": "sha256-tONM5SYYBca0orTLH1EUOilSC1FCluWrFt8AetUx+YQ=",
|
||||
"owner": "tidalcycles",
|
||||
"repo": "tidal",
|
||||
"rev": "fda9c1ecb3722698935245e5409ef8ccdfca16c8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tidalcycles",
|
||||
"ref": "main",
|
||||
"repo": "tidal",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"tidalcycles": {
|
||||
"inputs": {
|
||||
"dirt-samples-src": "dirt-samples-src",
|
||||
"nixpkgs": "nixpkgs_3",
|
||||
"superdirt-src": "superdirt-src",
|
||||
"tidal-src": "tidal-src",
|
||||
"utils": "utils_2",
|
||||
"vim-tidal-src": "vim-tidal-src",
|
||||
"vowel-src": "vowel-src"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1694087816,
|
||||
"narHash": "sha256-GMV5ONQhLwa6xRYhZkmwc2W2jbjAfHfB/OR9vR0+PFA=",
|
||||
"owner": "mitchmindtree",
|
||||
"repo": "tidalcycles.nix",
|
||||
"rev": "1b1c4df5303e07930d23e8361ab8253ebec0c7bb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "mitchmindtree",
|
||||
"repo": "tidalcycles.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils": {
|
||||
"locked": {
|
||||
"lastModified": 1656928814,
|
||||
|
@ -2053,62 +1912,11 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1692799911,
|
||||
"narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"vim-tidal-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1685703852,
|
||||
"narHash": "sha256-8gyk17YLeKpLpz3LRtxiwbpsIbZka9bb63nK5/9IUoA=",
|
||||
"owner": "tidalcycles",
|
||||
"repo": "vim-tidal",
|
||||
"rev": "e440fe5bdfe07f805e21e6872099685d38e8b761",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tidalcycles",
|
||||
"repo": "vim-tidal",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"vowel-src": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1641306144,
|
||||
"narHash": "sha256-zfF6cvAGDNYWYsE8dOIo38b+dIymd17Pexg0HiPFbxM=",
|
||||
"owner": "supercollider-quarks",
|
||||
"repo": "vowel",
|
||||
"rev": "ab59caa870201ecf2604b3efdd2196e21a8b5446",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "supercollider-quarks",
|
||||
"ref": "master",
|
||||
"repo": "vowel",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"zig": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils_2",
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1713960597,
|
||||
|
|
19
flake.nix
19
flake.nix
|
@ -76,6 +76,7 @@
|
|||
|
||||
# Flake inputs
|
||||
inputs = {
|
||||
## Basic Inputs
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
|
@ -98,13 +99,7 @@
|
|||
inputs.flake-utils.follows = "flake-utils";
|
||||
};
|
||||
|
||||
### Plugins
|
||||
# Tidal cycles
|
||||
tidalcycles = {
|
||||
url = "github:mitchmindtree/tidalcycles.nix";
|
||||
inputs.vim-tidal-src.url = "github:tidalcycles/vim-tidal";
|
||||
};
|
||||
|
||||
## Plugins
|
||||
# LSP plugins
|
||||
plugin-nvim-lspconfig = {
|
||||
url = "github:neovim/nvim-lspconfig";
|
||||
|
@ -183,16 +178,6 @@
|
|||
flake = false;
|
||||
};
|
||||
|
||||
plugin-elixir-ls = {
|
||||
url = "github:elixir-lsp/elixir-ls";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
plugin-elixir-tools = {
|
||||
url = "github:elixir-tools/elixir-tools.nvim";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
plugin-glow-nvim = {
|
||||
url = "github:ellisonleao/glow.nvim";
|
||||
flake = false;
|
||||
|
|
|
@ -1,21 +1,11 @@
|
|||
{lib, ...}: {
|
||||
perSystem = {
|
||||
system,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
apps =
|
||||
{
|
||||
nix.program = lib.getExe config.packages.nix;
|
||||
maximal.program = lib.getExe config.packages.maximal;
|
||||
default = config.apps.nix;
|
||||
}
|
||||
// (
|
||||
if !(builtins.elem system ["aarch64-darwin" "x86_64-darwin"])
|
||||
then {
|
||||
tidal.program = lib.getExe config.packages.tidal;
|
||||
}
|
||||
else {}
|
||||
);
|
||||
{lib, ...}: let
|
||||
inherit (lib.meta) getExe;
|
||||
in {
|
||||
perSystem = {config, ...}: {
|
||||
apps = {
|
||||
nix.program = getExe config.packages.nix;
|
||||
maximal.program = getExe config.packages.maximal;
|
||||
default = config.apps.nix;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
legacyPackages = import inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = [
|
||||
inputs.tidalcycles.overlays.default
|
||||
inputs.self.overlays.default
|
||||
(_: _: {
|
||||
rnix-lsp = inputs'.rnix-lsp.defaultPackage;
|
||||
|
|
|
@ -9,13 +9,11 @@
|
|||
|
||||
nixConfig = mainConfig false;
|
||||
maximalConfig = mainConfig true;
|
||||
tidalConfig = {config.vim.tidal.enable = true;};
|
||||
in {
|
||||
flake.overlays.default = _final: prev: {
|
||||
inherit neovimConfiguration;
|
||||
neovim-nix = buildPkg prev [nixConfig];
|
||||
neovim-maximal = buildPkg prev [maximalConfig];
|
||||
neovim-tidal = buildPkg prev [tidalConfig];
|
||||
devPkg = buildPkg pkgs [nixConfig {config.vim.languages.html.enable = pkgs.lib.mkForce true;}];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -7,56 +7,50 @@
|
|||
}: let
|
||||
docs = import ../docs {inherit pkgs inputs;};
|
||||
in {
|
||||
packages =
|
||||
{
|
||||
# Documentation
|
||||
docs = docs.manual.html;
|
||||
docs-html = docs.manual.html;
|
||||
docs-manpages = docs.manPages;
|
||||
docs-json = docs.options.json;
|
||||
packages = {
|
||||
# Documentation
|
||||
docs = docs.manual.html;
|
||||
docs-html = docs.manual.html;
|
||||
docs-manpages = docs.manPages;
|
||||
docs-json = docs.options.json;
|
||||
|
||||
# Build and open the built manual in your system browser
|
||||
docs-html-wrapped = pkgs.writeScriptBin "docs-html-wrapped" ''
|
||||
#!${pkgs.stdenv.shell}
|
||||
# use xdg-open to open the docs in the browser
|
||||
${pkgs.xdg_utils}/bin/xdg-open ${docs.manual.html}
|
||||
'';
|
||||
# Build and open the built manual in your system browser
|
||||
docs-html-wrapped = pkgs.writeScriptBin "docs-html-wrapped" ''
|
||||
#!${pkgs.stdenv.shell}
|
||||
# use xdg-open to open the docs in the browser
|
||||
${pkgs.xdg_utils}/bin/xdg-open ${docs.manual.html}
|
||||
'';
|
||||
|
||||
# Exposed neovim configurations
|
||||
nix = config.legacyPackages.neovim-nix;
|
||||
maximal = config.legacyPackages.neovim-maximal;
|
||||
default = config.legacyPackages.neovim-nix;
|
||||
# Exposed neovim configurations
|
||||
nix = config.legacyPackages.neovim-nix;
|
||||
maximal = config.legacyPackages.neovim-maximal;
|
||||
default = config.legacyPackages.neovim-nix;
|
||||
|
||||
# Published docker images
|
||||
docker-nix = let
|
||||
inherit (pkgs) bash gitFull buildEnv dockerTools;
|
||||
inherit (config.legacyPackages) neovim-nix;
|
||||
in
|
||||
dockerTools.buildImage {
|
||||
name = "nvf";
|
||||
tag = "latest";
|
||||
# Published docker images
|
||||
docker-nix = let
|
||||
inherit (pkgs) bash gitFull buildEnv dockerTools;
|
||||
inherit (config.legacyPackages) neovim-nix;
|
||||
in
|
||||
dockerTools.buildImage {
|
||||
name = "nvf";
|
||||
tag = "latest";
|
||||
|
||||
copyToRoot = buildEnv {
|
||||
name = "neovim-root";
|
||||
pathsToLink = ["/bin"];
|
||||
paths = [
|
||||
neovim-nix
|
||||
gitFull
|
||||
bash
|
||||
];
|
||||
};
|
||||
|
||||
config = {
|
||||
Cmd = ["${neovim-nix}/bin/nvim"];
|
||||
WorkingDir = "/home/neovim/demo";
|
||||
Volumes = {"/home/neovim/demo" = {};};
|
||||
};
|
||||
copyToRoot = buildEnv {
|
||||
name = "neovim-root";
|
||||
pathsToLink = ["/bin"];
|
||||
paths = [
|
||||
neovim-nix
|
||||
gitFull
|
||||
bash
|
||||
];
|
||||
};
|
||||
}
|
||||
// (
|
||||
if !(builtins.elem system ["aarch64-darwin" "x86_64-darwin"])
|
||||
then {tidal = config.legacyPackages.neovim-tidal;}
|
||||
else {}
|
||||
);
|
||||
|
||||
config = {
|
||||
Cmd = ["${neovim-nix}/bin/nvim"];
|
||||
WorkingDir = "/home/neovim/demo";
|
||||
Volumes = {"/home/neovim/demo" = {};};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
16
modules/extra/deprecations.nix
Normal file
16
modules/extra/deprecations.nix
Normal file
|
@ -0,0 +1,16 @@
|
|||
{lib, ...}: let
|
||||
inherit (lib.modules) mkRemovedOptionModule;
|
||||
in {
|
||||
imports = [
|
||||
# 2024-06-06
|
||||
(mkRemovedOptionModule ["vim" "languages" "elixir"] ''
|
||||
Elixir language support has been removed as of 2024-06-06 as it was long unmaintained. If
|
||||
you dependend on this language support, please consider contributing to its maintenance.
|
||||
'')
|
||||
|
||||
(mkRemovedOptionModule ["vim" "tidal"] ''
|
||||
Tidalcycles language support has been removed as of 2024-06-06 as it was long unmaintained. If
|
||||
you depended on this functionality, please open an issue.
|
||||
'')
|
||||
];
|
||||
}
|
|
@ -53,7 +53,13 @@
|
|||
"warnings"
|
||||
];
|
||||
|
||||
allModules = concatLists [neovim plugins wrapper];
|
||||
# Extra modules, such as deprecation warnings
|
||||
# or renames in one place.
|
||||
extra = map (p: ./extra + "/${p}") [
|
||||
"deprecations.nix"
|
||||
];
|
||||
|
||||
allModules = concatLists [neovim plugins wrapper extra];
|
||||
|
||||
pkgsModule = {config, ...}: {
|
||||
config = {
|
||||
|
|
|
@ -1,15 +1,17 @@
|
|||
{
|
||||
pkgs,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) attrNames;
|
||||
inherit (lib.options) mkOption mkEnableOption literalExpression;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.lists) isList;
|
||||
inherit (lib.types) enum either package listOf str bool;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.languages) diagnosticsToLua;
|
||||
inherit (lib.nvim.types) diagnostics mkGrammarOption;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
|
||||
cfg = config.vim.languages.bash;
|
||||
|
||||
|
@ -55,6 +57,7 @@
|
|||
ls_sources,
|
||||
null_ls.builtins.diagnostics.shellcheck.with({
|
||||
command = "${pkg}/bin/shellcheck",
|
||||
diagnostics_format = "#{m} [#{c}]"
|
||||
})
|
||||
)
|
||||
'';
|
||||
|
@ -114,4 +117,30 @@ in {
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
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.bash-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||
})
|
||||
|
||||
(mkIf cfg.format.enable {
|
||||
vim.lsp.null-ls.enable = true;
|
||||
vim.lsp.null-ls.sources.bash-format = formats.${cfg.format.type}.nullConfig;
|
||||
})
|
||||
|
||||
(mkIf cfg.extraDiagnostics.enable {
|
||||
vim.lsp.null-ls.enable = true;
|
||||
vim.lsp.null-ls.sources = diagnosticsToLua {
|
||||
lang = "bash";
|
||||
config = cfg.extraDiagnostics.types;
|
||||
inherit diagnosticsProviders;
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
|
@ -1,83 +0,0 @@
|
|||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.lists) isList;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.languages) diagnosticsToLua;
|
||||
|
||||
cfg = config.vim.languages.bash;
|
||||
diagnosticsProviders = {
|
||||
shellcheck = {
|
||||
package = pkgs.shellcheck;
|
||||
nullConfig = pkg: ''
|
||||
table.insert(
|
||||
ls_sources,
|
||||
null_ls.builtins.diagnostics.shellcheck.with({
|
||||
command = "${pkg}/bin/shellcheck",
|
||||
})
|
||||
)
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
formats = {
|
||||
shfmt = {
|
||||
package = pkgs.shfmt;
|
||||
nullConfig = ''
|
||||
table.insert(
|
||||
ls_sources,
|
||||
null_ls.builtins.formatting.shfmt.with({
|
||||
command = "${pkgs.shfmt}/bin/shfmt",
|
||||
})
|
||||
)
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
servers = {
|
||||
bash-ls = {
|
||||
package = pkgs.nodePackages.bash-language-server;
|
||||
lspConfig = ''
|
||||
lspconfig.bashls.setup{
|
||||
capabilities = capabilities;
|
||||
on_attach = default_on_attach;
|
||||
cmd = ${
|
||||
if isList cfg.lsp.package
|
||||
then expToLua cfg.lsp.package
|
||||
else ''{"${cfg.lsp.package}/bin/bash-language-server", "start"}''
|
||||
};
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
in {
|
||||
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.bash-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||
})
|
||||
|
||||
(mkIf cfg.format.enable {
|
||||
vim.lsp.null-ls.enable = true;
|
||||
vim.lsp.null-ls.sources.bash-format = formats.${cfg.format.type}.nullConfig;
|
||||
})
|
||||
|
||||
(mkIf cfg.extraDiagnostics.enable {
|
||||
vim.lsp.null-ls.enable = true;
|
||||
vim.lsp.null-ls.sources = diagnosticsToLua {
|
||||
lang = "bash";
|
||||
config = cfg.extraDiagnostics.types;
|
||||
inherit diagnosticsProviders;
|
||||
};
|
||||
})
|
||||
]);
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
imports = [
|
||||
./bash.nix
|
||||
./config.nix
|
||||
];
|
||||
}
|
|
@ -26,10 +26,10 @@
|
|||
ccls = {
|
||||
package = pkgs.ccls;
|
||||
lspConfig = ''
|
||||
lspconfig.ccls.setup{
|
||||
capabilities = capabilities;
|
||||
on_attach=default_on_attach;
|
||||
cmd = ${packageToCmd cfg.lsp.package "ccls"};
|
||||
lspconfig.ccls.setup {
|
||||
capabilities = capabilities,
|
||||
on_attach=default_on_attach,
|
||||
cmd = ${packageToCmd cfg.lsp.package "ccls"},
|
||||
${optionalString (cfg.lsp.opts != null) "init_options = ${cfg.lsp.opts}"}
|
||||
}
|
||||
'';
|
||||
|
@ -40,10 +40,10 @@
|
|||
local clangd_cap = capabilities
|
||||
-- use same offsetEncoding as null-ls
|
||||
clangd_cap.offsetEncoding = {"utf-16"}
|
||||
lspconfig.clangd.setup{
|
||||
capabilities = clangd_cap;
|
||||
on_attach=default_on_attach;
|
||||
cmd = ${packageToCmd cfg.lsp.package "clangd"};
|
||||
lspconfig.clangd.setup {
|
||||
capabilities = clangd_cap,
|
||||
on_attach=default_on_attach,
|
||||
cmd = ${packageToCmd cfg.lsp.package "clangd"},
|
||||
${optionalString (cfg.lsp.opts != null) "init_options = ${cfg.lsp.opts}"}
|
||||
}
|
||||
'';
|
||||
|
@ -83,12 +83,16 @@ in {
|
|||
enable = mkEnableOption "C/C++ language support";
|
||||
|
||||
cHeader = mkOption {
|
||||
description = ''
|
||||
C syntax for headers. Can fix treesitter errors, see:
|
||||
https://www.reddit.com/r/neovim/comments/orfpcd/question_does_the_c_parser_from_nvimtreesitter/
|
||||
'';
|
||||
type = bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable C syntax for headers.
|
||||
|
||||
::: {.note}
|
||||
This can potentially fix Treesitter errors for headers. See [this reddit
|
||||
post] https://www.reddit.com/r/neovim/comments/orfpcd/question_does_the_c_parser_from_nvimtreesitter/
|
||||
:::
|
||||
'';
|
||||
};
|
||||
|
||||
treesitter = {
|
||||
|
@ -107,16 +111,16 @@ in {
|
|||
};
|
||||
|
||||
package = mkOption {
|
||||
description = "clang 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 = either package (listOf str);
|
||||
default = servers.${cfg.lsp.server}.package;
|
||||
example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]'';
|
||||
description = "clang LSP server package, or the command to run as a list of strings";
|
||||
};
|
||||
|
||||
opts = mkOption {
|
||||
description = "Options to pass to clang LSP server";
|
||||
default = "--offset-encoding=utf-16";
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
description = "Options to pass to clang LSP server";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -126,11 +130,13 @@ in {
|
|||
type = bool;
|
||||
default = config.vim.languages.enableDAP;
|
||||
};
|
||||
|
||||
debugger = mkOption {
|
||||
description = "clang debugger to use";
|
||||
type = enum (attrNames debuggers);
|
||||
default = defaultDebugger;
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
description = "clang debugger package.";
|
||||
type = package;
|
||||
|
@ -151,7 +157,6 @@ in {
|
|||
|
||||
(mkIf cfg.lsp.enable {
|
||||
vim.lsp.lspconfig.enable = true;
|
||||
|
||||
vim.lsp.lspconfig.sources.clang-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||
})
|
||||
|
||||
|
|
|
@ -1,18 +1,23 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) attrNames;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.trivial) boolToString;
|
||||
inherit (lib.lists) isList;
|
||||
inherit (lib.options) mkEnableOption mkOption;
|
||||
inherit (lib.types) enum either listOf package nullOr str bool;
|
||||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.types) mkGrammarOption;
|
||||
inherit (lib.nvim.dag) entryAnywhere;
|
||||
|
||||
cfg = config.vim.languages.dart;
|
||||
ftcfg = cfg.flutter-tools;
|
||||
|
||||
defaultServer = "dart";
|
||||
servers = {
|
||||
dart = {
|
||||
|
@ -48,15 +53,16 @@ in {
|
|||
default = defaultServer;
|
||||
};
|
||||
package = mkOption {
|
||||
description = "Dart 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 = either package (listOf str);
|
||||
default = servers.${cfg.lsp.server}.package;
|
||||
example = ''[lib.getExe pkgs.jdt-language-server "-data" "~/.cache/jdtls/workspace"]'';
|
||||
description = "Dart LSP server package, or the command to run as a list of strings";
|
||||
};
|
||||
|
||||
opts = mkOption {
|
||||
description = "Options to pass to Dart LSP server";
|
||||
type = nullOr str;
|
||||
default = null;
|
||||
description = "Options to pass to Dart LSP server";
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -70,23 +76,26 @@ in {
|
|||
|
||||
flutter-tools = {
|
||||
enable = mkOption {
|
||||
description = "Enable flutter-tools for flutter support";
|
||||
type = bool;
|
||||
default = config.vim.languages.enableLSP;
|
||||
description = "Enable flutter-tools for flutter support";
|
||||
};
|
||||
|
||||
enableNoResolvePatch = mkOption {
|
||||
description = ''
|
||||
Patch flutter-tools so that it doesn't resolve symlinks when detecting flutter path.
|
||||
This is required if you want to use a flutter package built with nix.
|
||||
If you are using a flutter SDK installed from a different source and encounter the error "`dart` missing from PATH", disable this option.
|
||||
'';
|
||||
type = bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Whether to patch flutter-tools so that it doesn't resolve
|
||||
symlinks when detecting flutter path.
|
||||
|
||||
This is required if you want to use a flutter package built with nix.
|
||||
If you are using a flutter SDK installed from a different source
|
||||
and encounter the error "`dart` missing from PATH", disable this option.
|
||||
'';
|
||||
};
|
||||
|
||||
color = {
|
||||
enable = mkEnableOption "Whether or mot to highlight color variables at all";
|
||||
enable = mkEnableOption "highlighting color variables";
|
||||
|
||||
highlightBackground = mkOption {
|
||||
type = bool;
|
||||
|
@ -112,4 +121,47 @@ in {
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
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.dart-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||
})
|
||||
|
||||
(mkIf ftcfg.enable {
|
||||
vim.startPlugins =
|
||||
if ftcfg.enableNoResolvePatch
|
||||
then ["flutter-tools-patched"]
|
||||
else ["flutter-tools"];
|
||||
|
||||
vim.luaConfigRC.flutter-tools = entryAnywhere ''
|
||||
require('flutter-tools').setup {
|
||||
lsp = {
|
||||
color = { -- show the derived colours for dart variables
|
||||
enabled = ${boolToString ftcfg.color.enable}, -- whether or not to highlight color variables at all, only supported on flutter >= 2.10
|
||||
background = ${boolToString ftcfg.color.highlightBackground}, -- highlight the background
|
||||
foreground = ${boolToString ftcfg.color.highlightForeground}, -- highlight the foreground
|
||||
virtual_text = ${boolToString ftcfg.color.virtualText.enable}, -- show the highlight using virtual text
|
||||
virtual_text_str = ${ftcfg.color.virtualText.character} -- the virtual text character to highlight
|
||||
},
|
||||
|
||||
capabilities = capabilities,
|
||||
on_attach = default_on_attach;
|
||||
flags = lsp_flags,
|
||||
},
|
||||
${optionalString cfg.dap.enable ''
|
||||
debugger = {
|
||||
enabled = true,
|
||||
},
|
||||
''}
|
||||
}
|
||||
'';
|
||||
})
|
||||
]);
|
||||
}
|
|
@ -1,76 +0,0 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.lists) isList;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.strings) optionalString;
|
||||
inherit (lib.trivial) boolToString;
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.nvim.dag) entryAnywhere;
|
||||
|
||||
cfg = config.vim.languages.dart;
|
||||
ftcfg = cfg.flutter-tools;
|
||||
servers = {
|
||||
dart = {
|
||||
package = pkgs.dart;
|
||||
lspConfig = ''
|
||||
lspconfig.dartls.setup{
|
||||
capabilities = capabilities;
|
||||
on_attach=default_on_attach;
|
||||
cmd = ${
|
||||
if isList cfg.lsp.package
|
||||
then expToLua cfg.lsp.package
|
||||
else ''{"${cfg.lsp.package}/bin/dart", "language-server", "--protocol=lsp"}''
|
||||
};
|
||||
${optionalString (cfg.lsp.opts != null) "init_options = ${cfg.lsp.dartOpts}"}
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
in {
|
||||
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.dart-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||
})
|
||||
|
||||
(mkIf ftcfg.enable {
|
||||
vim.startPlugins =
|
||||
if ftcfg.enableNoResolvePatch
|
||||
then ["flutter-tools-patched"]
|
||||
else ["flutter-tools"];
|
||||
|
||||
vim.luaConfigRC.flutter-tools = entryAnywhere ''
|
||||
require('flutter-tools').setup {
|
||||
lsp = {
|
||||
color = { -- show the derived colours for dart variables
|
||||
enabled = ${boolToString ftcfg.color.enable}, -- whether or not to highlight color variables at all, only supported on flutter >= 2.10
|
||||
background = ${boolToString ftcfg.color.highlightBackground}, -- highlight the background
|
||||
foreground = ${boolToString ftcfg.color.highlightForeground}, -- highlight the foreground
|
||||
virtual_text = ${boolToString ftcfg.color.virtualText.enable}, -- show the highlight using virtual text
|
||||
virtual_text_str = ${ftcfg.color.virtualText.character} -- the virtual text character to highlight
|
||||
},
|
||||
|
||||
capabilities = capabilities,
|
||||
on_attach = default_on_attach;
|
||||
flags = lsp_flags,
|
||||
},
|
||||
${optionalString cfg.dap.enable ''
|
||||
debugger = {
|
||||
enabled = true,
|
||||
},
|
||||
''}
|
||||
}
|
||||
'';
|
||||
})
|
||||
]);
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
imports = [
|
||||
./dart.nix
|
||||
./config.nix
|
||||
];
|
||||
}
|
|
@ -2,18 +2,15 @@
|
|||
inherit (lib.nvim.languages) mkEnable;
|
||||
in {
|
||||
imports = [
|
||||
./bash
|
||||
./dart
|
||||
./elixir
|
||||
./markdown
|
||||
./tidal
|
||||
|
||||
./bash.nix
|
||||
./dart.nix
|
||||
./clang.nix
|
||||
./css.nix
|
||||
./go.nix
|
||||
./html.nix
|
||||
./java.nix
|
||||
./lua.nix
|
||||
./markdown.nix
|
||||
./nim.nix
|
||||
./nix.nix
|
||||
./php.nix
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) attrNames;
|
||||
inherit (builtins) attrNames concatLists;
|
||||
inherit (lib.options) mkEnableOption mkOption;
|
||||
inherit (lib.lists) isList;
|
||||
inherit (lib.types) bool enum either package listOf str;
|
||||
|
@ -29,6 +29,22 @@
|
|||
'';
|
||||
};
|
||||
};
|
||||
|
||||
defaultFormat = "denofmt";
|
||||
formats = {
|
||||
denofmt = {
|
||||
package = pkgs.deno;
|
||||
nullConfig = ''
|
||||
table.insert(
|
||||
ls_sources,
|
||||
null_ls.builtins.formatting.deno_fmt.with({
|
||||
filetypes = ${concatLists cfg.format.extraFiletypes ["markdown"]},
|
||||
command = "${cfg.format.package}/bin/deno",
|
||||
})
|
||||
)
|
||||
'';
|
||||
};
|
||||
};
|
||||
in {
|
||||
options.vim.languages.markdown = {
|
||||
enable = mkEnableOption "Markdown markup language support";
|
||||
|
@ -59,5 +75,27 @@ in {
|
|||
default = servers.${cfg.lsp.server}.package;
|
||||
};
|
||||
};
|
||||
|
||||
format = {
|
||||
enable = mkEnableOption "Markdown formatting" // {default = config.vim.languages.enableFormat;};
|
||||
|
||||
type = mkOption {
|
||||
description = "Markdown formatter to use";
|
||||
type = enum (attrNames formats);
|
||||
default = defaultFormat;
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
description = "Markdown formatter package";
|
||||
type = package;
|
||||
default = formats.${cfg.format.type}.package;
|
||||
};
|
||||
|
||||
extraFiletypes = mkOption {
|
||||
description = "Extra filetypes to format with the Markdown formatter";
|
||||
type = listOf str;
|
||||
default = [];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.nvim.lua) expToLua;
|
||||
inherit (lib.modules) mkIf mkMerge;
|
||||
inherit (lib.lists) isList;
|
||||
|
||||
cfg = config.vim.languages.markdown;
|
||||
servers = {
|
||||
marksman = {
|
||||
package = pkgs.marksman;
|
||||
lspConfig = ''
|
||||
lspconfig.marksman.setup{
|
||||
capabilities = capabilities;
|
||||
on_attach = default_on_attach;
|
||||
cmd = ${
|
||||
if isList cfg.lsp.package
|
||||
then expToLua cfg.lsp.package
|
||||
else ''{"${cfg.lsp.package}/bin/marksman", "server"}''
|
||||
},
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
in {
|
||||
config = mkIf cfg.enable (mkMerge [
|
||||
(mkIf cfg.treesitter.enable {
|
||||
vim.treesitter.enable = true;
|
||||
vim.treesitter.grammars = [cfg.treesitter.mdPackage cfg.treesitter.mdInlinePackage];
|
||||
})
|
||||
|
||||
(mkIf cfg.lsp.enable {
|
||||
vim.lsp.lspconfig.enable = true;
|
||||
vim.lsp.lspconfig.sources.markdown-lsp = servers.${cfg.lsp.server}.lspConfig;
|
||||
})
|
||||
]);
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./config.nix
|
||||
./markdown.nix
|
||||
];
|
||||
}
|
|
@ -1,23 +0,0 @@
|
|||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf;
|
||||
|
||||
cfg = config.vim.tidal;
|
||||
in {
|
||||
config = mkIf (cfg.enable) {
|
||||
vim.startPlugins = [
|
||||
# From tidalcycles flake
|
||||
pkgs.vimPlugins.vim-tidal
|
||||
];
|
||||
|
||||
vim.globals = {
|
||||
"tidal_target" = "terminal";
|
||||
"tidal_flash_duration" = 150;
|
||||
"tidal_sc_enable" = cfg.openSC;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./tidal.nix
|
||||
./config.nix
|
||||
];
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.options) mkEnableOption mkOption;
|
||||
inherit (lib.types) int bool;
|
||||
in {
|
||||
options.vim.tidal = {
|
||||
enable = mkEnableOption "tidalcycles tools and plugins";
|
||||
|
||||
flash = mkOption {
|
||||
description = ''When sending a paragraph or a single line, vim-tidal will "flash" the selection for some milliseconds'';
|
||||
type = int;
|
||||
default = 150;
|
||||
};
|
||||
|
||||
openSC = mkOption {
|
||||
description = "Automatically run the supercollider CLI, sclang, alongside the Tidal GHCI terminal.";
|
||||
type = bool;
|
||||
default = true;
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in a new issue