Skip to content

Commit 5adc51e

Browse files
committed
make qcow image as small as possible
1 parent f648ad2 commit 5adc51e

7 files changed

Lines changed: 48 additions & 27 deletions

File tree

images/qcow.nix

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,53 @@
11
{ lib, config, pkgs, modulesPath, ... }: {
22
imports = [ "${toString modulesPath}/profiles/qemu-guest.nix" ];
3+
4+
formatAttr = lib.mkForce "qcow";
5+
6+
system.build.qcow = lib.mkForce
7+
(import "${pkgs.path}/nixos/lib/make-disk-image.nix" {
8+
inherit lib config pkgs;
9+
diskSize = "auto";
10+
memSize = "2048";
11+
format = "qcow2";
12+
partitionTableType = "legacy";
13+
additionalSpace = "256M";
14+
copyChannel = false;
15+
16+
postVM = ''
17+
echo "Compressing final image with zstd..."
18+
${pkgs.qemu-utils}/bin/qemu-img convert -c -O qcow2 -o compression_type=zstd "$diskImage" "$out/nixos-minimal.qcow2"
19+
rm "$diskImage"
20+
'';
21+
});
22+
23+
# Standard minimal ext4 filesystem
324
fileSystems."/" = {
425
device = "/dev/disk/by-label/nixos";
526
autoResize = true;
627
fsType = "ext4";
728
};
8-
boot.growPartition = true;
9-
environment.systemPackages = [ pkgs.cloud-utils ];
1029

11-
system.build.qcow2 = import "${modulesPath}/../lib/make-disk-image.nix" {
12-
inherit lib config pkgs;
13-
diskSize = "auto";
14-
additionalSpace = "512M";
15-
format = "qcow2-compressed";
16-
partitionTableType = "hybrid";
30+
# Simplest bootloader for a "legacy" partition table
31+
boot.loader.grub = {
32+
enable = lib.mkForce true;
33+
device = "/dev/vda";
34+
efiSupport = lib.mkForce false;
1735
};
1836

19-
boot = {
20-
kernelParams = [ "console=ttyS0" ];
21-
loader = {
22-
grub = {
23-
device = lib.mkDefault "/dev/vda";
24-
efiInstallAsRemovable = true;
25-
efiSupport = true;
26-
};
27-
efi.canTouchEfiVariables = lib.mkForce false;
28-
};
37+
hardware.enableRedistributableFirmware = false;
38+
fonts.fontconfig.enable = false;
39+
systemd.network.wait-online.enable = false;
40+
systemd.services.NetworkManager-wait-online.enable = false;
41+
networking = {
42+
usePredictableInterfaceNames = false;
43+
interfaces.eth0.useDHCP = true;
44+
dhcpcd.wait = "background";
2945
};
46+
boot.initrd.availableKernelModules =
47+
[ "virtio_net" "virtio_pci" "virtio_mmio" "virtio_ring" ];
48+
49+
# Minimize closure size
50+
documentation.enable = false;
51+
environment.defaultPackages = lib.mkForce [ ];
52+
programs.command-not-found.enable = false;
3053
}

modules/home.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ lib.mkModule args "home" {
33
imports = [ inputs.hjem.nixosModules.default ];
44
options = with lib;
55
with lib.types; {
6-
enable = lib.mkBoolOpt' true; # enabled by default
76
files = mkOpt' attrs { };
87
configFiles = mkOpt' attrs { };
98
persist = mkOpt attrs { } "Files and directories to persist in the home";

modules/profiles/base.nix

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22
lib.mkModule args "ioga.profiles.base" {
33
options.enable = lib.mkBoolOpt' true; # enable by default
44
config = { cfg }: {
5-
ioga.hardware = { networking.enable = true; };
5+
ioga = {
6+
services.ssh.enable = true;
7+
hardware = { networking.enable = true; };
8+
};
9+
user.enable = true;
10+
shell.enable = true;
11+
home.enable = true;
612

713
programs.dconf.enable = true;
814
documentation.enable = false; # pretty big, use the internet

modules/secrets.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
nixpkgs.overlays = with inputs; [ vault-secrets.overlays.default ];
1414
environment.systemPackages = with pkgs; [
15-
vault
1615
(vault-push-approle-envs inputs.self)
1716
(vault-push-approles inputs.self)
1817
];

modules/services/ssh.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
{ lib, colors, pkgs, ... }@args:
22
lib.mkModule args "ioga.services.ssh" {
3-
options.enable = lib.mkBoolOpt' true; # enabled by default
43
config = { cfg }: {
54
services.openssh = {
65
enable = true;

modules/shell/default.nix

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
{ lib, pkgs, ... }@args:
22
lib.mkModule args "shell" {
3-
options = with lib;
4-
with lib.types; {
5-
enable = lib.mkBoolOpt' true; # enabled by default
6-
};
73
config = { cfg }:
84
with lib;
95
with lib.types; {

modules/user.nix

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
lib.mkModule args "user" {
33
options = with lib;
44
with lib.types; {
5-
enable = lib.mkBoolOpt' true; # enabled by default
65
name = mkOpt' str "iogamaster";
76
extraGroups =
87
mkOpt (listOf str) [ ] "Groups for the user to be assigned.";

0 commit comments

Comments
 (0)