archx/archx.sh

672 lines
24 KiB
Bash
Raw Normal View History

2023-02-16 19:04:43 +01:00
#!/bin/bash
# Exit on error and pipeline failure
set -eo pipefail
# ---MAIN SCRIPT---
main() {
clear
# cli arguments
if [[ "$#" -ne 1 && "$#" -ne 6 || "$#" -eq 6 && "$2" != "--unattended" ]]; then
echo "Syntax: bash $0 </dev/sdX> [--unattended <hostname> <username> <pwhash> <swapsize>]"
echo "Note: for unattended installation, swapsize 0 = memsize. Also, LUKS is not available for security reasons and profile is assumed to be cli."
exit 1
fi
export disk="$1"
if [[ -d /sys/firmware/efi ]]; then
export efi=1
else
export efi=0
fi
if [[ "$2" == "--unattended" ]]; then
export unattended="true"
export keylayout="us"
export profile="cli"
export luks="false"
export hostname="$3"
export user="$4"
export password="$5"
swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }')
swapsize=$(($swapsize/1000))"M"
if [[ "$6" != "0" ]]; then
swapsize="$6"
fi
export swapsize
2023-03-13 03:08:47 +01:00
if test -n "$(find /etc/systemd/network -name '??-cloud-init*.network' -print -quit)"; then
export cinetwork="/etc/systemd/network"
2023-02-16 19:04:43 +01:00
fi
if grep -q "console=ttyS0" /proc/cmdline; then
export consoleboot="console=ttyS0"
if [[ $(tty) != "/dev/ttyS0" ]]; then
exit 1
fi
fi
install
fi
# Keyboard layout selection
export keylayout="us"
loadkeys us
confirm "Do you want to change the keymap from 'us' to 'de-latin1'? [y/N]" && export keylayout="de-latin1" && loadkeys de-latin1
echo "Keymap set to $keylayout."
clear
# profile selection
echo "Profiles:"
echo "cli: barebones system, no Xorg, no DE, no WM. Primarily for servers."
echo "i3: tiling window manager"
echo "kde: KDE desktop environment + big software selection"
echo "gnome: GNOME desktop environment + software selection"
echo
read -p "Profile Selection > " profile
if [[ "$profile" != "cli" && "$profile" != "i3" && "$profile" != "kde" && "$profile" != "gnome" ]]; then
echo "Invalid profile."
exit 1
fi
# LUKS selection
clear
if [[ "$efi" -eq 0 ]]; then
echo "archx does not support LUKS on legacy BIOS systems, skipping..."
export luks="false"
else
echo "Encryption:"
export luks="false"
confirm "Do you want to encrypt your system and swap partitions? [y/N]" && export luks="true"
fi
# Swap size selection
clear
swapsize=$(cat /proc/meminfo | grep MemTotal | awk '{ print $2 }')
swapsize=$(($swapsize/1000))"M"
echo "Swap size: $swapsize"
confirm "Per default swap is sized equal to RAM. Customize? [y/N]" && read -p "New swap size > " swapsize
export swapsize
# Hostname selection
clear
read -p "Hostname > " hostname
export hostname
# User/Pass
clear
echo "NOTICE: Keyboard layout is $keylayout!"
if [ "$luks" == "true" ]; then
while [[ "$lukspass" != "$lukspass_verify" ]] || [[ "$lukspass" == "" ]]; do
read -s -p "LUKS password > " lukspass
echo
read -s -p "LUKS password (confirm) > " lukspass_verify
echo
done
export lukspass
fi
read -p "Username > " user
export user
while [[ "$password" != "$password_verify" ]] || [[ "$password" == "" ]]; do
read -s -p "User password > " password
echo
read -s -p "User password (confirm) > " password_verify
echo
done
export password
# VM specific stuff
2023-03-13 03:08:47 +01:00
if test -n "$(find /etc/systemd/network -name '??-cloud-init*.network' -print -quit)"; then
export cinetwork="/etc/systemd/network"
2023-02-16 19:04:43 +01:00
fi
if grep -q "console=ttyS0" /proc/cmdline; then
export consoleboot="console=ttyS0"
fi
# Summary
clear
echo "---Summary---"
echo "Target disk: $disk"
if [[ $efi -eq 1 ]]; then
echo "Mode: UEFI"
else
echo "Mode: Legacy/CSM/BIOS"
fi
if [[ -n $cinetwork ]]; then
echo "Network: cloud-init"
fi
if [[ -n $consoleboot ]]; then
echo "Console boot: enabled"
fi
echo "LUKS: $luks"
echo "Swap size: $swapsize"
echo
echo "Profile: $profile"
echo
echo "Keymap: $keylayout"
echo "Hostname: $hostname"
echo "Username: $user"
echo
confirm "Everything correct? [FINAL PROMPT] [y/N]" && install
echo "Canceling setup."
}
# ---INSTALLER FUNCTIONS---
# Main install function
install(){
clear
echo "---ArchLinux install start---"
pacman_setup
partition_disk
format_root
mkdir /mnt/{boot,home} 2>/dev/null
if [[ $efi -eq 1 ]]; then
mount $bootdev /mnt/boot
fi
pacstrap /mnt base base-devel wget btrfs-progs cryptsetup device-mapper dhcpcd e2fsprogs inetutils linux-firmware linux logrotate lvm2 man-db man-pages mdadm nano netctl perl sysfsutils texinfo usbutils vim xfsprogs openssh pacutils # start the actual install
swapsetup
basic_postinstall
setup_initramfs
install_bootloader
profile_postinstall
unmount
if [[ "$unattended" == "true" ]]; then
reboot
fi
echo "Installation complete! Please reboot now."
exit 0
}
# Set up pacman & keyring
pacman_setup(){
while [[ -e /var/lib/pacman/db.lck ]]; do
echo "Waiting for pacman database to become available..."
sleep 5
done
2023-11-16 21:12:39 +01:00
sed '7iServer = https://repo.ztn.sh/archlinux/$repo/os/$arch\n' /etc/pacman.d/mirrorlist > /etc/pacman.d/mirrors
2023-02-16 19:04:43 +01:00
mv /etc/pacman.d/mirrors /etc/pacman.d/mirrorlist
pacman -Sy --needed --noconfirm archlinux-keyring
pacman -S --needed --noconfirm arch-install-scripts
echo "Waiting for pacman keyring to enter a consistent state..."
2023-03-15 18:21:18 +01:00
while [[ $(systemctl show -p SubState --value pacman-init) != "exited" ]]; do
sleep 1
done
echo "Done. Preparing install..."
2023-02-16 19:04:43 +01:00
if [ ! -f /usr/bin/wget ]; then
pacman -S --needed --noconfirm wget libnewt
fi
}
# Create disk partitions
partition_disk(){
parted -s $disk mklabel gpt
if [[ $efi -eq 1 ]]; then
sgdisk $disk -n=1:0:+1024M -t=1:ef00
sgdisk $disk -n=2:0:-$swapsize
2023-12-11 18:44:25 +01:00
sgdisk $disk -n=3:0:0 -t=3:8200
2023-02-16 19:04:43 +01:00
else
sgdisk $disk -n=1:0:+1M -t=1:ef02
sgdisk $disk -n=2:0:-$swapsize
2023-12-11 18:44:25 +01:00
sgdisk $disk -n=3:0:0 -t=3:8200
2023-02-16 19:04:43 +01:00
fi
# Special naming for eMMC and NVME devices
if [[ "${disk::8}" == "/dev/nvm" || "${disk::8}" == "/dev/mmc" ]]; then
bootdev=$disk"p1"
rootdev=$disk"p2"
swapdev=$disk"p3"
else
bootdev=$disk"1"
rootdev=$disk"2"
swapdev=$disk"3"
fi
export bootdev
export rootdev
export swapdev
# Format ESP to fat32
if [[ $efi -eq 1 ]]; then
mkfs.fat $bootdev
fi
}
format_root(){
if [[ "$luks" == "true" ]]; then
format_root_luks
return
fi
mkswap $swapdev # format swap
mkfs.btrfs -f $rootdev # format root to btrfs
mount $rootdev /mnt
btrfs subvolume create /mnt/@ # new root subvolume
btrfs subvolume set-default /mnt/@ # set as mount-default to prevent boot failures
btrfs subvolume create /mnt/@snapshots # new snapshot subvolume
mkdir -p /mnt/@/var/cache/pacman # create directory so next cmd works
btrfs subvolume create /mnt/@/var/cache/pacman/pkg # exclude pacman cache from snapshots
umount /mnt
mount $rootdev -o subvol=@ /mnt # remount with new root
mkdir /mnt/.snapshots
mount $rootdev -o subvol=@snapshots /mnt/.snapshots # mount snapshots as /.snapshots in new root
}
format_root_luks(){
echo "$lukspass" | cryptsetup -y -v luksFormat $rootdev # setup LUKS partition
echo "$lukspass" | cryptsetup open $rootdev cryptroot # unlock it
mkfs.btrfs -f /dev/mapper/cryptroot # format root to btrfs
mount /dev/mapper/cryptroot /mnt
btrfs subvolume create /mnt/@ # new root subvolume
btrfs subvolume set-default /mnt/@ # set as mount-default to prevent boot failures
btrfs subvolume create /mnt/@snapshots # new snapshots subvolume
mkdir -p /mnt/@/var/cache/pacman
btrfs subvolume create /mnt/@/var/cache/pacman/pkg # exclude pacman cache from snapshots
umount /mnt
mount /dev/mapper/cryptroot -o subvol=@ /mnt # remount with new root
mkdir /mnt/.snapshots
mount /dev/mapper/cryptroot -o subvol=@snapshots /mnt/.snapshots # mount snapshots as /.snapshots in new root
}
swapsetup(){
if [[ "$luks" == "true" ]]; then
# setup encrypted swap
swapuuid=$(blkid -o value -s PARTUUID $swapdev)
echo "swap PARTUUID=$swapuuid /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256" >> /mnt/etc/crypttab
else
swapon $swapdev
fi
}
# sets hostname, keymap, locale, timezone, root password
basic_postinstall(){
echo "$hostname" > /mnt/etc/hostname
echo "KEYMAP=$keylayout" > /mnt/etc/vconsole.conf
echo "EDITOR=nano" >> /mnt/etc/environment
echo "COLORTERM=truecolor" >> /mnt/etc/environment
locale=en_US
echo "LANG=$locale.UTF-8" > /mnt/etc/locale.conf
sed -i '/'$locale'.UTF-8/s/^#//g' /mnt/etc/locale.gen
sed -i 's/<U002E> IGNORE/<U002E> <RES-1>/g' /mnt/usr/share/i18n/locales/iso14651_t1_common
archchroot locale-gen
sed -i 's%#Color%Color%g' /mnt/etc/pacman.conf
sed -i 's%#ParallelDownloads %ParallelDownloads %g' /mnt/etc/pacman.conf
2023-02-16 19:12:00 +01:00
wget -O /mnt/usr/share/libalpm/hooks/locale-fix.hook ztn.sh/archx-resources/locale-fix.hook
2023-02-16 19:04:43 +01:00
ln -sf /usr/share/zoneinfo/Europe/Berlin /mnt/etc/localtime
archchroot "hwclock --systohc --utc"
if [[ $unattended == "true" ]]; then
arch-chroot /mnt /bin/bash -c "echo 'root:$password' | chpasswd -e"
else
arch-chroot /mnt /bin/bash -c "echo -e '$password\n$password' | passwd root"
fi
if [[ -s /root/.ssh/authorized_keys ]]; then
mkdir -p /mnt/root/.ssh
cp /root/.ssh/authorized_keys /mnt/root/.ssh/authorized_keys
fi
if [[ -n $cinetwork ]]; then
2023-03-13 04:19:20 +01:00
set +e # we briefly need errors ignored
2023-03-13 04:28:43 +01:00
2023-03-13 04:19:20 +01:00
cp /etc/systemd/network/??-cloud-init-*.link /mnt/etc/systemd/network || : # ignore failures because file doesn't exist
cp /etc/systemd/network/??-cloud-init-*.network /mnt/etc/systemd/network || : # ignore failures because file doesn't exist
2023-03-13 03:08:47 +01:00
cat /mnt/etc/systemd/network/??-cloud-init-*.network | grep -E 'DNS|Domains' | sed 's/DNS=/nameserver /g' | sed 's/Domains=/search /g' >> /mnt/etc/resolv.conf
# Fix up multiple match clauses generated by borked cloud-init
for f in /mnt/etc/systemd/network/??-cloud-init-*.network; do
# Check if [Match] section contains MACAddress
2023-03-13 04:24:10 +01:00
cat "$f" | grep "\[Match\]" --after-context 999 | sed -z 's/\n\n.*/\n/g' | grep -q "MACAddress="
if [[ $? -eq 0 ]]; then
# Remove Name= match clause
2023-03-15 18:04:17 +01:00
sed -i '/^Name=.*$/d' "$f"
fi
done
2023-03-13 04:28:43 +01:00
set -e # reenable exit-on-error
2023-02-16 19:04:43 +01:00
archchroot "systemctl enable systemd-networkd"
fi
}
# sets up fstab, initramfs as well as encrypted swap if LUKS is enabled
setup_initramfs(){
partprobe $disk # make sure the kernel has the correct device uuids
genfstab -U -p /mnt > /mnt/etc/fstab
if [[ "$luks" == "true" ]]; then
echo "/dev/mapper/swap none swap defaults 0 0" >> /mnt/etc/fstab
sed -i "s/HOOKS=(base udev autodetect modconf block filesystems keyboard fsck)/HOOKS=(base udev autodetect keyboard keymap consolefont modconf block encrypt filesystems fsck)/g" /mnt/etc/mkinitcpio.conf
archchroot "mkinitcpio -p linux"
fi
# add nvme module to initramfs if rootdevice is on a nvme drive
if [ "${disk::8}" == "/dev/nvm" ]; then
sed -i "s/MODULES=()/MODULES=(nvme)/g" /mnt/etc/mkinitcpio.conf
archchroot "mkinitcpio -p linux"
fi
}
# installs either refind or grub
install_bootloader(){
if [[ "$efi" -eq 1 ]]; then
install_refind
else
install_grub
fi
}
install_refind(){
pacstrap /mnt refind
archchroot "refind-install --usedefault $bootdev"
rootuuid=$(blkid -s UUID -o value $rootdev)
if [[ -n $consoleboot ]]; then
cmdline="rw add_efi_memmap $consoleboot"
else
cmdline="rw add_efi_memmap"
fi
if [[ "$luks" == "true" ]]; then
echo "\"Arch Linux \" \"cryptdevice=UUID=$rootuuid:cryptroot root=/dev/mapper/cryptroot $cmdline fbcon=nodefer quiet\"" > /mnt/boot/refind_linux.conf
echo "\"Arch Linux Verbose \" \"cryptdevice=UUID=$rootuuid:cryptroot root=/dev/mapper/cryptroot $cmdline fbcon=nodefer\"" >> /mnt/boot/refind_linux.conf
echo "\"Arch Linux Fallback\" \"cryptdevice=UUID=$rootuuid:cryptroot root=/dev/mapper/cryptroot $cmdline initrd=/initramfs-linux-fallback.img fbcon=nodefer quiet\"" >> /mnt/boot/refind_linux.conf
echo "\"Arch Linux Terminal\" \"cryptdevice=UUID=$rootuuid:cryptroot root=/dev/mapper/cryptroot $cmdline systemd.unit=multi-user.target fbcon=nodefer quiet\"" >> /mnt/boot/refind_linux.conf
else
echo "\"Arch Linux \" \"root=UUID=$rootuuid $cmdline quiet\"" > /mnt/boot/refind_linux.conf
echo "\"Arch Linux Verbose \" \"root=UUID=$rootuuid $cmdline\"" >> /mnt/boot/refind_linux.conf
echo "\"Arch Linux Fallback\" \"root=UUID=$rootuuid $cmdline initrd=/initramfs-linux-fallback.img quiet\"" >> /mnt/boot/refind_linux.conf
echo "\"Arch Linux Terminal\" \"root=UUID=$rootuuid $cmdline systemd.unit=multi-user.target quiet\"" >> /mnt/boot/refind_linux.conf
fi
sed -i 's/timeout 20/timeout 5/g' /mnt/boot/EFI/BOOT/refind.conf
sed -i 's/install, shell, bootorder, gdisk, memtest, mok_tool, apple_recovery, windows_recovery, about, //g' /mnt/boot/EFI/BOOT/refind.conf
sed -i 's/#use_graphics_for osx,linux/use_graphics_for osx,linux/g' /mnt/boot/EFI/BOOT/refind.conf
2023-02-16 19:12:00 +01:00
wget ztn.sh/archx-resources/vmlinuz-linux.png -O /mnt/boot/vmlinuz-linux.png
wget ztn.sh/archx-resources/refind-theme.tar -O /mnt/tmp/refind-theme.tar
2023-02-16 19:04:43 +01:00
tar xvf /mnt/tmp/refind-theme.tar -C /mnt/boot/EFI/BOOT
rm /mnt/tmp/refind-theme.tar
echo "include refind-theme-regular/theme.conf" >> /mnt/boot/EFI/BOOT/refind.conf
}
install_grub(){
pacstrap /mnt grub
mkdir /mnt/boot/grub
if [[ -n $consoleboot ]]; then
sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX=\"'$consoleboot'\"/g' /mnt/etc/default/grub
fi
archchroot "grub-mkconfig -o /boot/grub/grub.cfg"
archchroot "grub-install --target=i386-pc --recheck $disk"
}
# runs postinstall of selected profile
profile_postinstall(){
if [[ "$profile" == "cli" ]]; then
postinstall_cli
elif [[ "$profile" == "i3lite" ]]; then
postinstall_i3
elif [[ "$profile" == "kde" ]]; then
postinstall_kde
elif [[ "$profile" == "gnome" ]]; then
postinstall_gnome
fi
archchroot "btrfs subvolume snapshot / /.snapshots/postinstall"
}
# installs git, entropy harvesting daemon, ssh, neofetch and htop
# adds the destiny repo to pacman
# adds the user & sets the password
# enables network
# creates backup snapshot
postinstall_cli(){
# run this entire thing in new root
archchroot "/bin/bash" <<"EOS"
set -eo pipefail
curl https://share.zotan.services/repo.sh | bash
killall gpg-agent
2023-03-16 00:04:56 +01:00
pacman -Syu --needed --noconfirm git haveged neofetch htop dialog zsh kernel-modules-hook nftables yay vnstat
2023-02-16 19:04:43 +01:00
systemctl enable haveged sshd
sed -i 's%#PasswordAuthentication yes%PasswordAuthentication no%g' /etc/ssh/sshd_config
systemctl mask systemd-resolved
systemctl enable linux-modules-cleanup
systemctl enable systemd-timesyncd
groupadd sudo -g 666
echo "%sudo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
cat /etc/makepkg.conf | sed "s/xz -c -z -)/xz -c -z - --threads=0)/g" > /tmp/makepkg.conf; mv /tmp/makepkg.conf /etc/makepkg.conf
useradd "$user"
if [[ $unattended == "true" ]]; then
echo "$user:$password" | chpasswd -e
else
echo -e "$password\n$password" | passwd "$user"
fi
usermod -aG sudo "$user"
usermod -aG adm "$user"
mkdir /home/"$user"
chown "$user":"$user" /home/"$user"
if [[ -s /root/.ssh/authorized_keys ]]; then
mkdir -p /home/$user/.ssh
cp /root/.ssh/authorized_keys /home/$user/.ssh/authorized_keys
chown $user:$user /home/$user/.ssh/authorized_keys
fi
if [[ -z $cinetwork ]]; then
systemctl enable dhcpcd
fi
2023-03-16 00:04:56 +01:00
systemctl enable vnstat
2023-02-16 19:04:43 +01:00
chsh -s /bin/zsh $user
chsh -s /bin/zsh root
2023-03-17 02:52:54 +01:00
wget ztn.sh/prezto.sh -O /tmp/prezto.sh
2023-02-16 19:04:43 +01:00
sudo -u $user zsh /tmp/prezto.sh
zsh /tmp/prezto.sh
2023-03-16 00:04:56 +01:00
yay -S --noconfirm bwm-ng iperf iperf3 nmap traceroute mtr ffmpeg mediainfo handbrake-cli speedtest-cli sshuttle screen
2023-02-16 19:04:43 +01:00
2023-03-16 00:04:56 +01:00
btrfs subvolume snapshot / /.snapshots/basesystem
2023-02-16 19:04:43 +01:00
EOS
}
postinstall_xorg(){
postinstall_cli
archchroot "/bin/bash" <<"EOS"
set -eo pipefail
2023-03-16 00:04:56 +01:00
pacman -S --needed --noconfirm xorg-server xorg-drivers ttf-opensans ttf-dejavu ttf-hack ttf-liberation networkmanager yt-dlp
2023-02-16 19:04:43 +01:00
EOS
if [[ "$keylayout" == "us" ]]; then
return
fi
cat <<EOF > /mnt/etc/X11/xorg.conf.d/00-keyboard.conf
Section "InputClass"
Identifier "system-keyboard"
MatchIsKeyboard "on"
Option "XkbLayout" "de"
Option "XkbModel" "pc105"
Option "XkbVariant" "deadacute"
EndSection
EOF
}
postinstall_i3(){
postinstall_xorg
archchroot "/bin/bash" <<"EOS"
set -eo pipefail
pacman -S --needed --noconfirm i3-wm polybar archlinux-themes-sddm gnome-icon-theme gnome-icon-theme-symbolic gnome-icon-theme-extras adwaita-icon-theme alacritty sddm betterlockscreen
systemctl enable sddm
echo -e "[Autologin]\nRelogin=false\nSession=\nUser=\n\n[General]\nHaltCommand=/usr/bin/systemctl poweroff\nRebootCommand=/usr/bin/systemctl reboot\n\n[Theme]\nCurrent=archlinux-simplyblack\nCursorTheme=Adwaita\n\n[Users]\nMaximumUid=60000\nMinimumUid=1000" > /etc/sddm.conf
systemctl enable betterlockscreen@$user
systemctl disable dhcpcd
systemctl enable NetworkManager
# customizations
pacman -S --needed --noconfirm google-chrome acpi insync rclone neofetch ccid libusb-compat pcsclite ncdu aria2 noto-fonts noto-fonts-cjk noto-fonts-extra noto-fonts-emoji-apple wireguard-tools p7zip papirus-icon-theme telegram-desktop sublime-text-4 siji-git bluez bluez-utils \
dunst etcher-bin blueman bluez-tools btrbk cli-visualizer cronie evince exfat-utils flameshot freerdp remmina geeqie gimp gnome-themes-extra idevicerestore-git iftop jq syncthing mpv lxappearance lxsession \
mediainfo mumble nautilus net-tools network-manager-applet nitrogen nfs-utils nmap ntfs-3g openssl-1.0 parcellite pasystray pavucontrol platformio postman-bin pulseaudio-alsa pulseaudio-bluetooth pulseaudio-zeroconf python-pip rclone rofi solaar spotify \
sshuttle topgrade xorg-xrdb youtube-dl yubikey-manager yubikey-manager-qt gnome-keyring xorg-xinput libldac openbsd-netcat
systemctl enable cronie
systemctl enable libvirtd
systemctl enable libvirt-guests
wget https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-u2f.rules -O /etc/udev/rules.d/70-u2f.rules
echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0116|0111", MODE="660", GROUP="scard"' > 71-gnupg-ccid.rules
mv 71-gnupg-ccid.rules /etc/udev/rules.d/71-gnupg-ccid.rules
systemctl enable pcscd.socket
sudo -u $user dbus-launch gsettings set org.gnome.desktop.interface icon-theme 'Papirus'
sudo -u $user dbus-launch gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'
sudo -u $user dbus-launch gsettings set org.gnome.desktop.wm.preferences theme 'Adwaita-dark'
echo '--force-dark-mode' > /home/$user/.config/chrome-flags.conf
2023-02-16 19:12:00 +01:00
wget https://ztn.sh/archx-resources/fontconfig -O /etc/fonts/local.conf
2023-02-16 19:04:43 +01:00
mkdir -p /etc/btrbk
2023-02-16 19:12:00 +01:00
wget https://ztn.sh/archx-resources/btrbk.conf -O /etc/btrbk/btrbk.conf
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/i3
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/i3_config -O /home/$user/.config/i3/config
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/polybar
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/launch_polybar.sh -O /home/$user/.config/polybar/launch.sh
2023-02-16 19:04:43 +01:00
chmod +x /home/$user/.config/polybar/launch.sh
sudo -u $user mkdir -p /home/$user/.config/alacritty
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/alacritty.yml -O /home/$user/.config/alacritty/alacritty.yml
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/flameshot
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/flameshot.ini -O /home/$user/.config/flameshot/flameshot.ini
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/mpv
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/mpv.conf -O /home/$user/.config/mpv/mpv.conf
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/sublime-text-3/Packages/User
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/Preferences.sublime-settings -O /home/$user/.config/sublime-text-3/Packages/User/Preferences.sublime-settings
sudo -u $user wget https://ztn.sh/archx-resources/Default_Linux.sublime-keymap -O /home/$user/.config/sublime-text-3/Packages/User/Default\ \(Linux\).sublime-keymap
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/dunst
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/dunstrc -O /home/$user/.config/dunst/dunstrc
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/parcellite
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/parcellitec -O /home/$user/.config/parcellite/parcelliterc
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/gtk-3.0
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/gtk3-settings.ini -O /home/$user/.config/gtk-3.0/settings.ini
2023-02-16 19:04:43 +01:00
sudo -u $user mkdir -p /home/$user/.config/rofi
mkdir -p /usr/share/rofi/themes/
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/rofi_config -O /home/$user/.config/rofi/config
wget https://ztn.sh/archx-resources/flat-orange.rasi -O /usr/share/rofi/themes/flat-orange.rasi
2023-02-16 19:04:43 +01:00
mkdir -p /var/spool/cron
echo 'export COLORTERM=truecolor' >> /etc/profile
echo 'export EDITOR=nano' >> /etc/profile
echo '@hourly btrbk run -v' >> /var/spool/cron/root
echo 'Xcursor.size: 16' > /home/$user/.Xresources
chown $user:$user /home/$user/.Xresources
2023-02-16 19:12:00 +01:00
sudo -u $user wget https://ztn.sh/archx-resources/polybar_config -O /home/$user/.config/polybar/config
2023-02-16 19:04:43 +01:00
mkdir -p /etc/X11/xorg.conf.d
2023-02-16 19:12:00 +01:00
wget https://ztn.sh/archx-resources/10-monitor.conf -O /etc/X11/xorg.conf.d/10-monitor.conf
2023-02-16 19:04:43 +01:00
EOS
}
postinstall_kde(){
postinstall_xorg
archchroot "/bin/bash" <<"EOS"
set -eo pipefail
pacman -S --needed --noconfirm plasma plasma-meta konsole dolphin kdialog sddm
systemctl enable sddm
echo -e "[Autologin]\nRelogin=false\nSession=\nUser=\n\n[General]\nHaltCommand=/usr/bin/systemctl poweroff\nRebootCommand=/usr/bin/systemctl reboot\n\n[Theme]\nCurrent=breeze\nCursorTheme=Adwaita\n\n[Users]\nMaximumUid=60000\nMinimumUid=1000" > /etc/sddm.conf
systemctl disable dhcpcd
systemctl enable NetworkManager
EOS
}
postinstall_gnome(){
postinstall_xorg
archchroot "/bin/bash" <<"EOS"
set -eo pipefail
pacman -S --needed --noconfirm gnome gnome-extra
systemctl enable gdm
systemctl disable dhcpcd
systemctl enable NetworkManager
EOS
}
### postinstall_zotan_gnome(){
### postinstall_gnome
### archchroot "/bin/bash" <<"EOS"
### sudo pacman -S --needed --noconfirm google-chrome acpi insync rclone neofetch ccid libusb-compat pcsclite ncdu aria2 noto-fonts noto-fonts-cjk noto-fonts-extra ttf-joypixels zsh texlive-most biber wireguard-tools networkmanager-wireguard-git p7zip papirus-icon-theme adapta-gtk-theme telegram-desktop sublime-text-nightly
### sudo wget https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-u2f.rules -O /etc/udev/rules.d/70-u2f.rules
### echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0116|0111", MODE="660", GROUP="scard"' > 71-gnupg-ccid.rules
### sudo mv 71-gnupg-ccid.rules /etc/udev/rules.d/71-gnupg-ccid.rules
### sudo systemctl enable pcscd.socket
### sudo -u $user dbus-launch gsettings set org.gnome.desktop.interface icon-theme 'Papirus'
### sudo -u $user dbus-launch gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'
### sudo -u $user dbus-launch gsettings set org.gnome.desktop.wm.preferences theme 'Adwaita-dark'
### echo '--force-dark-mode' > /home/$user/.config/chrome-flags.conf
### sudo wget https://gist.githubusercontent.com/lhaus/f857f10d5aac2b48a03f41e685f5109d/raw/16eba11e83648fa2a2f9ba7b5865f361e0f45247/fontconfig -O /etc/fonts/local.conf
### EOS
### }
###
### postinstall_zotan_kde(){
### postinstall_kde
### archchroot "/bin/bash" <<"EOS"
### sudo pacman -S --needed --noconfirm google-chrome acpi insync rclone neofetch ccid libusb-compat pcsclite ncdu aria2 noto-fonts noto-fonts-cjk noto-fonts-extra ttf-joypixels zsh texlive-most biber wireguard-tools networkmanager-wireguard-git p7zip papirus-icon-theme adapta-gtk-theme telegram-desktop sublime-text-nightly
### sudo pacman -S --needed --noconfirm okular kleopatra spectacle libdbusmenu-glib libdbusmenu-gtk2 libdbusmenu-gtk3 appmenu-gtk-module ntfs-3g
### sudo wget https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-u2f.rules -O /etc/udev/rules.d/70-u2f.rules
### echo 'ACTION=="add", SUBSYSTEM=="usb", ENV{ID_VENDOR_ID}=="1050", ENV{ID_MODEL_ID}=="0116|0111", MODE="660", GROUP="scard"' > 71-gnupg-ccid.rules
### sudo mv 71-gnupg-ccid.rules /etc/udev/rules.d/71-gnupg-ccid.rules
### sudo systemctl enable pcscd.socket
### echo '--force-dark-mode' > /home/$user/.config/chrome-flags.conf
### sudo wget https://gist.githubusercontent.com/lhaus/f857f10d5aac2b48a03f41e685f5109d/raw/16eba11e83648fa2a2f9ba7b5865f361e0f45247/fontconfig -O /etc/fonts/local.conf
### EOS
### }
# Unmount all disks
unmount(){
umount -R /mnt
if [[ "$luks" == "true" ]]; then
cryptsetup luksClose /dev/mapper/cryptroot
else
swapoff "$swapdev"
fi
}
# ---HELPER FUNCTIONS---
confirm() {
# call with a prompt string or use a default
read -r -p "${1:-Are you sure? [y/N]} " response
case "$response" in
[yYzZ][eE][sS]|[yYzZ])
true
;;
*)
false
;;
esac
}
archchroot(){
arch-chroot /mnt $1
}
2023-03-16 00:04:56 +01:00
main $@