blob: e1daffd667cc80b127c20ddf38d51d15fda4df75 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
{
description = "Minimal NixOS installation media";
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
outputs =
{
self,
nixpkgs,
}:
{
packages.x86_64-linux.default = self.nixosConfigurations.chaos.config.system.build.isoImage;
nixosConfigurations.chaos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
(
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [ (modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix") ];
boot.kernelParams = [ "console=ttyS0,115200n8" ];
boot.loader.grub.extraConfig = ''
serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
terminal_input serial
terminal_output serial
'';
nix.settings.experimental-features = [
"nix-command"
"flakes"
];
programs.git = {
enable = true;
config.user = {
name = "Root user of ${config.networking.hostName}";
email = "root@${config.networking.hostName}";
};
};
networking = {
hostName = "chaos";
networkmanager.enable = lib.mkForce false;
wireless = {
enable = true;
networks.Quentinternational.pskRaw = "ext:hotspot";
networks.Quentintranet.pskRaw = "ext:home";
secretsFile = "/run/wpa_supplicant.secrets";
};
};
users.users.root.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK4wGbl3++lqCjLUhoRyABBrVEeNhIXYO4371srkRoyq qaristote@latitude-7490"
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEvPsKWQXX/QsFQjJU0CjG4LllvUVZme45d9JeS/yhLt qaristote@precision-3571"
];
time.timeZone = "Europe/Paris";
i18n = {
defaultLocale = "fr_FR.UTF-8";
extraLocaleSettings.LANG = "en_US.UTF-8";
};
console = {
"font" = "Lat2-Terminus32";
keyMap = "fr";
};
environment.systemPackages = with pkgs; [
vim
(pkgs.writeShellApplication {
name = "connect-wifi";
text = ''
vim ${config.networking.wireless.secretsFile}
systemctl restart wpa_supplicant.service
journalctl -xfeu wpa_supplicant.service
'';
})
(pkgs.writeShellApplication {
name = "format-disk";
text = ''
DISK="$1"
BOOT="$DISK$2"
CRYPT="$DISK$3"
# create crypt
cryptsetup luksFormat "$CRYPT"
cryptsetup luksOpen "$CRYPT" crypt
until [ -e /dev/mapper/crypt ]
do
sleep 1
done
# split into logical volumes
pvcreate /dev/mapper/crypt
vgcreate nixos /dev/mapper/crypt
echo '==================================================================='
echo '==================================================================='
echo ' lsmem'
echo '==================================================================='
lsmem
echo '==================================================================='
echo 'Input swapsize:'
read -r SWAPSIZE
lvcreate -L "$SWAPSIZE" --name swap nixos
lvcreate -l 100%FREE --name root nixos
# create file systems
mkswap /dev/nixos/swap
mkfs.ext4 /dev/nixos/root
mkfs.fat -F 32 -n boot "$BOOT"
# mount
mount /dev/nixos/root /mnt
mkdir /mnt/boot
mount "$BOOT" /mnt/boot
swapon /dev/nixos/swap
# create luks keys
mkdir --parents /mnt/etc/luks/keys && pushd "$_"
dd bs=1k count=4 if=/dev/random of=master
dd bs=1k count=4 if=/dev/random of=tmp
chmod 400 master tmp
cryptsetup luksAddKey "$CRYPT" master
popd
'';
})
(pkgs.writeShellApplication {
name = "mount-system";
text = ''
DISK="$1"
BOOT="$DISK$2"
CRYPT="$DISK$3"
cryptsetup open "$CRYPT" crypt
until [ -e /dev/nixos ]
do
sleep 1
done
mount /dev/nixos/root /mnt
mount "$BOOT" /mnt/boot
swapon /dev/nixos/swap
'';
})
(pkgs.writeShellApplication {
name = "write-secrets";
text = ''
for SERVICE in wpa_supplicant msmtp
do
DIR=/mnt/etc/"$SERVICE"
mkdir --parents "$DIR"
vim "$DIR"/secrets
chmod 500 "$DIR"/secrets || true
rm --dir "$DIR" || true
done
'';
})
];
}
)
];
};
};
}
|