Skip to content

Commit 2cc95f5

Browse files
languages/fish: init
Add fish support with fish-lsp and fish_indent.
1 parent 1a05385 commit 2cc95f5

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
lines changed

configuration.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ isMaximal: {
9191
fsharp.enable = false;
9292
just.enable = false;
9393
qml.enable = false;
94+
fish.enable = false;
9495

9596
tailwind.enable = false;
9697
svelte.enable = false;

docs/release-notes/rl-0.8.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,8 @@
507507
[qmk-nvim]: https://github.com/codethread/qmk.nvim
508508
[qmlls]: https://doc.qt.io/qt-6/qtqml-tooling-qmlls.html
509509
[qmlformat]: https://doc.qt.io/qt-6/qtqml-tooling-qmlformat.html
510+
[fish-lsp]: https://www.fish-lsp.dev/
511+
[fish_indent]: https://fishshell.com/docs/current/cmds/fish_indent.html
510512

511513
- Add [nvim-biscuits] support under `vim.utility.nvim-biscuits`.
512514
- Add just support under `vim.languages.just` using [just-lsp].
@@ -516,6 +518,8 @@
516518
[htmlHINT].
517519
- Add QMK support under `vim.utility.qmk-nvim` via [qmk-nvim].
518520
- Add QML support under `vim.languages.qml` using [qmlls] and [qmlformat].
521+
- Add Fish support inder `vim.languages.fish` using [fish-lsp] and
522+
[fish_indent].
519523

520524
[Morsicus](https://github.com/Morsicus):
521525

modules/plugins/languages/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ in {
1212
./clojure.nix
1313
./css.nix
1414
./elixir.nix
15+
./fish.nix
1516
./fsharp.nix
1617
./gleam.nix
1718
./go.nix

modules/plugins/languages/fish.nix

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
{
2+
config,
3+
pkgs,
4+
lib,
5+
...
6+
}: let
7+
inherit (builtins) attrNames;
8+
inherit (lib.meta) getExe;
9+
inherit (lib.options) mkEnableOption mkOption;
10+
inherit (lib.modules) mkIf mkMerge;
11+
inherit (lib.types) enum package;
12+
inherit (lib.nvim.types) mkGrammarOption singleOrListOf;
13+
inherit (lib.nvim.attrsets) mapListToAttrs;
14+
15+
cfg = config.vim.languages.fish;
16+
17+
defaultServers = ["fish-lsp"];
18+
servers = {
19+
fish-lsp = {
20+
cmd = [(getExe pkgs.fish-lsp) "start"];
21+
filetypes = ["fish"];
22+
root_markers = ["config.fish" ".git"];
23+
};
24+
};
25+
26+
defaultFormat = "fish_indent";
27+
formats = {
28+
fish_indent = {
29+
package = pkgs.writeShellApplication {
30+
name = "fish_indent";
31+
runtimeInputs = [pkgs.fish];
32+
text = "fish_indent";
33+
};
34+
};
35+
};
36+
in {
37+
options.vim.languages.fish = {
38+
enable = mkEnableOption "Fish language support";
39+
treesitter = {
40+
enable = mkEnableOption "Fish treesitter support" // {default = config.vim.languages.enableTreesitter;};
41+
package = mkGrammarOption pkgs "fish";
42+
};
43+
44+
lsp = {
45+
enable = mkEnableOption "Fish LSP support" // {default = config.vim.lsp.enable;};
46+
servers = mkOption {
47+
type = singleOrListOf (enum (attrNames servers));
48+
default = defaultServers;
49+
description = "Fish LSP server to use";
50+
};
51+
};
52+
53+
format = {
54+
enable = mkEnableOption "Fish formatting" // {default = config.vim.languages.enableFormat;};
55+
56+
type = mkOption {
57+
type = enum (attrNames formats);
58+
default = defaultFormat;
59+
description = "Fish formatter to use";
60+
};
61+
62+
package = mkOption {
63+
type = package;
64+
default = formats.${cfg.format.type}.package;
65+
description = "Fish formatter package";
66+
};
67+
};
68+
};
69+
70+
config = mkIf cfg.enable (mkMerge [
71+
(mkIf cfg.treesitter.enable {
72+
vim.treesitter = {
73+
enable = true;
74+
grammars = [cfg.treesitter.package];
75+
};
76+
})
77+
78+
(mkIf cfg.lsp.enable {
79+
vim.lsp.servers =
80+
mapListToAttrs (n: {
81+
name = n;
82+
value = servers.${n};
83+
})
84+
cfg.lsp.servers;
85+
})
86+
87+
(mkIf (cfg.format.enable && !cfg.lsp.enable) {
88+
vim.formatter.conform-nvim = {
89+
enable = true;
90+
setupOpts.formatters_by_ft.fish = [cfg.format.type];
91+
setupOpts.formatters.${cfg.format.type} = {
92+
command = getExe cfg.format.package;
93+
};
94+
};
95+
})
96+
]);
97+
}

0 commit comments

Comments
 (0)