blob: 95551517055944ccddef168ad6e1c6c2053958a0 [file] [log] [blame]
Skyler Grey4e230892024-02-13 22:58:46 +00001{
2 pkgs,
3 config,
4 inputs,
5 system,
6 lib,
7 ...
8}:
9let
Skyler Greya0da6b22024-02-11 22:53:41 +000010 lock = "${pkgs.waylock}/bin/waylock";
Skyler Grey4e230892024-02-13 22:58:46 +000011in
12{
Skyler Grey71b81982024-02-15 18:06:36 +000013 options.chimera = {
14 input.keyboard = {
15 layout = lib.mkOption {
16 type = lib.types.str;
17 description = "Keyboard layouts, comma seperated";
18 example = "us,de";
19 default = "us";
20 };
21 variant = lib.mkOption {
22 type = lib.types.nullOr lib.types.str;
23 description = "Keyboard layout variants, comma seperated";
24 example = "dvorak";
25 default = null;
26 };
27 };
28 hyprland = {
29 enable = lib.mkEnableOption "Use hyprland as your window manager";
Skyler Grey4e230892024-02-13 22:58:46 +000030
Skyler Grey71b81982024-02-15 18:06:36 +000031 monitors = lib.mkOption {
32 type = lib.types.listOf lib.types.str;
33 description = "List of default monitors to set";
34 default = [ ];
35 };
Skyler Grey4e230892024-02-13 22:58:46 +000036 };
37 };
38
Skyler Greya0da6b22024-02-11 22:53:41 +000039 # TODO: Eww, SwayNC, hyprland-per-window-layout, waylock, hy3, anyrun, hypr-empty
40
Skyler Grey4e230892024-02-13 22:58:46 +000041 config = lib.mkIf config.chimera.hyprland.enable {
42 home.packages = [ pkgs.hyprpicker ];
Skyler Greya0da6b22024-02-11 22:53:41 +000043
Skyler Grey4e230892024-02-13 22:58:46 +000044 services.fusuma.settings.swipe = lib.mkIf config.chimera.touchpad.enable (
45 let
46 hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
47 jq = "${pkgs.jq}/bin/jq";
48 awk = "${pkgs.gawk}/bin/awk";
49 in
50 {
51 "3".up.command = "${hyprctl} dispatch fullscreen 0";
52 "3".down.command = "${hyprctl} dispatch fullscreen 0";
53 "4".down.command = lock;
54 "3".left.command = "${hyprctl} dispatch workspace $(${hyprctl} activeworkspace -j | ${jq} .id | ${awk} '{print $1+1}')";
55 "3".right.command = "${hyprctl} dispatch workspace $(${hyprctl} activeworkspace -j | ${jq} .id | ${awk} '{print $1-1}')";
56 }
57 );
Skyler Greya0da6b22024-02-11 22:53:41 +000058
Skyler Grey4e230892024-02-13 22:58:46 +000059 wayland.windowManager.hyprland = {
60 enable = true;
Skyler Greya0da6b22024-02-11 22:53:41 +000061
Skyler Grey4e230892024-02-13 22:58:46 +000062 xwayland.enable = true;
63 systemd.enable = true;
Skyler Greya0da6b22024-02-11 22:53:41 +000064
Skyler Grey4e230892024-02-13 22:58:46 +000065 settings =
66 let
67 mod = "SUPER";
68 terminal = "${pkgs.kitty}/bin/kitty";
69 menu = "${inputs.anyrun.packages.${system}.anyrun}/bin/anyrun";
70 in
71 {
72 misc = {
73 disable_hyprland_logo = true;
74 disable_splash_rendering = true;
75 };
Skyler Greya0da6b22024-02-11 22:53:41 +000076
Samuel Shuert02ffd1e2024-02-13 21:37:15 -050077 exec-once = "${pkgs.hyprpaper}/bin/hyprpaper; hyprctl setcursor ${config.chimera.theme.cursor.name} ${builtins.toString config.chimera.theme.cursor.size}";
Skyler Greya0da6b22024-02-11 22:53:41 +000078
Skyler Grey4e230892024-02-13 22:58:46 +000079 monitor = config.chimera.hyprland.monitors ++ [ ",preferred,auto,1" ];
Skyler Greya0da6b22024-02-11 22:53:41 +000080
Skyler Grey4e230892024-02-13 22:58:46 +000081 decoration = {
82 rounding = 7;
83 };
Skyler Greya0da6b22024-02-11 22:53:41 +000084
Skyler Grey4e230892024-02-13 22:58:46 +000085 input = {
Skyler Grey71b81982024-02-15 18:06:36 +000086 kb_layout = config.chimera.input.keyboard.layout;
87 kb_variant = lib.mkIf (config.chimera.input.keyboard.variant != null) config.chimera.input.keyboard.variant;
Skyler Grey4e230892024-02-13 22:58:46 +000088 natural_scroll = true;
Skyler Greya0da6b22024-02-11 22:53:41 +000089
Skyler Grey4e230892024-02-13 22:58:46 +000090 touchpad = {
91 natural_scroll = true;
92 };
93 };
Skyler Greya0da6b22024-02-11 22:53:41 +000094
Skyler Grey4e230892024-02-13 22:58:46 +000095 xwayland = {
96 force_zero_scaling = true;
97 };
Skyler Greya0da6b22024-02-11 22:53:41 +000098
Skyler Grey4e230892024-02-13 22:58:46 +000099 dwindle = {
100 pseudotile = true;
101 smart_split = true;
102 };
103
104 master = {
105 allow_small_split = true;
106 new_is_master = true;
107 };
108
109 windowrulev2 = [ "opacity 1.0 0.85,title:(.*)" ];
110
111 bind =
112 [
113 "${mod}, Q, killactive"
114 "${mod}, SPACE, togglefloating"
115 "${mod}, RETURN, exec, ${terminal}"
116 "${mod}, down, movefocus, d"
117 "${mod}, up, movefocus, u"
118 "${mod}, right, movefocus, r"
119 "${mod}, left, movefocus, l"
120 "${mod}, L, exec, ${lock}"
121 "${mod}, D, exec, ${menu}"
Skyler Greya0da6b22024-02-11 22:53:41 +0000122 ]
Skyler Grey4e230892024-02-13 22:58:46 +0000123 ++ (builtins.concatLists (
124 builtins.genList
125 (
126 x:
127 let
128 ws =
129 let
130 c = (x + 1) / 10;
131 in
132 builtins.toString (x + 1 - (c * 10));
133 in
134 [
135 "${mod}, ${ws}, workspace, ${toString (x + 1)}"
136 "${mod} SHIFT, ${ws}, movetoworkspace, ${toString (x + 1)}"
137 ]
138 )
139 10
140 ));
Skyler Greya0da6b22024-02-11 22:53:41 +0000141
Skyler Grey4e230892024-02-13 22:58:46 +0000142 bindm = [
143 "${mod}, mouse:272, movewindow"
144 "${mod}, mouse:273, resizewindow"
145 ];
146 };
Skyler Greya0da6b22024-02-11 22:53:41 +0000147 };
148 };
Skyler Grey4e230892024-02-13 22:58:46 +0000149}