sankalp 3d355482c6 refactor(src/services): replace default active app name from "Finder" to "Modus"
Modified default active app name in ModusService initialization and update logic to "Modus" to align with the project's branding and avoid confusion with macOS Finder.
2026-07-14 21:59:34 +05:45

Logo

Sparkles A hackable shell for Hyprland Powered by Fabric Sparkles

GitHub stars Hyprland Maintained Discord


Home Screen:

fabric

Lock Screen:

fabric

Quick Start

git clone https://github.com/S4NKALP/Modus ~/.config/Modus
cd ~/.config/Modus
./install.sh

Tip

Post Installation

  • Install recommended Icon theme , GTK theme and Cursor Theme
  • Check config/hypr/modus.conf edit it according to your device and copy it to your hyprland config
  • For Lock Screen Bind keys to uv run lock

Manual Installation

paru -S uv fabric-cli-git cliphist gnome-bluetooth-3.0 slurp ffmpeg hypridle hyprsunset hyprpicker hyprshot grim libnotify matugen-bin playerctl gtk-session-lock awww apple-fonts swappy wl-clipboard webp-pixbuf-loader wf-recorder acpi brightnessctl power-profiles-daemon uwsm cinnamon-desktop ddcutil at-spi2-core gcc make pkgconf appmenu-gtk-module libdbusmenu-gtk3 libdbusmenu-qt5 meson ninja wayland-protocols --needed
git clone https://github.com/S4NKALP/Modus ~/.config/Modus
cd ~/.config/Modus
uv sync

# Compile App Switcher C-backend
cd src/window/switcher/app-capture
meson setup builddir
meson compile -C builddir
cd ../../../..

# Compile Global Menu shim
cd src/window/globalmenu
gcc -shared -fPIC -O2 -o libmenu_button_shim.so libmenu_button_shim.c $(pkg-config --cflags --libs gtk+-3.0) -ldl
cd ../../..

uv run start

Global Menu Compatibility

MODUS injects the GTK3 menu-button shim (libmenu_button_shim.so) only into GTK3 apps, and only when launched through MODUS (dock, spotlight, panel). GTK4 apps are never touched, so they launch normally — a global LD_PRELOAD of this shim would otherwise crash every GTK4 process.

Terminal-launched GTK3 apps

Apps you start directly from a terminal don't go through MODUS, so they don't get the shim. They still work fine; they just miss the synthetic button-release fix the shim provides. To get it back without a dangerous system-wide LD_PRELOAD, use a thin wrapper that detects GTK3 and injects the shim only for that process:

#!/usr/bin/env bash
# ~/.local/bin/modus-launch — GTK3-aware launcher for the global menu shim
SHIM=~/.config/Modus/src/window/globalmenu/libmenu_button_shim.so
BIN="$(command -v "$1")"
if [[ -n "$BIN" ]] && readelf -d "$BIN" 2>/dev/null | grep -q 'libgtk-3\.so\.0'; then
    LD_PRELOAD="$SHIM" "$@"
else
    "$@"
fi

Make it executable (chmod +x ~/.local/bin/modus-launch) and run GTK3 apps as modus-launch gedit from the terminal. GTK4 apps fall through to a normal launch.

Documentation

Doc What's inside
Installation Guide Automated & manual install, dependencies
Configuration Guide config.toml, mods.toml, dock.toml, keybinds
Styling Guide Matugen colors, CSS customization
Architecture Overview App Switcher C-backend, Spotlight engine, Services
Spotlight Plugins Install/customize plugins, write your own, examples
FAQs & Tips Troubleshooting, shortcuts, live reload
Contributing Setup, code style, commit conventions

Configuration

Config files in config/, using TOML format:

File Purpose
config.toml Main settings (switcher, wallpaper, notifications)
mods.toml Custom panel buttons
dock.toml Pinned dock apps

See Configuration Guide for full reference.

Custom Mods

Define panel buttons in config/mods.toml:

[Mods.terminal]
icon = "terminal.svg"
icon-size = 16
order = 1
on-clicked = "kitty"
  • icon — SVG filename in src/assets/icons/
  • icon-size — defaults to 16
  • order — button position (lower = first)
  • on-clicked — shell command on click
  • on-left, on-middle, on-right — per-mouse-button commands
  • options — dropdown menu entries (each with label + on-clicked)
  • Full shell syntax (&&, |) via sh -c
  • Live reload — edit and changes apply instantly

Spotlight Plugins

The spotlight search (Super+D) is powered by plugins. Drop a .py file in config/plugins/ and it works instantly.

cp -r examples/plugins/hello.py config/plugins/hello.py
# Hit Super+D, type "hi" — greeting appears

Plugin development:

nvim config/plugins/hello.py
fabric-cli exec modus1 'deep_reload hello'   # no restart needed

See Spotlight Plugins for full docs and examples.

Team

Special Thanks

A big thank you to the following people for their incredible help with code and creative ideas. Your help made a real difference!

  • darsh: for creating Fabric, which made everything possible.
  • gummy bear album: for sharing fantastic code snippets that saved me time and effort.
  • axenide: for the amazing config that not only inspired parts of mine but also provided some gems I couldn't resist borrowing.
  • E3nviction: for code snippets and ideas that were incredibly helpful.

I truly appreciate your support

V1.0.0
Latest
2026-07-12 12:39:17 +00:00
Languages
Python 91.3%
CSS 4.6%
C 1.9%
Shell 1.3%
Lua 0.6%
Other 0.3%