id = "cerebro" name = "Cerebro" homepage = "https://github.com/cerebroapp/cerebro" description = "Cerebro is an open-source launcher to improve your productivity and efficiency." # The app icon, from the project's build assets. icon = "https://raw.githubusercontent.com/cerebroapp/cerebro/master/build/icons/256x256.png" executables = ["cerebro"] [dotfiles] # Cerebro is Electron, and app/lib/config.js builds its settings with # `new Store({ schema, migrations })` from electron-store, whose default file is # `config.json` in Electron's userData directory. app/main.development.js sets # `process.env.CEREBRO_DATA_PATH = app.getPath('userData')` (only overriding it # with ./userdata in development), and app/package.json gives the productName # Electron names that directory after: "Cerebro". userData is # ~/Library/Application Support/ on macOS, %APPDATA%\ on Windows and # $XDG_CONFIG_HOME/ on Linux — one location under three spellings, which # is [appData]. The Homebrew cask's `zap trash:` names the macOS half of it, # ~/Library/Application Support/Cerebro (Casks/c/cerebro.rb). # # The schema in config.js is the whole of what lives there: locale, lang, # country, theme, hotkey, showInTray, developerMode, cleanOnHide, selectOnShow, # hideOnBlur, plugins, openAtLogin, winPosition, searchBarPlaceholder, # spellcheck. # # app/lib/plugins/index.js keeps the plugin list beside it: # `pluginsPath = path.join(process.env.CEREBRO_DATA_PATH, 'plugins')`, with # `packageJsonPath` inside that. The package.json is the list of plugins the # user chose and is worth carrying. paths = [ "[appData]/Cerebro/config.json", "[appData]/Cerebro/plugins/package.json", ] # `modulesDirectory = path.join(pluginsPath, 'node_modules')` is the npm # checkout of those plugins; Cerebro reinstalls it from the package.json above. # It is not under a path listed here, so there is nothing to carve out of what # is, but it is named so a consumer syncing whole directories skips it. exclude = ["[appData]/Cerebro/plugins/node_modules/"] # Cerebro itself signs in to nothing. A plugin can, but a plugin's own storage # is not a file Cerebro defines. secret = [] # `winPosition` is written by main.development.js from the bounds of the display # the launcher opened on — `config.set('winPosition', [goalX, goalY])`, computed # from `nearestDisplay.bounds`. It is a pair of pixel coordinates that mean # nothing on a machine with different screens. `hotkey`, `theme` and the rest # are deliberately not here: they are what a user wants carried. [[dotfiles.machine_lines]] file = "[appData]/Cerebro/config.json" match = { key_path = ["winPosition"] }