diff --git a/.config/hypr/hyprland.conf b/.config/hypr/__hyprland.conf similarity index 100% rename from .config/hypr/hyprland.conf rename to .config/hypr/__hyprland.conf diff --git a/.config/hypr/apps.lua b/.config/hypr/apps.lua new file mode 100644 index 0000000..e0dfeb5 --- /dev/null +++ b/.config/hypr/apps.lua @@ -0,0 +1,395 @@ +-- Browser types +hl.window_rule({ + name = "chromium-browser-tags", + tag = "+chromium-based-browser", + match = { + class = "((google-)?[cC]hrom(e|ium)|[bB]rave-browser|[mM]icrosoft-edge|Vivaldi-stable|helium)", + }, +}) +hl.window_rule({ + name = "firefox-tags", + tag = "+firefox-based-browser", + match = { + class = "([fF]irefox|zen|librewolf)", + }, +}) + +hl.window_rule({ + name = "chromium-browser-opacity-tags", + tag = "-default-opacity", + match = { + tag = "chromium-based-browser", + }, +}) +hl.window_rule({ + name = "firefox-browser-opacity-tags", + tag = "-default-opacity", + match = { + tag = "firefox-based-browser", + }, +}) + +-- Video apps: remove chromium browser tag so they don't get opacity applied +hl.window_rule({ + name = "video-apps-no-browser-tag", + tag = "-chromium-based-browser", + match = { + class = "(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)", + }, +}) +hl.window_rule({ + name = "video-apps-no-opacity-tag", + tag = "-default-opacity", + match = { + class = "(chrome-youtube.com__-Default|chrome-app.zoom.us__wc_home-Default)", + }, +}) + +-- Force chromium-based browsers into a tile to deal with --app bug +hl.window_rule({ + name = "chromium-tile", + tile = true, + match = { + tag = "chromium-based-browser", + }, +}) + +-- Only a subtle opacity change, but not for video sites +hl.window_rule({ + name = "chromium-browser-subtle-opacity", + opacity = "1.0 0.97", + match = { + tag = "chromium-based-browser", + }, +}) +hl.window_rule({ + name = "firefox-browser-subtle-opacity", + opacity = "1.0 0.97", + match = { + tag = "firefox-based-browser", + }, +}) + +hl.window_rule({ + name = "geforce-now", + idle_inhibit = "fullscreen", + match = { + class = "GeForceNOW", + }, +}) + +-- Remove 1px border around hyprshot screenshots +hl.layer_rule({ + name = "no-anim-for-selection", + match = { namespace = "selection" }, + no_anim = true, +}) + +-- Jetbrains +-- Fix splash screen showing in weird places and prevent annoying focus takeovers +hl.window_rule({ + name = "jetbrains-splash", + tag = "+jetbrains-splash", + center = true, + no_focus = true, + border_size = 0, + match = { + class = "^(jetbrains-.*)$", + title = "^(splash)$", + float = true, + }, +}) + +-- Center popups/find windows +hl.window_rule({ + name = "jetbrains-popups", + center = true, + stay_focused = true, + border_size = 0, + min_size = { "(monitor_w*0.5)", "(monitor_h*0.5)" }, + tag = "+jetbrains", + match = { + class = "^(jetbrains-.*)$", + title = "^()$", + float = true, + }, +}) +-- Disable window flicker when autocomplete or tooltips appear +hl.window_rule({ + name = "jetbrains-tooltip", + no_initial_focus = true, + match = { + class = "^(jetbrains-.*)$", + title = "^(win.*)$", + float = true, + }, +}) +-- Disable mouse focus +hl.window_rule({ + name = "jetbrains-no-follow-mouse", + no_follow_mouse = true, + match = { + class = "^(jetbrains-.*)$", + }, +}) +-- Keep enpass focused +hl.window_rule({ + name = "enpass-assistant", + stay_focused = true, + center = true, + match = { + class = "^(Enpass)$", + title = "^(Enpass Assistant)$", + }, +}) +-- Float LocalSend and fzf file picker +hl.window_rule({ + name = "localsend-float", + float = true, + center = true, + match = { + class = "(localsend|Share|fzf-file-picker)", + }, +}) +-- Picture-in-picture overlays +hl.window_rule({ + name = "pip-overlay", + tag = "+pip", + match = { + title = "(Picture.?in.?[Pp]icture)", + }, +}) +hl.window_rule({ + name = "pip-overlay", + tag = "-default-opacity", + float = true, + pin = true, + size = { 600, 338 }, + keep_aspect_ratio = true, + border_size = 0, + opacity = "1 1", + match = { + tag = "pip", + }, +}) +-- Retroarch +hl.window_rule({ + name = "retroarch-fullscreen", + fullscreen = true, + workspace = 5, + tag = "-default-opacity", + opacity = "1 1", + idle_inhibit = "fullscreen", + match = { + class = "com.libretro.RetroArch", + }, +}) +-- Scratchpad apps +hl.window_rule({ + name = "spotify-scratchpad", + workspace = "special:scratchpad", + match = { + class = "Spotify", + }, +}) +hl.window_rule({ + name = "signal-scratchpad", + workspace = "special:scratchpad", + match = { + class = "signal", + }, +}) +hl.window_rule({ + name = "discord-scratchpad", + workspace = "special:scratchpad", + match = { + class = "^(chrome-discord.com__channels_@me-Default)$", + }, +}) +-- Float Nextcloud +hl.window_rule({ + name = "nextcloud-float", + float = true, + match = { + class = "com.nextcloud.desktopclient.nextcloud", + }, +}) +-- Position drawing +hl.window_rule({ + name = "krita-drawing", + workspace = 5, + tag = "-default-opacity", + opacity = "1 1", + match = { + class = "(krita)", + }, +}) +-- Position TV +hl.window_rule({ + name = "tv-apps", + workspace = 7, + match = { + class = "(chrome-youtube.com__-Default|chrome-netflix.com__-Default)", + }, +}) +-- Float Steam +hl.window_rule({ + name = "steam-float", + float = true, + workspace = 7, + idle_inhibit = "fullscreen", + match = { + class = "steam", + }, +}) +hl.window_rule({ + name = "steam-app-size", + center = true, + size = { 1100, 700 }, + match = { + class = "steam", + title = "Steam", + }, +}) +hl.window_rule({ + name = "steam-opacity", + tag = "-default-opacity", + opacity = "1 1", + match = { + class = "steam.*", + }, +}) +hl.window_rule({ + name = "steam-friends-size", + size = { 460, 800 }, + match = { + class = "steam", + title = "Friends List", + }, +}) +-- Float Lunar Client +hl.window_rule({ + name = "lunar-client-float", + float = true, + workspace = 7, + center = true, + size = { 1100, 700 }, + tag = "-default-opacity", + opacity = "1 1", + idle_inhibit = "fullscreen", + match = { + class = "lunarclient", + }, +}) +-- Floating windows +hl.window_rule({ + name = "floating-window-tags", + tag = "+floating-window", + match = { + class = "(org.station.bluetui|org.station.impala|org.station.wiremix|org.station.btop|org.station.terminal|org.station.bash|org.gnome.NautilusPreviewer|org.gnome.Evince|com.gabm.satty|Station|About|TUI.float|imv|mpv)", + }, +}) +hl.window_rule({ + name = "floating-dialog-tags", + tag = "+floating-window", + match = { + class = "(xdg-desktop-portal-gtk|sublime_text|DesktopEditors|org.gnome.Nautilus)", + title = "^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)", + }, +}) +hl.window_rule({ + name = "floating-window-tags", + tag = "+floating-window", + float = true, + center = true, + size = { 875, 600 }, + match = { + tag = "floating-window", + }, +}) +-- Calculator float +hl.window_rule({ + name = "calculator-float", + float = true, + match = { + class = "org.gnome.Calculator", + }, +}) +-- Fullscreen screensaver +hl.window_rule({ + name = "screensaver-fullscreen", + fullscreen = true, + float = true, + animation = "slide", + match = { + class = "org.station.screensaver", + }, +}) +-- No transparency on media windows +hl.window_rule({ + name = "media-no-opacity", + tag = "-default-opacity", + opacity = "1 1", + match = { + class = "^(zoom|vlc|mpv|org.kde.kdenlive|com.obsproject.Studio|com.github.PintaProject.Pinta|imv|org.gnome.NautilusPreviewer)$", + }, +}) +-- Popped window rounding +hl.window_rule({ + name = "popped-window-rounding", + rounding = 8, + match = { + tag = "pop", + }, +}) +-- Prevent idle while open +hl.window_rule({ + name = "idle-inhibit-apps", + idle_inhibit = "always", + match = { + tag = "noidle", + }, +}) +-- Prevent Telegram from stealing focus on new messages +hl.window_rule({ + name = "telegram-no-focus-steal", + focus_on_activate = false, + match = { + class = "org.telegram.desktop", + }, +}) +-- Define terminal tag to style them uniformly +hl.window_rule({ + name = "terminal-tags", + tag = "+terminal", + match = { + class = "(Alacritty|kitty|com.mitchellh.ghostty)", + }, +}) +hl.window_rule({ + name = "terminal-opacity-tags", + tag = "-default-opacity", + opacity = "0.97 0.9", + match = { + tag = "terminal", + }, +}) +-- Application-specific animation +hl.layer_rule({ + name = "walker-no-anim", + no_anim = true, + match = { namespace = "walker" }, +}) +-- Webcam overlay for screen recording +hl.window_rule({ + name = "webcam-overlay", + float = true, + pin = true, + no_initial_focus = true, + no_dim = true, + size = { 320, 180 }, + position = { "(monitor_w-360)", "(monitor_h-220)" }, + match = { + title = "WebcamOverlay", + }, +}) diff --git a/.config/hypr/bindings.lua b/.config/hypr/bindings.lua index 6746817..1445cf1 100644 --- a/.config/hypr/bindings.lua +++ b/.config/hypr/bindings.lua @@ -141,6 +141,10 @@ hl.bind("SUPER + H", hl.dsp.focus({ direction = "left" }), { description = "Move hl.bind("SUPER + L", hl.dsp.focus({ description = "right" }), { description = "Move window focus right" }) hl.bind("SUPER + K", hl.dsp.focus({ direction = "up" }), { description = "Move window focus up" }) hl.bind("SUPER + J", hl.dsp.focus({ direction = "down" }), { description = "Move window focus down" }) +hl.bind("SUPER + SHIFT + H", hl.dsp.window.move({ direction = "left" }), { description = "Move window left" }) +hl.bind("SUPER + SHIFT + L", hl.dsp.window.move({ direction = "right" }), { description = "Move window right" }) +hl.bind("SUPER + SHIFT + K", hl.dsp.window.move({ direction = "up" }), { description = "Move window up" }) +hl.bind("SUPER + SHIFT + J", hl.dsp.window.move({ direction = "down" }), { description = "Move window down" }) -- Control scratchpad hl.bind("SUPER + S", hl.dsp.workspace.toggle_special("scratchpad"), { description = "Toggle scratchpad" }) @@ -329,7 +333,6 @@ hl.bind( hl.bind("SUPER + SHIFT + SLASH", hl.dsp.exec_cmd("Enpass showassistant"), { description = "Passwords" }) hl.bind("SUPER + SHIFT + E", hl.dsp.exec_cmd("station-launch-or-focus mailspring"), { description = "Email" }) --- If your web app url contains #, type it as ## to prevent hyprland treating it as a comment hl.bind( "SUPER + SHIFT + A", hl.dsp.exec_cmd('station-launch-webapp "https://gemini.google.com/app"'), diff --git a/.config/hypr/envs.lua b/.config/hypr/envs.lua new file mode 100644 index 0000000..7ac2467 --- /dev/null +++ b/.config/hypr/envs.lua @@ -0,0 +1,33 @@ +-- Cursor size +hl.env("XCURSOR_SIZE", "24") +hl.env("HYPRCURSOR_SIZE", "24") + +-- Force all apps to use Wayland +hl.env("GDK_BACKEND", "wayland,x11,*") +hl.env("QT_QPA_PLATFORM", "wayland;xcb") +hl.env("QT_STYLE_OVERRIDE", "kvantum") +hl.env("SDL_VIDEODRIVER", "wayland,x11") +hl.env("MOZ_ENABLE_WAYLAND", "1") +hl.env("ELECTRON_OZONE_PLATFORM_HINT", "wayland") +hl.env("OZONE_PLATFORM", "wayland") +hl.env("XDG_SESSION_TYPE", "wayland") + +-- Allow better support for screen sharing (Google Meet, Discord, etc) +hl.env("XDG_CURRENT_DESKTOP", "Hyprland") +hl.env("XDG_SESSION_DESKTOP", "Hyprland") + +hl.config({ + xwayland = { + force_zero_scaling = true, + }, +}) + +-- Use XCompose file +hl.env("XCOMPOSEFILE", "~/.config/xcompose") + +-- Don't show update on first launch +hl.config({ + ecosystem = { + no_update_news = true, + }, +}) diff --git a/.config/hypr/hyprland.lua b/.config/hypr/hyprland.lua index c726328..0b35ed7 100644 --- a/.config/hypr/hyprland.lua +++ b/.config/hypr/hyprland.lua @@ -1,8 +1,8 @@ require("autostart") require("bindings") --- require("envs") --- require("looknfeel") --- require("input") --- require("windows") --- require("monitors") --- require("workspaces") +require("envs") +require("looknfeel") +require("input") +require("windows") +require("monitors") +require("workspaces") diff --git a/.config/hypr/input.lua b/.config/hypr/input.lua new file mode 100644 index 0000000..f492140 --- /dev/null +++ b/.config/hypr/input.lua @@ -0,0 +1,88 @@ +-- https://wiki.hyprland.org/Configuring/Variables/#input +hl.config({ + input = { + -- Use multiple keyboard layouts and switch between them with Left Alt + Right Alt + kb_layout = "gb,ro", + -- Use a specific keyboard variant if needed (e.g. intl for international keyboards) + -- kb_variant = "intl", + -- kb_model = + kb_options = "compose:caps", + -- kb_rules = + + -- Change speed of keyboard repeat + repeat_rate = 40, + repeat_delay = 600, + + -- Start with numlock on by default + numlock_by_default = true, + + follow_mouse = 1, + + -- Increase sensitivity for mouse/trackpad (default: 0) + sensitivity = 0, -- -1.0 - 1.0, 0 means no modification. + + -- Turn off mouse acceleration (default: false) + -- force_no_accel = true, + + -- Use natural (inverse) scrolling + -- natural_scroll = true, + + -- Use two-finger clicks for right-click instead of lower-right corner + -- clickfinger_behavior = true, + + -- Control the speed of your scrolling + scroll_factor = 0.4, + + -- Enable the touchpad while typing + -- disable_while_typing = false, + + -- Left-click-and-drag with three fingers + -- drag_3fg = 1, + + touchpad = { + -- Use natural (inverse) scrolling + natural_scroll = false, + + -- Use two-finger clicks for right-click instead of lower-right corner + -- clickfinger_behavior = true, + + -- Control the speed of your scrolling + scroll_factor = 0.4, + + -- Enable the touchpad while typing + -- disable_while_typing = false, + + -- Left-click-and-drag with three fingers + -- drag_3fg = 1, + }, + }, + + misc = { + key_press_enables_dpms = true, -- key press will trigger wake + mouse_move_enables_dpms = true, -- mouse move will trigger wake + }, +}) + +-- Scroll nicely in the terminal +hl.window_rule({ + name = "Scroll nicely in the terminal", + match = { + class = "(Alacritty|kitty)", + }, + scroll_touchpad = 1.5, +}) +hl.window_rule({ + name = "Scroll nicely in the terminal", + match = { + class = "com.mitchellh.ghostty", + }, + scroll_touchpad = 0.2, +}) + +-- Enable touchpad gestures for changing workspaces +-- See https://wiki.hyprland.org/Configuring/Gestures/ +-- hl.gesture({ +-- fingers = 3, +-- direction = "horizontal", +-- action = "workspace", +-- }) diff --git a/.config/hypr/looknfeel.lua b/.config/hypr/looknfeel.lua new file mode 100644 index 0000000..fcc43ba --- /dev/null +++ b/.config/hypr/looknfeel.lua @@ -0,0 +1,169 @@ +-- Variables + +local colors = dofile(os.getenv("HOME") .. "/.cache/wal/colors.lua") + +local activeBorderColor = colors.color14 +local inactiveBorderColor = colors.background + +hl.config({ + -- https://wiki.hyprland.org/Configuring/Variables/#general + general = { + gaps_in = 5, + gaps_out = 10, + + border_size = 2, + + -- https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col = { + active_border = activeBorderColor, + inactive_border = inactiveBorderColor, + }, + + -- 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, # Change to niri-like side-scrolling layout + layout = dwindle, + }, + + -- https://wiki.hyprland.org/Configuring/Variables/#decoration + decoration = { + -- rounding = 8 # Use round window corners + rounding = 0, + + -- Dim unfocused windows (0.0 = no dim, 1.0 = fully dimmed) + -- dim_inactive = true, + -- dim_strength = 0.15, + + shadow = { + enabled = true, + range = 2, + render_power = 3, + color = "rgba(1a1a1aee)", + }, + + -- https://wiki.hyprland.org/Configuring/Variables/#blur + blur = { + enabled = true, + size = 2, + passes = 2, + special = true, + brightness = 0.60, + contrast = 0.75, + }, + }, + -- https://wiki.hypr.land/Configuring/Variables/#group + group = { + col = { + border_active = activeBorderColor, + border_inactive = inactiveBorderColor, + -- border_locked_active = -1, + -- border_locked_inactive = -1, + }, + + groupbar = { + font_size = 12, + font_family = "monospace", + font_weight_active = "ultraheavy", + font_weight_inactive = "normal", + + indicator_height = 0, + indicator_gap = 5, + height = 22, + gaps_in = 5, + gaps_out = 0, + + text_color = "rgb(ffffff)", + text_color_inactive = "rgba(ffffff90)", + col = { + active = "rgba(00000040)", + inactive = "rgba(00000020)", + }, + + gradients = true, + gradient_rounding = 0, + gradient_round_only_edges = false, + }, + }, + -- https://wiki.hyprland.org/Configuring/Variables/#animations + animations = { + -- enabled = no # Disable all animations + enabled = true, + }, + -- 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 + force_split = 2, -- Always split on the right + }, + + -- See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + master = { + new_status = "master", + }, + + -- https://wiki.hyprland.org/Configuring/Variables/#misc + misc = { + disable_hyprland_logo = true, + disable_splash_rendering = true, + focus_on_activate = true, + anr_missed_pings = 3, + on_focus_under_fullscreen = 1, + disable_watchdog_warning = true, + }, + + -- https://wiki.hypr.land/Configuring/Variables/#cursor + cursor = { + hide_on_key_press = true, + warp_on_change_workspace = 1, + }, + + -- Auto toggle scratchpad on switching workspace from scratchpad + binds = { + hide_special_on_workspace_change = true, + }, + + -- https://wiki.hypr.land/Configuring/Variables/#layout + layout = { + -- Avoid overly wide single-window layouts on wide screens + -- single_window_aspect_ratio = 1 1, + }, +}) + +-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/ +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 } } }) + +-- Default springs +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" }) + +-- Style Gum confirm to match terminal theme +hl.env("GUM_CONFIRM_PROMPT_FOREGROUND", "6") -- Cyan +hl.env("GUM_CONFIRM_SELECTED_FOREGROUND", "0") -- Black +hl.env("GUM_CONFIRM_SELECTED_BACKGROUND", "2") -- Green +hl.env("GUM_CONFIRM_UNSELECTED_FOREGROUND", "7") -- White +hl.env("GUM_CONFIRM_UNSELECTED_BACKGROUND", "8") -- Dark grey diff --git a/.config/hypr/monitors.lua b/.config/hypr/monitors.lua new file mode 100644 index 0000000..5f185c8 --- /dev/null +++ b/.config/hypr/monitors.lua @@ -0,0 +1,55 @@ +-- See https://wiki.hyprland.org/Configuring/Monitors/ +-- List current monitors and resolutions possible: hyprctl monitors +-- Format: monitor = [port], resolution, position, scale + +-- Optimized for retina-class 2x displays, like 13" 2.8K, 27" 5K, 32" 6K. +-- hl.monitor({ +-- output = "eDP-1", +-- mode = "3840x2160", +-- position = "0x0", +-- scale = 2, +-- }) +hl.monitor({ + output = "desc:Samsung Electric Company LU28R55 HNMN500475", + mode = "3840x2160", + position = "auto-left", + scale = 1.5, +}) +hl.monitor({ + output = "desc:Samsung Electric Company LU28R55 HNMN500462", + mode = "3840x2160", + position = "auto-right", + scale = 1.5, +}) +-- hl.monitor({ +-- output = "HDMI-A-1", +-- mode = "preferred", +-- position = "auto", +-- scale = "auto", +-- }) + +-- Good compromise for 27" or 32" 4K monitors (but fractional!) +-- hl.env("GDK_SCALE", 1.75) +-- hl.monitor({ +-- mode = "preferred", +-- position = "auto", +-- scale = 1.6, +-- }) + +-- Straight 1x setup for low-resolution displays like 1080p or 1440p +-- Or for ultrawide monitors like 34" 3440x1440 or 49" 5120x1440 +-- hl.env("GDK_SCALE", 1) +-- hl.monitor({ +-- mode = "preferred", +-- position = "auto", +-- scale = 1, +-- }) + +-- Portrait/rotated secondary monitor (transform: 1 = 90°, 3 = 270°) +-- hl.monitor({ +-- output = "DP-2", +-- mode = "preferred", +-- position = "auto", +-- scale = 1, +-- transform = 1, +-- }) diff --git a/.config/hypr/windows.lua b/.config/hypr/windows.lua new file mode 100644 index 0000000..051a0b0 --- /dev/null +++ b/.config/hypr/windows.lua @@ -0,0 +1,38 @@ +-- See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +-- Hyprland 0.53+ syntax +hl.window_rule({ + name = "suppress-maximise-events", + match = { class = ".*" }, + supress_event = "maximize", +}) + +-- Tag all windows for default opacity (apps can override with -default-opacity tag) +hl.window_rule({ + name = "default-opacity", + tag = "+default-opacity", + match = { class = ".*" }, +}) + +-- Fix some dragging issues with XWayland +hl.window_rule({ + name = "xwayland-dragging", + match = { + class = "^$", + title = "^$", + xwayland = true, + float = true, + fullscreen = false, + pin = false, + }, + no_focus = true, +}) + +-- App-specific tweaks (may remove default-opacity tag) +require("apps") + +-- Apply default opacity after apps have had a chance to opt out +hl.window_rule({ + name = "apply-opacity", + match = { tag = "default-opacity" }, + opacity = "0.97, 0.9", +}) diff --git a/.config/hypr/workspaces.lua b/.config/hypr/workspaces.lua new file mode 100644 index 0000000..946b634 --- /dev/null +++ b/.config/hypr/workspaces.lua @@ -0,0 +1,78 @@ +hl.workspace_rule({ + workspace = 1, + monitor = "DP-1", +}) +hl.workspace_rule({ + workspace = 2, + monitor = "DP-2", +}) +hl.workspace_rule({ + workspace = 3, + monitor = "DP-1", +}) +hl.workspace_rule({ + workspace = 4, + monitor = "DP-2", +}) +hl.workspace_rule({ + workspace = 5, + monitor = "DP-1", +}) +hl.workspace_rule({ + workspace = 6, + monitor = "DP-2", +}) +hl.workspace_rule({ + workspace = 7, + monitor = "DP-1", +}) +hl.workspace_rule({ + workspace = 8, + monitor = "DP-2", +}) +hl.workspace_rule({ + workspace = 9, + monitor = "DP-1", +}) +hl.workspace_rule({ + workspace = 10, + monitor = "DP-2", +}) + +hl.bind("SUPER + code:10", hl.dsp.focus({ workspace = 2 }), { description = "Switch to Home" }) +hl.bind("SUPER + code:10", hl.dsp.focus({ workspace = 1 }), { description = "Switch to Home" }) +hl.bind("SUPER + code:11", hl.dsp.focus({ workspace = 4 }), { description = "Switch to Dev" }) +hl.bind("SUPER + code:11", hl.dsp.focus({ workspace = 3 }), { description = "Switch to Dev" }) +hl.bind("SUPER + code:12", hl.dsp.focus({ workspace = 6 }), { description = "Switch to Art" }) +hl.bind("SUPER + code:12", hl.dsp.focus({ workspace = 5 }), { description = "Switch to Art" }) +hl.bind("SUPER + code:13", hl.dsp.focus({ workspace = 8 }), { description = "Switch to Gaming" }) +hl.bind("SUPER + code:13", hl.dsp.focus({ workspace = 7 }), { description = "Switch to Gaming" }) +hl.bind("SUPER + code:14", hl.dsp.focus({ workspace = 10 }), { description = "Switch to Writing" }) +hl.bind("SUPER + code:14", hl.dsp.focus({ workspace = 9 }), { description = "Switch to Writing" }) + +-- Move active window to a workspace with SUPER + SHIFT + [1-9; 0] +hl.bind( + "SUPER + SHIFT + code:10", + hl.dsp.window.move({ workspace = 1 }), + { description = "Move window to workspace 1" } +) +hl.bind( + "SUPER + SHIFT + code:11", + hl.dsp.window.move({ workspace = 2 }), + { description = "Move window to workspace 2" } +) +hl.bind( + "SUPER + SHIFT + code:12", + hl.dsp.window.move({ workspace = 3 }), + { description = "Move window to workspace 3" } +) +hl.bind( + "SUPER + SHIFT + code:13", + hl.dsp.window.move({ workspace = 4 }), + { description = "Move window to workspace 4" } +) +hl.bind( + "SUPER + SHIFT + code:14", + hl.dsp.window.move({ workspace = 5 }), + { description = "Move window to workspace 5" } +)