about summary refs log tree commit diff
path: root/nixpkgs/pkgs/shells
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2022-01-03 23:55:00 +0000
committerAlyssa Ross <hi@alyssa.is>2022-02-19 11:03:39 +0000
commitf4cf97a04cd5d0b86aa46baec9fb228a8f671c03 (patch)
tree28192415ff39a661d0001563bf81cc93fa25d16d /nixpkgs/pkgs/shells
parentf8422837c9bde058e8f2de37702e7e94b2226040 (diff)
parent18c84ea816348e2a098390101b92d1e39a9dbd45 (diff)
downloadnixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.gz
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.bz2
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.lz
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.xz
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.tar.zst
nixlib-f4cf97a04cd5d0b86aa46baec9fb228a8f671c03.zip
Merge commit '18c84ea816348e2a098390101b92d1e39a9dbd45'
Conflicts:
	nixpkgs/nixos/modules/misc/documentation.nix
	nixpkgs/pkgs/applications/networking/browsers/firefox/packages.nix
	nixpkgs/pkgs/applications/window-managers/sway/default.nix
	nixpkgs/pkgs/build-support/rust/build-rust-package/default.nix
	nixpkgs/pkgs/development/go-modules/generic/default.nix
	nixpkgs/pkgs/development/interpreters/ruby/default.nix
	nixpkgs/pkgs/development/interpreters/ruby/patchsets.nix
	nixpkgs/pkgs/development/libraries/boehm-gc/7.6.6.nix
	nixpkgs/pkgs/development/python-modules/django-mailman3/default.nix
	nixpkgs/pkgs/servers/mail/mailman/web.nix
	nixpkgs/pkgs/top-level/aliases.nix
	nixpkgs/pkgs/top-level/all-packages.nix
	nixpkgs/pkgs/top-level/impure.nix
Diffstat (limited to 'nixpkgs/pkgs/shells')
-rw-r--r--nixpkgs/pkgs/shells/bash/4.4.nix140
-rw-r--r--nixpkgs/pkgs/shells/bash/bash-4.4-patches.nix27
-rw-r--r--nixpkgs/pkgs/shells/bash/bash-5.1-patches.nix4
-rw-r--r--nixpkgs/pkgs/shells/bash/cygwin-bash-4.4.11-2.src.patch607
-rw-r--r--nixpkgs/pkgs/shells/bash/nix-bash-completions/default.nix2
-rw-r--r--nixpkgs/pkgs/shells/bash/pgrp-pipe-4.4.patch15
-rwxr-xr-xnixpkgs/pkgs/shells/bash/update-patch-set.sh2
-rw-r--r--nixpkgs/pkgs/shells/elvish/default.nix8
-rw-r--r--nixpkgs/pkgs/shells/fish/default.nix5
-rw-r--r--nixpkgs/pkgs/shells/fish/plugins/foreign-env/default.nix2
-rw-r--r--nixpkgs/pkgs/shells/fish/plugins/fzf-fish.nix4
-rw-r--r--nixpkgs/pkgs/shells/fish/wrapper.nix2
-rw-r--r--nixpkgs/pkgs/shells/hilbish/default.nix17
-rw-r--r--nixpkgs/pkgs/shells/loksh/default.nix4
-rw-r--r--nixpkgs/pkgs/shells/nsh/default.nix29
-rw-r--r--nixpkgs/pkgs/shells/nushell/default.nix8
-rw-r--r--nixpkgs/pkgs/shells/oil/default.nix5
-rw-r--r--nixpkgs/pkgs/shells/oksh/default.nix4
-rw-r--r--nixpkgs/pkgs/shells/pash/default.nix2
-rw-r--r--nixpkgs/pkgs/shells/powershell/default.nix13
-rw-r--r--nixpkgs/pkgs/shells/tcsh/default.nix27
-rw-r--r--nixpkgs/pkgs/shells/xonsh/default.nix7
-rw-r--r--nixpkgs/pkgs/shells/zsh/antigen/default.nix2
-rw-r--r--nixpkgs/pkgs/shells/zsh/default.nix9
-rw-r--r--nixpkgs/pkgs/shells/zsh/nix-zsh-completions/default.nix1
-rw-r--r--nixpkgs/pkgs/shells/zsh/oh-my-zsh/default.nix6
-rw-r--r--nixpkgs/pkgs/shells/zsh/pure-prompt/default.nix4
-rw-r--r--nixpkgs/pkgs/shells/zsh/spaceship-prompt/default.nix4
-rw-r--r--nixpkgs/pkgs/shells/zsh/zinit/default.nix6
-rw-r--r--nixpkgs/pkgs/shells/zsh/zsh-autocomplete/default.nix27
-rw-r--r--nixpkgs/pkgs/shells/zsh/zsh-better-npm-completion/default.nix25
-rw-r--r--nixpkgs/pkgs/shells/zsh/zsh-deer/default.nix6
-rw-r--r--nixpkgs/pkgs/shells/zsh/zsh-fast-syntax-highlighting/default.nix4
-rw-r--r--nixpkgs/pkgs/shells/zsh/zsh-fzf-tab/default.nix6
-rw-r--r--nixpkgs/pkgs/shells/zsh/zsh-vi-mode/default.nix27
35 files changed, 197 insertions, 864 deletions
diff --git a/nixpkgs/pkgs/shells/bash/4.4.nix b/nixpkgs/pkgs/shells/bash/4.4.nix
deleted file mode 100644
index 84cbba8eac4a..000000000000
--- a/nixpkgs/pkgs/shells/bash/4.4.nix
+++ /dev/null
@@ -1,140 +0,0 @@
-{ lib, stdenv, buildPackages
-, fetchurl, binutils ? null, bison, autoconf, util-linux
-
-# patch for cygwin requires readline support
-, interactive ? stdenv.isCygwin, readline70 ? null
-, withDocs ? false, texinfo ? null
-}:
-
-with lib;
-
-assert interactive -> readline70 != null;
-assert withDocs -> texinfo != null;
-assert stdenv.hostPlatform.isDarwin -> binutils != null;
-
-# Note: this package is used for bootstrapping fetchurl, and thus
-# cannot use fetchpatch! All mutable patches (generated by GitHub or
-# cgit) that are needed here should be included directly in Nixpkgs as
-# files.
-
-let
-  upstreamPatches = import ./bash-4.4-patches.nix (nr: sha256: fetchurl {
-    url = "mirror://gnu/bash/bash-4.4-patches/bash44-${nr}";
-    inherit sha256;
-  });
-in
-
-stdenv.mkDerivation rec {
-  name = "bash-${optionalString interactive "interactive-"}${version}-p${toString (builtins.length upstreamPatches)}";
-  version = "4.4";
-
-  src = fetchurl {
-    url = "mirror://gnu/bash/bash-${version}.tar.gz";
-    sha256 = "1jyz6snd63xjn6skk7za6psgidsd53k05cr3lksqybi0q6936syq";
-  };
-
-  hardeningDisable = [ "format" ];
-
-  outputs = [ "out" "dev" "man" "doc" "info" ];
-
-  NIX_CFLAGS_COMPILE = ''
-    -DSYS_BASHRC="/etc/bashrc"
-    -DSYS_BASH_LOGOUT="/etc/bash_logout"
-    -DDEFAULT_PATH_VALUE="/no-such-path"
-    -DSTANDARD_UTILS_PATH="/no-such-path"
-    -DNON_INTERACTIVE_LOGIN_SHELLS
-    -DSSH_SOURCE_BASHRC
-  '';
-
-  patchFlags = [ "-p0" ];
-
-  patches = upstreamPatches
-    ++ [ ./pgrp-pipe-4.4.patch ]
-    ++ optional stdenv.hostPlatform.isCygwin ./cygwin-bash-4.4.11-2.src.patch
-    # https://lists.gnu.org/archive/html/bug-bash/2016-10/msg00006.html
-    ++ optional stdenv.hostPlatform.isMusl (fetchurl {
-      url = "https://lists.gnu.org/archive/html/bug-bash/2016-10/patchJxugOXrY2y.patch";
-      sha256 = "1m4v9imidb1cc1h91f2na0b8y9kc5c5fgmpvy9apcyv2kbdcghg1";
-    });
-
-  configureFlags = [
-    (if interactive then "--with-installed-readline" else "--disable-readline")
-  ] ++ optionals (stdenv.hostPlatform != stdenv.buildPlatform) [
-    "bash_cv_job_control_missing=nomissing"
-    "bash_cv_sys_named_pipes=nomissing"
-    "bash_cv_getcwd_malloc=yes"
-  ] ++ optionals stdenv.hostPlatform.isCygwin [
-    "--without-libintl-prefix"
-    "--without-libiconv-prefix"
-    "--with-installed-readline"
-    "bash_cv_dev_stdin=present"
-    "bash_cv_dev_fd=standard"
-    "bash_cv_termcap_lib=libncurses"
-  ] ++ optionals (stdenv.hostPlatform.libc == "musl") [
-    "--without-bash-malloc"
-    "--disable-nls"
-  ];
-
-  # Note: Bison is needed because the patches above modify parse.y.
-  depsBuildBuild = [ buildPackages.stdenv.cc ];
-  nativeBuildInputs = [ bison ]
-    ++ optional withDocs texinfo
-    ++ optional stdenv.hostPlatform.isDarwin binutils
-    ++ optional (stdenv.hostPlatform.libc == "musl") autoconf;
-
-  buildInputs = optional interactive readline70;
-
-  # Bash randomly fails to build because of a recursive invocation to
-  # build `version.h'.
-  enableParallelBuilding = false;
-
-  makeFlags = optional stdenv.hostPlatform.isCygwin [
-    "LOCAL_LDFLAGS=-Wl,--export-all,--out-implib,libbash.dll.a"
-    "SHOBJ_LIBS=-lbash"
-  ];
-
-  checkInputs = [ util-linux ];
-  doCheck = false; # dependency cycle, needs to be interactive
-
-  postInstall = ''
-    ln -s bash "$out/bin/sh"
-    rm -f $out/lib/bash/Makefile.inc
-  '';
-
-  postFixup = if interactive
-    then ''
-      substituteInPlace "$out/bin/bashbug" \
-        --replace '${stdenv.shell}' "$out/bin/bash"
-    ''
-    # most space is taken by locale data
-    else ''
-      rm -rf "$out/share" "$out/bin/bashbug"
-    '';
-
-  meta = with lib; {
-    homepage = "https://www.gnu.org/software/bash/";
-    description =
-      "GNU Bourne-Again Shell, the de facto standard shell on Linux" +
-        (if interactive then " (for interactive use)" else "");
-
-    longDescription = ''
-      Bash is the shell, or command language interpreter, that will
-      appear in the GNU operating system.  Bash is an sh-compatible
-      shell that incorporates useful features from the Korn shell
-      (ksh) and C shell (csh).  It is intended to conform to the IEEE
-      POSIX P1003.2/ISO 9945.2 Shell and Tools standard.  It offers
-      functional improvements over sh for both programming and
-      interactive use.  In addition, most sh scripts can be run by
-      Bash without modification.
-    '';
-
-    license = licenses.gpl3Plus;
-
-    platforms = platforms.all;
-
-  };
-
-  passthru = {
-    shellPath = "/bin/bash";
-  };
-}
diff --git a/nixpkgs/pkgs/shells/bash/bash-4.4-patches.nix b/nixpkgs/pkgs/shells/bash/bash-4.4-patches.nix
deleted file mode 100644
index a79ec90213a0..000000000000
--- a/nixpkgs/pkgs/shells/bash/bash-4.4-patches.nix
+++ /dev/null
@@ -1,27 +0,0 @@
-# Automatically generated by `update-patch-set.sh'; do not edit.
-
-patch: [
-(patch "001" "03vzy7qwjdd5qvl3ydg99naazas2qmyd0yhnrflgjbbm64axja1y")
-(patch "002" "0lrwq6vyqism3yqv9s7kzaf3dsl4q5w9r5svcqz279qp7qca083h")
-(patch "003" "1chqww2rj6g42b8s60q5zlzy0jzp684jkpsbrbfy1vzxja8mmpsi")
-(patch "004" "1cy8abf96hkrjhw921ndr0shlcnc52bg45rn6xri4v5clhq0l25d")
-(patch "005" "0a8515kyk4zsgmvlqvlganjfr7pq0j6kzpr4d6xx02kpbdr4n7i2")
-(patch "006" "1f24wgqngmj2mrj9yibwvc2zvlmn5xi53mnw777g3l40c4m2x3ka")
-(patch "007" "1bzdsnqaf05gdbqpsixhan8vygjxpcxlz1dd8d9f5jdznw3wq76y")
-(patch "008" "1firw915mjm03hbbw9a70ch3cpgrgnvqjpllgdnn6csr8q04f546")
-(patch "009" "0g1l56kvw61rpw7dqa9fcl9llkl693h73g631hrhxlm030ddssqb")
-(patch "010" "01lfhrkdsdkdz8ypzapr614ras23x7ckjnr60aa5bzkaqprccrc4")
-(patch "011" "038p7mhnq9m65g505hi3827jkf9f35nd1cy00w8mwafpyxp44mnx")
-(patch "012" "0gh6lbb1rwpk44pvbamm6vzdfi50xnwkqd9v7s8cjwk3pz973hps")
-(patch "013" "1djkx0w9v62q78gz3jsvamj1jq53i6hbfrfhhsw86ihwpjnfy98v")
-(patch "014" "0z5ikcq9zyxw79d0z36r5p0mspnb5piavbv03jmlan1wnknmrxx7")
-(patch "015" "09n307fi1j257abhm295k6ksmnzw47ka2zhnr0i5lbdnpvn04xnk")
-(patch "016" "1cgi1y6mifm8hsgv4avj5ih76535js3qba1sqwbfvp7si76927sh")
-(patch "017" "0w6jpj2giakji1ir83rpkx1y7n7xqppah3j748m6dm38hywr0gvp")
-(patch "018" "1k58h4wxbsg7r4rwhrvzx5hfbapba2nxjysbhh6qp6ki5ys99i2v")
-(patch "019" "07n1i5610lbs672x1s8g82qn3qfj06s0ip3z80sri0g8vxp0s5r7")
-(patch "020" "0b2jk5n1af1vh590qfc52hv65mafb4vl1xv26s8j5a3byb5y4h0q")
-(patch "021" "1hblcd2xmqqlp0idnavw66570n7m0yv5rbbr873c2gkn982mk3xx")
-(patch "022" "0yfbjzr79vzjs2hyi5m8iy2b38fq7vikdfa4zqdvjsp36q4iycs5")
-(patch "023" "1dlism6qdx60nvzj0v7ndr7lfahl4a8zmzckp13hqgdx7xpj7v2g")
-]
diff --git a/nixpkgs/pkgs/shells/bash/bash-5.1-patches.nix b/nixpkgs/pkgs/shells/bash/bash-5.1-patches.nix
index aa5ad75fbc70..e6e9461bcbef 100644
--- a/nixpkgs/pkgs/shells/bash/bash-5.1-patches.nix
+++ b/nixpkgs/pkgs/shells/bash/bash-5.1-patches.nix
@@ -9,4 +9,8 @@ patch: [
 (patch "006" "051x8wlwrqk0yr0zg378vh824iklfl5g9pkmcdf62qp8gn9pvqbm")
 (patch "007" "0fir80pp1gmlpadmqcgkrv4y119pc7xllchjzg05fd7px73viz5c")
 (patch "008" "1lfjgshk8i9vch92p5wgc9r90j3phw79aa7gbai89w183b2z6b7j")
+(patch "009" "1vn36dzd9g4y1h3jiss6418crla0rbcd0d6wwsyv9d5l7aaxlp74")
+(patch "010" "0amfmvbzsand7bdypylkjdpcp88fa3cplfshn7vyzv2ff2rdgj52")
+(patch "011" "0yq24abb4fzfxqnwl20b330sxl9lr9ds0nc4yi30f81l94b1y6aq")
+(patch "012" "165bff97ffih49vfs4mkr5w3z5gn1w6zfyrf773iajkw6v48kw8h")
 ]
