1ea6b492eb
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.
7.0 KiB
7.0 KiB
| 1 | #group | pkg | flag | apt | brew | note |
|---|---|---|---|---|---|---|
| 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 | @needs | networking/xrdp | desktop | |||
| 24 | @needs | networking/xorgxrdp | desktop | |||
| 25 | @needs | gpu/container-toolkit | docker | |||
| 26 | @needs | agents/codex | core/node | |||
| 27 | @needs | agents/pi | core/node | |||
| 28 | @needs | agents/pi-plugins | core/node | |||
| 29 | @needs | agents/pi-plugins | agents/pi | |||
| 30 | @needs | agents/specify-cli | core/uv | |||
| 31 | @needs | core/mermaid-cli | core/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 | @needs | core/lazygit | core/brew | |||
| 37 | @needs | agents/omp | core/brew | |||
| 38 | @needs | agents/herdr | core/brew | |||
| 39 | @needs | core/neovim | core/imagemagick core/mermaid-cli | |||
| 40 | @needs | private/bws-secrets | core/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 | @spec | agents/codex | @openai/codex | |||
| 45 | @spec | agents/pi | @earendil-works/pi-coding-agent | |||
| 46 | @spec | agents/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 | @spec | agents/specify-cli | specify-cli | |||
| 48 | @spec | core/mermaid-cli | @mermaid-js/mermaid-cli | |||
| 49 | @spec | core/bitwarden-cli | bw | |||
| 50 | @spec | apps/obsidian | md.obsidian.Obsidian | |||
| 51 | @spec | apps/chrome | https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb | |||
| 52 | @spec | apps/ghostty | gh:mkasberg/ghostty-ubuntu:_%a_%v.deb | |||
| 53 | core | neovim | safe | -tarball | neovim | apt ships 0.9.5 — tarball to /opt/nvim |
| 54 | core | ripgrep | safe | ripgrep | ripgrep | binary is rg |
| 55 | core | fd | safe | fd-find | fd | binary is fdfind on ubuntu |
| 56 | core | bat | safe | bat | bat | binary is batcat on ubuntu |
| 57 | core | fzf | safe | fzf | fzf | for your shell (ctrl-r); the picker uses its own pinned copy |
| 58 | core | eza | safe | eza | eza | |
| 59 | core | zsh | safe | zsh | -builtin | login shell everywhere |
| 60 | core | tmux | safe | tmux | tmux | |
| 61 | core | git-lfs | safe | git-lfs | git-lfs | |
| 62 | core | lazygit | safe | - | lazygit | no apt package |
| 63 | core | gh | safe | gh | gh | |
| 64 | core | chezmoi | safe | -script | chezmoi | bootstrap cannot come from the manifest |
| 65 | core | go | safe | -tarball | go | /usr/local/go on linux |
| 66 | core | uv | safe | -script | uv | astral installer to ~/.local/bin |
| 67 | core | brew | safe | -script | -builtin | linuxbrew — the only source for lazygit, omp and herdr |
| 68 | core | node | safe | -tarball | node | apt ships 18.19 and the npm rows below need 20+ — tarball to /opt/node |
| 69 | core | imagemagick | safe | imagemagick | imagemagick | required by the nvim markdown render path |
| 70 | core | mermaid-cli | safe | -npm | -npm | mmdc — nvim renders mermaid fences with it |
| 71 | core | btop | safe | btop | btop | |
| 72 | core | htop | safe | htop | htop | |
| 73 | core | ncdu | safe | ncdu | ncdu | |
| 74 | core | unzip | safe | unzip | unzip | the bws release ships as a .zip, and 24.04 minimal has no unzip |
| 75 | core | tree | safe | tree | tree | |
| 76 | core | cmake | safe | cmake | cmake | |
| 77 | core | ninja | safe | ninja-build | ninja | package name differs from binary |
| 78 | core | build-tools | safe | build-essential | -xcode | |
| 79 | core | magic-wormhole | safe | magic-wormhole | magic-wormhole | snap wormhole on dev |
| 80 | core | bitwarden-cli | safe | -snap | bitwarden-cli | snap bw on ubuntu |
| 81 | core | mosh | safe | mosh | mosh | |
| 82 | core | nmap | safe | nmap | nmap | |
| 83 | core | binwalk | safe | binwalk | binwalk | |
| 84 | core | pipx | safe | pipx | pipx | |
| 85 | core | age | safe | age | age | general purpose only now |
| 86 | agents | codex | safe | -npm | -npm | @openai/codex — unpinned, always latest |
| 87 | agents | pi | safe | -npm | -npm | @earendil-works/pi-coding-agent |
| 88 | agents | pi-plugins | safe | -npm | -npm | 10 plugins: rpiv-*, pi-memory, pi-subagents, ... |
| 89 | agents | omp | safe | - | can1357/tap/omp | oh my pi — tap only, pulls linuxbrew on linux |
| 90 | agents | herdr | safe | - | herdr | terminal workspace manager for agents |
| 91 | agents | specify-cli | safe | -uv | -uv | uv tool install |
| 92 | fonts | hack-nerd-font | safe | fonts-powerline | font-hack-nerd-font | |
| 93 | fonts | iosevka-nerd-font | safe | fonts-powerline | font-iosevka-nerd-font | |
| 94 | media | ffmpeg | safe | ffmpeg | ffmpeg | |
| 95 | media | sox | safe | sox | sox | |
| 96 | media | p7zip | safe | p7zip-full | p7zip | |
| 97 | apps | obsidian | gui | -flatpak | obsidian | |
| 98 | apps | ghostty | gui | -deb | ghostty | |
| 99 | apps | chrome | gui | -deb | google-chrome | |
| 100 | apps | firefox | gui | firefox | firefox | |
| 101 | apps | vlc | gui | vlc | vlc | |
| 102 | @networking | daemons, listening ports, and setuid mount helpers | ||||
| 103 | networking | openssh-server | invasive | openssh-server | -builtin | opens port 22 on every network this box can reach |
| 104 | networking | tailscale | invasive | tailscale | tailscale | daemon; joins a private network and rewrites DNS |
| 105 | networking | avahi-daemon | invasive | avahi-daemon | - | daemon; broadcasts this host on the LAN |
| 106 | networking | xrdp | invasive | xrdp | - | opens port 3389 · useless without the desktop group |
| 107 | networking | xorgxrdp | invasive | xorgxrdp | - | xrdp's X backend |
| 108 | networking | nfs-common | invasive | nfs-common | - | setuid mount helper |
| 109 | networking | cifs-utils | invasive | cifs-utils | - | setuid mount helper |
| 110 | networking | davfs2 | invasive | davfs2 | - | setuid mount helper |
| 111 | @docker | daemon; membership in the docker group is root-equivalent | ||||
| 112 | docker | docker-ce | invasive | docker-ce | - | daemon; docker group is root-equivalent |
| 113 | docker | docker-buildx | invasive | docker-buildx-plugin | - | |
| 114 | docker | docker-compose | invasive | docker-compose-plugin | - | |
| 115 | @desktop | changes the display manager — can leave you at a black screen | ||||
| 116 | desktop | xfce4 | invasive | xfce4 | - | changes the display manager |
| 117 | desktop | lightdm | invasive | lightdm | - | CAN LEAVE YOU AT A BLACK SCREEN |
| 118 | @gpu | kernel modules; a bad driver can break boot | ||||
| 119 | gpu | nvidia-driver | invasive | nvidia-driver-570 | - | kernel modules; can break boot |
| 120 | gpu | cuda-toolkit | invasive | nvidia-cuda-toolkit | - | |
| 121 | gpu | container-toolkit | invasive | nvidia-container-toolkit | - | requires docker |
| 122 | @virt | daemon, bridges, and group membership | ||||
| 123 | virt | qemu | invasive | qemu-kvm | - | |
| 124 | virt | libvirt | invasive | libvirt-daemon-system | - | daemon + group membership |
| 125 | virt | virt-manager | invasive | virt-manager | - | |
| 126 | @private | one password, typed after the install finishes | ||||
| 127 | private | private-repo | private | - | - | ~/.local/share/dotfiles-private — agent config, ssh config |
| 128 | private | bws-secrets | private | - | - | bws + 7 API keys into ~/.config/zsh/secrets.zsh; the tier installs bws itself |