From 68bdc4f3f0337ff08d56dc1fba2956bdca05f5ce Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Sun, 4 Aug 2024 12:38:54 +0300 Subject: [PATCH] zsh-stripped: init Patched version of ZSH that provides remote file completion and special handling for special chars such as # or ^ --- README.md | 18 +++++----- pkgs/zsh-stripped/0001-globquote.patch | 19 +++++++++++ .../0001-remote-complete-files.patch | 29 ++++++++++++++++ pkgs/zsh-stripped/package.nix | 34 +++++++++++++++++++ 4 files changed, 91 insertions(+), 9 deletions(-) create mode 100644 pkgs/zsh-stripped/0001-globquote.patch create mode 100644 pkgs/zsh-stripped/0001-remote-complete-files.patch create mode 100644 pkgs/zsh-stripped/package.nix diff --git a/README.md b/README.md index f4d0ca9..c475372 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,15 @@ My personal package overlay for sharing my most commonly used derivations. There are several packages exposed by this flake. Each directory in `pkgs` contains a description of the package inside its README. -| Package | Description | -| :--------------- | :---------------------------------------------------------------------------------------------: | -| alejandra-no-ads | A patched version of the **Alejandra** Nix formatter, without the pesky ads and spacing patches | -| ani-cli | An up-to-date, auto updated version of ani-cli | -| cloneit | A CLI tool to download specific GitHub directories or files | -| foot-transparent | A patched version of the foot terminal emulator that brings back fullscreen transparency[^1] | -| headscale-ui | A web frontend for the headscale Tailscale-compatible coordination server | -| mastodon-bird-ui | Mastodon web UI, but strongly inspired by Twitter. | -| mov-cli | A cli tool to browse and watch Movies/Shows/TV/Sports | +| Package | Description | +| :--------------- | :----------------------------------------------------------------------------------------------: | +| alejandra-custom | A patched version of the **Alejandra** Nix formatter, without the pesky ads and spacing patches | +| ani-cli | An up-to-date, auto updated version of ani-cli following auto-updated pins | +| cloneit | A CLI tool to download specific GitHub directories or files | +| foot-transparent | A patched version of the foot terminal emulator that brings back fullscreen transparency[^1] | +| headscale-ui | A web frontend for the headscale Tailscale-compatible coordination server | +| mastodon-bird-ui | Mastodon web UI, but strongly inspired by Twitter. | +| zsh-stripped | ZSH with newinstall scripts removed, and patches to handle special characters such as `^` or `#` | ## Usage diff --git a/pkgs/zsh-stripped/0001-globquote.patch b/pkgs/zsh-stripped/0001-globquote.patch new file mode 100644 index 0000000..9a67e9c --- /dev/null +++ b/pkgs/zsh-stripped/0001-globquote.patch @@ -0,0 +1,19 @@ +diff --git a/Src/utils.c b/Src/utils.c +index edf5d3df7..2d1712227 100644 +--- a/Src/utils.c ++++ b/Src/utils.c +@@ -6205,11 +6205,11 @@ quotestring(const char *s, int instring) + continue; + } + else if (ispecial(*u) && +- ((*u != '=' && *u != '~') || ++ ((*u != '=' && *u != '~' && *u != '#' && *u != '^') || + u == s || + (isset(MAGICEQUALSUBST) && +- (u[-1] == '=' || u[-1] == ':')) || ++ (u[-1] == '=' || u[-1] == ':')) +- (*u == '~' && isset(EXTENDEDGLOB))) && ++ ) && + (instring == QT_BACKSLASH || + instring == QT_SINGLE_OPTIONAL || + ( diff --git a/pkgs/zsh-stripped/0001-remote-complete-files.patch b/pkgs/zsh-stripped/0001-remote-complete-files.patch new file mode 100644 index 0000000..067690e --- /dev/null +++ b/pkgs/zsh-stripped/0001-remote-complete-files.patch @@ -0,0 +1,29 @@ +diff --git a/Completion/Unix/Type/_remote_files b/Completion/Unix/Type/_remote_files +index 93e1b7f43..4d4a7abbf 100644 +--- a/Completion/Unix/Type/_remote_files ++++ b/Completion/Unix/Type/_remote_files +@@ -60,10 +60,7 @@ if zstyle -T ":completion:${curcontext}:files" remote-access; then + dirprefix=${dir}/ + fi + +- if [[ -z $QIPREFIX ]] +- then rempat="${dirprefix}${PREFIX%%[^./][^/]#}\*" +- else rempat="${dirprefix}${(q)PREFIX%%[^./][^/]#}\*" +- fi ++ rempat="${dirprefix}${(q)PREFIX%%[^./][^/]#}\*" + + # remote filenames + remfiles=(${(M)${(f)"$( +@@ -92,9 +89,9 @@ if zstyle -T ":completion:${curcontext}:files" remote-access; then + while _tags; do + while _next_label remote-files expl ${suf:-remote directory}; do + [[ -n $suf ]] && +- compadd "$args[@]" "$expl[@]" -d remdispf -- ${(q)remdispf%[*=|]} && ret=0 ++ compadd "$args[@]" "$expl[@]" -d remdispf -- ${remdispf%[*=|]} && ret=0 + compadd ${suf:+-S/} $autoremove "$args[@]" "$expl[@]" -d remdispd \ +- -- ${(q)remdispd%/} && ret=0 ++ -- ${remdispd%/} && ret=0 + done + (( ret )) || return 0 + done + diff --git a/pkgs/zsh-stripped/package.nix b/pkgs/zsh-stripped/package.nix new file mode 100644 index 0000000..232ea61 --- /dev/null +++ b/pkgs/zsh-stripped/package.nix @@ -0,0 +1,34 @@ +{ + lib, + zsh, + ... +}: +zsh.overrideAttrs (old: { + patches = + (old.patches or []) + ++ [ + ./0001-globquote.patch + + # From: + # + ./0001-remote-complete-files.patch + ]; + + postConfigure = + (old.postConfigure or "") + + '' + # Find all instances of name=zsh/newuser in config.modules + # remove them. + sed -i -e '/^name=zsh\/newuser/d' config.modules + + # Also remove the newuser script to try and save some space + # it doesn't amount to much, but every little bit counts. + rm Scripts/newuser + ''; + + meta = { + description = "Patched version of zsh with globquote and remote file completion"; + mainProgram = "zsh"; + maintainers = with lib.maintainers; [NotAShelf]; + }; +})