summaryrefslogtreecommitdiff
path: root/neovim.nix
blob: 69a52cc0e7d27f29680e9f108d14dd7cd84644cc (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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
{self, ...}: {
  perSystem = {
    lib,
    pkgs,
    self',
    ...
  }: let
    plugins = with pkgs.vimPlugins;
      [
        # general
        catppuccin-nvim

        # TODO: don't pin when deprecation notice
        # is no longer in nixpkgs
        (fidget-nvim.overrideAttrs (_: {
          src = pkgs.fetchFromGitHub {
            owner = "j-hui";
            repo = "fidget.nvim";
            rev = "41f327b53c7977d47aee56f05e0bdbb4b994c5eb";
            hash = "sha256-v9qARsW8Gozit4Z3+igiemjI467QgRhwM+crqwO9r6U=";
          };
        }))

        flash-nvim
        gitsigns-nvim
        indent-blankline-nvim
        lualine-nvim
        neo-tree-nvim
        nvim-web-devicons
        mini-nvim

        # completion
        nvim-cmp
        cmp-nvim-lsp
        cmp-buffer
        cmp_luasnip
        cmp-async-path
        luasnip

        # ui
        dressing-nvim
        noice-nvim
        nui-nvim
        nvim-notify

        # lsp
        nvim-lspconfig
        null-ls-nvim

        # utils
        bufferline-nvim
        plenary-nvim
        telescope-nvim
        trouble-nvim
        which-key-nvim

        # treesitter
        nvim-treesitter.withAllGrammars
        nvim-ts-context-commentstring

        # main config
        self'.packages.getchvim
      ]
      ++ lib.optional (pkgs ? vim-just) pkgs.vim-just;

    extraPrograms = with pkgs; [
      # external tools
      fd
      git
      ripgrep
      just

      # lint
      actionlint
      codespell
      deadnix
      nodePackages.alex
      shellcheck
      statix

      # format
      alejandra
      beautysh
      stylua

      # lsp
      nil
      sumneko-lua-language-server
    ];

    customRC = ''
      lua require("getchoo")
    '';

    config = pkgs.neovimUtils.makeNeovimConfig {
      withPython3 = true;
      withRuby = false;
      inherit plugins;
      inherit customRC;
    };
  in {
    packages = {
      default = self'.packages.neovim;

      neovim = pkgs.wrapNeovimUnstable pkgs.neovim-unwrapped (
        config
        // {
          wrapperArgs =
            (lib.escapeShellArgs config.wrapperArgs)
            + " "
            + ''--suffix PATH : "${lib.makeBinPath extraPrograms}"'';
        }
      );

      getchvim = pkgs.vimUtils.buildVimPlugin {
        pname = "getchvim";
        version = builtins.substring 0 8 self.lastModifiedDate or "dirty";

        src = lib.cleanSource ./.;
      };
    };
  };
}