Repository navigation
v0.4.0
-
Use
--block-policy-categories=LISTto select separate archive, temp, or output block controls
per INI file; unlisted categories use ordinary file controls. -
Fail before actions on invalid configuration globals and undefined selected or composed configs.
-
Reject command-line-only options and non-regular configuration targets; document directive scopes
in individual help entries and apply INI pager settings to listing output. -
Fix the user config location at the effective OS account home under
.config/xff/config;
environment variables cannot redirect trusted configuration. -
Reject missing explicit
--xffrcfiles and unreadable existing configuration, including
dangling symlinks and requested skips. Missing automatic system/user files remain normal. -
Evaluate
.xffrcadmission controls in requested selector order, including composed configs. -
Make
--no-system-configand--no-user-configexclude named sections while retaining existing
globals by default.--no-configcombines those exclusions and disables.xffrcautoloading. -
Add config-only
--require-system-globals/--no-require-system-globalsand
--require-user-globals/--no-require-user-globalspairs. Each pair appears once per permitted
file, in unsectioned globals; the system decision wins for user globals. Optional globals are
excluded only when a skip is requested. Missing automatic files remain normal. -
Add config-selectable
--allow-xffrc/--no-allow-xffrccontrols for explicitly named config
files, subject to the system policy gate and unavailable to the file being admitted. -
Document every config-only allow/deny control individually in
--help=config, including its
scope, permitted location, precedence, and multiplicity. -
Warn about overriding the same setting more than once within one logical config section while
preserving last-value-wins behavior. Deliberately accumulating settings, expression primaries,
separate sections and tiers, and all command-line repetitions remain unaffected. -
Apply named configuration and explicitly loaded config files at each command-line
selector's exact position instead of flattening them ahead of all CLI options. -
Defer regex matcher binding until the final configuration has selected grammar
and case, avoiding premature or duplicate compilation. -
Add
--re2and--pcreas direct regex-engine selectors, plus BSD/macOS
find-compatible-Eusing the configured extended grammar. -
Add the always-available
--regextype=EREengine for native POSIX extended
regular expressions, with platform locale semantics and explicit NUL handling. -
Add distinct root-spanning traversal orders:
--sort=rootssorts only the search operands,
while--sort=globalsorts the operands and walks each tree in deterministic depth-first order.
Clarify the ordering, directory read-ahead, result buffering, post-order, and score-ranking
contracts throughout the generated reference and parallel-walk design. -
Honor the selected path encoding in tree-comparison status records, including non-UTF-8 path
bytes, instead of emitting raw relative paths independently of the output configuration. -
Apply every matching system-policy safety-class denial to mixed config lines, so a destructive
primary cannot be hidden from an@destructiverule by a sensitive primary on the same line. -
Clarify concurrency and matching controls, including worker defaults and
-exectiming,
filesystem-native versus explicit case folding, block-size units, and regex grammar scope.
Install
Run either or both install blocks: the lean binary is installed as xff, and the all-features
binary as xff_full. Ensure ${HOME}/.local/bin is in PATH; the generated manual pages are
installed below ${HOME}/.local/share/man.
Release files without an archive suffix, such as xff-linux-x86_64, are the actual stripped
platform executables and can be downloaded and installed directly. Each matching .tar.zst
contains that same stripped executable together with its separate debug-information file.
Install on Linux x86_64:
XFF_VERSION=v0.4.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-linux-x86_64"
grep ' xff-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff-linux-x86_64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-linux-x86_64"
grep ' xff_full-linux-x86_64$' SHA256SUMS | sha256sum -c -
install -m 0755 xff_full-linux-x86_64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"Install on macOS:
XFF_VERSION=v0.4.0
XFF_PATH_BIN="${HOME}/.local/bin"
XFF_PATH_MAN="${HOME}/.local/share/man/man1"
XFF_PATH_TEMP="$(mktemp -d "${TMPDIR:-/tmp}/xff-install.XXXXXX")"
trap 'rm -rf "${XFF_PATH_TEMP}"' EXIT
mkdir -p "${XFF_PATH_BIN}"
mkdir -p "${XFF_PATH_MAN}"
cd "${XFF_PATH_TEMP}"
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/SHA256SUMS"
# Install xff.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff-macos-arm64"
grep ' xff-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff-macos-arm64 "${XFF_PATH_BIN}/xff"
"${XFF_PATH_BIN}/xff" --pager=never --man > "${XFF_PATH_MAN}/xff.1"
# Install xff_full.
curl -fLO "https://github.com/mboworks/xff/releases/download/${XFF_VERSION}/xff_full-macos-arm64"
grep ' xff_full-macos-arm64$' SHA256SUMS | shasum -a 256 -c -
install -m 0755 xff_full-macos-arm64 "${XFF_PATH_BIN}/xff_full"
"${XFF_PATH_BIN}/xff_full" --pager=never --man > "${XFF_PATH_MAN}/xff_full.1"