Compare commits

...

14 Commits

Author SHA1 Message Date
Tuxliban Torvalds 187d1eaeda kupdates-void.ksh: update to 1.0 2023-05-25 20:41:52 -06:00
Tuxliban Torvalds b5c7edbc0d krwallpaper.ksh: update to 1.0
Se han añadido comentarios para entender cómo es que funciona el script
2023-05-25 03:31:29 -06:00
Tuxliban Torvalds a4fbd124da Reemplazo de espacios por tabulaciones 2023-05-25 03:24:33 -06:00
Tuxliban Torvalds 935ade622c kdirname: versión Korn Shell de dirname 2023-05-25 03:21:18 -06:00
Tuxliban Torvalds 2f1364820e kbasename: versión Korn Shell de basename 2023-05-25 03:20:12 -06:00
Tuxliban Torvalds c16fcaab3e calc: nueva función
Función que ayuda a realizar operaciones de matemáticas
2023-05-25 03:18:54 -06:00
Tuxliban Torvalds 24c634b943 Limpieza de scripts
Se eliminan scripts repetidos
2023-05-25 03:17:07 -06:00
Tuxliban Torvalds beaf9f4530 kxpkglocal.ksh: update to 1.0 2023-05-25 03:13:12 -06:00
Tuxliban Torvalds 96e50d8d5c xpkglocal.sh: update to 1.0 2023-05-25 02:15:08 -06:00
Tuxliban Torvalds 4b70abf8e0 sync_cloud.sh: update to 1.4 2023-05-25 01:57:57 -06:00
Tuxliban Torvalds bb91583e34 hosts.sh: update to 0.4 2023-05-25 01:41:53 -06:00
Tuxliban Torvalds 5f5d96ba11 ex: cambio de nombre
La función previamente se llamaba 'extraer' y ha sido renombrada a 'ex'
2023-05-25 01:36:03 -06:00
Tuxliban Torvalds 296564c092 docx2.sh: update to 1.0
Se ha añadido una función adicional para poder convertir documentos de 'Word' a texto plano
2023-05-25 01:31:35 -06:00
Tuxliban Torvalds 201872a69b countl: función renombrada
Anteriormente la función se llamaba count_lines
2023-05-24 22:03:03 -06:00
30 changed files with 438 additions and 698 deletions

View File

@ -1,9 +1,8 @@
# Añadir esta configuración en /root/.profile para personalizar el prompt para root
function admin_prompt
{
[[ $PWD == $HOME ]] && dir="~" || dir="${PWD#*/}"
print "${YELLOW}[$dir] ${GREEN}#${RED} "
function admin_prompt {
[[ $PWD == $HOME ]] && dir="~" || dir="${PWD#*/}"
print "${YELLOW}[$dir] ${GREEN}#${RED} "
}
PS1="\$(admin_prompt) "

15
functions_korn/calc Normal file
View File

@ -0,0 +1,15 @@
function calc {
# Comprobar si el comando bc está instalado
if ! command -v bc >/dev/null 2>&1; then
print "Error: bc no está instalado." >&2
return 1
fi
# Comprobar si se proporcionó una expresión matemática
if [[ $# -eq 0 ]]; then
print "Uso: calc EXPRESIÓN" >&2
return 1
fi
bc -l <<<"$*"
}

View File

@ -1,11 +1,12 @@
# Contar archivos o directorios en el directorio
# Esto funciona pasando la salida del glob a la función y luego contando el número de argumentos.
function count
{
# Uso:
# count /path/to/dir/* -> Total (archivos y directorios)
# count /path/to/dir/*/ -> Total de directorios
[[ -e $1 ]] && print "$#" || print 0
function count {
if [[ $# -eq 0 ]]; then
print "count /path/to/dir/* -> Total (archivos y directorios)" >&2
print "count /path/to/dir/*/ -> Total de directorios" >&2
return 1
elif
[[ -e $1 ]] && print "$#" || print 0
fi
}

View File

@ -1,13 +0,0 @@
# Obtener el número de líneas de un fichero
function count_lines
{
lines=0
while IFS= read -r line || [[ -n $line ]]; do
# lines=$((lines+1)) is slower than ((lines=lines+1))
((lines=lines+1))
done < "$1"
printf '%s\n' "$lines"
}

12
functions_korn/countl Normal file
View File

@ -0,0 +1,12 @@
# Obtener el número de líneas de un fichero
function countl
{
lines=0
while IFS= read -r line || [[ -n $line ]]; do
((lines=lines+1))
done < "$1"
printf '%s\n' "$lines"
}

29
functions_korn/ex Normal file
View File

@ -0,0 +1,29 @@
# Extrar archivos comprimidos y/o empaquetados
function ex
{
if [ -f "$1" ]; then
case $1 in
*.tar.bz2)
bsdtar -xvjf "$1"
;;
*.tar.gz)
bsdtar -xvzf "$1"
;;
*.rar)
bsdtar -xf "$1"
;;
*.tar.xz)
bsdtar -xvjf "$1"
;;
*.zip)
bsdtar -xf "$1"
;;
*.7z)
bsdtar -xf "$1"
;;
*)
print "El archivo $1 no puede ser extraído. Formato desconocido"
esac || return 1
fi
}

View File

@ -1,29 +0,0 @@
# Extrar archivos comprimidos y/o empaquetados
function ex
{
if [ -f "$1" ]; then
case $1 in
*.tar.bz2)
bsdtar -xvjf "$1"
;;
*.tar.gz)
bsdtar -xvzf "$1"
;;
*.rar)
bsdtar -xf "$1"
;;
*.tar.xz)
bsdtar -xvjf "$1"
;;
*.zip)
bsdtar -xf "$1"
;;
*.7z)
bsdtar -xf "$1"
;;
*)
print "El archivo $1 no puede ser extraído. Formato desconocido"
esac || return 1
fi
}

View File

