blob: 2c668cc49a7fd6a452dc6d5dacafdbee2856d203 (
plain) (
blame)
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
|
{ pkgs, lib, config, ... }:
with lib;
let
# The symbols if you press shift and a number key.
wsNumberSymbols = [
"exclam" "at" "numbersign" "dollar" "percent"
"asciicircum" "ampersand" "asterisk" "parenleft" "parenright"
];
wsCount = length wsNumberSymbols;
headCount = length config.services.xserver.xrandrHeads;
wsPerHead = wsCount / headCount;
excessWs = wsCount - (headCount * wsPerHead);
getHeadAt = elemAt config.services.xserver.xrandrHeads;
mkDefaultWorkspace = number: numberSymbol: {
name = toString number;
value = mkDefault {
label = null;
labelPrefix = "${toString number}: ";
keys.switchTo = "$mod+${toString number}";
keys.moveTo = "$mod+Shift+${numberSymbol}";
head = getHeadAt ((number - (excessWs + 1)) / wsPerHead);
};
};
wsCfgList = mapAttrsToList (_: getAttr "config") config.aszlig.i3.workspaces;
wsConfig = concatStrings wsCfgList;
defaultWorkspaces = listToAttrs (imap mkDefaultWorkspace wsNumberSymbols);
in
{
options.aszlig.i3 = {
workspaces = mkOption {
type = types.attrsOf (types.submodule ./workspace.nix);
default = listToAttrs (imap mkDefaultWorkspace wsNumberSymbols);
description = ''
Workspace to monitor assignment.
Workspaces are by default assigned starting from the leftmost monitor
being workspace 1 and the rightmost monitor being workspace 10. The
workspaces are divided by the number of available heads, so if you have
a dual head system, you'll end up having workspace 1 to 5 on the left
monitor and 6 to 10 on the right.
'';
};
};
config.aszlig.i3.workspaces = defaultWorkspaces;
config.services.xserver.windowManager = {
default = "i3";
i3.enable = true;
i3.configFile = let
conky = import ./conky.nix {
inherit pkgs;
};
in pkgs.substituteAll ({
name = "i3.conf";
src = ./i3.conf;
inherit (pkgs) dmenu xterm pvolctrl;
inherit (pkgs.xorg) xsetroot;
inherit wsConfig;
leftHead = head config.services.xserver.xrandrHeads;
rightHead = last config.services.xserver.xrandrHeads;
leftConky = conky.left;
rightConky = conky.right;
} // (let
# Workaround for Synergy: we need to have polarizing heads.
leftHead = head config.services.xserver.xrandrHeads;
rightHead = last config.services.xserver.xrandrHeads;
in if config.networking.hostName == "mmrnmhrm"
then { inherit leftHead rightHead; }
else { leftHead = rightHead; rightHead = leftHead; }
));
};
}
|