Documentation / Profiles and Layers

Profiles & Layers

Aphotic-Hypr uses a flexible system of profiles and layers to create customizable installations. This approach allows you to build exactly the setup you need without duplicating code or maintaining multiple repositories.

Aphotic was previously known as Noctis-Hypr; the CLI, install script, and every setting listed below are the current, renamed project.

Profiles

A profile defines the base package set for your installation. There are two main profiles:

Minimal Profile

  • Hyprland
  • Quickshell (bar, launcher, notifications, OSD, lock, power menu, dashboard)
  • Kitty terminal
  • awww wallpaper engine
  • The binaries the always-loaded Quickshell shell itself needs (grim/slurp/swappy, brightnessctl, pamixer for the volume keys, swaylock-effects, cava, hypridle, matugen, ffmpeg for video wallpaper stills, openvpn for Settings → Network)
  • wallust, which no Arch repo carries: the installer fetches the upstream static binary against a pinned checksum instead of installing a package, on both profiles
  • The Aphotic greeter’s login manager (greetd)
  • The shell’s fonts: Material Symbols for every icon, Inter, JetBrainsMono Nerd Font
  • The default look: Papirus icons (recoloured per theme by papirus-folders), the Bibata cursor, adw-gtk3 for GTK apps
  • NetworkManager, and the network and Bluetooth applets the bar opens (network-manager-applet, blueman)

This is the whole Aphotic desktop with no extra applications: every surface works, but there’s no browser, file manager or editor.

Full Profile

  • Everything in minimal
  • Complete Aphotic experience:
    • Firefox with Pywalfox theming, and VS Code
    • Shell tooling (ZSH with Oh My Zsh, Powerlevel10k, autosuggestions and syntax highlighting, Starship, eza)
    • Media (mpv, pavucontrol, playerctl, btop)
    • File management (Thunar plus archive/GVFS plugins and thumbnailers)
    • Bluetooth stack (bluez, bluez-utils)
    • GTK settings tools (nwg-look, lxappearance, xfce4-settings)
    • SDDM, kept as the fallback login screen behind the Aphotic greeter

Layers

A layer is an optional add-on that extends your base profile. Layers are additive and automatically deduplicate against each other:

Gaming Layer

  • GameMode
  • MangoHud (both with 32-bit variants)
  • Steam
  • Enables the multilib repo, which the 32-bit packages need

Dev Layer

  • Neovim
  • tmux
  • fzf
  • ripgrep
  • fd
  • lazygit
  • GitHub CLI (github-cli)

AI Layer

  • Ollama (local AI backend; the installer picks the GPU runner for your card, ollama-cuda on NVIDIA and ollama-rocm on AMD) plus llmfit hardware-aware model recommendations
  • Claude Code (claude-code)
  • Enables a 15-minute local usage-tracking timer (aggregate token counts for the bar’s agent popout)
  • Unlocks (but doesn’t itself install) the AI-tracking plugins (Agent Graph, Agent Audit, the Agent Notch Tile and the rest that declare the ai layer), the bar’s agent icon, and the locally hosted chat providers (Ollama, the Assistant) — off means those are absent, not just idle. AI Chat and Intelligence are core and stay available either way. Live per-session tracking and the Agent Graph tab are separate, opt-in plugins on top of this layer, not automatic — see Plugin System and Agentic Workflows for exactly what’s collected and how to turn each one on
  • De-selecting this layer on a re-run disables the usage timer and stops Ollama/llmfit from being reinstalled — it doesn’t touch any plugin you’ve installed, since those are opted into (and out of) independently

Exploit Layer (and sublayers)

  • Offensive-security tooling, most of it backed by the BlackArch repo, gated behind an explicit authorized-use disclaimer at install time — see Security
  • The bare exploit layer is a default bundle (recon + web + network); hand-pick instead with the focused sublayers: exploit-recon, exploit-web, exploit-network, exploit-passwords (with an optional, always-separate exploit-wordlists fetch), exploit-reversing, exploit-forensics, exploit-reporting

Combining Profiles and Layers

You can combine any profile with any number of layers. For example:

# Minimal + Dev environment
./install.sh --profile minimal --with dev

# Full + Gaming + Dev
./install.sh --profile full --with gaming,dev

# Full + AI (no extra layers)
./install.sh --profile full --with ai

# Full + everything, including the default exploit bundle
./install.sh --profile full --with gaming,dev,ai,exploit

Running ./install.sh with no flags on a terminal starts the guided setup, which asks for the profile and the layers among four short steps. With no terminal it installs the daily-driver setup (full profile, no optional layers) with zero prompts. --opt-in is just the layer picker: a preset menu (all of them / none / choose one by one) that falls through to per-layer prompts if you choose one by one.

Custom Apps

Custom applications can be added by editing profiles/custom_apps.lst. This file is automatically included in the resolved package list during installation.

Configuration Structure

The profile and layer system works by merging TOML files:

  1. Base profile (profiles/base/<profile>.toml)
  2. Selected layers (profiles/layers/<layer>.toml)
  3. Custom apps (profiles/custom_apps.lst)

All packages are deduplicated during the merge process to prevent conflicts.

File Structure

profiles/
├── base/                    # Base profiles
│   ├── minimal.toml         # Minimal package set
│   └── full.toml            # Full package set
├── layers/                  # Optional add-ons
│   ├── gaming.toml
│   ├── dev.toml
│   ├── ai.toml
│   ├── exploit.toml         # Default bundle: recon + web + network
│   ├── exploit-recon.toml
│   ├── exploit-web.toml
│   ├── exploit-network.toml
│   ├── exploit-passwords.toml
│   ├── exploit-wordlists.toml
│   ├── exploit-reversing.toml
│   ├── exploit-forensics.toml
│   └── exploit-reporting.toml
└── custom_apps.lst          # Custom application list