-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
{ pkgs, installShellFiles, lib, buildGoModule, specialisations ? null }:
buildGoModule rec {
name = "specialise";
src = ./.;
nativeBuildInputs = [ installShellFiles ];
vendorHash = null;
ldflags = [
"-X main.homeManagerPath=${pkgs.home-manager}/bin/home-manager"
];
postInstall = ''
installShellCompletion --zsh --cmd ${name} <(cat << "EOF"
#compdef ${name}
function _${name} {
local line state
_arguments -C \
"--help[Output usage text to stdout]" \
"--verbose[Enable verbose logging]" \
"1: :->cmds" \
"*::arg:->args"
case "$state" in
(cmds)
_values "specialise command" \
"set[Switch to a specialisation]" \
"unset[Switch to a normal generation]" \
"clean[Delete obsolete generations]"
;;
(args)
case $line[1] in
(set)
_${name}_set
;;
esac
;;
esac
}
function _${name}_set {
local state
_arguments -C \
"1: :->cmds"
case "$state" in
(cmds)
_values "specialisations" \
${if specialisations == null then "" else
lib.strings.concatStringsSep " " specialisations
}
;;
esac
}
if [ "$funcstack[1]" = "_${name}" ]; then
_${name} "$@"
else
compdef _${name} ${name}
fi
EOF)
'';
}