My Nix configuration. Enter at your own risk.
1{
2 config,
3 lib,
4 pkgs,
5 ...
6}: {
7 options.modules.home.helix = {
8 enable = lib.mkEnableOption "helix";
9
10 theme = lib.mkOption {
11 type = lib.types.str;
12 default = "darcula-solid";
13 };
14 };
15
16 config = let
17 helix = config.modules.home.helix;
18 in
19 lib.mkIf helix.enable {
20 modules.home.wsl-bridge.map = {
21 "~/.config/helix/languages.toml" = {
22 directory = {appData, ...}: "${appData}/helix";
23 filename = "languages.toml";
24 };
25 "~/.config/helix/config.toml" = {
26 directory = {appData, ...}: "${appData}/helix";
27 filename = "config.toml";
28 };
29 };
30
31 home.packages = [
32 pkgs.steel
33 ];
34
35 programs.helix = {
36 enable = true;
37
38 settings = {
39 theme = helix.theme;
40
41 editor = {
42 line-number = "relative";
43 bufferline = "always";
44 true-color = true;
45
46 jump-label-alphabet = "jklfdsauiohnmretcgwvpyqxbz";
47
48 filetree.nerd-fonts = true;
49 file-picker.hidden = false;
50 smart-tab.enable = false;
51 };
52
53 keys.normal = {
54 # Emulate VSCode Ctrl+D functionality
55 C-d = "@*vn<esc>";
56 C-D = "@*vN<esc>";
57
58 # Emulate VSCode Ctrl+Alt+Up/Down functionality
59 C-A-up = "@v<A-C><esc>";
60 C-A-k = "@v<A-C><esc>";
61 C-A-down = "@vC<esc>";
62 C-A-j = "@vC<esc>";
63
64 # Move lines
65 C-j = "@Xdp";
66 C-k = "@XdkP";
67
68 # Navigate buffers
69 C-h = ":bp";
70 C-l = ":bn";
71
72 # Close buffer
73 C-w = ":bc";
74
75 # Close pane
76 C-q = ":q";
77
78 # Find word references
79 F12 = "@miw*;<space>/<ret>";
80 };
81
82 keys.select = {
83 # Emulate VSCode Ctrl+D functionality
84 C-d = "@*n";
85 C-D = "@*N";
86
87 # Emulate VSCode Ctrl+Alt+Up/Down functionality
88 C-A-up = "@<A-C>";
89 C-A-k = "@<A-C>";
90 C-A-down = "@C";
91 C-A-j = "@C";
92
93 # Move lines
94 C-j = "@<esc>Xdp";
95 C-k = "@<esc>XdkP";
96
97 # Navigate buffers
98 C-q = "@<esc>:bc";
99 C-h = "@<esc>:bp";
100 C-l = "@<esc>:bn";
101
102 # Find word references
103 F12 = "@miw*;<space>/<ret>";
104 };
105
106 keys.insert = {
107 # Emulate VSCode Ctrl+D functionality
108 C-d = "@<esc>*vn<esc>";
109 C-D = "@<esc>*vN<esc>";
110
111 # Emulate VSCode Ctrl+Alt+Up/Down functionality
112 C-A-up = "@<esc>v<A-C>i";
113 C-A-k = "@<esc>v<A-C>i";
114 C-A-down = "@<esc>vCi";
115 C-A-j = "@<esc>vCi";
116
117 # Navigate buffers
118 C-q = "@<esc>:bc";
119 C-h = "@<esc>:bp";
120 C-l = "@<esc>:bn";
121
122 # Find word references
123 F12 = "@<esc>miw*;<space>/<ret>";
124 };
125 };
126
127 languages = {
128 language-server.emmet-language-server = {
129 command = "emmet-language-server";
130 args = ["--stdio"];
131 };
132
133 language-server.rust-analyzer = {
134 config.cargo.allFeatures = true;
135 };
136
137 language-server.vscode-css-language-server = {
138 command = "vscode-css-language-server";
139 args = ["--stdio"];
140 };
141
142 language = let
143 def = name: obj: {inherit name;} // obj;
144 in [
145 (def "git-commit" {
146 rulers = [73];
147 })
148 (def "jjdescription" {
149 rulers = [73];
150 })
151 (def "less" {
152 scope = "source.less";
153 file-types = ["less"];
154 language-id = "less";
155 grammar = "less";
156
157 comment-tokens = ["//"];
158 block-comment-tokens = [
159 {
160 start = "/*";
161 end = "*/";
162 }
163 ];
164
165 indent.tab-width = 2;
166 indent.unit = " ";
167
168 language-servers = [
169 "vscode-css-language-server"
170 "emmet-language-server"
171 ];
172 })
173 (def "html" {
174 language-servers = [
175 "vscode-html-language-server"
176 "emmet-language-server"
177 ];
178 })
179 (def "jsx" {
180 language-servers = [
181 "typescript-language-server"
182 "emmet-language-server"
183 ];
184 })
185 (def "markdown" {
186 rulers = [81];
187 })
188 (def "rust" {
189 formatter = {
190 command = "rustfmt";
191 };
192 })
193 (def "sql" {
194 indent.tab-width = 4;
195 indent.unit = " ";
196 })
197 (def "tsx" {
198 language-servers = [
199 "typescript-language-server"
200 "emmet-language-server"
201 ];
202 })
203 ];
204
205 grammar = [
206 {
207 name = "less";
208 source.git = "https://github.com/jimliang/tree-sitter-less";
209 source.rev = "945f52c94250309073a96bbfbc5bcd57ff2bde49";
210 }
211 ];
212 };
213 };
214 };
215}