Nix copy done
This commit is contained in:
parent
06c5be472a
commit
18597260bf
2 changed files with 63 additions and 32 deletions
17
flake.nix
17
flake.nix
|
@ -1,11 +1,24 @@
|
|||
{
|
||||
inputs.nixpkgs.url = "nixpkgs/nixos-24.05";
|
||||
outputs = {nixpkgs, ...}: let
|
||||
outputs = {
|
||||
self,
|
||||
nixpkgs,
|
||||
...
|
||||
}: let
|
||||
systems = ["aarch64-linux" "aarch64-darwin" "x86_64-darwin" "x86_64-linux"];
|
||||
pkgsFor = func: (nixpkgs.lib.genAttrs systems (system: (func (import nixpkgs {inherit system;}))));
|
||||
in {
|
||||
packages = pkgsFor (pkgs: {
|
||||
what-is-my-ip = pkgs.callPackage ./what-is-my-ip.nix {};
|
||||
default = pkgs.callPackage ./what-is-my-ip.nix {};
|
||||
});
|
||||
|
||||
devShells = pkgsFor (pkgs: {
|
||||
default = pkgs.mkShell {
|
||||
packages = [self.outputs.packages.${pkgs.system}.default];
|
||||
shellHook = ''
|
||||
echo "Hello, Nix!"
|
||||
'';
|
||||
};
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
76
post.md
76
post.md
|
@ -11,9 +11,9 @@ it's pretty fantastic.
|
|||
Let's walk through a single example of a shell script one may write: _what-is-my-ip_
|
||||
|
||||
```bash
|
||||
#! /usr/bin/env bash
|
||||
curl -s http://httpbin.org/get | \
|
||||
jq --raw-output .origin
|
||||
#!/usr/bin/env bash
|
||||
curl -s http://httpbin.org/get \
|
||||
| jq --raw-output .origin
|
||||
```
|
||||
|
||||
Sure, it's _sort of portable_, if you tell the person running it to have _curl_ and _jq_. What if you relied on a specific version of either though?
|
||||
|
@ -31,7 +31,7 @@ We might leverage _[Nixpkgs' trivial builders](https://ryantm.github.io/nixpkgs/
|
|||
pkgsFor = func: (nixpkgs.lib.genAttrs systems (system: (func (import nixpkgs {inherit system;}))));
|
||||
in {
|
||||
packages = pkgsFor (pkgs: {
|
||||
what-is-my-ip = pkgs.callPackage ./what-is-my-ip.nix {};
|
||||
default = pkgs.callPackage ./what-is-my-ip.nix {};
|
||||
});
|
||||
};
|
||||
}
|
||||
|
@ -50,21 +50,21 @@ pkgs.writeShellScriptBin "what-is-my-ip" ''
|
|||
|
||||
Here we are pinning our package to dependencies which come from NixOS/Nixpkgs release branch 24.05.
|
||||
|
||||
If we `nix build .#what-is-my-ip` and `readlink result` we get:
|
||||
If we `nix build` and `readlink result` we get:
|
||||
|
||||
**/nix/store/lr6wlz2652r35rwzc79samg77l6iqmii-what-is-my-ip**
|
||||
|
||||
And, of course, we can run our result:
|
||||
And, of course, we can run our built result:
|
||||
|
||||
```bash
|
||||
```console
|
||||
$ ./result/bin/what-is-my-ip
|
||||
24.5.113.148
|
||||
```
|
||||
|
||||
Or run it from the Flake:
|
||||
Or run it from the Flake directly:
|
||||
|
||||
```bash
|
||||
$ nix run .#what-is-my-ip
|
||||
```console
|
||||
$ nix run
|
||||
24.5.113.148
|
||||
```
|
||||
|
||||
|
@ -77,26 +77,46 @@ $ nix-store --query --graph $(readlink result) | nix shell nixpkgs#graphviz -c d
|
|||
[![Image of what-is-my-ip dependencies as a graph](/assets/images/what-is-my-ip-deps.png)](/assets/images/what-is-my-ip-deps.png)
|
||||
|
||||
Let's create a _developer environment_ and bring in our new tool.
|
||||
This is a great way to create developer environment with reproducible tools
|
||||
This is a great way to create developer environments with reproducible tools.
|
||||
|
||||
```nix
|
||||
let
|
||||
pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-24.05.tar.gz") {};
|
||||
what-is-my-ip = import ./what-is-my-ip.nix {inherit pkgs;};
|
||||
in
|
||||
pkgs.mkShell {
|
||||
packages = [what-is-my-ip];
|
||||
shellHook = ''
|
||||
echo "Hello, Nix!"
|
||||
'';
|
||||
```diff
|
||||
diff --git a/flake.nix b/flake.nix
|
||||
index 2a99357..ab32421 100644
|
||||
--- a/flake.nix
|
||||
+++ b/flake.nix
|
||||
@@ -1,11 +1,24 @@
|
||||
{
|
||||
inputs.nixpkgs.url = "nixpkgs/nixos-24.05";
|
||||
- outputs = {nixpkgs, ...}: let
|
||||
+ outputs = {
|
||||
+ self,
|
||||
+ nixpkgs,
|
||||
+ ...
|
||||
+ }: let
|
||||
systems = ["aarch64-linux" "aarch64-darwin" "x86_64-darwin" "x86_64-linux"];
|
||||
pkgsFor = func: (nixpkgs.lib.genAttrs systems (system: (func (import nixpkgs {inherit system;}))));
|
||||
in {
|
||||
packages = pkgsFor (pkgs: {
|
||||
what-is-my-ip = pkgs.callPackage ./what-is-my-ip.nix {};
|
||||
});
|
||||
+
|
||||
+ devShells = pkgsFor (pkgs: {
|
||||
+ default = pkgs.mkShell {
|
||||
+ packages = [self.outputs.packages.${pkgs.system}.what-is-my-ip];
|
||||
+ shellHook = ''
|
||||
+ echo "Hello, Nix!"
|
||||
+ '';
|
||||
+ };
|
||||
+ });
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
```
|
||||
❯ nix-shell what-is-my-ip-shell.nix
|
||||
```console
|
||||
$ nix develop -c $SHELL
|
||||
Hello, Nix!
|
||||
|
||||
[nix-shell:~/tutorial]$ which what-is-my-ip
|
||||
$ which what-is-my-ip
|
||||
/nix/store/lr6wlz2652r35rwzc79samg77l6iqmii-what-is-my-ip/bin/what-is-my-ip
|
||||
```
|
||||
|
||||
|
@ -104,11 +124,9 @@ Hello, Nix!
|
|||
|
||||
We can now do binary or source deployments 🚀🛠️📦 since we know the full dependency closure of our tool. We simply copy the necessary _/nix/store_ paths to another machine with Nix installed.
|
||||
|
||||
```bash
|
||||
❯ nix copy --to ssh://nixie.tail9f4b5.ts.net \
|
||||
$(nix-build what-is-my-ip.nix) --no-check-sigs
|
||||
|
||||
❯ ssh nixie.tail9f4b5.ts.net
|
||||
```console
|
||||
$ nix copy --to ssh://beefcake $(nix build --print-out-paths)
|
||||
$ ssh beefcake
|
||||
|
||||
[fmzakari@nixie:~]$ /nix/store/lr6wlz2652r35rwzc79samg77l6iqmii-what-is-my-ip/bin/what-is-my-ip
|
||||
98.147.178.19
|
||||
|
|
Loading…
Reference in a new issue