fix: tricks.fish double-source and paru/yay wrapper duplication #136
@@ -28,84 +28,38 @@ function __fish_config_sync_logging --description 'Sync C5 logging state: sentin
|
|||||||
set config_home "$HOME/.config"
|
set config_home "$HOME/.config"
|
||||||
end
|
end
|
||||||
set -l sentinel "$config_home/fish/.logging_disabled"
|
set -l sentinel "$config_home/fish/.logging_disabled"
|
||||||
set -l paru_wrapper "$HOME/.local/bin/paru"
|
|
||||||
set -l yay_wrapper "$HOME/.local/bin/yay"
|
|
||||||
set -l wrapper_version 1
|
|
||||||
|
|
||||||
if __fish_config_op_enabled (status current-function)
|
if __fish_config_op_enabled (status current-function)
|
||||||
# Logging enabled: remove sentinel and regenerate wrappers if binaries exist
|
# Logging enabled: remove sentinel
|
||||||
rm -f $sentinel
|
rm -f $sentinel
|
||||||
|
|
||||||
# Restart tmux pipe-pane for the current pane if inside tmux
|
# Restart tmux pipe-pane for the current pane if inside tmux
|
||||||
_tmux_pipe_log
|
_tmux_pipe_log
|
||||||
|
|
||||||
if test -x /usr/bin/paru
|
|
||||||
mkdir -p (dirname $paru_wrapper)
|
|
||||||
printf '%s\n' \
|
|
||||||
'#!/usr/bin/env bash' \
|
|
||||||
"# paru-wrapper-version: $wrapper_version" \
|
|
||||||
'# Auto-generated by conf.d/paru-wrapper.fish — do not edit by hand.' \
|
|
||||||
'# Tees paru output to a timestamped log file and prunes old ones.' \
|
|
||||||
'set -o pipefail' \
|
|
||||||
'' \
|
|
||||||
'log_dir="${SCROLLBACK_HISTORY_DIR:-$HOME/.terminal_history}"' \
|
|
||||||
'mkdir -p "$log_dir"' \
|
|
||||||
'log_file="$log_dir/paru_$(date +%Y-%m-%d_%H-%M-%S).log"' \
|
|
||||||
'' \
|
|
||||||
'/usr/bin/paru "$@" 2>&1 | tee "$log_file"' \
|
|
||||||
'' \
|
|
||||||
'max_files="${SCROLLBACK_HISTORY_MAX_FILES:-100}"' \
|
|
||||||
'mapfile -t logs < <(ls -1t "$log_dir"/paru_*.log 2>/dev/null)' \
|
|
||||||
'excess=$(( ${#logs[@]} - max_files ))' \
|
|
||||||
'for (( i = ${#logs[@]} - 1; i >= ${#logs[@]} - excess && i >= 0; i-- )); do' \
|
|
||||||
' rm -f "${logs[$i]}"' \
|
|
||||||
'done' \
|
|
||||||
>$paru_wrapper
|
|
||||||
chmod +x $paru_wrapper
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -x /usr/bin/yay
|
|
||||||
mkdir -p (dirname $yay_wrapper)
|
|
||||||
printf '%s\n' \
|
|
||||||
'#!/usr/bin/env bash' \
|
|
||||||
"# yay-wrapper-version: $wrapper_version" \
|
|
||||||
'# Auto-generated by conf.d/yay-wrapper.fish — do not edit by hand.' \
|
|
||||||
'# Tees yay output to a timestamped log file and prunes old ones.' \
|
|
||||||
'set -o pipefail' \
|
|
||||||
'' \
|
|
||||||
'log_dir="${SCROLLBACK_HISTORY_DIR:-$HOME/.terminal_history}"' \
|
|
||||||
'mkdir -p "$log_dir"' \
|
|
||||||
'log_file="$log_dir/yay_$(date +%Y-%m-%d_%H-%M-%S).log"' \
|
|
||||||
'' \
|
|
||||||
'/usr/bin/yay "$@" 2>&1 | tee "$log_file"' \
|
|
||||||
'' \
|
|
||||||
'max_files="${SCROLLBACK_HISTORY_MAX_FILES:-100}"' \
|
|
||||||
'mapfile -t logs < <(ls -1t "$log_dir"/yay_*.log 2>/dev/null)' \
|
|
||||||
'excess=$(( ${#logs[@]} - max_files ))' \
|
|
||||||
'for (( i = ${#logs[@]} - 1; i >= ${#logs[@]} - excess && i >= 0; i-- )); do' \
|
|
||||||
' rm -f "${logs[$i]}"' \
|
|
||||||
'done' \
|
|
||||||
>$yay_wrapper
|
|
||||||
chmod +x $yay_wrapper
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
# Logging disabled: create sentinel and remove any generated wrappers
|
# Logging disabled: create sentinel
|
||||||
mkdir -p (dirname $sentinel)
|
mkdir -p (dirname $sentinel)
|
||||||
touch $sentinel
|
touch $sentinel
|
||||||
|
|
||||||
if test -f $paru_wrapper
|
|
||||||
and grep -q "# paru-wrapper-version:" $paru_wrapper 2>/dev/null
|
|
||||||
rm -f $paru_wrapper
|
|
||||||
end
|
|
||||||
|
|
||||||
if test -f $yay_wrapper
|
|
||||||
and grep -q "# yay-wrapper-version:" $yay_wrapper 2>/dev/null
|
|
||||||
rm -f $yay_wrapper
|
|
||||||
end
|
|
||||||
|
|
||||||
# Stop tmux pipe-pane for the current pane if inside tmux
|
# Stop tmux pipe-pane for the current pane if inside tmux
|
||||||
if set -q TMUX
|
if set -q TMUX
|
||||||
tmux pipe-pane 2>/dev/null
|
tmux pipe-pane 2>/dev/null
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Delegate paru/yay wrapper (re)generation and removal to the canonical
|
||||||
|
# generators. They resolve the real binary via __fish_real_command
|
||||||
|
# (never /usr/bin-assumed) and independently gate on their own C2/C5
|
||||||
|
# keys, so sourcing them here covers both the enabled-regenerate and
|
||||||
|
# disabled-remove cases without duplicating that logic. Previously this
|
||||||
|
# function carried its own inferior copy (tee instead of a PTY, no
|
||||||
|
# progress-bar rendering, hard-coded /usr/bin/paru|yay), which fought
|
||||||
|
# the canonical generator for the wrapper file on every version-marker
|
||||||
|
# mismatch. See startup-latency-JOB-BRIEF-FINDINGS.md §2.
|
||||||
|
#
|
||||||
|
# Routed through _fish_source_scoped: both files `return` early on
|
||||||
|
# several guard checks, and a sourced `return` exits the *calling*
|
||||||
|
# function, which would otherwise abort this function and skip
|
||||||
|
# whichever of paru/yay hadn't run yet.
|
||||||
|
_fish_source_scoped "$__fish_config_dir/conf.d/paru-wrapper.fish"
|
||||||
|
_fish_source_scoped "$__fish_config_dir/conf.d/yay-wrapper.fish"
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
# Copyright (C) 2026 Rootiest
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
# SYNOPSIS
|
||||||
|
# _fish_source_scoped <file>
|
||||||
|
#
|
||||||
|
# DESCRIPTION
|
||||||
|
# Sources <file> inside its own function-call boundary. `source` runs
|
||||||
|
# in the caller's own scope, so a bare `return` in a sourced file --
|
||||||
|
# used by several conf.d guards as an early exit -- would otherwise
|
||||||
|
# unwind whatever function called `source` directly, not just the
|
||||||
|
# sourced file. Calling through this helper contains it to here.
|
||||||
|
#
|
||||||
|
# ARGUMENTS
|
||||||
|
# file Path to the fish script to source
|
||||||
|
#
|
||||||
|
# EXIT STATUS
|
||||||
|
# 0 File does not exist (nothing to do)
|
||||||
|
# Exit status of the sourced file otherwise
|
||||||
|
#
|
||||||
|
# EXAMPLE
|
||||||
|
# _fish_source_scoped $__fish_config_dir/conf.d/paru-wrapper.fish
|
||||||
|
function _fish_source_scoped --argument-names file
|
||||||
|
test -f $file; or return 0
|
||||||
|
source $file
|
||||||
|
end
|
||||||
Reference in New Issue
Block a user