A personal fork of illogical-impulse by @end-4, customized and maintained by pctrade.
This monorepo combines the three pieces that make up Horizons:
dotfiles/— the base Hyprland/kitty/fish/etc. dotfiles (originallydots-hyprland).shell/— the Quickshell desktop shell (originallyend4-pC), including its README(s) inshell/README.md.
Liquid Glass / blur are provided by Hyprland's own native decoration:blur:variant
(no plugin needed) — see dotfiles/dots/.config/hypr/hyprland/general.lua and
Settings > Hyprland > Blur Style in the shell.
git clone https://github.com/PROFFESSOR0x/Horizons-DE.git Horizons-DE
cd Horizons-DE
./installer.sh # interactive (profile: core)
./installer.sh --profile full --force # full non-interactive
./installer.sh --dry-run --profile ultra # preview what would be doneThe unified installer (installer.sh + install/lib/*) does in order: a target-aware
runtime bootstrap, pre-flight checks, legacy migration (illogical-impulse/end4-pC → horizons), optional backup,
build from source, optional bundled extras
(Rubik/Gabarito/Bibata/GoogleSans), the shell/ Quickshell config into
~/.config/quickshell/horizons, target-specific WM integration and keybinds,
a matching-session Quickshell restart, and finally writes the identity marker.
X11 and Wayland are display protocols; i3 and Hyprland are window managers,
not desktop environments. Horizons supports only the two valid pairs below:
| Target | Protocol | Installer behavior |
|---|---|---|
| Hyprland | Wayland | Full Horizons-managed desktop can be selected, including compatible dotfiles. |
| i3 | X11 | Shell integration only; i3 IPC provides windows, workspaces, outputs, focus, and workspace actions. |
Hyprland/X11 and i3/Wayland are rejected by the installer because those upstream combinations do not exist. For an i3-like Wayland compositor, Sway would need its own supported backend rather than pretending i3 can run on Wayland.
On a new install, the installer requires a target and desktop-integration choice:
./installer.sh --wm hyprland --desktop horizons
./installer.sh --wm i3 --desktop existingThe first successful installation stores the selected protocol, window manager,
desktop mode, profile, and components in ~/.config/horizons/.horizons-meta.json.
Subsequent plain ./installer.sh calls automatically enter update mode and reuse
that stored target. Use --fresh-install only when you explicitly want to run a
new installation flow. i3 integration installs ~/.config/i3/horizons.conf and
adds one reversible include after making a backup; it does not modify existing i3
rules or bindings.
Before modifying configuration, the installer audits the selected target and installs
only missing runtime capabilities. It tries the distribution's normal repositories
first, then safe alternatives (including an Arch AUR fallback where an existing
yay or paru is available). Ubuntu is handled natively through apt: the installer
enables universe, uses Ubuntu packages for Hyprland and runtime helpers, enables
the upstream Quickshell PPA (ppa:avengemedia/danklinux) when needed, enables
the Hyprland PPA (ppa:cppiber/hyprland) when Ubuntu's own archive lacks the
Hyprland stack, and builds swappy from source when it is missing from apt.
If no Quickshell package is available after the PPA, it offers a source build with
its build dependencies. Hyprland installs its Wayland runtime helpers; i3 installs
i3, X.Org, and X11 clipboard support. --skip-deps is an explicit opt-out: it
leaves the installer in audit-only mode and reports what is still missing.
The installer also inventories known existing desktop configuration directories for
Hyprland, i3, QuickShell, AGS, Waybar, Polybar, Eww, Kitty, and Fish. Interactive
installs offer Keep, Backup, or permanently Delete. Deletion requires
typing DELETE; non-interactive installs keep files unless --existing-config backup
was supplied explicitly.
After a successful install a marker is written (requested feature):
~/.config/horizons/.horizons-meta.json— machine-readable (installer version, dates, git commit, profile, components)~/.config/horizons/.horizons-info— simplekey=valuehuman-readable~/.config/horizons/.horizons-version— one-linerhorizons <commit> <date> profile=<p>
The update protocol reads this marker:
./installer.sh status # show identity + repo status
./installer.sh check # check for updates (git fetch + compare)
./installer.sh update # pull (stash+rebase) + smart re-apply
./install/horizons-update check
./install/horizons-update full --rebase --smart
./install/horizons-update rollback
./install/horizons-update timer install # daily systemd timer
# Installed helper after first run:
horizons status
horizons update| Profile | Dots | Shell | Bundled | Build | SysUpgrade |
|---|---|---|---|---|---|
minimal |
✗ | ✔ | ✗ | ✗ | ✗ |
core (default) |
✔ | ✔ | ✗ | ✗ | ✗ |
full |
✔ | ✔ | ✔ | ✗ | ✗ |
ultra |
✔ | ✔ | ✔ | ✔ | ✔ |
Granular overrides: --components <csv> with ^/-/no- negation.
./installer.sh --profile minimal --force # shell only
./installer.sh --profile full --with-sysupdate -y # full + system upgrade
./installer.sh --components dots,shell --force # only dots + shell
./installer.sh --components no-dots,^bundled -y # everything except dots/bundled
./installer.sh build --build-force # only rebuild quickshellRun ./installer.sh --help for the complete list. Highlights:
-f/--force,-y/--yes,-q/--quiet,-v/--verbose,--dry-run--profile minimal|core|full|ultra,--components <csv>,--show-profiles--with-deps/--skip-deps,--with-sysupdate/--skip-sysupdate,--with-build/--skip-build,--with-bundled/--skip-bundled,--with-backup/--skip-backup--via-nix,--with-fontset <set>,--build-force,--log-file <path>- Legacy compat:
--skip-dots,--skip-qsstill work - Commands:
install(default),update,check,status,build,uninstall
- @end-4 — original dots-hyprland / illogical-impulse.
- pctrade — end4-pC fork, now rebranded as آفاق | Horizons.
See shell/README.md for shell-specific docs (also available in
日本語 and 简体中文), and
RESTRUCTURE_PLAN.md for the monorepo restructuring history.