From ef9e2f383aed7b8af66a3d418bc73d587a583998 Mon Sep 17 00:00:00 2001 From: sudacode Date: Wed, 27 May 2026 13:02:34 -0700 Subject: [PATCH] add hyprland lua files --- .config/hypr/hyprland.laptop.lua | 411 ++++++++++++++++++++++++++++++ .config/hypr/hyprland.lua | 421 +++++++++++++++++++++++++++++++ .config/hypr/hyprlock.lua | 63 +++++ .config/hypr/hyprpaper.lua | 0 .config/hypr/hyprqt6engine.lua | 4 + .config/hypr/hyprsunset.lua | 7 + .config/hypr/keybindings.lua | 209 +++++++++++++++ .config/hypr/macchiato.lua | 79 ++++++ .config/hypr/windowrules.lua | 389 ++++++++++++++++++++++++++++ 9 files changed, 1583 insertions(+) create mode 100644 .config/hypr/hyprland.laptop.lua create mode 100644 .config/hypr/hyprland.lua create mode 100644 .config/hypr/hyprlock.lua create mode 100644 .config/hypr/hyprpaper.lua create mode 100644 .config/hypr/hyprqt6engine.lua create mode 100644 .config/hypr/hyprsunset.lua create mode 100644 .config/hypr/keybindings.lua create mode 100644 .config/hypr/macchiato.lua create mode 100644 .config/hypr/windowrules.lua diff --git a/.config/hypr/hyprland.laptop.lua b/.config/hypr/hyprland.laptop.lua new file mode 100644 index 0000000..8a7a68c --- /dev/null +++ b/.config/hypr/hyprland.laptop.lua @@ -0,0 +1,411 @@ +-- This is an example Hyprland config file. +-- Refer to the wiki for more information. +-- https://wiki.hyprland.org/Configuring/ + +-- Please note not all available settings / options are set here. +-- For a full list, see the wiki + +-- You can split this configuration into multiple files +-- Create your files separately and then link them to this file like this: +-- source = ~/.config/hypr/myColors.conf + +--############### +--## MONITORS ### +--############### + +-- See https://wiki.hyprland.org/Configuring/Monitors/ +-- Generated by hyprlang2lua. Review TODOs before reloading Hyprland. + +hl.monitor({ + output = "eDP-1", + mode = "3840x2160@60", + position = "0x0", + scale = "2", + vrr = 0, +}) + +-- Source: ~/.config/hypr/keybindings.conf — convert this file to Lua and ensure it is on Lua's package.path. +require("keybindings") +-- source = ~/.config/hypr/env.conf +-- unscale XWayland + +local terminal = "uwsm app -- ghostty" +local fileManager = "uwsm app -- dolphin" +local menu = "rofi -show drun -run-command \"uwsm app -- {cmd}\"" +local notification_daemon = "uwsm app -- swaync" + +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.0 } } }) +hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 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 = 4.79, + bezier = "easeOutQuint", +}) +hl.animation({ + leaf = "windowsIn", + enabled = true, + speed = 4.1, + bezier = "easeOutQuint", + style = "slide", +}) +hl.animation({ + leaf = "windowsOut", + enabled = true, + speed = 1.49, + bezier = "easeOutQuint", + style = "slide", +}) +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 = "slidefade", +}) +hl.animation({ + leaf = "workspacesIn", + enabled = true, + speed = 1.21, + bezier = "almostLinear", + style = "slidefade", +}) +hl.animation({ + leaf = "workspacesOut", + enabled = true, + speed = 1.94, + bezier = "almostLinear", + style = "slidefade", +}) + +hl.device({ + name = "epic-mouse-v1", + sensitivity = -0.5, +}) + +hl.workspace_rule({ + workspace = "w[1-10]", + monitor = "eDP-1", + persistent = false, +}) + +hl.window_rule({ + match = { + class = "discord", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "mpv", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "discord", + }, + workspace = "10 silent", +}) + +hl.window_rule({ + match = { + class = ".* fullscreen:0", + }, + opacity = 0.88, +}) + +hl.window_rule({ + match = { + class = "mpv fullscreen:0", + }, + opacity = 1, +}) + +hl.window_rule({ + match = { + class = "anki fullscreen:0", + }, + opacity = 1, +}) + +hl.window_rule({ + match = { + class = "remote-viewer", + }, + opacity = 1, +}) + +hl.window_rule({ + match = { + class = ".*", + }, + suppress_event = "maximize", +}) + +hl.window_rule({ + match = { + class = "^$", + title = "^$", + xwayland = 1, + floating = 1, + fullscreen = 0, + pinned = 0, + }, + no_focus = true, +}) + +hl.window_rule({ + match = { + class = "^(zen)$", + }, + suppress_event = "maximize", +}) + +hl.window_rule({ + match = { + class = "^(xwaylandvideobridge)$", + }, + opacity = "0.0 override", + no_anim = true, + no_initial_focus = true, + -- TODO: manual review — unmapped window rule action: "maxsize 1 1" + blur = false, + no_focus = true, +}) + +hl.config({ + xwayland = { + force_zero_scaling = true, + }, + --################## + --## MY PROGRAMS ### + --################## + -- See https://wiki.hyprland.org/Configuring/Keywords/ + -- Set programs that you use + -- $notification_daemon = dunst + --################ + --## AUTOSTART ### + --################ + -- Autostart necessary processes (like notifications daemons, status bars, etc.) + -- Or execute your favorite apps at launch like this: + --############################ + --## ENVIRONMENT VARIABLES ### + --############################ + -- See https://wiki.hyprland.org/Configuring/Environment-variables/ + -- env = XCURSOR_SIZE,24 + -- env = HYPRCURSOR_SIZE,24 + -- done in ../uswm/env and ../uswm/env-hyprland + --#################### + --## LOOK AND FEEL ### + --#################### + -- Refer to https://wiki.hyprland.org/Configuring/Variables/ + -- https://wiki.hyprland.org/Configuring/Variables/#general + general = { + gaps_in = 5, + gaps_out = 8, + border_size = 2, + -- https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col = { + active_border = { colors = { "rgba(33ccffee)", "rgba(00ff99ee)" }, angle = 45 }, + inactive_border = "rgba(595959aa)", + }, + -- Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false, + -- Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false, + layout = "dwindle", + }, + -- https://wiki.hyprland.org/Configuring/Variables/#decoration + decoration = { + rounding = 10, + rounding_power = 2, + -- Change transparency of focused and unfocused windows + active_opacity = 1.0, + inactive_opacity = 1.0, + shadow = { + enabled = true, + range = 4, + render_power = 3, + color = "rgba(1a1a1aee)", + }, + -- https://wiki.hyprland.org/Configuring/Variables/#blur + blur = { + enabled = true, + size = 7, + passes = 2, + xray = true, + vibrancy = 0.1696, + }, + }, + -- https://wiki.hyprland.org/Configuring/Variables/#animations + animations = { + enabled = "yes, please :)", + -- Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + -- animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + -- animation = windowsOut, 1, 1.49, linear, popin 87% + }, + -- Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ + -- "Smart gaps" / "No gaps when only" + -- uncomment all if you wish to use that. + -- workspace = w[tv1], gapsout:0, gapsin:0 + -- workspace = f[1], gapsout:0, gapsin:0 + -- windowrulev2 = bordersize 0, floating:0, onworkspace:w[tv1] + -- windowrulev2 = rounding 0, floating:0, onworkspace:w[tv1] + -- windowrulev2 = bordersize 0, floating:0, onworkspace:f[1] + -- windowrulev2 = rounding 0, floating:0, onworkspace:f[1] + -- See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + dwindle = { + pseudotile = true, -- Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true, -- You probably want this + }, + -- See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + master = { + new_status = "master", + }, + -- https://wiki.hyprland.org/Configuring/Variables/#misc + misc = { + force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :( + font_family = "JetBrainsMono Nerd Font", + }, + --############ + --## INPUT ### + --############ + -- https://wiki.hyprland.org/Configuring/Variables/#input + input = { + kb_layout = "us", + kb_variant = "", + kb_model = "pc104", + kb_options = "caps:escape_shifted_capslock", + kb_rules = "", + follow_mouse = 1, + sensitivity = 0, -- -1.0 - 1.0, 0 means no modification. + touchpad = { + natural_scroll = true, + }, + }, + -- https://wiki.hyprland.org/Configuring/Variables/#gestures + gestures = { + workspace_swipe = true, + workspace_swipe_fingers = 3, + }, + -- Example per-device config + -- See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more + render = { + explicit_sync = true, + }, + -- {{{ WORKSPACES + -- workspace = name:,monitor:DP-1 + -- workspace = 2,monitor:DP-1,defaultName: + -- workspace = 2,monitor:DP-1,persistent:false + -- workspace = 3,monitor:DP-1,persistent:false + -- workspace = 4,monitor:DP-1,persistent:false + -- workspace = 5,monitor:DP-1,persistent:false + -- workspace = 6,monitor:DP-3,persistent:false,default:true + -- workspace = 7,monitor:DP-3,persistent:false + -- workspace = 8,monitor:DP-3,persistent:false + -- workspace = 9,monitor:DP-3,persistent:false + -- workspace = 10,monitor:DP-3,persistent:false + -- }}} + --############################# + --## WINDOWS AND WORKSPACES ### + --############################# + -- See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + -- See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + -- Example windowrule v1 + -- windowrulev2 = float, class:com.mitchellh.ghostty + -- windowrulev2 = opacity 1, class:.* fullscreen:0 + -- Example windowrule v2 + -- windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ + -- Ignore maximize requests from apps. You'll probably like this. + -- Fix some dragging issues with XWayland + -- https://github.com/hyprwm/Hyprland/issues/3835#issuecomment-2004448245 + -- exec-once = $HOME/.local/bin/bitwarden-nofloat.sh + -- ENABLE_HDR_WSI=1 mpv --vo=gpu-next --target-colorspace-hint --gpu-api=vulkan --gpu-context=waylandvk "filename" + -- {{{ Screen sharing workaround: https://wiki.hyprland.org/Useful-Utilities/Screen-Sharing/#xwayland + -- }}} +}) + +hl.on("hyprland.start", function() + hl.exec_cmd("uwsm app -sb -- hyprpm update -nn") + hl.exec_cmd("uwsm app -sb -- hyprpm reload -nn") + hl.exec_cmd(notification_daemon) + hl.exec_cmd(terminal) + hl.exec_cmd("uwsm app -sb -S both -t scope -- hyprpm update -nn") + hl.exec_cmd("uwsm app -sb -S both -t scope -- hyprpm reload -nn") + hl.exec_cmd("uwsm app -sb -t service -- nm-applet") + hl.exec_cmd("uwsm app -sb -t service -- hyprsunset") + hl.exec_cmd("uwsm app -sb -t service -- polkit-kde-authentication-agent-1.desktop") + hl.exec_cmd("uwsm app -sb -t service -- variety") + hl.exec_cmd("uwsm app -sb -t service -- fcitx5") + hl.exec_cmd("waybar -c " .. HOME .. "/.config/waybar/catppuccin-macchiato/config-battery.jsonc -s " .. HOME .. "/.config/waybar/catppuccin-macchiato/style.css") +end) + diff --git a/.config/hypr/hyprland.lua b/.config/hypr/hyprland.lua new file mode 100644 index 0000000..6999c4b --- /dev/null +++ b/.config/hypr/hyprland.lua @@ -0,0 +1,421 @@ +-- This is an example Hyprland config file. +-- Refer to the wiki for more information. +-- https://wiki.hyprland.org/Configuring/ + +-- Please note not all available settings / options are set here. +-- For a full list, see the wiki + +-- You can split this configuration into multiple files +-- Create your files separately and then link them to this file like this: +-- source = ~/.config/hypr/myColors.conf + +--############### +--## MONITORS ### +--############### + +-- See https://wiki.hyprland.org/Configuring/Monitors/ +-- monitor=DP-1,2560x1440@144,0x0,1 +-- monitor=DP-3,2560x1440@144,2560x0,1 +-- vrr 2 enables vrr if application is fullscreen +-- vrr 3 enables vrr if application is fullscreen and video or game content +-- monitor = DP-1, 3440x1440@240,0x0,1,vrr,3 +-- Generated by hyprlang2lua. Review TODOs before reloading Hyprland. + +hl.monitor({ + output = "DP-1", + mode = "3440x1440@240", + position = "0x0", + scale = 1, + vrr = 2, + -- cm = srgb + -- Optional HDR settings + cm = "hdr", + bitdepth = 10, + sdr_min_luminance = 0.005, + sdr_max_luminance = 200, + min_luminance = 0, + max_luminance = 1000, + max_avg_luminance = 200, + sdrbrightness = 1.0, + sdrsaturation = 0.98, +}) + +-- Source: ~/.config/hypr/keybindings.conf — convert this file to Lua and ensure it is on Lua's package.path. +require("keybindings") +-- Source: ~/.config/hypr/windowrules.conf — convert this file to Lua and ensure it is on Lua's package.path. +require("windowrules") +-- Source: ~/.config/hypr/macchiato.conf — convert this file to Lua and ensure it is on Lua's package.path. +-- require("macchiato") + +local rosewater = "rgb(f4dbd6)" +local rosewaterAlpha = "f4dbd6" + +local flamingo = "rgb(f0c6c6)" +local flamingoAlpha = "f0c6c6" + +local pink = "rgb(f5bde6)" +local pinkAlpha = "f5bde6" + +local mauve = "rgb(c6a0f6)" +local mauveAlpha = "c6a0f6" + +local red = "rgb(ed8796)" +local redAlpha = "ed8796" + +local maroon = "rgb(ee99a0)" +local maroonAlpha = "ee99a0" + +local peach = "rgb(f5a97f)" +local peachAlpha = "f5a97f" + +local yellow = "rgb(eed49f)" +local yellowAlpha = "eed49f" + +local green = "rgb(a6da95)" +local greenAlpha = "a6da95" + +local teal = "rgb(8bd5ca)" +local tealAlpha = "8bd5ca" + +local sky = "rgb(91d7e3)" +local skyAlpha = "91d7e3" + +local sapphire = "rgb(7dc4e4)" +local sapphireAlpha = "7dc4e4" + +local blue = "rgb(8aadf4)" +local blueAlpha = "8aadf4" + +local lavender = "rgb(b7bdf8)" +local lavenderAlpha = "b7bdf8" + +local text = "rgb(cad3f5)" +local textAlpha = "cad3f5" + +local subtext1 = "rgb(b8c0e0)" +local subtext1Alpha = "b8c0e0" + +local subtext0 = "rgb(a5adcb)" +local subtext0Alpha = "a5adcb" + +local overlay2 = "rgb(939ab7)" +local overlay2Alpha = "939ab7" + +local overlay1 = "rgb(8087a2)" +local overlay1Alpha = "8087a2" + +local overlay0 = "rgb(6e738d)" +local overlay0Alpha = "6e738d" + +local surface2 = "rgb(5b6078)" +local surface2Alpha = "5b6078" + +local surface1 = "rgb(494d64)" +local surface1Alpha = "494d64" + +local surface0 = "rgb(363a4f)" +local surface0Alpha = "363a4f" + +local base = "rgb(24273a)" +local baseAlpha = "24273a" + +local mantle = "rgb(1e2030)" +local mantleAlpha = "1e2030" + +local crust = "rgb(181926)" +local crustAlpha = 181926 + +-- unscale XWayland + +local terminal = "uwsm app -- ghostty +new-window" +local fileManager = "uwsm app -- thunar" +local menu = 'rofi -show drun -run-command "uwsm app -- {cmd}"' +local notification_daemon = "uwsm app -- swaync -c ~/.config/swaync/config.json" + +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.0 } } }) +hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 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 = 4.79, + bezier = "easeOutQuint", +}) +hl.animation({ + leaf = "windowsIn", + enabled = true, + speed = 4.1, + bezier = "easeOutQuint", + style = "slide", +}) +hl.animation({ + leaf = "windowsOut", + enabled = true, + speed = 1.49, + bezier = "linear", + style = "slide", +}) +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 = "slidefade", +}) +hl.animation({ + leaf = "workspacesIn", + enabled = true, + speed = 1.21, + bezier = "almostLinear", + style = "slidefade", +}) +hl.animation({ + leaf = "workspacesOut", + enabled = true, + speed = 1.94, + bezier = "almostLinear", + style = "slidefade", +}) + +hl.device({ + name = "epic-mouse-v1", + sensitivity = -0.5, +}) + +hl.layer_rule({ + name = "fix-rofi", + match = { + namespace = "rofi", + }, + -- TODO: manual review — unmapped layer rule: "no_anim" +}) + +hl.config({ + xwayland = { + force_zero_scaling = true, + }, + --################## + --## MY PROGRAMS ### + --################## + -- See https://wiki.hyprland.org/Configuring/Keywords/ + -- Set programs that you use + -- $notification_daemon = dunst + --################ + --## AUTOSTART ### + --################ + -- Autostart necessary processes (like notifications daemons, status bars, etc.) + -- Or execute your favorite apps at launch like this: + -- exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP + --############################ + --## ENVIRONMENT VARIABLES ### + --############################ + -- See https://wiki.hyprland.org/Configuring/Environment-variables/ + -- env = XCURSOR_SIZE,24 + -- env = HYPRCURSOR_SIZE,24 + -- done in ../uswm/env and ../uswm/env-hyprland + --#################### + --## LOOK AND FEEL ### + --#################### + -- Refer to https://wiki.hyprland.org/Configuring/Variables/ + -- https://wiki.hyprland.org/Configuring/Variables/#general + general = { + gaps_in = 5, + gaps_out = 8, + border_size = 2, + -- https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col = { + active_border = { + colors = { "rgba(" .. mauveAlpha .. "ff)" }, + angle = 45, + }, + inactive_border = "rgba(" .. overlay0Alpha .. "ff)", + }, + -- Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = false, + -- Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false, + layout = "scrolling", + }, + -- https://wiki.hyprland.org/Configuring/Variables/#decoration + decoration = { + rounding = 10, + rounding_power = 2, + -- Change transparency of focused and unfocused windows + -- active_opacity = 0.88 + active_opacity = 1.0, + -- inactive_opacity = 0.88 + inactive_opacity = 1.0, + shadow = { + enabled = true, + range = 4, + render_power = 3, + color = "rgba(" .. surface0Alpha .. "ff)", + }, + -- https://wiki.hyprland.org/Configuring/Variables/#blur + blur = { + enabled = true, + size = 7, + passes = 2, + xray = true, + vibrancy = 0.1696, + }, + }, + -- https://wiki.hyprland.org/Configuring/Variables/#animations + animations = { + enabled = true, + -- Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + -- slide, slidevert, fade, slidefade, slidefadevert + -- animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + -- animation = windowsOut, 1, 1.49, linear, popin 87% + }, + -- Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ + -- "Smart gaps" / "No gaps when only" + -- uncomment all if you wish to use that. + -- workspace = w[tv1], gapsout:0, gapsin:0 + -- workspace = f[1], gapsout:0, gapsin:0 + -- See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + dwindle = { + -- pseudotile = false, -- Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true, + split_width_multiplier = 1.69, + }, + scrolling = { + fullscreen_on_one_column = true, + }, + -- See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + master = { + new_status = "slave", + allow_small_split = false, + }, + -- https://wiki.hyprland.org/Configuring/Variables/#misc + misc = { + force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :( + font_family = "Manrope ExtraLight Medium, JetBrainsMono Nerd Font, M PLUS 1", + }, + --############ + --## INPUT ### + --############ + -- https://wiki.hyprland.org/Configuring/Variables/#input + input = { + kb_layout = "us", + kb_variant = "", + kb_model = "pc86", + kb_options = "caps:escape_shifted_capslock", + kb_rules = "", + follow_mouse = 1, + sensitivity = 0, -- -1.0 - 1.0, 0 means no modification. + touchpad = { + natural_scroll = false, + }, + }, + -- https://wiki.hyprland.org/Configuring/Variables/#gestures + gestures = { + -- workspace_swipe = false + }, + -- Example per-device config + -- See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more + render = { + -- explicit_sync = true + }, + -- {{{ WORKSPACES - HANDLED IN WAYBAR CONFIG + -- See https://wiki.hyprland.org/Configuring/Window-Rules/ for more + -- workspace = name:,monitor:DP-1 + -- workspace = 2,monitor:DP-1,defaultName: + -- workspace = 2,monitor:DP-1,persistent:false + -- workspace = 3,monitor:DP-1,persistent:false + -- workspace = 4,monitor:DP-1,persistent:false + -- workspace = 5,monitor:DP-1,persistent:false + -- workspace = 6,monitor:DP-3,persistent:false,default:true + -- workspace = 7,monitor:DP-3,persistent:false + -- workspace = 8,monitor:DP-3,persistent:false + -- workspace = 9,monitor:DP-3,persistent:false + -- workspace = 10,monitor:DP-3,persistent:false + -- }}} + -- windowrule = match:class my-window, border_size 10 + debug = { + disable_logs = true, + enable_stdout_logs = false, + }, +}) + +hl.on("hyprland.start", function() + hl.exec_cmd("uwsm app -sb -- hyprpm update -n") + hl.exec_cmd("uwsm app -sb -- hyprpm reload -n") + hl.exec_cmd(notification_daemon) + hl.exec_cmd(terminal) + hl.exec_cmd("uwsm app -sb -S both -t scope -- hyprpm update -n") + hl.exec_cmd("uwsm app -sb -S both -t scope -- hyprpm reload -n") + hl.exec_cmd("uwsm app -sb -t service -- nm-applet") + hl.exec_cmd( + "uwsm app -sb -t service -- waybar -c ~/.config/waybar/catppuccin-macchiato/config.jsonc -s ~/.config/waybar/catppuccin-macchiato/style.css" + ) + hl.exec_cmd("uwsm app -sb -t service -- /usr/lib/polkit-kde-authentication-agent-1") + hl.exec_cmd("uwsm app -sb -t service -- gnome-keyring-daemon --start --components=secrets,ssh,pkcs11") + hl.exec_cmd("uwsm app -sb -t service -- tailscale systray") + hl.exec_cmd("~/.local/bin/aria") +end) diff --git a/.config/hypr/hyprlock.lua b/.config/hypr/hyprlock.lua new file mode 100644 index 0000000..3d55ddb --- /dev/null +++ b/.config/hypr/hyprlock.lua @@ -0,0 +1,63 @@ +-- sample hyprlock.conf +-- for more configuration options, refer https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock +-- +-- rendered text in all widgets supports pango markup (e.g. or tags) +-- ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#general-remarks +-- +-- shortcuts to clear password buffer: ESC, Ctrl+U, Ctrl+Backspace +-- +-- you can get started by copying this config to ~/.config/hypr/hyprlock.conf +-- + +-- Generated by hyprlang2lua. Review TODOs before reloading Hyprland. + +local font = "Manrope ExtraLight" + +-- TODO: manual review — unknown section 'auth {' on line 19 + +hl.curve("linear", { type = "bezier", points = { { 1, 1 }, { 0, 0 } } }) +hl.animation({ + leaf = "fadeIn", + enabled = true, + speed = 5, + bezier = "linear", +}) +hl.animation({ + leaf = "fadeOut", + enabled = true, + speed = 5, + bezier = "linear", +}) +hl.animation({ + leaf = "inputFieldDots", + enabled = true, + speed = 2, + bezier = "linear", +}) + +-- TODO: manual review — unknown section 'background {' on line 36 + +-- TODO: manual review — unknown section 'input-field {' on line 42 +-- uncomment to use a letter instead of a dot to indicate the typed password +-- dots_text_format = * +-- dots_size = 0.4 +-- uncomment to use an input indicator that does not show the password length (similar to swaylock's input indicator) +-- hide_input = true + +-- TODO: manual review — unknown section 'label {' on line 74 + +-- TODO: manual review — unknown section 'label {' on line 86 + +-- TODO: manual review — unknown section 'label {' on line 97 +hl.config({ + general = { + hide_cursor = false, + }, + -- uncomment to enable fingerprint authentication + animations = { + enabled = true, + }, + -- TIME + -- DATE +}) + diff --git a/.config/hypr/hyprpaper.lua b/.config/hypr/hyprpaper.lua new file mode 100644 index 0000000..e69de29 diff --git a/.config/hypr/hyprqt6engine.lua b/.config/hypr/hyprqt6engine.lua new file mode 100644 index 0000000..330ebbb --- /dev/null +++ b/.config/hypr/hyprqt6engine.lua @@ -0,0 +1,4 @@ +-- Generated by hyprlang2lua. Review TODOs before reloading Hyprland. + +-- TODO: manual review — unknown section 'theme {' on line 1 + diff --git a/.config/hypr/hyprsunset.lua b/.config/hypr/hyprsunset.lua new file mode 100644 index 0000000..e16b696 --- /dev/null +++ b/.config/hypr/hyprsunset.lua @@ -0,0 +1,7 @@ +-- Generated by hyprlang2lua. Review TODOs before reloading Hyprland. + +-- TODO: manual review — top-level key 'max-gamma = 100' has no enclosing section + +-- TODO: manual review — unknown section 'profile {' on line 3 + +-- TODO: manual review — unknown section 'profile {' on line 8 diff --git a/.config/hypr/keybindings.lua b/.config/hypr/keybindings.lua new file mode 100644 index 0000000..bb68f05 --- /dev/null +++ b/.config/hypr/keybindings.lua @@ -0,0 +1,209 @@ +-- Set programs that you use +-- Generated by hyprlang2lua. Review TODOs before reloading Hyprland. + +local terminal = "FONTCONFIG_FILE=/home/sudacode/.config/ghostty/ghostty-fonts.conf uwsm app -sa -- ghostty" +local fileManager = "uwsm app -sa -- thunar" +-- $menu = rofi -show drun +-- https://github.com/Vladimir-csp/uwsm#2-service-startup-notification-and-vars-set-by-compositor +-- $menu = rofi -show drun -run-command "uwsm app -- {cmd}" +local menu = "~/.config/rofi/launchers/type-6/launcher.sh 1" +-- See https://wiki.hyprland.org/Configuring/Keywords/ +local mainMod = "ALT" -- Sets "Windows" key as main modifier + +-- Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +hl.bind("SUPER + SUPER_L", hl.dsp.exec_cmd("~/.config/rofi/launchers/type-2/launcher.sh 10")) +hl.bind(mainMod .. " + RETURN", hl.dsp.exec_cmd(terminal)) +hl.bind(mainMod .. " + Q", hl.dsp.window.close()) +hl.bind(mainMod .. " + SHIFT + M", hl.dsp.exec_cmd("uwsm stop")) +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)) +-- bind = $mainMod, P, pseudo, # dwindle +hl.bind(mainMod .. " + SHIFT + p", hl.dsp.exec_cmd("~/.local/bin/hyprland-pin.sh")) +-- bind = $mainMod, t, togglesplit, # dwindle +hl.bind(mainMod .. " + f", hl.dsp.window.fullscreen("")) +hl.bind(mainMod .. " + i", hl.dsp.window.cycle_next("")) + +-- Move focus with mainMod + arrow keys +hl.bind(mainMod .. " + h", hl.dsp.focus({ direction = "left" })) +hl.bind(mainMod .. " + l", hl.dsp.focus({ direction = "right" })) +hl.bind(mainMod .. " + k", hl.dsp.focus({ direction = "up" })) +hl.bind(mainMod .. " + j", hl.dsp.focus({ direction = "down" })) + +hl.bind(mainMod .. " + SHIFT + j", hl.dsp.window.move({ direction = "d" })) +hl.bind(mainMod .. " + SHIFT + k", hl.dsp.window.move({ direction = "u" })) +hl.bind(mainMod .. " + SHIFT + h", hl.dsp.window.move({ direction = "l" })) +hl.bind(mainMod .. " + SHIFT + l", hl.dsp.window.move({ direction = "r" })) +hl.bind(mainMod .. " + SHIFT + c", hl.dsp.window.center()) + +-- Move focus to next monitor +hl.bind("CTRL+ALT + j", hl.dsp.focus({ monitor = "r" })) +hl.bind("CTRL+ALT + k", hl.dsp.focus({ monitor = "l" })) + +-- Switch workspaces with mainMod + [0-9] +hl.bind(mainMod .. " + 1", hl.dsp.focus({ workspace = 1 })) +hl.bind(mainMod .. " + 2", hl.dsp.focus({ workspace = 2 })) +hl.bind(mainMod .. " + 3", hl.dsp.focus({ workspace = 3 })) +hl.bind(mainMod .. " + 4", hl.dsp.focus({ workspace = 4 })) +hl.bind(mainMod .. " + 5", hl.dsp.focus({ workspace = 5 })) +hl.bind(mainMod .. " + 6", hl.dsp.focus({ workspace = 6 })) +hl.bind(mainMod .. " + 7", hl.dsp.focus({ workspace = 7 })) +hl.bind(mainMod .. " + 8", hl.dsp.focus({ workspace = 8 })) +hl.bind(mainMod .. " + 9", hl.dsp.focus({ workspace = 9 })) +hl.bind(mainMod .. " + 0", hl.dsp.focus({ workspace = 10 })) + +-- Move active window to a workspace with mainMod + SHIFT + [0-9] +hl.bind(mainMod .. " + SHIFT + 1", hl.dsp.window.move({ workspace = 1, silent = true })) +hl.bind(mainMod .. " + SHIFT + 2", hl.dsp.window.move({ workspace = 2, silent = true })) +hl.bind(mainMod .. " + SHIFT + 3", hl.dsp.window.move({ workspace = 3, silent = true })) +hl.bind(mainMod .. " + SHIFT + 4", hl.dsp.window.move({ workspace = 4, silent = true })) +hl.bind(mainMod .. " + SHIFT + 5", hl.dsp.window.move({ workspace = 5, silent = true })) +hl.bind(mainMod .. " + SHIFT + 6", hl.dsp.window.move({ workspace = 6, silent = true })) +hl.bind(mainMod .. " + SHIFT + 7", hl.dsp.window.move({ workspace = 7, silent = true })) +hl.bind(mainMod .. " + SHIFT + 8", hl.dsp.window.move({ workspace = 8, silent = true })) +hl.bind(mainMod .. " + SHIFT + 9", hl.dsp.window.move({ workspace = 9, silent = true })) +hl.bind(mainMod .. " + SHIFT + 0", hl.dsp.window.move({ workspace = 10, silent = true })) + +-- Example special workspace (scratchpad) +hl.bind("SUPER + S", hl.dsp.workspace.toggle_special("magic")) +hl.bind("CTRL + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" })) + +-- Scroll through existing workspaces with mainMod + scroll +hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" })) +hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" })) + +-- Move/resize windows with mainMod + LMB/RMB and dragging +hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag()) +hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize()) + +-- Laptop multimedia keys for volume and LCD brightness +hl.bind( + "XF86AudioRaiseVolume", + hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), + { locked = true, repeating = true } +) +hl.bind( + "XF86AudioLowerVolume", + hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), + { locked = true, repeating = true } +) +hl.bind( + "XF86AudioMute", + hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), + { locked = true, repeating = true } +) +hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl s 10%+"), { locked = true, repeating = true }) +hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl s 10%-"), { locked = true, repeating = true }) +hl.bind("F12", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true, repeating = true }) +hl.bind("F11", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true, repeating = true }) +hl.bind("F10", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true, repeating = true }) + +-- Requires playerctl +hl.bind("XF86AudioNext", hl.dsp.exec_cmd("mpc next"), { locked = true }) +hl.bind("XF86AudioPause", hl.dsp.exec_cmd("mpc toggle"), { locked = true }) +hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("mpc toggle"), { locked = true }) +hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("mpc prev"), { locked = true }) +hl.bind("F9", hl.dsp.exec_cmd("playerctl next"), { locked = true }) +hl.bind("F8", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true }) +hl.bind("F7", hl.dsp.exec_cmd("playerctl previous"), { locked = true }) +-- bindl = , XF86AudioStop, exec, mpc stop + +-- rofi +hl.bind(mainMod .. " + SHIFT + v", hl.dsp.exec_cmd("uwsm app -sb -- rofi-rbw")) +-- bind = $mainMod, w, exec, rofi -show window -theme $HOME/.config/rofi/launchers/type-2/style-2.rasi -dpi 96 -theme-str 'window {width: 35%;}' +hl.bind(mainMod .. " + SHIFT + w", hl.dsp.exec_cmd("~/.config/rofi/scripts/rofi-wallpaper.sh")) +hl.bind(mainMod .. " + SHIFT + d", hl.dsp.exec_cmd("~/.config/rofi/scripts/rofi-docs.sh")) +hl.bind("SUPER + SHIFT + j", hl.dsp.exec_cmd("~/.config/rofi/scripts/rofi-jellyfin-dir.sh")) +hl.bind("SUPER + t", hl.dsp.exec_cmd("~/.config/rofi/scripts/rofi-launch-texthooker-steam.sh")) +hl.bind(mainMod .. " + SHIFT + t", hl.dsp.exec_cmd("~/projects/scripts/popup-ai-translator.py")) +hl.bind("SUPER + SHIFT + g", hl.dsp.exec_cmd("~/.config/rofi/scripts/rofi-vn-helper.sh")) +hl.bind(mainMod .. " + SHIFT + i", hl.dsp.exec_cmd("~/.config/rofi/scripts/rofi-image-browser.sh")) + +-- ncmcppp +hl.bind(mainMod .. " + n", hl.dsp.exec_cmd("uwsm app -sb -- ghostty --command=/usr/bin/ncmpcpp")) + +-- notifications +hl.bind(mainMod .. " + SHIFT + n", hl.dsp.exec_cmd("swaync-client -t")) + +-- mpv add +hl.bind("SUPER + m", hl.dsp.exec_cmd("~/.local/bin/mpv-add.sh")) + +hl.bind("SUPER + SHIFT + s", hl.dsp.exec_cmd("slurp | grim -g - - | wl-copy")) +hl.bind("code:107", hl.dsp.exec_cmd("~/.local/bin/screenshot")) +hl.bind("SHIFT + code:107", hl.dsp.exec_cmd("~/.local/bin/screenshot-active-window.sh")) +hl.bind("SUPER + code:107", hl.dsp.exec_cmd("~/.local/bin/screenshot-active-window.sh -s")) +hl.bind("SUPER + o", hl.dsp.exec_cmd("~/.local/bin/ocr.sh")) +hl.bind(mainMod .. " + o", hl.dsp.exec_cmd("~/.local/bin/rofi-open tab")) +-- bind = $mainMod SHIFT, o, exec, ~/.local/bin/rofi-open window + +-- change wallpaper +hl.bind(mainMod .. " + CTRL + n", hl.dsp.exec_cmd("~/.local/bin/change-wallpaper")) + +-- toggle focus between current and last focused window +-- hl.bind("ALT + Tab", hl.dsp.focus({ urgent_or_last = true })) +-- hl.bind("ALT + Tab", hl.dsp.window.cycle_next()) +hl.bind("ALT + Tab", hl.dsp.focus({ last = true })) + +hl.bind("CTRL + F9", hl.dsp.pass({ window = "class:^(com\\.obsproject\\.Studio)$" })) +hl.bind("CTRL + F10", hl.dsp.pass({ window = "class:^(com\\.obsproject\\.Studio)$" })) + +hl.bind("CTRL + SHIFT + D", hl.dsp.exec_cmd("~/.local/bin/dragon")) +hl.bind("CTRL + ALT + F", hl.dsp.exec_cmd("~/.local/bin/favorite-wallpaper")) + +hl.bind(mainMod .. " + z", hl.dsp.exec_cmd("uwsm app -sb -- zen-browser")) + +hl.bind( + mainMod .. " + SHIFT + s", + hl.dsp.exec_cmd( + 'rofi -show ssh -theme "' + .. "~/.config/rofi/launchers/type-2/style-2.rasi\" -terminal -theme-str 'window{width: 25%;} listview {columns: 1; lines: 10;}' ghostty -ssh-command \"ghostty --initial-command='TERM=kitty ssh {host}'\"" + ) +) + +-- reload monitors +-- hl.bind( +-- "CTRL" .. mainMod .. " + SHIFT + R", +-- hl.dsp.exec_cmd("hyprctl dispatch dpms off && sleep 1 && hyprctl dispatch dpms on") +-- ) + +-- Disable keybinds with one master keybind +-- https://wiki.hypr.land/0.49.0/Configuring/Uncommon-tips--tricks/#disabling-keybinds-with-one-master-keybind +-- PAGE DOWN +hl.bind(mainMod .. " + code:117", hl.dsp.submap("clean")) +-- TODO: manual review — wrap the following binds in hl.define_submap("clean", function() ... end). The next 'submap = reset' closes the block. +-- PAGE UP +hl.bind(mainMod .. " + code:112", hl.dsp.submap("reset")) +-- (end of submap block) + +hl.bind("SUPER + l", hl.dsp.exec_cmd("hyprlock")) + +-- ANKI +hl.bind(mainMod .. " + a", hl.dsp.exec_cmd("~/.config/rofi/scripts/rofi-anki-script.sh")) +-- bind = $mainMod SHIFT, a, exec, ~/projects/scripts/screenshot-anki.sh -cdMinecraft + +-- GSM +hl.bind("mouse:275", hl.dsp.exec_cmd("xdotool key alt+w"), { locked = true }) +hl.bind("mouse:276", hl.dsp.exec_cmd("xdotool key alt+grave"), { locked = true }) +hl.bind("ALT + g", hl.dsp.exec_cmd("/opt/mpv-yomitan/mpv-yomitan.AppImage --toggle")) + +hl.bind("ALT + SHIFT + f", hl.dsp.exec_cmd("uwsm app -sb -- flameshot gui")) + +-- F5 +-- bind = ,code:71, exec, ~/projects/scripts/whisper_record_transcribe.py --mode toggle --output type +hl.bind( + "code:71", + hl.dsp.exec_cmd( + "uv run --directory ~/projects/scripts/faster-whisper-transcribe faster-whisper-transcribe --backend ctranslate2 --device cpu --mode toggle --output type" + ) +) + +-- SubMiner +hl.bind("ALT + SHIFT + O", hl.dsp.pass({ window = "class:^(SubMiner)$" })) +hl.bind("ALT + SHIFT + I", hl.dsp.pass({ window = "class:^(SubMiner)$" })) +hl.bind("ALT + SHIFT + C", hl.dsp.pass({ window = "class:^(SubMiner)$" })) + +-- {{{ scrolling +hl.bind(mainMod .. " + comma", hl.dsp.layout("swapcol l")) +hl.bind(mainMod .. " + period", hl.dsp.layout("fit all")) +hl.bind(mainMod .. " + slash", hl.dsp.layout("fit active")) +-- }}} diff --git a/.config/hypr/macchiato.lua b/.config/hypr/macchiato.lua new file mode 100644 index 0000000..4bf8891 --- /dev/null +++ b/.config/hypr/macchiato.lua @@ -0,0 +1,79 @@ +-- Generated by hyprlang2lua. Review TODOs before reloading Hyprland. + +local rosewater = "rgb(f4dbd6)" +local rosewaterAlpha = "f4dbd6" + +local flamingo = "rgb(f0c6c6)" +local flamingoAlpha = "f0c6c6" + +local pink = "rgb(f5bde6)" +local pinkAlpha = "f5bde6" + +local mauve = "rgb(c6a0f6)" +local mauveAlpha = "c6a0f6" + +local red = "rgb(ed8796)" +local redAlpha = "ed8796" + +local maroon = "rgb(ee99a0)" +local maroonAlpha = "ee99a0" + +local peach = "rgb(f5a97f)" +local peachAlpha = "f5a97f" + +local yellow = "rgb(eed49f)" +local yellowAlpha = "eed49f" + +local green = "rgb(a6da95)" +local greenAlpha = "a6da95" + +local teal = "rgb(8bd5ca)" +local tealAlpha = "8bd5ca" + +local sky = "rgb(91d7e3)" +local skyAlpha = "91d7e3" + +local sapphire = "rgb(7dc4e4)" +local sapphireAlpha = "7dc4e4" + +local blue = "rgb(8aadf4)" +local blueAlpha = "8aadf4" + +local lavender = "rgb(b7bdf8)" +local lavenderAlpha = "b7bdf8" + +local text = "rgb(cad3f5)" +local textAlpha = "cad3f5" + +local subtext1 = "rgb(b8c0e0)" +local subtext1Alpha = "b8c0e0" + +local subtext0 = "rgb(a5adcb)" +local subtext0Alpha = "a5adcb" + +local overlay2 = "rgb(939ab7)" +local overlay2Alpha = "939ab7" + +local overlay1 = "rgb(8087a2)" +local overlay1Alpha = "8087a2" + +local overlay0 = "rgb(6e738d)" +local overlay0Alpha = "6e738d" + +local surface2 = "rgb(5b6078)" +local surface2Alpha = "5b6078" + +local surface1 = "rgb(494d64)" +local surface1Alpha = "494d64" + +local surface0 = "rgb(363a4f)" +local surface0Alpha = "363a4f" + +local base = "rgb(24273a)" +local baseAlpha = "24273a" + +local mantle = "rgb(1e2030)" +local mantleAlpha = "1e2030" + +local crust = "rgb(181926)" +local crustAlpha = 181926 diff --git a/.config/hypr/windowrules.lua b/.config/hypr/windowrules.lua new file mode 100644 index 0000000..9101ca6 --- /dev/null +++ b/.config/hypr/windowrules.lua @@ -0,0 +1,389 @@ +-- See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + +-- {{{ Floating windows +-- Generated by hyprlang2lua. Review TODOs before reloading Hyprland. + +hl.window_rule({ + match = { + class = "discord", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "mpv", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "anki", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "steam", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "python", + title = "Import", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "zenity", + title = "Japanese Analysis", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "zenity", + title = "Japanese Assistant", + }, + float = true, +}) + +hl.window_rule({ + match = { + class = "anki", + }, + -- TODO: manual review — unmapped window rule action: "min_size 1600 600" + -- TODO: manual review — unmapped window rule action: "max_size 2222 1234" +}) + +hl.window_rule({ + match = { + class = "ueberzugpp.*", + }, + -- TODO: manual review — unmapped window rule action: "no_focus on" + -- TODO: manual review — unmapped window rule action: "no_follow_mouse 1" + float = true, + -- TODO: manual review — unmapped window rule action: "no_shadow on" + -- TODO: manual review — unmapped window rule action: "no_anim on" +}) + +hl.window_rule({ + match = { + class = "anki", + }, + size = "1920 1080", +}) + +-- windowrule = min_size 1600 600, match:class anki +-- windowrule = max_size 2222 1234, match:class anki +-- }}} + +-- {{{ Workspace assignments +hl.window_rule({ + match = { + class = "Cursor", + }, + workspace = "3 silent", +}) + +hl.window_rule({ + match = { + class = "GameSentenceMiner", + }, + workspace = "5 silent", +}) + +hl.window_rule({ + match = { + class = "com.obsproject.Studio", + }, + workspace = "5 silent", +}) + +hl.window_rule({ + match = { + class = "gamescope", + }, + workspace = "6 silent", +}) + +hl.window_rule({ + match = { + class = "anki", + }, + workspace = "8 silent", +}) + +hl.window_rule({ + match = { + class = "steam", + }, + workspace = "9 silent", +}) + +hl.window_rule({ + match = { + class = "discord", + }, + workspace = "10 silent", +}) + +-- }}} + +-- {{{ Center floating windows +hl.window_rule({ + match = { + float = 1, + class = "discord", + }, + center = true, +}) + +hl.window_rule({ + match = { + float = 1, + class = "anki", + }, + center = true, +}) + +-- }}} + +-- {{{ Opacity rules +-- windowrule = opacity 0.88, match:class .* fullscreen:0 +hl.window_rule({ + match = { + class = "mpv", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "^(remote-viewer)$", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "com.obsproject.Studio", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + title = "(.*)(- YouTube(.*))", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "zen", + title = "(.*)YouTube TV(.*)", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "anki", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + title = "(.*)asbplayer", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "dolphin-emu", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "steam_app_default", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "steam_app.*", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "Rustdesk", + }, + opacity = "1.0 override", +}) + +hl.window_rule({ + match = { + class = "google-chrome", + }, + opacity = "1.0 override", +}) + +-- }}} + +-- {{{ Misc +hl.window_rule({ + match = { + title = "(.*)asbplayer", + }, + -- TODO: manual review — unmapped window rule action: "tile on" +}) + +-- windowrule = size 2118 1182, match:class anki +-- Ignore maximize requests from apps. You'll probably like this. +hl.window_rule({ + match = { + class = ".*", + }, + suppress_event = "maximize", +}) + +-- Fix some dragging issues with XWayland +hl.window_rule({ + match = { + class = "^$", + title = "^$", + xwayland = 1, + float = 1, + fullscreen = 0, + pin = 0, + }, + -- TODO: manual review — unmapped window rule action: "no_focus on" +}) + +-- }}} + +-- {{{ Screen sharing workaround: https://wiki.hyprland.org/Useful-Utilities/Screen-Sharing/#xwayland +hl.window_rule({ + match = { + class = "^(xwaylandvideobridge)$", + }, + opacity = "0.0 override", + -- TODO: manual review — unmapped window rule action: "no_anim on" + -- TODO: manual review — unmapped window rule action: "no_initial_focus on" + -- TODO: manual review — unmapped window rule action: "max_size 1 1" + -- TODO: manual review — unmapped window rule action: "no_blur on" + -- TODO: manual review — unmapped window rule action: "no_focus on" +}) + +-- }}} + +-- {{{ GSM Overlay and LunaTranslator tweaks +hl.window_rule({ + match = { + class = "gsm_overlay", + }, + float = true, + -- TODO: manual review — unmapped window rule action: "border_size 0" + -- TODO: manual review — unmapped window rule action: "xray off" + -- TODO: manual review — unmapped window rule action: "no_shadow on" + -- TODO: manual review — unmapped window rule action: "no_blur on" +}) + +hl.window_rule({ + match = { + title = "LunaTranslator", + }, + opacity = "1.0 override", + -- TODO: manual review — unmapped window rule action: "border_size 0" +}) + +hl.window_rule({ + match = { + class = "gsm_overlay", + }, + -- TODO: manual review — unmapped window rule action: "stay_focused on" +}) + +-- windowrule = fullscreen_state 2, match:class gsm_overlay + +hl.window_rule({ + match = { + class = "SubMiner", + }, + float = true, + -- TODO: manual review — unmapped window rule action: "border_size 0" + -- TODO: manual review — unmapped window rule action: "xray off override" + -- TODO: manual review — unmapped window rule action: "no_shadow on" + -- TODO: manual review — unmapped window rule action: "no_blur on" + -- TODO: manual review — unmapped window rule action: "no_dim on" + -- TODO: manual review — unmapped window rule action: "opaque on" + -- TODO: manual review — unmapped window rule action: "dim_around off" + -- TODO: manual review — unmapped window rule action: "allows_input offf" +}) + +hl.window_rule({ + match = { + class = "steam_app_1277940", + }, + -- TODO: manual review — unmapped window rule action: "border_size 0" +}) + +hl.window_rule({ + match = { + class = "SubMiner", + }, + opacity = "1.0 override", + pin = false, +}) + +-- }}} + +-- {{{ FEH +hl.window_rule({ + match = { + class = "feh", + }, + float = true, + center = true, + -- TODO: manual review — unmapped window rule action: "border_size 0" + -- TODO: manual review — unmapped window rule action: "no_shadow on" + -- TODO: manual review — unmapped window rule action: "no_blur on" + -- TODO: manual review — unmapped window rule action: "no_anim on" +}) + +-- }}} + +hl.window_rule({ + match = { + title = "Picture in picture", + }, + float = true, + pin = true, +}) + +-- TODO: manual review — top-level key 'windowurle = no_vrr on, match:class mpv' has no enclosing section + +-- aibar popup (AI usage widget) +hl.window_rule({ + match = { + title = "aibar", + }, + float = true, + move = "100%-374 50", +}) +