diff --git a/.gitignore b/.gitignore
index e5209aae..4e4f8d08 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,6 +10,7 @@ vendor_*
.~lock.*
*.ods#
*.patch
+*.log
# gnome extension
node-modules
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a126c85e..135a0331 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -31,6 +31,7 @@ stages:
- deploy
format:
+ stage: format
except:
- tags
<<: *rust_cache
@@ -42,6 +43,7 @@ format:
- rm -rf "$CI_PROJECT_DIR/ci-target" || true
check:
+ stage: check
except:
- tags
<<: *rust_cache
@@ -55,6 +57,7 @@ check:
- rm -rf "$CI_PROJECT_DIR/ci-target" || true
test:
+ stage: test
except:
- tags
<<: *rust_cache
@@ -65,6 +68,7 @@ test:
- rm -rf "$CI_PROJECT_DIR/ci-target" || true
release:
+ stage: release
only:
- tags
<<: *rust_cache
diff --git a/Cargo.lock b/Cargo.lock
index 70d70b70..78c4d320 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4502,6 +4502,8 @@ dependencies = [
"rog_dbus",
"rog_platform",
"rog_profiles",
+ "rog_slash",
+ "ron",
"serde",
"slint",
"slint-build",
diff --git a/Cargo.toml b/Cargo.toml
index 8eee3a43..ebd6c01f 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -40,6 +40,9 @@ tokio = { version = "^1.39.0", default-features = false, features = [
"time",
"rt",
"rt-multi-thread",
+ "fs",
+ "io-util",
+ "io-util",
] }
concat-idents = "^1.1"
dirs = "^4.0"
diff --git a/data/asusd.rules b/data/asusd.rules
index 6e5c5e91..83812ca9 100644
--- a/data/asusd.rules
+++ b/data/asusd.rules
@@ -19,4 +19,11 @@ LABEL="asusd_start"
ACTION=="add|change", DRIVER=="asus-nb-wmi", TAG+="systemd", ENV{SYSTEMD_WANTS}+="asusd.service"
ACTION=="add|remove", DRIVER=="asus-nb-wmi", TAG+="systemd", ENV{SYSTEMD_WANTS}+="asusd.service"
+# ASUS Custom Fan Curve Control - Grant user write access
+# This allows rog-control-center to adjust fan curves without sudo
+SUBSYSTEM=="hwmon", ATTR{name}=="asus_custom_fan_curve", \
+ RUN+="/bin/sh -c 'chmod 0666 /sys%p/pwm*'", \
+ RUN+="/bin/sh -c 'chmod 0666 /sys%p/temp*_auto_point*_pwm'", \
+ RUN+="/bin/sh -c 'chmod 0666 /sys%p/temp*_auto_point*_temp'"
+
LABEL="asusd_end"
diff --git a/rog-control-center/Cargo.toml b/rog-control-center/Cargo.toml
index 3b0eddf9..936d0db8 100644
--- a/rog-control-center/Cargo.toml
+++ b/rog-control-center/Cargo.toml
@@ -29,6 +29,7 @@ rog_dbus = { path = "../rog-dbus" }
rog_aura = { path = "../rog-aura" }
rog_profiles = { path = "../rog-profiles" }
rog_platform = { path = "../rog-platform" }
+rog_slash = { path = "../rog-slash" }
supergfxctl = { git = "https://gitlab.com/asus-linux/supergfxctl.git", default-features = false }
dmi_id = { path = "../dmi-id" }
@@ -39,6 +40,7 @@ env_logger.workspace = true
tokio.workspace = true
serde.workspace = true
zbus.workspace = true
+ron.workspace = true
dirs.workspace = true
notify-rust.workspace = true
concat-idents.workspace = true
diff --git a/rog-control-center/src/main.rs b/rog-control-center/src/main.rs
index 8e3811d6..5b63a3b9 100644
--- a/rog-control-center/src/main.rs
+++ b/rog-control-center/src/main.rs
@@ -11,16 +11,21 @@ use gumdrop::Options;
use log::{debug, info, warn, LevelFilter};
use rog_control_center::cli_options::CliStart;
use rog_control_center::config::Config;
+use tokio::runtime::Runtime;
+
+thread_local! {
+ pub static UI: std::cell::RefCell