-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
setup.sh
executable file
·148 lines (125 loc) · 4.59 KB
/
setup.sh
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/bin/bash
# Reset
NC='\033[0m' # No Color
# Regular Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
# Bold
BOLD_RED='\033[1;31m'
BOLD_YELLOW='\033[1;33m'
BOLD_BLUE='\033[1;34m'
BOLD_PURPLE='\033[1;35m'
BOLD_CYAN='\033[1;36m'
FNM_INSTALL_PATH="/config/.fnm"
export PATH="./node_modules/figlet-cli/bin/:$FNM_INSTALL_PATH:$PATH"
echo -e "${BOLD_GREEN}quick setup${NC}"
default_folder_name="home_automation"
cd /config || exit 1
valid=0
while [ $valid -eq 0 ]; do
echo -e "Install target (default: ${BLUE}${default_folder_name}${NC}): \c"
read -r -p "" folder_name
folder_name=${folder_name:-"$default_folder_name"}
folder_name=${folder_name//[-]/_}
# Check if the folder name starts with a letter or underscore and contains only letters, numbers, or underscores
if [[ $folder_name =~ ^[a-zA-Z_]+[a-zA-Z0-9_]*$ ]]; then
valid=1
else
echo "The folder name must start with a letter or underscore and contain only letters, numbers, or underscores."
echo "Please enter a valid folder name."
fi
done
wget -nv https://github.com/Digital-Alchemy-TS/haos-template/archive/refs/heads/main.zip
unzip -q main.zip
# Either set up a new workspace, or update scripts/ based on repo
if [ -d "$folder_name" ]; then
echo -e "${BOLD_YELLOW}Target already exists, aborting${NC}"
exit
else
mv haos-template-main "$folder_name"
fi
rm main.zip
cd "$folder_name" || exit
# Customize the code based on the folder name!
# Variable replacements in code
if [ "$folder_name" != "$default_folder_name" ]; then
new_name=$(basename "$folder_name")
sed -i "s/home_automation/$new_name/g" package.json
sed -i "s/home_automation/$new_name/g" automation.code-workspace
sed -i "s/home_automation/$new_name/g" README.md
sed -i "s/home_automation/$new_name/g" ./addon/config.yaml
find ./src -type f -name "*.ts" -exec sed -i "s/home_automation/$new_name/g" {} \;
fi
echo -e "${BOLD_YELLOW}1.${NC} checking ${BOLD_CYAN}fnm${NC}"
# cannot find fnm command
if ! command -v fnm &>/dev/null; then
# install if not exists
if [ ! -d "$FNM_INSTALL_PATH" ]; then
echo -e "${BOLD_PURPLE}fnm${NC} could not be found, installing..."
curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "$FNM_INSTALL_PATH" --skip-shell
fi
# import into local session
echo -e "loading ${BOLD_PURPLE}fnm${NC}"
eval "$(fnm env --shell=bash)"
else
echo -e "${GREEN}already loaded${NC}"
eval "$(fnm env --shell=bash)"
fi
echo
echo -e "${BOLD_YELLOW}2.${NC} checking ${BOLD_CYAN}zshenv${NC}"
if [ ! -f ~/.zshenv ] || ! grep -q "fnm env" ~/.zshenv; then
echo -e "writing changes to ${GREEN}~/.zshenv${NC}"
echo "export PATH=\"$FNM_INSTALL_PATH:\$PATH\"" >>~/.zshenv
echo "eval \"\$(fnm env --shell=zsh)\"" >>~/.zshenv
else
echo -e "${GREEN}already configured${NC}"
fi
echo
echo -e "${BOLD_YELLOW}3.${NC} checking ${BOLD_CYAN}node${NC}"
if ! node -v node &>/dev/null; then
echo -e "${BOLD_PURPLE}node${NC} could not be found, installing..."
fnm install 20
fnm default 20
else
echo -e "${GREEN}already installed${NC}"
fi
echo
echo -e "${BOLD_YELLOW}4.${NC} verifying ${BOLD_CYAN}node_modules${NC}"
corepack enable && corepack prepare yarn@stable --activate
yarn install
yarn up "@digital-alchemy/*"
rm -rf node_modules yarn.lock
yarn install
echo -e "${GREEN}done${NC}"
echo
echo -e "${BOLD_YELLOW}6.${NC} rebuilding ${BOLD_CYAN}custom definitions${NC}"
npx type-writer
echo
cd ..
rm setup.sh
echo
echo -e "${BOLD_YELLOW}0.${NC} ${BOLD}load nodejs for your current terminal"
echo -e " ${BLUE}-${NC} ${BOLD_CYAN}source ~/.zshenv${NC}"
echo
echo -e "${BOLD_YELLOW}1.${NC} ${BOLD}write your code"
echo -e " ${BLUE}-${NC} ${BOLD_CYAN}src/main.ts${NC} is the application entry point"
echo -e " ${BLUE}-${NC} demonstration project included (has made up entities)"
echo
echo -e "${BOLD_YELLOW}2.${NC} ${BOLD}run dev server"
echo -e " ${BLUE}-${NC} ${BOLD_CYAN}yarn start${NC}"
echo -e " ${BLUE}-${NC} sends a hello world notification! (probably)"
echo
echo -e "${BOLD_YELLOW}3.${NC} configure ${BOLD}Code Server"
echo -e " ${BLUE}-${NC} add ${BOLD_CYAN}/config/${folder_name}/scripts/init.sh${NC} as an init_command"
echo -e " ${BLUE}-${NC} ensure your workspace is immediately usable after reboots"
echo
echo -e "${BOLD_YELLOW}4.${NC} ${BOLD}install addon"
echo -e " ${BLUE}-${NC} install the Code Runner addon to run your stable builds in the background"
echo
echo -e "${BOLD_YELLOW}5.${NC} ${BOLD}install synapse-extension"
echo -e " ${BLUE}-${NC} add the integration via HACS to generate helper entities"
echo
echo -e "${BOLD_YELLOW}6.${NC} ${BOLD}syncthing?"
echo -e " ${BLUE}-${NC} use the syncthing addon to write code remotely with ease"
echo
exit 0