Alpaca
Alpaca is a command line utility for building Alfred workflow bundles.
An alpaca project is an alpaca.yml
file that defines the workflow, alongside any supporting files, such as scripts or images.
Note: Alpaca is still in the proof-of-concept phase. Huge portions of Alfred functionality are unimplemented.
Contents
Installation
Download the latest release, or:
$ go get github.com/jclem/alpaca
Usage
alpaca pack <dir>
Pack an Alpaca project into an Alfred workflow. The workflow will be output into the current directory.
$ alpaca pack .
Schema
Example
This workflow uses a trigger "say" to say words passed as arguments. For example, the user might type "say hello world" into Alfred.
name: Say
objects:
trigger:
type: keyword
config:
keyword: say
with-space: true
argument: required
then: say
say:
type: script
config:
script:
content: say {query}
type: bash
Root Schema
name
The name of the project
version
The version of the project
author
The author of the project (i.e. Jonathan Clem <jonathan@example.com>
)
bundle-id
The Alfred workflow bundle ID
description
A short description of the workflow
readme
A longer description of the workflow, seen when users import it
url
A homepage URL for the workflow
icon
A project-relative path to an icon to use for the worflow
variables
A map of variable names and their default values
object
An map of objects in the Alfred workflow. Each key is an object name.
Object Schema
icon
A project-relative path to an icon for the object
type
The type of object this is. Currently partial support exists for:
config
A type-specific configuration object, see each type schema for details
then
A string, list of strings, or a list of objects representing other objects to connect to, each objects having this schema:
object
The name of the object to connect to
applescript
cache
(bool
, default true
) Whether to cache the compiled AppleScript
script
A script configuration object, but only content
is respected
clipboard
text
(string
, default "{query}"
) The text to copy to the clipboard—use "{query}"
for the exact query
keyword
keyword
(string
) The keyword that triggers this object
with-space
(bool
) Whether a space is required with this object
title
(string
) The title of the object
subtitle
(string
) The subtitle of the object
argument
(string
) A string determining whether an argument is required. One of:
required
The argument is required
optional
The argument is optional
none
No argument is accepted
open-url
url
(string
) The URL to open. Use "{query}"
for the exact query
script
script
A script configuration object
script-filter
argument
(string
) A string determining whether an argument is required. One of:
required
The argument is required
optional
The argument is optional
none
No argument is accepted
argument-trim
(string
) Whether to trim the argument's whitespace. One of:
auto
Argument automatically trimmed
off
Argument not trimmed
escaping
([]string
) A list of strings to escape in the query text, if the script object's arg-type
is query
. Any of:
spaces
backquotes
double-quote
brackets
semicolons
dollars
backslashes
ignore-empty-argument
(bool
) Whether an empty argument (when arg-type
is argv
in script config) is omitted from argv
(when false
, it will be an empty string)
keyword
(string
) The keyword that triggers this object
running-subtitle
(string
) A subtitle to display while this filter runs
subtitle
(string
) A subtitle for this object
title
(string
) A title for this object
with-space
(bool
) Whether a space is required with this object
alfred-filters-results
An object describing how Alfred filters results (it does not if this is omitted):
mode
(string
) The mode Alfred uses to filter results. One of:
exact-boundary
exact-start
word-match
run-behavior
An object describing behavior of the script run
immediate
(bool
) Whether to run immediately always for the first character typed
queue-mode
(string
) A mode for how script runs are queued. One of:
wait
Wait for previous run to complete
terminate
Terminate previous run immediately and start a new one
queue-delay
(string
) A delay mode for queueing script runs. One of:
immediate
No delay
automatic
Automatic after last character typed
100ms
100ms after last character typed
200ms
200ms after last character typed
300ms
300ms after last character typed
400ms
400ms after last character typed
500ms
500ms after last character typed
600ms
600ms after last character typed
700ms
700ms after last character typed
800ms
800ms after last character typed
900ms
900ms after last character typed
1000ms
1000ms after last character typed
script
A script configuration object
Script Schema
There are a few types of script schemas possible, in addition to these options:
Executable Script
This version executes the script at the given path (it must be executable).
path
(string
) The path to the script
Inline Script
This version executes an inline script.
arg-type
(string
) The way the argument is passed to the script. One of:
query
Interpolated as (query
)
argv
Passed into process arguments
content
(string
) The content of the script
type
(string
) The type of script, one of:
bash
php
ruby
python
perl
zsh
osascript-as
osascript-js