nixpkgs/pkgs/development/lisp-modules/import/main.lisp

56 lines
1.4 KiB
Common Lisp

(defpackage org.lispbuilds.nix/main
(:use :common-lisp
:org.lispbuilds.nix/database/sqlite
:org.lispbuilds.nix/repository/quicklisp
:org.lispbuilds.nix/api)
(:local-nicknames
(:http :dexador)))
(in-package org.lispbuilds.nix/main)
(defun resource (name type)
(make-pathname
:defaults (asdf:system-source-directory :org.lispbuilds.nix)
:name name
:type type))
(defvar *sqlite*
(make-instance
'sqlite-database
:init-file (resource "init" "sql")
:url "packages.sqlite"))
(defvar *quicklisp* nil)
(defun get-quicklisp-version ()
(let ((response (http:get "http://beta.quicklisp.org/dist/quicklisp.txt")))
(subseq
(second (uiop:split-string response :separator '(#\Newline)))
9)))
(defun init-quicklisp ()
(setf *quicklisp*
(make-instance
'quicklisp-repository
:dist-url
(format nil
"https://beta.quicklisp.org/dist/quicklisp/~a/"
(get-quicklisp-version)))))
(defun run-importers ()
(ignore-errors (delete-file "packages.sqlite"))
(import-lisp-packages *quicklisp* *sqlite*)
(format t "Imported packages from quicklisp to ~A~%"
(truename "packages.sqlite")))
(defun gen-nix-file ()
(database->nix-expression *sqlite* "imported.nix")
(format t "Dumped nix file to ~a~%"
(truename "imported.nix")))
(defun main ()
(format t "~%")
(init-quicklisp)
(run-importers)
(gen-nix-file))