aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
blob: a062e6d75c641c4334d6b4837c8a84aa09b6a44b (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
{
  description = "My Completely Inelegant Neovim Flake";

  inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; };

  outputs = { self, nixpkgs, ... }@inputs:
    let
      system = "x86_64-linux";
      pkgs = import nixpkgs {
        inherit system;
        # This is where I import any custom packages that I want to install. By
        # placing them in the overlay the become available in 'pkgs' further
        # below.
        overlays = [
          (self: super: {
            # Kept having issues with ones in stable and unstable so built custom revision
            vale = super.callPackage ./nix/vale.nix { };
            # Wasn't packaged
            flake8-isort =
              super.python3Packages.callPackage ./nix/flake8-isort.nix { };
            # Python with linting and such
            mypython = super.python3Packages.callPackage ./nix/mypython.nix { };
            # Wasn't packaged
            vim-angry-reviewer =
              super.callPackage ./nix/vim-angry-reviewer.nix { };
          })
        ];
      };
    in rec {
      # For nix < 2.7
      # For nix >= 2.7 they should grab automatically from:
      #     apps.${system}.default
      #     packages.${system}.default
      defaultApp.${system} = apps.${system}.default;
      defaultPackage.${system} = packages.${system}.default;

      apps.${system} = rec {
        nvim = {
          type = "app";
          program = "${packages.${system}.default}/bin/nvim";
        };
        default = nvim;
      };
      packages.${system} = with pkgs;
        let
          # My custom neovim with my init file and all the plugins I use.
          myneovim = (neovim.override {
            configure = {
              # customRC expects vimscript but I've already converted to lua
              customRC = ''
                lua << EOF
                ${pkgs.lib.readFile ./init.lua}
                EOF
              '';
              packages.myPlugins = with vimPlugins; {
                start = [
                  # Colorscheme
                  nord-nvim

                  # Syntax coloring
                  nvim-ts-rainbow
                  (nvim-treesitter.withPlugins
                    (plugins: tree-sitter.allGrammars))

                  # Autocompletes
                  nvim-lspconfig
                  nvim-cmp
                  cmp-nvim-lsp

                  # File navigation
                  lf-vim
                  vim-floaterm

                  # The rest
                  vim-commentary
                  vim-surround
                  vim-repeat
                  fzf-vim
                  vim-argwrap
                  vim-fugitive
                  indent-blankline-nvim
                  camelcasemotion
                  hop-nvim
                  ale
                  goyo-vim
                  vim-oscyank
                  ack-vim
                  vim-angry-reviewer
                ];
              };
            };
          });
        in rec {
          default = neovimCH;
          # symlinkJoin might not be the best solution here but it worked so I
          # just use it for now.
          neovimCH = symlinkJoin {
            name = "neovim";
            paths = [ myneovim ];
            buildInputs = [ pkgs.makeWrapper ];
            postBuild = with pkgs; ''
              rm $out/bin/nvim
              BINPATH=${
                lib.makeBinPath [
                  gcc
                  nodejs
                  mypython
                  pyright
                  vale
                  tree-sitter
                  nodePackages.bash-language-server
                  shellcheck
                  hadolint
                  nixfmt
                ]
              }
              makeWrapper ${myneovim}/bin/nvim $out/bin/nvim --prefix PATH : $BINPATH
            '';
          };
        };
    };
}