neofetch/neofetch

3362 lines
92 KiB
Text
Raw Normal View History

2016-01-04 03:09:23 +01:00
#!/usr/bin/env bash
2016-04-12 02:21:11 +02:00
# set -x
# vim: fdm=marker:noai:ts=4:sw=4
2016-01-29 16:14:29 +01:00
#
2016-02-28 01:44:45 +01:00
# Neofetch info about your system
# https://github.com/dylanaraps/neofetch
2015-12-30 11:18:17 +01:00
#
# Created by Dylan Araps
2016-01-05 05:02:24 +01:00
# https://github.com/dylanaraps/
2015-12-30 11:18:17 +01:00
version="${BASH_VERSION/.*}"
2016-03-31 01:35:56 +02:00
SYS_LOCALE="${LANG:-C}"
XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME}/.config}"
2016-02-23 23:30:11 +01:00
# Speed up script by not using unicode
export LC_ALL=C
export LANG=C
2016-01-06 08:34:34 +01:00
# Config Options {{{
# Info Options {{{
2016-01-06 08:34:34 +01:00
# Info
2016-01-20 23:49:50 +01:00
# See this wiki page for more info:
2016-02-28 01:44:45 +01:00
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
printinfo () {
2016-06-13 09:28:01 +02:00
info title
info underline
info "OS" distro
info "Kernel" kernel
info "Uptime" uptime
info "Packages" packages
info "Shell" shell
info "Resolution" resolution
info "DE" de
info "WM" wm
info "WM Theme" wmtheme
info "Theme" theme
info "Icons" icons
info "Terminal" term
info "Terminal Font" termfont
info "CPU" cpu
info "GPU" gpu
info "Memory" memory
2016-06-13 12:46:13 +02:00
# info "CPU Usage" cpu_usage
2016-06-13 09:28:01 +02:00
# info "Disk" disk
# info "Battery" battery
# info "Font" font
# info "Song" song
# info "Local IP" localip
# info "Public IP" publicip
# info "Users" users
# info "Birthday" birthday
info linebreak
info cols
info linebreak
info linebreak
}
2016-01-05 05:02:24 +01:00
# Kernel
# Show more kernel info
# --kernel_shorthand on/off
kernel_shorthand="on"
2016-01-28 02:44:06 +01:00
# Distro
2016-01-28 02:44:06 +01:00
# Mac OS X hide/show build version
# --osx_buildversion on/off
osx_buildversion="on"
2016-01-05 05:02:24 +01:00
# Mac OS X hide/show codename
# --osx_codename on/off
osx_codename="on"
# Show 'x86_64' and 'x86' in 'Distro:' output.
# --os_arch on/off
2016-04-04 14:22:41 +02:00
os_arch="on"
2016-01-05 05:02:24 +01: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 12:30:17 +01:00
# Only works on Linux with cpufreq.
2016-01-24 22:58:56 +01:00
# --speed_type current, min, max, bios,
# scaling_current, scaling_min, scaling_max
speed_type="max"
2016-06-13 12:22:38 +02:00
# CPU Shorthand
# Set shorthand setting
# --cpu_shorthand name, speed, tiny, on, off
2016-03-12 21:58:46 +01:00
cpu_shorthand="off"
2016-06-13 12:22:38 +02:00
2016-03-15 08:55:35 +01:00
# CPU Cores
# Display CPU cores in output
# --cpu_cores on/off
cpu_cores="on"
# GPU
# Shorten output of the getgpu funcion
# --gpu_shorthand on/off/tiny
2016-02-10 23:20:03 +01:00
gpu_shorthand="on"
2016-03-18 06:28:26 +01:00
# Resolution
# Display refresh rate next to each monitor
# Unsupported on Windows
2016-03-18 06:28:26 +01:00
# --refresh_rate on/off
refresh_rate="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"
# Battery
# Which battery to display.
# By default we display all batteries.
# NOTE: Only works on Linux.
# --battery_num all, 0, 1, 2, etc
battery_num="all"
# Whether or not to print each battery on the same line.
# By default each battery gets its own line and title.
# NOTE: Only works on Linux.
# --battery_shorthand on/off
battery_shorthand="off"
# IP Address
# Website to ping for the public IP
# --ip_host url
public_ip_host="http://ident.me"
# Song
# Print the Artist and Title on seperate lines
# --song_shorthand on/off
song_shorthand="off"
2016-01-30 12:41:58 +01:00
# Birthday
# Whether to show a long pretty output
# or a shortened one
2016-01-31 01:02:32 +01:00
# NOTE: Long pretty output doesn't work on OpenBSD or NetBSD.
2016-01-30 12:41:58 +01:00
# --birthday_shorthand on/off
birthday_shorthand="off"
# Whether to show the time in the output
# --birthday_time on/off
birthday_time="on"
# Date format to use when printing birthday
# --birthday_format "format"
birthday_format="%a %d %b %Y %l:%M %p"
2015-12-30 11:18:17 +01:00
# }}}
# Text Colors {{{
2015-12-30 11:18:17 +01:00
2016-02-23 06:52:25 +01:00
# Text Colors
# Each number represents a different part of
# the text in this order:
# title, @, underline, subtitle, colon, info
# colors=(4 6 1 8 8 6)
# You can also specify:
# fg (foreground color)
2016-02-23 06:52:25 +01:00
colors=(distro)
2015-12-30 11:18:17 +01:00
# }}}
# Text Options {{{
# Toggle line wrapping
# --line_wrap on/off
2016-03-30 02:40:38 +02:00
line_wrap="off"
# Toggle bold text
# --bold on/off
bold="on"
# Enable/Disable Underline
# --underline on/off
2016-04-02 03:52:21 +02:00
underline_enabled="on"
# Underline character
# --underline_char char
underline_char="-"
2015-12-30 11:18:17 +01:00
# }}}
# Color Blocks {{{
# Color block range
# --block_range start end
start=0
end=7
# Toggle color blocks
# --color_blocks on/off
color_blocks="on"
# Color block width in spaces
# --block_width num
2016-05-28 11:51:21 +02:00
block_width=2
# Color block height in lines
# --block_height num
block_height=1
2016-03-03 00:12:21 +01:00
# }}}
# Progress Bars {{{
# Progress bar character
2016-04-24 10:30:57 +02:00
# --progress_char elapsed_char total_char
progress_char_elapsed="="
progress_char_total="-"
# Progress vorder
# --progress_border on/off
progress_border="on"
2016-03-03 00:12:21 +01:00
# Progress bar length in spaces
# Number of chars long to make the progress bars.
# --progress_length num
progress_length="15"
2016-03-03 00:12:21 +01:00
# Progress bar colors
# When set to distro, uses your distro's logo colors
# Takes: num, "distro"
2016-03-03 00:12:21 +01:00
# --progress_colors col col
progress_color_elapsed="distro"
progress_color_total="distro"
2016-03-03 00:12:21 +01:00
2016-03-12 22:37:33 +01:00
# Customize how the info is displayed.
# bar: Only the progress bar is displayed.
# infobar: The bar is displayed after the info.
# barinfo: The bar is displayed before the info.
# off: Only the info is displayed.
#
2016-06-13 14:22:59 +02:00
# --cpu_display bar/infobar/barinfo/off
2016-03-12 22:37:33 +01:00
# --memory_display bar/infobar/barinfo/off
# --battery_display bar/infobar/barinfo/off
# --disk_display bar/infobar/barinfo/off
2016-06-13 14:22:59 +02:00
cpu_display="off"
2016-03-12 21:58:46 +01:00
memory_display="off"
battery_display="off"
disk_display="off"
2015-12-30 11:18:17 +01:00
# }}}
# Image Options {{{
# Image Source
# --image wall, ascii, /path/to/img, /path/to/dir/, off
image="wall"
2016-01-28 10:11:18 +01:00
# Thumbnail directory
2016-02-28 01:44:45 +01:00
thumbnail_dir="$HOME/.cache/thumbnails/neofetch"
# W3m-img path
# This is automatically detected, this variable
# should only be set to w3m-img's location if the
# builtin detection doesn't work.
w3m_img_path="/usr/lib/w3m/w3mimgdisplay"
# Crop mode
# --crop_mode normal/fit/fill
crop_mode="normal"
2015-12-31 23:33:08 +01:00
# Crop offset
# Only affects normal mode.
# --crop_offset northwest/north/northeast/west/center
# east/southwest/south/southeast
crop_offset="center"
2015-12-31 01:21:10 +01:00
# Image size
# The image is half the terminal width by default.
2016-05-27 07:23:02 +02:00
# --size auto, 00px, 00%, none
image_size="auto"
# Right gap between image and text
# --gap num
2016-03-10 04:36:49 +01:00
gap=2
2015-12-31 01:21:10 +01:00
# Image offsets
# --xoffset px
# --yoffset px
2015-12-30 11:18:17 +01:00
yoffset=0
xoffset=0
2016-01-27 12:33:22 +01: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 12:33:22 +01:00
# Ascii colors
# When this is set to distro it will use your
# ditro's colors to color the ascii.
# NOTE: You can also set this to a range of colors
# which will allow you to custom color distro logos
# --ascii_colors distro
# --ascii_colors 2 4 5 6
ascii_colors=(distro)
2016-01-27 12:33:22 +01:00
# Logo size
# Arch, Crux and Gentoo have a smaller logo
# variant. Changing the value below to 'small'
# will make neofetch use the small logo.
# --ascii_logo_size small, normal
ascii_logo_size="normal"
# Bold ascii logo
# Whether or not to bold the ascii logo.
# --ascii_bold on/off
ascii_bold="off"
2016-01-27 12:33:22 +01:00
# }}}
2015-12-30 11:18:17 +01:00
2016-01-29 16:14:29 +01: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
2016-03-18 23:37:29 +01:00
scrot_dir="$HOME/Pictures/"
# Scrot filename
# What to name the screenshots
# --scrot_name str
2016-03-18 23:37:29 +01:00
scrot_name="neofetch-$(date +%F-%T).png"
# }}}
# Stdout options {{{
# Separator for stdout mode
# --stdout_separator string
stdout_separator=" "
2016-01-29 16:14:29 +01:00
# }}}
# Config Options {{{
# Enable/Disable config file
2016-01-31 22:00:20 +01:00
# --config off, none
config="on"
2016-01-30 01:09:36 +01:00
# Path to custom config file location
2016-01-29 16:14:29 +01:00
# --config path/to/config
config_file="${XDG_CONFIG_HOME:-${HOME}/.config}/neofetch/config"
2016-01-29 16:14:29 +01:00
# }}}
2015-12-30 11:18:17 +01:00
# }}}
# Gather Info {{{
2015-12-30 11:18:17 +01:00
2016-06-13 08:14:03 +02:00
# Set no case match.
shopt -s nocasematch
# Operating System {{{
case "$(uname)" in
2016-02-20 22:21:55 +01:00
"Linux") os="Linux" ;;
"Darwin") os="$(sw_vers -productName)" ;;
*"BSD" | "DragonFly") os="BSD" ;;
2016-02-20 22:21:55 +01:00
"CYGWIN"*) os="Windows" ;;
*) printf "%s\n" "Unknown OS detected: $(uname)"; exit 1 ;;
esac
2015-12-30 11:18:17 +01:00
# }}}
# Distro {{{
getdistro () {
2016-06-12 08:18:49 +02:00
[ "$distro" ] && return
2016-02-15 02:39:02 +01:00
case "$os" in
"Linux" )
if type -p lsb_release >/dev/null 2>&1; then
distro="$(lsb_release -d 2>/dev/null | awk -F ':' '/Description/ {printf $2}')"
2016-02-16 11:54:21 +01:00
elif type -p crux >/dev/null 2>&1; then
distro="$(crux)"
2016-02-13 11:14:50 +01:00
else
distro="$(awk -F 'NAME=' '/^NAME=/ {printf $2}' /etc/*ease)"
2016-06-12 07:51:48 +02:00
distro="${distro//\"}"
# Workaround for distros that store the value differently.
[ -z "$distro" ] && distro="$(awk -F 'TAILS_PRODUCT_NAME="|"' '/^TAILS_PRODUCT_NAME=/ {printf $2}' /etc/*ease)"
[ -z "$distro" ] && distro="$(awk '/BLAG/ {print $1; exit}' /etc/*ease)"
fi
;;
"Mac OS X")
2016-06-12 07:51:48 +02:00
osx_version="$(sw_vers -productVersion)"
osx_build="$(sw_vers -buildVersion)"
case "${osx_version%.*}" in
"10.4") codename="Mac OS X Tiger" ;;
"10.5") codename="Mac OS X Leopard" ;;
"10.6") codename="Mac OS X Snow Leopard" ;;
"10.7") codename="Mac OS X Lion" ;;
"10.8") codename="OS X Mountain Lion" ;;
"10.9") codename="OS X Mavericks" ;;
"10.10") codename="OS X Yosemite" ;;
"10.11") codename="OS X El Capitan" ;;
*) codename="Mac OS X" ;;
esac
distro="$codename $osx_version $osx_build"
;;
"iPhone OS")
2016-05-08 03:41:45 +02:00
distro="iOS $(sw_vers -productVersion)"
# "uname -m" doesn't print architecture on iOS so we force it off.
os_arch="off"
;;
"BSD")
distro="$(uname -s)"
2016-06-12 07:51:48 +02:00
distro="${distro/DragonFly/DragonFlyBSD}"
2016-05-14 07:19:09 +02:00
# Workaround for PCBSD as uname still displays FreeBSD.
2016-05-14 07:24:18 +02:00
[ -f "/etc/pcbsd-lang" ] && distro="PCBSD"
;;
"Windows")
distro="$(wmic os get Caption /value)"
# Strip crap from the output of wmic
2016-06-12 07:51:48 +02:00
distro="${distro/Caption'='}"
distro="${distro/Microsoft }"
;;
esac
# Get architecture
2016-04-04 16:49:21 +02:00
[ "$os_arch" == "on" ] && \
distro+=" $(uname -m)"
[ "$osx_codename" == "off" ] && \
2016-06-12 07:51:48 +02:00
distro="${distro/${codename}/Mac OS X}"
[ "$osx_buildversion" == "off" ] && \
2016-06-12 07:51:48 +02:00
distro="${distro/ ${osx_build}}"
}
# }}}
# Title {{{
gettitle () {
2016-04-29 06:50:16 +02:00
title="${USER:-$(whoami)}@${HOSTNAME:-$(hostname)}"
}
2015-12-30 11:18:17 +01:00
# }}}
# Kernel {{{
getkernel() {
case "$kernel_shorthand" in
"on") kernel="$(uname -r)" ;;
"off") kernel="$(uname -srm)" ;;
esac
}
2015-12-30 11:18:17 +01:00
# }}}
# Uptime {{{
getuptime () {
case "$os" in
"Linux" | "Windows")
2016-02-08 21:49:42 +01:00
case "$distro" in
*"Puppy"* | "Quirky Werewolf"* | "Alpine Linux"* | "Windows"*)
2016-06-12 07:51:48 +02:00
uptime="$(uptime | awk -F ':[0-9]{2}+ |(, ){1}+' '{printf $2}')"
2016-02-08 23:02:07 +01:00
;;
"openSUSE"*)
2016-06-12 07:51:48 +02:00
uptime="$(uptime | awk -F ':[0-9]{2}+[a-z][a-z] |(, ){1}+' '{printf $2}')"
2016-02-08 21:49:42 +01:00
;;
*)
uptime="$(uptime -p)"
2016-02-14 14:56:02 +01:00
[ "$uptime" == "up " ] && uptime="up $(awk -F'.' '{print $1}' /proc/uptime) seconds"
2016-02-08 21:49:42 +01:00
;;
esac
;;
"Mac OS X" | "iPhone OS" | "BSD")
2016-01-06 01:00:20 +01:00
# Get boot time in seconds
2016-01-04 05:30:14 +01:00
boot="$(sysctl -n kern.boottime)"
boot="${boot/'{ sec = '}"
2016-06-12 07:51:48 +02:00
boot="${boot/,*}"
2016-01-04 05:30:14 +01:00
# Get current date in seconds
2016-06-12 07:51:48 +02:00
now="$(date +%s)"
uptime="$((now - boot))"
2016-01-04 05:30:14 +01:00
# Convert uptime to days/hours/mins
2016-06-12 07:51:48 +02:00
minutes="$((uptime / 60%60))"
hours="$((uptime / 3600%24))"
days="$((uptime / 86400))"
2016-01-04 05:30:14 +01:00
2016-04-29 02:13:45 +02:00
case "$minutes" in
2016-04-29 02:27:43 +02:00
1) minutes="1 minute" ;;
2016-04-29 02:14:55 +02:00
0) unset minutes ;;
2016-04-29 02:27:43 +02:00
*) minutes="$minutes minutes" ;;
2016-04-29 02:12:46 +02:00
esac
2016-04-29 02:05:35 +02:00
2016-04-29 02:12:46 +02:00
case "$hours" in
2016-04-29 02:27:43 +02:00
1) hours="1 hour" ;;
2016-04-29 02:14:55 +02:00
0) unset hours ;;
2016-04-29 02:27:43 +02:00
*) hours="$hours hours" ;;
2016-04-29 02:12:46 +02:00
esac
2016-04-29 02:05:35 +02:00
2016-04-29 02:12:46 +02:00
case "$days" in
2016-04-29 02:27:43 +02:00
1) days="1 day" ;;
2016-04-29 02:19:09 +02:00
0) unset days ;;
2016-04-29 02:27:43 +02:00
*) days="$days days" ;;
2016-04-29 02:12:46 +02:00
esac
2016-04-29 02:05:35 +02:00
2016-06-12 08:18:49 +02:00
[ "$hours" ] && \
[ "$minutes" ] && \
2016-04-29 02:27:43 +02:00
hours+=","
2016-06-12 08:18:49 +02:00
[ "$days" ] && \
[ "$hours" ] && \
2016-04-29 02:27:43 +02:00
days+=","
uptime="up $days $hours $minutes"
;;
2015-12-30 11:18:17 +01:00
esac
# Make the output of uptime smaller.
case "$uptime_shorthand" in
"on")
2016-06-12 07:51:48 +02:00
uptime="${uptime/up }"
uptime="${uptime/minutes/mins}"
uptime="${uptime/minute/min}"
uptime="${uptime/seconds/secs}"
;;
"tiny")
2016-06-12 07:51:48 +02:00
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/ seconds/s}"
uptime="${uptime/,}"
;;
esac
2015-12-30 11:18:17 +01:00
}
# }}}
# Package Count {{{
getpackages () {
case "$os" in
"Linux" | "iPhone OS")
type -p pacman >/dev/null 2>&1 && \
packages="$(pacman -Qq --color never | wc -l)"
2016-02-15 12:59:28 +01:00
type -p dpkg >/dev/null 2>&1 && \
packages="$((packages+=$(dpkg --get-selections | grep -cv deinstall$)))"
2016-04-12 03:17:21 +02:00
type -p /sbin/pkgtool >/dev/null 2>&1 && \
packages="$((packages+=$(ls -1 /var/log/packages | wc -l)))"
2016-02-16 05:21:45 +01:00
type -p rpm >/dev/null 2>&1 && \
packages="$((packages+=$(rpm -qa | wc -l)))"
2016-02-14 23:28:51 +01:00
type -p xbps-query >/dev/null 2>&1 && \
packages="$((packages+=$(xbps-query -l | wc -l)))"
type -p pkginfo >/dev/null 2>&1 && \
packages="$((packages+=$(pkginfo -i | wc -l)))"
type -p pisi >/dev/null 2>&1 && \
packages="$((packages+=$(pisi list-installed | wc -l)))"
type -p pkg >/dev/null 2>&1 && \
packages="$((packages+=$(ls -1 /var/db/pkg | wc -l)))"
2015-12-30 11:18:17 +01:00
type -p emerge >/dev/null 2>&1 && \
packages="$((packages+=$(ls -d /var/db/pkg/*/* | wc -l)))"
2015-12-30 11:18:17 +01:00
type -p nix-env >/dev/null 2>&1 && \
packages="$((packages+=$(ls -d -1 /nix/store/*/ | wc -l)))"
type -p apk >/dev/null 2>&1 && \
packages="$((packages+=$(apk info | wc -l)))"
2016-03-09 12:43:52 +01:00
type -p pacman-g2 >/dev/null 2>&1 && \
packages="$((packages+=$(pacman-g2 -Q | wc -l)))"
2016-02-16 06:31:55 +01:00
type -p cave >/dev/null 2>&1 && \
packages="$((packages+=$(ls -d -1 /var/db/paludis/repositories/cross-installed/*/data/* /var/db/paludis/repositories/installed/data/* | wc -l)))"
2016-02-14 09:42:27 +01:00
;;
"Mac OS X")
[ -d "/usr/local/bin" ] && \
packages="$(($(ls -l /usr/local/bin/ | grep -v "\(../Cellar/\|brew\)" | wc -l) - 1))"
type -p port >/dev/null 2>&1 && \
packages="$((packages + $(port installed 2>/dev/null | wc -l) - 1))"
type -p brew >/dev/null 2>&1 && \
packages="$((packages + $(find /usr/local/Cellar -maxdepth 1 2>/dev/null | wc -l) - 1))"
type -p pkgin >/dev/null 2>&1 && \
packages="$((packages + $(pkgin list 2>/dev/null | wc -l)))"
;;
"BSD")
if type -p pkg_info >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
packages="$(pkg_info | wc -l)"
2016-01-18 06:22:21 +01:00
elif type -p pkg >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
packages="$(pkg info | wc -l)"
fi
;;
"Windows")
2016-06-12 07:51:48 +02:00
packages="$(cygcheck -cd | wc -l)"
# Count chocolatey packages
[ -d "/cygdrive/c/ProgramData/chocolatey/lib" ] && \
packages="$((packages+=$(ls -1 /cygdrive/c/ProgramData/chocolatey/lib | wc -l)))"
2016-01-05 06:32:34 +01:00
;;
esac
}
# }}}
# Shell {{{
getshell () {
case "$shell_path" in
"on") shell="$SHELL" ;;
"off") shell="${SHELL##*/}" ;;
esac
if [ "$shell_version" == "on" ]; then
shell+=" "
case "$shell" in
*"bash"*)
shell+="$(bash --version | head -n 1)"
2016-06-12 07:51:48 +02:00
shell="${shell/ *, version}"
;;
*"zsh"*)
shell+="$(zsh --version)"
2016-06-12 07:51:48 +02:00
shell="${shell/ zsh}"
;;
2016-01-29 05:40:52 +01:00
*"mksh"* | *"ksh")
shell+="$("$SHELL" -c 'printf "%s" "$KSH_VERSION"')"
2016-06-12 07:51:48 +02:00
shell="${shell/ * KSH}"
;;
2016-01-29 05:40:52 +01:00
*"tcsh"* | *"csh"*)
shell+="$("$SHELL" --version)"
2016-06-12 07:51:48 +02:00
shell="${shell/tcsh}"
shell="${shell/\(*}"
2016-01-29 05:40:52 +01:00
;;
2016-05-21 03:16:53 +02:00
*"fish"*)
shell+="$("$SHELL" -c 'printf "%s" "$FISH_VERSION"')"
;;
esac
shell="${shell/\(*\)}"
fi
}
# }}}
# Desktop Environment {{{
getde () {
2016-03-31 11:26:20 +02:00
case "$os" in
"Mac OS X") de="Aqua" ;;
2016-04-01 17:22:08 +02:00
*)
de="${XDG_CURRENT_DESKTOP/i3}"
2016-06-12 07:51:48 +02:00
de="${de/'X-'}"
2016-04-01 17:22:08 +02:00
;;
2016-03-31 11:26:20 +02:00
esac
2016-04-01 16:51:32 +02:00
2016-04-04 14:30:49 +02:00
if [ -n "$DISPLAY" ] && [ -z "$de" ]; then
de="$(xprop -root | awk '/KDE_SESSION_VERSION|^_MUFFIN|xfce4|xfce5/' 2>/dev/null)"
2016-04-01 16:51:32 +02:00
2016-04-01 16:55:31 +02:00
case "$de" in
"KDE_SESSION_VERSION"*) de="KDE${de/* = }" ;;
2016-05-08 03:30:14 +02:00
*"TDE_FULL_SESSION"*) de="Trinity" ;;
2016-04-01 17:17:36 +02:00
*"MUFFIN"*) de="Cinnamon" ;;
2016-04-01 17:27:25 +02:00
*"xfce4"*) de="XFCE4" ;;
*"xfce5"*) de="XFCE5" ;;
2016-04-01 16:55:31 +02:00
esac
2016-04-01 16:51:32 +02:00
fi
}
# }}}
# Window Manager {{{
getwm () {
2016-02-20 21:08:50 +01:00
if [ -n "$DISPLAY" ] && [ "$os" != "Mac OS X" ]; then
id="$(xprop -root -notype | awk '$1=="_NET_SUPPORTING_WM_CHECK:"{print $5}' 2>/dev/null)"
wm="$(xprop -id "$id" -notype -f _NET_WM_NAME 8t 2>/dev/null)"
2016-06-12 07:51:48 +02:00
wm="${wm/*_NET_WM_NAME = }"
wm="${wm/\"}"
wm="${wm/\"*}"
2016-02-17 06:54:18 +01:00
# Fallback for Wayland wms
case "$wm" in
"xwlc")
wm="$(ps -e | grep -m 1 -oE "sway|orbment|velox|orbital")"
2016-06-12 07:51:48 +02:00
[ "$version" -ge 4 ] && wm="${wm^}"
;;
esac
else
case "$os" in
"Mac OS X") wm="Quartz Compositor" ;;
2016-05-15 01:28:08 +02:00
"Windows") wm="Explorer" ;;
esac
fi
2015-12-31 01:21:10 +01:00
}
2015-12-30 11:18:17 +01:00
# }}}
2016-04-01 02:23:23 +02:00
# Window Manager Theme {{{
getwmtheme () {
2016-04-01 02:28:56 +02:00
[ -z "$wm" ] && getwm
2016-04-03 03:57:10 +02:00
[ -z "$de" ] && getde
2016-04-01 02:26:59 +02:00
2016-04-01 02:28:56 +02:00
case "$wm" in
2016-04-01 02:33:14 +02:00
'BudgieWM') wmtheme="$(gsettings get org.gnome.desktop.wm.preferences theme)" ;;
2016-04-03 03:57:10 +02:00
'E16') wmtheme="$(awk -F "= " '/theme.name/ {print $2}' "$HOME/.e16/e_config--0.0.cfg")";;
'Sawfish') wmtheme="$(awk -F ")" '/\(quote default-frame-style/ {print $2}' "$HOME/.sawfish/custom")" ;;
2016-04-01 02:26:59 +02:00
2016-04-01 09:34:06 +02:00
'Cinnamon' | 'Muffin' | 'Mutter (Muffin)')
2016-04-01 02:35:26 +02:00
detheme="$(gsettings get org.cinnamon.theme name)"
wmtheme="$(gsettings get org.cinnamon.desktop.wm.preferences theme)"
2016-04-01 05:50:15 +02:00
wmtheme="$detheme (${wmtheme})"
2016-04-01 02:35:26 +02:00
;;
'Compiz' | 'Mutter'* | 'GNOME Shell' | 'Gala')
if type -p gsettings >/dev/null 2>&1; then
wmtheme="$(gsettings get org.gnome.desktop.wm.preferences theme)"
elif type -p gconftool-2 >/dev/null 2>&1; then
wmtheme="$(gconftool-2 -g /apps/metacity/general/theme)"
fi
2016-04-01 02:26:59 +02:00
;;
2016-04-01 02:36:19 +02:00
2016-04-01 09:46:37 +02:00
'Metacity'*)
if [ "$de" == "Deepin" ]; then
wmtheme="$(gsettings get com.deepin.wrap.gnome.desktop.wm.preferences theme 2>/dev/null)"
else
wmtheme="$(gconftool-2 -g /apps/metacity/general/theme 2>/dev/null)"
fi
2016-04-01 02:36:19 +02:00
;;
2016-04-01 02:39:53 +02:00
2016-04-01 09:27:00 +02:00
'E17' | 'Enlightenment')
2016-04-01 02:41:49 +02:00
if type -p eet >/dev/null 2>&1; then
2016-06-12 06:35:29 +02:00
wmtheme="$(eet -d "$HOME/.e/e/config/standard/e.cfg" config | awk '/value \"file\" string.*.edj/ {print $4}')"
2016-06-12 07:51:48 +02:00
wmtheme="${wmtheme##*/}"
wmtheme="${wmtheme%.*}"
2016-04-01 02:41:49 +02:00
fi
;;
2016-04-01 02:44:20 +02:00
'Fluxbox')
2016-06-12 06:35:29 +02:00
[ -f "$HOME/.fluxbox/init" ] && \
wmtheme="$(awk -F "/" '/styleFile/ {print $NF}' "$HOME/.fluxbox/init")"
;;
2016-04-01 00:40:28 +02:00
'IceWM'*)
2016-06-12 06:35:29 +02:00
[ -f "$HOME/.icewm/theme" ] && \
wmtheme="$(awk -F "[\",/]" '!/#/ {print $2}' "$HOME/.icewm/theme")"
;;
'Openbox')
if [ "$de" == "LXDE" ] && [ -f "${HOME}/.config/openbox/lxde-rc.xml" ]; then
ob_file="lxde-rc"
elif [ -f "${HOME}/.config/openbox/rc.xml" ]; then
ob_file="rc"
fi
wmtheme="$(awk -F "[<,>]" '/<theme/ {getline; print $3}' "$XDG_CONFIG_HOME/openbox/${ob_file}.xml")";
;;
'PekWM')
2016-06-12 06:35:29 +02:00
[ -f "$HOME/.pekwm/config" ] && \
wmtheme="$(awk -F "/" '/Theme/ {gsub(/\"/,""); print $NF}' "$HOME/.pekwm/config")"
;;
'Xfwm4')
[ -f "${HOME}/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml" ] && \
wmtheme="$(xfconf-query -c xfwm4 -p /general/theme)"
;;
2016-04-01 05:50:15 +02:00
'KWin'*)
kdeconfigdir
2016-06-12 07:51:48 +02:00
kde_config_dir="${kde_config_dir%/}"
2016-04-01 05:50:15 +02:00
if [ -f "$kde_config_dir/share/config/kwinrc" ]; then
wmtheme="$(awk '/PluginLib=kwin3_/{gsub(/PluginLib=kwin3_/,"",$0); print $0; exit}' "$kde_config_dir/share/config/kwinrc")"
2016-04-01 08:38:06 +02:00
elif [ -f "$kde_config_dir/share/config/kdebugrc" ]; then
2016-04-01 05:50:15 +02:00
wmtheme="$(awk '/(decoration)/ {gsub(/\[/,"",$1); print $1; exit}' "$kde_config_dir/share/config/kdebugrc")"
fi
;;
2016-04-01 02:44:20 +02:00
'Quartz Compositor')
2016-06-12 07:51:48 +02:00
wmtheme="$(/usr/libexec/PlistBuddy -c "Print AppleAquaColorVariant" ~/Library/Preferences/.GlobalPreferences.plist)"
2016-04-01 02:44:20 +02:00
if [ -z "$wmtheme" ] || [ "$wmtheme" == "1" ]; then
wmtheme="Blue"
else
wmtheme="Graphite"
fi
;;
2016-04-01 02:47:16 +02:00
2016-04-01 05:53:31 +02:00
'Explorer')
path="/proc/registry/HKEY_CURRENT_USER/Software/Microsoft"
path+="/Windows/CurrentVersion/Themes/CurrentTheme"
wmtheme="$(head -n1 "$path" 2>/dev/null)"
wmtheme="${wmtheme##*\\}"
wmtheme="${wmtheme%.*}"
;;
2016-04-01 02:26:59 +02:00
esac
2016-04-01 02:33:14 +02:00
wmtheme="${wmtheme//\'}"
2016-06-12 07:51:48 +02:00
[ "$version" -ge 4 ] && wmtheme="${wmtheme^}"
2016-04-01 02:23:23 +02:00
}
# }}}
# CPU {{{
getcpu () {
2016-05-13 01:06:51 +02:00
# NetBSD emulates the linux /proc filesystem instead of using sysctl for hw
# information so we have to use this block below which temporarily sets the
# OS to 'Linux' for the duration of this function.
2016-05-13 01:02:44 +02:00
case "$distro" in
"NetBSD"*) local os="Linux" ;;
esac
case "$os" in
"Linux" | "Windows")
# Get cpu name
cpu="$(awk -F ': | @' '/model name/ {printf $2; exit}' /proc/cpuinfo)"
# 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 -t 1 -r speed < \
/sys/devices/system/cpu/cpu0/cpufreq/${speed_type}
2016-06-12 07:51:48 +02:00
speed="$((speed / 100000))"
else
2016-06-12 07:51:48 +02:00
speed="$(awk -F ': |\\.' '/cpu MHz/ {printf $2; exit}' /proc/cpuinfo)"
speed="$((speed / 100))"
fi
2016-06-12 07:51:48 +02:00
cores="$(awk -F ': ' '/siblings/ {printf $2; exit}' /proc/cpuinfo)"
# Fix for speeds under 1ghz
if [ -z "${speed:1}" ]; then
speed="0.${speed}"
else
2016-06-12 07:51:48 +02:00
speed="${speed:0:1}.${speed:1}"
fi
cpu="$cpu @ ${speed}GHz"
;;
"Mac OS X")
cpu="$(sysctl -n machdep.cpu.brand_string)"
2016-06-12 07:51:48 +02:00
cores="$(sysctl -n hw.ncpu)"
;;
"iPhone OS")
2016-06-12 07:51:48 +02:00
ios_model="${ios_model:-$(uname -m)}"
case "$ios_model" in
2016-05-08 06:44:15 +02:00
"iPhone1,1" | "iPhone1,2" | "iPod1,1")
cpu="Samsung S5L8900 @ 412MHz"
cores="1"
;;
2016-05-08 06:44:15 +02:00
"iPhone2,1")
cpu="Samsung S5PC100 @ 600MHz"
cores="1"
;;
2016-05-08 06:44:15 +02:00
"iPhone3,1" | "iPhone3,2" | "iPhone3,3" | "iPod4,1")
cpu="Apple A4 @ 800MHz"
cores="1"
;;
2016-05-08 06:44:15 +02:00
"iPhone4,1" | "iPod5,1")
cpu="Apple A5 @ 800MHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPhone5,1" | "iPhone5,2" | "iPhone5,3" | "iPhone5,4")
cpu="Apple A6 @ 1.3GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPhone6,1" | "iPhone6,2")
cpu="Apple A7 @ 1.3GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPhone7,1" | "iPhone7,2")
cpu="Apple A8 @ 1.4GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPhone8,1" | "iPhone8,2" | "iPhone8,4")
cpu="Apple A9 @ 1.85GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPod2,1")
cpu="Samsung S5L8720 @ 533MHz"
cores="1"
;;
2016-05-08 06:44:15 +02:00
"iPod3,1")
cpu="Samsung S5L8922 @ 600MHz"
cores="1"
;;
2016-05-08 06:44:15 +02:00
"iPod7,1")
cpu="Apple A8 @ 1.1GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPad1,1")
cpu="Apple A4 @ 1GHz"
cores="1"
;;
2016-05-08 06:44:15 +02:00
"iPad2,1" | "iPad2,2" | "iPad2,3" | "iPad2,4" | "iPad2,5" | "iPad2,6" | "iPad2,7")
cpu="Apple A5 @ 1GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPad3,1" | "iPad3,2" | "iPad3,3")
cpu="Apple A5X @ 1GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPad3,4" | "iPad3,5" | "iPad3,6")
cpu="Apple A6X @ 1.4GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPad4,1" | "iPad4,2" | "iPad4,3")
cpu="Apple A7 @ 1.4GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPad4,4" | "iPad4,5" | "iPad4,6" | "iPad4,7" | "iPad4,8" | "iPad4,9")
cpu="Apple A7 @ 1.4GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPad5,1" | "iPad5,2")
cpu="Apple A8 @ 1.5GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPad5,3" | "iPad5,4")
cpu="Apple A8X @ 1.5GHz"
cores="3"
;;
2016-05-08 06:44:15 +02:00
"iPad6,3" | "iPad6,4")
cpu="Apple A9X @ 2.16GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
"iPad6,7" | "iPad6,8")
cpu="Apple A9X @ 2.26GHz"
cores="2"
;;
2016-05-08 06:44:15 +02:00
esac
2016-05-08 05:32:44 +02:00
;;
"BSD")
# Get cpu name
cpu="$(sysctl -n hw.model)"
2016-06-12 07:51:48 +02:00
cpu="${cpu/[0-9]\.*}"
cpu="${cpu/ @*}"
2016-01-19 07:33:41 +01:00
# Get cpu speed
2016-06-12 07:51:48 +02:00
speed="$(sysctl -n hw.cpuspeed)"
[ -z "$speed" ] && speed="$(sysctl -n hw.clockrate)"
speed="$((speed / 100))"
# Get cpu cores
2016-06-12 07:51:48 +02:00
cores="$(sysctl -n hw.ncpu)"
2016-04-04 13:25:42 +02:00
# Fix for speeds under 1ghz
if [ -z "${speed:1}" ]; then
speed="0.${speed}"
else
2016-06-12 07:51:48 +02:00
speed="${speed:0:1}.${speed:1}"
2016-04-04 13:25:42 +02:00
fi
cpu="$cpu @ ${speed}GHz"
;;
esac
2016-05-12 12:34:36 +02:00
# Remove uneeded patterns from cpu output
# This is faster than sed/gsub
2016-06-12 07:51:48 +02:00
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//Dual-Core}"
cpu="${cpu//Quad-Core}"
cpu="${cpu//with Radeon HD Graphics}"
2016-03-12 13:01:20 +01:00
2016-03-15 08:55:35 +01:00
# Add cpu cores to output
2016-06-12 08:18:49 +02:00
[ "$cpu_cores" == "on" ] && [ "$cores" ] && \
2016-06-12 07:51:48 +02:00
cpu="${cpu/@/\(${cores}\) @}"
2016-03-15 08:55:35 +01:00
2016-03-12 13:01:20 +01:00
# Make the output of cpu shorter
case "$cpu_shorthand" in
2016-06-12 07:51:48 +02:00
"name") cpu="${cpu/@*}" ;;
"speed") cpu="${cpu#*@ }" ;;
2016-03-12 13:01:20 +01:00
"on" | "tiny")
2016-06-12 07:51:48 +02:00
cpu="${cpu/Intel }"
cpu="${cpu/Core }"
cpu="${cpu/Core? Duo }"
cpu="${cpu/AMD }"
2016-03-12 13:01:20 +01:00
case "$cpu_shorthand" in
2016-06-12 07:51:48 +02:00
"tiny") cpu="${cpu/@*}" ;;
2016-03-12 13:01:20 +01:00
esac
;;
esac
2016-06-12 08:18:49 +02:00
[ "$cpu" ] && prin "$subtitle" "$cpu"
2016-03-12 21:58:46 +01:00
2016-03-17 06:10:16 +01:00
[ "$stdout_mode" != "on" ] && unset cpu
}
2015-12-30 11:18:17 +01:00
# }}}
2016-06-13 12:22:38 +02:00
# CPU Usage {{{
getcpu_usage () {
case "$os" in
2016-06-13 13:21:32 +02:00
"Windows")
cpu_usage="$(wmic cpu get loadpercentage /value)"
cpu_usage="${cpu_usage/LoadPercentage'='}"
cpu_usage="${cpu_usage//[[:space:]]}"
;;
"Linux" | "Mac OS X" | "iPhone OS" | "BSD")
2016-06-13 12:22:38 +02:00
# Get cores if unset
if [ -z "$cores" ]; then
case "$os" in
"Linux") cores="$(awk -F ': ' '/siblings/ {printf $2; exit}' /proc/cpuinfo)" ;;
2016-06-13 13:21:32 +02:00
"Mac OS X" | "BSD") cores="$(sysctl -n hw.ncpu)" ;;
2016-06-13 12:22:38 +02:00
esac
fi
cpu_usage="$(ps aux | awk 'BEGIN { sum = 0 } { sum += $3 }; END { print sum }')"
cpu_usage="$((${cpu_usage/\.*} / ${cores:-1}))"
;;
esac
# Print the bar
case "$cpu_display" in
"info") cpu_usage="${cpu_usage}%" ;;
"bar") cpu_usage="$(bar $cpu_usage 100)" ;;
"infobar") cpu_usage="${cpu_usage}% $(bar $cpu_usage 100)" ;;
"barinfo") cpu_usage="$(bar $cpu_usage 100) ${cpu_usage}%" ;;
esac
}
# }}}
# GPU {{{
2016-01-19 01:55:45 +01:00
getgpu () {
2016-01-19 02:02:04 +01:00
case "$os" in
"Linux")
gpu="$(PATH="/sbin:$PATH" lspci | grep -F "3D")"
# If a GPU with a prefix of '3D' doesn't exist
# fallback to looking for a prefix of 'VGA'
[ -z "$gpu" ] && \
gpu="$(PATH="/sbin:$PATH" lspci | grep -F "VGA")"
2016-06-12 07:51:48 +02:00
gpu="${gpu//??':'??'.'?}"
2016-01-31 02:52:28 +01:00
# Count the number of GPUs
count="$(printf "%s" "$gpu" | uniq -c)"
2016-06-12 07:51:48 +02:00
count="${count/ VGA*}"
count="${count/ 3D*}"
2016-01-31 02:52:28 +01:00
# If there's more than one gpu
# Display the count.
if [ "$count" -gt 1 ]; then
count=" x $count"
else
unset count
fi
# Format the output
2016-06-12 07:51:48 +02:00
gpu="${gpu/* VGA compatible controller: }"
gpu="${gpu/* 3D controller: }"
gpu="${gpu/(rev*)}"
case "$gpu" in
intel*)
gpu="Intel Integrated Graphics"
;;
advanced*)
2016-06-12 07:51:48 +02:00
gpu="${gpu/Advanced Micro Devices, Inc\. }"
gpu="${gpu/'[AMD/ATI]' }"
gpu="${gpu/Tahiti PRO}"
gpu="${gpu/Seymour}"
gpu="${gpu/Cayman}"
gpu="${gpu/Richland}"
gpu="${gpu/Pitcairn}"
gpu="${gpu/Broadway}"
gpu="${gpu/XTMobility}"
gpu="${gpu/Mobility}"
gpu="${gpu/Hawaii}"
gpu="${gpu/Tobago}"
gpu="${gpu/Thames}"
gpu="${gpu/Kabini}"
gpu="${gpu/Bonaire}"
gpu="${gpu/XTX}"
gpu="${gpu/ OEM}"
gpu="${gpu/ Cape Verde}"
gpu="${gpu/ \[}"
gpu="${gpu/\]}"
2016-01-26 02:58:46 +01:00
brand="AMD "
;;
nvidia*)
2016-06-12 07:51:48 +02:00
gpu="${gpu/NVIDIA Corporation }"
gpu="${gpu/G????M }"
gpu="${gpu/G???? }"
gpu="${gpu/\[}"
gpu="${gpu/\] }"
2016-03-27 00:39:55 +01:00
brand="NVIDIA "
2016-01-26 02:58:46 +01:00
;;
*virtualbox*)
gpu="VirtualBox Graphics Adapter"
;;
esac
2016-01-26 02:58:46 +01:00
gpu="${brand}${gpu}"
2016-01-19 01:55:45 +01:00
;;
"Mac OS X")
2016-03-30 05:13:40 +02:00
# Use cache if it exists
2016-03-30 10:24:03 +02:00
if [ -f "/Library/Caches/neofetch/gpu" ]; then
source "/Library/Caches/neofetch/gpu"
2016-03-30 05:13:40 +02:00
else
2016-06-12 07:51:48 +02:00
gpu="$(system_profiler SPDisplaysDataType | awk -F': ' '/^\ *Chipset Model:/ {printf $2 ", "}')"
gpu="${gpu//'/ $'}"
gpu="${gpu%,*}"
2016-03-30 10:24:03 +02:00
cache "gpu" "$gpu" "/Library/Caches/"
2016-03-30 05:13:40 +02:00
fi
2016-01-19 01:55:45 +01:00
;;
2016-05-08 05:32:44 +02:00
"iPhone OS")
2016-06-12 07:51:48 +02:00
ios_model="${ios_model:-"$(uname -m)"}"
case "$ios_model" in
"iPhone1,1" | "iPhone1,2")
gpu="PowerVR MBX Lite 3D"
;;
"iPhone2,1" | "iPhone3,1" | "iPhone3,2" | "iPhone3,3" | "iPod3,1" | "iPod4,1" | "iPad1,1")
gpu="PowerVR SGX535"
;;
2016-05-08 06:44:15 +02:00
"iPhone4,1" | "iPad2,1" | "iPad2,2" | "iPad2,3" | "iPad2,4" | "iPad2,5" | "iPad2,6" | "iPad2,7" | "iPod5,1")
gpu="PowerVR SGX543MP2"
;;
"iPhone5,1" | "iPhone5,2" | "iPhone5,3" | "iPhone5,4")
gpu="PowerVR SGX543MP3"
;;
2016-05-08 06:44:15 +02:00
"iPhone6,1" | "iPhone6,2" | "iPad4,1" | "iPad4,2" | "iPad4,3" | "iPad4,4" | "iPad4,5" | "iPad4,6" | "iPad4,7" | "iPad4,8" | "iPad4,9")
gpu="PowerVR G6430"
;;
"iPhone7,1" | "iPhone7,2" | "iPod7,1" | "iPad5,1" | "iPad5,2")
gpu="PowerVR GX6450"
;;
"iPhone8,1" | "iPhone8,2" | "iPhone8,4")
gpu="PowerVR GT7600"
;;
"iPod1,1" | "iPod2,1")
gpu="PowerVR MBX Lite"
;;
"iPad3,1" | "iPad3,2" | "iPad3,3")
gpu="PowerVR SGX534MP4"
;;
"iPad3,4" | "iPad3,5" | "iPad3,6")
gpu="PowerVR SGX554MP4"
;;
"iPad5,3" | "iPad5,4")
gpu="PowerVR GXA6850"
;;
"iPad6,3" | "iPad6,4" | "iPad6,7" | "iPad6,8")
gpu="PowerVR 7XT"
;;
2016-05-08 06:44:15 +02:00
esac
2016-05-08 05:32:44 +02:00
;;
"BSD")
2016-01-19 01:55:45 +01:00
case "$distro" in
2016-02-01 04:56:53 +01:00
"FreeBSD"*)
2016-06-12 07:51:48 +02:00
gpu="$(pciconf -lv 2>/dev/null | grep -B 4 "VGA" | grep "device")"
gpu="${gpu/*device*= }"
gpu="${gpu//\'}"
2016-01-19 01:55:45 +01:00
;;
2016-05-05 19:39:28 +02:00
2016-05-05 19:44:09 +02:00
*)
2016-06-12 07:51:48 +02:00
gpu="$(glxinfo | grep -F 'OpenGL renderer string')"
gpu="${gpu/'OpenGL renderer string: '}"
2016-05-05 19:39:28 +02:00
;;
2016-01-19 01:55:45 +01:00
esac
;;
"Windows")
2016-06-12 07:51:48 +02:00
gpu="$(wmic path Win32_VideoController get caption /value)"
gpu="${gpu/Caption'='}"
2016-01-19 01:55:45 +01:00
;;
esac
2016-01-19 03:52:33 +01:00
case "$gpu_shorthand" in
"on" | "tiny")
2016-06-12 07:51:48 +02:00
gpu="${gpu// Rev\. ?}"
gpu="${gpu//AMD*\/ATI\]/AMD}"
gpu="${gpu// Tahiti}"
gpu="${gpu// PRO}"
gpu="${gpu// OEM}"
gpu="${gpu// Mars}"
gpu="${gpu// Series}"
gpu="${gpu// Controller}"
gpu="${gpu/\/*}"
case "$gpu_shorthand" in
"tiny")
2016-06-12 07:51:48 +02:00
gpu="${gpu/Graphics }"
gpu="${gpu/GeForce }"
gpu="${gpu/Radeon }"
;;
esac
;;
esac
2016-01-31 02:52:28 +01:00
gpu="${gpu}${count}"
2016-01-19 01:55:45 +01:00
}
# }}}
# Memory {{{
getmemory () {
case "$os" in
2016-03-28 00:41:53 +02:00
"Linux" | "Windows")
2016-06-12 06:35:29 +02:00
if grep -F "MemAvail" /proc/meminfo >/dev/null 2>&1; then
2016-05-06 10:35:09 +02:00
mem=($(awk -F ':| kB' '/MemTotal|MemAvail/ {printf $2}' /proc/meminfo))
2016-06-12 07:51:48 +02:00
memused="$((mem[0] - mem[1]))"
2016-05-06 10:35:09 +02:00
else
mem=($(awk -F ':| kB' '/MemTotal|MemFree|Buffers|Cached/ {printf $2}' /proc/meminfo) 0 0)
2016-06-12 07:51:48 +02:00
memused="$((mem[0] - mem[1] - mem[2] - mem[3]))"
2016-05-06 10:35:09 +02:00
fi
2016-06-12 07:51:48 +02:00
memused="$((memused / 1024))"
memtotal="$((mem[0] / 1024))"
;;
2016-05-07 13:14:46 +02:00
"Mac OS X" | "iPhone OS")
2016-06-12 09:13:26 +02:00
memtotal="$(($(sysctl -n hw.memsize) / 1024 / 1024))"
2016-06-12 07:51:48 +02:00
memwired="$(vm_stat | awk '/wired/ { print $4 }')"
memactive="$(vm_stat | awk '/active / { printf $3 }')"
memcompressed="$(vm_stat | awk '/occupied/ { printf $5 }')"
memused="$(((${memwired//.} + ${memactive//.} + ${memcompressed//.}) * 4 / 1024))"
;;
"BSD")
2016-01-18 07:45:32 +01:00
case "$distro" in
"NetBSD"*) memfree="$(($(awk -F ':|kB' '/MemFree:/ {printf $2}' /proc/meminfo) / 1024))" ;;
*) memfree="$(($(vmstat | awk 'END{printf $5}') / 1024))" ;;
2016-01-18 07:45:32 +01:00
esac
2016-01-18 07:17:32 +01:00
memtotal="$(($(sysctl -n hw.physmem) / 1024 / 1024))"
2016-06-12 07:51:48 +02:00
memused="$((memtotal - memfree))"
;;
esac
memory="${memused}MB / ${memtotal}MB"
# Progress bars
2016-03-12 21:58:46 +01:00
case "$memory_display" in
2016-03-12 14:00:02 +01:00
"bar") memory="$(bar "${memused}" "${memtotal}")" ;;
"infobar") memory="${memory} $(bar "${memused}" "${memtotal}")" ;;
"barinfo") memory="$(bar "${memused}" "${memtotal}") ${memory}" ;;
esac
}
# }}}
# Song {{{
getsong () {
if mpc version >/dev/null 2>&1; then
2016-02-16 04:50:20 +01:00
song="$(mpc current 2>/dev/null)"
2016-06-12 07:51:48 +02:00
state="$(mpc | awk -F '\\[|\\]' '/\[/ {printf $2}' 2>/dev/null)"
2016-04-01 16:39:20 +02:00
elif [ -n "$(ps x | awk '!(/awk/) && /cmus/')" ]; then
IFS=$'\n'
2016-06-12 07:51:48 +02:00
song=("$(cmus-remote -Q | grep "tag artist \|title \|status" 2>/dev/null | sort)")
artist="${song[1]/tag artist }"
title="${song[2]/tag title }"
state="${song[0]/status }"
song="$artist - $title"
elif pgrep "mocp" >/dev/null 2>&1; then
2016-02-16 04:50:20 +01:00
song="$(mocp -Q "%artist - %song" 2>/dev/null)"
state="$(mocp -Q "%state" 2>/dev/null)"
2016-02-15 14:12:15 +01:00
2016-03-29 01:04:59 +02:00
elif [ -n "$(ps x | awk '!(/awk/) && /spotify/')" ]; then
case "$os" in
"Linux")
# This command is way too long
song="$(\
dbus-send --print-reply --dest=org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 \
org.freedesktop.DBus.Properties.Get string:'org.mpris.MediaPlayer2.Player' string:'Metadata' |\
awk -F 'string "' '/string|array/ {printf "%s",$2; next}{print ""}' |\
2016-03-10 08:48:41 +01:00
awk -F '"' '/artist|title/ {printf $2 " - "}'
)"
2016-06-12 07:51:48 +02:00
song="${song% - }"
song="${song/'('*}"
song="${song//'['*}"
;;
"Mac OS X")
song="$(osascript -e 'tell application "Spotify" to artist of current track as string & " - " & name of current track as string')"
state="$(osascript -e 'tell application "Spotify" to player state as string')"
;;
esac
2016-06-01 13:04:22 +02:00
elif [ -n "$(ps x | awk '!(/awk/ || /Helper/) && /Google Play Music Desktop Player/')" ] && type -p gpmdp-remote >/dev/null 2>&1; then
song="$(gpmdp-remote current)"
state="$(gpmdp-remote status)"
2016-03-29 01:04:59 +02:00
elif [ -n "$(ps x | awk '!(/awk/ || /Helper/) && /iTunes/')" ]; then
2016-05-28 07:24:40 +02:00
song="$(osascript -e 'tell application "iTunes" to artist of current track as string & " - " & name of current track as string')"
2016-03-12 08:16:22 +01:00
state="$(osascript -e 'tell application "iTunes" to player state as string')"
2016-01-20 11:24:29 +01:00
else
song="Not Playing"
2016-01-20 11:24:04 +01:00
fi
2016-02-16 04:50:20 +01:00
case "$state" in
"paused" | "PAUSE")
song="Paused"
;;
"stopped" | "STOP")
2016-02-16 04:50:20 +01:00
song="Stopped"
;;
esac
2016-02-20 22:38:07 +01:00
# Display Artist and Title on seperate lines.
2016-03-17 06:16:15 +01:00
if [ "$song_shorthand" == "on" ] && [ "$stdout_mode" != "on" ]; then
artist="${song/ -*}"
2016-06-12 07:51:48 +02:00
song="${song/$artist - }"
if [ "$song" != "$artist" ]; then
2016-04-02 02:44:08 +02:00
prin "Artist" "$artist"
prin "Song" "$song"
else
2016-04-02 02:44:08 +02:00
prin "$subtitle" "$song"
fi
unset song
fi
}
# }}}
# Resolution {{{
getresolution () {
case "$os" in
"Linux" | "BSD")
2016-03-25 22:51:39 +01:00
if type -p xrandr >/dev/null 2>&1; then
case "$refresh_rate" in
2016-06-12 07:51:48 +02:00
"on") resolution="$(xrandr --nograb --current | awk 'match($0,/[0-9]{2,3}.[0-9]{2}\*/) {printf $1 " @ " substr($0,RSTART,RLENGTH) "Hz, "}')" ;;
"off") resolution="$(xrandr --nograb --current | awk '/*/ {printf $1 ", "}')" ;;
2016-03-26 02:13:31 +01:00
esac
2016-06-12 07:51:48 +02:00
resolution="${resolution//\*}"
2016-03-25 21:59:24 +01:00
elif type -p xdpyinfo >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
resolution="$(xdpyinfo 2>/dev/null | awk '/dimensions:/ {printf $2}')"
2016-03-25 21:59:24 +01:00
fi
;;
"Mac OS X")
2016-03-27 10:50:09 +02:00
if type -p screenresolution >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
resolution="$(screenresolution get 2>&1 | awk '/Display/ {printf $6 "Hz, "}')"
resolution="${resolution//x??@/ @ }"
2016-03-27 10:50:09 +02:00
else
2016-06-12 07:51:48 +02:00
resolution="$(system_profiler SPDisplaysDataType |\
awk '/Resolution:/ {printf $2"x"$4" @ "$6"Hz, "}')"
2016-03-27 10:50:09 +02:00
fi
2016-03-27 11:13:32 +02:00
[[ "$refresh_rate" == "off" ]] && \
2016-06-12 07:51:48 +02:00
resolution="${resolution// @ *([0-9])Hz}"
;;
2016-01-18 07:24:08 +01:00
2016-02-21 11:01:46 +01:00
"Windows")
2016-06-12 07:51:48 +02:00
width="$(wmic path Win32_VideoController get CurrentHorizontalResolution /value 2>/dev/null)"
width="${width/CurrentHorizontalResolution'='/}"
2016-06-12 07:51:48 +02:00
height="$(wmic path Win32_VideoController get CurrentVerticalResolution /value 2>/dev/null)"
height="${height/CurrentVerticalResolution'='/}"
2016-06-12 08:18:49 +02:00
[ "$width" ] && \
resolution="${width}x${height}"
2016-02-21 11:01:46 +01:00
;;
2016-01-29 14:34:48 +01:00
esac
2016-03-18 06:28:26 +01:00
2016-06-12 07:51:48 +02:00
resolution="${resolution%,*}"
}
# }}}
# Theme/Icons/Font {{{
getstyle () {
# Fix weird output when the function
# is run multiple times.
2016-02-19 13:18:02 +01:00
unset gtk2theme gtk3theme theme path
case "$1" in
theme)
name="gtk-theme-name"
gsettings="gtk-theme"
2016-02-08 13:29:48 +01:00
gconf="gtk_theme"
xfconf="ThemeName"
kde="widgetStyle"
;;
icons)
name="gtk-icon-theme-name"
gsettings="icon-theme"
2016-02-08 13:29:48 +01:00
gconf="icon_theme"
xfconf="IconThemeName"
kde="Theme"
;;
font)
name="gtk-font-name"
gsettings="font-name"
2016-02-08 13:29:48 +01:00
gconf="font_theme"
xfconf="FontName"
kde="font"
;;
esac
2016-02-20 22:38:07 +01:00
if [ -n "$DISPLAY" ] && [ "$os" != "Mac OS X" ]; then
# Get DE if user has disabled the function.
[ -z "$de" ] && getde
case "$de" in
"KDE"*)
2016-04-01 05:50:15 +02:00
kdeconfigdir
2016-02-16 00:31:13 +01:00
if [ -f "${kde_config_dir}/share/config/kdeglobals" ]; then
kde_config_file="${kde_config_dir}/share/config/kdeglobals"
2016-02-16 00:31:13 +01:00
2016-06-12 07:51:48 +02:00
theme="$(grep "^[^#]*$kde" "$kde_config_file")"
theme="${theme/${kde}*=}"
[ "$version" -ge 4 ] && theme="${theme^}"
gtk_shorthand="on"
return
fi
;;
2016-03-05 23:14:44 +01:00
*"Cinnamon")
if type -p gsettings >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
gtk3theme="$(gsettings get org.cinnamon.desktop.interface "$gsettings")"
gtk2theme="${gtk3theme}"
fi
;;
"Gnome"* | "Unity"* | "Budgie")
if type -p gsettings >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
gtk3theme="$(gsettings get org.gnome.desktop.interface "$gsettings")"
gtk2theme="${gtk3theme}"
elif type -p gconftool-2 >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
gtk2theme="$(gconftool-2 -g /desktop/gnome/interface/"$gconf")"
fi
;;
"Mate"*)
2016-06-12 07:51:48 +02:00
gtk3theme="$(gsettings get org.mate.interface "$gsettings")"
gtk2theme="${gtk3theme}"
;;
"Xfce"*)
2016-03-29 14:14:35 +02:00
type -p xfconf-query >/dev/null 2>&1 && \
2016-06-12 07:51:48 +02:00
gtk2theme="$(xfconf-query -c xsettings -p /Net/"$xfconf")"
;;
esac
# Check for gtk2 theme
if [ -z "$gtk2theme" ]; then
if [ -f "${GTK2_RC_FILES:-$HOME/.gtkrc-2.0}" ]; then
2016-06-12 07:51:48 +02:00
gtk2theme="$(grep "^[^#]*$name" "${GTK2_RC_FILES:-$HOME/.gtkrc-2.0}")"
2016-01-28 01:34:41 +01:00
elif [ -f "/usr/share/gtk-2.0/gtkrc" ]; then
2016-06-12 07:51:48 +02:00
gtk2theme="$(grep "^[^#]*$name" /usr/share/gtk-2.0/gtkrc)"
elif [ -f "/etc/gtk-2.0/gtkrc" ]; then
2016-06-12 07:51:48 +02:00
gtk2theme="$(grep "^[^#]*$name" /etc/gtk-2.0/gtkrc)"
2016-02-08 13:29:48 +01:00
fi
2016-06-12 07:51:48 +02:00
gtk2theme="${gtk2theme/${name}*=}"
fi
# Check for gtk3 theme
if [ -z "$gtk3theme" ]; then
if [ -f "$XDG_CONFIG_HOME/gtk-3.0/settings.ini" ]; then
2016-06-12 07:51:48 +02:00
gtk3theme="$(grep "^[^#]*$name" "$XDG_CONFIG_HOME/gtk-3.0/settings.ini")"
elif type -p gsettings >/dev/null 2>&1; then
gtk3theme="$(gsettings get org.gnome.desktop.interface $gsettings)"
2016-01-28 01:34:41 +01:00
elif [ -f "/usr/share/gtk-3.0/settings.ini" ]; then
2016-06-12 07:51:48 +02:00
gtk3theme="$(grep "^[^#]*$name" /usr/share/gtk-3.0/settings.ini)"
elif [ -f "/etc/gtk-3.0/settings.ini" ]; then
2016-06-12 07:51:48 +02:00
gtk3theme="$(grep "^[^#]*$name" /etc/gtk-3.0/settings.ini)"
fi
2016-06-12 07:51:48 +02:00
gtk3theme="${gtk3theme/${name}*=}"
fi
2016-01-24 00:38:46 +01:00
2016-06-12 03:41:25 +02:00
# Remove quotes
gtk2theme=${gtk2theme//\"}
gtk2theme=${gtk2theme//\'}
gtk3theme=${gtk3theme//\"}
gtk3theme=${gtk3theme//\'}
# Uppercase the first letter of each gtk theme
2016-02-23 23:30:11 +01:00
if [ "$version" -ge 4 ]; then
2016-06-12 07:51:48 +02:00
gtk2theme="${gtk2theme^}"
gtk3theme="${gtk3theme^}"
2016-02-23 23:30:11 +01:00
fi
# Toggle visibility of gtk themes.
[ "$gtk2" == "off" ] && unset gtk2theme
[ "$gtk3" == "off" ] && unset gtk3theme
2016-02-08 14:47:51 +01: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
theme="${gtk2theme}${gtk3theme}"
# Make the output shorter by removing "[GTKX]" from the string
if [ "$gtk_shorthand" == "on" ]; then
2016-06-12 07:51:48 +02:00
theme="${theme/ '[GTK2]'}"
theme="${theme/ '[GTK3]'}"
theme="${theme/ '[GTK2/3]'}"
fi
fi
}
gettheme () {
getstyle theme
}
geticons () {
getstyle icons
icons="$theme"
}
getfont () {
getstyle font
font="$theme"
}
# }}}
2016-05-16 13:35:29 +02:00
# Terminal Emulator {{{
getterm () {
2016-05-28 02:27:58 +02:00
# Check $PPID for terminal emulator.
2016-05-28 03:38:41 +02:00
case "$os" in
"Mac OS X")
# Workaround for OS X systems that
# don't support the block below.
case "$TERM_PROGRAM" in
"iTerm.app") term="iTerm2" ;;
"Terminal.app") term="Apple Terminal" ;;
*) term="${TERM_PROGRAM/\.app}" ;;
esac
return
;;
2016-05-18 07:51:25 +02:00
2016-05-28 03:38:41 +02:00
"Windows")
parent="$(ps -p ${1:-$PPID} | awk '{printf $2}')"
2016-06-12 07:51:48 +02:00
parent="${parent/'PPID'}"
2016-05-16 14:41:40 +02:00
2016-05-28 03:38:41 +02:00
name="$(ps -p $parent | awk '{printf $8}')"
2016-06-12 07:51:48 +02:00
name="${name/'COMMAND'}"
name="${name/*\/}"
2016-05-28 03:38:41 +02:00
;;
2016-05-28 02:14:45 +02:00
2016-05-28 03:38:41 +02:00
*)
parent="$(ps -p ${1:-$PPID} -o ppid=)"
name="$(ps -p $parent -o comm=)"
;;
esac
case "${name// }" in
"${SHELL/*\/}" | *"sh" | "tmux" | "screen") getterm "$parent" ;;
2016-06-12 07:51:48 +02:00
"login" | "init") term="$(tty)"; term="${term/*\/}" ;;
"ruby" | "1" | "systemd" | "sshd" | "python"*) unset term ;;
2016-06-02 13:14:19 +02:00
"gnome-terminal-") term="gnome-terminal" ;;
2016-05-28 03:38:41 +02:00
*) term="$name" ;;
esac
2016-05-16 13:35:29 +02:00
}
# }}}
# Terminal Emulator Font {{{
gettermfont () {
[ -z "$term" ] && getterm
case "$term" in
"urxvt" | "urxvtd" | "xterm")
termfont="$(grep -i "${term/d}\*font" <<< $(xrdb -query))"
2016-06-12 07:51:48 +02:00
termfont="${termfont/*font: }"
2016-05-16 16:38:07 +02:00
# Xresources has two different font syntax, this checks which
# one is in use and formats it accordingly.
case "$termfont" in
"xft:"*)
2016-06-12 07:51:48 +02:00
termfont="${termfont/xft:}"
termfont="${termfont/:*}"
;;
2016-05-16 16:38:07 +02:00
"-"*) termfont="$(awk -F '\\-' '{printf $3}' <<< "$termfont")" ;;
esac
2016-05-16 13:35:29 +02:00
;;
"xfce4-terminal")
termfont="$(awk -F '=' '!/^($|\/\/)/ && /FontName/ {printf $2}' "${XDG_CONFIG_HOME}/xfce4/terminal/terminalrc")"
2016-05-16 13:35:29 +02:00
;;
2016-05-16 13:52:22 +02:00
"termite")
termfont="$(awk -F '= ' '!/^($|#)/ && /font/ {printf $2; exit}' "${XDG_CONFIG_HOME}/termite/config")"
2016-05-16 13:52:22 +02:00
;;
2016-05-18 08:39:05 +02:00
"mintty")
termfont="$(awk -F '=' '!/^($|#)/ && /Font/ {printf $2; exit}' "${HOME}/.minttyrc")"
;;
2016-05-23 04:35:47 +02:00
"Apple_Terminal")
termfont="$(osascript -e 'tell application "Terminal" to font name of window frontmost')"
;;
2016-05-16 13:35:29 +02:00
esac
}
# }}}
# Disk Usage {{{
2016-01-26 11:25:28 +01:00
getdisk () {
# df flags
case "$os" in
2016-05-07 13:18:03 +02:00
"Linux" | "iPhone OS" | "Windows") df_flags="-h -l --total" ;;
"Mac OS X" | "BSD")
case "$distro" in
"FreeBSD"* | *"OS X"* ) df_flags="-H / -l" ;;
2016-03-27 06:21:11 +02:00
*) return ;;
esac
;;
esac
2016-01-26 11:25:28 +01:00
# Get the disk info
2016-06-12 07:51:48 +02:00
disk="$(df $df_flags 2>/dev/null | awk 'END{print $2 ":" $3 ":" $5}')"
2016-01-26 11:25:28 +01:00
# Format the output
2016-06-12 07:51:48 +02:00
disk_used="${disk#*:}"
disk_used="${disk_used%%:*}"
disk_total="${disk%%:*}"
disk_total_per="${disk#*:*:}"
2016-01-26 11:25:28 +01:00
# Put it all together
disk="${disk_used} / ${disk_total} (${disk_total_per})"
2016-03-03 01:52:39 +01:00
2016-03-12 13:43:16 +01:00
# Add info bar
2016-06-12 07:51:48 +02:00
disk_used="${disk_used/G}"
disk_total="${disk_total/G}"
# Convert Terabytes to Gigabytes.
if [ "$disk_display" != "off" ]; then
disk_used="${disk_used/\.}"
disk_total="${disk_total/\.}"
[[ "$disk_used" == *"T" ]] && \
disk_used="$((${disk_used/T} * 100))"
[[ "$disk_total" == *"T" ]] && \
disk_total="$((${disk_total/T} * 100))"
fi
2016-03-12 21:58:46 +01:00
case "$disk_display" in
"bar") disk="$(bar "${disk_used/'.'*}" "${disk_total/'.'*}")" ;;
"infobar") disk+=" $(bar "${disk_used/'.'*}" "${disk_total/'.'*}")" ;;
"barinfo") disk="$(bar "${disk_used/'.'*}" "${disk_total/'.'*}") $disk" ;;
"perc") disk="$disk_total_per $(bar "${disk_used/'.'*}" "${disk_total/'.'*}")" ;;
2016-03-12 13:43:16 +01:00
esac
2016-01-26 11:25:28 +01:00
}
# }}}
# Battery Usage {{{
getbattery () {
case "$os" in
"Linux")
2016-02-26 09:09:22 +01:00
if [ "$(ls /sys/class/power_supply/)" ]; then
# Set the index to the battery number.
case "$battery_num" in
"all") battery_num="*" index=0 ;;
*) index="$battery_num" ;;
esac
2016-06-12 06:35:29 +02:00
batteries=($(cat "/sys/class/power_supply/BAT$battery_num/capacity"))
battery_state=($(cat "/sys/class/power_supply/BAT${battery_num}/status"))
2016-03-25 14:18:16 +01:00
# Get the subtitle and reassign it so it doesn't change.
title="$subtitle"
# If shorthand is on, print each value on the same line
if [ "$battery_shorthand" == "on" ] || [ "$stdout_mode" == "on" ]; then
2016-06-12 07:51:48 +02:00
battery="${batteries[*]}"
battery="${battery// /%, }"
battery="${battery}%"
else
2016-03-03 01:18:28 +01:00
if [ "${#batteries[@]}" -gt 1 ]; then
2016-03-12 22:37:33 +01:00
unset battery
2016-03-03 01:18:28 +01:00
# Print each battery on a separate line.
for bat in "${batteries[@]}"; do
case "$battery_display" in
2016-06-12 06:35:29 +02:00
"bar") prin "${title}${index:-0}" "$(bar "${bat/'%'}" 100)" ;;
2016-05-15 01:03:58 +02:00
"infobar") prin "${title}${index:-0}" "${bat}% $(bar "${bat/'%'}" 100)" ;;
"barinfo") prin "${title}${index:-0}" "$(bar "${bat/'%'}" 100) ${bat}%" ;;
*) prin "${title}${index:-0}" "${bat}%" ;;
esac
2016-06-12 07:51:48 +02:00
index="$((index+=1))"
2016-03-03 01:18:28 +01:00
done
return
fi
2016-03-25 14:18:16 +01:00
battery="${batteries[0]}%"
fi
fi
;;
2016-02-23 09:21:30 +01:00
2016-02-23 10:24:38 +01:00
"BSD")
2016-02-23 09:21:30 +01:00
case "$distro" in
"FreeBSD"* | "DragonFly"*)
2016-06-12 07:51:48 +02:00
battery="$(acpiconf -i 0 | awk -F ':\t' '/Remaining capacity/ {print $2}')"
battery_state="$(acpiconf -i 0 | awk -F ':\t\t\t' '/State/ {print $2}')"
2016-02-23 09:21:30 +01:00
;;
2016-02-27 10:25:39 +01:00
"NetBSD"*)
2016-06-12 07:51:48 +02:00
battery="$(envstat | awk '\\(|\\)' '/charge:/ {print $2}')"
battery="${battery/\.*/%}"
2016-02-27 10:25:39 +01:00
;;
2016-02-23 10:24:38 +01:00
esac
;;
2016-02-23 10:21:16 +01:00
2016-02-23 10:24:38 +01:00
"OpenBSD")
2016-06-12 07:51:48 +02:00
battery0full="$(sysctl -n hw.sensors.acpibat0.watthour0)"
battery0full="${battery0full/ Wh*}"
2016-02-23 10:21:16 +01:00
2016-06-12 07:51:48 +02:00
battery0now="$(sysctl -n hw.sensors.acpibat0.watthour3)"
2016-02-23 10:39:09 +01:00
battery0now="${battery0now/ Wh*}"
2016-02-23 10:24:38 +01:00
2016-06-12 08:18:49 +02:00
[ "$battery0full" ] && \
2016-06-12 09:23:11 +02:00
battery="$((100 * ${battery0now/\.} / ${battery0full/\.}))%"
;;
"Mac OS X")
battery="$(pmset -g batt | grep -o '[0-9]*%')"
2016-03-25 14:24:18 +01:00
battery_state="$(pmset -g batt | awk 'NR==2 {print $3}')"
;;
"Windows")
2016-02-04 03:41:16 +01:00
battery="$(wmic Path Win32_Battery get EstimatedChargeRemaining /value)"
2016-06-12 07:51:48 +02:00
battery="${battery/EstimatedChargeRemaining'='}"
2016-06-12 08:18:49 +02:00
[ "$battery" ] && \
battery+="%"
;;
esac
2016-03-03 01:09:40 +01:00
2016-03-25 14:24:18 +01:00
case "$battery_state" in
2016-03-25 15:24:08 +01:00
"charging"*) battery+=" Charging" ;;
2016-03-25 14:18:16 +01:00
esac
2016-03-12 21:58:46 +01:00
case "$battery_display" in
2016-06-12 06:35:29 +02:00
"bar") battery="$(bar "${battery/'%'*}" 100)" ;;
2016-03-25 15:26:42 +01:00
"infobar") battery="${battery} $(bar "${battery/'%'*}" 100)" ;;
"barinfo") battery="$(bar "${battery/'%'*}" 100) ${battery}" ;;
2016-03-12 14:05:48 +01:00
esac
}
# }}}
# IP Address {{{
getlocalip () {
case "$os" in
"Linux")
localip="$(ip route get 1 | awk '{print $NF;exit}')"
;;
2016-05-07 13:20:03 +02:00
"Mac OS X" | "iPhone OS")
2016-02-09 00:48:37 +01:00
localip="$(ipconfig getifaddr en0)"
[ -z "$localip" ] && localip="$(ipconfig getifaddr en1)"
;;
"BSD")
localip="$(ifconfig | awk '/broadcast/ {print $2}')"
;;
"Windows")
localip="$(ipconfig | awk -F ': ' '/IPv4 Address/ {printf $2}')"
;;
esac
}
getpublicip () {
if type -p dig >/dev/null 2>&1; then
2016-03-31 10:37:18 +02:00
publicip="$(dig +time=1 +tries=1 +short myip.opendns.com @resolver1.opendns.com 2>/dev/null)"
fi
2016-03-31 10:37:18 +02:00
if [ -z "$publicip" ] && type -p curl >/dev/null 2>&1; then
2016-03-31 10:43:11 +02:00
publicip="$(curl --max-time 10 -w '\n' "$public_ip_host" 2>/dev/null)"
2016-03-31 10:37:18 +02:00
fi
2016-03-31 10:37:18 +02:00
if [ -z "$publicip" ] && type -p wget >/dev/null 2>&1; then
2016-03-31 10:43:11 +02:00
publicip="$(wget -T 10 -qO- "$public_ip_host" 2>/dev/null; printf "%s")"
fi
}
# }}}
# Logged In Users {{{
getusers () {
users="$(who | awk '!seen[$1]++ {printf $1 ", "}')"
2016-06-12 07:51:48 +02:00
users="${users%\,*}"
}
# }}}
2016-01-30 12:10:28 +01:00
# Birthday {{{
getbirthday () {
case "$os" in
2016-05-07 03:29:55 +02:00
"linux" | "iPhone OS")
birthday="$(ls -alct --full-time / | awk '/lost\+found|private/ {printf $6 " " $7}')"
2016-03-26 04:22:10 +01:00
date_cmd="$(date -d"$birthday" "$birthday_format")"
2016-01-30 12:10:28 +01:00
;;
2016-01-30 13:51:12 +01:00
"Mac OS X")
birthday="$(ls -lUT /var/log/install.log | awk '{printf $6 " " $7 " " $9 " " $8}')"
# Split the string into Date + time
2016-06-12 07:51:48 +02:00
time="${birthday/*???? }"
birthday="${birthday/$time}"
case "${time/:*}" in
2016-04-03 04:01:25 +02:00
0? | 10 | 11) time+=" AM" ;;
*) time+=" PM" ;;
esac
birthday+="$time"
birthday_shorthand="on"
2016-01-31 00:31:29 +01:00
;;
"BSD")
2016-01-31 00:38:20 +01:00
case "$distro" in
2016-02-01 04:56:53 +01:00
"OpenBSD"*)
2016-01-31 00:38:20 +01:00
birthday="$(ls -alctT / | awk '/lost\+found/ {printf $6 " " $7 " " $9 " " $8}')"
birthday_shorthand="on"
2016-01-31 00:38:20 +01:00
;;
2016-02-01 04:56:53 +01:00
"FreeBSD"*)
2016-01-31 00:38:20 +01:00
birthday="$(ls -alctT /etc/hostid | awk '{printf $6 " " $7 " " $9 " " $8}')"
2016-03-27 06:04:44 +02:00
date_cmd="$(date -j -f "%b %d %Y" "$birthday" "$birthday_format")"
2016-01-31 00:38:20 +01:00
;;
"NetBSD"* | "DragonFly"*)
2016-01-31 01:02:32 +01:00
birthday="$(ls -alctT /etc/defaults/rc.conf | awk '{printf $6 " " $7 " " $9 " " $8}')"
birthday_shorthand="on"
;;
2016-01-31 00:38:20 +01:00
esac
2016-01-30 12:10:28 +01:00
;;
2016-01-31 01:10:13 +01:00
"Windows")
birthday="$(ls -alct --full-time /cygdrive/c/Windows/explorer.exe | awk '{printf $8 " " $9}')"
2016-03-27 06:04:44 +02:00
date_cmd="$(date -d"$birthday" "$birthday_format")"
2016-01-31 01:10:13 +01:00
;;
2016-01-30 12:10:28 +01:00
esac
2016-01-30 12:41:58 +01:00
# Strip seconds from time output
2016-06-12 07:51:48 +02:00
birthday="${birthday/:?? / }"
2016-01-30 12:41:58 +01:00
# Pretty output
2016-03-06 00:01:57 +01:00
[ "$birthday_shorthand" == "off" ] && \
2016-06-12 07:51:48 +02:00
birthday="${date_cmd//+( )/ }"
2016-01-30 12:41:58 +01:00
# Toggle showing the time
[ "$birthday_time" == "off" ] && \
2016-06-12 07:51:48 +02:00
birthday="${birthday/??:??*}"
2016-01-30 12:10:28 +01:00
}
# }}}
# Terminal colors {{{
getcols () {
if [ "$color_blocks" == "on" ]; then
# Convert the width to space chars.
2016-06-12 07:51:48 +02:00
block_width="$(printf "%$((block_width-=1))s")"
# Generate the string.
while [ $start -le $end ]; do
case "$start" in
[0-6]) blocks+="\033[0m\033[3${start}m\033[4${start}m%${block_width}s" ;;
7) blocks+="\033[0m\033[3${start}m\033[4${start}m%${block_width}s" ;;
*) blocks2+="\033[38;5;${start}m\033[48;5;${start}m%${block_width}s" ;;
esac
2016-06-12 07:51:48 +02:00
start="$((start+=1))"
done
# Convert height into spaces.
spaces="$(printf "%${block_height}s")"
# Convert the spaces into rows of blocks.
2016-06-12 08:26:34 +02:00
[ "$blocks" ] && cols+="${spaces// /${blocks}"\033[0m"nl}"
[ "$blocks2" ] && cols+="${spaces// /${blocks2}"\033[0m"nl}"
# Add newlines to the string.
2016-06-12 07:51:48 +02:00
cols="${cols%%'nl'}"
cols="${cols//nl/\\n${padding}}"
fi
}
2015-12-30 11:18:17 +01:00
# }}}
# }}}
2015-12-30 11:18:17 +01:00
# Images {{{
2015-12-30 11:18:17 +01:00
# Wallpaper {{{
2016-01-05 08:19:38 +01:00
getwallpaper () {
case "$os" in
"Linux" | "BSD")
if type -p feh >/dev/null 2>&1 && [ -f "$HOME/.fehbg" ]; then
2016-01-20 11:35:32 +01:00
img="$(awk -F\' '/feh/ {printf $2}' "$HOME/.fehbg")"
2016-01-20 11:35:32 +01:00
elif type -p nitrogen >/dev/null 2>&1; then
img="$(awk -F'=' '/file/ {printf $2;exit;}' "$XDG_CONFIG_HOME/nitrogen/bg-saved.cfg")"
2016-01-24 01:03:29 +01:00
elif type -p gsettings >/dev/null 2>&1; then
# Get DE if user has disabled the function.
[ -z "$de" ] && getde
case "$de" in
"MATE"*) img="$(gsettings get org.mate.background picture-filename 2>/dev/null)" ;;
*) img="$(gsettings get org.gnome.desktop.background picture-uri 2>/dev/null)" ;;
esac
# Strip quotes etc from the path.
2016-06-12 07:51:48 +02:00
img="${img/'file://'}"
img="${img//\'}"
2016-01-20 11:35:32 +01:00
fi
2016-01-05 08:19:38 +01:00
;;
2016-01-17 22:37:37 +01:00
"Mac OS X")
2016-03-29 02:40:30 +02:00
img="$(osascript -e 'tell application "System Events" to picture of current desktop')"
2016-01-17 22:37:37 +01:00
;;
2016-01-05 08:50:06 +01: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 08:50:06 +01:00
;;
2016-01-05 08:19:38 +01:00
2016-01-05 08:50:06 +01:00
"Windows"*)
img="$APPDATA/Microsoft/Windows/Themes"
img+="/TranscodedWallpaper.jpg"
2016-01-05 08:50:06 +01:00
;;
esac
2016-01-05 08:19:38 +01:00
;;
esac
# If img is an xml file don't use it.
[ "${img/*\./}" == "xml" ] && img=""
2016-04-24 06:14:35 +02:00
2016-04-24 06:16:38 +02:00
# Error msg
[ -z "$img" ] && err "Wallpaper detection failed, falling back to ascii mode."
2016-01-05 08:19:38 +01:00
}
# }}}
2016-01-27 12:33:22 +01:00
# Ascii {{{
getascii () {
2016-02-28 07:02:05 +01:00
if [ ! -f "$ascii" ] || [ "$ascii" == "distro" ]; then
2016-04-24 06:14:35 +02:00
# Error message
[ "$ascii" != "distro" ] && \
2016-04-24 06:14:35 +02:00
[ ! -f "$ascii" ] && err "Ascii file not found, using distro ascii"
# Lowercase the distro name
2016-02-23 23:30:11 +01:00
if [ "$version" -le 3 ]; then
2016-06-12 07:51:48 +02:00
ascii="$(tr '[:upper:]' '[:lower:]' <<< "$ascii_distro")"
2016-02-23 23:30:11 +01:00
else
2016-06-12 07:51:48 +02:00
ascii="${ascii_distro,,}"
2016-02-23 23:30:11 +01:00
fi
[ "$ascii_logo_size" == "small" ] && \
ascii="${ascii/ *}_small"
2016-02-28 01:44:45 +01:00
if [ -f "/usr/share/neofetch/ascii/distro/${ascii/ *}" ]; then
ascii="/usr/share/neofetch/ascii/distro/${ascii/ *}"
2016-02-28 01:44:45 +01:00
elif [ -f "/usr/local/share/neofetch/ascii/distro/${ascii/ *}" ]; then
ascii="/usr/local/share/neofetch/ascii/distro/${ascii/ *}"
else
getscriptdir 2>/dev/null
2016-02-24 11:15:30 +01:00
# If the ascii file doesn't exist fallback to text mode.
2016-01-29 16:14:29 +01:00
if [ ! -f "$script_dir/ascii/distro/${ascii/ *}" ]; then
padding="\033[0C"
2016-01-29 01:06:26 +01:00
image="off"
2016-04-24 06:14:35 +02:00
err "Ascii file not found, falling back to text mode."
return
fi
2016-01-29 07:56:39 +01:00
2016-01-29 16:14:29 +01:00
ascii="$script_dir/ascii/distro/${ascii/ *}"
fi
# We only use eval in the distro ascii files.
print="$(eval printf "$(<"$ascii")")"
else
2016-02-04 11:22:58 +01:00
case "${ascii_colors[0]}" in
"distro") ascii_color="$c1" ;;
2016-02-23 06:52:25 +01:00
*) ascii_color="\033[38;5;${ascii_colors[0]}m" ;;
esac
2016-02-04 11:22:58 +01:00
print="${ascii_color}$(<"$ascii")"
fi
2016-02-10 00:20:51 +01:00
# Set locale to get correct padding
2016-02-10 12:54:07 +01:00
export LC_ALL="$SYS_LOCALE"
2016-02-10 00:20:51 +01:00
2016-02-24 11:15:30 +01:00
# Turn the file into a variable and strip escape codes.
2016-06-12 07:51:48 +02:00
ascii_strip="$(<"$ascii")"
ascii_strip="${ascii_strip//\$\{??\}}"
ascii_strip="${ascii_strip//'\\'/ }"
ascii_strip="${ascii_strip//'\'}"
# Get ascii file size in rows/cols
ascii_size="$(awk 'END {printf NR " "}length>max{max=length}END{printf max}' <<< "$ascii_strip")"
2016-06-12 07:51:48 +02:00
lines="${ascii_size/ *}"
ascii_length="${ascii_size/$lines}"
2016-03-29 09:04:36 +02:00
padding="\033[$((ascii_length + gap))C"
printf "%b%s" "$print"
2016-02-10 00:20:51 +01:00
export LC_ALL=C
2016-01-27 12:33:22 +01:00
}
# }}}
# Image {{{
getimage () {
# Fallback to ascii mode if imagemagick isn't installed.
2016-02-20 00:39:33 +01:00
type -p convert >/dev/null 2>&1 || image="ascii"
case "$image" in
2016-02-20 00:39:33 +01:00
"wall") getwallpaper ;;
"ascii") getascii; return ;;
*)
if [ -d "$image" ]; then
files=("${image%/}"/*.{png,jpg,jpeg})
img="$(printf "%s" "${files[RANDOM % (${#files[@]} - 1)]}")"
else
img="$image"
fi
;;
esac
2016-02-18 04:19:41 +01:00
# Get terminal width and height
2016-03-29 02:06:29 +02:00
stty -echo
2016-02-21 01:32:02 +01:00
if [ -n "$TMUX" ]; then
printf "%b%s" "\033Ptmux;\033\033[14t\033\033[c\033\\"
2016-06-13 11:25:09 +02:00
read_flags="-d c"
2016-06-10 09:58:24 +02:00
elif [ "$image_backend" == "tycat" ]; then
printf "%b%s" "\033}qs\000"
2016-02-21 01:32:02 +01:00
else
printf "%b%s" "\033[14t\033[c"
2016-06-10 10:11:47 +02:00
read_flags="-d c"
2016-02-21 01:32:02 +01:00
fi
2016-02-18 04:19:41 +01:00
2016-05-15 01:34:49 +02:00
# The escape code above prints the output AFTER the prompt so this
2016-06-10 10:11:47 +02:00
read -t 1 ${read_flags} -s -r term_size
2016-05-15 01:34:49 +02:00
stty echo
2016-01-20 11:46:20 +01:00
# Split the string
2016-06-10 09:58:24 +02:00
if [ "$image_backend" == "tycat" ]; then
2016-06-10 10:31:19 +02:00
term_size=(${term_size//;/ })
2016-06-12 07:51:48 +02:00
term_width="$((term_size[2] * term_size[0]))"
term_height="$((term_size[3] * term_size[1]))"
2016-06-10 09:58:24 +02:00
else
2016-06-12 07:51:48 +02:00
term_size="${term_size//'['}"
term_size="${term_size/';'}"
term_size="${term_size/$'\E4'}"
term_size="${term_size/t*}"
term_height="${term_size/';'*}"
term_width="${term_size/*';'}"
2016-06-10 09:58:24 +02:00
fi
# If $img isn't a file or the terminal doesn't support xterm escape sequences,
# fallback to ascii mode.
2016-06-12 07:51:48 +02:00
if [ ! -f "$img" ] || ([ "${#term_size}" -le 5 ] && [ "$image_backend" != "tycat" ]); then
image="ascii"
getascii
2016-04-24 06:14:35 +02:00
# Error messages
[ ! -f "$img" ] && err "\$img, isn't a file, falling back to ascii mode."
2016-06-12 07:51:48 +02:00
[ "${#term_size}" -le 5 ] && err "Your terminal doesn't support \\\033[14t, falling back to ascii mode."
2016-04-24 06:14:35 +02:00
return
fi
# Get terminal lines and columns
2016-06-12 07:51:48 +02:00
lines="$(tput lines)"
columns="$(tput cols)"
2016-02-01 01:05:46 +01:00
2016-02-18 04:19:41 +01:00
# Calculate font size
2016-06-12 07:51:48 +02:00
font_width="$((term_width / columns))"
2016-02-18 04:19:41 +01:00
# Image size is half of the terminal
2016-02-20 03:35:07 +01:00
case "$image_size" in
"auto")
2016-06-12 07:51:48 +02:00
image_size="$((columns * font_width / 2))"
term_height="$((term_height - term_height / 4))"
[ "$term_height" -lt "$image_size" ] && \
image_size="$term_height"
2016-02-20 03:35:07 +01:00
;;
*"%")
2016-06-12 07:51:48 +02:00
percent="${image_size/\%}"
image_size="$((percent * term_width / 100))"
2016-02-20 03:35:07 +01:00
[ "$((percent * term_height / 50))" -lt "$image_size" ] && \
2016-06-12 07:51:48 +02:00
image_size="$((percent * term_height / 100))"
2016-02-20 03:35:07 +01:00
;;
2016-04-12 07:50:19 +02:00
"none")
# Get image size so that we can do a better crop
2016-06-12 07:51:48 +02:00
size="$(identify -format "%w %h" "$img")"
width="${size%% *}"
height="${size##* }"
crop_mode="none"
;;
2016-06-12 07:51:48 +02:00
*) image_size="${image_size/px}" ;;
2016-02-20 03:35:07 +01:00
esac
2016-02-18 04:19:41 +01:00
# Fallback if width / height are empty.
2016-06-12 07:51:48 +02:00
width="${width:-$image_size}"
height="${height:-$image_size}"
2016-06-13 11:08:03 +02:00
# Padding is half the terminal width + gap
padding="\033[$((width / font_width + gap + xoffset/font_width))C"
# Make the directory if it doesn't exist
2016-01-31 11:33:02 +01:00
mkdir -p "$thumbnail_dir"
2016-02-20 00:39:33 +01:00
# Check to see if the image has a file extension, if it doesn't
# then add one.
case "${img##*/}" in
2016-05-27 07:13:37 +02:00
*"."*) imgname="$crop_mode-$crop_offset-$width-$height-${img##*/}" ;;
*) imgname="$crop_mode-$crop_offset-$width-$height-${img##*/}.jpg" ;;
esac
# Check to see if the thumbnail exists before we do any cropping.
2016-01-31 11:33:02 +01:00
if [ ! -f "$thumbnail_dir/$imgname" ]; then
# Get image size so that we can do a better crop
2016-05-27 07:13:37 +02:00
if [ -z "$size" ]; then
2016-06-12 07:51:48 +02:00
size="$(identify -format "%w %h" "$img")"
og_width="${size%% *}"
og_height="${size##* }"
2016-05-28 06:07:19 +02:00
# This checks to see if height is geater than width
# so we can do a better crop of portrait images.
2016-06-12 07:51:48 +02:00
size="$og_height"
[ "$og_height" -gt "$og_width" ] && size="$og_width"
2016-05-28 06:07:19 +02:00
fi
case "$crop_mode" in
fit)
2016-06-12 07:51:48 +02:00
c="$(convert "$img" \
-colorspace srgb \
2016-06-12 07:51:48 +02:00
-format "%[pixel:p{0,0}]" info:)"
convert \
"$img" \
-trim +repage \
-gravity south \
-background "$c" \
-extent "$size"x"$size" \
-scale "$width"x"$height" \
2016-01-31 11:33:02 +01:00
"$thumbnail_dir/$imgname"
;;
fill)
convert \
"$img" \
-trim +repage \
-scale "$width"x"$height"^ \
-extent "$width"x"$height" \
2016-01-31 11:33:02 +01:00
"$thumbnail_dir/$imgname"
;;
none) cp "$img" "$thumbnail_dir/$imgname" ;;
*)
convert \
"$img" \
-gravity $crop_offset \
-crop "$size"x"$size"+0+0 \
-quality 95 \
-scale "$width"x"$height" \
2016-01-31 11:33:02 +01:00
"$thumbnail_dir/$imgname"
;;
esac
fi
# The final image
2016-01-31 11:33:02 +01:00
img="$thumbnail_dir/$imgname"
2015-12-30 11:18:17 +01:00
}
takescrot () {
2016-03-18 23:37:29 +01:00
$scrot_cmd "${scrot_dir}${scrot_name}"
}
2015-12-30 11:18:17 +01:00
# }}}
2016-01-30 07:44:52 +01: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"
2016-04-24 06:14:35 +02:00
err "w3m-img wasn't found on your system, falling back to ascii mode."
2016-01-30 07:44:52 +01:00
fi
}
# }}}
2015-12-30 11:18:17 +01:00
# }}}
# Text Formatting {{{
2015-12-30 11:18:17 +01:00
# Info {{{
info () {
# $1 is the subtitle
subtitle="$1"
# 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
# If the output is empty, don't print anything
[ -z "$output" ] && return
# Trim whitespace
output="$(trim "$output")"
case "$1" in
title)
2016-05-14 02:54:53 +02:00
string="${title_color}${bold}${output}"
string="${string/@/${at_color}@${title_color}${bold}}"
2016-06-12 07:51:48 +02:00
length="${#output}"
;;
underline)
string="${underline_color}${output}"
;;
*)
string="${subtitle_color}${bold}${subtitle}\033[0m"
string+="${colon_color}: ${info_color}${output}"
2016-06-12 07:51:48 +02:00
length="$((${#subtitle} + ${#output} + 2))"
;;
esac
# If there's no subtitle don't print one
2016-06-12 07:51:48 +02:00
[ -z "$2" ] && string="${string/*: }"
# Print the string
printf "%b%s\n" "${padding}${string}\033[0m"
}
# }}}
# Prin {{{
prin () {
2016-04-02 02:34:04 +02:00
if [ -z "$2" ]; then
string="${info_color}${1}"
2016-06-12 07:51:48 +02:00
length="${#1}"
2016-04-02 02:34:04 +02:00
else
string="${subtitle_color}${bold}${1}\033[0m"
2016-04-02 02:34:04 +02:00
string+="${colon_color}: ${info_color}${2}"
2016-06-12 07:51:48 +02:00
length="$((${#subtitle} + ${#2} + 1))"
2016-04-02 02:34:04 +02:00
fi
# Trim whitespace
string="$(trim "$string")"
# Print the info
printf "%b%s\n" "${padding}${string}\033[0m"
}
# }}}
# Stdout {{{
stdout () {
2016-03-03 06:35:24 +01:00
# Read args early for the separator
stdout_separator_flag="$(awk -F '--stdout_separator ' '{printf $2}' <<< "${args[@]}")"
2016-06-12 07:51:48 +02:00
stdout_separator_flag="${stdout_separator_flag/ '--'*}"
2016-06-12 08:18:49 +02:00
[ "$stdout_separator_flag" ] && \
stdout_separator="$stdout_separator_flag"
2016-02-19 14:05:48 +01:00
for func in "${args[@]}"; do
case "$func" in
"--"*) break ;;
*)
"get$func" 2>/dev/null
eval output="\$$func"
2016-06-13 12:26:21 +02:00
output="$(trim "$output")"
2016-03-03 06:35:24 +01:00
stdout+="${output}${stdout_separator}"
2016-02-19 14:05:48 +01:00
;;
esac
done
2016-03-03 06:35:24 +01:00
printf "%s" "${stdout%%${stdout_separator}}"
2016-02-19 14:05:48 +01:00
exit
}
# }}}
# Underline {{{
getunderline () {
2016-04-02 03:52:21 +02:00
case "$underline_enabled" in
"on")
2016-06-12 07:51:48 +02:00
underline="$(printf %"$length"s)"
underline="${underline// /$underline_char}"
;;
"off") underline="" ;;
esac
}
# }}}
# Colors {{{
colors () {
2016-02-23 06:52:25 +01:00
# Change color of logo based on distro
case "$ascii_distro" in
2016-02-23 07:13:23 +01:00
"Arch"* | "Antergos"*)
2016-02-23 06:52:25 +01:00
setcolors 6 4
;;
"CentOS"*)
setcolors 3 2 4 5 7
;;
2016-03-25 09:34:05 +01:00
"CRUX"* | "Chakra"* | "gNewSense"* | "SailfishOS"* | "Alpine"* | "Ubuntu-GNOME"* | "Qubes"*)
2016-05-14 16:04:32 +02:00
setcolors 4 5 7 6
2016-02-23 06:52:25 +01:00
;;
"Chrom"*)
setcolors 2 1 3 4 7
ascii_distro="chrome"
;;
"Debian"* | "Ubuntu"* | "DragonFly"*)
setcolors 1 7 3
2016-02-23 06:52:25 +01:00
;;
2016-05-14 07:44:05 +02:00
"FreeBSD"* | "PCBSD"*)
2016-05-12 12:21:27 +02:00
setcolors 1 7 3
ascii_distro="freebsd"
2016-02-23 06:52:25 +01:00
;;
2016-02-23 07:13:23 +01:00
"Red"*)
setcolors 1 7 3
2016-02-23 06:52:25 +01:00
ascii_distro="redhat"
;;
"Kogaion"* | "Elementary"*)
2016-05-06 02:21:15 +02:00
setcolors 4 7
2016-05-05 19:24:48 +02:00
;;
2016-02-23 06:52:25 +01:00
"Fedora"* | "Sabayon"* | "Frugalware"* | "Exherbo"*)
setcolors 4 7 1
2016-02-23 06:52:25 +01:00
;;
"Gentoo"* | "Funtoo"* | "SteamOS"* | "Devuan"*)
2016-06-01 09:19:40 +02:00
setcolors 5 7
;;
2016-04-21 01:05:11 +02:00
"KDE"*)
setcolors 2 7
ascii_distro="kde"
;;
2016-02-23 06:52:25 +01:00
"Kali"*)
setcolors 4 8
;;
*"OS X"* | *"iOS"* | "Mac")
2016-02-23 06:52:25 +01:00
setcolors 2 3 1 1 5 4
2016-03-13 12:49:37 +01:00
ascii_distro="mac"
2016-02-23 06:52:25 +01:00
;;
"OpenMandriva"*)
setcolors 4 3
;;
"Mageia"*)
setcolors 6 7
2016-02-23 06:52:25 +01:00
;;
"Peppermint"*)
setcolors 1 7
2016-02-23 06:52:25 +01:00
;;
*"Mint"*)
setcolors 2 7
2016-02-23 06:52:25 +01:00
ascii_distro="mint"
;;
"LMDE"* | "Chapeau"*)
setcolors 2 7
2016-02-23 06:52:25 +01:00
;;
"NetBSD"* | "Parabola"* | "Tails"* | "BLAG"*)
setcolors 5 7
;;
"OpenBSD"*)
2016-04-25 03:59:29 +02:00
setcolors 3 7 6 1 8
2016-02-23 06:52:25 +01:00
;;
2016-03-13 12:49:37 +01:00
"OpenSuse"* | "Manjaro"* | "Deepin"*)
2016-02-23 06:52:25 +01:00
setcolors 2 7
;;
2016-03-17 04:16:30 +01:00
"PCLinuxOS"* | "Slackware"* | "KaOS"* | "Kubuntu"* | "Lubuntu"* | "Xubuntu"*)
2016-02-23 11:20:36 +01:00
setcolors 4 7 1
2016-02-23 06:52:25 +01:00
;;
2016-03-26 12:32:31 +01:00
"Puppy"* | "Quirky Werewolf"* | "Precise Puppy"*)
setcolors 4
ascii_distro="puppy"
;;
2016-02-23 06:52:25 +01:00
"Scientific"*)
setcolors 4 1 7
;;
"Solus"*)
setcolors 7 8
;;
"Trisquel"* | "NixOS"* | "Zorin"*)
setcolors 4 6
;;
2016-03-26 05:22:24 +01:00
"Travis")
setcolors 3 1 0 7 4
;;
2016-02-23 06:52:25 +01:00
"void"*)
setcolors 2 8
2016-02-23 06:52:25 +01:00
;;
2016-05-08 12:00:15 +02:00
"Windows 8"* | "Windows 10"*)
2016-02-23 06:52:25 +01:00
setcolors 6
ascii_distro="windows10"
;;
"Windows"*)
setcolors 1 2 4 3
;;
2016-02-23 11:20:36 +01:00
"Raspbian"* | *)
setcolors 2 1
;;
2016-02-23 06:52:25 +01:00
esac
# Overwrite distro colors if '$ascii_colors' doesn't
# equal 'distro'.
[ "${ascii_colors[0]}" != "distro" ] && \
setcolors ${ascii_colors[@]}
2015-12-30 11:18:17 +01:00
}
2016-02-23 06:52:25 +01:00
setcolors () {
2016-06-12 06:35:29 +02:00
c1="$(color "$1")${ascii_bold}"
c2="$(color "$2")${ascii_bold}"
c3="$(color "$3")${ascii_bold}"
c4="$(color "$4")${ascii_bold}"
c5="$(color "$5")${ascii_bold}"
c6="$(color "$6")${ascii_bold}"
2016-02-23 06:52:25 +01:00
if [ "${colors[0]}" == "distro" ]; then
title_color="$c1"
at_color="\033[0m"
underline_color="\033[0m"
subtitle_color="$c2"
colon_color="\033[0m"
info_color="\033[0m"
2016-02-23 06:52:25 +01:00
# If the second color is white use the first for the subtitle
[ "$2" == 7 ] && subtitle_color="\033[0m\033[3${1}m"
[ "$1" == 7 ] && title_color="\033[0m"
2016-02-23 06:52:25 +01:00
else
2016-06-12 06:35:29 +02:00
title_color="$(color "${colors[0]}")"
at_color="$(color "${colors[1]}")"
underline_color="$(color "${colors[2]}")"
subtitle_color="$(color "${colors[3]}")"
colon_color="$(color "${colors[4]}")"
info_color="$(color "${colors[5]}")"
2016-02-23 06:52:25 +01:00
fi
if [ "$progress_color_elapsed" == "distro" ]; then
progress_color_elapsed="$(color fg)"
else
2016-06-12 06:35:29 +02:00
progress_color_elapsed="$(color "$progress_color_elapsed")"
2016-03-27 11:49:06 +02:00
fi
2016-03-29 14:31:08 +02:00
case "$progress_color_total $1" in
distro\ [736]) progress_color_total="$c2" ;;
distro\ [0-9]) progress_color_total="$c1" ;;
2016-06-12 06:35:29 +02:00
*) progress_color_total="$(color "$progress_color_total")" ;;
2016-03-29 14:31:08 +02:00
esac
2016-01-20 23:49:50 +01:00
}
2016-03-04 03:15:03 +01:00
color () {
case "$1" in
[0-7]) printf "%b%s" "\033[0m\033[3${1}m" ;;
"fg") printf "%b%s" "\033[0m" ;;
*) printf "%b%s" "\033[38;5;${1}m" ;;
esac
2016-03-04 03:15:03 +01:00
}
2016-02-23 06:52:25 +01:00
# }}}
# Bold {{{
bold () {
case "$ascii_bold" in
"on") ascii_bold="\033[1m" ;;
"off") ascii_bold="" ;;
esac
case "$bold" in
"on") bold="\033[1m" ;;
"off") bold="" ;;
esac
}
# }}}
# Linebreak {{{
getlinebreak () {
linebreak=" "
}
# }}}
# Trim whitespace {{{
# When a string is passed to 'echo' all trailing and leading
# whitespace is removed and inside the string multiple spaces are
# condensed into single spaces.
#
# The 'set -f/+f' is here so that 'echo' doesn't cause any expansion
# of special characters.
#
# The whitespace trim doesn't work with multiline strings so we use
# '${1//[[:space:]]/ }' to remove newlines beofre we trim the whitespace.
trim() {
set -f
builtin echo -E ${1//[[:space:]]/ }
set +f
}
# }}}
2015-12-31 01:21:10 +01:00
2015-12-30 11:18:17 +01:00
# }}}
2016-01-29 16:14:29 +01:00
# Other {{{
# Get script directory {{{
getscriptdir () {
# Use $0 to get the script's physical path.
2016-01-30 06:31:22 +01:00
cd "${0%/*}" || exit
2016-06-12 07:51:48 +02:00
script_dir="${0##*/}"
2016-01-29 16:14:29 +01:00
# Iterate down a (possible) chain of symlinks.
while [ -L "$script_dir" ]; do
2016-01-30 06:31:22 +01:00
script_dir="$(readlink "$script_dir")"
cd "${script_dir%/*}" || exit
2016-01-29 16:14:29 +01: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 16:14:29 +01:00
if [ -f "$config_file" ]; then
source "$config_file"
return
fi
mkdir -p "$XDG_CONFIG_HOME/neofetch/"
2016-01-29 16:14:29 +01:00
# Check $XDG_CONFIG_HOME/neofetch and create the
2016-01-29 16:14:29 +01:00
# dir/files if they don't exist.
if [ -f "$XDG_CONFIG_HOME/neofetch/config" ]; then
source "$XDG_CONFIG_HOME/neofetch/config"
2016-01-29 16:18:27 +01:00
2016-02-28 01:44:45 +01:00
elif [ -f "/usr/share/neofetch/config" ]; then
cp "/usr/share/neofetch/config" "$XDG_CONFIG_HOME/neofetch"
source "$XDG_CONFIG_HOME/neofetch/config"
2016-01-29 16:18:27 +01:00
2016-02-28 01:44:45 +01:00
elif [ -f "/usr/local/share/neofetch/config" ]; then
cp "/usr/local/share/neofetch/config" "$XDG_CONFIG_HOME/neofetch"
source "$XDG_CONFIG_HOME/neofetch/config"
2016-01-29 16:14:29 +01:00
else
getscriptdir
cp "$script_dir/config/config" "$XDG_CONFIG_HOME/neofetch"
source "$XDG_CONFIG_HOME/neofetch/config"
2016-01-29 16:14:29 +01:00
fi
}
# Check the commandline flags early for '--config none/off'
case "$@" in
*"--config off"* | *'--config "off"'* | *"--config 'off'"* | \
*"--config none"* | *'--config "none"'* | *"--config 'none'"* | *"--stdout"*)
config="off"
;;
esac
[ "$config" == "on" ] && getconfig 2>/dev/null
2016-01-29 16:14:29 +01:00
# }}}
2016-03-03 00:12:21 +01:00
# Progress Bars {{{
bar() {
# Get the values
2016-06-12 07:51:48 +02:00
elapsed="$(($1 * progress_length / $2))"
2016-03-03 00:12:21 +01:00
# Create the bar with spaces
2016-06-12 07:51:48 +02:00
prog="$(printf %"$elapsed"s)"
total="$(printf %"$((progress_length - elapsed))"s)"
2016-03-03 00:12:21 +01:00
# Set the colors and swap the spaces for $progress_char
2016-04-24 10:30:57 +02:00
bar+="${progress_color_elapsed}${prog// /$progress_char_elapsed}"
bar+="${progress_color_total}${total// /$progress_char_total}"
# Borders
if [ "$progress_border" == "on" ]; then
bar+="$(color fg)]"
bar="$(color fg)[$bar"
fi
printf "%b%s\n" "${bar}\033[0m"
2016-03-03 00:12:21 +01:00
}
# }}}
2016-01-29 16:14:29 +01:00
# Cache {{{
cache () {
2016-03-30 10:24:03 +02:00
mkdir -p "$3/neofetch"
echo "${1/*-}=\"$2\"" > "$3/neofetch/${1/*-}"
}
# }}}
2016-03-28 00:41:53 +02:00
2016-04-01 05:50:15 +02:00
# KDE Config directory {{{
kdeconfigdir () {
2016-04-01 08:38:06 +02:00
if [ -n "$KDE_CONFIG_DIR" ]; then
kde_config_dir="$KDE_CONFIG_DIR"
elif type -p kde5-config >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
kde_config_dir="$(kde5-config --localprefix)"
2016-04-01 05:50:15 +02:00
elif type -p kde4-config >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
kde_config_dir="$(kde4-config --localprefix)"
2016-04-01 05:50:15 +02:00
elif type -p kde-config >/dev/null 2>&1; then
2016-06-12 07:51:48 +02:00
kde_config_dir="$(kde-config --localprefix)"
2016-04-01 05:50:15 +02:00
fi
}
# }}}
2016-04-24 06:14:35 +02:00
err () {
err+="$(color 1)[!]$(color fg) $1 \n"
}
2016-04-01 05:50:15 +02:00
2016-01-29 16:14:29 +01:00
# }}}
# Usage {{{
usage () { cat << EOF
2016-02-28 01:44:45 +01:00
usage: neofetch --option "value" --option "value"
NOTE: There's also a config option for each flag below.
Info:
--disable infoname Allows you to disable an info line from appearing
in the output.
NOTE: You can supply multiple args. eg.
2016-02-28 01:44:45 +01:00
'neofetch --disable cpu gpu disk shell'
--osx_buildversion on/off Hide/Show Mac OS X build version.
2016-03-13 13:12:58 +01:00
--osx_codename on/off Hide/Show Mac OS X codename.
--os_arch on/off Hide/Show Windows architecture.
--speed_type type Change the type of cpu speed to display.
Possible values: current, min, max, bios,
scaling_current, scaling_min, scaling_max
NOTE: This only support Linux with cpufreq.
--cpu_shorthand type Shorten the output of CPU
2016-03-11 03:59:22 +01:00
Possible values: name, speed, tiny, on, off
2016-03-15 08:55:35 +01:00
--cpu_cores on/off Whether or not to display the number of CPU cores
--kernel_shorthand on/off Shorten the output of kernel
--uptime_shorthand on/off Shorten the output of uptime (tiny, on, off)
2016-03-18 06:28:26 +01:00
--refresh_rate on/off Whether to display the refresh rate of each monitor
Unsupported on Windows
--gpu_shorthand on/off Shorten the output of GPU (tiny, on, off)
--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
--battery_num num Which battery to display, default value is 'all'
--battery_shorthand on/off Whether or not each battery gets its own line/title
--ip_host url Url to ping for public IP
--song_shorthand on/off Print the Artist/Title on seperate lines
--birthday_shorthand on/off Shorten the output of birthday
--birthday_time on/off Enable/Disable showing the time in birthday output
--birthday_format format Format the birthday output. (Uses 'date' cmd format)
Text Formatting:
--colors x x x x x x Changes the text colors in this order:
title, @, underline, subtitle, colon, info
2016-04-29 09:41:21 +02:00
--underline on/off enable/disable the underline.
--underline_char char Character to use when underlining title
--line_wrap on/off Enable/Disable line wrapping
--bold on/off Enable/Disable bold text
Color Blocks:
--color_blocks on/off Enable/Disable the color blocks
--block_width num Width of color blocks in spaces
--block_height num Height of color blocks in lines
--block_range start end Range of colors to print as blocks
2016-03-03 00:12:21 +01:00
Progress Bars:
2016-04-29 09:41:21 +02:00
--progress_char 'elapsed char' 'total char'
Characters to use when drawing progress bars.
--progress_border on/off Whether or not to surround the bar with '[]'
2016-03-03 00:41:13 +01:00
--progress_length num Length in spaces to make the progress bars.
2016-03-12 23:14:56 +01:00
--progress_colors num num Colors to make the progress bar.
Set in this order: elapsed, total
2016-06-13 13:42:53 +02:00
--cpu_display mode Progress bar mode.
Takes: bar, infobar, barinfo, off
--memory_display mode Progress bar mode.
Takes: bar, infobar, barinfo, off
--battery_display mode Progress bar mode.
Takes: bar, infobar, barinfo, off
--disk_display mode Progress bar mode.
Takes: bar, infobar, barinfo, off
2016-03-03 00:12:21 +01:00
Image:
--image type Image source. Where and what image we display.
Possible values: wall, ascii,
/path/to/img, /path/to/dir/, off
2016-05-27 07:23:02 +02:00
--size 00px | --size 00% How to size the image.
Possible values: auto, 00px, 00%, none
--crop_mode 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. This only works with w3m.
--yoffset px How close the image will be to the top edge of the
window. This only works with w3m.
--gap num Gap between image and text.
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 12:33:22 +01:00
Ascii:
--ascii value Where to get the ascii from, Possible values:
distro, /path/to/ascii
2016-03-05 23:08:59 +01:00
--ascii_colors x x x x x x Colors to print the ascii art
--ascii_distro distro Which Distro's ascii art to print
2016-04-29 09:41:21 +02:00
--ascii_logo_size Size of ascii logo.
Supported distros: Arch, Gentoo, Crux, OpenBSD.
--ascii_bold on/off Whether or not to bold the ascii logo.
2016-01-27 12:33:22 +01:00
2016-02-06 00:49:06 +01:00
Stdout:
2016-02-28 01:44:45 +01:00
--stdout info info Launch neofetch in stdout mode which prints the info
2016-02-06 00:49:06 +01:00
in a plain-text format that you can use with
lemonbar etc.
2016-03-05 23:08:59 +01:00
--stdout_separator string String to use as a separator in stdout mode.
2016-02-06 00:49:06 +01:00
Screenshot:
--scrot /path/to/img Take a screenshot, if path is left empty the screen-
shot function will use \$scrot_dir and \$scrot_name.
--scrot_cmd cmd Screenshot program to launch
2016-02-06 00:49:06 +01:00
Other:
--config /path/to/config Specify a path to a custom config file
--config none Launch the script without a config file
--help Print this text and exit
2016-05-30 07:14:16 +02:00
--version Show neofetch version
2016-04-29 09:45:51 +02:00
--test Launch the script with all functions / options enabled.
This should only be used for testing purposes, ie Travis.CI.
-v Display error messages.
-vv Display a verbose log for error reporting.
EOF
exit 1
}
# }}}
# Args {{{
2016-01-06 01:18:02 +01:00
while [ "$1" ]; do
2015-12-30 11:18:17 +01:00
case $1 in
# Info
--os_arch) os_arch="$2" ;;
2016-01-28 02:44:06 +01:00
--osx_buildversion) osx_buildversion="$2" ;;
--osx_codename) osx_codename="$2" ;;
2016-03-15 10:15:24 +01:00
--cpu_cores) cpu_cores="$2" ;;
--speed_type) speed_type="$2" ;;
--kernel_shorthand) kernel_shorthand="$2" ;;
--uptime_shorthand) uptime_shorthand="$2" ;;
--cpu_shorthand) cpu_shorthand="$2" ;;
--gpu_shorthand) gpu_shorthand="$2" ;;
2016-03-18 06:28:26 +01:00
--refresh_rate) refresh_rate="$2" ;;
--gtk_shorthand) gtk_shorthand="$2" ;;
--gtk2) gtk2="$2" ;;
--gtk3) gtk3="$2" ;;
--shell_path) shell_path="$2" ;;
--shell_version) shell_version="$2" ;;
--battery_num) battery_num="$2" ;;
--battery_shorthand) battery_shorthand="$2" ;;
--ip_host) public_ip_host="$2" ;;
--song_shorthand) song_shorthand="$2" ;;
2016-01-30 12:41:58 +01:00
--birthday_shorthand) birthday_shorthand="$2" ;;
--birthday_time) birthday_time="$2" ;;
--birthday_format) birthday_format="$2" ;;
--disable)
for func in "$@"; do
case "$func" in
"--disable") continue ;;
"--"*) return ;;
*) unset -f "get$func" ;;
esac
done
;;
2015-12-30 11:18:17 +01:00
# Text Colors
2016-02-23 06:52:25 +01:00
--colors)
unset colors
for arg in "$2" "$3" "$4" "$5" "$6" "$7"; do
case "$arg" in
"--"*) break ;;
*) colors+=($arg)
esac
done
colors+=(7 7 7 7 7 7)
;;
2015-12-31 01:21:10 +01:00
# Text Formatting
--underline) underline_enabled="$2" ;;
--underline_char) underline_char="$2" ;;
--line_wrap) line_wrap="$2" ;;
--bold) bold="$2" ;;
2015-12-30 11:18:17 +01:00
# Color Blocks
--color_blocks) color_blocks="$2" ;;
2016-06-12 07:51:48 +02:00
--block_range) start="$2"; end="$3" ;;
2016-01-03 09:55:09 +01:00
--block_width) block_width="$2" ;;
--block_height) block_height="$2" ;;
2015-12-30 11:18:17 +01:00
2016-03-03 00:12:21 +01:00
# Progress Bars
2016-04-24 10:30:57 +02:00
--progress_char)
progress_char_elapsed="$2"
progress_char_total="$3"
;;
--progress_border) progress_border="$2" ;;
--progress_length) progress_length="$2" ;;
2016-03-03 00:12:21 +01:00
--progress_colors)
progress_color_elapsed="$2"
progress_color_total="$3"
;;
2016-06-13 12:22:38 +02:00
--cpu_display) cpu_display="$2" ;;
2016-03-12 21:58:46 +01:00
--memory_display) memory_display="$2" ;;
--battery_display) battery_display="$2" ;;
--disk_display) disk_display="$2" ;;
2016-03-03 00:12:21 +01:00
2015-12-30 11:18:17 +01:00
# Image
--image)
image="$2"
case "$2" in "--"* | "") image="ascii" ;; esac
;;
--size) image_size="$2" ;;
--crop_mode) crop_mode="$2" ;;
--crop_offset) crop_offset="$2" ;;
2015-12-30 11:18:17 +01:00
--xoffset) xoffset="$2" ;;
--yoffset) yoffset="$2" ;;
2015-12-31 01:21:10 +01:00
--gap) gap="$2" ;;
--clean)
rm -rf "$thumbnail_dir"
rm -rf "/Library/Caches/neofetch/"
exit
;;
2015-12-30 11:18:17 +01:00
2016-01-27 12:33:22 +01:00
# Ascii
--ascii)
image="ascii"
ascii="$2"
case "$2" in "--"* | "") ascii="distro" ;; esac
;;
--ascii_colors)
unset ascii_colors
for arg in "$2" "$3" "$4" "$5" "$6" "$7"; do
case "$arg" in
"--"*) break ;;
*) ascii_colors+=($arg)
esac
done
ascii_colors+=(7 7 7 7 7 7)
;;
--ascii_distro)
ascii_distro="$2"
case "$2" in "--"* | "") ascii_distro="$distro" ;; esac
;;
2016-01-27 12:33:22 +01:00
--ascii_logo_size) ascii_logo_size="$2" ;;
--ascii_bold) ascii_bold="$2" ;;
# Screenshot
2016-03-18 23:37:29 +01:00
--scrot | -s)
scrot="on"
if [ "$2" ]; then
scrot_name="${2##*/}"
scrot_dir="${2/$scrot_name}"
fi
;;
--scrot_cmd) scrot_cmd="$2" ;;
# Stdout
2016-02-05 14:50:45 +01:00
--stdout)
2016-03-31 13:26:34 +02:00
unset info_color prin clear bar
2016-03-17 06:10:16 +01:00
stdout_mode="on"
config="off"
case "$2" in
2016-03-14 12:31:40 +01:00
"--"* | "") printf "%s\n" "--stdout requires at least one argument"; exit ;;
2016-03-17 06:10:16 +01:00
*) shift; args=("$@"); stdout ;;
esac
2016-02-05 14:50:45 +01:00
;;
2015-12-30 11:18:17 +01:00
# Other
--config)
case "$2" in
"none" | "off") config="off" ;;
*) config_file="$2"; config="on"; getconfig 2>/dev/null ;;
esac
;;
2016-03-26 04:13:02 +01:00
--test)
2016-06-13 12:23:57 +02:00
info=(title underline distro kernel uptime packages shell resolution de wm wmtheme theme icons cpu cpu_usage gpu memory font disk battery song localip publicip users birthday term termfont)
2016-03-26 04:13:02 +01:00
refresh_rate="on"
shell_version="on"
cpu_display="infobar"
memory_display="infobar"
disk_display="infobar"
2016-03-26 04:13:02 +01:00
printinfo () {
2016-06-12 08:18:49 +02:00
if [ "$TRAVIS_OS_NAME" ]; then
2016-03-29 09:25:11 +02:00
info linebreak
info linebreak
fi
2016-03-26 04:13:02 +01:00
for func in "${info[@]}"; do
2016-06-12 06:35:29 +02:00
info "$(tr '[:lower:]' '[:upper:]' <<< "$func")" "$func"
2016-03-26 04:13:02 +01:00
done
2016-03-29 09:25:11 +02:00
2016-03-26 09:12:33 +01:00
info linebreak
info cols
info linebreak
2016-03-26 04:13:02 +01:00
printf "%b%s" "\033[$(tput lines)H"
}
;;
2016-04-24 06:14:35 +02:00
-v) verbose="on" ;;
-vv) set -x; verbose="on" ;;
2015-12-30 11:18:17 +01:00
--help) usage ;;
2016-05-30 07:14:16 +02:00
--version) printf "%s\n" "Neofetch 1.8"; exit ;;
2015-12-30 11:18:17 +01:00
esac
2016-01-06 01:18:02 +01:00
shift
2015-12-30 11:18:17 +01:00
done
# }}}
# Call Functions and Finish Up {{{
2015-12-30 11:18:17 +01:00
# Restore cursor and clear screen on ctrl+c
trap 'printf "\033[?25h"; clear; exit' 2
2016-04-13 07:31:53 +02:00
# Distro detection
getdistro
2016-06-12 04:10:10 +02:00
[ -z "$ascii_distro" ] && ascii_distro="$(trim "$distro")"
2016-04-13 07:31:53 +02:00
# Get colors and bold
bold
2016-02-23 06:52:25 +01:00
colors
2016-01-30 07:44:52 +01:00
if [ "$image" != "off" ]; then
# If the script exits for any reason, unhide the cursor.
trap 'printf "\033[?25h"' EXIT
# Clear the scren
clear
2016-01-31 09:23:31 +01:00
# Hide the cursor
printf "\033[?25l"
2016-01-30 07:44:52 +01:00
2016-03-30 01:20:06 +02:00
# If iterm2 is detected use iterm2 backend.
if [ -n "$ITERM_PROFILE" ]; then
image_backend="iterm2"
2016-06-10 09:58:24 +02:00
2016-06-12 08:18:49 +02:00
elif [ "$(tycat 2>/dev/null)" ]; then
2016-06-10 09:58:24 +02:00
image_backend="tycat"
2016-03-30 01:20:06 +02:00
else
image_backend="w3m"
fi
2016-01-30 07:44:52 +01:00
# Find w3mimgdisplay
[ "$image_backend" == "w3m" ] && \
[ "$image" != "ascii" ] && \
getw3m_img_path
2016-01-30 07:44:52 +01:00
# Get the image
getimage
fi
2015-12-30 11:18:17 +01:00
# Display the image if enabled
if [ "$image" != "off" ] && [ "$image" != "ascii" ]; then
case "$image_backend" in
"w3m")
printf "%b%s\n" "0;1;$xoffset;$yoffset;$width;$height;;;;;$img\n4;\n3;" |\
$w3m_img_path 2>/dev/null || padding="\033[0C"
;;
"iterm2")
printf "%b%s\a\n" "\033]1337;File=width=${width}px;height=${height}px;inline=1:$(base64 < "$img")"
;;
2016-06-10 09:58:24 +02:00
"tycat")
tycat "$img"
;;
esac
fi
2015-12-31 01:21:10 +01:00
2016-01-31 09:23:31 +01:00
# Disable line wrap
[ "$line_wrap" == "off" ] && printf "\033[?7l"
# Move cursor to the top
[ "$image" != "off" ] && printf "\033[0H"
# Print the info
printinfo
if [ "$image" != "off" ]; then
2016-01-31 09:23:31 +01:00
# Get cursor position
2016-03-29 02:11:28 +02:00
info_height="$(stty -echo; IFS=';' read -rdR -t 1 -d c -p $'\033[6n\033[c' ROW COL; printf "%s" "${ROW#*[}"; stty echo)"
2016-06-13 09:29:25 +02:00
# Calculate image height in terminal cells.
2016-06-13 09:25:10 +02:00
lines="$((${width:-1} / ${font_width:-1} / 2 + 3))"
2016-01-31 09:23:31 +01:00
# Set cursor position dynamically based on height of ascii/text.
2016-03-29 13:57:33 +02:00
[ "${lines:-0}" -lt "${info_height:-0}" ] && lines="$info_height"
2016-06-13 09:25:10 +02:00
printf "%b%s" "\033[${lines}H"
fi
# Re-enable line wrap
[ "$line_wrap" == "off" ] && printf "%b%s" "\033[?7h"
# If enabled take a screenshot
2016-01-29 15:07:01 +01:00
if [ "$scrot" == "on" ]; then
takescrot
fi
2016-04-24 06:14:35 +02:00
# Show error messages
2016-04-24 06:27:24 +02:00
if [ "$verbose" == "on" ]; then
2016-06-12 06:35:29 +02:00
printf "%s" "$err"
2016-04-24 06:27:24 +02:00
fi
2016-04-24 06:14:35 +02:00
# }}}