commit a998fe67dec86a2f405e4a7273a16c2815912c0a Author: Storm Dragon Date: Tue Oct 13 22:25:51 2026 -0400 Create testing branch with distro packaging only diff --git a/distro-packages/Arch-Linux/cthulhu-git/PKGBUILD b/distro-packages/Arch-Linux/cthulhu-git/PKGBUILD new file mode 100644 index 0000000..d68d34f --- /dev/null +++ b/distro-packages/Arch-Linux/cthulhu-git/PKGBUILD @@ -0,0 +1,111 @@ +# Maintainer: Storm Dragon +# shellcheck shell=bash disable=SC2034,SC2154,SC2164 + +pkgbase=cthulhu-git +pkgname=cthulhu-git +_pkgname=cthulhu +pkgver=2026.09.03.r475.gd4bec38 +pkgrel=1 +pkgdesc="Desktop-agnostic screen reader with plugin system, forked from Orca" +url="https://git.stormux.org/storm/cthulhu" +arch=(x86_64 aarch64 armv7h) +license=(LGPL-2.1-or-later) +provides=("${_pkgname}=${pkgver}") +conflicts=("${_pkgname}") +depends=( + # Core AT-SPI accessibility + at-spi2-core + glib2 + gobject-introspection-runtime + python-gobject + python-cairo + gtk3 + # Audio and speech + speech-dispatcher + gstreamer + gst-plugins-base # playbin, audiotestsrc, basic decoders + gst-plugins-good # pulsesink, more decoders + + # Braille support + python-brltty + liblouis + + # Plugin system and D-Bus remote control + python-pluggy + python-tomlkit + python-dasbus + python-msgpack + python-tornado + python-xlib + + # Desktop integration + hicolor-icon-theme + libwnck3 + pango + + # System utilities + python-setproctitle + xorg-xkbcomp +) +optdepends=( + 'git: Install and update third-party plugin sources' + 'python-pywayland: Wayland shared workspace backend' + 'piper-tts: Piper speech backend' + 'socat: Send text to the Self Voice socket from the command line' + + # AI Assistant providers (optional) + 'python-requests: AI Assistant plugin and HTTP provider support' + 'python-pyautogui: AI Assistant mouse and keyboard actions' + 'claude-code: Claude AI provider support' + 'openai-codex: OpenAI Codex provider support' + 'gemini-cli: Gemini AI provider support' + 'ollama: Local AI model support' + + # OCR plugin dependencies (optional) + 'python-pillow: Image processing for OCR' + 'python-pytesseract: Python wrapper for Tesseract OCR engine' + 'tesseract: OCR engine for text recognition' +) +optdepends_x86_64=( + # The helper is x86_64-only, but this package is architecture-independent. + 'cthulhu-wine-access: Wine, Proton, NVDA Controller, and Tolk integration' +) +makedepends=( + git + meson +) +source=("${_pkgname}::git+https://git.stormux.org/storm/${_pkgname}.git#branch=master") +sha512sums=('SKIP') + +pkgver() { + cd "${_pkgname}" + local projectVersion revisionCount commitHash + + projectVersion=$(sed -n "s/^[[:space:]]*version: '\([^']*\)'.*/\1/p" meson.build) + projectVersion=${projectVersion%-master} + projectVersion=${projectVersion//-/.} + [[ -n "${projectVersion}" ]] || return 1 + + revisionCount=$(git rev-list --count HEAD) + commitHash=$(git rev-parse --short=7 HEAD) + printf "%s.r%s.g%s\n" "${projectVersion}" "${revisionCount}" "${commitHash}" +} + +build() { + cd "${_pkgname}" + arch-meson _build -Dwine-access=disabled + meson compile -C _build +} + +package() { + arch=(any) + provides=("cthulhu=${pkgver}") + conflicts=(cthulhu) + cd "${_pkgname}" + meson install -C _build --destdir "$pkgdir" + + # Remove icon cache - it will be generated by post-install hooks + rm -f "$pkgdir/usr/share/icons/hicolor/icon-theme.cache" +} + +# vim:set sw=2 sts=-1 et: diff --git a/distro-packages/Arch-Linux/cthulhu-wine-access-git/PKGBUILD b/distro-packages/Arch-Linux/cthulhu-wine-access-git/PKGBUILD new file mode 100644 index 0000000..a01c80d --- /dev/null +++ b/distro-packages/Arch-Linux/cthulhu-wine-access-git/PKGBUILD @@ -0,0 +1,57 @@ +# Maintainer: Storm Dragon +# shellcheck shell=bash disable=SC2034,SC2154,SC2164 + +pkgname=cthulhu-wine-access-git +_pkgname=cthulhu +pkgver=2026.09.03.r475.gd4bec38 +pkgrel=1 +pkgdesc="Optional Wine and Proton accessibility bridge for Cthulhu" +url="https://git.stormux.org/storm/cthulhu" +arch=(x86_64) +license=(LGPL-2.1-or-later) +depends=( + glib2 + wine +) +makedepends=( + cmake + git +) +provides=(cthulhu-wine-access) +conflicts=(cthulhu-wine-access) +source=("${_pkgname}::git+https://git.stormux.org/storm/${_pkgname}.git#branch=master") +sha512sums=('SKIP') +options=(!lto) + +pkgver() { + cd "${_pkgname}" + local projectVersion revisionCount commitHash + + projectVersion=$(sed -n "s/^[[:space:]]*version: '\([^']*\)'.*/\1/p" meson.build) + projectVersion=${projectVersion%-master} + projectVersion=${projectVersion//-/.} + [[ -n "${projectVersion}" ]] || return 1 + + revisionCount=$(git rev-list --count HEAD) + commitHash=$(git rev-parse --short=7 HEAD) + printf "%s.r%s.g%s\n" "${projectVersion}" "${revisionCount}" "${commitHash}" +} + +build() { + local sourceDir="${srcdir}/${_pkgname}" + bash "${sourceDir}/scripts/build-wine-access.sh" \ + "${sourceDir}/wine-access" \ + "${sourceDir}/_build/wine-access-build" \ + "${sourceDir}/_build/cthulhu-wine-access.exe" \ + "${sourceDir}/_build/cthulhu-wine-access.exe.so" +} + +package() { + cd "${_pkgname}" + install -Dm755 _build/cthulhu-wine-access.exe \ + "$pkgdir/usr/libexec/cthulhu/wine/cthulhu-wine-access.exe" + install -Dm755 _build/cthulhu-wine-access.exe.so \ + "$pkgdir/usr/libexec/cthulhu/wine/cthulhu-wine-access.exe.so" +} + +# vim:set sw=2 sts=-1 et: diff --git a/distro-packages/Arch-Linux/cthulhu-wine-access/PKGBUILD b/distro-packages/Arch-Linux/cthulhu-wine-access/PKGBUILD new file mode 100644 index 0000000..8490255 --- /dev/null +++ b/distro-packages/Arch-Linux/cthulhu-wine-access/PKGBUILD @@ -0,0 +1,40 @@ +# Maintainer: Storm Dragon +# shellcheck shell=bash disable=SC2034,SC2154,SC2164 + +pkgname=cthulhu-wine-access +pkgver=2026.09.09 +pkgrel=1 +pkgdesc="Optional Wine and Proton accessibility bridge for Cthulhu" +url="https://git.stormux.org/storm/cthulhu" +arch=(x86_64) +license=(LGPL-2.1-or-later) +depends=( + glib2 + wine +) +makedepends=( + cmake + git +) +source=("git+https://git.stormux.org/storm/cthulhu.git#tag=${pkgver}") +sha512sums=('SKIP') +options=(!lto !debug) + +build() { + local sourceDir="${srcdir}/cthulhu" + bash "${sourceDir}/scripts/build-wine-access.sh" \ + "${sourceDir}/wine-access" \ + "${sourceDir}/_build/wine-access-build" \ + "${sourceDir}/_build/cthulhu-wine-access.exe" \ + "${sourceDir}/_build/cthulhu-wine-access.exe.so" +} + +package() { + cd cthulhu + install -Dm755 _build/cthulhu-wine-access.exe \ + "$pkgdir/usr/libexec/cthulhu/wine/cthulhu-wine-access.exe" + install -Dm755 _build/cthulhu-wine-access.exe.so \ + "$pkgdir/usr/libexec/cthulhu/wine/cthulhu-wine-access.exe.so" +} + +# vim:set sw=2 sts=-1 et: diff --git a/distro-packages/Arch-Linux/cthulhu/PKGBUILD b/distro-packages/Arch-Linux/cthulhu/PKGBUILD new file mode 100644 index 0000000..024f61f --- /dev/null +++ b/distro-packages/Arch-Linux/cthulhu/PKGBUILD @@ -0,0 +1,93 @@ +# Maintainer: Storm Dragon +# shellcheck shell=bash disable=SC2034,SC2154,SC2164 + +pkgbase=cthulhu +pkgname=cthulhu +pkgver=2026.09.09 +pkgrel=1 +pkgdesc="Desktop-agnostic screen reader with plugin system, forked from Orca" +url="https://git.stormux.org/storm/cthulhu" +arch=(x86_64 aarch64 armv7h) +license=(LGPL-2.1-or-later) +depends=( + # Core AT-SPI accessibility + at-spi2-core + glib2 + gobject-introspection-runtime + python-gobject + python-cairo + gtk3 + # Audio and speech + speech-dispatcher + gstreamer + gst-plugins-base # playbin, audiotestsrc, basic decoders + gst-plugins-good # pulsesink, more decoders + + # Braille support + python-brltty + liblouis + + # Plugin system and D-Bus remote control + python-pluggy + python-tomlkit + python-dasbus + python-msgpack + python-tornado + python-xlib + + # Desktop integration + hicolor-icon-theme + libwnck3 + pango + + # System utilities + python-setproctitle + xorg-xkbcomp +) +optdepends=( + 'git: Install and update third-party plugin sources' + 'python-pywayland: Wayland shared workspace backend' + 'piper-tts: Piper speech backend' + 'socat: Send text to the Self Voice socket from the command line' + + # AI Assistant providers (optional) + 'python-requests: AI Assistant plugin and HTTP provider support' + 'python-pyautogui: AI Assistant mouse and keyboard actions' + 'claude-code: Claude AI provider support' + 'openai-codex: OpenAI Codex provider support' + 'gemini-cli: Gemini AI provider support' + 'ollama: Local AI model support' + + # OCR plugin dependencies (optional) + 'python-pillow: Image processing for OCR' + 'python-pytesseract: Python wrapper for Tesseract OCR engine' + 'tesseract: OCR engine for text recognition' +) +optdepends_x86_64=( + 'cthulhu-wine-access: Wine, Proton, NVDA Controller, and Tolk integration' +) +makedepends=( + git + meson +) +source=("git+https://git.stormux.org/storm/cthulhu.git#tag=${pkgver}") +sha512sums=('SKIP') + +build() { + cd cthulhu + arch-meson _build -Dwine-access=disabled + meson compile -C _build +} + +package() { + arch=(any) + provides=("cthulhu=${pkgver}") + conflicts=(cthulhu) + cd cthulhu + meson install -C _build --destdir "$pkgdir" + + # Remove icon cache - it will be generated by post-install hooks + rm -f "$pkgdir/usr/share/icons/hicolor/icon-theme.cache" +} + +# vim:set sw=2 sts=-1 et: diff --git a/distro-packages/Slackware/cthulhu.SlackBuild b/distro-packages/Slackware/cthulhu.SlackBuild new file mode 100755 index 0000000..1d46689 --- /dev/null +++ b/distro-packages/Slackware/cthulhu.SlackBuild @@ -0,0 +1,90 @@ +#!/bin/bash + +# Slackware build script for cthulhu +# Created based on PKGBUILD from Storm Dragon + +cd "$(dirname "$0")" ; CWD=$(pwd) + +PRGNAM=cthulhu +VERSION=${VERSION:-2026.09.09} +BUILD=${BUILD:-1} +TAG=storm +PKGTYPE=txz + +if [ -z "${ARCH:-}" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ -n "${PRINT_PACKAGE_NAME:-}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=$CWD +PKG=$TMP/package-$PRGNAM +OUTPUT=$CWD + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf "$PKG" +mkdir -p "$TMP" "$PKG" "$OUTPUT" +cd "$TMP" +rm -rf "$PRGNAM-$VERSION" +git clone --branch "$VERSION" --depth 1 https://git.stormux.org/storm/cthulhu.git "$PRGNAM-$VERSION" +cd "$PRGNAM-$VERSION" +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +meson setup _build \ + --prefix=/usr \ + --libdir="/usr/lib${LIBDIRSUFFIX}" \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --buildtype=release +meson compile -C _build +DESTDIR="$PKG" meson install -C _build + +find "$PKG" -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +rm -f "$PKG/usr/share/icons/hicolor/icon-theme.cache" + +mkdir -p "$PKG/usr/doc/$PRGNAM-$VERSION" +cp -a COPYING HACKING README.md README-DEVELOPMENT.md RELEASE-HOWTO \ + "$PKG/usr/doc/$PRGNAM-$VERSION" +cat "$CWD/$PRGNAM.SlackBuild" > "$PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild" + +mkdir -p "$PKG/install" +cat "$CWD/slack-desc" > "$PKG/install/slack-desc" +cat "$CWD/doinst.sh" > "$PKG/install/doinst.sh" + +cd "$PKG" +/sbin/makepkg -l y -c n "$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" diff --git a/distro-packages/Slackware/doinst.sh b/distro-packages/Slackware/doinst.sh new file mode 100644 index 0000000..00d4b61 --- /dev/null +++ b/distro-packages/Slackware/doinst.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/distro-packages/Slackware/slack-desc b/distro-packages/Slackware/slack-desc new file mode 100644 index 0000000..d420716 --- /dev/null +++ b/distro-packages/Slackware/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +cthulhu: cthulhu (Screen reader for blind or visually impaired users) +cthulhu: +cthulhu: Cthulhu is a screen reader for individuals who are blind or visually +cthulhu: impaired, forked from Orca. It provides a way to access applications +cthulhu: and toolkits that support the AT-SPI accessibility infrastructure. +cthulhu: +cthulhu: Homepage: https://git.stormux.org/storm/cthulhu +cthulhu: +cthulhu: +cthulhu: +cthulhu: diff --git a/distro-packages/Slint/README b/distro-packages/Slint/README new file mode 100644 index 0000000..241befc --- /dev/null +++ b/distro-packages/Slint/README @@ -0,0 +1,37 @@ +Cthulhu is a screen reader for individuals who are blind or visually impaired, +forked from Orca. It provides access to applications and toolkits that support +the AT-SPI (e.g., GNOME and other Linux desktop environments). + +This fork is currently maintained by Storm Dragon. It builds on upstream Orca +work, but former Orca maintainers and contributors are not current maintainers +of this fork. + +This screen reader helps users navigate their desktop environment and applications +through speech synthesis and braille output. + +After installation, you can start Cthulhu through your desktop environment +or by running 'cthulhu' from the command line. + +DEPENDENCIES: +This package requires the following packages, all available from SlackBuilds.org: +- at-spi2-core +- brltty +- gobject-introspection +- gstreamer +- gst-plugins-base +- gst-plugins-good +- gtk3 +- liblouis +- libwnck3 +- python3-cairo +- python3-dasbus +- python3-gobject +- python3-pluggy +- python3-pywayland +- python3-setproctitle +- python3-tomlkit +- speech-dispatcher + +BUILD DEPENDENCIES: +- meson +- ninja diff --git a/distro-packages/Slint/cthulhu-info b/distro-packages/Slint/cthulhu-info new file mode 100644 index 0000000..f61157a --- /dev/null +++ b/distro-packages/Slint/cthulhu-info @@ -0,0 +1,10 @@ +PRGNAM="cthulhu" +VERSION="2026.09.09" +HOMEPAGE="https://git.stormux.org/storm/cthulhu" +DOWNLOAD="https://git.stormux.org/storm/cthulhu.git" +MD5SUM="SKIP" +DOWNLOAD_x86_64="" +MD5SUM_x86_64="" +REQUIRES="at-spi2-core brltty gobject-introspection gstreamer gst-plugins-base gst-plugins-good gtk3 liblouis libwnck3 python3-cairo python3-dasbus python3-gobject python3-pluggy python3-pywayland python3-setproctitle python3-tomlkit speech-dispatcher" +MAINTAINER="Storm Dragon" +EMAIL="storm_dragon@stormux.org" diff --git a/distro-packages/Slint/cthulhu.SlackBuild b/distro-packages/Slint/cthulhu.SlackBuild new file mode 100755 index 0000000..1d46689 --- /dev/null +++ b/distro-packages/Slint/cthulhu.SlackBuild @@ -0,0 +1,90 @@ +#!/bin/bash + +# Slackware build script for cthulhu +# Created based on PKGBUILD from Storm Dragon + +cd "$(dirname "$0")" ; CWD=$(pwd) + +PRGNAM=cthulhu +VERSION=${VERSION:-2026.09.09} +BUILD=${BUILD:-1} +TAG=storm +PKGTYPE=txz + +if [ -z "${ARCH:-}" ]; then + case "$( uname -m )" in + i?86) ARCH=i586 ;; + arm*) ARCH=arm ;; + *) ARCH=$( uname -m ) ;; + esac +fi + +# If the variable PRINT_PACKAGE_NAME is set, then this script will report what +# the name of the created package would be, and then exit. This information +# could be useful to other scripts. +if [ -n "${PRINT_PACKAGE_NAME:-}" ]; then + echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" + exit 0 +fi + +TMP=$CWD +PKG=$TMP/package-$PRGNAM +OUTPUT=$CWD + +if [ "$ARCH" = "i586" ]; then + SLKCFLAGS="-O2 -march=i586 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "i686" ]; then + SLKCFLAGS="-O2 -march=i686 -mtune=i686" + LIBDIRSUFFIX="" +elif [ "$ARCH" = "x86_64" ]; then + SLKCFLAGS="-O2 -fPIC" + LIBDIRSUFFIX="64" +else + SLKCFLAGS="-O2" + LIBDIRSUFFIX="" +fi + +set -e + +rm -rf "$PKG" +mkdir -p "$TMP" "$PKG" "$OUTPUT" +cd "$TMP" +rm -rf "$PRGNAM-$VERSION" +git clone --branch "$VERSION" --depth 1 https://git.stormux.org/storm/cthulhu.git "$PRGNAM-$VERSION" +cd "$PRGNAM-$VERSION" +chown -R root:root . +find -L . \ + \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \ + -o -perm 511 \) -exec chmod 755 {} \; -o \ + \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ + -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; + +CFLAGS="$SLKCFLAGS" \ +CXXFLAGS="$SLKCFLAGS" \ +meson setup _build \ + --prefix=/usr \ + --libdir="/usr/lib${LIBDIRSUFFIX}" \ + --sysconfdir=/etc \ + --localstatedir=/var \ + --mandir=/usr/man \ + --buildtype=release +meson compile -C _build +DESTDIR="$PKG" meson install -C _build + +find "$PKG" -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \ + | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true + +rm -f "$PKG/usr/share/icons/hicolor/icon-theme.cache" + +mkdir -p "$PKG/usr/doc/$PRGNAM-$VERSION" +cp -a COPYING HACKING README.md README-DEVELOPMENT.md RELEASE-HOWTO \ + "$PKG/usr/doc/$PRGNAM-$VERSION" +cat "$CWD/$PRGNAM.SlackBuild" > "$PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild" + +mkdir -p "$PKG/install" +cat "$CWD/slack-desc" > "$PKG/install/slack-desc" +cat "$CWD/doinst.sh" > "$PKG/install/doinst.sh" + +cd "$PKG" +/sbin/makepkg -l y -c n "$OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE" diff --git a/distro-packages/Slint/doinst.sh b/distro-packages/Slint/doinst.sh new file mode 100644 index 0000000..00d4b61 --- /dev/null +++ b/distro-packages/Slint/doinst.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +if [ -x /usr/bin/update-desktop-database ]; then + /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 +fi + +if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then + if [ -x /usr/bin/gtk-update-icon-cache ]; then + /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1 + fi +fi diff --git a/distro-packages/Slint/slack-desc b/distro-packages/Slint/slack-desc new file mode 100644 index 0000000..3f09536 --- /dev/null +++ b/distro-packages/Slint/slack-desc @@ -0,0 +1,19 @@ +# HOW TO EDIT THIS FILE: +# The "handy ruler" below makes it easier to edit a package description. +# Line up the first '|' above the ':' following the base package name, and +# the '|' on the right side marks the last column you can put a character in. +# You must make exactly 11 lines for the formatting to be correct. It's also +# customary to leave one space after the ':' except on otherwise blank lines. + + |-----handy-ruler------------------------------------------------------| +cthulhu: cthulhu (Screen reader for blind or visually impaired users) +cthulhu: +cthulhu: Cthulhu is a screen reader for individuals who are blind or visually +cthulhu: impaired, forked from Orca. It provides a way to access applications +cthulhu: and toolkits that support the AT-SPI (e.g., the GNOME desktop). +cthulhu: +cthulhu: Homepage: https://git.stormux.org/storm/cthulhu +cthulhu: +cthulhu: +cthulhu: +cthulhu: