Compare commits

..

2 commits

Author SHA1 Message Date
bfe628020c 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 19:26:59 +01:00
aef4bc1a26
chore(module): wrap soonix script already in shell hook
makes it more flexible and should thus work everywhere (also in
pkgs.mkShell shellHook)
2026-01-21 19:24:23 +01:00

View file

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