# intake `intake` is an arbitrary feed aggregator. ## Feed Source Interface The base `intake` directory is `$XDG_DATA_HOME/intake`. Each feed source's data is contained within a subdirectory of the base directory. The name of the feed source is the name of the subdirectory. Feed source directories have the following structure: ``` intake |- | |- intake.json | |- state | |- .item | |- .item | |- ... |- | | ... | ... ``` `intake.json` must be present; the other files are optional. Each `.item` file contains the data for one feed item. `state` provides a file for the feed source to write arbitrary data, e.g. JSON or binary data. `intake.json` has the following structure: ``` { "fetch": { "exe": "", "args": ["list", "of", "program", "arguments"] }, "action": { "": { "exe": "...", "args": "..." } }, "env": { ... } } ``` `fetch` is required. If `action` or `env` are absent, they will be treated as if they were empty. When a feed source is updated, `fetch.exe` will be executed with `fetch.args` as arguments. The following environment variables will be set: * `STATE_PATH` is set to the absolute path of `state`. * Each key in `env` in `config.json` is passed with its value. Each line written to the process's `stdout` will be parsed as a JSON object representing a feed item. Each line written to `stderr` will be logged by intake. `stdout` and `stderr` are decoded as UTF-8. If invalid JSON is written, intake will consider the feed update to be a failure. If the exit code is nonzero, intake will consider the feed update to be a failure, even if valid JSON was received. No changes will happen to the feed state as a result of a failed update. Item actions are performed by executing `action..exe` with `action..args` as arguments.