diff options
Diffstat (limited to 'pkgs/applications/editors/emacs')
70 files changed, 1460 insertions, 909 deletions
diff --git a/pkgs/applications/editors/emacs/build-support/buffer.nix b/pkgs/applications/editors/emacs/build-support/buffer.nix new file mode 100644 index 0000000000000..48a7996916e8d --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/buffer.nix @@ -0,0 +1,77 @@ +# Functions to build elisp files to locally configure emcas buffers. +# See https://github.com/shlevy/nix-buffer + +{ lib, writeText, inherit-local }: + +rec { + withPackages = pkgs': let + pkgs = builtins.filter (x: x != null) pkgs'; + extras = map (x: x.emacsBufferSetup pkgs) (builtins.filter (builtins.hasAttr "emacsBufferSetup") pkgs); + in writeText "dir-locals.el" '' + (require 'inherit-local "${inherit-local}/share/emacs/site-lisp/elpa/inherit-local-${inherit-local.version}/inherit-local.elc") + + ; Only set up nixpkgs buffer handling when we have some buffers active + (defvar nixpkgs--buffer-count 0) + (when (eq nixpkgs--buffer-count 0) + (make-variable-buffer-local 'nixpkgs--is-nixpkgs-buffer) + ; When generating a new temporary buffer (one whose name starts with a space), do inherit-local inheritance and make it a nixpkgs buffer + (defun nixpkgs--around-generate (orig name &optional ibh) + (if (and nixpkgs--is-nixpkgs-buffer (eq (aref name 0) ?\s)) + (let ((buf (funcall orig name ibh))) + (progn + (inherit-local-inherit-child buf) + (with-current-buffer buf + (setq nixpkgs--buffer-count (1+ nixpkgs--buffer-count)) + (add-hook 'kill-buffer-hook 'nixpkgs--decrement-buffer-count nil t))) + buf) + (funcall orig name ibh))) + (advice-add 'generate-new-buffer :around #'nixpkgs--around-generate) + ; When we have no more nixpkgs buffers, tear down the buffer handling + (defun nixpkgs--decrement-buffer-count () + (setq nixpkgs--buffer-count (1- nixpkgs--buffer-count)) + (when (eq nixpkgs--buffer-count 0) + (advice-remove 'generate-new-buffer #'nixpkgs--around-generate) + (fmakunbound 'nixpkgs--around-generate) + (fmakunbound 'nixpkgs--decrement-buffer-count)))) + (setq nixpkgs--buffer-count (1+ nixpkgs--buffer-count)) + (add-hook 'kill-buffer-hook 'nixpkgs--decrement-buffer-count nil t) + + ; Add packages to PATH and exec-path + (make-local-variable 'process-environment) + (put 'process-environment 'permanent-local t) + (inherit-local 'process-environment) + ; setenv modifies in place, so copy the environment first + (setq process-environment (copy-tree process-environment)) + (setenv "PATH" (concat "${lib.makeSearchPath "bin" pkgs}:" (getenv "PATH"))) + (inherit-local-permanent exec-path (append '(${builtins.concatStringsSep " " (map (p: "\"${p}/bin\"") pkgs)}) exec-path)) + + (inherit-local-permanent eshell-path-env (concat "${lib.makeSearchPath "bin" pkgs}:" (if (boundp 'eshell-path-env) eshell-path-env (getenv "PATH")))) + + (setq nixpkgs--is-nixpkgs-buffer t) + (inherit-local 'nixpkgs--is-nixpkgs-buffer) + + ${lib.concatStringsSep "\n" extras} + ''; + # nix-buffer function for a project with a bunch of haskell packages + # in one directory + haskellMonoRepo = { project-root # The monorepo root + , haskellPackages # The composed haskell packages set that contains all of the packages + }: { root }: + let # The haskell paths. + haskell-paths = lib.filesystem.haskellPathsInDir project-root; + # Find the haskell package that the 'root' is in, if any. + haskell-path-parent = + let filtered = builtins.filter (name: + lib.hasPrefix (toString (project-root + "/${name}")) (toString root) + ) (builtins.attrNames haskell-paths); + in + if filtered == [] then null else builtins.head filtered; + # We're in the directory of a haskell package + is-haskell-package = haskell-path-parent != null; + haskell-package = haskellPackages.${haskell-path-parent}; + # GHC environment with all needed deps for the haskell package + haskell-package-env = + builtins.head haskell-package.env.nativeBuildInputs; + in + lib.optionalAttrs is-haskell-package (withPackages [ haskell-package-env ]); +} diff --git a/pkgs/applications/editors/emacs/build-support/elpa.nix b/pkgs/applications/editors/emacs/build-support/elpa.nix new file mode 100644 index 0000000000000..6dd0c7f167c90 --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/elpa.nix @@ -0,0 +1,37 @@ +# builder for Emacs packages built for packages.el + +{ lib, stdenv, emacs, texinfo, writeText, gcc }: + +let + handledArgs = [ "meta" ]; + genericBuild = import ./generic.nix { inherit lib stdenv emacs texinfo writeText gcc; }; + +in + +{ pname +, version +, src +, meta ? {} +, ... +}@args: + +genericBuild ({ + + dontUnpack = true; + + installPhase = '' + runHook preInstall + + emacs --batch -Q -l ${./elpa2nix.el} \ + -f elpa2nix-install-package \ + "$src" "$out/share/emacs/site-lisp/elpa" + + runHook postInstall + ''; + + meta = { + homepage = args.src.meta.homepage or "https://elpa.gnu.org/packages/${pname}.html"; + } // meta; +} + +// removeAttrs args handledArgs) diff --git a/pkgs/applications/editors/emacs/build-support/elpa2nix.el b/pkgs/applications/editors/emacs/build-support/elpa2nix.el new file mode 100644 index 0000000000000..64587c0fad1a7 --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/elpa2nix.el @@ -0,0 +1,33 @@ +(require 'package) +(package-initialize) + +(defun elpa2nix-install-package () + (if (not noninteractive) + (error "`elpa2nix-install-package' is to be used only with -batch")) + (pcase command-line-args-left + (`(,archive ,elpa) + (progn (setq package-user-dir elpa) + (elpa2nix-install-file archive))))) + +(defun elpa2nix-install-from-buffer () + "Install a package from the current buffer." + (let ((pkg-desc (if (derived-mode-p 'tar-mode) + (package-tar-file-info) + (package-buffer-info)))) + ;; Install the package itself. + (package-unpack pkg-desc) + pkg-desc)) + +(defun elpa2nix-install-file (file) + "Install a package from a file. +The file can either be a tar file or an Emacs Lisp file." + (let ((is-tar (string-match "\\.tar\\'" file))) + (with-temp-buffer + (if is-tar + (insert-file-contents-literally file) + (insert-file-contents file)) + (when is-tar (tar-mode)) + (elpa2nix-install-from-buffer)))) + +;; Allow installing package tarfiles larger than 10MB +(setq large-file-warning-threshold nil) diff --git a/pkgs/applications/editors/emacs/build-support/emacs-funcs.sh b/pkgs/applications/editors/emacs/build-support/emacs-funcs.sh new file mode 100644 index 0000000000000..e1e6a3b622087 --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/emacs-funcs.sh @@ -0,0 +1,34 @@ +addToEmacsLoadPath() { + local lispDir="$1" + if [[ -d $lispDir && ${EMACSLOADPATH-} != *"$lispDir":* ]] ; then + # It turns out, that the trailing : is actually required + # see https://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Search.html + export EMACSLOADPATH="$lispDir:${EMACSLOADPATH-}" + fi +} + +addToEmacsNativeLoadPath() { + local nativeDir="$1" + if [[ -d $nativeDir && ${EMACSNATIVELOADPATH-} != *"$nativeDir":* ]]; then + export EMACSNATIVELOADPATH="$nativeDir:${EMACSNATIVELOADPATH-}" + fi +} + +addEmacsVars () { + addToEmacsLoadPath "$1/share/emacs/site-lisp" + + if [ -n "${addEmacsNativeLoadPath:-}" ]; then + addToEmacsNativeLoadPath "$1/share/emacs/native-lisp" + fi + + # Add sub paths to the Emacs load path if it is a directory + # containing .el files. This is necessary to build some packages, + # e.g., using trivialBuild. + for lispDir in \ + "$1/share/emacs/site-lisp/"* \ + "$1/share/emacs/site-lisp/elpa/"*; do + if [[ -d $lispDir && "$(echo "$lispDir"/*.el)" ]] ; then + addToEmacsLoadPath "$lispDir" + fi + done +} diff --git a/pkgs/applications/editors/emacs/build-support/generic.nix b/pkgs/applications/editors/emacs/build-support/generic.nix new file mode 100644 index 0000000000000..7ad77bf2781b6 --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/generic.nix @@ -0,0 +1,94 @@ +# generic builder for Emacs packages + +{ lib, stdenv, emacs, texinfo, writeText, gcc, ... }: + +let + inherit (lib) optionalAttrs getLib; + handledArgs = [ "buildInputs" "packageRequires" "propagatedUserEnvPkgs" "meta" ] + ++ lib.optionals (emacs.withNativeCompilation or false) [ "nativeBuildInputs" "postInstall" ]; + + setupHook = writeText "setup-hook.sh" '' + source ${./emacs-funcs.sh} + + if [[ ! -v emacsHookDone ]]; then + emacsHookDone=1 + + # If this is for a wrapper derivation, emacs and the dependencies are all + # run-time dependencies. If this is for precompiling packages into bytecode, + # emacs is a compile-time dependency of the package. + addEnvHooks "$hostOffset" addEmacsVars + addEnvHooks "$targetOffset" addEmacsVars + fi + ''; + +in + +{ pname +, version +, buildInputs ? [] +, nativeBuildInputs ? [] +, packageRequires ? [] +, propagatedUserEnvPkgs ? [] +, postInstall ? "" +, meta ? {} +, ... +}@args: + +stdenv.mkDerivation (finalAttrs: ({ + name = "emacs-${pname}-${finalAttrs.version}"; + + unpackCmd = '' + case "$curSrc" in + *.el) + # keep original source filename without the hash + local filename=$(basename "$curSrc") + filename="''${filename:33}" + cp $curSrc $filename + chmod +w $filename + sourceRoot="." + ;; + *) + _defaultUnpack "$curSrc" + ;; + esac + ''; + + buildInputs = [emacs texinfo] ++ packageRequires ++ buildInputs; + propagatedBuildInputs = packageRequires; + propagatedUserEnvPkgs = packageRequires ++ propagatedUserEnvPkgs; + + inherit setupHook; + + doCheck = false; + + meta = { + broken = false; + platforms = emacs.meta.platforms; + } // optionalAttrs ((args.src.meta.homepage or "") != "") { + homepage = args.src.meta.homepage; + } // meta; +} + +// optionalAttrs (emacs.withNativeCompilation or false) { + + LIBRARY_PATH = "${getLib stdenv.cc.libc}/lib"; + + nativeBuildInputs = [ gcc ] ++ nativeBuildInputs; + + addEmacsNativeLoadPath = true; + + postInstall = '' + # Besides adding the output directory to the native load path, make sure + # the current package's elisp files are in the load path, otherwise + # (require 'file-b) from file-a.el in the same package will fail. + mkdir -p $out/share/emacs/native-lisp + source ${./emacs-funcs.sh} + addEmacsVars "$out" + + find $out/share/emacs -type f -name '*.el' -print0 \ + | xargs -0 -I {} -n 1 -P $NIX_BUILD_CORES sh -c \ + "emacs --batch --eval '(setq large-file-warning-threshold nil)' -f batch-native-compile {} || true" + '' + postInstall; +} + +// removeAttrs args handledArgs)) diff --git a/pkgs/applications/editors/emacs/build-support/melpa.nix b/pkgs/applications/editors/emacs/build-support/melpa.nix new file mode 100644 index 0000000000000..6249f4e7f1866 --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/melpa.nix @@ -0,0 +1,146 @@ +# builder for Emacs packages built for packages.el +# using MELPA package-build.el + +{ lib, stdenv, fetchFromGitHub, emacs, texinfo, writeText, gcc }: + +let + handledArgs = [ "meta" "preUnpack" "postUnpack" ]; + genericBuild = import ./generic.nix { inherit lib stdenv emacs texinfo writeText gcc; }; + + packageBuild = stdenv.mkDerivation { + name = "package-build"; + src = fetchFromGitHub { + owner = "melpa"; + repo = "package-build"; + rev = "c48aa078c01b4f07b804270c4583a0a58ffea1c0"; + sha256 = "sha256-MzPj375upIiYXdQR+wWXv3A1zMqbSrZlH0taLuxx/1M="; + }; + + patches = [ ./package-build-dont-use-mtime.patch ]; + + dontConfigure = true; + dontBuild = true; + + installPhase = " + mkdir -p $out + cp -r * $out + "; + }; + +in + +{ /* + pname: Nix package name without special symbols and without version or + "emacs-" prefix. + */ + pname + /* + ename: Original Emacs package name, possibly containing special symbols. + Default: pname + */ +, ename ? pname + /* + version: Either a stable version such as "1.2" or an unstable version. + An unstable version can use either Nix format (preferred) such as + "1.2-unstable-2024-06-01" or MELPA format such as "20240601.1230". + */ +, version + /* + commit: Optional package history commit. + Default: src.rev or "unknown" + This will be written into the generated package but it is not needed during + the build process. + */ +, commit ? (args.src.rev or "unknown") + /* + files: Optional recipe property specifying the files used to build the package. + If null, do not set it in recipe, keeping the default upstream behaviour. + Default: null + */ +, files ? null + /* + recipe: Optional MELPA recipe. + Default: a minimally functional recipe + */ +, recipe ? (writeText "${pname}-recipe" '' + (${ename} :fetcher git :url "" + ${lib.optionalString (files != null) ":files ${files}"}) + '') +, preUnpack ? "" +, postUnpack ? "" +, meta ? {} +, ... +}@args: + +genericBuild ({ + + elpa2nix = ./elpa2nix.el; + melpa2nix = ./melpa2nix.el; + + inherit packageBuild commit ename recipe; + + melpaVersion = + let + parsed = lib.flip builtins.match version + # match <version>-unstable-YYYY-MM-DD format + "^.*-unstable-([[:digit:]]{4})-([[:digit:]]{2})-([[:digit:]]{2})$"; + unstableVersionInNixFormat = parsed != null; # heuristics + date = builtins.concatStringsSep "" parsed; + time = "0"; # unstable version in nix format lacks this info + in + if unstableVersionInNixFormat + then date + "." + time + else version; + + preUnpack = '' + mkdir -p "$NIX_BUILD_TOP/recipes" + if [ -n "$recipe" ]; then + cp "$recipe" "$NIX_BUILD_TOP/recipes/$ename" + fi + + ln -s "$packageBuild" "$NIX_BUILD_TOP/package-build" + + mkdir -p "$NIX_BUILD_TOP/packages" + '' + preUnpack; + + postUnpack = '' + mkdir -p "$NIX_BUILD_TOP/working" + ln -s "$NIX_BUILD_TOP/$sourceRoot" "$NIX_BUILD_TOP/working/$ename" + '' + postUnpack; + + buildPhase = '' + runHook preBuild + + cd "$NIX_BUILD_TOP" + + emacs --batch -Q \ + -L "$NIX_BUILD_TOP/package-build" \ + -l "$melpa2nix" \ + -f melpa2nix-build-package \ + $ename $melpaVersion $commit + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + archive="$NIX_BUILD_TOP/packages/$ename-$melpaVersion.el" + if [ ! -f "$archive" ]; then + archive="$NIX_BUILD_TOP/packages/$ename-$melpaVersion.tar" + fi + + emacs --batch -Q \ + -l "$elpa2nix" \ + -f elpa2nix-install-package \ + "$archive" "$out/share/emacs/site-lisp/elpa" + + runHook postInstall + ''; + + meta = { + homepage = args.src.meta.homepage or "https://melpa.org/#/${pname}"; + } // meta; +} + +// removeAttrs args handledArgs) diff --git a/pkgs/applications/editors/emacs/build-support/melpa2nix.el b/pkgs/applications/editors/emacs/build-support/melpa2nix.el new file mode 100644 index 0000000000000..3de77dbf5e5c6 --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/melpa2nix.el @@ -0,0 +1,32 @@ +(require 'package) +(package-initialize) + +(require 'package-recipe) +(require 'package-build) + +(setq package-build-working-dir (expand-file-name "working/")) +(setq package-build-archive-dir (expand-file-name "packages/")) +(setq package-build-recipes-dir (expand-file-name "recipes/")) + +;; Allow installing package tarfiles larger than 10MB +(setq large-file-warning-threshold nil) + +(defun melpa2nix-build-package-1 (rcp) + (let* ((default-directory (package-recipe--working-tree rcp))) + (unwind-protect + (let ((files (package-build-expand-files-spec rcp t))) + (unless files + (error "Unable to find files matching recipe patterns")) + (if (> (length files) 1) + (package-build--build-multi-file-package rcp files) + (package-build--build-single-file-package rcp files)))))) + +(defun melpa2nix-build-package () + (unless noninteractive + (error "`melpa2nix-build-package' is to be used only with -batch")) + (pcase command-line-args-left + (`(,package ,version ,commit) + (let ((recipe (package-recipe-lookup package))) + (setf (oref recipe commit) commit) + (setf (oref recipe version) version) + (melpa2nix-build-package-1 recipe))))) diff --git a/pkgs/applications/editors/emacs/build-support/mk-wrapper-subdirs.el b/pkgs/applications/editors/emacs/build-support/mk-wrapper-subdirs.el new file mode 100644 index 0000000000000..7d30400a5c65f --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/mk-wrapper-subdirs.el @@ -0,0 +1,6 @@ +(defmacro mk-subdirs-expr (path) + `(setq load-path + (delete-dups (append '(,path) + ',(let ((default-directory path)) + (normal-top-level-add-subdirs-to-load-path)) + load-path)))) diff --git a/pkgs/applications/editors/emacs/build-support/package-build-dont-use-mtime.patch b/pkgs/applications/editors/emacs/build-support/package-build-dont-use-mtime.patch new file mode 100644 index 0000000000000..1ace7771ea3ac --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/package-build-dont-use-mtime.patch @@ -0,0 +1,21 @@ +diff --git a/package-build.el b/package-build.el +index 29cdb61..c19be1b 100644 +--- a/package-build.el ++++ b/package-build.el +@@ -923,7 +923,6 @@ DIRECTORY is a temporary directory that contains the directory + that is put in the tarball." + (let* ((name (oref rcp name)) + (version (oref rcp version)) +- (time (oref rcp time)) + (tar (expand-file-name (concat name "-" version ".tar") + package-build-archive-dir)) + (dir (concat name "-" version))) +@@ -939,7 +938,7 @@ that is put in the tarball." + ;; prevent a reproducible tarball as described at + ;; https://reproducible-builds.org/docs/archives. + "--sort=name" +- (format "--mtime=@%d" time) ++ "--mtime=@0" + "--owner=0" "--group=0" "--numeric-owner" + "--pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime")) + (when (and package-build-verbose noninteractive) diff --git a/pkgs/applications/editors/emacs/build-support/trivial.nix b/pkgs/applications/editors/emacs/build-support/trivial.nix new file mode 100644 index 0000000000000..11c28c0133e40 --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/trivial.nix @@ -0,0 +1,28 @@ +# trivial builder for Emacs packages + +{ callPackage, lib, ... }@envargs: + +args: + +callPackage ./generic.nix envargs ({ + buildPhase = '' + runHook preBuild + + emacs -L . --batch -f batch-byte-compile *.el + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + LISPDIR=$out/share/emacs/site-lisp + install -d $LISPDIR + install *.el *.elc $LISPDIR + emacs --batch -l package --eval "(package-generate-autoloads \"${args.pname}\" \"$LISPDIR\")" + + runHook postInstall + ''; +} + +// args) diff --git a/pkgs/applications/editors/emacs/build-support/wrapper.nix b/pkgs/applications/editors/emacs/build-support/wrapper.nix new file mode 100644 index 0000000000000..59a694286d09e --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/wrapper.nix @@ -0,0 +1,236 @@ +/* + +# Usage + +`emacs.pkgs.withPackages` takes a single argument: a function from a package +set to a list of packages (the packages that will be available in +Emacs). For example, +``` +emacs.pkgs.withPackages (epkgs: [ epkgs.evil epkgs.magit ]) +``` +All the packages in the list should come from the provided package +set. It is possible to add any package to the list, but the provided +set is guaranteed to have consistent dependencies and be built with +the correct version of Emacs. + +# Overriding + +`emacs.pkgs.withPackages` inherits the package set which contains it, so the +correct way to override the provided package set is to override the +set which contains `emacs.pkgs.withPackages`. For example, to override +`emacs.pkgs.emacs.pkgs.withPackages`, +``` +let customEmacsPackages = + emacs.pkgs.overrideScope (self: super: { + # use a custom version of emacs + emacs = ...; + # use the unstable MELPA version of magit + magit = self.melpaPackages.magit; + }); +in customEmacsPackages.withPackages (epkgs: [ epkgs.evil epkgs.magit ]) +``` + +*/ + +{ lib, lndir, makeBinaryWrapper, runCommand, gcc }: +self: +let + inherit (self) emacs; + withNativeCompilation = emacs.withNativeCompilation or false; + withTreeSitter = emacs.withTreeSitter or false; +in +packagesFun: # packages explicitly requested by the user +let + explicitRequires = + if lib.isFunction packagesFun + then packagesFun self + else packagesFun; +in +runCommand + (lib.appendToName "with-packages" emacs).name + { + inherit emacs explicitRequires; + nativeBuildInputs = [ emacs lndir makeBinaryWrapper ]; + + preferLocalBuild = true; + allowSubstitutes = false; + + # Store all paths we want to add to emacs here, so that we only need to add + # one path to the load lists + deps = runCommand "emacs-packages-deps" + ({ + inherit explicitRequires lndir emacs; + nativeBuildInputs = lib.optional withNativeCompilation gcc; + } // lib.optionalAttrs withNativeCompilation { + inherit (emacs) LIBRARY_PATH; + }) + '' + findInputsOld() { + local pkg="$1"; shift + local var="$1"; shift + local propagatedBuildInputsFiles=("$@") + + # TODO(@Ericson2314): Restore using associative array once Darwin + # nix-shell doesn't use impure bash. This should replace the O(n) + # case with an O(1) hash map lookup, assuming bash is implemented + # well :D. + local varSlice="$var[*]" + # ''${..-} to hack around old bash empty array problem + case "''${!varSlice-}" in + *" $pkg "*) return 0 ;; + esac + unset -v varSlice + + eval "$var"'+=("$pkg")' + + if ! [ -e "$pkg" ]; then + echo "build input $pkg does not exist" >&2 + exit 1 + fi + + local file + for file in "''${propagatedBuildInputsFiles[@]}"; do + file="$pkg/nix-support/$file" + [[ -f "$file" ]] || continue + + local pkgNext + for pkgNext in $(< "$file"); do + findInputsOld "$pkgNext" "$var" "''${propagatedBuildInputsFiles[@]}" + done + done + } + mkdir -p $out/bin + mkdir -p $out/share/emacs/site-lisp + ${lib.optionalString withNativeCompilation '' + mkdir -p $out/share/emacs/native-lisp + ''} + ${lib.optionalString withTreeSitter '' + mkdir -p $out/lib + ''} + + local requires + for pkg in $explicitRequires; do + findInputsOld $pkg requires propagated-user-env-packages + done + # requires now holds all requested packages and their transitive dependencies + + linkPath() { + local pkg=$1 + local origin_path=$2 + local dest_path=$3 + + # Add the path to the search path list, but only if it exists + if [[ -d "$pkg/$origin_path" ]]; then + $lndir/bin/lndir -silent "$pkg/$origin_path" "$out/$dest_path" + fi + } + + linkEmacsPackage() { + linkPath "$1" "bin" "bin" + linkPath "$1" "share/emacs/site-lisp" "share/emacs/site-lisp" + ${lib.optionalString withNativeCompilation '' + linkPath "$1" "share/emacs/native-lisp" "share/emacs/native-lisp" + ''} + ${lib.optionalString withTreeSitter '' + linkPath "$1" "lib" "lib" + ''} + } + + # Iterate over the array of inputs (avoiding nix's own interpolation) + for pkg in "''${requires[@]}"; do + linkEmacsPackage $pkg + done + + siteStart="$out/share/emacs/site-lisp/site-start.el" + siteStartByteCompiled="$siteStart"c + subdirs="$out/share/emacs/site-lisp/subdirs.el" + subdirsByteCompiled="$subdirs"c + + # A dependency may have brought the original siteStart or subdirs, delete + # it and create our own + # Begin the new site-start.el by loading the original, which sets some + # NixOS-specific paths. Paths are searched in the reverse of the order + # they are specified in, so user and system profile paths are searched last. + # + # NOTE: Avoid displaying messages early at startup by binding + # inhibit-message to t. This would prevent the Emacs GUI from showing up + # prematurely. The messages would still be logged to the *Messages* + # buffer. + rm -f $siteStart $siteStartByteCompiled $subdirs $subdirsByteCompiled + cat >"$siteStart" <<EOF + (let ((inhibit-message t)) + (load "$emacs/share/emacs/site-lisp/site-start")) + ;; "$out/share/emacs/site-lisp" is added to load-path in wrapper.sh + ;; "$out/share/emacs/native-lisp" is added to native-comp-eln-load-path in wrapper.sh + (add-to-list 'exec-path "$out/bin") + ${lib.optionalString withTreeSitter '' + (add-to-list 'treesit-extra-load-path "$out/lib/") + ''} + EOF + + # Generate a subdirs.el that statically adds all subdirectories to load-path. + $emacs/bin/emacs \ + --batch \ + --load ${./mk-wrapper-subdirs.el} \ + --eval "(prin1 (macroexpand-1 '(mk-subdirs-expr \"$out/share/emacs/site-lisp\")))" \ + > "$subdirs" + + # Byte-compiling improves start-up time only slightly, but costs nothing. + $emacs/bin/emacs --batch -f batch-byte-compile "$siteStart" "$subdirs" + + ${lib.optionalString withNativeCompilation '' + $emacs/bin/emacs --batch \ + --eval "(add-to-list 'native-comp-eln-load-path \"$out/share/emacs/native-lisp/\")" \ + -f batch-native-compile "$siteStart" "$subdirs" + ''} + ''; + + inherit (emacs) meta; + } + '' + mkdir -p "$out/bin" + + # Wrap emacs and friends so they find our site-start.el before the original. + for prog in $emacs/bin/*; do # */ + local progname=$(basename "$prog") + rm -f "$out/bin/$progname" + + substitute ${./wrapper.sh} $out/bin/$progname \ + --subst-var-by bash ${emacs.stdenv.shell} \ + --subst-var-by wrapperSiteLisp "$deps/share/emacs/site-lisp" \ + --subst-var-by wrapperSiteLispNative "$deps/share/emacs/native-lisp" \ + --subst-var prog + chmod +x $out/bin/$progname + # Create a “NOP” binary wrapper for the pure sake of it becoming a + # non-shebang, actual binary. See the makeBinaryWrapper docs for rationale + # (summary: it allows you to use emacs as a shebang itself on Darwin, + # e.g. #!$ {emacs}/bin/emacs --script) + wrapProgramBinary $out/bin/$progname + done + + # Wrap MacOS app + # this has to pick up resources and metadata + # to recognize it as an "app" + if [ -d "$emacs/Applications/Emacs.app" ]; then + mkdir -p $out/Applications/Emacs.app/Contents/MacOS + cp -r $emacs/Applications/Emacs.app/Contents/Info.plist \ + $emacs/Applications/Emacs.app/Contents/PkgInfo \ + $emacs/Applications/Emacs.app/Contents/Resources \ + $out/Applications/Emacs.app/Contents + + + substitute ${./wrapper.sh} $out/Applications/Emacs.app/Contents/MacOS/Emacs \ + --subst-var-by bash ${emacs.stdenv.shell} \ + --subst-var-by wrapperSiteLisp "$deps/share/emacs/site-lisp" \ + --subst-var-by wrapperSiteLispNative "$deps/share/emacs/native-lisp" \ + --subst-var-by prog "$emacs/Applications/Emacs.app/Contents/MacOS/Emacs" + chmod +x $out/Applications/Emacs.app/Contents/MacOS/Emacs + wrapProgramBinary $out/Applications/Emacs.app/Contents/MacOS/Emacs + fi + + mkdir -p $out/share + # Link icons and desktop files into place + for dir in applications icons info man; do + ln -s $emacs/share/$dir $out/share/$dir + done + '' diff --git a/pkgs/applications/editors/emacs/build-support/wrapper.sh b/pkgs/applications/editors/emacs/build-support/wrapper.sh new file mode 100644 index 0000000000000..44762bd4582b0 --- /dev/null +++ b/pkgs/applications/editors/emacs/build-support/wrapper.sh @@ -0,0 +1,53 @@ +#!@bash@ + +IFS=: + +newLoadPath=() +newNativeLoadPath=() +addedNewLoadPath= +addedNewNativeLoadPath= + +if [[ -n $EMACSLOADPATH ]] +then + while read -rd: entry + do + if [[ -z $entry && -z $addedNewLoadPath ]] + then + newLoadPath+=(@wrapperSiteLisp@) + addedNewLoadPath=1 + fi + newLoadPath+=("$entry") + done <<< "$EMACSLOADPATH:" +else + newLoadPath+=(@wrapperSiteLisp@) + newLoadPath+=("") +fi + +# NOTE: Even though we treat EMACSNATIVELOADPATH like EMACSLOADPATH in +# this wrapper, empty elements in EMACSNATIVELOADPATH have no special +# meaning for Emacs. Only non-empty elements in EMACSNATIVELOADPATH +# will be prepended to native-comp-eln-load-path. +# https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/startup.el?id=3685387e609753293c4518be75e77c659c3b2d8d#n599 +if [[ -n $EMACSNATIVELOADPATH ]] +then + while read -rd: entry + do + if [[ -z $entry && -z $addedNewNativeLoadPath ]] + then + newNativeLoadPath+=(@wrapperSiteLispNative@) + addedNewNativeLoadPath=1 + fi + newNativeLoadPath+=("$entry") + done <<< "$EMACSNATIVELOADPATH:" +else + newNativeLoadPath+=(@wrapperSiteLispNative@) + newNativeLoadPath+=("") +fi + +export EMACSLOADPATH="${newLoadPath[*]}" +export emacsWithPackages_siteLisp=@wrapperSiteLisp@ + +export EMACSNATIVELOADPATH="${newNativeLoadPath[*]}" +export emacsWithPackages_siteLispNative=@wrapperSiteLispNative@ + +exec @prog@ "$@" diff --git a/pkgs/applications/editors/emacs/elisp-packages/elpa-devel-packages.nix b/pkgs/applications/editors/emacs/elisp-packages/elpa-devel-packages.nix index 192320fab674d..085c0410bca4c 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/elpa-devel-packages.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/elpa-devel-packages.nix @@ -32,7 +32,7 @@ self: let }); }; - elpaBuild = import ../../../../build-support/emacs/elpa.nix { + elpaBuild = import ../build-support/elpa.nix { inherit lib stdenv texinfo writeText gcc; inherit (self) emacs; }; @@ -121,4 +121,4 @@ self: let in elpaDevelPackages // { inherit elpaBuild; }); -in (generateElpa { }) // { __attrsFailEvaluation = true; } +in generateElpa { } diff --git a/pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix b/pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix index 3e8ab4625fec2..fac31ad711db8 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/elpa-packages.nix @@ -32,7 +32,7 @@ self: let }); }; - elpaBuild = import ../../../../build-support/emacs/elpa.nix { + elpaBuild = import ../build-support/elpa.nix { inherit lib stdenv texinfo writeText gcc; inherit (self) emacs; }; @@ -210,4 +210,5 @@ self: let in elpaPackages // { inherit elpaBuild; }); -in (generateElpa { }) // { __attrsFailEvaluation = true; } +in +generateElpa { } diff --git a/pkgs/applications/editors/emacs/elisp-packages/libgenerated.nix b/pkgs/applications/editors/emacs/elisp-packages/libgenerated.nix index 36576f7c12398..391065ccfb20d 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/libgenerated.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/libgenerated.nix @@ -79,7 +79,8 @@ in { lib.nameValuePair ename ( self.callPackage ({ melpaBuild, fetchurl, ... }@pkgargs: melpaBuild { - inherit pname ename commit; + inherit pname ename; + inherit (sourceArgs) commit; version = lib.optionalString (version != null) (lib.concatStringsSep "." (map toString # Hack: Melpa archives contains versions with parse errors such as [ 4 4 -4 413 ] which should be 4.4-413 diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix index 73e7f9a2c6722..4b4abfc6f3002 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages.nix @@ -11,8 +11,6 @@ in acm-terminal = callPackage ./manual-packages/acm-terminal { }; - agda-input = callPackage ./manual-packages/agda-input { }; - agda2-mode = callPackage ./manual-packages/agda2-mode { }; beancount = callPackage ./manual-packages/beancount { }; @@ -37,20 +35,14 @@ in enlight = callPackage ./manual-packages/enlight { }; - ess-R-object-popup = callPackage ./manual-packages/ess-R-object-popup { }; - evil-markdown = callPackage ./manual-packages/evil-markdown { }; font-lock-plus = callPackage ./manual-packages/font-lock-plus { }; - ghc-mod = callPackage ./manual-packages/ghc-mod { }; - git-undo = callPackage ./manual-packages/git-undo { }; grid = callPackage ./manual-packages/grid { }; - haskell-unicode-input-method = callPackage ./manual-packages/haskell-unicode-input-method { }; - helm-words = callPackage ./manual-packages/helm-words { }; idris2-mode = callPackage ./manual-packages/idris2-mode { }; @@ -66,7 +58,7 @@ in llvm-mode = callPackage ./manual-packages/llvm-mode { }; lsp-bridge = callPackage ./manual-packages/lsp-bridge { - inherit (pkgs) python3 git go gopls pyright; + inherit (pkgs) basedpyright git go gopls python3; }; lspce = callPackage ./manual-packages/lspce { }; @@ -81,8 +73,6 @@ in ott-mode = callPackage ./manual-packages/ott-mode { }; - perl-completion = callPackage ./manual-packages/perl-completion { }; - pod-mode = callPackage ./manual-packages/pod-mode { }; prisma-mode = callPackage ./manual-packages/prisma-mode { }; @@ -125,6 +115,12 @@ in emacsSessionManagement = self.session-management-for-emacs; rectMark = self.rect-mark; sunriseCommander = self.sunrise-commander; - - __attrsFailEvaluation = true; +} +### Aliases +// lib.optionalAttrs pkgs.config.allowAliases { + agda-input = throw "emacsPackages.agda-input is contained in emacsPackages.agda2-mode, please use that instead."; # Added 2024-07-17 + ess-R-object-popup = throw "emacsPackages.ess-R-object-popup was deleted, since the upstream repo looks abandoned."; # Added 2024-07-15 + ghc-mod = throw "emacsPackages.ghc-mod was deleted because it is deprecated, use haskell-language-server instead."; # Added 2024-07-17 + haskell-unicode-input-method = throw "emacsPackages.haskell-unicode-input-method is contained in emacsPackages.haskell-mode, please use that instead."; # Added 2024-07-17 + perl-completion = throw "emacsPackages.perl-completion was removed, since it is broken."; # Added 2024-07-19 } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/acm-terminal/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/acm-terminal/default.nix index 970174f20c9f4..07e909b34a681 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/acm-terminal/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/acm-terminal/default.nix @@ -1,55 +1,34 @@ -{ lib -, melpaBuild -, fetchFromGitHub -, acm -, popon -, writeText -, writeScript +{ + lib, + melpaBuild, + fetchFromGitHub, + acm, + popon, + unstableGitUpdater, }: -let - rev = "1851d8fa2a27d3fd8deeeb29cd21c3002b8351ba"; -in melpaBuild { pname = "acm-terminal"; - version = "20231206.1141"; + version = "0-unstable-2023-12-06"; src = fetchFromGitHub { owner = "twlz0ne"; repo = "acm-terminal"; - inherit rev; - sha256 = "sha256-EYhFrOo0j0JSNTdcZCbyM0iLxaymUXi1u6jZy8lTOaY="; + rev = "1851d8fa2a27d3fd8deeeb29cd21c3002b8351ba"; + hash = "sha256-EYhFrOo0j0JSNTdcZCbyM0iLxaymUXi1u6jZy8lTOaY="; }; - commit = rev; - packageRequires = [ acm popon ]; - recipe = writeText "recipe" '' - (acm-terminal :repo "twlz0ne/acm-terminal" :fetcher github) - ''; - - passthru.updateScript = writeScript "update.sh" '' - #!/usr/bin/env nix-shell - #!nix-shell -i bash -p common-updater-scripts coreutils git gnused - set -eu -o pipefail - tmpdir="$(mktemp -d)" - git clone --depth=1 https://github.com/twlz0ne/acm-terminal.git "$tmpdir" - pushd "$tmpdir" - commit=$(git show -s --pretty='format:%H') - # Based on: https://github.com/melpa/melpa/blob/2d8716906a0c9e18d6c979d8450bf1d15dd785eb/package-build/package-build.el#L523-L533 - version=$(TZ=UTC git show -s --pretty='format:%cd' --date='format-local:%Y%m%d.%H%M' | sed 's|\.0*|.|') - popd - update-source-version emacsPackages.acm-terminal $version --rev="$commit" - ''; + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; - meta = with lib; { - description = "Patch for LSP bridge acm on Terminal"; + meta = { homepage = "https://github.com/twlz0ne/acm-terminal"; - license = licenses.gpl3Plus; - maintainers = with maintainers; [ kira-bruneau ]; + description = "Patch for LSP bridge acm on Terminal"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ kira-bruneau ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/acm/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/acm/default.nix index 5879865c901e2..1e411af1a871b 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/acm/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/acm/default.nix @@ -1,8 +1,8 @@ -{ lib -, melpaBuild -, lsp-bridge -, yasnippet -, writeText +{ + lib, + melpaBuild, + lsp-bridge, + yasnippet, }: melpaBuild { @@ -10,23 +10,18 @@ melpaBuild { version = lsp-bridge.version; src = lsp-bridge.src; - commit = lsp-bridge.src.rev; - packageRequires = [ - yasnippet - ]; + packageRequires = [ yasnippet ]; - recipe = writeText "recipe" '' - (acm - :repo "manateelazycat/lsp-bridge" - :fetcher github - :files ("acm/*.el" "acm/icons")) - ''; + files = ''("acm/*.el" "acm/icons")''; - meta = with lib; { + meta = { description = "Asynchronous Completion Menu"; homepage = "https://github.com/manateelazycat/lsp-bridge"; - license = licenses.gpl3Only; - maintainers = with maintainers; [ fxttr kira-bruneau ]; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ + fxttr + kira-bruneau + ]; }; } 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 deleted file mode 100644 index a3c820fac6e73..0000000000000 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/agda-input/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ 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 index 7418a842148a7..5eec518036eab 100644 --- 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 @@ -1,29 +1,15 @@ -{ trivialBuild -, haskellPackages -}: +{ melpaBuild, haskellPackages }: let - Agda = haskellPackages.Agda.bin; + Agda = haskellPackages.Agda; in -trivialBuild { - pname = "agda-mode"; - version = Agda.version; +melpaBuild { + pname = "agda2-mode"; + inherit (Agda) src version; - dontUnpack = true; - - # already byte-compiled by Agda builder - buildPhase = '' - agda=`${Agda}/bin/agda-mode locate` - cp `dirname $agda`/*.el* . - ''; + files = ''("src/data/emacs-mode/*.el")''; meta = { inherit (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/codeium/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/codeium/default.nix index 1a31e8f9a28df..344843eeabc4e 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/codeium/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/codeium/default.nix @@ -1,22 +1,21 @@ -{ fetchFromGitHub, melpaBuild, pkgs, lib, substituteAll, writeText }: +{ + fetchFromGitHub, + melpaBuild, + pkgs, + lib, + substituteAll, +}: melpaBuild { pname = "codeium"; version = "1.6.13"; + src = fetchFromGitHub { owner = "Exafunction"; repo = "codeium.el"; rev = "1.6.13"; hash = "sha256-CjT21GhryO8/iM0Uzm/s/I32WqVo4M3tSlHC06iEDXA="; }; - commit = "02f9382c925633a19dc928e99b868fd5f6947e58"; - buildInputs = [ pkgs.codeium ]; - - recipe = writeText "recipe" '' - (codeium - :repo "Exafunction/codeium.el" - :fetcher github) - ''; patches = [ (substituteAll { 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 index 94486bdbfb4b4..7c047fe32f4ef 100644 --- 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 @@ -1,26 +1,27 @@ -{ lib -, trivialBuild -, fetchFromGitHub -, color-theme +{ + lib, + fetchFromGitHub, + melpaBuild, + unstableGitUpdater, }: -trivialBuild { +melpaBuild { pname = "color-theme-solarized"; - version = "0-unstable-2017-10-24"; + version = "0-unstable-2023-02-09"; src = fetchFromGitHub { owner = "sellout"; repo = "emacs-color-theme-solarized"; - rev = "f3ca8902ea056fb8e46cb09f09c96294e31cd4ee"; - hash = "sha256-oxX0lo6sxotEiR3nPrKPE9H01HKB3ohB/p8eEHFTp5k="; + rev = "b186e5d62d0b83cbf5cf38f7eb7a199dea9a3ee3"; + hash = "sha256-7E8r56dzfD06tsQEnqU5mWSbwz9x9QPbzken2J/fhlg="; }; - packageRequires = [ color-theme ]; + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; - meta = with lib; { + meta = { homepage = "http://ethanschoonover.com/solarized"; description = "Precision colors for machines and people; Emacs implementation"; - license = licenses.mit; - maintainers = with maintainers; [ samuelrivas AndersonTorres ]; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ AndersonTorres ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/consult-gh/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/consult-gh/default.nix index e6e53f96f6590..9914285d70f2a 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/consult-gh/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/consult-gh/default.nix @@ -1,45 +1,35 @@ -{ lib -, melpaBuild -, fetchFromGitHub -, consult -, embark -, forge -, gh -, markdown-mode -, writeText -, unstableGitUpdater +{ + lib, + consult, + embark, + fetchFromGitHub, + forge, + gh, + markdown-mode, + melpaBuild, + unstableGitUpdater, + writeText, }: -let - commit = "1fe876d9552b6ec6af257a4299a34eca99b40539"; -in melpaBuild { pname = "consult-gh"; - version = "20230706.438"; - - inherit commit; + version = "0.12-unstable-2024-04-23"; src = fetchFromGitHub { owner = "armindarvish"; repo = "consult-gh"; - rev = commit; - hash = "sha256-bi+qlNvNMXbS4cXbXt01txwD2NAyAqJGNKeOtdtj7tg="; + rev = "3a07139a1f7e38b959ce177a122c8f47c401d7fa"; + hash = "sha256-BZloG5RuQzC2RwCfvqPPhGcbsCabQWBnRHdU62rwNdo="; }; packageRequires = [ consult embark forge - gh markdown-mode ]; - recipe = writeText "recipe" '' - (consult-gh - :repo "armindarvish/consult-gh" - :fetcher github - :files ("consult-gh-embark.el" "consult-gh-forge.el" "consult-gh.el")) - ''; + propagatedUserEnvPkgs = [ gh ]; passthru.updateScript = unstableGitUpdater { }; 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 index 279c2b74d1d9f..5a352c5c3bc49 100644 --- 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 @@ -1,18 +1,22 @@ -{ lib, trivialBuild, fetchurl }: +{ + lib, + fetchurl, + melpaBuild, +}: -trivialBuild { +melpaBuild { pname = "control-lock"; + version = "1.1.2"; src = fetchurl { url = "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/185fdc34fb1e02b43759ad933d3ee5646b0e78f8/control-lock.el"; hash = "sha256-JCrmS3FSGDHSR+eAR0X/uO0nAgd3TUmFxwEVH5+KV+4="; }; - version = "1.1.2"; - meta = { - description = "Like caps-lock, but for your control key. Give your pinky a rest!"; homepage = "https://www.emacswiki.org/emacs/control-lock.el"; + description = "Like caps-lock, but for your control key"; + license = lib.licenses.free; platforms = lib.platforms.all; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/copilot/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/copilot/default.nix index da7f779852158..406bd0c711004 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/copilot/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/copilot/default.nix @@ -1,33 +1,40 @@ { + lib, dash, editorconfig, + f, fetchFromGitHub, nodejs, s, - trivialBuild, + melpaBuild, }: -trivialBuild { +melpaBuild { pname = "copilot"; - version = "0-unstable-2023-12-26"; + version = "0-unstable-2024-05-01"; + src = fetchFromGitHub { - owner = "zerolfx"; + owner = "copilot-emacs"; repo = "copilot.el"; - rev = "d4fa14cea818e041b4a536c5052cf6d28c7223d7"; - sha256 = "sha256-Tzs0Dawqa+OD0RSsf66ORbH6MdBp7BMXX7z+5UuNwq4="; + rev = "733bff26450255e092c10873580e9abfed8a81b8"; + sha256 = "sha256-Knp36PtgA73gtYO+W1clQfr570bKCxTFsGW3/iH86A0="; }; + + files = ''(:defaults "dist")''; + packageRequires = [ dash editorconfig - nodejs + f s ]; - postInstall = '' - cp -r $src/dist $LISPDIR - ''; + + propagatedUserEnvPkgs = [ nodejs ]; meta = { description = "Unofficial copilot plugin for Emacs"; - homepage = "https://github.com/zerolfx/copilot.el"; + homepage = "https://github.com/copilot-emacs/copilot.el"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ bbigras ]; platforms = [ "x86_64-darwin" "x86_64-linux" 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 index 07e234fca98b7..b6c53e26c5ed0 100644 --- 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 @@ -2,7 +2,6 @@ lib, melpaBuild, fetchzip, - writeText, }: melpaBuild rec { @@ -14,15 +13,6 @@ melpaBuild rec { hash = "sha256-GFEDWT88Boz/DxEcmFgf7u2NOoMjAN05yRiYwoYtvXc="; }; - # not used but needs to be set; why? - commit = "a643f177b58aa8869f2f24814e990320aa4f0f96"; - - recipe = writeText "recipe" '' - (ebuild-mode - :url "https://gitweb.gentoo.org/proj/ebuild-mode.git" - :fetcher git) - ''; - meta = { homepage = "https://gitweb.gentoo.org/proj/ebuild-mode.git/"; description = "Major modes for Gentoo package files"; diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/el-easydraw/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/el-easydraw/default.nix index 148bb9dbc7f98..b69423e583310 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/el-easydraw/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/el-easydraw/default.nix @@ -1,57 +1,32 @@ -{ lib -, melpaBuild -, fetchFromGitHub -, writeText -, writeScript -, gzip +{ + lib, + melpaBuild, + fetchFromGitHub, + gzip, + unstableGitUpdater, }: -let - rev = "99067dba625db3ac54ca4d3a3c811c41de207309"; -in melpaBuild { pname = "edraw"; - version = "20240612.1012"; + version = "1.2.0-unstable-2024-07-24"; src = fetchFromGitHub { owner = "misohena"; repo = "el-easydraw"; - inherit rev; - hash = "sha256-32N8kXGFCvB6IHKwUsBGpdtAAf/p3nlq8mAdZrxLt0c="; + rev = "6f93e744d5f62de2176d3d0f0aa1f9e8d84ccefd"; + hash = "sha256-dXu4hDC4qE7W+KkWb9HIqYwesOKisMiZSTAulDpjyfA="; }; - commit = rev; + propagatedUserEnvPkgs = [ gzip ]; - packageRequires = [ gzip ]; + files = ''(:defaults "msg")''; - recipe = writeText "recipe" '' - (edraw - :repo "misohena/el-easydraw" - :fetcher github - :files - ("*.el" - "msg")) - ''; - - passthru.updateScript = writeScript "update.sh" '' - #!/usr/bin/env nix-shell - #!nix-shell -i bash -p common-updater-scripts coreutils git gnused - set -eu -o pipefail - tmpdir="$(mktemp -d)" - git clone --depth=1 https://github.com/misohena/el-easydraw.git "$tmpdir" - pushd "$tmpdir" - commit=$(git show -s --pretty='format:%H') - # Based on: https://github.com/melpa/melpa/blob/2d8716906a0c9e18d6c979d8450bf1d15dd785eb/package-build/package-build.el#L523-L533 - version=$(TZ=UTC git show -s --pretty='format:%cd' --date='format-local:%Y%m%d.%H%M' | sed 's|\.0*|.|') - popd - update-source-version emacsPackages.el-easydraw $version --rev="$commit" - ''; + passthru.updateScript = unstableGitUpdater { tagPrefix = "v"; }; meta = { homepage = "https://github.com/misohena/el-easydraw"; description = "Embedded drawing tool for Emacs"; license = lib.licenses.gpl3; maintainers = with lib.maintainers; [ brahyerr ]; - platforms = lib.platforms.all; }; } 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 index 74b829701b0b5..3bc5b686e5488 100644 --- 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 @@ -1,24 +1,21 @@ -{ lib -, melpaBuild -, fetchFromGitHub -, pkg-config -, libffi -, writeText +{ + lib, + fetchFromGitHub, + libffi, + melpaBuild, + pkg-config, + unstableGitUpdater, }: -let - rev = "da37c516a0e59bdce63fb2dc006a231dee62a1d9"; -in melpaBuild { +melpaBuild { pname = "elisp-ffi"; - version = "20170518.0"; - - commit = rev; + version = "1.0.0-unstable-2017-05-18"; src = fetchFromGitHub { owner = "skeeto"; repo = "elisp-ffi"; - inherit rev; - sha256 = "sha256-StOezQEnNTjRmjY02ub5FRh59aL6gWfw+qgboz0wF94="; + rev = "da37c516a0e59bdce63fb2dc006a231dee62a1d9"; + hash = "sha256-StOezQEnNTjRmjY02ub5FRh59aL6gWfw+qgboz0wF94="; }; nativeBuildInputs = [ pkg-config ]; @@ -28,20 +25,20 @@ in melpaBuild { preBuild = '' mv ffi.el elisp-ffi.el make - ''; - - recipe = writeText "recipe" '' - (elisp-ffi :repo "skeeto/elisp-ffi" :fetcher github) ''; + passthru.updateScript = unstableGitUpdater { }; + meta = { + homepage = "https://github.com/skeeto/elisp-ffi"; 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; + 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.unlicense; + maintainers = with lib.maintainers; [ AndersonTorres ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/emacs-conflict/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/emacs-conflict/default.nix index b32ee2f8a9f6f..fea6905e6f31f 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/emacs-conflict/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/emacs-conflict/default.nix @@ -1,10 +1,11 @@ -{ lib -, fetchFromGitHub -, trivialBuild -, emacs +{ + lib, + fetchFromGitHub, + melpaBuild, + unstableGitUpdater, }: -trivialBuild { +melpaBuild { pname = "emacs-conflict"; version = "0-unstable-2022-11-21"; @@ -12,14 +13,15 @@ trivialBuild { owner = "ibizaman"; repo = "emacs-conflict"; rev = "9f236b93930f3ceb4cb0258cf935c99599191de3"; - sha256 = "sha256-DIGvnotSQYIgHxGxtyCALHd8ZbrfkmdvjLXlkcqQ6v4="; + hash = "sha256-DIGvnotSQYIgHxGxtyCALHd8ZbrfkmdvjLXlkcqQ6v4="; }; - meta = with lib; { - description = "Resolve conflicts happening when using file synchronization tools"; + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; + + meta = { homepage = "https://github.com/ibizaman/emacs-conflict"; - license = licenses.gpl3; - maintainers = with maintainers; [ ibizaman ]; - inherit (emacs.meta) platforms; + description = "Resolve conflicts happening when using file synchronization tools"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ ibizaman ]; }; } 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 deleted file mode 100644 index 7809dcd735660..0000000000000 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ess-R-object-popup/default.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ 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 index b95b05f986107..57249b72fbb86 100644 --- 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 @@ -1,12 +1,13 @@ -{ lib -, trivialBuild -, fetchFromGitHub -, emacs -, evil -, markdown-mode +{ + lib, + evil, + fetchFromGitHub, + markdown-mode, + melpaBuild, + unstableGitUpdater, }: -trivialBuild rec { +melpaBuild { pname = "evil-markdown"; version = "0-unstable-2021-07-21"; @@ -17,18 +18,17 @@ trivialBuild rec { hash = "sha256-HBBuZ1VWIn6kwK5CtGIvHM1+9eiNiKPH0GUsyvpUVN8="; }; - buildInputs = propagatedUserEnvPkgs; - - propagatedUserEnvPkgs = [ + packageRequires = [ evil markdown-mode ]; - meta = with lib; { + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; + + meta = { homepage = "https://github.com/Somelauw/evil-markdown"; description = "Integrates Emacs evil and markdown"; - license = licenses.gpl3Plus; - maintainers = with maintainers; [ leungbk ]; - inherit (emacs.meta) platforms; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ leungbk ]; }; } 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 index be52cf155e5b3..d7e8390b40b81 100644 --- 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 @@ -1,10 +1,13 @@ -{ lib -, fetchFromGitHub -, trivialBuild +{ + lib, + fetchFromGitHub, + melpaBuild, + unstableGitUpdater, }: -trivialBuild { +melpaBuild { pname = "font-lock-plus"; + ename = "font-lock+"; version = "208-unstable-2018-01-01"; src = fetchFromGitHub { @@ -14,9 +17,12 @@ trivialBuild { hash = "sha256-lFmdVMXIIXZ9ZohAJw5rhxpTv017qIyzmpuKOWDdeJ4="; }; - meta = with lib; { + passthru.updateScript = unstableGitUpdater { }; + + meta = { homepage = "https://github.com/emacsmirror/font-lock-plus"; description = "Enhancements to standard library font-lock.el"; - license = licenses.gpl2Plus; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ AndersonTorres ]; }; } 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 deleted file mode 100644 index e9ce9a35c409b..0000000000000 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ghc-mod/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ lib -, melpaBuild -, haskell-mode -, 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")) - ''; - - meta = { - description = "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 index f0f16c8cf0636..74574c98cb430 100644 --- 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 @@ -1,10 +1,11 @@ -{ lib -, fetchFromGitHub -, emacs -, trivialBuild +{ + lib, + fetchFromGitHub, + melpaBuild, + unstableGitUpdater, }: -trivialBuild { +melpaBuild { pname = "git-undo"; version = "0-unstable-2019-12-21"; @@ -12,14 +13,15 @@ trivialBuild { owner = "jwiegley"; repo = "git-undo-el"; rev = "cf31e38e7889e6ade7d2d2b9f8719fd44f52feb5"; - sha256 = "sha256-cVkK9EF6qQyVV3uVqnBEjF8e9nEx/8ixnM8PvxqCyYE="; + hash = "sha256-cVkK9EF6qQyVV3uVqnBEjF8e9nEx/8ixnM8PvxqCyYE="; }; - meta = with lib; { + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; + + meta = { 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; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ leungbk ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/grid/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/grid/default.nix index 91b69b0fbbda2..0b8b5108043c4 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/grid/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/grid/default.nix @@ -2,11 +2,12 @@ lib, fetchFromGitHub, melpaBuild, + unstableGitUpdater, }: melpaBuild { pname = "grid"; - version = "20240526.1305"; + version = "0-unstable-2024-05-26"; src = fetchFromGitHub { owner = "ichernyshovvv"; @@ -15,6 +16,8 @@ melpaBuild { hash = "sha256-3QDw4W3FbFvb2zpkDHAo9BJKxs3LaehyvUVJPKqS9RE="; }; + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; + meta = { homepage = "https://github.com/ichernyshovvv/grid.el"; description = "Library to put text data into boxes and manipulate them"; 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 deleted file mode 100644 index 1d9fa6a0c084a..0000000000000 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/haskell-unicode-input-method/default.nix +++ /dev/null @@ -1,34 +0,0 @@ -{ 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/helm-words/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/helm-words/default.nix index eb16701f3856f..8e99b427cb44c 100644 --- 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 @@ -1,28 +1,30 @@ -{ lib -, trivialBuild -, fetchFromGitHub -, dictionary -, emacs -, helm +{ + lib, + dictionary, + fetchFromGitHub, + helm, + melpaBuild, }: -trivialBuild rec { +melpaBuild { pname = "helm-words"; version = "0-unstable-2019-03-12"; src = fetchFromGitHub { owner = "emacsmirror"; - repo = pname; + repo = "helm-words"; rev = "e6387ece1940a06695b9d910de3d90252efb8d29"; hash = "sha256-rh8YKDLZZCUE6JnnRnFyDDyUjK+35+M2dkawR/+qwNM="; }; - packageRequires = [ helm dictionary ]; + packageRequires = [ + dictionary + helm + ]; - meta = with lib; { + meta = { 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; + license = lib.licenses.gpl3Plus; }; } 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 index 86b9e274a9673..efa79b9ebb05e 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/hsc3/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/hsc3/default.nix @@ -1,21 +1,23 @@ -{ lib, trivialBuild, fetchurl, haskell-mode }: +{ + melpaBuild, + haskell-mode, + haskellPackages, +}: -trivialBuild rec { +let + inherit (haskellPackages) hsc3; +in +melpaBuild { pname = "hsc3-mode"; - version = "0.15"; + ename = "hsc3"; + inherit (hsc3) src version; - src = fetchurl { - url = "mirror://hackage/hsc3-${version}/hsc3-${version}.tar.gz"; - sha256 = "2f3b15655419cf8ebe25ab1c6ec22993b2589b4ffca7c3a75ce478ca78a0bde6"; - }; + files = ''("emacs/*.el")''; packageRequires = [ haskell-mode ]; - sourceRoot = "hsc3-${version}/emacs"; - meta = { - homepage = "http://rd.slavepianos.org/?t=hsc3"; - description = "hsc3 mode package for Emacs"; - platforms = lib.platforms.unix; + inherit (hsc3.meta) homepage license; + description = "Emacs mode for hsc3"; }; } 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 index 59dd35bc34421..5148daad1903b 100644 --- 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 @@ -1,32 +1,29 @@ -{ lib -, trivialBuild -, fetchFromGitHub -, emacs -, prop-menu +{ + lib, + fetchFromGitHub, + melpaBuild, + prop-menu, }: -trivialBuild rec { +melpaBuild rec { pname = "idris2-mode"; version = "1.1"; src = fetchFromGitHub { owner = "idris-community"; - repo = pname; + repo = "idris2-mode"; rev = version; hash = "sha256-rTeVjkAw44Q35vjaERs4uoZRJ6XR3FKplEUCVPHhY7Q="; }; - buildInputs = propagatedUserEnvPkgs; - - propagatedUserEnvPkgs = [ + packageRequires = [ prop-menu ]; - meta = with lib; { + meta = { 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; + description = "Emacs mode for editing Idris 2 code"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ wuyoli ]; }; } 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 index d4f60c609381d..c2764968bcb56 100644 --- 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 @@ -1,11 +1,13 @@ -{ lib -, trivialBuild -, fetchFromGitHub -, emacs +{ + lib, + melpaBuild, + fetchFromGitHub, + unstableGitUpdater, }: -trivialBuild { +melpaBuild { pname = "isearch-plus"; + ename = "isearch+"; version = "3434-unstable-2021-08-23"; src = fetchFromGitHub { @@ -15,11 +17,15 @@ trivialBuild { hash = "sha256-kD+Fyps3fc5YK6ATU1nrkKHazGMYJnU2gRcpQZf6A1E="; }; - meta = with lib; { + passthru.updateScript = unstableGitUpdater { }; + + meta = { homepage = "https://www.emacswiki.org/emacs/IsearchPlus"; description = "Extensions to isearch"; - license = licenses.gpl2Plus; - maintainers = with maintainers; [ leungbk AndersonTorres ]; - inherit (emacs.meta) platforms; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ + leungbk + AndersonTorres + ]; }; } 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 index 00ff1f0a9b216..c97d3cc2d4917 100644 --- 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 @@ -1,25 +1,27 @@ -{ lib -, fetchFromGitHub -, trivialBuild -, emacs +{ + lib, + fetchFromGitHub, + melpaBuild, + unstableGitUpdater, }: -trivialBuild { +melpaBuild { pname = "isearch-prop"; - version = "0-unstable-2019-05-01"; + version = "0-unstable-2022-12-30"; src = fetchFromGitHub { owner = "emacsmirror"; repo = "isearch-prop"; - rev = "4a2765f835dd115d472142da05215c4c748809f4"; - hash = "sha256-A1Kt4nm7iRV9J5yaLupwiNL5g7ddZvQs79dggmqZ7Rk="; + rev = "5787fd57977c0d6c416ce71471c3b9da246dfb78"; + hash = "sha256-Xli7TxBenl5cDMJv3Qz7ZELFpvJKStMploLpf9a+uoA="; }; - meta = with lib; { + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; + + meta = { 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; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ leungbk AndersonTorres ]; }; } 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 index 6b060ffa3eac0..418f201fa933b 100644 --- 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 @@ -1,9 +1,10 @@ -{ lib -, trivialBuild -, fetchurl +{ + lib, + melpaBuild, + fetchurl, }: -trivialBuild rec { +melpaBuild rec { pname = "jam-mode"; version = "0.3"; @@ -20,10 +21,15 @@ trivialBuild rec { runHook postUnpack ''; - meta = with lib; { + postPatch = '' + echo ";;; jam-mode.el ---" > tmp.el + cat jam-mode.el >> tmp.el + mv tmp.el jam-mode.el + ''; + + meta = { description = "Emacs major mode for editing Jam files"; - license = licenses.gpl2Plus; - maintainers = with maintainers; [ qyliss ]; - platforms = platforms.all; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ qyliss ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ligo-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ligo-mode/default.nix index c70835a0dacb3..7c9df31e5c285 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ligo-mode/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/ligo-mode/default.nix @@ -1,36 +1,22 @@ -{ lib -, melpaBuild -, fetchFromGitLab -, writeText -, unstableGitUpdater +{ + lib, + melpaBuild, + fetchFromGitLab, + unstableGitUpdater, }: -let - pname = "ligo-mode"; - version = "20230302.1616"; - commit = "d1073474efc9e0a020a4bcdf5e0c12a217265a3a"; -in melpaBuild { - inherit pname version commit; + pname = "ligo-mode"; + version = "1.7.1-unstable-2024-07-17"; src = fetchFromGitLab { owner = "ligolang"; repo = "ligo"; - rev = commit; - hash = "sha256-wz9DF9mqi8WUt1Ebd+ueUTA314rKkdbjmoWF8cKuS8I="; + rev = "09afc3ff3dd9c88b2dfbc563278a78a099b39902"; + hash = "sha256-AX0zZljZPrfBlpdgCNuiq0JaYpHcVBdHHZ9jM31LlQs="; }; - packageRequires = [ ]; - - buildInputs = [ ]; - - checkInputs = [ ]; - - recipe = writeText "recipe" '' - (ligo-mode :fetcher gitlab - :repo "ligolang/ligo" - :files ("tools/emacs/ligo-mode.el")) - ''; + files = ''("tools/emacs/ligo-mode.el")''; passthru.updateScript = unstableGitUpdater { }; 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 index 02fec5ef7f720..9fef79b3312dd 100644 --- 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 @@ -1,13 +1,12 @@ -{ trivialBuild -, llvmPackages -}: +{ melpaBuild, llvmPackages }: -trivialBuild { +melpaBuild { pname = "llvm-mode"; inherit (llvmPackages.llvm) src version; - postUnpack = '' - sourceRoot="$sourceRoot/llvm/utils/emacs" + files = '' + ("llvm/utils/emacs/*.el" + "llvm/utils/emacs/README") ''; meta = { diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lsp-bridge/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lsp-bridge/default.nix index 944fc6c49463b..19b472cd663f3 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lsp-bridge/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lsp-bridge/default.nix @@ -1,44 +1,43 @@ -{ lib -, python3 -, melpaBuild -, fetchFromGitHub -, substituteAll -, acm -, markdown-mode -, git -, go -, gopls -, pyright -, ruff -, tempel -, writeScript -, writeText +{ + lib, + python3, + melpaBuild, + fetchFromGitHub, + substituteAll, + acm, + markdown-mode, + basedpyright, + git, + go, + gopls, + tempel, + unstableGitUpdater, }: let - rev = "9e88e660d717ba597d9fe9366cf4278674734410"; - python = python3.withPackages (ps: with ps; [ - epc - orjson - paramiko - rapidfuzz - sexpdata - six - ]); + python = python3.withPackages ( + ps: with ps; [ + epc + orjson + paramiko + rapidfuzz + setuptools + sexpdata + six + ] + ); in melpaBuild { pname = "lsp-bridge"; - version = "20240629.1404"; + version = "0-unstable-2024-07-14"; src = fetchFromGitHub { owner = "manateelazycat"; repo = "lsp-bridge"; - inherit rev; - hash = "sha256-qpetTKZDQjoofp8ggothYALQBpwLjuNxCq46Pe4oZZA="; + rev = "023924926ae6adfbcf5458c350b90dea7c05d51b"; + hash = "sha256-59bl4YbKS3HgrGJlUfM3LPabxKuuE+dT7CnVUJIl05k="; }; - commit = rev; - patches = [ # Hardcode the python dependencies needed for lsp-bridge, so users # don't have to modify their global environment @@ -54,26 +53,24 @@ melpaBuild { ]; checkInputs = [ + # Emacs packages + tempel + + # Executables + basedpyright git go gopls - pyright python - ruff - tempel ]; - recipe = writeText "recipe" '' - (lsp-bridge - :repo "manateelazycat/lsp-bridge" - :fetcher github - :files - ("*.el" - "lsp_bridge.py" - "core" - "langserver" - "multiserver" - "resources")) + files = '' + ("*.el" + "lsp_bridge.py" + "core" + "langserver" + "multiserver" + "resources") ''; doCheck = true; @@ -90,27 +87,15 @@ melpaBuild { __darwinAllowLocalNetworking = true; - passthru.updateScript = writeScript "update.sh" '' - #!/usr/bin/env nix-shell - #!nix-shell -i bash -p common-updater-scripts coreutils git gnused - set -eu -o pipefail - - tmpdir="$(mktemp -d)" - git clone --depth=1 https://github.com/manateelazycat/lsp-bridge.git "$tmpdir" - - pushd "$tmpdir" - commit=$(git show -s --pretty='format:%H') - # Based on: https://github.com/melpa/melpa/blob/2d8716906a0c9e18d6c979d8450bf1d15dd785eb/package-build/package-build.el#L523-L533 - version=$(TZ=UTC git show -s --pretty='format:%cd' --date='format-local:%Y%m%d.%H%M' | sed 's|\.0*|.|') - popd - - update-source-version emacsPackages.lsp-bridge $version --rev="$commit" - ''; + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; - meta = with lib; { + meta = { description = "Blazingly fast LSP client for Emacs"; homepage = "https://github.com/manateelazycat/lsp-bridge"; - license = licenses.gpl3Only; - maintainers = with maintainers; [ fxttr kira-bruneau ]; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ + fxttr + kira-bruneau + ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lspce/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lspce/default.nix index 97a9bea4f96ca..78325d90bf78d 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lspce/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lspce/default.nix @@ -1,65 +1,34 @@ -{ lib -, emacs -, f -, fetchFromGitHub -, markdown-mode -, rustPlatform -, trivialBuild -, yasnippet +{ + lib, + callPackage, + f, + markdown-mode, + melpaBuild, + nix-update-script, + yasnippet, }: let - version = "1.0.0-unstable-2024-02-03"; - - src = fetchFromGitHub { - owner = "zbelial"; - repo = "lspce"; - rev = "543dcf0ea9e3ff5c142c4365d90b6ae8dc27bd15"; - hash = "sha256-LZWRQOKkTjNo8jecBRholW9SHpiK0SWcV8yObojpvxo="; - }; - - meta = { - homepage = "https://github.com/zbelial/lspce"; - description = "LSP Client for Emacs implemented as a module using rust"; - license = lib.licenses.gpl3Only; - maintainers = [ ]; - inherit (emacs.meta) platforms; - }; - - lspce-module = rustPlatform.buildRustPackage { - inherit version src meta; - pname = "lspce-module"; - - cargoHash = "sha256-W9rsi7o4KvyRoG/pqRKOBbJtUoSW549Sh8+OV9sLcxs="; - - checkFlags = [ - # flaky test - "--skip=msg::tests::serialize_request_with_null_params" - ]; - - postInstall = '' - mkdir -p $out/share/emacs/site-lisp - for f in $out/lib/*; do - mv $f $out/share/emacs/site-lisp/lspce-module.''${f##*.} - done - rmdir $out/lib - ''; - }; + lspce-module = callPackage ./module.nix { }; in -trivialBuild rec { - inherit version src meta; +melpaBuild { pname = "lspce"; + inherit (lspce-module) version src meta; - buildInputs = propagatedUserEnvPkgs; - - propagatedUserEnvPkgs = [ + packageRequires = [ f markdown-mode yasnippet - lspce-module ]; + # to compile lspce.el, it needs lspce-module.so + files = ''(:defaults "${lib.getLib lspce-module}/lib/lspce-module.*")''; + passthru = { inherit lspce-module; + updateScript = nix-update-script { + attrPath = "emacsPackages.lspce.lspce-module"; + extraArgs = [ "--version=branch" ]; + }; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lspce/module.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lspce/module.nix new file mode 100644 index 0000000000000..1a1f8612f64ec --- /dev/null +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/lspce/module.nix @@ -0,0 +1,40 @@ +{ + lib, + fetchFromGitHub, + rustPlatform, +}: + +rustPlatform.buildRustPackage { + pname = "lspce-module"; + version = "1.1.0-unstable-2024-07-14"; + + src = fetchFromGitHub { + owner = "zbelial"; + repo = "lspce"; + rev = "fd320476df89cfd5d10f1b70303c891d3b1e3c81"; + hash = "sha256-KnERYq/CvJhJIdQkpH/m82t9KFMapPl+CyZkYyujslU="; + }; + + cargoHash = "sha256-I2OobRu1hc6xc4bRrIO1FImPYBbFy1jXPcTsivbbskk="; + + checkFlags = [ + # flaky test + "--skip=msg::tests::serialize_request_with_null_params" + ]; + + # rename module without changing either suffix or location + # use for loop because there seems to be two modules on darwin systems + # https://github.com/zbelial/lspce/issues/7#issue-1783708570 + postInstall = '' + for f in $out/lib/*; do + mv --verbose $f $out/lib/lspce-module.''${f##*.} + done + ''; + + meta = { + homepage = "https://github.com/zbelial/lspce"; + description = "LSP Client for Emacs implemented as a module using Rust"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ AndersonTorres ]; + }; +} 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 index a17689ddf52dc..59f4b83681391 100644 --- 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 @@ -1,46 +1,42 @@ -{ 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 +{ + lib, + melpaBuild, + fetchFromGitHub, + fetchpatch, + # 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 { +melpaBuild { pname = "matrix-client"; version = "0.3.0"; - commit = rev; - src = fetchFromGitHub { owner = "alphapapa"; repo = "matrix-client.el"; - inherit rev; - sha256 = "1scfv1502yg7x4bsl253cpr6plml1j4d437vci2ggs764sh3rcqq"; + rev = "d2ac55293c96d4c95971ed8e2a3f6f354565c5ed"; + hash = "sha256-GLM8oCbm6PdEZPsM0ogMtNJr8mWjCKoX6ed5AUrYjuk="; }; patches = [ # Fix: avatar loading when imagemagick support is not available (fetchpatch { url = "https://github.com/alphapapa/matrix-client.el/commit/5f49e615c7cf2872f48882d3ee5c4a2bff117d07.patch"; - sha256 = "07bvid7s1nv1377p5n61q46yww3m1w6bw4vnd4iyayw3fby1lxbm"; + hash = "sha256-dXUa/HKDe+UjaXYTvgwPdXDuDcHB2HLPGWHboE+Lex0="; }) ]; @@ -62,10 +58,6 @@ in melpaBuild { tracking ]; - recipe = writeText "recipe" '' - (matrix-client :repo "alphapapa/matrix-client.el" :fetcher github) - ''; - meta = { description = "Chat client and API wrapper for Matrix.org"; license = lib.licenses.gpl3Plus; diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/mind-wave/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/mind-wave/default.nix deleted file mode 100644 index 2bc5a733f6ce8..0000000000000 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/mind-wave/default.nix +++ /dev/null @@ -1,89 +0,0 @@ -{ lib -, pkgs -, melpaBuild -, substituteAll -}: -# To use this package with emacs-overlay: -# nixpkgs.overlays = [ -# inputs.emacs-overlay.overlay -# (final: prev: { -# emacs30 = prev.emacsGit.overrideAttrs (old: { -# name = "emacs30"; -# version = inputs.emacs-upstream.shortRev; -# src = inputs.emacs-upstream; -# }); -# emacsWithConfig = prev.emacsWithPackagesFromUsePackage { -# config = let -# readRecursively = dir: -# builtins.concatStringsSep "\n" -# (lib.mapAttrsToList (name: value: -# if value == "regular" -# then builtins.readFile (dir + "/${name}") -# else -# ( -# if value == "directory" -# then readRecursively (dir + "/${name}") -# else [] -# )) -# (builtins.readDir dir)); -# in -# # your home-manager config -# readRecursively ./home/modules/emacs; -# alwaysEnsure = true; -# package = final.emacs30; -# extraEmacsPackages = epkgs: [ -# epkgs.use-package -# (epkgs.melpaBuild rec { -# # ... -# }) -# ]; -# override = epkgs: -# epkgs -# // { -# # ... -# }; -# }; -# }) -# ]; -melpaBuild rec { - pname = "mind-wave"; - version = "20230523.0332"; # 03:32 UTC - src = pkgs.fetchFromGitHub { - owner = "manateelazycat"; - repo = "mind-wave"; - rev = "5109162b74872091c5090a28389bef8f7020274c"; - sha256 = "sha256-ZyXrpb0GLWSGnMsVIGL9qALSBCeIWNF0UwkCFgCKnu8="; - }; - commit = "5109162b74872091c5090a28389bef8f7020274c"; - # elisp dependencies - packageRequires = [ - pkgs.emacsPackages.markdown-mode - ]; - buildInputs = [ - (pkgs.python3.withPackages (ps: - with ps; [ - openai - epc - sexpdata - six - ])) - ]; - recipe = pkgs.writeText "recipe" '' - (mind-wave - :repo "manateelazycat/mind-wave" - :fetcher github - :files - ("mind-wave.el" - "mind-wave-epc.el" - "mind_wave.py" - "utils.py")) - ''; - doCheck = true; - passthru.updateScript = pkgs.unstableGitUpdater {}; - meta = with lib; { - description = " Emacs AI plugin based on ChatGPT API "; - homepage = "https://github.com/manateelazycat/mind-wave"; - license = licenses.gpl3Only; - maintainers = with maintainers; [yuzukicat]; - }; -} diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/notdeft/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/notdeft/default.nix index f9af8c465b930..324db6dede1f2 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/notdeft/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/notdeft/default.nix @@ -1,22 +1,24 @@ -{ lib -, stdenv -, trivialBuild -, fetchFromGitHub -, emacs -, hydra -, ivy -, pkg-config -, tclap -, xapian +{ + lib, + stdenv, + melpaBuild, + fetchFromGitHub, + hydra, + ivy, + pkg-config, + tclap, + unstableGitUpdater, + xapian, + # Configurable options # Include pre-configured hydras -, withHydra ? false + withHydra ? false, # Include Ivy integration -, withIvy ? false + withIvy ? false, }: let pname = "notdeft"; - version = "20211204.0846"; + version = "0-unstable-2021-12-04"; src = fetchFromGitHub { owner = "hasu"; @@ -30,9 +32,22 @@ let pname = "notdeft-xapian"; inherit version src; - sourceRoot = "${src.name}/xapian"; + strictDeps = true; - nativeBuildInputs = [ pkg-config tclap xapian ]; + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ + tclap + xapian + ]; + + buildPhase = '' + runHook preBuild + + $CXX -std=c++11 -o notdeft-xapian xapian/notdeft-xapian.cc -lxapian + + runHook postBuild + ''; installPhase = '' runHook preInstall @@ -44,11 +59,10 @@ let ''; }; in -trivialBuild { +melpaBuild { inherit pname version src; - packageRequires = lib.optional withHydra hydra - ++ lib.optional withIvy ivy; - buildInputs = [ xapian ]; + + packageRequires = lib.optional withHydra hydra ++ lib.optional withIvy ivy; postPatch = '' substituteInPlace notdeft-xapian.el \ @@ -56,20 +70,23 @@ trivialBuild { "defcustom notdeft-xapian-program \"${notdeft-xapian}/bin/notdeft-xapian\"" ''; - # Extra modules are contained in the extras/ directory - preBuild = lib.optionalString withHydra '' - mv extras/notdeft-{mode-hydra,global-hydra}.el ./ - '' + - lib.optionalString withIvy '' - mv extras/notdeft-ivy.el ./ - '' + '' - rm -r extras/ + files = '' + (:defaults + ${lib.optionalString withHydra ''"extras/notdeft-global-hydra.el"''} + ${lib.optionalString withHydra ''"extras/notdeft-mode-hydra.el"''} + ${lib.optionalString withIvy ''"extras/notdeft-ivy.el"''}) ''; - meta = with lib; { + passthru = { + inherit notdeft-xapian; + updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; + }; + + meta = { homepage = "https://tero.hasu.is/notdeft/"; description = "Fork of Deft that uses Xapian as a search engine"; - maintainers = [ maintainers.nessdoor ]; - platforms = platforms.linux; + maintainers = [ lib.maintainers.nessdoor ]; + license = lib.licenses.bsd3; + platforms = lib.platforms.linux; }; } 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 index 6eeead468ff22..ac208e29dbf44 100644 --- 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 @@ -1,19 +1,22 @@ -{ trivialBuild -, ott -, haskellPackages -}: +{ melpaBuild, ott }: -trivialBuild { +melpaBuild { pname = "ott-mode"; inherit (ott) src version; - postUnpack = '' - mv $sourceRoot/emacs/ott-mode.el $sourceRoot + files = ''("emacs/*.el")''; + + postPatch = '' + pushd emacs + echo ";;; ott-mode.el ---" > tmp.el + cat ott-mode.el >> tmp.el + mv tmp.el ott-mode.el + popd ''; meta = { description = "Emacs ott mode (from ott sources)"; - inherit (haskellPackages.Agda.meta) homepage license; + inherit (ott.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 deleted file mode 100644 index dea18e30dcd83..0000000000000 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/perl-completion/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ trivialBuild -, fetchurl -}: - -trivialBuild { - pname = "perl-completion"; - - src = fetchurl { - url = "http://emacswiki.org/emacs/download/perl-completion.el"; - sha256 = "0x6qsgs4hm87k0z9q3g4p6508kc3y123j5jayll3jf3lcl2vm6ks"; - }; - - version = "1.10"; - - meta = { - broken = true; - 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 index 549633b7dfbdc..51c4fb1f8b1f3 100644 --- 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 @@ -1,18 +1,35 @@ -{ trivialBuild, lib, fetchurl }: +{ + lib, + melpaBuild, + fetchurl +}: -trivialBuild rec { +let pname = "pod-mode"; version = "1.04"; src = fetchurl { url = "mirror://cpan/authors/id/F/FL/FLORA/pod-mode-${version}.tar.gz"; - sha256 = "1wr0khymkaa65blrc5nya607c1a3sjsww49bbf8f0a6176as71sv"; + hash = "sha256-W4ejlTnBKOCQWysRzrXUQwV2gFHeFpbpKkapWT2cIPM="; }; +in +melpaBuild { + inherit pname version src; - meta = with lib; { + outputs = [ + "out" + "doc" + ]; + + postInstall = '' + mkdir -p ''${!outputDoc}/share/doc/pod-mode/ + install -Dm644 -t ''${!outputDoc}/share/doc/pod-mode/ $sourceRoot/ChangeLog $sourceRoot/README + ''; + + meta = { + homepage = "https://metacpan.org/dist/pod-mode"; description = "Major mode for editing .pod-files"; - license = licenses.gpl2Plus; - maintainers = with maintainers; [ qyliss ]; - platforms = platforms.all; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ qyliss ]; }; } 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 index 983363ae838f4..41ce7957e758f 100644 --- 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 @@ -1,31 +1,23 @@ -{ lib -, fetchFromGitHub -, melpaBuild -, js2-mode -, writeText +{ + lib, + fetchFromGitHub, + melpaBuild, + js2-mode, }: -let - rev = "5283ca7403bcb21ca0cac8ecb063600752dfd9d4"; -in melpaBuild { +melpaBuild { pname = "prisma-mode"; - version = "20211207.0"; - - commit = rev; + version = "0-unstable-2021-12-07"; packageRequires = [ js2-mode ]; src = fetchFromGitHub { owner = "pimeys"; repo = "emacs-prisma-mode"; - inherit rev; - sha256 = "sha256-DJJfjbu27Gi7Nzsa1cdi8nIQowKH8ZxgQBwfXLB0Q/I="; + rev = "5283ca7403bcb21ca0cac8ecb063600752dfd9d4"; + hash = "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 index 3e804551666cd..41c9363fbf4af 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/prolog/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/prolog/default.nix @@ -1,14 +1,24 @@ -{ lib, trivialBuild, fetchurl }: +{ + lib, + melpaBuild, + fetchurl, +}: -trivialBuild { +melpaBuild { pname = "prolog-mode"; + ename = "prolog"; version = "1.28"; src = fetchurl { url = "https://bruda.ca/_media/emacs/prolog.el"; - sha256 = "ZzIDFQWPq1vI9z3btgsHgn0axN6uRQn9Tt8TnqGybOk="; + hash = "sha256-ZzIDFQWPq1vI9z3btgsHgn0axN6uRQn9Tt8TnqGybOk="; }; + postPatch = '' + substituteInPlace prolog.el \ + --replace-fail ";; prolog.el ---" ";;; prolog.el ---" + ''; + meta = { homepage = "https://bruda.ca/emacs/prolog_mode_for_emacs/"; description = "Prolog mode for Emacs"; 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 index 8d4fcf5090c34..aee5c8ba2dbf6 100644 --- 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 @@ -1,24 +1,30 @@ -{ lib -, trivialBuild -, fetchFromGitHub -, emacs - }: +{ + lib, + melpaBuild, + fetchFromGitHub, + gitUpdater, +}: -trivialBuild rec { - pname = "rect-mark"; +let version = "1.4"; +in +melpaBuild { + pname = "rect-mark"; + inherit version; src = fetchFromGitHub { owner = "emacsmirror"; - repo = pname; + repo = "rect-mark"; rev = version; hash = "sha256-/8T1VTYkKUxlNWXuuS54S5jpl4UxJBbgSuWc17a/VyM="; }; - meta = with lib; { + passthru.updateScript = gitUpdater { }; + + meta = { homepage = "http://emacswiki.org/emacs/RectangleMark"; description = "Mark a rectangle of text with highlighting"; - license = licenses.gpl2Plus; - inherit (emacs.meta) platforms; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ AndersonTorres ]; }; } 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 index efc422d601f06..7cf5a63f4b6cf 100644 --- 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 @@ -1,11 +1,13 @@ -{ lib -, trivialBuild -, fetchFromGitHub -, emacs +{ + lib, + melpaBuild, + fetchFromGitHub, + unstableGitUpdater, }: -trivialBuild { +melpaBuild { pname = "sunrise-commander"; + ename = "sunrise"; version = "0-unstable-2021-09-27"; src = fetchFromGitHub { @@ -15,9 +17,7 @@ trivialBuild { hash = "sha256-D36qiRi5OTZrBtJ/bD/javAWizZ8NLlC/YP4rdLCSsw="; }; - buildInputs = [ - emacs - ]; + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; meta = { homepage = "https://github.com/sunrise-commander/sunrise-commander/"; 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 index 48cc866029a8c..0227fcefc152a 100644 --- 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 @@ -1,19 +1,22 @@ -{ fetchurl, lib, trivialBuild }: +{ + lib, + fetchurl, + melpaBuild, +}: -trivialBuild { +melpaBuild { pname = "sv-kalender"; version = "1.11"; src = fetchurl { url = "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/ec4fa36bdba5d2c5c4f5e0400a70768c10e969e8/sv-kalender.el"; - sha256 = "0mcx7g1pg6kfp0i4b9rh3q9csgdf3054ijswy368bxwdxsjgfz2m"; + hash = "sha256-VXz3pO6N94XM8FzLSAoYrj3NEh4wp0UiuG6ad8M7nVU="; }; - meta = with lib; { - description = "Swedish calendar for Emacs"; + meta = { homepage = "https://www.emacswiki.org/emacs/sv-kalender.el"; - platforms = platforms.all; - license = licenses.gpl3Plus; - maintainers = [ maintainers.rycee ]; + description = "Swedish calendar for Emacs"; + license = lib.licenses.gpl3Plus; + maintainers = [ lib.maintainers.rycee ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/texpresso/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/texpresso/default.nix index cd449ab0f5d9a..ca83eb04a336f 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/texpresso/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/texpresso/default.nix @@ -1,15 +1,14 @@ -{ lib -, trivialBuild -, texpresso +{ + lib, + melpaBuild, + texpresso, }: -trivialBuild { +melpaBuild { pname = "texpresso"; version = texpresso.version; src = texpresso.src; - preInstall = '' - cd emacs - ''; + files = ''("emacs/*.el")''; meta = { inherit (texpresso.meta) homepage license; 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 index 018299650a9a4..d69a2f16247b1 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/tsc/default.nix @@ -3,9 +3,6 @@ , melpaBuild , fetchFromGitHub , rustPlatform -, writeText -, clang -, llvmPackages , runtimeShell , writeScript @@ -26,15 +23,8 @@ let inherit version; pname = "tsc"; - commit = version; sourceRoot = "${src.name}/core"; - - recipe = writeText "recipe" '' - (tsc - :repo "emacs-tree-sitter/elisp-tree-sitter" - :fetcher github) - ''; }; tsc-dyn = rustPlatform.buildRustPackage { 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 index 6f7e822d81d37..d5b597bdf47b8 100644 --- 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 @@ -1,11 +1,12 @@ -{ lib -, trivialBuild -, urweb -, cl-lib -, flycheck +{ + lib, + melpaBuild, + urweb, + cl-lib, + flycheck, }: -trivialBuild { +melpaBuild { pname = "urweb-mode"; inherit (urweb) src version; @@ -15,9 +16,9 @@ trivialBuild { flycheck ]; - postUnpack = '' - sourceRoot=$sourceRoot/src/elisp - ''; + files = ''("src/elisp/*.el")''; + + dontConfigure = true; meta = { description = "Major mode for editing Ur/Web"; 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/0000-add-missing-require.patch index 58c043bf78ede..58c043bf78ede 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/add-missing-require.patch +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/0000-add-missing-require.patch 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 index 60f3e3a75e053..593dac2579762 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/voicemacs/default.nix @@ -1,21 +1,23 @@ -{ trivialBuild -, lib -, fetchFromGitHub -, avy -, json-rpc-server -, f -, nav-flash -, helm -, cl-lib -, porthole -, default-text-scale -, bind-key -, yasnippet -, company -, company-quickhelp +{ + lib, + avy, + bind-key, + cl-lib, + company, + company-quickhelp, + default-text-scale, + f, + fetchFromGitHub, + helm, + json-rpc-server, + melpaBuild, + nav-flash, + porthole, + unstableGitUpdater, + yasnippet, }: -trivialBuild { +melpaBuild { pname = "voicemacs"; version = "0-unstable-2022-02-16"; @@ -23,28 +25,34 @@ trivialBuild { owner = "jcaw"; repo = "voicemacs"; rev = "d91de2a31c68ab083172ade2451419d6bd7bb389"; - sha256 = "sha256-/MBB2R9/V0aYZp15e0vx+67ijCPp2iPlgxe262ldmtc="; + hash = "sha256-/MBB2R9/V0aYZp15e0vx+67ijCPp2iPlgxe262ldmtc="; }; - patches = [ ./add-missing-require.patch ]; + patches = [ + ./0000-add-missing-require.patch + ]; packageRequires = [ avy - json-rpc-server + bind-key + cl-lib + company + company-quickhelp + default-text-scale f - nav-flash helm - cl-lib + json-rpc-server + nav-flash porthole - default-text-scale - bind-key yasnippet - company-quickhelp ]; + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; + meta = { - description = "Voicemacs is a set of utilities for controlling Emacs by voice"; + homepage = "https://github.com/jcaw/voicemacs/"; + description = "Set of utilities for controlling Emacs by voice"; license = lib.licenses.gpl3Only; - platforms = lib.platforms.all; + maintainers = with lib.maintainers; [ AndersonTorres ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/wat-mode/default.nix b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/wat-mode/default.nix index 6eb5b9478541c..e4bb260d14b44 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/manual-packages/wat-mode/default.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/manual-packages/wat-mode/default.nix @@ -1,23 +1,22 @@ -# Manually packaged until it is upstreamed to melpa -# See https://github.com/devonsparks/wat-mode/issues/1 -{ lib, melpaBuild, fetchFromGitHub, writeText }: +{ + lib, + melpaBuild, + fetchFromGitHub, + unstableGitUpdater, +}: -melpaBuild rec { +melpaBuild { pname = "wat-mode"; - version = "20220713.1"; + version = "0-unstable-2022-07-13"; src = fetchFromGitHub { owner = "devonsparks"; - repo = pname; + repo = "wat-mode"; rev = "46b4df83e92c585295d659d049560dbf190fe501"; hash = "sha256-jV5V3TRY+D3cPSz3yFwVWn9yInhGOYIaUTPEhsOBxto="; }; - commit = "46b4df83e92c585295d659d049560dbf190fe501"; - - recipe = writeText "recipe" '' - (wat-mode :repo "devonsparks/wat-mode" :fetcher github) - ''; + passthru.updateScript = unstableGitUpdater { hardcodeZeroVersion = true; }; meta = { homepage = "https://github.com/devonsparks/wat-mode"; 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 index 2cb229a4e1e39..2981cb8f47112 100644 --- 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 @@ -1,19 +1,22 @@ -{ lib, fetchurl, trivialBuild }: +{ + lib, + fetchurl, + melpaBuild, +}: -trivialBuild { +melpaBuild { pname = "yes-no"; version = "0-unstable-2017-10-01"; src = fetchurl { url = "https://raw.githubusercontent.com/emacsmirror/emacswiki.org/143bcaeb679a8fa8a548e92a5a9d5c2baff50d9c/yes-no.el"; - sha256 = "03w4wfx885y89ckyd5d95n2571nmmzrll6kr0yan3ip2aw28xq3i"; + hash = "sha256-ceCOBFfixmGVB3kaSvOv1YZThC2pleYnS8gXhLrjhA8="; }; - meta = with lib; { - description = "Specify use of `y-or-n-p' or `yes-or-no-p' on a case-by-case basis"; + meta = { homepage = "https://www.emacswiki.org/emacs/yes-no.el"; - license = licenses.gpl3Plus; - maintainers = with maintainers; [ jcs090218 ]; - platforms = platforms.all; + description = "Specify use of `y-or-n-p' or `yes-or-no-p' on a case-by-case basis"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ jcs090218 ]; }; } 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 index ec25ab9b1bdf8..d3e5a5cfbbb3b 100644 --- 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 @@ -1,10 +1,11 @@ -{ lib -, fetchFromGitHub -, trivialBuild -, emacs +{ + lib, + fetchFromGitHub, + melpaBuild, + unstableGitUpdater, }: -trivialBuild { +melpaBuild { pname = "youtube-dl"; version = "1.0-unstable-2018-10-12"; @@ -12,14 +13,15 @@ trivialBuild { owner = "skeeto"; repo = "youtube-dl-emacs"; rev = "af877b5bc4f01c04fccfa7d47a2c328926f20ef4"; - sha256 = "sha256-Etl95rcoRACDPjcTPQqYK2L+w8OZbOrTrRT0JadMdH4="; + hash = "sha256-Etl95rcoRACDPjcTPQqYK2L+w8OZbOrTrRT0JadMdH4="; }; - meta = with lib; { + passthru.updateScript = unstableGitUpdater { }; + + meta = { 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; + license = lib.licenses.unlicense; + maintainers = with lib.maintainers; [ leungbk ]; }; } diff --git a/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix b/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix index 00646b6d81b38..d580b0dfdb71f 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/melpa-packages.nix @@ -755,5 +755,4 @@ let in lib.mapAttrs (n: v: if lib.hasAttr n overrides then overrides.${n} else v) super); in -(generateMelpa { }) -// { __attrsFailEvaluation = true; } +generateMelpa { } diff --git a/pkgs/applications/editors/emacs/elisp-packages/nongnu-packages.nix b/pkgs/applications/editors/emacs/elisp-packages/nongnu-packages.nix index beca93ea4c35f..cd32a8bd39754 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/nongnu-packages.nix +++ b/pkgs/applications/editors/emacs/elisp-packages/nongnu-packages.nix @@ -20,12 +20,12 @@ self: let generated ? ./nongnu-generated.nix }: let - imported = (import generated { + imported = import generated { callPackage = pkgs: args: self.callPackage pkgs (args // { # Use custom elpa url fetcher with fallback/uncompress fetchurl = buildPackages.callPackage ./fetchelpa.nix { }; }); - }) // { __attrsFailEvaluation = true; }; + }; super = imported; diff --git a/pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json b/pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json index 9dd51bcbc5a47..02857188f0f60 100644 --- a/pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json +++ b/pkgs/applications/editors/emacs/elisp-packages/recipes-archive-melpa.json @@ -91627,11 +91627,11 @@ "repo": "ksqsf/org-xlatex", "unstable": { "version": [ - 20230820, - 2133 + 20240707, + 1343 ], - "commit": "f3cac5ea904e78ae2b47723fdce96e8e87edbe7c", - "sha256": "06y7lapsp4s9h07hdsd8wigmy6r5l36qiqwmz7j1n8zp3r8xg0pw" + "commit": "8f25ba5e4784b3f12f5ac5c69b1a1d0695c53b8e", + "sha256": "1cg11gqisigpa9prkm05z7wlajffzmhjiymg7frbibhrskhfhrp0" } }, { diff --git a/pkgs/applications/editors/emacs/sources.nix b/pkgs/applications/editors/emacs/sources.nix index 487d8a3680a6d..da243044b689a 100644 --- a/pkgs/applications/editors/emacs/sources.nix +++ b/pkgs/applications/editors/emacs/sources.nix @@ -104,10 +104,10 @@ in emacs29 = import ./make-emacs.nix (mkArgs { pname = "emacs"; - version = "29.3"; + version = "29.4"; variant = "mainline"; - rev = "29.3"; - hash = "sha256-4yN81djeKb9Hlr6MvaDdXqf4XOl0oolXEYGqkA+KUO0="; + rev = "29.4"; + hash = "sha256-FCP6ySkN9mAdp2T09n6foS2OciqZXc/54guRZ0B4Z2s="; }); emacs28-macport = import ./make-emacs.nix (mkArgs { |