detached 5c93522

feat(preflight): add system identification and user identity gathering

commit
5c9352279811b25fbbfdde97a14219c9ab481e01
author
bnema · · 2025-10-20 18:45 UTC
parent
8713086
signature
unsigned
1 file · +105 -0
A install/preflight/identify.sh +105 -0
@@ -0,0 +1,105 @@
1+#!/bin/bash
2+# User Identity Configuration - All identity prompts consolidated
3+
4+gum style --foreground 6 --padding "1 0 0 $PADDING_LEFT" "User Identity"
5+gum style --padding "0 0 0 $PADDING_LEFT" "Configure your user account and system details"
6+echo
7+
8+# Username
9+ARCHUP_USERNAME=$(gum input --placeholder "username" \
10+ --prompt "Username: " \
11+ --padding "0 0 0 $PADDING_LEFT")
12+
13+if [ -z "$ARCHUP_USERNAME" ]; then
14+ gum style --foreground 1 --padding "1 0 1 $PADDING_LEFT" "ERROR: Username cannot be empty"
15+ exit 1
16+fi
17+
18+# Password (with confirmation)
19+while true; do
20+ ARCHUP_PASSWORD=$(gum input --password --placeholder "Enter password" \
21+ --prompt "Password: " \
22+ --padding "0 0 0 $PADDING_LEFT")
23+
24+ ARCHUP_PASSWORD_CONFIRM=$(gum input --password --placeholder "Confirm password" \
25+ --prompt "Confirm: " \
26+ --padding "0 0 0 $PADDING_LEFT")
27+
28+ if [ "$ARCHUP_PASSWORD" = "$ARCHUP_PASSWORD_CONFIRM" ]; then
29+ break
30+ else
31+ gum style --foreground 1 --padding "1 0 1 $PADDING_LEFT" "Passwords do not match. Try again."
32+ fi
33+done
34+
35+# Email (optional)
36+echo
37+gum style --padding "0 0 0 $PADDING_LEFT" "Email is used for SSH key generation and git configuration"
38+ARCHUP_EMAIL=$(gum input --placeholder "user@example.com (optional)" \
39+ --prompt "Email: " \
40+ --padding "0 0 0 $PADDING_LEFT")
41+
42+# Hostname
43+echo
44+ARCHUP_HOSTNAME=$(gum input --placeholder "archup" \
45+ --prompt "Hostname: " \
46+ --padding "0 0 0 $PADDING_LEFT" \
47+ --value "archup")
48+
49+if [ -z "$ARCHUP_HOSTNAME" ]; then
50+ ARCHUP_HOSTNAME="archup"
51+fi
52+
53+# Timezone (detect via API)
54+echo
55+gum style --foreground 6 --padding "0 0 0 $PADDING_LEFT" "Detecting timezone..."
56+DETECTED_TIMEZONE=$(curl -s "https://ipapi.co/timezone/" 2>/dev/null)
57+
58+if [ -n "$DETECTED_TIMEZONE" ]; then
59+ gum style --foreground 3 --padding "0 0 0 $PADDING_LEFT" "Detected: $DETECTED_TIMEZONE"
60+ if gum confirm "Use detected timezone?" --padding "0 0 0 $PADDING_LEFT"; then
61+ ARCHUP_TIMEZONE="$DETECTED_TIMEZONE"
62+ else
63+ ARCHUP_TIMEZONE=$(gum input --placeholder "America/New_York" \
64+ --prompt "Timezone: " \
65+ --padding "0 0 0 $PADDING_LEFT")
66+ fi
67+else
68+ gum style --foreground 3 --padding "0 0 0 $PADDING_LEFT" "Unable to detect timezone"
69+ ARCHUP_TIMEZONE=$(gum input --placeholder "America/New_York" \
70+ --prompt "Timezone: " \
71+ --padding "0 0 0 $PADDING_LEFT")
72+fi
73+
74+if [ -z "$ARCHUP_TIMEZONE" ]; then
75+ ARCHUP_TIMEZONE="UTC"
76+fi
77+
78+# Export and save all identity variables
79+export ARCHUP_USERNAME
80+export ARCHUP_PASSWORD
81+export ARCHUP_EMAIL
82+export ARCHUP_HOSTNAME
83+export ARCHUP_TIMEZONE
84+
85+config_set "ARCHUP_USERNAME" "$ARCHUP_USERNAME"
86+config_set "ARCHUP_PASSWORD" "$ARCHUP_PASSWORD"
87+config_set "ARCHUP_EMAIL" "$ARCHUP_EMAIL"
88+config_set "ARCHUP_HOSTNAME" "$ARCHUP_HOSTNAME"
89+config_set "ARCHUP_TIMEZONE" "$ARCHUP_TIMEZONE"
90+
91+# Display summary
92+echo
93+gum style --foreground 2 --padding "0 0 0 $PADDING_LEFT" "[OK] User: $ARCHUP_USERNAME"
94+if [ -n "$ARCHUP_EMAIL" ]; then
95+ gum style --foreground 2 --padding "0 0 0 $PADDING_LEFT" "[OK] Email: $ARCHUP_EMAIL"
96+else
97+ gum style --foreground 3 --padding "0 0 0 $PADDING_LEFT" "[SKIP] Email: not provided"
98+fi
99+gum style --foreground 2 --padding "0 0 0 $PADDING_LEFT" "[OK] Hostname: $ARCHUP_HOSTNAME"
100+gum style --foreground 2 --padding "0 0 1 $PADDING_LEFT" "[OK] Timezone: $ARCHUP_TIMEZONE"
101+
102+echo "User: $ARCHUP_USERNAME" >> "$ARCHUP_INSTALL_LOG_FILE"
103+echo "Email: ${ARCHUP_EMAIL:-<not provided>}" >> "$ARCHUP_INSTALL_LOG_FILE"
104+echo "Hostname: $ARCHUP_HOSTNAME" >> "$ARCHUP_INSTALL_LOG_FILE"
105+echo "Timezone: $ARCHUP_TIMEZONE" >> "$ARCHUP_INSTALL_LOG_FILE"
@@ -0,0 +1,105 @@
1+#!/bin/bash
2+# User Identity Configuration - All identity prompts consolidated
3+
4+gum style --foreground 6 --padding "1 0 0 $PADDING_LEFT" "User Identity"
5+gum style --padding "0 0 0 $PADDING_LEFT" "Configure your user account and system details"
6+echo
7+
8+# Username
9+ARCHUP_USERNAME=$(gum input --placeholder "username" \
10+ --prompt "Username: " \
11+ --padding "0 0 0 $PADDING_LEFT")
12+
13+if [ -z "$ARCHUP_USERNAME" ]; then
14+ gum style --foreground 1 --padding "1 0 1 $PADDING_LEFT" "ERROR: Username cannot be empty"
15+ exit 1
16+fi
17+
18+# Password (with confirmation)
19+while true; do
20+ ARCHUP_PASSWORD=$(gum input --password --placeholder "Enter password" \
21+ --prompt "Password: " \
22+ --padding "0 0 0 $PADDING_LEFT")
23+
24+ ARCHUP_PASSWORD_CONFIRM=$(gum input --password --placeholder "Confirm password" \
25+ --prompt "Confirm: " \
26+ --padding "0 0 0 $PADDING_LEFT")
27+
28+ if [ "$ARCHUP_PASSWORD" = "$ARCHUP_PASSWORD_CONFIRM" ]; then
29+ break
30+ else
31+ gum style --foreground 1 --padding "1 0 1 $PADDING_LEFT" "Passwords do not match. Try again."
32+ fi
33+done
34+
35+# Email (optional)
36+echo
37+gum style --padding "0 0 0 $PADDING_LEFT" "Email is used for SSH key generation and git configuration"
38+ARCHUP_EMAIL=$(gum input --placeholder "user@example.com (optional)" \
39+ --prompt "Email: " \
40+ --padding "0 0 0 $PADDING_LEFT")
41+
42+# Hostname
43+echo
44+ARCHUP_HOSTNAME=$(gum input --placeholder "archup" \
45+ --prompt "Hostname: " \
46+ --padding "0 0 0 $PADDING_LEFT" \
47+ --value "archup")
48+
49+if [ -z "$ARCHUP_HOSTNAME" ]; then
50+ ARCHUP_HOSTNAME="archup"
51+fi
52+
53+# Timezone (detect via API)
54+echo
55+gum style --foreground 6 --padding "0 0 0 $PADDING_LEFT" "Detecting timezone..."
56+DETECTED_TIMEZONE=$(curl -s "https://ipapi.co/timezone/" 2>/dev/null)
57+
58+if [ -n "$DETECTED_TIMEZONE" ]; then
59+ gum style --foreground 3 --padding "0 0 0 $PADDING_LEFT" "Detected: $DETECTED_TIMEZONE"
60+ if gum confirm "Use detected timezone?" --padding "0 0 0 $PADDING_LEFT"; then
61+ ARCHUP_TIMEZONE="$DETECTED_TIMEZONE"
62+ else
63+ ARCHUP_TIMEZONE=$(gum input --placeholder "America/New_York" \
64+ --prompt "Timezone: " \
65+ --padding "0 0 0 $PADDING_LEFT")
66+ fi
67+else
68+ gum style --foreground 3 --padding "0 0 0 $PADDING_LEFT" "Unable to detect timezone"
69+ ARCHUP_TIMEZONE=$(gum input --placeholder "America/New_York" \
70+ --prompt "Timezone: " \
71+ --padding "0 0 0 $PADDING_LEFT")
72+fi
73+
74+if [ -z "$ARCHUP_TIMEZONE" ]; then
75+ ARCHUP_TIMEZONE="UTC"
76+fi
77+
78+# Export and save all identity variables
79+export ARCHUP_USERNAME
80+export ARCHUP_PASSWORD
81+export ARCHUP_EMAIL
82+export ARCHUP_HOSTNAME
83+export ARCHUP_TIMEZONE
84+
85+config_set "ARCHUP_USERNAME" "$ARCHUP_USERNAME"
86+config_set "ARCHUP_PASSWORD" "$ARCHUP_PASSWORD"
87+config_set "ARCHUP_EMAIL" "$ARCHUP_EMAIL"
88+config_set "ARCHUP_HOSTNAME" "$ARCHUP_HOSTNAME"
89+config_set "ARCHUP_TIMEZONE" "$ARCHUP_TIMEZONE"
90+
91+# Display summary
92+echo
93+gum style --foreground 2 --padding "0 0 0 $PADDING_LEFT" "[OK] User: $ARCHUP_USERNAME"
94+if [ -n "$ARCHUP_EMAIL" ]; then
95+ gum style --foreground 2 --padding "0 0 0 $PADDING_LEFT" "[OK] Email: $ARCHUP_EMAIL"
96+else
97+ gum style --foreground 3 --padding "0 0 0 $PADDING_LEFT" "[SKIP] Email: not provided"
98+fi
99+gum style --foreground 2 --padding "0 0 0 $PADDING_LEFT" "[OK] Hostname: $ARCHUP_HOSTNAME"
100+gum style --foreground 2 --padding "0 0 1 $PADDING_LEFT" "[OK] Timezone: $ARCHUP_TIMEZONE"
101+
102+echo "User: $ARCHUP_USERNAME" >> "$ARCHUP_INSTALL_LOG_FILE"
103+echo "Email: ${ARCHUP_EMAIL:-<not provided>}" >> "$ARCHUP_INSTALL_LOG_FILE"
104+echo "Hostname: $ARCHUP_HOSTNAME" >> "$ARCHUP_INSTALL_LOG_FILE"
105+echo "Timezone: $ARCHUP_TIMEZONE" >> "$ARCHUP_INSTALL_LOG_FILE"

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 0

    ↑↓ moveenter openesc close