Some checks failed
Check / eval (push) Has been cancelled
#139 — calcurse/doctor floated full-screen. Two faults stacked, which is why it looked like the float rules were dead: 1. Hyprland 0.55.4 silently ignores percentage `size` rules. Matrix on hardware (both orders, kitty memory off): `size 60% 65%` never applies, `size 1536 936` applies either way, configerrors empty both times. Rule order was a red herring. 2. Kitty defaults to remember_window_size=yes and replays the last OS window's size into every float — so after a tiled terminal, a sheet opens maximized. This is the Ghostty regression: Ghostty had no such memory, so fault 1 stayed invisible until #95. Fix: remember_window_size=no (floats must be deterministic) and the sheets ask for their own size — term-sheet.nix reads the focused monitor and hands kitty the px, because px in a rule cannot mean "a fraction of *this* screen" and one pair cannot serve 2560x1440 and the 1366x768 Acer (#131). Those windows keep float/center and deliberately carry no size rule. #141 — the updates click did nothing: whole-swaps hand-wrote `sh -c '$TERMINAL …'` and Waybar has no TERMINAL (home.sessionVariables → login shells only; the bar is spawned by Hyprland). Fixed at the root: `nomarchy-updates upgrade-window` opens its own window, so all five call sites name one env-free command and a theme file stops having an opinion about terminals. checks.waybar-swap-env guards the class. Bernardo asked mid-task for the update window to float — it is now the third caller of the sheet helper (com.nomarchy.updates, 45%x50%). V3 on the dev box: calendar 1536x936, doctor 1408x1008, updates 1152x720 — exactly the intended fractions, floating and centred; #141 driven under `env -i` with no TERMINAL, matching Waybar's real environment; the guard proven by reintroducing the bug. Acer V3 queued. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
61 lines
2.3 KiB
Nix
61 lines
2.3 KiB
Nix
# Kitty — Nomarchy's only terminal, themed from state.json.
|
|
# Colors, fonts and the full 16-color ANSI palette are baked from the
|
|
# JSON at eval time (same contract Ghostty used to have). Always
|
|
# installed: SUPER+Return, SUPER+E, doctor, calendar, and $TERMINAL
|
|
# all depend on it.
|
|
{ config, lib, ... }:
|
|
|
|
let
|
|
t = config.nomarchy.theme;
|
|
c = t.colors;
|
|
colorSettings = lib.listToAttrs (
|
|
lib.imap0 (i: color: {
|
|
name = "color${toString i}";
|
|
value = color;
|
|
}) t.ansi
|
|
);
|
|
in
|
|
{
|
|
# Kitty is ALWAYS installed. `nomarchy.kitty.enable` gates only whether
|
|
# Nomarchy's theming/config is applied — a user can keep kitty but drop
|
|
# our config; they cannot remove kitty itself without breaking the
|
|
# desktop's load-bearing classed windows.
|
|
programs.kitty = {
|
|
enable = true;
|
|
shellIntegration.enableBashIntegration = true;
|
|
shellIntegration.enableZshIntegration = true;
|
|
|
|
font = lib.mkIf config.nomarchy.kitty.enable {
|
|
name = t.fonts.mono;
|
|
size = t.fonts.size;
|
|
};
|
|
|
|
settings = lib.mkIf config.nomarchy.kitty.enable ({
|
|
background = c.base;
|
|
foreground = c.text;
|
|
cursor = c.accent;
|
|
cursor_text_color = c.base;
|
|
selection_background = c.overlay;
|
|
selection_foreground = c.text;
|
|
url_color = c.accent;
|
|
active_border_color = c.accent;
|
|
inactive_border_color = c.surface;
|
|
background_opacity = t.ui.terminalOpacity;
|
|
window_padding_width = lib.mkDefault 12;
|
|
confirm_os_window_close = lib.mkDefault 0;
|
|
enable_audio_bell = lib.mkDefault false;
|
|
wayland_titlebar_color = lib.mkDefault "background";
|
|
# Fresh windows for doctor/calendar --class launches (not one shared instance).
|
|
single_instance = lib.mkDefault false;
|
|
# Kitty's default is to remember the last OS window's size and replay it
|
|
# into the next one (~/.cache/kitty/main.json). Harmless while tiled —
|
|
# the compositor sizes those — but every *floating* kitty then inherits
|
|
# whatever the last window happened to be, so a sheet opened after a
|
|
# maximized terminal opens maximized (#139: the Ghostty regression, which
|
|
# kept no such memory). Floats should be deterministic: each launcher
|
|
# asks for the size it wants.
|
|
remember_window_size = lib.mkDefault false;
|
|
} // colorSettings);
|
|
};
|
|
}
|