Compare commits

..

31 commits

Author SHA1 Message Date
ca5de693dc
txt/locale
Some checks failed
/ arch (push) Successful in 2m58s
/ alpine (push) Successful in 2m28s
/ fedora (push) Successful in 12m21s
/ opensuse (push) Successful in 3m37s
/ alma (push) Successful in 12m24s
/ rocky (push) Successful in 13m2s
/ ubuntu (push) Successful in 7m6s
/ debian (push) Failing after 3m44s
2024-09-08 19:42:49 +02:00
ec14e2ae72
txt/locales 2024-09-08 19:41:26 +02:00
acae6216d0
mv 2024-09-08 19:39:30 +02:00
794abeb351
pkg/query 2024-09-08 19:36:55 +02:00
8d86912ab1
pkg/upgrade 2024-09-08 19:29:47 +02:00
14ef58e1fc
pkg/update 2024-09-08 19:28:14 +02:00
eaa19846b8
pkg/install 2024-09-08 19:26:33 +02:00
d440c047e7
pm 2024-09-08 19:24:54 +02:00
1ea1aff7bb
pkg/clean 2024-09-08 19:23:59 +02:00
cfe3766056
tweaks 2024-09-08 17:51:03 +02:00
d4c2f51cf9
end 2024-09-08 15:39:09 +02:00
1dc23e865c
2.5 2024-09-08 15:32:28 +02:00
ef26cdaa39
.7 2024-09-08 15:28:10 +02:00
c9e2107627
.5 2024-09-08 15:22:48 +02:00
fb73059f39
.7 2024-09-08 15:17:30 +02:00
4e81f90104
3∕4 2024-09-08 15:12:45 +02:00
eab76c5915
tweaks 2024-09-08 15:07:52 +02:00
678385d213
later/gource 2024-09-08 15:06:48 +02:00
4ce26db50c
tweaks 2024-09-08 15:00:31 +02:00
e2ddb7a44d
short 2024-09-08 14:38:04 +02:00
125409e952
overview 2024-09-08 14:14:10 +02:00
cf5ce37ca5
input,track 2024-09-08 13:43:23 +02:00
8fc3761715
space 2024-09-08 13:36:38 +02:00
33153a1d3e
all 2024-09-08 13:36:04 +02:00
6999e326fd
720p 2024-09-08 13:34:13 +02:00
e15f10d685
multi 2024-09-08 13:33:30 +02:00
b4bd8dfd46
font-scale,frameless 2024-09-08 13:24:38 +02:00
0d565927fd
double 2024-09-08 12:00:24 +02:00
3eda7e3f86
viewport 2024-09-08 11:58:46 +02:00
51c47f9c78
spree 2024-09-08 11:53:42 +02:00
5fcb208d0b
spcd.sh
Some checks failed
/ arch (push) Failing after 8s
/ alpine (push) Failing after 7s
/ fedora (push) Failing after 6s
/ debian (push) Failing after 7s
/ opensuse (push) Failing after 7s
/ ubuntu (push) Failing after 6s
/ alma (push) Failing after 7s
/ rocky (push) Failing after 6s
2024-09-08 02:22:18 +02:00
3 changed files with 277 additions and 237 deletions

View file

@ -282,6 +282,7 @@ Handle project workflows in a unified way:
### Task stack
* automate versions fetching
* gource, xvfb, xauth
* handle openh264 repositories
* tex
* translate to french

31
spcd.sh Executable file
View file

@ -0,0 +1,31 @@
#! /usr/bin/env sh
gource \
--auto-skip-seconds 0.25 \
--date-format "%Y / %m / %d ⋅ %H : %M : %S" \
--disable-input \
--font-scale 2.5 \
--frameless \
--hide mouse,usernames \
--highlight-dirs \
--key \
--multi-sampling \
--output-framerate 60 \
--output-ppm-stream - \
--seconds-per-day 0.6 \
--stop-at-end \
--viewport "1920x1080" \
| \
ffmpeg \
-codec:v ppm \
-format image2pipe \
-framerate 120 \
-i - \
-codec:v libx264 \
-preset veryslow \
-qp 28 \
-movflags \
+faststart \
-pix_fmt yuv420p \
-y \
spcd.mp4

