{ 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" "review.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 { scripts = { # 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; }; } ) ]