diff --git a/.SRCINFO b/.SRCINFO index 62976cb..d1924fd 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -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 diff --git a/Makefile b/Makefile index 308a0c2..473f661 100644 --- a/Makefile +++ b/Makefile @@ -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" @@ -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 \ diff --git a/PKGBUILD b/PKGBUILD index 383cfe9..acb6c07 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -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/" @@ -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() { @@ -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" } diff --git a/VERSION b/VERSION index 7d2ed7c..ccbccc3 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.1.4 +2.2.0 diff --git a/aur/PKGBUILD b/aur/PKGBUILD index 9abea04..a47dbb4 100644 --- a/aur/PKGBUILD +++ b/aur/PKGBUILD @@ -1,85 +1,224 @@ # Created by: damachin3 (damachine3 at proton dot me) # Website: https://github.com/damachine/coolerdash -pkgname=coolerdash-git -pkgver= -pkgrel=1 -provides=('coolerdash') -replaces=('coolerdash') -conflicts=('coolerdash') -pkgdesc="Monitor telemetry data on an AIO liquid cooler with an integrated LCD display" -arch=('x86_64') -url="https://github.com/damachine/coolerdash" -license=('MIT') -depends=('cairo' 'coolercontrol' 'jansson' 'libcurl-gnutls' 'ttf-roboto') -makedepends=('gcc' 'make' 'pkg-config' 'git') -backup=('etc/coolercontrol/plugins/coolerdash/config.json') -install=coolerdash.install -_commit= -source=("git+https://github.com/damachine/coolerdash.git#commit=${_commit}") -sha256sums=('SKIP') # SKIP for git repo source builds - -pkgver() { - cd "${srcdir}/coolerdash" - git fetch --tags - git describe --tags --long --match "v*" | sed -E 's/^v//; s/-([0-9]+)-g/\.r\1.g/; s/-/./g' +pre_install() { + echo "Checking for legacy files and performing migration cleanup..." 2>/dev/null + # Stop and disable service before install or update to prevent conflicts with plugin mode + if systemctl list-unit-files coolerdash.service 2>/dev/null || systemctl list-unit-files coolerdash.service 2>/dev/null; then + echo "Stopping coolerdash service..." 2>/dev/null + systemctl stop coolerdash.service 2>/dev/null + echo "Disabling coolerdash service (CoolerControl plugin mode preferred)..." 2>/dev/null + systemctl disable coolerdash.service 2>/dev/null + fi + + # Remove old systemd service file if it exists (migration from standalone to plugin mode) + if [ -f /etc/systemd/system/coolerdash.service ]; then + echo "Removing deprecated systemd service file..." 2>/dev/null + rm -f /etc/systemd/system/coolerdash.service 2>/dev/null + fi + + # Remove legacy installation directories if they exist + if [ -d /opt/coolerdash ]; then + echo "Removing legacy installation: /opt/coolerdash/" 2>/dev/null + rm -rf /opt/coolerdash 2>/dev/null + fi + + # Remove legacy config directory if it exists + if [ -d /etc/coolerdash ]; then + echo "Removing legacy config: /etc/coolerdash/" 2>/dev/null + rm -rf /etc/coolerdash 2>/dev/null + fi + + # Remove legacy config.ini and ui.html if they exist in plugin directory + if [ -f /etc/coolercontrol/plugins/coolerdash/config.ini ]; then + echo "Removing legacy config.ini..." 2>/dev/null + rm -f /etc/coolercontrol/plugins/coolerdash/config.ini 2>/dev/null + fi + if [ -f /etc/coolercontrol/plugins/coolerdash/ui.html ]; then + echo "Removing legacy ui.html..." 2>/dev/null + rm -f /etc/coolercontrol/plugins/coolerdash/ui.html 2>/dev/null + fi + if [ -f /usr/share/applications/coolerdash-settings.desktop ]; then + echo "Removing legacy coolerdash-settings.desktop..." 2>/dev/null + rm -f /usr/share/applications/coolerdash-settings.desktop 2>/dev/null + fi + + # Remove legacy user if it exists + if id -u coolerdash &>/dev/null; then + echo "Removing legacy coolerdash user..." 2>/dev/null + userdel -rf coolerdash 2>/dev/null || true + fi + + # Remove legacy symlinks in /bin/ and /usr/bin/ if they exist (migration from standalone) + if [ -L /bin/coolerdash ] || [ -f /bin/coolerdash ]; then + echo "Removing legacy symlink: /bin/coolerdash" + rm -f /bin/coolerdash + fi + if [ -L /usr/bin/coolerdash ] || [ -f /usr/bin/coolerdash ]; then + echo "Removing legacy symlink: /usr/bin/coolerdash" + rm -f /usr/bin/coolerdash + fi } -build() { - # Build inside the checked-out repository - cd "${srcdir}/coolerdash" || return 1 +post_install() { + # Ensure plugin directory files have correct permissions + if [ -d /etc/coolercontrol/plugins/coolerdash ]; then + echo "Plugin directory permissions configured" + chmod 755 /etc/coolercontrol/plugins/coolerdash 2>/dev/null || true + chmod 755 /etc/coolercontrol/plugins/coolerdash/coolerdash 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/*.md 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/VERSION 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/LICENSE 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/*.toml 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/*.png 2>/dev/null || true + chmod 666 /etc/coolercontrol/plugins/coolerdash/config.json 2>/dev/null || true + chmod 755 /etc/coolercontrol/plugins/coolerdash/ui 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/ui/* 2>/dev/null || true + fi - # Remove all previous tarball builds - rm -rf coolerdash-*.pkg.* || true + # 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 + chmod 644 /etc/systemd/system/cc-plugin-coolerdash.service.d/startup-delay.conf + echo "Systemd drop-in created: 10s startup delay" + + # Create/ensure shutdown notifier unit (uses printf to avoid cat heredocs) + printf "[Unit]\nDescription=CoolerDash helper daemon\nBindsTo=coolercontrold.service\nPartOf=coolercontrold.service\nAfter=coolercontrold.service\n\n[Service]\nType=simple\nExecStart=/bin/sleep infinity\nExecStop=/etc/coolercontrol/plugins/coolerdash/coolerdash --shutdown\nTimeoutStopSec=3\nRestart=no\n\n[Install]\nWantedBy=multi-user.target\n" > /etc/systemd/system/coolerdash-helperd.service + chmod 644 /etc/systemd/system/coolerdash-helperd.service || true + echo "Helper unit created: coolerdash-helperd.service" + + # Reload systemd manager configuration + systemctl daemon-reload + + # Create shutdown notifier unit + if systemctl list-unit-files coolerdash-helperd.service >/dev/null 2>&1; then + echo "Enabling and starting coolerdash-helperd.service..." + systemctl enable --now coolerdash-helperd.service || echo "Note: coolerdash-helperd.service enable/start failed. Please enable/start manually." + fi - # Clean any previous builds if a Makefile exists - if [[ -f Makefile || -f GNUmakefile ]]; then - make clean || true + # Restart CoolerControl to pick up the new plugin + if systemctl list-unit-files coolercontrold.service >/dev/null 2>&1; then + echo "Restarting CoolerControl service to load new plugin..." + systemctl restart coolercontrold.service || echo "Note: CoolerControl service restart failed. Please restart manually." fi - # Build - make || return 1 + echo "================================================================" + echo "CoolerDash has been installed successfully!" + echo "================================================================" } -check() { - # Check in the checked-out repository - cd "${srcdir}/coolerdash" || return 1 +post_upgrade() { + # Ensure plugin directory files have correct permissions after upgrade + if [ -d /etc/coolercontrol/plugins/coolerdash ]; then + echo "Plugin directory permissions configured" + chmod 755 /etc/coolercontrol/plugins/coolerdash 2>/dev/null || true + chmod 755 /etc/coolercontrol/plugins/coolerdash/coolerdash 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/*.md 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/VERSION 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/LICENSE 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/*.toml 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/*.png 2>/dev/null || true + chmod 666 /etc/coolercontrol/plugins/coolerdash/config.json 2>/dev/null || true + chmod 755 /etc/coolercontrol/plugins/coolerdash/ui 2>/dev/null || true + chmod 644 /etc/coolercontrol/plugins/coolerdash/ui/* 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 + chmod 644 /etc/systemd/system/cc-plugin-coolerdash.service.d/startup-delay.conf + echo "Systemd drop-in updated: 10s startup delay" + + # Create/ensure shutdown notifier unit (uses printf to avoid cat heredocs) + printf "[Unit]\nDescription=CoolerDash helper daemon\nBindsTo=coolercontrold.service\nPartOf=coolercontrold.service\nAfter=coolercontrold.service\n\n[Service]\nType=simple\nExecStart=/bin/sleep infinity\nExecStop=/etc/coolercontrol/plugins/coolerdash/coolerdash --shutdown\nTimeoutStopSec=3\nRestart=no\n\n[Install]\nWantedBy=multi-user.target\n" > /etc/systemd/system/coolerdash-helperd.service + chmod 644 /etc/systemd/system/coolerdash-helperd.service || true + echo "Helper unit updated: coolerdash-helperd.service" + + # Reload systemd manager configuration + systemctl daemon-reload + + # Create shutdown notifier unit + if systemctl list-unit-files coolerdash-helperd.service >/dev/null 2>&1; then + echo "Enabling and starting coolerdash-helperd.service..." + systemctl enable --now coolerdash-helperd.service || echo "Note: coolerdash-helperd.service enable/start failed. Please enable/start manually." + fi - # Verify that the binary was created successfully - if [[ -f bin/coolerdash ]]; then - echo "Build successful - binary created" - else - echo "ERROR: Binary not found" - return 1 + # Restart CoolerDash to pick up the updated plugin + if systemctl list-unit-files cc-plugin-coolerdash.service >/dev/null 2>&1; then + echo "Restarting CoolerDash service to load updated plugin..." + systemctl restart cc-plugin-coolerdash.service || echo "Note: CoolerDash service restart failed. Please restart manually." fi + + echo "================================================================" + echo "CoolerDash has been upgraded successfully!" + echo "================================================================" } -package() { - # Plugin-mode installation: Everything in /etc/coolercontrol/plugins/coolerdash/ - install -dm755 "${pkgdir}/etc/coolercontrol/plugins/coolerdash" - install -m755 "${srcdir}/coolerdash/bin/coolerdash" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/coolerdash" - install -m644 "${srcdir}/coolerdash/README.md" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/README.md" - install -m644 "${srcdir}/coolerdash/VERSION" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/VERSION" - install -m644 "${srcdir}/coolerdash/LICENSE" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/LICENSE" - install -m644 "${srcdir}/coolerdash/CHANGELOG.md" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/CHANGELOG.md" - install -m666 "${srcdir}/coolerdash/etc/coolercontrol/plugins/coolerdash/config.json" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/config.json" - - # Create ui directory first with correct permissions - install -dm755 "${pkgdir}/etc/coolercontrol/plugins/coolerdash/ui" - install -m644 "${srcdir}/coolerdash/etc/coolercontrol/plugins/coolerdash/ui/index.html" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/ui/index.html" - install -m644 "${srcdir}/coolerdash/etc/coolercontrol/plugins/coolerdash/ui/cc-plugin-lib.js" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/ui/cc-plugin-lib.js" - install -m644 "${srcdir}/coolerdash/images/shutdown.png" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/shutdown.png" - install -m644 "${srcdir}/coolerdash/etc/coolercontrol/plugins/coolerdash/manifest.toml" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/manifest.toml" - - # Substitute VERSION placeholder in manifest.toml - sed -i "s/{{VERSION}}/${pkgver}/g" "${pkgdir}/etc/coolercontrol/plugins/coolerdash/manifest.toml" - - # Manual page - install -Dm644 "${srcdir}/coolerdash/man/coolerdash.1" "${pkgdir}/usr/share/man/man1/coolerdash.1" - - # Desktop shortcut for settings UI - install -Dm644 "${srcdir}/coolerdash/etc/applications/coolerdash.desktop" "${pkgdir}/usr/share/applications/coolerdash.desktop" - - # Application icon - install -Dm644 "${srcdir}/coolerdash/etc/icons/coolerdash.svg" "${pkgdir}/usr/share/icons/hicolor/scalable/apps/coolerdash.svg" +pre_remove() { + # Stop and disable service before uninstallation + if systemctl is-active --quiet coolerdash.service || systemctl is-enabled --quiet coolerdash.service; then + echo "Stopping coolerdash service..." + systemctl stop coolerdash.service + echo "Disabling coolerdash service" + systemctl disable coolerdash.service + fi + + # Stop and disable service before uninstallation + if systemctl is-active --quiet cc-plugin-coolerdash.service || systemctl is-enabled --quiet cc-plugin-coolerdash.service; then + echo "Stopping cc-plugin-coolerdash service..." + systemctl stop cc-plugin-coolerdash.service + echo "Disabling cc-plugin-coolerdash service" + systemctl disable cc-plugin-coolerdash.service + fi + + # Remove systemd drop-in directory + if [ -d /etc/systemd/system/cc-plugin-coolerdash.service.d ]; then + echo "Removing systemd drop-in directory..." + rm -rf /etc/systemd/system/cc-plugin-coolerdash.service.d || echo "Note: Failed to remove systemd drop-in directory. Please remove manually." + fi + + # Remove notify unit (stop, disable and remove) + if systemctl list-unit-files coolerdash-helperd.service >/dev/null 2>&1; then + echo "Stopping, disabling and removing coolerdash-helperd.service..." + systemctl stop --no-block coolerdash-helperd.service 2>/dev/null || true + systemctl disable --now coolerdash-helperd.service 2>/dev/null || true + rm -f /etc/systemd/system/coolerdash-helperd.service || echo "Note: Failed to remove coolerdash-helperd.service file. Please remove manually." + fi + + # Remove all installed users, files and directories + if id -u coolerdash &>/dev/null; then + echo "Removing legacy coolerdash user..." 2>/dev/null + userdel -rf coolerdash || true + fi + + # Remove old systemd service file if it exists (migration from standalone to plugin mode) + if [ -f /etc/systemd/system/coolerdash.service ]; then + echo "Removing deprecated systemd service file..." + rm -f /etc/systemd/system/coolerdash.service || echo "Note: Failed to remove coolerdash.service file. Please remove manually." + fi + + # Remove legacy installation directories if they exist + rm -f /usr/share/applications/coolerdash-settings.desktop + rm -f /bin/coolerdash + rm -f /usr/bin/coolerdash + rm -rf /opt/coolerdash + rm -rf /etc/coolerdash + + systemctl daemon-reload + + # Restart CoolerControl to remove the plugin + if systemctl list-unit-files coolercontrold.service >/dev/null 2>&1; then + echo "Restarting CoolerControl service to unload plugin..." + systemctl restart coolercontrold.service || echo "Note: CoolerControl service restart failed. Please restart manually." + fi + echo "================================================================" + echo "CoolerDash and all related files have been removed." + echo "================================================================" } diff --git a/aur/coolerdash.install b/aur/coolerdash.install index 627bc4f..b7f9a2c 100644 --- a/aur/coolerdash.install +++ b/aur/coolerdash.install @@ -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 diff --git a/coolerdash.install b/coolerdash.install index a8222c1..a3e666f 100644 --- a/coolerdash.install +++ b/coolerdash.install @@ -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 diff --git a/etc/coolercontrol/plugins/coolerdash/ui/index.html b/etc/coolercontrol/plugins/coolerdash/ui/index.html index d90b428..b6cc589 100644 --- a/etc/coolercontrol/plugins/coolerdash/ui/index.html +++ b/etc/coolercontrol/plugins/coolerdash/ui/index.html @@ -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; @@ -403,7 +408,6 @@