Merge staging-next into staging
This commit is contained in:
commit
7a0501594d
|
@ -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 <<EOF
|
||||
====== module tests ======
|
||||
$pass Pass
|
||||
|
|
14
lib/tests/modules/adhoc-freeformType-survives-type-merge.nix
Normal file
14
lib/tests/modules/adhoc-freeformType-survives-type-merge.nix
Normal file
|
@ -0,0 +1,14 @@
|
|||
{ lib, ... }: {
|
||||
options.dummy = lib.mkOption { type = lib.types.anything; default = {}; };
|
||||
freeformType =
|
||||
let
|
||||
a = lib.types.attrsOf (lib.types.submodule { options.bar = lib.mkOption { }; });
|
||||
in
|
||||
# modifying types like this breaks type merging.
|
||||
# This test makes sure that type merging is not performed when only a single declaration exists.
|
||||
# Don't modify types in practice!
|
||||
a // {
|
||||
merge = loc: defs: { freeformItems = a.merge loc defs; };
|
||||
};
|
||||
config.foo.bar = "ok";
|
||||
}
|
|
@ -535,7 +535,9 @@ rec {
|
|||
description = "optionType";
|
||||
check = value: value._type or null == "option-type";
|
||||
merge = loc: defs:
|
||||
let
|
||||
if length defs == 1
|
||||
then (head defs).value
|
||||
else let
|
||||
# Prepares the type definitions for mergeOptionDecls, which
|
||||
# annotates submodules types with file locations
|
||||
optionModules = map ({ value, file }:
|
||||
|
|
|
@ -9260,6 +9260,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";
|
||||
|
|
|
@ -261,6 +261,13 @@
|
|||
<link xlink:href="options.html#opt-services.ethercalc.enable">services.ethercalc</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<link xlink:href="https://nbd.sourceforge.io/">nbd</link>, a
|
||||
Network Block Device server. Available as
|
||||
<link xlink:href="options.html#opt-services.nbd.server.enable">services.nbd</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<link xlink:href="https://timetagger.app">timetagger</link>,
|
||||
|
|
|
@ -77,6 +77,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).
|
||||
|
|
|
@ -180,6 +180,7 @@
|
|||
./programs/msmtp.nix
|
||||
./programs/mtr.nix
|
||||
./programs/nano.nix
|
||||
./programs/nbd.nix
|
||||
./programs/neovim.nix
|
||||
./programs/nm-applet.nix
|
||||
./programs/npm.nix
|
||||
|
@ -819,6 +820,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
|
||||
|
|
19
nixos/modules/programs/nbd.nix
Normal file
19
nixos/modules/programs/nbd.nix
Normal file
|
@ -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" ];
|
||||
};
|
||||
}
|
146
nixos/modules/services/networking/nbd.nix
Normal file
146
nixos/modules/services/networking/nbd.nix
Normal file
|
@ -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
|
||||
<citerefentry><refentrytitle>nbd-server</refentrytitle>
|
||||
<manvolnum>5</manvolnum></citerefentry>.
|
||||
'';
|
||||
};
|
||||
|
||||
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
|
||||
<citerefentry><refentrytitle>nbd-server</refentrytitle>
|
||||
<manvolnum>5</manvolnum></citerefentry>.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -329,6 +329,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 {};
|
||||
|
|
87
nixos/tests/nbd.nix
Normal file
87
nixos/tests/nbd.nix
Normal file
|
@ -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")
|
||||
'';
|
||||
})
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/obsidianmd/obsidian-releases/releases/download/v${version}/obsidian-${version}.tar.gz";
|
||||
sha256 = "ymdqdDD7WWfol/jLBsz8tEzcN7Ed1HSIrkuA51cvKKw=";
|
||||
};
|
||||
|
||||
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;
|
||||
|
||||
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";
|
||||
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" ];
|
||||
maintainers = with maintainers; [ conradmearns zaninime opeik ];
|
||||
};
|
||||
}
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/obsidianmd/obsidian-releases/releases/download/v${version}/obsidian-${version}${extension}";
|
||||
inherit sha256;
|
||||
};
|
||||
|
||||
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"
|
||||
'';
|
||||
};
|
||||
|
||||
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
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
32
pkgs/development/python-modules/chromaprint/default.nix
Normal file
32
pkgs/development/python-modules/chromaprint/default.nix
Normal file
|
@ -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 ];
|
||||
};
|
||||
}
|
|
@ -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 = [
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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/
|
||||
|
|
|
@ -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-<version>-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;
|
||||
};
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -1597,6 +1597,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 { };
|
||||
|
|
Loading…
Reference in a new issue