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, lib,
... ...
}: let }: let
inherit (lib) types mkOption concatMapStringsSep mapAttrsToList; inherit (lib) types mkOption concatMapStringsSep;
soonix_lib = import ./. {inherit pkgs;}; soonix_lib = import ./. {inherit pkgs;};
inherit (soonix_lib) engines buildAllFiles; inherit (soonix_lib) engines buildAllFiles;
in { in {
@ -253,74 +253,70 @@ in {
builtins.addErrorContext "[soonix] while generating shell hook" builtins.addErrorContext "[soonix] while generating shell hook"
# sh # sh
'' ''
function _soonix() { CHECK_MODE=''${CHECK_MODE:-false}
CHECK_MODE=''${CHECK_MODE:-false} SKIP_GITIGNORE=''${SKIP_GITIGNORE:-false}
SKIP_GITIGNORE=''${SKIP_GITIGNORE:-false}
_soonix_log() { _soonix_log() {
local level="$1" local level="$1"
local hook="$2" local hook="$2"
local message="$3" local message="$3"
[[ "''${SOONIX_LOG-}" == "true" ]] && echo "$level [$hook]: $message" || true [[ "''${SOONIX_LOG-}" == "true" ]] && echo "$level [$hook]: $message" || true
} }
_soonix_add_to_gitignore() { _soonix_add_to_gitignore() {
local file="$1" local file="$1"
local gitignore=".gitignore" local gitignore=".gitignore"
if [[ ! -f "$gitignore" ]]; then if [[ ! -f "$gitignore" ]]; then
touch "$gitignore" 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
fi 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 # Insert the file path before the end comment
exit $status ${pkgs.gnused}/bin/sed -i "/# end soonix/i /$file" "$gitignore"
fi 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 = allFiles =
mapAttrsToList (name: hook: { lib.mapAttrsToList (name: hook: {
src = hook.generatedDerivation; src = hook.generatedDerivation;
path = hook.output; path = hook.output;
}) })
@ -419,12 +415,18 @@ in {
'') (builtins.attrNames hooks)} '') (builtins.attrNames hooks)}
;; ;;
update) update)
${generateShellHook} function _soonix() {
${generateShellHook}
}
_soonix
;; ;;
check) check)
CHECK_MODE=true CHECK_MODE=true
echo "Checking files..." echo "Checking files..."
${generateShellHook} function _soonix() {
${generateShellHook}
}
_soonix
;; ;;
esac esac
''; '';