Merge pull request #2 from crystal-linux/development

seems to work :shipit:
readme-update
axtloss 2 years ago committed by GitHub
commit eb35b3485a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,18 @@
# Maintainer: echo -n 'bWF0dEBnZXRjcnlzdC5hbA==' | base64 --decode
pkgname=jade_tui
pkgver=1.0.0
pkgrel=1
pkgdesc="TUI for installing the system with jade"
license=('GPL3')
arch=('any')
url="https://github.com/crystal-linux/jade-tui"
source=("jade-tui" "locales")
depends=('jade' 'gum' 'openssl')
md5sums=('f8bfed0ea3f1b5e85138b0c8b4770e48'
'cba37f460dcf5f678043df39d6378c35')
package() {
install -D -m 755 jade-tui ${pkgdir}/usr/bin/.
install -D -m 700 locales ${pkgdir}/usr/share/jade-tui/.
}

@ -1,7 +1,20 @@
#!/usr/bin/bash #!/usr/bin/bash
# Welcome screen version="2.0.0 beta"
gum confirm "$(gum style --border normal --margin '1' --padding '1 2' --border-foreground 212 "$(gum style --foreground 212 ' mysssym
main_color="#A900FF"
warning_color="#ff0000"
export BORDER_FOREGROUND="$main_color"
export GUM_CONFIRM_SELECTED_BACKGROUND="$main_color"
export GUM_CHOOSE_CURSOR_FOREGROUND="$main_color"
export GUM_CHOOSE_SELECTED_FOREGROUND="$main_color"
export GUM_INPUT_CURSOR_FOREGROUND="$main_color"
export GUM_FILTER_INDICATOR_FOREGROUND="$main_color"
export FOREGROUND="#ffffff"
Welcome() {
gum confirm "$(gum style --border normal --margin '1' --padding '1 2' "$(gum style --foreground "$main_color" ' mysssym
mysssym mysssym
mysssym mysssym
mysssym mysssym
@ -20,198 +33,292 @@ gum confirm "$(gum style --border normal --margin '1' --padding '1 2' --border-f
dysssym dysssym
dysssym dysssym
dysssym dysssym
dysssym')" "" "Welcome to jade-tui" "Ready to make your Crystal installation... ready?")" && CONTINUE=true dysssym')" "" "Welcome to jade-tui" "Ready to make your Crystal installation... ready?" "$(gum style --foreground "#2B2B2B" "jade-tui version: $version")")" && CONTINUE=true
if [[ $CONTINUE != "true" ]]; then if [[ $CONTINUE != "true" ]]; then
echo "Exiting. Have a good day!" echo "Exiting. Have a good day!"
exit exit
fi fi
}
# Select timezone, keymap, locale
timezone=$(timedatectl list-timezones | gum filter --placeholder "select a timezone") Timezone() {
keymap=$(localectl list-keymaps | gum filter --placeholder "select a keymap") timezone=$(timedatectl list-timezones | gum filter --placeholder "select a timezone")
locale=$(cat /usr/share/jade-tui/locales | gum filter --placeholder "select a locale") }
# Username Keymap() {
clear keymap=$(localectl list-keymaps | gum filter --placeholder "select a keymap")
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Please enter your username" }
username=$(gum input --placeholder "Please enter your username")
Locale() {
# User password locale=$(cat /usr/share/jade-tui/locales | gum filter --placeholder "select a locale")
matches="false" }
passwrong="false"
while [[ "$matches" == "false" ]]; do Username() {
clear clear
if [[ "$passwrong" == "true" ]]; then gum style --border normal --margin "1" --padding "1 2" "Please enter your username"
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Passwords did not match, please type the password again" username=$(gum input --placeholder "Please enter your username")
else }
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Now enter your password"
fi Password() {
password=$(gum input --password --placeholder "Please enter a password") matches="false"
clear passwrong="false"
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Verify your password" while [[ "$matches" == "false" ]]; do
password_verif=$(gum input --password --placeholder "Type your password again") clear
if [[ "$password" == "$password_verif" ]]; then if [[ "$passwrong" == "true" ]]; then
matches="true" gum style --border normal --margin "1" --padding "1 2" "Passwords did not match, please type the password again"
else else
passwrong="true" gum style --border normal --margin "1" --padding "1 2" "Now enter your password"
fi fi
done password=$(gum input --password --placeholder "Please enter a password")
crypt_password=$(openssl passwd -crypt $password) clear
gum style --border normal --margin "1" --padding "1 2" "Verify your password"
# Root password password_verif=$(gum input --password --placeholder "Type your password again")
clear if [[ "$password" == "$password_verif" ]]; then
different_root_password=true matches="true"
gum confirm "$(gum style --border normal --margin '1' --padding '1 2' --border-foreground 212 'Use same password for root?')" && different_root_password=false else
if [[ $different_root_password != "true" ]]; then passwrong="true"
root_password=$password # set root password same as user password fi
else done
root_matches="false" crypt_password=$(openssl passwd -crypt $password)
root_passwrong="false" }
while [[ "$root_matches" == "false" ]]; do
clear RootPassword() {
if [[ "$root_passwrong" == "true" ]]; then clear
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Passwords did not match, please type the root password again" different_root_password=true
else gum confirm "$(gum style --border normal --margin '1' --padding '1 2' 'Use same password for root?')" && different_root_password=false
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Now enter your root password" if [[ $different_root_password != "true" ]]; then
fi root_password=$password # set root password same as user password
root_password=$(gum input --password --placeholder "Please enter a root password") else
clear root_matches="false"
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Verify your root password" root_passwrong="false"
root_password_verif=$(gum input --password --placeholder "Type your root password again") while [[ "$root_matches" == "false" ]]; do
if [[ "$root_password" == "$root_password_verif" ]]; then clear
root_matches="true" if [[ "$root_passwrong" == "true" ]]; then
else gum style --border normal --margin "1" --padding "1 2" "Passwords did not match, please type the root password again"
root_passwrong="true" else
fi gum style --border normal --margin "1" --padding "1 2" "Now enter your root password"
done fi
fi root_password=$(gum input --password --placeholder "Please enter a root password")
crypt_root_password=$(openssl passwd -crypt ${root_password}) clear
gum style --border normal --margin "1" --padding "1 2" "Verify your root password"
# Default shell root_password_verif=$(gum input --password --placeholder "Type your root password again")
clear if [[ "$root_password" == "$root_password_verif" ]]; then
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Select a default shell" root_matches="true"
shell=$(gum choose --limit 1 fish zsh bash) else
if [[ "$shell" == "fish" ]]; then root_passwrong="true"
fish_pkg="\"fish\"" fi
else done
fish_pkg=""
fi
# Hostname
clear
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Please enter a hostname"
hostname=$(gum input --placeholder "Please enter a hostname")
# Select disk
clear
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Please select the disk to install to" "$(gum style --foreground 212 'WARNING: This will erease the whole disk')"
disk_dev=$(lsblk -pdo name | grep -v zram | grep -v NAME | grep -v loop | grep -v sr | gum choose --limit 1)
disk=$(echo $disk_dev | awk '{ print substr ($0, 6 ) }')
# Select desktop
clear
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Select a desktop to use"
desktop=$(gum choose --limit 1 gnome kde budgie mate cinnamon lxqt sway i3gaps herbstluftwm awesome bspwm)
# misc settings
clear
gum style --border normal --margin "1" --padding "1 2" --border-foreground 212 "Some miscellaneous settings" "Use space to enable/disable"
misc_settings=$(gum choose --limit 4 "Enable ipv6" "Enable timeshift" "Enable zramd" "Enable flatpak")
enable_ipv6="false"
enable_timeshift="false"
enable_zramd="false"
enable_flatpak="false"
if [[ $misc_settings == *"ipv6"* ]]; then
enable_ipv6="true"
fi
if [[ $misc_settings == *"timeshift"* ]]; then
enable_timeshift="true"
fi
if [[ $misc_settings == *"zramd"* ]]; then
enable_zramd="true"
fi
if [[ $misc_settings == *"flatpak"* ]]; then
enable_flatpak="true"
fi
# Check if system is uefi
is_uefi=$([ -d /sys/firmware/efi ] && echo true || echo false)
if [[ $is_uefi == "true" ]]; then
grub_type="grub-efi"
grub_location="/boot/efi"
else
grub_type="grub-legacy"
grub_location="$disk_dev"
fi
# Summary
clear
CONTINUE=false
gum confirm "$(gum style --border normal --margin '1' --padding '1 2' --border-foreground 212 "Summary, is this correct?" "" "keymap: $keymap" "timezone: $timezone" "locale: $locale" "username: $username" "password: $password" "Default shell: $shell" "root-password: $root_password" "hostname: $hostname" "disk: $disk" "desktop: $desktop" "ipv6: $enable_ipv6" "timeshift: $enable_timeshift" "enable zramd: $enable_zramd" "enable flatpak: $enable_flatpak" "efi: $is_uefi")" && CONTINUE=true
if [[ $CONTINUE != "true" ]]; then
echo "Exiting. Have a good day!"
exit
else
# Remove config.json if it exists
if [[ $(ls | grep "/tmp/config.json") ]]; then
rm /tmp/config.json
fi fi
# Make config.json crypt_root_password=$(openssl passwd -crypt ${root_password})
echo "{ }
\"partition\": {
\"device\": \"$disk\", Shell() {
\"mode\": \"Auto\", clear
\"efi\": $is_uefi, gum style --border normal --margin "1" --padding "1 2" "Select a default shell"
\"partitions\": [] shell=$(gum choose --limit 1 fish zsh bash)
},
\"bootloader\": { # TODO: remove when jade works all the time
\"type\": \"$grub_type\", if [[ "$shell" == "fish" ]]; then
\"location\": \"$grub_location\" fish_pkg="\"fish\""
}, else
\"locale\": { fish_pkg=""
\"locale\": [ fi
\"$locale\" }
],
\"keymap\": \"$keymap\", Hostname() {
\"timezone\": \"$timezone\" clear
}, gum style --border normal --margin "1" --padding "1 2" "Please enter a hostname"
\"networking\": { hostname=$(gum input --placeholder "Please enter a hostname")
\"hostname\": \"$hostname\", }
\"ipv6\": $enable_ipv6
}, AutoDisk() {
\"users\": [ clear
{ gum style --border normal --margin "1" --padding "1 2" "Please select the disk to install to" "$(gum style --foreground "$warning_color" 'WARNING: This will erease the whole disk')"
\"name\": \"$username\", disk_dev=$(lsblk -pdo name | grep -v zram | grep -v NAME | grep -v loop | grep -v sr | gum choose --limit 1)
\"password\": \"$crypt_password\", disk=$(echo $disk_dev | awk '{ print substr ($0, 6 ) }')
\"hasroot\": true, }
\"shell\": \"$shell\"
} UEFICheck() {
], is_uefi=$([ -d /sys/firmware/efi ] && echo true || echo false)
\"rootpass\": \"$crypt_root_password\", if [[ $is_uefi == "true" ]]; then
\"desktop\": \"$desktop\", grub_type="grub-efi"
\"timeshift\": $enable_timeshift, grub_location="/boot/efi"
\"extra_packages\": [ else
$fish_pkg grub_type="grub-legacy"
], grub_location="$disk_dev"
\"flatpak\": $enable_flatpak, fi
\"zramd\": $enable_zramd, }
\"unakite\": {
\"enable\": false, ManualDisk() {
\"root\": \"/dev/null\", testing="true"
\"oldroot\": \"$disk\", # TODO: Add manual disk partitioning support
\"efidir\": \"/dev/null\", # 1. Check if UEFI or BIOS
\"bootdev\": \"/dev/null\" if [[ $is_uefi == "true" || $testing == "true" ]]; then
}, # 2. Show what the user has to create like in arch wiki
\"kernel\": \"linux\" gum style --border normal --margin "1" --padding "1 2" "Example partition layout:"
}" > /tmp/config.json gum style --border normal --foreground $warning_color "Note: swap partition needs to be enabled after install"
fi echo ""
echo ""
# Ask to install
CONTINUE=false EFI_PART=$(gum style --border normal "EFI system partition")
gum confirm "$(gum style --border normal --margin '1' --padding '1 2' --border-foreground 212 "Are you sure you want to install?" "$(gum style --foreground 212 'WARNING: This will erease the whole disk')")" && CONTINUE=true EFI_SIZE=$(gum style --border normal "At least 300 MiB")
if [[ $CONTINUE != "true" ]]; then SWAP_PART=$(gum style --border normal "Linux swap")
echo "Exiting. Have a good day!" SWAP_SIZE=$(gum style --border normal "More than 512 MiB")
exit ROOT_PART=$(gum style --border normal "Linux x86-64 root")
else ROOT_SIZE=$(gum style --border normal "Remainder of the device")
sudo jade config /tmp/config.json EFI_ROW=$(gum join "$EFI_PART" "$EFI_SIZE")
fi SWAP_ROW=$(gum join "$SWAP_PART" "$SWAP_SIZE")
ROOT_ROW=$(gum join "$ROOT_PART" "$ROOT_SIZE")
gum join --vertical "$EFI_ROW" "$SWAP_ROW" "$ROOT_ROW"
# 3. Open cfdisk
gum style --border normal --margin "1" --padding "1 2" "Please select the disk to partition" "$(gum style --foreground "$warning_color" 'WARNING: This will erease the whole disk')"
disk_dev=$(lsblk -pdo name | grep -v zram | grep -v NAME | grep -v loop | grep -v sr | gum choose --limit 1)
clear
gum style --border normal --margin "1" --padding "1 2" "Password: crystal"
sudo cfdisk $disk_dev
# 4. Ask what partition is what
clear
gum style --border normal --margin "1" --padding "1 2" "Select EFI partition"
efi_part=$(lsblk | grep -v zram | grep -v NAME | grep -v loop | grep -v sr | gum choose --limit 1)
clear
gum style --border normal --margin "1" --padding "1 2" "Select EFI partition mountpoint"
efi_part_mount=$(gum choose --limit 1 "none" "/" "/boot" "/boot/efi" "/home" "/opt" "/tmp" "/usr" "var")
clear
gum style --border normal --margin "1" --padding "1 2" "Select root partition"
root_part=$(lsblk | grep -v zram | grep -v NAME | grep -v loop | grep -v sr | gum choose --limit 1)
clear
gum style --border normal --margin "1" --padding "1 2" "Select root partition mountpoint"
root_part_mount=$(gum choose --limit 1 "none" "/" "/boot" "/boot/efi" "/home" "/opt" "/tmp" "/usr" "var")
# TODO: remove junk from efi_part, root_part
else
echo Manual BIOS partitioning is not supported yet
fi
}
Desktop() {
clear
gum style --border normal --margin "1" --padding "1 2" "Select a desktop to use"
desktop=$(gum choose --limit 1 gnome kde budgie mate cinnamon lxqt sway i3gaps herbstluftwm awesome bspwm)
}
Misc() {
clear
gum style --border normal --margin "1" --padding "1 2" "Some miscellaneous settings" "Use space to enable/disable"
misc_settings=$(gum choose --limit 4 "Enable ipv6" "Enable timeshift" "Enable zramd" "Enable flatpak")
enable_ipv6="false"
enable_timeshift="false"
enable_zramd="false"
enable_flatpak="false"
if [[ $misc_settings == *"ipv6"* ]]; then
enable_ipv6="true"
fi
if [[ $misc_settings == *"timeshift"* ]]; then
enable_timeshift="true"
fi
if [[ $misc_settings == *"zramd"* ]]; then
enable_zramd="true"
fi
if [[ $misc_settings == *"flatpak"* ]]; then
enable_flatpak="true"
fi
}
Summary() {
clear
CONTINUE=false
gum confirm "$(gum style --border normal --margin '1' --padding '1 2' "Summary, is this correct?" "" "keymap: $keymap" "timezone: $timezone" "locale: $locale" "username: $username" "password: $password" "Default shell: $shell" "root-password: $root_password" "hostname: $hostname" "disk: $disk" "desktop: $desktop" "ipv6: $enable_ipv6" "timeshift: $enable_timeshift" "enable zramd: $enable_zramd" "enable flatpak: $enable_flatpak" "efi: $is_uefi")" && CONTINUE=true
if [[ $CONTINUE != "true" ]]; then
Change
else
# Remove config.json if it exists
if [[ $(ls | grep "/tmp/config.json") ]]; then
rm /tmp/config.json
fi
# Make config.json
echo "{
\"partition\": {
\"device\": \"$disk\",
\"mode\": \"Auto\",
\"efi\": $is_uefi,
\"partitions\": []
},
\"bootloader\": {
\"type\": \"$grub_type\",
\"location\": \"$grub_location\"
},
\"locale\": {
\"locale\": [
\"$locale\"
],
\"keymap\": \"$keymap\",
\"timezone\": \"$timezone\"
},
\"networking\": {
\"hostname\": \"$hostname\",
\"ipv6\": $enable_ipv6
},
\"users\": [
{
\"name\": \"$username\",
\"password\": \"$crypt_password\",
\"hasroot\": true,
\"shell\": \"$shell\"
}
],
\"rootpass\": \"$crypt_root_password\",
\"desktop\": \"$desktop\",
\"timeshift\": $enable_timeshift,
\"extra_packages\": [
$fish_pkg
],
\"flatpak\": $enable_flatpak,
\"zramd\": $enable_zramd,
\"unakite\": {
\"enable\": false,
\"root\": \"/dev/null\",
\"oldroot\": \"$disk\",
\"efidir\": \"/dev/null\",
\"bootdev\": \"/dev/null\"
},
\"kernel\": \"linux\"
}" > /tmp/config.json
fi
}
Change() {
gum style --border normal --margin '1' --padding '1 2' "What do you want to change?"
$(gum choose --limit 1 Timezone Keymap Locale Username Password RootPassword Shell Hostname AutoDisk Desktop Misc)
Summary
}
Install() {
CONTINUE=false
gum confirm "$(gum style --border normal --margin '1' --padding '1 2' "Are you sure you want to install?" "$(gum style --foreground "$warning_color" 'WARNING: This will erease the whole disk')")" && CONTINUE=true
if [[ $CONTINUE != "true" ]]; then
echo "Exiting. Have a good day!"
exit
else
sudo jade config /tmp/config.json
fi
}
Welcome
Timezone
Keymap
Locale
Username
Password
RootPassword
Shell
Hostname
AutoDisk # TODO: Add manual partitioning support
# ManualDisk
Desktop
Misc
UEFICheck
Summary
Install

Loading…
Cancel
Save