diff --git a/.travis.yml b/.travis.yml index 0be80158..8636f9aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,4 +11,4 @@ before_install: script: - sudo make install - - time neofetch --test --ascii --config off --ascii_distro travis + - time neofetch --ascii --config off --ascii_distro travis -v --test diff --git a/1.8.md b/1.8.md index 83cddd82..7b9a0e4a 100644 --- a/1.8.md +++ b/1.8.md @@ -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. - Minor text fixes. - 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 @@ -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)** - Fix a color issue with Debian's ascii logo. - Added `--ascii_distro mac` as a shorter way of using the OS X ascii. +- Added missing `$ascii_distro` config option. diff --git a/config/config b/config/config index 01c20cb3..2425557e 100644 --- a/config/config +++ b/config/config @@ -345,6 +345,11 @@ xoffset=0 # --ascii 'distro', path/to/ascii ascii="distro" +# Ascii distro +# Which distro's ascii art to display. +# --ascii_distro 'auto', 'distro_name' +ascii_distro="auto" + # Ascii colors # When this is set to distro it will use your # ditro's colors to color the ascii. diff --git a/neofetch b/neofetch index 4713f66e..1289ae45 100755 --- a/neofetch +++ b/neofetch @@ -16,420 +16,13 @@ XDG_CONFIG_HOME="${XDG_CONFIG_HOME:-${HOME}/.config}" export LC_ALL=C export LANG=C - -# Config Options {{{ - - -# 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" - - -# }}} - - -# }}} +# Set no case match. +shopt -s nocasematch # Gather Info {{{ -# Set no case match. -shopt -s nocasematch - - # Operating System {{{ case "$(uname)" in @@ -2887,9 +2480,20 @@ trim() { # Other {{{ +# Error {{{ + +err () { + err+="$(color 1)[!]$(color fg) $1 +" +} + +# }}} + # Get script directory {{{ getscriptdir () { + [ "$script_dir" ] && return + # Use $0 to get the script's physical path. cd "${0%/*}" || exit 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 {{{ -# Check for $config_file first -getconfig () { +getuserconfig () { # Check $config_file if [ -f "$config_file" ]; then source "$config_file" + err "Sourced user config ($config_file)" return fi mkdir -p "$XDG_CONFIG_HOME/neofetch/" @@ -2921,22 +2548,25 @@ getconfig () { # Check $XDG_CONFIG_HOME/neofetch and create the # dir/files if they don't exist. 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 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 cp "/usr/local/share/neofetch/config" "$XDG_CONFIG_HOME/neofetch" - source "$XDG_CONFIG_HOME/neofetch/config" + config_file="$XDG_CONFIG_HOME/neofetch/config" else getscriptdir cp "$script_dir/config/config" "$XDG_CONFIG_HOME/neofetch" - source "$XDG_CONFIG_HOME/neofetch/config" + config_file="$XDG_CONFIG_HOME/neofetch/config" fi + + source "$config_file" + err "Sourced user config ($config_file)" } # Check the commandline flags early for '--config none/off' @@ -2946,7 +2576,10 @@ case "$@" in config="off" ;; 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) case "$2" in "none" | "off") config="off" ;; - *) config_file="$2"; config="on"; getconfig 2>/dev/null ;; + *) config_file="$2"; config="on"; getuserconfig 2>/dev/null ;; esac ;; --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) - refresh_rate="on" - shell_version="on" - cpu_display="infobar" - memory_display="infobar" - disk_display="infobar" + readonly refresh_rate="on" + readonly shell_version="on" + readonly cpu_display="infobar" + readonly memory_display="infobar" + readonly disk_display="infobar" printinfo () { if [ "$TRAVIS_OS_NAME" ]; then @@ -3326,6 +2951,10 @@ while [ "$1" ]; do info linebreak 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" ;; @@ -3343,105 +2972,114 @@ done # 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 -trap 'printf "\033[?25h"; clear; exit' 2 + # If the script exits for any reason, unhide the cursor. + trap 'printf "\033[?25h"' EXIT -# Distro detection -getdistro -[ -z "$ascii_distro" ] && ascii_distro="$(trim "$distro")" + # Distro detection + getdistro + case "${ascii_distro:-auto}" in + "auto") ascii_distro="$(trim "$distro")" ;; + esac -# Get colors and bold -bold -colors + # Get colors and bold + bold + colors -# If the script exits for any reason, unhide the cursor. -trap 'printf "\033[?25h"' EXIT + # Clear the scren + clear -# Clear the scren -clear + # Hide the cursor + printf "\033[?25l" -# Hide the cursor -printf "\033[?25l" + # Images {{{ -if [ "$image" != "off" ]; then - # If iterm2 is detected use iterm2 backend. - if [ -n "$ITERM_PROFILE" ]; then - image_backend="iterm2" + # Get the image src + if [ "$image" != "off" ]; then + # Set the image backend + if [ -n "$ITERM_PROFILE" ]; then + image_backend="iterm2" - elif [ "$(tycat 2>/dev/null)" ]; then - image_backend="tycat" + elif [ "$(tycat 2>/dev/null)" ]; then + image_backend="tycat" - else - image_backend="w3m" + else + image_backend="w3m" + fi + + # Find w3mimgdisplay + [ "$image_backend" == "w3m" ] && \ + [ "$image" != "ascii" ] && \ + getw3m_img_path + + # Get the image + getimage fi - # Find w3mimgdisplay - [ "$image_backend" == "w3m" ] && \ - [ "$image" != "ascii" ] && \ - getw3m_img_path + # 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" + ;; - # Get the image - getimage -fi + "iterm2") + printf "%b%s\a\n" "\033]1337;File=width=${width}px;height=${height}px;inline=1:$(base64 < "$img")" + ;; -# 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" - ;; + "tycat") + tycat "$img" + ;; + esac + fi - "iterm2") - printf "%b%s\a\n" "\033]1337;File=width=${width}px;height=${height}px;inline=1:$(base64 < "$img")" - ;; + # }}} - "tycat") - tycat "$img" - ;; - esac -fi + # Disable line wrap + printf "\033[?7l" -# Disable line wrap -printf "\033[?7l" + # Move cursor to the top + [ "$image" != "off" ] && printf "\033[0H" -# Move cursor to the top -[ "$image" != "off" ] && printf "\033[0H" + # Print the info + printinfo -# Print the info -printinfo + # Dynamic prompt location {{{ -# 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 -info_height="$(stty -echo; IFS=';' read -rdR -t 1 -d c -p $'\033[6n\033[c' ROW COL; printf "%s" "${ROW#*[}"; stty echo)" + # Calculate image height in terminal cells. + # 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. -# The '+ 3' adds a gap between the prompt and the content. -[ "$image" != "ascii" ] && [ "$image" != "off" ] && \ - lines="$((${height:-1} / ${font_height:-1} + 3))" + # If the info is higher than the ascii/image place the prompt + # based on the info height instead of the ascii/image height. + [ "${lines:-0}" -lt "${info_height:-0}" ] && lines="$info_height" -# If the info is higher than the ascii/image place the prompt -# based on the info height instead of the ascii/image height. -[ "${lines:-0}" -lt "${info_height:-0}" ] && lines="$info_height" + # Set the prompt location + [ "$image" != "off" ] && printf "%b%s" "\033[${lines:-0}H" -# Set the prompt location -[ "$image" != "off" ] && printf "%b%s" "\033[${lines:-0}H" - -# }}} - -# Re-enable line wrap -printf "%b%s" "\033[?7h" - -# If enabled take a screenshot -if [ "$scrot" == "on" ]; then - takescrot -fi - -# Show error messages -if [ "$verbose" == "on" ]; then - printf "%s" "$err" -fi + # }}} + + # Re-enable line wrap + printf "%b%s" "\033[?7h" + + # If enabled take a screenshot + [ "$scrot" == "on" ] && takescrot + + # Show error messages + [ "$verbose" == "on" ] && printf "%s" "$err" + + # Reset exit status of the tests above. + printf "%s" +} + +main # }}}