18d461533b
Instead of searching `/usr` it should search for the `xkb`, $XDG_DATA_DIRS will be searched. With this approach we allow compliance on NixOS and non-NixOS systems to find `symbols` in the `xkb` directory. The patch has been accepted by upstream, but isn't released yet, so this is mainly a temporary fix until we can bump ZSH to the next stable version. The `xserver` module links `/share/X11/xkb` to `/run/current-system` to make this possible. The fix can be tested inside the following VM: ``` { zshtest = { programs.zsh.enable = true; users.extraUsers.vm = { password = "vm"; isNormalUser = true; }; services.xserver.enable = true; }; } ``` Fixes #46025
100 lines
2.7 KiB
Nix
100 lines
2.7 KiB
Nix
{ stdenv, fetchurl, ncurses, pcre, fetchpatch }:
|
|
|
|
let
|
|
version = "5.6";
|
|
|
|
documentation = fetchurl {
|
|
url = "mirror://sourceforge/zsh/zsh-${version}-doc.tar.gz";
|
|
sha256 = "1kz57w4l0jank67a2hiz6y5idbff5avwg52zdxx3qnflkjvkn2kx";
|
|
};
|
|
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
name = "zsh-${version}";
|
|
|
|
src = fetchurl {
|
|
url = "mirror://sourceforge/zsh/zsh-${version}.tar.gz";
|
|
sha256 = "1vik7s3q5hvazvgw4jm4b90qlk6zcry0s314xw1liarspkd721g3";
|
|
};
|
|
|
|
patches = [
|
|
(fetchpatch {
|
|
name = "search-xdg-data-dirs.patch";
|
|
url = https://github.com/zsh-users/zsh/commit/624219e0e4cbfdfb286e707bd2853f2d7b6a4a7d.patch;
|
|
sha256 = "0i0g7dc0px57vpklm1f4w20vyc92nv15y09r5clvib2kjkxjy2cf";
|
|
excludes = [ "ChangeLog" ];
|
|
})
|
|
];
|
|
|
|
buildInputs = [ ncurses pcre ];
|
|
|
|
configureFlags = [
|
|
"--enable-maildir-support"
|
|
"--enable-multibyte"
|
|
"--with-tcsetpgrp"
|
|
"--enable-pcre"
|
|
];
|
|
preConfigure = ''
|
|
configureFlagsArray+=(--enable-zprofile=$out/etc/zprofile)
|
|
'';
|
|
|
|
# the zsh/zpty module is not available on hydra
|
|
# so skip groups Y Z
|
|
checkFlags = map (T: "TESTNUM=${T}") (stdenv.lib.stringToCharacters "ABCDEVW");
|
|
|
|
# XXX: think/discuss about this, also with respect to nixos vs nix-on-X
|
|
postInstall = ''
|
|
mkdir -p $out/share/info
|
|
tar xf ${documentation} -C $out/share
|
|
ln -s $out/share/zsh-*/Doc/zsh.info* $out/share/info/
|
|
|
|
mkdir -p $out/etc/
|
|
cat > $out/etc/zprofile <<EOF
|
|
if test -e /etc/NIXOS; then
|
|
if test -r /etc/zprofile; then
|
|
. /etc/zprofile
|
|
else
|
|
emulate bash
|
|
alias shopt=false
|
|
. /etc/profile
|
|
unalias shopt
|
|
emulate zsh
|
|
fi
|
|
if test -r /etc/zprofile.local; then
|
|
. /etc/zprofile.local
|
|
fi
|
|
else
|
|
# on non-nixos we just source the global /etc/zprofile as if we did
|
|
# not use the configure flag
|
|
if test -r /etc/zprofile; then
|
|
. /etc/zprofile
|
|
fi
|
|
fi
|
|
EOF
|
|
$out/bin/zsh -c "zcompile $out/etc/zprofile"
|
|
mv $out/etc/zprofile $out/etc/zprofile_zwc_is_used
|
|
'';
|
|
# XXX: patch zsh to take zwc if newer _or equal_
|
|
|
|
meta = {
|
|
description = "The Z shell";
|
|
longDescription = ''
|
|
Zsh is a UNIX command interpreter (shell) usable as an interactive login
|
|
shell and as a shell script command processor. Of the standard shells,
|
|
zsh most closely resembles ksh but includes many enhancements. Zsh has
|
|
command line editing, builtin spelling correction, programmable command
|
|
completion, shell functions (with autoloading), a history mechanism, and
|
|
a host of other features.
|
|
'';
|
|
license = "MIT-like";
|
|
homepage = http://www.zsh.org/;
|
|
maintainers = with stdenv.lib.maintainers; [ chaoflow pSub ];
|
|
platforms = stdenv.lib.platforms.unix;
|
|
};
|
|
|
|
passthru = {
|
|
shellPath = "/bin/zsh";
|
|
};
|
|
}
|