Go to file
rozodru 8b4445b856 forget to update version number 2025-08-01 12:24:25 -04:00
assets added nedm img 2025-07-18 19:32:09 -04:00
examples added keyboard repeat rate options to the config in examples/config 2025-07-20 16:40:41 -04:00
fuzz initial commit 2025-07-18 12:05:23 -04:00
man initial commit 2025-07-18 12:05:23 -04:00
protocols initial commit 2025-07-18 12:05:23 -04:00
scripts removed baked in status bar, will instead build thirdparty custom bar 2025-07-19 10:04:53 -04:00
.clang-format initial commit 2025-07-18 12:05:23 -04:00
.gitignore various fixes and code clean up stuff. improved frame management stability 2025-08-01 12:23:07 -04:00
LICENSE Initial commit 2025-07-18 06:31:13 -04:00
PROGRESS.md fixed a bunch of stuff, xwayland was turned off and positioning of some layer shell apps should work now. still having issues with the bars not showing. 2025-07-19 17:25:14 -04:00
README.md updated readme.md to fix typos 2025-07-24 17:41:10 -04:00
config.h.in initial commit 2025-07-18 12:05:23 -04:00
idle_inhibit_v1.c initial commit 2025-07-18 12:05:23 -04:00
idle_inhibit_v1.h initial commit 2025-07-18 12:05:23 -04:00
input.h initial commit 2025-07-18 12:05:23 -04:00
input_manager.c various updates 2025-07-18 12:48:00 -04:00
input_manager.h various updates 2025-07-18 12:48:00 -04:00
ipc_server.c initial commit 2025-07-18 12:05:23 -04:00
ipc_server.h initial commit 2025-07-18 12:05:23 -04:00
keybinding.c enabled smart gap feature - no gaps for single windows within workspace 2025-07-20 09:22:33 -04:00
keybinding.h added in gap feature for windows that can be configured via the config file 2025-07-20 08:51:25 -04:00
layer_shell.c panel positioning fix in relation to frames/windows 2025-07-20 07:14:02 -04:00
layer_shell.h fixed a bunch of stuff, xwayland was turned off and positioning of some layer shell apps should work now. still having issues with the bars not showing. 2025-07-19 17:25:14 -04:00
libinput.c initial commit 2025-07-18 12:05:23 -04:00
manuals.md initial commit 2025-07-18 12:05:23 -04:00
meson.build forget to update version number 2025-08-01 12:24:25 -04:00
meson_options.txt panel positioning fix in relation to frames/windows 2025-07-20 07:14:02 -04:00
message.c initial commit 2025-07-18 12:05:23 -04:00
message.h initial commit 2025-07-18 12:05:23 -04:00
nedm.c various fixes and code clean up stuff. improved frame management stability 2025-08-01 12:23:07 -04:00
nedm.jpg added nedm img 2025-07-18 19:32:09 -04:00
output.c various fixes and code clean up stuff. improved frame management stability 2025-08-01 12:23:07 -04:00
output.h panel positioning fix in relation to frames/windows 2025-07-20 07:14:02 -04:00
pango.c initial commit 2025-07-18 12:05:23 -04:00
pango.h initial commit 2025-07-18 12:05:23 -04:00
parse.c added in gap feature for windows that can be configured via the config file 2025-07-20 08:51:25 -04:00
parse.h initial commit 2025-07-18 12:05:23 -04:00
seat.c various fixes and code clean up stuff. improved frame management stability 2025-08-01 12:23:07 -04:00
seat.h Fixed pointer constraint - FINALLY 2025-07-22 15:00:05 -04:00
server.c various fixes and code clean up stuff. improved frame management stability 2025-08-01 12:23:07 -04:00
server.h various fixes and code clean up stuff. improved frame management stability 2025-08-01 12:23:07 -04:00
util.c initial commit 2025-07-18 12:05:23 -04:00
util.h initial commit 2025-07-18 12:05:23 -04:00
view.c various fixes and code clean up stuff. improved frame management stability 2025-08-01 12:23:07 -04:00
view.h Fixed pointer constraint - FINALLY 2025-07-22 15:00:05 -04:00
wallpaper.c status bar and wallpaper update 2025-07-18 16:51:20 -04:00
wallpaper.h status bar and wallpaper update 2025-07-18 16:51:20 -04:00
workspace.c panel positioning fix in relation to frames/windows 2025-07-20 07:14:02 -04:00
workspace.h initial commit 2025-07-18 12:05:23 -04:00
xdg_shell.c initial commit 2025-07-18 12:05:23 -04:00
xdg_shell.h initial commit 2025-07-18 12:05:23 -04:00
xwayland.c initial commit 2025-07-18 12:05:23 -04:00
xwayland.h initial commit 2025-07-18 12:05:23 -04:00

