#!/bin/bash # Vor Reboot echo "Select Prozessor Vendor (Defaults to no ucode):" echo "1) AMD 2) Intel 3) Other(no ucode)" read -r vendor : "${vendor:=3}" if [[ $vendor == 1 ]]; then echo "AMD" ucode="amd-ucode" elif [[ $vendor == 2 ]]; then echo "Intel" ucode="intel-ucode" elif [[ $vendor == 3 ]]; then echo "no Ucode" ucode="" else echo "Vendor Unknown, aborting" exit 1 fi echo "Select Kernel (Defaults to Linux):" echo "1) Linux 2) Linux LTS 3) Linux Zen" read -r kernel : "${kernel:=1}" tempString=""; for range in ${kernel//,/ }; do tempString="$tempString{${range//-/..}}"; done; tempString=${tempString//\}{/\} {}; tempString=$(echo $tempString | tr [:blank:] '\n' | sed 's/{\([0-9]\{1,2\}\)}/\1/' | tr '\n' ','); tempString=${tempString/%,/}; result=""; for range2 in ${tempString//,/ }; do result+=$(eval echo $range2); result+=";"; done; result=${result/%;}; result=${result//;/ }; echo $result for index in ${result}; do echo -n "Ausgewählt: " case $index in *1*) echo "Linux" selectedKernel+="linux " header+="linux-headers " ;; *2*) echo "Linux LTS" selectedKernel+="linux-lts " header+="linux-lts-headers " ;; *3*) echo "Linux Zen" selectedKernel+="linux-zen " header+="linux-zen-headers " ;; *) echo "Error, aborting" ;; esac done #if [[ $kernel == 1 ]]; then # echo "Linux" # selectedKernel="linux" # header="linux-headers" #elif [[ $kernel == 2 ]]; then # echo "Linux/Linux LTS" # selectedKernel="linux linux-lts" # header="linux-headers linux-lts-headers" #elif [[ $kernel == 3 ]]; then # echo "Linux/Linux Zen" # selectedKernel="linux linux-zen" # header="linux-headers linux-zen-headers" #elif [[ $kernel == 4 ]]; then # echo "Linux/Linux LTS/Linux Zen" # selectedKernel="linux linux-lts linux-zen" # header="linux-headers linux-lts-headers linux-zen-headers" #elif [[ $kernel == 5 ]]; then # echo "Linux LTS/Linux Zen" # selectedKernel="linux-lts linux-zen" # header="linux-lts-headers linux-zen-headers" #else # echo "no Kernel selectet, aborting" # exit 1 #fi read -r -p "Passwort für Root (Default: test) :" rootpw : "${rootpw:=test}" if [[ $rootpw == "" ]]; then echo "Kein Passwort für Root vergeben, breche ab" exit 1 fi read -r -p "Nutzername (Default: eichehome): " nutzername : "${nutzername:=eichehome}" if [[ $nutzername == "" ]]; then echo "Kein Nutzername eingegeben, breche ab" exit 1 fi read -r -p "Passwort für $nutzername (Default: testen): " nutzerpw : "${nutzerpw:=testen}" if [[ $rootpw == "" ]]; then echo "Kein Passwort für $nutzername vergeben, breche ab" exit 1 fi echo "General configuration:" echo "1) Server (Systemd-networkd, no graphics card) 2) Laptop/Desktop (Networkmanager(iwd), Graphics Card, GNOME)" read -r configuration : "${configuration:=2}" if [[ $configuration == 2 ]]; then echo "Laptop/Desktop" echo "" echo "Graphics Card" echo "1) AMD 2) Intel 3) Nvidia" read -r gracard if [[ $gracard == 1 ]]; then echo "AMD" elif [[ $gracard == 2 ]]; then echo "Intel" elif [[ $gracard == 3 ]]; then echo "Nvidia" else read -r -p "No Graphics Card selected. Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] || exit 1 fi elif [[ $configuration == 1 ]]; then echo "Server" fi sleep 1 # Pacman Konfiguration sed -i 's/#\(Color\)/\1/' /etc/pacman.conf # Umbruch notwendug sed -i 's/#\(ParallelDownloads\s=\s5\)/\1\ ILoveCandy/' /etc/pacman.conf # Zeit einstellen ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime hwclock --systohc # vim /etc/locale.gen sed -i 's/#\(de_DE.UTF-8\)/\1/' /etc/locale.gen locale-gen echo "LANG=de_DE.UTF-8" >> /etc/locale.conf echo "KEYMAP=de-latin1-nodeadkeys" >> /etc/vconsole.conf #only for console not for DE or terminal #echo "FONT=Tamsyn10x20r" >> /etc/vconsole.conf echo "arch" >> /etc/hostname # vim /etc/hosts echo "127.0.0.1 localhost" > /etc/hosts echo "::1 localhost" >> /etc/hosts echo "127.0.1.1 arch.localedomain arch" >> /etc/hosts echo root:"${rootpw}" | chpasswd pacman -S ${selectedKernel} "${ucode}" pacman -S autoconf automake binutils bison debugedit fakeroot flex gcc groff libtool m4 make patch pkgconf texinfo which ${header} # Included in base-devel: archlinux-keyring autoconf automake binutils bison debugedit fakeroot file findutils flex gawk gcc gettext grep groff gzip libtool m4 make pacman patch pkgconf sed sudo texinfo which pacman -S iwd dialog reflector xdg-user-dirs xdg-utils inetutils ldns bash-completion openssh rsync iptables-nft ipset firewalld lynx man-db man-pages texinfo opendoas pacman-contrib rebuild-detector sed -i 's/#\(CHARACTER_SET:\).*/\1utf-8/' /etc/lynx.cfg echo "permit :wheel" > /etc/doas.conf echo "permit persist eichehome as root" >> /etc/doas.conf echo "" >> /etc/doas.conf doas -C /etc/doas.conf && echo "config ok" || echo "config error" read -r -p "Continue? (Y/N): " confirm && [[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] && pacman -R sudo || echo "do not forget to check doas.conf and remove sudo afterwards" #Idee: ppp polkit(?) pacman -S efibootmgr mtools dosfstools if [[ $gracard == 1 ]]; then pacman -S --noconfirm xf86-video-amdgpu elif [[ $gracard == 3 ]]; then pacman -S --noconfirm nvidia nvidia-utils nvidia-settings fi if [[ $configuration == 1 ]]; then systemctl enable systemd-networkd systemctl enable iwd systemctl enable sshd # Netzwerk # Ethernet echo "Ethernet" #ethernet_network=$(find / -type f -name 20-ethernet.network | grep configs) cp "$(find "${PWD}" -type f -path '*/configs/*' -name 20-ethernet.network)" /etc/systemd/network/ # Wlan echo "WLAN" #wlan_network=$(find / -type f -name 20-wlan.network | grep configs) cp "$(find "${PWD}" -type f -path '*/configs/*' -name 20-wlan.network)" /etc/systemd/network/ # Wwan (Mobilefunk) echo "Mobilfunk" #wwan_network=$(find / -type f -name 20-wwan.network | grep configs) cp "$(find "${PWD}" -type f -path '*/configs/*' -name 20-wwan.network)" /etc/systemd/network/ elif [[ $configuration == 2 ]]; then pacman -S fwupd networkmanager modemmanager avahi bluez bluez-utils sshfs pipewire pipewire-audio pipewire-alsa pipewire-pulse pipewire-jack pipewire-zeroconf pipewire-v4l2 pipewire-docs pipewire-roc helvum wireplumber gstreamer gst-plugin-pipewire gst-libav gst-plugins-good gst-plugins-base xdg-desktop-portal-gnome espeak-ng networkmanager-openconnect networkmanager-openvpn networkmanager-pptp networkmanager-vpnc power-profiles-daemon plymouth pacman -S gnome gdm gnome-software-packagekit-plugin systemctl enable NetworkManager # Configure IWD as Backend for Networkmanager #wifi_backend_conf=$(find / -type f -name wifi_backend.conf | grep configs) cp "$(find "${PWD}" -type f -path '*/configs/*' -name wifi_backend.conf)" /etc/NetworkManager/conf.d/ # Disable MulticastDNS in systemd-resolved #disable_multicastDNS_conf=$(find / -type f -name disable-multicastDNS.conf | grep configs) mkdir -p /etc/systemd/resolved.conf.d cp "$(find "${PWD}" -type f -path '*/configs/*' -name disable-multicastDNS.conf)" /etc/systemd/resolved.conf.d/ systemctl enable avahi-daemon systemctl enable bluetooth systemctl enable gdm #LibreOffice pacman -S libreoffice-fresh-de #Deutsche Tastatur einstellen gsettings set org.gnome.desktop.input-sources source "[('xkb', 'de')]" fi systemctl enable systemd-resolved systemctl enable systemd-timesyncd systemctl enable reflector.timer systemctl enable firewalld systemctl enable fstrim.timer systemctl enable systemd-time-wait-sync.service if [[ $gracard == 1 ]]; then sed -i 's/MODULES=()/MODULES=(amdgpu)/' /etc/mkinitcpio.conf #AMD elif [[ $gracard == 2 ]]; then sed -i 's/MODULES=()/MODULES=(i915)/' /etc/mkinitcpio.conf #Intel elif [[ $gracard == 3 ]]; then sed -i 's/MODULES=()/MODULES=(nvidia)/' /etc/mkinitcpio.conf #Nvidia fi sed -i 's/BINARIES=()/BINARIES=(btrfs)/' /etc/mkinitcpio.conf sed -i 's/^HOOKS=(.*)/HOOKS=(base systemd keyboard autodetect sd-vconsole modconf kms block sd-encrypt filesystems fsck)/' /etc/mkinitcpio.conf if [[ $configuration == 2 ]]; then sed -i 's/^HOOKS=(.*)/HOOKS=(base systemd keyboard plymouth autodetect sd-vconsole modconf kms block sd-encrypt filesystems fsck)/' /etc/mkinitcpio.conf fi if [[ $kernel == 1 ]]; then mkinitcpio -p linux elif [[ $kernel == 2 ]]; then mkinitcpio -p linux mkinitcpio -p linux-lts elif [[ $kernel == 3 ]]; then mkinitcpio -p linux mkinitcpio -p linux-zen elif [[ $kernel == 4 ]]; then mkinitcpio -p linux mkinitcpio -p linux-lts mkinitcpio -p linux-zen elif [[ $kernel == 5 ]]; then mkinitcpio -p linux-lts mkinitcpio -p linux-zen fi bootctl install # Bootloaderconfig scriptpfad="${PWD}-${0}" scriptpfad="${scriptpfad//-.}" scriptpfad="${scriptpfad//base.sh}" #loader_conf=$(find / -type f -name loader.conf | grep configs) cp "$(find "${scriptpfad}" -type f -path '*/configs/*' -name loader.conf)" /boot/loader/ #$selectedKernel="linux linux-lts linux-zen" entry_conf=$(find "${PWD}" -type f -path '*/configs/*' -name entry.conf) for kernel in $selectedKernel; do boot_entry_name="${kernel//linux/arch}"; # Standart echo "$boot_entry_name.conf" cp "$entry_conf" /boot/loader/entries/"$boot_entry_name".conf sed -i "s/#KERNEL#/$kernel/" /boot/loader/entries/"$boot_entry_name".conf sed -i "s/#INITRAMFS#/$kernel/" /boot/loader/entries/"$boot_entry_name".conf boot_entry="${boot_entry_name//arch/arch-linux}" title="" for word in ${boot_entry//-/ }; do word="${word@u} " title="${title}${word//Lts/LTS}" done sed -i "s/#TITLE#/$title/" /boot/loader/entries/"$boot_entry_name".conf # Fallback echo "$boot_entry_name-fallback.conf" cp "$entry_conf" /boot/loader/entries/"$boot_entry_name"-fallback.conf sed -i "s/#KERNEL#/$kernel/" /boot/loader/entries/"$boot_entry_name"-fallback.conf sed -i "s/#INITRAMFS#/$kernel-fallback/" /boot/loader/entries/"$boot_entry_name"-fallback.conf boot_entry="${boot_entry_name//arch/arch-linux}-fallback" title="" for word in ${boot_entry//-/ }; do word="${word@u} " title="${title}${word//Lts/LTS}" done sed -i "s/#TITLE#/$title/" /boot/loader/entries/"$boot_entry_name"-fallback.conf done; #TITLE#Arch Linux Zen Fallback #KERNEL#linux-zen #INITRAMFS#linux-zen-fallback #if [[ $kernel == 1 || $kernel == 2 || $kernel == 3 || $kernel == 4 ]]; then # # Entry Arch # arch_conf=$(find / -type f -name arch.conf | grep configs) # cp "$arch_conf" /boot/loader/entries/ #fi # #if [[ $kernel == 2 || $kernel == 4 || $kernel == 5 ]]; then # # Entry Arch LTS # arch_lts_conf=$(find / -type f -name arch-lts.conf | grep configs) # cp "$arch_lts_conf" /boot/loader/entries/ #fi # #if [[ $kernel == 3 || $kernel == 4 || $kernel == 5 ]]; then # # Entry Arch Zen # arch_zen_conf=$(find / -type f -name arch-zen.conf | grep configs) # cp "$arch_zen_conf" /boot/loader/entries/ #fi # #if [[ $kernel == 1 || $kernel == 2 || $kernel == 3 || $kernel == 4 ]]; then # # Entry Arch Fallback # arch_fallback_conf=$(find / -type f -name arch-fallback.conf | grep configs) # cp "$arch_fallback_conf" /boot/loader/entries/ #fi # #if [[ $kernel == 2 || $kernel == 4 || $kernel == 5 ]]; then # # Entry Arch LTS Fallback # arch_lts_fallback_conf=$(find / -type f -name arch-lts-fallback.conf | grep configs) # cp "$arch_lts_fallback_conf" /boot/loader/entries/ #fi # #if [[ $kernel == 3 || $kernel == 4 || $kernel == 5 ]]; then # # Entry Arch Zen Fallback # arch_zen_fallback_conf=$(find / -type f -name arch-zen-fallback.conf | grep configs) # cp "$arch_zen_fallback_conf" /boot/loader/entries/ # if [[ $vendor == 1 ]]; then # sed -i 's/#AMD//' /boot/loader/entries/arch-zen-fallback.conf # elif [[ $vendor == 2 ]]; then # sed -i 's/#Intel//' /boot/loader/entries/arch-zen-fallback.conf # fi #fi # Verschlüsselungs-Passwort: testpassword cryptroot_name=$(grep "#\s/dev/mapper" /etc/fstab | head -n 1 | sed 's/#\s\/dev\/mapper\/\(.*\)\s.*/\1/') cryptroot_device_name=$(grep "LABEL=EFI" /etc/fstab | sed 's/#\s\/dev\/\(.\{3\}\).*/\1/') cryptroot_device_uuid=$(blkid -o value -s UUID /dev/"$cryptroot_device_name"2) #sed -i "s/root=LABEL=arch/root=\/dev\/mapper\/$cryptroot_name rd.luks.name=$cryptroot_device_uuid=$cryptroot_name/" /boot/loader/entries/arch.conf find /boot -type f -name arch\*.conf -exec sed -i "s/root=LABEL=arch/root=\/dev\/mapper\/$cryptroot_name rd.luks.name=$cryptroot_device_uuid=$cryptroot_name/ splash quiet" {} \; useradd -mG wheel "$nutzername" echo "$nutzername":"$nutzerpw" | chpasswd #echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers.d/wheel_group