about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--dotfiles/.emacs9
-rw-r--r--hosts/home.nix6
-rw-r--r--overlays/base/default.nix4
-rw-r--r--packages/lsp-bridge/default.nix64
4 files changed, 76 insertions, 7 deletions
diff --git a/dotfiles/.emacs b/dotfiles/.emacs
index 51a41eb..d60600a 100644
--- a/dotfiles/.emacs
+++ b/dotfiles/.emacs
@@ -102,7 +102,11 @@
 (use-package jq-mode
   :ensure t )
 
-(use-package lsp-mode
+(use-package yasnippet
+  :ensure t)
+(yas-global-mode 1)
+
+(use-package lsp-bridge
   :ensure t 
   :hook ((haskell-mode c-mode c++-mode c-or-c++-mode) . lsp-deferred)
   :commands (lsp lsp-deferred)
@@ -116,9 +120,6 @@
 (use-package company
   :ensure t)
 
-(use-package yasnippet
-  :ensure t)
-
 (use-package rustic
   :ensure t)
 
diff --git a/hosts/home.nix b/hosts/home.nix
index 8c24b56..82544fb 100644
--- a/hosts/home.nix
+++ b/hosts/home.nix
@@ -158,13 +158,13 @@
         doom-modeline
         dashboard
 
-        lsp-ui
         projectile
+        lsp-ui
 
-        lsp-mode
-        company
+        manualPackages.custom.lsp-bridge
         rust-mode
         rustic
+        company
         flycheck
         lsp-haskell
 
diff --git a/overlays/base/default.nix b/overlays/base/default.nix
index 2f021c7..b97401b 100644
--- a/overlays/base/default.nix
+++ b/overlays/base/default.nix
@@ -81,4 +81,8 @@ final: prev:
     scripts = [ prev.mpvScripts.mpris ];
   };
 
+  emacsPackagesFor = emacs: ((prev.emacsPackagesFor emacs).overrideScope' (prev: final: rec {
+    manualPackages = final.manualPackages // { custom.lsp-bridge = prev.callPackage ../../packages/lsp-bridge { }; };
+  }));
+
 }
diff --git a/packages/lsp-bridge/default.nix b/packages/lsp-bridge/default.nix
new file mode 100644
index 0000000..7eba8f0
--- /dev/null
+++ b/packages/lsp-bridge/default.nix
@@ -0,0 +1,64 @@
+{ lib
+, trivialBuild
+, fetchFromGitHub
+, python3Packages
+, python3
+, posframe
+, markdown-mode
+, yasnippet
+, org
+, which-key
+, makeWrapper
+}:
+
+let
+  rev = "7dfeeb640d14697755e2ac7997af0ec6c413197f";
+  python = python3.withPackages (ps: with ps; [ epc orjson sexpdata six ]);
+in trivialBuild {
+  pname = "lsp-bridge";
+  version = "20230104";
+
+  commit = rev;
+
+  src = fetchFromGitHub {
+    owner = "manateelazycat";
+    repo = "lsp-bridge";
+    inherit rev;
+    sha256 = "sha256-sB5niigN0rdtqeprlZAJEKgAuQDkcUMbbL9yTnrdoLg=";
+  };
+
+  packageRequires =
+    [
+      posframe
+      markdown-mode
+      yasnippet
+      org
+      which-key
+    ];
+
+  buildPhase = ''
+    runHook preInstall
+    install -d $out/share/emacs/site-lisp/
+    install *.el $out/share/emacs/site-lisp/
+    install acm/*.el $out/share/emacs/site-lisp/
+    install *.py $out/share/emacs/site-lisp/
+    cp -r core $out/share/emacs/site-lisp/
+    cp -r langserver $out/share/emacs/site-lisp/
+    cp -r multiserver $out/share/emacs/site-lisp/
+    cp -r resources $out/share/emacs/site-lisp/
+    cp -r acm/icons $out/share/emacs/site-lisp/
+    runHook postInstall
+  '';
+
+  postPatch = ''
+    substituteInPlace lsp-bridge.el --replace '(defcustom lsp-bridge-python-command (if (memq system-type '"'"'(cygwin windows-nt ms-dos)) "python.exe" "python3")' '(defcustom lsp-bridge-python-command "${python.interpreter}"'
+  '';
+
+  meta = {
+    description = "Fastest LSP client in Emacs.";
+    longDescription = ''
+        Using python's threading technology to build caches that bridge Emacs and LSP server.
+      '';
+    license = lib.licenses.gpl3;
+  };
+}