A single script that optimises a base Arch Linux install. Auto-detects hardware (CPU, GPU, RAM, bootloader, desktop environment) and applies the right drivers, kernel, apps, performance tweaks, and security hardening — no manual configuration needed.
Dual-boot safe. Works with AMD, NVIDIA, and Intel GPUs.
bash niixarch.sh
Automatically detects and configures for your specific hardware:
- CPU: AMD or Intel (installs correct microcode, pstate driver)
- GPU: AMD, NVIDIA, or Intel (installs correct drivers, Vulkan, VA-API)
- RAM: Tunes swappiness and ZRAM based on installed memory
- Storage: Optimises I/O schedulers for NVMe and SATA SSDs
- Bootloader: Limine, GRUB, or systemd-boot (adds CachyOS kernel entry, preserves Windows entries)
- Desktop: GNOME, KDE, Hyprland, or Sway (applies DE-specific tweaks)
- Dual-boot: Detects Windows partitions and sets a 5-second boot menu timeout
| App | Source | Purpose |
|---|---|---|
| Steam | pacman | Game launcher |
| Heroic Games Launcher | AUR | Epic / GOG games |
| Wine Staging | pacman | Windows compatibility |
| ProtonUp-Qt | AUR | Proton version manager |
| GE-Proton | GitHub | Custom Proton builds |
| Helium Browser | AUR | Chromium-based browser |
| Stremio | Flatpak | Media streaming |
| Tor Browser | AUR | Anonymous browsing |
| Signal | pacman | Encrypted messaging |
| Session | AUR | Decentralised messaging |
| Whatsie | Flatpak | WhatsApp client |
| Lock | Flatpak | PGP encryption/decryption |
| Electrum | pacman | Bitcoin wallet |
| Monero GUI | AUR | Monero wallet |
| CoreCtrl | pacman | AMD GPU management |
| fastfetch | pacman | System info |
- CachyOS kernel with BORE scheduler and x86-64-v3 optimisations
- LAVD scheduler (scx_lavd) for real-time thread prioritisation
- GameMode + MangoHud with custom
gamemode.ini - ananicy-cpp with game-specific process priority rules
- DXVK for DirectX-to-Vulkan translation
- ntsync module for lower-overhead Wine/Proton sync
- ZRAM with zstd compression (sized to RAM)
- NVMe + SSD I/O schedulers set to
none - /tmp on tmpfs (4GB RAM-backed)
- TCP BBR congestion control
- Transparent hugepages set to
madvise - IRQ balancing enabled
- Pacman parallel downloads (5 concurrent)
- Mitigations prompt — choose between max performance or security at runtime
- ufw firewall — deny incoming, allow outgoing (Steam remote play excepted)
- MAC randomisation — random MAC on every WiFi/Ethernet connection
- DNS-over-TLS — Cloudflare primary, Quad9 fallback
- Auto-update timer —
pacman -Syuevery 12 hours - Timeshift — creates a snapshot before making changes (rollback safety net)
- Dark mode, alert sounds off
- Power button does nothing, auto screen blank off, auto suspend off
- Fixed 1 workspace, lock screen notifications off
- Ctrl+Alt+T opens terminal
- AppIndicator extension for tray icons
- Bluetooth A2DP forced (fixes underwater audio)
- Apps pinned to dash in order
/etc/os-releaseand/etc/issuebranded as NiiX Arch- Hostname set to
niixarch - Custom fastfetch config
- Pacman hooks to preserve branding across updates
- Bootloader entries renamed to NiiX Arch
- A base Arch Linux install (or CachyOS, EndeavourOS, etc.)
- An active internet connection
- A non-root user with
sudoaccess
Do not run as root — the script uses sudo when needed.
# Standard run — interactive prompts for mitigations choice
bash niixarch.sh
# First-boot mode — skips reboot prompt, cleans up autostart
bash niixarch.sh --firstbootThe script is idempotent — safe to run multiple times. It skips packages that are already installed and only modifies configs that need changing.
The script asks two questions during execution:
- Continue? — Press Enter to proceed or Ctrl+C to cancel
- CPU mitigations — Choose between:
- OFF: ~5-10% more performance (disables Spectre/Meltdown patches)
- ON: Keep protections enabled (recommended if handling crypto/banking)
After installation, the script runs a comprehensive verification that checks every package, service, environment variable, kernel parameter, and configuration it touched. Any issues show as yellow [!] warnings with instructions to fix.
Every run creates a timestamped log at:
~/niixarch-install-YYYYMMDD-HHMMSS.log
| Bootloader | Supported | Dual-boot |
|---|---|---|
| Limine | ✔ | Windows entries preserved, 5s timeout |
| GRUB | ✔ | os-prober enabled, Windows auto-detected |
| systemd-boot | ✔ | Windows entries untouched, 5s timeout |
| GPU | Drivers | Extras |
|---|---|---|
| AMD | Mesa, RADV, VA-API, xf86-video-amdgpu | CoreCtrl, RADV env vars |
| NVIDIA | nvidia-dkms or nvidia-open-dkms | Early KMS, Wayland vars (GBM_BACKEND, etc.), DRM modeset |
| Intel | Mesa, vulkan-intel, intel-media-driver | iHD VA-API driver |
NVIDIA driver type is auto-selected: open-dkms for Turing+ (RTX 20xx/30xx/40xx, GTX 16xx), proprietary for older cards.
All AUR installs use a retry wrapper that attempts up to 3 times with a 5-second delay between attempts, handling transient network failures and build flakes.
| File | Purpose |
|---|---|
/etc/sysctl.d/99-niixarch.conf |
Kernel parameter tweaks |
/etc/systemd/zram-generator.conf |
ZRAM configuration |
/etc/udev/rules.d/60-nvme-scheduler.conf |
NVMe I/O scheduler |
/etc/udev/rules.d/60-ssd-scheduler.conf |
SSD I/O scheduler |
/etc/NetworkManager/conf.d/30-mac-randomize.conf |
MAC randomisation |
/etc/systemd/resolved.conf.d/dns-over-tls.conf |
DNS-over-TLS |
/etc/pacman.d/hooks/niixarch-*.hook |
Branding persistence |
~/.config/gamemode.ini |
GameMode configuration |
~/.config/fastfetch/config.jsonc |
fastfetch NiiX Arch theme |
~/niixarch-install-*.log |
Install logs |