initial commit
This commit is contained in:
commit
90130a7e07
2 changed files with 547 additions and 0 deletions
125
Readme.md
Normal file
125
Readme.md
Normal file
|
@ -0,0 +1,125 @@
|
|||
# fetch.sh
|
||||
|
||||
This is the home of my fetch script! This script gathers info <br\>
|
||||
about your system and prints it to the terminal.
|
||||
|
||||
I've spent the past few days rewriting this and it now supports <br\>
|
||||
other distros as well as a ton of new features and bug fixes.
|
||||
|
||||
If you're having any issues or have any ideas, please open an issue! <br\>
|
||||
I can't test on many other distros and I want this to work <br\>
|
||||
for as many people as possible.
|
||||
|
||||
![1](https://sr.ht/5aNV.png)
|
||||
|
||||
|
||||
## Dependencies
|
||||
|
||||
These are the script's dependencies:
|
||||
|
||||
- Displaying Images: w3m
|
||||
- Image Cropping: ImageMagick
|
||||
- Display Wallpaper: feh
|
||||
- Current Song: mpc
|
||||
|
||||
These are the script's optional dependencies
|
||||
- Window Manager Detection: wmctrl
|
||||
- You can manually set this at launch with:
|
||||
|
||||
```scrot.sh --winman string```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
usage: scrot.sh [--colors 1 2 4 5] [--kernel "$(uname -rs)"]
|
||||
|
||||
Info:
|
||||
--title string Change the title at the top
|
||||
--distro string/cmd Manually set the distro
|
||||
--kernel string/cmd Manually set the kernel
|
||||
--uptime string/cmd Manually set the uptime
|
||||
--packages string/cmd Manually set the package count
|
||||
--shell string/cmd Manually set the shell
|
||||
--winman string/cmd Manually set the window manager
|
||||
--cpu string/cmd Manually set the cpu name
|
||||
--memory string/cmd Manually set the memory
|
||||
--speed string/cmd Manually set the cpu speed
|
||||
--song string/cmd Manually set the current song
|
||||
|
||||
Text Colors:
|
||||
--colors 1 2 3 4 Change the color of text
|
||||
(title, subtitle, colon, info)
|
||||
--titlecol num Change the color of the title
|
||||
--subtitlecol num Change the color of the subtitle
|
||||
--coloncol num Change the color of the colons
|
||||
--infocol num Change the color of the info
|
||||
|
||||
Color Blocks:
|
||||
--printcols start end Range of colors to print as blocks
|
||||
--nopal Disable the color blocks
|
||||
|
||||
Image:
|
||||
--image Image to display with the script
|
||||
The image gets priority over other
|
||||
images: (wallpaper, \$img)
|
||||
--size px Change the size of the image
|
||||
--padding How many spaces to pad the text
|
||||
to the right
|
||||
--xoffset px How close the image will be
|
||||
to the left edge of the window
|
||||
--yoffset px How close the image will be
|
||||
to the top edge of the window
|
||||
--noimg Disable all images
|
||||
--nowall Disable the wallpaper function
|
||||
and fallback to \$img
|
||||
--clean Remove all cropped images
|
||||
|
||||
Other:
|
||||
--help Print this text and exit
|
||||
|
||||
|
||||
## TODO
|
||||
|
||||
Here's what's on my todo list
|
||||
|
||||
- Add an easy way to define info prefixes at launch.
|
||||
- Find a reliable way to set the text padding dynamically. I can get this to
|
||||
<br/> work based on font width but there's no reliable way of getting
|
||||
<br/> fontwidth for every terminal afaik.
|
||||
- Find a quick and reliable way to get the current window manager. I had a
|
||||
<br/> solution that used an array of processes and pgrep but it doubled the
|
||||
<br/> startup time for the script.
|
||||
|
||||
If you've got any ideas on how to solve these problems, let me know!
|
||||
|
||||
|
||||
## Customization
|
||||
|
||||
I launch fetch using a shell function and a ton of flags. Here's how it looks:
|
||||
|
||||
```sh
|
||||
fetch () {
|
||||
fetch.sh \
|
||||
--printcols 1 7 \
|
||||
--cpu "AMD FX-6300" \
|
||||
--song "$(mpc current | cut -c 1-30)" \
|
||||
--uptime "$(uptime -p | sed -e 's/minutes/mins/')" \
|
||||
--title "dylan's pc" \
|
||||
$@
|
||||
}
|
||||
```
|
||||
|
||||
Notice how you can even pass commands? This allows you to easily use custom
|
||||
<br/> commands or even just bare strings to change the info.
|
||||
|
||||
|
||||
## Screenshots
|
||||
|
||||
#### The color script is now builtin.
|
||||
![2](https://sr.ht/Z9hZ.png)
|
||||
|
||||
#### You can now customize the color of everything.
|
||||
![3](https://sr.ht/hy7m.png)
|
||||
|
||||
#### You can now disable all images with a flag.
|
||||
![4](https://sr.ht/zujR.png)
|
422
fetch.sh
Executable file
422
fetch.sh
Executable file
|
@ -0,0 +1,422 @@
|
|||
#!/usr/bin/env bash
|
||||
# Fetch info about your system
|
||||
#
|
||||
# Dependencies:
|
||||
# Displaying Images: w3m
|
||||
# Image Cropping: ImageMagick
|
||||
# Wallpaper Display: feh
|
||||
# Window Manager Detection: wmctrl
|
||||
# Current Song: mpc
|
||||
#
|
||||
# Created by Dylan Araps
|
||||
# https://github.com/dylanaraps/dotfiles
|
||||
|
||||
|
||||
# Info Prefixes {{{
|
||||
# The titles that come before the info (Ram:, Cpu:, Uptime:)
|
||||
# TODO: Add an easy way to specify these at launch.
|
||||
|
||||
|
||||
title_os="OS"
|
||||
title_kernel="Kernel"
|
||||
title_uptime="Uptime"
|
||||
title_packages="Packages"
|
||||
title_shell="Shell"
|
||||
title_windowmanager="Window Manager"
|
||||
title_cpu="Cpu"
|
||||
title_memory="Memory"
|
||||
title_song="Song"
|
||||
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
# Text Formatting {{{
|
||||
|
||||
|
||||
# Set to "" or comment this line to disable bold text
|
||||
bold="\033[1m"
|
||||
|
||||
# This is a simple function to make the vars below easier to edit.
|
||||
color () {
|
||||
echo "\033[38;5;${1}m"
|
||||
}
|
||||
|
||||
# Default colors
|
||||
# Colors can be defined at launch with:
|
||||
# "--titlecol 1, --subtitlecol 2, --coloncol 3, --infocol 4"
|
||||
# Or the shorthand "-c/--color 1 2 3 4"
|
||||
# Or by editing them below.
|
||||
title_color=$(color 7)
|
||||
subtitle_color=$(color 1)
|
||||
colon_color=$(color 7) # Also changes underline color
|
||||
info_color=$(color 7)
|
||||
|
||||
# Reset formatting
|
||||
# Removing this line will fuck up the text formatting
|
||||
clear="\033[0m"
|
||||
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
# Custom Image {{{
|
||||
|
||||
# Enable or disable the use of images (Disable images at launch with "--noimg")
|
||||
enableimages=1
|
||||
|
||||
# If 1, fetch will use a cropped version of your wallpaper as the image
|
||||
# (Disable this at launch with "--nowall")
|
||||
# NOTE: This is only compatible with feh, I can add support for more
|
||||
# wallpaper setters but you'll need to show me a way to get the current
|
||||
# wallpaper from the commandline.
|
||||
usewall=1
|
||||
|
||||
# The image to use if usewall=0. There's also the launch flags "-i" + "--image"
|
||||
# to set a custom image at launch.
|
||||
img="$HOME/Pictures/avatars/gon.png"
|
||||
|
||||
# Image size/offset
|
||||
# (Customizable at launch with these flags: --size 128 --xoffset 0 --yoffset 0")
|
||||
imgsize=128
|
||||
yoffset=0
|
||||
xoffset=0
|
||||
|
||||
# Padding to align text to the right
|
||||
# TODO: Find a reliable way to set this dynamically. I can get
|
||||
# this to work based on font width but there's no reliable way
|
||||
# of getting fontwidth for every terminal.
|
||||
pad=" "
|
||||
|
||||
# Directory to store cropped images
|
||||
imgtempdir="$HOME/.fetchimages"
|
||||
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
# Get Info {{{
|
||||
# Commands to use when gathering info
|
||||
|
||||
|
||||
# Title (Configurable with "-t" and "--title" at launch)
|
||||
# To use the usual "user@hostname" change the line below to:
|
||||
title="$(whoami)@$(hostname)"
|
||||
|
||||
# Operating System (Configurable with "-O" and "--distro" at launch)
|
||||
# You can manually set this if the command below doesn't work for you.
|
||||
os=$(awk '/^NAME=/' /etc/*ease | sed -n 's/^NAME=//p' | tr -d '"')
|
||||
|
||||
# Linux kernel name/version (Configurable with "-K" and "--kernel" at launch)
|
||||
kernel=$(uname -r)
|
||||
|
||||
# System Uptime (Configurable with "-U" and "--uptime" at launch)
|
||||
uptime=$(uptime -p)
|
||||
|
||||
# Total number of packages (Configurable with "-P" and "--packages" at launch)
|
||||
# If your package manager can't be found open an issue on my github repo.
|
||||
# (Link is at the top)
|
||||
getpackages () {
|
||||
case $os in
|
||||
'Arch Linux'|'Parabola GNU/Linux-libre'|'Manjaro'|'Antergos') \
|
||||
packages=$(pacman -Q | wc -l) ;;
|
||||
'Ubuntu'|'Mint'|'Debian'|'Kali Linux') \
|
||||
packages=$(dpkg --get-selections | grep -v deinstall$ | wc -l) ;;
|
||||
'Slackware') \
|
||||
packages=$(ls -1 /var/log/packages | wc -l) ;;
|
||||
'Gentoo'|'Funtoo') \
|
||||
packages=$(ls -d /var/db/pkg/*/* | wc -l) ;;
|
||||
'Fedora'|'openSUSE'|'Red Hat Enterprise Linux'|'CentOS') \
|
||||
packages=$(rpm -qa | wc -l) ;;
|
||||
'CRUX') \
|
||||
packages=$(pkginfo -i | wc -l) ;;
|
||||
*) packages="unknown" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
# Shell (Configurable with "-s" and "--shell" at launch)
|
||||
shell="$SHELL"
|
||||
|
||||
# Window manager (Configurable with "-W" and "--windowmanager" at launch)
|
||||
# (depends on wmctrl)
|
||||
# This can be detected without wmctrl by using an array of window manager
|
||||
# process names and pgrep but it's really slow.
|
||||
# (Doubles script startup time in some cases).
|
||||
# If you don't want to install wmctrl you can either edit the var below
|
||||
# or run the script with: --windowmanager wmname
|
||||
# windowmanager="openbox"
|
||||
windowmanager=$(wmctrl -m | awk '/Name:/ {printf $2}')
|
||||
|
||||
# Processor (Configurable with "-C", "-S" and "--cpu", "--speed" at launch)
|
||||
cpu="$(awk 'BEGIN{FS=":"} /model name/ {print $2; exit}' /proc/cpuinfo |\
|
||||
awk 'BEGIN{FS="@"; OFS="\n"} { print $1; exit }' |\
|
||||
sed -e 's/\((tm)\|(TM)\)//' -e 's/\((R)\|(r)\)//' -e 's/^\ //')"
|
||||
speed="$(lscpu | awk '/CPU MHz:/ {printf "scale=1; " $3 " / 1000 \n"}' | bc -l)"
|
||||
|
||||
# Memory (Configurable with "-M" and "--memory" at launch)
|
||||
# Print the total amount of ram and amount of ram in use
|
||||
memory=$(free -m | awk '/Mem:/ {printf $3 "MB / " $2 "MB"}')
|
||||
|
||||
# Currently playing song/artist (Configurable with "-m" and "--song" at launch)
|
||||
song=$(mpc current)
|
||||
|
||||
# Print terminal colors in a line
|
||||
# (Configurable with "--printcols start end" at launch)
|
||||
# Start/End are vars for the range of colors to print
|
||||
# The default values below print 8 colors in total.
|
||||
start=0
|
||||
end=7
|
||||
|
||||
# Print the color blocks by default.
|
||||
printcols=1
|
||||
|
||||
printcols () {
|
||||
echo
|
||||
echo
|
||||
|
||||
while [ "$start" -le "$end" ]; do
|
||||
echo -n "\033[48;5;${start}m "
|
||||
start=$((start + 1))
|
||||
|
||||
# Split the blocks at 8 colors
|
||||
[ $end -ge 9 ] && [ $start -eq 8 ] && echo -e "\033[0m"
|
||||
done
|
||||
|
||||
# Vertically center colors if they're one row tall
|
||||
[ $end -le 8 ] && echo
|
||||
|
||||
# Clear formatting
|
||||
echo -n "$clear"
|
||||
}
|
||||
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
# Usage {{{
|
||||
|
||||
|
||||
usage () {
|
||||
echo
|
||||
echo "usage: ${0##*/} [--colors 1 2 4 5] [--kernel \"\$(uname -rs)\"]"
|
||||
echo
|
||||
echo " Info:"
|
||||
echo " --title string Change the title at the top"
|
||||
echo " --distro string/cmd Manually set the distro"
|
||||
echo " --kernel string/cmd Manually set the kernel"
|
||||
echo " --uptime string/cmd Manually set the uptime"
|
||||
echo " --packages string/cmd Manually set the package count"
|
||||
echo " --shell string/cmd Manually set the shell"
|
||||
echo " --winman string/cmd Manually set the window manager"
|
||||
echo " --cpu string/cmd Manually set the cpu name"
|
||||
echo " --memory string/cmd Manually set the memory"
|
||||
echo " --speed string/cmd Manually set the cpu speed"
|
||||
echo " --song string/cmd Manually set the current song"
|
||||
echo
|
||||
echo " Text Colors:"
|
||||
echo " --colors 1 2 3 4 Change the color of text"
|
||||
echo " (title, subtitle, colon, info)"
|
||||
echo " --titlecol num Change the color of the title"
|
||||
echo " --subtitlecol num Change the color of the subtitle"
|
||||
echo " --coloncol num Change the color of the colons"
|
||||
echo " --infocol num Change the color of the info"
|
||||
echo
|
||||
echo " Color Blocks:"
|
||||
echo " --printcols start end Range of colors to print as blocks"
|
||||
echo " --nopal Disable the color blocks"
|
||||
echo
|
||||
echo " Image:"
|
||||
echo " --image Image to display with the script"
|
||||
echo " The image gets priority over other"
|
||||
echo " images: (wallpaper, \$img)"
|
||||
echo " --size px Change the size of the image"
|
||||
echo " --padding How many spaces to pad the text"
|
||||
echo " to the right"
|
||||
echo " --xoffset px How close the image will be "
|
||||
echo " to the left edge of the window"
|
||||
echo " --yoffset px How close the image will be "
|
||||
echo " to the top edge of the window"
|
||||
echo " --noimg Disable all images"
|
||||
echo " --nowall Disable the wallpaper function"
|
||||
echo " and fallback to \$img"
|
||||
echo " --clean Remove all cropped images"
|
||||
echo
|
||||
echo " Other:"
|
||||
echo " --help Print this text and exit"
|
||||
echo
|
||||
exit 1
|
||||
}
|
||||
|
||||
# }}}
|
||||
|
||||
# Args {{{
|
||||
|
||||
|
||||
# Loop index
|
||||
index=0
|
||||
|
||||
# Args
|
||||
args=$@
|
||||
|
||||
for argument in $args; do
|
||||
index=$((index + 1))
|
||||
|
||||
case $1 in
|
||||
# Info
|
||||
--title) title="$2" ;;
|
||||
--distro) os="$2" ;;
|
||||
--kernel) kernel="$2" ;;
|
||||
--uptime) uptime="$2" ;;
|
||||
--packages) packages="$2" ;;
|
||||
--shell) shell="$2" ;;
|
||||
--winman) windowmanager="$2" ;;
|
||||
--cpu) cpu="$2" ;;
|
||||
--speed) speed="$2" ;;
|
||||
--memory) memory="$2" ;;
|
||||
--song) song="$2" ;;
|
||||
|
||||
# Text Colors
|
||||
--colors) title_color="\033[38;5;${2}m"; \
|
||||
[ ! -z $3 ] && subtitle_color="\033[38;5;${3}m"; \
|
||||
[ ! -z $4 ] && colon_color="\033[38;5;${4}m"; \
|
||||
[ ! -z $5 ] && info_color="\033[38;5;${5}m" ;;
|
||||
--titlecol) title_color="\033[38;5;${2}m" ;;
|
||||
--subtitlecol) subtitle_color="\033[38;5;${2}m" ;;
|
||||
--coloncol) colon_color="\033[38;5;${2}m" ;;
|
||||
--infocol) info_color="\033[38;5;${2}m" ;;
|
||||
|
||||
# Color Blocks
|
||||
--printcols) start=$2; end=$3 ;;
|
||||
--nopal) printcols=0 ;;
|
||||
|
||||
# Image
|
||||
--image) usewall=0; img="$2" ;;
|
||||
--size) imgsize="$2" ;;
|
||||
--padding) pad="$2" ;;
|
||||
--xoffset) xoffset="$2" ;;
|
||||
--yoffset) yoffset="$2" ;;
|
||||
--noimg) enableimages=0 ;;
|
||||
--nowall) usewall=0 ;;
|
||||
--clean) rm -rf "$imgtempdir" || exit ;;
|
||||
|
||||
# Other
|
||||
--help) usage ;;
|
||||
esac
|
||||
|
||||
# The check here fixes shift in sh/mksh
|
||||
[ ! -z "$1" ] && shift
|
||||
done
|
||||
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
# Image Crop {{{
|
||||
|
||||
|
||||
# If the script was called with --noimg, disable images and padding
|
||||
if [ $enableimages -eq 1 ]; then
|
||||
# If usewall=1, Get image to display from current wallpaper.
|
||||
# (only works with feh)
|
||||
[ $usewall -eq 1 ] && \
|
||||
img=$(awk '/feh/ {printf $3}' "$HOME/.fehbg" | sed -e "s/'//g")
|
||||
|
||||
# Get name of image
|
||||
imgname=${img##*/}
|
||||
|
||||
# If the image in the tempdir is a different size to $imgsize, delete it
|
||||
# This check allows you to resize the image at launch
|
||||
[ -f "$imgtempdir/$imgname" ] && \
|
||||
[ $(identify -format "%h" "$imgtempdir/$imgname") != $imgsize ] && \
|
||||
rm "$imgtempdir/$imgname"
|
||||
|
||||
# Check to see if the tempfile exists before we do any cropping.
|
||||
if [ ! -f "$imgtempdir/$imgname" ]; then
|
||||
# Check if the directory exists and create it if it doesn't
|
||||
[ ! -d "$imgtempdir" ] && (mkdir "$imgtempdir" || exit)
|
||||
|
||||
# Get wallpaper size so that we can do a better crop
|
||||
size=($(identify -format "%w %h" $img))
|
||||
|
||||
# This checks to see if height is geater than width
|
||||
# so we can do a better crop of portrait images.
|
||||
if [ ${size[1]} -gt ${size[0]} ]; then
|
||||
size=${size[0]}
|
||||
else
|
||||
size=${size[1]}
|
||||
fi
|
||||
|
||||
# Crop the image and save it to the $imgtempdir
|
||||
# By default we crop a square in the center of the image which is
|
||||
# "image height x image height".
|
||||
# We then resize it to the image size specified above.
|
||||
# (default 128x128 px, uses var $height)
|
||||
# This way we get a full image crop with the speed benefit
|
||||
# of a tiny image.
|
||||
convert \
|
||||
-crop "$size"x"$size"+0+0 \
|
||||
-gravity center "$img" \
|
||||
-resize "$imgsize"x"$imgsize" "$imgtempdir/$imgname"
|
||||
fi
|
||||
|
||||
# The final image
|
||||
img="$imgtempdir/$imgname"
|
||||
else
|
||||
img=""
|
||||
pad=""
|
||||
fi
|
||||
|
||||
|
||||
# }}}
|
||||
|
||||
|
||||
# Print Info {{{
|
||||
|
||||
|
||||
# Get packages
|
||||
[ -z $packages ] && getpackages
|
||||
|
||||
# Get window manager
|
||||
[ -z $windowmanager ] && getwindowmanager
|
||||
|
||||
clear
|
||||
|
||||
# Underline title with length of title
|
||||
underline=$(printf %"${#title}"s |tr " " "-")
|
||||
|
||||
# Hide the terminal cursor while we print the info
|
||||
echo -n -e "\033[?25l"
|
||||
|
||||
# Print the title and underline
|
||||
echo -e "$pad$bold$title_color$title$clear"
|
||||
echo -e "$pad$colon_color$underline$clear"
|
||||
|
||||
# Custom echo function to make it easier to edit the info lines.
|
||||
echoinfo () {
|
||||
echo -n -e "$pad$bold$subtitle_color$1$clear"
|
||||
echo -n -e "$colon_color:$clear "
|
||||
echo -e "$info_color$2$clear"
|
||||
}
|
||||
|
||||
echoinfo "$title_os" "$os"
|
||||
echoinfo "$title_kernel" "$kernel"
|
||||
echoinfo "$title_uptime" "$uptime"
|
||||
echoinfo "$title_packages" "$packages"
|
||||
echoinfo "$title_shell" "$shell"
|
||||
echoinfo "$title_windowmanager" "$windowmanager"
|
||||
echoinfo "$title_cpu" "$cpu @ ${speed}GHz"
|
||||
echoinfo "$title_memory" "$memory"
|
||||
echoinfo "$title_song" "$song"
|
||||
|
||||
# Display the color blocks
|
||||
[ $printcols -eq 1 ] && echo -e "$(printcols)"
|
||||
|
||||
# Display the image
|
||||
echo -e "0;1;$xoffset;$yoffset;$imgsize;$imgsize;;;;;$img\n4;\n3;" |\
|
||||
/usr/lib/w3m/w3mimgdisplay
|
||||
# Show the cursor again
|
||||
echo -n -e "\033[?25h"
|
||||
|
||||
|
||||
# }}}
|
Loading…
Reference in a new issue