# hammerspoon configuration
hammerspoon is my configuration for [Hammerspoon](http://www.hammerspoon.org/). It has highly modal-based, vim-style keybindings, provides some functionality like desktop widgets, window management, application launcher, instant search, aria2 frontend ... etc.
## Get started
- Install [Hammerspoon](http://www.hammerspoon.org/) first.
- `git clone https://github.com/einverne/dotfiles.git ~/dotfiles`
- `ln -s ~/dotfiles/hammerspoon ~/.hammerspoon`
- Reload the configutation.
## Keep update
`cd ~/dotfiles && git pull`
## How to use
Use Karabier-Elements to set caps lock as hyper key. Press caps lock is just like press Cmd+Control+Option+Shift at the same time.
## Reload config
- Hyper key + R, reload hammerspoon config
## Hyper key windows management
- Hyper key + H, set windows to left half of screen
- Hyper key + L, right half of screen
- Hyper key + J, bottom half
- Hyper key + K, top half
- Hyper key + F, full screen
### Windows management mode
Option+r Enter windows management:
- ASDW to move windows position
- HL/JK to set windows to left, right, up, down half of screen
- Y/O/U/I to set windows to LeftUp, RightUp, LeftDown, LeftDown corner
- Left/Right/Up/Down same as HL/JK
- F to set windows to full screen
- C to set windows to center
- Esc/Q to exit
- Tab to show help
### Switch windows
I personally use the application called Context to switch between different windows, however this config provider another way to quickly switch between windows. Try with `Option+Tab`.
## Toggle hammerspoon console
Option+z
## Move windows between monitors
- Hyper key + N, to move current window to next monitor
- Hpper key + P, to move current window to previous monitor
### Application launcher
Press option + a to enter application launcher. The shorcut information will show on the center of the screen. But I personally prefer Alfred.
Just press opt, plus A or C or R… to start. If need help, press tab to toggle the keybindings cheatsheet.
Press opt + ? to toggle the help panel, which will show all opt related keybindings.
### Screenshots
These screenshots demostrate what awesome-hammerspoon is capable of. Learn more about [built-in Spoons](https://github.com/ashfinal/awesome-hammerspoon/wiki/The-built-in-Spoons).
#### Desktop widgets
![widgets](https://github.com/ashfinal/bindata/raw/master/screenshots/awesome-hammerspoon-deskwidgets.png)
#### Window manpulation ⌥ + R
![winresize](https://github.com/ashfinal/bindata/raw/master/screenshots/awesome-hammerspoon-winresize.gif)
#### aria2 Frontend ⌥ + D
![hsearch](https://github.com/ashfinal/bindata/raw/master/screenshots/awesome-hammerspoon-aria2.png)
You need to [run aria2 with RPC enabled](https://github.com/ashfinal/awesome-hammerspoon/wiki/Run-aria2-with-rpc-enabled) before using this. Config aria2 host and token in `~/.hammerspoon/private/config.lua`, then you're ready to go.
```lua
hsaria2_host = "http://localhost:6800/jsonrpc" -- default host
hsaria2_secret = "token" -- YOUR OWN SECRET
```
## Customization
```shell
cp ~/.hammerspoon/config-example.lua ~/.hammerspoon/private/config.lua
```
Then modify the file `~/.hammerspoon/private/config.lua`:
- Add/remove Spoons.
Define `hspoon_list` to decide which Spoons (a distributing format of Hammerspoon module) to be loaded. There are 15 built-in Spoons, learn about them at [here](https://github.com/ashfinal/awesome-hammerspoon/wiki/The-built-in-Spoons).
*There are more Spoons at [official spoon repository](http://www.hammerspoon.org/Spoons/) (you may need a little config before using them).*
- Customize keybindings
Please read `~/.hammerspoon/private/config.lua`for more details.
Finally press `cmd + ctrl + shift + r` to reload the configuration.
## Contribute
- Improve existing Spoons
A "Spoon" is just a directory, right-click on it -> "Show Package Contents".
Feel free to file issues or open PRs.
- Create new Spoons
Some resources you may find helpful:
[Learn Lua in Y minutes](http://learnxinyminutes.com/docs/lua/)
[Getting Started with Hammerspoon](http://www.hammerspoon.org/go/)
[Hammerspoon API Docs](http://www.hammerspoon.org/docs/index.html)
[hammerspoon/SPOONS.md at master · Hammerspoon/hammerspoon](https://github.com/Hammerspoon/hammerspoon/blob/master/SPOONS.md)
## Thanks to
[https://github.com/zzamboni/oh-my-hammerspoon](https://github.com/zzamboni/oh-my-hammerspoon)
[https://github.com/scottcs/dot_hammerspoon](https://github.com/scottcs/dot_hammerspoon)
[https://github.com/dharmapoudel/hammerspoon-config](https://github.com/dharmapoudel/hammerspoon-config)
[http://tracesof.net/uebersicht/](http://tracesof.net/uebersicht/)