Menú de sesión, pantallas con autorandr y alias de ssh

- apagado (home/.local/bin, Mod+Shift+Escape): dmenu con bloquear,
  suspender, salir de dwm, reiniciar y apagar; los tres últimos piden
  confirmación.
- sudoers.d/zzz pasa a sudoers.d/energia: zzz, poweroff y reboot sin
  argumentos y sin contraseña para wheel.
- autorandr en vez de la línea fija de xrandr: pantallas en fila al
  arrancar y al conectar o desconectar una (regla de udev propia con el
  perfil virtual horizontal); postswitch pone la interna como principal
  y vuelve a pintar el fondo.
- ~/.ssh/config con los alias server y forgejo; install.sh deja ~/.ssh
  en 700.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016UdJsHrbkmzhoCb6TthP2m
This commit is contained in:
Alejandro Guerrero 2026-09-27 21:56:04 +02:00
parent 2850a4fc73
commit 68427bdf7a
Signed by: alejandrogs73
GPG key ID: 1CFF10953BEE333C
10 changed files with 80 additions and 7 deletions

View file

@ -91,6 +91,7 @@ tocado.
| Mod+Shift+l | Bloquear la pantalla con `slock` |
| Mod+n | Volver a mostrar la última notificación (historial de dunst) |
| Mod+Shift+n | Cerrar todas las notificaciones |
| Mod+Shift+Escape | Menú de sesión: bloquear, suspender, salir de dwm, reiniciar o apagar (los tres últimos piden confirmación) |
| Mod+`-` / Mod+`+` | Reducir / aumentar los gaps |
| Mod+Shift+`+` | Gaps a 0 |
| Tecla de subir / bajar volumen | Volumen ±5% con `wpctl` (máximo 100%) |
@ -112,8 +113,13 @@ y muestran una notificación.
tty no.
- `.xinitrc` arranca también `gammastep` (luz cálida de 20:00 a 8:00, con
transición de una hora) y `bateria` (avisa al 15 % y, en rojo, al 5 %; al
3 % suspende con `sudo -n zzz`, permitido sin contraseña en
`sistema/etc/sudoers.d/zzz`).
3 % suspende con `sudo -n zzz`). Suspender, apagar y reiniciar no piden
contraseña (`sistema/etc/sudoers.d/energia`).
- Pantallas: `autorandr` las pone en fila (la del portátil a la izquierda y
como principal) al arrancar y cada vez que se conecta o desconecta una
(regla de udev en `sistema/`), y vuelve a pintar el fondo.
- `~/.ssh/config` con alias: `ssh server` (10.0.0.10) y `forgejo`. Sin
claves: las da gpg-agent.
- Tras 30 minutos sin tocar nada se bloquea con slock (`xss-lock`) y un
minuto después se apaga la pantalla.
- Memorias USB y tarjetas SD: el servicio `automontaje` (runit, como root)

View file

@ -0,0 +1,6 @@
#!/bin/sh
# Tras cambiar de pantallas: la interna del portátil (eDP*/LVDS*) como
# principal y el fondo pintado de nuevo con la geometría nueva.
interna=$(xrandr | awk '/^(eDP|LVDS)[^ ]* connected/ { print $1; exit }')
[ -n "$interna" ] && xrandr --output "$interna" --primary
feh --no-fehbg --bg-fill "$HOME/.local/share/wallpaper.jpg"

28
home/.local/bin/apagado Executable file
View file

@ -0,0 +1,28 @@
#!/bin/sh
# Menú de apagado con dmenu (Mod+Shift+Escape en dwm). Apagar, reiniciar y
# salir de dwm piden confirmación. Suspender, apagar y reiniciar usan sudo
# sin contraseña (sistema/etc/sudoers.d/energia).
menu() {
dmenu -i -p "$1" -fn "Fira Code:size=11" \
-nb "#2d353b" -nf "#d3c6aa" -sb "#a7c080" -sf "#2d353b"
}
confirmar() {
[ "$(printf 'No\nSí\n' | menu "¿$1?")" = "Sí" ]
}
opcion=$(printf '%s\n' \
"󰌾 Bloquear" \
"󰤄 Suspender" \
"󰍃 Salir de dwm" \
"󰜉 Reiniciar" \
"󰐥 Apagar" | menu "Sesión:")
case $opcion in
*Bloquear) slock ;;
*Suspender) sudo -n zzz ;;
*Salir*) confirmar "Salir de dwm" && pkill -TERM -x dwm ;;
*Reiniciar) confirmar "Reiniciar" && sudo -n reboot ;;
*Apagar) confirmar "Apagar" && sudo -n poweroff ;;
esac

