(Sorry for the incoherence of this question; I’ve gone slightly mad after spending all evening on this. I also expect my setup to be extremely borked in a number of ways other than the one I’m asking about, because after several months I have still managed not to pick up any fluency or intuition for Nix at all.)
I am trying to convert my Darwin home-manager config to use flakes. The PR is Use flakes by Smaug123 · Pull Request #6 · Smaug123/nix-dotfiles · GitHub, and the commit at which I see this particular problem is Use flakes by Smaug123 · Pull Request #6 · Smaug123/nix-dotfiles · GitHub.
darwin-rebuild build --flake .#patrick
Output:
warning: Git tree '/Users/patrick/.nixpkgs' is dirty
building the system configuration...
warning: Git tree '/Users/patrick/.nixpkgs' is dirty
error: in pure evaluation mode, 'fetchTarball' requires a 'sha256' argument
(use '--show-trace' to show detailed location information)
For a start, ~/.nixpkgs
is clean according to Git, so I don’t know why I’m being told (twice!) that it’s dirty.
But I have no idea what it’s trying to fetchTarball
, and --show-trace
is as usual impenetrable (and doesn’t mention fetchTarball
at all).
I’m sure there’s an obvious way to get this working, which I will find after a few weeks of thinking and mashing the keyboard; but the ideal answer would be someone pushing it to my PR
For convenience, here is the flake.nix
(nix-dotfiles/flake.nix at bf760287b3804640ca67afb1e4a63201fb3acb15 · Smaug123/nix-dotfiles · GitHub):
{
description = "Patrick's Darwin Nix setup";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
darwin = {
url = "github:lnl7/nix-darwin/master";
inputs.nixpkgs.follows = "nixpkgs";
};
emacs.url = "github:nix-community/emacs-overlay/master";
};
outputs = { self, darwin, nixpkgs, home-manager, emacs }: {
darwinConfigurations = {
patrick = darwin.lib.darwinSystem {
system = "aarch64-darwin";
modules = [ ./darwin-configuration.nix ];
};
};
};
}
Darwin-configuration (nix-dotfiles/darwin-configuration.nix at bf760287b3804640ca67afb1e4a63201fb3acb15 · Smaug123/nix-dotfiles · GitHub):
{ pkgs, inputs, ... }:
let
inherit (inputs) home-manager emacs;
in
let python = import ./python.nix { inherit pkgs; }; in
{
nix.useDaemon = true;
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.Patrick = import ./home.nix { emacs = emacs; pkgs = pkgs; };
# List packages installed in system profile. To search by name, run:
# $ nix-env -qaP | grep wget
environment.systemPackages =
[
pkgs.alacritty
pkgs.rustup
pkgs.libiconv
pkgs.clang
#pkgs.keepassxc
python
];
# This line is required; otherwise, on shell startup, you won't have Nix stuff in the PATH.
programs.zsh.enable = true;
# Use a custom configuration.nix location.
# $ darwin-rebuild switch -I darwin-config=$HOME/.config/nixpkgs/darwin/configuration.nix
environment.darwinConfig = "$HOME/.nixpkgs/darwin-configuration.nix";
nixpkgs.overlays = import ./overlays.nix;
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (pkgs.lib.getName pkg) [
"vscode"
];
# Auto upgrade nix package and the daemon service.
services.nix-daemon.enable = true;
nix.package = pkgs.nixFlakes;
nix.gc.automatic = true;
# Sandbox causes failure: https://github.com/NixOS/nix/issues/4119
nix.useSandbox = false;
nix.extraOptions = ''
auto-optimise-store = true
experimental-features = nix-command flakes
'';
# Used for backwards compatibility, please read the changelog before changing.
# $ darwin-rebuild changelog
system.stateVersion = 4;
}
home.nix
(nix-dotfiles/home.nix at bf760287b3804640ca67afb1e4a63201fb3acb15 · Smaug123/nix-dotfiles · GitHub):
{ pkgs, emacs, ... }:
let username = "Patrick"; in
let dotnet = pkgs.dotnet-sdk_6; in
{
imports = [ ./rider ];
rider = { enable = true; username = username; dotnet = dotnet; };
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
# Home Manager needs a bit of information about you and the
# paths it should manage.
home.username = username;
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
home.stateVersion = "22.05";
home.packages =
[
pkgs.rust-analyzer
(...)
];
(...)
}
At various other points, I’ve had more success, e.g. Use flakes by Smaug123 · Pull Request #6 · Smaug123/nix-dotfiles · GitHub got me as far as “attribute rust-analyzer
missing” in the build of nix-dotfiles/home.nix at fd95ecf38fa4a326d5108e56f61b4ee90568646c · Smaug123/nix-dotfiles · GitHub. That seems more obviously “something someone can easily help with”: why is the rust-analyzer
attribute on my nixpkgs
from the flake not making it all the way down to my home.nix
?