#---------------------------------------------------------------- # Sway Config — Arch + Wayland # # Migrated from i3/X11 config. All X11-specific tools have been # replaced with Wayland-native equivalents (see migration notes # throughout this file). # # Install script: arch-init.sh #---------------------------------------------------------------- ################################################################# # Variables ################################################################# # Mod key: Mod4 = Super/Windows key, Mod1 = Alt set $mod Mod4 # Helper scripts directory (Wayland replacements for ratflow scripts) set $scriptsDir ~/.config/sway/scripts # Config directory set $configDir ~/.config/sway ################################################################# # Workspaces ################################################################# set $workspace1 1: >_ set $workspace2 2: dev set $workspace3 3: www set $workspace4 4: files set $workspace5 5: e-mail set $workspace6 6: IM set $workspace7 7: video set $workspace8 8: workspace set $workspace9 9: workspace set $workspace10 10: Music set $workspace11 V: VM # Switch to workspace bindsym $mod+1 workspace $workspace1 bindsym $mod+2 workspace $workspace2 bindsym $mod+3 workspace $workspace3 bindsym $mod+4 workspace $workspace4 bindsym $mod+5 workspace $workspace5 bindsym $mod+6 workspace $workspace6 bindsym $mod+7 workspace $workspace7 bindsym $mod+8 workspace $workspace8 bindsym $mod+9 workspace $workspace9 bindsym $mod+0 workspace $workspace10 # Move focused container to workspace bindsym $mod+Shift+1 move container to workspace $workspace1 bindsym $mod+Shift+2 move container to workspace $workspace2 bindsym $mod+Shift+3 move container to workspace $workspace3 bindsym $mod+Shift+4 move container to workspace $workspace4 bindsym $mod+Shift+5 move container to workspace $workspace5 bindsym $mod+Shift+6 move container to workspace $workspace6 bindsym $mod+Shift+7 move container to workspace $workspace7 bindsym $mod+Shift+8 move container to workspace $workspace8 bindsym $mod+Shift+9 move container to workspace $workspace9 bindsym $mod+Shift+0 move container to workspace $workspace10 # Next/prev workspace bindsym $mod+x workspace next bindsym $mod+Shift+x move container to workspace next bindsym $mod+z workspace prev bindsym $mod+Shift+z move container to workspace prev # Moving workspace across monitors # MIGRATION: xrandr replaced by swaymsg output commands bindsym $mod+Control+Left move workspace to output left bindsym $mod+Control+Right move workspace to output right ################################################################# # Output / Monitor Management # MIGRATION: xrandr → swaymsg output / kanshi for auto profiles ################################################################# # Define your outputs — run `swaymsg -t get_outputs` to get names set $leftOutput eDP-1 set $rightOutput HDMI-A-1 # Default monitor setup # sway handles output layout natively, no xrandr needed output $rightOutput pos 1920 0 output $leftOutput pos 0 0 # Mode for toggling outputs (replaces i3 "outputs" mode) mode "outputs" { # $mod+Shift+1: turn off left monitor; $mod+1: turn it on bindsym $mod+Shift+1 output $leftOutput disable; mode "default" bindsym $mod+1 output $leftOutput enable; mode "default" # $mod+Shift+2: turn off right monitor; $mod+2: turn it on bindsym $mod+Shift+2 output $rightOutput disable; mode "default" bindsym $mod+2 output $rightOutput enable; mode "default" bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+m mode "outputs" ################################################################# # Wallpaper # MIGRATION: feh → swaybg (Wayland-native wallpaper setter) # Omarchy also uses swaybg for this purpose. ################################################################# set $wallpaper1 /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png set $wallpaper2 /usr/share/backgrounds/sway/Sway_Wallpaper_Blue_1920x1080.png # swaybg is a native Wayland wallpaper setter output $leftOutput bg $wallpaper1 fill output $rightOutput bg $wallpaper2 fill ################################################################# # Input Device Configuration # MIGRATION: synclient → sway input {} blocks # X11 touchpad/synaptics config replaced by libinput via sway. ################################################################# input "type:touchpad" { tap enabled click_method button_areas scroll_method two_finger dwt enabled # natural_scroll enabled # uncomment if you prefer macOS-style scrolling } input "type:keyboard" { xkb_layout pl # xkb_variant ... # xkb_options caps:escape # uncomment to remap Caps Lock to Escape } ################################################################# # Application Launchers # MIGRATION: ulauncher works on Wayland but is GTK-based. # Alternatives: wofi (native), rofi-wayland, tofi. # dmenu_run replaced by wofi (or keep as dmenu_path | wofi -d). # Omarchy uses Walker — a modern Wayland-native launcher. ################################################################# # Terminal bindsym $mod+Return exec kitty # App launcher: wofi (lightweight, Wayland-native) # Alternatives: rofi -show drun (rofi-wayland package), tofi bindsym $mod+d exec fuzzel bindsym Mod1+F2 exec wofi --show run # Clipboard manager — show history (Ctrl+Alt+H) # bindsym Control+Mod1+h exec copyq toggle bindsym Control+Mod1+h exec cliphist list | fuzzel --width 80 --dmenu | cliphist decode | wl-copy # Run app assigned to current workspace bindsym $mod+Shift+a exec $scriptsDir/autoapp ################################################################# # Window Navigation # MIGRATION: i3-msg workspace back_and_forth → same in sway ################################################################# bindsym $mod+Tab workspace back_and_forth ################################################################# # Window Management # MIGRATION: nearly identical to i3 — sway is i3-compatible ################################################################# # Use Mouse+$mod to drag floating windows floating_modifier $mod # Kill focused window bindsym $mod+Shift+q kill # Change focus (vim keys) bindsym $mod+j focus left bindsym $mod+k focus down bindsym $mod+l focus up bindsym $mod+semicolon focus right # Change focus (arrow keys) bindsym $mod+Left focus left bindsym $mod+Down focus down bindsym $mod+Up focus up bindsym $mod+Right focus right # Move focused window (vim keys) bindsym $mod+Shift+j move left bindsym $mod+Shift+k move down bindsym $mod+Shift+l move up bindsym $mod+Shift+semicolon move right # Move focused window (arrow keys) bindsym $mod+Shift+Left move left bindsym $mod+Shift+Down move down bindsym $mod+Shift+Up move up bindsym $mod+Shift+Right move right # Split orientation bindsym $mod+h split h bindsym $mod+v split v # Fullscreen bindsym $mod+f fullscreen # Layout modes bindsym $mod+s layout stacking bindsym $mod+w layout tabbed bindsym $mod+e layout toggle split # Toggle tiling / floating bindsym $mod+Shift+space floating toggle bindsym $mod+button2 floating toggle # Focus tiling/floating toggle bindsym $mod+space focus mode_toggle # Focus parent container bindsym $mod+a focus parent # Always-float toggle (custom script) bindsym $mod+Shift+f exec $scriptsDir/always-float ################################################################# # Resize Mode ################################################################# mode "resize" { bindsym j resize shrink width 10 px or 10 ppt bindsym k resize grow height 10 px or 10 ppt bindsym l resize shrink height 10 px or 10 ppt bindsym semicolon resize grow width 10 px or 10 ppt bindsym Left resize shrink width 10 px or 10 ppt bindsym Down resize grow height 10 px or 10 ppt bindsym Up resize shrink height 10 px or 10 ppt bindsym Right resize grow width 10 px or 10 ppt bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+r mode "resize" ################################################################# # Screenshots # MIGRATION: screengrab (X11) → grim + slurp (Wayland-native) # grim = screen capture (replaces scrot/import/screengrab) # slurp = region selector (Wayland-native) # wl-copy copies to Wayland clipboard # Omarchy also uses grim + slurp (+ satty for annotation). ################################################################# # Screenshots — capture once, save to file + copy to clipboard bindsym Print exec $scriptsDir/screenshot full bindsym Shift+Print exec $scriptsDir/screenshot area bindsym Control+Print exec $scriptsDir/screenshot window ################################################################# # Calendar # MIGRATION: osmo/gsimplecal (X11) → keep osmo if desired, # or use waybar clock module + rofi/wofi calendar script. # Omarchy uses waybar clock module only (no standalone calendar app). ################################################################# bindsym $mod+c exec osmo -c # Alternative: wofi-based calendar popup # bindsym $mod+c exec $scriptsDir/calendar-popup ################################################################# # Screen Color Temperature # MIGRATION: redshift (X11) → gammastep (Wayland fork of redshift) # or wlsunset (lighter alternative). # Omarchy uses hyprsunset (Hyprland-specific), but for sway # gammastep is the standard choice. # $scriptsDir/gammastep-adjust replaces redshift-adjust. ################################################################# bindsym $mod+Control+KP_Next exec $scriptsDir/gammastep-adjust "-500" bindsym $mod+Control+KP_Prior exec $scriptsDir/gammastep-adjust "+500" bindsym $mod+Control+l exec gammastep -x ################################################################# # Translation of Selected Text # MIGRATION: trans-xsel (X11 xsel) → translate-shell + wl-clipboard # Uses wl-paste / wl-copy instead of xsel/xclip. ################################################################# bindsym $mod+t exec bash -c "$scriptsDir/translate-wl en:pl &" bindsym $mod+Shift+t exec bash -c "$scriptsDir/translate-wl pl:en &" ################################################################# # Multimedia Keys & Audio # MIGRATION: PulseAudio volctl → PipeWire + wpctl (or pamixer) # Arch + Wayland standard is PipeWire with WirePlumber. # Volume OSD: SwayOSD (Omarchy approach) or swayosd-server. # The $scriptsDir/volctl wrapper uses wpctl/pamixer underneath. ################################################################# # Volume controls (primary sink) bindsym XF86AudioRaiseVolume exec --no-startup-id $scriptsDir/volctl up bindsym XF86AudioLowerVolume exec --no-startup-id $scriptsDir/volctl down bindsym XF86AudioMute exec --no-startup-id $scriptsDir/volctl toggle # Volume controls (secondary sink, e.g. HDMI) bindsym Shift+XF86AudioRaiseVolume exec --no-startup-id SINK_NUM=1 $scriptsDir/volctl up bindsym Shift+XF86AudioLowerVolume exec --no-startup-id SINK_NUM=1 $scriptsDir/volctl down bindsym Shift+XF86AudioMute exec --no-startup-id SINK_NUM=1 $scriptsDir/volctl toggle # Screen brightness # MIGRATION: xbacklight / ratflow-backlight → brightnessctl bindsym XF86MonBrightnessUp exec --no-startup-id $scriptsDir/backlight up bindsym XF86MonBrightnessDown exec --no-startup-id $scriptsDir/backlight down # Media player controls # MIGRATION: clementine-specific → playerctl (agnostic MPRIS controller) # playerctl works with any MPRIS2-compatible player (Spotify, mpv, etc.) bindsym XF86AudioPlay exec playerctl play-pause bindsym XF86AudioPause exec playerctl pause bindsym XF86AudioNext exec playerctl next bindsym XF86AudioPrev exec playerctl previous ################################################################# # Projector / Screen Layout # MIGRATION: xrandr shell scripts → swaymsg output commands # kanshi can auto-switch profiles on hotplug. ################################################################# bindsym $mod+p exec $scriptsDir/output-profile projector bindsym $mod+Shift+p exec $scriptsDir/output-profile edp-only ################################################################# # Session / Power Management # MIGRATION: i3-nagbar → swaynag, i3exit → loginctl-based script # swayidle handles DPMS/idle (replaces xset dpms). # swaylock replaces i3lock. # Omarchy uses hyprlock+hypridle, sway equivalents are swaylock+swayidle. ################################################################# # Reload sway config bindsym $mod+Shift+c exec swaymsg reload # Suspend bindsym $mod+Escape exec systemctl suspend # Restart sway bindsym $mod+Shift+r exec swaymsg reload # Exit sway bindsym $mod+Shift+e exec swaynag -t warning -m 'Exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit' # Session management mode (replaces i3exit) set $exitScript $scriptsDir/swayexit mode "session_management" { bindsym l exec --no-startup-id $exitScript lock, mode "default" bindsym e exec --no-startup-id $exitScript logout, mode "default" bindsym s exec --no-startup-id $exitScript suspend, mode "default" bindsym h exec --no-startup-id $exitScript hibernate, mode "default" bindsym r exec --no-startup-id $exitScript reboot, mode "default" bindsym Shift+s exec --no-startup-id $exitScript shutdown, mode "default" bindsym Return mode "default" bindsym Escape mode "default" } bindsym $mod+Pause mode "session_management" ################################################################# # New Workspace # MIGRATION: yad → zenity (or rofi/wofi) # yad has some Wayland issues; zenity is GTK and works. # Alternatively, use wofi for a pure Wayland input dialog. ################################################################# bindsym $mod+n exec name=$(wofi --dmenu --prompt "Workspace name") && swaymsg workspace "$name" ################################################################# # Theme / Appearance # MIGRATION: No i3 client colors — sway has the same syntax. # compton → not needed (sway has built-in compositor with # basic effects). For blur/shadows, use swayfx (fork of sway). # Omarchy uses Hyprland which has built-in blur/animation; # for sway, swayfx adds these features. ################################################################# # Font set $fontName "Source Sans 3 Semi-Bold" set $fontSize 10 set $barFontSize 9 font pango: $fontName $fontSize # Window colors # border background text indicator client.focused #252525 #252525 #D9D9D9 #101010 client.focused_inactive #101010 #101010 #606060 #101010 client.unfocused #101010 #000000 #606060 #101010 client.urgent #F05000 #F05000 #F0F0F0 #101010 # Default border style default_border pixel 2 default_floating_border normal 2 # Gaps (optional — sway supports gaps natively, unlike stock i3) # gaps inner 5 # gaps outer 2 # Window opacity (requires swayfx for per-window opacity, or use # sway's built-in opacity for all windows) # for_window [app_id="kitty"] opacity 0.95 ################################################################# # Bar — Waybar # MIGRATION: i3bar + py3status → waybar # waybar is the standard bar for wlroots-based compositors. # Omarchy uses waybar with extensive modules. # Config files: ~/.config/waybar/config.jsonc + style.css ################################################################# bar { swaybar_command waybar } ################################################################# # Window Assignments # MIGRATION: class= → app_id= for native Wayland apps. # XWayland apps still use class=. Use `swaymsg -t get_tree` # to find the correct app_id for native Wayland apps. # Note: some apps may need both rules. ################################################################# # Development assign [app_id="qtcreator"] $workspace2 assign [class="Qtcreator"] $workspace2 assign [app_id="eclipse"] $workspace2 assign [class="Eclipse"] $workspace2 # Browser assign [app_id="firefox"] $workspace3 assign [class="Firefox"] $workspace3 assign [app_id="chromium"] $workspace3 assign [class="Chromium-browser"] $workspace3 assign [class="Chrome"] $workspace3 # File managers assign [app_id="pcmanfm-qt"] $workspace4 assign [class="Pcmanfm"] $workspace4 assign [app_id="dolphin"] $workspace4 assign [class="Dolphin"] $workspace4 assign [app_id="nautilus"] $workspace4 assign [class="Nautilus"] $workspace4 assign [app_id="thunar"] $workspace4 assign [class="Thunar"] $workspace4 # E-mail assign [app_id="thunderbird"] $workspace5 assign [class="Thunderbird"] $workspace5 # IM assign [app_id="telegram-desktop"] $workspace6 assign [class="Telegram"] $workspace6 assign [class="Skype"] $workspace6 # Video assign [app_id="kodi"] $workspace7 assign [class="Kodi"] $workspace7 # Music assign [app_id="spotify"] $workspace10 assign [class="Spotify"] $workspace10 assign [class="Clementine"] $workspace10 # VM assign [class="VirtualBox"] $workspace11 assign [app_id="virt-manager"] $workspace11 ################################################################# # Floating Windows ################################################################# for_window [app_id="screengrab"] floating enable for_window [app_id="osmo"] floating enable for_window [app_id="gsimplecal"] floating enable for_window [class="Osmo"] floating enable for_window [class="Skype"] floating enable for_window [app_id="yad"] floating enable for_window [class="Yad"] floating enable for_window [app_id="wofi"] floating enable for_window [app_id="swaync"] floating enable ################################################################# # Idle Management # MIGRATION: xset dpms → swayidle # Locks screen after timeout, turns off display. # Omarchy uses hypridle; sway equivalent is swayidle. ################################################################# set $lockCommand swaylock -f -c 000000 exec swayidle -w \ timeout 600 '$lockCommand' \ timeout 900 'swaymsg "output * dpms off"' \ resume 'swaymsg "output * dpms on"' \ before-sleep '$lockCommand' ################################################################# # Autostart # MIGRATION NOTES: # dunst → mako (Wayland-native notifier, used by Omarchy) # or swaync (Sway Notification Center, more feature-rich) # compton → NOT NEEDED (sway has built-in compositor) # For blur/rounded corners, use swayfx # synclient → sway input {} block (see above) # redshift → gammastep or wlsunset # nm-applet → nm-applet still works on Wayland, or use # waybar network module + impala TUI (Omarchy approach) # parcellite → cliphist + wl-clipboard (Wayland clipboard manager) # cliphist stores history, wl-copy/wl-paste for access # xset dpms → swayidle (see above) ################################################################# # Notification daemon — mako (Omarchy uses mako) exec --no-startup-id mako # Alternative: swaync (Sway Notification Center) — more feature-rich # exec --no-startup-id swaync # Screen color temperature exec --no-startup-id gammastep -l 52.43:15.15 -m wayland # Network manager applet (still works on Wayland) exec --no-startup-id nm-applet --indicator # Clipboard manager # Use Ctrl+Alt+H to toggle the clipboard history window # exec --no-startup-id wl-paste --watch --type image cliphist store exec --no-startup-id wl-paste --type text --watch cliphist store exec --no-startup-id wl-paste --type image --watch cliphist store # Bluetooth manager (waybar module can handle this, or use blueman-applet) # exec --no-startup-id blueman-applet # Polkit authentication agent (needed for GUI apps that need root) exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 # Background services for XDG desktop portals (screen sharing, file picker) exec --no-startup-id dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway ################################################################# # Key repeat rate ################################################################# # input "type:keyboard" { # xkb_layout pl # # xkb_variant "programmer" # xkb_options "grp:alt_shift_toggle, compose:ralt" # repeat_delay 300 # repeat_rate 40 # } # input type:keyboard { xkb_layout pl xkb_options grp:win_space_toggle } # input type:keyboard { # xkb_layout pl # xkb_options level3:ralt_switch # } # input type:keyboard { # xkb_layout pl # xkb_options grp:alt_shift_toggle # } input type:keyboard { xkb_layout pl,us # lv3:ralt_switch keeps Right Alt working for Polish chars # grp:alt_shift_toggle allows Alt+Shift to switch layouts xkb_options lv3:ralt_switch,grp:alt_shift_toggle }