Introduction
Introduction Statistics Contact Development Disclaimer Help
fet.sh - dotfiles - These are my dotfiles. There are many like it, but these ar…
git clone git://jay.scot/dotfiles
Log
Files
Refs
README
---
fet.sh (7119B)
---
1 #!/bin/sh
2 #
3 # fet.sh
4 # a fetch in pure POSIX shell
5 #
6
7 # supress errors
8 exec 2>/dev/null
9 set --
10 eq() { # equals | [ a = b ] with globbing
11 case $1 in
12 $2) ;;
13 *) return 1;;
14 esac
15 }
16
17 ## DE
18 wm=$XDG_CURRENT_DESKTOP
19 [ "$wm" ] || wm=$DESKTOP_SESSION
20
21 ## Distro
22 # freedesktop.org/software/systemd/man/os-release.html
23 # a common file that has variables about the distro
24 for os in /etc/os-release /usr/lib/os-release; do
25 # some POSIX shells exit when trying to source a file that doesn…
26 [ -f $os ] && . $os && break
27 done
28
29 if [ -e /proc/$$/comm ]; then
30 ## Terminal
31 while [ ! "$term" ]; do
32 # loop over lines in /proc/pid/status until it reaches P…
33 # then save that to a variable and exit the file
34 while read -r line; do
35 eq "$line" 'PPid*' && ppid=${line##*:?} && break
36 done < "/proc/${ppid:-$PPID}/status"
37
38 # Make sure not to do an infinite loop
39 [ "$pppid" = "$ppid" ] && break
40 pppid=$ppid
41
42 # get name of binary
43 read -r name < "/proc/$ppid/comm"
44
45 case $name in
46 *sh|"${0##*/}") ;; # skip shells
47 *[Ll]ogin*|*init|*systemd*) break;; # exit when…
48 # anything else can be assumed to be the terminal
49 # this has the side affect of catching tmux, but…
50 # detaches from the terminal and therefore ignor…
51 # will just make the init the term
52 *) term=$name
53 esac
54 done
55
56 ## WM/DE
57 [ "$wm" ] ||
58 # loop over all processes and check the binary name
59 for i in /proc/*/comm; do
60 read -r c < "$i"
61 case $c in
62 *bar*|*rc) ;;
63 awesome|xmonad*|qtile|sway|i3|[bfo]*box|…
64 esac
65 done
66
67 ## Memory
68 # loop over lines in /proc/meminfo until it reaches MemTotal,
69 # then convert the amount (second word) from KB to MB
70 while read -r line; do
71 eq "$line" 'MemTotal*' && set -- $line && break
72 done < /proc/meminfo
73 mem="$(( $2 / 1000 ))MB"
74
75 ## Processor
76 while read -r line; do
77 case $line in
78 vendor_id*) vendor="${line##*: } ";;
79 model\ name*) cpu=${line##*: }; break;;
80 esac
81 done < /proc/cpuinfo
82
83 ## Uptime
84 # the simple math is shamefully stolen from aosync
85 IFS=. read -r uptime _ < /proc/uptime
86 d=$((uptime / 60 / 60 / 24))
87 up=$(printf %02d:%02d $((uptime / 60 / 60 % 24)) $((uptime / 60 …
88 [ "$d" -gt 0 ] && up="${d}d $up"
89
90 ## Kernel
91 read -r _ _ version _ < /proc/version
92 kernel=${version%%-*}
93 eq "$version" '*Microsoft*' && ID="fake $ID"
94
95 ## Motherboard // laptop
96 read -r model < /sys/devices/virtual/dmi/id/product_name
97 # invalid model handling
98 case $model in
99 # alternate file with slightly different info
100 # on my laptop it has the device model (instead of 'hp n…
101 # on my desktop it has the extended motherboard model
102 'System '*|'Default '*|'To Be Filled'*)
103 read -r model < /sys/devices/virtual/dmi/id/boar…
104 esac
105
106 ## Packages
107 # clean environment, then make every file in the dir an argument,
108 # then save the argument count to $pkgs
109 set --
110 # kiss, arch, debian, void, gentoo
111 for i in '/var/db/kiss/installed/*' '/var/lib/pacman/local/[0-9…
112 '/var/lib/dpkg/info/*.list' '/var/db/xbps/.*' '/var/db/pkg/*/*…
113 set -- $i
114 [ $# -gt 1 ] && pkgs=$# && break
115 done
116
117 read -r host < /proc/sys/kernel/hostname
118 elif [ -f /var/run/dmesg.boot ]; then
119 # Both OpenBSD and FreeBSD use this file, however they're format…
120 read -r bsd < /var/run/dmesg.boot
121 case $bsd in
122 Open*)
123 ## OpenBSD cpu/mem/name
124 while read -r line; do
125 case $line in
126 'real mem'*)
127 # use the pre-formatted value wh…
128 mem=${line##*\(}
129 mem=${mem%\)*}
130 ;;
131 # set $cpu to everything before a comma …
132 cpu0:*)
133 cpu=${line#cpu0: }
134 # Remove excess info after the a…
135 cpu=${cpu%%,*}
136 # Set the CPU Manufacturer to th…
137 # variable [separated by '(' or …
138 vendor=${cpu%%[\( ]*}
139 # We got all the info we want, s…
140 break
141 ;;
142 # First 2 words in the file are OpenBSD …
143 *) [ "$ID" ] || { set -- $line; ID="$1 $…
144 esac
145 done < /var/run/dmesg.boot
146 [ -d /var/db/pkg ] && set -- /var/db/pkg/* && pkgs=$#
147 read -r host < /etc/myname
148 host=${host%.*}
149 ;;
150 # Everything else, assume FreeBSD (first line is ---<<BOOT>> or …
151 *)
152 # shellcheck source=/dev/null
153 . /etc/rc.conf
154 # shut shellcheck up without disabling the warning
155 host=${hostname:-}
156
157 while read -r line; do
158 case $line in
159 # os version
160 FreeBSD*)
161 # If the OS is already set, no n…
162 [ "$ID" ] && continue
163 ID=${line%%-R*}
164 ;;
165
166 CPU:*)
167 cpu=${cpu#CPU: }
168 # Remove excess info from after …
169 cpu=${line%\(*}
170 ;;
171 *Origin=*)
172 # CPU Manufacturer
173 vendor=${line#*Origin=\"}
174 vendor="${vendor%%\"*} "
175 ;;
176
177 'real memory'*)
178 # Get the pre-formatted amount w…
179 mem=${line##*\(}
180 mem=${mem%\)*}
181 # This appears to be the final t…
182 # no need to read it more.
183 break
184 esac
185 done < /var/run/dmesg.boot
186 ;;
187 esac
188 elif v=/System/Library/CoreServices/SystemVersion.plist; [ -f "$v" ]; th…
189 ## Macos
190 # make sure this variable is empty as to not break the following…
191 temp=
192 while read -r line; do
193 case $line in
194 # set a variable so the script knows it's on the…
195 # (the line after this one is the important one)
196 *ProductVersion*) temp=.;;
197 *)
198 # check if the script is reading the der…
199 # don't do anything
200 [ "$temp" ] || continue
201 # Remove everything before and including…
202 ID=${line#*>}
203 # Remove the other side of the XML tag, …
204 ID="MacOS ${ID%<*}"
205 # We got the info we want, end the loop.
206 break
207 esac
208 done < "$v"
209 fi
210
211 eq "$0" '*fetish' && printf 'Step on me daddy\n' && exit
212
213 # help i dont know if it's a capital consistently
214 eq "$wm" '*[Gg][Nn][Oo][Mm][Ee]*' && wm='foot DE'
215
216 ## GTK
217 while read -r line; do
218 eq "$line" 'gtk-theme*' && gtk=${line##*=} && break
219 done < "${XDG_CONFIG_HOME:=$HOME/.config}/gtk-3.0/settings.ini"
220
221 # Shorten $cpu and $vendor
222 # this is so messy due to so many inconsistencies in the model names
223 vendor=${vendor##*Authentic}
224 vendor=${vendor##*Genuine}
225 cpu=${cpu##*) }
226 cpu=${cpu%% @*}
227 cpu=${cpu%% CPU}
228 cpu=${cpu##CPU }
229 cpu=${cpu##*AMD }
230 cpu=${cpu%% with*}
231 cpu=${cpu% *-Core*}
232
233 col() {
234 printf ' '
235 for i in 1 2 3 4 5 6; do
236 printf '\033[9%sm%s' "$i" "${colourblocks:-▅▅}"
237 done
238 printf '\033[0m\n'
239 }
240
241 print() {
242 [ "$2" ] && printf '\033[9%sm%6s\033[0m%b%s\n' \
243 "${accent:-4}" "$1" "${separator:- ~ }" "$2"
244 }
245
246 # default value
247 : "${info:=n user os sh wm up gtk cpu mem host kern pkgs term col n}"
248
249 for i in $info; do
250 case $i in
251 n) echo;;
252 os) print os "$ID";;
253 sh) print sh "${SHELL##*/}";;
254 wm) print wm "${wm##*/}";;
255 up) print up "$up";;
256 gtk) print gtk "${gtk# }";;
257 cpu) print cpu "$vendor$cpu";;
258 mem) print mem "$mem";;
259 host) print host "$model";;
260 kern) print kern "$kernel";;
261 pkgs) print pkgs "$pkgs";;
262 term) print term "$term";;
263 user) printf '%7s@%s\n' "$USER" "$host";;
264 col) col;;
265 esac
266 done
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.