Skip to content

Commit e709fc3

Browse files
languages/fish: init
Add fish support with fish-lsp and fish_indent.
1 parent 385c49d commit e709fc3

4 files changed

Lines changed: 107 additions & 0 deletions

File tree

configuration.nix

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

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

docs/manual/release-notes/rl-0.9.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,11 @@
144144
[Machshev](https://github.com/machshev):
145145
146146
- Added `ruff` and `ty` LSP support for Python under `programs.python`.
147+
148+
[Poseidon](https://github.com/poseidon-rises):
149+
150+
[fish-lsp]: https://www.fish-lsp.dev/
151+
[fish_indent]: https://fishshell.com/docs/current/cmds/fish_indent.html
152+
153+
- Add Fish support vai {option}`languages.fish` using [fish-lsp] and
154+
[fish_indent].

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 listOf;
12+
inherit (lib.nvim.types) mkGrammarOption;
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.fish;
30+
config.command = "${cfg.format.package}/bin/fish_indent";
31+
};
32+
};
33+
in {
34+
options.vim.languages.fish = {
35+
enable = mkEnableOption "Fish language support";
36+
treesitter = {
37+
enable = mkEnableOption "Fish treesitter support" // {default = config.vim.languages.enableTreesitter;};
38+
package = mkGrammarOption pkgs "fish";
39+
};
40+
41+
lsp = {
42+
enable = mkEnableOption "Fish LSP support" // {default = config.vim.lsp.enable;};
43+
servers = mkOption {
44+
type = listOf (enum (attrNames servers));
45+
default = defaultServers;
46+
description = "Fish LSP server to use";
47+
};
48+
};
49+
50+
format = {
51+
enable = mkEnableOption "Fish formatting" // {default = config.vim.languages.enableFormat;};
52+
53+
type = mkOption {
54+
type = listOf enum (attrNames formats);
55+
default = defaultFormat;
56+
description = "Fish formatter to use";
57+
};
58+
59+
package = mkOption {
60+
type = package;
61+
default = formats.${cfg.format.type}.package;
62+
description = "Fish formatter package";
63+
};
64+
};
65+
};
66+
67+
config = mkIf cfg.enable (mkMerge [
68+
(mkIf cfg.treesitter.enable {
69+
vim.treesitter = {
70+
enable = true;
71+
grammars = [cfg.treesitter.package];
72+
};
73+
})
74+
75+
(mkIf cfg.lsp.enable {
76+
vim.lsp.servers =
77+
mapListToAttrs (n: {
78+
name = n;
79+
value = servers.${n};
80+
})
81+
cfg.lsp.servers;
82+
})
83+
84+
(mkIf (cfg.format.enable && !cfg.lsp.enable) {
85+
vim.formatter.conform-nvim = {
86+
enable = true;
87+
setupOpts.formatters_by_ft.fish = cfg.format.type;
88+
setupOpts.formatters =
89+
mapListToAttrs (name: {
90+
inherit name;
91+
value = formats.${name};
92+
})
93+
cfg.format.type;
94+
};
95+
})
96+
]);
97+
}

0 commit comments

Comments
 (0)