{ pkgs, lib, config, inputs, ... }: { options.mods.helix.enable = lib.mkEnableOption "enables helix"; config = lib.mkIf config.mods.terminal.development.enable { home.packages = with pkgs; [ # Nix nil # Rust rust-analyzer lldb_18 # Shaders glsl_analyzer wgsl-analyzer # Python black ]; programs.helix = { enable = true; package = pkgs.evil-helix; settings = { keys.normal = { "esc" = ["collapse_selection" "keep_primary_selection"]; "Z" = { "Q" = ":quit!"; "Z" = ":write-quit!"; }; "V" = ["select_mode" "extend_to_line_bounds"]; }; editor = { line-number = "relative"; completion-replace = true; bufferline = "always"; rulers = [80]; soft-wrap.enable = true; indent-guides.render = true; cursor-shape = { normal = "block"; insert = "bar"; select = "underline"; }; }; }; languages.language-server = { glsl.command = "${pkgs.glsl_analyzer}/bin/glsl_analyzer"; wgsl.command = "${pkgs.wgsl-analyzer}/bin/wgsl-analyzer"; }; languages.language = [ { name = "nix"; auto-format = true; formatter.command = "${pkgs.nixfmt-classic}/bin/nixfmt"; } { name = "rust"; auto-format = true; formatter.command = "rustfmt"; } { name = "glsl"; language-servers = ["glsl"]; } { name = "wgsl"; language-servers = ["wgsl"]; } { name = "python"; auto-format = true; formatter = { command = "${pkgs.black}/bin/black"; args = ["-" "--quiet" "--line-length=79"]; }; } ]; }; }; }