{ config, lib, pkgs, fonts, accentColourName, ... }: { programs.waybar.systemd.target = lib.mkIf config.wayland.windowManager.sway.systemd.enable "sway-session.target"; services.kanshi.systemdTarget = lib.mkIf config.wayland.windowManager.sway.systemd.enable "sway-session.target"; wayland.windowManager.sway = { enable = true; package = pkgs.swayfx.overrideAttrs (old: {passthru.providedSessions = ["sway"];}); swaynag.enable = true; systemd.enable = true; xwayland = true; checkConfig = false; config = { input = { "*" = { xkb_layout = "gb"; xkb_options = "ctrl:nocaps"; }; "type:touchpad" = { tap = "enabled"; natural_scroll = "enabled"; }; }; seat = { "seat0" = { xcursor_theme = with config.gtk.cursorTheme; "${name} ${toString size}"; }; }; modifier = "Mod4"; terminal = "${config.programs.alacritty.package}/bin/alacritty"; menu = "${config.programs.fuzzel.package}/bin/fuzzel"; workspaceAutoBackAndForth = true; bars = []; gaps = { inner = 5; outer = 0; }; fonts = { names = [fonts.monospace.name]; style = "regular"; size = fonts.sizes.desktop * 1.0; }; colors = let sc = config.scheme.withHashtag; text = toString sc.base05; indicator = toString sc.${accentColourName}; background = toString sc.base00; in { inherit background; focused = let border = toString sc.${accentColourName}; in { inherit background text indicator border; childBorder = border; }; focusedInactive = let border = toString sc.base04; in { inherit background text indicator border; childBorder = border; }; unfocused = let border = toString sc.base03; in { inherit background text indicator border; childBorder = border; }; urgent = let border = toString sc.red; in { inherit background text indicator border; childBorder = border; }; }; startup = [ {command = "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1";} {command = "${pkgs.protonmail-bridge}/bin/protonmail-bridge -n";} {command = "set-background";} ]; window = { border = 1; titlebar = false; commands = [ { criteria.window_role = "(?:pop-up|bubble|dialog)"; command = "floating enable"; } { criteria.app_id = "(?:org\.kde\.polkit-kde-authentication-agent-1|Pinentry|pavucontrol|\.blueman-manager-wrapped|nm-connection-editor)"; command = "floating enable"; } { criteria.class = "(?:[Mm]atplotlib|.*\.py|Idl)"; command = "floating enable"; } { # Catch-all for file dialog windows criteria.title = "(?:Open|Save) (?:File|Folder|As)"; command = "floating enable, resize set width 1030 height 710"; } { # Inhibit idle when watching vidoes criteria.app_id = "(?:firefox|mpv)"; command = "inhibit_idle fullscreen"; } { # Window rules for game sessions. # Note: controllers don't reset idle timer criteria.class = "(?:steam_app|Minecraft).*"; command = "floating enable, fullscreen enable, inhibit_idle focus"; } ]; }; floating.border = 1; keybindings = with config; let modifier = wayland.windowManager.sway.config.modifier; in lib.mkOptionDefault { # Movement "${modifier}+comma" = "workspace prev"; "${modifier}+period" = "workspace next"; "${modifier}+shift+comma" = "move workspace prev"; "${modifier}+shift+period" = "move workspace next"; "${modifier}+bracketleft" = "move workspace to output left"; "${modifier}+bracketright" = "move workspace to output right"; # Function keys ## Sound "XF86AudioMute" = "exec ${services.avizo.package}/bin/volumectl %"; "XF86AudioMicMute" = "exec ${services.avizo.package}/bin/volumectl -m %"; "XF86AudioRaiseVolume" = "exec ${services.avizo.package}/bin/volumectl -u + 5"; "XF86AudioLowerVolume" = "exec ${services.avizo.package}/bin/volumectl -u - 5"; ## Playback "XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; "XF86AudioStop" = "exec ${pkgs.playerctl}/bin/playerctl play-pause"; "XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous"; "XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next"; ## Brightness "XF86MonBrightnessUp" = "exec ${services.avizo.package}/bin/lightctl + 5"; "XF86MonBrightnessDown" = "exec ${services.avizo.package}/bin/lightctl - 5"; # System utilities "Mod4+Mod1+l" = "exec swaylockfx"; "${modifier}+z" = "exec ${pkgs.mako}/bin/makoctl dismiss -a"; "${modifier}+Shift+z" = "exec ${pkgs.mako}/bin/makoctl restore"; "${modifier}+Shift+p" = "exec ${programs.wlogout.package}/bin/wlogout"; "${modifier}+Shift+Return" = "exec ${programs.emacs.finalPackage}/bin/emacsclient -c"; }; }; extraConfig = '' bindgesture swipe:right workspace prev bindgesture swipe:left workspace next corner_radius 10 blur enable blur_xray disable blur_passes 3 blur_radius 5 corner_radius 10 shadows disable shadow_blur_radius 0 layer_effects "system-menu" blur enable; shadows disable layer_effects "gtk-layer-shell" blur enable; shadows disable layer_effects "notifications" blur enable; shadows disable layer_effects "launcher" blur enable; shadows disable layer_effects "logout_dialog" blur enable; shadows disable layer_effects "waybar" blur enable; shadows disable layer_effects "avizo" blur enable; shadows disable titlebar_separator enable scratchpad_minimize enable ''; }; }