{ config, lib, pkgs, fonts, accentColour ? "base07", ... }: { imports = [ ./alacritty/default.nix ./avizo/default.nix ./rofi/default.nix ./swaylock/default.nix ./swayidle/default.nix ./swaync/default.nix ./waybar/default.nix ./wlogout/default.nix ]; home.packages = with pkgs; [ swaybg (writeShellScriptBin "protonmail-setup-bridge" '' pkill -9 -f protonmail-bridge ${protonmail-bridge}/bin/protonmail-bridge -c swaymsg exec "${protonmail-bridge}/bin/protonmail-bridge -n" '') (writeShellScriptBin "davmail-setup" '' systemctl --user restart davmail # Ensure config file is present systemctl --user stop davmail ${davmail}/bin/davmail -n ~/.davmail.properties systemctl --user restart davmail '') ]; wayland.windowManager.sway = { enable = true; package = pkgs.swayfx.overrideAttrs (old: {passthru.providedSessions = ["sway"];}); swaynag.enable = true; systemd.enable = true; xwayland = true; 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.rofi.finalPackage}/bin/rofi -show drun"; workspaceAutoBackAndForth = true; bars = []; gaps = { inner = 5; outer = 0; }; fonts = { names = [fonts.monospace.name]; style = "regular"; size = fonts.sizes.desktop * 1.0; }; colors = with config.scheme.withHashtag; let text = toString base05; indicator = toString cyan; in rec { background = toString base00; focused = rec { inherit background text indicator; border = toString config.scheme.withHashtag.${accentColour}; childBorder = border; }; focusedInactive = rec { inherit background text indicator; border = toString base04; childBorder = border; }; unfocused = rec { inherit background text indicator; border = toString base03; childBorder = border; }; urgent = rec { inherit background text indicator; border = toString red; childBorder = border; }; }; startup = [ {command = "${pkgs.swaynotificationcenter}/bin/swaync";} {command = "${pkgs.libsForQt5.polkit-kde-agent}/libexec/polkit-kde-authentication-agent-1";} {command = "${pkgs.protonmail-bridge}/bin/protonmail-bridge -n";} {command = "${pkgs.swaybg}/bin/swaybg -m fill -i ${../../wallpapers/default.jpg}";} ]; window = { border = 1; commands = (map (criteria: { inherit criteria; command = "floating enable"; }) [ {app_id = "org.kde.polkit-kde-authentication-agent-1";} {app_id = "Pinentry";} {app_id = "pavucontrol";} {app_id = "\.blueman-manager-wrapped";} {app_id = "nm-connection-editor";} {app_id = "thunar";} {class = "[Mm]atplotlib";} {class = ".*\.py";} {class = "Idl";} ]) ++ (map (criteria: { inherit criteria; command = "layout tabbed"; }) [ {class = "steam";} {class = "Nxplayer\.bin";} {app_id = "Nxplayer\.bin";} ]) ++ []; }; 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 "${modifier}+F1" = "exec swaylockfx"; "${modifier}+p" = "exec ${programs.wlogout.package}/bin/wlogout"; "${modifier}+z" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw"; "${modifier}+Shift+z" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client -d -sw"; "${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 enable shadow_blur_radius 4 layer_effects "system-menu" blur enable; blur_ignore_transparent enable; shadows disable layer_effects "gtk-layer-shell" blur enable; blur_ignore_transparent enable; shadows disable layer_effects "waybar" blur enable; blur_ignore_transparent enable; shadows disable layer_effects "rofi" blur enable; blur_ignore_transparent enable; shadows disable layer_effects "avizo" blur enable; blur_ignore_transparent enable; shadows disable layer_effects "swaync-notification-window" blur enable; blur_ignore_transparent enable; shadows disable layer_effects "swaync-control-center" blur enable; blur_ignore_transparent enable; shadows disable titlebar_separator enable scratchpad_minimize enable ''; }; }