diff --git a/README-en.md b/README-en.md index 9a2473a..37a61dc 100644 --- a/README-en.md +++ b/README-en.md @@ -54,24 +54,21 @@ for example) and repeated safely: 6. `sistema` (system): copies `sistema/` into `/`, sets up `wpa_supplicant.conf` so wheel users can use `wpa_cli` without root and save networks, enables the runit services (dbus, turnstiled, - wpa_supplicant, dhcpcd, bluetoothd, acpid, openntpd, tlp, automontaje, - cupsd), removes NetworkManager, elogind, chronyd, avahi-daemon (the printer - has a fixed IP) and polkitd (if something asks for polkit, like libvirt, - D-Bus starts it on its own) and adds the user to the audio, video, input, - network, bluetooth, lpadmin (printer management) and `_pipewire` (realtime - priority for audio without rtkit) groups. `doas.conf` is checked with `doas - -C` before it is installed with mode 400. + wpa_supplicant, dhcpcd, bluetoothd, acpid, chronyd, tlp, automontaje, + cupsd), removes NetworkManager, elogind and polkitd (if something asks for + polkit, like udisks2 or libvirt, D-Bus starts it on its own) and adds the + user to the audio, video, input, network, bluetooth, lpadmin (printer + management) and `_pipewire` (realtime priority for audio without rtkit) + groups. `doas.conf` is checked with `doas -C` before it is installed with + mode 400. 7. `quitar` (remove): uninstalls what the repo no longer uses because something else replaces it: sudo (doas), feh (xwallpaper and nsxiv), gammastep (sct), autorandr (`pantallas`), blueman and pavucontrol (the `bluetooth` and `volumen` scripts), pinentry-gtk (pinentry-dmenu), vlc (mpv), btop, NetworkManager and tlp-rdw (wpa_supplicant, dhcpcd and the - `wifi` script), rtkit, elogind (turnstile), xss-lock (`inactivo`, with - xssstate), chrony (openntpd), avahi and nss-mdns (also removed from - `/etc/nsswitch.conf`) and nemo with upower (yazi; gvfs and udisks2 go with - nemo). sudo can be removed thanks to `sistema/etc/xbps.d/sin-sudo.conf` - (base-system depends on it), and it is only removed once `/etc/doas.conf` - is installed. + `wifi` script), rtkit and elogind (turnstile). sudo can be removed thanks + to `sistema/etc/xbps.d/sin-sudo.conf` (base-system depends on it), and it + is only removed once `/etc/doas.conf` is installed. Afterwards, log out and back in (for the groups) and run `startx`. @@ -91,9 +88,9 @@ elogind is systemd's logind on its own, and it is not needed here: - Devices (sound, video, input, bluetooth) are reached through the user's groups, not through the ACLs elogind gave the active session. -What stops working: mounting disks from a graphical file manager (udisks2 -asked polkit for an active session; now there is neither a file manager nor -udisks2). USB sticks are mounted by `automontaje`. +What stops working: mounting disks from a file manager (udisks2 asks polkit +for an active session, and there is none). USB sticks are mounted by +`automontaje`. ## Rebuilding after changing the config @@ -168,11 +165,6 @@ and which area is which is marked by the `\001`...`\004` bytes in | BT | `OFF`, or the connected device and its battery if it reports it (`VJ 901 100%`) | `bluetooth` menu: connect, disconnect, scan and pair, power off | | Power on or off | | | Date | Day and time | This month's calendar (`calendario`) | | | | -VOL and BT are not read every 2 s like the rest, but every 10 s or as soon as -`SIGUSR1` arrives (`lento` component in slstatus's `config.h`): `volumen`, -`bluetooth`, `wifi` and the clicks send it, so your own changes show up at -once and wpctl and bluetoothctl are not spawned every 2 s. - After changing dwm's `config.h`, reinstall and restart it for new clicks to work: `pkill -HUP dwm` restarts it without closing windows (restartsig and preserveonrestart patches). @@ -209,9 +201,8 @@ preserveonrestart patches). when the SSH key is already unlocked (so pinentry never pops up) and retries every hour. `marcadores ya` uploads it right away. To restore: Firefox > Bookmarks > Manage bookmarks > Import and Backup > Restore. -- After 30 minutes idle the screen locks with slock (`inactivo`, which - watches the X screensaver with `xssstate`) and one minute later it turns - off. Videos that ask to keep the screen on (mpv, Firefox) prevent it. +- After 30 minutes idle the screen locks with slock (`xss-lock`) and one + minute later it turns off. - USB sticks and SD cards: the `automontaje` service (runit, as root) mounts them in `/mnt/LABEL`, or `/mnt/sdXY` if they have no label, and unmounts them when removed, with a notification. FAT, exFAT and NTFS are owned by @@ -219,10 +210,6 @@ preserveonrestart patches). wrote to, run `sync` (or `doas umount /mnt/...`). - User folders in English and without accents (`user-dirs.dirs`): Documents, Downloads and Images. -- Folders ("Open folder" in Firefox, `xdg-open`) open in yazi inside st - (`home/.local/share/applications/yazi-st.desktop`). -- `ex file...` extracts almost anything with `bsdtar` (a `.bashrc` - function). ## Notes @@ -241,7 +228,5 @@ preserveonrestart patches). - In st, Ctrl+Shift+right click on an image opens it in `nsxiv`. - st shows images with the kitty graphics protocol; yazi detects it on its own and shows previews without ueberzugpp. -- slstatus.c has a hand-made change (not a patch): it counts `SIGUSR1` - signals so `lento` knows when to refresh. - slock is modified by hand (not a patch): clock, date, battery and a bottom bar with the state colour. diff --git a/README.md b/README.md index c0459e3..9f3360e 100644 --- a/README.md +++ b/README.md @@ -51,22 +51,20 @@ Hace siete pasos, que también se pueden lanzar por separado 6. `sistema`: copia `sistema/` en `/`, prepara `wpa_supplicant.conf` para que los de wheel usen `wpa_cli` sin root y guarden redes, activa los servicios de runit (dbus, turnstiled, wpa_supplicant, dhcpcd, bluetoothd, acpid, - openntpd, tlp, automontaje, cupsd), quita NetworkManager, elogind, chronyd, - avahi-daemon (la impresora va por IP fija) y polkitd (si algo pide polkit, - como libvirt, D-Bus lo arranca solo) y añade el usuario a los grupos audio, - video, input, network, bluetooth, lpadmin (para gestionar impresoras) y - `_pipewire` (prioridad de tiempo real para el audio sin rtkit). `doas.conf` - se valida con `doas -C` antes de instalarlo con modo 400. + chronyd, tlp, automontaje, cupsd), quita NetworkManager, elogind y polkitd + (si algo pide polkit, como udisks2 o libvirt, D-Bus lo arranca solo) y + añade el usuario a los grupos audio, video, input, network, bluetooth, + lpadmin (para gestionar impresoras) y `_pipewire` (prioridad de tiempo real + para el audio sin rtkit). `doas.conf` se valida con `doas -C` antes de + instalarlo con modo 400. 7. `quitar`: desinstala lo que el repo ya no usa porque lo sustituye otra cosa: sudo (doas), feh (xwallpaper y nsxiv), gammastep (sct), autorandr (`pantallas`), blueman y pavucontrol (scripts `bluetooth` y `volumen`), pinentry-gtk (pinentry-dmenu), vlc (mpv), btop, NetworkManager y tlp-rdw - (wpa_supplicant, dhcpcd y el script `wifi`), rtkit, elogind (turnstile), - xss-lock (`inactivo`, con xssstate), chrony (openntpd), avahi y nss-mdns - (también los quita de `/etc/nsswitch.conf`) y nemo con upower (yazi; con - nemo se van gvfs y udisks2). sudo se puede quitar gracias a - `sistema/etc/xbps.d/sin-sudo.conf` (base-system depende de él), y solo se - quita si `/etc/doas.conf` ya está instalado. + (wpa_supplicant, dhcpcd y el script `wifi`), rtkit y elogind (turnstile). + sudo se puede quitar gracias a `sistema/etc/xbps.d/sin-sudo.conf` + (base-system depende de él), y solo se quita si `/etc/doas.conf` ya está + instalado. Después hay que cerrar sesión y volver a entrar (por los grupos) y lanzar `startx`. @@ -87,9 +85,9 @@ elogind es el logind de systemd por separado, y aquí sobra: - Los dispositivos (sonido, vídeo, entrada, bluetooth) van por los grupos del usuario, no por las ACL que ponía elogind a la sesión activa. -Lo que deja de ir: montar discos desde un gestor de archivos gráfico (udisks2 -pedía a polkit una sesión activa; ya no hay ni gestor ni udisks2). Las -memorias USB las monta `automontaje`. +Lo que deja de ir: montar discos desde un gestor de archivos (udisks2 pide a +polkit una sesión activa, que ya no hay). Las memorias USB las monta +`automontaje`. ## Recompilar tras cambiar la configuración @@ -165,11 +163,6 @@ y qué zona es cada una lo marcan los bytes `\001`...`\004` de | BT | `OFF`, o el dispositivo conectado y su batería si la da (`VJ 901 100%`) | Menú `bluetooth`: conectar, desconectar, buscar y emparejar, apagar | | Encender o apagar | | | Fecha | Día y hora | Calendario del mes (`calendario`) | | | | -VOL y BT no se miran cada 2 s como el resto, sino cada 10 s o en cuanto -llega `SIGUSR1` (componente `lento` del `config.h` de slstatus): lo mandan -`volumen`, `bluetooth`, `wifi` y los clics, así que lo que cambias tú se ve al -momento y wpctl y bluetoothctl no se lanzan cada 2 s. - Si se cambia el `config.h` de dwm, hay que reinstalarlo y reiniciarlo para que los clics nuevos funcionen: `pkill -HUP dwm` lo relanza sin cerrar las ventanas (parches restartsig y preserveonrestart). @@ -205,9 +198,8 @@ ventanas (parches restartsig y preserveonrestart). con la clave SSH desbloqueada (para no sacar pinentry) y lo reintenta cada hora. `marcadores ya` la sube en el momento. Para restaurar: Firefox > Marcadores > Administrar marcadores > Importar y respaldar > Restaurar. -- Tras 30 minutos sin tocar nada se bloquea con slock (`inactivo`, que mira - el salvapantallas de X con `xssstate`) y un minuto después se apaga la - pantalla. Los vídeos que piden no apagarla (mpv, Firefox) lo evitan. +- 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) las monta en `/mnt/ETIQUETA`, o en `/mnt/sdXY` si no tienen etiqueta, y las desmonta al sacarlas, con una notificación. FAT, exFAT y NTFS quedan a @@ -215,10 +207,6 @@ ventanas (parches restartsig y preserveonrestart). memoria en la que se ha escrito, `sync` (o `doas umount /mnt/...`). - Carpetas del usuario en inglés y sin tildes (`user-dirs.dirs`): Documents, Downloads e Images. -- Las carpetas ("Abrir carpeta" en Firefox, `xdg-open`) se abren en yazi - dentro de st (`home/.local/share/applications/yazi-st.desktop`). -- `ex archivo...` descomprime casi cualquier cosa con `bsdtar` (función de - `.bashrc`). ## Notas @@ -236,7 +224,5 @@ ventanas (parches restartsig y preserveonrestart). - En st, Ctrl+Shift+clic derecho sobre una imagen la abre en `nsxiv`. - st muestra imágenes con el protocolo de gráficos de kitty; yazi lo detecta solo y enseña las vistas previas sin ueberzugpp. -- slstatus.c tiene un cambio a mano (no es un parche): cuenta las señales - `SIGUSR1` para que `lento` sepa cuándo refrescar. - slock está modificado a mano (no es un parche): reloj, fecha, batería y una barra inferior con el color del estado. diff --git a/home/.bashrc b/home/.bashrc index 2723258..dcff353 100644 --- a/home/.bashrc +++ b/home/.bashrc @@ -3,15 +3,8 @@ # ===================================================================== # --- 1. Entorno y Rutas --- -# Priorizar binarios locales y scripts de usuario. Si ya estaban (un bash -# dentro de otro), se quitan antes para no repetirlos. -for d in /usr/local/bin "$HOME/.local/bin"; do - PATH=":$PATH:" - PATH=${PATH//:$d:/:} - PATH=${PATH#:} - PATH="$d:${PATH%:}" -done -export PATH +# Priorizar binarios locales y scripts de usuario +export PATH="$HOME/.local/bin:/usr/local/bin:$PATH" export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) export GPG_TTY=$(tty) gpg-connect-agent updatestartuptty /bye >/dev/null 2>&1 @@ -78,20 +71,27 @@ alias esp32='doas chmod a+rw /dev/ttyUSB0' # --- 5. Funciones Útiles --- -# ex: descomprime lo que sea. bsdtar se entiende con tar (gz, bz2, xz, zst), -# zip, 7z, rar e iso; los comprimidos sueltos, con su herramienta. -# Uso: ex archivo.zip [otro.tar.gz ...] +# Comando 'ex': Descomprime LITERALMENTE CUALQUIER COSA +# Uso: ex archivo.zip | ex archivo.tar.gz ex() { - for f; do - case $f in - *.tar|*.tar.*|*.t?z|*.tbz2|*.zip|*.7z|*.rar|*.iso) bsdtar -xf "$f" ;; - *.gz) gunzip -k "$f" ;; - *.bz2) bunzip2 -k "$f" ;; - *.xz) unxz -k "$f" ;; - *.zst) unzstd "$f" ;; - *) echo "ex: no sé descomprimir '$f'" >&2 ;; + if [ -f "$1" ]; then + case $1 in + *.tar.bz2) tar xjf "$1" ;; + *.tar.gz) tar xzf "$1" ;; + *.bz2) bunzip2 "$1" ;; + *.rar) unrar x "$1" ;; + *.gz) gunzip "$1" ;; + *.tar) tar xf "$1" ;; + *.tbz2) tar xjf "$1" ;; + *.tgz) tar xzf "$1" ;; + *.zip) unzip "$1" ;; + *.Z) uncompress "$1";; + *.7z) 7z x "$1" ;; + *) echo "'$1' formato no reconocido por la función ex()" ;; esac - done + else + echo "'$1' no es un archivo válido" + fi } # Forzar IPv4 en Nix (IPv6 del sistema está roto) diff --git a/home/.config/mimeapps.list b/home/.config/mimeapps.list index 8e6f10b..9d96999 100644 --- a/home/.config/mimeapps.list +++ b/home/.config/mimeapps.list @@ -1,5 +1,4 @@ [Default Applications] -inode/directory=yazi-st.desktop x-scheme-handler/http=firefox.desktop x-scheme-handler/https=firefox.desktop x-scheme-handler/chrome=firefox.desktop @@ -12,7 +11,6 @@ application/x-extension-xhtml=firefox.desktop application/x-extension-xht=firefox.desktop [Added Associations] -inode/directory=yazi-st.desktop; x-scheme-handler/http=firefox.desktop; x-scheme-handler/https=firefox.desktop; x-scheme-handler/chrome=firefox.desktop; diff --git a/home/.local/bin/bluetooth b/home/.local/bin/bluetooth index 4d531ab..6cc803a 100755 --- a/home/.local/bin/bluetooth +++ b/home/.local/bin/bluetooth @@ -1,9 +1,8 @@ #!/bin/sh -# Menú de bluetooth con dmenu (clic izquierdo en BT de la barra). Arriba, los -# dispositivos conocidos (emparejados o de confianza; 󰂱 = conectado): elegir -# uno lo desconecta si está conectado y, si no, lo busca y se conecta (y lo -# vuelve a emparejar si hace falta). Debajo, buscar y emparejar uno nuevo y -# apagar el adaptador. Si está apagado, ofrece encenderlo. +# Menú de bluetooth con dmenu (clic izquierdo en BT de la barra): conectar o +# desconectar los dispositivos emparejados (󰂱 = conectado), buscar y +# emparejar uno nuevo y apagar el adaptador. Si está apagado, ofrece +# encenderlo. avisar() { notify-send -h string:x-dunst-stack-tag:bluetooth -i bluetooth "Bluetooth" "$1" @@ -12,36 +11,6 @@ avisar() { # "Device AA:BB:CC:DD:EE:FF Nombre" -> "Nombre (AA:BB:CC:DD:EE:FF)" lista() { sed -n 's/^Device \([^ ]*\) \(.*\)/\2 (\1)/p'; } mac() { printf '%s\n' "$1" | sed 's/.*(\([^)]*\))$/\1/'; } -buscar() { bluetoothctl --timeout "$1" scan on >/dev/null; } - -# Sin agente, bluetoothctl no puede emparejar; los auriculares no piden PIN. -emparejar() { - bluetoothctl --agent NoInputNoOutput pair "$1" >/dev/null && - bluetoothctl trust "$1" >/dev/null -} - -# conectar MAC: si no está emparejado lo empareja; si no está a la vista, lo -# busca unos segundos y lo vuelve a intentar. -conectar() { - if ! bluetoothctl info "$1" | grep -q 'Paired: yes'; then - emparejar "$1" || { buscar 8 && emparejar "$1"; } || return 1 - fi - bluetoothctl connect "$1" >/dev/null || - { buscar 8 && bluetoothctl connect "$1" >/dev/null; } -} - -# conectar_y_avisar "Nombre (MAC)" -conectar_y_avisar() { - nombre=${1% (*} - avisar "Conectando: $nombre..." - if conectar "$(mac "$1")"; then - avisar "Conectado: $nombre" - elif ! pgrep -x wireplumber >/dev/null; then - avisar "No se pudo conectar $nombre: wireplumber no está en marcha (sin él no hay audio)" - else - avisar "No se pudo conectar $nombre: ¿está encendido y cerca?" - fi -} if ! bluetoothctl show | grep -q 'Powered: yes'; then [ "$(echo Encender | menu -p Bluetooth:)" = Encender ] || exit 0 @@ -50,10 +19,10 @@ if ! bluetoothctl show | grep -q 'Powered: yes'; then fi conectados=$(bluetoothctl devices Connected | lista) -conocidos=$({ bluetoothctl devices Paired; bluetoothctl devices Trusted; } | lista | sort -u) +emparejados=$(bluetoothctl devices Paired | lista) opcion=$( - printf '%s\n' "$conocidos" | while IFS= read -r d; do + printf '%s\n' "$emparejados" | while IFS= read -r d; do [ -n "$d" ] || continue if printf '%s\n' "$conectados" | grep -qxF "$d"; then echo "󰂱 $d" @@ -73,19 +42,29 @@ case $opcion in ;; *" Buscar dispositivos") avisar "Buscando dispositivos durante 10 s..." - buscar 10 - nuevo=$(bluetoothctl devices | lista | awk -v e="$conocidos" ' + bluetoothctl --timeout 10 scan on >/dev/null + nuevo=$(bluetoothctl devices | lista | awk -v e="$emparejados" ' BEGIN { n = split(e, a, "\n"); for (i = 1; i <= n; i++) visto[a[i]] } !($0 in visto)' | menu -p Emparejar:) [ -n "$nuevo" ] || exit 0 - conectar_y_avisar "$nuevo" + m=$(mac "$nuevo") + if bluetoothctl pair "$m" >/dev/null && bluetoothctl trust "$m" >/dev/null && + bluetoothctl connect "$m" >/dev/null; then + avisar "Conectado: $nuevo" + else + avisar "No se pudo emparejar: $nuevo" + fi ;; "󰂱 "*) bluetoothctl disconnect "$(mac "$opcion")" >/dev/null && avisar "Desconectado: ${opcion#"󰂱 "}" ;; *) - conectar_y_avisar "${opcion#" "}" + if bluetoothctl connect "$(mac "$opcion")" >/dev/null; then + avisar "Conectado: ${opcion#" "}" + else + avisar "No se pudo conectar: ${opcion#" "}" + fi ;; esac pkill -USR1 -x slstatus diff --git a/home/.local/bin/inactivo b/home/.local/bin/inactivo deleted file mode 100755 index 1e831a9..0000000 --- a/home/.local/bin/inactivo +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -# Bloquea con slock cuando salta el salvapantallas de X (xset s en .xinitrc: -# 30 minutos sin tocar nada). Mira el estado con xssstate cada 5 s. Los -# vídeos que piden no apagar la pantalla (mpv, Firefox) paran el salvapantallas -# y así tampoco bloquea. Al suspender ya bloquea el hook de zzz. - -while :; do - if [ "$(xssstate -s)" = on ] && ! pgrep -x slock >/dev/null; then - slock - fi - sleep 5 -done diff --git a/home/.local/share/applications/yazi-st.desktop b/home/.local/share/applications/yazi-st.desktop deleted file mode 100644 index 1224d55..0000000 --- a/home/.local/share/applications/yazi-st.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Type=Application -Name=yazi -Comment=Carpetas con yazi en st (para xdg-open y Firefox) -Exec=st -e yazi %f -Terminal=false -MimeType=inode/directory; -NoDisplay=true diff --git a/home/.xinitrc b/home/.xinitrc index 12b8624..5c004a1 100644 --- a/home/.xinitrc +++ b/home/.xinitrc @@ -35,10 +35,10 @@ luz & bateria & marcadores & -# Bloquear con slock tras 30 minutos sin tocar nada (salvapantallas de X, -# lo vigila inactivo) y apagar la pantalla un minuto después. +# Bloquear con slock tras 30 minutos sin tocar nada, y apagar la pantalla un +# minuto después. Al suspender ya bloquea el hook de zzz (--ignore-sleep). xset s 1800 1800 xset dpms 0 0 1860 -inactivo & +xss-lock --ignore-sleep -- slock & exec dwm diff --git a/install.sh b/install.sh index 92d6ddc..6794881 100755 --- a/install.sh +++ b/install.sh @@ -18,28 +18,27 @@ PAQUETES=" libXrender-devel xorgproto imlib2-devel zlib-devel libxcrypt-devel xorg xinit setxkbmap xrandr dbus turnstile - picom dunst libnotify xwallpaper nsxiv maim xclip sct xssstate + picom dunst libnotify xwallpaper nsxiv maim xclip sct xss-lock pipewire wireplumber libspa-bluetooth alsa-pipewire - wpa_supplicant dhcpcd bluez acpid openntpd tlp + wpa_supplicant dhcpcd bluez acpid chrony tlp cups cups-filters hplip font-firacode nerd-fonts-symbols-ttf papirus-icon-theme papirus-folders sassc gnome-themes-extra qt5ct qt6ct opendoas gnupg pinentry-dmenu firefox thunderbird mpv neovim git fuse-sshfs unzip - yazi file bsdtar ffmpeg 7zip jq poppler fd ripgrep fzf zoxide resvg ImageMagick + yazi file ffmpeg 7zip jq poppler fd ripgrep fzf zoxide resvg ImageMagick " SUCKLESS="dwm st dmenu slstatus slock scroll clipmenu" # Tema GTK Everforest, en una versión fija para que siempre salga igual GTK_TEMA_REPO=https://github.com/Fausto-Korpsvart/Everforest-GTK-Theme GTK_TEMA_COMMIT=9b8be4d6648ae9eaae3dd550105081f8c9054825 -SERVICIOS="dbus turnstiled wpa_supplicant dhcpcd bluetoothd acpid openntpd tlp automontaje cupsd" +SERVICIOS="dbus turnstiled wpa_supplicant dhcpcd bluetoothd acpid chronyd tlp automontaje cupsd" # La red la llevan wpa_supplicant y dhcpcd. polkitd no hace falta como -# servicio: si algo lo pide (libvirt), D-Bus lo arranca. turnstiled sustituye -# a elogind y openntpd a chronyd. avahi-daemon (mDNS) no hace falta: la -# impresora va por IP fija. -SERVICIOS_FUERA="NetworkManager polkitd elogind chronyd avahi-daemon" +# servicio: si algo lo pide (udisks2, libvirt), D-Bus lo arranca. turnstiled +# sustituye a elogind. +SERVICIOS_FUERA="NetworkManager polkitd elogind" # _pipewire da prioridad de tiempo real al audio sin rtkit # (/etc/security/limits.d/25-pw-rlimits.conf, de pipewire). GRUPOS="audio video input network bluetooth lpadmin _pipewire" @@ -47,14 +46,11 @@ GRUPOS="audio video input network bluetooth lpadmin _pipewire" # nsxiv), gammastep (sct), autorandr (pantallas), blueman y pavucontrol # (scripts bluetooth y volumen), pinentry-gtk (pinentry-dmenu), vlc (mpv), # NetworkManager (wpa_supplicant, dhcpcd y el script wifi), rtkit (el grupo -# _pipewire), elogind (turnstile; Xorg arranca como root con Xorg.wrap y la -# tapa y los botones ya los lleva acpid), xss-lock (inactivo, con xssstate), -# chrony (openntpd), avahi y nss-mdns (nada los usa) y nemo con upower (yazi; -# con nemo se van gvfs y udisks2). +# _pipewire) y elogind (turnstile; Xorg arranca como root con Xorg.wrap y la +# tapa y los botones ya los lleva acpid). QUITAR=" sudo feh gammastep autorandr blueman pavucontrol pinentry-gtk gtk-engine-murrine vlc btop NetworkManager tlp-rdw rtkit elogind - xss-lock chrony avahi nss-mdns nemo upower " msg() { printf '\033[1;32m==>\033[0m %s\n' "$*"; } @@ -264,12 +260,6 @@ quitar() { # shellcheck disable=SC2086 root xbps-remove -Ry $fuera - # Sin nss-mdns, "mdns" sobra en la línea hosts de nsswitch.conf - if grep -q '^hosts:.*mdns' /etc/nsswitch.conf; then - root sed -i '/^hosts:/s/ mdns[a-z0-9_]*\( \[NOTFOUND=return\]\)\{0,1\}//g' \ - /etc/nsswitch.conf - fi - # Lo que puso aquí una versión anterior de sistema/ para elogind if [ -e /etc/elogind/logind.conf.d/10-acpid.conf ]; then root rm /etc/elogind/logind.conf.d/10-acpid.conf diff --git a/suckless/slstatus/config.h b/suckless/slstatus/config.h index ad21146..4482779 100644 --- a/suckless/slstatus/config.h +++ b/suckless/slstatus/config.h @@ -37,45 +37,6 @@ red(const char *unused) return bprintf("WiFi: %s", s); } -/* - * run_command, pero solo cada LENTO segundos o en cuanto llega SIGUSR1 (lo - * mandan los scripts volumen, bluetooth y wifi y los clics en la barra). Así - * VOL y BT no lanzan wpctl y bluetoothctl cada 2 s; lo que cambie por otro - * lado tarda como mucho LENTO segundos en verse. La cuenta de SIGUSR1 (usr1) - * la lleva slstatus.c. - */ -#define LENTO 10 - -static const char * -lento(const char *cmd) -{ - static struct { - const char *cmd; - char out[256]; - int ok; - sig_atomic_t usr1; - time_t t; - } c[4]; - struct timespec ahora; - const char *res; - size_t i; - - clock_gettime(CLOCK_MONOTONIC, &ahora); - for (i = 0; i < LEN(c) && c[i].cmd && c[i].cmd != cmd; i++) - ; - if (i == LEN(c)) - return run_command(cmd); - if (c[i].cmd && c[i].usr1 == usr1 && ahora.tv_sec - c[i].t < LENTO) - return c[i].ok ? c[i].out : NULL; - - c[i].cmd = cmd; - c[i].usr1 = usr1; - c[i].t = ahora.tv_sec; - if ((c[i].ok = (res = run_command(cmd)) != NULL)) - snprintf(c[i].out, sizeof(c[i].out), "%s", res); - return c[i].ok ? c[i].out : NULL; -} - /* * Los bytes \001 a \004 delimitan las zonas clicables de la barra * (parche statuscmd de dwm): la red, el volumen, el bluetooth y la fecha. Lo que hace @@ -89,11 +50,11 @@ static const struct arg args[] = { { battery_perc, "[ BAT: %s%%", "BAT1" }, { battery_state, " %s ] ", "BAT1" }, /* mismo volumen que maneja wpctl (PipeWire); MIC OFF si el micro está silenciado */ - { lento, "\002[ VOL: %s ]\002 ", "wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{ printf \"%d%%\", $2 * 100 + 0.5 } /MUTED/ { printf \" MUT\" }'; " + { run_command, "\002[ VOL: %s ]\002 ", "wpctl get-volume @DEFAULT_AUDIO_SINK@ | awk '{ printf \"%d%%\", $2 * 100 + 0.5 } /MUTED/ { printf \" MUT\" }'; " "wpctl get-volume @DEFAULT_AUDIO_SOURCE@ | grep -q MUTED && printf ' MIC OFF'" }, /* OFF si el adaptador está apagado; si no, el primer dispositivo conectado * y su batería, si la da ("Battery Percentage: 0x64 (100)" -> " 100%") */ - { lento, "\003[ BT: %s ]\003 ", "bluetoothctl show | grep -q 'Powered: yes' || { echo OFF; exit; }; " + { run_command, "\003[ BT: %s ]\003 ", "bluetoothctl show | grep -q 'Powered: yes' || { echo OFF; exit; }; " "set -- $(bluetoothctl devices Connected | head -1); [ $# -gt 0 ] || exit; " "m=$2; shift 2; printf %s \"$*\"; " "bluetoothctl info \"$m\" | awk -F'[()]' '/Battery Percentage/ { printf \" %s%%\", $2 }'" }, diff --git a/suckless/slstatus/slstatus.c b/suckless/slstatus/slstatus.c index 1a15525..16d88fe 100644 --- a/suckless/slstatus/slstatus.c +++ b/suckless/slstatus/slstatus.c @@ -19,7 +19,6 @@ struct arg { char buf[1024]; static volatile sig_atomic_t done; -static volatile sig_atomic_t usr1; /* SIGUSR1 recibidas, para lento() en config.h */ static Display *dpy; #include "config.h" @@ -29,8 +28,6 @@ terminate(const int signo) { if (signo != SIGUSR1) done = 1; - else - usr1++; } static void