kore / home / features / cli / bash.nix96 lines · 2853B · raw
1{ osConfig, pkgs, ... }:
2
3let
4 fetch = pkgs.writeShellApplication {
5 name = "fetch";
6 runtimeInputs = [ pkgs.coreutils pkgs.gnused pkgs.gnugrep osConfig.nix.package ];
7 text = ''
8 os="$(sed -n 's/^ID=//p' /etc/os-release) $(sed -n 's/^VERSION_ID=//p' /etc/os-release | tr -d '"')"
9
10 vendor="$(cat /sys/class/dmi/id/sys_vendor 2>/dev/null || true)"
11 model="$(cat /sys/class/dmi/id/product_name 2>/dev/null || true)"
12 case "$model" in ""|*"Default string"*|*"To be filled"*|*"System Product Name"*)
13 model="$(cat /sys/class/dmi/id/board_name 2>/dev/null || true)" ;;
14 esac
15 host="''${vendor%% *} $model"
16
17 read -r up _ < /proc/uptime
18 up=''${up%.*}
19 days=$((up / 86400)) hours=$((up % 86400 / 3600)) mins=$((up % 3600 / 60))
20 uptime="''${mins}m"
21 [ "$hours" -gt 0 ] && uptime="''${hours}h $uptime"
22 [ "$days" -gt 0 ] && uptime="''${days}d $uptime"
23
24 while read -r key value _; do
25 case "$key" in
26 MemTotal:) total=$value ;;
27 MemAvailable:) avail=$value ;;
28 esac
29 done < /proc/meminfo
30 memory="$(((total - avail) / 1024))M / $((total / 1024))M"
31
32 user="''${USER:-$(id -un)}"
33 pkgs=0
34 for profile in /run/current-system "/etc/profiles/per-user/$user"; do
35 [ -e "$profile" ] || continue
36 root="$(readlink -f "$profile")"
37 count="$(nix-store -qR "$profile" \
38 | while read -r path; do [ "$path" != "$root" ] && [ -d "$path" ] && printf '%s\n' "''${path##*/}"; done \
39 | grep -vE -- '-(doc|man|info|dev|bin)$' | grep -cE '[0-9]+\.[0-9]' || true)"
40 pkgs=$((pkgs + count))
41 done
42
43 r=$'\e[31m' g=$'\e[32m' y=$'\e[33m' d=$'\e[37m' f=$'\e[97m' z=$'\e[0m'
44
45 art=(
46 "$r .-.-. "
47 "$r .( $y@@@$r ). "
48 "$r ( $y@@@@@$r ) "
49 "$r '.($y@@@$r).' "
50 "$g \\_ | _/ "
51 "$g '-|-' "
52 "$g | "
53 )
54 info=(
55 "$f$user$d@$f$HOSTNAME"
56 "''${g}os$z $os"
57 "''${g}host$z $host"
58 "''${g}kernel$z $(uname -r)"
59 "''${g}uptime$z $uptime"
60 "''${g}pkgs$z $pkgs"
61 "''${g}memory$z $memory"
62 )
63
64 printf '\n'
65 for i in "''${!art[@]}"; do
66 printf ' %s%s %s%s\n' "''${art[$i]}" "$z" "''${info[$i]}" "$z"
67 done
68 printf '\n'
69 '';
70 };
71in {
72 home.packages = [ fetch ];
73
74 programs = {
75 eza.enable = true;
76
77 bash = {
78 enable = true;
79 shellAliases = {
80 l = "eza --git -s type";
81 ls = "l -l";
82 la = "l -la";
83 tree = "l --tree";
84 grep = "grep --color";
85
86 dev = "cd $HOME/documents/dev";
87 };
88
89 initExtra = ''
90 if [[ -z "''${TMUX:-}" && -z "''${SSH_CONNECTION:-}" && "$TERM" == foot* ]]; then
91 fetch
92 fi
93 '';
94 };
95 };
96}