Merge remote-tracking branch 'origin/main' into refactor/shared-color-palette

# Conflicts:
#	tests/functional.fish
This commit is contained in:
2026-09-08 01:43:01 -04:00
69 changed files with 1490 additions and 382 deletions
+19 -65
View File
@@ -28,84 +28,38 @@ function __fish_config_sync_logging --description 'Sync C5 logging state: sentin
set config_home "$HOME/.config"
end
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)
# Logging enabled: remove sentinel and regenerate wrappers if binaries exist
# Logging enabled: remove sentinel
rm -f $sentinel
# Restart tmux pipe-pane for the current pane if inside tmux
_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
# Logging disabled: create sentinel and remove any generated wrappers
# Logging disabled: create sentinel
mkdir -p (dirname $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
if set -q TMUX
tmux pipe-pane 2>/dev/null
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
+141
View File
@@ -0,0 +1,141 @@
# Copyright (C) 2026 Rootiest
# SPDX-License-Identifier: AGPL-3.0-or-later
# SYNOPSIS
# __fish_help_header <name> [args...]
#
# DESCRIPTION
# Prints <name>'s man-page comment header as a help menu on stdout.
# Intended as the first statement of a user-facing function's body:
#
# __fish_help_header (status current-function) $argv; and return 0
#
# Returns 1 -- printing nothing -- ONLY when args[1] is not a help flag.
# Every other outcome, including an unreadable or headerless source
# file, prints something and returns 0. That asymmetry is load-bearing:
# a return of 1 means "run the real body", and the real body of upgrade
# is `paru -Syu --noconfirm`. A parse failure must never return 1.
#
# Only args[1] is inspected, never the whole list. wake-lock, bkg,
# split and spwin take a command to run as their arguments, so
# scanning all of $argv would make `wake-lock rsync --help` print
# wake-lock's own help instead of running rsync.
#
# The header is read from the caller's source at call time rather than
# from the generated manual, so it cannot go stale between a header
# edit and a docs rebuild.
#
# ARGUMENTS
# name The calling function's name, from (status current-function)
# args... The caller's $argv, forwarded verbatim
#
# EXIT STATUS
# 0 Help was printed, including the degraded fallback
# 1 args[1] is not -h/--help; the caller should carry on
#
# EXAMPLE
# __fish_help_header (status current-function) $argv; and return 0
#
# NOTES
# Section labels are those of the manual SSOT parser in
# docs/manualtools.py. CATEGORY, COMPONENT and DEPENDENCIES are build
# metadata and are suppressed; SYNOPSIS renders as USAGE and EXAMPLE as
# EXAMPLES.
function __fish_help_header --argument-names name
# First argument only -- see DESCRIPTION.
contains -- "$argv[2]" -h --help; or return 1
set -l c_ttl (set_color --bold)
set -l c_sec (set_color --bold brblue)
set -l c_rst (set_color normal)
set -l miss " No documentation header found. Try: help config $name"
set -l file (functions -D -- $name 2>/dev/null)
if not test -f "$file"
# Quoted: set_color yields an EMPTY LIST under TERM=dumb, and an
# unquoted empty list in a concatenation annihilates the whole
# word -- the title line would silently vanish wherever colour is
# off, which is exactly where a test would be reading it.
echo "$c_ttl$name$c_rst"
echo $miss
return 0
end
# Collect the contiguous comment run directly above `function <name>`,
# walking backwards. This resolves multi-header files (fish-deps, gi,
# y) without reimplementing manualtools._block_identity, and is more
# accurate at runtime: in dops.fish it finds the header above
# `function docker` rather than attributing it to the file stem.
# One blank separator line is tolerated -- sponge_filter_secrets.fish
# is the only file that has one, and JOB-BRIEF-FINDINGS.md records it
# so this skip is not mistaken for dead code.
set -l lines (string split \n -- (command cat $file))
set -l pat '^\s*function\s+'(string escape --style=regex -- $name)'(\s|$)'
set -l start 0
for i in (seq (count $lines))
if string match -qr -- $pat $lines[$i]
set start $i
break
end
end
set -l header
if test $start -gt 1
set -l j (math $start - 1)
if test -z (string trim -- "$lines[$j]")
set j (math $j - 1)
end
while test $j -ge 1; and string match -q '#*' -- $lines[$j]
set -p header $lines[$j]
set j (math $j - 1)
end
end
# Render. Comment lines before the first `# LABEL` -- the copyright
# preamble -- carry no label and are dropped, matching
# manualtools._header_blocks.
set -l skip CATEGORY COMPONENT DEPENDENCIES
set -l label ""
set -l out
for line in $header
set -l m (string match -r -- '^#\s+([A-Z][A-Z ]*[A-Z])\s*$' $line)
if set -q m[2]
set label $m[2]
contains -- $label $skip; and continue
set -l shown (string replace SYNOPSIS USAGE -- $label)
set shown (string replace EXAMPLE EXAMPLES -- $shown)
# One blank line before a heading, never two: the header's own
# `#` separator has usually already emitted one.
if set -q out[1]; and test -n (string trim -- "$out[-1]")
set -a out ""
end
set -a out "$c_sec$shown$c_rst"
continue
end
test -n "$label"; or continue
contains -- $label $skip; and continue
set -l body (string sub -s 2 -- $line)
if string match -q ' *' -- $body
set -a out " "(string sub -s 4 -- $body)
else
set -a out (string trim -- $body)
end
end
# Trim the trailing blank separator, mirroring
# manualtools._trailing_blanks.
while set -q out[-1]; and test -z (string trim -- "$out[-1]")
set -e out[-1]
end
echo "$c_ttl$name$c_rst"
if test (count $out) -eq 0
echo $miss
else
# out[1] is always a heading -- a body line cannot precede the
# first label -- so this blank is never doubled.
echo ""
printf '%s\n' $out
end
return 0
end
+26
View File
@@ -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
+2
View File
@@ -23,6 +23,8 @@
# bd-pull myuser/myproject
# bd-pull rootiest/fish-config
function bd-pull --description 'Pull new Gitea issues into local Beads and link them'
__fish_help_header (status current-function) $argv; and return 0
if not set -q argv[1]; echo "Need repo owner/name"; return 1; end
if not set -q GITEA_TOKEN; echo "\$GITEA_TOKEN not set"; return 1; end
+2
View File
@@ -23,6 +23,8 @@
# EXAMPLE
# bkg firefox
function bkg --description 'Execute bkg'
__fish_help_header (status current-function) $argv; and return 0
# Check if a command was provided as an argument.
if test -z "$argv[1]"
__fish_palette
+2
View File
@@ -21,6 +21,8 @@
# EXAMPLE
# branch feature/new-ui
function branch --description 'Switch to or create a git branch'
__fish_help_header (status current-function) $argv; and return 0
if not git rev-parse --is-inside-work-tree >/dev/null 2>&1
echo "Not a git repo."
return 1
+5
View File
@@ -11,8 +11,13 @@
# Backwards-compatibility wrapper that delegates to fish-deps status to
# report which fish shell dependencies are installed or missing.
#
# EXIT STATUS
# Exit status of `fish-deps status`
#
# EXAMPLE
# check_fish_deps
function check_fish_deps --description 'Check all fish-related dependencies'
__fish_help_header (status current-function) $argv; and return 0
fish-deps status
end
+5
View File
@@ -12,8 +12,13 @@
# README.md, ensuring all features and examples are accurate and pruning
# obsolete content.
#
# EXIT STATUS
# Exit status of the `claude` invocation
#
# EXAMPLE
# claude-docs
function claude-docs --description 'Claude-code: Sync README with recent changes'
__fish_help_header (status current-function) $argv; and return 0
claude "Analyze the recent changes and update the README.md to ensure all features, setup instructions, and examples are 100% accurate. Prune any obsolete information."
end
+5
View File
@@ -12,8 +12,13 @@
# branch, write a Conventional Commit, run verification, push, and open a
# pull request with a manual verification checklist.
#
# EXIT STATUS
# Exit status of the `claude` invocation
#
# EXAMPLE
# claude-pr
function claude-pr --description 'Claude-code: New branch, commit, push, and PR'
__fish_help_header (status current-function) $argv; and return 0
claude "Act as a senior engineer. Execute this sequence: 1. Create a new git branch (kebab-case). 2. Stage changes and write a Conventional Commit message. 3. Self-verify the changes by running relevant build/test commands or linting. 4. Push to remote. 5. Create a PR to 'main' including a summary of changes and a 'Manual Verification' section containing a Markdown checklist (- [ ]) of specific, bite-sized steps required to manually verify the functionality."
end
+6
View File
@@ -11,9 +11,15 @@
# Identifies and removes Arch Linux orphan packages using pacman. Logs
# package names and versions to ~/.removed_orphans before removal.
#
# EXIT STATUS
# 0 No orphans found, or orphans removed successfully
# Nonzero `sudo pacman -Rns` failed
#
# EXAMPLE
# cleanup
function cleanup --description 'Log orphans to ~/.removed_orphans and remove them'
__fish_help_header (status current-function) $argv; and return 0
set -l orphans (pacman -Qtdq)
if test -n "$orphans"
echo "📝 Logging orphans to ~/.removed_orphans..."
+41
View File
@@ -0,0 +1,41 @@
# Copyright (C) 2026 Rootiest
# SPDX-License-Identifier: AGPL-3.0-or-later
# CATEGORY
# 12-ai-and-developer-tools
#
# DEPENDENCIES
# dops
#
# SYNOPSIS
# docker [subcommand] [args...]
#
# DESCRIPTION
# Wrapper for docker that intercepts the ps subcommand and redirects it to
# the dops function for enhanced container listing. All other subcommands,
# and a bare invocation with no subcommand, are passed through to the real
# docker binary.
#
# ARGUMENTS
# subcommand Docker subcommand (ps is redirected to dops)
# args... Arguments forwarded to docker or dops
#
# EXIT STATUS
# Exit status of dops (for ps), or of the real docker binary otherwise
#
# EXAMPLE
# docker ps
# docker
function docker --description 'Execute docker, redirecting ps to the enhanced dops listing'
if test -z "$argv[1]"
command docker
return
end
switch $argv[1]
case ps
dops $argv[2..-1]
case '*'
command docker $argv[1..-1]
end
end
+17 -16
View File
@@ -4,27 +4,28 @@
# CATEGORY
# 12-ai-and-developer-tools
#
# DEPENDENCIES
# docker
#
# SYNOPSIS
# docker [subcommand] [args...]
# dops [args...]
#
# DESCRIPTION
# Wrapper for docker that intercepts the ps subcommand and redirects it to
# the dops function for enhanced container listing. All other subcommands are
# passed through to the real docker binary.
# Enhanced container listing: runs docker ps with a clean custom table
# (Names, Image, Status, Ports) instead of docker's noisier default
# columns. Extra arguments (e.g. -a) are forwarded to docker ps.
#
# ARGUMENTS
# subcommand Docker subcommand (ps is redirected to dops)
# args... Arguments forwarded to docker or dops
# args... Arguments forwarded to `docker ps`
#
# EXIT STATUS
# Exit status of `docker ps`
#
# EXAMPLE
# docker ps
function docker --description 'Execute docker'
if test -n "$argv[1]"
switch $argv[1]
case ps
dops $argv[2..-1]
case '*'
command docker $argv[1..-1]
end
end
# dops
# dops -a
function dops --description 'Enhanced, formatted docker ps listing'
__fish_help_header (status current-function) $argv; and return 0
command docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' $argv
end
+5
View File
@@ -33,9 +33,14 @@
# Displays a styled message indicating that the fast command is unavailable
# and suggests using fast-cli instead.
#
# EXIT STATUS
# 0 Always
#
# EXAMPLE
# fast
function fast --description 'Placeholder for future fast utility'
__fish_help_header (status current-function) $argv; and return 0
# ANSI Escape Codes (Standard 16-color palette)
set -l bold "\e[1m"
set -l italic "\e[3m"
+2
View File
@@ -24,6 +24,8 @@
# fc
# fc git
function fc --description 'Edit and execute the last command (Bash-style fc)'
__fish_help_header (status current-function) $argv; and return 0
set -l tmpfile (mktemp /tmp/fish_fc.XXXXXX).fish
if count $argv >/dev/null
+7
View File
@@ -66,6 +66,13 @@ function fish-deps --description 'Manage fish shell dependencies'
_fish_deps_status
case install
_fish_deps_install $flags
case -h --help
# Reuse the existing menu rather than the header renderer: it
# is richer, and it is already the text the unknown-subcommand
# path prints. Previously --help fell into `case '*'` and
# exited 1 with "Unknown subcommand: --help".
__fish_deps_help
return 0
case update
_fish_deps_update
case sync
+6
View File
@@ -11,9 +11,15 @@
# Installs or upgrades fzf from git HEAD into ~/.fzf. Pulls the latest
# changes if ~/.fzf already exists, or clones the repository if not.
#
# EXIT STATUS
# 0 fzf installed or updated successfully
# Nonzero git or the fzf install script failed
#
# EXAMPLE
# fzf-update
function fzf-update --description 'Install or upgrade fzf from git HEAD'
__fish_help_header (status current-function) $argv; and return 0
if test -d ~/.fzf
echo "Updating fzf..."
git -C ~/.fzf pull --ff-only
+5
View File
@@ -11,9 +11,14 @@
# Fetches and prints both the public IPv4 and IPv6 addresses using
# icanhazip.com. Shows "Not detected" for any address that times out.
#
# EXIT STATUS
# 0 Always (network failures print "Not detected" instead of failing)
#
# EXAMPLE
# gip
function gip --description 'Show all public IP addresses'
__fish_help_header (status current-function) $argv; and return 0
echo -n "IPv4: "
curl -4 -s --max-time 2 https://icanhazip.com || echo "Not detected"
echo -n "IPv6: "
+5
View File
@@ -10,8 +10,13 @@
# DESCRIPTION
# Fetches and prints the machine's public IPv4 address using icanhazip.com.
#
# EXIT STATUS
# Exit status of curl
#
# EXAMPLE
# gip4
function gip4 --wraps='curl' --description 'Get public IPv4 address'
__fish_help_header (status current-function) $argv; and return 0
curl -4 -s https://icanhazip.com
end
+2
View File
@@ -21,6 +21,8 @@
# EXAMPLE
# gip6
function gip6 --description 'Get public IPv6 address'
__fish_help_header (status current-function) $argv; and return 0
# Use -6 to force IPv6 and --fail to catch network errors
set -l ip (curl -6 -s --fail https://icanhazip.com 2>/dev/null)
+6
View File
@@ -14,9 +14,15 @@
# Searches fish history interactively using fzf, inserts the selected command
# into the command line, and copies it to the clipboard via wl-copy.
#
# EXIT STATUS
# 0 Command selected and inserted, or fzf was cancelled
# 1 Disabled by __fish_config_op_integrations
#
# EXAMPLE
# hist
function hist --description 'Search fish history and put it in the prompt'
__fish_help_header (status current-function) $argv; and return 0
# Opinionated guard (C4): integrations disabled
if not __fish_config_op_enabled (status current-function)
__fish_palette
+5
View File
@@ -14,9 +14,14 @@
# ARGUMENTS
# args... Arguments forwarded to the listing command
#
# EXIT STATUS
# Exit status of eza, lsd, or ls, whichever ran
#
# EXAMPLE
# lD ~/projects
function lD --description 'List directories only'
__fish_help_header (status current-function) $argv; and return 0
if which eza >/dev/null 2>&1
eza --only-dirs --long --icons --color=auto --hyperlink $argv
else if which lsd >/dev/null 2>&1
+2
View File
@@ -17,6 +17,8 @@
# EXAMPLE
# ld
function ld --description 'Run lazydocker on the current Docker context'
__fish_help_header (status current-function) $argv; and return 0
if not type -q docker
echo "ld: docker is not installed" >&2
return 1
+5
View File
@@ -13,9 +13,14 @@
# files tracked by sbctl. Combines the edit and sign steps into a single
# command.
#
# EXIT STATUS
# 0 Always (individual step failures are not propagated)
#
# EXAMPLE
# limine-edit
function limine-edit --description 'Safely edit and re-verify Limine configuration'
__fish_help_header (status current-function) $argv; and return 0
# 1. Open the config with sudoedit
sudoedit /boot/limine.conf
+5
View File
@@ -10,8 +10,13 @@
# DESCRIPTION
# Locks the current desktop session using loginctl lock-session.
#
# EXIT STATUS
# Exit status of `loginctl lock-session`
#
# EXAMPLE
# lock
function lock --wraps='loginctl' --description 'alias lock=loginctl'
__fish_help_header (status current-function) $argv; and return 0
loginctl lock-session
end
+5
View File
@@ -14,9 +14,14 @@
# ARGUMENTS
# args... Arguments forwarded to the listing command
#
# EXIT STATUS
# Exit status of eza, lsd, or ls, whichever ran
#
# EXAMPLE
# lsr ~/projects
function lsr --description 'Reversed time-sorted listing'
__fish_help_header (status current-function) $argv; and return 0
if which eza >/dev/null 2>&1
eza --oneline --sort=modified --reverse --icons --color=auto --hyperlink $argv
else if which lsd >/dev/null 2>&1
+5
View File
@@ -14,9 +14,14 @@
# ARGUMENTS
# args... Arguments forwarded to the listing command
#
# EXIT STATUS
# Exit status of eza, lsd, or ls, whichever ran
#
# EXAMPLE
# lss ~/downloads
function lss --description 'Size-sorted listing'
__fish_help_header (status current-function) $argv; and return 0
if which eza >/dev/null 2>&1
eza --oneline --long --all --sort=size --icons --color=auto --hyperlink --color-scale=size --color-scale-mode=gradient $argv
else if which lsd >/dev/null 2>&1
+5
View File
@@ -14,9 +14,14 @@
# ARGUMENTS
# args... Arguments forwarded to the listing command
#
# EXIT STATUS
# Exit status of eza, lsd, or ls, whichever ran
#
# EXAMPLE
# lstree ~/projects/myapp
function lstree --description 'Full recursive tree listing'
__fish_help_header (status current-function) $argv; and return 0
if which eza >/dev/null 2>&1
eza --tree --icons --color=auto --hyperlink=auto $argv
else if which lsd >/dev/null 2>&1
+5
View File
@@ -14,9 +14,14 @@
# ARGUMENTS
# args... Arguments forwarded to the listing command
#
# EXIT STATUS
# Exit status of eza, lsd, or ls, whichever ran
#
# EXAMPLE
# lt ~/projects
function lt --description 'Tree listing, depth 2'
__fish_help_header (status current-function) $argv; and return 0
if which eza >/dev/null 2>&1
eza --tree --level=2 --icons --color=auto --hyperlink $argv
else if which lsd >/dev/null 2>&1
+5
View File
@@ -15,9 +15,14 @@
# ARGUMENTS
# args... Arguments forwarded to the listing command
#
# EXIT STATUS
# Exit status of eza, lsd, or ls, whichever ran
#
# EXAMPLE
# ltr ~/projects
function ltr --description 'Reversed time-sorted listing'
__fish_help_header (status current-function) $argv; and return 0
if which eza >/dev/null 2>&1
eza --long --all --sort=modified --icons --hyperlink --color=auto --color-scale=age --color-scale-mode=gradient $argv
else if which lsd >/dev/null 2>&1
+5
View File
@@ -14,9 +14,14 @@
# ARGUMENTS
# args... Arguments forwarded to the listing command
#
# EXIT STATUS
# Exit status of eza, lsd, or ls, whichever ran
#
# EXAMPLE
# lx ~/projects
function lx --description 'Extension-sorted listing'
__fish_help_header (status current-function) $argv; and return 0
if which eza >/dev/null 2>&1
eza --long --all --sort=extension --icons --color=auto --hyperlink $argv
else if which lsd >/dev/null 2>&1
+2
View File
@@ -19,6 +19,8 @@
# EXAMPLE
# parur
function parur --description 'Interactively search and remove an installed package using fzf'
__fish_help_header (status current-function) $argv; and return 0
set -l aur ""
if type -q paru
set aur paru
+2
View File
@@ -21,6 +21,8 @@
# EXAMPLE
# poke ~/projects/new/src/main.fish
function poke --description 'touch with automatic parent directory creation'
__fish_help_header (status current-function) $argv; and return 0
if test (count $argv) -eq 0
echo (set_color red)"poke: no file specified"(set_color normal) >&2
return 1
+5
View File
@@ -11,8 +11,13 @@
# Lists all active TCP listeners on the system using lsof, showing
# port numbers and addresses without hostname resolution.
#
# EXIT STATUS
# Exit status of `lsof`
#
# EXAMPLE
# ports
function ports --wraps='sudo' --description 'Show active network listeners'
__fish_help_header (status current-function) $argv; and return 0
sudo lsof -iTCP -sTCP:LISTEN -P -n
end
+5
View File
@@ -15,10 +15,15 @@
# ARGUMENTS
# text... Text to encode; reads from stdin if omitted
#
# EXIT STATUS
# Exit status of qrencode, or curl if qrencode is unavailable
#
# EXAMPLE
# qr "https://example.com"
# echo "hello" | qr
function qr --description 'Generate a QR code from text or pipe'
__fish_help_header (status current-function) $argv; and return 0
if type -q qrencode
if set -q argv[1]
echo $argv | qrencode -t utf8
+2
View File
@@ -24,6 +24,8 @@
# sbver
# sbver --brief
function sbver --description 'Verifies Secure Boot status of EFI binaries using sbctl'
__fish_help_header (status current-function) $argv; and return 0
if not type -q sbctl
echo "Error: 'sbctl' is not installed."
return 1
+5
View File
@@ -11,9 +11,14 @@
# Turns off the display after a 1-second delay by invoking the KDE
# PowerDevil "Turn Off Screen" global shortcut via busctl.
#
# EXIT STATUS
# Exit status of `busctl`
#
# EXAMPLE
# screensleep
function screensleep --description 'Turn off the display using KDE PowerDevil'
__fish_help_header (status current-function) $argv; and return 0
# Optional: 1-second delay to ensure no keystrokes wake it immediately
sleep 1
busctl --user call \
+4
View File
@@ -29,6 +29,10 @@
# split
# split -v nvim README.md
function split --description 'Run a command in a new terminal split'
# -h is --horizontal here (see this function's own ARGUMENTS),
# so only the long form may reach the renderer.
test "$argv[1]" = --help; and __fish_help_header (status current-function) --help; and return 0
# Opinionated guard (C4): integrations disabled
if not __fish_config_op_enabled (status current-function)
__fish_palette
-1
View File
@@ -31,7 +31,6 @@
# EXAMPLE
# # Register with sponge (done automatically by conf.d/sponge_privacy.fish):
# set -U -a sponge_filters sponge_filter_secrets
function sponge_filter_secrets --argument-names command
# Find all exported variables with security-sensitive names
set -l sensitive_vars (set --names --export | string match --regex -- \
+2
View File
@@ -24,6 +24,8 @@
# EXAMPLE
# spwin
function spwin --wraps='~/.config/kitty/spawn-window.sh' --description 'spawn window in kitty or wezterm'
__fish_help_header (status current-function) $argv; and return 0
# Opinionated guard (C4): integrations disabled
if not __fish_config_op_enabled (status current-function)
__fish_palette
+5
View File
@@ -11,9 +11,14 @@
# Launches Steam with systemd-inhibit to prevent the system from idling
# or sleeping during active downloads.
#
# EXIT STATUS
# Exit status of `steam` (via systemd-inhibit)
#
# EXAMPLE
# steam-dl
function steam-dl --description 'Run Steam while inhibiting system sleep'
__fish_help_header (status current-function) $argv; and return 0
echo "Inhibiting sleep while Steam downloads..."
systemd-inhibit --why="Active Download" --who="User" --what=idle:sleep steam
end
+2
View File
@@ -19,6 +19,8 @@
# EXAMPLE
# sudo-toggle
function sudo-toggle --description 'Toggle sudo password requirement on/off'
__fish_help_header (status current-function) $argv; and return 0
# Check the file size using sudo stat to see if our bypass rule is active
set -l file_size (sudo stat -c %s /etc/sudoers.d/nofail-toggle 2>/dev/null)
+5
View File
@@ -12,9 +12,14 @@
# zRAM compression ratio, zRAM device details (via zramctl), and
# active swap priority (via swapon).
#
# EXIT STATUS
# 0 Always
#
# EXAMPLE
# swapstat
function swapstat --description 'View colorized zRAM and swappiness status'
__fish_help_header (status current-function) $argv; and return 0
set -l swappiness (sysctl -n vm.swappiness)
set -l zdata (zramctl --bytes --noheadings --output DATA,TOTAL /dev/zram0 2>/dev/null)
+2
View File
@@ -25,6 +25,8 @@
# EXAMPLE
# tab
function tab --description 'Spawn a new tab in the current terminal'
__fish_help_header (status current-function) $argv; and return 0
# Opinionated guard (C4): integrations disabled
if not __fish_config_op_enabled (status current-function)
__fish_palette
+5
View File
@@ -11,9 +11,14 @@
# Kills all detached (unattached) tmux sessions, leaving any currently
# attached sessions running.
#
# EXIT STATUS
# 0 Always
#
# EXAMPLE
# tmux-clean
function tmux-clean --description 'Kill all tmux sessions except the current one'
__fish_help_header (status current-function) $argv; and return 0
# Get a list of all session names that are NOT currently attached
set sessions (tmux list-sessions -F '#{session_name} #{session_attached}' | string match -rv ' 1$' | string split -f1 ' ')
+2
View File
@@ -21,6 +21,8 @@
# EXAMPLE
# upgrade
function upgrade --description 'Full system upgrade via paru or yay'
__fish_help_header (status current-function) $argv; and return 0
# Opinionated guard (C4): integrations disabled
if not __fish_config_op_enabled (status current-function)
__fish_palette
+2
View File
@@ -22,6 +22,8 @@
# EXAMPLE
# wake-lock rsync -avz src/ dest/
function wake-lock --description 'Run a command while inhibiting system sleep'
__fish_help_header (status current-function) $argv; and return 0
if test (count $argv) -eq 0
__fish_palette
echo "$c_head""Usage:$c_reset $c_cmd""wake-lock$c_reset $c_arg""[command] [args...]$c_reset"