From 131855d2da43d56afae684d9d78743ba24800d0f Mon Sep 17 00:00:00 2001 From: Arpit Chakladar Date: Sun, 16 Aug 2026 20:09:01 +0530 Subject: feat: completions for all scripts zsh - Added zsh completions for git-log-graph, gpg-backup and screen-recording - Using bash for the scripts, for consistency and cross platform support --- modules/scripts/deep-clean/default.nix | 3 +++ modules/scripts/git-log-graph/completion.zsh | 4 ++++ modules/scripts/git-log-graph/default.nix | 2 ++ modules/scripts/git-log-graph/script.sh | 1 + modules/scripts/gopass-ssh-load/default.nix | 1 + modules/scripts/gopass-ssh-load/script.sh | 1 + modules/scripts/gpg-backup/completion.zsh | 23 +++++++++++++++++++++++ modules/scripts/gpg-backup/default.nix | 2 ++ modules/scripts/gpg-backup/script.sh | 1 + modules/scripts/lib.nix | 1 - modules/scripts/neomutt-sync/default.nix | 1 + modules/scripts/neomutt-sync/script.sh | 1 + modules/scripts/screen-recording/completion.zsh | 4 ++++ modules/scripts/screen-recording/default.nix | 2 ++ modules/scripts/screen-recording/script.sh | 1 + modules/scripts/system-monitor/script.sh | 1 + modules/scripts/yazi-file-chooser/default.nix | 1 + modules/scripts/yazi-file-chooser/script.sh | 1 + 18 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 modules/scripts/git-log-graph/completion.zsh create mode 100644 modules/scripts/gpg-backup/completion.zsh create mode 100644 modules/scripts/screen-recording/completion.zsh diff --git a/modules/scripts/deep-clean/default.nix b/modules/scripts/deep-clean/default.nix index dc93c2c..56f6aa0 100644 --- a/modules/scripts/deep-clean/default.nix +++ b/modules/scripts/deep-clean/default.nix @@ -10,6 +10,9 @@ let name = "deep-clean"; path = ./script.sh; description = "Deep clean script for Nix systems\nRemoves old generations, garbage, and optimizes store\nWARNING: Do NOT run with sudo - run as normal user"; + deps = [ + pkgs.bash + ]; inherit config; }; in diff --git a/modules/scripts/git-log-graph/completion.zsh b/modules/scripts/git-log-graph/completion.zsh new file mode 100644 index 0000000..1ede549 --- /dev/null +++ b/modules/scripts/git-log-graph/completion.zsh @@ -0,0 +1,4 @@ +#compdef git-log-graph + +_arguments \ + '--embed[Skip the pager (same as GIT_LOG_GRAPH_EMBED=1)]' diff --git a/modules/scripts/git-log-graph/default.nix b/modules/scripts/git-log-graph/default.nix index a7753ff..8aa79eb 100644 --- a/modules/scripts/git-log-graph/default.nix +++ b/modules/scripts/git-log-graph/default.nix @@ -11,11 +11,13 @@ let path = ./script.sh; description = "Git log graph with signature verification\nRun with GIT_LOG_GRAPH_EMBED=1 or --embed to skip the pager"; deps = [ + pkgs.bash pkgs.git pkgs.git-graph pkgs.gawk pkgs.less ]; + completion = builtins.readFile ./completion.zsh; inherit config; }; in diff --git a/modules/scripts/git-log-graph/script.sh b/modules/scripts/git-log-graph/script.sh index 0cc03bd..59fb2bd 100644 --- a/modules/scripts/git-log-graph/script.sh +++ b/modules/scripts/git-log-graph/script.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash set -euo pipefail embed=0 diff --git a/modules/scripts/gopass-ssh-load/default.nix b/modules/scripts/gopass-ssh-load/default.nix index e0a4615..7b39085 100644 --- a/modules/scripts/gopass-ssh-load/default.nix +++ b/modules/scripts/gopass-ssh-load/default.nix @@ -30,6 +30,7 @@ let config.security.gopass.package gnupg openssh + bash ]; inherit config; }; diff --git a/modules/scripts/gopass-ssh-load/script.sh b/modules/scripts/gopass-ssh-load/script.sh index be7d9d1..c6b9a29 100644 --- a/modules/scripts/gopass-ssh-load/script.sh +++ b/modules/scripts/gopass-ssh-load/script.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash set -o errexit set -o nounset set -o pipefail diff --git a/modules/scripts/gpg-backup/completion.zsh b/modules/scripts/gpg-backup/completion.zsh new file mode 100644 index 0000000..f47bbe8 --- /dev/null +++ b/modules/scripts/gpg-backup/completion.zsh @@ -0,0 +1,23 @@ +#compdef gpg-backup + +_arguments \ + '1: :->cmds' \ + '*::arg:->args' + +case $state in + cmds) + local -a commands + commands=( + 'export:Export all GPG keys to a passphrase-protected file' + 'import:Import GPG keys from a backup file' + ) + _describe 'command' commands + ;; + args) + case $words[1] in + export|import) + _files + ;; + esac + ;; +esac diff --git a/modules/scripts/gpg-backup/default.nix b/modules/scripts/gpg-backup/default.nix index d91c839..1ab41b4 100644 --- a/modules/scripts/gpg-backup/default.nix +++ b/modules/scripts/gpg-backup/default.nix @@ -11,11 +11,13 @@ let path = ./script.sh; description = "Export/import all GPG keys as a single passphrase-protected file with maximum S2K iteration count\nUsage: gpg-backup export filename.gpg | gpg-backup import filename.gpg"; deps = [ + pkgs.bash pkgs.gnupg pkgs.gnutar pkgs.coreutils pkgs.findutils ]; + completion = builtins.readFile ./completion.zsh; inherit config; }; in diff --git a/modules/scripts/gpg-backup/script.sh b/modules/scripts/gpg-backup/script.sh index c8e7363..57c216b 100644 --- a/modules/scripts/gpg-backup/script.sh +++ b/modules/scripts/gpg-backup/script.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash set -euo pipefail WORKDIR="$(mktemp -d)" diff --git a/modules/scripts/lib.nix b/modules/scripts/lib.nix index 77c0a20..76e453e 100644 --- a/modules/scripts/lib.nix +++ b/modules/scripts/lib.nix @@ -13,7 +13,6 @@ let inherit name; runtimeInputs = deps; text = '' - #!/usr/bin/env bash ${descComment}${envVars} ${builtins.readFile path} ''; diff --git a/modules/scripts/neomutt-sync/default.nix b/modules/scripts/neomutt-sync/default.nix index 816c9f7..d990210 100644 --- a/modules/scripts/neomutt-sync/default.nix +++ b/modules/scripts/neomutt-sync/default.nix @@ -11,6 +11,7 @@ let path = ./script.sh; description = "Neomutt-sync - Interactive mail sync with dialog progress bar"; deps = [ + pkgs.bash pkgs.dialog pkgs.coreutils pkgs.gawk diff --git a/modules/scripts/neomutt-sync/script.sh b/modules/scripts/neomutt-sync/script.sh index e7abbae..d0dac63 100644 --- a/modules/scripts/neomutt-sync/script.sh +++ b/modules/scripts/neomutt-sync/script.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash DIALOGRC=$(mktemp) NOTMUCH_LOG=$(mktemp) TITLE="[󰇮 SYNCING MAIL]" diff --git a/modules/scripts/screen-recording/completion.zsh b/modules/scripts/screen-recording/completion.zsh new file mode 100644 index 0000000..835ec43 --- /dev/null +++ b/modules/scripts/screen-recording/completion.zsh @@ -0,0 +1,4 @@ +#compdef screen-recording + +_arguments \ + '(-s --select)'{-s,--select}'[Launch slurp to select recording region]' diff --git a/modules/scripts/screen-recording/default.nix b/modules/scripts/screen-recording/default.nix index 50d54ae..6023232 100644 --- a/modules/scripts/screen-recording/default.nix +++ b/modules/scripts/screen-recording/default.nix @@ -11,9 +11,11 @@ let path = ./script.sh; description = "Screen recording script using wf-recorder and slurp for region selection\nRecords Wayland screen to MP4\nUsage: screen-recording.sh [-s|--select]\n -s, --select Launch slurp to select recording region"; deps = [ + pkgs.bash config.media.slurp.package config.media.wf-recorder.package ]; + completion = builtins.readFile ./completion.zsh; desktop = { enable = true; displayName = "Screen Recording"; diff --git a/modules/scripts/screen-recording/script.sh b/modules/scripts/screen-recording/script.sh index dad0483..336c32e 100644 --- a/modules/scripts/screen-recording/script.sh +++ b/modules/scripts/screen-recording/script.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash OUT_DIR="$HOME/Videos/Recordings" mkdir -p "$OUT_DIR" diff --git a/modules/scripts/system-monitor/script.sh b/modules/scripts/system-monitor/script.sh index 91cf560..7a9e7ea 100644 --- a/modules/scripts/system-monitor/script.sh +++ b/modules/scripts/system-monitor/script.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash SESSION="system-monitor" kitty @ set-font-size -- -5 diff --git a/modules/scripts/yazi-file-chooser/default.nix b/modules/scripts/yazi-file-chooser/default.nix index d06151a..3e99aad 100644 --- a/modules/scripts/yazi-file-chooser/default.nix +++ b/modules/scripts/yazi-file-chooser/default.nix @@ -11,6 +11,7 @@ let path = ./script.sh; description = "Yazi-based file chooser for XDG Desktop Portal"; deps = [ + pkgs.bash config.file-management.yazi.package config.terminal.kitty.package ]; diff --git a/modules/scripts/yazi-file-chooser/script.sh b/modules/scripts/yazi-file-chooser/script.sh index 5e4b229..7978222 100644 --- a/modules/scripts/yazi-file-chooser/script.sh +++ b/modules/scripts/yazi-file-chooser/script.sh @@ -1,3 +1,4 @@ +#!/usr/bin/env bash # $1 toggles multiple selection # $2 toggles directory select mode # $3 toggles save file mode -- cgit v1.2.3