I've experimented with the distinction in my config, because I wanted to be able to add home-services conditionally (e.g. I wanted my GuixSD to install a destop envrionment, but my work laptop to only setup emacs and its dependencies). My approache was to just parse the `/etc/os-release` file if it exists: ``` (define (os-release) (guard (_ (else #f)) (call-with-input-file "/etc/os-release" (lambda (port) (let loop ((line (read-line port)) (result '())) (if (eof-object? line) (reverse result) (begin (let* ((split (string-split line #\=)) (key (string->symbol (car split))) (val (if (string-match "\".*\"" (cadr split)) (substring (cadr split) 1 (- (string-length (cadr split)) 1)) (string->symbol (cadr split)))) (d (cons key val))) (loop (read-line port) (cons d result)))))))))) ``` Then I define a couple wrappers: ``` (define (linux-distro-id) (if (linux?) (assq-ref (os-release) 'ID) #f)) (define (guix-system?) (eq? (linux-distro-id) 'guix)) ``` The config was never really fleshed out because I ended up just using my GuixSD computer for work instead. On 2022-11-20 23:08, Julien Lepiller wrote: > Le Sun, 20 Nov 2022 14:54:40 -0600, > jgart a écrit : > >> Does Guix have a declarative Guix API way of knowing if it is >> installing a package into foreign distro versus Guix System? >> >> I'm thinking of a function like `foreign-distro?`: >> >> ``` >> (define-public peek >> (package >> (name "peek") >> ... >> (inputs >> `(,@(if (foreign-distro?) `(("ffmpeg" ,ffmpeg)) '()))) >> ``` >> >> The above includes ffmpeg in the inputs only if installing peek on a >> foreign distro. It could additionally patch the ffmpeg executable in >> a peek package phases if foreign-distro? returns #t. >> >> WDYT >> > > > Guix doesn't have a notion of foreign distro, it's all in your head, > and there's no difference between Guix System and other distros in the > Guix package manager's point of view :) > > To be more specific, Guix only knows what you current system is (that's > captured by %current-system). It's probably x86_64-linux right know. As > you can see, there's no place in there to tell it whether you're on a > foreign distro or not. > > Lastly, I don't think I would want to differentiate the two cases, > especially since it would mean that somehow Guix packages depend on > something external. There's this idea that Guix packages should somehow > be self-sufficient. > -- Best regards, Jake Shilling