239 lines
12 KiB
Nix
239 lines
12 KiB
Nix
{ modules, ... }:
|
|
{
|
|
modules.hyprland = {
|
|
provides = {
|
|
doloro-settings = {
|
|
includes = [
|
|
modules.dunst
|
|
];
|
|
homeManager =
|
|
{
|
|
pkgs,
|
|
home,
|
|
...
|
|
}:
|
|
let
|
|
tofiCfg = pkgs.writeTextFile {
|
|
name = "hyprland-tofi-config";
|
|
text = ''
|
|
width = 100%
|
|
height = 100%
|
|
border-width = 0
|
|
outline-width = 0
|
|
padding-left = 35%
|
|
padding-top = 35%
|
|
result-spacing = 25
|
|
num-results = 5
|
|
font = monospace
|
|
background-color = #000A
|
|
'';
|
|
};
|
|
meowScript = pkgs.writeShellScript "meow" ''
|
|
fish -c 'grim -g $(slurp) -t png - &| wl-copy -t image/png; killall wayfreeze'
|
|
'';
|
|
mreowScript = pkgs.writeShellScript "mreow" ''
|
|
exec $(tofi-drun -c ${tofiCfg})
|
|
'';
|
|
mainMod = "SUPER";
|
|
hlBind = key: dispatcher: "hl.bind(\"${key}\", ${dispatcher})";
|
|
workspaceLines = pkgs.lib.concatLists (
|
|
builtins.genList (
|
|
i:
|
|
let
|
|
ws = toString (i + 1);
|
|
in
|
|
[
|
|
(hlBind "${mainMod} + ${ws}" "hl.dsp.focus({ workspace = ${ws} })")
|
|
(hlBind "${mainMod} + SHIFT + ${ws}" "hl.dsp.window.move({ workspace = ${ws} })")
|
|
]
|
|
) 9
|
|
);
|
|
hlBindCode = pkgs.lib.concatStringsSep "\n" (
|
|
[
|
|
"-- Hyprland configuration"
|
|
""
|
|
"local mainMod = \"${mainMod}\""
|
|
""
|
|
"-- Config"
|
|
"hl.config({"
|
|
" general = {"
|
|
" gaps_in = 1,"
|
|
" gaps_out = 1,"
|
|
" border_size = 1,"
|
|
" resize_on_border = false,"
|
|
" allow_tearing = true,"
|
|
" layout = \"dwindle\","
|
|
" },"
|
|
" input = {"
|
|
" follow_mouse = 2,"
|
|
" kb_layout = \"gb\","
|
|
" },"
|
|
" decoration = {"
|
|
" rounding = 4,"
|
|
" rounding_power = 1,"
|
|
" active_opacity = 1.0,"
|
|
" inactive_opacity = 1.0,"
|
|
" shadow = {"
|
|
" enabled = false,"
|
|
" },"
|
|
" blur = {"
|
|
" enabled = true,"
|
|
" passes = 1,"
|
|
" new_optimizations = true,"
|
|
" ignore_opacity = false,"
|
|
" },"
|
|
" },"
|
|
" cursor = {"
|
|
" no_hardware_cursors = false,"
|
|
" },"
|
|
" dwindle = {"
|
|
" preserve_split = true,"
|
|
" },"
|
|
" misc = {"
|
|
" force_default_wallpaper = -1,"
|
|
" disable_hyprland_logo = false,"
|
|
" enable_anr_dialog = false,"
|
|
" },"
|
|
"})"
|
|
""
|
|
"-- Monitors"
|
|
"hl.monitor({ output = \"HDMI-A-1\", mode = \"1920x1080@60\", position = \"0x0\", scale = \"1\" })"
|
|
"hl.monitor({ output = \"DP-2\", mode = \"1920x1080@120\", position = \"1920x0\", scale = \"1\" })"
|
|
""
|
|
"-- Input"
|
|
"hl.device({ name = \"default\", kb_layout = \"gb\", sensitivity = -0.5 })"
|
|
""
|
|
"-- 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}, {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} } })"
|
|
""
|
|
"-- Animations"
|
|
"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 = 2.79, bezier = \"easeOutQuint\" })"
|
|
"hl.animation({ leaf = \"windowsIn\", enabled = true, speed = 1, bezier = \"easeOutQuint\", style = \"popin 87%\" })"
|
|
"hl.animation({ leaf = \"windowsOut\", enabled = true, speed = 1, bezier = \"linear\", style = \"popin 87%\" })"
|
|
"hl.animation({ leaf = \"windowsMove\", enabled = true, speed = 1, bezier = \"easeInOutCubic\" })"
|
|
"hl.animation({ leaf = \"fadeIn\", enabled = true, speed = 0.5, bezier = \"almostLinear\" })"
|
|
"hl.animation({ leaf = \"fadeOut\", enabled = true, speed = 0.5, bezier = \"almostLinear\" })"
|
|
"hl.animation({ leaf = \"fade\", enabled = true, speed = 1, 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, bezier = \"almostLinear\", style = \"slide\" })"
|
|
"hl.animation({ leaf = \"workspacesIn\", enabled = true, speed = 1, bezier = \"easeInOutCubic\", style = \"slide\" })"
|
|
"hl.animation({ leaf = \"workspacesOut\", enabled = true, speed = 1, bezier = \"easeInOutCubic\", style = \"slide\" })"
|
|
"hl.animation({ leaf = \"zoomFactor\", enabled = true, speed = 7, bezier = \"quick\" })"
|
|
""
|
|
"-- Binds"
|
|
(hlBind "${mainMod} + R" "hl.dsp.exec_cmd(\"${mreowScript}\")")
|
|
(hlBind "${mainMod} + C" "hl.dsp.window.close()")
|
|
(hlBind "${mainMod} + M" "hl.dsp.exec_cmd(\"uwsm stop\")")
|
|
(hlBind "${mainMod} + Q" "hl.dsp.exec_cmd(\"kitty\")")
|
|
(hlBind "${mainMod} + V" "hl.dsp.window.float({ action = \"toggle\" })")
|
|
(hlBind "${mainMod} + left" "hl.dsp.focus({ direction = \"left\" })")
|
|
(hlBind "${mainMod} + right" "hl.dsp.focus({ direction = \"right\" })")
|
|
(hlBind "${mainMod} + up" "hl.dsp.focus({ direction = \"up\" })")
|
|
(hlBind "${mainMod} + down" "hl.dsp.focus({ direction = \"down\" })")
|
|
(hlBind "${mainMod} + L" "hl.dsp.exec_cmd(\"wlogout\")")
|
|
(hlBind "${mainMod} + S" "hl.dsp.exec_cmd(\"wayfreeze --after-freeze-cmd '${meowScript}'\")")
|
|
(hlBind "${mainMod} + F" "hl.dsp.window.fullscreen({ action = \"toggle\" })")
|
|
(hlBind "${mainMod} + SHIFT + Q" "hl.dsp.window.close()")
|
|
(hlBind "${mainMod} + mouse_down" "hl.dsp.focus({ workspace = \"e+1\" })")
|
|
(hlBind "${mainMod} + mouse_up" "hl.dsp.focus({ workspace = \"e-1\" })")
|
|
""
|
|
"-- Mouse binds"
|
|
(hlBind "${mainMod} + mouse:272" "hl.dsp.window.drag()")
|
|
(hlBind "${mainMod} + mouse:273" "hl.dsp.window.resize()")
|
|
""
|
|
"-- Media keys"
|
|
(hlBind "XF86AudioLowerVolume" "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-\")")
|
|
(hlBind "XF86AudioRaiseVolume" "hl.dsp.exec_cmd(\"wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+\")")
|
|
(hlBind "XF86AudioMute" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
|
|
(hlBind "XF86AudioPlay" "hl.dsp.exec_cmd(\"playerctl play-pause\")")
|
|
(hlBind "XF86AudioNext" "hl.dsp.exec_cmd(\"playerctl next\")")
|
|
(hlBind "XF86AudioPrev" "hl.dsp.exec_cmd(\"playerctl previous\")")
|
|
(hlBind "XF86AudioMicMute" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
|
|
(hlBind "home" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle\")")
|
|
(hlBind "end" "hl.dsp.exec_cmd(\"wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle\")")
|
|
(hlBind "F8" "hl.dsp.pass({ window = [[match:class:^(com.obsproject.Studio)$]] })")
|
|
""
|
|
"-- Workspaces"
|
|
(hlBind "${mainMod} + 0" "hl.dsp.focus({ workspace = 10 })")
|
|
(hlBind "${mainMod} + SHIFT + 0" "hl.dsp.window.move({ workspace = 10 })")
|
|
]
|
|
++ workspaceLines
|
|
++ [
|
|
""
|
|
"-- Window rules"
|
|
"hl.window_rule({ suppress_event = \"maximize\" })"
|
|
"hl.window_rule({ match = { class = \"gamescope\" }, workspace = \"5\", immediate = true, confine_pointer = true })"
|
|
"hl.window_rule({ match = { class = \"steam\" }, workspace = \"6 silent\" })"
|
|
"hl.window_rule({ match = { class = \"vesktop\" }, workspace = \"8 silent\" })"
|
|
"hl.window_rule({ match = { class = \"org.telegram.desktop\" }, workspace = \"8 silent\" })"
|
|
"hl.window_rule({ match = { class = \"com.obsproject.Studio\" }, workspace = \"10 silent\" })"
|
|
"hl.window_rule({ match = { initial_title = \"OBS Studio Crash Detected\" }, pin = true })"
|
|
"hl.window_rule({ match = { initial_title = \"Discord Popout\" }, workspace = \"1 silent\" })"
|
|
""
|
|
"-- Layer rules"
|
|
"hl.layer_rule({ match = { namespace = \"notifications\" }, no_screen_share = true })"
|
|
""
|
|
"-- Host-specific overrides"
|
|
"local home = os.getenv(\"HOME\")"
|
|
"if home then"
|
|
" local f = io.open(home .. '/.config/hypr/hyprland-local.lua', 'r')"
|
|
" if f then"
|
|
" _ = f:close()"
|
|
" local config = loadfile(home .. '/.config/hypr/hyprland-local.lua')"
|
|
" if config then config() end"
|
|
" end"
|
|
"end"
|
|
]
|
|
);
|
|
in
|
|
{
|
|
home.packages = [
|
|
pkgs.hyprcursor
|
|
pkgs.wlogout
|
|
pkgs.tofi
|
|
pkgs.killall
|
|
pkgs.grim
|
|
pkgs.slurp
|
|
pkgs.wayclip
|
|
];
|
|
home.pointerCursor = {
|
|
enable = true;
|
|
name = "rose-pine-hyprcursor";
|
|
package = pkgs.rose-pine-hyprcursor;
|
|
hyprcursor.enable = true;
|
|
};
|
|
services.hyprpaper = {
|
|
enable = true;
|
|
settings = {
|
|
splash = true;
|
|
wallpaper = [
|
|
{
|
|
monitor = "HDMI-A-1";
|
|
path = "/home/doloro/Wallpaper.jpg";
|
|
}
|
|
{
|
|
monitor = "DP-2";
|
|
path = "/home/doloro/Wallpaper.jpg";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
xdg.configFile."hypr/hyprland.lua" = {
|
|
source = pkgs.writeText "hyprland.lua" hlBindCode;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|