diff --git a/core/home/options.nix b/core/home/options.nix index b0a18be..cd195b0 100644 --- a/core/home/options.nix +++ b/core/home/options.nix @@ -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 { diff --git a/docs/ROADMAP.md b/docs/ROADMAP.md index ba3d623..55977a8 100644 --- a/docs/ROADMAP.md +++ b/docs/ROADMAP.md @@ -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. diff --git a/features/desktop/hyprland/config/monitors.conf b/features/desktop/hyprland/config/monitors.conf deleted file mode 100644 index ed050fd..0000000 --- a/features/desktop/hyprland/config/monitors.conf +++ /dev/null @@ -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 diff --git a/features/desktop/hyprland/default.nix b/features/desktop/hyprland/default.nix index 34d4ca9..778795e 100644 --- a/features/desktop/hyprland/default.nix +++ b/features/desktop/hyprland/default.nix @@ -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; diff --git a/features/scripts/utils/nomarchy-welcome b/features/scripts/utils/nomarchy-welcome index 9093687..c0686af 100755 --- a/features/scripts/utils/nomarchy-welcome +++ b/features/scripts/utils/nomarchy-welcome @@ -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 "" diff --git a/flake.nix b/flake.nix index da5b63f..6fb14d8 100644 --- a/flake.nix +++ b/flake.nix @@ -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"' diff --git a/lib/state-schema.nix b/lib/state-schema.nix index 444cc2e..888cc58 100644 --- a/lib/state-schema.nix +++ b/lib/state-schema.nix @@ -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" }; };