Declarative package manager with a TUI - configure once, run on any machine.
Settupper is a terminal application (TUI) that reads a YAML or JSON file with the programs you need, checks what is already installed, and runs install, update, or uninstall with one click - no need to remember distro-specific or operating-system-specific commands.
- You format your computer often and are tired of reinstalling everything manually
- Your team needs a standardized environment without fragile shell scripts
- You maintain multiple machines (personal Linux, work Mac, Windows VM) and want one config
- You prefer declaring what you want instead of remembering how to install it on each OS
- Interactive TUI with list, details, and real-time log panels
- Cross-platform: Ubuntu/Debian, Fedora/RHEL, Arch Linux (and their derivatives), macOS, Windows
- Actions: install, update, uninstall, smart (decides automatically)
- Smart All: installs/updates everything at once while respecting app dependencies
- App dependencies with topological ordering - if
nvmdepends ongit, Git is installed first - Reboot flag - if a package requires a reboot, the TUI stops the queue and notifies you
- Groups to organize and filter apps by category
- Multiple selection with
Spaceto operate on several apps at once - Split-pane resizing by dragging with the mouse
- Dry run (
--dry-run) to see what would be executed without running anything - Export a snapshot of the current state as JSON
- Default config via XDG - no path required if
~/.config/settupper/packages.yamlexists
Linux/macOS:
curl -fsSL https://raw.githubusercontent.com/devbaraus/settupper/main/install.sh | shWindows PowerShell:
irm https://raw.githubusercontent.com/devbaraus/settupper/main/install.ps1 | iexWindows CMD:
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/devbaraus/settupper/main/install.ps1 | iex"By default, the scripts fetch the latest release from GitHub, detect the operating system and architecture, download the matching compiled binary, and install it to:
- Linux/macOS:
~/.local/bin/settupper - Windows:
%LOCALAPPDATA%\Programs\settupper\bin\settupper.exe
After that, if the installation directory is in your PATH, just run:
settupperTo install a specific version:
curl -fsSL https://raw.githubusercontent.com/devbaraus/settupper/main/install.sh | SETTUPPER_VERSION=v0.1.5 shIn PowerShell:
$env:SETTUPPER_VERSION = "v0.1.5"; irm https://raw.githubusercontent.com/devbaraus/settupper/main/install.ps1 | iexIf your terminal cannot find the settupper command, add the installation directory to PATH. On Linux/macOS:
export PATH="$HOME/.local/bin:$PATH"# Run directly without installing (recommended for trying it out)
cargo run
# Install release v0.1.5 as a tool
cargo install --git https://github.com/devbaraus/settupper --tag v0.1.5 --bin settupper --locked --force
# Local development
git clone https://github.com/devbaraus/settupper
cd settupper
cargo build --release
./target/release/settupper examples/packages.yaml# Open the TUI with your config file
settupper my-packages.yaml
# Use the default config at ~/.config/settupper/packages.yaml
settupper
# Show what would be executed without running anything
settupper --dry-run my-packages.yaml| Key | Action |
|---|---|
Space |
Select / deselect item |
Escape |
Clear selection |
i |
Install selected item(s) |
u |
Update selected item(s) |
d |
Uninstall selected item(s) |
a |
Smart: install or update based on status |
Shift+A |
Smart All: all visible apps (respects dependencies) |
r |
Reload status |
e |
Export JSON snapshot |
q |
Quit |
version: 1
groups:
- id: dev-tools
name: Development Tools
- id: runtimes
name: Runtimes
apps:
- id: git
name: Git
group: dev-tools
description: Version control
check:
default:
- command -v git
windows:
- where git
actions:
install:
ubuntu:
- sudo apt-get install -y git
fedora:
- sudo dnf install -y git
arch:
- sudo pacman -S --noconfirm git
macos:
- brew install git
windows:
- winget install --id Git.Git -e
update:
ubuntu:
- sudo apt-get install --only-upgrade -y git
fedora:
- sudo dnf upgrade -y git
arch:
- sudo pacman -Syu --noconfirm git
macos:
- brew upgrade git
windows:
- winget upgrade --id Git.Git -e
uninstall:
ubuntu:
- sudo apt-get remove -y git
fedora:
- sudo dnf remove -y git
arch:
- sudo pacman -Rns --noconfirm git
macos:
- brew uninstall git
windows:
- winget uninstall --id Git.Git -e
- id: nvm
name: NVM
group: runtimes
description: Node Version Manager
depends_on:
- git # git will be installed before nvm
reboot_on:
install: false
check:
default:
- test -d "$HOME/.nvm"
actions:
install:
default:
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash| Field | Required | Description |
|---|---|---|
id |
yes | Unique identifier (generated from name if omitted) |
name |
yes | Name displayed in the TUI |
description |
no | Short description |
group |
no | Group ID used to filter in the TUI |
depends_on |
no | List of app IDs that must be installed first |
reboot_on |
no | Action -> bool map indicating whether a reboot is required |
check |
no | Commands to check whether the app is installed (by distro or default) |
actions.install |
no | Installation commands by distro |
actions.update |
no | Update commands by distro |
actions.uninstall |
no | Removal commands by distro |
ubuntu (also debian, linuxmint, pop, zorin, kali, etc.), fedora (also rhel, centos, rocky, almalinux, nobara, bazzite, etc.), arch (also archlinux, manjaro, endeavouros, cachyos, garuda, etc.), macos, windows, default (fallback for any distro)
| Lib | Usage |
|---|---|
| Ratatui | Framework TUI |
| Serde | YAML config parser |
| Tokio | Dependency management and execution |
This project was built entirely through Vibe Coding - a practice where the developer describes what they want in natural language and AI (in this case, Anthropic's Claude) writes all the code.
MIT
