What Is EMInstaller?
EMInstaller is a comprehensive Bash script designed to streamline Arch Linux installation. It:
- Prepares your system environment
- Installs required dependencies
- Downloads the main installer payload
- Launches the installer safely
Intended for execution on Arch Linux (or compatible systems).
Quick Install
The standard installation method is a single command:
curl -s https://imemix.github.io/install | sudo bash
This will:
- Download the installer
- Execute installation steps automatically
Main Installer
The payload downloaded by the quick‑install command is a small
wrapper script named install which in turn fetches and
executes eminstaller.py. You can run either file
directly if you’ve saved them locally.
Basic usage
sudo bash install # run the shell wrapper
sudo python3 eminstaller.py [OPTIONS] # run the Python installer directly
Common options
--config <path>– specify a YAML configuration file.--dry-run– show what would be done without making any changes.--offline– skip network downloads; requires the installer files be present locally.--skip-validation– bypass internal sanity checks (use with caution).
The wrapper script accepts the same arguments and simply forwards
them to the Python payload. Environment variables such as
INSTALLER_DEBUG and INSTALLER_URL affect
both layers.
For a full list of flags run:
sudo python3 eminstaller.py --help
This section is intended to give users an overview of the “main installer”; the detailed behaviour and additional options are documented in the Python source itself.
Recommended Safe Method
For security-sensitive environments, manually inspect the script before execution:
Step 1: Download the file
curl -O https://imemix.github.io/install
Step 2: Inspect the script
less install
Step 3: Execute if satisfied
sudo bash install
This method ensures you review the script before execution, providing better security.
What the Script Does
EMInstaller follows security best practices by using strict mode:
set -euo pipefail
This enables:
- -e: Exit immediately if any command fails
- -u: Prevent undefined variables from being used silently
- -o pipefail: Fail if any command in a pipeline fails
Detailed Installation Flow
- Privilege Check: Verifies the script is running with root privileges (required for system package installation)
- Dependency Installation: Installs required system packages like curl, bash, and Python
- Environment Setup: Configures necessary environment variables and paths
- Main Installer Download: Fetches the latest installer payload using curl
- Execution: Launches the installer with Python, passing all necessary arguments
- Cleanup: Removes temporary files and provides status feedback
Error Handling
If any step fails, the script will:
- Stop execution immediately
- Display the error message for troubleshooting
- Exit with a non-zero status code
- Prevent partial or incomplete installations
Requirements
EMInstaller requires the following on your system:
Operating System
- Arch Linux or compatible distributions (Manjaro, EndeavourOS, etc.)
- Systems with pacman package manager support
Required Tools
curl- for downloading files from the internetbash- shell environment (usually pre-installed)python3- Python 3 interpreter for running the main installersudo- required for root privilege escalation
System Requirements
- Minimum 2GB RAM recommended
- Root or sudo access required
- Network connectivity for downloads
- At least 5GB free disk space
Install missing dependencies with:
sudo pacman -Sy curl python base-devel
The -Sy flag refreshes the package database before installation.
Testing the Script Locally
If you have the installer script file locally:
Step 1: Make it executable
chmod +x install
Step 2: Run the installer
sudo ./install
Updating the Installer
When a new version is released, simply re-run the installation command:
curl -s https://imemix.github.io/install | sudo bash
The script automatically pulls the latest version unless version pinning is configured.
Security Best Practices
When using remote install scripts, follow these guidelines:
- ✅ Always use HTTPS for downloads
- ✅ Manually inspect scripts in production environments
- ✅ Verify checksums before execution
- ✅ Avoid running unknown scripts as root
- ✅ Audit scripts before distributing to others
❌ Never run untrusted scripts:
curl http://untrusted-source.com/install | bash
Advanced Usage
Environment Variables
Control installer behavior with environment variables:
INSTALLER_URL="https://custom.source/installer" sudo bash install
INSTALLER_DEBUG=1 sudo bash install
- INSTALLER_URL: Override the default installer source URL
- INSTALLER_DEBUG: Enable verbose output for troubleshooting
Custom Configuration
Pass custom arguments to the main installer:
sudo bash install --config /path/to/config.yml
sudo bash install --skip-validation
See the main installer documentation for available flags and options.
Desktop Environments
During interactive setup you can select which graphical environment to install. Supported values include:
cli-only– no GUIgnome– GNOME Shell with GDMkde– KDE Plasma with SDDMhyprland– Hyprland Wayland compositor with LightDMxfce– XFCE4 desktop with LightDMi3– i3 window manager with LightDM
Offline Installation
For systems without internet access, download the installer first:
curl -O https://imemix.github.io/install
curl -O https://imemix.github.io/eminstaller.py
# Transfer both files to target system
sudo bash install --offline
Dry Run (Simulation)
Preview installation steps without making changes:
sudo bash install --dry-run
This is useful for testing in production environments before actual deployment.
Security Notice
⚠️ Running scripts via piping to bash carries inherent security risk:
curl | bash
Only execute installers from trusted, verified sources.
Review the script before execution whenever possible, or use the recommended safe method in the documentation above.
Philosophy
EMInstaller is built on these core principles:
- Minimal: Only essential functionality
- Transparent: Clear and understandable code
- Auditable: Easy to review and verify
- Deterministic: Consistent, predictable behavior
- Secure by Default: Security first approach
If an install script cannot be easily read and understood, it should not be trusted.