Compare commits

..

1 commit

Author SHA1 Message Date
880ebb6e42 Merge branch 'feat/cli' into 'main'
feat!: add cli with update and list subcommands + gitignore param

See merge request TECHNOFAB/soonix!3
2026-01-21 17:11:37 +01:00

View file

@ -4,7 +4,7 @@
lib,
...
}: let
inherit (lib) types mkOption concatMapStringsSep mapAttrsToList;
inherit (lib) types mkOption concatMapStringsSep;
soonix_lib = import ./. {inherit pkgs;};
inherit (soonix_lib) engines buildAllFiles;
in {
@ -253,74 +253,70 @@ in {
builtins.addErrorContext "[soonix] while generating shell hook"
# sh
''
function _soonix() {
CHECK_MODE=''${CHECK_MODE:-false}
SKIP_GITIGNORE=''${SKIP_GITIGNORE:-false}
CHECK_MODE=''${CHECK_MODE:-false}
SKIP_GITIGNORE=''${SKIP_GITIGNORE:-false}
_soonix_log() {
local level="$1"
local hook="$2"
local message="$3"
[[ "''${SOONIX_LOG-}" == "true" ]] && echo "$level [$hook]: $message" || true
}
_soonix_log() {
local level="$1"
local hook="$2"
local message="$3"
[[ "''${SOONIX_LOG-}" == "true" ]] && echo "$level [$hook]: $message" || true
}
_soonix_add_to_gitignore() {
local file="$1"
local gitignore=".gitignore"
_soonix_add_to_gitignore() {
local file="$1"
local gitignore=".gitignore"
if [[ ! -f "$gitignore" ]]; then
touch "$gitignore"
fi
# Check if file is already in gitignore
if ! grep -Fxq "/$file" "$gitignore"; then
# Add sentinel comments if not present
if ! grep -q "# soonix" "$gitignore"; then
echo "" >> "$gitignore"
echo "# soonix" >> "$gitignore"
echo "# end soonix" >> "$gitignore"
fi
# Insert the file path before the end comment
${pkgs.gnused}/bin/sed -i "/# end soonix/i /$file" "$gitignore"
fi
}
_soonix_updated=()
_soonix_failed=()
_soonix_uptodate=()
${runHooks}
local output=$'\E[msoonix:\E[38;5;8m'
local status=0
if [[ ''${#_soonix_updated[@]} -gt 0 ]]; then
output="$output [updated: ''${_soonix_updated[*]}]" >&2
if [[ "$CHECK_MODE" == "true" ]]; then
status=2
fi
fi
if [[ ''${#_soonix_uptodate[@]} -gt 0 ]]; then
output="$output [unchanged: ''${_soonix_uptodate[*]}]" >&2
fi
if [[ ''${#_soonix_failed[@]} -gt 0 ]]; then
output="$output [failed: ''${_soonix_failed[*]}]" >&2
status=1
if [[ ! -f "$gitignore" ]]; then
touch "$gitignore"
fi
printf "%s\E[m\n" "$output" >&2
# Check if file is already in gitignore
if ! grep -Fxq "/$file" "$gitignore"; then
# Add sentinel comments if not present
if ! grep -q "# soonix" "$gitignore"; then
echo "" >> "$gitignore"
echo "# soonix" >> "$gitignore"
echo "# end soonix" >> "$gitignore"
fi
if [[ $status -ne 0 ]]; then
exit $status
# Insert the file path before the end comment
${pkgs.gnused}/bin/sed -i "/# end soonix/i /$file" "$gitignore"
fi
}
_soonix
unset _soonix
_soonix_updated=()
_soonix_failed=()
_soonix_uptodate=()
${runHooks}
local output=$'\E[msoonix:\E[38;5;8m'
local status=0
if [[ ''${#_soonix_updated[@]} -gt 0 ]]; then
output="$output [updated: ''${_soonix_updated[*]}]" >&2
if [[ "$CHECK_MODE" == "true" ]]; then
status=2
fi
fi
if [[ ''${#_soonix_uptodate[@]} -gt 0 ]]; then
output="$output [unchanged: ''${_soonix_uptodate[*]}]" >&2
fi
if [[ ''${#_soonix_failed[@]} -gt 0 ]]; then
output="$output [failed: ''${_soonix_failed[*]}]" >&2
status=1
fi
printf "%s\E[m\n" "$output" >&2
if [[ $status -ne 0 ]]; then
exit $status
fi
'';
allFiles =
mapAttrsToList (name: hook: {
lib.mapAttrsToList (name: hook: {
src = hook.generatedDerivation;
path = hook.output;
})
@ -419,12 +415,18 @@ in {
'') (builtins.attrNames hooks)}
;;
update)
${generateShellHook}
function _soonix() {
${generateShellHook}
}
_soonix
;;
check)
CHECK_MODE=true
echo "Checking files..."
${generateShellHook}
function _soonix() {
${generateShellHook}
}
_soonix
;;
esac
'';