A modern GUI application for controlling CPU fan curves on System76 laptops, built with Rust and egui.
- 🎛️ Interactive Fan Curve Editor - Create custom fan curves with an intuitive GUI
- 🌡️ Real-time Temperature Monitoring - Monitor CPU temperatures and fan speeds
- 📊 Multiple Curve Profiles - Save and switch between different fan curve configurations
- 🔧 System76 Integration - Designed specifically for System76 laptops
- 🧩 Optional Thelio IO Integration - Experimental hook to the Thelio IO daemon
- 🚀 High Performance - Built with Rust for optimal performance and reliability
curl -sSL https://raw.githubusercontent.com/tonysystem76/Fan-Curve-App/main/install.sh | bash-
Clone the repository:
git clone https://github.com/tonysystem76/Fan-Curve-App.git cd Fan-Curve-App -
Run the installation script:
./install.sh
-
Launch the application:
fan-curve --gui
- Operating System: Linux (tested on Ubuntu, Pop!_OS, Arch Linux)
- Hardware: System76 laptop
- Dependencies: Rust 1.75+, build tools, X11 libraries
The installation script will automatically install all required dependencies.
# Launch GUI
fan-curve --gui
# List available fan curves
fan-curve list
# Apply a specific curve
fan-curve apply "Performance"
# Show help
fan-curve --help- Launch the application from your applications menu or run
fan-curve --gui - Select a fan curve from the dropdown menu
- Click "Apply" to set the fan curve
- Use "Edit" to modify existing curves or create new ones
Set an environment variable to enable Thelio IO integration. When enabled, the app will attempt to detect the Thelio IO DBus service and, if present, use it as a backend for chassis fan telemetry/control in future updates.
export FAN_APP_ENABLE_THELIO_IO=1
# Optional: override service name if needed
export FAN_APP_THELIO_IO_SERVICE="com.system76.ThelioIo"Notes:
- If the service is not present, the application continues to function normally (no-op backend).
- Current implementation includes stubs for fan RPM/duty and temperature; concrete wiring can be added once the interface is finalized.
Configuration files are stored in ~/.fan_curve_app/config.json. You can edit this file directly or use the GUI to modify settings.
- Standard - Balanced performance and noise
- Quiet - Lower fan speeds for quieter operation
- Performance - Higher fan speeds for maximum cooling
If you prefer to build from source:
# Install Rust (if not already installed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# Clone and build
git clone https://github.com/tonysystem76/Fan-Curve-App.git
cd Fan-Curve-App
cargo build --release
# Run
./target/release/fan-curve-app --guiTo uninstall the application:
# Run the uninstall script
~/uninstall-fan-curve-app.sh
# Or manually remove:
sudo rm /usr/local/bin/fan-curve-app /usr/local/bin/fan-curve
rm -rf ~/.fan_curve_app
rm ~/.local/share/applications/fan-curve-app.desktop
rm ~/.local/share/icons/fan-curve-app.svgIf you encounter permission issues, make sure you're not running as root and that the installation script can use sudo when needed.
After installation, you may need to log out and back in for the desktop entry to appear in your applications menu.
If you encounter build issues, make sure all dependencies are installed:
# Ubuntu/Debian
sudo apt-get install build-essential pkg-config libssl-dev libx11-dev libxcb1-dev
# Arch Linux
sudo pacman -S base-devel openssl pkgconf libx11 libxcbContributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and questions, please open an issue on the GitHub repository.