{ inputs, pkgs, ... }: let newTerminal = pkgs.writeScript "newTerminalWindow.sh" '' #!/usr/bin/env bash # Open iTerm2 with single instance # Detects if iTerm2 is running if ! pgrep -f "iTerm" > /dev/null; then open -a "${pkgs.iterm2}/Applications/iTerm2.app" else # Create a new window if ! osascript -e 'tell application "iTerm2" to create window with default profile' > /dev/null; then # Get pids for any app with "iTerm" and kill for i in $(pgrep -f "iTerm"); do kill -15 "$i"; done open -a "${pkgs.iterm2}/Applications/iTerm2.app" fi fi ''; in { homebrew = { enable = true; casks = [ "nikitabobko/tap/aerospace" ]; }; home-manager.users.katja.home.file.".aerospace.toml".text = (builtins.replaceStrings [ "\"mode.main.binding\"" "\"mode.resize.binding\"" "\"if.app-id\"" "\"if.during-aerospace-startup\"" ] [ "mode.main.binding" "mode.resize.binding" "if.app-id" "if.during-aerospace-startup"] (pkgs.std.serde.toTOML { enable-normalization-flatten-containers = false; enable-normalization-opposite-orientation-for-nested-containers = false; on-window-detected = [ { "if.app-id" = "org.mozilla.firefox"; "run" = [ "move-node-to-workspace 1" ]; } { "if.app-id" = "org.mozilla.thunderbird"; "run" = [ "move-node-to-workspace 2" ]; } { "if.app-id" = "com.googlecode.iterm2"; "if.during-aerospace-startup" = true; "run" = [ "move-node-to-workspace 3" ]; } { "if.app-id" = "com.apple.finder"; "if.during-aerospace-startup" = true; "run" = [ "move-node-to-workspace 4" ]; } { "if.app-id" = "com.apple.iCal"; "run" = [ "move-node-to-workspace 5" ]; } { "if.app-id" = "ru.keepcoder.Telegram"; "if.during-aerospace-startup" = true; "run" = [ "layout floating" "move-node-to-workspace 1" ]; } { "if.app-id" = "com.jonny.mona"; "if.during-aerospace-startup" = true; "run" = [ "layout floating" "move-node-to-workspace 1" ]; } ]; "mode.main.binding" = { "cmd-h" = []; "alt-enter" = "exec-and-forget ${newTerminal}"; "alt-z" = "exec-and-forget pmset sleepnow"; "alt-x" = "exec-and-forget pmset displaysleepnow"; "alt-left" = "focus left"; "alt-right" = "focus right"; "alt-up" = "focus up"; "alt-down" = "focus down"; "alt-shift-left" = "move left"; "alt-shift-right" = "move right"; "alt-shift-up" = "move up"; "alt-shift-down" = "move down"; # Consider using 'join-with' command as a 'split' replacement if you want to enable normalizations "alt-h" = "split horizontal"; "alt-v" = "split vertical"; "alt-f" = "fullscreen"; "alt-s" = "layout v_accordion"; # 'layout stacking' in i3 "alt-w" = "layout h_accordion"; # 'layout tabbed' in i3 "alt-e" = "layout tiles horizontal vertical"; # 'layout toggle split' in i3 "alt-shift-space" = "layout floating tiling"; # 'floating toggle' in i3 # Not supported, because this command is redundant in AeroSpace mental model. # See: https://nikitabobko.github.io/AeroSpace/guide#floating-windows #alt-space = 'focus toggle_tiling_floating' # `focus parent`/`focus child` are not yet supported, and it's not clear whether they # should be supported at all https://github.com/nikitabobko/AeroSpace/issues/5 # alt-a = 'focus parent' "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"; "alt-0" = "workspace 10"; "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"; "alt-shift-0" = "move-node-to-workspace 10"; "alt-shift-c" = "reload-config"; "alt-r" = "mode resize"; }; "mode.resize.binding" = { "h" = "resize width -50"; "j" = "resize height +50"; "k" = "resize height -50"; "l" = "resize width +50"; "enter" = "mode main"; }; })); }