GithubHelp home page GithubHelp logo

corecaps / yggdrasilwm Goto Github PK

View Code? Open in Web Editor NEW
4.0 1.0 0.0 21.69 MB

Automatic Tiling Window Manager for X11 coded in C++ 11

Home Page: https://corecaps.github.io/YggdrasilWM/

License: GNU General Public License v3.0

CMake 2.15% C++ 95.91% Shell 1.66% Python 0.28%
x11 x11-wm wiindow-manager

yggdrasilwm's Introduction

gplv3-only YggdrasilWM

YggdrasilWM

Version 0.1.1 screenshot

What is YggdrasilWM?

  • YggdrasilWM is a lightweight, automatic tiling window manager for the X11 system, drawing inspiration from established projects like qtile and xmonad. Our goal is to combine efficiency and configurability, offering users a seamless experience that maximizes productivity while keeping resource usage minimal.

  • Developed in C++11, YggdrasilWM emphasizes minimalism not just in its design but also in its dependency requirements, ensuring a clean and straightforward setup process.

  • Originally conceived as a personal project to deepen my understanding of window management systems, YggdrasilWM has evolved with the aim of becoming a practical choice for users looking for an alternative window manager that balances flexibility with simplicity.

Roadmap

Our vision for YggdrasilWM's future is clear and focused on enhancing its functionality and user experience:

  • EWMH Support: Achieve full compliance with Extended Window Manager Hints (EWMH) to ensure broad compatibility and integration with a variety of applications.
  • Layout and Widget Diversity: Expand the range of available tiling layouts and widgets, allowing for a more personalized and efficient workspace.
  • Multimonitor Support: Implement comprehensive support for multimonitor setups, accommodating users with extensive display configurations.
  • Dynamic Configuration: Introduce the ability to reload configurations on-the-fly, making customization and adjustments seamless and immediate.

YggdrasilWM is steadily growing, and while it remains a project born out of a desire to learn and explore, it aspires to cater to a broader audience by providing a stable, efficient, and customizable window management experience.

License

YggdrasilWM is licensed under the GNU General Public License v3. The full GPL license is available in the LICENSE file.

Dependencies

C++ Badge CMake Badge

Optional

used for configuration :

used for testing :

used for documentation :

Build

git clone https://github.com/corecaps/YggdrasilWM.git
cd YggdrasilWM
mkdir build
cd build
cmake ..
make

Usage

Usage: YggdrasilWM [options...]

Options:

  -h,--help                   Print this help message and exit
  -v,--version                Print version information and exit
  -d,--display <display>      X11 display to connect to
  -l,--log <log>              Log file
  -c,--config <config>        Config file

Configuration

Writing the configuration file

You have two option to configure YggdrasilWM :

Apple pkl

Apple pkl (https://pkl-lang.org/) : type check the configuration let you build using loops and conditions this is the default configuration file format. To generate the final configuration file you need to run the pkl script in the root directory.

pkl eval config-template.pkl -f json > config.json

the config-template.pkl is heavily commented and should be easy to understand.

JSON

You can also write the configuration file directly in JSON format. a default configuration file is provided in the root directory.

Configuration file location

The program will look for a file named config.json in this order :

  • The file specified with the -c option
  • The current directory
  • $HOME/.config/yggdrasilwm/config.json
  • /etc/yggdrasilwm/config.json

Bars

  • Bars are configured using the configuration file.
  • Position can be :
    • top
    • bottom
    • left
    • right
  • The size of the bars are substracted to the layout space.
  • Bars are common to all groups but specific to each screen.
  • Bars are constituted of Widgets:
    • each widget is compiled into a shared library.
    • The shared libraries are loaded at runtime.
  • To write a widget you need to inherit the Widget class ( inc/Bars/Widget.hpp ) and implement the virtual methods.
  • The defaults widgets are compiled with the CMake when running the default build. Their source are placed in the plugins subdirectory. if you want to add a widget you need to build them manually or add them to the CMakeLists.txt file.
  • If your widget needs Data from the Window Manager they need to register the keys they need in the Window Manager. The Window Manager will then send the data to the widget when it is updated.

Testing using Xephyr

YggdrasilWM is not yet ready to be used as a daily driver, but you can test it using Xephyr. Xephyr is a nested X server that runs inside your current X server. It is used to test window managers and other X11 programs.

  • Do not forget to press Ctrl+Shift in Xephyr Window to test Mouse and Keyboard bindings

Using provided start.sh

./start.sh

The script will start Xephyr, YggdrasilWM and some other programs for testing. The logs are stored in the logs directory, the Xephyr window is 800x600 and starts on display :1

  • to change the launched programs edit the xinitrc file in the root directory.
  • to edit the Xephyr window size and other options edit the start.sh file in the root directory.

Manually

Xephyr -ac -br -noreset -screen 800x600 :1 &
./build/Yggdrasilwm -d :1 -l logs/yggdrasilwm.log --log-level 0

As there is no .xinitrc file, you will have to start a terminal manually using

DISPLAY=:1 ; xterm & 

Documentation

The documentation is generated using Doxygen. Run

doxygen doxygen.cfg

in the root directory to generate the documentation in the doc/ subdirectory. Feel free to edit the doxygen.cfg file to your needs.

yggdrasilwm's People

Contributors

corecaps avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.