generate auto install arch script and readme
This commit is contained in:
150
arch-chroot-setup.sh
Executable file
150
arch-chroot-setup.sh
Executable file
@@ -0,0 +1,150 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
|
||||
username=kk
|
||||
|
||||
core_packages=(
|
||||
tmux
|
||||
kakoune
|
||||
man-db
|
||||
man-pages
|
||||
clang
|
||||
make
|
||||
tcc
|
||||
ripgrep
|
||||
curl
|
||||
plocate
|
||||
fzf
|
||||
gdb
|
||||
)
|
||||
|
||||
network_packages=(
|
||||
openssh
|
||||
sshfs
|
||||
)
|
||||
|
||||
desktop_packages=(
|
||||
sway
|
||||
swayidle
|
||||
swaybg
|
||||
swaylock
|
||||
foot
|
||||
wmenu
|
||||
xorg-xwayland
|
||||
wl-clipboard
|
||||
xdg-desktop-portal-wlr
|
||||
xdg-user-dirs
|
||||
grim
|
||||
)
|
||||
|
||||
media_packages=(
|
||||
pipewire
|
||||
pipewire-pulse
|
||||
pipewire-alsa
|
||||
pipewire-jack
|
||||
wireplumber
|
||||
pavucontrol
|
||||
ffmpeg
|
||||
imv
|
||||
mpv
|
||||
)
|
||||
|
||||
font_packages=(
|
||||
ttf-fira-code
|
||||
noto-fonts
|
||||
noto-fonts-cjk
|
||||
noto-fonts-emoji
|
||||
noto-fonts-extra
|
||||
ttf-liberation
|
||||
ttf-dejavu
|
||||
ttf-roboto
|
||||
)
|
||||
|
||||
app_packages=(
|
||||
firefox
|
||||
)
|
||||
|
||||
machine_packages=(
|
||||
nvidia-open
|
||||
)
|
||||
|
||||
if [[ ${EUID} -ne 0 ]]; then
|
||||
printf 'Run this script as root inside arch-chroot.\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
|
||||
hwclock --systohc
|
||||
|
||||
sed -i 's/^#\(en_US.UTF-8 UTF-8\)/\1/' /etc/locale.gen
|
||||
sed -i 's/^#\(pl_PL.UTF-8 UTF-8\)/\1/' /etc/locale.gen
|
||||
locale-gen
|
||||
|
||||
cat >/etc/locale.conf <<'EOF'
|
||||
LANG=en_US.UTF-8
|
||||
EOF
|
||||
|
||||
cat >/etc/vconsole.conf <<'EOF'
|
||||
KEYMAP=pl2
|
||||
EOF
|
||||
|
||||
bootctl install
|
||||
|
||||
cat >/boot/loader/loader.conf <<'EOF'
|
||||
default arch.conf
|
||||
timeout 0
|
||||
console-mode max
|
||||
editor no
|
||||
EOF
|
||||
|
||||
root_uuid=$(findmnt -no UUID /)
|
||||
if [[ -z ${root_uuid} ]]; then
|
||||
printf 'Could not detect root filesystem UUID. Check findmnt/blkid manually.\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cat >/boot/loader/entries/arch.conf <<EOF
|
||||
title Arch Linux
|
||||
linux /vmlinuz-linux
|
||||
initrd /amd-ucode.img
|
||||
initrd /initramfs-linux.img
|
||||
options root=UUID=${root_uuid} rw
|
||||
EOF
|
||||
|
||||
bootctl status
|
||||
|
||||
systemctl enable systemd-networkd.service
|
||||
systemctl enable systemd-resolved.service
|
||||
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
|
||||
install -d /etc/systemd/network
|
||||
ln -sf /usr/lib/systemd/network/89-ethernet.network.example /etc/systemd/network/89-ethernet.network
|
||||
|
||||
if ! id -u "${username}" >/dev/null 2>&1; then
|
||||
useradd -m -s /bin/bash -G wheel,video,render "${username}"
|
||||
fi
|
||||
|
||||
install -m 0750 -d /etc/sudoers.d
|
||||
cat >/etc/sudoers.d/00-wheel <<'EOF'
|
||||
%wheel ALL=(ALL:ALL) ALL
|
||||
EOF
|
||||
chmod 0440 /etc/sudoers.d/00-wheel
|
||||
visudo -cf /etc/sudoers.d/00-wheel
|
||||
|
||||
passwd "${username}"
|
||||
|
||||
pacman -Syu --needed \
|
||||
"${core_packages[@]}" \
|
||||
"${network_packages[@]}" \
|
||||
"${desktop_packages[@]}" \
|
||||
"${media_packages[@]}" \
|
||||
"${font_packages[@]}" \
|
||||
"${app_packages[@]}" \
|
||||
"${machine_packages[@]}"
|
||||
|
||||
updatedb
|
||||
systemctl enable sshd.service
|
||||
|
||||
printf '\nChroot setup complete. Exit, unmount /mnt, reboot, then log in as %s.\n' "${username}"
|
||||
printf 'After first login, run: xdg-user-dirs-update\n'
|
||||
printf 'After first login, run: systemctl --user enable --now pipewire pipewire-pulse wireplumber\n'
|
||||
printf 'Generate SSH key after first login with: ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519\n'
|
||||
305
arch-install.md
Normal file
305
arch-install.md
Normal file
@@ -0,0 +1,305 @@
|
||||
# Arch install notes
|
||||
|
||||
## 1. Install the base system
|
||||
|
||||
These packages are needed before the first boot. Install them with `pacstrap` after mounting the target system at `/mnt` and the EFI system partition at `/mnt/boot`.
|
||||
|
||||
```sh
|
||||
base_packages=(
|
||||
base # Minimal Arch system
|
||||
linux # Linux kernel
|
||||
linux-firmware
|
||||
amd-ucode # AMD CPU microcode updates loaded by the boot loader
|
||||
sudo # Run commands as root from the user account
|
||||
git # Version control and cloning dotfiles
|
||||
)
|
||||
|
||||
pacstrap -K /mnt "${base_packages[@]}"
|
||||
```
|
||||
|
||||
Generate `fstab`, then enter the installed system:
|
||||
|
||||
```sh
|
||||
genfstab -U /mnt >>/mnt/etc/fstab
|
||||
arch-chroot /mnt
|
||||
```
|
||||
|
||||
From inside the chroot, the scripted version of the remaining setup is:
|
||||
|
||||
```sh
|
||||
/path/to/dotfiles/arch-chroot-setup.sh
|
||||
```
|
||||
|
||||
The sections below show what the script does, following the same order as the Arch install guide: timezone, localization, boot loader, user, networking, packages, then reboot.
|
||||
|
||||
## 2. Configure timezone and localization
|
||||
|
||||
Set the timezone to Warsaw and sync the hardware clock:
|
||||
|
||||
```sh
|
||||
ln -sf /usr/share/zoneinfo/Europe/Warsaw /etc/localtime
|
||||
hwclock --systohc
|
||||
```
|
||||
|
||||
Enable English and Polish UTF-8 locales:
|
||||
|
||||
```sh
|
||||
sed -i 's/^#\(en_US.UTF-8 UTF-8\)/\1/' /etc/locale.gen
|
||||
sed -i 's/^#\(pl_PL.UTF-8 UTF-8\)/\1/' /etc/locale.gen
|
||||
locale-gen
|
||||
```
|
||||
|
||||
Use English as the system language:
|
||||
|
||||
```sh
|
||||
cat >/etc/locale.conf <<'EOF'
|
||||
LANG=en_US.UTF-8
|
||||
EOF
|
||||
```
|
||||
|
||||
Use a Polish console keymap:
|
||||
|
||||
```sh
|
||||
cat >/etc/vconsole.conf <<'EOF'
|
||||
KEYMAP=pl2
|
||||
EOF
|
||||
```
|
||||
|
||||
## 3. Configure systemd-boot
|
||||
|
||||
These commands run inside `arch-chroot /mnt`. They assume the EFI system partition is mounted at `/boot` inside the chroot.
|
||||
|
||||
Install systemd-boot:
|
||||
|
||||
```sh
|
||||
bootctl install
|
||||
```
|
||||
|
||||
Configure the loader menu. `timeout 0` makes boot faster by hiding the menu unless you hold the boot menu key.
|
||||
|
||||
```sh
|
||||
cat >/boot/loader/loader.conf <<'EOF'
|
||||
default arch.conf
|
||||
timeout 0
|
||||
console-mode max
|
||||
editor no
|
||||
EOF
|
||||
```
|
||||
|
||||
Find the root filesystem UUID:
|
||||
|
||||
```sh
|
||||
blkid
|
||||
```
|
||||
|
||||
Create the Arch boot entry. Replace `ROOT_UUID_HERE` with the UUID of the root partition, not the EFI partition.
|
||||
|
||||
```sh
|
||||
cat >/boot/loader/entries/arch.conf <<'EOF'
|
||||
title Arch Linux
|
||||
linux /vmlinuz-linux
|
||||
initrd /amd-ucode.img
|
||||
initrd /initramfs-linux.img
|
||||
options root=UUID=ROOT_UUID_HERE rw
|
||||
EOF
|
||||
```
|
||||
|
||||
Verify the boot loader configuration:
|
||||
|
||||
```sh
|
||||
bootctl status
|
||||
```
|
||||
|
||||
## 4. Create the user account
|
||||
|
||||
Create the normal user and add it to the `wheel` group so it can use `sudo`.
|
||||
|
||||
```sh
|
||||
useradd -m -s /bin/bash -G wheel,video,render kk
|
||||
passwd kk
|
||||
```
|
||||
|
||||
Enable `sudo` for the `wheel` group:
|
||||
|
||||
```sh
|
||||
EDITOR=vi visudo
|
||||
```
|
||||
|
||||
Uncomment this line:
|
||||
|
||||
```sudoers
|
||||
%wheel ALL=(ALL:ALL) ALL
|
||||
```
|
||||
|
||||
Notes:
|
||||
|
||||
- `-m` creates `/home/kk`.
|
||||
- `-s /bin/bash` sets Bash as the login shell.
|
||||
- `-G wheel,video,render` adds the user to `sudo` plus the groups often needed by Sway/GPU access.
|
||||
|
||||
## 5. Enable ethernet networking
|
||||
|
||||
Enable `systemd-networkd` and `systemd-resolved`:
|
||||
|
||||
```sh
|
||||
systemctl enable systemd-networkd.service
|
||||
systemctl enable systemd-resolved.service
|
||||
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
|
||||
```
|
||||
|
||||
Use the packaged ethernet DHCP example config:
|
||||
|
||||
```sh
|
||||
ln -s /usr/lib/systemd/network/89-ethernet.network.example /etc/systemd/network/89-ethernet.network
|
||||
```
|
||||
|
||||
This is enough for a normal wired connection using DHCP.
|
||||
|
||||
## 6. Install core tools
|
||||
|
||||
These are the day-to-day terminal and development tools.
|
||||
|
||||
```sh
|
||||
core_packages=(
|
||||
tmux # Terminal multiplexer
|
||||
kakoune # Text editor
|
||||
man-db # Manual page database
|
||||
man-pages # Linux and POSIX manual pages
|
||||
clang # C/C++ compiler toolchain
|
||||
make # Build automation tool
|
||||
tcc # Tiny C compiler
|
||||
ripgrep # Fast grep replacement, command: rg
|
||||
curl # Download URLs from the command line
|
||||
plocate # Fast file name search database
|
||||
fzf # Fuzzy finder for terminal scripts and navigation
|
||||
gdb # Debugger
|
||||
)
|
||||
|
||||
pacman -Syu --needed "${core_packages[@]}"
|
||||
```
|
||||
|
||||
Initialize the `plocate` database:
|
||||
|
||||
```sh
|
||||
updatedb
|
||||
```
|
||||
|
||||
## 7. Install networking and remote file tools
|
||||
|
||||
```sh
|
||||
network_packages=(
|
||||
openssh # SSH client/server tools
|
||||
sshfs # Mount remote machines over SSH
|
||||
)
|
||||
|
||||
pacman -S --needed "${network_packages[@]}"
|
||||
```
|
||||
|
||||
## 8. Install the Sway desktop
|
||||
|
||||
```sh
|
||||
desktop_packages=(
|
||||
sway # Wayland window manager
|
||||
swayidle # Idle actions like lock, suspend, hibernate
|
||||
swaybg # Wallpaper setter for Sway
|
||||
swaylock # Screen locker for Sway/Wayland
|
||||
foot # Wayland terminal emulator
|
||||
wmenu # Lightweight Wayland launcher/menu
|
||||
xorg-xwayland # Run X11 applications inside Wayland
|
||||
wl-clipboard # wl-copy and wl-paste clipboard tools
|
||||
xdg-desktop-portal-wlr # Portal backend for screen sharing and app integration
|
||||
xdg-user-dirs # Standard folders like Downloads, Documents, Pictures
|
||||
grim # Wayland screenshot tool
|
||||
)
|
||||
|
||||
pacman -S --needed "${desktop_packages[@]}"
|
||||
```
|
||||
|
||||
## 9. Install audio and media tools
|
||||
|
||||
```sh
|
||||
media_packages=(
|
||||
pipewire # Modern Linux audio/media server
|
||||
pipewire-pulse # PulseAudio compatibility for PipeWire
|
||||
pipewire-alsa # ALSA compatibility for PipeWire
|
||||
pipewire-jack # JACK compatibility for PipeWire
|
||||
wireplumber # PipeWire session and policy manager
|
||||
pavucontrol # Graphical volume mixer
|
||||
ffmpeg # Video/audio codecs and conversion tools
|
||||
imv # Image viewer
|
||||
mpv # Video/audio player
|
||||
)
|
||||
|
||||
pacman -S --needed "${media_packages[@]}"
|
||||
```
|
||||
|
||||
## 10. Install fonts
|
||||
|
||||
```sh
|
||||
font_packages=(
|
||||
ttf-fira-code # Monospace programming font with ligatures
|
||||
noto-fonts # Broad Unicode font coverage
|
||||
noto-fonts-cjk # Chinese, Japanese, and Korean font coverage
|
||||
noto-fonts-emoji # Emoji font support
|
||||
noto-fonts-extra # Extra Noto font families
|
||||
ttf-liberation # Microsoft-compatible replacement fonts
|
||||
ttf-dejavu # General purpose readable fonts
|
||||
ttf-roboto # Roboto font family
|
||||
)
|
||||
|
||||
pacman -S --needed "${font_packages[@]}"
|
||||
```
|
||||
|
||||
## 11. Install browser and extra tools
|
||||
|
||||
```sh
|
||||
app_packages=(
|
||||
firefox # Web browser
|
||||
)
|
||||
|
||||
pacman -S --needed "${app_packages[@]}"
|
||||
```
|
||||
|
||||
Install `opencode` separately if it is available from an AUR helper or a custom repository on the installed system.
|
||||
|
||||
## 12. Install NVIDIA driver
|
||||
|
||||
Install the open NVIDIA kernel driver for the PC graphics card:
|
||||
|
||||
```sh
|
||||
pacman -S --needed nvidia-open
|
||||
```
|
||||
|
||||
Reboot after leaving the chroot so the driver is loaded on the first real boot.
|
||||
|
||||
## 13. Reboot into the installed system
|
||||
|
||||
Exit the chroot, unmount everything, and reboot:
|
||||
|
||||
```sh
|
||||
exit
|
||||
umount -R /mnt
|
||||
reboot
|
||||
```
|
||||
|
||||
Log in as `kk` after rebooting.
|
||||
|
||||
## 14. First login tasks
|
||||
|
||||
Create standard user directories:
|
||||
|
||||
```sh
|
||||
xdg-user-dirs-update
|
||||
```
|
||||
|
||||
Enable the PipeWire user services:
|
||||
|
||||
```sh
|
||||
systemctl --user enable --now pipewire pipewire-pulse wireplumber
|
||||
```
|
||||
|
||||
Generate a local SSH key for this machine:
|
||||
|
||||
```sh
|
||||
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
|
||||
```
|
||||
143
new.md
143
new.md
@@ -1,143 +0,0 @@
|
||||
# Packages
|
||||
|
||||
## Base install
|
||||
|
||||
Install these with `pacstrap` while installing Arch:
|
||||
|
||||
```sh
|
||||
base_packages=(
|
||||
base # Minimal Arch system
|
||||
linux # Linux kernel
|
||||
sudo # Run commands as root from the user account
|
||||
iwd # Wi-Fi management during and after install
|
||||
git # Version control and cloning dotfiles
|
||||
)
|
||||
|
||||
pacstrap /mnt "${base_packages[@]}"
|
||||
```
|
||||
|
||||
## Core tools
|
||||
|
||||
Install after booting into the new system:
|
||||
|
||||
```sh
|
||||
core_packages=(
|
||||
tmux # Terminal multiplexer
|
||||
kakoune # Text editor
|
||||
man-db # Manual page database
|
||||
man-pages # Linux and POSIX manual pages
|
||||
clang # C/C++ compiler toolchain
|
||||
make # Build automation tool
|
||||
tcc # Tiny C compiler
|
||||
ripgrep # Fast grep replacement, command: rg
|
||||
curl # Download URLs from the command line
|
||||
plocate # Fast file name search database
|
||||
fzf # Fuzzy finder for terminal scripts and navigation
|
||||
gdb # Debugger
|
||||
)
|
||||
|
||||
sudo pacman -S --needed "${core_packages[@]}"
|
||||
```
|
||||
|
||||
## Networking and remote files
|
||||
|
||||
```sh
|
||||
network_packages=(
|
||||
openssh # SSH client/server tools
|
||||
sshfs # Mount remote machines over SSH
|
||||
)
|
||||
|
||||
sudo pacman -S --needed "${network_packages[@]}"
|
||||
```
|
||||
|
||||
## Desktop: Sway / Wayland
|
||||
|
||||
```sh
|
||||
desktop_packages=(
|
||||
sway # Wayland window manager
|
||||
swayidle # Idle actions like lock, suspend, hibernate
|
||||
swaybg # Wallpaper setter for Sway
|
||||
swaylock # Screen locker for Sway/Wayland
|
||||
foot # Wayland terminal emulator
|
||||
wmenu # Lightweight Wayland launcher/menu
|
||||
xorg-xwayland # Run X11 applications inside Wayland
|
||||
wl-clipboard # wl-copy and wl-paste clipboard tools
|
||||
xdg-desktop-portal-wlr # Portal backend for screen sharing and app integration
|
||||
xdg-user-dirs # Standard folders like Downloads, Documents, Pictures
|
||||
grim # Wayland screenshot tool
|
||||
)
|
||||
|
||||
sudo pacman -S --needed "${desktop_packages[@]}"
|
||||
```
|
||||
|
||||
## Audio and media
|
||||
|
||||
```sh
|
||||
media_packages=(
|
||||
pipewire # Modern Linux audio/media server
|
||||
pipewire-pulse # PulseAudio compatibility for PipeWire
|
||||
pipewire-alsa # ALSA compatibility for PipeWire
|
||||
pipewire-jack # JACK compatibility for PipeWire
|
||||
wireplumber # PipeWire session and policy manager
|
||||
pavucontrol # Graphical volume mixer
|
||||
ffmpeg # Video/audio codecs and conversion tools
|
||||
imv # Image viewer
|
||||
mpv # Video/audio player
|
||||
)
|
||||
|
||||
sudo pacman -S --needed "${media_packages[@]}"
|
||||
```
|
||||
|
||||
## Fonts
|
||||
|
||||
```sh
|
||||
font_packages=(
|
||||
ttf-fira-code # Monospace programming font with ligatures
|
||||
noto-fonts # Broad Unicode font coverage
|
||||
noto-fonts-cjk # Chinese, Japanese, and Korean font coverage
|
||||
noto-fonts-emoji # Emoji font support
|
||||
noto-fonts-extra # Extra Noto font families
|
||||
ttf-liberation # Microsoft-compatible replacement fonts
|
||||
ttf-dejavu # General purpose readable fonts
|
||||
ttf-roboto # Roboto font family
|
||||
)
|
||||
|
||||
sudo pacman -S --needed "${font_packages[@]}"
|
||||
```
|
||||
|
||||
## Browser and extra tools
|
||||
|
||||
```sh
|
||||
app_packages=(
|
||||
firefox # Web browser
|
||||
opencode # AI coding agent; may require AUR or a custom repository
|
||||
)
|
||||
|
||||
sudo pacman -S --needed "${app_packages[@]}"
|
||||
```
|
||||
|
||||
# Setting up the boot loader with systemd-boot
|
||||
1. Setting up bootloader with systemd (EFI, mounted at /boot)
|
||||
1.1. sudo bootctl install
|
||||
1.2. copy over the loader.conf to /boot/loader/loader.conf and modify (set timeout to 0 because faster)
|
||||
1.3. find partition ID using blkid
|
||||
1.4. create arch boot entry with that UUID /boot/loader/entries/arch.conf
|
||||
|
||||
# Setup user
|
||||
1. useradd -s /bin/bash -m -G wheel kk
|
||||
1.1. `m` - means create directory
|
||||
1.2. `-G wheel` - means add to sudo group so that sudo works when using the user
|
||||
2. passwd kk
|
||||
|
||||
# Enabling internet
|
||||
1. enable and start systemd-networkd
|
||||
1.1. for ethernet: copy over the ethernet configuration file from default configs
|
||||
1.2. for wifi: need to install iwd first in pacstrap, I think copy over the config and setup the connection using iwd
|
||||
|
||||
# Nvidia drivers
|
||||
1. pacman -Syu nvidia-open
|
||||
1.1. For my PC graphics card
|
||||
|
||||
|
||||
sudo usermod -aG video,render
|
||||
ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519
|
||||
Reference in New Issue
Block a user