#!/usr/bin/env bash usage() { cat <&2 $(help_synopsis "${BASE_SOURCE[0]}" "[options] ") --conf= Path for alternative nix-script.rc file. Default: ~/.nix-script.rc -l | --list-commands List all available commands -v Be verbose -d Debugging output (enables -v) -h Show this help and exit $(help_rcvars \ "RC_CONFIG - Path of your system configuration (git) directory" \ "RC_NIXPKGS - Path of your nixpkgs clone" ) $(help_end) EOS } RC=~/.nix-script.rc LIST_COMMANDS=0 VERBOSE=0 source $(dirname ${BASH_SOURCE[0]})/nix-utils.sh SHIFT_ARGS=0 # # Increase the SHIFT_ARGS variable # shift_one_more() { SHIFT_ARGS=$(( SHIFT_ARGS + 1 )) } # # Shift N times the arguments, so: # # shift_n 5 a b c d e f # # will print "f" # shift_n() { for n in `seq 0 $1`; do shift; done echo $* } # # Parse the arguments for this script # for cmd do case $cmd in --conf=*) RC=$(echo $cmd | sed 's,^--conf\=,,') dbg "RC = $RC" [[ ! -e $RC ]] && stderr "RC file '$RC' does not exist" && exit 1 shift_one_more ;; "--list-commands" ) LIST_COMMANDS=1 shift_one_more ;; "-l" ) LIST_COMMANDS=1 shift_one_more ;; "-v" ) export VERBOSE=1 stdout "Verbose now" shift_one_more ;; "-d") export VERBOSE=1 export DEBUG=1 stdout "Debugging enabled. Implicitely turned on verbosity" shift_one_more ;; "-h" ) usage exit 1 ;; * ) if [ ! -n $(script_for $cmd) ] then stderr "Unknown flag / command '$cmd'" exit 1 else if [ -z "$COMMAND" ] then stdout "Found command: '$cmd'" COMMAND=$cmd shift_one_more fi break fi esac done if [[ ! -f "$RC" ]] then dbg "No configuration file, setting up (empty) default values" RC_CONFIG="" RC_NIXPKGS="" RC_SWITCH_DEFAULT_TAG_FLAGS="" RC_SWITCH_DEFAULT_TAG_FLAGS_NIXPKGS="" else dbg "Configuration file found. Sourcing: '$RC'" source $RC fi dbg "RC_CONFIG = '$RC_CONFIG'" dbg "RC_NIXPKGS = '$RC_NIXPKGS'" if [ $LIST_COMMANDS -eq 1 ] then dbg "Listing commands" caller_util_list_subcommands_for "nix-script" exit 0 fi [ -z "$COMMAND" ] && stderr "No command given" && exit 1 dbg "Searching for script for '$COMMAND'" SCRIPT=$(script_for $COMMAND) dbg "Script is: $SCRIPT" # # Error checking whether the script is available and executable. # [ ! -f $SCRIPT ] && stderr "Not available: $COMMAND -> $SCRIPT" && exit 1 [[ ! -x $SCRIPT ]] && stderr "Not executeable: $SCRIPT" && exit 1 dbg "Parsing args for '$COMMAND'" SCRIPT_ARGS=$(shift_n $SHIFT_ARGS $*) # # execute the script with its arguments # stdout "Calling: '$SCRIPT $SCRIPT_ARGS'" RC=$RC RC_CONFIG=$RC_CONFIG RC_NIXPKGS=$RC_NIXPKGS exec bash $SCRIPT $SCRIPT_ARGS