From 3d439c2cdc81670d324801c77b95497a52b43bbf Mon Sep 17 00:00:00 2001 From: Tyler Mayoff Date: Wed, 19 Mar 2025 08:19:40 -0400 Subject: [PATCH] Added aerospace config managed by nix --- dot_config/flake/machines/hinge/darwin.nix | 168 ++++++++++++++++++++- 1 file changed, 167 insertions(+), 1 deletion(-) diff --git a/dot_config/flake/machines/hinge/darwin.nix b/dot_config/flake/machines/hinge/darwin.nix index 96857c4..cf72267 100644 --- a/dot_config/flake/machines/hinge/darwin.nix +++ b/dot_config/flake/machines/hinge/darwin.nix @@ -107,7 +107,173 @@ in { ]; }; - # services.aerospace.enable = true; + services.aerospace = { + enable = true; + + settings = { + # You can use it to add commands that run after login to macOS user session. + # 'start-at-login' needs to be 'true' for 'after-login-command' to work + # Available commands: https://nikitabobko.github.io/AeroSpace/commands + after-login-command = []; + + # You can use it to add commands that run after AeroSpace startup. + # 'after-startup-command' is run after 'after-login-command' + # Available commands : https://nikitabobko.github.io/AeroSpace/commands + after-startup-command = []; + + # Start AeroSpace at login + # start-at-login = true + + # Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization + enable-normalization-flatten-containers = true; + enable-normalization-opposite-orientation-for-nested-containers = true; + + # See: https://nikitabobko.github.io/AeroSpace/guide#layouts + # The 'accordion-padding' specifies the size of accordion padding + # You can set 0 to disable the padding feature + accordion-padding = 30; + + # Possible values: tiles|accordion + default-root-container-layout = "tiles"; + + # Possible values: horizontal|vertical|auto + # 'auto' means: wide monitor (anything wider than high) gets horizontal orientation, + # tall monitor (anything higher than wide) gets vertical orientation + default-root-container-orientation = "auto"; + + # Mouse follows focus when focused monitor changes + # Drop it from your config, if you don't like this behavior + # See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks + # See https://nikitabobko.github.io/AeroSpace/commands#move-mouse + # Fallback value (if you omit the key): on-focused-monitor-changed = [] + on-focused-monitor-changed = ["move-mouse monitor-lazy-center"]; + + # You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag + # Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key + # Also see: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app + automatically-unhide-macos-hidden-apps = false; + + # Possible values: (qwerty|dvorak) + # See https://nikitabobko.github.io/AeroSpace/guide#key-mapping + key-mapping.preset = "qwerty"; + + # Gaps between windows (inner-*) and between monitor edges (outer-*). + # Possible values: + # - Constant: gaps.outer.top = 8 + # - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24] + # In this example, 24 is a default value when there is no match. + # Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'. + # See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors + gaps = { + inner.horizontal = 4; + inner.vertical = 4; + outer.left = 0; + outer.bottom = 0; + outer.top = 0; + outer.right = 0; + }; + + # 'main' binding mode declaration + # See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes + # 'main' binding mode must be always presented + # Fallback value (if you omit the key): mode.main.binding = {} + # [mode.main.binding] + mode.main.binding = { + # All possible commands: https://nikitabobko.github.io/AeroSpace/commands + + # See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget + # You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3) + # alt-enter = '''exec-and-forget osascript -e ' + # tell application "Terminal" + # do script + # activate + # end tell' + # ''' + + # See: https://nikitabobko.github.io/AeroSpace/commands#layout + alt-slash = "layout tiles horizontal vertical"; + alt-comma = "layout accordion horizontal vertical"; + + # See: https://nikitabobko.github.io/AeroSpace/commands#focus + alt-shift-left = "focus left"; + alt-shift-down = "focus down"; + alt-shift-up = "focus up"; + alt-shift-right = "focus right"; + + ctrl-alt-shift-left = "focus-monitor left --wrap-around"; + ctrl-alt-shift-right = "focus-monitor right --wrap-around"; + ctrl-alt-shift-up = "focus-monitor up --wrap-around"; + ctrl-alt-shift-down = "focus-monitor down --wrap-around"; + + # See: https://nikitabobko.github.io/AeroSpace/commands#move + alt-shift-h = "move left"; + alt-shift-j = "move down"; + alt-shift-k = "move up"; + alt-shift-l = "move right"; + + # See: https://nikitabobko.github.io/AeroSpace/commands#resize + alt-shift-minus = "resize smart -50"; + alt-shift-equal = "resize smart +50"; + + # See: https://nikitabobko.github.io/AeroSpace/commands#workspace + alt-1 = "workspace 1"; + alt-2 = "workspace 2"; + alt-3 = "workspace 3"; + alt-4 = "workspace 4"; + alt-5 = "workspace 5"; + alt-6 = "workspace 6"; + alt-7 = "workspace 7"; + alt-8 = "workspace 8"; + alt-9 = "workspace 9"; + + # See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace + alt-shift-1 = "move-node-to-workspace 1"; + alt-shift-2 = "move-node-to-workspace 2"; + alt-shift-3 = "move-node-to-workspace 3"; + alt-shift-4 = "move-node-to-workspace 4"; + alt-shift-5 = "move-node-to-workspace 5"; + alt-shift-6 = "move-node-to-workspace 6"; + alt-shift-7 = "move-node-to-workspace 7"; + alt-shift-8 = "move-node-to-workspace 8"; + alt-shift-9 = "move-node-to-workspace 9"; + + # See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth + alt-tab = "workspace-back-and-forth"; + # See: https://nikitabobko.github.io/AeroSpace/commands#move-workspace-to-monitor + alt-shift-tab = "move-workspace-to-monitor --wrap-around next"; + + # See: https://nikitabobko.github.io/AeroSpace/commands#mode + alt-shift-semicolon = "mode service"; + }; + + mode.service.binding = { + # "service" binding mode declaration. + # See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes + esc = ["reload-config" "mode main"]; + r = ["flatten-workspace-tree" "mode main"]; # reset layout + f = ["layout floating tiling" "mode main"]; # Toggle between floating and tiling layout + backspace = ["close-all-windows-but-current" "mode main"]; + + # sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2 + #s = ["layout sticky tiling", "mode main"] + + alt-shift-h = ["join-with left" "mode main"]; + alt-shift-j = ["join-with down" "mode main"]; + alt-shift-k = ["join-with up" "mode main"]; + alt-shift-l = ["join-with right" "mode main"]; + + # down = "volume down"; + # up = "volume up"; + # shift-down = ["volume set 0" "mode main"]; + }; + + workspace-to-monitor-force-assignment = { + "1" = "built-in"; + "2" = ["^DELL U2723QE \\(1\\)$" "BenQ EX2710 \\(2\\)$"]; + "3" = ["^DELL U2723QE \\(2\\)$" "BenQ EX2710 \\(1\\)$"]; + }; + }; + }; programs.fish.enable = true; programs.zsh.enable = true;