Compare commits

...

4 Commits

Author SHA1 Message Date
Bernardo Magri
3f36183021 feat(menu): Google web search; note calc rework in the roadmap
The web module now opens google.com/search instead of DuckDuckGo. Also log
a roadmap item to rework calc: qalc -t misparses common phrasings (15% of
200 -> rem(15, 1 B)) and the result only shows in the next menu's -mesg
line -- move toward live results as you type.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:11:20 +01:00
Bernardo Magri
d9301ad954 fix(yazi): previewer match field name -> url (yazi 26.x)
yazi 26.x renamed the previewer/fetcher match key from name to url. The
fetchers were updated but the markdown previewer still used name, so the
whole [plugin] config failed to parse ("at least one of 'url' or 'mime'
must be specified") and yazi fell back to its presets.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:11:20 +01:00
Bernardo Magri
66f58fa228 fix(hyprland): mic mute via wpctl -- swayosd 0.2.1 input-mute is a no-op
swayosd-client --input-volume mute-toggle draws the OSD but never flips the
default source's mute (its output-mute path works; input does not). Confirmed
on hardware: wpctl set-mute @DEFAULT_SOURCE@ toggle flips the state, swayosd
does not. Do the real toggle with wpctl and keep an OSD via swayosd's
--custom-icon/--custom-message.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:11:20 +01:00
Bernardo Magri
2c8e0b47f9 fix(keyboard): carry the configured layout to the LUKS prompt
Setting only services.xserver.xkb.layout moves the graphical session but
leaves console.useXkbConfig unset, so the virtual-console keymap -- and the
systemd initrd the LUKS passphrase prompt runs in -- fall back to US (seen
on a Latitude 5410: X11 Layout gb, VC Keymap unset, LUKS prompt US).

Default console.useXkbConfig + console.earlySetup + boot.initrd.systemd.enable
distro-wide, so xkb.layout alone reaches the console and the encrypted-disk
prompt. Moved the latter two out of plymouth.nix -- they no longer hinge on
the splash being enabled. All mkDefault: an explicit console.keyMap or a
scripted initrd still wins.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-14 12:11:20 +01:00
6 changed files with 61 additions and 9 deletions

View File

@@ -272,7 +272,7 @@ close · `SUPER+1..9` workspaces · `Print` region screenshot.
`nomarchy-menu` dispatcher: root picker (no args) · `power`
(lock/logout/suspend/hibernate/reboot/shutdown, SUPER+X) ·
`theme` (SUPER+T) · `clipboard` (cliphist, SUPER+CTRL+V) · `calc`
(qalc, copy/chain) · `files` (fd → xdg-open) · `web` (DuckDuckGo).
(qalc, copy/chain) · `files` (fd → xdg-open) · `web` (Google).
SUPER+D is `rofi -show drun`.
- ✓ shipped modules: `network` (nmtui in `$TERMINAL`) · `bluetooth`
(blueman-manager) · `capture` (grim/slurp submenu: region/full →
@@ -294,6 +294,15 @@ close · `SUPER+1..9` workspaces · `Print` region screenshot.
launcher, no second theming pipeline; the dispatcher owns the menu
structure, so the renderer stays swappable (we moved fuzzel → rofi 2.0
once mainline gained native Wayland, for its richer theming)
- **Calculator module rework:** the current `calc` flow
(`modules/home/rofi.nix`) is unsatisfying — you commit the expression
blind, then the result only appears in the *next* menu's `-mesg` line,
and `qalc -t` misparses common phrasings (e.g. `15% of 200`
`rem(15, 1 B)` instead of `30`). Rework toward live results as you type
(rofi-calc-style: each keystroke re-evaluates and the answer is the top
entry, Enter copies), a more robust qalc invocation, and graceful
handling of parse errors. Decide whether to keep the hand-rolled dmenu
loop or adopt a dedicated calc mode/plugin.
- **Theme parity with legacy:** summer-day/night now carry their legacy
bar layouts as `waybar.jsonc` whole-swaps (adapted: dead legacy script
modules dropped, Nerd-Fonts-v2 codepoints remapped to FontAwesome/v3,

View File

@@ -1,13 +1,31 @@
# Hyprland — fully driven by config.nomarchy.theme (theme-state.json).
# Gaps, borders and colors are baked from the JSON at eval time; theme
# changes arrive via `home-manager switch`.
{ config, lib, ... }:
{ config, lib, pkgs, ... }:
let
t = config.nomarchy.theme;
c = t.colors;
inherit (config.nomarchy.lib) rgb rgba;
# swayosd 0.2.1's `--input-volume mute-toggle` draws the OSD but never
# flips the source mute (verified on hardware: wpctl toggles the state,
# swayosd's input-mute path is a no-op — unlike its working output-mute
# path). Do the real toggle with wpctl, then show an OSD reflecting the
# resulting state via swayosd's --custom-icon/--custom-message.
micMute = pkgs.writeShellScript "nomarchy-mic-mute" ''
${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_SOURCE@ toggle
if ${pkgs.wireplumber}/bin/wpctl get-volume @DEFAULT_SOURCE@ | grep -q MUTED; then
${pkgs.swayosd}/bin/swayosd-client \
--custom-icon microphone-sensitivity-muted-symbolic \
--custom-message "Microphone muted"
else
${pkgs.swayosd}/bin/swayosd-client \
--custom-icon microphone-sensitivity-high-symbolic \
--custom-message "Microphone unmuted"
fi
'';
# SUPER+1..9 / SUPER+SHIFT+1..9 workspace binds, generated.
workspaceBinds = builtins.concatLists (builtins.genList
(i:
@@ -150,7 +168,8 @@ in
bindl = [
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
", XF86AudioMicMute, exec, swayosd-client --input-volume mute-toggle"
# swayosd's input mute-toggle is broken on 0.2.1 (see micMute above).
", XF86AudioMicMute, exec, ${micMute}"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPause, exec, playerctl play-pause"
", XF86AudioNext, exec, playerctl next"

View File

@@ -106,7 +106,7 @@ let
web)
q=$(rofi -dmenu -p search < /dev/null) || exit 0
[ -n "$q" ] || exit 0
exec xdg-open "https://duckduckgo.com/?q=$(urlencode "$q")" ;;
exec xdg-open "https://www.google.com/search?q=$(urlencode "$q")" ;;
network)
# nmtui in a terminal (NetworkManager is the system network stack).

View File

@@ -56,8 +56,12 @@ in
# Route only audio + subtitles to mediainfo's text metadata;
# images/videos keep yazi's native visual thumbnails. Markdown
# renders through glow.
# Match field is `url` (a path glob) or `mime` — yazi 26.x renamed
# the old `name` to `url`, same as the fetchers above. Using `name`
# fails the parse ("at least one of 'url' or 'mime'") and yazi falls
# back to its presets.
prepend_previewers = [
{ name = "*.md"; run = "glow"; }
{ url = "*.md"; run = "glow"; }
{ mime = "audio/*"; run = "mediainfo"; }
{ mime = "application/subrip"; run = "mediainfo"; }
];

View File

@@ -50,6 +50,25 @@ in
# `nixpkgs.config = lib.mkForce { allowUnfree = false; }`.
nixpkgs.config.allowUnfree = true;
# ── One keyboard layout everywhere, incl. the LUKS prompt ────────
# services.xserver.xkb.layout is the single source of truth for the
# layout (the installer writes it; downstream sets it in system.nix).
# These bridge that one knob through to the encrypted-disk prompt —
# without them, setting only xkb.layout moves the graphical session
# but leaves the console keymap unset, so the initrd LUKS passphrase
# prompt falls back to US:
# useXkbConfig the virtual-console keymap follows xkb (TTYs)
# earlySetup bakes that keymap into the initrd
# systemd initrd loads it before cryptsetup asks for the passphrase
# (the legacy scripted initrd cannot; also what
# Plymouth needs — defaulted here so it no longer
# hinges on the splash being enabled).
# All mkDefault, so an explicit console.keyMap or a scripted initrd
# still wins.
console.useXkbConfig = lib.mkDefault true;
console.earlySetup = lib.mkDefault true;
boot.initrd.systemd.enable = lib.mkDefault true;
# ── Wayland session: Hyprland ────────────────────────────────────
# Installs the binary, registers the session, wires up
# xdg-desktop-portal-hyprland. Configuration is Home Manager's job.

View File

@@ -80,11 +80,12 @@ let
in
{
config = lib.mkIf cfg.plymouth.enable {
# Plymouth wants the systemd initrd (also what applies the keyboard
# layout to the LUKS prompt) and a quiet console around it.
boot.initrd.systemd.enable = lib.mkDefault true;
# The systemd initrd (boot.initrd.systemd.enable) and console.earlySetup
# that Plymouth needs are now distro-wide defaults in ./default.nix
# (they also carry the keyboard layout to the LUKS prompt), so the
# splash no longer has to turn them on. Just keep the console quiet
# around the splash.
boot.initrd.verbose = lib.mkDefault false;
console.earlySetup = lib.mkDefault true;
boot.consoleLogLevel = lib.mkDefault 0;
boot.plymouth = {