Compare commits

..

17 Commits

Author SHA1 Message Date
Uyanide 311a89c0e6 update 2026-05-05 09:22:05 +02:00
Uyanide 874311fcb0 update 2026-05-04 23:02:34 +02:00
Uyanide e648c1f1a6 stop building the wheels! 2026-05-04 23:02:18 +02:00
Uyanide f789df0f02 update 2026-05-03 12:37:05 +02:00
Uyanide 417d48f0f5 update 2026-05-03 00:11:07 +02:00
Uyanide a60f923e59 update 2026-04-29 00:16:38 +02:00
Uyanide fff6a726d8 yazi: update keybinds 2026-04-27 18:47:20 +02:00
Uyanide ac91f71a92 niri: disable xray for floating windows 2026-04-25 22:50:47 +02:00
Uyanide 5fefee5e2c qs: add caps event handler for niri ipc 2026-04-25 22:38:21 +02:00
Uyanide 6f90fe5d28 gtk settings 2026-04-25 21:58:04 +02:00
Uyanide b043039705 ya pkg upgrade 2026-04-25 21:58:04 +02:00
Uyanide 9453784fb8 regard ghostty shaders as submodule 2026-04-25 21:52:52 +02:00
Uyanide 410021ae9e update 2026-04-25 21:52:52 +02:00
Uyanide 6a70cb85a3 update 2026-04-25 21:52:52 +02:00
Uyanide 24b90c6721 update 2026-04-25 21:52:52 +02:00
Uyanide 26e7b292d7 add ghostty shaders 2026-04-25 21:52:52 +02:00
Uyanide 6c1bc55687 Refactor README structure and content
Reorganize sections and update details for clarity.
2026-04-25 21:52:51 +02:00
27 changed files with 859 additions and 653 deletions
+3
View File
@@ -4,3 +4,6 @@
[submodule "assets/yazi-catppuccin"]
path = assets/yazi-catppuccin
url = https://github.com/catppuccin/yazi.git
[submodule "config/ghostty/.config/ghostty/shaders"]
path = config/ghostty/.config/ghostty/shaders
url = https://github.com/0xhckr/ghostty-shaders.git
+42 -22
View File
@@ -3,16 +3,6 @@
## How it looks like...
<details>
<summary>Hyprland & Waybar & Eww</summary>
<figure>
<img src="https://github.com/Uyanide/backgrounds/blob/master/screenshots/desktop.jpg?raw=true"/>
</figure>
</details>
<details>
<summary>Niri & Quickshell</summary>
https://github.com/user-attachments/assets/2550607a-48ea-4662-98ba-d26722b26b1b
@@ -47,10 +37,10 @@ https://github.com/user-attachments/assets/2550607a-48ea-4662-98ba-d26722b26b1b
- Bar: ~~Waybar~~ | **Quickshell**
- Shell: (bash & fish) | **Zsh**
- Prompt: Oh My Posh | **Starship**
- Terminal: **Kitty** & (WezTerm | **Ghostty**)
- Terminal: **Kitty** | WezTerm | Ghostty
- Power Menu: **Wlogout** & Quickshell
- Colorscheme: **Catppuccin Mocha**
- App Launcher: **Rofi** | ~~Fuzzel~~
- App Launcher: ~~Rofi~~ | ~~Fuzzel~~ | **vicinae**
- Desktop Widgets: ~~Eww~~ | **Quickshell**
- Wallpaper Daemon: ~~Awww~~ | **Quickshell**
- Notification Daemon: ~~Mako~~ | **Quickshell**
@@ -66,22 +56,12 @@ Not based on, but heavily depends on many modules from (an old version of) [noct
This setup is currently only adapted for Niri.
## Eww
- `main`, main dashboard, modified from [syndrizzle/hotfiles](https://github.com/syndrizzle/hotfiles/tree/bspwm) but without notification center.
- `lyrics`, scrolling lyrics player, depends on [a small utility](https://github.com/Uyanide/Spotify_Lyrics) from myself <small>(which also happens to be my frist Golang program :D)</small>.
- `lyrics-single`, similar to `lyrics`, but only with a single line and can be easily embeded into the status bar.
## Wallpaper & Colortheme
- [WallReel](https://github.com/Uyanide/WallReel): an Image Carousel implemented with QtQuick to browse and set wallpapers from.
- [change-colortheme](./config/scripts/.local/scripts/change-colortheme): script that extract colors from the current wallpaper and generate a catppuccin color scheme accordingly.
- [backgrounds](https://github.com/Uyanide/backgrounds) collection for personal use (mostly waifus).
## Rofi
Based on [codeopshq/dotfiles](https://github.com/codeopshq/dotfiles), also serves as the clipboard history browser and emoji picker.
## Grub theme
Based on [vinceliuice/Elegant-grub2-themes](https://github.com/vinceliuice/Elegant-grub2-themes) with an [illustration from 紺屋](https://www.pixiv.net/artworks/119683453).
@@ -89,3 +69,43 @@ Based on [vinceliuice/Elegant-grub2-themes](https://github.com/vinceliuice/Elega
## Fonts
See [fontconfig.md](https://github.com/Uyanide/dotfiles/blob/main/memo/fontconfig.md).
---
<details>
<summary>Previous setup</summary>
## How it looks like...
<figure>
<img src="https://github.com/Uyanide/backgrounds/blob/master/screenshots/desktop.jpg?raw=true"/>
</figure>
## Hyprland & friends
Based on an old version of [end-4/dots-hyprland](https://github.com/end-4/dots-hyprland) but without ags, quickshell, eww and tons of other stuff.
## Eww
- `main`, main dashboard, modified from [syndrizzle/hotfiles](https://github.com/syndrizzle/hotfiles/tree/bspwm) but without notification center.
- `lyrics`, scrolling lyrics player, depends on [a small utility](https://github.com/Uyanide/Spotify_Lyrics) from myself <small>(which also happens to be my frist Golang program :D)</small>.
- `lyrics-single`, similar to `lyrics`, but only with a single line and can be easily embeded into the status bar.
## Swww
The wallpaper will be automatically blurred when there is a window in focus, which is implemented in the [wallpaper-daemon](https://github.com/Uyanide/dotfiles/blob/main/.scripts/wallpaper-daemon) script.
This feature is only enabled in Niri. Swww also manages wallpapers of the Hyprland setup, yet only in the regular way.
## Wallpaper & Colortheme
The most suitable primary color (or so-called flavor) will be chosen from the [Catppuccin Mocha](https://catppuccin.com/palette/) palette and applied to various apps automatically after changing wallpaper. And also:
- [wallpaper-chooser](https://github.com/Uyanide/Wallpaper_Chooser) to select wallpaper, which implements an Image Carousel with Qt Widgets.
- [backgrounds collection](https://github.com/Uyanide/backgrounds) for personal use.
## Rofi
Based on [codeopshq/dotfiles](https://github.com/codeopshq/dotfiles), also serves as the clipboard history browser and emoji picker.
</details>
@@ -1 +0,0 @@
shaders
+7
View File
@@ -0,0 +1,7 @@
include kitty.conf
remember_window_size false
initial_window_width 960
initial_window_height 720
window_padding_width 5
+4 -4
View File
@@ -3,13 +3,13 @@ listen_on unix:/tmp/kitty
shell_integration enabled
# kitty-scrollback.nvim Kitten alias
action_alias kitty_scrollback_nvim kitten $HOME/.local/share/nvim/lazy/kitty-scrollback.nvim/python/kitty_scrollback_nvim.py
# action_alias kitty_scrollback_nvim kitten $HOME/.local/share/nvim/lazy/kitty-scrollback.nvim/python/kitty_scrollback_nvim.py
# Browse scrollback buffer in nvim
map kitty_mod+h kitty_scrollback_nvim
# map kitty_mod+h kitty_scrollback_nvim
# Browse output of the last shell command in nvim
map kitty_mod+g kitty_scrollback_nvim --config ksb_builtin_last_cmd_output
# map kitty_mod+g kitty_scrollback_nvim --config ksb_builtin_last_cmd_output
# Show clicked command output in nvim
mouse_map ctrl+shift+right press ungrabbed combine : mouse_select_command_output : kitty_scrollback_nvim --config ksb_builtin_last_visited_cmd_output
# mouse_map ctrl+shift+right press ungrabbed combine : mouse_select_command_output : kitty_scrollback_nvim --config ksb_builtin_last_visited_cmd_output
# disable the stupid notification
confirm_os_window_close 0
+4 -4
View File
@@ -14,9 +14,9 @@ binds {
Mod+E repeat=false { spawn "dolphin" "--new-window"; }
Mod+Shift+E repeat=false { spawn "nautilus" "--new-window"; }
Mod+W repeat=false { spawn-sh "zen || zen-browser"; }
Mod+B repeat=false { spawn-sh "pkill -x -n btop || ghostty +new-window -e btop"; }
Mod+Shift+T repeat=false { spawn "ghostty" "+new-window"; }
Mod+Shift+Return repeat=false { spawn "ghostty" "+new-window"; }
Mod+B repeat=false { spawn-sh "pkill -x -n btop || kitty-floating -e btop"; }
Mod+Shift+T repeat=false { spawn "kitty-floating"; }
Mod+Shift+Return repeat=false { spawn "kitty-floating"; }
Mod+T repeat=false { spawn "kitty"; }
Mod+Return repeat=false { spawn "kitty"; }
Mod+Shift+W repeat=false { spawn "wallreel"; }
@@ -163,7 +163,7 @@ binds {
// Session
Mod+K allow-inhibiting=false repeat=false { quit; }
Mod+Shift+P allow-inhibiting=false repeat=false { spawn-sh "hyprlock & niri msg action power-off-monitors"; }
Mod+Shift+P allow-inhibiting=false repeat=false { spawn-sh "loginctl lock-session; niri msg action power-off-monitors"; }
Mod+L allow-inhibiting=false repeat=false { spawn "loginctl" "lock-session"; }
}
@@ -20,6 +20,7 @@ window-rule {
window-rule {
match app-id="org.wezfurlong.wezterm"
match app-id="com.mitchellh.ghostty"
match app-id="kitty-floating"
open-floating true
default-column-width { proportion 0.5; }
}
@@ -61,6 +62,13 @@ window-rule {
open-floating true
}
// QQ
window-rule {
match app-id="QQ" title="资料卡"
match app-id="QQ" title="天气"
open-focused false
}
// Block from recording
window-rule {
match app-id="org.mozilla.Thunderbird"
+11 -4
View File
@@ -91,10 +91,11 @@ layer-rule {
}
}
cursor {
xcursor-theme "Bibata-Modern-Ice"
xcursor-size 24
hide-when-typing
window-rule {
match is-floating=true
background-effect {
xray false
}
}
// I love rounded corners
@@ -103,6 +104,12 @@ window-rule {
clip-to-geometry true
}
cursor {
xcursor-theme "Bibata-Modern-Ice"
xcursor-size 24
hide-when-typing
}
recent-windows {
highlight {
active-color "#89b4fa"
+17 -8
View File
@@ -1,17 +1,26 @@
[Settings]
gtk-theme-name=catppuccin-mocha-blue-standard+default
gtk-icon-theme-name=Papirus
gtk-font-name=Sarasa UI SC 10
gtk-application-prefer-dark-theme=true
gtk-button-images=true
gtk-cursor-blink=true
gtk-cursor-blink-time=1000
gtk-cursor-theme-name=Bibata-Modern-Ice
gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_ICONS
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-button-images=0
gtk-menu-images=0
gtk-decoration-layout=icon:minimize,maximize,close
gtk-enable-animations=true
gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=0
gtk-font-name=Sarasa UI SC, 10
gtk-icon-theme-name=Papirus
gtk-menu-images=true
gtk-modules=colorreload-gtk-module:appmenu-gtk-module
gtk-primary-button-warps-slider=true
gtk-shell-shows-menubar=1
gtk-sound-theme-name=ocean
gtk-theme-name=catppuccin-mocha-blue-standard+default
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
gtk-toolbar-style=3
gtk-xft-antialias=1
gtk-xft-dpi=122880
gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=1
+11 -4
View File
@@ -1,7 +1,14 @@
[Settings]
gtk-theme-name=catppuccin-mocha-blue-standard+default
gtk-icon-theme-name=Papirus
gtk-font-name=Sarasa UI SC 10
gtk-application-prefer-dark-theme=true
gtk-cursor-blink=true
gtk-cursor-blink-time=1000
gtk-cursor-theme-name=Bibata-Modern-Ice
gtk-cursor-theme-size=24
gtk-application-prefer-dark-theme=1
gtk-decoration-layout=icon:minimize,maximize,close
gtk-enable-animations=true
gtk-font-name=Sarasa UI SC, 10
gtk-icon-theme-name=Papirus
gtk-primary-button-warps-slider=true
gtk-sound-theme-name=ocean
gtk-theme-name=catppuccin-mocha-blue-standard+default
gtk-xft-dpi=122880
@@ -11,15 +11,23 @@ Item {
property color fillColor: Colors.mRed
property color _actualColor: Colors.mRed
property bool _expand: mouseArea.containsMouse
property string displayText: Niri.castOutputs.length > 0 ? Niri.castOutputs.join(", ") : "Casting"
visible: RecordService.isRecording
visible: Niri.isCasting
implicitHeight: Math.max(symbolIcon.implicitHeight, textLabel.implicitHeight)
implicitWidth: height + expander.implicitWidth
Connections {
target: Niri
onCastOutputsListChanged: {
root.displayText = Niri.castOutputs.length > 0 ? Niri.castOutputs.join(", ") : "Casting";
}
}
SequentialAnimation {
id: blinkAnimation
running: RecordService.isRecording
running: root.visible
loops: Animation.Infinite
ColorAnimation {
@@ -70,7 +78,7 @@ Item {
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 5
text: RecordService.recordingDisplay || "Recording"
text: root.displayText
color: root.fillColor
}
@@ -92,12 +100,6 @@ Item {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
onClicked: (mouse) => {
if (mouse.button === Qt.LeftButton)
RecordService.startOrStop();
}
}
Behavior on _actualColor {
@@ -18,7 +18,7 @@ Singleton {
id: process
running: false
command: ["ghostty", "+new-window", "-e", "btop"]
command: ["kitty-floating", "-e", "btop"]
}
}
@@ -35,11 +35,16 @@ Singleton {
})
property var workspaceCache: ({
})
property var castCache: ({
})
property var castOutputs: []
property bool isCasting: false
signal workspaceChanged()
signal activeWindowChanged()
signal windowListChanged()
signal outputsChanged()
signal castOutputsListChanged()
function initialize() {
niriEventStream.connected = true;
@@ -434,6 +439,79 @@ Singleton {
}
}
function _syncCasts() {
isCasting = Object.keys(castCache).length > 0;
castOutputs = [];
for (const castId in castCache) {
const cast = castCache[castId];
if (cast.output) {
if (!castOutputs.includes(cast.output))
castOutputs.push(cast.output);
}
}
castOutputsListChanged();
}
function _handleCastsChanged(eventData) {
try {
const casts = eventData.casts || [];
castCache = {
};
castOutputs = [];
for (const cast of casts) {
const castData = {
"id": cast.stream_id,
"stream_id": cast.stream_id,
"session_id": cast.session_id,
"kind": cast.kind,
"output": cast.target?.Output?.name,
"pid": cast.pid
};
castCache[castData.id] = castData;
}
_syncCasts();
} catch (e) {
Logger.e("NiriService", "Error handling CastsChanged:", e);
}
}
function _handleCastStopped(eventData) {
try {
const castId = eventData.stream_id;
delete castCache[castId];
_syncCasts();
} catch (e) {
Logger.e("NiriService", "Error handling CastStopped:", e);
}
}
function _handleCastStartedOrChanged(eventData) {
try {
const cast = eventData.cast;
if (!cast)
return ;
if (cast.is_active === true) {
// If the cast is active, we can treat it as a new or updated cast
const castData = {
"id": cast.stream_id,
"stream_id": cast.stream_id,
"session_id": cast.session_id,
"kind": cast.kind,
"output": cast.target?.Output?.name,
"pid": cast.pid
};
castCache[castData.id] = castData;
} else {
// If the cast is not active, we should remove it from the cache
const castId = cast.stream_id;
delete castCache[castId];
}
_syncCasts();
} catch (e) {
Logger.e("NiriService", "Error handling CastStartedOrChanged:", e);
}
}
function switchToWorkspace(workspace) {
try {
Quickshell.execDetached(["niri", "msg", "action", "focus-workspace", workspace.idx.toString()]);
@@ -578,6 +656,12 @@ Singleton {
_queryDisplayScales();
else if (event.ScreenshotCaptured)
_handleScreenshotCaptured(event.ScreenshotCaptured);
else if (event.CastsChanged)
_handleCastsChanged(event.CastsChanged);
else if (event.CastStopped)
_handleCastStopped(event.CastStopped);
else if (event.CastStartedOrChanged)
_handleCastStartedOrChanged(event.CastStartedOrChanged);
} catch (e) {
Logger.e("NiriService", "Error parsing event stream:", e, data);
}
@@ -39,7 +39,7 @@ Singleton {
function openNote(path) {
recentNotePath = path;
Quickshell.execDetached(["ghostty", "+new-window", "-e", "helix", path]);
Quickshell.execDetached(["kitty-floating", "-e", "helix", path]);
}
function openRecent() {
+3
View File
@@ -0,0 +1,3 @@
#!/bin/sh
kitty --app-id kitty-floating --config "$HOME/.config/kitty/floating.conf" "$@"
@@ -46,4 +46,5 @@ fi
if (( $+commands[bat] )); then
export BAT_THEME="Catppuccin Mocha"
export BAT_STYLE="default,-numbers"
fi
+6 -3
View File
@@ -180,17 +180,20 @@ if (( $+commands[git] )); then
print -r -- "$repo"
}
gc() {
gcl() {
local repo
repo=$(uy_git_repo_from_clipboard) || return 1
git clone "$repo"
}
pingo() {
cd "$HOME/Repositories/Uni" || return 1
builtin cd "$HOME/Repositories/Uni" || return 1
local repo
repo=$(uy_git_repo_from_clipboard) || return 1
local dir_name="${repo:t:r}"
local course="${${dir_name%%[^[:lower:]]*}:u}"
mkdir -p "$course"
builtin cd "$course" || return 1
if [[ ! -d "$dir_name" ]]; then
git clone "$repo" || return 1
fi
@@ -201,7 +204,7 @@ if (( $+commands[git] )); then
disown
else
echo "Opening method missing or invalid"
cd "$dir_name"
builtin cd "$dir_name"
fi
}
fi
+1
View File
@@ -45,6 +45,7 @@ fi
[[ -f "$HOME/.cargo/env" ]] && source "$HOME/.cargo/env"
(( $+commands[opam] )) && eval "$(opam env)"
prepend_path "$HOME/.cargo/bin"
prepend_path "$HOME/go/bin"
prepend_path "$HOME/.local/bin"
prepend_path "$HOME/.local/scripts"
+3 -3
View File
@@ -1,6 +1,6 @@
{
"label": "lock",
"action": "hyprlock &",
"action": "loginctl lock-session",
"text": "Lock",
"keybind": "l"
}
@@ -24,7 +24,7 @@
}
{
"label": "suspend",
"action": "sleep 0.1 && systemctl suspend",
"action": "systemctl suspend",
"text": "Suspend",
"keybind": "u"
}
@@ -33,4 +33,4 @@
"action": "systemctl reboot",
"text": "Reboot",
"keybind": "r"
}
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -92,4 +92,4 @@
:monitor 0
:geometry (geometry :x 1108 :y -45)
(lyrics-single)
)
)
+43
View File
@@ -0,0 +1,43 @@
> 嗯, 用户想问的似乎是如何使用
>
> - `qemu-user-static`
> - `qemu-user-static-binfmt`
>
> 通过
>
> ```bash
> sudo systemd-nspawn -M {{ rootfs-name }}
> ```
>
> 运行从
>
> ```bash
> wget https://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
> ```
>
> 下载且通过
>
> ```bash
> sudo mkdir -p /var/lib/machines/{{ rootfs-name }} && \
> sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /var/lib/machines/{{ rootfs-name }}
> ```
>
> 解压的 aarch64 架构的 archlinux rootfs. 但要不要提醒用户应该取消注释 `cat /etc/pacman.conf` 中的
>
> ```conf
> [options]
> #DisableSandboxFilesystem
> #DisableSandboxSyscalls
> ```
>
> 以禁用在 systemd-nspawn 中默认不可用的下载沙盒, 并且应该避免运行需要 setuid 的程序 (如 sudo), 因为 `/proc/sys/fs/binfmt_misc/qemu-aarch64` 中的 `flags` 缺失 `C` (Credentials) 标志, 导致可执行文件的 `s` 权限位被忽视? 不过如果真的需要 setuid 的话, 也可以通过
>
> ```bash
> sudo cp /usr/lib/binfmt.d/qemu-aarch64-static.conf /etc/binfmt.d/
> ```
>
> 复制一份并在末尾加上 C, 要不要一并告诉用户?
>
> 算了, 反正用户什么也不懂, 即使问题解决也只会原地消失, 一句感谢也不说.
_Baked for 27s._
+76
View File
@@ -0,0 +1,76 @@
## 问题
### VapourSynth 破坏性更新
> Tue May 5 09:08:30 CEST 2026
- `extra/vapoursynth` 包更新至 75 版本后 (此问题其实是 R74 引入的, 但他们似乎跳过了 R74 直接在近几天更新至 R75), vsscript 库文件符号链接关系如下:
- `/usr/lib/libvapoursynth-script.so` -> `python3.14/site-packages/vapoursynth/libvsscript.so`
- `/usr/lib/libvapoursynth-script.so.0` -> `python3.14/site-packages/vapoursynth/libvsscript.so`
这导致 ldconfig 根据 SONAME 字段建立的缓存条目变化, 例如从 `libvapoursynth-script.so.0 (libc,x86-64) => /usr/lib/libvapoursynth-script.so.0` 变为 `libvsscript.so (libc6,x86-64) => /usr/lib/libvsscript.so`, 可能会使其他未能重新链接的程序找不到对应库.
但该问题影响范围比较有限, 因为动态库并不完全根据 ldconfig 缓存条目加载 —— 如果文件名完全匹配也能正确加载, 毕竟 `/usr/lib/libvapoursynth-script.so.0` 仍然存在.
- 同时, 插件目录也从 `/usr/lib/vapoursynth/` 改为 `/usr/lib/python3.14/site-packages/vapoursynth/plugins/`, 很多包未能及时更新插件安装路径, 导致 vapoursynth 插件丢失.
extra 仓库中的 vapoursynth-plugin-\* 包均已改为类似如下动态查找插件安装路径的方式:
```bash
install -Dm 755 libxxx.so -t "${pkgdir}"/$(python -c 'import vapoursynth;print(vapoursynth.get_plugin_dir())')/
```
所以不会出问题. 主要影响范围是打包者或上游硬编码插件安装路径为 `/usr/lib/vapoursynth` 的包, 其中包括少数 extra 仓库的包如 `extra/ffms2` 和众多 AUR 包.
- vapoursynth 不再在编译器 link libpython, 而必须在加载 libvsscript.so 时选择 python. 选哪个 python 由 `$HOME/.config/vapoursynth/vapoursynth.toml` 维护的映射关系决定, 格式类似:
```toml
"/usr/lib/python3.14/site-packages/vapoursynth/libvsscript.so" = ["/usr/bin/python","/usr/lib/libpython3.14.so.1.0"]
```
可以运行 `vapoursynth config` 自动更新.
然而, 上文提到过新的 libvsscript.so 的 ldconfig 条目是 `libvsscript.so (libc6,x86-64) => /usr/lib/libvsscript.so`, 而 `vapoursynth config` 只会在 `vapoursynth.toml` 写入 `/usr/lib/python3.14/site-packages/vapoursynth/libvsscript.so` 的条目. 此时, 如果加载 libvsscript.so, 会从 ldconfig 拿到 `/usr/lib/libvsscript.so`,而 vapoursynth 在拿到此路径后不解 symlink, 查 `vapoursynth.toml` 时和任何条目都对不上, 导致加载失败. 报错类似:
```
Python executable and library path couldn't be determined despite automatic configuration. Run `vapoursynth config` to set it for this Python installation and then try again.
```
临时修复方式为在 `$HOME/.config/vapoursynth/vapoursynth.toml` 里手动加上针对 `/usr/lib/libvsscript.so` 符号链接的条目:
```toml
"/usr/lib/libvsscript.so" = ["/usr/bin/python","/usr/lib/libpython3.14.so.1.0"]
```
如果运行 vapoursynth 此次更新前构建并链接的程序, 可能同样需要为 `/usr/lib/libvapoursynth-script.so.0` 准备对应条目:
```toml
"/usr/lib/libvapoursynth-script.so.0" = ["/usr/bin/python","/usr/lib/libpython3.14.so.1.0"]
```
影响范围为所有动态链接 vapoursynth 的二进制文件.
### CUDA 13.2 不兼容 GCC 16.1
> Mon May 4 15:39:17 CEST 2026
nvcc 和 gcc 兼容问题的历史重演. 随 GCC 16.1 发布, 以前用 GCC 15.2 能够编译的 CUDA 包会报一堆错误, 影响范围非常大.
解决方法为装 gcc15 等旧版本工具链, 并修改编译流程使 nvcc 使用指定编译器. 例如对于部分 Makefile:
```makefile
CUDA_CCBIN ?=
cudaccbin = $(if $(CUDA_CCBIN),-ccbin $(CUDA_CCBIN),)
...
nvcc $(cudaccbin) ...
```
但这样会带来一个问题: `gcc15` 是 AUR 包, 需要编译. 而这并不会是一个很愉快的过程. 除去超大的仓库体积, 超长时间的编译测试和超高的资源占用外, 过程中还可能会因为各种问题失败, 修复问题后可能还需要从头再来, 成本过高.
但好在 cachyos 有打包 `gcc14` 二进制包, 因此再降一个版本即可绕过编译过程. 但 AUR 上的众多打包者应该还是会选择 `gcc15`, 因此在有仓库打包 `gcc15` 二进制包或 NVIDIA 更新 CUDA 支持 GCC 16 之前, 几乎所有涉及 CUDA 的包仍然需要手动修改 PKGBUILD 构建.
另外还有几个可选方案:
- 可以用 clang++ 代替 nvcc, 但支持程度似乎有限 (`clang++: warning: CUDA version is newer than the latest partially supported version 12.9 [-Wunknown-cuda-version]`), 且对于部分已经在使用 nvcc 构建的项目可能需要较大幅度地修改编译参数和流程, 实用价值不高.
-75
View File
@@ -1,75 +0,0 @@
things I have installed:
full KDE Plasma 6 setup
which can provide:
SDDM theme # Breeze is enough
kcalc/kalc # calculator(s), what's the difference?
kcolorchooser # or hyprpicker
pipewire & friends
...
# hypr*
hyprland
hypridle
hyprlock
hyprshot
hyprpicker
plugin hyprexpo # workspaces overview
plugin hyprorganize # https://github.com/Uyanide/hyprplug
# xdg-desktop-portal*
xdg-desktop-portal
xdg-desktop-portal-hyprland # not working with my Intel iGPU, but fine with NVIDIA dGPU
xdg-desktop-portal-gtk # for file picker
xdg-desktop-portal-gnome # why not?
# terminal emulator(s)
kitty # normal terminal
ghostty # floating terminal, for btop for example
# under surface
swww # wallpaper daemon
mako # notification daemon
gnome-keyring # --password-store=gnome-libsecret
wl-clipboard
cliphist # clipboard history
slurp # region selector
wf-recorder # screen recorder
brightnessctl
playerctl
pamixer
zoxide # better cd
eza # better ls
bat # better cat
# GUI
waybar
eww
wlogout
rofi(-wayland)
mpv
network-manager-applet # nm-applet
blueman # bluetooth GUI & applet
pwvucontrol
gnome-text-editor # or kwrite, notepad replacement
btop # system monitor
activate-linux # :/
polkit-gnome # polkit authentication agent
gradia # screenshots editor
# fonts & themes
maplemono-nf-cn / ttf-maplemono-nf-cn-unhinted (archlinuxcn)
Sour Gummy
ttf-meslo-nerd
ttf-jetbrains-mono-nerd
spicetify # spotify tweaks
spicetify-maketplace # spotify themes
nwg-look # theme of GTK apps
catppuccin-gtk-theme-mocha # theme of GTK apps
kvantum
# utils
bc
jq
python-colorthief
python-watchdog
-7
View File
@@ -1,7 +0,0 @@
things I have installed:
in addition to everything in `./hyprland-ricing.txt`:
xwayland-satellite
wlsunset
wezterm # replaces ghostty
+62 -47
View File
@@ -7,49 +7,6 @@ grab
| bash -s -- "$0"
exit $?
> [!NOTE]
> The gibberish above is **NOT** meant to be copy-pasted into the terminal. It is a script that updates the [Full list](#full-list) section below, and should be run as:
>
> ```bash
> bash /path/to/dotfiles/memo/packages.md
> ```
## Notes
| | |
| --------- | ---------------------------- |
| alass | Subtitle sync; used in mpv |
| axel | CLI download accelerator |
| figlet | Draw large letters |
| foliate | GTK eBook reader |
| gearlever | AppImage manager |
| gping | Ping with better looking TUI |
| jp2a | JPEG to ASCII |
| nethogs | Network top |
| picard | Music tagger (MusicBrainz) |
| toilet | Better FIGlet |
| wev | Debug wayland events |
| yad | Fork of zenity |
| zenity | Display dialog boxes via cli |
## Some useful commands
Show packages sorted by size, with a preview of their info:
```bash
expac -H M '%m\t%n' \
| sort -hr \
| fzf --delimiter='\t' --with-nth=1,2 --multi \
--preview 'yay -Qi {2}' \
--preview-window='right,70%,wrap'
```
Update the list below:
```bash
bash /path/to/dotfiles/memo/packages.md
```
<!-- update-full-list:start
set -euo pipefail
@@ -94,6 +51,49 @@ echo "Updated Full list in: $script_path"
update-full-list:end -->
> [!NOTE]
> The gibberish above is **NOT** meant to be copy-pasted into the terminal. It is a script that updates the [Full list](#full-list) section below, and should be run as:
>
> ```bash
> bash /path/to/dotfiles/memo/packages.md
> ```
## Notes
| | |
| --------- | ---------------------------- |
| alass | Subtitle sync; used in mpv |
| axel | CLI download accelerator |
| figlet | Draw large letters |
| foliate | GTK eBook reader |
| gearlever | AppImage manager |
| gping | Ping with better looking TUI |
| jp2a | JPEG to ASCII |
| nethogs | Network top |
| picard | Music tagger (MusicBrainz) |
| toilet | Better FIGlet |
| wev | Debug wayland events |
| yad | Fork of zenity |
| zenity | Display dialog boxes via cli |
## Some useful commands
Show packages sorted by size, with a preview of their info:
```bash
expac -H M '%m\t%n' \
| sort -hr \
| fzf --delimiter='\t' --with-nth=1,2 --multi \
--preview 'yay -Qi {2}' \
--preview-window='right,70%,wrap'
```
Update the list below:
```bash
bash /path/to/dotfiles/memo/packages.md
```
## Full list
```
@@ -106,8 +106,10 @@ archiso
archlinux-contrib
archlinuxcn-keyring
ark
av1an
awww
axel
azure-cli
base
base-devel
bash-completion
@@ -138,11 +140,13 @@ chafa
chaotic-keyring
chaotic-mirrorlist
chromium
chwd
claude-code
cloc
cmake
cmatrix-git
composer
compsize
corectrl
cowfortune
cpu-x
@@ -181,7 +185,9 @@ fcitx5-qt
fd
fdkaac
ffmpeg-full
ffms2
ffnvcodec-headers
ffvship
figlet
filelight
fish
@@ -197,6 +203,7 @@ frei0r-plugins
fuzzel
fzf
gamemode
gcc14
gdb
gdu
gearlever
@@ -274,10 +281,11 @@ lib32-nvidia-utils
lib32-opencl-nvidia
lib32-vulkan-icd-loader
lib32-vulkan-intel
libc++
libdbusmenu-lxqt
libggml-git
libguestfs
libreoffice-still-zh-cn
libspng
libva-intel-driver
libva-nvidia-driver
libva-utils
@@ -289,8 +297,7 @@ linux-cachyos-headers
linux-firmware
linux-lts
linux-lts-headers
linuxqq-nt
llama-cpp-git
linuxqq
llmfit-bin
localsend
lolcat
@@ -304,7 +311,7 @@ man-pages
mangohud
matugen
meson
mission-center
mkvtoolnix-cli
modprobed-db
moonlight-qt
moreutils
@@ -314,6 +321,7 @@ mpd-mpris
mpv-full
mpv-mpris
msedit
namcap
nasm
nautilus
nautilus-share
@@ -332,7 +340,9 @@ nvidia-prime
nvidia-settings
nvidia-utils
nvme-cli
nvtop
nwg-look
oavif
obs-studio
obsidian
okular
@@ -381,6 +391,8 @@ python-yaml
qbittorrent-enhanced
qdiskinfo
qemu-full
qemu-user-static
qemu-user-static-binfmt
qt5-graphicaleffects
qt5-quickcontrols
qt5-quickcontrols2
@@ -407,6 +419,7 @@ quickshell-git
qutebrowser
rclone
reflector
resources
riscv64-linux-gnu-binutils
riscv64-linux-gnu-gcc
rsync
@@ -486,6 +499,7 @@ unrar
usbip
uv
valgrind
vapoursynth-plugin-vship-cuda-git
ventoy-bin
vesktop-bin
vicinae
@@ -568,6 +582,7 @@ yt-dlp
zellij
zen-browser-bin
zenity
zig
zoxide
zram-generator
zsh