first commit

This commit is contained in:
Kyle Speight committed 2026-07-27 08:57:43 -07:00
commit c79e9e77d0
4 files changed
+364

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
*.tar.*
*.tar
*.sum
+18
View File
@@ -0,0 +1,18 @@
MIT License
Copyright (c) 2026 chillcog
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
associated documentation files (the "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
USE OR OTHER DEALINGS IN THE SOFTWARE.
+16
View File
@@ -0,0 +1,16 @@
# Maintainer: Chillcog <chillcog@chillcog.com>
pkgname=sharkfetch
pkgver=1.71.0
pkgrel=1
pkgdesc="A custom system fetch script with a sharky!"
arch=('any')
url="https://git.chillcog.com/chillcog/sharkfetch"
license=('MIT')
depends=('bash')
source=("${pkgname}-${pkgver}.tar.gz::${url}/archive/refs/tags/v${pkgver}.tar.gz")
sha256sums=('SKIP')
package() {
install -Dm755 "${srcdir}/${pkgname}-${pkgver}/sharkfetch" "${pkgdir}/usr/bin/sharkfetch"
}
+327
View File
@@ -0,0 +1,327 @@
#!/usr/bin/env bash
# https://chillcog.com
# Haiiiii - @chillcog
# Licensed Under The MIT License
clear
PRIVATE_MODE=0
show_help() {
cat << EOF
Usage: $(basename "$0") [OPTIONS]
A custom system information fetch script featuring ASCII art.
Options:
-h, --help Show this help message and exit.
-p, -private, Private mode: hides uniquely identifying information
--private (hostname, public/local IP, hardware model).
EOF
exit 0
}
for arg in "$@"; do
case "$arg" in
-h|--help)
show_help
;;
-p|-private|--private)
PRIVATE_MODE=1
;;
*)
echo "Unknown option: $arg"
echo "Use -h or --help for usage."
exit 1
;;
esac
done
c0=$'\e[0m'
blue=$'\e[34m'
c1=$'\e[36m'
c2=$'\e[35m'
OS_TYPE="$(uname -s)"
ARCH="$(uname -m)"
USER_NAME="$(whoami)"
if [ "$PRIVATE_MODE" -eq 1 ]; then
HOST_NAME="[REDACTED]"
else
HOST_NAME="$(hostname 2>/dev/null || uname -n)"
fi
user_host="${USER_NAME}@${HOST_NAME}"
get_os() {
if [ "$OS_TYPE" = "Linux" ]; then
if [ -f /etc/os-release ]; then
source /etc/os-release && echo "$NAME ($ARCH)"
else
echo "Linux ($ARCH)"
fi
elif [ "$OS_TYPE" = "Darwin" ]; then
echo "macOS $(sw_vers -productVersion 2>/dev/null) ($ARCH)"
else
echo "$OS_TYPE ($ARCH)"
fi
}
os=$(get_os)
kernel="$(uname -r)"
get_motherboard() {
if [ "$PRIVATE_MODE" -eq 1 ]; then
echo "[REDACTED]"
return
fi
if [ -f /sys/devices/virtual/dmi/id/product_name ]; then
local vendor name ver
vendor=$(cat /sys/devices/virtual/dmi/id/sys_vendor 2>/dev/null)
name=$(cat /sys/devices/virtual/dmi/id/product_name 2>/dev/null)
ver=$(cat /sys/devices/virtual/dmi/id/product_version 2>/dev/null)
echo "${vendor} ${name} ${ver}" | xargs
elif command -v sysctl >/dev/null 2>&1 && [ "$OS_TYPE" = "Darwin" ]; then
sysctl -n hw.model 2>/dev/null
else
echo "N/A"
fi
}
host_model=$(get_motherboard)
uptime_str=$(uptime 2>/dev/null | sed -E 's/.*up[[:space:]]+([^,]+).*/\1/' | xargs)
[ -z "$uptime_str" ] && uptime_str="N/A"
get_packages() {
local pkgs=""
if command -v pacman >/dev/null 2>&1; then
pkgs="$(pacman -Qq 2>/dev/null | wc -l | xargs) (pacman)"
elif command -v dpkg >/dev/null 2>&1; then
pkgs="$(dpkg -l 2>/dev/null | grep -c '^ii') (dpkg)"
elif command -v rpm >/dev/null 2>&1; then
pkgs="$(rpm -qa 2>/dev/null | wc -l | xargs) (rpm)"
elif command -v brew >/dev/null 2>&1; then
pkgs="$(brew list --formula 2>/dev/null | wc -l | xargs) (brew)"
elif command -v nix-store >/dev/null 2>&1; then
pkgs="$(nix-store -q --requisites /run/current-system 2>/dev/null | wc -l | xargs) (nix)"
else
pkgs="N/A"
fi
echo "$pkgs"
}
packages=$(get_packages)
get_shell() {
local sh_bin
sh_bin="$(basename "${SHELL:-bash}")"
case "$sh_bin" in
bash) echo "bash $($SHELL --version 2>/dev/null | head -n1 | awk '{print $4}')" ;;
zsh) echo "zsh $($SHELL --version 2>/dev/null | awk '{print $2}')" ;;
fish) echo "fish $($SHELL --version 2>/dev/null | awk '{print $3}')" ;;
*) echo "$sh_bin" ;;
esac
}
shell_info=$(get_shell)
de="${XDG_CURRENT_DESKTOP:-${DESKTOP_SESSION:-N/A}}"
wm="${XDG_SESSION_DESKTOP:-N/A}"
[ "$OS_TYPE" = "Darwin" ] && de="Aqua" && wm="Quartz Compositor"
terminal="${TERM_PROGRAM:-${TERM:-N/A}}"
get_display() {
if command -v xrandr >/dev/null 2>&1; then
xrandr 2>/dev/null | awk '/\*/ {print $1 " @" $2 "Hz"; exit}' | tr -d '*' | xargs
elif [ "$OS_TYPE" = "Darwin" ]; then
system_profiler SPDisplaysDataType 2>/dev/null | awk -F: '/Resolution/ {print $2}' | head -n1 | xargs
else
echo "N/A"
fi
}
display_info=$(get_display)
[ -z "$display_info" ] && display_info="N/A"
get_cpu() {
if command -v lscpu >/dev/null 2>&1; then
local model cores
model=$(lscpu | awk -F: '/Model name/ {print $2}' | xargs)
cores=$(lscpu | awk -F: '/CPU\(s\):/ {print $2}' | head -n1 | xargs)
echo "${model} (${cores} threads)"
elif [ "$OS_TYPE" = "Darwin" ]; then
local model cores
model=$(sysctl -n machdep.cpu.brand_string 2>/dev/null)
cores=$(sysctl -n hw.ncpu 2>/dev/null)
echo "${model} (${cores} cores)"
else
echo "N/A"
fi
}
cpu=$(get_cpu)
[ -z "$cpu" ] && cpu="N/A"
get_gpu() {
if command -v lspci >/dev/null 2>&1; then
lspci 2>/dev/null | grep -E 'VGA|3D' | awk -F: '{print $3}' | sed 's/ (rev .*//' | head -n1 | xargs
elif [ "$OS_TYPE" = "Darwin" ]; then
system_profiler SPDisplaysDataType 2>/dev/null | awk -F: '/Chipset Model/ {print $2}' | head -n1 | xargs
else
echo "N/A"
fi
}
gpu=$(get_gpu)
[ -z "$gpu" ] && gpu="N/A"
get_memory() {
if command -v free >/dev/null 2>&1; then
free -m | awk '/Mem:/ {printf "%sMB / %sMB (%.0f%%)", $3, $2, ($3/$2)*100}'
elif [ "$OS_TYPE" = "Darwin" ]; then
local total_mem
total_mem=$(sysctl -n hw.memsize 2>/dev/null)
total_mem=$((total_mem / 1024 / 1024))
echo "${total_mem}MB Total"
else
echo "N/A"
fi
}
memory=$(get_memory)
get_swap() {
if command -v free >/dev/null 2>&1; then
free -m | awk '/Swap:/ {if ($2>0) printf "%sMB / %sMB (%.0f%%)", $3, $2, ($3/$2)*100; else print "Disabled"}'
else
echo "N/A"
fi
}
swap=$(get_swap)
disk=$(df -h / 2>/dev/null | awk 'NR==2 {print $3 " / " $2 " (" $5 ")"}')
get_temp() {
if command -v sensors >/dev/null 2>&1; then
sensors 2>/dev/null | awk '/Package id 0:|Core 0:|cpu_thermal/ {print $2; exit}' | tr -d '+'
elif [ -f /sys/class/thermal/thermal_zone0/temp ]; then
local raw
raw=$(cat /sys/class/thermal/thermal_zone0/temp 2>/dev/null)
echo "$((raw / 1000))°C"
else
echo "N/A"
fi
}
cpu_temp=$(get_temp)
[ -z "$cpu_temp" ] && cpu_temp="N/A"
load_avg=$(uptime 2>/dev/null | awk -F'load average:' '{print $2}' | xargs)
[ -z "$load_avg" ] && load_avg="N/A"
if [ "$PRIVATE_MODE" -eq 1 ]; then
local_ip="[HIDDEN]"
public_ip="[HIDDEN]"
else
get_ip() {
if command -v ip >/dev/null 2>&1; then
ip route get 1.1.1.1 2>/dev/null | awk '{print $7}'
elif command -v ifconfig >/dev/null 2>&1; then
ifconfig 2>/dev/null | awk '/inet / && !/127.0.0.1/ {print $2}' | head -n1
else
echo "N/A"
fi
}
local_ip=$(get_ip)
[ -z "$local_ip" ] && local_ip="N/A"
public_ip=$(curl -s --max-time 1 https://icanhazip.com 2>/dev/null || echo "Offline/N/A")
fi
get_battery() {
if [ -d /sys/class/power_supply ]; then
local cap status
cap=$(cat /sys/class/power_supply/BAT*/capacity 2>/dev/null | head -n1)
status=$(cat /sys/class/power_supply/BAT*/status 2>/dev/null | head -n1)
if [ -n "$cap" ]; then
echo "${cap}% [${status:-Unknown}]"
else
echo "AC Powered"
fi
elif command -v pmset >/dev/null 2>&1; then
pmset -g batt 2>/dev/null | grep -o '[0-9]*%' | head -n1
else
echo "N/A"
fi
}
battery=$(get_battery)
locale_val="${LANG:-N/A}"
raw_logo=$(cat << 'EOF'
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡴⠲⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣾⣷⡄⠈⢢⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣄⠀⠀⠀⠀⠀⠀⢀⣾⡀⠀⠀⠀⠀⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡓⠦⢄⣀⠀⠀⡼⠻⠿⢶⡄⠀⠀⠀⠘⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢀⡤⠤⠤⣤⣤⣴⣶⣶⠶⠶⠶⠒⠒⠂⠙⠀⠀⠀⠉⠉⠓⠲⢤⣀⠀⠀⠀⠀⠀⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠈⢿⠈⠳⣤⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⠢⣄⠀⠀⠀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⡇⠀⠀⠀⠀⠀⢀⣿⡋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠸⣟⠁⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠸⡀⠀⠀⠀⠀⢈⡽⠁⠀⠀⠠⡄⠀⠀⠀⠀⠀⠀⠀⣄⠀⠀⠀⠀⠀⠀⠘⡆⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠱⡀⠀⠀⣠⠞⠀⠀⠀⠀⣠⢧⠀⠀⠀⠀⠀⠀⠀⠘⣆⠀⠀⠀⠀⠀⠀⢹⠀⣸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢆⡴⠃⠀⠀⠀⢠⠞⠁⠈⢣⡀⣄⠀⠀⠀⠀⠀⠘⣆⠀⠀⠀⠀⠀⢸⣠⡇⠀⠀⠀⠀⠀⠀⠀⢀⡀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⢞⣓⣸⠀⢠⠰⣋⣀⣀⣳⢤⡙⢾⣟⠲⢤⣀⣠⠄⢯⠳⡀⠀⠀⠀⠸⠋⡇⠀⠀⠀⠀⠀⠀⢠⠏⠹⡄⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⣿⠀⢸⢰⠋⠀⣸⣿⣿⡆⠀⠈⠃⢤⣯⣿⡶⠾⣄⠘⡦⠀⠀⢀⣦⣿⠀⠀⠀⠀⠀⢠⠃⠀⠀⢳⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡄⢸⣼⣀⡀⠣⠽⠿⢃⠀⠀⠀⢾⣻⣿⡿⠀⣸⡸⠁⠀⢀⡼⡼⠉⠳⣄⠀⠀⣰⠃⠀⠀⠀⢸⠇
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠟⣷⡘⣿⣛⡁⠀⠀⠀⠀⠁⠀⠀⠀⠉⠍⠡⣶⡿⠁⠀⣠⠟⣇⡇⠀⠀⠈⢦⣰⠁⠀⠀⠀⠀⢸⠂
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣾⠖⢻⣣⣈⣿⣤⠤⢒⠒⠦⠖⠢⠴⢄⣀⢬⣷⠞⢁⣠⠞⣡⠞⢹⡟⠀⠀⠀⠀⠃⠀⠀⠀⠀⢀⡞⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⢏⣻⡶⠞⠉⠛⢉⣆⣴⡞⠻⠦⣾⢿⣊⣉⡴⣶⠁⠀⠀⠑⢄⡀⢀⢰⠋⢦⠀⠀⣠⠞⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢨⣿⣤⣶⣦⠀⠀⡇⠀⠀⣤⣄⠹⡟⠛⢷⠀⠁⠀⠀⠀⠀⠀⠙⠺⣏⣀⠈⢷⠚⠁⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⢿⣿⣿⣝⢿⡇⠀⣧⢠⣾⣿⣿⣿⡿⡄⢸⡄⠀⠀⠀⠀⠀⠀⠀⢸⠏⠉⠁⠈⡆⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡟⠀⠀⠀⠙⠃⠀⢸⣿⠈⠱⠟⠛⠛⠃⢹⢸⣿⡄⠀⠀⠀⣤⡀⢀⡿⠛⠓⠂⢀⢱⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣸⡀⠀⠀⠀⠀⠀⣠⢟⣸⠦⣄⣀⠀⠀⠀⠘⣸⠹⣟⡆⠀⡼⠁⠙⣾⣷⣦⣄⠀⠀⢸⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠞⠉⠀⠘⡇⠀⣀⣀⡠⠞⣱⠋⠀⠀⠀⠈⠙⢦⡀⠀⢹⡚⠉⠀⢰⠃⠀⠀⠀⠘⣆⠀⠉⠀⢸⡇⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⣜⠁⠀⠀⠀⠀⠙⠉⢹⣿⠁⢰⠃⠀⠀⠀⠀⠀⠀⠀⠑⣦⣬⠇⠀⢀⡏⠀⠀⠀⠀⠉⠀⠀⠀⢀⢸⡇⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⡠⠟⠛⠛⠷⠂⠀⠀⠀⠀⠈⣿⢠⡇⣠⣤⣤⣤⣀⠀⠀⠀⠀⠘⣿⣶⣶⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⡞⢸⠃⠀⠀⠀
⠀⠀⠀⠀⠀⢀⣾⣷⣤⣤⠀⠀⠀⠀⠀⠀⠀⠀⠛⡼⢉⢉⣉⣉⠛⠻⢷⣄⠀⠀⠀⣸⣯⠙⢿⣧⠀⠀⠀⠀⠀⠀⢀⡼⠁⡼⠀⠀⠀⠀
⠀⠀⠀⠀⡰⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡤⠀⡗⠛⠛⠻⠿⣷⣦⣀⠀⠀⠀⠀⠘⢻⠀⠀⠙⠃⠀⠀⠀⠀⡠⠊⠀⢠⠃⠀⠀⠀⠀
⠀⣠⣖⣟⣳⣒⣆⠀⠀⠀⠀⠀⠀⠀⠀⣠⣎⠀⢸⠁⠀⠀⠀⠀⠀⠉⠉⠀⢸⠀⠀⠀⣏⠀⠀⠀⠀⠀⠠⠒⠋⠀⠀⢠⠏⠀⠀⠀⠀⠀
⠰⣿⣿⣶⠿⠷⣾⠃⠀⠀⠀⠀⢀⡠⠚⠁⠈⠦⡞⠀⠀⠀⠀⠀⠀⠀⠀⢠⠏⠀⠀⡼⠉⠁⠀⠀⠀⠀⠀⠀⠀⣠⠔⠋⠀⠀⠀⠀⠀⠀
⠀⠹⣦⣓⡒⠋⠉⠀⠀⠀⣀⡴⠋⠀⠀⠀⠀⡼⠁⡀⠀⠀⠀⠀⠀⠀⣠⠏⢀⣠⢾⣁⣀⣀⣀⣀⣠⠤⠒⠚⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠉⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠹⣦⣿⣯⣿⣦⢀⡴⠋⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠉⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
EOF
)
transparent_logo=$(echo "$raw_logo" | sed 's/⠀/ /g' | sed 's/[[:space:]]*$//')
readarray -t logo <<< "$transparent_logo"
labels=(
"OS:" "Host Model:" "Kernel:" "Uptime:" "Packages:" "Shell:"
"DE/WM:" "Terminal:" "Resolution:" "CPU:" "CPU Temp:" "GPU:"
"Memory:" "Swap:" "Disk (/):" "Load Avg:" "Local IP:" "Public IP:"
"Battery:" "Locale:"
)
values=(
"$os" "$host_model" "$kernel" "$uptime_str" "$packages" "$shell_info"
"${de} / ${wm}" "$terminal" "$display_info" "$cpu" "$cpu_temp" "$gpu"
"$memory" "$swap" "$disk" "$load_avg" "$local_ip" "$public_ip"
"$battery" "$locale_val"
)
info=()
info+=("${c1}${user_host}${c0}")
info+=("---------------------------------------")
for i in "${!labels[@]}"; do
lbl=$(printf "%-13s" "${labels[$i]}")
info+=("${c1}${lbl}${c0} ${c2}${values[$i]}${c0}")
done
target_width=72
max_lines=$((${#logo[@]} > ${#info[@]} ? ${#logo[@]} : ${#info[@]}))
for ((i=0; i<max_lines; i++)); do
line="${logo[i]}"
char_count=${#line}
pad_needed=$((target_width - char_count))
(( pad_needed < 0 )) && pad_needed=0
padding=$(printf '%*s' "$pad_needed" '')
printf "%s%s%s %s\n" "${blue}${line}${c0}" "$padding" "" "${info[i]}"
done