nix shell cli dump
my .zshrc was getting to be > 1,3 million lines on avg.
after days of configuration and variable tweaking
and then realizing that debugging was l'impossible so
tried bash-it (along w/ xonsh
, which was v weird(?) tbd which i'll use)
tl;dr zsh feature Bloat, config hell
built-in-it! you don't even gotta go on github and organize by most stars
example bash-it browser opens a browser with the raw html displayed
shell echo "
#### bash-it autocompletion
another suspiciously seamless-ly integrated feature, w/ no
`compinit autoload -UZ)(R##F) -9; init` à la `.zshrc`
you select which autocompletions you'd like, w/ option for `all` and a warning
that it might slow things down, which, it didn't :~_)
#### bash-it search
```shell
bash-it search bundle
aliases: bundler
completions: bundler
https://github.com/Bash-it/bash-it (opens new window)
mail -a myscript.sh -s "copy of the myscript" tyler@g.com < /dev/null
find -name *.pdf | xargs rm -rf
https://www.gnu.org/software/gawk/manual/gawk.html#Miscellaneous-Programs (opens new window)
example:
11.3.1 Finding Duplicated Words in a Document A common error when writing large amounts of prose is to accidentally duplicate words. Typically you will see this in text as something like “the the program does the following…” When the text is online, often the duplicated words occur at the end of one line and the beginning of another, making them very difficult to spot.
This program, dupword.awk, scans through a file one line at a time and looks for adjacent occurrences of the same word. It also saves the last word on a line (in the variable prev) for comparison with the first word on the next line.
The first two statements make sure that the line is all lowercase, so that, for example, “The” and “the” compare equal to each other. The next statement replaces nonalphanumeric and nonwhitespace characters with spaces, so that punctuation does not affect the comparison either. The characters are replaced with spaces so that formatting controls don’t create nonsense words (e.g., the Texinfo ‘@code{NF}’ becomes ‘codeNF’ if punctuation is simply deleted). The record is then resplit into fields, yielding just the actual words on the line, and ensuring that there are no empty fields.
If there are no fields left after removing all the punctuation, the current record is skipped. Otherwise, the program loops through each word, comparing it to the previous one:
# dupword.awk --- find duplicate words in text
{
$0 = tolower($0)
gsub(/[^[:alnum:][:blank:]]/, " ");
$0 = $0 # re-split
if (NF == 0)
next
if ($1 == prev)
printf("%s:%d: duplicate %s\n",
FILENAME, FNR, $1)
for (i = 2; i <= NF; i++)
if ($i == $(i-1))
printf("%s:%d: duplicate %s\n",
FILENAME, FNR, $i)
prev = $NF
}
my first awk = an night cron job that emailed db stats in a beauty of a lil table:
sendEmail() {
local userCount="$(psql -d ${ConnString:?} -c $'\copy (select count(*) from users where created_at > now() - interval \'1 day\') to stdout' |
| awk '{print "<h1>signups</h1><p>there were " $0 " signups today</p>"
;}')"
}
tail /usr/local/var/postgres/server.log
// sample output:
FATAL: lock file "postmaster.pid" already exists
HINT: Is another postmaster (PID 90574) running in data directory "/usr/local/var/postgres"?
--describe-config
This option dumps out the server's internal configuration
variables, descriptions, and defaults in tab-delimited COPY format.
wadda program!
https://www.keyboardmaestro.com/ (opens new window)
defaults
mine that've been altered:
# imsg
defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticQuoteSubstitutionEnabled" -bool false
sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName
# --
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSScrollAnimationEnabled -bool false
# choose where u want ur SSs to go
defaults write com.apple.screencapture location /Users/tyler/kk/static/img/ & killall SystemUIServer
defaults write -g WebAutomaticTextReplacementEnabled -bool true
hatis searches a set of database files containing short descriptions of system commands for keywords and displays the result on the standard output. Only complete word matches are displayed.
$ apropos ssh
git-shell(1) - Restricted login shell for Git-only SSH access
CURLINFO_APPCONNECT_TIME(3) - get the time until the SSL/SSH handshake is completed
CURLOPT_SSH_AUTH_TYPES(3) - set desired auth types for SFTP and SCP
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3) - checksum of SSH server public key
CURLOPT_SSH_KEYDATA(3) - pointer to pass to the SSH key callback
CURLOPT_SSH_KEYFUNCTION(3) - callback for known host matching logic
CURLOPT_SSH_KNOWNHOSTS(3) - file name holding the SSH known hosts
CURLOPT_SSH_PRIVATE_KEYFILE(3) - set private key file for SSH auth
CURLOPT_SSH_PUBLIC_KEYFILE(3) - set public key file for SSH auth
Net::DNS::RR::SSHFP(3pm) - DNS SSHFP resource record
Tcl_NewObj(3tcl), Tcl_DuplicateObj(3tcl), Tcl_IncrRefCount(3tcl), Tcl_DecrRefCount(3tcl), Tcl_IsShared(3tcl), Tcl_InvalidateStringRep(3tcl) - manipulate Tcl objects
crosshair(n) - Crosshairs for Tk canvas
glIsShader(3G) - Determines if a name corresponds to a shader object
ssh(1) - OpenSSH SSH client (remote login program)
ssh-add(1) - adds private key identities to the authentication agent
ssh-agent(1) - authentication agent
ssh-copy-id(1) - use locally available keys to authorise logins on a remote machine
ssh-keychain(8), ssh-keychain.dylib(8) - smartcard/keychain support library
ssh-keygen(1) - authentication key generation, management and conversion
ssh-keyscan(1) - gather ssh public keys
ssh-keysign(8) - ssh helper program for host-based authentication
ssh-pkcs11-helper(8) - ssh-agent helper program for PKCS#11 support
ssh_config(5) - OpenSSH SSH client configuration files
sshd(8) - OpenSSH SSH daemon
sshd_config(5) - OpenSSH SSH daemon configuration file
upsshutdown(8) - UPS emergency low power shutdown script
get system log info
get system log info re: cron jobs
sudo prune
agedu -s ~/examples/
then
agedu -w ~/examples/
cool reading about the data-structure bhind it :~)
https://www.chiark.greenend.org.uk/~sgtatham/agedu/tree.html (opens new window)
get info about logins
cool :~0
perl -MCPAN -e shell
// then:
install URI::Escape
// <C-c>
use defaults domains
to list them, and defaults read D
to read them
sick of having 4 diff config files on 4 diff computers?
it2prof() {
echo -e "\033]50;SetProfile=$1\a"
};
another way to check out src code of clus is to go into
/usr/local/opt/
then, e.g.
ack/bin/ack
= a 138k file with the disclaimer that this file is generated and to go to
the git repo to see the src (https://github.com/beyondgrep/ack2 (opens new window)), but alas:
#!/usr/bin/env perl
#
# This file, ack, is generated code.
# Please DO NOT EDIT or send patches for it.
#
# Please take a look at the source from
# https://github.com/beyondgrep/ack2
# and submit patches against the individual files
# that build ack.
#
package main;
use strict;
use warnings;
our $VERSION = '2.24'; # Check https://beyondgrep.com/ for updates
use 5.008008;
use Getopt::Long 2.38 ();
use Carp 1.04 ();
use File::Spec ();
# XXX Don't make this so brute force
# See also: https://github.com/beyondgrep/ack2/issues/89
our $opt_after_context;
our $opt_before_context;
our $opt_output;
our $opt_print0;
our $opt_color;
our $opt_heading;
our $opt_show_filename;
our $opt_regex;
our $opt_break;
our $opt_count;
our $opt_v;
our $opt_m;
our $opt_g;
our $opt_f;
our $opt_lines;
our $opt_L;
our $opt_l;
our $opt_passthru;
our $opt_column;
# Flag if we need any context tracking.
our $is_tracking_context;
# These are all our globals.
MAIN: {
$App::Ack::orig_program_name = $0;
$0 = join(' ', 'ack', $0);
if ( $App::Ack::VERSION ne $main::VERSION ) {
App::Ack::die( "Program/library version mismatch\n\t$0 is $main::VERSION\n\t$INC{'App/Ack.pm'} is $App::Ack::VERSION" );
}
# Do preliminary arg checking;
my $env_is_usable = 1;
for my $arg ( @ARGV ) {
last if ( $arg eq '--' );
# Get the --thpppt, --bar, --cathy checking out of the way.
$arg =~ /^--th[pt]+t+$/ and App::Ack::thpppt($arg);
$arg eq '--bar' and App::Ack::ackbar();
$arg eq '--cathy' and App::Ack::cathy();
# See if we want to ignore the environment. (Don't tell Al Gore.)
$arg eq '--env' and $env_is_usable = 1;
$arg eq '--noenv' and $env_is_usable = 0;
}
if ( !$env_is_usable ) {
my @keys = ( 'ACKRC', grep { /^ACK_/ } keys %ENV );
delete @ENV{@keys};
}
load_colors();
Getopt::Long::Configure('default', 'no_auto_help', 'no_auto_version');
Getopt::Long::Configure('pass_through', 'no_auto_abbrev');
Getopt::Long::GetOptions(
'help' => sub { App::Ack::show_help(); exit; },
'version' => sub { App::Ack::print_version_statement(); exit; },
'man' => sub { App::Ack::show_man(); exit; },
);
Getopt::Long::Configure('default', 'no_auto_help', 'no_auto_version');
if ( !@ARGV ) {
App::Ack::show_help();
exit 1;
}
main();
}
```shell
it2prof() {
echo -e "\033]50;SetProfile=$1\a"
}
function n {
echo "${*}" >> ~/kk/notes;
};
function n { echo "${\*}" >> ~/notes; echo "added" };
$ n "does this work amazing!"
$ cat ~/notes
$ does this work amazing!
Under "Semantic History", choose "Run coprocess..". In the text field, put:
echo vim \1 +\2
http://samrowe.com/wordpress/advancing-in-the-bash-shell/ (opens new window)
execute last command with sudo
open vim w/ the last bit of the last command
grep -i function src/cms/cms.js rvm:ruby-2.4.1
function addElement () {
script.innerHTML = `!function(){"use strict //etc
function launchCML () {
insertHandler: function (data) {
* @param {Function} fn Callback function
var ready = function (fn) {
if (typeof fn !== 'function') return
ready(function () {
vi $!
do whatever was 3 commands ago
cp /all/these/files/*
bash$ cp /home/bozo/current_work/junk/* .
Copy all the "junk" files to $PWD.
<opensource.apple.com/source>
here's the src of cron
https://opensource.apple.com/source/cron/cron-35/crontab/crontab.c.auto.html (opens new window)
https://www.gnu.org/software/bash/manual/bashref.html#Escape-Character (opens new window)
3.1.2.2 Single Quotes Enclosing characters in single quotes (‘'’) preserves the literal value of each character within the quotes. A single quote may not occur between single quotes, even when preceded by a backslash.
edit ur path w/ zsh
$ mail -a day.sh -s "script" tylers@vfiles.com < /dev/null
imagemin img/* --out-dir=minified
sudo chown -R $(whoami) /usr/local/example
la $(brew --prefix)/Cellar/node_modules
found the SafariCloudHistoryPushAgent
man SafariCloudHistoryPushAgent
SAFARICLOUDHISTROYPUSH... BSD System Manager's ManualSAFARICLOUDHISTROYPUSH...
NAME
SafariCloudHistoryPushAgent -- Safari Cloud History Push Agent
DESCRIPTION
SafariCloudHistoryPushAgent is the system launch agent that listens for changes to
Safari history from other devices.
There are no configuration options to SafariCloudHistoryPushAgent, and users should
not run SafariCloudHistoryPushAgent manually.
September 18, 2018
here are some of the defaults on a guest admin user I created:
$ ruby --version
ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17]
$ python --version
Python 2.7.15
$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/Postgres.app/Contents/Versions/latest/bin
export EDITOR="vim"
export GIT_EDITOR="vim"
export VISUAL="gvim"
setopt PROMPT_SUBST
export PROMPT="%B%(?..[%?] )%b%F{red}%M %D{%Y%b%d %H:%M:%S}>%f "
export RPROMPT="%F{green}%~%f"
to see how krazi good it is, type /u/l/b<tab>
which will complete to /usr/local/bin
on running brew update i noticed these caveats:
==> Upgrading zsh-completions
==> Downloading https://github.com/zsh-users/zsh-completions/archive/0.28.0.tar.gz
==> Downloading from https://codeload.github.com/zsh-users/zsh-completions/tar.gz/0.28.0
######################################################################## 100.0%
==> Caveats
To activate these completions, add the following to your .zshrc:
fpath=(/usr/local/share/zsh-completions $fpath)
You may also need to force rebuild `zcompdump`:
rm -f ~/.zcompdump; compinit
Additionally, if you receive "zsh compinit: insecure directories" warnings when attempting
to load these completions, you may need to run this:
chmod go-w '/usr/local/share'
i also see this a lot:
zsh completions have been installed to:
/usr/local/share/zsh/site-functions
zmodload zsh/complist
autoload -Uz compinit
compinit
and not a clue what it does, tho i know it's related to autocompl
also, when i cat .zcompdump
i see:
autoload -Uz _brew _brew_cask _brew_services _carthage _cheat
ETC
_zsh _zsh-mime-handler _zsocket _zstyle _ztodo \
autoload -Uz +X _call_program
zsh-autocompletions
, compinit
, zcompdump
&c.man zsh
zsh Zsh overview (this section)
zshroadmap Informal introduction to the manual
zshmisc Anything not fitting into the other sections
zshexpn Zsh command and parameter expansion
zshparam Zsh parameters
zshoptions Zsh options
zshbuiltins Zsh built-in functions
zshzle Zsh command line editing
zshcompwid Zsh completion widgets
zshcompsys Zsh completion system
zshcompctl Zsh completion control
zshmodules Zsh loadable modules
zshtcpsys Zsh built-in TCP functions
zshzftpsys Zsh built-in FTP client
zshcontrib Additional zsh functions and utilities
zshall Meta-man page containing all of the above
for a great explanation of "keg-only"
https://github.com/Homebrew/homebrew-core/issues/11091#issuecomment-286641024 (opens new window)
from the trouble shooting docs, re: permissions
"if you're unsure what to do, run
cd /usr/local \
sudo chown -R $(whoami) bin etc include lib sbin share var opt Cellar Caskroom Frameworks`
check for all plainfiles:
% l *(.)
PATH and path both set the search path for commands. These two variables are equivalent, except that one is a string and one is an array. If the user modifies PATH, the shell changes path as well, and vice versa.
% PATH=/bin:/usr/bin:/tmp:.
% echo $path
/bin /usr/bin /tmp .
% path=( /usr/bin . /usr/local/bin /usr/ucb )
% echo $PATH
/usr/bin:.:/usr/local/bin:/usr/ucb
from: http://zsh.sourceforge.net/Intro/intro_16.html#SEC16
to see which options can be set, do setopt <tab>
setopt autocd
now u can do
cd
workspaces/ (cd into workspaces)
GLOBDOTS lets files beginning with a . be matched without explicitly specifying the dot.
$ ls -d *x*
get info about machine
system_profiler -detailLevel mini
# output:
Software:
System Software Overview:
System Version: macOS 10.13.6 (17G65)
Kernel Version: Darwin 17.7.0
Boot Volume: Untitled
Boot Mode: Normal
Computer Name: iMac (3)
User Name: tyler (tyler)
Secure Virtual Memory: Enabled
System Integrity Protection: Disabled
Time since boot: 9 days 18:30
about-plugin 'render command line output in your browser'
function browser() { about 'pipe html to a browser' example '$ echo "
if [ -t 0 ]; then
if [ -n "$1" ]; then
open $1
else
reference browser
fi
else
f="/tmp/browser.$RANDOM.html"
cat /dev/stdin > $f
open $f
fi
}
see <https://gist.github.com/318247>
function wmate() { about 'pipe hot spicy interwebs into textmate and cleanup!' example '$ wmate google.com' group 'browser'
if [ -t 0 ]; then if [ -n "$1" ]; then wget -qO- $1 | /usr/bin/mateTIDY=`/usr/bin/osascript << EOT tell application "TextMate" activate end tell application "System Events" tell process "TextMate" tell menu bar 1 tell menu bar item "Bundles" tell menu "Bundles" tell menu item "HTML" tell menu "HTML" click menu item "Tidy" end tell end tell end tell end tell end tell end tell end tell EOT
if [ -t 0 ]; then if [ -n "$1" ]; then wget -qO- $1 | browser else reference raw fi fi }
## finding things
```bash
ag -i -o $*
find . node_modules
wadda program!
https://www.keyboardmaestro.com/ (opens new window)
defaults
mine that've been altered:
# imsg
defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticQuoteSubstitutionEnabled" -bool false
sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName
# --
defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false
defaults write NSGlobalDomain NSScrollAnimationEnabled -bool false
# choose where u want ur SSs to go
defaults write com.apple.screencapture location /Users/tyler/kk/static/img/ & killall SystemUIServer
defaults write -g WebAutomaticTextReplacementEnabled -bool true
hatis searches a set of database files containing short descriptions of system commands for keywords and displays the result on the standard output. Only complete word matches are displayed.
$ apropos ssh
git-shell(1) - Restricted login shell for Git-only SSH access
CURLINFO_APPCONNECT_TIME(3) - get the time until the SSL/SSH handshake is completed
CURLOPT_SSH_AUTH_TYPES(3) - set desired auth types for SFTP and SCP
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3) - checksum of SSH server public key
CURLOPT_SSH_KEYDATA(3) - pointer to pass to the SSH key callback
CURLOPT_SSH_KEYFUNCTION(3) - callback for known host matching logic
CURLOPT_SSH_KNOWNHOSTS(3) - file name holding the SSH known hosts
CURLOPT_SSH_PRIVATE_KEYFILE(3) - set private key file for SSH auth
CURLOPT_SSH_PUBLIC_KEYFILE(3) - set public key file for SSH auth
Net::DNS::RR::SSHFP(3pm) - DNS SSHFP resource record
Tcl_NewObj(3tcl), Tcl_DuplicateObj(3tcl), Tcl_IncrRefCount(3tcl), Tcl_DecrRefCount(3tcl), Tcl_IsShared(3tcl), Tcl_InvalidateStringRep(3tcl) - manipulate Tcl objects
crosshair(n) - Crosshairs for Tk canvas
glIsShader(3G) - Determines if a name corresponds to a shader object
ssh(1) - OpenSSH SSH client (remote login program)
ssh-add(1) - adds private key identities to the authentication agent
ssh-agent(1) - authentication agent
ssh-copy-id(1) - use locally available keys to authorise logins on a remote machine
ssh-keychain(8), ssh-keychain.dylib(8) - smartcard/keychain support library
ssh-keygen(1) - authentication key generation, management and conversion
ssh-keyscan(1) - gather ssh public keys
ssh-keysign(8) - ssh helper program for host-based authentication
ssh-pkcs11-helper(8) - ssh-agent helper program for PKCS#11 support
ssh_config(5) - OpenSSH SSH client configuration files
sshd(8) - OpenSSH SSH daemon
sshd_config(5) - OpenSSH SSH daemon configuration file
upsshutdown(8) - UPS emergency low power shutdown script
get system log info
get system log info re: cron jobs
sudo prune
agedu -s ~/examples/
then
agedu -w ~/examples/
cool reading about the data-structure bhind it :~)
https://www.chiark.greenend.org.uk/~sgtatham/agedu/tree.html (opens new window)
get info about logins
cool :~0
# /usr/local/Homebrew/bin
#!/bin/bash
set +o posix
# Fail fast with concise message when cwd does not exist
if ! [[ -d "$PWD" ]]; then
echo "Error: The current working directory doesn't exist, cannot proceed." >&2
exit 1
fi
quiet_cd() {
cd "$@" >/dev/null || return
}
symlink_target_directory() {
local target target_dirname
target="$(readlink "$1")"
target_dirname="$(dirname "$target")"
local directory="$2"
quiet_cd "$directory" && quiet_cd "$target_dirname" && pwd -P
}
BREW_FILE_DIRECTORY="$(quiet_cd "${0%/*}/" && pwd -P)"
HOMEBREW_BREW_FILE="${BREW_FILE_DIRECTORY%/}/${0##*/}"
HOMEBREW_PREFIX="${HOMEBREW_BREW_FILE%/*/*}"
# Default to / prefix if unset or the bin/brew file.
if [[ -z "$HOMEBREW_PREFIX" || "$HOMEBREW_PREFIX" = "$HOMEBREW_BREW_FILE" ]]
then
HOMEBREW_PREFIX="/"
fi
HOMEBREW_REPOSITORY="$HOMEBREW_PREFIX"
# Resolve the bin/brew symlink to find Homebrew's repository
if [[ -L "$HOMEBREW_BREW_FILE" ]]
then
BREW_FILE_DIRECTORY="$(symlink_target_directory "$HOMEBREW_BREW_FILE" "$BREW_FILE_DIRECTORY")"
HOMEBREW_REPOSITORY="${BREW_FILE_DIRECTORY%/*}"
fi
# Try to find a /usr/local HOMEBREW_PREFIX where possible (for bottles)
if [[ -L "/usr/local/bin/brew" ]]
then
USR_LOCAL_BREW_FILE_DIRECTORY="$(symlink_target_directory "/usr/local/bin/brew" "/usr/local/bin")"
USR_LOCAL_HOMEBREW_REPOSITORY="${USR_LOCAL_BREW_FILE_DIRECTORY%/*}"
if [[ "$HOMEBREW_REPOSITORY" = "$USR_LOCAL_HOMEBREW_REPOSITORY" ]]
then
HOMEBREW_PREFIX="/usr/local"
fi
fi
HOMEBREW_LIBRARY="$HOMEBREW_REPOSITORY/Library"
# Whitelist and copy to HOMEBREW_* all variables previously mentioned in
# manpage or used elsewhere by Homebrew.
for VAR in AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY BINTRAY_USER BINTRAY_KEY \
BROWSER EDITOR GIT NO_COLOR PATH VISUAL
do
# Skip if variable value is empty.
[[ -z "${!VAR}" ]] && continue
VAR_NEW="HOMEBREW_${VAR}"
# Skip if existing HOMEBREW_* variable is set.
[[ -n "${!VAR_NEW}" ]] && continue
export "$VAR_NEW"="${!VAR}"
done
# test-bot does environment filtering itself
if [[ -z "$HOMEBREW_NO_ENV_FILTERING" && "$1" != "test-bot" ]]
then
PATH="/usr/bin:/bin:/usr/sbin:/sbin"
FILTERED_ENV=()
# Filter all but the specific variables.
for VAR in HOME SHELL PATH TERM COLUMNS LOGNAME USER CI TRAVIS SSH_AUTH_SOCK SUDO_ASKPASS \
http_proxy https_proxy ftp_proxy no_proxy all_proxy HTTPS_PROXY FTP_PROXY ALL_PROXY \
"${!HOMEBREW_@}" "${!TRAVIS_@}"
do
# Skip if variable value is empty.
[[ -z "${!VAR}" ]] && continue
FILTERED_ENV+=( "${VAR}=${!VAR}" )
done
exec /usr/bin/env -i "${FILTERED_ENV[@]}" /bin/bash "$HOMEBREW_LIBRARY/Homebrew/brew.sh" "$@"
else
# Don't need shellcheck to follow this `source`.
# shellcheck disable=SC1090
source "$HOMEBREW_LIBRARY/Homebrew/brew.sh"
fi