From 23e88811471b11c217f607573df6a470ef599cb9 Mon Sep 17 00:00:00 2001 From: "Enrico M. Crisostomo" Date: Fri, 16 Jan 2026 12:28:13 +0100 Subject: [PATCH] feat(macos): add low power mode management functions --- plugins/macos/README.md | 50 ++++++++++++++----------- plugins/macos/lpm | 68 ++++++++++++++++++++++++++++++++++ plugins/macos/macos.plugin.zsh | 3 ++ 3 files changed, 99 insertions(+), 22 deletions(-) create mode 100644 plugins/macos/lpm diff --git a/plugins/macos/README.md b/plugins/macos/README.md index ccc4331e5..c593e4aa5 100644 --- a/plugins/macos/README.md +++ b/plugins/macos/README.md @@ -9,6 +9,7 @@ plugins=(... macos) ``` ## Supported Terminals + - [iTerm](https://iterm.sourceforge.net/) - [iTerm2](https://iterm2.com/) - [Hyper](https://hyper.is/) @@ -17,28 +18,33 @@ plugins=(... macos) ## Commands -| Command | Description | -| :------------ | :------------------------------------------------------- | -| `tab` | Open the current directory in a new tab | -| `split_tab` | Split the current terminal tab horizontally | -| `vsplit_tab` | Split the current terminal tab vertically | -| `ofd` | Open passed directories (or $PWD by default) in Finder | -| `pfd` | Return the path of the frontmost Finder window | -| `pfs` | Return the current Finder selection | -| `cdf` | `cd` to the current Finder directory | -| `pushdf` | `pushd` to the current Finder directory | -| `pxd` | Return the current Xcode project directory | -| `cdx` | `cd` to the current Xcode project directory | -| `quick-look` | Quick-Look a specified file | -| `man-preview` | Open man pages in Preview app | -| `showfiles` | Show hidden files in Finder | -| `hidefiles` | Hide the hidden files in Finder | -| `itunes` | _DEPRECATED_. Use `music` from macOS Catalina on | -| `music` | Control Apple Music. Use `music -h` for usage details | -| `spotify` | Control Spotify and search by artist, album, track… | -| `rmdsstore` | Remove .DS_Store files recursively in a directory | -| `btrestart` | Restart the Bluetooth daemon | -| `freespace` | Erases purgeable disk space with 0s on the selected disk | +| Command | Description | +| :------------ | :------------------------------------------------------------- | +| `tab` | Open the current directory in a new tab | +| `split_tab` | Split the current terminal tab horizontally | +| `vsplit_tab` | Split the current terminal tab vertically | +| `ofd` | Open passed directories (or $PWD by default) in Finder | +| `pfd` | Return the path of the frontmost Finder window | +| `pfs` | Return the current Finder selection | +| `cdf` | `cd` to the current Finder directory | +| `pushdf` | `pushd` to the current Finder directory | +| `pxd` | Return the current Xcode project directory | +| `cdx` | `cd` to the current Xcode project directory | +| `quick-look` | Quick-Look a specified file | +| `man-preview` | Open man pages in Preview app | +| `showfiles` | Show hidden files in Finder | +| `hidefiles` | Hide the hidden files in Finder | +| `itunes` | _DEPRECATED_. Use `music` from macOS Catalina on | +| `music` | Control Apple Music. Use `music -h` for usage details | +| `spotify` | Control Spotify and search by artist, album, track… | +| `lpm` | Toggle Low Power Mode. Use `lpm on\|off\|status` (macOS 12.0+) | +| `lpm-on` | Enable Low Power Mode (macOS 12.0+) | +| `lpm-off` | Disable Low Power Mode (macOS 12.0+) | +| `lpm-status` | Check the current Low Power Mode status (macOS 12.0+) | +| `lpm-toggle` | Toggle the current Low Power Mode status (macOS 12.0+) | +| `rmdsstore` | Remove .DS_Store files recursively in a directory | +| `btrestart` | Restart the Bluetooth daemon | +| `freespace` | Erases purgeable disk space with 0s on the selected disk | ## Acknowledgements diff --git a/plugins/macos/lpm b/plugins/macos/lpm new file mode 100644 index 000000000..8eb8c9d33 --- /dev/null +++ b/plugins/macos/lpm @@ -0,0 +1,68 @@ +function lpm() { + local sw_vers=$(sw_vers -productVersion 2>/dev/null) + + autoload is-at-least + if [[ -z "$sw_vers" ]] || ! is-at-least 12.0 $sw_vers; then + echo "Error: Low Power Mode requires macOS 12.0 (Monterey) or later" >&2 + echo "Current version: ${sw_vers:-unknown}" >&2 + return 1 + fi + + local action="${1:-}" + + # Helper function to get current status (returns 0, 1, or empty string) + local get_status() { + pmset -g | grep lowpowermode | awk '{print $2}' + } + + case "${action}" in + on) + sudo pmset -a lowpowermode 1 + ;; + off) + sudo pmset -a lowpowermode 0 + ;; + status) + local lpm_status=$(get_status) + if [[ "$lpm_status" == "1" ]]; then + echo "enabled" + elif [[ "$lpm_status" == "0" ]]; then + echo "disabled" + else + echo "unknown" >&2 + return 3 + fi + ;; + toggle) + local lpm_status=$(get_status) + if [[ "$lpm_status" == "1" ]]; then + sudo pmset -a lowpowermode 0 + elif [[ "$lpm_status" == "0" ]]; then + sudo pmset -a lowpowermode 1 + else + echo "Unable to determine current status to toggle" >&2 + return 3 + fi + ;; + *) + echo "usage: lpm on|off|status|toggle" >&2 + return 2 + ;; + esac +} + +function lpm-off() { + lpm off +} + +function lpm-on() { + lpm on +} + +function lpm-status() { + lpm status +} + +function lpm-toggle() { + lpm toggle +} \ No newline at end of file diff --git a/plugins/macos/macos.plugin.zsh b/plugins/macos/macos.plugin.zsh index 4d73d22c3..ff1d78793 100644 --- a/plugins/macos/macos.plugin.zsh +++ b/plugins/macos/macos.plugin.zsh @@ -314,3 +314,6 @@ source "${0:h:A}/music" # Spotify control function source "${0:h:A}/spotify" + +# low power mode toggle-switch function +source "${0:h:A}/lpm" \ No newline at end of file