Skip to content
/ sswm Public

Minimal, flexible & user-friendly X and Wayland tiling window manager with rust

License

Notifications You must be signed in to change notification settings

Walker-00/sswm

Repository files navigation

Rust Check Clippy Analyze

SSWM

Minimal, flexible & user-friendly X and Wayland tiling window manager but with rust.
Feel free to open issues and make pull requests.

[Overview]

SSWM means Saffron Spring Window Manager.
Saffron and Spring are the two well-known revolutions in burma (my home country).
Main focus of the SSWM is to create Free, User Friendly, Configurable, Fast and Safe window manager for both X and Wayland.
SSWM is a part of the project Project SS.

Note: Not recommended to use with Wayland as of now.

[Features]

  • Tiling layout
  • Multi-monitor support
  • Altering layout (Application switching, changing master size...)
  • Fullscreening windows
  • Auto Start Commands
  • Multiple Layouts
  • Full compositor Support
  • Hover to select windows
  • Configuration
  • Scratchpads
  • Status Bar
  • Window decorations
  • Support Extended Window Manager Hints
  • Sys-Trays for bar

[RoadMap]

  • Make it Work
    • X window manager with penrose
    • Basic Wayland compositor
  • Make it Right
    • Rewrite X window managr in x11rb
    • Fix bug from Wayland compositor
    • Add more features to both X and Wayland
  • Make it Fast
    • Optimize with cargo flags and options
    • Optimize the logic codes

[Configuration]

SSWM will auto generate config file to $HOME/.config/sswm/config.yml
SSWM uses .yaml format for user-friendly configuration.

[Default Config File]

---
max_main: 1
normal_bordar: 0
focused_bordar: 4278190335
workspace_tags:
  - "1"
  - "2"
  - "3"
  - "4"
  - "5"
  - "6"
  - "7"
  - "8"
ratio: 0.6
ratio_step: 0.1
outer_gaps: 5
inner_gaps: 5
top_gaps: 0
start_up: []
commands:
  - keybind: M-S-Return
    command: alacritty
  - keybind: M-x
    command: firefox
actions:
  - keybind: M-S-x
    action: eXit # case doesn't matter for action names
  - keybind: M-S-q
    action: kiLL
xcommands:
  - keybind: M-A-e
    command: emacs
  - keybind: M-C-v
    command: vim
xactions:
  - keybind: M-j
    action: focusNext
  - keybind: M-f
    action: ToggleFullScreen
  - keybind: M-k
    action: focusPrevious
  - keybind: M-S-j
    action: SwapDown
  - keybind: M-S-k
    action: SwapUp
  - keybind: M-S-f
    action: floatfocused
  - keybind: M-Tab
    action: ToggleTag
  - keybind: M-bracketright
    action: FocusNextScreen
  - keybind: M-bracketleft
    action: FocusPreviousScreen
  - keybind: M-grave
    action: NextLayout
  - keybind: M-S-grave
    action: PreviousLayout
  - keybind: M-S-Up
    action: IncMain
  - keybind: M-S-Down
    action: DecMain
  - keybind: M-S-Right
    action: ExpandMain
  - keybind: M-S-Up
    action: ShrinkMain
wcommands:
  - keybind: M-S-Return
    command: kitty
wactions: []

[Config Options]

Option Format Description
max_main Integer Maximum number of windows in the main area of the layout.
normal_border Integer Border color for normal (unfocused) windows.
focused_border Integer Border color for focused windows.
workspace_tags List of Strings List of workspace tags.
ratio Float Initial ratio of the main area to the whole screen.
ratio_step Float Step size for adjusting the main area ratio.
outer_gaps Integer Outer gaps (spacing) between windows and the screen edges.
inner_gaps Integer Inner gaps (spacing) between windows.
top_gaps Integer Gaps at the top of the screen for panels or other elements.
start_up List of Strings List of commands to run on startup.
commands List of Command Objects List of keybindings and associated commands to execute For Both X and Wayland.
actions List of Action Objects List of keybindings and associated actions to perform For Both X and Wayland.
xcommands List of Command Objects List of keybindings and associated commands to execute For X11.
xactions List of Action Objects List of keybindings and associated actions to perform For X11.
wcommands List of Command Objects List of keybindings and associated commands to execute For Wayland.
wactions List of Action Objects List of keybindings and associated actions to perform For Wayland.

If x and w specified commands and actions(e.g. xactions, wcommands), they might override the commands and actions if they are in conflict.

[Actions]

Actions Description
Kill Kill the focused window.
Exit Exit the window manager.
FocusNext Focus the next window.
FocusPrevious Focus the previous window.
SwapDown Swap the focused window with the one below.
SwapUp Swap the focused window with the one above.
ToggleFullScreen Toggle fullscreen mode for the focused window.
FloatFocused Float the currently focused window.
ToggleTag Toggle the tag of the focused window.
FocusNextScreen Focus the next screen.
FocusPreviousScreen Focus the previous screen.
NextLayout Switch to the next layout.
PreviousLayout Switch to the previous layout.
IncMain Increase the size of the main area.
DecMain Decrease the size of the main area.
ExpandMain Expand the main area.
ShrinkMain Shrink the main area.

Case doesn't matter for writing Actions name.
kill, Kill, KiLL all work.

[Required Packages]

  • rustup
  • xorg
  • libwayland
  • libxkbcommon
  • libudev
  • libinput
  • libgbm
  • libseat

[Installation]

git clone https://github.com/Walker-00/sswm
cd sswm
cargo install --path .
sudo cp sswm.desktop sswm_way.desktop /usr/share/xsessions/.

[ScreenShot]

sswm_3

[Voices From Burma]

Currently, Burma is under the Military rule and as a burmese, living under the dictatorship is extremely chellenging.
But we stayed strong and are fighting against Military Junta's bullets and violence.
We demand Justice and Democracy.
And we kindly want to ask for the International support and attention.

About

Minimal, flexible & user-friendly X and Wayland tiling window manager with rust

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages