my neovim configuration
1{
2 description = "blu's neovim config";
3
4 inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
5 inputs.treefmt-nix.url = "github:numtide/treefmt-nix";
6
7 outputs =
8 {
9 self,
10 nixpkgs,
11 treefmt-nix,
12 }:
13 let
14 systems = [
15 "x86_64-linux"
16 "aarch64-linux"
17 "aarch64-darwin"
18 ];
19 forAllSystems = f: nixpkgs.lib.genAttrs systems (system: f nixpkgs.legacyPackages.${system});
20 in
21 {
22 formatter = forAllSystems (
23 pkgs:
24 (treefmt-nix.lib.evalModule pkgs {
25 projectRootFile = "flake.nix";
26
27 programs.deadnix.enable = true;
28 programs.nixfmt.enable = true;
29 programs.statix.enable = true;
30
31 programs.stylua.enable = true;
32 settings.formatter.stylua.options = [
33 "--indent-type"
34 "Spaces"
35 "--indent-width"
36 "4"
37 ];
38 }).config.build.wrapper
39 );
40
41 packages = forAllSystems (
42 pkgs:
43 let
44 neovim = pkgs.neovim.override {
45 configure = {
46 packages.ptero = {
47 start = [ pkgs.vimPlugins.lazy-nvim ];
48 };
49 customRC = ''
50 lua << EOF
51 vim.g.ptero_config_path = "${self}"
52 package.path = "${self}/lua/?.lua;${self}/lua/?/init.lua;" .. package.path
53 EOF
54 set runtimepath^=${self}
55 luafile ${self}/init.lua
56 '';
57 };
58 };
59 lsps = [
60 pkgs.bash-language-server
61 pkgs.basedpyright
62 pkgs.dockerfile-language-server
63 pkgs.gopls
64 pkgs.lua-language-server
65 pkgs.rust-analyzer
66 pkgs.typescript-language-server
67 pkgs.vim-language-server
68 pkgs.vscode-langservers-extracted
69 pkgs.zls
70 ];
71 in
72 {
73 default = pkgs.symlinkJoin {
74 name = "ptero";
75 paths = [ neovim ] ++ lsps;
76 nativeBuildInputs = [ pkgs.makeWrapper ];
77 postBuild = ''
78 rm $out/bin/nvim
79 makeWrapper ${neovim}/bin/nvim $out/bin/nvim \
80 --prefix PATH : $out/bin
81 '';
82 };
83 }
84 );
85
86 overlays.default = _final: prev: {
87 ptero = self.packages.${prev.system}.default;
88 };
89 };
90}