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}"
|
|
|
|
|
|
|
|
# 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
|
|
|
|
|
|
|
|
}
|