# fetch
This is the home of my fetch script! This script gathers info
about your system and prints it to the terminal next to an image,
your distro's logo or any ascii art of your choice!
![1](http://i.imgur.com/t1V9crb.png)
## Table of Contents
- [Screenshots](#screenshots)
- [Features](#features)
- [Dependencies](#dependencies)
- [Installation](#installation)
- [Post Install](#post-install)
- [Usage](#usage)
- [Frequently Asked Questions](#frequently-asked-questions)
- [Issues and Workarounds](#issues-and-workarounds)
- [Thanks](#thanks)
## Screenshots
![Windows](https://i.imgur.com/oVv5gHn.png)
![Mac OS X](http://i.imgur.com/KEi9EEi.png)
![Linux](https://ipfs.pics/ipfs/QmQL7jbxuRAX8HxL2ePNH7zUpXnePV3LRuodXZQvdiFiWk)
![Linux](https://i.imgur.com/6fgnvcq.png)
![Linux](http://i.imgur.com/CBpGjnw.png)
## Features
- Supports **Linux**, **Mac OS X**, **BSD** and **Windows** (Cygwin)
- Display a **full color image**, a file containing **ascii art** or your **distro's logo** in ascii next to the info.
- The script is **fast**. We use bash builtins wherever possible and only spawn external processes when necessary.
- Take a screenshot of your desktop on script finish.
- Customize **which** info is displayed, **where** it's displayed and **when** it's displayed.
- See this **[wiki page](https://github.com/dylanaraps/fetch/wiki/Customizing-Info)**
## Dependencies
### Required dependencies:
**All OS:**
- `Bash 4.0+`
**Linux / BSD / Windows:**
- Uptime detection: `procps` or `procps-ng`
### Optional dependencies:
**NOTE:** If `w3m` or `Imagemagick` aren't found then image support will be disabled.
**All OS:**
- Displaying Images: `w3m-img` or `iTerm2`
- `w3m-img` is sometimes bundled together with `w3m`. (Arch)
- **Note:** To enable iTerm2 mode, you need to change `$image_backend` to `iterm2`
or use the launch flag `--image_backend iterm2`.
- Image Cropping, Resizing etc: `ImageMagick`
- More accurate window manager detection: `wmctrl`
**Linux / BSD:**
- Display Wallpaper: `feh`, `nitrogen` or `gsettings`
- Current Song: `mpc` or `cmus`
- Resolution Detection: `xorg-xdpyinfo`
- Take a screenshot on script finish: `scrot`
- You can change this to another program with `--scrot_cmd` and `$scrot_cmd`.
## Installation
### Arch
1. Install **[fetch-git](https://aur.archlinux.org/packages/fetch-git/)** from the aur.
### Gentoo / Funtoo
1. Add the 3rd party repo
- `layman -o https://gist.githubusercontent.com/z1lt0id/24d45b15800b98975260/raw/2fdf6645cdc3c1ca0b0af83a7bf8f86598e386ae/fs0ciety.xml -f -a fs0ciety`
2. Sync the repos
- `layman -S`
3. To enable w3m and scrot support, enable the appropriate flags.
- `echo "x11-apps/fetch" >> /etc/portage/package.use`
4. Install the package
- `emerge -a x11-apps/fetch`
### Others
1. Download the latest source at https://github.com/dylanaraps/fetch
2. Run `make install` inside the script directory to install the script.
**NOTE:** Fetch can be uninstalled easily using `make uninstall`.
**NOTE:** Fetch can also be run from any directory like a normal script,
you'll just be missing the ascii distro logos and config file functionality.
## Post Install
#### Using the config file
Fetch will by default create a config file at `$HOME/.config/fetch/config` and this file
contains all of the script's options/settings. The config file allows you to keep your
customizations between script versions and allows you to easily share your customizations
with other people.
You can launch the script without a config file by using the flag `--config none` and you can
specify a custom config location using `--config path/to/config`.
#### Sizing the image correctly
**NOTE:** For the images to be sized correctly you need to set the `$font_width` variable.
If you don't know your font width in pixels keep trying values until the image is sized correctly.
You can also use the launch flag `--font_width` to set it on the fly.
#### Setting the prompt height
If your shell prompt's height is greater than 1 line high, you'll need to change a config
option to avoid issues with the top lines in the script output getting cut off. Set the variable
`$prompt_height` to your shell prompt's height in lines or use the launch flag `--prompt_height`.
#### Customizing what info gets displayed
In the config file there's a function that allows you to customize all of the info that
gets displayed.
Here's what you can do:
- Add new info lines
- Change the ordering of the info
- Remove unwanted info lines
- Use bash syntax to control when info gets displayed
See this wiki page that goes more in-depth about it:
https://github.com/dylanaraps/fetch/wiki/Customizing-Info
#### Customizing the script using a custom alias
If you don't want to use the config file you can customize almost everything using launch flags!
Here's what my fetch alias looks like:
```sh
alias fetch2="fetch \
--block_range 1 8 \
--line_wrap off \
--bold off \
--uptime_shorthand on \
--gtk_shorthand on \
--colors 4 1 8 8 8 7 \
"
```
## Usage
usage: ${0##*/} --option "value"
Info:
--disable infoname Allows you to disable an info line from
appearing in the output.
NOTE: You can supply multiple args. eg.
'fetch --disable cpu gpu disk shell'
--os_arch on/off Hide/Show Windows architecture.
--osx_buildversion Hide/Show Mac OS X build version.
--speed_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.
--kernel_shorthand Shorten the output of kernel
--uptime_shorthand Shorten the output of uptime (tiny, on, off)
--gpu_shorthand on/off Shorten the output of GPU
--gtk_shorthand on/off Shorten output of gtk theme/icons
--gtk2 on/off Enable/Disable gtk2 theme/icons output
--gtk3 on/off Enable/Disable gtk3 theme/icons output
--shell_path on/off Enable/Disable showing \$SHELL path
--shell_version on/off Enable/Disable showing \$SHELL version
--battery_num Which battery to display, default value is 'all'
--battery_shorthand Whether or not each battery gets its own line and title
--birthday_shorthand Shorten the output of birthday
--birthday_time Enable/Disable showing the time in birthday output
Text Colors:
--title_color num Change the color of the title
--at_color num Change the color of "@" in title
--subtitle_color num Change the color of the subtitle
--colon_color num Change the color of the colons
--underline_color num Change the color of the underlines
--info_color num Change the color of the info
Text Formatting:
--underline_char char Character to use when underlineing title
--line_wrap on/off Enable/Disable line wrapping
--bold on/off Enable/Disable bold text
--prompt_height num Set this to your prompt height to fix
issues with the text going off screen at the top
Color Blocks:
--color_blocks on/off Enable/Disable the color blocks
--block_width num Width of color blocks
--block_range start end --v
Range of colors to print as blocks
Image:
--image Image source. Where and what image we display.
Possible values: wall, shuffle, ascii,
/path/to/img, off
--image_backend Which program to use to draw images.
--shuffle_dir Which directory to shuffle for an image.
--font_width px Used to automatically size the image
--image_position Where to display the image: (Left/Right)
--split_size num Width of img/text splits
A value of 2 makes each split half the terminal
width and etc
--crop_mode Which crop mode to use
Takes the values: normal, fit, fill
--crop_offset value Change the crop offset for normal mode.
Possible values: northwest, north, northeast,
west, center, east, southwest, south, southeast
--xoffset px How close the image will be
to the left edge of the window
NOTE: This only works with w3m
--yoffset px How close the image will be
to the top edge of the window
NOTE: This only works with w3m
--gap num Gap between image and text right side
to the top edge of the window
NOTE: --gap can take a negative value which will
move the text closer to the left side.
--clean Remove all cropped images
Ascii:
--ascii Where to get the ascii from, Possible values:
distro, /path/to/ascii
--ascii_color Color to print the ascii art
--ascii_distro distro Which Distro\'s ascii art to print
Screenshot:
--scrot /path/to/img Take a screenshot, if path is left empty
the screenshot function will use
\$scrot_dir and \$scrot_name.
--scrot_cmd Screenshot program to launch
Other:
--config Specify a path to a custom config file
--config none Launch the script without a config file
--help Print this text and exit
## Frequently Asked Questions
#### How do I enable screenfetch mode?
Launching the script with `--ascii distro` or setting `ascii="distro"` and `image="ascii"`
inside the config file will launch the script in "screenfetch mode". The script will display your
distro's ascii next to the info, exactly like screenfetch.
![arch](http://i.imgur.com/uCMjgf6.png)
#### Why doesn't fetch support my wallpaper setter?
It's hard to add support for other wallpaper setters as
they don't provide a way of getting the current wallpaper from the cli.
If your wallpaper setter **does** provide a way of getting the current wallpaper
or you know where it's stored then adding support won't be a problem!
## Issues and Workarounds
#### The text is too long for my terminal window and wraps to the next line causing the image to not render correctly.
There are a few ways to fix this.
* Disable line wrapping with `line_wrap=off` in the script or with the launch flag `--line_wrap off`
* The uptime and gtk info lines each have a shorthand option that makes their output smaller. You can
enable them by changing these variables or using these flags.
```sh
# Config options
uptime_shorthand="on"
gtk_shorthand="on"
gpu_shorthand="on"
birthday_shorthand="on"
# Launch flags
--uptime_shorthand on
--gtk_shorthand on
--gpu_shorthand on
--birthday_shorthand on
```
* Edit the config to make the subtitles shorter
* Resizing the terminal so that the lines don't wrap.
#### The text is pushed over too far to the right
The easiest way to fix this is to change the value of `--gap` or `$gap`
to a negative value. For example `--gap -10` will move the text 10 spaces to the left.
#### getgpu doesn't show my exact video card name
If your `lspci | grep "VGA"` output looks like this:
```
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1401 (rev a1)
```
Instead of this:
```
01:00.0 VGA compatible controller: NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1)
```
Then you're affected by the issue.
This is caused by your `/usr/share/misc/pci.ids\*` files being outdated and you can fix it
by running this command as root.
```
sudo update-pciids
```
## Thanks
Thanks to:
- metakirby5: Providing great feedback as well as ideas for the script.
- Screenfetch:
- I've used some snippets as a base for a few functions in this script.
- I've used the ascii art from here.
- @jrgz: Helping me test the Mac OS X version.
- @xDemonessx: Helping me test the Windows version.
- Everyone else who has helped test the script and given feedback.