diff --git a/README.md b/README.md index fe01c32..f14abb8 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,367 @@ My idea is to create a platform for creating plugins to customize the TouchBar.
Telegram](https://t.me/joinchat/AmVYGg8vW38c13_3MxdE_g)
+
+
+
+
+
+
+## Built-in button types:
+> Buttons
+- escape
+- exitTouchbar
+- brightnessUp
+- brightnessDown
+- illuminationUp (keyboard illumination)
+- illuminationDown (keyboard illumination)
+- volumeDown
+- volumeUp
+- mute
+
+> Native Plugins
+- battery
+- currency
+- weather
+- inputsource
+- music (tap for pause, longTap for next)
+- dock (half-long click to open app, full-long click to kill app)
+- nightShift
+- dnd (Don't disturb)
+- pomodoro
+- network
+
+> Media Keys
+- previous
+- play
+- next
+
+> AppleScript plugins
+- sleep
+- displaySleep
+
+## Gestures on central part:
+- two finger slide: change you Volume
+- three finger slide: change you Brightness
+
+## Built-in slider types:
+
+- brightness
+- volume
+
+### You can also make custom buttons using these types
+- `staticButton`
+```json
+ "type": "staticButton",
+ "title": "esc",
+```
+
+- `appleScriptTitledButton`
+```js
+ "type": "appleScriptTitledButton",
+ "refreshInterval": 60, //optional
+ "source": {
+ "filePath": "/Users/toxblh/Library/Application Support/MTMR/iTunes.nowPlaying.scpt",
+ // or
+ "inline": "tell application \"Finder\"\rmake new Finder window\rset target of front window to path to home folder as string\ractivate\rend tell",
+ // or
+ "base64": "StringInbase64"
+ },
+```
+
+- `timeButton`
+```js
+ "type": "timeButton",
+ "formatTemplate": "HH:mm" //optional
+```
+
+## Groups
+```js
+{
+"type": "group",
+"align": "center",
+"bordered": true,
+"title": "stats",
+"items": [
+ { "type": "play" }, { "type": "mute" }, ...]
+}
+```
+
+To close a group, use the button:
+```
+{
+"type": "close",
+"width": 64
+},
+```
+
+## Native plugins
+#### `timeButton`
+> Attention! Works not all: https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations
+```js
+{
+ "type": "timeButton",
+ "formatTemplate": "dd HH:mm",
+ "timeZone": "UTC"
+}
+```
+
+#### `weather`
+> Provider: https://openweathermap.org Need allowance location service
+```js
+ "type": "weather",
+ "refreshInterval": 600, // in seconds
+ "units": "metric", // or imperial
+ "icon_type": "text" // or images
+ "api_key": "" // you can get the key on openweather
+```
+
+#### `currency`
+> Provider: https://coinbase.com
+```js
+ "type": "currency",
+ "refreshInterval": 600, // in seconds
+ "align": "right",
+ "from": "BTC",
+ "to": "USD",
+ "full": true // £‣1.29$
+```
+
+#### `music`
+```js
+{
+ "type": "music",
+ "align": "center",
+ "width": 80,
+ "bordered": false,
+ "refreshInterval": 2, // in seconds
+},
+```
+
+#### `pomodoro`
+> Pomodoro plugin. One click to start the work timer, longclick to start the rest timer. Click in progress for reset.
+```js
+{
+ "type": "pomodoro",
+ "workTime": 1200, // set time work in seconds. Default 1500 (25 min)
+ "restTime": 600 // set time rest in seconds. Default 300 (5 min)
+},
+```
+
+#### `network`
+> Network plugin. The plugin to show usage a network
+```js
+{
+ "type": "network",
+ "flip": true
+},
+```
+
+## Actions:
+- `hidKey`
+> https://github.com/aosm/IOHIDFamily/blob/master/IOHIDSystem/IOKit/hidsystem/ev_keymap.h use only numbers
+```json
+ "action": "hidKey",
+ "keycode": 53,
+```
+
+- `keyPress`
+```json
+ "action": "keyPress",
+ "keycode": 1,
+```
+
+- `appleScript`
+```js
+ "action": "appleScript",
+ "actionAppleScript": {
+ "inline": "tell application \"Finder\"\rmake new Finder window\rset target of front window to path to home folder as string\ractivate\rend tell"
+ // "filePath" or "base64" will work as well
+ },
+```
+
+- `shellScript`
+```js
+ "action": "shellScript",
+ "executablePath": "/usr/bin/pmset",
+ "shellArguments": ["sleepnow"], // optional
+
+```
+
+- `openUrl`
+```js
+ "action": "openUrl",
+ "url": "https://google.com",
+```
+
+## LongActions
+If you want to longPress for some operations, it is similar to the configuration for Actions but with additional parameters, for example:
+```js
+ "longAction": "hidKey",
+ "longKeycode": 53,
+```
+
+- longAction
+- longKeycode
+- longActionAppleScript
+- longExecutablePath
+- longShellArguments
+- longUrl
+
+## Additional parameters:
+
+- `width` restrict how much room a particular button will take
+```json
+ "width": 34
+```
+
+- `align` can stick the item to the side. default is center
+```js
+ "align": "left" // "left", "right" or "center"
+```
+
+- `bordered` you can do button without border
+```js
+ "bordered": "false" // "true" or "false"
+```
+
+## Example configuration:
+```json
+[
+ { "type": "escape", "width": 110 },
+ { "type": "exitTouchbar", "align": "left" },
+ {
+ "type": "brightnessUp",
+ "align": "left",
+ "width": 36
+ },
+ {
+ "type": "staticButton",
+ "align": "left",
+ "title": "🔆",
+ "action": "keyPress",
+ "keycode": 113,
+ "width": 36
+ },
+
+ {
+ "type": "appleScriptTitledButton",
+ "source": {
+ "filePath": "/Users/toxblh/Library/Application Support/MTMR/iTunes.nowPlaying.scpt"
+ },
+ "refreshInterval": 1
+ },
+ {
+ "type": "staticButton",
+ "align": "left",
+ "image": { "base64" : "%base64Finder%"},
+ "action": "appleScript",
+ "actionAppleScript": {
+ "inline": "tell application \"Finder\"\rmake new Finder window\rset target of front window to path to home folder as string\ractivate\rend tell"
+ },
+ "width": 36
+ },
+ {
+ "type": "appleScriptTitledButton",
+ "source": {
+ "inline": "if application \"Safari\" is running then\r\ttell application \"Safari\"\r\t\trepeat with t in tabs of windows\r\t\t\ttell t\r\t\t\t\tif URL starts with \"https:\/\/music.yandex.ru\" and name does not end with \"на Яндекс.Музыке\" then\r\t\t\t\t\treturn name of t as text\r\t\t\t\tend if\r\t\t\tend tell\r\t\tend repeat\r\tend tell\rend if\rreturn \"\""
+ },
+ "refreshInterval": 1
+ },
+ { "type": "previous", "width": 36, "align": "right" },
+ { "type": "play", "width": 36, "align": "right" },
+ { "type": "next", "width": 36, "align": "right" },
+ { "type": "sleep", "width": 36 , "align": "right"},
+ { "type": "displaySleep", "align": "right" },
+ { "type": "weather", "refreshInterval": 1800, "width": 70, "align": "right" },
+ { "type": "volumeDown", "width": 36 , "align": "right"},
+ { "type": "volumeUp", "width": 36 , "align": "right"},
+ { "type": "battery", "refreshInterval": 60 , "align": "right"},
+ { "type": "appleScriptTitledButton", "refreshInterval": 1800, "source": { "filePath": "/Users/redetection/Library/Application Support/MTMR/Weather.scpt"} , "align": "right"},
+ { "type": "timeButton", "formatTemplate": "HH:mm", "width": 64, "align": "right" }
+]
+```
+
+
+### Roadmap
+- [x] Create the first prototype with TouchBar in Storyboard
+- [x] Put in stripe menu on startup the application
+- [x] Find how to simulate real buttons like brightness, volume, night shift and etc.
+- [x] Time in touchbar!
+- [x] First the weather plugin
+- [x] Find how to open full-screen TouchBar without the cross and stripe menu
+- [x] Find how to add haptic feedback
+- [x] Add icon and menu in StatusBar
+- [x] Hide from Dock
+- [x] Status menu: "preferences", "quit"
+- [x] JSON or another approch for save preset, maybe in `~/Library/Application Support/MTMR/`
+- [x] Custom buttons size, actions by click
+- [x] Layout: [always left, NSSliderView for center, always right]
+- [x] System for autoupdate (https://sparkle-project.org/)
+- [ ] Overwrite default values from item types (e.g. title for brightness)
+- [ ] Custom settings for paddings and margins for buttons
+- [ ] XPC Service for scripts
+- [ ] UI for settings
+- [ ] Import config from BTT
+
+Settings:
+- [ ] Interface for plugins and export like presets
+- [x] Startup at login
+- [ ] Show on/off in Dock
+- [ ] Show on/off in StatusBar
+- [ ] On/off Haptic Feedback
+
+Maybe:
+- [ ] Refactoring the application on packages (AppleScript, JavaScript? and Swift?)
+
+### Author's presets
+[@Toxblh preset](Resources/toxblh.json)
+
+[@ReDetection preset](Resources/ReDetection.json)
+
+### User's presets
+[@luongvo209 preset](Resources/luongvo209.json)
+
+
+[aadi_vs_anand preset](Resources/aadi_vs_anand.json)
+
+
+
+## Credits
+
+Built by [@Toxblh](https://patreon.com/toxblh) and [@ReDetection](http://patreon.com/ReDetection).
+
+[](https://github.com/igrigorik/ga-beacon)