|
||
---|---|---|
assets | ||
examples | ||
fuzz | ||
man | ||
protocols | ||
scripts | ||
.clang-format | ||
.gitignore | ||
LICENSE | ||
PROGRESS.md | ||
README.md | ||
config.h.in | ||
idle_inhibit_v1.c | ||
idle_inhibit_v1.h | ||
input.h | ||
input_manager.c | ||
input_manager.h | ||
ipc_server.c | ||
ipc_server.h | ||
keybinding.c | ||
keybinding.h | ||
layer_shell.c | ||
layer_shell.h | ||
libinput.c | ||
manuals.md | ||
meson.build | ||
meson_options.txt | ||
message.c | ||
message.h | ||
nedm.c | ||
nedm.jpg | ||
output.c | ||
output.h | ||
pango.c | ||
pango.h | ||
parse.c | ||
parse.h | ||
seat.c | ||
seat.h | ||
server.c | ||
server.h | ||
util.c | ||
util.h | ||
view.c | ||
view.h | ||
wallpaper.c | ||
wallpaper.h | ||
workspace.c | ||
workspace.h | ||
xdg_shell.c | ||
xdg_shell.h | ||
xwayland.c | ||
xwayland.h |
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.
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
-
Create the configuration directory:
mkdir -p ~/.config/nedm/
-
Copy the example configuration:
cp examples/config ~/.config/nedm/config
-
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:
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- 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