View file

@ -836,220 +836,9 @@ spcd_python_pip() {
fi
}
spcd_txt_locale() {
local action="${1}"
local chosen="${2}"
set -- \
"LANG" \
"LC_CTYPE" \
"LC_NUMERIC" \
"LC_TIME" \
"LC_COLLATE" \
"LC_MONETARY" \
"LC_MESSAGES"
case "${SPCD_OS_ID}" in
"${SPCD_OS_ALPINE}") ;;
*)
set -- \
"${@}" \
"LANGUAGE" \
"LC_PAPER" \
"LC_NAME" \
"LC_ADDRESS" \
"LC_TELEPHONE" \
"LC_MEASUREMENT" \
"LC_IDENTIFICATION"
;;
esac
local name
case "${action}" in
"list")
if ! locale; then
for name in "${@}"; do
spcd_os_printenv "${name}"
done
fi
;;
"set")
spcd_txt_locale "list"
spcd_split
local locale long
if [ -n "${chosen}" ]; then
locale="${chosen}"
else
locale="${_SPCD_TXT_LOCALE_DEFAULT}"
fi
long="${locale}.${_SPCD_TXT_CHARSET}"
for name in "${@}"; do
if [ "${name}" != "LANGUAGE" ]; then
export "${name}=${long}"
else
export "${name}=$(spcd_txt_locales language "${chosen}")"
fi
done
spcd_split
spcd_txt_locale "list"
;;
"show")
local regex
for name in "${@}"; do
unset regex
case "${name}" in
# LC_CTYPE
"LC_NUMERIC") regex="^\(decimal\|thousands\|grouping\)" ;;
"LC_TIME") regex="^\(day\|mon\)" ;;
# LC_COLLATE
"LC_MONETARY")
case "${SPCD_OS_ID}" in
"${SPCD_OS_ALPINE}") ;;
*) regex="^\(int_curr\|currency\|mon_\)" ;;
esac
;;
"LC_MESSAGES") regex="^\(yes\|no\)" ;;
"LC_PAPER") regex="^\(height\|width\)" ;;
"LC_NAME") regex="^name_m" ;;
"LC_ADDRESS") regex="^\(country\|lang\)_name" ;;
"LC_TELEPHONE") regex="^int_" ;;
"LC_MEASUREMENT") regex="^measurement=" ;;
"LC_IDENTIFICATION") regex="^\(language\|territory\|title\)" ;;
*) ;;
esac
spcd_split
spcd_os_printenv "${name}"
if [ -n "${regex}" ]; then
locale --keyword-name "${name}" | grep "${regex}"
fi
done
;;
*) ;;
esac
}
spcd_txt_locales() {
local action="${1}"
local chosen="${2}"
set -- \
"${SPCD_TXT_LOCALE_ENGLISH}" \
"${SPCD_TXT_LOCALE_FRENCH}"
local name
case "${action}" in
"install")
spcd_txt_locales "list"
spcd_split
case "${SPCD_PM}" in
"${SPCD_PM_APK}")
spcd_f_pm_install "musl-locales"
export MUSL_LOCPATH="/usr/share/i18n/locales/musl"
;;
"${SPCD_PM_APT}")
local text
for name in "${@}"; do
text="${text}\
${name}.${_SPCD_TXT_CHARSET} ${_SPCD_TXT_CHARSET}
"
done
spcd_os_write "/etc/locale.gen" "${text}"
spcd_f_pm_install "locales"
;;
"${SPCD_PM_DNF}")
local language
for name in "${@}"; do
language="$(echo "${name}" | cut -d _ -f 1)"
spcd_f_pm_install "glibc-langpack-${language}"
done
;;
"${SPCD_PM_PACMAN}") spcd_f_pm_install "glibc-locales" ;;
"${SPCD_PM_ZYPPER}") spcd_f_pm_install "glibc-locale" ;;
*) ;;
esac
spcd_split
spcd_txt_locales "list"
;;
"language")
local text
if [ -n "${chosen}" ]; then
text="${chosen}"
fi
for name in "${@}"; do
if [ "${name}" != "${chosen}" ]; then
if [ -n "${text}" ]; then
text="${text}:${name}"
else
text="${name}"
fi
fi
done
;;
"list")
if ! spcd_run locale --all-locales; then
echo "No locales yet!"
fi
;;
*) ;;
esac
}
# ╭───┬────╮
# │ f │ pm │
# ╰───┴────╯
spcd_f_pm_clean() {
case "${SPCD_PM}" in
"${SPCD_PM_APK}") spcd_run apk cache purge ;;
"${SPCD_PM_APT}") spcd_run apt-get clean ;;
"${SPCD_PM_DNF}") spcd_run dnf clean all ;;
"${SPCD_PM_PACMAN}") spcd_run pacman --sync --clean --noconfirm ;;
"${SPCD_PM_ZYPPER}") spcd_run zypper clean ;;
*) ;;
esac
}
spcd_f_pm_install() {
case "${SPCD_PM}" in
"${SPCD_PM_APK}") spcd_run apk add "${1}" ;;
"${SPCD_PM_APT}") spcd_run apt-get install --assume-yes "${1}" ;;
"${SPCD_PM_DNF}") spcd_run dnf install --assumeyes "${1}" ;;
"${SPCD_PM_PACMAN}") spcd_run pacman --sync --noconfirm "${1}" ;;
"${SPCD_PM_ZYPPER}") spcd_run zypper --non-interactive install "${1}" ;;
*) ;;
esac
spcd_f_pm_clean
}
spcd_f_pm_query() {
case "${SPCD_PM}" in
"${SPCD_PM_APK}") apk info "${1}" ;;
"${SPCD_PM_APT}") dpkg-query --show "${1}" ;;
"${SPCD_PM_DNF}") rpm --query "${1}" ;;
"${SPCD_PM_PACMAN}") pacman --query "${1}" ;;
"${SPCD_PM_ZYPPER}") rpm --query "${1}" ;;
*) ;;
esac
}
spcd_f_pm_update() {
spcd_step "Update"
case "${SPCD_PM}" in
"${SPCD_PM_APK}") spcd_run apk update ;;
"${SPCD_PM_APT}") spcd_run apt-get update ;;
"${SPCD_PM_DNF}") spcd_run dnf makecache ;;
"${SPCD_PM_PACMAN}") spcd_run pacman --sync --refresh ;;
"${SPCD_PM_ZYPPER}") spcd_run zypper refresh ;;
*) ;;
esac
}
spcd_f_pm_upgrade() {
spcd_step "Upgrade"
case "${SPCD_PM}" in
"${SPCD_PM_APK}") spcd_run apk upgrade ;;
"${SPCD_PM_APT}") spcd_run apt-get upgrade --assume-yes ;;
"${SPCD_PM_DNF}") spcd_run dnf upgrade --assumeyes ;;
"${SPCD_PM_PACMAN}") spcd_run pacman --sync --sysupgrade --noconfirm ;;
"${SPCD_PM_ZYPPER}") spcd_run zypper --non-interactive update ;;
*) ;;
esac
}
# ╭───┬──────────────────────╮
# │ f │ pm = package manager │
# ╰───┴──────────────────────╯
# ╭───┬────┬───────╮
# │ f │ pm │ https │
@ -1104,6 +893,225 @@ spcd_f_pm_https_verify() {
fi
}
# ╭───┬────┬─────╮
# │ f │ pm │ pkg │
# ╰───┴────┴─────╯
spcd_f_pm_pkg_clean() {
case "${SPCD_PM}" in
"${SPCD_PM_APK}") spcd_run apk cache purge ;;
"${SPCD_PM_APT}") spcd_run apt-get clean ;;
"${SPCD_PM_DNF}") spcd_run dnf clean all ;;
"${SPCD_PM_PACMAN}") spcd_run pacman --sync --clean --noconfirm ;;
"${SPCD_PM_ZYPPER}") spcd_run zypper clean ;;
*) ;;
esac
}
spcd_f_pm_pkg_install() {
case "${SPCD_PM}" in
"${SPCD_PM_APK}") spcd_run apk add "${1}" ;;
"${SPCD_PM_APT}") spcd_run apt-get install --assume-yes "${1}" ;;
"${SPCD_PM_DNF}") spcd_run dnf install --assumeyes "${1}" ;;
"${SPCD_PM_PACMAN}") spcd_run pacman --sync --noconfirm "${1}" ;;
"${SPCD_PM_ZYPPER}") spcd_run zypper --non-interactive install "${1}" ;;
*) ;;
esac
spcd_f_pm_pkg_clean
}
spcd_f_pm_pkg_query() {
case "${SPCD_PM}" in
"${SPCD_PM_APK}") apk info "${1}" ;;
"${SPCD_PM_APT}") dpkg-query --show "${1}" ;;
"${SPCD_PM_DNF}") rpm --query "${1}" ;;
"${SPCD_PM_PACMAN}") pacman --query "${1}" ;;
"${SPCD_PM_ZYPPER}") rpm --query "${1}" ;;
*) ;;
esac
}
spcd_f_pm_pkg_update() {
spcd_step "Update"
case "${SPCD_PM}" in
"${SPCD_PM_APK}") spcd_run apk update ;;
"${SPCD_PM_APT}") spcd_run apt-get update ;;
"${SPCD_PM_DNF}") spcd_run dnf makecache ;;
"${SPCD_PM_PACMAN}") spcd_run pacman --sync --refresh ;;
"${SPCD_PM_ZYPPER}") spcd_run zypper refresh ;;
*) ;;
esac
}
spcd_f_pm_pkg_upgrade() {
spcd_step "Upgrade"
case "${SPCD_PM}" in
"${SPCD_PM_APK}") spcd_run apk upgrade ;;
"${SPCD_PM_APT}") spcd_run apt-get upgrade --assume-yes ;;
"${SPCD_PM_DNF}") spcd_run dnf upgrade --assumeyes ;;
"${SPCD_PM_PACMAN}") spcd_run pacman --sync --sysupgrade --noconfirm ;;
"${SPCD_PM_ZYPPER}") spcd_run zypper --non-interactive update ;;
*) ;;
esac
}
# ╭───┬─────╮
# │ f │ txt │
# ╰───┴─────╯
spcd_f_txt_locale() {
local action="${1}"
local chosen="${2}"
set -- \
"LANG" \
"LC_CTYPE" \
"LC_NUMERIC" \
"LC_TIME" \
"LC_COLLATE" \
"LC_MONETARY" \
"LC_MESSAGES"
case "${SPCD_OS_ID}" in
"${SPCD_OS_ALPINE}") ;;
*)
set -- \
"${@}" \
"LANGUAGE" \
"LC_PAPER" \
"LC_NAME" \
"LC_ADDRESS" \
"LC_TELEPHONE" \
"LC_MEASUREMENT" \
"LC_IDENTIFICATION"
;;
esac
local name
case "${action}" in
"list")
if ! locale; then
for name in "${@}"; do
spcd_os_printenv "${name}"
done
fi
;;
"set")
spcd_f_txt_locale "list"
spcd_split
local locale long
if [ -n "${chosen}" ]; then
locale="${chosen}"
else
locale="${_SPCD_TXT_LOCALE_DEFAULT}"
fi
long="${locale}.${_SPCD_TXT_CHARSET}"
for name in "${@}"; do
if [ "${name}" != "LANGUAGE" ]; then
export "${name}=${long}"
else
export "${name}=$(spcd_f_txt_locales language "${chosen}")"
fi
done
spcd_split
spcd_f_txt_locale "list"
;;
"show")
local regex
for name in "${@}"; do
unset regex
case "${name}" in
# LC_CTYPE
"LC_NUMERIC") regex="^\(decimal\|thousands\|grouping\)" ;;
"LC_TIME") regex="^\(day\|mon\)" ;;
# LC_COLLATE
"LC_MONETARY")
case "${SPCD_OS_ID}" in
"${SPCD_OS_ALPINE}") ;;
*) regex="^\(int_curr\|currency\|mon_\)" ;;
esac
;;
"LC_MESSAGES") regex="^\(yes\|no\)" ;;
"LC_PAPER") regex="^\(height\|width\)" ;;
"LC_NAME") regex="^name_m" ;;
"LC_ADDRESS") regex="^\(country\|lang\)_name" ;;
"LC_TELEPHONE") regex="^int_" ;;
"LC_MEASUREMENT") regex="^measurement=" ;;
"LC_IDENTIFICATION") regex="^\(language\|territory\|title\)" ;;
*) ;;
esac
spcd_split
spcd_os_printenv "${name}"
if [ -n "${regex}" ]; then
locale --keyword-name "${name}" | grep "${regex}"
fi
done
;;
*) ;;
esac
}
spcd_f_txt_locales() {
local action="${1}"
local chosen="${2}"
set -- \
"${SPCD_TXT_LOCALE_ENGLISH}" \
"${SPCD_TXT_LOCALE_FRENCH}"
local name
case "${action}" in
"install")
spcd_f_txt_locales "list"
spcd_split
case "${SPCD_PM}" in
"${SPCD_PM_APK}")
spcd_f_pm_pkg_install "musl-locales"
export MUSL_LOCPATH="/usr/share/i18n/locales/musl"
;;
"${SPCD_PM_APT}")
local text
for name in "${@}"; do
text="${text}\
${name}.${_SPCD_TXT_CHARSET} ${_SPCD_TXT_CHARSET}
"
done
spcd_os_write "/etc/locale.gen" "${text}"
spcd_f_pm_pkg_install "locales"
;;
"${SPCD_PM_DNF}")
local language
for name in "${@}"; do
language="$(echo "${name}" | cut -d _ -f 1)"
spcd_f_pm_pkg_install "glibc-langpack-${language}"
done
;;
"${SPCD_PM_PACMAN}") spcd_f_pm_pkg_install "glibc-locales" ;;
"${SPCD_PM_ZYPPER}") spcd_f_pm_pkg_install "glibc-locale" ;;
*) ;;
esac
spcd_split
spcd_f_txt_locales "list"
;;
"language")
local text
if [ -n "${chosen}" ]; then
text="${chosen}"
fi
for name in "${@}"; do
if [ "${name}" != "${chosen}" ]; then
if [ -n "${text}" ]; then
text="${text}:${name}"
else
text="${name}"
fi
fi
done
;;
"list")
if ! spcd_run locale --all-locales; then
echo "No locales yet!"
fi
;;
*) ;;
esac
}
# ╭───┬─────╮
# │ s │ dns │
# ╰───┴─────╯
@ -1301,7 +1309,7 @@ Dir::Etc::SourceParts \"\";
spcd_step__packages_install_tools() {
spcd_step "Install tools"
case "${SPCD_PM}" in
"${SPCD_PM_APT}") spcd_f_pm_install "apt-utils" ;;
"${SPCD_PM_APT}") spcd_f_pm_pkg_install "apt-utils" ;;
*) ;;
esac
}
@ -1309,11 +1317,11 @@ spcd_step__packages_install_tools() {
spcd_step__packages_install_locales() {
spcd_step_in "Locales"
spcd_step "Install"
spcd_txt_locales "install"
spcd_f_txt_locales "install"
spcd_step "Set"
spcd_txt_locale "set" "${SPCD_TXT_LOCALE}"
spcd_f_txt_locale "set" "${SPCD_TXT_LOCALE}"
spcd_step "Show"
spcd_txt_locale "show"
spcd_f_txt_locale "show"
spcd_step_out
}
@ -1323,7 +1331,7 @@ spcd_step__packages_install_locales() {
spcd_step__ca_install_package() {
spcd_step "Install package"
spcd_f_pm_install "ca-certificates"
spcd_f_pm_pkg_install "ca-certificates"
}
spcd_step__ca_write_certificates() {
@ -1373,12 +1381,12 @@ spcd_step__ca_update_certificates() {
spcd_step__packages_install_dos2unix() {
spcd_step "Install dos2unix"
spcd_f_pm_install "dos2unix"
spcd_f_pm_pkg_install "dos2unix"
}
spcd_step__packages_install_git() {
spcd_step "Install Git"
spcd_f_pm_install "git"
spcd_f_pm_pkg_install "git"
}
# ╭───┬────────╮
@ -1387,7 +1395,7 @@ spcd_step__packages_install_git() {
spcd_step__python_install() {
spcd_step "Install package"
spcd_f_pm_install "${SPCD_PYTHON_PACKAGE}"
spcd_f_pm_pkg_install "${SPCD_PYTHON_PACKAGE}"
spcd_step "Link alias to command"
spcd_python_ln "${SPCD_PYTHON_COMMAND}"
# venv
@ -1395,7 +1403,7 @@ spcd_step__python_install() {
spcd_step "Install package"
case "${SPCD_OS_ID}" in
"${SPCD_OS_DEBIAN}" | "${SPCD_OS_UBUNTU}")
spcd_f_pm_install "python3-venv"
spcd_f_pm_pkg_install "python3-venv"
;;
*) ;;
esac
@ -1445,7 +1453,7 @@ spcd_step__install_packages() {
spcd_step "EPEL"
case "${SPCD_OS_ID}" in
"${SPCD_OS_ALMA}" | "${SPCD_OS_ROCKY}")
spcd_f_pm_install "epel-release"
spcd_f_pm_pkg_install "epel-release"
case "${SPCD_OS_VERSION}" in
"9")
set -- \
@ -1477,32 +1485,32 @@ spcd_step__install_packages() {
esac
# graphviz
spcd_step "GraphViz"
spcd_f_pm_install "graphviz"
spcd_f_pm_pkg_install "graphviz"
# openssh
spcd_step "OpenSSH"
case "${SPCD_PM}" in
"${SPCD_PM_APK}" | "${SPCD_PM_APT}")
spcd_f_pm_install "openssh-client"
spcd_f_pm_pkg_install "openssh-client"
;;
"${SPCD_PM_DNF}" | "${SPCD_PM_ZYPPER}")
spcd_f_pm_install "openssh-clients"
spcd_f_pm_pkg_install "openssh-clients"
;;
"${SPCD_PM_PACMAN}") spcd_f_pm_install "openssh" ;;
"${SPCD_PM_PACMAN}") spcd_f_pm_pkg_install "openssh" ;;
*) ;;
esac
# plantuml
spcd_step "PlantUML"
spcd_f_pm_install "plantuml"
spcd_f_pm_pkg_install "plantuml"
# rsync
spcd_step "Rsync"
spcd_f_pm_install "rsync"
spcd_f_pm_pkg_install "rsync"
# shell check
spcd_step "ShellCheck"
case "${SPCD_PM}" in
"${SPCD_PM_DNF}" | "${SPCD_PM_ZYPPER}")
spcd_f_pm_install "ShellCheck"
spcd_f_pm_pkg_install "ShellCheck"
;;
*) spcd_f_pm_install "shellcheck" ;;
*) spcd_f_pm_pkg_install "shellcheck" ;;
esac
# shfmt
spcd_step "ShellFormat"
@ -1511,10 +1519,10 @@ spcd_step__install_packages() {
"${SPCD_OS_DEBIAN}")
case "${SPCD_OS_VERSION}" in
"bullseye") ;;
*) spcd_f_pm_install "shfmt" ;;
*) spcd_f_pm_pkg_install "shfmt" ;;
esac
;;
*) spcd_f_pm_install "shfmt" ;;
*) spcd_f_pm_pkg_install "shfmt" ;;
esac
spcd_step_out
}
@ -1576,7 +1584,7 @@ spcd_main() {
spcd_step__packages_set_repositories
spcd_step__packages_set_configuration
spcd_f_pm_https_trust
spcd_f_pm_update
spcd_f_pm_pkg_update
spcd_step__packages_install_tools
spcd_step__packages_install_locales
spcd_step_out
@ -1589,8 +1597,8 @@ spcd_main() {
# packages
spcd_step_in "Packages"
spcd_f_pm_https_verify
spcd_f_pm_update
spcd_f_pm_upgrade
spcd_f_pm_pkg_update
spcd_f_pm_pkg_upgrade
spcd_step__packages_install_dos2unix
spcd_step__packages_install_git
spcd_step_out