2022-01-09 11:56:36 +00:00
|
|
|
{ lib
|
|
|
|
, stdenv
|
|
|
|
, fetchurl
|
|
|
|
, fetchpatch
|
|
|
|
, autoreconfHook
|
|
|
|
, yodl
|
|
|
|
, perl
|
|
|
|
, groff
|
|
|
|
, util-linux
|
|
|
|
, texinfo
|
|
|
|
, ncurses
|
|
|
|
, pcre
|
2023-05-24 14:08:09 +00:00
|
|
|
, pkg-config
|
2022-04-30 21:39:45 +00:00
|
|
|
, buildPackages
|
|
|
|
, nixosTests
|
|
|
|
}:
|
2009-11-18 09:39:59 +00:00
|
|
|
|
2021-07-17 20:39:28 +00:00
|
|
|
let
|
2022-05-26 01:18:43 +00:00
|
|
|
version = "5.9";
|
2021-07-17 20:39:28 +00:00
|
|
|
in
|
|
|
|
|
|
|
|
stdenv.mkDerivation {
|
|
|
|
pname = "zsh";
|
|
|
|
inherit version;
|
2022-05-16 22:59:32 +00:00
|
|
|
outputs = [ "out" "doc" "info" "man" ];
|
2021-07-17 20:39:28 +00:00
|
|
|
|
|
|
|
src = fetchurl {
|
|
|
|
url = "mirror://sourceforge/zsh/zsh-${version}.tar.xz";
|
2022-05-26 01:18:43 +00:00
|
|
|
sha256 = "sha256-m40ezt1bXoH78ZGOh2dSp92UjgXBoNuhCrhjhC1FrNU=";
|
2021-07-17 20:39:28 +00:00
|
|
|
};
|
2021-07-14 15:10:11 +00:00
|
|
|
|
2021-09-03 12:00:00 +00:00
|
|
|
patches = [
|
|
|
|
# fix location of timezone data for TZ= completion
|
|
|
|
./tz_completion.patch
|
2023-09-04 23:27:25 +00:00
|
|
|
# Fixes configure misdetection when using clang 16, resulting in broken subshells on Darwin.
|
|
|
|
# This patch can be dropped with the next release of zsh.
|
|
|
|
(fetchpatch {
|
|
|
|
url = "https://github.com/zsh-users/zsh/commit/ab4d62eb975a4c4c51dd35822665050e2ddc6918.patch";
|
|
|
|
hash = "sha256-nXB4w7qqjZJC7/+CDxnNy6wu9qNwmS3ezjj/xK7JfeU=";
|
|
|
|
excludes = [ "ChangeLog" ];
|
|
|
|
})
|
2021-09-03 12:00:00 +00:00
|
|
|
];
|
|
|
|
|
2022-05-06 18:39:28 +00:00
|
|
|
strictDeps = true;
|
2023-05-24 14:08:09 +00:00
|
|
|
nativeBuildInputs = [ autoreconfHook perl groff texinfo pkg-config ]
|
2022-01-11 19:00:32 +00:00
|
|
|
++ lib.optionals stdenv.isLinux [ util-linux yodl ];
|
2022-01-09 11:56:36 +00:00
|
|
|
|
2016-03-09 13:13:31 +00:00
|
|
|
buildInputs = [ ncurses pcre ];
|
2011-12-29 19:46:47 +00:00
|
|
|
|
2018-02-07 01:56:54 +00:00
|
|
|
configureFlags = [
|
|
|
|
"--enable-maildir-support"
|
|
|
|
"--enable-multibyte"
|
|
|
|
"--with-tcsetpgrp"
|
|
|
|
"--enable-pcre"
|
2023-02-19 18:26:31 +00:00
|
|
|
"--enable-zshenv=${placeholder "out"}/etc/zshenv"
|
2020-11-29 00:04:06 +00:00
|
|
|
"--disable-site-fndir"
|
2023-07-10 15:30:19 +00:00
|
|
|
"--enable-function-subdirs"
|
2022-12-08 22:26:13 +00:00
|
|
|
] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform && !stdenv.hostPlatform.isStatic) [
|
2022-11-21 10:01:13 +00:00
|
|
|
# Also see: https://github.com/buildroot/buildroot/commit/2f32e668aa880c2d4a2cce6c789b7ca7ed6221ba
|
|
|
|
"zsh_cv_shared_environ=yes"
|
|
|
|
"zsh_cv_shared_tgetent=yes"
|
|
|
|
"zsh_cv_shared_tigetstr=yes"
|
|
|
|
"zsh_cv_sys_dynamic_clash_ok=yes"
|
|
|
|
"zsh_cv_sys_dynamic_rtld_global=yes"
|
|
|
|
"zsh_cv_sys_dynamic_execsyms=yes"
|
|
|
|
"zsh_cv_sys_dynamic_strip_exe=yes"
|
|
|
|
"zsh_cv_sys_dynamic_strip_lib=yes"
|
2018-02-07 01:56:54 +00:00
|
|
|
];
|
2015-11-19 15:52:08 +00:00
|
|
|
|
2023-07-05 22:04:33 +00:00
|
|
|
postPatch = ''
|
|
|
|
substituteInPlace Src/Modules/pcre.mdd \
|
|
|
|
--replace 'pcre-config' 'true'
|
|
|
|
'';
|
|
|
|
|
2023-05-24 14:08:09 +00:00
|
|
|
preConfigure = ''
|
|
|
|
# use pkg-config instead of pcre-config
|
|
|
|
configureFlagsArray+=("PCRECONF=''${PKG_CONFIG} libpcre")
|
|
|
|
'';
|
|
|
|
|
2015-11-19 15:52:08 +00:00
|
|
|
# the zsh/zpty module is not available on hydra
|
|
|
|
# so skip groups Y Z
|
2021-01-15 06:28:56 +00:00
|
|
|
checkFlags = map (T: "TESTNUM=${T}") (lib.stringToCharacters "ABCDEVW");
|
2008-11-22 16:57:16 +00:00
|
|
|
|
2011-12-29 19:46:47 +00:00
|
|
|
# XXX: think/discuss about this, also with respect to nixos vs nix-on-X
|
2022-05-16 22:59:32 +00:00
|
|
|
postInstall = ''
|
2022-01-09 11:56:36 +00:00
|
|
|
make install.info install.html
|
2012-01-18 20:16:00 +00:00
|
|
|
mkdir -p $out/etc/
|
2023-02-19 18:26:31 +00:00
|
|
|
cat > $out/etc/zshenv <<EOF
|
2011-12-29 20:09:30 +00:00
|
|
|
if test -e /etc/NIXOS; then
|
2023-02-19 18:26:31 +00:00
|
|
|
if test -r /etc/zshenv; then
|
|
|
|
. /etc/zshenv
|
2011-12-29 20:09:30 +00:00
|
|
|
else
|
|
|
|
emulate bash
|
|
|
|
alias shopt=false
|
2023-03-29 05:44:15 +00:00
|
|
|
if [ -z "\$__NIXOS_SET_ENVIRONMENT_DONE" ]; then
|
2023-02-19 18:26:31 +00:00
|
|
|
. /etc/set-environment
|
|
|
|
fi
|
2011-12-29 20:09:30 +00:00
|
|
|
unalias shopt
|
|
|
|
emulate zsh
|
|
|
|
fi
|
2023-02-19 18:26:31 +00:00
|
|
|
if test -r /etc/zshenv.local; then
|
|
|
|
. /etc/zshenv.local
|
2011-12-29 20:09:30 +00:00
|
|
|
fi
|
2011-12-29 19:46:47 +00:00
|
|
|
else
|
2023-02-19 18:26:31 +00:00
|
|
|
# on non-nixos we just source the global /etc/zshenv as if we did
|
2011-12-29 20:09:30 +00:00
|
|
|
# not use the configure flag
|
2023-02-19 18:26:31 +00:00
|
|
|
if test -r /etc/zshenv; then
|
|
|
|
. /etc/zshenv
|
2011-12-29 20:09:30 +00:00
|
|
|
fi
|
2011-12-29 19:46:47 +00:00
|
|
|
fi
|
|
|
|
EOF
|
2019-08-02 08:24:29 +00:00
|
|
|
${if stdenv.hostPlatform == stdenv.buildPlatform then ''
|
2023-02-19 18:26:31 +00:00
|
|
|
$out/bin/zsh -c "zcompile $out/etc/zshenv"
|
2019-08-02 08:24:29 +00:00
|
|
|
'' else ''
|
2023-02-19 18:26:31 +00:00
|
|
|
${lib.getBin buildPackages.zsh}/bin/zsh -c "zcompile $out/etc/zshenv"
|
2019-08-02 08:24:29 +00:00
|
|
|
''}
|
2023-02-19 18:26:31 +00:00
|
|
|
mv $out/etc/zshenv $out/etc/zshenv_zwc_is_used
|
2022-05-31 16:55:19 +00:00
|
|
|
|
|
|
|
rm $out/bin/zsh-${version}
|
2022-05-16 22:59:32 +00:00
|
|
|
mkdir -p $out/share/doc/
|
|
|
|
mv $out/share/zsh/htmldoc $out/share/doc/zsh-$version
|
2008-11-22 16:57:16 +00:00
|
|
|
'';
|
2011-12-29 19:46:47 +00:00
|
|
|
# XXX: patch zsh to take zwc if newer _or equal_
|
2011-12-29 19:46:43 +00:00
|
|
|
|
2023-07-10 15:30:19 +00:00
|
|
|
postFixup = ''
|
|
|
|
HOST_PATH=$out/bin:$HOST_PATH patchShebangs --host $out/share/zsh/*/functions
|
|
|
|
'';
|
|
|
|
|
2011-12-29 19:46:43 +00:00
|
|
|
meta = {
|
2014-06-23 11:07:28 +00:00
|
|
|
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.
|
|
|
|
'';
|
2011-12-29 19:46:43 +00:00
|
|
|
license = "MIT-like";
|
2020-10-02 07:58:50 +00:00
|
|
|
homepage = "https://www.zsh.org/";
|
2022-05-26 01:18:43 +00:00
|
|
|
maintainers = with lib.maintainers; [ pSub artturin ];
|
2021-01-15 06:28:56 +00:00
|
|
|
platforms = lib.platforms.unix;
|
2023-08-04 00:13:11 +00:00
|
|
|
mainProgram = "zsh";
|
2011-12-29 19:46:43 +00:00
|
|
|
};
|
2016-05-14 13:03:47 +00:00
|
|
|
|
|
|
|
passthru = {
|
|
|
|
shellPath = "/bin/zsh";
|
2022-04-30 21:39:45 +00:00
|
|
|
tests = {
|
|
|
|
inherit (nixosTests) zsh-history oh-my-zsh;
|
|
|
|
};
|
2016-05-14 13:03:47 +00:00
|
|
|
};
|
2008-11-22 16:57:16 +00:00
|
|
|
}
|