From f80d83bbd772ec498cc1641b11bde4254794276e Mon Sep 17 00:00:00 2001 From: js0ny Date: Fri, 14 Nov 2025 08:17:38 +0000 Subject: [PATCH] feat: script: edit-clipboard --- home/.chezmoiignore.tmpl | 1 + .../ipython/profile_default/startup/keymap.py | 49 ------------- home/dot_config/neovide/config.toml | 5 +- .../nvim/lua/plugins/mod/snacks-nvim.lua | 18 ++--- nixcfgs/modules/nixos/desktop/de/gnome.nix | 1 - nixcfgs/modules/nixos/desktop/de/hyprland.nix | 1 - nixcfgs/modules/nixos/desktop/xremap.nix | 29 ++++++-- nixcfgs/users/js0ny/packages/gui.nix | 1 - .../programs/desktop/wayland-wm/packages.nix | 2 +- .../programs/desktop/wayland-wm/swww.nix | 3 + .../users/js0ny/programs/edit-clipboard.nix | 68 +++++++++++++++++++ nixcfgs/users/js0ny/programs/neovide.nix | 22 ++++++ nixcfgs/users/js0ny/programs/pdf2zh.nix | 2 +- nixcfgs/users/js0ny/zephyrus.nix | 2 + 14 files changed, 133 insertions(+), 71 deletions(-) create mode 100644 nixcfgs/users/js0ny/programs/desktop/wayland-wm/swww.nix create mode 100644 nixcfgs/users/js0ny/programs/edit-clipboard.nix create mode 100644 nixcfgs/users/js0ny/programs/neovide.nix diff --git a/home/.chezmoiignore.tmpl b/home/.chezmoiignore.tmpl index f181bd5..785428c 100644 --- a/home/.chezmoiignore.tmpl +++ b/home/.chezmoiignore.tmpl @@ -62,6 +62,7 @@ vim:ft=gotmpl .config/krunnerrc .config/fcitx5 .config/niri + .config/neovide .local/share/kio/** .local/share/fonts/** {{ end }} diff --git a/home/dot_config/ipython/profile_default/startup/keymap.py b/home/dot_config/ipython/profile_default/startup/keymap.py index 2dae6da..6daa102 100644 --- a/home/dot_config/ipython/profile_default/startup/keymap.py +++ b/home/dot_config/ipython/profile_default/startup/keymap.py @@ -10,55 +10,6 @@ key_bindings = KeyBindings() def in_navigation_mode(): return ip.pt_app.app.vi_state.input_mode == InputMode.NAVIGATION -# colemak keymap hnei -@key_bindings.add("n", filter=in_navigation_mode) -def _(event): - "Move cursor down by visual line" - event.current_buffer.auto_down(count=event.arg) - -@key_bindings.add("e", filter=in_navigation_mode) -def _(event): - "Move cursor up by visual line" - event.current_buffer.auto_up(count=event.arg) - -@key_bindings.add("i", filter=in_navigation_mode) -def _(event): - "Move cursor right" - event.current_buffer.cursor_right(count=event.arg) - -# Insert with 'l' and 'L' -@key_bindings.add("l", filter=in_navigation_mode) -def _(event): - "Enter insert mode (similar position to 'i' in Colemak)" - event.app.vi_state.input_mode = InputMode.INSERT - -@key_bindings.add("L", filter=in_navigation_mode) -def _(event): - "Enter insert mode at the beginning of the line" - event.current_buffer.cursor_position += event.current_buffer.document.get_start_of_line_position() - -# Ne[k]st -@key_bindings.add("k", filter=in_navigation_mode) -def _(event): - "Find next match" - event.current_buffer.forward_search() - -@key_bindings.add("K", filter=in_navigation_mode) -def _(event): - "Find previous match" - event.current_buffer.reverse_search() - -# [J]ump -@key_bindings.add("j", filter=in_navigation_mode) -def _(event): - "Move to end of next word" - event.current_buffer.cursor_right_word() - -@key_bindings.add("J", filter=in_navigation_mode) -def _(event): - "Move to end of next word with capital E" - event.current_buffer.cursor_right_word(end=True) - # Yank to end of line with 'Y' @key_bindings.add("Y", filter=in_navigation_mode) def _(event): diff --git a/home/dot_config/neovide/config.toml b/home/dot_config/neovide/config.toml index d73a2f8..97ad19e 100644 --- a/home/dot_config/neovide/config.toml +++ b/home/dot_config/neovide/config.toml @@ -18,8 +18,5 @@ vsync = true wsl = false [font] -normal = [ - "Maple Mono NF", - "Iosevka Nerd Font", -] # Will use the bundled Fira Code Nerd Font by default +normal = ["Maple Mono NF CN",] size = 14.0 diff --git a/home/dot_config/nvim/lua/plugins/mod/snacks-nvim.lua b/home/dot_config/nvim/lua/plugins/mod/snacks-nvim.lua index a59bb56..9ba8a04 100644 --- a/home/dot_config/nvim/lua/plugins/mod/snacks-nvim.lua +++ b/home/dot_config/nvim/lua/plugins/mod/snacks-nvim.lua @@ -88,13 +88,13 @@ return { img_dirs = { "90 - System/Assets" }, }, }, - -- keys = { - -- { - -- "ft", - -- function() - -- require("snacks").explorer() - -- end, - -- desc = "Toggle File Explorer", - -- }, - -- }, + keys = { + { + "ba", + function() + require("snacks").dashboard() + end, + desc = "Toggle Dashboard"; + }, + }, } diff --git a/nixcfgs/modules/nixos/desktop/de/gnome.nix b/nixcfgs/modules/nixos/desktop/de/gnome.nix index 4e85a21..f80ecfc 100644 --- a/nixcfgs/modules/nixos/desktop/de/gnome.nix +++ b/nixcfgs/modules/nixos/desktop/de/gnome.nix @@ -13,5 +13,4 @@ papers gtop ]; - services.xremap.withGnome = true; } diff --git a/nixcfgs/modules/nixos/desktop/de/hyprland.nix b/nixcfgs/modules/nixos/desktop/de/hyprland.nix index 544666b..5bcfe91 100644 --- a/nixcfgs/modules/nixos/desktop/de/hyprland.nix +++ b/nixcfgs/modules/nixos/desktop/de/hyprland.nix @@ -11,5 +11,4 @@ hyprpolkitagent xdg-desktop-portal-wlr ]; - services.xremap.withHypr = true; } diff --git a/nixcfgs/modules/nixos/desktop/xremap.nix b/nixcfgs/modules/nixos/desktop/xremap.nix index 6e4ca4b..2c6b67b 100644 --- a/nixcfgs/modules/nixos/desktop/xremap.nix +++ b/nixcfgs/modules/nixos/desktop/xremap.nix @@ -12,6 +12,7 @@ services.xremap = { enable = true; + withNiri = true; # modmap: single key serviceMode = "user"; userName = "js0ny"; @@ -39,13 +40,33 @@ ]; keymap = [ { - name = "Telegram Navigator"; + name = "IM Navigator - Alt-Up/Down"; application = { - only = ["org.telegram.desktop" "telegram-desktop"]; + only = ["org.telegram.desktop" "telegram-desktop" "wechat"]; }; remap = { - "M-j" = "M-down"; # alt.j = macro(C-tab) - "M-k" = "M-up"; # alt.k = C-S-tab + "M-j" = "M-down"; + "M-k" = "M-up"; + }; + } + { + name = "IM Navigator - Ctrl-Up/Down"; + application = { + only = ["qq"]; + }; + remap = { + "M-j" = "C-down"; + "M-k" = "C-up"; + }; + } + { + name = "Zotero PDF Navigator"; + application = { + only = ["zotero"]; + }; + remap = { + "M-j" = "KEY_PAGEDOWN"; + "M-k" = "KEY_PAGEUP"; }; } ]; diff --git a/nixcfgs/users/js0ny/packages/gui.nix b/nixcfgs/users/js0ny/packages/gui.nix index 8716466..b8037fd 100644 --- a/nixcfgs/users/js0ny/packages/gui.nix +++ b/nixcfgs/users/js0ny/packages/gui.nix @@ -37,7 +37,6 @@ vmopts = ''-Dawt.toolkit.name=WLToolkit''; }) localsend - neovide cherry-studio kdePackages.kdeconnect-kde picard diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix index 4858930..88edf43 100644 --- a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/packages.nix @@ -35,12 +35,12 @@ in { imports = [ ../../rofi.nix ./waybar.nix + ./swww.nix ]; home.packages = with pkgs; [ swayidle # Screensaver dunst # Notification daemon cliphist # Clipboard daemon - swww # Wallpaper daemon wmname # swayidleWrapper brightnessctl diff --git a/nixcfgs/users/js0ny/programs/desktop/wayland-wm/swww.nix b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/swww.nix new file mode 100644 index 0000000..4b1bfe2 --- /dev/null +++ b/nixcfgs/users/js0ny/programs/desktop/wayland-wm/swww.nix @@ -0,0 +1,3 @@ +{...}: { + services.swww.enable = true; +} diff --git a/nixcfgs/users/js0ny/programs/edit-clipboard.nix b/nixcfgs/users/js0ny/programs/edit-clipboard.nix new file mode 100644 index 0000000..99f1bbe --- /dev/null +++ b/nixcfgs/users/js0ny/programs/edit-clipboard.nix @@ -0,0 +1,68 @@ +{pkgs, ...}: let + editClipboard = pkgs.writeShellScriptBin "edit-clipboard" '' + #!/usr/bin/env bash + # POSIX-compliant edit-clipboard function + # Reads clipboard content, opens it in $EDITOR, and writes back to clipboard + + edit-clipboard() { + # Detect clipboard command based on platform + if command -v pbpaste >/dev/null 2>&1; then + # macOS + PASTE_CMD="pbpaste" + COPY_CMD="pbcopy" + elif command -v wl-paste >/dev/null 2>&1; then + # Wayland + PASTE_CMD="wl-paste" + COPY_CMD="wl-copy" + elif command -v xclip >/dev/null 2>&1; then + # X11 (xclip) + PASTE_CMD="xclip -selection clipboard -o" + COPY_CMD="xclip -selection clipboard -i" + elif command -v xsel >/dev/null 2>&1; then + # X11 (xsel) + PASTE_CMD="xsel --clipboard --output" + COPY_CMD="xsel --clipboard --input" + else # TODO: Test it on WSL2 + echo "Error: No clipboard utility found" >&2 + echo "Install one of: pbpaste/pbcopy (macOS), wl-clipboard (Wayland), xclip, or xsel (X11)" >&2 + return 1 + fi + + # Create temporary file + TMPFILE=$(mktemp /tmp/clipboard.XXXXXX) || { + echo "Error: Failed to create temporary file" >&2 + return 1 + } + + # Read clipboard into temp file + $PASTE_CMD > "$TMPFILE" || { + echo "Error: Failed to read from clipboard" >&2 + rm -f "$TMPFILE" + return 1 + } + + # Open in editor + "''${EDITOR:-vi}" "$TMPFILE" || { + echo "Error: Editor exited with error" >&2 + rm -f "$TMPFILE" + return 1 + } + + # Write back to clipboard + $COPY_CMD < "$TMPFILE" || { + echo "Error: Failed to write to clipboard" >&2 + rm -f "$TMPFILE" + return 1 + } + + # Cleanup + rm -f "$TMPFILE" + } + + if [ "''${0##*/}" = "edit-clipboard" ] || [ "''${0##*/}" = "edit-clipboard.sh" ]; then + edit-clipboard "$@" + fi + ''; +in { + home.packages = [editClipboard]; +} diff --git a/nixcfgs/users/js0ny/programs/neovide.nix b/nixcfgs/users/js0ny/programs/neovide.nix new file mode 100644 index 0000000..a27a359 --- /dev/null +++ b/nixcfgs/users/js0ny/programs/neovide.nix @@ -0,0 +1,22 @@ +{...}: { + programs.neovide = { + enable = true; + settings = { + fork = true; + ide = true; + maximized = false; + frame = "full"; + no-multigrid = false; + srgb = false; + tabs = true; + theme = "auto"; + title-hidden = true; + vsync = true; + wsl = false; + font = { + normal = ["Maple Mono NF CN"]; + size = 14; + }; + }; + }; +} diff --git a/nixcfgs/users/js0ny/programs/pdf2zh.nix b/nixcfgs/users/js0ny/programs/pdf2zh.nix index 75dd442..47a9be7 100644 --- a/nixcfgs/users/js0ny/programs/pdf2zh.nix +++ b/nixcfgs/users/js0ny/programs/pdf2zh.nix @@ -36,7 +36,7 @@ in { home.packages = [pdf2zhRunner]; home.file.".local/share/kio/servicemenus/pdf2zh.desktop" = { - enable = false; # TODO: Write a wrapper for status tracking + enable = true; # TODO: Write a wrapper for status tracking executable = true; text = '' [Desktop Entry] diff --git a/nixcfgs/users/js0ny/zephyrus.nix b/nixcfgs/users/js0ny/zephyrus.nix index 21a0357..8560f57 100644 --- a/nixcfgs/users/js0ny/zephyrus.nix +++ b/nixcfgs/users/js0ny/zephyrus.nix @@ -42,6 +42,8 @@ ./programs/magick.nix ./programs/miniserve.nix ./programs/retroarch.nix + ./programs/neovide.nix + ./programs/edit-clipboard.nix # Desktop Linux ./programs/desktop/plasma