From 23ca5c3c0a592194dd79adefb82b3ea3f959cf87 Mon Sep 17 00:00:00 2001 From: Anton Bilous Date: Mon, 30 Jun 2025 18:25:32 +0300 Subject: [PATCH] Helix --- .config/helix/config.toml | 131 +++++++++++++++++++---- .config/helix/languages.toml | 76 ++++++++++--- .config/kitty/kitty.conf | 2 +- .config/nvim/after/lsp/rust_analyzer.lua | 4 +- 4 files changed, 170 insertions(+), 43 deletions(-) diff --git a/.config/helix/config.toml b/.config/helix/config.toml index cabca7a..5cebefa 100644 --- a/.config/helix/config.toml +++ b/.config/helix/config.toml @@ -10,37 +10,122 @@ shell = ["fish", "-c"] line-number = "relative" cursorline = true continue-comments = false # annoying -gutters = ["diagnostics", "line-numbers", "diff"] -auto-completion = true # TODO: is it annoying? -completion-replace = true +auto-completion = true # TODO: is it annoying? +completion-replace = true # why is it not default auto-format = true -auto-info = true # TODO: idle-timeout? +auto-info = true # TODO: idle-timeout? # true-color = true +# undercurl = true rulers = [80, 100] -bufferline = "multiple" # never, always, multiple -color-modes = true # mode indicator color -insert-final-newline = true # POSIX compatibility -popup-border = "none" # popup, menu, all, none +bufferline = "multiple" # never, always, multiple +color-modes = false # mode indicator color +insert-final-newline = true # POSIX lines finish with \n +popup-border = "none" # popup, menu, all, none jump-label-alphabet = "tneiouykhsrafwvd" -end-of-line-diagnostics = "disable" # TODO: check `inline-diagnostics` +end-of-line-diagnostics = "hint" # disable, error, warning, info, hint -# file-picker.hidden = true -cursor-shape.insert = "underline" +[editor.inline-diagnostics] +cursor-line = "warning" +other-lines = "error" +prefix-len = 1 +max-diagnostics = 5 # 10 -[editor.statusline.mode] -normal = "N" -insert = "I" -select = "S" +[editor.statusline] +mode = { normal = "N", insert = "I", select = "S" } +left = [ + "mode", + "spinner", + "version-control", + "file-name", + "read-only-indicator", + "file-modification-indicator", + "file-type", + "file-line-ending", + "file-encoding", +] +right = [ + "register", + "diagnostics", + "workspace-diagnostics", + "selections", + "primary-selection-length", + "position", + "total-line-numbers", +] + +[editor.lsp] +display-progress-messages = true # looks cool +display-inlay-hints = true # feels good + +[editor.cursor-shape] +normal = "block" +insert = "bar" +select = "underline" + +[editor.file-picker] +hidden = true + +[editor.whitespace.render] +tab = "all" +nbsp = "all" +nnbsp = "all" +space = "none" +newline = "none" +[editor.whitespace.characters] +tab = 'σ°Œ’' +nbsp = '⍽' +nnbsp = '␣' +space = 'πŸž„' +newline = 'ξŽ€' + +[editor.indent-guides] +render = true +character = "┆" # "β•Ž", "▏", "┆", "β”Š", "βΈ½" +skip-levels = 1 + +[editor.gutters] +layout = ["diff", "diagnostics", "line-numbers", "spacer"] # TODO: don't like +line-numbers.min-width = 0 + +[editor.soft-wrap] +enable = true +max-wrap = 20 # increase to reduce forced wrapping +max-indent-retain = 0 # 40 +wrap-indicator = "β†ͺ" + + +[keys.insert] +S-tab = "move_parent_node_start" + +[keys.select] +tab = "extend_parent_node_end" +S-tab = "extend_parent_node_start" [keys.normal] -# "=" = ":format" -D = [ "extend_to_line_end", "delete_selection" ] +tab = "move_parent_node_end" +S-tab = "move_parent_node_start" -# previous/next buffer +"=" = ":format" +"A-=" = "format_selections" + +D = ["extend_to_line_end", "delete_selection"] + +C-k = "jump_view_up" +C-h = "jump_view_left" +C-j = "jump_view_down" +C-l = "jump_view_right" L = "goto_next_buffer" H = "goto_previous_buffer" -# move/copy line below/above -"A-j" = [ "extend_to_line_bounds", "delete_selection", "paste_after" ] -"A-k" = [ "extend_to_line_bounds", "delete_selection", "move_line_up", "paste_before" ] -"A-J" = [ "extend_to_line_bounds", "yank", "paste_after" ] -"A-K" = [ "extend_to_line_bounds", "yank", "paste_before" ] + +A-j = ["extend_to_line_bounds", "delete_selection", "paste_after"] +A-k = [ + "extend_to_line_bounds", + "delete_selection", + "move_line_up", + "paste_before", +] +A-J = ["extend_to_line_bounds", "yank", "paste_after"] +A-K = ["extend_to_line_bounds", "yank", "paste_before"] + +[keys.normal."+"] +c = ":config-reload" diff --git a/.config/helix/languages.toml b/.config/helix/languages.toml index 4aa6a7b..1fd52fd 100644 --- a/.config/helix/languages.toml +++ b/.config/helix/languages.toml @@ -1,23 +1,65 @@ +[[language]] +name = "markdown" +[language.auto-pairs] +'_' = '_' +'(' = ')' +'{' = '}' +'[' = ']' +'"' = '"' +"'" = "'" +'`' = '`' +# '<' = '>' + +[[language]] +name = "lua" +auto-format = false + +[[language]] +name = "toml" +auto-format = true + + [language-server.taplo] config = {} # https://github.com/helix-editor/helix/issues/3897 -[language-server.rust-analyzer] -checkOnSave = true -cargo = { allFeatures = true, loadOutDirsFromCheck = true, runBuildScripts = true } -check.command = "clippy" -check.extraArgs = [ "--", - "--no-deps", - "-Wclippy::correctness", - "-Wclippy::complexity", - "-Wclippy::suspicious", - "-Wclippy::style", - "-Wclippy::perf", - "-Wclippy::pedantic", - "-Wclippy::nursery", - "-Wclippy::cargo", - "-Aclippy::restriction", - "-Aclippy::must_use_candidate", -] +[language-server.tinymist.config] +formatterPrintWidth = 100 # can't stand 120 +formatterMode = "typstyle" # or typstfmt +exportPdf = "onSave" # "onDocumentHasTitle", # default: never +semanticTokens = "enable" + + +# [language-server.tinymist.nil] +# formatting.command = "alejandra" + + +[language-server.rust-analyzer.config] +checkOnSave = true procMacro.enable = true +[language-server.rust-analyzer.config.cargo] +features = "all" +loadOutDirsFromCheck = true +runBuildScripts = true + +[language-server.rust-analyzer.config.check] +features = "all" +command = "clippy" +extraArgs = [ + "--", + "--no-deps", # run Clippy only on the given crate + # Deny, Warn, Allow, Forbid + "-Wclippy::correctness", # code that is outright wrong or useless + "-Wclippy::complexity", # code that does something simple but in a complex way + "-Wclippy::suspicious", # code that is most likely wrong or useless + "-Wclippy::style", # code that should be written in a more idiomatic way + "-Wclippy::perf", # code that can be written to run faster + "-Wclippy::pedantic", # lints which are rather strict or have occasional false positives + "-Wclippy::nursery", # new lints that are still under development + "-Wclippy::cargo", # lints for the cargo manifest + # Use in production + "-Aclippy::restriction", # lints which prevent the use of language and library features + # Other + "-Aclippy::must_use_candidate", # must_use is rather annoing +] diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf index 68ae93f..1b648e2 100644 --- a/.config/kitty/kitty.conf +++ b/.config/kitty/kitty.conf @@ -28,7 +28,7 @@ disable_ligatures cursor # cursor_shape block # cursor_beam_thickness 1.5 # cursor_underline_thickness 2.0 -# cursor_blink_interval -1 +cursor_blink_interval 0.5 cursor_stop_blinking_after 10 # }}} diff --git a/.config/nvim/after/lsp/rust_analyzer.lua b/.config/nvim/after/lsp/rust_analyzer.lua index 5f20f15..2177c3c 100644 --- a/.config/nvim/after/lsp/rust_analyzer.lua +++ b/.config/nvim/after/lsp/rust_analyzer.lua @@ -2,14 +2,14 @@ return { settings = { ["rust-analyzer"] = { cargo = { - allFeatures = true, + features = "all", loadOutDirsFromCheck = true, runBuildScripts = true, }, -- Add clippy lints for Rust. checkOnSave = true, check = { - -- allFeatures = true, + features = "all", command = "clippy", extraArgs = { "--",