id = "hammerspoon" name = "Hammerspoon" homepage = "https://www.hammerspoon.org" description = "This is a tool for powerful automation of macOS." # The Hammerspoon application icon, from the app's icon set in the project's # repository. icon = "https://raw.githubusercontent.com/Hammerspoon/hammerspoon/master/Hammerspoon/Images.xcassets/AppIcon.appiconset/256.png" # Hammerspoon is a menu-bar app, but it ships a command line tool: `hs`, # installed by hs.ipc.cliInstall() — "Installs the `hs` command line tool" # (https://www.hammerspoon.org/docs/hs.ipc.html). The binary is what a user # types, so it is what `detect` names; the bundle identifier is # org.hammerspoon.Hammerspoon, which the project's own FAQ uses in # `tccutil reset All org.hammerspoon.Hammerspoon` # (https://www.hammerspoon.org/faq/). executables = ["hs"] platforms = ["macos"] [dotfiles] # https://www.hammerspoon.org/go/ — "~/.hammerspoon/init.lua" is the config # file, and the same guide watches os.getenv("HOME") .. "/.hammerspoon/" for # changes. The directory rather than init.lua alone: a config of any size # `require`s further Lua files from beside it, and Hammerspoon/MJAppDelegate.m # creates the Spoons directory as MJConfigDirAbsolute() + "/Spoons", so the # plugins a user installs land in the same tree. # # The preferences domain is the app's own settings rather than the Lua config — # Hammerspoon/variables.h names the keys it writes there: MJShowDockIconKey, # MJShowMenuIconKey, MJKeepConsoleOnTopKey, HSAutoLoadExtensions, # HSUploadCrashData, HSAppleScriptEnabledKey, HSConsoleDarkModeKey. paths = [ "~/.hammerspoon/", "[preferences]/org.hammerspoon.Hammerspoon.plist", ] # Nothing here is a credential end to end. A user's init.lua may of course hold # an API token inline, which is a matter for the consumer's content scan rather # than something this catalog can name. secret = [] # No machine_lines. An init.lua is Lua, so a prefix rule would match source # lines rather than settings, and the window layouts, hotkeys and Spoon # configuration in it are the whole reason to carry the file. One key does # belong to a single machine — MJConfigFile in the preferences domain, which # MJAppDelegate.m reads to relocate the config directory and which holds an # absolute path — but a property list has no matcher in this schema, whose # `format` covers toml, yaml and json only.