Skip to content

Commit 9bb76c2

Browse files
committed
refact(recover): refact into machine module
1 parent fc3ceed commit 9bb76c2

File tree

4 files changed

+176
-161
lines changed

4 files changed

+176
-161
lines changed

flake.nix

+34-44
Original file line numberDiff line numberDiff line change
@@ -11,63 +11,53 @@
1111
os = "linux";
1212
system = "${platform}-${os}";
1313
pkgs = import inputs.nixpkgs { inherit system; };
14-
mkSystem = options:
15-
let
16-
inherit (inputs.nixpkgs.lib) nixosSystem;
17-
inherit (inputs.generators) nixosGenerate;
18-
inherit (builtins) hasAttr;
19-
in
20-
if hasAttr "format" options then
21-
nixosGenerate options
22-
else
23-
nixosSystem options;
24-
recover = mkSystem {
25-
inherit system;
26-
modules = [ ./recover.nix ];
14+
lib = {
15+
mkSystem = options:
16+
let
17+
inherit (inputs.nixpkgs.lib) nixosSystem;
18+
inherit (inputs.generators) nixosGenerate;
19+
inherit (builtins) hasAttr;
20+
in
21+
if hasAttr "format" options then
22+
nixosGenerate options
23+
else
24+
nixosSystem options;
25+
# TODO: find a faster way to run vm in devShell
26+
mkRecoverVm = efi: name: args: pkgs.writeShellApplication {
27+
name = "${name}-vm";
28+
text = ''
29+
IMG="${name}-efi.img"
30+
BIOS="${name}-efi-bios.img"
31+
ARGS="${args}"
32+
cp -ui --reflink=auto ${pkgs.OVMF.fd}/FV/OVMF.fd "$BIOS"
33+
chmod a+w "$BIOS"
34+
cp -ui --reflink=auto ${efi}/nixos.img "$IMG"
35+
chmod a+w "$IMG"
36+
qemu-system-${platform} \
37+
-bios "$BIOS" \
38+
-drive file="$IMG",format=raw \
39+
-m 2G \
40+
$ARGS
41+
'';
42+
runtimeInputs = with pkgs; [ qemu ];
43+
};
2744
};
28-
29-
recover-efi = mkSystem {
30-
inherit system;
31-
modules = [ ./recover.nix ];
32-
format = "raw-efi";
33-
};
34-
35-
# TODO: find a faster way to run recover in devShell
36-
mk-recover-vm = args: pkgs.writeShellApplication {
37-
name = "recover-vm";
38-
text = ''
39-
IMG="recover-efi.img"
40-
BIOS="recover-efi-bios.img"
41-
ARGS="${args}"
42-
cp -ui --reflink=auto ${pkgs.OVMF.fd}/FV/OVMF.fd "$BIOS"
43-
chmod a+w "$BIOS"
44-
cp -ui --reflink=auto ${recover-efi}/nixos.img "$IMG"
45-
chmod a+w "$IMG"
46-
qemu-system-${platform} \
47-
-bios "$BIOS" \
48-
-drive file="$IMG",format=raw \
49-
-m 2G \
50-
$ARGS
51-
'';
52-
runtimeInputs = with pkgs; [ tree rsync qemu ];
53-
};
54-
recover-vm = mk-recover-vm "";
55-
recover-kvm = mk-recover-vm "--enable-kvm";
45+
machines = import ./machines { inherit system pkgs lib; };
5646
in
5747
{
5848
nixosConfigurations = {
59-
inherit recover;
49+
inherit (machines.recover) recover-os;
6050
};
6151

6252
packages.${system} = {
63-
inherit recover-efi recover-vm recover-kvm;
53+
inherit (machines.recover) recover-efi recover-vm recover-kvm;
6454
};
6555

6656
devShells.${system}.default =
6757
pkgs.mkShell
6858
{
6959
packages =
70-
[
60+
with machines.recover; [
7161
recover-vm
7262
recover-kvm
7363
];

machines/default.nix

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ctx:
2+
{
3+
recover = import ./recover ctx;
4+
}

machines/recover/default.nix

+138
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
{ system, lib, pkgs, ... }:
2+
let
3+
inherit (lib) mkSystem mkRecoverVm;
4+
inherit (pkgs.lib) mkDefault;
5+
recover-module = {
6+
nix = {
7+
extraOptions = ''
8+
experimental-features = nix-command flakes repl-flake
9+
'';
10+
};
11+
nixpkgs.config.allowUnfree = true;
12+
hardware.enableAllFirmware = true;
13+
users = {
14+
users.recover = {
15+
password = "recover";
16+
isNormalUser = true;
17+
home = "/home/recover";
18+
description = "Recover";
19+
extraGroups = [ "wheel" "networkmanager" ];
20+
};
21+
mutableUsers = false;
22+
};
23+
networking = {
24+
hostName = "recover-os";
25+
networkmanager.enable = true;
26+
};
27+
boot = {
28+
kernelParams = [
29+
"copytoram"
30+
"console=ttyS0,115200"
31+
"console=tty1"
32+
"boot.shell_on_fail"
33+
];
34+
supportedFilesystems = [
35+
"btrfs"
36+
"exfat"
37+
"ext2"
38+
"ext4"
39+
"ntfs"
40+
"vfat"
41+
];
42+
loader = {
43+
timeout = 15;
44+
grub = {
45+
enable = true;
46+
device = "nodev";
47+
efiSupport = true;
48+
useOSProber = true;
49+
memtest86.enable = true;
50+
};
51+
};
52+
};
53+
fileSystems."/".device = mkDefault "none";
54+
55+
environment.systemPackages = with pkgs; [
56+
btop
57+
coreutils
58+
curl
59+
ddrescue
60+
efibootmgr
61+
efivar
62+
findutils
63+
gnugrep
64+
gnused
65+
gnutar
66+
gptfdisk
67+
hdparm
68+
inetutils
69+
less
70+
lsof
71+
parted
72+
pciutils
73+
ripgrep
74+
rsync
75+
sdparm
76+
smartmontools
77+
sshfs
78+
time
79+
testdisk
80+
unzip
81+
usbutils
82+
wget
83+
which
84+
zip
85+
ntfs3g
86+
f2fs-tools
87+
jfsutils
88+
nilfs-utils
89+
reiserfsprogs
90+
xfsprogs
91+
xfsdump
92+
gparted
93+
];
94+
95+
services = {
96+
openssh.enable = true;
97+
98+
xserver = {
99+
enable = true;
100+
windowManager.xmonad.enable = true;
101+
displayManager = {
102+
defaultSession = "none+xmonad";
103+
autoLogin = {
104+
enable = true;
105+
user = "recover";
106+
};
107+
};
108+
};
109+
};
110+
111+
programs = {
112+
tmux.enable = true;
113+
neovim = {
114+
enable = true;
115+
viAlias = true;
116+
vimAlias = true;
117+
};
118+
mtr.enable = true;
119+
htop.enable = true;
120+
};
121+
};
122+
in
123+
rec {
124+
recover-os = mkSystem {
125+
inherit system;
126+
modules = [ recover-module ];
127+
};
128+
129+
recover-efi = mkSystem {
130+
inherit system;
131+
modules = [ recover-module ];
132+
format = "raw-efi";
133+
};
134+
135+
recover-vm = mkRecoverVm recover-efi "recover" "";
136+
137+
recover-kvm = mkRecoverVm recover-efi "recover" "--enable-kvm";
138+
}

recover.nix

-117
This file was deleted.

0 commit comments

Comments
 (0)