#!/bin/bash # ============================================================================= # # ██████╗ ███████╗███████╗██╗ ██╗████████╗ ██████╗ ██████╗ # ██╔══██╗██╔════╝██╔════╝██║ ██╔╝╚══██╔══╝██╔═══██╗██╔══██╗ # ██║ ██║█████╗ ███████╗█████╔╝ ██║ ██║ ██║██████╔╝ # ██║ ██║██╔══╝ ╚════██║██╔═██╗ ██║ ██║ ██║██╔═══╝ # ██████╔╝███████╗███████║██║ ██╗ ██║ ╚██████╔╝██║ # ╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ # # Desktop Setup Script — by suryacagur # https://pc.suryacagur.online # https://github.com/ptkelanatechsolutions/FreshLinux # # ============================================================================= # ───────────────────────────────────────────────────────────────────────────── # COLORS # ───────────────────────────────────────────────────────────────────────────── RED='\e[31m' GREEN='\e[32m' YELLOW='\e[33m' BLUE='\e[34m' MAGENTA='\e[35m' CYAN='\e[36m' WHITE='\e[97m' DARK_GRAY='\e[90m' BOLD='\e[1m' RESET='\e[0m' # ───────────────────────────────────────────────────────────────────────────── # LABELS # ───────────────────────────────────────────────────────────────────────────── TAG_INFO="${CYAN}[INFO]${RESET}" TAG_OK="${GREEN}[ OK ]${RESET}" TAG_SUKSES="${BOLD}${GREEN}[SUKSES]${RESET}" TAG_WARNING="${YELLOW}[ WARN ]${RESET}" TAG_ERROR="${BOLD}${RED}[ERROR]${RESET}" TAG_STEP="${BOLD}${BLUE}[STEP]${RESET}" TAG_INPUT="${BOLD}${WHITE}[INPUT]${RESET}" TAG_PROSES="${DARK_GRAY}[PROSES]${RESET}" TAG_NOTICE="${BOLD}${MAGENTA}[NOTICE]${RESET}" TAG_SKIP="${CYAN}[ SKIP ]${RESET}" # ───────────────────────────────────────────────────────────────────────────── # STATE TRACKING # ───────────────────────────────────────────────────────────────────────────── CURRENT_USER="$(whoami)" HOME_DIR="$(eval echo ~"$CURRENT_USER")" CURRENT_DIR="$(pwd)" START_TIME="$(date '+%Y-%m-%d %H:%M:%S')" NVM_VERSION="—" NPM_VERSION="—" PNPM_VERSION="—" BREW_VERSION="—" GCC_VERSION="—" TREE_VERSION="—" BRAVE_VERSION="—" NPM_PNPM_SKIPPED=false BREW_SKIPPED=false BRAVE_SKIPPED=false # ───────────────────────────────────────────────────────────────────────────── # HOMEBREW ENVIRONMENT — paksa Homebrew untuk tidak menghasilkan warna sendiri # agar seluruh output bisa di-dim (DARK_GRAY) secara konsisten oleh run_dimmed_shell # ───────────────────────────────────────────────────────────────────────────── export HOMEBREW_NO_COLOR=1 export HOMEBREW_NO_EMOJI=1 export HOMEBREW_NO_ENV_HINTS=1 # ───────────────────────────────────────────────────────────────────────────── # HELPER FUNCTIONS # ───────────────────────────────────────────────────────────────────────────── info() { echo -e " ${TAG_INFO} $*"; } ok() { echo -e " ${TAG_OK} $*"; } sukses() { echo -e " ${TAG_SUKSES} $*"; } warning() { echo -e " ${TAG_WARNING} $*"; } err() { echo -e " ${TAG_ERROR} $*"; } proses() { echo -e " ${TAG_PROSES} ${DARK_GRAY}$*${RESET}"; } notice() { echo -e " ${TAG_NOTICE} ${BOLD}$*${RESET}"; } skip() { echo -e " ${TAG_SKIP} $*"; } step() { local title="$*" echo "" echo -e " ${TAG_STEP} ${BOLD}${WHITE}${title}${RESET}" echo -e " ${DARK_GRAY}$(printf '─%.0s' $(seq 1 60))${RESET}" } # Kotak bold kuning — digunakan untuk highlight interaksi user yang diperlukan bold_notice() { local msg="$*" local width=72 local msglen=${#msg} local pad=$(( width - msglen - 2 )) [ $pad -lt 0 ] && pad=0 local spaces spaces="$(printf ' %.0s' $(seq 1 $pad))" echo "" echo -e " ${BOLD}${YELLOW}┌$(printf '─%.0s' $(seq 1 $width))┐${RESET}" echo -e " ${BOLD}${YELLOW}│ ${WHITE}${msg}${spaces}${YELLOW} │${RESET}" echo -e " ${BOLD}${YELLOW}└$(printf '─%.0s' $(seq 1 $width))┘${RESET}" echo "" } abort() { echo "" err "$*" echo "" exit 1 } get_apt_pkg_version() { local pkg="$1" dpkg-query -W -f='${Version}' "${pkg}" 2>/dev/null || echo "tidak terinstall" } # ───────────────────────────────────────────────────────────────────────────── # run_dimmed_shell — eksekusi command shell dengan SELURUH output (stdout + stderr) # di-prefix per baris dengan ANSI DARK_GRAY (\e[90m) dan diakhiri RESET (\e[0m). # # Ini menjamin bahwa output apt / brew / curl-installer yang biasanya # memunculkan warna ANSI sendiri (hijau/kuning/merah) tetap tampil sebagai # DARK_GRAY karena setiap baris dibungkus ulang oleh sed. # # Mempertahankan exit code asli command via PIPESTATUS[0]. # Argumen: string command shell tunggal (akan dieval). # # Contoh: # run_dimmed_shell 'sudo apt upgrade -y' # run_dimmed_shell 'brew install gcc' # ───────────────────────────────────────────────────────────────────────────── run_dimmed_shell() { local _cmd="$*" local _rc set -o pipefail { eval "${_cmd}" 2>&1; } | sed -u $'s/.*/\e[90m&\e[0m/' _rc=${PIPESTATUS[0]} set +o pipefail return ${_rc} } # ───────────────────────────────────────────────────────────────────────────── # ASCII HEADER # ───────────────────────────────────────────────────────────────────────────── print_header() { clear echo "" echo -e "${BOLD}${CYAN}" echo "██████╗ ███████╗███████╗██╗ ██╗████████╗ ██████╗ ██████╗ " echo "██╔══██╗██╔════╝██╔════╝██║ ██╔╝╚══██╔══╝██╔═══██╗██╔══██╗" echo "██║ ██║█████╗ ███████╗█████╔╝ ██║ ██║ ██║██████╔╝" echo "██║ ██║██╔══╝ ╚════██║██╔═██╗ ██║ ██║ ██║██╔═══╝ " echo "██████╔╝███████╗███████║██║ ██╗ ██║ ╚██████╔╝██║ " echo "╚═════╝ ╚══════╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ " echo -e "${RESET}" echo -e " ${BOLD}${WHITE}══════════════════════════════════════════════════════${RESET}" echo -e " ${BOLD}${WHITE} Desktop Setup Script · by suryacagur ${RESET}" echo -e " ${BOLD}${WHITE} https://github.com/ptkelanatechsolutions/FreshLinux ${RESET}" echo -e " ${BOLD}${WHITE}══════════════════════════════════════════════════════${RESET}" echo "" } # ============================================================================= # STEP 1 — KESIAPAN PENGGUNA # ============================================================================= check_readiness() { step "PERSIAPAN — Kesiapan Pengguna" echo "" info "Script ini akan melakukan instalasi desktop environment secara lengkap." info "Beberapa tahap memerlukan kehadiran aktif Anda di depan komputer untuk:" echo "" echo -e " ${YELLOW}→${RESET} Mengisi password ${BOLD}sudo${RESET} saat diminta" echo -e " ${YELLOW}→${RESET} Konfirmasi interaktif ${BOLD}y/Y${RESET} pada pnpm" echo -e " ${YELLOW}→${RESET} Menekan ${BOLD}RETURN/ENTER${RESET} saat instalasi Homebrew" echo "" echo -e " ${BOLD}${YELLOW}Menjalan script ini harus standby depan komputer untuk mengisi${RESET}" echo -e " ${BOLD}${YELLOW}password sudo dan interaktif yes pada beberapa package,${RESET}" echo -ne " ${TAG_INPUT} ${BOLD}apakah Anda siap? [y/N]: ${RESET}" local ready_answer read -r ready_answer /dev/null; then BRAVE_VERSION="$(brave-browser --version 2>/dev/null | awk '{print $NF}' || echo 'unknown')" BRAVE_SKIPPED=true ok "Brave Browser sudah terinstall — versi: ${BOLD}${BRAVE_VERSION}${RESET}" skip "Melewati instalasi Brave Browser. Lanjut ke step berikutnya..." return 0 fi warning "Brave Browser tidak ditemukan. Memulai proses instalasi..." proses "Menjalankan: curl -fsS https://dl.brave.com/install.sh | sh" bold_notice "⚡ SUDO PASSWORD — Masukkan password sudo Anda jika diminta di bawah:" run_dimmed_shell 'curl -fsS https://dl.brave.com/install.sh | sh' local exit_code=$? if [ $exit_code -ne 0 ]; then abort "Gagal menginstall Brave Browser. Periksa koneksi internet dan coba lagi." fi if command -v brave-browser &>/dev/null; then BRAVE_VERSION="$(brave-browser --version 2>/dev/null | awk '{print $NF}' || echo 'unknown')" ok "Brave Browser berhasil diinstall — versi: ${BOLD}${BRAVE_VERSION}${RESET}" else warning "Brave Browser belum terdeteksi setelah instalasi. Coba restart terminal." BRAVE_VERSION="(perlu restart terminal)" fi } # ============================================================================= # STEP 9 — CEK DAN INSTALASI npm & pnpm via NVM # ============================================================================= check_install_npm_pnpm() { step "PEMERIKSAAN — npm dan pnpm" local npm_exists=false local pnpm_exists=false if command -v npm &>/dev/null; then npm_exists=true NPM_VERSION="$(npm --version 2>/dev/null || echo 'unknown')" ok "npm sudah terinstall — versi: ${BOLD}${NPM_VERSION}${RESET}" else warning "npm tidak ditemukan di sistem." fi if command -v pnpm &>/dev/null; then pnpm_exists=true PNPM_VERSION="$(pnpm --version 2>/dev/null || echo 'unknown')" ok "pnpm sudah terinstall — versi: ${BOLD}${PNPM_VERSION}${RESET}" else warning "pnpm tidak ditemukan di sistem." fi if [ "${npm_exists}" = true ] && [ "${pnpm_exists}" = true ]; then NPM_PNPM_SKIPPED=true # Coba ambil NVM version jika tersedia if [ -s "$HOME/.nvm/nvm.sh" ]; then export NVM_DIR="$HOME/.nvm" # shellcheck source=/dev/null \. "$NVM_DIR/nvm.sh" 2>/dev/null || true NVM_VERSION="$(nvm --version 2>/dev/null || echo 'N/A')" else NVM_VERSION="N/A (tidak terdeteksi)" fi skip "npm dan pnpm sudah tersedia. Melewati instalasi NVM." return 0 fi # ── 8a: INSTALL NVM ──────────────────────────────────────────────────── step "INSTALASI — NVM (Node Version Manager) v0.40.4" proses "Mendownload dan menjalankan installer NVM v0.40.4..." run_dimmed_shell 'curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.4/install.sh | bash' local exit_code=$? if [ $exit_code -ne 0 ]; then abort "Gagal menginstall NVM. Periksa koneksi internet dan coba lagi." fi ok "NVM installer selesai dijalankan." # ── 8b: LOAD NVM ─────────────────────────────────────────────────────── proses "Memuat NVM ke sesi shell saat ini..." export NVM_DIR="$HOME/.nvm" # shellcheck source=/dev/null [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # shellcheck source=/dev/null [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # ── 8c: SOURCE NVM ───────────────────────────────────────────────────── proses "Menjalankan: . \$HOME/.nvm/nvm.sh" # shellcheck source=/dev/null \. "$HOME/.nvm/nvm.sh" || abort "Gagal menjalankan source NVM." if ! command -v nvm &>/dev/null; then abort "NVM tidak dapat dimuat ke sesi shell. Coba restart terminal dan jalankan ulang script." fi NVM_VERSION="$(nvm --version 2>/dev/null || echo 'unknown')" ok "NVM berhasil dimuat — versi: ${BOLD}${NVM_VERSION}${RESET}" # ── 8d: INSTALL NODE 24 ──────────────────────────────────────────────── step "INSTALASI — Node.js 24 via NVM" proses "Menjalankan: nvm install 24" run_dimmed_shell 'nvm install 24' local exit_code=$? if [ $exit_code -ne 0 ]; then abort "Gagal menginstall Node.js 24 via NVM." fi NPM_VERSION="$(npm --version 2>/dev/null || echo 'unknown')" ok "Node.js 24 berhasil diinstall — npm versi: ${BOLD}${NPM_VERSION}${RESET}" # ── 8e: COREPACK ENABLE PNPM ─────────────────────────────────────────── step "INSTALASI — pnpm via Corepack" proses "Menjalankan: corepack enable pnpm" run_dimmed_shell 'corepack enable pnpm' local exit_code=$? if [ $exit_code -ne 0 ]; then abort "Session terminal gagal menjalankan corepack enable pnpm. Jalankan ulang: curl -fsSL https://pc.suryacagur.online | bash" fi ok "Corepack pnpm berhasil diaktifkan." # ── 8f: PNPM -V (INTERAKTIF) ─────────────────────────────────────────── # Tetap menggunakan pola lama karena pnpm -v meminta input y/Y dari user # via TTY — pipe ke sed akan memutus stdin TTY dan membuat prompt tidak terbaca. bold_notice "⚡ INTERAKTIF — pnpm mungkin meminta konfirmasi instalasi." bold_notice " Ketik y/Y lalu tekan ENTER jika ada konfirmasi muncul:" printf "${DARK_GRAY}" pnpm -v /dev/null; then PNPM_VERSION="$(pnpm --version 2>/dev/null || echo 'unknown')" ok "pnpm berhasil terinstall — versi: ${BOLD}${PNPM_VERSION}${RESET}" else warning "pnpm belum terdeteksi. Coba restart terminal setelah script selesai." PNPM_VERSION="(perlu restart terminal)" fi } # ============================================================================= # STEP 10 — CEK DAN INSTALASI HOMEBREW # ============================================================================= check_install_homebrew() { step "PEMERIKSAAN — Homebrew" if command -v brew &>/dev/null; then BREW_VERSION="$(brew --version 2>/dev/null | head -1 || echo 'unknown')" BREW_SKIPPED=true ok "Homebrew sudah terinstall — ${BOLD}${BREW_VERSION}${RESET}" skip "Melewati instalasi Homebrew. Lanjut ke brew install gcc..." return 0 fi warning "Homebrew tidak ditemukan. Memulai proses instalasi..." info "Catatan: Homebrew tidak bisa diinstall sebagai root (sudah diverifikasi di awal)." # ── 9a: INSTALL HOMEBREW ─────────────────────────────────────────────── bold_notice "⚡ SUDO PASSWORD — Masukkan password sudo Anda jika diminta:" bold_notice "⚡ RETURN/ENTER — Tekan ENTER untuk konfirmasi instalasi Homebrew:" # Output Homebrew installer dipaksa dark gray via run_dimmed_shell. # NONINTERACTIVE=1 tidak digunakan agar prompt ENTER tetap muncul sesuai permintaan user. # Stdin tetap diarahkan dari /dev/tty agar user bisa menekan ENTER saat installer meminta. run_dimmed_shell '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" > "/home/${CURRENT_USER}/.bashrc" \ || abort "Gagal menulis ke /home/${CURRENT_USER}/.bashrc" echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)"' >> "/home/${CURRENT_USER}/.bashrc" \ || abort "Gagal menambahkan brew shellenv ke /home/${CURRENT_USER}/.bashrc" ok "Konfigurasi Homebrew ditambahkan ke .bashrc" # ── 9c: EVAL SHELLENV ───────────────────────────────────────────────── proses "Menjalankan: eval \"\$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)\"" eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv bash)" \ || abort "Gagal menjalankan brew shellenv eval." ok "Homebrew shellenv dimuat ke sesi saat ini." if ! command -v brew &>/dev/null; then abort "Homebrew tidak dapat dideteksi setelah instalasi. Coba restart terminal." fi BREW_VERSION="$(brew --version 2>/dev/null | head -1 || echo 'unknown')" ok "Homebrew versi: ${BOLD}${BREW_VERSION}${RESET}" } # ============================================================================= # STEP 11 — BREW INSTALL GCC # ============================================================================= install_gcc() { step "INSTALASI — gcc via Homebrew" proses "Menjalankan: brew install gcc" run_dimmed_shell 'brew install gcc' local exit_code=$? if [ $exit_code -ne 0 ]; then abort "Gagal menginstall gcc via Homebrew." fi GCC_VERSION="$(gcc --version 2>/dev/null | head -1 || echo 'unknown')" ok "gcc berhasil diinstall — ${BOLD}${GCC_VERSION}${RESET}" } # ============================================================================= # STEP 12 — BREW INSTALL TREE # ============================================================================= install_tree() { step "INSTALASI — tree via Homebrew" proses "Menjalankan: brew install tree" run_dimmed_shell 'brew install tree' local exit_code=$? if [ $exit_code -ne 0 ]; then abort "Gagal menginstall tree via Homebrew." fi TREE_VERSION="$(tree --version 2>/dev/null | head -1 || echo 'unknown')" ok "tree berhasil diinstall — ${BOLD}${TREE_VERSION}${RESET}" } # ============================================================================= # STEP 13 — APT UPDATE (FINAL) # ============================================================================= run_apt_update_final() { step "PROSES — Memperbarui Daftar Package Final (apt update)" proses "Menjalankan: sudo apt update" bold_notice "⚡ SUDO PASSWORD — Masukkan password sudo Anda jika diminta di bawah:" run_dimmed_shell 'sudo apt update' local exit_code=$? if [ $exit_code -ne 0 ]; then abort "Gagal menjalankan sudo apt update (final)." fi echo "" ok "apt update final selesai." } # ============================================================================= # STEP 14 — APT UPGRADE (FINAL) # ============================================================================= run_apt_upgrade_final() { step "PROSES — Memperbarui Package Final (apt upgrade)" proses "Menjalankan: sudo apt upgrade -y" bold_notice "⚡ SUDO PASSWORD — Masukkan password sudo Anda jika diminta di bawah:" run_dimmed_shell 'sudo apt upgrade -y' local exit_code=$? if [ $exit_code -ne 0 ]; then abort "Gagal menjalankan sudo apt upgrade -y (final)." fi echo "" ok "apt upgrade final selesai." step "FINAL — Reload Konfigurasi Shell" if [ -f "${HOME}/.bashrc" ]; then proses "Menjalankan source ~/.bashrc agar semua perubahan PATH langsung aktif..." # shellcheck source=/dev/null source "${HOME}/.bashrc" ok "~/.bashrc berhasil dimuat ulang — perubahan PATH dan environment siap digunakan." else warning "File ~/.bashrc tidak ditemukan. Lewati reload." fi echo "" } # ============================================================================= # STEP 15 — JALANKAN SSH # ============================================================================= run_ssh() { step "JALANKAN SSH — Mengaktifkan OpenSSH Server" proses "Menjalankan: sudo systemctl start ssh" bold_notice "⚡ SUDO PASSWORD — Masukkan password sudo Anda jika diminta di bawah:" run_dimmed_shell 'sudo systemctl start ssh' local exit_code=$? if [ $exit_code -ne 0 ]; then warning "Gagal menjalankan sudo systemctl start ssh." else ok "SSH berhasil dijalankan (start)." fi proses "Menjalankan: sudo systemctl enable ssh" run_dimmed_shell 'sudo systemctl enable ssh' local exit_code=$? if [ $exit_code -ne 0 ]; then warning "Gagal menjalankan sudo systemctl enable ssh." else ok "SSH berhasil diaktifkan (enable)." fi } # ============================================================================= # STEP 16 — RINGKASAN INSTALASI # ============================================================================= print_summary() { local end_time end_time="$(date '+%Y-%m-%d %H:%M:%S')" echo "" echo -e " ${BOLD}${GREEN}══════════════════════════════════════════════════════${RESET}" echo -e " ${BOLD}${GREEN} INSTALASI SELESAI — RINGKASAN ${RESET}" echo -e " ${BOLD}${GREEN}══════════════════════════════════════════════════════${RESET}" echo "" # ① Package Sistem echo -e " ${BOLD}${CYAN}① Package Sistem yang Diinstall (apt):${RESET}" local pkgs=( "curl" "wget" "git" "build-essential" "ca-certificates" "net-tools" "openssh-server" ) for pkg in "${pkgs[@]}"; do local ver ver="$(get_apt_pkg_version "${pkg}")" if [ "${ver}" = "tidak terinstall" ]; then echo -e " ${RED}✘${RESET} ${pkg} ${RED}— tidak terinstall${RESET}" else echo -e " ${GREEN}✔${RESET} ${pkg} ${DARK_GRAY}— ${ver}${RESET}" fi done echo "" # ② Brave Browser echo -e " ${BOLD}${CYAN}② Brave Browser:${RESET}" if [ "${BRAVE_SKIPPED}" = true ]; then echo -e " ${GREEN}✔${RESET} brave-browser — versi ${BOLD}${BRAVE_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" else echo -e " ${GREEN}✔${RESET} brave-browser — versi ${BOLD}${BRAVE_VERSION}${RESET}" fi echo "" # ③ NVM / npm / pnpm echo -e " ${BOLD}${CYAN}③ Node.js Environment:${RESET}" if [ "${NPM_PNPM_SKIPPED}" = true ]; then echo -e " ${CYAN}ℹ${RESET} NVM — versi ${BOLD}${NVM_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" echo -e " ${GREEN}✔${RESET} npm — versi ${BOLD}${NPM_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" echo -e " ${GREEN}✔${RESET} pnpm — versi ${BOLD}${PNPM_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" else echo -e " ${GREEN}✔${RESET} NVM — versi ${BOLD}${NVM_VERSION}${RESET}" echo -e " ${GREEN}✔${RESET} npm — versi ${BOLD}${NPM_VERSION}${RESET}" echo -e " ${GREEN}✔${RESET} pnpm — versi ${BOLD}${PNPM_VERSION}${RESET}" fi echo "" # ④ Homebrew echo -e " ${BOLD}${CYAN}④ Homebrew:${RESET}" if [ "${BREW_SKIPPED}" = true ]; then echo -e " ${GREEN}✔${RESET} ${BOLD}${BREW_VERSION}${RESET} ${DARK_GRAY}(sudah ada sebelumnya)${RESET}" else echo -e " ${GREEN}✔${RESET} ${BOLD}${BREW_VERSION}${RESET}" fi echo "" # ⑤ Homebrew Packages echo -e " ${BOLD}${CYAN}⑤ Package Homebrew yang Diinstall:${RESET}" echo -e " ${GREEN}✔${RESET} gcc — ${BOLD}${GCC_VERSION}${RESET}" echo -e " ${GREEN}✔${RESET} tree — ${BOLD}${TREE_VERSION}${RESET}" echo "" # ⑥ Waktu echo -e " ${DARK_GRAY} Mulai : ${START_TIME}${RESET}" echo -e " ${DARK_GRAY} Selesai : ${end_time}${RESET}" echo "" sukses "Desktop environment berhasil dikonfigurasi!" info "Disarankan ${BOLD}restart terminal${RESET} agar semua perubahan PATH aktif penuh." # ── CEK STATUS SSH ───────────────────────────────────────────────────── if sudo systemctl is-active --quiet ssh 2>/dev/null; then info "SSH ${BOLD}${GREEN}Aktif${RESET}" else info "SSH ${BOLD}${RED}Tidak aktif${RESET}" warning "Jalankan perintah berikut secara manual untuk mengaktifkan SSH:" echo -e " ${DARK_GRAY}\$ sudo systemctl start ssh${RESET}" echo -e " ${DARK_GRAY}\$ sudo systemctl enable ssh${RESET}" fi echo "" } # ============================================================================= # STEP 17 — OPSI LOG # ============================================================================= ask_log() { step "OPSIONAL — Buat Log Instalasi" echo "" echo -ne " ${TAG_INPUT} ${BOLD}Apakah Anda ingin membuat log untuk semua proses ini? [y/N]: ${RESET}" local log_answer read -r log_answer "${log_file}" << LOGEOF # Log Instalasi Desktop > **Script** : Desktop Setup Script by suryacagur > **URL** : https://pc.suryacagur.online > **Repository** : https://github.com/ptkelanatechsolutions/FreshLinux > **User** : \`${CURRENT_USER}\` > **Home** : \`${HOME_DIR}\` > **Mulai** : \`${START_TIME}\` > **Selesai** : \`${end_time}\` --- ## ① Package Sistem (apt install) | Package | Status | |---|---| $(for _pkg in curl wget git build-essential ca-certificates net-tools openssh-server; do _v="$(get_apt_pkg_version "$_pkg")"; if [ "$_v" = "tidak terinstall" ]; then echo "| $_pkg | ❌ Tidak terinstall |"; else echo "| $_pkg | ✅ \`$_v\` |"; fi; done) --- ## ② Brave Browser | Package | Versi | Keterangan | |---|---|---| | brave-browser | \`${BRAVE_VERSION}\` | $([ "${BRAVE_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | --- ## ③ Node.js Environment | Tool | Versi | Keterangan | |---|---|---| | NVM | \`${NVM_VERSION}\` | $([ "${NPM_PNPM_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | | npm | \`${NPM_VERSION}\` | $([ "${NPM_PNPM_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | | pnpm | \`${PNPM_VERSION}\` | $([ "${NPM_PNPM_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | --- ## ④ Homebrew | Package | Versi | Keterangan | |---|---|---| | Homebrew | \`${BREW_VERSION}\` | $([ "${BREW_SKIPPED}" = true ] && echo "Sudah ada sebelumnya" || echo "Baru diinstall") | | gcc | \`${GCC_VERSION}\` | Diinstall via Homebrew | | tree | \`${TREE_VERSION}\` | Diinstall via Homebrew | --- ## ⑤ Proses apt yang Dijalankan | Perintah | Status | |---|---| | \`sudo apt update\` (awal) | ✅ Berhasil | | \`sudo apt upgrade -y\` (awal) | ✅ Berhasil | | \`sudo apt install -y [packages]\` | ✅ Berhasil | | \`sudo apt update\` (akhir) | ✅ Berhasil | | \`sudo apt upgrade -y\` (akhir) | ✅ Berhasil | --- ## ⑥ Status SSH | Perintah | Status | |---|---| | \`sudo systemctl start ssh\` | ✅ Dijalankan | | \`sudo systemctl enable ssh\` | ✅ Dijalankan | | Status akhir | $(sudo systemctl is-active --quiet ssh 2>/dev/null && echo "✅ Aktif" || echo "❌ Tidak aktif") | --- *Log ini dibuat secara otomatis oleh pc.sh — suryacagur* *https://github.com/ptkelanatechsolutions/FreshLinux* LOGEOF local log_exit=$? if [ $log_exit -eq 0 ]; then sukses "Log berhasil disimpan di: ${BOLD}${log_file}${RESET}" else warning "Gagal membuat file log. Periksa izin direktori: ${CURRENT_DIR}" fi ;; n|N|"") info "Log tidak dibuat." ;; *) warning "Input tidak valid. Log tidak dibuat." ;; esac # Penutup echo "" echo -e " ${BOLD}${CYAN}══════════════════════════════════════════════════════${RESET}" echo -e " ${BOLD}${WHITE} ${RESET}" echo -e " ${BOLD}${WHITE} Terima kasih telah menggunakan Desktop Setup Script. ${RESET}" echo -e " ${BOLD}${WHITE} Semoga desktop Anda berjalan dengan lancar dan ${RESET}" echo -e " ${BOLD}${WHITE} optimal sesuai kebutuhan Anda. ${RESET}" echo -e " ${BOLD}${WHITE} ${RESET}" echo -e " ${BOLD}${WHITE} Salam, — suryacagur ${RESET}" echo -e " ${BOLD}${WHITE} https://github.com/ptkelanatechsolutions/FreshLinux ${RESET}" echo -e " ${BOLD}${WHITE} ${RESET}" echo -e " ${BOLD}${CYAN}══════════════════════════════════════════════════════${RESET}" echo "" } # ============================================================================= # MAIN # ============================================================================= main() { print_header check_readiness check_not_root check_architecture check_os run_apt_update_initial run_apt_upgrade_initial install_packages check_install_brave check_install_npm_pnpm check_install_homebrew install_gcc install_tree run_apt_update_final run_apt_upgrade_final run_ssh print_summary ask_log } main