aboutsummaryrefslogtreecommitdiffstats
path: root/home-manager/soispha/config/lf
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2023-08-01 15:31:42 +0200
committerSoispha <soispha@vhack.eu>2023-08-01 15:42:54 +0200
commit0a608bd781dcda40144097b007fac0a0c60a8ee1 (patch)
treee69fbc1fd0e15e3b86f31f47b776df21f6f0170d /home-manager/soispha/config/lf
parentFix(hm/conf/gammastep): Use lighter settings on laptops (diff)
downloadnixos-config-0a608bd781dcda40144097b007fac0a0c60a8ee1.zip
Refactor(treewide): Move module configuration in separate files
Diffstat (limited to 'home-manager/soispha/config/lf')
-rw-r--r--home-manager/soispha/config/lf/colors190
-rw-r--r--home-manager/soispha/config/lf/commands/default.nix222
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/archive54
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/broot_jump16
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/chmod13
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/clear_trash8
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/dl_file33
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/dragon11
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/dragon_individual11
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/dragon_stay11
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/fzf_jump15
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/mk_dir24
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/mk_file25
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/mk_ln36
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/mk_scr_default31
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/mk_scr_temp31
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/open11
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/open_config7
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/restore_trash7
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/set_wall_paper10
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/stripspace31
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/trash26
-rwxr-xr-xhome-manager/soispha/config/lf/commands/scripts/unarchive22
-rw-r--r--home-manager/soispha/config/lf/default.nix52
-rw-r--r--home-manager/soispha/config/lf/icons357
-rw-r--r--home-manager/soispha/config/lf/keybindings/default.nix125
26 files changed, 1379 insertions, 0 deletions
diff --git a/home-manager/soispha/config/lf/colors b/home-manager/soispha/config/lf/colors
new file mode 100644
index 00000000..b2289b4e
--- /dev/null
+++ b/home-manager/soispha/config/lf/colors
@@ -0,0 +1,190 @@
+# vim:ft=dircolors
+# (This is not a dircolors file but it helps to highlight colors and comments)
+
+# default values from dircolors
+# (entries with a leading # are not implemented in lf)
+# #no 00 # NORMAL
+# fi 00 # FILE
+# #rs 0 # RESET
+# di 01;34 # DIR
+# ln 01;36 # LINK
+# #mh 00 # MULTIHARDLINK
+# pi 40;33 # FIFO
+# so 01;35 # SOCK
+# #do 01;35 # DOOR
+# bd 40;33;01 # BLK
+# cd 40;33;01 # CHR
+# or 40;31;01 # ORPHAN
+# #mi 00 # MISSING
+# su 37;41 # SETUID
+# sg 30;43 # SETGID
+# #ca 30;41 # CAPABILITY
+# tw 30;42 # STICKY_OTHER_WRITABLE
+# ow 34;42 # OTHER_WRITABLE
+# st 37;44 # STICKY
+# ex 01;32 # EXEC
+
+# default values from lf (with matching order)
+# ln 01;36 # LINK
+# or 31;01 # ORPHAN
+# tw 01;34 # STICKY_OTHER_WRITABLE
+# ow 01;34 # OTHER_WRITABLE
+# st 01;34 # STICKY
+# di 01;34 # DIR
+# pi 33 # FIFO
+# so 01;35 # SOCK
+# bd 33;01 # BLK
+# cd 33;01 # CHR
+# su 01;32 # SETUID
+# sg 01;32 # SETGID
+# ex 01;32 # EXEC
+# fi 00 # FILE
+
+
+# file types (with matching order)
+ln 01;33 # LINK
+#ln 01;34 # LINK
+or 01;35;46 # ORPHAN
+tw 35 # STICKY_OTHER_WRITABLE
+ow 35 # OTHER_WRITABLE
+st 01;36 # STICKY
+di 01;36 # DIR
+pi 33 # FIFO
+so 01;35 # SOCK
+bd 33;01 # BLK
+cd 33;01 # CHR
+su 01;32 # SETUID
+sg 01;32 # SETGID
+ex 01;31;44 # EXEC
+fi 00 # FILE
+
+# links
+~/.mbsyncrc 01;34
+~/.cups 01;34
+~/.mozilla 01;34
+~/.ssh 01;34
+
+~/.steampid 01;34
+~/.steam 01;34
+~/.steampath 01;34
+
+# nix
+~/.nix-profile 01;34
+~/.nix-defexpr 01;34
+
+# archives or compressed (dircolors defaults)
+*.tar 01;31
+*.tgz 01;31
+*.arc 01;31
+*.arj 01;31
+*.taz 01;31
+*.lha 01;31
+*.lz4 01;31
+*.lzh 01;31
+*.lzma 01;31
+*.tlz 01;31
+*.txz 01;31
+*.tzo 01;31
+*.t7z 01;31
+*.zip 01;31
+*.z 01;31
+*.dz 01;31
+*.gz 01;31
+*.lrz 01;31
+*.lz 01;31
+*.lzo 01;31
+*.xz 01;31
+*.zst 01;31
+*.tzst 01;31
+*.bz2 01;31
+*.bz 01;31
+*.tbz 01;31
+*.tbz2 01;31
+*.tz 01;31
+*.deb 01;31
+*.rpm 01;31
+*.jar 01;31
+*.war 01;31
+*.ear 01;31
+*.sar 01;31
+*.rar 01;31
+*.alz 01;31
+*.ace 01;31
+*.zoo 01;31
+*.cpio 01;31
+*.7z 01;31
+*.rz 01;31
+*.cab 01;31
+*.wim 01;31
+*.swm 01;31
+*.dwm 01;31
+*.esd 01;31
+
+# image formats (dircolors defaults)
+*.jpg 01;35
+*.jpeg 01;35
+*.mjpg 01;35
+*.mjpeg 01;35
+*.gif 01;35
+*.bmp 01;35
+*.pbm 01;35
+*.pgm 01;35
+*.ppm 01;35
+*.tga 01;35
+*.xbm 01;35
+*.xpm 01;35
+*.tif 01;35
+*.tiff 01;35
+*.png 01;35
+*.svg 01;35
+*.svgz 01;35
+*.mng 01;35
+*.pcx 01;35
+*.mov 01;35
+*.mpg 01;35
+*.mpeg 01;35
+*.m2v 01;35
+*.mkv 01;35
+*.webm 01;35
+*.ogm 01;35
+*.mp4 01;35
+*.m4v 01;35
+*.mp4v 01;35
+*.vob 01;35
+*.qt 01;35
+*.nuv 01;35
+*.wmv 01;35
+*.asf 01;35
+*.rm 01;35
+*.rmvb 01;35
+*.flc 01;35
+*.avi 01;35
+*.fli 01;35
+*.flv 01;35
+*.gl 01;35
+*.dl 01;35
+*.xcf 01;35
+*.xwd 01;35
+*.yuv 01;35
+*.cgm 01;35
+*.emf 01;35
+*.ogv 01;35
+*.ogx 01;35
+
+# audio formats (dircolors defaults)
+*.aac 00;36
+*.au 00;36
+*.flac 00;36
+*.m4a 00;36
+*.mid 00;36
+*.midi 00;36
+*.mka 00;36
+*.mp3 00;36
+*.mpc 00;36
+*.ogg 00;36
+*.ra 00;36
+*.wav 00;36
+*.oga 00;36
+*.opus 00;36
+*.spx 00;36
+*.xspf 00;36
diff --git a/home-manager/soispha/config/lf/commands/default.nix b/home-manager/soispha/config/lf/commands/default.nix
new file mode 100644
index 00000000..67362fd0
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/default.nix
@@ -0,0 +1,222 @@
+{
+ pkgs,
+ sysLib,
+ shell_library,
+ system,
+ ...
+}: let
+ functionCall = {
+ file,
+ dependencies,
+ replacementStrings,
+ ...
+ }:
+ sysLib.writeShellScriptWithLibraryAndKeepPath {
+ name = "${builtins.baseNameOf file}";
+ src = file;
+ dependencies = dependencies ++ (builtins.attrValues {inherit (pkgs) dash coreutils;});
+ inherit replacementStrings;
+ }
+ + "/bin/${builtins.baseNameOf file}";
+ shell = {
+ file,
+ dependencies,
+ replacementStrings ? null,
+ ...
+ }: ''
+ ''${{
+ ${functionCall {inherit file dependencies replacementStrings;}}
+ }}
+ ''; # closes the lf tui
+ pipe = {
+ file,
+ dependencies,
+ replacementStrings ? null,
+ ...
+ }: ''
+ %{{
+ ${functionCall {inherit file dependencies replacementStrings;}}
+ }}
+ ''; # runs the command in the ui/term bar
+ async = {
+ file,
+ dependencies,
+ replacementStrings ? null,
+ ...
+ }: ''
+ &{{
+ ${functionCall {inherit file dependencies replacementStrings;}}
+ }}
+ ''; # runs the command in the background
+ wait = {
+ file,
+ dependencies,
+ replacementStrings ? null,
+ ...
+ }: ''
+ !{{
+ ${functionCall {inherit file dependencies replacementStrings;}}
+ }}
+ ''; # adds a prompt after the command has run
+in {
+ archive = shell {
+ file = ./scripts/archive;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ fzf
+ gnutar
+ xz
+ p7zip
+ zip
+ ;
+ };
+ };
+ broot_jump = shell {
+ file = ./scripts/broot_jump;
+ dependencies = builtins.attrValues {
+ inherit (pkgs) broot;
+ };
+ };
+ chmod = pipe {
+ file = ./scripts/chmod;
+ dependencies = [];
+ };
+ clear_trash = shell {
+ file = ./scripts/clear_trash;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ fzf
+ trashy
+ ;
+ };
+ };
+ dl_file = pipe {
+ file = ./scripts/dl_file;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ xdragon
+ curl
+ ;
+ };
+ };
+ dragon = pipe {
+ file = ./scripts/dragon;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ xdragon
+ ;
+ };
+ };
+ dragon_individual = pipe {
+ file = ./scripts/dragon_individual;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ xdragon
+ ;
+ };
+ };
+ dragon_stay = pipe {
+ file = ./scripts/dragon_stay;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ xdragon
+ ;
+ };
+ };
+ fzf_jump = shell {
+ file = ./scripts/fzf_jump;
+ dependencies = builtins.attrValues {
+ inherit (pkgs) fzf lf gnused;
+ };
+ };
+ mk_dir = pipe {
+ file = ./scripts/mk_dir;
+ dependencies = [];
+ };
+ mk_file = shell {
+ file = ./scripts/mk_file;
+ dependencies = [];
+ };
+ mk_ln = pipe {
+ file = ./scripts/mk_ln;
+ dependencies = [];
+ };
+ mk_scr_default = shell {
+ file = ./scripts/mk_scr_default;
+ dependencies = builtins.attrValues {inherit (pkgs) neovim;};
+ replacementStrings = {
+ SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}";
+ };
+ };
+ mk_scr_temp = shell {
+ file = ./scripts/mk_scr_temp;
+ dependencies = builtins.attrValues {inherit (pkgs) neovim;};
+ replacementStrings = {
+ SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}";
+ TO_BE_SHELL_LIBRARY_PATH = "%SHELL_LIBRARY_PATH"; # replacement is not recursive
+ };
+ };
+ open = shell {
+ file = ./scripts/open;
+ dependencies = builtins.attrValues {inherit (pkgs) file xdg-utils neovim git;};
+ };
+ open_config = shell {
+ file = ./scripts/open_config;
+ dependencies = builtins.attrValues {
+ #inherit
+ #(pkgs)
+ ## TODO rewrite this: bookmenu, https://github.com/jarun/buku
+ #
+ #buku
+ #;
+ };
+ };
+ restore_trash = shell {
+ file = ./scripts/restore_trash;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ fzf
+ trashy
+ ;
+ };
+ };
+ set_wall_paper = pipe {
+ file = ./scripts/set_wall_paper;
+ dependencies = [];
+ };
+ stripspace = pipe {
+ file = ./scripts/stripspace;
+ dependencies = [];
+ };
+ trash = pipe {
+ file = ./scripts/trash;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ trashy
+ trash-cli
+ findutils
+ ;
+ };
+ };
+ unarchive = pipe {
+ file = ./scripts/unarchive;
+ dependencies = builtins.attrValues {
+ inherit
+ (pkgs)
+ gnutar
+ unzip
+ # TODO this is unfree! unrar
+
+ p7zip
+ ;
+ };
+ };
+}
diff --git a/home-manager/soispha/config/lf/commands/scripts/archive b/home-manager/soispha/config/lf/commands/scripts/archive
new file mode 100755
index 00000000..48fe25fc
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/archive
@@ -0,0 +1,54 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+# Option '-f' disables pathname expansion which can be useful when $f, $fs, and
+# $fx variables contain names with '*' or '?' characters. However, this option
+# is used selectively within individual commands as it can be limiting at
+# times.
+set -f
+
+archivers="$(tmp 'echo "gzip xz 7z zip"')";
+
+prompt "Archive name: "
+name=""
+while [ -z "$name" ] || [ -e "$name" ]
+do
+ read -r name
+ if [ -e "$name" ]; then
+ prompt "Archive already exists, overwrite [y|N]: "
+ read -r ans
+
+ if [ "$ans" = "y" ]; then
+ break
+ else
+ prompt "Archive name: "
+ fi
+ fi
+done
+
+root="$(if [ "$(pwd)" = "/" ]; then pwd; else echo "$(pwd)/";fi)";
+
+# fx contains all selected file name separated by a newline
+while read -r raw_file; do
+ file="$(echo "$raw_file" | sed "s|$root||")";
+ set -- "$@" "$file";
+done < "$(tmp "echo '$fx'")";
+
+case "$(awk '{for (i=1; i<=NF; i++) print $i}' "$archivers" | fzf)" in
+ "gzip")
+ tar -czf "$name".tar.gz "$@"
+ ;;
+ "xz")
+ tar -cf "$name".tar "$@"
+ xz -z -9 -e -T0 "$name".tar
+ ;;
+ "7z")
+ 7z a "$name".7z "$@"
+ ;;
+ "zip")
+ zip --symlinks -r "$name".zip "$@"
+ ;;
+esac
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/broot_jump b/home-manager/soispha/config/lf/commands/scripts/broot_jump
new file mode 100755
index 00000000..abefc616
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/broot_jump
@@ -0,0 +1,16 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+tmp=$(mktmp)
+res="$(broot --outcmd "$tmp" && sed 's/cd //' "$tmp")"
+
+if [ -f "$res" ]; then
+ cmd="select"
+elif [ -d "$res" ]; then
+ cmd="cd"
+fi
+
+lf -remote "send '$id' '$cmd' '$res'"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/chmod b/home-manager/soispha/config/lf/commands/scripts/chmod
new file mode 100755
index 00000000..07bc37cc
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/chmod
@@ -0,0 +1,13 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+readp "Mode bits: " bits
+
+while read -r file; do
+ chmod "$bits" "$file"
+done < "$(tmp "echo $fx")"
+
+lf -remote 'send reload'
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/clear_trash b/home-manager/soispha/config/lf/commands/scripts/clear_trash
new file mode 100755
index 00000000..f2571fcc
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/clear_trash
@@ -0,0 +1,8 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+# could also use --force, for instand removal
+trash list | fzf --multi | awk '{print $NF}' | xargs trash empty --match=exact
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/dl_file b/home-manager/soispha/config/lf/commands/scripts/dl_file
new file mode 100755
index 00000000..54518049
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/dl_file
@@ -0,0 +1,33 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+# Provides the ability to download a file by dropping it into a window
+
+url="$(dragon -t -x)"
+
+if [ -n "$url" ]; then
+ prompt "File Name: "
+ name=""
+ while [ -z "$name" ] || [ -e "$name" ]
+ do
+ read -r name
+ if [ -e "$name" ]; then
+ prompt "File already exists, overwrite [y|N]: "
+ read -r ans
+
+ if [ "$ans" = "y" ]; then
+ break
+ else
+ prompt "File Name: "
+ fi
+ fi
+ done
+
+ # Download the file with curl
+ [ -n "$name" ] && curl -o "$name" "$url" || die "curl failed"
+else
+ die "URL is null!"
+fi
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/dragon b/home-manager/soispha/config/lf/commands/scripts/dragon
new file mode 100755
index 00000000..7e2d9ba6
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/dragon
@@ -0,0 +1,11 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+while read -r file; do
+ set -- "$@" "$file"
+done < "$(tmp "echo '$fx'")"
+
+dragon -a -x "$@"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/dragon_individual b/home-manager/soispha/config/lf/commands/scripts/dragon_individual
new file mode 100755
index 00000000..5d55aaa8
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/dragon_individual
@@ -0,0 +1,11 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+while read -r file; do
+ set -- "$@" "$file"
+done < "$(tmp "echo '$fx'")"
+
+dragon "$@"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/dragon_stay b/home-manager/soispha/config/lf/commands/scripts/dragon_stay
new file mode 100755
index 00000000..f3483483
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/dragon_stay
@@ -0,0 +1,11 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+while read -r file; do
+ set -- "$@" "$file";
+done < "$(tmp "echo '$fx'")"
+
+dragon -a "$@"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/fzf_jump b/home-manager/soispha/config/lf/commands/scripts/fzf_jump
new file mode 100755
index 00000000..c05216f0
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/fzf_jump
@@ -0,0 +1,15 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+res="$(fd . --maxdepth 3 | fzf --header='Jump to location')"
+
+if [ -f "$res" ]; then
+ cmd="select"
+elif [ -d "$res" ]; then
+ cmd="cd"
+fi
+
+lf -remote "send '$id' '$cmd' '$res'"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/mk_dir b/home-manager/soispha/config/lf/commands/scripts/mk_dir
new file mode 100755
index 00000000..4dca06dc
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/mk_dir
@@ -0,0 +1,24 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+prompt "Directory Name: "
+name=""
+while [ -z "$name" ] || [ -e "$name" ]
+do
+ read -r name
+ if [ -e "$name" ]; then
+ prompt "Directory already exists, overwrite [y|N]: "
+ read -r ans
+
+ if [ "$ans" = "y" ]; then
+ break
+ else
+ prompt "Directory Name: "
+ fi
+ fi
+done
+
+mkdir "$name"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/mk_file b/home-manager/soispha/config/lf/commands/scripts/mk_file
new file mode 100755
index 00000000..2e5a2deb
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/mk_file
@@ -0,0 +1,25 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+prompt "File name: "
+name=""
+while [ -z "$name" ] || [ -e "$name" ]
+do
+ read -r name
+ if [ -e "$name" ]; then
+ prompt "File already exists, overwrite [y|N]: "
+ read -r ans
+
+ if [ "$ans" = "y" ]; then
+ break
+ else
+ prompt "File name: "
+ fi
+ fi
+done
+
+touch "$name"
+"$EDITOR" "$name"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/mk_ln b/home-manager/soispha/config/lf/commands/scripts/mk_ln
new file mode 100755
index 00000000..1e97517f
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/mk_ln
@@ -0,0 +1,36 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+while IFS= read -r i;do
+ set -- "$@" "$i"
+done < "$HOME"/.local/share/lf/files
+
+mode="$1"
+shift
+
+if [ "$#" -eq 0 ]; then
+ msg "no files to link"
+ exit 0
+fi
+
+case "$mode" in
+ copy)
+ while [ "$#" -gt 0 ]; do
+ file="$1"
+ ans="$(basename "$file")"
+
+ while [ -e "$ans" ];do
+ prompt "$ans already exists, new name for link: "
+ read -r ans
+ done
+
+ ln -s "$file" "$(pwd)/$ans"
+ shift
+ done
+ ;;
+esac
+rm ~/.local/share/lf/files
+# lf -remote "send clear"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/mk_scr_default b/home-manager/soispha/config/lf/commands/scripts/mk_scr_default
new file mode 100755
index 00000000..b13ca9f5
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/mk_scr_default
@@ -0,0 +1,31 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+
+prompt "Script name: "
+name=""
+while [ -z "$name" ] || [ -e "$name" ]
+do
+ read -r name
+ if [ -e "$name" ]; then
+ prompt "Script already exists, overwrite [y|N]: "
+ read -r ans
+
+ if [ "$ans" = "y" ]; then
+ break
+ else
+ prompt "Script Name: "
+ fi
+ fi
+done
+
+script="$(pwd)"/"$name"
+
+cat "%SHELL_LIBRARY_TEMPLATE" > "$script"
+chmod +x "$script"
+"$VISUAL" "$script"
+
+
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/mk_scr_temp b/home-manager/soispha/config/lf/commands/scripts/mk_scr_temp
new file mode 100755
index 00000000..a520469c
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/mk_scr_temp
@@ -0,0 +1,31 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+
+prompt "Script name: "
+name=""
+while [ -z "$name" ] || [ -e "$name" ]
+do
+ read -r name
+ if [ -e "$name" ]; then
+ prompt "Script already exists, overwrite [y|N]: "
+ read -r ans
+
+ if [ "$ans" = "y" ]; then
+ break
+ else
+ prompt "Script Name: "
+ fi
+ fi
+done
+
+script="$(pwd)"/"$name"
+
+sed 's|%TO_BE_SHELL_LIBRARY_PATH|%SHELL_LIBRARY_PATH|' "%SHELL_LIBRARY_TEMPLATE" > "$script"
+chmod +x "$script"
+"$VISUAL" "$script"
+
+
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/open b/home-manager/soispha/config/lf/commands/scripts/open
new file mode 100755
index 00000000..c507482b
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/open
@@ -0,0 +1,11 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+case $(file --mime-type "$f" -bL) in
+ text/*|application/json|application/vnd.hp-HPGL) "$EDITOR" "$f";;
+ image/*) "$IVIEWER" "$f";;
+ *) xdg-open "$f";;
+esac
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/open_config b/home-manager/soispha/config/lf/commands/scripts/open_config
new file mode 100755
index 00000000..c99422f1
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/open_config
@@ -0,0 +1,7 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+"$EDITOR" "$(bookmenu -b ~/.config/bookmenu/configs -f fzf -o)" # TODO implement this
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/restore_trash b/home-manager/soispha/config/lf/commands/scripts/restore_trash
new file mode 100755
index 00000000..a7bf0094
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/restore_trash
@@ -0,0 +1,7 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+trash list | fzf --multi | awk '{print $NF}' | xargs trash restore --match=exact
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/set_wall_paper b/home-manager/soispha/config/lf/commands/scripts/set_wall_paper
new file mode 100755
index 00000000..45049283
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/set_wall_paper
@@ -0,0 +1,10 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+die "No yet implemented" # TODO do what the 'die' says
+#sed -i "s,export AWMWALLPAPER='.*',export AWMWALLPAPER='${f}'," ${ZDOTDIR}/.zshenv
+#nohub swaybg -i "$f"
+#feh --bg-max --no-fehbg "$f"
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/stripspace b/home-manager/soispha/config/lf/commands/scripts/stripspace
new file mode 100755
index 00000000..91714712
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/stripspace
@@ -0,0 +1,31 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+files=$(mktmp);
+echo "$fx" > "$files";
+
+awk_source=$(mktmp);
+cat << OFT > "$awk_source"
+BEGIN {FS=" "}
+{for (i=1; i != NF + 1; i++)
+ if (i == NF) {
+ parts[i]=tolower(\$i);
+ } else {
+ parts[i]=tolower(\$i"_");
+ }
+}
+END {for (i in parts) printf parts[i]}
+OFT
+
+while read -r file; do
+ dirty_name=$(mktmp)
+ basename "$file" > "$dirty_name";
+ clean_name=$(awk -f "$awk_source" "$dirty_name");
+
+ [ -e "$clean_name" ] && die "file \"$clean_name\" already exists!";
+ mv "$(cat "$dirty_name")" "$clean_name" || die "Move failed";
+ lf -remote 'send reload'
+done < "$files";
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/trash b/home-manager/soispha/config/lf/commands/scripts/trash
new file mode 100755
index 00000000..7f477550
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/trash
@@ -0,0 +1,26 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+trash_output=$(mktmp);
+expected_error_output=$(mktmp);
+
+while read -r file; do
+ set -- "$@" "$file"
+done < "$(tmp "echo '$fx'")"
+
+# TODO why are we using trashy at all, when trash-cli can do everything?
+# try trashy first, trough nix because both trashy and trash-cli provide a trash command, which conflicts
+nix run nixpkgs#trashy -- put "$@" 2> "$trash_output";
+
+cat << EOF > "$expected_error_output";
+error: Error during a \`trash\` operation: Unknown { description: "Path: '\"/.Trash-1000\"'. Message: Permission denied (os error 13)" }
+EOF
+
+if [ "$(cat "$expected_error_output")" = "$(cat "$trash_output")" ];then
+ warning "Deleting with trash-cli to the /.Trash folder";
+ # this file could not be trashed because it is on the tempfs volume, trash-cli can do this this
+ trash-put "$@";
+fi
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/commands/scripts/unarchive b/home-manager/soispha/config/lf/commands/scripts/unarchive
new file mode 100755
index 00000000..69cc601c
--- /dev/null
+++ b/home-manager/soispha/config/lf/commands/scripts/unarchive
@@ -0,0 +1,22 @@
+#! /usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+# extract the current file with the right command
+# (xkcd link: https://xkcd.com/1168/)
+set -f
+# TODO add support for multiple files at once
+case "$f" in
+ *.tar.bz|*.tar.bz2|*.tbz|*.tbz2) tar xjvf "$f";;
+ *.tar.gz|*.tgz) tar xzvf "$f";;
+ *.tar.xz|*.txz) tar xJvf "$f";;
+ *.zip) unzip "$f";;
+ *.rar)
+ die "rar is a unfree format!"
+ #unrar x $f
+ ;;
+ *.7z) 7z x "$f";;
+ *) die "Unsupported format" ;;
+esac
+# vim: ft=sh
diff --git a/home-manager/soispha/config/lf/default.nix b/home-manager/soispha/config/lf/default.nix
new file mode 100644
index 00000000..9f43a891
--- /dev/null
+++ b/home-manager/soispha/config/lf/default.nix
@@ -0,0 +1,52 @@
+{
+ pkgs,
+ sysLib,
+ nixosConfig,
+ shell_library,
+ system,
+ ...
+}: let
+ commands = import ./commands {inherit pkgs sysLib shell_library system;};
+ keybindings = import ./keybindings {inherit nixosConfig;};
+in {
+ xdg.configFile."lf/icons".source = ./icons;
+ xdg.configFile."lf/colors".source = ./colors;
+
+ # TODO add the systemd tempfile option here
+
+ programs.lf = {
+ enable = true;
+
+ inherit commands keybindings;
+
+ previewer = {
+ keybinding = "i";
+ source = "${pkgs.ctpv}/bin/ctpv";
+ };
+ settings = {
+ # TODO this needs to be added to nixos:
+ #autoquit = true; # quit the server, if no clients are left
+ #dirpreviews = true; # preview for directories
+
+ dircounts = true; # count things in directories TODO this has performance impact
+ drawbox = true;
+ # errorfmt = "\\033[1;91m==> ERROR:\\033[0m\\033[1;93m%s\\033[0m";
+ errorfmt = "\\033[1;91m%s\\033[0m";
+ hidden = true; # show hidden files
+ icons = true;
+ ifs = "\\n"; # internal field separator for shell commands
+ #info = "size"; # show the size of a directory
+ shell = "sh";
+ shellopts = "-eu"; # e: exit on error; u: error for unset variables
+ };
+ # TODO remove auto quit, if it has been added
+ extraConfig = ''
+ &${pkgs.ctpv}/bin/ctpv -s $id
+ cmd on-quit %${pkgs.ctpv}/bin/ctpv -e $id
+ set cleaner ${pkgs.ctpv}/bin/ctpvclear
+
+ # close the server, after the last client exits
+ set autoquit true
+ '';
+ };
+}
diff --git a/home-manager/soispha/config/lf/icons b/home-manager/soispha/config/lf/icons
new file mode 100644
index 00000000..7ef62a0b
--- /dev/null
+++ b/home-manager/soispha/config/lf/icons
@@ -0,0 +1,357 @@
+# vim:ft=conf
+
+# These examples require Nerd Fonts or a compatible font to be used.
+# See https://www.nerdfonts.com for more information.
+
+# default values from lf (with matching order)
+# ln l # LINK
+# or l # ORPHAN
+# tw t # STICKY_OTHER_WRITABLE
+# ow d # OTHER_WRITABLE
+# st t # STICKY
+# di d # DIR
+# pi p # FIFO
+# so s # SOCK
+# bd b # BLK
+# cd c # CHR
+# su u # SETUID
+# sg g # SETGID
+# ex x # EXEC
+# fi - # FILE
+
+# file types (with matching order)
+ln  # LINK
+or  # ORPHAN
+tw t # STICKY_OTHER_WRITABLE
+ow  # OTHER_WRITABLE # nf-oct-file_directory
+st t # STICKY
+di  # DIR # nf-oct-file_directory
+pi p # FIFO
+so s # SOCK
+bd b # BLK
+cd c # CHR
+su u # SETUID
+sg g # SETGID
+ex  # EXEC
+fi  # FILE # nf-fa-file_text_o
+
+# file extensions (vim-devicons)
+*.styl 
+*.sass 
+*.scss 
+*.htm 
+*.html 
+*.slim 
+*.haml 
+*.ejs 
+*.css 
+*.less 
+*.md 
+*.mdx 
+*.markdown 
+*.rmd 
+*.json 
+*.webmanifest 
+*.js 
+*.mjs 
+*.jsx 
+*.rb 
+*.gemspec 
+*.rake 
+*.php 
+*.py 
+*.pyc 
+*.pyo 
+*.pyd 
+*.coffee 
+*.mustache 
+*.hbs 
+*.conf 
+*.ini 
+*.yml 
+*.yaml 
+*.toml 
+*.bat 
+*.mk 
+*.jpg 
+*.jpeg 
+*.bmp 
+*.png 
+*.webp 
+*.gif 
+*.ico 
+*.twig 
+*.cpp 
+*.c++ 
+*.cxx 
+*.cc 
+*.cp 
+*.c 
+*.cs 󰌛
+*.h 
+*.hh 
+*.hpp 
+*.hxx 
+*.hs 
+*.lhs 
+*.nix 
+*.lua 
+*.java 
+*.sh 
+*.fish 
+*.bash 
+*.zsh 
+*.ksh 
+*.csh 
+*.awk 
+*.ps1 
+*.ml λ
+*.mli λ
+*.diff 
+*.db 
+*.sql 
+*.dump 
+*.clj 
+*.cljc 
+*.cljs 
+*.edn 
+*.scala 
+*.go 
+*.dart 
+*.xul 
+*.sln 
+*.suo 
+*.pl 
+*.pm 
+*.t 
+*.rss 
+'*.f#' 
+*.fsscript 
+*.fsx 
+*.fs 
+*.fsi 
+*.rs 
+*.rlib 
+*.d 
+*.erl 
+*.hrl 
+*.ex 
+*.exs 
+*.eex 
+*.leex 
+*.heex 
+*.vim 
+*.ai 
+*.psd 
+*.psb 
+*.ts 
+*.tsx 
+*.jl 
+*.pp 
+*.vue 
+*.elm 
+*.swift 
+*.xcplayground 
+*.tex 󰙩
+*.r 󰟔
+*.rproj 󰗆
+*.sol 󰡪
+*.pem 
+
+# file names (vim-devicons) (case-insensitive not supported in lf)
+*gruntfile.coffee 
+*gruntfile.js 
+*gruntfile.ls 
+*gulpfile.coffee 
+*gulpfile.js 
+*gulpfile.ls 
+*mix.lock 
+*dropbox 
+*.ds_store 
+*.gitconfig 
+*.gitignore 
+*.gitattributes 
+*.gitlab-ci.yml 
+*.bashrc 
+*.zshrc 
+*.zshenv 
+*.zprofile 
+*.vimrc 
+*.gvimrc 
+*_vimrc 
+*_gvimrc 
+*.bashprofile 
+*favicon.ico 
+*license 
+*node_modules 
+*react.jsx 
+*procfile 
+*dockerfile 
+*docker-compose.yml 
+*rakefile 
+*config.ru 
+*gemfile 
+*makefile 
+*cmakelists.txt 
+*robots.txt 󰚩
+
+# file names (case-sensitive adaptations)
+*Gruntfile.coffee 
+*Gruntfile.js 
+*Gruntfile.ls 
+*Gulpfile.coffee 
+*Gulpfile.js 
+*Gulpfile.ls 
+*Dropbox 
+*.DS_Store 
+*LICENSE 
+*React.jsx 
+*Procfile 
+*Dockerfile 
+*Docker-compose.yml 
+*Rakefile 
+*Gemfile 
+*Makefile 
+*CMakeLists.txt 
+
+# file patterns (vim-devicons) (patterns not supported in lf)
+# .*jquery.*\.js$ 
+# .*angular.*\.js$ 
+# .*backbone.*\.js$ 
+# .*require.*\.js$ 
+# .*materialize.*\.js$ 
+# .*materialize.*\.css$ 
+# .*mootools.*\.js$ 
+# .*vimrc.* 
+# Vagrantfile$ 
+
+# file patterns (file name adaptations)
+*jquery.min.js 
+*angular.min.js 
+*backbone.min.js 
+*require.min.js 
+*materialize.min.js 
+*materialize.min.css 
+*mootools.min.js 
+*vimrc 
+Vagrantfile 
+
+# archives or compressed (extensions from dircolors defaults)
+*.tar 
+*.tgz 
+*.arc 
+*.arj 
+*.taz 
+*.lha 
+*.lz4 
+*.lzh 
+*.lzma 
+*.tlz 
+*.txz 
+*.tzo 
+*.t7z 
+*.zip 
+*.z 
+*.dz 
+*.gz 
+*.lrz 
+*.lz 
+*.lzo 
+*.xz 
+*.zst 
+*.tzst 
+*.bz2 
+*.bz 
+*.tbz 
+*.tbz2 
+*.tz 
+*.deb 
+*.rpm 
+*.jar 
+*.war 
+*.ear 
+*.sar 
+*.rar 
+*.alz 
+*.ace 
+*.zoo 
+*.cpio 
+*.7z 
+*.rz 
+*.cab 
+*.wim 
+*.swm 
+*.dwm 
+*.esd 
+
+# image formats (extensions from dircolors defaults)
+*.jpg 
+*.jpeg 
+*.mjpg 
+*.mjpeg 
+*.gif 
+*.bmp 
+*.pbm 
+*.pgm 
+*.ppm 
+*.tga 
+*.xbm 
+*.xpm 
+*.tif 
+*.tiff 
+*.png 
+*.svg 
+*.svgz 
+*.mng 
+*.pcx 
+*.mov 
+*.mpg 
+*.mpeg 
+*.m2v 
+*.mkv 
+*.webm 
+*.ogm 
+*.mp4 
+*.m4v 
+*.mp4v 
+*.vob 
+*.qt 
+*.nuv 
+*.wmv 
+*.asf 
+*.rm 
+*.rmvb 
+*.flc 
+*.avi 
+*.fli 
+*.flv 
+*.gl 
+*.dl 
+*.xcf 
+*.xwd 
+*.yuv 
+*.cgm 
+*.emf 
+*.ogv 
+*.ogx 
+
+# audio formats (extensions from dircolors defaults)
+*.aac 
+*.au 
+*.flac 
+*.m4a 
+*.mid 
+*.midi 
+*.mka 
+*.mp3 
+*.mpc 
+*.ogg 
+*.ra 
+*.wav 
+*.oga 
+*.opus 
+*.spx 
+*.xspf 
+
+# other formats
+*.pdf 
diff --git a/home-manager/soispha/config/lf/keybindings/default.nix b/home-manager/soispha/config/lf/keybindings/default.nix
new file mode 100644
index 00000000..bd11f3e3
--- /dev/null
+++ b/home-manager/soispha/config/lf/keybindings/default.nix
@@ -0,0 +1,125 @@
+{nixosConfig, ...}: {
+ # Remove some defaults
+ m = null;
+ "\"'\"" = null;
+ "'\"'" = null;
+ d = null;
+ c = null;
+ e = null;
+ j = null;
+ k = null;
+ l = null;
+ ";" = null;
+
+ # File Openers
+ ee = "\$\$EDITOR \"$f\"";
+ u = "%\$IVIEWER \"$f\"";
+ cc = "\$sudo -e \"$f\"";
+
+ # Archive Mappings
+ au = "unarchive";
+ aa = "archive";
+
+ # Trash Mappings
+ dd = "trash";
+ jc = "clear_trash";
+ jr = "restore_trash";
+
+ # Broot Mapping
+ f = "fzf_jump";
+
+ # Dragon Mapping
+ dr = "dragon";
+ ds = "dragon-stay";
+ di = "dragon-individual";
+ #dm = "mvdragon";
+ #dc = "cpdragon";
+ dl = "dlfile";
+
+ cs = "stripspace";
+
+ # Vim keys
+ h = "updir";
+ t = "down";
+ n = "up";
+ s = "open";
+
+ # Basic Functions
+ "." = "set hidden!";
+ DD = "delete";
+ p = "paste";
+ x = "cut";
+ y = "copy";
+ "<enter>" = "open";
+
+ mk = "mk_ln";
+ mf = "mk_file";
+ md = "mk_dir";
+ ms = "mk_scr_default";
+ mt = "mk_scr_temp";
+
+ ch = "chmod";
+ bg = "set_wall_paper";
+ o = "open_config";
+ r = "rename";
+ H = "top";
+ L = "bottom";
+ R = "reload";
+ C = "clear";
+ U = "unselect";
+
+ # Movement
+ gjr = "cd ~/.local/share/Trash/files";
+ gus = "cd /run/user/${builtins.toString nixosConfig.users.users.soispha.uid}";
+
+ "gr." = "cd ~/repos";
+ grn = "cd ~/repos/nix";
+ grcc = "cd ~/repos/c";
+ grcp = "cd ~/repos/cpp";
+ grl = "cd ~/repos/lua";
+ grr = "cd ~/repos/rust";
+ grs = "cd ~/repos/shell";
+ grjs = "cd ~/repos/java_script";
+ grmd = "cd ~/repos/mark_down";
+ grty = "cd ~/repos/typst";
+ grte = "cd ~/repos/tex";
+ grj = "cd ~/repos/java";
+ gra = "cd ~/repos/awk";
+ grpy = "cd ~/repos/python";
+ grpe = "cd ~/repos/perl";
+ grahk = "cd ~/repos/auto_hot_key";
+ grh = "cd ~/repos/html";
+ # -------------
+ "gm." = "cd ~/media";
+ gmp = "cd ~/media/pictures";
+ gmd = "cd ~/media/downloads";
+ gmm = "cd ~/media/music";
+ gmi = "cd ~/media/isos";
+ # -------------
+ "gs." = "cd ~/school";
+ gsi = "cd ~/school/infomatik";
+ gsc = "cd ~/school/chemie";
+ gse = "cd ~/school/english";
+ gsgo = "cd ~/school/geographie";
+ gsgs = "cd ~/school/geschichte";
+ gskr = "cd ~/school/katholische_religion";
+ gsmu = "cd ~/school/musik";
+ gsma = "cd ~/school/mathematik";
+ gsl = "cd ~/school/latein";
+ gsd = "cd ~/school/deutsch";
+ gsb = "cd ~/school/biologie";
+ gsso = "cd ~/school/sozialkunde";
+ gssp = "cd ~/school/sport";
+ gspy = "cd ~/school/physik";
+ gspi = "cd ~/school/philosophie";
+ # -------------
+
+ gc = "cd ~/.config";
+ gl = "cd ~/.local";
+ gE = "cd /etc";
+
+ "gU." = "cd /usr";
+ gUs = " cd /usr/share";
+
+ gt = "cd /tmp";
+}