260 lines
7 KiB
Nix
260 lines
7 KiB
Nix
{
|
|
config,
|
|
pkgs,
|
|
lib,
|
|
namespace,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib)
|
|
mkEnableOption
|
|
mkOption
|
|
mkIf
|
|
types
|
|
;
|
|
|
|
cfg = config.${namespace}.windowManagers.hyprland;
|
|
left = "h";
|
|
right = "l";
|
|
up = "k";
|
|
down = "j";
|
|
modifier = "SUPER";
|
|
|
|
menu = "${pkgs.fuzzel}/bin/fuzzel";
|
|
emoji_picker = "${pkgs.bemoji}/bin/bemoji -t";
|
|
terminal = "${pkgs.kitty}/bin/kitty";
|
|
|
|
generate_grim_command = target: ''
|
|
exec mkdir -p ~/screenshots \
|
|
&& ${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" \
|
|
~/screenshots/"$(date -u --iso-8601=seconds)".png && \
|
|
${pkgs.libnotify}/bin/notify-send "Screenshot saved"
|
|
'';
|
|
in
|
|
{
|
|
options.${namespace}.windowManagers.hyprland = {
|
|
enable = mkEnableOption "Hyprland";
|
|
|
|
wallpaperPath = mkOption {
|
|
type = types.str;
|
|
default = "hyprland/wallpaper.jpg";
|
|
description = ''
|
|
Path to wallpaper, relative to xdg.dataHome
|
|
'';
|
|
};
|
|
|
|
monitor = mkOption {
|
|
type = types.listOf types.str;
|
|
default = [
|
|
"eDP-1,preferred,auto,1.6"
|
|
",preferred,auto,1"
|
|
];
|
|
description = ''
|
|
Monitor configuration for Hyprland
|
|
'';
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
${namespace} = {
|
|
fonts.enable = true;
|
|
programs = {
|
|
kitty.enable = true;
|
|
fuzzel.enable = true;
|
|
waybar.enable = true;
|
|
hyprlock.enable = true;
|
|
};
|
|
services = {
|
|
gammastep.enable = true;
|
|
playerctld.enable = true;
|
|
swaync.enable = true;
|
|
hypridle.enable = true;
|
|
};
|
|
};
|
|
|
|
home.packages = with pkgs; [
|
|
grim
|
|
slurp
|
|
wl-clipboard
|
|
wtype
|
|
xdg-utils
|
|
libnotify
|
|
];
|
|
|
|
catppuccin.cursors = {
|
|
enable = true;
|
|
accent = "dark";
|
|
};
|
|
catppuccin.gtk.icon.enable = true;
|
|
catppuccin.kvantum = {
|
|
enable = true;
|
|
apply = true;
|
|
};
|
|
|
|
xdg.dataFile.${cfg.wallpaperPath}.source = ./wallpaper.jpg;
|
|
|
|
catppuccin.hyprland.enable = true;
|
|
wayland.windowManager.hyprland = {
|
|
enable = true;
|
|
systemd.variables = [ "--all" ];
|
|
|
|
settings = {
|
|
"$mod" = modifier;
|
|
|
|
# Monitor configuration
|
|
monitor = cfg.monitor;
|
|
|
|
# General settings
|
|
general = {
|
|
gaps_in = 5;
|
|
gaps_out = 20;
|
|
border_size = 2;
|
|
"col.active_border" = "$lavender";
|
|
"col.inactive_border" = "$overlay0";
|
|
layout = "dwindle";
|
|
allow_tearing = false;
|
|
};
|
|
|
|
# Decoration
|
|
decoration = {
|
|
rounding = 10;
|
|
blur = {
|
|
enabled = true;
|
|
size = 3;
|
|
passes = 1;
|
|
};
|
|
};
|
|
|
|
# Animations
|
|
animations = {
|
|
enabled = true;
|
|
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
|
animation = [
|
|
"windows, 1, 7, myBezier"
|
|
"windowsOut, 1, 7, default, popin 80%"
|
|
"border, 1, 10, default"
|
|
"borderangle, 1, 8, default"
|
|
"fade, 1, 7, default"
|
|
"workspaces, 1, 6, default"
|
|
];
|
|
};
|
|
|
|
# Dwindle layout
|
|
dwindle = {
|
|
pseudotile = true;
|
|
preserve_split = true;
|
|
};
|
|
|
|
# Window rules
|
|
windowrulev2 = [
|
|
"suppressevent maximize, class:.*"
|
|
"idleinhibit fullscreen, class:.*"
|
|
];
|
|
|
|
# Startup
|
|
exec-once = [
|
|
"systemctl --user import-environment DISPLAY WAYLAND_DISPLAY XDG_CURRENT_DESKTOP"
|
|
"${pkgs.swaynotificationcenter}/bin/swaync"
|
|
"${pkgs.waybar}/bin/waybar"
|
|
"hyprpaper"
|
|
];
|
|
|
|
# Keybindings
|
|
bind = [
|
|
# Applications
|
|
"$mod, Return, exec, ${terminal}"
|
|
"$mod, c, killactive"
|
|
"$mod, p, exec, ${menu}"
|
|
"$mod, d, exec, ${emoji_picker}"
|
|
"$mod, z, exec, hyprctl reload"
|
|
|
|
# Focus
|
|
"$mod, ${left}, movefocus, l"
|
|
"$mod, ${down}, movefocus, d"
|
|
"$mod, ${up}, movefocus, u"
|
|
"$mod, ${right}, movefocus, r"
|
|
|
|
# Move windows
|
|
"$mod SHIFT, ${left}, movewindow, l"
|
|
"$mod SHIFT, ${down}, movewindow, d"
|
|
"$mod SHIFT, ${up}, movewindow, u"
|
|
"$mod SHIFT, ${right}, movewindow, r"
|
|
|
|
# Workspaces (qwertyuio)
|
|
"$mod, q, workspace, 1"
|
|
"$mod, w, workspace, 2"
|
|
"$mod, e, workspace, 3"
|
|
"$mod, r, workspace, 4"
|
|
"$mod, t, workspace, 5"
|
|
"$mod, y, workspace, 6"
|
|
"$mod, u, workspace, 7"
|
|
"$mod, i, workspace, 8"
|
|
"$mod, o, workspace, 9"
|
|
|
|
# Move to workspaces
|
|
"$mod SHIFT, q, movetoworkspace, 1"
|
|
"$mod SHIFT, w, movetoworkspace, 2"
|
|
"$mod SHIFT, e, movetoworkspace, 3"
|
|
"$mod SHIFT, r, movetoworkspace, 4"
|
|
"$mod SHIFT, t, movetoworkspace, 5"
|
|
"$mod SHIFT, y, movetoworkspace, 6"
|
|
"$mod SHIFT, u, movetoworkspace, 7"
|
|
"$mod SHIFT, i, movetoworkspace, 8"
|
|
"$mod SHIFT, o, movetoworkspace, 9"
|
|
|
|
# Layout
|
|
"$mod, v, togglesplit"
|
|
"$mod, f, fullscreen"
|
|
"$mod SHIFT, f, togglefloating"
|
|
# "$mod, space, focusmode, toggle"
|
|
# "$mod, a, focusparent"
|
|
|
|
# Screenshots
|
|
"$mod, period, exec, ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" ~/screenshots/\"$(date -u --iso-8601=seconds)\".png && ${pkgs.libnotify}/bin/notify-send \"Screenshot saved\""
|
|
"$mod SHIFT, period, exec, ${pkgs.grim}/bin/grim ~/screenshots/\"$(date -u --iso-8601=seconds)\".png && ${pkgs.libnotify}/bin/notify-send \"Screenshot saved\""
|
|
|
|
# Notifications
|
|
"$mod SHIFT, n, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"
|
|
"$mod SHIFT, d, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw"
|
|
|
|
"$mod SHIFT, x, exec, hyprctl dispatch exit"
|
|
"$mod, x, exec, ${pkgs.hyprlock}/bin/hyprlock"
|
|
|
|
# Scratchpad
|
|
"$mod SHIFT, minus, movetoworkspace, special:magic"
|
|
"$mod, minus, togglespecialworkspace, magic"
|
|
];
|
|
|
|
# Media keys
|
|
bindl = [
|
|
", XF86AudioRaiseVolume, exec, ${pkgs.pamixer}/bin/pamixer --increase 5"
|
|
", XF86AudioLowerVolume, exec, ${pkgs.pamixer}/bin/pamixer --decrease 5"
|
|
", XF86AudioMute, exec, ${pkgs.pamixer}/bin/pamixer --toggle-mute"
|
|
", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous"
|
|
", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next"
|
|
", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause"
|
|
", XF86MonBrightnessDown, exec, ${pkgs.light}/bin/light -U 5"
|
|
", XF86MonBrightnessUp, exec, ${pkgs.light}/bin/light -A 5"
|
|
];
|
|
};
|
|
};
|
|
|
|
# Hyprpaper configuration for wallpaper
|
|
services.hyprpaper = {
|
|
enable = true;
|
|
settings = {
|
|
ipc = "on";
|
|
splash = false;
|
|
splash_offset = 2.0;
|
|
|
|
preload = [
|
|
"${config.xdg.dataHome}/${cfg.wallpaperPath}"
|
|
];
|
|
|
|
wallpaper = [
|
|
",${config.xdg.dataHome}/${cfg.wallpaperPath}"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
}
|