on master help sign in
3 files changed+24−21
since splitsnapshots
unifiedsplit
README.md+3−3 c+12−10 flake.nix+9−8
README.md+3−3
@@ -6,7 +6,7 @@ Apple's [`container`](https://github.com/apple/container) CLI on macOS.
66
77It's a plain, single-process image — no NixOS, no systemd — defined in
88[`flake.nix`](./flake.nix). `c start` drops you into a
9−[`zellij`](https://zellij.dev) session whose panes use your host login shell
9+[`herdr`](https://herdr.dev) session whose panes use your host login shell
1010(detected and bundled by `c init`). You choose what else it ships via a
1111per-project `container.nix`.
1212
@@ -49,7 +49,7 @@ nixpkgs) and an optional `mounts` list. It is **required**; there is no default.
4949```
5050
5151Your **host login shell** (detected by `c init`, bash fallback), **coreutils**,
52−[**zellij**](https://zellij.dev) (the session `c start` launches), **Nix** itself
52+[**herdr**](https://herdr.dev) (the session `c start` launches), **Nix** itself
5353(with CA certs and `nix-command`/`flakes` enabled, single-user), and the ncurses
5454**terminfo** database are always included — no need to list them.
5555
@@ -68,7 +68,7 @@ that holds a `container.nix`; the container is named after that directory.
6868# build the image, load it, and create the container (named after $PWD):
6969nix run github:ilyakooo0/nix-container -- init
7070
71−# start it and attach — drops you into a zellij session:
71+# start it and attach — drops you into a herdr session:
7272nix run github:ilyakooo0/nix-container -- start
7373```
7474
c+12−10
@@ -28,7 +28,7 @@ switch $argv[1]
2828 end
2929
3030 # Host login shell (by name): added to the image automatically and baked
31− # in as the cmd + default $SHELL (what zellij panes etc. spawn), so it
31+ # in as the cmd + default $SHELL (what herdr panes etc. spawn), so it
3232 # needn't be listed in container.nix. Falls back to bash.
3333 set -l shell bash
3434 test -n "$SHELL"; and set shell (path basename $SHELL)
@@ -37,8 +37,8 @@ switch $argv[1]
3737 # temp dir, load it, then clean up.
3838 set -l tmp (mktemp -d)
3939 set -l archive $tmp/image.tar.gz
40− set -lx NIX_CONTAINER_PKGS (path resolve $config)
41− set -l expr "(builtins.getFlake \"$flake\").lib.\${builtins.currentSystem}.copyWithShell \"nix-container-$name\" \"$shell\" (import (/. + builtins.getEnv \"NIX_CONTAINER_PKGS\")).packages"
40+ set -lx NIX_CONTAINER_CONFIG (path resolve $config)
41+ set -l expr "(builtins.getFlake \"$flake\").lib.\${builtins.currentSystem}.copyWithShell \"nix-container-$name\" \"$shell\" (import (/. + builtins.getEnv \"NIX_CONTAINER_CONFIG\")).packages"
4242 set -l copyer (nix build --impure --no-link --print-out-paths --expr "$expr")
4343 set -l rc $status
4444 if test $rc -eq 0
@@ -57,7 +57,7 @@ switch $argv[1]
5757 # mounts from the config (`mounts = [ "host:container" … ]`). A leading
5858 # ~/ in the host path expands to $HOME (nix leaves it literal).
5959 set -l mounts -v "$PWD:/workspace"
60− for m in (nix eval --impure --raw --expr "builtins.concatStringsSep \"\n\" ((import (/. + builtins.getEnv \"NIX_CONTAINER_PKGS\")).mounts or [])")
60+ for m in (nix eval --impure --raw --expr "builtins.concatStringsSep \"\n\" ((import (/. + builtins.getEnv \"NIX_CONTAINER_CONFIG\")).mounts or [])")
6161 set -a mounts -v (string replace -r '^~/' "$HOME/" -- $m)
6262 end
6363
@@ -73,18 +73,20 @@ switch $argv[1]
7373 set term $TERM
7474 end
7575
76− # Replace any existing container of the same name. The image's cmd is
77− # zellij (`c start` attaches to it), so no command is passed here.
76+ # Replace any existing container of the same name, then create it running
77+ # herdr in a session named after the project (`<dir>-container`). This
78+ # overrides the image's default plain-herdr cmd; `c start` attaches to it.
7879 container rm --force $name 2>/dev/null
7980 # The image only lays down /bin and /etc, so /tmp and /run don't exist;
80− # without them anything that writes temp files (zellij, build tools, …)
81+ # without them anything that writes temp files (herdr, build tools, …)
8182 # fails with ENOENT. Mount writable tmpfs at both.
8283 container create --name $name --ssh -it -e "TERM=$term" \
83− --tmpfs /tmp --tmpfs /run --memory 8g --cwd /workspace $mounts $argv $image
84+ --tmpfs /tmp --tmpfs /run --memory 8g --cwd /workspace $mounts $argv \
85+ $image /bin/herdr session attach "$name-container"
8486 case start
85− # Start the container and attach to its cmd (zellij). TERM was baked into
87+ # Start the container and attach to its cmd (herdr). TERM was baked into
8688 # the container env at create time (`-e TERM`), which survives this path.
87− # Exiting zellij (PID1) stops the container; `c start` boots it again.
89+ # Exiting herdr (PID1) stops the container; `c start` boots it again.
8890 container start -ai $name
8991 case '*'
9092 echo "usage: c init [-c FILE] [create args] | start" >&2
flake.nix+9−8
@@ -78,9 +78,9 @@
7878 imageTag = "latest";
7979
8080 # Build the OCI image (named `name`) from a `{ pkgs, nur }: [ ... ]`
81− # package function, for the named shell. The image's `cmd` is zellij
81+ # package function, for the named shell. The image's `cmd` is herdr
8282 # (the session `c start` attaches to); the shell is the default `$SHELL`
83− # (what zellij panes spawn) and is added automatically, so `container.nix`
83+ # (what herdr panes spawn) and is added automatically, so `container.nix`
8484 # lists only your extras. Nix (+ CA certs) and the ncurses terminfo
8585 # database are always shipped too. Nothing here is fish-specific: the
8686 # TERM fixup happens host-side in `c` (passed via `-e TERM` at create).
@@ -119,7 +119,7 @@
119119 # entry for whatever TERM `c` passes in and render correctly.
120120 pkgsLinux.ncurses
121121 # The session `c start` always launches.
122− pkgsLinux.zellij
122+ pkgsLinux.herdr
123123 ];
124124 # Link all of /etc so the above files (nsswitch.conf, protocols,
125125 # services, passwd, group, ssl certs) are present.
@@ -133,14 +133,15 @@
133133
134134 config = {
135135 # `cmd` (not `entrypoint`): the default command, *replaced* by any
136− # command passed to `container run/create`. It's zellij — the
137− # session `c start` attaches to via `container start -ai`; exiting
138− # it (PID1) stops the container.
139− cmd = [ "/bin/zellij" ];
136+ # command passed to `container run/create`. Plain herdr here;
137+ # `c init` overrides it with `herdr session attach <dir>-container` so
138+ # the session is named per project. `c start` attaches via
139+ # `container start -ai`; exiting herdr (PID1) stops the container.
140+ cmd = [ "/bin/herdr" ];
140141 env = [
141142 "PATH=/bin"
142143 "HOME=/root"
143− # Default shell for tools that spawn one (zellij panes, etc.).
144+ # Default shell for tools that spawn one (herdr panes, etc.).
144145 "SHELL=/bin/${shell}"
145146 # Marker so shells/scripts can detect they're in here.
146147 "NIX_CONTAINER=1"