diff --git a/README.md b/README.md index 57b4c17..4648c8b 100644 --- a/README.md +++ b/README.md @@ -105,6 +105,10 @@ wget -O ~/.local/bin/cheatsheets https://raw.githubusercontent.com/cheat/cheat/m chmod +x ~/.local/bin/cheatsheets ``` +#### Init cheatsheets #### +This command requires `yq` +To init the cheatsheets call `cheatsheets init` + #### Pull changes #### To pull the community and personal cheatsheets call `cheatsheets pull` diff --git a/cmd/cheat/docopt.txt b/cmd/cheat/docopt.txt index e12615e..d076bc1 100644 --- a/cmd/cheat/docopt.txt +++ b/cmd/cheat/docopt.txt @@ -5,6 +5,7 @@ Options: --init Write a default config file to stdout -a --all Search among all cheatpaths -c --colorize Colorize output + -C --config Print config path -d --directories List cheatsheet directories -e --edit= Edit -l --list List cheatsheets @@ -21,6 +22,9 @@ Examples: To initialize a config file: mkdir -p ~/.config/cheat && cheat --init > ~/.config/cheat/conf.yml + To show current config path: + cheat -C + To view the tar cheatsheet: cheat tar diff --git a/cmd/cheat/main.go b/cmd/cheat/main.go index 608cf41..29b5c1a 100755 --- a/cmd/cheat/main.go +++ b/cmd/cheat/main.go @@ -104,6 +104,12 @@ func main() { os.Exit(1) } + // print config path + if opts["--config"] != nil && opts["--config"] == true { + fmt.Fprintf(os.Stdout, "config: %s\n", confpath) + os.Exit(0) + } + // filter the cheatpaths if --path was passed if opts["--path"] != nil { conf.Cheatpaths, err = cheatpath.Filter( diff --git a/cmd/cheat/str_usage.go b/cmd/cheat/str_usage.go index 0d69c57..2a8acd4 100644 --- a/cmd/cheat/str_usage.go +++ b/cmd/cheat/str_usage.go @@ -14,6 +14,7 @@ Options: --init Write a default config file to stdout -a --all Search among all cheatpaths -c --colorize Colorize output + -C --config Print config path -d --directories List cheatsheet directories -e --edit= Edit -l --list List cheatsheets @@ -30,6 +31,9 @@ Examples: To initialize a config file: mkdir -p ~/.config/cheat && cheat --init > ~/.config/cheat/conf.yml + To show current config path: + cheat -C + To view the tar cheatsheet: cheat tar diff --git a/doc/cheat.1 b/doc/cheat.1 index 8a99c54..3ff4ae7 100644 --- a/doc/cheat.1 +++ b/doc/cheat.1 @@ -1,182 +1,139 @@ -.\" Automatically generated by Pandoc 2.2.1 +.\" Automatically generated by Pandoc 2.14.2 .\" .TH "CHEAT" "1" "" "" "General Commands Manual" .hy .SH NAME .PP -\f[B]cheat\f[] \[em] create and view command\-line cheatsheets +\f[B]cheat\f[R] \[em] create and view command-line cheatsheets .SH SYNOPSIS .PP -\f[B]cheat\f[] [options] [\f[I]CHEATSHEET\f[]] +\f[B]cheat\f[R] [options] [\f[I]CHEATSHEET\f[R]] .SH DESCRIPTION .PP -\f[B]cheat\f[] allows you to create and view interactive cheatsheets on -the command\-line. +\f[B]cheat\f[R] allows you to create and view interactive cheatsheets on +the command-line. It was designed to help remind *nix system administrators of options for commands that they use frequently, but not frequently enough to remember. .SH OPTIONS .TP -.B \[en]init +\[en]init Print a config file to stdout. -.RS -.RE .TP -.B \-c, \[en]colorize +-c, \[en]colorize Colorize output. -.RS -.RE .TP -.B \-d, \[en]directories +-C, \[en]config +Print config path +.TP +-d, \[en]directories List cheatsheet directories. -.RS -.RE .TP -.B \-e, \[en]edit=\f[I]CHEATSHEET\f[] -Open \f[I]CHEATSHEET\f[] for editing. -.RS -.RE +-e, \[en]edit=\f[I]CHEATSHEET\f[R] +Open \f[I]CHEATSHEET\f[R] for editing. .TP -.B \-l, \[en]list +-l, \[en]list List available cheatsheets. -.RS -.RE .TP -.B \-p, \[en]path=\f[I]PATH\f[] -Filter only to sheets found on path \f[I]PATH\f[]. -.RS -.RE +-p, \[en]path=\f[I]PATH\f[R] +Filter only to sheets found on path \f[I]PATH\f[R]. .TP -.B \-r, \[en]regex -Treat search \f[I]PHRASE\f[] as a regular expression. -.RS -.RE +-r, \[en]regex +Treat search \f[I]PHRASE\f[R] as a regular expression. .TP -.B \-s, \[en]search=\f[I]PHRASE\f[] -Search cheatsheets for \f[I]PHRASE\f[]. -.RS -.RE +-s, \[en]search=\f[I]PHRASE\f[R] +Search cheatsheets for \f[I]PHRASE\f[R]. .TP -.B \-t, \[en]tag=\f[I]TAG\f[] -Filter only to sheets tagged with \f[I]TAG\f[]. -.RS -.RE +-t, \[en]tag=\f[I]TAG\f[R] +Filter only to sheets tagged with \f[I]TAG\f[R]. .TP -.B \-T, \[en]tags +-T, \[en]tags List all tags in use. -.RS -.RE .TP -.B \-v, \[en]version +-v, \[en]version Print the version number. -.RS -.RE .TP -.B \[en]rm=\f[I]CHEATSHEET\f[] -Remove (deletes) \f[I]CHEATSHEET\f[]. -.RS -.RE +\[en]rm=\f[I]CHEATSHEET\f[R] +Remove (deletes) \f[I]CHEATSHEET\f[R]. .SH EXAMPLES .TP -.B To view the foo cheatsheet: -cheat \f[I]foo\f[] -.RS -.RE +To view the foo cheatsheet: +cheat \f[I]foo\f[R] .TP -.B To edit (or create) the foo cheatsheet: -cheat \-e \f[I]foo\f[] -.RS -.RE +To edit (or create) the foo cheatsheet: +cheat -e \f[I]foo\f[R] .TP -.B To edit (or create) the foo/bar cheatsheet on the `work' cheatpath: -cheat \-p \f[I]work\f[] \-e \f[I]foo/bar\f[] -.RS -.RE +To edit (or create) the foo/bar cheatsheet on the `work' cheatpath: +cheat -p \f[I]work\f[R] -e \f[I]foo/bar\f[R] .TP -.B To view all cheatsheet directories: -cheat \-d -.RS -.RE +To view all cheatsheet directories: +cheat -d .TP -.B To list all available cheatsheets: -cheat \-l -.RS -.RE +To list all available cheatsheets: +cheat -l .TP -.B To list all cheatsheets whose titles match `apt': -cheat \-l \f[I]apt\f[] -.RS -.RE +To list all cheatsheets whose titles match `apt': +cheat -l \f[I]apt\f[R] .TP -.B To list all tags in use: -cheat \-T -.RS -.RE +To list all tags in use: +cheat -T .TP -.B To list available cheatsheets that are tagged as `personal': -cheat \-l \-t \f[I]personal\f[] -.RS -.RE +To list available cheatsheets that are tagged as `personal': +cheat -l -t \f[I]personal\f[R] .TP -.B To search for `ssh' among all cheatsheets, and colorize matches: -cheat \-c \-s \f[I]ssh\f[] -.RS -.RE +To search for `ssh' among all cheatsheets, and colorize matches: +cheat -c -s \f[I]ssh\f[R] .TP -.B To search (by regex) for cheatsheets that contain an IP address: -cheat \-c \-r \-s \f[I]`(?:[0\-9]{1,3}.){3}[0\-9]{1,3}'\f[] -.RS -.RE +To search (by regex) for cheatsheets that contain an IP address: +cheat -c -r -s \f[I]`(?:[0-9]{1,3}.){3}[0-9]{1,3}'\f[R] .TP -.B To remove (delete) the foo/bar cheatsheet: -cheat \[en]rm \f[I]foo/bar\f[] -.RS -.RE +To remove (delete) the foo/bar cheatsheet: +cheat \[en]rm \f[I]foo/bar\f[R] .SH FILES .SS Configuration .PP -\f[B]cheat\f[] is configured via a YAML file that is conventionally -named \f[I]conf.yaml\f[]. -\f[B]cheat\f[] will search for \f[I]conf.yaml\f[] in varying locations, -depending upon your platform: +\f[B]cheat\f[R] is configured via a YAML file that is conventionally +named \f[I]conf.yaml\f[R]. +\f[B]cheat\f[R] will search for \f[I]conf.yaml\f[R] in varying +locations, depending upon your platform: .SS Linux, OSX, and other Unixes .IP "1." 3 -\f[B]CHEAT_CONFIG_PATH\f[] +\f[B]CHEAT_CONFIG_PATH\f[R] .IP "2." 3 -\f[B]XDG_CONFIG_HOME\f[]/cheat/conf.yaml +\f[B]XDG_CONFIG_HOME\f[R]/cheat/conf.yaml .IP "3." 3 -\f[B]$HOME\f[]/.config/cheat/conf.yml +\f[B]$HOME\f[R]/.config/cheat/conf.yml .IP "4." 3 -\f[B]$HOME\f[]/.cheat/conf.yml +\f[B]$HOME\f[R]/.cheat/conf.yml .SS Windows .IP "1." 3 -\f[B]CHEAT_CONFIG_PATH\f[] +\f[B]CHEAT_CONFIG_PATH\f[R] .IP "2." 3 -\f[B]APPDATA\f[]/cheat/conf.yml +\f[B]APPDATA\f[R]/cheat/conf.yml .IP "3." 3 -\f[B]PROGRAMDATA\f[]/cheat/conf.yml +\f[B]PROGRAMDATA\f[R]/cheat/conf.yml .PP -\f[B]cheat\f[] will search in the order specified above. -The first \f[I]conf.yaml\f[] encountered will be respected. +\f[B]cheat\f[R] will search in the order specified above. +The first \f[I]conf.yaml\f[R] encountered will be respected. .PP -If \f[B]cheat\f[] cannot locate a config file, it will ask if you'd like -to generate one automatically. +If \f[B]cheat\f[R] cannot locate a config file, it will ask if you\[cq]d +like to generate one automatically. Alternatively, you may also generate a config file manually by running -\f[B]cheat \[en]init\f[] and saving its output to the appropriate +\f[B]cheat \[en]init\f[R] and saving its output to the appropriate location for your platform. .SS Cheatpaths .PP -\f[B]cheat\f[] reads its cheatsheets from \[lq]cheatpaths\[rq], which +\f[B]cheat\f[R] reads its cheatsheets from \[lq]cheatpaths\[rq], which are the directories in which cheatsheets are stored. -Cheatpaths may be configured in \f[I]conf.yaml\f[], and viewed via -\f[B]cheat \-d\f[]. +Cheatpaths may be configured in \f[I]conf.yaml\f[R], and viewed via +\f[B]cheat -d\f[R]. .PP For detailed instructions on how to configure cheatpaths, please refer to the comments in conf.yml. .SS Autocompletion .PP -Autocompletion scripts for \f[B]bash\f[], \f[B]zsh\f[], and -\f[B]fish\f[] are available for download: +Autocompletion scripts for \f[B]bash\f[R], \f[B]zsh\f[R], and +\f[B]fish\f[R] are available for download: .IP \[bu] 2 .IP \[bu] 2 @@ -184,25 +141,22 @@ Autocompletion scripts for \f[B]bash\f[], \f[B]zsh\f[], and .IP \[bu] 2 .PP -The \f[B]bash\f[] and \f[B]zsh\f[] scripts provide optional integration -with \f[B]fzf\f[], if the latter is available on your \f[B]PATH\f[]. +The \f[B]bash\f[R] and \f[B]zsh\f[R] scripts provide optional +integration with \f[B]fzf\f[R], if the latter is available on your +\f[B]PATH\f[R]. .PP The installation process will vary per system and shell configuration, and thus will not be discussed here. .SH ENVIRONMENT .TP -.B \f[B]CHEAT_CONFIG_PATH\f[] +\f[B]CHEAT_CONFIG_PATH\f[R] The path at which the config file is available. -If \f[B]CHEAT_CONFIG_PATH\f[] is set, all other config paths will be +If \f[B]CHEAT_CONFIG_PATH\f[R] is set, all other config paths will be ignored. -.RS -.RE .TP -.B \f[B]CHEAT_USE_FZF\f[] +\f[B]CHEAT_USE_FZF\f[R] If set, autocompletion scripts will attempt to integrate with -\f[B]fzf\f[]. -.RS -.RE +\f[B]fzf\f[R]. .SH RETURN VALUES .IP "0." 3 Successful termination @@ -218,4 +172,4 @@ See GitHub issues: Christopher Allen Lane .SH SEE ALSO .PP -\f[B]fzf(1)\f[] +\f[B]fzf(1)\f[R] diff --git a/doc/cheat.1.md b/doc/cheat.1.md index eb9c1ae..f523c31 100644 --- a/doc/cheat.1.md +++ b/doc/cheat.1.md @@ -26,6 +26,9 @@ OPTIONS -c, --colorize : Colorize output. +-C, --config +: Print config path + -d, --directories : List cheatsheet directories. diff --git a/internal/cheatpath/cheatpath.go b/internal/cheatpath/cheatpath.go index 9b70a42..e369a99 100644 --- a/internal/cheatpath/cheatpath.go +++ b/internal/cheatpath/cheatpath.go @@ -4,6 +4,7 @@ package cheatpath type Cheatpath struct { Name string `yaml:"name"` Path string `yaml:"path"` + Source string `yaml:"source"` ReadOnly bool `yaml:"readonly"` Tags []string `yaml:"tags"` } diff --git a/scripts/cheat.bash b/scripts/cheat.bash index 6ef1437..9267752 100755 --- a/scripts/cheat.bash +++ b/scripts/cheat.bash @@ -38,6 +38,7 @@ _cheat() # implement completions case $prev in --colorize|-c|\ + --config|-C|\ --directories|-d|\ --init|\ --regex|-r|\ diff --git a/scripts/git/cheatsheets b/scripts/git/cheatsheets index 1e649a5..b5c0493 100755 --- a/scripts/git/cheatsheets +++ b/scripts/git/cheatsheets @@ -1,15 +1,15 @@ #!/bin/sh -e init() { - readarray d < <(yq -c '.cheatpaths[]' ~/.cheat.yml) + readarray d < <(yq -c '.cheatpaths[]' "$(cheat -C | awk '{print $2}')") for c in "${d[@]}"; do name="$(echo ${c} | yq -r '.name')" path="$(echo ${c} | yq -r '.path')" + path="${path/#\~/$HOME}" src="$( echo ${c} | yq -r '.source')" - echo "Init $name" - [ ! -d "$path" ] && git clone $src $path || : + [ ! -d "$path" ] && (echo "Init $name"; git clone $src $path) || : done echo "Finished init" }