diff --git a/.config/gtklock/style.css b/.config/gtklock/style.css index ebb5078..c53a1dd 100644 --- a/.config/gtklock/style.css +++ b/.config/gtklock/style.css @@ -2,7 +2,7 @@ transition: 1000ms ease ; } window { - background-image: url("/home/agxcoy/.local/share/.wallpaper_blur"); + background-image: url("/home/agxcoy/.cache/wallpaper_blur"); background-size: cover; background-repeat: no-repeat; background-position: center; diff --git a/.config/niri/config.kdl b/.config/niri/config.kdl index 79496c6..e2cac46 100644 --- a/.config/niri/config.kdl +++ b/.config/niri/config.kdl @@ -126,7 +126,7 @@ overview { } layer-rule { - match namespace="^swww-daemonblur$" + match namespace="^wallpaper$" place-within-backdrop true } @@ -181,8 +181,8 @@ include "config-keyboard.kdl" // spawn-at-startup "waybar" // 建议交给 systemctl --user,它自己没法热重载。 // spawn-sh-at-startup "wl-paste --watch cliphist store" -spawn-at-startup "swww-daemon" -spawn-at-startup "swww-daemon" "--namespace" "blur" +spawn-at-startup "awww-daemon" +// spawn-at-startup "awww-daemon" "--namespace" "blur" spawn-at-startup "xwayland-satellite" spawn-at-startup "/usr/lib/pam_kwallet_init" diff --git a/bin/chbg b/bin/chbg index f5f5c8a..01e7b7b 100755 --- a/bin/chbg +++ b/bin/chbg @@ -3,7 +3,11 @@ set -euo pipefail THIS_COMMAND=$(basename "$0") IMG_MAGICK="magick" -WP_DIR="${XDG_DATA_HOME:-$HOME/.local/share}" +SERVICE_NAME="swaybg.service" + +WP_DIR="${XDG_CACHE_HOME:-$HOME/.cache}" +WP_FILE="$WP_DIR/wallpaper" +BLUR_WP="$WP_DIR/wallpaper_blur" usage() { cat << EOF @@ -12,7 +16,7 @@ Options: -d, --dir OUTPUT_PATH Directory to store chosen image. (default: $WP_DIR) -h, --help Show this help message and exit. Notes: - - Images can be provided as arguments or via stdin. If both are used, they are combined. + - This script needs 'swaybg.service' to be set up for overview background support (unless awww #521 solved). See niri documentation for details. - Web URLs are also supported (via 'curl' or 'wget' downloading). - If multiple images are provided, one will be randomly picked each time the script is executed. EOF @@ -36,8 +40,8 @@ while [[ $# -gt 0 ]]; do esac done -if ! command -v swww >/dev/null 2>&1; then - echo "!) 'swww' command not found. Unable to comply." >&2 +if ! command -v awww >/dev/null 2>&1; then + echo "x) 'awww' not found. Unable to comply." >&2 exit 2 fi @@ -46,7 +50,7 @@ if command -v magick >/dev/null 2>&1; then elif command -v convert >/dev/null 2>&1; then IMG_MAGICK="convert" else - echo "!) 'magick' or 'convert' command not found. Image processing unavailable." >&2 + echo "x) 'magick' or 'convert' not found. Image processing unavailable." >&2 exit 2 fi @@ -61,7 +65,7 @@ set_wallpaper() { (( fw > 3840 && fh > 2160 )) && { finput=$(mktemp "${TMPDIR:-/tmp}/chbg.XXXXXXXX.webp") trap 'rm -f "$finput"' EXIT - echo "-> image too large, resizing ..." + echo " -> image too large, resizing ..." # echo "DEBUG: resized image at $finput" $IMG_MAGICK "$1" -resize "3840x2160^" \ -quality 90 \ @@ -69,14 +73,22 @@ set_wallpaper() { -define webp:alpha-quality=100 "$finput" } - echo -n "-> making blurred version of '${1##*/}' ... " - cp $finput $WP_DIR/.wallpaper - $IMG_MAGICK $WP_DIR/.wallpaper -filter Gaussian -blur 0x30 $WP_DIR/.wallpaper_blur + echo -n " -> making blurred version of '${1##*/}' ... " + cp "$finput" "$WP_FILE" + $IMG_MAGICK "$WP_FILE" -filter Gaussian -blur 0x30 "$BLUR_WP" echo "Done." - # 原工具现在更名为 awww,但留下了 bug:https://codeberg.org/LGFae/awww/issues/521 - swww img $WP_DIR/.wallpaper - swww img $WP_DIR/.wallpaper_blur --namespace blur + awww img "$WP_FILE" --transition-type=random + + if [[ -f "$HOME/.config/systemd/user/niri.service.wants/$SERVICE_NAME" ]]; then + echo " -> restarting $SERVICE_NAME ..." + systemctl --user restart "$SERVICE_NAME" + else + echo " !) '$SERVICE_NAME' didn't loaded by niri. Won't reload backdrop." >&2 + echo " => See niri documentation for setting up swaybg systemd unit." >&2 + echo " => Or wait for awww #521 on codeberg being resolved." >&2 + exit 1 + fi } imagepool=() @@ -132,7 +144,7 @@ if command -v curl >/dev/null 2>&1; then elif command -v wget >/dev/null 2>&1; then wget -qO "$tmpfile" "$randomimage" else - echo "!) Unable to fetch image without 'curl' or 'wget'." >&2 + echo "x) Unable to fetch image without 'curl' or 'wget'." >&2 exit 2 fi set_wallpaper "$tmpfile" diff --git a/readme.md b/readme.md index 651437d..f10d92b 100644 --- a/readme.md +++ b/readme.md @@ -3,38 +3,47 @@ 都怪雪叶!( > [!note] +> 1. Liteyuki Gitea 黑色主题对`这样的`代码块不太友好,为方便阅读我尽量少这么写。 > 1. 本仓库的配置管理方案比较原始:逐个做软链接处理。 -> 个人并不打算无脑用`stow`,尤其不希望一些 systemd 服务和涉及 token 的自用小工具混进来。 +> 个人并不打算无脑用 stow ,尤其不希望一些 systemd 服务和涉及 token 的自用小工具混进来。 > 2. 还有一些早期配置在整理本仓库时已经淡忘,由于篇幅和复述可靠性有限,亦不考虑收纳。 -> 3. 涉及`$HOME`、`~`、`%h`开头(最后一个多见于 systemd 服务)的路径建议自行适配——我的设定你不一定会满意。 +> 3. 涉及家目录`$HOME`、`~`、`%h`开头(最后一个多见于 systemd 服务)的路径建议自行适配——我的设定你不一定会满意。 > - 另注:gtklock 没有办法取巧,只能填绝对路径。算是为数不多的漏网之鱼。 ## 鸣谢 - 雪叶 [@Vescrity](https://github.com/Vescrity) (Yukitoha) -- fizzyizzy05 (Isabelle Jackson, mtf) +- fizzyizzy05 (Isabelle Jackson) ## 已知依赖 > 仅列出**想得起来的**依赖软件包。 -|依赖|配置|备注| -|-|-|-| -|niri|`.config/niri/config*.kdl`|只拆分了`window-rule`和`binds`,拆太碎有些视觉效果会失效。| -|`fuzzel`|`.config/fuzzel/*`| -|`mako`|`.config/mako/*`|Chrome 的消息推送都是无脑标 CRITICAL 级,没有办法调持续时间,量一多还会卡在那里,只能`makoctl reload`强制重载。| -|`swww-git`|`bin/chbg` (bash 脚本)|依赖`imagemagick`。另,可以配合图床等实现定期换壁纸。| -|`gtklock`|`.config/gtklock/*`|现阶段无法跟`swayidle`合用,尽管其 Wiki 鼓励这么做。| -|`xdg-desktop-portal-(gtk\|gnome)`|`.config/xdg-desktop-portal/*-portals.conf`|GNOME 支持最全,但称不上好看(| -|`kwallet`|VSCode 试图登录时会弹出向导让你配的。|替代`gnome-keyring`。建议加装`kwallet-pam`,免得 VSCode 自己尝试解锁结果闪退。| -|foot|`.config/foot/foot.ini`| -|`zsh`|`.zshrc` `.zprofile`|另使用了 ZshIM 和 powerlevel10k 主题,因此有些配置(如`HISTFILE`)不得不相应地提前。| -|yazi|`.config/yazi/*`|替代`nautilus`。另用`fake-nautilus`移除`nautilus`包。| -|fastfetch|`.config/fastfetch/*`| -|waybar|`.config/waybar/*`|建议搭配`systemctl --user`(参见 [niri 在线文档](https://yalter.github.io/niri/Example-systemd-Setup.html))以便重载配置。| -|`mpris`||`systemctl --user`配置自启动(参见 ArchWiki)| -|`pavucontrol-qt`| +|依赖|配置| +|-|-| +|niri|.config/niri/config*.kdl| +|➡️ fuzzel|.config/fuzzel/*| +|➡️ mako|.config/mako/*| +|➡️ awww 和 swaybg|bin/chbg (bash 脚本);swaybg.service| +|➡️ gtklock|.config/gtklock/*| +|➡️ xdg-desktop-portal-(gtk\|gnome)|.config/xdg-desktop-portal/*-portals.conf| +|➡️ kwallet|VSCode 试图登录时会弹出向导让你配的。| +|foot|.config/foot/foot.ini| +|➡️ zsh|.zshrc .zprofile| +|yazi|.config/yazi/*| +|fastfetch|.config/fastfetch/*| +|waybar|.config/waybar/*| +|➡️ mpris|`systemctl --user`配置自启动(参见 ArchWiki)| +|➡️ pavucontrol-qt| -> 注: -> - swww 现更名为 awww,但其读取缓存时存在问题——参见 [codeberg issue](https://codeberg.org/LGFae/awww/issues/521)。目前推荐用 swww-git,因为实在找不到更好的双层组合方案了。 +> 备注(太长了统一丢在下面): +> - niri 配置只拆分了 window-rule 和 binds(即`config-*.kdl),拆太碎有些视觉效果会失效。 +> - Chrome 的消息推送都是无脑标 CRITICAL 级,没有办法调持续时间,量一多还会卡在那里,只能`makoctl reload`强制重载。 +> - chbg 依赖 imagemagick。awww 目前对多个命名空间的加载有问题:[\#521](https://codeberg.org/LGFae/awww/issues/521)。经各种方案的实地测试,最终还是考虑 swaybg 服务 + awww 混合。 +> - gtklock 自身无法挂多个后台(即只能有一个`gtklock -d`,多了会报错),虽然也算侧面实现了单例,但搭配 swayidle 和 swaylock 可能不算好用。我是只在休眠快捷键里简单做了下 pgrep 检查。 +> - niri 设计上就是用 gnome 作 xdg 后端,也就它支持最全。但 gnome 界面算不上好看,所以也有一些人考虑局部更换为 gtk 或 kde。像我就用 kwallet 替代 gnome-keyring。 +> - 装 kwallet 建议加装 kwallet-pam,免得 VSCode 自己尝试解锁结果闪退。 +> - 有关终端:我另使用了 ZshIM 和 powerlevel10k 主题,因此会掺入自动生成的初始化命令。 +> - 有关 fake-nautilus:我是觉得 nautilus 不好看。在雪叶的指导下搞了个空包替代这个 gnome 后端必需的依赖。 +> - waybar(和 swaybg)重载:建议搭配`systemctl --user`(参见 [niri 在线文档](https://yalter.github.io/niri/Example-systemd-Setup.html))以便重载配置。若是用 niri 的 spawn-at-startup,杀进程重启、挂后台可谓相当麻烦。 ## 参考资源与备注 - Nerd 字体:[Monaco Nerd Font Mono](https://glowmem.com/upload/articles/archlinux-note/Monaco_Nerd_Font_Mono-Regular.ttf) (MelodyEcho ver.) 或直接 [MesloLGS NF](https://github.com/romkatv/powerlevel10k/blob/master/font.md) (for p10k)。