summaryrefslogtreecommitdiffstats
path: root/modules/by-name/ni/nix/nix_wrapper.sh
blob: 7582ec8a56354ee0ff8c14f8247b77cf46a75d64 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#! /usr/bin/env sh

set -eu
_NIX_WRAPPER_FALLBACK="${_NIX_WRAPPER_FALLBACK-false}"

me="$(basename "$0")"

if [ "$_NIX_WRAPPER_FALLBACK" = "true" ]; then
    # Allow skipping the size check.
    "$me" "$@"
else
    usage="$(btrfs filesystem usage /nix --raw 2>/dev/null)"
    avail="$(echo "$usage" | grep 'Device size:' | cut -f 3 | sed 's/ //g')"
    used="$(echo "$usage" | grep 'Used:' | cut -f 4 | head -n 1 | sed 's/ //g')"
    perc="$(printf "scale=4\n%d / %d\n" "$used" "$avail" | bc)"
    perc="$(printf "scale=2\n%s * 100\n" "0$perc" | bc)"

    if test "$(printf "%s >= 20\n" "$perc" | bc)" = "1"; then
        "$me" "$@"
    else
        echo "Not enough space free, in nix store: Only, $perc% is still free."
        exit 3
    fi
fi

# vim: ft=sh