Closed zetashift closed 1 year ago
My current attempt at a flake:
{
description = "Unison dev shell";
inputs = {
nixpkgs.url = github:nixos/nixpkgs/nixpkgs-unstable;
flake-utils.url = github:numtide/flake-utils;
unison.url = github:ceedubs/unison-nix;
unison.flake = true;
};
outputs = { self, nixpkgs, unison, flake-utils, ... }:
let
forSystem = system:
let
pkgs = nixpkgs.legacyPackages.${system};
ucm = unison.ucm;
in
{
devShell = pkgs.mkShell {
name = "unison-shell";
buildInputs = [
ucm
];
shellHook = ''
'';
};
};
in
flake-utils.lib.eachDefaultSystem forSystem;
}
which fails because it can't find unison.ucm
so I'm defining something wrong :P.
@zetashift You were super close! I think that will work if you change the ucm
definition to be something like ucm = unison.packages.${system}.ucm;
.
An alternative approach that might be a bit handier if you think that you might depend on anything else from the Unison flake would be to run the Unison overlay on your pkgs
. That would look something like this:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ unison.overlay ];
};
in
{
devShell = pkgs.mkShell {
name = "unison-shell";
buildInputs = [
pkgs.unison-ucm
];
shellHook = ''
'';
};
};
There is a lot of room for improvement in the docs for flakes (and Nix in general), but as a general tool for flakes, you can run nix flake show github:ceedubs/unison-nix
which will show you the outputs of the flake.
I'm going to go ahead and close out this issue, but if the question comes up again then I'll take it as a sign that I should add some docs for this to the README.
I forgot to say thank you, so thank you for the help, I got enough to get me started!
On my work laptop getting the following error(on a m1 mac):
error: Package ‘unison-code-manager-1.0.M4e-alpha’ in
/nix/store/flwlrj8zg135ib310lx0wdyg4b34ypfn-source/nix/ucm.nix:109 is not supported on ‘aarch64-darwin’,
refusing to evaluate.
@zetashift yeah :(
Unfortunately ucm releases currently aren't built for aarch64. It will happen at some point, but I'm not sure when.
Until then, you can explicitly specify x86 as your system
, and as long as you have Rosetta installed it should work find. here and here are some relevant examples from my dotfiles. Hope that helps!
Ah damn, even the main website says it, I usually do all my dev on a Linux box so never had these problems haha. Eventual flake I settled with:
{
description = "Unison dev shell";
inputs = {
nixpkgs.url = github:nixos/nixpkgs/nixpkgs-unstable;
flake-utils.url = github:numtide/flake-utils;
unison.url = github:ceedubs/unison-nix;
unison.flake = true;
};
outputs = { self, nixpkgs, unison, flake-utils, ... }:
let
forSystem = system:
let
pkgs = import nixpkgs {
system = "x86_64-darwin";
overlays = [ unison.overlay ];
};
in
{
devShell = pkgs.mkShell {
name = "unison-shell";
buildInputs = [
pkgs.unison-ucm
];
shellHook = ''
'';
};
};
in
flake-utils.lib.eachDefaultSystem forSystem;
}
@zetashift you probably don't want to set system
to x86_64-darwin
on a linux machine :)
If you always want x86_64-darwin
then you set system = x86_64-darwin
in your ~/.config/nix/nix.conf
config. Or you can change your code to not bother with the eachDefaultSystem
stuff.
@zetashift you probably don't want to set
system
tox86_64-darwin
on a linux machine :)If you always want
x86_64-darwin
then you setsystem = x86_64-darwin
in your~/.config/nix/nix.conf
config. Or you can change your code to not bother with theeachDefaultSystem
stuff.
Yup, I noticed that a bit too late :P, thank you!
I'm attempting to use this in a
flake.nix
to get an easynix develop
workflow going, this command:gives me a working ucm, but I have no idea how to translate this into a flake.nix (my Nix is very weak sorry!). I tried looking around but couldn't find an example so far. I also tried making my own
flake.nix
from scratch but kept running against errors, the last one I got was: