mirror of
https://github.com/ilyakooo0/nixpkgs.git
synced 2024-12-25 20:34:52 +03:00
emacsWithPackages: move bin and site-lisp to private share directory
This is to avoid unwanted side effects when installing a wrapped emacs in the environment: * All executables in the dependencies become available in the user environment * All site-lisp binaries in the dependencies become accessible to unwrapped emacs Also, both bin and site-lisp would generate conflicts so installing a wrapped emacs becomes really cumbersome
This commit is contained in:
parent
c68c0a3c7c
commit
2b199537b7
@ -52,7 +52,8 @@ stdenv.mkDerivation {
|
|||||||
phases = [ "installPhase" ];
|
phases = [ "installPhase" ];
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
mkdir -p $out/share/emacs/site-lisp
|
mkdir -p $out/share/emacs-with-packages/bin
|
||||||
|
mkdir -p $out/share/emacs-with-packages/site-lisp
|
||||||
|
|
||||||
local requires
|
local requires
|
||||||
for pkg in $explicitRequires; do
|
for pkg in $explicitRequires; do
|
||||||
@ -60,29 +61,32 @@ stdenv.mkDerivation {
|
|||||||
done
|
done
|
||||||
# requires now holds all requested packages and their transitive dependencies
|
# requires now holds all requested packages and their transitive dependencies
|
||||||
|
|
||||||
siteStart="$out/share/emacs/site-lisp/site-start.el"
|
siteStart="$out/share/emacs-with-packages/site-lisp/site-start.el"
|
||||||
|
|
||||||
# Begin the new site-start.el by loading the original, which sets some
|
# 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
|
# 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.
|
# they are specified in, so user and system profile paths are searched last.
|
||||||
cat >"$siteStart" <<EOF
|
cat >"$siteStart" <<EOF
|
||||||
(load-file "$emacs/share/emacs/site-lisp/site-start.el")
|
(load-file "$emacs/share/emacs/site-lisp/site-start.el")
|
||||||
(add-to-list 'load-path "$out/share/emacs/site-lisp")
|
(add-to-list 'load-path "$out/share/emacs-with-packages/site-lisp")
|
||||||
|
(add-to-list 'exec-path "$out/share/emacs-with-packages/bin")
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
linkPath() {
|
linkPath() {
|
||||||
local pkg=$1
|
local pkg=$1
|
||||||
local path=$2
|
local origin_path=$2
|
||||||
|
local dest_path=$3
|
||||||
|
|
||||||
# Add the path to the search path list, but only if it exists
|
# Add the path to the search path list, but only if it exists
|
||||||
if [[ -d "$pkg/$path" ]]; then
|
if [[ -d "$pkg/$origin_path" ]]; then
|
||||||
lndir -silent "$pkg/$path" "$out/$path"
|
lndir -silent "$pkg/$origin_path" "$out/$dest_path"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add a package's paths to site-start.el
|
# Add a package's paths to site-start.el
|
||||||
linkEmacsPackage() {
|
linkEmacsPackage() {
|
||||||
linkPath "$1" "bin"
|
linkPath "$1" "bin" "share/emacs-with-packages/bin"
|
||||||
linkPath "$1" "share/emacs/site-lisp"
|
linkPath "$1" "share/emacs/site-lisp" "share/emacs-with-packages/site-lisp"
|
||||||
}
|
}
|
||||||
|
|
||||||
# First, link all the explicitly-required packages.
|
# First, link all the explicitly-required packages.
|
||||||
@ -103,7 +107,7 @@ EOF
|
|||||||
local progname=$(basename "$prog")
|
local progname=$(basename "$prog")
|
||||||
rm -f "$out/bin/$progname"
|
rm -f "$out/bin/$progname"
|
||||||
makeWrapper "$prog" "$out/bin/$progname" \
|
makeWrapper "$prog" "$out/bin/$progname" \
|
||||||
--suffix EMACSLOADPATH ":" "$out/share/emacs/site-lisp:"
|
--suffix EMACSLOADPATH ":" "$out/share/emacs-with-packages/site-lisp:"
|
||||||
done
|
done
|
||||||
|
|
||||||
mkdir -p $out/share
|
mkdir -p $out/share
|
||||||
|
Loading…
Reference in New Issue
Block a user