289 lines
8.4 KiB
Nix
289 lines
8.4 KiB
Nix
{ user }: { lib, pkgs, config, ... }:
|
||
with lib;
|
||
let
|
||
cfg = config.windowManager;
|
||
in
|
||
{
|
||
options.windowManager = {
|
||
hyprland = mkEnableOption "hyprland";
|
||
sway = mkEnableOption "sway";
|
||
};
|
||
|
||
config = mkIf (cfg.sway || cfg.hyprland) {
|
||
services.greetd = {
|
||
enable = true;
|
||
settings = rec {
|
||
hypr_session = {
|
||
command = "Hyprland";
|
||
user = user;
|
||
};
|
||
sway_session = {
|
||
command = "sway";
|
||
user = user;
|
||
};
|
||
default_session = if cfg.sway then sway_session else hypr_session;
|
||
};
|
||
};
|
||
|
||
home-manager.users.${user}.imports = [{
|
||
wayland.windowManager.hyprland = mkIf cfg.hyprland {
|
||
enable = true;
|
||
systemd.enable = true;
|
||
settings = {
|
||
input = {
|
||
touchpad = {
|
||
natural_scroll = true;
|
||
scroll_factor = 0.5;
|
||
};
|
||
};
|
||
gestures = {
|
||
workspace_swipe = true;
|
||
workspace_swipe_numbered = true;
|
||
};
|
||
decoration = {
|
||
rounding = 5;
|
||
drop_shadow = false;
|
||
};
|
||
bezier = [
|
||
"overshot, 0.05, 0.9, 0.1, 1.1"
|
||
"linear, 0.0, 0.0, 1.0, 1.0"
|
||
];
|
||
animations = {
|
||
enabled = true;
|
||
animation = [
|
||
"windows, 1, 1, default, popin"
|
||
"border, 1, 1, default"
|
||
"fade, 1, 1, default"
|
||
"workspaces, 1, 3, overshot"
|
||
"borderangle,1, 50, linear, loop"
|
||
];
|
||
};
|
||
bind = [
|
||
"SUPER, h, movefocus,l"
|
||
"SUPER, l, movefocus,r"
|
||
"SUPER, j, layoutmsg,cyclenext"
|
||
"SUPER, k, layoutmsg,cycleprev"
|
||
"SUPER, space, layoutmsg,swapwithmaster master"
|
||
"SUPER, F, fullscreen,"
|
||
"SUPER, V, togglefloating,"
|
||
"SUPER, W, layoutmsg, orientationprev"
|
||
"SUPER_SHIFT, W, layoutmsg, orientationnext"
|
||
"SUPER_SHIFT, V, togglegroup,"
|
||
"SUPER_SHIFT, h, changegroupactive,b"
|
||
"SUPER_SHIFT, h, moveintogroup,l"
|
||
"SUPER_SHIFT, l, moveintogroup,r"
|
||
"SUPER_SHIFT, l, changegroupactive,f"
|
||
"SUPER, Y, togglespecialworkspace"
|
||
"SUPER_SHIFT, Y, movetoworkspace, special"
|
||
"SUPER, R, submap, resize"
|
||
"SUPER,1,workspace,1"
|
||
"SUPER,2,workspace,2"
|
||
"SUPER,3,workspace,3"
|
||
"SUPER,4,workspace,4"
|
||
"SUPER,5,workspace,5"
|
||
"SUPER,6,workspace,6"
|
||
"SUPER,7,workspace,7"
|
||
"SUPER,8,workspace,8"
|
||
"SUPER,9,workspace,9"
|
||
"SUPER,0,workspace,10"
|
||
"SUPER,left,workspace,r-1"
|
||
"SUPER,right,workspace,r+1"
|
||
"SUPER_SHIFT,1,movetoworkspace,1"
|
||
"SUPER_SHIFT,2,movetoworkspace,2"
|
||
"SUPER_SHIFT,3,movetoworkspace,3"
|
||
"SUPER_SHIFT,4,movetoworkspace,4"
|
||
"SUPER_SHIFT,5,movetoworkspace,5"
|
||
"SUPER_SHIFT,6,movetoworkspace,6"
|
||
"SUPER_SHIFT,7,movetoworkspace,7"
|
||
"SUPER_SHIFT,8,movetoworkspace,8"
|
||
"SUPER_SHIFT,9,movetoworkspace,9"
|
||
"SUPER_SHIFT,0,movetoworkspace,10"
|
||
];
|
||
bindm = [
|
||
"SUPER, mouse:272, movewindow"
|
||
"SUPER, mouse:273, resizewindow"
|
||
];
|
||
env = [
|
||
"GDK_BACKEND,wayland,x11"
|
||
"QT_QPA_PLATFORM,wayland;xcb"
|
||
"SDL_VIDEODRIVER,wayland"
|
||
"CLUTTER_BACKEND,wayland"
|
||
"XDG_CURRENT_DESKTOP,Hyprland"
|
||
"XDG_SESSION_TYPE,wayland"
|
||
"XDG_SESSION_DESKTOP,Hyprland"
|
||
"QT_AUTO_SCREEN_SCALE_FACTOR,1"
|
||
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
|
||
"NIXOS_OZONE_WL,1"
|
||
];
|
||
windowrule = [
|
||
"float, title:wlogout"
|
||
"idleinhibit always, vrmonitor"
|
||
"idleinhibit focus, steam_app"
|
||
];
|
||
workspace = [
|
||
"11, default:true"
|
||
];
|
||
general = {
|
||
gaps_out = 10;
|
||
resize_on_border = true;
|
||
layout = "master";
|
||
# "col.active_border" = "rgb(FFFF00) rgb(00FFFF) rgb(FF00FF)";
|
||
border_size = 5;
|
||
};
|
||
master = {
|
||
mfact = 0.7;
|
||
new_on_top = true;
|
||
};
|
||
misc = {
|
||
vrr = 2;
|
||
focus_on_activate = true;
|
||
};
|
||
};
|
||
# https://wiki.hyprland.org/Configuring/Variables/
|
||
extraConfig = ''
|
||
submap = resize
|
||
binde = ,right,resizeactive,10 0
|
||
binde = ,left,resizeactive,-10 0
|
||
binde = ,up,resizeactive,0 -10
|
||
binde = ,down,resizeactive,0 10
|
||
binde = ,k,resizeactive,0 -10
|
||
binde = ,j,resizeactive,0 10
|
||
binde = ,l,splitratio,0.05
|
||
binde = ,h,splitratio,-0.05
|
||
binde = SHIFT,l,splitratio,0.3
|
||
binde = SHIFT,h,splitratio,-0.3
|
||
|
||
bind = , escape, submap,reset
|
||
bind = , enter, submap,reset
|
||
bind = SUPER, R, submap,reset
|
||
bind = CONTROL, C, submap,reset
|
||
submap = reset
|
||
'';
|
||
};
|
||
|
||
wayland.windowManager.sway = mkIf cfg.sway {
|
||
enable = true;
|
||
};
|
||
|
||
programs.swaylock = {
|
||
enable = true;
|
||
package = pkgs.swaylock-effects;
|
||
settings = {
|
||
clock = true;
|
||
screenshots = true;
|
||
effect-scale = 0.5;
|
||
effect-blur = "10x10";
|
||
grace = 5;
|
||
};
|
||
};
|
||
|
||
services.swayidle = {
|
||
enable = true;
|
||
systemdTarget = "graphical-session.target";
|
||
events = [
|
||
{ event = "before-sleep"; command = "${pkgs.swaylock-effects}/bin/swaylock"; }
|
||
{ event = "lock"; command = "${pkgs.swaylock-effects}/bin/swaylock"; }
|
||
];
|
||
timeouts = [
|
||
{
|
||
timeout = 300;
|
||
command = "${pkgs.swaylock-effects}/bin/swaylock -f";
|
||
}
|
||
{
|
||
timeout = 600;
|
||
command = "systemctl suspend";
|
||
}
|
||
];
|
||
};
|
||
|
||
services.mako = {
|
||
enable = true;
|
||
};
|
||
|
||
programs.waybar = {
|
||
enable = true;
|
||
settings = {
|
||
mainBar = {
|
||
layer = "top";
|
||
position = "top";
|
||
height = 36;
|
||
modules-left = [ "hyprland/workspaces" "hyprland/window" ];
|
||
modules-right = [ "mpris" "pulseaudio" "clock" "tray" "battery" ];
|
||
clock = {
|
||
format = "📅 {:%a %b-%d %I:%M %p}";
|
||
};
|
||
pulseaudio = {
|
||
format-muted = "🔇 {volume}";
|
||
format = "{icon} {volume}";
|
||
format-icons.default = [ "🔈" "🔉" "🔊" ];
|
||
on-click = "${pkgs.pavucontrol}/bin/pavucontrol";
|
||
};
|
||
mpris = {
|
||
format = "{player_icon} {artist} - {title}";
|
||
format-paused = "{status_icon} {artist} - {title}";
|
||
player-icons = {
|
||
default = "▶️";
|
||
mpd = "🎵";
|
||
};
|
||
status-icons = {
|
||
paused = "⏸️";
|
||
};
|
||
};
|
||
battery = {
|
||
format = "{icon} {capacity}%";
|
||
format-icons = [ "🤏" "🪫" "🔋" "🔋" ];
|
||
states = {
|
||
warning = 30;
|
||
critical = 15;
|
||
};
|
||
};
|
||
};
|
||
};
|
||
systemd = {
|
||
enable = true;
|
||
target = "graphical-session.target";
|
||
};
|
||
style = ''
|
||
|
||
* {
|
||
min-height: 0;
|
||
}
|
||
|
||
window#waybar {
|
||
font-size: small;
|
||
background: rgba(0,0,0,0.8);
|
||
}
|
||
|
||
#workspaces button {
|
||
border-radius: 1rem;
|
||
padding: 0px .5rem;
|
||
margin: 0px .5rem 0px 0px;
|
||
}
|
||
|
||
#workspaces button.active {
|
||
background: rgba(255,255,255,0.8);
|
||
padding: 0px 1rem;
|
||
color: black;
|
||
}
|
||
|
||
#workspaces button.inactive:hover {
|
||
background: rgba(255,255,255,0.4);
|
||
color: black;
|
||
}
|
||
|
||
.modules-right widget label {
|
||
padding: 0 1rem;
|
||
margin: 0 .5rem;
|
||
}
|
||
|
||
#tray {
|
||
min-width: 5rem;
|
||
}
|
||
|
||
'';
|
||
};
|
||
|
||
|
||
}];
|
||
};
|
||
}
|