nix/home/config/bash/module/Container.nix

85 lines
1.9 KiB
Nix

{ ... }: {
text = ''
# Attach/create container box in current directory with specified name.
# By default uses current dir name.
# Usage: ca [NAME]
function ca() {
local name="''${1}"
# Set default name.
# [[ "''${name}" = "" ]] && name="main"
[[ "''${name}" = "" ]] && name=$(parse_alnum "''${PWD##*/}")
# Append box prefix.
name="box-''${name}"
# Create container.
docker run \
--privileged \
-d -it \
-h "''${HOSTNAME}''${name#box}" --name "''${name}" \
--workdir /data \
-e XDG_RUNTIME_DIR=/tmp \
-e WAYLAND_DISPLAY=''${WAYLAND_DISPLAY} \
-v ''${XDG_RUNTIME_DIR}/''${WAYLAND_DISPLAY}:/tmp/''${WAYLAND_DISPLAY} \
-v ''${PWD}:/data \
-v ''${HOME}:/root \
debian:latest bash -c bash &> /dev/null
# Attempt to start container.
docker start "''${name}" &> /dev/null
# Attach to running container.
docker attach "''${name}"
}
# Remove container box with specified name.
# By default uses current dir name.
# Usage: ck [NAME]
function ck() {
local name="''${1}"
# Set default name.
[[ "''${name}" = "" ]] && name=$(parse_alnum "''${PWD##*/}")
# Append box prefix.
name="box-''${name}"
# Kill container.
docker kill "''${name}" &> /dev/null
docker rm "''${name}" &> /dev/null
}
# Remove all container boxes.
function cka() {
local IFS=$'\n'
local boxes=$(_get_boxes)
for box in ''${boxes[@]}; do
ck "''${box}"
done
}
# List all container boxes.
function cl() {
_get_boxes
}
# Print all boxes.
function _get_boxes() {
local IFS=$'\n'
local boxes=$(docker ps -a | grep "box-" | sed -e "s/.*box-//")
[[ "''${boxes[@]}" != "" ]] && echo "''${boxes[@]}" || true
}
# Autocomplete with boxes.
function _comp_get_boxes() {
local IFS=$'\n'
_autocomplete_first $(_get_boxes)
}
complete -F _comp_get_boxes ca ck
'';
}