Initial commit
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
# photogallery
|
||||
|
||||
A minimal static photo gallery with an Atom feed and an upload API.
|
||||
|
||||
## How it works
|
||||
|
||||
1. Drop `photo.jpg` + `photo.toml` into the content directory (or upload via the web UI at `/upload`).
|
||||
2. The binary watches the directory and rebuilds the static site on any change.
|
||||
3. nginx serves `public/` and proxies `/upload` to the local API, secured with htpasswd.
|
||||
|
||||
## Sidecar format
|
||||
|
||||
```toml
|
||||
caption = "Tempelhof at sunrise"
|
||||
date = "2026-06-14"
|
||||
```
|
||||
|
||||
If no `.toml` is present the filename is used as the caption and today's date as the date.
|
||||
|
||||
---
|
||||
|
||||
## Using as a NixOS flake module
|
||||
|
||||
### 1. Add to your flake inputs
|
||||
|
||||
```nix
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
photogallery.url = "github:youruser/photogallery";
|
||||
};
|
||||
```
|
||||
|
||||
### 2. Import the module
|
||||
|
||||
```nix
|
||||
nixosConfigurations.myhost = nixpkgs.lib.nixosSystem {
|
||||
modules = [
|
||||
inputs.photogallery.nixosModules.default
|
||||
./configuration.nix
|
||||
];
|
||||
};
|
||||
```
|
||||
|
||||
### 3. Configure
|
||||
|
||||
```nix
|
||||
services.photogallery = {
|
||||
enable = true;
|
||||
baseURL = "https://photos.yourdomain.tld";
|
||||
|
||||
# Optional: built-in nginx vhost
|
||||
nginx = {
|
||||
enable = true;
|
||||
domain = "photos.yourdomain.tld";
|
||||
htpasswdFile = "/etc/nginx/.htpasswd-gallery";
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
Create the htpasswd file:
|
||||
|
||||
```bash
|
||||
nix-shell -p apacheHttpd --run \
|
||||
"htpasswd -c /etc/nginx/.htpasswd-gallery youruser"
|
||||
```
|
||||
|
||||
### Available options
|
||||
|
||||
| Option | Default | Description |
|
||||
|-----------------------------|------------------------------------|--------------------------------------|
|
||||
| `enable` | `false` | Enable the service |
|
||||
| `baseURL` | — | Public URL, no trailing slash |
|
||||
| `contentDir` | `/var/lib/photogallery/content` | Images and .toml sidecars |
|
||||
| `outputDir` | `/var/lib/photogallery/public` | Generated site output |
|
||||
| `port` | `8080` | Upload API port (localhost only) |
|
||||
| `nginx.enable` | `false` | Configure an nginx vhost |
|
||||
| `nginx.domain` | — | Domain for the vhost |
|
||||
| `nginx.htpasswdFile` | — | htpasswd file for `/upload` |
|
||||
| `nginx.enableACME` | `true` | Enable Let's Encrypt |
|
||||
|
||||
---
|
||||
|
||||
## Bootstrap (first build)
|
||||
|
||||
`buildGoModule` needs a `go.sum` and the correct `vendorHash`.
|
||||
|
||||
```bash
|
||||
# 1. Generate go.sum
|
||||
go mod tidy
|
||||
|
||||
# 2. Commit go.sum
|
||||
git add go.sum && git commit -m "add go.sum"
|
||||
|
||||
# 3. Get the vendorHash — this will fail and print the correct hash
|
||||
nix build
|
||||
# error: hash mismatch ... got: sha256-XXXXX...
|
||||
|
||||
# 4. Paste the hash into flake.nix, then build again
|
||||
nix build
|
||||
```
|
||||
|
||||
## Uploading via curl
|
||||
|
||||
```bash
|
||||
curl -u user:password \
|
||||
-F "image=@photo.jpg" \
|
||||
-F "caption=Tempelhof at sunrise" \
|
||||
-F "date=2026-06-14" \
|
||||
https://photos.yourdomain.tld/upload
|
||||
```
|
||||
|
||||
Or open `https://photos.yourdomain.tld/upload` in a browser.
|
||||
Reference in New Issue
Block a user