Files
dotfiles-public/dot_local/share/dotup/packages.tsv
T
bcherb2 1ea6b492eb fix: dotup — installer, picker and private-tier correctness pass
Installer:
- channel order is a dependency graph: `script` now runs before `brew`, so
  core/brew exists by the time lazygit, omp and herdr are attempted. Those
  three have no apt package at all and failed on every fresh Linux box.
- core/brew and core/node are real script/tarball rows now. apt's nodejs is
  18.19 while four npm rows declare node>=20; npm only warns on a failed
  engines check, so the install "succeeded" and `pi` then died at parse time.
- apt_known asks `apt-cache policy` for an installation candidate rather than
  `apt-cache show` for existence: docker-ce exists in the cache with
  `Candidate: (none)` and exits 0, which kept it in the batch and made apt
  refuse all thirty packages at once.
- failures are reported by manifest key, not by install argument, so the name
  in the summary is one you can type at the picker or pass to `dotup explain`.
- flatpak installs the tool, adds the flathub remote, and uses --user, which
  is the only scope that works without a session bus.
- gh: deb assets fill %a and %v, because a distro-targeted deb names the
  release as well as the arch (ghostty-ubuntu).
- ensure_bws downloads into a `mktemp -d` instead of fixed /tmp paths.
- the endpoint password prompt says so out loud when stty cannot turn echo off,
  instead of silently leaving the password in the scrollback.
- cmd_toggle writes tmp-then-rename, matching cmd_expand.

