<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2018-11-20 Tue 20:21 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>‎</title>
<meta name="generator" content="Org mode" />
<style type="text/css">
<!--/*--><![CDATA[/*><!--*/
.title { text-align: center;
margin-bottom: .2em; }
.subtitle { text-align: center;
font-size: medium;
font-weight: bold;
margin-top:0; }
.todo { font-family: monospace; color: red; }
.done { font-family: monospace; color: green; }
.priority { font-family: monospace; color: orange; }
.tag { background-color: #eee; font-family: monospace;
padding: 2px; font-size: 80%; font-weight: normal; }
.timestamp { color: #bebebe; }
.timestamp-kwd { color: #5f9ea0; }
.org-right { margin-left: auto; margin-right: 0px; text-align: right; }
.org-left { margin-left: 0px; margin-right: auto; text-align: left; }
.org-center { margin-left: auto; margin-right: auto; text-align: center; }
.underline { text-decoration: underline; }
#postamble p, #preamble p { font-size: 90%; margin: .2em; }
p.verse { margin-left: 3%; }
pre {
border: 1px solid #ccc;
box-shadow: 3px 3px 3px #eee;
padding: 8pt;
font-family: monospace;
overflow: auto;
margin: 1.2em;
}
pre.src {
position: relative;
overflow: visible;
padding-top: 1.2em;
}
pre.src:before {
display: none;
position: absolute;
background-color: white;
top: -10px;
right: 10px;
padding: 3px;
border: 1px solid black;
}
pre.src:hover:before { display: inline;}
/* Languages per Org manual */
pre.src-asymptote:before { content: 'Asymptote'; }
pre.src-awk:before { content: 'Awk'; }
pre.src-C:before { content: 'C'; }
/* pre.src-C++ doesn't work in CSS */
pre.src-clojure:before { content: 'Clojure'; }
pre.src-css:before { content: 'CSS'; }
pre.src-D:before { content: 'D'; }
pre.src-ditaa:before { content: 'ditaa'; }
pre.src-dot:before { content: 'Graphviz'; }
pre.src-calc:before { content: 'Emacs Calc'; }
pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
pre.src-fortran:before { content: 'Fortran'; }
pre.src-gnuplot:before { content: 'gnuplot'; }
pre.src-haskell:before { content: 'Haskell'; }
pre.src-hledger:before { content: 'hledger'; }
pre.src-java:before { content: 'Java'; }
pre.src-js:before { content: 'Javascript'; }
pre.src-latex:before { content: 'LaTeX'; }
pre.src-ledger:before { content: 'Ledger'; }
pre.src-lisp:before { content: 'Lisp'; }
pre.src-lilypond:before { content: 'Lilypond'; }
pre.src-lua:before { content: 'Lua'; }
pre.src-matlab:before { content: 'MATLAB'; }
pre.src-mscgen:before { content: 'Mscgen'; }
pre.src-ocaml:before { content: 'Objective Caml'; }
pre.src-octave:before { content: 'Octave'; }
pre.src-org:before { content: 'Org mode'; }
pre.src-oz:before { content: 'OZ'; }
pre.src-plantuml:before { content: 'Plantuml'; }
pre.src-processing:before { content: 'Processing.js'; }
pre.src-python:before { content: 'Python'; }
pre.src-R:before { content: 'R'; }
pre.src-ruby:before { content: 'Ruby'; }
pre.src-sass:before { content: 'Sass'; }
pre.src-scheme:before { content: 'Scheme'; }
pre.src-screen:before { content: 'Gnu Screen'; }
pre.src-sed:before { content: 'Sed'; }
pre.src-sh:before { content: 'shell'; }
pre.src-sql:before { content: 'SQL'; }
pre.src-sqlite:before { content: 'SQLite'; }
/* additional languages in org.el's org-babel-load-languages alist */
pre.src-forth:before { content: 'Forth'; }
pre.src-io:before { content: 'IO'; }
pre.src-J:before { content: 'J'; }
pre.src-makefile:before { content: 'Makefile'; }
pre.src-maxima:before { content: 'Maxima'; }
pre.src-perl:before { content: 'Perl'; }
pre.src-picolisp:before { content: 'Pico Lisp'; }
pre.src-scala:before { content: 'Scala'; }
pre.src-shell:before { content: 'Shell Script'; }
pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
/* additional language identifiers per "defun org-babel-execute"
in ob-*.el */
pre.src-cpp:before { content: 'C++'; }
pre.src-abc:before { content: 'ABC'; }
pre.src-coq:before { content: 'Coq'; }
pre.src-groovy:before { content: 'Groovy'; }
/* additional language identifiers from org-babel-shell-names in
ob-shell.el: ob-shell is the only babel language using a lambda to put
the execution function name together. */
pre.src-bash:before { content: 'bash'; }
pre.src-csh:before { content: 'csh'; }
pre.src-ash:before { content: 'ash'; }
pre.src-dash:before { content: 'dash'; }
pre.src-ksh:before { content: 'ksh'; }
pre.src-mksh:before { content: 'mksh'; }
pre.src-posh:before { content: 'posh'; }
/* Additional Emacs modes also supported by the LaTeX listings package */
pre.src-ada:before { content: 'Ada'; }
pre.src-asm:before { content: 'Assembler'; }
pre.src-caml:before { content: 'Caml'; }
pre.src-delphi:before { content: 'Delphi'; }
pre.src-html:before { content: 'HTML'; }
pre.src-idl:before { content: 'IDL'; }
pre.src-mercury:before { content: 'Mercury'; }
pre.src-metapost:before { content: 'MetaPost'; }
pre.src-modula-2:before { content: 'Modula-2'; }
pre.src-pascal:before { content: 'Pascal'; }
pre.src-ps:before { content: 'PostScript'; }
pre.src-prolog:before { content: 'Prolog'; }
pre.src-simula:before { content: 'Simula'; }
pre.src-tcl:before { content: 'tcl'; }
pre.src-tex:before { content: 'TeX'; }
pre.src-plain-tex:before { content: 'Plain TeX'; }
pre.src-verilog:before { content: 'Verilog'; }
pre.src-vhdl:before { content: 'VHDL'; }
pre.src-xml:before { content: 'XML'; }
pre.src-nxml:before { content: 'XML'; }
/* add a generic configuration mode; LaTeX export needs an additional
(add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
pre.src-conf:before { content: 'Configuration File'; }
table { border-collapse:collapse; }
caption.t-above { caption-side: top; }
caption.t-bottom { caption-side: bottom; }
td, th { vertical-align:top; }
th.org-right { text-align: center; }
th.org-left { text-align: center; }
th.org-center { text-align: center; }
td.org-right { text-align: right; }
td.org-left { text-align: left; }
td.org-center { text-align: center; }
dt { font-weight: bold; }
.footpara { display: inline; }
.footdef { margin-bottom: 1em; }
.figure { padding: 1em; }
.figure p { text-align: center; }
.inlinetask {
padding: 10px;
border: 2px solid gray;
margin: 10px;
background: #ffffcc;
}
#org-div-home-and-up
{ text-align: right; font-size: 70%; white-space: nowrap; }
textarea { overflow-x: auto; }
.linenr { font-size: smaller }
.code-highlighted { background-color: #ffff00; }
.org-info-js_info-navigation { border-style: none; }
#org-info-js_console-label
{ font-size: 10px; font-weight: bold; white-space: nowrap; }
.org-info-js_search-highlight
{ background-color: #ffff00; color: #000000; font-weight: bold; }
.org-svg { width: 90%; }
/*]]>*/-->
</style>
<script type="text/javascript">
/*
@licstart The following is the entire license notice for the
JavaScript code in this tag.
Copyright (C) 2012-2018 Free Software Foundation, Inc.
The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version. The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU GPL for more details.
As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.
@licend The above is the entire license notice
for the JavaScript code in this tag.
*/
<!--/*--><![CDATA[/*><!--*/
function CodeHighlightOn(elem, id)
{
var target = document.getElementById(id);
if(null != target) {
elem.cacheClassElem = elem.className;
elem.cacheClassTarget = target.className;
target.className = "code-highlighted";
elem.className = "code-highlighted";
}
}
function CodeHighlightOff(elem, id)
{
var target = document.getElementById(id);
if(elem.cacheClassElem)
elem.className = elem.cacheClassElem;
if(elem.cacheClassTarget)
target.className = elem.cacheClassTarget;
}
/*]]>*///-->
</script>
</head>
<body>
<div id="content">
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org0e0ea28">ck</a>
<ul>
<li><a href="#org75bd278">Technicalities</a></li>
<li><a href="#org7b74163">Download</a></li>
</ul>
</li>
<li><a href="#build-instructions">build it</a>
<ul>
<li><a href="#org7418c21">requirements</a></li>
<li><a href="#org8552dd5">make && install</a></li>
</ul>
</li>
<li><a href="#org5c96039">for devs</a>
<ul>
<li><a href="#org82929b2">CMake options</a></li>
<li><a href="#org727ad65">compiler</a></li>
<li><a href="#org64d45ce">tests</a>
<ul>
<li><a href="#org7eef031">run tests</a></li>
<li><a href="#org00a6b39">test suite</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#orge40edff">ck configuration</a></li>
<li><a href="#usage">Usage</a>
<ul>
<li><a href="#org498e586">Initialize</a></li>
<li><a href="#orged99083">Add configs</a></li>
<li><a href="#orge5ed33e">Using the ck actions</a></li>
<li><a href="#org188208d">Copying configs to a different linux system</a></li>
</ul>
</li>
<li><a href="#manpage">manpage</a></li>
</ul>
</div>
</div>
<p align="center"><img src="res/logo.png"></p>
<div id="outline-container-org0e0ea28" class="outline-2">
<h2 id="org0e0ea28">ck</h2>
<div class="outline-text-2" id="text-org0e0ea28">
<p>
<b>The Config Keeper</b>
</p>
<p>
Have you ever wondered:
</p>
<blockquote>
<p>
"Jeez Luise, how can I manage all my configs across my desktop and server?"
</p>
<p>
– You
</p>
</blockquote>
<p>
or maybe:
</p>
<blockquote>
<p>
"How can I possibly keep all my configs in sync across computers?"
</p>
<p>
– You again
</p>
</blockquote>
<p>
<b>ck</b> is the solution you've been looking for all your life.
</p>
<p>
With it you can keep track of all the configs you cherish and love,
and store them neat and tidy in a folder you can later sync using
your favorite sync solution (git, nextcloud, rsync). You can even gift
your precious data to Google and use GDrive (<i><i>not recommended!!</i></i>).
</p>
<p>
After you create your local config db you can list them, edit them
and even search in them, all within the comforting hands of <b>ck</b>, your
faithful companion.
</p>
<p>
You can also use <b>ck</b> to store sensitive configurations (with passwords, etc)
and instruct it to save them in a different folder, so they won't be in the
same place with the normal ones (in the event you want to share your configs
with the rest of us).
</p>
<p>
You can even export all <b>ck</b> data with the <code>export</code> action. This will create a
<code>.tar.gz</code> file.
</p>
</div>
<div id="outline-container-org75bd278" class="outline-3">
<h3 id="org75bd278">Technicalities</h3>
<div class="outline-text-3" id="text-org75bd278">
<p>
Upon adding a config to <b>ck</b>, it moves it to the specified folder and adds a symbolic link
back where it came from (<code>ln -s</code>).
</p>
<p>
Make sure that the target program can read it's configuration from a symlink (the vast
majority should).
</p>
</div>
</div>
<div id="outline-container-org7b74163" class="outline-3">
<h3 id="org7b74163">Download</h3>
<div class="outline-text-3" id="text-org7b74163">
<p>
Go ahead and download <b>ck</b> and give it a try. It comes with a help sub-command
that explains any inquires you might have.
</p>
<p>
Grab the latest zip/tarball from the tag section in the <a href="https://ubuntos.dynu.net/git/ck">repo</a> and proceed to
the <a href="#build-instructions">build</a> section.
</p>
<p>
You can also read the manpage <a href="#manpage">down below</a>.
</p>
</div>
</div>
</div>
<div id="outline-container-org5a78f5e" class="outline-2">
<h2 id="build-instructions"><a id="org5a78f5e"></a>build it</h2>
<div class="outline-text-2" id="text-build-instructions">
</div>
<div id="outline-container-org7418c21" class="outline-3">
<h3 id="org7418c21">requirements</h3>
<div class="outline-text-3" id="text-org7418c21">
<ul class="org-ul">
<li>cmake</li>
<li>sqlite3-dev</li>
<li>build tools (gcc/llvm, make…)</li>
</ul>
</div>
</div>
<div id="outline-container-org8552dd5" class="outline-3">
<h3 id="org8552dd5">make && install</h3>
<div class="outline-text-3" id="text-org8552dd5">
<p>
Use <code>-DCMAKE_INSTALL_PREFIX</code> when running cmake to change the install path.
</p>
<div class="org-src-container">
<pre class="src src-sh"><span style="color: #656565;"># </span><span style="color: #757575;">clone the repo</span>
> cd ~/code; git clone https://gitlab.com/grm-grm/ck
<span style="color: #656565;"># </span><span style="color: #757575;">make a build directory and enter it</span>
> mkdir ~/ck_build; <span style="color: #528fd1;">cd</span> ~/ck_build;
<span style="color: #656565;"># </span><span style="color: #757575;">run cmake</span>
> cmake ~/code/ck
<span style="color: #656565;"># </span><span style="color: #757575;">run make</span>
> make
<span style="color: #656565;"># </span><span style="color: #757575;">install it</span>
> make install
<span style="color: #656565;"># </span><span style="color: #757575;">run ck</span>
> ck
</pre>
</div>
</div>
</div>
</div>
<div id="outline-container-org5c96039" class="outline-2">
<h2 id="org5c96039">for devs</h2>
<div class="outline-text-2" id="text-org5c96039">
<p>
Please be <a href="https://www.gnu.org/philosophy/kind-communication.html">kind</a> to each other.
</p>
</div>
<div id="outline-container-org82929b2" class="outline-3">
<h3 id="org82929b2">CMake options</h3>
<div class="outline-text-3" id="text-org82929b2">
<p>
cmake accepts the following options:
</p>
<div class="org-src-container">
<pre class="src src-cmake"><span style="color: #6aaf50;">option</span>(CK_DEBUG <span style="color: #bdbc61;">"Build with debug symbols, asan and warnings"</span>)
<span style="color: #6aaf50;">option</span>(CK_TESTS <span style="color: #bdbc61;">"Make the tests"</span>)
<span style="color: #6aaf50;">option</span>(CK_SHARED <span style="color: #bdbc61;">"Build with shared lib"</span>)
</pre>
</div>
<p>
To use any one of them append it after the cmake command like so:
</p>
<div class="org-src-container">
<pre class="src src-sh">cmake -DCK_DEBUG=1 -DCK_TESTS=1 ~/code/ck
</pre>
</div>
</div>
</div>
<div id="outline-container-org727ad65" class="outline-3">
<h3 id="org727ad65">compiler</h3>
<div class="outline-text-3" id="text-org727ad65">
<p>
Pick your favorite
</p>
<div class="org-src-container">
<pre class="src src-sh">> export <span style="color: #baba36;">CC</span>=clang
<span style="color: #656565;"># </span><span style="color: #757575;">or</span>
> export <span style="color: #baba36;">CC</span>=gcc
</pre>
</div>
<div class="org-src-container">
<pre class="src src-sh"><span style="color: #656565;"># </span><span style="color: #757575;">clone the repo</span>
> cd ~/code; git clone https://gitlab.com/grm-grm/ck
<span style="color: #656565;"># </span><span style="color: #757575;">make a build directory and enter it</span>
> mkdir ~/ck_build; <span style="color: #528fd1;">cd</span> ~/ck_build;
<span style="color: #656565;"># </span><span style="color: #757575;">run cmake</span>
> cmake -DCK_DEBUG=1 -DCK_TESTS=1 ~/code/ck
<span style="color: #656565;"># </span><span style="color: #757575;">run make</span>
> make
<span style="color: #656565;"># </span><span style="color: #757575;">check ck</span>
> ./test-ck
<span style="color: #656565;"># </span><span style="color: #757575;">run ck</span>
> ./ck
</pre>
</div>
</div>
</div>
<div id="outline-container-org64d45ce" class="outline-3">
<h3 id="org64d45ce">tests</h3>
<div class="outline-text-3" id="text-org64d45ce">
<p>
The testing "suite" is a bash script that runs regression
and unit tests. Regression tests are under the <code>tests/</code> directory
and are bash scripts that test <code>ck</code> functionality. Unit tests reside
under <code>unit/</code> directory and test the code.
</p>
</div>
<div id="outline-container-org7eef031" class="outline-4">
<h4 id="org7eef031">run tests</h4>
<div class="outline-text-4" id="text-org7eef031">
<p>
First make sure you build ck with the <code>-DCK_TESTS=1</code> option. Then
go to the build directory and type:
</p>
<div class="org-src-container">
<pre class="src src-sh">$ ./test-ck
</pre>
</div>
<p>
Or if you want to run a particular regression test use the filter option
</p>
<div class="org-src-container">
<pre class="src src-sh">$ ./test-ck -f add
</pre>
</div>
<p>
This will match any test scrits with <code>add</code> in their name.
</p>
</div>
</div>
<div id="outline-container-org00a6b39" class="outline-4">
<h4 id="org00a6b39">test suite</h4>
<div class="outline-text-4" id="text-org00a6b39">
<div class="org-src-container">
<pre class="src src-sh">$ ./test-ck -h
ck test suite
use without flags to run all tests
flags:
-u, --unit run only the unit tests
-r, --regression run only the regression tests
-f, --filter run regression test matching the argument
-c, --clear remove test files
use if the tests crush unexpectedly
-v, --verbose verbose test output
-h, --help, * print this
</pre>
</div>
</div>
</div>
</div>
</div>
<div id="outline-container-orge40edff" class="outline-2">
<h2 id="orge40edff">ck configuration</h2>
<div class="outline-text-2" id="text-orge40edff">
<p>
See the <a href="#manpage">manpage</a> below.
</p>
</div>
</div>
<div id="outline-container-org3eb4040" class="outline-2">
<h2 id="usage"><a id="org3eb4040"></a>Usage</h2>
<div class="outline-text-2" id="text-usage">
<p>
ck's goal is to assist with the configuration file management.
</p>
<p>
This section is an example usage.
</p>
</div>
<div id="outline-container-org498e586" class="outline-3">
<h3 id="org498e586">Initialize</h3>
<div class="outline-text-3" id="text-org498e586">
<div class="org-src-container">
<pre class="src src-sh"><span style="color: #528fd1;">cd</span> ~
<span style="color: #656565;"># </span><span style="color: #757575;">make the directories for the configs</span>
$ mkdir -p configs/vc configs/sec
<span style="color: #656565;"># </span><span style="color: #757575;">initialize new ck</span>
$ ck init configs/vc configs/sec
</pre>
</div>
</div>
</div>
<div id="outline-container-orged99083" class="outline-3">
<h3 id="orged99083">Add configs</h3>
<div class="outline-text-3" id="text-orged99083">
<div class="org-src-container">
<pre class="src src-sh"><span style="color: #656565;"># </span><span style="color: #757575;">add emacs configs</span>
<span style="color: #656565;">## </span><span style="color: #757575;">primary config</span>
$ ck add emacs .emacs.d/orgconf.org -p
<span style="color: #656565;">## </span><span style="color: #757575;">secret config, with passwords and naughty words</span>
$ ck add emacs .emacs.d/accounts.org -s
<span style="color: #656565;">## </span><span style="color: #757575;">and another one for emacs</span>
$ ck add emacs .emacs.d/init.el
<span style="color: #656565;"># </span><span style="color: #757575;">add tmux config</span>
$ ck add tmux .tmux.conf -p
<span style="color: #656565;"># </span><span style="color: #757575;">add X configs</span>
$ ck add X .xinitrc
$ ck add X .Xresources
<span style="color: #656565;"># </span><span style="color: #757575;">add ssh configs (secret)</span>
$ ck add ssh .ssh/config -s -p
$ ck add ssh .ssh/authorized_keys -s
<span style="color: #656565;"># </span><span style="color: #757575;">When running with sudo, we need to specify the ck config</span>
<span style="color: #656565;"># </span><span style="color: #757575;">location.</span>
$ sudo ck -c /home/ckuser add ssh /etc/ssh/sshd_config -s
</pre>
</div>
</div>
</div>
<div id="outline-container-orge5ed33e" class="outline-3">
<h3 id="orge5ed33e">Using the ck actions</h3>
<div class="outline-text-3" id="text-orge5ed33e">
<div class="org-src-container">
<pre class="src src-sh"><span style="color: #656565;"># </span><span style="color: #757575;">list the configs in a treelike structure with basename only</span>
$ ck list tree -b
<span style="color: #656565;"># </span><span style="color: #757575;">or with the full path & attributes</span>
$ ck list tree -a
<span style="color: #656565;"># </span><span style="color: #757575;">list only the paths in python or lisp like lists</span>
$ ck list paths -t lisp
$ ck list programs -t python -b -a
<span style="color: #656565;"># </span><span style="color: #757575;">list emacs configs</span>
$ ck list -p emacs
<span style="color: #656565;"># </span><span style="color: #757575;">search the configs</span>
$ ck search Hostname
$ ck search <span style="color: #bdbc61;">"search term with spaces"</span>
<span style="color: #656565;"># </span><span style="color: #757575;">escape symbols</span>
$ ck search <span style="color: #bdbc61;">\(</span>
<span style="color: #656565;"># </span><span style="color: #757575;">edit the primary config of emacs wiht $EDITOR</span>
$ ck edit emacs
<span style="color: #656565;"># </span><span style="color: #757575;">or with vi</span>
$ ck e emacs --editor vi
<span style="color: #656565;"># </span><span style="color: #757575;">run the command cat to it</span>
$ ck edit emacs --command cat
<span style="color: #656565;"># </span><span style="color: #757575;">or a complex editor call</span>
$ ck edit emacs --command <span style="color: #bdbc61;">"emacsclient -a \"\" -t"</span>
<span style="color: #656565;"># </span><span style="color: #757575;">edit a non-primary config of ssh</span>
$ ck e emacs init.el
<span style="color: #656565;"># </span><span style="color: #757575;">edit a root config</span>
$ ck e ssh -s
<span style="color: #656565;"># </span><span style="color: #757575;">delete a program with all the configs</span>
$ ck delete emacs
<span style="color: #656565;"># </span><span style="color: #757575;">or a specific config</span>
$ ck del emacs init.el
<span style="color: #656565;"># </span><span style="color: #757575;">restore all links (on a new instalation)</span>
$ ck restore --all
<span style="color: #656565;"># </span><span style="color: #757575;">restore a program's links</span>
$ ck r emacs
<span style="color: #656565;"># </span><span style="color: #757575;">get help for an action</span>
$ ck h add
$ ck --help e
</pre>
</div>
</div>
</div>
<div id="outline-container-org188208d" class="outline-3">
<h3 id="org188208d">Copying configs to a different linux system</h3>
<div class="outline-text-3" id="text-org188208d">
<p>
Using the method described below one can use ck
to copy the configs to a different linux system.
In this example we assume we have the ck instance we created
above and we want to copy some configs to our new VPS.
</p>
<p>
We will also assume that the VPS' username is different
that the one on our desktop (<code>ckuser</code> in our example).
</p>
</div>
<ul class="org-ul">
<li><a id="org47ab060"></a>Start at the desktop by exporting the ck files<br />
<div class="outline-text-5" id="text-org47ab060">
<div class="org-src-container">
<pre class="src src-sh">you@desktop -> ck export
</pre>
</div>
</div>
</li>
<li><a id="org129ddcb"></a>Copy the resulting tar file to the server<br />
<div class="outline-text-5" id="text-org129ddcb">
<div class="org-src-container">
<pre class="src src-sh">you@desktop -> scp ck.tar.gz ckuser@server:/home/ckuser
</pre>
</div>
</div>
</li>
<li><a id="org11d79a3"></a>Now we ssh to the server<br />
<div class="outline-text-5" id="text-org11d79a3">
<div class="org-src-container">
<pre class="src src-sh">you@desktop -> ssh ckuser@server
</pre>
</div>
</div>
</li>
<li><a id="orgf935871"></a>Start by untaring the archive & installing ck<br />
<div class="outline-text-5" id="text-orgf935871">
<div class="org-src-container">
<pre class="src src-sh">ckuser@server -> tar zxf ck.tar.gz
</pre>
</div>
</div>
</li>
<li><a id="org3387d36"></a>Move the <i><i>version_control_dir</i></i> and <i><i>secer_dir</i></i> to where you want them to be<br /></li>
<li><a id="orge754263"></a>Move the <i><i>ckrc</i></i> and <i><i>ckdb</i></i> files where you want ck config home to be<br /></li>
<li><a id="org494b09d"></a>Edit <i><i>ckrc</i></i> and change the <b>home_dir</b> to /home/ckuser<br /></li>
<li><a id="orgb534be5"></a>Also change <i><i>secret_dir</i></i> and <i><i>version_control_dir</i></i> to where you placed them before<br /></li>
<li><a id="org647fa34"></a>Make sure ck will find your config by default by setting the $CK_CONFIG environment variable<br />
<div class="outline-text-5" id="text-org647fa34">
<p>
Edit bashrc to make this permanent.
</p>
<div class="org-src-container">
<pre class="src src-sh">ckuser@server -> export <span style="color: #baba36;">CK_CONFIG</span>=/where/you/have/ckrc/and/ckdb
</pre>
</div>
<p>
Note, you might not have to use this if you use one of the default config locations.
ck will first check $XDG_CONFIG_HOME/ck and then $HOME/.ck so using either one of these will do.
</p>
</div>
</li>
<li><a id="org9fe13ce"></a>Remove any existing conflicting configs<br /></li>
<li><a id="orgf0586c6"></a>Restore your configs<br />
<div class="outline-text-5" id="text-orgf0586c6">
<div class="org-src-container">
<pre class="src src-sh">ckuser@server -> ck restore zsh
ckuser@server -> ck restore emacs
</pre>
</div>
</div>
</li>
</ul>
</div>
</div>
<div id="outline-container-org6964442" class="outline-2">
<h2 id="manpage"><a id="org6964442"></a>manpage</h2>
<div class="outline-text-2" id="text-manpage">
<!-- Creator : groff version 1.22.3 -->
<!-- CreationDate: Tue Nov 20 20:21:23 2018 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>ck</title>
</head>
<body>
<h1 align="center">ck</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#CONFIGURATION">CONFIGURATION</a><br>
<a href="#OPTIONS">OPTIONS</a><br>
<a href="#ACTIONS">ACTIONS</a><br>
<a href="#EXIT STATUS">EXIT STATUS</a><br>
<a href="#FILES">FILES</a><br>
<a href="#BUILD VALUES">BUILD VALUES</a><br>
<a href="#VERSION">VERSION</a><br>
<a href="#AUTHOR">AUTHOR</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">ck −
manage configuration across the system</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p style="margin-top: 1em"><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p style="margin-top: 1em">[<b>−v</b>|<b>−−verbose</b>]
[<b>−c</b>|<b>−−config </b><i>DIR</i>]
<i>action </i>[...]</p> </td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p>[<b>version</b>|<b>−−version</b>]</p></td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>init</b> <i>VERSION_CONTROL_DIR</i>
[<i>SECRET_DIR</i>]</p> </td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>add</b> <i>PROGRAM_NAME CONFIG_PATH</i>
[<b>−p</b>] [<b>−s</b>]</p></td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>delete</b> <i>PROGRAM_NAME</i>
[<i>CONFIG_BASENAME</i>]</p> </td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>list tree</b> [<b>−a</b>] [<b>−b</b>]</p></td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>list −p </b><i>PROGRAM_NAME</i>
[<b>−t </b><i>list-type</i>] [<b>−a</b>]
[<b>−b</b>]</p> </td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>list programs</b>
[<b>−t </b><i>list-type</i>] [<b>−a</b>]
[<b>−b</b>]</p> </td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>list paths</b>
[<b>−t </b><i>list-type</i>] [<b>−a</b>]
[<b>−b</b>]</p> </td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>list ckconf</b></p></td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>edit</b> <i>PROGRAM_NAME</i> [<i>CONFIG_BASENAME</i>]
[<b>−−editor </b><i>EDITOR</i>]
[<b>−−command </b><i>COMMAND</i>]
[<b>−s</b>]</p> </td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>search</b> <i>SEARCH_TERM</i></p></td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>restore</b> <i>PROGRAM_NAME</i></p></td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>restore −−all</b></p></td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>help </b><i>action</i></p></td>
<td width="3%">
</td></tr>
<tr valign="top" align="left">
<td width="11%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>export</b></p></td>
<td width="3%">
</td></tr>
</table>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>ck</b>
manages configuration files in a Linux system. To that end
it provides an <b>action</b> based command line
interface.</p>
<p style="margin-left:11%; margin-top: 1em"><b>ck</b> needs
a database and an rc file to run. It also needs two
directories (stored in the rc file), the
<i>VERSION_CONRTOL_DIR</i> and (optionally) the
<i>SECRET_DIR</i>. This is where the configurations will end
up after they are added to <b>ck</b>. The <b>init</b> action
takes care of them. For more details see the
<b>ACTIONS </b>and <b>FILES</b> sections
below.</p>
<p style="margin-left:11%; margin-top: 1em">In <b>ck</b>
terms a <i>program</i> is an entity that has one or more
<i>configs</i> attached to it. Each <i>program</i> can have
exactly one <b>primary </b><i>config</i>. Upon adding a
<i>config</i> to <b>ck</b>, it is moved to the appropriate
directory, and then symbolically linked back to it’s
original place (<i>ln -s</i>).</p>
<p style="margin-left:11%; margin-top: 1em">In a later time
you can sync the <i>VERSION_CONTROL_DIR</i> and
<i>SECRET_DIR</i>. You can also <b>restore</b> the links
given these two directories and the corresponding rc file
and database.</p>
<h2>CONFIGURATION
<a name="CONFIGURATION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>ck</b> uses
<b>sqlite</b> to index the configuration files. The <b>init
action</b> by default creates a directory in witch the
<i>ckrc</i> and <i>ckdb</i> files reside. See the
<b>FILES</b> section for more details.</p>
<p style="margin-left:11%; margin-top: 1em"><b>ck</b> will
first search for the configuration in the folder shown by
the <i>$CK_CONFIG</i> environment variable. If it is set it
will use the <i>ckrc</i> and <i>ckdb</i> inside this
directory. Else it will use <i>$XDG_CONFIG_HOME/ck</i> and
if that is not set as well it will fall back to
<i>$HOME/.ck</i>.</p>
<p style="margin-left:11%; margin-top: 1em">One can have
multiple <b>config directories</b> with different
configurations each. Using the
<b>config </b>or <b>−c</b> option one can
set the path in which ck will search for <i>ckrc</i> and
<i>ckdb</i>. Using this will ignore any environment
variables. See the <b>OPTIONS</b> section for more
details.</p>
<h2>OPTIONS
<a name="OPTIONS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Change
<b>ck</b> behavior using the following options. They must be
present before any <b>action. <br>
−−verbose</b>, <b>−v</b></p>
<p style="margin-left:22%;">[WIP] <br>
Currently prints the log. Must be the first argument in
order to work.</p>
<p style="margin-left:11%;"><b>−−config</b>
<i>DIR</i>, <b>−c</b> <i>DIR</i></p>
<p style="margin-left:22%;">Use
<b>ckdb </b>and <b>ckrc</b> residing in
<i>DIR</i>.</p>
<p style="margin-left:11%;"><b>−−version</b>,
<b>version</b></p>
<p style="margin-left:22%;">Print version and license
information, and quit.</p>
<h2>ACTIONS
<a name="ACTIONS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Each
<b>action</b> has several aliases. The selected
<b>action</b> must be after the <b>OPTIONS</b> if any. All
available <b>actions</b> can be seen in the <b>SYNOPSIS</b>
section above.</p>
<p style="margin-left:11%; margin-top: 1em">Each
<b>action</b> takes a number of arguments and flags.</p>
<p style="margin-left:11%; margin-top: 1em"><b>INITIALIZE</b>
<br>
Create the <b>ck</b> database (<i>ckdb</i>) and initialize
it. Create the ck config file (<i>ckrc</i>) and add the
directory paths to it. If <i>SECRET_DIR</i> is not passed,
the <b>−s</b> flag will be disabled in the <b>add</b>
action, and this <b>ck</b> instance won’t be able to
store secret configs. <b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="57%">
<p><b>init</b> <i>VERSION_CONTROL_DIR</i>
[<i>SECRET_DIR</i>]</p> </td>
<td width="25%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>init</b>, <b>i</b>, <b>−i</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="29%">
<p><i>VERSION_CONTROL_DIR</i></p></td>
<td width="3%"></td>
<td width="54%">
<p>The directory where <b>configs</b> will be stored by
default. <b>File must exist</b>.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="29%">
<p><i>SECRET_DIR</i></p></td>
<td width="3%"></td>
<td width="54%">
<p>The directory where <b>configs</b> will be stored when
using the <b>−s</b> flag in <b>add</b>. <b>File must
exist</b>.</p> </td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;">$ ck init /home/ckuser/configs/vc home/ckuser/configs/sec
$ ck i configs/vc configs/sec
$ ck i ~/scripts # no secret dir provided</pre>
<p style="margin-left:11%; margin-top: 1em"><b>ADD
CONFIG</b> <br>
Add a <b>config</b> to the database (<i>ckdb</i>). Each
<b>config</b> belongs to a <b>program</b>. Every
<b>program</b> can have multiple <b>configs</b> under it and
one of them can be <b>primary</b>. The <b>edit action</b>
will open the <b>primary config</b> by default. <b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="59%">
<p><b>add</b> <i>PROGRAM_NAME CONFIG_PATH</i>
[<b>−p</b>] [<b>−s</b>]</p></td>
<td width="23%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>add</b>, <b>a</b>, <b>−a</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="18%">
<p><i>PROGRAM_NAME</i></p></td>
<td width="14%"></td>
<td width="54%">
<p>The name of the <b>program</b> the <b>config</b> belongs
at.</p> </td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="18%">
<p><i>CONFIG_PATH</i></p></td>
<td width="14%"></td>
<td width="54%">
<p>Path to the <b>config</b>. Can be relative.</p></td></tr>
</table>
<p style="margin-left:11%;"><b>FLAGS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>−s</b></p></td>
<td width="29%"></td>
<td width="54%">
<p>Mark the <b>config</b> as secret. It will be stored on
the <i>SECRET_DIR</i>.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>−p</b></p></td>
<td width="29%"></td>
<td width="54%">
<p>Mark the <b>config</b> as primary. The <b>edit
action</b> will open this by default.</p></td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;"># add emacs configs
## primary config
$ ck add emacs ~/.emacs.d/orgconf.org -p
## secret config, with passwords
$ ck add emacs ~/.emacs.d/accounts.org -s
## another one for emacs
$ ck add emacs ~/.emacs.d/init.el</pre>
<p style="margin-left:11%; margin-top: 1em"><b>DELETE
CONFIG</b> <br>
Delete a <b>config</b> or a <b>program</b> from the database
(<i>ckdb</i>). This will not touch the actual file and link.
It is up to the user to handle it. <b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="57%">
<p><b>delete</b> <i>PROGRAM_NAME</i>
[<i>CONFIG_BASENAME</i>]</p> </td>
<td width="25%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>delete</b>, <b>del</b>, <b>d</b>, <b>−d</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><i>PROGRAM_NAME</i></p></td>
<td width="9%"></td>
<td width="54%">
<p>Delete the <b>program</b> and all it’s
<b>configs</b>.</p> </td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><i>CONFIG_BASENAME</i></p></td>
<td width="9%"></td>
<td width="54%">
<p>The basename of the <b>config</b> file to be deleted. It
has to follow the <i>PROGRAM_NAME</i>.</p></td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;">$ ck delete emacs
$ ck del emacs init.el</pre>
<p style="margin-left:11%; margin-top: 1em"><b>LIST
VALUES</b> <br>
List programs, configs and ck configuration values. <b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="70%">
<p><b>list tree</b> [<b>−a</b>] [<b>−b</b>]</p></td>
<td width="12%">
</td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="70%">
<p><b>list −p </b><i>PROGRAM_NAME</i>
[<b>−t </b><i>list-type</i>] [<b>−a</b>]
[<b>−b</b>]</p> </td>
<td width="12%">
</td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="70%">
<p><b>list programs</b>
[<b>−t </b><i>list-type</i>] [<b>−a</b>]
[<b>−b</b>]</p> </td>
<td width="12%">
</td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="70%">
<p><b>list paths</b>
[<b>−t </b><i>list-type</i>] [<b>−a</b>]
[<b>−b</b>]</p> </td>
<td width="12%">
</td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="70%">
<p><b>list ckconf</b></p></td>
<td width="12%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>list</b>, <b>ls</b>, <b>l</b>, <b>-ls</b>, <b>−l</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><b>tree</b></p></td>
<td width="9%"></td>
<td width="54%">
<p>List <b>programs</b> with their <b>configs</b> in a tree
like structure.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><b>paths</b></p></td>
<td width="9%"></td>
<td width="54%">
<p>List all the <b>config</b> paths <b>ck</b> keeps track
of.</p> </td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><b>programs</b></p></td>
<td width="9%"></td>
<td width="54%">
<p>List all the <b>programs ck</b> keeps track of.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><b>−c </b><i>PROGRAM_NAME</i></p></td>
<td width="9%"></td>
<td width="54%">
<p>List all the <b>configs</b> of <i>PROGRAM_NAME</i>.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><b>ckconf</b></p></td>
<td width="9%"></td>
<td width="54%">
<p>List the <b>ck</b> configuration values, like the
<i>VERSION_CONTROL_DIR </i>and <i>SECRET_DIR</i>.</p> </td></tr>
</table>
<p style="margin-left:11%;"><b>FLAGS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="11%">
<p><b>−t </b><i>type</i></p></td>
<td width="21%"></td>
<td width="54%">
<p>Set the type of the <b>list</b>. Can be either
<b>plain</b> (the default) a simple list, <b>python</b> to
print it like a python array or <b>lisp</b> to print it like
a lisp list.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="11%">
<p><b>−a</b></p></td>
<td width="21%"></td>
<td width="54%">
<p>Show attributes to the listing (when applicable). These
are <b>[s]</b> for <b>secret</b>, <b>[p]</b> for
<b>primary</b> and <b>[root]</b> if the file is owned by the
root user.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="11%">
<p><b>−b</b></p></td>
<td width="21%"></td>
<td width="54%">
<p>Print the <b>config</b> basename instead of the full
path.</p> </td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;">$ ck list tree -a
$ ck list paths -t lisp
$ ck list programs -t python
$ ck list -p emacs</pre>
<p style="margin-left:11%; margin-top: 1em"><b>EDIT
CONFIGS</b> <br>
Edit a <b>config</b> stored in <b>ck</b> with the
<i>$EDITOR</i>. <b>Edit</b> will open the <b>primary
config</b> of the <b>program</b>. If there is no <b>primary
config</b> but the <b>program</b> only has one
<b>config</b>, <b>edit</b> will open that. Whenever there is
ambiguity, a list of possible <b>configs</b> will be shown.
<b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="82%">
<p><b>edit</b> <i>PROGRAM_NAME</i> [<i>CONFIG_BASENAME</i>]
[<b>−−editor </b><i>EDITOR</i>]
[<b>−−command </b><i>COMMAND</i>]
[<b>−s</b>]</p> </td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>edit</b>, <b>e</b>, <b>−e</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><i>PROGRAM_NAME</i></p></td>
<td width="9%"></td>
<td width="54%">
<p>The name of the <b>program</b> to be edited. If the
<b>program</b> has only one <b>config</b> or you want to
edit the <b>primary</b> one, no further action is
required.</p> </td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="23%">
<p><i>CONFIG_BASENAME</i></p></td>
<td width="9%"></td>
<td width="54%">
<p>The basename of the <b>config</b> to be edited. This has
to follow the <i>PROGRAM_NAME</i> name. It is only needed
when editing a <b>config</b> other than the <b>primary</b>
one.</p> </td></tr>
</table>
<p style="margin-left:11%;"><b>FLAGS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="26%">
<p><b>−−editor </b><i>EDITOR</i></p></td>
<td width="6%"></td>
<td width="54%">
<p>Use <i>EDITOR</i> to edit the config.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="26%">
<p><b>−−command </b><i>COMMAND</i></p></td>
<td width="6%"></td>
<td width="54%">
<p>The <i>COMMAND</i> string will be used instead of an
editor.</p> </td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="26%">
<p><b>−−s</b></p></td>
<td width="6%"></td>
<td width="54%">
<p>Prepend the whole command with sudo, should you want to
edit a <b>config</b> belonging to root.</p></td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;">$ ck edit emacs
$ ck edit emacs --command cat
$ ck edit emacs --command "emacsclient -a
$ ck e tmux .tmux.conf
$ ck e tmux .tmux.conf --editor vi
$ ck e ssh -s</pre>
<p style="margin-left:11%; margin-top: 1em"><b>SEARCH
CONFIGS</b> <br>
Grep through the configs. This <b>action</b> is equivalent
to this:</p>
<p style="margin-left:14%;">$ ck ls paths | xargs grep -H
-n "search term"</p>
<p style="margin-left:11%;">Thus for more advanced search
through the <b>configs</b> one can use other programs and
replace grep in the command above. <b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="28%">
<p><b>search</b> <i>SEARCH_TERM</i></p></td>
<td width="54%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>search</b>, <b>grep</b>, <b>s</b>, <b>−s</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="17%">
<p><i>SEARCH_TERM</i></p></td>
<td width="15%"></td>
<td width="54%">
<p>The term you wish to search for. If it’s a phrase
enclose it in "". If it’s a special
character you can escape it with \ (backslash).</p></td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;">$ ck search "search term"
$ ck search "\(require"</pre>
<p style="margin-left:11%; margin-top: 1em"><b>RESTORE
CONFIGS</b> <br>
Given a working <b>ck</b> instance (<i>ckdb</i> +
<i>ckrc</i> + directories in <i>ckrc</i> with
<b>configs</b>), <b>restore</b> shall recreate the
links from the <b>config</b> directories in <i>ckrc</i> back
to their corresponding position when added to <b>ck</b>. It
is useful for copying <b>configs</b> to a new linux
installation or <b>restoring</b> deleted links. It can
either <b>restore</b> a specific <b>program</b> or all of
them.</p>
<p style="margin-left:11%; margin-top: 1em"><b>NOTE</b>: If
<b>ck</b> tracks <b>configs</b> that are owned by root,
simply running</p>
<p style="margin-left:14%;">$ ck restore ...</p>
<p style="margin-left:11%;">will fail due to permissions.
To remedy this, <b>ck</b> will alter the
<b>owner </b>and <b>group</b> of a link to match
the one in the original <b>config</b> file. Thus,
running</p>
<p style="margin-left:14%;">$ sudo ck -c /home/ckuser/.ck
restore ...</p>
<p style="margin-left:11%;">will <b>restore</b> the root
user’s links as it should and the user links will have
the user as the owner instead of the root.</p>
<p style="margin-left:11%; margin-top: 1em"><b>ck</b>
checks that the <b>configs</b> exist and that the location
for the link is available before making any links. However,
in the even that <b>symlink</b> fails for some other reason,
the process will stop as is. The user will have to take care
of the already created links, if that’s the case.
<b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="31%">
<p><b>restore</b> <i>PROGRAM_NAME</i></p></td>
<td width="51%">
</td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="31%">
<p><b>restore −−all</b></p></td>
<td width="51%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>restore</b>, <b>r</b>, <b>−r</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="18%">
<p><i>PROGRAM_NAME</i></p></td>
<td width="14%"></td>
<td width="54%">
<p>The name of the <b>program</b> to be restored.</p></td></tr>
<tr valign="top" align="left">
<td width="14%"></td>
<td width="18%">
<p><b>--all</b></p></td>
<td width="14%"></td>
<td width="54%">
<p>Restore all <b>programs ck</b> keeps track of.</p></td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;">$ ck restore --all
$ ck restore emacs</pre>
<p style="margin-left:11%; margin-top: 1em"><b>GET HELP</b>
<br>
Get help for any given <b>action</b> from the command line.
<b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="17%">
<p><b>help </b><i>action</i></p></td>
<td width="65%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>help</b>, <b>h</b>, <b>−−help</b>, <b>-h</b>, <b>−?</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="9%">
<p><i>action</i></p></td>
<td width="23%"></td>
<td width="54%">
<p>Any <b>action alias</b> you wish to get help for.</p></td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;">$ ck help add
$ ck h d
$ ck --help ls</pre>
<p style="margin-left:11%; margin-top: 1em"><b>EXPORT
CONFIGS <br>
ck</b> can export the config files it tracks as well as the
<i>ckrc</i> and <i>ckdb</i> files into a tar.gz archive. The
file is named ck.tar.gz <b><br>
USAGE</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="3%">
<p><b>ck</b></p></td>
<td width="1%"></td>
<td width="10%">
<p><b>export</b></p></td>
<td width="72%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>ALIASES</b></p>
<p style="margin-left:14%;"><b>export</b>, <b>−−export</b>, <b>−ex</b></p>
<p style="margin-left:11%;"><b>ARGUMENTS</b></p>
<table width="100%" border="0" rules="none" frame="void"
cellspacing="0" cellpadding="0">
<tr valign="top" align="left">
<td width="14%"></td>
<td width="8%">
<p>None.</p></td>
<td width="78%">
</td></tr>
</table>
<p style="margin-left:11%;"><b>EXAMPLES</b></p>
<pre style="margin-left:14%;">$ ck export</pre>
<h2>EXIT STATUS
<a name="EXIT STATUS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>ck</b> shall
return 0 if the action was completed without an error, -1
otherwise</p>
<h2>FILES
<a name="FILES"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">By default
<b>ck</b> will store it’s files in <i>$CK_CONFIG</i>
> <i>$XDG_CONFIG_HOME/ck</i> > <i>$HOME/.ck</i>. Using
the <b>−c</b>|<b>−−config</b> one can
change this.</p>
<p style="margin-left:11%; margin-top: 1em"><b>ck generated
files</b> <i><br>
~/.ck/ckrc</i></p>
<p style="margin-left:22%;">Store the configuration values
(<i>VERSION_CONTROL_DIR</i> and <i>SECRET_DIR</i>).</p>
<p style="margin-left:11%;"><i>~/.ck/ckdb</i></p>
<p style="margin-left:22%;">SQLite3 database.</p>
<p style="margin-left:11%; margin-top: 1em"><b>User
files</b> <i><br>
VERSION_CONTROL_DIR</i></p>
<p style="margin-left:22%;">This is where the configuration
files will end up by default. It’s value is set with
the <b>init</b> action, but can be changed by editing
<i>ckrc</i>.</p>
<p style="margin-left:11%;"><i>SECRET_DIR</i></p>
<p style="margin-left:22%;">This is where the configuration
files will end up when adding them with the <b>-s</b> flag.
It’s value is set with the <b>init</b> action, but can
be changed by editing <i>ckrc</i>.</p>
<h2>BUILD VALUES
<a name="BUILD VALUES"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>compiler</b>:
@CMAKE_C_COMPILER@ <b><br>
flags</b>: @CMAKE_C_FLAGS@</p>
<h2>VERSION
<a name="VERSION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">ck version
@ck_MAJOR_VERSION@.@ck_MINOR_VERSION@.@ck_PATCH_VERSION@</p>
<h2>AUTHOR
<a name="AUTHOR"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">gramanas</p>
<hr>
</body>
</html>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="date">Created: 2018-11-20 Tue 20:21</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p>
</div>
</body>
</html>