183 lines
4.4 KiB
Nix

{ 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"];
}
];
};
};
};
}