about summary refs log tree commit diff stats
path: root/hm/soispha/conf/lf
diff options
context:
space:
mode:
Diffstat (limited to 'hm/soispha/conf/lf')
-rw-r--r--hm/soispha/conf/lf/colors190
-rw-r--r--hm/soispha/conf/lf/commands/default.nix241
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/archive54
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/broot_jump16
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/chmod13
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/clear_trash8
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/dl_file33
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/dragon11
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/dragon_individual11
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/dragon_stay11
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/fzf_jump16
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/go_project_root13
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/mk_dir24
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/mk_file24
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/mk_file_and_edit25
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/mk_ln36
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/mk_scr_default31
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/mk_scr_temp31
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/open11
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/open_config7
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/restore_trash7
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/set_wall_paper10
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/stripspace31
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/trash26
-rwxr-xr-xhm/soispha/conf/lf/commands/scripts/unarchive22
-rw-r--r--hm/soispha/conf/lf/default.nix53
-rw-r--r--hm/soispha/conf/lf/icons357
-rw-r--r--hm/soispha/conf/lf/keybindings/default.nix127
28 files changed, 1439 insertions, 0 deletions
diff --git a/hm/soispha/conf/lf/colors b/hm/soispha/conf/lf/colors
new file mode 100644
index 00000000..b2289b4e
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/default.nix b/hm/soispha/conf/lf/commands/default.nix
new file mode 100644
index 00000000..a52cb2f0
--- /dev/null
+++ b/hm/soispha/conf/lf/commands/default.nix
@@ -0,0 +1,241 @@
+{
+  pkgs,
+  sysLib,
+  shell_library,
+  system,
+  lf_rename,
+  ...
+}: 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_file_and_edit = shell {
+    file = ./scripts/mk_file_and_edit;
+    dependencies = [];
+  };
+  mk_ln = pipe {
+    file = ./scripts/mk_ln;
+    dependencies = [];
+  };
+  mk_scr_default = shell {
+    file = ./scripts/mk_scr_default;
+    dependencies = builtins.attrValues {};
+    replacementStrings = {
+      SHELL_LIBRARY_TEMPLATE = "${shell_library.rawTemplate."${system}"}";
+    };
+  };
+  mk_scr_temp = shell {
+    file = ./scripts/mk_scr_temp;
+    dependencies = builtins.attrValues {};
+    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;};
+  };
+  go_project_base_directory = async {
+    file = ./scripts/go_project_root;
+    dependencies = [];
+  };
+  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 = [];
+  };
+  /*
+  FIXME:
+  The c code fails, when stdout/-in is piped.
+  rename = ''
+    %{{
+      ${lf_rename.packages."${system}".default}/bin/rename
+    }}
+  '';
+  */
+  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/hm/soispha/conf/lf/commands/scripts/archive b/hm/soispha/conf/lf/commands/scripts/archive
new file mode 100755
index 00000000..48fe25fc
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/broot_jump b/hm/soispha/conf/lf/commands/scripts/broot_jump
new file mode 100755
index 00000000..abefc616
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/chmod b/hm/soispha/conf/lf/commands/scripts/chmod
new file mode 100755
index 00000000..07bc37cc
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/clear_trash b/hm/soispha/conf/lf/commands/scripts/clear_trash
new file mode 100755
index 00000000..f2571fcc
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/dl_file b/hm/soispha/conf/lf/commands/scripts/dl_file
new file mode 100755
index 00000000..54518049
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/dragon b/hm/soispha/conf/lf/commands/scripts/dragon
new file mode 100755
index 00000000..7e2d9ba6
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/dragon_individual b/hm/soispha/conf/lf/commands/scripts/dragon_individual
new file mode 100755
index 00000000..5d55aaa8
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/dragon_stay b/hm/soispha/conf/lf/commands/scripts/dragon_stay
new file mode 100755
index 00000000..f3483483
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/fzf_jump b/hm/soispha/conf/lf/commands/scripts/fzf_jump
new file mode 100755
index 00000000..0e53d7ca
--- /dev/null
+++ b/hm/soispha/conf/lf/commands/scripts/fzf_jump
@@ -0,0 +1,16 @@
+#! /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/hm/soispha/conf/lf/commands/scripts/go_project_root b/hm/soispha/conf/lf/commands/scripts/go_project_root
new file mode 100755
index 00000000..555caaf9
--- /dev/null
+++ b/hm/soispha/conf/lf/commands/scripts/go_project_root
@@ -0,0 +1,13 @@
+#!/usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="1.1.4" . %SHELL_LIBRARY_PATH
+
+flake_base_dir="$(search_flake_base_dir)";
+if [ "$flake_base_dir" ]; then
+    lf -remote "send $id cd $flake_base_dir" || die "Bug: No base dir ($flake_base_dir)"
+else
+    die "Unable to locate base dir";
+fi
+
+# vim: ft=sh
diff --git a/hm/soispha/conf/lf/commands/scripts/mk_dir b/hm/soispha/conf/lf/commands/scripts/mk_dir
new file mode 100755
index 00000000..4dca06dc
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/mk_file b/hm/soispha/conf/lf/commands/scripts/mk_file
new file mode 100755
index 00000000..5f245396
--- /dev/null
+++ b/hm/soispha/conf/lf/commands/scripts/mk_file
@@ -0,0 +1,24 @@
+#! /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"
+# vim: ft=sh
diff --git a/hm/soispha/conf/lf/commands/scripts/mk_file_and_edit b/hm/soispha/conf/lf/commands/scripts/mk_file_and_edit
new file mode 100755
index 00000000..2e5a2deb
--- /dev/null
+++ b/hm/soispha/conf/lf/commands/scripts/mk_file_and_edit
@@ -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/hm/soispha/conf/lf/commands/scripts/mk_ln b/hm/soispha/conf/lf/commands/scripts/mk_ln
new file mode 100755
index 00000000..1e97517f
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/mk_scr_default b/hm/soispha/conf/lf/commands/scripts/mk_scr_default
new file mode 100755
index 00000000..b13ca9f5
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/mk_scr_temp b/hm/soispha/conf/lf/commands/scripts/mk_scr_temp
new file mode 100755
index 00000000..a520469c
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/open b/hm/soispha/conf/lf/commands/scripts/open
new file mode 100755
index 00000000..c507482b
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/open_config b/hm/soispha/conf/lf/commands/scripts/open_config
new file mode 100755
index 00000000..35e5165d
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/restore_trash b/hm/soispha/conf/lf/commands/scripts/restore_trash
new file mode 100755
index 00000000..a7bf0094
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/set_wall_paper b/hm/soispha/conf/lf/commands/scripts/set_wall_paper
new file mode 100755
index 00000000..c493e773
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/stripspace b/hm/soispha/conf/lf/commands/scripts/stripspace
new file mode 100755
index 00000000..91714712
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/trash b/hm/soispha/conf/lf/commands/scripts/trash
new file mode 100755
index 00000000..8dd6033d
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/commands/scripts/unarchive b/hm/soispha/conf/lf/commands/scripts/unarchive
new file mode 100755
index 00000000..ee97f3b1
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/default.nix b/hm/soispha/conf/lf/default.nix
new file mode 100644
index 00000000..ed037b05
--- /dev/null
+++ b/hm/soispha/conf/lf/default.nix
@@ -0,0 +1,53 @@
+{
+  pkgs,
+  sysLib,
+  nixosConfig,
+  shell_library,
+  lf_rename,
+  system,
+  ...
+}: let
+  commands = import ./commands {inherit pkgs sysLib shell_library system lf_rename;};
+  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/hm/soispha/conf/lf/icons b/hm/soispha/conf/lf/icons
new file mode 100644
index 00000000..7ef62a0b
--- /dev/null
+++ b/hm/soispha/conf/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/hm/soispha/conf/lf/keybindings/default.nix b/hm/soispha/conf/lf/keybindings/default.nix
new file mode 100644
index 00000000..ab34d7d4
--- /dev/null
+++ b/hm/soispha/conf/lf/keybindings/default.nix
@@ -0,0 +1,127 @@
+{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\"";
+  es = "\$ nvim -S \"$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";
+  me = "mk_file_and_edit";
+  md = "mk_dir";
+  ms = "mk_scr_default";
+  mt = "mk_scr_temp";
+
+  ch = "chmod";
+  bg = "set_wall_paper";
+  o = "open_config";
+  r = "rename";
+  H = "go_project_base_directory";
+  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";
+}