{"id":15717228,"url":"https://github.com/horizonunix/uxtu4unix","last_synced_at":"2026-05-04T13:05:27.923Z","repository":{"id":219774489,"uuid":"749885651","full_name":"HorizonUnix/UXTU4Unix","owner":"HorizonUnix","description":"Universal x86 Tuning Utility for AMD Ryzen APUs on Hackintosh / macOS and Linux","archived":false,"fork":false,"pushed_at":"2025-06-11T03:46:41.000Z","size":7028,"stargazers_count":43,"open_issues_count":0,"forks_count":2,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-06-11T04:43:09.928Z","etag":null,"topics":["amd","cpu","hackintosh","laptop","linux","macos","macosx","mobile","power-control","power-management","processor","radeon","ryzen","ryzen-controller","sonoma","turning","unix","utilities","uxtu","ventura"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HorizonUnix.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"custom":"https://www.paypal.me/tamkohoatdong","github":"gorouflex"}},"created_at":"2024-01-29T15:38:09.000Z","updated_at":"2025-06-11T03:46:44.000Z","dependencies_parsed_at":"2024-02-04T07:26:47.355Z","dependency_job_id":"a892cafc-bd56-4e2f-a56a-762942a78b6b","html_url":"https://github.com/HorizonUnix/UXTU4Unix","commit_stats":{"total_commits":237,"total_committers":4,"mean_commits":59.25,"dds":0.09704641350210974,"last_synced_commit":"609594a13480a2864371139593c1f4ddfdf9c75f"},"previous_names":["gorouflex/rieluxtu4mac","appleosx/uxtu4mac","horizonunix/uxtu4unix","appleosx/uxtu4unix"],"tags_count":65,"template":false,"template_full_name":null,"purl":"pkg:github/HorizonUnix/UXTU4Unix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HorizonUnix%2FUXTU4Unix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HorizonUnix%2FUXTU4Unix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HorizonUnix%2FUXTU4Unix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HorizonUnix%2FUXTU4Unix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HorizonUnix","download_url":"https://codeload.github.com/HorizonUnix/UXTU4Unix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HorizonUnix%2FUXTU4Unix/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262030176,"owners_count":23247608,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amd","cpu","hackintosh","laptop","linux","macos","macosx","mobile","power-control","power-management","processor","radeon","ryzen","ryzen-controller","sonoma","turning","unix","utilities","uxtu","ventura"],"created_at":"2024-10-03T21:49:07.960Z","updated_at":"2026-05-02T07:09:27.003Z","avatar_url":"https://github.com/HorizonUnix.png","language":"Python","funding_links":["https://www.paypal.me/tamkohoatdong","https://github.com/sponsors/gorouflex"],"categories":[],"sub_categories":[],"readme":"\u003cpicture\u003e\u003cimg align=\"left\" src=\"/Img/Logo.png\"/\u003e\u003c/picture\u003e\n\u003ch4\u003ePowered by RyzenAdj and Python\u003c/h4\u003e\n\n[![GitHub Downloads](https://img.shields.io/github/downloads/HorizonUnix/UXTU4Unix/total?style=flat-square\u0026color=blue)](https://github.com/HorizonUnix/UXTU4Unix/releases)\n[![Latest Release](https://img.shields.io/github/v/release/HorizonUnix/UXTU4Unix?style=flat-square\u0026color=green)](https://github.com/HorizonUnix/UXTU4Unix/releases/latest)\n[![Python](https://img.shields.io/badge/Python-3.10%2B-yellow?style=flat-square)](https://www.python.org/)\n[![License](https://img.shields.io/github/license/HorizonUnix/UXTU4Unix?style=flat-square)](LICENSE)\n\n\u003cbr/\u003e\n\n\u003e [!WARNING]\n\u003e **macOS Support Notice:** With the end of Hackintosh support in macOS 26 Tahoe, the `v0.5.x` series will be the **last** to support macOS. Development will shift solely to Linux afterwards until UXTU officially supports Linux.\n\n\u003e [!CAUTION]\n\u003e **macOS Users:** Do **not** use UXTU4Unix alongside [SMCAMDProcessor](https://github.com/trulyspinach/SMCAMDProcessor). They conflict with each other and may cause instability.\n\n---\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Compatibility](#compatibility)\n- [Requirements](#requirements)\n- [Installation](#installation)\n  - [macOS](#for-macos)\n  - [Linux](#for-linux)\n- [Secure Boot (Linux)](#secure-boot-linux)\n- [Configuration](#configuration)\n- [Frequently Asked Questions](#frequently-asked-questions)\n- [Preview](#preview)\n- [Acknowledgments](#acknowledgments)\n\n---\n\n## Overview\n\nUXTU4Unix is a power management tool for **AMD Ryzen APUs and CPUs** on macOS and Linux. It wraps [RyzenAdj](https://github.com/FlyGoat/RyzenAdj) with an interactive terminal UI, allowing you to apply, schedule, and automatically switch between power presets based on your workload and power source without touching the BIOS.\n\nKey features:\n- Premade presets for a wide range of AMD APUs and desktop CPUs\n- Dynamic Mode - automatically switches between presets on AC vs. battery\n- Auto-reapply on a configurable timer\n- Detailed hardware information panel (CPU, cache, memory)\n- Startup integration (macOS Login Items / Linux XDG Autostart)\n- Built-in updater with config backup and restore\n\n---\n\n## Compatibility\n\n### Supported Hardware\n- AMD Ryzen APUs compatible with [NootedRed](https://github.com/ChefKissInc/NootedRed) or listed in the **Premade Preset** section of [UXTU](https://github.com/JamesCJ60/Universal-x86-Tuning-Utility)\n- Any AMD CPU/APU supported by [RyzenAdj](https://github.com/FlyGoat/RyzenAdj)\n\n### Supported Operating Systems\n\n| Platform | Version |\n|----------|---------|\n| macOS    | 11 Big Sur -\u003e 26 Tahoe with Python 3.10+ |\n| Linux    | Any distribution with Python 3.10+ |\n\n---\n\n## Requirements\n\n| Requirement | macOS | Linux |\n|-------------|-------|-------|\n| Python | 3.10+ | 3.10+ |\n| `keyring` Python library | ✅ | ✅ |\n| `dmidecode` | Bundled | Must install separately |\n| `ryzenadj` | Bundled | Bundled in `Assets/Linux/` |\n| `libpci` | Bundled (custom ryzenadj build) | Required by RyzenAdj |\n| Secure Boot | Must be disabled | Must be disabled (or see [below](#secure-boot-linux)) |\n\n---\n\n## Installation\n\n### 1. Download\n\nGrab the latest release from the [Releases page](https://github.com/HorizonUnix/UXTU4Unix/releases/latest) and extract it.\n\n### 2. Install Python Dependencies\n\n```bash\npip3 install -r /path/to/UXTU4Unix/requirements.txt\n```\n\n---\n\n### For macOS\n\n\u003e [!IMPORTANT]\n\u003e Secure Boot must be disabled in your BIOS before running UXTU4Unix on macOS.\n\n1. Run the launcher:\n   ```bash\n   open /path/to/UXTU4Unix.command\n   ```\n   Or via terminal:\n   ```bash\n   python3 /path/to/UXTU4Unix.py\n   ```\n\n2. Follow the first-run setup wizard.\n\n3. **Optional - Temperature Management:** For better thermal control, disable **Core Performance Boost** in your BIOS using [Smokeless_UMAF](https://github.com/DavidS95/Smokeless_UMAF).\n   \u003e ⚠️ This will reduce peak CPU performance. Core Performance Boost on macOS Hackintosh is not well-optimised and can cause thermal issues.\n\n#### Fixing Python Certificates on macOS\n\nIf you encounter SSL errors, run the certificate installer bundled with Python:\n\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"/Img/cert1.png\" width=\"380\"/\u003e\n  \u003cimg src=\"/Img/cert2.png\" width=\"380\"/\u003e\n\u003c/p\u003e\n\n---\n\n### For Linux\n\n1. Install system dependencies:\n\n   **Debian / Ubuntu**\n   ```bash\n   sudo apt install dmidecode libpci-dev\n   ```\n   **Fedora / RHEL**\n   ```bash\n   sudo dnf install dmidecode pciutils-devel\n   ```\n   **Arch**\n   ```bash\n   sudo pacman -S dmidecode pciutils\n   ```\n\n2. Run the script:\n   ```bash\n   python3 /path/to/UXTU4Unix.py\n   ```\n\n---\n\n## Secure Boot (Linux)\n\nIf you want to keep Secure Boot enabled, you must load the `ryzen_smu` kernel module manually instead of disabling Secure Boot.\n\n### Steps (from ryzenadj repo)\n\n1. **Install build prerequisites** (Fedora example - adjust for your distro):\n   ```bash\n   sudo dnf install cmake gcc gcc-c++ dkms openssl\n   ```\n\n2. **Clone and install `ryzen_smu`:**\n   ```bash\n   git clone https://github.com/amkillam/ryzen_smu   # Active fork\n   cd ryzen_smu/\n   sudo make dkms-install\n   ```\n\n3. **Enroll the DKMS-generated UEFI key:**\n   ```bash\n   sudo mokutil --import /var/lib/dkms/mok.pub\n   ```\n   \u003e You will be prompted to set a one-time password. Remember it for the next step.\n\n4. **Restart** - your system will boot into the MOK Manager.\n   - Choose **Enroll MOK**\n   - Enter the password you set above\n   - Reboot\n\n5. **Verify** the module loaded:\n   ```bash\n   sudo dmesg | grep ryzen_smu\n   ```\n   \u003e A \"kernel tainted\" message is expected and harmless - it simply indicates a non-mainline module was loaded.\n\n---\n\n## Configuration\n\nUXTU4Unix stores its configuration at `UXTU4Unix/Assets/config.toml`. It is created and managed automatically, but can be edited manually if needed.\n\n### Example `config.toml`\n\n```ini\n[User]\nmode = Custom\ncustomargs = --max-performance\n\n[Settings]\ntime = 30\nsoftwareupdate = 1\nreapply = 1\napplyonstart = 1\ndynamicmode = 0\ndebug = 1\n\n[Info]\ncpu = AMD Ryzen 5 7535HS with Radeon Graphics\nsignature = Family 25, Model 68, Stepping 1\narchitecture = Zen 3 - Zen 4\nfamily = Rembrandt\ntype = Amd_Apu\n```\n\n### `[User]`\n\n| Key | Type | Description |\n|-----|------|-------------|\n| `mode` | string | Preset name to apply on load, or `Custom` to use `customargs` |\n| `customargs` | string | Raw ryzenadj arguments used when `mode = Custom` |\n\n### `[Settings]`\n\n| Key | Default | Values | Description |\n|-----|---------|--------|-------------|\n| `time` | `3` | seconds | Interval between automatic preset re-applications |\n| `softwareupdate` | `1` | `0` / `1` | Check for updates on startup |\n| `reapply` | `1` | `0` / `1` | Automatically re-apply preset on a timer |\n| `applyonstart` | `1` | `0` / `1` | Apply saved preset when the program launches |\n| `dynamicmode` | `0` | `0` / `1` | Switch presets automatically based on power source |\n| `debug` | `1` | `0` / `1` | Show debug output in the UI |\n| `sip` | `03080000` | hex string | Required SIP flags for ryzenadj *(macOS only)* |\n\n### `[Info]`\n\nPopulated automatically by dmidecode on first run. Stores CPU name, CPUID signature, architecture, codename, and type used for preset matching.\n\n\u003e **Tip:** If your CPU reports an unrecognised name (e.g. `AMD Demo CPU`), you can manually set `cpu` to a known model string such as `AMD Ryzen 5 7535HS with Radeon Graphics` to match the correct preset.\n\nFor advanced ryzenadj argument reference, see [Custom.md](Custom.md).\n\n---\n\n## Frequently Asked Questions\n\n### Why does UXTU4Unix require SIP to be disabled on macOS?\n\nThe bundled `ryzenadj` and `DirectHW` binaries are treated as untrusted kernel extensions by macOS. SIP must be partially disabled and the `ALLOW_UNTRUSTED_KEXTS` flag (`0x1`) must be set in `csr-active-config` for them to run. UXTU4Unix's setup wizard handles this automatically.\n\n### Why are some CPUs not supported?\n\nWhen porting presets from UXTU to UXTU4Unix, some tuning commands were found to be incompatible with ryzenadj. UXTU uses additional methods to adjust CPU and APU settings beyond what ryzenadj exposes - particularly for desktop CPU presets. Only the compatible subset of commands was retained. Support is expanded with each release.\n\n### Why is my preset not being applied on startup?\n\nCheck that `applyonstart = 1` is set in `config.toml` and that the `mode` value matches a valid preset name. You can verify this from **Settings -\u003e Preset** in the UI.\n\n### Does Dynamic Mode work on desktop CPUs?\n\nDynamic Mode is designed for laptops - it switches between presets based on whether the system is on AC or battery. On a desktop with no battery, it will always use the AC preset.\n\n---\n\n## Preview\n\n\u003cp align=\"left\"\u003e\n  \u003cimg src=\"/Img/main_menu.png\" width=\"380\"/\u003e\n  \u003cimg src=\"/Img/apply_preset.png\" width=\"380\"/\u003e\n  \u003cimg src=\"/Img/preset.png\" width=\"380\"/\u003e\n  \u003cimg src=\"/Img/preset_setting.png\" width=\"380\"/\u003e\n  \u003cimg src=\"/Img/hardware_info.png\" width=\"380\"/\u003e\n  \u003cimg src=\"/Img/settings.png\" width=\"380\"/\u003e\n\u003c/p\u003e\n\n---\n\n\n## Acknowledgments\n\n| Contributor | Contribution |\n|-------------|-------------|\n| [b00t0x](https://github.com/b00t0x) | Guidance on building ryzenadj with DirectHW and pciutils-osx |\n| [FlyGoat](https://github.com/FlyGoat) | [RyzenAdj](https://github.com/FlyGoat/RyzenAdj) |\n| [JamesCJ60](https://github.com/JamesCJ60) | [UXTU](https://github.com/JamesCJ60/Universal-x86-Tuning-Utility) original preset design and inspiration |\n| [corpnewt](https://github.com/corpnewt) | macOS `.command` launcher template |\n| [NotchApple1703](https://github.com/NotchApple1703) | Advisor |","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhorizonunix%2Fuxtu4unix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhorizonunix%2Fuxtu4unix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhorizonunix%2Fuxtu4unix/lists"}