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"
+110 -55
View File
@@ -1,85 +1,93 @@
# Install homebrew dependencies #!/usr/bin/env bash
sudo dnf group install development-tools #
# 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" echo "Installing homebrew"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /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. # NOTE: Do not brew install anything with a dependency on node.
# Instead, use mise. # Instead, use mise.
# #
# mise use --global npm:<package-name> # mise use --global npm:<package-name>
# #
# Do use this for anything that has dynamic dependencies.
# NOTE: claude was installed using the install script: # Single-file CLI tools (bat, fd, ripgrep, gh, lazygit, neovim, etc.) are
# curl -fsSL https://claude.ai/install.sh | bash # 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 \ brew install \
anomalyco/tap/opencode \
atuin \ atuin \
bat \
btop \
dive \
eza \
fd \
fish \ fish \
fzf \ fzf \
gcc \ gcc \
gh \
git \ git \
git-delta \
hmans/beans/beans \
jq \
lazygit \
mise \ mise \
neovim \ sqlite \
restic \ stow
ripgrep \
stow \
tmux
#crane \
#go \
#gron \ #gron \
#hadolint \
#pnpm
#sqlite \
#stripe-cli \
#visidata \ #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 # OpenAI Codex
brew install --cask codex brew install --cask codex
brew services start atuin 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. # Install global packages managed by mise.
# Should be run after ./run-stow.sh.
mise install mise install
# Install tailscale # Install tailscale
# https://tailscale.com/kb/1511/install-fedora-2 # 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 # Install flatpaks
flatpak install flathub com.github.jeromerobert.pdfarranger flatpak install flathub com.github.jeromerobert.pdfarranger
flatpak install flathub fr.handbrake.ghb flatpak install flathub fr.handbrake.ghb
flatpak install flathub org.gimp.GIMP flatpak install flathub org.gimp.GIMP
flatpak install flathub org.gimp.GIMP
flatpak install flathub org.gimp.GIMP.Plugin.GMic flatpak install flathub org.gimp.GIMP.Plugin.GMic
flatpak install flathub org.gnucash.GnuCash flatpak install flathub org.gnucash.GnuCash
flatpak install flathub org.inkscape.Inkscape 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.kde.skanpage
flatpak install flathub org.libreoffice.LibreOffice flatpak install flathub org.libreoffice.LibreOffice
flatpak install flathub org.musicbrainz.Picard 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 # Install system packages
flatpak install net.sonuscape.mouseless//preview #
# - 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 install_server() {
# https://www.jetify.com/docs/devbox/installing-devbox # Packages only needed on a headless server.
curl -fsSL https://get.jetify.com/devbox | bash #
# 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 main() {
git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm case "${1:-}" in
desktop)
install_common
install_desktop
;;
server)
install_common
install_server
;;
*)
echo "Usage: $0 <desktop|server>" >&2
exit 1
;;
esac
}
main "$@"