.TH ck 1 "2018-10-27" Linux "ck - the config keeper" .SH NAME ck \- manage configuration across the system .SH SYNOPSIS .SY ck .OP \-v\fR|\fB\-\-verbose .OP \-c\fR|\fB\-\-config DIR .IR action \ [.\|.\|.] .YS .ns .SY ck .OP version\fR|\fB\-\-version .YS \" Init .SY ck .B init .I VERSION_CONTROL_DIR SECRET_DIR .YS \" Add .SY ck .B add .I PROGRAM_NAME CONFIG_PATH .OP \-p .OP \-s .YS \" Delete .SY ck .B delete .I PROGRAM_NAME .RI [ CONFIG_BASENAME ] .YS \" List .SY ck .B list tree .OP \-a .OP \-b .YS .ns .SY ck .B list .BI \-p \ PROGRAM_NAME .OP \-t list-type .OP \-a .OP \-b .YS .ns .SY ck .B list .B programs .OP \-t list-type .OP \-a .OP \-b .YS .ns .SY ck .B list .B paths .OP \-t list-type .OP \-a .OP \-b .YS .ns .SY ck .B list ckconf .YS \" Edit .SY ck .B edit .I PROGRAM_NAME .RI [ CONFIG_BASENAME ] .OP \-\-editor EDITOR .OP \-\-command COMMAND .OP \-s .YS \" Search .SY ck .B search .I SEARCH_TERM .YS \" Restore .SY ck .B restore \-p .I PROGRAM_NAME .YS .ns .SY ck .B restore all .YS \" Help .SY ck .BI help \ action .YS .SH DESCRIPTION .B ck manages configuration files in a Linux system. To that end it provides an .B action based command line interface. .P .B ck needs a database and an rc file to run. It also needs two directories (stored in the rc file), the .I VERSION_CONRTOL_DIR and the .IR SECRET_DIR . This is where the configurations will end up after they are added to .BR ck . The .B init action takes care of them. For more details see the .BR ACTIONS \ and \ FILES sections below. .P In .B ck terms a .I program is an entity that has one or more .I configs attached to it. Each .I program can have exactly one .BI primary \ config \fR. Upon adding a .I config to .BR ck , it is moved to the appropriate directory, and then symbolically linked back to it's original place (\fIln -s\fR). .P In a later time you can sync the .I VERSION_CONTROL_DIR and .IR SECRET_DIR . You can also .B restore the links given these two directories and the corresponding rc file and database. .SH CONFIGURATION .B ck uses .B sqlite to index the configuration files. The .B init action by default creates a directory in witch the .I ckrc and .I ckdb files reside. See the .B FILES section for more details. .P .B ck will first search for the configuration in the folder shown by the .I $CK_CONFIG environment variable. If it is set it will use the .I ckrc and .I ckdb inside this directory. Else it will use .I $XDG_CONFIG_HOME/ck and if that is not set as well it will fall back to .IR $HOME/.ck . .P One can have multiple .B config directories with different configurations each. Using the .BR config \ or \ \-c option one can set the path in which ck will search for .I ckrc and .IR ckdb . Using this will ignore any environment variables. See the .B OPTIONS section for more details. .P .SH OPTIONS Change .B ck behavior using the following options. They must be present before any .B action. .TP .B \-\-verbose\fR, \fB\-v [WIP] .br Currently prints the log. Must be the first argument in order to work. .TP .B \-\-config \fIDIR\fR, \fB\-c \fIDIR Use .BR ckdb \ and \ ckrc residing in .IR DIR . .TP .B \-\-version\fR, \fBversion Print version and license information, and quit. .SH ACTIONS Each .B action has several aliases. The selected .B action must be after the .B OPTIONS if any. All available .B actions can be seen in the .B SYNOPSIS section above. .P Each .B action takes a number of arguments and flags. .SS "INITIALIZE" Create the .B ck database .RI ( ckdb ) and initialize it. Create the ck config file .RI ( ckrc ) and add the directory paths to it. .TP 2 .B USAGE .ns .RS 2 .SY ck .B init .I VERSION_CONTROL_DIR SECRET_DIR .YS .RE .TP 2 .B ALIASES .BR init , \ i , \ \-i .TP 2 .B ARGUMENTS .ns .RS 2 .TP 21 .I VERSION_CONTROL_DIR The directory where .B configs will be stored by default. .B File must exist\fR. .TP 21 .I SECRET_DIR The directory where .B configs will be stored when using the .B \-s flag in .B add\fR. \fBFile must exist\fR. .RE .TP 2 .B EXAMPLES .EX $ ck init /home/ckuser/configs/vc home/ckuser/configs/sec $ ck i configs/vc configs/sec .EE .SS "ADD CONFIG" Add a .B config to the database .RI ( ckdb )\fR. Each .B config belongs to a .BR program . Every \fBprogram\fR can have multiple .B configs under it and one of them can be .BR primary . The .B edit action will open the .B primary config by default. .TP 2 .B USAGE .ns .RS 2 .SY ck .B add .I PROGRAM_NAME CONFIG_PATH .OP \-p .OP \-s .YS .RE .TP 2 .B ALIASES .BR add , \ a , \ \-a .TP 2 .B ARGUMENTS .ns .RS 2 .TP 21 .I PROGRAM_NAME The name of the .B program the .B config belongs at. .TP 21 .I CONFIG_PATH Path to the .BR config . Can be relative. .RE .TP 2 .B FLAGS .ns .RS 2 .TP 21 .B \-s Mark the .B config as secret. It will be stored on the .IR SECRET_DIR . .TP 21 .B \-p Mark the .B config as primary. The .B edit action will open this by default. .RE .TP 2 .B EXAMPLES .EX # 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 .EE .SS "DELETE CONFIG" Delete a .B config or a .B program from the database .RI ( ckdb )\fR. This will not touch the actual file and link. It is up to the user to handle it. .TP 2 .B USAGE .ns .RS 2 .SY ck .B delete .I PROGRAM_NAME .RI [ CONFIG_BASENAME ] .YS .RE .TP 2 .B ALIASES .BR delete , \ del , \ d , \ \-d .TP 2 .B ARGUMENTS .ns .RS 2 .TP 21 .I PROGRAM_NAME Delete the .B program and all it's .BR configs . .TP 21 .I CONFIG_BASENAME The basename of the .B config file to be deleted. It has to follow the .IR PROGRAM_NAME . .RE .TP 2 .B EXAMPLES .EX $ ck delete emacs $ ck del emacs init.el .EE .SS "LIST VALUES" List programs, configs and ck configuration values. .TP 2 .B USAGE .ns .RS 2 .SY ck .B list tree .OP \-a .OP \-b .YS .ns .SY ck .B list .BI \-p \ PROGRAM_NAME .OP \-t list-type .OP \-a .OP \-b .YS .ns .SY ck .B list .B programs .OP \-t list-type .OP \-a .OP \-b .YS .ns .SY ck .B list .B paths .OP \-t list-type .OP \-a .OP \-b .YS .ns .SY ck .B list ckconf .YS .RE .TP 2 .B ALIASES .BR list , \ ls , \ l , \ -ls , \ \-l .TP 2 .B ARGUMENTS .ns .RS 2 .TP 21 .B tree List .B programs with their .B configs in a tree like structure. .TP 21 .B paths List all the .B config paths .B ck keeps track of. .TP 21 .B programs List all the .B programs ck keeps track of. .TP 21 .BI \-c \ PROGRAM_NAME List all the .B configs of .IR PROGRAM_NAME . .TP 21 .BI ckconf List the .B ck configuration values, like the .IR VERSION_CONTROL_DIR \ and \ SECRET_DIR . .RE .TP 2 .B FLAGS .ns .RS 2 .TP 21 .BI \-t \ type Set the type of the .BR list . Can be either .B plain (the default) a simple list, .B python to print it like a python array or .B lisp to print it like a lisp list. .TP 21 .B \-a Show attributes to the listing (when applicable). These are .B [s] for .BR secret , .B [p] for .B primary and .B [root] if the file is owned by the root user. .TP 21 .B \-b Print the .B config basename instead of the full path. .RE .TP 2 .B EXAMPLES .EX $ ck list tree -a $ ck list paths -t lisp $ ck list programs -t python $ ck list -p emacs .EE .SS "EDIT CONFIGS" Edit a .B config stored in .B ck with the .IR $EDITOR . .B Edit will open the .B primary config of the .BR program . If there is no .B primary config but the .B program only has one .BR config , .B edit will open that. Whenever there is ambiguity, a list of possible .B configs will be shown. .TP 2 .B USAGE .ns .RS 2 .SY ck .B edit .I PROGRAM_NAME .RI [ CONFIG_BASENAME ] .OP \-\-editor EDITOR .OP \-\-command COMMAND .OP \-s .YS .RE .TP 2 .B ALIASES .BR edit , \ e , \ \-e .TP 2 .B ARGUMENTS .ns .RS 2 .TP 21 .I PROGRAM_NAME The name of the .B program to be edited. If the .B program has only one .B config or you want to edit the .B primary one, no further action is required. .TP 21 .I CONFIG_BASENAME The basename of the .B config to be edited. This has to follow the .I PROGRAM_NAME name. It is only needed when editing a .B config other than the .B primary one. .RE .TP 2 .B FLAGS .ns .RS 2 .TP 21 .BI \-\-editor \ EDITOR Use .I EDITOR to edit the config. .TP 21 .BI \-\-command \ COMMAND The .I COMMAND string will be used instead of an editor. .TP 21 .B \-\-s Prepend the whole command with sudo, should you want to edit a .B config belonging to root. .RE .TP 2 .B EXAMPLES .EX $ ck edit emacs $ ck edit emacs --command cat $ ck edit emacs --command "emacsclient -a \"\" -t" $ ck e tmux .tmux.conf $ ck e tmux .tmux.conf --editor vi $ ck e ssh -s .EE .SS "SEARCH CONFIGS" Grep through the configs. This .B action is equivalent to this: .br .RS 2 $ ck ls paths | xargs grep -H -n "search term" .RE .br Thus for more advanced search through the .B configs one can use other programs and replace grep in the command above. .TP 2 .B USAGE .ns .RS 2 .SY ck .B search .I SEARCH_TERM .YS .RE .TP 2 .B ALIASES .BR search , \ grep , \ s , \ \-s .TP 2 .B ARGUMENTS .ns .RS 2 .TP 21 .I SEARCH_TERM 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). .RE .TP 2 .B EXAMPLES .EX $ ck search "search term" $ ck search "\\(require" .EE .SS "RESTORE CONFIGS" Given a working .B ck instance (\fIckdb \fR+ \fIckrc\fR + directories in \fIckrc\fR with .BR configs ), \ restore shall recreate the links from the .B config directories in .I ckrc back to their corresponding position when added to .BR ck . It is useful for copying .B configs to a new linux installation or .B restoring deleted links. It can either .B restore a specific .B program or all of them. .P .BR NOTE : If .B ck tracks .B configs that are owned by root, simply running .br .RS 2 $ ck restore \.\.\. .RE .br will fail due to permissions. To remedy this, .B ck will alter the .BR owner \ and \ group of a link to match the one in the original .B config file. Thus, running .RS 2 $ sudo ck -c /home/ckuser/.ck restore \.\.\. .RE will .B restore the root user's links as it should and the user links will have the user as the owner instead of the root. .P .B ck checks that the .B configs exist and that the location for the link is available before making any links. However, in the even that .B symlink 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. .TP 2 .B USAGE .ns .RS 2 .SY ck .B restore \-p .I PROGRAM_NAME .YS .ns .SY ck .B restore all .YS .RE .TP 2 .B ALIASES .BR restore , \ r , \ \-r .TP 2 .B ARGUMENTS .ns .RS 2 .TP 21 .I PROGRAM_NAME The name of the .B program to be restored. .TP 21 .B all Restore all .B programs ck keeps track of. .RE .TP 2 .B EXAMPLES .EX $ ck restore all $ ck restore -p emacs .EE .SS "GET HELP" Get help for any given .B action from the command line. .TP 2 .B USAGE .ns .RS 2 .SY ck .BI help \ action .YS .RE .TP 2 .B ALIASES .BR help , \ h , \ \-\-help , \ -h , \ \-? .TP 2 .B ARGUMENTS .ns .RS 2 .TP 21 .I action Any .B action alias you wish to get help for. .RE .TP 2 .B EXAMPLES .EX $ ck help add $ ck h d $ ck --help ls .EE .SH EXIT STATUS .B ck shall return 0 if the action was completed without an error, -1 otherwise .SH FILES By default .B ck will store it's files in .I $CK_CONFIG > .I $XDG_CONFIG_HOME/ck > .IR $HOME/.ck . Using the .BR \-c | \-\-config one can change this. .SS "ck generated files" .TP .I ~/.ck/ckrc Store the configuration values (\fIVERSION_CONTROL_DIR\fR and \fISECRET_DIR\fR). .TP .I ~/.ck/ckdb SQLite3 database. .SS "User files" .TP .I VERSION_CONTROL_DIR This is where the configuration files will end up by default. It's value is set with the .B init action, but can be changed by editing .IR ckrc . .TP .I SECRET_DIR This is where the configuration files will end up when adding them with the .B -s flag. It's value is set with the .B init action, but can be changed by editing .IR ckrc . .SH BUILD VALUES .BR compiler : @CMAKE_C_COMPILER@ .br .BR flags : @CMAKE_C_FLAGS@ .SH VERSION ck version @ck_MAJOR_VERSION@.@ck_MINOR_VERSION@.@ck_PATCH_VERSION@ .SH AUTHOR gramanas