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

Overview

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.

You might also like...
Watches changes in a rust project, runs test and shows friendly notification
Watches changes in a rust project, runs test and shows friendly notification

Cargo testify Automatically runs tests on your Rust project and notifies about the result. Install Install prerequisites (for Debian/Ubuntu): apt-get

Rust Util Collection, a simple and friendly error-chain

RUC Rust Util Collection, a simple and friendly error-chain, with many useful utils as an addition. The painful experience of using error-chain gave b

Rust Util Collection, a simple and friendly error-chain, with many useful utils as an addition.

RUC Rust Util Collection, a simple and friendly error-chain, with many useful utils as an addition. The painful experience of using error-chain gave b

A strict, yet friendly mocking library for Rust 2018

Mockiato A strict, yet friendly mocking library for Rust 2018 ⚠️ Disclaimer for working with stable rust Mockiato relies on the unstable proc_macro_di

🐦 Friendly little instrumentation profiler for Rust 🦀
🐦 Friendly little instrumentation profiler for Rust 🦀

🐦 puffin The friendly little instrumentation profiler for Rust How to use fn my_function() { puffin::profile_function!(); ... if ... {

dbt Cloud™️ infrastructure-as-code that is friendly to analysts
dbt Cloud™️ infrastructure-as-code that is friendly to analysts

dbterra dbt Cloud ™️ infrastructure-as-code that is friendly to analysts, bizops, etc Motivation While there are Terraform ™️ plugins that can be used

A lean, minimal, and stable set of types for color interoperation between crates in Rust.

This library provides a lean, minimal, and stable set of types for color interoperation between crates in Rust. Its goal is to serve the same function that mint provides for (linear algebra) math types.

A program written in Rust, that allows the user to find the current location of the International Space Station and see it on a map.

ISS Location ViewFinder A program written in Rust, that allows the user to find the current location of the International Space Station and see it on

untyped-arena provides an Arena allocator implementation that is safe and untyped with minimal complexity

untyped-arena untyped-arena provides an Arena allocator implementation that is safe and untyped with minimal complexity Usage let arena = Arena::new()

Comments
  • Make README a little bit more readable and fix a few typos

    Make README a little bit more readable and fix a few typos

    fixed a few spelling errors and re-wrote the [Voices from Burma] sessions.

    Please pay attention to this line

    original

    If x and w specified commands and actions might be overrided to commands and actions if they were conflit.

    fixed version

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

    is this what you intend to describe?

    opened by mustardfrog 1
  • Error on compiling

    Error on compiling

    OS: Ubuntu 20.04LTS

    cargo-src: from package managers

    DE: no

    WM: yes(I3wm)

    try to compile on i3wm but it's an error while compiling.

    TERMINAL LOGS::

    error: failed to run custom build command for libseat-sys v0.1.7

    Caused by: process didn't exit successfully: /home/woody/Desktop/nestProjects/task-scheduling/sswm/target/release/build/libseat-sys-766419febbf22492/build-script-build (exit status: 101) --- stdout cargo:rerun-if-env-changed=LIBSEAT_NO_PKG_CONFIG cargo:rerun-if-env-changed=PKG_CONFIG_x86_64-unknown-linux-gnu cargo:rerun-if-env-changed=PKG_CONFIG_x86_64_unknown_linux_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG cargo:rerun-if-env-changed=PKG_CONFIG cargo:rerun-if-env-changed=LIBSEAT_STATIC cargo:rerun-if-env-changed=LIBSEAT_DYNAMIC cargo:rerun-if-env-changed=PKG_CONFIG_ALL_STATIC cargo:rerun-if-env-changed=PKG_CONFIG_ALL_DYNAMIC cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64-unknown-linux-gnu cargo:rerun-if-env-changed=PKG_CONFIG_PATH_x86_64_unknown_linux_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_PATH cargo:rerun-if-env-changed=PKG_CONFIG_PATH cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64-unknown-linux-gnu cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR_x86_64_unknown_linux_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_LIBDIR cargo:rerun-if-env-changed=PKG_CONFIG_LIBDIR cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64-unknown-linux-gnu cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR_x86_64_unknown_linux_gnu cargo:rerun-if-env-changed=HOST_PKG_CONFIG_SYSROOT_DIR cargo:rerun-if-env-changed=PKG_CONFIG_SYSROOT_DIR

    --- stderr thread 'main' panicked at 'called Result::unwrap() on an Err value: "pkg-config" "--libs" "--cflags" "libseat" did not exit successfully: exit status: 1 error: could not find system library 'libseat' required by the 'libseat-sys' crate

    --- stderr Package libseat was not found in the pkg-config search path. Perhaps you should add the directory containing libseat.pc' to the PKG_CONFIG_PATH environment variable Package 'libseat', required by 'virtual:world', not found ', /root/.cargo/registry/src/github.com-1ecc6299db9ec823/libseat-sys-0.1.7/build.rs:30:42 note: run withRUST_BACKTRACE=1environment variable to display a backtrace warning: build failed, waiting for other jobs to finish... error: failed to compilesswm v0.0.1 (/home/woody/Desktop/nestProjects/task-scheduling/sswm), intermediate artifacts can be found at/home/woody/Desktop/nestProjects/task-scheduling/sswm/target`

    screen shot?

    image

    documentation 
    opened by RizeKishimaro 6
  • Suggestion to have xmonad/dwm configuration

    Suggestion to have xmonad/dwm configuration

    Would be kinda cool to have an easy way to config your entire project by modifying the source code, similarly to how xmonad and dwm does it. This gives the user much more control.

    help wanted 
    opened by Raj2032 14
Owner
Linus Walker
15 y.o Founder of @Null-Gate, A mad man.
Linus Walker
A scrollable-tiling Wayland compositor.

niri The beginnings of a scrollable-tiling Wayland compositor. Status Heavily work in progress. The occasional thing works, but likely is in a half-br

Ivan Molodetskikh 17 Aug 16, 2023
Let Tauri's transparent background rendering window be stacked on Bevy's rendering window in real time to run the game with native-level performance!

Native Bevy with Tauri HUD DEMO 将 Tauri 的透明背景渲染窗口实时叠在 Bevy 的渲染窗口上,以使用原生级别性能运行游戏! Let Tauri's transparent background rendering window be stacked on Bev

伊欧 3 Mar 25, 2024
Minimal, flexible framework for implementing solutions to Advent of Code in Rust

This is advent_of_code_traits, a minimal, flexible framework for implementing solutions to Advent of Code in Rust.

David 8 Apr 17, 2022
Byte is a blazingly fast🚀 Discord Bot with a user-friendly design using twilight written in rust🦀.

Byte Byte is a blazingly fast?? Discord Bot with a user-friendly design using twilight written in rust??. How To Run There is a public version of the

TakoTheDev 3 Nov 15, 2023
`xrandr` for Gnome/wayland, on distros that don't support `wlr-randr`

gnome-randr-rust A reimplementation of xrandr for Gnome on Wayland, especially for systems that don't support wlr-output-management-unstable-v1 (e.g.

Max Ainatchi 40 Dec 21, 2022
Demonstration of flexible function calls in Rust with function overloading and optional arguments

Table of Contents Table of Contents flexible-fn-rs What is this trying to demo? How is the code structured? Named/Unnamed and Optional arguments Mecha

Tien Duc (TiDu) Nguyen 81 Nov 3, 2022
Cross-platform Window library in Rust for Tauri. [WIP]

Cross-platform application window creation library in Rust that supports all major platforms like Windows, macOS, Linux, iOS and Android. Built for you, maintained for Tauri.

Tauri 899 Jan 1, 2023
Flexible snowflake generator, reference snoyflake and leaf.

Flexible snowflake generator, reference snoyflake and leaf.

Egccri 2 May 6, 2022
A flexible, simple to use, immutable, clone-efficient String replacement for Rust

A flexible, simple to use, immutable, clone-efficient String replacement for Rust. It unifies literals, inlined, and heap allocated strings into a single type.

Scott Meeuwsen 119 Dec 12, 2022
Concatenate Amazon S3 files remotely using flexible patterns

S3 Concat This tool has been migrated into s3-utils, please use that crate for future updates. A small utility to concatenate files in AWS S3. Designe

Isaac Whitfield 33 Dec 15, 2022