Skip to content

programmersd21/nimbus

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

2 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Nimbus β€” Dynamic Island for Windows

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.

Features

  • 🎬 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

Requirements

  • Windows 10+ (Windows 11 recommended)
  • Python 3.10+
  • pip or conda package manager

Installation

Quick Install

pip install -e .

Development Install

For development with testing and linting tools:

pip install -e ".[dev]"

Or use the Makefile:

make dev

Usage

Run the Application

nimbus

Or using Python:

python -m nimbus

Or using the Makefile:

make run

Development

Project Structure

nimbus/
β”œβ”€β”€ 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

Development Commands

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 help

Running Tests

pytest
pytest -v                    # Verbose output
pytest tests/test_modules.py # Run specific test file

Code Quality

The 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 test

Architecture

Display States

The 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)

Animation System

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

UI Features

  • 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

Module System

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)

State Management

  • 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

Dependencies

Runtime

  • 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)

Development

  • pytest β€” Test framework
  • pytest-qt β€” Qt test utilities
  • ruff β€” Linter and formatter
  • mypy β€” Type checker

Configuration

Configuration is managed through nimbus/utils/config.py. Customize:

  • Window behavior
  • Animation parameters
  • Notification display duration
  • Module preferences

Troubleshooting

Application won't start

  1. Verify Python version: python --version (should be 3.10+)
  2. Check dependencies: pip list | grep PySide6
  3. Check font file exists: ./assets/fonts/font.ttf
  4. Review logs for errors

Media control not working

  • Ensure media player app (Spotify, iTunes, etc.) is running
  • Check Windows 11 Settings β†’ Privacy & Security β†’ App Permissions β†’ Media player control
  • Verify winrt-Windows.Media.Control is installed

Animation stuttering

  • Close resource-heavy applications
  • Update graphics drivers
  • Check system resource usage: tasklist or Task Manager

License

Nimbus is released under the MIT License. See LICENSE for details.

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit changes (git commit -m 'Add amazing feature')
  4. Push to branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Credits

Built with PySide6, inspired by Apple's Dynamic Island.