{ config, pkgs, lib, ... }: let cfg = config.wayland.windowManager.hyprland; in { config = lib.mkIf cfg.enable { wayland.windowManager.hyprland.settings = let exe = lib.getExe; terminalCommand = "alacritty"; resizeAmount = toString 10; in { mod._var = "SUPER"; # https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h bind = let lua = lib.generators.mkLuaInline; mod = key: args: { _args = [ (lua "mod .. \" + ${key}\"") ] ++ args; }; in [ # Layout actions (mod "U" [ (lua "hl.dsp.layout(\"togglesplit\")") ]) (mod "Y" [ (lua "hl.dsp.window.float({ action = \"toggle\" })") ]) (mod "T" [ (lua "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"maximized\" })") ]) (mod "C" [ (lua "hl.dsp.exec_cmd(\"hyprctl reload\")") ]) # Left click drag (mod "mouse:272" [ (lua "hl.dsp.window.drag()") (lua "{ mouse = true }") ]) # Right click drag (mod "mouse:273" [ (lua "hl.dsp.window.resize()") (lua "{ mouse = true }") ]) # Window actions (mod "W" [ (lua "hl.dsp.window.close()") ]) (mod "SHIFT + W" [ (lua "hl.dsp.window.kill()") ]) # Application launches (mod "RETURN" [ (lua "hl.dsp.exec_cmd(\"${terminalCommand}\")") ]) (mod "SPACE" [ (lua "hl.dsp.exec_cmd(\"rofi -show drun\")") ]) (mod "A" [ (lua "hl.dsp.exec_cmd(\"${exe pkgs.pavucontrol}\")") ]) (mod "B" [ (lua "hl.dsp.exec_cmd(\"rofi-rbw\")") ]) (mod "N" [ (lua "hl.dsp.exec_cmd(\"swaync-client -t -sw\")") ]) (mod "P" [ (lua "hl.dsp.exec_cmd(\"${terminalCommand} -e python3\")") ]) (mod "V" [ (lua "hl.dsp.exec_cmd(\"rofi -modi clipboard:${pkgs.cliphist}/bin/cliphist-rofi-img -show clipboard\")") ]) # Focus workspace (mod "1" [ (lua "hl.dsp.focus({ workspace = 1 })") ]) (mod "2" [ (lua "hl.dsp.focus({ workspace = 2 })") ]) (mod "3" [ (lua "hl.dsp.focus({ workspace = 3 })") ]) (mod "4" [ (lua "hl.dsp.focus({ workspace = 4 })") ]) (mod "5" [ (lua "hl.dsp.focus({ workspace = 5 })") ]) (mod "6" [ (lua "hl.dsp.focus({ workspace = 6 })") ]) (mod "7" [ (lua "hl.dsp.focus({ workspace = 7 })") ]) (mod "8" [ (lua "hl.dsp.focus({ workspace = 8 })") ]) (mod "9" [ (lua "hl.dsp.focus({ workspace = 9 })") ]) # Move window to workspace (mod "SHIFT + 1" [ (lua "hl.dsp.window.move({ workspace = 1 })") ]) (mod "SHIFT + 2" [ (lua "hl.dsp.window.move({ workspace = 2 })") ]) (mod "SHIFT + 3" [ (lua "hl.dsp.window.move({ workspace = 3 })") ]) (mod "SHIFT + 4" [ (lua "hl.dsp.window.move({ workspace = 4 })") ]) (mod "SHIFT + 5" [ (lua "hl.dsp.window.move({ workspace = 5 })") ]) (mod "SHIFT + 6" [ (lua "hl.dsp.window.move({ workspace = 6 })") ]) (mod "SHIFT + 7" [ (lua "hl.dsp.window.move({ workspace = 7 })") ]) (mod "SHIFT + 8" [ (lua "hl.dsp.window.move({ workspace = 8 })") ]) (mod "SHIFT + 9" [ (lua "hl.dsp.window.move({ workspace = 9 })") ]) # Focus window (mod "LEFT" [ (lua "hl.dsp.focus({ direction=\"left\" })") ]) (mod "RIGHT" [ (lua "hl.dsp.focus({ direction=\"right\" })") ]) (mod "UP" [ (lua "hl.dsp.focus({ direction=\"up\" })") ]) (mod "DOWN" [ (lua "hl.dsp.focus({ direction=\"down\" })") ]) (mod "H" [ (lua "hl.dsp.focus({ direction=\"left\" })") ]) (mod "L" [ (lua "hl.dsp.focus({ direction=\"right\" })") ]) (mod "K" [ (lua "hl.dsp.focus({ direction=\"up\" })") ]) (mod "J" [ (lua "hl.dsp.focus({ direction=\"down\" })") ]) # Move window (mod "SHIFT + LEFT" [ (lua "hl.dsp.window.move({ direction=\"left\" })") ]) (mod "SHIFT + RIGHT" [ (lua "hl.dsp.window.move({ direction=\"right\" })") ]) (mod "SHIFT + UP" [ (lua "hl.dsp.window.move({ direction=\"up\" })") ]) (mod "SHIFT + DOWN" [ (lua "hl.dsp.window.move({ direction=\"down\" })") ]) (mod "SHIFT + H" [ (lua "hl.dsp.window.move({ direction=\"left\" })") ]) (mod "SHIFT + L" [ (lua "hl.dsp.window.move({ direction=\"right\" })") ]) (mod "SHIFT + K" [ (lua "hl.dsp.window.move({ direction=\"up\" })") ]) (mod "SHIFT + J" [ (lua "hl.dsp.window.move({ direction=\"down\" })") ]) # Resize window (mod "CONTROL + LEFT" [ (lua "hl.dsp.window.resize({ x = -${resizeAmount}, y = 0, relative = true })") (lua "{ repeating = true }") ]) (mod "CONTROL + RIGHT" [ (lua "hl.dsp.window.resize({ x = ${resizeAmount}, y = 0, relative = true })") (lua "{ repeating = true }") ]) (mod "CONTROL + UP" [ (lua "hl.dsp.window.resize({ x = 0, y = -${resizeAmount}, relative = true })") (lua "{ repeating = true }") ]) (mod "CONTROL + DOWN" [ (lua "hl.dsp.window.resize({ x = 0, y = ${resizeAmount}, relative = true })") (lua "{ repeating = true }") ]) (mod "CONTROL + H" [ (lua "hl.dsp.window.resize({ x = -${resizeAmount}, y = 0, relative = true })") (lua "{ repeating = true }") ]) (mod "CONTROL + L" [ (lua "hl.dsp.window.resize({ x = ${resizeAmount}, y = 0, relative = true })") (lua "{ repeating = true }") ]) (mod "CONTROL + K" [ (lua "hl.dsp.window.resize({ x = 0, y = -${resizeAmount}, relative = true })") (lua "{ repeating = true }") ]) (mod "CONTROL + J" [ (lua "hl.dsp.window.resize({ x = 0, y = ${resizeAmount}, relative = true })") (lua "{ repeating = true }") ]) # TODO - replace with hyprlock? (mod "F1" [ (lua "hl.dsp.exec_cmd(\"${pkgs.systemd}/bin/loginctl lock-session\")") ]) # Screenshots { _args = [ (lua "\"PRINT\"") (lua "hl.dsp.exec_cmd(\"${exe pkgs.hyprshot} -m output --clipboard-only\")") ]; } { _args = [ (lua "\"CTRL + PRINT\"") (lua "hl.dsp.exec_cmd(\"${exe pkgs.hyprshot} -m region --clipboard-only\")") ]; } { _args = [ (lua "\"CTRL + SHIFT + PRINT\"") (lua "hl.dsp.exec_cmd(\"HYPRSHOT_DIR=/home/felixalb/images/screenshots ${exe pkgs.hyprshot} -m region \")") ]; } # Media controls { _args = [ (lua "\"XF86AudioPlay\"") (lua "hl.dsp.exec_cmd(\"${exe pkgs.playerctl} play-pause\")") (lua "{ locked = true }") ]; } { _args = [ (lua "\"XF86AudioPause\"") (lua "hl.dsp.exec_cmd(\"${exe pkgs.playerctl} play-pause\")") (lua "{ locked = true }") ]; } { _args = [ (lua "\"XF86AudioPrev\"") (lua "hl.dsp.exec_cmd(\"${exe pkgs.playerctl} previous\")") (lua "{ locked = true }") ]; } { _args = [ (lua "\"XF86AudioNext\"") (lua "hl.dsp.exec_cmd(\"${exe pkgs.playerctl} next\")") (lua "{ locked = true }") ]; } { _args = [ (lua "\"XF86AudioMute\"") (lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")") (lua "{ locked = true, repeating = true }") ]; } { _args = [ (lua "\"XF86AudioMicMute\"") (lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")") (lua "{ locked = true, repeating = true }") ]; } { _args = [ (lua "\"XF86AudioLowerVolume\"") (lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-\")") (lua "{ locked = true, repeating = true }") ]; } { _args = [ (lua "\"XF86AudioRaiseVolume\"") (lua "hl.dsp.exec_cmd(\"${pkgs.wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+\")") (lua "{ locked = true, repeating = true }") ]; } # Laptop controls { _args = [ (lua "\"XF86MonBrightnessUp\"") (lua "hl.dsp.exec_cmd(\"${exe pkgs.brightnessctl} s 10%+\")") (lua "{ locked = true, repeating = true }") ]; } { _args = [ (lua "\"XF86MonBrightnessDown\"") (lua "hl.dsp.exec_cmd(\"${exe pkgs.brightnessctl} s 10%-\")") (lua "{ locked = true, repeating = true }") ]; } ]; }; }; }