https://github.com/quinsaiz/archinstall
A script to automate the Arch Linux installation process, including disk partitioning, system configuration, and package installation with customizable options.
https://github.com/quinsaiz/archinstall
archlinux automation easyeffects-presets gnu guide installer linux shell shell-script
Last synced: 2 months ago
JSON representation
A script to automate the Arch Linux installation process, including disk partitioning, system configuration, and package installation with customizable options.
- Host: GitHub
- URL: https://github.com/quinsaiz/archinstall
- Owner: quinsaiz
- License: other
- Created: 2024-09-01T10:48:45.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2026-04-23T21:25:55.000Z (2 months ago)
- Last Synced: 2026-04-23T23:28:08.749Z (2 months ago)
- Topics: archlinux, automation, easyeffects-presets, gnu, guide, installer, linux, shell, shell-script
- Language: Shell
- Homepage:
- Size: 85.9 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Arch Linux installation guide
## Preparation for installation
### Update the system clock
```bash
timedatectl set-ntp true
```
### Connect to the internet (WiFi)
```bash
rfkill unblock wifi
iw dev wlan0 scan | grep SSID
iwctl --passphrase "password" station wlan0 connect "SSID"
```
### Create partitions
```bash
fdisk -l
cfdisk /dev/nvme0n1
```
### Format the partitions
#### Create EFI partition
```bash
mkfs.vfat -F32 /dev/nvme0n1p1
```
#### **ext4:**
```bash
mkfs.ext4 -L "arch" /dev/nvme0n1p2
mkfs.ext4 -L "home" /dev/nvme0n1p3
```
#### **f2fs:**
```bash
mkfs.f2fs -f -l "arch" /dev/nvme0n1p2
mkfs.f2fs -f -l "home" /dev/nvme0n1p3
```
### Mounting
````bash
mount /dev/nvme0n1p2 /mnt
mkdir -p /mnt/{home,boot/efi}
mount /dev/nvme0n1p3 /mnt/home
mount /dev/nvme0n1p1 /mnt/boot/efi
````
## Installation
### Installing the main packages
```bash
pacstrap /mnt base base-devel linux-zen linux-zen-headers linux-firmware amd-ucode networkmanager nano
```
###
- linux linux-headers
- intel-ucode
## Configure the system
### Generate fstab
```bash
genfstab -U /mnt >> /mnt/etc/fstab
```
### Arch Chroot
```bash
arch-chroot /mnt
```
### Time
```bash
ln -sf /usr/share/zoneinfo/Europe/Kyiv /etc/localtime
hwclock --systohc
```
### Localization
```bash
echo -e \
"en_US.UTF-8 UTF-8" \
| tee -a /etc/locale.gen
locale-gen
echo \
"LANG=en_US.UTF-8" \
> /etc/locale.conf
```
#### If another language
```bash
echo -e \
"en_US.UTF-8 UTF-8\nuk_UA.UTF-8 UTF-8" \
| tee -a /etc/locale.gen
locale-gen
echo \
"LANG=uk_UA.UTF-8" \
> /etc/locale.conf
echo -e \
"KEYMAP=ua-utf\nFONT=UniCyr_8x16" \
> /etc/vconsole.conf
```
### Hostname
```bash
echo \
"arch" \
> /etc/hostname
```
### Bootloader
```bash
pacman -S grub efibootmgr
grub-install /dev/nvme0n1
grub-mkconfig -o /boot/grub/grub.cfg
```
#### If Windows is installed
```bash
pacman -S os-prober
sed -i \
'/^#GRUB_DISABLE_OS_PROBER=/ s/^#//' \
/etc/default/grub
grub-mkconfig -o /boot/grub/grub.cfg
```
### User management
#### Set password for root
```bash
passwd
```
#### Add a new user
```bash
sed -i \
'/^# %wheel ALL=(ALL:ALL) ALL/ s/^# //' \
/etc/sudoers
useradd -m -G wheel -s /bin/bash username
passwd username
```
### NetworkManager activation
```bash
systemctl enable NetworkManager
```
### End of installation
```bash
exit
umount -R /mnt
reboot
```
## Post-install
### Connect to the Wi-Fi
```bash
nmtui
```
### Pacman
```bash
sudo sed -i \
'/^#\[multilib\]/,/^#\Include = \/etc\/pacman.d\/mirrorlist/ s/^#//' \
/etc/pacman.conf
sudo sed -i \
's/^ParallelDownloads = 5/ParallelDownloads = 10/' \
/etc/pacman.conf
sudo sed -i \
'/^#Color$/ s/^#//' \
/etc/pacman.conf
sudo pacman -Syu
```
### NVIDIA GPU
```bash
# use nvidia-open for stock linux kernel, nvidia-open-dkms for custom kernels
sudo pacman -S \
nvidia-open-dkms nvidia-utils lib32-nvidia-utils \
nvidia-settings --needed
sudo pacman -S \
vulkan-icd-loader lib32-vulkan-icd-loader \
opencl-nvidia libva libva-utils \
vulkan-tools mesa-utils v4l-utils ffmpeg cuda \
--needed
printf '%s\n' \
'options nvidia_drm modeset=1 fbdev=1' \
| sudo tee /etc/modprobe.d/nvidia-drm.conf > /dev/null
printf '%s\n' \
'blacklist i2c_nvidia_gpu' \
| sudo tee /etc/modprobe.d/nvidia-i2c.conf > /dev/null
printf '%s\n' \
'blacklist nouveau' 'options nouveau modeset=0' \
| sudo tee /etc/modprobe.d/nouveau.conf > /dev/null
sudo sed -i \
's/^MODULES=(\(.*\))/MODULES=(\1 nvidia nvidia_modeset nvidia_uvm nvidia_drm)/' \
/etc/mkinitcpio.conf
sudo mkinitcpio -P
# for verification of installation
sudo cat /proc/driver/nvidia/params
```
### AMD GPU
```bash
sudo pacman -S \
mesa lib32-mesa \
vulkan-radeon lib32-vulkan-radeon \
--needed
sudo pacman -S \
vulkan-icd-loader lib32-vulkan-icd-loader \
libva-mesa-driver lib32-libva-mesa-driver \
libva libva-utils vulkan-tools mesa-utils \
v4l-utils ffmpeg --needed
```
### GNOME
```bash
sudo pacman -S gnome
sudo systemctl enable gdm
sudo reboot
```
### Installation of basic programs
```bash
sudo pacman -S \
firefox firefox-i18n-uk fastfetch btop nvtop vlc \
qbittorrent obs-studio adw-gtk-theme dosfstools ntfs-3g \
gnome-browser-connector gnome-tweaks bash-completion --needed
paru -S suru-plus-dark-git
```
### Installation paru and pamac
```bash
sudo pacman -S git --needed
git clone https://aur.archlinux.org/paru.git && \
cd paru && makepkg -si
paru -S pamac-aur
```
### Sound and equalizer settings
```bash
sudo pacman -S \
pipewire pipewire-pulse pipewire-alsa \
alsa-utils wireplumber easyeffects --needed
sudo pacman -S lsp-plugins-lv2 calf
sudo curl -L \
"https://github.com/Rikorose/DeepFilterNet/releases/download/v0.5.6/libdeep_filter_ladspa-0.5.6-x86_64-unknown-linux-gnu.so" \
-o /usr/lib/ladspa/libdeep_filter_ladspa.so
```
### Installation fonts
```bash
sudo pacman -S \
noto-fonts noto-fonts-cjk noto-fonts-emoji \
ttf-liberation ttf-roboto --needed
```
### Firewall settings
```bash
sudo pacman -S ufw gufw
sudo systemctl enable --now ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow from 192.168.0.0/24 to any port 8000 proto tcp
sudo ufw enable
```
### Bluetooth
```bash
sudo pacman -S bluez bluez-utils --needed
sudo systemctl enable --now bluetooth.service
```
### Power profiles
```bash
sudo pacman -S power-profiles-daemon
sudo systemctl enable --now power-profiles-daemon
paru -S ppd-cpu-boost
```
### Gaming utils
```bash
sudo pacman -S steam
sudo pacman -S mangohud lib32-mangohud goverlay gamemode lib32-gamemode
sudo usermod -aG gamemode $(whoami)
paru -S vkbasalt lib32-vkbasalt
```
### Zsh
```bash
sudo pacman -S zsh zsh-completions zsh-autosuggestions zsh-syntax-highlighting ttf-jetbrains-mono-nerd
chsh -s /bin/zsh
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
sed -i \
's#ZSH_THEME="robbyrussell"#ZSH_THEME="powerlevel10k/powerlevel10k"#' \
~/.zshrc
printf \
'\n# Plugins\nsource /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh\nsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh\n' \
>> ~/.zshrc
printf \
'include /usr/share/nano/*.nanorc\n' \
>> ~/.nanorc
```
### Dnsmasq
```bash
sudo pacman -S dnsmasq
printf '%s\n' \
'[main]' \
'dns=dnsmasq' \
| sudo tee /etc/NetworkManager/conf.d/dns.conf > /dev/null
nmcli general reload
```
### Cloudlfare WARP
```bash
paru -S cloudflare-warp-bin
sudo systemctl enable --now warp-svc
warp-cli registration new
systemctl --user mask warp-taskbar
```
### Optimization mkinitcpio
```bash
sudo sed -i \
's/^#COMPRESSION="lz4"/COMPRESSION="lz4"/' \
/etc/mkinitcpio.conf
sudo sed -i \
's/^#COMPRESSION_OPTIONS=()/COMPRESSION_OPTIONS=(-9)/' \
/etc/mkinitcpio.conf
sudo mkinitcpio -P
```
### Optimization pacman mirrors
```bash
sudo pacman -S reflector
sudo reflector \
--protocol https \
--country Germany,Ukraine,Poland \
--age 6 \
--sort rate \
--save /etc/pacman.d/mirrorlist
sudo pacman -Syu
```
### Activation everyweek TRIM
```bash
sudo systemctl enable --now fstrim.timer
```
### SWAP
#### zram-generator
```bash
sudo pacman -S zram-generator
printf '%s\n' \
'[zram0]' \
'zram-size = ram / 2' \
'compression-algorithm = lz4' \
'swap-priority = 100' \
| sudo tee /etc/systemd/zram-generator.conf > /dev/null
```
#### swapfile
```bash
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
printf '%s\n' \
'/swapfile none swap defaults 0 0' \
| sudo tee -a /etc/fstab > /dev/null
printf '%s\n' \
'vm.swappiness=10' \
'vm.vfs_cache_pressure=50' \
| sudo tee /etc/sysctl.d/99-sysctl.conf > /dev/null
```
### Change volume step
```bash
gsettings set org.gnome.settings-daemon.plugins.media-keys volume-step 2
```
### Recommended extensions
- [AppIndicator](https://extensions.gnome.org/extension/615/appindicator-support/)
- [BlurMyShell](https://extensions.gnome.org/extension/3193/blur-my-shell/)
- [Dash to Dock](https://extensions.gnome.org/extension/307/dash-to-dock/)
- [Tiling Assistant](https://extensions.gnome.org/extension/3733/tiling-assistant/)
- [System Monitor](https://extensions.gnome.org/extension/6807/system-monitor/)
#
### Fix suspend on amdgpu
```bash
sudo sed -i \
's/^GRUB_CMDLINE_LINUX_DEFAULT="\(.*\)"/GRUB_CMDLINE_LINUX_DEFAULT="\1 amdgpu.runpm=0"/' \
/etc/default/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
```
### For caching new icons
```bash
sudo gtk-update-icon-cache -f -t /usr/share/icons/*
```
### Remove standart GNOME apps
```bash
sudo pacman -Rns \
gnome-calendar gnome-characters gnome-clocks \
gnome-connections gnome-contacts gnome-music \
gnome-font-viewer gnome-maps gnome-software \
gnome-tour gnome-weather epiphany \
baobab simple-scan papers snapshot
```
### Cleaning GNOME of unnecessary programs (Be careful)
```bash
sudo pacman -D --asdeps $(pacman -Qqg gnome)
sudo pacman -D --asexplicit \
gnome-shell mutter gdm gnome-control-center \
gnome-console nautilus gnome-session \
gnome-settings-daemon gnome-backgrounds \
gvfs gvfs-mtp gnome-text-editor gnome-calculator \
evince gnome-disk-utility gnome-logs \
gnome-shell-extensions gnome-system-monitor \
loupe sushi xdg-desktop-portal-gnome \
xdg-user-dirs-gtk
sudo pacman -Rsn $(pacman -Qqgdtt gnome)
# removal unused dependencies
sudo pacman -Rns $(pacman -Qdtq)
```
### Headphone front panel activation
```bash
alsamixer # Line -> 100%
sudo alsactl store
mkdir -p ~/.config/autostart
cat << 'EOF' > ~/.config/autostart/amixer.sh
#!/bin/bash
for card in 0 1; do
amixer -c $card sset "Headphone" 100% unmute 2>/dev/null || true
amixer -c $card sset "Front" 100% unmute 2>/dev/null || true
done
EOF
chmod +x ~/.config/autostart/amixer.sh
cat << 'EOF' > ~/.config/autostart/amixer.desktop
[Desktop Entry]
Name=Amixer Headphone Fix
Comment=Enable headphone front panel on startup
Exec=/bin/bash -c "~/.config/autostart/amixer.sh"
Type=Application
Terminal=true
Hidden=false
StartupNotify=false
X-GNOME-Autostart-enabled=true
Icon=music
EOF
```