README.md

NEDM - A Modern Wayland Compositor

NEDM is a modern, feature-rich Wayland compositor built on top of wlroots, evolved from the Cagebreak window manager. It provides a tiling window management experience with integrated desktop components including a status bar, wallpaper support, and comprehensive configuration options.

alt text

Features

Core Window Management

  • Tiling Window Manager: Efficient keyboard-driven window management
  • Multiple Workspaces: Support for up to 6 workspaces with easy switching
  • Multi-Monitor Support: Native support for multiple displays
  • XWayland Compatibility: Run legacy X11 applications seamlessly

Desktop Integration

  • Integrated Status Bar: Real-time system information display
    • Date and time
    • Battery status with charging indicators
    • Volume control information
    • WiFi connectivity status
    • Workspace indicators
  • Wallpaper Support: wallpaper with multiple scaling modes
    • Fill, fit, stretch, center, and tile modes
    • Configurable background colors
  • Layer Shell Protocol: Support for notification daemons and overlays

Modern Wayland Features

  • Full Protocol Support: Comprehensive Wayland protocol implementation
  • Gaming Support: Pointer constraints and relative pointer for gaming
  • Clipboard Management: Primary selection and data control
  • Screen Capture: Screenshots and screen recording support
  • Idle Management: Screen locking and power management integration

Installation

Prerequisites

  • wlroots 0.19.0 or later
  • Wayland development libraries
  • Cairo and Pango for rendering
  • libinput for input handling
  • Meson and Ninja for building

Building from Source

# Clone the repository
git clone https://git.andmc.ca/rozodru/NEDM.git
cd NEDM

# Configure the build
meson setup build

# Compile
ninja -C build

# Install (optional)
sudo ninja -C build install

Quick Start

Basic Usage

# Run NEDM
./build/nedm

# Run with custom config
./build/nedm -c ~/.config/nedm/config

# Show system information
./build/nedm -s

# Show version
./build/nedm -v

Configuration Setup

  1. Create the configuration directory:

    mkdir -p ~/.config/nedm/
    
  2. Copy the example configuration:

    cp examples/config ~/.config/nedm/config
    
  3. Edit your configuration:

    $EDITOR ~/.config/nedm/config
    

Configuration

NEDM uses a text-based configuration file located at ~/.config/nedm/config. The configuration supports:

Basic Settings

# Set default terminal
exec foot

# Frame Gaps
Gap 10 # Gap 0 will show no gaps

# Number of workspaces
workspaces 6

# Background color
background 0.25 0.21 0.2

# Key binding prefix
escape A-space

Status Bar Configuration

# Enable and configure status bar
configure_status_bar position top_right
configure_status_bar height 24
configure_status_bar width_percent 20
configure_status_bar update_interval 1000
configure_status_bar font "monospace 10"
configure_status_bar bg_color 0.1 0.1 0.1 0.9
configure_status_bar text_color 1.0 1.0 1.0 1.0

Wallpaper Configuration

# Set wallpaper
configure_wallpaper image_path "assets/nedm.png"
configure_wallpaper mode fill
configure_wallpaper bg_color 0.2 0.2 0.3 1.0

Key Bindings

