commit - 7c711b70000038cea46f89bc79cd573274d0db9a
commit + d3ebad2940f5ef2f9c8b31816466ff811717563f
blob - 6db91b424c091f3de637820e0c4f7637c6cf1a1b
blob + 1716f9e51c4c81a7e97e76a3253076b2915f27a7
--- home/ale/niri.kdl
+++ home/ale/niri.kdl
scale 1
}
+// Proyector/TV por HDMI. scale 1 (no el 1.25 que niri autodetecta) para que
+// tenga el MISMO tamaño lógico que eDP-1 -- así el espejo de `present-mirror`
+// (wl-mirror, ver modules/niri.nix) sale 1:1 sin reescalar/emborronar.
+// Posición a la derecha; si querés otra distribución, cambialo desde
+// DMS -> Configuración -> Pantallas (escribe dms/outputs.kdl, incluido más
+// abajo, que gana sobre esto).
+output "HDMI-A-1" {
+ scale 1
+ position x=1920 y=0
+}
+
// --- Input ---
input {
keyboard {
Mod+M { maximize-column; }
Mod+V { toggle-window-floating; } // el bind que originó toda esta migración
+ // Espejar eDP-1 en el proyector HDMI para presentar (script present-mirror
+ // en modules/niri.nix). Volver a pulsar corta el espejo.
+ Mod+Shift+P { spawn "present-mirror"; }
+
// --- DMS: launcher / control center / settings / lock ---
// Verbos IPC confirmados contra danklinux.com/docs/dankmaterialshell/keybinds-ipc
// (lista completa de targets/acciones) y contra distro/nix/niri.nix real
blob - 81884659ed1a6b390cf2a32f319502bed97a3a68
blob + 62656591dcce166728dc61f4f0de25bab3cfce71
--- modules/niri.nix
+++ modules/niri.nix
if [ -n "$swaybg_pid" ]; then
kill "$swaybg_pid" 2>/dev/null || true
fi
- ${pkgs.swaybg}/bin/swaybg -o eDP-1 -i "$path" -m fill &
+ # Sin `-o`: swaybg pinta TODAS las salidas conectadas (y las que se
+ # enchufen después) con la misma imagen. Con `-o eDP-1` el monitor
+ # externo por HDMI se quedaba sin fondo -- la superficie propia de
+ # DMS que debería cubrirlo está rota en el escritorio normal (mismo
+ # bug #2299 que motiva este workaround).
+ ${pkgs.swaybg}/bin/swaybg -i "$path" -m fill &
swaybg_pid=$!
current="$path"
fi
--include 'session.json' "$statedir" 2>/dev/null || sleep 2
done
'')
+
+ # --- Presentar con espejo (proyector) ---
+ # niri NO espeja salidas de forma nativa. wl-mirror captura eDP-1 y la
+ # muestra fullscreen en la pantalla externa: presentás con `slides` (u otra
+ # cosa) mirando el portátil y controlando con el teclado, y el público ve
+ # la misma imagen en el proyector. Funciona con el Kitty Graphics Protocol
+ # del fork de slides (captura a nivel compositor, no del stream de la
+ # terminal -- por eso NO sirve tmux acá). Bind Mod+Shift+P en niri.kdl;
+ # volver a pulsarlo corta el espejo.
+ #
+ # El destino se autodetecta (primera salida conectada que NO sea eDP-1),
+ # así funciona con cualquier proyector/monitor sin importar si el conector
+ # es HDMI-A-1, DP-1 (adaptador USB-C), etc.
+ pkgs.wl-mirror
+ (pkgs.writeShellScriptBin "present-mirror" ''
+ if ${pkgs.procps}/bin/pkill -f 'wl-mirror .*--fullscreen-output'; then
+ exit 0
+ fi
+ target=$(${config.programs.niri.package}/bin/niri msg --json outputs \
+ | ${pkgs.jq}/bin/jq -r 'to_entries[] | select(.key != "eDP-1" and .value.current_mode != null) | .key' \
+ | head -n1)
+ if [ -z "$target" ]; then
+ ${pkgs.libnotify}/bin/notify-send "present-mirror" "No hay pantalla externa conectada" || true
+ exit 1
+ fi
+ exec ${pkgs.wl-mirror}/bin/wl-mirror --fullscreen-output "$target" eDP-1
+ '')
];
# --- DankMaterialShell ---