dotfiles-nix/nix/programs/hypr/hyprland.nix

327 lines
9 KiB
Nix
Raw Normal View History

2025-01-23 14:26:51 +00:00
{ config, pkgs, lib, inputs, ... }:
let
system = pkgs.stdenv.hostPlatform.system;
hyprland = inputs.hyprland.packages.${system};
hyprland-plugins = inputs.hyprland-plugins.packages.${system};
hy3 = inputs.hy3.packages.${system};
2025-01-23 20:09:41 +00:00
debug = true;
2025-01-23 14:26:51 +00:00
in
{
2025-01-23 16:38:02 +00:00
environment = {
variables = {
2025-01-23 20:09:41 +00:00
HYPRLAND_TRACE = if debug then "1" else "0";
AQ_TRACE = if debug then "1" else "0";
2025-01-23 16:38:02 +00:00
XDG_CURRENT_DESKTOP = "Hyprland";
XDG_SESSION_TYPE = "wayland";
XDG_SESSION_DESKTOP = "Hyprland";
LIBSEAT_BACKEND = "logind";
};
sessionVariables = {
XCURSOR_THEME = "Adwaita";
XCURSOR_SIZE = "24";
GTK_THEME = "Orchis-Teal-Dark";
MOZ_ENABLE_WAYLAND = "1";
MOZ_USE_XINPUT = "1";
_JAVA_AWT_WM_NONREPARENTING = "1";
};
};
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
config = {
common.default = ["gtk"];
hyprland.default = ["gtk" "hyprland"];
};
extraPortals = [
pkgs.xdg-desktop-portal-gtk
pkgs.xdg-desktop-portal-wlr
hyprland.xdg-desktop-portal-hyprland
];
};
2025-01-23 14:26:51 +00:00
2025-01-24 02:05:37 +00:00
programs.xwayland.enable = true;
2025-01-23 16:38:02 +00:00
2025-01-23 14:26:51 +00:00
home-manager.users.${config.user} = {
wayland.windowManager.hyprland = {
enable = true;
package = hyprland.hyprland;
2025-01-24 02:05:37 +00:00
xwayland.enable = true;
2025-01-23 16:38:02 +00:00
systemd.enable = true;
2025-01-23 14:26:51 +00:00
# Plugins
plugins = [
hyprland-plugins.hyprexpo
hy3.hy3
];
# Config
settings = {
2025-01-23 16:38:02 +00:00
# Debug
2025-01-23 20:09:41 +00:00
debug.disable_logs = ! debug;
debug.disable_time = ! debug;
debug.enable_stdout_logs = debug;
2025-01-23 16:38:02 +00:00
2025-01-23 14:26:51 +00:00
# Monitors
monitor = map (monitor:
"${monitor.name}, highres, auto, ${toString monitor.scale}"
) config.monitors;
# Autostart
exec-once = config.autoRun;
# General
general = {
gaps_in = config.theme.innerGap;
gaps_out = config.theme.outerGap;
layout = "hy3";
resize_on_border = "yes";
extend_border_grab_area = 20;
border_size = config.theme.borderWidth;
"col.active_border" = "rgb(${config.theme.colors.accent})";
"col.inactive_border" = "rgb(${config.theme.colors.base04})";
};
# Gestures
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 3;
workspace_swipe_forever = true;
workspace_swipe_cancel_ratio = 0.15;
};
# Decoration
decoration = {
rounding = config.theme.outerRadius;
shadow.enabled = false;
blur = {
enabled = true;
size = 4;
passes = 2;
noise = 0.008;
contrast = 0.8916;
brightness = 0.8;
};
};
# Animations
animations = {
enabled = true;
bezier = [
"windowIn, 0.06, 0.71, 0.25, 1"
"windowResize, 0.04, 0.67, 0.38, 1"
];
animation = [
"windowsIn, 1, 3, windowIn, slide #popin 20%"
"windowsOut, 1, 3, windowIn, slide #popin 70%"
"windowsMove, 1, 2.5, windowResize"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 3, default"
"workspaces, 1, 6, default"
"layers, 1, 5, windowIn, slide"
];
};
# Input
input = {
kb_layout = "us";
kb_variant = "";
kb_model = "";
kb_options = "gtp:alt_shit_toggle, compose:ralt";
kb_rules = "";
follow_mouse = 1;
touchpad = {
natural_scroll = "yes";
};
sensitivity = 0;
};
# Keybinds
"$mod" = "SUPER";
bind = [
# Launch programs
"$mod, W, exec, ${config.default.browser}"
"$mod, D, exec, ${config.default.appLauncher}"
"$mod, L, exec, ${config.default.lockScreen}"
"$mod, Return, exec, ${config.default.terminal}"
2025-01-28 02:45:41 +00:00
", Print, exec, grimblast copy area"
2025-01-23 14:26:51 +00:00
# Misc
"$mod SHIFT, L, exit"
"$mod, tab, hyprexpo:expo, toggle"
# Window operations
"$mod SHIFT, Q, killactive"
"$mod SHIFT, SPACE, togglefloating"
"$mod, F, fullscreen"
"$mod, J, togglesplit"
# Move focus with mod + arrow keys
"$mod, left, movefocus, l"
"$mod, right, movefocus, r"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
# Move window across workspace with mod + arrow keys
"$mod SHIFT, left, hy3:movewindow, l"
"$mod SHIFT, right, hy3:movewindow, r"
"$mod SHIFT, up, hy3:movewindow, u"
"$mod SHIFT, down, hy3:movewindow, d"
# Switch workspaces with mod + [0-9]
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
# Move active window to a workspace with mod + SHIFT + [0-9]
"$mod SHIFT, 1, movetoworkspacesilent, 1"
"$mod SHIFT, 2, movetoworkspacesilent, 2"
"$mod SHIFT, 3, movetoworkspacesilent, 3"
"$mod SHIFT, 4, movetoworkspacesilent, 4"
"$mod SHIFT, 5, movetoworkspacesilent, 5"
"$mod SHIFT, 6, movetoworkspacesilent, 6"
"$mod SHIFT, 7, movetoworkspacesilent, 7"
"$mod SHIFT, 8, movetoworkspacesilent, 8"
"$mod SHIFT, 9, movetoworkspacesilent, 9"
"$mod SHIFT, 0, movetoworkspacesilent, 10"
# Move to tab
"LALT, 1, hy3:focustab, index, 01"
"LALT, 2, hy3:focustab, index, 02"
"LALT, 3, hy3:focustab, index, 03"
"LALT, 4, hy3:focustab, index, 04"
"LALT, 5, hy3:focustab, index, 05"
"LALT, 6, hy3:focustab, index, 06"
"LALT, 7, hy3:focustab, index, 07"
"LALT, 8, hy3:focustab, index, 08"
"LALT, 9, hy3:focustab, index, 09"
"LALT, 0, hy3:focustab, index, 10"
"$mod SHIFT, B, hy3:makegroup, h"
"$mod SHIFT, V, hy3:makegroup, v"
"$mod SHIFT, C, hy3:changegroup, toggletab"
# Scroll through existing workspaces with mod + scroll
"$mod, mouse_down, workspace, e+1"
"$mod, mouse_up, workspace, e-1"
];
bindn = [
# Focus windows with scroll wheel or middle click
", mouse:272, hy3:focustab, mouse"
", mouse_down, hy3:focustab, l, require_hovered"
", mouse_up, hy3:focustab, r, require_hovered"
];
bindm = [
# Move/resize windows with mod + LMB/RMB and dragging
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
binde = [
# Audio
# raise volume
", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+"
# lower volume
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
# mute speaker
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
# mute mic
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
# Media
# play
", XF86AudioPlay, exec, playerctl play-pause"
# next
", XF86AudioNext, exec, playerctl next"
# prev
", XF86AudioPrev, exec, playerctl previous"
# Backlight
", XF86MonBrightnessDown, exec, brightnessctl set 5%-"
", XF86MonBrightnessUp, exec, brightnessctl set 5%+"
];
# Plugin configuration
plugin = {
# hy3
hy3 = {
tabs = {
height = 24;
text_height = 9;
text_padding = 10;
padding = 2;
render_text = true;
text_font = "monospace";
radius = config.theme.outerRadius;
"col.active" = "rgb(${config.theme.colors.base00})";
"col.inactive" = "rgb(${config.theme.colors.base00})";
"col.text.active" = "rgb(${config.theme.colors.base05})";
"col.text.inactive" = "rgb(${config.theme.colors.base05})";
"col.border.active" = "rgb(${config.theme.colors.accent})";
"col.border.inactive" = "rgb(${config.theme.colors.base04})";
};
autotile = {
enable = true;
};
};
};
# XWayland
xwayland = {
force_zero_scaling = "true";
use_nearest_neighbor = "false";
};
# Misc
misc = {
disable_hyprland_logo = true;
disable_splash_rendering = true;
key_press_enables_dpms = true;
mouse_move_enables_dpms = true;
vrr = 1;
};
}; # end settings
}; # end hyprland
}; # end home-manager
}