Migrated hyprland config to lua

This commit is contained in:
Gu://em_ 2026-08-04 11:15:48 +02:00
parent ddaad92455
commit 8587f9d2e0
9 changed files with 716 additions and 0 deletions

View file

@ -0,0 +1,337 @@
-- Refer to https://wiki.hyprland.org/Configuring/Variables/
local colors = require("config/colors")
-- https://wiki.hyprland.org/Configuring/Variables/#general
hl.config({
general = {
gaps_in = 1,
gaps_out = 1,
border_size = 1,
-- https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
-- Resizing windows by clicking and dragging on borders and gaps
resize_on_border = true,
-- Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = false,
layout = "dwindle",
col = {
active_border = active_color,
inactive_border = inactive_color,
},
},
})
-- https://wiki.hyprland.org/Configuring/Variables/#decoration
hl.config({
decoration = {
rounding = 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 = 6,
passes = 4,
vibrancy = 0.1696,
},
},
})
-- Layer rules
hl.layer_rule({
match = {
namespace = "^(swaync-control-center)$",
},
blur = true,
ignore_alpha = 0.2,
animation = "slide right",
dim_around = true,
})
hl.layer_rule({
match = {
namespace = "^(rofi)$",
},
blur = false,
animation = "popin 90%",
})
hl.layer_rule({
match = {
namespace = "^(waybar)$",
},
blur = false,
animation = "slide up",
})
hl.layer_rule({
match = {
namespace = "^(selection)$",
},
blur = false,
animation = "fade",
})
hl.layer_rule({
match = {
namespace = "^(hyprpicker)$",
},
blur = false,
animation = "fade",
})
-------------------
---- ANIMATIONS ---
-------------------
hl.config({
animations = {
enabled = true,
},
})
-- Bezier curves
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}, { 0, 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.curve( "easeInOutExpo", { type = "bezier", points = { {0.87, 0}, { 0.13, 1} } })
hl.animation({ leaf="global", enabled=true, speed=10, bezier="default" })
hl.animation({ leaf="border", enabled=true, speed=4, bezier="easeOutQuint" })
hl.animation({ leaf="windows", enabled=true, speed=3.5, bezier="easeOutQuint" })
hl.animation({ leaf="windowsIn", enabled=true, speed=3.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="easeOutQuint" })
hl.animation({ leaf="fadeOut", enabled=true, speed=1.46, bezier="easeOutQuint" })
hl.animation({ leaf="fade", enabled=true, speed=3.03, bezier="easeOutQuint" })
hl.animation({ leaf="layers", enabled=true, speed=3, bezier="easeOutQuint" })
hl.animation({ leaf="layersIn", enabled=true, speed=2.4, bezier="easeOutQuint", style="fade" })
hl.animation({ leaf="layersOut", enabled=true, speed=2.4, bezier="easeOutQuint", style="fade" })
hl.animation({ leaf="fadeLayersIn", enabled=true, speed=2, bezier="easeOutQuint" })
hl.animation({ leaf="fadeLayersOut", enabled=true, speed=2, bezier="easeOutQuint" })
hl.animation({ leaf="workspaces", enabled=true, speed=2.8, bezier="easeOutQuint", style="slidefadevert" })
hl.animation({ leaf="workspacesIn", enabled=true, speed=2.6, bezier="easeOutQuint", style="slide" })
hl.animation({ leaf="workspacesOut", enabled=true, speed=2.6, bezier="easeOutQuint", style="slide" })
-- 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
hl.config({
dwindle = {
preserve_split = true,
-- You probably want this
},
})
-- See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
hl.config({
master = {
new_status = "master",
},
})
-- https://wiki.hyprland.org/Configuring/Variables/#misc
hl.config({
misc = {
force_default_wallpaper = 0, -- Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = true, -- If true disables the random hyprland logo / anime girl background. :(
disable_splash_rendering = true, -- Disable default wallpapers rendering
},
})
-------------------------------
---- WINDOWS AND WORKSPACES ---
-------------------------------
-- See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
-- See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
-- Ignore maximize requests from apps. You'll probably like this.
hl.window_rule({
name = "suppress-maximize-events",
match = { class = ".*" },
suppress_event = "maximize",
})
-- Fix some dragging issues with XWayland
hl.window_rule({
-- Fix some dragging issues with XWayland
name = "fix-xwayland-drags",
match = {
class = "^$",
title = "^$",
xwayland = true,
float = true,
fullscreen = false,
pin = false,
},
no_focus = true,
})
-- Albert
hl.window_rule({
name = "albert",
match = {
class = "^(albert)$",
},
border_size = 0,
no_blur = true,
no_shadow = true,
float = true,
stay_focused = true,
no_dim = true,
})
-- Prism Launcher
hl.window_rule({
name = "prismlauncher-all",
match = {
class = "(org.prismlauncher.PrismLauncher)",
},
pseudo = true,
})
hl.window_rule({
name = "prismlauncher-main",
match = {
class = "(org.prismlauncher.PrismLauncher)",
title = "^(Prism Launcher.*)$",
},
size = { "(monitor_w*0.65)", "(monitor_h*0.7)" },
})
-- Nautilus
hl.window_rule({
name = "nautilus-main",
match = {
class = "(org.gnome.Nautilus)",
},
pseudo = true,
size = { "(monitor_w*0.65)", "(monitor_h*0.7)" },
})
-- GTK file picker
hl.window_rule({
name = "gtk-file-picker",
match = {
class = "(xdg-desktop-portal-gtk)",
},
float = true,
size = { "(monitor_w*0.65)", "(monitor_h*0.7)" },
})
-- Vivado
--# Loading screen
hl.window_rule({
name = "vivado-loading-screen",
match = {
class = "(ui-PlanAhead)",
},
float = true,
center = true,
})
hl.window_rule({
name = "vivado-loading-screen-2",
match = {
class = "(ui-PlanAhead) title:^(win0)$",
},
size = { 397, 295 },
})
--# Main window
hl.window_rule({
name = "vivado-main",
match = {
class = "(Vivado)",
},
tile = true,
})
-- Kdenlive
hl.window_rule({
name = "kdenlive-all",
match = {
class = "(org.kde.kdenlive)",
},
pseudo = true,
})
hl.window_rule({
name = "kdenlive-welcome",
match = {
class = "(org.kde.kdenlive)",
},
size = { "(512)", "(544)" },
})
-- Gnome characters
hl.window_rule({
name = "gnome-characters",
match = {
class = "(org.gnome.Characters)",
},
float = true,
size = { "(849)", "(566)" },
})
-- Legacy disabled code
-- Mullvad VPN
-- hl.window_rule({
-- name = "mullvad-vpn",
-- float = "on",
-- size = (320) (568),
-- # move = "{ (monitor_w - window_w - 4), (monitor_h - window_h - 4) }",
-- match:class = (Mullvad VPN),
-- })
-- TODO Automatically fullscreen single apps
-- - Seems impossible for now (try mixing with workspace rules)
-- Default size for floating windows
--# TODO
--windowrulev2 = size 100 100,floating:1
-- Increase gaps for single apps
--# Usless since I changed the default gap but may be useful if you decide to reset it to 0
--workspace=w[t1], gapsout:2