commit 9264facc8e6316da291be7575b1ef07672d50f30 Author: eddy Date: Tue Aug 18 14:15:57 2026 +0200 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..7b0610d --- /dev/null +++ b/README.md @@ -0,0 +1,205 @@ +# ompstart + +`ompstart` is een kleine wrapper voor het starten van [Oh My Pi](https://github.com/canadaduane/oh-my-pi) (`omp`). Voor iedere startsessie voert het script eerst de beschikbare Homebrew-updates uit en werkt het daarna `omp` zelf bij. Pas wanneer beide stappen succesvol zijn afgerond, start het de normale `omp`-toepassing. + +## Werking + +De uitvoervolgorde is strikt: + +```text +brew upgrade -y + | + v +omp update + | + v +exec omp +``` + +Het script doet het volgende: + +1. Controleert of `brew` in `PATH` staat. +2. Controleert of `omp` in `PATH` staat. +3. Voert `brew upgrade -y` uit. +4. Voert `omp update` uit. +5. Vervangt het wrapperproces met `omp`, waarbij alle meegegeven argumenten worden doorgegeven. + +De optie `-y` is de Homebrew-alias voor `--yes` en `--no-ask`. Daarmee wordt de bevestigingsvraag voor het downloaden en upgraden overgeslagen. + +## Waarom `exec`? + +De laatste regel gebruikt: + +```bash +exec omp "$@" +``` + +`exec` start `omp` in hetzelfde proces in plaats van een extra shellproces achter te laten. `"$@"` geeft alle argumenten veilig en ongewijzigd door, inclusief argumenten met spaties. + +Voorbeeld: + +```bash +ompstart --profile mijn-profiel +``` + +is functioneel gelijk aan: + +```bash +omp --profile mijn-profiel +``` + +nadat de twee update-stappen zijn uitgevoerd. + +## Vereisten + +Het script verwacht: + +- een POSIX-achtige shell met Bash; +- Homebrew met de opdracht `brew` in `PATH`; +- Oh My Pi met de opdracht `omp` in `PATH`; +- een werkende internetverbinding voor de updates. + +Homebrew is beschikbaar op zowel Linux als macOS. De locatie van Homebrew verschilt per platform, maar dat is geen probleem zolang de installatie de juiste locatie aan `PATH` toevoegt. + +## Installatie + +Clone de repository naar een geschikte map: + +```bash +git clone https://git.eddydevink.nl/eddy/starting-omp.git +cd starting-omp +``` + +Maak het script uitvoerbaar: + +```bash +chmod +x ompstart +``` + +### Beschikbaar maken als gebruikerscommando + +De aanbevolen locatie voor een persoonlijke installatie op Linux en macOS is `~/bin`: + +```bash +mkdir -p "$HOME/bin" +ln -s "$PWD/ompstart" "$HOME/bin/ompstart" +``` + +Voeg `~/bin` eenmalig toe aan `PATH`. + +Voor Bash, bijvoorbeeld in `~/.profile`: + +```bash +export PATH="$HOME/bin:$PATH" +``` + +Voor Zsh, de standaard shell op recente macOS-versies, bijvoorbeeld in `~/.zprofile`: + +```zsh +export PATH="$HOME/bin:$PATH" +``` + +Start daarna een nieuwe shell of laad de configuratie opnieuw: + +```bash +exec "$SHELL" -l +``` + +Controleer de installatie: + +```bash +command -v ompstart +``` + +Daarna kan het programma overal worden gestart met: + +```bash +ompstart +``` + +### Beschikbaar maken voor alle gebruikers + +Wil je het commando voor alle gebruikers beschikbaar maken, plaats dan een symlink in `/usr/local/bin`: + +```bash +sudo -A ln -s "$PWD/ompstart" /usr/local/bin/ompstart +``` + +Daarvoor zijn beheerdersrechten nodig. Voor persoonlijk gebruik heeft `~/bin` de voorkeur: daarvoor zijn geen beheerdersrechten nodig en de installatie blijft onafhankelijk van Homebrew-beheer. + +## Foutafhandeling + +Het script gebruikt: + +```bash +set -euo pipefail +``` + +Daarmee geldt: + +- als `brew` ontbreekt, stopt het script met foutcode `127`; +- als `omp` ontbreekt, stopt het script met foutcode `127`; +- als `brew upgrade -y` mislukt, wordt `omp update` niet uitgevoerd; +- als `omp update` mislukt, wordt de toepassing niet gestart; +- alleen na een succesvolle update wordt het normale `omp` gestart. + +Er wordt bewust geen fallback of gedeeltelijke start uitgevoerd. Zo wordt voorkomen dat `omp` na een mislukte update in een onduidelijke toestand wordt gestart. + +## Script + +De volledige implementatie staat in [`ompstart`](./ompstart): + +```bash +#!/usr/bin/env bash +set -euo pipefail + +if ! command -v brew >/dev/null 2>&1; then + printf 'Fout: brew is niet gevonden in PATH.\n' >&2 + exit 127 +fi + +if ! command -v omp >/dev/null 2>&1; then + printf 'Fout: omp is niet gevonden in PATH.\n' >&2 + exit 127 +fi + +# Run the upgrade without asking for confirmation. +brew upgrade -y +omp update +exec omp "$@" +``` + +## Gebruik + +Normaal starten: + +```bash +ompstart +``` + +Argumenten doorgeven aan `omp`: + +```bash +ompstart --help +ompstart --profile mijn-profiel +``` + +De argumenten worden niet gebruikt door `brew upgrade` of `omp update`; ze worden uitsluitend doorgegeven aan het uiteindelijke `omp`-proces. + +## Onderhoud + +De repository bevat geen eigen afhankelijkheden of buildstap. Wijzigingen aan het script kunnen direct worden getest met: + +```bash +bash -n ompstart +``` + +Controleer daarnaast of het bestand uitvoerbaar is: + +```bash +test -x ompstart && echo 'uitvoerbaar' +``` + +## Licentie + +Er is momenteel geen aparte licentie aan deze kleine persoonlijke wrapper gekoppeld. diff --git a/ompstart b/ompstart new file mode 100755 index 0000000..c52532c --- /dev/null +++ b/ompstart @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -euo pipefail + +if ! command -v brew >/dev/null 2>&1; then + printf 'Fout: brew is niet gevonden in PATH.\n' >&2 + exit 127 +fi + +if ! command -v omp >/dev/null 2>&1; then + printf 'Fout: omp is niet gevonden in PATH.\n' >&2 + exit 127 +fi + +# Run the upgrade without asking for confirmation. +brew upgrade -y +omp update +exec omp "$@"