From b1c27d9541f525d84e42379f3018bc3b410cb1ba Mon Sep 17 00:00:00 2001 From: Konstantin Nazarov Date: Sat, 2 Nov 2024 22:05:34 +0000 Subject: [PATCH] Add tray indicator for email, upgrade to latest nixpkgs --- configuration.nix | 19 +++++++++++----- emacs.el | 4 ++++ flake.lock | 46 +++++++++++++++++++------------------- switch.sh | 1 + waybar_maildir.sh | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 98 insertions(+), 28 deletions(-) create mode 100755 waybar_maildir.sh diff --git a/configuration.nix b/configuration.nix index 7c23a53..94f36c2 100644 --- a/configuration.nix +++ b/configuration.nix @@ -97,7 +97,7 @@ in { # Mainly to access SMB shares on local network services.gvfs = { enable = true; - package = lib.mkForce pkgs.gnome3.gvfs; + package = lib.mkForce pkgs.gnome.gvfs; }; # Configure keymap in X11 @@ -160,8 +160,9 @@ in { gthumb unzip somafm-cli - yubikey-manager - yubikey-manager-qt + # these packages have some problem with installation now + #yubikey-manager + #yubikey-manager-qt ripgrep file zoom-us @@ -172,7 +173,6 @@ in { mullvad-vpn mullvad usbutils - wf-recorder xournalpp dnsutils graphviz @@ -190,6 +190,7 @@ in { solc kdenlive kooha # screen capture + inotify-tools # ---------- # mainly needed for npm which decided to play hardball @@ -217,6 +218,8 @@ in { nodejs networkmanagerapplet + + qpwgraph ]; services.blueman.enable = true; @@ -721,8 +724,14 @@ in { height = 24; modules-left = [ "sway/workspaces" "sway/mode" ]; modules-center = [ "sway/window" ]; - modules-right = [ "idle_inhibitor" "battery" "clock" "tray" ]; + modules-right = [ "custom/maildir" "idle_inhibitor" "battery" "clock" "tray" ]; clock.format = "{:%Y-%m-%d %H:%M}"; + "custom/maildir" = { + exec = "${./waybar_maildir.sh} /home/knazarov/Maildir/personal/Inbox/new knazarov"; + format = "  {} "; + return-type = "json"; + }; + battery = { states = { # good = 95; diff --git a/emacs.el b/emacs.el index a9f4048..4870244 100755 --- a/emacs.el +++ b/emacs.el @@ -222,6 +222,7 @@ (set-face-attribute 'mode-line nil :box nil) (set-face-attribute 'mode-line-inactive nil :box nil) +(setq mode-line-end-spaces nil) ;; -------- Font -------- @@ -273,6 +274,7 @@ Intended for `after-make-frame-functions'." (use-package which-key :ensure t :defer 2 + :diminish which-key-mode :config (which-key-mode) (which-key-setup-side-window-bottom) @@ -376,6 +378,7 @@ Intended for `after-make-frame-functions'." (evil-set-undo-system 'undo-redo) (evil-define-key 'normal 'global (kbd "f") 'find-file) + (evil-define-key 'normal 'global (kbd "d") 'dired-jump) (evil-define-key 'normal 'global (kbd "b") 'switch-to-buffer) (evil-define-key 'normal 'global (kbd "r") 'consult-ripgrep) @@ -562,6 +565,7 @@ Intended for `after-make-frame-functions'." :ensure t :config (global-org-modern-mode) + (setq org-modern-star 'replace) ) (setq org-modules '(org-w3m org-bbdb org-bibtex org-docview diff --git a/flake.lock b/flake.lock index 1f44aaf..326fcbd 100755 --- a/flake.lock +++ b/flake.lock @@ -11,11 +11,11 @@ ] }, "locked": { - "lastModified": 1725815541, - "narHash": "sha256-wcuqVnH4Y5UY25MX5Vc9HwBKLlD+wDjQjcqmTuBjx/w=", + "lastModified": 1730478096, + "narHash": "sha256-nTH9eT3FDq2BkB+RccSq2UHMWLHbeM6LZX+enhQXvdw=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "618b2f8393cc31d275d5373febf017dc38a0f72f", + "rev": "79547cb5e8968bd1540f01609c1273fe5fb9b53e", "type": "github" }, "original": { @@ -29,11 +29,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1726560853, + "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", "type": "github" }, "original": { @@ -69,11 +69,11 @@ ] }, "locked": { - "lastModified": 1725781935, - "narHash": "sha256-o6LRtdpgBTzev9n243Ktu3rn0/qsv0frFyJwU6vJsdE=", + "lastModified": 1730490306, + "narHash": "sha256-AvCVDswOUM9D368HxYD25RsSKp+5o0L0/JHADjLoD38=", "owner": "nix-community", "repo": "home-manager", - "rev": "ec4c6928bbacc89cf10e9c959a7a47cbaad95344", + "rev": "1743615b61c7285976f85b303a36cdf88a556503", "type": "github" }, "original": { @@ -89,11 +89,11 @@ ] }, "locked": { - "lastModified": 1730155921, - "narHash": "sha256-ZF/zP5CKPh4phvae7TUkd45iBvMomrhwwMfw6NOWHpA=", + "lastModified": 1730504112, + "narHash": "sha256-ruhlb3H98jYnOwxuMbjBFk1SGvHgzS1kbSLV7o6/ZK0=", "owner": "~knazarov", "repo": "knazarov.com", - "rev": "8eb740e7e36132fca7e29b14daad038155a7b3d3", + "rev": "340914d6f4416fc2c969c30f67060cb5d1d5cbeb", "type": "sourcehut" }, "original": { @@ -104,11 +104,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1725833752, - "narHash": "sha256-RjUtPX46yGjn90wMDtOjZGW+SF1RAbU6b06wWYxibXo=", + "lastModified": 1730501559, + "narHash": "sha256-htEfkJAMAD9eWH4jiPZBMS12W4OEukRsXOsdFSjITko=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "75e28367ac76ff2fa13608fddfc34484e3a7ace3", + "rev": "d0cea61ff94eeb08a8bf09c9cfde6a3529e30370", "type": "github" }, "original": { @@ -119,11 +119,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1725693463, - "narHash": "sha256-ZPzhebbWBOr0zRWW10FfqfbJlan3G96/h3uqhiFqmwg=", + "lastModified": 1730327045, + "narHash": "sha256-xKel5kd1AbExymxoIfQ7pgcX6hjw9jCgbiBjiUfSVJ8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "68e7dce0a6532e876980764167ad158174402c6f", + "rev": "080166c15633801df010977d9d7474b4a6c549d7", "type": "github" }, "original": { @@ -160,11 +160,11 @@ ] }, "locked": { - "lastModified": 1724107934, + "lastModified": 1725843843, "narHash": "sha256-huE0MjfQeufYqHD/3DjytnaIPexQoHXVYnZKZetetk0=", "owner": "~knazarov", "repo": "q.sh", - "rev": "ec5583ef44f6f7678a99fc084ca5f1aca4183b15", + "rev": "e1b69b417b92e915fdb0d82326e2e9b0368fc59e", "type": "sourcehut" }, "original": { @@ -197,11 +197,11 @@ ] }, "locked": { - "lastModified": 1725765163, - "narHash": "sha256-rfd2c47iVSFI6bRYy5l8wRijRBaYDeU7dM8XCDUGqlA=", + "lastModified": 1729999681, + "narHash": "sha256-qm0uCtM9bg97LeJTKQ8dqV/FvqRN+ompyW4GIJruLuw=", "owner": "Mic92", "repo": "sops-nix", - "rev": "b68757cd2c3fa66d6ccaa0d046ce42a9324e0070", + "rev": "1666d16426abe79af5c47b7c0efa82fd31bf4c56", "type": "github" }, "original": { diff --git a/switch.sh b/switch.sh index 221d2db..a050dc6 100755 --- a/switch.sh +++ b/switch.sh @@ -5,6 +5,7 @@ if [ "$1" = "mira" ]; then elif [ "$1" = "framework" ]; then NIX_SSHOPTS="-t" nixos-rebuild switch --target-host framework --use-remote-sudo --flake `pwd`#framework elif [ "$1" = "knazarovcom" ]; then + nix flake lock --update-input knazarovcom nixos-rebuild switch --target-host knazarov.com --use-remote-sudo --flake `pwd`#knazarovcom elif [ "$1" = "videos" ]; then nixos-rebuild switch --target-host 107.189.7.30 --use-remote-sudo --flake `pwd`#videos diff --git a/waybar_maildir.sh b/waybar_maildir.sh new file mode 100755 index 0000000..73902fd --- /dev/null +++ b/waybar_maildir.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +# +# waybar-maildir.sh - count messages in a maildr (or other) directory +# +# USAGE: waybar-maildir.sh DIRECTORY ACCOUNT_NAME [nonotify] +# "nonotify" is used to prevent multiple identical notification when this script is used in multi-monitor setups +# +# REQUIREMENTS: inotifywait +# +# +# +### Example (partial) ~/.config/waybar/config +# +# "custom/maildir": { +# "exec": "~/.config/waybar/waybar-maildir.sh ~/.maildir/INBOX/new mailaccountname", +# "format": " {}", +# "return-type": "json" +# }, +# +### Example (partial) ~/.config/waybar/syles.css +# +# #custom-maildir { +# background-color: #875f00 +# } + +# mail_dir is the directory we are watching and within which, we are counting contents +# account_name can be used in notify_command as a label for the mail account being watched + +mail_dir="${1}" +account_name="${2}" + +old_count=0 + +while [[ -n "$(pgrep waybar)" ]]; do + if [[ ! -d "${mail_dir}" ]]; then + printf -- '{"text":"?"}\n' + sleep 60 + fi + + count="$(ls "${mail_dir}" | wc -l)" + + if [[ "${count}" > 0 ]]; then + printf -- '{"text":"%s","class":"newmail","tooltip":"%s"}\n' "${count}" "${account_name}" + else + printf -- '{"text":"-","tooltip":"%s"}\n' "${account_name}" + fi + + old_count="${count}" + + # 60-second timeout keeps this from becoming a zombified process when waybar is no longer running + inotifywait -t 60 -qq -e 'create,delete,move' "${mail_dir}" + sleep 1 # Allow directory to settle after new messages + +done + +unset -v account_name count latest_file mail_dir nonotify notify_command old_count subject