aboutsummaryrefslogtreecommitdiff
path: root/lib/funcs.sh
blob: 585c4aa60a516076857a2e8dbeb1cb31a0e51452 (plain)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#1: message
yes_no() {
	read -p "$1 (y/[n])" inp
	case $inp in
		[yY]* ) return 0;;
		* ) 	return 1;;
	esac
}

#interface on sterr
multiselector() {
	local argc=$#
	local argv=( "$@" )
	local cnt=0
	local ret=""

	for entry in "$@"; do
		>&2 echo "$cnt) $entry"
		((cnt=cnt + 1))
	done

	>&2 echo "Select entry(s)"
	>&2 echo "eg. '1 3' '1-4' 'a'"
	>&2 read -p " > " inp

	for sel in $inp; do
		local reg_range="^[0-9]+\-[0-9]+$"
		local reg_single="^[0-9]+$"
		local reg_all="^[aA]+"

		if [[ $sel =~ $reg_range ]]; then
			range=($(echo $sel | tr "-" " "))
			for (( i=${range[0]}; i<=${range[1]}; i++ )); do
				ret="$ret ${argv[$i]}"
			done
		elif [[ $sel =~ $reg_single ]]; then
			ret="$ret ${argv[$sel]}"
		elif [[ $sel =~ $reg_all ]]; then
			ret=$@
			break;
		else
			>&2 echo "Wrong input at \"$sel\""
			ret=""
			break
		fi
	done
	echo $ret
}

selector() {
	local regex="^-?[0-9]+\$"
	local cnt=0
	for selection in "$@"
	do
		echo "$cnt) $selection"
		((cnt=$cnt + 1))
	done

	read -p "(default=0) >" inp
	if [[ "$inp" =~ $regex ]] && [ $inp -ge 0 -a $inp -le $# ]
	then
		echo $inp
		return $inp
	elif [ -z $inp ]
	then
		return 0
	else
		return 2
	fi
}

#1: source 2: destination
link() {
	if [ -e "$2" ]; then
		if yes_no "$(basename $2) exists. Overwrite?"; then
			if [ -d "$2" ]; then
				rm -R "$2"
			else
				rm "$2"
			fi
		else
			return
		fi
	fi

	if [ ! -d "$(dirname $2)" ]; then
		debug "$(dirname $2) does not exit. Creating it."
		mkdir -p "$(dirname $2)"
	fi

	ln -s "$1" "$2"
}

choose_target() {
	if [ ! -z "${CONFIGS[$1]}" ]; then
		echo "Install $(pwd)/$1 to $HOME/${CONFIGS[$1]}/$1"
		link "$(pwd)/$1" "$HOME/${CONFIGS[$1]}/$1"
	elif [ ! -z "${SETS[$1]}" ]; then
		for f in ${SETS[$1]}; do
			choose_target $f
		done
	else
		echo Target $1 not found. skipping.
	fi
}

debug() {
	if [ "$DEBUG" = "yes" ]; then
		echo "[DEBUG] $@"
	fi
}

warning() {
	echo "[WARNING] $@"
}