mirror of
https://github.com/nix-community/home-manager
synced 2024-12-28 20:59:47 +01:00
b3a9fb9d05
In most cases where this function is used, suppressing only the standard output is more appropriate. Culling diagnostic output hides error messages and makes debugging more difficult and confusing. `$DRY_RUN_NULL`, which the `--silence` flag replaced, was used both for suppressing standard output on its own, and for doing so along with diagnostic output; however, when the `run` function was added this distinction was lost, and both outputs would be discarded. This reintroduces the needed functionality, and changes usages of `--silence` to `--quiet` where previously only standard output was suppressed, or where this should have probably been the case anyway. Change-Id: Ifb1b52a1d1eea0117261c782d686ad7c71b43162
127 lines
2.7 KiB
Bash
127 lines
2.7 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
#
|
|
# This file contains a number of utilities for use by the home-manager tool and
|
|
# the generated Home Manager activation scripts. No guarantee is made about
|
|
# backwards or forward compatibility.
|
|
#
|
|
|
|
# Sets up colors suitable for the `errorEcho`, `warnEcho`, and `noteEcho`
|
|
# functions.
|
|
#
|
|
# The check for terminal output and color support is heavily inspired by
|
|
# https://unix.stackexchange.com/a/10065.
|
|
#
|
|
# The setup respects the `NO_COLOR` environment variable.
|
|
function setupColors() {
|
|
normalColor=""
|
|
errorColor=""
|
|
warnColor=""
|
|
noteColor=""
|
|
|
|
# Enable colors for terminals, and allow opting out.
|
|
if [[ ! -v NO_COLOR && -t 1 ]]; then
|
|
# See if it supports colors.
|
|
local ncolors
|
|
ncolors=$(tput colors 2> /dev/null || echo 0)
|
|
|
|
if [[ -n "$ncolors" && "$ncolors" -ge 8 ]]; then
|
|
normalColor="$(tput sgr0)"
|
|
errorColor="$(tput bold)$(tput setaf 1)"
|
|
warnColor="$(tput setaf 3)"
|
|
noteColor="$(tput bold)$(tput setaf 6)"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
setupColors
|
|
|
|
function errorEcho() {
|
|
echo "${errorColor}$*${normalColor}"
|
|
}
|
|
|
|
function warnEcho() {
|
|
echo "${warnColor}$*${normalColor}"
|
|
}
|
|
|
|
function noteEcho() {
|
|
echo "${noteColor}$*${normalColor}"
|
|
}
|
|
|
|
function verboseEcho() {
|
|
if [[ -v VERBOSE ]]; then
|
|
echo "$*"
|
|
fi
|
|
}
|
|
|
|
function _i() {
|
|
local msgid="$1"
|
|
shift
|
|
|
|
# shellcheck disable=2059
|
|
printf "$(gettext "$msgid")\n" "$@"
|
|
}
|
|
|
|
function _ip() {
|
|
local msgid="$1"
|
|
local msgidPlural="$2"
|
|
local count="$3"
|
|
shift 3
|
|
|
|
# shellcheck disable=2059
|
|
printf "$(ngettext "$msgid" "$msgidPlural" "$count")\n" "$@"
|
|
}
|
|
|
|
function _iError() {
|
|
echo -n "${errorColor}"
|
|
_i "$@"
|
|
echo -n "${normalColor}"
|
|
}
|
|
|
|
function _iWarn() {
|
|
echo -n "${warnColor}"
|
|
_i "$@"
|
|
echo -n "${normalColor}"
|
|
}
|
|
|
|
function _iNote() {
|
|
echo -n "${noteColor}"
|
|
_i "$@"
|
|
echo -n "${normalColor}"
|
|
}
|
|
|
|
function _iVerbose() {
|
|
if [[ -v VERBOSE ]]; then
|
|
_i "$@"
|
|
fi
|
|
}
|
|
|
|
# Runs the given command on live run, otherwise prints the command to standard
|
|
# output.
|
|
#
|
|
# If given the command line option `--quiet`, then the command's standard output
|
|
# is sent to `/dev/null` on a live run.
|
|
#
|
|
# If given the command line option `--silence`, then the command's standard and
|
|
# error output is sent to `/dev/null` on a live run.
|
|
#
|
|
# The `--silence` and `--quiet` flags are mutually exclusive.
|
|
function run() {
|
|
if [[ $1 == '--quiet' ]]; then
|
|
local quiet=1
|
|
shift
|
|
elif [[ $1 == '--silence' ]]; then
|
|
local silence=1
|
|
shift
|
|
fi
|
|
|
|
if [[ -v DRY_RUN ]] ; then
|
|
echo "$@"
|
|
elif [[ -v quiet ]] ; then
|
|
"$@" > /dev/null
|
|
elif [[ -v silence ]] ; then
|
|
"$@" > /dev/null 2>&1
|
|
else
|
|
"$@"
|
|
fi
|
|
}
|