1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 { 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";
};
}));
}