2026-05-02 09:08:40 +02:00
# Hyprland window manager with keybindings, window rules, idle/lock, and hyprpaper.
{
config ,
lib ,
. . .
}:
with lib ; let
cfg = config . desktop . wm . hyprland ;
in {
options . desktop . wm . hyprland . enable = mkEnableOption " H y p r l a n d w i n d o w m a n a g e r " ;
config = mkIf cfg . enable {
wayland . windowManager . hyprland = {
2026-05-18 20:09:28 +02:00
configType = " h y p r l a n g " ;
2026-05-02 09:08:40 +02:00
settings = {
xwayland = {
force_zero_scaling = true ;
} ;
2026-06-01 19:34:00 +02:00
source = [
" ~ / . c o n f i g / h y p r / d m s / c o l o r s . c o n f "
" ~ / . c o n f i g / h y p r / d m s / l a y o u t . c o n f "
" ~ / . c o n f i g / h y p r / m o n i t o r s . c o n f "
] ;
2026-05-02 09:08:40 +02:00
exec-once = [
" v i b e t y p e r "
] ;
env = [
" X C U R S O R _ S I Z E , 3 2 "
" H Y P R C U R S O R _ T H E M E , B i b a t a - M o d e r n - I c e "
" W L R _ N O _ H A R D W A R E _ C U R S O R S , 1 "
" X D G _ C U R R E N T _ D E S K T O P , H y p r l a n d "
" X D G _ S E S S I O N _ T Y P E , w a y l a n d "
" X D G _ S E S S I O N _ D E S K T O P , H y p r l a n d "
" X K B _ D E F A U L T _ L A Y O U T , d e "
" N I X O S _ O Z O N E _ W L , 1 "
2026-06-01 19:34:00 +02:00
" Q T _ Q P A _ P L A T F O R M , w a y l a n d ; x c b "
" Q T _ Q P A _ P L A T F O R M T H E M E , g t k 3 "
" Q T _ Q P A _ P L A T F O R M T H E M E _ Q T 6 , g t k 3 "
2026-05-02 09:08:40 +02:00
] ;
input = {
kb_layout = " d e , u s " ;
kb_variant = " " ;
kb_model = " " ;
kb_rules = " " ;
kb_options = " c t r l : n o c a p s " ;
follow_mouse = 1 ;
} ;
general = {
gaps_in = 5 ;
gaps_out = 5 ;
border_size = 1 ;
layout = " d w i n d l e " ;
} ;
decoration = {
shadow = {
enabled = true ;
range = 60 ;
render_power = 3 ;
2026-06-01 19:34:00 +02:00
# color = "rgba(${config.colorScheme.palette.base00}66)";
2026-05-02 09:08:40 +02:00
offset = " 1 2 " ;
scale = 0 .97 ;
} ;
rounding = 8 ;
blur = {
enabled = true ;
size = 3 ;
passes = 3 ;
} ;
active_opacity = 0 .9 ;
inactive_opacity = 0 .5 ;
} ;
animations = {
enabled = true ;
bezier = " m y B e z i e r , 0 . 0 5 , 0 . 9 , 0 . 1 , 1 . 0 5 " ;
animation = [
" w i n d o w s , 1 , 7 , m y B e z i e r "
" w i n d o w s O u t , 1 , 7 , d e f a u l t , p o p i n 8 0 % "
" b o r d e r , 1 , 1 0 , d e f a u l t "
" b o r d e r a n g l e , 1 , 8 , d e f a u l t "
" f a d e , 1 , 7 , d e f a u l t "
" w o r k s p a c e s , 1 , 6 , d e f a u l t "
] ;
} ;
dwindle = {
2026-05-18 20:15:25 +02:00
# pseudotile = true; # TODO
2026-05-02 09:08:40 +02:00
preserve_split = true ;
} ;
master = {
new_status = " m a s t e r " ;
} ;
device = [
{
name = " z s a - t e c h n o l o g y - l a b s - m o o n l a n d e r - m a r k - i " ;
kb_layout = " u s " ;
}
2026-06-11 07:14:21 +02:00
{
2026-06-11 07:14:35 +02:00
name = " v i b e - t y p e r - v i r t u a l - k e y b o a r d " ;
2026-06-13 08:17:16 +02:00
kb_layout = " d e " ;
2026-06-11 07:14:21 +02:00
}
2026-05-02 09:08:40 +02:00
{
name = " k e y c h r o n - k e y c h r o n - k 7 " ;
kb_layout = " u s " ;
}
] ;
windowrule = [
" m a t c h : c l a s s f i l e _ p r o g r e s s , f l o a t o n "
" m a t c h : c l a s s c o n f i r m , f l o a t o n "
" m a t c h : c l a s s d i a l o g , f l o a t o n "
" m a t c h : c l a s s d o w n l o a d , f l o a t o n "
" m a t c h : c l a s s n o t i f i c a t i o n , f l o a t o n "
" m a t c h : c l a s s e r r o r , f l o a t o n "
" m a t c h : c l a s s s p l a s h , f l o a t o n "
" m a t c h : c l a s s c o n f i r m r e s e t , f l o a t o n "
" m a t c h : t i t l e O p e n F i l e , f l o a t o n "
" m a t c h : t i t l e b r a n c h d i a l o g , f l o a t o n "
" m a t c h : c l a s s p a v u c o n t r o l - q t , f l o a t o n "
" m a t c h : c l a s s p a v u c o n t r o l , f l o a t o n "
" m a t c h : c l a s s c l a s s : ^ ( e s p a n s o ) $ , f l o a t o n "
" m a t c h : c l a s s w l o g o u t , f u l l s c r e e n o n "
" m a t c h : t i t l e w l o g o u t , f l o a t o n "
" m a t c h : t i t l e w l o g o u t , f u l l s c r e e n o n "
" m a t c h : c l a s s m p v , f l o a t o n "
" m a t c h : c l a s s m p v , i d l e _ i n h i b i t f o c u s "
" m a t c h : c l a s s m p v , o p a c i t y 1 . 0 o v e r r i d e "
" m a t c h : t i t l e ^ ( M e d i a v i e w e r ) $ , f l o a t o n "
" m a t c h : t i t l e ^ ( V o l u m e C o n t r o l ) $ , f l o a t o n "
" m a t c h : t i t l e ^ ( P i c t u r e - i n - P i c t u r e ) $ , f l o a t o n "
" m a t c h : t i t l e ^ ( f l o a t i n g - p o m o d o r o ) $ , f l o a t o n "
" m a t c h : t i t l e ^ ( f l o a t i n g - p o m o d o r o ) $ , s i z e 2 5 0 5 0 "
" m a t c h : t i t l e ^ ( f l o a t i n g - p o m o d o r o ) $ , m o v e 1 2 ( m o n i t o r _ h - 1 5 0 ) "
" m a t c h : t i t l e ^ ( f l o a t i n g - p o m o d o r o ) $ , p i n o n "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , f l o a t o n "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , p i n o n "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , s i z e 8 0 0 4 0 0 "
" m a t c h : i n i t i a l _ t i t l e . * a l e r t - b o x . * , m o v e 1 0 0 % - 8 2 0 1 0 2 "
" m a t c h : i n i t i a l _ t i t l e . * c h a t - b o x . * , m o v e 1 0 0 % - 8 2 0 5 1 2 "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , o p a c i t y 0 . 5 o v e r r i d e "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , i d l e _ i n h i b i t f o c u s "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , n o _ a n i m o n "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , d e c o r a t e o f f "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , n o _ s h a d o w o n "
" m a t c h : i n i t i a l _ t i t l e . * s t r e a m l a b s . c o m . * , n o _ b l u r o n "
" m a t c h : c l a s s ^ v i b e - t y p e r $ , m a t c h : t i t l e ^ R e c o r d i n g I n d i c a t o r $ , n o _ b l u r o n "
" b o r d e r _ c o l o r r g b ( f f f f f f ) , m a t c h : x w a y l a n d 1 "
] ;
" $ m a i n M o d " = " S U P E R " ;
" $ t e r m i n a l " = " g h o s t t y " ;
bind = [
" $ m a i n M o d , r e t u r n , e x e c , $ t e r m i n a l n u - c z e l l i j - p s "
" $ m a i n M o d , t , e x e c , $ t e r m i n a l - e n u - c ' n i t c h ; e x e c n u ' "
" $ m a i n M o d S H I F T , t , e x e c , l a u n c h - t i m e r "
" $ m a i n M o d , n , e x e c , $ t e r m i n a l - e n v i m "
" $ m a i n M o d , z , e x e c , u w s m a p p - - z e d i t o r "
" $ m a i n M o d , o , e x e c , h y p r c t l d i s p a t c h s e t p r o p a c t i v e w i n d o w o p a q u e t o g g l e "
" $ m a i n M o d , r , e x e c , h y p r c t l d i s p a t c h f o c u s w i n d o w \" i n i t i a l t i t l e : . * a l e r t - b o x . * \" & & h y p r c t l d i s p a t c h m o v e a c t i v e e x a c t 4 3 0 0 1 0 2 & & h y p r c t l d i s p a t c h f o c u s w i n d o w \" i n i t i a l t i t l e : . * c h a t - b o x . * \" & & h y p r c t l d i s p a t c h m o v e a c t i v e e x a c t 4 3 0 0 5 1 2 "
" $ m a i n M o d , b , e x e c , u w s m a p p - - t h u n a r "
" $ m a i n M o d S H I F T , B , e x e c , u w s m a p p - - v i v a l d i "
2026-06-01 19:34:00 +02:00
" $ m a i n M o d , E s c a p e , e x e c , u w s m a p p - - d m s i p c c a l l p o w e r m e n u t o g g l e "
# "$mainMod, Space, togglefloating"
2026-05-02 09:08:40 +02:00
" $ m a i n M o d , q , k i l l a c t i v e "
" $ m a i n M o d , M , e x i t "
" $ m a i n M o d , F , f u l l s c r e e n "
" $ m a i n M o d S H I F T , V , t o g g l e f l o a t i n g "
2026-06-01 19:34:00 +02:00
" $ m a i n M o d , D , e x e c , u w s m a p p - - d m s i p c c a l l s p o t l i g h t t o g g l e "
" $ m a i n M o d , V , e x e c , u w s m a p p - - d m s i p c c a l l c l i p b o a r d t o g g l e "
2026-05-02 09:08:40 +02:00
" $ m a i n M o d , C , e x e c , b a s h - c ' F I L E = / t m p / s c r e e n s h o t _ $ ( d a t e + % s ) . p n g ; g r i m - g \" $ ( s l u r p ) \" \" $ F I L E \" & & k s n i p \" $ F I L E \" ' "
" $ m a i n M o d S H I F T , S , e x e c , u w s m a p p - - r o f i - s h o w e m o j i "
" $ m a i n M o d , P , e x e c , u w s m a p p - - r o f i - p a s s "
" $ m a i n M o d S H I F T , P , p s e u d o "
" $ m a i n M o d , R , e x e c , s t t - p t t s t a r t "
" $ m a i n M o d , S , e x e c , s t t - p t t s t a r t "
2026-05-18 20:15:25 +02:00
# "$mainMod, J, togglesplit" # TODO
2026-05-02 09:08:40 +02:00
" $ m a i n M o d , h , m o v e f o c u s , l "
" $ m a i n M o d , l , m o v e f o c u s , r "
" $ m a i n M o d , k , m o v e f o c u s , u "
" $ m a i n M o d , j , m o v e f o c u s , d "
" $ m a i n M o d , 1 , w o r k s p a c e , 1 "
" $ m a i n M o d , 2 , w o r k s p a c e , 2 "
" $ m a i n M o d , 3 , w o r k s p a c e , 3 "
" $ m a i n M o d , 4 , w o r k s p a c e , 4 "
" $ m a i n M o d , 5 , w o r k s p a c e , 5 "
" $ m a i n M o d , 6 , w o r k s p a c e , 6 "
" $ m a i n M o d , 7 , w o r k s p a c e , 7 "
" $ m a i n M o d , 8 , w o r k s p a c e , 8 "
" $ m a i n M o d , 9 , w o r k s p a c e , 9 "
" $ m a i n M o d , 0 , w o r k s p a c e , 1 0 "
" $ m a i n M o d S H I F T , 1 , m o v e t o w o r k s p a c e , 1 "
" $ m a i n M o d S H I F T , 2 , m o v e t o w o r k s p a c e , 2 "
" $ m a i n M o d S H I F T , 3 , m o v e t o w o r k s p a c e , 3 "
" $ m a i n M o d S H I F T , 4 , m o v e t o w o r k s p a c e , 4 "
" $ m a i n M o d S H I F T , 5 , m o v e t o w o r k s p a c e , 5 "
" $ m a i n M o d S H I F T , 6 , m o v e t o w o r k s p a c e , 6 "
" $ m a i n M o d S H I F T , 7 , m o v e t o w o r k s p a c e , 7 "
" $ m a i n M o d S H I F T , 8 , m o v e t o w o r k s p a c e , 8 "
" $ m a i n M o d S H I F T , 9 , m o v e t o w o r k s p a c e , 9 "
" $ m a i n M o d S H I F T , 0 , m o v e t o w o r k s p a c e , 1 0 "
" $ m a i n M o d , m o u s e _ d o w n , w o r k s p a c e , e + 1 "
" $ m a i n M o d , m o u s e _ u p , w o r k s p a c e , e - 1 "
] ;
bindr = [
] ;
bindm = [
" $ m a i n M o d , m o u s e : 2 7 2 , m o v e w i n d o w "
" $ m a i n M o d , m o u s e : 2 7 3 , r e s i z e w i n d o w "
] ;
} ;
} ;
2026-06-01 19:34:00 +02:00
# services.hypridle = {
# enable = true;
# settings = {
# general = {
# before_sleep_cmd = "hyprlock";
# after_sleep_cmd = "hyprctl dispatch dpms on";
# inhibit_sleep = 3;
# };
# listener = [
# {
# timeout = 300;
# on-timeout = "hyprlock";
# }
# {
# timeout = 420;
# on-timeout = "hyprctl dispatch dpms off";
# on-resume = "hyprctl dispatch dpms on";
# }
# ];
# };
# };
2026-05-02 09:08:40 +02:00
2026-06-01 19:34:00 +02:00
# services.hyprpaper.enable = true;
2026-05-02 09:08:40 +02:00
2026-06-01 19:34:00 +02:00
# programs.hyprlock = {
# enable = true;
# settings = {
# "$font" = "JetBrainsMono Nerd Font";
# "$base" = "rgb(${config.colorScheme.palette.base00})";
# "$text" = "rgb(${config.colorScheme.palette.base05})";
# "$textAlpha" = "${config.colorScheme.palette.base05}";
# "$accentAlpha" = "${config.colorScheme.palette.base0D}";
# "$red" = "rgb(${config.colorScheme.palette.base08})";
# "$yellow" = "rgb(${config.colorScheme.palette.base0A})";
2026-05-02 09:08:40 +02:00
2026-06-01 19:34:00 +02:00
# general = {
# hide_cursor = true;
# };
2026-05-02 09:08:40 +02:00
2026-06-01 19:34:00 +02:00
# background = {
# monitor = "";
# path = "${config.home.homeDirectory}/.config/hypr/wallpapers/wallhaven-lmmo8r.jpg";
# blur_passes = 0;
# color = "rgb(${config.colorScheme.palette.base00})";
# };
2026-05-02 09:08:40 +02:00
2026-06-01 19:34:00 +02:00
# label = [
# {
# monitor = "";
# text = "$TIME";
# color = "$text";
# font_size = 90;
# font_family = "$font";
# position = "30, 0";
# halign = "left";
# valign = "top";
# }
# {
# monitor = "";
# text = ''cmd[update:43200000] echo "$(date +"%A, %d %B %Y")"'';
# color = "$text";
# font_size = 25;
# font_family = "$font";
# position = "30, -150";
# halign = "left";
# valign = "top";
# }
# ];
2026-05-02 09:08:40 +02:00
2026-06-01 19:34:00 +02:00
# input-field = [
# {
# monitor = "";
# size = "300, 60";
# outline_thickness = 4;
# dots_size = 0.2;
# dots_spacing = 0.2;
# dots_center = true;
# outer_color = "rgb(${config.colorScheme.palette.base0D})";
# inner_color = "rgb(${config.colorScheme.palette.base00})";
# font_color = "rgb(${config.colorScheme.palette.base05})";
# fade_on_empty = false;
# placeholder_text = ''<span foreground="##${config.colorScheme.palette.base05}"> Logged in as <span foreground="##${config.colorScheme.palette.base0D}">$USER</span></span>'';
# hide_input = false;
# check_color = "rgb(${config.colorScheme.palette.base0D})";
# fail_color = "rgb(${config.colorScheme.palette.base08})";
# fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>'';
# capslock_color = "rgb(${config.colorScheme.palette.base0A})";
# position = "0, -35";
# halign = "center";
# valign = "center";
# }
# ];
# };
# };
2026-05-02 09:08:40 +02:00
} ;
}