A physics-animated Dynamic Island clone for Windows with real system integrations. Nimbus brings the elegant notification and status display from macOS to your Windows desktop with smooth spring animations, live media controls, system notifications, and more.
- π¬ Physics-Based Animations β Spring physics engine for fluid, natural-feeling animations
- π± Dynamic Island UI β Floating notification panel with smooth expand/collapse behavior
- π΅ Media Control Integration β Display and control media playback from any application
- π System Notifications β Elegant notification handling and display
- π Real-Time System Info β Clock, timer, and system status monitoring
- βοΈ Windows Integration β Uses Windows Runtime APIs for deep system integration
- π¨ Custom Font Support β Professional appearance with bundled typography
- π₯οΈ System Tray Support β Minimize to tray for unobtrusive operation
- Windows 10+ (Windows 11 recommended)
- Python 3.10+
- pip or conda package manager
pip install -e .For development with testing and linting tools:
pip install -e ".[dev]"Or use the Makefile:
make devnimbusOr using Python:
python -m nimbusOr using the Makefile:
make runnimbus/
βββ assets
β βββ fonts
β β βββ font.ttf
β βββ icons
βββ LICENSE
βββ Makefile
βββ nimbus
β βββ animation
β βββ app.py
β βββ core
β β βββ animation.py
β β βββ state.py
β βββ input.py
β βββ layout.py
β βββ modules
β β βββ clock.py
β β βββ media.py
β β βββ notifications.py
β β βββ permissions.py
β β βββ status.py
β β βββ timer.py
β βββ renderer.py
β βββ state.py
β βββ tray.py
β βββ utils
β β βββ config.py
β βββ window.py
βββ pyproject.toml
βββ README.md
βββ requirements.txt
βββ screenshots
β βββ snip_1.png
βββ tests
βββ test_modules.py
βββ test_spring.py
βββ test_state.py
Use the Makefile for common development tasks:
# Install development dependencies
make dev
# Run the application
make run
# Lint code
make lint
# Format code
make format
# Type checking
make typecheck
# Run tests
make test
# Build distribution package
make build
# Clean build artifacts
make clean
# Show all available commands
make helppytest
pytest -v # Verbose output
pytest tests/test_modules.py # Run specific test fileThe project uses:
- ruff β Fast Python linter and formatter
- mypy β Static type checker
- pytest β Test framework
- pytest-qt β Qt testing utilities
Run all checks:
make lint && make typecheck && make testThe pill cycles through multiple UI states, each with tailored content:
- Idle β Compact clock display (126Γ34 px)
- Media β Now playing info with visualizer bars
- Notification β Latest notification with scrolling title & body
- Stats (CPU/RAM/SSD) β System resource gauges
- Privacy β Camera & microphone access indicators
- Expanded β Full dashboard with time + media info
- Big Stats β System resources with detailed graphs
Display Cycle: IDLE β MEDIA β NOTIFICATION β STATS_CPU β STATS_RAM β STATS_PRIVACY (6 seconds per state)
Nimbus features a physics-based animation engine using spring dynamics for natural, responsive animations:
- Smooth easing between states with configurable spring presets
- Configurable spring stiffness and damping per state
- Frame-rate independent animations with delta-time stepping
- Hardware-accelerated rendering via Qt
- Scrolling text animation for titles that exceed display width
- Scrolling Text β Long titles automatically scroll horizontally when content exceeds container width
- Responsive Sizing β Pill dynamically resizes and reshapes for each state
- Interactive Hover β Hover over pill to make it interactive; click to expand
- Auto-Collapse β Expanded states automatically return to idle after 3 seconds
Feature functionality is organized into independent modules:
- ClockModule β Displays current time
- MediaModule β Integrates with Windows Media Control APIs
- NotificationModule β Manages system notifications with queueing
- StatusModule β Shows system information (CPU, RAM, SSD)
- TimerModule β Countdown/timer functionality
- PermissionModule β Handles system permissions (camera, microphone)
- Centralized application state in
core/state.py - Reactive state updates trigger UI re-renders
- Type-safe state transitions with spring animation presets
- Spring physics drives smooth geometry transitions
- PySide6 β Qt6 Python bindings for UI
- psutil β System and process utilities
- Pillow β Image processing
- numpy β Numerical computations (for animation)
- pywin32 β Windows API access
- winrt β Windows Runtime APIs (media control, permissions)
- pytest β Test framework
- pytest-qt β Qt test utilities
- ruff β Linter and formatter
- mypy β Type checker
Configuration is managed through nimbus/utils/config.py. Customize:
- Window behavior
- Animation parameters
- Notification display duration
- Module preferences
- Verify Python version:
python --version(should be 3.10+) - Check dependencies:
pip list | grep PySide6 - Check font file exists:
./assets/fonts/font.ttf - Review logs for errors
- Ensure media player app (Spotify, iTunes, etc.) is running
- Check Windows 11 Settings β Privacy & Security β App Permissions β Media player control
- Verify
winrt-Windows.Media.Controlis installed
- Close resource-heavy applications
- Update graphics drivers
- Check system resource usage:
tasklistor Task Manager
Nimbus is released under the MIT License. See LICENSE for details.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
Built with PySide6, inspired by Apple's Dynamic Island.