Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cococry/ragnar
Minimal, flexible & user-friendly X tiling window manager
https://github.com/cococry/ragnar
i3 linux tiling-window-manager window-manager x11
Last synced: 29 days ago
JSON representation
Minimal, flexible & user-friendly X tiling window manager
- Host: GitHub
- URL: https://github.com/cococry/ragnar
- Owner: cococry
- License: gpl-3.0
- Created: 2023-04-13T14:52:31.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-28T13:09:04.000Z (about 2 months ago)
- Last Synced: 2024-10-02T01:23:45.548Z (about 1 month ago)
- Topics: i3, linux, tiling-window-manager, window-manager, x11
- Language: C
- Homepage: https://ragnarwm.org
- Size: 10.5 MB
- Stars: 1,045
- Watchers: 22
- Forks: 21
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-useful-projects - <img src="https://icon.horse/icon/github.com" height="20px" align="center"/>/cococry/ragnar - X tiling window manager (Jump To / Linux)
- awesome-useful-projects - <img src="https://icon.horse/icon/github.com" height="20px" align="center"/>/cococry/ragnar - X tiling window manager (Jump To / Linux)
- awesome-linux-ricing - ragnar - Minimal, flexible & user-friendly X tiling window manager. (Window Manager / Dynamic)
README
**Ragnar is a feature-rich, straight-to-the-point dynamic window manager for X**
The goal of ragnarwm is to create a window manager that can be used as a solid foundation
for fully fledged desktop environments but also serve as a minimal daily driver. Ragnar
contains about 5k lines of code which contain features like an IPC API, configuration file,
tiling layouts, EWMH & ICCM implementation and much more key features.Since Version 2.0, the window manager uses the **XCB API** for communicating with the X server,
which is far less bloated compared to the Xlib API.---
# Installation
Installing ragnarwm is a process that involes two main steps.
- Install build depdencies
```console
xcb-util, xcb-proto, xcb-util-keysyms, xcb-util-cursor, xcb-util-wm, xorg-server, xorg-xinit, mesa, libconfig
```- Install the window manager
```console
$ ./install.sh
```# Technical
### General
Ragnar uses **reparenting** to handle client windows which gives it the ability to easily create decoration
for client windows.
Client windows are stored within a doubly linked list.
As for the tiling fuctionality, **ragnar does not use some kind of tree datastructure**, instead,
there are **preset layouts** which always resemble the same shape. This choice was made to keep the experience
smooth without thinking about where to place the spawning window. Layouts are still very customizable by changing the sizes of master and slave windows with a simple keybind.### IPC
The source code also contains an **abstracted IPC API** for creating plugins. The API works through
a **socket with binary data**.### Config file
Ragnar uses libconfig to read an external configuration file for the window manager (/home/user/.config/ragnarwm.cfg).
This configuration is read on startup and can be reloaded while the WM is running (Typically through a keybind).### Code Structure
- **funcs.h**
This file contains the documented function declarations that the window manager uses. Allthough,
it does **not** contain the callback functions that are fired via keybindings.- **keycallbacks.h**
This file contains the documented function **definitions** of all callback functions that can be specified
in the configuration file.- **ragnar.c**
This is the main translation unit that contains the definitions of all systematic window manager functions,
containg the application loop, event handling, calculating tiling layouts and more.- **structs.h**
This file contains structures and function declaration that are used throughout the window manager's code.- **config.h/config.c**
Those files handle loading the configuration file with libconfig.- **ipc/**
The files socket.h and socket.c handle socket connections from clients via IPC.