feat(deps): add marktext and firejail as optional dependencies

Both back the new `md` wrapper and nothing else, so both land in the
Optional tier, skipped by `fish-deps install`/`sync` unless `--optional`
(or `--all`) is passed.

firejail is a plain system package everywhere, so it needs no special
handling. marktext is not: upstream ships an AUR package and its own
GitHub release assets, and no distro carries it under a common name. Its
`_fdc_pm` entry is therefore deliberately empty, and a `marktext-release`
special offers the AUR package via paru/yay where one is present and
otherwise installs upstream's AppImage to ~/.local/bin/marktext.

The release assets embed their version in the filename, so there is no
stable /releases/latest/download URL to fetch -- `_fish_deps_marktext_appimage`
reads the download URL from the GitHub API instead. Upstream builds the
Linux AppImage for x86_64 only, and the helper says so rather than
downloading an unusable binary.

`fish-deps update` refreshes marktext through the AUR where available, and
otherwise only when ~/.local/bin/marktext exists -- a distro-packaged
marktext belongs to that package manager, and dropping an AppImage into
~/.local/bin would shadow it.
This commit is contained in:
2026-09-16 03:56:48 -04:00
parent 8aa2d15ae8
commit f153a3db87
7 changed files with 2456 additions and 2672 deletions
+5 -5
View File
@@ -36,27 +36,27 @@ function _fish_deps_catalog
set -g _fdc_bins \
uv cargo fish starship fzf zoxide direnv paru yay \
wakatime tailscale \
eza lsd bat btop dust duf prettyping go ov rg lazygit lazydocker docker trash kitty wezterm python3 yt-dlp screen mpv vlc
eza lsd bat btop dust duf prettyping go ov rg lazygit lazydocker docker trash kitty wezterm python3 yt-dlp screen mpv vlc marktext firejail
set -g _fdc_tiers \
rec rec req rec req rec rec rec rec \
int int \
rec rec rec opt opt opt opt opt rec rec opt opt opt rec term term rec opt opt opt opt
rec rec rec opt opt opt opt opt rec rec opt opt opt rec term term rec opt opt opt opt opt opt
set -g _fdc_cargo \
"" "" "" starship "" zoxide "" "" "" \
"" "" \
eza lsd bat "" du-dust "" "" "" "" ripgrep "" "" "" trashy "" "" "" "" "" "" ""
eza lsd bat "" du-dust "" "" "" "" ripgrep "" "" "" trashy "" "" "" "" "" "" "" "" ""
set -g _fdc_pm \
uv cargo fish starship fzf zoxide direnv "" yay \
wakatime tailscale \
eza lsd bat btop dust duf prettyping go ov ripgrep lazygit lazydocker docker trash kitty wezterm python yt-dlp screen mpv vlc
eza lsd bat btop dust duf prettyping go ov ripgrep lazygit lazydocker docker trash kitty wezterm python yt-dlp screen mpv vlc "" firejail
set -g _fdc_special \
curl-uv rustup-installer git-cargo-fish curl-installer fzf-update "" "" paru-build yay-build \
wakatime-binary "" \
"" "" "" "" "" "" "" "" go-ov "" "" curl-lazydocker "" "" "" "" "" "" "" "" ""
"" "" "" "" "" "" "" "" go-ov "" "" curl-lazydocker "" "" "" "" "" "" "" "" "" marktext-release ""
end
# SYNOPSIS
+20
View File
@@ -126,6 +126,20 @@ function _fish_deps_install
case wakatime-binary
set -a methods special-wakatime
set -a method_labels "binary download (github releases)"
case marktext-release
# Upstream packages MarkText for the AUR and for its own
# GitHub releases only -- no distro carries it under a
# common name, so off Arch the AppImage is the only
# option and $_fdc_pm is deliberately empty.
if type -q paru
set -a methods special-marktext-paru
set -a method_labels "paru -S marktext-bin (AUR)"
else if type -q yay
set -a methods special-marktext-yay
set -a method_labels "yay -S marktext-bin (AUR)"
end
set -a methods special-marktext-appimage
set -a method_labels "AppImage download (~/.local/bin/marktext)"
case go-ov
if type -q go
set -a methods special-go-ov
@@ -251,6 +265,12 @@ function _fish_deps_install
test $_go_status -eq 0
case special-lazydocker
curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
case special-marktext-paru
paru -S --noconfirm marktext-bin
case special-marktext-yay
yay -S --noconfirm marktext-bin
case special-marktext-appimage
_fish_deps_marktext_appimage
case special-wakatime
set -l _arch (uname -m)
switch $_arch
@@ -0,0 +1,66 @@
# Copyright (C) 2026 Rootiest
# SPDX-License-Identifier: AGPL-3.0-or-later
# SYNOPSIS
# _fish_deps_marktext_appimage
#
# DESCRIPTION
# Installs (or upgrades in place) MarkText as an AppImage at
# ~/.local/bin/marktext. This is the install path for systems whose
# package manager does not carry MarkText at all -- upstream ships only
# the AUR package (marktext-bin) and its own GitHub release assets, so
# apt/dnf/brew have nothing to offer.
#
# The release assets embed their version in the filename, so there is no
# stable /releases/latest/download URL; the download URL is read from the
# GitHub API instead.
#
# Upstream builds the Linux AppImage for x86_64 only.
#
# EXIT STATUS
# 0 MarkText installed at ~/.local/bin/marktext
# 1 Unsupported architecture, or the download or install failed
#
# EXAMPLE
# _fish_deps_marktext_appimage
#
# NOTES
# An AppImage needs FUSE to self-mount. Where FUSE is unavailable, run it
# as `marktext --appimage-extract-and-run`.
function _fish_deps_marktext_appimage
set -l arch (uname -m)
if test "$arch" != x86_64
echo " MarkText publishes a Linux AppImage for x86_64 only (this is $arch)." >&2
return 1
end
if not type -q curl
echo " curl is required to download the MarkText AppImage." >&2
return 1
end
set -l url (curl -fsSL https://api.github.com/repos/marktext/marktext/releases/latest |
string match -r '"browser_download_url":\s*"([^"]*-linux-[^"]*\.AppImage)"')[2]
if test -z "$url"
echo " Could not find a Linux AppImage in the latest MarkText release." >&2
return 1
end
set -l dest "$HOME/.local/bin/marktext"
set -l tmp (mktemp -d)
set -l ok 0
curl -fL "$url" -o "$tmp/marktext"
and mkdir -p (dirname $dest)
and chmod +x "$tmp/marktext"
# Replace via mv, not a write into $dest: overwriting a running AppImage
# in place corrupts the live mount.
and mv -f "$tmp/marktext" "$dest"
and set ok 1
rm -rf $tmp
if test $ok -eq 1
fish_add_path "$HOME/.local/bin"
end
test $ok -eq 1
end
+21
View File
@@ -96,6 +96,27 @@ function _fish_deps_update
continue
end
# marktext: AUR where it exists, else refresh the AppImage. Only an
# AppImage we own is refreshed -- a distro-packaged marktext belongs
# to that package manager, and ~/.local/bin/marktext would shadow it.
if test "$special" = marktext-release
if type -q paru
echo "Updating $bin..."
paru -S --noconfirm marktext-bin
set updated_any 1
else if type -q yay
echo "Updating $bin..."
yay -S --noconfirm marktext-bin
set updated_any 1
else if test -f "$HOME/.local/bin/marktext"
echo "Updating $bin..."
_fish_deps_marktext_appimage
set updated_any 1
end
set i (math $i + 1)
continue
end
# wakatime: re-download the binary from github releases
if test "$special" = wakatime-binary
echo "Updating $bin..."