rebrand: swaync → ximper-shell-notification-center

parent 3851cbe1
# These are supported funding model platforms
github: [erikreider] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
polar: # Replace with a single Polar username
buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
thanks_dev: # Replace with a single thanks.dev username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
---
name: Bug report
about: Create a report to help us improve
title: "[Bug]"
labels: bug
assignees: ''
---
**Please read through the README and the Man pages before submitting**
**Please also make sure that there isn't any prior issue describing this bug**
**If this is a CSS issue, please make sure that the `cssPriority` config option is set to "user" before reporting**
**Please also make sure that swaync is running with your primary GPU, and not PRIME**
**If you're experiencing VK/vulkan error messages, please first try running with the environment variable `GSK_RENDERER=opengl swaync`**
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Please provide logs if you're experiencing notification errors / bugs**
Attach Gists for swaync logs by running `G_MESSAGES_DEBUG=all swaync` and (if applicable) application logs.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. Fedora 42]
- Version [e.g. 0.12.4]
**Additional context**
Add any other context about the problem here.
---
name: Feature request
about: Suggest an idea for this project
title: "[Feature]"
labels: ''
assignees: ''
---
**Please read through the README and the Man pages before submitting**
**Please also make sure that there isn't any prior issue describing this feature**
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
# This is a basic workflow to help you get started with Actions
name: Check PKGBUILD builds for Arch.
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main ]
pull_request:
branches: [ main ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
PKGBUILD-build:
container: archlinux:base-devel
runs-on: ubuntu-latest
steps:
- name: Install packages
run: |
pacman-key --init
pacman -Syu --noconfirm
- name: Add builduser
run: |
# Create the builduser
useradd builduser -m
# Delete the buildusers password
passwd -d builduser
# Allow the builduser passwordless sudo
printf 'builduser ALL=(ALL) ALL\n' | tee -a /etc/sudoers
- name: Check out sources
uses: actions/checkout@v3
with:
fetch-depth: 0
path: swaync
- name: Test PKGBUILD
run: |
cd swaync
build_dir="/tmp/PKGBUILD-git"
cd build-scripts
mkdir $build_dir
cp ./PKGBUILD-git $build_dir/PKGBUILD
mkdir $build_dir/src
cp -r ../ $build_dir/src/swaync
cd $build_dir
sudo chown -R builduser $build_dir
# Use the locally checked-out branch instead of downloading the source
sudo -H -u builduser bash -c "makepkg -s --noconfirm --noextract SRCDEST=$build_dir"
name: Check build for Fedora.
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
fedora-build:
container: registry.fedoraproject.org/fedora-minimal:latest
runs-on: ubuntu-latest
steps:
- name: Install tooling for source RPM build
run: |
microdnf -y install --nodocs --setopt=install_weak_deps=0 \
@development-tools @rpm-development-tools rpkg git \
'dnf5-command(builddep)' 'dnf5-command(copr)'
# Enable the official COPR repo
# (in case there are dependencies missing in the upstream repos)
microdnf copr enable erikreider/SwayNotificationCenter -y
# It is necessary to checkout into sub-directory, because of some weird ownership problems cause by using containers
- name: Check out sources
uses: actions/checkout@v3
with:
fetch-depth: 0
path: swaync
- name: Copy spec into root dir
run: |
cd swaync
cp ./build-scripts/swaync.rpkg.spec ./
- name: Generate spec
run: |
cd swaync
mkdir specs
rpkg spec --source --outdir specs
- name: Install build dependencies
run: |
cd swaync
microdnf -y builddep ./specs/swaync.rpkg.spec
- name: Local build
run: |
cd swaync
mkdir -p out
rpkg local --out `pwd`/out
name: Package for Fedora Copr repo
on:
release:
types: [published]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
fedora-copr:
container: registry.fedoraproject.org/fedora-minimal:latest
runs-on: ubuntu-latest
steps:
- name: Install API token for copr-cli
env:
API_LOGIN: ${{ secrets.COPR_API_LOGIN }}
API_USERNAME: ${{ secrets.COPR_API_USERNAME }}
API_TOKEN_CONTENT: ${{ secrets.COPR_API_TOKEN }}
run: |
mkdir -p "$HOME/.config"
# To generate a new token: https://copr.fedorainfracloud.org/api/.
echo "[copr-cli]" >> "$HOME/.config/copr"
echo "login = $API_LOGIN" >> "$HOME/.config/copr"
echo "username = $API_USERNAME" >> "$HOME/.config/copr"
echo "token = $API_TOKEN_CONTENT" >> "$HOME/.config/copr"
echo "copr_url = https://copr.fedorainfracloud.org" >> "$HOME/.config/copr"
- name: Install tooling for source RPM build
run: |
microdnf -y install --nodocs --setopt=install_weak_deps=0 \
copr-cli rpkg git
# It is necessary to checkout into sub-directory, because of some weird ownership problems cause by using containers
- name: Check out sources
uses: actions/checkout@v3
with:
fetch-depth: 0
path: swaync
- name: Copy spec into root dir
run: |
cd swaync
cp ./build-scripts/swaync.rpkg.spec ./
- name: Submit the build to copr
run: |
cd swaync
rpkg -v copr-build -w ${{ secrets.COPR_REPO_NAME }}
# This is a basic workflow to help you get started with Actions
name: Linting
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main ]
pull_request:
branches: [ main ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
vala-linting:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: elementary/actions/vala-lint@master
with:
dir: src/
conf: .vala-lint.conf
fail: true
uncrustify:
container: registry.fedoraproject.org/fedora-minimal:latest
runs-on: ubuntu-latest
steps:
- name: Install uncrustify
run: |
microdnf -y install --nodocs --setopt=install_weak_deps=0 \
@development-tools git \
uncrustify
- name: Check out sources
uses: actions/checkout@v3
with:
fetch-depth: 0
path: swaync
- name: Run uncrustify
run: |
cd swaync
uncrustify -c ./.uncrustify.cfg -l vala $(find . -name "*.vala" -type f) --check >/dev/null
rpmlint:
container: registry.fedoraproject.org/fedora-minimal:latest
runs-on: ubuntu-latest
steps:
- name: Install rpmlint
run: |
microdnf -y install --nodocs --setopt=install_weak_deps=0 \
rpmlint rpkg
- name: Check out sources
uses: actions/checkout@v3
with:
fetch-depth: 0
path: swaync
- name: Copy spec into root dir
run: |
cd swaync
cp ./build-scripts/swaync.rpkg.spec ./
- name: Generate spec
run: |
cd swaync
mkdir -p specs
rpkg spec --source --outdir specs
- name: Start linting
run: |
cd swaync
rpmlint ./specs/swaync.rpkg.spec
# This is a basic workflow to help you get started with Actions
name: Check build for latest Ubuntu version.
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main ]
pull_request:
branches: [ main ]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
ubuntu-build:
container: ubuntu:25.04
runs-on: ubuntu-latest
env:
DEBIAN_FRONTEND: noninteractive
PACKAGES: meson libwayland-dev libgtk-4-dev gobject-introspection libgirepository1.0-dev valac libjson-glib-dev libgtk4-layer-shell-dev scdoc libgee-0.8-dev libpulse-dev sassc libgranite-7-dev blueprint-compiler libadwaita-1-dev
steps:
- name: Install packages
run: |
apt update
apt install -y $PACKAGES
- name: Check out sources
uses: actions/checkout@v3
- name: Meson configure
run: meson build
- name: Build
run: ninja -C build
......@@ -3,9 +3,9 @@
gschemas.compiled
pkg
build
SwayNotificationCenter
./swaync
./swaync*
./src/swaync
./src/swaync*
XimperShellNotificationCenter
./ximper-shell-notification-center
./ximper-shell-notification-center*
./src/ximper-shell-notification-center
./src/ximper-shell-notification-center*
.cache/
# SwayNotificationCenter
# Ximper Shell Notification Center
[![Check PKGBUILD builds for Arch.](https://github.com/ErikReider/SwayNotificationCenter/actions/workflows/PKGBUILD-build.yml/badge.svg)](https://github.com/ErikReider/SwayNotificationCenter/actions/workflows/PKGBUILD-buildd.yml)
[![Check build for Fedora.](https://github.com/ErikReider/SwayNotificationCenter/actions/workflows/fedora-build.yml/badge.svg)](https://github.com/ErikReider/SwayNotificationCenter/actions/workflows/fedora-build.yml)
[![Check build for latest Ubuntu LTS.](https://github.com/ErikReider/SwayNotificationCenter/actions/workflows/ubuntu-build.yml/badge.svg)](https://github.com/ErikReider/SwayNotificationCenter/actions/workflows/ubuntu-build.yml)
[![Linting](https://github.com/ErikReider/SwayNotificationCenter/actions/workflows/linting.yml/badge.svg)](https://github.com/ErikReider/SwayNotificationCenter/actions/workflows/linting.yml)
A notification daemon with a GTK4/Libadwaita GUI for notifications and the control center.
A component of the Ximper Shell. Fork of [SwayNotificationCenter](https://github.com/ErikReider/SwayNotificationCenter).
A simple notification daemon with a GTK gui for notifications and the control center
*Note: SwayNotificationCenter only supports Desktops / Window Managers that
*Note: Ximper Shell Notification Center only supports Desktops / Window Managers that
support `wlr_layer_shell_unstable_v1` like Sway or anything wlroots based*
*Note 2: SwayNotificationCenter does not support third-party GTK3 themes and is
*Note 2: Ximper Shell Notification Center does not support third-party GTK3 themes and is
only tested with the default GTK **Adwaita** theme. Usage of any third-party
theme might require extra tweaks to the default CSS style file*
## Demo
https://github.com/user-attachments/assets/5c054ac3-90bb-483e-a8f2-5af191805f04
## Table of Contents
* [Want to show off your sick config?](#want-to-show-off-your-sick-config)
* [Features](#features)
* [Available Widgets](#available-widgets)
* [Planned Features](#planned-features)
* [Install](#install)
* [Arch](#arch)
* [Fedora](#fedora)
* [Fedora Silverblue (and other rpm-ostree variants)](#fedora-silverblue-and-other-rpm-ostree-variants)
* [Gentoo](#gentoo)
* [OpenSUSE Tumbleweed](#opensuse-tumbleweed)
* [Ubuntu](#ubuntu)
* [Debian](#debian)
* [Guix](#guix)
* [rde](#rde)
* [Void](#void)
* [Other](#other)
* [Sway Usage](#sway-usage)
* [Build from source](#build-from-source)
* [Run](#run)
* [Control Center Shortcuts](#control-center-shortcuts)
* [Configuring](#configuring)
......@@ -44,24 +22,9 @@ https://github.com/user-attachments/assets/5c054ac3-90bb-483e-a8f2-5af191805f04
* [Notification Inhibition](#notification-inhibition)
* [Scripting](#scripting)
* [Disable scripting](#disable-scripting)
* [i3status-rs Example](#i3status-rs-example)
* [Waybar Example](#waybar-example)
* [Debugging Environment Variables](#debugging-environment-variables)
## Want to show off your sick config?
Post your setup here: [Config flex 💪](https://github.com/ErikReider/SwayNotificationCenter/discussions/183)
<p>
<img height="500" alt="Config" src="https://github.com/user-attachments/assets/5993cbb2-a54d-4d1c-9289-b7e2b9d0a09f" />
</p>
<p>
<em>
Example of my config
(<a href="https://github.com/ErikReider/Linux/tree/master/dotfiles/.config/swaync">link</a>)
</em>
</p>
## Features
- Grouped notifications
......@@ -81,9 +44,9 @@ Post your setup here: [Config flex 💪](https://github.com/ErikReider/SwayNotif
- Trackpad/mouse gesture to close notification
- The same features as any other basic notification daemon
- Basic configuration through a JSON config file
- Hot-reload config through `swaync-client`
- Hot-reload config through `ximper-shell-notification-center-client`
- Customizable widgets
- Select the preferred monitor to display on (with swaync-client command for scripting)
- Select the preferred monitor to display on (with ximper-shell-notification-center-client command for scripting)
## Available Widgets
......@@ -99,106 +62,9 @@ These widgets can be customized, added, removed and even reordered
- Volume slider using PulseAudio
- Backlight slider
## Planned Features
- Slick animations 😎
## Install
### Alpine Linux
```zsh
apk add swaync
````
### Arch
```zsh
sudo pacman -S swaync
```
Alternatively, [swaync-git](https://aur.archlinux.org/packages/swaync-git/) is available on the AUR.
### Fedora
## Build from source
The package is available on COPR:
```zsh
dnf copr enable erikreider/SwayNotificationCenter
# Or latest stable release or -git package
dnf install SwayNotificationCenter
dnf install SwayNotificationCenter-git
```
### Fedora Silverblue (and other rpm-ostree variants)
The package can be layered over the base image after adding the Copr repo as an ostree repo:
```zsh
sudo curl -sL -o /etc/yum.repos.d/_copr:copr.fedorainfracloud.org:erikreider:SwayNotificationCenter.repo https://copr.fedorainfracloud.org/coprs/erikreider/SwayNotificationCenter/repo/fedora-$(rpm -E %fedora)/erikreider-SwayNotificationCenter-fedora-$(rpm -E %fedora).repo
rpm-ostree install SwayNotificationCenter
```
### Gentoo
An **unofficial** ebuild is available in [GURU](https://github.com/gentoo/guru)
```zsh
eselect repository enable guru
emaint sync --repo guru
emerge --ask gui-apps/swaync
```
### OpenSUSE Tumbleweed
```zsh
sudo zypper install SwayNotificationCenter
```
### Ubuntu
Lunar and later:
```zsh
sudo apt install sway-notification-center
```
### Debian
Bookworm and later:
```zsh
sudo apt install sway-notification-center
```
### Guix
The simplest way is to install it to user's profile:
```zsh
guix install swaynotificationcenter
```
But we recommend to use [Guix Home](https://guix.gnu.org/manual/devel/en/html_node/Home-Configuration.html) to manage packages and their configurations declaratively.
### rde
```scm
(use-modules (rde features wm))
;; Include the following code into the list of your rde features:
(feature-swaynotificationcenter)
```
### Void
```zsh
sudo xbps-install -S SwayNotificationCenter
```
### Other
#### Dependencies
### Dependencies
- `vala >= 0.56`
- `meson`
......@@ -217,7 +83,7 @@ sudo xbps-install -S SwayNotificationCenter
- `gvfs`
- `granite7`
##### Optional Dependencies
#### Optional Dependencies
- `libpulse` (requires meson build options change)
- `libnotify`
......@@ -245,14 +111,14 @@ meson devenv -C build -w .
# Now you can start nvim, vscode, etc in the development environment
```
## Sway Usage
## Usage
```ini
# Notification Daemon
exec swaync
exec ximper-shell-notification-center
# Toggle control center
bindsym $mod+Shift+n exec swaync-client -t -sw
bindsym $mod+Shift+n exec ximper-shell-notification-center-client -t -sw
```
## Run
......@@ -260,25 +126,25 @@ bindsym $mod+Shift+n exec swaync-client -t -sw
To start the daemon (remember to kill any other notification daemon before running)
```zsh
./build/src/swaync
./build/src/ximper-shell-notification-center
```
To toggle the panel
```zsh
./build/src/swaync-client -t
./build/src/ximper-shell-notification-center-client -t
```
To reload the config
```zsh
./build/src/swaync-client -R
./build/src/ximper-shell-notification-center-client -R
```
To reload css after changes
```zsh
./build/src/swaync-client -rs
./build/src/ximper-shell-notification-center-client -rs
```
## Control Center Shortcuts
......@@ -297,25 +163,25 @@ To reload css after changes
## Configuring
The main config file is located in `/etc/xdg/swaync/config.json`. Copy it over
to your `.config/swaync/` folder to customize without needing root access.
See `swaync(5)` man page for more information
The main config file is located in `/etc/xdg/ximper-shell/notification-center/config.json`. Copy it over
to your `.config/ximper-shell/notification-center/` folder to customize without needing root access.
See `ximper-shell-notification-center(5)` man page for more information
To reload the config, you'll need to run `swaync-client --reload-config`
To reload the config, you'll need to run `ximper-shell-notification-center-client --reload-config`
The main CSS style file is located in `/etc/xdg/swaync/style.css`. Copy it over
to your `~/.config/swaync/` folder to customize without needing root access. For
The main CSS style file is located in `/etc/xdg/ximper-shell/notification-center/style.css`. Copy it over
to your `~/.config/ximper-shell/notification-center/` folder to customize without needing root access. For
more advanced/larger themes, I recommend that you use the SCSS files from source
and customize them instead. To use the SCSS files, compile with `sassc`.
**Tip**: running swaync with `GTK_DEBUG=interactive swaync` will open a inspector
**Tip**: running ximper-shell-notification-center with `GTK_DEBUG=interactive ximper-shell-notification-center` will open a inspector
window that'll allow you to see all of the CSS classes + other information.
## Toggle Buttons
To add toggle buttons to your control center you can set the "type" of any action to "toggle".
The toggle button supports different commands depending on the state of the button and
an "update-command" to update the state in case of changes from outside swaync. The update-command
an "update-command" to update the state in case of changes from outside the notification center. The update-command
is called every time the control center is opened.
The active toggle button also gains the css-class ".toggle:checked"
......@@ -329,7 +195,7 @@ The active toggle button also gains the css-class ".toggle:checked"
"label": "WiFi",
"type": "toggle",
"active": true,
"command": "sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'",
"command": "sh -c '[[ $XSNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'",
"update-command": "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'"
}
]
......@@ -339,8 +205,8 @@ The active toggle button also gains the css-class ".toggle:checked"
## Notification Inhibition
Notifications can be inhibited through the provided `swaync-client` executable
or through the DBus interface `org.erikreider.swaync.cc`.
Notifications can be inhibited through the provided `ximper-shell-notification-center-client` executable
or through the DBus interface `ru.ximperlinux.shell.NotificationCenter`.
Here's an example of notification inhibition while screen sharing through
`xdg-desktop-portal-wlr`
......@@ -348,8 +214,8 @@ Here's an example of notification inhibition while screen sharing through
```conf
# xdg-desktop-portal-wlr config
[screencast]
exec_before=swaync-client --inhibitor-add "xdg-desktop-portal-wlr"
exec_after=swaync-client --inhibitor-remove "xdg-desktop-portal-wlr"
exec_before=ximper-shell-notification-center-client --inhibitor-add "xdg-desktop-portal-wlr"
exec_after=ximper-shell-notification-center-client --inhibitor-remove "xdg-desktop-portal-wlr"
```
## Scripting
......@@ -365,10 +231,10 @@ be skipped
· If a script has `run-on` set to `action`, the script will only run when an
action is taken on the notification
More information can be found in the `swaync(5)` man page
More information can be found in the `ximper-shell-notification-center(5)` man page
Notification information can be printed into a terminal by running
`G_MESSAGES_DEBUG=all swaync` (when a notification appears).
`G_MESSAGES_DEBUG=all ximper-shell-notification-center` (when a notification appears).
Config properties:
......@@ -416,25 +282,6 @@ ninja -C build
meson install -C build
```
## i3status-rs Example
> **Note** Ths requires i3status-rs version 0.31.0+
i3status-rs config
```toml
[[block]]
block = "notify"
format = " $icon {($notification_count.eng(w:1)) |}"
driver = "swaync"
[[block.click]]
button = "left"
action = "show"
[[block.click]]
button = "right"
action = "toggle_paused"
```
## Waybar Example
This example requires a [Nerd Fonts](https://www.nerdfonts.com/) font to get the icons looking right
......@@ -456,10 +303,10 @@ Waybar config
"dnd-inhibited-none": "󰪑"
},
"return-type": "json",
"exec-if": "which swaync-client",
"exec": "swaync-client -swb",
"on-click": "swaync-client -t -sw",
"on-click-right": "swaync-client -d -sw",
"exec-if": "which ximper-shell-notification-center-client",
"exec": "ximper-shell-notification-center-client -swb",
"on-click": "ximper-shell-notification-center-client -t -sw",
"on-click-right": "ximper-shell-notification-center-client -d -sw",
"escape": true
},
```
......
./*
!PKGBUILD*
!*.rpkg.spec
# vim: ft=sh
# Maintainer: Erik Reider <erik.reider@protonmail.com>
pkgname=swaync-git
_pkgname=swaync
pkgver=r674.5fa4ce8
pkgrel=1
pkgdesc="A simple notification daemon with a GTK panel for checking previous notifications like other DEs"
url="https://github.com/ErikReider/SwayNotificationCenter"
arch=(
'x86_64'
'aarch64' # ARM v8 64-bit
'armv7h' # ARM v7 hardfloat
)
license=('GPL3')
depends=("gtk4" "gtk4-layer-shell>=1.0.4" "dbus" "glib2" "gobject-introspection" "libgee" "json-glib" "libpulse" "gvfs" "libnotify" "granite7" "blueprint-compiler" "libadwaita")
conflicts=("swaync" "swaync-client")
provides=("swaync" "swaync-client" "notification-daemon")
makedepends=("vala>=0.56" meson git scdoc sassc)
source=("$_pkgname::git+$url")
sha256sums=('SKIP')
pkgver() {
cd $_pkgname
printf "r%s.%s" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)"
}
prepare() {
cd $_pkgname
git checkout main
}
build() {
# Very important to be in the directory! Otherwise somehow breaks linking to the .ui files
cd $_pkgname
arch-meson build -Dscripting=true
ninja -C build
}
package() {
cd $_pkgname
DESTDIR="$pkgdir/" ninja -C build install
install -Dm644 "COPYING" -t "$pkgdir/usr/share/licenses/$pkgname"
install -Dm644 "README.md" -t "$pkgdir/usr/share/doc/$pkgname"
}
# vim: syntax=spec
%global alt_pkg_name swaync
Name: {{{ git_repo_name }}}-git
Version: {{{ git_repo_release lead="$(git describe --tags --abbrev=0)" }}}
Release: {{{ echo -n "$(git rev-list --all --count)" }}}%{?dist}
Summary: Notification daemon with GTK GUI
Provides: desktop-notification-daemon
Provides: sway-notification-center = %{version}-%{release}
Provides: %{alt_pkg_name} = %{version}-%{release}
Provides: %{alt_pkg_name}-git = %{version}-%{release}
License: GPLv3
URL: https://github.com/ErikReider/SwayNotificationCenter
VCS: {{{ git_repo_vcs }}}
Source: {{{ git_repo_pack }}}
BuildRequires: meson >= 1.5.1
BuildRequires: vala >= 0.56
BuildRequires: scdoc
BuildRequires: pkgconfig(gtk4) >= 4.16
BuildRequires: pkgconfig(gtk4-layer-shell-0) >= 1.0.4
BuildRequires: pkgconfig(json-glib-1.0) >= 1.0
BuildRequires: pkgconfig(libadwaita-1) >= 1.6.5
BuildRequires: pkgconfig(glib-2.0) >= 2.50
BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.68
BuildRequires: pkgconfig(gee-0.8) >= 0.20
BuildRequires: pkgconfig(bash-completion)
BuildRequires: pkgconfig(fish)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(granite-7)
BuildRequires: systemd-devel
BuildRequires: systemd
BuildRequires: sassc
BuildRequires: blueprint-compiler >= 0.16
Requires: gvfs
Requires: libnotify
Requires: dbus
%{?systemd_requires}
%description
A simple notification daemon with a GTK gui for notifications and the control center
%package bash-completion
BuildArch: noarch
Summary: Bash completion files for %{name}
Provides: %{alt_pkg_name}-bash-completion = %{version}-%{release}
Requires: bash-completion
Requires: %{name} = %{version}-%{release}
%description bash-completion
This package installs Bash completion files for %{name}
%package zsh-completion
BuildArch: noarch
Summary: Zsh completion files for %{name}
Provides: %{alt_pkg_name}-zsh-completion = %{version}-%{release}
Requires: zsh
Requires: %{name} = %{version}-%{release}
%description zsh-completion
This package installs Zsh completion files for %{name}
%package fish-completion
BuildArch: noarch
Summary: Fish completion files for %{name}
Provides: %{alt_pkg_name}-fish-completion = %{version}-%{release}
Requires: fish
Requires: %{name} = %{version}-%{release}
%description fish-completion
This package installs Fish completion files for %{name}
%prep
{{{ git_repo_setup_macro }}}
%build
%meson
%meson_build
%install
%meson_install
%post
%systemd_user_post swaync.service
%preun
%systemd_user_preun swaync.service
%files
%doc README.md
%{_bindir}/swaync-client
%{_bindir}/swaync
%license COPYING
%config(noreplace) %{_sysconfdir}/xdg/swaync/configSchema.json
%config(noreplace) %{_sysconfdir}/xdg/swaync/config.json
%config(noreplace) %{_sysconfdir}/xdg/swaync/style.css
%{_userunitdir}/swaync.service
%{_datadir}/dbus-1/services/org.erikreider.swaync.service
%{_datadir}/dbus-1/services/org.erikreider.swaync.cc.service
%{_datadir}/glib-2.0/schemas/org.erikreider.swaync.gschema.xml
%{_mandir}/man1/swaync-client.1.gz
%{_mandir}/man1/swaync.1.gz
%{_mandir}/man5/swaync.5.gz
%files bash-completion
%{_datadir}/bash-completion/completions/swaync
%{_datadir}/bash-completion/completions/swaync-client
%files zsh-completion
%{_datadir}/zsh/site-functions/_swaync
%{_datadir}/zsh/site-functions/_swaync-client
%files fish-completion
%{_datadir}/fish/vendor_completions.d/swaync-client.fish
%{_datadir}/fish/vendor_completions.d/swaync.fish
# Changelog will be empty until you make first annotated Git tag.
%changelog
{{{ git_repo_changelog }}}
# vim: syntax=spec
%global alt_pkg_name swaync
Name: {{{ git_repo_name }}}
Version: 0.12.5
Release: 1%{?dist}
Summary: Notification daemon with GTK GUI
Provides: desktop-notification-daemon
Provides: sway-notification-center = %{version}-%{release}
Provides: %{alt_pkg_name} = %{version}-%{release}
License: GPLv3
URL: https://github.com/ErikReider/SwayNotificationCenter
VCS: {{{ git_repo_vcs }}}
Source: {{{ git_repo_pack }}}
BuildRequires: meson >= 1.5.1
BuildRequires: vala >= 0.56
BuildRequires: scdoc
BuildRequires: pkgconfig(gtk4) >= 4.16
BuildRequires: pkgconfig(gtk4-layer-shell-0) >= 1.0.4
BuildRequires: pkgconfig(json-glib-1.0) >= 1.0
BuildRequires: pkgconfig(libadwaita-1) >= 1.6.5
BuildRequires: pkgconfig(glib-2.0) >= 2.50
BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.68
BuildRequires: pkgconfig(gee-0.8) >= 0.20
BuildRequires: pkgconfig(bash-completion)
BuildRequires: pkgconfig(fish)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(granite-7)
BuildRequires: systemd-devel
BuildRequires: systemd
BuildRequires: sassc
BuildRequires: blueprint-compiler >= 0.16
Requires: gvfs
Requires: libnotify
Requires: dbus
%{?systemd_requires}
%description
A simple notification daemon with a GTK gui for notifications and the control center
%package bash-completion
BuildArch: noarch
Summary: Bash completion files for %{name}
Provides: %{alt_pkg_name}-bash-completion = %{version}-%{release}
Requires: bash-completion
Requires: %{name} = %{version}-%{release}
%description bash-completion
This package installs Bash completion files for %{name}
%package zsh-completion
BuildArch: noarch
Summary: Zsh completion files for %{name}
Provides: %{alt_pkg_name}-zsh-completion = %{version}-%{release}
Requires: zsh
Requires: %{name} = %{version}-%{release}
%description zsh-completion
This package installs Zsh completion files for %{name}
%package fish-completion
BuildArch: noarch
Summary: Fish completion files for %{name}
Provides: %{alt_pkg_name}-fish-completion = %{version}-%{release}
Requires: fish
Requires: %{name} = %{version}-%{release}
%description fish-completion
This package installs Fish completion files for %{name}
%prep
{{{ git_repo_setup_macro }}}
%build
%meson
%meson_build
%install
%meson_install
%post
%systemd_user_post swaync.service
%preun
%systemd_user_preun swaync.service
%files
%doc README.md
%{_bindir}/swaync-client
%{_bindir}/swaync
%license COPYING
%config(noreplace) %{_sysconfdir}/xdg/swaync/configSchema.json
%config(noreplace) %{_sysconfdir}/xdg/swaync/config.json
%config(noreplace) %{_sysconfdir}/xdg/swaync/style.css
%{_userunitdir}/swaync.service
%{_datadir}/dbus-1/services/org.erikreider.swaync.service
%{_datadir}/dbus-1/services/org.erikreider.swaync.cc.service
%{_datadir}/glib-2.0/schemas/org.erikreider.swaync.gschema.xml
%{_mandir}/man1/swaync-client.1.gz
%{_mandir}/man1/swaync.1.gz
%{_mandir}/man5/swaync.5.gz
%files bash-completion
%{_datadir}/bash-completion/completions/swaync
%{_datadir}/bash-completion/completions/swaync-client
%files zsh-completion
%{_datadir}/zsh/site-functions/_swaync
%{_datadir}/zsh/site-functions/_swaync-client
%files fish-completion
%{_datadir}/fish/vendor_completions.d/swaync-client.fish
%{_datadir}/fish/vendor_completions.d/swaync.fish
# Changelog will be empty until you make first annotated Git tag.
%changelog
{{{ git_repo_changelog }}}
_swaync() {
_ximper-shell-notification-center() {
local cur prev
_get_comp_words_by_ref cur prev
......@@ -44,4 +44,4 @@ _swaync() {
COMPREPLY+=($(compgen -c -- "$cur"))
fi
} && complete -F _swaync swaync
} && complete -F _ximper-shell-notification-center ximper-shell-notification-center
_swaync-client() {
_ximper-shell-notification-center-client() {
local cur prev
_get_comp_words_by_ref cur prev
......@@ -76,4 +76,4 @@ _swaync-client() {
COMPREPLY+=($(compgen -c -- "$cur"))
fi
} && complete -F _swaync-client swaync-client
} && complete -F _ximper-shell-notification-center-client ximper-shell-notification-center-client
complete -f -c swaync-client
complete -c swaync-client -s h -l help --description "Show help options"
complete -c swaync-client -s v -l version --description "Prints version"
complete -c swaync-client -s R -l reload-config --description "Reload the config file" -r
complete -c swaync-client -s rs -l reload-css --description "Reload the css file. Location change requires restart" -r
complete -c swaync-client -s t -l toggle-panel --description "Toggle the notification panel" -r
complete -c swaync-client -s op -l open-panel --description "Opens the notification panel" -r
complete -c swaync-client -s cp -l close-panel --description "Closes the notification panel" -r
complete -c swaync-client -s d -l toggle-dnd --description "Toggle and print the current dnd state" -r
complete -c swaync-client -s D -l get-dnd --description "Print the current dnd state" -r
complete -c swaync-client -s dn -l dnd-on --description "Turn dnd on and print the new dnd state" -r
complete -c swaync-client -s df -l dnd-off --description "Turn dnd off and print the new dnd state" -r
complete -c swaync-client -s I -l get-inhibited --description "Print if currently inhibited or not" -r
complete -c swaync-client -s In -l get-num-inhibitors --description "Print number of inhibitors" -r
complete -c swaync-client -s Ia -l inhibitor-add --description "Add an inhibitor" -r
complete -c swaync-client -s Ir -l inhibitor-remove --description "Remove an inhibitor" -r
complete -c swaync-client -s Ic -l inhibitors-clear --description "Clears all inhibitors" -r
complete -c swaync-client -s c -l count --description "Print the current notification count" -r
complete -c swaync-client -l hide-latest --description "Hides latest notification. Still shown in Control Center" -r
complete -c swaync-client -l hide-all --description "Hides all notifications. Still shown in Control Center" -r
complete -c swaync-client -l close-latest --description "Closes latest notification" -r
complete -c swaync-client -s C -l close-all --description "Closes all notifications" -r
complete -c swaync-client -s sw -l skip-wait --description "Doesn't wait when swaync hasn't been started" -r
complete -c swaync-client -s s -l subscribe --description "Subscribe to notification add and close events" -r
complete -c swaync-client -s swb -l subscribe-waybar --description "Subscribe to notification add and close events with waybar support. Read README for example" -r
complete -c swaync-client -l change-cc-monitor --description "Changes the preferred control center monitor (resets on config reload)" -r
complete -c swaync-client -l change-noti-monitor --description "Changes the preferred notification monitor (resets on config reload)" -r
complete -f -c swaync
complete -c swaync -s h -l help --description "Show help options"
complete -c swaync -s v -l version --description "Prints version"
complete -c swaync -s s -l style --description "Use a custom Stylesheet file" -r
complete -c swaync -s c -l config --description "Use a custom config file" -r
complete -c swaync -l replace --description "Replace the currently running instance of SwayNotificationCenter"
complete -c swaync -l skip-system-css --description "Skip trying to parse the packaged Stylesheet file. Useful for CSS debugging"
complete -c swaync -l custom-system-css --description "Pick a custom CSS file to use as the \"system\" CSS. Useful for CSS debugging" -r
complete -f -c ximper-shell-notification-center-client
complete -c ximper-shell-notification-center-client -s h -l help --description "Show help options"
complete -c ximper-shell-notification-center-client -s v -l version --description "Prints version"
complete -c ximper-shell-notification-center-client -s R -l reload-config --description "Reload the config file" -r
complete -c ximper-shell-notification-center-client -s rs -l reload-css --description "Reload the css file. Location change requires restart" -r
complete -c ximper-shell-notification-center-client -s t -l toggle-panel --description "Toggle the notification panel" -r
complete -c ximper-shell-notification-center-client -s op -l open-panel --description "Opens the notification panel" -r
complete -c ximper-shell-notification-center-client -s cp -l close-panel --description "Closes the notification panel" -r
complete -c ximper-shell-notification-center-client -s d -l toggle-dnd --description "Toggle and print the current dnd state" -r
complete -c ximper-shell-notification-center-client -s D -l get-dnd --description "Print the current dnd state" -r
complete -c ximper-shell-notification-center-client -s dn -l dnd-on --description "Turn dnd on and print the new dnd state" -r
complete -c ximper-shell-notification-center-client -s df -l dnd-off --description "Turn dnd off and print the new dnd state" -r
complete -c ximper-shell-notification-center-client -s I -l get-inhibited --description "Print if currently inhibited or not" -r
complete -c ximper-shell-notification-center-client -s In -l get-num-inhibitors --description "Print number of inhibitors" -r
complete -c ximper-shell-notification-center-client -s Ia -l inhibitor-add --description "Add an inhibitor" -r
complete -c ximper-shell-notification-center-client -s Ir -l inhibitor-remove --description "Remove an inhibitor" -r
complete -c ximper-shell-notification-center-client -s Ic -l inhibitors-clear --description "Clears all inhibitors" -r
complete -c ximper-shell-notification-center-client -s c -l count --description "Print the current notification count" -r
complete -c ximper-shell-notification-center-client -l hide-latest --description "Hides latest notification. Still shown in Control Center" -r
complete -c ximper-shell-notification-center-client -l hide-all --description "Hides all notifications. Still shown in Control Center" -r
complete -c ximper-shell-notification-center-client -l close-latest --description "Closes latest notification" -r
complete -c ximper-shell-notification-center-client -s C -l close-all --description "Closes all notifications" -r
complete -c ximper-shell-notification-center-client -s sw -l skip-wait --description "Doesn't wait when ximper-shell-notification-center hasn't been started" -r
complete -c ximper-shell-notification-center-client -s s -l subscribe --description "Subscribe to notification add and close events" -r
complete -c ximper-shell-notification-center-client -s swb -l subscribe-waybar --description "Subscribe to notification add and close events with waybar support. Read README for example" -r
complete -c ximper-shell-notification-center-client -l change-cc-monitor --description "Changes the preferred control center monitor (resets on config reload)" -r
complete -c ximper-shell-notification-center-client -l change-noti-monitor --description "Changes the preferred notification monitor (resets on config reload)" -r
complete -f -c ximper-shell-notification-center
complete -c ximper-shell-notification-center -s h -l help --description "Show help options"
complete -c ximper-shell-notification-center -s v -l version --description "Prints version"
complete -c ximper-shell-notification-center -s s -l style --description "Use a custom Stylesheet file" -r
complete -c ximper-shell-notification-center -s c -l config --description "Use a custom config file" -r
complete -c ximper-shell-notification-center -l replace --description "Replace the currently running instance of XimperShellNotificationCenter"
complete -c ximper-shell-notification-center -l skip-system-css --description "Skip trying to parse the packaged Stylesheet file. Useful for CSS debugging"
complete -c ximper-shell-notification-center -l custom-system-css --description "Pick a custom CSS file to use as the \"system\" CSS. Useful for CSS debugging" -r
#compdef swaync
#compdef ximper-shell-notification-center
_arguments -s \
'(-h --help)'{-h,--help}'[Show help options]' \
'(-v --version)'{-v,--version}'[Prints version]' \
'(-s --style)'{-s,--style}'[Use a custom Stylesheet file]:files:_files' \
'(-c --config)'{-c,--config}'[Use a custom config file]:files:_files' \
'( --replace)'--replace'[Replace the currently running instance of SwayNotificationCenter]' \
'( --replace)'--replace'[Replace the currently running instance of XimperShellNotificationCenter]' \
'( --skip-system-css)'--skip-system-css'[Skip trying to parse the packaged Stylesheet file. Useful for CSS debugging]' \
'( --custom-system-css)'--custom-system-css'[Pick a custom CSS file to use as the "system" CSS. Useful for CSS debugging]:files:_files' \
#compdef swaync-client
#compdef ximper-shell-notification-center-client
_arguments -s \
'(-h --help)'{-h,--help}'[Show help options]' \
......@@ -22,7 +22,7 @@ _arguments -s \
'(--hide-all)'--hide-all'[Hides all notifications. Still shown in Control Center]' \
'(--close-latest)'--close-latest'[Closes latest notification]' \
'(-C --close-all)'{-C,--close-all}'[Closes all notifications]' \
'(-sw --skip-wait)'{-sw,--skip-wait}"[Doesn't wait when swaync hasn't been started]" \
'(-sw --skip-wait)'{-sw,--skip-wait}"[Doesn't wait when ximper-shell-notification-center hasn't been started]" \
'(-s --subscribe)'{-s,--subscribe}'[Subscribe to notification add and close events]' \
'(-swb --subscribe-waybar)'{-swb,--subscribe-waybar}'[Subscribe to notification add and close events with waybar support. Read README for example]' \
'(--change-cc-monitor)'--change-cc-monitor'[Changes the preferred control center monitor (resets on config reload)]' \
......
# GSchema
compile_schemas = find_program('glib-compile-schemas', required: true)
install_data(
'org.erikreider.swaync.gschema.xml',
'ru.ximperlinux.shell.NotificationCenter.gschema.xml',
install_dir: join_paths(datadir, 'glib-2.0/schemas'),
)
......@@ -13,7 +13,7 @@ test(
if get_option('buildtype') != 'release'
app_resources += custom_target(
'gschemas',
input: 'org.erikreider.swaync.gschema.xml',
input: 'ru.ximperlinux.shell.NotificationCenter.gschema.xml',
output: 'gschemas.compiled',
command: [
compile_schemas,
......@@ -42,8 +42,8 @@ blueprints = custom_target(
)
app_resources += gnome.compile_resources(
'sway_notification_center-resources',
'sway_notification_center.gresource.xml',
'ximper_shell_notification_center-resources',
'ximper_shell_notification_center.gresource.xml',
dependencies: [style_files, blueprints],
c_name: 'sway_notification_center',
c_name: 'ximper_shell_notification_center',
)
<?xml version="1.0" encoding="UTF-8"?>
<schemalist gettext-domain="swaync">
<schema id="org.erikreider.swaync" path="/org/erikreider/swaync/">
<schemalist gettext-domain="ximper-shell-notification-center">
<schema id="ru.ximperlinux.shell.NotificationCenter" path="/ru/ximperlinux/shell/NotificationCenter/">
<key name="dnd-state" type="b">
<default>false</default>
<summary>The current do not disturb state</summary>
......
using Gtk 4.0;
template $SwayNotificationCenterControlCenter: ApplicationWindow {
template $XimperShellNotificationCenterControlCenter: ApplicationWindow {
name: "control-center-window";
styles [
......
using Gtk 4.0;
template $SwayNotificationCenterWidgetsMprisMprisPlayer: $Underlay {
template $XimperShellNotificationCenterWidgetsMprisMprisPlayer: $Underlay {
overflow: hidden;
valign: fill;
hexpand: true;
......
using Gtk 4.0;
using Adw 1;
template $SwayNotificationCenterNotification: Adw.Bin {
template $XimperShellNotificationCenterNotification: Adw.Bin {
hexpand: true;
styles [
......@@ -176,7 +176,7 @@ template $SwayNotificationCenterNotification: Adw.Bin {
}
[overlay]
$SwayNotificationCenterNotificationCloseButton close_button {}
$XimperShellNotificationCenterNotificationCloseButton close_button {}
};
};
}
......
using Gtk 4.0;
template $SwayNotificationCenterNotificationWindow: Gtk.ApplicationWindow {
template $XimperShellNotificationCenterNotificationWindow: Gtk.ApplicationWindow {
styles [
"floating-notifications",
]
......
using Gtk 4.0;
template $SwayNotificationCenterWidgetsNotifications: $SwayNotificationCenterWidgetsBaseWidget {
template $XimperShellNotificationCenterWidgetsNotifications: $XimperShellNotificationCenterWidgetsBaseWidget {
orientation: vertical;
overflow: hidden;
......
<?xml version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/org/erikreider/swaync">
<file preprocess="xml-stripblanks">icons/scalable/actions/swaync-collapse-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/swaync-close-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/swaync-up-small-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/swaync-down-small-symbolic.svg</file>
<gresource prefix="/ru/ximperlinux/shell/NotificationCenter">
<file preprocess="xml-stripblanks">icons/scalable/actions/ximper-shell-notification-center-collapse-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/ximper-shell-notification-center-close-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/ximper-shell-notification-center-up-small-symbolic.svg</file>
<file preprocess="xml-stripblanks">icons/scalable/actions/ximper-shell-notification-center-down-small-symbolic.svg</file>
<file preprocess="xml-stripblanks">ui/notification_window.ui</file>
<file preprocess="xml-stripblanks">ui/notification.ui</file>
......
swaync-client(1)
ximper-shell-notification-center-client(1)
# NAME
swaync-client - Client executable
ximper-shell-notification-center-client - Client executable
# USAGE
*swaync-client* [option]
*ximper-shell-notification-center-client* [option]
# OPTIONS
......@@ -77,7 +77,7 @@ swaync-client - Client executable
Invokes the action [ACTION_INDEX] (or 0) of the latest notification
*-sw, --skip-wait*
Doesn't wait when swaync hasn't been started
Doesn't wait when ximper-shell-notification-center hasn't been started
*-s, --subscribe*
Subscribe to notification add and close events
......
swaync(1)
ximper-shell-notification-center(1)
# NAME
swaync - A simple notification daemon with a GTK gui for notifications and the control center
ximper-shell-notification-center - A simple notification daemon with a GTK gui for notifications and the control center
# USAGE
*swaync* [option]
*ximper-shell-notification-center* [option]
# OPTIONS
......@@ -20,7 +20,7 @@ swaync - A simple notification daemon with a GTK gui for notifications and the c
Use a custom Stylesheet file
*--replace*
Replace the currently running instance of SwayNotificationCenter
Replace the currently running instance of XimperShellNotificationCenter
*--skip-system-css*
Skip trying to parse the packaged Stylesheet file. Useful for CSS debugging
......@@ -57,12 +57,12 @@ swaync - A simple notification daemon with a GTK gui for notifications and the c
# CONFIGURATION
The main config file is located in */etc/xdg/swaync/config.json*. Copy it over
to your *~/.config/swaync/* folder to customize without needing root access.
The main config file is located in */etc/xdg/ximper-shell/notification-center/config.json*. Copy it over
to your *~/.config/ximper-shell/notification-center/* folder to customize without needing root access.
To reload the config, you'll need to run *swaync-client --reload-config*
To reload the config, you'll need to run *ximper-shell-notification-center-client --reload-config*
For information on the config file format, see *swaync*(5)
For information on the config file format, see *ximper-shell-notification-center*(5)
# Scripting
......@@ -76,7 +76,7 @@ Scripting rules and logic:
. If a notification doesn't include one of the properties, that property will be skipped
Notification information can be printed into a terminal by running
*G_MESSAGES_DEBUG=all swaync* (when a notification appears).
*G_MESSAGES_DEBUG=all ximper-shell-notification-center* (when a notification appears).
Config properties:
......@@ -104,7 +104,7 @@ Config properties:
// This script will only run when Spotify sends a notification containing
// that exact summary and body
"example-script": {
"exec": "~/.config/swaync/myRickRollScript.sh",
"exec": "~/.config/ximper-shell/notification-center/myRickRollScript.sh",
"app-name": "Spotify"
"summary": "Never Gonna Give You Up",
"body": "Rick Astley - Whenever You Need Somebody"
......@@ -135,20 +135,20 @@ Waybar config
"tooltip": false,
"format": "{icon}",
"format-icons": {
"notification": "<span foreground='red'><sup></sup></span>",
"none": "",
"dnd-notification": "<span foreground='red'><sup></sup></span>",
"dnd-none": "",
"inhibited-notification": "<span foreground='red'><sup></sup></span>",
"inhibited-none": "",
"dnd-inhibited-notification": "<span foreground='red'><sup></sup></span>",
"dnd-inhibited-none": ""
"notification": "<span foreground='red'><sup></sup></span>",
"none": "",
"dnd-notification": "<span foreground='red'><sup></sup></span>",
"dnd-none": "",
"inhibited-notification": "<span foreground='red'><sup></sup></span>",
"inhibited-none": "",
"dnd-inhibited-notification": "<span foreground='red'><sup></sup></span>",
"dnd-inhibited-none": ""
},
"return-type": "json",
"exec-if": "which swaync-client",
"exec": "swaync-client -swb",
"on-click": "swaync-client -t -sw",
"on-click-right": "swaync-client -d -sw",
"exec-if": "which ximper-shell-notification-center-client",
"exec": "ximper-shell-notification-center-client -swb",
"on-click": "ximper-shell-notification-center-client -t -sw",
"on-click-right": "ximper-shell-notification-center-client -d -sw",
"escape": true
},
```
......
swaync(5)
ximper-shell-notification-center(5)
# NAME
swaync - Configuration file
ximper-shell-notification-center - Configuration file
# CONFIGURATION
......@@ -38,7 +38,7 @@ config file to be able to detect config errors
type: bool ++
default: true ++
description: Wether or not the windows should be opened as layer-shell ++
surfaces. Note: Requires swaync restart to apply
surfaces. Note: Requires ximper-shell-notification-center restart to apply
*cssPriority* ++
type: string ++
......@@ -226,7 +226,7 @@ config file to be able to detect config errors
type: string ++
optional: true (needs at least one *matcher*) ++
description: Matches the actions identifier. Can be found by ++
reading the output of swaync when run with the ++
reading the output of ximper-shell-notification-center when run with the ++
*G_MESSAGES_DEBUG=all* environment variable.++
*text-matcher*++
type: string ++
......@@ -556,7 +556,7 @@ config file to be able to detect config errors
default: "normal" ++
description: Type of the button ++
Toggle buttons receive the '.active' css class and an env ++
variable "SWAYNC_TOGGLE_STATE" is set. See example usage in the ++
variable "XSNC_TOGGLE_STATE" is set. See example usage in the ++
default config.json ++
enum: ["normal", "toggle"] ++
update-command: ++
......@@ -596,7 +596,7 @@ config file to be able to detect config errors
default: "normal" ++
description: Type of the button ++
Toggle buttons receive the '.active' css class and an env ++
variable "SWAYNC_TOGGLE_STATE" is set. See example usage in the ++
variable "XSNC_TOGGLE_STATE" is set. See example usage in the ++
default config.json ++
enum: ["normal", "toggle"] ++
active: ++
......@@ -896,17 +896,17 @@ config file to be able to detect config errors
You can also use these environment variables in your script:
```
$SWAYNC_BODY="Notification body content"
$SWAYNC_DESKTOP_ENTRY="Desktop entry"
$SWAYNC_URGENCY="Notification urgency"
$SWAYNC_TIME="Notification time"
$SWAYNC_APP_NAME="Notification app name"
$SWAYNC_CATEGORY="SwayNC notification category"
$SWAYNC_REPLACES_ID="ID of notification to replace"
$SWAYNC_ID="SwayNC notification ID"
$SWAYNC_SUMMARY="Notification summary"
$SWAYNC_HINT_[NAME]="Value of the hint [NAME]"
$SWAYNC_SOUND_NAME="The name of the requested sound"
$SWAYNC_SOUND_FILE="The file path of the requested sound"
$XSNC_BODY="Notification body content"
$XSNC_DESKTOP_ENTRY="Desktop entry"
$XSNC_URGENCY="Notification urgency"
$XSNC_TIME="Notification time"
$XSNC_APP_NAME="Notification app name"
$XSNC_CATEGORY="Notification category"
$XSNC_REPLACES_ID="ID of notification to replace"
$XSNC_ID="Notification ID"
$XSNC_SUMMARY="Notification summary"
$XSNC_HINT_[NAME]="Value of the hint [NAME]"
$XSNC_SOUND_NAME="The name of the requested sound"
$XSNC_SOUND_FILE="The file path of the requested sound"
```
#END scripting
project('sway-notificaton-center', ['c', 'vala'],
project('ximper-shell-notification-center', ['c', 'vala'],
version: '0.12.5',
meson_version: '>= 0.60.0',
default_options: [ 'warning_level=2' ],
......@@ -18,7 +18,7 @@ gnome = import('gnome')
app_resources = []
config_path = join_paths(get_option('sysconfdir'), 'xdg', 'swaync')
config_path = join_paths(get_option('sysconfdir'), 'xdg', 'ximper-shell', 'notification-center')
datadir = get_option('datadir')
libdir = get_option('libdir')
......@@ -37,14 +37,14 @@ conf_data.set('bindir', join_paths(get_option('prefix'), get_option('bindir')))
# D-Bus Notification service
configure_file(
configuration: conf_data,
input: 'services/dbus/org.erikreider.swaync.service.in',
input: 'services/dbus/ru.ximperlinux.shell.NotificationCenter.service.in',
output: '@BASENAME@',
install_dir: datadir + '/dbus-1/services'
)
# D-Bus Control Center service
configure_file(
configuration: conf_data,
input: 'services/dbus/org.erikreider.swaync.cc.service.in',
input: 'services/dbus/ru.ximperlinux.shell.NotificationCenter.cc.service.in',
output: '@BASENAME@',
install_dir: datadir + '/dbus-1/services'
)
......@@ -60,7 +60,7 @@ if get_option('systemd-service')
configure_file(
configuration: conf_data,
input: 'services/systemd/swaync.service.in',
input: 'services/systemd/ximper-shell-notification-center.service.in',
output: '@BASENAME@',
install_dir: systemd_service_install_dir
)
......@@ -69,8 +69,8 @@ endif
# Zsh completion
if get_option('zsh-completions')
zsh_files = files(
'completions/zsh/_swaync',
'completions/zsh/_swaync-client',
'completions/zsh/_ximper-shell-notification-center',
'completions/zsh/_ximper-shell-notification-center-client',
)
zsh_install_dir = join_paths(datadir, 'zsh', 'site-functions')
......@@ -81,8 +81,8 @@ endif
bash_comp = dependency('bash-completion', required: false)
if get_option('bash-completions')
bash_files = files(
'completions/bash/swaync',
'completions/bash/swaync-client',
'completions/bash/ximper-shell-notification-center',
'completions/bash/ximper-shell-notification-center-client',
)
if bash_comp.found()
......@@ -101,8 +101,8 @@ endif
fish_comp = dependency('fish', required: false)
if get_option('fish-completions')
fish_files = files(
'completions/fish/swaync.fish',
'completions/fish/swaync-client.fish',
'completions/fish/ximper-shell-notification-center.fish',
'completions/fish/ximper-shell-notification-center-client.fish',
)
if fish_comp.found()
......@@ -138,9 +138,9 @@ if get_option('man-pages')
mandir = get_option('mandir')
man_files = [
'swaync.1.scd',
'swaync.5.scd',
'swaync-client.1.scd',
'ximper-shell-notification-center.1.scd',
'ximper-shell-notification-center.5.scd',
'ximper-shell-notification-center-client.1.scd',
]
foreach filename : man_files
......
[D-BUS Service]
Name=org.erikreider.swaync.cc
Exec=@bindir@/swaync
SystemdService=swaync.service
[D-BUS Service]
Name=ru.ximperlinux.shell.NotificationCenter
Exec=@bindir@/ximper-shell-notification-center
SystemdService=ximper-shell-notification-center.service
[D-BUS Service]
Name=org.freedesktop.Notifications
Exec=@bindir@/swaync
SystemdService=swaync.service
Exec=@bindir@/ximper-shell-notification-center
SystemdService=ximper-shell-notification-center.service
[Unit]
Description=Swaync notification daemon
Documentation=https://github.com/ErikReider/SwayNotificationCenter
Description=Ximper Shell Notification Center daemon
Documentation=https://github.com/niceos2/ximper-shell-notification-center
PartOf=graphical-session.target
After=graphical-session.target
# ConditionEnvironment requires systemd v247 to work correctly
......@@ -9,8 +9,8 @@ ConditionEnvironment=WAYLAND_DISPLAY
[Service]
Type=dbus
BusName=org.freedesktop.Notifications
ExecStart=@bindir@/swaync
ExecReload=@bindir@/swaync-client --reload-config ; @bindir@/swaync-client --reload-css
ExecStart=@bindir@/ximper-shell-notification-center
ExecReload=@bindir@/ximper-shell-notification-center-client --reload-config ; @bindir@/ximper-shell-notification-center-client --reload-css
Restart=on-failure
[Install]
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
public class BlankWindow : Gtk.ApplicationWindow {
public unowned Gdk.Monitor monitor { get; private set; }
......@@ -28,7 +28,7 @@ namespace SwayNotificationCenter {
blank_window_down = false;
if (blank_window_in) {
try {
swaync_daemon.set_visibility (false);
ximper_shell_notification_center_daemon.set_visibility (false);
} catch (Error e) {
stderr.printf ("ControlCenter BlankWindow Click Error: %s\n",
e.message);
......@@ -61,13 +61,13 @@ namespace SwayNotificationCenter {
if (!GtkLayerShell.is_supported ()) {
stderr.printf ("GTKLAYERSHELL IS NOT SUPPORTED!\n");
stderr.printf ("Swaync only works on Wayland!\n");
stderr.printf ("Ximper Shell Notification Center only works on Wayland!\n");
stderr.printf ("If running waylans session, try running:\n");
stderr.printf ("\tGDK_BACKEND=wayland swaync\n");
stderr.printf ("\tGDK_BACKEND=wayland ximper-shell-notification-center\n");
Process.exit (1);
}
GtkLayerShell.init_for_window (this);
GtkLayerShell.set_namespace (this, "swaync-control-center");
GtkLayerShell.set_namespace (this, "ximper-shell-notification-center");
GtkLayerShell.set_monitor (this, monitor);
GtkLayerShell.set_anchor (this, GtkLayerShell.Edge.TOP, true);
......
public struct SwayncDaemonData {
public struct XimperShellNotificationCenterDaemonData {
public bool dnd;
public bool cc_open;
public uint count;
public bool inhibited;
}
[DBus (name = "org.erikreider.swaync.cc")]
[DBus (name = "ru.ximperlinux.shell.NotificationCenter")]
interface CcDaemon : Object {
public abstract bool reload_css () throws Error;
......@@ -37,7 +37,7 @@ interface CcDaemon : Object {
public abstract bool set_noti_window_monitor (string monitor) throws DBusError, IOError;
[DBus (name = "GetSubscribeData")]
public abstract SwayncDaemonData get_subscribe_data () throws Error;
public abstract XimperShellNotificationCenterDaemonData get_subscribe_data () throws Error;
public signal void subscribe_v2 (uint count, bool dnd, bool cc_open, bool inhibited);
......@@ -79,7 +79,7 @@ private void print_help (string[] args) {
print (" -C, \t --close-all \t\t\t Closes all notifications\n");
print (" -a, \t --action [ACTION_INDEX]\t " +
"Invokes the action [ACTION_INDEX] of the latest notification\n");
print (" -sw, \t --skip-wait \t\t\t Doesn't wait when swaync hasn't been started\n");
print (" -sw, \t --skip-wait \t\t\t Doesn't wait when ximper-shell-notification-center hasn't been started\n");
print (" -s, \t --subscribe \t\t\t Subscribe to notification add and close events\n");
print (" -swb, --subscribe-waybar \t\t Subscribe to notification add and close events "
+ "with waybar support. Read README for example\n");
......@@ -98,7 +98,7 @@ private void on_subscribe (uint count, bool dnd, bool cc_open, bool inhibited) {
private void print_subscribe () {
try {
SwayncDaemonData data = cc_daemon.get_subscribe_data ();
XimperShellNotificationCenterDaemonData data = cc_daemon.get_subscribe_data ();
on_subscribe (data.count, data.dnd, data.cc_open, data.inhibited);
} catch (Error e) {
on_subscribe (0, false, false, false);
......@@ -127,7 +127,7 @@ private void on_subscribe_waybar (uint count, bool dnd, bool cc_open, bool inhib
private void print_subscribe_waybar () {
try {
SwayncDaemonData data = cc_daemon.get_subscribe_data ();
XimperShellNotificationCenterDaemonData data = cc_daemon.get_subscribe_data ();
on_subscribe_waybar (data.count, data.dnd, data.cc_open, data.inhibited);
} catch (Error e) {
on_subscribe_waybar (0, false, false, false);
......@@ -269,7 +269,7 @@ public int command_line (ref string[] args, bool skip_wait) {
var loop = new MainLoop ();
Bus.watch_name (
BusType.SESSION,
"org.erikreider.swaync.cc",
"ru.ximperlinux.shell.NotificationCenter",
BusNameWatcherFlags.NONE,
print_subscribe,
print_subscribe);
......@@ -281,7 +281,7 @@ public int command_line (ref string[] args, bool skip_wait) {
var loop = new MainLoop ();
Bus.watch_name (
BusType.SESSION,
"org.erikreider.swaync.cc",
"ru.ximperlinux.shell.NotificationCenter",
BusNameWatcherFlags.NONE,
print_subscribe_waybar,
print_subscribe_waybar);
......@@ -337,8 +337,8 @@ int try_connect (owned string[] args) {
try {
cc_daemon = Bus.get_proxy_sync (
BusType.SESSION,
"org.erikreider.swaync.cc",
"/org/erikreider/swaync/cc");
"ru.ximperlinux.shell.NotificationCenter",
"/ru/ximperlinux/shell/NotificationCenter");
bool skip_wait = "--skip-wait" in args || "-sw" in args;
bool one_arg = true;
......@@ -373,7 +373,7 @@ public int main (string[] args) {
MainLoop loop = new MainLoop ();
Bus.watch_name (
BusType.SESSION,
"org.erikreider.swaync.cc",
"ru.ximperlinux.shell.NotificationCenter",
BusNameWatcherFlags.NONE,
(conn, name, name_owner) => {
if (try_connect (args[1 :]) == 0) {
......
......@@ -92,7 +92,7 @@
"label": "直",
"type": "toggle",
"active": true,
"command": "sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'",
"command": "sh -c '[[ $XSNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'",
"update-command": "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'"
}
]
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
public enum PositionX {
RIGHT, LEFT, CENTER, NONE;
}
......@@ -447,22 +447,22 @@ namespace SwayNotificationCenter {
public async bool run_script (NotifyParams param, out string msg) {
string[] spawn_env = {};
spawn_env += "SWAYNC_APP_NAME=%s".printf (param.app_name);
spawn_env += "SWAYNC_SUMMARY=%s".printf (param.summary);
spawn_env += "SWAYNC_BODY=%s".printf (param.body);
spawn_env += "SWAYNC_URGENCY=%s".printf (param.urgency.to_string ());
spawn_env += "SWAYNC_CATEGORY=%s".printf (param.category);
spawn_env += "SWAYNC_SOUND_NAME=%s".printf (param.sound_name);
spawn_env += "SWAYNC_SOUND_FILE=%s".printf (param.sound_file);
spawn_env += "SWAYNC_ID=%s".printf (param.applied_id.to_string ());
spawn_env += "SWAYNC_REPLACES_ID=%s".printf (param.replaces_id.to_string ());
spawn_env += "SWAYNC_TIME=%s".printf (param.time.to_string ());
spawn_env += "SWAYNC_DESKTOP_ENTRY=%s".printf (param.desktop_entry ?? "");
spawn_env += "XSNC_APP_NAME=%s".printf (param.app_name);
spawn_env += "XSNC_SUMMARY=%s".printf (param.summary);
spawn_env += "XSNC_BODY=%s".printf (param.body);
spawn_env += "XSNC_URGENCY=%s".printf (param.urgency.to_string ());
spawn_env += "XSNC_CATEGORY=%s".printf (param.category);
spawn_env += "XSNC_SOUND_NAME=%s".printf (param.sound_name);
spawn_env += "XSNC_SOUND_FILE=%s".printf (param.sound_file);
spawn_env += "XSNC_ID=%s".printf (param.applied_id.to_string ());
spawn_env += "XSNC_REPLACES_ID=%s".printf (param.replaces_id.to_string ());
spawn_env += "XSNC_TIME=%s".printf (param.time.to_string ());
spawn_env += "XSNC_DESKTOP_ENTRY=%s".printf (param.desktop_entry ?? "");
foreach (string hint in param.hints.get_keys ()) {
if (hint.contains ("image") || hint.contains ("icon")) {
continue;
}
spawn_env += "SWAYNC_HINT_%s=%s".printf (
spawn_env += "XSNC_HINT_%s=%s".printf (
hint.up ().replace ("-", "_"),
param.hints[hint].print (false));
}
......@@ -1365,7 +1365,7 @@ namespace SwayNotificationCenter {
/**
* Writes and replaces settings with the new settings in `path`. If
* `path` is "null", the default user accessible config will be used
* ("~/.config/swaync/config.json")
* ("~/.config/ximper-shell/notification-center/config.json")
*/
private bool write_to_file (owned string ?path = null) {
try {
......@@ -1374,7 +1374,7 @@ namespace SwayNotificationCenter {
string dir_path = Path.build_path (
Path.DIR_SEPARATOR.to_string (),
Environment.get_user_config_dir (),
"swaync");
"ximper-shell", "notification-center");
path = Path.build_path (Path.DIR_SEPARATOR.to_string (),
dir_path, "config.json");
var dir = File.new_for_path (dir_path);
......
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "SwayNotificationCenter JSON schema",
"title": "XimperShellNotificationCenter JSON schema",
"type": "object",
"additionalProperties": false,
"properties": {
......@@ -27,7 +27,7 @@
},
"layer-shell": {
"type": "boolean",
"description": "Whether or not the windows should be opened as layer-shell surfaces. Note: Requires swaync restart to apply",
"description": "Whether or not the windows should be opened as layer-shell surfaces. Note: Requires ximper-shell-notification-center restart to apply",
"default": true
},
"layer-shell-cover-screen": {
......@@ -306,7 +306,7 @@
},
"id-matcher": {
"type": "string",
"description": "Matches the action identifier. Can be found by reading the output of swaync when run with the `G_MESSAGES_DEBUG=all` environment variable."
"description": "Matches the action identifier. Can be found by reading the output of ximper-shell-notification-center when run with the `G_MESSAGES_DEBUG=all` environment variable."
},
"text-matcher": {
"type": "string",
......@@ -556,7 +556,7 @@
},
"type": {
"type": "string",
"description": "Type of the button; toggle buttons receive the .active css class and an env variable 'SWAYNC_TOGGLE_STATE' is set. See example in the default config.json",
"description": "Type of the button; toggle buttons receive the .active css class and an env variable 'XSNC_TOGGLE_STATE' is set. See example in the default config.json",
"default": "normal",
"enum": ["normal", "toggle"]
},
......
namespace SwayNotificationCenter {
[GtkTemplate (ui = "/org/erikreider/swaync/ui/control_center.ui")]
namespace XimperShellNotificationCenter {
[GtkTemplate (ui = "/ru/ximperlinux/shell/NotificationCenter/ui/control_center.ui")]
public class ControlCenter : Gtk.ApplicationWindow {
[GtkChild]
unowned Gtk.ScrolledWindow window;
......@@ -27,13 +27,13 @@ namespace SwayNotificationCenter {
if (app.use_layer_shell) {
if (!GtkLayerShell.is_supported ()) {
stderr.printf ("GTKLAYERSHELL IS NOT SUPPORTED!\n");
stderr.printf ("Swaync only works on Wayland!\n");
stderr.printf ("Ximper Shell Notification Center only works on Wayland!\n");
stderr.printf ("If running wayland session, try running:\n");
stderr.printf ("\tGDK_BACKEND=wayland swaync\n");
stderr.printf ("\tGDK_BACKEND=wayland ximper-shell-notification-center\n");
Process.exit (1);
}
GtkLayerShell.init_for_window (this);
GtkLayerShell.set_namespace (this, "swaync-control-center");
GtkLayerShell.set_namespace (this, "ximper-shell-notification-center");
set_anchor ();
}
......@@ -158,7 +158,7 @@ namespace SwayNotificationCenter {
switch (Gdk.keyval_name (keyval)) {
case "D":
try {
swaync_daemon.toggle_dnd ();
ximper_shell_notification_center_daemon.toggle_dnd ();
} catch (Error e) {
critical ("Error: %s\n", e.message);
}
......@@ -393,7 +393,7 @@ namespace SwayNotificationCenter {
} else {
remove_css_class ("open");
}
swaync_daemon.emit_subscribe ();
ximper_shell_notification_center_daemon.emit_subscribe ();
}
public inline bool get_visibility () {
......
using GLib;
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class Backlight : BaseWidget {
public override string widget_name {
get {
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
class BacklightUtil {
[DBus (name = "org.freedesktop.login1.Session")]
interface Login1 : Object {
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public struct DdcDisplayInfo {
int dispno;
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public abstract class BaseWidget : Gtk.Box {
public abstract string widget_name { get; }
......
using GLib;
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class ButtonsGrid : BaseWidget {
public override string widget_name {
get {
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class Dnd : BaseWidget {
public override string widget_name {
get {
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public static BaseWidget ?get_widget_from_key (owned string key, out bool is_notifications) {
is_notifications = false;
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class Inhibitors : BaseWidget {
public override string widget_name {
get {
......@@ -17,8 +17,8 @@ namespace SwayNotificationCenter.Widgets {
public Inhibitors (string suffix) {
base (suffix);
swaync_daemon.inhibited_changed.connect ((length) => {
if (!swaync_daemon.inhibited) {
ximper_shell_notification_center_daemon.inhibited_changed.connect ((length) => {
if (!ximper_shell_notification_center_daemon.inhibited) {
hide ();
return;
}
......@@ -57,7 +57,7 @@ namespace SwayNotificationCenter.Widgets {
clear_all_button = new Gtk.Button.with_label (button_text);
clear_all_button.clicked.connect (() => {
try {
swaync_daemon.clear_inhibitors ();
ximper_shell_notification_center_daemon.clear_inhibitors ();
} catch (Error e) {
critical ("Error: %s\n", e.message);
}
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class Label : BaseWidget {
public override string widget_name {
get {
......
using GLib;
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public enum MenuType {
BUTTONS,
MENU,
......
namespace SwayNotificationCenter.Widgets.Mpris {
namespace XimperShellNotificationCenter.Widgets.Mpris {
public class MprisSource : Object {
public MprisMediaPlayer media_player { private set; get; }
private DbusPropChange props;
......
namespace SwayNotificationCenter.Widgets.Mpris {
namespace XimperShellNotificationCenter.Widgets.Mpris {
public enum AlbumArtState {
ALWAYS, WHEN_AVAILABLE, NEVER;
......
namespace SwayNotificationCenter.Widgets.Mpris {
[GtkTemplate (ui = "/org/erikreider/swaync/ui/mpris_player.ui")]
namespace XimperShellNotificationCenter.Widgets.Mpris {
[GtkTemplate (ui = "/ru/ximperlinux/shell/NotificationCenter/ui/mpris_player.ui")]
public class MprisPlayer : Underlay {
[GtkChild]
public unowned Gtk.Label title;
......
namespace SwayNotificationCenter.Widgets {
[GtkTemplate (ui = "/org/erikreider/swaync/ui/notifications_widget.ui")]
namespace XimperShellNotificationCenter.Widgets {
[GtkTemplate (ui = "/ru/ximperlinux/shell/NotificationCenter/ui/notifications_widget.ui")]
public class Notifications : BaseWidget {
public override string widget_name {
get {
......@@ -322,7 +322,7 @@ namespace SwayNotificationCenter.Widgets {
break;
case "D" :
try {
swaync_daemon.toggle_dnd ();
ximper_shell_notification_center_daemon.toggle_dnd ();
} catch (Error e) {
critical ("Error: %s\n", e.message);
}
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
[DBus (name = "net.hadess.PowerProfiles")]
interface PowerProfilesProxy : Object {
public abstract string active_profile { owned get; set; }
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
class ToggleButton : Gtk.ToggleButton {
private string command;
private string update_command;
......@@ -20,7 +20,7 @@ namespace SwayNotificationCenter.Widgets {
private async void on_toggle () {
string msg = "";
string[] env_additions = { "SWAYNC_TOGGLE_STATE=" + this.active.to_string () };
string[] env_additions = { "XSNC_TOGGLE_STATE=" + this.active.to_string () };
yield Functions.execute_command (this.command, env_additions, out msg);
}
......@@ -29,7 +29,7 @@ namespace SwayNotificationCenter.Widgets {
return;
}
string msg = "";
string[] env_additions = { "SWAYNC_TOGGLE_STATE=" + this.active.to_string () };
string[] env_additions = { "XSNC_TOGGLE_STATE=" + this.active.to_string () };
yield Functions.execute_command (this.update_command, env_additions, out msg);
try {
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class Slider : BaseWidget {
public override string widget_name {
get {
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class Title : BaseWidget {
public override string widget_name {
get {
......@@ -50,7 +50,7 @@ namespace SwayNotificationCenter.Widgets {
});
clear_all_button.set_sensitive (!notifications_widget.is_empty ());
swaync_daemon.subscribe_v2.connect ((count) => {
ximper_shell_notification_center_daemon.subscribe_v2.connect ((count) => {
clear_all_button.set_sensitive (count > 0);
});
clear_all_button.set_can_focus (false);
......
......@@ -2,7 +2,7 @@
using Gee;
using PulseAudio;
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
/**
* Loosely based off of Elementary OS switchboard-plug-sound
* https://github.com/elementary/switchboard-plug-sound
......
......@@ -2,7 +2,7 @@
using Gee;
using PulseAudio;
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class PulseCardProfile : Object {
public string name;
public string description;
......
......@@ -2,7 +2,7 @@
using Gee;
using PulseAudio;
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class PulseSinkInput : Object {
/** The card index: ex. `Sink Input #227` */
public uint32 index;
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class SinkInputRow : Gtk.ListBoxRow {
Gtk.Box container;
Gtk.Image icon = new Gtk.Image ();
......
namespace SwayNotificationCenter.Widgets {
namespace XimperShellNotificationCenter.Widgets {
public class Volume : BaseWidget {
public override string widget_name {
get {
......@@ -179,13 +179,13 @@ namespace SwayNotificationCenter.Widgets {
private void set_button_icon () {
if (!reveal_button.active) {
if (expand_label == null) {
reveal_button.set_icon_name ("swaync-up-small-symbolic");
reveal_button.set_icon_name ("ximper-shell-notification-center-up-small-symbolic");
} else {
reveal_button.set_label (expand_label);
}
} else {
if (collapse_label == null) {
reveal_button.set_icon_name ("swaync-down-small-symbolic");
reveal_button.set_icon_name ("ximper-shell-notification-center-down-small-symbolic");
} else {
reveal_button.set_label (collapse_label);
}
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
public class Functions {
const Gsk.ScalingFilter SCALING_FILTER = Gsk.ScalingFilter.NEAREST;
......@@ -13,7 +13,7 @@ namespace SwayNotificationCenter {
// Init resources
var theme = Gtk.IconTheme.get_for_display (Gdk.Display.get_default ());
theme.add_resource_path ("/org/erikreider/swaync/icons");
theme.add_resource_path ("/ru/ximperlinux/shell/NotificationCenter/icons");
}
public static string uri_to_path (owned string uri) {
......@@ -137,15 +137,15 @@ namespace SwayNotificationCenter {
if (!only_system) {
paths += Path.build_path (Path.DIR_SEPARATOR.to_string (),
Environment.get_user_config_dir (),
"swaync/style.css");
"ximper-shell/notification-center/style.css");
}
foreach (var path in Environment.get_system_config_dirs ()) {
paths += Path.build_path (Path.DIR_SEPARATOR.to_string (),
path, "swaync/style.css");
path, "ximper-shell/notification-center/style.css");
}
// Fallback location. Specified in postinstall.py. Mostly for Debian
paths += "/usr/local/etc/xdg/swaync/style.css";
paths += "/usr/local/etc/xdg/ximper-shell/notification-center/style.css";
info ("Looking for CSS file in these directories:\n\t- %s",
string.joinv ("\n\t- ", paths));
......@@ -181,13 +181,13 @@ namespace SwayNotificationCenter {
}
paths += Path.build_path (Path.DIR_SEPARATOR.to_string (),
Environment.get_user_config_dir (),
"swaync/config.json");
"ximper-shell/notification-center/config.json");
foreach (var path in Environment.get_system_config_dirs ()) {
paths += Path.build_path (Path.DIR_SEPARATOR.to_string (),
path, "swaync/config.json");
path, "ximper-shell/notification-center/config.json");
}
// Fallback location. Specified in postinstall.py. Mostly for Debian
paths += "/usr/local/etc/xdg/swaync/config.json";
paths += "/usr/local/etc/xdg/ximper-shell/notification-center/config.json";
info ("Looking for config file in these directories:\n\t- %s",
string.joinv ("\n\t- ", paths));
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
static NotiDaemon noti_daemon;
static SwayncDaemon swaync_daemon;
static XimperShellNotificationCenterDaemon ximper_shell_notification_center_daemon;
static Widgets.Notifications notifications_widget;
static ControlCenter control_center;
static NotificationWindow floating_notifications;
static unowned ListModel ?monitors = null;
static Swaync app;
static NotificationCenter app;
static Settings self_settings;
static HashTable<string, unowned Gdk.PixbufFormat> pixbuf_mime_types;
......@@ -30,11 +30,11 @@ namespace SwayNotificationCenter {
}
}
public class Swaync : Gtk.Application {
public class NotificationCenter : Gtk.Application {
private bool activated = false;
private Array<BlankWindow> blank_windows = new Array<BlankWindow> ();
// Only set on swaync start due to some limitations of GtkLayerShell
// Only set on start due to some limitations of GtkLayerShell
public bool use_layer_shell = true;
public bool has_layer_on_demand = true;
......@@ -42,9 +42,9 @@ namespace SwayNotificationCenter {
public signal void config_reload (ConfigModel ?old_config, ConfigModel new_config);
public Swaync (bool replace) {
public NotificationCenter (bool replace) {
Object (
application_id : "org.erikreider.swaync",
application_id : "ru.ximperlinux.shell.NotificationCenter",
flags: ApplicationFlags.DEFAULT_FLAGS
| ApplicationFlags.ALLOW_REPLACEMENT
| (replace ? ApplicationFlags.REPLACE : 0)
......@@ -53,7 +53,7 @@ namespace SwayNotificationCenter {
try {
register ();
if (get_is_remote ()) {
printerr ("An instance of SwayNotificationCenter is already running!\n");
printerr ("An instance of Ximper Shell Notification Center is already running!\n");
Process.exit (1);
}
} catch (Error e) {
......@@ -103,7 +103,7 @@ namespace SwayNotificationCenter {
}
noti_daemon = new NotiDaemon ();
swaync_daemon = new SwayncDaemon ();
ximper_shell_notification_center_daemon = new XimperShellNotificationCenterDaemon ();
// Notification Daemon
Bus.own_name_on_connection (conn,
"org.freedesktop.Notifications",
......@@ -125,20 +125,20 @@ namespace SwayNotificationCenter {
});
yield;
// Swaync Daemon
// Ximper Shell Notification Center Daemon
Bus.own_name_on_connection (conn,
"org.erikreider.swaync.cc",
"ru.ximperlinux.shell.NotificationCenter",
BusNameOwnerFlags.NONE,
() => {
try {
conn.register_object ("/org/erikreider/swaync/cc", swaync_daemon);
conn.register_object ("/ru/ximperlinux/shell/NotificationCenter", ximper_shell_notification_center_daemon);
init.callback ();
} catch (Error e) {
error ("Could not register CC service: \"%s\"", e.message);
}
},
() => {
error ("Could not acquire swaync name!");
error ("Could not acquire Ximper Shell Notification Center name!");
});
yield;
......@@ -159,10 +159,10 @@ namespace SwayNotificationCenter {
});
}
swaync_daemon.emit_subscribe ();
ximper_shell_notification_center_daemon.emit_subscribe ();
});
// Update on start
swaync_daemon.emit_subscribe ();
ximper_shell_notification_center_daemon.emit_subscribe ();
monitors.items_changed.connect (monitors_changed);
Idle.add_once (() => monitors_changed (0, 0, monitors.get_n_items ()));
......@@ -189,9 +189,9 @@ namespace SwayNotificationCenter {
// Set preferred output
try {
swaync_daemon.set_cc_monitor (
ximper_shell_notification_center_daemon.set_cc_monitor (
ConfigModel.instance.control_center_preferred_output);
swaync_daemon.set_noti_window_monitor (
ximper_shell_notification_center_daemon.set_noti_window_monitor (
ConfigModel.instance.notification_window_preferred_output);
} catch (Error e) {
critical (e.message);
......@@ -287,14 +287,14 @@ namespace SwayNotificationCenter {
Adw.init ();
Functions.init ();
self_settings = new Settings ("org.erikreider.swaync");
self_settings = new Settings ("ru.ximperlinux.shell.NotificationCenter");
app = new Swaync (replace);
app = new NotificationCenter (replace);
return app.run ();
}
private static void print_startup_info () {
print ("Starting SwayNotificationCenter version %s\n", Constants.VERSION);
print ("Starting Ximper Shell Notification Center version %s\n", Constants.VERSION);
// Log distro information
string info_paths[5] = {
......
......@@ -12,7 +12,7 @@ if git.found()
)
endif
endif
version = 'swaync @0@'.format(version)
version = 'ximper-shell-notification-center @0@'.format(version)
const_config_data = configuration_data()
const_config_data.set_quoted('VERSION', version)
const_config_data.set_quoted('VERSION_NUM', meson.project_version())
......@@ -63,7 +63,7 @@ app_sources = [
'iterHelpers/iterListBoxController.vala',
'underlay/underlay.vala',
'configModel/configModel.vala',
'swayncDaemon/swayncDaemon.vala',
'ximperShellNotificationCenterDaemon/ximperShellNotificationCenterDaemon.vala',
'notiDaemon/notiDaemon.vala',
'notiModel/notiModel.vala',
'notificationWindow/notificationWindow.vala',
......@@ -137,14 +137,14 @@ args = [
'--target-glib=2.82',
]
executable('swaync',
executable('ximper-shell-notification-center',
[ app_sources, app_resources ],
vala_args: args,
dependencies: app_deps,
install: true,
)
executable('swaync-client',
executable('ximper-shell-notification-center-client',
['client.vala', constants],
vala_args: args,
dependencies: app_deps,
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
/** Return true to remove notification, false to skip */
public delegate bool notification_filter_func (Notification notification);
......@@ -46,7 +46,7 @@ namespace SwayNotificationCenter {
notifications_widget.remove_notification (id);
floating_notifications.remove_notification (id);
swaync_daemon.emit_subscribe ();
ximper_shell_notification_center_daemon.emit_subscribe ();
}
internal inline void request_dismiss_notification (NotifyParams param,
......@@ -66,7 +66,7 @@ namespace SwayNotificationCenter {
}
notifications_widget.remove_group (group_name_id);
swaync_daemon.emit_subscribe ();
ximper_shell_notification_center_daemon.emit_subscribe ();
}
internal void request_dismiss_all_notifications (ClosedReasons reason) {
......@@ -79,7 +79,7 @@ namespace SwayNotificationCenter {
remove_all_floating_notifications (false, null);
notifications_widget.remove_all_notifications (true);
swaync_daemon.emit_subscribe ();
ximper_shell_notification_center_daemon.emit_subscribe ();
}
/** Hides all floating notifications (closes transient) */
......@@ -221,8 +221,8 @@ namespace SwayNotificationCenter {
hide_floating_notification_reasons += "Control Center is visible";
}
// Don't show the notification window if dnd or inhibited
bool bypass_dnd = param.urgency == UrgencyLevels.CRITICAL || param.swaync_bypass_dnd;
if (!bypass_dnd && (dnd || swaync_daemon.inhibited)) {
bool bypass_dnd = param.urgency == UrgencyLevels.CRITICAL || param.ximper_shell_notification_center_bypass_dnd;
if (!bypass_dnd && (dnd || ximper_shell_notification_center_daemon.inhibited)) {
hide_floating_notification_reasons +=
"Do Not Disturb is enabled or an Inhibitor is running";
}
......@@ -286,11 +286,11 @@ namespace SwayNotificationCenter {
notification_ids.add (id);
}
swaync_daemon.emit_subscribe ();
ximper_shell_notification_center_daemon.emit_subscribe ();
}
#if WANT_SCRIPTING
if (param.swaync_no_script) {
if (param.ximper_shell_notification_center_no_script) {
debug ("Skipped scripts for this notification\n");
return id;
}
......@@ -310,7 +310,7 @@ namespace SwayNotificationCenter {
*/
internal void run_scripts (NotifyParams param, ScriptRunOnType run_on) {
#if WANT_SCRIPTING
if (param.swaync_no_script) {
if (param.ximper_shell_notification_center_no_script) {
debug ("Skipped action scripts for this notification\n");
return;
}
......@@ -346,13 +346,13 @@ namespace SwayNotificationCenter {
str_hash,
str_equal);
// Disable scripts for this notification
_hints.insert ("SWAYNC_NO_SCRIPT", true);
_hints.insert ("XSNC_NO_SCRIPT", true);
_hints.insert ("urgency",
UrgencyLevels.CRITICAL.to_byte ());
string _summary = "Failed to run script: %s".printf (key);
string _body = "<b>Output:</b> " + error_msg;
this.new_notification ("SwayNotificationCenter",
this.new_notification ("XimperShellNotificationCenter",
0,
"dialog-error",
_summary,
......@@ -397,8 +397,8 @@ namespace SwayNotificationCenter {
out string version,
out string spec_version)
throws DBusError, IOError {
name = "SwayNotificationCenter";
vendor = "ErikReider";
name = "XimperShellNotificationCenter";
vendor = "XimperLinux";
version = Constants.VERSIONNUM;
spec_version = "1.3";
}
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
public enum ClosedReasons {
EXPIRED = 1,
DISMISSED = 2,
......@@ -153,10 +153,10 @@ namespace SwayNotificationCenter {
// Custom hints
/** Disables scripting for notification */
public bool swaync_no_script { get; private set; }
public bool ximper_shell_notification_center_no_script { get; private set; }
/** Always show the notification, regardless of dnd/inhibit state */
public bool swaync_bypass_dnd { get; private set; }
public bool ximper_shell_notification_center_bypass_dnd { get; private set; }
public Array<Action> actions { get; private set; }
......@@ -247,18 +247,18 @@ namespace SwayNotificationCenter {
foreach (var hint in hints.get_keys ()) {
Variant hint_value = hints[hint];
switch (hint) {
case "SWAYNC_NO_SCRIPT" :
case "XSNC_NO_SCRIPT" :
if (hint_value.is_of_type (VariantType.INT32)) {
swaync_no_script = hint_value.get_int32 () == 1;
ximper_shell_notification_center_no_script = hint_value.get_int32 () == 1;
} else if (hint_value.is_of_type (VariantType.BOOLEAN)) {
swaync_no_script = hint_value.get_boolean ();
ximper_shell_notification_center_no_script = hint_value.get_boolean ();
}
break;
case "SWAYNC_BYPASS_DND" :
case "XSNC_BYPASS_DND" :
if (hint_value.is_of_type (VariantType.INT32)) {
swaync_bypass_dnd = hint_value.get_int32 () == 1;
ximper_shell_notification_center_bypass_dnd = hint_value.get_int32 () == 1;
} else if (hint_value.is_of_type (VariantType.BOOLEAN)) {
swaync_bypass_dnd = hint_value.get_boolean ();
ximper_shell_notification_center_bypass_dnd = hint_value.get_boolean ();
}
break;
case "value" :
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
public enum NotificationType { CONTROL_CENTER, FLOATING }
[GtkTemplate (ui = "/org/erikreider/swaync/ui/notification.ui")]
[GtkTemplate (ui = "/ru/ximperlinux/shell/NotificationCenter/ui/notification.ui")]
public class Notification : Adw.Bin {
[GtkChild]
unowned Gtk.Revealer revealer;
......@@ -473,7 +473,7 @@ namespace SwayNotificationCenter {
noti_daemon.ActionInvoked (param.applied_id, action.identifier);
if (ConfigModel.instance.hide_on_action) {
try {
swaync_daemon.set_visibility (false);
ximper_shell_notification_center_daemon.set_visibility (false);
} catch (Error e) {
critical ("Error: %s\n", e.message);
}
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
public class NotificationCloseButton : Adw.Bin {
Gtk.Revealer revealer;
Gtk.Button button;
......@@ -17,7 +17,7 @@ namespace SwayNotificationCenter {
});
set_child (revealer);
button = new Gtk.Button.from_icon_name ("swaync-close-symbolic") {
button = new Gtk.Button.from_icon_name ("ximper-shell-notification-center-close-symbolic") {
has_frame = false,
halign = Gtk.Align.CENTER,
valign = Gtk.Align.CENTER,
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
private class ExpandableGroup : Gtk.Widget {
const int NUM_STACKED_NOTIFICATIONS = 3;
const int COLLAPSED_NOTIFICATION_OFFSET = 8;
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
public enum NotificationGroupState {
EMPTY = 0,
SINLGE = 1,
......@@ -85,7 +85,7 @@ namespace SwayNotificationCenter {
// Collapse button
Gtk.Button collapse_button = new Gtk.Button.from_icon_name (
"swaync-collapse-symbolic");
"ximper-shell-notification-center-collapse-symbolic");
collapse_button.add_css_class ("circular");
collapse_button.add_css_class ("notification-group-collapse-button");
collapse_button.set_halign (Gtk.Align.END);
......@@ -98,7 +98,7 @@ namespace SwayNotificationCenter {
// Close all button
Gtk.Button close_all_button = new Gtk.Button.from_icon_name (
"swaync-close-symbolic");
"ximper-shell-notification-center-close-symbolic");
close_all_button.add_css_class ("circular");
close_all_button.add_css_class ("notification-group-close-all-button");
close_all_button.set_halign (Gtk.Align.END);
......
namespace SwayNotificationCenter {
[GtkTemplate (ui = "/org/erikreider/swaync/ui/notification_window.ui")]
namespace XimperShellNotificationCenter {
[GtkTemplate (ui = "/ru/ximperlinux/shell/NotificationCenter/ui/notification_window.ui")]
public class NotificationWindow : Gtk.ApplicationWindow {
[GtkChild]
unowned Gtk.ScrolledWindow scrolled_window;
......@@ -19,13 +19,13 @@ namespace SwayNotificationCenter {
if (app.use_layer_shell) {
if (!GtkLayerShell.is_supported ()) {
stderr.printf ("GTKLAYERSHELL IS NOT SUPPORTED!\n");
stderr.printf ("Swaync only works on Wayland!\n");
stderr.printf ("Ximper Shell Notification Center only works on Wayland!\n");
stderr.printf ("If running waylans session, try running:\n");
stderr.printf ("\tGDK_BACKEND=wayland swaync\n");
stderr.printf ("\tGDK_BACKEND=wayland ximper-shell-notification-center\n");
Process.exit (1);
}
GtkLayerShell.init_for_window (this);
GtkLayerShell.set_namespace (this, "swaync-notification-window");
GtkLayerShell.set_namespace (this, "ximper-shell-notification-window");
}
this.set_anchor ();
......@@ -166,11 +166,11 @@ namespace SwayNotificationCenter {
}
switch (ConfigModel.instance.positionY) {
default:
case SwayNotificationCenter.PositionY.TOP:
case SwayNotificationCenter.PositionY.CENTER:
case XimperShellNotificationCenter.PositionY.TOP:
case XimperShellNotificationCenter.PositionY.CENTER:
list.direction = AnimatedListDirection.TOP_TO_BOTTOM;
break;
case SwayNotificationCenter.PositionY.BOTTOM:
case XimperShellNotificationCenter.PositionY.BOTTOM:
list.direction = AnimatedListDirection.BOTTOM_TO_TOP;
break;
}
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
/** A regular GLib HashTable but preserves the order of inserted keys and values */
public class OrderedHashTable<T> {
private HashTable<string, T> hash_table;
......
using SwayNotificationCenter;
using XimperShellNotificationCenter;
using XDG.Activation;
public class XdgActivationHelper : Object {
......
namespace SwayNotificationCenter {
namespace XimperShellNotificationCenter {
public struct Data {
public bool dnd;
public bool cc_open;
......@@ -6,13 +6,13 @@ namespace SwayNotificationCenter {
public bool inhibited;
}
[DBus (name = "org.erikreider.swaync.cc")]
public class SwayncDaemon : Object {
[DBus (name = "ru.ximperlinux.shell.NotificationCenter")]
public class XimperShellNotificationCenterDaemon : Object {
private GenericSet<string> inhibitors = new GenericSet<string> (str_hash, str_equal);
public bool inhibited { get; private set; default = false; }
internal signal void inhibited_changed (uint length);
public SwayncDaemon () {
public XimperShellNotificationCenterDaemon () {
subscribe_v2.connect ((count, dnd, visible, inhibited) => {
debug ("Emitted subscribe_v2: %u, %s, %s, %s",
count, dnd.to_string (), visible.to_string (), inhibited.to_string ());
......@@ -21,7 +21,7 @@ namespace SwayNotificationCenter {
internal inline void emit_subscribe () {
try {
swaync_daemon.subscribe_v2 (noti_daemon.n_notifications,
ximper_shell_notification_center_daemon.subscribe_v2 (noti_daemon.n_notifications,
get_dnd (),
get_visibility (),
inhibited);
......@@ -51,7 +51,7 @@ namespace SwayNotificationCenter {
* Called when Dot Not Disturb state changes, notification gets
* added/removed, Control Center opens, and when inhibitor state changes
*/
[Version (deprecated = true, replacement = "SwayncDaemon.subscribe_v2")]
[Version (deprecated = true, replacement = "XimperShellNotificationCenterDaemon.subscribe_v2")]
public signal void subscribe (uint count, bool dnd, bool cc_open);
/** Reloads the CSS file */
......@@ -72,7 +72,7 @@ namespace SwayNotificationCenter {
* Changes `name` to `value`.
*
* If `write_to_file` is True, it will write to the users
* config file (`~/.config/swaync/config.json`) or `path`
* config file (`~/.config/ximper-shell/notification-center/config.json`) or `path`
* if it's a valid path. Otherwise the changes will only
* apply to the current instance.
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment