From d274b952b13e15ed11f0a57d7eeea9e76d22b408 Mon Sep 17 00:00:00 2001 From: KK Date: Mon, 22 Jun 2026 17:12:44 +0200 Subject: [PATCH] generate auto install arch script and readme --- arch-chroot-setup.sh | 150 ++++++++++++++ arch-install.md | 305 +++++++++++++++++++++++++++++ new.md | 143 -------------- README.md => old-debian-install.md | 0 4 files changed, 455 insertions(+), 143 deletions(-) create mode 100755 arch-chroot-setup.sh create mode 100644 arch-install.md delete mode 100644 new.md rename README.md => old-debian-install.md (100%) diff --git a/arch-chroot-setup.sh b/arch-chroot-setup.sh new file mode 100755 index 0000000..f80322d --- /dev/null +++ b/arch-chroot-setup.sh @@ -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 </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' diff --git a/arch-install.md b/arch-install.md new file mode 100644 index 0000000..d02efa3 --- /dev/null +++ b/arch-install.md @@ -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 +``` diff --git a/new.md b/new.md deleted file mode 100644 index 0e5bd1e..0000000 --- a/new.md +++ /dev/null @@ -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 diff --git a/README.md b/old-debian-install.md similarity index 100% rename from README.md rename to old-debian-install.md