#!/bin/bash automatic_partitioner(){ device_menu=() for blk_device in $(lsblk -no PATH --nodeps); do device_menu+=("$(lsblk -no PATH --nodeps ${blk_device})") device_menu+=("$(lsblk -no MODEL,SIZE --nodeps ${blk_device})") done dest_dev=$(dialog --ok-label "Submit" --nocancel --stdout \ --menu 'Select Install Destination' \ 20 0 20 \ "${device_menu[@]}" \ 3>&1 2>&3 3>&-) mem_mb=`grep MemTotal /proc/meminfo | awk '{print $2 "/1024"}' | bc` swap_end=`printf "2304+%s\n" "${mem_mb}" | bc` root_gb_free=`printf "( ( %s / 1048576 ) - %s ) / 1024\n" "$( lsblk -bno SIZE -d ${dest_dev} )" "${swap_end}" | bc` validate_disk_size || return 1 # if dialog --yesno "Set up separate home partition?" 0 0;then default_root_gb=`printf "( %s + 10 ) / 4\n" "${root_gb_free}" | bc` root_gb=$(dialog --ok-label 'Submit' --nocancel --clear --stdout \ --title "Root Partition Size" \ --rangebox "Please set the root partition size in GB" \ 0 0 10 "${root_gb_free}" "${default_root_gb}" \ 3>&1 2>&3 3>&-) root_mb=`printf "%s*1024\n" "${root_gb}" | bc` root_end=`printf "%s+%s\n" "${swap_end}" "${root_mb}" | bc` validate_install_size || return 1 # else # fi if [[ ${dest_dev} = *[0-9] ]];then part_sep="p" else part_sep="" fi efi_part="${dest_dev}${part_sep}1" boot_part="${dest_dev}${part_sep}2" swap_part="${dest_dev}${part_sep}3" root_part="${dest_dev}${part_sep}4" home_part="${dest_dev}${part_sep}5" #new gpt label parted "${dest_dev}" mklabel gpt --script --fix #efi - 256mb parted "${dest_dev}" mkpart efi fat32 0MB 256MB --script --fix --align optimal #boot - 2gb parted "${dest_dev}" mkpart boot btrfs 256MB 2304MB --script --fix --align optimal #swap - equal to ram size parted "${dest_dev}" mkpart swap linux-swap 2304MB "${swap_end}MB" --script --fix --align optimal #root parted "${dest_dev}" mkpart root btrfs "${swap_end}MB" "${root_end}MB" --script --fix --align optimal #home parted "${dest_dev}" mkpart home btrfs "${root_end}MB" 100% --script --fix --align optimal efi_part_format='0' return 0 } manual_partitioner(){ target_dev='' until [ "${target_dev}" == 'done' ];do device_menu=() for blk_device in $(lsblk -no PATH --nodeps); do device_menu+=("$(lsblk -no PATH --nodeps ${blk_device})") device_menu+=("$(lsblk -no MODEL,SIZE --nodeps ${blk_device})") done device_menu+=("done") device_menu+=("Proceed to selecting disks") target_dev=`dialog --menu 'Select Install Destination' 20 0 20 "${device_menu[@]}" 2>&1 >/dev/tty` [[ ! "${target_dev}" == "done" ]] && cfdisk "${target_disk}" # tmux popup -h 75% -w 75% -E "cfdisk ${target_dev}" done partition_menu=() for blk_part in $(lsblk -rno PATH,TYPE | grep -v 'disk$\|crypt$' | awk '{ print $1 } '); do partition_menu+=("$(lsblk -rno PATH --nodeps ${blk_part})") partition_menu+=("$(lsblk -rno FSTYPE,SIZE --nodeps ${blk_part})") done efi_part=`dialog --menu 'Select EFI Partition' 20 0 20 "${partition_menu[@]}" 2>&1 >/dev/tty` efi_part_format=`dialog --title 'Format EFI Partition?' --yesno 'This will likely break dual-booting as existing efi entries will be removed' 20 0 2>&1 >/dev/tty;echo $?` boot_part=`dialog --menu 'Select Boot Partition' 20 0 20 "${partition_menu[@]}" 2>&1 >/dev/tty` swap_part=`dialog --menu 'Select Swap Partition' 20 0 20 "${partition_menu[@]}" 2>&1 >/dev/tty` root_part=`dialog --menu 'Select Root Partition' 20 0 20 "${partition_menu[@]}" 2>&1 >/dev/tty` home_part=`dialog --menu 'Select Home Partition' 20 0 20 "${partition_menu[@]}" 2>&1 >/dev/tty` return 0 } format_partitions(){ #efi partition if [[ "${efi_part_format}" == "0" ]];then mkfs.vfat "${efi_part}" fi #boot partition mkfs.btrfs -f "${boot_part}" -L boot #swap partition encrypt_partition "${swap_part}" swap "${luks_pass}" mkswap /dev/mapper/swap_crypt #root partition encrypt_partition "${root_part}" root "${luks_pass}" mkfs.btrfs /dev/mapper/root_crypt -L root #home partition encrypt_partition "${home_part}" home "${luks_pass}" mkfs.btrfs /dev/mapper/home_crypt -L home get_uuids } get_part_uuid(){ lsblk -drno UUID "${1}" } get_uuids(){ #get uuids efi_uuid=`get_part_uuid "${efi_part}"` boot_uuid=`get_part_uuid "${boot_part}"` swap_luks_uuid=`get_part_uuid "${swap_part}"` root_luks_uuid=`get_part_uuid "${root_part}"` home_luks_uuid=`get_part_uuid "${home_part}"` }