mirror of
https://github.com/foo-dogsquared/wiki.git
synced 2025-01-31 04:58:21 +00:00
aea7015cd5
Apparently, the convention (at least starting from 2018) is to make the keywords and block names to be in lowercase as stated from one of the following discussions at https://orgmode.org/list/87tuuw3n15.fsf@nicolasgoaziou.fr/. The files was updated with a one liner of shell. However, this is Emacs and org-mode does have an API to let you do stuff in your config and interact with the documents internally so it is not an elegant solution in any way.
39 lines
1.8 KiB
Org Mode
39 lines
1.8 KiB
Org Mode
#+title: GNU Guix packaging
|
|
#+author: "Gabriel Arazas"
|
|
#+email: "foo.dogsquared@gmail.com"
|
|
#+date: "2020-09-14 22:25:10 +08:00"
|
|
#+date_modified: "2020-09-14 23:53:35 +08:00"
|
|
#+language: en
|
|
#+options: toc:t
|
|
#+property: header-args :exports both
|
|
|
|
|
|
Practicing [[file:2020-09-13-19-42-06.org][Software packaging]] in [[file:2020-08-19-08-21-44.org][GNU Guix]] is pretty straightforward with several tools that the package manager provides.
|
|
With things like importers, build systems, and light abstractions, it can spark joy packaging with Guix.
|
|
|
|
|
|
|
|
|
|
* Getting started
|
|
|
|
The following instructions assumes you have Guix installed.
|
|
|
|
To start hacking into Guix packages, clone the Git repo of the Guix packages (i.e., <GUIX_GIT_REPO>).
|
|
Once you have the Git repo ready, you may want to develop in an isolated environment.
|
|
This is a perfect use case for Guix with ~guix environment~ command.
|
|
|
|
The following is an example of an environment created with the Guix package manager:
|
|
|
|
#+begin_src shell
|
|
guix environment --pure guix --ad-hoc coreutils ripgrep neovim emacs
|
|
#+end_src
|
|
|
|
This creates a =virtualenv=-like environment with the packages listed with ~--ad-hoc~ (e.g., GNU Coreutils, Neovim, Emacs).
|
|
|
|
To start making changes, you need to create a branch first to avoid conflicts in the master branch (e.g., ~git checkout -b $BRANCH~).
|
|
|
|
The project structure brings all of the things together: Guix package manager implementation, package definitions, and documentation.
|
|
The packages are located in =gnu/packages= conveniently due to how Guile modules work.
|
|
(If you're not familiar with GNU Guile, the rule of thumb is that one module per file and the module name must match the location it's in (e.g., ~gnu packages rust-apps~ is in =gnu/packages/rust-apps.scm=).
|
|
Furthermore, all items inside of a module are private by default unless declared to be public.)
|