feat: ADD work with local .env file #14

This commit is contained in:
Caffeine Fueled 2026-08-21 07:01:29 +02:00
parent 30e6956fa4
commit d0373f0198
Signed by: cf7
GPG key ID: CA295D643074C68C
4 changed files with 81 additions and 0 deletions

24
.env.example Normal file
View file

@ -0,0 +1,24 @@
# Shellery configuration
#
# cp .env.example .env
#
# Every value below is the built-in default, so an unedited copy changes
# nothing. .env is read from the working directory and is gitignored.
#
# Precedence: command line flags > environment > .env > these defaults.
# This file is sourced by build.sh, so shell syntax applies.
# Page title. Used for both <title> and the <h1> header.
# Special characters are HTML-escaped automatically.
# Flag: --title=TEXT
GALLERY_TITLE="Gallery"
# Show the "Powered by shellery" footer. 1 = show, 0 = hide.
# Flag: --no-footer
SHOW_FOOTER=1
# Strip EXIF/GPS/IPTC/XMP metadata from the images copied into output/.
# 1 = strip (requires exiftool), 0 = publish metadata as-is.
# Source images in images/ are never modified either way.
# Flag: --keep-exif
STRIP_EXIF=1

3
.gitignore vendored
View file

@ -5,3 +5,6 @@ output/*
# Ignore content in images directory
images/*
!images/.gitkeep
# Local configuration (see .env.example)
.env

View file

@ -14,6 +14,7 @@ Simple SSG to create dynamic gallery one-pagers in your shell! Shell+Gallery
**Available**:
- Simple use, single dependency (exiftool)
- Removes EXIF/GPS metadata from published images by default
- Configurable title and optional footer via environment variables
- no Javascript
- Lightbox of image with anchor
- Order of images via filename
@ -70,6 +71,42 @@ docker run -v $(pwd)/images:/app/images -v $(pwd)/output:/app/output localhost/s
The generated gallery will be in `./output/index.html`
### Configuration
All options can be set in a `.env` file, as environment variables, or as flags.
`.env.example` lists every option with its default, so an unedited copy changes nothing:
```bash
cp .env.example .env
```
`.env` is gitignored. Precedence is **flags > environment > `.env` > defaults**, so a
`-e` value passed to the container still wins over the file. Point `ENV_FILE` at another
path to use a different file.
| Variable | Flag | Default | Effect |
|---|---|---|---|
| `GALLERY_TITLE` | `--title=TEXT` | `Gallery` | Page `<title>` and the `<h1>` header |
| `SHOW_FOOTER` | `--no-footer` | `1` | Set to `0` to hide the "Powered by shellery" footer |
| `STRIP_EXIF` | `--keep-exif` | `1` | Set to `0` to publish image metadata as-is |
| `ENV_FILE` | - | `.env` | Path to the config file to load |
```bash
GALLERY_TITLE="Holiday 2026" SHOW_FOOTER=0 ./build.sh
# or
./build.sh --title="Holiday 2026" --no-footer
# container, via -e
podman run -e GALLERY_TITLE="Holiday 2026" -e SHOW_FOOTER=0 \
-v $(pwd)/images:/app/images -v $(pwd)/output:/app/output \
git.uphillsecurity.com/cf7/shellery:latest
# container, via a mounted .env
podman run -v $(pwd)/.env:/app/.env:ro \
-v $(pwd)/images:/app/images -v $(pwd)/output:/app/output \
git.uphillsecurity.com/cf7/shellery:latest
```
### Metadata removal
EXIF, GPS, IPTC and XMP metadata is stripped from every image by default. Only the copies

View file

@ -10,6 +10,20 @@ OUTPUT_DIR="output"
TEMPLATES_DIR="templates"
ASSETS_DIR="assets"
# Load .env if present; see .env.example for every option and its default.
# Precedence: command line flags > environment > .env > built-in defaults.
ENV_FILE="${ENV_FILE:-.env}"
if [[ -f "$ENV_FILE" ]]; then
# Remember caller-supplied values so the file cannot clobber them
env_override=$(export -p | grep -E '^declare -x (STRIP_EXIF|GALLERY_TITLE|SHOW_FOOTER)=' || true)
# shellcheck source=/dev/null
source "$ENV_FILE"
if [[ -n "$env_override" ]]; then
eval "$env_override"
fi
unset env_override
fi
# Image metadata (EXIF/GPS/IPTC/XMP) is stripped by default.
# Opt out with STRIP_EXIF=0 or --keep-exif.
STRIP_EXIF="${STRIP_EXIF:-1}"
@ -30,6 +44,9 @@ for arg in "$@"; do
echo " --keep-exif do not strip image metadata (env: STRIP_EXIF=0)"
echo " --no-footer hide the 'Powered by shellery' footer (env: SHOW_FOOTER=0)"
echo " --title=TEXT page title and header, default 'Gallery' (env: GALLERY_TITLE)"
echo ""
echo "Options may also be set in .env (see .env.example)."
echo "Precedence: flags > environment > .env > defaults."
exit 0 ;;
*) echo "unknown option: $arg" >&2; exit 1 ;;
esac