#!/usr/bin/env bash

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

function check {
  nix flake check
}

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 nixos:build {
  _nixos build "$@"
}

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

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

function update {
  nix flake update
}

function wsl:build {
  _home build wsl2
}

function wsl:switch {
  _home switch wsl2
}

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

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

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

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

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