lfp


Logs | Files | README | LICENSE | GitLab


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 
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 
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
+          _   __          __       ___   ____________________  _   __
571
+         / | / /___  ____/ /__    /   | / ____/_  __/  _/ __ \/ | / /
572
+        /  |/ / __ \/ __  / _ \  / /| |/ /     / /  / // / / /  |/ /
573
+       / /|  / /_/ / /_/ /  __/ / ___ / /___  / / _/ // /_/ / /|  /
574
+      /_/ |_/\____/\__,_/\___/ /_/  |_\____/ /_/ /___/\____/_/ |_/
575
+      
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
+          ____          ___   ____________________  _   __
703
+         / __ \__  __  /   | / ____/_  __/  _/ __ \/ | / /
704
+        / /_/ / / / / / /| |/ /     / /  / // / / /  |/ /
705
+       / ____/ /_/ / / ___ / /___  / / _/ // /_/ / /|  /
706
+      /_/    \__, / /_/  |_\____/ /_/ /___/\____/_/ |_/
707
+            /____/
708
+      
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