-- ========================================================================= -- hyprland.lua - managed by Ansible -- Hyprland 0.55+ Lua config for mw-pfeddersheim-workstation -- SUPER = Windows key -- ========================================================================= local terminal = "kitty" local fileManager = "kitty -e yazi" local menu = "hyprlauncher" local browser = "google-chrome-stable" local mainMod = "SUPER" ----------------- ---- MONITORS ---- ----------------- -- 1. DP-1 TERRA 3280W 2560x1440@144 (0x0) -- 2. DVI-D-1 BenQ BL2405 1920x1080@60 (rotated 90 CW) -- 3. HDMI-A-1 TERRA 3280W 2560x1440@144 (3640x0) hl.monitor({ output = "DP-1", mode = "2560x1440@60", position = "0x0", scale = "1" }) hl.monitor({ output = "DVI-D-1", mode = "1920x1080@60", position = "2560x0", scale = "1", transform = 1 }) hl.monitor({ output = "HDMI-A-1", mode = "2560x1440@60", position = "3640x0", scale = "1" }) hl.workspace_rule({ workspace = 1, monitor = "DP-1", default = true }) hl.workspace_rule({ workspace = 2, monitor = "DVI-D-1", default = true }) hl.workspace_rule({ workspace = 3, monitor = "HDMI-A-1", default = true }) ------------------------------- ---- ENVIRONMENT VARIABLES ---- ------------------------------- hl.env("LIBVA_DRIVER_NAME", "nvidia") hl.env("XDG_SESSION_TYPE", "wayland") hl.env("GBM_BACKEND", "nvidia-drm") hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia") hl.env("WLR_NO_HARDWARE_CURSORS", "1") hl.env("NVD_BACKEND", "direct") --------------- ---- INPUT ---- --------------- hl.config({ input = { kb_layout = "de", follow_mouse = 1, sensitivity = 0, numlock_by_default = true, }, }) hl.device({ name = "pixart-usb-optical-mouse", left_handed = 1 }) ----------------------- ---- LOOK AND FEEL ---- ----------------------- hl.config({ general = { gaps_in = 5, gaps_out = 10, border_size = 2, col = { active_border = { colors = {"rgba(33ccffee)", "rgba(00ff99ee)"}, angle = 45 }, inactive_border = "rgba(595959aa)", }, resize_on_border = true, allow_tearing = false, layout = "dwindle", }, decoration = { rounding = 10, rounding_power = 2, active_opacity = 1.0, inactive_opacity = 1.0, shadow = { enabled = true, range = 4, render_power = 3, color = 0xee1a1a1a }, blur = { enabled = true, size = 3, passes = 1, vibrancy = 0.1696 }, }, animations = { enabled = true }, }) hl.curve("easeOutQuint", { type = "bezier", points = { {0.23,1},{0.32,1} } }) hl.curve("easeInOutCubic", { type = "bezier", points = { {0.65,0.05},{0.36,1} } }) hl.curve("linear", { type = "bezier", points = { {0,0},{1,1} } }) hl.curve("almostLinear", { type = "bezier", points = { {0.5,0.5},{0.75,1} } }) hl.curve("quick", { type = "bezier", points = { {0.15,0},{0.1,1} } }) hl.curve("easy", { type = "spring", mass = 1, stiffness = 71.2633, dampening = 15.8273644 }) hl.animation({ leaf = "global", enabled = true, speed = 10, bezier = "default" }) hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" }) hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" }) hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" }) hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" }) hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" }) hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" }) hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" }) hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" }) hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" }) hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" }) hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" }) hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" }) hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" }) hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" }) hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" }) hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" }) hl.config({ dwindle = { preserve_split = true } }) hl.config({ master = { new_status = "master" } }) hl.config({ misc = { force_default_wallpaper = 0, disable_hyprland_logo = true } }) --------------------- ---- KEYBINDINGS ---- --------------------- -- Core binds hl.bind(mainMod .. " + Q", hl.dsp.window.close()) hl.bind(mainMod .. " + T", hl.dsp.exec_cmd(terminal)) hl.bind(mainMod .. " + RETURN", hl.dsp.exec_cmd(terminal)) hl.bind(mainMod .. " + M", hl.dsp.exec_cmd("command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch 'hl.dsp.exit()'")) hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager)) hl.bind(mainMod .. " + V", hl.dsp.window.float({ action = "toggle" })) hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu)) hl.bind(mainMod .. " + P", hl.dsp.window.pseudo()) hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- Worktime safers hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ mode = 0 })) hl.bind(mainMod .. " + R", hl.dsp.exec_cmd("hyprctl reload")) hl.bind(mainMod .. " + SPACE", hl.dsp.window.float({ action = "toggle" })) hl.bind(mainMod .. " + TAB", hl.dsp.exec_cmd("hyprctl dispatch cyclenext")) hl.bind(mainMod .. " + SHIFT + TAB", hl.dsp.exec_cmd("hyprctl dispatch cyclenext prev")) -- Scratchpad hl.bind(mainMod .. " + GRAVE", hl.dsp.workspace.toggle_special("magic")) hl.bind(mainMod .. " + SHIFT + GRAVE", hl.dsp.window.move({ workspace = "special:magic" })) -- Home row focus hl.bind(mainMod .. " + H", hl.dsp.focus({ direction = "left" })) hl.bind(mainMod .. " + L", hl.dsp.focus({ direction = "right" })) -- Home row move window hl.bind(mainMod .. " + SHIFT + H", hl.dsp.window.move({ direction = "left" })) hl.bind(mainMod .. " + SHIFT + L", hl.dsp.window.move({ direction = "right" })) hl.bind(mainMod .. " + SHIFT + K", hl.dsp.window.move({ direction = "up" })) hl.bind(mainMod .. " + SHIFT + J", hl.dsp.window.move({ direction = "down" })) -- Home row resize hl.bind(mainMod .. " + ALT + H", hl.dsp.exec_cmd("hyprctl dispatch resizeactive -40 0")) hl.bind(mainMod .. " + ALT + L", hl.dsp.exec_cmd("hyprctl dispatch resizeactive 40 0")) hl.bind(mainMod .. " + ALT + K", hl.dsp.exec_cmd("hyprctl dispatch resizeactive 0 -40")) hl.bind(mainMod .. " + ALT + J", hl.dsp.exec_cmd("hyprctl dispatch resizeactive 0 40")) -- Arrow focus hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" })) hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" })) hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" })) hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" })) -- Arrow move window hl.bind(mainMod .. " + SHIFT + left", hl.dsp.window.move({ direction = "left" })) hl.bind(mainMod .. " + SHIFT + right", hl.dsp.window.move({ direction = "right" })) hl.bind(mainMod .. " + SHIFT + up", hl.dsp.window.move({ direction = "up" })) hl.bind(mainMod .. " + SHIFT + down", hl.dsp.window.move({ direction = "down" })) -- Lock, browser hl.bind(mainMod .. " + CTRL + L", hl.dsp.exec_cmd("hyprlock")) hl.bind(mainMod .. " + B", hl.dsp.exec_cmd(browser)) -- Workspaces 1-9 for i = 1, 9 do hl.bind(mainMod .. " + " .. i, hl.dsp.focus({ workspace = i })) hl.bind(mainMod .. " + SHIFT + " .. i, hl.dsp.window.move({ workspace = i })) end -- Screenshots hl.bind("Print", hl.dsp.exec_cmd("grimblast copysave area")) hl.bind(mainMod .. " + Print", hl.dsp.exec_cmd("grimblast copysave active")) hl.bind(mainMod .. " + SHIFT + Print", hl.dsp.exec_cmd("grimblast copysave output")) hl.bind(mainMod .. " + ALT + Print", hl.dsp.exec_cmd('grim -g "$(slurp)" - | satty -f -')) -- Mouse binds hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) -------------------------------- ---- WINDOW RULES ---- -------------------------------- hl.window_rule({ name = "suppress-maximize-events", match = { class = ".*" }, suppress_event = "maximize", }) hl.window_rule({ name = "fix-xwayland-drags", match = { class = "^$", title = "^$", xwayland = true, float = true, fullscreen = false, pin = false }, no_focus = true, })