Browse Source

nixpkgs/neovim: add support for svelte

Thomas Dy 1 tuần trước cách đây
mục cha
commit
826fd935b1

+ 2 - 0
.config/nixpkgs/neovim/config/lua/user/lsp.lua

@@ -81,6 +81,8 @@ else
   vim.lsp.enable('ts_ls')
 end
 
+vim.lsp.enable('svelte')
+
 vim.lsp.enable('gopls')
 
 vim.lsp.config('ruby_lsp', {

+ 6 - 0
.config/nixpkgs/neovim/neovim.nix

@@ -11,6 +11,7 @@
 , typescript
 , bash-language-server
 , typescript-language-server
+, svelte-language-server
 , vscode-langservers-extracted
 , pyright
 , blink-cmp
@@ -22,11 +23,15 @@ let
     forceShare= [ "man" "info" ];
 
     installPhase = ''
+      runHook preInstall
+
       cp -r . $out
 
       if [ -d "$out/doc" ]; then
         ${neovim-unwrapped}/bin/nvim -N -u NONE -i NONE -n -E -s -V1 -c "helptags $out/doc" +quit!
       fi
+
+      runHook postInstall
     '';
   } // attrs);
   tsc = writeShellScriptBin "tsc" ''
@@ -43,6 +48,7 @@ let
     html-tidy
     bash-language-server
     typescript-language-server
+    svelte-language-server
     vscode-langservers-extracted
     pyright
     tsc

+ 8 - 0
.config/nixpkgs/neovim/plugins/default.nix

@@ -20,6 +20,8 @@ let
         mkdir $out
         cp -r runtime/queries $out/queries
 
+        rm -r $out/queries/svelte
+
         mkdir $out/plugin
         cp plugin/query_predicates.lua $out/plugin
 
@@ -28,6 +30,12 @@ let
       '';
     };
 
+    "nvim-treesitter/nvim-treesitter-context" = {
+      postInstall = ''
+        rm -r $out/queries/svelte
+      '';
+    };
+
     "FourierTransformer/tinytoml" = {
       postPatch = ''
         mkdir lua

+ 19 - 1
.config/nixpkgs/neovim/treesitter/default.nix

@@ -2,6 +2,24 @@
 let
   grammars = builtins.fromJSON (builtins.readFile ./grammars.json);
 
+  overrides = {
+    "svelte" = let
+      nvimSvelteSrc = fetchFromGitHub {
+        owner = "themixednuts";
+        repo = "nvim-treesitter-svelte";
+        rev = "a92f64aa397888975162d9296ed79fbce903fb7f";
+        sha256 = "sha256-kcKbkPyOW19bK4tYk0ylzvZePTApr/KHG4+ae7wxf6Q=";
+      };
+    in {
+      postInstall = ''
+        rm -r $out/queries
+        mkdir $out/queries
+        cp -r ${nvimSvelteSrc}/queries/svelte5 $out/queries/svelte
+        ls -la $out
+      '';
+    };
+  };
+
   buildTreesitterPlugin = name: spec:
     let
       nameParts = builtins.split "/" (spec.repo or "tree-sitter/tree-sitter-${name}");
@@ -19,7 +37,7 @@ let
         };
       } // lib.optionalAttrs (builtins.hasAttr "path" spec) {
         location = spec.path;
-      });
+      } // (overrides.${name} or {}));
 
       initLua = ''
         vim.treesitter.language.register('${name}', { ${lib.concatMapStringsSep ", " (filetype: "'${filetype}'") filetypes} })

+ 11 - 0
.config/nixpkgs/neovim/treesitter/grammars.json

@@ -103,5 +103,16 @@
     "rev": "630e2b8523c775ba866564c2b4ad88d649a56c00",
     "sha256": "1xc6bgdp9ppn8bik43rdxfn8701m33glmdbx2mg0dhll27pm86zq",
     "external": true
+  },
+  "svelte": {
+    "repo": "themixednuts/tree-sitter-htmlx",
+    "rev": "c9b9cc35709fff494a3a9e41cd9471b633649e45",
+    "sha256": "1k360l9x91dv2ma2n8yb3n9qw5y1inr4g2y76h0mcj76qgdclk58",
+    "path": "crates/tree-sitter-svelte",
+    "external": true
+  },
+  "html": {
+    "rev": "73a3947324f6efddf9e17c0ea58d454843590cc0",
+    "sha256": "062z2m175v464bvp3wg7ljcv67lgmza1r6q540pxl31h9qfijgsr"
   }
 }