diff options
Diffstat (limited to 'pkgs/applications/editors/emacs/elisp-packages/manual-packages')
48 files changed, 1681 insertions, 0 deletions
diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda-input/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda-input/default.nix new file mode 100644 index 00000000000..a96f7393dfa --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda-input/default.nix @@ -0,0 +1,18 @@ +{ trivialBuild +, haskellPackages +}: + +trivialBuild { + pname = "agda-input"; + + inherit (haskellPackages.Agda) src version; + + postUnpack = '' + mv $sourceRoot/src/data/emacs-mode/agda-input.el $sourceRoot + ''; + + meta = { + inherit (haskellPackages.Agda.meta) homepage license; + description = "Standalone package providing the agda-input method without building Agda."; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda2-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda2-mode/default.nix new file mode 100644 index 00000000000..2533153bd44 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda2-mode/default.nix @@ -0,0 +1,27 @@ +{ trivialBuild +, haskellPackages +}: + +trivialBuild rec { + pname = "agda-mode"; + version = haskellPackages.Agda.version; + + dontUnpack = true; + + # already byte-compiled by Agda builder + buildPhase = '' + agda=`${haskellPackages.Agda}/bin/agda-mode locate` + cp `dirname $agda`/*.el* . + ''; + + meta = { + inherit (haskellPackages.Agda.meta) homepage license; + description = "Agda2-mode for Emacs extracted from Agda package"; + longDescription = '' + Wrapper packages that liberates init.el from `agda-mode locate` magic. + Simply add this to user profile or systemPackages and do `(require + 'agda2)` in init.el. + ''; + }; +} + diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/bqn-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/bqn-mode/default.nix new file mode 100644 index 00000000000..6430e56ef73 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/bqn-mode/default.nix @@ -0,0 +1,22 @@ +{ lib +, trivialBuild +, fetchFromGitHub +}: + +trivialBuild { + pname = "bqn-mode"; + version = "0.pre+date=2022-09-14"; + + src = fetchFromGitHub { + owner = "museoa"; + repo = "bqn-mode"; + rev = "3e3d4758c0054b35f047bf6d9e03b1bea425d013"; + hash = "sha256:0pz3m4jp4dn8bsmc9n51sxwdk6g52mxb6y6f6a4g4hggb35shy2a"; + }; + + meta = with lib; { + description = "Emacs mode for BQN programming language"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ sternenseemann AndersonTorres ]; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/cask/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/cask/default.nix new file mode 100644 index 00000000000..692481cc7fb --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/cask/default.nix @@ -0,0 +1,76 @@ +{ lib +, stdenv +, fetchFromGitHub +, bash +, emacs +, python3 +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "cask"; + version = "0.8.8"; + + src = fetchFromGitHub { + owner = "cask"; + repo = "cask"; + rev = "v${finalAttrs.version}"; + hash = "sha256-TlReq5sLVJj+pXmJSnepKQkNEWVhnh30iq4egM1HJMU="; + }; + + doCheck = true; + + nativeBuildInputs = [ emacs ]; + buildInputs = [ + bash + python3 + ] + ++ (with emacs.pkgs; [ + ansi + dash + ecukes + el-mock + ert-async + ert-runner + f + git + noflet + package-build + s + servant + shell-split-string + ]); + + strictDeps = true; + + buildPhase = '' + runHook preBuild + + emacs --batch -L . -f batch-byte-compile cask.el cask-cli.el + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + install -Dm444 -t $out/share/emacs/site-lisp/cask *.el *.elc + install -Dm555 -t $out/share/emacs/site-lisp/cask/bin bin/cask + ln -s $out/share/emacs/site-lisp/cask/bin/cask $out/bin/cask + + runHook postInstall + ''; + + meta = with lib; { + description = "Project management for Emacs"; + longDescription = '' + Cask is a project management tool for Emacs that helps automate the + package development cycle; development, dependencies, testing, building, + packaging and more. + ''; + homepage = "https://cask.readthedocs.io/en/latest/index.html"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ AndersonTorres ]; + inherit (emacs.meta) platforms; + }; +}) diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/cedille/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/cedille/default.nix new file mode 100644 index 00000000000..e9a5e912881 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/cedille/default.nix @@ -0,0 +1,33 @@ +{ stdenv +, cedille +, emacs +}: + +stdenv.mkDerivation { + pname = "cedille-mode"; + + inherit (cedille) version src; + + buildInputs = [ emacs ]; + + dontBuild = true; + + installPhase = '' + runHook preInstall + + install -d $out/share/emacs/site-lisp + install se-mode/*.el se-mode/*.elc $out/share/emacs/site-lisp + install cedille-mode/*.el cedille-mode/*.elc $out/share/emacs/site-lisp + install *.el *.elc $out/share/emacs/site-lisp + substituteInPlace $out/share/emacs/site-lisp/cedille-mode.el \ + --replace /usr/bin/cedille ${cedille}/bin/cedille + + runHook postInstall + ''; + + meta = { + inherit (cedille.meta) + homepage license maintainers platforms; + description = "Emacs major mode for Cedille"; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/color-theme-solarized/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/color-theme-solarized/default.nix new file mode 100644 index 00000000000..1ac8b2f7076 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/color-theme-solarized/default.nix @@ -0,0 +1,38 @@ +{ lib +, trivialBuild +, fetchFromGitHub +, emacs +, color-theme +}: + +trivialBuild { + pname = "color-theme-solarized"; + version = "0.pre+unstable=2017-10-24"; + + src = fetchFromGitHub { + owner = "sellout"; + repo = "emacs-color-theme-solarized"; + rev = "f3ca8902ea056fb8e46cb09f09c96294e31cd4ee"; + hash = "sha256-oxX0lo6sxotEiR3nPrKPE9H01HKB3ohB/p8eEHFTp5k="; + }; + + buildInputs = [ emacs ]; + propagatedUserEnvPkgs = [ color-theme ]; + + buildPhase = '' + runHook preBuild + + emacs -L . -L ${color-theme}/share/emacs/site-lisp/elpa/color-theme-* \ + --batch -f batch-byte-compile *.el + + runHook postBuild + ''; + + meta = with lib; { + homepage = "http://ethanschoonover.com/solarized"; + description = "Precision colors for machines and people; Emacs implementation"; + license = licenses.mit; + maintainers = with maintainers; [ samuelrivas AndersonTorres ]; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/control-lock/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/control-lock/default.nix new file mode 100644 index 00000000000..82ea42aa2b8 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/control-lock/default.nix @@ -0,0 +1,23 @@ +{ lib, stdenv, fetchurl }: + +stdenv.mkDerivation { + name = "control-lock"; + + src = fetchurl { + url = "https://github.com/emacsmirror/emacswiki.org/blob/185fdc34fb1e02b43759ad933d3ee5646b0e78f8/control-lock.el"; + sha256 = "1b5xcgq2r565pr1c14dwrmn1fl05p56infapa5pqvajv2kpfla7h"; + }; + + dontUnpack = true; + + installPhase = '' + install -d $out/share/emacs/site-lisp + install $src $out/share/emacs/site-lisp/control-lock.el + ''; + + meta = { + description = "Like caps-lock, but for your control key. Give your pinky a rest!"; + homepage = "https://www.emacswiki.org/emacs/control-lock.el"; + platforms = lib.platforms.all; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ebuild-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ebuild-mode/default.nix new file mode 100644 index 00000000000..04a105ed514 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ebuild-mode/default.nix @@ -0,0 +1,17 @@ +{ lib, trivialBuild, fetchurl }: + +trivialBuild rec { + pname = "ebuild-mode"; + version = "1.60"; + + src = fetchurl { + url = "https://dev.gentoo.org/~ulm/emacs/${pname}-${version}.tar.xz"; + sha256 = "sha256-XN+RLVff4yvxjaAuNjUgSOzU0KdnVGMt9B78rfW389g="; + }; + + meta = with lib; { + description = "Major modes for Gentoo package files"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ qyliss ]; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/elisp-ffi/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/elisp-ffi/default.nix new file mode 100644 index 00000000000..74b829701b0 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/elisp-ffi/default.nix @@ -0,0 +1,47 @@ +{ lib +, melpaBuild +, fetchFromGitHub +, pkg-config +, libffi +, writeText +}: + +let + rev = "da37c516a0e59bdce63fb2dc006a231dee62a1d9"; +in melpaBuild { + pname = "elisp-ffi"; + version = "20170518.0"; + + commit = rev; + + src = fetchFromGitHub { + owner = "skeeto"; + repo = "elisp-ffi"; + inherit rev; + sha256 = "sha256-StOezQEnNTjRmjY02ub5FRh59aL6gWfw+qgboz0wF94="; + }; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ libffi ]; + + preBuild = '' + mv ffi.el elisp-ffi.el + make + ''; + + recipe = writeText "recipe" '' + (elisp-ffi :repo "skeeto/elisp-ffi" :fetcher github) + ''; + + meta = { + description = "Emacs Lisp Foreign Function Interface"; + longDescription = '' + This library provides an FFI for Emacs Lisp so that Emacs + programs can invoke functions in native libraries. It works by + driving a subprocess to do the heavy lifting, passing result + values on to Emacs. + ''; + license = lib.licenses.publicDomain; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/emacspeak/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/emacspeak/default.nix new file mode 100644 index 00000000000..927605676cf --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/emacspeak/default.nix @@ -0,0 +1,60 @@ +{ lib +, stdenv +, fetchFromGitHub +, makeWrapper +, emacs +, tcl +, tclx +, espeak-ng +}: + +stdenv.mkDerivation rec { + pname = "emacspeak"; + version = "56.0"; + + src = fetchFromGitHub { + owner = "tvraman"; + repo = pname; + rev = version; + hash= "sha256-juy+nQ7DrG818/uTH6Dv/lrrzu8qzPWwi0sX7JrhHK8="; + }; + + nativeBuildInputs = [ + emacs + makeWrapper + ]; + buildInputs = [ + espeak-ng + tcl + tclx + ]; + + preConfigure = '' + make config + ''; + + postBuild = '' + make -C servers/native-espeak PREFIX=$out "TCL_INCLUDE=${tcl}/include" + ''; + + postInstall = '' + make -C servers/native-espeak PREFIX=$out install + local d=$out/share/emacs/site-lisp/emacspeak/ + install -d -- "$d" + cp -a . "$d" + find "$d" \( -type d -or \( -type f -executable \) \) -execdir chmod 755 {} + + find "$d" -type f -not -executable -execdir chmod 644 {} + + makeWrapper ${emacs}/bin/emacs $out/bin/emacspeak \ + --set DTK_PROGRAM "${placeholder "out"}/share/emacs/site-lisp/emacspeak/servers/espeak" \ + --set TCLLIBPATH "${tclx}/lib" \ + --add-flags '-l "${placeholder "out"}/share/emacs/site-lisp/emacspeak/lisp/emacspeak-setup.elc"' + ''; + + meta = with lib; { + homepage = "https://github.com/tvraman/emacspeak/"; + description = "Emacs extension that provides spoken output"; + license = licenses.gpl2Plus; + maintainers = [ maintainers.AndersonTorres ]; + platforms = platforms.linux; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ement/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ement/default.nix new file mode 100644 index 00000000000..c43d0d77654 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ement/default.nix @@ -0,0 +1,43 @@ +{ trivialBuild +, lib +, fetchFromGitHub +, plz +, cl-lib +, ts +, magit-section +, taxy-magit-section +, taxy +, svg-lib +}: + +trivialBuild { + pname = "ement"; + version = "unstable-2022-09-01"; + + src = fetchFromGitHub { + owner = "alphapapa"; + repo = "ement.el"; + rev = "4ec2107e6a90ed962ddd3875d47caa523eb466b9"; + sha256 = "sha256-zKkBpaOj3qb/Oy89rt7BxmWZDZzDzMIJjjOm+1rrnnc="; + }; + + packageRequires = [ + plz + cl-lib + ts + magit-section + taxy-magit-section + taxy + svg-lib + ]; + + patches = [ + ./handle-nil-images.patch + ]; + + meta = { + description = "Ement.el is a Matrix client for Emacs"; + license = lib.licenses.gpl3Only; + platforms = lib.platforms.all; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ement/handle-nil-images.patch b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ement/handle-nil-images.patch new file mode 100644 index 00000000000..271e1cd2dba --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ement/handle-nil-images.patch @@ -0,0 +1,28 @@ +diff --git a/ement-lib.el b/ement-lib.el +index f0b2738..025a191 100644 +--- a/ement-lib.el ++++ b/ement-lib.el +@@ -644,14 +644,15 @@ can cause undesirable underlining." + "Return a copy of IMAGE set to MAX-WIDTH and MAX-HEIGHT. + IMAGE should be one as created by, e.g. `create-image'." + ;; It would be nice if the image library had some simple functions to do this sort of thing. +- (let ((new-image (cl-copy-list image))) +- (when (fboundp 'imagemagick-types) +- ;; Only do this when ImageMagick is supported. +- ;; FIXME: When requiring Emacs 27+, remove this (I guess?). +- (setf (image-property new-image :type) 'imagemagick)) +- (setf (image-property new-image :max-width) max-width +- (image-property new-image :max-height) max-height) +- new-image)) ++ (when image ++ (let ((new-image (cl-copy-list image))) ++ (when (fboundp 'imagemagick-types) ++ ;; Only do this when ImageMagick is supported. ++ ;; FIXME: When requiring Emacs 27+, remove this (I guess?). ++ (setf (image-property new-image :type) 'imagemagick)) ++ (setf (image-property new-image :max-width) max-width ++ (image-property new-image :max-height) max-height) ++ new-image))) + + (defun ement--room-alias (room) + "Return latest m.room.canonical_alias event in ROOM." diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ess-R-object-popup/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ess-R-object-popup/default.nix new file mode 100644 index 00000000000..7809dcd7356 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ess-R-object-popup/default.nix @@ -0,0 +1,29 @@ +{ trivialBuild +, fetchFromGitHub +, emacs +, popup +, ess +}: + +trivialBuild rec { + pname = "ess-R-object-popup"; + version = "1.0"; + + src = fetchFromGitHub { + owner = "myuhe"; + repo = "ess-R-object-popup.el"; + rev = "v${version}"; + hash = "sha256-YN8ZLXEbwTFdFfovkV2IXV9v6y/PTgCdiRQqbpRaF2E="; + }; + + packageRequires = [ + popup + ess + ]; + + meta = { + homepage = "https://github.com/myuhe/ess-R-object-popup.el"; + description = "Popup descriptions of R objects"; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/evil-markdown/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/evil-markdown/default.nix new file mode 100644 index 00000000000..d4079a53dca --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/evil-markdown/default.nix @@ -0,0 +1,34 @@ +{ lib +, trivialBuild +, fetchFromGitHub +, emacs +, evil +, markdown-mode +}: + +trivialBuild rec { + pname = "evil-markdown"; + version = "0.pre+unstable=2021-07-21"; + + src = fetchFromGitHub { + owner = "Somelauw"; + repo = "evil-markdown"; + rev = "8e6cc68af83914b2fa9fd3a3b8472573dbcef477"; + hash = "sha256-HBBuZ1VWIn6kwK5CtGIvHM1+9eiNiKPH0GUsyvpUVN8="; + }; + + buildInputs = propagatedUserEnvPkgs; + + propagatedUserEnvPkgs = [ + evil + markdown-mode + ]; + + meta = with lib; { + homepage = "https://github.com/Somelauw/evil-markdown"; + description = "Integrates Emacs evil and markdown"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ leungbk ]; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/font-lock-plus/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/font-lock-plus/default.nix new file mode 100644 index 00000000000..019d241f507 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/font-lock-plus/default.nix @@ -0,0 +1,22 @@ +{ lib +, fetchFromGitHub +, trivialBuild +}: + +trivialBuild { + pname = "font-lock-plus"; + version = "208+unstable=2018-01-01"; + + src = fetchFromGitHub { + owner = "emacsmirror"; + repo = "font-lock-plus"; + rev = "f2c1ddcd4c9d581bd32be88fad026b49f98b6541"; + hash = "sha256-lFmdVMXIIXZ9ZohAJw5rhxpTv017qIyzmpuKOWDdeJ4="; + }; + + meta = with lib; { + homepage = "https://github.com/emacsmirror/font-lock-plus"; + description = "Enhancements to standard library font-lock.el"; + license = licenses.gpl2Plus; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghc-mod/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghc-mod/default.nix new file mode 100644 index 00000000000..533c63608ab --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghc-mod/default.nix @@ -0,0 +1,27 @@ +{ lib +, pkgs +, melpaBuild +, haskellPackages +, writeText +}: + +melpaBuild { + pname = "ghc"; + + inherit (haskellPackages.ghc-mod) version src; + + packageRequires = [ haskell-mode ]; + + propagatedUserEnvPkgs = [ haskellPackages.ghc-mod ]; + + recipe = writeText "recipe" '' + (ghc-mod :repo "DanielG/ghc-mod" :fetcher github :files ("elisp/*.el")) + ''; + + fileSpecs = [ "elisp/*.el" ]; + + meta = { + description = "An extension of haskell-mode that provides completion of symbols and documentation browsing"; + license = lib.licenses.bsd3; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/git-undo/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/git-undo/default.nix new file mode 100644 index 00000000000..b8bbe7db577 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/git-undo/default.nix @@ -0,0 +1,25 @@ +{ lib +, fetchFromGitHub +, emacs +, trivialBuild +}: + +trivialBuild { + pname = "git-undo"; + version = "0.pre+unstable=2019-12-21"; + + src = fetchFromGitHub { + owner = "jwiegley"; + repo = "git-undo-el"; + rev = "cf31e38e7889e6ade7d2d2b9f8719fd44f52feb5"; + sha256 = "sha256-cVkK9EF6qQyVV3uVqnBEjF8e9nEx/8ixnM8PvxqCyYE="; + }; + + meta = with lib; { + homepage = "https://github.com/jwiegley/git-undo-el"; + description = "Revert region to most recent Git-historical version"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ leungbk ]; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/haskell-unicode-input-method/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/haskell-unicode-input-method/default.nix new file mode 100644 index 00000000000..1d9fa6a0c08 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/haskell-unicode-input-method/default.nix @@ -0,0 +1,34 @@ +{ lib +, melpaBuild +, fetchFromGitHub +, writeText +}: + +let + rev = "d8d168148c187ed19350bb7a1a190217c2915a63"; +in melpaBuild { + pname = "haskell-unicode-input-method"; + version = "20110905.2307"; + + commit = rev; + + src = fetchFromGitHub { + owner = "roelvandijk"; + repo = "emacs-haskell-unicode-input-method"; + inherit rev; + sha256 = "09b7bg2s9aa4s8f2kdqs4xps3jxkq5wsvbi87ih8b6id38blhf78"; + }; + + recipe = writeText "recipe" '' + (haskell-unicode-input-method + :repo "roelvandijk/emacs-haskell-unicode-input-method" + :fetcher github) + ''; + + packageRequires = []; + + meta = { + homepage = "https://melpa.org/#haskell-unicode-input-method/"; + license = lib.licenses.free; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/header-file-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/header-file-mode/default.nix new file mode 100644 index 00000000000..df3b2a56519 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/header-file-mode/default.nix @@ -0,0 +1,34 @@ +{ trivialBuild +, lib +, fetchFromGitHub +}: + +trivialBuild { + pname = "header-file-mode"; + version = "unstable-2022-05-25"; + + src = fetchFromGitHub { + owner = "aidalgol"; + repo = "header-file-mode"; + rev = "cf6ce33b436ae9631aece1cd30a459cb0f89d1cd"; + sha256 = "sha256-+TDJubmBc0Hl+2ms58rnOf3hTaQE3ayrIpGWl4j39GQ="; + }; + + postUnpack = '' + sourceRoot="$sourceRoot/lisp" + ''; + + postBuild = '' + emacs -L . --batch -l package --eval '(package-generate-autoloads "header-file" ".")' + ''; + + meta = { + description = '' + A major mode that, when associated with the .h file extension, will put + those file into the major mode of their corresponding implementation file. + ''; + license = lib.licenses.gpl3Plus; + platforms = lib.platforms.all; + maintainers = with lib.maintainers; [ aidalgol ]; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/helm-words/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/helm-words/default.nix new file mode 100644 index 00000000000..21a65614398 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/helm-words/default.nix @@ -0,0 +1,28 @@ +{ lib +, trivialBuild +, fetchFromGitHub +, dictionary +, emacs +, helm +}: + +trivialBuild rec { + pname = "helm-words"; + version = "0.pre+unstable=2019-03-12"; + + src = fetchFromGitHub { + owner = "emacsmirror"; + repo = pname; + rev = "e6387ece1940a06695b9d910de3d90252efb8d29"; + hash = "sha256-rh8YKDLZZCUE6JnnRnFyDDyUjK+35+M2dkawR/+qwNM="; + }; + + packageRequires = [ helm dictionary ]; + + meta = with lib; { + homepage = "https://github.com/emacsmirror/helm-words"; + description = "Helm extension for looking up words in dictionaries and thesauri"; + license = licenses.gpl3Plus; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/hsc3/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/hsc3/default.nix new file mode 100644 index 00000000000..3b20326d96f --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/hsc3/default.nix @@ -0,0 +1,28 @@ +{ lib, stdenv, fetchurl, emacs }: + +# this package installs the emacs-mode which +# resides in the hsc3 sources. + +let version = "0.15"; + +in stdenv.mkDerivation { + pname = "hsc3-mode"; + inherit version; + src = fetchurl { + url = "mirror://hackage/hsc3-0.15/hsc3-0.15.tar.gz"; + sha256 = "2f3b15655419cf8ebe25ab1c6ec22993b2589b4ffca7c3a75ce478ca78a0bde6"; + }; + + buildInputs = [ emacs ]; + + installPhase = '' + mkdir -p "$out/share/emacs/site-lisp" + cp "emacs/hsc3.el" "$out/share/emacs/site-lisp" + ''; + + meta = { + homepage = "http://rd.slavepianos.org/?t=hsc3"; + description = "hsc3 mode package for Emacs"; + platforms = lib.platforms.unix; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/idris2-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/idris2-mode/default.nix new file mode 100644 index 00000000000..c415b783bc9 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/idris2-mode/default.nix @@ -0,0 +1,32 @@ +{ lib +, trivialBuild +, fetchFromGitHub +, emacs +, prop-menu +}: + +trivialBuild rec { + pname = "idris2-mode"; + version = "1.1"; + + src = fetchFromGitHub { + owner = "idris-community"; + repo = pname; + rev = version; + hash = "sha256-rTeVjkAw44Q35vjaERs4uoZRJ6XR3FKplEUCVPHhY7Q="; + }; + + buildInputs = propagatedUserEnvPkgs; + + propagatedUserEnvPkgs = [ + prop-menu + ]; + + meta = with lib; { + homepage = "https://github.com/idris-community/idris2-mode"; + description = "This is an emacs mode for editing Idris 2 code."; + license = licenses.gpl3Only; + maintainers = with maintainers; [ wuyoli ]; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/isearch-plus/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/isearch-plus/default.nix new file mode 100644 index 00000000000..c28a1774342 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/isearch-plus/default.nix @@ -0,0 +1,25 @@ +{ lib +, trivialBuild +, fetchFromGitHub +, emacs +}: + +trivialBuild { + pname = "isearch-plus"; + version = "3434+unstable=2021-08-23"; + + src = fetchFromGitHub { + owner = "emacsmirror"; + repo = "isearch-plus"; + rev = "93088ea0ac4d51bdb76c4c32ea53172f6c435852"; + hash = "sha256-kD+Fyps3fc5YK6ATU1nrkKHazGMYJnU2gRcpQZf6A1E="; + }; + + meta = with lib; { + homepage = "https://www.emacswiki.org/emacs/IsearchPlus"; + description = "Extensions to isearch"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ leungbk AndersonTorres ]; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/isearch-prop/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/isearch-prop/default.nix new file mode 100644 index 00000000000..d5283da41df --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/isearch-prop/default.nix @@ -0,0 +1,25 @@ +{ lib +, fetchFromGitHub +, trivialBuild +, emacs +}: + +trivialBuild { + pname = "isearch-prop"; + version = "0.pre+unstable=2019-05-01"; + + src = fetchFromGitHub { + owner = "emacsmirror"; + repo = "isearch-prop"; + rev = "4a2765f835dd115d472142da05215c4c748809f4"; + hash = "sha256-A1Kt4nm7iRV9J5yaLupwiNL5g7ddZvQs79dggmqZ7Rk="; + }; + + meta = with lib; { + homepage = "https://www.emacswiki.org/emacs/IsearchPlus"; + description = "Search text- or overlay-property contexts"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ leungbk ]; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/jam-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/jam-mode/default.nix new file mode 100644 index 00000000000..09b7877c9de --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/jam-mode/default.nix @@ -0,0 +1,29 @@ +{ lib +, trivialBuild +, fetchurl +}: + +trivialBuild rec { + pname = "jam-mode"; + version = "0.3"; + + src = fetchurl { + url = "https://dev.gentoo.org/~ulm/distfiles/${pname}-${version}.el.xz"; + hash = "sha256-0IlYqbPa4AAwOpjdd20k8hqtvDhZmcz1WHa/LHx8kMk="; + }; + + unpackPhase = '' + runHook preUnpack + + xz -cd $src > jam-mode.el + + runHook postUnpack + ''; + + meta = with lib; { + description = "An Emacs major mode for editing Jam files"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ qyliss ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/llvm-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/llvm-mode/default.nix new file mode 100644 index 00000000000..26f9e25ad66 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/llvm-mode/default.nix @@ -0,0 +1,17 @@ +{ trivialBuild +, llvmPackages +}: + +trivialBuild { + pname = "llvm-mode"; + inherit (llvmPackages.llvm) src version; + + postUnpack = '' + sourceRoot="$sourceRoot/utils/emacs" + ''; + + meta = { + inherit (llvmPackages.llvm.meta) homepage license; + description = "Major mode for the LLVM assembler language"; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/matrix-client/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/matrix-client/default.nix new file mode 100644 index 00000000000..d8efbb9e9cb --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/matrix-client/default.nix @@ -0,0 +1,73 @@ +{ lib +, melpaBuild +, fetchFromGitHub +, fetchpatch +, writeText +# Emacs packages +, _map +, a +, anaphora +, cl-lib +, dash +, dash-functional +, esxml +, f +, frame-purpose +, ht +, ov +, rainbow-identifiers +, request +, s +, tracking +}: + +let + rev = "d2ac55293c96d4c95971ed8e2a3f6f354565c5ed"; +in melpaBuild { + pname = "matrix-client"; + version = "0.3.0"; + + commit = rev; + + src = fetchFromGitHub { + owner = "alphapapa"; + repo = "matrix-client.el"; + inherit rev; + sha256 = "1scfv1502yg7x4bsl253cpr6plml1j4d437vci2ggs764sh3rcqq"; + }; + + patches = [ + # Fix: avatar loading when imagemagick support is not available + (fetchpatch { + url = "https://github.com/alphapapa/matrix-client.el/commit/5f49e615c7cf2872f48882d3ee5c4a2bff117d07.patch"; + sha256 = "07bvid7s1nv1377p5n61q46yww3m1w6bw4vnd4iyayw3fby1lxbm"; + }) + ]; + + packageRequires = [ + _map + a + anaphora + cl-lib + dash + dash-functional + esxml + f + frame-purpose + ht + ov + rainbow-identifiers + request + s + tracking + ]; + + recipe = writeText "recipe" '' + (matrix-client :repo "alphapapa/matrix-client.el" :fetcher github) + ''; + + meta = { + description = "A chat client and API wrapper for Matrix.org"; + license = lib.licenses.gpl3Plus; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ott-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ott-mode/default.nix new file mode 100644 index 00000000000..6eeead468ff --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ott-mode/default.nix @@ -0,0 +1,19 @@ +{ trivialBuild +, ott +, haskellPackages +}: + +trivialBuild { + pname = "ott-mode"; + + inherit (ott) src version; + + postUnpack = '' + mv $sourceRoot/emacs/ott-mode.el $sourceRoot + ''; + + meta = { + description = "Emacs ott mode (from ott sources)"; + inherit (haskellPackages.Agda.meta) homepage license; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/perl-completion/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/perl-completion/default.nix new file mode 100644 index 00000000000..ad12c606abb --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/perl-completion/default.nix @@ -0,0 +1,20 @@ +{ lib +, trivial-build +, fetchurl +}: + +trivial-build { + name = "perl-completion"; + + src = fetchurl { + url = "http://emacswiki.org/emacs/download/perl-completion.el"; + sha256 = "0x6qsgs4hm87k0z9q3g4p6508kc3y123j5jayll3jf3lcl2vm6ks"; + }; + + dontUnpack = true; + + meta = { + description = "Minor mode provides useful features for editing perl codes"; + homepage = "http://emacswiki.org/emacs/PerlCompletion"; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/pod-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/pod-mode/default.nix new file mode 100644 index 00000000000..549633b7dfb --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/pod-mode/default.nix @@ -0,0 +1,18 @@ +{ trivialBuild, lib, fetchurl }: + +trivialBuild rec { + pname = "pod-mode"; + version = "1.04"; + + src = fetchurl { + url = "mirror://cpan/authors/id/F/FL/FLORA/pod-mode-${version}.tar.gz"; + sha256 = "1wr0khymkaa65blrc5nya607c1a3sjsww49bbf8f0a6176as71sv"; + }; + + meta = with lib; { + description = "Major mode for editing .pod-files"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ qyliss ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/power-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/power-mode/default.nix new file mode 100644 index 00000000000..bd6a2996d6e --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/power-mode/default.nix @@ -0,0 +1,22 @@ +{ trivialBuild +, fetchFromGitHub +, emacs +}: + +trivialBuild rec { + pname = "power-mode"; + version = "0.pre+unstable=2021-06-06"; + + src = fetchFromGitHub { + owner = "elizagamedev"; + repo = "power-mode.el"; + rev = "940e0aa36220f863e8f43840b4ed634b464fbdbb"; + hash = "sha256-Wy8o9QTWqvH9cP7xsTpF5QSd4mWNIPXJTadoADKeHWY="; + }; + + meta = { + homepage = "https://github.com/elizagamedev/power-mode.el"; + description = "Imbue Emacs with power!"; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/prisma-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/prisma-mode/default.nix new file mode 100644 index 00000000000..983363ae838 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/prisma-mode/default.nix @@ -0,0 +1,33 @@ +{ lib +, fetchFromGitHub +, melpaBuild +, js2-mode +, writeText +}: + +let + rev = "5283ca7403bcb21ca0cac8ecb063600752dfd9d4"; +in melpaBuild { + pname = "prisma-mode"; + version = "20211207.0"; + + commit = rev; + + packageRequires = [ js2-mode ]; + + src = fetchFromGitHub { + owner = "pimeys"; + repo = "emacs-prisma-mode"; + inherit rev; + sha256 = "sha256-DJJfjbu27Gi7Nzsa1cdi8nIQowKH8ZxgQBwfXLB0Q/I="; + }; + + recipe = writeText "recipe" '' + (prisma-mode :repo "pimeys/emacs-prisma-mode" :fetcher github) + ''; + + meta = { + description = "Major mode for Prisma Schema Language"; + license = lib.licenses.gpl2Only; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/prolog/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/prolog/default.nix new file mode 100644 index 00000000000..590906d6acd --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/prolog/default.nix @@ -0,0 +1,22 @@ +{ lib, stdenv, fetchurl }: + +stdenv.mkDerivation { + pname = "prolog-mode"; + version = "1.28"; + + src = fetchurl { + url = "http://bruda.ca/_media/emacs/prolog.el"; + sha256 = "ZzIDFQWPq1vI9z3btgsHgn0axN6uRQn9Tt8TnqGybOk="; + }; + + buildCommand = '' + mkdir -p $out/share/emacs/site-lisp/ + cp $src $out/share/emacs/site-lisp/prolog.el + ''; + + meta = { + homepage = "https://bruda.ca/emacs/prolog_mode_for_emacs/"; + description = "Prolog mode for Emacs"; + license = lib.licenses.gpl2Plus; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/rect-mark/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/rect-mark/default.nix new file mode 100644 index 00000000000..aef7fbf8c9a --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/rect-mark/default.nix @@ -0,0 +1,26 @@ +{ lib +, trivialBuild +, fetchFromGitHub +, emacs + }: + +trivialBuild rec { + pname = "rect-mark"; + version = "1.4"; + + src = fetchFromGitHub { + owner = "emacsmirror"; + repo = pname; + rev = version; + hash = "sha256-/8T1VTYkKUxlNWXuuS54S5jpl4UxJBbgSuWc17a/VyM="; + }; + + buildInputs = [ emacs ]; + + meta = with lib; { + homepage = "http://emacswiki.org/emacs/RectangleMark"; + description = "Mark a rectangle of text with highlighting"; + license = licenses.gpl2Plus; + inherit (emacs.meta) platforms; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/session-management-for-emacs/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/session-management-for-emacs/default.nix new file mode 100644 index 00000000000..71f9981f461 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/session-management-for-emacs/default.nix @@ -0,0 +1,29 @@ +{ stdenv, fetchurl, emacs, lib }: + +stdenv.mkDerivation rec { + pname = "session-management-for-emacs"; + version = "2.2a"; + + src = fetchurl { + url = "mirror://sourceforge/emacs-session/session-${version}.tar.gz"; + sha256 = "37dfba7420b5164eab90dafa9e8bf9a2c8f76505fe2fefa14a64e81fa76d0144"; + }; + + buildInputs = [ emacs ]; + + installPhase = '' + mkdir -p "$out/share/emacs/site-lisp" + cp lisp/*.el "$out/share/emacs/site-lisp/" + ''; + + meta = with lib; { + /* installation: add to your ~/.emacs + (require 'session) + (add-hook 'after-init-hook 'session-initialize) + */ + description = "Small session management for emacs"; + homepage = "http://emacs-session.sourceforge.net/"; + license = licenses.gpl2; + maintainers = with maintainers; [ ]; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/sunrise-commander/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/sunrise-commander/default.nix new file mode 100644 index 00000000000..eaa7d8b5779 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/sunrise-commander/default.nix @@ -0,0 +1,29 @@ +{ lib +, trivialBuild +, fetchFromGitHub +, emacs +}: + +trivialBuild rec { + pname = "sunrise-commander"; + version = "0.pre+unstable=2021-09-27"; + + src = fetchFromGitHub { + owner = pname; + repo = pname; + rev = "16e6df7e86c7a383fb4400fae94af32baf9cb24e"; + hash = "sha256-D36qiRi5OTZrBtJ/bD/javAWizZ8NLlC/YP4rdLCSsw="; + }; + + buildInputs = [ + emacs + ]; + + meta = with lib; { + homepage = "https://github.com/sunrise-commander/sunrise-commander/"; + description = "Orthodox (two-pane) file manager for Emacs"; + license = licenses.gpl3Plus; + maintainers = [ maintainers.AndersonTorres ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/sv-kalender/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/sv-kalender/default.nix new file mode 100644 index 00000000000..73fee0dcf39 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/sv-kalender/default.nix @@ -0,0 +1,19 @@ +{ fetchurl, lib, trivialBuild }: + +trivialBuild { + pname = "sv-kalender"; + version = "1.11"; + + src = fetchurl { + url = "http://bigwalter.net/daniel/elisp/sv-kalender.el"; + sha256 = "0mcx7g1pg6kfp0i4b9rh3q9csgdf3054ijswy368bxwdxsjgfz2m"; + }; + + meta = with lib; { + description = "Swedish calendar for Emacs"; + homepage = "http://bigwalter.net/daniel/elisp/sv-kalender.el"; + platforms = platforms.all; + license = licenses.gpl3Plus; + maintainers = [ maintainers.rycee ]; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/default-grammars.json b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/default-grammars.json new file mode 100644 index 00000000000..1cfa52fed5b --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/default-grammars.json @@ -0,0 +1,33 @@ +[ + "tree-sitter-bash", + "tree-sitter-c", + "tree-sitter-c-sharp", + "tree-sitter-cpp", + "tree-sitter-css", + "tree-sitter-elixir", + "tree-sitter-elm", + "tree-sitter-go", + "tree-sitter-haskell", + "tree-sitter-hcl", + "tree-sitter-html", + "tree-sitter-janet-simple", + "tree-sitter-java", + "tree-sitter-javascript", + "tree-sitter-jsdoc", + "tree-sitter-json", + "tree-sitter-julia", + "tree-sitter-nix", + "tree-sitter-ocaml", + "tree-sitter-perl", + "tree-sitter-pgn", + "tree-sitter-php", + "tree-sitter-prisma", + "tree-sitter-python", + "tree-sitter-ruby", + "tree-sitter-rust", + "tree-sitter-scala", + "tree-sitter-typescript", + "tree-sitter-verilog", + "tree-sitter-yaml", + "tree-sitter-zig" +] diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/default.nix new file mode 100644 index 00000000000..cb4cec172ba --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/default.nix @@ -0,0 +1,59 @@ +{ lib +, pkgs +, symlinkJoin +, fetchzip +, melpaBuild +, stdenv +, fetchFromGitHub +, writeText +, melpaStablePackages +, runCommand +, tree-sitter-grammars +, plugins ? map (g: tree-sitter-grammars.${g}) (lib.importJSON ./default-grammars.json) +, final +}: + +let + inherit (melpaStablePackages) tree-sitter-langs; + + libSuffix = if stdenv.isDarwin then "dylib" else "so"; + langName = g: lib.removeSuffix "-grammar" (lib.removePrefix "tree-sitter-" g.pname); + soName = g: langName g + "." + libSuffix; + + grammarDir = runCommand "emacs-tree-sitter-grammars" { + # Fake same version number as upstream language bundle to prevent triggering runtime downloads + inherit (tree-sitter-langs) version; + } ('' + install -d $out/langs/bin + echo -n $version > $out/langs/bin/BUNDLE-VERSION + '' + lib.concatStringsSep "\n" (map ( + g: "ln -s ${g}/parser $out/langs/bin/${soName g}") plugins + )); + siteDir = "$out/share/emacs/site-lisp/elpa/${tree-sitter-langs.pname}-${tree-sitter-langs.version}"; + +in +melpaStablePackages.tree-sitter-langs.overrideAttrs(old: { + postPatch = old.postPatch or "" + '' + substituteInPlace ./tree-sitter-langs-build.el \ + --replace "tree-sitter-langs-grammar-dir tree-sitter-langs--dir" "tree-sitter-langs-grammar-dir \"${grammarDir}/langs\"" + ''; + + postInstall = + old.postInstall or "" + + lib.concatStringsSep "\n" + (map + (g: '' + if [[ -d "${g}/queries" ]]; then + mkdir -p ${siteDir}/queries/${langName g}/ + for f in ${g}/queries/*; do + ln -sfn "$f" ${siteDir}/queries/${langName g}/ + done + fi + '') plugins); + + passthru = old.passthru or {} // { + inherit plugins; + withPlugins = fn: final.tree-sitter-langs.override { plugins = fn tree-sitter-grammars; }; + }; + +}) diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/update-defaults.py b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/update-defaults.py new file mode 100755 index 00000000000..128ce66dda8 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/update-defaults.py @@ -0,0 +1,75 @@ +#!/usr/bin/env nix-shell +#! nix-shell ../../../../../../../. -i python3 -p python3 -p nix + +from os.path import ( + dirname, + abspath, + join, +) +from typing import ( + List, + Any, +) +import subprocess +import json +import sys +import os + + +def fmt_grammar(grammar: str) -> str: + return "tree-sitter-" + grammar + + +def eval_expr(nixpkgs: str, expr: str) -> Any: + p = subprocess.run( + [ + "nix-instantiate", + "--json", + "--eval", + "--expr", + ("with import %s {}; %s" % (nixpkgs, expr)), + ], + check=True, + stdout=subprocess.PIPE, + ) + return json.loads(p.stdout) + + +def check_grammar_exists(nixpkgs: str, grammar: str) -> bool: + return eval_expr( + nixpkgs, f'lib.hasAttr "{fmt_grammar(grammar)}" tree-sitter-grammars' + ) + + +def build_attr(nixpkgs, attr: str) -> str: + return ( + subprocess.run( + ["nix-build", "--no-out-link", nixpkgs, "-A", attr], + check=True, + stdout=subprocess.PIPE, + ) + .stdout.decode() + .strip() + ) + + +if __name__ == "__main__": + cwd = dirname(abspath(__file__)) + nixpkgs = abspath(join(cwd, "../../../../../..")) + + src_dir = build_attr(nixpkgs, "emacs.pkgs.tree-sitter-langs.src") + + existing: List[str] = [] + + grammars = os.listdir(join(src_dir, "repos")) + for g in grammars: + exists = check_grammar_exists(nixpkgs, g) + if exists: + existing.append(fmt_grammar(g)) + else: + sys.stderr.write("Missing grammar: " + fmt_grammar(g) + "\n") + sys.stderr.flush() + + with open(join(cwd, "default-grammars.json"), mode="w") as f: + json.dump(sorted(existing), f, indent=2) + f.write("\n") diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/default.nix new file mode 100644 index 00000000000..a9462298979 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/default.nix @@ -0,0 +1,89 @@ +{ lib +, symlinkJoin +, melpaBuild +, fetchFromGitHub +, rustPlatform +, writeText +, clang +, llvmPackages + +, runtimeShell +, writeScript +, python3 +, nix-prefetch-github +, nix +}: + +let + + srcMeta = lib.importJSON ./src.json; + inherit (srcMeta) version; + + src = fetchFromGitHub srcMeta.src; + + tsc = melpaBuild { + inherit src; + inherit version; + + pname = "tsc"; + commit = version; + + sourceRoot = "source/core"; + + recipe = writeText "recipe" '' + (tsc + :repo "emacs-tree-sitter/elisp-tree-sitter" + :fetcher github) + ''; + }; + + tsc-dyn = rustPlatform.buildRustPackage { + inherit version; + inherit src; + + pname = "tsc-dyn"; + + nativeBuildInputs = [ clang ]; + sourceRoot = "source/core"; + + configurePhase = '' + export LIBCLANG_PATH="${llvmPackages.libclang.lib}/lib" + ''; + + postInstall = '' + LIB=($out/lib/libtsc_dyn.*) + TSC_PATH=$out/share/emacs/site-lisp/elpa/tsc-${version} + install -d $TSC_PATH + install -m444 $out/lib/libtsc_dyn.* $TSC_PATH/''${LIB/*libtsc_/tsc-} + echo -n $version > $TSC_PATH/DYN-VERSION + rm -r $out/lib + ''; + + inherit (srcMeta) cargoSha256; + }; + +in symlinkJoin { + name = "tsc-${version}"; + paths = [ tsc tsc-dyn ]; + + passthru = { + updateScript = let + pythonEnv = python3.withPackages(ps: [ ps.requests ]); + in writeScript "tsc-update" '' + #!${runtimeShell} + set -euo pipefail + export PATH=${lib.makeBinPath [ + nix-prefetch-github + nix + pythonEnv + ]}:$PATH + exec python3 ${builtins.toString ./update.py} ${builtins.toString ./.} + ''; + }; + + meta = { + description = "The core APIs of the Emacs binding for tree-sitter."; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ pimeys ]; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/src.json b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/src.json new file mode 100644 index 00000000000..6aa6fee1830 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/src.json @@ -0,0 +1,10 @@ +{ + "src": { + "owner": "emacs-tree-sitter", + "repo": "elisp-tree-sitter", + "rev": "909717c685ff5a2327fa2ca8fb8a25216129361c", + "sha256": "LrakDpP3ZhRQqz47dPcyoQnu5lROdaNlxGaQfQT6u+k=" + }, + "version": "0.18.0", + "cargoSha256": "sha256-IRCZqszBkGF8anF/kpcPOzHdOP4lAtJBAp6FS5tAOx8=" +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/update.py b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/update.py new file mode 100644 index 00000000000..082602fcc4f --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/update.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +from textwrap import dedent +from os.path import ( + abspath, + dirname, + join, +) +from typing import ( + Dict, + Any, +) +import subprocess +import tempfile +import json +import sys +import re + +import requests + + +def eval_drv(nixpkgs: str, expr: str) -> Any: + expr = "\n".join( + ( + "with (import %s {});" % nixpkgs, + expr, + ) + ) + + with tempfile.NamedTemporaryFile(mode="w") as f: + f.write(dedent(expr)) + f.flush() + p = subprocess.run( + ["nix-instantiate", "--json", f.name], stdout=subprocess.PIPE, check=True + ) + + return p.stdout.decode().strip() + + +def get_src(tag_name: str) -> Dict[str, str]: + p = subprocess.run( + [ + "nix-prefetch-github", + "--rev", + tag_name, + "--json", + "emacs-tree-sitter", + "elisp-tree-sitter", + ], + stdout=subprocess.PIPE, + check=True, + ) + src = json.loads(p.stdout) + + fields = ["owner", "repo", "rev", "sha256"] + + return {f: src[f] for f in fields} + + +def get_cargo_sha256(drv_path: str): + # Note: No check=True since we expect this command to fail + p = subprocess.run(["nix-store", "-r", drv_path], stderr=subprocess.PIPE) + + stderr = p.stderr.decode() + lines = iter(stderr.split("\n")) + + for l in lines: + if l.startswith("error: hash mismatch in fixed-output derivation"): + break + else: + raise ValueError("Did not find expected hash mismatch message") + + for l in lines: + m = re.match(r"\s+got:\s+(.+)$", l) + if m: + return m.group(1) + + raise ValueError("Could not extract actual sha256 hash: ", stderr) + + +if __name__ == "__main__": + cwd = sys.argv[1] + + # This should point to the root default.nix of Nixpkgs tree + nixpkgs = abspath(join(cwd, "../../../../../../..")) + + tag_name = requests.get( + "https://api.github.com/repos/emacs-tree-sitter/elisp-tree-sitter/releases/latest" + ).json()["tag_name"] + + src = get_src(tag_name) + + with tempfile.NamedTemporaryFile(mode="w") as f: + json.dump(src, f) + f.flush() + + drv_path = eval_drv( + nixpkgs, + """ + rustPlatform.buildRustPackage { + pname = "tsc-dyn"; + version = "%s"; + nativeBuildInputs = [ clang ]; + src = fetchFromGitHub (lib.importJSON %s); + sourceRoot = "source/core"; + cargoSha256 = lib.fakeSha256; + } + """ + % (tag_name, f.name), + ) + + cargo_sha256 = get_cargo_sha256(drv_path) + + with open(join(cwd, "src.json"), mode="w") as f: + json.dump( + { + "src": src, + "version": tag_name, + "cargoSha256": cargo_sha256, + }, + f, + indent=2, + ) + f.write("\n") diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/urweb-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/urweb-mode/default.nix new file mode 100644 index 00000000000..6f7e822d81d --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/urweb-mode/default.nix @@ -0,0 +1,27 @@ +{ lib +, trivialBuild +, urweb +, cl-lib +, flycheck +}: + +trivialBuild { + pname = "urweb-mode"; + + inherit (urweb) src version; + + packageRequires = [ + cl-lib + flycheck + ]; + + postUnpack = '' + sourceRoot=$sourceRoot/src/elisp + ''; + + meta = { + description = "Major mode for editing Ur/Web"; + inherit (urweb.meta) license homepage; + maintainers = [ lib.maintainers.sternenseemann ]; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/add-missing-require.patch b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/add-missing-require.patch new file mode 100644 index 00000000000..58c043bf78e --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/add-missing-require.patch @@ -0,0 +1,38 @@ +From eb9fefe7eddee0b22c7c1104eb9133ed595c55f9 Mon Sep 17 00:00:00 2001 +From: adisbladis <adisbladis@gmail.com> +Date: Fri, 23 Sep 2022 14:52:34 +1200 +Subject: [PATCH] Add missing (require)'s + +--- + voicemacs-server.el | 2 ++ + voicemacs.el | 2 ++ + 2 files changed, 4 insertions(+) + +diff --git a/voicemacs-server.el b/voicemacs-server.el +index edfe74c..04ffdf2 100644 +--- a/voicemacs-server.el ++++ b/voicemacs-server.el +@@ -1,5 +1,7 @@ + (require 'cl-lib) + (require 'json-rpc-server) ++(require 'f) ++(require 'porthole) + + + (defvar voicemacs--update-response-timeout 3 +diff --git a/voicemacs.el b/voicemacs.el +index b93e80b..d790636 100644 +--- a/voicemacs.el ++++ b/voicemacs.el +@@ -18,6 +18,8 @@ + (require 'voicemacs-extend-company)) + + ++(require 'yasnippet) ++ + (voicemacs-define-sync voicemacs + :update t + :enable nil +-- +2.37.2 + diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/default.nix new file mode 100644 index 00000000000..d7c3758bf32 --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/default.nix @@ -0,0 +1,50 @@ +{ trivialBuild +, lib +, fetchFromGitHub +, avy +, json-rpc-server +, f +, nav-flash +, helm +, cl-lib +, porthole +, default-text-scale +, bind-key +, yasnippet +, company +, company-quickhelp +}: + +trivialBuild { + pname = "voicemacs"; + version = "unstable-2022-02-16"; + + src = fetchFromGitHub { + owner = "jcaw"; + repo = "voicemacs"; + rev = "d91de2a31c68ab083172ade2451419d6bd7bb389"; + sha256 = "sha256-/MBB2R9/V0aYZp15e0vx+67ijCPp2iPlgxe262ldmtc="; + }; + + patches = [ ./add-missing-require.patch ]; + + packageRequires = [ + avy + json-rpc-server + f + nav-flash + helm + cl-lib + porthole + default-text-scale + bind-key + yasnippet + company-quickhelp + ]; + + meta = { + description = "Voicemacs is a set of utilities for controlling Emacs by voice"; + license = lib.licenses.gpl3Only; + platforms = lib.platforms.all; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/yes-no/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/yes-no/default.nix new file mode 100644 index 00000000000..2b51332c30d --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/yes-no/default.nix @@ -0,0 +1,19 @@ +{ lib, fetchurl, trivialBuild }: + +trivialBuild { + pname = "yes-no"; + version = "2017-10-01"; + + src = fetchurl { + url = "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/143bcaeb679a8fa8a548e92a5a9d5c2baff50d9c/yes-no.el"; + sha256 = "03w4wfx885y89ckyd5d95n2571nmmzrll6kr0yan3ip2aw28xq3i"; + }; + + meta = with lib; { + description = "Specify use of `y-or-n-p' or `yes-or-no-p' on a case-by-case basis"; + homepage = "https://www.emacswiki.org/emacs/yes-no.el"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ jcs090218 ]; + platforms = platforms.all; + }; +} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/youtube-dl/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/youtube-dl/default.nix new file mode 100644 index 00000000000..e6e645a3b3a --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/youtube-dl/default.nix @@ -0,0 +1,27 @@ +{ lib +, fetchFromGitHub +, trivialBuild +, emacs +}: + +trivialBuild { + pname = "youtube-dl"; + version = "0.pre+unstable=2018-10-12"; + + src = fetchFromGitHub { + owner = "skeeto"; + repo = "youtube-dl-emacs"; + rev = "af877b5bc4f01c04fccfa7d47a2c328926f20ef4"; + sha256 = "sha256-Etl95rcoRACDPjcTPQqYK2L+w8OZbOrTrRT0JadMdH4="; + }; + + buildInputs = [ emacs ]; + + meta = with lib; { + description = "Emacs youtube-dl download manager"; + homepage = "https://github.com/skeeto/youtube-dl-emacs"; + license = licenses.unlicense; + maintainers = with maintainers; [ leungbk ]; + inherit (emacs.meta) platforms; + }; +} |