1(defpackage org.lispbuilds.nix/main
2 (:use :common-lisp
3 :org.lispbuilds.nix/database/sqlite
4 :org.lispbuilds.nix/repository/quicklisp
5 :org.lispbuilds.nix/api)
6 (:local-nicknames
7 (:http :dexador)))
8
9(in-package org.lispbuilds.nix/main)
10
11(defun resource (name type)
12 (make-pathname
13 :defaults (asdf:system-source-directory :org.lispbuilds.nix)
14 :name name
15 :type type))
16
17(defvar *sqlite*
18 (make-instance
19 'sqlite-database
20 :init-file (resource "init" "sql")
21 :url "packages.sqlite"))
22
23(defvar *quicklisp* nil)
24
25(defun get-quicklisp-version ()
26 (let ((response (http:get "http://beta.quicklisp.org/dist/quicklisp.txt")))
27 (subseq
28 (second (uiop:split-string response :separator '(#\Newline)))
29 9)))
30
31(defun init-quicklisp ()
32 (setf *quicklisp*
33 (make-instance
34 'quicklisp-repository
35 :dist-url
36 (format nil
37 "https://beta.quicklisp.org/dist/quicklisp/~a/"
38 (get-quicklisp-version)))))
39
40(defun run-importers ()
41 (ignore-errors (delete-file "packages.sqlite"))
42 (import-lisp-packages *quicklisp* *sqlite*)
43 (format t "Imported packages from quicklisp to ~A~%"
44 (truename "packages.sqlite")))
45
46(defun gen-nix-file ()
47 (database->nix-expression *sqlite* "imported.nix")
48 (format t "Dumped nix file to ~a~%"
49 (truename "imported.nix")))
50
51(defun run-nix-formatter ()
52 (uiop:run-program '("nixfmt" "imported.nix")))
53
54(defun main ()
55 (format t "~%")
56 (init-quicklisp)
57 (run-importers)
58 (gen-nix-file)
59 (run-nix-formatter))