1
1
#! /bin/bash
2
2
3
3
BOLD=' \033[0;1m'
4
-
4
+ source " $HOME " /.bashrc
5
5
command_exists () {
6
- command -v " $1 " > /dev/null 2>&1
6
+ command -v " $1 " > /dev/null 2>&1
7
7
}
8
8
9
9
set -o nounset
@@ -21,144 +21,132 @@ echo "--------------------------------"
21
21
22
22
set +o nounset
23
23
24
- function install_node() {
25
- if ! command_exists npm; then
26
- printf " npm not found, checking for Node.js installation...\n"
27
- if ! command_exists node; then
28
- printf " Node.js not found, installing Node.js via NVM...\n"
29
- export NVM_DIR=" $HOME /.nvm"
30
- if [ ! -d " $NVM_DIR " ]; then
31
- mkdir -p " $NVM_DIR "
32
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
33
- [ -s " $NVM_DIR /nvm.sh" ] && \. " $NVM_DIR /nvm.sh"
34
- else
35
- [ -s " $NVM_DIR /nvm.sh" ] && \. " $NVM_DIR /nvm.sh"
36
- fi
37
-
38
- nvm install --lts
39
- nvm use --lts
40
- nvm alias default node
41
-
42
- printf " Node.js installed: %s\n" " $( node --version) "
43
- printf " npm installed: %s\n" " $( npm --version) "
44
- else
45
- printf " Node.js is installed but npm is not available. Please install npm manually.\n"
46
- exit 1
47
- fi
48
- fi
24
+ function check_dependencies() {
25
+ if ! command_exists node; then
26
+ printf " Error: Node.js is not installed. Please install Node.js manually or use the pre_install_script to install it.\n"
27
+ exit 1
28
+ fi
29
+
30
+ if ! command_exists npm; then
31
+ printf " Error: npm is not installed. Please install npm manually or use the pre_install_script to install it.\n"
32
+ exit 1
33
+ fi
34
+
35
+ printf " Node.js version: %s\n" " $( node --version) "
36
+ printf " npm version: %s\n" " $( npm --version) "
49
37
}
50
38
51
39
function install_gemini() {
52
40
if [ " ${ARG_INSTALL} " = " true" ]; then
53
- install_node
54
-
55
- if ! command_exists nvm; then
56
- printf " which node: %s\n" " $( which node) "
57
- printf " which npm: %s\n" " $( which npm) "
58
-
59
- mkdir -p " $HOME " /.npm-global
60
- npm config set prefix " $HOME /.npm-global"
61
- export PATH=" $HOME /.npm-global/bin:$PATH "
62
- if ! grep -q " export PATH=$HOME /.npm-global/bin:\$ PATH" ~ /.bashrc; then
63
- echo " export PATH=$HOME /.npm-global/bin:\$ PATH" >> ~ /.bashrc
64
- fi
65
- fi
41
+ check_dependencies
66
42
67
43
printf " %s Installing Gemini CLI\n" " ${BOLD} "
68
44
45
+ NPM_GLOBAL_PREFIX=" ${HOME} /.npm-global"
46
+ if [ ! -d " $NPM_GLOBAL_PREFIX " ]; then
47
+ mkdir -p " $NPM_GLOBAL_PREFIX "
48
+ fi
49
+
50
+ npm config set prefix " $NPM_GLOBAL_PREFIX "
51
+
52
+ export PATH=" $NPM_GLOBAL_PREFIX /bin:$PATH "
53
+
69
54
if [ -n " $ARG_GEMINI_VERSION " ]; then
70
55
npm install -g " @google/gemini-cli@$ARG_GEMINI_VERSION "
71
56
else
72
57
npm install -g " @google/gemini-cli"
73
58
fi
59
+
60
+ if ! grep -q " export PATH=\"\$ HOME/.npm-global/bin:\$ PATH\" " " $HOME /.bashrc" ; then
61
+ echo ' export PATH="$HOME/.npm-global/bin:$PATH"' >> " $HOME /.bashrc"
62
+ fi
63
+
74
64
printf " %s Successfully installed Gemini CLI. Version: %s\n" " ${BOLD} " " $( gemini --version) "
75
65
fi
76
66
}
77
67
78
68
function populate_settings_json() {
79
- if [ " ${ARG_GEMINI_CONFIG} " != " " ]; then
80
- SETTINGS_PATH=" $HOME /.gemini/settings.json"
81
- mkdir -p " $( dirname " $SETTINGS_PATH " ) "
82
- printf " Custom gemini_config is provided !\n"
83
- echo " ${ARG_GEMINI_CONFIG} " > " $HOME /.gemini/settings.json"
84
- else
85
- printf " No custom gemini_config provided, using default settings.json.\n"
86
- append_extensions_to_settings_json
87
- fi
88
- }
89
-
90
- function append_extensions_to_settings_json() {
69
+ if [ " ${ARG_GEMINI_CONFIG} " != " " ]; then
91
70
SETTINGS_PATH=" $HOME /.gemini/settings.json"
92
71
mkdir -p " $( dirname " $SETTINGS_PATH " ) "
93
- printf " [append_extensions_to_settings_json] Starting extension merge process...\n"
94
- if [ -z " ${BASE_EXTENSIONS:- } " ]; then
95
- printf " [append_extensions_to_settings_json] BASE_EXTENSIONS is empty, skipping merge.\n"
96
- return
97
- fi
98
- if [ ! -f " $SETTINGS_PATH " ]; then
99
- printf " %s does not exist. Creating with merged mcpServers structure.\n" " $SETTINGS_PATH "
100
- ADD_EXT_JSON=' {}'
101
- if [ -n " ${ADDITIONAL_EXTENSIONS:- } " ]; then
102
- ADD_EXT_JSON=" $ADDITIONAL_EXTENSIONS "
103
- fi
104
- printf ' {"mcpServers":%s}\n' " $( jq -s ' add' <( echo " $BASE_EXTENSIONS " ) <( echo " $ADD_EXT_JSON " ) ) " > " $SETTINGS_PATH "
105
- fi
72
+ printf " Custom gemini_config is provided !\n"
73
+ echo " ${ARG_GEMINI_CONFIG} " > " $HOME /.gemini/settings.json"
74
+ else
75
+ printf " No custom gemini_config provided, using default settings.json.\n"
76
+ append_extensions_to_settings_json
77
+ fi
78
+ }
106
79
107
- TMP_SETTINGS=$( mktemp)
80
+ function append_extensions_to_settings_json() {
81
+ SETTINGS_PATH=" $HOME /.gemini/settings.json"
82
+ mkdir -p " $( dirname " $SETTINGS_PATH " ) "
83
+ printf " [append_extensions_to_settings_json] Starting extension merge process...\n"
84
+ if [ -z " ${BASE_EXTENSIONS:- } " ]; then
85
+ printf " [append_extensions_to_settings_json] BASE_EXTENSIONS is empty, skipping merge.\n"
86
+ return
87
+ fi
88
+ if [ ! -f " $SETTINGS_PATH " ]; then
89
+ printf " %s does not exist. Creating with merged mcpServers structure.\n" " $SETTINGS_PATH "
108
90
ADD_EXT_JSON=' {}'
109
91
if [ -n " ${ADDITIONAL_EXTENSIONS:- } " ]; then
110
- printf " [append_extensions_to_settings_json] ADDITIONAL_EXTENSIONS is set.\n"
111
92
ADD_EXT_JSON=" $ADDITIONAL_EXTENSIONS "
112
- else
113
- printf " [append_extensions_to_settings_json] ADDITIONAL_EXTENSIONS is empty or not set.\n"
114
93
fi
94
+ printf ' {"mcpServers":%s}\n' " $( jq -s ' add' <( echo " $BASE_EXTENSIONS " ) <( echo " $ADD_EXT_JSON " ) ) " > " $SETTINGS_PATH "
95
+ fi
96
+
97
+ TMP_SETTINGS=$( mktemp)
98
+ ADD_EXT_JSON=' {}'
99
+ if [ -n " ${ADDITIONAL_EXTENSIONS:- } " ]; then
100
+ printf " [append_extensions_to_settings_json] ADDITIONAL_EXTENSIONS is set.\n"
101
+ ADD_EXT_JSON=" $ADDITIONAL_EXTENSIONS "
102
+ else
103
+ printf " [append_extensions_to_settings_json] ADDITIONAL_EXTENSIONS is empty or not set.\n"
104
+ fi
115
105
116
- printf " [append_extensions_to_settings_json] Merging BASE_EXTENSIONS and ADDITIONAL_EXTENSIONS into mcpServers...\n"
117
- jq --argjson base " $BASE_EXTENSIONS " --argjson add " $ADD_EXT_JSON " \
118
- ' .mcpServers = (.mcpServers // {} + $base + $add)' \
119
- " $SETTINGS_PATH " > " $TMP_SETTINGS " && mv " $TMP_SETTINGS " " $SETTINGS_PATH "
106
+ printf " [append_extensions_to_settings_json] Merging BASE_EXTENSIONS and ADDITIONAL_EXTENSIONS into mcpServers...\n"
107
+ jq --argjson base " $BASE_EXTENSIONS " --argjson add " $ADD_EXT_JSON " \
108
+ ' .mcpServers = (.mcpServers // {} + $base + $add)' \
109
+ " $SETTINGS_PATH " > " $TMP_SETTINGS " && mv " $TMP_SETTINGS " " $SETTINGS_PATH "
120
110
121
- jq ' .theme = "Default" | .selectedAuthType = "gemini-api-key"' " $SETTINGS_PATH " > " $TMP_SETTINGS " && mv " $TMP_SETTINGS " " $SETTINGS_PATH "
111
+ jq ' .theme = "Default" | .selectedAuthType = "gemini-api-key"' " $SETTINGS_PATH " > " $TMP_SETTINGS " && mv " $TMP_SETTINGS " " $SETTINGS_PATH "
122
112
123
- printf " [append_extensions_to_settings_json] Merge complete.\n"
113
+ printf " [append_extensions_to_settings_json] Merge complete.\n"
124
114
}
125
115
126
116
function add_system_prompt_if_exists() {
127
- if [ -n " ${GEMINI_SYSTEM_PROMPT:- } " ]; then
128
- if [ -d " ${GEMINI_START_DIRECTORY} " ]; then
129
- printf " Directory '%s' exists. Changing to it.\\ n" " ${GEMINI_START_DIRECTORY} "
130
- cd " ${GEMINI_START_DIRECTORY} " || {
131
- printf " Error: Could not change to directory '%s'.\\ n" " ${GEMINI_START_DIRECTORY} "
132
- exit 1
133
- }
134
- else
135
- printf " Directory '%s' does not exist. Creating and changing to it.\\ n" " ${GEMINI_START_DIRECTORY} "
136
- mkdir -p " ${GEMINI_START_DIRECTORY} " || {
137
- printf " Error: Could not create directory '%s'.\\ n" " ${GEMINI_START_DIRECTORY} "
138
- exit 1
139
- }
140
- cd " ${GEMINI_START_DIRECTORY} " || {
141
- printf " Error: Could not change to directory '%s'.\\ n" " ${GEMINI_START_DIRECTORY} "
142
- exit 1
143
- }
144
- fi
145
- touch GEMINI.md
146
- printf " Setting GEMINI.md\n"
147
- echo " ${GEMINI_SYSTEM_PROMPT} " > GEMINI.md
117
+ if [ -n " ${GEMINI_SYSTEM_PROMPT:- } " ]; then
118
+ if [ -d " ${GEMINI_START_DIRECTORY} " ]; then
119
+ printf " Directory '%s' exists. Changing to it.\\ n" " ${GEMINI_START_DIRECTORY} "
120
+ cd " ${GEMINI_START_DIRECTORY} " || {
121
+ printf " Error: Could not change to directory '%s'.\\ n" " ${GEMINI_START_DIRECTORY} "
122
+ exit 1
123
+ }
148
124
else
149
- printf " GEMINI.md is not set.\n"
125
+ printf " Directory '%s' does not exist. Creating and changing to it.\\ n" " ${GEMINI_START_DIRECTORY} "
126
+ mkdir -p " ${GEMINI_START_DIRECTORY} " || {
127
+ printf " Error: Could not create directory '%s'.\\ n" " ${GEMINI_START_DIRECTORY} "
128
+ exit 1
129
+ }
130
+ cd " ${GEMINI_START_DIRECTORY} " || {
131
+ printf " Error: Could not change to directory '%s'.\\ n" " ${GEMINI_START_DIRECTORY} "
132
+ exit 1
133
+ }
150
134
fi
135
+ touch GEMINI.md
136
+ printf " Setting GEMINI.md\n"
137
+ echo " ${GEMINI_SYSTEM_PROMPT} " > GEMINI.md
138
+ else
139
+ printf " GEMINI.md is not set.\n"
140
+ fi
151
141
}
152
142
153
143
function configure_mcp() {
154
- export CODER_MCP_APP_STATUS_SLUG=" gemini"
155
- export CODER_MCP_AI_AGENTAPI_URL=" http://localhost:3284"
156
- coder exp mcp configure gemini " ${GEMINI_START_DIRECTORY} "
144
+ export CODER_MCP_APP_STATUS_SLUG=" gemini"
145
+ export CODER_MCP_AI_AGENTAPI_URL=" http://localhost:3284"
146
+ coder exp mcp configure gemini " ${GEMINI_START_DIRECTORY} "
157
147
}
158
148
159
149
install_gemini
160
- gemini --version
161
150
populate_settings_json
162
151
add_system_prompt_if_exists
163
152
configure_mcp
164
-
0 commit comments