Merge pull request #306 from dylanaraps/sourceconfig

Remove default config from inside script and instead source it from the user config file.
This commit is contained in:
Dylan Araps 2016-08-12 20:48:44 +10:00 committed by GitHub
commit 9ec7bbb421
4 changed files with 157 additions and 508 deletions

View file

@ -11,4 +11,4 @@ before_install:
script: script:
- sudo make install - sudo make install
- time neofetch --test --ascii --config off --ascii_distro travis - time neofetch --ascii --config off --ascii_distro travis -v --test

6
1.8.md
View file

@ -32,6 +32,11 @@ bottom of the window. See [#279](https://github.com/dylanaraps/neofetch/pull/279
- Removed `line_wrap` as having it set to `on` broke the output. - Removed `line_wrap` as having it set to `on` broke the output.
- Minor text fixes. - Minor text fixes.
- Fix issue with incorrect text color when `barinfo` is set. - Fix issue with incorrect text color when `barinfo` is set.
- Fixed various Travis.ci bugs.
- `-v` now shows where the config files were sourced from.
- Removed in-script config in favor of sourcing the default user config.
- Moved commands near the bottom of the script to a new function called `main`.
- Cleanup
### OS ### OS
@ -125,4 +130,5 @@ distro ascii files. See this wiki page that explains the syntax. [Link](https://
- Better `Ubuntu-GNOME` ascii art. **[@hashhar](https://github.com/hashhar)** - Better `Ubuntu-GNOME` ascii art. **[@hashhar](https://github.com/hashhar)**
- Fix a color issue with Debian's ascii logo. - Fix a color issue with Debian's ascii logo.
- Added `--ascii_distro mac` as a shorter way of using the OS X ascii. - Added `--ascii_distro mac` as a shorter way of using the OS X ascii.
- Added missing `$ascii_distro` config option.

View file

@ -345,6 +345,11 @@ xoffset=0
# --ascii 'distro', path/to/ascii # --ascii 'distro', path/to/ascii
ascii="distro" ascii="distro"
# Ascii distro
# Which distro's ascii art to display.
# --ascii_distro 'auto', 'distro_name'
ascii_distro="auto"
# Ascii colors # Ascii colors
# When this is set to distro it will use your # When this is set to distro it will use your
# ditro's colors to color the ascii. # ditro's colors to color the ascii.

652
neofetch
View file

@ -16,420 +16,13 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME}/.config}"
export LC_ALL=C export LC_ALL=C
export LANG=C export LANG=C
# Set no case match.
# Config Options {{{ shopt -s nocasematch
# Info Options {{{
# Info
# See this wiki page for more info:
# https://github.com/dylanaraps/neofetch/wiki/Customizing-Info
printinfo () {
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
# info "CPU Usage" cpu_usage
# 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
}
# Kernel
# Show more kernel info
# --kernel_shorthand on/off
kernel_shorthand="on"
# Distro
# Mac OS X hide/show build version
# --osx_buildversion on/off
osx_buildversion="on"
# 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
os_arch="on"
# 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
# Only works on Linux with cpufreq.
# --speed_type current, min, max, bios,
# scaling_current, scaling_min, scaling_max
speed_type="max"
# CPU Shorthand
# Set shorthand setting
# --cpu_shorthand name, speed, tiny, on, off
cpu_shorthand="off"
# 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
gpu_shorthand="on"
# Resolution
# Display refresh rate next to each monitor
# Unsupported on Windows
# --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"
# Birthday
# Whether to show a long pretty output
# or a shortened one
# NOTE: Long pretty output doesn't work on OpenBSD or NetBSD.
# --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"
# }}}
# Text Colors {{{
# 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)
colors=(distro)
# }}}
# Text Options {{{
# Toggle bold text
# --bold on/off
bold="on"
# Enable/Disable Underline
# --underline on/off
underline_enabled="on"
# Underline character
# --underline_char char
underline_char="-"
# }}}
# 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
block_width=2
# Color block height in lines
# --block_height num
block_height=1
# }}}
# Progress Bars {{{
# Progress bar character
# --progress_char elapsed_char total_char
progress_char_elapsed="="
progress_char_total="-"
# Progress vorder
# --progress_border on/off
progress_border="on"
# Progress bar length in spaces
# Number of chars long to make the progress bars.
# --progress_length num
progress_length="15"
# Progress bar colors
# When set to distro, uses your distro's logo colors
# Takes: num, "distro"
# --progress_colors col col
progress_color_elapsed="distro"
progress_color_total="distro"
# 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.
#
# --cpu_display bar/infobar/barinfo/off
# --memory_display bar/infobar/barinfo/off
# --battery_display bar/infobar/barinfo/off
# --disk_display bar/infobar/barinfo/off
cpu_display="off"
memory_display="off"
battery_display="off"
disk_display="off"
# }}}
# Image Options {{{
# Image Source
# --image wall, ascii, /path/to/img, /path/to/dir/, off
image="wall"
# Thumbnail directory
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"
# Crop offset
# Only affects normal mode.
# --crop_offset northwest/north/northeast/west/center
# east/southwest/south/southeast
crop_offset="center"
# Image size
# The image is half the terminal width by default.
# --size auto, 00px, 00%, none
image_size="auto"
# Right gap between image and text
# --gap num
gap=2
# Image offsets
# --xoffset px
# --yoffset px
yoffset=0
xoffset=0
# }}}
# 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"
# 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)
# 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"
# }}}
# Scrot Options {{{
# Whether or not to always take a screenshot
# You can manually take a screenshot with "--scrot" or "-s"
scrot="off"
# Screenshot program to launch
# --scrot_cmd
scrot_cmd="scrot -c -d 3"
# Scrot dir
# Where to save the screenshots
# --scrot_dir /path/to/screenshot/folder
scrot_dir="$HOME/Pictures/"
# Scrot filename
# What to name the screenshots
# --scrot_name str
scrot_name="neofetch-$(date +%F-%T).png"
# }}}
# Stdout options {{{
# Separator for stdout mode
# --stdout_separator string
stdout_separator=" "
# }}}
# Config Options {{{
# Enable/Disable config file
# --config off, none
config="on"
# Path to custom config file location
# --config path/to/config
config_file="${XDG_CONFIG_HOME:-${HOME}/.config}/neofetch/config"
# }}}
# }}}
# Gather Info {{{ # Gather Info {{{
# Set no case match.
shopt -s nocasematch
# Operating System {{{ # Operating System {{{
case "$(uname)" in case "$(uname)" in
@ -2887,9 +2480,20 @@ trim() {
# Other {{{ # Other {{{
# Error {{{
err () {
err+="$(color 1)[!]$(color fg) $1
"
}
# }}}
# Get script directory {{{ # Get script directory {{{
getscriptdir () { getscriptdir () {
[ "$script_dir" ] && return
# Use $0 to get the script's physical path. # Use $0 to get the script's physical path.
cd "${0%/*}" || exit cd "${0%/*}" || exit
script_dir="${0##*/}" script_dir="${0##*/}"
@ -2907,13 +2511,36 @@ getscriptdir () {
# }}} # }}}
# Source default config {{{
getdefaultconfig () {
if [ -f "/usr/share/neofetch/config" ]; then
default_config="/usr/share/neofetch/config"
elif [ -f "/usr/local/share/neofetch/config" ]; then
default_config="/usr/local/share/neofetch/config"
else
getscriptdir
default_config="${script_dir}/config/config"
fi
if source "$default_config"; then
err "Sourced default config ($default_config)"
else
err "Default config not found, continuing..."
fi
}
# }}}
# Source Config {{{ # Source Config {{{
# Check for $config_file first getuserconfig () {
getconfig () {
# Check $config_file # Check $config_file
if [ -f "$config_file" ]; then if [ -f "$config_file" ]; then
source "$config_file" source "$config_file"
err "Sourced user config ($config_file)"
return return
fi fi
mkdir -p "$XDG_CONFIG_HOME/neofetch/" mkdir -p "$XDG_CONFIG_HOME/neofetch/"
@ -2921,22 +2548,25 @@ getconfig () {
# Check $XDG_CONFIG_HOME/neofetch and create the # Check $XDG_CONFIG_HOME/neofetch and create the
# dir/files if they don't exist. # dir/files if they don't exist.
if [ -f "$XDG_CONFIG_HOME/neofetch/config" ]; then if [ -f "$XDG_CONFIG_HOME/neofetch/config" ]; then
source "$XDG_CONFIG_HOME/neofetch/config" config_file="$XDG_CONFIG_HOME/neofetch/config"
elif [ -f "/usr/share/neofetch/config" ]; then elif [ -f "/usr/share/neofetch/config" ]; then
cp "/usr/share/neofetch/config" "$XDG_CONFIG_HOME/neofetch" cp "/usr/share/neofetch/config" "$XDG_CONFIG_HOME/neofetch"
source "$XDG_CONFIG_HOME/neofetch/config" config_file="$XDG_CONFIG_HOME/neofetch/config"
elif [ -f "/usr/local/share/neofetch/config" ]; then elif [ -f "/usr/local/share/neofetch/config" ]; then
cp "/usr/local/share/neofetch/config" "$XDG_CONFIG_HOME/neofetch" cp "/usr/local/share/neofetch/config" "$XDG_CONFIG_HOME/neofetch"
source "$XDG_CONFIG_HOME/neofetch/config" config_file="$XDG_CONFIG_HOME/neofetch/config"
else else
getscriptdir getscriptdir
cp "$script_dir/config/config" "$XDG_CONFIG_HOME/neofetch" cp "$script_dir/config/config" "$XDG_CONFIG_HOME/neofetch"
source "$XDG_CONFIG_HOME/neofetch/config" config_file="$XDG_CONFIG_HOME/neofetch/config"
fi fi
source "$config_file"
err "Sourced user config ($config_file)"
} }
# Check the commandline flags early for '--config none/off' # Check the commandline flags early for '--config none/off'
@ -2946,7 +2576,10 @@ case "$@" in
config="off" config="off"
;; ;;
esac esac
[ "$config" == "on" ] && getconfig 2>/dev/null
getdefaultconfig 2>/dev/null
[ "${config:-on}" == "on" ] && getuserconfig 2>/dev/null
# }}} # }}}
@ -3003,14 +2636,6 @@ kdeconfigdir () {
# }}} # }}}
# Error {{{
err () {
err+="$(color 1)[!]$(color fg) $1 \n"
}
# }}}
# }}} # }}}
@ -3299,17 +2924,17 @@ while [ "$1" ]; do
--config) --config)
case "$2" in case "$2" in
"none" | "off") config="off" ;; "none" | "off") config="off" ;;
*) config_file="$2"; config="on"; getconfig 2>/dev/null ;; *) config_file="$2"; config="on"; getuserconfig 2>/dev/null ;;
esac esac
;; ;;
--test) --test)
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) 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)
refresh_rate="on" readonly refresh_rate="on"
shell_version="on" readonly shell_version="on"
cpu_display="infobar" readonly cpu_display="infobar"
memory_display="infobar" readonly memory_display="infobar"
disk_display="infobar" readonly disk_display="infobar"
printinfo () { printinfo () {
if [ "$TRAVIS_OS_NAME" ]; then if [ "$TRAVIS_OS_NAME" ]; then
@ -3326,6 +2951,10 @@ while [ "$1" ]; do
info linebreak info linebreak
printf "%b%s" "\033[$(tput lines)H" printf "%b%s" "\033[$(tput lines)H"
} }
# Set the test func to readonly so a config source
# doesn't overwrite it.
readonly -f printinfo
;; ;;
-v) verbose="on" ;; -v) verbose="on" ;;
@ -3343,105 +2972,114 @@ done
# Call Functions and Finish Up {{{ # Call Functions and Finish Up {{{
main () {
# Restore cursor and clear screen on ctrl+c
trap 'printf "\033[?25h"; clear; exit' 2
# Restore cursor and clear screen on ctrl+c # If the script exits for any reason, unhide the cursor.
trap 'printf "\033[?25h"; clear; exit' 2 trap 'printf "\033[?25h"' EXIT
# Distro detection # Distro detection
getdistro getdistro
[ -z "$ascii_distro" ] && ascii_distro="$(trim "$distro")" case "${ascii_distro:-auto}" in
"auto") ascii_distro="$(trim "$distro")" ;;
esac
# Get colors and bold # Get colors and bold
bold bold
colors colors
# If the script exits for any reason, unhide the cursor. # Clear the scren
trap 'printf "\033[?25h"' EXIT clear
# Clear the scren # Hide the cursor
clear printf "\033[?25l"
# Hide the cursor # Images {{{
printf "\033[?25l"
if [ "$image" != "off" ]; then # Get the image src
# If iterm2 is detected use iterm2 backend. if [ "$image" != "off" ]; then
if [ -n "$ITERM_PROFILE" ]; then # Set the image backend
image_backend="iterm2" if [ -n "$ITERM_PROFILE" ]; then
image_backend="iterm2"
elif [ "$(tycat 2>/dev/null)" ]; then elif [ "$(tycat 2>/dev/null)" ]; then
image_backend="tycat" image_backend="tycat"
else else
image_backend="w3m" image_backend="w3m"
fi
# Find w3mimgdisplay
[ "$image_backend" == "w3m" ] && \
[ "$image" != "ascii" ] && \
getw3m_img_path
# Get the image
getimage
fi fi
# Find w3mimgdisplay # Display the image if enabled
[ "$image_backend" == "w3m" ] && \ if [ "$image" != "off" ] && [ "$image" != "ascii" ]; then
[ "$image" != "ascii" ] && \ case "$image_backend" in
getw3m_img_path "w3m")
printf "%b%s\n" "0;1;$xoffset;$yoffset;$width;$height;;;;;$img\n4;\n3;" |\
$w3m_img_path 2>/dev/null || padding="\033[0C"
;;
# Get the image "iterm2")
getimage printf "%b%s\a\n" "\033]1337;File=width=${width}px;height=${height}px;inline=1:$(base64 < "$img")"
fi ;;
# Display the image if enabled "tycat")
if [ "$image" != "off" ] && [ "$image" != "ascii" ]; then tycat "$img"
case "$image_backend" in ;;
"w3m") esac
printf "%b%s\n" "0;1;$xoffset;$yoffset;$width;$height;;;;;$img\n4;\n3;" |\ fi
$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")"
;;
"tycat") # Disable line wrap
tycat "$img" printf "\033[?7l"
;;
esac
fi
# Disable line wrap # Move cursor to the top
printf "\033[?7l" [ "$image" != "off" ] && printf "\033[0H"
# Move cursor to the top # Print the info
[ "$image" != "off" ] && printf "\033[0H" printinfo
# Print the info # Dynamic prompt location {{{
printinfo
# Dynamic prompt location {{{ # Get cursor position
info_height="$(stty -echo; IFS=';' read -rdR -t 1 -d c -p $'\033[6n\033[c' ROW COL; printf "%s" "${ROW#*[}"; stty echo)"
# Get cursor position # Calculate image height in terminal cells.
info_height="$(stty -echo; IFS=';' read -rdR -t 1 -d c -p $'\033[6n\033[c' ROW COL; printf "%s" "${ROW#*[}"; stty echo)" # The '+ 3' adds a gap between the prompt and the content.
[ "$image" != "ascii" ] && [ "$image" != "off" ] && \
lines="$((${height:-1} / ${font_height:-1} + 3))"
# Calculate image height in terminal cells. # If the info is higher than the ascii/image place the prompt
# The '+ 3' adds a gap between the prompt and the content. # based on the info height instead of the ascii/image height.
[ "$image" != "ascii" ] && [ "$image" != "off" ] && \ [ "${lines:-0}" -lt "${info_height:-0}" ] && lines="$info_height"
lines="$((${height:-1} / ${font_height:-1} + 3))"
# If the info is higher than the ascii/image place the prompt # Set the prompt location
# based on the info height instead of the ascii/image height. [ "$image" != "off" ] && printf "%b%s" "\033[${lines:-0}H"
[ "${lines:-0}" -lt "${info_height:-0}" ] && lines="$info_height"
# Set the prompt location # }}}
[ "$image" != "off" ] && printf "%b%s" "\033[${lines:-0}H"
# Re-enable line wrap
# }}} printf "%b%s" "\033[?7h"
# Re-enable line wrap # If enabled take a screenshot
printf "%b%s" "\033[?7h" [ "$scrot" == "on" ] && takescrot
# If enabled take a screenshot # Show error messages
if [ "$scrot" == "on" ]; then [ "$verbose" == "on" ] && printf "%s" "$err"
takescrot
fi # Reset exit status of the tests above.
printf "%s"
# Show error messages }
if [ "$verbose" == "on" ]; then
printf "%s" "$err" main
fi
# }}} # }}}