nixos-config/modules/home/hyprland/config.nix

306 lines
10 KiB
Nix

{pkgs, ...}: {
wayland.windowManager.hyprland = {
settings = {
# autostart
exec-once = [
"${pkgs.lxqt.lxqt-policykit}/bin/lxqt-policykit-agent &"
"nm-applet &"
"wl-clip-persist --clipboard both &"
"bash -c 'if [ ! -f ~/.config/hypr/wallpaper.png ]; then wall-change ~/.config/hypr/default_wallpaper.png; fi'"
"swaybg -m fill -i ~/.config/hypr/wallpaper.png &"
"poweralertd &"
"waybar &"
"swaync &"
"wl-paste --type text --watch cliphist store &" #Stores only text data
"wl-paste --type image --watch cliphist store &" #Stores only image data
"ckb-next -b &"
"element-desktop --hidden &"
];
input = {
kb_layout = "es,us";
kb_options = "grp:alt_caps_toggle";
numlock_by_default = true;
follow_mouse = 1;
sensitivity = 0;
touchpad = {
natural_scroll = true;
};
};
general = {
"$mainMod" = "SUPER";
layout = "dwindle";
gaps_in = 0;
gaps_out = 0;
border_size = 2;
"col.active_border" = "rgb(cba6f7) rgb(94e2d5) 45deg";
"col.inactive_border" = "0x00000000";
border_part_of_window = false;
no_border_on_floating = false;
};
misc = {
disable_autoreload = true;
disable_hyprland_logo = true;
always_follow_on_dnd = true;
layers_hog_keyboard_focus = true;
animate_manual_resizes = false;
enable_swallow = true;
focus_on_activate = true;
};
dwindle = {
no_gaps_when_only = true;
force_split = 0;
special_scale_factor = 1.0;
split_width_multiplier = 1.0;
use_active_for_splits = true;
pseudotile = "yes";
preserve_split = "yes";
};
master = {
new_status = "master";
special_scale_factor = 1;
no_gaps_when_only = false;
};
decoration = {
rounding = 0;
# active_opacity = 0.90;
# inactive_opacity = 0.90;
# fullscreen_opacity = 1.0;
blur = {
enabled = true;
size = 1;
passes = 1;
# size = 4;
# passes = 2;
brightness = 1;
contrast = 1.400;
ignore_opacity = true;
noise = 0;
new_optimizations = true;
xray = false;
};
drop_shadow = true;
shadow_ignore_window = true;
shadow_offset = "0 2";
shadow_range = 20;
shadow_render_power = 3;
"col.shadow" = "rgba(00000055)";
};
animations = {
enabled = true;
bezier = [
"fluent_decel, 0, 0.2, 0.4, 1"
"easeOutCirc, 0, 0.55, 0.45, 1"
"easeOutCubic, 0.33, 1, 0.68, 1"
"easeinoutsine, 0.37, 0, 0.63, 1"
];
animation = [
# Windows
"windowsIn, 1, 3, easeOutCubic, popin 30%" # window open
"windowsOut, 1, 3, fluent_decel, popin 70%" # window close.
"windowsMove, 1, 2, easeinoutsine, slide" # everything in between, moving, dragging, resizing.
# Fade
"fadeIn, 1, 3, easeOutCubic" # fade in (open) -> layers and windows
"fadeOut, 1, 2, easeOutCubic" # fade out (close) -> layers and windows
"fadeSwitch, 0, 1, easeOutCirc" # fade on changing activewindow and its opacity
"fadeShadow, 1, 10, easeOutCirc" # fade on changing activewindow for shadows
"fadeDim, 1, 4, fluent_decel" # the easing of the dimming of inactive windows
"border, 1, 2.7, easeOutCirc" # for animating the border's color switch speed
"borderangle, 1, 30, fluent_decel, once" # for animating the border's gradient angle - styles: once (default), loop
"workspaces, 1, 4, easeOutCubic, fade" # styles: slide, slidevert, fade, slidefade, slidefadevert
];
};
bind =
[
# show keybinds list
"$mainMod, F1, exec, show-keybinds"
# keybindings
"$mainMod, Return, exec, kitty"
"ALT, Return, exec, kitty --title float_kitty"
"$mainMod SHIFT, Return, exec, kitty --start-as=fullscreen -o 'font_size=16'"
"$mainMod, B, exec, floorp"
"$mainMod, N, exec, swaync-client -t"
"$mainMod SHIFT, N, exec, swaync-client -d"
"$mainMod SHIFT, Q, killactive,"
"$mainMod, F, fullscreen, 0"
"$mainMod SHIFT, F, fullscreen, 1"
"$mainMod, Space, togglefloating,"
"$mainMod, D, exec, fuzzel"
"$mainMod SHIFT, E, exec, bemoji -t"
"$mainMod, M, exec, element-desktop"
"$mainMod, Escape, exec, loginctl lock-session"
"$mainMod SHIFT, Escape, exec, shutdown-script"
"$mainMod, P, pseudo,"
"$mainMod SHIFT, P, togglesplit,"
"$mainMod, E, exec, nemo"
"$mainMod SHIFT, B, exec, pkill -SIGUSR1 .waybar-wrapped"
"$mainMod, C ,exec, hyprpicker -a"
"$mainMod, W,exec, wallpaper-picker"
# screenshot
"$mainMod, Print, exec, screenshot-menu"
",Print, exec, grimblast --notify --cursor --freeze copy area"
]
++ (
# workspaces
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
builtins.concatLists (
builtins.genList (
x: let
ws = let
c = (x + 1) / 10;
in
builtins.toString (x + 1 - (c * 10));
in [
"$mainMod, ${ws}, workspace, ${toString (x + 1)}"
"$mainMod SHIFT, ${ws}, movetoworkspacesilent, ${toString (x + 1)}"
]
)
10
)
)
++ [
"$mainMod CTRL, c, workspace, empty"
"$mainMod SHIFT, c, movetoworkspace, empty"
]
++ (
# Window focus, movement and control
builtins.concatLists (
let
keys = ["H" "L" "K" "J"];
directions = ["l" "r" "u" "d"];
resize = toString 80; # Change this to change how much a window resizes each keypress
resize_list = ["-${resize} 0" "${resize} 0" "0 -${resize}" "0 ${resize}"];
in
builtins.genList (
x: let
k = builtins.elemAt keys x;
d = builtins.elemAt directions x;
r = builtins.elemAt resize_list x;
in [
"$mainMod, ${k}, movefocus, ${d}"
"$mainMod SHIFT, ${k}, movewindow, ${d}"
"$mainMod CTRL, ${k}, resizeactive, ${r}"
"$mainMod ALT, ${k}, moveactive, ${r}"
]
)
4
)
)
++ [
"$mainMod, mouse_down, workspace, e-1"
"$mainMod, mouse_up, workspace, e+1"
# laptop brigthness
",XF86MonBrightnessUp, exec, brightnessctl set 5%+"
",XF86MonBrightnessDown, exec, brightnessctl set 5%-"
"$mainMod, XF86MonBrightnessUp, exec, brightnessctl set 100%+"
"$mainMod, XF86MonBrightnessDown, exec, brightnessctl set 100%-"
# clipboard manager
"$mainMod, V, exec, cliphist list | fuzzel --dmenu | cliphist decode | wl-copy"
];
# Bindings that work when locked
bindl = [
# media and volume controls
",XF86AudioRaiseVolume,exec, pamixer -i 2"
",XF86AudioLowerVolume,exec, pamixer -d 2"
",XF86AudioMute,exec, pamixer -t"
",XF86AudioPlay,exec, playerctl play-pause"
",XF86AudioNext,exec, playerctl next"
",XF86AudioPrev,exec, playerctl previous"
",XF86AudioStop, exec, playerctl stop"
];
# mouse binding
bindm = [
"$mainMod, mouse:272, movewindow"
"$mainMod, mouse:273, resizewindow"
];
# windowrule
windowrule = [
"float,imv"
"center,imv"
"size 1200 725,imv"
"float,mpv"
"center,mpv"
"tile,Aseprite"
"size 1200 725,mpv"
"float,title:^(float_kitty)$"
"center,title:^(float_kitty)$"
"size 950 600,title:^(float_kitty)$"
# "pin,wofi"
# "float,wofi"
# "noborder,wofi"
"tile, neovide"
"idleinhibit focus,mpv"
"float,udiskie"
"float,title:^(Volume Control)$"
"float,title:^(Firefox Sharing Indicator)$"
"move 0 0,title:^(Firefox Sharing Indicator)$"
"size 700 450,title:^(Volume Control)$"
"move 40 55%,title:^(Volume Control)$"
];
# windowrulev2
windowrulev2 = [
"float, title:^(Picture-in-Picture)$"
"opacity 1.0 override 1.0 override, title:^(Picture-in-Picture)$"
"pin, title:^(Picture-in-Picture)$"
"opacity 1.0 override 1.0 override, title:^(.*imv.*)$"
"opacity 1.0 override 1.0 override, title:^(.*mpv.*)$"
"opacity 1.0 override 1.0 override, class:(Aseprite)"
"opacity 1.0 override 1.0 override, class:(Unity)"
"idleinhibit focus, class:^(mpv)$"
"idleinhibit fullscreen, class:^(firefox)$"
"float,class:^(zenity)$"
"center,class:^(zenity)$"
"size 850 500,class:^(zenity)$"
"float,class:^(pavucontrol)$"
"float,class:^(.sameboy-wrapped)$"
"float,class:^(file_progress)$"
"float,class:^(confirm)$"
"float,class:^(dialog)$"
"float,class:^(download)$"
"float,class:^(notification)$"
"float,class:^(error)$"
"float,class:^(confirmreset)$"
"float,title:^(Open File)$"
"float,title:^(branchdialog)$"
"float,title:^(Confirm to replace files)$"
"float,title:^(File Operation Progress)$"
"opacity 0.0 override,class:^(xwaylandvideobridge)$"
"noanim,class:^(xwaylandvideobridge)$"
"noinitialfocus,class:^(xwaylandvideobridge)$"
"maxsize 1 1,class:^(xwaylandvideobridge)$"
"noblur,class:^(xwaylandvideobridge)$"
];
};
extraConfig = "
monitor=,preferred,auto,1
xwayland {
force_zero_scaling = true
}
";
};
}