From 8284b6a7b4d212913083b003a819fda8d4931d4d Mon Sep 17 00:00:00 2001 From: Soispha Date: Sat, 24 Feb 2024 14:59:50 +0100 Subject: refactor(hm/pkgs): Implement with an nixpkgs overlay --- flake.lock | 22 +- flake.nix | 2 + flake/default.nix | 5 +- hm/soispha/pkgs/default.nix | 31 +- hm/soispha/pkgs/scripts.nix | 347 -------------------- hm/soispha/pkgs/scripts/apps/aumo.sh | 25 -- hm/soispha/pkgs/scripts/apps/con2pdf.sh | 234 -------------- hm/soispha/pkgs/scripts/apps/fupdate.1.md | 70 ----- hm/soispha/pkgs/scripts/apps/fupdate.sh | 167 ---------- hm/soispha/pkgs/scripts/apps/git-edit-index.sh | 95 ------ hm/soispha/pkgs/scripts/small_functions/nato.py | 106 ------- .../small_functions/screenshot_persistent.sh | 22 -- .../small_functions/screenshot_temporary.sh | 8 - .../pkgs/scripts/small_functions/update-sys.sh | 77 ----- .../scripts/specific/neorg/neorg_id_function.sh | 12 - hm/soispha/pkgs/scripts/specific/neorg/nu/add.nu | 3 - hm/soispha/pkgs/scripts/specific/neorg/nu/dmenu.nu | 5 - .../pkgs/scripts/specific/neorg/nu/fstart.nu | 5 - hm/soispha/pkgs/scripts/specific/neorg/nu/fstop.nu | 2 - hm/soispha/pkgs/scripts/specific/neorg/nu/list.nu | 2 - hm/soispha/pkgs/scripts/specific/neorg/nu/neorg.nu | 74 ----- .../pkgs/scripts/specific/neorg/nu/project.nu | 5 - hm/soispha/pkgs/scripts/specific/neorg/nu/task.nu | 7 - .../pkgs/scripts/specific/neorg/nu/workspace.nu | 25 -- .../scripts/specific/neorg/sh/functions/add.sh | 23 -- .../scripts/specific/neorg/sh/functions/context.sh | 43 --- .../scripts/specific/neorg/sh/functions/dmenu.sh | 12 - .../scripts/specific/neorg/sh/functions/f_start.sh | 7 - .../scripts/specific/neorg/sh/functions/f_stop.sh | 7 - .../scripts/specific/neorg/sh/functions/list.sh | 8 - .../scripts/specific/neorg/sh/functions/project.sh | 41 --- .../scripts/specific/neorg/sh/functions/utils.sh | 40 --- .../specific/neorg/sh/functions/workspace.sh | 9 - hm/soispha/pkgs/scripts/specific/neorg/sh/main.sh | 155 --------- .../pkgs/scripts/specific/ytcc/description.sh | 8 - hm/soispha/pkgs/scripts/wrappers/battery.sh | 11 - hm/soispha/pkgs/scripts/wrappers/hibernate.sh | 15 - hm/soispha/pkgs/scripts/wrappers/ll.sh | 14 - hm/soispha/pkgs/scripts/wrappers/lock.sh | 18 -- hm/soispha/pkgs/scripts/wrappers/lyrics.sh | 11 - hm/soispha/pkgs/scripts/wrappers/mpc-fav.sh | 14 - hm/soispha/pkgs/scripts/wrappers/mpc-rm.sh | 10 - hm/soispha/pkgs/scripts/wrappers/mpc.sh | 20 -- hm/soispha/pkgs/scripts/wrappers/show.sh | 9 - hm/soispha/pkgs/scripts/wrappers/sort_song.sh | 34 -- hm/soispha/pkgs/scripts/wrappers/spodi.sh | 55 ---- hm/soispha/pkgs/scripts/wrappers/virsh-del.sh | 10 - hm/soispha/pkgs/scripts/wrappers/yti.sh | 33 -- sys/nixpkgs/default.nix | 3 +- sys/nixpkgs/pkgs/default.nix | 18 +- sys/nixpkgs/pkgs/scripts/default.nix | 350 +++++++++++++++++++++ sys/nixpkgs/pkgs/scripts/source/apps/aumo.sh | 25 ++ sys/nixpkgs/pkgs/scripts/source/apps/con2pdf.sh | 234 ++++++++++++++ sys/nixpkgs/pkgs/scripts/source/apps/fupdate.1.md | 70 +++++ sys/nixpkgs/pkgs/scripts/source/apps/fupdate.sh | 167 ++++++++++ .../pkgs/scripts/source/apps/git-edit-index.sh | 95 ++++++ .../pkgs/scripts/source/small_functions/nato.py | 106 +++++++ .../small_functions/screenshot_persistent.sh | 22 ++ .../source/small_functions/screenshot_temporary.sh | 8 + .../scripts/source/small_functions/update-sys.sh | 77 +++++ .../source/specific/neorg/neorg_id_function.sh | 12 + .../pkgs/scripts/source/specific/neorg/nu/add.nu | 3 + .../pkgs/scripts/source/specific/neorg/nu/dmenu.nu | 5 + .../scripts/source/specific/neorg/nu/fstart.nu | 5 + .../pkgs/scripts/source/specific/neorg/nu/fstop.nu | 2 + .../pkgs/scripts/source/specific/neorg/nu/list.nu | 2 + .../pkgs/scripts/source/specific/neorg/nu/neorg.nu | 74 +++++ .../scripts/source/specific/neorg/nu/project.nu | 5 + .../pkgs/scripts/source/specific/neorg/nu/task.nu | 7 + .../scripts/source/specific/neorg/nu/workspace.nu | 25 ++ .../source/specific/neorg/sh/functions/add.sh | 23 ++ .../source/specific/neorg/sh/functions/context.sh | 43 +++ .../source/specific/neorg/sh/functions/dmenu.sh | 12 + .../source/specific/neorg/sh/functions/f_start.sh | 7 + .../source/specific/neorg/sh/functions/f_stop.sh | 7 + .../source/specific/neorg/sh/functions/list.sh | 8 + .../source/specific/neorg/sh/functions/project.sh | 41 +++ .../source/specific/neorg/sh/functions/utils.sh | 40 +++ .../specific/neorg/sh/functions/workspace.sh | 9 + .../pkgs/scripts/source/specific/neorg/sh/main.sh | 155 +++++++++ .../scripts/source/specific/ytcc/description.sh | 8 + .../pkgs/scripts/source/wrappers/battery.sh | 11 + .../pkgs/scripts/source/wrappers/hibernate.sh | 15 + sys/nixpkgs/pkgs/scripts/source/wrappers/ll.sh | 14 + sys/nixpkgs/pkgs/scripts/source/wrappers/lock.sh | 18 ++ sys/nixpkgs/pkgs/scripts/source/wrappers/lyrics.sh | 11 + .../pkgs/scripts/source/wrappers/mpc-fav.sh | 14 + sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-rm.sh | 10 + sys/nixpkgs/pkgs/scripts/source/wrappers/mpc.sh | 20 ++ sys/nixpkgs/pkgs/scripts/source/wrappers/show.sh | 9 + .../pkgs/scripts/source/wrappers/sort_song.sh | 34 ++ sys/nixpkgs/pkgs/scripts/source/wrappers/spodi.sh | 55 ++++ .../pkgs/scripts/source/wrappers/virsh-del.sh | 10 + sys/nixpkgs/pkgs/scripts/source/wrappers/yti.sh | 33 ++ 94 files changed, 1957 insertions(+), 1923 deletions(-) delete mode 100644 hm/soispha/pkgs/scripts.nix delete mode 100755 hm/soispha/pkgs/scripts/apps/aumo.sh delete mode 100755 hm/soispha/pkgs/scripts/apps/con2pdf.sh delete mode 100644 hm/soispha/pkgs/scripts/apps/fupdate.1.md delete mode 100755 hm/soispha/pkgs/scripts/apps/fupdate.sh delete mode 100755 hm/soispha/pkgs/scripts/apps/git-edit-index.sh delete mode 100755 hm/soispha/pkgs/scripts/small_functions/nato.py delete mode 100755 hm/soispha/pkgs/scripts/small_functions/screenshot_persistent.sh delete mode 100755 hm/soispha/pkgs/scripts/small_functions/screenshot_temporary.sh delete mode 100755 hm/soispha/pkgs/scripts/small_functions/update-sys.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/add.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/dmenu.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/fstart.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/fstop.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/list.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/neorg.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/project.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/task.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/nu/workspace.nu delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/add.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/context.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/dmenu.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_start.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_stop.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/list.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/project.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/utils.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/functions/workspace.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/neorg/sh/main.sh delete mode 100755 hm/soispha/pkgs/scripts/specific/ytcc/description.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/battery.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/hibernate.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/ll.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/lock.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/lyrics.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/mpc-fav.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/mpc-rm.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/mpc.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/show.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/sort_song.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/spodi.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/virsh-del.sh delete mode 100755 hm/soispha/pkgs/scripts/wrappers/yti.sh create mode 100644 sys/nixpkgs/pkgs/scripts/default.nix create mode 100755 sys/nixpkgs/pkgs/scripts/source/apps/aumo.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/apps/con2pdf.sh create mode 100644 sys/nixpkgs/pkgs/scripts/source/apps/fupdate.1.md create mode 100755 sys/nixpkgs/pkgs/scripts/source/apps/fupdate.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/apps/git-edit-index.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/small_functions/nato.py create mode 100755 sys/nixpkgs/pkgs/scripts/source/small_functions/screenshot_persistent.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/small_functions/screenshot_temporary.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/small_functions/update-sys.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/neorg_id_function.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/add.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/dmenu.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/fstart.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/fstop.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/list.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/neorg.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/project.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/task.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/workspace.nu create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/add.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/context.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/dmenu.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/f_start.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/f_stop.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/list.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/project.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/utils.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/workspace.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/main.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/specific/ytcc/description.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/battery.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/hibernate.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/ll.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/lock.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/lyrics.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-fav.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-rm.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/mpc.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/show.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/sort_song.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/spodi.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/virsh-del.sh create mode 100755 sys/nixpkgs/pkgs/scripts/source/wrappers/yti.sh diff --git a/flake.lock b/flake.lock index 6dce546b..ef3a4b18 100644 --- a/flake.lock +++ b/flake.lock @@ -172,15 +172,12 @@ "flake_version_update": { "inputs": { "flake-utils": [ - "shell_library", "flake-utils" ], "nixpkgs": [ - "shell_library", "nixpkgs" ], "systems": [ - "shell_library", "systems" ] }, @@ -638,6 +635,7 @@ "flake-compat": "flake-compat", "flake-parts": "flake-parts", "flake-utils": "flake-utils", + "flake_version_update": "flake_version_update", "generate_firefox_extensions": "generate_firefox_extensions", "gitignore": "gitignore", "haumea": "haumea", @@ -673,11 +671,11 @@ ] }, "locked": { - "lastModified": 1708654230, - "narHash": "sha256-f8B3nm0DIsWBmaLHvFvjJnqvFsEEoHxTjE9or5w4nIo=", + "lastModified": 1708740535, + "narHash": "sha256-NCTw235XwSDbeTAtAwg/hOeNOgwYhVq7JjDdbkOgBeA=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "67853eda5dfe64922b9deb0ebc246a846fe177c7", + "rev": "9b24383d77f598716fa0cbb8b48c97249f5ee1af", "type": "github" }, "original": { @@ -726,7 +724,9 @@ "flake-utils": [ "flake-utils" ], - "flake_version_update": "flake_version_update", + "flake_version_update": [ + "flake_version_update" + ], "nixpkgs": [ "nixpkgs" ], @@ -735,11 +735,11 @@ ] }, "locked": { - "lastModified": 1705180069, - "narHash": "sha256-kEdWgKIL2wGY7jBYX9Z+YX67bQc+oKLkgnxBkHjji+M=", + "lastModified": 1708780295, + "narHash": "sha256-ZL4lwJeKNjmvm/mg3KRy3+OyUYxZTl1eJNRmEqHzNhQ=", "ref": "refs/heads/prime", - "rev": "d2bc174f248de40ab76068e6ad502a785be0b074", - "revCount": 168, + "rev": "3faa1f33598be74ca1bdad621c5b66d153be0e3d", + "revCount": 175, "type": "git", "url": "https://codeberg.org/soispha/shell_library.git" }, diff --git a/flake.nix b/flake.nix index fed79c78..9a504a4e 100644 --- a/flake.nix +++ b/flake.nix @@ -250,6 +250,8 @@ pkgs = import nixpkgs (import ./sys/nixpkgs { inherit (nixpkgs) lib; inherit system sysLib; + # FIXME: Don't unconditionally use tiamat here <2024-02-24> + config = self.nixosConfigurations.tiamat.config.home-manager.users.soispha; overlays = []; }); # FIXME: this `nixpkgs` misses the configs applied to the other one diff --git a/flake/default.nix b/flake/default.nix index bbf9044e..185286eb 100644 --- a/flake/default.nix +++ b/flake/default.nix @@ -140,7 +140,7 @@ }; } ); -in { + nixosConfigurations = import ./nixosConfigurations { inherit system @@ -152,7 +152,8 @@ in { defaultSpecialArgs ; }; - inherit pkgs; +in { + inherit pkgs nixosConfigurations; checks."${system}" = { inherit (self.packages."${system}") diff --git a/hm/soispha/pkgs/default.nix b/hm/soispha/pkgs/default.nix index 4aa5a48c..1c1df7a8 100644 --- a/hm/soispha/pkgs/default.nix +++ b/hm/soispha/pkgs/default.nix @@ -1,8 +1,6 @@ { pkgs, lib, - sysLib, - config, ... }: with pkgs; let @@ -13,8 +11,6 @@ with pkgs; let ''; mpc-cli-man = onlyShare mpc-cli; - shell-scripts = (import ./scripts.nix) {inherit pkgs lib sysLib config;}; - Gui = { Terminals = [ # foot # wayland native terminal @@ -48,6 +44,32 @@ with pkgs; let }; TuiCli = { + ShellScripts = [ + aumo + battery + con2pdf + description + fupdate + git-edit-index + hibernate + ll + lock + lyrics + mpc-fav + mpc-rm + mpc + nato + neorg + screenshot_persistent + screenshot_temporary + show + sort_song + spodi + update-sys + virsh-del + yti + ]; + EyeCandy = [ #banner # Print large banners to ASCII terminals cmatrix # A curses-based scrolling 'Matrix'-like screen @@ -147,7 +169,6 @@ with pkgs; let in { home.packages = [] - ++ shell-scripts ++ (with builtins; concatLists (concatLists [ diff --git a/hm/soispha/pkgs/scripts.nix b/hm/soispha/pkgs/scripts.nix deleted file mode 100644 index 9fb2d2be..00000000 --- a/hm/soispha/pkgs/scripts.nix +++ /dev/null @@ -1,347 +0,0 @@ -{ - pkgs, - lib, - sysLib, - config, - ... -}: let - write_shell = { - name, - path, - dependencies ? [], - keepPath ? false, - completions ? false, - }: - sysLib.writeShellScript { - inherit name keepPath; - src = ./scripts/${path}/${name}.sh; - dependencies = dependencies ++ [pkgs.dash]; - generateCompletions = completions; - }; - write_python = { - name, - path, - dependencies_system ? [], - dependencies_python ? _: [], - keepPath ? false, - }: let - src = ./scripts/${path}/${name}.py; - dependencies = - [(pkgs.python3.withPackages dependencies_python)] - ++ dependencies_system; - path_setting = - if keepPath - then "--prefix PATH :" - else "--set PATH"; - in - pkgs.runCommandLocal name { - nativeBuildInputs = [pkgs.makeWrapper] ++ dependencies; - } - '' - install -m755 ${src} -D "$out/bin/${name}" - patchShebangs "$out/bin/${name}" - wrapProgram "$out/bin/${name}" ${path_setting} ${pkgs.lib.makeBinPath dependencies}; - ''; - - ## Begin of shell scripts - - aumo-scr = write_shell { - name = "aumo"; - path = "apps"; - dependencies = builtins.attrValues {inherit (pkgs) udisks gawk gnused gnugrep sudo;}; - }; - - battery-scr = write_shell { - name = "battery"; - path = "wrappers"; - dependencies = []; - }; - - con2pdf-scr = sysLib.writeShellScript { - name = "con2pdf"; - src = ./scripts/apps/con2pdf.sh; - dependencies = builtins.attrValues {inherit (pkgs) sane-backends imagemagick coreutils fd;}; - generateCompletions = true; - replacementStrings = { - DEVICE_FUNCTION = - # This is here, because escaping the whole function, to use it in the shell script - # directly just isn't possible - pkgs.writeText "DEVICE_FUNCTION" - /* - bash - */ - '' - scanimage -L | awk 'BEGIN { FS = "`" } { gsub(/'.*/, "", $2); print $2 }' - ''; - }; - }; - - description-scr = write_shell { - name = "description"; - path = "specific/ytcc"; - dependencies = builtins.attrValues { - inherit (pkgs) jq fmt less locale; - }; - }; - - fupdate-scr = write_shell { - name = "fupdate"; - path = "apps"; - keepPath = true; - dependencies = builtins.attrValues { - inherit - (pkgs) - dash - nix - gnugrep - fd - coreutils - bat # used by batgrep - gnused # required by batgrep - git # needed to fetch through git - git-crypt # needed to unlock git-crypted repos - ; - inherit (pkgs.bat-extras) batgrep; - }; - }; - - git-edit-index-scr = write_shell { - name = "git-edit-index"; - path = "apps"; - completions = true; - # This starts neovim, wich might want to shell out - keepPath = true; - dependencies = builtins.attrValues { - inherit - (pkgs) - git - gnused - # $EDITOR - - ; - }; - }; - - hibernate-scr = write_shell { - name = "hibernate"; - path = "wrappers"; - dependencies = builtins.attrValues { - inherit - (pkgs) - systemd - taskwarrior - ; - }; - }; - - ll-scr = sysLib.writeShellScript { - name = "ll"; - src = ./scripts/wrappers/ll.sh; - wrap = false; - }; - - # TODO: this need to be replaced with a wayland alternative - # llp-scr = write_shell { - # name = "llp"; - # path = "wrappers"; - # dependencies = builtins.attrValues {inherit (pkgs) lf ueberzug;}; - # }; - - lock-scr = write_shell { - name = "lock"; - path = "wrappers"; - dependencies = builtins.attrValues { - inherit - (pkgs) - taskwarrior - swaylock - ; - }; - }; - - lyrics-scr = write_shell { - name = "lyrics"; - path = "wrappers"; - dependencies = builtins.attrValues { - inherit - (pkgs) - exiftool - mpc-cli - jq - less - locale # dependency of less - ; - }; - }; - - mpc-fav-scr = write_shell { - name = "mpc-fav"; - path = "wrappers"; - dependencies = builtins.attrValues { - inherit - (pkgs) - mpc-cli - ; - }; - }; - - mpc-rm-scr = write_shell { - name = "mpc-rm"; - path = "wrappers"; - dependencies = builtins.attrValues { - inherit - (pkgs) - mpc-cli - trash-cli - ; - }; - }; - - mpc-scr = write_shell { - name = "mpc"; - path = "wrappers"; - dependencies = [ - mpc-fav-scr - mpc-rm-scr - pkgs.mpc-cli - ]; - }; - - nato-scr = write_python { - name = "nato"; - path = "small_functions"; - dependencies_python = ps: []; - }; - - neorg-scr = sysLib.writeShellScriptMultiPart { - name = "neorg"; - keepPath = true; - src = ./scripts/specific/neorg/sh; - baseName = "main.sh"; - cmdPrefix = "functions"; - cmdNames = [ - "add.sh" - "context.sh" - "dmenu.sh" - "f_start.sh" - "f_stop.sh" - "list.sh" - "project.sh" - "utils.sh" - "workspace.sh" - ]; - dependencies = with pkgs; [ - cocogitto - git-crypt - rofi - libnotify - ]; - generateCompletions = true; - replacementStrings = { - DEFAULT_NEORG_PROJECT_DIR = - config.programs.nixvim.plugins.neorg.modules."core.dirman".config.workspaces.projects; - HOME_TASKRC = "${config.xdg.configHome}/task/home-manager-taskrc"; - ALL_PROJECTS_NEWLINE = "${config.soispha.taskwarrior.projects.projects_newline}"; - ALL_PROJECTS_COMMA = "${config.soispha.taskwarrior.projects.projects_comma}"; - ALL_PROJECTS_PIPE = "${config.soispha.taskwarrior.projects.projects_pipe}"; - ALL_WORKSPACES = "${lib.strings.concatStringsSep "|" (builtins.attrNames config.programs.nixvim.plugins.neorg.modules."core.dirman".config.workspaces)}"; - ID_GENERATION_FUNCTION = "${sysLib.writeShellScript { - name = "neorg_id_function"; - src = ./scripts/specific/neorg/neorg_id_function.sh; - dependencies = with pkgs; [ - taskwarrior - gawk - findutils # xargs - ]; - }}/bin/neorg_id_function"; - - # TODO: Replace the hard-coded path here with some reference <2023-10-20> - TASK_PROJECT_FILE = "/home/soispha/repos/nix/nixos-config/hm/soispha/conf/taskwarrior/projects/default.nix"; - }; - }; - - screenshot_persistent-scr = write_shell { - name = "screenshot_persistent"; - path = "small_functions"; - keepPath = true; - dependencies = builtins.attrValues { - inherit - (pkgs) - grim - slurp - alacritty - rofi - libnotify - lf # TODO: add llp - ; - }; - }; - - screenshot_temporary-scr = write_shell { - name = "screenshot_temporary"; - path = "small_functions"; - dependencies = builtins.attrValues {inherit (pkgs) grim slurp wl-clipboard;}; - }; - - show-scr = write_shell { - name = "show"; - path = "wrappers"; - keepPath = true; # I might want to use nvim in less (and shell escapes) - dependencies = builtins.attrValues {inherit (pkgs) less locale;}; - }; - - sort_song-src = write_shell { - name = "sort_song"; - path = "wrappers"; - dependencies = builtins.attrValues {inherit (pkgs) mediainfo jq gawk;}; - }; - - spodi-scr = write_shell { - name = "spodi"; - path = "wrappers"; - dependencies = builtins.attrValues {inherit (pkgs) gawk expect spotdl fd coreutils;}; - }; - - update-sys-scr = write_shell { - name = "update-sys"; - path = "small_functions"; - dependencies = builtins.attrValues {inherit (pkgs) git git-crypt nixos-rebuild sudo openssh coreutils mktemp gnugrep gnused;}; - }; - - virsh-del-scr = write_shell { - name = "virsh-del"; - path = "wrappers"; - dependencies = builtins.attrValues {inherit (pkgs) libvirt;}; - }; - - yti-scr = write_shell { - name = "yti"; - path = "wrappers"; - dependencies = builtins.attrValues {inherit (pkgs) gawk expect yt-dlp;}; - }; -in [ - # llp-scr # TODO: see above - aumo-scr - battery-scr - con2pdf-scr - description-scr - fupdate-scr - git-edit-index-scr - hibernate-scr - ll-scr - lock-scr - lyrics-scr - mpc-fav-scr - mpc-rm-scr - mpc-scr - nato-scr - neorg-scr - screenshot_persistent-scr - screenshot_temporary-scr - show-scr - sort_song-src - spodi-scr - update-sys-scr - virsh-del-scr - yti-scr -] diff --git a/hm/soispha/pkgs/scripts/apps/aumo.sh b/hm/soispha/pkgs/scripts/apps/aumo.sh deleted file mode 100755 index 7426115a..00000000 --- a/hm/soispha/pkgs/scripts/apps/aumo.sh +++ /dev/null @@ -1,25 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -unmounting() { - disk_name="$(find /dev/disk/by-label -type l -printf "%P|" | rofi -sep "|" -dmenu -p "Select disk to mount")" - - udisksctl unmount --block-device "/dev/disk/by-label/$disk_name" -} - -mounting() { - disk_name="$(find /dev/disk/by-label -type l -printf "%P|" | rofi -sep "|" -dmenu -p "Select disk to mount")" - - udisksctl mount --block-device "/dev/disk/by-label/$disk_name" -} - -case "$1" in -"mount") - mounting - ;; -"unmount" | "umount") - unmounting - ;; -esac diff --git a/hm/soispha/pkgs/scripts/apps/con2pdf.sh b/hm/soispha/pkgs/scripts/apps/con2pdf.sh deleted file mode 100755 index 620a299a..00000000 --- a/hm/soispha/pkgs/scripts/apps/con2pdf.sh +++ /dev/null @@ -1,234 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -# needed for help() and version -# shellcheck disable=2034 -AUTHORS="Soispha" -# shellcheck disable=2034 -YEARS="2023" -# shellcheck disable=2034 -VERSION="1.0.0" - -# NAME is from the wrapper -# shellcheck disable=SC2269 -NAME="$NAME" -help() { - cat <_1.pdf). - - --num-pages | -p NUM - Number of pages to merge into one pdf (default: 1). - - --device | -d DEVICE - Device used for scanning. - - --method | -m METHOD - Method to use for scanning (default: ADF). - - --help | -h - Display this help and exit. - - --version | -v - Display version and copyright information and exit. -ARGUMENTS: - FILE := [[fd . --max-depth 3]] - A name of a file to store, default is: ./pdf - - NAME | * := [[fd . --max-depth 3]] - The basename of the generated files - - NUM | *([0-9]) := 0 | 1 | 2 | 3 | 4 - Possible numbers of pages, can be more than 4 - - DEVICE := [[$(cat %DEVICE_FUNCTION)]] - Possible scanner names - - METHOD := ADF | Flatbed - The scanning method to use, not all scanners support both of - these. The default is ADF -EOF -} - -scan_adf() { - device="$1" - sides_per_page="$2" - method="ADF" - for i in $(seq "$sides_per_page"); do - do_until_success \ - "scanimage --format=tiff --progress --source='$method' --device='$device' --batch=%d.tif --batch-increment='$sides_per_page' --batch-start='$i'" \ - "warn 'Retrying scan, as we assume a network error!'" - - if [ "$sides_per_page" -ne 1 ]; then - msg "Finished turn, please change side!" - readp "Press enter to continue" noop - fi - done -} -process_images_adf() { - tiff_temp_path="$1" - output_directory="$2" - name="$3" - - counter=0 - pdf_counter=0 - image_cache="$(mktmp)" - while read -r scanned_image; do - dbg "$scanned_image (scanned_image) at $counter (counter)" - echo "$scanned_image" >>"$image_cache" - : $((counter += 1)) - if [ "$counter" = "$number_of_pages" ]; then - dbg "$counter == $number_of_pages" - counter=0 - convert_images "$image_cache" "${name}_$pdf_counter" "$output_directory" - : $((pdf_counter += 1)) - printf "" >"$image_cache" - fi - done <"$(tmp_pipe fd . "$tiff_temp_path" "|" sort -V)" -} - -scan_flatbed() { - device="$1" - number_of_pages"$2" - method="Flatbed" - for i in $(seq "$number_of_pages"); do - do_until_success \ - "scanimage --format=tiff --progress --source='$method' --device='$device' --output-file=$i.tiff" \ - "warn 'Retrying scan, as we assume a network error!'" - if [ "$number_of_pages" -ne 1 ]; then - msg "Finished turn, please change side!" - readp "Press enter to continue" noop - fi - done -} -process_images_flatbed() { - tiff_temp_path="$1" - output_directory="$2" - name="$3" - - counter=0 - image_cache="$(mktmp)" - while read -r scanned_image; do - echo "$scanned_image" >>"$image_cache" - : $((counter += 1)) - if [ "$counter" = "$number_of_pages" ]; then - counter=0 - convert_images "$image_cache" "$name" "$output_directory" - printf "" >"$image_cache" - fi - done <"$(tmp_pipe fd . "$tiff_temp_path" "|" sort -V)" -} -convert_images() { - image_cache="$1" - pdf_name="$2" - output_dir="$3" - - set -- - while read -r image; do - dbg "setting image: $image" - set -- "$@" "$image" - done <"$image_cache" - - while [ -e "$output_dir/${pdf_name}.pdf" ]; do - pdf_name="${pdf_name}_$(tr -dc 'A-Za-z0-9' *|*--help*|*-h*\] - -# DESCRIPTION - -Argument can be stacked, this makes it possible to specify multiple targets to be updated in succession. See the Examples section for further details. - -No argument or *flake* -: **fupdate**, when executed without arguments or with *flake*, will update your *flake.lock*, check for duplicate flake inputs, i.e., an input has an input declared, which you have also declared as input, and will run a script called *update.sh*, if you allow it. -The allowance for the script is asked, when you run **fupdate** and the found script is not yet allowed. Furthermore, the allowance is based on the concrete sha256 hash of the script, so any changes will require another allowance. - -**\** as argument -: If the executable **update-\** is reachable thought the PATH variable, than this is run. Otherwise, the program will exit. - -# OPTIONS - -**--help**, **-h** -: Displays a help message and exit. - -**--version**, **-v** -: Displays the software version and exit. - -# EXAMPLES - -**fupdate** or **fupdate flake** -: Updates your *flake.lock*. See the Description section for further details. - -**fupdate sys** -: Run the executable **update-sys**, if it exists. See the Description section for further details. - -**fupdate flake sys docs** -: First updates your flake, then, if the command succeeded, runs **update-sys**, afterweich **update-docs** is run. - -# FILES - -*update.sh* -: This is supposed to be a shell script located in your flake base directory, i.e., the directory which contains both a *flake.nix* and a *flake.lock* file. - -*~/.local/share/flake-update/* -: **fupdate** will store the hashes to the allowed *update.sh* files here. - -# BUGS - -Report bugs to . - -# COPYRIGHT - -Copyright (C) 2023 Soispha - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . diff --git a/hm/soispha/pkgs/scripts/apps/fupdate.sh b/hm/soispha/pkgs/scripts/apps/fupdate.sh deleted file mode 100755 index 0032be4b..00000000 --- a/hm/soispha/pkgs/scripts/apps/fupdate.sh +++ /dev/null @@ -1,167 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -UPDATE_SCRIPT_NAME="update.sh" -CONFIG_DIRECTORY_PATH="$HOME/.local/share/flake-update" - -# Both are used in version() -# shellcheck disable=SC2034 -AUTHORS="Soispha" -# shellcheck disable=SC2034 -YEARS="2023" - -# Searches upward for a `UPDATE_SCRIPT_NAME` script -# Returns a path to the script if it exists, otherwise nothing is returned -check_for_update_script() { - dirname="$(search_upward_files "$UPDATE_SCRIPT_NAME")" - if [ "$dirname" ]; then - printf "%s/%s" "$dirname" "$UPDATE_SCRIPT_NAME" - fi -} - -# Checks if a given path to the update script is allowed. -# Takes the path as input -# Return 0, if allowed, 1 if not. -check_for_allowed_update_script() { - update_script="$1" - config_path="${CONFIG_DIRECTORY_PATH}${update_script}" - update_script_hash="$(sha256sum "$update_script")" - if [ -f "$config_path" ]; then - if [ "$(cat "$config_path")" = "$update_script_hash" ]; then - dbg "Recorded hash matches" - return 0 - else - dbg "Recorded hash \'$(cat "$config_path")\' does not match real hash \'$update_script_hash\', assuming not allowed" - return 1 - fi - else - dbg "Path \'$config_path\' does not exist, assuming not allowed" - return 1 - fi -} - -# Asks the user if they want to allow a given script. -# Takes the path as input -ask_to_allow_update_script() { - update_script="$1" - config_path="${CONFIG_DIRECTORY_PATH}${update_script}" - update_script_hash="$(sha256sum "$update_script")" - println "\033[2J" # clear the screen - cat "$update_script" - readp "Do you want to allow this script?[N/y]: " allow - # shellcheck disable=SC2154 - dbg "allow is: $allow" - case "$allow" in - [yY]) - dbg "allowed script" - dbg "storing contents in: $config_path" - mkdir --parents "$(dirname "$config_path")" - print "$update_script_hash" >"$config_path" - ;; - *) - UPDATE_SCRIPT_NOT_ALLOWED=true - ;; - esac -} - -# Runs the provided script and continues to update the nix flake -# Takes the path to the script and the directory to the flake as arguments -# If the path to the update script is empty, it will be ignored -update() { - update_script="$1" - flake_base_dir="$2" - shift 2; - - dbg "Provided following args to update script: '$*'" - dbg "changed directory to: $flake_base_dir" - cd "$flake_base_dir" || die "Provided dir \'$flake_base_dir\' can not be accessed" - - nix flake update - - [ "$update_script" = "" ] || "$update_script" "$@" - - if grep '[^0-9]_[0-9]' flake.lock >/dev/null; then - batgrep '[^0-9]_[0-9]' flake.lock - die "Your flake.nix contains duplicate inputs!" - fi -} - -help() { - cat < - runs a executable called "update-", if it exists -EOF -} - -main() { - if ! [ "$UPDATE_SCRIPT_NOT_ALLOWED" = true ]; then - update_script="$(check_for_update_script)" - flake_base_dir="$(search_flake_base_dir)" # Assume, that the update script is in the base dir - dbg "update_script is: $update_script" - dbg "flake_base_dir is: $flake_base_dir" - - if [ "$update_script" = "" ]; then - update "" "$flake_base_dir" "$@" - elif check_for_allowed_update_script "$update_script" && ! [ "$update_script" = "" ]; then - update "$update_script" "$flake_base_dir" "$@" - else - ask_to_allow_update_script "$update_script" - main "$@" - fi - fi -} - -if [ "$#" -eq 0 ]; then - main -fi - -for input in "$@"; do - case "$input" in - "--help" | "-h") - help - exit 0 - ;; - "--version" | "-v") - version - exit 0 - ;; - "--") - end_of_cli_options=true - ;; - esac - [ "$end_of_cli_options" = "true" ] && break -done - -case "$1" in -"flake") - shift 1 - [ "$1" = "--" ] && shift 1; - main "$@" - ;; -*) - command="$1" - shift 1 - [ "$1" = "--" ] && shift 1; - if which update-"$command" >/dev/null 2>&1; then - update-"$command" "$@" - else - die "command \"update-$command\" is not executable, or does not exist" - fi - ;; -esac diff --git a/hm/soispha/pkgs/scripts/apps/git-edit-index.sh b/hm/soispha/pkgs/scripts/apps/git-edit-index.sh deleted file mode 100755 index 0010718b..00000000 --- a/hm/soispha/pkgs/scripts/apps/git-edit-index.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -# needed for help() and version -# shellcheck disable=2034 -AUTHORS="Soispha" -# shellcheck disable=2034 -YEARS="2024" -# shellcheck disable=2034 -VERSION="1.0.0" - -# NAME is from the wrapper -# shellcheck disable=SC2269 -NAME="$NAME" - -help() { - cat <"$GIT_DIR/.git/EDIT_INDEX_PATCH" - - git add "$1" - git restore --staged "$1" - cat "$1" >"$GIT_DIR/.git/EDIT_INDEX_FILE" - git restore "$1" - - git apply "$GIT_DIR/.git/EDIT_INDEX_PATCH" - "$EDITOR" "$1" - - git add "$1" - mv "$GIT_DIR/.git/EDIT_INDEX_FILE" "$1" -} - -edit() { - files_to_add="$(mktmp)" - realpath --relative-to=. "$@" >"$files_to_add" - - index_files="$(mktmp)" - git diff --name-only --cached --diff-filter=AM >"$index_files" - - while read -r file; do - if grep -q "$file" "$files_to_add"; then - sed -i "s|$file||" "$files_to_add" - materialize_file "$file" - fi - done <"$index_files" - - files_to_check="$(mktmp)" - clean "$files_to_add" >"$files_to_check" - if [ "$(wc -l <"$files_to_check")" -gt 0 ]; then - warn "Could not edit every file:" - cat "$files_to_add" - fi -} - -for arg in "$@"; do - case "$arg" in - "--help" | "-h") - help - exit 0 - ;; - "--version" | "-v") - version - exit 0 - ;; - "--") - end_of_cli_options=true - ;; - esac - [ "$end_of_cli_options" = "true" ] && break -done - -edit "$@" - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/small_functions/nato.py b/hm/soispha/pkgs/scripts/small_functions/nato.py deleted file mode 100755 index e9d15f56..00000000 --- a/hm/soispha/pkgs/scripts/small_functions/nato.py +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env python3 -# originally from here: https://cgit.pacien.net/desktop-utilities/ - -import sys - -alphabet = { - "nato": { - "A": "Alfa", # No idea why this is not just 'Alpha' .. - "B": "Bravo", - "C": "Charlie", - "D": "Delta", - "E": "Echo", - "F": "Foxtrot", - "G": "Golf", - "H": "Hotel", - "I": "India", - "J": "Juliett", - "K": "Kilo", - "L": "Lima", - "M": "Mike", - "N": "November", - "O": "Oscar", - "P": "Papa", - "Q": "Quebec", - "R": "Romeo", - "S": "Sierra", - "T": "Tango", - "U": "Uniform", - "V": "Victor", - "W": "Whiskey", - "X": "X-ray", - "Y": "Yankee", - "Z": "Zulu", - "0": "Nadazero", - "1": "Unaone", - "2": "Bissotwo", - "3": "Terrathree", - "4": "Kartefour", - "5": "Pantafive", - "6": "Soxisix", - "7": "Setteseven", - "8": "Oktoeight", - "9": "Novenine", - ",": "Comma", - "/": "Forward slash", - ".": "Stop/Decimal", - }, - "german": { - "A": "Aachen", - "Ä": "Umlaut Aachen", - "B": "Berlin", - "C": "Chemnitz", - "D": "Düsseldorf", - "E": "Essen", - "F": "Frankfurt", - "G": "Goslar", - "H": "Hamburg", - "I": "Ingelheim", - "J": "Jena", - "K": "Köln", - "L": "Leipzig", - "M": "München", - "N": "Nürnberg", - "O": "Offenbach", - "Ö": "Umlaut Offenbach", - "P": "Potsdam", - "Q": "Quickborn", - "R": "Rostock", - "S": "Salzwedel", - "ẞ": "Eszett", - "T": "Tübingen", - "U": "Unna", - "Ü": "Umlaut Unna", - "V": "Völklingen", - "W": "Wuppertal", - "X": "Xanten", - "Y": "Ypsilon", - "Z": "Zwickau", - }, -} - - -def str_to_telephony(phrase, language): - language_alphabet = alphabet[language] - - return [ - language_alphabet[c] if c in language_alphabet else c for c in phrase.upper() - ] - - -language = sys.argv[1] -if language not in ["nato", "german"]: - print( - f"Langugae '{language}' is not a valid language, only 'nato' and 'german' are!", - file=sys.stderr, - ) - exit(1) - -print( - "\n".join( - str_to_telephony( - " ".join(sys.argv[2:]), - language, - ) - ) -) diff --git a/hm/soispha/pkgs/scripts/small_functions/screenshot_persistent.sh b/hm/soispha/pkgs/scripts/small_functions/screenshot_persistent.sh deleted file mode 100755 index 5992e02f..00000000 --- a/hm/soispha/pkgs/scripts/small_functions/screenshot_persistent.sh +++ /dev/null @@ -1,22 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -# only generate a path (this could lead to a time-of-check/time-of-use bug) -tmp="$(mktmp --dry-run)" - -if grim -g "$(slurp)" "$tmp"; then - name="$(rofi -dmenu -p "Name of screenshot: " -l 0)" - screen_shot_path="$HOME/media/pictures/screenshots/$name.png" - while [ -f "$screen_shot_path" ]; do - notify-send "Warning" 'Screenshot name already in use!' - name="$(rofi -dmenu -p "New name of screenshot: " -l 0)" - screen_shot_path="$HOME/media/pictures/screenshots/$name.png" - done - - mv "$tmp" "$screen_shot_path" - alacritty -e lf -command ":{{ set sortby atime; set reverse!; }}" -fi - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/small_functions/screenshot_temporary.sh b/hm/soispha/pkgs/scripts/small_functions/screenshot_temporary.sh deleted file mode 100755 index e411340d..00000000 --- a/hm/soispha/pkgs/scripts/small_functions/screenshot_temporary.sh +++ /dev/null @@ -1,8 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -grim -g "$(slurp)" | wl-copy - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/small_functions/update-sys.sh b/hm/soispha/pkgs/scripts/small_functions/update-sys.sh deleted file mode 100755 index 68fb342d..00000000 --- a/hm/soispha/pkgs/scripts/small_functions/update-sys.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -help() { - cat <] [--help] - -Options: - --branch | -b BRANCHNAME - select a branch to update from. - --mode | -m MODE - select a mode to update with - --help | -h - output this help. -EOF - exit "$1" -} -default_branch=$(mktmp) -BRANCH="" - -while [ "$#" -gt 0 ]; do - case "$1" in - "--help" | "-h") - help 0 - ;; - "--branch" | "-b") - if [ -n "$2" ]; then - BRANCH="$2" - else - error "$1 requires an argument" - help 1 - fi - shift 2 - ;; - "--mode" | "-m") - if [ -n "$2" ]; then - MODE="$2" - else - error "$1 requires an argument" - help 1 - fi - shift 2 - ;; - *) - error "the option $1 does not exist!" - help 1 - ;; - esac -done - -cd /etc/nixos || die "No /etc/nixos" -msg "Starting system update..." -git remote update origin --prune >/dev/null 2>&1 -if ! [ "$BRANCH" = "" ]; then - git switch "$BRANCH" >/dev/null 2>&1 && msg2 "Switched to branch '$BRANCH'" -fi -msg2 "Updating git repository..." -git pull --rebase - -git remote show origin | grep 'HEAD' | cut -d':' -f2 | sed -e 's/^ *//g' -e 's/ *$//g' >"$default_branch" & - -msg2 "Updating system..." -if [ -n "$MODE" ]; then - nixos-rebuild "$MODE" -else - nixos-rebuild switch -fi - -git switch "$(cat "$default_branch")" >/dev/null 2>&1 && msg2 "Switched to branch '$(cat "$default_branch")'" -msg "Finished Update!" - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.sh b/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.sh deleted file mode 100755 index 7c3fb2a3..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/neorg_id_function.sh +++ /dev/null @@ -1,12 +0,0 @@ -#! /bin/sh -context="$(task _get rc.context)" -if [ "$context" ]; then - filter="project:$context" -else - filter="0-10000" -fi -tasks="$(task "$filter" _ids)" - -if [ "$tasks" ]; then - echo "$tasks" | xargs task _zshids | awk -F: -v q="'" '{gsub(/'\''/, q "\\" q q ); print $1 ":" q $2 q}' -fi diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/add.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/add.nu deleted file mode 100755 index 8cf9666c..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/add.nu +++ /dev/null @@ -1,3 +0,0 @@ -export def "main" [] { - "hi!" -} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/dmenu.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/dmenu.nu deleted file mode 100755 index 177e7483..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/dmenu.nu +++ /dev/null @@ -1,5 +0,0 @@ -# Select a project in dmenu mode -# -# This will give you all projects -# and exectute the selected one as in 'neorg projects ' -def "main" [] {} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/fstart.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/fstart.nu deleted file mode 100755 index f77cd3f6..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/fstart.nu +++ /dev/null @@ -1,5 +0,0 @@ -# Starts the task -# -# This only happens after it stooped -# the previous active task, if it existed. -def "main" [id: int] {} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/fstop.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/fstop.nu deleted file mode 100755 index bcaac944..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/fstop.nu +++ /dev/null @@ -1,2 +0,0 @@ -# Stops the current active task -def "main" [] {} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/list.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/list.nu deleted file mode 100755 index 68a130f9..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/list.nu +++ /dev/null @@ -1,2 +0,0 @@ -# Lists all available contexts -def "main" [] {} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/neorg.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/neorg.nu deleted file mode 100755 index 92af49cc..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/neorg.nu +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env nu - -use add.nu main -use dmenu.nu -use fstart.nu -use fstop.nu -use list.nu -use project.nu -use task.nu -use workspace.nu [main workspaces] - -# The core of the system-integrated task handling and management -def main [] { - add -} - -# Allows you to quickly add projects -def "main add" [] { - add -} - -# Select a project in dmenu mode -# -# This will give you all projects -# and exectute the selected one as in 'neorg projects ' -def "main dmenu" [] { - dmenu -} - -# Starts the task -# -# This only happens after it stooped -# the previous active task, if it existed. -def "main fstart" [id: int] { - fstart -} - -# Stops the current active task -def "main fstop" [] { - fstop -} - -# Lists all available contexts -def "main list" [] { - list -} - -# Opens the project in the webbrowser -# -# Opens the webbrowser with either the context (P) or -# the current active context as argument if no context is supplied -def "main project" [project?: string] { - project -} - -# Open the context of a task -# -# Open the neorg context associated with the current context and -# the uuid of the task with id ID. Without ID, it'll open the -# current context's norg file. -# If no context is set, drops you to the selection prompt -def "main task" [id?: int] { - task -} - -# Open a neorg workspace -# -# The neorg workspace to open at startup, an empty value drops -# you at a prompt to enter the workspace yourself. -def "main workspace" [ - workspace?: string@workspaces # The workspace to open -] { - workspace $workspace -} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/project.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/project.nu deleted file mode 100755 index 530eab9b..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/project.nu +++ /dev/null @@ -1,5 +0,0 @@ -# Opens the project in the webbrowser -# -# Opens the webbrowser with either the context (P) or -# the current active context as argument if no context is supplied -def "main" [project?: string] {} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/task.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/task.nu deleted file mode 100755 index 41d1d6e5..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/task.nu +++ /dev/null @@ -1,7 +0,0 @@ -# Open the context of a task -# -# Open the neorg context associated with the current context and -# the uuid of the task with id ID. Without ID, it'll open the -# current context's norg file. -# If no context is set, drops you to the selection prompt -def "main" [id?: int] {} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/nu/workspace.nu b/hm/soispha/pkgs/scripts/specific/neorg/nu/workspace.nu deleted file mode 100755 index dfa79f29..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/nu/workspace.nu +++ /dev/null @@ -1,25 +0,0 @@ -export def workspaces [] { - # echo "%ALL_WORKSPACES" | split row '|' - ["a", "b"] -} - - -export def "main" [ workspace?: string ] { - if $workspace != null { - let pred = workspaces | where $it == $workspace | is-empty - if $pred == false { - true - } else { - error make { - msg: $"Your Workspace \(($workspace)) is not one of the defined ones: (workspaces)", - } - } - } else { - let tmp = mktemp - printf ":Neorg workspace " | save --append $tmp - - nvim -c "NeorgStart" -s $tmp - - rm $tmp - } -} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/add.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/add.sh deleted file mode 100755 index 5a830a10..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/add.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/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.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/context.sh deleted file mode 100755 index 7095847d..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/context.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/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.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/dmenu.sh deleted file mode 100755 index 73e9460a..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/dmenu.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/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.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_start.sh deleted file mode 100755 index 2423dd44..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_start.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/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.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_stop.sh deleted file mode 100755 index e4ff0b94..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/f_stop.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/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.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/list.sh deleted file mode 100755 index 10659457..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/list.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/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.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/project.sh deleted file mode 100755 index 64591850..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/project.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/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.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/utils.sh deleted file mode 100755 index c3843e8e..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/utils.sh +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env dash - -# Runs it's first argument and then the second, regardless if the first failed or -# succeeded -utils0chain() { - eval "$1" - eval "$2" -} - -utils0get_current_context() { - current_context="$(task _get rc.context)" - 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.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/workspace.sh deleted file mode 100755 index d5eb2fca..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/functions/workspace.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/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 ")" -} diff --git a/hm/soispha/pkgs/scripts/specific/neorg/sh/main.sh b/hm/soispha/pkgs/scripts/specific/neorg/sh/main.sh deleted file mode 100755 index 5087c391..00000000 --- a/hm/soispha/pkgs/scripts/specific/neorg/sh/main.sh +++ /dev/null @@ -1,155 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -# load dependencies -. ./functions/add.sh -. ./functions/context.sh -. ./functions/dmenu.sh -. ./functions/f_start.sh -. ./functions/f_stop.sh -. ./functions/list.sh -. ./functions/project.sh -. ./functions/utils.sh -. ./functions/workspace.sh - -# these are used in version() -# shellcheck disable=2034 -AUTHORS="Soispha" -# shellcheck disable=2034 -YEARS="2023" - -NAME="neorg" - -help() { - cat <' - - workspace [WS] - The neorg workspace (WS) to open at startup, an empty value drops - you at a prompt to enter the workspace yourself. - - project [P] - Opens the webbrowser with either the context (P) or - the current active context as argument if no context is supplied - - list - Lists all available contexts - - add - Allows you to quickly add projects - - fstart ID - Starts the task (ID) but only after it stooped - the previous active task, if it existed. - - fstop - Stops the current active task -ARGUMENTS: - ID | *([0-9]) := [[%ID_GENERATION_FUNCTION]] - The function displays all possible IDs of the eligable tasks. - - WS := %ALL_WORKSPACES - All possible workspaces - - P := %ALL_PROJECTS_PIPE - The possible project - -EOF -} - -for arg in "$@"; do - case "$arg" in - "--help" | "-h") - help - exit 0 - ;; - "--version" | "-v") - version - exit 0 - ;; - esac -done - -while [ "$#" -ne 0 ]; do - case "$1" in - "t"*) # task - shift 1 - task_id="$1" - [ "$task_id" ] || utils0chain context0open_current_task_context "exit 0" - context0open_current_task_context_at_task_id "$task_id" - exit 0 - ;; - "w"*) # workspace - shift 1 - workspace_to_open="$1" - # TODO: Exit with 1 on error, instead of the 0 <2023-10-20> - [ "$workspace_to_open" ] || utils0chain workspace0open_neorg_workspace_prompt "exit 0" - workspace0open_neorg_workspace "$workspace_to_open" - exit 0 - ;; - "p"*) # project - shift 1 - project_to_open="$1" - # TODO: Exit with 1 on error, instead of the 0 <2023-10-20> - [ "$project_to_open" ] || utils0chain project0open_current_context_in_browser "exit 0" - if ! grep -q "$project_to_open" "$(ptmp "%ALL_PROJECTS_NEWLINE")"; then - die "Your project ('$project_to_open') is not in the list of available projects: -%ALL_PROJECTS_COMMA" - fi - project0open_project_in_browser "$project_to_open" - exit 0 - ;; - "l"*) # list - list0list_all_contexts_newline - exit 0 - ;; - "a"*) # add-project - add0open_taskwarrior_project_file - exit 0 - ;; - "d"*) # dmenu - dmenu0open_context_in_browser - exit 0 - ;; - "fsta"*) # fstart - shift 1 - task_id="$1" - [ "$task_id" ] || die "No task id provided to fstart" - fstart0start_new_task "$task_id" - exit 0 - ;; - "fsto"*) # fstop - fstop0stop_current_task - exit 0 - ;; - *) - die "Command '$1' does not exist! Please look at:\n $NAME --help" - exit 0 - ;; - esac -done - -context0open_current_task_context -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/specific/ytcc/description.sh b/hm/soispha/pkgs/scripts/specific/ytcc/description.sh deleted file mode 100755 index e2a1afaa..00000000 --- a/hm/soispha/pkgs/scripts/specific/ytcc/description.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -jq --raw-output '.description' "$XDG_RUNTIME_DIR/ytcc/running" | fmt -u -s | less - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/battery.sh b/hm/soispha/pkgs/scripts/wrappers/battery.sh deleted file mode 100755 index 65485dff..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/battery.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -capacity="$(cat /sys/class/power_supply/BAT0/capacity)" -status="$(cat /sys/class/power_supply/BAT0/status)" - -printf "%s%% (%s)\n" "$capacity" "$status" - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/hibernate.sh b/hm/soispha/pkgs/scripts/wrappers/hibernate.sh deleted file mode 100755 index f3e74732..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/hibernate.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -context="$(task _get rc.context)" -[ "$context" ] && task context none - -# We have ensured that only one task is active -active="$(task +ACTIVE _ids)" -[ "$active" ] && task stop "$active" - -systemctl hibernate "$@" - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/ll.sh b/hm/soispha/pkgs/scripts/wrappers/ll.sh deleted file mode 100755 index 2a65d0a6..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/ll.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -last_directory="$(mktemp)" - -command lf -last-dir-path="$last_directory" "$@" - -dir="$(cat "$last_directory")" -cd "$dir" || die "$dir does not exist!" -rm "$last_directory" - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/lock.sh b/hm/soispha/pkgs/scripts/wrappers/lock.sh deleted file mode 100755 index f1c5c711..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/lock.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -context="$(task _get rc.context)" -[ "$context" ] && task context none - -# We have ensured that only one task is active -active="$(task +ACTIVE _ids)" -[ "$active" ] && task stop "$active" - -swaylock - -[ "$active" ] && task start "$active" - -[ "$context" ] && task context "$context" -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/lyrics.sh b/hm/soispha/pkgs/scripts/wrappers/lyrics.sh deleted file mode 100755 index 83a01083..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/lyrics.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -( - cd "$XDG_MUSIC_DIR" || die "No music dir!" - exiftool "$(mpc --format '%file%' current)" -json | jq '.[0].Lyrics' -r | less -) - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/mpc-fav.sh b/hm/soispha/pkgs/scripts/wrappers/mpc-fav.sh deleted file mode 100755 index 7385ce43..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/mpc-fav.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -FAV_DIR="$XDG_MUSIC_DIR/playlists/favourites" - -cd "$XDG_MUSIC_DIR" || die "No music dir!" - -[ -d "$FAV_DIR" ] || mkdir --parents "$FAV_DIR" - -ln -sr "$(mpc --format '%file%' current)" "$FAV_DIR/" || die "Link failed!" - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/mpc-rm.sh b/hm/soispha/pkgs/scripts/wrappers/mpc-rm.sh deleted file mode 100755 index 03673dbe..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/mpc-rm.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -cd "$XDG_MUSIC_DIR" || die "No music dir!" -trash-put "$(mpc --format '%file%' current)" -mpc del 0 - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/mpc.sh b/hm/soispha/pkgs/scripts/wrappers/mpc.sh deleted file mode 100755 index b870150b..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/mpc.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -case "$1" in -"rm") - shift 1 - mpc-rm "$@" - ;; -"fav") - shift 1 - mpc-fav "$@" - ;; -*) - mpc "$@" - ;; -esac - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/show.sh b/hm/soispha/pkgs/scripts/wrappers/show.sh deleted file mode 100755 index 95afb16c..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/show.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -# Maybe add `--quit-if-one-screen` -less --redraw-on-quit "$@" - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/sort_song.sh b/hm/soispha/pkgs/scripts/wrappers/sort_song.sh deleted file mode 100755 index 8195cfcf..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/sort_song.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -case "$("$1" | tr '[:upper:]' '[:lower:]')" in -"lyrics") - filter="LYRICS" - directory="lyrics" - ;; -"instrumental") - filter="INSTRUMENTAL" - directory="instrumental" - ;; -*) - die "Expected 'instrumental|lyrics' but got '$1'" - ;; -esac - -process() { - mediainfo --Output=JSON "$1" | jq '.media.track | map(.Lyrics) | join("")' -} - -mkdir "../$directory" - -fd . --extension=opus | while read -r file; do - if [ "$(process "$file")" = '""' ] || [ "$(process "$file")" = '"Instrumental"' ] || [ "$(process "$file")" = '"instrumental"' ]; then - echo "INSTRUMENTAL::$file" - else - echo "LYRICS::$file" - fi -done | grep "$filter" | awk 'BEGIN {FS="::"}{print $2}' | while read -r file; do ln -s "../all/$file" "../$directory/$file"; done - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/spodi.sh b/hm/soispha/pkgs/scripts/wrappers/spodi.sh deleted file mode 100755 index 8b4188b0..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/spodi.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -# This path must not contain spaces -DOWN_DIR="/home/soispha/media/music/down/spotify" - -download_url="$1" - -already_downloaded_files="$(mktmp)" -fd . "$DOWN_DIR" --exclude spotdl.log --exclude spotdl-errors.log >"$already_downloaded_files" - -config="$(mktmp)" -cat <"$config" -# Main options ---audio slider-kz bandcamp youtube-music piped youtube soundcloud ---lyrics genius musixmatch azlyrics synced - -# FFmpeg options ---ffmpeg ffmpeg ---threads 16 ---bitrate 256k - -# Spotify options ---cache-path /home/soispha/.cache/spotdl/.spotipy - -# Output options ---preload ---format opus ---output {artists}_-_{title} ---print-errors ---save-errors $DOWN_DIR/spotdl-errors.log -# TODO: Reactive whence spotdl support for these has improved <2023-12-19> -# --generate-lrc ---overwrite skip - -# Misc options ---log-level INFO -EOF - -if [ -z "$NO_CHECK" ] && [ "$(wc -l <"$already_downloaded_files")" -ne 0 ]; then - die "something is already downloaded" -fi - -rm "$DOWN_DIR/spotdl.log" -cd "$DOWN_DIR" || die "BUG: no $DOWN_DIR" -touch "$DOWN_DIR/spotdl-errors.log" - -# The sub shell needs to be unquoted, as the arguments may not be treated as one. -# shellcheck disable=2046 -unbuffer spotdl $(cat "$config") download "$download_url" | tee "$DOWN_DIR/spotdl.log" - -[ -d ~/.spotdl ] && rm -r ~/.spotdl -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/virsh-del.sh b/hm/soispha/pkgs/scripts/wrappers/virsh-del.sh deleted file mode 100755 index 96a9404d..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/virsh-del.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -virsh destroy "$1" -virsh undefine "$1" --nvram -virsh vol-delete --pool default "$1".qcow2 - -# vim: ft=sh diff --git a/hm/soispha/pkgs/scripts/wrappers/yti.sh b/hm/soispha/pkgs/scripts/wrappers/yti.sh deleted file mode 100755 index caa5f443..00000000 --- a/hm/soispha/pkgs/scripts/wrappers/yti.sh +++ /dev/null @@ -1,33 +0,0 @@ -#! /usr/bin/env dash - -# shellcheck source=/dev/null -SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH - -DOWN_DIR=/home/soispha/media/music/down/youtube - -tmp=$(mktmp) -config=$(mktmp) - -for e in "$DOWN_DIR"/*.opus; do echo "$e" >>"$tmp"; done -[ "$(wc -l "$tmp" | awk '{print $1}')" -gt 2 ] && die "something is already downloaded" - -cat <"$config" ---paths home:"$DOWN_DIR" -#--output %(fulltitle) ---restrict-filenames ---no-overwrites ---no-write-info-json ---clean-info-json ---prefer-free-formats -#--format mp3 ---extract-audio ---audio-quality 0 ---audio-format best -EO - -rm "$DOWN_DIR/yt-dlp.log" -cd "$DOWN_DIR" || die "BUG: no $DOWN_DIR" - -unbuffer yt-dlp --config-location "$config" "$1" | tee "$DOWN_DIR/yt-dlp.log" - -# vim: ft=sh diff --git a/sys/nixpkgs/default.nix b/sys/nixpkgs/default.nix index 85fccbce..7862faa2 100644 --- a/sys/nixpkgs/default.nix +++ b/sys/nixpkgs/default.nix @@ -3,8 +3,9 @@ system, overlays ? [], sysLib, + config, }: let - additionalPackages = (import ./pkgs) {inherit sysLib;}; + additionalPackages = (import ./pkgs) {inherit config sysLib;}; complete_overlays = overlays ++ additionalPackages; in { # TODO: inheriting system here is discouraged, localSystem or hostSystem should be inspected diff --git a/sys/nixpkgs/pkgs/default.nix b/sys/nixpkgs/pkgs/default.nix index 25bb746a..c5959bb4 100644 --- a/sys/nixpkgs/pkgs/default.nix +++ b/sys/nixpkgs/pkgs/default.nix @@ -1,16 +1,22 @@ -{sysLib}: let - snap-sync-forked = (import ./snap-sync-forked) {inherit sysLib;}; +{ + config, + sysLib, +}: let + comments = import ./comments; nvim_plugs = import ./plgs-pkgs; + scripts = import ./scripts {inherit sysLib config;}; + snap-sync-forked = (import ./snap-sync-forked) {inherit sysLib;}; update_vim_plugins = import ./update_vim_plugins; yt = import ./yt; - comments = import ./comments; yts-grammar = import ./tree-sitter-yts; + overlays = - snap-sync-forked + comments ++ nvim_plugs + ++ scripts + ++ snap-sync-forked ++ update_vim_plugins ++ yt - ++ yts-grammar - ++ comments; + ++ yts-grammar; in overlays diff --git a/sys/nixpkgs/pkgs/scripts/default.nix b/sys/nixpkgs/pkgs/scripts/default.nix new file mode 100644 index 00000000..faa546c7 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/default.nix @@ -0,0 +1,350 @@ +{ + sysLib, + config, +}: [ + ( + final: prev: let + inherit (prev) lib; + + write_shell = { + name, + path, + dependencies ? [], + keepPath ? false, + completions ? false, + }: + sysLib.writeShellScript { + inherit name keepPath; + src = ./source/${path}/${name}.sh; + dependencies = dependencies ++ [prev.dash]; + generateCompletions = completions; + }; + write_python = { + name, + path, + dependencies_system ? [], + dependencies_python ? _: [], + keepPath ? false, + }: let + src = ./source/${path}/${name}.py; + dependencies = + [(prev.python3.withPackages dependencies_python)] + ++ dependencies_system; + path_setting = + if keepPath + then "--prefix PATH :" + else "--set PATH"; + in + prev.runCommandLocal name { + nativeBuildInputs = [prev.makeWrapper] ++ dependencies; + } + '' + install -m755 ${src} -D "$out/bin/${name}" + patchShebangs "$out/bin/${name}" + wrapProgram "$out/bin/${name}" ${path_setting} ${prev.lib.makeBinPath dependencies}; + ''; + + ## Begin of shell scripts + + aumo-scr = write_shell { + name = "aumo"; + path = "apps"; + dependencies = builtins.attrValues {inherit (prev) udisks gawk gnused gnugrep sudo;}; + }; + + battery-scr = write_shell { + name = "battery"; + path = "wrappers"; + dependencies = []; + }; + + con2pdf-scr = sysLib.writeShellScript { + name = "con2pdf"; + src = ./source/apps/con2pdf.sh; + dependencies = builtins.attrValues {inherit (prev) sane-backends imagemagick coreutils fd;}; + generateCompletions = true; + replacementStrings = { + DEVICE_FUNCTION = + # This is here, because escaping the whole function, to use it in the shell script + # directly just isn't possible + prev.writeText "DEVICE_FUNCTION" + /* + bash + */ + '' + scanimage -L | awk 'BEGIN { FS = "`" } { gsub(/'.*/, "", $2); print $2 }' + ''; + }; + }; + + description-scr = write_shell { + name = "description"; + path = "specific/ytcc"; + dependencies = builtins.attrValues { + inherit (prev) jq fmt less locale; + }; + }; + + fupdate-scr = write_shell { + name = "fupdate"; + path = "apps"; + keepPath = true; + dependencies = builtins.attrValues { + inherit + (prev) + dash + nix + gnugrep + fd + coreutils + bat # used by batgrep + gnused # required by batgrep + git # needed to fetch through git + git-crypt # needed to unlock git-crypted repos + ; + inherit (prev.bat-extras) batgrep; + }; + }; + + git-edit-index-scr = write_shell { + name = "git-edit-index"; + path = "apps"; + completions = true; + # This starts neovim, wich might want to shell out + keepPath = true; + dependencies = builtins.attrValues { + inherit + (prev) + git + gnused + # $EDITOR + + ; + }; + }; + + hibernate-scr = write_shell { + name = "hibernate"; + path = "wrappers"; + dependencies = builtins.attrValues { + inherit + (prev) + systemd + taskwarrior + ; + }; + }; + + ll-scr = sysLib.writeShellScript { + name = "ll"; + src = ./source/wrappers/ll.sh; + wrap = false; + }; + + # TODO: this need to be replaced with a wayland alternative + # llp-scr = write_shell { + # name = "llp"; + # path = "wrappers"; + # dependencies = builtins.attrValues {inherit (prev) lf ueberzug;}; + # }; + + lock-scr = write_shell { + name = "lock"; + path = "wrappers"; + dependencies = builtins.attrValues { + inherit + (prev) + taskwarrior + swaylock + ; + }; + }; + + lyrics-scr = write_shell { + name = "lyrics"; + path = "wrappers"; + dependencies = builtins.attrValues { + inherit + (prev) + exiftool + mpc-cli + jq + less + locale # dependency of less + ; + }; + }; + + mpc-fav-scr = write_shell { + name = "mpc-fav"; + path = "wrappers"; + dependencies = builtins.attrValues { + inherit + (prev) + mpc-cli + ; + }; + }; + + mpc-rm-scr = write_shell { + name = "mpc-rm"; + path = "wrappers"; + dependencies = builtins.attrValues { + inherit + (prev) + mpc-cli + trash-cli + ; + }; + }; + + mpc-scr = write_shell { + name = "mpc"; + path = "wrappers"; + dependencies = [ + mpc-fav-scr + mpc-rm-scr + prev.mpc-cli + ]; + }; + + nato-scr = write_python { + name = "nato"; + path = "small_functions"; + dependencies_python = ps: []; + }; + + neorg-scr = sysLib.writeShellScriptMultiPart { + name = "neorg"; + keepPath = true; + src = ./source/specific/neorg/sh; + baseName = "main.sh"; + cmdPrefix = "functions"; + cmdNames = [ + "add.sh" + "context.sh" + "dmenu.sh" + "f_start.sh" + "f_stop.sh" + "list.sh" + "project.sh" + "utils.sh" + "workspace.sh" + ]; + dependencies = with prev; [ + cocogitto + git-crypt + rofi + libnotify + ]; + generateCompletions = true; + replacementStrings = { + DEFAULT_NEORG_PROJECT_DIR = + config.programs.nixvim.plugins.neorg.modules."core.dirman".config.workspaces.projects; + HOME_TASKRC = "${config.xdg.configHome}/task/home-manager-taskrc"; + ALL_PROJECTS_NEWLINE = "${config.soispha.taskwarrior.projects.projects_newline}"; + ALL_PROJECTS_COMMA = "${config.soispha.taskwarrior.projects.projects_comma}"; + ALL_PROJECTS_PIPE = "${config.soispha.taskwarrior.projects.projects_pipe}"; + ALL_WORKSPACES = "${lib.strings.concatStringsSep "|" (builtins.attrNames config.programs.nixvim.plugins.neorg.modules."core.dirman".config.workspaces)}"; + ID_GENERATION_FUNCTION = "${sysLib.writeShellScript { + name = "neorg_id_function"; + src = ./source/specific/neorg/neorg_id_function.sh; + dependencies = with prev; [ + taskwarrior + gawk + findutils # xargs + ]; + }}/bin/neorg_id_function"; + + # TODO: Replace the hard-coded path here with some reference <2023-10-20> + TASK_PROJECT_FILE = "/home/soispha/repos/nix/nixos-config/hm/soispha/conf/taskwarrior/projects/default.nix"; + }; + }; + + screenshot_persistent-scr = write_shell { + name = "screenshot_persistent"; + path = "small_functions"; + keepPath = true; + dependencies = builtins.attrValues { + inherit + (prev) + grim + slurp + alacritty + rofi + libnotify + lf # TODO: add llp + ; + }; + }; + + screenshot_temporary-scr = write_shell { + name = "screenshot_temporary"; + path = "small_functions"; + dependencies = builtins.attrValues {inherit (prev) grim slurp wl-clipboard;}; + }; + + show-scr = write_shell { + name = "show"; + path = "wrappers"; + keepPath = true; # I might want to use nvim in less (and shell escapes) + dependencies = builtins.attrValues {inherit (prev) less locale;}; + }; + + sort_song-scr = write_shell { + name = "sort_song"; + path = "wrappers"; + dependencies = builtins.attrValues {inherit (prev) mediainfo jq gawk;}; + }; + + spodi-scr = write_shell { + name = "spodi"; + path = "wrappers"; + dependencies = builtins.attrValues {inherit (prev) gawk expect spotdl fd coreutils;}; + }; + + update-sys-scr = write_shell { + name = "update-sys"; + path = "small_functions"; + dependencies = builtins.attrValues {inherit (prev) git git-crypt nixos-rebuild sudo openssh coreutils mktemp gnugrep gnused;}; + }; + + virsh-del-scr = write_shell { + name = "virsh-del"; + path = "wrappers"; + dependencies = builtins.attrValues {inherit (prev) libvirt;}; + }; + + yti-scr = write_shell { + name = "yti"; + path = "wrappers"; + dependencies = builtins.attrValues {inherit (prev) gawk expect yt-dlp;}; + }; + in { + # llp = llp-scr; # TODO: see above + aumo = aumo-scr; + battery = battery-scr; + con2pdf = con2pdf-scr; + description = description-scr; + fupdate = fupdate-scr; + git-edit-index = git-edit-index-scr; + hibernate = hibernate-scr; + ll = ll-scr; + lock = lock-scr; + lyrics = lyrics-scr; + mpc-fav = mpc-fav-scr; + mpc-rm = mpc-rm-scr; + mpc = mpc-scr; + nato = nato-scr; + neorg = neorg-scr; + screenshot_persistent = screenshot_persistent-scr; + screenshot_temporary = screenshot_temporary-scr; + show = show-scr; + sort_song = sort_song-scr; + spodi = spodi-scr; + update-sys = update-sys-scr; + virsh-del = virsh-del-scr; + yti = yti-scr; + } + ) +] diff --git a/sys/nixpkgs/pkgs/scripts/source/apps/aumo.sh b/sys/nixpkgs/pkgs/scripts/source/apps/aumo.sh new file mode 100755 index 00000000..7426115a --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/apps/aumo.sh @@ -0,0 +1,25 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +unmounting() { + disk_name="$(find /dev/disk/by-label -type l -printf "%P|" | rofi -sep "|" -dmenu -p "Select disk to mount")" + + udisksctl unmount --block-device "/dev/disk/by-label/$disk_name" +} + +mounting() { + disk_name="$(find /dev/disk/by-label -type l -printf "%P|" | rofi -sep "|" -dmenu -p "Select disk to mount")" + + udisksctl mount --block-device "/dev/disk/by-label/$disk_name" +} + +case "$1" in +"mount") + mounting + ;; +"unmount" | "umount") + unmounting + ;; +esac diff --git a/sys/nixpkgs/pkgs/scripts/source/apps/con2pdf.sh b/sys/nixpkgs/pkgs/scripts/source/apps/con2pdf.sh new file mode 100755 index 00000000..620a299a --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/apps/con2pdf.sh @@ -0,0 +1,234 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +# needed for help() and version +# shellcheck disable=2034 +AUTHORS="Soispha" +# shellcheck disable=2034 +YEARS="2023" +# shellcheck disable=2034 +VERSION="1.0.0" + +# NAME is from the wrapper +# shellcheck disable=SC2269 +NAME="$NAME" +help() { + cat <_1.pdf). + + --num-pages | -p NUM + Number of pages to merge into one pdf (default: 1). + + --device | -d DEVICE + Device used for scanning. + + --method | -m METHOD + Method to use for scanning (default: ADF). + + --help | -h + Display this help and exit. + + --version | -v + Display version and copyright information and exit. +ARGUMENTS: + FILE := [[fd . --max-depth 3]] + A name of a file to store, default is: ./pdf + + NAME | * := [[fd . --max-depth 3]] + The basename of the generated files + + NUM | *([0-9]) := 0 | 1 | 2 | 3 | 4 + Possible numbers of pages, can be more than 4 + + DEVICE := [[$(cat %DEVICE_FUNCTION)]] + Possible scanner names + + METHOD := ADF | Flatbed + The scanning method to use, not all scanners support both of + these. The default is ADF +EOF +} + +scan_adf() { + device="$1" + sides_per_page="$2" + method="ADF" + for i in $(seq "$sides_per_page"); do + do_until_success \ + "scanimage --format=tiff --progress --source='$method' --device='$device' --batch=%d.tif --batch-increment='$sides_per_page' --batch-start='$i'" \ + "warn 'Retrying scan, as we assume a network error!'" + + if [ "$sides_per_page" -ne 1 ]; then + msg "Finished turn, please change side!" + readp "Press enter to continue" noop + fi + done +} +process_images_adf() { + tiff_temp_path="$1" + output_directory="$2" + name="$3" + + counter=0 + pdf_counter=0 + image_cache="$(mktmp)" + while read -r scanned_image; do + dbg "$scanned_image (scanned_image) at $counter (counter)" + echo "$scanned_image" >>"$image_cache" + : $((counter += 1)) + if [ "$counter" = "$number_of_pages" ]; then + dbg "$counter == $number_of_pages" + counter=0 + convert_images "$image_cache" "${name}_$pdf_counter" "$output_directory" + : $((pdf_counter += 1)) + printf "" >"$image_cache" + fi + done <"$(tmp_pipe fd . "$tiff_temp_path" "|" sort -V)" +} + +scan_flatbed() { + device="$1" + number_of_pages"$2" + method="Flatbed" + for i in $(seq "$number_of_pages"); do + do_until_success \ + "scanimage --format=tiff --progress --source='$method' --device='$device' --output-file=$i.tiff" \ + "warn 'Retrying scan, as we assume a network error!'" + if [ "$number_of_pages" -ne 1 ]; then + msg "Finished turn, please change side!" + readp "Press enter to continue" noop + fi + done +} +process_images_flatbed() { + tiff_temp_path="$1" + output_directory="$2" + name="$3" + + counter=0 + image_cache="$(mktmp)" + while read -r scanned_image; do + echo "$scanned_image" >>"$image_cache" + : $((counter += 1)) + if [ "$counter" = "$number_of_pages" ]; then + counter=0 + convert_images "$image_cache" "$name" "$output_directory" + printf "" >"$image_cache" + fi + done <"$(tmp_pipe fd . "$tiff_temp_path" "|" sort -V)" +} +convert_images() { + image_cache="$1" + pdf_name="$2" + output_dir="$3" + + set -- + while read -r image; do + dbg "setting image: $image" + set -- "$@" "$image" + done <"$image_cache" + + while [ -e "$output_dir/${pdf_name}.pdf" ]; do + pdf_name="${pdf_name}_$(tr -dc 'A-Za-z0-9' *|*--help*|*-h*\] + +# DESCRIPTION + +Argument can be stacked, this makes it possible to specify multiple targets to be updated in succession. See the Examples section for further details. + +No argument or *flake* +: **fupdate**, when executed without arguments or with *flake*, will update your *flake.lock*, check for duplicate flake inputs, i.e., an input has an input declared, which you have also declared as input, and will run a script called *update.sh*, if you allow it. +The allowance for the script is asked, when you run **fupdate** and the found script is not yet allowed. Furthermore, the allowance is based on the concrete sha256 hash of the script, so any changes will require another allowance. + +**\** as argument +: If the executable **update-\** is reachable thought the PATH variable, than this is run. Otherwise, the program will exit. + +# OPTIONS + +**--help**, **-h** +: Displays a help message and exit. + +**--version**, **-v** +: Displays the software version and exit. + +# EXAMPLES + +**fupdate** or **fupdate flake** +: Updates your *flake.lock*. See the Description section for further details. + +**fupdate sys** +: Run the executable **update-sys**, if it exists. See the Description section for further details. + +**fupdate flake sys docs** +: First updates your flake, then, if the command succeeded, runs **update-sys**, afterweich **update-docs** is run. + +# FILES + +*update.sh* +: This is supposed to be a shell script located in your flake base directory, i.e., the directory which contains both a *flake.nix* and a *flake.lock* file. + +*~/.local/share/flake-update/* +: **fupdate** will store the hashes to the allowed *update.sh* files here. + +# BUGS + +Report bugs to . + +# COPYRIGHT + +Copyright (C) 2023 Soispha + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . diff --git a/sys/nixpkgs/pkgs/scripts/source/apps/fupdate.sh b/sys/nixpkgs/pkgs/scripts/source/apps/fupdate.sh new file mode 100755 index 00000000..0032be4b --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/apps/fupdate.sh @@ -0,0 +1,167 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +UPDATE_SCRIPT_NAME="update.sh" +CONFIG_DIRECTORY_PATH="$HOME/.local/share/flake-update" + +# Both are used in version() +# shellcheck disable=SC2034 +AUTHORS="Soispha" +# shellcheck disable=SC2034 +YEARS="2023" + +# Searches upward for a `UPDATE_SCRIPT_NAME` script +# Returns a path to the script if it exists, otherwise nothing is returned +check_for_update_script() { + dirname="$(search_upward_files "$UPDATE_SCRIPT_NAME")" + if [ "$dirname" ]; then + printf "%s/%s" "$dirname" "$UPDATE_SCRIPT_NAME" + fi +} + +# Checks if a given path to the update script is allowed. +# Takes the path as input +# Return 0, if allowed, 1 if not. +check_for_allowed_update_script() { + update_script="$1" + config_path="${CONFIG_DIRECTORY_PATH}${update_script}" + update_script_hash="$(sha256sum "$update_script")" + if [ -f "$config_path" ]; then + if [ "$(cat "$config_path")" = "$update_script_hash" ]; then + dbg "Recorded hash matches" + return 0 + else + dbg "Recorded hash \'$(cat "$config_path")\' does not match real hash \'$update_script_hash\', assuming not allowed" + return 1 + fi + else + dbg "Path \'$config_path\' does not exist, assuming not allowed" + return 1 + fi +} + +# Asks the user if they want to allow a given script. +# Takes the path as input +ask_to_allow_update_script() { + update_script="$1" + config_path="${CONFIG_DIRECTORY_PATH}${update_script}" + update_script_hash="$(sha256sum "$update_script")" + println "\033[2J" # clear the screen + cat "$update_script" + readp "Do you want to allow this script?[N/y]: " allow + # shellcheck disable=SC2154 + dbg "allow is: $allow" + case "$allow" in + [yY]) + dbg "allowed script" + dbg "storing contents in: $config_path" + mkdir --parents "$(dirname "$config_path")" + print "$update_script_hash" >"$config_path" + ;; + *) + UPDATE_SCRIPT_NOT_ALLOWED=true + ;; + esac +} + +# Runs the provided script and continues to update the nix flake +# Takes the path to the script and the directory to the flake as arguments +# If the path to the update script is empty, it will be ignored +update() { + update_script="$1" + flake_base_dir="$2" + shift 2; + + dbg "Provided following args to update script: '$*'" + dbg "changed directory to: $flake_base_dir" + cd "$flake_base_dir" || die "Provided dir \'$flake_base_dir\' can not be accessed" + + nix flake update + + [ "$update_script" = "" ] || "$update_script" "$@" + + if grep '[^0-9]_[0-9]' flake.lock >/dev/null; then + batgrep '[^0-9]_[0-9]' flake.lock + die "Your flake.nix contains duplicate inputs!" + fi +} + +help() { + cat < + runs a executable called "update-", if it exists +EOF +} + +main() { + if ! [ "$UPDATE_SCRIPT_NOT_ALLOWED" = true ]; then + update_script="$(check_for_update_script)" + flake_base_dir="$(search_flake_base_dir)" # Assume, that the update script is in the base dir + dbg "update_script is: $update_script" + dbg "flake_base_dir is: $flake_base_dir" + + if [ "$update_script" = "" ]; then + update "" "$flake_base_dir" "$@" + elif check_for_allowed_update_script "$update_script" && ! [ "$update_script" = "" ]; then + update "$update_script" "$flake_base_dir" "$@" + else + ask_to_allow_update_script "$update_script" + main "$@" + fi + fi +} + +if [ "$#" -eq 0 ]; then + main +fi + +for input in "$@"; do + case "$input" in + "--help" | "-h") + help + exit 0 + ;; + "--version" | "-v") + version + exit 0 + ;; + "--") + end_of_cli_options=true + ;; + esac + [ "$end_of_cli_options" = "true" ] && break +done + +case "$1" in +"flake") + shift 1 + [ "$1" = "--" ] && shift 1; + main "$@" + ;; +*) + command="$1" + shift 1 + [ "$1" = "--" ] && shift 1; + if which update-"$command" >/dev/null 2>&1; then + update-"$command" "$@" + else + die "command \"update-$command\" is not executable, or does not exist" + fi + ;; +esac diff --git a/sys/nixpkgs/pkgs/scripts/source/apps/git-edit-index.sh b/sys/nixpkgs/pkgs/scripts/source/apps/git-edit-index.sh new file mode 100755 index 00000000..0010718b --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/apps/git-edit-index.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +# needed for help() and version +# shellcheck disable=2034 +AUTHORS="Soispha" +# shellcheck disable=2034 +YEARS="2024" +# shellcheck disable=2034 +VERSION="1.0.0" + +# NAME is from the wrapper +# shellcheck disable=SC2269 +NAME="$NAME" + +help() { + cat <"$GIT_DIR/.git/EDIT_INDEX_PATCH" + + git add "$1" + git restore --staged "$1" + cat "$1" >"$GIT_DIR/.git/EDIT_INDEX_FILE" + git restore "$1" + + git apply "$GIT_DIR/.git/EDIT_INDEX_PATCH" + "$EDITOR" "$1" + + git add "$1" + mv "$GIT_DIR/.git/EDIT_INDEX_FILE" "$1" +} + +edit() { + files_to_add="$(mktmp)" + realpath --relative-to=. "$@" >"$files_to_add" + + index_files="$(mktmp)" + git diff --name-only --cached --diff-filter=AM >"$index_files" + + while read -r file; do + if grep -q "$file" "$files_to_add"; then + sed -i "s|$file||" "$files_to_add" + materialize_file "$file" + fi + done <"$index_files" + + files_to_check="$(mktmp)" + clean "$files_to_add" >"$files_to_check" + if [ "$(wc -l <"$files_to_check")" -gt 0 ]; then + warn "Could not edit every file:" + cat "$files_to_add" + fi +} + +for arg in "$@"; do + case "$arg" in + "--help" | "-h") + help + exit 0 + ;; + "--version" | "-v") + version + exit 0 + ;; + "--") + end_of_cli_options=true + ;; + esac + [ "$end_of_cli_options" = "true" ] && break +done + +edit "$@" + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/small_functions/nato.py b/sys/nixpkgs/pkgs/scripts/source/small_functions/nato.py new file mode 100755 index 00000000..e9d15f56 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/small_functions/nato.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python3 +# originally from here: https://cgit.pacien.net/desktop-utilities/ + +import sys + +alphabet = { + "nato": { + "A": "Alfa", # No idea why this is not just 'Alpha' .. + "B": "Bravo", + "C": "Charlie", + "D": "Delta", + "E": "Echo", + "F": "Foxtrot", + "G": "Golf", + "H": "Hotel", + "I": "India", + "J": "Juliett", + "K": "Kilo", + "L": "Lima", + "M": "Mike", + "N": "November", + "O": "Oscar", + "P": "Papa", + "Q": "Quebec", + "R": "Romeo", + "S": "Sierra", + "T": "Tango", + "U": "Uniform", + "V": "Victor", + "W": "Whiskey", + "X": "X-ray", + "Y": "Yankee", + "Z": "Zulu", + "0": "Nadazero", + "1": "Unaone", + "2": "Bissotwo", + "3": "Terrathree", + "4": "Kartefour", + "5": "Pantafive", + "6": "Soxisix", + "7": "Setteseven", + "8": "Oktoeight", + "9": "Novenine", + ",": "Comma", + "/": "Forward slash", + ".": "Stop/Decimal", + }, + "german": { + "A": "Aachen", + "Ä": "Umlaut Aachen", + "B": "Berlin", + "C": "Chemnitz", + "D": "Düsseldorf", + "E": "Essen", + "F": "Frankfurt", + "G": "Goslar", + "H": "Hamburg", + "I": "Ingelheim", + "J": "Jena", + "K": "Köln", + "L": "Leipzig", + "M": "München", + "N": "Nürnberg", + "O": "Offenbach", + "Ö": "Umlaut Offenbach", + "P": "Potsdam", + "Q": "Quickborn", + "R": "Rostock", + "S": "Salzwedel", + "ẞ": "Eszett", + "T": "Tübingen", + "U": "Unna", + "Ü": "Umlaut Unna", + "V": "Völklingen", + "W": "Wuppertal", + "X": "Xanten", + "Y": "Ypsilon", + "Z": "Zwickau", + }, +} + + +def str_to_telephony(phrase, language): + language_alphabet = alphabet[language] + + return [ + language_alphabet[c] if c in language_alphabet else c for c in phrase.upper() + ] + + +language = sys.argv[1] +if language not in ["nato", "german"]: + print( + f"Langugae '{language}' is not a valid language, only 'nato' and 'german' are!", + file=sys.stderr, + ) + exit(1) + +print( + "\n".join( + str_to_telephony( + " ".join(sys.argv[2:]), + language, + ) + ) +) diff --git a/sys/nixpkgs/pkgs/scripts/source/small_functions/screenshot_persistent.sh b/sys/nixpkgs/pkgs/scripts/source/small_functions/screenshot_persistent.sh new file mode 100755 index 00000000..5992e02f --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/small_functions/screenshot_persistent.sh @@ -0,0 +1,22 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +# only generate a path (this could lead to a time-of-check/time-of-use bug) +tmp="$(mktmp --dry-run)" + +if grim -g "$(slurp)" "$tmp"; then + name="$(rofi -dmenu -p "Name of screenshot: " -l 0)" + screen_shot_path="$HOME/media/pictures/screenshots/$name.png" + while [ -f "$screen_shot_path" ]; do + notify-send "Warning" 'Screenshot name already in use!' + name="$(rofi -dmenu -p "New name of screenshot: " -l 0)" + screen_shot_path="$HOME/media/pictures/screenshots/$name.png" + done + + mv "$tmp" "$screen_shot_path" + alacritty -e lf -command ":{{ set sortby atime; set reverse!; }}" +fi + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/small_functions/screenshot_temporary.sh b/sys/nixpkgs/pkgs/scripts/source/small_functions/screenshot_temporary.sh new file mode 100755 index 00000000..e411340d --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/small_functions/screenshot_temporary.sh @@ -0,0 +1,8 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +grim -g "$(slurp)" | wl-copy + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/small_functions/update-sys.sh b/sys/nixpkgs/pkgs/scripts/source/small_functions/update-sys.sh new file mode 100755 index 00000000..68fb342d --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/small_functions/update-sys.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +help() { + cat <] [--help] + +Options: + --branch | -b BRANCHNAME + select a branch to update from. + --mode | -m MODE + select a mode to update with + --help | -h + output this help. +EOF + exit "$1" +} +default_branch=$(mktmp) +BRANCH="" + +while [ "$#" -gt 0 ]; do + case "$1" in + "--help" | "-h") + help 0 + ;; + "--branch" | "-b") + if [ -n "$2" ]; then + BRANCH="$2" + else + error "$1 requires an argument" + help 1 + fi + shift 2 + ;; + "--mode" | "-m") + if [ -n "$2" ]; then + MODE="$2" + else + error "$1 requires an argument" + help 1 + fi + shift 2 + ;; + *) + error "the option $1 does not exist!" + help 1 + ;; + esac +done + +cd /etc/nixos || die "No /etc/nixos" +msg "Starting system update..." +git remote update origin --prune >/dev/null 2>&1 +if ! [ "$BRANCH" = "" ]; then + git switch "$BRANCH" >/dev/null 2>&1 && msg2 "Switched to branch '$BRANCH'" +fi +msg2 "Updating git repository..." +git pull --rebase + +git remote show origin | grep 'HEAD' | cut -d':' -f2 | sed -e 's/^ *//g' -e 's/ *$//g' >"$default_branch" & + +msg2 "Updating system..." +if [ -n "$MODE" ]; then + nixos-rebuild "$MODE" +else + nixos-rebuild switch +fi + +git switch "$(cat "$default_branch")" >/dev/null 2>&1 && msg2 "Switched to branch '$(cat "$default_branch")'" +msg "Finished Update!" + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/neorg_id_function.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/neorg_id_function.sh new file mode 100755 index 00000000..7c3fb2a3 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/neorg_id_function.sh @@ -0,0 +1,12 @@ +#! /bin/sh +context="$(task _get rc.context)" +if [ "$context" ]; then + filter="project:$context" +else + filter="0-10000" +fi +tasks="$(task "$filter" _ids)" + +if [ "$tasks" ]; then + echo "$tasks" | xargs task _zshids | awk -F: -v q="'" '{gsub(/'\''/, q "\\" q q ); print $1 ":" q $2 q}' +fi diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/add.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/add.nu new file mode 100755 index 00000000..8cf9666c --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/add.nu @@ -0,0 +1,3 @@ +export def "main" [] { + "hi!" +} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/dmenu.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/dmenu.nu new file mode 100755 index 00000000..177e7483 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/dmenu.nu @@ -0,0 +1,5 @@ +# Select a project in dmenu mode +# +# This will give you all projects +# and exectute the selected one as in 'neorg projects ' +def "main" [] {} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/fstart.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/fstart.nu new file mode 100755 index 00000000..f77cd3f6 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/fstart.nu @@ -0,0 +1,5 @@ +# Starts the task +# +# This only happens after it stooped +# the previous active task, if it existed. +def "main" [id: int] {} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/fstop.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/fstop.nu new file mode 100755 index 00000000..bcaac944 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/fstop.nu @@ -0,0 +1,2 @@ +# Stops the current active task +def "main" [] {} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/list.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/list.nu new file mode 100755 index 00000000..68a130f9 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/list.nu @@ -0,0 +1,2 @@ +# Lists all available contexts +def "main" [] {} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/neorg.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/neorg.nu new file mode 100755 index 00000000..92af49cc --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/neorg.nu @@ -0,0 +1,74 @@ +#!/usr/bin/env nu + +use add.nu main +use dmenu.nu +use fstart.nu +use fstop.nu +use list.nu +use project.nu +use task.nu +use workspace.nu [main workspaces] + +# The core of the system-integrated task handling and management +def main [] { + add +} + +# Allows you to quickly add projects +def "main add" [] { + add +} + +# Select a project in dmenu mode +# +# This will give you all projects +# and exectute the selected one as in 'neorg projects ' +def "main dmenu" [] { + dmenu +} + +# Starts the task +# +# This only happens after it stooped +# the previous active task, if it existed. +def "main fstart" [id: int] { + fstart +} + +# Stops the current active task +def "main fstop" [] { + fstop +} + +# Lists all available contexts +def "main list" [] { + list +} + +# Opens the project in the webbrowser +# +# Opens the webbrowser with either the context (P) or +# the current active context as argument if no context is supplied +def "main project" [project?: string] { + project +} + +# Open the context of a task +# +# Open the neorg context associated with the current context and +# the uuid of the task with id ID. Without ID, it'll open the +# current context's norg file. +# If no context is set, drops you to the selection prompt +def "main task" [id?: int] { + task +} + +# Open a neorg workspace +# +# The neorg workspace to open at startup, an empty value drops +# you at a prompt to enter the workspace yourself. +def "main workspace" [ + workspace?: string@workspaces # The workspace to open +] { + workspace $workspace +} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/project.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/project.nu new file mode 100755 index 00000000..530eab9b --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/project.nu @@ -0,0 +1,5 @@ +# Opens the project in the webbrowser +# +# Opens the webbrowser with either the context (P) or +# the current active context as argument if no context is supplied +def "main" [project?: string] {} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/task.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/task.nu new file mode 100755 index 00000000..41d1d6e5 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/task.nu @@ -0,0 +1,7 @@ +# Open the context of a task +# +# Open the neorg context associated with the current context and +# the uuid of the task with id ID. Without ID, it'll open the +# current context's norg file. +# If no context is set, drops you to the selection prompt +def "main" [id?: int] {} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/workspace.nu b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/workspace.nu new file mode 100755 index 00000000..dfa79f29 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/nu/workspace.nu @@ -0,0 +1,25 @@ +export def workspaces [] { + # echo "%ALL_WORKSPACES" | split row '|' + ["a", "b"] +} + + +export def "main" [ workspace?: string ] { + if $workspace != null { + let pred = workspaces | where $it == $workspace | is-empty + if $pred == false { + true + } else { + error make { + msg: $"Your Workspace \(($workspace)) is not one of the defined ones: (workspaces)", + } + } + } else { + let tmp = mktemp + printf ":Neorg workspace " | save --append $tmp + + nvim -c "NeorgStart" -s $tmp + + rm $tmp + } +} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/add.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/add.sh new file mode 100755 index 00000000..5a830a10 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/add.sh @@ -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/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/context.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/context.sh new file mode 100755 index 00000000..7095847d --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/context.sh @@ -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/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/dmenu.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/dmenu.sh new file mode 100755 index 00000000..73e9460a --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/dmenu.sh @@ -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/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/f_start.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/f_start.sh new file mode 100755 index 00000000..2423dd44 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/f_start.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env dash + +fstart0start_new_task() { + task_id="$1" + fstop0stop_current_task + task start "$task_id" +} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/f_stop.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/f_stop.sh new file mode 100755 index 00000000..e4ff0b94 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/f_stop.sh @@ -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/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/list.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/list.sh new file mode 100755 index 00000000..10659457 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/list.sh @@ -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/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/project.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/project.sh new file mode 100755 index 00000000..64591850 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/project.sh @@ -0,0 +1,41 @@ +#!/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/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/utils.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/utils.sh new file mode 100755 index 00000000..c3843e8e --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/utils.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env dash + +# Runs it's first argument and then the second, regardless if the first failed or +# succeeded +utils0chain() { + eval "$1" + eval "$2" +} + +utils0get_current_context() { + current_context="$(task _get rc.context)" + 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/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/workspace.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/workspace.sh new file mode 100755 index 00000000..d5eb2fca --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/functions/workspace.sh @@ -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 ")" +} diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/main.sh b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/main.sh new file mode 100755 index 00000000..5087c391 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/neorg/sh/main.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +# load dependencies +. ./functions/add.sh +. ./functions/context.sh +. ./functions/dmenu.sh +. ./functions/f_start.sh +. ./functions/f_stop.sh +. ./functions/list.sh +. ./functions/project.sh +. ./functions/utils.sh +. ./functions/workspace.sh + +# these are used in version() +# shellcheck disable=2034 +AUTHORS="Soispha" +# shellcheck disable=2034 +YEARS="2023" + +NAME="neorg" + +help() { + cat <' + + workspace [WS] + The neorg workspace (WS) to open at startup, an empty value drops + you at a prompt to enter the workspace yourself. + + project [P] + Opens the webbrowser with either the context (P) or + the current active context as argument if no context is supplied + + list + Lists all available contexts + + add + Allows you to quickly add projects + + fstart ID + Starts the task (ID) but only after it stooped + the previous active task, if it existed. + + fstop + Stops the current active task +ARGUMENTS: + ID | *([0-9]) := [[%ID_GENERATION_FUNCTION]] + The function displays all possible IDs of the eligable tasks. + + WS := %ALL_WORKSPACES + All possible workspaces + + P := %ALL_PROJECTS_PIPE + The possible project + +EOF +} + +for arg in "$@"; do + case "$arg" in + "--help" | "-h") + help + exit 0 + ;; + "--version" | "-v") + version + exit 0 + ;; + esac +done + +while [ "$#" -ne 0 ]; do + case "$1" in + "t"*) # task + shift 1 + task_id="$1" + [ "$task_id" ] || utils0chain context0open_current_task_context "exit 0" + context0open_current_task_context_at_task_id "$task_id" + exit 0 + ;; + "w"*) # workspace + shift 1 + workspace_to_open="$1" + # TODO: Exit with 1 on error, instead of the 0 <2023-10-20> + [ "$workspace_to_open" ] || utils0chain workspace0open_neorg_workspace_prompt "exit 0" + workspace0open_neorg_workspace "$workspace_to_open" + exit 0 + ;; + "p"*) # project + shift 1 + project_to_open="$1" + # TODO: Exit with 1 on error, instead of the 0 <2023-10-20> + [ "$project_to_open" ] || utils0chain project0open_current_context_in_browser "exit 0" + if ! grep -q "$project_to_open" "$(ptmp "%ALL_PROJECTS_NEWLINE")"; then + die "Your project ('$project_to_open') is not in the list of available projects: +%ALL_PROJECTS_COMMA" + fi + project0open_project_in_browser "$project_to_open" + exit 0 + ;; + "l"*) # list + list0list_all_contexts_newline + exit 0 + ;; + "a"*) # add-project + add0open_taskwarrior_project_file + exit 0 + ;; + "d"*) # dmenu + dmenu0open_context_in_browser + exit 0 + ;; + "fsta"*) # fstart + shift 1 + task_id="$1" + [ "$task_id" ] || die "No task id provided to fstart" + fstart0start_new_task "$task_id" + exit 0 + ;; + "fsto"*) # fstop + fstop0stop_current_task + exit 0 + ;; + *) + die "Command '$1' does not exist! Please look at:\n $NAME --help" + exit 0 + ;; + esac +done + +context0open_current_task_context +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/specific/ytcc/description.sh b/sys/nixpkgs/pkgs/scripts/source/specific/ytcc/description.sh new file mode 100755 index 00000000..e2a1afaa --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/specific/ytcc/description.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +jq --raw-output '.description' "$XDG_RUNTIME_DIR/ytcc/running" | fmt -u -s | less + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/battery.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/battery.sh new file mode 100755 index 00000000..65485dff --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/battery.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +capacity="$(cat /sys/class/power_supply/BAT0/capacity)" +status="$(cat /sys/class/power_supply/BAT0/status)" + +printf "%s%% (%s)\n" "$capacity" "$status" + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/hibernate.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/hibernate.sh new file mode 100755 index 00000000..f3e74732 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/hibernate.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +context="$(task _get rc.context)" +[ "$context" ] && task context none + +# We have ensured that only one task is active +active="$(task +ACTIVE _ids)" +[ "$active" ] && task stop "$active" + +systemctl hibernate "$@" + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/ll.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/ll.sh new file mode 100755 index 00000000..2a65d0a6 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/ll.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +last_directory="$(mktemp)" + +command lf -last-dir-path="$last_directory" "$@" + +dir="$(cat "$last_directory")" +cd "$dir" || die "$dir does not exist!" +rm "$last_directory" + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/lock.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/lock.sh new file mode 100755 index 00000000..f1c5c711 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/lock.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +context="$(task _get rc.context)" +[ "$context" ] && task context none + +# We have ensured that only one task is active +active="$(task +ACTIVE _ids)" +[ "$active" ] && task stop "$active" + +swaylock + +[ "$active" ] && task start "$active" + +[ "$context" ] && task context "$context" +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/lyrics.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/lyrics.sh new file mode 100755 index 00000000..83a01083 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/lyrics.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +( + cd "$XDG_MUSIC_DIR" || die "No music dir!" + exiftool "$(mpc --format '%file%' current)" -json | jq '.[0].Lyrics' -r | less +) + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-fav.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-fav.sh new file mode 100755 index 00000000..7385ce43 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-fav.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +FAV_DIR="$XDG_MUSIC_DIR/playlists/favourites" + +cd "$XDG_MUSIC_DIR" || die "No music dir!" + +[ -d "$FAV_DIR" ] || mkdir --parents "$FAV_DIR" + +ln -sr "$(mpc --format '%file%' current)" "$FAV_DIR/" || die "Link failed!" + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-rm.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-rm.sh new file mode 100755 index 00000000..03673dbe --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc-rm.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +cd "$XDG_MUSIC_DIR" || die "No music dir!" +trash-put "$(mpc --format '%file%' current)" +mpc del 0 + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc.sh new file mode 100755 index 00000000..b870150b --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/mpc.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +case "$1" in +"rm") + shift 1 + mpc-rm "$@" + ;; +"fav") + shift 1 + mpc-fav "$@" + ;; +*) + mpc "$@" + ;; +esac + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/show.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/show.sh new file mode 100755 index 00000000..95afb16c --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/show.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +# Maybe add `--quit-if-one-screen` +less --redraw-on-quit "$@" + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/sort_song.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/sort_song.sh new file mode 100755 index 00000000..8195cfcf --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/sort_song.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +case "$("$1" | tr '[:upper:]' '[:lower:]')" in +"lyrics") + filter="LYRICS" + directory="lyrics" + ;; +"instrumental") + filter="INSTRUMENTAL" + directory="instrumental" + ;; +*) + die "Expected 'instrumental|lyrics' but got '$1'" + ;; +esac + +process() { + mediainfo --Output=JSON "$1" | jq '.media.track | map(.Lyrics) | join("")' +} + +mkdir "../$directory" + +fd . --extension=opus | while read -r file; do + if [ "$(process "$file")" = '""' ] || [ "$(process "$file")" = '"Instrumental"' ] || [ "$(process "$file")" = '"instrumental"' ]; then + echo "INSTRUMENTAL::$file" + else + echo "LYRICS::$file" + fi +done | grep "$filter" | awk 'BEGIN {FS="::"}{print $2}' | while read -r file; do ln -s "../all/$file" "../$directory/$file"; done + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/spodi.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/spodi.sh new file mode 100755 index 00000000..8b4188b0 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/spodi.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +# This path must not contain spaces +DOWN_DIR="/home/soispha/media/music/down/spotify" + +download_url="$1" + +already_downloaded_files="$(mktmp)" +fd . "$DOWN_DIR" --exclude spotdl.log --exclude spotdl-errors.log >"$already_downloaded_files" + +config="$(mktmp)" +cat <"$config" +# Main options +--audio slider-kz bandcamp youtube-music piped youtube soundcloud +--lyrics genius musixmatch azlyrics synced + +# FFmpeg options +--ffmpeg ffmpeg +--threads 16 +--bitrate 256k + +# Spotify options +--cache-path /home/soispha/.cache/spotdl/.spotipy + +# Output options +--preload +--format opus +--output {artists}_-_{title} +--print-errors +--save-errors $DOWN_DIR/spotdl-errors.log +# TODO: Reactive whence spotdl support for these has improved <2023-12-19> +# --generate-lrc +--overwrite skip + +# Misc options +--log-level INFO +EOF + +if [ -z "$NO_CHECK" ] && [ "$(wc -l <"$already_downloaded_files")" -ne 0 ]; then + die "something is already downloaded" +fi + +rm "$DOWN_DIR/spotdl.log" +cd "$DOWN_DIR" || die "BUG: no $DOWN_DIR" +touch "$DOWN_DIR/spotdl-errors.log" + +# The sub shell needs to be unquoted, as the arguments may not be treated as one. +# shellcheck disable=2046 +unbuffer spotdl $(cat "$config") download "$download_url" | tee "$DOWN_DIR/spotdl.log" + +[ -d ~/.spotdl ] && rm -r ~/.spotdl +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/virsh-del.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/virsh-del.sh new file mode 100755 index 00000000..96a9404d --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/virsh-del.sh @@ -0,0 +1,10 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +virsh destroy "$1" +virsh undefine "$1" --nvram +virsh vol-delete --pool default "$1".qcow2 + +# vim: ft=sh diff --git a/sys/nixpkgs/pkgs/scripts/source/wrappers/yti.sh b/sys/nixpkgs/pkgs/scripts/source/wrappers/yti.sh new file mode 100755 index 00000000..caa5f443 --- /dev/null +++ b/sys/nixpkgs/pkgs/scripts/source/wrappers/yti.sh @@ -0,0 +1,33 @@ +#! /usr/bin/env dash + +# shellcheck source=/dev/null +SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH + +DOWN_DIR=/home/soispha/media/music/down/youtube + +tmp=$(mktmp) +config=$(mktmp) + +for e in "$DOWN_DIR"/*.opus; do echo "$e" >>"$tmp"; done +[ "$(wc -l "$tmp" | awk '{print $1}')" -gt 2 ] && die "something is already downloaded" + +cat <"$config" +--paths home:"$DOWN_DIR" +#--output %(fulltitle) +--restrict-filenames +--no-overwrites +--no-write-info-json +--clean-info-json +--prefer-free-formats +#--format mp3 +--extract-audio +--audio-quality 0 +--audio-format best +EO + +rm "$DOWN_DIR/yt-dlp.log" +cd "$DOWN_DIR" || die "BUG: no $DOWN_DIR" + +unbuffer yt-dlp --config-location "$config" "$1" | tee "$DOWN_DIR/yt-dlp.log" + +# vim: ft=sh -- cgit 1.4.1