diff --git a/nixpkgs/pkgs/shells/bash/cygwin-bash-4.4.11-2.src.patch b/nixpkgs/pkgs/shells/bash/cygwin-bash-4.4.11-2.src.patch
deleted file mode 100644
index 488373109625..000000000000
--- a/nixpkgs/pkgs/shells/bash/cygwin-bash-4.4.11-2.src.patch
+++ /dev/null
@@ -1,607 +0,0 @@
---- bashline.c	2017-01-23 13:28:06.955247200 -0600
-+++ bashline.c	2017-01-23 13:55:07.992877600 -0600
-@@ -76,6 +76,16 @@
- #  include "pcomplete.h"
- #endif
- 
-+#if __CYGWIN__
-+#  ifdef __x86_64__
-+#    define IMP(x) __imp_##x
-+#  else
-+#    define IMP(x) _imp__##x
-+#  endif
-+#else
-+#  define IMP(x) x
-+#endif
-+
- /* These should agree with the defines for emacs_mode and vi_mode in
-    rldefs.h, even though that's not a public readline header file. */
- #ifndef EMACS_EDITING_MODE
-@@ -271,6 +281,11 @@ int no_empty_command_completion;
-    are the only possible matches, even if FIGNORE says to. */
- int force_fignore = 1;
- 
-+#if __CYGWIN__
-+/* If set, shorten "foo.exe" to "foo" when they are the same file.  */
-+int completion_strip_exe;
-+#endif /* __CYGWIN__ */
-+
- /* Perform spelling correction on directory names during word completion */
- int dircomplete_spelling = 0;
- 
-@@ -498,11 +513,12 @@ initialize_readline ()
-   kseq[0] = CTRL('J');
-   kseq[1] = '\0';
-   func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
--  if (func == rl_vi_editing_mode)
-+  extern rl_command_func_t *IMP(rl_vi_editing_mode);
-+  if (func == rl_vi_editing_mode || func == IMP(rl_vi_editing_mode))
-     rl_unbind_key_in_map (CTRL('J'), emacs_meta_keymap);
-   kseq[0] = CTRL('M');
-   func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
--  if (func == rl_vi_editing_mode)
-+  if (func == rl_vi_editing_mode || func == IMP(rl_vi_editing_mode))
-     rl_unbind_key_in_map (CTRL('M'), emacs_meta_keymap);
- #if defined (VI_MODE)
-   rl_unbind_key_in_map (CTRL('E'), vi_movement_keymap);
-@@ -521,7 +537,8 @@ initialize_readline ()
-   kseq[0] = '~';
-   kseq[1] = '\0';
-   func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
--  if (func == 0 || func == rl_tilde_expand)
-+  extern rl_command_func_t *IMP(rl_tilde_expand);
-+  if (func == 0 || func == rl_tilde_expand || func == IMP(rl_tilde_expand))
-     rl_bind_keyseq_in_map (kseq, bash_complete_username, emacs_meta_keymap);
- 
-   rl_bind_key_if_unbound_in_map ('~', bash_possible_username_completions, emacs_ctlx_keymap);
-@@ -544,7 +561,8 @@ initialize_readline ()
-   kseq[0] = TAB;
-   kseq[1] = '\0';
-   func = rl_function_of_keyseq (kseq, emacs_meta_keymap, (int *)NULL);
--  if (func == 0 || func == rl_tab_insert)
-+  extern rl_command_func_t *IMP(rl_tab_insert);
-+  if (func == 0 || func == rl_tab_insert || func == IMP(rl_tab_insert))
-     rl_bind_key_in_map (TAB, dynamic_complete_history, emacs_meta_keymap);
- 
-   /* Tell the completer that we want a crack first. */
-@@ -2194,6 +2212,21 @@ globword:
- 
-       if (match && executable_completion ((searching_path ? val : cval), searching_path))
- 	{
-+#if __CYGWIN__
-+	  if (completion_strip_exe)
-+	    {
-+	      size_t val_len = strlen (val);
-+	      char *candidate;
-+	      if (val_len > 4 && !strcasecmp (&val[val_len - 4], ".exe")
-+		  && (candidate = strdup (val)))
-+		{
-+		  candidate[val_len - 4] = '\0';
-+		  if (same_file (val, candidate, NULL, NULL))
-+		    temp[strlen (temp) - 4] = '\0';
-+		  free (candidate);
-+		}
-+	    }
-+#endif
- 	  if (cval != val)
- 	    free (cval);
- 	  free (val);
-@@ -2929,6 +2962,17 @@ test_for_directory (name)
-   int r;
- 
-   fn = bash_tilde_expand (name, 0);
-+#if __CYGWIN
-+  /* stat("//server") can only be successful as a directory, but can take
-+     seconds to time out on failure.  It is much faster to assume that
-+     "//server" is a valid name than it is to wait for a stat, even if it
-+     gives false positives on bad names.  */
-+  if (fn[0] == '/' && fn[1] == '/' && ! strchr (&fn[2], '/'))
-+    {
-+      free (fn);
-+      return 1;
-+    }
-+#endif
-   r = file_isdir (fn);
-   free (fn);
- 
---- builtins/read.def	2017-01-23 13:28:07.017686500 -0600
-+++ builtins/read.def	2017-01-23 13:55:07.992877600 -0600
-@@ -85,7 +85,6 @@ $END
- 
- #ifdef __CYGWIN__
- #  include <fcntl.h>
--#  include <io.h>
- #endif
- 
- #include "../bashintl.h"
-@@ -530,10 +529,6 @@ read_builtin (list)
-       fflush (stderr);
-     }
- 
--#if defined (__CYGWIN__) && defined (O_TEXT)
--  setmode (0, O_TEXT);
--#endif
--
-   ps2 = 0;
-   for (print_ps2 = eof = retval = 0;;)
-     {
-@@ -664,6 +659,14 @@ read_builtin (list)
-       if (c == '\0' && delim != '\0')
- 	continue;		/* skip NUL bytes in input */
- 
-+#ifdef __CYGWIN__
-+      {
-+        extern igncr;
-+	if (igncr && c == '\r' && delim != '\r')
-+	  continue; /* skip carriage return */
-+      }
-+#endif
-+
-       if ((skip_ctlesc == 0 && c == CTLESC) || (skip_ctlnul == 0 && c == CTLNUL))
- 	{
- 	  saw_escape++;
---- builtins/set.def	2016-06-02 19:10:10.000000000 -0500
-+++ builtins/set.def	2017-01-23 13:55:07.992877600 -0600
-@@ -56,6 +56,13 @@ extern int dont_save_function_defs;
- #if defined (READLINE)
- extern int no_line_editing;
- #endif /* READLINE */
-+#ifdef __CYGWIN__
-+extern int igncr;
-+static int set_minus_o_option_maybe (int, const char *, int);
-+#  define INTERACTIVE_ONLY ,1
-+#else
-+#  define INTERACTIVE_ONLY
-+#endif
- 
- $BUILTIN set
- $FUNCTION set_builtin
-@@ -92,6 +99,9 @@ Options:
- #if defined (HISTORY)
-           history      enable command history
- #endif
-+#ifdef __CYGWIN__
-+          igncr        on Cygwin, ignore \r in line endings
-+#endif
-           ignoreeof    the shell will not exit upon reading EOF
-           interactive-comments
-                        allow comments to appear in interactive commands
-@@ -192,29 +202,39 @@ const struct {
-   int *variable;
-   setopt_set_func_t *set_func;
-   setopt_get_func_t *get_func;
-+#ifdef __CYGWIN__
-+  /* Cygwin users have taken to exporting SHELLOPTS for the cygwin-specific
-+     igncr. As a result, we want to ensure SHELLOPTS parsing does not turn
-+     on interactive options when exported from an interactive shell, but
-+     parse in a non-interactive setting, so as not to break POSIX /bin/sh */
-+  int interactive_only;
-+#endif
- } o_options[] = {
-   { "allexport",  'a', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
- #if defined (BRACE_EXPANSION)
-   { "braceexpand",'B', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
- #endif
- #if defined (READLINE)
--  { "emacs",     '\0', (int *)NULL, set_edit_mode, get_edit_mode },
-+  { "emacs",     '\0', (int *)NULL, set_edit_mode, get_edit_mode INTERACTIVE_ONLY },
- #endif
-   { "errexit",	  'e', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-   { "errtrace",	  'E', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-   { "functrace",  'T', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-   { "hashall",    'h', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
- #if defined (BANG_HISTORY)
--  { "histexpand", 'H', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-+  { "histexpand", 'H', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL INTERACTIVE_ONLY },
- #endif /* BANG_HISTORY */
- #if defined (HISTORY)
--  { "history",   '\0', &enable_history_list, bash_set_history, (setopt_get_func_t *)NULL },
-+  { "history",   '\0', &enable_history_list, bash_set_history, (setopt_get_func_t *)NULL INTERACTIVE_ONLY },
-+#endif
-+#ifdef __CYGWIN__
-+  { "igncr", '\0', &igncr, NULL, (setopt_get_func_t *)NULL },
- #endif
-   { "ignoreeof", '\0', &ignoreeof, set_ignoreeof, (setopt_get_func_t *)NULL },
-   { "interactive-comments", '\0', &interactive_comments, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
-   { "keyword",    'k', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
- #if defined (JOB_CONTROL)
--  { "monitor",	  'm', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-+  { "monitor",	  'm', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL INTERACTIVE_ONLY },
- #endif
-   { "noclobber",  'C', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-   { "noexec",	  'n', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-@@ -233,7 +253,7 @@ const struct {
-   { "privileged", 'p', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-   { "verbose",	  'v', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
- #if defined (READLINE)
--  { "vi",        '\0', (int *)NULL, set_edit_mode, get_edit_mode },
-+  { "vi",        '\0', (int *)NULL, set_edit_mode, get_edit_mode INTERACTIVE_ONLY },
- #endif
-   { "xtrace",	  'x', (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL  },
-   {(char *)NULL, 0 , (int *)NULL, (setopt_set_func_t *)NULL, (setopt_get_func_t *)NULL },
-@@ -455,6 +475,15 @@ int
- set_minus_o_option (on_or_off, option_name)
-      int on_or_off;
-      char *option_name;
-+#ifdef __CYGWIN__
-+{
-+  /* See Cygwin comments above. */
-+  return set_minus_o_option_maybe (on_or_off, option_name, 0);
-+}
-+static int
-+set_minus_o_option_maybe (int on_or_off, const char *option_name,
-+                          int avoid_interactive)
-+#endif /* __CYGWIN__ */
- {
-   register int i;
- 
-@@ -462,6 +491,10 @@ set_minus_o_option (on_or_off, option_na
-     {
-       if (STREQ (option_name, o_options[i].name))
- 	{
-+#ifdef __CYGWIN__
-+	  if (o_options[i].interactive_only && avoid_interactive)
-+	    return EXECUTION_SUCCESS;
-+#endif
- 	  if (o_options[i].letter == 0)
- 	    {
- 	      previous_option_value = GET_BINARY_O_OPTION_VALUE (i, o_options[i].name);
-@@ -588,7 +621,11 @@ parse_shellopts (value)
-   vptr = 0;
-   while (vname = extract_colon_unit (value, &vptr))
-     {
-+#ifdef __CYGWIN__
-+      set_minus_o_option_maybe (FLAG_ON, vname, !interactive_shell);
-+#else
-       set_minus_o_option (FLAG_ON, vname);
-+#endif
-       free (vname);
-     }
- }
---- builtins/shopt.def	2016-05-06 14:00:02.000000000 -0500
-+++ builtins/shopt.def	2017-01-23 13:55:07.992877600 -0600
-@@ -92,6 +92,10 @@ extern int glob_asciirange;
- extern int lastpipe_opt;
- extern int inherit_errexit;
- 
-+#ifdef __CYGWIN__
-+extern int completion_strip_exe;
-+#endif
-+
- #if defined (EXTENDED_GLOB)
- extern int extended_glob;
- #endif
-@@ -169,6 +173,9 @@ static struct {
-   { "compat41", &shopt_compat41, set_compatibility_level },
-   { "compat42", &shopt_compat42, set_compatibility_level },
-   { "compat43", &shopt_compat43, set_compatibility_level },
-+#ifdef __CYGWIN__
-+  { "completion_strip_exe", &completion_strip_exe, NULL },
-+#endif
- #if defined (READLINE)
-   { "complete_fullquote", &complete_fullquote, (shopt_set_func_t *)NULL},
-   { "direxpand", &dircomplete_expand, shopt_set_complete_direxpand },
---- config-top.h	2016-05-19 13:34:02.000000000 -0500
-+++ config-top.h	2017-01-23 13:55:07.992877600 -0600
-@@ -87,10 +87,10 @@
- #define DEFAULT_BASHRC "~/.bashrc"
- 
- /* System-wide .bashrc file for interactive shells. */
--/* #define SYS_BASHRC "/etc/bash.bashrc" */
-+#define SYS_BASHRC "/etc/bash.bashrc"
- 
- /* System-wide .bash_logout for login shells. */
--/* #define SYS_BASH_LOGOUT "/etc/bash.bash_logout" */
-+#define SYS_BASH_LOGOUT "/etc/bash.bash_logout"
- 
- /* Define this to make non-interactive shells begun with argv[0][0] == '-'
-    run the startup files when not in posix mode. */
-@@ -100,7 +100,7 @@
-    sshd and source the .bashrc if so (like the rshd behavior).  This checks
-    for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment,
-    which can be fooled under certain not-uncommon circumstances. */
--/* #define SSH_SOURCE_BASHRC */
-+#define SSH_SOURCE_BASHRC
- 
- /* Define if you want the case-capitalizing operators (~[~]) and the
-    `capcase' variable attribute (declare -c). */
---- doc/Makefile.in	2015-12-06 18:55:56.000000000 -0600
-+++ doc/Makefile.in	2017-01-23 13:55:07.992877600 -0600
-@@ -189,7 +189,7 @@ bashref.html: $(BASHREF_FILES) $(HSUSER)
- 	$(MAKEINFO) --html --no-split -I$(TEXINPUTDIR) $(srcdir)/bashref.texi
- 
- bash.info: bashref.info
--	${SHELL} ${INFOPOST} < $(srcdir)/bashref.info > $@ ; \
-+	${SHELL} ${INFOPOST} < bashref.info > $@ ; \
- 
- bash.txt: bash.1
- bash.ps: bash.1
-@@ -252,9 +252,9 @@ install: info installdirs
- 	-$(INSTALL_DATA) $(srcdir)/bashbug.1 $(DESTDIR)$(man1dir)/bashbug${man1ext}
- 	-$(INSTALL_DATA) $(OTHER_DOCS) $(DESTDIR)$(docdir)
- # uncomment the next lines to install the builtins man page
--#	sed 's:bash\.1:man1/&:' $(srcdir)/builtins.1 > $${TMPDIR:-/var/tmp}/builtins.1
--#	-$(INSTALL_DATA) $${TMPDIR:-/var/tmp}/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext}
--#	-$(RM) $${TMPDIR:-/var/tmp}/builtins.1
-+	sed 's:bash\.1:man1/&:' $(srcdir)/builtins.1 > $${TMPDIR:-/var/tmp}/builtins.1
-+	-$(INSTALL_DATA) $${TMPDIR:-/var/tmp}/builtins.1 $(DESTDIR)$(man1dir)/bash_builtins${man1ext}
-+	-$(RM) $${TMPDIR:-/var/tmp}/builtins.1
- 	-if test -f bash.info; then d=.; else d=$(srcdir); fi; \
- 	  $(INSTALL_DATA) $$d/bash.info $(DESTDIR)$(infodir)/bash.info
- # run install-info if it is present to update the info directory
---- doc/bash.1	2016-08-26 08:45:17.000000000 -0500
-+++ doc/bash.1	2017-01-23 13:55:08.008447700 -0600
-@@ -9607,6 +9607,10 @@ filenames.
- This variable is set by default, which is the default bash behavior in
- versions through 4.2.
- .TP 8
-+.B completion_strip_exe
-+If set, whenever bash sees \fIfoo.exe\fP during completion, it checks if
-+\fIfoo\fP is the same file and strips the suffix.
-+.TP 8
- .B direxpand
- If set,
- .B bash
---- doc/bashref.texi	2016-09-07 16:13:36.000000000 -0500
-+++ doc/bashref.texi	2017-01-23 13:55:08.008447700 -0600
-@@ -5123,6 +5123,10 @@ filenames.
- This variable is set by default, which is the default Bash behavior in
- versions through 4.2.
- 
-+@item completion_strip_exe
-+If set, whenever bash sees @file{foo.exe} during completion, it checks if
-+@file{foo} is the same file and strips the suffix.
-+
- @item direxpand
- If set, Bash
- replaces directory names with the results of word expansion when performing
---- doc/builtins.1	2012-02-21 13:32:05.000000000 -0600
-+++ doc/builtins.1	2017-01-23 13:55:08.008447700 -0600
-@@ -19,6 +19,6 @@ shift, shopt, source, suspend, test, tim
- ulimit, umask, unalias, unset, wait \- bash built-in commands, see \fBbash\fR(1)
- .SH BASH BUILTIN COMMANDS
- .nr zZ 1
--.so bash.1
-+.so man1/bash.1
- .SH SEE ALSO
- bash(1), sh(1)
---- general.c	2016-08-11 10:16:56.000000000 -0500
-+++ general.c	2017-01-23 13:55:08.008447700 -0600
-@@ -48,6 +48,10 @@
- 
- #include <tilde/tilde.h>
- 
-+#ifdef __CYGWIN__
-+# include <sys/cygwin.h>
-+#endif
-+
- #if !defined (errno)
- extern int errno;
- #endif /* !errno */
-@@ -718,7 +722,8 @@ make_absolute (string, dot_path)
-     {
-       char pathbuf[PATH_MAX + 1];
- 
--      cygwin_conv_to_full_posix_path (string, pathbuf);
-+      cygwin_conv_path (CCP_WIN_A_TO_POSIX | CCP_ABSOLUTE, string, pathbuf,
-+			sizeof pathbuf);
-       result = savestring (pathbuf);
-     }
- #else
---- input.c	2015-09-24 18:49:23.000000000 -0500
-+++ input.c	2017-01-23 13:55:08.008447700 -0600
-@@ -44,6 +44,10 @@
- #include "quit.h"
- #include "trap.h"
- 
-+#ifdef __CYGWIN__
-+int igncr;
-+#endif
-+
- #if !defined (errno)
- extern int errno;
- #endif /* !errno */
-@@ -561,6 +565,19 @@ buffered_getchar ()
- {
-   CHECK_TERMSIG;
- 
-+#ifdef __CYGWIN__
-+  /* shopt igncr discards carriage returns from the input stream.
-+     If cr is the only character left in the buffer, recurse to pick
-+     up the next byte; otherwise flatten the buffer.  */
-+  if (igncr)
-+    {
-+      int ch;
-+      while ((ch = bufstream_getc (buffers[bash_input.location.buffered_fd]))
-+	     == '\r')
-+	;
-+      return ch;
-+    }
-+#endif
- #if !defined (DJGPP)
-   return (bufstream_getc (buffers[bash_input.location.buffered_fd]));
- #else
---- lib/sh/pathphys.c	2013-05-28 14:33:58.000000000 -0500
-+++ lib/sh/pathphys.c	2017-01-23 13:55:08.008447700 -0600
-@@ -35,6 +35,7 @@
- #include <stdio.h>
- #include <chartypes.h>
- #include <errno.h>
-+#include <stdlib.h>
- 
- #include "shell.h"
- 
-@@ -76,6 +77,9 @@ sh_physpath (path, flags)
-      char *path;
-      int flags;
- {
-+#ifdef __CYGWIN__
-+  return realpath (path, NULL);
-+#endif
-   char tbuf[PATH_MAX+1], linkbuf[PATH_MAX+1];
-   char *result, *p, *q, *qsave, *qbase, *workpath;
-   int double_slash_path, linklen, nlink;
-@@ -214,11 +218,7 @@ error:
- 	    {
- 	      q = result;
- 	      /* Duplicating some code here... */
--#if defined (__CYGWIN__)
--	      qbase = (ISALPHA((unsigned char)workpath[0]) && workpath[1] == ':') ? workpath + 3 : workpath + 1;
--#else
- 	      qbase = workpath + 1;
--#endif
- 	      double_slash_path = DOUBLE_SLASH (workpath);
- 	      qbase += double_slash_path;
-     
---- lib/sh/tmpfile.c	2016-08-11 10:05:58.000000000 -0500
-+++ lib/sh/tmpfile.c	2017-01-23 13:55:08.008447700 -0600
-@@ -101,7 +101,7 @@ get_tmpdir (flags)
-   if (tdir && (file_iswdir (tdir) == 0 || strlen (tdir) > PATH_MAX))
-     tdir = 0;
- 
--  if (tdir == 0)
-+  if (tdir == 0 || !file_iswdir (tdir))
-     tdir = get_sys_tmpdir ();
- 
- #if defined (HAVE_PATHCONF) && defined (_PC_NAME_MAX)
---- mksyntax.c	2012-07-29 18:48:38.000000000 -0500
-+++ mksyntax.c	2017-01-23 13:55:08.008447700 -0600
-@@ -29,13 +29,13 @@
- 
- #ifdef HAVE_UNISTD_H
- #  include <unistd.h>
-+#else
-+extern int optind;
-+extern char *optarg;
- #endif
- 
- #include "syntax.h"
- 
--extern int optind;
--extern char *optarg;
--
- #ifndef errno
- extern int errno;
- #endif
---- parse.y	2016-09-11 10:31:46.000000000 -0500
-+++ parse.y	2017-01-23 13:55:08.008447700 -0600
-@@ -1539,14 +1539,20 @@ yy_string_get ()
-   string = bash_input.location.string;
- 
-   /* If the string doesn't exist, or is empty, EOF found. */
--  if (string && *string)
-+  while (string && *string)
-     {
-       c = *string++;
-       bash_input.location.string = string;
-+#ifdef __CYGWIN__
-+      {
-+	extern int igncr;
-+	if (igncr && c == '\r')
-+	  continue;
-+      }
-+#endif
-       return (c);
-     }
--  else
--    return (EOF);
-+  return (EOF);
- }
- 
- static int
---- subst.c	2017-01-23 13:28:06.955247200 -0600
-+++ subst.c	2017-01-23 13:55:08.008447700 -0600
-@@ -43,6 +43,7 @@
- #include "posixstat.h"
- #include "bashintl.h"
- 
-+#define NEED_SH_SETLINEBUF_DECL
- #include "shell.h"
- #include "parser.h"
- #include "flags.h"
-@@ -5964,6 +5965,13 @@ read_comsub (fd, quoted, rflag)
- #endif
- 	  continue;
- 	}
-+#ifdef __CYGWIN__
-+      {
-+	extern int igncr;
-+	if (igncr && c == '\r')
-+	  continue;
-+      }
-+#endif
- 
-       /* Add the character to ISTRING, possibly after resizing it. */
-       RESIZE_MALLOCED_BUFFER (istring, istring_index, 2, istring_size, DEFAULT_ARRAY_SIZE);
-@@ -6088,6 +6096,28 @@ command_substitute (string, quoted)
-       goto error_exit;
-     }
- 
-+#ifdef __CYGWIN__
-+  /* Passing a pipe through std fds can cause hangs when talking to a
-+     non-cygwin child.  Move it.  */
-+  if (fildes[0] < 3)
-+    {
-+      int fd = fcntl (fildes[0], F_DUPFD, 3);
-+      close (fildes[0]);
-+      fildes[0] = fd;
-+    }
-+  if (fildes[1] < 3)
-+    {
-+      int fd = fcntl (fildes[1], F_DUPFD, 3);
-+      close (fildes[1]);
-+      fildes[1] = fd;
-+    }
-+  if (fildes[0] < 0 || fildes[1] < 0)
-+    {
-+      sys_error (_("cannot make pipe for command substitution"));
-+      goto error_exit;
-+    }
-+#endif /* __CYGWIN__ */
-+
-   old_pid = last_made_pid;
- #if defined (JOB_CONTROL)
-   old_pipeline_pgrp = pipeline_pgrp;
---- support/bashversion.c	2008-09-09 08:31:53.000000000 -0500
-+++ support/bashversion.c	2017-01-23 13:55:08.024037200 -0600
-@@ -26,6 +26,9 @@
- 
- #if defined (HAVE_UNISTD_H)
- #  include <unistd.h>
-+#else
-+extern int optind;
-+extern char *optarg;
- #endif
- 
- #include "bashansi.h"
-@@ -41,9 +44,6 @@
- #define LFLAG	0x0020
- #define XFLAG	0x0040
- 
--extern int optind;
--extern char *optarg;
--
- extern char *dist_version;
- extern int patch_level;
- 
---- support/mkversion.sh	2008-08-13 07:25:57.000000000 -0500
-+++ support/mkversion.sh	2017-01-23 13:55:08.024037200 -0600
-@@ -29,7 +29,7 @@ source_dir="."
- while [ $# -gt 0 ]; do
- 	case "$1" in
- 	-o)	shift; OUTFILE=$1; shift ;;
--	-b)	shift; inc_build=yes ;;
-+	-b)	shift; ;; # inc_build=yes ;; # hacked out for cygport
- 	-s)	shift; rel_status=$1; shift ;;
- 	-p)	shift; patch_level=$1; shift ;;
- 	-d)	shift; dist_version=$1; shift ;;
---- variables.c	2016-06-15 15:05:52.000000000 -0500
-+++ variables.c	2017-01-23 13:55:08.024037200 -0600
-@@ -5239,6 +5239,7 @@ sv_winsize (name)
- /* Update the value of HOME in the export environment so tilde expansion will
-    work on cygwin. */
- #if defined (__CYGWIN__)
-+void
- sv_home (name)
-      char *name;
- {
diff --git a/nixpkgs/pkgs/shells/bash/nix-bash-completions/default.nix b/nixpkgs/pkgs/shells/bash/nix-bash-completions/default.nix
index 2034eed1f5da..2e8b49385fb4 100644
--- a/nixpkgs/pkgs/shells/bash/nix-bash-completions/default.nix
+++ b/nixpkgs/pkgs/shells/bash/nix-bash-completions/default.nix
@@ -32,5 +32,7 @@ stdenv.mkDerivation rec {
     license = licenses.bsd3;
     platforms = platforms.all;
     maintainers = with maintainers; [ hedning ];
+    # Set a lower priority such that the newly provided completion from Nix 2.4 are preferred.
+    priority = 10;
   };
 }
diff --git a/nixpkgs/pkgs/shells/bash/pgrp-pipe-4.4.patch b/nixpkgs/pkgs/shells/bash/pgrp-pipe-4.4.patch
deleted file mode 100644
index 6cbdcab4b7c0..000000000000
--- a/nixpkgs/pkgs/shells/bash/pgrp-pipe-4.4.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff -u ./configure ../bash-4.4-fixed/configure
---- ./configure	2016-09-07 22:57:01.000000000 +0200
-+++ ../bash-4.4-fixed/configure	2020-01-08 14:10:26.316858174 +0100
-@@ -16064,10 +16064,7 @@
- solaris2*)	LOCAL_CFLAGS=-DSOLARIS ;;
- lynxos*)	LOCAL_CFLAGS=-DRECYCLES_PIDS ;;
- linux*)		LOCAL_LDFLAGS=-rdynamic		 # allow dynamic loading
--		case "`uname -r`" in
--		2.[456789]*|[34]*)	$as_echo "#define PGRP_PIPE 1" >>confdefs.h
-- ;;
--		esac ;;
-+		$as_echo "#define PGRP_PIPE 1" >>confdefs.h ;;
- *qnx6*)		LOCAL_CFLAGS="-Dqnx -Dqnx6" LOCAL_LIBS="-lncurses" ;;
- *qnx*)		LOCAL_CFLAGS="-Dqnx -F -3s" LOCAL_LDFLAGS="-3s" LOCAL_LIBS="-lunix -lncurses" ;;
- powerux*)	LOCAL_LIBS="-lgen" ;;
diff --git a/nixpkgs/pkgs/shells/bash/update-patch-set.sh b/nixpkgs/pkgs/shells/bash/update-patch-set.sh
index 03b00228822d..ee785cc83123 100755
--- a/nixpkgs/pkgs/shells/bash/update-patch-set.sh
+++ b/nixpkgs/pkgs/shells/bash/update-patch-set.sh
@@ -28,7 +28,7 @@ md5sum -c gpgkey.asc.md5
 gpg --import ./gpgkey.asc
 rm gpgkey.asc{,.md5}
 
-( echo "# Automatically generated by \`$(basename $0)'; do not edit." ;	\
+( echo "# Automatically generated by \`$(basename "$0")'; do not edit." ;	\
   echo "" ;								\
   echo "patch: [" )							\
 >> "$PATCH_LIST"
diff --git a/nixpkgs/pkgs/shells/elvish/default.nix b/nixpkgs/pkgs/shells/elvish/default.nix
index 961f765dd872..e94354d68045 100644
--- a/nixpkgs/pkgs/shells/elvish/default.nix
+++ b/nixpkgs/pkgs/shells/elvish/default.nix
@@ -2,9 +2,9 @@
 
 buildGoModule rec {
   pname = "elvish";
-  version = "0.16.3";
+  version = "0.17.0";
 
-  excludedPackages = [ "website" ];
+  subPackages = [ "cmd/elvish" ];
 
   ldflags = [ "-s" "-w" "-X github.com/elves/elvish/pkg/buildinfo.Version==${version}" "-X github.com/elves/elvish/pkg/buildinfo.Reproducible=true" ];
 
@@ -12,10 +12,10 @@ buildGoModule rec {
     owner = "elves";
     repo = pname;
     rev = "v${version}";
-    sha256 = "1na2fswqp4rbgvlagz9nj3cmlxavlhi2gj6k6jpjq05mcbkxr3bd";
+    sha256 = "sha256-F6yjfsEEBrD6kXUgbMrz+1mxrz0z+sdfeoyztpy7rEk=";
   };
 
-  vendorSha256 = "06rx09vs08d9arim53al73z22hb40xj2101kbvafz6wbyp6pqws1";
+  vendorSha256 = "sha256-810YVxO1rjeDV1XWvE4RmJjGOMdTlicnv7YbvKtoDbM=";
 
   doCheck = false;
 
diff --git a/nixpkgs/pkgs/shells/fish/default.nix b/nixpkgs/pkgs/shells/fish/default.nix
index c53a9ed0fe2d..cf264f11de8c 100644
--- a/nixpkgs/pkgs/shells/fish/default.nix
+++ b/nixpkgs/pkgs/shells/fish/default.nix
@@ -2,7 +2,6 @@
 , lib
 , fetchurl
 , coreutils
-, util-linux
 , which
 , gnused
 , gnugrep
@@ -253,8 +252,6 @@ let
       EOF
 
     '' + optionalString stdenv.isLinux ''
-      sed -e "s| ul| ${util-linux}/bin/ul|" \
-          -i "$out/share/fish/functions/__fish_print_help.fish"
       for cur in $out/share/fish/functions/*.fish; do
         sed -e "s|/usr/bin/getent|${getent}/bin/getent|" \
             -i "$cur"
@@ -273,7 +270,7 @@ let
 
     meta = with lib; {
       description = "Smart and user-friendly command line shell";
-      homepage = "http://fishshell.com/";
+      homepage = "https://fishshell.com/";
       license = licenses.gpl2;
       platforms = platforms.unix;
       maintainers = with maintainers; [ cole-h ];
diff --git a/nixpkgs/pkgs/shells/fish/plugins/foreign-env/default.nix b/nixpkgs/pkgs/shells/fish/plugins/foreign-env/default.nix
index 03435340d179..d0b5b77a03b1 100644
--- a/nixpkgs/pkgs/shells/fish/plugins/foreign-env/default.nix
+++ b/nixpkgs/pkgs/shells/fish/plugins/foreign-env/default.nix
@@ -2,7 +2,7 @@
 
 buildFishPlugin {
   pname = "foreign-env";
-  version = "git-20200209";
+  version = "unstable-2020-02-09";
 
   src = fetchFromGitHub {
     owner = "oh-my-fish";
diff --git a/nixpkgs/pkgs/shells/fish/plugins/fzf-fish.nix b/nixpkgs/pkgs/shells/fish/plugins/fzf-fish.nix
index 3547af490e6a..9fbc09a831db 100644
--- a/nixpkgs/pkgs/shells/fish/plugins/fzf-fish.nix
+++ b/nixpkgs/pkgs/shells/fish/plugins/fzf-fish.nix
@@ -2,13 +2,13 @@
 
 buildFishPlugin rec {
   pname = "fzf.fish";
-  version = "7.3";
+  version = "7.4";
 
   src = fetchFromGitHub {
     owner = "PatrickF1";
     repo = "fzf.fish";
     rev = "v${version}";
-    sha256 = "16mdfyznxjhv7x561srl559misn37a35d2q9fspxa7qg1d0sc3x9";
+    sha256 = "sha256-dngAKzyD+lmqmxsCSOMViyCgA/+Ve35gLtPS+Lgs8Pc=";
   };
 
   checkInputs = [ fzf fd util-linux ];
diff --git a/nixpkgs/pkgs/shells/fish/wrapper.nix b/nixpkgs/pkgs/shells/fish/wrapper.nix
index 6713a69d560e..f978f2bdfa4d 100644
--- a/nixpkgs/pkgs/shells/fish/wrapper.nix
+++ b/nixpkgs/pkgs/shells/fish/wrapper.nix
@@ -20,6 +20,6 @@ in writeShellScriptBin "fish" ''
     set --prepend fish_complete_path ${escapeShellArgs complPath}
     set --prepend fish_function_path ${escapeShellArgs funcPath}
     set --local fish_conf_source_path ${escapeShellArgs confPath}
-    for c in $fish_conf_source_path/*; source $c; end
+    for c in \$fish_conf_source_path/*; source \$c; end
   " "$@"
 '')
diff --git a/nixpkgs/pkgs/shells/hilbish/default.nix b/nixpkgs/pkgs/shells/hilbish/default.nix
index a4a54e45c636..55a28ceb8892 100644
--- a/nixpkgs/pkgs/shells/hilbish/default.nix
+++ b/nixpkgs/pkgs/shells/hilbish/default.nix
@@ -2,26 +2,25 @@
 
 buildGoModule rec {
   pname = "hilbish";
-  version = "0.6.0";
+  version = "0.7.1";
 
   src = fetchFromGitHub {
     owner = "Rosettea";
     repo = "Hilbish";
     rev = "v${version}";
-    sha256 = "sha256-ACHHHGT3VGnvZVi1UZb57+g/slcld5e3bh+DDhUVVpQ=";
+    sha256 = "sha256-YQNLv6/4I5WM/xhlWIjThgO23tN+ZCyJVZVatnIUllc=";
     fetchSubmodules = true;
   };
 
-  vendorSha256 = "sha256-SVGPMFpQjVOWCfiPpEmqhp6MEO0wqeyAZVyeNmTuXl0=";
+  vendorSha256 = "sha256-xzB6sqBnDuvqTFMmLcXdSj6UFWYzA54PxUBKrFKhyQk=";
 
   buildInputs = [ readline ];
 
-  ldflags = [ "-s" "-w" ];
-
-  postPatch = ''
-    substituteInPlace vars_linux.go \
-      --replace "/usr/share" "${placeholder "out"}/share/"
-  '';
+  ldflags = [
+    "-s"
+    "-w"
+    "-X main.dataDir=${placeholder "out"}/share/hilbish"
+  ];
 
   postInstall = ''
     mkdir -p "$out/share/hilbish"
diff --git a/nixpkgs/pkgs/shells/loksh/default.nix b/nixpkgs/pkgs/shells/loksh/default.nix
index d8463d1773c4..b9f7d5ef7e7f 100644
--- a/nixpkgs/pkgs/shells/loksh/default.nix
+++ b/nixpkgs/pkgs/shells/loksh/default.nix
@@ -9,14 +9,14 @@
 
 stdenv.mkDerivation rec {
   pname = "loksh";
-  version = "6.9";
+  version = "7.0";
 
   src = fetchFromGitHub {
     owner = "dimkr";
     repo = pname;
     rev = version;
     fetchSubmodules = true;
-    sha256 = "0x33plxqhh5202hgqidgccz5hpg8d2q71ylgnm437g60mfi9z0px";
+    sha256 = "sha256-q5RiY9/xEFCk+oHlxgNwDOB+TNjRWHKzU2kQH2LjCWY=";
   };
 
   nativeBuildInputs = [
diff --git a/nixpkgs/pkgs/shells/nsh/default.nix b/nixpkgs/pkgs/shells/nsh/default.nix
new file mode 100644
index 000000000000..881d14002ebd
--- /dev/null
+++ b/nixpkgs/pkgs/shells/nsh/default.nix
@@ -0,0 +1,29 @@
+{ lib, rustPlatform, fetchFromGitHub }:
+
+rustPlatform.buildRustPackage rec {
+  pname = "nsh";
+  version = "0.4.2";
+
+  src = fetchFromGitHub {
+    owner = "nuta";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "1479wv8h5l2b0cwp27vpybq50nyvszhjxmn76n2bz3fchr0lrcbp";
+  };
+
+  cargoSha256 = "1kxjr4ymns95g6jz94107nqmd71m2xh8k19gcsy08650gjrn5cz3";
+
+  doCheck = false;
+
+  meta = with lib; {
+    description = "A command-line shell like fish, but POSIX compatible";
+    homepage = "https://github.com/nuta/nsh";
+    changelog = "https://github.com/nuta/nsh/raw/v${version}/docs/changelog.md";
+    license = [ licenses.cc0 /* or */ licenses.mit ];
+    maintainers = [ maintainers.marsam ];
+  };
+
+  passthru = {
+    shellPath = "/bin/nsh";
+  };
+}
diff --git a/nixpkgs/pkgs/shells/nushell/default.nix b/nixpkgs/pkgs/shells/nushell/default.nix
index 14137fa0e607..a6ca5242e498 100644
--- a/nixpkgs/pkgs/shells/nushell/default.nix
+++ b/nixpkgs/pkgs/shells/nushell/default.nix
@@ -18,16 +18,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "nushell";
-  version = "0.38.0";
+  version = "0.42.0";
 
   src = fetchFromGitHub {
     owner = pname;
     repo = pname;
     rev = version;
-    sha256 = "155rn0balgikkhy77gbva6a88pgwm27flzgjyphiwzwnah1mmhca";
+    sha256 = "sha256-2EBy61K/HCdCFZkVT5XrflQGuQrRWfdrevV3OPjpUcQ=";
   };
 
-  cargoSha256 = "1pk56s47mk0f8cww6h1y43jdnf311g35xynz1jvhrk31yyjhb0jl";
+  cargoSha256 = "sha256-iU19rHb1td4NIF+P3wctIcZKL09H+51XwD3NaSBKK18=";
 
   nativeBuildInputs = [ pkg-config ]
     ++ lib.optionals (withExtraFeatures && stdenv.isLinux) [ python3 ];
@@ -37,7 +37,7 @@ rustPlatform.buildRustPackage rec {
     ++ lib.optionals (withExtraFeatures && stdenv.isLinux) [ xorg.libX11 ]
     ++ lib.optionals (withExtraFeatures && stdenv.isDarwin) [ AppKit nghttp2 libgit2 ];
 
-  cargoBuildFlags = lib.optional withExtraFeatures "--features=extra";
+  buildFeatures = lib.optional withExtraFeatures "extra";
 
   # Since 0.34, nu has an indirect dependency on `zstd-sys` (via `polars` and
   # `parquet`, for dataframe support), which by default has an impure build
diff --git a/nixpkgs/pkgs/shells/oil/default.nix b/nixpkgs/pkgs/shells/oil/default.nix
index 3d9a2ec24e68..2a019d75e728 100644
--- a/nixpkgs/pkgs/shells/oil/default.nix
+++ b/nixpkgs/pkgs/shells/oil/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "oil";
-  version = "0.9.3";
+  version = "0.9.6";
 
   src = fetchurl {
     url = "https://www.oilshell.org/download/oil-${version}.tar.xz";
-    sha256 = "sha256-YvNgcvafM3jgO3nY1SVcHRNglOwRQQ208W7oLxZg79o=";
+    sha256 = "sha256-4cfRysJ202y1996TB/7jvlWO5K2vNJ70IjIkANXIpcQ=";
   };
 
   postPatch = ''
@@ -32,6 +32,7 @@ stdenv.mkDerivation rec {
       asl20 # Licence for Oil itself
     ];
 
+    platforms = lib.platforms.all;
     maintainers = with lib.maintainers; [ lheckemann alva ];
     changelog = "https://www.oilshell.org/release/${version}/changelog.html";
   };
diff --git a/nixpkgs/pkgs/shells/oksh/default.nix b/nixpkgs/pkgs/shells/oksh/default.nix
index 35bd3a62b62f..9ea851adbbf6 100644
--- a/nixpkgs/pkgs/shells/oksh/default.nix
+++ b/nixpkgs/pkgs/shells/oksh/default.nix
@@ -2,13 +2,13 @@
 
 stdenv.mkDerivation rec {
   pname = "oksh";
-  version = "6.9";
+  version = "7.0";
 
   src = fetchFromGitHub {
     owner = "ibara";
     repo = pname;
     rev = "${pname}-${version}";
-    sha256 = "sha256-b5b6xYqlmjWAT8kTq6YraVLawV/k3ugHZUjXD1LJyhs=";
+    sha256 = "sha256-076nD0aPps6n5qkR3LQJ6Kn2g3mkov+/M0qSvxNLZ6o=";
   };
 
   meta = with lib; {
diff --git a/nixpkgs/pkgs/shells/pash/default.nix b/nixpkgs/pkgs/shells/pash/default.nix
index c7c6e4e5a7d4..431091bf8d1c 100644
--- a/nixpkgs/pkgs/shells/pash/default.nix
+++ b/nixpkgs/pkgs/shells/pash/default.nix
@@ -1,7 +1,7 @@
 { lib, fetchFromGitHub, buildDotnetPackage }:
 
 buildDotnetPackage {
-  baseName = "pash";
+  pname = "pash";
   version = "git-2016-07-06";
 
   src = fetchFromGitHub {
diff --git a/nixpkgs/pkgs/shells/powershell/default.nix b/nixpkgs/pkgs/shells/powershell/default.nix
index 4d3038079a80..4efa2cd88a72 100644
--- a/nixpkgs/pkgs/shells/powershell/default.nix
+++ b/nixpkgs/pkgs/shells/powershell/default.nix
@@ -7,9 +7,10 @@ let archString = if stdenv.isAarch64 then "arm64"
     platformString = if stdenv.isDarwin then "osx"
                      else if stdenv.isLinux then "linux"
                      else throw "unsupported platform";
-    platformSha = if stdenv.isDarwin then "0w44ws8b6zfixf7xz93hmplqsx18279n9x8j77y4rbzs13fldvsn"
-                     else if (stdenv.isLinux && stdenv.isx86_64) then "sha256-SOZn7CGLu9x+xhQwjgm0SL7sKDODLwHRpzi7tMdRBAM="
-                     else if (stdenv.isLinux && stdenv.isAarch64) then "1axbi4kmb1ydys7c45jhp729w1srid3c8jgivb4bdmdp56rf6h32"
+    platformSha = if (stdenv.isDarwin && stdenv.isx86_64) then "sha256-h5zjn8wtgHmsJFiGq1rja6kZTZj3Q72W2kH3AexRDQs="
+                     else if (stdenv.isDarwin && stdenv.isAarch64) then "sha256-NHM9ZUpBJb59Oq0Ke7DcvaN+bZ9MjSpXBRu5Ng9OVZ0="
+                     else if (stdenv.isLinux && stdenv.isx86_64) then "sha256-kidPtDMkEZ/1r4WIApPZ/BsdJkolpSZ3f72JyDv3798="
+                     else if (stdenv.isLinux && stdenv.isAarch64) then "sha256-bUacA4DwjDNlIG7yooXxUGL9AysAogNWuQDvcTqo1sE="
                      else throw "unsupported platform";
     platformLdLibraryPath = if stdenv.isDarwin then "DYLD_FALLBACK_LIBRARY_PATH"
                      else if stdenv.isLinux then "LD_LIBRARY_PATH"
@@ -19,7 +20,7 @@ let archString = if stdenv.isAarch64 then "arm64"
 in
 stdenv.mkDerivation rec {
   pname = "powershell";
-  version = "7.1.4";
+  version = "7.2.1";
 
   src = fetchzip {
     url = "https://github.com/PowerShell/PowerShell/releases/download/v${version}/powershell-${version}-${platformString}-${archString}.tar.gz";
@@ -50,8 +51,6 @@ stdenv.mkDerivation rec {
     patchelf --replace-needed libcrypto${ext}.1.0.0 libcrypto${ext}.1.1 $pslibs/libmi.so
     patchelf --replace-needed libssl${ext}.1.0.0 libssl${ext}.1.1 $pslibs/libmi.so
   '' + lib.optionalString (!stdenv.isDarwin) ''
-    # Remove liblttng-ust from dependencies once
-    # https://github.com/PowerShell/PowerShell/pull/14688 is in a release
     patchelf --replace-needed liblttng-ust${ext}.0 liblttng-ust${ext}.1 $pslibs/libcoreclrtraceptprovider.so
   '' + ''
 
@@ -74,7 +73,7 @@ stdenv.mkDerivation rec {
     description = "Powerful cross-platform (Windows, Linux, and macOS) shell and scripting language based on .NET";
     homepage = "https://github.com/PowerShell/PowerShell";
     maintainers = with maintainers; [ yrashk srgom p3psi ];
-    platforms = [ "x86_64-darwin" "x86_64-linux" "aarch64-linux"];
+    platforms = [ "x86_64-darwin" "x86_64-linux" "aarch64-linux" "aarch64-darwin" ];
     license = with licenses; [ mit ];
   };
 
diff --git a/nixpkgs/pkgs/shells/tcsh/default.nix b/nixpkgs/pkgs/shells/tcsh/default.nix
index 4fd4e5730a4e..9a5bf59f18ea 100644
--- a/nixpkgs/pkgs/shells/tcsh/default.nix
+++ b/nixpkgs/pkgs/shells/tcsh/default.nix
@@ -1,24 +1,31 @@
-{ lib, stdenv, fetchurl, fetchpatch
+{ lib
+, stdenv
+, fetchurl
+, fetchpatch
 , ncurses
 }:
 
 stdenv.mkDerivation rec {
   pname = "tcsh";
-  version = "6.22.04";
+  version = "6.23.00";
 
   src = fetchurl {
     urls = [
-      "http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/${pname}-${version}.tar.gz"
+      "https://astron.com/pub/tcsh/old/${pname}-${version}.tar.gz"
+      "https://astron.com/pub/tcsh/${pname}-${version}.tar.gz"
       "http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/old/${pname}-${version}.tar.gz"
-      "ftp://ftp.astron.com/pub/tcsh/${pname}-${version}.tar.gz"
-      "ftp://ftp.astron.com/pub/tcsh/old/${pname}-${version}.tar.gz"
-      "ftp://ftp.funet.fi/pub/unix/shells/tcsh/${pname}-${version}.tar.gz"
+      "http://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/${pname}-${version}.tar.gz"
       "ftp://ftp.funet.fi/pub/unix/shells/tcsh/old/${pname}-${version}.tar.gz"
+      "ftp://ftp.funet.fi/pub/unix/shells/tcsh/${pname}-${version}.tar.gz"
+      "ftp://ftp.astron.com/pub/tcsh/old/${pname}-${version}.tar.gz"
+      "ftp://ftp.astron.com/pub/tcsh/${pname}-${version}.tar.gz"
     ];
-    hash = "sha256-6xY1YkMhjDLzngcljXK/iyHmLOlLsOipXjGLFROX4jE=";
+    hash = "sha256-Tr6y8zYz0RXZU19VTGUahSMEDY2R5d4zP7LuBFuOAB4=";
   };
 
-  buildInputs = [ ncurses ];
+  buildInputs = [
+    ncurses
+  ];
 
   patches = lib.optional stdenv.hostPlatform.isMusl
     (fetchpatch {
@@ -47,7 +54,5 @@ stdenv.mkDerivation rec {
     platforms = platforms.unix;
   };
 
-  passthru = {
-    shellPath = "/bin/tcsh";
-  };
+  passthru.shellPath = "/bin/tcsh";
 }
diff --git a/nixpkgs/pkgs/shells/xonsh/default.nix b/nixpkgs/pkgs/shells/xonsh/default.nix
index 28f87685166d..4fa5d9b087be 100644
--- a/nixpkgs/pkgs/shells/xonsh/default.nix
+++ b/nixpkgs/pkgs/shells/xonsh/default.nix
@@ -8,14 +8,14 @@
 
 python3Packages.buildPythonApplication rec {
   pname = "xonsh";
-  version = "0.10.1";
+  version = "0.11.0";
 
   # fetch from github because the pypi package ships incomplete tests
   src = fetchFromGitHub {
     owner = "xonsh";
     repo = "xonsh";
     rev = version;
-    sha256 = "03ahay2rl98a9k4pqkxksmj6mcg554jnbhw9jh8cyvjrygrpcpch";
+    sha256 = "sha256-jfxQMEVABTOhx679V0iGVX9RisuY42lSdztYXMLwdcw=";
   };
 
   LC_ALL = "en_US.UTF-8";
@@ -68,7 +68,8 @@ python3Packages.buildPythonApplication rec {
     HOME=$TMPDIR
   '';
 
-  checkInputs = [ glibcLocales git ] ++ (with python3Packages; [ pytestCheckHook pytest-subprocess ]);
+  checkInputs = [ glibcLocales git ] ++
+    (with python3Packages; [ pyte pytestCheckHook pytest-mock pytest-subprocess ]);
 
   propagatedBuildInputs = with python3Packages; [ ply prompt-toolkit pygments ];
 
diff --git a/nixpkgs/pkgs/shells/zsh/antigen/default.nix b/nixpkgs/pkgs/shells/zsh/antigen/default.nix
index 935939f90e60..9a69f90dca34 100644
--- a/nixpkgs/pkgs/shells/zsh/antigen/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/antigen/default.nix
@@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
 
   meta = {
     description = "The plugin manager for zsh";
-    homepage = "http://antigen.sharats.me";
+    homepage = "https://antigen.sharats.me/";
     license = lib.licenses.mit;
   };
 }
diff --git a/nixpkgs/pkgs/shells/zsh/default.nix b/nixpkgs/pkgs/shells/zsh/default.nix
index 92eebfd95442..e0fd68f13b60 100644
--- a/nixpkgs/pkgs/shells/zsh/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, ncurses, pcre, buildPackages }:
+{ lib, stdenv, fetchurl, fetchpatch, ncurses, pcre, buildPackages }:
 
 let
   version = "5.8";
@@ -21,6 +21,13 @@ stdenv.mkDerivation {
   patches = [
     # fix location of timezone data for TZ= completion
     ./tz_completion.patch
+    # This commit will be released with the next version of zsh
+    (fetchpatch {
+      name = "fix-git-stash-drop-completions.patch";
+      url = "https://github.com/zsh-users/zsh/commit/754658aff38e1bdf487c58bec6174cbecd019d11.patch";
+      sha256 = "sha256-ud/rLD+SqvyTzT6vwOr+MWH+LY5o5KACrU1TpmL15Lo=";
+      excludes = [ "ChangeLog" ];
+    })
   ];
 
   buildInputs = [ ncurses pcre ];
diff --git a/nixpkgs/pkgs/shells/zsh/nix-zsh-completions/default.nix b/nixpkgs/pkgs/shells/zsh/nix-zsh-completions/default.nix
index f60bb966003f..472cc47459cf 100644
--- a/nixpkgs/pkgs/shells/zsh/nix-zsh-completions/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/nix-zsh-completions/default.nix
@@ -20,6 +20,7 @@ stdenv.mkDerivation rec {
   meta = with lib; {
     homepage = "https://github.com/spwhitt/nix-zsh-completions";
     description = "ZSH completions for Nix, NixOS, and NixOps";
+    priority = 6; # prevent collisions with nix 2.4's built-in completions
     license = licenses.bsd3;
     platforms = platforms.all;
     maintainers = with maintainers; [ spwhitt olejorgenb hedning ma27 ];
diff --git a/nixpkgs/pkgs/shells/zsh/oh-my-zsh/default.nix b/nixpkgs/pkgs/shells/zsh/oh-my-zsh/default.nix
index c284c83b4168..d15bd0245731 100644
--- a/nixpkgs/pkgs/shells/zsh/oh-my-zsh/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/oh-my-zsh/default.nix
@@ -5,15 +5,15 @@
 , git, nix, nixfmt, jq, coreutils, gnused, curl, cacert }:
 
 stdenv.mkDerivation rec {
-  version = "2021-10-13";
+  version = "2021-12-18";
   pname = "oh-my-zsh";
-  rev = "19f9b6f1ade7788b07480be685cf3fcb117cad84";
+  rev = "904f8685f75ff5dd3f544f8c6f2cabb8e5952e9a";
 
   src = fetchFromGitHub {
     inherit rev;
     owner = "ohmyzsh";
     repo = "ohmyzsh";
-    sha256 = "aC7tn5nNbkmyZ6oGKIQnWE+1LNcZH5P2pPgtnUhru/Y=";
+    sha256 = "Pos7LaNQllZrzBUx8a7QXi1sAVcIABQJOLUjIwGIP/U=";
   };
 
   installPhase = ''
diff --git a/nixpkgs/pkgs/shells/zsh/pure-prompt/default.nix b/nixpkgs/pkgs/shells/zsh/pure-prompt/default.nix
index 0e176d0505f5..d95ef343c17e 100644
--- a/nixpkgs/pkgs/shells/zsh/pure-prompt/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/pure-prompt/default.nix
@@ -4,13 +4,13 @@ with lib;
 
 stdenv.mkDerivation rec {
   pname = "pure-prompt";
-  version = "1.17.3";
+  version = "1.18.0";
 
   src = fetchFromGitHub {
     owner = "sindresorhus";
     repo = "pure";
     rev = "v${version}";
-    sha256 = "sha256-WNixw2vVn1mBEDSeIFrWZHHUcX4TNgr+motBemBQfr0=";
+    sha256 = "1aa8aczfvclrnd0igiq48jyq4b8fdwvaaj84nzb6w6sjahzs5jcy";
   };
 
   installPhase = ''
diff --git a/nixpkgs/pkgs/shells/zsh/spaceship-prompt/default.nix b/nixpkgs/pkgs/shells/zsh/spaceship-prompt/default.nix
index f1dcb9ead9c9..4df472e4afd2 100644
--- a/nixpkgs/pkgs/shells/zsh/spaceship-prompt/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/spaceship-prompt/default.nix
@@ -2,13 +2,13 @@
 
 stdenvNoCC.mkDerivation rec {
   pname = "spaceship-prompt";
-  version = "3.14.1";
+  version = "3.15.0";
 
   src = fetchFromGitHub {
     owner = "denysdovhan";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-/Q2vsCIDsHUSBavJoHX3L0NQ7REoQmaiRgHVGiLtNPE=";
+    sha256 = "sha256-/9c4o9tdXtDefZ1fA62Y9Sg2cv54YVZGlZ1n6EfQWC4=";
   };
 
   dontBuild = true;
diff --git a/nixpkgs/pkgs/shells/zsh/zinit/default.nix b/nixpkgs/pkgs/shells/zsh/zinit/default.nix
index d59f50ce3b9c..9946d7d0c3a5 100644
--- a/nixpkgs/pkgs/shells/zsh/zinit/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/zinit/default.nix
@@ -4,7 +4,7 @@ stdenvNoCC.mkDerivation rec {
   pname = "zinit";
   version = "3.7";
   src = fetchFromGitHub {
-    owner = "zdharma";
+    owner = "zdharma-continuum";
     repo = pname;
     rev = "v${version}";
     hash = "sha256-B+cTGz+U8MR22l6xXdRAAjDr+ulCk+CJ9GllFMK0axE=";
@@ -34,9 +34,9 @@ stdenvNoCC.mkDerivation rec {
   #TODO:doc output
 
   meta = with lib; {
-    homepage = "https://github.com/zdharma/zinit";
+    homepage = "https://github.com/zdharma-continuum/zinit";
     description = "Flexible zsh plugin manager";
     license = licenses.mit;
-    maintainers = with maintainers; [ pasqui23 ];
+    maintainers = with maintainers; [ pasqui23 sei40kr ];
   };
 }
diff --git a/nixpkgs/pkgs/shells/zsh/zsh-autocomplete/default.nix b/nixpkgs/pkgs/shells/zsh/zsh-autocomplete/default.nix
new file mode 100644
index 000000000000..a58a941189c9
--- /dev/null
+++ b/nixpkgs/pkgs/shells/zsh/zsh-autocomplete/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenvNoCC, fetchFromGitHub }:
+
+stdenvNoCC.mkDerivation rec {
+  pname = "zsh-autocomplete";
+  version = "21.09.22";
+
+  src = fetchFromGitHub {
+    owner = "marlonrichert";
+    repo = "zsh-autocomplete";
+    rev = version;
+    sha256 = "sha256-c4+5ta0ATuy9hIygSnqaquHf+YIStvHMaABwq3qyru8=";
+  };
+
+  installPhase = ''
+    install -D zsh-autocomplete.plugin.zsh $out/share/zsh-autocomplete/zsh-autocomplete.plugin.zsh
+    cp -R scripts $out/share/zsh-autocomplete/scripts
+    cp -R functions $out/share/zsh-autocomplete/functions
+  '';
+
+  meta = with lib; {
+    description = "Real-time type-ahead completion for Zsh. Asynchronous find-as-you-type autocompletion";
+    homepage = "https://github.com/marlonrichert/zsh-autocomplete/";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.em0lar ];
+  };
+}
diff --git a/nixpkgs/pkgs/shells/zsh/zsh-better-npm-completion/default.nix b/nixpkgs/pkgs/shells/zsh/zsh-better-npm-completion/default.nix
new file mode 100644
index 000000000000..372d49eaeb7e
--- /dev/null
+++ b/nixpkgs/pkgs/shells/zsh/zsh-better-npm-completion/default.nix
@@ -0,0 +1,25 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "zsh-better-npm-completion";
+  version = "unstable-2019-11-19";
+
+  src = fetchFromGitHub {
+    owner = "lukechilds";
+    repo = "zsh-better-npm-completion";
+    rev = "0a7cf042415324ec38a186fdcbc9af163f0d7e69";
+    sha256 = "16z7k5n1rcl9i61lrm7i5dsqsmhvdp1y4y5ii6hv2xpp470addgy";
+  };
+
+  installPhase = ''
+    install -Dm 0644 zsh-better-npm-completion.plugin.zsh $out/share/zsh-better-npm-completion
+  '';
+
+  meta = with lib; {
+    description = "Better completion for npm";
+    homepage = "https://github.com/lukechilds/zsh-better-npm-completion";
+    license = licenses.mit;
+    platforms = platforms.unix;
+    maintainers = [ maintainers.gerschtli ];
+  };
+}
diff --git a/nixpkgs/pkgs/shells/zsh/zsh-deer/default.nix b/nixpkgs/pkgs/shells/zsh/zsh-deer/default.nix
index 895ca621cfed..ab544d7c3147 100644
--- a/nixpkgs/pkgs/shells/zsh/zsh-deer/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/zsh-deer/default.nix
@@ -1,10 +1,8 @@
 { lib, stdenv, fetchFromGitHub, perl }:
 
-let
+stdenv.mkDerivation rec {
+  pname = "deer";
   version = "1.4";
-  name = "deer-${version}";
-in stdenv.mkDerivation {
-  inherit name;
 
   src = fetchFromGitHub {
     owner = "Vifon";
diff --git a/nixpkgs/pkgs/shells/zsh/zsh-fast-syntax-highlighting/default.nix b/nixpkgs/pkgs/shells/zsh/zsh-fast-syntax-highlighting/default.nix
index d1791e4962f4..5b77978c0221 100644
--- a/nixpkgs/pkgs/shells/zsh/zsh-fast-syntax-highlighting/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/zsh-fast-syntax-highlighting/default.nix
@@ -5,7 +5,7 @@ stdenvNoCC.mkDerivation rec {
   version = "1.55";
 
   src = fetchFromGitHub {
-    owner = "zdharma";
+    owner = "zdharma-continuum";
     repo = "fast-syntax-highlighting";
     rev = "v${version}";
     sha256 = "0h7f27gz586xxw7cc0wyiv3bx0x3qih2wwh05ad85bh2h834ar8d";
@@ -23,7 +23,7 @@ stdenvNoCC.mkDerivation rec {
 
   meta = with lib; {
     description = "Syntax-highlighting for Zshell";
-    homepage = "https://github.com/zdharma/fast-syntax-highlighting";
+    homepage = "https://github.com/zdharma-continuum/fast-syntax-highlighting";
     license = licenses.bsd3;
     platforms = platforms.unix;
   };
diff --git a/nixpkgs/pkgs/shells/zsh/zsh-fzf-tab/default.nix b/nixpkgs/pkgs/shells/zsh/zsh-fzf-tab/default.nix
index ad1b7d3d740c..4fc092330e37 100644
--- a/nixpkgs/pkgs/shells/zsh/zsh-fzf-tab/default.nix
+++ b/nixpkgs/pkgs/shells/zsh/zsh-fzf-tab/default.nix
@@ -4,13 +4,13 @@ let
   INSTALL_PATH="${placeholder "out"}/share/fzf-tab";
 in stdenv.mkDerivation rec {
   pname = "zsh-fzf-tab";
-  version = "unstable-2021-08-05";
+  version = "unstable-2021-11-12";
 
   src = fetchFromGitHub {
     owner = "Aloxaf";
     repo = "fzf-tab";
-    rev = "89a33154707c09789177a893e5a8ebbb131d5d3d";
-    sha256 = "1g8011ldrghbw5ibchsp0p93r31cwyx2r1z5xplksd779jw79wdx";
+    rev = "190500bf1de6a89416e2a74470d3b5cceab102ba";
+    sha256 = "1dipsy0s67fr47ig5559bcp1h5yn8rdjshhs8zsq7j8plvvh99qb";
   };
 
   buildInputs = [ ncurses ];
diff --git a/nixpkgs/pkgs/shells/zsh/zsh-vi-mode/default.nix b/nixpkgs/pkgs/shells/zsh/zsh-vi-mode/default.nix
new file mode 100644
index 000000000000..32f1e9c024ac
--- /dev/null
+++ b/nixpkgs/pkgs/shells/zsh/zsh-vi-mode/default.nix
@@ -0,0 +1,27 @@
+{ lib, stdenv, fetchFromGitHub }:
+
+stdenv.mkDerivation rec {
+  pname = "zsh-vi-mode";
+  version = "0.8.5";
+
+  src = fetchFromGitHub {
+    owner = "jeffreytse";
+    repo = pname;
+    rev = "v${version}";
+    sha256 = "EOYqHh0rcgoi26eopm6FTl81ehak5kXMmzNcnJDH8/E=";
+  };
+
+  dontBuild = true;
+
+  installPhase = ''
+    mkdir -p $out/share/${pname}
+    cp *.zsh $out/share/${pname}/
+  '';
+
+  meta = with lib; {
+    homepage = "https://github.com/jeffreytse/zsh-vi-mode";
+    license = licenses.mit;
+    description = "A better and friendly vi(vim) mode plugin for ZSH.";
+    maintainers = with maintainers; [ kyleondy ];
+  };
+}