provide-module root %∴ declare-option str-list root_globs .git .kakrc kakrc declare-option str project_root %sh{ echo "$PWD" } define-command root-discover %{ evaluate-commands %sh{ globs="$kak_opt_root_globs" dir="$PWD" while [ "$dir" != "/" ]; do for glob in $globs; do match=$(fd -H -td -1 --glob "$glob" "$dir" --max-depth 1 2>/dev/null | head -n1) if [ -n "$match" ]; then root="$match" break fi done dir="$(dirname "$dir")" done printf 'set-option global project_root "%s"\n' "$root" } } # project-specific configuration hook global BufCreate (.*/)?(\.kakrc\.local|\.kakrc\.local|\.kakrc) %{ set-option buffer filetype kak } try %{ source .kakrc } catch %{ try %{ source .kakrc.local } catch %{ try %{ source .local.kakrc } } } hook global KakBegin .* %{ # TODO: discover project root } ∴