{ pkgs, pkgs-unstable,lib, rice, ... }: { home = { packages = with pkgs; [ nixfmt-classic # nix formater nil # nix language server python311Packages.python-lsp-server ruff ruff-lsp pyright lldb # debugger for llvm stuff yaml-language-server # yaml marksman # markdown vale-ls # style-checker lsp (needs vale) ltex-ls # Ltex (language tool) ] ++ (with pkgs-unstable; [ helix ]); sessionVariables = { EDITOR = "hx"; VISUAL = "hx"; }; }; programs.helix = { enable = true; defaultEditor = true; package = pkgs-unstable.helix; settings = { # theme = "base16_terminal"; theme = "base16"; editor = { cursor-shape = { normal = "block"; insert = "bar"; select = "underline"; }; soft-wrap = { enable = true; }; line-number = "relative"; color-modes = true; bufferline = "always"; popup-border = "all"; completion-trigger-len = 1; completion-timeout = 5; file-picker.hidden = false; middle-click-paste = false; cursorline = true; indent-guides = { render = true; character = "╎"; }; lsp.display-inlay-hints = true; statusline.center = [ "position-percentage" ]; true-color = true; whitespace.characters = { newline = "↴"; tab = "⇥"; skip-levels = 1; }; }; keys.normal = { "C-g" = [":new" ":insert-output lazygit" ":buffer-close!" ":redraw"]; "A-`" = [ "no_op" ]; "`" = [ "no_op" ]; }; keys.normal."ö" = { "s" = [ "switch_case" ]; "u" = [ "switch_to_uppercase" ]; "l" = [ "switch_to_lowercase" ]; }; }; languages = { language = [ { name = "latex"; language-servers = ["texlab" "language-tool"]; } { name = "markdown"; # language-servers = [ "marksman" "style-check" "language-tool" ]; language-servers = [ "language-tool" "marksman" ]; file-types = [ "md" "MD" ]; scope = "text."; } { name = "python"; language-servers = [ "pyright" "ruff" ]; formatter = { command = "ruff"; args = [ "format" "--line-length" "120" "-" ]; }; debugger = { name = "debugpy"; transport = "stdio"; command = "python"; args = [ "-m" "debugpy.adapter" ]; templates = [{ name = "source"; request = "launch"; completion = [{ name = "entrypoint"; completion = "filename"; default = "."; }]; args = { mode = "debug"; program = "{0}"; }; }]; }; } ]; language-server = { "style-check" = { command = lib.getExe pkgs.vale-ls; }; "language-tool" = { command = "${pkgs.ltex-ls}/bin/ltex-ls"; }; "ruff" = { command = "ruff-lsp"; config.settings.args = [ # Set line length # "--line-length" # "79" # Enable some ruff rules # "--select" # ( # "F,W,E,I,N,D200,D201,D202,D203,D204,D205,D206,D207,D208,D209,D210,D211," # + "D212,D213,D214,D215,D300,D301,D400,D401,D402,D403,D404,D405,D406," # + "D407,D408,D409,D410,D411,D412,D413,D414,D415,D416,D417,D418,D419," # + "UP,YTT,TRIO,ASYNC,B,A,COM,C4,DTZ,T10,DJ,EXE,FA,ISC,ICN001,G010," # + "G101,G201,G202,INP,PIE,Q,RSE,RET,SLOT,SIM,TCH,INT,ARG,PTH,TD001," # + "TD004,TD005,TD006,TD007,PD,PL,TRY004,TRY200,TRY201,TRY302,TRY400," # + "TRY401,FLY,NPY,AIR,PERF,FURB,LOG,RUF" # ) ]; }; }; }; themes = { base16 = with rice.color; { "attributes" = foreground; "comment" = { "fg" = white.dark; "modifiers" = [ "italic" ]; }; "constant" = accent.bright; "constant.character.escape" = special.bright; "constant.numeric" = foreground; "constructor" = weird.base; "debug" = yellow.base; "diagnostic.modifiers" = [ "underlined" ]; "diff.delta" = blue.bright; "diff.minus" = negative.bright; "diff.plus" = positive.bright; "error" = red.base; "function" = secondary.bright; "hint" = tertiary.bright; "info" = foreground; "keyword" = special.base; "label" = foreground; "namespace" = weird.bright; "operator" = foreground; "special" = special.base; "string" = secondary.bright; "type" = red.base; "variable" = accent.base; "variableother.member" = foreground; "warning" = red.base; "markup.heading" = accent.base; "markup.bold" = { "fg" = tertiary.bright; "modifiers" = [ "bold" ]; }; "italic" = { "fg" = secondary.bright; "modifiers" = [ "italic" ]; }; "markup.linktext" = accent.base; "markup.linkurl" = { "fg" = tertiary.dark; "modifiers" = [ "underlined" ]; }; "markup.list" = accent.bright; "markup.quote" = weird.bright; "markup.raw" = special.bright; "markup.strikethrough" = { "modifiers" = [ "crossed_out" ]; }; "diagnostic.hint" = { "underline" = { style = "curl"; }; }; "diagnostic.info" = { "underline" = { style = "curl"; }; }; "diagnostic.warning" = { "underline" = { style = "curl"; }; }; "diagnostic.error" = { "underline" = { style = "curl"; }; }; "ui.background" = { # general background of the editor window "bg" = background; }; "ui.bufferline" = { # the top line ("tab"-line) "fg" = accent.base; "bg" = black.base; }; "ui.bufferline.active" = { # the active "tab" "fg" = background; "bg" = accent.base; "modifiers" = [ "bold" ]; }; "ui.cursor" = { # the cursor in Normal mode "fg" = foreground; "modifiers" = [ "reversed" ]; }; "ui.cursorline.primary" = { # the line on which the cursor is on "bg" = black.base; }; "ui.cursor.match" = { # Matching bracket etc. "bg" = green.dark; "modifiers" = [ ]; }; "ui.gutter" = { "bg" = black.base; }; "ui.help" = { "fg" = green.base; "bg" = black.base; }; "ui.linenr" = { "fg" = white.dark; "bg" = black.base; }; "ui.linenr.selected" = { "fg" = accent.bright; "modifiers" = [ "bold" ]; }; "ui.menu" = { "fg" = accent.base; "bg" = black.base; }; "ui.menu.scroll" = { "fg" = yellow.dark; "bg" = background; }; "ui.menu.selected" = { "fg" = red.base; "bg" = blue.dark; }; "ui.popup" = { "bg" = black.base; }; "ui.selection" = { "bg" = white.dark; }; "ui.selection.primary" = { "bg" = black.bright; }; "ui.statusline" = { "fg" = blue.bright; "bg" = black.base; }; "ui.statusline.inactive" = { "fg" = red.bright; "bg" = red.dark; }; "ui.statusline.insert" = { "fg" = green.bright; "bg" = green.dark; }; "ui.statusline.normal" = { "fg" = yellow.bright; "bg" = yellow.dark; }; "ui.statusline.select" = { "fg" = cyan.bright; "bg" = cyan.dark; }; "ui.text" = foreground; "ui.text.focus" = accent.base; "ui.virtual.indent-guide" = { "fg" = black.bright; }; "ui.virtual.inlay-hint" = { "fg" = weird.bright; "bg" = weird.dark; }; "ui.virtual.ruler" = { "bg" = background; }; "ui.window" = { "bg" = black.base; }; }; }; }; }