@@ -5,127 +5,128 @@ if [[ "$OSTYPE" != darwin* ]]; then
5
5
return 1
6
6
fi
7
7
8
- _gnu_check_install () {
9
- [[ -d /usr/local/gnu/bin ]] && return 0
10
- [[ -d /opt/gnu/bin ]] && return 0
11
- echo " Does not look like gnu utilities are installed via homebrew" >&2
12
- echo " Please run gnu install" >&2
13
- return 1
14
- }
15
-
16
- _gnu_check_is_sourced () {
17
- (( _gnu_is_sourced )) && return 0
18
- echo " gnu $_gnu_action must be is_sourced. Run as:" >&2
19
- echo " $ $_gnu_source_run $_gnu_action " >&2
20
- echo " or" >&2
21
- echo " $ $_gnu_source_run load; gnu $_gnu_action " >&2
22
- if [[ " $_gnu_action " == ' on' || " $_gnu_action " == ' off' ]]; then
23
- echo " or you can turn gnu $_gnu_action via eval" >&2
24
- echo " $ eval \"\$ ($_gnu_run eval-$_gnu_action )\" " >&2
8
+ _gnu_check () {
9
+ if ! [[ -d /usr/local/gnu/bin || -d /opt/gnu/bin ]]; then
10
+ echo " Gnu utilities are not installed properly, reinstall with:" >&2
11
+ echo >&2
12
+ echo " $ gnu install" >&2
13
+ echo >&2
14
+ echo " or" >&2
15
+ echo >&2
16
+ echo /bin/bash -c " $( curl -fsSL $_gnu_url ) " >&2
17
+ export _gnu_exit=2
18
+ return 2
25
19
fi
26
- return 1
27
- }
28
-
29
- _gnu_install () {
30
- local state=" $( set +o) " # Store shell args
31
- set -e -u -o pipefail
32
- if ! $( which brew > /dev/null) ; then # Install brew
33
- /bin/bash -c " $( curl -fsSL \
34
- https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) "
20
+ if ! (( _gnu_is_sourced )) ; then
21
+ echo " gnu $_gnu_action must be is_sourced. Run as:" >&2
22
+ echo >&2
23
+ echo " $ source $_gnu_path $_gnu_action " >&2
24
+ echo >&2
25
+ echo " or" >&2
26
+ echo >&2
27
+ echo " $ source $_gnu_path load # Use gnu as a shell extension" >&2
28
+ echo " $ gnu $_gnu_action " >&2
29
+ if [[ " $_gnu_action " == ' on' || " $_gnu_action " == ' off' ]]; then
30
+ echo >&2
31
+ echo " or you can turn gnu $_gnu_action via eval" >&2
32
+ echo >&2
33
+ echo " $ eval \"\$ (gnu eval-$_gnu_action )\" " >&2
34
+ fi
35
+ export _gnu_exit=3
36
+ return 3
35
37
fi
36
- sudo mkdir -p /usr/local/bin
37
- echo " Copying..."
38
- sudo cp -v -f " $_gnu_script " /usr/local/bin/
39
- sudo chmod +x /usr/local/bin/" $_gnu_me "
40
- local base=/usr/local;
41
- if /opt/homebrew/bin/brew --prefix > /dev/null 2>&1 ; then base=/opt; fi
42
- sudo mkdir -p $base /gnu/bin
43
- sudo mkdir -p $base /gnu/man/man1
44
- local packages=(coreutils findutils grep gawk gnu-sed gnu-tar gnu-which)
45
- local pkg
46
- for pkg in ${packages[@]} ; do
47
- brew install " $pkg "
48
- echo " Symlinking..."
49
- local prefix=$( brew --prefix " $pkg " )
50
- cd " $prefix /libexec/gnubin/"
51
- local file
52
- for file in * ; do
53
- sudo ln -v -f -s -L " $( pwd) /$file " " $base /gnu/bin/$file "
54
- done
55
- cd " $prefix /libexec/gnuman/man1/"
56
- for file in * ; do
57
- sudo ln -v -f -s -L " $( pwd) /$file " " $base /gnu/man/man1/$file "
58
- done
59
- done
60
- eval " $state " # Reset shell args
61
38
}
62
39
40
+ export _gnu_url=" https://raw.githubusercontent.com/kilna/gnu-on/main/install.sh"
63
41
export _gnu_source=" ${BASH_SOURCE[0]:- ${(% ):-% x} } "
64
- export _gnu_script=" $( realpath " $_gnu_source " ) "
65
- export _gnu_me=" $( basename " $_gnu_script " ) "
66
- export _gnu_dir=" $( dirname $_gnu_script | sed -e " s;^$HOME /;~/;" ) "
67
- export _gnu_path=" $_gnu_dir /$_gnu_me "
68
- export _gnu_is_sourced=0; [[ " $_gnu_source " != " $0 " ]] && _gnu_is_sourced=1
69
- [[ " $zsh_eval_context " == * ' file' * ]] && _gnu_is_sourced=1
70
- export _gnu_run=" $_gnu_path "
71
- export _gnu_source_run=" source $_gnu_path "
72
- export _gnu_where=" $( whereis -q -b " $_gnu_me " ) "
73
- if [[ " $_gnu_where " && " $( realpath " $_gnu_where " ) " == " $_gnu_script " ]]; then
74
- _gnu_run=" $_gnu_me "
75
- _gnu_source_run=' source "$(whereis -q -b $_gnu_me)"'
76
- fi
77
- export _gnu_action=load
42
+ export _gnu_is_sourced=0
43
+ if [[ " $_gnu_source " != " $0 " ]]; then _gnu_is_sourced=1
44
+ elif [[ " $zsh_eval_context " == * ' file' * ]]; then _gnu_is_sourced=1; fi
45
+ export _gnu_exit=0
46
+ export _gnu_script=" $( realpath " $_gnu_source " ) " # Canonical script location
47
+ export _gnu_path=" $( echo " $_gnu_script " | sed -e " s;^$HOME /;~/;" ) " # Pretty
48
+ export _gnu_base=/usr/local/gnu;
49
+ if /opt/homebrew/bin/brew --prefix > /dev/null 2>&1 ; then _gnu_base=/opt/gnu; fi
78
50
79
- while [[ $# -gt 0 ]]; do case " $1 " in
80
- install|load|unload|on|off|eval-on|eval-off) _gnu_action=" $1 " ; shift ;;
81
- * ) echo " Unknown option: $1 " >&2 ; (( _gnu_is_sourced )) && return 1 || exit 1;;
82
- esac ; done
51
+ export _gnu_action=load
52
+ while [[ $# -gt 0 ]]; do
53
+ case " $1 " in
54
+ install|load|' ' |unload|on|off|eval-on|eval-off) _gnu_action=" $1 " ; shift ;;
55
+ help|--help|-h) _gnu_action=" help" ; shift ;;
56
+ * ) echo " Unknown option: $1 " >&2 ; _gnu_action=" help" ; export _gnu_exit=1;;
57
+ esac
58
+ done
83
59
84
60
case " $_gnu_action " in
61
+ help)
62
+ _gnu_found_usage=0
63
+ while read line; do
64
+ (( _gnu_found_usage )) && echo " $line "
65
+ if [[ " $line " == __USAGE__ ]]; then _gnu_found_usage=1; fi
66
+ done < " $_gnu_script "
67
+ unset _gnu_found_usage
68
+ ;;
85
69
install)
86
- _gnu_install
70
+ /bin/bash -c " $( curl -fsSL $_gnu_url /install.sh ) "
87
71
;;
88
72
load)
89
- _gnu_check_install
90
- _gnu_check_is_sourced
91
- eval " gnu() { source \" $_gnu_script \" \"\$ @ \" ; }; "
73
+ if _gnu_check ; then
74
+ eval " gnu() { source \" $_gnu_script \" \"\$ @ \" ; }; "
75
+ fi
92
76
;;
93
77
unload)
94
78
typeset -f gnu > /dev/null && unset -f gnu
95
79
;;
96
80
on)
97
- _gnu_check_install
98
- _gnu_check_is_sourced
99
- export PATH= " /usr/local/gnu/bin: $PATH "
100
- export MANPATH= " /usr/local/gnu/man: $MANPATH "
81
+ if _gnu_check ; then
82
+ export PATH= " $_gnu_base /bin: $PATH "
83
+ export MANPATH= " $_gnu_base /share/man: $MANPATH "
84
+ fi
101
85
;;
102
86
off)
103
- _gnu_check_install
104
- _gnu_check_is_sourced
105
- export PATH=" $( echo " $PATH " | tr : ' \n' | grep -v -x -F /usr/local/gnu/bin| uniq| awk NF| tr ' \n' :| sed -e ' s/:$//' ) "
106
- export MANPATH=" $( echo " $MANPATH " | tr : ' \n' | grep -v -x -F /usr/local/gnu/man| uniq| awk NF| tr ' \n' :| sed -e ' s/:$//' ) "
87
+ if _gnu_check; then
88
+ # Break-down of how we remove the path from environment
89
+ # echo "$PATH" # gets the path in : delimited format
90
+ # | tr : '\n' # Turns : into newlines
91
+ # | grep -vxF (path) # Removes the path from the newline list
92
+ # | uniq # Gets rid of duplicate lines/paths
93
+ # | awk NF # Gets rid of blank lines/paths
94
+ # | tr '\n' : # Turns it back into a : delimted list
95
+ # | sed -e 's/:$//' # Removes trailing :
96
+ export PATH=" $( echo " $PATH " | tr : ' \n' \
97
+ | grep -vxF $_gnu_base /bin \
98
+ | uniq | awk NF | tr ' \n' : | sed -e ' s/:$//' ) "
99
+ export MANPATH=" $( echo " $MANPATH " | tr : ' \n' \
100
+ | grep -vxF $_gnu_base /share/man \
101
+ | uniq | awk NF | tr ' \n' : | sed -e ' s/:$//' ) "
102
+ fi
107
103
;;
108
104
eval-on)
109
- echo ' export PATH="/usr/local/gnu /bin:$PATH"'
110
- echo ' export MANPATH="/usr/local/gnu /man:$MANPATH"'
105
+ echo ' export PATH="' $_gnu_base ' /bin:$PATH"'
106
+ echo ' export MANPATH="' $_gnu_base ' /man:$MANPATH"'
111
107
;;
112
108
eval-off)
113
- echo ' export PATH="$(echo "$PATH"|tr : ' \' ' \n' \' ' |grep -v -x -F /usr/local/gnu/bin|uniq|awk NF|tr ' \' ' \n' \' ' :|sed -e ' \' ' s/:$//' \' ' )"'
114
- echo ' export MANPATH="$(echo "$MANPATH"|tr : ' \' ' \n' \' ' |grep -v -x -F /usr/local/gnu/man|uniq|awk NF|tr ' \' ' \n' \' ' :|sed -e ' \' ' s/:$//' \' ' )"'
109
+ echo -n ' export PATH="$(echo "$PATH"|tr : ' \' ' \n' \'
110
+ echo -n ' |grep -vxF ' $_gnu_base ' /bin'
111
+ echo ' |uniq|awk NF|tr ' \' ' \n' \' ' :|sed -e ' \' ' s/:$//' \' ' )"'
112
+ echo -n ' export MANPATH="$(echo "$MANPATH"|tr : ' \' ' \n' \'
113
+ echo -n ' |grep -vxF ' $_gnu_base ' /share/man'
114
+ echo ' |uniq|awk NF|tr ' \' ' \n' \' ' :|sed -e ' \' ' s/:$//' \' ' )"'
115
115
;;
116
116
esac
117
+
118
+ (( _gnu_is_sourced )) || exit _gnu_exit
119
+
120
+ unset _gnu_url
117
121
unset _gnu_source
122
+ unset _gnu_is_sourced
118
123
unset _gnu_script
119
- unset _gnu_me
120
- unset _gnu_dir
121
124
unset _gnu_path
122
- unset _gnu_run
123
- unset _gnu_source_run
125
+ unset _gnu_base
124
126
unset _gnu_action
125
- unset _gnu_quiet
126
- unset _gnu_is_sourced
127
- unset _gnu_where
128
- unset -f _gnu_install
129
- unset -f _gnu_check_install
130
- unset -f _gnu_check_is_sourced
127
+ unset -f _gnu_check
128
+
129
+ return $_gnu_exit
130
+
131
+ __USAGE__
131
132
0 commit comments