- Scheme 93%
- Tree-sitter Query 6.6%
- Shell 0.4%
Replace the chatty lsblk -> fdisk -> blkid -> mount pipeline, which fired four SSH round trips per disk, with one remote-eval invocation that uses guile-parted on the target to enumerate devices and partitions, then parses /proc/mounts and blkid -o export to enrich them. The probe returns a structured alist which (guix-transmute facts) materialises into the existing <system-facts>, <device-fact> and <partition-fact> records. * src/guix-transmute/facts/probe.scm: New file. * src/guix-transmute/parted.scm: New file. * src/guix-transmute/facts/blkid.scm, src/guix-transmute/facts/fdisk.scm, src/guix-transmute/facts/lsblk.scm, src/guix-transmute/facts/mount.scm: Delete. * src/guix-transmute/facts.scm (system-facts-machine->system): Fix i686 spelling. Add docstring. (alist->partition-fact, alist->device-fact): New procedures. (file-systems-facts): Delete. (target-facts): Drive a single remote-eval of `probe-gexp' under sudo and materialise its result into a <system-facts> record. Raise an external error when the target lacks Guix instead of attempting a per-tool fallback. Add docstring. * src/guix-transmute/transmute/bootloader.scm (boot-device) (facts->efi-bootloader-configuration): Actually raise the constructed exception. (facts->bootloader-configuration): Add docstring. * src/guix-transmute/write.scm (write-bootloader-configuration): Actually raise the constructed exception. |
||
|---|---|---|
| .guix | ||
| scripts | ||
| src | ||
| .envrc | ||
| .gitignore | ||
| .guix-authorizations | ||
| .guix-channel | ||
| guix.scm | ||
| manifest.scm | ||
| README.md | ||
Convert any Linux system to a Guix system
guix transmute is a Guix extension to convert any Linux system to a Guix system with an SSH connection.
Guix channel
To configure Guix for using this repository as a channel, you need to create a .config/guix/channels.scm file with the following content:
(cons* (channel
(name 'transmute)
(url "https://codeberg.org/fishinthecalculator/guix-transmute.git")
(branch "main")
;; Enable signature verification:
(introduction
(make-channel-introduction
"e94e90053a6d59acbb4ef31e531c546a06831777"
(openpgp-fingerprint
"50E1 7BE0 D210 C883 D675 3150 4A3D 07EF D05C 4045"))))
%default-channels)
Otherwise, if you already have a .config/guix/channels.scm you can simply prepend this channel to the preexisting ones:
(cons* (channel
(name 'transmute)
(url "https://codeberg.org/fishinthecalculator/guix-transmute.git")
(branch "main")
;; Enable signature verification:
(introduction
(make-channel-introduction
"e94e90053a6d59acbb4ef31e531c546a06831777"
(openpgp-fingerprint
"50E1 7BE0 D210 C883 D675 3150 4A3D 07EF D05C 4045"))))
(channel
(name 'nonguix)
(url "https://gitlab.com/nonguix/nonguix")
;; Enable signature verification:
(introduction
(make-channel-introduction
"897c1a470da759236cc11798f4e0a5f7d4d59fbc"
(openpgp-fingerprint
"2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5"))))
%default-channels)
What is a Guix channel?
A channel is roughly the Guix equivalent of the AUR or container registries. It's a software repository providing Guix package and service definitions.
Contributing
All contributions are welcome. If you have commit access please remember to setup the authentication hook with
git fetch origin keyring:keyring
guix git authenticate --cache-key=channels/guix-transmute --stats e94e90053a6d59acbb4ef31e531c546a06831777 "50E1 7BE0 D210 C883 D675 3150 4A3D 07EF D05C 4045"
Licence
Unless otherwise stated all the files in this repository are to be considered under the GPL 3.0 terms. You are more than welcome to open issues or send patches.