#!/bin/bash # 💫 https://github.com/JaKooLit 💫 # # Aylur's GTK Shell v 1.9.0 # # for desktop overview if [[ $USE_PRESET = [Yy] ]]; then source ./preset.sh fi ags=( typescript npm meson glib2-devel gjs gtk3 gtk-layer-shell upower networkmanager gobject-introspection libdbusmenu-gtk3 libsoup3 ) # specific tags to download ags_tag="v1.9.0" ## WARNING: DO NOT EDIT BEYOND THIS LINE IF YOU DON'T KNOW WHAT YOU ARE DOING! ## SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Change the working directory to the parent directory of the script PARENT_DIR="$SCRIPT_DIR/.." cd "$PARENT_DIR" || { echo "${ERROR} Failed to change directory to $PARENT_DIR"; exit 1; } # Source the global functions script if ! source "$(dirname "$(readlink -f "$0")")/Global_functions.sh"; then echo "Failed to source Global_functions.sh" exit 1 fi # Fail early and make pipelines fail if any command fails set -eo pipefail # Set the name of the log file to include the current date and time LOG="Install-Logs/install-$(date +%d-%H%M%S)_ags.log" MLOG="install-$(date +%d-%H%M%S)_ags2.log" # Check if AGS is installed if command -v ags &>/dev/null; then AGS_VERSION=$(ags -v | awk '{print $NF}') if [[ "$AGS_VERSION" == "1.9.0" ]]; then printf "${INFO} ${MAGENTA}Aylur's GTK Shell v1.9.0${RESET} is already installed. Skipping installation." printf "\n%.0s" {1..2} exit 0 fi fi # Installation of main components printf "\n%s - Installing ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET} Dependencies \n" "${NOTE}" # Installing ags Dependencies for PKG1 in "${ags[@]}"; do install_package "$PKG1" "$LOG" done printf "\n%.0s" {1..1} # ags v1 printf "${NOTE} Install and Compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}..\n" # Check if directory exists and remove it if [ -d "ags_v1.9.0" ]; then printf "${NOTE} Removing existing ags directory...\n" rm -rf "ags_v1.9.0" fi printf "\n%.0s" {1..1} printf "${INFO} Kindly Standby...cloning and compiling ${SKY_BLUE}Aylur's GTK shell $ags_tag${RESET}...\n" printf "\n%.0s" {1..1} # Clone repository with the specified tag and capture git output into MLOG if git clone --depth=1 https://github.com/JaKooLit/ags_v1.9.0.git; then cd ags_v1.9.0 || exit 1 # Patch tsconfig to avoid TS5107 failure (moduleResolution=node10 deprecation) if [ -f tsconfig.json ]; then # 1) Ensure ignoreDeprecations is present if ! grep -q '"ignoreDeprecations"[[:space:]]*:' tsconfig.json; then sed -i 's/"compilerOptions":[[:space:]]*{/"compilerOptions": {\n "ignoreDeprecations": "6.0",/' tsconfig.json fi # 2) Bump moduleResolution from node10 to node16 if present if grep -q '"moduleResolution"[[:space:]]*:[[:space:]]*"node10"' tsconfig.json; then sed -i 's/"moduleResolution"[[:space:]]*:[[:space:]]*"node10"/"moduleResolution": "node16"/' tsconfig.json || true fi # 3) Fallback with Node to rewrite JSON if sed failed to catch patterns if grep -q '"moduleResolution"[[:space:]]*:[[:space:]]*"node10"' tsconfig.json; then if command -v node >/dev/null 2>&1; then node -e ' const fs = require("fs"); const p = "tsconfig.json"; const j = JSON.parse(fs.readFileSync(p, "utf8")); j.compilerOptions = j.compilerOptions || {}; if (j.compilerOptions.moduleResolution === "node10") j.compilerOptions.moduleResolution = "node16"; if (j.compilerOptions.ignoreDeprecations === undefined) j.compilerOptions.ignoreDeprecations = "6.0"; fs.writeFileSync(p, JSON.stringify(j, null, 2)); ' fi fi # Log what we ended up with for troubleshooting echo "== tsconfig.json after patch ==" >> "$MLOG" grep -n 'moduleResolution\|ignoreDeprecations' tsconfig.json >> "$MLOG" || true fi npm install meson setup build if sudo meson install -C build 2>&1 | tee -a "$MLOG"; then printf "\n${OK} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} installed successfully.\n" 2>&1 | tee -a "$MLOG" else echo -e "\n${ERROR} ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Installation failed\n " 2>&1 | tee -a "$MLOG" fi LAUNCHER_DIR="/usr/local/share/com.github.Aylur.ags" LAUNCHER_PATH="$LAUNCHER_DIR/com.github.Aylur.ags" sudo mkdir -p "$LAUNCHER_DIR" # Install a known-good launcher that sets GI_TYPELIB_PATH so GUtils and other # typelibs can be found, matching the working setup on jak-cachy. sudo tee "$LAUNCHER_PATH" >/dev/null <<'EOF' #!/usr/sbin/gjs -m import { exit, programArgs, programInvocationName } from "system"; import GLib from "gi://GLib"; GLib.setenv("GI_TYPELIB_PATH", "/usr/local/lib:/usr/lib/girepository-1.0", true); imports.package.init({ name: "com.github.Aylur.ags", version: "1.9.0", prefix: "/usr/local", libdir: "/usr/local/lib", }); const module = await import("resource:///com/github/Aylur/ags/main.js"); const exitCode = await module.main([programInvocationName, ...programArgs]); exit(exitCode); EOF # Also install a convenience launcher in /usr/local/bin/ags sudo mkdir -p /usr/local/bin sudo tee /usr/local/bin/ags >/dev/null <<'EOF' #!/usr/sbin/gjs -m import { exit, programArgs, programInvocationName } from "system"; import GLib from "gi://GLib"; GLib.setenv("GI_TYPELIB_PATH", "/usr/local/lib:/usr/lib/girepository-1.0", true); imports.package.init({ name: "com.github.Aylur.ags", version: "1.9.0", prefix: "/usr/local", libdir: "/usr/local/lib", }); const module = await import("resource:///com/github/Aylur/ags/main.js"); const exitCode = await module.main([programInvocationName, ...programArgs]); exit(exitCode); EOF sudo chmod +x /usr/local/bin/ags printf "${OK} AGS launcher installed.\n" # Move logs to Install-Logs directory mv "$MLOG" ../Install-Logs/ || true cd .. else echo -e "\n${ERROR} Failed to download ${YELLOW}Aylur's GTK shell $ags_tag${RESET} Please check your connection\n" 2>&1 | tee -a "$LOG" mv "$MLOG" ../Install-Logs/ || true exit 1 fi printf "\n%.0s" {1..2}