{pkgs, ...}: { # read https://docs.helix-editor.com/editor.html programs.helix = { enable = true; settings = { theme = "dracula"; editor = { line-number = "absolute"; popup-border = "all"; scroll-lines = 3; color-modes = true; # colour the mode indicator depending on mode shell = ["zsh" "-c"]; auto-format = true; auto-completion = true; # enable popup for autocomplete completion-timeout = 250; # time before completions display preview-completion-insert = true; completion-trigger-len = 2; # min word length to trigger completions completion-replace = true; # completions replace entire word indent-heuristic = "tree-sitter"; # how indentation is computed # TODO: make this configurable (enabled on myputer, disabled on lolcathost) middle-click-paste = true; insert-final-newline = true; # append newline to file on write gutters = [ "diagnostics" "spacer" "line-numbers" "spacer" "diff" ]; whitespace = { render = { space = "none"; # "all" tab = "none"; #"all" nbsp = "none"; nnbsp = "none"; newline = "none"; }; characters = { space = "·"; nbsp = "⍽"; nnbsp = "␣"; tab = "→"; newline = "⤶"; tabpad = "·"; # Tabs will look like "→···" (depending on tab width) }; }; indent-guides = { render = true; character = "▏"; # "|" skip-levels = 1; }; lsp = { enable = true; auto-signature-help = true; # hints for function parameters display-inlay-hints = true; # inline hints snippets = true; }; cursor-shape = { normal = "block"; insert = "bar"; select = "block"; }; file-picker = { hidden = true; # show hidden files follow-symlinks = true; deduplicate-links = true; git-ignore = false; # dont read .gitignore files ignore = true; # use .ignore for helix instead of .gitignore }; statusline = { left = [ "mode" "spacer" "version-control" "spinner" ]; center = [ "file-name" "read-only-indicator" "file-modification-indicator" ]; right = [ "position" "total-line-numbers" "file-encoding" "file-line-ending" "file-type" ]; separator = "|"; mode.normal = "NORMAL"; mode.insert = "INSERT"; mode.select = "SELECT"; }; }; }; languages = { language = [ { name = "nix"; indent = { tab-width = 2; unit = " "; }; block-comment-tokens = { start = "/*"; end = "*/"; }; auto-format = true; formatter.command = "${pkgs.alejandra}/bin/alejandra"; language-servers = ["nixd"]; } { name = "python"; indent = { tab-width = 4; unit = " "; }; auto-format = false; # my python is beautiful ^_^ rulers = [80]; } { name = "c"; formatter.command = "${pkgs.clang-tools}/bin/clang-format"; language-servers = ["clangd"]; } ]; language-server = { # use nixd as default nix lsp (I haven't tried nil yet) # NOTE: nixd will be supported by default after nix 24.07 # SOURCE: https://github.com/nix-community/nixd/blob/main/nixd/docs/editor-setup.md#Helix nixd = { command = "${pkgs.nixd}/bin/nixd"; }; # clangd for C clangd = { command = "${pkgs.clang-tools}/bin/clangd"; }; }; }; }; }