#!/usr/bin/env nuxr-nuxsh nux.use nuxfs MARK_DIR_NAME=.by MARK_PREFIX="" @namespace nuxfs. { function :path.relative base target { realpath -Lms --relative-to="$base" "$target" } function :path.display target { echo $NC_LightPurple$(nuxfs.relative-to-pwd "$target")$NC_No } function :symlink target dir name { relative=$(nuxfs.path.relative "$dir" "$target") nux.log debug "Relative path is: $relative" :stage mkdir -p "$dir" if [ -n "$name" ]; then :stage ln -sf "$relative" "$dir/$name" else :stage ln -sf "$relative" "$dir" fi } function :stage { if [ -n "$NUXFS_STAGE" ]; then echo "[stage]" "$@" else "$@" fi } } ## Manages symlinks in closest mark (**.by**) directory, provides functionality to batch create ## them with relative paths. ## ## #Available tasks: @namespace mark. { function :dir item { if [ -n "$MARK_DIR" ]; then echo $MARK_DIR; else nuxfs.closest "$MARK_DIR_NAME" "$item" fi } function :mark root item mark { nuxfs.info "$item" Creating symlink in $(nuxfs.path.display "$root/$mark") nuxfs.symlink "$item" "$root/$mark" } } @namespace task. { ## tag:: ## Performs specified task in tag namespace (marks prefixed with **tag/**) function :tag task { MARK_PREFIX="tag/" nuxr.run "$task" "$@" } ## this:: [marks...] ## Marks **current folder** with specific markers. ## This creates symlinks in **mark** folder pointing to **current folder**. function :this mark { nux.log debug "Args $#" item=$(pwd) mark_root=$(mark.dir "$item") mark.mark "$mark_root" "$item" "$MARK_PREFIX$mark" while [ "$#" -gt 0 ]; do mark="$1"; shift; mark.mark "$mark_root" "$item" "$MARK_PREFIX$mark" done } ## multiple:: ## Marks **files** with specific **mark**. ## This creates symlinks for files in **mark** folder. function :multiple mark { mark_root=$(mark.dir "$pwd") while [ "$#" -gt 0 ]; do item="$1"; shift; mark.mark "$mark_root" "$item" "$MARK_PREFIX$mark" done } ## display:: [mark] ## Displays path to current mark folder and displays available marks. ## If **mark** is provided list nested marks. function :display mark { mark_root=$(mark.dir $pwd) prefix="$MARK_PREFIX" if [ -n "$mark" ]; then prefix="$MARK_PREFIX$mark/"; fi echo $mark_root: ( cd $(mark_root); for mark in "$prefix"* ; do echo ${mark#$MARK_PREFIX}; done; ) } }