set shell sh
set shellopts '-eu'
set ifs "\n"

set hidden
set icons
set preview
set watch
set mouse
set incsearch
set incfilter
set ignorecase
set noignoredia
set dirfirst
set mergeindicators
set scrolloff 5
set sortby name
set sizeunits binary
set tabstop 2
set ratios 1:3:5

set previewer ~/.config/stackops/settings/lf/linux/exe/previewer.sh

set copyfmt "\033[38;2;80;250;123m"
set cursoractivefmt "\033[38;2;248;248;242;48;2;68;71;90m"
set cursorparentfmt "\033[38;2;248;248;242;48;2;68;71;90m"
set cursorpreviewfmt "\033[38;2;189;147;249m"
set cutfmt "\033[38;2;255;85;85m"
set errorfmt "\033[38;2;248;248;242;48;2;255;85;85m"
set promptfmt "\033[38;2;189;147;249m%u@%h\033[0m:\033[38;2;139;233;253m%d\033[0m\033[1m%f\033[0m"
set selectfmt "\033[38;2;241;250;140m"
set tagfmt "\033[38;2;139;233;253m"
set visualfmt "\033[38;2;139;233;253m"

cmd edit-selected ${{
    set -f
    hx $fx
}}

cmd open &{{
    set -f
    case "$f" in
        *.py|*.rs|*.toml|*.yaml|*.yml|*.json|*.js|*.ts|*.tsx|*.jsx|*.html|*.css|*.md|*.txt|*.sh|*.bash|*.zsh|*.ps1)
            lf -remote "send $id edit-selected"
            ;;
        *)
            case "$(file --mime-type -Lb -- "$f")" in
                text/*)
                    lf -remote "send $id edit-selected"
                    ;;
                *)
                    for path in $fx; do
                        "$OPENER" "$path" >/dev/null 2>&1 &
                    done
                    ;;
            esac
            ;;
    esac
}}

cmd toggle-preview-max &{{
    if [ "$lf_ratios" = "1:999" ]; then
        lf -remote "send $id :set ratios 1:3:5; set preview"
    else
        lf -remote "send $id :set preview; set ratios 1:999"
    fi
}}

cmd repo-root &{{
    root="$(git rev-parse --show-toplevel)"
    escaped_root="$(printf '%s' "$root" | sed 's/\\/\\\\/g; s/"/\\"/g')"
    lf -remote "send $id cd \"$escaped_root\""
}}

cmd quick-look &{{
    if [ "$(uname -s)" != "Darwin" ]; then
        exit 0
    fi
    set -f
    qlmanage -p $fx >/dev/null 2>&1
}}

cmd fullscreen-preview ${{
    set -f
    uv run --isolated --no-project --python 3.14 --with stackops \
        "$HOME/.config/stackops/settings/yazi/scripts/fullscreen_preview.py" \
        __YAZI_HOVERED__ "$f" __YAZI_SELECTED__ $fs
}}

cmd interactive-view ${{
    set -f
    uv run --isolated --no-project --python 3.14 --with stackops \
        "$HOME/.config/stackops/settings/yazi/scripts/interactive_view.py" \
        __YAZI_HOVERED__ "$f" __YAZI_SELECTED__ $fs
}}

cmd open-default ${{
    set -f
    uv run --isolated --no-project --python 3.14 --with stackops \
        "$HOME/.config/stackops/settings/yazi/scripts/open_default_app.py" \
        __YAZI_HOVERED__ "$f" __YAZI_SELECTED__ $fs
}}

cmd compress-selected ${{
    set -f
    uv run --isolated --no-project --python 3.14 --with stackops \
        "$HOME/.config/stackops/settings/yazi/scripts/compress_selected.py" \
        __YAZI_HOVERED__ "$f" __YAZI_SELECTED__ $fs
}}

cmd decrypt ${{
    case "$f" in
        *.gpg) gpg --output "${f%.gpg}" --decrypt "$f" ;;
        *) printf 'Expected a .gpg file: %s\n' "$f" >&2; exit 1 ;;
    esac
}}

cmd copy-paths &{{
    set -f
    printf '%s\n' $fx | cb cp0
}}

map "!" $$SHELL
map T set preview!
map M toggle-preview-max

map F $~/.config/stackops/scripts/wrap_stackops fire "$f"
map Pc $~/.config/stackops/scripts/wrap_stackops seek "$f"
map Pf $~/.config/stackops/scripts/wrap_stackops seek -f "$f"
map Pe $~/.config/stackops/scripts/wrap_stackops seek -e "$f"
map Ps $~/.config/stackops/scripts/wrap_stackops seek -s "$f"
map Pa $~/.config/stackops/scripts/wrap_stackops seek -a "$f"

map b $bat "$f"
map e $hx "$f"
map v fullscreen-preview
map V interactive-view
map n $nano "$f"
map gr repo-root
map <c-p> quick-look

map Rv &code "$f"
map Ro open-default
map Rh $~/.config/stackops/scripts/wrap_stackops utils file edit "$f"
map Rp $~/.config/stackops/scripts/wrap_stackops preview "$f"
map Rf $~/.config/stackops/scripts/wrap_stackops fire "$f"
map RF $~/.config/stackops/scripts/wrap_stackops fire -i "$f"
map Rc $code "$f"

map o
map oc compress-selected
map od $ouch decompress "$f"
map os $gpg --output "$f.gpg" --symmetric "$f"
map oa $gpg --output "$f.gpg" --default-recipient-self --encrypt "$f"
map oS decrypt
map oA decrypt

map go $uv run --isolated --no-project --python 3.14 --with stackops "$HOME/.config/stackops/settings/yazi/scripts/open_db_readonly.py" "$f"
map gu $uv run --isolated --no-project --python 3.14 --with stackops "$HOME/.config/stackops/settings/yazi/scripts/open_db_readonly.py" --ui "$f"

map y :copy-paths; copy
map ct $uv run --isolated --no-project --python 3.14 --with stackops "$HOME/.config/stackops/settings/yazi/scripts/copy_file_content.py" "$f"

map x cut
map c
map cc clear
map oo open
map <enter> open
map . set hidden!
