Merge master into haskell-updates
This commit is contained in:
commit
15ec108b1d
@ -96,6 +96,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
|
||||
- [atuin](https://github.com/ellie/atuin), a sync server for shell history. Available as [services.atuin](#opt-services.atuin.enable).
|
||||
|
||||
- [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).
|
||||
|
||||
- [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).
|
||||
|
||||
- [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).
|
||||
@ -567,6 +569,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
|
||||
- `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
|
||||
|
||||
- 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.
|
||||
|
||||
- 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.
|
||||
|
||||
- The `bind` module now allows the per-zone `allow-query` setting to be configured (previously it was hard-coded to `any`; it still defaults to `any` to retain compatibility).
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
## Highlights {#sec-release-23.11-highlights}
|
||||
|
||||
- Create the first release note entry in this section!
|
||||
- FoundationDB now defaults to major version 7.
|
||||
|
||||
## New Services {#sec-release-23.11-new-services}
|
||||
|
||||
|
@ -335,7 +335,7 @@ sub findStableDevPath {
|
||||
|
||||
my $st = stat($dev) or return $dev;
|
||||
|
||||
foreach my $dev2 (glob("/dev/disk/by-uuid/*"), glob("/dev/mapper/*"), glob("/dev/disk/by-label/*")) {
|
||||
foreach my $dev2 (glob("/dev/stratis/*/*"), glob("/dev/disk/by-uuid/*"), glob("/dev/mapper/*"), glob("/dev/disk/by-label/*")) {
|
||||
my $st2 = stat($dev2) or next;
|
||||
return $dev2 if $st->rdev == $st2->rdev;
|
||||
}
|
||||
@ -467,6 +467,17 @@ EOF
|
||||
}
|
||||
}
|
||||
|
||||
# is this a stratis fs?
|
||||
my $stableDevPath = findStableDevPath $device;
|
||||
my $stratisPool;
|
||||
if ($stableDevPath =~ qr#/dev/stratis/(.*)/.*#) {
|
||||
my $poolName = $1;
|
||||
my ($header, @lines) = split "\n", qx/stratis pool list/;
|
||||
my $uuidIndex = index $header, 'UUID';
|
||||
my ($line) = grep /^$poolName /, @lines;
|
||||
$stratisPool = substr $line, $uuidIndex - 32, 36;
|
||||
}
|
||||
|
||||
# Don't emit tmpfs entry for /tmp, because it most likely comes from the
|
||||
# boot.tmp.useTmpfs option in configuration.nix (managed declaratively).
|
||||
next if ($mountPoint eq "/tmp" && $fsType eq "tmpfs");
|
||||
@ -474,7 +485,7 @@ EOF
|
||||
# Emit the filesystem.
|
||||
$fileSystems .= <<EOF;
|
||||
fileSystems.\"$mountPoint\" =
|
||||
{ device = \"${\(findStableDevPath $device)}\";
|
||||
{ device = \"$stableDevPath\";
|
||||
fsType = \"$fsType\";
|
||||
EOF
|
||||
|
||||
@ -484,6 +495,12 @@ EOF
|
||||
EOF
|
||||
}
|
||||
|
||||
if ($stratisPool) {
|
||||
$fileSystems .= <<EOF;
|
||||
stratis.poolUuid = "$stratisPool";
|
||||
EOF
|
||||
}
|
||||
|
||||
$fileSystems .= <<EOF;
|
||||
};
|
||||
|
||||
|
@ -1230,6 +1230,7 @@
|
||||
./services/web-apps/powerdns-admin.nix
|
||||
./services/web-apps/prosody-filer.nix
|
||||
./services/web-apps/restya-board.nix
|
||||
./services/web-apps/sftpgo.nix
|
||||
./services/web-apps/rss-bridge.nix
|
||||
./services/web-apps/selfoss.nix
|
||||
./services/web-apps/shiori.nix
|
||||
@ -1345,6 +1346,7 @@
|
||||
./system/boot/loader/raspberrypi/raspberrypi.nix
|
||||
./system/boot/loader/systemd-boot/systemd-boot.nix
|
||||
./system/boot/luksroot.nix
|
||||
./system/boot/stratisroot.nix
|
||||
./system/boot/modprobe.nix
|
||||
./system/boot/networkd.nix
|
||||
./system/boot/plymouth.nix
|
||||
|
@ -167,9 +167,11 @@ in
|
||||
<!-- create mount point if not present -->
|
||||
<mkmountpoint enable="${if cfg.createMountPoints then "1" else "0"}" remove="${if cfg.removeCreatedMountPoints then "true" else "false"}" />
|
||||
<!-- specify the binaries to be called -->
|
||||
<fusemount>${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) -o ${concatStringsSep "," (cfg.fuseMountOptions ++ [ "%(OPTIONS)" ])}</fusemount>
|
||||
<!-- the comma in front of the options is necessary for empty options -->
|
||||
<fusemount>${pkgs.fuse}/bin/mount.fuse %(VOLUME) %(MNTPT) -o ,${concatStringsSep "," (cfg.fuseMountOptions ++ [ "%(OPTIONS)" ])}'</fusemount>
|
||||
<fuseumount>${pkgs.fuse}/bin/fusermount -u %(MNTPT)</fuseumount>
|
||||
<cryptmount>${pkgs.pam_mount}/bin/mount.crypt -o ${concatStringsSep "," (cfg.cryptMountOptions ++ [ "%(OPTIONS)" ])} %(VOLUME) %(MNTPT)</cryptmount>
|
||||
<!-- the comma in front of the options is necessary for empty options -->
|
||||
<cryptmount>${pkgs.pam_mount}/bin/mount.crypt -o ,${concatStringsSep "," (cfg.cryptMountOptions ++ [ "%(OPTIONS)" ])} %(VOLUME) %(MNTPT)</cryptmount>
|
||||
<cryptumount>${pkgs.pam_mount}/bin/umount.crypt %(MNTPT)</cryptumount>
|
||||
<pmvarrun>${pkgs.pam_mount}/bin/pmvarrun -u %(USER) -o %(OPERATION)</pmvarrun>
|
||||
${optionalString oflRequired "<ofl>${fake_ofl}/bin/fake_ofl %(SIGNAL) %(MNTPT)</ofl>"}
|
||||
|
@ -25,6 +25,8 @@ in
|
||||
options.services.thelounge = {
|
||||
enable = mkEnableOption (lib.mdDoc "The Lounge web IRC client");
|
||||
|
||||
package = mkPackageOptionMD pkgs "thelounge" { };
|
||||
|
||||
public = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
@ -93,11 +95,11 @@ in
|
||||
serviceConfig = {
|
||||
User = "thelounge";
|
||||
StateDirectory = baseNameOf dataDir;
|
||||
ExecStart = "${pkgs.thelounge}/bin/thelounge start";
|
||||
ExecStart = "${getExe cfg.package} start";
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = [ pkgs.thelounge ];
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
@ -154,6 +154,9 @@ in
|
||||
description = "Mirakurun user";
|
||||
group = "video";
|
||||
isSystemUser = true;
|
||||
|
||||
# NPM insists on creating ~/.npm
|
||||
home = "/var/cache/mirakurun";
|
||||
};
|
||||
|
||||
services.mirakurun.serverSettings = {
|
||||
@ -171,9 +174,10 @@ in
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network.target" ];
|
||||
serviceConfig = {
|
||||
ExecStart = "${mirakurun}/bin/mirakurun-start";
|
||||
ExecStart = "${mirakurun}/bin/mirakurun start";
|
||||
User = username;
|
||||
Group = groupname;
|
||||
CacheDirectory = "mirakurun";
|
||||
RuntimeDirectory="mirakurun";
|
||||
StateDirectory="mirakurun";
|
||||
Nice = -10;
|
||||
|
375
nixos/modules/services/web-apps/sftpgo.nix
Normal file
375
nixos/modules/services/web-apps/sftpgo.nix
Normal file
@ -0,0 +1,375 @@
|
||||
{ options, config, lib, pkgs, utils, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.sftpgo;
|
||||
defaultUser = "sftpgo";
|
||||
settingsFormat = pkgs.formats.json {};
|
||||
configFile = settingsFormat.generate "sftpgo.json" cfg.settings;
|
||||
hasPrivilegedPorts = any (port: port > 0 && port < 1024) (
|
||||
catAttrs "port" (cfg.settings.httpd.bindings
|
||||
++ cfg.settings.ftpd.bindings
|
||||
++ cfg.settings.sftpd.bindings
|
||||
++ cfg.settings.webdavd.bindings
|
||||
)
|
||||
);
|
||||
in
|
||||
{
|
||||
options.services.sftpgo = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = mdDoc "sftpgo";
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.sftpgo;
|
||||
defaultText = literalExpression "pkgs.sftpgo";
|
||||
description = mdDoc ''
|
||||
Which SFTPGo package to use.
|
||||
'';
|
||||
};
|
||||
|
||||
extraArgs = mkOption {
|
||||
type = with types; listOf str;
|
||||
default = [];
|
||||
description = mdDoc ''
|
||||
Additional command line arguments to pass to the sftpgo daemon.
|
||||
'';
|
||||
example = [ "--log-level" "info" ];
|
||||
};
|
||||
|
||||
dataDir = mkOption {
|
||||
type = types.str;
|
||||
default = "/var/lib/sftpgo";
|
||||
description = mdDoc ''
|
||||
The directory where SFTPGo stores its data files.
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = defaultUser;
|
||||
description = mdDoc ''
|
||||
User account name under which SFTPGo runs.
|
||||
'';
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
type = types.str;
|
||||
default = defaultUser;
|
||||
description = mdDoc ''
|
||||
Group name under which SFTPGo runs.
|
||||
'';
|
||||
};
|
||||
|
||||
loadDataFile = mkOption {
|
||||
default = null;
|
||||
type = with types; nullOr path;
|
||||
description = mdDoc ''
|
||||
Path to a json file containing users and folders to load (or update) on startup.
|
||||
Check the [documentation](https://github.com/drakkan/sftpgo/blob/main/docs/full-configuration.md)
|
||||
for the `--loaddata-from` command line argument for more info.
|
||||
'';
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
default = {};
|
||||
description = mdDoc ''
|
||||
The primary sftpgo configuration. See the
|
||||
[configuration reference](https://github.com/drakkan/sftpgo/blob/main/docs/full-configuration.md)
|
||||
for possible values.
|
||||
'';
|
||||
type = with types; submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
options = {
|
||||
httpd.bindings = mkOption {
|
||||
default = [];
|
||||
description = mdDoc ''
|
||||
Configure listen addresses and ports for httpd.
|
||||
'';
|
||||
type = types.listOf (types.submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
options = {
|
||||
address = mkOption {
|
||||
type = types.str;
|
||||
default = "127.0.0.1";
|
||||
description = mdDoc ''
|
||||
Network listen address. Leave blank to listen on all available network interfaces.
|
||||
On *NIX you can specify an absolute path to listen on a Unix-domain socket.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 8080;
|
||||
description = mdDoc ''
|
||||
The port for serving HTTP(S) requests.
|
||||
|
||||
Setting the port to `0` disables listening on this interface binding.
|
||||
'';
|
||||
};
|
||||
|
||||
enable_web_admin = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = mdDoc ''
|
||||
Enable the built-in web admin for this interface binding.
|
||||
'';
|
||||
};
|
||||
|
||||
enable_web_client = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = mdDoc ''
|
||||
Enable the built-in web client for this interface binding.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
ftpd.bindings = mkOption {
|
||||
default = [];
|
||||
description = mdDoc ''
|
||||
Configure listen addresses and ports for ftpd.
|
||||
'';
|
||||
type = types.listOf (types.submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
options = {
|
||||
address = mkOption {
|
||||
type = types.str;
|
||||
default = "127.0.0.1";
|
||||
description = mdDoc ''
|
||||
Network listen address. Leave blank to listen on all available network interfaces.
|
||||
On *NIX you can specify an absolute path to listen on a Unix-domain socket.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 0;
|
||||
description = mdDoc ''
|
||||
The port for serving FTP requests.
|
||||
|
||||
Setting the port to `0` disables listening on this interface binding.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
sftpd.bindings = mkOption {
|
||||
default = [];
|
||||
description = mdDoc ''
|
||||
Configure listen addresses and ports for sftpd.
|
||||
'';
|
||||
type = types.listOf (types.submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
options = {
|
||||
address = mkOption {
|
||||
type = types.str;
|
||||
default = "127.0.0.1";
|
||||
description = mdDoc ''
|
||||
Network listen address. Leave blank to listen on all available network interfaces.
|
||||
On *NIX you can specify an absolute path to listen on a Unix-domain socket.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 0;
|
||||
description = mdDoc ''
|
||||
The port for serving SFTP requests.
|
||||
|
||||
Setting the port to `0` disables listening on this interface binding.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
webdavd.bindings = mkOption {
|
||||
default = [];
|
||||
description = mdDoc ''
|
||||
Configure listen addresses and ports for webdavd.
|
||||
'';
|
||||
type = types.listOf (types.submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
options = {
|
||||
address = mkOption {
|
||||
type = types.str;
|
||||
default = "127.0.0.1";
|
||||
description = mdDoc ''
|
||||
Network listen address. Leave blank to listen on all available network interfaces.
|
||||
On *NIX you can specify an absolute path to listen on a Unix-domain socket.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 0;
|
||||
description = mdDoc ''
|
||||
The port for serving WebDAV requests.
|
||||
|
||||
Setting the port to `0` disables listening on this interface binding.
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
|
||||
smtp = mkOption {
|
||||
default = {};
|
||||
description = mdDoc ''
|
||||
SMTP configuration section.
|
||||
'';
|
||||
type = types.submodule {
|
||||
freeformType = settingsFormat.type;
|
||||
options = {
|
||||
host = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
description = mdDoc ''
|
||||
Location of SMTP email server. Leave empty to disable email sending capabilities.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 465;
|
||||
description = mdDoc "Port of the SMTP Server.";
|
||||
};
|
||||
|
||||
encryption = mkOption {
|
||||
type = types.enum [ 0 1 2 ];
|
||||
default = 1;
|
||||
description = mdDoc ''
|
||||
Encryption scheme:
|
||||
- `0`: No encryption
|
||||
- `1`: TLS
|
||||
- `2`: STARTTLS
|
||||
'';
|
||||
};
|
||||
|
||||
auth_type = mkOption {
|
||||
type = types.enum [ 0 1 2 ];
|
||||
default = 0;
|
||||
description = mdDoc ''
|
||||
- `0`: Plain
|
||||
- `1`: Login
|
||||
- `2`: CRAM-MD5
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
default = "sftpgo";
|
||||
description = mdDoc "SMTP username.";
|
||||
};
|
||||
|
||||
from = mkOption {
|
||||
type = types.str;
|
||||
default = "SFTPGo <sftpgo@example.com>";
|
||||
description = mdDoc ''
|
||||
From address.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
services.sftpgo.settings = (mapAttrs (name: mkDefault) {
|
||||
ftpd.bindings = [{ port = 0; }];
|
||||
httpd.bindings = [{ port = 0; }];
|
||||
sftpd.bindings = [{ port = 0; }];
|
||||
webdavd.bindings = [{ port = 0; }];
|
||||
httpd.openapi_path = "${cfg.package}/share/sftpgo/openapi";
|
||||
httpd.templates_path = "${cfg.package}/share/sftpgo/templates";
|
||||
httpd.static_files_path = "${cfg.package}/share/sftpgo/static";
|
||||
smtp.templates_path = "${cfg.package}/share/sftpgo/templates";
|
||||
});
|
||||
|
||||
users = optionalAttrs (cfg.user == defaultUser) {
|
||||
users = {
|
||||
${defaultUser} = {
|
||||
description = "SFTPGo system user";
|
||||
isSystemUser = true;
|
||||
group = defaultUser;
|
||||
home = cfg.dataDir;
|
||||
};
|
||||
};
|
||||
|
||||
groups = {
|
||||
${defaultUser} = {
|
||||
members = [ defaultUser ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.sftpgo = {
|
||||
description = "SFTPGo daemon";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
|
||||
environment = {
|
||||
SFTPGO_CONFIG_FILE = mkDefault configFile;
|
||||
SFTPGO_LOG_FILE_PATH = mkDefault ""; # log to journal
|
||||
SFTPGO_LOADDATA_FROM = mkIf (cfg.loadDataFile != null) cfg.loadDataFile;
|
||||
};
|
||||
|
||||
serviceConfig = mkMerge [
|
||||
({
|
||||
Type = "simple";
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
WorkingDirectory = cfg.dataDir;
|
||||
ReadWritePaths = [ cfg.dataDir ];
|
||||
LimitNOFILE = 8192; # taken from upstream
|
||||
KillMode = "mixed";
|
||||
ExecStart = "${cfg.package}/bin/sftpgo serve ${utils.escapeSystemdExecArgs cfg.extraArgs}";
|
||||
ExecReload = "${pkgs.util-linux}/bin/kill -s HUP $MAINPID";
|
||||
|
||||
# Service hardening
|
||||
CapabilityBoundingSet = [ (optionalString hasPrivilegedPorts "CAP_NET_BIND_SERVICE") ];
|
||||
DevicePolicy = "closed";
|
||||
LockPersonality = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateDevices = true;
|
||||
PrivateTmp = true;
|
||||
ProcSubset = "pid";
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectHome = true;
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = "strict";
|
||||
RemoveIPC = true;
|
||||
RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX";
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallFilter = [ "@system-service" "~@privileged" ];
|
||||
UMask = "0077";
|
||||
})
|
||||
(mkIf hasPrivilegedPorts {
|
||||
AmbientCapabilities = "CAP_NET_BIND_SERVICE";
|
||||
})
|
||||
(mkIf (cfg.dataDir == options.services.sftpgo.dataDir.default) {
|
||||
StateDirectory = baseNameOf cfg.dataDir;
|
||||
})
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
64
nixos/modules/system/boot/stratisroot.nix
Normal file
64
nixos/modules/system/boot/stratisroot.nix
Normal file
@ -0,0 +1,64 @@
|
||||
{ config, lib, pkgs, utils, ... }:
|
||||
let
|
||||
requiredStratisFilesystems = lib.attrsets.filterAttrs (_: x: utils.fsNeededForBoot x && x.stratis.poolUuid != null) config.fileSystems;
|
||||
in
|
||||
{
|
||||
options = {};
|
||||
config = lib.mkIf (requiredStratisFilesystems != {}) {
|
||||
assertions = [
|
||||
{
|
||||
assertion = config.boot.initrd.systemd.enable;
|
||||
message = "stratis root fs requires systemd stage 1";
|
||||
}
|
||||
];
|
||||
boot.initrd = {
|
||||
systemd = {
|
||||
storePaths = [
|
||||
"${pkgs.stratisd}/lib/udev/stratis-base32-decode"
|
||||
"${pkgs.stratisd}/lib/udev/stratis-str-cmp"
|
||||
"${pkgs.lvm2.bin}/bin/dmsetup"
|
||||
"${pkgs.stratisd}/libexec/stratisd-min"
|
||||
"${pkgs.stratisd.initrd}/bin/stratis-rootfs-setup"
|
||||
];
|
||||
packages = [pkgs.stratisd.initrd];
|
||||
extraBin = {
|
||||
thin_check = "${pkgs."thin-provisioning-tools"}/bin/thin_check";
|
||||
thin_repair = "${pkgs."thin-provisioning-tools"}/bin/thin_repair";
|
||||
thin_metadata_size = "${pkgs."thin-provisioning-tools"}/bin/thin_metadata_size";
|
||||
stratis-min = "${pkgs.stratisd}/bin/stratis-min";
|
||||
};
|
||||
services =
|
||||
lib.attrsets.mapAttrs' (
|
||||
mountPoint: fileSystem: {
|
||||
name = "stratis-setup-${fileSystem.stratis.poolUuid}";
|
||||
value = {
|
||||
description = "setup for Stratis root filesystem";
|
||||
unitConfig.DefaultDependencies = "no";
|
||||
conflicts = [ "shutdown.target" "initrd-switch-root.target" ];
|
||||
onFailure = [ "emergency.target" ];
|
||||
unitConfig.OnFailureJobMode = "isolate";
|
||||
wants = [ "stratisd-min.service" "plymouth-start.service" ];
|
||||
wantedBy = [ "initrd.target" ];
|
||||
after = [ "paths.target" "plymouth-start.service" "stratisd-min.service" ];
|
||||
before = [ "initrd.target" "shutdown.target" "initrd-switch-root.target" ];
|
||||
environment.STRATIS_ROOTFS_UUID = fileSystem.stratis.poolUuid;
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${pkgs.stratisd.initrd}/bin/stratis-rootfs-setup";
|
||||
RemainAfterExit = "yes";
|
||||
};
|
||||
};
|
||||
}
|
||||
) requiredStratisFilesystems;
|
||||
};
|
||||
availableKernelModules = [ "dm-thin-pool" "dm-crypt" ] ++ [ "aes" "aes_generic" "blowfish" "twofish"
|
||||
"serpent" "cbc" "xts" "lrw" "sha1" "sha256" "sha512"
|
||||
"af_alg" "algif_skcipher"
|
||||
];
|
||||
services.udev.packages = [
|
||||
pkgs.stratisd.initrd
|
||||
pkgs.lvm2
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
@ -36,6 +36,15 @@ let
|
||||
description = lib.mdDoc "Location of the mounted file system.";
|
||||
};
|
||||
|
||||
stratis.poolUuid = lib.mkOption {
|
||||
type = types.uniq (types.nullOr types.str);
|
||||
description = lib.mdDoc ''
|
||||
UUID of the stratis pool that the fs is located in
|
||||
'';
|
||||
example = "04c68063-90a5-4235-b9dd-6180098a20d9";
|
||||
default = null;
|
||||
};
|
||||
|
||||
device = mkOption {
|
||||
default = null;
|
||||
example = "/dev/sda";
|
||||
|
@ -187,20 +187,20 @@ with lib;
|
||||
guestAgentSupport = false;
|
||||
}).overrideAttrs ( super: rec {
|
||||
|
||||
version = "7.0.0";
|
||||
version = "7.2.1";
|
||||
src = pkgs.fetchurl {
|
||||
url= "https://download.qemu.org/qemu-${version}.tar.xz";
|
||||
sha256 = "sha256-9rN1x5UfcoQCeYsLqrsthkeMpT1Eztvvq74cRr9G+Dk=";
|
||||
sha256 = "sha256-jIVpms+dekOl/immTN1WNwsMLRrQdLr3CYqCTReq1zs=";
|
||||
};
|
||||
patches = [
|
||||
# Proxmox' VMA tool is published as a particular patch upon QEMU
|
||||
(pkgs.fetchpatch {
|
||||
url =
|
||||
let
|
||||
rev = "1976ca460796f28447b41e3618e5c1e234035dd5";
|
||||
path = "debian/patches/pve/0026-PVE-Backup-add-vma-backup-format-code.patch";
|
||||
rev = "abb04bb6272c1202ca9face0827917552b9d06f6";
|
||||
path = "debian/patches/pve/0027-PVE-Backup-add-vma-backup-format-code.patch";
|
||||
in "https://git.proxmox.com/?p=pve-qemu.git;a=blob_plain;hb=${rev};f=${path}";
|
||||
hash = "sha256-2Dz+ceTwrcyYYxi76RtyY3v15/2pwGcDhFuoZWlgbjc=";
|
||||
hash = "sha256-3d0HHdvaExCry6zcULnziYnWIAnn24vECkI4sjj2BMg=";
|
||||
})
|
||||
|
||||
# Proxmox' VMA tool uses O_DIRECT which fails on tmpfs
|
||||
@ -220,6 +220,7 @@ with lib;
|
||||
];
|
||||
|
||||
buildInputs = super.buildInputs ++ [ pkgs.libuuid ];
|
||||
nativeBuildInputs = super.nativeBuildInputs ++ [ pkgs.perl ];
|
||||
|
||||
});
|
||||
in
|
||||
|
@ -665,6 +665,7 @@ in {
|
||||
seafile = handleTest ./seafile.nix {};
|
||||
searx = handleTest ./searx.nix {};
|
||||
service-runner = handleTest ./service-runner.nix {};
|
||||
sftpgo = runTest ./sftpgo.nix;
|
||||
sfxr-qt = handleTest ./sfxr-qt.nix {};
|
||||
sgtpuzzles = handleTest ./sgtpuzzles.nix {};
|
||||
shadow = handleTest ./shadow.nix {};
|
||||
|
@ -27,6 +27,7 @@
|
||||
simpleUefiGrub
|
||||
simpleUefiGrubSpecialisation
|
||||
simpleUefiSystemdBoot
|
||||
stratisRoot
|
||||
# swraid
|
||||
zfsroot
|
||||
;
|
||||
|
@ -989,4 +989,39 @@ in {
|
||||
)
|
||||
'';
|
||||
};
|
||||
} // optionalAttrs systemdStage1 {
|
||||
stratisRoot = makeInstallerTest "stratisRoot" {
|
||||
createPartitions = ''
|
||||
machine.succeed(
|
||||
"sgdisk --zap-all /dev/vda",
|
||||
"sgdisk --new=1:0:+100M --typecode=0:ef00 /dev/vda", # /boot
|
||||
"sgdisk --new=2:0:+1G --typecode=0:8200 /dev/vda", # swap
|
||||
"sgdisk --new=3:0:+5G --typecode=0:8300 /dev/vda", # /
|
||||
"udevadm settle",
|
||||
|
||||
"mkfs.vfat /dev/vda1",
|
||||
"mkswap /dev/vda2 -L swap",
|
||||
"swapon -L swap",
|
||||
"stratis pool create my-pool /dev/vda3",
|
||||
"stratis filesystem create my-pool nixos",
|
||||
"udevadm settle",
|
||||
|
||||
"mount /dev/stratis/my-pool/nixos /mnt",
|
||||
"mkdir -p /mnt/boot",
|
||||
"mount /dev/vda1 /mnt/boot"
|
||||
)
|
||||
'';
|
||||
bootLoader = "systemd-boot";
|
||||
extraInstallerConfig = { modulesPath, ...}: {
|
||||
config = {
|
||||
services.stratis.enable = true;
|
||||
environment.systemPackages = [
|
||||
pkgs.stratis-cli
|
||||
pkgs.thin-provisioning-tools
|
||||
pkgs.lvm2.bin
|
||||
pkgs.stratisd.initrd
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -3,11 +3,6 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
||||
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ OPNA2608 ];
|
||||
# Natively running Mir has problems with capturing the first registered libinput device.
|
||||
# In our VM runners on ARM and on some hardware configs (my RPi4, distro-independent), this misses the keyboard.
|
||||
# It can be worked around by dis- and reconnecting the affected hardware, but we can't do this in these tests.
|
||||
# https://github.com/MirServer/mir/issues/2837
|
||||
broken = pkgs.stdenv.hostPlatform.isAarch;
|
||||
};
|
||||
|
||||
nodes.machine = { config, ... }: {
|
||||
|
384
nixos/tests/sftpgo.nix
Normal file
384
nixos/tests/sftpgo.nix
Normal file
@ -0,0 +1,384 @@
|
||||
# SFTPGo NixOS test
|
||||
#
|
||||
# This NixOS test sets up a basic test scenario for the SFTPGo module
|
||||
# and covers the following scenarios:
|
||||
# - uploading a file via sftp
|
||||
# - downloading the file over sftp
|
||||
# - assert that the ACLs are respected
|
||||
# - share a file between alice and bob (using sftp)
|
||||
# - assert that eve cannot acceess the shared folder between alice and bob.
|
||||
#
|
||||
# Additional test coverage for the remaining protocols (i.e. ftp, http and webdav)
|
||||
# would be a nice to have for the future.
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (import ./ssh-keys.nix pkgs) snakeOilPrivateKey snakeOilPublicKey;
|
||||
|
||||
# Returns an attributeset of users who are not system users.
|
||||
normalUsers = config:
|
||||
filterAttrs (name: user: user.isNormalUser) config.users.users;
|
||||
|
||||
# Returns true if a user is a member of the given group
|
||||
isMemberOf =
|
||||
config:
|
||||
# str
|
||||
groupName:
|
||||
# users.users attrset
|
||||
user:
|
||||
any (x: x == user.name) config.users.groups.${groupName}.members;
|
||||
|
||||
# Generates a valid SFTPGo user configuration for a given user
|
||||
# Will be converted to JSON and loaded on application startup.
|
||||
generateUserAttrSet =
|
||||
config:
|
||||
# attrset returned by config.users.users.<username>
|
||||
user: {
|
||||
# 0: user is disabled, login is not allowed
|
||||
# 1: user is enabled
|
||||
status = 1;
|
||||
|
||||
username = user.name;
|
||||
password = ""; # disables password authentication
|
||||
public_keys = user.openssh.authorizedKeys.keys;
|
||||
email = "${user.name}@example.com";
|
||||
|
||||
# User home directory on the local filesystem
|
||||
home_dir = "${config.services.sftpgo.dataDir}/users/${user.name}";
|
||||
|
||||
# Defines a mapping between virtual SFTPGo paths and filesystem paths outside the user home directory.
|
||||
#
|
||||
# Supported for local filesystem only. If one or more of the specified folders are not
|
||||
# inside the dataprovider they will be automatically created.
|
||||
# You have to create the folder on the filesystem yourself
|
||||
virtual_folders =
|
||||
optional (isMemberOf config sharedFolderName user) {
|
||||
name = sharedFolderName;
|
||||
mapped_path = "${config.services.sftpgo.dataDir}/${sharedFolderName}";
|
||||
virtual_path = "/${sharedFolderName}";
|
||||
};
|
||||
|
||||
# Defines the ACL on the virtual filesystem
|
||||
permissions =
|
||||
recursiveUpdate {
|
||||
"/" = [ "list" ]; # read-only top level directory
|
||||
"/private" = [ "*" ]; # private subdirectory, not shared with others
|
||||
} (optionalAttrs (isMemberOf config "shared" user) {
|
||||
"/shared" = [ "*" ];
|
||||
});
|
||||
|
||||
filters = {
|
||||
allowed_ip = [];
|
||||
denied_ip = [];
|
||||
web_client = [
|
||||
"password-change-disabled"
|
||||
"password-reset-disabled"
|
||||
"api-key-auth-change-disabled"
|
||||
];
|
||||
};
|
||||
|
||||
upload_bandwidth = 0; # unlimited
|
||||
download_bandwidth = 0; # unlimited
|
||||
expiration_date = 0; # means no expiration
|
||||
max_sessions = 0;
|
||||
quota_size = 0;
|
||||
quota_files = 0;
|
||||
};
|
||||
|
||||
# Generates a json file containing a static configuration
|
||||
# of users and folders to import to SFTPGo.
|
||||
loadDataJson = config: pkgs.writeText "users-and-folders.json" (builtins.toJSON {
|
||||
users =
|
||||
mapAttrsToList (name: user: generateUserAttrSet config user) (normalUsers config);
|
||||
|
||||
folders = [
|
||||
{
|
||||
name = sharedFolderName;
|
||||
description = "shared folder";
|
||||
|
||||
# 0: local filesystem
|
||||
# 1: AWS S3 compatible
|
||||
# 2: Google Cloud Storage
|
||||
filesystem.provider = 0;
|
||||
|
||||
# Mapped path on the local filesystem
|
||||
mapped_path = "${config.services.sftpgo.dataDir}/${sharedFolderName}";
|
||||
|
||||
# All users in the matching group gain access
|
||||
users = config.users.groups.${sharedFolderName}.members;
|
||||
}
|
||||
];
|
||||
});
|
||||
|
||||
# Generated Host Key for connecting to SFTPGo's sftp subsystem.
|
||||
snakeOilHostKey = pkgs.writeText "sftpgo_ed25519_host_key" ''
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||
QyNTUxOQAAACBOtQu6U135yxtrvUqPoozUymkjoNNPVK6rqjS936RLtQAAAJAXOMoSFzjK
|
||||
EgAAAAtzc2gtZWQyNTUxOQAAACBOtQu6U135yxtrvUqPoozUymkjoNNPVK6rqjS936RLtQ
|
||||
AAAEAoRLEV1VD80mg314ObySpfrCcUqtWoOSS3EtMPPhx08U61C7pTXfnLG2u9So+ijNTK
|
||||
aSOg009UrquqNL3fpEu1AAAADHNmdHBnb0BuaXhvcwE=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
'';
|
||||
|
||||
adminUsername = "admin";
|
||||
adminPassword = "secretadminpassword";
|
||||
aliceUsername = "alice";
|
||||
alicePassword = "secretalicepassword";
|
||||
bobUsername = "bob";
|
||||
bobPassword = "secretbobpassword";
|
||||
eveUsername = "eve";
|
||||
evePassword = "secretevepassword";
|
||||
sharedFolderName = "shared";
|
||||
|
||||
# A file for testing uploading via SFTP
|
||||
testFile = pkgs.writeText "test.txt" "hello world";
|
||||
sharedFile = pkgs.writeText "shared.txt" "shared content";
|
||||
|
||||
# Define the for exposing SFTP
|
||||
sftpPort = 2022;
|
||||
|
||||
# Define the for exposing HTTP
|
||||
httpPort = 8080;
|
||||
in
|
||||
{
|
||||
name = "sftpgo";
|
||||
|
||||
meta.maintainers = with maintainers; [ yayayayaka ];
|
||||
|
||||
nodes = {
|
||||
server = { nodes, ... }: {
|
||||
networking.firewall.allowedTCPPorts = [ sftpPort httpPort ];
|
||||
|
||||
# nodes.server.configure postgresql database
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = [ "sftpgo" ];
|
||||
ensureUsers = [{
|
||||
name = "sftpgo";
|
||||
ensurePermissions."DATABASE sftpgo" = "ALL PRIVILEGES";
|
||||
}];
|
||||
};
|
||||
|
||||
services.sftpgo = {
|
||||
enable = true;
|
||||
|
||||
loadDataFile = (loadDataJson nodes.server);
|
||||
|
||||
settings = {
|
||||
data_provider = {
|
||||
driver = "postgresql";
|
||||
name = "sftpgo";
|
||||
username = "sftpgo";
|
||||
host = "/run/postgresql";
|
||||
port = 5432;
|
||||
|
||||
# Enables the possibility to create an initial admin user on first startup.
|
||||
create_default_admin = true;
|
||||
};
|
||||
|
||||
httpd.bindings = [
|
||||
{
|
||||
address = ""; # listen on all interfaces
|
||||
port = httpPort;
|
||||
enable_https = false;
|
||||
|
||||
enable_web_client = true;
|
||||
enable_web_admin = true;
|
||||
}
|
||||
];
|
||||
|
||||
# Enable sftpd
|
||||
sftpd = {
|
||||
bindings = [{
|
||||
address = ""; # listen on all interfaces
|
||||
port = sftpPort;
|
||||
}];
|
||||
host_keys = [ snakeOilHostKey ];
|
||||
password_authentication = false;
|
||||
keyboard_interactive_authentication = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services.sftpgo = {
|
||||
after = [ "postgresql.service"];
|
||||
environment = {
|
||||
# Update existing users
|
||||
SFTPGO_LOADDATA_MODE = "0";
|
||||
SFTPGO_DEFAULT_ADMIN_USERNAME = adminUsername;
|
||||
|
||||
# This will end up in cleartext in the systemd service.
|
||||
# Don't use this approach in production!
|
||||
SFTPGO_DEFAULT_ADMIN_PASSWORD = adminPassword;
|
||||
};
|
||||
};
|
||||
|
||||
# Sets up the folder hierarchy on the local filesystem
|
||||
systemd.tmpfiles.rules =
|
||||
let
|
||||
sftpgoUser = nodes.server.services.sftpgo.user;
|
||||
sftpgoGroup = nodes.server.services.sftpgo.group;
|
||||
statePath = nodes.server.services.sftpgo.dataDir;
|
||||
in [
|
||||
# Create state directory
|
||||
"d ${statePath} 0750 ${sftpgoUser} ${sftpgoGroup} -"
|
||||
"d ${statePath}/users 0750 ${sftpgoUser} ${sftpgoGroup} -"
|
||||
|
||||
# Created shared folder directories
|
||||
"d ${statePath}/${sharedFolderName} 2770 ${sftpgoUser} ${sharedFolderName} -"
|
||||
]
|
||||
++ mapAttrsToList (name: user:
|
||||
# Create private user directories
|
||||
''
|
||||
d ${statePath}/users/${user.name} 0700 ${sftpgoUser} ${sftpgoGroup} -
|
||||
d ${statePath}/users/${user.name}/private 0700 ${sftpgoUser} ${sftpgoGroup} -
|
||||
''
|
||||
) (normalUsers nodes.server);
|
||||
|
||||
users.users =
|
||||
let
|
||||
commonAttrs = {
|
||||
isNormalUser = true;
|
||||
openssh.authorizedKeys.keys = [ snakeOilPublicKey ];
|
||||
};
|
||||
in {
|
||||
# SFTPGo admin user
|
||||
admin = commonAttrs // {
|
||||
password = adminPassword;
|
||||
};
|
||||
|
||||
# Alice and bob share folders with each other
|
||||
alice = commonAttrs // {
|
||||
password = alicePassword;
|
||||
extraGroups = [ sharedFolderName ];
|
||||
};
|
||||
|
||||
bob = commonAttrs // {
|
||||
password = bobPassword;
|
||||
extraGroups = [ sharedFolderName ];
|
||||
};
|
||||
|
||||
# Eve has no shared folders
|
||||
eve = commonAttrs // {
|
||||
password = evePassword;
|
||||
};
|
||||
};
|
||||
|
||||
users.groups.${sharedFolderName} = {};
|
||||
|
||||
specialisation = {
|
||||
# A specialisation for asserting that SFTPGo can bind to privileged ports.
|
||||
privilegedPorts.configuration = { ... }: {
|
||||
networking.firewall.allowedTCPPorts = [ 22 80 ];
|
||||
services.sftpgo = {
|
||||
settings = {
|
||||
sftpd.bindings = mkForce [{
|
||||
address = "";
|
||||
port = 22;
|
||||
}];
|
||||
|
||||
httpd.bindings = mkForce [{
|
||||
address = "";
|
||||
port = 80;
|
||||
}];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
client = { nodes, ... }: {
|
||||
# Add the SFTPGo host key to the global known_hosts file
|
||||
programs.ssh.knownHosts =
|
||||
let
|
||||
commonAttrs = {
|
||||
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE61C7pTXfnLG2u9So+ijNTKaSOg009UrquqNL3fpEu1";
|
||||
};
|
||||
in {
|
||||
"server" = commonAttrs;
|
||||
"[server]:2022" = commonAttrs;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
testScript = { nodes, ... }: let
|
||||
# A function to generate test cases for wheter
|
||||
# a specified username is expected to access the shared folder.
|
||||
accessSharedFoldersSubtest =
|
||||
{ # The username to run as
|
||||
username
|
||||
# Whether the tests are expected to succeed or not
|
||||
, shouldSucceed ? true
|
||||
}: ''
|
||||
with subtest("Test whether ${username} can access shared folders"):
|
||||
client.${if shouldSucceed then "succeed" else "fail"}("sftp -P ${toString sftpPort} -b ${
|
||||
pkgs.writeText "${username}-ls-${sharedFolderName}" ''
|
||||
ls ${sharedFolderName}
|
||||
''
|
||||
} ${username}@server")
|
||||
'';
|
||||
statePath = nodes.server.services.sftpgo.dataDir;
|
||||
in ''
|
||||
start_all()
|
||||
|
||||
client.wait_for_unit("default.target")
|
||||
server.wait_for_unit("sftpgo.service")
|
||||
|
||||
with subtest("web client"):
|
||||
client.wait_until_succeeds("curl -sSf http://server:${toString httpPort}/web/client/login")
|
||||
|
||||
# Ensure sftpgo found the static folder
|
||||
client.wait_until_succeeds("curl -o /dev/null -sSf http://server:${toString httpPort}/static/favicon.ico")
|
||||
|
||||
with subtest("Setup SSH keys"):
|
||||
client.succeed("mkdir -m 700 /root/.ssh")
|
||||
client.succeed("cat ${snakeOilPrivateKey} > /root/.ssh/id_ecdsa")
|
||||
client.succeed("chmod 600 /root/.ssh/id_ecdsa")
|
||||
|
||||
with subtest("Copy a file over sftp"):
|
||||
client.wait_until_succeeds("scp -P ${toString sftpPort} ${toString testFile} alice@server:/private/${testFile.name}")
|
||||
server.succeed("test -s ${statePath}/users/alice/private/${testFile.name}")
|
||||
|
||||
# The configured ACL should prevent uploading files to the root directory
|
||||
client.fail("scp -P ${toString sftpPort} ${toString testFile} alice@server:/")
|
||||
|
||||
with subtest("Attempting an interactive SSH sessions must fail"):
|
||||
client.fail("ssh -p ${toString sftpPort} alice@server")
|
||||
|
||||
${accessSharedFoldersSubtest {
|
||||
username = "alice";
|
||||
shouldSucceed = true;
|
||||
}}
|
||||
|
||||
${accessSharedFoldersSubtest {
|
||||
username = "bob";
|
||||
shouldSucceed = true;
|
||||
}}
|
||||
|
||||
${accessSharedFoldersSubtest {
|
||||
username = "eve";
|
||||
shouldSucceed = false;
|
||||
}}
|
||||
|
||||
with subtest("Test sharing files"):
|
||||
# Alice uploads a file to shared folder
|
||||
client.succeed("scp -P ${toString sftpPort} ${toString sharedFile} alice@server:/${sharedFolderName}/${sharedFile.name}")
|
||||
server.succeed("test -s ${statePath}/${sharedFolderName}/${sharedFile.name}")
|
||||
|
||||
# Bob downloads the file from shared folder
|
||||
client.succeed("scp -P ${toString sftpPort} bob@server:/shared/${sharedFile.name} ${sharedFile.name}")
|
||||
client.succeed("test -s ${sharedFile.name}")
|
||||
|
||||
# Eve should not get the file from shared folder
|
||||
client.fail("scp -P ${toString sftpPort} eve@server:/shared/${sharedFile.name}")
|
||||
|
||||
server.succeed("/run/current-system/specialisation/privilegedPorts/bin/switch-to-configuration test")
|
||||
|
||||
client.wait_until_succeeds("sftp -P 22 -b ${pkgs.writeText "get-hello-world.txt" ''
|
||||
get /private/${testFile.name}
|
||||
''} alice@server")
|
||||
'';
|
||||
}
|
@ -1,10 +1,10 @@
|
||||
{ python3Packages, lib, flac, lame, opusTools, vorbis-tools, ffmpeg }:
|
||||
{ python3Packages, fetchPypi, lib, flac, lame, opusTools, vorbis-tools, ffmpeg }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "flac2all";
|
||||
version = "5.1";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "OBjlr7cbSx2WOIfZUNwHy5Hpb2Fmh3vmZdc70JiWsiI=";
|
||||
};
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
python3.pkgs.buildPythonPackage rec {
|
||||
@ -7,7 +8,7 @@ python3.pkgs.buildPythonPackage rec {
|
||||
version = "2.0.67";
|
||||
format = "setuptools";
|
||||
|
||||
src = python3.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-lFxAMjglQZXCySr83PtvStU6hw2ucQu+rSjIHo1yZBk=";
|
||||
};
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3Packages
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
with python3Packages;
|
||||
|
@ -5,13 +5,13 @@
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
version = "10.11";
|
||||
version = "10.13";
|
||||
pname = "monkeys-audio";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://monkeysaudio.com/files/MAC_${
|
||||
builtins.concatStringsSep "" (lib.strings.splitString "." version)}_SDK.zip";
|
||||
sha256 = "sha256-sA1JXRbyHMHBCsWau9GrlxeRiCzxZfCTuLFebZmIoRE=";
|
||||
sha256 = "sha256-r+Xjp5q7ehrF34j1FndiKZ+y+FTG1ORXS+9p+R2KbOQ=";
|
||||
stripRoot = false;
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
|
@ -1,9 +1,9 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Bandcamp";
|
||||
version = "1.1.5";
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-wg9zcOKfZQRhpyA1Cu5wvdwKpmrlcr2m9mrqBHgUXAQ=";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Iris";
|
||||
version = "3.64.0";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "062x73glhn1x4wgc7zmb9y3cq15d5grgqf5drdpbp6p3cgk4s2vc";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "mopidy-jellyfin";
|
||||
version = "1.0.4";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version;
|
||||
pname = "Mopidy-Jellyfin";
|
||||
sha256 = "ny0u6HdOlZCsmIzZuQ1rql+bvHU3xkh8IdwhJVHNH9c=";
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ stdenv
|
||||
, lib
|
||||
{ lib
|
||||
, mopidy
|
||||
, python3Packages
|
||||
, fetchPypi
|
||||
, fetchpatch
|
||||
}:
|
||||
|
||||
@ -9,7 +9,7 @@ python3Packages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Local";
|
||||
version = "3.2.1";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "18w39mxpv8p17whd6zfw5653d21q138f8xd6ili6ks2g2dbm25i9";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, pythonPackages, mopidy, glibcLocales }:
|
||||
{ lib, pythonPackages, fetchPypi, mopidy, glibcLocales }:
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Moped";
|
||||
version = "0.7.1";
|
||||
|
||||
src = pythonPackages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "15461174037d87af93dd59a236d4275c5abf71cea0670ffff24a7d0399a8a2e4";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, pythonPackages, mopidy }:
|
||||
{ lib, pythonPackages, fetchPypi, mopidy }:
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Mopify";
|
||||
version = "1.6.1";
|
||||
|
||||
src = pythonPackages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "93ad2b3d38b1450c8f2698bb908b0b077a96b3f64cdd6486519e518132e23a5c";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "Mopidy-MPD";
|
||||
version = "3.3.0";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-CeLMRqj9cwBvQrOx7XHVV8MjDjwOosONVlsN2o+vTVM=";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "mopidy-mpris";
|
||||
version = "3.0.3";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version;
|
||||
pname = "Mopidy-MPRIS";
|
||||
sha256 = "sha256-rHQgNIyludTEL7RDC8dIpyGTMOt1Tazn6i/orKlSP4U=";
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, pythonPackages, mopidy }:
|
||||
{ lib, pythonPackages, fetchPypi, mopidy }:
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
pname = "mopidy-muse";
|
||||
version = "0.0.27";
|
||||
|
||||
src = pythonPackages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version;
|
||||
pname = "Mopidy-Muse";
|
||||
sha256 = "0jx9dkgxr07avzz9zskzhqy98zsxkdrf7iid2ax5vygwf8qsx8ks";
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, pythonPackages, mopidy }:
|
||||
{ lib, fetchPypi, pythonPackages, mopidy }:
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Notify";
|
||||
version = "0.2.0";
|
||||
|
||||
src = pythonPackages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-lzZupjlS0kbNvsn18serOoMfu0sRb0nRwpowvOPvt/g=";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "mopidy-podcast";
|
||||
version = "3.0.0";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version;
|
||||
pname = "Mopidy-Podcast";
|
||||
sha256 = "1z2b523yvdpcf8p7m7kczrvaw045lmxzhq4qj00dflxa2yw61qxr";
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Scrobbler";
|
||||
version = "2.0.1";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "11vxgax4xgkggnq4fr1rh2rcvzspkkimck5p3h4phdj3qpnj0680";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "mopidy-somafm";
|
||||
version = "2.0.2";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version;
|
||||
pname = "Mopidy-SomaFM";
|
||||
sha256 = "DC0emxkoWfjGHih2C8nINBFByf521Xf+3Ks4JRxNPLM=";
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3Packages
|
||||
, fetchPypi
|
||||
, mopidy
|
||||
}:
|
||||
|
||||
@ -7,7 +8,7 @@ python3Packages.buildPythonApplication rec {
|
||||
pname = "Mopidy-Tidal";
|
||||
version = "0.3.2";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-ekqhzKyU2WqTOeRR1ZSZA9yW3UXsLBsC2Bk6FZrQgmc=";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, mopidy }:
|
||||
{ lib, python3Packages, fetchPypi, mopidy }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "mopidy-tunein";
|
||||
version = "1.1.0";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version;
|
||||
pname = "Mopidy-TuneIn";
|
||||
sha256 = "01y1asylscr73yqx071imhrzfzlg07wmqqzkdvpgm6r35marc2li";
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
, mopidy
|
||||
}:
|
||||
|
||||
@ -8,7 +9,7 @@ let
|
||||
packageOverrides = self: super: {
|
||||
ytmusicapi = super.ytmusicapi.overridePythonAttrs (old: rec {
|
||||
version = "0.25.1";
|
||||
src = self.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit (old) pname;
|
||||
inherit version;
|
||||
hash = "sha256-uc/fgDetSYaCRzff0SzfbRhs3TaKrfE2h6roWkkj8yQ=";
|
||||
@ -20,7 +21,7 @@ in python.pkgs.buildPythonApplication rec {
|
||||
pname = "mopidy-ytmusic";
|
||||
version = "0.3.8";
|
||||
|
||||
src = python.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version;
|
||||
pname = "mopidy_ytmusic";
|
||||
sha256 = "6b4d8ff9c477dbdd30d0259a009494ebe104cad3f8b37241ae503e5bce4ec2e8";
|
||||
|
@ -5,14 +5,14 @@
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "qpwgraph";
|
||||
version = "0.4.0";
|
||||
version = "0.4.2";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.freedesktop.org";
|
||||
owner = "rncbc";
|
||||
repo = "qpwgraph";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-bOg+7bNEhnemhb+Xi3x77ZEjqKFjUXSCFgvcLXrxz/E=";
|
||||
sha256 = "sha256-MkPPr9gvEeW94fXH8K9GVYdYpuG1LDgKD16l2pNFvkA=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config ];
|
||||
|
@ -1,9 +1,9 @@
|
||||
{ lib, python3Packages, dbus }:
|
||||
{ lib, python3Packages, fetchPypi, dbus }:
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "spotify-cli-linux";
|
||||
version = "1.6.0";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "0slyc3jfrj3rwq8rv6p5aqkw487aw7a87kmf1fb6n4vnvcf08v7w";
|
||||
};
|
||||
|
@ -1,23 +1,31 @@
|
||||
{ buildGoModule
|
||||
, fetchFromGitHub
|
||||
, lib
|
||||
, testers
|
||||
, faraday
|
||||
}:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "faraday";
|
||||
version = "0.2.5-alpha";
|
||||
version = "0.2.11-alpha";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lightninglabs";
|
||||
repo = "faraday";
|
||||
rev = "v${version}";
|
||||
sha256 = "16mz333a6awii6g46gr597j31jmgws4285s693q0b87fl1ggj2zz";
|
||||
hash = "sha256-KiGj24sBeClmzW60lRrvXwgXf3My7jhHTY+VhIMMp0k=";
|
||||
};
|
||||
|
||||
vendorSha256 = "1nclmvypxp5436q6qaagp1k5bfmaia7hsykw47va0pijlsvsbmck";
|
||||
vendorHash = "sha256-ku/4VE1Gj62vuJLh9J6vKlxpyI7S0RsMDozV7U5YDe4=";
|
||||
|
||||
subPackages = [ "cmd/frcli" "cmd/faraday" ];
|
||||
|
||||
ldflags = [ "-s" "-w" ];
|
||||
|
||||
passthru.tests.version = testers.testVersion {
|
||||
package = faraday;
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
description = "LND Channel Management Tools";
|
||||
homepage = "https://github.com/lightninglabs/faraday";
|
||||
|
1530
pkgs/applications/blockchains/polkadot/Cargo.lock
generated
1530
pkgs/applications/blockchains/polkadot/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -9,13 +9,13 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "polkadot";
|
||||
version = "0.9.41";
|
||||
version = "0.9.42";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "paritytech";
|
||||
repo = "polkadot";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-wjV/+2n9B617S6MxC48vtpbBBKGCWBEjRj7K6m630Mo=";
|
||||
hash = "sha256-W7mD/PLrub5u9GIN8qiTWNsTfirx0aBF2Lu+2PMoxOg=";
|
||||
|
||||
# the build process of polkadot requires a .git folder in order to determine
|
||||
# the git commit hash that is being built and add it to the version string.
|
||||
@ -34,7 +34,7 @@ rustPlatform.buildRustPackage rec {
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
outputHashes = {
|
||||
"binary-merkle-tree-4.0.0-dev" = "sha256-ngtW11MGs+fcuCp9J5NH+dYJeK4YM5vWpRk0OuLYHus=";
|
||||
"binary-merkle-tree-4.0.0-dev" = "sha256-PEPmG+39YqPQOzT8u1SNTCrVwNWErifBCVz+l8TvdyE=";
|
||||
"sub-tokens-0.1.0" = "sha256-GvhgZhOIX39zF+TbQWtTCgahDec4lQjH+NqamLFLUxM=";
|
||||
};
|
||||
};
|
||||
|
@ -1,21 +1,22 @@
|
||||
{ lib, stdenv, fetchurl, jdk, glib, wrapGAppsHook }:
|
||||
{ lib, stdenv, fetchurl, openjdk, glib, wrapGAppsHook }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "bluej";
|
||||
version = "5.0.3";
|
||||
version = "5.1.0";
|
||||
|
||||
src = fetchurl {
|
||||
# We use the deb here. First instinct might be to go for the "generic" JAR
|
||||
# download, but that is actually a graphical installer that is much harder
|
||||
# to unpack than the deb.
|
||||
url = "https://www.bluej.org/download/files/BlueJ-linux-${builtins.replaceStrings ["."] [""] version}.deb";
|
||||
sha256 = "sha256-OarqmptxZc7xEEYeoCVqHXkAvfzfSYx5nUp/iWPyoqw=";
|
||||
sha256 = "sha256-tOb15wU9OjUt0D8l/JkaGYj84L7HV4FUnQQB5cRAxG0=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ wrapGAppsHook ];
|
||||
buildInputs = [ glib ];
|
||||
|
||||
sourceRoot = ".";
|
||||
|
||||
preUnpack = ''
|
||||
unpackCmdHooks+=(_tryDebData)
|
||||
_tryDebData() {
|
||||
@ -26,39 +27,29 @@ stdenv.mkDerivation rec {
|
||||
}
|
||||
'';
|
||||
|
||||
dontWrapGApps = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
if [ -n "$prefix" ]; then
|
||||
mkdir -p "$prefix"
|
||||
fi
|
||||
mkdir -p $out
|
||||
cp -r usr/* $out
|
||||
|
||||
mkdir -p "$out"
|
||||
|
||||
if shopt -q dotglob; then dotglobOpt=$?; else dotglobOpt=$?; fi
|
||||
shopt -s dotglob
|
||||
for file in usr/*; do
|
||||
cp -R "$file" "$out"
|
||||
done
|
||||
if (( !dotglobOpt )); then shopt -u dotglob; fi
|
||||
makeWrapper ${openjdk}/bin/java $out/bin/bluej \
|
||||
"''${gappsWrapperArgs[@]}" \
|
||||
--add-flags "-Dawt.useSystemAAFontSettings=on -Xmx512M \
|
||||
--add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED \
|
||||
-jar $out/share/bluej/bluej.jar"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontWrapGApps = true;
|
||||
|
||||
preFixup = ''
|
||||
makeWrapper ${jdk}/bin/java $out/bin/bluej \
|
||||
"''${gappsWrapperArgs[@]}" \
|
||||
--add-flags "-Djavafx.embed.singleThread=true -Dawt.useSystemAAFontSettings=on -Xmx512M -cp $out/share/bluej/bluej.jar bluej.Boot"
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "A simple integrated development environment for Java";
|
||||
homepage = "https://www.bluej.org/";
|
||||
sourceProvenance = with sourceTypes; [ binaryBytecode ];
|
||||
license = licenses.gpl2ClasspathPlus;
|
||||
maintainers = with maintainers; [ chvp ];
|
||||
platforms = platforms.unix;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
@ -1,24 +1,17 @@
|
||||
{ lib, stdenv, fetchurl, emacs }:
|
||||
{ lib, trivialBuild, fetchurl, haskell-mode }:
|
||||
|
||||
# this package installs the emacs-mode which
|
||||
# resides in the hsc3 sources.
|
||||
|
||||
let version = "0.15";
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
trivialBuild rec {
|
||||
pname = "hsc3-mode";
|
||||
inherit version;
|
||||
version = "0.15";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://hackage/hsc3-0.15/hsc3-0.15.tar.gz";
|
||||
url = "mirror://hackage/hsc3-${version}/hsc3-${version}.tar.gz";
|
||||
sha256 = "2f3b15655419cf8ebe25ab1c6ec22993b2589b4ffca7c3a75ce478ca78a0bde6";
|
||||
};
|
||||
|
||||
buildInputs = [ emacs ];
|
||||
packageRequires = [ haskell-mode ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p "$out/share/emacs/site-lisp"
|
||||
cp "emacs/hsc3.el" "$out/share/emacs/site-lisp"
|
||||
'';
|
||||
sourceRoot = "hsc3-${version}/emacs";
|
||||
|
||||
meta = {
|
||||
homepage = "http://rd.slavepianos.org/?t=hsc3";
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
with python3Packages;
|
||||
|
||||
|
@ -23,13 +23,13 @@
|
||||
|
||||
let
|
||||
pname = "pulsar";
|
||||
version = "1.104.0";
|
||||
version = "1.105.0";
|
||||
|
||||
sourcesPath = {
|
||||
x86_64-linux.tarname = "Linux.${pname}-${version}.tar.gz";
|
||||
x86_64-linux.hash = "sha256-HEMUQVNPb6qWIXX25N79HwHo7j11MyFiBRsq9otdAL8=";
|
||||
x86_64-linux.hash = "sha256-j2d83m8B6lt1eRAwOOTEq4o+CNe8I+6rkz9qyux55Qw=";
|
||||
aarch64-linux.tarname = "ARM.Linux.${pname}-${version}-arm64.tar.gz";
|
||||
aarch64-linux.hash = "sha256-f+s54XtLLdhTFY9caKTKngJF6zLai0F7ur9v37bwuNE=";
|
||||
aarch64-linux.hash = "sha256-iZVE1R30Tynyn/cAwNIiGrsCMTkWKFUforOkGXSzMsw=";
|
||||
}.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
|
||||
|
||||
additionalLibs = lib.makeLibraryPath [
|
||||
@ -119,7 +119,7 @@ stdenv.mkDerivation rec {
|
||||
# But asar complains because the node_gyp unpacked dependency uses a prebuilt Python3 itself
|
||||
|
||||
rm $opt/resources/app.asar.unpacked/node_modules/tree-sitter-bash/build/node_gyp_bins/python3
|
||||
ln -s ${python3}/bin/python3 $opt/resources/app.asar.unpacked/node_modules/tree-sitter-bash/build/node_gyp_bins/python3
|
||||
ln -s ${python3.interpreter} $opt/resources/app.asar.unpacked/node_modules/tree-sitter-bash/build/node_gyp_bins/python3
|
||||
'' + ''
|
||||
# Patch the bundled node executables
|
||||
find $opt -name "*.node" -exec patchelf --set-rpath "${newLibpath}:$opt" {} \;
|
||||
|
@ -13,6 +13,17 @@ const constants = {
|
||||
targetFile: new URL("default.nix", import.meta.url).pathname,
|
||||
};
|
||||
|
||||
async function utf16ToUtf8(blob) {
|
||||
// Sometime, upstream saves the SHA256SUMS.txt file in UTF-16, which absolutely breaks node's string handling
|
||||
// So we need to convert this blob to UTF-8
|
||||
|
||||
// We need to skip the first 2 bytes, which are the BOM
|
||||
const arrayBuffer = await blob.slice(2).arrayBuffer();
|
||||
const buffer = Buffer.from(arrayBuffer);
|
||||
const utf8String = buffer.toString('utf16le');
|
||||
return utf8String;
|
||||
}
|
||||
|
||||
async function getLatestVersion() {
|
||||
const requestResult = await fetch(constants.githubUrl);
|
||||
if (!requestResult.ok) {
|
||||
@ -37,6 +48,7 @@ async function getSha256Sum(hashFileContent, targetFile) {
|
||||
|
||||
let sha256 = hashFileContent.
|
||||
split('\n').
|
||||
map(line => line.replace("\r", "")). // Side-effect of the UTF-16 conversion, if the file was created from Windows
|
||||
filter((line) => line.endsWith(targetFile))[0].
|
||||
split(' ')[0];
|
||||
|
||||
@ -47,14 +59,21 @@ async function getSha256Sums(newVersion) {
|
||||
// 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
|
||||
// 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
|
||||
const hashFileUrl = constants.sha256FileURL(newVersion);
|
||||
const hashFileContent = await fetch(hashFileUrl).then((response) => response.text());
|
||||
const hashFileContent = await fetch(hashFileUrl).then((response) => response.blob());
|
||||
const headerbuffer = await hashFileContent.slice(0, 2).arrayBuffer()
|
||||
const header = Buffer.from(headerbuffer).toString('hex');
|
||||
|
||||
// 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
|
||||
const hashFileContentString = header == 'fffe' ?
|
||||
await utf16ToUtf8(hashFileContent) :
|
||||
await hashFileContent.text();
|
||||
|
||||
let x86_64;
|
||||
let aarch64;
|
||||
console.log("Getting new hashes");
|
||||
let promises = [
|
||||
getSha256Sum(hashFileContent, constants.x86_64FileName(newVersion)).then((hash) => { x86_64 = hash; }),
|
||||
getSha256Sum(hashFileContent, constants.aarch64FileName(newVersion)).then((hash) => { aarch64 = hash; }),
|
||||
getSha256Sum(hashFileContentString, constants.x86_64FileName(newVersion)).then((hash) => { x86_64 = hash; }),
|
||||
getSha256Sum(hashFileContentString, constants.aarch64FileName(newVersion)).then((hash) => { aarch64 = hash; }),
|
||||
];
|
||||
await Promise.all(promises);
|
||||
return { x86_64, aarch64 };
|
||||
|
@ -799,6 +799,7 @@ https://github.com/Quramy/tsuquyomi/,,
|
||||
https://github.com/folke/twilight.nvim/,,
|
||||
https://github.com/leafgarland/typescript-vim/,,
|
||||
https://github.com/jose-elias-alvarez/typescript.nvim/,,
|
||||
https://github.com/kaarmu/typst.vim/,HEAD,
|
||||
https://github.com/nvchad/ui/,HEAD,nvchad-ui
|
||||
https://github.com/SirVer/ultisnips/,,
|
||||
https://github.com/mbbill/undotree/,,
|
||||
|
@ -1132,8 +1132,8 @@ let
|
||||
mktplcRef = {
|
||||
name = "prettier-vscode";
|
||||
publisher = "esbenp";
|
||||
version = "9.12.0";
|
||||
sha256 = "sha256-b7EaYYJNZQBqhyKJ04tytmD9DDRcvA68HTo5JHTr9Fo=";
|
||||
version = "9.13.0";
|
||||
sha256 = "sha256-Iqz1O6odSzAfojCgGDwDA1YtnWU5Ei7vx9Qt25/1SLw=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/esbenp.prettier-vscode/changelog";
|
||||
|
@ -34,14 +34,14 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
+ lib.optionalString enableQt "-qt"
|
||||
+ lib.optionalString (!enableQt) "-sdl"
|
||||
+ lib.optionalString forceWayland "-wayland";
|
||||
version = "1.15.3";
|
||||
version = "1.15.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hrydgard";
|
||||
repo = "ppsspp";
|
||||
rev = "v${finalAttrs.version}";
|
||||
fetchSubmodules = true;
|
||||
sha256 = "sha256-5IICMP7KEniAnuxdDPECN+8jXA0ZKgPsdIL6Og2xyX4=";
|
||||
sha256 = "sha256-D94PLJfWalLk2kbS0PEHTMDdWxZW4YXwp3VQDHNZlRU=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
@ -29,13 +29,13 @@
|
||||
|
||||
buildDotnetModule rec {
|
||||
pname = "ryujinx";
|
||||
version = "1.1.733"; # Based off of the official github actions builds: https://github.com/Ryujinx/Ryujinx/actions/workflows/release.yml
|
||||
version = "1.1.819"; # Based off of the official github actions builds: https://github.com/Ryujinx/Ryujinx/actions/workflows/release.yml
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Ryujinx";
|
||||
repo = "Ryujinx";
|
||||
rev = "9f12e50a546b15533778ed0d8290202af91c10a2";
|
||||
sha256 = "1d1hg2sv0h56a56xnarcfp73df3rbw3iax85g258l6w2kxhkc42a";
|
||||
rev = "4ca78eded52f21089400cc28351b9353279b8171";
|
||||
sha256 = "13g5sgql14rr7qmsiavm6kkjkv9sqqq7cmwpy9iiahbfzc9w1wc1";
|
||||
};
|
||||
|
||||
dotnet-sdk = dotnetCorePackages.sdk_7_0;
|
||||
@ -80,7 +80,7 @@ buildDotnetModule rec {
|
||||
];
|
||||
|
||||
projectFile = "Ryujinx.sln";
|
||||
testProjectFile = "Ryujinx.Tests/Ryujinx.Tests.csproj";
|
||||
testProjectFile = "src/Ryujinx.Tests/Ryujinx.Tests.csproj";
|
||||
doCheck = true;
|
||||
|
||||
dotnetFlags = [
|
||||
|
12
pkgs/applications/emulators/ryujinx/deps.nix
generated
12
pkgs/applications/emulators/ryujinx/deps.nix
generated
@ -20,7 +20,7 @@
|
||||
(fetchNuGet { pname = "CommandLineParser"; version = "2.9.1"; sha256 = "1sldkj8lakggn4hnyabjj1fppqh50fkdrr1k99d4gswpbk5kv582"; })
|
||||
(fetchNuGet { pname = "Concentus"; version = "1.1.7"; sha256 = "0y5z444wrbhlmsqpy2sxmajl1fbf74843lvgj3y6vz260dn2q0l0"; })
|
||||
(fetchNuGet { pname = "DiscordRichPresence"; version = "1.1.3.18"; sha256 = "0p4bhaggjjfd4gl06yiphqgncxgcq2bws4sjkrw0n2ldf3hgrps3"; })
|
||||
(fetchNuGet { pname = "DynamicData"; version = "7.13.5"; sha256 = "088ry176ba314m4hc1vbcxisflqzs7p7vvn8vqzxy3kj1rimgfmf"; })
|
||||
(fetchNuGet { pname = "DynamicData"; version = "7.13.8"; sha256 = "10ywbzk58046kgsbd9rybpa9m1v11as45jvf1qvxnl42hyc7q654"; })
|
||||
(fetchNuGet { pname = "ExCSS"; version = "4.1.4"; sha256 = "1y50xp6rihkydbf5l73mr3qq2rm6rdfjrzdw9h1dw9my230q5lpd"; })
|
||||
(fetchNuGet { pname = "Fizzler"; version = "1.2.1"; sha256 = "1w5jb1d0figbv68dydbnlcsfmqlc3sv9z1zxp7d79dg2dkarc4qm"; })
|
||||
(fetchNuGet { pname = "FluentAvaloniaUI"; version = "1.4.5"; sha256 = "1j5ivy83f13dgn09qrfkq44ijvh0m9rbdx8760g47di70c4lda7j"; })
|
||||
@ -50,10 +50,10 @@
|
||||
(fetchNuGet { pname = "Microsoft.CSharp"; version = "4.7.0"; sha256 = "0gd67zlw554j098kabg887b5a6pq9kzavpa3jjy5w53ccjzjfy8j"; })
|
||||
(fetchNuGet { pname = "Microsoft.DotNet.PlatformAbstractions"; version = "3.1.6"; sha256 = "0b9myd7gqbpaw9pkd2bx45jhik9mwj0f1ss57sk2cxmag2lkdws5"; })
|
||||
(fetchNuGet { pname = "Microsoft.Extensions.DependencyModel"; version = "6.0.0"; sha256 = "08c4fh1n8vsish1vh7h73mva34g0as4ph29s4lvps7kmjb4z64nl"; })
|
||||
(fetchNuGet { pname = "Microsoft.IdentityModel.Abstractions"; version = "6.29.0"; sha256 = "06sdjg78764ycaq3bd32daacd9pjsvkihdzrw8d1cnmk3c42kvq3"; })
|
||||
(fetchNuGet { pname = "Microsoft.IdentityModel.JsonWebTokens"; version = "6.29.0"; sha256 = "0iydfzz4vzzpx24q8mgvc3n289s00inc19x6a0w2v378mx4jkfl0"; })
|
||||
(fetchNuGet { pname = "Microsoft.IdentityModel.Logging"; version = "6.29.0"; sha256 = "04vj5h638ljz2fylr2idgjbfq5lzbw79m5ixcj1ikl4ydl9jhp9p"; })
|
||||
(fetchNuGet { pname = "Microsoft.IdentityModel.Tokens"; version = "6.29.0"; sha256 = "05crx7w79m3jxlbnfc2c8i63m5z6h28y04qv6sc84312rzi2yw8c"; })
|
||||
(fetchNuGet { pname = "Microsoft.IdentityModel.Abstractions"; version = "6.30.1"; sha256 = "1jb7za7kc41zx4vafpmyj42vzqb407b34npb9g6f42sk7127hip1"; })
|
||||
(fetchNuGet { pname = "Microsoft.IdentityModel.JsonWebTokens"; version = "6.30.1"; sha256 = "1c1hs0nrzlrpvdrpj01yr7cdknh19gdxrahndb5fmn8p4k1vljlv"; })
|
||||
(fetchNuGet { pname = "Microsoft.IdentityModel.Logging"; version = "6.30.1"; sha256 = "02dkmh0qc2sfayvhzp8fgvn58b84yn8z4x3aijvjqahcwv14wfzs"; })
|
||||
(fetchNuGet { pname = "Microsoft.IdentityModel.Tokens"; version = "6.30.1"; sha256 = "1283v1ynl7wp5llyswj2nd8l3pkj7yhcksy2slanid52iyqzzan1"; })
|
||||
(fetchNuGet { pname = "Microsoft.IO.RecyclableMemoryStream"; version = "2.3.2"; sha256 = "115bm7dljchr7c02hiv1r3l21r22wpml1j26fyn2amaflaihpq4l"; })
|
||||
(fetchNuGet { pname = "Microsoft.NET.Test.Sdk"; version = "17.5.0"; sha256 = "00gz2i8kx4mlq1ywj3imvf7wc6qzh0bsnynhw06z0mgyha1a21jy"; })
|
||||
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.0.1"; sha256 = "01al6cfxp68dscl15z7rxfw9zvhm64dncsw09a1vmdkacsa2v6lr"; })
|
||||
@ -177,7 +177,7 @@
|
||||
(fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
|
||||
(fetchNuGet { pname = "System.Globalization.Calendars"; version = "4.0.1"; sha256 = "0bv0alrm2ck2zk3rz25lfyk9h42f3ywq77mx1syl6vvyncnpg4qh"; })
|
||||
(fetchNuGet { pname = "System.Globalization.Extensions"; version = "4.0.1"; sha256 = "0hjhdb5ri8z9l93bw04s7ynwrjrhx2n0p34sf33a9hl9phz69fyc"; })
|
||||
(fetchNuGet { pname = "System.IdentityModel.Tokens.Jwt"; version = "6.29.0"; sha256 = "09bpj7gginq25fiyq3za5i8wm482qbnx6qhm4dxb95jrl3mmb126"; })
|
||||
(fetchNuGet { pname = "System.IdentityModel.Tokens.Jwt"; version = "6.30.1"; sha256 = "1f4x5sw9wpkk485lchl0nzdzkcy83s9b119c7g187x0qvkcvdpc2"; })
|
||||
(fetchNuGet { pname = "System.IO"; version = "4.1.0"; sha256 = "1g0yb8p11vfd0kbkyzlfsbsp5z44lwsvyc0h3dpw6vqnbi035ajp"; })
|
||||
(fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
|
||||
(fetchNuGet { pname = "System.IO.Compression"; version = "4.1.0"; sha256 = "0iym7s3jkl8n0vzm3jd6xqg9zjjjqni05x45dwxyjr2dy88hlgji"; })
|
||||
|
@ -1,10 +1,11 @@
|
||||
{ lib
|
||||
, python3
|
||||
, xorg
|
||||
, argyllcms
|
||||
, fetchPypi
|
||||
, wrapGAppsHook
|
||||
, gtk3
|
||||
, librsvg
|
||||
, xorg
|
||||
, argyllcms
|
||||
}:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
@ -12,7 +13,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
version = "3.9.10";
|
||||
format = "setuptools";
|
||||
|
||||
src = python3.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
pname = "DisplayCAL";
|
||||
inherit version;
|
||||
hash = "sha256-oDHDVb0zuAC49yPfmNe7xuFKaA1BRZGr75XwsLqugHs=";
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "dosage";
|
||||
version = "2.17";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "0vmxgn9wd3j80hp4gr5iq06jrl4gryz5zgfdd2ah30d12sfcfig0";
|
||||
};
|
||||
|
@ -1,6 +1,7 @@
|
||||
{ lib
|
||||
, mkDerivationWith
|
||||
, python3Packages
|
||||
, fetchPypi
|
||||
, p7zip
|
||||
, archiveSupport ? true
|
||||
}:
|
||||
@ -9,7 +10,7 @@ mkDerivationWith python3Packages.buildPythonApplication rec {
|
||||
pname = "kcc";
|
||||
version = "5.5.1";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version;
|
||||
pname = "KindleComicConverter";
|
||||
sha256 = "5dbee5dc5ee06a07316ae5ebaf21ffa1970094dbae5985ad735e2807ef112644";
|
||||
@ -25,7 +26,7 @@ mkDerivationWith python3Packages.buildPythonApplication rec {
|
||||
|
||||
qtWrapperArgs = lib.optionals archiveSupport [ "--prefix" "PATH" ":" "${ lib.makeBinPath [ p7zip ] }" ];
|
||||
|
||||
postFixup = ''
|
||||
postFixup = ''
|
||||
wrapProgram $out/bin/kcc "''${qtWrapperArgs[@]}"
|
||||
'';
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitea
|
||||
, fetchpatch
|
||||
, giflib
|
||||
, imlib2
|
||||
, libXft
|
||||
@ -13,24 +12,16 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "nsxiv";
|
||||
version = "30";
|
||||
version = "31";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "codeberg.org";
|
||||
owner = "nsxiv";
|
||||
repo = "nsxiv";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-swzTdQ6ow1At4bKRORqz6fb0Ej92yU9rlI/OgcinPu4=";
|
||||
hash = "sha256-X1ZMr5OADs9GIe/kp/kEqKMMHZMymd58m9+f0SPzn7s=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Fix build failure when _SC_PHYS_PAGES is not defined
|
||||
(fetchpatch {
|
||||
url = "https://codeberg.org/nsxiv/nsxiv/commit/1a50bff9f300f84e93a6e7035657e6029e7e8183.patch";
|
||||
hash = "sha256-PpUqGVWaJ06EVu3tBKVzOh8HYvT6wAG3bvY6wUD+dTM=";
|
||||
})
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
giflib
|
||||
imlib2
|
||||
@ -71,5 +62,6 @@ stdenv.mkDerivation rec {
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ AndersonTorres sikmir ];
|
||||
platforms = platforms.unix;
|
||||
changelog = "https://codeberg.org/nsxiv/nsxiv/src/tag/${src.rev}/etc/CHANGELOG.md";
|
||||
};
|
||||
}
|
||||
|
@ -1,14 +1,15 @@
|
||||
{ python3Packages
|
||||
, qtbase
|
||||
{ lib
|
||||
, python3Packages
|
||||
, fetchPypi
|
||||
, wrapQtAppsHook
|
||||
, lib
|
||||
, qtbase
|
||||
}:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "veusz";
|
||||
version = "3.6.2";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "whcaxF5LMEJNj8NSYeLpnb5uJboRl+vCQ1WxBrJjldE=";
|
||||
};
|
||||
|
@ -1,6 +1,5 @@
|
||||
{ lib
|
||||
, mkDerivation
|
||||
, cmake
|
||||
, extra-cmake-modules
|
||||
, wrapGAppsHook
|
||||
, gst_all_1
|
||||
@ -11,6 +10,7 @@
|
||||
, mpv
|
||||
, qtmultimedia
|
||||
, qtquickcontrols2
|
||||
, yt-dlp
|
||||
}:
|
||||
|
||||
mkDerivation {
|
||||
@ -36,6 +36,13 @@ mkDerivation {
|
||||
gstreamer
|
||||
]);
|
||||
|
||||
qtWrapperArgs = [
|
||||
"--prefix"
|
||||
"PATH"
|
||||
":"
|
||||
(lib.makeBinPath [ yt-dlp ])
|
||||
];
|
||||
|
||||
preFixup = ''
|
||||
qtWrapperArgs+=("''${gappsWrapperArgs[@]}")
|
||||
'';
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
with python3.pkgs;
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
let
|
||||
@ -31,7 +32,7 @@ python.pkgs.buildPythonApplication rec {
|
||||
pname = "archivebox";
|
||||
version = "0.6.2";
|
||||
|
||||
src = python.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-zHty7lTra6yab9d0q3EqsPG3F+lrnZL6PjQAbL1A2NY=";
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, python3
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
let
|
||||
|
@ -1,6 +1,5 @@
|
||||
{ lib
|
||||
, fetchFromGitHub
|
||||
, fetchpatch
|
||||
, gitUpdater
|
||||
, python3Packages
|
||||
, blueprint-compiler
|
||||
@ -29,23 +28,17 @@
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "bottles-unwrapped";
|
||||
version = "51.5";
|
||||
version = "51.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bottlesdevs";
|
||||
repo = "bottles";
|
||||
rev = version;
|
||||
sha256 = "sha256-8VF/CD0Wu2eV6wOpj/M6peKDthFWlcg+1NzzTSIH4S8=";
|
||||
sha256 = "sha256-9oEC+ksgHz2HP4jVwTbLzjqc8WG1+S8hmVgl2dcuPB0=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
./vulkan_icd.patch
|
||||
|
||||
# Remove next version
|
||||
(fetchpatch {
|
||||
url = "https://github.com/bottlesdevs/Bottles/commit/7cb284f9bac0b71bf632bfc70d94f7a53bc51267.patch";
|
||||
hash = "sha256-mRF+BtQ0qM7Yvx7SONeH2wc04F87fEyNRlBuyQrzN8Y=";
|
||||
})
|
||||
];
|
||||
|
||||
# https://github.com/bottlesdevs/Bottles/wiki/Packaging
|
||||
|
@ -1,5 +1,4 @@
|
||||
{ lib
|
||||
, buildFHSEnv
|
||||
{ buildFHSEnv
|
||||
, symlinkJoin
|
||||
, bottles-unwrapped
|
||||
, gst_all_1
|
||||
|
@ -1,28 +0,0 @@
|
||||
{ lib, python3, fetchFromGitHub }:
|
||||
|
||||
with python3.pkgs; buildPythonApplication rec {
|
||||
pname = "bukut";
|
||||
version = "0.11";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "peterjschroeder";
|
||||
repo = "bukut";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-Hp9/tSdRNAoll/fYNJuhYC7cgy5AK3PUtYUsS6zsz1Y=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
asciimatics
|
||||
beautifulsoup4
|
||||
natsort
|
||||
pyperclip
|
||||
pyxdg
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Text user interface for buku bookmark manager";
|
||||
homepage = "https://github.com/peterjschroeder/bukut";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [ taha ];
|
||||
};
|
||||
}
|
@ -1,11 +1,11 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "chatblade";
|
||||
version = "0.2.3";
|
||||
format = "setuptools";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-YXZeqIX8cxNDvM4Pn0or6Lqj2ffX9aQb3b/xMIeBHRk=";
|
||||
};
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
with python3Packages;
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "dotfiles";
|
||||
version = "0.6.4";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version pname;
|
||||
sha256 = "03qis6m9r2qh00sqbgwsm883s4bj1ibwpgk86yh4l235mdw8jywv";
|
||||
};
|
||||
|
@ -3,6 +3,7 @@
|
||||
, fetchpatch
|
||||
, nixosTests
|
||||
, python3
|
||||
, fetchPypi
|
||||
, radicale3
|
||||
}:
|
||||
|
||||
@ -44,7 +45,7 @@ in python.pkgs.buildPythonApplication rec {
|
||||
pname = "etesync-dav";
|
||||
version = "0.32.1";
|
||||
|
||||
src = python.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-pOLug5MnVdKaw5wedABewomID9LU0hZPCf4kZKKU1yA=";
|
||||
};
|
||||
|
@ -1,8 +1,8 @@
|
||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index a37976e..5669366 100644
|
||||
index b7530e8f..af94a62d 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -59,16 +59,12 @@ if(NOT MINGW AND WIN32)
|
||||
@@ -59,8 +59,7 @@ if(NOT MINGW AND WIN32)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/Debug)
|
||||
endif()
|
||||
|
||||
@ -11,15 +11,4 @@ index a37976e..5669366 100644
|
||||
+include_directories(@libirc_includes@)
|
||||
|
||||
# YAML
|
||||
-option(YAML_CPP_BUILD_TOOLS "Disable tests" OFF)
|
||||
-option(YAML_CPP_BUILD_TESTS "Enable testing" OFF)
|
||||
-option(YAML_CPP_BUILD_TOOLS "Enable parse tools" OFF)
|
||||
-option(BUILD_SHARED_LIBS "Build as shared" ON)
|
||||
-include_directories("3rd/yaml-cpp/include/")
|
||||
-add_subdirectory(3rd/yaml-cpp)
|
||||
+find_package(YAML-CPP 0.6.3 QUIET)
|
||||
+include_directories(YAML_CPP_INCLUDE_DIR)
|
||||
+
|
||||
if (HUGGLE_EXT)
|
||||
if(NOT MINGW AND WIN32)
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_BINARY_DIR}/Release/extensions)
|
||||
find_package(YAML-CPP 0.6.3 QUIET)
|
||||
|
@ -14,13 +14,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "huggle";
|
||||
version = "3.4.10";
|
||||
version = "3.4.12";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "huggle";
|
||||
repo = "huggle3-qt-lx";
|
||||
rev = version;
|
||||
sha256 = "UzoX4kdzYU50W0MUhfpo0HaSfvG3eINNC8u5t/gKuqI=";
|
||||
sha256 = "scNGmMVZ6z9FTQuZCdwRYk0WP5qKfdb/M9Co8TbiMDE=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
|
@ -1,14 +1,12 @@
|
||||
{ lib
|
||||
, fetchpatch
|
||||
, python3Packages
|
||||
, python3
|
||||
, fetchFromGitHub
|
||||
, wrapQtAppsHook
|
||||
, cups
|
||||
}:
|
||||
|
||||
with python3Packages;
|
||||
|
||||
buildPythonApplication rec {
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "inkcut";
|
||||
version = "2.1.5";
|
||||
|
||||
@ -48,7 +46,7 @@ buildPythonApplication rec {
|
||||
|
||||
nativeBuildInputs = [ wrapQtAppsHook ];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
propagatedBuildInputs = with python3.pkgs; [
|
||||
enamlx
|
||||
twisted
|
||||
lxml
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages, python3, xvfb-run }:
|
||||
{ lib, python3Packages, fetchPypi, xvfb-run }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "keepmenu";
|
||||
version = "1.2.2";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "SeVNtONH1bn2hb2pBOVM3Oafrb+jARgfvRe7vUu6Gto=";
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3, khard, testers }:
|
||||
{ lib, python3, fetchPypi, khard, testers }:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
version = "0.18.0";
|
||||
pname = "khard";
|
||||
|
||||
src = python3.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "05860fdayqap128l7i6bcmi9kdyi2gx02g2pmh88d56xgysd927y";
|
||||
};
|
||||
|
3574
pkgs/applications/misc/kord/Cargo.lock
generated
Normal file
3574
pkgs/applications/misc/kord/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -7,7 +7,7 @@
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "kord";
|
||||
version = "0.4.2";
|
||||
version = "0.5.16";
|
||||
|
||||
# kord depends on nightly features
|
||||
RUSTC_BOOTSTRAP = 1;
|
||||
@ -16,10 +16,15 @@ rustPlatform.buildRustPackage rec {
|
||||
owner = "twitchax";
|
||||
repo = "kord";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-B/UwnbzXI3ER8IMOVtn0ErVqFrkZXKoL+l7ll1AlzDg=";
|
||||
sha256 = "sha256-gI88fweOT2t+4cj58/mLygtTnue2Ai1QSC5oZf7Xv/g=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-xhWSycTe72HW3E9meTo4wjOCHDcNq6fUPT6nqHoW9vE=";
|
||||
cargoLock = {
|
||||
lockFile = ./Cargo.lock;
|
||||
outputHashes = {
|
||||
"bincode-2.0.0-rc.2" = "sha256-0BfKKGOi5EVIoF0HvIk0QS2fHUMG3tpsMLe2SkXeZlo=";
|
||||
};
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ alsa-lib ];
|
||||
|
@ -1,16 +1,17 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (python3.pkgs) buildPythonPackage fetchPypi;
|
||||
inherit (python3.pkgs) buildPythonPackage;
|
||||
in
|
||||
buildPythonPackage rec {
|
||||
pname = "meerk40t-camera";
|
||||
version = "0.1.9";
|
||||
format = "setuptools";
|
||||
|
||||
src = python3.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
hash = "sha256-uGCBHdgWoorVX2XqMCg0YBweb00sQ9ZSbJe8rlGeovs=";
|
||||
};
|
||||
|
@ -6,10 +6,7 @@
|
||||
, wrapGAppsHook
|
||||
}:
|
||||
|
||||
let
|
||||
inherit (python3.pkgs) buildPythonApplication buildPythonPackage fetchPypi;
|
||||
in
|
||||
buildPythonApplication rec {
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "MeerK40t";
|
||||
version = "0.8.1000";
|
||||
format = "setuptools";
|
||||
|
@ -1,9 +1,9 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "nhentai";
|
||||
version = "0.4.16";
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-2lzrQqUx3lPM+OAUO/SwT+fAuG7kWmUnTACNUiP7d1M=";
|
||||
};
|
||||
|
@ -12,7 +12,7 @@
|
||||
let
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
pname = "obsidian";
|
||||
version = "1.2.8";
|
||||
version = "1.3.4";
|
||||
appname = "Obsidian";
|
||||
meta = with lib; {
|
||||
description = "A powerful knowledge base that works on top of a local folder of plain text Markdown files";
|
||||
@ -25,7 +25,7 @@ let
|
||||
filename = if stdenv.isDarwin then "Obsidian-${version}-universal.dmg" else "obsidian-${version}.tar.gz";
|
||||
src = fetchurl {
|
||||
url = "https://github.com/obsidianmd/obsidian-releases/releases/download/v${version}/${filename}";
|
||||
sha256 = if stdenv.isDarwin then "sha256-c01Oc20henVRTNFAuiRH5xkxFH8k0Cfd4Z+0t8iUPEg=" else "sha256-KG73QaDY5njFzGhjWtjFNucZRcLtRGTrIPgG0sdonQw=";
|
||||
sha256 = if stdenv.isDarwin then "sha256-LP13smLy/cr0hiLl5cdRxTbDfRFojb+HJBx/MFeJ13Y=" else "sha256-8M9HU20IxTvPaa6x1X41Ldq2usK2TPU71VvprerivZg=";
|
||||
};
|
||||
|
||||
icon = fetchurl {
|
||||
|
@ -4,6 +4,7 @@
|
||||
, lib
|
||||
, fetchFromGitHub
|
||||
, python3
|
||||
, fetchPypi
|
||||
, substituteAll
|
||||
, nix-update-script
|
||||
, nixosTests
|
||||
@ -31,7 +32,7 @@ let
|
||||
});
|
||||
flask-babel = super.flask-babel.overridePythonAttrs (oldAttrs: rec {
|
||||
version = "2.0.0";
|
||||
src = super.fetchPypi {
|
||||
src = fetchPypi {
|
||||
pname = "Flask-Babel";
|
||||
inherit version;
|
||||
sha256 = "sha256-+fr0XNsuGjLqLsFEA1h9QpUQjzUBenghorGsuM/ZJX0=";
|
||||
@ -44,7 +45,7 @@ let
|
||||
# downgrade needed for flask-babel 2.0.0
|
||||
babel = super.babel.overridePythonAttrs (oldAttrs: rec {
|
||||
version = "2.11.0";
|
||||
src = super.fetchPypi {
|
||||
src = fetchPypi {
|
||||
pname = "Babel";
|
||||
inherit version;
|
||||
hash = "sha256-XvSzImsBgN7d7UIpZRyLDho6aig31FoHMnLzE+TPl/Y=";
|
||||
|
@ -34,13 +34,13 @@
|
||||
|
||||
buildPythonApplication rec {
|
||||
pname = "orca";
|
||||
version = "44.0";
|
||||
version = "44.1";
|
||||
|
||||
format = "other";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
|
||||
sha256 = "e8WX7AvBtnQgC2L995XUuulkemNxfXVN9hWHzCUFAs4=";
|
||||
sha256 = "9e1lUdcviXshJI1DMIWnuBesy7ApaoTD6FHZH7Lu5N4=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
@ -1,5 +1,5 @@
|
||||
{ lib, fetchFromGitHub, cacert, openssl, nixosTests
|
||||
, python310, fetchpatch
|
||||
, python310, fetchPypi, fetchpatch
|
||||
}:
|
||||
|
||||
let
|
||||
@ -11,7 +11,7 @@ let
|
||||
packageOverrides = self: super: {
|
||||
sqlalchemy = super.sqlalchemy.overridePythonAttrs (oldAttrs: rec {
|
||||
version = "1.3.24";
|
||||
src = super.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit (oldAttrs) pname;
|
||||
inherit version;
|
||||
hash = "sha256-67t3fL+TEjWbiXv4G6ANrg9ctp+6KhgmXcwYpvXvdRk=";
|
||||
@ -24,7 +24,7 @@ let
|
||||
});
|
||||
flask_migrate = super.flask_migrate.overridePythonAttrs (oldAttrs: rec {
|
||||
version = "2.7.0";
|
||||
src = self.fetchPypi {
|
||||
src = fetchPypi {
|
||||
pname = "Flask-Migrate";
|
||||
inherit version;
|
||||
hash = "sha256-ri8FZxWIdi3YOiHYsYxR/jVehng+JFlJlf+Nc4Df/jg=";
|
||||
@ -33,7 +33,7 @@ let
|
||||
flask-sqlalchemy = super.flask-sqlalchemy.overridePythonAttrs (old: rec {
|
||||
version = "2.5.1";
|
||||
format = "setuptools";
|
||||
src = self.fetchPypi {
|
||||
src = fetchPypi {
|
||||
pname = "Flask-SQLAlchemy";
|
||||
inherit version;
|
||||
hash = "sha256:2bda44b43e7cacb15d4e05ff3cc1f8bc97936cc464623424102bfc2c35e95912";
|
||||
@ -123,7 +123,7 @@ let
|
||||
pname = "Flask-Babel";
|
||||
version = "2.0.0";
|
||||
format = "setuptools";
|
||||
src = self.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname;
|
||||
inherit version;
|
||||
hash = "sha256:f9faf45cdb2e1a32ea2ec14403587d4295108f35017a7821a2b1acb8cfd9257d";
|
||||
@ -155,7 +155,7 @@ let
|
||||
sphinx-rtd-theme = null;
|
||||
}).overridePythonAttrs (old: rec {
|
||||
version = "5.1.0";
|
||||
src = self.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit (old) pname;
|
||||
inherit version;
|
||||
hash = "sha256-GysFCsG64EnNB/WSCxT6u+UmOPSF2a2h6xFanuv/aDU=";
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
python3Packages.buildPythonPackage rec {
|
||||
pname = "pydf";
|
||||
version = "12";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "7f47a7c3abfceb1ac04fc009ded538df1ae449c31203962a1471a4eb3bf21439";
|
||||
};
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, pythonPackages }:
|
||||
{ lib, pythonPackages, fetchPypi }:
|
||||
|
||||
with pythonPackages;
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python310
|
||||
, fetchPypi
|
||||
, fetchFromGitHub
|
||||
, gdk-pixbuf
|
||||
, gnome
|
||||
@ -24,7 +25,7 @@ let
|
||||
};
|
||||
sqlalchemy = super.sqlalchemy.overridePythonAttrs (old: rec {
|
||||
version = "1.4.46";
|
||||
src = self.fetchPypi {
|
||||
src = fetchPypi {
|
||||
pname = "SQLAlchemy";
|
||||
inherit version;
|
||||
hash = "sha256-aRO4JH2KKS74MVFipRkx4rQM6RaB8bbxj2lwRSAMSjA=";
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "raiseorlaunch";
|
||||
version = "2.3.3";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "3d694015d020a888b42564d56559213b94981ca2b32b952a49b2de4d029d2e59";
|
||||
};
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
, alsa-utils
|
||||
, gobject-introspection
|
||||
, libappindicator-gtk3
|
||||
|
@ -1,11 +1,11 @@
|
||||
{ lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "seashells";
|
||||
version = "0.1.2";
|
||||
format = "setuptools";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-RBs28FC7f82DrxRcmvTP9nljVpm7tjrGuvr05l32hDM=";
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchFromGitHub
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
with python3.pkgs;
|
||||
|
@ -1,6 +1,7 @@
|
||||
{ stdenv
|
||||
, lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
, ffmpeg
|
||||
}:
|
||||
|
||||
@ -9,7 +10,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
version = "2.3";
|
||||
format = "setuptools";
|
||||
|
||||
src = python3.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit version pname;
|
||||
hash = "sha256-4Zsb/OBtU/jV0gThEYe8bcrb+6hW+hnzQS19q1H409Q=";
|
||||
};
|
||||
|
@ -1,7 +1,7 @@
|
||||
{ lib, python3 }:
|
||||
{ lib, python3, fetchPypi }:
|
||||
|
||||
let
|
||||
inherit (python3.pkgs) buildPythonApplication fetchPypi requests;
|
||||
inherit (python3.pkgs) buildPythonApplication requests;
|
||||
in
|
||||
buildPythonApplication rec {
|
||||
pname = "tzupdate";
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3Packages
|
||||
, fetchPypi
|
||||
, taskwarrior
|
||||
, glibcLocales
|
||||
}:
|
||||
|
@ -90,11 +90,11 @@ in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "brave";
|
||||
version = "1.51.114";
|
||||
version = "1.51.118";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/brave/brave-browser/releases/download/v${version}/brave-browser_${version}_amd64.deb";
|
||||
sha256 = "sha256-lykwmfGqH5VuWazEQuvTpD4ett4m+LCFmmxzjkULfmk=";
|
||||
sha256 = "sha256-/OrnB4M6oefZ2aG2rQst8H4UZ/7vAFzyqWsn9kerb9c=";
|
||||
};
|
||||
|
||||
dontConfigure = true;
|
||||
|
@ -92,14 +92,13 @@ in
|
||||
pname = "hadoop";
|
||||
platformAttrs = rec {
|
||||
x86_64-linux = {
|
||||
version = "3.3.4";
|
||||
hash = "sha256-akg9GgsSNJDr2N8/cbZOs58zP3i5XwkK61jkM8vCQW0=";
|
||||
version = "3.3.5";
|
||||
hash = "sha256-RG4FypL6I6YGF6ixeUbe3kcoGvFQQEFhfLfV9i50JSo=";
|
||||
};
|
||||
x86_64-darwin = x86_64-linux;
|
||||
aarch64-linux = {
|
||||
version = "3.3.1";
|
||||
hash = "sha256-v1Om2pk0wsgKBghRD2wgTSHJoKd3jkm1wPKAeDcKlgI=";
|
||||
meta.knownVulnerabilities = [ "CVE-2021-37404" "CVE-2021-33036" ];
|
||||
version = "3.3.5";
|
||||
hash = "sha256-qcKjbE881isauWBxIv+NY0UFbYit704/Re8Kdl6x1LA=";
|
||||
};
|
||||
aarch64-darwin = aarch64-linux;
|
||||
};
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ lib, python3 }:
|
||||
{ lib, python3, fetchPypi }:
|
||||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "luigi";
|
||||
version = "3.0.2";
|
||||
|
||||
src = python3.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "b4b1ccf086586d041d7e91e68515d495c550f30e4d179d63863fea9ccdbb78eb";
|
||||
};
|
||||
@ -15,7 +15,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
doCheck = false;
|
||||
|
||||
# This enables accessing modules stored in cwd
|
||||
makeWrapperArgs = ["--prefix PYTHONPATH . :"];
|
||||
makeWrapperArgs = [ "--prefix PYTHONPATH . :" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Python package that helps you build complex pipelines of batch jobs";
|
||||
@ -25,7 +25,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
'';
|
||||
homepage = "https://github.com/spotify/luigi";
|
||||
changelog = "https://github.com/spotify/luigi/releases/tag/${version}";
|
||||
license = [ licenses.asl20 ];
|
||||
license = [ licenses.asl20 ];
|
||||
maintainers = [ maintainers.bhipple ];
|
||||
};
|
||||
}
|
||||
|
@ -428,11 +428,11 @@
|
||||
"vendorHash": null
|
||||
},
|
||||
"gitlab": {
|
||||
"hash": "sha256-QH47lBtwlpW9Trb7EAmE9eNEme6PDyKUJ50QevD5GBs=",
|
||||
"hash": "sha256-zNwjTIt7ngDkHd3VpHkA4xKDjsxQ7vJaWtLH4pMl3S0=",
|
||||
"homepage": "https://registry.terraform.io/providers/gitlabhq/gitlab",
|
||||
"owner": "gitlabhq",
|
||||
"repo": "terraform-provider-gitlab",
|
||||
"rev": "v16.0.2",
|
||||
"rev": "v16.0.3",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": "sha256-KD9X7EOH1btgLtssuz1FFOGtmfNao8HBcKJDty1wtpY="
|
||||
},
|
||||
@ -810,11 +810,11 @@
|
||||
"vendorHash": "sha256-LRIfxQGwG988HE5fftGl6JmBG7tTknvmgpm4Fu1NbWI="
|
||||
},
|
||||
"oci": {
|
||||
"hash": "sha256-TnCRDWmlyBYOY1lpYP0evguM6wFszZdOdmFsztdbRrc=",
|
||||
"hash": "sha256-RMWKzIsZg9h5COgt1IlpmQQGDpFHwH4ugPZmMULcxgg=",
|
||||
"homepage": "https://registry.terraform.io/providers/oracle/oci",
|
||||
"owner": "oracle",
|
||||
"repo": "terraform-provider-oci",
|
||||
"rev": "v4.121.0",
|
||||
"rev": "v4.122.0",
|
||||
"spdx": "MPL-2.0",
|
||||
"vendorHash": null
|
||||
},
|
||||
|
@ -5,13 +5,13 @@ buildGoModule rec {
|
||||
/* Do not use "dev" as a version. If you do, Tilt will consider itself
|
||||
running in development environment and try to serve assets from the
|
||||
source tree, which is not there once build completes. */
|
||||
version = "0.32.3";
|
||||
version = "0.32.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tilt-dev";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-5QTZUapHhSSI+UZu77IUZdflCIm+oCu4kPQVhLHCsUQ=";
|
||||
sha256 = "sha256-GZ9FgseJmaWiMSscLSqMutv5yQ/e8qCjoJEPPTH2Ix0=";
|
||||
};
|
||||
vendorHash = null;
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
{ stdenv, lib, python3Packages }:
|
||||
{ lib, python3Packages, fetchPypi, stdenv }:
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "dyndnsc";
|
||||
version = "0.6.1";
|
||||
|
||||
src = python3Packages.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "13078d29eea2f9a4ca01f05676c3309ead5e341dab047e0d51c46f23d4b7fbb4";
|
||||
};
|
||||
|
@ -1,11 +1,13 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
}:
|
||||
|
||||
python3.pkgs.buildPythonPackage rec {
|
||||
pname = "listparser";
|
||||
version = "0.18";
|
||||
|
||||
src = python3.pkgs.fetchPypi {
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "0hdqs1mmayw1r8yla43hgb4d9y3zqs5483vgf8j9ygczkd2wrq2b";
|
||||
};
|
||||
|
@ -1,5 +1,6 @@
|
||||
{ lib
|
||||
, python3
|
||||
, fetchPypi
|
||||
, fetchFromGitHub
|
||||
}:
|
||||
|
||||
@ -8,7 +9,7 @@ let
|
||||
packageOverrides = self: super: {
|
||||
sqlalchemy = super.sqlalchemy.overridePythonAttrs (old: rec {
|
||||
version = "1.4.48";
|
||||
src = self.fetchPypi {
|
||||
src = fetchPypi {
|
||||
pname = "SQLAlchemy";
|
||||
inherit version;
|
||||
hash = "sha256-tHvChwltmJoIOM6W99jpZpFKJNqHftQadTHUS1XNuN8=";
|
||||
|
@ -33,7 +33,7 @@
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "linphone-desktop";
|
||||
version = "5.0.15";
|
||||
version = "5.0.16";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.linphone.org";
|
||||
@ -41,7 +41,7 @@ mkDerivation rec {
|
||||
group = "BC";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
hash = "sha256-tCtOFHspT0CmBCGvs5b/tNH+W1tuHuje6Zt0UwagOB4=";
|
||||
hash = "sha256-zS0JyK+HGiHY7tPdl3RK6fJJOUS+fKM1u3npNxDAAYE=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user