# minimal set of scripts and services by various images { pkgs, lib, ... }: { # bring back simple interface names like eth0 eth1 etc grub-ifnames-0 = pkgs.writeText "grub-ifnames-0" '' GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 $GRUB_CMDLINE_LINUX" ''; # no need for CPU microcode updating in VMs grub-disable-microcode = pkgs.writeText "grub-disable-microcode" '' GRUB_CMDLINE_LINUX="dis_ucode_ldr $GRUB_CMDLINE_LINUX" ''; # dhcp for eth0 dhcp-network-for-iface = { iface, routeMetric ? 1024, useDNS ? true }: pkgs.writeText "${iface}-network" '' [Match] Name=${iface} [Network] DHCP=yes [DHCP] ClientIdentifier=mac RouteMetric=${toString routeMetric} ${if useDNS then '' [DHCPv4] UseDNS=True UseDomains=True '' else '' [DHCPv4] UseDNS=false ''} ''; # generate ssh host keys before starting sshd ssh-service-override-conf-create = pkgs.writeScript "ssh-override-conf-create.sh" '' mkdir -p /etc/systemd/system/ssh.service.d cat > /etc/systemd/system/ssh.service.d/override.conf << EOF [Service] ExecStartPre= ExecStartPre=`which ssh-keygen` -A ExecStartPre=`which sshd` -t EOF ''; # script to grow root partition grow-root-sh = pkgs.writeScript "grow-root-sh" '' #!/bin/bash set -e command -v growpart >/dev/null || { >&2 echo "growpart not found. Install package cloud-guest-utils or cloud-utils."; exit 1; } ROOTPART=$(findmnt / -o source -n) DISK=''${ROOTPART%[0-9]*} PARTNUM=''${ROOTPART##*[!0-9]} # resize and grow if possible growpart "$DISK" "$PARTNUM" && resize2fs "$ROOTPART" || true ''; # service to grow root partition on boot grow-root-service = pkgs.writeText "grow-root-service" '' [Service] Type = oneshot ExecStart = /usr/local/sbin/grow-root.sh [Install] WantedBy = multi-user.target ''; add-9p-mounts-to-fstab = shares: let shareToFstabEntry = name: share: "${name} ${share.target} 9p trans=virtio,version=9p2000.L,rw,posixacl,msize=104857600,cache=loose 0 0"; in pkgs.writeText "9p-to-fstab-sh" '' cat >> /etc/fstab << EOF ${lib.concatStringsSep "\n" (lib.mapAttrsToList shareToFstabEntry shares)} EOF ''; }