add emacsWithPackages
This commit is contained in:
parent
1d8590afe4
commit
8aa0d8f180
73
pkgs/build-support/emacs/wrapper.nix
Normal file
73
pkgs/build-support/emacs/wrapper.nix
Normal file
|
@ -0,0 +1,73 @@
|
|||
{ stdenv, makeWrapper, emacs }:
|
||||
|
||||
with stdenv.lib;
|
||||
|
||||
explicitRequires: # packages explicitly requested by the user
|
||||
|
||||
stdenv.mkDerivation {
|
||||
name = (appendToName "with-packages" emacs).name;
|
||||
nativeBuildInputs = [ emacs makeWrapper ];
|
||||
inherit emacs explicitRequires;
|
||||
phases = [ "installPhase" ];
|
||||
installPhase = ''
|
||||
requires=""
|
||||
for pkg in $explicitRequires; do
|
||||
findInputs $pkg requires propagated-user-env-packages
|
||||
done
|
||||
# requires now holds all requested packages and their transitive dependencies
|
||||
|
||||
siteStart="$out/share/emacs/site-lisp/site-start.el"
|
||||
|
||||
addEmacsPath() {
|
||||
local list=$1
|
||||
local path=$2
|
||||
# Add the path to the search path list, but only if it exists
|
||||
if [[ -d "$path" ]]; then
|
||||
echo "(add-to-list '$list \"$path\")" >>"$siteStart"
|
||||
fi
|
||||
}
|
||||
|
||||
# Add a dependency's paths to site-start.el
|
||||
addToEmacsPaths() {
|
||||
addEmacsPath "exec-path" "$1/bin"
|
||||
addEmacsPath "load-path" "$1/share/emacs/site-lisp"
|
||||
addEmacsPath "package-directory-list" "$1/share/emacs/site-lisp/elpa"
|
||||
}
|
||||
|
||||
mkdir -p $out/share/emacs/site-lisp
|
||||
# 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.
|
||||
echo "(load-file \"$emacs/share/emacs/site-lisp/site-start.el\")" >"$siteStart"
|
||||
echo "(require 'package)" >>"$siteStart"
|
||||
|
||||
# Set paths for the dependencies of the requested packages. These paths are
|
||||
# searched before the profile paths, but after the explicitly-required paths.
|
||||
for pkg in $requires; do
|
||||
# The explicitly-required packages are also in the list, but we will add
|
||||
# those paths last.
|
||||
if ! ( echo "$explicitRequires" | grep "$pkg" >/dev/null ) ; then
|
||||
addToEmacsPaths $pkg
|
||||
fi
|
||||
done
|
||||
|
||||
# Finally, add paths for all the explicitly-required packages. These paths
|
||||
# will be searched first.
|
||||
for pkg in $explicitRequires; do
|
||||
addToEmacsPaths $pkg
|
||||
done
|
||||
|
||||
echo "(package-initialize)" >>"$siteStart"
|
||||
|
||||
# Byte-compiling improves start-up time only slightly, but costs nothing.
|
||||
emacs --batch -f batch-byte-compile "$siteStart"
|
||||
|
||||
mkdir -p $out/bin
|
||||
# Wrap emacs and friends so they find our site-start.el before the original.
|
||||
for prog in $emacs/bin/*; do # */
|
||||
makeWrapper "$prog" $out/bin/$(basename "$prog") \
|
||||
--suffix EMACSLOADPATH ":" "$out/share/emacs/site-lisp:"
|
||||
done
|
||||
'';
|
||||
inherit (emacs) meta;
|
||||
}
|
|
@ -10562,6 +10562,9 @@ let
|
|||
|
||||
emacs24PackagesNg = recurseIntoAttrs (emacsPackagesNgGen emacs24);
|
||||
|
||||
emacsWithPackages = callPackage ../build-support/emacs/wrapper.nix { };
|
||||
emacs24WithPackages = emacsWithPackages.override { emacs = emacs24; };
|
||||
|
||||
inherit (gnome3) empathy;
|
||||
|
||||
enhanced-ctorrent = callPackage ../applications/networking/enhanced-ctorrent { };
|
||||
|
|
Loading…
Reference in a new issue