switch to hyprland

This commit is contained in:
notgne2 2025-10-15 04:38:28 -07:00
parent 7d7756968c
commit b7bb2c58ed
No known key found for this signature in database
2 changed files with 184 additions and 438 deletions

View file

@ -50,455 +50,217 @@ in {
default = false; default = false;
description = "If this PC has bluetooth support"; description = "If this PC has bluetooth support";
}; };
battery = mkOption {
type = types.bool;
default = false;
description = "If this PC has a battery";
};
}; };
config = lib.mkIf cfg.enable { config = lib.mkIf cfg.enable {
services.swayidle = { services.hypridle = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
events = [ settings = {
{ general = {
event = "before-sleep"; lock_cmd = "pidof hyprlock || hyporlock";
command = "${pkgs.systemd}/bin/loginctl lock-session"; before_sleep_cmd = "loginctl lock-session";
} after_sleep_cmd = "hyperctl dispatch dpms on";
{ };
event = "lock";
command = "${pkgs.playerctl}/bin/playerctl -a pause; ${lockCommand}";
}
{
event = "unlock";
command = "${pkgs.procps}/bin/pkill -USR1 swaylock";
}
];
timeouts = [ listener = [
{ {
timeout = cfg.screensaver.lockTime; timeout = cfg.screensaver.lockTime;
command = "${pkgs.systemd}/bin/loginctl lock-session"; on-timeout = "loginctl lock-session";
} }
{ {
timeout = cfg.screensaver.offTime; timeout = cfg.screensaver.offTime;
command = "${pkgs.sway}/bin/swaymsg 'output * dpms off'"; on-timeout = "hyperctl dispatch dpms off";
resumeCommand = "${pkgs.sway}/bin/swaymsg 'output * dpms on'"; }
} ];
]; };
}; };
services.avizo.enable = true;
programs.hyprlock.enable = true;
services.swaync.enable = true;
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = false; enable = true;
systemd.enable = true; # package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
extraConfig = let # portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
swayConfig = config.wayland.windowManager.sway.config; plugins = with pkgs.hyprlandPlugins; [
swayBindings = swayConfig.keybindings; # inputs.hy3.packages.${pkgs.stdenv.hostPlatform.system}.hy3
swayToHyprlandBinding = key: binding: let # inputs.hypr-dynamic-cursors.packages.${pkgs.stdenv.hostPlatform.system}.hypr-dynamic-cursors
splitKey = lib.splitString "+" key; hy3
hypr-dynamic-cursors
];
settings = {
"plugin:dynamic-cursors" = {
mode = "stretch";
};
"plugin:hy3" = {
no_gaps_when_only = 1;
};
misc = {
disable_hyprland_logo = true;
animate_manual_resizes = true;
animate_mouse_windowdragging = true;
new_window_takes_over_fullscreen = 2;
middle_click_paste = false;
};
general = {
"$mod" = "SUPER";
layout = "hy3";
isMod = m: m == "Mod4" || m == "Shift"; gaps_in = 6;
convertMod = m: gaps_out = 6;
if m == "Mod4" resize_on_border = true;
then "SUPER" };
else lib.toUpper m; gestures = {
mods = filter isMod splitKey; };
modsStr = "${(lib.concatStringsSep "_" (map convertMod mods))},"; bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
];
windowrulev2 = [
"move 0 0,class:(flameshot),title:(flameshot)"
"pin,class:(flameshot),title:(flameshot)"
"fullscreenstate,class:(flameshot),title:(flameshot)"
"float,class:(flameshot),title:(flameshot)"
];
bind =
[
"$mod, Return, exec, ${pkgs.foot}/bin/foot"
"$mod, F, exec, firefox"
", Print, exec, grimblast copy area"
"$mod, Q, killactive,"
"$mod, F, fullscreen, 0"
"$mod SHIFT, F, fullscreen, 1"
"$mod, Space, exec, toggle-float"
"$mod, D, exec, ${config.programs.rofi.package}/bin/rofi -show drun -show-icons"
normalKeys = filter (m: isMod m == false) splitKey; ", Print, exec, ${config.services.flameshot.package}/bin/flameshot gui -p=\"${config.services.flameshot.settings.General.savePath}/$(date '+${config.services.flameshot.settings.General.filenamePattern}')\" --raw | wl-copy -t image/png"
normalKey = lib.elemAt normalKeys 0; # "SHIFT, Print, exec, ${pkgs.wl-clipboard}/bin/wl-paste > /tmp/clipup && ${
# if cfg.uploadScript != null
# then cfg.uploadScript
# else ":"
# } /tmp/clipup | wl-copy && ${pkgs.libnotify}/bin/notify-send 'Clipboard uploaded!'"
convertedKey = "${modsStr}${normalKey}"; "$mod, c, exec, ${config.services.cliphost.package}/bin/cliphist list | rofi -dmenu | cliphist decode | wl-copy"
convertDir = dir: lib.elemAt (lib.stringToCharacters dir) 0; "$mod, minus, exec, volumectl -u down"
"$mod, equal, exec, volumectl -u up"
splitBinding = lib.splitString " " binding; ", XF86AudioLowerVolume, exec, volumectl -u down"
bindingAction = lib.elemAt splitBinding 0; ", XF86AudioRaiseVolume, exec, volumectl -u up"
newBinding =
if bindingAction == "exec" ", XF86AudioMute, exec, toggle-mute"
then "exec, ${lib.concatStringsSep " " (lib.tail splitBinding)}" ", XF86AudioMicMute, exec, ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle"
else if bindingAction == "workspace"
then let n = lib.last splitBinding; in "workspace, ${n}" ", XF86MonBrightnessDown, exec, lightctl down"
else if bindingAction == "kill" ", XF86MonBrightnessUp, exec, lightctl up"
then "killactive," "$mod, semicolon, exec, lightctl down"
else if bindingAction == "focus" "$mod, apostrophe, exec, lightctl up"
then let
l = lib.last splitBinding; # Previous/next but change the shuffle/random state before action (and change back afterwards)
in "$mod&SHIFT, bracketright, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"
if l == "mode_toggle" "$mod&SHIFT, bracketleft, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl previous && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"
then "togglefloating," "SHIFT, XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle"
else "movefocus,${convertDir l}"
else if bindingAction == "fullscreen" # Previous/next
then "fullscreen,0" "$mod, bracketright, exec, ${pkgs.playerctl}/bin/playerctl next"
else if bindingAction == "floating" "$mod, bracketleft, exec, ${pkgs.playerctl}/bin/playerctl previous"
then "togglefloating," ", XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl next"
else if bindingAction == "move" ", XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl previous"
then let
splitMove = lib.tail splitBinding; # Seek forward/back
moveThing = lib.elemAt splitMove 0; "$mod&Control_L, bracketright, exec, ${pkgs.playerctl}/bin/playerctl position 5+"
toThing = "$mod&Control_L, bracketleft, exec, ${pkgs.playerctl}/bin/playerctl position 5-"
if lib.length splitMove >= 3 "Control_L, XF86AudioNext, exec, ${pkgs.playerctl}/bin/playerctl position 5+"
then lib.elemAt splitMove 2 "Control_L, XF86AudioPrev, exec, ${pkgs.playerctl}/bin/playerctl position 5-"
else null;
in # Toggle play/pause
if toThing == null ", XF86AudioPlay, exec, ${pkgs.playerctl}/bin/playerctl play-pause"
then "movewindow,${convertDir moveThing}" ", XF86AudioPause, exec, ${pkgs.playerctl}/bin/playerctl play-pause"
else if moveThing == "container" && toThing == "workspace" "$mod, backslash, exec, ${pkgs.playerctl}/bin/playerctl play-pause"
then "movetoworkspacesilent,${lib.last splitMove}"
else null # "$mod, p, exec, bash ${inputs.bwmenu}/bwmenu"
else null; # "$mod, e, exec, bash ${inputs.bemoji}/bemoji -t"
in
if newBinding == null "Control_L&Alt_L, l, exec, ${pkgs.systemd}/bin/loginctl lock-session"
then "# ${key} - ${binding}"
else "bind=${convertedKey}, ${newBinding}"; "$mod, left, hy3:movefocus, l"
convertedBindings = lib.concatStringsSep "\n" (lib.mapAttrsToList swayToHyprlandBinding swayBindings); "$mod, right, hy3:movefocus, r"
bindingsStr = "${convertedBindings}\n"; "$mod, up, hy3:movefocus, u"
in '' "$mod, down, hy3:movefocus, d"
monitor=,preferred,auto,auto "$mod, h, hy3:movefocus, l"
gestures { "$mod, j, hy3:movefocus, d"
workspace_swipe = on "$mod, k, hy3:movefocus, u"
} "$mod, l, hy3:movefocus, r"
${convertedBindings}
''; "$mod SHIFT, left, hy3:movewindow, l"
"$mod SHIFT, right, hy3:movewindow, r"
"$mod SHIFT, up, hy3:movewindow, u"
"$mod SHIFT, down, hy3:movewindow, d"
"$mod SHIFT, h, hy3:movewindow, l"
"$mod SHIFT, j, hy3:movewindow, d"
"$mod SHIFT, k, hy3:movewindow, u"
"$mod SHIFT, l, hy3:movewindow, r"
"$mod CTRL, left, resizeactive, -80 0"
"$mod CTRL, right, resizeactive, 80 0"
"$mod CTRL, up, resizeactive, 0 -80"
"$mod CTRL, down, resizeactive, 0 80"
"$mod CTRL, h, resizeactive, -80 0"
"$mod CTRL, j, resizeactive, 0 80"
"$mod CTRL, k, resizeactive, 0 -80"
"$mod CTRL, l, resizeactive, 80 0"
"$mod, mouse_down, workspace, e-1"
"$mod, mouse_up, workspace, e+1"
]
++ (
# workspaces
# binds $mod + [shift +] {1..9} to [move to] workspace {1..9}
builtins.concatLists (builtins.genList (i:
let ws = i + 1;
in [
"$mod, code:1${toString i}, workspace, ${toString ws}"
"$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
]
)
9)
);
};
}; };
wayland.windowManager.sway = { programs.ashell = {
enable = lib.mkDefault true; enable = true;
systemd.enable = true;
systemd.enable = lib.mkDefault true;
wrapperFeatures.gtk = lib.mkDefault true;
extraConfig = ''
exec keyctl link @u @s
workspace 1
'';
config = {
terminal = lib.mkDefault "${pkgs.foot}/bin/foot";
modifier = lib.mkDefault "Mod4";
keybindings = let
modifier = config.wayland.windowManager.sway.config.modifier;
alphabet = ["Ctrl" "Alt" "Ctrl+Alt"];
genKeyAttrs = move:
lib.listToAttrs (
map
(
n: {
name = "${modifier}${
if move
then "+Shift"
else ""
}+${builtins.elemAt alphabet ((n - 11) / 10)}+${toString (lib.mod n 10)}";
value = "${
if move
then "move container to "
else ""
}workspace number ${toString n}";
}
)
(lib.lists.range 11 (10 * (builtins.length alphabet) + 10))
);
in
lib.mkOptionDefault (
let
volumeUp = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%";
volumeDown = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -5%";
in
{
"${modifier}+q" = "kill";
"Print" = "exec ${config.services.flameshot.package}/bin/flameshot gui -p=\"${config.services.flameshot.settings.General.savePath}/$(date '+${config.services.flameshot.settings.General.filenamePattern}')\" --raw | ${pkgs.wl-clipboard}/bin/wl-copy -t image/png";
"Shift+Print" = "exec ${pkgs.wl-clipboard}/bin/wl-paste > /tmp/clipup && ${
if cfg.uploadScript != null
then cfg.uploadScript
else ":"
} /tmp/clipup | ${pkgs.wl-clipboard}/bin/wl-copy && ${pkgs.libnotify}/bin/notify-send 'Clipboard uploaded!'";
"${modifier}+c" = "exec ${config.services.clipman.package}/bin/clipman pick -t rofi";
"${modifier}+minus" = volumeDown;
"${modifier}+equal" = volumeUp;
"XF86AudioRaiseVolume" = volumeUp;
"XF86AudioLowerVolume" = volumeDown;
"XF86AudioMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
"XF86AudioMicMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle";
"XF86MonBrightnessDown" = "exec ${pkgs.light}/bin/light -U 10";
"XF86MonBrightnessUp" = "exec ${pkgs.light}/bin/light -A 10";
"${modifier}+semicolon" = "exec ${pkgs.light}/bin/light -U 10";
"${modifier}+apostrophe" = "exec ${pkgs.light}/bin/light -A 10";
# Previous/next but change the shuffle/random state before action (and change back afterwards)
"${modifier}+Shift+bracketright" = "exec ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle";
"${modifier}+Shift+bracketleft" = "exec ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl previous && ${pkgs.playerctl}/bin/playerctl shuffle Toggle";
"Shift+XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl shuffle Toggle && ${pkgs.playerctl}/bin/playerctl next && ${pkgs.playerctl}/bin/playerctl shuffle Toggle";
# Previous/next
"${modifier}+bracketright" = "exec ${pkgs.playerctl}/bin/playerctl next";
"${modifier}+bracketleft" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
# Seek forward/back
"${modifier}+Ctrl+bracketright" = "exec ${pkgs.playerctl}/bin/playerctl position 5+";
"${modifier}+Ctrl+bracketleft" = "exec ${pkgs.playerctl}/bin/playerctl position 5-";
"Ctrl+XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl position 5+";
"Ctrl+XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl position 5-";
# Toggle play/pause
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"${modifier}+backslash" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"${modifier}+p" = "exec bash ${inputs.bwmenu}/bwmenu";
"${modifier}+e" = "exec bash ${inputs.bemoji}/bemoji -t";
"${modifier}+0" = "workspace 10";
"${modifier}+Shift+0" = "move container to workspace 10";
"Ctrl+Alt+l" = "exec ${pkgs.systemd}/bin/loginctl lock-session";
"${modifier}+s" = "sticky toggle";
}
// genKeyAttrs true
// genKeyAttrs false
);
menu = "${config.programs.rofi.package}/bin/rofi -show drun -show-icons -run-command '${pkgs.sway}/bin/swaymsg exec -- {cmd}'";
bars = [];
gaps = {
smartGaps = lib.mkDefault true;
smartBorders = lib.mkDefault "on";
inner = lib.mkDefault 10;
outer = lib.mkDefault 0;
};
};
}; };
programs.librewolf.enable = true; programs.librewolf.enable = true;
programs.waybar = { stylix = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
systemd = { autoEnable = lib.mkDefault true;
icons = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
target = lib.mkDefault "sway-session.target"; dark = lib.mkDefault "Papirus-Dark";
package = lib.mkDefault pkgs.papirus-icon-theme;
}; };
settings.mainbar = { cursor = {
position = lib.mkDefault "left"; package = lib.mkDefault pkgs.adwaita-icon-theme;
height = lib.mkDefault null; name = lib.mkDefault "Adwaita";
size = lib.mkDefault 24;
modules-left = ["sway/workspaces"];
modules-center = ["clock#1" "clock#2" "custom/spacer" "custom/media" "custom/spacer" "clock#3" "clock#4" "custom/spacer" "clock#5"];
modules-right = ["pulseaudio" "custom/spacer" "memory" "custom/spacer" "cpu"] ++ lib.optionals cfg.battery ["custom/spacer" "battery"] ++ ["custom/spacer" "tray"];
"custom/spacer" = {
format = lib.mkDefault "";
rotate = lib.mkDefault 90;
tooltip = lib.mkDefault false;
};
"custom/media" = {
rotate = lib.mkDefault 90;
max-length = lib.mkDefault 60;
on-click = lib.mkDefault "${pkgs.playerctl}/bin/playerctl play-pause";
exec = lib.mkDefault "${pkgs.playerctl}/bin/playerctl metadata --format '{{ emoji(status) }} {{ artist }} - {{ title }}' --follow";
};
"sway/workspaces" = {
disable-scroll = lib.mkDefault true;
};
"clock#1" = {
tooltip = lib.mkDefault false;
format = lib.mkDefault "{:%a}";
};
"clock#2" = {
tooltip = lib.mkDefault false;
format = lib.mkDefault "{:%m-%d}";
};
"clock#3" = {
tooltip = lib.mkDefault false;
format = lib.mkDefault "{:%I:%M}";
};
"clock#4" = {
tooltip = lib.mkDefault false;
format = lib.mkDefault "{:%p}";
};
"clock#5" = {
tooltip = lib.mkDefault false;
timezone = lib.mkDefault "Etc/UTC";
format = lib.mkDefault "{:%H%M}";
};
pulseaudio = {
format = lib.mkDefault "{icon} {volume}%";
format-bluetooth = lib.mkDefault "{icon} {volume}%";
format-muted = lib.mkDefault "";
format-icons = ["" "" ""];
on-click = lib.mkDefault "${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
on-click-right = lib.mkDefault "${pkgs.pavucontrol}/bin/pavucontrol";
ignored-sinks = ["Easy Effects Sink"];
};
memory = {
interval = lib.mkDefault 20;
format = lib.mkDefault " {}%";
};
cpu = {
interval = lib.mkDefault 20;
format = lib.mkDefault " {usage}%";
};
battery = {
states = {
good = lib.mkDefault 90;
warning = lib.mkDefault 25;
critical = lib.mkDefault 10;
};
format = lib.mkDefault "{icon} {capacity}%";
format-icons = {
default = ["" "" "" "" "" "" "" "" "" ""];
charging = ["" "" "" "" "" "" ""];
};
};
tray = {
icon-size = lib.mkDefault 18;
spacing = lib.mkDefault 5;
};
};
style = ''
window#waybar {
background: @base01;
color: @base06;
}
#custom-spacer {
font-size: 15px;
color: @base00;
font-weight: bold;
}
#workspaces,
#clock.1,
#clock.2,
#clock.3,
#clock.4,
#clock.5,
#pulseaudio,
#memory,
#cpu,
#battery,
#disk,
#tray,
#mode,
#custom-media {
color: @base06;
background: @base00;
padding: 5px 0;
}
#workspaces { padding: 0 }
#clock.1 { padding: 5px 0 0 0; }
#clock.2 { padding: 0 0 5px 0; }
#clock.3 { padding: 5px 0 0 0; }
#clock.4 { padding: 0 0 5px 0; }
#custom-media.playing {
color: @base0A;
}
#workspaces button.focused {
color: @base0A;
}
#workspaces button:hover {
background: @base02;
}
#pulseaudio {
color: @base0B;
}
#memory {
color: @base0C;
}
#cpu {
color: @base0D;
}
#battery {
color: @base0E;
}
* {
border-radius: 0;
border-width: 0;
border-style: none;
margin: 0;
padding: 0;
}
'';
};
services.mako = {
enable = lib.mkDefault true;
maxVisible = lib.mkDefault 6;
extraConfig = lib.generators.toKeyValue {} {
on-button-middle = "dismiss-all";
}; };
}; };
systemd.user.services.mako = {
Service = {
ExecStart = "${pkgs.mako}/bin/mako";
};
Install = {
After = ["sway-session.target"];
WantedBy = ["sway-session.target"];
};
};
stylix.enable = lib.mkDefault true;
services.blueman-applet.enable = lib.mkDefault cfg.bluetooth; services.blueman-applet.enable = lib.mkDefault cfg.bluetooth;
services.mpris-proxy.enable = lib.mkDefault true; services.mpris-proxy.enable = lib.mkDefault true;
services.playerctld.enable = lib.mkDefault true; services.playerctld.enable = lib.mkDefault true;
gtk = {
enable = lib.mkDefault true;
iconTheme = {
package = lib.mkDefault pkgs.papirus-icon-theme;
name = lib.mkDefault "Papirus-Dark";
};
};
home.pointerCursor = {
package = lib.mkDefault pkgs.adwaita-icon-theme;
name = lib.mkDefault "Adwaita";
size = lib.mkDefault 24;
x11.enable = lib.mkDefault true;
gtk.enable = lib.mkDefault true;
};
qt = {
enable = lib.mkDefault true;
platformTheme = lib.mkDefault "gtk";
};
# programs.kermit = { # programs.kermit = {
# enable = lib.mkDefault true; # enable = lib.mkDefault true;
# settings = { # settings = {
@ -542,13 +304,7 @@ in {
ydotool ydotool
keyutils keyutils
# programs
pavucontrol
kdePackages.ark
pcmanfm-qt
# CLI tools # CLI tools
yt-dlp
maim maim
slop slop
xorg.xhost xorg.xhost
@ -571,6 +327,6 @@ in {
}; };
}; };
services.clipman.enable = true; services.cliphist.enable = true;
}; };
} }

