{ lib, pkgs, config, ... }: with lib; let cfg = config.eboskma.programs.sway; mod = "Mod4"; swaylockcmd = "${pkgs.swaylock}/bin/swaylock --ignore-empty-password --daemonize --show-failed-attempts --indicator-caps-lock --clock --image ~/.wallpapers/river-2560.png --fade-in 0.5 --scaling fill"; in { options.eboskma.programs.sway.enable = mkEnableOption "Enable sway"; config = mkIf cfg.enable { wayland.windowManager.sway = { enable = true; config = { modifier = mod; assigns = { "1" = [{ app_id = "firefox"; }]; "2" = [{ app_id = "Alacritty"; }]; "3" = [{ class = "Code"; }]; "10" = [{ class = "telegramdesktop"; } { class = "Signal"; }]; }; bars = [ { command = "${pkgs.waybar}/bin/waybar"; } ]; left = "n"; down = "e"; up = "i"; right = "o"; floating = { criteria = [{ app_id = "gnome-calculator"; }]; modifier = mod; }; fonts = { names = [ "Iosevka Nerd Font" ]; style = "Regular"; size = 12.0; }; gaps = { inner = 10; outer = 5; smartBorders = "on"; }; input = { "36125:40349:splitKB_Kyria" = { xkb_options = "lv3:ralt_switch"; }; "1133:49291:Logitech_G502_HERO_SE" = { natural_scroll = "enabled"; }; }; output = { "Virtual-1" = { bg = "~/.wallpapers/river-1920.png fill"; mode = "1920x1080@60Hz"; }; "DP-2" = { bg = "~/.wallpapers/river-2560.png fill"; mode = "2560x1440@144Hz"; adaptive_sync = "on"; }; }; menu = "${pkgs.wofi}/bin/wofi --show drun -i | ${pkgs.findutils}/bin/xargs swaymsg exec --"; keybindings = { "${mod}+Return" = "exec ${config.wayland.windowManager.sway.config.terminal}"; "${mod}+Shift+q" = "kill"; "${mod}+s" = "exec ${config.wayland.windowManager.sway.config.menu}"; "${mod}+Shift+s" = "exec ${pkgs.wofi}/bin/wofi --show run | ${pkgs.findutils}/bin/xargs swaymsg exec --"; "${mod}+${config.wayland.windowManager.sway.config.left}" = "focus left"; "${mod}+${config.wayland.windowManager.sway.config.down}" = "focus down"; "${mod}+${config.wayland.windowManager.sway.config.up}" = "focus up"; "${mod}+${config.wayland.windowManager.sway.config.right}" = "focus right"; "${mod}+Left" = "focus left"; "${mod}+Down" = "focus down"; "${mod}+Up" = "focus up"; "${mod}+Right" = "focus right"; "${mod}+Shift+${config.wayland.windowManager.sway.config.left}" = "move left"; "${mod}+Shift+${config.wayland.windowManager.sway.config.down}" = "move down"; "${mod}+Shift+${config.wayland.windowManager.sway.config.up}" = "move up"; "${mod}+Shift+${config.wayland.windowManager.sway.config.right}" = "move right"; "${mod}+Shift+Left" = "move left"; "${mod}+Shift+Down" = "move down"; "${mod}+Shift+Up" = "move up"; "${mod}+Shift+Right" = "move right"; "${mod}+h" = "split h"; "${mod}+v" = "split v"; "${mod}+t" = "fullscreen toggle"; "${mod}+a" = "focus parent"; "${mod}+r" = "layout stacking"; "${mod}+w" = "layout tabbed"; "${mod}+f" = "layout toggle split"; "${mod}+Shift+space" = "floating toggle"; "${mod}+space" = "focus mode_toggle"; "${mod}+1" = "workspace number 1"; "${mod}+2" = "workspace number 2"; "${mod}+3" = "workspace number 3"; "${mod}+4" = "workspace number 4"; "${mod}+5" = "workspace number 5"; "${mod}+6" = "workspace number 6"; "${mod}+7" = "workspace number 7"; "${mod}+8" = "workspace number 8"; "${mod}+9" = "workspace number 9"; "${mod}+Shift+1" = "move container to workspace number 1"; "${mod}+Shift+2" = "move container to workspace number 2"; "${mod}+Shift+3" = "move container to workspace number 3"; "${mod}+Shift+4" = "move container to workspace number 4"; "${mod}+Shift+5" = "move container to workspace number 5"; "${mod}+Shift+6" = "move container to workspace number 6"; "${mod}+Shift+7" = "move container to workspace number 7"; "${mod}+Shift+8" = "move container to workspace number 8"; "${mod}+Shift+9" = "move container to workspace number 9"; "${mod}+Shift+minus" = "move scratchpad"; "${mod}+minus" = "scratchpad show"; "${mod}+Shift+c" = "reload"; "${mod}+Shift+p" = "restart"; "${mod}+Shift+f" = "exec --no-startup-id ~/.config/rofi/session.sh"; "${mod}+l" = "exec ${swaylockcmd}"; "${mod}+p" = "mode resize"; "${mod}+Print" = "exec ${pkgs.grim}/bin/grim -o $(${pkgs.sway}/bin/swaymsg -t get_outputs | ${pkgs.jq}/bin/jq -r '.[] | select(.focused) | .name')"; "${mod}+Shift+Print" = "exec ${pkgs.grim}/bin/grim -o $(${pkgs.sway}/bin/swaymsg -t get_outputs | ${pkgs.jq}/bin/jq -r '.[] | select(.focused) | .name') - | ${pkgs.wl-clipboard}/bin/wl-copy -t \"image/png\" -f"; "${mod}+Shift+Ctrl+Print" = "exec ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\" - | ${pkgs.wl-clipboard}/bin/wl-copy -t \"image/png\" -f"; "${mod}+Shift+Alt+Print" = "exec ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp)\""; "XF86AudioRaiseVolume" = "exec ${pkgs.pamedia}/bin/pamedia up"; "XF86AudioLowerVolume" = "exec ${pkgs.pamedia}/bin/pamedia down"; "XF86AudioMute" = "exec ${pkgs.pamedia}/bin/pamedia mute"; "XF86Calculator" = "exec ${pkgs.gnome.gnome-calculator}/bin/gnome-calculator"; }; terminal = "${pkgs.alacritty}/bin/alacritty"; window = { border = 1; titlebar = false; }; workspaceAutoBackAndForth = true; }; extraConfig = '' assign [app_id="firefox"] 1 assign [app_id="Alacritty"] 2 assign [app_id="Code"] 3 assign [app_id="telegramdesktop"] 10 assign [app_id="Signal"] 10 for_window [app_id="^.*"] inhibit_idle fullscreen for_window [class="^.*"] inhibit_idle fullscreen for_window [app_id="gnome-calculator"] floating enable exec --no-startup-id ${pkgs.networkmanagerapplet}/bin/nm-applet --indicator exec --no-startup-id ${pkgs.swayidle}/bin/swayidle -w timeout 900 ${swaylockcmd}; exec --no-startup-id ${pkgs.swayidle}/bin/swayidle -w 1200 ${pkgs.sway}/bin/swaymsg 'output * dpms off' resume ${pkgs.sway}/bin/swaymsg 'output * dpms off'; ''; extraSessionCommands = '' export _JAVA_AWT_WM_NONREPARENTING=1 export MOZ_ENABLE_WAYLAND=1 export MOZ_DBUS_REMOTE=1 export QT_QPA_PLATFORM=wayland export QT_WAYLAND_DISABLE_WINDOWDECORATION="1" export QT_QPA_PLATFORMTHEME=qt5ct export SDL_VIDEODRIVER=wayland export SSH_AUTH_SOCK="''${XDG_RUNTIME_DIR}/gnupg/S.gpg-agent.ssh" export WLR_NO_HARDWARE_CURSORS=1 ''; wrapperFeatures = { base = true; gtk = true; }; xwayland = true; }; home = { file.".wallpapers".source = ./wallpapers; packages = with pkgs; [ dunst swayidle swaylock ]; }; systemd.user.targets.tray = { Unit = { Description = "Home Manager System Tray"; Requires = [ "graphical-session-pre.target" ]; }; }; }; }