]> arthur.barton.de Git - ax-zsh.git/blob - bin/axzshctl
Plugins are activated using symlinks in $AXZSH/active_plugins
[ax-zsh.git] / bin / axzshctl
1 #!/bin/zsh
2 #
3 # AX-ZSH: Alex' Modular ZSH Configuration
4 # Copyright (c) 2015 Alexander Barton <alex@barton.de>
5 #
6
7 function Usage {
8         echo "$NAME <command> [...]"
9         echo
10         echo "  enable-plugin <p> [<p> [...]]"
11         echo "    Enable plugin(s)."
12         echo
13         echo "  disable-plugin <p> [<p> [...]]"
14         echo "    Disable plugin(s)."
15         echo
16         echo "  reset-plugins"
17         echo "    Reset active plugins to the default list."
18         echo
19         exit 2
20 }
21
22 function Verbose {
23         echo "* $@"
24 }
25
26 function Warning {
27         echo "! $@"
28 }
29
30 function EnablePlugin {
31         local dir="$AXZSH/active_plugins"
32
33         if [[ -h "$dir/$1" ]]; then
34                 Warning "Plugin \"$1\" already active!"
35                 return 1
36         fi
37
38         for dname (
39                 "$AXZSH_PLUGIN_D/$plugin"
40                 "$ZSH_CUSTOM/$plugin"
41                 "$AXZSH/plugins/$plugin"
42                 "$AXZSH/default_plugins/$plugin"
43                 "$AXZSH/core/$plugin"
44         ); do
45                 [[ ! -d "$dname" ]] && continue
46                 mkdir -p "$dir"
47                 (
48                         cd "$dir" || exit 9
49                         ln -sv "$dname" "$PWD"
50                 )
51                 return $?
52         done
53
54         Warning "Plugin \"$1\" not found!"
55         return 1
56 }
57
58 function DisablePlugin {
59         local dir="$AXZSH/active_plugins"
60
61         if [[ ! -h "$dir/$1" ]]; then
62                 Warning "Plugin \"$1\" not active?"
63                 return 1
64         fi
65
66         rm -v "$dir/$1"
67         return $?
68 }
69
70 function ResetPlugins {
71         local dir="$AXZSH/active_plugins"
72
73         if [[ -e "$dir" ]]; then
74                 Verbose "Removing all symbolic links in $dir ..."
75                 find "$dir" -type l -print -delete
76         fi
77
78         Verbose "Activating (linking) default plugins ..."
79         mkdir -p "$dir"
80         (
81                 cd "$dir" || exit 9
82                 ln -sv "$AXZSH/default_plugins/"* "$PWD"
83         )
84         return $?
85 }
86
87 NAME="$(basename "$0")"
88
89 [[ $# -gt 0 ]] || Usage
90
91 if [[ -z "$AXZSH" || ! -d "$AXZSH" ]]; then
92         echo "$NAME: Oops, \"AXZSH\" is not set or invalid!"
93         exit 3
94 fi
95
96 cmd="$1"
97 shift
98
99 case "$cmd" in
100         "enable-plugin")
101                 [[ $# -gt 0 ]] || Usage
102                 for plugin in "$@"; do
103                         EnablePlugin "$plugin"
104                 done
105                 ;;
106         "disable-plugin")
107                 [[ $# -gt 0 ]] || Usage
108                 for plugin in "$@"; do
109                         DisablePlugin "$plugin"
110                 done
111                 ;;
112         "reset-plugins")
113                 [[ $# -eq 0 ]] || Usage
114                 ResetPlugins
115                 ;;
116         *)
117                 Usage
118 esac