1{
2 config,
3 lib,
4 pkgs,
5 ...
6}: {
7 options.myHome.programs.helix.enable = lib.mkEnableOption "helix";
8
9 config = lib.mkIf config.myHome.programs.helix.enable {
10 programs.helix = {
11 enable = true;
12
13 settings = {
14 theme = "zed_onedark";
15
16 editor = {
17 auto-completion = true;
18 auto-format = true;
19 auto-pairs = false;
20 auto-save = true;
21 color-modes = true;
22 cursorline = true;
23
24 cursor-shape = {
25 insert = "bar";
26 normal = "block";
27 select = "underline";
28 };
29
30 indent-guides.render = true;
31
32 lsp = {
33 display-inlay-hints = true;
34 display-messages = true;
35 };
36
37 soft-wrap = {
38 enable = true;
39 wrap-at-text-width = true;
40 };
41
42 statusline.center = ["position-percentage"];
43 text-width = 100;
44 true-color = true;
45
46 whitespace.characters = {
47 newline = "↴";
48 tab = "⇥";
49 };
50 };
51
52 keys = {
53 normal = {
54 n = "move_char_left";
55 e = "move_line_down";
56 i = "move_line_up";
57 o = "move_char_right";
58
59 j = "move_next_word_end";
60 J = "move_next_long_word_end";
61 k = "search_next";
62 K = "search_prev";
63 l = "insert_mode";
64 L = "insert_at_line_start";
65
66 h = "open_below";
67 H = "open_above";
68 };
69 select = {
70 n = "extend_char_left";
71 e = "extend_visual_line_down";
72 i = "extend_visual_line_up";
73 o = "extend_char_right";
74 };
75 };
76 };
77 languages = {
78 language-server = {
79 bash-language-server = {
80 command = "bash-language-server";
81 args = ["start"];
82 };
83
84 vscode-css-languageserver = {
85 command = lib.getExe pkgs.vscode-css-languageserver;
86 args = ["--stdio"];
87 };
88
89 fish-lsp = {
90 command = lib.getExe pkgs.fish-lsp;
91 args = ["--stdio"];
92 };
93
94 lua-language-server = {
95 command = lib.getExe pkgs.lua-language-server;
96 args = ["--stdio"];
97 };
98
99 marksman = {
100 command = lib.getExe pkgs.marksman;
101 args = ["--stdio"];
102 };
103
104 nixd = {
105 command = lib.getExe pkgs.nixd;
106 };
107
108 vscode-json-languageserver = {
109 command = lib.getExe pkgs.vscode-json-languageserver;
110 args = ["--stdio"];
111 };
112
113 typescript-language-server = with pkgs.nodePackages; {
114 command = "${typescript-language-server}/bin/typescript-language-server";
115 args = ["--stdio" "--tsserver-path=${typescript}/lib/node_modules/typescript/lib"];
116 };
117
118 superhtml = {
119 command = lib.getExe pkgs.superhtml;
120 args = ["--stdio"];
121 };
122 };
123
124 language = [
125 {
126 name = "bash";
127 auto-format = true;
128 file-types = ["sh" "bash" "dash" "ksh" "mksh"];
129
130 formatter = {
131 command = lib.getExe pkgs.shfmt;
132 args = ["-i" "2"];
133 };
134
135 language-servers = ["bash-language-server"];
136 }
137 {
138 name = "css";
139 auto-format = true;
140 formatter = {command = lib.getExe pkgs.prettier;};
141 language-servers = ["vscode-css-languageserver"];
142 }
143 {
144 name = "fish";
145 auto-format = true;
146 language-servers = ["fish-lsp"];
147 }
148 {
149 name = "html";
150 auto-format = true;
151 formatter = {command = lib.getExe pkgs.prettier;};
152 language-servers = ["superhtml"];
153 }
154 {
155 name = "javascript";
156 auto-format = true;
157 formatter = {command = lib.getExe pkgs.prettier;};
158 language-servers = ["typescript-language-server"];
159 }
160 {
161 name = "json";
162 auto-format = true;
163 formatter = {command = lib.getExe pkgs.prettier;};
164 language-servers = ["vscode-json-languageserver"];
165 }
166 {
167 name = "lua";
168 auto-format = true;
169 formatter = {command = lib.getExe pkgs.stylua;};
170 language-servers = ["lua-language-server"];
171 }
172 {
173 name = "markdown";
174 auto-format = true;
175 formatter = {command = lib.getExe pkgs.mdformat;};
176 language-servers = ["marksman"];
177 }
178 {
179 name = "nix";
180 auto-format = true;
181 formatter = {command = lib.getExe pkgs.alejandra;};
182 language-servers = ["nixd"];
183 }
184 {
185 name = "typescript";
186 auto-format = true;
187 formatter = {command = lib.getExe pkgs.prettier;};
188 language-servers = ["typescript-language-server"];
189 }
190 ];
191 };
192 };
193 };
194}