greenhouse

kore

my public infrastructure monorepo

git clone [email protected]:kore.git

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}