280 lines
7.7 KiB
Nix
280 lines
7.7 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
config,
|
|
...
|
|
}: let
|
|
modifier = config.windowManager.modifierKey;
|
|
menu = config.programs.menu.dmenuCommand;
|
|
lock_cmd = "${config.programs.hyprlock.package}/bin/hyprlock";
|
|
color = {
|
|
inherit (config.lib.stylix.colors) yellow red;
|
|
bg = config.lib.stylix.colors.base00;
|
|
fg = config.lib.stylix.colors.base07;
|
|
text = config.lib.stylix.colors.base05;
|
|
};
|
|
rgb = color: "rgb(${color})";
|
|
in {
|
|
imports = [
|
|
(import ../utils/waybar.nix)
|
|
(import ../utils/display.nix)
|
|
];
|
|
xdg.portal = {
|
|
enable = true;
|
|
configPackages = [pkgs.hyprland];
|
|
extraPortals = [pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-hyprland];
|
|
};
|
|
|
|
services.hypridle = {
|
|
enable = true;
|
|
settings = {
|
|
general = {
|
|
before_sleep_cmd = "rbw lock";
|
|
after_sleep_cmd = "hyprctl dispatch dpms on";
|
|
ignore_dbus_inhibit = false;
|
|
lock_cmd = "pidof ${lock_cmd} || ${lock_cmd}";
|
|
};
|
|
|
|
listener = [
|
|
{
|
|
timeout = 300;
|
|
on-timeout = "loginctl lock-session";
|
|
}
|
|
{
|
|
timeout = 1200;
|
|
on-timeout = "hyprctl dispatch dpms off";
|
|
on-resume = "hyprctl dispatch dpms on";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
programs.hyprlock = {
|
|
enable = true;
|
|
settings = {
|
|
# https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/
|
|
general = {
|
|
disable_loading_bar = true;
|
|
hide_cursor = true;
|
|
no_fade_in = false;
|
|
};
|
|
|
|
background = [
|
|
{
|
|
path = "screenshot";
|
|
blur_passes = 3;
|
|
blur_size = 8;
|
|
}
|
|
];
|
|
|
|
input-field = [
|
|
{
|
|
dots_center = true;
|
|
fade_on_empty = true;
|
|
outline_thickness = 5;
|
|
shadow_passes = 2;
|
|
inner_color = rgb color.bg;
|
|
outer_color = rgb color.fg;
|
|
font_color = rgb color.text;
|
|
fail_color = rgb color.red;
|
|
check_color = rgb color.yellow;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
wayland.windowManager.hyprland = {
|
|
enable = true;
|
|
systemd = {
|
|
enable = true;
|
|
variables = ["--all"];
|
|
};
|
|
settings = {
|
|
input = {
|
|
touchpad = {
|
|
natural_scroll = true;
|
|
scroll_factor = 0.5;
|
|
};
|
|
kb_options = lib.mkDefault "caps:escape";
|
|
kb_layout = lib.mkDefault "gb";
|
|
numlock_by_default = true;
|
|
};
|
|
gestures = {
|
|
workspace_swipe = true;
|
|
};
|
|
decoration = {
|
|
rounding = 0;
|
|
drop_shadow = false;
|
|
};
|
|
bezier = [
|
|
"overshot, 0.05, 0.9, 0.1, 1.1"
|
|
"linear, 0.0, 0.0, 1.0, 1.0"
|
|
];
|
|
animations = {
|
|
enabled = true;
|
|
animation = [
|
|
"windows, 1, 3, default, popin"
|
|
"border, 1, 1, default"
|
|
"fade, 1, 1, default"
|
|
"workspaces, 1, 1, default"
|
|
"borderangle,1, 50, linear, loop"
|
|
];
|
|
};
|
|
bind = [
|
|
# movement
|
|
"${modifier}, h, movefocus, l"
|
|
"${modifier}, l, movefocus, r"
|
|
|
|
"${modifier}_SHIFT, space, cyclenext, floating"
|
|
|
|
# window management
|
|
"${modifier}, F, fullscreen,"
|
|
"${modifier}, V, togglefloating,"
|
|
"${modifier}_SHIFT, X, killactive"
|
|
|
|
# master layout
|
|
"${modifier}, j, layoutmsg, rollnext"
|
|
"${modifier}, k, layoutmsg, rollprev"
|
|
"${modifier}, space, layoutmsg, swapwithmaster master"
|
|
"${modifier}, W, layoutmsg, orientationtop"
|
|
"${modifier}_SHIFT, W, layoutmsg, orientationleft"
|
|
|
|
# window grouping
|
|
"${modifier}_SHIFT, V, togglegroup,"
|
|
"${modifier}_SHIFT, j, changegroupactive, f"
|
|
"${modifier}_SHIFT, k, changegroupactive, b"
|
|
"${modifier}_SHIFT, h, moveintogroup, l"
|
|
"${modifier}_SHIFT, l, moveintogroup, r"
|
|
|
|
# scratch buffer
|
|
"${modifier}, Y, togglespecialworkspace"
|
|
"${modifier}_SHIFT, Y, movetoworkspace, special"
|
|
|
|
# applications
|
|
"${modifier}, slash, focuswindow, brave-browser"
|
|
"${modifier}, n, focuswindow, Logseq"
|
|
|
|
# workspaces
|
|
"${modifier}, 1, workspace,1"
|
|
"${modifier}, 2, workspace,2"
|
|
"${modifier}, 3, workspace,3"
|
|
"${modifier}, 4, workspace,4"
|
|
"${modifier}, 5, workspace,5"
|
|
"${modifier}, 6, workspace,6"
|
|
"${modifier}, 7, workspace,7"
|
|
"${modifier}, 8, workspace,8"
|
|
"${modifier}, 9, workspace,9"
|
|
"${modifier}, 0, workspace,10"
|
|
"${modifier}, left, workspace,r-1"
|
|
"${modifier}, right, workspace,r+1"
|
|
"${modifier}_SHIFT, 1, movetoworkspace,1"
|
|
"${modifier}_SHIFT, 2, movetoworkspace,2"
|
|
"${modifier}_SHIFT, 3, movetoworkspace,3"
|
|
"${modifier}_SHIFT, 4, movetoworkspace,4"
|
|
"${modifier}_SHIFT, 5, movetoworkspace,5"
|
|
"${modifier}_SHIFT, 6, movetoworkspace,6"
|
|
"${modifier}_SHIFT, 7, movetoworkspace,7"
|
|
"${modifier}_SHIFT, 8, movetoworkspace,8"
|
|
"${modifier}_SHIFT, 9, movetoworkspace,9"
|
|
"${modifier}_SHIFT, 0, movetoworkspace,10"
|
|
];
|
|
bindm = [
|
|
"${modifier}, mouse:272, movewindow"
|
|
"${modifier}, mouse:273, resizewindow"
|
|
];
|
|
env = [
|
|
"GDK_BACKEND,wayland,x11"
|
|
"QT_QPA_PLATFORM,wayland;xcb"
|
|
"SDL_VIDEODRIVER,wayland"
|
|
"CLUTTER_BACKEND,wayland"
|
|
"XDG_CURRENT_DESKTOP,Hyprland"
|
|
"XDG_SESSION_TYPE,wayland"
|
|
"XDG_SESSION_DESKTOP,Hyprland"
|
|
"QT_AUTO_SCREEN_SCALE_FACTOR,1"
|
|
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
|
|
];
|
|
windowrule = [
|
|
"float, title:wlogout"
|
|
"idleinhibit always, vrmonitor"
|
|
"idleinhibit focus, steam_app"
|
|
];
|
|
workspace = [
|
|
"11, default:true"
|
|
];
|
|
general = {
|
|
gaps_out = 2;
|
|
gaps_in = 2;
|
|
resize_on_border = true;
|
|
layout = "master";
|
|
"col.active_border" = lib.mkForce "rgb(FFFF00) rgb(00FFFF) rgb(FF00FF)";
|
|
border_size = lib.mkDefault 2;
|
|
};
|
|
master = {
|
|
mfact = 0.7;
|
|
new_on_top = true;
|
|
};
|
|
misc = {
|
|
vrr = 2;
|
|
focus_on_activate = true;
|
|
};
|
|
};
|
|
# https://wiki.hyprland.org/Configuring/Variables/
|
|
extraConfig = ''
|
|
bind = ${modifier}, R, submap, resize
|
|
|
|
submap = resize
|
|
binde = ,right,resizeactive,10 0
|
|
binde = ,left,resizeactive,-10 0
|
|
binde = ,up,resizeactive,0 -10
|
|
binde = ,down,resizeactive,0 10
|
|
binde = ,k,resizeactive,0 -10
|
|
binde = ,j,resizeactive,0 10
|
|
binde = ,l,splitratio,0.05
|
|
binde = ,h,splitratio,-0.05
|
|
binde = SHIFT,l,splitratio,0.3
|
|
binde = SHIFT,h,splitratio,-0.3
|
|
|
|
bind = , escape, submap,reset
|
|
bind = , enter, submap,reset
|
|
bind = ${modifier}, R, submap,reset
|
|
bind = CONTROL, C, submap,reset
|
|
submap = reset
|
|
|
|
bind = ${modifier}_CONTROL, V, submap, passthrough
|
|
|
|
submap = passthrough
|
|
bind = ${modifier}_CONTROL, V, submap, reset
|
|
bind = SUPER, escape, submap, reset
|
|
submap = reset
|
|
|
|
device {
|
|
name = zsa-technology-labs-moonlander-mark-i
|
|
kb_variant =
|
|
kb_options = esperanto:qwerty,lv3:ralt_switch
|
|
}
|
|
'';
|
|
};
|
|
|
|
programs.scripts = [
|
|
{
|
|
name = "focus-application";
|
|
install = true;
|
|
text = ''
|
|
windows=$(hyprctl clients -j | jq -r '.[] | .title')
|
|
window=$(echo "$windows" | ${menu})
|
|
hyprctl dispatch focuswindow title:"$window"
|
|
'';
|
|
hotkeys = [
|
|
{
|
|
key = "tab";
|
|
}
|
|
];
|
|
}
|
|
];
|
|
|
|
services.mako = {
|
|
enable = true;
|
|
};
|
|
|
|
programs.waybar.settings.mainBar.modules-left = ["hyprland/workspaces" "hyprland/window"];
|
|
}
|