From 2870ac7dca696b266c5694b1ebac5e4558a7ae5f Mon Sep 17 00:00:00 2001 From: alejandrogs73 Date: Sun, 27 Sep 2026 22:04:47 +0200 Subject: [PATCH] Calendario en la barra, prompt con rama de git, historial compartido e impresora MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - calendario (home/.local/bin): clic izquierdo en la fecha de la barra (zona \004 en slstatus, statuscmd 4 en dwm) muestra el mes en una notificación, empezando en lunes y con hoy en verde. - .bashrc: rama de git en el prompt (git-prompt.sh, con * y +) e historial grande, sin duplicados y compartido entre terminales. - install.sh: cups, cups-filters y hplip, servicio cupsd y grupo lpadmin. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_016UdJsHrbkmzhoCb6TthP2m --- README.md | 11 ++++++++--- home/.bashrc | 21 +++++++++++++++++++-- home/.local/bin/calendario | 21 +++++++++++++++++++++ install.sh | 5 +++-- suckless/dwm/config.h | 2 ++ suckless/slstatus/config.h | 6 +++--- 6 files changed, 56 insertions(+), 10 deletions(-) create mode 100755 home/.local/bin/calendario diff --git a/README.md b/README.md index 94d5429..29f22d9 100644 --- a/README.md +++ b/README.md @@ -44,9 +44,9 @@ Hace seis pasos, que también se pueden lanzar por separado Si `~/.gnupg` no existe todavía, no hace nada. 6. `sistema`: copia `sistema/` en `/`, activa los servicios de runit (dbus, elogind, polkitd, NetworkManager, bluetoothd, acpid, chronyd, tlp, - automontaje), quita dhcpcd y wpa_supplicant (NetworkManager ya gestiona la - red) y añade el usuario a los grupos audio, video, input, network y - bluetooth. Los archivos de `sudoers.d` se validan con `visudo` y se + automontaje, cupsd), quita dhcpcd y wpa_supplicant (NetworkManager ya gestiona la + red) y añade el usuario a los grupos audio, video, input, network, + bluetooth y lpadmin (para gestionar impresoras). Los archivos de `sudoers.d` se validan con `visudo` y se instalan con modo 440. Después hay que cerrar sesión y volver a entrar (por los grupos) y lanzar @@ -118,6 +118,11 @@ y muestran una notificación. - 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. +- Clic izquierdo en la fecha de la barra: calendario del mes en una + notificación (`calendario`), con el día de hoy en verde. +- bash: historial de 10 000 órdenes, sin duplicados y compartido entre + terminales; el prompt muestra la rama de git (`*` cambios sin añadir, + `+` añadidos). - `~/.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 diff --git a/home/.bashrc b/home/.bashrc index 238b9a1..ca407df 100644 --- a/home/.bashrc +++ b/home/.bashrc @@ -25,8 +25,25 @@ YELLOW='\[\e[0;33m\]' BLUE='\[\e[0;34m\]' NC='\[\e[0m\]' # Sin color -# Formato: usuario@maquina:~/directorio$ (en colores) -PS1="${GREEN}\u@\h${NC}:${BLUE}\w${NC}\$ " +# Rama de git (con * si hay cambios sin añadir y + si hay cambios añadidos) +if [ -f /usr/share/git/git-prompt.sh ]; then + . /usr/share/git/git-prompt.sh + GIT_PS1_SHOWDIRTYSTATE=1 +else + __git_ps1() { :; } +fi + +# Formato: usuario@maquina:~/directorio (rama)$ (en colores) +PS1="${GREEN}\u@\h${NC}:${BLUE}\w${YELLOW}\$(__git_ps1 ' (%s)')${NC}\$ " + +# --- Historial --- +# Grande, sin duplicados y compartido entre terminales: cada orden se guarda +# al momento y cada prompt lee las de las otras terminales. +HISTSIZE=10000 +HISTFILESIZE=20000 +HISTCONTROL=ignoreboth:erasedups +shopt -s histappend +PROMPT_COMMAND="history -a; history -n${PROMPT_COMMAND:+; $PROMPT_COMMAND}" # --- 3. Aliases Base (Comodidad y Seguridad) --- alias ls='ls --color=auto' diff --git a/home/.local/bin/calendario b/home/.local/bin/calendario new file mode 100755 index 0000000..4b1cbc9 --- /dev/null +++ b/home/.local/bin/calendario @@ -0,0 +1,21 @@ +#!/bin/sh +# Muestra el calendario del mes en una notificación (clic en la fecha de la +# barra de dwm), con la semana empezando en lunes y el día de hoy en verde. + +hoy=$(date +%-d) +mes=$(cal -m | head -1 | sed 's/^ *//; s/ *$//') + +# Resaltar el número de hoy (solo en las filas de días, no en la cabecera) +dias=$(cal -m | tail -n +2 | awk -v hoy="$hoy" ' + NR == 1 { print; next } + { + linea = " " $0 " " + sub(" " hoy " ", " " hoy " ", linea) + print substr(linea, 2, length(linea) - 2) + }') + +# Primera letra del mes en mayúscula ("septiembre 2026" -> "Septiembre 2026") +mes=$(printf %s "$mes" | sed 's/^./\U&/') + +notify-send -t 10000 -h string:x-dunst-stack-tag:calendario \ + -i x-office-calendar "$mes" "$dias" diff --git a/install.sh b/install.sh index 9fff2fd..539cdb5 100755 --- a/install.sh +++ b/install.sh @@ -20,6 +20,7 @@ PAQUETES=" 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 + cups cups-filters hplip font-firacode nerd-fonts-symbols-ttf papirus-icon-theme papirus-folders sassc gtk-engine-murrine gnome-themes-extra qt5ct qt6ct @@ -32,10 +33,10 @@ 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 elogind polkitd NetworkManager bluetoothd acpid chronyd tlp automontaje" +SERVICIOS="dbus elogind polkitd NetworkManager bluetoothd acpid chronyd tlp automontaje cupsd" # NetworkManager gestiona la red él solo; estos servicios se pelean con él. SERVICIOS_FUERA="dhcpcd wpa_supplicant" -GRUPOS="audio video input network bluetooth" +GRUPOS="audio video input network bluetooth lpadmin" msg() { printf '\033[1;32m==>\033[0m %s\n' "$*"; } die() { printf '\033[1;31merror:\033[0m %s\n' "$*" >&2; exit 1; } diff --git a/suckless/dwm/config.h b/suckless/dwm/config.h index 720799e..b3550b0 100644 --- a/suckless/dwm/config.h +++ b/suckless/dwm/config.h @@ -118,6 +118,8 @@ static const StatusCmd statuscmds[] = { "3) if bluetoothctl show | grep -q 'Powered: yes'; " "then bluetoothctl power off; else bluetoothctl power on; fi >/dev/null" STATUSREFRESH " ;; " "esac", 3 }, + /* fecha: izquierdo el calendario del mes */ + { "case $BUTTON in 1) calendario ;; esac", 4 }, }; static const char *statuscmd[] = { "/bin/sh", "-c", NULL, NULL }; diff --git a/suckless/slstatus/config.h b/suckless/slstatus/config.h index 66018ae..314de23 100644 --- a/suckless/slstatus/config.h +++ b/suckless/slstatus/config.h @@ -38,8 +38,8 @@ red(const char *unused) } /* - * Los bytes \001, \002 y \003 delimitan las zonas clicables de la barra - * (parche statuscmd de dwm): la red, el volumen y el bluetooth. Lo que hace + * 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 * cada clic está en statuscmds, en el config.h de dwm. */ static const struct arg args[] = { @@ -55,5 +55,5 @@ static const struct arg args[] = { /* OFF si el adaptador está apagado; si no, el primer dispositivo conectado */ { run_command, "\003[ BT: %s ]\003 ", "bluetoothctl show | grep -q 'Powered: yes' || { echo OFF; exit; }; " "bluetoothctl devices Connected | head -1 | cut -d' ' -f3-" }, - { datetime, "[ %s ]", "%d/%m/%y %H:%M" }, + { datetime, "\004[ %s ]\004", "%d/%m/%y %H:%M" }, };