mirror of
https://github.com/romkatv/powerlevel10k
synced 2024-12-14 10:05:22 +00:00
183 lines
7.9 KiB
Bash
Executable File
183 lines
7.9 KiB
Bash
Executable File
#!/usr/bin/env zsh
|
|
#vim:ft=zsh ts=2 sw=2 sts=2 et fenc=utf-8
|
|
|
|
# Taken from NeoFetch (slightly modified)
|
|
get_term() {
|
|
local term
|
|
# If function was run, stop here.
|
|
#((term_run == 1)) && return
|
|
|
|
# Workaround for macOS systems that
|
|
# don't support the block below.
|
|
case "$TERM_PROGRAM" in
|
|
"iTerm.app") term="iTerm2" ;;
|
|
"Terminal.app") term="Apple Terminal" ;;
|
|
"Hyper") term="HyperTerm" ;;
|
|
*) term="${TERM_PROGRAM/\.app}" ;;
|
|
esac
|
|
|
|
# Check $PPID for terminal emulator.
|
|
while [[ -z "$term" ]]; do
|
|
parent="$(get_ppid "$parent")"
|
|
name="$(get_process_name "$parent")"
|
|
|
|
case "${name// }" in
|
|
"${SHELL/*\/}" | *"sh" | "tmux"* | "screen" | "su"*) ;;
|
|
"login"* | *"Login"* | "init" | "(init)") term="$(tty)" ;;
|
|
"ruby" | "1" | "systemd" | "sshd"* | "python"* | "USER"*"PID"*) break ;;
|
|
"gnome-terminal-") term="gnome-terminal" ;;
|
|
*) term="${name##*/}" ;;
|
|
esac
|
|
done
|
|
|
|
# Log that the function was run.
|
|
#term_run=1
|
|
|
|
echo "${term}"
|
|
}
|
|
|
|
get_term_font() {
|
|
local term="${1}"
|
|
#((term_run != 1)) && get_term
|
|
|
|
case "$term" in
|
|
"alacritty"*)
|
|
term_font="$(awk -F ':|#' '/normal:/ {getline; print}' "${XDG_CONFIG_HOME}/alacritty/alacritty.yml")"
|
|
term_font="${term_font/*family:}"
|
|
term_font="${term_font/$'\n'*}"
|
|
term_font="${term_font/\#*}"
|
|
;;
|
|
|
|
"Apple_Terminal")
|
|
term_font="$(osascript -e 'tell application "Terminal" to font name of window frontmost')"
|
|
;;
|
|
"iTerm2")
|
|
# Unfortunately the profile name is not unique, but it seems to be the only thing
|
|
# that identifies an active profile. There is the "id of current session of current window"
|
|
# thou, but that does not match to a guid in the plist.
|
|
# So, be warned! Collisions may occur!
|
|
# See: https://groups.google.com/forum/#!topic/iterm2-discuss/0tO3xZ4Zlwg
|
|
# and: https://gitlab.com/gnachman/iterm2/issues/5586
|
|
local currentProfileName=$(osascript -e 'tell application "iTerm2" to profile name of current session of current window')
|
|
|
|
# Warning: Dynamic profiles are not taken into account here!
|
|
# https://www.iterm2.com/documentation-dynamic-profiles.html
|
|
|
|
local nonAsciiFont
|
|
|
|
# Count Guids in "New Bookmarks"; they should be unique
|
|
local profilesCount=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:" ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null | grep -c "Guid")
|
|
for idx in $(seq 0 "${profilesCount}"); do
|
|
local profileName=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Name:" ~/Library/Preferences/com.googlecode.iterm2.plist 2>/dev/null)
|
|
if [[ "${profileName}" == "${currentProfileName}" ]]; then
|
|
# "Normal Font"
|
|
term_font=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Normal\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist)
|
|
|
|
# Font for non-ascii characters
|
|
# Only check for a different non-ascii font, if the user checked
|
|
# the "use a different font for non-ascii text" switch.
|
|
local useDifferentFont=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Use\ Non-ASCII\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist)
|
|
if [[ "$useDifferentFont" == "true" ]]; then
|
|
local nonAsciiFont=$(/usr/libexec/PlistBuddy -c "Print :New\ Bookmarks:${idx}:Non\ Ascii\ Font:" ~/Library/Preferences/com.googlecode.iterm2.plist)
|
|
if [[ "$term_font" != "$nonAsciiFont" ]]; then
|
|
term_font="$term_font (normal) / $nonAsciiFont (non-ascii)"
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
;;
|
|
|
|
"deepin-terminal"*)
|
|
term_font="$(awk -F '=' '/font=/ {a=$2} /font_size/ {b=$2} END{print a " " b}' "${XDG_CONFIG_HOME}/deepin/deepin-terminal/config.conf")"
|
|
;;
|
|
|
|
"Hyper"*)
|
|
term_font="$(awk -F "," '/fontFamily/ {a=$1} END{print a}' "${HOME}/.hyper.js" | awk -F "'" '{a=$2} END{print a}')"
|
|
;;
|
|
|
|
"konsole"*)
|
|
# Get Process ID of current konsole window / tab
|
|
child="$(get_ppid "$$")"
|
|
|
|
konsole_instances=($(qdbus | grep 'org.kde.konsole'))
|
|
|
|
for i in "${konsole_instances[@]}"; do
|
|
konsole_sessions=($(qdbus "${i}" | grep '/Sessions/'))
|
|
for session in "${konsole_sessions[@]}"; do
|
|
if ((child == "$(qdbus "${i}" "${session}" processId)")); then
|
|
profile="$(qdbus "${i}" "${session}" environment | awk -F '=' '/KONSOLE_PROFILE_NAME/ {print $2}')"
|
|
break
|
|
fi
|
|
done
|
|
[[ "$profile" ]] && break
|
|
done
|
|
|
|
# We could have two profile files for the same profile name, take first match
|
|
profile_filename="$(grep -l "Name=${profile}" "${HOME}"/.local/share/konsole/*.profile)"
|
|
profile_filename="${profile_filename/$'\n'*}"
|
|
[[ "$profile_filename" ]] && term_font="$(awk -F '=|,' '/Font=/ {print $2 " " $3}' "$profile_filename")"
|
|
;;
|
|
|
|
"mintty")
|
|
term_font="$(awk -F '=' '!/^($|#)/ && /Font/ {printf $2; exit}' "${HOME}/.minttyrc")"
|
|
;;
|
|
|
|
"pantheon"*)
|
|
term_font="$(gsettings get org.pantheon.terminal.settings font)"
|
|
[[ -z "${term_font//\'}" ]] && term_font="$(gsettings get org.gnome.desktop.interface monospace-font-name)"
|
|
term_font="$(trim_quotes "$term_font")"
|
|
;;
|
|
|
|
"sakura"*)
|
|
term_font="$(awk -F '=' '/^font=/ {a=$2} END{print a}' "${XDG_CONFIG_HOME}/sakura/sakura.conf")"
|
|
;;
|
|
|
|
"terminology")
|
|
term_font="$(strings "${XDG_CONFIG_HOME}/terminology/config/standard/base.cfg" | awk '/^font\.name$/{print a}{a=$0}')"
|
|
term_font="${term_font/.pcf}"
|
|
term_font="${term_font/:*}"
|
|
;;
|
|
|
|
"termite")
|
|
[[ -f "${XDG_CONFIG_HOME}/termite/config" ]] && termite_config="${XDG_CONFIG_HOME}/termite/config"
|
|
term_font="$(awk -F '= ' '/\[options\]/ {opt=1} /^font/ {if(opt==1) a=$2; opt=0} END{print a}' "/etc/xdg/termite/config" "$termite_config")"
|
|
;;
|
|
|
|
"urxvt" | "urxvtd" | "rxvt-unicode" | "xterm")
|
|
term_font="$(grep -i -F "${term/d}*font" < <(xrdb -query))"
|
|
term_font="${term_font/*font:}"
|
|
term_font="$(trim "$term_font")"
|
|
|
|
# Xresources has two different font formats, this checks which
|
|
# one is in use and formats it accordingly.
|
|
case "$term_font" in
|
|
*"xft:"*)
|
|
term_font="${term_font/xft:}"
|
|
term_font="${term_font/:*}"
|
|
;;
|
|
|
|
"-"*) term_font="$(awk -F '\\-' '{printf $3}' <<< "$term_font")" ;;
|
|
esac
|
|
;;
|
|
|
|
"xfce4-terminal")
|
|
term_font="$(awk -F '=' '/^FontName/ {a=$2} END{print a}' "${XDG_CONFIG_HOME}/xfce4/terminal/terminalrc")"
|
|
;;
|
|
esac
|
|
|
|
echo "${term_font}"
|
|
}
|
|
|
|
local currentTerminal=$(get_term)
|
|
local currentFont=$(get_term_font "${currentTerminal}")
|
|
print -P "===== Font debugging ====="
|
|
print -P "You are using %F{blue}${currentTerminal}%f with Font %F{blue}${currentFont}%f\n"
|
|
|
|
if [[ $(echo "${currentFont}" | grep -c -E "Powerline|Awesome|Nerd") -eq 0 ]]; then
|
|
print -P "%F{yellow}WARNING%f It does not seem like you use an Powerline-enabled or Awesome Terminal Font!"
|
|
print -P "Please make sure that your font settings are correct!"
|
|
else
|
|
print -P "Your font settings seem to be all right. If you still have issues,"
|
|
print -P "it is more likely to be a font issue than a Powerlevel9k related one."
|
|
fi
|