New SourceOs variants: Android, IpadOs — routed to android-to-* and
ipad-to-* pattern files respectively. Pattern bodies assume zero terminal
experience; every command explained from first principles with App Store /
iOS analogies.
Dual-boot supplement system: PatternFile::extend() + load_supplement()
in patterns.rs; lib.rs loads dualboot-{windows,macos}.toml on top of the
primary pattern file when migration.dual_boot_with is set. Supplement
covers NTFS dirty flag from Fast Startup, clock skew (RTC local vs UTC),
GRUB overwrite by Windows Update, BitLocker, APFS/HFS+ access, T2 Secure
Boot.
complete_onboarding() now accepts dual_boot_with: Option<String> and
normalises it to "windows"/"macos". Onboarding.vue becomes a 3-step flow:
source OS -> (Linux distro if linux) -> (dual-boot if windows/macos).
Mobile users skip the dual-boot step entirely.
10 new pattern files (8 mobile + 2 supplements), config.rs tests updated.
136 lines
7.9 KiB
TOML
136 lines
7.9 KiB
TOML
[meta]
|
|
source_os = "android"
|
|
target_distro_family = "arch"
|
|
|
|
# Android user on their first Arch/CachyOS install.
|
|
# Assumes NO terminal experience (unless they used Termux).
|
|
# Every explanation starts from first principles.
|
|
# App Store analogy: pacman/AUR = Google Play + sideloading.
|
|
|
|
[log_paths]
|
|
steam = "~/.local/share/Steam/logs/content_log.txt"
|
|
proton = "~/.local/share/Steam/logs/proton_log.txt"
|
|
|
|
# ── Package management ────────────────────────────────────────────────────────
|
|
|
|
[[patterns]]
|
|
id = "pacman-db-lock"
|
|
sources = ["journald", "applog:pacman"]
|
|
match_text = "could not lock database: File exists"
|
|
severity = "warn"
|
|
title = "App installer is busy"
|
|
body = "The package manager (Linux's equivalent of the Play Store) got interrupted and left a lock file. A lock file is a signal to other processes that says 'I'm running, don't start.' If nothing is installing right now, remove it: open a terminal, type exactly: sudo rm /var/lib/pacman/db.lck — then press Enter and try again. 'sudo' means 'run this as administrator.'"
|
|
|
|
[[patterns]]
|
|
id = "partial-upgrade-warning"
|
|
sources = ["applog:pacman"]
|
|
match_text = "warning: database file for"
|
|
severity = "info"
|
|
title = "App list is out of date — update everything"
|
|
body = "On Android, updates happen automatically. On Arch Linux, you need to run updates manually — and there's an important rule: always update ALL apps at the same time, never just the list. In a terminal, type: sudo pacman -Syu — then press Enter. Enter your password when asked. The -Syu means 'sync the list AND upgrade everything.'"
|
|
|
|
[[patterns]]
|
|
id = "pacman-dep-conflict"
|
|
sources = ["journald", "applog:pacman"]
|
|
match_text = "conflicting dependencies"
|
|
severity = "warn"
|
|
title = "Two apps conflict with each other"
|
|
body = "Two packages need something that can't be shared — like two apps that both want to be the default music player. Read the message carefully. Usually one package replaces another. Remove the old one first: sudo pacman -R <old-package-name> — then try your install again."
|
|
|
|
[[patterns]]
|
|
id = "aur-build-failure"
|
|
sources = ["journald", "applog:pacman"]
|
|
match_text = "error: failed to build"
|
|
severity = "warn"
|
|
title = "App build failed (AUR)"
|
|
body = "The AUR is like sideloading apps on Android — you're installing from source code that gets compiled on your machine, not a pre-built app. The build failed, usually because of a missing tool or broken code. Look at the error text above this message for the specific reason. The AUR package's comments page on aur.archlinux.org often has fixes."
|
|
|
|
# ── Terminal basics ───────────────────────────────────────────────────────────
|
|
|
|
[[patterns]]
|
|
id = "command-not-found"
|
|
sources = ["journald"]
|
|
match_text = "command not found"
|
|
severity = "info"
|
|
title = "Command not found — app may not be installed"
|
|
body = "You tried to run a program that isn't installed. On Android, apps are visible in the drawer; on Linux, they're invisible until you ask for them. To find and install the missing program, try: sudo pacman -Ss <name> — this searches for it. Then install with: sudo pacman -S <name>."
|
|
|
|
[[patterns]]
|
|
id = "permission-denied"
|
|
sources = ["journald"]
|
|
match_text = "Permission denied"
|
|
severity = "info"
|
|
title = "Permission denied"
|
|
body = "Linux has a permission system where files and folders are owned by specific users. This is more visible here than on Android. If you need admin access for a command, put 'sudo' before it — like: sudo <command>. For files you own but can't access, check ownership with: ls -la /path/to/file"
|
|
|
|
# ── System ────────────────────────────────────────────────────────────────────
|
|
|
|
[[patterns]]
|
|
id = "kernel-driver-firmware"
|
|
sources = ["kmsg"]
|
|
match_text = "firmware: failed to load"
|
|
severity = "warn"
|
|
title = "Hardware driver file missing"
|
|
body = "On Android, drivers come pre-installed and invisible. On Linux, some hardware needs a separate firmware file — like a plugin for your Wi-Fi chip or graphics card. Install the main firmware package: sudo pacman -S linux-firmware — then restart. If a specific device still doesn't work, the error message above will name which firmware file is missing."
|
|
|
|
[[patterns]]
|
|
id = "oom-killer"
|
|
sources = ["kmsg"]
|
|
match_text = "Out of memory: Kill process"
|
|
severity = "warn"
|
|
title = "System ran out of memory — closed an app"
|
|
body = "Linux ran out of RAM and had to close a program, similar to Android killing background apps. If this keeps happening, close programs you're not using, or add 'swap' (disk space used as overflow RAM): sudo pacman -S zram-generator"
|
|
|
|
[[patterns]]
|
|
id = "disk-io-error"
|
|
sources = ["kmsg"]
|
|
match_text = "Buffer I/O error on device"
|
|
severity = "warn"
|
|
title = "Storage error"
|
|
body = "Something went wrong reading or writing to the drive. This could be a hardware problem. Check drive health: sudo smartctl -a /dev/sda — first install the tool: sudo pacman -S smartmontools"
|
|
|
|
# ── Audio ─────────────────────────────────────────────────────────────────────
|
|
|
|
[[patterns]]
|
|
id = "pipewire-connect-fail"
|
|
sources = ["journald"]
|
|
match_text = "Failed to connect to PipeWire"
|
|
severity = "warn"
|
|
title = "Sound system not responding"
|
|
body = "PipeWire is the audio manager — like the sound settings system inside Android. Restart it: open a terminal and type: systemctl --user restart pipewire pipewire-pulse wireplumber — if sound still doesn't work, log out and log back in."
|
|
|
|
[[patterns]]
|
|
id = "bluetooth-rfkill-blocked"
|
|
sources = ["journald"]
|
|
match_text = "Blocked through rfkill"
|
|
severity = "warn"
|
|
title = "Bluetooth blocked by software switch"
|
|
body = "A software setting is blocking Bluetooth — like Airplane Mode on your phone. Run: rfkill unblock bluetooth — in a terminal. If it shows 'Hard blocked', there's a physical switch or BIOS setting to check."
|
|
|
|
[[patterns]]
|
|
id = "bluetooth-profile-unavailable"
|
|
sources = ["journald"]
|
|
match_text = "br-connection-profile-unavailable"
|
|
severity = "info"
|
|
title = "Bluetooth audio profile missing"
|
|
body = "Your Bluetooth device connected but the right audio mode isn't available. Install: sudo pacman -S pipewire-bluetooth — then restart Bluetooth: sudo systemctl restart bluetooth"
|
|
|
|
# ── Network ───────────────────────────────────────────────────────────────────
|
|
|
|
[[patterns]]
|
|
id = "networkmanager-activation-fail"
|
|
sources = ["journald"]
|
|
match_text = "Activation failed"
|
|
severity = "info"
|
|
title = "Wi-Fi connection failed"
|
|
body = "Linux couldn't connect to the network. Common causes: wrong password, or the Wi-Fi driver isn't loaded. Check connection status: nmcli device status — if the Wi-Fi adapter doesn't appear, the driver may need to be installed."
|
|
|
|
# ── GPU ───────────────────────────────────────────────────────────────────────
|
|
|
|
[[patterns]]
|
|
id = "gpu-hang"
|
|
sources = ["kmsg"]
|
|
match_text = "GPU HANG"
|
|
severity = "warn"
|
|
title = "Graphics card stopped responding"
|
|
body = "The graphics card froze and the driver recovered it — like a forced restart of the GPU. Games or video apps may have crashed. If this keeps happening, check that your graphics drivers are current: sudo pacman -Syu"
|