Skip to content

Commit 91def65

Browse files
committed
languages/fish: init
1 parent 585dfca commit 91def65

File tree

3 files changed

+94
-0
lines changed

3 files changed

+94
-0
lines changed

docs/release-notes/rl-0.8.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@
303303
- Disable mini.indentscope for applicable filetypes.
304304
- Fix fzf-lua having a hard dependency on fzf.
305305
- Enable inlay hints support - `config.vim.lsp.inlayHints`.
306+
- Add Fish language support under `vim.languages.fish`.
306307

307308
[tebuevd](https://github.com/tebuevd):
308309

modules/plugins/languages/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ in {
1010
./clang.nix
1111
./css.nix
1212
./elixir.nix
13+
./fish.nix
1314
./fsharp.nix
1415
./gleam.nix
1516
./go.nix

modules/plugins/languages/fish.nix

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
{
2+
config,
3+
pkgs,
4+
lib,
5+
...
6+
}: let
7+
inherit (builtins) attrNames;
8+
inherit (lib.options) mkEnableOption mkOption;
9+
inherit (lib.modules) mkIf mkMerge;
10+
inherit (lib.meta) getExe;
11+
inherit (lib.lists) isList;
12+
inherit (lib.types) bool either enum listOf package str;
13+
inherit (lib.nvim.lua) expToLua toLuaObject;
14+
inherit (lib.nvim.types) mkGrammarOption;
15+
16+
cfg = config.vim.languages.fish;
17+
18+
defaultFormat = "fish_indent";
19+
formats = {
20+
fish_indent = {
21+
cmd = "${pkgs.fish}/bin/fish_indent";
22+
};
23+
};
24+
in {
25+
options.vim.languages.fish = {
26+
enable = mkEnableOption "Fish language support";
27+
28+
format = {
29+
enable = mkOption {
30+
type = bool;
31+
default = config.vim.languages.enableFormat;
32+
description = "Enable Fish formatting";
33+
};
34+
type = mkOption {
35+
type = enum (attrNames formats);
36+
default = defaultFormat;
37+
description = "Fish formatter to use";
38+
};
39+
cmd = mkOption {
40+
type = str;
41+
default = formats.${cfg.format.type}.cmd;
42+
description = "Path to fish formatter executable";
43+
};
44+
};
45+
46+
lsp = {
47+
enable = mkEnableOption "Fish LSP support via fish-lsp" // {default = config.vim.languages.enableLSP;};
48+
49+
package = mkOption {
50+
description = "fish-lsp package, or the command to run as a list of strings";
51+
type = either package (listOf str);
52+
default = pkgs.fish-lsp;
53+
};
54+
};
55+
56+
treesitter = {
57+
enable = mkEnableOption "Fish Treesitter support" // {default = config.vim.languages.enableTreesitter;};
58+
package = mkGrammarOption pkgs "fish";
59+
};
60+
};
61+
62+
config = mkMerge [
63+
(mkIf cfg.format.enable {
64+
vim.formatter.conform-nvim = {
65+
enable = true;
66+
setupOpts.formatters_by_ft.fish = [cfg.format.type];
67+
setupOpts.formatters.${cfg.format.type} = {command = cfg.format.cmd;};
68+
};
69+
})
70+
71+
(mkIf (cfg.enable && cfg.lsp.enable) {
72+
vim.lsp.lspconfig.enable = true;
73+
vim.lsp.lspconfig.sources.fish-lsp = let
74+
cmd =
75+
if isList cfg.lsp.package
76+
then expToLua cfg.lsp.package
77+
else toLuaObject ["${getExe cfg.lsp.package}" "start"];
78+
in ''
79+
lspconfig.fish_lsp.setup {
80+
capabilities = capabilities;
81+
on_attach = default_on_attach;
82+
cmd = ${cmd};
83+
}
84+
'';
85+
})
86+
87+
(mkIf cfg.treesitter.enable {
88+
vim.treesitter.enable = true;
89+
vim.treesitter.grammars = [cfg.treesitter.package];
90+
})
91+
];
92+
}

0 commit comments

Comments
 (0)