helix.nix
1 { 2 pkgs, 3 inputs, 4 lib, 5 ... 6 }: { 7 inputs.helix.url = "github:helix-editor/helix"; 8 9 hm = { 10 home.sessionVariables.EDITOR = "hx"; 11 12 home.packages = with pkgs; [ 13 nodePackages.vscode-css-languageserver-bin 14 nodePackages.vscode-langservers-extracted 15 nodePackages.prettier 16 ]; 17 programs.helix = { 18 enable = true; 19 20 defaultEditor = true; 21 22 package = inputs.helix.packages.${pkgs.system}.default.overrideAttrs (self: { 23 makeWrapperArgs = with pkgs; 24 self.makeWrapperArgs 25 or [] 26 ++ [ 27 "--suffix" 28 "PATH" 29 ":" 30 (lib.makeBinPath [ 31 clang-tools 32 markdown-oxide 33 ltex-ls 34 nil 35 luajitPackages.lua-lsp 36 nodePackages.bash-language-server 37 nodePackages.vscode-css-languageserver-bin 38 nodePackages.vscode-langservers-extracted 39 nodePackages.prettier 40 rustfmt 41 rust-analyzer 42 black 43 alejandra 44 shellcheck 45 zig 46 zls 47 # kdePackages.qtdeclarative 48 ]) 49 ]; 50 }); 51 52 settings = { 53 theme = "oxocarbon"; 54 # icons = "nerdfonts"; 55 56 editor = { 57 true-color = true; 58 cursorline = true; 59 mouse = false; 60 completion-replace = true; 61 auto-format = true; 62 auto-save = true; 63 auto-info = true; 64 color-modes = true; 65 idle-timeout = 250; 66 indent-guides.render = true; 67 rulers = [100]; 68 cursor-shape = { 69 insert = "bar"; 70 select = "block"; 71 normal = "block"; 72 }; 73 lsp = { 74 display-inlay-hints = true; 75 display-messages = true; 76 }; 77 }; 78 79 # cursor-shape = { 80 # insert = "bar"; 81 # }; 82 }; 83 84 themes = { 85 oxocarbon = let 86 base00 = "#161616"; 87 base01 = "#262626"; 88 base02 = "#393939"; 89 base03 = "#525252"; 90 base04 = "#dde1e6"; 91 base05 = "#f2f4f8"; 92 base06 = "#ffffff"; 93 base07 = "#08bdba"; 94 base08 = "#3ddbd9"; 95 base09 = "#be95ff"; 96 base0A = "#ee5396"; 97 base0B = "#33b1ff"; 98 base0C = "#ff7eb6"; 99 base0D = "#42be65"; 100 base0E = "#78a9ff"; 101 base0F = "#82cfff"; 102 in { 103 "ui.background" = {bg = base00;}; 104 "ui.virtual.whitespace" = base03; 105 "ui.menu" = { 106 fg = base05; 107 bg = base01; 108 }; 109 "ui.menu.selected" = { 110 fg = base01; 111 bg = base04; 112 }; 113 "ui.linenr" = { 114 fg = base03; 115 bg = base00; 116 }; 117 "ui.popup" = {bg = base01;}; 118 "ui.window" = {bg = base01;}; 119 "ui.linenr.selected" = { 120 fg = base04; 121 bg = base01; 122 modifiers = ["bold"]; 123 }; 124 "ui.selection" = {bg = base02;}; 125 "comment" = { 126 fg = base03; 127 modifiers = ["italic"]; 128 }; 129 "ui.statusline" = { 130 fg = base04; 131 bg = base01; 132 }; 133 "ui.cursor" = { 134 fg = base04; 135 modifiers = ["reversed"]; 136 }; 137 "ui.cursor.primary" = { 138 fg = base05; 139 modifiers = ["reversed"]; 140 }; 141 "ui.text" = base05; 142 "operator" = base0B; 143 "ui.text.focus" = base05; 144 "variable" = base04; 145 "constant.numeric" = base09; 146 "constant" = base09; 147 "attribute" = base09; 148 "type" = base07; 149 "ui.cursor.match" = { 150 fg = base0A; 151 modifiers = ["underlined"]; 152 }; 153 "string" = base09; 154 "variable.other.member" = base04; 155 "constant.character.escape" = base0C; 156 "function" = base0A; 157 "constructor" = base0D; 158 "special" = base0D; 159 "keyword" = base0E; 160 "label" = base08; 161 "namespace" = base0E; 162 "punctuation" = base08; 163 "ui.help" = { 164 fg = base06; 165 bg = base01; 166 }; 167 168 "markup.heading" = base0D; 169 "markup.list" = base08; 170 "markup.bold" = { 171 fg = base0A; 172 modifiers = ["bold"]; 173 }; 174 "markup.italic" = { 175 fg = base0E; 176 modifiers = ["italic"]; 177 }; 178 "markup.link.url" = { 179 fg = base09; 180 modifiers = ["underlined"]; 181 }; 182 "markup.link.text" = base08; 183 "markup.quote" = base0C; 184 "markup.raw" = base0B; 185 186 "diff.plus" = base0B; 187 "diff.delta" = base09; 188 "diff.minus" = base08; 189 190 "diagnostic" = { 191 modifiers = ["underlined"]; 192 underline = { 193 color = base0A; 194 style = "curl"; 195 }; 196 }; 197 "ui.gutter" = {bg = base00;}; 198 "info" = base0D; 199 "hint" = base03; 200 "debug" = base03; 201 "warning" = base09; 202 "error" = base0A; 203 204 "ui.bufferline" = { 205 fg = base04; 206 bg = base00; 207 }; 208 "ui.bufferline.active" = { 209 fg = base06; 210 bg = base01; 211 }; 212 }; 213 }; 214 215 languages = { 216 language = let 217 withLangServers = lang: servers: 218 lang 219 // { 220 language-servers = (lang.language-servers or []) ++ servers; 221 }; 222 mkPrettier = name: ext: { 223 inherit name; 224 auto-format = true; 225 formatter = { 226 command = "${pkgs.prettierd}/bin/prettierd"; 227 args = ["file.${ext}"]; 228 }; 229 }; 230 in [ 231 # { 232 # name = "markdown"; 233 # auto-format = true; 234 # language-servers = ["markdown-oxide" "ltex-ls"]; 235 # } 236 237 { 238 name = "nix"; 239 auto-format = true; 240 formatter = {command = lib.getExe pkgs.alejandra;}; 241 roots = ["flake.nix"]; 242 } 243 { 244 name = "html"; 245 auto-format = true; 246 language-servers = ["emmet-ls" "vscode-html-server"]; 247 } 248 (withLangServers (mkPrettier "markdown" "md") ["markdown-oxide" "emmet-ls" "ltex-ls"]) 249 ]; 250 251 language-server = { 252 ltex-ls = { 253 command = lib.getExe pkgs.ltex-ls; 254 }; 255 emmet-ls = { 256 command = lib.getExe pkgs.emmet-language-server; 257 args = ["--stdio"]; 258 }; 259 markdown-oxide = { 260 command = lib.getExe pkgs.markdown-oxide; 261 }; 262 #stolen from n3oney 263 typescript-language-server = { 264 command = lib.getExe pkgs.nodePackages.typescript-language-server; 265 args = ["--stdio"]; 266 config.hostInfo = "helix"; 267 config.documentFormatting = false; 268 }; 269 270 vscode-langservers-extracted = { 271 command = lib.getExe pkgs.nodePackages.vscode-langservers-extracted; 272 }; 273 274 vscode-css-language-server = { 275 command = lib.getExe pkgs.nodePackages.vscode-css-languageserver-bin; 276 args = ["--stdio"]; 277 config.provideFormatter = true; 278 }; 279 280 vscode-html-language-server = { 281 command = lib.getExe pkgs.nodePackages.vscode-html-languageserver-bin; 282 args = ["--stdio"]; 283 }; 284 zig-language-server = { 285 command = lib.getExe pkgs.zls; 286 }; 287 288 # qml-lamguage-server = { 289 # command = lib.getExe pkgs.kdePackages.qtdeclarative; 290 # args = ["--stdio"]; 291 # conifg.provideFormatter = true; 292 # }; 293 294 nil = { 295 command = lib.getExe pkgs.nil; 296 config.nil.formatting.command = ["${lib.getExe pkgs.alejandra}" "-q"]; 297 }; 298 }; 299 }; 300 }; 301 }; 302 }