mirror of
https://github.com/eepykate/fet.sh.git
synced 2026-11-07 16:01:03 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d0cc3be21 | ||
|
|
3521c02a54 | ||
|
|
5a9c664bfb | ||
|
|
5d432d2c67 | ||
|
|
ce53a54d4c | ||
|
|
34f2b4b0a1 | ||
|
|
eede5b7666 | ||
|
|
43152b2837 | ||
|
|
0d8ab196c4 | ||
|
|
ea9abc7ffb | ||
|
|
accf87f751 | ||
|
|
7d2097cf00 | ||
|
|
1a4ecf462b | ||
|
|
81d4666525 | ||
|
|
8b3af10779 | ||
|
|
4a7caeabe5 | ||
|
|
dc190ac7ac | ||
|
|
71afae542c | ||
|
|
33d1029e8b | ||
|
|
402217d114 | ||
|
|
293b388623 | ||
|
|
473ed6f54f | ||
|
|
5dd087585c | ||
|
|
0ac1b7d216 | ||
|
|
b7fbb8784f | ||
|
|
6374278cac | ||
|
|
ce60c65e85 | ||
|
|
5b0c166444 | ||
|
|
f139798f16 | ||
|
|
55931b3bdf | ||
|
|
8f4d1cd8da | ||
|
|
e377e92ee2 |
No files matched your search
@@ -1,16 +1,19 @@
|
||||
<div align="center">
|
||||
<h1>fet.sh</h1>
|
||||
fetch written in POSIX shell with no external commands
|
||||
a fetch written in POSIX shell with no external commands
|
||||
<br>
|
||||
<img src="screenshot.png" width="250px">
|
||||
</div>
|
||||
|
||||
### Installing
|
||||
**Arch:** [fet.sh-git](https://aur.archlinux.org/packages/fet.sh-git/) (AUR)
|
||||
**Other Distros:** copy `fet.sh` to somewhere in $PATH
|
||||
**Arch:** [fet.sh-git](https://aur.archlinux.org/packages/fet.sh-git) (AUR)
|
||||
**Gentoo:** [app-misc/fetsh](https://gpo.zugaina.org/Overlays/guru/app-misc/fetsh) (GURU overlay)
|
||||
**KISS:** [fetsh](https://github.com/kisslinux/community/tree/master/community/fetsh) (Community)
|
||||
**Nix:** [fet-sh](https://search.nixos.org/packages?show=fet-sh&query=fet-sh&channel=unstable) (nixpkgs-unstable)
|
||||
Alternatively, copy `fet.sh` to somewhere in $PATH and mark it as executable (`chmod +x fet.sh`)
|
||||
|
||||
### Customization
|
||||
`fet.sh` can be configured using environment variables, for example:
|
||||
`fet.sh` has a few basic configuration options using environment variables, for example:
|
||||
```
|
||||
$ info='n os wm sh n' fet.sh
|
||||
```
|
||||
@@ -18,3 +21,8 @@ Supported options are:
|
||||
- `accent` (0-7)
|
||||
- `info`
|
||||
- `separator`
|
||||
|
||||
For less simple configuration I recommend editing the script, I tried to keep it simple.
|
||||
|
||||
### Known Issues
|
||||
MacOS, BSD, and Android don't show much info.
|
||||
@@ -7,47 +7,60 @@
|
||||
# supress errors
|
||||
exec 2>/dev/null
|
||||
set --
|
||||
_() { # [ a = b ] with globbing
|
||||
eq() { # equals | [ a = b ] with globbing
|
||||
case $1 in
|
||||
$2) return
|
||||
esac;! :
|
||||
$2) ;;
|
||||
*) return 1;;
|
||||
esac
|
||||
}
|
||||
|
||||
## Terminal
|
||||
|
||||
[ "$XDG_CURRENT_DESKTOP" ] && wm="$XDG_CURRENT_DESKTOP"
|
||||
[ "$DESKTOP_SESSION" ] && wm="$DESKTOP_SESSION"
|
||||
## DE
|
||||
wm=$XDG_CURRENT_DESKTOP
|
||||
[ "$wm" ] || wm=$DESKTOP_SESSION
|
||||
|
||||
## Distro
|
||||
o=/etc/os-release
|
||||
[ -f $o ] && . $o # a common file that has variables about the distro
|
||||
# freedesktop.org/software/systemd/man/os-release.html
|
||||
# a common file that has variables about the distro
|
||||
for os in /etc/os-release /usr/lib/os-release; do
|
||||
# some POSIX shells exit when trying to source a file that doesn't exist
|
||||
[ -f $os ] && . $os && break
|
||||
done
|
||||
|
||||
if [ -e /proc/$$/comm ]; then
|
||||
## Terminal
|
||||
while [ ! "$term" ]; do
|
||||
# loop over lines in /proc/pid/status until it reaches PPid
|
||||
# then save that to a variable and exit the file
|
||||
while read -r line; do
|
||||
_ "$line" "PPid*" && ppid=${line##*:?} && break
|
||||
eq "$line" 'PPid*' && ppid=${line##*:?} && break
|
||||
done < "/proc/${ppid:-$PPID}/status"
|
||||
|
||||
# Make sure not to do an infinite loop
|
||||
[ "$pppid" = "$ppid" ] && break
|
||||
pppid=$ppid
|
||||
|
||||
# get name of binary
|
||||
read -r name < "/proc/$ppid/comm"
|
||||
|
||||
case $name in
|
||||
*sh|"${0##*/}"|tmux*) ;; # skip shells
|
||||
*[Ll]ogin*|*init*) break;; # exit when the top is reached
|
||||
*) term="$name" # anything else can be assumed to be the terminal
|
||||
*sh|"${0##*/}") ;; # skip shells
|
||||
*[Ll]ogin*|*init*|*systemd*) break;; # exit when the top is reached
|
||||
# anything else can be assumed to be the terminal
|
||||
# this has the side affect of catching tmux, but tmux
|
||||
# detaches from the terminal and therefore ignoring that
|
||||
# will just make the init the term
|
||||
*) term=$name
|
||||
esac
|
||||
done
|
||||
|
||||
## WM/DE
|
||||
# standard variables, mostly used for DEs
|
||||
[ "$DISPLAY" ] && [ ! "$wm" ] &&
|
||||
# non-standard WMs
|
||||
[ ! "$wm" ] &&
|
||||
# loop over all processes and check the binary name
|
||||
for i in /proc/*/comm; do
|
||||
read -r c < "$i"
|
||||
case $c in
|
||||
awesome|xmonad|qtile|i3*|box*|*wm*) wm="$c"; break;;
|
||||
*bar*) ;;
|
||||
awesome|xmonad*|qtile|sway|i3|[bfo]*box|*wm*) wm=${c%%-*}; break;;
|
||||
esac
|
||||
done
|
||||
|
||||
@@ -55,7 +68,7 @@ if [ -e /proc/$$/comm ]; then
|
||||
# loop over lines in /proc/meminfo until it reaches MemTotal,
|
||||
# then convert the amount (second word) from KB to MB
|
||||
while read -r line; do
|
||||
_ "$line" "MemTotal*" && set -- $line && break
|
||||
eq "$line" 'MemTotal*' && set -- $line && break
|
||||
done < /proc/meminfo
|
||||
mem="$(( $2 / 1000 ))MB"
|
||||
|
||||
@@ -63,7 +76,7 @@ if [ -e /proc/$$/comm ]; then
|
||||
while read -r line; do
|
||||
case $line in
|
||||
vendor_id*) vendor="${line##*: } ";;
|
||||
model\ name*) cpu="${line##*: }"; break;;
|
||||
model\ name*) cpu=${line##*: }; break;;
|
||||
esac
|
||||
done < /proc/cpuinfo
|
||||
|
||||
@@ -76,20 +89,30 @@ if [ -e /proc/$$/comm ]; then
|
||||
|
||||
## Kernel
|
||||
read -r _ _ version _ < /proc/version
|
||||
kernel="${version%%-*}"
|
||||
_ "$version" "*Microsoft*" && ID="fake $ID"
|
||||
kernel=${version%%-*}
|
||||
eq "$version" '*Microsoft*' && ID="fake $ID"
|
||||
|
||||
## Motherboard // laptop
|
||||
read -r model < /sys/devices/virtual/dmi/id/product_name
|
||||
# invalid model handling
|
||||
case $model in
|
||||
# alternate file with slightly different info
|
||||
# on my laptop it has the device model (instead of 'hp notebook')
|
||||
# on my desktop it has the extended motherboard model
|
||||
'System '*|'Default '*)
|
||||
read -r model < /sys/devices/virtual/dmi/id/board_name
|
||||
esac
|
||||
|
||||
## Packages
|
||||
# clean environment, then make every file in the dir an argument,
|
||||
# then save the argument count to $pkgs
|
||||
set --
|
||||
[ -d /var/db/kiss/installed ] && set -- /var/db/kiss/installed/*
|
||||
[ -d /var/lib/pacman/local ] && set -- /var/lib/pacman/local/*
|
||||
[ -d /var/db/xbps ] && set -- /var/db/xbps/.*
|
||||
[ -d /var/db/pkg ] && set -- /var/db/pkg/*/* # gentoo
|
||||
# kiss, arch, debian, void, gentoo
|
||||
for i in '/var/db/kiss/installed/*' '/var/lib/pacman/local/[0-9a-z]*' \
|
||||
'/var/lib/dpkg/info/*.list' '/var/db/xbps/.*' '/var/db/pkg/*/*'; do
|
||||
set -- $i
|
||||
[ $# -gt 1 ] && break
|
||||
done
|
||||
pkgs=${###0}
|
||||
|
||||
read -r host < /proc/sys/kernel/hostname
|
||||
@@ -101,7 +124,7 @@ elif [ -f /var/run/dmesg.boot ]; then
|
||||
## OpenBSD cpu/mem/name
|
||||
while read -r line; do
|
||||
case $line in
|
||||
"real mem"*)
|
||||
'real mem'*)
|
||||
# use the pre-formatted value which is in brackets
|
||||
mem=${line##*\(}
|
||||
mem=${mem%\)*}
|
||||
@@ -142,7 +165,7 @@ elif [ -f /var/run/dmesg.boot ]; then
|
||||
FreeBSD*)
|
||||
# If the OS is already set, no need to set it again
|
||||
[ "$ID" ] && continue
|
||||
ID="${line%%-R*}"
|
||||
ID=${line%%-R*}
|
||||
;;
|
||||
|
||||
CPU:*)
|
||||
@@ -156,7 +179,7 @@ elif [ -f /var/run/dmesg.boot ]; then
|
||||
vendor="${vendor%%\"*} "
|
||||
;;
|
||||
|
||||
"real memory"*)
|
||||
'real memory'*)
|
||||
# Get the pre-formatted amount which is inside brackets
|
||||
mem=${line##*\(}
|
||||
mem=${mem%\)*}
|
||||
@@ -190,21 +213,27 @@ elif v=/System/Library/CoreServices/SystemVersion.plist; [ -f "$v" ]; then
|
||||
done < "$v"
|
||||
fi
|
||||
|
||||
eq "$0" '*fetish' && printf 'Step on me daddy\n' && exit
|
||||
|
||||
# help i dont know if it's a capital consistently
|
||||
eq "$wm" '*[Gg][Nn][Oo][Mm][Ee]*' && wm='foot DE'
|
||||
|
||||
## GTK
|
||||
while read -r line; do
|
||||
_ "$line" "gtk-theme*" && gtk="${line##*=}" && break
|
||||
eq "$line" 'gtk-theme*' && gtk=${line##*=} && break
|
||||
done < "${XDG_CONFIG_HOME:=$HOME/.config}/gtk-3.0/settings.ini"
|
||||
|
||||
# Shorten $cpu and $vendor
|
||||
# this is so messy due to so many inconsistencies in the model names
|
||||
vendor="${vendor##*Authentic}"
|
||||
vendor="${vendor##*Genuine}"
|
||||
cpu="${cpu##*) }"
|
||||
cpu="${cpu%% @*}"
|
||||
cpu="${cpu%% CPU}"
|
||||
cpu="${cpu##CPU }"
|
||||
cpu="${cpu##*AMD }"
|
||||
cpu="${cpu%% with*}"
|
||||
vendor=${vendor##*Authentic}
|
||||
vendor=${vendor##*Genuine}
|
||||
cpu=${cpu##*) }
|
||||
cpu=${cpu%% @*}
|
||||
cpu=${cpu%% CPU}
|
||||
cpu=${cpu##CPU }
|
||||
cpu=${cpu##*AMD }
|
||||
cpu=${cpu%% with*}
|
||||
cpu=${cpu% *-Core*}
|
||||
|
||||
col() {
|
||||
printf ' '
|
||||
@@ -227,7 +256,7 @@ for i in $info; do
|
||||
n) echo;;
|
||||
os) print os "$ID";;
|
||||
sh) print sh "${SHELL##*/}";;
|
||||
wm) print wm "$wm";;
|
||||
wm) print wm "${wm##*/}";;
|
||||
up) print up "$up";;
|
||||
gtk) print gtk "${gtk# }";;
|
||||
cpu) print cpu "$vendor$cpu";;
|
||||
|
||||
Reference in new issue
Block a user