You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

610 lines
21 KiB

#----------------------------------------------------------------
# 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).
#################################################################
# Fullscreen screenshot → save to ~/Pictures and copy to clipboard
bindsym Print exec grim -t png ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png && grim -t png - | wl-copy -t image/png
# Region screenshot → select area with slurp
bindsym Shift+Print exec grim -t png -g "$(slurp)" ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png && grim -t png -g "$(slurp)" - | wl-copy -t image/png
# Active window screenshot (sway-specific: get focused window geometry)
bindsym Control+Print exec grim -t png -g "$(swaymsg -t get_tree | jq -j '.. | select(.type?) | select(.focused) | .rect | "\(.x),\(.y) \(.width)x\(.height)"')" ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png
#################################################################
# 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
}