aboutsummaryrefslogblamecommitdiffstats
path: root/README.org
blob: 3d05056aa262f7a82f78db01fc93cdb4d1ef1e28 (plain) (tree)
1
2
3
4
5
                        
                                                      
    
                   
 











































                                                                                                                
                                                       
 
          


                                
               

             
                                 
 
                  
                                                                           
              




                                                      
                    

            

                
          
      

         
          
                                                                                         


                                    
                                                                





                                                                 








                                           

         
 
              




                                                      
                                             

            

             

          


         



                                                                    
 
             

                                                                 
              
           



              
              






                                                     
                                                            
                                  
         



                                    
              
                   
       
                                                              
 

                                 
              



                                        
                     

                                  
 

              

                     
                                        
                                                    
                                         
                              
                                 

                   
                             
 


                        
 





                                                            

         
                       
              


                                                               
                   
 


                                                    
 

                      
 



                                       
                
 





                                             
 



                                           
 



                                            
 


                          
         
 
         


                     


                                                    
#+OPTIONS: ^:nil num:nil
#+html: <p align="center"><img src="res/logo.png"></p>
* ck
*The Config Keeper*

Have you ever wondered:
#+BEGIN_QUOTE
 "Jeez Luiz, how can I manage all my configs across my desktop and server?"

 -- You
#+END_QUOTE

or maybe:
#+BEGIN_QUOTE
 "How can I possibly keep all my configs in sync across computers?"

 -- You again
#+END_QUOTE

*ck* is the solution you've been looking for all your life.

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 (//not recommended!!//).

After you create your local config db you can list them, edit them
and even search in them, all within the comforting hands of *ck*, your
faithful companion.

You can also use *ck* 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).

** Technicalities
Upon adding a config to *ck*, it moves it to the specified folder and adds a symbolic link
back where it came from (=ln -s=).

Make sure that the target program can read it's configuration from a symlink (the vast
majority should).

** Download
Go ahead and download *ck* and give it a try. It comes with a help sub-command
that explains any inquires you might have.

Grab the latest zip/tarball from the tag section in the [[https://ubuntos.dynu.net/git/ck][repo]] and proceed to
the [[#build-instructions][build]] section.

You can also read the manpage [[#manpage][down below]].

* build it
  :PROPERTIES:
  :CUSTOM_ID: build-instructions
  :END:
** requirements
- cmake
- sqlite3-dev
- build tools (gcc/llvm, make...)

** make && install
Use =-DCMAKE_INSTALL_PREFIX= when running cmake to change the install path.
#+BEGIN_SRC sh
  # clone the repo
  > cd ~/code; git clone https://gitlab.com/grm-grm/ck
  # make a build directory and enter it
  > mkdir ~/ck_build; cd ~/ck_build;
  # run cmake
  > cmake ~/code/ck 
  # run make
  > make
  # install it
  > make install
  # run ck
  > ck
#+END_SRC

* for devs
Please be [[https://www.gnu.org/philosophy/kind-communication.html][kind]] to each other.
** CMake options
cmake accepts the following options:
#+BEGIN_SRC cmake
  option(CK_DEBUG "Build with debug symbols, asan and warnings")
  option(CK_TESTS "Make the tests")
  option(CK_SHARED "Build with shared lib")
#+END_SRC

To use any one of them append it after the cmake command like so:
#+BEGIN_SRC sh
  cmake -DCK_DEBUG=1 -DCK_TESTS=1 ~/code/ck
#+END_SRC

** compiler
Pick your favorite
#+BEGIN_SRC sh
  > export CC=clang
  # or
  > export CC=gcc
#+END_SRC


#+BEGIN_SRC sh
  # clone the repo
  > cd ~/code; git clone https://gitlab.com/grm-grm/ck
  # make a build directory and enter it
  > mkdir ~/ck_build; cd ~/ck_build;
  # run cmake
  > cmake -DCK_DEBUG=1 -DCK_TESTS=1 ~/code/ck
  # run make
  > make
  # check ck
  > ./test-ck
  # run ck
  > ./ck
#+END_SRC

** tests
The testing "suite" is a bash script that runs regression
and unit tests. Regression tests are under the =tests/= directory
and are bash scripts that test =ck= functionality. Unit tests reside
under =unit/= directory and test the code.

*** run tests
First make sure you build ck with the =-DCK_TESTS=1= option. Then
go to the build directory and type:
#+BEGIN_SRC sh
$ ./test-ck
#+END_SRC

*** test suite
#+BEGIN_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
  -c, --clear           remove test files
             		 use if the tests crush unexpectedly
  -h, --help, *         print this
#+END_SRC
* ck configuration
See the [[#manpage][manpage]] below.

* Usage
  :PROPERTIES:
  :CUSTOM_ID: usage
  :END:
ck's goal is to assist with the configuration file management.

This section is an example usage.
** Initialize
#+BEGIN_SRC sh
  cd ~
  # make the directories for the configs
  $ mkdir -p configs/vc configs/sec

  # initialize new ck
  $ ck init configs/vc configs/sec
#+END_SRC

** Add configs
#+BEGIN_SRC sh
  # add emacs configs
  ## primary config
  $ ck add emacs .emacs.d/orgconf.org -p
  ## secret config, with passwords and naughty words
  $ ck add emacs .emacs.d/accounts.org -s
  ## and another one for emacs
  $ ck add emacs .emacs.d/init.el

  # add tmux config
  $ ck add tmux .tmux.conf -p

  # add X configs
  $ ck add X .xinitrc
  $ ck add X .Xresources

  # add ssh configs (secret)
  $ ck add ssh .ssh/config -s -p
  $ ck add ssh .ssh/authorized_keys -s
  # When running with sudo, we need to specify the ck config
  # location.
  $ sudo ck -c /home/ckuser add ssh /etc/ssh/sshd_config -s
#+END_SRC

** Using the ck actions
#+BEGIN_SRC sh
  # list the configs in a treelike structure with basename only
  $ ck list tree -b
  # or with the full path & attributes
  $ ck list tree -a

  # list only the paths in python or lisp like lists
  $ ck list paths -t lisp
  $ ck list programs -t python -b -a

  # list emacs configs
  $ ck list -p emacs

  # search the configs
  $ ck search Hostname
  $ ck search "search term with spaces"
  # escape symbols
  $ ck search \(

  # edit the primary config of emacs
  $ ck edit emacs
  # edit a non-primary config of ssh
  $ ck e ssh authorized_keys
  # edit a root config
  $ sudo ck -c /home/ckuser e ssh sshd_config

  # delete a program with all the configs
  $ ck delete emacs
  # or a specific config
  $ ck del -c /home/ckuser/.emacs.d/init.el

  # restore all links (on a new instalation)
  $ ck restore all
  # restore a program's links
  $ ck r -p emacs

  # get help for an action
  $ ck h add
  $ ck --help e
#+END_SRC

* manpage
  :PROPERTIES:
  :CUSTOM_ID: manpage
  :END:
#+BEGIN_SRC sh :results output html :exports results
  groff ck.1 -mandoc -Thtml
#+END_SRC