Skip to main content

Arch Linux

Install

BIOS

Disable BIOS secure boot.

timedatectl set-ntp true
reflector -a 12 -c cn -f 10 —sort score —v —save /etc/pacman.d/mirrorlist
pacman-key —init
pacman -Sy archinstall
archinstall
  1. Mirrors: China + multilib.
  2. Disk: 1GB fat32 /boot, 16GB linux-swap, compress=zstd btrfs with @ sub-volume mount / and @home sub-volume mount /home, enable snapper.
  3. Swap: disable zram.
  4. Bootloader: GRUB.
  5. Hostname: station.
  6. Authentication: Root and user.
  7. Profile: Niri.
  8. Applications: Bluetooth, audio, print, power.
  9. Network: Network Manager (iwd).
  10. Timezone: Asia/Shanghai.
TTY Guide

Browse Arch Wiki and official installation guide in TTY:

pacman -S lynx arch-wiki-docs arch-wiki-lite
less /usr/share/aif/docs/official_installation_guide_en
lynx /usr/share/doc/arch-wiki/html/index.html

Setup

sudo pacman -S firefox
sudo sed -i '/^#\[multilib\]/{N;s/^#//gm}' /etc/pacman.conf
sudo sed -i 's/^#Color/Color/' /etc/pacman.conf
sudo sed -i 's/^#VerbosePkgLists/VerbosePkgLists/' /etc/pacman.conf

