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"
[tools]
node = "lts"
pnpm = "latest"
"npm:@anthropic-ai/sandbox-runtime" = "latest"
"npm:typescript-language-server" = "latest"
"npm:typescript" = "latest"
# Short names resolve to the aqua backend (checksum + signature verified)
"aqua:F1bonacc1/process-compose" = "1.120.0"
"aqua:neovim/neovim" = "0.12.4"
"github:Satty-org/Satty" = "0.20.1"
"github:F1bonacc1/process-compose" = "latest"
"npm:@earendil-works/pi-coding-agent" = "latest"
uv = "latest"
"npm:@anthropic-ai/sandbox-runtime" = "0.0.67"
"npm:@earendil-works/pi-coding-agent" = "0.83.0"
"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"
+110 -55
View File
@@ -1,85 +1,93 @@
# Install homebrew dependencies
sudo dnf group install development-tools
#!/usr/bin/env bash
#
# 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.
#
set -euo pipefail
install_common() {
# Packages installed on every machine (desktop and headless server).
# Install homebrew dependencies (dnf on Fedora, apt on Debian/Ubuntu).
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
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
# NOTE: Do not brew install anything with a dependency on node.
# Instead, use mise.
#
# mise use --global npm:<package-name>
#
# NOTE: claude was installed using the install script:
# curl -fsSL https://claude.ai/install.sh | bash
# Do use this for anything that has dynamic dependencies.
# Single-file CLI tools (bat, fd, ripgrep, gh, lazygit, neovim, etc.) are
# managed by mise now, pinned in ~/.config/mise/config.toml and installed
# by `mise install` below. Only keep things here that mise can't handle
# well: the login shell, build toolchain, a service, or dynamic-dep tools.
brew install \
anomalyco/tap/opencode \
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 \
sqlite \
stow
#gron \
#hadolint \
#pnpm
#sqlite \
#stripe-cli \
#visidata \
# Run stow now as soon as it's available so that config files are in
# place before more services are started or installed.
./run-stow.sh
# NOTE: claude was installed using the install script:
# curl -fsSL https://claude.ai/install.sh | bash
# OpenAI Codex
brew install --cask codex
brew services start atuin
# Install system packages
sudo dnf install \
alacritty \
bubblewrap \
copyq \
direnv \
distrobox \
fuse-libs \ # For running appimages
grim \
gstreamer1-plugin-openh264 mozilla-openh264 \ # For twitch videos
podman \
qalculate qalculate-gtk \ # Homebrew version installs x11 and waylany in brew.
slurp \
socat \
wf-recorder
sudo dnf copr enable scottames/ghostty
sudo dnf install ghostty
# Install global packages managed by mise.
# Should be run after ./run-stow.sh.
mise install
# Install tailscale
# https://tailscale.com/kb/1511/install-fedora-2
# Installing tmux plugins
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
flatpak install flathub org.gimp.GIMP.Plugin.GMic
flatpak install flathub org.gnucash.GnuCash
flatpak install flathub org.inkscape.Inkscape
@@ -90,14 +98,61 @@ 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
flatpak remote-add --user --if-not-exists sonuscape https://dl.sonuscape.net/flatpak/sonuscape.flatpakrepo
flatpak install net.sonuscape.mouseless//preview
# 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 devbox
# https://www.jetify.com/docs/devbox/installing-devbox
curl -fsSL https://get.jetify.com/devbox | bash
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.
:
}
# Installing tmux plugins
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
main() {
case "${1:-}" in
desktop)
install_common
install_desktop
;;
server)
install_common
install_server
;;
*)
echo "Usage: $0 <desktop|server>" >&2
exit 1
;;
esac
}
main "$@"