#!/bin/bash
# lastact: arturo@2024-04-14
# desc: script que permite modificar parámetros del GRUB

FICHFUNCS="/usr/bin/vx-funcs-bash"
[ -f "${FICHFUNCS}" ] && . "${FICHFUNCS}" "null"

FICH="/etc/default/grub"
ASUNTO="Modificar Grub"

# 0) Comprobamos si se solicita ayuda y se muestra:
function vx_grub_help() {
    DESCRIPCION="Permite modificar parámetros de ${FICH}. Es necesario ser usuario root para ello. Deben pasarse como parámetros parejas de directivas y valores a asignar:
    IMPORTANTE: En valores que sean cadenas de texto será necesario especificar el valor entre comillas simples, entrecomillando con comillas dobles"
    EJEMPLOS=( "$(basename "${0}") \"GRUB_TIMEOUT\" \"2\"" )
    EJEMPLOS+=( "$(basename "${0}") \"GRUB_TIMEOUT\" \"5\" \"GRUB_CMDLINE_LINUX_DEFAULT\" '\"quiet splash pci=noaer pcie_aspm=off\"'" )
    vx-show_help_script "$(basename "${0}")" "${DESCRIPCION}" "${EJEMPLOS[@]}"
}

# 1) Comprobamos si se pide ayuda de como usar el comando, o no se pasan los suficientes parámetros:
vx-check_need_help "${1}" && vx_grub_help && exit 0
[[ -z "${2}" ]] && vx_grub_help && exit 1

# 2) Comprobamos que es el usuario root quien quiere ejecutar el programa, sino salimos:
MENSAJE="Necesitas permisos de root para ejecutar este script"
vx-check_user_root "${MENSAJE}"

# 3) Configuramos todas las directivas pasadas como parámetros y actualizamos el grub:
NECESARIO_ACTUALIZAR="false"
until [[ -z "${1}" ]] ; do
    PARAM="${1}"
    VALOR="${2}"
    VALOR_ACTUAL="$(crudini --get "${FICH}" "" "${PARAM}")"
    if [[ "${VALOR_ACTUAL}" ]] ; then
        if [[ "${VALOR_ACTUAL}" != "${VALOR}" ]] ; then
            NECESARIO_ACTUALIZAR="true"
            echo "# ${ASUNTO}: Modificamos ${PARAM}=${VALOR_ACTUAL} => ${PARAM}=${VALOR}" && \
            crudini --set "${FICH}" "" "${PARAM}" "${VALOR}"
        else
            echo "# ${ASUNTO}: No es necesario hacer nada => ${PARAM}=${VALOR}"
        fi
    fi
    shift 2
done
"${NECESARIO_ACTUALIZAR}" && update-grub
exit 0