cat << EOF | sudo tee -a /etc/pacman.conf
[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/\$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/\$arch
Server = https://mirrors.sjtug.sjtu.edu.cn/archlinux-cn/\$arch
Server = https://mirrors.aliyun.com/archlinuxcn/\$arch
EOF
sudo systemctl enable --now NetworkManager
sudo pacman -Sy archlinuxcn-keyring
sudo pacman -S --needed base-devel btrfs-progs os-prober \
linux-headers linux-lts linux-lts-headers \
git neovim paru clash-verge-rev
echo "EDITOR=nvim" | sudo tee -a /etc/environment
sudo sed -i 's/^Devel$/# Devel/' /etc/paru.conf
Polkit

Use polkit-gnome to enable clash-verge-rev tun mode:

sudo pacman -S polkit-gnome
/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & disown

Desktop

curl -fsSL https://install.danklinux.com | sh
paru -S greetd-dms-greeter-git qt6ct-kde
dms greeter enable
dms greeter sync
Qt

After Qt updates, rebuild AUR packages:

paru -S --rebuild qt6ct-kde

Pacman

sudo pacman -S --needed snapper snap-pac grub-btrfs inotify-tools \
pacman-contrib man-db man-pages man-pages-zh_cn tldr less \
noto-fonts noto-fonts-cjk noto-fonts-emoji ttf-jetbrains-mono-nerd ttf-firacode-nerd \
ttf-maplemono-nf-cn-unhinted ttf-lxgw-wenkai ttf-lxgw-wenkai-mono \
adobe-source-han-sans-cn-fonts adobe-source-han-serif-cn-fonts wqy-zenhei \
fcitx5-im fcitx5-chinese-addons fcitx5-rime rime-ice-pinyin-git \
zoxide bat eza fd ripgrep fzf television jq fx \
procs duf dust gdu bottom nvtop s-tui fastfetch \
gping curlie wget ddgr doggo net-tools speedtest-cli rsync rclone \
git-delta lazygit tmux zsh starship chezmoi \
nodejs npm pnpm bun python uv rustup go luarocks mise \
tree-sitter-cli github-cli openai-codex gemini-cli opencode \
bluez bluez-utils pipewire-pulse pipewire-alsa pipewire-jack \
fprintd fwupd i2c-tools power-profiles-daemon speech-dispatcher \
xdg-desktop-portal xdg-desktop-portal-gnome gnome-keyring libsecret \
nautilus-python file-roller gvfs-smb ffmpegthumbnailer \
yazi 7zip unzip trash-cli \
grim slurp satty wl-clipboard \
poppler poppler-glib python-pylatexenc \
imagemagick imv chafa kimageformats resvg \
ffmpeg mpv cava yt-dlp \
lib32-nvidia-utils lib32-mesa lib32-vulkan-radeon vulkan-headers mesa-utils \
papirus-icon-theme firefox firefox-i18n-zh-cn steam
sudo pacman -Rns polkit-gnome lightdm lightdm-gtk-greeter alacritty fuzzel mako waybar swaybg swayidle swaylock

Sync

# Search
pacman -Ss <keyword>
# Information
pacman -Si <package-name>
# Needed only
sudo pacman -S --needed <package-list>
Partial Upgrade

DO NOT use pacman -Sy <package-name>. Partial upgrade are unsupported.

Query

# Information
pacman -Qi <package-name>
# Contents
pacman -Ql <package-name> | grep '/usr/bin/'
# Installed
pacman -Qq | wc -l
# Upgradable (`checkupdates`)
pacman -Qu
# Orphans
pacman -Qdtq
# Owns
pacman -Qo /usr/lib/bluetooth/bluetoothd # -> bluez

Remove

# Package
sudo pacman -Rns <package-name>
# Orphans
sudo pacman -Rns $(pacman -Qdtq)
# Cache
sudo pacman -Sc # 清理未安装包的缓存
sudo pacman -Scc # 清理全部缓存
sudo paccache -ruk0 # 清理未安装包的缓存
sudo paccache -rk0 # 清理全部缓存

AUR

paru -S --needed chsrc-bin shellcheck-bin libtexprintf \
visual-studio-code-bin claude-code \
cc-switch-bin cli-proxy-api-bin models-bin \
go-musicfox-bin uudeck linuxqq wechat \
wps-office-cn wps-office-mui-zh-cn wps-office-fonts ttf-wps-fonts

Helpers

Rolling updates:

# sudo pacman -Syu
paru

Clean up packages:

# sudo pacman -Rns $(pacman -Qtdq)
paru -c

Show diagnostics and statistics:

paru -Qm
paru -Ps

Install, remove, and browse packages with fzf.

Repository

  • PKGBUILDAUR 仓库 单独维护
  • -git 包的 pkgver()makepkg 自动执行, 格式: 0.2.0.r1.g783b971 (tag.revision.commit)
  • -git 包的更新频率由维护者控制, 确保代码可用后才推送 pkgver 更新
# Target
paru -Syu quickshell-git
# Ignore
paru -Syu --ignore quickshell-git
# Latest commit
paru -Syu --devel
# Force rebuild
paru -S --rebuild quickshell-git
# Manual
git clone https://aur.archlinux.org/quickshell-git.git
cd quickshell-git && makepkg -si
Devel

paru 在 /etc/paru.conf 默认开启 --devel 选项: 运行 sudo sed -i 's/^Devel$/# Devel/' /etc/paru.conf 进行关闭.

GRUB

sudo sed -i "/GRUB_CMDLINE_LINUX=/s/\"$/ panic=10\"/" /etc/default/grub
sudo sed -i 's/^#GRUB_DISABLE_OS_PROBER=false/GRUB_DISABLE_OS_PROBER=false/' /etc/default/grub
echo 'GRUB_TOP_LEVEL="/boot/vmlinuz-linux"' | sudo tee -a /etc/default/grub
git clone --depth=1 https://github.com/vinceliuice/grub2-themes \
&& cd grub2-themes && sudo ./install.sh -b -t tela -s 2k && cd .. && rm -rf grub2-themes
sudo grub-mkconfig -o /boot/grub/grub.cfg

Snapshot

sudo systemctl status grub-btrfsd
sudo snapper list-configs
sudo systemctl enable --now grub-btrfsd
reboot
sudo snapper -c root create-config /
sudo snapper -c home create-config /home
sudo snapper -c root create -d "Initial root snapshot"
sudo snapper -c home create -d "Initial home snapshot"
sudo systemctl enable --now snapper-cleanup.timer
sudo grub-mkconfig -o /boot/grub/grub.cfg

Keyring

echo -e "auth       optional     pam_gnome_keyring.so\nsession    optional     pam_gnome_keyring.so    auto_start" | sudo tee -a /etc/pam.d/login
echo -e "auth optional pam_gnome_keyring.so\nsession optional pam_gnome_keyring.so auto_start" | sudo tee -a /etc/pam.d/greetd

Locale

sudo sed -i '/zh_CN\.UTF-8 UTF-8/s/^#\s*//' /etc/locale.gen
sudo locale-gen
sudo localectl set-locale LANG=zh_CN.UTF-8
LC_ALL=C.UTF-8 xdg-user-dirs-update --force
cat ~/.config/user-dirs.dirs

Dotfiles

chezmoi init sabertazimi
chezmoi diff
chezmoi apply -v

Zsh

chsh -s $(which zsh)
exec zsh -l

Development

Modern Linux toolchain:

chsrc set node
rustup default stable
tv update-channels

Git

Complete setup in git config guide.

GitHub

Complete setup in GPG config guide.

Claude Code

Complete setup in Claude Code guide.

OneDrive

rclone config

Steam

Appearance (设置 -> 界面) 中文 + 24小时制 + 开机自启:

sed -i 's|^Exec=/usr/bin/steam %U$|Exec=/usr/bin/steam -silent %U|' ~/.config/autostart/steam.desktop
rm ~/Desktop/steam.desktop

WeChat

Add DLAGENTS=("https::/usr/bin/curl -A 'apt' -fLC - --retry 3 --retry-delay 3 -o %o %u") to deepin-wine8-stable.PKGBUILD:

paru -S --fm nvim com.qq.weixin.work.deepin

WPS

修复中文输入法:

sudo sed -i '1a export GTK_IM_MODULE=fcitx\nexport QT_IM_MODULE=fcitx5\nexport XMODIFIERS=@im=fcitx' /usr/bin/wps

Wallpapers

chezmoi cd
bash wallpapers/third-party.sh
exit

Settings

  • 头像.
  • 配色: 应用 Qt 配色应用 GTK 配色.
  • 天气.

Virtualization

sudo pacman -S qemu-full virt-manager dnsmasq swtpm
sudo usermod -aG libvirt $USER
sudo systemctl enable --now libvirtd.service

Microsoft Fonts

Delete _loopDev related lines (10 + 4 lines), add 7z e -aoa "${_isoFile}" path-with-prefix, and update 7z e -aoa "path-without-prefix" \ to all PKGBUILD:

paru -S --fm nvim ttf-ms-win11-auto ttf-ms-win11-auto-zh_cn ttf-ms-win11-fod-auto-hans

References