2024-10-20 00:30:58 +02:00
{
2025-08-28 20:28:10 +02:00
config ,
lib ,
. . .
} :
with lib ; let
cfg = config . features . desktop . hyprland ;
in {
options . features . desktop . hyprland . enable =
mkEnableOption " H y p r l a n d r e l a t e d s t u f f " ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +02:00
config = mkIf cfg . enable {
wayland . windowManager . hyprland = {
settings = {
xwayland = {
force_zero_scaling = true ;
} ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +02:00
exec-once = [
" h y p r p a n e l "
2026-01-10 18:09:58 +01:00
" w h i l e ! h y p r p a p e r - r a n d o m ; d o s l e e p 0 . 5 ; d o n e "
2025-08-28 20:28:10 +02:00
" w l - p a s t e - - t y p e t e x t - - w a t c h c l i p h i s t s t o r e " # Stores only text data
" w l - p a s t e - - t y p e i m a g e - - w a t c h c l i p h i s t s t o r e " # Stores only image data "wl-paste -p -t text --watch clipman store -P --histpath=\"~/.local/share/clipman-primary.json\""
] ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +02:00
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 "
" G T K _ T H E M E , D r a c u l a "
2026-01-09 18:18:45 +01:00
" 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 "
2026-01-23 18:14:08 +01:00
" N I X O S _ O Z O N E _ W L , 1 "
2025-08-28 20:28:10 +02:00
] ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +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 ;
2024-12-06 10:16:17 +01:00
} ;
2025-08-28 20:28:10 +02:00
general = {
gaps_in = 5 ;
gaps_out = 5 ;
border_size = 1 ;
2025-08-30 14:32:25 +02:00
# Keeping the existing active border as requested
2025-08-28 20:28:10 +02:00
" c o l . a c t i v e _ b o r d e r " = " r g b a ( 9 7 4 2 b 5 e e ) r g b a ( 9 7 4 2 b 5 e e ) 4 5 d e g " ;
2025-08-30 14:32:25 +02:00
" c o l . i n a c t i v e _ b o r d e r " = " r g b a ( ${ config . colorScheme . palette . base03 } a a ) " ;
2025-08-28 20:28:10 +02:00
layout = " d w i n d l e " ;
2024-10-20 00:30:58 +02:00
} ;
2025-08-28 20:28:10 +02:00
decoration = {
shadow = {
enabled = true ;
range = 60 ;
render_power = 3 ;
2025-08-30 14:32:25 +02:00
color = " r g b a ( ${ config . colorScheme . palette . base00 } 6 6 ) " ;
2025-08-28 20:28:10 +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 ;
} ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +02:00
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 "
] ;
} ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +02:00
dwindle = {
pseudotile = true ;
preserve_split = true ;
} ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +02:00
master = {
new_status = " m a s t e r " ;
} ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +02:00
device = [
{
name = " e p i c - m o u s e - v 1 " ;
sensitivity = -0 .5 ;
}
{
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 " ;
}
{
name = " k e y c h r o n - k e y c h r o n - k 7 " ;
kb_layout = " u s " ;
}
] ;
windowrule = [
2026-01-09 12:30:20 +01:00
# Floating dialogs
" 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 "
# wlogout
" 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 "
# mpv
" 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 "
# Media/Volume/PiP
" 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 "
# Pomodoro timer
" 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 "
# Streamlabs overlays
" 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 "
2026-01-10 18:09:58 +01:00
" 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 "
2025-08-28 20:28:10 +02:00
] ;
" $ m a i n M o d " = " S U P E R " ;
2025-09-04 18:15:37 +02:00
" $ t e r m i n a l " = " k i t t y " ;
2024-10-20 00:30:58 +02:00
2025-08-28 20:28:10 +02:00
bind = [
2025-09-04 18:15:37 +02:00
" $ 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 "
2025-08-28 20:28:10 +02:00
# "$mainMod, t, exec, warp-terminal"
2025-09-04 18:15:37 +02:00
" $ 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 ' "
2025-09-04 18:21:56 +02:00
" $ 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 "
2025-09-04 18:15:37 +02:00
" $ 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 "
2025-08-28 20:28:10 +02:00
" $ m a i n M o d , o , e x e c , h y p r c t l 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 "
2025-09-04 18:15:37 +02:00
" $ 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 "
" $ m a i n M o d , E s c a p e , e x e c , u w s m a p p - - w l o g o u t - p l a y e r - s h e l l "
2025-08-28 20:28:10 +02:00
" $ m a i n M o d , S p a c e , t o g g l e f l o a t i n g "
" $ 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 "
2025-09-04 20:23:31 +02:00
" $ m a i n M o d , D , e x e c , u w s m a p p - - r o f i - s h o w d r u n - r u n - c o m m a n d \" u w s m a p p - - { c m d } \" "
2025-09-04 18:15:37 +02:00
" $ m a i n M o d , V , e x e c , u w s m a p p - - c l i p h i s t l i s t | r o f i - d m e n u | c l i p h i s t d e c o d e | w l - c o p y "
2026-01-10 18:09:58 +01: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 \" ' "
2025-09-04 18:15:37 +02:00
" $ 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 "
2025-08-28 20:28:10 +02:00
" $ m a i n M o d S H I F T , P , p s e u d o "
2026-01-02 15:12:26 +01:00
" $ m a i n M o d , R , e x e c , s t t - p t t s t a r t "
2025-08-28 20:28:10 +02:00
" $ m a i n M o d , J , t o g g l e s p l i t "
" $ 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 "
] ;
2026-01-02 15:12:26 +01:00
bindr = [
" $ m a i n M o d , R , e x e c , s t t - p t t s t o p "
] ;
2025-08-28 20:28:10 +02:00
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 "
] ;
} ;
2024-10-20 00:30:58 +02:00
} ;
2026-01-10 18:09:58 +01:00
services . hypridle = {
enable = true ;
settings = {
general = {
before_sleep_cmd = " h y p r l o c k " ;
after_sleep_cmd = " h y p r c t l d i s p a t c h d p m s o n " ;
inhibit_sleep = 3 ;
} ;
listener = [
{
timeout = 300 ; # 5 min
on-timeout = " h y p r l o c k " ;
}
{
timeout = 420 ; # 5.5 min
on-timeout = " h y p r c t l d i s p a t c h d p m s o f f " ;
on-resume = " h y p r c t l d i s p a t c h d p m s o n " ;
}
] ;
} ;
} ;
services . hyprpaper . enable = true ;
programs . hyprlock = {
enable = true ;
settings = {
" $ f o n t " = " J e t B r a i n s M o n o N e r d F o n t " ;
" $ b a s e " = " r g b ( ${ config . colorScheme . palette . base00 } ) " ;
" $ t e x t " = " r g b ( ${ config . colorScheme . palette . base05 } ) " ;
" $ t e x t A l p h a " = " ${ config . colorScheme . palette . base05 } " ;
" $ a c c e n t A l p h a " = " ${ config . colorScheme . palette . base0D } " ;
" $ r e d " = " r g b ( ${ config . colorScheme . palette . base08 } ) " ;
" $ y e l l o w " = " r g b ( ${ config . colorScheme . palette . base0A } ) " ;
general = {
hide_cursor = true ;
} ;
background = {
monitor = " " ;
path = " ${ config . home . homeDirectory } / . c o n f i g / h y p r / w a l l p a p e r s / w a l l h a v e n - l m m o 8 r . j p g " ;
blur_passes = 0 ;
color = " r g b ( ${ config . colorScheme . palette . base00 } ) " ;
} ;
label = [
{
monitor = " " ;
text = " $ T I M E " ;
color = " $ t e x t " ;
font_size = 90 ;
font_family = " $ f o n t " ;
position = " 3 0 , 0 " ;
halign = " l e f t " ;
valign = " t o p " ;
}
{
monitor = " " ;
text = '' c m d [ u p d a t e : 4 3 2 0 0 0 0 0 ] e c h o " $( d a t e + " % A , % d % B % Y " ) " '' ;
color = " $ t e x t " ;
font_size = 25 ;
font_family = " $ f o n t " ;
position = " 3 0 , - 1 5 0 " ;
halign = " l e f t " ;
valign = " t o p " ;
}
] ;
input-field = [
{
monitor = " " ;
size = " 3 0 0 , 6 0 " ;
outline_thickness = 4 ;
dots_size = 0 .2 ;
dots_spacing = 0 .2 ;
dots_center = true ;
outer_color = " r g b ( ${ config . colorScheme . palette . base0D } ) " ;
inner_color = " r g b ( ${ config . colorScheme . palette . base00 } ) " ;
font_color = " r g b ( ${ config . colorScheme . palette . base05 } ) " ;
fade_on_empty = false ;
placeholder_text = '' < s p a n f o r e g r o u n d = " # # ${ config . colorScheme . palette . base05 } " > L o g g e d i n a s < s p a n f o r e g r o u n d = " # # ${ config . colorScheme . palette . base0D } " > $U S E R < / s p a n > < / s p a n > '' ;
hide_input = false ;
check_color = " r g b ( ${ config . colorScheme . palette . base0D } ) " ;
fail_color = " r g b ( ${ config . colorScheme . palette . base08 } ) " ;
fail_text = '' < i > $F A I L < b > ( $A T T E M P T S ) < / b > < / i > '' ;
capslock_color = " r g b ( ${ config . colorScheme . palette . base0A } ) " ;
position = " 0 , - 3 5 " ;
halign = " c e n t e r " ;
valign = " c e n t e r " ;
}
] ;
} ;
} ;
2024-10-20 00:30:58 +02:00
} ;
}