artix

installation script
git clone https://git.awy.one/artix
Log | Files | Refs | README | LICENSE

commit e7a7d137b2b0282b5d49d8a7014856dba7c14031
parent 9ef10a6f9f8f41ceb5678a05302649e51f513bd7
Author: awy <awy@awy.one>
Date:   Tue, 16 Dec 2025 19:49:38 +0300

format

Diffstat:
Minstall.sh | 135++++++++++++++++++++++++++++++++++++++++---------------------------------------
Mpost_chroot.sh | 65+++++++++++++++++++++++++++++++----------------------------------
2 files changed, 100 insertions(+), 100 deletions(-)

diff --git a/install.sh b/install.sh @@ -3,34 +3,32 @@ set -e cpuvendor=$(grep -m 1 'vendor_id' /proc/cpuinfo | awk '{print $3}') -diskpart() -{ +diskpart() { pacman -S xfsprogs --noconfirm mkfs.fat -F32 /dev/"$bootdrive" case $encryption in - 0) - mkfs.xfs /dev/"$rootdrive" - mount /dev/"$rootdrive" /mnt - ;; - 1) - printf "%s" "$cryptpass" | cryptsetup luksFormat /dev/"$rootdrive" -d - - printf "%s" "$cryptpass" | cryptsetup open /dev/"$rootdrive" cryptlvm -d - - mkfs.xfs /dev/mapper/cryptlvm - mount /dev/mapper/cryptlvm /mnt - ;; + 0) + mkfs.xfs /dev/"$rootdrive" + mount /dev/"$rootdrive" /mnt + ;; + 1) + printf "%s" "$cryptpass" | cryptsetup luksFormat /dev/"$rootdrive" -d - + printf "%s" "$cryptpass" | cryptsetup open /dev/"$rootdrive" cryptlvm -d - + mkfs.xfs /dev/mapper/cryptlvm + mount /dev/mapper/cryptlvm /mnt + ;; esac mkdir /mnt/boot mkdir /mnt/home } -binkernel() -{ +binkernel() { mount /dev/"$bootdrive" /mnt/boot pacman -Sy --confirm case $kerneltype in - 1) basestrap /mnt base dinit seatd-dinit linux ;; - 2) basestrap /mnt base dinit seatd-dinit linux-zen ;; - *) printf "Invalid kernel" && exit 1 ;; + 1) basestrap /mnt base dinit seatd-dinit linux ;; + 2) basestrap /mnt base dinit seatd-dinit linux-zen ;; + *) printf "Invalid kernel" && exit 1 ;; esac if [ "$encryption" = 1 ]; then basestrap /mnt cryptsetup lvm2 lvm2-dinit @@ -39,24 +37,21 @@ binkernel() cp linuxx64.efi.stub /mnt/usr/lib/systemd/boot/efi } -customkernel() -{ +customkernel() { mount /dev/"$bootdrive" /mnt/boot pacman -Sy --confirm basestrap /mnt base dinit seatd-dinit cp .config /mnt/usr/src } -getpass() -{ +getpass() { stty -echo read -r choice stty echo echo "$choice" } -getuserdata() -{ +getuserdata() { printf "Enter root password: " rootpass=$(getpass) echo @@ -74,12 +69,12 @@ getuserdata() printf "Enter space-separated partition numbers (e.g., 5 6 for 5 boot 6 root): " read -r partitions case "$diskdrive" in - nvme[0-9]*n[0-9]* | mmcblk[0-9]*) - partprefix="p" - ;; - *) - partprefix="" - ;; + nvme[0-9]*n[0-9]* | mmcblk[0-9]*) + partprefix="p" + ;; + *) + partprefix="" + ;; esac rootdrive="$diskdrive$partprefix${partitions##* }" bootdrive="$diskdrive$partprefix${partitions%% *}" @@ -88,13 +83,16 @@ getuserdata() printf "Your CPU Vendor detected as %s, is that right? Y/N: " "$cpuvendor" read -r answer case "$answer" in - y|Y) - break ;; - n|N) - echo "Something wrong. Exiting..." - exit 1 ;; - *) - echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 ;; + y | Y) + break + ;; + n | N) + echo "Something wrong. Exiting..." + exit 1 + ;; + *) + echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 + ;; esac done while true; do @@ -102,14 +100,17 @@ getuserdata() printf "Do you want to use encryption (LUKS)? Y/N: " read -r answer case "$answer" in - y|Y) - encryption=1 - break ;; - n|N) - encryption=0 - break ;; - *) - echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 ;; + y | Y) + encryption=1 + break + ;; + n | N) + encryption=0 + break + ;; + *) + echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 + ;; esac done if [ "$encryption" = 1 ]; then @@ -129,36 +130,38 @@ clear # rankmirrors -n 5 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist case $kerneltype in - 1 | 2) binkernel ;; - 3) customkernel ;; - *) printf "Invalid kernel type" && exit 1 ;; +1 | 2) binkernel ;; +3) customkernel ;; +*) printf "Invalid kernel type" && exit 1 ;; esac case $cpuvendor in - GenuineIntel) - basestrap /mnt intel-ucode - if [ "$kerneltype" = 3 ]; then - pacman -S iucode-tool --noconfirm - CPUFAM=$(printf '%02x\n' "$(lscpu | grep -E '^CPU family:' | awk '{print $3}')") - MODEL=$(printf '%02x\n' "$(lscpu | grep -E '^Model:' | awk '{print $2}')") - STEPPING=$(printf '%02x\n' "$(lscpu | grep -E '^Stepping:' | awk '{print $2}')") - MICROCODE_PATH="intel-ucode/$CPUFAM-$MODEL-$STEPPING" - THREAD_NUM=$(nproc) - sed -i "s#CONFIG_EXTRA_FIRMWARE=.*#CONFIG_EXTRA_FIRMWARE=\"$MICROCODE_PATH\"#g" /mnt/usr/src/.config - sed -i "s#CONFIG_NR_CPUS=.*#CONFIG_NR_CPUS=$THREAD_NUM#g" /mnt/usr/src/.config - fi - ;; - AuthenticAMD) - basestrap /mnt amd-ucode ;; - *) - printf "Unsupported CPU Vendor. Possibly there is error in detection script.\n" && exit 1 ;; +GenuineIntel) + basestrap /mnt intel-ucode + if [ "$kerneltype" = 3 ]; then + pacman -S iucode-tool --noconfirm + CPUFAM=$(printf '%02x\n' "$(lscpu | grep -E '^CPU family:' | awk '{print $3}')") + MODEL=$(printf '%02x\n' "$(lscpu | grep -E '^Model:' | awk '{print $2}')") + STEPPING=$(printf '%02x\n' "$(lscpu | grep -E '^Stepping:' | awk '{print $2}')") + MICROCODE_PATH="intel-ucode/$CPUFAM-$MODEL-$STEPPING" + THREAD_NUM=$(nproc) + sed -i "s#CONFIG_EXTRA_FIRMWARE=.*#CONFIG_EXTRA_FIRMWARE=\"$MICROCODE_PATH\"#g" /mnt/usr/src/.config + sed -i "s#CONFIG_NR_CPUS=.*#CONFIG_NR_CPUS=$THREAD_NUM#g" /mnt/usr/src/.config + fi + ;; +AuthenticAMD) + basestrap /mnt amd-ucode + ;; +*) + printf "Unsupported CPU Vendor. Possibly there is error in detection script.\n" && exit 1 + ;; esac UUID_ROOT=$(blkid -s UUID -o value /dev/"$rootdrive") UUID_BOOT=$(blkid -s UUID -o value /dev/"$bootdrive") -echo "UUID=$UUID_BOOT /boot vfat defaults,noatime 0 2" > /mnt/etc/fstab -echo "UUID=$UUID_ROOT / xfs defaults,noatime 0 1" >> /mnt/etc/fstab +echo "UUID=$UUID_BOOT /boot vfat defaults,noatime 0 2" >/mnt/etc/fstab +echo "UUID=$UUID_ROOT / xfs defaults,noatime 0 1" >>/mnt/etc/fstab export diskdrive export rootdrive diff --git a/post_chroot.sh b/post_chroot.sh @@ -6,7 +6,7 @@ hwclock --systohc # nvidia fixes mkdir -p /etc/modprobe.d/ -cat <<EOL >> /etc/modprobe.d/nvidia.conf +cat <<EOL >>/etc/modprobe.d/nvidia.conf options nvidia NVreg_UsePageAttributeTable=1 options nvidia-drm fbdev=1 options nvidia NVreg_RegistryDwords="PowerMizerEnable=0x1; PerfLevelSrc=0x2222; PowerMizerLevel=0x3; PowerMizerDefault=0x3; PowerMizerDefaultAC=0x3" @@ -14,59 +14,57 @@ EOL sed -i -e "/^#en_US.UTF-8/s/^#//" /etc/locale.gen locale-gen -echo LANG=en_US.UTF-8 > /etc/locale.conf +echo LANG=en_US.UTF-8 >/etc/locale.conf export LANG="en_US.UTF-8" export LC_COLLATE="C" -echo "$hostname" > /etc/hostname +echo "$hostname" >/etc/hostname UUID_ROOT=$(blkid -s UUID -o value /dev/"$rootdrive") if [ "$encryption" = 1 ]; then UUID_CRYPTROOT=$(blkid -s UUID -o value /dev/mapper/cryptlvm) fi -binkernel() -{ +binkernel() { pacman -S efibootmgr --noconfirm - echo "options hid_apple fnmode=0" > /etc/modprobe.d/hid_apple.conf + echo "options hid_apple fnmode=0" >/etc/modprobe.d/hid_apple.conf mkdir -p /etc/kernel mkdir -p /boot/EFI/BOOT case $kerneltype in - 1) -cat <<EOL > /etc/mkinitcpio.d/linux.preset + 1) + cat <<EOL >/etc/mkinitcpio.d/linux.preset ALL_kver="/boot/vmlinuz-linux" PRESETS=('default') default_uki="/boot/EFI/BOOT/BOOTX64.efi" EOL -;; - 2) -cat <<EOL > /etc/mkinitcpio.d/linux-zen.preset + ;; + 2) + cat <<EOL >/etc/mkinitcpio.d/linux-zen.preset ALL_kver="/boot/vmlinuz-linux-zen" PRESETS=('default') default_uki="/boot/EFI/BOOT/BOOTX64.efi" EOL -;; - *) printf "Invalid kernel" && exit 1 ;; + ;; + *) printf "Invalid kernel" && exit 1 ;; esac if [ "$encryption" = 1 ]; then - echo "cryptdevice=UUID=$UUID_ROOT:cryptlvm root=UUID=$UUID_CRYPTROOT rw" > /etc/kernel/cmdline + echo "cryptdevice=UUID=$UUID_ROOT:cryptlvm root=UUID=$UUID_CRYPTROOT rw" >/etc/kernel/cmdline sed -i "s#HOOKS=.*#HOOKS=(base udev microcode modconf keyboard keymap consolefont block encrypt lvm2 filesystems fsck)#g" /etc/mkinitcpio.conf else - echo "root=UUID=$UUID_ROOT rw" > /etc/kernel/cmdline + echo "root=UUID=$UUID_ROOT rw" >/etc/kernel/cmdline sed -i "s#HOOKS=.*#HOOKS=(base udev autodetect microcode modconf keyboard keymap consolefont block filesystems fsck)#g" /etc/mkinitcpio.conf fi case $kerneltype in - 1) pacman -S linux-headers --noconfirm ;; - 2) pacman -S linux-zen-headers --noconfirm ;; - *) printf "Invalid kernel" && exit 1 ;; + 1) pacman -S linux-headers --noconfirm ;; + 2) pacman -S linux-zen-headers --noconfirm ;; + *) printf "Invalid kernel" && exit 1 ;; esac - efibootmgr -c -d /dev/"$diskdrive" -p "${partitions%% *}" -L "linux" -l '\EFI\BOOT\BOOTX64.EFI' + efibootmgr -c -d /dev/"$diskdrive" -p "${partitions%% *}" -L "linux" -l '\EFI\BOOT\BOOTX64.EFI' } -customkernel() -{ +customkernel() { latestkernel=$(curl -s https://www.kernel.org/ | grep -A 1 'latest_link' | grep -oP '[0-9]+\.[0-9]+(\.[0-9]+)?' | head -n 1) majorversion=$(echo "$latestkernel" | cut -d'.' -f1) pacman -S efibootmgr --noconfirm @@ -89,20 +87,20 @@ customkernel() make headers_install mkdir -p /boot/EFI/BOOT cp arch/x86/boot/bzImage /boot/EFI/BOOT/BOOTX64.EFI - efibootmgr -c -d /dev/"$diskdrive" -p "${partitions%% *}" -L "linux" -l '\EFI\BOOT\BOOTX64.EFI' + efibootmgr -c -d /dev/"$diskdrive" -p "${partitions%% *}" -L "linux" -l '\EFI\BOOT\BOOTX64.EFI' } case $kerneltype in - 1 | 2) binkernel ;; - 3) customkernel ;; - *) printf "Invalid kernel" && exit 1 ;; +1 | 2) binkernel ;; +3) customkernel ;; +*) printf "Invalid kernel" && exit 1 ;; esac # use dash as sh pacman -Sy dash zsh --noconfirm ln -sfT dash /usr/bin/sh mkdir -p /etc/pacman.d/hooks -cat <<EOL >> /etc/pacman.d/hooks/bash.hook +cat <<EOL >>/etc/pacman.d/hooks/bash.hook [Trigger] Type = Package Operation = Install @@ -121,7 +119,7 @@ useradd -m -g wheel -s /bin/zsh "$username" echo "root:$rootpass" | chpasswd echo "$username:$userpass" | chpasswd -cat <<EOL >> /etc/hosts +cat <<EOL >>/etc/hosts 127.0.0.1 localhost ::1 localhost 127.0.1.1 $hostname.localdomain $hostname @@ -130,20 +128,20 @@ EOL # enable arch repos pacman -Sy --noconfirm pacman -S artix-archlinux-support --noconfirm -echo "[extra]" >> /etc/pacman.conf -echo "Include = /etc/pacman.d/mirrorlist-arch" >> /etc/pacman.conf +echo "[extra]" >>/etc/pacman.conf +echo "Include = /etc/pacman.d/mirrorlist-arch" >>/etc/pacman.conf # curl -s "https://archlinux.org/mirrorlist/?country=RU&protocol=https&use_mirror_status=on" | sed -e 's/^#Server/Server/' -e '/^#/d' > /etc/pacman.d/mirrorlist-arch pacman -Sy --noconfirm # enable my custom repo -echo "[awy-arch]" >> /etc/pacman.conf -echo "Server = https://git.awy.one/\$repo.git/plain/\$arch/" >> /etc/pacman.conf +echo "[awy-arch]" >>/etc/pacman.conf +echo "Server = https://git.awy.one/\$repo.git/plain/\$arch/" >>/etc/pacman.conf pacman-key --recv-keys B34B86B597BFE8667CE1EC9DB88FFCF0CC468933 pacman-key --lsign-key B34B86B597BFE8667CE1EC9DB88FFCF0CC468933 pacman -Sy --noconfirm pacman -S doas --noconfirm -cat <<EOL >> /etc/doas.conf +cat <<EOL >>/etc/doas.conf permit nopass root permit :wheel permit persist :wheel @@ -162,7 +160,6 @@ permit nopass :wheel cmd umount permit nopass :wheel cmd lsblk args -rpo "uuid,name,type,size,label,mountpoint,fstype" EOL - pacman -S dhcpcd dhcpcd-dinit dbus-dinit --noconfirm ln -sf /etc/dinit.d/dhcpcd /etc/dinit.d/boot.d/ ln -sf /etc/dinit.d/dbus /etc/dinit.d/boot.d/ @@ -178,7 +175,7 @@ routerip=$(ip route show default | awk '{print $3}') machineip=$(ip -4 addr show dev "$interface" | awk '/inet/ {print $2}') dnsserver="8.8.8.8" -cat <<EOL >> /etc/dhcpcd.conf +cat <<EOL >>/etc/dhcpcd.conf noarp interface $interface static ip_address=$machineip