Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .SRCINFO
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pkgbase = coolerdash
pkgdesc = Monitor telemetry data on an AIO liquid cooler with an integrated LCD display
pkgver = 2.1.4
pkgver = 2.2.0
pkgrel = 1
url = https://github.com/damachine/coolerdash
install = coolerdash.install
Expand Down
15 changes: 15 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,14 @@ install: check-deps $(TARGET)
@printf "$(ICON_SERVICE) $(CYAN)Installing icon...$(RESET)\n"
@install -Dm644 etc/icons/coolerdash.svg "$(DESTDIR)/usr/share/icons/hicolor/scalable/apps/coolerdash.svg"
@printf " $(GREEN)Icon:$(RESET) $(DESTDIR)/usr/share/icons/hicolor/scalable/apps/coolerdash.svg\n"
@printf "$(ICON_SERVICE) $(CYAN)Installing udev rules for USB power management...$(RESET)\n"
@install -Dm644 etc/udev/rules.d/99-coolerdash.rules "$(DESTDIR)/usr/lib/udev/rules.d/99-coolerdash.rules"
@printf " $(GREEN)udev rule:$(RESET) $(DESTDIR)/usr/lib/udev/rules.d/99-coolerdash.rules\n"
@if [ "$(REALOS)" = "yes" ]; then \
$(SUDO) udevadm control --reload-rules 2>/dev/null || true; \
$(SUDO) udevadm trigger --subsystem-match=usb 2>/dev/null || true; \
printf " $(GREEN)✓$(RESET) USB power management configured\n"; \
fi
@printf "\n"
@printf "$(ICON_SUCCESS) $(WHITE)INSTALLATION SUCCESSFUL$(RESET)\n"
@printf "\n"
Expand Down Expand Up @@ -398,6 +406,13 @@ uninstall:
@$(SUDO) rm -rf "$(DESTDIR)/etc/coolercontrol/plugins/coolerdash" >/dev/null 2>&1 || true
@$(SUDO) rm -f "$(DESTDIR)/usr/share/man/man1/coolerdash.1" >/dev/null 2>&1 || true
@$(SUDO) rm -f "$(DESTDIR)/usr/share/applications/coolerdash.desktop" >/dev/null 2>&1 || true
@printf "$(ICON_CLEAN) $(CYAN)Removing udev rule...$(RESET)\n"
@$(SUDO) rm -f "$(DESTDIR)/usr/lib/udev/rules.d/99-coolerdash.rules" 2>/dev/null || true
@if [ "$(REALOS)" = "yes" ]; then \
$(SUDO) udevadm control --reload-rules 2>/dev/null || true; \
$(SUDO) udevadm trigger --subsystem-match=usb 2>/dev/null || true; \
printf " $(GREEN)✓$(RESET) udev rules reloaded\n"; \
fi
@$(SUDO) rm -f "$(DESTDIR)/usr/share/icons/hicolor/scalable/apps/coolerdash.svg" >/dev/null 2>&1 || true
@if [ "$(REALOS)" = "yes" ]; then \
if id -u coolerdash &>/dev/null; then \
Expand Down
6 changes: 5 additions & 1 deletion PKGBUILD
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ build() {
make || return 1

# Copy files to srcdir for packaging (fakeroot cannot access startdir)
mkdir -p "${srcdir}/bin" "${srcdir}/images" "${srcdir}/man" "${srcdir}/etc/coolercontrol/plugins/coolerdash/ui" "${srcdir}/etc/applications" "${srcdir}/etc/icons"
mkdir -p "${srcdir}/bin" "${srcdir}/images" "${srcdir}/man" "${srcdir}/etc/coolercontrol/plugins/coolerdash/ui" "${srcdir}/etc/applications" "${srcdir}/etc/icons" "${srcdir}/etc/udev/rules.d"
cp -a bin/coolerdash "${srcdir}/bin/coolerdash"
cp -a README.md CHANGELOG.md VERSION LICENSE "${srcdir}/"
cp -a etc/coolercontrol/plugins/coolerdash/config.json "${srcdir}/etc/coolercontrol/plugins/coolerdash/"
Expand All @@ -55,6 +55,7 @@ build() {
cp -a etc/coolercontrol/plugins/coolerdash/manifest.toml "${srcdir}/etc/coolercontrol/plugins/coolerdash/"
cp -a etc/applications/coolerdash.desktop "${srcdir}/etc/applications/"
cp -a etc/icons/coolerdash.svg "${srcdir}/etc/icons/"
cp -a etc/udev/rules.d/99-coolerdash.rules "${srcdir}/etc/udev/rules.d/"
}

check() {
Expand Down Expand Up @@ -95,6 +96,9 @@ package() {
# Desktop shortcut for settings UI
install -Dm644 "${srcdir}/etc/applications/coolerdash.desktop" "${pkgdir}/usr/share/applications/coolerdash.desktop"

# USB power management udev rule for
install -Dm644 "${srcdir}/etc/udev/rules.d/99-coolerdash.rules" "${pkgdir}/usr/lib/udev/rules.d/99-coolerdash.rules"

# Application icon
install -Dm644 "${srcdir}/etc/icons/coolerdash.svg" "${pkgdir}/usr/share/icons/hicolor/scalable/apps/coolerdash.svg"
}
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1.4
2.2.0
277 changes: 208 additions & 69 deletions aur/PKGBUILD

Large diffs are not rendered by default.

19 changes: 19 additions & 0 deletions aur/coolerdash.install
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,25 @@ post_install() {
chmod 644 /etc/coolercontrol/plugins/coolerdash/ui/* 2>/dev/null || true
fi

# Reload udev rules for NZXT USB power management
if [ -f /usr/lib/udev/rules.d/99-coolerdash.rules ]; then
echo "Reloading udev rules for NZXT devices..."
udevadm control --reload-rules 2>/dev/null || true
udevadm trigger --subsystem-match=usb --attr-match=idVendor=1e71 2>/dev/null || true

# Apply settings to already connected NZXT devices (udev rules only trigger on add/bind)
for device in /sys/bus/usb/devices/*/idVendor; do
if [ -f "$device" ] && [ "$(cat $device 2>/dev/null)" = "1e71" ]; then
device_path=$(dirname "$device")
if [ -f "$device_path/power/autosuspend_delay_ms" ]; then
echo -1 > "$device_path/power/autosuspend_delay_ms" 2>/dev/null || true
echo on > "$device_path/power/control" 2>/dev/null || true
echo "Configured USB autosuspend delay for $(basename $device_path)"
fi
fi
done
fi

# Create systemd drop-in for startup delay (allow shutdown.png to display)
mkdir -p /etc/systemd/system/cc-plugin-coolerdash.service.d
printf "[Service]\nExecStartPre=/bin/sleep 10\n" > /etc/systemd/system/cc-plugin-coolerdash.service.d/startup-delay.conf
Expand Down
7 changes: 7 additions & 0 deletions coolerdash.install
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@ post_install() {
chmod 644 /etc/coolercontrol/plugins/coolerdash/ui/* 2>/dev/null || true
fi

# Reload udev rules for USB power management
if [ -f /usr/lib/udev/rules.d/99-coolerdash.rules ]; then
echo "Reloading udev rules..."
udevadm control --reload-rules 2>/dev/null || true
udevadm trigger --subsystem-match=usb 2>/dev/null || true
fi

# Create systemd drop-in for startup delay (allow shutdown.png to display)
mkdir -p /etc/systemd/system/cc-plugin-coolerdash.service.d
printf "[Service]\nExecStartPre=/bin/sleep 10\n" > /etc/systemd/system/cc-plugin-coolerdash.service.d/startup-delay.conf
Expand Down
6 changes: 5 additions & 1 deletion etc/coolercontrol/plugins/coolerdash/ui/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,11 @@
margin-bottom: 0;
}

/* Spacing between form-groups outside of grids */
.panel > .form-group + .form-group {
margin-top: 20px;
}

.form-label {
display: block;
font-weight: 500;
Expand Down Expand Up @@ -403,7 +408,6 @@ <h1>CoolerDash Configuration</h1>
<span class="form-hint">HTTP or HTTPS supported (Default: http://localhost:11987)</span>
<input type="text" name="daemon.address" class="form-control" required>
</div>
<br />
<div class="form-group">
<label class="form-label">API Password</label>
<span class="form-hint">Leave empty if authentication is disabled (Default: coolAdmin)</span>
Expand Down
13 changes: 13 additions & 0 deletions etc/udev/rules.d/99-coolerdash.rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# CoolerDash - USB Device Power Management
# https://github.com/damachine/coolerdash

# NZXT Vendor ID: 1e71
# Disable autosuspend and enable persist for all NZXT devices (Kraken, etc.)
# Disable USB autosuspend for NZXT devices to prevent "bucket switch" errors
ACTION=="add|bind|change", SUBSYSTEM=="usb", ATTR{idVendor}=="1e71", ATTR{power/control}="on"
ACTION=="add|bind|change", SUBSYSTEM=="usb", ATTR{idVendor}=="1e71", ATTR{power/autosuspend_delay_ms}="-1"
ACTION=="add|bind|change", SUBSYSTEM=="usb", ATTR{idVendor}=="1e71", ATTR{power/persist}="1"
ACTION=="add|bind|change", SUBSYSTEM=="usb", ATTR{idVendor}=="1e71", ATTR{power/wakeup}="disabled"
ACTION=="add|bind|change", SUBSYSTEM=="usb", ATTR{idVendor}=="1e71", ATTR{avoid_reset_quirk}="1"

# Placeholder for additional rules if needed in the future