summaryrefslogtreecommitdiff
path: root/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/scripts/qmllint-entrypoints.sh
diff options
context:
space:
mode:
Diffstat (limited to 'raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/scripts/qmllint-entrypoints.sh')
-rwxr-xr-xraveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/scripts/qmllint-entrypoints.sh129
1 files changed, 129 insertions, 0 deletions
diff --git a/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/scripts/qmllint-entrypoints.sh b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/scripts/qmllint-entrypoints.sh
new file mode 100755
index 0000000..41c5a74
--- /dev/null
+++ b/raveos-theme/hyprland/theme-data/DankMaterialShell/quickshell/scripts/qmllint-entrypoints.sh
@@ -0,0 +1,129 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+script_dir="$(
+ CDPATH=''
+ cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd
+)"
+repo_root="$(
+ CDPATH=''
+ cd -- "${script_dir}/../.." && pwd
+)"
+quickshell_dir="${repo_root}/quickshell"
+qmlls_config="${quickshell_dir}/.qmlls.ini"
+
+# Resolve qmllint: honour QMLLINT, then try common Qt 6 binary names and
+# install paths, and finally bare qmllint. We need the Qt 6 build (>= 6.x)
+# because older Qt 5 qmllint doesn't understand --ignore-settings / -W.
+resolve_qmllint() {
+ if [[ -n "${QMLLINT:-}" ]]; then
+ printf '%s\n' "${QMLLINT}"
+ return
+ fi
+ local candidate
+ for candidate in qmllint6 qmllint-qt6 /usr/lib/qt6/bin/qmllint qmllint; do
+ if command -v -- "${candidate}" >/dev/null 2>&1; then
+ printf '%s\n' "${candidate}"
+ return
+ fi
+ done
+ return 1
+}
+
+if ! qmllint_bin="$(resolve_qmllint)"; then
+ printf 'error: qmllint (Qt 6) not found in PATH (override with QMLLINT=/path/to/qmllint)\n' >&2
+ exit 127
+fi
+
+print_broken_qmlls_link() {
+ local target=""
+ target="$(readlink -- "${qmlls_config}" 2>/dev/null || true)"
+ printf 'error: %s is a broken symlink. lint-qml requires a live Quickshell tooling VFS.\n' "${qmlls_config}" >&2
+ if [[ -n "${target}" ]]; then
+ printf 'Broken target: %s\n' "${target}" >&2
+ fi
+ print_vfs_recovery
+}
+
+trim_ini_value() {
+ local value="$1"
+ value="${value#\"}"
+ value="${value%\"}"
+ printf '%s\n' "${value}"
+}
+
+read_ini_value() {
+ local key="$1"
+ local file="$2"
+ local raw
+
+ raw="$(sed -n "s/^${key}=//p" "${file}" | head -n 1)"
+ if [[ -z "${raw}" ]]; then
+ return 1
+ fi
+
+ trim_ini_value "${raw}"
+}
+
+print_vfs_recovery() {
+ printf 'Generate it by starting the local shell config once, for example:\n' >&2
+ printf ' dms -c %q run\n' "${quickshell_dir}" >&2
+ printf ' qs -p %q\n' "${quickshell_dir}" >&2
+}
+
+if [[ -L "${qmlls_config}" && ! -e "${qmlls_config}" ]]; then
+ print_broken_qmlls_link
+ exit 1
+fi
+
+if [[ ! -e "${qmlls_config}" ]]; then
+ printf 'error: %s is missing. lint-qml requires the Quickshell tooling VFS.\n' "${qmlls_config}" >&2
+ print_vfs_recovery
+ exit 1
+fi
+
+if ! build_dir="$(read_ini_value "buildDir" "${qmlls_config}")"; then
+ printf 'error: %s does not contain a buildDir entry.\n' "${qmlls_config}" >&2
+ print_vfs_recovery
+ exit 1
+fi
+
+if ! import_paths_raw="$(read_ini_value "importPaths" "${qmlls_config}")"; then
+ printf 'error: %s does not contain an importPaths entry.\n' "${qmlls_config}" >&2
+ print_vfs_recovery
+ exit 1
+fi
+
+if [[ ! -d "${build_dir}" || ! -f "${build_dir}/qs/qmldir" ]]; then
+ printf 'error: Quickshell tooling VFS is missing or stale: %s\n' "${build_dir}" >&2
+ print_vfs_recovery
+ exit 1
+fi
+
+targets=(
+ "${quickshell_dir}/shell.qml"
+ "${quickshell_dir}/DMSShell.qml"
+ "${quickshell_dir}/DMSGreeter.qml"
+)
+
+qmllint_args=(
+ --ignore-settings
+ -W 0
+ -I "${build_dir}"
+)
+
+IFS=':' read -r -a import_paths <<< "${import_paths_raw}"
+for path in "${import_paths[@]}"; do
+ if [[ -n "${path}" ]]; then
+ qmllint_args+=(-I "${path}")
+ fi
+done
+
+if ! output="$("${qmllint_bin}" "${qmllint_args[@]}" "${targets[@]}" 2>&1)"; then
+ printf '%s\n' "${output}" >&2
+ exit 1
+fi
+
+if [[ -n "${output}" ]]; then
+ printf '%s\n' "${output}"
+fi