# Window management
bind s hsplit          # Split horizontally
bind S vsplit          # Split vertically
bind Q only            # Make window fullscreen
bind Tab focus         # Focus next window
bind A-k close         # Close window

# Workspace switching
bind 1 screen 1        # Switch to workspace 1
bind 2 screen 2        # Switch to workspace 2
# ... etc

# Application launching
bind t exec foot       # Launch terminal
bind w exec firefox    # Launch web browser

Default Key Bindings

The default key binding prefix is Alt+Space. Common bindings include:

Key Combination Action
Alt+Space s Split window horizontally
Alt+Space S Split window vertically
Alt+Space Q Make window fullscreen
Alt+Space Tab Focus next window
Alt+Space Alt+k Close window
Alt+Space t Launch terminal
Alt+Space w Launch web browser
Alt+Space 1-6 Switch to workspace
Alt+Space R Enter resize mode

Status Bar

Currently works with Waybar, script for workspace/frame notification is https://git.andmc.ca/rozodru/NEDMWaybarScript

Wallpaper Support

NEDM supports wallpapers with multiple scaling modes:

  • Fill: Scale to fill screen, cropping if necessary
  • Fit: Scale to fit within screen, maintaining aspect ratio
  • Stretch: Stretch to fill screen, ignoring aspect ratio
  • Center: Center image without scaling
  • Tile: Repeat image in a tiled pattern

Advanced Features

Multi-Monitor Setup

# Configure outputs
output eDP-1 enable
output eDP-1 pos 0 0 res 1920x1080 rate 60
output HDMI-A-1 pos 1920 0 res 1920x1080 rate 60

Input Configuration

# Touchpad configuration
input type:touchpad tap enable
input type:touchpad natural_scroll enable
input type:touchpad dwt enable

Layer Shell Applications

NEDM supports applications that use the layer shell protocol:

  • Notification daemons: swaync, dunst, mako
  • Application launchers: rofi, wofi
  • Status bars: waybar (external)
  • Screen lockers: swaylock

Protocol Support

NEDM implements comprehensive Wayland protocol support:

  • Core Wayland protocols
  • XDG Shell for window management
  • Layer Shell for overlays and panels
  • XWayland for X11 application compatibility
  • Pointer constraints for gaming applications
  • Relative pointer for first-person games
  • Idle inhibit for media applications
  • Gamma control for night light applications
  • Screen capture protocols

Development

Project Structure

NEDM/
├── nedm.c                 # Main executable
├── server.{c,h}           # Core server implementation
├── output.{c,h}           # Output/monitor management
├── status_bar.{c,h}       # Integrated status bar
├── wallpaper.{c,h}        # Wallpaper rendering
├── layer_shell.{c,h}      # Layer shell protocol
├── xdg_shell.{c,h}        # XDG shell implementation
├── input_manager.{c,h}    # Input handling
├── keybinding.{c,h}       # Key binding system
├── parse.{c,h}            # Configuration parsing
├── examples/config        # Example configuration
└── assets/                # Project assets

Building for Development

# Debug build
meson setup build -Dbuildtype=debug

# Build and run
ninja -C build && ./build/nedm

Troubleshooting

p

Common Issues

NEDM won't start

  • Ensure you're running under Wayland
  • Check that wlroots dependencies are installed
  • Verify your user is in the input group

Configuration not loading

  • Check file exists at ~/.config/nedm/config
  • Verify file permissions are readable
  • Check syntax with nedm -c ~/.config/nedm/config

Wallpaper not displaying

  • Ensure PNG file exists at specified path
  • Check file permissions
  • Verify Cairo PNG support is installed

Status bar not showing

  • Check if status bar is enabled in configuration
  • Verify system information sources are available
  • Check if required system files exist (/sys/class/power_supply/, etc.)

Debug Information

# Show detailed system information
./build/nedm -s

# Run with specific configuration
./build/nedm -c /path/to/config

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test thoroughly
  5. Submit a pull request

License

NEDM is licensed under the MIT License. See the LICENSE file for details.

Acknowledgments

Version

Current version: 0.1.6