diff --git a/homes/x86_64-linux/evanreichard@lin-va-thinkpad/default.nix b/homes/x86_64-linux/evanreichard@lin-va-thinkpad/default.nix index 3e61812..b2d3e31 100755 --- a/homes/x86_64-linux/evanreichard@lin-va-thinkpad/default.nix +++ b/homes/x86_64-linux/evanreichard@lin-va-thinkpad/default.nix @@ -54,6 +54,7 @@ in k9s = enabled; nvim = enabled; pi = enabled; + scripts.plan-disk-burns = enabled; }; }; }; @@ -70,6 +71,7 @@ in home.packages = with pkgs; [ orca-slicer + blender ]; home.pointerCursor = { diff --git a/modules/home/programs/terminal/scripts/bin/plan-disk-burns.sh b/modules/home/programs/terminal/scripts/bin/plan-disk-burns.sh new file mode 100644 index 0000000..7401d6b --- /dev/null +++ b/modules/home/programs/terminal/scripts/bin/plan-disk-burns.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +echo "plan-disk-burns: placeholder" +echo "runtime tools available: smartctl, lsblk" diff --git a/modules/home/programs/terminal/scripts/default.nix b/modules/home/programs/terminal/scripts/default.nix new file mode 100644 index 0000000..29e3546 --- /dev/null +++ b/modules/home/programs/terminal/scripts/default.nix @@ -0,0 +1,40 @@ +{ lib +, pkgs +, config +, namespace +, ... +}: +let + inherit (lib) mkIf mkEnableOption mapAttrs' mapAttrsToList nameValuePair filterAttrs; + cfg = config.${namespace}.programs.terminal.scripts; + + # Script Registry - Each entry declares its runtime dependencies. The script + # source lives in ./bin/.sh and is exposed on PATH as when enabled. + # Add a script by dropping ./bin/.sh and a one-line entry here, e.g.: + # scriptDefs = { + # plan-disk-burns = { runtimeInputs = with pkgs; [ smartmontools util-linux ]; }; + # my-new-thing = { runtimeInputs = with pkgs; [ jq curl ]; }; + # }; + scriptDefs = { + plan-disk-burns = { runtimeInputs = with pkgs; [ smartmontools util-linux ]; }; + }; + + mkScript = name: def: + pkgs.writeShellApplication { + inherit name; + runtimeInputs = def.runtimeInputs or [ ]; + text = builtins.readFile (./bin + "/${name}.sh"); + }; +in +{ + options.${namespace}.programs.terminal.scripts = + mapAttrs' + (name: _: nameValuePair name { enable = mkEnableOption name; }) + scriptDefs; + + config = { + home.packages = + mapAttrsToList (name: def: mkScript name def) + (filterAttrs (name: _: cfg.${name}.enable) scriptDefs); + }; +}