No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Tim Hårek Andreassen 449f811eab build: Move module path to src.timharek.no/tim/art
git.sr.ht is being decommissioned. The Forgejo instance serves the
go-import meta tag, so tag-based 'go get' keeps working under the new
path. The ../rawg-go and ../openlibrary-go workspace replaces now point
at their renamed modules (openlibrary-go v0.0.1, rawg-go v1.0.1 carry
the same rename).
2026-09-09 21:55:28 +02:00
cmd build: Move module path to src.timharek.no/tim/art 2026-09-09 21:55:28 +02:00
internal build: Move module path to src.timharek.no/tim/art 2026-09-09 21:55:28 +02:00
pkg build: Move module path to src.timharek.no/tim/art 2026-09-09 21:55:28 +02:00
testdata feat: Replace "$schema" key with "#:schema" directive 2026-09-01 11:15:58 +02:00
.gitignore refactor: Replace custom config with viper 2026-08-11 22:40:28 +02:00
.golangci.toml dev: Add check 2025-07-04 20:31:55 +02:00
go.mod build: Move module path to src.timharek.no/tim/art 2026-09-09 21:55:28 +02:00
go.sum build: Move module path to src.timharek.no/tim/art 2026-09-09 21:55:28 +02:00
LICENSE.md Initial commit 2024-10-05 22:26:18 +02:00
logs.schema.json feat: Replace "$schema" key with "#:schema" directive 2026-09-01 11:15:58 +02:00
mise.toml refactor: Drop viper and go.tool, pin go and golangci-lint in mise 2026-08-28 13:50:20 +02:00
README.md refactor: Replace custom config with viper 2026-08-11 22:40:28 +02:00

ART

Personal CLI tool for logging books, movies, TV shows, and games. Mostly made for myself.

Named after my favorite character from the Murderbot Diaries.

Features

  • Log and list books, movies, TV shows, and games with ratings and reviews
  • Search and fetch metadata from external APIs:
  • Works without internet — falls back to manual entry
  • Interactive terminal forms via Charm
  • Star ratings (1–5) with optional review comments
  • JSON output (--json) for all list commands
  • Pager support via $PAGER (falls back to /usr/bin/less)
  • Logs stored in a single TOML file

Install

Requires Go 1.26+.

make install

By default installs to /usr/local/bin. Override with PREFIX:

make install PREFIX=~/.local

Usage

art [command]

Commands

Command Description
books add Log a book
books list List logged books
books check Find entries missing details
movies add Log a movie
movies list List logged movies
movies check Find entries missing details
tv add Log a TV show season
tv list List logged TV shows
tv check Find entries missing details
games add Log a game
games list List logged games
games check Find entries missing details
init Set up config (API keys, paths)
config Display current configuration
edit Open logs file in $EDITOR

Global flags

  • --debug — Debug output
  • --json — Output in JSON
  • --config <path> — Custom config file path
  • --path <path> — Path to the log file (overrides the logs config value)

Command aliases

  • books / book
  • movies / movie / film / films
  • tv / shows / show
  • games / game

Configuration

Run art init to create the config file:

tmdb_api_key = "your_tmdb_key"
rawg_api_key = "your_rawg_key"
logs = "/path/to/logs.toml"

The TMDB API key is required for movies and TV shows. The RAWG API key is optional but needed for game metadata. OpenLibrary requires no API key.

Config file lookup

Unless --config <path> is given, art.toml is looked up in, in order:

  1. the current directory
  2. $XDG_CONFIG_HOME/art
  3. the user config dir (~/.config/art on Linux, ~/Library/Application Support/art on macOS)
  4. ~/.config/art
  5. $HOME

If none exist, art init writes to the user config dir.

Environment variables

Every config value can be overridden with an ART_-prefixed environment variable:

Variable Config key
ART_TMDB_API_KEY tmdb_api_key
ART_RAWG_API_KEY rawg_api_key
ART_LOGS logs

Precedence is flag → environment variable → config file. A missing config file is not an error as long as the needed values come from flags or the environment.

TODO

  • Traveled: Travel
    • add
    • list
    • import
    • Work without internet
    • Entries missing details
  • Dry-run command: --dry-run, -n
  • Use $PAGER when listing more items that fit on screen
    • Fallback is /usr/bin/less