From: Samuel Henrique Date: Mon, 6 Nov 2023 09:36:52 +0000 (+0000) Subject: Import polybar_3.7.0.orig.tar.gz X-Git-Tag: archive/raspbian/3.7.0-1+rpi1^2~3 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=5434e33b805776f79f5e5d879f15e64deff3081d;p=polybar.git Import polybar_3.7.0.orig.tar.gz [dgit import orig polybar_3.7.0.orig.tar.gz] --- 5434e33b805776f79f5e5d879f15e64deff3081d diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..9f04cab --- /dev/null +++ b/.clang-format @@ -0,0 +1,14 @@ +--- +Language: Cpp +Standard: c++17 +BasedOnStyle: Google +ColumnLimit: 120 +NamespaceIndentation: Inner +AlignAfterOpenBracket: DontAlign +AllowShortFunctionsOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: false +BreakConstructorInitializersBeforeComma: true +DerivePointerAlignment: false +PointerAlignment: Left +SpacesBeforeTrailingComments: 1 +--- diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 0000000..d28a132 --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,52 @@ +--- +Checks: ' + -*, + performance-*, + readability-*, + clang-analyzer-alpha.core*, + clang-analyzer-alpha.security*, + clang-analyzer-alpha.unix.cstring*, + clang-analyzer-core.uninitialized*, + clang-analyzer-cplusplus.*, + clang-analyzer-nullability*, + clang-analyzer-unix*, + cppcoreguidelines*, + modernize-use-*, + modernize-*, + -modernize-raw-string-literal, + -modernize-use-bool-literals, + -modernize-use-trailing-return-type, + -readability-identifier-length, + -readability-implicit-bool-cast, + -readability-else-after-return, + -readability-named-parameter, + -readability-implicit-bool-conversion, + -cppcoreguidelines-pro-bounds-pointer-arithmetic, + -cppcoreguidelines-pro-bounds-array-to-pointer-decay, + -cppcoreguidelines-pro-type-vararg, + -cppcoreguidelines-pro-type-reinterpret-cast, + -cppcoreguidelines-pro-type-union-access, + -cppcoreguidelines-pro-type-cstyle-cast, + -cppcoreguidelines-pro-bounds-constant-array-index, + -cppcoreguidelines-owning-memory, + ' + +CheckOptions: + - key: modernize-loop-convert.NamingStyle + value: lower_case + - key: readability-identifier-naming.ClassCase + value: lower_case + - key: readability-identifier-naming.ClassConstantCase + value: UPPER_CASE + - key: readability-identifier-naming.ClassMethodCase + value: lower_case + - key: readability-identifier-naming.MemberCase + value: lower_case + - key: readability-identifier-naming.ProtectedMemberPrefix + value: 'm_' + - key: readability-identifier-naming.PrivateMemberPrefix + value: 'm_' +HeaderFilterRegex: '' +WarningsAsErrors: '' +AnalyzeTemporaryDtors: false +... diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..ff6aa42 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 +charset = utf-8 + +[*.py] +indent_size = 4 + +[Makefile] +indent_style = tab +indent_size = 2 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..ea49a3b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: polybar +open_collective: polybar diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..8f9fadf --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,112 @@ +name: 🐞 Bug Report +description: Create a report for something that misbehaves +title: "[Bug]: " +labels: ["bug", "needs confirmation"] +body: + - type: checkboxes + id: checklist + attributes: + label: Checklist + description: Please carefully go through this checklist and check each option. + options: + - label: I have read the appropriate section in the [contributing guidelines](https://github.com/polybar/polybar/blob/master/CONTRIBUTING.md) + required: true + - label: I believe this issue is a problem with polybar itself and not a misconfiguration on my part + required: true + - label: I have searched for other open and closed [issues](https://github.com/polybar/polybar/issues?q=is%3Aissue) that may have already reported this problem + required: true + - label: I have checked the [known issues](https://github.com/polybar/polybar/wiki/Known-Issues) page for this problem. + required: true + - label: I have followed the [debugging guide](https://github.com/polybar/polybar/wiki/Debugging-your-Config) to narrow down the problem to a minimal config. + required: true + - type: textarea + id: reproduce + attributes: + label: Steps to reproduce + description: Any steps to take and commands to run to reproduce this issue. + placeholder: | + 1. `polybar -c ... bar` + 2. ... + validations: + required: true + - type: textarea + id: config + attributes: + label: Minimal config + description: A minimal but **complete** config with which the problem occurs. + render: dosini + placeholder: | + [bar/example] + ... + + [module/...] + ... + validations: + required: true + - type: textarea + id: logs + attributes: + label: Polybar log + description: Post everything polybar prints to the terminal when you run it and the issue occurs. If possible, run polybar with a higher log level (e.g. `trace` or `info`). + render: text + placeholder: | + notice: Parsing config file: ... + ... + - type: textarea + id: expected + attributes: + label: Expected behavior + description: A clear and concise description of what you expected to happen + validations: + required: true + - type: textarea + id: actual + attributes: + label: Actual behavior + description: What actually happens + validations: + required: true + - type: input + id: wm + attributes: + label: Window Manager and Version + placeholder: ex. i3-gaps 4.19.1 + validations: + required: true + - type: input + id: distro + attributes: + label: Linux Distribution + placeholder: ex. Ubuntu 21.04 + validations: + required: true + - type: textarea + id: version + attributes: + label: Polybar version + description: Output of `polybar -vvv` + render: text + placeholder: | + polybar 3.5.7 + + Features: +alsa +curl +i3 +mpd +network(libnl) +pulseaudio +xkeyboard + + X extensions: +randr (+monitors) +composite +xkb +xrm +xcursor + + Build type: Release + Compiler: /usr/bin/c++ + Compiler flags: -D_FORTIFY_SOURCE=2 -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -O3 -DNDEBUG -Wall -Wextra -Wpedantic -Wsuggest-override + Linker flags: -Wall -Wextra -Wpedantic -Wsuggest-override -Wall -Wextra -Wpedantic -Wsuggest-override + validations: + required: true + - type: textarea + id: context + attributes: + label: Additional Context / Screenshots + description: If applicable, add screenshots and additional context to explain your problem + validations: + required: false + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! :heart: diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..81b3623 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: 🙋 Ask a question + url: https://github.com/polybar/polybar/blob/master/SUPPORT.md + about: Have a look at our support resources and channels + - name: 💡 Feature request + url: https://github.com/polybar/polybar/discussions/categories/ideas + about: Suggest your idea over in Discussions + - name: 🛠️ Build Issues + url: https://github.com/polybar/polybar/discussions/categories/build-support + about: Get support when building polybar from source diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..442cf05 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,26 @@ + + +## What type of PR is this? (check all applicable) + +* [ ] Refactor +* [ ] Feature +* [ ] Bug Fix +* [ ] Optimization +* [ ] Documentation Update +* [ ] Other: *Replace this with a description of the type of this PR* + +## Description + + +## Related Issues & Documents + + +## Documentation (check all applicable) + +* [ ] This PR requires changes to the Wiki documentation (describe the changes) +* [ ] This PR requires changes to the documentation inside the git repo (please add them to the PR). +* [ ] Does not require documentation changes diff --git a/.github/codecov.yml b/.github/codecov.yml new file mode 100644 index 0000000..0a6287d --- /dev/null +++ b/.github/codecov.yml @@ -0,0 +1,21 @@ +coverage: + status: + project: + default: + # Coverage can drop by 0.1% without failing the status + threshold: 0.1 + patch: + default: + # Patches don't need test coverage + # TODO remove once we have proper testing infrastructure and documentation + target: 0 + +ignore: + - "tests/**/*" + - "lib/**/*" + +comment: + require_changes: true + +github_checks: + annotations: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f5eb3a6 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,160 @@ +name: CI +on: + workflow_dispatch: + inputs: + ref: + description: 'ref' + required: false + push: + pull_request: + +jobs: + docs: + runs-on: ubuntu-22.04 + env: + COLOR: "ON" + steps: + - uses: actions/checkout@v3 + with: + ref: ${{ github.event.inputs.ref }} + - name: Install Dependencies + run: | + sudo apt-get update + sudo apt-get install -y python3-sphinx + - name: Build Documentation + run: | + mkdir -p build + cd build + cmake -DDISABLE_ALL=ON -DBUILD_DOC=ON -DSPHINX_FLAGS="-W" .. + make doc + + ipc: + runs-on: ubuntu-22.04 + env: + COLOR: "ON" + steps: + - name: Install Dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + libxcb-composite0-dev \ + libxcb-ewmh-dev \ + libxcb-icccm4-dev \ + libxcb-image0-dev \ + libxcb-randr0-dev \ + libxcb-util0-dev \ + libxcb1-dev \ + libcairo2-dev \ + python3-xcbgen \ + libuv1-dev \ + xcb-proto + - uses: actions/checkout@v3 + with: + submodules: true + ref: ${{ github.event.inputs.ref }} + - name: Build polybar-msg + run: | + mkdir -p build + cd build + cmake -DDISABLE_ALL=ON -DBUILD_POLYBAR_MSG=ON .. + make polybar-msg + + build: + runs-on: ubuntu-22.04 + strategy: + matrix: + cxx: [g++, clang++] + polybar_build_type: ["full"] + build_type: ["Release"] + include: + - cxx: g++ + polybar_build_type: "tests" + build_type: "Coverage" + - cxx: g++ + polybar_build_type: "minimal" + build_type: "Release" + env: + CXX: ${{ matrix.cxx }} + BUILD_TYPE: ${{ matrix.build_type }} + POLYBAR_BUILD_TYPE: ${{ matrix.polybar_build_type }} + POLYBAR_DIR: ${{ github.workspace }} + BUILD_DIR: "${{ github.workspace}}/build" + MAKEFLAGS: "-j4" + COLOR: "ON" + steps: + - name: Install Dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + libxcb-composite0-dev \ + libxcb-ewmh-dev \ + libxcb-icccm4-dev \ + libxcb-image0-dev \ + libxcb-randr0-dev \ + libxcb-util0-dev \ + libxcb1-dev \ + libcairo2-dev \ + python3-xcbgen \ + libuv1-dev \ + xcb-proto + + if [ "$POLYBAR_BUILD_TYPE" != "minimal" ]; then + sudo apt-get install -y \ + libxcb-xkb-dev \ + libxcb-cursor-dev \ + libxcb-xrm-dev \ + i3-wm \ + libcurl4-openssl-dev \ + libjsoncpp-dev \ + libasound2-dev \ + libpulse-dev \ + libnl-genl-3-dev \ + libmpdclient-dev + fi + + if [ "$POLYBAR_BUILD_TYPE" = "tests" ]; then + sudo apt-get install -y lcov + fi + - uses: actions/checkout@v3 + with: + submodules: true + ref: ${{ github.event.inputs.ref }} + - name: Summary + run: ./common/ci/summary.sh + - name: Configure + run: ./common/ci/configure.sh + - name: Build + run: | + cd "$BUILD_DIR" + make + - name: Collect initial coverage + if: ${{ matrix.polybar_build_type == 'tests' }} + run: | + lcov --capture --initial --no-external --directory . -o cov_base.info + - name: Tests + if: ${{ matrix.polybar_build_type == 'tests' }} + run: | + cd "$BUILD_DIR" + make check + - name: Collect coverage + if: ${{ matrix.polybar_build_type == 'tests' }} + run: | + lcov --capture --no-external --directory . -o cov_tests.info + lcov --add-tracefile cov_base.info --add-tracefile cov_tests.info -o cov_total.info + lcov --remove cov_total.info "${PWD}/build/*" "${PWD}/tests/*" "${PWD}/lib/*" -o cov.info + - name: Upload Coverage + if: ${{ matrix.polybar_build_type == 'tests' }} + uses: codecov/codecov-action@v3 + with: + flags: unittests + files: ./cov.info + fail_ci_if_error: true + - name: Upload Logs + if: failure() + uses: actions/upload-artifact@v2 + with: + name: cmake + path: | + build/CMakeFiles/CMakeError.log + build/CMakeFiles/CMakeOutput.log + retention-days: 5 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..a0c408d --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,105 @@ +# Workflow For Releases +# +# Automatically creates and uploads a complete release archive for the given +# release. +name: Release Workflow + +# Is triggered when a new release is published or by hand +# If triggered by hand, the release tag that this should target has to be +# specified. +on: + release: + types: [published] + workflow_dispatch: + inputs: + tag: + description: 'Release Tag' + required: true + +jobs: + upload: + runs-on: ubuntu-latest + steps: + - name: Get Version + if: ${{ github.event.inputs.tag }} != '' + run: | + if [ ${{ github.event_name }} == 'workflow_dispatch' ]; then + echo "Manual Release Triggered" + RELEASE_TAG=${{ github.event.inputs.tag }} + else + echo "Automatic Release Triggered" + RELEASE_TAG=${GITHUB_REF#refs/tags/} + fi + echo "Publishing Version $RELEASE_TAG" + { + echo "RELEASE_TAG=$RELEASE_TAG" + echo "POLYBAR_DIR=polybar-$RELEASE_TAG" + echo "POLYBAR_ARCHIVE=polybar-$RELEASE_TAG.tar.gz" + } >> "$GITHUB_ENV" + + # Checks out the target tag + - uses: actions/checkout@v2 + with: + ref: ${{ env.RELEASE_TAG }} + submodules: true + path: ${{ env.POLYBAR_DIR }} + + - name: Create Release Archive + run: | + find "$DIR" -type d -name ".git" -exec rm -rf {} \+ + tar czf "$ARCHIVE" "$DIR" + echo "SHA256SUM=$(sha256sum "$ARCHIVE" | cut -d ' ' -f 1)" >> "$GITHUB_ENV" + env: + DIR: ${{ env.POLYBAR_DIR }} + ARCHIVE: ${{ env.POLYBAR_ARCHIVE }} + + - name: Get Upload URL + id: get_upload_url + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const tag = '${{ env.RELEASE_TAG }}'; + console.log(`Getting Upload URL for '${tag}'`); + const release = await github.repos.getReleaseByTag({ + owner: context.repo.owner, + repo: context.repo.repo, + tag: tag + }); + core.exportVariable('UPLOAD_URL', release.data.upload_url); + core.exportVariable('RELEASE_ID', release.data.id); + core.exportVariable('RELEASE_BODY', release.data.body); + + - name: Upload Release Archive + id: upload_archive + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ env.UPLOAD_URL }} + asset_path: "./${{ env.POLYBAR_ARCHIVE }}" + asset_name: ${{ env.POLYBAR_ARCHIVE }} + asset_content_type: application/gzip + + # Adds a download section to the beginning of the release body + - name: Update Release Body + uses: actions/github-script@v3 + env: + # Existing release body, fetched in the get_upload_url step. + RELEASE_BODY: ${{ env.RELEASE_BODY }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const fname = '${{ env.POLYBAR_ARCHIVE }}' + const url = '${{ steps.upload_archive.outputs.browser_download_url }}' + const hash = '${{ env.SHA256SUM }}' + let body = "## Download\n\n" + body += `[${fname}](${url}) (**sha256**: \`${hash}\`)\n\n` + body += process.env.RELEASE_BODY; + + const release = await github.repos.updateRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: '${{ env.RELEASE_ID}}', + body: body + }); diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8428eee --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +/build +/tags +/compile_commands.json +*.bak +*.pyc +*.swp +*.tmp +.tags +*.user + +# clangd +/.cache + +polybar-*.tar +*.cache + +.venv diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..4b6f7f5 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,8 @@ +[submodule "lib/i3ipcpp"] + path = lib/i3ipcpp + url = https://github.com/polybar/i3ipcpp + branch = master +[submodule "lib/xpp"] + path = lib/xpp + url = https://github.com/polybar/xpp + branch = master diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..1cebab8 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,22 @@ +--- +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the version of Python and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3" + +# Build documentation in the docs/ directory with Sphinx +sphinx: + configuration: doc/conf.py + fail_on_warning: true + +python: + install: + - requirements: doc/requirements.txt diff --git a/.valgrind-suppressions b/.valgrind-suppressions new file mode 100644 index 0000000..6d33fd4 --- /dev/null +++ b/.valgrind-suppressions @@ -0,0 +1,101 @@ +{ + xft/fontconfig + Memcheck:Leak + match-leak-kinds: definite + fun:malloc + fun:FcPatternCreate + fun:FcFontRenderPrepare + fun:FcFontMatch + fun:XftFontMatch + fun:XftFontOpenName + ... + ... + ... + ... + ... + ... +} +{ + xft/fontconfig + Memcheck:Leak + match-leak-kinds: definite + fun:malloc + obj:/usr/lib/libfontconfig.so.* + obj:/usr/lib/libfontconfig.so.* + fun:FcPatternAddDouble + obj:/usr/lib/libXft.so.* + obj:/usr/lib/libXft.so.* + obj:/usr/lib/libXft.so.* + obj:/usr/lib/libXft.so.* + fun:XftDefaultHasRender + fun:XftDefaultSubstitute + fun:XftFontMatch + fun:XftFontOpenName +} +{ + xft/fontconfig + Memcheck:Leak + match-leak-kinds: definite + fun:malloc + fun:XftFontCheckGlyph + fun:XftGlyphRender + fun:XftDrawGlyphs + fun:XftDrawString16 + ... + ... + ... + ... + ... + ... + ... +} +{ + xft/fontconfig + Memcheck:Leak + match-leak-kinds: definite + fun:realloc + obj:/usr/lib/libfontconfig.so.* + obj:/usr/lib/libfontconfig.so.* + fun:FcFontRenderPrepare + fun:FcFontMatch + fun:XftFontMatch + fun:XftFontOpenName + ... + ... + ... + ... + ... +} +{ + xresource manager + Memcheck:Leak + match-leak-kinds: definite + fun:realloc + obj:/usr/lib/libX11.so.* + obj:/usr/lib/libX11.so.* + obj:/usr/lib/libX11.so.* + fun:_XlcCreateLC + fun:_XlcDefaultLoader + fun:_XOpenLC + fun:_XrmInitParseInfo + obj:/usr/lib/libX11.so.* + fun:XrmGetStringDatabase + ... + ... +} +{ + xft conditional jump + Memcheck:Cond + obj:/usr/lib/libfreetype.so.* + obj:/usr/lib/libfreetype.so.* + fun:FT_Outline_Decompose + obj:/usr/lib/libfreetype.so.* + obj:/usr/lib/libfreetype.so.* + obj:/usr/lib/libfreetype.so.* + obj:/usr/lib/libfreetype.so.* + obj:/usr/lib/libfreetype.so.* + fun:XftFontLoadGlyphs + fun:XftGlyphExtents + ... + ... +} diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..62a622c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,260 @@ +# Changelog + +All notable changes to this project will be documented in this file. +Each release should have the following subsections, if entries exist, in the +given order: `Breaking`, `Build`, `Deprecated`, `Removed`, `Added`, `Changed`, +`Fixed`, `Security`. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [3.7.0] - 2023-11-05 +### Breaking +- `custom/script`: + - No longer hides the module if the `exec` command failed and did not change the output from the previous run ([`#2636`](https://github.com/polybar/polybar/issues/2636)). Somewhat similar original behaviour can be imitated with `format-fail`, if necessary. + - If the `exec` command produced no output and exited with a non-zero exit code the module is no longer completely empty, but just has an empty `%output%` token. If you relied on this behavior to hide the module under certain circumstances, make sure the script exits with an exit code of zero. ([`#2857`](https://github.com/polybar/polybar/discussions/2857), [`#2861`](https://github.com/polybar/polybar/pull/2861)) + +### Build +- Respect `CMAKE_INSTALL_PREFIX` when installing default config ([`#2770`](https://github.com/polybar/polybar/pull/2770), [`#2917`](https://github.com/polybar/polybar/pull/2917)) +- Change default `CMAKE_INSTALL_PREFIX` to `/usr`. Installations with default flags will now go into `/usr` instead of `/usr/local` ([`#2917`](https://github.com/polybar/polybar/pull/2917)) +- Bump C++ version to C++17 ([`#2847`](https://github.com/polybar/polybar/pull/2847)) + +### Deprecated +- `custom/text`: The `content` setting and all its properties are deprecated in favor of `format` with the same functionality. ([`#2676`](https://github.com/polybar/polybar/pull/2676)) +- tray: All tray-related settings in the bar section are deprecated. They are replaced by the new tray module ([`#3002`](https://github.com/polybar/polybar/pull/3002)) + - `tray-position`, `tray-detached`, `tray-maxsize`, `tray-scale`, `tray-transparent`, `tray-background`, `tray-foreground`, `tray-padding`, `tray-offset-x`, `tray-offset-y` + +### Added +- A tray module with type `internal/tray` for positioning the tray like a module ([`#2689`](https://github.com/polybar/polybar/issues/2689)) +- `internal/temperature`: `%temperature-k%` token displays the temperature in degrees Kelvin ([`#2774`](https://github.com/polybar/polybar/discussions/2774), [`#2784`](https://github.com/polybar/polybar/pull/2784)) +- `internal/pulseaudio`: `reverse-scroll` option ([`#2664`](https://github.com/polybar/polybar/pull/2664)) +- `custom/script`: Repeat interval for script failure (`interval-fail`) and `exec-if` (`interval-if`) ([`#943`](https://github.com/polybar/polybar/issues/943), [`#2606`](https://github.com/polybar/polybar/issues/2606), [`#2630`](https://github.com/polybar/polybar/pull/2630)) +- `custom/ipc`: + - Added support for `