system/modules/home-manager/configs/window-manager/hyprland/default.nix

171 lines
3.9 KiB
Nix

{ config, pkgs, lib, ... }:
let
cfg = config.local.window-manager.hyprland;
easyfocus = pkgs.callPackage ./easyfocus-hyprland.nix { };
in
{
options.local.window-manager.hyprland = with lib; {
enable = mkEnableOption "hyprland window manager";
};
config = lib.mkIf cfg.enable {
home.packages = with pkgs.unstable; [
wl-clipboard
dmenu-wayland
];
xdg.configFile."easyfocus-hyprland/config.yaml".text = ''
chars: 'aoeuhtns'
window_background_color: '1d1f21'
window_background_opacity: 0.2
label_background_color: '1d1f21'
label_background_opacity: 1.0
label_text_color: 'c5c8c6'
focused_background_color: '285577'
focused_background_opacity: 1.0
focused_text_color: 'ffffff'
font_family: monospace
font_weight: bold
font_size: 60px
label_padding_x: 16
label_padding_y: 16
label_border_radius: 4
label_margin_x: 4
label_margin_y: 50
'';
wayland.windowManager.hyprland = {
enable = true;
package = pkgs.unstable.hyprland;
systemd.enable = true;
xwayland.enable = true;
settings = {
# monitors
monitor = ",preferred,auto,1";
# env
env = [
"XCURSOR_SIZE,24"
"HYPRCURSOR_SIZE,24"
];
# look and feel
general = {
gaps_in = 5;
gaps_out = 20;
border_size = 1;
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border" = "rgba(595959aa)";
resize_on_border = false;
allow_tearing = false;
layout = "master";
};
decoration = {
rounding = 5;
active_opacity = 1.0;
inactive_opacity = 1.0;
drop_shadow = false;
blur = {
enabled = false;
};
};
animations = {
enabled = false;
};
master = {
orientation = "top";
new_is_master = false;
};
gestures = {
workspace_swipe = false;
};
xwayland = {
force_zero_scaling = true;
};
"$terminal" = "wezterm start";
"$browser" = "librewolf";
"$menu" = "dmenu-wl_run";
"$m1" = "ALT_L";
"$m4" = "MOD4";
bind = lib.flatten [
# programs
"$m1 SHIFT, Return, exec, $terminal"
"$m1 SHIFT, B, exec, $browser"
"$m1 SHIFT, S, exec, flameshot gui"
"$m1, P, exec, $menu"
# focus
(lib.flip lib.mapAttrsToList { k = "prev"; j = "next"; } (k: d: [
"$m1, ${k}, layoutmsg, cycle${d}"
"$m1 SHIFT, ${k}, layoutmsg, swap${d}"
]))
"$m1, Return, layoutmsg, swapwithmaster, master"
"$m1, S, exec, ${easyfocus}/bin/easyfocus-hyprland"
# comma (,)
"$m1, code:44, layoutmsg, addmaster"
# period (.)
"$m1, code:46, layoutmsg, removemaster"
# windows
"$m4 SHIFT, C, killactive"
"$m1, Space, fullscreen, 0"
# workspaces
(lib.flip map [ 1 2 3 4 5 6 7 8 9 0 ] (i:
let wid = if i == 0 then 10 else i; in
[
# switch warkspaces with mod + [0-9]
"$m1, ${toString i}, workspace, ${toString wid}"
# move active window to a workspace with mod + shift + [0-9]
"$m1 SHIFT, ${toString i}, movetoworkspacesilent, ${toString wid}"
]
))
# system
"$m4, L, exec, waylock"
"$m4 SHIFT, Q, exit"
];
bindm = [
"$m1, mouse:272, movewindow"
"$m1, mouse:273, resizewindow"
];
input = let kb = config.home.keyboard; in {
kb_model = kb.model;
kb_layout = kb.layout;
kb_variant = kb.variant;
kb_options = lib.head kb.options;
};
};
};
};
}