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
|
{ ... }:
let
programs = {
audio = {
increase = "wpctl set-volume @DEFAULT_AUDIO_SINK@ --limit 1.0 5%+";
decrease = "wpctl set-volume @DEFAULT_AUDIO_SINK@ --limit 1.0 5%-";
toggle-mute = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
};
screenshot = ''grim -g "$(slurp)" -t png - | wl-copy --type image/png'';
cmd = {
run = "tofi-run";
drun = "tofi-drun";
};
brightness = {
increase = "brightnessctl set +5%";
decrease = "brightnessctl set 5%-";
};
terminal = "kitty";
};
in
{
wayland.windowManager.hyprland = {
extraConfig = ''
$mod = SUPER
bind = $mod SHIFT, Return, exec, ${programs.terminal}
general {
layout = master
}
master {
mfact = 0.5
new_status = slave
}
# workspaces
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
${builtins.concatStringsSep "\n" (
builtins.genList (
x:
let
ws =
let
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in
''
bind = $mod, ${ws}, workspace, ${toString (x + 1)}
bind = $mod SHIFT, ${ws}, movetoworkspacesilent, ${toString (x + 1)}
''
) 10
)}
bind = $mod SHIFT, C, killactive
bind = $mod SHIFT, F, togglefloating
bind = $mod SHIFT, Q, exit
bind = $mod, P, exec, ${programs.cmd.drun}
bind = $mod SHIFT, P, exec, ${programs.cmd.run}
bind = $mod, H, cyclenext, prev
bind = $mod, L, cyclenext
bind = $mod SHIFT, H, swapnext, prev
bind = $mod SHIFT, L, swapnext
# audio control
binde =, XF86AudioRaiseVolume, exec, ${programs.audio.increase}
binde =, XF86AudioLowerVolume, exec, ${programs.audio.decrease}
bind =, XF86AudioMute, exec, ${programs.audio.toggle-mute}
# monitor brightness control
binde =, XF86MonBrightnessUp, exec, ${programs.brightness.increase}
binde =, XF86MonBrightnessDown, exec, ${programs.brightness.decrease}
# Screenshotting
# My stupid laptop outputs these three key codes when the PrtSc key is
# pressed instead of using just one code like any sane device would
bind = SUPER SHIFT, S, exec, ${programs.screenshot}
input {
# focus change on cursor move
follow_mouse = 1
accel_profile = flat
}
monitor=,preferred,auto,1
decoration {
rounding = 10
}
# set opacity to 0.9 active and 0.5 inactive for kitty
windowrule = opacity 0.9 override 0.5 override,^(kitty)$
# Move windows to their designated workspaces
windowrulev2 = workspace 3,class:(firefox)
windowrulev2 = workspace 4,class:(fluffychat)
windowrulev2 = workspace 4,class:(org.telegram.desktop)
windowrulev2 = workspace 4,class:(Signal)
windowrulev2 = workspace 5,class:(Bitwarden)
# Floating picture-in-picture windows
windowrulev2 = float, title:^(Picture-in-Picture)$,class:^(firefox)$
windowrulev2 = size 15% 15%, title:^(Picture-in-Picture)$,class:^(firefox)$
# workaround for https://github.com/hyprwm/Hyprland/issues/2661
windowrulev2 = stayfocused, title:^()$,class:^(steam)$
windowrulev2 = minsize 1 1, title:^()$,class:^(steam)$
# No fade-in animation for the lanucher
layerrule = noanim, launcher
bindm = SUPER, mouse:272, movewindow # Left mouse button
bindm = SUPER, mouse:273, resizewindow 1 # Right mouse button
'';
};
}
|