Note: This project is akin to a dotfiles repo, however, centered around Common Lisp - NOT intented to be useful to anyone besides myself, though one may find it useful as a learning aid… The incentive and inspiration was always for learning purposes and managing my Common Lisp/Linux environment.
The plan is that ideas/tools started here may later manifest themselves into projects of their own. So this project is really just my Common Lisp playground… Any ideas, besides the core inspiration of this repo, are staged in the `libraries` directory..
Currently, the setup of this project itself acts as a template on how to scaffold a modern Common Lisp system (declarative style) along with a testing framework. The Common Lisp code written herein also acts as a ‘style guide’ on my functionality/aesthetic preferences. I also use [ocicl](https://github.com/ocicl/ocicl) for a modern approach for Common Lisp Systems Management, its a great tool - the only one that has a CLI to tie into a unix/linux workflow.
This build depends on ocicl, first install ocicl (https://github.com/ocicl/ocicl) and use `files/common-lisp/dot-sbclrc.lisp –> ~/.sbclrc` for your SBCL init file.
;; Build System
(asdf:load-system :aoforce)
;; Build may fail since it needs cl-gtk4
;; $ git clone https://github.com/bohonghuang/cl-gtk4.git into /ocicl
;; and re-run (asdf:load-system :aoforce) to successfully build
;; Test System
(asdf:test-system :aoforce/test)
;; Create Executable (WIP)
(asdf:make :aoforce/executable)
;; Generate Documentation (WIP)
(asdf:load-system :aoforce/docs)
;; Build Libraries/Extensions (WIP)
(asdf:load-system :aoforce/libraries)
Just recently added on a new addition, which is a configuration manager which allows for deploying your dotfiles from a specified location/repo. This system is established in CLOS and I plan to extend it greatly - perhaps may exist as its own library one day, but for now it is a core feature of this project and will likely remain here.
First edit/modify `aoforce/source/setup.lisp` (`:setup`) and then deploy your configuration as follows:
;; cd to ~/Work/aoforce/ (or location of this repo)
(asdf:load-system :aoforce)
;; First visualize your deployment plan
(aoforce:outline)
;; Deploy!
(aoforce:deploy)
As a fun exercise of incorporating a library, I adapted the `SDRAW` and `DTRACE` tools from the book [Common Lisp: A Gentle Introduction to Symbolic Computation](https://www.cs.cmu.edu/~dst/LispBook/). This is staged in the system/library `learn-cl`. For example, you can run the `sdraw` learning tool (a cons cell visual aid) in this project as follows:
(aoforce:sdraw '(This (is a (test!))))
;; or
;; (aofr:sdraw '(This (is a (test!))))
;; =>
;; [*|*]--->[*|*]--->NIL
;; | |
;; v v
;; THIS [*|*]--->[*|*]--->[*|*]--->NIL
;; | | |
;; v v v
;; IS A [*|*]--->NIL
;; |
;; v
;; TEST!
Currently working on establishing a gtk4/adw frontend using `cl-gtk4`, see https://github.com/bohonghuang/cl-gtk4.
Note: ocicl will install most of the dependencies, however, currently `cl-gtk4` is not building upstream and so `cl-gtk4` will need to be manually placed in the created `/ocicl/` directory that is created after first run of `(asdf:load-system :aoforce)`:
$ cd ./ocicl/
$ git clone https://github.com/bohonghuang/cl-gtk4.git
Then you can run the adw tutorial package as follows:
;; Re-run to finish building successfully
(asdf:load-system :aoforce)
(aoforce:ui)
;; or
;; (aofr:ui)
- [X] Build configuration manager system
- [X] Incorparate config-manager persistence via sqlite
- [X] Begin Scaffolding ADW/GTK4 UI System
- [ ] Build out unit testing
- [ ] Build a documentation system
- [ ] Extend Configuration Manager to build/deploy external systems
- [ ] Build a CLI executable for deployment system
- [ ] Build a ADW/GTK4 GUI config system inspector?
- [ ] Build a CL Project Scaffolding library/system (`:confr`)
- [ ] Build a system to contruct rpm packagtes (`:cl-rpm`)
- TBD
- TBD