Compare commits

..
2 Commits
Author SHA1 Message Date
tgrosinger e9e5b6a30b Install: Reorganize and improve idempotency
- Move tools that are statically linked binaries into mise
- Split installed tools into desktop vs server
- Pin versions on tools installed by mise
2026-08-26 17:04:01 -07:00
tgrosinger 7ca1f5dd66 Install: Remove ghostty, mouseless, and devbox 2026-08-25 21:57:51 -07:00
2 changed files with 166 additions and 96 deletions
+23 -8
View File
@@ -13,12 +13,27 @@ disable_backends = ["asdf", "ubi"]
minimum_release_age = "14d" minimum_release_age = "14d"
[tools] [tools]
node = "lts" # Short names resolve to the aqua backend (checksum + signature verified)
pnpm = "latest" "aqua:F1bonacc1/process-compose" = "1.120.0"
"npm:@anthropic-ai/sandbox-runtime" = "latest" "aqua:neovim/neovim" = "0.12.4"
"npm:typescript-language-server" = "latest"
"npm:typescript" = "latest"
"github:Satty-org/Satty" = "0.20.1" "github:Satty-org/Satty" = "0.20.1"
"github:F1bonacc1/process-compose" = "latest" "npm:@anthropic-ai/sandbox-runtime" = "0.0.67"
"npm:@earendil-works/pi-coding-agent" = "latest" "npm:@earendil-works/pi-coding-agent" = "0.83.0"
uv = "latest" "npm:typescript" = "7.0.2"
"npm:typescript-language-server" = "5.3.0"
bat = "0.26.1"
btop = "1.4.7"
delta = "0.19.2"
dive = "0.13.1"
eza = "0.23.5"
fd = "10.4.2"
gh = "2.97.0"
jq = "1.8.2"
lazygit = "0.64.1"
node = "24.18.1"
opencode = "1.15.11"
pnpm = "11.18.0"
restic = "0.19.1"
ripgrep = "15.2.0"
tmux = "3.7b"
uv = "0.12.0"
+143 -88
View File
@@ -1,103 +1,158 @@
# Install homebrew dependencies #!/usr/bin/env bash
sudo dnf group install development-tools
echo "Installing homebrew"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# NOTE: Do not brew install anything with a dependency on node.
# Instead, use mise.
# #
# mise use --global npm:<package-name> # Install packages for this machine.
#
# Usage: ./install-packages.sh <desktop|server>
#
# Runs the common package set first, then the profile-specific set.
# Move packages between install_common / install_desktop / install_server
# so a headless server does not pull in desktop-only packages.
#
# TODO: Convert binaries in this repo into mise globals config.
# #
# NOTE: claude was installed using the install script: set -euo pipefail
# curl -fsSL https://claude.ai/install.sh | bash
brew install \ install_common() {
anomalyco/tap/opencode \ # Packages installed on every machine (desktop and headless server).
atuin \
bat \
btop \
dive \
eza \
fd \
fish \
fzf \
gcc \
gh \
git \
git-delta \
hmans/beans/beans \
jq \
lazygit \
mise \
neovim \
restic \
ripgrep \
stow \
tmux
#crane \
#go \
#gron \
#hadolint \
#pnpm
#sqlite \
#stripe-cli \
#visidata \
# OpenAI Codex # Install homebrew dependencies (dnf on Fedora, apt on Debian/Ubuntu).
brew install --cask codex if command -v dnf >/dev/null 2>&1; then
sudo dnf group install development-tools
elif command -v apt-get >/dev/null 2>&1; then
sudo apt-get update
sudo apt-get install -y build-essential procps curl file git
else
echo "No supported package manager (dnf/apt-get) found for homebrew deps" >&2
exit 1
fi
brew services start atuin if command -v brew >/dev/null 2>&1; then
echo "Homebrew already installed, skipping"
else
echo "Installing homebrew"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
# Install system packages # NOTE: Do not brew install anything with a dependency on node.
sudo dnf install \ # Instead, use mise.
alacritty \ #
bubblewrap \ # mise use --global npm:<package-name>
copyq \ #
direnv \ # Do use this for anything that has dynamic dependencies.
distrobox \ # Single-file CLI tools (bat, fd, ripgrep, gh, lazygit, neovim, etc.) are
fuse-libs \ # For running appimages # managed by mise now, pinned in ~/.config/mise/config.toml and installed
grim \ # by `mise install` below. Only keep things here that mise can't handle
gstreamer1-plugin-openh264 mozilla-openh264 \ # For twitch videos # well: the login shell, build toolchain, a service, or dynamic-dep tools.
podman \ brew install \
qalculate qalculate-gtk \ # Homebrew version installs x11 and waylany in brew. atuin \
slurp \ fish \
socat \ fzf \
wf-recorder gcc \
git \
mise \
sqlite \
stow
#gron \
#visidata \
sudo dnf copr enable scottames/ghostty # Run stow now as soon as it's available so that config files are in
sudo dnf install ghostty # place before more services are started or installed.
./run-stow.sh
# Install global packages managed by mise. # NOTE: claude was installed using the install script:
mise install # curl -fsSL https://claude.ai/install.sh | bash
# Install tailscale # OpenAI Codex
# https://tailscale.com/kb/1511/install-fedora-2 brew install --cask codex
# Install flatpaks brew services start atuin
flatpak install flathub com.github.jeromerobert.pdfarranger
flatpak install flathub fr.handbrake.ghb
flatpak install flathub org.gimp.GIMP
flatpak install flathub org.gimp.GIMP
flatpak install flathub org.gimp.GIMP.Plugin.GMic
flatpak install flathub org.gnucash.GnuCash
flatpak install flathub org.inkscape.Inkscape
flatpak install flathub org.jellyfin.JellyfinDesktop
flatpak install flathub org.kde.digikam
flatpak install flathub org.kde.kdenlive
flatpak install flathub org.kde.okular
flatpak install flathub org.kde.skanpage
flatpak install flathub org.libreoffice.LibreOffice
flatpak install flathub org.musicbrainz.Picard
flatpak remote-add --user --if-not-exists sonuscape https://dl.sonuscape.net/flatpak/sonuscape.flatpakrepo # Install global packages managed by mise.
flatpak install net.sonuscape.mouseless//preview # Should be run after ./run-stow.sh.
mise install
# Install devbox # Install tailscale
# https://www.jetify.com/docs/devbox/installing-devbox # https://tailscale.com/kb/1511/install-fedora-2
curl -fsSL https://get.jetify.com/devbox | bash
# Installing tmux plugins # Installing tmux plugins
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm if [ -d ~/.tmux/plugins/tpm ]; then
git -C ~/.tmux/plugins/tpm pull --ff-only
else
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
fi
}
install_desktop() {
# Install flatpaks
flatpak install flathub com.github.jeromerobert.pdfarranger
flatpak install flathub fr.handbrake.ghb
flatpak install flathub org.gimp.GIMP
flatpak install flathub org.gimp.GIMP.Plugin.GMic
flatpak install flathub org.gnucash.GnuCash
flatpak install flathub org.inkscape.Inkscape
flatpak install flathub org.jellyfin.JellyfinDesktop
flatpak install flathub org.kde.digikam
flatpak install flathub org.kde.kdenlive
flatpak install flathub org.kde.okular
flatpak install flathub org.kde.skanpage
flatpak install flathub org.libreoffice.LibreOffice
flatpak install flathub org.musicbrainz.Picard
flatpak install flathub org.qgis.qgis
# Install system packages
#
# - fuselibs for running appimages
# - gstreamer1-plugin-openh264 and mozilla-openh264 for twitch streams
# - qalculate and qalculate-gtk are here because the homebrew version installs x11 and wayland.
#
# tmux moved to mise (pinned in ~/.config/mise/config.toml). It was on dnf,
# not brew, most likely because brew's tmux couldn't find the tmux-256color
# terminfo entry; the mise static build is on trial. To roll back, add
# `tmux \` to the dnf list below.
sudo dnf install \
alacritty \
bubblewrap \
copyq \
direnv \
distrobox \
fuse-libs \
grim \
gstreamer1-plugin-openh264 mozilla-openh264 \
podman \
qalculate qalculate-gtk \
slurp \
socat \
wf-recorder
}
install_server() {
# Packages only needed on a headless server.
#
# tmux now comes from mise (install_common), pinned in config.toml, so both
# machines get the same version -- nothing server-specific is needed. To roll
# back to the distro package, restore: sudo apt install -y tmux
#
# NOTE: Debian may lack the tmux-256color terminfo entry (it's in the
# ncurses-term package); install it if tmux complains about the terminal.
:
}
main() {
case "${1:-}" in
desktop)
install_common
install_desktop
;;
server)
install_common
install_server
;;
*)
echo "Usage: $0 <desktop|server>" >&2
exit 1
;;
esac
}
main "$@"