default.nix
1 { 2 inputs, 3 lib, 4 pkgs, 5 stdenv, 6 symlinkJoin, 7 ... 8 }: 9 let 10 inherit (builtins) readFile isPath; 11 inherit (stdenv) mkDerivation; 12 13 mkPlugin' = 14 name: 15 mkPlugin { 16 inherit name; 17 src = inputs.${name}; 18 module = null; 19 config = ""; 20 }; 21 22 simplePlugins = [ 23 (mkPlugin' "aiken-neovim") 24 (mkPlugin' "colorful-menu") 25 (mkPlugin' "comment") 26 (mkPlugin' "dressing") 27 (mkPlugin' "friendly-snippets") 28 (mkPlugin' "lspkind") 29 (mkPlugin' "nio") 30 (mkPlugin' "noice") 31 (mkPlugin' "nui") 32 (mkPlugin' "nvim-treesitter-endwise") 33 (mkPlugin' "nvim-treesitter-just") 34 (mkPlugin' "plenary") 35 (mkPlugin' "which-key") 36 ]; 37 38 mkPlugin = 39 args@{ 40 inputs ? [ ], 41 name, 42 src, 43 config ? "", 44 depends ? [ ], 45 ... 46 }: 47 let 48 plugin = mkDerivation { 49 inherit src; 50 name = "nightvim-${name}"; 51 version = src.shortRev or "dev-nightvim"; 52 53 dontBuild = true; 54 installPhase = '' 55 mkdir -p $out/share/nightvim/pack/nightvim/opt/${name} 56 cp -r . $out/share/nightvim/pack/nightvim/opt/${name} 57 ''; 58 59 passthru.spec = { 60 inherit 61 name 62 src 63 inputs 64 depends 65 ; 66 67 config = if isPath config then readFile config else config; 68 }; 69 }; 70 in 71 symlinkJoin { 72 name = "${args.name}-with-tools"; 73 paths = [ plugin ] ++ inputs; 74 inherit (plugin) passthru; 75 }; 76 77 importPlugin = 78 dir: 79 import dir { 80 inherit 81 pkgs 82 inputs 83 mkPlugin 84 lib 85 ; 86 }; 87 in 88 symlinkJoin rec { 89 name = "nightvim-plugins"; 90 91 paths = 92 let 93 inherit (builtins) readDir; 94 95 dir = ./.; 96 entries = readDir dir; 97 98 importPluginPath = 99 name: 100 let 101 path = dir + "/${name}"; 102 type = (readDir dir).${name}; 103 in 104 if type == "regular" && lib.hasSuffix ".nix" name && name != "default.nix" then 105 importPlugin (dir + "/${name}") 106 else if type == "directory" then 107 importPlugin path 108 else 109 null; 110 111 # Filter out non-plugin entries and import all valid plugins 112 plugins = lib.filter (x: x != null) (map importPluginPath (builtins.attrNames entries)); 113 in 114 plugins ++ simplePlugins; 115 116 passthru.specs = map (p: p.spec) paths; 117 }