This repository has been archived on 2024-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
neofetch/fetch

2085 lines
48 KiB
Plaintext
Raw Normal View History

2016-01-04 02:09:23 +00:00
#!/usr/bin/env bash
2016-01-26 12:09:38 +00:00
# vim:fdm=marker
2016-01-29 15:14:29 +00:00
#
2015-12-30 10:18:17 +00:00
# Fetch info about your system
2016-01-06 02:16:52 +00:00
# https://github.com/dylanaraps/fetch
2015-12-30 10:18:17 +00:00
#
2016-01-22 07:04:53 +00:00
# Required Dependencies:
# Bash 4.0+
# Text formatting, dynamic image size and padding: tput
# [Linux / BSD / Windows] Uptime detection: procps or procps-ng
#
2015-12-31 00:21:10 +00:00
# Optional Dependencies: (You'll lose these features without them)
2016-01-04 23:24:41 +00:00
# Displaying Images: w3m + w3m-img
2015-12-30 10:18:17 +00:00
# Image Cropping: ImageMagick
# More accurate window manager detection: wmctrl
# [ Linux / BSD ] Wallpaper Display: feh, nitrogen or gsettings
2016-01-22 07:04:53 +00:00
# [ Linux / BSD ] Current Song: mpc or cmus
# [ Linux / BSD ] Resolution detection: xorg-xdpyinfo
2015-12-30 10:18:17 +00:00
#
# Created by Dylan Araps
2016-01-05 04:02:24 +00:00
# https://github.com/dylanaraps/
2015-12-30 10:18:17 +00:00
# Speed up script by not using unicode
export LC_ALL=C
export LANG=c
export LANGUAGE=C
2016-01-06 07:34:34 +00:00
# Config Options {{{
# Info Options {{{
2016-01-06 07:34:34 +00:00
# Info
2016-01-20 22:49:50 +00:00
# See this wiki page for more info:
# https://github.com/dylanaraps/fetch/wiki/Customizing-Info
printinfo () {
2016-01-29 11:50:26 +00:00
info linebreak
info title
info underline
info "OS" distro
info "Kernel" kernel
info "Uptime" uptime
info "Packages" packages
info "Shell" shell
info "Window Manager" windowmanager
info "GTK Theme" gtktheme
info "Icons" gtkicons
info "CPU" cpu
info "GPU" gpu
info "Memory" memory
# info "Font" gtkfont
# info "Disk" disk
# info "Resolution" resolution
# info "Song" song
# info "Visual Style" visualstyle
info linebreak
info cols
info linebreak
}
2016-01-05 04:02:24 +00:00
# Kernel
# Show more kernel info
# --kernel_shorthand on/off
kernel_shorthand="on"
2016-01-28 01:44:06 +00:00
# Distro
2016-01-28 01:44:06 +00:00
# Mac OS X hide/show build version
# --osx_buildversion on/off
osx_buildversion="on"
2016-01-05 04:02:24 +00:00
# Uptime
# Shorten the output of the uptime function
# --uptime_shorthand tiny, on, off
uptime_shorthand="off"
# Shell
# Show the path to $SHELL
# --shell_path on/off
shell_path="on"
# Show $SHELL's version
# --shell_version on/off
shell_version="off"
# CPU
# CPU speed type
2016-01-19 11:30:17 +00:00
# Only works on Linux with cpufreq.
2016-01-24 21:58:56 +00:00
# --speed_type current, min, max, bios,
# scaling_current, scaling_min, scaling_max
speed_type="max"
# GPU
# Shorten output of the getgpu funcion
# --gpu_shorthand on/off
gpu_shorthand="off"
# Gtk Theme / Icons
# Shorten output (Hide [GTK2] etc)
# --gtk_shorthand on/off
gtk_shorthand="off"
# Enable/Disable gtk2 theme/icons output
# --gtk2 on/off
gtk2="on"
# Enable/Disable gtk3 theme/icons output
# --gtk3 on/off
gtk3="on"
# Color Blocks
2015-12-30 10:18:17 +00:00
# Color block range
# --block_range start end
start=0
end=7
2015-12-30 10:18:17 +00:00
# Toggle color blocks
# --color_blocks on/off
color_blocks="on"
2015-12-30 10:18:17 +00:00
# Color block width
# --color_block_width num
2016-01-03 08:55:09 +00:00
block_width=3
2015-12-30 10:18:17 +00:00
# }}}
# Text Colors {{{
# --colors 1 2 3 4 5
2015-12-30 10:18:17 +00:00
# --title_color num
title_color=4
2015-12-30 10:18:17 +00:00
# Color of "@" symbol in title
# --at_color num
at_color=6
# --subtitle_color num
subtitle_color=1
# --colon_color num
colon_color=8
# --underline_color num
underline_color=8
# --info_color num
info_color=6
2015-12-30 10:18:17 +00:00
# }}}
# Text Options {{{
# Toggle line wrapping
# --line_wrap on/off
line_wrap="on"
# Toggle bold text
# --bold on/off
bold="on"
# Toggle title underline
# --underline on/off
underline="on"
2015-12-31 00:21:10 +00:00
# Underline character
# --underline_char char
underline_char="-"
2015-12-30 10:18:17 +00:00
# Prompt height
# You should only have to change this if your
# prompt is greater than 2 lines high.
# --prompt_height num
prompt_height=1
2015-12-30 10:18:17 +00:00
# }}}
# Image Options {{{
# Image Source
2016-01-27 11:33:22 +00:00
# --image wall, shuffle, ascii, /path/to/img, off
image="wall"
2016-01-28 09:11:18 +00:00
# Thumbnail directory
imgtempdir="$HOME/.fetchimages"
# Image Backend
# Which program to draw images with
# --image_backend w3m, iterm2
image_backend="w3m"
# W3m-img path
# Some systems have this in another location
w3m_img_path="/usr/lib/w3m/w3mimgdisplay"
# Split Size
# Sizing for the img and text splits
# The larger the value the less space fetch will take up.
# The default value of 2 splits the image and text at
# half terminal width each.
# A value of 3 splits them at a third width each and etc.
# --split_size num
split_size=2
# Image position
# Only works with the w3m backend
# --image_position left/right
image_position="left"
# Shuffle dir
2016-01-27 04:01:48 +00:00
shuffle_dir="$HOME/Pictures/wallpapers/wash"
2015-12-30 10:18:17 +00:00
# Crop mode
# --crop_mode normal/fit/fill
crop_mode="normal"
2015-12-31 22:33:08 +00:00
# Crop offset
# Only affects normal mode.
# --crop_offset northwest/north/northeast/west/center
# east/southwest/south/southeast
crop_offset="center"
2015-12-31 00:21:10 +00:00
# Font width
# Used when calculating dynamic image size
font_width=5
2015-12-31 00:21:10 +00:00
# Right gap between image and text
# --gap num
2015-12-31 00:21:10 +00:00
gap=4
# Image offsets
# --xoffset px
# --yoffset px
2015-12-30 10:18:17 +00:00
yoffset=0
xoffset=0
2016-01-27 11:33:22 +00:00
# }}}
# Ascii Options {{{
# Default ascii image to use
# When this is set to distro it will use your
# distro's logo as the ascii.
# --ascii 'distro', path/to/ascii
ascii="distro"
2016-01-27 11:33:22 +00:00
# Ascii color
# When this is set to distro it will use your
# ditro's colors to color the ascii.
# --ascii_color distro, number
ascii_color="distro"
2016-01-27 11:33:22 +00:00
# }}}
2015-12-30 10:18:17 +00:00
2016-01-29 15:14:29 +00:00
# Scrot Options {{{
# Whether or not to always take a screenshot
# You can manually take a screenshot with "--scrot" or "-s"
scrot="off"
# Screenshot program to launch
# --scrot_cmd
scrot_cmd="scrot -c -d 3"
# Scrot dir
# Where to save the screenshots
# --scrot_dir /path/to/screenshot/folder
scrot_dir="$HOME/Pictures"
# Scrot filename
# What to name the screenshots
# --scrot_name str
scrot_name="fetch-%Y-%m-%d-%H:%M.png"
2016-01-29 15:14:29 +00:00
# }}}
# Config Options {{{
# Enable/Disable config file
config="on"
2016-01-30 00:09:36 +00:00
# Path to custom config file location
2016-01-29 15:14:29 +00:00
# --config path/to/config
config_file="$HOME/.config/fetch/config"
# }}}
2015-12-30 10:18:17 +00:00
# }}}
# Gather Info {{{
2015-12-30 10:18:17 +00:00
# Operating System {{{
case "$(uname)" in
"Linux")
os="Linux"
;;
2015-12-30 10:18:17 +00:00
"Darwin")
os="Mac OS X"
;;
2016-01-03 13:01:44 +00:00
"OpenBSD")
os="OpenBSD"
;;
2016-01-18 07:21:57 +00:00
*"BSD")
os="BSD"
;;
2016-01-05 05:32:34 +00:00
"CYGWIN"*)
os="Windows"
;;
2016-01-17 13:43:44 +00:00
*)
printf "%s\n" "Couldn't detect OS, exiting"
exit 1
2016-01-17 13:43:44 +00:00
;;
esac
2015-12-30 10:18:17 +00:00
# }}}
# Distro {{{
case "$os" in
"Linux" )
if type -p lsb_release >/dev/null 2>&1; then
2016-01-21 11:22:29 +00:00
distro="$(lsb_release -a 2>/dev/null | awk -F':' '/Description/ {printf $2}')"
distro=${distro/[[:space:]]}
elif type -p crux >/dev/null 2>&1; then
distro="CRUX"
else
distro="$(grep -h '^NAME=' /etc/*ease)"
distro=${distro#NAME\=*}
distro=${distro#\"*}
distro=${distro%*\"}
fi
;;
"Mac OS X")
distro="Mac OS X $(sw_vers -productVersion)"
2016-01-28 01:44:06 +00:00
[ "$osx_buildversion" == "on" ] && \
distro+=" $(sw_vers -buildVersion)"
;;
"OpenBSD")
distro="OpenBSD"
;;
"BSD")
distro="$(uname -v)"
distro=${distro%% *}
;;
2016-01-18 23:42:41 +00:00
"Windows")
case "$(cmd /c ver)" in
*"XP"*)
distro="Windows XP"
;;
2016-01-05 07:14:04 +00:00
*"7"*)
distro="Windows 7"
;;
2016-01-05 07:14:04 +00:00
*"8.1"*)
distro="Windows 8.1"
;;
2016-01-05 07:14:04 +00:00
*"8"*)
distro="Windows 8"
;;
2016-01-05 07:14:04 +00:00
*"10"*)
distro="Windows 10"
;;
2016-01-05 07:14:04 +00:00
*)
distro="Windows"
;;
esac
;;
2016-01-05 05:32:34 +00:00
*)
distro="Unknown"
;;
esac
ascii_distro="$distro"
getdistro () {
distro="$distro"
}
# }}}
# Title {{{
gettitle () {
title="${USER}@$(hostname)"
}
2015-12-30 10:18:17 +00:00
# }}}
# Kernel {{{
getkernel() {
case "$kernel_shorthand" in
"on") kernel="$(uname -r)" ;;
"off") kernel="$(uname -srm)" ;;
esac
}
2015-12-30 10:18:17 +00:00
# }}}
# Uptime {{{
getuptime () {
case "$os" in
"Linux")
uptime="$(uptime -p)"
;;
2016-01-19 06:33:41 +00:00
"Mac OS X" | *"BSD")
2016-01-06 00:00:20 +00:00
# Get boot time in seconds
2016-01-04 04:30:14 +00:00
boot="$(sysctl -n kern.boottime)"
boot="${boot/{ sec = }"
2016-01-04 04:30:14 +00:00
boot=${boot/,*}
# Get current date in seconds
now=$(date +%s)
uptime=$((now - boot))
2016-01-04 04:30:14 +00:00
# Convert uptime to days/hours/mins
mins=$((uptime / 60%60))
hours=$((uptime / 3600%24))
days=$((uptime / 86400))
2016-01-04 04:30:14 +00:00
# Format the output like Linux's "uptime -p" cmd.
case "$mins" in
0) ;;
1) uptime="up $mins minute" ;;
*) uptime="up $mins minutes" ;;
esac
case "$hours" in
0) ;;
1) uptime="up $hours hour, ${uptime/up }" ;;
*) uptime="up $hours hours, ${uptime/up }" ;;
esac
case "$days" in
0) ;;
1) uptime="up $days day, ${uptime/up }" ;;
*) uptime="up $days days, ${uptime/up }" ;;
esac
;;
2016-01-05 05:32:34 +00:00
"Windows")
uptime=$(uptime | awk -F ':[0-9]{2}+ |(, ){1}+' '{printf $2}')
2016-01-18 23:45:56 +00:00
uptime=${uptime/ / }
2016-01-05 05:32:34 +00:00
;;
*)
uptime="Unknown"
;;
2015-12-30 10:18:17 +00:00
esac
# Make the output of uptime smaller.
case "$uptime_shorthand" in
"on")
uptime=${uptime/up}
uptime=${uptime/minutes/mins}
uptime=${uptime/minute/min}
uptime=${uptime# }
;;
"tiny")
uptime=${uptime/up}
uptime=${uptime/ days/d}
uptime=${uptime/ day/d}
uptime=${uptime/ hours/h}
uptime=${uptime/ hour/h}
uptime=${uptime/ minutes/m}
uptime=${uptime/ minute/m}
uptime=${uptime/,}
uptime=${uptime# }
;;
esac
2015-12-30 10:18:17 +00:00
}
# }}}
# Package Count {{{
getpackages () {
case "$distro" in
"Arch Linux"* | "Parabola"* | "Manjaro"* | "Antergos"*)
packages="$(pacman -Qq --color never | wc -l)"
;;
2016-01-19 00:42:31 +00:00
"void"*)
packages="$(xbps-query -l | wc -l)"
;;
"Ubuntu"* | *"Mint"* | "CrunchBang"* | "Debian"* | "Kali Linux"* | "Deepin Linux"* | "elementary"*)
packages="$(dpkg --get-selections | grep -cv deinstall$)"
;;
2016-01-19 00:42:31 +00:00
"Slackware"*)
packages="$(ls -1 /var/log/packages | wc -l)"
;;
2016-01-19 00:42:31 +00:00
"Gentoo"* | "Funtoo"*)
packages="$(ls -d /var/db/pkg/*/* | wc -l)"
;;
2015-12-30 10:18:17 +00:00
2016-01-19 00:42:31 +00:00
"Fedora"* | "openSUSE"* | "Red Hat Enterprise Linux"* | "CentOS"*)
packages="$(rpm -qa | wc -l)"
;;
2015-12-30 10:18:17 +00:00
"CRUX")
packages="$(pkginfo -i | wc -l)"
;;
2016-01-04 03:38:38 +00:00
"Mac OS X"*)
if [ -d "/usr/local/bin" ]; then
local_packages=$(ls -l /usr/local/bin/ | grep -v "\(../Cellar/\|brew\)" | wc -l)
packages=$((local_packages - 1))
fi
if type -p port >/dev/null 2>&1; then
port_packages=$(port installed 2>/dev/null | wc -l)
packages=$((packages + $((port_packages - 1))))
fi
if type -p brew >/dev/null 2>&1; then
brew_packages=$(brew list -1 2>/dev/null | wc -l)
packages=$((packages + brew_packages))
fi
if type -p pkgin >/dev/null 2>&1; then
pkgsrc_packages=$(pkgin list 2>/dev/null | wc -l)
packages=$((packages + pkgsrc_packages))
fi
;;
2016-01-19 06:33:41 +00:00
"OpenBSD" | "NetBSD")
packages=$(pkg_info | wc -l)
2016-01-18 05:22:21 +00:00
;;
2016-01-19 06:33:41 +00:00
"FreeBSD")
packages=$(pkg info | wc -l)
;;
2016-01-05 05:32:34 +00:00
"Windows"*)
packages=$(cygcheck -cd | wc -l)
# Count chocolatey packages
if [ -d "/cygdrive/c/ProgramData/chocolatey/lib" ]; then
choco_packages=$(ls -1 /cygdrive/c/ProgramData/chocolatey/lib | wc -l)
packages=$((packages + choco_packages))
fi
2016-01-05 05:32:34 +00:00
;;
*)
packages="Unknown"
;;
esac
2016-01-18 06:17:32 +00:00
2016-01-18 23:44:25 +00:00
packages=${packages// }
}
# }}}
# Shell {{{
getshell () {
case "$shell_path" in
"on") shell="$SHELL " ;;
"off") shell="${SHELL##*/} " ;;
esac
if [ "$shell_version" == "on" ]; then
case "$shell" in
*"bash"*)
shell+="$(bash --version | head -n 1)"
shell=${shell/ *, version}
;;
*"zsh"*)
shell+="$(zsh --version)"
shell=${shell/ zsh}
;;
2016-01-29 04:40:52 +00:00
*"mksh"* | *"ksh")
shell+="$("$SHELL" -c 'printf "%s" "$KSH_VERSION"')"
shell=${shell/ * KSH}
;;
2016-01-29 04:40:52 +00:00
*"tcsh"* | *"csh"*)
shell+="$("$SHELL" --version)"
shell=${shell/tcsh}
shell=${shell/\(*}
;;
esac
shell="${shell/\(*\)}"
fi
}
# }}}
# Window Manager {{{
2015-12-31 00:21:10 +00:00
getwindowmanager () {
2016-01-22 23:31:24 +00:00
if type -p wmctrl >/dev/null 2>&1; then
windowmanager="$(wmctrl -m | head -n1)"
windowmanager=${windowmanager/Name: }
2016-01-05 04:02:24 +00:00
elif [ "$XDG_CURRENT_DESKTOP" ]; then
windowmanager="$XDG_CURRENT_DESKTOP"
2016-01-05 04:02:24 +00:00
elif [ "$XINITRC" ]; then
windowmanager=$(grep "^[^#]*exec" "$XINITRC")
2016-01-05 04:02:24 +00:00
elif [ -e "$HOME/.xinitrc" ]; then
windowmanager=$(grep "^[^#]*exec" "${HOME}/.xinitrc")
else
case "$os" in
"Mac OS X")
windowmanager="Quartz Compositor"
;;
"Windows")
windowmanager="Explorer"
;;
*)
windowmanager="Unknown"
;;
esac
fi
windowmanager="${windowmanager/exec }"
windowmanager="${windowmanager/-session}"
windowmanager="${windowmanager^}"
2015-12-31 00:21:10 +00:00
}
2015-12-30 10:18:17 +00:00
# }}}
# CPU {{{
getcpu () {
case "$os" in
"Linux")
2016-01-05 04:02:24 +00:00
# Get cpu name
cpu="$(grep -F 'model name' /proc/cpuinfo)"
cpu=${cpu/model name*: }
2016-01-24 12:36:54 +00:00
cpu=${cpu%% *}
2016-01-30 03:37:50 +00:00
cpu=${cpu/ @*}
2016-01-05 04:02:24 +00:00
# Get cpu speed
if [ -d "/sys/devices/system/cpu/cpu0/cpufreq" ]; then
case "$speed_type" in
current) speed_type="scaling_cur_freq" ;;
min) speed_type="scaling_min_freq" ;;
max) speed_type="scaling_max_freq" ;;
bios) speed_type="bios_limit" ;;
scaling_current) speed_type="scaling_cur_freq" ;;
scaling_min) speed_type="scaling_min_freq" ;;
scaling_max) speed_type="scaling_max_freq" ;;
esac
read -r speed < \
/sys/devices/system/cpu/cpu0/cpufreq/${speed_type}
else
speed=$(awk -F ': ' '/cpu MHz/ {printf $2; exit}' /proc/cpuinfo)
speed=${speed/\.}
fi
# Convert mhz to ghz without bc
speed=$((speed / 100000))
speed=${speed:0:1}.${speed:1}
2016-01-19 11:30:17 +00:00
cpu="$cpu @ ${speed}GHz"
;;
"Mac OS X")
cpu="$(sysctl -n machdep.cpu.brand_string)"
;;
*"BSD")
2016-01-19 00:05:43 +00:00
case "$distro" in
"OpenBSD")
# Get cpu name
cpu="$(sysctl -n hw.model)"
cpu=${cpu/ @*}
cpu=${cpu// }
2016-01-19 00:05:43 +00:00
cpu=${cpu% }
# Get cpu speed
speed=$(sysctl -n hw.cpuspeed)
speed=$((speed / 100))
;;
2016-01-19 06:33:41 +00:00
"FreeBSD")
# Get cpu name
2016-01-19 06:33:41 +00:00
cpu="$(sysctl -n hw.model)"
cpu=${cpu/ @*}
cpu=${cpu// }
cpu=${cpu% }
# Get cpu speed
2016-01-19 06:33:41 +00:00
speed="$(sysctl -n hw.clockrate)"
speed=$((speed / 100))
;;
2016-01-19 00:05:43 +00:00
"NetBSD")
# Get cpu name
cpu="$(grep -F 'model name' /proc/cpuinfo)"
cpu=${cpu/model name*: }
cpu=${cpu/ @*}
cpu=${cpu// }
2016-01-19 00:17:45 +00:00
cpu=${cpu% }
2016-01-19 00:12:38 +00:00
# Get cpu speed
speed="$(grep -F 'cpu MHz' /proc/cpuinfo)"
speed=${speed/cpu MHz*: }
speed=${speed/\.}
speed=$((speed / 10000))
2016-01-19 00:05:43 +00:00
;;
esac
speed=${speed:0:1}.${speed:1}
cpu="$cpu @ ${speed}GHz"
;;
2016-01-05 05:57:30 +00:00
"Windows")
# Get cpu name
cpu="$(grep -F 'model name' /proc/cpuinfo)"
cpu=${cpu/model name*: }
cpu=${cpu/ @*}
cpu=${cpu// }
2016-01-05 23:06:22 +00:00
cpu=${cpu% }
2016-01-05 07:27:02 +00:00
2016-01-05 22:01:21 +00:00
# Get cpu speed
speed=$(grep -F 'cpu MHz' /proc/cpuinfo)
speed=${speed/cpu MHz*: }
speed=${speed/\.}
2016-01-05 07:27:02 +00:00
# Convert mhz to ghz without bc
speed=$((speed / 100000))
2016-01-05 07:27:02 +00:00
speed=${speed:0:1}.${speed:1}
cpu="$cpu @ ${speed}GHz"
2016-01-05 05:57:30 +00:00
;;
*)
cpu="Unknown"
;;
esac
# Remove uneeded patterns from cpu output
# This is faster than sed/gsub
cpu=${cpu//(tm)}
cpu=${cpu//(TM)}
cpu=${cpu//(r)}
cpu=${cpu//(R)}
cpu=${cpu// CPU}
cpu=${cpu// Processor}
cpu=${cpu// Six-Core}
cpu=${cpu// Eight-Core}
cpu=${cpu// with Radeon HD Graphics}
}
2015-12-30 10:18:17 +00:00
# }}}
# GPU {{{
2016-01-19 00:55:45 +00:00
getgpu () {
2016-01-19 01:02:04 +00:00
case "$os" in
"Linux")
2016-01-26 10:25:28 +00:00
gpu="$(lspci | grep -F "VGA")"
gpu=${gpu/* VGA compatible controller: }
gpu=${gpu/(rev*)}
shopt -s nocasematch
case "$gpu" in
intel*)
gpu=${gpu/Intel Corporation }
gpu=${gpu/Haswell-??? }
2016-01-26 01:58:46 +00:00
brand="Intel "
;;
advanced*)
gpu=${gpu/Advanced Micro Devices, Inc\. }
gpu=${gpu/'[AMD/ATI]' }
gpu=${gpu/Tahiti PRO}
gpu=${gpu/Seymour}
gpu=${gpu/ OEM}
gpu=${gpu/ \[}
gpu=${gpu/\]}
2016-01-26 01:58:46 +00:00
brand="AMD "
;;
nvidia*)
gpu=${gpu/NVIDIA Corporation }
gpu=${gpu/nVidia Corporation }
gpu=${gpu/G????M }
gpu=${gpu/G???? }
gpu=${gpu/\[}
gpu=${gpu/\]}
2016-01-26 01:58:46 +00:00
brand="Nvidia "
;;
*virtualbox*)
gpu="VirtualBox Graphics Adapter"
;;
esac
2016-01-26 01:58:46 +00:00
gpu="${brand}${gpu}"
2016-01-19 00:55:45 +00:00
;;
"Mac OS X")
gpu=$( \
system_profiler SPDisplaysDataType | \
2016-01-22 04:12:43 +00:00
awk -F': ' '/^\ *Chipset Model:/ {printf $2}' | \
awk '{ printf "%s ", $0 }'
)
gpu=${gpu//'/ $'}
2016-01-19 00:55:45 +00:00
;;
2016-01-25 23:54:07 +00:00
*"BSD")
2016-01-19 00:55:45 +00:00
case "$distro" in
"FreeBSD")
gpu=$(pciconf -lv 2>/dev/null | grep -B 4 "VGA" | grep "device")
gpu=${gpu/device*= }
gpu=${gpu//\'}
2016-01-19 02:57:29 +00:00
gpu=${gpu//[[:space:]]/ }
gpu=${gpu// }
2016-01-19 00:55:45 +00:00
;;
2016-01-24 23:51:06 +00:00
*)
gpu="Unknown"
;;
2016-01-19 00:55:45 +00:00
esac
;;
"Windows")
gpu=$(wmic path Win32_VideoController get caption)
gpu=${gpu/Caption }
2016-01-19 01:22:32 +00:00
gpu=${gpu//[[:space:]]/ }
gpu=${gpu// }
2016-01-19 00:55:45 +00:00
;;
esac
2016-01-19 02:52:33 +00:00
if [ "$gpu_shorthand" == "on" ]; then
gpu=${gpu// Rev\. ?}
gpu=${gpu//AMD\/ATI/AMD}
gpu=${gpu// Tahiti}
gpu=${gpu// PRO}
gpu=${gpu// OEM}
gpu=${gpu// Mars}
gpu=${gpu// Series}
2016-01-19 08:33:52 +00:00
gpu=${gpu/\/*}
2016-01-19 02:52:33 +00:00
fi
2016-01-19 00:55:45 +00:00
}
# }}}
# Memory {{{
getmemory () {
case "$os" in
"Linux")
2016-01-05 05:20:06 +00:00
# Read first 3 lines
exec 6< /proc/meminfo
read -r memtotal <&6
read -r memfree <&6 # We don't actually use this var
read -r memavail <&6
2016-01-05 05:20:06 +00:00
exec 6<&-
# Do some substitution on each line
memtotal=${memtotal/MemTotal:}
memtotal=${memtotal/kB*}
memavail=${memavail/MemAvailable:}
memavail=${memavail/kB*}
2016-01-05 05:20:06 +00:00
memused=$((memtotal - memavail))
memory="$((memused / 1024))MB / $((memtotal / 1024))MB"
;;
"Mac OS X")
2016-01-04 03:59:47 +00:00
memtotal=$(printf "%s\n" "$(sysctl -n hw.memsize)"/1024^2 | bc)
memwired=$(vm_stat | awk '/wired/ { print $4 }')
2016-01-22 04:12:43 +00:00
memactive=$(vm_stat | awk '/active / { printf $3 }')
memcompressed=$(vm_stat | awk '/occupied/ { printf $5 }')
2016-01-30 05:31:22 +00:00
memused=$(((${memwired//.} + ${memactive//.} + ${memcompressed//.}) * 4 / 1024))
memory="${memused}MB / ${memtotal}MB"
;;
2016-01-18 06:48:27 +00:00
"OpenBSD" | "BSD")
2016-01-18 06:45:32 +00:00
case "$distro" in
2016-01-19 06:33:41 +00:00
"OpenBSD")
memtotal=$(dmesg | awk '/real mem/ {printf $5}')
memtotal=${memtotal/\(}
memtotal=${memtotal/MB\)}
2016-01-19 06:33:41 +00:00
2016-01-22 04:12:43 +00:00
memfree=$(top -d 1 | awk '/Real:/ {printf $6}')
memfree=${memfree/M}
2016-01-19 06:33:41 +00:00
memused=$((memtotal - memfree))
memory="${memused}MB / ${memtotal}MB"
;;
2016-01-18 06:45:32 +00:00
"FreeBSD")
2016-01-19 00:05:43 +00:00
memtotal=$(dmesg | awk '/real mem/ {printf $5}')
memtotal=${memtotal/\(}
memtotal=${memtotal/MB\)}
2016-01-19 00:05:43 +00:00
2016-01-18 06:45:32 +00:00
memfree=$(top -d 1 | awk '/Mem:/ {printf $10}')
memfree=${memfree/M}
2016-01-19 00:05:43 +00:00
memused=$((memtotal - memfree))
memory="${memused}MB / ${memtotal}MB"
;;
"NetBSD")
memfree=$(($(vmstat | awk 'END{printf $4}') / 1000))
memused=$(($(vmstat | awk 'END{printf $3}') / 1000))
memtotal=$((memused + memfree))
memused=$((memtotal - memfree))
memory="${memused}MB / ${memtotal}MB"
2016-01-18 06:45:32 +00:00
;;
esac
2016-01-18 06:17:32 +00:00
;;
2016-01-05 06:10:34 +00:00
"Windows")
mem="$(awk 'NR < 3 {printf $2 " "}' /proc/meminfo)"
# Split the string above into 2 vars
# This is faster than using an array.
set $mem
memtotal=$1
memfree=$2
memavail=$((memtotal - memfree))
memused=$((memtotal - memavail))
2016-01-06 01:04:43 +00:00
memory="$((${memused%% *} / 1024))MB / "
memory+="$((${memtotal%% *} / 1024))MB"
2016-01-05 06:10:34 +00:00
;;
*)
memory="Unknown"
;;
esac
}
# }}}
# Song {{{
getsong () {
2016-01-20 10:24:04 +00:00
if type -p mpc >/dev/null 2>&1; then
song="$(mpc current)"
2016-01-20 10:24:04 +00:00
elif type -p cmus >/dev/null 2>&1; then
song="$(cmus-remote -Q | grep "tag artist\|title")"
song=${song/tag artist }
song=${song/tag title/-}
song=${song//[[:space:]]/ }
2016-01-20 10:24:29 +00:00
else
song="Unknown"
2016-01-20 10:24:04 +00:00
fi
}
# }}}
# Resolution {{{
getresolution () {
case "$os" in
"Linux" | *"BSD")
2016-01-29 13:34:48 +00:00
if type -p xdpyinfo >/dev/null 2>&1; then
resolution=$(xdpyinfo 2>/dev/null | awk '/dimensions:/ {printf $2}')
else
resolution="Unknown"
fi
;;
"Mac OS X")
resolution=$(system_profiler SPDisplaysDataType |\
2016-01-22 04:12:43 +00:00
awk '/Resolution:/ {printf $2"x"$4" "}')
;;
2016-01-18 06:24:08 +00:00
2016-01-29 13:34:48 +00:00
"*")
resolution="Unknown"
;;
esac
}
# }}}
# GTK Theme/Icons/Font {{{
getgtk () {
case "$1" in
theme)
name="gtk-theme-name"
gsettings="gtk-theme"
;;
icons)
name="gtk-icon-theme-name"
gsettings="icon-theme"
;;
font)
name="gtk-font-name"
gsettings="font-name"
;;
esac
2016-01-23 23:30:33 +00:00
# Check for gtk2 theme
if [ "$gtk2" == "on" ]; then
if [ -f "$HOME/.gtkrc-2.0" ]; then
gtk2theme=$(grep "^[^#]*$name" "$HOME/.gtkrc-2.0")
elif [ -f "/etc/gtk-2.0/gtkrc" ]; then
gtk2theme=$(grep "^[^#]*$name" /etc/gtk-2.0/gtkrc)
fi
gtk2theme=${gtk2theme/${name}*=}
gtk2theme=${gtk2theme//\"}
fi
2016-01-23 23:30:33 +00:00
# Check for gtk3 theme
if [ "$gtk3" == "on" ]; then
2016-01-28 00:34:41 +00:00
if [ -f "$HOME/.config/gtk-3.0/settings.ini" ]; then
gtk3theme=$(grep "^[^#]*$name" "$HOME/.config/gtk-3.0/settings.ini")
elif type -p gsettings >/dev/null 2>&1; then
gtk3theme="$(gsettings get org.gnome.desktop.interface $gsettings)"
gtk3theme=${gtk3theme//\'}
else
gtk3theme=$(grep "^[^#]*$name" /etc/gtk-3.0/settings.ini)
fi
2016-01-23 23:38:46 +00:00
gtk3theme=${gtk3theme/${name}*=}
gtk3theme=${gtk3theme//\"}
gtk3theme=${gtk3theme/[[:space:]]/ }
fi
2016-01-23 23:30:33 +00:00
# Format the string based on which themes exist
if [ "$gtk2theme" ] && [ "$gtk2theme" == "$gtk3theme" ]; then
gtk3theme+=" [GTK2/3]"
unset gtk2theme
elif [ "$gtk2theme" ] && [ "$gtk3theme" ]; then
gtk2theme+=" [GTK2], "
gtk3theme+=" [GTK3] "
else
[ "$gtk2theme" ] && gtk2theme+=" [GTK2] "
[ "$gtk3theme" ] && gtk3theme+=" [GTK3] "
fi
# Final string
gtktheme="${gtk2theme}${gtk3theme}"
# If the final string is empty print "None"
[ -z "$gtktheme" ] && gtktheme="None"
2016-01-23 23:30:33 +00:00
# Make the output shorter by removing "[GTKX]" from the string
if [ "$gtk_shorthand" == "on" ]; then
2016-01-24 14:14:35 +00:00
gtktheme=${gtktheme/ '[GTK2]'}
2016-01-24 14:10:05 +00:00
gtktheme=${gtktheme/ '[GTK3]'}
gtktheme=${gtktheme/ '[GTK2/3]'}
fi
}
getgtktheme () {
getgtk theme
}
getgtkicons () {
getgtk icons
gtkicons="$gtktheme"
}
getgtkfont () {
getgtk font
gtkfont="$gtktheme"
}
# }}}
# Disk Usage {{{
2016-01-26 10:25:28 +00:00
getdisk () {
# df flags
case "$os" in
"Linux" | "Windows") df_flags="-h --total" ;;
"Mac OS X") df_flags="-H /" ;;
*"BSD")
case "$os" in
"FreeBSD") df_flags="-h -c" ;;
*) disk="Unknown"; return ;;
esac
;;
esac
2016-01-26 10:25:28 +00:00
# Get the disk info
disk=$(df $df_flags 2>/dev/null | awk 'END{print $2 ":" $3 ":" $5}')
2016-01-26 10:25:28 +00:00
# Format the output
disk_used=${disk#*:}
disk_used=${disk_used%%:*}
disk_total=${disk%%:*}
disk_total_per=${disk#*:*:}
2016-01-26 10:25:28 +00:00
# Put it all together
disk="${disk_used} / ${disk_total} (${disk_total_per})"
2016-01-26 10:25:28 +00:00
}
# }}}
# Terminal colors {{{
getcols () {
if [ "$color_blocks" == "on" ]; then
2016-01-04 23:11:25 +00:00
printf "${padding}%s"
while [ $start -le $end ]; do
printf "\033[48;5;${start}m%${block_width}s"
start=$((start + 1))
# Split the blocks at 8 colors
[ $end -ge 9 ] && [ $start -eq 8 ] && \
2016-01-04 23:11:25 +00:00
printf "\n%s${clear}${padding}"
done
# Clear formatting
printf "%b%s" "$clear"
fi
}
2015-12-30 10:18:17 +00:00
# }}}
2015-12-30 10:18:17 +00:00
# Windows Specific Functions {{{
getvisualstyle () {
case "$os" in
"Windows"*)
path="/proc/registry/HKEY_CURRENT_USER/Software/Microsoft"
path+="/Windows/CurrentVersion/Themes/CurrentTheme"
visualstyle="$(head -n1 $path)"
2016-01-07 03:56:50 +00:00
visualstyle="${visualstyle##*\\}"
2016-01-07 03:53:11 +00:00
visualstyle="${visualstyle%.*}"
visualstyle="${visualstyle^}"
;;
*)
visualstyle="This feature only works on Windows"
;;
esac
}
# }}}
# }}}
2015-12-30 10:18:17 +00:00
# Images {{{
2015-12-30 10:18:17 +00:00
# Wallpaper {{{
2016-01-05 07:19:38 +00:00
getwallpaper () {
case "$os" in
"Linux" | *"BSD")
if type -p feh >/dev/null 2>&1 && [ -f "$HOME/.fehbg" ]; then
2016-01-20 10:35:32 +00:00
img="$(awk -F\' '/feh/ {printf $2}' "$HOME/.fehbg")"
2016-01-20 10:35:32 +00:00
elif type -p nitrogen >/dev/null 2>&1; then
img="$(awk -F'=' '/file/ {printf $2}' "$HOME/.config/nitrogen/bg-saved.cfg")"
2016-01-24 00:03:29 +00:00
elif type -p gsettings >/dev/null 2>&1; then
img="$(gsettings get org.gnome.desktop.background picture-uri 2>/dev/null)"
img=${img/'file://'}
img=${img//\'}
2016-01-20 10:35:32 +00:00
fi
2016-01-05 07:19:38 +00:00
;;
2016-01-17 21:37:37 +00:00
"Mac OS X")
2016-01-17 22:10:59 +00:00
img="$(osascript -e 'tell app "finder" to get posix path of (get desktop picture as text)')"
2016-01-17 21:37:37 +00:00
;;
2016-01-05 07:50:06 +00:00
"Windows")
case "$distro" in
"Windows XP")
img="/cygdrive/c/Documents and Settings/${USER}"
img+="/Local Settings/Application Data/Microsoft"
img+="/Wallpaper1.bmp"
2016-01-05 07:50:06 +00:00
;;
2016-01-05 07:19:38 +00:00
2016-01-05 07:50:06 +00:00
"Windows"*)
img="$APPDATA/Microsoft/Windows/Themes"
img+="/TranscodedWallpaper.jpg"
2016-01-05 07:50:06 +00:00
;;
esac
2016-01-05 07:19:38 +00:00
;;
esac
}
# }}}
# Shuffle {{{
getshuffle () {
2016-01-27 04:01:48 +00:00
img=$(find "$shuffle_dir" -type f \( -name '*.jpg' -o -name '*.png' \) -print0 |
2016-01-09 22:13:59 +00:00
shuf -n1 -z)
}
2016-01-27 11:33:22 +00:00
# }}}
# Ascii {{{
getascii () {
# Change color of logo based on distro
shopt -s nocasematch
case "$ascii_distro" in
"Arch Linux"* | "Antergos"*)
c1=$(color 6)
c2=$(color 4)
;;
"CentOS"*)
c1=$(color 3)
c2=$(color 2)
c3=$(color 4)
c4=$(color 5)
c5=$(color 7)
;;
"CRUX")
c1=$(color 4)
c2=$(color 5)
c3=$(color 7)
;;
"Debian"* | "FreeBSD"* | "Red Hat"* | "elementary"* | "CrunchBang"* | "Ubuntu"*)
c1=$(color 7)
c2=$(color 1)
c3=$(color 3)
;;
"Fedora"*)
c1=$(color 7)
c2=$(color 4)
;;
"Gentoo"* | "Funtoo"*)
c1=$(color 7)
c2=$(color 5)
;;
"Kali"*)
c1=$(color 4)
c2=$(color 8)
;;
"Mac OS X"* | "Manjaro"* | "Deepin"*)
c1=$(color 2)
c2=$(color 3)
c3=$(color 1)
c4=$(color 1)
c5=$(color 5)
c6=$(color 4)
;;
*"Mint"*)
c1=$(color 7)
c2=$(color 2)
ascii_distro="mint"
;;
"NetBSD"* | "Parabola"*)
c1=$(color 5)
c2=$(color 7)
;;
"OpenBSD"*)
c1=$(color 3)
c2=$(color 3)
c3=$(color 6)
c4=$(color 1)
c5=$(color 8)
;;
"OpenSuse"*)
c1=$(color 2)
c2=$(color 7)
;;
"Slackware"*)
c1=$(color 4)
c2=$(color 7)
;;
"void"*)
c1=$(color 2)
c2=$(color 2)
c3=$(color 8)
;;
2016-01-29 07:16:14 +00:00
"Windows 10"*)
c1=$(color 6)
ascii_distro="windows10"
;;
"Windows"*)
c1=$(color 1)
c2=$(color 2)
c3=$(color 4)
c4=$(color 3)
;;
esac
if [ "$ascii" == "distro" ]; then
# Lowercase the distro name
ascii=${ascii_distro,,}
# Check /usr/share/fetch for ascii before
# looking in the script's directory.
if [ -f "/usr/share/fetch/ascii/distro/${ascii/ *}" ]; then
ascii="/usr/share/fetch/ascii/distro/${ascii/ *}"
else
2016-01-29 15:14:29 +00:00
getscriptdir
# If the ascii file doesn't exist
# fallback to text mode.
2016-01-29 15:14:29 +00:00
if [ ! -f "$script_dir/ascii/distro/${ascii/ *}" ]; then
padding="\033[0C"
2016-01-29 00:06:26 +00:00
image="off"
return
fi
2016-01-29 06:56:39 +00:00
2016-01-29 15:14:29 +00:00
ascii="$script_dir/ascii/distro/${ascii/ *}"
fi
# Overwrite distro colors if '$ascii_color` doesn't
# equal 'distro'.
if [ "$ascii_color" != "distro" ]; then
c1=$(color $ascii_color)
c2=$(color $ascii_color)
c3=$(color $ascii_color)
c4=$(color $ascii_color)
c5=$(color $ascii_color)
c6=$(color $ascii_color)
fi
# We only use eval in the distro ascii files.
print="$(eval printf "$(<"$ascii")")"
else
case "$ascii_color" in
"distro") ascii_color="$c1" ;;
*) ascii_color="$(color $ascii_color)" ;;
esac
# If the ascii file doesn't exist
# fallback to text mode.
if [ ! -f "$ascii" ]; then
padding="\033[0C"
image="off"
return
fi
print="${ascii_color}$(<"$ascii")"
fi
# Turn the file into a variable.
2016-01-30 05:31:22 +00:00
ascii_strip=$(<"$ascii")
# Strip escape codes backslashes from contents of
ascii_strip=${ascii_strip//\$\{??\}}
ascii_strip=${ascii_strip//\\}
2016-01-27 11:33:22 +00:00
# Get length of longest line
length="$(LC_ALL="en_US.UTF8" wc -L 2>/dev/null <<< "$ascii_strip")"
# Get the height in lines
lines="$(($(LC_ALL="en_US.UTF8" wc -l 2>/dev/null <<< "$ascii_strip") + 1))"
# Fallback to using awk on systems without 'wc -L'
[ -z "$length" ] && \
length="$(LC_ALL="en_US.UTF8" awk 'length>max{max=length}END{print max}' <<< "$ascii_strip")"
2016-01-27 11:33:22 +00:00
# Set the text padding
padding="\033[$((length + gap))C"
2016-01-27 11:33:22 +00:00
# Print the ascii
printf "%b%s" "$print"
2016-01-27 11:33:22 +00:00
}
# }}}
# Image {{{
getimage () {
# Fallback to ascii mode if imagemagick isn't installed.
if ! type -p convert >/dev/null 2>&1; then
image="ascii"
fi
# Make the directory if it doesn't exist
mkdir -p "$imgtempdir"
# Image size is half of the terminal
imgsize=$((columns * font_width / split_size))
# Where to draw the image
case "$image_position" in
"left")
# Padding is half the terminal width + gap
padding="\033[$((columns / split_size + gap))C"
;;
"right")
padding="\033[0C"
xoffset=$((columns * font_width / split_size - gap))
;;
esac
# If wall=on, Get image to display from current wallpaper.
case "$image" in
"wall")
getwallpaper
;;
"shuffle")
getshuffle
;;
2016-01-27 11:33:22 +00:00
"ascii")
getascii
return
;;
*)
img="$image"
;;
esac
2016-01-20 10:46:20 +00:00
# If $img is empty, reset padding to 0 and exit the function
if [ ! -f "$img" ]; then
# Fallback to ascii mode
image="ascii"
getascii
2016-01-20 10:48:38 +00:00
return
fi
2016-01-20 10:46:20 +00:00
# Lines equals terminal height
lines=$(tput lines)
# Check to see if the image has a file extension
case "${img##*/}" in
*"."*)
# Get name of image and prefix it with it's crop mode and offset
imgname="$crop_mode-$crop_offset-$imgsize-${img##*/}"
;;
*)
# Add a file extension if the image doesn't have one. This
# fixes w3m not being able to display them.
imgname="$crop_mode-$crop_offset-$imgsize-${img##*/}.jpg"
;;
esac
# Check to see if the thumbnail exists before we do any cropping.
if [ ! -f "$imgtempdir/$imgname" ]; then
# Get image size so that we can do a better crop
2016-01-05 08:24:57 +00:00
size=$(identify -format "%w %h" "$img")
width=${size%% *}
height=${size##* }
# This checks to see if height is geater than width
# so we can do a better crop of portrait images.
if [ "$height" -gt "$width" ]; then
size=$width
else
size=$height
fi
case "$crop_mode" in
fit)
c=$(convert "$img" \
-colorspace srgb \
-format "%[pixel:p{0,0}]" info:)
convert \
"$img" \
-trim +repage \
-gravity south \
-background "$c" \
-extent "$size"x"$size" \
-scale "$imgsize"x"$imgsize" \
"$imgtempdir/$imgname"
;;
fill)
convert \
"$img" \
-trim +repage \
-scale "$imgsize"x"$imgsize"^ \
-extent "$imgsize"x"$imgsize" \
"$imgtempdir/$imgname"
;;
*)
convert \
"$img" \
-gravity $crop_offset \
-crop "$size"x"$size"+0+0 \
-quality 95 \
-scale "$imgsize"x"$imgsize" \
"$imgtempdir/$imgname"
;;
esac
fi
# The final image
img="$imgtempdir/$imgname"
2015-12-30 10:18:17 +00:00
}
2016-01-22 23:28:16 +00:00
scrot_path="$scrot_dir/$scrot_name"
takescrot () {
2016-01-22 23:28:16 +00:00
$scrot_cmd "$scrot_path"
}
2015-12-30 10:18:17 +00:00
# }}}
2016-01-30 06:44:52 +00:00
# Find w3m-img {{{
# Find w3mimgdisplay automatically
getw3m_img_path () {
if [ -x "$w3m_img_path" ]; then
return
elif [ -x "/usr/lib/w3m/w3mimgdisplay" ]; then
w3m_img_path="/usr/lib/w3m/w3mimgdisplay"
elif [ -x "/usr/libexec/w3m/w3mimgdisplay" ]; then
w3m_img_path="/usr/libexec/w3m/w3mimgdisplay"
elif [ -x "/usr/lib64/w3m/w3mimgdisplay" ]; then
w3m_img_path="/usr/lib64/w3m/w3mimgdisplay"
elif [ -x "/usr/libexec64/w3m/w3mimgdisplay" ]; then
w3m_img_path="/usr/libexec64/w3m/w3mimgdisplay"
else
image="ascii"
fi
}
# }}}
2015-12-30 10:18:17 +00:00
# }}}
# Text Formatting {{{
2015-12-30 10:18:17 +00:00
# Info {{{
info () {
# Call the function and update variable
if [ -z "$2" ]; then
"get$1" 2>/dev/null
eval output="\$${1}"
else
"get$2" 2>/dev/null
eval output="\$${2}"
fi
case "$1" in
title)
string="${bold}${title_color}${output}"
string="${string/@/${at_color}@${title_color}}"
length=${#output}
;;
underline)
string="${underline_color}${output}"
;;
linebreak | cols)
string=""
;;
*)
string="${bold}${subtitle_color}${1}${clear}"
string+="${colon_color}: ${info_color}${output}"
length=$((${#subtitle} + ${#output} + 2))
;;
esac
printf "%b%s\n" "${padding}${string}${clear}"
}
# }}}
# Prin {{{
prin () {
case "$1" in
*:*)
subtitle=${1%%:*}
output=${1#*: }
string="${bold}${subtitle_color}${subtitle}${clear}"
string+="${colon_color}: ${info_color}${output}"
length=$((${#subtitle} + ${#output} + 1))
;;
*)
string="${info_color}${1}"
length=${#1}
;;
esac
printf "%b%s\n" "${padding}${string}${clear}"
}
# }}}
# Underline {{{
getunderline () {
2016-01-04 23:11:25 +00:00
underline=$(printf %"$length"s)
underline=${underline// /$underline_char}
}
# }}}
# Colors {{{
colors () {
title_color="\033[38;5;${title_color}m"
at_color="\033[38;5;${at_color}m"
subtitle_color="\033[38;5;${subtitle_color}m"
colon_color="\033[38;5;${colon_color}m"
underline_color="\033[38;5;${underline_color}m"
info_color="\033[38;5;${info_color}m"
2015-12-30 10:18:17 +00:00
}
2016-01-20 22:49:50 +00:00
color () {
printf "%b%s" "\033[38;5;${1}m"
2016-01-20 22:49:50 +00:00
}
# }}}
# Bold {{{
bold () {
if [ "$bold" == "on" ]; then
bold="\033[1m"
else
bold=""
fi
}
# }}}
# Linebreak {{{
getlinebreak () {
linebreak=""
}
# }}}
clear="\033[0m"
2015-12-31 00:21:10 +00:00
2015-12-30 10:18:17 +00:00
# }}}
2016-01-29 15:14:29 +00:00
# Other {{{
# Get script directory {{{
getscriptdir () {
# Use $0 to get the script's physical path.
2016-01-30 05:31:22 +00:00
cd "${0%/*}" || exit
2016-01-29 15:14:29 +00:00
script_dir=${0##*/}
# Iterate down a (possible) chain of symlinks.
while [ -L "$script_dir" ]; do
2016-01-30 05:31:22 +00:00
script_dir="$(readlink "$script_dir")"
cd "${script_dir%/*}" || exit
2016-01-29 15:14:29 +00:00
script_dir="${script_dir##*/}"
done
# Final directory
script_dir="$(pwd -P)"
}
# }}}
# Source Config {{{
# Check for $config_file first
getconfig () {
# Check $config_file
2016-01-29 15:14:29 +00:00
if [ -f "$config_file" ]; then
source "$config_file"
return
fi
# Check $HOME/.config/fetch and create the
# dir/files if they don't exist.
if [ -f "$HOME/.config/fetch/config" ]; then
source "$HOME/.config/fetch/config"
2016-01-29 15:18:27 +00:00
2016-01-29 15:14:29 +00:00
elif [ -f "/usr/share/fetch/config" ]; then
mkdir -p "$HOME/.config/fetch/"
cp "/usr/share/fetch/config" "$HOME/.config/fetch"
source "$HOME/.config/fetch/config"
2016-01-29 15:18:27 +00:00
2016-01-29 15:14:29 +00:00
else
getscriptdir
mkdir -p "$HOME/.config/fetch/"
cp "$script_dir/config" "$HOME/.config/fetch"
source "$HOME/.config/fetch/config"
fi
}
# Check the commandline flags early for '--config none/off'
case "$@" in
*"--config off"* | *'--config "off"'* | *"--config 'off'"* | \
*"--config none"* | *'--config "none"'* | *"--config 'none'"*)
config="off"
;;
esac
# If config files are enabled
[ "$config" == "on" ] && getconfig
2016-01-29 15:14:29 +00:00
# }}}
# }}}
# Usage {{{
usage () { cat << EOF
2016-01-27 23:18:18 +00:00
usage: ${0##*/} --option "value"
Info:
2016-01-28 01:44:06 +00:00
--osx_buildversion Hide/Show Mac OS X build version.
--speed_type Change the type of cpu speed to display.
2016-01-24 22:07:53 +00:00
Possible values: current, min, max, bios,
2016-01-24 21:58:56 +00:00
scaling_current, scaling_min, scaling_max
NOTE: This only support Linux with cpufreq.
--kernel_shorthand Shorten the output of kernel
--uptime_shorthand Shorten the output of uptime (tiny, on, off)
--gpu_shorthand on/off Shorten the output of GPU
--gtk_shorthand on/off Shorten output of gtk theme/icons
--gtk2 on/off Enable/Disable gtk2 theme/icons output
--gtk3 on/off Enable/Disable gtk3 theme/icons output
--shell_path on/off Enable/Disable showing \$SHELL path
--shell_version on/off Enable/Disable showing \$SHELL version
Text Colors:
--colors 1 2 3 4 5 6 Change the color of text
(title, @, subtitle, colon, underline, info)
--title_color num Change the color of the title
--at_color num Change the color of "@" in title
--subtitle_color num Change the color of the subtitle
--colon_color num Change the color of the colons
--underline_color num Change the color of the underlines
--info_color num Change the color of the info
Text Formatting:
--underline on/off Enable/Disable title underline
--underline_char char Character to use when underlineing title
--line_wrap on/off Enable/Disable line wrapping
--bold on/off Enable/Disable bold text
--prompt_height num Set this to your prompt height to fix
issues with the text going off screen at the top
Color Blocks:
--color_blocks on/off Enable/Disable the color blocks
--block_width num Width of color blocks
--block_range start end --v
Range of colors to print as blocks
Image:
--image Image source. Where and what image we display.
2016-01-27 11:33:22 +00:00
Possible values: wall, shuffle, ascii,
/path/to/img, off
2016-01-25 22:35:12 +00:00
--image_backend Which program to use to draw images.
2016-01-27 04:01:48 +00:00
--shuffle_dir Which directory to shuffle for an image.
--font_width px Used to automatically size the image
--image_position Where to display the image: (Left/Right)
--split_size num Width of img/text splits
A value of 2 makes each split half the terminal
width and etc
--crop_mode Which crop mode to use
Takes the values: normal, fit, fill
--crop_offset value Change the crop offset for normal mode.
Possible values: northwest, north, northeast,
west, center, east, southwest, south, southeast
--xoffset px How close the image will be
to the left edge of the window
2016-01-25 22:35:12 +00:00
NOTE: This only works with w3m
--yoffset px How close the image will be
to the top edge of the window
2016-01-25 22:35:12 +00:00
NOTE: This only works with w3m
--gap num Gap between image and text right side
to the top edge of the window
NOTE: --gap can take a negative value which will
move the text closer to the left side.
--clean Remove all cropped images
2016-01-27 11:33:22 +00:00
Ascii:
--ascii Where to get the ascii from, Possible values:
2016-01-28 10:42:35 +00:00
distro, /path/to/ascii
2016-01-27 11:33:22 +00:00
--ascii_color Color to print the ascii art
2016-01-28 10:43:30 +00:00
--ascii_distro distro Which Distro\'s ascii art to print
2016-01-27 11:33:22 +00:00
Screenshot:
2016-01-22 23:28:16 +00:00
--scrot /path/to/img Take a screenshot, if path is left empty
the screenshot function will use
\$scrot_dir and \$scrot_name.
--scrot_cmd Screenshot program to launch
Other:
--config Specify a path to a custom config file
--config none Launch the script without a config file
--help Print this text and exit
EOF
exit 1
}
# }}}
# Args {{{
2016-01-06 00:18:02 +00:00
while [ "$1" ]; do
2015-12-30 10:18:17 +00:00
case $1 in
# Info
2016-01-28 01:44:06 +00:00
--osx_buildversion) osx_buildversion="$2" ;;
--speed_type) speed_type="$2" ;;
--kernel_shorthand) kernel_shorthand="$2" ;;
--uptime_shorthand) uptime_shorthand="$2" ;;
--gpu_shorthand) gpu_shorthand="$2" ;;
--gtk_shorthand) gtk_shorthand="$2" ;;
--gtk2) gtk2="$2" ;;
--gtk3) gtk3="$2" ;;
--shell_path) shell_path="$2" ;;
--shell_version) shell_version="$2" ;;
2015-12-30 10:18:17 +00:00
# Text Colors
2016-01-04 11:38:36 +00:00
--colors) title_color=$2
2016-01-06 00:18:02 +00:00
[ "$3" ] && subtitle_color=$3
[ "$4" ] && at_color=$4
[ "$5" ] && colon_color=$5
[ "$6" ] && underline_color=$6
[ "$7" ] && info_color=$7 ;;
--title_color) title_color=$2 ;;
--at_color) at_color=$2 ;;
--subtitle_color) subtitle_color=$2 ;;
--colon_color) colon_color=$2 ;;
--underline_color) underline_color=$2 ;;
--info_color) info_color=$2 ;;
2015-12-31 00:21:10 +00:00
# Text Formatting
--underline) underline="$2" ;;
--underline_char) underline_char="$2" ;;
--line_wrap) line_wrap="$2" ;;
--bold) bold="$2" ;;
--prompt_height) prompt_height="$2" ;;
2015-12-30 10:18:17 +00:00
# Color Blocks
--color_blocks) color_blocks="$2" ;;
--block_range) start=$2; end=$3 ;;
2016-01-03 08:55:09 +00:00
--block_width) block_width="$2" ;;
2015-12-30 10:18:17 +00:00
# Image
--image) image="$2"
[ -z "$2" ] && image="ascii"
case "$2" in
"--"*) image="ascii" ;;
esac
;;
--image_backend) image_backend="$2" ;;
2016-01-27 04:01:48 +00:00
--shuffle_dir) shuffle_dir="$2" ;;
--font_width) font_width="$2" ;;
--image_position) image_position="$2" ;;
--split_size) split_size="$2" ;;
--crop_mode) crop_mode="$2" ;;
--crop_offset) crop_offset="$2" ;;
2015-12-30 10:18:17 +00:00
--xoffset) xoffset="$2" ;;
--yoffset) yoffset="$2" ;;
2015-12-31 00:21:10 +00:00
--gap) gap="$2" ;;
2015-12-30 10:18:17 +00:00
--clean) rm -rf "$imgtempdir" || exit ;;
2016-01-27 11:33:22 +00:00
# Ascii
--ascii) image="ascii"; ascii="$2"
[ -z "$2" ] && ascii="distro"
case "$2" in
"--"*) ascii="distro" ;;
esac
;;
2016-01-27 11:33:22 +00:00
--ascii_color) ascii_color="$2" ;;
--ascii_distro) ascii_distro="$2" ;;
2016-01-27 11:33:22 +00:00
# Screenshot
2016-01-22 23:28:16 +00:00
--scrot | -s) scrot="on"; \
[ "$2" ] && scrot_path="$2" ;;
--scrot_cmd) scrot_cmd="$2" ;;
2015-12-30 10:18:17 +00:00
# Other
--config)
case "$2" in
"none" | "off") config="off" ;;
*) config_file="$2"; config="on"; getconfig ;;
esac
;;
2015-12-30 10:18:17 +00:00
--help) usage ;;
esac
2016-01-06 00:18:02 +00:00
shift
2015-12-30 10:18:17 +00:00
done
# }}}
# Call Functions and Finish Up {{{
2015-12-30 10:18:17 +00:00
# Restore cursor and clear screen on ctrl+c
trap 'printf "\033[?25h"; clear; exit' 2
# Get columns
columns=$(tput cols)
2016-01-05 01:27:27 +00:00
2016-01-30 06:44:52 +00:00
# Hide the cursor
printf "\033[?25l"
2016-01-30 06:44:52 +00:00
if [ "$image" != "off" ]; then
clear
# Find w3mimgdisplay
[ "$image_backend" == "w3m" ] && getw3m_img_path
# Get the image
getimage
fi
2015-12-30 10:18:17 +00:00
# Disable line wrap
[ "$line_wrap" == "off" ] && printf "\033[?7l"
# Display the image if enabled
if [ "$image" != "off" ] && [ "$image" != "ascii" ]; then
case "$image_backend" in
"w3m")
2016-01-20 22:49:50 +00:00
printf "%b%s\n" "0;1;$xoffset;$yoffset;$imgsize;$imgsize;;;;;$img\n4;\n3;" |\
$w3m_img_path 2>/dev/null || padding="\033[0C"
;;
"iterm2")
2016-01-19 05:56:43 +00:00
printf "%b%s\a\n" "\033]1337;File=width=${imgsize}px;height=${imgsize}px;inline=1:$(base64 < "$img")"
;;
esac
fi
2015-12-31 00:21:10 +00:00
# Get colors / bold
colors
bold
# Move the cursor to the top and display the info
[ "$image" != "off" ] && printf "\033[0H"
printinfo
2016-01-30 06:44:52 +00:00
# Set cursor position dynamically based on height of ascii/text.
if [ "$image" != "off" ]; then
2016-01-30 05:31:22 +00:00
info_height="$(IFS=';' read -srdR -p $'\E[6n' ROW COL; printf "%s" "${ROW#*[}")"
[ "$lines" -lt "$info_height" ] && lines="$info_height"
printf "%b%s" "\033[${lines}H\033[${prompt_height}A"
fi
2015-12-31 00:21:10 +00:00
# Enable line wrap again
[ "$line_wrap" == "off" ] && printf "\033[?7h"
2015-12-30 10:18:17 +00:00
# Show the cursor
printf "%b%s" "\033[?25h"
# If enabled take a screenshot
2016-01-29 14:07:01 +00:00
if [ "$scrot" == "on" ]; then
takescrot
fi
2016-01-30 05:32:18 +00:00
# }}}
2015-12-30 10:18:17 +00:00