summaryrefslogtreecommitdiff
path: root/flake.nix
blob: f6992427b2bb84a7d3cd69393248c2cb378e0ded (plain)
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
{
  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
    nixvim.url = "github:nix-community/nixvim";
  };

  outputs =
    {
      nixpkgs,
      nixvim,
      self,
    }:
    let
      pkgs = nixpkgs.legacyPackages.x86_64-linux;
      npkgs = nixvim.legacyPackages.x86_64-linux;
    in
    {
      packages.x86_64-linux.default = npkgs.makeNixvimWithModule {
        module = {
          config = {
            opts = {
              mouse = "";
              expandtab = true;
              tabstop = 4;
            };
            colorschemes.kanagawa = {
              enable = true;
              settings.transparent = true;
            };
            extraPackages = [
              pkgs.nixfmt-rfc-style
              pkgs.shfmt
            ];
            filetype.pattern.".*".__raw = ''
              function(path, bufnr)
                local content = vim.api.nvim_buf_get_lines(bufnr, 1, 2, false)[1] or ""
                if vim.regex("bash"):match_str(content) then
                  return 'bash'
                elseif vim.regex("python"):match_str(content) then
                  return 'python'
                end
              end
            '';
            plugins = {
              ledger.enable = true;
              lsp-format.enable = true;
              vim-css-color.enable = true;
              lsp = {
                enable = true;
                servers = {
                  cmake.enable = true;
                  gopls.enable = true;
                  ruff.enable = true;
                  nixd = {
                    enable = true;
                    extraOptions.formatting.command = "nixfmt";
                  };
                  bashls.enable = true;
                };
              };
              luasnip.enable = true;
              cmp = {
                enable = true;
                cmdline = {
                  ":" = {
                    mapping.__raw = "cmp.mapping.preset.cmdline()";
                    sources = [
                      { name = "path"; }
                      {
                        name = "cmdline";
                        option.ignore_cmds = [
                          "Man"
                          "!"
                        ];
                      }
                    ];
                  };
                };
                settings = {
                  autoEnableSources = true;
                  sources = [
                    { name = "nvim_lsp"; }
                    { name = "path"; }
                    { name = "buffer"; }
                    { name = "luasnip"; }
                  ];
                  mapping = {
                    "<CR>" = "cmp.mapping.confirm({ select = true })";
                    "<Tab>" = ''
                       cmp.mapping(function(fallback)
                        if cmp.visible() then
                          cmp.select_next_item({
                            behavior = cmp.SelectBehavior.Select
                          })
                        else
                          fallback()
                        end
                      end, {"i","s","c",})
                    '';
                  };
                };
              };
            };
          };
        };
      };
    };
}