diff options
author | Jesse Luehrs <doy@stripe.com> | 2018-04-04 14:44:25 -0700 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2018-04-06 16:27:41 -0700 |
commit | abfbd65725ba45d0b7d17eca114574ed0be4de3c (patch) | |
tree | 4b5039e6c4ef986b6f546b615b7bfc03d9011342 /hammerspoon | |
parent | 54053d2dadfd5ba67127c636a3eb4c0f7cff5ef9 (diff) | |
download | conf-abfbd65725ba45d0b7d17eca114574ed0be4de3c.tar.gz conf-abfbd65725ba45d0b7d17eca114574ed0be4de3c.zip |
add some osx config
karabiner, bettertouchtool, amethyst, hammerspoon
Diffstat (limited to 'hammerspoon')
-rw-r--r-- | hammerspoon/Spoons/ReloadConfiguration.spoon/docs.json | 90 | ||||
-rw-r--r-- | hammerspoon/Spoons/ReloadConfiguration.spoon/init.lua | 49 | ||||
-rw-r--r-- | hammerspoon/Spoons/SpeedMenu.spoon/docs.json | 39 | ||||
-rw-r--r-- | hammerspoon/Spoons/SpeedMenu.spoon/init.lua | 111 | ||||
-rw-r--r-- | hammerspoon/init.lua | 29 |
5 files changed, 318 insertions, 0 deletions
diff --git a/hammerspoon/Spoons/ReloadConfiguration.spoon/docs.json b/hammerspoon/Spoons/ReloadConfiguration.spoon/docs.json new file mode 100644 index 0000000..50c62f2 --- /dev/null +++ b/hammerspoon/Spoons/ReloadConfiguration.spoon/docs.json @@ -0,0 +1,90 @@ +[ + { + "Command": [], + "Constant": [], + "Constructor": [], + "Deprecated": [], + "Field": [], + "Function": [], + "Method": [ + { + "def": "ReloadConfiguration:bindHotkeys(mapping)", + "desc": "Binds hotkeys for ReloadConfiguration", + "doc": "Binds hotkeys for ReloadConfiguration\n\nParameters:\n * mapping - A table containing hotkey modifier/key details for the following items:\n * reloadConfiguration - This will cause the configuration to be reloaded", + "name": "bindHotkeys", + "parameters": [ + " * mapping - A table containing hotkey modifier/key details for the following items:", + " * reloadConfiguration - This will cause the configuration to be reloaded" + ], + "signature": "ReloadConfiguration:bindHotkeys(mapping)", + "stripped_doc": "", + "type": "Method" + }, + { + "def": "ReloadConfiguration:start()", + "desc": "Start ReloadConfiguration", + "doc": "Start ReloadConfiguration\n\nParameters:\n * None", + "name": "start", + "parameters": [ + " * None" + ], + "signature": "ReloadConfiguration:start()", + "stripped_doc": "", + "type": "Method" + } + ], + "Variable": [ + { + "def": "ReloadConfiguration.watch_paths", + "desc": "List of directories to watch for changes, defaults to hs.configdir", + "doc": "List of directories to watch for changes, defaults to hs.configdir", + "name": "watch_paths", + "signature": "ReloadConfiguration.watch_paths", + "stripped_doc": "", + "type": "Variable" + } + ], + "desc": "Adds a hotkey to reload the hammerspoon configuration, and a pathwatcher to automatically reload on changes.", + "doc": "Adds a hotkey to reload the hammerspoon configuration, and a pathwatcher to automatically reload on changes.\n\nDownload: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/ReloadConfiguration.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/ReloadConfiguration.spoon.zip)", + "items": [ + { + "def": "ReloadConfiguration:bindHotkeys(mapping)", + "desc": "Binds hotkeys for ReloadConfiguration", + "doc": "Binds hotkeys for ReloadConfiguration\n\nParameters:\n * mapping - A table containing hotkey modifier/key details for the following items:\n * reloadConfiguration - This will cause the configuration to be reloaded", + "name": "bindHotkeys", + "parameters": [ + " * mapping - A table containing hotkey modifier/key details for the following items:", + " * reloadConfiguration - This will cause the configuration to be reloaded" + ], + "signature": "ReloadConfiguration:bindHotkeys(mapping)", + "stripped_doc": "", + "type": "Method" + }, + { + "def": "ReloadConfiguration:start()", + "desc": "Start ReloadConfiguration", + "doc": "Start ReloadConfiguration\n\nParameters:\n * None", + "name": "start", + "parameters": [ + " * None" + ], + "signature": "ReloadConfiguration:start()", + "stripped_doc": "", + "type": "Method" + }, + { + "def": "ReloadConfiguration.watch_paths", + "desc": "List of directories to watch for changes, defaults to hs.configdir", + "doc": "List of directories to watch for changes, defaults to hs.configdir", + "name": "watch_paths", + "signature": "ReloadConfiguration.watch_paths", + "stripped_doc": "", + "type": "Variable" + } + ], + "name": "ReloadConfiguration", + "stripped_doc": "\nDownload: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/ReloadConfiguration.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/ReloadConfiguration.spoon.zip)", + "submodules": [], + "type": "Module" + } +]
\ No newline at end of file diff --git a/hammerspoon/Spoons/ReloadConfiguration.spoon/init.lua b/hammerspoon/Spoons/ReloadConfiguration.spoon/init.lua new file mode 100644 index 0000000..bb83f67 --- /dev/null +++ b/hammerspoon/Spoons/ReloadConfiguration.spoon/init.lua @@ -0,0 +1,49 @@ +--- === ReloadConfiguration === +--- +--- Adds a hotkey to reload the hammerspoon configuration, and a pathwatcher to automatically reload on changes. +--- +--- Download: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/ReloadConfiguration.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/ReloadConfiguration.spoon.zip) + +local obj = {} +obj.__index = obj + +-- Metadata +obj.name = "ReloadConfiguration" +obj.version = "1.0" +obj.author = "Jon Lorusso <jonlorusso@gmail.com>" +obj.homepage = "https://github.com/Hammerspoon/Spoons" +obj.license = "MIT - https://opensource.org/licenses/MIT" + + +--- ReloadConfiguration.watch_paths +--- Variable +--- List of directories to watch for changes, defaults to hs.configdir +obj.watch_paths = { hs.configdir } + +--- ReloadConfiguration:bindHotkeys(mapping) +--- Method +--- Binds hotkeys for ReloadConfiguration +--- +--- Parameters: +--- * mapping - A table containing hotkey modifier/key details for the following items: +--- * reloadConfiguration - This will cause the configuration to be reloaded +function obj:bindHotkeys(mapping) + local def = { reloadConfiguration = hs.fnutils.partial(hs.reload, self) } + hs.spoons.bindHotkeysToSpec(def, mapping) +end + +--- ReloadConfiguration:start() +--- Method +--- Start ReloadConfiguration +--- +--- Parameters: +--- * None +function obj:start() + self.watchers = {} + for _,dir in pairs(self.watch_paths) do + self.watchers[dir] = hs.pathwatcher.new(dir, hs.reload):start() + end + return self +end + +return obj diff --git a/hammerspoon/Spoons/SpeedMenu.spoon/docs.json b/hammerspoon/Spoons/SpeedMenu.spoon/docs.json new file mode 100644 index 0000000..f57b965 --- /dev/null +++ b/hammerspoon/Spoons/SpeedMenu.spoon/docs.json @@ -0,0 +1,39 @@ +[ + { + "Command": [], + "Constant": [], + "Constructor": [], + "Deprecated": [], + "Field": [], + "Function": [], + "Method": [ + { + "def": "SpeedMenu:rescan()", + "desc": "Redetect the active interface, darkmode …And redraw everything.", + "doc": "Redetect the active interface, darkmode …And redraw everything.\n", + "name": "rescan", + "signature": "SpeedMenu:rescan()", + "stripped_doc": "", + "type": "Method" + } + ], + "Variable": [], + "desc": "Menubar netspeed meter", + "doc": "Menubar netspeed meter\n\nDownload: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpeedMenu.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpeedMenu.spoon.zip)", + "items": [ + { + "def": "SpeedMenu:rescan()", + "desc": "Redetect the active interface, darkmode …And redraw everything.", + "doc": "Redetect the active interface, darkmode …And redraw everything.\n", + "name": "rescan", + "signature": "SpeedMenu:rescan()", + "stripped_doc": "", + "type": "Method" + } + ], + "name": "SpeedMenu", + "stripped_doc": "\nDownload: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpeedMenu.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpeedMenu.spoon.zip)", + "submodules": [], + "type": "Module" + } +]
\ No newline at end of file diff --git a/hammerspoon/Spoons/SpeedMenu.spoon/init.lua b/hammerspoon/Spoons/SpeedMenu.spoon/init.lua new file mode 100644 index 0000000..d4ecdac --- /dev/null +++ b/hammerspoon/Spoons/SpeedMenu.spoon/init.lua @@ -0,0 +1,111 @@ +--- === SpeedMenu === +--- +--- Menubar netspeed meter +--- +--- Download: [https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpeedMenu.spoon.zip](https://github.com/Hammerspoon/Spoons/raw/master/Spoons/SpeedMenu.spoon.zip) + +local obj={} +obj.__index = obj + +-- Metadata +obj.name = "SpeedMenu" +obj.version = "1.0" +obj.author = "ashfinal <ashfinal@gmail.com>" +obj.homepage = "https://github.com/Hammerspoon/Spoons" +obj.license = "MIT - https://opensource.org/licenses/MIT" + +function obj:init() + self.menubar = hs.menubar.new() + obj:rescan() +end + +local function data_diff() + local in_seq = hs.execute(obj.instr) + local out_seq = hs.execute(obj.outstr) + local in_diff = in_seq - obj.inseq + local out_diff = out_seq - obj.outseq + if in_diff/1024 > 1024 then + obj.kbin = string.format("%6.2f", in_diff/1024/1024) .. ' mb/s' + else + obj.kbin = string.format("%6.2f", in_diff/1024) .. ' kb/s' + end + if out_diff/1024 > 1024 then + obj.kbout = string.format("%6.2f", out_diff/1024/1024) .. ' mb/s' + else + obj.kbout = string.format("%6.2f", out_diff/1024) .. ' kb/s' + end + local disp_str = '⥄ ' .. obj.kbout .. '\n⥂ ' .. obj.kbin + if obj.darkmode then + obj.disp_str = hs.styledtext.new(disp_str, {font={size=9.0, color={hex="#FFFFFF"}}}) + else + obj.disp_str = hs.styledtext.new(disp_str, {font={size=9.0, color={hex="#000000"}}}) + end + obj.menubar:setTitle(obj.disp_str) + obj.inseq = in_seq + obj.outseq = out_seq +end + +--- SpeedMenu:rescan() +--- Method +--- Redetect the active interface, darkmode …And redraw everything. +--- + +function obj:rescan() + obj.interface = hs.network.primaryInterfaces() + obj.darkmode = hs.osascript.applescript('tell application "System Events"\nreturn dark mode of appearance preferences\nend tell') + local menuitems_table = {} + if obj.interface then + -- Inspect active interface and create menuitems + local interface_detail = hs.network.interfaceDetails(obj.interface) + if interface_detail.AirPort then + local ssid = interface_detail.AirPort.SSID + table.insert(menuitems_table, { + title = "SSID: " .. ssid, + tooltip = "Copy SSID to clipboard", + fn = function() hs.pasteboard.setContents(ssid) end + }) + end + if interface_detail.IPv4 then + local ipv4 = interface_detail.IPv4.Addresses[1] + table.insert(menuitems_table, { + title = "IPv4: " .. ipv4, + tooltip = "Copy IPv4 to clipboard", + fn = function() hs.pasteboard.setContents(ipv4) end + }) + end + if interface_detail.IPv6 then + local ipv6 = interface_detail.IPv6.Addresses[1] + table.insert(menuitems_table, { + title = "IPv6: " .. ipv6, + tooltip = "Copy IPv6 to clipboard", + fn = function() hs.pasteboard.setContents(ipv6) end + }) + end + local macaddr = hs.execute('ifconfig ' .. obj.interface .. ' | grep ether | awk \'{print $2}\'') + table.insert(menuitems_table, { + title = "MAC Addr: " .. macaddr, + tooltip = "Copy MAC Address to clipboard", + fn = function() hs.pasteboard.setContents(macaddr) end + }) + -- Start watching the netspeed delta + obj.instr = 'netstat -ibn | grep -e ' .. obj.interface .. ' -m 1 | awk \'{print $7}\'' + obj.outstr = 'netstat -ibn | grep -e ' .. obj.interface .. ' -m 1 | awk \'{print $10}\'' + + obj.inseq = hs.execute(obj.instr) + obj.outseq = hs.execute(obj.outstr) + + if obj.timer then + obj.timer:stop() + obj.timer = nil + end + obj.timer = hs.timer.doEvery(1, data_diff) + end + table.insert(menuitems_table, { + title = "Rescan Network Interfaces", + fn = function() obj:rescan() end + }) + obj.menubar:setTitle("⚠︎") + obj.menubar:setMenu(menuitems_table) +end + +return obj diff --git a/hammerspoon/init.lua b/hammerspoon/init.lua new file mode 100644 index 0000000..c6b2b73 --- /dev/null +++ b/hammerspoon/init.lua @@ -0,0 +1,29 @@ +hs.loadSpoon("ReloadConfiguration") +spoon.ReloadConfiguration:start() + +hs.loadSpoon("SpeedMenu") + +hs.hotkey.bind({"alt"}, "h", function() + hs.window.focusedWindow():focusWindowWest(nil, false, true) +end) +hs.hotkey.bind({"alt"}, "j", function() + hs.window.focusedWindow():focusWindowSouth(nil, false, true) +end) +hs.hotkey.bind({"alt"}, "k", function() + hs.window.focusedWindow():focusWindowNorth(nil, false, true) +end) +hs.hotkey.bind({"alt"}, "l", function() + hs.window.focusedWindow():focusWindowEast(nil, false, true) +end) + +menubar = hs.menubar.new() +timer = hs.timer.doEvery(1, function() + hs.host.cpuUsage(function(cpu) + local cpuUsage = cpu["overall"]["active"] + menubar:setTitle(math.floor(cpuUsage + 0.5) .. "%") + end) +end) + +hs.caffeinate.set("systemIdle", true, true) + +hs.alert("Hammerspoon config reloaded") |