Picker:
- DU-C1: comments had been inserted between the continued lines of the fzf
  invocation. The `\`-newline is stripped first, so the comment's own newline
  terminated the command — fzf ran with two binds and the lines below it ran
  as a command named `--bind`, so `dotup pick` returned 1 having drawn a dead
  picker. The comment now sits above the pipeline.
- the header is built with a plain variable: `$'...'` is a bashism and /bin/sh
  on Ubuntu is dash, the one platform this is written for.
- the /dev/tty probe runs BEFORE the defaults preset, so a run in a pipe no
  longer overwrites the selection with 43 rows before failing to draw.
- a completed pick is recorded in $STATE/picked, so "install nothing" survives
  the next run and a prior `dotup plan` no longer counts as having chosen.
- $SEL must be readable and writable before anything draws: every bind is
  execute-silent, which throws its child's status away.
- ensure_fzf resolves system-first, cache-second, as the README promises.
- ^t clears the query, so rows pulled in along @needs are on screen.
2026-08-21 22:34:22 -04:00

7.0 KiB

1#grouppkgflagaptbrewnote
2#
3# Five columns, tab separated, greppable by hand. Anything that would have been
4# a sixth column is an @ directive instead, so a package with no dependency and
5# no install argument -- most of them -- costs nothing to read.
6#
7# @needs <group/pkg> <dep>... dep is group/pkg or a whole group.
8# Closure is transitive in both directions.
9# @spec <group/pkg> <arg>... Argument for a channel that cannot be named
10# by the package: the npm spec, the flatpak
11# app id, the .deb source. Defaults to the
12# package name when absent.
13# @<group> <note> Group note. Only needed where the members
14# fail the safe test for different reasons;
15# otherwise the worst child's note is right.
16#
17# -tarball -npm -script -snap -deb -flatpak -uv -builtin -xcode.
18# A bare `-` means unavailable there. Linux falls back to the brew column before
19# giving up -- omp, herdr and lazygit have no apt package at all. The fallback is
20# one-directional: there is no apt on a Mac, so a `-` in the brew column is the
21# end of the road rather than a reason to read a column of Debian package names.
22#
23@needsnetworking/xrdpdesktop
24@needsnetworking/xorgxrdpdesktop
25@needsgpu/container-toolkitdocker
26@needsagents/codexcore/node
27@needsagents/picore/node
28@needsagents/pi-pluginscore/node
29@needsagents/pi-pluginsagents/pi
30@needsagents/specify-clicore/uv
31@needscore/mermaid-clicore/node
32# The three rows with no apt package at all. They resolved to brew and
33# nothing installed brew, so `^a` ticked them and they failed on every
34# fresh Linux box. On Linux brew lives entirely under
35# /home/linuxbrew/.linuxbrew, which find_tool already probes.
36@needscore/lazygitcore/brew
37@needsagents/ompcore/brew
38@needsagents/herdrcore/brew
39@needscore/neovimcore/imagemagick core/mermaid-cli
40@needsprivate/bws-secretscore/unzip
41#
42# npm names carry scopes that the plugin's short name does not. `npm i -g
43# rpiv-btw` installs somebody else's package.
44@specagents/codex@openai/codex
45@specagents/pi@earendil-works/pi-coding-agent
46@specagents/pi-plugins@juicesharp/rpiv-ask-user-question @juicesharp/rpiv-btw @juicesharp/rpiv-todo @samfp/pi-memory @tmustier/pi-ralph-wiggum pi-markdown-preview pi-powerline-footer pi-simplify pi-subagents pi-web-access
47@specagents/specify-clispecify-cli
48@speccore/mermaid-cli@mermaid-js/mermaid-cli
49@speccore/bitwarden-clibw
50@specapps/obsidianmd.obsidian.Obsidian
51@specapps/chromehttps://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
52@specapps/ghosttygh:mkasberg/ghostty-ubuntu:_%a_%v.deb
53coreneovimsafe-tarballneovimapt ships 0.9.5 — tarball to /opt/nvim
54coreripgrepsaferipgrepripgrepbinary is rg
55corefdsafefd-findfdbinary is fdfind on ubuntu
56corebatsafebatbatbinary is batcat on ubuntu
57corefzfsafefzffzffor your shell (ctrl-r); the picker uses its own pinned copy
58coreezasafeezaeza
59corezshsafezsh-builtinlogin shell everywhere
60coretmuxsafetmuxtmux
61coregit-lfssafegit-lfsgit-lfs
62corelazygitsafe-lazygitno apt package
63coreghsafeghgh
64corechezmoisafe-scriptchezmoibootstrap cannot come from the manifest
65coregosafe-tarballgo/usr/local/go on linux
66coreuvsafe-scriptuvastral installer to ~/.local/bin
67corebrewsafe-script-builtinlinuxbrew — the only source for lazygit, omp and herdr
68corenodesafe-tarballnodeapt ships 18.19 and the npm rows below need 20+ — tarball to /opt/node
69coreimagemagicksafeimagemagickimagemagickrequired by the nvim markdown render path
70coremermaid-clisafe-npm-npmmmdc — nvim renders mermaid fences with it
71corebtopsafebtopbtop
72corehtopsafehtophtop
73corencdusafencduncdu
74coreunzipsafeunzipunzipthe bws release ships as a .zip, and 24.04 minimal has no unzip
75coretreesafetreetree
76corecmakesafecmakecmake
77coreninjasafeninja-buildninjapackage name differs from binary
78corebuild-toolssafebuild-essential-xcode
79coremagic-wormholesafemagic-wormholemagic-wormholesnap wormhole on dev
80corebitwarden-clisafe-snapbitwarden-clisnap bw on ubuntu
81coremoshsafemoshmosh
82corenmapsafenmapnmap
83corebinwalksafebinwalkbinwalk
84corepipxsafepipxpipx
85coreagesafeageagegeneral purpose only now
86agentscodexsafe-npm-npm@openai/codex — unpinned, always latest
87agentspisafe-npm-npm@earendil-works/pi-coding-agent
88agentspi-pluginssafe-npm-npm10 plugins: rpiv-*, pi-memory, pi-subagents, ...
89agentsompsafe-can1357/tap/ompoh my pi — tap only, pulls linuxbrew on linux
90agentsherdrsafe-herdrterminal workspace manager for agents
91agentsspecify-clisafe-uv-uvuv tool install
92fontshack-nerd-fontsafefonts-powerlinefont-hack-nerd-font
93fontsiosevka-nerd-fontsafefonts-powerlinefont-iosevka-nerd-font
94mediaffmpegsafeffmpegffmpeg
95mediasoxsafesoxsox
96mediap7zipsafep7zip-fullp7zip
97appsobsidiangui-flatpakobsidian
98appsghosttygui-debghostty
99appschromegui-debgoogle-chrome
100appsfirefoxguifirefoxfirefox
101appsvlcguivlcvlc
102@networkingdaemons, listening ports, and setuid mount helpers
103networkingopenssh-serverinvasiveopenssh-server-builtinopens port 22 on every network this box can reach
104networkingtailscaleinvasivetailscaletailscaledaemon; joins a private network and rewrites DNS
105networkingavahi-daemoninvasiveavahi-daemon-daemon; broadcasts this host on the LAN
106networkingxrdpinvasivexrdp-opens port 3389 · useless without the desktop group
107networkingxorgxrdpinvasivexorgxrdp-xrdp's X backend
108networkingnfs-commoninvasivenfs-common-setuid mount helper
109networkingcifs-utilsinvasivecifs-utils-setuid mount helper
110networkingdavfs2invasivedavfs2-setuid mount helper
111@dockerdaemon; membership in the docker group is root-equivalent
112dockerdocker-ceinvasivedocker-ce-daemon; docker group is root-equivalent
113dockerdocker-buildxinvasivedocker-buildx-plugin-
114dockerdocker-composeinvasivedocker-compose-plugin-
115@desktopchanges the display manager — can leave you at a black screen
116desktopxfce4invasivexfce4-changes the display manager
117desktoplightdminvasivelightdm-CAN LEAVE YOU AT A BLACK SCREEN
118@gpukernel modules; a bad driver can break boot
119gpunvidia-driverinvasivenvidia-driver-570-kernel modules; can break boot
120gpucuda-toolkitinvasivenvidia-cuda-toolkit-
121gpucontainer-toolkitinvasivenvidia-container-toolkit-requires docker
122@virtdaemon, bridges, and group membership
123virtqemuinvasiveqemu-kvm-
124virtlibvirtinvasivelibvirt-daemon-system-daemon + group membership
125virtvirt-managerinvasivevirt-manager-
126@privateone password, typed after the install finishes
127privateprivate-repoprivate--~/.local/share/dotfiles-private — agent config, ssh config
128privatebws-secretsprivate--bws + 7 API keys into ~/.config/zsh/secrets.zsh; the tier installs bws itself