Hyprland
Hyprland - тайловый оконный менеджер, который отличается встроенным набором из настроек внешнего вида (анимации, скругления, размытие и прочее никому не нужное =) ). Красивый, современный, быстрый WM.
Конфигурационный файл:
-- Generated by hyprconf2lua v1.4.0
-- https://github.com/Prateek-squadron/hyprconf2lua
-- Manual review may be needed for complex directives
---@module 'hl'
-- импортирую файл с правилами окон, в какой-то момент я понял,
-- что мне так удобнее
-- source = ~/.config/hypr/windowrule.conf -> requires manual conversion
-- local windowrule = require("windowrule")
-- TODO: convert ~/.config/hypr/windowrule.conf to .lua and use require()
--###############
--## Монитор ###
--###############
-- Тут я установил только разрешение
hl.monitor({
output = "eDP-1",
mode = "1920x1200@60",
position = "0x0",
scale = 1,
})
--#####################################
--## Переменные, хранящие приложения###
--#####################################
-- Set programs that you use
local terminal = "kitty"
local fileManager = "nautilus"
local menu = "~/.config/rofi/launchers/type-1/launcher.sh"
--########################################
--## Приложения, запускаемые с системой###
--########################################
-- запускается для fingerprint (отпечаток)
--###########################
--## Переменные окружения ###
--###########################
-- тут я ничего не трогал
hl.env("XCURSOR_SIZE", 24)
hl.env("HYPRCURSOR_SIZE", 24)
--##################
--## Внешний вид ###
--##################
hl.config({
general = {
-- внутренние и внешние отступы
gaps_in = 2,
gaps_out = 4,
-- размер рамки вокруг активного окна
border_size = 1,
-- рамки для активных и неактивных окон
-- не трогал
resize_on_border = false,
allow_tearing = false,
layout = "dwindle",
col = {
active_border = "rgba(d8dee999)",
inactive_border = "rgba(2e343de6)",
},
},
})
hl.config({
decoration = {
-- скругления окон
rounding = 10,
-- прозрачность активных и неактивных окон
active_opacity = 0.98,
inactive_opacity = 0.96,
-- тени
shadow = {
enabled = true,
range = 4,
render_power = 3,
color = "rgba(1a1a1aee)",
},
-- размытие
blur = {
enabled = true,
size = 3,
passes = 1,
},
},
})
-- анимации
hl.config({
animations = {
enabled = 1 },
})
-- не трогал
hl.config({
dwindle = {
preserve_split = true,
-- You probably want this
},
})
hl.config({
master = {
new_status = "master",
},
})
hl.config({
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. :(
},
})
--#######################
--## Устройства ввода ###
--#######################
hl.config({
input = {
-- настройки клавиатуры (раскладка)
kb_layout = "us", "ru",
kb_variant = "",
kb_model = "",
kb_options = "grp:alt_shift_toggle",
kb_rules = "",
-- настройки мышки
follow_mouse = 1,
sensitivity = 0,
-- -1.0 - 1.0, 0 means no modification.
-- тачпад
touchpad = {
natural_scroll = false,
},
},
})
-- не трогал
hl.config({
gestures = {
gesture = { 3, "horizontal", "workspace" },
},
})
hl.device({
name = "epic-mouse-v1",
sensitivity = -0.5,
})
--#########################
--## Комбинации клавишь ###
--########################
local mainMod = "SUPER"
-- клавиша для использования комбинаций (win)
hl.bind(mainMod .. " + " .. "F", hl.dsp.exec_cmd("hyprctl keyword device[elan06fa:00-04f3:327e-touchpad]:enabled false"))
hl.bind(mainMod .. " + " .. "N", hl.dsp.exec_cmd("hyprctl keyword device[elan06fa:00-04f3:327e-touchpad]:enabled true"))
hl.bind(mainMod .. " + " .. "Q", hl.dsp.exec_cmd("kitty"))
hl.bind(mainMod .. " + " .. "C", hl.dsp.window.close())
hl.bind(mainMod .. " + " .. "M", hl.dsp.exit())
hl.bind(mainMod .. " + " .. "E", hl.dsp.exec_cmd("nautilus"))
hl.bind(mainMod .. " + " .. "V", hl.dsp.window.float())
hl.bind(mainMod .. " + " .. "D", hl.dsp.exec_cmd("~/.config/rofi/launchers/type-1/launcher.sh"))
hl.bind(mainMod .. " + " .. "P", hl.dsp.window.pseudo())
-- dwindle
hl.bind(mainMod .. " + " .. "J", hl.dsp.layout("togglesplit"))
-- dwindle
-- смена фокуса окон на рабочем пространстве
hl.bind(mainMod .. " + " .. "left", hl.dsp.focus({ direction = "left" }))
hl.bind(mainMod .. " + " .. "right", hl.dsp.focus({ direction = "right" }))
hl.bind(mainMod .. " + " .. "up", hl.dsp.focus({ direction = "up" }))
hl.bind(mainMod .. " + " .. "down", hl.dsp.focus({ direction = "down" }))
-- смена рабочих пространств
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 }))
-- перемешение окон между рабочими пространствами
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 1, hl.dsp.window.move({ workspace = 1 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 2, hl.dsp.window.move({ workspace = 2 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 3, hl.dsp.window.move({ workspace = 3 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 4, hl.dsp.window.move({ workspace = 4 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 5, hl.dsp.window.move({ workspace = 5 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 6, hl.dsp.window.move({ workspace = 6 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 7, hl.dsp.window.move({ workspace = 7 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 8, hl.dsp.window.move({ workspace = 8 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 9, hl.dsp.window.move({ workspace = 9 }))
hl.bind(mainMod .. " + " .. "SHIFT" .. " + " .. 0, hl.dsp.window.move({ workspace = 10 }))
-- режим изменения размеров окон (добавил сам из интернета)
-- без этого окна менять без мышки никак
hl.bind("SUPER" .. " + " .. "R", hl.dsp.submap("resize"))
-- (win + r) войти в режим / Esc выйти
hl.define_submap("resize", function()
-- TODO: manual review (unknown dispatcher: resizeactive)
-- hl.bind(" + right", hl.dsp.resizeactive("10 0"))
-- TODO: manual review (unknown dispatcher: resizeactive)
-- hl.bind(" + left", hl.dsp.resizeactive("-10 0"))
-- TODO: manual review (unknown dispatcher: resizeactive)
-- hl.bind(" + up", hl.dsp.resizeactive("0 -10"))
-- TODO: manual review (unknown dispatcher: resizeactive)
-- hl.bind(" + down", hl.dsp.resizeactive("0 10"))
hl.bind("escape", hl.dsp.submap("reset"))
end)
-- перемещение окон внутри рабочего пространства
-- так же добавил из интернета
hl.bind(mainMod .. " + SHIFT + left", hl.dsp.window.move({ direction = "l" }))
hl.bind(mainMod .. " + SHIFT + right", hl.dsp.window.move({ direction = "r" }))
hl.bind(mainMod .. " + SHIFT + up", hl.dsp.window.move({ direction = "u" }))
hl.bind(mainMod .. " + SHIFT + down", hl.dsp.window.move({ direction = "d" }))
-- пользовательские комбинации клавиш
hl.bind("ALT" .. " + " .. "A", hl.dsp.exec_cmd("/home/tehop/.scripts/PWD/PWDAdmShow.sh"), { locked = true })
hl.bind("ALT" .. " + " .. "S", hl.dsp.exec_cmd("/home/tehop/.scripts/PWD/PWDSibShow.sh"), { locked = true })
hl.bind("ALT" .. " + " .. "R", hl.dsp.exec_cmd("/home/tehop/.scripts/PWD/PWDRnShow.sh"), { locked = true })
hl.bind("ALT" .. " + " .. "P", hl.dsp.exec_cmd("/usr/bin/flameshot gui"), { locked = true })
-- не трогал, не пробовал
hl.bind(mainMod .. " + " .. "S", hl.dsp.workspace.toggle_special("magic"))
hl.bind(mainMod .. " + " .. "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" }))
-- изменение размера / перемещение окон с использованием мышки
-- win + ПКМ изменение размера / win + ЛКП перемещение
hl.bind(mainMod .. " + " .. "mouse:272", hl.dsp.window.drag(), { mouse = true })
hl.bind(mainMod .. " + " .. "mouse:273", hl.dsp.window.resize(), { mouse = true })
-- настройки мультимедийных клавиш, которые я не трогал
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"), { locked = true })
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), { locked = true })
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), { locked = true })
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"), { locked = true })
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl s 10%+"), { locked = true })
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl s 10%-"), { locked = true })
-- Requires playerctl
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
-- Autostart
hl.on("hyprland.start", function()
hl.exec_cmd("hyprctl keyword device[elan06fa:00-04f3:327e-touchpad]:enabled false")
hl.exec_cmd("sleep 2 && numlockx on")
hl.exec_cmd("swaybg -i /home/tehop/Изображения/Inkscape_proj/archwall.png")
hl.exec_cmd("/usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1")
hl.exec_cmd("waybar")
hl.exec_cmd("mako")
hl.exec_cmd("hypridle")
hl.exec_cmd("nm-applet")
hl.exec_cmd("mako")
hl.exec_cmd("firefox")
hl.exec_cmd("thunderbird")
hl.exec_cmd("Telegram")
hl.exec_cmd("hiddify")
end)
Отдельно правила окон:
-- Generated by hyprconf2lua v1.4.0
-- https://github.com/Prateek-squadron/hyprconf2lua
-- Manual review may be needed for complex directives
---@module 'hl'
--#############################
--## 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 v2
-- windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
hl.window_rule({
name = "org.gnome.Nautilus",
match = {
class = "org.gnome.Nautilus",
},
float = true,
size = { 980, 800 },
})
hl.window_rule({
name = "firefox",
match = {
class = "firefox",
},
workspace = 2,
no_initial_focus = true,
})
hl.window_rule({
name = "thunderbird",
match = {
class = "org.mozilla.Thunderbird",
},
workspace = 5,
no_initial_focus = true,
})
hl.window_rule({
name = "telegram",
match = {
class = "org.telegram.desktop",
},
workspace = 5,
no_initial_focus = true,
})
hl.window_rule({
name = "telegram media",
match = {
title = "^(.*Просмотр медиа.*)$",
},
float = true,
size = { 1200, 800 },
})
hl.window_rule({
name = "steam",
match = {
class = "steam",
},
workspace = 4,
no_initial_focus = true,
})
hl.window_rule({
name = "lutris",
match = {
class = "net.lutris.Lutris",
},
workspace = 4,
no_initial_focus = true,
})
hl.window_rule({
name = "pavucontrol",
match = {
class = "org.pulseaudio.pavucontrol",
},
float = true,
size = { 600, 400 },
move = { 1055, 44 },
})
hl.window_rule({
name = "nomasc",
match = {
class = "org.nomacs.ImageLounge",
},
float = true,
size = { 1200, 780 },
})
hl.window_rule({
name = "kdenlivestart",
match = {
class = "org.kde.kdenlive",
},
float = true,
size = { 425, 402 },
})
hl.window_rule({
name = "galculator",
match = {
class = "galculator",
},
float = true,
size = { 650, 900 },
})
hl.window_rule({
name = "celluloid",
match = {
initial_title = "Celluloid",
},
float = true,
size = { 1380, 900 },
})
hl.window_rule({
name = "portproton",
match = {
title = "PortProton",
},
float = true,
size = { 1380, 900 },
})
hl.window_rule({
name = "tanki",
match = {
title = "^(.*Lesta Game Center*)$",
},
workspace = 4,
})
hl.window_rule({
name = "calcurse",
match = {
title = "calcurse",
},
float = true,
size = { 655, 420 },
move = { 1264, 43 },
})
hl.window_rule({
name = "powermenu",
match = {
title = "^(.*Power Menu*)$",
},
float = true,
size = { 260, 200 },
move = { 5, 47 },
})
hl.window_rule({
name = "hiddify",
match = {
title = "Hiddify",
},
workspace = 6,
no_initial_focus = true,
})
hl.window_rule({
name = "inkscape",
match = {
title = "^(.*Импорт*)$",
},
float = true,
size = { 1580, 315 },
})
Сами конфиги можно найти во вкладке с готовыми конфигами.