feat(desktop): add the desktop group and Hyprland session (task 0021) #13

Merged
alexion merged 5 commits from task-0021-desktop-group-and-hyprland-session into main 2026-07-22 10:09:37 -04:00
3 changed files with 13 additions and 4 deletions
Showing only changes of commit b9749dd6a2 - Show all commits

View File

@@ -102,3 +102,7 @@ The domain model (Host, Module, Skeleton, Auto-loader, Enable convention, overla
The Lua backend mangles `$mod`-style variables and INI `bind=` strings into invalid Lua (`hl.$mod("SUPER")`), and does not fail the build, since the config is only text. The Lua backend mangles `$mod`-style variables and INI `bind=` strings into invalid Lua (`hl.$mod("SUPER")`), and does not fail the build, since the config is only text.
Set `configType = "hyprlang"` to get the native `hyprland.conf` whose variable and bind syntax the usual settings are written in. Set `configType = "hyprlang"` to get the native `hyprland.conf` whose variable and bind syntax the usual settings are written in.
Render the file to check which format is in effect: `nix build --print-out-paths .#nixosConfigurations.<host>.config.home-manager.users.<user>.xdg.configFile.\"hypr/hyprland.conf\".source` (only the enabled `configType`'s key exists). Render the file to check which format is in effect: `nix build --print-out-paths .#nixosConfigurations.<host>.config.home-manager.users.<user>.xdg.configFile.\"hypr/hyprland.conf\".source` (only the enabled `configType`'s key exists).
- An invalid Hyprland dispatcher or config-option name never fails the nix build, since `hyprland.conf` is only text, so it surfaces only when the compositor loads the file at login.
The build/render check is therefore blind to it, and the real test is a running session (or reading `~/.config/hypr/hyprland.conf` against the running package's own names).
Two that bit on 0.55.4: the dwindle split actions `togglesplit`, `swapsplit`, and `pseudo` are layout messages reached through the `layoutmsg` dispatcher (`bind = $mod, T, layoutmsg, togglesplit`), not top-level dispatchers, and the old `dwindle:pseudotile` option is gone.
Confirm names against the pinned package rather than the wiki, whose "latest" drifts from it.

View File

@@ -94,7 +94,6 @@ in
}; };
dwindle = { dwindle = {
pseudotile = true;
preserve_split = true; preserve_split = true;
}; };
@@ -121,7 +120,8 @@ in
"$mod, Space, togglefloating," "$mod, Space, togglefloating,"
"$mod, F, fullscreen," "$mod, F, fullscreen,"
"$mod, T, togglesplit," # togglesplit is a dwindle layout message, reached through layoutmsg.
"$mod, T, layoutmsg, togglesplit"
"$mod SHIFT, Q, killactive," "$mod SHIFT, Q, killactive,"
"$mod CTRL, Q, forcekillactive," "$mod CTRL, Q, forcekillactive,"
] ]

View File

@@ -1,7 +1,6 @@
{ {
config, config,
lib, lib,
pkgs,
... ...
}: }:
# Ghostty as the desktop terminal. # Ghostty as the desktop terminal.
@@ -13,6 +12,12 @@ in
options.modules.desktop.terminal.enable = lib.mkEnableOption "Ghostty as the desktop terminal"; options.modules.desktop.terminal.enable = lib.mkEnableOption "Ghostty as the desktop terminal";
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
home-manager.users.${user}.home.packages = [ pkgs.ghostty ]; 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;
};
}; };
} }