mirror of
https://github.com/Toxblh/MTMR.git
synced 2026-10-29 09:48:36 +00:00
8a9b40a030669c1d4362ce2359c89cb255f61f08
+ persistent app in dock (press for 0.5 sec), close app (press for 2.0 sec). Reload view if default config changed (write event fired)
My TouchBar. My rules
My the idea is to create the program like a platform for plugins for customization TouchBar. I very like BTT and a full custom TouchBar (my BTT preset). And I want to create it. And it's my the first Swift project for MacOS :)
Roadmap
- Create the first prototype with TouchBar in Storyboard
- Put in stripe menu on startup the application
- Find how to simulate real buttons like brightness, volume, night shift and etc.
- Time in touchbar!
- First the weather plugin
- Find how to open full-screen TouchBar without the cross and stripe menu
- Find how to add haptic feedback
- Add icon and menu in StatusBar
- Hide from Dock
- Status menu: "preferences", "quit"
- JSON or another approch for save preset, maybe in
~/Library/Application Support/MTMR/ - Custom buttons size, actions by click
- Layout: [always left, NSSliderView for center, always right]
- 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
- System for autoupdate (maybe https://sparkle-project.org/)
Settings:
- Intarface for plugins and export like presets
- 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?)
Installation
- Download last release Releases
- Open MTMR
- Open preset
open ~/Library/Application\ Support/MTMR/items.jsonand customize it. Restart MTMR to apply changes.
Preset
File for customize your preset for MTMR: open ~/Library/Application\ Support/MTMR/items.json
Built-in button types:
- escape
- exitTouchbar
- brightnessUp
- brightnessDown
- volumeDown
- volumeUp
- mute
- dock
Native Plugins
- battery
- currency
- weather
Media Keys
- previous
- play
- next
AppleScript plugins
- sleep
- displaySleep
Built-in slider types:
- brightness
- volume
You can also make a custom buttons using these types
staticButton
"type": "staticButton",
"title": "esc",
appleScriptTitledButton
"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
"type": "timeButton",
"formatTemplate": "HH:mm" //optional
Native plugins
weather
Provider: https://openweathermap.org Need allowance location service
"type": "weather",
"refreshInterval": 600,
"units": "metric", // or imperial
"icon_type": "text" // or images
"api_key": "" // you can get the key on openweather
currency
Provider: https://coinbase.com
"type": "currency",
"refreshInterval": 600,
"align": "right",
"from": "BTC",
"to": "USD",
Actions:
hidKey
https://github.com/aosm/IOHIDFamily/blob/master/IOHIDSystem/IOKit/hidsystem/ev_keymap.h use only numbers
"action": "hidKey",
"keycode": 53,
keyPress
"action": "keyPress",
"keycode": 1,
appleScript
"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
"action": "shellScript",
"executablePath": "/usr/bin/pmset",
"shellArguments": ["sleepnow"], // optional
openUrl
"action": "openUrl",
"url": "https://google.com",
Additional paramaters:
widthallow to restrict how much room a particular button will take
"width": 34
aligncan stick the item to the side. default is center
"align": "left" //or "right" or "center"
Example configuration:
[
{ "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" }
]
Author's presets
Credits
Built by @Toxblh and @ReDetection.
Languages
Swift
52.8%
Objective-C
44.5%
AppleScript
1%
C
0.9%
Shell
0.7%

