Last active 1729939426

Revision 9f1952fb998f41c8ac5bdc68ddb056b3e49ae9c6

hyprland.nix Raw
1{
2 lib,
3 config,
4 pkgs,
5 osConfig,
6 ...
7}:
8
9let
10 cfg = config.home.ltp.hyprland;
11
12 inherit (lib)
13 mkEnableOption
14 types
15 mkOption
16 mkIf
17 lists
18 ;
19
20 workspaces = [
21 "1"
22 "2"
23 "3"
24 "4"
25 "5"
26 "6"
27 "7"
28 "8"
29 "9"
30 ];
31 directions = [
32 "left"
33 "down"
34 "up"
35 "right"
36 ];
37in
38{
39 imports = [
40 ./cliphist
41 ./dunst
42 ./hyprpaper
43 ./rofi
44 ./waybar
45 ];
46
47 options.home.ltp.hyprland = {
48 enable = mkEnableOption {
49 default = false;
50 type = types.bool;
51 };
52
53 cursors = {
54 package = mkOption {
55 default = null;
56 type = types.package;
57 };
58
59 name = mkOption {
60 default = null;
61 type = types.str;
62 };
63
64 size = mkOption {
65 default = 24;
66 type = types.int;
67 };
68 };
69 };
70
71 config = mkIf cfg.enable {
72 # Service for brightness and volume indication, also provides lightctl + volumectl
73 services.avizo = {
74 enable = true;
75 settings = {
76 default = {
77 # needs adjusting
78 background = "rgba(69,71,90, 0.8)";
79 border-color = "rgba(69, 71, 90, 0.8)";
80 border-radius = 10;
81 };
82 };
83 };
84
85 home.packages = builtins.attrValues { inherit (pkgs) nautilus alacritty tela-circle-icon-theme; };
86
87 home.pointerCursor = {
88 inherit (cfg.cursors) name;
89 inherit (cfg.cursors) package;
90 inherit (cfg.cursors) size;
91 gtk.enable = true;
92 x11.enable = true;
93 x11.defaultCursor = cfg.cursors.name;
94 };
95
96 gtk = {
97 enable = true;
98 theme = {
99 package = pkgs.orchis-theme;
100 name = "Orchis-Grey-Dark";
101 };
102 iconTheme = {
103 package = pkgs.tela-icon-theme;
104 name = "Tela-blue-dark";
105 };
106 cursorTheme = {
107 inherit (cfg.cursors) package;
108 inherit (cfg.cursors) name;
109 };
110 };
111
112 wayland.windowManager.hyprland = {
113 enable = true;
114
115 plugins = builtins.attrValues { inherit (pkgs.hyprlandPlugins) hy3 hyprspace; };
116
117 settings = {
118 "$mod" = "SUPER";
119 "$terminal" = "alacritty";
120 "$fileManager" = "nautilus";
121
122 env = [
123 "XCURSOR_SIZE, 24"
124 "NIXOS_OZONE_WL, 1"
125 ];
126
127 exec-once =
128 let
129 execlist = [
130 "hyprctl setcursor ${cfg.cursors.name} ${builtins.toString cfg.cursors.size}"
131 "waybar"
132 "nm-applet"
133 (mkIf osConfig.ltp.network.tailscale.enable "tailscale-systray")
134 ];
135 in
136 execlist;
137
138 general = {
139 layout = "hy3";
140 gaps_in = 5;
141 gaps_out = 13;
142 border_size = 0;
143 };
144
145 decoration = {
146 rounding = 10;
147 inactive_opacity = 0.8;
148 dim_inactive = true;
149
150 #drop shadow settings
151 drop_shadow = true;
152 shadow_range = 20;
153 shadow_render_power = 3;
154 shadow_ignore_window = true;
155 "col.shadow" = "rgba(00000045)";
156 };
157
158 hy3 =
159 {
160 };
161
162 misc = {
163 force_default_wallpaper = 0;
164 disable_hyprland_logo = false;
165 };
166
167 input = {
168 kb_layout = "gb";
169
170 touchpad = {
171 natural_scroll = false;
172 };
173 };
174
175 layerrule = [
176 "dimaround, rofi"
177 "blur, rofi"
178 "blur, waybar"
179 "ignorealpha 0, waybar"
180 ];
181
182 windowrulev2 = [
183 "float, title:(Welcome to JetBrains Rider)"
184 ];
185
186 bind =
187 let
188 movewindow = lists.forEach directions (i: "SUPER_SHIFT, ${i}, hy3:movewindow, ${i}");
189 movefocus = lists.forEach directions (i: "$mod, ${i}, hy3:movefocus, ${i}");
190 movetoworkspace = lists.forEach workspaces (i: "SUPER_SHIFT, ${i}, movetoworkspace, ${i}");
191 switchtoworkspace = lists.forEach workspaces (i: "$mod, ${i}, workspace, ${i}");
192 controlbinds = [
193 ", XF86AudioRaiseVolume, exec, volumectl -u up"
194 ", XF86AudioLowerVolume, exec, volumectl -u down"
195 ", XF86AudioMute, exec, volumectl toggle-mute"
196 ", XF86MonBrightnessUp, exec, lightctl up"
197 ", XF86MonBrightnessDown, exec, lightctl down"
198 ];
199 generalbinds = [
200 "$mod, RETURN, exec, $terminal"
201 "$mod, E, exec, $fileManager -w"
202 #"$mod, V, hy3:makegroup, v, force_ephemeral"
203 "SUPER_SHIFT, Q, hy3:killactive"
204 "$mod, F, fullscreen"
205 "SUPER_SHIFT, F, fullscreen, 1"
206 ];
207 hyprspacebinds = [
208 "$mod, O, overview:toggle"
209 ];
210 in
211 movewindow
212 ++ movefocus
213 ++ movetoworkspace
214 ++ switchtoworkspace
215 ++ controlbinds
216 ++ generalbinds
217 ++ hyprspacebinds;
218 };
219
220 extraConfig = ''
221
222 bind = $mod, R, submap, resize
223
224 # will start a submap called "resize"
225 submap = resize
226
227 # sets repeatable binds for resizing the active window
228 binde = , right, resizeactive, 10 0
229 binde = , left, resizeactive, -10 0
230 binde = , up, resizeactive, 0 -10
231 binde = , down, resizeactive, 0 10
232
233 # use reset to go back to the global submap
234 bind = , escape, submap, reset
235
236 # will reset the submap, which will return to the global submap
237 submap = reset
238 '';
239 };
240 };
241}
242