66 lines
2.1 KiB
Nix
66 lines
2.1 KiB
Nix
|
{ config, lib, pkgs, ... }:
|
||
|
let
|
||
|
# Provides a fake "docker" binary mapping to podman
|
||
|
cfg = config.services.podman;
|
||
|
podmanPackage = cfg.package;
|
||
|
docker_host = "unix:///run/user/$UID/podman/podman.sock";
|
||
|
|
||
|
fakeDockerBinary = pkgs.runCommandNoCC "${podmanPackage.pname}-docker-compat-${podmanPackage.version}"
|
||
|
{
|
||
|
outputs = [ "out" "man" ];
|
||
|
inherit (podmanPackage) meta;
|
||
|
} ''
|
||
|
mkdir -p $out/bin
|
||
|
ln -s ${podmanPackage}/bin/podman $out/bin/docker
|
||
|
|
||
|
mkdir -p $man/share/man/man1
|
||
|
for f in ${podmanPackage.man}/share/man/man1/*; do
|
||
|
basename=$(basename $f | sed s/podman/docker/g)
|
||
|
ln -s $f $man/share/man/man1/$basename
|
||
|
done
|
||
|
'';
|
||
|
dockerComposeCompat = pkgs.runCommandNoCC "docker-compose-podman-compat"
|
||
|
{
|
||
|
buildInputs = [ pkgs.makeWrapper ];
|
||
|
} ''
|
||
|
mkdir -p $out/bin
|
||
|
makeWrapper '${pkgs.docker-compose_2}/libexec/docker/cli-plugins/docker-compose' "$out/bin/docker-compose" \
|
||
|
--set-default "DOCKER_HOST" 'unix:///run/user/$UID/podman/podman.sock' \
|
||
|
--set-default DOCKER_BUILDKIT 0
|
||
|
'';
|
||
|
in
|
||
|
with lib; {
|
||
|
options.services.podman = {
|
||
|
dockerCompat =
|
||
|
{
|
||
|
fakeDockerBinary.enable = mkEnableOption {
|
||
|
description = ''
|
||
|
Create an alias mapping <command>docker</command> to <command>podman</command>.
|
||
|
'';
|
||
|
};
|
||
|
dockerSocket.enable = mkEnableOption {
|
||
|
description = ''
|
||
|
Set the DOCKER_HOST environment variable to make docker tools use the podman docker
|
||
|
'';
|
||
|
};
|
||
|
dockerCompose.enable = mkEnableOption {
|
||
|
description = ''
|
||
|
Install a docker-compose binary that uses the podman socket
|
||
|
'';
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
config = lib.mkIf cfg.enable (lib.mkMerge [
|
||
|
(lib.mkIf cfg.dockerCompat.fakeDockerBinary.enable {
|
||
|
home.packages = [ fakeDockerBinary ];
|
||
|
})
|
||
|
(lib.mkIf cfg.dockerCompat.dockerCompose.enable {
|
||
|
home.packages = [ dockerComposeCompat ];
|
||
|
})
|
||
|
(lib.mkIf cfg.dockerCompat.dockerSocket.enable {
|
||
|
home.sessionVariables."DOCKER_HOST" = "unix:///run/user/$UID/podman/podman.sock";
|
||
|
})
|
||
|
|
||
|
]);
|
||
|
}
|