feat(hyprland): implement declarative monitor scaling and add scale picker to welcome wizard
Some checks failed
Check / eval-and-lint (push) Failing after 6m36s
Some checks failed
Check / eval-and-lint (push) Failing after 6m36s
This commit is contained in:
@@ -107,6 +107,14 @@ in
|
||||
default = schema.home.hyprland.border_size;
|
||||
description = "Border size for Hyprland.";
|
||||
};
|
||||
scale = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = schema.home.hyprland.scale;
|
||||
description = ''
|
||||
Default monitor scale. Use "auto" to let Hyprland decide,
|
||||
or a numeric string like "1", "1.25", "1.5", "2".
|
||||
'';
|
||||
};
|
||||
};
|
||||
fonts = {
|
||||
monospace = lib.mkOption {
|
||||
|
||||
@@ -36,9 +36,8 @@ _(empty — all entries shipped or moved to Later)_
|
||||
- **Optional `nomarchy-installer-vm`** rebuilt as a real flake app (not a one-off shell script) so users can install Nomarchy into a libvirt VM declaratively.
|
||||
- **Surface support module** via the relevant `nixos-hardware` profile + Surface kernel patches behind a `nomarchy.hardware.isSurface` toggle.
|
||||
- **High-contrast accessibility palette.** New `themes/palettes/high-contrast/` hitting WCAG AAA-grade contrast — pure-black background, pure-white foreground, saturated ANSI colors for distinction. Ships its own `colors.toml`, `icons.theme` (pick a high-contrast icon family or document the gap), and one solid-black `backgrounds/` entry. Pairs with `nomarchy.accessibility.enable` (Shipped 2026-05-22) but stays manually selected via `nomarchy-theme-set high-contrast` so the home option doesn't silently overwrite the user's existing theme choice. Split out of the original Accessibility row because it's a design task (24-colour WCAG palette + icon family choice) that wants its own review.
|
||||
- **No calendar app shipped.** The summer-night waybar date used to wire `on-click → kitty calcurse` (both uninstalled; the dead click was removed in the Component 6 pass). If a clickable calendar is wanted, ship a calendar tool (e.g. `calcurse`, or a GUI like `gnome-calendar`) and wire the date `on-click` to it via the default terminal / `xdg-terminal-exec`.
|
||||
|
||||
- **Publish or replace `Bjarne.{ethereal,hackerman,vantablack}-nomarchy` VSCode theme extensions.** The `ethereal`, `hackerman`, and `vantablack` palettes' `apps/vscode.json` files reference VSCode theme extensions under the `Bjarne` publisher that don't exist on the VSCode marketplace (verified via the marketplace extensionquery API on 2026-05-22). With the rest of the palette-extension pinning shipped, these three palettes are the only ones where VSCode still falls back to its default theme. Options: (a) publish the three extensions to the marketplace under the `Bjarne` publisher (or whatever the maintainer's account is) and add them to `features/apps/vscode.nix`'s `marketplaceExtensions` list; (b) package them locally as standalone `pkgs.vscode-utils.buildVscodeExtension` derivations sourced from a Nomarchy-hosted repo; (c) retarget the three palettes' `apps/vscode.json` to an existing marketplace-published theme that visually matches.
|
||||
- **Publish or replace `Bjarne.{ethereal,hackerman,vantablack}-nomarchy` VSCode theme extensions.**
|
||||
The `ethereal`, `hackerman`, and `vantablack` palettes' `apps/vscode.json` files reference VSCode theme extensions under the `Bjarne` publisher that don't exist on the VSCode marketplace (verified via the marketplace extensionquery API on 2026-05-22). With the rest of the palette-extension pinning shipped, these three palettes are the only ones where VSCode still falls back to its default theme. Options: (a) publish the three extensions to the marketplace under the `Bjarne` publisher (or whatever the maintainer's account is) and add them to `features/apps/vscode.nix`'s `marketplaceExtensions` list; (b) package them locally as standalone `pkgs.vscode-utils.buildVscodeExtension` derivations sourced from a Nomarchy-hosted repo; (c) retarget the three palettes' `apps/vscode.json` to an existing marketplace-published theme that visually matches.
|
||||
|
||||
## 3. Pillar: Script & menu audit
|
||||
|
||||
@@ -180,6 +179,7 @@ Pillar is **done** when every component has had a live VM pass and the roadmap c
|
||||
|
||||
(Move items here when they land — keep them brief, link the commit/PR.)
|
||||
|
||||
- _2026-05-31_ — **Calendar app shipped.** Added `calcurse` (TUI calendar) to the core `features` module and wired all Waybar clock modules (`clock` in base, `clock#date` in themes) to launch it via `nomarchy-launch-or-focus-tui`. Provides a functional calendar across the entire distro.
|
||||
- _2026-05-31_ — **Waybar theme fixes (summer-day/night).** Retargeted broken `on-click` actions in the `summer-day` and `summer-night` themes to Nomarchy scripts. Fixed `custom/launcher` (was `wofi/kitty`), `network` (was `wifimenu.sh`), and `custom/powermenu` (was `wlogout`) to use `nomarchy-menu`, `nomarchy-launch-wifi`, and `nomarchy-menu power` respectively. Removed hardcoded `nvidia_0` backlight device from `summer-day` to allow Waybar auto-detection.
|
||||
- _2026-05-31_ — **Pillar 9: Live VM runtime QA — complete.** Successfully drove the entire distro through a comprehensive runtime audit in a live VM. Verified the installer loop, first-boot UX, core system/home modules, desktop stack (Hyprland, waybar, walker, mako, swayosd), curated apps, theme engine (all 21 palettes), every `nomarchy-*` script, and form-factor presets. Fixed multiple runtime-only bugs (D-Bus errors, path mismatches, broken keybindings, renamed packages) that were invisible to static evaluation. This pillar closes the "runtime verification" requirement for the entire project.
|
||||
- _2026-05-31_ — **Pillar 8: QA audit — complete.** Finished the code-level and runtime sweeps for all 10 components: Installer, First-boot UX, Core system/home modules, Desktop stack, Apps, Theme engine, Scripts, ISOs, and Lib/State-schema. Every shipped feature has been verified end-to-end on real hardware or in a VM.
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||
# List current monitors and resolutions possible: hyprctl monitors
|
||||
# Format: monitor = [port], resolution, position, scale
|
||||
|
||||
# Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K.
|
||||
#env = GDK_SCALE,2
|
||||
#monitor=,preferred,auto,auto
|
||||
|
||||
# Good compromise for 27" or 32" 4K monitors (but fractional!)
|
||||
# env = GDK_SCALE,1.75
|
||||
# monitor=,preferred,auto,1.6
|
||||
|
||||
# Straight 1x setup for low-resolution displays like 1080p or 1440p
|
||||
# Or for ultrawide monitors like 34" 3440x1440 or 49" 5120x1440
|
||||
env = GDK_SCALE,1
|
||||
monitor=,highres,auto,1
|
||||
|
||||
# Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°)
|
||||
# monitor = DP-2, preferred, auto, 1, transform, 1
|
||||
|
||||
# Example for Framework 13 w/ 6K XDR Apple display
|
||||
# monitor = DP-5, 6016x3384@60, auto, 2
|
||||
# monitor = eDP-1, 2880x1920@120, auto, 2
|
||||
@@ -53,7 +53,11 @@ in
|
||||
# live under ~/.config/nomarchy/default/hypr/ and are deployed by the
|
||||
# core/home bulk-nomarchy dir, so duplicating them here was dead surface.
|
||||
xdg.configFile."hypr/nomarchy.conf".source = ./config/nomarchy.conf;
|
||||
xdg.configFile."hypr/monitors.conf".source = lib.mkDefault ./config/monitors.conf;
|
||||
xdg.configFile."hypr/monitors.conf".text = lib.mkDefault ''
|
||||
# Auto-generated by Nomarchy features/desktop/hyprland/default.nix
|
||||
# monitor = [port], resolution, position, scale
|
||||
monitor = , highres, auto, ${config.nomarchy.hyprland.scale}
|
||||
'';
|
||||
xdg.configFile."hypr/input.conf".source = lib.mkDefault ./config/input.conf;
|
||||
xdg.configFile."hypr/bindings.conf".source = lib.mkDefault ./config/bindings.conf;
|
||||
|
||||
|
||||
@@ -56,6 +56,18 @@ if [[ -n "$POSITION" ]]; then
|
||||
nomarchy-state-write panelPosition "$POSITION"
|
||||
fi
|
||||
|
||||
# 4. Select monitor scaling
|
||||
echo "Step 4: Choose your monitor scaling"
|
||||
echo "Recommended: 'auto' for most screens, '2' for 4K/HiDPI."
|
||||
SCALE=$(gum choose "auto" "1" "1.25" "1.5" "2")
|
||||
if [[ -n "$SCALE" ]]; then
|
||||
# Write to nested hyprland.scale key
|
||||
STATE_DIR="$HOME/.config/nomarchy"
|
||||
mkdir -p "$STATE_DIR"
|
||||
TMP_FILE=\$(mktemp)
|
||||
jq ".hyprland.scale = \"$SCALE\"" "\$STATE_FILE" > "\$TMP_FILE" && mv "\$TMP_FILE" "\$STATE_FILE"
|
||||
fi
|
||||
|
||||
# Skip system-modifying steps in the Live ISO environment
|
||||
if [[ "$USER" == "nixos" ]]; then
|
||||
echo ""
|
||||
|
||||
@@ -211,10 +211,8 @@
|
||||
# Live-ISO-only welcome. Pops a notification a few seconds
|
||||
# after the graphical session is up and opens a terminal
|
||||
# parked at the installer command, so the user never has to
|
||||
# hunt for it. Force highres monitor detection as some
|
||||
# hardware defaults to 1024x768.
|
||||
# hunt for it.
|
||||
wayland.windowManager.hyprland.extraConfig = nixpkgs.lib.mkAfter ''
|
||||
monitor = , highres, auto, 1
|
||||
exec-once = sh -c 'sleep 3; notify-send -u critical -t 0 "Welcome to Nomarchy" "Run \`sudo /etc/install.sh\` in the open terminal — or \`--dry-run\` to preview."'
|
||||
|
||||
exec-once = sh -c 'sleep 4; alacritty --title "Nomarchy Installer" -e bash -lc "echo; echo \"Welcome to the Nomarchy live ISO.\"; echo; echo \" sudo /etc/install.sh # install\"; echo \" sudo /etc/install.sh --dry-run # preview only\"; echo \" sudo /etc/install.sh --resume # resume after an interrupt\"; echo; exec bash"'
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
nightlight = false;
|
||||
waybar = true;
|
||||
|
||||
# Hyprland window manager settings
|
||||
hyprland = {
|
||||
gaps_in = 5;
|
||||
gaps_out = 10;
|
||||
border_size = 2;
|
||||
scale = "auto"; # Default monitor scale. Options: "auto", "1", "1.25", "1.5", "2"
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user