Move all omarchy runtime state (themes, backgrounds, current theme) from ~/.config/omarchy/current to ~/.local/state/omarchy/current to keep the config dir free of generated files. Add mise task for recreating symlinks and update credential helpers for tea.
546 lines
24 KiB
Lua
546 lines
24 KiB
Lua
-- local terminal = "ghostty -e"
|
|
local terminal = "foot"
|
|
local _notify_cmd = "notify-send"
|
|
local browser = "gtk-launch firefox.desktop"
|
|
local webapp = "chromium --new-window --ozone-platform=wayland --app="
|
|
local music = "gtk-launch spotify.desktop"
|
|
|
|
local LEADER = "SUPER + "
|
|
local HYPR = "SUPER + CONTROL + SHIFT + ALT + "
|
|
|
|
require("monitors")
|
|
require("functions")
|
|
require("rules")
|
|
require("theme")
|
|
require("envs")
|
|
require("onstart")
|
|
|
|
hl.config({
|
|
input = {
|
|
kb_layout = "us",
|
|
kb_variant = ",qwerty",
|
|
-- kb_model =
|
|
-- kb_options = ctrl:nocaps
|
|
kb_options = "caps:ctrl_modifier,compose:ralt",
|
|
-- kb_options = compose:ralt
|
|
follow_mouse = 1,
|
|
repeat_rate = 40,
|
|
repeat_delay = 600,
|
|
|
|
touchpad = {
|
|
natural_scroll = true,
|
|
disable_while_typing = true,
|
|
clickfinger_behavior = true,
|
|
scroll_factor = 0.7,
|
|
},
|
|
scroll_method = 2,
|
|
|
|
sensitivity = 0, -- -1.0 - 1.0, 0 means no modification.
|
|
},
|
|
|
|
ecosystem = {
|
|
no_update_news = true,
|
|
enforce_permissions = false,
|
|
},
|
|
|
|
general = {
|
|
gaps_in = 3,
|
|
gaps_out = 3,
|
|
border_size = 2,
|
|
allow_tearing = true,
|
|
snap = {
|
|
enabled = true
|
|
},
|
|
col = {
|
|
active_border = { colors = { "rgba(33ccffee)", "rgba(00ff99ee)" }, angle = 45 },
|
|
inactive_border = "rgba(595959aa)",
|
|
},
|
|
|
|
layout = "master"
|
|
},
|
|
|
|
master = {
|
|
allow_small_split = true,
|
|
mfact = 0.50,
|
|
new_status = "master",
|
|
orientation = "center",
|
|
},
|
|
|
|
dwindle = {
|
|
preserve_split = true,
|
|
force_split = 2,
|
|
},
|
|
|
|
scrolling = {
|
|
focus_fit_method = 0,
|
|
column_width = 0.49,
|
|
fullscreen_on_one_column = true
|
|
},
|
|
|
|
cursor = {
|
|
hide_on_key_press = true,
|
|
warp_on_change_workspace = 1,
|
|
},
|
|
|
|
binds = {
|
|
hide_special_on_workspace_change = true,
|
|
},
|
|
decoration = {
|
|
rounding = 1,
|
|
active_opacity = 1.0,
|
|
inactive_opacity = 0.95,
|
|
dim_inactive = true,
|
|
dim_special = 0.0,
|
|
dim_strength = 0.3,
|
|
|
|
shadow = {
|
|
enabled = false,
|
|
range = 2,
|
|
render_power = 3,
|
|
color = "rgba(1a1a1aee)",
|
|
},
|
|
|
|
blur = {
|
|
enabled = false,
|
|
size = 3,
|
|
passes = 1,
|
|
vibrancy = 0.1696,
|
|
},
|
|
},
|
|
|
|
group = {
|
|
groupbar = {
|
|
enabled = false
|
|
}
|
|
},
|
|
|
|
misc = {
|
|
disable_hyprland_logo = true,
|
|
disable_splash_rendering = true,
|
|
disable_scale_notification = true,
|
|
focus_on_activate = true,
|
|
anr_missed_pings = 3,
|
|
on_focus_under_fullscreen = 1,
|
|
mouse_move_enables_dpms = true,
|
|
animate_manual_resizes = true,
|
|
mouse_move_focuses_monitor = true,
|
|
enable_swallow = true,
|
|
enable_anr_dialog = false,
|
|
force_default_wallpaper = true,
|
|
initial_workspace_tracking = 0,
|
|
allow_session_lock_restore = true,
|
|
},
|
|
|
|
xwayland = {
|
|
force_zero_scaling = true
|
|
},
|
|
|
|
animations = {
|
|
enabled = true,
|
|
}
|
|
})
|
|
|
|
hl.curve("almostLinear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.75, 1.0 } } })
|
|
hl.curve("linear", { type = "bezier", points = { { 0, 0 }, { 1, 1 } } })
|
|
hl.curve("generic", { type = "bezier", points = { { 0.5, 0.9 }, { 0.1, 1.08 } } })
|
|
hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1.0 } } })
|
|
hl.curve("overshoot", { type = "bezier", points = { { 0.5, 0.9 }, { 0.1, 1.1 } } })
|
|
hl.curve("rubber", { type = "spring", mass = 1, stiffness = 70, dampening = 10 })
|
|
|
|
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.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 = 3.79, bezier = "easeOutQuint" })
|
|
hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, bezier = "easeOutQuint", 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 = "fadeSwitch", enabled = false })
|
|
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 = 0.5, bezier = "quick" })
|
|
|
|
hl.animation({ leaf = "specialWorkspaceIn", enabled = true, speed = 3, bezier = "easeOutQuint", style = "slide top" })
|
|
hl.animation({ leaf = "specialWorkspaceOut", enabled = true, speed = 2, bezier = "easeInOutCubic", style = "slide bottom" })
|
|
|
|
-- Keybindings
|
|
|
|
hl.bind("SUPER + SHIFT + return", hl.dsp.exec_cmd("gtk-launch herdr.desktop"), { description = "Open herdr terminal" })
|
|
hl.bind("SUPER + return", hl.dsp.exec_cmd("gtk-launch tmux.desktop"), { description = "Open tmux terminal" })
|
|
hl.bind("SUPER + N", hl.dsp.exec_cmd(terminal .. " -a quicknotes -e nvim +'Obsidian today'"),
|
|
{ description = "Open Obsidian today in a centered floating window" })
|
|
|
|
hl.bind("SUPER + B", hl.dsp.exec_raw(browser), { description = "Open browser" })
|
|
hl.bind("SUPER + I", sysinfo, { description = "Show system info" })
|
|
|
|
hl.bind("SUPER + CONTROL + X", hl.dsp.exec_raw("ostt launch --paste"), { description = "Open ostt" })
|
|
hl.bind("F9", hl.dsp.exec_raw("ostt launch --paste"), { description = "Open ostt" })
|
|
|
|
hl.bind(
|
|
"SUPER + Y",
|
|
toggle_master_scrolling,
|
|
{ description = "Layout: Toggle master/scrolling" }
|
|
)
|
|
|
|
-- Open rofi on first press, closes it on second
|
|
hl.bind("SUPER + Space", hl.dsp.exec_raw("rofi -show combi --modes combi"),
|
|
{ release = true, description = "Open Application Menu" })
|
|
hl.bind("SUPER + SHIFT + SPACE", hl.dsp.exec_cmd("~/.local/bin/hyprland-fetch-client"),
|
|
{ release = true, description = "Fetch client" })
|
|
hl.bind("SUPER + CONTROL + SPACE",
|
|
hl.dsp.exec_cmd("~/.local/bin/hyprland-focus-client"),
|
|
{ release = true, description = "Focus client" }
|
|
)
|
|
hl.bind("SUPER + slash",
|
|
hl.dsp.exec_cmd("ROFI_PASS_BACKEND=wtype ROFI_PASS_CLIPBOARD_BACKEND=wl-clipboard ~/.local/bin/rofi-pass"),
|
|
{ release = true, description = "Open rofi-pass" })
|
|
|
|
hl.bind("Print",
|
|
hl.dsp.exec_cmd("hyprshot -m window -o ~/Pictures/ -- tensaku-edit"),
|
|
{ description = "Take screenshot" })
|
|
|
|
hl.bind("SHIFT + PRINT",
|
|
hl.dsp.exec_cmd("hyprshot -m region -o ~/Pictures/ -- tensaku-edit"),
|
|
{ description = "Take screenshot" })
|
|
|
|
hl.bind("SUPER + PRINT", hl.dsp.exec_cmd("pkill hyprpicker || hyprpicker -a"), { description = "Pick color" })
|
|
hl.bind("SUPER + CONTROL + PRINT",
|
|
hl.dsp.exec_cmd("hyprshot -m region --raw -z | /usr/bin/tesseract stdin stdout --oem 1 --psm 6 -l eng | wl-copy"),
|
|
{ description = "Extract text (OCR) from screenshot" })
|
|
|
|
hl.bind("SUPER + ALT + Print",
|
|
hl.dsp.exec_cmd("~/.local/bin/screen-recorder -o ~/Videos/$(date +'%Y-%m-%d_%H%M%S')_recording.mp4"),
|
|
{ description = "Start/Stop screen recording" })
|
|
|
|
hl.bind("SUPER + ALT + SHIFT + Print",
|
|
hl.dsp.exec_cmd("~/.local/bin/screen-recorder stop"),
|
|
{ description = "Stop screen recording" })
|
|
|
|
|
|
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"),
|
|
{ repeating = true, description = "Volume down" })
|
|
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"),
|
|
{ repeating = true, description = "Volume up" })
|
|
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { description = "Toggle mute" })
|
|
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"),
|
|
{ description = "Toggle mic mute" })
|
|
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl s 10%+"),
|
|
{ repeating = true, description = "Brightness up" })
|
|
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl s 10%-"),
|
|
{ repeating = true, description = "Brightness down" })
|
|
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { description = "Play/pause media" })
|
|
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { description = "Previous media" })
|
|
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { description = "Next media" })
|
|
|
|
hl.bind("SUPER + Y", hl.dsp.exec_cmd("makoctl dismiss"), { description = "Dismiss notifications" })
|
|
|
|
|
|
hl.bind("SUPER + W", hl.dsp.window.close(), { description = "Window: Close" })
|
|
hl.bind("SUPER + F", hl.dsp.window.fullscreen({ mode = "fullscreen", action = "toggle" }),
|
|
{ description = "Window: Toggle fullscreen" })
|
|
hl.bind("SUPER + CONTROL + F", hl.dsp.window.fullscreen_state({ internal = 2, client = 0, action = "toggle" }),
|
|
{ description = "Window: Toggle fullscreen state 2" })
|
|
hl.bind("SUPER + ALT + F", hl.dsp.window.fullscreen_state({ internal = 0, client = 2, action = "toggle" }),
|
|
{ description = "Window: Toggle fullscreen state 2" })
|
|
|
|
hl.bind("SUPER + T", toggle_float_with_limit,
|
|
{ description = "Window: Toggle floating/tiling (max 80%)" })
|
|
|
|
-- hl.bind("SUPER + P", hl.dsp.window.pseudo(), { description = "Window: Toggle pseudo tiling" })
|
|
hl.bind("SUPER + P", toggle_pin, { description = "Window: Toggle Pin" })
|
|
|
|
hl.bind("SUPER + A", hl.dsp.window.alter_zorder({ mode = "top" }), { description = "Window: Move to top" })
|
|
|
|
hl.bind("SUPER + left", hl.dsp.focus({ direction = "l" }), { description = "Window: Focus left" })
|
|
hl.bind("SUPER + right", hl.dsp.focus({ direction = "r" }), { description = "Window: Focus right" })
|
|
hl.bind("SUPER + up", hl.dsp.focus({ direction = "u" }), { description = "Window: Focus up" })
|
|
hl.bind("SUPER + down", hl.dsp.focus({ direction = "d" }), { description = "Window: Focus down" })
|
|
|
|
hl.bind("SUPER + H", hl.dsp.focus({ direction = "l" }), { description = "Window: Focus left" })
|
|
hl.bind("SUPER + L", hl.dsp.focus({ direction = "r" }), { description = "Window: Focus right" })
|
|
hl.bind("SUPER + K", hl.dsp.focus({ direction = "u" }), { description = "Window: Focus up" })
|
|
hl.bind("SUPER + J", hl.dsp.focus({ direction = "d" }), { description = "Window: Focus down" }) -- hl.bind("SUPER + H", hl.dsp.window.resize("left"), { repeating = true, description = "Window: Resize left" })
|
|
|
|
-- hl.bind("SUPER + z", hl.dsp.focus({ last = true }), { description = "Window: Focus last" })
|
|
hl.bind("SUPER + Z", hl.dsp.focus({ urgent_or_last = true }), { description = "Window: Focus last" })
|
|
|
|
hl.bind("SUPER + ALT + period", function()
|
|
hl.dispatch(hl.dsp.layout("cycleprev"))
|
|
end, { description = "Window: Swap with next" })
|
|
hl.bind("SUPER + ALT + comma", function()
|
|
hl.dispatch(hl.dsp.layout("cyclenext"))
|
|
end, { description = "Window: Swap with prev" })
|
|
|
|
hl.bind("ALT + Tab", cycle_next_window({ next = true }), { description = "Window: Cycle next" })
|
|
hl.bind("ALT + SHIFT + Tab", cycle_next_window({ next = false }), { description = "Window: Cycle prev" })
|
|
|
|
hl.bind("CONTROL + ALT + TAB", hl.dsp.focus({ monitor = "+1" }), { description = "Focus on next monitor" })
|
|
hl.bind("CONTROL + ALT + SHIFT + TAB", hl.dsp.focus({ monitor = "-1" }), { description = "Focus on previous monitor" })
|
|
|
|
hl.bind("SUPER + S", hl.dsp.workspace.toggle_special("scratchpad"), { description = "Toggle scratchpad" })
|
|
hl.bind("SUPER + ALT + S", hl.dsp.window.move({ workspace = "special:scratchpad", follow = false }),
|
|
{ description = "Move window to scratchpad" })
|
|
hl.bind("SUPER + grave", hl.dsp.workspace.toggle_special("scratchpad"), { description = "Toggle scratchpad" })
|
|
hl.bind("SUPER + SHIFT + grave", hl.dsp.window.move({ workspace = "special:scratchpad", follow = false }),
|
|
{ description = "Move window to scratchpad" })
|
|
|
|
-- hl.bind("SUPER + TAB", hl.dsp.focus({ monitor = "+1" }), { description = "Monitor: move focus to next monitor" })
|
|
hl.bind("SUPER + TAB", hl.dsp.focus({ workspace = "e+1" }), { description = "Next workspace" })
|
|
hl.bind("SUPER + SHIFT + TAB", hl.dsp.focus({ workspace = "e-1" }), { description = "Previous workspace" })
|
|
hl.bind("SUPER + CONTROL + TAB", hl.dsp.focus({ workspace = "previous" }), { description = "Former workspace" })
|
|
|
|
hl.bind("SUPER + ALT + SHIFT + LEFT", hl.dsp.workspace.move({ monitor = "l" }),
|
|
{ description = "Move workspace to left monitor" })
|
|
hl.bind("SUPER + ALT + SHIFT + RIGHT", hl.dsp.workspace.move({ monitor = "r" }),
|
|
{ description = "Move workspace to right monitor" })
|
|
hl.bind("SUPER + ALT + SHIFT + UP", hl.dsp.workspace.move({ monitor = "u" }),
|
|
{ description = "Move workspace to up monitor" })
|
|
hl.bind("SUPER + ALT + SHIFT + DOWN", hl.dsp.workspace.move({ monitor = "d" }),
|
|
{ description = "Move workspace to down monitor" })
|
|
|
|
hl.bind("SUPER + SHIFT + LEFT", hl.dsp.window.swap({ direction = "l" }), { description = "Swap window to the left" })
|
|
hl.bind("SUPER + SHIFT + RIGHT", hl.dsp.window.swap({ direction = "r" }), { description = "Swap window to the right" })
|
|
hl.bind("SUPER + SHIFT + UP", hl.dsp.window.swap({ direction = "u" }), { description = "Swap window up" })
|
|
hl.bind("SUPER + SHIFT + DOWN", hl.dsp.window.swap({ direction = "d" }), { description = "Swap window down" })
|
|
|
|
hl.bind("ALT + TAB", hl.dsp.window.cycle_next(), { description = "Focus on next window" })
|
|
hl.bind("ALT + SHIFT + TAB", hl.dsp.window.cycle_next({ next = false }), { description = "Focus on previous window" })
|
|
hl.bind("ALT + TAB", hl.dsp.window.bring_to_top(), { description = "Reveal active window on top" })
|
|
hl.bind("ALT + SHIFT + TAB", hl.dsp.window.bring_to_top(), { description = "Reveal active window on top" })
|
|
|
|
hl.bind("SUPER + ALT + Tab", hl.dsp.focus({ workspace = "next", on_current_monitor = true }),
|
|
{ description = "Window: Focus previous in workspace" })
|
|
hl.bind("SUPER + ALT + SHIFT + Tab", hl.dsp.focus({ workspace = "previous", on_current_monitor = true }),
|
|
{ description = "Window: Focus previous in workspace" })
|
|
|
|
-- arrange split ratio
|
|
hl.bind("SUPER + X", toggle_master, { description = "Layout: Toggle master size" })
|
|
-- hl.bind("SUPER + equal", hl.dsp.layout("mfact exact 0.5"))
|
|
hl.bind("SUPER + M", function()
|
|
local current_layout = hl.get_config("general.layout")
|
|
if current_layout == "master" then
|
|
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
|
end
|
|
if current_layout == "scrolling" then
|
|
hl.dispatch(hl.dsp.layout("consume_or_expel next"))
|
|
end
|
|
end, { description = "Layout: Swap with master" })
|
|
|
|
-- hl.bind("SUPER + M", hl.dsp.layout("rollnext"))
|
|
hl.bind("SUPER + period", function()
|
|
local current_layout = hl.get_config("general.layout")
|
|
if current_layout == "master" then
|
|
hl.dispatch(hl.dsp.layout("cycleprev"))
|
|
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
|
end
|
|
|
|
if current_layout == "scrolling" then
|
|
hl.dispatch(hl.dsp.layout("swapcol r"))
|
|
hl.dispatch(hl.dsp.layout("focus l"))
|
|
end
|
|
-- hl.dispatch(hl.dsp.layout("focus r"))
|
|
end, { description = "Layout: Cycle next" })
|
|
|
|
hl.bind("SUPER + comma", function()
|
|
local current_layout = hl.get_config("general.layout")
|
|
if current_layout == "master" then
|
|
hl.dispatch(hl.dsp.layout("cyclenext"))
|
|
hl.dispatch(hl.dsp.layout("swapwithmaster"))
|
|
end
|
|
|
|
if current_layout == "scrolling" then
|
|
hl.dispatch(hl.dsp.layout("swapcol l"))
|
|
hl.dispatch(hl.dsp.layout("focus r"))
|
|
end
|
|
-- hl.dispatch(hl.dsp.layout("focus l"))
|
|
end, { description = "Layout: Cycle previous" })
|
|
|
|
hl.bind("SUPER + SHIFT + comma", hl.dsp.window.move({ workspace = "-1" }),
|
|
{ description = "Window: Move to previous workspace" })
|
|
|
|
hl.bind("SUPER + SHIFT + period", hl.dsp.window.move({ workspace = "+1" }),
|
|
{ description = "Window: Move to next workspace" })
|
|
|
|
hl.bind("SUPER + ALT + comma", hl.dsp.workspace.move({ monitor = "-1" }),
|
|
{ description = "Window: Move to previous workspace and follow" })
|
|
|
|
hl.bind("SUPER + ALT + period", hl.dsp.workspace.move({ monitor = "+1" }),
|
|
{ description = "Window: Move to next workspace and follow" })
|
|
|
|
hl.bind("SUPER + C", hl.dsp.window.center(), { description = "Window: Center" })
|
|
|
|
hl.bind("SUPER + CONTROL + SHIFT + slash",
|
|
hl.dsp.exec_cmd("makoctl mode -t do-not-disturb"),
|
|
{ description = "Toggle do-not-disturb" })
|
|
|
|
hl.bind("SUPER + CONTROL + Delete", hl.dsp.exec_cmd("hyprland-toggle-monitor eDP-1"),
|
|
{ description = "Toggle laptop display" })
|
|
|
|
hl.bind("SUPER + Escape", hl.dsp.exec_raw("loginctl lock-session"), { description = "Lock screen" })
|
|
hl.bind("SUPER + SHIFT + escape", hl.dsp.exec_raw("systemctl suspend"), { description = "Suspend" })
|
|
--hl.bind("SUPER + ALT + escape", hl.dsp.exec_raw("uwsm stop"), { description = "Stop UWSM" })
|
|
hl.bind("SUPER + ALT + escape", hl.dsp.exit(), { description = "Exit Hyprland" })
|
|
hl.bind("SUPER + CONTROL + escape", hl.dsp.exec_raw("reboot"), { description = "Reboot" })
|
|
hl.bind("SUPER + SHIFT + CONTROL + escape", hl.dsp.exec_raw("systemctl poweroff"), { description = "Power off" })
|
|
|
|
-- hl.bind("SUPER + L", hl.dsp.window.resize("right"), { repeating = true, description = "Window: Resize right" })
|
|
-- hl.bind("SUPER + J", hl.dsp.window.resize("down"), { repeating = true, description = "Window: Resize down" })
|
|
-- hl.bind("SUPER + K", hl.dsp.window.resize("up"), { repeating = true, description = "Window: Resize up" })
|
|
|
|
-- # Change Workspace Mode
|
|
--
|
|
-- bind = SUPER SHIFT, X, workspaceopt, allfloat
|
|
-- bind = SUPER SHIFT, X, exec, $notifycmd "Toggled All Float Mode"
|
|
|
|
-- bind = SUPER SHIFT, Z, workspaceopt, allpseudo
|
|
-- bind = SUPER SHIFT, Z, exec, $notifycmd "Toggled All Pseudo Mode"
|
|
|
|
hl.on("keybinds.submap", function(name)
|
|
if name == "" then
|
|
hl.notification.create({ text = "Exited submap", duration = 2000, icon = "hint" })
|
|
return
|
|
end
|
|
hl.notification.create({ text = "Entered submap: " .. name, duration = 2000, icon = "hint" })
|
|
end)
|
|
|
|
hl.bind(HYPR .. "Z", hl.dsp.submap("passthru"), { description = "Passthru Menu" })
|
|
hl.define_submap("passthru", function()
|
|
hl.bind("escape", hl.dsp.submap("reset"), { description = "Passthru: Exit" })
|
|
end)
|
|
|
|
hl.bind("SUPER + F9", hl.dsp.submap("resize"), { description = "Resize Menu" })
|
|
hl.define_submap("resize", function()
|
|
hl.bind("period", hl.dsp.window.resize({ x = 10, y = 10, relative = true }),
|
|
{ repeating = true, description = "Resize: Increase" })
|
|
hl.bind("comma", hl.dsp.window.resize({ x = -10, y = -10, relative = true }),
|
|
{ repeating = true, description = "Resize: Decrease" })
|
|
hl.bind("R", function()
|
|
window_resize_percentage(0.5, 0.5)
|
|
end, { description = "Resize: Reset" })
|
|
hl.bind("S", function()
|
|
window_resize_percentage(0.25, 0.25)
|
|
end, { description = "Resize: Small" })
|
|
hl.bind("D", function()
|
|
window_resize_percentage(0.7, 0.96)
|
|
hl.dispatch(hl.dsp.window.center())
|
|
end, { description = "Resize: Large" })
|
|
hl.bind("C", hl.dsp.window.center(), { description = "Resize: Center" })
|
|
hl.bind("P", hl.dsp.window.pin(), { description = "Resize: Pin" })
|
|
hl.bind("up", hl.dsp.window.move({ direction = "up" }), { description = "Resize: Move up" })
|
|
hl.bind("down", hl.dsp.window.move({ direction = "down" }), { description = "Resize: Move down" })
|
|
hl.bind("left", hl.dsp.window.move({ direction = "left" }), { description = "Resize: Move left" })
|
|
hl.bind("right", hl.dsp.window.move({ direction = "right" }), { description = "Resize: Move right" })
|
|
hl.bind("escape", hl.dsp.submap("reset"), { description = "Resize: Exit" })
|
|
hl.bind("catchall", hl.dsp.submap("reset"), { description = "Resize: Exit" })
|
|
end)
|
|
|
|
local workspaceGroupSize = 10
|
|
local numberkey = { 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 }
|
|
|
|
function workspace_in_group(i)
|
|
local curr = hl.get_active_workspace().id
|
|
local newVal = math.floor((curr - 1) / workspaceGroupSize) * workspaceGroupSize + i
|
|
return newVal
|
|
end
|
|
|
|
for i = 1, 10 do
|
|
hl.bind("SUPER + CONTROL + code:" .. numberkey[i], function()
|
|
hl.dispatch(hl.dsp.workspace.move({ monitor = "+1", workspace = workspace_in_group(i), follow = true }))
|
|
end, { description = "Workspace: Move monitor " .. i })
|
|
end
|
|
|
|
for i = 1, 10 do
|
|
hl.bind("SUPER + SHIFT + code:" .. numberkey[i], function()
|
|
hl.dispatch(hl.dsp.window.move({ workspace = workspace_in_group(i), follow = true }))
|
|
end, { description = "Workspace: Move " .. i })
|
|
end
|
|
|
|
for i = 1, 10 do
|
|
hl.bind("SUPER + code:" .. numberkey[i], function()
|
|
hl.dispatch(hl.dsp.focus({ workspace = workspace_in_group(i), on_current_monitor = true }))
|
|
end, { description = "Workspace: Focus " .. i })
|
|
end
|
|
|
|
-- Scroll through existing workspaces with mainMod + scroll
|
|
hl.bind("SUPER + mouse_down", hl.dsp.focus({ workspace = "e+1" }), { description = "Workspace: Next" })
|
|
hl.bind("SUPER + mouse_up", hl.dsp.focus({ workspace = "e-1" }), { description = "Workspace: Previous" })
|
|
|
|
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
|
hl.bind("SUPER + mouse:272", hl.dsp.window.drag(), { mouse = true, description = "Window: Drag" })
|
|
hl.bind("SUPER + mouse:273", hl.dsp.window.resize(), { mouse = true, description = "Window: Resize" })
|
|
hl.bind("mouse:275", hl.dsp.window.cycle_next({ next = true }), { click = true, description = "Window: Cycle next" })
|
|
hl.bind("mouse:276", hl.dsp.window.cycle_next({ next = false }), { click = true, description = "Window: Cycle previous" })
|
|
|
|
hl.bind(HYPR .. "V", hl.dsp.exec_cmd("pavucontrol"), { description = "Volume control" })
|
|
hl.bind(HYPR .. "B", hl.dsp.exec_cmd("blueberry"), { description = "Bluetooth manager" })
|
|
|
|
hl.bind(HYPR .. "semicolon", hl.dsp.exec_cmd("~/.local/bin/set-wallpaper.sh categories/quotes"),
|
|
{ description = "get new wallpaper" })
|
|
|
|
hl.bind(HYPR .. "A", hl.dsp.exec_cmd("gtk-launch pi.desktop"), { description = "Open pi tui" })
|
|
hl.bind(HYPR .. "C", dispatch_focus_or_launch({
|
|
match = "chrome-chatgpt.com",
|
|
cmd = "gtk-launch ChatGPT.desktop",
|
|
}), { description = "ChatGPT" })
|
|
|
|
hl.bind(HYPR .. "O", dispatch_focus_or_launch({
|
|
match = "chrome-outlook.office.com",
|
|
cmd = "gtk-launch Outlook.desktop",
|
|
}), { description = "Email" })
|
|
|
|
hl.bind(HYPR .. "T", dispatch_focus_or_launch({
|
|
match = "chrome-teams.microsoft.com",
|
|
cmd = "gtk-launch Team.desktop",
|
|
}), { description = "UWO Team" })
|
|
|
|
hl.bind(HYPR .. "Y", dispatch_focus_or_launch({
|
|
match = "chrome-youtube.com",
|
|
cmd = "gtk-launch YouTube.desktop",
|
|
}), { description = "YouTube" })
|
|
|
|
hl.bind(HYPR .. "W", dispatch_focus_or_launch({
|
|
match = "chrome-web.whatsapp.com",
|
|
cmd = "gtk-launch WhatsApp.desktop",
|
|
}), { description = "WhatsApp" })
|
|
|
|
hl.bind(HYPR .. "G", dispatch_focus_or_launch({
|
|
match = "chrome-www.gmail.com",
|
|
cmd = webapp .. "https://www.gmail.com/",
|
|
}), { description = "Google" })
|
|
|
|
hl.bind(HYPR .. "D", dispatch_focus_or_launch({
|
|
match = "chrome-discord.com",
|
|
cmd = "gtk-launch Discord.desktop"
|
|
}), { description = "Discord" })
|
|
|
|
hl.bind(HYPR .. "M", dispatch_focus_or_launch({
|
|
match = "chrome-messages.google.com",
|
|
cmd = "gtk-launch \"Google Messages.desktop\"",
|
|
}), { description = "Google Messages" })
|
|
|
|
hl.bind(HYPR .. "S", dispatch_focus_or_launch({
|
|
match = "Spotify",
|
|
cmd = music,
|
|
}), { description = "Music" })
|
|
|
|
hl.bind(HYPR .. "F", dispatch_focus_or_launch({
|
|
match = "strata",
|
|
cmd = "gtk-launch io.github.lgse.Strata.desktop",
|
|
}), { description = "File Manager" })
|
|
|
|
-- Gestures
|
|
-- hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
|
|
-- hl.gesture({ fingers = 3, direction = "down", mods = "ALT", action = "close" })
|
|
-- hl.gesture({ fingers = 3, direction = "up", mods = "SUPER", scale = 1.5, action = "fullscreen" })
|
|
-- hl.gesture({ fingers = 3, direction = "left", scale = 1.5, action = "float" })
|
|
--
|
|
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 2 })
|
|
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 1.2, mode = "mult" })
|
|
-- hl.gesture({ fingers = 2, direction = "pinch", action = "cursorZoom", zoom_level = 1, mode = "live" })
|