about summary refs log tree commit diff stats
path: root/hm/soispha/pkgs/scripts/specific/neorg/sh/functions
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2024-01-13 12:04:52 +0100
committerSoispha <soispha@vhack.eu>2024-01-13 12:04:52 +0100
commit94b2cdc6a17920cfb2bcad6c1172f4d513411daa (patch)
tree941e651cbd4adffacefed544f12817a333a67b61 /hm/soispha/pkgs/scripts/specific/neorg/sh/functions
parentfeat(hm/conf/less): Configure the full lesskey file (diff)
downloadnixos-config-94b2cdc6a17920cfb2bcad6c1172f4d513411daa.zip
refactor(hm/pkgs/scrs/specific/neorg/sh): Split the script into sub-scripts
Diffstat (limited to 'hm/soispha/pkgs/scripts/specific/neorg/sh/functions')
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/add23
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/context43
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/dmenu12
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_start7
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_stop7
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/list8
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/project42
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/utils39
-rw-r--r--hm/soispha/pkgs/scripts/specific/neorg/sh/functions/workspace9
9 files changed, 190 insertions, 0 deletions
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/add b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/add
new file mode 100644
index 00000000..bd700775
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/add
@@ -0,0 +1,23 @@
+#!/usr/bin/env dash
+
+add0open_taskwarrior_project_file() {
+    task_project_file="%TASK_PROJECT_FILE";
+
+    cd "$(dirname $task_project_file)" || die "BUG: task_project_file ('$task_project_file') can't be accessed"
+
+    git_dir="$(search_flake_base_dir)";
+    [ "$git_dir" ] || die "(BUG): No git directory?"
+    cd "$git_dir" || die "Unreachable, this MUST exists"
+
+    nvim "$task_project_file";
+    git add "$task_project_file";
+
+    base_task_project_file_path="$(awk "{ gsub(\"$git_dir/\", \"\", \$0); print }" "$(ptmp "$task_project_file")")"
+    git add $task_project_file;
+
+    # Check that only the project file has been added (and that our file is actually
+    # modified)
+    if git status --porcelain=v2 | awk -v path="$base_task_project_file_path" 'BEGIN { hit = 0 } { if ($2 ~ /A./ || $2 ~ /M./) { if ($NF ~ path) { hit = 1 } else { hit = 0; exit 1 } } } END { if (hit == 1) { exit 0 } else { exit 1 } }'; then
+            git commit --verbose --message="chore($(dirname "$base_task_project_file_path")): Update"
+    fi
+}
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/context b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/context
new file mode 100644
index 00000000..b9ae4463
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/context
@@ -0,0 +1,43 @@
+#!/usr/bin/env dash
+
+context0open_current_task_context() {
+    current_context="$(utils0get_current_context)"
+
+    if [ "$current_context" ]; then
+        context_path="$(utils0get_current_context_path "$current_context")";
+
+        extended_neorg_project_dir="$(utils0get_neorg_project_dir)";
+        cd "$extended_neorg_project_dir" || die "(BUG?): Can not access the project dir: $extended_neorg_project_dir";
+
+        nvim "$extended_neorg_project_dir/$context_path";
+
+        git add .;
+        git commit --message="chore($(dirname "$context_path")): Update" --no-gpg-sign
+    else
+        warn "No context active";
+    fi
+}
+
+context0open_current_task_context_at_task_id() {
+    task_id="$1";
+    current_context="$(utils0get_current_context)"
+
+    if [ "$current_context" ]; then
+        context_path="$(utils0get_current_context_path "$current_context")";
+        extended_neorg_project_dir="$(utils0get_neorg_project_dir)";
+        task_uuid="$(task "$task_id" uuids)"
+
+        cd "$extended_neorg_project_dir" || die "(BUG?): Can not access the project dir: $extended_neorg_project_dir";
+
+        if ! grep -q "% $task_uuid" "$extended_neorg_project_dir/$context_path"; then
+            echo "* TITLE (% $task_uuid)" >> "$extended_neorg_project_dir/$context_path"
+        fi
+
+        nvim "$extended_neorg_project_dir/$context_path" -c "/% $task_uuid";
+
+        git add .;
+        git commit --message="chore($(dirname "$context_path")): Update" --no-gpg-sign
+    else
+        warn "No context active";
+    fi
+}
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/dmenu b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/dmenu
new file mode 100644
index 00000000..36133004
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/dmenu
@@ -0,0 +1,12 @@
+#!/usr/bin/env dash
+
+dmenu0open_context_in_browser() {
+    project="$(echo "%ALL_PROJECTS_PIPE" | rofi -sep "|" -dmenu)";
+
+    if [ "$project" ]; then
+        project0open_project_in_browser "$project";
+    else
+        notify-send "(neorg/dmenu) No project selected";
+        exit 1
+    fi
+}
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_start b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_start
new file mode 100644
index 00000000..c75986a7
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_start
@@ -0,0 +1,7 @@
+#!/usr/bin/env dash
+
+fstart0start_new_task() {
+    task_id="$1";
+    fstop0stop_current_task;
+    task start "$task_id"
+}
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_stop b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_stop
new file mode 100644
index 00000000..d60cb46f
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_stop
@@ -0,0 +1,7 @@
+#!/usr/bin/env dash
+
+fstop0stop_current_task() {
+    # we ensured that only one task may be active
+    active="$(task +ACTIVE _ids)";
+    [ "$active" ] && task stop "$active";
+}
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/list b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/list
new file mode 100644
index 00000000..10659457
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/list
@@ -0,0 +1,8 @@
+#!/usr/bin/env dash
+
+list0list_all_contexts_newline() {
+    print "%ALL_PROJECTS_NEWLINE"
+}
+list0list_all_contexts_comma() {
+    print "%ALL_PROJECTS_COMMA"
+}
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/project b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/project
new file mode 100644
index 00000000..8def0930
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/project
@@ -0,0 +1,42 @@
+#!/usr/bin/env dash
+
+project0open_current_context_in_browser() {
+    current_context="$(utils0get_current_context)";
+    [ "$current_context" ] || die "No current context to use";
+    project0open_context_in_browser "$(utils0context2project "$current_context")";
+}
+
+project0open_project_in_browser() {
+    project="$1";
+    [ "$project" ] || die "BUG: No context supplied to project0open_context_in_browser"
+
+    old_context="$(utils0get_current_context)";
+    # We have ensured that only one task may be active
+    old_started_task="$(task +ACTIVE _ids)";
+
+    tracking="$(mktmp)";
+    task "project:$project" _ids | xargs --no-run-if-empty task _zshids > "$tracking";
+    task context "$(utils0project2context "$project")"
+
+    while read -r description; do
+        desc="$(echo "$description" | awk -F: '{print $2}' )";
+        if [ "$desc" = "tracking" ]; then
+            task_id="$(echo "$description" | awk -F: '{print $1}' )";
+            notify-send "(Neorg)"  "Starting task $project -> $desc";
+            task start "$task_id"
+            break
+        fi
+    done < "$tracking"
+
+
+    firefox -P "$project"
+
+    task stop "$task_id"
+    [ "$old_started_task" ] && task start "$old_started_task"
+
+    if [ "$old_context" ]; then
+        task context "$old_context"
+    else
+        task context none
+    fi
+}
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/utils b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/utils
new file mode 100644
index 00000000..ce9b7710
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/utils
@@ -0,0 +1,39 @@
+#!/usr/bin/env dash
+
+# Runs it's first argument and then the second, regardless if the first failed or succeed
+utils0chain() {
+    eval "$1"; eval "$2"
+}
+
+utils0get_current_context() {
+    current_context="$(task _get rc0context)";
+    printf "%s\n" "$current_context";
+}
+
+utils0get_current_context_path() {
+    current_context="$1";
+    context_path="$(task _get rc.context."$current_context".rc.neorg_path 2>/dev/null)";
+    if ! [ "$context_path" ]; then
+        context_path="$(grep "context.$current_context.rc.neorg_path" "%HOME_TASKRC" | awk 'BEGIN {FS="="} {print $2}')";
+        [ "$context_path" ] || die "All contexts should have a 'neorg_path' set!"
+    fi
+    printf "%s\n" "$context_path"
+}
+
+utils0get_neorg_project_dir() {
+    # Perform shell expansion of Tilde
+    neorg_project_dir="$(sed "s|^~|$HOME|" "$(ptmp "%DEFAULT_NEORG_PROJECT_DIR")")";
+    printf "%s\n" "$neorg_project_dir"
+}
+
+
+utils0project2context() {
+    project="$1";
+    context="$(sed 's|\.|_|g' "$(ptmp "$project")")";
+    printf "%s\n" "$context";
+}
+utils0context2project() {
+    context="$1";
+    project="$(sed 's|_|\.|g' "$(ptmp "$context")")";
+    printf "%s\n" "$project";
+}
diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/workspace b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/workspace
new file mode 100644
index 00000000..d5eb2fca
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/workspace
@@ -0,0 +1,9 @@
+#!/usr/bin/env dash
+
+workspace0open_neorg_workspace() {
+    workspace="$1"
+    nvim -c "NeorgStart" -s "$(ptmp ":Neorg workspace $workspace\n")"
+}
+workspace0open_neorg_workspace_prompt() {
+    nvim -c "NeorgStart" -s "$(ptmp ":Neorg workspace ")"
+}