A handy Python PySide6 GUI application for monitoring the status of one or many cloud drives using the free open-source utility rclone for secure drive access. This app lives in your macOS menu bar and provides a sleek, modern interface to check the status of all your configured cloud drives.
Author: Rich Lewis - @RichLewis007
- 🎨 Beautiful Modern UI - Dark theme with smooth animations
- 📊 Real-time Status - View total, used, and free space for each drive
- 🔄 Auto-refresh - Automatically updates drive status at configurable intervals
- 📌 Stay on Top - Toggle to keep the window above other applications
- 🎯 Menu Bar Integration - Lives in macOS menu bar for easy access
- ⚙️ Easy Configuration - Simple setup dialog to select which drives to monitor
- 🔒 Privacy First - All private configuration stored in a local file (excluded from git)
- Python 3.8 or higher
- uv - Fast Python package installer and resolver
- rclone installed and configured
- Install
uvif you haven't already:
curl -LsSf https://astral.sh/uv/install.sh | sh- Clone this repository:
git clone https://github.com/yourusername/check-cloud-drives.git
cd check-cloud-drives- Install dependencies using
uv:
uv syncThis will:
- Create a virtual environment automatically
- Install all dependencies from
pyproject.toml - Make the project ready to run
Alternative: If you prefer using pip with a requirements.txt file, you can generate it first:
uv pip compile pyproject.toml -o requirements.txt
pip install -r requirements.txt- Make sure rclone is installed and configured:
rclone listremotes- Run the application using the provided script:
./run.shOr run directly with uv:
uv run -m check_cloud_drives.mainOr activate the virtual environment and run directly:
source .venv/bin/activate # On macOS/Linux
python -m check_cloud_drives.main-
On first run, the app will:
- Detect all available rclone remotes
- Show a setup dialog to select which drives to monitor
- Automatically fetch status for selected drives
-
The app will appear in your macOS menu bar. Click the icon to show/hide the window.
-
Features:
- Refresh All: Manually refresh all drive statuses
- Add Drive: Add additional drives to monitor
- Edit Names: Click on drive names to edit display names and remote names
- Stay on Top: Right-click menu bar icon to toggle "Stay on Top"
The application stores all configuration in check-cloud-drives.toml in the project root directory. This file includes:
- List of monitored drives
- Window position and size
- Stay on top preference
- Auto-refresh interval
Note: This config file is excluded from git to protect your private cloud drive information.
The app supports custom SVG icons for different drive types (Google Drive, OneDrive, Dropbox, etc.). Currently using placeholder emoji icons. To add custom icons:
- Place SVG icon files in the
assets/icons/directory - Name them:
googledrive.svg,onedrive.svg,dropbox.svg, etc. - The app will automatically detect and use them
The application is built with:
- PySide6 - Modern Qt6 Python bindings
- rclone - Command-line tool for cloud storage
- uv - Fast Python package installer and resolver
- Install
uv(if not already installed):
curl -LsSf https://astral.sh/uv/install.sh | sh- Sync dependencies:
uv sync- Run the application:
uv run -m check_cloud_drives.mainTo add a new dependency:
uv add package-nameThis will automatically update pyproject.toml and uv.lock.
To update all dependencies:
uv sync --upgradeTo update a specific package:
uv add package-name@latestNote: The uv.lock file should be committed to version control to ensure reproducible builds across different environments.
This project uses Ruff for linting and formatting Python code.
Run Ruff checks:
./scripts/ruff.sh # Run all checks (format + lint)
./scripts/ruff.sh format # Format all Python files
./scripts/ruff.sh fix # Format and auto-fix linting issues
./scripts/ruff.sh lint # Show linting issuesAvailable commands:
format- Format all Python filescheck-format- Check formatting without making changeslint- Lint all Python files (show issues only)lint-fix- Lint and auto-fix all Python filescheck- Check linting without making changesall- Run format check + lint check (default)fix- Format + auto-fix linting issues
This project uses pytest for unit testing with pytest-qt for Qt widget testing.
Run tests:
# Run all tests
uv run pytest
# Run with verbose output
uv run pytest -v
# Run specific test file
uv run pytest tests/test_config.py
# Run specific test
uv run pytest tests/test_config.py::TestConfigManager::test_get_drives_empty
# Run with coverage report
uv run pytest --cov=check_cloud_drives --cov-report=html
# Run only fast tests (exclude slow tests)
uv run pytest -m "not slow"Test coverage:
The test suite includes 64 tests covering:
- ConfigManager - Configuration loading, saving, and persistence
- Data Models - DriveConfig and DriveStatus validation and serialization
- Rclone Integration - Command execution and output parsing
- UI Components - DriveCard edit mode, status updates, and display behavior
See tests/README.md for more detailed testing documentation.
If you need a requirements.txt file for compatibility with other tools, CI/CD systems, or if you prefer using pip directly, you can generate it from pyproject.toml:
uv pip compile pyproject.toml -o requirements.txtThis will create a requirements.txt file with all dependencies and their resolved versions. You can then use it with pip:
pip install -r requirements.txtNote: The requirements.txt file is not tracked in git. If you need it, regenerate it after updating dependencies. Using uv sync with pyproject.toml is the recommended approach and eliminates the need for requirements.txt.
MIT License - feel free to use and modify as needed!
Contributions welcome! Please feel free to submit a Pull Request.