···9697- [atuin](https://github.com/ellie/atuin), a sync server for shell history. Available as [services.atuin](#opt-services.atuin.enable).
980099- [esphome](https://esphome.io), a dashboard to configure ESP8266/ESP32 devices for use with Home Automation systems. Available as [services.esphome](#opt-services.esphome.enable).
100101- [networkd-dispatcher](https://gitlab.com/craftyguy/networkd-dispatcher), a dispatcher service for systemd-networkd connection status changes. Available as [services.networkd-dispatcher](#opt-services.networkd-dispatcher.enable).
···566- `gitea` module options have been changed to be RFC042 conforming (i.e. some options were moved to be located under `services.gitea.settings`)
567568- `boot.initrd.luks.device.<name>` has a new `tryEmptyPassphrase` option, this is useful for OEM's who need to install an encrypted disk with a future settable passphrase
00569570- Lisp gained a [manual section](https://nixos.org/manual/nixpkgs/stable/#lisp), documenting a new and backwards incompatible interface. The previous interface will be removed in a future release.
571
···9697- [atuin](https://github.com/ellie/atuin), a sync server for shell history. Available as [services.atuin](#opt-services.atuin.enable).
9899+- [SFTPGo](https://github.com/drakkan/sftpgo), a fully featured and highly configurable SFTP server with optional HTTP/S, FTP/S and WebDAV support. Available as [services.sftpgo](options.html#opt-services.sftpgo.enable).
100+101- [esphome](https://esphome.io), a dashboard to configure ESP8266/ESP32 devices for use with Home Automation systems. Available as [services.esphome](#opt-services.esphome.enable).
102103- [networkd-dispatcher](https://gitlab.com/craftyguy/networkd-dispatcher), a dispatcher service for systemd-networkd connection status changes. Available as [services.networkd-dispatcher](#opt-services.networkd-dispatcher.enable).
···568- `gitea` module options have been changed to be RFC042 conforming (i.e. some options were moved to be located under `services.gitea.settings`)
569570- `boot.initrd.luks.device.<name>` has a new `tryEmptyPassphrase` option, this is useful for OEM's who need to install an encrypted disk with a future settable passphrase
571+572+- there is a new `boot/stratisroot.nix` module that enables booting from a volume managed by the Stratis storage management daemon. Use `fileSystems.<name>.stratis.poolUuid` to configure the pool containing the fs.
573574- Lisp gained a [manual section](https://nixos.org/manual/nixpkgs/stable/#lisp), documenting a new and backwards incompatible interface. The previous interface will be removed in a future release.
575
···167 <!-- create mount point if not present -->
168 <mkmountpoint enable="${if cfg.createMountPoints then "1" else "0"}" remove="${if cfg.removeCreatedMountPoints then "true" else "false"}" />
169 <!-- specify the binaries to be called -->
170- <fusemount>${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) -o ${concatStringsSep "," (cfg.fuseMountOptions ++ [ "%(OPTIONS)" ])}</fusemount>
0171 <fuseumount>${pkgs.fuse}/bin/fusermount -u %(MNTPT)</fuseumount>
172- <cryptmount>${pkgs.pam_mount}/bin/mount.crypt -o ${concatStringsSep "," (cfg.cryptMountOptions ++ [ "%(OPTIONS)" ])} %(VOLUME) %(MNTPT)</cryptmount>
0173 <cryptumount>${pkgs.pam_mount}/bin/umount.crypt %(MNTPT)</cryptumount>
174 <pmvarrun>${pkgs.pam_mount}/bin/pmvarrun -u %(USER) -o %(OPERATION)</pmvarrun>
175 ${optionalString oflRequired "<ofl>${fake_ofl}/bin/fake_ofl %(SIGNAL) %(MNTPT)</ofl>"}
···167 <!-- create mount point if not present -->
168 <mkmountpoint enable="${if cfg.createMountPoints then "1" else "0"}" remove="${if cfg.removeCreatedMountPoints then "true" else "false"}" />
169 <!-- specify the binaries to be called -->
170+ <!-- the comma in front of the options is necessary for empty options -->
171+ <fusemount>${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) -o ,${concatStringsSep "," (cfg.fuseMountOptions ++ [ "%(OPTIONS)" ])}'</fusemount>
172 <fuseumount>${pkgs.fuse}/bin/fusermount -u %(MNTPT)</fuseumount>
173+ <!-- the comma in front of the options is necessary for empty options -->
174+ <cryptmount>${pkgs.pam_mount}/bin/mount.crypt -o ,${concatStringsSep "," (cfg.cryptMountOptions ++ [ "%(OPTIONS)" ])} %(VOLUME) %(MNTPT)</cryptmount>
175 <cryptumount>${pkgs.pam_mount}/bin/umount.crypt %(MNTPT)</cryptumount>
176 <pmvarrun>${pkgs.pam_mount}/bin/pmvarrun -u %(USER) -o %(OPERATION)</pmvarrun>
177 ${optionalString oflRequired "<ofl>${fake_ofl}/bin/fake_ofl %(SIGNAL) %(MNTPT)</ofl>"}
···36 description = lib.mdDoc "Location of the mounted file system.";
37 };
3800000000039 device = mkOption {
40 default = null;
41 example = "/dev/sda";
···36 description = lib.mdDoc "Location of the mounted file system.";
37 };
3839+ stratis.poolUuid = lib.mkOption {
40+ type = types.uniq (types.nullOr types.str);
41+ description = lib.mdDoc ''
42+ UUID of the stratis pool that the fs is located in
43+ '';
44+ example = "04c68063-90a5-4235-b9dd-6180098a20d9";
45+ default = null;
46+ };
47+48 device = mkOption {
49 default = null;
50 example = "/dev/sda";
+6-5
nixos/modules/virtualisation/proxmox-image.nix
···187 guestAgentSupport = false;
188 }).overrideAttrs ( super: rec {
189190- version = "7.0.0";
191 src = pkgs.fetchurl {
192 url= "https://download.qemu.org/qemu-${version}.tar.xz";
193- sha256 = "sha256-9rN1x5UfcoQCeYsLqrsthkeMpT1Eztvvq74cRr9G+Dk=";
194 };
195 patches = [
196 # Proxmox' VMA tool is published as a particular patch upon QEMU
197 (pkgs.fetchpatch {
198 url =
199 let
200- rev = "1976ca460796f28447b41e3618e5c1e234035dd5";
201- path = "debian/patches/pve/0026-PVE-Backup-add-vma-backup-format-code.patch";
202 in "https://git.proxmox.com/?p=pve-qemu.git;a=blob_plain;hb=${rev};f=${path}";
203- hash = "sha256-2Dz+ceTwrcyYYxi76RtyY3v15/2pwGcDhFuoZWlgbjc=";
204 })
205206 # Proxmox' VMA tool uses O_DIRECT which fails on tmpfs
···220 ];
221222 buildInputs = super.buildInputs ++ [ pkgs.libuuid ];
0223224 });
225 in
···187 guestAgentSupport = false;
188 }).overrideAttrs ( super: rec {
189190+ version = "7.2.1";
191 src = pkgs.fetchurl {
192 url= "https://download.qemu.org/qemu-${version}.tar.xz";
193+ sha256 = "sha256-jIVpms+dekOl/immTN1WNwsMLRrQdLr3CYqCTReq1zs=";
194 };
195 patches = [
196 # Proxmox' VMA tool is published as a particular patch upon QEMU
197 (pkgs.fetchpatch {
198 url =
199 let
200+ rev = "abb04bb6272c1202ca9face0827917552b9d06f6";
201+ path = "debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch";
202 in "https://git.proxmox.com/?p=pve-qemu.git;a=blob_plain;hb=${rev};f=${path}";
203+ hash = "sha256-3d0HHdvaExCry6zcULnziYnWIAnn24vECkI4sjj2BMg=";
204 })
205206 # Proxmox' VMA tool uses O_DIRECT which fails on tmpfs
···220 ];
221222 buildInputs = super.buildInputs ++ [ pkgs.libuuid ];
223+ nativeBuildInputs = super.nativeBuildInputs ++ [ pkgs.perl ];
224225 });
226 in
···34 meta = {
5 maintainers = with lib.maintainers; [ OPNA2608 ];
6- # Natively running Mir has problems with capturing the first registered libinput device.
7- # In our VM runners on ARM and on some hardware configs (my RPi4, distro-independent), this misses the keyboard.
8- # It can be worked around by dis- and reconnecting the affected hardware, but we can't do this in these tests.
9- # https://github.com/MirServer/mir/issues/2837
10- broken = pkgs.stdenv.hostPlatform.isAarch;
11 };
1213 nodes.machine = { config, ... }: {
···13 targetFile: new URL("default.nix", import.meta.url).pathname,
14};
150000000000016async function getLatestVersion() {
17 const requestResult = await fetch(constants.githubUrl);
18 if (!requestResult.ok) {
···3738 let sha256 = hashFileContent.
39 split('\n').
040 filter((line) => line.endsWith(targetFile))[0].
41 split(' ')[0];
42···47 // Upstream provides a file with the hashes of the files, but it's not in the SRI format, and it refers to the compressed tarball
48 // So let's just use nix-prefetch-url to get the hashes of the decompressed tarball, and `nix hash to-sri` to convert them to SRI format
49 const hashFileUrl = constants.sha256FileURL(newVersion);
50- const hashFileContent = await fetch(hashFileUrl).then((response) => response.text());
00000005152 let x86_64;
53 let aarch64;
54 console.log("Getting new hashes");
55 let promises = [
56- getSha256Sum(hashFileContent, constants.x86_64FileName(newVersion)).then((hash) => { x86_64 = hash; }),
57- getSha256Sum(hashFileContent, constants.aarch64FileName(newVersion)).then((hash) => { aarch64 = hash; }),
58 ];
59 await Promise.all(promises);
60 return { x86_64, aarch64 };
···13 targetFile: new URL("default.nix", import.meta.url).pathname,
14};
1516+async function utf16ToUtf8(blob) {
17+ // Sometime, upstream saves the SHA256SUMS.txt file in UTF-16, which absolutely breaks node's string handling
18+ // So we need to convert this blob to UTF-8
19+20+ // We need to skip the first 2 bytes, which are the BOM
21+ const arrayBuffer = await blob.slice(2).arrayBuffer();
22+ const buffer = Buffer.from(arrayBuffer);
23+ const utf8String = buffer.toString('utf16le');
24+ return utf8String;
25+}
26+27async function getLatestVersion() {
28 const requestResult = await fetch(constants.githubUrl);
29 if (!requestResult.ok) {
···4849 let sha256 = hashFileContent.
50 split('\n').
51+ map(line => line.replace("\r", "")). // Side-effect of the UTF-16 conversion, if the file was created from Windows
52 filter((line) => line.endsWith(targetFile))[0].
53 split(' ')[0];
54···59 // Upstream provides a file with the hashes of the files, but it's not in the SRI format, and it refers to the compressed tarball
60 // So let's just use nix-prefetch-url to get the hashes of the decompressed tarball, and `nix hash to-sri` to convert them to SRI format
61 const hashFileUrl = constants.sha256FileURL(newVersion);
62+ const hashFileContent = await fetch(hashFileUrl).then((response) => response.blob());
63+ const headerbuffer = await hashFileContent.slice(0, 2).arrayBuffer()
64+ const header = Buffer.from(headerbuffer).toString('hex');
65+66+ // We must detect if it's UTF-16 or UTF-8. If it's UTF-16, we must convert it to UTF-8, otherwise just use it as-is
67+ const hashFileContentString = header == 'fffe' ?
68+ await utf16ToUtf8(hashFileContent) :
69+ await hashFileContent.text();
7071 let x86_64;
72 let aarch64;
73 console.log("Getting new hashes");
74 let promises = [
75+ getSha256Sum(hashFileContentString, constants.x86_64FileName(newVersion)).then((hash) => { x86_64 = hash; }),
76+ getSha256Sum(hashFileContentString, constants.aarch64FileName(newVersion)).then((hash) => { aarch64 = hash; }),
77 ];
78 await Promise.all(promises);
79 return { x86_64, aarch64 };
···7# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
89[dependencies]
010goblin = "0.5.0"
···7# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
89[dependencies]
10+eyre = "0.6.8"
11goblin = "0.5.0"
···1+import ./generic.nix {
2+ version = "0.1.0-beta.3";
3+ hash = "sha256-0p+1cMn9PU+Jk2JW7G+sdzxhMaI3gEAk5w2nm05oBSU=";
4+ outputHashes = {
5+ "uniffi-0.21.0" = "sha256-blKCfCsSNtr8NtO7Let7VJ/9oGuW9Eu8j9A6/oHUcP0=";
6+ };
7+ cargoLock = ./Cargo-beta.3.lock;
8+ patches = [
9+ # This is needed because two versions of indexed_db_futures are present (which will fail to vendor, see https://github.com/rust-lang/cargo/issues/10310).
10+ # (matrix-sdk-crypto-nodejs doesn't use this dependency, we only need to remove it to vendor the dependencies successfully.)
11+ ./remove-duplicate-dependency.patch
12+ ];
13+}
···52 '';
5354 cmakeFlags = [
0055 "-DWITH_OPENSSL=ON"
56 # on darwin this defaults to ON but we want to build against unixODBC
57 "-DWITH_IODBC=OFF"
···52 '';
5354 cmakeFlags = [
55+ "-DODBC_LIB_DIR=${lib.getLib unixODBC}/lib"
56+ "-DODBC_INCLUDE_DIR=${lib.getDev unixODBC}/include"
57 "-DWITH_OPENSSL=ON"
58 # on darwin this defaults to ON but we want to build against unixODBC
59 "-DWITH_IODBC=OFF"