{ description = "Examples of container interactions"; # nixpkgs is the package repository for the Nix package manager inputs.nixpkgs.url = "github:NixOS/nixpkgs"; outputs = { self, nixpkgs }: let # In this simple example we choose to build for "x86_64-linux" only pkgs = nixpkgs.legacyPackages.x86_64-linux; # wttr-delft is still the same, just moved to another file for clarity wttr-delft = import ./wttr-delft.nix { inherit pkgs; }; # Docker image containing only wttr-delft wttr-delft-container = pkgs.dockerTools.buildLayeredImage { name = "wttr-delft"; tag = "nix"; # Having the container be created 'now' can be convenient to identify # different versions of containers, but it breaks reproducibility. # So we let Nix set it to a fixed timestamp 0. # created = "now"; contents = [ wttr-delft ]; config = { Cmd = [ "${wttr-delft}/bin/wttr-delft" ]; # Needed for curl to work Env = [ "SSL_CERT_FILE=${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt" ]; }; }; # Development shell for interacting with containers # Based on https://gist.github.com/adisbladis/187204cb772800489ee3dac4acdd9947 podman-devshell = let # Provides a script that copies/creates files that are required for rootless podman podmanSetupScript = import ./podman-setup-script.nix { inherit pkgs; }; # Provides a fake "docker" binary mapping to podman dockerCompat = pkgs.runCommandNoCC "docker-podman-compat" {} '' mkdir -p $out/bin ln -s ${pkgs.podman}/bin/podman $out/bin/docker ''; in pkgs.mkShell { name = "podman"; # Packages available in the development shell packages = with pkgs; [ podman # Manage pods, containers and images runc # Container runtime conmon # Container runtime monitor skopeo # Interact with container registry slirp4netns # User-mode networking for unprivileged namespaces fuse-overlayfs # CoW for images, much faster than default vfs dockerCompat # Aliases for docker / podman ]; shellHook = '' # Install configuration required for rootless podman ${podmanSetupScript} ''; }; in # These are the flake outputs, i.e. what we can consume { packages.x86_64-linux = { default = wttr-delft; container = wttr-delft-container; }; devShells.x86_64-linux = { default = wttr-delft; podman = podman-devshell; }; }; }