aboutsummaryrefslogtreecommitdiffstats
path: root/home/helix/default.nix
blob: 37c8529af126809c3fd5d3fb0bcb4da0c620b038 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
{ inputs, pkgs, ... }:
{
  programs.helix = {
    extraPackages = [ ];
    enable = true;
    defaultEditor = false;
    settings = {
      theme = "catppuccin_mocha";
      editor = {
        auto-format = true;
        auto-pairs = false;
        bufferline = "multiple";
        color-modes = true;
        completion-replace = true;
        completion-trigger-len = 1;
        cursorline = true;
        indent-guides.render = true;
        soft-wrap.enable = true;
        statusline.center = [ "position-percentage" ];
        true-color = true;
        whitespace = {
          render = "all";
          characters = {
            newline = "";
            tab = "";
          };
        };
      };
      keys.normal.space.u = {
        f = ":format"; # format using LSP formatter
        w = ":set whitespace.render all";
        W = ":set whitespace.render none";
      };
      editor.cursor-shape = {
        insert = "bar";
        normal = "block";
        select = "underline";
      };
      editor.lsp = {
        display-messages = true;
        display-inlay-hints = true;
        display-signature-help-docs = true;
      };
    };
    languages = {
      language-server = {
        vale-ls = {
          command = "${pkgs.vale-ls}/bin/vale-ls";
        };
        rust-analyzer = {
          config = {
            checkOnSave = {
              command = "${pkgs.clippy}/bin/clippy";
            };
            cargo = {
              allFeatures = true;
            };
          };
        };
        biome = {
          command = "${pkgs.biome}/bin/biome";
          args = [ "lsp-proxy" ];
        };
        ruff = {
          command = "${pkgs.ruff}/bin/ruff";
          args = [
            "server"
            "--preview"
            "--isolated"
          ];
        };
        pyright = {
          command = "${pkgs.pyright}/bin/pyright-langserver";
          args = [ "--stdio" ];
        };
      };
      language = [
        {
          name = "asciidoc";
          language-servers = [ "vale-ls" ];
          scope = "source.adoc";
          file-types = [ "adoc" ];
          grammar = "asciidoc";
        }
        {
          name = "rust";
          auto-format = true;
        }
        {
          name = "python";
          language-servers = [
            "ruff"
            "pyright"
          ];
          auto-format = true;
        }
        {
          name = "latex";
          language-servers = [
            "texlab"
            "vale-ls"
          ];
          auto-format = true;
          formatter = {
            command = "${pkgs.tex-fmt}/bin/tex-fmt";
            args = [
              "--stdin"
              "--keep"
            ];
          };
        }
        {
          name = "nix";
          auto-format = true;
          formatter.command = "${pkgs.nixfmt-rfc-style}/bin/nixfmt";
        }
        {
          name = "markdown";
          auto-format = true;
          formatter = {
            command = "${pkgs.dprint}/bin/dprint";
            args = [
              "fmt"
              "--stdin"
              "md"
            ];
          };
          language-servers = [
            "vale-ls"
            "marksman"
          ];
        }
        {
          name = "toml";
          auto-format = true;
        }
        {
          name = "javascript";
          language-servers = [
            {
              name = "typescript-language-server";
              except-features = [ "format" ];
            }
            "biome"
          ];
          auto-format = true;
        }
        {
          name = "json";
          language-servers = [ "biome" ];
          auto-format = true;
        }
      ];
    };
  };
}