205 lines
4.6 KiB
Markdown
205 lines
4.6 KiB
Markdown
# 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 <argumenten>
|
|
```
|
|
|
|
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.
|