Calendario en la barra, prompt con rama de git, historial compartido e impresora

- 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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016UdJsHrbkmzhoCb6TthP2m
This commit is contained in:
Alejandro Guerrero 2026-09-27 22:04:47 +02:00
parent 68427bdf7a
commit 2870ac7dca
Signed by: alejandrogs73
GPG key ID: 1CFF10953BEE333C
6 changed files with 56 additions and 10 deletions

View file

@ -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

View file

@ -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'

21
home/.local/bin/calendario Executable file
View file

@ -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 " ", " <b><span foreground=\"#a7c080\">" hoy "</span></b> ", 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"

View file

@ -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; }

View file

@ -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 };

View file

@ -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" },
};