{ 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;}; }; 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; }; }; 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 ; }; }; 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"; cmdPrefix = "functions"; cmdNames = [ "add" "context" "dmenu" "f_start" "f_stop" "list" "project" "utils" "workspace" ]; 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 con2pdf-scr description-scr fupdate-scr hibernate-scr ll-scr lock-scr lyrics-scr mpc-fav-scr mpc-rm-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 ]