Giter VIP home page Giter VIP logo

guix-config's Introduction

guix-config

My dotfiles for GNU Guix

Tutorials

Tutorials for Guile Scheme Language:
  • A Scheme Primer: for a basic understanding of Scheme
  • Guile 3.0 Manual: The most important part of this manual is API Reference, when in doubt, check the API Reference.

How to practice Guile Scheme Language(on NixOS):

nix shell nixpkgs#racket-minimal --command "racket"

Tutorials for Guix itself:

How to use Guix on NixOS: https://github.com/ryan4yin/nix-config/blob/main/modules/nixos/desktop/guix.nix

Key community projects

Notes

  1. ‘a: a syntax sugar of (quote a), a symbol a is not evaluated.
  2. #t and #f: true and false
  3. ’() or null: empty list
  4. (list arg1 arg2 …) or =’(arg1 arg2 …)=: a linked list,
  5. cons* arg1 arg2 …: similar to (list arg1 arg2 …), but its last cons cell is a dotted list, which does not have null for its cdr.
    1. This function is called list* in some other Schemes and in Common LISP.
scheme@(guile-user)> (cons* 1 2 3 4 5)
$4 = (1 2 3 4 . 5)
scheme@(guile-user)> (list 1 2 3 4 5)
$5 = (1 2 3 4 5)
scheme@(guile-user)> '(1 2 3 4 5)
$6 = (1 2 3 4 5)

scheme@(guile-user)> '(1 2)
$7 = (1 2)
scheme@(guile-user)> (cons 1 (cons 2 '()))
$8 = (1 2)
;; a list which does not have `null` for its cdr is called a dotted list.
scheme@(guile-user)> (cons 1 2)
$9 = (1 . 2)

Guix Mirror in China

https://mirror.sjtu.edu.cn/docs/guix

FAQ

1. In which scenarios should I use cons* instead of list / cons?

  1. cons create a pair with two elements, the first element is its car and the second element its cdr.
  2. (list a b ...) create a linked list with multiple elements, and a null is appended to the end of the list.
  3. (cons* a b ... g h) create a linked list with multiple elements, but the last element is not null, it is the last element of the list.

cons* is useful when you want to insert multiple elements at the front of a list. For example, (cons* 1 2 3 '(4 5 6)) will insert 1 2 3 at the front of (4 5 6), and the result is (1 2 3 4 5 6).

nonguix’s installation description use cons* ... %default-channels to insert its channel infront of guix’s default channels.

if we use list ... %default-channels, the result have an extra null at the end of the list, which is not what we want.

scheme@(guile-user) [1]> (list 1 2 3 (list 4 5 6))
$13 = (1 2 3 (4 5 6))
scheme@(guile-user) [1]> '(1 2 3 (4 5 6))
$14 = (1 2 3 (4 5 6))
scheme@(guile-user) [1]> (cons* 1 2 3 (list 4 5 6))
$15 = (1 2 3 4 5 6)

2. How to install package vai config.scm?

  1. guix search <package-name> to find the package’s location.
    1. For example, guix search kitty will show the package’s location is gnu/packages/terminals.scm.
  2. add (use-package-modules terminals) to the top of config.scm.
  3. add kitty to the packages list in config.scm.

3. Documentation?

  1. docs for use-modules: it’s provided by guile, see https://www.gnu.org/software/guile/manual/html_node/Using-Modules.html
  2. docs for use-service-modules, use-package-modules & use-system-modules: No docs for them. But you can read their definition in source code: https://git.savannah.gnu.org/cgit/guix.git/tree/gnu.scm#n143
  3. Source code:
    1. https://git.savannah.gnu.org/cgit/guix.git/tree/
    2. https://github.com/nonguix/nonguix/tree/master/nongnu

4. Why is guix pull so sluggish? (Stuck in computing guix derivation)

Learn more: https://guix.gnu.org/manual/en/html_node/Channels-with-Substitutes.html

When executing guix pull, Guix initially compiles the definitions of every available package. This is a resource-intensive process for which substitutes (refer to Substitutes) may be accessible.

For nonguix, you can enhance the speed of the guix pull operation by incorporating its official substitutes. To delve into the details, refer to the ‘substitutes’ section in https://gitlab.com/nonguix/nonguix.

In NixOS, nix undergoes no compilation phase and functions as a fully interpreted language. Consequently, nix flake update outpaces guix pull in terms of speed.

The substitutes you integrate into config.scm will become effective only after the initial completion of guix system reconfigure! For expediting the inaugural reconfiguration, consult nonuix’s official README for guidance.

5. Why is guix system reconfigure so lethargic? (Stuck in build phase)

Similar to the earlier point, you can hasten guix system reconfigure by introducing nonguix’s substitutes.

References

Other dotfiles that inspired me:

guix-config's People

Contributors

ryan4yin avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.