flake: { pkgs }: with pkgs.lib; let mapAttrsToLines = mapping: attrs: pkgs.lib.concatStringsSep "\n" (pkgs.lib.mapAttrsToList mapping attrs); fmt = rec { codeBlock = code: text: ''"\e[${code}m"${text}"\e[0m"''; keyword = codeBlock "1;36"; section = codeBlock "4;35"; printSectionTitle = title: ''echo -e "\n\n"${section title}"\n"''; }; in rec { exportEnvVar = k: v: '' export ${escapeShellArg k}="${v}" ''; exportEnvVars = mapAttrsToLines exportEnvVar; printEnvVar = k: v: '' echo -e ${fmt.keyword (escapeShellArg "$" + k)}: ${escapeShellArg v} ''; printEnvVars = envVars: '' ${fmt.printSectionTitle "ENVIRONMENT VARIABLES"} ${mapAttrsToLines printEnvVar envVars} ''; printBins = packagePaths: '' ${fmt.printSectionTitle "TOOLS"} ls "${pkgs.symlinkJoin { name = "env"; paths = packagePaths; }}/bin" ''; # Use the default user shell instead of Bash startUserShell = '' $(${pkgs.finger_bsd}/bin/finger $USER \ | ${pkgs.gnugrep}/bin/grep -oP 'Shell: \K.*') ''; }