Compare commits

...

3 Commits

Author SHA1 Message Date
KK
d274b952b1 generate auto install arch script and readme 2026-06-22 17:12:44 +02:00
KK
f8424776ae New arch setup 2026-06-22 16:34:30 +02:00
KK
4969692f93 New arch setup 2026-06-22 16:34:08 +02:00
9 changed files with 467 additions and 21 deletions

View File

@@ -3,3 +3,4 @@ alias vi='kak'
alias df='/usr/bin/git --git-dir=$HOME/.dotfilesrepo/ --work-tree=$HOME'
alias unpack='dtrx'
alias imv='imv-wayland'
alias sway='sway --unsupported-gpu'

View File

@@ -1,5 +1,5 @@
[main]
font=JetBrains Mono:size=14
font=JetBrains Mono:size=10
[bell]
urgent=no

View File

@@ -247,7 +247,7 @@ bindsym $mod+r mode "resize"
# Read `man j sway-bar` for more information about this section.
bar {
position top
font pango:JetBrains Mono $fontsize
font pango:Fira Code $fontsize
# Show volume, brightness, and date/time.
status_command ~/.config/sway/status.sh

View File

@@ -1,8 +1,8 @@
# ~/.config/tmux/tmux.conf
# Enable extended key reporting for terminals/apps that support it.
set -g extended-keys on
set -g extended-keys-format csi-u
# set -g extended-keys on
# set -g extended-keys-format csi-u
# Index windows/tabs and panes from 1 instead of 0.
set -g base-index 1

View File

@@ -8,9 +8,9 @@
# for ssh logins, install and configure the libpam-umask package.
#umask 022
export EDITOR=vim
export VISUAL=vim
export BROWSER=chromium
export EDITOR=kak
export VISUAL=kak
export BROWSER=firefox
export TERMINAL=foot
# if running bash
@@ -32,7 +32,6 @@ if [ -d "$HOME/.local/bin" ] ; then
fi
if [ -z "$WAYLAND_DISPLAY" ] && [ "$XDG_VTNR" = 1 ]; then
export WLR_NO_HARDWARE_CURSORS=1
exec sway --unsupported-gpu
fi

150
arch-chroot-setup.sh Executable file
View 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
View 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
```

View File

@@ -6,8 +6,8 @@ Install guide with DIY spirit, key is to reproduce my system setup while making
## Current TODOs
- [ ] systemd-boot
- [ ] systemd-network + iwd
- [x] systemd-boot
- [x] systemd-network + iwd
### System / mounts
@@ -185,6 +185,7 @@ sudo apt install -y \
pipewire \
pipewire-pulse \
pipewire-alsa \
pipewire-jack \
wireplumber \
pavucontrol \
grim \

View File

@@ -1,4 +1,4 @@
SRC=$HOME/.dotfilesrepo
SRC=$HOME/dotfiles
rm $HOME/.bashrc
rm $HOME/.profile
ln -sf $SRC/.bashrc $HOME/.bashrc
@@ -7,13 +7,3 @@ ln -sf $SRC/.profile $HOME/.profile
ln -sf $SRC/.config $HOME/.config
ln -sf $SRC/bin $HOME/bin
# Install kakoune
wget https://github.com/mawww/kakoune/releases/download/v2026.05.21/kakoune-v2026.05.21-linux.tar.bz2
unpack kakoune-v2026.05.21-linux.tar.bz2
cd kakoune-v2026.05.21-linux
sudo cp -r bin/* /usr/local/bin/
sudo cp -r libexec/* /usr/local/libexec/
sudo cp -r share/* /usr/local/share/
cd ..
rm kakoune-v2026.05.21-linux -rf
rm kakoune-v2026.05.21-linux.tar.bz2