diff --git a/home.nix b/home.nix index 5a9bc08..9514662 100644 --- a/home.nix +++ b/home.nix @@ -69,6 +69,7 @@ in { # audio audacity pavucontrol + openai-whisper # video mpv other-transcode @@ -335,6 +336,7 @@ in { rev = "2e8079e4a7f6315de99a5b968ed5fda479f1f39c"; hash = "sha256-wHTR8frrFL3cUD8fvSTO+m/77wQ7auVjTZ1uCTB/UzU="; }; + quick-folder = ./quick-folder.yazi; }; settings = { plugin.prepend_previewers = [ @@ -343,6 +345,27 @@ in { run = "epub-preview"; } ]; + # larger rename box + input.rename_offset = [0 1 200 3]; + }; + keymap = { + mgr.prepend_keymap = [ + { + on = ["g" "j"]; + run = "cd ~/Johnny.Decimal"; + desc = "Go to Johnny Decimal"; + } + { + on = "A"; + run = "create --dir"; + desc = "Create directory"; + } + { + on = "b"; + run = ["plugin quick-folder"]; + desc = "Create directory with name of hovered file and move selected files into it"; + } + ]; }; }; diff --git a/quick-folder.yazi/LICENSE b/quick-folder.yazi/LICENSE new file mode 100644 index 0000000..6b62ce9 --- /dev/null +++ b/quick-folder.yazi/LICENSE @@ -0,0 +1,2 @@ +Copyright 2025 Khaïs COLIN +All rights reserved diff --git a/quick-folder.yazi/README.md b/quick-folder.yazi/README.md new file mode 100644 index 0000000..cf7c83c --- /dev/null +++ b/quick-folder.yazi/README.md @@ -0,0 +1,5 @@ +Create a new folder and quickly move files into it + +The name of the new folder is the first selected file, or the hovered file if no files are selected, and can be edited before creation + +The files moved into the new folder are all selected files, or the hovered file if no files are selected diff --git a/quick-folder.yazi/main.lua b/quick-folder.yazi/main.lua new file mode 100644 index 0000000..b9f083d --- /dev/null +++ b/quick-folder.yazi/main.lua @@ -0,0 +1,60 @@ +local get_hovered_url = ya.sync(function(state) + if not state.hovered_url then + state.hovered_url = cx.active.current.hovered.url + end + return Url(state.hovered_url) +end) + +local get_selected_files = ya.sync(function(state) + local selected = {} + for _, url in pairs(cx.active.selected) do + selected[#selected + 1] = url + end + return selected +end) + +local get_wanted_dir_name = function() + local url = get_selected_files()[0] or get_hovered_url() + local name = url.stem + local edited, event = ya.input { + title = "Dir name:", + value = name, + position = {"hovered", x = 0, y = 0, w = 200, h = 3} + } + ya.dbg("got dir name from user", edited, "with confirm", event) + if event == 1 then -- did user confirm? + return Url(edited) + else + return undefined + end +end + +local get_files_to_move = function() + local files_to_move = get_selected_files() + if #files_to_move == 0 then + files_to_move[1] = get_hovered_url() + end + return files_to_move +end + +return { + entry = function(state, job) + state.hovered_url = undefined + local wanted_dir_name = get_wanted_dir_name() + if not wanted_dir_name then + return + end + local ok, err = fs.create("dir", wanted_dir_name) + if not ok then + ya.notify { title = "Failed to create directory", content = err } + return + end + local files_to_move = get_files_to_move() + ya.dbg("files to move", files_to_move) + for i, file in pairs(files_to_move) do + local dest = wanted_dir_name:join(file.name) + ya.dbg("moving file", i, "of", #files_to_move, file, "to", dest) + os.rename(tostring(file), tostring(dest)) + end + end +} diff --git a/void.nix b/void.nix index 39fa814..6d578d0 100644 --- a/void.nix +++ b/void.nix @@ -405,6 +405,7 @@ forceSSL = true; }; "nextcloud.005540.xyz" = { + locations."/".proxyWebsockets = true; enableACME = true; forceSSL = true; }; diff --git a/wm/river.nix b/wm/river.nix index 458a407..5cfcd35 100644 --- a/wm/river.nix +++ b/wm/river.nix @@ -31,6 +31,8 @@ in { focus-follows-cursor = "normal"; map = { normal = { + # transcription + "None Insert" = "spawn ~/whisper_tests/script.fish"; # screen lock & suspend "Control+Alt L" = "spawn '${lock-command}'"; "Control+Alt+Shift L" = "spawn '${lock-command} & systemctl suspend'";