Files
samfelag/modules/desktop/hyprland.nix
2024-03-02 23:03:20 +01:00

183 lines
5.1 KiB
Nix

{ config, lib, pkgs, ... }:
let
cfg = config.samfelag.modules.desktop.hyprland;
mod = "Mod4";
in {
options.samfelag.modules.desktop.hyprland = with lib; {
enable = mkEnableOption "hyprland window manager";
mod = my.mkOpt' types.str "Mod4" "Main modifier key for hyprland";
laptop = mkEnableOption "Enable features for a laptop (trackpad, battery, etc...)";
extraKeybindings = my.mkOpt (types.listOf types.str) [ ];
extraStartup = my.mkOpt (types.listOf types.attrs) [ ];
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
# Wallpaper
hyprpaper
greetd.gtkgreet
cage
];
# - Login screen -----------------------------
services.greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.cage}/bin/cage -d -s ${pkgs.greetd.gtkgreet}/bin/gtkgreet -- -c Hyprland -s /etc/greetd/greetd.css";
user = config.user.name;
};
};
};
environment.etc."greetd/environments".text = ''
Hyprland
'';
environment.etc."greetd/greetd.css".text = ''
window {
background-image: url("file://${config.samfelag.modules.desktop.wallpaper}");
background-size: cover;
background-position: center;
font-family: Iosevka;
color: #${config.colorScheme.palette.base00};
}
box#body {
background-color: #${config.colorScheme.palette.base06};
opacity: 0.75;
border-radius: 10px;
padding: 50px;
}
'';
# - Dependencies -----------------------------
samfelag.modules.desktop.rofi.enable = true;
samfelag.modules.desktop.eww.enable = true;
# - Configuration -----------------------------
# Hyprpaper
hm.xdg.configFile."hypr/hyprpaper.conf".text = ''
preload = ${config.samfelag.modules.desktop.wallpaper}
wallpaper = ,${config.samfelag.modules.desktop.wallpaper}
'';
programs.hyprland = {
enable = true;
xwayland.enable = true;
enableNvidiaPatches = true;
};
hm.wayland.windowManager.hyprland = {
enable = true;
xwayland.enable = true;
enableNvidiaPatches = true;
package = pkgs.hyprland;
# Optional
# Whether to enable hyprland-session.target on hyprland startup
systemd.enable = true;
settings = {
input = {
kb_layout = "es";
};
monitor = ",highres,auto,1";
exec-once = [
"hyprpaper"
"eww open top-bar"
];
decoration = {
rounding = 10;
};
gestures = {
# See https://wiki.hyprland.org/Configuring/Variables/ for more
workspace_swipe = true;
};
bind = [
"${cfg.mod}, Q, killactive,"
"${cfg.mod}, F, fullscreen, 1"
"${cfg.mod} SHIFT, F, fullscreen, 0"
"${cfg.mod} SHIFT, SPACE, togglefloating"
# Move focus
"${cfg.mod}, left, movefocus, l"
"${cfg.mod}, right, movefocus, r"
"${cfg.mod}, up, movefocus, u"
"${cfg.mod}, down, movefocus, d"
"${cfg.mod}, h, movefocus, l"
"${cfg.mod}, l, movefocus, r"
"${cfg.mod}, k, movefocus, u"
"${cfg.mod}, j, movefocus, d"
# Move focus
"${cfg.mod} SHIFT, left, movewindow, l"
"${cfg.mod} SHIFT, right, movewindow, r"
"${cfg.mod} SHIFT, up, movewindow, u"
"${cfg.mod} SHIFT, down, movewindow, d"
"${cfg.mod} SHIFT, h, movewindow, l"
"${cfg.mod} SHIFT, l, movewindow, r"
"${cfg.mod} SHIFT, k, movewindow, u"
"${cfg.mod} SHIFT, j, movewindow, d"
# Switch workspace
"${cfg.mod}, 1, workspace, 1"
"${cfg.mod}, 2, workspace, 2"
"${cfg.mod}, 3, workspace, 3"
"${cfg.mod}, 4, workspace, 4"
"${cfg.mod}, 5, workspace, 5"
"${cfg.mod}, 0, workspace, 6"
# Move to workspace
"${cfg.mod} SHIFT, 1, movetoworkspace, 1"
"${cfg.mod} SHIFT, 2, movetoworkspace, 2"
"${cfg.mod} SHIFT, 3, movetoworkspace, 3"
"${cfg.mod} SHIFT, 4, movetoworkspace, 4"
"${cfg.mod} SHIFT, 5, movetoworkspace, 5"
"${cfg.mod} SHIFT, 0, movetoworkspace, 6"
# - Media ------------------------------
# Pulse Audio controls (mute)
", XF86AudioMute, exec, pactl set-sink-mute @DEFAULT_SINK@ toggle"
# Media player controls
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPause, exec, playerctl play-pause"
", XF86AudioNext, exec, playerctl next"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioStop, exec, playerctl stop"
] ++ cfg.extraKeybindings;
binde = [
# Pulse Audio controls (volume)
", XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5%"
", XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5%"
];
bindm = [
"${cfg.mod}, mouse:272, movewindow"
];
};
};
};
}