diff --git a/pkgs/applications/editors/emacs/default.nix b/pkgs/applications/editors/emacs/default.nix index 4a729ba3da3..08223ef82ef 100644 --- a/pkgs/applications/editors/emacs/default.nix +++ b/pkgs/applications/editors/emacs/default.nix @@ -6,6 +6,7 @@ , withGTK2 ? true, gtk2 ? null , withGTK3 ? false, gtk3 ? null , withXwidgets ? false, webkitgtk24x ? null, wrapGAppsHook ? null, glib_networking ? null +, withCsrc ? true , srcRepo ? false, autoconf ? null, automake ? null, texinfo ? null }: @@ -24,7 +25,9 @@ let else "lucid"; in stdenv.mkDerivation rec { - name = "emacs-25.1"; + name = "emacs-${version}${versionModifier}"; + version = "25.1"; + versionModifier = ""; src = fetchurl { url = "mirror://gnu//emacs/${name}.tar.xz"; @@ -71,9 +74,23 @@ stdenv.mkDerivation rec { done ''; + installTargets = "tags install"; + postInstall = '' - mkdir -p $out/share/emacs/site-lisp/ + mkdir -p $out/share/emacs/site-lisp cp ${./site-start.el} $out/share/emacs/site-lisp/site-start.el + $out/bin/emacs --batch -f batch-byte-compile $out/share/emacs/site-lisp/site-start.el + + rm -rf $out/var + rm -rf $out/share/emacs/${version}/site-lisp + '' + lib.optionalString withCsrc '' + for srcdir in src lisp lwlib ; do + dstdir=$out/share/emacs/${version}/$srcdir + mkdir -p $dstdir + find $srcdir -name "*.[chm]" -exec cp {} $dstdir \; + cp $srcdir/TAGS $dstdir + echo '((nil . ((tags-file-name . "TAGS"))))' > $dstdir/.dir-locals.el + done '' + lib.optionalString stdenv.isDarwin '' mkdir -p $out/Applications mv nextstep/Emacs.app $out/Applications diff --git a/pkgs/applications/editors/emacs/site-start.el b/pkgs/applications/editors/emacs/site-start.el index 023d6412ed8..b41ca92db08 100644 --- a/pkgs/applications/editors/emacs/site-start.el +++ b/pkgs/applications/editors/emacs/site-start.el @@ -1,4 +1,4 @@ -;; NixOS specific load-path +;;; NixOS specific load-path (setq load-path (append (reverse (mapcar (lambda (x) (concat x "/share/emacs/site-lisp/")) (split-string (or (getenv "NIX_PROFILES") "")))) @@ -11,7 +11,25 @@ (split-string (or (getenv "NIX_PROFILES") "")))) woman-manpath))) -;; Make tramp work for remote NixOS machines -;;; NOTE: You might want to add +;;; Make tramp work for remote NixOS machines (eval-after-load 'tramp '(add-to-list 'tramp-remote-path "/run/current-system/sw/bin")) + +;;; C source directory +;;; +;;; Computes the location of the C source directory from the path of +;;; the current file: +;;; from: /nix/store/-emacs-/share/emacs/site-lisp/site-start.el +;;; to: /nix/store/-emacs-/share/emacs//src/ +(let ((emacs + (file-name-directory ;; .../emacs/ + (directory-file-name ;; .../emacs/site-lisp + (file-name-directory load-file-name)))) ;; .../emacs/site-lisp/ + (version + (file-name-as-directory + (concat + (number-to-string emacs-major-version) + "." + (number-to-string emacs-minor-version)))) + (src (file-name-as-directory "src"))) + (setq find-function-C-source-directory (concat emacs version src))) diff --git a/pkgs/build-support/emacs/wrapper.nix b/pkgs/build-support/emacs/wrapper.nix index 45931e6914a..b13def07bb8 100644 --- a/pkgs/build-support/emacs/wrapper.nix +++ b/pkgs/build-support/emacs/wrapper.nix @@ -85,13 +85,14 @@ stdenv.mkDerivation { done siteStart="$out/share/emacs/site-lisp/site-start.el" + siteStartByteCompiled="$siteStart"c # A dependency may have brought the original siteStart, 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. - rm -f $siteStart + rm -f $siteStart $siteStartByteCompiled cat >"$siteStart" < $out/share/emacs/site-lisp/elpa/emacs-source-directory/emacs-source-directory-autoloads.el - (setq source-directory "$out") - (setq find-function-C-source-directory (expand-file-name "src" source-directory)) - EOF - cat < $out/share/emacs/site-lisp/elpa/emacs-source-directory/emacs-source-directory-pkg.el - (define-package "emacs-source-directory" "1.0.0" "Make emacs C source code available inside emacs. To use with emacsWithPackages in NixOS" '()) - EOF - ''; - meta = { - description = "Make emacs C source code available inside emacs. To use with emacsWithPackages in NixOS"; - }; - }; - evil-jumper = melpaBuild rec { pname = "evil-jumper"; version = "20151017";