#!/usr/bin/env bash DEST=${1:-/etc/skel} GHOSTTY_HOME=${DEST}/.config/ghostty ALIASES_D="${DEST}/.zsh_aliases.d" ALIAS_FILE="${ALIASES_D}/003_ghostty.zsh" sudo apt update sudo apt install ghostty # https://ghostty.org/docs/config/reference mkdir -p "${GHOSTTY_HOME}" # https://gist.githubusercontent.com/adibhanna/c552c452fb244b3b721e3c2432e85cde/raw/a7540b1bfe1d653df303ed2aecf943bc15515752/config # https://www.youtube.com/watch?v=jWuQxU4bDeU&t=7s conf_print_ghostty_config() { cat <r=reload_config keybind = cmd+s>x=close_surface keybind = cmd+s>n=new_window # tabs keybind = cmd+s>c=new_tab keybind = cmd+s>shift+l=next_tab keybind = cmd+s>shift+h=previous_tab keybind = cmd+s>comma=move_tab:-1 keybind = cmd+s>period=move_tab:1 # quick tab switch keybind = cmd+s>1=goto_tab:1 keybind = cmd+s>2=goto_tab:2 keybind = cmd+s>3=goto_tab:3 keybind = cmd+s>4=goto_tab:4 keybind = cmd+s>5=goto_tab:5 keybind = cmd+s>6=goto_tab:6 keybind = cmd+s>7=goto_tab:7 keybind = cmd+s>8=goto_tab:8 keybind = cmd+s>9=goto_tab:9 # split keybind = cmd+s>\=new_split:right keybind = cmd+s>-=new_split:down keybind = cmd+s>j=goto_split:bottom keybind = cmd+s>k=goto_split:top keybind = cmd+s>h=goto_split:left keybind = cmd+s>l=goto_split:right keybind = cmd+s>z=toggle_split_zoom keybind = cmd+s>e=equalize_splits # other copy-on-select = clipboard EOF } conf_print_ghostty_config | tee "${GHOSTTY_HOME}/config.yaml" # OpenGL detection → decide if we force software rendering # Necessary is opengl is <=3.2 should_use_software() { local es_version="" # local gl_version="" # if command -v glxinfo >/dev/null 2>&1; then # gl_version=$(glxinfo | grep -i "OpenGL version string" | head -n 1 | awk -F: '{print $2}') # if [[ "$gl_version" =~ ^([4-9]\.|3\.[3-9]) ]]; then # return 1 # hardware ok # fi # fi local max_core max_core=$(glxinfo -B 2>/dev/null | grep "Max core profile" | awk '{print $5}') printf "max_core: %s\n" "${max_core}" if [[ "$max_core" =~ ^([4-9]\.|3\.[3-9]) ]]; then return 1 # Hardware supports OpenGL 3.2+ fi if command -v eglinfo >/dev/null 2>&1; then es_version=$(eglinfo -B 2>/dev/null | grep -i "OpenGL ES profile version" | head -n 1 | grep -oE '[0-9]+\.[0-9]+' || true) printf "es_version %s\n" "${es_version}" if [[ "$es_version" =~ ^[3-9]\. ]]; then return 1 # GLES 3+ usually good enough fi fi return 0 # force software } conf_print_ghostty_desktop() { cat </dev/null # kitty → hardware rendering (OpenGL ≥3.3 detected) alias ghostty="ghostty" EOF } conf_print_ghostty_alias_sw() { cat <<'EOF' | tee "${ALIAS_FILE}" >/dev/null # ghostty → software rendering (old/weak OpenGL) alias ghostty="LIBGL_ALWAYS_SOFTWARE=1 ghostty" EOF } # We now use the adapted desktop file conf_print_ghostty_wrapper() { mkdir -p /usr/local/bin/ cat >/usr/local/bin/ghostty-wrapper <<'EOF' #!/bin/sh export LIBGL_ALWAYS_SOFTWARE=1 exec /usr/bin/ghostty "$@" EOF } # conf_print_ghostty_wrapper # sudo chmod +x "/usr/local/bin/ghostty-wrapper" if should_use_software; then conf_print_ghostty_alias_sw echo "# Forced software rendering due to insufficient OpenGL support" | tee -a "${ALIAS_FILE}" >/dev/null # For xfce4 that ignores user aliases conf_print_ghostty_desktop | tee "${DEST}/.local/share/applications/com.mitchellh.ghostty.desktop" >/dev/null update-desktop-database "${DEST}/.local/share/applications" # Add to alternatives and select default #sudo update-alternatives --install /usr/bin/x-terminal-emulator x-terminal-emulator /usr/local/bin/ghostty-wrapper 60 sudo update-alternatives --install /usr/bin/x-terminal-emulator x-terminal-emulator /usr/bin/ghostty 60 sudo update-alternatives --config x-terminal-emulator else conf_print_ghostty_alias_hw echo "# Using hardware rendering" | tee -a "${ALIAS_FILE}" >/dev/null sudo update-alternatives --config x-terminal-emulator fi ghostty +validate-config