Compare commits
9 Commits
6f90fe5d28
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
311a89c0e6
|
|||
|
874311fcb0
|
|||
|
e648c1f1a6
|
|||
|
f789df0f02
|
|||
|
417d48f0f5
|
|||
|
a60f923e59
|
|||
|
fff6a726d8
|
|||
|
ac91f71a92
|
|||
|
5fefee5e2c
|
@@ -37,7 +37,7 @@ 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~~ | **vicinae**
|
||||
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
include kitty.conf
|
||||
|
||||
remember_window_size false
|
||||
initial_window_width 960
|
||||
initial_window_height 720
|
||||
|
||||
window_padding_width 5
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Executable
+3
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Submodule config/wallpaper/Pictures/backgrounds updated: deb1b1ec1c...5984c56815
@@ -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"
|
||||
}
|
||||
|
||||
@@ -78,8 +78,8 @@ keymap = [
|
||||
], desc = "Toggle the current selection state" },
|
||||
{ on = "v", run = "toggle_all", desc = "Enter visual mode (selection 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-r>", run = "select_all --state=none", desc = "Inverse selection of all files" },
|
||||
{ on = "<C-a>", run = "toggle_all --state=true", desc = "Select all files" },
|
||||
{ on = "<C-r>", run = "toggle_all", desc = "Inverse selection of all files" },
|
||||
|
||||
# Find
|
||||
{ on = "<C-f>", run = "plugin fzf", desc = "Jump to a directory or reveal a file using fzf" },
|
||||
@@ -360,9 +360,9 @@ keymap = [
|
||||
[spot]
|
||||
keymap = [
|
||||
# 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 = "e", run = "arrow 1", desc = "Move down" },
|
||||
{ on = "j", run = "arrow 1", desc = "Move down" },
|
||||
{ on = "<Down>", run = "arrow 1", desc = "Move down" },
|
||||
|
||||
# Close
|
||||
@@ -385,8 +385,8 @@ keymap = [
|
||||
{ on = "<C-c>", run = "close", desc = "Close task manager" },
|
||||
{ on = "w", run = "close", desc = "Close task manager" },
|
||||
|
||||
{ on = "u", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ on = "e", run = "arrow 1", desc = "Move cursor down" },
|
||||
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
|
||||
|
||||
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
|
||||
@@ -407,8 +407,8 @@ keymap = [
|
||||
{ on = "<C-c>", run = "close", desc = "Cancel selection" },
|
||||
{ on = "<Enter>", run = "close --submit", desc = "Submit the selection" },
|
||||
|
||||
{ on = "u", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ on = "e", run = "arrow 1", desc = "Move cursor down" },
|
||||
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
|
||||
|
||||
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ 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" },
|
||||
|
||||
# Undo/Redo
|
||||
{ on = "l", run = "undo", desc = "Undo the last operation" },
|
||||
{ on = "<C-r>", run = "redo", desc = "Redo the last operation" },
|
||||
{ on = "u", run = "undo", desc = "Undo the last operation" },
|
||||
{ on = "U", run = "redo", desc = "Redo the last operation" },
|
||||
|
||||
# Help
|
||||
{ on = "~", run = "help", desc = "Open help" },
|
||||
{ on = "<F1>", run = "help", desc = "Open help" },
|
||||
]
|
||||
|
||||
[completion]
|
||||
[cmp]
|
||||
|
||||
keymap = [
|
||||
{ on = "<C-c>", run = "close", desc = "Cancel completion" },
|
||||
@@ -537,8 +537,8 @@ keymap = [
|
||||
{ on = "<C-c>", run = "close", desc = "Hide the help" },
|
||||
|
||||
# Navigation
|
||||
{ on = "u", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ on = "e", run = "arrow 1", desc = "Move cursor down" },
|
||||
{ on = "k", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ on = "j", run = "arrow 1", desc = "Move cursor down" },
|
||||
|
||||
{ on = "<Up>", run = "arrow -1", desc = "Move cursor up" },
|
||||
{ on = "<Down>", run = "arrow 1", desc = "Move cursor down" },
|
||||
|
||||
@@ -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._
|
||||
@@ -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 构建的项目可能需要较大幅度地修改编译参数和流程, 实用价值不高.
|
||||
@@ -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
|
||||
@@ -1,7 +0,0 @@
|
||||
things I have installed:
|
||||
|
||||
in addition to everything in `./hyprland-ricing.txt`:
|
||||
|
||||
xwayland-satellite
|
||||
wlsunset
|
||||
wezterm # replaces ghostty
|
||||
+62
-47
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user