aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArpit Chakladar <arpitchakladar+git@gmail.com>2026-08-21 04:06:34 +0530
committerArpit Chakladar <arpitchakladar+git@gmail.com>2026-08-29 03:50:28 +0530
commit58cd82c184b5f321930eed614462f69b0a0d9fa3 (patch)
tree8cebcc1ec3ebedab3be16873aa694c3006c3f4c8
parent9096fc6607a196f48df1da1dbe9b3f2b0908d76d (diff)
downloadhome-manager-config-58cd82c184b5f321930eed614462f69b0a0d9fa3.tar.gz
home-manager-config-58cd82c184b5f321930eed614462f69b0a0d9fa3.zip
scripts: added completions for nix-update script, updated completions
- added zsh completions for nix-update - updated completions options to allow multiple shells
-rw-r--r--modules/scripts/gpg-backup/default.nix2
-rw-r--r--modules/scripts/lib.nix26
-rw-r--r--modules/scripts/nix-update/completion.zsh21
-rw-r--r--modules/scripts/nix-update/default.nix1
-rw-r--r--modules/scripts/screen-recording/default.nix2
-rw-r--r--modules/scripts/usque-warp/default.nix2
6 files changed, 43 insertions, 11 deletions
diff --git a/modules/scripts/gpg-backup/default.nix b/modules/scripts/gpg-backup/default.nix
index 1ab41b4..b97aad8 100644
--- a/modules/scripts/gpg-backup/default.nix
+++ b/modules/scripts/gpg-backup/default.nix
@@ -17,7 +17,7 @@ let
pkgs.coreutils
pkgs.findutils
];
- completion = builtins.readFile ./completion.zsh;
+ completion.zsh = builtins.readFile ./completion.zsh;
inherit config;
};
in
diff --git a/modules/scripts/lib.nix b/modules/scripts/lib.nix
index 76e453e..31d7e5b 100644
--- a/modules/scripts/lib.nix
+++ b/modules/scripts/lib.nix
@@ -1,5 +1,10 @@
{ lib, pkgs }:
let
+ shellArgs = {
+ zsh = name: file: "--zsh --name _${name} ${file}";
+ bash = name: file: "--bash --name ${name}.bash ${file}";
+ };
+
mkScript =
name: path: description: env: deps: completion:
let
@@ -22,11 +27,16 @@ let
{
nativeBuildInputs = [ pkgs.installShellFiles ];
}
- ''
- installShellCompletion --zsh --name _${name} ${pkgs.writeText "_${name}" completion}
- '';
+ (
+ "mkdir -p $out\n"
+ + lib.concatStringsSep "\n" (
+ lib.mapAttrsToList (shell: content: ''
+ installShellCompletion ${shellArgs.${shell} name (pkgs.writeText "_${name}.${shell}" content)}
+ '') completion
+ )
+ );
in
- if completion == null then
+ if completion == { } then
base
else
pkgs.symlinkJoin {
@@ -47,7 +57,7 @@ let
extraLinks ? [ ],
config,
description ? "",
- completion ? null,
+ completion ? { },
}:
let
scriptDrv = mkScript name path description env deps completion;
@@ -67,8 +77,8 @@ let
completion = {
enable = lib.mkOption {
type = lib.types.bool;
- default = completion != null;
- description = "Whether to install a zsh completion for the ${name} script.";
+ default = completion != { };
+ description = "Whether to install completions for the ${name} script.";
};
};
desktop = {
@@ -115,7 +125,7 @@ let
message = "scripts.${name}.desktop.enable requires terminal.kitty.enable because desktop entries launch scripts in kitty.";
}
{
- assertion = !config.scripts.${name}.completion.enable || completion != null;
+ assertion = !config.scripts.${name}.completion.enable || completion != { };
message = "scripts.${name}.completion.enable is true but no completion text was provided to mkScriptModule.";
}
];
diff --git a/modules/scripts/nix-update/completion.zsh b/modules/scripts/nix-update/completion.zsh
new file mode 100644
index 0000000..ee4115c
--- /dev/null
+++ b/modules/scripts/nix-update/completion.zsh
@@ -0,0 +1,21 @@
+#compdef nix-update
+
+_arguments \
+ '1: :->target' \
+ '*:: :->flags'
+
+case $state in
+ target)
+ local -a commands
+ commands=(
+ 'home-manager:Update and switch home-manager configuration'
+ 'nixos:Update and switch NixOS configuration'
+ 'both:Update and switch both configurations'
+ )
+ _describe 'command' commands
+ ;;
+ flags)
+ _arguments \
+ '--flake-only[Only run nix flake update, skip switch commands]'
+ ;;
+esac
diff --git a/modules/scripts/nix-update/default.nix b/modules/scripts/nix-update/default.nix
index 787265d..633ff3d 100644
--- a/modules/scripts/nix-update/default.nix
+++ b/modules/scripts/nix-update/default.nix
@@ -16,6 +16,7 @@ let
config.programs.home-manager.package
pkgs.bash
];
+ completion.zsh = builtins.readFile ./completion.zsh;
inherit config;
};
in
diff --git a/modules/scripts/screen-recording/default.nix b/modules/scripts/screen-recording/default.nix
index 6023232..6aa0f89 100644
--- a/modules/scripts/screen-recording/default.nix
+++ b/modules/scripts/screen-recording/default.nix
@@ -15,7 +15,7 @@ let
config.media.slurp.package
config.media.wf-recorder.package
];
- completion = builtins.readFile ./completion.zsh;
+ completion.zsh = builtins.readFile ./completion.zsh;
desktop = {
enable = true;
displayName = "Screen Recording";
diff --git a/modules/scripts/usque-warp/default.nix b/modules/scripts/usque-warp/default.nix
index f5cb988..1831a44 100644
--- a/modules/scripts/usque-warp/default.nix
+++ b/modules/scripts/usque-warp/default.nix
@@ -14,7 +14,7 @@ let
config.networking.usque.package
pkgs.bash
];
- completion = builtins.readFile ./completion.zsh;
+ completion.zsh = builtins.readFile ./completion.zsh;
inherit config;
};
in