#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

function check {
  nix flake check
}

function collect-garbage {
  nix-collect-garbage -d
  sudo nix-collect-garbage -d
}

function format {
  nix fmt flake.nix home hosts lib modules
}

function help {
  printf "%s <task> [args]\n\nTasks:\n" "$0"

  compgen -A function | grep -v "^_" | cat -n

  printf "\nExtended help:\n  Each task has comments for general usage\n"
}

function home-manager:build {
  _home build "$@"
}

function home-manager:switch {
  _home switch "$@"
}

function nixos:build {
  _nixos build "$@"
}

function nixos:switch {
  _nixos switch "$@"
}

function nixos:test {
  _nixos test "$@"
}

function update {
  nix flake update
}

function _home {
  local command="$1"
  shift 1

  NIXPKGS_ALLOW_UNFREE=1 home-manager "$command" \
    --extra-experimental-features flakes \
    --extra-experimental-features nix-command \
    --flake ".#$(whoami)@$(hostname)" \
    --impure "$@"
}

function _nixos {
  local command="$1"
  shift 1

  sudo nixos-rebuild "$command" --flake . "$@"
}

TIMEFORMAT=$'\nTask completed in %3lR'
time "${@:-help}"