{ config, lib, pkgs, ... }: with lib; let cfg = config.settings.applications.helix; in { options = { settings.applications.helix.enable = lib.mkOption { type = lib.types.bool; description = '' Enable helix text editor ''; }; }; config = mkIf cfg.enable { home.packages = with pkgs; [ # Markdown unstable.marksman unstable.markdown-oxide dprint # Systemverilog unstable.svls # Assembly unstable.asm-lsp # Nixos unstable.nil unstable.nixpkgs-fmt # Latex tectonic unstable.texlab # Vue/Nuxt unstable.vue-language-server unstable.typescript unstable.typescript-language-server ]; # Markdown home.file.".config/.dprint.json".text ='' { "markdown": { "lineWidth":120, }, "excludes": [], "plugins": [ "https://plugins.dprint.dev/markdown-0.16.1.wasm" ] } ''; programs.helix = { enable = true; package = pkgs.unstable.helix; defaultEditor = true; settings = { editor.cursor-shape = { insert = "bar"; }; }; languages = { # Rust language-server.rust-analyzer.config = { cargo = { features = "all"; }; }; # Systemverilog language-server.svls = { command = "svls"; }; # Systemverilog language-server.asm = { command = "asm-lsp"; }; # Latex language-server.texlab = { config = { texlab.chktex = { onOpenAndSave = true; onEdit = true; }; texlab.forwardSearch = { executable = "zathura"; args = [ "--synctex-forward" "%l:%c:%f" "%p" ]; }; texlab.build = { auxDirectory = "build"; logDirectory = "build"; pdfDirectory = "build"; forwardSearchAfter = true; onSave = true; executable = "tectonic"; args = [ "-X" "compile" "--synctex" "--keep-logs" "--keep-intermediates" "--outdir=build" "%f" ]; }; }; }; language-server.typescript-language-server.config = { # tsserver = { # path = "${pkgs.unstable.typescript}/bin/tsserver"; # }; plugins = [ { name = "@vue/typescript-plugin"; location = "${pkgs.unstable.vue-language-server}/bin/vue-language-server}"; languages = ["vue"]; } ]; vue.inlayHints = { includeInlayEnumMemberValueHints = true; includeInlayFunctionLikeReturnTypeHints = true; includeInlayFunctionParameterTypeHints = true; includeInlayParameterNameHints = "all"; includeInlayParameterNameHintsWhenArgumentMatchesName = true; includeInlayPropertyDeclarationTypeHints = true; includeInlayVariableTypeHints = true; }; }; # language-server.vue-language-server = { # command = "${pkgs.vue-language-server}/bin/vue-language-server"; # args = [ "--stdio" ]; # config = { # typescript = { # tsdk = "${pkgs.typescript}/bin/"; # }; # }; # }; language = [ { name = "verilog"; language-servers = [ "svls" ]; } { name = "asm"; scope = "source.s"; language-servers = [ "asm" ]; file-types = [ "s" "S" ]; } { name = "markdown"; auto-format = true; language-servers = [ "markdown-oxide" ]; formatter.command = "dprint"; formatter.args = ["fmt" "--stdin" "md" "--config" "/home/xeovalyte/.config/.dprint.json"]; } { name = "typst"; auto-format = false; formatter.command = "${pkgs.typstfmt}/bin/typstfmt"; } { name = "vue"; language-servers = ["vuels" "typescript-language-server"]; } ]; }; }; }; }