diff --git a/config/noctalia/ac-idle-inhibit.sh b/config/noctalia/ac-idle-inhibit.sh new file mode 100644 index 000000000..c2eceefd9 --- /dev/null +++ b/config/noctalia/ac-idle-inhibit.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# Inhibit idle when on AC power so noctalia's idle timeouts only fire on battery. +# Polls every 2s so AC state changes take effect well within the 5-min idle window. +set -euo pipefail + +AC=/sys/class/power_supply/ACAD/online + +while true; do + if [ "$(cat "$AC" 2>/dev/null)" = "1" ]; then + systemd-inhibit --what=idle --why="On AC power" --mode=block sleep 2 + else + sleep 2 + fi +done diff --git a/config/noctalia/default.nix b/config/noctalia/default.nix index a74511fb5..9ad825351 100644 --- a/config/noctalia/default.nix +++ b/config/noctalia/default.nix @@ -9,6 +9,21 @@ force = true; }; + # Inhibit idle when plugged into AC; noctalia's idle timeouts apply on battery only. + systemd.user.services.ac-idle-inhibit = { + Unit = { + Description = "Inhibit idle when on AC power"; + After = [ "graphical-session.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + Service = { + Type = "simple"; + ExecStart = "${pkgs.bash}/bin/bash ${./ac-idle-inhibit.sh}"; + Restart = "on-failure"; + }; + Install.WantedBy = [ "graphical-session.target" ]; + }; + programs.noctalia-shell = { enable = true; package = inputs.noctalia-shell.packages.${pkgs.system}.default; @@ -20,6 +35,7 @@ capsuleOpacity = 0; widgets.left = [ { id = "Launcher"; } + { id = "Workspaces"; } { id = "Clock"; formatHorizontal = "yyyy/MM/dd HH:mm:ss"; @@ -44,12 +60,11 @@ { id = "PowerProfile"; } { id = "Volume"; } { id = "Brightness"; } - { id = "Settings"; } { id = "ControlCenter"; } ]; }; ui = { - fontDefault = "JetBrainsMono Nerd Font"; + fontDefault = "Noto Sans"; fontFixed = "JetBrainsMono Nerd Font"; }; notifications = { @@ -69,20 +84,36 @@ compactLockScreen = true; autoStartAuth = true; allowPasswordWithFprintd = true; + lockOnSuspend = true; }; colorSchemes.predefinedScheme = "Dracula-Custom"; hooks = { enabled = true; - darkModeChange = ''if [ "$1" = "true" ]; then dconf write /org/gnome/desktop/interface/color-scheme "'prefer-dark'" && dconf write /org/gnome/desktop/interface/gtk-theme "'Adwaita-dark'"; else dconf write /org/gnome/desktop/interface/color-scheme "'prefer-light'" && dconf write /org/gnome/desktop/interface/gtk-theme "'Adwaita'"; fi''; + darkModeChange = '' + if [ "$1" = "true" ]; then + dconf write /org/gnome/desktop/interface/color-scheme "'prefer-dark'" + dconf write /org/gnome/desktop/interface/gtk-theme "'Adwaita-dark'" + dconf write /org/gnome/desktop/interface/icon-theme "'Adwaita'" + else + dconf write /org/gnome/desktop/interface/color-scheme "'prefer-light'" + dconf write /org/gnome/desktop/interface/gtk-theme "'Adwaita'" + dconf write /org/gnome/desktop/interface/icon-theme "'Adwaita'" + fi + ''; }; dock = { colorizeIcons = true; showLauncherIcon = true; - showDockIndicator = true; + showDockIndicator = false; }; desktopWidgets.enabled = true; wallpaper.enabled = false; - idle.enabled = true; + idle = { + enabled = true; + screenOffTimeout = 300; # 5 min on battery + lockTimeout = 300; + suspendTimeout = 600; # 10 min on battery + }; systemMonitor.enableDgpuMonitoring = true; colorSchemes.schedulingMode = "location"; location.autoLocate = true; diff --git a/spec/coverage_spec.sh b/spec/coverage_spec.sh index fa21aae4d..1a6b86de7 100644 --- a/spec/coverage_spec.sh +++ b/spec/coverage_spec.sh @@ -360,6 +360,7 @@ config/git-ai/activate.sh config/hyprland/scripts/record-screen.sh config/hyprland/scripts/toggle-terminal.sh config/k3s/activate.sh +config/noctalia/ac-idle-inhibit.sh config/obsidian/activate.sh config/omp/activate.sh config/openclaw/hydrate.sh