From c0ec3300247e538f786b2952a8f8cede58a5cb5c Mon Sep 17 00:00:00 2001 From: alexion Date: Wed, 22 Jul 2026 09:46:27 -0400 Subject: [PATCH] fix(desktop): switch the terminal from Ghostty to Alacritty Ghostty's GTK4 window construction made every launch sluggish on neogaia's integrated graphics (~440 ms to map a window), which a head-to-head comparison against Alacritty confirmed. Alacritty's lightweight OpenGL renderer opens fast on the iGPU, so it becomes the terminal on Super+Return. The choice stays reversible per host, so a capable host such as zeus could adopt Ghostty later. --- .../0021-desktop-group-and-hyprland-session.md | 5 +++++ modules/desktop/hyprland/hyprland.nix | 2 +- modules/desktop/terminal.nix | 14 +++++--------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.claude/tasks/0021-desktop-group-and-hyprland-session.md b/.claude/tasks/0021-desktop-group-and-hyprland-session.md index 55c1b59..b62107e 100644 --- a/.claude/tasks/0021-desktop-group-and-hyprland-session.md +++ b/.claude/tasks/0021-desktop-group-and-hyprland-session.md @@ -52,6 +52,11 @@ Enable the desktop on neogaia. - **Greeter session command.** greetd's `default_session` runs `uwsm start -e -D Hyprland hyprland.desktop`, mirroring the Exec line of the uwsm session the Hyprland package itself ships, so the session goes through the universal Wayland session manager deterministically. +- **Terminal: Alacritty, not Ghostty.** + The spec named Ghostty, but on neogaia's integrated graphics its GTK4 window construction made every launch feel sluggish (~440 ms to map, versus a lightweight terminal's near-instant open), which a head-to-head comparison confirmed. + The terminal is therefore Alacritty, whose OpenGL renderer opens fast on the iGPU. + The choice is easily reversible per host, so a capable host such as zeus could still adopt Ghostty later. + - **Dropped from the plan.** Mouse drag-to-move and drag-to-resize (`bindm`) were removed: they fall outside the task's enumerated keyboard bindings, and `resizeactive`/`movewindow` already cover floating windows from the keyboard. Hardware media/brightness keys (the spec table's `XF86` row) are likewise deferred, since they depend on audio and backlight tooling not yet in scope. diff --git a/modules/desktop/hyprland/hyprland.nix b/modules/desktop/hyprland/hyprland.nix index 6c1d53b..3e7fb9e 100644 --- a/modules/desktop/hyprland/hyprland.nix +++ b/modules/desktop/hyprland/hyprland.nix @@ -50,7 +50,7 @@ in settings = { "$mod" = "SUPER"; - "$terminal" = "ghostty"; + "$terminal" = "alacritty"; input = { kb_layout = "us"; diff --git a/modules/desktop/terminal.nix b/modules/desktop/terminal.nix index ab69acb..e5ca254 100644 --- a/modules/desktop/terminal.nix +++ b/modules/desktop/terminal.nix @@ -1,23 +1,19 @@ { config, lib, + pkgs, ... }: -# Ghostty as the desktop terminal. +# Alacritty as the desktop terminal, a lightweight GPU renderer that opens +# fast on the laptop's integrated graphics. let cfg = config.modules.desktop.terminal; user = config.user.name; in { - options.modules.desktop.terminal.enable = lib.mkEnableOption "Ghostty as the desktop terminal"; + options.modules.desktop.terminal.enable = lib.mkEnableOption "Alacritty as the desktop terminal"; config = lib.mkIf cfg.enable { - home-manager.users.${user}.programs.ghostty = { - enable = true; - - # Reuse a single process, so each window after the first opens instantly - # instead of paying a fresh GTK startup. - settings.gtk-single-instance = true; - }; + home-manager.users.${user}.home.packages = [ pkgs.alacritty ]; }; }