22
home/.ssh/config Normal file
View file

@ -0,0 +1,22 @@
# Alias de mis máquinas. Aquí no hay claves: las da gpg-agent (SSH_AUTH_SOCK
# en .bashrc), así que este archivo puede ir en el repo sin problema.
# Servidor de casa (solo desde la red local)
Host server
HostName 10.0.0.10
User alejandro
# Forgejo: "git clone forgejo:alejandrogs73/suckless.git"
Host forgejo
HostName ssh.alejandrogs.es
User forgejo
Host ssh.alejandrogs.es
User forgejo
Host github.com
User git
Host *
# Mantener vivas las conexiones inactivas (evita cortes del router)
ServerAliveInterval 60

View file

@ -18,8 +18,11 @@ fi
export QT_QPA_PLATFORMTHEME=qt5ct
# Teclado y monitores primero; el fondo se pinta después con la geometría final.
# autorandr pone las pantallas conectadas en fila (la del portátil a la
# izquierda); al conectar o desconectar una, lo repite solo (regla de udev en
# sistema/) y vuelve a pintar el fondo (~/.config/autorandr/postswitch).
setxkbmap es
xrandr --output eDP --primary --auto --output HDMI-A-0 --mode 1280x720 --rate 60.00 --right-of eDP
autorandr --change --default horizontal
feh --no-fehbg --bg-fill "$HOME/.local/share/wallpaper.jpg" &
pipewire &

View file

@ -17,7 +17,7 @@ PAQUETES="
libXrender-devel xorgproto imlib2-devel zlib-devel libxcrypt-devel
xorg xinit setxkbmap xrandr dbus elogind polkit
picom dunst libnotify feh maim xclip gammastep xss-lock
picom dunst libnotify feh maim xclip gammastep xss-lock autorandr
pipewire wireplumber libspa-bluetooth alsa-pipewire rtkit pavucontrol
NetworkManager bluez blueman acpid chrony tlp tlp-rdw
font-firacode nerd-fonts-symbols-ttf papirus-icon-theme papirus-folders
@ -80,6 +80,8 @@ enlaces() {
# Las carpetas de home/.config/user-dirs.dirs (y la de las capturas)
mkdir -p "$HOME/Documents" "$HOME/Downloads" "$HOME/Images/Screenshots"
# ssh no quiere ~/.ssh accesible para otros
chmod 700 "$HOME/.ssh"
}
# Compila el tema GTK Everforest (verde, oscuro, paleta medium) en ~/.themes

View file

@ -0,0 +1,4 @@
# Suspender, apagar y reiniciar sin contraseña para los de wheel (solo esos
# comandos y sin argumentos). Los usan el script bateria (suspender al
# agotarse) y el menú de apagado (home/.local/bin/apagado).
%wheel ALL=(root) NOPASSWD: /usr/bin/zzz "", /usr/bin/poweroff "", /usr/bin/reboot ""

View file

@ -1,3 +0,0 @@
# El script bateria suspende con "sudo -n zzz" cuando la batería llega al
# límite. Solo zzz sin argumentos, sin contraseña, para los de wheel.
%wheel ALL=(root) NOPASSWD: /usr/bin/zzz ""

View file

@ -0,0 +1,4 @@
# Sustituye a la regla de autorandr (/usr/lib/udev/rules.d): al conectar o
# desconectar una pantalla, colocarlas todas en fila ("horizontal") en vez
# de buscar un perfil guardado llamado "default".
ACTION=="change", SUBSYSTEM=="drm", RUN+="/usr/bin/autorandr --batch --change --default horizontal"

View file

@ -136,6 +136,7 @@ static const Key keys[] = {
{ MODKEY|ShiftMask, XK_l, spawn, {.v = lockcmd } },
{ MODKEY, XK_n, spawn, SHCMD("dunstctl history-pop") },
{ MODKEY|ShiftMask, XK_n, spawn, SHCMD("dunstctl close-all") },
{ MODKEY|ShiftMask, XK_Escape, spawn, SHCMD("apagado") },
{ MODKEY, XK_b, togglebar, {0} },
{ MODKEY, XK_j, focusstack, {.i = +1 } },
{ MODKEY, XK_k, focusstack, {.i = -1 } },