Code Monkey home page Code Monkey logo

flukewm's Introduction

logo

Fluke

A simple, fast and efficient window manager for X, made with C++ & XCB.

Note: This project is still under heavy development, so do not expect a fully working experience out of the box. Feedback & critsism are welcome!

build c++ code size license issues discord

What is Fluke?

Fluke is a simple (but with batteries included) window manager for X, which uses XCB for efficient, asynchronous IO. Fluke is designed to be configured through source (á la dwm).

Why is Fluke?

I wanted a window manager that was lightweight, hackable, well documented, included a decent amount of functionality out of the box (with sane defaults), and was written in a language I was comfortable with.

I never quite found what I was looking for in other window managers for a number of reasons:

  • Lightweight usually implies C which is a little archaic for my liking. I wanted a more modern language to better express my ideas, but also wouldn't compromise on runtime performance.

  • Most window managers are sorely lacking in well documented code. This makes it more difficult to understand what's happening under the hood. I address this by being very liberal in my usage of both comments, and logging.

  • Multi-head support in so-called "minimal" window managers is usually quite poor or non-existent. I use a laptop + dock setup, which means I frequently hotplug monitors.

  • The majority of minimal window managers are automatic-tiling; of which I'm not the biggest fan. With Fluke, I hope to solve this by making all window-positioning algorithms on-demand - for example, when a keybinding is pressed - such that my layout is not disturbed by the opening/closing of windows.

  • I wanted to make the best possible use of the asynchronous capabilities of XCB by properly queuing requests and fetching replies. So in essence, blocking for replies is done only when necessary, and in batches.

Features

These features constitute what I consider to be a usable base but I am open to suggestions.

  • Keybindings
  • Window centering
  • Window resizing & moving
  • Tiling (on-demand with keybinding)
  • Directional focusing, next/prev focusing, mouse focusing
  • Adopt orphaned windows (allows you to restart flukewm in place)
  • Configurable gutters to reserve space for status bars
  • Configurable window gaps & borders
  • Fullscreen windows
  • Window snapping
  • Workspaces & scratchpads
  • Basic EWMH support for docks, notifications, respectful closing of windows etc.
  • Monitor hotplug support
  • Autorandr-like monitor configuration

Prerequisites

  • Any c++17 compliant compiler should work (CI testing with Clang)
  • Libraries/Headers:
    • xcb
    • xcb-util
    • xcb-randr
    • xcb-icccm
    • xcb-ewmh
    • xcb-keysyms
    • X11 (for key symbols)

Build & Run

  • Run make or make debug=no symbols=no for debug and release build respectively
  • Binary will be placed at build/fluke
  • Note: Fluke will not run if another window manager is currently active

Installation

Todo...

License

This project uses the GPLv2 license. (check LICENSE.md)

Acknowledgements

Progress & discussion

You can join the discord server in order to follow progress and/or contribute to discussion of the project. (https://discord.gg/RmgjcES)

flukewm's People

Contributors

jackojc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  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.