| Hash | Commit message | Author | Date | Files | + | - |
1 | commit 392edd16af1b6de0ec51e6e99e9d529cc3405c13 |
2 | Author: Connor Etherington <[email protected]> |
3 | Date: Fri Dec 15 23:51:20 2023 +0200 |
4 | |
5 | Auto-Commit Update - 20231215 |
6 | --- |
7 | PKGBUILD | 2 +- |
8 | README.md | 2 +- |
9 | lfp-4.1.5-1-x86_64/DEBIAN/control | 8 + |
10 | lfp-4.1.5-1-x86_64/postinst | 2 + |
11 | lfp-4.1.5-1-x86_64/usr/bin/lfp | 4 + |
12 | lfp-4.1.5-1-x86_64/usr/share/doc/lfp/README.md | 169 ++++++ |
13 | lfp-4.1.5-1-x86_64/usr/share/lfp/cleaner | 8 + |
14 | lfp-4.1.5-1-x86_64/usr/share/lfp/lfp | 14 + |
15 | .../usr}/share/lfp/lfp-functions | 0 |
16 | lfp-4.1.5-1-x86_64/usr/share/lfp/lfp-icons | 117 +++++ |
17 | lfp-4.1.5-1-x86_64/usr/share/lfp/lfpcd | 7 + |
18 | lfp-4.1.5-1-x86_64/usr/share/lfp/lfprc | 579 +++++++++++++++++++++ |
19 | ...-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Bin 0 -> 59525 bytes |
20 | lfp-4.1.5-1-x86_64/usr/share/lfp/ocr/ocr.js | 87 ++++ |
21 | lfp-4.1.5-1-x86_64/usr/share/lfp/ocr/package.json | 22 + |
22 | lfp-4.1.5-1-x86_64/usr/share/lfp/ocr/tesseract.js | 53 ++ |
23 | lfp-4.1.5-1-x86_64/usr/share/lfp/scope | 42 ++ |
24 | lfp-4.1.5-1-x86_64/usr/share/licenses/lfp/LICENSE | 27 + |
25 | lfp-4.1.5-1-x86_64/usr/share/man/man1/lfp.1.gz | Bin 0 -> 1916 bytes |
26 | lfpreviewer/recipe/meta.yaml | 29 ++ |
27 | usr/share/doc/lfp/README.md | 2 +- |
28 | 21 files changed, 1171 insertions(+), 3 deletions(-) |
29 | |
30 | diff --git a/PKGBUILD b/PKGBUILD |
31 | index 6d87978..6d177a1 100644 |
32 | --- a/PKGBUILD |
33 | +++ b/PKGBUILD |
34 | @@ -1,7 +1,7 @@ |
35 | # Maintainer: Connor Etherington <[email protected]> |
36 | # --- |
37 | pkgname=lfp |
38 | -pkgver=4.1.4 |
39 | +pkgver=4.1.5 |
40 | pkgrel=1 |
41 | pkgdesc='A wrapper for the lf file manager with in-terminal media previews, on-exit directory changing and much more' |
42 | license=('MIT') |
43 | diff --git a/README.md b/README.md |
44 | index c59564b..c563107 100644 |
45 | --- a/README.md |
46 | +++ b/README.md |
47 | @@ -4,7 +4,7 @@ |
48 | ### `lfp` is a simple wrapper for the `lf` file manager, with built-in file, image, and video previews, as well as on-exit directory changing. |
49 | ### The program makes use of `ueberzug` to preview images, documents, and video thumbnails. Preview behavior can be altered by editing the *scope* file. |
50 | |
51 | -**Version: 4.1.4** |
52 | +**Version: 4.1.5** |
53 | |
54 | *** |
55 | |
56 | diff --git a/lfp-4.1.5-1-x86_64/DEBIAN/control b/lfp-4.1.5-1-x86_64/DEBIAN/control |
57 | new file mode 100644 |
58 | index 0000000..0febbfd |
59 | --- /dev/null |
60 | +++ b/lfp-4.1.5-1-x86_64/DEBIAN/control |
61 | @@ -0,0 +1,8 @@ |
62 | +Package: lfp |
63 | +Version: 4.1.5 |
64 | +Maintainer: © Connor Etherington <[email protected]> |
65 | +Depends: lf, zsh, ffmpeg, graphicsmagick, openslide-tools, ghostscript, bat, fzf, dunst, dialog, xsel, lolcat, python3, python3-docopt, python3-pillow, python3-attr, libxres-dev, python3-setuptools, python3-pip, nodejs |
66 | +Architecture: amd64 |
67 | +Homepage: https://concise.cc/projects/lfp |
68 | +Description: A wrapper for the lf file manager with in-terminal media previews, on-exit directory changing and much more |
69 | + A wrapper for the lf file manager with in-terminal media previews, on-exit directory changing and much more |
70 | diff --git a/lfp-4.1.5-1-x86_64/postinst b/lfp-4.1.5-1-x86_64/postinst |
71 | new file mode 100755 |
72 | index 0000000..b3f169c |
73 | --- /dev/null |
74 | +++ b/lfp-4.1.5-1-x86_64/postinst |
75 | @@ -0,0 +1,2 @@ |
76 | +#!/usr/bin/env bash |
77 | +pip3 install /usr/share/lfp/lfpreviewer-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
78 | diff --git a/lfp-4.1.5-1-x86_64/usr/bin/lfp b/lfp-4.1.5-1-x86_64/usr/bin/lfp |
79 | new file mode 100755 |
80 | index 0000000..512776f |
81 | --- /dev/null |
82 | +++ b/lfp-4.1.5-1-x86_64/usr/bin/lfp |
83 | @@ -0,0 +1,4 @@ |
84 | +#!/usr/bin/env bash |
85 | + |
86 | +trap "/usr/share/lfp/lfp ${@}" EXIT[41m |
87 | + |
88 | diff --git a/lfp-4.1.5-1-x86_64/usr/share/doc/lfp/README.md b/lfp-4.1.5-1-x86_64/usr/share/doc/lfp/README.md |
89 | new file mode 100644 |
90 | index 0000000..d145740 |
91 | --- /dev/null |
92 | +++ b/lfp-4.1.5-1-x86_64/usr/share/doc/lfp/README.md |
93 | @@ -0,0 +1,169 @@ |
94 | + |
95 | +# An lf wrapper, with built-in previews and on-exit directory changing. |
96 | + |
97 | +### `lfp` is a simple wrapper for the `lf` file manager, with built-in file, image, and video previews, as well as on-exit directory changing. |
98 | +### The program makes use of `ueberzug` to preview images, documents, and video thumbnails. Preview behavior can be altered by editing the *scope* file. |
99 | + |
100 | +**Version: 4.1.4** |
101 | + |
102 | +*** |
103 | + |
104 | +![previews](https://gitlab.com/a4to/lfp/-/raw/master/.gitlab/media/previews.gif) |
105 | + |
106 | +## Usage: |
107 | + |
108 | +Run `lfp`. Optionally, a startup directory can be specified by a second argument. By default, `lfp` will launch in your current working directory. |
109 | +Icons for relative file types can be changed by editing the lfp-icons file in *'/usr/share/lfp/lfp-icons'*. |
110 | + |
111 | +**CD on exit:** |
112 | + |
113 | +For on-exit directory changing, add the following line to your bash/zshrc: |
114 | + |
115 | + source '/usr/share/lfp/lfpcd' |
116 | + |
117 | + |
118 | +**LFP OCR:** |
119 | + |
120 | +LFP OCR is a simple OCR script that uses tesseract to extract text from images. It can be used as a standalone script, or as a lfp action. |
121 | +All detected text is copied to your clipboard. |
122 | + |
123 | + |
124 | +![OCR](https://gitlab.com/a4to/lfp/-/raw/master/.gitlab/media/OCR.gif) |
125 | + |
126 | + |
127 | +## Installation |
128 | + |
129 | +### Arch Linux |
130 | + |
131 | +lfp is available in the AUR as `lfp` or `lfp-git` |
132 | + |
133 | + |
134 | +### Manual Installation |
135 | + |
136 | + tmp=$(mktemp -d); |
137 | + git clone https://gitlab.com/a4to/lfp.git ${tmp} && |
138 | + cd ${tmp} && sudo make clean install && cd - && |
139 | + rm -rf ${tmp} >/dev/null 2>&1 || true |
140 | + |
141 | + |
142 | +**To uninstall lfp:** |
143 | + |
144 | + sudo make uninstall |
145 | + |
146 | + |
147 | + |
148 | +## Prerequisites: |
149 | + |
150 | +* `lf`: the file manager |
151 | +* `zsh`: for scripting |
152 | +* `ueberzug`: for image previews |
153 | +* `ghostscript`: for PDF previews |
154 | +* `graphicsmagick`: for SVG and GIF previews |
155 | +* `ffmpeg`: for video file thumbnail previews |
156 | +* `dialog`: required by many functions outside the scope of image and video previews |
157 | +* `dunst`: to receive notifications upon task completion and so forth |
158 | +* `fzf`: for lfp's *fzfp* (fuzzy-finding) and *pushto* (git push) capabilities |
159 | +* `bat`: for text file previews |
160 | +* `git`: for cloning repos from within lfp |
161 | +* `lolcat`: used in lfp's *fzfp* function |
162 | + |
163 | +## Optional Dependencies: |
164 | + |
165 | +* `nodejs`: to make use of lfps built in node actions manager |
166 | +* `python3`: to make use of lfps built in python actions manager |
167 | + |
168 | + |
169 | + |
170 | +## Keybindings |
171 | + |
172 | +### Navigation: |
173 | + |
174 | +* **h**: Left |
175 | +* **j**: Down |
176 | +* **k**: Up |
177 | +* **l**: Right |
178 | + |
179 | + |
180 | +### Main Features and Functions: |
181 | + |
182 | +* **.**: Activate NodeManager |
183 | +* **,**: Activate PyManager |
184 | +* **o**: Activate LFP OCR |
185 | +* **v**: Toggle select all file(s) |
186 | +* **y**: Copy selected file(s) |
187 | +* **c**: Cut selected file(s) |
188 | +* **d**: Delete selected file(s) |
189 | +* **p**: Paste selected file(s) |
190 | +* **d**: Delete selected file(s) |
191 | +* **s**: Edit file you're currently hovering over |
192 | +* **n**: Create new directory |
193 | +* **m**: Play with mpv |
194 | +* **f**: Activate fzfp (lfp's fuzzy-finder) |
195 | +* **b**: Open file in default browser |
196 | +* **e**: Prompts you for a filename to edit/create |
197 | +* **t**: Prompts you for a filename for blank file to create |
198 | +* **x**: Execute selected file(s) |
199 | +* **z**: Open in `sxiv` (an image viewer) |
200 | +* **q**: Quit lfp |
201 | +* **\<Space\>**: Select file(s) |
202 | +* **\<Period\>**: (.) - Activates Node Actions, various npm/yarn actions / quick command execution |
203 | + |
204 | + |
205 | +### NodeManager: |
206 | + |
207 | +The NodeManager function provides various actions to manage a Node.js project, including: |
208 | + |
209 | +![NodeManager](https://gitlab.com/a4to/lfp/-/raw/master/.gitlab/media/NodeManager.gif) |
210 | + |
211 | +* **↑ Arrow**: Initialize a package.json file. |
212 | +* **↓ Arrow**: Select a javascript file to run. |
213 | +* **← Arrow**: Specify package(s) to install from npm. |
214 | +* **→ Arrow**: Start the server (yarn start). |
215 | +* **[h|d|m]**:: Start the server in development mode (yarn dev). |
216 | +* **[b|n]**: Build the project (yarn build). |
217 | +* **[i|I|,]**: Initialize a new npm project. |
218 | +* **[r]**: Remove specified packages. |
219 | +* **.**: Update the server (yarn). |
220 | +* **/**: Create a webserver on port 3000 (requires serve). |
221 | +* **q**: Exit. |
222 | + |
223 | + |
224 | +### PyManager: |
225 | + |
226 | +The PyManager function provides various actions to manage a Python project, including: |
227 | + |
228 | +![PyManager](https://gitlab.com/a4to/lfp/-/raw/master/.gitlab/media/PyManager.gif) |
229 | + |
230 | +* **↑ Arrow**: Create a new Conda environment at "https://gitlab.com/a4to/lfp/-/raw/master/.🐍". |
231 | +* **↓ Arrow**: Select a python script to run. |
232 | +* **← Arrow**: Select package(s) to install from pypi. |
233 | +* **→ Arrow**: Run the main.py script if found. |
234 | +* **q**: Exit. |
235 | + |
236 | + |
237 | +### Additional Actions and Features: |
238 | + |
239 | +* **B**: Bulk rename |
240 | +* **E**: Extract archive |
241 | +* **D**: (sudo) Delete selected file(s) |
242 | +* **L**: Symlink selected file(s) to current directory |
243 | +* **H**: Create hardlink of selected file(s) to current directory |
244 | +* **R**: Create relative symlink of selected file(s) to current directory |
245 | +* **E**: Extract archive (bz2 rar gz tar tar.* tbz2 tgz zip Z 7z deb) |
246 | +* **C**: CopyPath, this feature copies the absolute path of the file youre currently hovering over to your clipboard |
247 | +* **\<Ctrl+c\>**: Quick clone a git repository without leaving lfp |
248 | +* **\<Ctrl+g\>**: Activate pushto - select a branch to push to (only works inside a git repo) |
249 | +* **\<Ctrl+b\>**: Open file in browser |
250 | +* **\<Ctrl+6\>**: Chmod 644 selected file(s) |
251 | +* **\<Ctrl+7\>**: Chmod 755 selected file(s) |
252 | +* **\<Ctrl+8\>**: Chmod 700 selected file(s) |
253 | +* **\<Enter\>**: Enter shell command |
254 | + |
255 | + |
256 | +And many more. |
257 | + |
258 | + |
259 | +### File Type Icons: |
260 | + |
261 | +![fileTypes](https://gitlab.com/a4to/lfp/-/raw/master/.gitlab/media/fileTypes.gif) |
262 | + |
263 | diff --git a/lfp-4.1.5-1-x86_64/usr/share/lfp/cleaner b/lfp-4.1.5-1-x86_64/usr/share/lfp/cleaner |
264 | new file mode 100755 |
265 | index 0000000..53297f6 |
266 | --- /dev/null |
267 | +++ b/lfp-4.1.5-1-x86_64/usr/share/lfp/cleaner |
268 | @@ -0,0 +1,8 @@ |
269 | +#!/usr/bin/env sh |
270 | + |
271 | +cat <<-EOF | paste -sd '' > "$LFP_TMPDIR/fifo" |
272 | +{ |
273 | +"action": "remove", |
274 | +"identifier": "lf-preview" |
275 | +} |
276 | +EOF |
277 | diff --git a/lfp-4.1.5-1-x86_64/usr/share/lfp/lfp b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfp |
278 | new file mode 100755 |
279 | index 0000000..66a8f52 |
280 | --- /dev/null |
281 | +++ b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfp |
282 | @@ -0,0 +1,14 @@ |
283 | +#!/usr/bin/env zsh |
284 | + |
285 | +clean(){ cleaner >/dev/null 2>&1 ; kill "$LFPID" >/dev/null 2>&1 ; |
286 | + pkill -f "tail -f $LFP_TMPDIR/fifo" >/dev/null 2>&1 ; |
287 | + rm -rf "$LFP_TMPDIR" >/dev/null 2>&1 ; } |
288 | + |
289 | +trap 'clean >/dev/null 2>&1' INT HUP |
290 | +export LFP_TMPDIR="$(mktemp -dt lfp-XXXXXX)" |
291 | +source "${0:A:h}/lfp-icons" ; mkfifo "$LFP_TMPDIR/fifo"; |
292 | +export PATH="$PATH:${0:A:h}" ; export LFP_DIR="$(dirname "$0")" |
293 | + |
294 | +tail -f "$LFP_TMPDIR/fifo" | lfpreviewer layer --silent & LFPID=$! |
295 | +lf -config "${0:A:h}/lfprc" "${1:-"${PWD}"}" ; clean |
296 | + |
297 | diff --git a/usr/share/lfp/lfp-functions b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfp-functions |
298 | similarity index 100% |
299 | rename from usr/share/lfp/lfp-functions |
300 | rename to lfp-4.1.5-1-x86_64/usr/share/lfp/lfp-functions |
301 | diff --git a/lfp-4.1.5-1-x86_64/usr/share/lfp/lfp-icons b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfp-icons |
302 | new file mode 100644 |
303 | index 0000000..a562be0 |
304 | --- /dev/null |
305 | +++ b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfp-icons |
306 | @@ -0,0 +1,117 @@ |
307 | +#!/usr/share/lfp/lfp-icons |
308 | + |
309 | +export LF_ICONS="\ |
310 | +di=📁:\ |
311 | +fi=📃:\ |
312 | +tw=🤝:\ |
313 | +ow=📂:\ |
314 | +ln=⛓:\ |
315 | +or=❌:\ |
316 | +ex=:\ |
317 | +*.gitkeep=:\ |
318 | +*.gitignore=:\ |
319 | +*.col=🔰:\ |
320 | +*.js=:\ |
321 | +*.mjs=:\ |
322 | +*.jsx=:\ |
323 | +*.ts=:\ |
324 | +*.ts=:\ |
325 | +*.css=:\ |
326 | +*.py=:\ |
327 | +*.sh=:\ |
328 | +*.bash=:\ |
329 | +*.scss=:\ |
330 | +*.less=:\ |
331 | +*.vim=:\ |
332 | +*.c=🅒:\ |
333 | +*.h=🅗:\ |
334 | +*.cpp=🅒:\ |
335 | +*.hpp=🅗:\ |
336 | +*.cc=🅒:\ |
337 | +*.hh=🅗:\ |
338 | +*.go=🅖:\ |
339 | +*.rs=🅡:\ |
340 | +*.pl=🐪:\ |
341 | +*.pm=🐪:\ |
342 | +*.php= :\ |
343 | +*.rb=🅡:\ |
344 | +*.lua=:\ |
345 | +*.vue=:\ |
346 | +*.java=☕:\ |
347 | +*.class=☕:\ |
348 | +*.jar=♨:\ |
349 | +*.kt=🅺:\ |
350 | +*.lst=📓:\ |
351 | +*.tmp=⏰:\ |
352 | +*.txt=✍:\ |
353 | +*.me=✍:\ |
354 | +*.ms=✍:\ |
355 | +*.png=🖼:\ |
356 | +*.webp=🖼:\ |
357 | +*.ico=🖼:\ |
358 | +*.jpg=📸:\ |
359 | +*.jpe=📸:\ |
360 | +*.jpeg=📸:\ |
361 | +*.gif=🖼:\ |
362 | +*.svg=🗺:\ |
363 | +*.tif=🖼:\ |
364 | +*.tiff=🖼:\ |
365 | +*.xcf=🖌:\ |
366 | +*.sig=🔑:\ |
367 | +*.html=🌐:\ |
368 | +*.php=🌐:\ |
369 | +*.css=🌐:\ |
370 | +*.ejs=🌐:\ |
371 | +*.xml=📰:\ |
372 | +*.gpg=🔒:\ |
373 | +*.css=🎨:\ |
374 | +*.pdf=📚:\ |
375 | +*.djvu=📚:\ |
376 | +*.epub=📚:\ |
377 | +*.csv=📓:\ |
378 | +*.xlsx=📓:\ |
379 | +*.tmp=⏰:\ |
380 | +*.lst=📑:\ |
381 | +*.tex=📜:\ |
382 | +*.md=📘:\ |
383 | +*.r= :\ |
384 | +*.R=:\ |
385 | +*.rmd=📊:\ |
386 | +*.Rmd=📊:\ |
387 | +*.m=📊:\ |
388 | +*.mp3=🎵:\ |
389 | +*.mp3=🎵:\ |
390 | +*.opus=🎵:\ |
391 | +*.ogg=🎵:\ |
392 | +*.m4a=🎵:\ |
393 | +*.flac=🎼:\ |
394 | +*.wav=🎼:\ |
395 | +*.mkv=🎥:\ |
396 | +*.mp4=🎥:\ |
397 | +*.webm=🎥:\ |
398 | +*.mpeg=🎥:\ |
399 | +*.avi=🎥:\ |
400 | +*.mov=🎥:\ |
401 | +*.mpg=🎥:\ |
402 | +*.wmv=🎥:\ |
403 | +*.m4b=🎥:\ |
404 | +*.flv=🎥:\ |
405 | +*.zip=📦:\ |
406 | +*.rar=📦:\ |
407 | +*.7z=📦:\ |
408 | +*.tar=📦:\ |
409 | +*.tar.gz=📦:\ |
410 | +*.tar.xz=📦:\ |
411 | +*.zst=📦:\ |
412 | +*.1=ℹ:\ |
413 | +*.nfo=ℹ:\ |
414 | +*.info=ℹ:\ |
415 | +*.log=📙:\ |
416 | +*.iso=📀:\ |
417 | +*.img=📀:\ |
418 | +*.qcow2=📀:\ |
419 | +*.bib=🎓:\ |
420 | +*.ged=👪:\ |
421 | +*.part=💔:\ |
422 | +*.torrent=🔽:\ |
423 | +" |
424 | diff --git a/lfp-4.1.5-1-x86_64/usr/share/lfp/lfpcd b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfpcd |
425 | new file mode 100755 |
426 | index 0000000..3ab944e |
427 | --- /dev/null |
428 | +++ b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfpcd |
429 | @@ -0,0 +1,7 @@ |
430 | +#!/usr/bin/env bash |
431 | + |
432 | +lfp(){ local tmp=$(mktemp) ; /usr/bin/lfp -last-dir-path="$tmp" "$@" |
433 | + [ -f "$tmp" ] && dir="$(cat "$tmp")" && rm -f "$tmp" >/dev/null 2>&1[41m |
434 | + [ -d "$dir" ] && [[ "$dir" != "$(pwd)" ]] && cd "$dir" || return 0 |
435 | +} |
436 | + |
437 | diff --git a/lfp-4.1.5-1-x86_64/usr/share/lfp/lfprc b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfprc |
438 | new file mode 100644 |
439 | index 0000000..1b36152 |
440 | --- /dev/null |
441 | +++ b/lfp-4.1.5-1-x86_64/usr/share/lfp/lfprc |
442 | @@ -0,0 +1,579 @@ |
443 | +#!/usr/share/lfp/lfprc |
444 | + |
445 | +# Basic Variables: |
446 | + |
447 | +set icons |
448 | +set period 1 |
449 | +set shell bash |
450 | +set scrolloff 10 |
451 | +set drawbox true |
452 | +set hiddenfiles ".*:*.aux:*.bbl:*.bcf:*.blg:*.run.xml:yarn.lock:package-lock.json" |
453 | +set shellopts '-eu' |
454 | +set ifs "\n" |
455 | + |
456 | + |
457 | +# Environment Variables: |
458 | + |
459 | +$lf -remote "send $id set previewer /usr/share/lfp/scope" |
460 | +$lf -remote "send $id set cleaner /usr/share/lfp/cleaner" |
461 | + |
462 | +# Functions: |
463 | + |
464 | +cmd open ${{ |
465 | + case $(file --mime-type $f -b) in |
466 | + image/vnd.djvu|application/pdf|application/octet-stream) setsid -f zathura $fx >/dev/null 2>&1 ;; |
467 | + text/*) $EDITOR $fx;; |
468 | + image/x-xcf) setsid -f gimp $f >/dev/null 2>&1 ;; |
469 | + image/svg+xml) display -- $f ;; |
470 | + image/*) rotdir $f | grep -i "\.\(png\|jpg\|jpeg\|gif\|webp\|tif\|ico\)\(_large\)*$" | sxiv -aio 2>/dev/null | lf-select ;; |
471 | + audio/*) mpv --audio-display=no $f ;; |
472 | + video/*) setsid -f mpv $f -quiet >/dev/null 2>&1 ;; |
473 | + application/pdf|application/vnd*|application/epub*) setsid -f zathura $fx >/dev/null 2>&1 ;; |
474 | + application/pgp-encrypted) $EDITOR $fx ;; |
475 | + *) for f in $fx; do setsid -f $OPENER $f >/dev/null 2>&1; done;; |
476 | + esac |
477 | +}} |
478 | + |
479 | +cmd mkdir $mkdir -p "$(echo $* | tr ' ' '\ ')" |
480 | +cmd edit $${EDITOR:-nvim} $* |
481 | + |
482 | + |
483 | +cmd delete ${{ |
484 | + clear; tput cup $(($(tput lines)/1)); tput bold |
485 | + set -f ; clear ; echo -e "\\n\\n" ; printf "%s\n\t" "$fx" ; |
486 | + echo -en \\n\\n"$(tput bold; tput setaf 6) Delete selected items?$(tput setaf 6) $(tput setaf 1)($(tput setaf 3)Y/n$(tput setaf 1)) $(tput setaf 6): "$(tput setaf 1)""; read ans |
487 | + [[ $ans = "y" ]] || [[ $ans = Y ]] || [[ $ans = "" ]] || [[ $ans = yes ]] || |
488 | + [[ $ans = Yes ]] || [[ $ans = YES ]] && rm -rf -- $fx ; tput sgr0 || exit 0 ; tput sgr0 |
489 | +}} |
490 | + |
491 | +cmd rootdel ${{ |
492 | + clear; tput cup $(($(tput lines)/1)); tput bold |
493 | + set -f ; clear ; echo -e "\\n\\n" ; printf "%s\n\t" "$fx" ; |
494 | + echo -en \\n\\n"$(tput bold; tput setaf 6) ARE YOU SURE YOU WANT TO DELETE THE SELECTED ITEMS?$(tput setaf 6) $(tput setaf 1)($(tput setaf 3)y/N$(tput setaf 1)) $(tput setaf 6): "$(tput setaf 1)""; read ans |
495 | + [[ $ans = "y" ]] || [[ $ans = Y ]] || [[ $ans = yes ]] || [[ $ans = Yes ]] || |
496 | + [[ $ans = YES ]] && sudo rm -rf -- $fx ; tput sgr0 || exit 0 ; tput sgr0 |
497 | +}} |
498 | + |
499 | +cmd symlink ${{ |
500 | + clear ; dest="$PWD" ; for x in $fx; do |
501 | + eval ln -sf \"$x\" \"$dest\" |
502 | + done && lf -remote "send $id unselect" ; notify-send "🔗 File(s) symlinked".\ |
503 | + "File(s) symlinked to $dest." |
504 | +}} |
505 | + |
506 | +cmd symlink_rel ${{ |
507 | + clear ; dest="$PWD" ; for x in $fx; do |
508 | + eval ln -srf \"$x\" \"$dest\" |
509 | + done && lf -remote "send $id unselect" ; notify-send "🔗 File(s) symlinked".\ |
510 | + "File(s) symlinked to $dest." |
511 | +}} |
512 | + |
513 | +cmd symlink_hard ${{ |
514 | + clear ; dest="$PWD" ; for x in $fx; do |
515 | + eval ln -f \"$x\" \"$dest\" |
516 | + done && lf -remote "send $id unselect" ; notify-send "🔗 File(s) symlinked".\ |
517 | + "File(s) hard linked to $dest." |
518 | +}} |
519 | + |
520 | +cmd cloneRepo ${{ |
521 | + clear; tput cup $(($(tput lines)/3)); fullurl=$(mktemp) ; trap 'rm -f $fullurl' \ |
522 | + EXIT INT TERM QUIT STOP HUP ERR ; set -f ; url=$(dialog --title "Git Clone" --inputbox \ |
523 | + " Please enter the URL of the repo you would like to clone: " 10 65 3>&1 1>&2 2>&3 3>&1 && |
524 | + notify-send "📦Cloning repo" "You will be notified upon completion.") ; echo $url|read url |
525 | + echo "$(echo $url|sed 's/http:\/\///g;s/https:\/\///g')">$fullurl && url=$(cat $fullurl) && |
526 | + notify='📦Repo successfully cloned into' ; eval $(git clone git@$url >/dev/null 2>&1 && |
527 | + notify-send "$notify $(basename $url)" || git clone https://$url >/dev/null 2>&1 && |
528 | + notify-send "$notify $(basename $url .git)" || notify-send "📦 Repo clone failed.") & disown |
529 | +}} |
530 | + |
531 | + |
532 | +cmd fzfp ${{ |
533 | + BAT="bat -pn --style=numbers,grid --color=always" |
534 | + FROM=`echo ${*:-$PWD} | sed 's/\/$//'` |
535 | + |
536 | + PREVIEW="file {} | grep -q 'ASCII text' || file {} | grep -q 'Unicode text' && $BAT {} 2>/dev/null && return 0 || |
537 | + echo {} | sed 's/\/$//' | xargs file | grep -q 'symbolic link' && lolcat <<< 'SYMBOLIC LINK.' && return 0 || |
538 | + file {} | grep -q 'directory' && lolcat <<< 'DIRECTORY - LISTING:' && ls -1 ${FROM}/{} 2>/dev/null | $BAT 2>/dev/null && return 0 || |
539 | + lolcat <<< 'BINARY FILE.'" |
540 | + |
541 | + filePath(){ |
542 | + path=$(fzf --multi --ansi --no-sort \ |
543 | + --prompt="What are you looking for ? : " \ |
544 | + --header " " \ |
545 | + --height 99% \ |
546 | + --preview="$PREVIEW" \ |
547 | + --preview-window=60% | |
548 | + xargs realpath 2>/dev/null) || return 1 |
549 | + } |
550 | + |
551 | + filePath || exit 0 |
552 | + echo $path | xsel -b && notify-send "✅File path coppied to clipboard" || |
553 | + [[ -f `xsel -bo` ]] && [[ -n ${EDITOR} ]] && $EDITOR `xsel -bo` || exit 0 |
554 | +}} |
555 | + |
556 | +cmd modeChange ${{ |
557 | + sudo chmod -R $1 $fx && |
558 | + for x in ${fx[@]}; do |
559 | + notify-send "🔒 Permission of $(basename ${x}) changed to $1" |
560 | + done ; lf -remote "send $id unselect" |
561 | +}} |
562 | + |
563 | + |
564 | +cmd nodeAction ${{ |
565 | + |
566 | + nodeaction(){ |
567 | + cat << EOF |
568 | + |
569 | + |
570 | + [38;5;44m [38;5;44m [38;5;44m [38;5;44m [38;5;44m_[38;5;44m [38;5;44m [38;5;44m [38;5;44m_[38;5;44m_[38;5;44m [38;5;43m [38;5;49m [38;5;49m [38;5;49m [38;5;49m [38;5;49m [38;5;49m [38;5;49m [38;5;49m [38;5;49m_[38;5;49m_ [38;5;214m [38;5;214m [38;5;214m_[38;5;214m_[38;5;214m_[38;5;214m [38;5;214m [38;5;214m [38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;209m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m [38;5;204m [38;5;198m_[38;5;198m [38;5;198m [38;5;198m [38;5;198m_[38;5;198m_ |
571 | + [38;5;44m [38;5;44m [38;5;44m [38;5;44m/[38;5;44m [38;5;44m|[38;5;44m [38;5;44m/[38;5;43m [38;5;49m/[38;5;49m_[38;5;49m_[38;5;49m_[38;5;49m [38;5;49m [38;5;49m_[38;5;49m_[38;5;49m_[38;5;49m_[38;5;48m/[38;5;48m [38;5;48m/[38;5;48m_[38;5;48m_ [38;5;214m [38;5;214m/[38;5;214m [38;5;214m [38;5;214m [38;5;208m|[38;5;208m [38;5;208m/[38;5;208m [38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m/[38;5;209m_[38;5;203m [38;5;203m [38;5;203m_[38;5;203m_[38;5;203m/[38;5;203m [38;5;203m [38;5;203m_[38;5;203m/[38;5;203m [38;5;203m_[38;5;204m_[38;5;198m [38;5;198m\[38;5;198m/[38;5;198m [38;5;198m|[38;5;198m [38;5;198m/[38;5;198m [38;5;198m/ |
572 | + [38;5;44m [38;5;44m [38;5;44m/[38;5;44m [38;5;44m [38;5;43m|[38;5;49m/[38;5;49m [38;5;49m/[38;5;49m [38;5;49m_[38;5;49m_[38;5;49m [38;5;49m\[38;5;49m/[38;5;49m [38;5;48m_[38;5;48m_[38;5;48m [38;5;48m [38;5;48m/[38;5;48m [38;5;48m_[38;5;48m [38;5;48m\[38;5;214m [38;5;214m [38;5;214m/[38;5;214m [38;5;208m/[38;5;208m|[38;5;208m [38;5;208m|[38;5;208m/[38;5;208m [38;5;208m/[38;5;208m [38;5;208m [38;5;209m [38;5;203m [38;5;203m [38;5;203m/[38;5;203m [38;5;203m/[38;5;203m [38;5;203m [38;5;203m/[38;5;203m [38;5;203m/[38;5;203m/[38;5;204m [38;5;198m/[38;5;198m [38;5;198m/[38;5;198m [38;5;198m/[38;5;198m [38;5;198m [38;5;198m|[38;5;198m/[38;5;199m [38;5;199m/ |
573 | + [38;5;44m [38;5;44m/[38;5;43m [38;5;49m/[38;5;49m|[38;5;49m [38;5;49m [38;5;49m/[38;5;49m [38;5;49m/[38;5;49m_[38;5;49m/[38;5;49m [38;5;48m/[38;5;48m [38;5;48m/[38;5;48m_[38;5;48m/[38;5;48m [38;5;48m/[38;5;48m [38;5;48m [38;5;84m_[38;5;83m_[38;5;83m/[38;5;214m [38;5;208m/[38;5;208m [38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m [38;5;208m/[38;5;208m [38;5;208m/[38;5;209m_[38;5;203m_[38;5;203m_[38;5;203m [38;5;203m [38;5;203m/[38;5;203m [38;5;203m/[38;5;203m [38;5;203m_[38;5;203m/[38;5;203m [38;5;204m/[38;5;198m/[38;5;198m [38;5;198m/[38;5;198m_[38;5;198m/[38;5;198m [38;5;198m/[38;5;198m [38;5;198m/[38;5;199m|[38;5;199m [38;5;199m [38;5;199m/ |
574 | + [38;5;49m/[38;5;49m_[38;5;49m/[38;5;49m [38;5;49m|[38;5;49m_[38;5;49m/[38;5;49m\[38;5;49m_[38;5;49m_[38;5;48m_[38;5;48m_[38;5;48m/[38;5;48m\[38;5;48m_[38;5;48m_[38;5;48m,[38;5;48m_[38;5;48m/[38;5;84m\[38;5;83m_[38;5;83m_[38;5;83m_[38;5;83m/ [38;5;208m/[38;5;208m_[38;5;208m/[38;5;208m [38;5;208m [38;5;208m|[38;5;208m_[38;5;209m\[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m/[38;5;203m [38;5;203m/[38;5;203m_[38;5;203m/[38;5;203m [38;5;203m/[38;5;204m_[38;5;198m_[38;5;198m_[38;5;198m/[38;5;198m\[38;5;198m_[38;5;198m_[38;5;198m_[38;5;198m_[38;5;198m/[38;5;199m_[38;5;199m/[38;5;199m [38;5;199m|[38;5;199m_[38;5;199m/ |
575 | + [0m |
576 | +EOF |
577 | + } |
578 | + |
579 | + instructions(){ |
580 | + |
581 | + nodeaction |
582 | + |
583 | + echo -e "\n \e[33m(\e[31m↑\e[33m)\n" |
584 | + echo -e " \e[33m(\e[31m←\e[33m) \e[32m[\e[34m*\e[32m]\e[33m (\e[31m→\e[33m) \e[36mSelect Further Action:\e[0m\n" |
585 | + echo -en " \e[33m(\e[31m↓\e[33m)\n\n " |
586 | + |
587 | + escape_char=$(printf "\u1b") |
588 | + read -rsn1 mode |
589 | + |
590 | + [[ $mode == $escape_char ]] && read -rsn2 mode || mode=$mode |
591 | + |
592 | + } |
593 | + |
594 | + getPKGs(){ |
595 | + echo -en "\n\e[1,33m [+] \e[36m Enter package name(s): \e[0m" ; read pkgs |
596 | + } |
597 | + |
598 | + schemes=( |
599 | + '--color=fg:#F92672,bg:#272822,hl:#A6E22E,fg+:#FD971F,bg+:#272822,hl+:#A6E22E' |
600 | + '--color=fg:#66D9EF,bg:#272822,hl:#F92672,fg+:#A6E22E,bg+:#272822,hl+:#F92672' |
601 | + '--color=fg:#F92672,bg:#272822,hl:#A6E22E,fg+:#66D9EF,bg+:#272822,hl+:#A6E22E' |
602 | + '--color=fg:#F95700,bg:#272822,hl:#E3E3E3,fg+:#246A73,bg+:#2B2B27,hl+:#F2CF1D' |
603 | + '--color=fg:#F95700,bg:#272822,hl:#E3E3E3,fg+:#F2CF1D,bg+:#2B2B27,hl+:#246A73' |
604 | + '--color=fg:#48E5C2,bg:#272822,hl:#F72585,fg+:#FF61A6,bg+:#2B2B27,hl+:#8D3B72' |
605 | + '--color=fg:#CB997E,bg:#272822,hl:#3E4C59,fg+:#2E8B57,bg+:#2B2B27,hl+:#6B4226' |
606 | + '--color=fg:#4EA8DE,bg:#272822,hl:#F6CD61,fg+:#FFC107,bg+:#2B2B27,hl+:#393E46' |
607 | + '--color=fg:#F72585,bg:#272822,hl:#7209B7,fg+:#F4F1BB,bg+:#2B2B27,hl+:#560BAD' |
608 | + '--color=fg:#E63946,bg:#272822,hl:#F1FAEE,fg+:#A8DADC,bg+:#2B2B27,hl+:#457B9D' |
609 | + '--color=fg:#2A9D8F,bg:#272822,hl:#E76F51,fg+:#F4F1DE,bg+:#2B2B27,hl+:#264653' |
610 | + '--color=fg:#1B9AAA,bg:#272822,hl:#FEF9EF,fg+:#D4A5A5,bg+:#2B2B27,hl+:#392F5A' |
611 | + '--color=fg:#D00000,bg:#272822,hl:#FFBA08,fg+:#EAE2B7,bg+:#2B2B27,hl+:#540B0E' |
612 | + '--color=fg:#9A031E,bg:#272822,hl:#FAFCC2,fg+:#03C4A1,bg+:#2B2B27,hl+:#D4A5A5' |
613 | + '--color=fg:#0A9396,bg:#272822,hl:#C9CB3C,fg+:#E9D8A6,bg+:#2B2B27,hl+:#EE6C4D' |
614 | + ) |
615 | + |
616 | + BAT="bat -pn --style=numbers,grid,changes --italic-text=always --paging=always --pager='less -R' --color=always --line-range :500 --decorations=always" |
617 | + FROM=`echo ${*:-$PWD} | sed 's/\/$//'` |
618 | + |
619 | + selectNodeScript(){ |
620 | + |
621 | + srtdir="$FROM" |
622 | + while true; do |
623 | + choices=() |
624 | + [ "$srtdir" != "/" ] && choices+=("..") |
625 | + choices+=($(ls -1 "$srtdir")) |
626 | + |
627 | + RandomColor=${schemes[$RANDOM % ${#schemes[@]} ]} |
628 | + |
629 | + file=$(printf "%s\n" "${choices[@]}" | |
630 | + fzf --ansi --no-sort --cycle --pointer "▶" \ |
631 | + $RandomColor \ |
632 | + --prompt="Select JavaScript File: " \ |
633 | + --info=inline --padding=1 --border --margin=1 \ |
634 | + --header " |
635 | +Enter : proceed |
636 | +Space : toggle sort |
637 | +Tab : toggle preview |
638 | + " \ |
639 | + --height 60% \ |
640 | + --preview-window right:60% \ |
641 | + --bind "tab:toggle-preview,space:toggle-sort" \ |
642 | + --preview "[ -f $srtdir/{} ] && $BAT $srtdir/{} || { echo -e '\n\e[32mDirectory Listing:\e[0m\n'; ls -1 $srtdir/{}; } | $BAT" |
643 | + ) |
644 | + |
645 | + [ -z "$file" ] && exit 0 |
646 | + |
647 | + [ "$file" == ".." ] && srtdir=`realpath "$srtdir"` || |
648 | + [ -d "$srtdir/$file" ] && srtdir=`realpath "$srtdir/$file"` || |
649 | + [ -f "$srtdir/$file" ] && echo "$file" | grep -qE ".(js|mjs)$" && { |
650 | + file=`realpath "$srtdir/$file"` |
651 | + [ -f "$file" ] && return 0 |
652 | + } || { |
653 | + [ -f "$srtdir/$file" ] && { |
654 | + return 1 |
655 | + } |
656 | + } |
657 | + done |
658 | + } |
659 | + |
660 | + |
661 | + runScript(){ |
662 | + yarn $@ && echo -en "\npress any key to continue..." && read -n 1 -s -r -p "" || return 1 |
663 | + } |
664 | + |
665 | + exeScript(){ |
666 | + node $@ && echo -en "\npress any key to continue..." && read -n 1 -s -r -p "" || return 1 |
667 | + } |
668 | + |
669 | + |
670 | + NodeManager(){ |
671 | + |
672 | + instructions |
673 | + |
674 | + case $mode in |
675 | + '[A'|'u'|'s') npm init -y && notify-send "📦 Package.json created" ;; |
676 | + '[D') clear && getPKGs && for x in ${pkgs[@]}; do eval "runScript add $x >/dev/null 2>&1 && notify-send '✅ $x installed'" ; done ;; |
677 | + '[B'|'y') clear && { selectNodeScript && exeScript $file; } || notify-send "📦 Failed to run script" "'$file' is not a valid JavaScript file." ;; |
678 | + '[C') clear && notify-send "📦 Starting Server..." && runScript start ;; |
679 | + 'h') notify-send "📦 Starting Server in Development Mode..." && runScript dev ;; |
680 | + 'd'|'m') notify-send "📦 Starting Server in Development Mode..."&& runScript dev >/dev/null 2>&1 & disown ;; |
681 | + 'b'|'n') notify-send "📦 Building Project..." && runScript build ;; |
682 | + 'i'|'I'|',') clear ; echo -e "\e[0m" && npm init ;; |
683 | + 'r') clear && getPKGs && for x in ${pkgs[@]}; do runScript remove $x && notify-send "✅ $x removed" ; done ;; |
684 | + '.') notify-send "📦 Updating Server..." && runScript && notify-send "📦 Package Base Updated" ;; |
685 | + 's') clear ; selectNodeScript && exeScript $file ;; |
686 | + '/') clear ; notify-send "📦 Starting server on port 5000..." && npx serve -l 5000 ;; |
687 | + 'q') exit 0 ;; |
688 | + *) NodeManager ;; |
689 | + esac |
690 | + } |
691 | + |
692 | + clear ; NodeManager |
693 | + |
694 | +}} |
695 | + |
696 | +cmd pyAction ${{ |
697 | + |
698 | + pyaction(){ |
699 | + cat << EOF |
700 | + |
701 | + |
702 | + [38;5;39m [38;5;39m [38;5;39m [38;5;39m [38;5;39m_[38;5;39m_[38;5;38m_[38;5;44m_ [38;5;214m [38;5;214m_[38;5;214m_[38;5;214m_[38;5;214m [38;5;214m [38;5;214m [38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;209m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m [38;5;204m [38;5;198m_[38;5;198m [38;5;198m [38;5;198m [38;5;198m_[38;5;198m_ |
703 | + [38;5;39m [38;5;39m [38;5;39m [38;5;38m/[38;5;44m [38;5;44m_[38;5;44m_[38;5;44m [38;5;44m\[38;5;44m_[38;5;44m_[38;5;44m [38;5;44m [38;5;44m_[38;5;44m_[38;5;214m[38;5;214m [38;5;214m/[38;5;214m [38;5;214m [38;5;214m [38;5;208m|[38;5;208m [38;5;208m/[38;5;208m [38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m/[38;5;209m_[38;5;203m [38;5;203m [38;5;203m_[38;5;203m_[38;5;203m/[38;5;203m [38;5;203m [38;5;203m_[38;5;203m/[38;5;203m [38;5;203m_[38;5;204m_[38;5;198m [38;5;198m\[38;5;198m/[38;5;198m [38;5;198m|[38;5;198m [38;5;198m/[38;5;198m [38;5;198m/ |
704 | + [38;5;38m [38;5;44m [38;5;44m/[38;5;44m [38;5;44m/[38;5;44m_[38;5;44m/[38;5;44m [38;5;44m/[38;5;44m [38;5;44m/[38;5;44m [38;5;43m/[38;5;49m /[38;5;214m /[38;5;214m [38;5;208m/[38;5;208m|[38;5;208m [38;5;208m|[38;5;208m/[38;5;208m [38;5;208m/[38;5;208m [38;5;208m [38;5;209m [38;5;203m [38;5;203m [38;5;203m/[38;5;203m [38;5;203m/[38;5;203m [38;5;203m [38;5;203m/[38;5;203m [38;5;203m/[38;5;203m/[38;5;204m [38;5;198m/[38;5;198m [38;5;198m/[38;5;198m [38;5;198m/[38;5;198m [38;5;198m [38;5;198m|[38;5;198m/[38;5;199m [38;5;199m/ |
705 | + [38;5;44m [38;5;44m/[38;5;44m [38;5;44m_[38;5;44m_[38;5;44m_[38;5;44m_[38;5;44m/[38;5;44m [38;5;43m/[38;5;49m_[38;5;49m/[38;5;49m [38;5;49m/[38;5;208m /[38;5;208m [38;5;208m_[38;5;208m_[38;5;208m_[38;5;208m [38;5;208m/[38;5;208m [38;5;208m/[38;5;209m_[38;5;203m_[38;5;203m_[38;5;203m [38;5;203m [38;5;203m/[38;5;203m [38;5;203m/[38;5;203m [38;5;203m_[38;5;203m/[38;5;203m [38;5;204m/[38;5;198m/[38;5;198m [38;5;198m/[38;5;198m_[38;5;198m/[38;5;198m [38;5;198m/[38;5;198m [38;5;198m/[38;5;199m|[38;5;199m [38;5;199m [38;5;199m/ |
706 | + [38;5;44m/[38;5;44m_[38;5;44m/[38;5;44m [38;5;44m [38;5;44m [38;5;43m [38;5;49m\[38;5;49m_[38;5;49m_[38;5;49m,[38;5;49m [38;5;49m/[38;5;214m /[38;5;208m_[38;5;208m/[38;5;208m [38;5;208m [38;5;208m|[38;5;208m_[38;5;209m\[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m_[38;5;203m/[38;5;203m [38;5;203m/[38;5;203m_[38;5;203m/[38;5;203m [38;5;203m/[38;5;204m_[38;5;198m_[38;5;198m_[38;5;198m/[38;5;198m\[38;5;198m_[38;5;198m_[38;5;198m_[38;5;198m_[38;5;198m/[38;5;199m_[38;5;199m/[38;5;199m [38;5;199m|[38;5;199m_[38;5;199m/ |
707 | + [38;5;44m [38;5;44m [38;5;44m [38;5;43m [38;5;49m [38;5;49m [38;5;49m/[38;5;49m_[38;5;49m_[38;5;49m_[38;5;49m_[38;5;49m/ |
708 | + [0m |
709 | +EOF |
710 | + } |
711 | + |
712 | + instructions(){ |
713 | + |
714 | + pyaction |
715 | + |
716 | + echo -e "\n \e[33m(\e[31m↑\e[33m)\n" |
717 | + echo -e " \e[33m(\e[31m←\e[33m) \e[32m[\e[34m*\e[32m]\e[33m (\e[31m→\e[33m) \e[36mSelect Further Action:\e[0m\n" |
718 | + echo -en " \e[33m(\e[31m↓\e[33m)\n\n " |
719 | + |
720 | + escape_char=$(printf "\u1b") |
721 | + read -rsn1 mode |
722 | + |
723 | + [[ $mode == $escape_char ]] && read -rsn2 mode || mode=$mode |
724 | + |
725 | + } |
726 | + |
727 | + schemes=( |
728 | + '--color=fg:#F92672,bg:#272822,hl:#A6E22E,fg+:#FD971F,bg+:#272822,hl+:#A6E22E' |
729 | + '--color=fg:#66D9EF,bg:#272822,hl:#F92672,fg+:#A6E22E,bg+:#272822,hl+:#F92672' |
730 | + '--color=fg:#F92672,bg:#272822,hl:#A6E22E,fg+:#66D9EF,bg+:#272822,hl+:#A6E22E' |
731 | + '--color=fg:#F95700,bg:#272822,hl:#E3E3E3,fg+:#246A73,bg+:#2B2B27,hl+:#F2CF1D' |
732 | + '--color=fg:#F95700,bg:#272822,hl:#E3E3E3,fg+:#F2CF1D,bg+:#2B2B27,hl+:#246A73' |
733 | + '--color=fg:#48E5C2,bg:#272822,hl:#F72585,fg+:#FF61A6,bg+:#2B2B27,hl+:#8D3B72' |
734 | + '--color=fg:#CB997E,bg:#272822,hl:#3E4C59,fg+:#2E8B57,bg+:#2B2B27,hl+:#6B4226' |
735 | + '--color=fg:#4EA8DE,bg:#272822,hl:#F6CD61,fg+:#FFC107,bg+:#2B2B27,hl+:#393E46' |
736 | + '--color=fg:#F72585,bg:#272822,hl:#7209B7,fg+:#F4F1BB,bg+:#2B2B27,hl+:#560BAD' |
737 | + '--color=fg:#E63946,bg:#272822,hl:#F1FAEE,fg+:#A8DADC,bg+:#2B2B27,hl+:#457B9D' |
738 | + '--color=fg:#2A9D8F,bg:#272822,hl:#E76F51,fg+:#F4F1DE,bg+:#2B2B27,hl+:#264653' |
739 | + '--color=fg:#1B9AAA,bg:#272822,hl:#FEF9EF,fg+:#D4A5A5,bg+:#2B2B27,hl+:#392F5A' |
740 | + '--color=fg:#D00000,bg:#272822,hl:#FFBA08,fg+:#EAE2B7,bg+:#2B2B27,hl+:#540B0E' |
741 | + '--color=fg:#9A031E,bg:#272822,hl:#FAFCC2,fg+:#03C4A1,bg+:#2B2B27,hl+:#D4A5A5' |
742 | + '--color=fg:#0A9396,bg:#272822,hl:#C9CB3C,fg+:#E9D8A6,bg+:#2B2B27,hl+:#EE6C4D' |
743 | + ) |
744 | + |
745 | + getPKGs(){ |
746 | + echo -en "\n\e[1,33m [+] \e[36m Enter package name(s): \e[0m" ; read pkgs |
747 | + } |
748 | + |
749 | + BAT="bat -pn --style=numbers,grid,changes --italic-text=always --paging=always --pager='less -R' --color=always --line-range :500 --decorations=always" |
750 | + FROM=`echo ${*:-$PWD} | sed 's/\/$//'` |
751 | + |
752 | + selectPyScript(){ |
753 | + |
754 | + srtdir="$FROM" |
755 | + while true; do |
756 | + choices=() |
757 | + [ "$srtdir" != "/" ] && choices+=("..") |
758 | + choices+=($(ls -1 "$srtdir")) |
759 | + |
760 | + RandomColor=${schemes[$RANDOM % ${#schemes[@]} ]} |
761 | + |
762 | + file=$(printf "%s\n" "${choices[@]}" | |
763 | + fzf --ansi --no-sort --cycle --pointer "▶" \ |
764 | + $RandomColor \ |
765 | + --info=inline --padding=1 --border --margin=1 \ |
766 | + --prompt="$1" \ |
767 | + --header " |
768 | +Enter : proceed |
769 | +Space : toggle sort |
770 | +Tab : toggle preview |
771 | + " \ |
772 | + --height 60% \ |
773 | + --preview-window right:60% \ |
774 | + --bind "tab:toggle-preview,space:toggle-sort" \ |
775 | + --preview "[ -f $srtdir/{} ] && $BAT $srtdir/{} || { echo -e '\n\e[32mDirectory Listing:\e[0m\n'; ls -1 $srtdir/{}; } | $BAT" |
776 | + ) |
777 | + |
778 | + [ -z "$file" ] && exit 1 |
779 | + |
780 | + [ "$file" == ".." ] && srtdir=`realpath "$srtdir"` || |
781 | + [ -d "$srtdir/$file" ] && srtdir=`realpath "$srtdir/$file"` || |
782 | + [ -f "$srtdir/$file" ] && echo "$file" | grep -q ".py$" && { |
783 | + file=`realpath "$srtdir/$file"` |
784 | + [ -f "$file" ] && return 0 |
785 | + } || { |
786 | + [ -f "$srtdir/$file" ] && { |
787 | + echo "Invalid Selection. $srtdir/$file is not a python script" |
788 | + break |
789 | + } |
790 | + } |
791 | + done |
792 | + } |
793 | + |
794 | + newConda(){ |
795 | + which mamba >/dev/null 2>&1 && tool=mamba || tool=conda |
796 | + $tool create -p ./.🐍 -y -c conda-forge python=3.10 pynvim && notify-send "Conda Environment Created at ./.🐍" || { |
797 | + notify-send "🐍 Conda Environment Creation Failed" |
798 | + return 1 |
799 | + } |
800 | + |
801 | + [[ -d $HOME/PKG/lfpreviewer ]] && { |
802 | + pip install -e $HOME/PKG/lfpreviewer >/dev/null 2>&1 && |
803 | + notify-send "🐍 lfpreviewer Installed" |
804 | + } |
805 | + } |
806 | + |
807 | + runScript(){ |
808 | + python3 $1 && echo -en "\npress any key to continue..." && read -n 1 -s -r -p "" || return 1 |
809 | + } |
810 | + |
811 | + installPkg(){ |
812 | + pip install $1 >/dev/null 2>&1 && notify-send "✅ $1 installed" || notify-send "❌ Failed to install $1" |
813 | + } |
814 | + |
815 | + PyManager(){ |
816 | + |
817 | + instructions |
818 | + |
819 | + case $mode in |
820 | + '[A') clear && { which lfp-newPyEnv >/dev/null 2>&1 && lfp-newPyEnv || newConda; } ;; |
821 | + '[B') clear && { selectPyScript "Select Python Script: " && runScript $file; } || notify-send "🐍 Failed to run script" "'$file' is not a valid python script" ;; |
822 | + '[D') clear && getPKGs && for x in ${pkgs[@]}; do installPkg $x; done ;; |
823 | + '[C') clear && [[ -f "main.py" ]] || { notify-send "🐍 No main.py file found"; return 1; } && notify-send "🐍 Running main.py script..." && runScript main.py ;; |
824 | + 'r') pip3 install -r requirements.txt && notify-send "🐍 Requirements installed" ;; |
825 | + 'R') clear && { selectPyScript "Select Requirements File: " && pip install -r $file; } && notify-send "🐍 Requirements installed" || notify-send "🐍 Failed to install requirements" "'$file' is not a valid requirements file" ;; |
826 | + 'q') exit 0 ;; |
827 | + *) PyManager ;; |
828 | + esac |
829 | + } |
830 | + |
831 | + clear ; PyManager |
832 | + |
833 | +}} |
834 | + |
835 | + |
836 | +cmd newFile ${{ |
837 | + touch $@ && notify-send "📝 \"${@}\" Created successfully!" |
838 | +}} |
839 | + |
840 | + |
841 | +cmd meChange ${{ |
842 | + ! sudo chown "nvx1:nvx1" -Rf ${*} && notify-send "🔧 Owning User Changed to nvx1 && |
843 | + notify-send "🔧 Ownership Change Failed" |
844 | + lf -remote "send $id unselect" |
845 | +}} |
846 | + |
847 | +cmd mpvPlay ${{ |
848 | + mpv --audio-display=no $f >/dev/null 2>&1 & |
849 | + notify-send "🎶 Playing $(basename $f)" |
850 | +}} |
851 | + |
852 | +#cmd newFile ${{ |
853 | +# file=$(dialog --title ' ~ New file ~ ' --inputbox \ |
854 | +# " Enter a name for the file: " 10 60 3>&1 1>&2 2>&3 3>&1) && echo $file|read file |
855 | +# [ -e $file ] && notify-send "❌ Error, $file already exists in this directory."&& exit 1 || |
856 | +# touch $file && notify-send "📝 File: \"${file}\" Created successfully!" |
857 | +#}} |
858 | + |
859 | +cmd pushTo ${{ |
860 | + dest="$(echo `git remote`|xargs -n1|fzf \ |
861 | + --no-extended \ |
862 | + --layout reverse \ |
863 | + --header " " \ |
864 | + --prompt " Push to :" \ |
865 | + --no-info \ |
866 | + --disabled \ |
867 | + --border rounded \ |
868 | + --bold)" || exit 1 |
869 | + |
870 | + git add . |
871 | + git commit -S -m "Auto-Commit Update `date '+%d.%m.%Y - %T'`" || true |
872 | + git push $dest |
873 | +}} |
874 | + |
875 | + |
876 | +cmd sudoCP ${{ |
877 | +dest=$PWD |
878 | + for x in ${fx[@]}; do |
879 | + sudo cp -r $x $dest && |
880 | + notify-send "📋 $(basename ${x}) copied to ${dest}" || |
881 | + notify-send "❌ $(basename ${x}) could not be copied to ${dest}." "Please ensure you sudo privileges." |
882 | + done ; lf -remote "send $id unselect" |
883 | +}} |
884 | + |
885 | +cmd sudoMV ${{ |
886 | +dest=$PWD |
887 | + for x in ${fx[@]}; do |
888 | + sudo mv $x $dest && |
889 | + notify-send "🚚 $(basename ${x}) moved to ${dest}" || |
890 | + notify-send "❌ $(basename ${x}) could not be moved to ${dest}." "Please ensure you sudo privileges." |
891 | + done ; lf -remote "send $id unselect" |
892 | +}} |
893 | + |
894 | +cmd makeTemp ${{ |
895 | +tmpd=$(echo $$) ; eval $(mkdir $tmpd && cd $tmpd && notify-send "🔧 Temp dir created." || |
896 | + notify-send "❌ Could not create temp dir.") |
897 | +}} |
898 | + |
899 | +cmd cpPath ${{ |
900 | + realpath ${f:-.} | xargs echo -n | xsel -ib |
901 | + notify-send "📋 Copied path" "\"$(basename $f)\" path coppied to clipboard." |
902 | +}} |
903 | + |
904 | +cmd browserOpen ${{ |
905 | + ${BROWSER:-firefox} $fx >/dev/null 2>&1 || ${BROWSER:-firefox} $f || notify-send "❌No supported browser detected." \ |
906 | + "Please set the BROWSER env variable." |
907 | +}} |
908 | + |
909 | +cmd ext ${{ |
910 | + clear; tput cup $(($(tput lines)/3)); tput bold |
911 | + set -f ; printf "%s\n\t" "$fx" |
912 | + printf "extract?[Y/n]" |
913 | + read ans ; anss=( n N NO nO No ) |
914 | + SUCC(){ notify-send "🔧$(basename ${ARG}) extracted successfully!" ; } |
915 | + FAIL(){ notify-send "❌ '$(basename ${ARG})' could not be extracted via $(basename $0)." ; } |
916 | + [[ "${anss[*]}" != "$ans" ]] && |
917 | + for ARG in $fx ; do |
918 | + [ -f ${ARG} ] && case ${ARG} in |
919 | + *.bz2) bunzip2 ${ARG} && SUCC || FAIL ;; |
920 | + *.rar) unrar x ${ARG} && SUCC || FAIL ;; |
921 | + *.tar) tar xpf ${ARG} && SUCC || FAIL ;; |
922 | + *.tar.*) tar xpf ${ARG} && SUCC || FAIL ;; |
923 | + *.tbz2) tar xjf ${ARG} && SUCC || FAIL ;; |
924 | + *.gz) gunzip ${ARG} && SUCC || FAIL ;; |
925 | + *.tgz) tar xzf ${ARG} && SUCC || FAIL ;; |
926 | + *.zip) unzip ${ARG} && SUCC || FAIL ;; |
927 | + *.Z) uncompress ${ARG} && SUCC || FAIL ;; |
928 | + *.7z) 7z x ${ARG} && SUCC || FAIL ;; |
929 | + *.deb) ar x ${ARG} && SUCC || FAIL ;; |
930 | + *) notify-send "❌ '$(basename ${ARG})' could not be extracted with lfp." ; |
931 | + esac ; done |
932 | + lf -remote "send $id unselect" |
933 | +}} |
934 | + |
935 | +cmd newTernPwd ${{ |
936 | + ${TERMINAL:-st} & disown |
937 | +}} |
938 | + |
939 | + |
940 | +cmd setbg "$1" |
941 | +cmd bulkrename $vidir |
942 | + |
943 | +cmd ocr ${{ |
944 | + node /usr/share/lfp/ocr/ocr.js $fx |
945 | + notify-send "🔧 OCR Complete" "Text copied to clipboard." |
946 | +}} |
947 | + |
948 | + |
949 | + |
950 | + #-----------------------# |
951 | + # ~ B I N D I N G S ~ # |
952 | + #-----------------------# |
953 | + |
954 | + |
955 | +# Basic Bindings: |
956 | + |
957 | +map gh |
958 | +map g top |
959 | +map c cut |
960 | +map d delete |
961 | +map - delete |
962 | +map a rename |
963 | +map <delete> delete |
964 | +map <c-r> reload |
965 | +map <backspace2> set hidden! |
966 | +map <enter> shell |
967 | +map o ocr |
968 | + |
969 | + |
970 | +# LFP-Custom Functions: |
971 | + |
972 | +map m mpvPlay |
973 | +map b browserOpen |
974 | +map f fzfp |
975 | +map B bulkrename |
976 | +map E ext |
977 | +map C cpPath |
978 | +map M sudoMV |
979 | +map D rootdel |
980 | +map L symlink |
981 | +map R symlink_rel |
982 | +map H symlink_hard |
983 | +map P sudoCP |
984 | +map <c-g> pushTo |
985 | +map <c-b> !xwallpaper --stretch $f |
986 | +map <c-t> makeTemp |
987 | +map <c-^> modeChange 644 # Ctrl + 6 |
988 | +map <c-_> modeChange 755 # Ctrl + 7 |
989 | +map = meChange $fx |
990 | +map I newTernPwd |
991 | +map . nodeAction |
992 | +map , pyAction |
993 | +map <c-c> cloneRepo |
994 | + |
995 | + |
996 | +# Commmand Oriented Bindings: |
997 | + |
998 | +map x !$f |
999 | +map s !${EDITOR:-nvim} $f |