Compare commits
4 Commits
69f7ae9051
...
3f36183021
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3f36183021 | ||
|
|
d9301ad954 | ||
|
|
66f58fa228 | ||
|
|
2c8e0b47f9 |
11
README.md
11
README.md
@@ -272,7 +272,7 @@ close · `SUPER+1..9` workspaces · `Print` region screenshot.
|
|||||||
`nomarchy-menu` dispatcher: root picker (no args) · `power`
|
`nomarchy-menu` dispatcher: root picker (no args) · `power`
|
||||||
(lock/logout/suspend/hibernate/reboot/shutdown, SUPER+X) ·
|
(lock/logout/suspend/hibernate/reboot/shutdown, SUPER+X) ·
|
||||||
`theme` (SUPER+T) · `clipboard` (cliphist, SUPER+CTRL+V) · `calc`
|
`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`.
|
SUPER+D is `rofi -show drun`.
|
||||||
- ✓ shipped modules: `network` (nmtui in `$TERMINAL`) · `bluetooth`
|
- ✓ shipped modules: `network` (nmtui in `$TERMINAL`) · `bluetooth`
|
||||||
(blueman-manager) · `capture` (grim/slurp submenu: region/full →
|
(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
|
launcher, no second theming pipeline; the dispatcher owns the menu
|
||||||
structure, so the renderer stays swappable (we moved fuzzel → rofi 2.0
|
structure, so the renderer stays swappable (we moved fuzzel → rofi 2.0
|
||||||
once mainline gained native Wayland, for its richer theming)
|
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
|
- **Theme parity with legacy:** summer-day/night now carry their legacy
|
||||||
bar layouts as `waybar.jsonc` whole-swaps (adapted: dead legacy script
|
bar layouts as `waybar.jsonc` whole-swaps (adapted: dead legacy script
|
||||||
modules dropped, Nerd-Fonts-v2 codepoints remapped to FontAwesome/v3,
|
modules dropped, Nerd-Fonts-v2 codepoints remapped to FontAwesome/v3,
|
||||||
|
|||||||
@@ -1,13 +1,31 @@
|
|||||||
# Hyprland — fully driven by config.nomarchy.theme (theme-state.json).
|
# Hyprland — fully driven by config.nomarchy.theme (theme-state.json).
|
||||||
# Gaps, borders and colors are baked from the JSON at eval time; theme
|
# Gaps, borders and colors are baked from the JSON at eval time; theme
|
||||||
# changes arrive via `home-manager switch`.
|
# changes arrive via `home-manager switch`.
|
||||||
{ config, lib, ... }:
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
t = config.nomarchy.theme;
|
t = config.nomarchy.theme;
|
||||||
c = t.colors;
|
c = t.colors;
|
||||||
inherit (config.nomarchy.lib) rgb rgba;
|
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.
|
# SUPER+1..9 / SUPER+SHIFT+1..9 workspace binds, generated.
|
||||||
workspaceBinds = builtins.concatLists (builtins.genList
|
workspaceBinds = builtins.concatLists (builtins.genList
|
||||||
(i:
|
(i:
|
||||||
@@ -150,7 +168,8 @@ in
|
|||||||
|
|
||||||
bindl = [
|
bindl = [
|
||||||
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
|
", 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"
|
", XF86AudioPlay, exec, playerctl play-pause"
|
||||||
", XF86AudioPause, exec, playerctl play-pause"
|
", XF86AudioPause, exec, playerctl play-pause"
|
||||||
", XF86AudioNext, exec, playerctl next"
|
", XF86AudioNext, exec, playerctl next"
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ let
|
|||||||
web)
|
web)
|
||||||
q=$(rofi -dmenu -p search < /dev/null) || exit 0
|
q=$(rofi -dmenu -p search < /dev/null) || exit 0
|
||||||
[ -n "$q" ] || 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)
|
network)
|
||||||
# nmtui in a terminal (NetworkManager is the system network stack).
|
# nmtui in a terminal (NetworkManager is the system network stack).
|
||||||
|
|||||||
@@ -56,8 +56,12 @@ in
|
|||||||
# Route only audio + subtitles to mediainfo's text metadata;
|
# Route only audio + subtitles to mediainfo's text metadata;
|
||||||
# images/videos keep yazi's native visual thumbnails. Markdown
|
# images/videos keep yazi's native visual thumbnails. Markdown
|
||||||
# renders through glow.
|
# 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 = [
|
prepend_previewers = [
|
||||||
{ name = "*.md"; run = "glow"; }
|
{ url = "*.md"; run = "glow"; }
|
||||||
{ mime = "audio/*"; run = "mediainfo"; }
|
{ mime = "audio/*"; run = "mediainfo"; }
|
||||||
{ mime = "application/subrip"; run = "mediainfo"; }
|
{ mime = "application/subrip"; run = "mediainfo"; }
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -50,6 +50,25 @@ in
|
|||||||
# `nixpkgs.config = lib.mkForce { allowUnfree = false; }`.
|
# `nixpkgs.config = lib.mkForce { allowUnfree = false; }`.
|
||||||
nixpkgs.config.allowUnfree = true;
|
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 ────────────────────────────────────
|
# ── Wayland session: Hyprland ────────────────────────────────────
|
||||||
# Installs the binary, registers the session, wires up
|
# Installs the binary, registers the session, wires up
|
||||||
# xdg-desktop-portal-hyprland. Configuration is Home Manager's job.
|
# xdg-desktop-portal-hyprland. Configuration is Home Manager's job.
|
||||||
|
|||||||
@@ -80,11 +80,12 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
config = lib.mkIf cfg.plymouth.enable {
|
config = lib.mkIf cfg.plymouth.enable {
|
||||||
# Plymouth wants the systemd initrd (also what applies the keyboard
|
# The systemd initrd (boot.initrd.systemd.enable) and console.earlySetup
|
||||||
# layout to the LUKS prompt) and a quiet console around it.
|
# that Plymouth needs are now distro-wide defaults in ./default.nix
|
||||||
boot.initrd.systemd.enable = lib.mkDefault true;
|
# (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;
|
boot.initrd.verbose = lib.mkDefault false;
|
||||||
console.earlySetup = lib.mkDefault true;
|
|
||||||
boot.consoleLogLevel = lib.mkDefault 0;
|
boot.consoleLogLevel = lib.mkDefault 0;
|
||||||
|
|
||||||
boot.plymouth = {
|
boot.plymouth = {
|
||||||
|
|||||||
Reference in New Issue
Block a user