View file

@ -12,38 +12,28 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
xdg.portal = { xdg.portal = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
wlr = {
enable = lib.mkDefault true;
settings = {
screencast = {
max_fps = lib.mkDefault 55;
chooser_type = lib.mkDefault "simple";
chooser_cmd = lib.mkDefault "${pkgs.slurp}/bin/slurp -f %o -or";
};
};
};
config = {
wlroots.default = ["wlr" "gtk"];
common.default = ["gtk"];
};
}; };
programs.hyprland.enable = true;
environment.sessionVariables = { environment.sessionVariables = {
QT_QPA_PLATFORM = "wayland;wayland-egl;xcb"; QT_QPA_PLATFORM = "wayland;xcb";
MOZ_ENABLE_WAYLAND = "1"; MOZ_ENABLE_WAYLAND = "1";
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
ECORE_EVAS_ENGINE = "wayland_egl"; ECORE_EVAS_ENGINE = "wayland_egl";
ELM_ENGINE = "wayland_egl"; ELM_ENGINE = "wayland_egl";
_JAVA_AWT_WM_NONREPARENTING = "1"; _JAVA_AWT_WM_NONREPARENTING = "1";
NIXOS_OZONE_WL = "1"; NIXOS_OZONE_WL = "1";
SDL_VIDEODRIVER = "wayland"; SDL_VIDEODRIVER = "wayland";
CLUTTER_BACKEND = "wayland";
}; };
services.greetd = { services.greetd = {
enable = lib.mkDefault true; enable = lib.mkDefault true;
settings = { settings = {
default_session = { default_session = {
command = lib.mkDefault "${pkgs.greetd.tuigreet}/bin/tuigreet --time --user-menu --user-menu-max-uid 30000 --cmd sway"; command = lib.mkDefault "${pkgs.greetd.tuigreet}/bin/tuigreet --time --user-menu --user-menu-max-uid 30000 --cmd hyprland";
}; };
}; };
}; };