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:
parent
68427bdf7a
commit
2870ac7dca
6 changed files with 56 additions and 10 deletions
11
README.md
11
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.
|
Si `~/.gnupg` no existe todavía, no hace nada.
|
||||||
6. `sistema`: copia `sistema/` en `/`, activa los servicios de runit (dbus,
|
6. `sistema`: copia `sistema/` en `/`, activa los servicios de runit (dbus,
|
||||||
elogind, polkitd, NetworkManager, bluetoothd, acpid, chronyd, tlp,
|
elogind, polkitd, NetworkManager, bluetoothd, acpid, chronyd, tlp,
|
||||||
automontaje), quita dhcpcd y wpa_supplicant (NetworkManager ya gestiona la
|
automontaje, cupsd), quita dhcpcd y wpa_supplicant (NetworkManager ya gestiona la
|
||||||
red) y añade el usuario a los grupos audio, video, input, network y
|
red) y añade el usuario a los grupos audio, video, input, network,
|
||||||
bluetooth. Los archivos de `sudoers.d` se validan con `visudo` y se
|
bluetooth y lpadmin (para gestionar impresoras). Los archivos de `sudoers.d` se validan con `visudo` y se
|
||||||
instalan con modo 440.
|
instalan con modo 440.
|
||||||
|
|
||||||
Después hay que cerrar sesión y volver a entrar (por los grupos) y lanzar
|
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
|
- 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
|
como principal) al arrancar y cada vez que se conecta o desconecta una
|
||||||
(regla de udev en `sistema/`), y vuelve a pintar el fondo.
|
(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
|
- `~/.ssh/config` con alias: `ssh server` (10.0.0.10) y `forgejo`. Sin
|
||||||
claves: las da gpg-agent.
|
claves: las da gpg-agent.
|
||||||
- Tras 30 minutos sin tocar nada se bloquea con slock (`xss-lock`) y un
|
- Tras 30 minutos sin tocar nada se bloquea con slock (`xss-lock`) y un
|
||||||
|
|
|
||||||
21
home/.bashrc
21
home/.bashrc
|
|
@ -25,8 +25,25 @@ YELLOW='\[\e[0;33m\]'
|
||||||
BLUE='\[\e[0;34m\]'
|
BLUE='\[\e[0;34m\]'
|
||||||
NC='\[\e[0m\]' # Sin color
|
NC='\[\e[0m\]' # Sin color
|
||||||
|
|
||||||
# Formato: usuario@maquina:~/directorio$ (en colores)
|
# Rama de git (con * si hay cambios sin añadir y + si hay cambios añadidos)
|
||||||
PS1="${GREEN}\u@\h${NC}:${BLUE}\w${NC}\$ "
|
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) ---
|
# --- 3. Aliases Base (Comodidad y Seguridad) ---
|
||||||
alias ls='ls --color=auto'
|
alias ls='ls --color=auto'
|
||||||
|
|
|
||||||
21
home/.local/bin/calendario
Executable file
21
home/.local/bin/calendario
Executable 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"
|
||||||
|
|
@ -20,6 +20,7 @@ PAQUETES="
|
||||||
picom dunst libnotify feh maim xclip gammastep xss-lock autorandr
|
picom dunst libnotify feh maim xclip gammastep xss-lock autorandr
|
||||||
pipewire wireplumber libspa-bluetooth alsa-pipewire rtkit pavucontrol
|
pipewire wireplumber libspa-bluetooth alsa-pipewire rtkit pavucontrol
|
||||||
NetworkManager bluez blueman acpid chrony tlp tlp-rdw
|
NetworkManager bluez blueman acpid chrony tlp tlp-rdw
|
||||||
|
cups cups-filters hplip
|
||||||
font-firacode nerd-fonts-symbols-ttf papirus-icon-theme papirus-folders
|
font-firacode nerd-fonts-symbols-ttf papirus-icon-theme papirus-folders
|
||||||
sassc gtk-engine-murrine gnome-themes-extra qt5ct qt6ct
|
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
|
# 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_REPO=https://github.com/Fausto-Korpsvart/Everforest-GTK-Theme
|
||||||
GTK_TEMA_COMMIT=9b8be4d6648ae9eaae3dd550105081f8c9054825
|
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.
|
# NetworkManager gestiona la red él solo; estos servicios se pelean con él.
|
||||||
SERVICIOS_FUERA="dhcpcd wpa_supplicant"
|
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' "$*"; }
|
msg() { printf '\033[1;32m==>\033[0m %s\n' "$*"; }
|
||||||
die() { printf '\033[1;31merror:\033[0m %s\n' "$*" >&2; exit 1; }
|
die() { printf '\033[1;31merror:\033[0m %s\n' "$*" >&2; exit 1; }
|
||||||
|
|
|
||||||
|
|
@ -118,6 +118,8 @@ static const StatusCmd statuscmds[] = {
|
||||||
"3) if bluetoothctl show | grep -q 'Powered: yes'; "
|
"3) if bluetoothctl show | grep -q 'Powered: yes'; "
|
||||||
"then bluetoothctl power off; else bluetoothctl power on; fi >/dev/null" STATUSREFRESH " ;; "
|
"then bluetoothctl power off; else bluetoothctl power on; fi >/dev/null" STATUSREFRESH " ;; "
|
||||||
"esac", 3 },
|
"esac", 3 },
|
||||||
|
/* fecha: izquierdo el calendario del mes */
|
||||||
|
{ "case $BUTTON in 1) calendario ;; esac", 4 },
|
||||||
};
|
};
|
||||||
static const char *statuscmd[] = { "/bin/sh", "-c", NULL, NULL };
|
static const char *statuscmd[] = { "/bin/sh", "-c", NULL, NULL };
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,8 +38,8 @@ red(const char *unused)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Los bytes \001, \002 y \003 delimitan las zonas clicables de la barra
|
* Los bytes \001 a \004 delimitan las zonas clicables de la barra
|
||||||
* (parche statuscmd de dwm): la red, el volumen y el bluetooth. Lo que hace
|
* (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.
|
* cada clic está en statuscmds, en el config.h de dwm.
|
||||||
*/
|
*/
|
||||||
static const struct arg args[] = {
|
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 */
|
/* 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; }; "
|
{ run_command, "\003[ BT: %s ]\003 ", "bluetoothctl show | grep -q 'Powered: yes' || { echo OFF; exit; }; "
|
||||||
"bluetoothctl devices Connected | head -1 | cut -d' ' -f3-" },
|
"bluetoothctl devices Connected | head -1 | cut -d' ' -f3-" },
|
||||||
{ datetime, "[ %s ]", "%d/%m/%y %H:%M" },
|
{ datetime, "\004[ %s ]\004", "%d/%m/%y %H:%M" },
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue