From aef4bc1a26e3228aadcb4e0fbc58d8bdb39c29f3 Mon Sep 17 00:00:00 2001 From: technofab Date: Wed, 21 Jan 2026 19:24:23 +0100 Subject: [PATCH] chore(module): wrap soonix script already in shell hook makes it more flexible and should thus work everywhere (also in pkgs.mkShell shellHook) --- lib/module.nix | 124 ++++++++++++++++++++++++------------------------- 1 file changed, 61 insertions(+), 63 deletions(-) diff --git a/lib/module.nix b/lib/module.nix index 3ea44aa..36273fe 100644 --- a/lib/module.nix +++ b/lib/module.nix @@ -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 '';