diff --git a/pkgs/shells/zsh/zsh-clipboard/clipboard.plugin.zsh b/pkgs/shells/zsh/zsh-clipboard/clipboard.plugin.zsh new file mode 100644 index 000000000000..f1f190ec70c3 --- /dev/null +++ b/pkgs/shells/zsh/zsh-clipboard/clipboard.plugin.zsh @@ -0,0 +1,40 @@ +_cb-yank() { + AA=$(clippaste 2>/dev/null) && CUTBUFFER="$AA" + zle yank +} +_cb-kill-line() { + zle kill-line + printf "%s" "$CUTBUFFER" | clipcopy 2>/dev/null +} +_cb-kill-whole-line() { + zle kill-whole-line + printf "%s" "$CUTBUFFER" | clipcopy 2>/dev/null +} +_cb-kill-word() { + zle kill-word + printf "%s" "$CUTBUFFER" | clipcopy 2>/dev/null +} +_cb-backward-kill-word() { + zle backward-kill-word + printf "%s" "$CUTBUFFER" | clipcopy 2>/dev/null +} +_cb-copy-region-as-kill() { + ## https://unix.stackexchange.com/questions/19947/ + zle copy-region-as-kill + zle set-mark-command -n -1 + printf "%s" "$CUTBUFFER" | clipcopy 2>/dev/null +} + +zle -N _cb-yank +zle -N _cb-kill-line +zle -N _cb-kill-whole-line +zle -N _cb-kill-word +zle -N _cb-backward-kill-word +zle -N _cb-copy-region-as-kill + +bindkey '^y' _cb-yank +bindkey '^k' _cb-kill-line +bindkey '^u' _cb-kill-whole-line +bindkey '\ed' _cb-kill-word +bindkey '\e^?' _cb-backward-kill-word +bindkey '\ew' _cb-copy-region-as-kill diff --git a/pkgs/shells/zsh/zsh-clipboard/default.nix b/pkgs/shells/zsh/zsh-clipboard/default.nix new file mode 100644 index 000000000000..114e0bfd7dc5 --- /dev/null +++ b/pkgs/shells/zsh/zsh-clipboard/default.nix @@ -0,0 +1,27 @@ +{ stdenv, lib }: + +stdenv.mkDerivation rec { + pname = "zsh-clipboard"; + version = "1.0"; + + src = ./.; + + dontBuild = true; + + installPhase = '' + install -D -m0444 -t $out/share/zsh/plugins/clipboard ./clipboard.plugin.zsh + ''; + + meta = with lib; { + description = "Ohmyzsh plugin that integrates kill-ring with system clipboard"; + longDescription = '' + Ohmyzsh plugin that integrates kill-ring with system clipboard. + + Key bindings for C-y, C-k, C-u, M-d, M-backspace and M-w are rebound. + Behaviour of these keys should not be changed. + ''; + license = licenses.mit; + maintainers = with maintainers; [ bb2020 ]; + platforms = platforms.unix; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 648eaf3a5e2c..56e4e86a576d 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -9655,6 +9655,8 @@ in zsh-bd = callPackage ../shells/zsh/zsh-bd { }; + zsh-clipboard = callPackage ../shells/zsh/zsh-clipboard { }; + zsh-git-prompt = callPackage ../shells/zsh/zsh-git-prompt { }; zsh-history = callPackage ../shells/zsh/zsh-history { };