add disko input and hardware module for swan

This commit is contained in:
Noah Masur 2023-02-25 09:45:49 -05:00
parent 18c9e1efc8
commit 7a547f99c0
5 changed files with 219 additions and 121 deletions

View File

@ -69,6 +69,26 @@
"type": "github" "type": "github"
} }
}, },
"disko": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1677116397,
"narHash": "sha256-2OHwhv4k1SDEuNxhq+zluvrd5pbW8d4TP9NKW4B8iO8=",
"owner": "nix-community",
"repo": "disko",
"rev": "8fddb2fd721365fa77ff68b709539639d4dc65d7",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "disko",
"type": "github"
}
},
"firefox-darwin": { "firefox-darwin": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
@ -396,6 +416,7 @@
"bufferline-nvim-src": "bufferline-nvim-src", "bufferline-nvim-src": "bufferline-nvim-src",
"cmp-nvim-lsp-src": "cmp-nvim-lsp-src", "cmp-nvim-lsp-src": "cmp-nvim-lsp-src",
"darwin": "darwin", "darwin": "darwin",
"disko": "disko",
"firefox-darwin": "firefox-darwin", "firefox-darwin": "firefox-darwin",
"home-manager": "home-manager", "home-manager": "home-manager",
"nil": "nil", "nil": "nil",

View File

@ -29,6 +29,12 @@
# Use official Firefox binary for macOS # Use official Firefox binary for macOS
firefox-darwin.url = "github:bandithedoge/nixpkgs-firefox-darwin"; firefox-darwin.url = "github:bandithedoge/nixpkgs-firefox-darwin";
# Manage disk format and partitioning
disko = {
url = "github:nix-community/disko";
inputs.nixpkgs.follows = "nixpkgs";
};
# Wallpapers # Wallpapers
wallpapers = { wallpapers = {
url = "gitlab:exorcist365/wallpapers"; url = "gitlab:exorcist365/wallpapers";
@ -146,6 +152,8 @@
darwinConfigurations.lookingglass.config.home-manager.users."Noah.Masur".home; darwinConfigurations.lookingglass.config.home-manager.users."Noah.Masur".home;
}; };
diskoConfiguration = { swan = import ./hosts/swan/disks.nix { }; };
# Package servers into images with a generator # Package servers into images with a generator
packages = forAllSystems (system: { packages = forAllSystems (system: {

View File

@ -10,11 +10,13 @@ nixpkgs.lib.nixosSystem {
specialArgs = { }; specialArgs = { };
modules = [ modules = [
./hardware-configuration.nix ./hardware-configuration.nix
./disks.nix
../../modules/common ../../modules/common
../../modules/nixos ../../modules/nixos
(removeAttrs globals [ "mail.server" ]) (removeAttrs globals [ "mail.server" ])
wsl.nixosModules.wsl wsl.nixosModules.wsl
home-manager.nixosModules.home-manager home-manager.nixosModules.home-manager
disko.nixosModules.disko
{ {
server = true; server = true;
gui.enable = false; gui.enable = false;
@ -37,11 +39,11 @@ nixpkgs.lib.nixosSystem {
boot.zfs.enabled = true; boot.zfs.enabled = true;
boot.kernelPackages = boot.kernelPackages =
config.boot.zfs.package.latestCompatibleLinuxPackages; config.boot.zfs.package.latestCompatibleLinuxPackages;
boot.zfs.extraPools = [ "mypool" ]; # boot.zfs.extraPools = [ "mypool" ];
services.zfs.autoScrub.enable = true; # services.zfs.autoScrub.enable = true;
services.zfs.autoScrub.interval = "daily"; # services.zfs.autoScrub.interval = "daily";
services.nfs.server.enable = true; # services.nfs.server.enable = true;
} }
]; ];

View File

@ -1,129 +1,167 @@
{ bootDisk, storageDisks ? [ "/dev/vdb" "/dev/vdc" ], ... }: { { ... }: {
disk = { disko.devices = {
boot = { disk = {
type = "disk"; boot = {
device = "/dev/whatever"; type = "disk";
content = { device = "/dev/nvme0n1";
type = "table"; content = {
format = "gpt"; type = "table";
partitions = [ format = "gpt";
{ partitions = [
{
type = "partition";
name = "ESP";
start = "0";
end = "512MiB";
fs-type = "fat32";
bootable = true;
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
}
{
type = "partition";
name = "root";
start = "512MiB";
end = "100%";
part-type = "primary";
bootable = true;
content = {
type = "filesystem";
format = "ext4";
mountpoint = "/";
};
}
];
};
};
sda = {
type = "disk";
device = "/dev/sda";
content = {
type = "table";
format = "gpt";
partitions = [{
type = "partition"; type = "partition";
name = "ESP"; name = "zfs";
start = "0"; start = "128MiB";
end = "512MiB";
fs-type = "fat32";
bootable = true;
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
};
}
{
type = "partition";
name = "root";
start = "512MiB";
end = "100%"; end = "100%";
part-type = "primary";
bootable = true;
content = { content = {
type = "filesystem"; type = "zfs";
format = "ext4"; pool = "tank";
mountpoint = "/";
}; };
} }];
]; };
};
sdb = {
type = "disk";
device = "/dev/sdb";
content = {
type = "table";
format = "gpt";
partitions = [{
type = "partition";
name = "zfs";
start = "128MiB";
end = "100%";
content = {
type = "zfs";
pool = "tank";
};
}];
};
};
sdc = {
type = "disk";
device = "/dev/sdc";
content = {
type = "table";
format = "gpt";
partitions = [{
type = "partition";
name = "zfs";
start = "128MiB";
end = "100%";
content = {
type = "zfs";
pool = "tank";
};
}];
};
}; };
}; };
a = { zpool = {
type = "disk"; tank = {
device = builtins.elemAt storageDisks 1; type = "zpool";
content = { mode = "raidz1";
type = "table"; rootFsOptions = {
format = "gpt"; compression = "on"; # lz4 by default
partitions = [{ "com.sun:auto-snapshot" = "false";
type = "partition"; ashift = 12;
name = "zfs"; };
start = "128MiB"; # mountpoint = "/";
end = "100%";
content = {
type = "zfs";
pool = "tank";
};
}];
};
};
};
zpool = {
tank = {
type = "zpool";
mode = "raidz1";
rootFsOptions = {
compression = "on"; # lz4 by default
"com.sun:auto-snapshot" = "false";
ashift = 12;
};
# mountpoint = "/";
datasets = { datasets = {
media = { media = {
zfs_type = "filesystem"; zfs_type = "filesystem";
mountpoint = "none";
options."com.sun:auto-snapshot" = "false";
};
# "media/movies" = {
# zfs_type = "filesystem";
# mountpoint = "/media/movies";
# options.recordsize = "1M";
# };
# "media/tv" = {
# zfs_type = "filesystem";
# mountpoint = "/media/tv";
# options.recordsize = "1M";
# };
# "media/books" = {
# zfs_type = "filesystem";
# mountpoint = "/media/books";
# };
# archive = {
# zfs_type = "filesystem";
# mountpoint = "/archive";
# options.compression = "zstd";
# options."com.sun:auto-snapshot" = "true";
# };
# zfs_unmounted_fs = {
# zfs_type = "filesystem";
# options.mountpoint = "none";
# };
# zfs_legacy_fs = {
# zfs_type = "filesystem";
# options.mountpoint = "legacy";
# mountpoint = "/zfs_legacy_fs";
# };
# zfs_testvolume = {
# zfs_type = "volume";
# size = "10M";
# content = {
# type = "filesystem";
# format = "ext4";
# mountpoint = "/ext4onzfs";
# };
# };
encrypted = {
zfs_type = "filesystem";
size = "20M";
options = {
mountpoint = "none"; mountpoint = "none";
encryption = "aes-256-gcm"; options."com.sun:auto-snapshot" = "false";
keyformat = "passphrase";
keylocation = "file:///tmp/secret.key";
}; };
}; # "media/movies" = {
"encrypted/test" = { # zfs_type = "filesystem";
zfs_type = "filesystem"; # mountpoint = "/media/movies";
size = "2M"; # options.recordsize = "1M";
mountpoint = "/zfs_crypted"; # };
# "media/tv" = {
# zfs_type = "filesystem";
# mountpoint = "/media/tv";
# options.recordsize = "1M";
# };
# "media/books" = {
# zfs_type = "filesystem";
# mountpoint = "/media/books";
# };
# archive = {
# zfs_type = "filesystem";
# mountpoint = "/archive";
# options.compression = "zstd";
# options."com.sun:auto-snapshot" = "true";
# };
# zfs_unmounted_fs = {
# zfs_type = "filesystem";
# options.mountpoint = "none";
# };
# zfs_legacy_fs = {
# zfs_type = "filesystem";
# options.mountpoint = "legacy";
# mountpoint = "/zfs_legacy_fs";
# };
# zfs_testvolume = {
# zfs_type = "volume";
# size = "10M";
# content = {
# type = "filesystem";
# format = "ext4";
# mountpoint = "/ext4onzfs";
# };
# };
# encrypted = {
# zfs_type = "filesystem";
# size = "20M";
# options = {
# mountpoint = "none";
# encryption = "aes-256-gcm";
# keyformat = "passphrase";
# keylocation = "file:///tmp/secret.key";
# };
# };
# "encrypted/test" = {
# zfs_type = "filesystem";
# size = "2M";
# mountpoint = "/zfs_crypted";
# };
}; };
}; };
}; };

View File

@ -0,0 +1,29 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
boot.initrd.availableKernelModules =
[ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
}