58 lines
1.8 KiB
Lua
58 lines
1.8 KiB
Lua
-- https://wiki.hypr.land/Configuring/Basics/Monitors/
|
|
--
|
|
-- Declares every display once and exports the table, so lua/lid.lua can turn
|
|
-- the laptop panel on and off without duplicating any of these numbers.
|
|
--
|
|
-- Load-time behaviour is deliberately dumb: the built-in panel is always
|
|
-- enabled here. Deciding to switch it off needs to know whether anything else
|
|
-- is actually plugged in, and during a cold start the outputs are not
|
|
-- enumerated yet — so that decision lives in lua/lid.lua, which re-runs it on
|
|
-- every lid and hotplug event. Worst case the panel flickers on for a moment
|
|
-- while docked; the alternative failure is a black screen.
|
|
|
|
local M = {}
|
|
|
|
M.laptop = "eDP-1"
|
|
|
|
M.external = {
|
|
-- samsung home monitor. Other modes it has run at, if you ever need them:
|
|
-- "2560x1440@144", "1920x1080@144", "1280x720@240"
|
|
{ output = "desc:Samsung Electric Company LC27G7xT H4ZRA00734", mode = "2560x1440@240", position = "-2560x0", scale = 1 },
|
|
}
|
|
|
|
M.builtin = { output = M.laptop, mode = "1920x1080@60", position = "0x0", scale = 1 }
|
|
|
|
-- Anything not declared above falls back to Hyprland's auto placement, so a
|
|
-- borrowed projector or a monitor at the office still lights up.
|
|
|
|
function M.apply_external()
|
|
for _, mon in ipairs(M.external) do
|
|
hl.monitor(mon)
|
|
end
|
|
end
|
|
|
|
function M.enable_builtin()
|
|
hl.monitor(M.builtin)
|
|
end
|
|
|
|
function M.disable_builtin()
|
|
hl.monitor({ output = M.laptop, disabled = true })
|
|
end
|
|
|
|
-- Every connected output except the laptop panel. Empty during early startup,
|
|
-- which callers have to treat as "do not know yet", never as "nothing here".
|
|
function M.externals_present()
|
|
local found = {}
|
|
for _, mon in ipairs(hl.get_monitors()) do
|
|
if mon.name ~= M.laptop then
|
|
table.insert(found, mon)
|
|
end
|
|
end
|
|
return found
|
|
end
|
|
|
|
M.enable_builtin()
|
|
M.apply_external()
|
|
|
|
return M
|