- Hyprland via UWSM (comme Omarchy), à choisir à la connexion ; i3 reste la session par défaut - config Lua (format Hyprland >= 0.55) : raccourcis bépo d'i3, apparence Omarchy, Ghostty comme terminal - waybar, hyprlock, swaybg, grim/slurp, wl-clipboard, brightnessctl - workspace-run : support de hyprctl et des options en --opt= - stt-dictate : wtype sous Wayland au lieu de xdotool Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
130 lines
4.4 KiB
Lua
130 lines
4.4 KiB
Lua
-- Hyprland - https://wiki.hypr.land/Configuring/Start/
|
|
-- Raccourcis repris de programs/i3.nix (bépo), apparence reprise d'Omarchy :
|
|
-- https://github.com/basecamp/omarchy/tree/master/default/hypr
|
|
|
|
local mod = "SUPER"
|
|
|
|
local function bind(keys, dispatcher, options)
|
|
if type(dispatcher) == "string" then
|
|
dispatcher = hl.dsp.exec_cmd(dispatcher)
|
|
end
|
|
hl.bind(keys, dispatcher, options or {})
|
|
end
|
|
|
|
-- Écrans : détection automatique (remplace autorandr)
|
|
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = "auto" })
|
|
|
|
hl.env("XCURSOR_SIZE", "24")
|
|
hl.env("GDK_BACKEND", "wayland,x11,*")
|
|
hl.env("QT_QPA_PLATFORM", "wayland;xcb")
|
|
hl.env("ELECTRON_OZONE_PLATFORM_HINT", "wayland")
|
|
hl.env("TERMINAL", "ghostty")
|
|
|
|
hl.config({
|
|
input = {
|
|
kb_layout = "fr",
|
|
kb_variant = "bepo",
|
|
follow_mouse = 1,
|
|
repeat_rate = 40,
|
|
repeat_delay = 250,
|
|
numlock_by_default = true,
|
|
touchpad = {
|
|
clickfinger_behavior = true,
|
|
scroll_factor = 0.4,
|
|
},
|
|
},
|
|
|
|
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,
|
|
layout = "dwindle",
|
|
},
|
|
|
|
decoration = {
|
|
rounding = 0,
|
|
shadow = { enabled = false },
|
|
blur = { enabled = false },
|
|
},
|
|
|
|
animations = { enabled = true },
|
|
|
|
dwindle = {
|
|
preserve_split = true,
|
|
force_split = 2,
|
|
},
|
|
|
|
misc = {
|
|
disable_hyprland_logo = true,
|
|
disable_splash_rendering = true,
|
|
background_color = "rgb(000000)",
|
|
focus_on_activate = true,
|
|
},
|
|
|
|
-- Remplace unclutter
|
|
cursor = { inactive_timeout = 3 },
|
|
})
|
|
|
|
hl.on("hyprland.start", function()
|
|
hl.exec_cmd("waybar")
|
|
hl.exec_cmd("swaybg --mode fill --image /home/pierre/Documents/Graphisme/fc-bg-light-black.png")
|
|
hl.exec_cmd("copyq")
|
|
end)
|
|
|
|
-- Applications
|
|
bind(mod .. " + Return", "~/.local/bin/workspace-run ghostty --working-directory=")
|
|
bind(mod .. " + SHIFT + Return", "~/.local/bin/workspace-run code")
|
|
bind(mod .. " + d", "rofi -combi-modi 'window#run#ssh#emoji#calc' -modi 'calc#combi' -show combi")
|
|
bind(mod .. " + space", "~/.local/bin/stt-dictate toggle")
|
|
bind(mod .. " + SHIFT + t", "hyprlock")
|
|
bind("Print", "grim -g \"$(slurp)\" - | wl-copy")
|
|
bind("SHIFT + Print", "grim - | wl-copy")
|
|
|
|
-- Fenêtres (mêmes touches qu'i3 en bépo)
|
|
bind(mod .. " + b", hl.dsp.window.close())
|
|
bind(mod .. " + e", hl.dsp.window.fullscreen({ mode = "fullscreen" }))
|
|
bind(mod .. " + p", hl.dsp.layout("togglesplit"))
|
|
-- Pas de layout tabbed/stacking dans Hyprland : les groupes en sont l'équivalent
|
|
bind(mod .. " + eacute", hl.dsp.group.toggle())
|
|
bind(mod .. " + u", hl.dsp.group.next())
|
|
bind(mod .. " + SHIFT + space", hl.dsp.window.float({ action = "toggle" }))
|
|
|
|
for _, arrow in ipairs({ { "Left", "l" }, { "Right", "r" }, { "Up", "u" }, { "Down", "d" } }) do
|
|
local key, direction = arrow[1], arrow[2]
|
|
bind(mod .. " + " .. key, hl.dsp.focus({ direction = direction }))
|
|
bind(mod .. " + SHIFT + " .. key, hl.dsp.window.swap({ direction = direction }))
|
|
bind(mod .. " + CTRL + " .. key, hl.dsp.workspace.move({ monitor = direction }))
|
|
end
|
|
|
|
bind(mod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true })
|
|
bind(mod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true })
|
|
|
|
-- Espaces de travail : keycodes 10 à 19 = rangée du haut, quelle que soit la
|
|
-- disposition (" « » ( ) @ + - / * en bépo)
|
|
for workspace = 1, 10 do
|
|
local key = "code:" .. tostring(workspace + 9)
|
|
bind(mod .. " + " .. key, hl.dsp.focus({ workspace = tostring(workspace) }))
|
|
bind(mod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = tostring(workspace) }))
|
|
end
|
|
|
|
-- Session
|
|
bind(mod .. " + SHIFT + c", "hyprctl reload")
|
|
bind(mod .. " + SHIFT + e", "uwsm stop")
|
|
|
|
-- Touches multimédia (actives même écran verrouillé)
|
|
local media = { locked = true, repeating = true }
|
|
bind("XF86AudioRaiseVolume", "pactl set-sink-volume @DEFAULT_SINK@ +5%", media)
|
|
bind("XF86AudioLowerVolume", "pactl set-sink-volume @DEFAULT_SINK@ -5%", media)
|
|
bind("XF86AudioMute", "pactl set-sink-mute @DEFAULT_SINK@ toggle", { locked = true })
|
|
bind("XF86AudioPlay", "playerctl play-pause", { locked = true })
|
|
bind("XF86AudioPause", "playerctl play-pause", { locked = true })
|
|
bind("XF86AudioNext", "playerctl next", { locked = true })
|
|
bind("XF86AudioPrev", "playerctl previous", { locked = true })
|
|
bind("XF86MonBrightnessUp", "brightnessctl set +5%", media)
|
|
bind("XF86MonBrightnessDown", "brightnessctl set 5%-", media)
|