summary refs log tree commit diff
path: root/pkgs/applications/editors/emacs/elisp-packages/manual-packages
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/editors/emacs/elisp-packages/manual-packages')
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda-input/default.nix18
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda2-mode/default.nix27
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/bqn-mode/default.nix22
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/cask/default.nix76
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/cedille/default.nix33
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/color-theme-solarized/default.nix38
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/control-lock/default.nix23
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/ebuild-mode/default.nix17
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/elisp-ffi/default.nix47
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/emacspeak/default.nix60
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/ement/default.nix43
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/ement/handle-nil-images.patch28
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/ess-R-object-popup/default.nix29
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/evil-markdown/default.nix34
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/font-lock-plus/default.nix22
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghc-mod/default.nix27
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/git-undo/default.nix25
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/haskell-unicode-input-method/default.nix34
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/header-file-mode/default.nix34
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/helm-words/default.nix28
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/hsc3/default.nix28
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/idris2-mode/default.nix32
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/isearch-plus/default.nix25
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/isearch-prop/default.nix25
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/jam-mode/default.nix29
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/llvm-mode/default.nix17
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/matrix-client/default.nix73
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/ott-mode/default.nix19
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/perl-completion/default.nix20
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/pod-mode/default.nix18
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/power-mode/default.nix22
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/prisma-mode/default.nix33
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/prolog/default.nix22
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/rect-mark/default.nix26
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/session-management-for-emacs/default.nix29
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/sunrise-commander/default.nix29
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/sv-kalender/default.nix19
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/default-grammars.json33
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/default.nix59
-rwxr-xr-xpkgs/applications/editors/emacs/elisp-packages/manual-packages/tree-sitter-langs/update-defaults.py75
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/default.nix89
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/src.json10
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/update.py123
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/urweb-mode/default.nix27
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/add-missing-require.patch38
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/default.nix50
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/yes-no/default.nix19
-rw-r--r--pkgs/applications/editors/emacs/elisp-packages/manual-packages/youtube-dl/default.nix27
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;
+  };
+}