Hyprland

 

Waybar – Highly Customizable Status Bar for LinuxHyprland - тайловый оконный менеджер, который отличается встроенным набором из настроек внешнего вида (анимации, скругления, размытие и прочее никому не нужное =) ). Красивый, современный, быстрый 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 },
})

Сами конфиги можно найти во вкладке с готовыми конфигами.