From 252f20aaa2744d9fe6e3b4ade2d2f44c0448ca06 Mon Sep 17 00:00:00 2001 From: Alexandru Scvortov Date: Sun, 6 Mar 2022 13:49:57 +0000 Subject: nbd: add programs.nbd, services.nbd, and test Changes: nbd: Update nixos/modules/services/networking/nbd.nix Co-authored-by: pennae <82953136+pennae@users.noreply.github.com> nbd: Update nixos/modules/services/networking/nbd.nix Co-authored-by: pennae <82953136+pennae@users.noreply.github.com> nbd: Update nixos/tests/nbd.nix Co-authored-by: pennae <82953136+pennae@users.noreply.github.com> nbd: generalize options in nbd service nbd: harden service nbd: Update nixos/modules/services/networking/nbd.nix Co-authored-by: pennae <82953136+pennae@users.noreply.github.com> nbd: Update nixos/modules/services/networking/nbd.nix Co-authored-by: pennae <82953136+pennae@users.noreply.github.com> nbd: refactor code a bit and BindPaths automatically --- .../from_md/release-notes/rl-2205.section.xml | 7 + nixos/doc/manual/release-notes/rl-2205.section.md | 2 + nixos/modules/module-list.nix | 2 + nixos/modules/programs/nbd.nix | 19 +++ nixos/modules/services/networking/nbd.nix | 146 +++++++++++++++++++++ nixos/tests/all-tests.nix | 1 + nixos/tests/nbd.nix | 87 ++++++++++++ pkgs/tools/networking/nbd/default.nix | 6 +- 8 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 nixos/modules/programs/nbd.nix create mode 100644 nixos/modules/services/networking/nbd.nix create mode 100644 nixos/tests/nbd.nix diff --git a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml index 4f4a5a3394e6..749a50c8f5af 100644 --- a/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml +++ b/nixos/doc/manual/from_md/release-notes/rl-2205.section.xml @@ -248,6 +248,13 @@ services.ethercalc. + + + nbd, a + Network Block Device server. Available as + services.nbd. + + timetagger, diff --git a/nixos/doc/manual/release-notes/rl-2205.section.md b/nixos/doc/manual/release-notes/rl-2205.section.md index c4281561f165..0b78c1899173 100644 --- a/nixos/doc/manual/release-notes/rl-2205.section.md +++ b/nixos/doc/manual/release-notes/rl-2205.section.md @@ -73,6 +73,8 @@ In addition to numerous new and upgraded packages, this release has the followin - [ethercalc](https://github.com/audreyt/ethercalc), an online collaborative spreadsheet. Available as [services.ethercalc](options.html#opt-services.ethercalc.enable). +- [nbd](https://nbd.sourceforge.io/), a Network Block Device server. Available as [services.nbd](options.html#opt-services.nbd.server.enable). + - [timetagger](https://timetagger.app), an open source time-tracker with an intuitive user experience and powerful reporting. [services.timetagger](options.html#opt-services.timetagger.enable). - [rstudio-server](https://www.rstudio.com/products/rstudio/#rstudio-server), a browser-based version of the RStudio IDE for the R programming language. Available as [services.rstudio-server](options.html#opt-services.rstudio-server.enable). diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index f3570c3f1230..442bcc39d596 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -179,6 +179,7 @@ ./programs/msmtp.nix ./programs/mtr.nix ./programs/nano.nix + ./programs/nbd.nix ./programs/neovim.nix ./programs/nm-applet.nix ./programs/npm.nix @@ -818,6 +819,7 @@ ./services/networking/nar-serve.nix ./services/networking/nat.nix ./services/networking/nats.nix + ./services/networking/nbd.nix ./services/networking/ndppd.nix ./services/networking/nebula.nix ./services/networking/networkmanager.nix diff --git a/nixos/modules/programs/nbd.nix b/nixos/modules/programs/nbd.nix new file mode 100644 index 000000000000..fea9bc1ff71a --- /dev/null +++ b/nixos/modules/programs/nbd.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.programs.nbd; +in +{ + options = { + programs.nbd = { + enable = mkEnableOption "Network Block Device (nbd) support"; + }; + }; + + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; [ nbd ]; + boot.kernelModules = [ "nbd" ]; + }; +} diff --git a/nixos/modules/services/networking/nbd.nix b/nixos/modules/services/networking/nbd.nix new file mode 100644 index 000000000000..87f8c41a8e5c --- /dev/null +++ b/nixos/modules/services/networking/nbd.nix @@ -0,0 +1,146 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.nbd; + configFormat = pkgs.formats.ini { }; + iniFields = with types; attrsOf (oneOf [ bool int float str ]); + serverConfig = configFormat.generate "nbd-server-config" + ({ + generic = + (cfg.server.extraOptions // { + user = "root"; + group = "root"; + port = cfg.server.listenPort; + } // (optionalAttrs (cfg.server.listenAddress != null) { + listenaddr = cfg.server.listenAddress; + })); + } + // (mapAttrs + (_: { path, allowAddresses, extraOptions }: + extraOptions // { + exportname = path; + } // (optionalAttrs (allowAddresses != null) { + authfile = pkgs.writeText "authfile" (concatStringsSep "\n" allowAddresses); + })) + cfg.server.exports) + ); + splitLists = + partition + (path: hasPrefix "/dev/" path) + (mapAttrsToList (_: { path, ... }: path) cfg.server.exports); + allowedDevices = splitLists.right; + boundPaths = splitLists.wrong; +in +{ + options = { + services.nbd = { + server = { + enable = mkEnableOption "the Network Block Device (nbd) server"; + + listenPort = mkOption { + type = types.port; + default = 10809; + description = "Port to listen on. The port is NOT automatically opened in the firewall."; + }; + + extraOptions = mkOption { + type = iniFields; + default = { + allowlist = false; + }; + description = '' + Extra options for the server. See + nbd-server + 5. + ''; + }; + + exports = mkOption { + description = "Files or block devices to make available over the network."; + default = { }; + type = with types; attrsOf + (submodule { + options = { + path = mkOption { + type = str; + description = "File or block device to export."; + example = "/dev/sdb1"; + }; + + allowAddresses = mkOption { + type = nullOr (listOf str); + default = null; + example = [ "10.10.0.0/24" "127.0.0.1" ]; + description = "IPs and subnets that are authorized to connect for this device. If not specified, the server will allow all connections."; + }; + + extraOptions = mkOption { + type = iniFields; + default = { + flush = true; + fua = true; + }; + description = '' + Extra options for this export. See + nbd-server + 5. + ''; + }; + }; + }); + }; + + listenAddress = mkOption { + type = with types; nullOr str; + description = "Address to listen on. If not specified, the server will listen on all interfaces."; + default = null; + example = "10.10.0.1"; + }; + }; + }; + }; + + config = mkIf cfg.server.enable { + boot.kernelModules = [ "nbd" ]; + + systemd.services.nbd-server = { + after = [ "network-online.target" ]; + before = [ "multi-user.target" ]; + wantedBy = [ "multi-user.target" ]; + serviceConfig = { + ExecStart = "${pkgs.nbd}/bin/nbd-server -C ${serverConfig}"; + Type = "forking"; + + DeviceAllow = map (path: "${path} rw") allowedDevices; + BindPaths = boundPaths; + + CapabilityBoundingSet = ""; + DevicePolicy = "closed"; + LockPersonality = true; + MemoryDenyWriteExecute = true; + NoNewPrivileges = true; + PrivateDevices = false; + PrivateMounts = true; + PrivateTmp = true; + PrivateUsers = true; + ProcSubset = "pid"; + ProtectClock = true; + ProtectControlGroups = true; + ProtectHome = true; + ProtectHostname = true; + ProtectKernelLogs = true; + ProtectKernelModules = true; + ProtectKernelTunables = true; + ProtectProc = "noaccess"; + ProtectSystem = "strict"; + RestrictAddressFamilies = "AF_INET AF_INET6"; + RestrictNamespaces = true; + RestrictRealtime = true; + RestrictSUIDSGID = true; + UMask = "0077"; + }; + }; + }; +} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 342e8f461b57..3548d50009ae 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -328,6 +328,7 @@ in nat.standalone = handleTest ./nat.nix { withFirewall = false; }; nats = handleTest ./nats.nix {}; navidrome = handleTest ./navidrome.nix {}; + nbd = handleTest ./nbd.nix {}; ncdns = handleTest ./ncdns.nix {}; ndppd = handleTest ./ndppd.nix {}; nebula = handleTest ./nebula.nix {}; diff --git a/nixos/tests/nbd.nix b/nixos/tests/nbd.nix new file mode 100644 index 000000000000..16255e68e8a1 --- /dev/null +++ b/nixos/tests/nbd.nix @@ -0,0 +1,87 @@ +import ./make-test-python.nix ({ pkgs, ... }: + let + listenPort = 30123; + testString = "It works!"; + mkCreateSmallFileService = { path, loop ? false }: { + script = '' + ${pkgs.coreutils}/bin/dd if=/dev/zero of=${path} bs=1K count=100 + ${pkgs.lib.optionalString loop + "${pkgs.util-linux}/bin/losetup --find ${path}"} + ''; + serviceConfig = { + Type = "oneshot"; + }; + wantedBy = [ "multi-user.target" ]; + before = [ "nbd-server.service" ]; + }; + in + { + name = "nbd"; + + nodes = { + server = { config, pkgs, ... }: { + # Create some small files of zeros to use as the ndb disks + ## `vault-pub.disk` is accessible from any IP + systemd.services.create-pub-file = + mkCreateSmallFileService { path = "/vault-pub.disk"; }; + ## `vault-priv.disk` is accessible only from localhost. + ## It's also a loopback device to test exporting /dev/... + systemd.services.create-priv-file = + mkCreateSmallFileService { path = "/vault-priv.disk"; loop = true; }; + + # Needed only for nbd-client used in the tests. + environment.systemPackages = [ pkgs.nbd ]; + + # Open the nbd port in the firewall + networking.firewall.allowedTCPPorts = [ listenPort ]; + + # Run the nbd server and expose the small file created above + services.nbd.server = { + enable = true; + exports = { + vault-pub = { + path = "/vault-pub.disk"; + }; + vault-priv = { + path = "/dev/loop0"; + allowAddresses = [ "127.0.0.1" "::1" ]; + }; + }; + listenAddress = "0.0.0.0"; + listenPort = listenPort; + }; + }; + + client = { config, pkgs, ... }: { + programs.nbd.enable = true; + }; + }; + + testScript = '' + testString = "${testString}" + + start_all() + server.wait_for_open_port(${toString listenPort}) + + # Client: Connect to the server, write a small string to the nbd disk, and cleanly disconnect + client.succeed("nbd-client server ${toString listenPort} /dev/nbd0 -name vault-pub -persist") + client.succeed(f"echo '{testString}' | dd of=/dev/nbd0 conv=notrunc") + client.succeed("nbd-client -d /dev/nbd0") + + # Server: Check that the string written by the client is indeed in the file + foundString = server.succeed(f"dd status=none if=/vault-pub.disk count={len(testString)}")[:len(testString)] + if foundString != testString: + raise Exception(f"Read the wrong string from nbd disk. Expected: '{testString}'. Found: '{foundString}'") + + # Client: Fail to connect to the private disk + client.fail("nbd-client server ${toString listenPort} /dev/nbd0 -name vault-priv -persist") + + # Server: Successfully connect to the private disk + server.succeed("nbd-client localhost ${toString listenPort} /dev/nbd0 -name vault-priv -persist") + server.succeed(f"echo '{testString}' | dd of=/dev/nbd0 conv=notrunc") + foundString = server.succeed(f"dd status=none if=/dev/loop0 count={len(testString)}")[:len(testString)] + if foundString != testString: + raise Exception(f"Read the wrong string from nbd disk. Expected: '{testString}'. Found: '{foundString}'") + server.succeed("nbd-client -d /dev/nbd0") + ''; + }) diff --git a/pkgs/tools/networking/nbd/default.nix b/pkgs/tools/networking/nbd/default.nix index 95c2f970999a..131793894841 100644 --- a/pkgs/tools/networking/nbd/default.nix +++ b/pkgs/tools/networking/nbd/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, fetchurl, pkg-config, glib, which }: +{ lib, stdenv, fetchurl, pkg-config, glib, which, nixosTests }: stdenv.mkDerivation rec { pname = "nbd"; @@ -21,6 +21,10 @@ stdenv.mkDerivation rec { doCheck = true; + passthru.tests = { + test = nixosTests.nbd; + }; + # Glib calls `clock_gettime', which is in librt. Linking that library # here ensures that a proper rpath is added to the executable so that # it can be loaded at run-time. -- cgit 1.4.1 From 12d29578c810dba32a39552de11b6b6eb0ce5622 Mon Sep 17 00:00:00 2001 From: ReplayCoding Date: Wed, 9 Mar 2022 13:47:37 -0800 Subject: iwd: move documentation to seperate output --- pkgs/os-specific/linux/iwd/default.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/os-specific/linux/iwd/default.nix b/pkgs/os-specific/linux/iwd/default.nix index 3f725e3e5b26..72ecaffe5f50 100644 --- a/pkgs/os-specific/linux/iwd/default.nix +++ b/pkgs/os-specific/linux/iwd/default.nix @@ -20,7 +20,7 @@ stdenv.mkDerivation rec { sha256 = "sha256-GcqmMqrZSgvSrsY8FJbPynNWTzSi5A6kmyq+xJ+2i3Y="; }; - outputs = [ "out" "man" ] + outputs = [ "out" "man" "doc" ] ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "test"; nativeBuildInputs = [ @@ -65,9 +65,9 @@ stdenv.mkDerivation rec { doCheck = true; postInstall = '' - mkdir -p $out/share - cp -a doc $out/share/ - cp -a README AUTHORS TODO $out/share/doc/ + mkdir -p $doc/share/doc + cp -a doc $doc/share/doc/iwd + cp -a README AUTHORS TODO $doc/share/doc/iwd '' + lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) '' mkdir -p $test/bin cp -a test/* $test/bin/ -- cgit 1.4.1 From 3eb490af12f0e886c34f92eee289f3fb1545a805 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Thu, 10 Mar 2022 12:24:18 +0000 Subject: deep-translator: 1.7.0 -> 1.8.0 --- pkgs/development/python-modules/deep-translator/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/deep-translator/default.nix b/pkgs/development/python-modules/deep-translator/default.nix index 0f67b2ae3529..fd6d4d478f46 100644 --- a/pkgs/development/python-modules/deep-translator/default.nix +++ b/pkgs/development/python-modules/deep-translator/default.nix @@ -2,11 +2,11 @@ buildPythonPackage rec { pname = "deep-translator"; - version = "1.7.0"; + version = "1.8.0"; src = fetchPypi { inherit pname version; - sha256 = "sha256-k4RhUZN/aC9D1NKkmCGZGZNU9In577RobBnDagMYHbo="; + sha256 = "sha256-2u4ZmLUEOwbN2sbPgLu9R1VdNevXBP4lBFuGw2aiRMg="; }; propagatedBuildInputs = [ -- cgit 1.4.1 From b21114c2dc5ba176bbf377eb978af81ee439775a Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Thu, 10 Mar 2022 18:54:07 +0000 Subject: python310Packages.glean-parser: 5.0.1 -> 5.1.0 --- pkgs/development/python-modules/glean-parser/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/glean-parser/default.nix b/pkgs/development/python-modules/glean-parser/default.nix index 52fdf6745c9f..30d4db0d2613 100644 --- a/pkgs/development/python-modules/glean-parser/default.nix +++ b/pkgs/development/python-modules/glean-parser/default.nix @@ -16,13 +16,13 @@ buildPythonPackage rec { pname = "glean_parser"; - version = "5.0.1"; + version = "5.1.0"; disabled = pythonOlder "3.6"; src = fetchPypi { inherit pname version; - sha256 = "sha256-MJ827VXy8e2CRyq4sY4d0B7etxBgRk4/hZybYOOLh9Q="; + sha256 = "sha256-8oMbaGsW5Lkw9OluNsXXe2IBNbjeoIb9vDjVOt+uHR0="; }; postPatch = '' -- cgit 1.4.1 From 7e2fbbfb2480eb1d40a0e91dd5032ba147cb565c Mon Sep 17 00:00:00 2001 From: Francesco Gazzetta Date: Thu, 10 Mar 2022 20:23:56 +0100 Subject: mtxclient: 0.6.2 -> 0.7.0 --- pkgs/development/libraries/mtxclient/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/mtxclient/default.nix b/pkgs/development/libraries/mtxclient/default.nix index 92285501748a..619ed721dff2 100644 --- a/pkgs/development/libraries/mtxclient/default.nix +++ b/pkgs/development/libraries/mtxclient/default.nix @@ -14,13 +14,13 @@ stdenv.mkDerivation rec { pname = "mtxclient"; - version = "0.6.2"; + version = "0.7.0"; src = fetchFromGitHub { owner = "Nheko-Reborn"; repo = "mtxclient"; rev = "v${version}"; - sha256 = "sha256-TsGoSVewQJlr0zj8qYEd+UU8DlncZDCqfrqTv89LEYU="; + sha256 = "sha256-iGw+qdw7heL5q7G0dwtl4PX2UA0Kka0FUmH610dM/00="; }; postPatch = '' -- cgit 1.4.1 From a8927248984fd57a9540ebb673a851c54f9033e3 Mon Sep 17 00:00:00 2001 From: Francesco Gazzetta Date: Thu, 10 Mar 2022 20:24:14 +0100 Subject: nheko: 0.9.1 -> 0.9.2 --- pkgs/applications/networking/instant-messengers/nheko/default.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/nheko/default.nix b/pkgs/applications/networking/instant-messengers/nheko/default.nix index bee1f7cf2891..080ceda94b4a 100644 --- a/pkgs/applications/networking/instant-messengers/nheko/default.nix +++ b/pkgs/applications/networking/instant-messengers/nheko/default.nix @@ -3,6 +3,7 @@ , fetchFromGitHub , fetchpatch , cmake +, asciidoc , cmark , lmdb , lmdbxx @@ -32,19 +33,20 @@ mkDerivation rec { pname = "nheko"; - version = "0.9.1"; + version = "0.9.2"; src = fetchFromGitHub { owner = "Nheko-Reborn"; repo = "nheko"; rev = "v${version}"; - sha256 = "sha256-KnWZ1DSTg8vtNSlpG5LGUG8YDHt25s9pMLpLuj0WLnM="; + sha256 = "sha256-roC1OIq0Vmj5rABNtH4IOMHX9aSlOMFC7ZHueuj/PmE="; }; nativeBuildInputs = [ lmdbxx cmake pkg-config + asciidoc ]; buildInputs = [ -- cgit 1.4.1 From 55ee7ab4a6b5281cf1c352bc714b07c59c4546ee Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Thu, 10 Mar 2022 20:25:49 +0100 Subject: lib.types.optionType: Only merge when necessary --- lib/tests/modules.sh | 3 +++ .../modules/adhoc-freeformType-survives-type-merge.nix | 14 ++++++++++++++ lib/types.nix | 4 +++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 lib/tests/modules/adhoc-freeformType-survives-type-merge.nix diff --git a/lib/tests/modules.sh b/lib/tests/modules.sh index e4bb7ad21900..350fe85e7487 100755 --- a/lib/tests/modules.sh +++ b/lib/tests/modules.sh @@ -311,6 +311,9 @@ checkConfigOutput '^"hello"$' config.theOption.str ./optionTypeMerging.nix # Test that types.optionType correctly annotates option locations checkConfigError 'The option .theOption.nested. in .other.nix. is already declared in .optionTypeFile.nix.' config.theOption.nested ./optionTypeFile.nix +# Test that types.optionType leaves types untouched as long as they don't need to be merged +checkConfigOutput 'ok' config.freeformItems.foo.bar ./adhoc-freeformType-survives-type-merge.nix + cat < Date: Fri, 11 Mar 2022 10:26:34 +1200 Subject: zfs: 2.1.2 -> 2.1.3 --- pkgs/os-specific/linux/zfs/default.nix | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pkgs/os-specific/linux/zfs/default.nix b/pkgs/os-specific/linux/zfs/default.nix index 7341240f95af..e3a856c12a4c 100644 --- a/pkgs/os-specific/linux/zfs/default.nix +++ b/pkgs/os-specific/linux/zfs/default.nix @@ -16,7 +16,7 @@ , enablePython ? true # for determining the latest compatible linuxPackages -, linuxPackages_5_15 ? pkgs.linuxKernel.packages.linux_5_15 +, linuxPackages_5_16 ? pkgs.linuxKernel.packages.linux_5_16 }: with lib; @@ -215,28 +215,28 @@ in { # to be adapted zfsStable = common { # check the release notes for compatible kernels - kernelCompatible = kernel.kernelAtLeast "3.10" && kernel.kernelOlder "5.16"; - latestCompatibleLinuxPackages = linuxPackages_5_15; + kernelCompatible = kernel.kernelAtLeast "3.10" && kernel.kernelOlder "5.17"; + latestCompatibleLinuxPackages = linuxPackages_5_16; # this package should point to the latest release. - version = "2.1.2"; + version = "2.1.3"; - sha256 = "sha256-7oSFZlmjCr+egImIVf429GrFOKn3L3r4SMnK3LHHmL8="; + sha256 = "10p9s835wj5msspqwnqbfbnh8jmcazzd2v0gj4hn7vvni4p48gfl"; }; zfsUnstable = common { # check the release notes for compatible kernels - kernelCompatible = kernel.kernelAtLeast "3.10" && kernel.kernelOlder "5.16"; - latestCompatibleLinuxPackages = linuxPackages_5_15; + kernelCompatible = kernel.kernelAtLeast "3.10" && kernel.kernelOlder "5.17"; + latestCompatibleLinuxPackages = linuxPackages_5_16; # this package should point to a version / git revision compatible with the latest kernel release # IMPORTANT: Always use a tagged release candidate or commits from the # zfs--staging branch, because this is tested by the OpenZFS # maintainers. - version = "2.1.2"; + version = "2.1.3"; # rev = "0000000000000000000000000000000000000000"; - sha256 = "sha256-7oSFZlmjCr+egImIVf429GrFOKn3L3r4SMnK3LHHmL8="; + sha256 = "10p9s835wj5msspqwnqbfbnh8jmcazzd2v0gj4hn7vvni4p48gfl"; isUnstable = true; }; -- cgit 1.4.1 From 060355b3b53998b762fe3f620b9d16a79d5b5d59 Mon Sep 17 00:00:00 2001 From: Peter Hoeg Date: Wed, 9 Mar 2022 13:29:45 +0800 Subject: pythonPackages.chromaprint: init at 0.5.0 --- .../python-modules/chromaprint/default.nix | 32 ++++++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 34 insertions(+) create mode 100644 pkgs/development/python-modules/chromaprint/default.nix diff --git a/pkgs/development/python-modules/chromaprint/default.nix b/pkgs/development/python-modules/chromaprint/default.nix new file mode 100644 index 000000000000..2a07a4eb6dce --- /dev/null +++ b/pkgs/development/python-modules/chromaprint/default.nix @@ -0,0 +1,32 @@ +{ lib +, buildPythonPackage +, fetchPypi +, isPy27 +, m2r +}: + +buildPythonPackage rec { + pname = "chromaprint"; + version = "0.5"; + + disabled = isPy27; + + src = fetchPypi { + inherit pname version; + sha256 = "sha256-d4M+ieNQpIXcnEH1WyIWnTYZe3P+Y58W0uz1uYPwLQE="; + }; + + buildInputs = [ m2r ]; + + # no tests + doCheck = false; + + pythonImportsCheck = [ "chromaprint" ]; + + meta = with lib; { + description = "Facilitate effortless color terminal output"; + homepage = "https://pypi.org/project/${pname}/"; + license = licenses.mit; + maintainers = with maintainers; [ dschrempf peterhoeg ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 5ba7835d415e..deff0e937d51 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -1609,6 +1609,8 @@ in { chispa = callPackage ../development/python-modules/chispa { }; + chromaprint = callPackage ../development/python-modules/chromaprint { }; + ci-info = callPackage ../development/python-modules/ci-info { }; ci-py = callPackage ../development/python-modules/ci-py { }; -- cgit 1.4.1 From bbd64cbe3ca10ab12244eeb535766ba3e524f29f Mon Sep 17 00:00:00 2001 From: Peter Hoeg Date: Wed, 9 Mar 2022 13:30:00 +0800 Subject: puddletag: 2.0.1 -> 2.1.1 --- pkgs/applications/audio/puddletag/default.nix | 54 ++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/pkgs/applications/audio/puddletag/default.nix b/pkgs/applications/audio/puddletag/default.nix index efa1d9436100..701e6fffbbb8 100644 --- a/pkgs/applications/audio/puddletag/default.nix +++ b/pkgs/applications/audio/puddletag/default.nix @@ -1,26 +1,62 @@ -{ lib, fetchFromGitHub, python3Packages, wrapQtAppsHook, chromaprint }: +{ lib, fetchFromGitHub, python3Packages, wrapQtAppsHook }: +# As of 2.1, puddletag has started pinning versions of all dependencies that it +# was built against which is an issue as the chances of us having the exact same +# versions in nixpkgs are slim to none. +# +# There is a difference between explicit and implicit version requirements and +# we should be able to safely ignore the latter. Therefore use requirements.in +# which contains just the explicit version dependencies instead of +# requirements.txt. +# +# Additionally, we do need to override some of the explicit requirements through +# `overrideVersions`. While we technically run the risk of breaking something by +# ignoring the pinned versions, it's just something we will have to accept +# unless we want to vendor those versions. + +let + # NOTE: check if we can drop any of these overrides when bumping the version + overrideVersions = [ + "pyparsing" + "pyqt5" + ]; + +in python3Packages.buildPythonApplication rec { pname = "puddletag"; - version = "2.0.1"; + version = "2.1.1"; src = fetchFromGitHub { - owner = "keithgg"; + owner = "puddletag"; repo = "puddletag"; rev = version; - sha256 = "sha256-9l8Pc77MX5zFkOqU00HFS8//3Bzd2OMnVV1brmWsNAQ="; + hash = "sha256-eilETaFvvPMopIbccV1uLbpD55kHX9KGTCcGVXaHPgM="; }; - sourceRoot = "source/source"; + postPatch = '' + substituteInPlace setup.py \ + --replace share/pixmaps share/icons + + cp requirements.in requirements.txt + '' + lib.concatMapStringsSep "\n" + (e: '' + sed -i requirements.txt -e 's/^${e}.*/${e}/' + '') + overrideVersions; nativeBuildInputs = [ wrapQtAppsHook ]; - propagatedBuildInputs = [ chromaprint ] ++ (with python3Packages; [ + propagatedBuildInputs = with python3Packages; [ + pyacoustid + chromaprint configobj + levenshtein + lxml mutagen pyparsing pyqt5 - ]); + rapidfuzz + ]; preFixup = '' makeWrapperArgs+=("''${qtWrapperArgs[@]}") @@ -33,8 +69,8 @@ python3Packages.buildPythonApplication rec { meta = with lib; { description = "An audio tag editor similar to the Windows program, Mp3tag"; homepage = "https://docs.puddletag.net"; - license = licenses.gpl3; - maintainers = with maintainers; [ peterhoeg ]; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ peterhoeg dschrempf ]; platforms = platforms.linux; }; } -- cgit 1.4.1 From 93f7a50d0259045cb0098883914061d13339f74a Mon Sep 17 00:00:00 2001 From: Sandro Stikić Date: Fri, 11 Mar 2022 12:09:58 +0800 Subject: maintainers/maintainers-list.nix: add opeik --- maintainers/maintainer-list.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 1388dc698860..7f944651f6ff 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -9250,6 +9250,12 @@ githubId = 23431373; name = "Christoph Neidahl"; }; + opeik = { + email = "sandro@stikic.com"; + github = "opeik"; + githubId = 11566773; + name = "Sandro Stikić"; + }; orbekk = { email = "kjetil.orbekk@gmail.com"; github = "orbekk"; -- cgit 1.4.1 From f3a676cb1d67e5e45e30feb1999f9d542927ae98 Mon Sep 17 00:00:00 2001 From: Sandro Stikić Date: Fri, 11 Mar 2022 12:10:14 +0800 Subject: obsidian: add x86_64-darwin/aarch64-darwin support --- pkgs/applications/misc/obsidian/default.nix | 159 ++++++++++++++++------------ 1 file changed, 91 insertions(+), 68 deletions(-) diff --git a/pkgs/applications/misc/obsidian/default.nix b/pkgs/applications/misc/obsidian/default.nix index 607d02a484ec..67a0939ddab9 100644 --- a/pkgs/applications/misc/obsidian/default.nix +++ b/pkgs/applications/misc/obsidian/default.nix @@ -1,76 +1,99 @@ -{ stdenv, fetchurl, lib, makeWrapper, electron_16, makeDesktopItem, graphicsmagick -, writeScript }: - +{ stdenv +, fetchurl +, lib +, makeWrapper +, electron_16 +, makeDesktopItem +, graphicsmagick +, writeScript +, undmg +, unzip +}: let - electron = electron_16; - icon = fetchurl { - url = - "https://forum.obsidian.md/uploads/default/original/1X/bf119bd48f748f4fd2d65f2d1bb05d3c806883b5.png"; - sha256 = "18ylnbvxr6k4x44c4i1d55wxy2dq4fdppp43a4wl6h6zar0sc9s2"; - }; - - desktopItem = makeDesktopItem { - name = "obsidian"; - desktopName = "Obsidian"; - comment = "Knowledge base"; - icon = "obsidian"; - exec = "obsidian"; - categories = [ "Office" ]; - }; - - updateScript = writeScript "obsidian-updater" '' - #!/usr/bin/env nix-shell - #!nix-shell -i bash -p curl jq common-updater-scripts - - set -eu -o pipefail - - latestVersion="$(curl -sS https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/desktop-releases.json | jq -r '.latestVersion')" - - update-source-version obsidian "$latestVersion" - ''; - -in stdenv.mkDerivation rec { + inherit (stdenv.hostPlatform) system; pname = "obsidian"; - version = "0.13.30"; + version = "0.13.31"; + meta = with lib; { + description = "A powerful knowledge base that works on top of a local folder of plain text Markdown files"; + homepage = "https://obsidian.md"; + downloadPage = "https://github.com/obsidianmd/obsidian-releases/releases"; + license = licenses.obsidian; + maintainers = with maintainers; [ conradmearns zaninime opeik ]; + }; src = fetchurl { - url = "https://github.com/obsidianmd/obsidian-releases/releases/download/v${version}/obsidian-${version}.tar.gz"; - sha256 = "ymdqdDD7WWfol/jLBsz8tEzcN7Ed1HSIrkuA51cvKKw="; + url = "https://github.com/obsidianmd/obsidian-releases/releases/download/v${version}/obsidian-${version}${extension}"; + inherit sha256; }; - nativeBuildInputs = [ makeWrapper graphicsmagick ]; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin - - makeWrapper ${electron}/bin/electron $out/bin/obsidian \ - --add-flags $out/share/obsidian/app.asar - - install -m 444 -D resources/app.asar $out/share/obsidian/app.asar - install -m 444 -D resources/obsidian.asar $out/share/obsidian/obsidian.asar - - install -m 444 -D "${desktopItem}/share/applications/"* \ - -t $out/share/applications/ - - for size in 16 24 32 48 64 128 256 512; do - mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps - gm convert -resize "$size"x"$size" ${icon} $out/share/icons/hicolor/"$size"x"$size"/apps/obsidian.png - done - - runHook postInstall - ''; - - passthru.updateScript = updateScript; + sha256 = rec { + x86_64-linux = "v3Zm5y8V1KyWDQeJxhryBojz56OTT7gfT+pLGDUD4zs="; + x86_64-darwin = "m/81uuDhMJJ1tHTUPww+xNdwsaYCOmeNtbjdwMAwhBU="; + aarch64-darwin = x86_64-darwin; + }.${system}; + + extension = rec { + x86_64-linux = ".tar.gz"; + x86_64-darwin = "-universal.dmg"; + aarch64-darwin = x86_64-darwin; + }.${system}; + + linux = stdenv.mkDerivation rec { + icon = fetchurl { + url = "https://forum.obsidian.md/uploads/default/original/1X/bf119bd48f748f4fd2d65f2d1bb05d3c806883b5.png"; + sha256 = "18ylnbvxr6k4x44c4i1d55wxy2dq4fdppp43a4wl6h6zar0sc9s2"; + }; + + desktopItem = makeDesktopItem { + name = "obsidian"; + desktopName = "Obsidian"; + comment = "Knowledge base"; + icon = "obsidian"; + exec = "obsidian"; + categories = [ "Office" ]; + }; + + inherit pname version src; + meta.platforms = [ "x86_64-linux" ]; + nativeBuildInputs = [ makeWrapper graphicsmagick ]; + installPhase = '' + runHook preInstall + mkdir -p $out/bin + makeWrapper ${electron_16}/bin/electron $out/bin/obsidian \ + --add-flags $out/share/obsidian/app.asar + install -m 444 -D resources/app.asar $out/share/obsidian/app.asar + install -m 444 -D resources/obsidian.asar $out/share/obsidian/obsidian.asar + install -m 444 -D "${desktopItem}/share/applications/"* \ + -t $out/share/applications/ + for size in 16 24 32 48 64 128 256 512; do + mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps + gm convert -resize "$size"x"$size" ${icon} $out/share/icons/hicolor/"$size"x"$size"/apps/obsidian.png + done + runHook postInstall + ''; + + passthru.updateScript = writeScript "updater" '' + #!/usr/bin/env nix-shell + #!nix-shell -i bash -p curl jq common-updater-scripts + set -eu -o pipefail + latestVersion="$(curl -sS https://raw.githubusercontent.com/obsidianmd/obsidian-releases/master/desktop-releases.json | jq -r '.latestVersion')" + update-source-version obsidian "$latestVersion" + ''; + }; - meta = with lib; { - description = - "A powerful knowledge base that works on top of a local folder of plain text Markdown files"; - homepage = "https://obsidian.md"; - downloadPage = "https://github.com/obsidianmd/obsidian-releases/releases"; - license = licenses.obsidian; - maintainers = with maintainers; [ conradmearns zaninime ]; - platforms = [ "x86_64-linux" ]; + darwin = stdenv.mkDerivation rec { + appname = "Obsidian"; + inherit pname version src; + meta.platforms = [ "x86_64-darwin" "aarch64-darwin" ]; + sourceRoot = "${appname}.app"; + nativeBuildInputs = [ makeWrapper undmg unzip ]; + installPhase = '' + runHook preInstall + mkdir -p $out/{Applications/${appname}.app,bin} + cp -R . $out/Applications/${appname}.app + makeWrapper $out/Applications/${appname}.app/Contents/MacOS/${appname} $out/bin/${pname} + runHook postInstall + ''; }; -} +in +if stdenv.isDarwin then darwin else linux -- cgit 1.4.1