Compare commits
11
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
87b7c7a76f | ||
|
|
2e8b0dd244 | ||
|
|
231a1f5500 | ||
|
|
da64a7b42f | ||
|
|
b14b8427d3 | ||
|
|
da42e26a3c | ||
|
|
687d9fa02d | ||
|
|
1250ee6944 | ||
|
|
0544466d93 | ||
|
|
c5d9c10b92 | ||
|
|
bf60df94eb |
@@ -4,21 +4,28 @@
|
|||||||
|
|
||||||
This installation script aims for a simple (read minimal) Arch Linux installation, which is modern in the way that it uses UEFI, systemd-boot and Wayland, secure in the way that it uses full-disk encryption using LUKS as well as flexibility by using Btrfs subvolumes for the root and home partition.
|
This installation script aims for a simple (read minimal) Arch Linux installation, which is modern in the way that it uses UEFI, systemd-boot and Wayland, secure in the way that it uses full-disk encryption using LUKS as well as flexibility by using Btrfs subvolumes for the root and home partition.
|
||||||
|
|
||||||
Tested and working as of **June 2026**.
|
Tested and working as of **July 2026**.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## Set your keyboard layout correctly
|
||||||
|
Before starting the install script you should set your keyboard layout correctly. Otherwise you might run into problems with mismatching passwords.
|
||||||
|
```
|
||||||
|
loadkeys de
|
||||||
|
```
|
||||||
|
|
||||||
## To automatically install Arch Linux, clone this repository:
|
## To automatically install Arch Linux, clone this repository:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ pacman -Sy git
|
$ pacman -Sy git
|
||||||
$ git clone https://git.dataprolet.de/dataprolet/Arch-Linux-Installer.git
|
$ git clone https://git.dataprolet.de/dataprolet/Arch-Linux-Installer.git
|
||||||
$ cd arch
|
$ cd Arch-Linux-Installer
|
||||||
$ sh install.sh
|
$ sh install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Or as a one-liner:
|
### Or as a one-liner:
|
||||||
```
|
```
|
||||||
# pacman -Sy git --noconfirm && git clone https://git.dataprolet.de/dataprolet/Arch-Linux-Installer.git && cd arch && sh install.sh
|
# pacman -Sy git --noconfirm && git clone https://git.dataprolet.de/dataprolet/Arch-Linux-Installer.git && cd Arch-Linux-Installer && sh install.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Post-Install
|
### Post-Install
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 393 KiB After Width: | Height: | Size: 317 KiB |
+32
-40
@@ -207,10 +207,7 @@ echo "Decrypting.. This also might take a while."
|
|||||||
echo
|
echo
|
||||||
echo -en "${pwcr}\n${pwcr}" | cryptsetup luksOpen "/dev/${main}" main
|
echo -en "${pwcr}\n${pwcr}" | cryptsetup luksOpen "/dev/${main}" main
|
||||||
echo "Partition successfully opened."
|
echo "Partition successfully opened."
|
||||||
echo
|
clear
|
||||||
|
|
||||||
lsblk | grep "${dev}"
|
|
||||||
echo
|
|
||||||
|
|
||||||
##########
|
##########
|
||||||
|
|
||||||
@@ -245,10 +242,7 @@ mount -o autodefrag,compress=zstd:3,subvol=home "/dev/mapper/main" "/mnt/home"
|
|||||||
mkdir "/mnt/boot"
|
mkdir "/mnt/boot"
|
||||||
mount "/dev/${boot}" "/mnt/boot"
|
mount "/dev/${boot}" "/mnt/boot"
|
||||||
echo "Mounting complete."
|
echo "Mounting complete."
|
||||||
echo
|
clear
|
||||||
|
|
||||||
lsblk -a
|
|
||||||
echo
|
|
||||||
|
|
||||||
##########
|
##########
|
||||||
|
|
||||||
@@ -260,11 +254,9 @@ echo "Done."
|
|||||||
echo
|
echo
|
||||||
|
|
||||||
# Check if keyring is up-to-date
|
# Check if keyring is up-to-date
|
||||||
if checkupdates | grep -q archlinux-keyring; then
|
echo "Updating keyring.."
|
||||||
echo "Updating keyring.."
|
pacman -Sy archlinux-keyring --needed --noconfirm
|
||||||
pacman -Sy archlinux-keyring --noconfirm
|
echo "Done."
|
||||||
echo "Done."
|
|
||||||
fi
|
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# Installing base system
|
# Installing base system
|
||||||
@@ -340,7 +332,7 @@ all_packages=(
|
|||||||
pacstrap "/mnt" "${all_packages[@]}"
|
pacstrap "/mnt" "${all_packages[@]}"
|
||||||
|
|
||||||
echo "Base system installed."
|
echo "Base system installed."
|
||||||
echo
|
clear
|
||||||
|
|
||||||
##########
|
##########
|
||||||
|
|
||||||
@@ -351,38 +343,32 @@ genfstab -Up "/mnt" > "/mnt/etc/fstab"
|
|||||||
echo "Done."
|
echo "Done."
|
||||||
echo
|
echo
|
||||||
|
|
||||||
# Set hardware clock
|
# Set time and hardware clock
|
||||||
# https://wiki.archlinux.org/title/Installation_guide#Time
|
# https://wiki.archlinux.org/title/Installation_guide#Time
|
||||||
arch-chroot "/mnt" hwclock --systohc # Set the Hardware Clock to the current System Time
|
echo "Setting timezone and clock.."
|
||||||
|
arch-chroot "/mnt" ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
|
||||||
|
arch-chroot "/mnt" hwclock --systohc
|
||||||
|
echo "Done."
|
||||||
|
echo
|
||||||
|
|
||||||
# Generate locale
|
# Set hostname
|
||||||
|
# https://wiki.archlinux.org/title/Installation_guide#Network_configuration
|
||||||
|
echo "Setting hostname.."
|
||||||
|
echo "${host}" > "/mnt/etc/hostname"
|
||||||
|
echo "Done."
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Set locale and keymap
|
||||||
# https://wiki.archlinux.org/title/Installation_guide#Localization
|
# https://wiki.archlinux.org/title/Installation_guide#Localization
|
||||||
|
echo "Setting locale and keymap.."
|
||||||
echo "en_US.UTF-8 UTF-8" >> "/mnt/etc/locale.gen"
|
echo "en_US.UTF-8 UTF-8" >> "/mnt/etc/locale.gen"
|
||||||
arch-chroot "/mnt" locale-gen
|
arch-chroot "/mnt" locale-gen
|
||||||
|
arch-chroot "/mnt" localectl set-locale LANG=en_US.UTF-8
|
||||||
|
|
||||||
# Set keymap, locale, timezone and hostname
|
echo "KEYMAP=de-latin1-nodeadkeys" > "/mnt/etc/vconsole.conf"
|
||||||
# https://wiki.archlinux.org/title/Systemd-firstboot
|
arch-chroot /mnt localectl set-keymap --no-convert de-latin1-nodeadkeys
|
||||||
service_dir="/mnt/etc/systemd/system/systemd-firstboot.service.d"
|
echo "Done."
|
||||||
mkdir "${service_dir}"
|
echo
|
||||||
|
|
||||||
rootdir="/mnt"
|
|
||||||
keymap="de-latin1-nodeadkeys"
|
|
||||||
locale="en_US.UTF-8"
|
|
||||||
timezone="Europe/Berlin"
|
|
||||||
|
|
||||||
cat << EOF > "${service_dir}/install.conf"
|
|
||||||
[Unit]
|
|
||||||
ConditionFirstBoot=
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=
|
|
||||||
ExecStart=/usr/bin/systemd-firstboot --root="${rootdir}" --keymap="${keymap}" --locale="${locale}" --timezone="${timezone}" --hostname="${host}" --force
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=sysinit.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
arch-chroot "/mnt" systemctl enable systemd-firstboot.service
|
|
||||||
|
|
||||||
##########
|
##########
|
||||||
|
|
||||||
@@ -466,6 +452,12 @@ arch-chroot /mnt useradd -m "${user}"
|
|||||||
echo -en "${pwur}\n${pwur}" | arch-chroot /mnt passwd "${user}"
|
echo -en "${pwur}\n${pwur}" | arch-chroot /mnt passwd "${user}"
|
||||||
arch-chroot /mnt gpasswd -a "${user}" wheel
|
arch-chroot /mnt gpasswd -a "${user}" wheel
|
||||||
sed -i '82s/.*/%wheel ALL=(ALL) ALL/' /mnt/etc/sudoers
|
sed -i '82s/.*/%wheel ALL=(ALL) ALL/' /mnt/etc/sudoers
|
||||||
|
|
||||||
|
# Create keyboard layout
|
||||||
|
config_dir="/home/${user}/.config"
|
||||||
|
arch-chroot /mnt sudo -u "${user}" mkdir -p "${config_dir}"
|
||||||
|
arch-chroot /mnt sudo -u "${user}" bash -c \
|
||||||
|
"printf '[Layout]\nLayoutList=de\nUse=true' >> ${config_dir}/kxkbrc"
|
||||||
echo "Done."
|
echo "Done."
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
### Arch Linux Konfiguration
|
||||||
|
|
||||||
|
## KDE Plasma
|
||||||
|
- disable Plasma splash screen
|
||||||
|
- set pointer to Breeze Light
|
||||||
|
- set task switcher to large icons
|
||||||
|
- set taskbar to auto hide and no floating
|
||||||
|
- disable desktop effect: highlight screen edges
|
||||||
|
- change wallpaper for desktop, lock screen and login screen
|
||||||
|
- set up kwallet
|
||||||
|
- disable restore sessions
|
||||||
|
- disable confirmation for shutdown etc.
|
||||||
|
- set windows position + size (for signal, telegram, firefox, keepass, konsole)
|
||||||
|
- set krusader pos 192,108 size 1536,864
|
||||||
|
- set touchpad to natural scrolling
|
||||||
|
- set shortcut strg + alt + q to lock screen
|
||||||
|
- set taskbar size 42
|
||||||
|
- edit .config/kwinrc (.4/.6)
|
||||||
|
- set animation speed to 90 %
|
||||||
|
- set up night light
|
||||||
|
- edit tray icons
|
||||||
|
|
||||||
|
## Apps
|
||||||
|
- telegram-desktop signal-desktop thunderbird krusader keepassxc nextcloud-client
|
||||||
|
- yay (git base-devel)
|
||||||
|
- yay-bin
|
||||||
|
- btop
|
||||||
|
- timeshift + backintime
|
||||||
|
- standardnotes-bin
|
||||||
|
- borg
|
||||||
|
- fwupd, fastfetch
|
||||||
|
- docker and docker-compose
|
||||||
|
- power-profile-daemon
|
||||||
|
- nano-syntax-highlighting
|
||||||
|
- amd-ucode (enable in bootloader)
|
||||||
|
- reflector
|
||||||
|
- journalctl-desktop-notification
|
||||||
|
- pacman-contrib (for paccache)
|
||||||
|
- vulkan-radeon, libvdpau-va-gl (hardware video acceleration for Firefox)
|
||||||
|
- jq
|
||||||
|
- rmtrash
|
||||||
|
- remove gnu-free-fonts (bug btop braille)
|
||||||
|
|
||||||
|
## Firefox
|
||||||
|
- set privacy to strict
|
||||||
|
- set clear browser history on close
|
||||||
|
- plasma integration, ublock, snowflake, keepass browser integration add ons
|
||||||
|
- set up hardware acceleration for firefox (vulkan-radeon, libvdpau-va-gl)
|
||||||
|
|
||||||
|
## Misc
|
||||||
|
- set up Bash color prompt
|
||||||
|
- nano: enable syntax highlighting
|
||||||
|
- enable cronie service
|
||||||
|
- set up zram-generator
|
||||||
|
- update fwupd (and enable timer)
|
||||||
|
- enable discard/TRIM for LUKS device (sudo cryptsetup --allow-discards --persistent refresh main)
|
||||||
|
- set journald max size to 1G
|
||||||
|
- fix permission for boot in /etc/fstab (fmask=0177,dmask=0077)
|
||||||
|
- enable sshd service, create ssh key
|
||||||
|
- add misc bash alias
|
||||||
|
|
||||||
|
## Power
|
||||||
|
- set Plasma power management (on AC power = Balanced, on battery = Power Save)
|
||||||
|
- set boot option for AMD p-state (options amd_pstate=active)
|
||||||
|
|
||||||
|
## Pacman
|
||||||
|
- enable color
|
||||||
|
- set up reflector config
|
||||||
|
- enable multilib repos in pacman.conf
|
||||||
|
- enable reflector.timer
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
- enable docker service
|
||||||
|
- container: scrutiny, hawser, beszel, watchtower
|
||||||
|
- add user to docker group
|
||||||
|
- add docker-prune.sh to crontab
|
||||||
|
|
||||||
|
## Backups
|
||||||
|
- set up timeshift
|
||||||
|
- set up backintime
|
||||||
|
- write and enable backintime user service and timer
|
||||||
Reference in New Issue
Block a user