diff --git a/README.md b/README.md index b868415..a2ee1db 100644 --- a/README.md +++ b/README.md @@ -41,24 +41,67 @@ already seen so nothing is delivered twice. ## Installation +### Arch Linux + +A `PKGBUILD` lives in [`packaging/archlinux`](packaging/archlinux). Build and +install the package with `makepkg`: + +```sh +git clone https://src.panahifar.ir/ahp/lazyntfy.git +cd lazyntfy/packaging/archlinux +makepkg -si +``` + +This installs `/usr/bin/lazyntfy`, the man page under `/usr/share/man`, the +license, and the README, and pulls in `ca-certificates` so TLS to your ntfy +server works. + +### Debian and Ubuntu + +A debhelper-free source package lives in [`debian`](debian). Build a `.deb` and +install it system-wide: + +```sh +git clone https://src.panahifar.ir/ahp/lazyntfy.git +cd lazyntfy +make deb # writes dist/lazyntfy__.deb +sudo apt install ./dist/lazyntfy_*.deb +``` + +`apt install ./file.deb` (or `dpkg -i` followed by `apt -f install`) resolves +the `ca-certificates` dependency. The packaging needs only the Go toolchain and +`dpkg-dev`; `make deb` passes `-d` so it also builds where `golang-go` is not +installed as a distribution package. + ### From source ```sh git clone https://src.panahifar.ir/ahp/lazyntfy.git cd lazyntfy -make install # installs the binary and the man page under ~/.local +make install # into ~/.local, no root needed ``` -`make install` honors `PREFIX` (default `~/.local`): +`make install` honors `PREFIX`, `BINDIR`, `MANDIR`, `DOCDIR`, and `DESTDIR`. +Picking a system prefix installs for every user: ```sh -make install PREFIX=/usr/local +sudo make install PREFIX=/usr/local # /usr/local/bin/lazyntfy, /usr/local/share/man/man1 +sudo make install PREFIX=/usr # /usr/bin/lazyntfy, /usr/share/man/man1 +``` + +Stage a filesystem tree into a temporary root instead of the live system (handy +for building your own package): + +```sh +make install DESTDIR="$PWD/stage" PREFIX=/usr ``` ### With `go install` +From a checkout: + ```sh -go install ./cmd/lazyntfy@latest # or: go install lazyntfy/cmd/lazyntfy +go install ./cmd/lazyntfy # binary in $(go env GOPATH)/bin ``` ## Usage @@ -131,6 +174,25 @@ messages are pruned on startup. Credentials are never written to the database the current run's authentication is always used. History is best effort: if the file cannot be opened, the client still runs. +## Packaging + +Both package formats are defined in the repository. `make deb` builds a Debian +package from the working tree; the Arch `PKGBUILD` builds the `v$pkgver` release +archive from the Gitea instance. + +| Format | Build | Definition | +| --- | --- | --- | +| Debian / Ubuntu | `make deb` → `dist/*.deb` | [`debian/`](debian) | +| Arch Linux | `make arch` → `makepkg` | [`packaging/archlinux/PKGBUILD`](packaging/archlinux/PKGBUILD) | + +When cutting a release: + +1. Bump the version in [`debian/changelog`](debian/changelog) and `pkgver` in + the `PKGBUILD`. +2. Tag the commit (`git tag -s vX.Y.Z`) and push it. +3. In `packaging/archlinux`, run `updpkgsums` to refresh the tarball checksum and + `makepkg --printsrcinfo > .SRCINFO`. + ## Development ```sh @@ -162,6 +224,8 @@ go test ./internal/history/... | `internal/textutil` | width-aware text wrapping and clipping | | `internal/tui` | Bubble Tea interface | | `man` | `lazyntfy(1)` man page | +| `debian` | Debian / Ubuntu package definition | +| `packaging/archlinux` | Arch Linux `PKGBUILD` | ## Contributing