@ -1,11 +1,10 @@
# Mostrar rama actual en directorios de git
function get_branch
{
BRANCH=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
if [[ ! -z ${BRANCH} ]]; then
print "${BRANCH}"
fi
function get_branch {
BRANCH=$(git rev-parse --abbrev-ref HEAD 2> /dev/null)
if [[ ! -z ${BRANCH} ]]; then
print "${BRANCH}"
fi
unset BRANCH
unset BRANCH
}

View File

@ -1,6 +1,5 @@
# Mostrar directorio de trabajo actual
function get_dir
{
printf '%s\n' ${PWD/$HOME/\~}
function get_dir {
printf '%s\n' ${PWD/$HOME/\~}
}

31
functions_korn/kbasename Normal file
View File

@ -0,0 +1,31 @@
# Versión Korn Shell de basename
function kbasename {
# Comprobar argumentos
if (($# == 0 || $# > 2 )); then
printf %s "\
Uso: ${0##*/} string [sufijo]
Ejemplos:
${0##*/} /path/foo.xyz
foo.xyz\n
${0##*/} /path/foo .xyz
foo
"
exit 1
fi
# Obtener el nombre base
BASE=${1##*/}
# Ver si se ha dado el argumento sufijo
if (($# > 1 )); then
# Mostrar nombre base sin sufijo
print ${BASE%$2}
else
# Mostrar nombre base
print $BASE
fi
}

12
functions_korn/kdirname Normal file
View File

@ -0,0 +1,12 @@
# Versión Korn Shell de dirname
function kdirname {
# Comprobar argumentos
if (($# ==0 || $# > 1)); then
print "Uso: ${0##*/} string"
exit 1
fi
# Obtener el nombre del directorio
print ${1%/*}
}

View File

@ -1,13 +1,12 @@
# Mostrar los manuales de los programa con color
function man
{
LESS_TERMCAP_mb=$(printf %b "\033[1;31m") \
LESS_TERMCAP_md=$(printf %b "\033[1;31m") \
LESS_TERMCAP_me=$(printf %b "\033[0m") \
LESS_TERMCAP_se=$(printf %b "\033[0m") \
LESS_TERMCAP_so=$(printf %b "\033[1;44;33m") \
LESS_TERMCAP_ue=$(printf %b "\033[0m") \
LESS_TERMCAP_us=$(printf %b "\033[1;32m") \
command man -a "$@"
function man {
LESS_TERMCAP_mb=$(printf %b "\033[1;31m") \
LESS_TERMCAP_md=$(printf %b "\033[1;31m") \
LESS_TERMCAP_me=$(printf %b "\033[0m") \
LESS_TERMCAP_se=$(printf %b "\033[0m") \
LESS_TERMCAP_so=$(printf %b "\033[1;44;33m") \
LESS_TERMCAP_ue=$(printf %b "\033[0m") \
LESS_TERMCAP_us=$(printf %b "\033[1;32m") \
command man -a "$@"
}

View File

@ -1,7 +1,6 @@
# Crear un directorio y cambiar a él
function mkcd
{
mkdir -p -- "$1" || return
cd -P -- "$1"
function mkcd {
mkdir -p -- "$1" || return
cd -P -- "$1"
}

View File

@ -1,9 +1,8 @@
# Prompt para usuario normal
function prompt
{
print "${GREEN}${PWD/$HOME/\~} ${CYAN}$(get_branch)"
print "${RED}-> ${YELLOW}$ ${NORM}"
function prompt {
print "${GREEN}${PWD/$HOME/\~} ${CYAN}$(get_branch)"
print "${RED}-> ${YELLOW}$ ${NORM}"
}
PS1="\$(prompt) "

View File

@ -1,11 +1,11 @@
# Consultar manuales de programa remotos
rman() {
if command -v lynx >/dev/null; then
lynx https://man.voidlinux.org/x86_64/"$@"
return 0
else
print "Instale el programa lynx"
return 1
fi
if command -v lynx >/dev/null; then
lynx https://man.voidlinux.org/x86_64/"$@"
return 0
else
print "Instale el programa lynx"
return 1
fi
}

View File

@ -1,5 +1,5 @@
# Consultar qué versión de shell korn se tiene en el sistema
ver() {
printf '%s\n' "Korn Shell: ${KSH_VERSION:-desconocida}"
printf '%s\n' "Korn Shell: ${KSH_VERSION:-desconocida}"
}

View File

@ -1,13 +1,14 @@
# Función que se encarga de determinar qué programa usar para escalar
# permisos de administrador
function which_sudo
{
if command -v sudo >/dev/null && sudo -l | grep -q -e ' ALL$' -e xbps-install; then
print sudo
elif command -v doas >/dev/null && [ -f /etc/doas.conf ]; then
print doas
elif [[ $(id -u) != 0 ]]; then
print su
fi
function which_sudo {
if [[ $(id -u) == 0 ]]; then
return
elif command -v sudo >/dev/null && id | grep -q wheel; then
print sudo
elif command -v doas >/dev/null && [ -f /etc/doas.conf ]; then
print doas
else
print su
fi
}

View File

@ -1,7 +1,21 @@
#!/bin/sh
# Script para convertir documentos de word a PDF usando pandoc
#
# Dependencias xelatex, pandoc
# Script para convertir documentos de word a PDF o a texto plano usando pandoc
#
# NOTA: Este script hace uso de la sustitución de parámetros para obtener el nombre del archivo (basename)
# y de su respectivo path (dirname). Se aprovecha esta funcionalidad del shell para evitar hacer uso de
# comandos externos.
#
# Este script utiliza en su mayoría el parámetro $2 el cual puede ser el archivo que se desea convertir o
# también puede ser el directorio donde se encuentran los archivos que se convertirán a formato pdf.
#
# Equivalencias sustituyendo al parámetro $2:
# 1. extensión: ${2##*.}
# 2. dirname: ${2%/*}
# 3. basename: ${2##*/}
# 4. pathfile sin extensión: ${2%.*} y ${_file%.*}
#
# Dependencias lualatex, pandoc
#
# Shell: POSIX compliant
# Autor: O. Sánchez <o-sanchez@linuxmail.org>
@ -11,57 +25,80 @@
script="${0##*/}"
# Revisar que las dependencias estén instaladas
if ! command -v xelatex > /dev/null; then
echo "Dependencia xelatex no encontrada en el sistema, instalándola..."
doas xbps-install -Sy texlive-XeTeX
elif ! command -v pandoc > /dev/null; then
echo "Dependencia pandoc no encontrada en el sistema, instalándola..."
doas xbps-install -Sy pandoc
fi
deps() {
if ! command -v lualatex >/dev/null 2>&1; then
echo "Error: 'texlive-LuaTeX' es requerido, instale el paquete"
return 1
elif ! command -v pandoc >/dev/null 2>&1; then
echo "Error: 'pandoc' es requerido, instale el paquete"
return 1
fi
}
ayuda() {
printf %s "\
Convierte documentos docx a formato PDF.
printf "%s" "\
Nombre: $script
Propósito: Convertir documentos docx a formato PDF o a texto plano (txt)
Uso: $script <arg> <directorio o archivo>
Ejemplo:
$script --conv /path/foo.docx Convierte archivo especificado
$script -c /path/ Convierte archivos compatibles del directorio especificado
Autor: O. Sánchez <o-sanchez@linuxmail.org> 2022 - 2023
Versión: 1.0 (25/05/2023)
Uso: $script <arg> <directorio o archivo>
--pdf | -p Convierte archivo(s) a formato PDF
--txt | -t Convierte archivo(s) a texto plano
--help | -h Mustra este mensaje de ayuda
EJEMPLOS:
$script --pdf /path/foo.docx Convierte archivo especificado
$script -t /path/ Convierte archivos compatibles del directorio especificado a texto plano
"
}
case $1 in
--conv|-c)
# Utilizar la sustitución de parámetros para obtener el nombre base del archivo
FILENAME=${2##*/}
# Si el segundo argumento existe y es un archivo con extensión tipo docx, realizar la conversión
# del documento a archivo tipo PDF
if [ -f "$2" ] && [ "${2##*.}" = "docx" ]; then
printf '%s\n' "Convirtiendo $FILENAME a formato PDF..."
pandoc "$2" -V geometry:"top=2cm, bottom=1.5cm, left=2.4cm, right=2.4cm" \
--pdf-engine=xelatex -o "${FILENAME%.*}.pdf"
exit 0
# Comprobar que el segundo argumento exista y se trate de un directorio.
elif [ -d "$2" ]; then
# Si en el directorio hay archivos con extensión tipo docx, convertirlos a archivo tipo PDF
for file in "$2"*.docx; do
[ -f "$file" ] || continue
FILES=${file##*/}
printf '%s' "Convirtiendo $FILES a formato PDF..."
pandoc "$file" -V geometry:"top=2cm, bottom=1.5cm, left=2.4cm, right=2.4cm" \
--pdf-engine=xelatex -o "${FILES%.*}.pdf"
done
exit 0
else
printf '%s' "\nERROR: el fichero o directorio no existe\n"
exit 1
fi
;;
--help|-h|*)
ayuda
esac
if deps; then
case $1 in
--pdf|-p)
# Si el segundo argumento existe y tiene terminación docx, realizar la conversión del documento
# a archivo tipo PDF
if [ -f "$2" ] && [ "${2##*.}" = "docx" ]; then
printf "%s\n" "Convirtiendo ${2##*/} a formato PDF..."
pandoc "$2" -V geometry:"top=2cm, bottom=1.5cm, left=2.4cm, right=2.4cm" \
--pdf-engine=lualatex -o "${2%.*}.pdf"
exit 0
# Comprobar que el segundo argumento exista y que se trate de un directorio.
elif [ -d "$2" ]; then
# Si en el directorio hay archivos con extensión tipo .docx, convertirlos a archivo tipo PDF
for _file in "$2"*.docx; do
[ -f "$_file" ] || continue
printf "%s\n" "Convirtiendo ${_file##*/} a formato PDF..."
pandoc "$_file" -V geometry:"top=2cm, bottom=1.5cm, left=2.4cm, right=2.4cm" \
--pdf-engine=lualatex -o "${_file%.*}.pdf"
done
exit 0
else
printf "%s" "\nERROR: el fichero o directorio no existe\n"
exit 1
fi
;;
--txt|-t)
if [ -f "$2" ] && [ "${2##*.}" = "docx" ]; then
printf "%s\n" "Convirtiendo ${2##*/} a texto plano..."
pandoc -s "$2" -t plain -o "${2%.*}".txt --wrap=none
exit 0
elif [ -d "$2" ]; then
for _file in "$2"*.docx; do
[ -f "$_file" ] || continue
printf "%s\n" "Convirtiendo ${_file##*/} a formato texto plano..."
pandoc "$_file" -t plain -o "${_file%.*}".txt --wrap=none
done
exit 0
else
printf "%s" "\nERROR: el fichero o directorio no existe\n"
exit 1
fi
;;
--help|-h|*)
ayuda
esac
fi

View File

@ -1,5 +1,5 @@
#!/bin/sh
# V0.3.2
# V0.4
# Script para descargar una lista personalizada con direcciones para bloquearlas
# a través del fichero hosts. Para automatizar este proceso se recomienda crear
# una tarea (crontab) y ajustarla a las necesidades del usuario (diario, semanal
@ -7,6 +7,7 @@
#
# Dependencias: dzen2, wget
#
# Shell: POSIX compliant
# Autor: O. Sánchez <o-sanchez@linuxmail.org>
msg() {
@ -15,23 +16,23 @@ msg() {
}
which_sudo() {
if [ "$(id -u)" -eq 0 ]; then
return
elif command -v sudo >/dev/null && sudo -l | grep -q -e ' ALL$' -e xbps-install; then
echo sudo
elif command -v doas >/dev/null && [ -f /etc/doas.conf ]; then
echo doas
else
echo su
fi
if [ "$(id -u)" -eq 0 ]; then
return
elif command -v sudo >/dev/null && id | grep -q wheel; then
echo sudo
elif command -v doas >/dev/null && [ -f /etc/doas.conf ]; then
echo doas
else
echo su
fi
}
SUDO=$(which_sudo)
admin=$(which_sudo)
# Realizar copia de seguridad del fichero hosts en caso de no existir
if [ ! -f /etc/hosts.bak ]; then
printf '%b' "\033[32;1mCreando copia de seguridad del fichero hosts...\033[0m\n"
$SUDO cp /etc/hosts /etc/hosts.bak
$admin cp /etc/hosts /etc/hosts.bak
printf "\033[33;1mCopia finalizada\033[0m\n"
else
printf '%b' "\033[35;5mYa existe copia de seguridad del fichero hosts\033[0m\n"
@ -41,7 +42,7 @@ fi
printf '%b' "\033[32;1mDescargando y copiando lista actualizada para fichero hosts...\033[0m\n"
wget -O /tmp/hosts http://sbc.io/hosts/alternates/fakenews-gambling-porn/hosts
"$HOME"/.local/bin/custom_sites
$SUDO mv /tmp/hosts /etc/hosts
$admin mv /tmp/hosts /etc/hosts
"$HOME"/.local/bin/dunst_sound 2>/dev/null
# Notificacion de actualizacion del fichero

View File

@ -1,36 +0,0 @@
#!/bin/ksh
# V0.4
# Script para descargar una lista personalizada con direcciones para bloquearlas
# a través del fichero hosts. Para automatizar este proceso se recomienda crear
# una tarea (crontab) y ajustarla a las necesidades del usuario (diario, semanal
# mensual, etc)
#
# Dependencias: dzen2, wget
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
function msg {
dzen2 -p '10' -fn 'JetBrains Mono:size=8:style=bold' -ta '5' \
-w '260' -x '1100' -y '25'
}
# which_sudo es una función personalizada de ksh
SUDO=$(which_sudo)
# Realizar copia de seguridad del fichero hosts en caso de no existir
if [[ ! -f /etc/hosts.bak ]]; then
printf '%b' "\033[32;1mCreando copia de seguridad del fichero hosts...\033[0m\n"
$SUDO cp /etc/hosts /etc/hosts.bak
printf "\033[33;1mCopia finalizada\033[0m\n"
else
printf '%b' "\033[35;5mYa existe copia de seguridad del fichero hosts\033[0m\n"
fi
# Descargar actualización más reciente del fichero hosts
printf '%b' "\033[32;1mDescargando y copiando lista actualizada para fichero hosts...\033[0m\n"
$SUDO wget -O /etc/hosts http://sbc.io/hosts/alternates/fakenews-gambling-porn/hosts
"$HOME"/.local/bin/dunst_sound 2> /dev/null
# Notificacion de actualizacion del fichero
printf '%b' "\033[36;1mFichero hosts actualizado.\033[0m\n"
printf '%s\n' "Lista de fichero hosts actualizado" | msg &

View File

@ -1,94 +0,0 @@
#!/bin/ksh
# Script para convertir documentos de word a PDF o a texto plano usando pandoc
#
# NOTA: Este script hace uso de la sustitución de parámetros para obtener el nombre del archivo (basename)
# y de su respectivo path (dirname). Se aprovecha esta funcionalidad del shell para evitar hacer uso de
# comandos externos.
# Este script utiliza en su mayoría el parámetro $2 el cual puede ser el archivo que se desea convertir o
# también puede ser el directorio donde se encuentran los archivos que se convertirán a formato pdf.
#
# Equivalencias sustituyendo al parámetro $2:
# 1. extensión: ${2##*.}
# 2. dirname: ${2%/*}
# 3. basename: ${2##*/}
# 4. pathfile sin extensión: ${file%.*}
#
# Dependencias lualatex, pandoc
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
# Nombre del script usando la sustitución de parámetros
script="${0##*/}"
# Revisar que las dependencias estén instaladas
if ! command -v lualatex > /dev/null; then
print "Dependencia lualatex no encontrada en el sistema, instalándola..."
doas xbps-install -Sy texlive-LuaTeX
elif ! command -v pandoc > /dev/null; then
print "Dependencia pandoc no encontrada en el sistema, instalándola..."
doas xbps-install -Sy pandoc
fi
function ayuda {
printf %s "\
Nombre: $script
Propósito: Convertir documentos docx a formato PDF o texto plano (txt)
Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
Versión: 1.0 (27/04/2023)
Uso: $script <arg> <directorio o archivo>
--pdf | -p Convierte archivo(s) a formato PDF
--txt | -t Convierte archivo(s) a texto plano
--help | -h Mustra este mensaje de ayuda
EJEMPLOS: $script --pdf /path/foo.docx Convierte archivo especificado
$script -t /path/ Convierte archivos compatibles del directorio especificado a texto plano
"
}
case $1 in
--pdf|-p)
# Si el segundo argumento existe y tiene terminación docx, realizar la conversión del documento
# a archivo tipo PDF
if [[ -f $2 && ${2##*.} == "docx" ]]; then
printf '%s\n' "Convirtiendo $FILENAME a formato PDF..."
pandoc "$2" -V geometry:"top=2cm, bottom=1.5cm, left=2.4cm, right=2.4cm" \
--pdf-engine=lualatex -o ${2%.*}.pdf
exit 0
# Comprobar que el segundo argumento exista y que se trate de un directorio.
elif [[ -d $2 ]]; then
# Si en el directorio hay archivos con extensión tipo .docx, convertirlos a archivo tipo PDF
for file in "$2"*.docx; do
[[ -f $file ]] || continue
printf '%s\n' "Convirtiendo ${file##*/} a formato PDF..."
pandoc "$file" -V geometry:"top=2cm, bottom=1.5cm, left=2.4cm, right=2.4cm" \
--pdf-engine=lualatex -o "${file%.*}".pdf
done
exit 0
else
printf '%s' "\nERROR: el fichero o directorio no existe\n"
exit 1
fi
;;
--txt|-t)
if [[ -f $2 && ${2##*.} == "docx" ]]; then
printf '%s\n' "Convirtiendo $FILENAME a texto plano..."
pandoc -s "$2" -t plain -o "${2%.*}".txt --wrap=none
exit 0
elif [[ -d $2 ]]; then
for file in "$2"*.docx; do
[[ -f $file ]] || continue
printf '%s\n' "Convirtiendo ${file##*/} a formato texto plano..."
pandoc "$file" -t plain -o "${file%.*}".txt --wrap=none
done
exit 0
else
printf '%s' "\nERROR: el fichero o directorio no existe\n"
exit 1
fi
;;
--help|-h|*)
ayuda
esac

View File

@ -1,35 +0,0 @@
#!/bin/ksh
# Dependencias: xinput
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
script="${0##*/}"
function ayuda {
printf %s "\
Script para desactivar teclado interno en portátiles mientras se está en el servidor gráfico.
Uso: $script [arg]
Ejemplo:
$script on Activa teclado interno
$script off Desactiva teclado interno
$script --help, -h Muestra este mensaje de ayuda
"
}
# Salir si existe un error
set -e
ID=$(xinput --list | awk '/Translated/ {print $7}' | cut -d '=' -f 2)
case "$1" in
on)
xinput set-int-prop "$ID" "Device Enabled" 8 1
;;
off)
xinput set-int-prop "$ID" "Device Enabled" 8 0
;;
--help|-h|*)
ayuda
esac

View File

@ -1,54 +1,67 @@
#!/bin/ksh
## Script que aleatoriza wallpaper
## Dependencias: ImageMagick
# v1.0 - 25/05/2023
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
# Script que aleatoriza wallpaper
# Dependencias: ImageMagick
#
# Autor: O. Sánchez <o-sanchez@linuxmail.org>
#
# Lista de códigos de salida
# 0 - éxito
# 10 - Dependencia no satisfecha
# 11 - Wallpaper no se modificó
# Función "deps" que se utiliza para verificar si ImageMagick está instalado
function deps {
# Si no se encuentra el comando "magick" (que es parte de ImageMagick) en el sistema,
# mostrar un mensaje de error
if ! command -v magick >/dev/null; then
printf '%s\n' "ImageMagick no disponible, instálelo"
return 10
else
# Si el comando "magick" está disponible, devolver un valor de 0 (éxito)
return 0
fi
}
# Obtener resolución de pantalla
read -r RES < /sys/class/graphics/fb0/virtual_size
# Obtener la resolución de la pantalla
read -r resolution < /sys/class/graphics/fb0/virtual_size
# Path wallpapers
DIR_WALL="$HOME/Datos/Imágenes/Wallpapers"
dir_wall="$HOME/Datos/Imágenes/Wallpapers"
# Obtener una lista de los archivos de imagen en el directorio de wallpapers
WALL=("$DIR_WALL"/*.{jpg,jpeg,png})
# Arreglo que contiene los wallpapers en el directorio dir_wall con extensiones .jpg, .jpeg, .png y webp
wall=("$dir_wall"/*.{jpg,jpeg,png,webp})
# Obtener un número aleatorio entre 0 y la cantidad de archivos de imagen en la lista
((RAND_INDEX=RANDOM % ${#WALL[@]}))
((rand_index=RANDOM % ${#wall[@]}))
# Obtener el nombre del archivo de imagen seleccionado
RAND_IMG="${WALL[$RAND_INDEX]}"
# Obtener la ruta completa del wallpaper seleccionado aleatoriamente
rand_img="${wall[$rand_index]}"
# Verificar si ImageMagick está instalado
if deps; then
# Comprobar que el archivo seleccionado exista
if [[ -f $RAND_IMG ]]; then
if [[ -f $rand_img ]]; then
# Si el archivo existe, configurarlo como wallpaper
display -resize "!${RES/,/x}" -window root "$RAND_IMG"
display -resize "!${resolution/,/x}" -window root "$rand_img"
exit 0
else
print "El archivo $RAND_IMG no existe."
if [[ ! -f $RAND_IMG ]]; then
((RAND_INDEX=RANDOM % ${#WALL[@]}))
RAND_IMG="${WALL[$RAND_INDEX]}"
display -resize "!${RES/,/x}" -window root "$RAND_IMG"
# Si el archivo no existe, mostrar un mensaje de error
print "El archivo $rand_img no existe."
# Obtener un índice aleatorio nuevamente
if [[ ! -f $rand_img ]]; then
((rand_index=RANDOM % ${#wall[@]}))
rand_img="${wall[$rand_index]}"
display -resize "!${resolution/,/x}" -window root "$rand_img"
fi
# Devolver un código de salida 11 (Wallpaper no se modificó)
exit 11
fi
else
# Si ImageMagick no está instalado, devolver un código de salida 10 (Dependencia no satisfecha)
exit 10
fi

View File

@ -1,138 +0,0 @@
#!/bin/ksh
# v1.3
# Script para sincronizar nube remota de dropbpox
# Dependencias: rclone, rclonesync, dzen2
#
# Lista de códigos de salida
# 0 - éxito
# 9 - operación exitosa, pero no se transfirieron archivos
# 10 - error temporal de sincronización
# 11 - error por falta de conexión
# 12 - error de dependencia
# 13 - error no categorizado de otra manera
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
set -u # salir si una variable no ha sido declarada
########## Verificar que las dependencias estén instaladas ##########
function deps {
if ! command -v rclone >/dev/null; then
printf '%b' "\033[31;5m[ERROR] Instale el paquete 'rclone'\033[0m\n"
return 12
elif ! command -v dzen2 >/dev/null; then
printf '%b' "\033[31;5m[ERROR] Instale el paquete 'dzen2'\033[0m\n"
return 12
# El cliente rclone de forma nativa ya soporta le sincronización bidirecional, por esa razón
# las siguiente líneas de código han sido comentadas.
# elif ! command -v rclonesync >/dev/null; then
# printf '%b' "\033[31;5m[ERROR] No está disponible 'rclonesync' en el sistema. Clonado \
# repositorio para instalar el ejecutable...\033[0m\n"
# git -C /tmp clone https://github.com/cjnaz/rclonesync-V2.git --depth 1
# [ -d "$HOME"/.local/bin ] || mkdir -p "$HOME/.local/bin"
# cp /tmp/rclonesync-V2/rclonesync "$HOME"/.local/bin
# export PATH="$HOME/.local/bin:$PATH"
# return 12
fi
}
########## Directorio para base de datos ##########
WORKDIR="$HOME"/.config/rclone
TMPFILE=$(mktemp /tmp/dropbox.XXXXXXXXXX)
if [[ ! -f $WORKDIR/dropbox.txt ]]; then
find "$HOME/Dropbox" -type f -exec md5sum {} \; > "$WORKDIR"/dropbox.txt
fi
########## Eliminar algún archivo residual que pudiera haber quedado ##########
for FILE in /tmp/dropbox*; do
[[ -f $FILE ]] || continue
rm "$FILE"
done
########## Sincronizar nube remota ##########
function check_diff {
find "$HOME/Datos/Dropbox" -type f -exec md5sum {} \; > "$TMPFILE"
DIFF=$(diff -q "$WORKDIR/dropbox.txt" "$TMPFILE")
if [[ -z $DIFF ]]; then
return 9
fi
}
# Rclone ya integra de forma nativa la sincronizacion bidireccional
#function sync {
# rclonesync "$HOME"/Dropbox MiDropbox: --check-access --check-filename=RCLONE_TEST \
# --filters-file "$HOME"/.config/rclone/Filtro.txt --rclone-args --copy-links \
# --multi-thread-streams=14 --transfers=14 >> "$HOME"/.config/rclone/log 2>&1
#}
#function first_sync {
# rclonesync "$HOME"/Dropbox MiDropbox: --first-sync --check-access --check-filename=RCLONE_TEST \
# --filters-file "$HOME"/.config/rclone/Filtro.txt --rclone-args --copy-links \
# --multi-thread-streams=14 --transfers=14 >> "$HOME"/.config/rclone/log 2>&1
#}
function first_sync {
/usr/bin/rclone bisync "$HOME"/Dropbox MiDropbox: --resync --check-access --check-filename=RCLONE_TEST \
--filters-file "$HOME"/.config/rclone/Filtro.txt --remove-empty-dirs --color AUTO --copy-links \
--multi-thread-streams=4 --transfers=8 --log-file "$HOME"/.config/rclone/dropbox.log 2>&1
}
function sync {
/usr/bin/rclone bisync "$HOME"/Dropbox MiDropbox: --check-access --check-filename=RCLONE_TEST \
--filters-file "$HOME"/.config/rclone/Filtro.txt --remove-empty-dirs --color AUTO --copy-links \
--multi-thread-streams=4 --transfers=8 --log-file "$HOME"/.config/rclone/dropbox.log 2>&1
}
function msg {
dzen2 -p 8 -e 'onstart=uncollapse' -fn 'JetBrains Mono:size=8:style=bold' -ta c \
-sa c -w 260 -x 1100 -y 25 -l 1
}
if deps; then
if check_diff; then
if ping -A -c 3 1.1.1.1 >/dev/null; then
if sync; then
print "Dropbox sincronizado" | msg &
print "Dropbox sincronizado"
mv "$TMPFILE" "$WORKDIR/dropbox.txt"
exit 0
else
first_sync
print "Dropbox sincronizado" | msg &
print "Dropbox sincronizado"
exit 10
fi
elif [[ $(ping -A -c 3 1.1.1.1 >/dev/null) == 1 ]]; then
printf '%s\n' "No se pudo sincronizar Dropbox" "Sin conexión a internet" | msg &
print "No se pudo sincronizar Dropbox. Sin conexión a internet\\n"
rm "$TMPFILE"
exit 11
else
rm "$TMPFILE"
printf '%s\n' "Ocurrieron errores" "Revisar el log" | msg &
print "Ocurrieron errores. Revisar el log\\n"
exit 13
fi
else
rm "$TMPFILE"
print "Operación exitosa, pero no se transfirieron archivos\\n"
exit 9
fi
fi
print "ERROR: Dependencias no satisfechas. Este script requiere tener instalado:"
#print "\\trclone\\n" "\\trclonesync\\n" "\\tdzen2\\n"
print "\\trclone\\n" "\\tdzen2\\n"
exit 12

View File

@ -1,4 +1,6 @@
#!/bin/ksh
# v1.0 - 25/05/2023
#
# Script que revisa si existen actualizaciones disponibles para el sistema
# Dependencas: dzen2
#
@ -8,15 +10,15 @@
# 3 - Paquetes rotos
# 4 - Operación exitosa, pero no hubo cambios
#
# NOTA: count_lines es una función personalizada de ksh
# NOTA: 'countl' es una función personalizada de ksh
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org> 2022 - 2023
# Autor: O. Sánchez <o-sanchez@linuxmail.org> 2022 - 2023
TMP_UPDATES=$(mktemp -d /tmp/updates_void.XXXX)
xbps-install -nuM 1>${TMP_UPDATES}/updates 2>${TMP_UPDATES}/error
UPDATES="$(count_lines ${TMP_UPDATES}/updates)"
BROKEN="$(< ${TMP_UPDATES}/error)"
PKGS="$(awk '{printf "%-25s %s\n", $1, $2}' ${TMP_UPDATES}/updates)"
tmp_updates=$(mktemp -d /tmp/updates_void.XXXX)
xbps-install -nuM 1>${tmp_updates}/updates 2>${tmp_updates}/error
updates="$(countl ${tmp_updates}/updates)"
broken="$(< ${tmp_updates}/error)"
pkgs="$(awk '{printf "%-25s %s\n", $1, $2}' ${tmp_updates}/updates)"
function deps {
@ -32,18 +34,18 @@ function msg {
}
if deps; then
if [[ -z $BROKEN && -n $UPDATES ]]; then
if [[ -z $broken && -n $updates ]]; then
"$HOME"/Dropbox/Gitea/scripts/varios/dunst_sound 2> /dev/null
printf '%s\n' "ACTUALIZACIONES DISPONIBLES: $UPDATES" "$PKGS" | msg &
rm -r ${TMP_UPDATES}
printf '%s\n' "ACTUALIZACIONES DISPONIBLES: $updates" "$pkgs" | msg &
rm -rf ${tmp_updates}
exit 0
elif [[ -n $BROKEN ]]; then
elif [[ -n $broken ]]; then
printf '%s\n' "HAY PAQUETES ROTOS" "$(awk '{printf "%-30s %s\n", $1, $5}' \
${TMP_UPDATES}/error)" | msg &
rm -r ${TMP_UPDATES}
${tmp_updates}/error)" | msg &
rm -rf ${tmp_updates}
exit 3
else
[[ -z $UPDATES ]] || rm -r ${TMP_UPDATES}
[[ -z $updates ]] || rm -rf ${tmp_updates}
exit 4
fi
fi

View File

@ -1,14 +0,0 @@
#!/bin/ksh
# Script que muestra el porcentaje activo del volumen del sistema
# Dependencias: alsa-utils
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
STATUS=$(amixer get Master | awk -F'[][]' 'END{ print $6 }')
LEVEL=$(amixer get Master | awk -F'[][]' 'END{ print $2 }')
if [[ $STATUS == on ]]; then
print "VOL $LEVEL"
else
print "VOL mute"
fi

View File

@ -4,18 +4,19 @@
# Dependencias: xbps-src, xtools, dzen2
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
# v1.0
set -u
TMP_DIR=$(mktemp -d /tmp/xpkglocal.XXXXX)
SUDO=$(which_sudo)
tmp_dir=$(mktemp -d /tmp/xpkglocal.XXXXX)
admin=$(which_sudo)
function do_install {
if [[ $SUDO == su ]]; then
if [[ $admin == su ]]; then
su root -c 'xbps-install "$@"' -- sh "$@"
else
"$SUDO" xbps-install "$@"
$admin xbps-install "$@"
fi
}
@ -26,13 +27,12 @@ function msg {
# Verificar que las dependencias estén instaladas
if ! command -v xpkg >/dev/null; then
printf '%s\n' "Instalando paquete xtools"
do_install -Sy xtools
elif ! command -v dzen2 > /dev/null; then
printf '%s\n' "Instalando paquete dzen2"
do_install -Sy dzen2
fi
for cmd in xpkg dzen2; do
if ! command -v $cmd >/dev/null 2>&1; then
printf '%b' "\033[31;5m[ERROR] '$cmd' es requerido, instalando el paquete...\033[0m\n"
do_install $cmd
fi
done
if [ ! -f "$HOME"/void-packages/xbps-src ]; then
printf '%s\n' "No se encontró repositorio git de Void Linux. Clonadolo..."
@ -43,25 +43,25 @@ if [ ! -f "$HOME"/void-packages/xbps-src ]; then
fi
# Crear lista de actualizaciones disponibles
:> "${TMP_DIR}"/releases
:> "${tmp_dir}"/releases
cd "$HOME"/void-packages || exit
for package in $(xpkg -m); do
./xbps-src update-check "$package" | tail -n 1 | tee -a "${TMP_DIR}"/releases > /dev/null
./xbps-src update-check "$package" | tail -n 1 | tee -a "${tmp_dir}"/releases > /dev/null 2>&1
done
uniq "${TMP_DIR}"/releases > "${TMP_DIR}"/upstream_releases
uniq "${tmp_dir}"/releases > "${tmp_dir}"/upstream_releases
UPDATES="$(count_lines ${TMP_DIR}/upstream_releases)"
RELEASES="$(awk '{printf "%-25s %s\n", $1, $3}' ${TMP_DIR}/upstream_releases)"
updates="$(countl ${tmp_dir}/upstream_releases)"
releases="$(awk '{printf "%-25s %s\n", $1, $3}' ${tmp_dir}/upstream_releases)"
if [[ -n $UPDATES ]]; then
print "$RELEASES"
printf '%s\n' "ACTUALIZACIONES EN UPSTREAM: $UPDATES" "$RELEASES" | msg &
rm -r ${TMP_DIR}
if [[ -n $updates ]]; then
print "$releases"
printf '%s\n' "ACTUALIZACIONES EN UPSTREAM: $updates" "$releases" | msg &
rm -rf ${tmp_dir}
exit 0
else
rm -r ${TMP_DIR}
rm -rf ${tmp_dir}
fi

View File

@ -1,106 +0,0 @@
#!/bin/ksh
#
# Script que elimina paquetes de la caché que ya no están instalados en el sistema
#
# NOTA: En caso de usar doas, es necesario que en el archivo de configuración se
# tenga configurada la persistencia, de lo contrario por cada archivo por eliminar
# será necesario confirmar introduciendo lo contraseña.
#
# Lista de códigos de salida
# 0 - éxito
# 9 - operación exitosa, pero no se encontraron archivos para eliminar
# 10 - operación exitosa, pero no se eliminaron los archivos encontrados
# 11 - respuesta seleccionada inválida
# 12 - mensaje de ayuda mostrado
#
# Autor: Tuxliban Torvalds <o-sanchez@linuxmail.org>
script="${0##*/}"
function ayuda {
printf %s "\
$script ayuda a eliminar definitivamente aquellos paquetes que quedan guardados en la caché del sistema.
Modo de uso:
$script <argumento>
--list | -l Muestra una lista de los paquetes que la no están en uso
--help | -h Muestra este mensaje de ayuda
"
}
# Identificar cómo escalar permisos de administrador
function admin {
if command -v sudo >/dev/null && sudo -l | grep -q -e ' ALL$' -e xbps-install; then
print sudo
elif command -v doas >/dev/null && [ -f /etc/doas.conf ]; then
print doas
elif [[ $(id -u) != 0 ]]; then
print su
fi
}
cache_dir=/var/cache/xbps
_arch=$(xbps-uhelper arch) # Obtener arquitectura
function lista {
# Obtener lista de paquetes instalados en el sistema
xbps-query -l | awk '{print $2}' > /tmp/installed.txt
# Obtener lista de paquetes en la caché del sistema
for package in /var/cache/xbps/*.xbps; do
base=${package##*/}
print "${base%."$_arch".xbps}"
done > /tmp/cache.txt
_diff=$(diff /tmp/cache.txt /tmp/installed.txt | awk '/</ {print $2}')
if [[ -n $_diff ]]; then
# Mostrar lista de paquetes que no están en la caché y que no se encuentran instalados
printf '%s\n\n' "Los siguiente paquetes ya no se encuentran instalados en el sistema:"
printf '%s\n' $_diff | column
else
printf '%s\n\n' "No hay paquetes por eliminar"
exit 9
fi
}
case $1 in
-l|--list)
lista
printf '\n%s\n' "¿Deseas eliminar los paquetes? s/n"
read -r respuesta
case "$respuesta" in
[sS])
diff /tmp/cache.txt /tmp/installed.txt | awk '/</ {print $2}' > /tmp/delete.txt
print "Ingrese la contraseña de administrador:"
print "Eliminando los paquetes..."
while read -r pkg; do
cmd=$(admin)
if [ "$cmd" = "sudo" ]; then
sudo rm -fv "${cache_dir}/${pkg}.${_arch}.xbps"
elif [ "$cmd" = "doas" ]; then
doas rm -fv "${cache_dir}/${pkg}.${_arch}.xbps"
elif [ "$cmd" = "su" ]; then
su -c "rm -fv ${cache_dir}/${pkg}.${_arch}.xbps"
fi
done < /tmp/delete.txt
rm -f /tmp/*.txt
exit 0
;;
[nN])
rm -f /tmp/*.txt
exit 10
;;
*)
print "Respuesta inválida."
rm -f /tmp/*.txt
exit 11
esac
;;
-h|--help|*)
ayuda
exit 12
esac

View File

@ -1,7 +1,8 @@
#!/bin/sh
# v1.3
#
# v1.4
# Script para sincronizar nube remota de dropbpox
# Dependencias: rclone, rclonesync, dzen2
# Dependencias: rclone, dzen2, rclonesync (opcional)
#
# Lista de códigos de salida
# 0 - éxito
@ -21,95 +22,154 @@ set -u # salir si una variable no ha sido declarada
########## Verificar que las dependencias estén instaladas ##########
deps() {
if ! command -v rclone >/dev/null; then
printf '%b' "\033[31;5m[ERROR] Instale el paquete 'rclone'\033[0m\n"
return 12
elif ! command -v dzen2 >/dev/null; then
printf '%b' "\033[31;5m[ERROR] Instale el paquete 'dzen2'\033[0m\n"
return 12
elif ! command -v rclonesync >/dev/null; then
printf '%b' "\033[31;5m[ERROR] No está disponible 'rclonesync' en el sistema. Clonado \
repositorio para instalar el ejecutable...\033[0m\n"
git -C /tmp clone https://github.com/cjnaz/rclonesync-V2.git --depth 1
[ -d "$HOME/.local/bin" ] || mkdir -p "$HOME/.local/bin"
cp /tmp/rclonesync-V2/rclonesync "$HOME"/.local/bin
export PATH="$HOME/.local/bin:$PATH"
return 12
fi
for cmd in rclone dzen2; do
if ! command -v $cmd >/dev/null 2>&1; then
printf '%b' "\033[31;5m[ERROR] '$cmd' es requerido, instale el paquete\033[0m\n"
return 12
fi
done
# El cliente rclone de forma nativa ya soporta le sincronización bidirecional, por esa razón
# las siguiente líneas de código han sido comentadas.
# if ! command -v rclonesync >/dev/null; then
# echof '%b' "\033[31;5m[ERROR] No está disponible 'rclonesync' en el sistema. Clonado \
# repositorio para instalar el ejecutable...\033[0m\n"
# git -C /tmp clone https://github.com/cjnaz/rclonesync-V2.git --depth 1
# [ -d "$HOME"/.local/bin ] || mkdir -p "$HOME/.local/bin"
# cp /tmp/rclonesync-V2/rclonesync "$HOME"/.local/bin
# export PATH="$HOME/.local/bin:$PATH"
# return 12
# fi
}
########## Directorio para base de datos ##########
WORKDIR="$HOME"/.config/rclone
TMPFILE=$(mktemp /tmp/dropbox.XXXXXXXXXX)
workdir="$HOME"/.config/rclone
tmpfile=$(mktemp /tmp/dropbox.XXXXXXXXXX)
if [ ! -f "$WORKDIR/dropbox.txt" ]; then
find "$HOME/Dropbox" -type f -exec md5sum {} \; > "$WORKDIR"/dropbox.txt
if [ ! -f "$workdir"/dropbox.txt ]; then
find "$HOME/Dropbox" -type f -exec md5sum {} \; > "$workdir"/dropbox.txt
fi
########## Eliminar algún archivo residual que pudiera haber quedado ##########
for FILE in /tmp/dropbox*; do
[ -f "$FILE" ] || continue
rm "$FILE"
for _file in /tmp/dropbox*; do
[ -f "$_file" ] || continue
rm "$_file"
done
########## Sincronizar nube remota ##########
check_diff() {
find "$HOME/Datos/Dropbox" -type f -exec md5sum {} \; > "$TMPFILE"
DIFF=$(diff -q "$WORKDIR/dropbox.txt" "$TMPFILE")
if [ -z "$DIFF" ]; then
find "$HOME/Datos/Dropbox" -type f -exec md5sum {} \; > "$tmpfile"
_diff=$(diff -q "$workdir/dropbox.txt" "$tmpfile")
if [ -z "$_diff" ]; then
return 9
fi
}
sync() {
rclonesync "$HOME"/Dropbox MiDropbox: --check-access --check-filename=RCLONE_TEST \
--filters-file "$HOME"/.config/rclone/Filtro.txt --rclone-args --copy-links \
--multi-thread-streams=14 --transfers=14 >> "$HOME"/.config/rclone/log 2>&1
}
# Rclone ya integra de forma nativa la sincronizacion bidireccional
# sync() {
# "$HOME"/.local/bin/rclonesync "$HOME"/Dropbox MiDropbox: \
# --check-access \
# --check-filename=RCLONE_TEST \
# --filters-file "$HOME"/.config/rclone/Filtro.txt \
# --max-deletes 75 \
# --rclone-args \
# --copy-links \
# --multi-thread-streams=4 \
# --transfers=8 >> "$HOME"/.config/rclone/rclonesync.log 2>&1
# }
# first_sync() {
# "$HOME"/.local/bin/rclonesync "$HOME"/Dropbox MiDropbox: \
# --first-sync \
# --check-access \
# --check-filename=RCLONE_TEST \
# --filters-file "$HOME"/.config/rclone/Filtro.txt \
# --max-deletes 75 \
# --rclone-args \
# --copy-links \
# --multi-thread-streams=4 \
# --transfers=8 >> "$HOME"/.config/rclone/rclonesync.log 2>&1
# }
first_sync() {
rclonesync "$HOME"/Dropbox MiDropbox: --first-sync --check-access --check-filename=RCLONE_TEST \
--filters-file "$HOME"/.config/rclone/Filtro.txt --rclone-args --copy-links \
--multi-thread-streams=14 --transfers=14 >> "$HOME"/.config/rclone/log 2>&1
/usr/bin/rclone bisync "$HOME"/Dropbox MiDropbox: \
--resync \
--check-access \
--check-filename=RCLONE_TEST \
--filters-file "$HOME"/.config/rclone/Filtro.txt \
--max-delete 75 \
--remove-empty-dirs \
--color AUTO \
--copy-links \
--multi-thread-streams=4 \
--transfers=8 \
--log-file "$HOME"/.config/rclone/rclone.log 2>&1
}
sync() {
/usr/bin/rclone bisync "$HOME"/Dropbox MiDropbox: \
--check-access \
--check-filename=RCLONE_TEST \
--filters-file "$HOME"/.config/rclone/Filtro.txt \
--max-delete 75 \
--remove-empty-dirs \
--color AUTO \
--copy-links \
--multi-thread-streams=4 \
--transfers=8 \
--log-file "$HOME"/.config/rclone/rclone.log 2>&1
}
msg() {
dzen2 -p 8 -e 'onstart=uncollapse' -fn 'JetBrains Mono:size=8:style=bold' -ta c \
-sa c -w 260 -x 1100 -y 25 -l 1
}
-sa c -w 260 -x 1100 -y 25 -l 1
}
if deps; then
if check_diff; then
if doas ping -A -q -c 3 1.1.1.1; then
if ping -A -q -c 3 1.1.1.1 >/dev/null; then
if sync; then
echo "Dropbox sincronizado" | msg &
mv "$TMPFILE" "$WORKDIR/dropbox.txt"
echo "Dropbox sincronizado"
mv "$tmpfile" "$workdir/dropbox.txt"
exit 0
else
first_sync
echo "Dropbox sincronizado" | msg &
echo "Dropbox sincronizado"
mv "$tmpfile" "$workdir/dropbox.txt"
exit 10
fi
elif [ "$(ping -A -q -c 3 1.1.1.1)" -eq 1 ]; then
elif [ "$(ping -A -c 3 1.1.1.1 >/dev/null)" = 1 ]; then
printf '%s\n' "No se pudo sincronizar Dropbox" "Sin conexión a internet" | msg &
rm "$TMPFILE"
printf '%s\n' "No se pudo sincronizar Dropbox. Sin conexión a internet"
rm -f "$tmpfile"
exit 11
else
rm "$TMPFILE"
rm -f "$tmpfile"
printf '%s\n' "Ocurrieron errores" "Revisar el log" | msg &
printf '%s\n' "Ocurrieron errores. Revisar el log"
exit 13
fi
else
rm "$TMPFILE"
rm -f "$tmpfile"
printf '%s\n' "Operación exitosa, pero no se transfirieron archivos"
exit 9
fi
fi
printf %s "\
ERROR: Dependencias no satisfechas. Este script requiere tener instalado:
rclone
dzen2
"
exit 12

View File

@ -5,15 +5,14 @@
#
# Shell: POSIX compliant
# Autor: O. Sánchez <o-sanchez@linuxmail.org>
# v1.0
set -u
unset POSIXLY_CORRECT
TMP_DIR=$(mktemp /tmp/xpkglocal.XXXXXXXXXX)
mkdir "${TMP_DIR}"
TMP_DIR=$(mktemp -d /tmp/xpkglocal.XXXXXXXXXX)
which_sudo() {
if command -v sudo >/dev/null && sudo -l | grep -q -e ' ALL$' -e xbps-install; then
if command -v sudo >/dev/null && id | grep -q wheel; then
echo sudo
elif command -v doas >/dev/null && [ -f /etc/doas.conf ]; then
echo doas
@ -22,11 +21,13 @@ which_sudo() {
fi
}
admin=$(which_sudo)
do_install() {
if [ "$SUDO" = su ]; then
if [ "$admin" = su ]; then
su root -c 'xbps-install "$@"' -- sh "$@"
else
$SUDO xbps-install "$@"
$admin xbps-install "$@"
fi
}
@ -36,15 +37,11 @@ msg(){
}
# Verificar que las dependencias estén instaladas
if ! command -v xpkg >/dev/null; then
printf '%s\n' "Instalando paquete xtools"
SUDO=$(which_sudo)
do_install -Sy xtools
elif ! command -v dzen2 > /dev/null; then
printf '%s\n' "Instalando paquete dzen2"
SUDO=$(which_sudo)
do_install -Sy dzen2
fi
for cmd in xpkg dzen2; do
if ! command -v $cmd >/dev/null 2>&1; then
printf '%b' "\033[31;5m[ERROR] '$cmd' es requerido, instalando el paquete...\033[0m\n"
fi
done
if [ ! -f "$HOME/void-packages/xbps-src" ]; then
printf '%s\n' "No se encontró repositorio git de Void Linux. Clonadolo..."
@ -71,8 +68,8 @@ RELEASES="$(awk '{print $1"\t"$3}' "${TMP_DIR}"/upstream_releases | column -t)"
if [ "$UPDATES" -gt 0 ]; then
printf '%s\n' "$RELEASES"
printf '%s\n' "ACTUALIZACIONES EN UPSTREAM: $UPDATES" "$RELEASES" | msg &
rm -rf ${TMP_DIR}
exit 0
else
rm -rf ${TMP_DIR}
fi
rm -r "$TMP_DIR"
exit 0