Compare commits

...

9 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
25 changed files with 816 additions and 632 deletions
+1 -1
View File
@@ -37,7 +37,7 @@ https://github.com/user-attachments/assets/2550607a-48ea-4662-98ba-d26722b26b1b
- Bar: ~~Waybar~~ | **Quickshell** - Bar: ~~Waybar~~ | **Quickshell**
- Shell: (bash & fish) | **Zsh** - Shell: (bash & fish) | **Zsh**
- Prompt: Oh My Posh | **Starship** - Prompt: Oh My Posh | **Starship**
- Terminal: **Kitty** & (WezTerm | **Ghostty**) - Terminal: **Kitty** | WezTerm | Ghostty
- Power Menu: **Wlogout** & Quickshell - Power Menu: **Wlogout** & Quickshell
- Colorscheme: **Catppuccin Mocha** - Colorscheme: **Catppuccin Mocha**
- App Launcher: ~~Rofi~~ | ~~Fuzzel~~ | **vicinae** - App Launcher: ~~Rofi~~ | ~~Fuzzel~~ | **vicinae**
+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 shell_integration enabled
# kitty-scrollback.nvim Kitten alias # 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 # 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 # 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 # 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 # disable the stupid notification
confirm_os_window_close 0 confirm_os_window_close 0
+4 -4
View File
@@ -14,9 +14,9 @@ binds {
Mod+E repeat=false { spawn "dolphin" "--new-window"; } Mod+E repeat=false { spawn "dolphin" "--new-window"; }
Mod+Shift+E repeat=false { spawn "nautilus" "--new-window"; } Mod+Shift+E repeat=false { spawn "nautilus" "--new-window"; }
Mod+W repeat=false { spawn-sh "zen || zen-browser"; } 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+B repeat=false { spawn-sh "pkill -x -n btop || kitty-floating -e btop"; }
Mod+Shift+T repeat=false { spawn "ghostty" "+new-window"; } Mod+Shift+T repeat=false { spawn "kitty-floating"; }
Mod+Shift+Return repeat=false { spawn "ghostty" "+new-window"; } Mod+Shift+Return repeat=false { spawn "kitty-floating"; }
Mod+T repeat=false { spawn "kitty"; } Mod+T repeat=false { spawn "kitty"; }
Mod+Return repeat=false { spawn "kitty"; } Mod+Return repeat=false { spawn "kitty"; }
Mod+Shift+W repeat=false { spawn "wallreel"; } Mod+Shift+W repeat=false { spawn "wallreel"; }
@@ -163,7 +163,7 @@ binds {
// Session // Session
Mod+K allow-inhibiting=false repeat=false { quit; } 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"; } Mod+L allow-inhibiting=false repeat=false { spawn "loginctl" "lock-session"; }
} }
@@ -20,6 +20,7 @@ window-rule {
window-rule { window-rule {
match app-id="org.wezfurlong.wezterm" match app-id="org.wezfurlong.wezterm"
match app-id="com.mitchellh.ghostty" match app-id="com.mitchellh.ghostty"
match app-id="kitty-floating"
open-floating true open-floating true
default-column-width { proportion 0.5; } default-column-width { proportion 0.5; }
} }
@@ -61,6 +62,13 @@ window-rule {
open-floating true open-floating true
} }
// QQ
window-rule {
match app-id="QQ" title="资料卡"
match app-id="QQ" title="天气"
open-focused false
}
// Block from recording // Block from recording
window-rule { window-rule {
match app-id="org.mozilla.Thunderbird" match app-id="org.mozilla.Thunderbird"
+11 -4
View File
@@ -91,10 +91,11 @@ layer-rule {
} }
} }
cursor { window-rule {
xcursor-theme "Bibata-Modern-Ice" match is-floating=true
xcursor-size 24 background-effect {
hide-when-typing xray false
}
} }
// I love rounded corners // I love rounded corners
@@ -103,6 +104,12 @@ window-rule {
clip-to-geometry true clip-to-geometry true
} }
cursor {
xcursor-theme "Bibata-Modern-Ice"
xcursor-size 24
hide-when-typing
}
recent-windows { recent-windows {
highlight { highlight {
active-color "#89b4fa" active-color "#89b4fa"
+17 -8
View File
@@ -1,17 +1,26 @@
[Settings] [Settings]
gtk-theme-name=catppuccin-mocha-blue-standard+default gtk-application-prefer-dark-theme=true
gtk-icon-theme-name=Papirus gtk-button-images=true
gtk-font-name=Sarasa UI SC 10 gtk-cursor-blink=true
gtk-cursor-blink-time=1000
gtk-cursor-theme-name=Bibata-Modern-Ice gtk-cursor-theme-name=Bibata-Modern-Ice
gtk-cursor-theme-size=24 gtk-cursor-theme-size=24
gtk-toolbar-style=GTK_TOOLBAR_ICONS gtk-decoration-layout=icon:minimize,maximize,close
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR gtk-enable-animations=true
gtk-button-images=0
gtk-menu-images=0
gtk-enable-event-sounds=1 gtk-enable-event-sounds=1
gtk-enable-input-feedback-sounds=0 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-antialias=1
gtk-xft-dpi=122880
gtk-xft-hinting=1 gtk-xft-hinting=1
gtk-xft-hintstyle=hintslight gtk-xft-hintstyle=hintslight
gtk-xft-rgba=rgb gtk-xft-rgba=rgb
gtk-application-prefer-dark-theme=1
+11 -4
View File
@@ -1,7 +1,14 @@
[Settings] [Settings]
gtk-theme-name=catppuccin-mocha-blue-standard+default gtk-application-prefer-dark-theme=true
gtk-icon-theme-name=Papirus gtk-cursor-blink=true
gtk-font-name=Sarasa UI SC 10 gtk-cursor-blink-time=1000
gtk-cursor-theme-name=Bibata-Modern-Ice gtk-cursor-theme-name=Bibata-Modern-Ice
gtk-cursor-theme-size=24 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 fillColor: Colors.mRed
property color _actualColor: Colors.mRed property color _actualColor: Colors.mRed
property bool _expand: mouseArea.containsMouse 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) implicitHeight: Math.max(symbolIcon.implicitHeight, textLabel.implicitHeight)
implicitWidth: height + expander.implicitWidth implicitWidth: height + expander.implicitWidth
Connections {
target: Niri
onCastOutputsListChanged: {
root.displayText = Niri.castOutputs.length > 0 ? Niri.castOutputs.join(", ") : "Casting";
}
}
SequentialAnimation { SequentialAnimation {
id: blinkAnimation id: blinkAnimation
running: RecordService.isRecording running: root.visible
loops: Animation.Infinite loops: Animation.Infinite
ColorAnimation { ColorAnimation {
@@ -70,7 +78,7 @@ Item {
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left anchors.left: parent.left
anchors.leftMargin: 5 anchors.leftMargin: 5
text: RecordService.recordingDisplay || "Recording" text: root.displayText
color: root.fillColor color: root.fillColor
} }
@@ -92,12 +100,6 @@ Item {
anchors.fill: parent anchors.fill: parent
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor
hoverEnabled: true hoverEnabled: true
acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton
onClicked: (mouse) => {
if (mouse.button === Qt.LeftButton)
RecordService.startOrStop();
}
} }
Behavior on _actualColor { Behavior on _actualColor {
@@ -18,7 +18,7 @@ Singleton {
id: process id: process
running: false running: false
command: ["ghostty", "+new-window", "-e", "btop"] command: ["kitty-floating", "-e", "btop"]
} }
} }
@@ -35,11 +35,16 @@ Singleton {
}) })
property var workspaceCache: ({ property var workspaceCache: ({
}) })
property var castCache: ({
})
property var castOutputs: []
property bool isCasting: false
signal workspaceChanged() signal workspaceChanged()
signal activeWindowChanged() signal activeWindowChanged()
signal windowListChanged() signal windowListChanged()
signal outputsChanged() signal outputsChanged()
signal castOutputsListChanged()
function initialize() { function initialize() {
niriEventStream.connected = true; 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) { function switchToWorkspace(workspace) {
try { try {
Quickshell.execDetached(["niri", "msg", "action", "focus-workspace", workspace.idx.toString()]); Quickshell.execDetached(["niri", "msg", "action", "focus-workspace", workspace.idx.toString()]);
@@ -578,6 +656,12 @@ Singleton {
_queryDisplayScales(); _queryDisplayScales();
else if (event.ScreenshotCaptured) else if (event.ScreenshotCaptured)
_handleScreenshotCaptured(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) { } catch (e) {
Logger.e("NiriService", "Error parsing event stream:", e, data); Logger.e("NiriService", "Error parsing event stream:", e, data);
} }
@@ -39,7 +39,7 @@ Singleton {
function openNote(path) { function openNote(path) {
recentNotePath = path; recentNotePath = path;
Quickshell.execDetached(["ghostty", "+new-window", "-e", "helix", path]); Quickshell.execDetached(["kitty-floating", "-e", "helix", path]);
} }
function openRecent() { 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 if (( $+commands[bat] )); then
export BAT_THEME="Catppuccin Mocha" export BAT_THEME="Catppuccin Mocha"
export BAT_STYLE="default,-numbers"
fi fi
+6 -3
View File
@@ -180,17 +180,20 @@ if (( $+commands[git] )); then
print -r -- "$repo" print -r -- "$repo"
} }
gc() { gcl() {
local repo local repo
repo=$(uy_git_repo_from_clipboard) || return 1 repo=$(uy_git_repo_from_clipboard) || return 1
git clone "$repo" git clone "$repo"
} }
pingo() { pingo() {
cd "$HOME/Repositories/Uni" || return 1 builtin cd "$HOME/Repositories/Uni" || return 1
local repo local repo
repo=$(uy_git_repo_from_clipboard) || return 1 repo=$(uy_git_repo_from_clipboard) || return 1
local dir_name="${repo:t:r}" 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 if [[ ! -d "$dir_name" ]]; then
git clone "$repo" || return 1 git clone "$repo" || return 1
fi fi
@@ -201,7 +204,7 @@ if (( $+commands[git] )); then
disown disown
else else
echo "Opening method missing or invalid" echo "Opening method missing or invalid"
cd "$dir_name" builtin cd "$dir_name"
fi fi
} }
fi fi
+1
View File
@@ -45,6 +45,7 @@ fi
[[ -f "$HOME/.cargo/env" ]] && source "$HOME/.cargo/env" [[ -f "$HOME/.cargo/env" ]] && source "$HOME/.cargo/env"
(( $+commands[opam] )) && eval "$(opam env)" (( $+commands[opam] )) && eval "$(opam env)"
prepend_path "$HOME/.cargo/bin"
prepend_path "$HOME/go/bin" prepend_path "$HOME/go/bin"
prepend_path "$HOME/.local/bin" prepend_path "$HOME/.local/bin"
prepend_path "$HOME/.local/scripts" prepend_path "$HOME/.local/scripts"
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"label": "lock", "label": "lock",
"action": "hyprlock &", "action": "loginctl lock-session",
"text": "Lock", "text": "Lock",
"keybind": "l" "keybind": "l"
} }
@@ -24,7 +24,7 @@
} }
{ {
"label": "suspend", "label": "suspend",
"action": "sleep 0.1 && systemctl suspend", "action": "systemctl suspend",
"text": "Suspend", "text": "Suspend",
"keybind": "u" "keybind": "u"
} }
+13 -13
View File
@@ -78,8 +78,8 @@ keymap = [
], desc = "Toggle the current selection state" }, ], desc = "Toggle the current selection state" },
{ on = "v", run = "toggle_all", desc = "Enter visual mode (selection mode)" }, { on = "v", run = "toggle_all", desc = "Enter visual mode (selection mode)" },
{ on = "V", run = "visual_mode --unset", desc = "Enter visual mode (unset mode)" }, { on = "V", run = "visual_mode --unset", desc = "Enter visual mode (unset mode)" },
# { on = "<C-a>", run = "select_all --state=true", desc = "Select all files" }, { on = "<C-a>", run = "toggle_all --state=true", desc = "Select all files" },
# { on = "<C-r>", run = "select_all --state=none", desc = "Inverse selection of all files" }, { on = "<C-r>", run = "toggle_all", desc = "Inverse selection of all files" },
# Find # Find
{ on = "<C-f>", run = "plugin fzf", desc = "Jump to a directory or reveal a file using fzf" }, { on = "<C-f>", run = "plugin fzf", desc = "Jump to a directory or reveal a file using fzf" },
@@ -360,9 +360,9 @@ keymap = [
[spot] [spot]
keymap = [ keymap = [
# Navigation # Navigation
{ on = "u", run = "arrow -1", desc = "Move up" }, { on = "k", run = "arrow -1", desc = "Move up" },
{ on = "<Up>", run = "arrow -1", desc = "Move up" }, { on = "<Up>", run = "arrow -1", desc = "Move up" },
{ on = "e", run = "arrow 1", desc = "Move down" }, { on = "j", run = "arrow 1", desc = "Move down" },
{ on = "<Down>", run = "arrow 1", desc = "Move down" }, { on = "<Down>", run = "arrow 1", desc = "Move down" },
# Close # Close
@@ -385,8 +385,8 @@ keymap = [
{ on = "<C-c>", run = "close", desc = "Close task manager" }, { on = "<C-c>", run = "close", desc = "Close task manager" },
{ on = "w", run = "close", desc = "Close task manager" }, { on = "w", run = "close", desc = "Close task manager" },
{ on = "u", run = "arrow -1", desc = "Move cursor up" }, { on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "e", run = "arrow 1", desc = "Move cursor down" }, { on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" }, { on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" }, { on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
@@ -407,8 +407,8 @@ keymap = [
{ on = "<C-c>", run = "close", desc = "Cancel selection" }, { on = "<C-c>", run = "close", desc = "Cancel selection" },
{ on = "<Enter>", run = "close --submit", desc = "Submit the selection" }, { on = "<Enter>", run = "close --submit", desc = "Submit the selection" },
{ on = "u", run = "arrow -1", desc = "Move cursor up" }, { on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "e", run = "arrow 1", desc = "Move cursor down" }, { on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" }, { on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" }, { on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
@@ -499,15 +499,15 @@ keymap = [
{ on = "P", run = "paste --before", desc = "Paste the copied characters before the cursor" }, { on = "P", run = "paste --before", desc = "Paste the copied characters before the cursor" },
# Undo/Redo # Undo/Redo
{ on = "l", run = "undo", desc = "Undo the last operation" }, { on = "u", run = "undo", desc = "Undo the last operation" },
{ on = "<C-r>", run = "redo", desc = "Redo the last operation" }, { on = "U", run = "redo", desc = "Redo the last operation" },
# Help # Help
{ on = "~", run = "help", desc = "Open help" }, { on = "~", run = "help", desc = "Open help" },
{ on = "<F1>", run = "help", desc = "Open help" }, { on = "<F1>", run = "help", desc = "Open help" },
] ]
[completion] [cmp]
keymap = [ keymap = [
{ on = "<C-c>", run = "close", desc = "Cancel completion" }, { on = "<C-c>", run = "close", desc = "Cancel completion" },
@@ -537,8 +537,8 @@ keymap = [
{ on = "<C-c>", run = "close", desc = "Hide the help" }, { on = "<C-c>", run = "close", desc = "Hide the help" },
# Navigation # Navigation
{ on = "u", run = "arrow -1", desc = "Move cursor up" }, { on = "k", run = "arrow -1", desc = "Move cursor up" },
{ on = "e", run = "arrow 1", desc = "Move cursor down" }, { on = "j", run = "arrow 1", desc = "Move cursor down" },
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" }, { on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" }, { on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
+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" | bash -s -- "$0"
exit $? 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 <!-- update-full-list:start
set -euo pipefail set -euo pipefail
@@ -94,6 +51,49 @@ echo "Updated Full list in: $script_path"
update-full-list:end --> 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 ## Full list
``` ```
@@ -106,8 +106,10 @@ archiso
archlinux-contrib archlinux-contrib
archlinuxcn-keyring archlinuxcn-keyring
ark ark
av1an
awww awww
axel axel
azure-cli
base base
base-devel base-devel
bash-completion bash-completion
@@ -138,11 +140,13 @@ chafa
chaotic-keyring chaotic-keyring
chaotic-mirrorlist chaotic-mirrorlist
chromium chromium
chwd
claude-code claude-code
cloc cloc
cmake cmake
cmatrix-git cmatrix-git
composer composer
compsize
corectrl corectrl
cowfortune cowfortune
cpu-x cpu-x
@@ -181,7 +185,9 @@ fcitx5-qt
fd fd
fdkaac fdkaac
ffmpeg-full ffmpeg-full
ffms2
ffnvcodec-headers ffnvcodec-headers
ffvship
figlet figlet
filelight filelight
fish fish
@@ -197,6 +203,7 @@ frei0r-plugins
fuzzel fuzzel
fzf fzf
gamemode gamemode
gcc14
gdb gdb
gdu gdu
gearlever gearlever
@@ -274,10 +281,11 @@ lib32-nvidia-utils
lib32-opencl-nvidia lib32-opencl-nvidia
lib32-vulkan-icd-loader lib32-vulkan-icd-loader
lib32-vulkan-intel lib32-vulkan-intel
libc++
libdbusmenu-lxqt libdbusmenu-lxqt
libggml-git
libguestfs libguestfs
libreoffice-still-zh-cn libreoffice-still-zh-cn
libspng
libva-intel-driver libva-intel-driver
libva-nvidia-driver libva-nvidia-driver
libva-utils libva-utils
@@ -289,8 +297,7 @@ linux-cachyos-headers
linux-firmware linux-firmware
linux-lts linux-lts
linux-lts-headers linux-lts-headers
linuxqq-nt linuxqq
llama-cpp-git
llmfit-bin llmfit-bin
localsend localsend
lolcat lolcat
@@ -304,7 +311,7 @@ man-pages
mangohud mangohud
matugen matugen
meson meson
mission-center mkvtoolnix-cli
modprobed-db modprobed-db
moonlight-qt moonlight-qt
moreutils moreutils
@@ -314,6 +321,7 @@ mpd-mpris
mpv-full mpv-full
mpv-mpris mpv-mpris
msedit msedit
namcap
nasm nasm
nautilus nautilus
nautilus-share nautilus-share
@@ -332,7 +340,9 @@ nvidia-prime
nvidia-settings nvidia-settings
nvidia-utils nvidia-utils
nvme-cli nvme-cli
nvtop
nwg-look nwg-look
oavif
obs-studio obs-studio
obsidian obsidian
okular okular
@@ -381,6 +391,8 @@ python-yaml
qbittorrent-enhanced qbittorrent-enhanced
qdiskinfo qdiskinfo
qemu-full qemu-full
qemu-user-static
qemu-user-static-binfmt
qt5-graphicaleffects qt5-graphicaleffects
qt5-quickcontrols qt5-quickcontrols
qt5-quickcontrols2 qt5-quickcontrols2
@@ -407,6 +419,7 @@ quickshell-git
qutebrowser qutebrowser
rclone rclone
reflector reflector
resources
riscv64-linux-gnu-binutils riscv64-linux-gnu-binutils
riscv64-linux-gnu-gcc riscv64-linux-gnu-gcc
rsync rsync
@@ -486,6 +499,7 @@ unrar
usbip usbip
uv uv
valgrind valgrind
vapoursynth-plugin-vship-cuda-git
ventoy-bin ventoy-bin
vesktop-bin vesktop-bin
vicinae vicinae
@@ -568,6 +582,7 @@ yt-dlp
zellij zellij
zen-browser-bin zen-browser-bin
zenity zenity
zig
zoxide zoxide
zram-generator zram-generator
zsh zsh