diff --git a/modules/sway/config/config.d/custom-keybindings.conf b/modules/sway/config/config.d/custom-keybindings.conf
index 4eb1b79a..05d7df75 100644
--- a/modules/sway/config/config.d/custom-keybindings.conf
+++ b/modules/sway/config/config.d/custom-keybindings.conf
@@ -23,7 +23,11 @@ bindsym $mod+F5 exec $term -e 'mocp -C $XDG_CONFIG_DIR/mocp/config'
bindsym $mod+Shift+m exec mu
bindsym $mod+Shift+h exec xdg-open /usr/share/doc/manjaro/i3_help.pdf
-# Screenshofts
+# Notifications with swaynotificationcenter
+# Toggle control center
+bindsym $mod+Shift+n exec swaync-client -t -sw
+
+# Screenshots
bindsym $mod+Ctrl+p exec grim -g "$(slurp -d -b \#ffffff11)" ~/Pictures/Screenshots/$(date +%Y%m%d_%Hh%Mm%Ss)_grim.png
bindsym $mod+Shift+p exec grim ~/Pictures/Screenshots/$(date +%Y%m%d_%Hh%Mm%Ss)_grim.png
bindsym $mod+Ctrl+f exec "( pkill flameshot || true && flameshot & ) && ( sleep 0.5s && flameshot gui )"
diff --git a/modules/sway/default.nix b/modules/sway/default.nix
index 35013dd2..b327dfdf 100644
--- a/modules/sway/default.nix
+++ b/modules/sway/default.nix
@@ -60,6 +60,7 @@ in
kanshi
mako
slurp
+ swaynotificationcenter
swayidle
swaylock
swaybg
@@ -85,7 +86,7 @@ in
programs.waybar.enable = true;
#programs.waybar.systemd.enable = true;
- systemd.user.services.mako = import ./mako.service.nix pkgs;
+ systemd.user.services.swaynotificationcenter = import ./swaynotificationcenter.service.nix pkgs;
systemd.user.services.sway = import ./sway.service.nix pkgs;
systemd.user.services.swayidle = import ./swayidle.service.nix pkgs;
systemd.user.services.xsettingsd = import ./xsettingsd.service.nix pkgs;
diff --git a/modules/sway/mako.service.nix b/modules/sway/mako.service.nix
deleted file mode 100644
index 190b986d..00000000
--- a/modules/sway/mako.service.nix
+++ /dev/null
@@ -1,20 +0,0 @@
-pkgs:
-{
- Unit = {
- Description = "Lightweight Wayland notification daemon";
- Documentation = [ "man:mako(1)" ];
- BindsTo = [ "sway-session.target" ];
- After = [ "sway-session.target" ];
- # ConditionEnvironment requires systemd v247 to work correctly
- ConditionEnvironment = [ "WAYLAND_DISPLAY" ];
- };
- Service = {
- Type = "dbus";
- BusName = "org.freedesktop.Notifications";
- ExecStart = "${pkgs.mako}/bin/mako";
- ExecReload = "${pkgs.mako}/bin/makoctl reload";
- };
- Install = {
- WantedBy = [ "sway-session.target" ];
- };
-}
diff --git a/modules/sway/swaynotificationcenter.service.nix b/modules/sway/swaynotificationcenter.service.nix
new file mode 100644
index 00000000..a0f57faf
--- /dev/null
+++ b/modules/sway/swaynotificationcenter.service.nix
@@ -0,0 +1,22 @@
+pkgs:
+{
+ Unit = {
+ Description = "Swaync notification daemon";
+ Documentation = "https://github.com/ErikReider/SwayNotificationCenter";
+ BindsTo = [ "sway-session.target" ];
+ After = [ "sway-session.target" ];
+ Requisite = [ "graphical-session.target" ];
+ # ConditionEnvironment requires systemd v247 to work correctly
+ ConditionEnvironment = [ "WAYLAND_DISPLAY" ];
+ };
+ Service = {
+ Type = "dbus";
+ BusName = "org.freedesktop.Notifications";
+ ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync";
+ ExecReload = "${pkgs.swaynotificationcenter}/bin/swaync-client --reload-config ; ${pkgs.swaynotificationcenter}/bin/swaync-client --reload-css";
+ Restart = "on-failure";
+ };
+ Install = {
+ WantedBy = [ "sway-session.target" ];
+ };
+}
diff --git a/modules/sway/waybar.service.nix b/modules/sway/waybar.service.nix
index ee5e8938..7f89a684 100644
--- a/modules/sway/waybar.service.nix
+++ b/modules/sway/waybar.service.nix
@@ -10,7 +10,7 @@ pkgs:
Service = {
Type = "dbus";
- Environment = "PATH=${pkgs.bash}/bin:${pkgs.pavucontrol}/bin";
+ Environment = "PATH=${pkgs.bash}/bin:${pkgs.pavucontrol}/bin:${pkgs.swaynotificationcenter}/bin";
BusName = "fr.arouillard.waybar";
ExecStart = "${pkgs.waybar}/bin/waybar";
};
diff --git a/overlays/overrides.nix b/overlays/overrides.nix
index c58f144e..1931552e 100644
--- a/overlays/overrides.nix
+++ b/overlays/overrides.nix
@@ -32,7 +32,7 @@ channels: final: prev: {
;
inherit (channels.master)
- electron_17
+ swaynotificationcenter
;
haskellPackages = prev.haskellPackages.override
diff --git a/profiles/base-user/.config/swaync/config.json b/profiles/base-user/.config/swaync/config.json
new file mode 100644
index 00000000..06f7d024
--- /dev/null
+++ b/profiles/base-user/.config/swaync/config.json
@@ -0,0 +1,12 @@
+{
+ "positionX": "right",
+ "positionY": "top",
+ "timeout": 10,
+ "timeout-low": 5,
+ "timeout-critical": 0,
+ "notification-window-width": 500,
+ "keyboard-shortcuts": true,
+ "image-visibility": "always",
+ "transition-time": 200,
+ "hide-on-clear": false
+}
diff --git a/profiles/base-user/.config/swaync/style.css b/profiles/base-user/.config/swaync/style.css
new file mode 100644
index 00000000..2e33e7eb
--- /dev/null
+++ b/profiles/base-user/.config/swaync/style.css
@@ -0,0 +1,149 @@
+/*
+ * vim: ft=less
+ */
+
+@define-color border-color rgb(7, 7, 7);
+@define-color bg rgb(58, 58, 58);
+@define-color bg-hover rgb(68, 68, 68);
+@define-color bg-focus rgba(68, 68, 68, 0.6);
+@define-color bg-selected rgb(0, 128, 255);
+
+.notification-row {
+ outline: none;
+}
+.notification-row:focus,
+.notification-row:hover {
+ background: @bg-focus;
+}
+
+.notification {
+ border-radius: 10px;
+ margin: 6px 12px;
+ box-shadow: 0px 2px 4px 2px rgba(0, 0, 0, 0.3);
+ padding: 0;
+}
+
+.notification-content {
+ background: transparent;
+ padding: 6px;
+ border-radius: 10px;
+}
+
+.close-button {
+ background: black;
+ color: white;
+ text-shadow: none;
+ padding: 0 2px;
+ box-shadow: 0px 2px 4px 2px rgba(0, 0, 0, 0.3);
+ border-radius: 100%;
+}
+.close-button:hover {
+ background: rgb(30, 30, 30);
+ transition: all 0.15s ease-in-out;
+}
+
+.notification-default-action,
+.notification-action {
+ padding: 4px;
+ margin: 0;
+ box-shadow: none;
+ background: @bg;
+ border: 1px solid @border-color;
+}
+
+.notification-default-action:hover,
+.notification-action:hover {
+ background: @bg-hover;
+}
+
+.notification-default-action {
+ border-radius: 10px;
+}
+
+/* When alternative actions are visible */
+.notification-default-action:not(:only-child) {
+ border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+}
+
+.notification-action {
+ border-radius: 0px;
+ border-top: none;
+ border-right: none;
+}
+
+/* add bottom border radius to eliminate clipping */
+.notification-action:first-child {
+ border-bottom-left-radius: 10px;
+}
+.notification-action:last-child {
+ border-bottom-right-radius: 10px;
+ border-right: 1px solid @border-color;
+}
+
+.image {
+}
+
+.body-image {
+ margin-top: 6px;
+ background-color: white;
+ border-radius: 10px;
+}
+
+.summary {
+ color: white;
+ text-shadow: none;
+}
+
+.time {
+ color: white;
+ text-shadow: none;
+}
+
+.body {
+ background: transparent;
+ color: white;
+ text-shadow: none;
+}
+
+.top-action-title {
+ color: white;
+ text-shadow: none;
+}
+
+.control-center-clear-all {
+ color: white;
+ text-shadow: none;
+ background: @bg;
+ border: 1px solid @border-color;
+ box-shadow: none;
+ border-radius: 10px;
+}
+.control-center-clear-all:hover {
+ background: @bg-hover;
+}
+
+.control-center-dnd {
+ border-radius: 10px;
+ background: @bg;
+ border: 1px solid @border-color;
+ box-shadow: none;
+}
+
+.control-center-dnd:checked {
+ background: @bg-selected;
+}
+.control-center-dnd slider {
+ background: @bg-hover;
+}
+
+.control-center {
+ background: rgba(0, 0, 0, 0.7);
+}
+.control-center-list {
+ background: transparent;
+}
+
+.floating-notifications {
+ background: transparent;
+}
diff --git a/profiles/base-user/.config/waybar/config b/profiles/base-user/.config/waybar/config
index 53de2bda..6af58739 100644
--- a/profiles/base-user/.config/waybar/config
+++ b/profiles/base-user/.config/waybar/config
@@ -5,7 +5,16 @@
"height": 26, // Waybar height
"modules-left": ["sway/workspaces", "sway/mode"],
//"modules-center": ["mpd"],
- "modules-right": ["sway/language", "pulseaudio", "network", "idle_inhibitor", "battery", "clock", "tray"],
+ "modules-right": [
+ "sway/language",
+ "custom/notification",
+ "pulseaudio",
+ "network",
+ "idle_inhibitor",
+ "battery",
+ "clock",
+ "tray"
+ ],
"sway/workspaces": {
"disable-scroll": true
},
@@ -98,5 +107,21 @@
},
"tooltip-format": "MPD (connected)",
"tooltip-format-disconnected": "MPD (disconnected)"
- }
+ },
+ "custom/notification": {
+ "tooltip": false,
+ "format": " {icon}",
+ "format-icons": {
+ "notification": "",
+ "none": "",
+ "dnd-notification": "",
+ "dnd-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",
+ "escape": true
+ },
}
diff --git a/profiles/base-user/.config/waybar/style.css b/profiles/base-user/.config/waybar/style.css
index 4b31521c..3f482be2 100644
--- a/profiles/base-user/.config/waybar/style.css
+++ b/profiles/base-user/.config/waybar/style.css
@@ -14,7 +14,6 @@ window#waybar {
color: @base04;
}
-
#workspaces button {
font-size: 14px;
box-shadow: none;
@@ -23,7 +22,6 @@ window#waybar {
color: @base04;
}
-
#workspaces button.focused {
color: #f85e84;
color: @base07;
@@ -53,26 +51,29 @@ window#waybar {
#battery.critical {
color: @base07;
}
+
#battery.charging {
color: @base0B;
}
+
#battery.full {
margin: 0px 0px 0px 0px;
}
-
#network {
border-top: 1px solid transparent;
}
+
#network.disconnected {
margin: 0px 0px 0px 0px;
color: rgba(75, 81, 98, 0);
}
-
#pulseaudio.muted {
margin: 0px 0px 0px 0px;
color: rgba(75, 81, 98, 0);
}
-
+#custom-notification {
+ font-family: "NotoSansMono Nerd Font";
+}
diff --git a/profiles/base-user/.gitignore b/profiles/base-user/.gitignore
index cd8e2eed..cd94a941 100644
--- a/profiles/base-user/.gitignore
+++ b/profiles/base-user/.gitignore
@@ -81,6 +81,10 @@
!/.config/waybar/config
!/.config/waybar/style.css
+!/.config/swaync
+!/.config/swaync/config.json
+!/.config/swaync/style.css
+
!/.config/mutt
!/.config/mutt/muttrc
!/.config/mutt/base16.muttrc
diff --git a/profiles/base-user/home.nix b/profiles/base-user/home.nix
index c1a999f1..8903b28d 100644
--- a/profiles/base-user/home.nix
+++ b/profiles/base-user/home.nix
@@ -53,6 +53,8 @@ in
xdg.configFile."vifm/vifmrc".source = ./.config/vifm/vifmrc;
xdg.configFile."vifm/colors/base16.vifm".source = ./.config/vifm/colors/base16.vifm;
xdg.configFile."libinput-gestures.conf".source = ./.config/libinput-gestures.conf;
+ xdg.configFile."swaync/config.json".source = ./.config/swaync/config.json;
+ xdg.configFile."swaync/style.css".source = ./.config/swaync/style.css;
xdg.configFile."waybar/config".source = ./.config/waybar/config;
xdg.configFile."waybar/style.css".source = ./.config/waybar/style.css;
xdg.configFile."waybar/colorscheme.css".source = ./.config/waybar/colorscheme.css;