archboot/usr/bin/archboot-clock.sh

124 lines
4.3 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-2.0-only
2008-10-20 22:39:25 +02:00
# written by Tobias Powalowski <tpowa@archlinux.org>
2023-07-14 09:36:44 +02:00
_ANSWER="/tmp/.clock"
2023-06-29 19:40:07 +02:00
_RUNNING_ARCH="$(uname -m)"
_TITLE="Archboot ${_RUNNING_ARCH} | Arch Linux Setup | Clock Configuration"
2023-01-09 09:05:40 +01:00
# _dialog()
# an el-cheapo dialog wrapper
#
# parameters: see dialog(1)
# returns: whatever dialog did
_dialog() {
dialog --backtitle "${_TITLE}" --aspect 15 "$@"
return $?
}
2023-07-13 16:29:56 +02:00
_abort() {
2023-07-14 12:32:09 +02:00
if _dialog --yesno "Abort Arch Linux Clock Configuration?" 5 45; then
2023-07-14 09:36:44 +02:00
[[ -e /tmp/.clock-running ]] && rm /tmp/.clock-running
[[ -e /tmp/.clock ]] && rm /tmp/.clock
2023-07-13 14:56:53 +02:00
clear
exit 1
else
2023-07-14 15:23:48 +02:00
_timezone
2023-07-13 14:56:53 +02:00
fi
}
2023-07-14 15:05:00 +02:00
_hwclock() {
2023-07-14 14:46:33 +02:00
_DATE_PROGRAM=timedatectl
2023-01-09 18:17:27 +01:00
echo 0.0 0 0.0 > /etc/adjtime
echo 0 >> /etc/adjtime
2023-01-09 09:05:40 +01:00
[[ "${_HARDWARECLOCK}" = "UTC" ]] && echo UTC >> /etc/adjtime
[[ "${_HARDWARECLOCK}" = "" ]] && echo LOCAL >> /etc/adjtime
if [[ "${_HARDWARECLOCK}" = "UTC" ]]; then
timedatectl set-local-rtc 0
else
timedatectl set-local-rtc 1
fi
2008-10-20 22:39:25 +02:00
}
2023-07-14 14:46:33 +02:00
_timezone () {
2023-07-14 15:23:48 +02:00
_REGIONS="America - Europe - Africa - Asia - Australia -"
#shellcheck disable=SC2086
if _dialog --title " Region Menu " --menu "" 11 30 6 ${_REGIONS} 2>${_ANSWER}; then
_REGION=$(cat ${_ANSWER})
_ZONES=""
else
_abort
fi
2023-07-14 15:03:14 +02:00
for i in $(timedatectl --no-pager list-timezones | grep -w "${_REGION}" | cut -d '/' -f 2 | sort -u); do
_ZONES="${_ZONES} ${i} -"
2023-01-09 09:05:40 +01:00
done
2023-07-14 15:03:14 +02:00
#shellcheck disable=SC2086
if _dialog --title " Timezone Menu " --menu "" 21 30 16 ${_ZONES} 2>${_ANSWER}; then
_ZONE=$(cat ${_ANSWER})
[[ "${_ZONE}" == "${_REGION}" ]] || _ZONE="${_REGION}/${_ZONE}"
_dialog --infobox "Setting Timezone to ${_ZONE}..." 3 50
timedatectl set-timezone "${_ZONE}"
sleep 3
else
_timezone
fi
2008-10-20 22:39:25 +02:00
}
2023-07-14 14:46:33 +02:00
_timeset() {
2023-07-14 14:49:05 +02:00
_SET_TIME=""
2023-07-14 14:46:33 +02:00
_HARDWARECLOCK=""
_DATE_PROGRAM=""
_dialog --yesno "Do you want to use UTC for your clock?\n\nIf you choose 'YES' UTC (recommended default) is used,\nwhich ensures daylightsaving is set automatically.\n\nIf you choose 'NO' Localtime is used, which means\nthe system will not change the time automatically.\nLocaltime is also prefered on dualboot machines,\nwhich also run Windows, because UTC may confuse it." 14 60 && _HARDWARECLOCK="UTC"
2023-07-14 15:05:00 +02:00
_hwclock
2023-07-14 14:46:33 +02:00
# check internet connection
if ping -c1 www.google.com &>/dev/null; then
if _dialog --yesno \
"Do you want to use the Network Time Protocol (NTP) for syncing your clock, by using the internet clock pool?" 6 60; then
_dialog --infobox "Syncing clock with NTP pool..." 3 45
# sync immediatly with standard pool
if ! systemctl restart systemd-timesyncd; then
_dialog --msgbox "An error has occured, time was not changed!" 0 0
2023-07-14 15:23:48 +02:00
_timeset
2023-01-09 09:05:40 +01:00
fi
2023-07-14 14:46:33 +02:00
# enable background syncing
timedatectl set-ntp 1
2023-07-14 14:49:05 +02:00
_SET_TIME=1
2023-01-09 09:05:40 +01:00
fi
2023-07-14 14:46:33 +02:00
fi
if [[ -z "${_SET_TIME}" ]]; then
timedatectl set-ntp 0
2023-07-14 15:12:42 +02:00
# display and ask to set date/time
if _dialog --title ' Date Setting' --calendar "Use <TAB> to navigate and arrow keys to change values." 0 0 0 0 0 2> ${_ANSWER}; then
_DATE="$(cat ${_ANSWER})"
else
_timeset
fi
if _dialog --title ' Time Setting ' --timebox "Use <TAB> to navigate and up/down to change values." 0 0 2> ${_ANSWER}; then
_TIME="$(cat ${_ANSWER})"
else
_timeset
fi
2023-07-14 14:46:33 +02:00
# save the time
# DD/MM/YYYY hh:mm:ss -> YYYY-MM-DD hh:mm:ss
_DATETIME="$(echo "${_DATE}" "${_TIME}" | sed 's#\(..\)/\(..\)/\(....\) \(..\):\(..\):\(..\)#\3-\2-\1 \4:\5:\6#g')"
timedatectl set-time "${_DATETIME}"
fi
2023-07-14 14:50:51 +02:00
if _dialog --cr-wrap --title " Confirmation Dialog " --yesno "$(${_DATE_PROGRAM})" 0 0; then
2023-07-14 14:46:33 +02:00
_dialog --infobox "Clock configuration completed successfully." 3 50
sleep 3
else
_timezone
fi
2008-10-20 22:39:25 +02:00
}
2023-03-07 17:29:18 +01:00
2023-07-14 09:36:44 +02:00
if [[ -e /tmp/.clock-running ]]; then
echo "clock already runs on a different console!"
echo "Please remove /tmp/.clock-running first to launch clock!"
2023-03-07 17:29:18 +01:00
exit 1
fi
2023-07-14 09:36:44 +02:00
: >/tmp/.clock-running
2023-07-14 15:23:48 +02:00
_timezone
_timeset
2023-07-14 09:36:44 +02:00
[[ -e /tmp/.clock-running ]] && rm /tmp/.clock-running
2008-10-20 22:39:25 +02:00
clear
exit 0
# vim: set ts=4 sw=4 et: