I have always enjoyed working with Linux and customizing my development environment.
However, configuring a Linux system often involves making hardware-specific decisions, installing the correct packages, and understanding how different components interact.
This inspired me to build ArchPilot, a Python-based command-line tool that analyzes hardware and generates recommendations for an Arch Linux environment.
The project has also become an opportunity to explore software architecture, testability, and safe automation.
The Idea Behind ArchPilot
Arch Linux offers extensive customization, but configuring a system can require considerable manual research.
Different hardware configurations may require different graphics drivers, services, and software packages.
I wanted to experiment with automating part of this decision-making process.
ArchPilot analyzes a machine’s hardware and combines that information with a selected usage profile to generate a configuration plan.
The current version supports three profiles: gaming, development, and everyday use.
Separating Responsibilities
One of my main design goals was to avoid putting all the logic into a single large script.
Instead, I separated the application into several components.
Detector: Collects information about the machine, including CPU, GPU, memory, storage devices, and firmware environment.
Recommender: Uses the detected information and selected usage profile to determine appropriate packages and configuration recommendations.
Planner: Converts those recommendations into an inspectable installation plan.
This separation makes the application easier to understand, test, and extend.
I also introduced an abstraction for executing Linux commands, allowing system interaction to remain separate from the application’s decision-making logic.
Why Safety Matters
Operating-system automation carries risks that ordinary applications may not.
An incorrectly executed disk operation could permanently destroy user data.
For that reason, ArchPilot v0.1 deliberately focuses on analysis and planning rather than performing actual installations.
It can generate plans, including JSON output, without formatting disks, deleting partitions, or modifying the operating system.
When hardware information is insufficient to make a reliable recommendation, the application can report a warning instead of guessing.
This approach reflects an important design principle: automation should not perform destructive actions without appropriate safeguards.
Testing and Maintainability
I added unit tests using pytest and static analysis with Ruff.
GitHub Actions runs these checks automatically, helping detect problems during development.
The tests cover hardware classification, recommendations, usage profiles, and safety constraints.
Working on ArchPilot has helped me appreciate the value of separating system-dependent code from pure application logic.
What’s Next?
Future improvements could include testing with QEMU, more advanced hardware compatibility checks, and additional installation planning features.
However, I want to preserve the project’s emphasis on predictable behavior and safety.
ArchPilot has taught me that good automation is not simply about reducing manual work.
It is about making complex operations more understandable, testable, and reliable.