about summary refs log tree commit diff
path: root/configs/os_x/slate/.slate.js
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2018-07-18T23·53-0400
committerWilliam Carroll <wpcarro@gmail.com>2018-07-19T16·00-0400
commita86c2ddece8fde8a42f1e6031b189d1865b9b211 (patch)
tree77c56fd69f574b697e831fd8c062e7672e342cf2 /configs/os_x/slate/.slate.js
parente8ca641075b0acfab44fd424f08ab6fa6f630495 (diff)
Prefer stow over hand-rolled solution
After discovering GNU stow on Nix IRC, refactored install and setup
scripts to consume it.

Code is vastly simplified as a result.
Diffstat (limited to 'configs/os_x/slate/.slate.js')
-rw-r--r--configs/os_x/slate/.slate.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/configs/os_x/slate/.slate.js b/configs/os_x/slate/.slate.js
new file mode 100644
index 000000000000..e097d935faff
--- /dev/null
+++ b/configs/os_x/slate/.slate.js
@@ -0,0 +1,123 @@
+// Support flag to branch KBDs depending on presence of Ergodox keyboard.
+
+// Since the Ergodox has complicated modifier keys like "hyper" and "meh" key,
+// we should prefer to use these when that keyboard is attached because it
+// reduces the potential for collisions for Emacs KBDs. This becomes
+// problematic, however, when the Ergodox is not attached because these keys are
+// unavailable. Slate KBDs. Under these circumstances, potential collisions
+// with Emacs KBDs is acceptable.
+
+var ergodox_attached = true;
+
+var HYPER = ":alt;shift;cmd;ctrl";
+var MEH = ":alt;shift;ctrl";
+
+var modal_key = ergodox_attached ? HYPER : ":ctrl;shift";
+var resize_key = ergodox_attached ? MEH : ":alt;shift";
+
+// Configs
+S.cfga({
+  defaultToCurrentScreen: true,
+  secondsBetweenRepeat: 0.1,
+  checkDefaultsOnLoad: true,
+  focusCheckWidthMax: 3000
+});
+
+// window resizing bindings
+var window_resizing_bindings = {
+  ";": {
+    x: "screenSizeX/3*2 + screenOriginX+20",
+    y: "screenOriginY+20",
+    width: "screenSizeX/3 - 40",
+    height: "screenSizeY-100"
+  },
+  g: {
+    x: "screenOriginX+20",
+    y: "screenOriginY+20",
+    width: "screenSizeX/3*2 - 40",
+    height: "screenSizeY-100"
+  },
+  o: {
+    x: "screenSizeX / 2 + screenOriginX + 20",
+    y: "screenOriginY + 20",
+    width: "screenSizeX / 2 - 40",
+    height: "(screenSizeY - 120) / 2"
+  },
+  ",": {
+    x: "screenSizeX / 2 + screenOriginX + 20",
+    y: "(screenSizeY - 120) / 2 + 20 + 20",
+    width: "screenSizeX / 2 - 40",
+    height: "(screenSizeY - 120) / 2"
+  },
+  h: {
+    x: "screenOriginX+20",
+    y: "screenOriginY+20",
+    width: "screenSizeX*0.5 - 40",
+    height: "screenSizeY-100"
+  },
+  j: {
+    x: "screenOriginX+screenSizeX/6",
+    y: "screenOriginY+20",
+    width: "2*screenSizeX/3",
+    height: "screenSizeY - 100"
+  },
+  k: {
+    x: "screenOriginX+20",
+    y: "screenOriginY+20",
+    width: "screenSizeX - 40",
+    height: "screenSizeY - 100"
+  },
+  l: {
+    x: "screenSizeX/2 + screenOriginX+20",
+    y: "screenOriginY+20",
+    width: "screenSizeX*0.5 - 40",
+    height: "screenSizeY-100"
+  }
+};
+
+var window_resizing_bindings = Object.keys(window_resizing_bindings).reduce(
+  function(acc, kbd) {
+    acc[kbd + resize_key] = S.op("move", window_resizing_bindings[kbd]);
+    return acc;
+  },
+  {}
+);
+
+S.bnda(window_resizing_bindings);
+
+// Moves applications across multiple screens
+var throwLeft = slate.operation("throw", {
+  screen: "0",
+  width: "screenSizeX",
+  height: "screenSizeY"
+});
+var throwRight = slate.operation("throw", {
+  screen: "1",
+  width: "screenSizeX",
+  height: "screenSizeY"
+});
+
+slate.bind("1:ctrl", throwLeft);
+slate.bind("2:ctrl", throwRight);
+
+var focus_apps = {
+  1: "1Password",
+  i: "iTunes",
+  a: "Atom",
+  h: "Dash",
+  e: "Emacs",
+  t: "iTerm2",
+  m: "Messages",
+  s: "Spotify",
+  c: "Google Chrome",
+  l: "LimeChat",
+  k: "Slack",
+  w: "Wireshark",
+  p: "Tomato One",
+  d: "Discord"
+};
+
+Object.keys(focus_apps).forEach(function(key) {
+  app = focus_apps[key];
+  S.bind(key + modal_key, S.op("focus", { app: app }));
+});