Merge master into haskell-updates

This commit is contained in:
github-actions[bot]
2023-12-03 00:13:52 +00:00
committed by GitHub
205 changed files with 8031 additions and 1735 deletions
+3
View File
@@ -90,6 +90,9 @@ insert_final_newline = unset
indent_style = unset
trim_trailing_whitespace = unset
[pkgs/misc/documentation-highlighter/**]
insert_final_newline = unset
[pkgs/servers/dict/wordnet_structures.py]
trim_trailing_whitespace = unset
+1
View File
@@ -13,6 +13,7 @@ on:
# * is a special character in YAML so you have to quote this string
# Merge every 24 hours
- cron: '0 0 * * *'
workflow_dispatch:
permissions:
contents: read
+1
View File
@@ -13,6 +13,7 @@ on:
# * is a special character in YAML so you have to quote this string
# Merge every 6 hours
- cron: '0 */6 * * *'
workflow_dispatch:
permissions:
contents: read
+3 -2
View File
@@ -4,11 +4,12 @@ let
inherit (builtins)
intersectAttrs;
inherit (lib)
functionArgs isFunction mirrorFunctionArgs isAttrs setFunctionArgs levenshteinAtMost
functionArgs isFunction mirrorFunctionArgs isAttrs setFunctionArgs
optionalAttrs attrNames levenshtein filter elemAt concatStringsSep sort take length
filterAttrs optionalString flip pathIsDirectory head pipe isDerivation listToAttrs
mapAttrs seq flatten deepSeq warnIf isInOldestRelease extends
;
inherit (lib.strings) levenshteinAtMost;
in
rec {
@@ -198,7 +199,7 @@ rec {
+ "${loc'}${prettySuggestions (getSuggestions arg)}";
# Only show the error for the first missing argument
error = errorForArg missingArgs.${head (attrNames missingArgs)};
error = errorForArg (head (attrNames missingArgs));
in if missingArgs == {}
then makeOverridable f allArgs
+6
View File
@@ -1068,6 +1068,12 @@ in mkLicense lset) ({
url = "https://github.com/thestk/stk/blob/master/LICENSE";
};
sudo = {
shortName = "sudo";
fullName = "Sudo License (ISC-style)";
url = "https://www.sudo.ws/about/license/";
};
sustainableUse = {
shortName = "sustainable";
fullName = "Sustainable Use License";
+27
View File
@@ -787,6 +787,12 @@
githubId = 2335822;
name = "Alexandre Esteves";
};
alex-fu27 = {
email = "alex.fu27@gmail.com";
github = "alex-fu27";
githubId = 49982580;
name = "Alexander Fuchs";
};
alexnortung = {
name = "alexnortung";
email = "alex_nortung@live.dk";
@@ -6555,6 +6561,12 @@
githubId = 67984144;
name = "Gerhard Schwanzer";
};
gernotfeichter = {
email = "gernotfeichter@gmail.com";
github = "gernotfeichter";
githubId = 23199375;
name = "Gernot Feichter";
};
gerschtli = {
email = "tobias.happ@gmx.de";
github = "Gerschtli";
@@ -15230,6 +15242,12 @@
githubId = 816465;
name = "Redvers Davies";
};
redxtech = {
email = "gabe@gabedunn.dev";
github = "redxtech";
githubId = 18155001;
name = "Gabe Dunn";
};
reedrw = {
email = "reedrw5601@gmail.com";
github = "reedrw";
@@ -15329,6 +15347,15 @@
githubId = 44014925;
name = "Rexx Larsson";
};
RGBCube = {
name = "RGBCube";
email = "rgbsphere+nixpkgs@gmail.com";
github = "RGBCube";
githubId = 78925721;
keys = [{
fingerprint = "jPaU3Vpm/GN0tUuDg72n2+bd9dDMWe4bnKM325eP7eI";
}];
};
rgnns = {
email = "jglievano@gmail.com";
github = "rgnns";
@@ -73,6 +73,7 @@ luaposix,,,,34.1.1-1,,vyp lblasc
luarepl,,,,,,
luarocks-build-rust-mlua,,,,,,mrcjkb
luasec,,,,,,flosse
luasnip,,,,,,
luasocket,,,,,,
luasql-sqlite3,,,,,,vyp
luassert,,,,,,
1 name src ref server version luaversion maintainers
73 luarepl
74 luarocks-build-rust-mlua mrcjkb
75 luasec flosse
76 luasnip
77 luasocket
78 luasql-sqlite3 vyp
79 luassert
@@ -8,7 +8,7 @@ In addition to numerous new and upgraded packages, this release has the followin
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
- Create the first release note entry in this section!
- `screen`'s module has been cleaned, and will now require you to set `programs.screen.enable` in order to populate `screenrc` and add the program to the environment.
## New Services {#sec-release-24.05-new-services}
@@ -18,6 +18,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [Anki Sync Server](https://docs.ankiweb.net/sync-server.html), the official sync server built into recent versions of Anki. Available as [services.anki-sync-server](#opt-services.anki-sync-server.enable).
- [Clevis](https://github.com/latchset/clevis), a pluggable framework for automated decryption, used to unlock encrypted devices in initrd. Available as [boot.initrd.clevis.enable](#opt-boot.initrd.clevis.enable).
## Backward Incompatibilities {#sec-release-24.05-incompatibilities}
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
@@ -38,4 +40,8 @@ In addition to numerous new and upgraded packages, this release has the followin
existing process, but will need to start that process from gdb (so it is a
child). Or you can set `boot.kernel.sysctl."kernel.yama.ptrace_scope"` to 0.
- Gitea 1.21 upgrade has several breaking changes, including:
- Custom themes and other assets that were previously stored in `custom/public/*` now belong in `custom/public/assets/*`
- New instances of Gitea using MySQL now ignore the `[database].CHARSET` config option and always use the `utf8mb4` charset, existing instances should migrate via the `gitea doctor convert` CLI command.
- The `hardware.pulseaudio` module now sets permission of pulse user home directory to 755 when running in "systemWide" mode. It fixes [issue 114399](https://github.com/NixOS/nixpkgs/issues/114399).
+35 -22
View File
@@ -6,6 +6,8 @@ let
cfg = config.users.mysql;
in
{
meta.maintainers = [ maintainers.netali ];
options = {
users.mysql = {
enable = mkEnableOption (lib.mdDoc "Authentication against a MySQL/MariaDB database");
@@ -358,7 +360,7 @@ in
user = "root";
group = "root";
mode = "0600";
# password will be added from password file in activation script
# password will be added from password file in systemd oneshot
text = ''
users.host=${cfg.host}
users.db_user=${cfg.user}
@@ -423,34 +425,45 @@ in
mode = "0600";
user = config.services.nscd.user;
group = config.services.nscd.group;
# password will be added from password file in activation script
# password will be added from password file in systemd oneshot
text = ''
username ${cfg.user}
'';
};
# preStart script to append the password from the password file
# to the configuration files. It also fixes the owner of the
# libnss-mysql-root.cfg because it is changed to root after the
# password is appended.
systemd.services.mysql.preStart = ''
if [[ -r ${cfg.passwordFile} ]]; then
org_umask=$(umask)
umask 0077
systemd.services.mysql-auth-pw-init = {
description = "Adds the mysql password to the mysql auth config files";
conf_nss="$(mktemp)"
cp /etc/libnss-mysql-root.cfg $conf_nss
printf 'password %s\n' "$(cat ${cfg.passwordFile})" >> $conf_nss
mv -fT "$conf_nss" /etc/libnss-mysql-root.cfg
chown ${config.services.nscd.user}:${config.services.nscd.group} /etc/libnss-mysql-root.cfg
before = [ "nscd.service" ];
wantedBy = [ "multi-user.target" ];
conf_pam="$(mktemp)"
cp /etc/security/pam_mysql.conf $conf_pam
printf 'users.db_passwd=%s\n' "$(cat ${cfg.passwordFile})" >> $conf_pam
mv -fT "$conf_pam" /etc/security/pam_mysql.conf
serviceConfig = {
Type = "oneshot";
User = "root";
Group = "root";
};
umask $org_umask
fi
'';
restartTriggers = [
config.environment.etc."security/pam_mysql.conf".source
config.environment.etc."libnss-mysql.cfg".source
config.environment.etc."libnss-mysql-root.cfg".source
];
script = ''
if [[ -r ${cfg.passwordFile} ]]; then
umask 0077
conf_nss="$(mktemp)"
cp /etc/libnss-mysql-root.cfg $conf_nss
printf 'password %s\n' "$(cat ${cfg.passwordFile})" >> $conf_nss
mv -fT "$conf_nss" /etc/libnss-mysql-root.cfg
chown ${config.services.nscd.user}:${config.services.nscd.group} /etc/libnss-mysql-root.cfg
conf_pam="$(mktemp)"
cp /etc/security/pam_mysql.conf $conf_pam
printf 'users.db_passwd=%s\n' "$(cat ${cfg.passwordFile})" >> $conf_pam
mv -fT "$conf_pam" /etc/security/pam_mysql.conf
fi
'';
};
};
}
+2
View File
@@ -442,6 +442,7 @@
./services/databases/surrealdb.nix
./services/databases/victoriametrics.nix
./services/desktops/accountsservice.nix
./services/desktops/ayatana-indicators.nix
./services/desktops/bamf.nix
./services/desktops/blueman.nix
./services/desktops/cpupower-gui.nix
@@ -1423,6 +1424,7 @@
./system/activation/bootspec.nix
./system/activation/top-level.nix
./system/boot/binfmt.nix
./system/boot/clevis.nix
./system/boot/emergency-mode.nix
./system/boot/grow-partition.nix
./system/boot/initrd-network.nix
+23 -15
View File
@@ -1,33 +1,41 @@
{ config, lib, pkgs, ... }:
let
inherit (lib) mkOption mkIf types;
cfg = config.programs.screen;
in
{
###### interface
options = {
programs.screen = {
enable = lib.mkEnableOption (lib.mdDoc "screen, a basic terminal multiplexer");
screenrc = mkOption {
default = "";
description = lib.mdDoc ''
The contents of /etc/screenrc file.
package = lib.mkPackageOptionMD pkgs "screen" { };
screenrc = lib.mkOption {
type = with lib.types; nullOr lines;
example = ''
defscrollback 10000
startup_message off
'';
type = types.lines;
description = lib.mdDoc "The contents of {file}`/etc/screenrc` file";
};
};
};
###### implementation
config = mkIf (cfg.screenrc != "") {
environment.etc.screenrc.text = cfg.screenrc;
environment.systemPackages = [ pkgs.screen ];
config = {
# TODO: Added in 24.05, remove before 24.11
assertions = [
{
assertion = cfg.screenrc != null -> cfg.enable;
message = "`programs.screen.screenrc` has been configured, but `programs.screen.enable` is not true";
}
];
} // lib.mkIf cfg.enable {
environment.etc.screenrc = {
enable = cfg.screenrc != null;
text = cfg.screenrc;
};
environment.systemPackages = [ cfg.package ];
security.pam.services.screen = {};
};
}
@@ -0,0 +1,58 @@
{ config
, pkgs
, lib
, ...
}:
let
cfg = config.services.ayatana-indicators;
in
{
options.services.ayatana-indicators = {
enable = lib.mkEnableOption (lib.mdDoc ''
Ayatana Indicators, a continuation of Canonical's Application Indicators
'');
packages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [ ];
example = lib.literalExpression "with pkgs; [ ayatana-indicator-messages ]";
description = lib.mdDoc ''
List of packages containing Ayatana Indicator services
that should be brought up by the SystemD "ayatana-indicators" user target.
Packages specified here must have passthru.ayatana-indicators set correctly.
If, how, and where these indicators are displayed will depend on your DE.
'';
};
};
config = lib.mkIf cfg.enable {
environment = {
systemPackages = cfg.packages;
pathsToLink = [
"/share/ayatana"
];
};
# libayatana-common's ayatana-indicators.target with explicit Wants & Before to bring up requested indicator services
systemd.user.targets."ayatana-indicators" =
let
indicatorServices = lib.lists.flatten
(map
(pkg:
(map (ind: "${ind}.service") pkg.passthru.ayatana-indicators))
cfg.packages);
in
{
description = "Target representing the lifecycle of the Ayatana Indicators. Each indicator should be bound to it in its individual service file";
partOf = [ "graphical-session.target" ];
wants = indicatorServices;
before = indicatorServices;
};
};
meta.maintainers = with lib.maintainers; [ OPNA2608 ];
}
@@ -455,10 +455,10 @@ in {
ln -s /etc/home-assistant/configuration.yaml "${cfg.configDir}/configuration.yaml"
'';
copyLovelaceConfig = if cfg.lovelaceConfigWritable then ''
rm -f "${cfg.configDir}/ui-lovelace.yaml"
cp --no-preserve=mode ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml"
'' else ''
rm -f "${cfg.configDir}/ui-lovelace.yaml"
ln -s /etc/home-assistant/ui-lovelace.yaml "${cfg.configDir}/ui-lovelace.yaml"
ln -fs /etc/home-assistant/ui-lovelace.yaml "${cfg.configDir}/ui-lovelace.yaml"
'';
copyCustomLovelaceModules = if cfg.customLovelaceModules != [] then ''
mkdir -p "${cfg.configDir}/www"
@@ -214,7 +214,7 @@ in {
RestrictRealtime = true;
PrivateMounts = true;
SystemCallFilter = [
"@system-service @pkey"
"@system-service @pkey @chown"
"~@privileged @resources"
];
SystemCallArchitectures = "native";
+1 -1
View File
@@ -19,7 +19,7 @@ in {
serviceConfig = {
EnvironmentFile = "${cfg.package}/etc/conf.d/preload";
ExecStart = "${getExe cfg.package} --foreground $PRELOAD_OPTS";
ExecStart = "${getExe cfg.package} -l '' --foreground $PRELOAD_OPTS";
Type = "simple";
# Only preload data during CPU idle time
IOSchedulingClass = 3;
+1 -1
View File
@@ -317,7 +317,7 @@ in {
serviceConfig = defaultServiceConfig // {
ExecStart = ''
${pkgs.python3Packages.gunicorn}/bin/gunicorn netbox.wsgi \
${pkg.gunicorn}/bin/gunicorn netbox.wsgi \
--bind ${cfg.listenAddress}:${toString cfg.port} \
--pythonpath ${pkg}/opt/netbox/netbox
'';
+51
View File
@@ -0,0 +1,51 @@
# Clevis {#module-boot-clevis}
[Clevis](https://github.com/latchset/clevis)
is a framework for automated decryption of resources.
Clevis allows for secure unattended disk decryption during boot, using decryption policies that must be satisfied for the data to decrypt.
## Create a JWE file containing your secret {#module-boot-clevis-create-secret}
The first step is to embed your secret in a [JWE](https://en.wikipedia.org/wiki/JSON_Web_Encryption) file.
JWE files have to be created through the clevis command line. 3 types of policies are supported:
1) TPM policies
Secrets are pinned against the presence of a TPM2 device, for example:
```
echo hi | clevis encrypt tpm2 '{}' > hi.jwe
```
2) Tang policies
Secrets are pinned against the presence of a Tang server, for example:
```
echo hi | clevis encrypt tang '{"url": "http://tang.local"}' > hi.jwe
```
3) Shamir Secret Sharing
Using Shamir's Secret Sharing ([sss](https://en.wikipedia.org/wiki/Shamir%27s_secret_sharing)), secrets are pinned using a combination of the two preceding policies. For example:
```
echo hi | clevis encrypt sss \
'{"t": 2, "pins": {"tpm2": {"pcr_ids": "0"}, "tang": {"url": "http://tang.local"}}}' \
> hi.jwe
```
For more complete documentation on how to generate a secret with clevis, see the [clevis documentation](https://github.com/latchset/clevis).
## Activate unattended decryption of a resource at boot {#module-boot-clevis-activate}
In order to activate unattended decryption of a resource at boot, enable the `clevis` module:
```
boot.initrd.clevis.enable = true;
```
Then, specify the device you want to decrypt using a given clevis secret. Clevis will automatically try to decrypt the device at boot and will fallback to interactive unlocking if the decryption policy is not fulfilled.
```
boot.initrd.clevis.devices."/dev/nvme0n1p1".secretFile = ./nvme0n1p1.jwe;
```
Only `bcachefs`, `zfs` and `luks` encrypted devices are supported at this time.
+107
View File
@@ -0,0 +1,107 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.boot.initrd.clevis;
systemd = config.boot.initrd.systemd;
supportedFs = [ "zfs" "bcachefs" ];
in
{
meta.maintainers = with maintainers; [ julienmalka camillemndn ];
meta.doc = ./clevis.md;
options = {
boot.initrd.clevis.enable = mkEnableOption (lib.mdDoc "Clevis in initrd");
boot.initrd.clevis.package = mkOption {
type = types.package;
default = pkgs.clevis;
defaultText = "pkgs.clevis";
description = lib.mdDoc "Clevis package";
};
boot.initrd.clevis.devices = mkOption {
description = "Encrypted devices that need to be unlocked at boot using Clevis";
default = { };
type = types.attrsOf (types.submodule ({
options.secretFile = mkOption {
description = lib.mdDoc "Clevis JWE file used to decrypt the device at boot, in concert with the chosen pin (one of TPM2, Tang server, or SSS).";
type = types.path;
};
}));
};
boot.initrd.clevis.useTang = mkOption {
description = "Whether the Clevis JWE file used to decrypt the devices uses a Tang server as a pin.";
default = false;
type = types.bool;
};
};
config = mkIf cfg.enable {
# Implementation of clevis unlocking for the supported filesystems are located directly in the respective modules.
assertions = (attrValues (mapAttrs
(device: _: {
assertion = (any (fs: fs.device == device && (elem fs.fsType supportedFs)) config.system.build.fileSystems) || (hasAttr device config.boot.initrd.luks.devices);
message = ''
No filesystem or LUKS device with the name ${device} is declared in your configuration.'';
})
cfg.devices));
warnings =
if cfg.useTang && !config.boot.initrd.network.enable && !config.boot.initrd.systemd.network.enable
then [ "In order to use a Tang pinned secret you must configure networking in initrd" ]
else [ ];
boot.initrd = {
extraUtilsCommands = mkIf (!systemd.enable) ''
copy_bin_and_libs ${pkgs.jose}/bin/jose
copy_bin_and_libs ${pkgs.curl}/bin/curl
copy_bin_and_libs ${pkgs.bash}/bin/bash
copy_bin_and_libs ${pkgs.tpm2-tools}/bin/.tpm2-wrapped
mv $out/bin/{.tpm2-wrapped,tpm2}
cp {${pkgs.tpm2-tss},$out}/lib/libtss2-tcti-device.so.0
copy_bin_and_libs ${cfg.package}/bin/.clevis-wrapped
mv $out/bin/{.clevis-wrapped,clevis}
for BIN in ${cfg.package}/bin/clevis-decrypt*; do
copy_bin_and_libs $BIN
done
for BIN in $out/bin/clevis{,-decrypt{,-null,-tang,-tpm2}}; do
sed -i $BIN -e 's,${pkgs.bash},,' -e 's,${pkgs.coreutils},,'
done
sed -i $out/bin/clevis-decrypt-tpm2 -e 's,tpm2_,tpm2 ,'
'';
secrets = lib.mapAttrs' (name: value: nameValuePair "/etc/clevis/${name}.jwe" value.secretFile) cfg.devices;
systemd = {
extraBin = mkIf systemd.enable {
clevis = "${cfg.package}/bin/clevis";
curl = "${pkgs.curl}/bin/curl";
};
storePaths = mkIf systemd.enable [
cfg.package
"${pkgs.jose}/bin/jose"
"${pkgs.curl}/bin/curl"
"${pkgs.tpm2-tools}/bin/tpm2_createprimary"
"${pkgs.tpm2-tools}/bin/tpm2_flushcontext"
"${pkgs.tpm2-tools}/bin/tpm2_load"
"${pkgs.tpm2-tools}/bin/tpm2_unseal"
];
};
};
};
}
+46 -2
View File
@@ -1,9 +1,11 @@
{ config, options, lib, pkgs, ... }:
{ config, options, lib, utils, pkgs, ... }:
with lib;
let
luks = config.boot.initrd.luks;
clevis = config.boot.initrd.clevis;
systemd = config.boot.initrd.systemd;
kernelPackages = config.boot.kernelPackages;
defaultPrio = (mkOptionDefault {}).priority;
@@ -594,7 +596,7 @@ in
'';
type = with types; attrsOf (submodule (
{ name, ... }: { options = {
{ config, name, ... }: { options = {
name = mkOption {
visible = false;
@@ -894,6 +896,19 @@ in
'';
};
};
config = mkIf (clevis.enable && (hasAttr name clevis.devices)) {
preOpenCommands = mkIf (!systemd.enable) ''
mkdir -p /clevis-${name}
mount -t ramfs none /clevis-${name}
clevis decrypt < /etc/clevis/${name}.jwe > /clevis-${name}/decrypted
'';
keyFile = "/clevis-${name}/decrypted";
fallbackToPassword = !systemd.enable;
postOpenCommands = mkIf (!systemd.enable) ''
umount /clevis-${name}
'';
};
}));
};
@@ -1081,6 +1096,35 @@ in
boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand preLVM) + postCommands);
boot.initrd.postDeviceCommands = mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + preCommands + concatStrings (mapAttrsToList openCommand postLVM) + postCommands);
boot.initrd.systemd.services = let devicesWithClevis = filterAttrs (device: _: (hasAttr device clevis.devices)) luks.devices; in
mkIf (clevis.enable && systemd.enable) (
(mapAttrs'
(name: _: nameValuePair "cryptsetup-clevis-${name}" {
wantedBy = [ "systemd-cryptsetup@${utils.escapeSystemdPath name}.service" ];
before = [
"systemd-cryptsetup@${utils.escapeSystemdPath name}.service"
"initrd-switch-root.target"
"shutdown.target"
];
wants = [ "systemd-udev-settle.service" ] ++ optional clevis.useTang "network-online.target";
after = [ "systemd-modules-load.service" "systemd-udev-settle.service" ] ++ optional clevis.useTang "network-online.target";
script = ''
mkdir -p /clevis-${name}
mount -t ramfs none /clevis-${name}
umask 277
clevis decrypt < /etc/clevis/${name}.jwe > /clevis-${name}/decrypted
'';
conflicts = [ "initrd-switch-root.target" "shutdown.target" ];
unitConfig.DefaultDependencies = "no";
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
ExecStop = "${config.boot.initrd.systemd.package.util-linux}/bin/umount /clevis-${name}";
};
})
devicesWithClevis)
);
environment.systemPackages = [ pkgs.cryptsetup ];
};
}
+9 -1
View File
@@ -57,7 +57,15 @@ let
# bcachefs does not support mounting devices with colons in the path, ergo we don't (see #49671)
firstDevice = fs: lib.head (lib.splitString ":" fs.device);
openCommand = name: fs: ''
openCommand = name: fs: if config.boot.initrd.clevis.enable && (lib.hasAttr (firstDevice fs) config.boot.initrd.clevis.devices) then ''
if clevis decrypt < /etc/clevis/${firstDevice fs}.jwe | bcachefs unlock ${firstDevice fs}
then
printf "unlocked ${name} using clevis\n"
else
printf "falling back to interactive unlocking...\n"
tryUnlock ${name} ${firstDevice fs}
fi
'' else ''
tryUnlock ${name} ${firstDevice fs}
'';
+11 -2
View File
@@ -17,6 +17,9 @@ let
cfgZED = config.services.zfs.zed;
selectModulePackage = package: config.boot.kernelPackages.${package.kernelModuleAttribute};
clevisDatasets = map (e: e.device) (filter (e: (hasAttr e.device config.boot.initrd.clevis.devices) && e.fsType == "zfs" && (fsNeededForBoot e)) config.system.build.fileSystems);
inInitrd = any (fs: fs == "zfs") config.boot.initrd.supportedFilesystems;
inSystem = any (fs: fs == "zfs") config.boot.supportedFilesystems;
@@ -120,12 +123,12 @@ let
# but don't *require* it, because mounts shouldn't be killed if it's stopped.
# In the future, hopefully someone will complete this:
# https://github.com/zfsonlinux/zfs/pull/4943
wants = [ "systemd-udev-settle.service" ];
wants = [ "systemd-udev-settle.service" ] ++ optional (config.boot.initrd.clevis.useTang) "network-online.target";
after = [
"systemd-udev-settle.service"
"systemd-modules-load.service"
"systemd-ask-password-console.service"
];
] ++ optional (config.boot.initrd.clevis.useTang) "network-online.target";
requiredBy = getPoolMounts prefix pool ++ [ "zfs-import.target" ];
before = getPoolMounts prefix pool ++ [ "zfs-import.target" ];
unitConfig = {
@@ -154,6 +157,9 @@ let
poolImported "${pool}" || poolImport "${pool}" # Try one last time, e.g. to import a degraded pool.
fi
if poolImported "${pool}"; then
${concatMapStringsSep "\n" (elem: "clevis decrypt < /etc/clevis/${elem}.jwe | zfs load-key ${elem} || true ") (filter (p: (elemAt (splitString "/" p) 0) == pool) clevisDatasets)}
${optionalString keyLocations.hasKeys ''
${keyLocations.command} | while IFS=$'\t' read ds kl ks; do
{
@@ -623,6 +629,9 @@ in
fi
poolImported "${pool}" || poolImport "${pool}" # Try one last time, e.g. to import a degraded pool.
fi
${concatMapStringsSep "\n" (elem: "clevis decrypt < /etc/clevis/${elem}.jwe | zfs load-key ${elem}") (filter (p: (elemAt (splitString "/" p) 0) == pool) clevisDatasets)}
${if isBool cfgZfs.requestEncryptionCredentials
then optionalString cfgZfs.requestEncryptionCredentials ''
zfs load-key -a
+5 -1
View File
@@ -10,7 +10,11 @@ import ./make-test-python.nix ({ pkgs, ... }: rec {
let
o = builtins.tryEval drv;
in
o.success && lib.isDerivation o.value && o.value ? outputs && builtins.elem "terminfo" o.value.outputs;
o.success &&
lib.isDerivation o.value &&
o.value ? outputs &&
builtins.elem "terminfo" o.value.outputs &&
!o.value.meta.broken;
terminfos = lib.filterAttrs infoFilter pkgs;
excludedTerminfos = lib.filterAttrs (_: drv: !(builtins.elem drv.terminfo config.environment.systemPackages)) terminfos;
includedOuts = lib.filterAttrs (_: drv: builtins.elem drv.out config.environment.systemPackages) terminfos;
+1
View File
@@ -135,6 +135,7 @@ in {
authelia = handleTest ./authelia.nix {};
avahi = handleTest ./avahi.nix {};
avahi-with-resolved = handleTest ./avahi.nix { networkd = true; };
ayatana-indicators = handleTest ./ayatana-indicators.nix {};
babeld = handleTest ./babeld.nix {};
bazarr = handleTest ./bazarr.nix {};
bcachefs = handleTestOn ["x86_64-linux" "aarch64-linux"] ./bcachefs.nix {};
+2 -1
View File
@@ -84,7 +84,7 @@ in
getpwuid = ''
SELECT name, 'x', uid, gid, name, CONCAT('/home/', name), "/run/current-system/sw/bin/bash" \
FROM users \
WHERE id=%1$u \
WHERE uid=%1$u \
LIMIT 1
'';
getspnam = ''
@@ -140,6 +140,7 @@ in
machine.wait_for_unit("multi-user.target")
machine.wait_for_unit("mysql.service")
machine.wait_until_succeeds("cat /etc/security/pam_mysql.conf | grep users.db_passwd")
machine.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
with subtest("Local login"):
+71
View File
@@ -0,0 +1,71 @@
import ./make-test-python.nix ({ pkgs, lib, ... }: let
user = "alice";
in {
name = "ayatana-indicators";
meta = {
maintainers = with lib.maintainers; [ OPNA2608 ];
};
nodes.machine = { config, ... }: {
imports = [
./common/auto.nix
./common/user-account.nix
];
test-support.displayManager.auto = {
enable = true;
inherit user;
};
services.xserver = {
enable = true;
desktopManager.mate.enable = true;
displayManager.defaultSession = lib.mkForce "mate";
};
services.ayatana-indicators = {
enable = true;
packages = with pkgs; [
ayatana-indicator-messages
];
};
# Services needed by some indicators
services.accounts-daemon.enable = true; # messages
};
# TODO session indicator starts up in a semi-broken state, but works fine after a restart. maybe being started before graphical session is truly up & ready?
testScript = { nodes, ... }: let
runCommandPerIndicatorService = command: lib.strings.concatMapStringsSep "\n" command nodes.machine.systemd.user.targets."ayatana-indicators".wants;
in ''
start_all()
machine.wait_for_x()
# Desktop environment should reach graphical-session.target
machine.wait_for_unit("graphical-session.target", "${user}")
# MATE relies on XDG autostart to bring up the indicators.
# Not sure *when* XDG autostart fires them up, and awaiting pgrep success seems to misbehave?
machine.sleep(10)
# Now check if all indicators were brought up successfully, and kill them for later
'' + (runCommandPerIndicatorService (service: let serviceExec = builtins.replaceStrings [ "." ] [ "-" ] service; in ''
machine.succeed("pgrep -f ${serviceExec}")
machine.succeed("pkill -f ${serviceExec}")
'')) + ''
# Ayatana target is the preferred way of starting up indicators on SystemD session, the graphical session is responsible for starting this if it supports them.
# Mate currently doesn't do this, so start it manually for checking (https://github.com/mate-desktop/mate-indicator-applet/issues/63)
machine.systemctl("start ayatana-indicators.target", "${user}")
machine.wait_for_unit("ayatana-indicators.target", "${user}")
# Let all indicator services do their startups, potential post-launch crash & restart cycles so we can properly check for failures
# Not sure if there's a better way of awaiting this without false-positive potential
machine.sleep(10)
# Now check if all indicator services were brought up successfully
'' + runCommandPerIndicatorService (service: ''
machine.wait_for_unit("${service}", "${user}")
'');
})
@@ -32,6 +32,10 @@
stratisRoot
swraid
zfsroot
clevisLuks
clevisLuksFallback
clevisZfs
clevisZfsFallback
;
}
+233 -15
View File
@@ -12,6 +12,7 @@ let
# The configuration to install.
makeConfig = { bootLoader, grubDevice, grubIdentifier, grubUseEfi
, extraConfig, forceGrubReinstallCount ? 0, flake ? false
, clevisTest
}:
pkgs.writeText "configuration.nix" ''
{ config, lib, pkgs, modulesPath, ... }:
@@ -52,6 +53,15 @@ let
boot.initrd.secrets."/etc/secret" = ./secret;
${optionalString clevisTest ''
boot.kernelParams = [ "console=tty0" "ip=192.168.1.1:::255.255.255.0::eth1:none" ];
boot.initrd = {
availableKernelModules = [ "tpm_tis" ];
clevis = { enable = true; useTang = true; };
network.enable = true;
};
''}
users.users.alice = {
isNormalUser = true;
home = "/home/alice";
@@ -71,7 +81,7 @@ let
# partitions and filesystems.
testScriptFun = { bootLoader, createPartitions, grubDevice, grubUseEfi, grubIdentifier
, postInstallCommands, preBootCommands, postBootCommands, extraConfig
, testSpecialisationConfig, testFlakeSwitch
, testSpecialisationConfig, testFlakeSwitch, clevisTest, clevisFallbackTest
}:
let iface = "virtio";
isEfi = bootLoader == "systemd-boot" || (bootLoader == "grub" && grubUseEfi);
@@ -79,12 +89,16 @@ let
in if !isEfi && !pkgs.stdenv.hostPlatform.isx86 then ''
machine.succeed("true")
'' else ''
import subprocess
tpm_folder = os.environ['NIX_BUILD_TOP']
def assemble_qemu_flags():
flags = "-cpu max"
${if (system == "x86_64-linux" || system == "i686-linux")
then ''flags += " -m 1024"''
else ''flags += " -m 768 -enable-kvm -machine virt,gic-version=host"''
}
${optionalString clevisTest ''flags += f" -chardev socket,id=chrtpm,path={tpm_folder}/swtpm-sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0"''}
${optionalString clevisTest ''flags += " -device virtio-net-pci,netdev=vlan1,mac=52:54:00:12:11:02 -netdev vde,id=vlan1,sock=\"$QEMU_VDE_SOCKET_1\""''}
return flags
@@ -110,8 +124,45 @@ let
def create_machine_named(name):
return create_machine({**default_flags, "name": name})
class Tpm:
def __init__(self):
self.start()
def start(self):
self.proc = subprocess.Popen(["${pkgs.swtpm}/bin/swtpm",
"socket",
"--tpmstate", f"dir={tpm_folder}/swtpm",
"--ctrl", f"type=unixio,path={tpm_folder}/swtpm-sock",
"--tpm2"
])
# Check whether starting swtpm failed
try:
exit_code = self.proc.wait(timeout=0.2)
if exit_code is not None and exit_code != 0:
raise Exception("failed to start swtpm")
except subprocess.TimeoutExpired:
pass
"""Check whether the swtpm process exited due to an error"""
def check(self):
exit_code = self.proc.poll()
if exit_code is not None and exit_code != 0:
raise Exception("swtpm process died")
os.mkdir(f"{tpm_folder}/swtpm")
tpm = Tpm()
tpm.check()
start_all()
${optionalString clevisTest ''
tang.wait_for_unit("sockets.target")
tang.wait_for_unit("network-online.target")
machine.wait_for_unit("network-online.target")
''}
machine.wait_for_unit("multi-user.target")
machine.start()
with subtest("Assert readiness of login prompt"):
machine.succeed("echo hello")
@@ -127,13 +178,23 @@ let
machine.copy_from_host(
"${ makeConfig {
inherit bootLoader grubDevice grubIdentifier
grubUseEfi extraConfig;
grubUseEfi extraConfig clevisTest;
}
}",
"/mnt/etc/nixos/configuration.nix",
)
machine.copy_from_host("${pkgs.writeText "secret" "secret"}", "/mnt/etc/nixos/secret")
${optionalString clevisTest ''
with subtest("Create the Clevis secret with Tang"):
machine.wait_for_unit("network-online.target")
machine.succeed('echo -n password | clevis encrypt sss \'{"t": 2, "pins": {"tpm2": {}, "tang": {"url": "http://192.168.1.2"}}}\' -y > /mnt/etc/nixos/clevis-secret.jwe')''}
${optionalString clevisFallbackTest ''
with subtest("Shutdown Tang to check fallback to interactive prompt"):
tang.shutdown()
''}
with subtest("Perform the installation"):
machine.succeed("nixos-install < /dev/null >&2")
@@ -200,7 +261,7 @@ let
machine.copy_from_host_via_shell(
"${ makeConfig {
inherit bootLoader grubDevice grubIdentifier
grubUseEfi extraConfig;
grubUseEfi extraConfig clevisTest;
forceGrubReinstallCount = 1;
}
}",
@@ -229,7 +290,7 @@ let
machine.copy_from_host_via_shell(
"${ makeConfig {
inherit bootLoader grubDevice grubIdentifier
grubUseEfi extraConfig;
grubUseEfi extraConfig clevisTest;
forceGrubReinstallCount = 2;
}
}",
@@ -303,7 +364,7 @@ let
""")
machine.copy_from_host_via_shell(
"${makeConfig {
inherit bootLoader grubDevice grubIdentifier grubUseEfi extraConfig;
inherit bootLoader grubDevice grubIdentifier grubUseEfi extraConfig clevisTest;
forceGrubReinstallCount = 1;
flake = true;
}}",
@@ -379,6 +440,8 @@ let
, enableOCR ? false, meta ? {}
, testSpecialisationConfig ? false
, testFlakeSwitch ? false
, clevisTest ? false
, clevisFallbackTest ? false
}:
makeTest {
inherit enableOCR;
@@ -416,13 +479,13 @@ let
virtualisation.rootDevice = "/dev/vdb";
virtualisation.bootLoaderDevice = "/dev/vda";
virtualisation.qemu.diskInterface = "virtio";
# We don't want to have any networking in the guest whatsoever.
# Also, if any vlans are enabled, the guest will reboot
# (with a different configuration for legacy reasons),
# and spend 5 minutes waiting for the vlan interface to show up
# (which will never happen).
virtualisation.vlans = [];
virtualisation.qemu.options = mkIf (clevisTest) [
"-chardev socket,id=chrtpm,path=$NIX_BUILD_TOP/swtpm-sock"
"-tpmdev emulator,id=tpm0,chardev=chrtpm"
"-device tpm-tis,tpmdev=tpm0"
];
# We don't want to have any networking in the guest apart from the clevis tests.
virtualisation.vlans = mkIf (!clevisTest) [];
boot.loader.systemd-boot.enable = mkIf (bootLoader == "systemd-boot") true;
@@ -471,7 +534,7 @@ let
in [
(pkgs.grub2.override { inherit zfsSupport; })
(pkgs.grub2_efi.override { inherit zfsSupport; })
]);
]) ++ optionals clevisTest [ pkgs.klibc ];
nix.settings = {
substituters = mkForce [];
@@ -480,12 +543,21 @@ let
};
};
} // optionalAttrs clevisTest {
tang = {
services.tang = {
enable = true;
listenStream = [ "80" ];
ipAddressAllow = [ "192.168.1.0/24" ];
};
networking.firewall.allowedTCPPorts = [ 80 ];
};
};
testScript = testScriptFun {
inherit bootLoader createPartitions postInstallCommands preBootCommands postBootCommands
grubDevice grubIdentifier grubUseEfi extraConfig
testSpecialisationConfig testFlakeSwitch;
testSpecialisationConfig testFlakeSwitch clevisTest clevisFallbackTest;
};
};
@@ -586,6 +658,145 @@ let
zfs = super.zfs.overrideAttrs(_: {meta.platforms = [];});}
)];
};
mkClevisBcachefsTest = { fallback ? false }: makeInstallerTest "clevis-bcachefs${optionalString fallback "-fallback"}" {
clevisTest = true;
clevisFallbackTest = fallback;
enableOCR = fallback;
extraInstallerConfig = {
imports = [ no-zfs-module ];
boot.supportedFilesystems = [ "bcachefs" ];
environment.systemPackages = with pkgs; [ keyutils clevis ];
};
createPartitions = ''
machine.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB"
+ " mkpart primary linux-swap 100M 1024M"
+ " mkpart primary 1024M -1s",
"udevadm settle",
"mkswap /dev/vda2 -L swap",
"swapon -L swap",
"keyctl link @u @s",
"echo -n password | mkfs.bcachefs -L root --encrypted /dev/vda3",
"echo -n password | bcachefs unlock /dev/vda3",
"echo -n password | mount -t bcachefs /dev/vda3 /mnt",
"mkfs.ext3 -L boot /dev/vda1",
"mkdir -p /mnt/boot",
"mount LABEL=boot /mnt/boot",
"udevadm settle")
'';
extraConfig = ''
boot.initrd.clevis.devices."/dev/vda3".secretFile = "/etc/nixos/clevis-secret.jwe";
# We override what nixos-generate-config has generated because we do
# not know the UUID in advance.
fileSystems."/" = lib.mkForce { device = "/dev/vda3"; fsType = "bcachefs"; };
'';
preBootCommands = ''
tpm = Tpm()
tpm.check()
'' + optionalString fallback ''
machine.start()
machine.wait_for_text("enter passphrase for")
machine.send_chars("password\n")
'';
};
mkClevisLuksTest = { fallback ? false }: makeInstallerTest "clevis-luks${optionalString fallback "-fallback"}" {
clevisTest = true;
clevisFallbackTest = fallback;
enableOCR = fallback;
extraInstallerConfig = {
environment.systemPackages = with pkgs; [ clevis ];
};
createPartitions = ''
machine.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB"
+ " mkpart primary linux-swap 100M 1024M"
+ " mkpart primary 1024M -1s",
"udevadm settle",
"mkswap /dev/vda2 -L swap",
"swapon -L swap",
"modprobe dm_mod dm_crypt",
"echo -n password | cryptsetup luksFormat -q /dev/vda3 -",
"echo -n password | cryptsetup luksOpen --key-file - /dev/vda3 crypt-root",
"mkfs.ext3 -L nixos /dev/mapper/crypt-root",
"mount LABEL=nixos /mnt",
"mkfs.ext3 -L boot /dev/vda1",
"mkdir -p /mnt/boot",
"mount LABEL=boot /mnt/boot",
"udevadm settle")
'';
extraConfig = ''
boot.initrd.clevis.devices."crypt-root".secretFile = "/etc/nixos/clevis-secret.jwe";
'';
preBootCommands = ''
tpm = Tpm()
tpm.check()
'' + optionalString fallback ''
machine.start()
${if systemdStage1 then ''
machine.wait_for_text("Please enter")
'' else ''
machine.wait_for_text("Passphrase for")
''}
machine.send_chars("password\n")
'';
};
mkClevisZfsTest = { fallback ? false }: makeInstallerTest "clevis-zfs${optionalString fallback "-fallback"}" {
clevisTest = true;
clevisFallbackTest = fallback;
enableOCR = fallback;
extraInstallerConfig = {
boot.supportedFilesystems = [ "zfs" ];
environment.systemPackages = with pkgs; [ clevis ];
};
createPartitions = ''
machine.succeed(
"flock /dev/vda parted --script /dev/vda -- mklabel msdos"
+ " mkpart primary ext2 1M 100MB"
+ " mkpart primary linux-swap 100M 1024M"
+ " mkpart primary 1024M -1s",
"udevadm settle",
"mkswap /dev/vda2 -L swap",
"swapon -L swap",
"zpool create -O mountpoint=legacy rpool /dev/vda3",
"echo -n password | zfs create"
+ " -o encryption=aes-256-gcm -o keyformat=passphrase rpool/root",
"mount -t zfs rpool/root /mnt",
"mkfs.ext3 -L boot /dev/vda1",
"mkdir -p /mnt/boot",
"mount LABEL=boot /mnt/boot",
"udevadm settle")
'';
extraConfig = ''
boot.initrd.clevis.devices."rpool/root".secretFile = "/etc/nixos/clevis-secret.jwe";
boot.zfs.requestEncryptionCredentials = true;
# Using by-uuid overrides the default of by-id, and is unique
# to the qemu disks, as they don't produce by-id paths for
# some reason.
boot.zfs.devNodes = "/dev/disk/by-uuid/";
networking.hostId = "00000000";
'';
preBootCommands = ''
tpm = Tpm()
tpm.check()
'' + optionalString fallback ''
machine.start()
${if systemdStage1 then ''
machine.wait_for_text("Enter key for rpool/root")
'' else ''
machine.wait_for_text("Key load error")
''}
machine.send_chars("password\n")
'';
};
in {
# !!! `parted mkpart' seems to silently create overlapping partitions.
@@ -1175,6 +1386,13 @@ in {
)
'';
};
} // {
clevisBcachefs = mkClevisBcachefsTest { };
clevisBcachefsFallback = mkClevisBcachefsTest { fallback = true; };
clevisLuks = mkClevisLuksTest { };
clevisLuksFallback = mkClevisLuksTest { fallback = true; };
clevisZfs = mkClevisZfsTest { };
clevisZfsFallback = mkClevisZfsTest { fallback = true; };
} // optionalAttrs systemdStage1 {
stratisRoot = makeInstallerTest "stratisRoot" {
createPartitions = ''
@@ -1,12 +1,12 @@
{ lib, fetchurl, buildPythonApplication, libjack2, pydbus, pyliblo, pyqt5, which, bash, qt5 }:
{ lib, fetchurl, buildPythonApplication, libjack2, pyliblo, pyqt5, which, bash, qt5 }:
buildPythonApplication rec {
pname = "raysession";
version = "0.13.1";
version = "0.14.2";
src = fetchurl {
url = "https://github.com/Houston4444/RaySession/releases/download/v${version}/RaySession-${version}-source.tar.gz";
sha256 = "sha256-iiFRtX43u9BHe7a4ojza7kav+dMW9e05dPi7Gf9d1GM=";
sha256 = "sha256-qEN3zBK/goRLIZaU06XXm8H5yj4Qjj/NH+bkHkjhLaw=";
};
postPatch = ''
@@ -25,7 +25,7 @@ buildPythonApplication rec {
qt5.wrapQtAppsHook
];
buildInputs = [ libjack2 bash ];
propagatedBuildInputs = [ pydbus pyliblo pyqt5 ];
propagatedBuildInputs = [ pyliblo pyqt5 ];
dontWrapQtApps = true; # The program is a python script.
@@ -1,76 +0,0 @@
{ lib
, stdenv
, fetchFromGitHub
, rust
, rustPlatform
, cmake
, makeWrapper
, cosmic-icons
, just
, pkg-config
, libxkbcommon
, glib
, gtk3
, libinput
, fontconfig
, freetype
, wayland
}:
rustPlatform.buildRustPackage rec {
pname = "cosmic-edit";
version = "unstable-2023-11-02";
src = fetchFromGitHub {
owner = "pop-os";
repo = "cosmic-edit";
rev = "ee2dea71e6e21967bc705046f9650407d07cdada";
sha256 = "sha256-27j9Imlyzwy2yjpNsWWcX0qW38ZxMDkht1Eaggr4NYY=";
};
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"accesskit-0.11.0" = "sha256-xVhe6adUb8VmwIKKjHxwCwOo5Y1p3Or3ylcJJdLDrrE=";
"cosmic-config-0.1.0" = "sha256-VKvJ7cNwMLLs6ElpgP6xwsBUnD5MDApwWl7rrb/Lr/U=";
"cosmic-text-0.10.0" = "sha256-g9y2qZ2ivpDtZAtsXqMXgGjUFi9QZx/weMhk7hmnB3E=";
"sctk-adwaita-0.5.4" = "sha256-yK0F2w/0nxyKrSiHZbx7+aPNY2vlFs7s8nu/COp2KqQ=";
"smithay-client-toolkit-0.16.1" = "sha256-z7EZThbh7YmKzAACv181zaEZmWxTrMkFRzP0nfsHK6c=";
"softbuffer-0.2.0" = "sha256-VD2GmxC58z7Qfu/L+sfENE+T8L40mvUKKSfgLmCTmjY=";
"taffy-0.3.11" = "sha256-0hXOEj6IjSW8e1t+rvxBFX6V9XRum3QO2Des1XlHJEw=";
"winit-0.28.6" = "sha256-FhW6d2XnXCGJUMoT9EMQew9/OPXiehy/JraeCiVd76M=";
};
};
postPatch = ''
substituteInPlace justfile --replace '#!/usr/bin/env' "#!$(command -v env)"
'';
nativeBuildInputs = [ cmake just pkg-config makeWrapper ];
buildInputs = [ libxkbcommon libinput fontconfig freetype wayland glib gtk3 ];
dontUseJustBuild = true;
justFlags = [
"--set"
"prefix"
(placeholder "out")
"--set"
"bin-src"
"target/${rust.lib.toRustTargetSpecShort stdenv.hostPlatform}/release/cosmic-edit"
];
postInstall = ''
wrapProgram "$out/bin/${pname}" \
--suffix XDG_DATA_DIRS : "${cosmic-icons}/share"
'';
meta = with lib; {
homepage = "https://github.com/pop-os/cosmic-edit";
description = "Text Editor for the COSMIC Desktop Environment";
license = licenses.gpl3Only;
mainProgram = "cosmic-edit";
maintainers = with maintainers; [ ahoneybun ];
platforms = platforms.linux;
};
}
@@ -120,7 +120,8 @@ with stdenv; lib.makeOverridable mkDerivation (rec {
item=${desktopItem}
wrapProgram "$out/$pname/bin/${loName}.sh" \
--prefix PATH : "$out/libexec/${pname}:${lib.makeBinPath [ jdk coreutils gnugrep which git python3 ]}" \
--prefix PATH : "$out/libexec/${pname}:${lib.makeBinPath [ jdk coreutils gnugrep which git ]}" \
--suffix PATH : "${lib.makeBinPath [ python3 ]}" \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath extraLdPath}" \
${lib.concatStringsSep " " extraWrapperArgs} \
--set-default JDK_HOME "$jdk" \
@@ -2287,12 +2287,12 @@ final: prev:
conform-nvim = buildVimPlugin {
pname = "conform.nvim";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "stevearc";
repo = "conform.nvim";
rev = "3fc2c956d99216b2816f07d2b946020ba2e02457";
sha256 = "1hv712cn3vn4gnr01a9maq787nb13x8nwachksnik49bq28g43g6";
rev = "e8ac7f1a9a3973ecce6942b2f26d16e65902aa70";
sha256 = "127shx9vzq9rkjk44xpr24w76b51fywwrni6nvrdq29swqdpk9yw";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/stevearc/conform.nvim/";
@@ -2348,12 +2348,12 @@ final: prev:
copilot-lua = buildVimPlugin {
pname = "copilot.lua";
version = "2023-11-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "zbirenbaum";
repo = "copilot.lua";
rev = "3665ed0f3ef3ad68673df7195789d134d0d1fdb0";
sha256 = "1vsyjxqzq57ckmj942i018r1zg56l908fg8i5z3rv4qyqrwjz725";
rev = "38a41d0d78f8823cc144c99784528b9a68bdd608";
sha256 = "05v2cxa10s98pk7w0g3g8p440bz6n2r2k4ygxz9vkbcjf39kgjaj";
};
meta.homepage = "https://github.com/zbirenbaum/copilot.lua/";
};
@@ -2480,12 +2480,12 @@ final: prev:
csv-vim = buildVimPlugin {
pname = "csv.vim";
version = "2023-09-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "chrisbra";
repo = "csv.vim";
rev = "4fd88346aed02123aa5daa1a363868a576c6fdcf";
sha256 = "10c2hgzhnv1zr461hvp4cnxpfs0aja43whjimdsb5sjd4xk5x7cc";
rev = "962f88787ec6873eba1c7dbbd81d2723f1ee3c4b";
sha256 = "11gwamrqqmcy5jvbmnmyvx94pknlx3ppvyk4b6vhm4dghwmhq9nb";
};
meta.homepage = "https://github.com/chrisbra/csv.vim/";
};
@@ -3046,12 +3046,12 @@ final: prev:
dressing-nvim = buildVimPlugin {
pname = "dressing.nvim";
version = "2023-11-07";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "stevearc";
repo = "dressing.nvim";
rev = "fe3071330a0720ce3695ac915820c8134b22d1b0";
sha256 = "0a76mkvgya5hygfjbk2wbha18fhwhv6kmkxgvda053z325505mc6";
rev = "8b7ae53d7f04f33be3439a441db8071c96092d19";
sha256 = "1gj3apvif9bfz1vqrxr6xmj5p7byjq5qdjv159lnm09hca3vfdnb";
};
meta.homepage = "https://github.com/stevearc/dressing.nvim/";
};
@@ -3649,12 +3649,12 @@ final: prev:
fzf-lua = buildVimPlugin {
pname = "fzf-lua";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "ibhagwan";
repo = "fzf-lua";
rev = "474af4d6e2f0ebfbb5df85ca7827b67949717bae";
sha256 = "0236ccalzkwv2qzspqdglnkvpflzcppllp4v5bn6v1lbnlyqj7dm";
rev = "a1a2d0f42eaec400cc6918a8e898fc1f9c4dbc5f";
sha256 = "14pdspy8932fh5w247vqs0fyywb6mwg1af9sk5irgxfsv7c0xlg2";
};
meta.homepage = "https://github.com/ibhagwan/fzf-lua/";
};
@@ -3877,12 +3877,12 @@ final: prev:
go-nvim = buildVimPlugin {
pname = "go.nvim";
version = "2023-11-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "ray-x";
repo = "go.nvim";
rev = "e0528b5868b8c488fb6eaf1a4f7b298976d419a5";
sha256 = "08xh4i09akm13gaj5zzlqlhcrr1i21jwqzxljf7i5wklpw7hf03c";
rev = "7b7c20029a817ef51f6b498388488e9850fe45ac";
sha256 = "0qbgmg9kvhxz4akmxd56lwr2zjxrayccgiynkcfnqakvya271jji";
};
meta.homepage = "https://github.com/ray-x/go.nvim/";
};
@@ -4080,24 +4080,24 @@ final: prev:
harpoon = buildVimPlugin {
pname = "harpoon";
version = "2023-10-10";
version = "2023-12-02";
src = fetchFromGitHub {
owner = "ThePrimeagen";
repo = "harpoon";
rev = "c1aebbad9e3d13f20bedb8f2ce8b3a94e39e424a";
sha256 = "0wqxg31z7gi7ap8r0057lpadywx3d245ghlljr6mkmp0jz3waad5";
rev = "c5f2d71c32a4aa2569bef1066e668947b78f9682";
sha256 = "1jn3sj3r1mczg5wyh7qcs51mab8sz02sgff5d2p3qhz0gjvyq22m";
};
meta.homepage = "https://github.com/ThePrimeagen/harpoon/";
};
haskell-tools-nvim = buildNeovimPlugin {
pname = "haskell-tools.nvim";
version = "2023-11-26";
version = "2023-12-02";
src = fetchFromGitHub {
owner = "MrcJkb";
repo = "haskell-tools.nvim";
rev = "8bfbba643d908e8757d591cf01e2241dd46b0858";
sha256 = "05np6ahzf6mk6ksfak12y7iwgfkrpkwhgf366bqlbk236g3k7sk0";
rev = "fdb248c2cc724b151b0886044b5fd8b88968d0d1";
sha256 = "0wj9aqihym10bmdybdmvlf8nlaghhfxl5z7gaamzbzlwhwlx71zy";
};
meta.homepage = "https://github.com/MrcJkb/haskell-tools.nvim/";
};
@@ -4271,12 +4271,12 @@ final: prev:
hotpot-nvim = buildVimPlugin {
pname = "hotpot.nvim";
version = "2023-10-20";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "rktjmp";
repo = "hotpot.nvim";
rev = "eb5531b5f6285656408d1ed07b4d9bcc8067bad4";
sha256 = "0yl1l11dp58mg3bfk42ydcc7s2fxnnz6nlkkc09kxmdf4gxwr3wc";
rev = "05d9325e14ee1af9114b5c4586d1b200e75ccac9";
sha256 = "1ffhx1i9p7a13k6qmpry507ypk45sff6api5nnnc709bd7360743";
};
meta.homepage = "https://github.com/rktjmp/hotpot.nvim/";
};
@@ -4439,12 +4439,12 @@ final: prev:
indent-blankline-nvim = buildVimPlugin {
pname = "indent-blankline.nvim";
version = "2023-10-30";
version = "2023-12-02";
src = fetchFromGitHub {
owner = "lukas-reineke";
repo = "indent-blankline.nvim";
rev = "29be0919b91fb59eca9e90690d76014233392bef";
sha256 = "0z8n9d6f4qiq8m4ai1r2xz90955cp6cikqprq74ivfch3icrzdi1";
rev = "dbd90bb689ff10d21fee6792eb8928f0584b5860";
sha256 = "1fbx8l5m09qyis4d767gmmwa9rgify6vwjvj3b1jqfzhlz1fmd24";
};
meta.homepage = "https://github.com/lukas-reineke/indent-blankline.nvim/";
};
@@ -4860,12 +4860,12 @@ final: prev:
leap-nvim = buildVimPlugin {
pname = "leap.nvim";
version = "2023-10-22";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "ggandor";
repo = "leap.nvim";
rev = "b6ae80f8fc9993638608fc1a51c6ab0eeb12618c";
sha256 = "19nffffmczlqfsgjs10hqs9abgbygiv0ns64apk7gzf5anjaj0z1";
rev = "d55acc28ecc1f3ab3c396afd1f8b11a239285d9b";
sha256 = "0g4savdihdh15lddh5yj8vq5py9flzl59dqc93w6yx2kvj1r9ad2";
};
meta.homepage = "https://github.com/ggandor/leap.nvim/";
};
@@ -5016,12 +5016,12 @@ final: prev:
lightspeed-nvim = buildVimPlugin {
pname = "lightspeed.nvim";
version = "2022-10-21";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "ggandor";
repo = "lightspeed.nvim";
rev = "299eefa6a9e2d881f1194587c573dad619fdb96f";
sha256 = "1697plp2f6r5vmayi4xw23lj69pc31r3zh3p07rzxgl2ir4zrj1z";
rev = "fcc72d8a4d5f4ebba62d8a3a0660f88f1b5c3b05";
sha256 = "1006047i88h1sad2xdi6h26vy13wnh4mnsdqqp4gpvh2sg6avnd5";
};
meta.homepage = "https://github.com/ggandor/lightspeed.nvim/";
};
@@ -5279,12 +5279,12 @@ final: prev:
lspsaga-nvim = buildVimPlugin {
pname = "lspsaga.nvim";
version = "2023-11-21";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "nvimdev";
repo = "lspsaga.nvim";
rev = "d3dfaea0125315110ea720c337ab88aa451d75e7";
sha256 = "07bm8gvzx68cdy7jkhva3caqjqazrh5hnhr3yi1qa6g1vlmnb0f7";
rev = "e9f08958e5f8410cadaa6388844788aedec5f78a";
sha256 = "1rhrjh36nlwrms9ikd3vfmvf1lh5m8wqx79n82g68lkaxch6g8v1";
};
meta.homepage = "https://github.com/nvimdev/lspsaga.nvim/";
};
@@ -5325,14 +5325,14 @@ final: prev:
meta.homepage = "https://github.com/nvim-lualine/lualine.nvim/";
};
luasnip = buildVimPlugin {
luasnip = buildNeovimPlugin {
pname = "luasnip";
version = "2023-11-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "l3mon4d3";
repo = "luasnip";
rev = "1def35377854535bb3b0f4cc7a33c083cdb12571";
sha256 = "1g34ivzymgv214rpmwcmv91l4gp29q4r6cbv8xszzvxmc7dxcgkr";
rev = "118263867197a111717b5f13d954cd1ab8124387";
sha256 = "05gf35zb1m4baz3xiw8qh647l2w89861jljrhbbjnhnn48vfqgzw";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/l3mon4d3/luasnip/";
@@ -5436,24 +5436,24 @@ final: prev:
mason-lspconfig-nvim = buildVimPlugin {
pname = "mason-lspconfig.nvim";
version = "2023-11-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "williamboman";
repo = "mason-lspconfig.nvim";
rev = "41674c9d50f23cfa3e11f0ca964eb9100c2a8922";
sha256 = "030vyd0n45kd9j33kb20v8kx9pg66702525gnjbcrv5a8npldm1q";
rev = "4eb8e15e3c0757303d4c6dea64d2981fc679e990";
sha256 = "0ng3zhxcxdkpwd4zy17yl51h7bhknd3qv8j6rkbq1js237zv027p";
};
meta.homepage = "https://github.com/williamboman/mason-lspconfig.nvim/";
};
mason-tool-installer-nvim = buildVimPlugin {
pname = "mason-tool-installer.nvim";
version = "2023-10-10";
version = "2023-12-02";
src = fetchFromGitHub {
owner = "WhoIsSethDaniel";
repo = "mason-tool-installer.nvim";
rev = "e4f34741daa9cf95de68a603d3e7a6844a69fdf0";
sha256 = "1pk19mlssn6f4pqm2j0kf9841nmxd0scphhrrd02w81gmsr912zh";
rev = "8b70e7f1e0a4119c1234c3bde4a01c241cabcc74";
sha256 = "1jxk8hz4p84f725f35hdkqnk6dnkanly86k89n7p551qwjs21mv0";
};
meta.homepage = "https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim/";
};
@@ -5556,12 +5556,12 @@ final: prev:
mini-nvim = buildVimPlugin {
pname = "mini.nvim";
version = "2023-11-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "echasnovski";
repo = "mini.nvim";
rev = "964fab7fecd14f66a69a96162f8aa816480690fd";
sha256 = "1vxbjidpxhjbrbhg5kl4x4dcsn77nfybzbnlq4yjcpcsrmf8ms5i";
rev = "6d1cbcaec421b3768088b4047e78ce22e5503b99";
sha256 = "1924d432sym9qbp2q9h9gj5ky81vnxq1y4zzfrg5ay76clplaa95";
};
meta.homepage = "https://github.com/echasnovski/mini.nvim/";
};
@@ -6036,12 +6036,12 @@ final: prev:
neogit = buildVimPlugin {
pname = "neogit";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "NeogitOrg";
repo = "neogit";
rev = "1ab1504ab87016e1d12b8f23543532a3006adb3b";
sha256 = "147k8rxcqqp85l1mjklak0bfzbwn2gkxkm4ykw01srkzy5jlhdwp";
rev = "d0e87541130b2cf62d7f8a54487ef99560232fb6";
sha256 = "16mmrhn83k8jrjavxbzq5ql32q2c9jqdgfx3a6hd2iv810y664qi";
};
meta.homepage = "https://github.com/NeogitOrg/neogit/";
};
@@ -6108,12 +6108,12 @@ final: prev:
neorg = buildVimPlugin {
pname = "neorg";
version = "2023-11-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "nvim-neorg";
repo = "neorg";
rev = "f4466457396717d10d2d235d019e0a80e1770087";
sha256 = "07gs0hdgy7q5sq3cj29jc8qlwsjmr74hqgy0l38pljbqxajigsww";
rev = "bf3daa2229c60f92f48ac6d7db3049b65fd01371";
sha256 = "0si90zng5x0p6qcrzzib8gifbxxw3m3sqbh22jiwwdjxwr3vhy9d";
};
meta.homepage = "https://github.com/nvim-neorg/neorg/";
};
@@ -6445,12 +6445,12 @@ final: prev:
nerdtree = buildVimPlugin {
pname = "nerdtree";
version = "2023-11-15";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "preservim";
repo = "nerdtree";
rev = "0cb04e9245b000daf32f04aae5f606011a6aa3b5";
sha256 = "1rws27wc2l3qahvbfd5b2i1js9kwldxxsfsn0abah96q2m1i3q85";
rev = "50a394b2bfa93674381cb913d6330e5075b5c787";
sha256 = "1p8qmnbi3l4y743db35sig5nxgqj83s20yyqhld9b5v0yr27rhbl";
};
meta.homepage = "https://github.com/preservim/nerdtree/";
};
@@ -6589,12 +6589,12 @@ final: prev:
no-neck-pain-nvim = buildVimPlugin {
pname = "no-neck-pain.nvim";
version = "2023-11-29";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "shortcuts";
repo = "no-neck-pain.nvim";
rev = "0311b1654098b28c29a99007844dfa4bfe315b0a";
sha256 = "01rx8pf5qkga3x4y9902pwkjh0xifgba4xk6wfr0akn1slwd1g11";
rev = "968ad52ee472e950d104303c4c0bfcd3de664fe1";
sha256 = "0lqhi74fjvsflx642g04k2zf8i8dxfycmgd7hh0nkc6012b1ma3x";
};
meta.homepage = "https://github.com/shortcuts/no-neck-pain.nvim/";
};
@@ -6613,12 +6613,12 @@ final: prev:
none-ls-nvim = buildVimPlugin {
pname = "none-ls.nvim";
version = "2023-11-29";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "nvimtools";
repo = "none-ls.nvim";
rev = "3a4826687da4310af379515086d71faca4d21288";
sha256 = "1fcln8z31cmmg0dclp8gwiy74pfa4ylic74pdf4mcsaqbm5blkr4";
rev = "7bf88cd3b37a411fdacfdca1745408a77a420493";
sha256 = "0ynlhj5vskv6laixs79lh334fxxkm0yx1vcgc9vyk9cr19v5109n";
};
meta.homepage = "https://github.com/nvimtools/none-ls.nvim/";
};
@@ -7236,12 +7236,12 @@ final: prev:
nvim-lspconfig = buildVimPlugin {
pname = "nvim-lspconfig";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "neovim";
repo = "nvim-lspconfig";
rev = "fcf153fbbf1facd16a71d46b92be8be495123a9f";
sha256 = "13h9nx74afvabrn51b4wjb6k6svidbmwq5czl03p3rp37lywkxcw";
rev = "694aaec65733e2d54d393abf80e526f86726c988";
sha256 = "16nrq7gxnk33qgpmcnjd8yq738vd7qpr2x77v7xf84qp2443nbkx";
};
meta.homepage = "https://github.com/neovim/nvim-lspconfig/";
};
@@ -7464,12 +7464,12 @@ final: prev:
nvim-scrollview = buildVimPlugin {
pname = "nvim-scrollview";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "dstein64";
repo = "nvim-scrollview";
rev = "1b11329ece4cd25884b56c129aedc23ff1665d92";
sha256 = "0n7mqssagmq40glaiybmf8d5664665q32d9kbgz00jgnnj9n93ay";
rev = "7eb9030662fad8bfbc1df2c6cfc165aa4a8904b2";
sha256 = "1245qk1s00svnh57ijamziam8lm3d419a5vf3wry9fdf2lm01j1g";
};
meta.homepage = "https://github.com/dstein64/nvim-scrollview/";
};
@@ -7596,12 +7596,12 @@ final: prev:
nvim-treesitter = buildVimPlugin {
pname = "nvim-treesitter";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "nvim-treesitter";
repo = "nvim-treesitter";
rev = "b41bbcbb9a2c5543d3bfa4cf7e2b0948a5f61ce6";
sha256 = "1nsfxaxi2wkbs32kfxsbd23m2xx0fickffjgcprj079bgl64z47k";
rev = "80a16deb5146a3eb4648effccda1ab9f45e43e76";
sha256 = "0mgm5b80flk5171b3b2gsy2pjdimc0xbjbsdg4qf9hgzjyxf9jmi";
};
meta.homepage = "https://github.com/nvim-treesitter/nvim-treesitter/";
};
@@ -7656,12 +7656,12 @@ final: prev:
nvim-treesitter-textobjects = buildVimPlugin {
pname = "nvim-treesitter-textobjects";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "nvim-treesitter";
repo = "nvim-treesitter-textobjects";
rev = "aa7935c60aff501580b7f4872a7082e615ea5be3";
sha256 = "0j9fv564l4k1jf29h0mb5vnm2h1x3balrpnmchav527ylcaxhgmm";
rev = "ec1c5bdb3d87ac971749fa6c7dbc2b14884f1f6a";
sha256 = "1kdfwihk8ci827aq4w6xv7vn2740qpmh6dk892cd6yi0ab4zxvxn";
};
meta.homepage = "https://github.com/nvim-treesitter/nvim-treesitter-textobjects/";
};
@@ -7727,12 +7727,12 @@ final: prev:
nvim-ufo = buildVimPlugin {
pname = "nvim-ufo";
version = "2023-11-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "kevinhwang91";
repo = "nvim-ufo";
rev = "c1e75fb93a5413c73221e23d549cc9f208d592fb";
sha256 = "0kwxqrbb0n12bq3iqidk8i67ag4g6rdnqzk5gcjjvm6qlvvylggz";
rev = "47a2f8d4da670db6e01a7373cdf97249e332d6d4";
sha256 = "0k2l5ls9fhc53a7fvyz8p75n0b3spy7s3j4z9l3ilzvhd6m7al6d";
};
meta.homepage = "https://github.com/kevinhwang91/nvim-ufo/";
};
@@ -7871,12 +7871,12 @@ final: prev:
oil-nvim = buildVimPlugin {
pname = "oil.nvim";
version = "2023-11-24";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "stevearc";
repo = "oil.nvim";
rev = "e89a8f8adeef2dfab851fd056d38ee7afc97c249";
sha256 = "1f5201yb7kqbggn0dgpl9p5mnxdxg6ffpfmzih7rzzkp4fhn2vb4";
rev = "58340545c6a01e5e9f7966df448714a156db137a";
sha256 = "0s3yd9336yqk8s8f07lf0195pn5q0ij1qphp0yaisrpxbfarl63p";
fetchSubmodules = true;
};
meta.homepage = "https://github.com/stevearc/oil.nvim/";
@@ -8774,12 +8774,12 @@ final: prev:
rustaceanvim = buildNeovimPlugin {
pname = "rustaceanvim";
version = "2023-11-28";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "mrcjkb";
repo = "rustaceanvim";
rev = "bdd7155a18249f39a014115a8832ee770e503812";
sha256 = "0abwc7shfqcr31m7gaaxq07ym24s6gz8mkc49f5j0idcfj4k4n1v";
rev = "3cad6912b16d5e0a5375d465ca28fda4c6ea4ee9";
sha256 = "12lzw6jh7z5bvd7ss9xils11paiv3b9by31nlxfarnpcvqf0m9l4";
};
meta.homepage = "https://github.com/mrcjkb/rustaceanvim/";
};
@@ -8875,7 +8875,7 @@ final: prev:
owner = "VonHeikemen";
repo = "searchbox.nvim";
rev = "110949af8963185b4e732b45ae57beb731bfcede";
sha256 = "1dahiggnc8hqfgd9akxlsyck7gxz05w0phrvahc5g1kskyr0q7h7";
sha256 = "sha256-Bx4Msp96hlcYVDvDC3gBv78zmde0T5XacxgiZt+LULU=";
};
meta.homepage = "https://github.com/VonHeikemen/searchbox.nvim/";
};
@@ -9256,12 +9256,12 @@ final: prev:
srcery-vim = buildVimPlugin {
pname = "srcery-vim";
version = "2023-11-13";
version = "2023-12-02";
src = fetchFromGitHub {
owner = "srcery-colors";
repo = "srcery-vim";
rev = "ffe6b8e975bb2f218cbeb3e785d2f12d9f88b37d";
sha256 = "0nwk81y9j5ljjm3k19kf1zmscdxiis4mwan026wv7cqp7f9qhxlr";
rev = "e605292319d9c964281d840ac87d3deddfc06559";
sha256 = "0b5zj2ilvhkv01n480gd6zylnhc3yhq9p7gcj0f12fn9yfihqdnf";
};
meta.homepage = "https://github.com/srcery-colors/srcery-vim/";
};
@@ -9848,12 +9848,12 @@ final: prev:
telescope-project-nvim = buildVimPlugin {
pname = "telescope-project.nvim";
version = "2023-11-06";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "nvim-telescope";
repo = "telescope-project.nvim";
rev = "5460c6c60d48618c5c746e5b1cad4c3e8262fdae";
sha256 = "0mj5sg698idk6lsaw6fd56j206vf0djv5sgaszjm4vffgc7666sb";
rev = "1aaf16580a614601a7f7077d9639aeb457dc5559";
sha256 = "1g03lnl79245d0vn7ydda4aixd2qbv9kcxc584msk7jwbc58r2xn";
};
meta.homepage = "https://github.com/nvim-telescope/telescope-project.nvim/";
};
@@ -10077,12 +10077,12 @@ final: prev:
text-case-nvim = buildVimPlugin {
pname = "text-case.nvim";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "johmsalas";
repo = "text-case.nvim";
rev = "1680642717be198d5b16fc4de9b8080d77111270";
sha256 = "1hi1j2xnbqy0zmm06zfgwmikl6hphgkhbnhvdagap9h4nifpn9vz";
rev = "8f22e5fcbb8d591e04fa3e9780e2e16809278f9f";
sha256 = "0gpmfvj26kcm8ii9fhjgpwh5c571hy7xb253qq1vaak9cxa9m9yh";
};
meta.homepage = "https://github.com/johmsalas/text-case.nvim/";
};
@@ -10438,12 +10438,12 @@ final: prev:
unison = buildVimPlugin {
pname = "unison";
version = "2023-11-30";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "unisonweb";
repo = "unison";
rev = "d56c7c469b52448164d078e26802b2e3071b17b0";
sha256 = "1xflz3f5qm5injgzag7c4l2k4pflhv4knd5gpsxryzyxizlxkadl";
rev = "ebf9874e64a8c96041af727d2aa17033a8718f03";
sha256 = "1ndm54q3qg2hhcnh1bncjpmknczmngy9n6jgbr2wrxsvrsq8mb06";
};
meta.homepage = "https://github.com/unisonweb/unison/";
};
@@ -12888,12 +12888,12 @@ final: prev:
vim-just = buildVimPlugin {
pname = "vim-just";
version = "2023-11-16";
version = "2023-12-01";
src = fetchFromGitHub {
owner = "NoahTheDuke";
repo = "vim-just";
rev = "fda7259fc3b16af1d16e467c1482aac3bcc4df9a";
sha256 = "0rfj8hknzwjp59x51wf99j4ymda4gnc2ly1rl3185dw4p3v7n4ph";
rev = "90e299ec91fa8ff88f73150f824f77f86b0f867e";
sha256 = "03kk30lskwhq5d1jmyhfws74l0iayrvsk7v0ki93k099k1fv5n7m";
};
meta.homepage = "https://github.com/NoahTheDuke/vim-just/";
};
@@ -1921,12 +1921,12 @@
};
rbs = buildGrammar {
language = "rbs";
version = "0.0.0+rev=192eda4";
version = "0.0.0+rev=23c69a4";
src = fetchFromGitHub {
owner = "joker1007";
repo = "tree-sitter-rbs";
rev = "192eda46774fd0281cdd41d372d5b4da86148780";
hash = "sha256-Bxgh7K3j0oPvZw7JX3kXFmaEAEKefB0A9ATmrbvXrB8=";
rev = "23c69a4fa9803abc9d87b235ca88d52418250041";
hash = "sha256-tdxx+feI0UIHkk1eS5VrIuYvOZWpuWF3NEioqrnZ+30=";
};
meta.homepage = "https://github.com/joker1007/tree-sitter-rbs";
};
@@ -48,16 +48,16 @@
, serviceSupport ? true
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation {
pname = "monado";
version = "unstable-2023-08-22";
version = "unstable-2023-11-09";
src = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "monado";
repo = "monado";
rev = "4cc68f07c0f3c2fee57b01dde28a02e314d3bee6";
sha256 = "sha256-VibdOSA/b4RmwwwXrwhivuiukNK10YazYF/p+YnqRZ8=";
rev = "e983eecd73b1b91d2dfb356e1bc054e9202b2a7f";
hash = "sha256-a4ukfmJbDkhr7P3NMTfbuhXjyOta3WCc5gswX7KUAw0=";
};
nativeBuildInputs = [
@@ -135,16 +135,13 @@ stdenv.mkDerivation rec {
patches = [
# We don't have $HOME/.steam when building
./force-enable-steamvr_lh.patch
# A recent (as of August 2023) SteamVR Beta has upgraded a driver interface which is incompatible with Monado
./steamvr_lh-use-old-interface.patch
];
meta = with lib; {
description = "Open source XR runtime";
homepage = "https://monado.freedesktop.org/";
license = licenses.boost;
maintainers = with maintainers; [ expipiplus1 prusnak ];
maintainers = with maintainers; [ Scrumplex expipiplus1 prusnak ];
platforms = platforms.linux;
mainProgram = "monado-cli";
};
@@ -1,13 +0,0 @@
diff --git a/src/xrt/drivers/steamvr_lh/steamvr_lh.cpp b/src/xrt/drivers/steamvr_lh/steamvr_lh.cpp
index 24b69fd..5b3a5ca 100644
--- a/src/xrt/drivers/steamvr_lh/steamvr_lh.cpp
+++ b/src/xrt/drivers/steamvr_lh/steamvr_lh.cpp
@@ -138,7 +138,7 @@ Context::setup_hmd(const char *serial, vr::ITrackedDeviceServerDriver *driver)
vr::EVRInitError err = driver->Activate(0);
VERIFY(err == vr::VRInitError_None, std::to_string(err).c_str());
- auto *display = static_cast<vr::IVRDisplayComponent *>(driver->GetComponent(vr::IVRDisplayComponent_Version));
+ auto *display = static_cast<vr::IVRDisplayComponent *>(driver->GetComponent("IVRDisplayComponent_003"));
VERIFY(display, "IVRDisplayComponent is null");
#undef VERIFY
@@ -1,52 +0,0 @@
# From NUR https://github.com/nix-community/nur-combined/blob/6bddae47680482383b5769dd3aa7d82b88e6cbc8/repos/renesat/pkgs/normcap/default.nix
{
lib,
stdenv,
python3,
fetchFromGitHub,
tesseract4,
leptonica,
wl-clipboard
}:
python3.pkgs.buildPythonApplication rec {
pname = "normcap";
version = "0.4.4";
format = "pyproject";
src = fetchFromGitHub {
owner = "dynobo";
repo = "normcap";
rev = "v${version}";
hash = "sha256-dShtmoqS9TC3PHuwq24OEOhYfBHGhDCma8Du8QCkFuI=";
};
buildInputs = [
wl-clipboard
];
nativeBuildInputs = with python3.pkgs; [
poetry-core
];
propagatedBuildInputs = with python3.pkgs; [
tesseract4
leptonica
pyside6
# Test
toml
pytest-qt
];
postPatch = ''
substituteInPlace pyproject.toml --replace 'PySide6-Essentials = "6.5.1"' ""
'';
meta = with lib; {
description = "OCR powered screen-capture tool to capture information instead of images";
homepage = "https://dynobo.github.io/normcap/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ cafkafk ];
};
}
@@ -4,11 +4,11 @@
lib,
}: let
pname = "upscayl";
version = "2.9.1";
version = "2.9.4";
src = fetchurl {
url = "https://github.com/upscayl/upscayl/releases/download/v${version}/upscayl-${version}-linux.AppImage";
hash = "sha256-x7tNGWXrg4hkr4d5QK4Z/cOmGGdbWLJ/GIASZjmiL4w=";
hash = "sha256-H9/z0NIqGGJPipioWvv67vIFQ46RZr5+ycm3NQrO9ZE=";
};
appimageContents = appimageTools.extractType2 {
+2 -2
View File
@@ -35,13 +35,13 @@ in appimageTools.wrapType2 rec {
$out/share/applications/Chrysalis.desktop \
--replace 'Exec=Chrysalis' 'Exec=${pname}'
cp -r ${appimageContents}/usr/share/icons $out/share
install -Dm444 ${appimageContents}/usr/share/icons/hicolor/256x256/chrysalis.png -t $out/share/pixmaps
'';
meta = with lib; {
description = "A graphical configurator for Kaleidoscope-powered keyboards";
homepage = "https://github.com/keyboardio/Chrysalis";
license = licenses.gpl3;
license = licenses.gpl3Only;
maintainers = with maintainers; [ aw ];
platforms = [ "x86_64-linux" ];
mainProgram = pname;
+3 -3
View File
@@ -8,16 +8,16 @@
rustPlatform.buildRustPackage rec {
pname = "clipcat";
version = "0.8.0";
version = "0.9.0";
src = fetchFromGitHub {
owner = "xrelkd";
repo = pname;
rev = "v${version}";
hash = "sha256-2Sh8VakHeAotdw1kkpRgNtLj1gnH1Ei7OC9INF/lkZo=";
hash = "sha256-P/8C+Gfmcuy7DGbH8+y6ZYlRrmV5t9U/uiykZ4bERSU=";
};
cargoHash = "sha256-cgyvIu56Ab3h6tgyQxtGsR0UPxgL65vb7fUAc0lMj5Q=";
cargoHash = "sha256-r2J5ysvLl7hKXfW+BIF15vBygUkuwNj222P1AckUu0E=";
nativeBuildInputs = [
protobuf
+4 -4
View File
@@ -8,10 +8,10 @@ buildGoModule rec {
pname = "itd";
version = "1.1.0";
# https://gitea.arsenm.dev/Arsen6331/itd/tags
# https://gitea.elara.ws/Elara6331/itd/tags
src = fetchFromGitea {
domain = "gitea.arsenm.dev";
owner = "Arsen6331";
domain = "gitea.elara.ws";
owner = "Elara6331";
repo = "itd";
rev = "v${version}";
hash = "sha256-95/9Qy0HhrX+ORuv6g1T4/Eq1hf539lYG5fTkLeY6B0=";
@@ -34,7 +34,7 @@ buildGoModule rec {
meta = with lib; {
description = "itd is a daemon to interact with the PineTime running InfiniTime";
homepage = "https://gitea.arsenm.dev/Arsen6331/itd";
homepage = "https://gitea.elara.ws/Elara6331/itd";
license = licenses.gpl3Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ mindavi raphaelr ];
+3 -3
View File
@@ -2,14 +2,14 @@
rustPlatform.buildRustPackage rec {
pname = "lscolors";
version = "0.15.0";
version = "0.16.0";
src = fetchCrate {
inherit version pname;
sha256 = "sha256-C7aM9jlChRwPvYnBjLbV+sfbTHDVVi6evIR5PvT9jN4=";
hash = "sha256-gLtQIqdU6syTo+Z+P59kIpwEtiGCr/DOom9+jA8Uq98=";
};
cargoHash = "sha256-93FAEhl0WFXRq1SaoLRNDd/fy7NyDbeRFgIqUWAssQE=";
cargoHash = "sha256-OA9iYGwKElvRaKoyelH9w5ZphoLKrbk8VXwZ2NyLLQY=";
buildFeatures = [ "nu-ansi-term" ];
@@ -1,15 +1,15 @@
{
"packageVersion": "120.0-1",
"packageVersion": "120.0.1-1",
"source": {
"rev": "120.0-1",
"sha256": "1wms3kyimmfzl64rbphgap2sm87lwkl0pr24rx4rxf3px3bq97f3"
"rev": "120.0.1-1",
"sha256": "0kvfa97m7dq1b030d62zblpb445fkbgb2w19bckxwxv7mx36awy7"
},
"settings": {
"rev": "b587388bdbe63511c478cb8b5f82c2e80040414c",
"sha256": "03cw6wh7358pgld4qgs534pl2lnfvwc0xl2yyb3n3pyvmba6cyrp"
"rev": "9dac02778ebed3e2614da52c36b7cede45f4f602",
"sha256": "0flk6v50cyiaajzcz9gm1hig00vkw9xdbjd5rdxidrmhcqxy24vy"
},
"firefox": {
"version": "120.0",
"sha512": "31d5f9e1d4173280c8de6d9b8551bc6bba5e2c49b84f944f50d42002d5b39c2fb743bc130f26c81160388a102b8301b94a0a378ecdfa6f943860f971a860df8c"
"version": "120.0.1",
"sha512": "dd0e3eb234d58c39431d1f100834ef4bcc8cfb89ff471a37b948eda4dd3874b63b1979cda39a0db0dd3b4a579b5f09a7d2d1f39d26fd9f2b8d5635e4b8738b6c"
}
}
@@ -41,7 +41,7 @@
, at-spi2-core
, autoPatchelfHook
, wrapGAppsHook
, qt5
, qt6
, proprietaryCodecs ? false
, vivaldi-ffmpeg-codecs
}:
@@ -51,11 +51,11 @@ let
in
stdenv.mkDerivation rec {
pname = "opera";
version = "100.0.4815.47";
version = "105.0.4970.21";
src = fetchurl {
url = "${mirror}/${version}/linux/${pname}-stable_${version}_amd64.deb";
hash = "sha256-746imLXqxzf9zK2QEVRuWkLA6m+HHXBYZFUwTD0HEVc=";
hash = "sha256-fgbR7qAWKaZgxMeMo1/le8g1/zSoTl+5iIJeKl1Rc3Y=";
};
unpackPhase = "dpkg-deb -x $src .";
@@ -64,7 +64,7 @@ stdenv.mkDerivation rec {
dpkg
autoPatchelfHook
wrapGAppsHook
qt5.wrapQtAppsHook
qt6.wrapQtAppsHook
];
buildInputs = [
@@ -103,6 +103,7 @@ stdenv.mkDerivation rec {
nss
pango
stdenv.cc.cc.lib
qt6.qtbase
];
runtimeDependencies = [
@@ -128,6 +129,9 @@ stdenv.mkDerivation rec {
mkdir -p $out/bin
cp -r usr $out
cp -r usr/share $out/share
# we already using QT6, autopatchelf wants to patch this as well
rm $out/usr/lib/x86_64-linux-gnu/opera/libqt5_shim.so
ln -s $out/usr/bin/opera $out/bin/opera
'';
@@ -9,6 +9,7 @@
, gtk2-x11
, withGTK3 ? true
, gtk3
, libglvnd
, libXt
, libpulseaudio
, makeDesktopItem
@@ -18,7 +19,7 @@
stdenv.mkDerivation (finalAttrs: {
pname = "palemoon-bin";
version = "32.5.0";
version = "32.5.1";
src = fetchzip {
urls = [
@@ -26,9 +27,9 @@ stdenv.mkDerivation (finalAttrs: {
"https://rm-us.palemoon.org/release/palemoon-${finalAttrs.version}.linux-x86_64-gtk${if withGTK3 then "3" else "2"}.tar.xz"
];
hash = if withGTK3 then
"sha256-1MJ5K9Zc/BHeQwwlq3XyUV8XTFEpPytNyTnsDpE1tBI="
"sha256-hWqL/WoRRigw8cNeJImOQLM8hewyS3PYNGr2WYP+cMk="
else
"sha256-xXunZTqoc2A+ilosRUUluxDwewD3xwITF5nb5Lbyv7Y=";
"sha256-dlBnXP3WUgQ0spkLRowfzMcPArhGfpowsvwgCA+kvUA=";
};
preferLocalBuild = true;
@@ -147,6 +148,7 @@ stdenv.mkDerivation (finalAttrs: {
gappsWrapperArgs+=(
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
ffmpeg
libglvnd
libpulseaudio
]}"
)
@@ -8,13 +8,13 @@
buildGoModule rec {
pname = "bosh-cli";
version = "7.4.1";
version = "7.5.0";
src = fetchFromGitHub {
owner = "cloudfoundry";
repo = pname;
rev = "v${version}";
sha256 = "sha256-T8fPD0i15U/PzDOAVP0sifLYFHr76jD1o7q+nn+N0cY=";
sha256 = "sha256-LWfS722V0ubh4QaUNuGwrvFsVAzA9Hd5xLlDfTG0PBs=";
};
vendorHash = null;
@@ -2,16 +2,16 @@
buildGoModule rec {
pname = "eks-node-viewer";
version = "0.5.0";
version = "0.6.0";
src = fetchFromGitHub {
owner = "awslabs";
repo = pname;
rev = "v${version}";
sha256 = "sha256-kfX9BzARDWUOBIu67j60K38uwkRELxd/gXtEHOHAXS8=";
sha256 = "sha256-BK84hxbwZSJDO5WoyborJnVBS5pB69jTMU1csgiT0sw=";
};
vendorHash = "sha256-7axI7R8cTntc1IcOwVPmPj8MHeIvhbnkYKQdqu5fZOU=";
vendorHash = "sha256-EJAL5jNftA/g5H6WUMBJ98EyRp7QJ1C53EKr6GRz71I=";
ldflags = [
"-s"
@@ -2,16 +2,16 @@
buildGoModule rec {
pname = "dnscontrol";
version = "4.6.1";
version = "4.6.2";
src = fetchFromGitHub {
owner = "StackExchange";
repo = "dnscontrol";
rev = "v${version}";
sha256 = "sha256-FJxr3uq2f8jDG3g06SRO8sTIc6qHqSAOJVYHr4Ug1ag=";
hash = "sha256-FcEpUNFPwottpuIsO53voucKULTkWOdbDgEXKYLb9LQ=";
};
vendorHash = "sha256-O7uuUkS9kX0TdevSg1mrrPMVl4kMZW3rwoIVb/eaNiM=";
vendorHash = "sha256-cW6urAJ3H30HY4Q7JLWFsQebg6YhdGSBgICWMl85v9U=";
subPackages = [ "." ];
@@ -109,6 +109,7 @@ stdenv.mkDerivation rec {
description = "Desktop client for the Matrix protocol";
homepage = "https://github.com/Nheko-Reborn/nheko";
license = licenses.gpl3Plus;
mainProgram = "nheko";
maintainers = with maintainers; [ ekleog fpletz ];
platforms = platforms.all;
# Should be fixable if a higher clang version is used, see:
@@ -1,8 +1,8 @@
{ callPackage }: builtins.mapAttrs (pname: attrs: callPackage ./generic.nix (attrs // { inherit pname; })) {
signal-desktop = {
dir = "Signal";
version = "6.39.1";
hash = "sha256-dDbUpxXpQg1SoVyYO33Nczqf+WmWDPNE6cmw792wjGY=";
version = "6.40.0";
hash = "sha256-vyXHlycPSyEyv938IKzGM6pdERHHerx2CLY/U+WMrH4=";
};
signal-desktop-beta = {
dir = "Signal Beta";
@@ -2,14 +2,14 @@
stdenv.mkDerivation rec {
pname = "libutp";
version = "unstable-2023-10-16";
version = "unstable-2023-11-14";
src = fetchFromGitHub {
# Use transmission fork from post-3.4-transmission branch
owner = "transmission";
repo = pname;
rev = "2589200eac82fc91b65979680e4b3c026dff0278";
hash = "sha256-wsDqdbMWVm3ubTbg5XClEWutJz1irSIazVLFeCyAAL4=";
rev = "52645d6d0fb16009e11d2f84469d2e43b7b6b48a";
hash = "sha256-pcPVkDEEtriN9zlEcVFKwKhhh51wpJGxYlcu7bH1RkI=";
};
nativeBuildInputs = [ cmake ];
@@ -5,6 +5,7 @@
, libjpeg, libredirect, tzdata, cacert, systemd, libcxxabi, libcxx, e2fsprogs, symlinkJoin
, libpulseaudio, pcsclite, glib-networking, llvmPackages_12, opencv4
, libfaketime
, libinput, libcap, libjson, libsecret, libcanberra-gtk3
, homepage, version, prefix, hash
@@ -38,7 +39,7 @@ stdenv.mkDerivation rec {
${homepage}
(if you do not find version ${version} there, try at
https://www.citrix.com/downloads/workspace-app/
https://www.citrix.com/downloads/workspace-app/)
Once you have downloaded the file, please use the following command and re-run the
installation:
@@ -80,11 +81,16 @@ stdenv.mkDerivation rec {
gtk_engines
heimdal
krb5
libcap
libcanberra-gtk3
libcxx
libcxxabi
libinput
libjpeg
libjson
libpng12
libpulseaudio
libsecret
libsoup
libvorbis
libxml2
@@ -119,6 +125,8 @@ stdenv.mkDerivation rec {
xorg.libXrender
xorg.libXtst
xorg.libxcb
xorg.xprop
xorg.xdpyinfo
];
installPhase = let
@@ -33,6 +33,17 @@ let
x86hash = "4a7da238286ae28d7baf0fefa1e7e09d077c8bc56c2bf7bec00da42c331bee59";
x64suffix = "17";
x86suffix = "17";
homepage = "https://www.citrix.com/downloads/workspace-app/legacy-workspace-app-for-linux/workspace-app-for-linux-latest21.html";
};
"23.09.0" = {
major = "23";
minor = "9";
patch = "0";
x64hash = "7b06339654aa27258d6dfa922828b43256e780b282d07109f452246c7aa27514";
x86hash = "95436fb289602cf31c65b7df89da145fc170233cb2e758a2f11116f15b57d382";
x64suffix = "24";
x86suffix = "24";
homepage = "https://www.citrix.com/downloads/workspace-app/linux/workspace-app-for-linux-latest.html";
};
@@ -1,13 +1,18 @@
{ callPackage, fetchurl, lib, stdenv
, ocamlPackages, coqPackages, rubber, hevea, emacs }:
, ocamlPackages, coqPackages, rubber, hevea, emacs
, version ? "1.7.0"
}:
stdenv.mkDerivation rec {
pname = "why3";
version = "1.6.0";
inherit version;
src = fetchurl {
url = "https://why3.gitlabpages.inria.fr/releases/${pname}-${version}.tar.gz";
hash = "sha256-hFvM6kHScaCtcHCc6Vezl9CR7BFbiKPoTEh7kj0ZJxw=";
hash = {
"1.7.0" = "sha256-rygrjzuJVukOvpuXTG/yeoEP98ZFkLQHObgc3My1PVY=";
"1.6.0" = "sha256-hFvM6kHScaCtcHCc6Vezl9CR7BFbiKPoTEh7kj0ZJxw=";
}."${version}";
};
strictDeps = true;
@@ -20,14 +20,14 @@ in
stdenv.mkDerivation rec {
pname = "simgrid";
version = "3.34";
version = "3.35";
src = fetchFromGitLab {
domain = "framagit.org";
owner = pname;
repo = pname;
rev = "v${version}";
sha256 = "sha256-EVTpW9jD1h8T2KRlDIqptKS6Wv1dVDfyJbXxrpsgmoo=";
sha256 = "sha256-WaFANZiPfiN/utfNZbwyH5mxgJNWafPMCcL863V8w0g=";
};
propagatedBuildInputs = [ boost ];
@@ -1,122 +1,184 @@
{ cmake
{ cereal_1_3_2
, cmake
, fetchFromGitHub
, fetchFromGitLab
, git
, glfw
, glm
, lib
, libGL
, spdlog
, stdenv
, xorg
}:
let
# See https://github.com/deepmind/mujoco/blob/c9246e1f5006379d599e0bcddf159a8616d31441/cmake/MujocoDependencies.cmake#L17-L55
abseil-cpp = fetchFromGitHub {
owner = "abseil";
repo = "abseil-cpp";
rev = "c2435f8342c2d0ed8101cb43adfd605fdc52dca2";
hash = "sha256-PLoI7ix+reUqkZ947kWzls8lujYqWXk9A9a55UcfahI=";
};
benchmark = fetchFromGitHub {
owner = "google";
repo = "benchmark";
rev = "2dd015dfef425c866d9a43f2c67d8b52d709acb6";
hash = "sha256-pUW9YVaujs/y00/SiPqDgK4wvVsaM7QUp/65k0t7Yr0=";
};
ccd = fetchFromGitHub {
owner = "danfis";
repo = "libccd";
rev = "7931e764a19ef6b21b443376c699bbc9c6d4fba8";
hash = "sha256-TIZkmqQXa0+bSWpqffIgaBela0/INNsX9LPM026x1Wk=";
};
eigen3 = fetchFromGitLab {
owner = "libeigen";
repo = "eigen";
rev = "211c5dfc6741a5570ad007983c113ef4d144f9f3";
hash = "sha256-oT/h8QkL0vwaflh46Zsnu9Db1b65AP6p//nAga8M5jI=";
};
googletest = fetchFromGitHub {
owner = "google";
repo = "googletest";
rev = "b796f7d44681514f58a683a3a71ff17c94edb0c1";
hash = "sha256-LVLEn+e7c8013pwiLzJiiIObyrlbBHYaioO/SWbItPQ=";
};
lodepng = fetchFromGitHub {
owner = "lvandeve";
repo = "lodepng";
rev = "b4ed2cd7ecf61d29076169b49199371456d4f90b";
hash = "sha256-5cCkdj/izP4e99BKfs/Mnwu9aatYXjlyxzzYiMD/y1M=";
};
qhull = fetchFromGitHub {
owner = "qhull";
repo = "qhull";
rev = "0c8fc90d2037588024d9964515c1e684f6007ecc";
hash = "sha256-Ptzxad3ewmKJbbcmrBT+os4b4SR976zlCG9F0nq0x94=";
};
tinyobjloader = fetchFromGitHub {
owner = "tinyobjloader";
repo = "tinyobjloader";
rev = "1421a10d6ed9742f5b2c1766d22faa6cfbc56248";
hash = "sha256-9z2Ne/WPCiXkQpT8Cun/pSGUwgClYH+kQ6Dx1JvW6w0=";
};
tinyxml2 = fetchFromGitHub {
owner = "leethomason";
repo = "tinyxml2";
rev = "9a89766acc42ddfa9e7133c7d81a5bda108a0ade";
hash = "sha256-YGAe4+Ttv/xeou+9FoJjmQCKgzupTYdDhd+gzvtz/88=";
pin = {
# See https://github.com/google-deepmind/mujoco/blob/3.0.0/cmake/MujocoDependencies.cmake#L17-L64
abseil-cpp = fetchFromGitHub {
owner = "abseil";
repo = "abseil-cpp";
rev = "fb3621f4f897824c0dbe0615fa94543df6192f30";
hash = "sha256-uNGrTNg5G5xFGtc+BSWE389x0tQ/KxJQLHfebNWas/k=";
};
benchmark = fetchFromGitHub {
owner = "google";
repo = "benchmark";
rev = "344117638c8ff7e239044fd0fa7085839fc03021";
hash = "sha256-gztnxui9Fe/FTieMjdvfJjWHjkImtlsHn6fM1FruyME=";
};
ccd = fetchFromGitHub {
owner = "danfis";
repo = "libccd";
rev = "7931e764a19ef6b21b443376c699bbc9c6d4fba8";
hash = "sha256-TIZkmqQXa0+bSWpqffIgaBela0/INNsX9LPM026x1Wk=";
};
eigen3 = fetchFromGitLab {
owner = "libeigen";
repo = "eigen";
rev = "e8515f78ac098329ab9f8cab21c87caede090a3f";
hash = "sha256-HXKtFJsKGpug+wNPjYynTuyaG0igo3oG4rFQktveh1g=";
};
googletest = fetchFromGitHub {
owner = "google";
repo = "googletest";
rev = "f8d7d77c06936315286eb55f8de22cd23c188571";
hash = "sha256-t0RchAHTJbuI5YW4uyBPykTvcjy90JW9AOPNjIhwh6U=";
};
lodepng = fetchFromGitHub {
owner = "lvandeve";
repo = "lodepng";
rev = "b4ed2cd7ecf61d29076169b49199371456d4f90b";
hash = "sha256-5cCkdj/izP4e99BKfs/Mnwu9aatYXjlyxzzYiMD/y1M=";
};
qhull = fetchFromGitHub {
owner = "qhull";
repo = "qhull";
rev = "0c8fc90d2037588024d9964515c1e684f6007ecc";
hash = "sha256-Ptzxad3ewmKJbbcmrBT+os4b4SR976zlCG9F0nq0x94=";
};
tinyobjloader = fetchFromGitHub {
owner = "tinyobjloader";
repo = "tinyobjloader";
rev = "1421a10d6ed9742f5b2c1766d22faa6cfbc56248";
hash = "sha256-9z2Ne/WPCiXkQpT8Cun/pSGUwgClYH+kQ6Dx1JvW6w0=";
};
tinyxml2 = fetchFromGitHub {
owner = "leethomason";
repo = "tinyxml2";
rev = "9a89766acc42ddfa9e7133c7d81a5bda108a0ade";
hash = "sha256-YGAe4+Ttv/xeou+9FoJjmQCKgzupTYdDhd+gzvtz/88=";
};
marchingcubecpp = fetchFromGitHub {
owner = "aparis69";
repo = "MarchingCubeCpp";
rev = "5b79e5d6bded086a0abe276a4b5a69fc17ae9bf1";
hash = "sha256-L0DH1GJZ/3vatQAU/KZj/2xTKE6Fwcw9eQYzLdqX2N4=";
};
tmd = stdenv.mkDerivation rec {
name = "TriangleMeshDistance";
src = fetchFromGitHub {
owner = "InteractiveComputerGraphics";
repo = name;
rev = "e55a15c20551f36242fd6368df099a99de71d43a";
hash = "sha256-vj6TMMT8mp7ciLa5nzVAhMWPcAHXq+ZwHlWsRA3uCmg=";
};
installPhase = ''
mkdir -p $out/include/tmd
cp ${name}/include/tmd/${name}.h $out/include/tmd/
'';
};
sdflib = stdenv.mkDerivation rec {
name = "SdfLib";
src = fetchFromGitHub {
owner = "UPC-ViRVIG";
repo = name;
rev = "7c49cfba9bbec763b5d0f7b90b26555f3dde8088";
hash = "sha256-5bnQ3rHH9Pw1jRVpZpamFnhIJHWnGm6krgZgIBqNtVg=";
};
patches = [ ./sdflib-system-deps.patch ];
cmakeFlags = [
"-DSDFLIB_USE_ASSIMP=OFF"
"-DSDFLIB_USE_OPENMP=OFF"
"-DSDFLIB_USE_ENOKI=OFF"
"-DSDFLIB_USE_SYSTEM_GLM=ON"
"-DSDFLIB_USE_SYSTEM_SPDLOG=ON"
"-DSDFLIB_USE_SYSTEM_CEREAL=ON"
"-DSDFLIB_USE_SYSTEM_TRIANGLEMESHDISTANCE=ON"
];
nativeBuildInputs = [ cmake ];
buildInputs = [
pin.tmd
# Mainline. The otherwise pinned glm realease from 2018 does
# not build due to test failures and missing files.
glm
spdlog
cereal_1_3_2
];
};
};
# See https://github.com/deepmind/mujoco/blob/c9246e1f5006379d599e0bcddf159a8616d31441/simulate/cmake/SimulateDependencies.cmake#L32-L35
glfw3 = fetchFromGitHub {
owner = "glfw";
repo = "glfw";
rev = "7482de6071d21db77a7236155da44c172a7f6c9e";
hash = "sha256-4+H0IXjAwbL5mAWfsIVhW0BSJhcWjkQx4j2TrzZ3aIo=";
};
in
stdenv.mkDerivation rec {
in stdenv.mkDerivation rec {
pname = "mujoco";
version = "2.3.7";
version = "3.0.1";
src = fetchFromGitHub {
owner = "deepmind";
owner = "google-deepmind";
repo = pname;
rev = version;
hash = "sha256-LgpA+iPGqciHuWBSD6/7yvZ7p+vo48ZYKjjrDZSnAwE=";
hash = "sha256-UXE+7KDti8RarpoJoo9Ei3TgW/Qdnj3ASRo8uTWhGrU=";
};
patches = [ ./dependencies.patch ];
patches = [ ./mujoco-system-deps-dont-fetch.patch ];
nativeBuildInputs = [ cmake git ];
nativeBuildInputs = [ cmake ];
buildInputs = [
libGL
xorg.libX11
xorg.libXcursor
xorg.libXext
xorg.libXi
xorg.libXinerama
xorg.libXrandr
pin.sdflib
glm
# non-numerical
spdlog
cereal_1_3_2
glfw
];
cmakeFlags = [
"-DMUJOCO_USE_SYSTEM_sdflib=ON"
"-DMUJOCO_SIMULATE_USE_SYSTEM_GLFW=ON"
"-DMUJOCO_SAMPLES_USE_SYSTEM_GLFW=ON"
];
# Move things into place so that cmake doesn't try downloading dependencies.
preConfigure = ''
mkdir -p build/_deps
ln -s ${abseil-cpp} build/_deps/abseil-cpp-src
ln -s ${benchmark} build/_deps/benchmark-src
ln -s ${ccd} build/_deps/ccd-src
ln -s ${eigen3} build/_deps/eigen3-src
ln -s ${glfw3} build/_deps/glfw3-src
ln -s ${googletest} build/_deps/googletest-src
ln -s ${lodepng} build/_deps/lodepng-src
ln -s ${qhull} build/_deps/qhull-src
ln -s ${tinyobjloader} build/_deps/tinyobjloader-src
ln -s ${tinyxml2} build/_deps/tinyxml2-src
ln -s ${pin.abseil-cpp} build/_deps/abseil-cpp-src
ln -s ${pin.benchmark} build/_deps/benchmark-src
ln -s ${pin.ccd} build/_deps/ccd-src
ln -s ${pin.eigen3} build/_deps/eigen3-src
ln -s ${pin.googletest} build/_deps/googletest-src
ln -s ${pin.lodepng} build/_deps/lodepng-src
ln -s ${pin.qhull} build/_deps/qhull-src
ln -s ${pin.tinyobjloader} build/_deps/tinyobjloader-src
ln -s ${pin.tinyxml2} build/_deps/tinyxml2-src
ln -s ${pin.marchingcubecpp} build/_deps/marchingcubecpp-src
'';
passthru.pin = { inherit (pin) lodepng eigen3 abseil-cpp; };
meta = with lib; {
description = "Multi-Joint dynamics with Contact. A general purpose physics simulator.";
homepage = "https://mujoco.org/";
license = licenses.asl20;
maintainers = with maintainers; [ samuela ];
maintainers = with maintainers; [ samuela tmplt ];
};
}
@@ -1,114 +0,0 @@
diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake
index 3e322ea..980aace 100644
--- a/cmake/MujocoDependencies.cmake
+++ b/cmake/MujocoDependencies.cmake
@@ -87,8 +87,6 @@ set(BUILD_SHARED_LIBS
if(NOT TARGET lodepng)
FetchContent_Declare(
lodepng
- GIT_REPOSITORY https://github.com/lvandeve/lodepng.git
- GIT_TAG ${MUJOCO_DEP_VERSION_lodepng}
)
FetchContent_GetProperties(lodepng)
@@ -127,10 +125,6 @@ findorfetch(
qhull
LIBRARY_NAME
qhull
- GIT_REPO
- https://github.com/qhull/qhull.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_qhull}
TARGETS
qhull
EXCLUDE_FROM_ALL
@@ -151,10 +145,6 @@ findorfetch(
tinyxml2
LIBRARY_NAME
tinyxml2
- GIT_REPO
- https://github.com/leethomason/tinyxml2.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_tinyxml2}
TARGETS
tinyxml2
EXCLUDE_FROM_ALL
@@ -169,10 +159,6 @@ findorfetch(
tinyobjloader
LIBRARY_NAME
tinyobjloader
- GIT_REPO
- https://github.com/tinyobjloader/tinyobjloader.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_tinyobjloader}
TARGETS
tinyobjloader
EXCLUDE_FROM_ALL
@@ -187,10 +173,6 @@ findorfetch(
ccd
LIBRARY_NAME
ccd
- GIT_REPO
- https://github.com/danfis/libccd.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_ccd}
TARGETS
ccd
EXCLUDE_FROM_ALL
@@ -227,10 +209,6 @@ if(MUJOCO_BUILD_TESTS)
absl
LIBRARY_NAME
abseil-cpp
- GIT_REPO
- https://github.com/abseil/abseil-cpp.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_abseil}
TARGETS
absl::core_headers
EXCLUDE_FROM_ALL
@@ -254,10 +232,6 @@ if(MUJOCO_BUILD_TESTS)
GTest
LIBRARY_NAME
googletest
- GIT_REPO
- https://github.com/google/googletest.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_gtest}
TARGETS
gtest
gmock
@@ -288,10 +262,6 @@ if(MUJOCO_BUILD_TESTS)
benchmark
LIBRARY_NAME
benchmark
- GIT_REPO
- https://github.com/google/benchmark.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_benchmark}
TARGETS
benchmark::benchmark
benchmark::benchmark_main
@@ -308,8 +278,6 @@ if(MUJOCO_TEST_PYTHON_UTIL)
FetchContent_Declare(
Eigen3
- GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
- GIT_TAG ${MUJOCO_DEP_VERSION_Eigen3}
)
FetchContent_GetProperties(Eigen3)
diff --git a/simulate/cmake/SimulateDependencies.cmake b/simulate/cmake/SimulateDependencies.cmake
index fa539c2..5985d5a 100644
--- a/simulate/cmake/SimulateDependencies.cmake
+++ b/simulate/cmake/SimulateDependencies.cmake
@@ -81,10 +81,6 @@ findorfetch(
glfw3
LIBRARY_NAME
glfw3
- GIT_REPO
- https://github.com/glfw/glfw.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_glfw3}
TARGETS
glfw
EXCLUDE_FROM_ALL
@@ -0,0 +1,538 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 285250b..32d03e3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -92,7 +92,7 @@ add_subdirectory(src/render)
add_subdirectory(src/thread)
add_subdirectory(src/ui)
-target_compile_definitions(mujoco PRIVATE _GNU_SOURCE CCD_STATIC_DEFINE MUJOCO_DLL_EXPORTS -DMC_IMPLEM_ENABLE)
+target_compile_definitions(mujoco PRIVATE _GNU_SOURCE MUJOCO_DLL_EXPORTS -DMC_IMPLEM_ENABLE)
if(MUJOCO_ENABLE_AVX_INTRINSICS)
target_compile_definitions(mujoco PUBLIC mjUSEPLATFORMSIMD)
endif()
@@ -117,7 +117,7 @@ target_link_libraries(
lodepng
qhullstatic_r
tinyobjloader
- tinyxml2
+ tinyxml2::tinyxml2
)
set_target_properties(
diff --git a/cmake/MujocoDependencies.cmake b/cmake/MujocoDependencies.cmake
index 4e3e2c8..f6143d9 100644
--- a/cmake/MujocoDependencies.cmake
+++ b/cmake/MujocoDependencies.cmake
@@ -90,153 +90,203 @@ set(BUILD_SHARED_LIBS
CACHE INTERNAL "Build SHARED libraries"
)
+
if(NOT TARGET lodepng)
- FetchContent_Declare(
+ fetchcontent_declare(
lodepng
- GIT_REPOSITORY https://github.com/lvandeve/lodepng.git
- GIT_TAG ${MUJOCO_DEP_VERSION_lodepng}
)
+endif()
+
+if(NOT TARGET lodepng)
+ if(NOT MUJOCO_USE_SYSTEM_lodepng)
+ fetchcontent_declare(
+ lodepng
+ GIT_REPOSITORY https://github.com/lvandeve/lodepng.git
+ GIT_TAG ${MUJOCO_DEP_VERSION_lodepng}
+ )
- FetchContent_GetProperties(lodepng)
- if(NOT lodepng_POPULATED)
- FetchContent_Populate(lodepng)
- # This is not a CMake project.
- set(LODEPNG_SRCS ${lodepng_SOURCE_DIR}/lodepng.cpp)
- set(LODEPNG_HEADERS ${lodepng_SOURCE_DIR}/lodepng.h)
- add_library(lodepng STATIC ${LODEPNG_HEADERS} ${LODEPNG_SRCS})
- target_compile_options(lodepng PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
- target_link_options(lodepng PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
- target_include_directories(lodepng PUBLIC ${lodepng_SOURCE_DIR})
+ fetchcontent_getproperties(lodepng)
+ if(NOT lodepng_POPULATED)
+ fetchcontent_populate(lodepng)
+ # This is not a CMake project.
+ set(LODEPNG_SRCS ${lodepng_SOURCE_DIR}/lodepng.cpp)
+ set(LODEPNG_HEADERS ${lodepng_SOURCE_DIR}/lodepng.h)
+ add_library(lodepng STATIC ${LODEPNG_HEADERS} ${LODEPNG_SRCS})
+ target_compile_options(lodepng PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
+ target_link_options(lodepng PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
+ target_include_directories(lodepng PUBLIC ${lodepng_SOURCE_DIR})
+ endif()
+ else()
+ find_package(lodepng REQUIRED)
endif()
endif()
if(NOT TARGET marchingcubecpp)
- FetchContent_Declare(
+ fetchcontent_declare(
marchingcubecpp
- GIT_REPOSITORY https://github.com/aparis69/MarchingCubeCpp.git
- GIT_TAG ${MUJOCO_DEP_VERSION_MarchingCubeCpp}
)
- FetchContent_GetProperties(marchingcubecpp)
+ fetchcontent_getproperties(marchingcubecpp)
if(NOT marchingcubecpp_POPULATED)
- FetchContent_Populate(marchingcubecpp)
+ fetchcontent_populate(marchingcubecpp)
include_directories(${marchingcubecpp_SOURCE_DIR})
endif()
endif()
+option(MUJOCO_USE_SYSTEM_qhull "Use installed qhull version." OFF)
+mark_as_advanced(MUJOCO_USE_SYSTEM_qhull)
+
set(QHULL_ENABLE_TESTING OFF)
findorfetch(
USE_SYSTEM_PACKAGE
- OFF
+ ${MUJOCO_USE_SYSTEM_qhull}
PACKAGE_NAME
- qhull
+ Qhull
LIBRARY_NAME
qhull
- GIT_REPO
- https://github.com/qhull/qhull.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_qhull}
TARGETS
qhull
EXCLUDE_FROM_ALL
)
-# MuJoCo includes a file from libqhull_r which is not exported by the qhull include directories.
-# Add it to the target.
-target_include_directories(
- qhullstatic_r INTERFACE $<BUILD_INTERFACE:${qhull_SOURCE_DIR}/src/libqhull_r>
-)
-target_compile_options(qhullstatic_r PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
-target_link_options(qhullstatic_r PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
+
+if(NOT MUJOCO_USE_SYSTEM_qhull)
+ # MuJoCo includes a file from libqhull_r which is not exported by the qhull include directories.
+ # Add it to the target.
+ target_include_directories(
+ qhullstatic_r INTERFACE $<BUILD_INTERFACE:${qhull_SOURCE_DIR}/src/libqhull_r>
+ )
+ target_compile_options(qhullstatic_r PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
+ target_link_options(qhullstatic_r PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
+else()
+ if(NOT TARGET qhullstatic_r)
+ add_library(qhullstatic_r INTERFACE)
+ set_target_properties(qhullstatic_r PROPERTIES INTERFACE_LINK_LIBRARIES Qhull::qhull_r)
+
+ # Workaround as headers are installed in <prefix>/include/libqhull_r/something.h
+ # but mujoco include them as #include <something.h>
+ get_property(qhull_include_dirs TARGET Qhull::qhull_r PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
+ foreach(qhull_include_dir IN LISTS qhull_include_dirs)
+ target_include_directories(qhullstatic_r INTERFACE ${qhull_include_dirs}/libqhull_r)
+ endforeach()
+ target_include_directories(qhullstatic_r INTERFACE )
+ endif()
+endif()
+
+option(MUJOCO_USE_SYSTEM_tinyxml2 "Use installed tinyxml2 version." OFF)
+mark_as_advanced(MUJOCO_USE_SYSTEM_tinyxml2)
set(tinyxml2_BUILD_TESTING OFF)
findorfetch(
USE_SYSTEM_PACKAGE
- OFF
+ ${MUJOCO_USE_SYSTEM_tinyxml2}
PACKAGE_NAME
tinyxml2
LIBRARY_NAME
tinyxml2
- GIT_REPO
- https://github.com/leethomason/tinyxml2.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_tinyxml2}
TARGETS
- tinyxml2
+ tinyxml2::tinyxml2
EXCLUDE_FROM_ALL
)
-target_compile_options(tinyxml2 PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
-target_link_options(tinyxml2 PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
+
+if(NOT MUJOCO_USE_SYSTEM_tinyxml2)
+ target_compile_options(tinyxml2 PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
+ target_link_options(tinyxml2 PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
+endif()
+
+option(MUJOCO_USE_SYSTEM_tinyobjloader "Use installed tinyobjloader version." OFF)
+mark_as_advanced(MUJOCO_USE_SYSTEM_tinyobjloader)
findorfetch(
USE_SYSTEM_PACKAGE
- OFF
+ ${MUJOCO_USE_SYSTEM_tinyobjloader}
PACKAGE_NAME
tinyobjloader
LIBRARY_NAME
tinyobjloader
- GIT_REPO
- https://github.com/tinyobjloader/tinyobjloader.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_tinyobjloader}
TARGETS
tinyobjloader
EXCLUDE_FROM_ALL
)
+if(MUJOCO_USE_SYSTEM_tinyobjloader)
+ # As of tinyobjloader v2.0.0rc10, the tinyobjloader target is named tinyobjloader in the build,
+ # but tinyobjloader::tinyobjloader when it is installed. To deal with this, if tinyobjloader is
+ # found in the system, we create an ALIAS
+ # The following is equivalent to add_library(tinyobjloader ALIAS tinyobjloader::tinyobjloader),
+ # but compatible with CMake 3.16 . Once the minimum CMake is bumped to CMake 3.18, we can use
+ # the simpler version
+ add_library(tinyobjloader INTERFACE IMPORTED)
+ set_target_properties(tinyobjloader PROPERTIES INTERFACE_LINK_LIBRARIES tinyobjloader::tinyobjloader)
+endif()
+
+option(MUJOCO_USE_SYSTEM_sdflib "Use installed sdflib version." OFF)
+mark_as_advanced(MUJOCO_USE_SYSTEM_sdflib)
+
option(SDFLIB_USE_ASSIMP OFF)
option(SDFLIB_USE_OPENMP OFF)
option(SDFLIB_USE_ENOKI OFF)
+
findorfetch(
USE_SYSTEM_PACKAGE
- OFF
+ ${MUJOCO_USE_SYSTEM_sdflib}
PACKAGE_NAME
- sdflib
+ SdfLib
LIBRARY_NAME
sdflib
- GIT_REPO
- https://github.com/UPC-ViRVIG/SdfLib.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_sdflib}
TARGETS
- SdfLib
+ SdfLib::SdfLib
EXCLUDE_FROM_ALL
)
-target_compile_options(SdfLib PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
-target_link_options(SdfLib PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
+
+if(NOT MUJOCO_USE_SYSTEM_sdflib)
+ target_compile_options(SdfLib PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
+ target_link_options(SdfLib PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
+endif()
+
+option(MUJOCO_USE_SYSTEM_ccd "Use installed ccd version." OFF)
+mark_as_advanced(MUJOCO_USE_SYSTEM_ccd)
set(ENABLE_DOUBLE_PRECISION ON)
set(CCD_HIDE_ALL_SYMBOLS ON)
findorfetch(
USE_SYSTEM_PACKAGE
- OFF
+ ${MUJOCO_USE_SYSTEM_ccd}
PACKAGE_NAME
ccd
LIBRARY_NAME
ccd
- GIT_REPO
- https://github.com/danfis/libccd.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_ccd}
TARGETS
ccd
EXCLUDE_FROM_ALL
)
-target_compile_options(ccd PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
-target_link_options(ccd PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
-
-# libCCD has an unconditional `#define _CRT_SECURE_NO_WARNINGS` on Windows.
-# TODO(stunya): Remove this after https://github.com/danfis/libccd/pull/77 is merged.
-if(WIN32)
- if(MSVC)
- # C4005 is the MSVC equivalent of -Wmacro-redefined.
- target_compile_options(ccd PRIVATE /wd4005)
- else()
- target_compile_options(ccd PRIVATE -Wno-macro-redefined)
+
+if(NOT MUJOCO_USE_SYSTEM_ccd)
+ target_compile_options(ccd PRIVATE ${MUJOCO_MACOS_COMPILE_OPTIONS})
+ target_link_options(ccd PRIVATE ${MUJOCO_MACOS_LINK_OPTIONS})
+ # This is necessary to ensure that the any library that consumes the ccd
+ # compiled internally by MuJoCo (as static library) has CCD_EXPORT correctly
+ # defined as an empty string. For ccd itself, this is ensured by the variable
+ # CCD_HIDE_ALL_SYMBOLS set to ON before the call to findorfetch
+ # See https://github.com/danfis/libccd/pull/79
+ target_compile_definitions(ccd INTERFACE CCD_STATIC_DEFINE)
+
+ # libCCD has an unconditional `#define _CRT_SECURE_NO_WARNINGS` on Windows.
+ # TODO(stunya): Remove this after https://github.com/danfis/libccd/pull/77 is merged.
+ if(WIN32)
+ if(MSVC)
+ # C4005 is the MSVC equivalent of -Wmacro-redefined.
+ target_compile_options(ccd PRIVATE /wd4005)
+ else()
+ target_compile_options(ccd PRIVATE -Wno-macro-redefined)
+ endif()
endif()
endif()
if(MUJOCO_BUILD_TESTS)
+ option(MUJOCO_USE_SYSTEM_abseil "Use installed abseil version." OFF)
+ mark_as_advanced(MUJOCO_USE_SYSTEM_abseil)
+
set(ABSL_PROPAGATE_CXX_STD ON)
# This specific version of Abseil does not have the following variable. We need to work with BUILD_TESTING
@@ -249,15 +299,11 @@ if(MUJOCO_BUILD_TESTS)
set(ABSL_BUILD_TESTING OFF)
findorfetch(
USE_SYSTEM_PACKAGE
- OFF
+ ${MUJOCO_USE_SYSTEM_abseil}
PACKAGE_NAME
absl
LIBRARY_NAME
abseil-cpp
- GIT_REPO
- https://github.com/abseil/abseil-cpp.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_abseil}
TARGETS
absl::core_headers
EXCLUDE_FROM_ALL
@@ -268,6 +314,9 @@ if(MUJOCO_BUILD_TESTS)
CACHE BOOL "Build tests." FORCE
)
+ option(MUJOCO_USE_SYSTEM_gtest "Use installed gtest version." OFF)
+ mark_as_advanced(MUJOCO_USE_SYSTEM_gtest)
+
# Avoid linking errors on Windows by dynamically linking to the C runtime.
set(gtest_force_shared_crt
ON
@@ -276,22 +325,20 @@ if(MUJOCO_BUILD_TESTS)
findorfetch(
USE_SYSTEM_PACKAGE
- OFF
+ ${MUJOCO_USE_SYSTEM_gtest}
PACKAGE_NAME
GTest
LIBRARY_NAME
googletest
- GIT_REPO
- https://github.com/google/googletest.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_gtest}
TARGETS
- gtest
- gmock
- gtest_main
+ GTest::gmock
+ GTest::gtest_main
EXCLUDE_FROM_ALL
)
+ option(MUJOCO_USE_SYSTEM_benchmark "Use installed benchmark version." OFF)
+ mark_as_advanced(MUJOCO_USE_SYSTEM_benchmark)
+
set(BENCHMARK_EXTRA_FETCH_ARGS "")
if(WIN32 AND NOT MSVC)
set(BENCHMARK_EXTRA_FETCH_ARGS
@@ -310,15 +357,11 @@ if(MUJOCO_BUILD_TESTS)
findorfetch(
USE_SYSTEM_PACKAGE
- OFF
+ ${MUJOCO_USE_SYSTEM_benchmark}
PACKAGE_NAME
benchmark
LIBRARY_NAME
benchmark
- GIT_REPO
- https://github.com/google/benchmark.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_benchmark}
TARGETS
benchmark::benchmark
benchmark::benchmark_main
@@ -328,26 +371,42 @@ if(MUJOCO_BUILD_TESTS)
endif()
if(MUJOCO_TEST_PYTHON_UTIL)
+ option(MUJOCO_USE_SYSTEM_Eigen3 "Use installed Eigen3 version." OFF)
+ mark_as_advanced(MUJOCO_USE_SYSTEM_Eigen3)
+
add_compile_definitions(EIGEN_MPL2_ONLY)
- if(NOT TARGET eigen)
- # Support new IN_LIST if() operator.
- set(CMAKE_POLICY_DEFAULT_CMP0057 NEW)
+ if(NOT TARGET Eigen3::Eigen)
+ if(NOT MUJOCO_USE_SYSTEM_Eigen3)
+ # Support new IN_LIST if() operator.
+ set(CMAKE_POLICY_DEFAULT_CMP0057 NEW)
+ endif()
- FetchContent_Declare(
+ fetchcontent_declare(
Eigen3
- GIT_REPOSITORY https://gitlab.com/libeigen/eigen.git
- GIT_TAG ${MUJOCO_DEP_VERSION_Eigen3}
)
- FetchContent_GetProperties(Eigen3)
+ fetchcontent_getproperties(Eigen3)
if(NOT Eigen3_POPULATED)
- FetchContent_Populate(Eigen3)
+ fetchcontent_populate(Eigen3)
# Mark the library as IMPORTED as a workaround for https://gitlab.kitware.com/cmake/cmake/-/issues/15415
add_library(Eigen3::Eigen INTERFACE IMPORTED)
set_target_properties(
Eigen3::Eigen PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${eigen3_SOURCE_DIR}"
)
+
+ fetchcontent_getproperties(Eigen3)
+ # if(NOT Eigen3_POPULATED)
+ # fetchcontent_populate(Eigen3)
+
+ # # Mark the library as IMPORTED as a workaround for https://gitlab.kitware.com/cmake/cmake/-/issues/15415
+ # add_library(Eigen3::Eigen INTERFACE IMPORTED)
+ # set_target_properties(
+ # Eigen3::Eigen PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${eigen3_SOURCE_DIR}"
+ # )
+ # endif()
+ else()
+ find_package(Eigen3 REQUIRED)
endif()
endif()
endif()
diff --git a/plugin/sdf/CMakeLists.txt b/plugin/sdf/CMakeLists.txt
index 3e216fc..e7e3a1e 100644
--- a/plugin/sdf/CMakeLists.txt
+++ b/plugin/sdf/CMakeLists.txt
@@ -37,7 +37,7 @@ set(MUJOCO_SDF_SRCS
add_library(sdf SHARED)
target_sources(sdf PRIVATE ${MUJOCO_SDF_SRCS})
target_include_directories(sdf PRIVATE ${MUJOCO_SDF_INCLUDE})
-target_link_libraries(sdf PRIVATE mujoco SdfLib)
+target_link_libraries(sdf PRIVATE mujoco SdfLib::SdfLib)
target_compile_options(
sdf
PRIVATE ${AVX_COMPILE_OPTIONS}
diff --git a/python/mujoco/util/CMakeLists.txt b/python/mujoco/util/CMakeLists.txt
index 666a372..d89bb49 100644
--- a/python/mujoco/util/CMakeLists.txt
+++ b/python/mujoco/util/CMakeLists.txt
@@ -63,8 +63,8 @@ if(BUILD_TESTING)
target_link_libraries(
array_traits_test
array_traits
- gmock
- gtest_main
+ GTest::gmock
+ GTest::gtest_main
)
gtest_add_tests(TARGET array_traits_test SOURCES array_traits_test.cc)
@@ -72,8 +72,8 @@ if(BUILD_TESTING)
target_link_libraries(
func_traits_test
func_traits
- gmock
- gtest_main
+ GTest::gmock
+ GTest::gtest_main
)
gtest_add_tests(TARGET func_traits_test SOURCES func_traits_test.cc)
@@ -81,8 +81,8 @@ if(BUILD_TESTING)
target_link_libraries(
func_wrap_test
func_wrap
- gmock
- gtest_main
+ GTest::gmock
+ GTest::gtest_main
)
gtest_add_tests(TARGET func_wrap_test SOURCES func_wrap_test.cc)
@@ -90,8 +90,8 @@ if(BUILD_TESTING)
target_link_libraries(
tuple_tools_test
func_wrap
- gmock
- gtest_main
+ GTest::gmock
+ GTest::gtest_main
)
gtest_add_tests(TARGET tuple_tools_test SOURCES tuple_tools_test.cc)
endif()
diff --git a/simulate/cmake/SimulateDependencies.cmake b/simulate/cmake/SimulateDependencies.cmake
index 5141406..75ff788 100644
--- a/simulate/cmake/SimulateDependencies.cmake
+++ b/simulate/cmake/SimulateDependencies.cmake
@@ -81,10 +81,6 @@ findorfetch(
glfw3
LIBRARY_NAME
glfw3
- GIT_REPO
- https://github.com/glfw/glfw.git
- GIT_TAG
- ${MUJOCO_DEP_VERSION_glfw3}
TARGETS
glfw
EXCLUDE_FROM_ALL
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 6bec911..2a16c21 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -30,7 +30,7 @@ macro(mujoco_test name)
)
add_executable(${name} ${name}.cc)
- target_link_libraries(${name} gtest_main mujoco)
+ target_link_libraries(${name} GTest::gtest_main mujoco)
target_include_directories(${name} PRIVATE ${MUJOCO_TEST_INCLUDE})
set_target_properties(${name} PROPERTIES BUILD_RPATH ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
# gtest_discover_tests is recommended over gtest_add_tests, but has some issues in Windows.
@@ -59,20 +59,20 @@ target_link_libraries(
PUBLIC absl::core_headers
absl::strings
absl::synchronization
- gtest
- gmock
+ GTest::gtest
+ GTest::gmock
mujoco::mujoco
)
target_include_directories(fixture PRIVATE ${mujoco_SOURCE_DIR}/include gmock)
mujoco_test(fixture_test)
-target_link_libraries(fixture_test fixture gmock)
+target_link_libraries(fixture_test fixture GTest::gmock)
mujoco_test(header_test)
-target_link_libraries(header_test fixture gmock)
+target_link_libraries(header_test fixture GTest::gmock)
mujoco_test(pipeline_test)
-target_link_libraries(pipeline_test fixture gmock)
+target_link_libraries(pipeline_test fixture GTest::gmock)
add_subdirectory(benchmark)
add_subdirectory(engine)
@@ -0,0 +1,192 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 251c456..3d30231 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,7 +27,7 @@ option(SDFLIB_USE_SYSTEM_GLM "Use glm library via find_package instead of downlo
option(SDFLIB_USE_SYSTEM_SPDLOG "Use spdlog library via find_package instead of downloading it" OFF)
option(SDFLIB_USE_SYSTEM_CEREAL "Use cereal library via find_package instead of downloading it" OFF)
option(SDFLIB_USE_SYSTEM_ASSIMP "Use assimp library via find_package instead of downloading it" OFF)
-
+option(SDFLIB_USE_SYSTEM_TRIANGLEMESHDISTANCE "Use TriangleMeshDistance library via system includes instead of downloading it" OFF)
if(SDFLIB_DEBUG_INFO)
add_compile_definitions(SDFLIB_PRINT_STATISTICS)
@@ -55,13 +55,52 @@ file(GLOB UTILS_SOURCE_FILES src/utils/*.cpp)
file(GLOB UTILS_HEADER_FILES src/utils/*.h)
# Add libraries
-add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES} ${HEADER_FILES} ${PUBLIC_HEADER_FILES}
- ${SDF_SOURCE_FILES} ${SDF_HEADER_FILES}
- ${UTILS_SOURCE_FILES} ${UTILS_HEADER_FILES})
-
-target_include_directories(${PROJECT_NAME} PUBLIC include/)
+add_library(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES} ${PUBLIC_HEADER_FILES}
+ ${SDF_SOURCE_FILES} ${SDF_HEADER_FILES}
+ ${UTILS_SOURCE_FILES} ${UTILS_HEADER_FILES})
+add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
+if(BUILD_SHARED_LIBS AND WIN32)
+ set_target_properties(${PROJECT_NAME} PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
+endif()
+include(GNUInstallDirs)
+target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
target_include_directories(${PROJECT_NAME} PRIVATE src/)
+# Install library and CMake config files
+install(TARGETS ${PROJECT_NAME} EXPORT ${PROJECT_NAME})
+install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/SdfLib
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+
+install(EXPORT ${PROJECT_NAME}
+ FILE ${PROJECT_NAME}Targets.cmake
+ DESTINATION lib/cmake/${PROJECT_NAME}
+ NAMESPACE ${PROJECT_NAME}::
+)
+
+include(CMakePackageConfigHelpers)
+set(PACKAGE_DEPENDENCIES "")
+if(SDFLIB_USE_SYSTEM_GLM)
+ string(APPEND PACKAGE_DEPENDENCIES "find_dependency(glm)\n")
+endif()
+if(SDFLIB_USE_SYSTEM_SPDLOG)
+ string(APPEND PACKAGE_DEPENDENCIES "find_dependency(spdlog)\n")
+endif()
+if(SDFLIB_USE_SYSTEM_CEREAL)
+ string(APPEND PACKAGE_DEPENDENCIES "find_dependency(cereal)\n")
+endif()
+if(SDFLIB_USE_ASSIMP AND SDFLIB_USE_SYSTEM_ASSIMP)
+ string(APPEND PACKAGE_DEPENDENCIES "find_dependency(assimp)\n")
+endif()
+
+configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in
+ "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
+ INSTALL_DESTINATION "lib/cmake/${PROJECT_NAME}"
+ NO_SET_AND_CHECK_MACRO
+ NO_CHECK_REQUIRED_COMPONENTS_MACRO)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+ DESTINATION lib/cmake/${PROJECT_NAME})
+
# Add shaders
file(GLOB SHADER_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/src/render_engine/shaders
src/render_engine/shaders/*.frag
@@ -69,7 +108,7 @@ file(GLOB SHADER_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/src/render_engine/sh
src/render_engine/shaders/*.comp)
foreach(SHADER IN LISTS SHADER_FILES)
- add_custom_command(OUTPUT ${SHADER}
+add_custom_command(OUTPUT ${SHADER}
COMMAND cmake -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/src/render_engine/shaders/${SHADER} $<TARGET_FILE_DIR:${PROJECT_NAME}>/shaders/${SHADER}
DEPENDS src/render_engine/shaders/${SHADER}
)
@@ -112,7 +151,10 @@ endif()
target_link_libraries(${PROJECT_NAME} PUBLIC ${SDFLIB_GLM_TARGET})
target_link_libraries(${PROJECT_NAME} PUBLIC spdlog::spdlog)
target_link_libraries(${PROJECT_NAME} PUBLIC cereal::cereal)
-target_link_libraries(${PROJECT_NAME} PUBLIC icg)
+
+if(NOT SDFLIB_USE_SYSTEM_TRIANGLEMESHDISTANCE)
+ target_link_libraries(${PROJECT_NAME} PUBLIC TriangleMeshDistance)
+endif()
if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
target_link_libraries(${PROJECT_NAME} PUBLIC -lstdc++fs)
diff --git a/SdfLibConfig.cmake.in b/SdfLibConfig.cmake.in
new file mode 100644
index 0000000..9b8265c
--- /dev/null
+++ b/SdfLibConfig.cmake.in
@@ -0,0 +1,7 @@
+@PACKAGE_INIT@
+
+include(CMakeFindDependencyMacro)
+
+@PACKAGE_DEPENDENCIES@
+
+include("${CMAKE_CURRENT_LIST_DIR}/SdfLibTargets.cmake")
diff --git a/include/SdfLib/TrianglesInfluence.h b/include/SdfLib/TrianglesInfluence.h
index fc2ca52..b276f23 100644
--- a/include/SdfLib/TrianglesInfluence.h
+++ b/include/SdfLib/TrianglesInfluence.h
@@ -11,7 +11,7 @@
#include "InterpolationMethods.h"
#include "utils/Timer.h"
#include "utils/GJK.h"
-#include <InteractiveComputerGraphics/TriangleMeshDistance.h>
+#include <tmd/TriangleMeshDistance.h>
#include <vector>
#include <array>
diff --git a/libs/CMakeLists.txt b/libs/CMakeLists.txt
index 79f70c1..e2a4f10 100644
--- a/libs/CMakeLists.txt
+++ b/libs/CMakeLists.txt
@@ -137,9 +137,10 @@ if(SDFLIB_BUILD_APPS OR SDFLIB_BUILD_DEBUG_APPS)
target_include_directories(stb_image INTERFACE stb)
endif()
-# icg
-add_library(icg INTERFACE)
-target_include_directories(icg INTERFACE InteractiveComputerGraphics)
+if (NOT SDFLIB_USE_SYSTEM_TRIANGLEMESHDISTANCE)
+ add_library(TriangleMeshDistance INTERFACE)
+ target_include_directories(TriangleMeshDistance INTERFACE InteractiveComputerGraphics)
+endif()
if(SDFLIB_BUILD_APPS OR SDFLIB_BUILD_DEBUG_APPS)
# glfw
diff --git a/libs/InteractiveComputerGraphics/InteractiveComputerGraphics/TriangleMeshDistance.h b/libs/InteractiveComputerGraphics/tmd/TriangleMeshDistance.h
similarity index 100%
rename from libs/InteractiveComputerGraphics/InteractiveComputerGraphics/TriangleMeshDistance.h
rename to libs/InteractiveComputerGraphics/tmd/TriangleMeshDistance.h
diff --git a/src/tools/ImageQueryTime/main.cpp b/src/tools/ImageQueryTime/main.cpp
index 357a78b..f4fd9e7 100644
--- a/src/tools/ImageQueryTime/main.cpp
+++ b/src/tools/ImageQueryTime/main.cpp
@@ -17,7 +17,7 @@
#define TEST_METHODS
#ifdef TEST_METHODS
-#include <InteractiveComputerGraphics/TriangleMeshDistance.h>
+#include <tmd/TriangleMeshDistance.h>
// #include <CGAL/Simple_cartesian.h>
// #include <CGAL/AABB_tree.h>
// #include <CGAL/AABB_traits.h>
diff --git a/src/tools/SdfErrorCompare/main.cpp b/src/tools/SdfErrorCompare/main.cpp
index deef25f..9e402c4 100644
--- a/src/tools/SdfErrorCompare/main.cpp
+++ b/src/tools/SdfErrorCompare/main.cpp
@@ -23,7 +23,7 @@ using namespace sdflib;
// #define TEST_OPENVDB
#ifdef TEST_ICG
-#include <InteractiveComputerGraphics/TriangleMeshDistance.h>
+#include <tmd/TriangleMeshDistance.h>
#endif
#ifdef TEST_CGAL
#include <CGAL/Simple_cartesian.h>
diff --git a/src/tools/SdfLibUnity/SdfExportFunc.cpp b/src/tools/SdfLibUnity/SdfExportFunc.cpp
index ff4e017..7e06ada 100644
--- a/src/tools/SdfLibUnity/SdfExportFunc.cpp
+++ b/src/tools/SdfLibUnity/SdfExportFunc.cpp
@@ -1,7 +1,7 @@
#include "SdfExportFunc.h"
#include "spdlog/sinks/rotating_file_sink.h"
-#include <InteractiveComputerGraphics/TriangleMeshDistance.h>
+#include <tmd/TriangleMeshDistance.h>
using namespace sdflib;
diff --git a/src/tools/SdfOffsets/main.cpp b/src/tools/SdfOffsets/main.cpp
index b6769d7..07f137b 100644
--- a/src/tools/SdfOffsets/main.cpp
+++ b/src/tools/SdfOffsets/main.cpp
@@ -9,7 +9,7 @@
#include <glm/gtc/type_ptr.hpp>
#include <glm/gtc/matrix_transform.hpp>
-#include <InteractiveComputerGraphics/TriangleMeshDistance.h>
+#include <tmd/TriangleMeshDistance.h>
#include <CGAL/Surface_mesh_default_triangulation_3.h>
#include <CGAL/Complex_2_in_triangulation_3.h>
#include <CGAL/make_surface_mesh.h>
+3 -3
View File
@@ -70,11 +70,11 @@ in
mkDerivation rec {
pname = "recoll";
version = "1.36.0";
version = "1.36.2";
src = fetchurl {
url = "https://www.lesbonscomptes.com/${pname}/${pname}-${version}.tar.gz";
hash = "sha256-vf0o0wBcG3878YD4mTUhni2aTUU9AJkG4an1oaRc4yw=";
hash = "sha256-GyQqI3ciRO0TRaAeM4rGu+j/eB4bJlQ7VBTTxUGMNt4=";
};
configureFlags = [
@@ -169,7 +169,7 @@ mkDerivation rec {
members, email attachments.
'';
homepage = "https://www.lesbonscomptes.com/recoll/";
changelog = "https://www.lesbonscomptes.com/recoll/pages/release-${version}.html";
changelog = "https://www.lesbonscomptes.com/recoll/pages/release-${versions.majorMinor version}.html";
license = licenses.gpl2Plus;
platforms = platforms.unix;
maintainers = with maintainers; [ jcumming ehmry ];
@@ -10,8 +10,8 @@
}:
let
version = "1.3.0";
commit = "5bfe79b3632f15c442e8dc51ec206ab76354487f";
version = "1.3.1";
commit = "b6be8bac78605c21a9670db0e44faf5e1eafe0d4";
in buildGoModule {
pname = "gg-scm";
inherit version;
@@ -20,7 +20,7 @@ in buildGoModule {
owner = "gg-scm";
repo = "gg";
rev = "v${version}";
hash = "sha256-5iiu3blNJHDehg3wnvZUmfjFST+zNr89+FAoQu4CSH8=";
hash = "sha256-qw0KWhCkJVYRhDBNtiNactWGGMHjBwdQ1Po4lQQbaj4=";
};
postPatch = ''
substituteInPlace cmd/gg/editor_unix.go \
@@ -33,7 +33,7 @@ in buildGoModule {
"-X" "main.buildCommit=${commit}"
];
vendorHash = "sha256-IU3Ac9rXsyPqRJrPJMW1eNVzQy7qoVBs9XYaLX9c5AU=";
vendorHash = "sha256-56Sah030xbWsoOu8r3c3nN2UGHvQORheavebP+Z1Wc8=";
nativeBuildInputs = [ pandoc installShellFiles makeWrapper ];
nativeCheckInputs = [ bash coreutils git ];
@@ -20,12 +20,12 @@
buildGoModule rec {
pname = "gitea";
version = "1.20.5";
version = "1.21.1";
# not fetching directly from the git repo, because that lacks several vendor files for the web UI
src = fetchurl {
url = "https://dl.gitea.com/gitea/${version}/gitea-src-${version}.tar.gz";
hash = "sha256-cH/AHsFXOdvfSfj9AZUd3l/RlYE06o1ByZu0vvGQuXw=";
hash = "sha256-5WEHUMQsQNgrglS+xJ4IWHUl0a6RLLPyx0l+ECJ4R9g=";
};
vendorHash = null;
@@ -5,11 +5,11 @@
stdenv.mkDerivation rec {
pname = "got";
version = "0.93";
version = "0.94";
src = fetchurl {
url = "https://gameoftrees.org/releases/portable/got-portable-${version}.tar.gz";
hash = "sha256-wlcnJr7f3Bd9SEgrKiPlr7pTSjaRj47qwktI2jepINE=";
hash = "sha256-hG0/a+sk6uZCxR908YfZCW44qx/SIwwGO9mUaxxHZ3k=";
};
nativeBuildInputs = [ pkg-config bison ]
@@ -22,13 +22,16 @@
, aprutil
, makeDesktopItem
, copyDesktopItems
, jq
, studioVariant ? false
}:
let
davinci = (
stdenv.mkDerivation rec {
pname = "davinci-resolve";
version = "18.5.1";
pname = "davinci-resolve${lib.optionalString studioVariant "-studio"}";
version = "18.6.3";
nativeBuildInputs = [
(appimage-run.override { buildFHSEnv = buildFHSEnvChroot; } )
@@ -47,19 +50,24 @@ let
rec {
outputHashMode = "recursive";
outputHashAlgo = "sha256";
outputHash = "sha256-AZ869hA/WeCf3sxhdDOzD/q30P1NaD18TheBtS1ammQ=";
outputHash =
if studioVariant
then "sha256-OX8PyMhfl0jRdXBNsjlwkCAh8XUNJv8HEbmyAdjIv18="
else "sha256-PNzdVxGgXIHM2vi3ChHx67TQBFlCYBOZCiFkDi/RSu4=";
impureEnvVars = lib.fetchers.proxyImpureEnvVars;
nativeBuildInputs = [ curl ];
nativeBuildInputs = [ curl jq ];
# ENV VARS
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
# Get linux.downloadId from HTTP response on https://www.blackmagicdesign.com/products/davinciresolve
DOWNLOADID = "defc1c6789b7475b9ee4a42daf9ba61d";
REFERID = "263d62f31cbb49e0868005059abcb0c9";
SITEURL = "https://www.blackmagicdesign.com/api/register/us/download/${DOWNLOADID}";
DOWNLOADSURL = "https://www.blackmagicdesign.com/api/support/us/downloads.json";
SITEURL = "https://www.blackmagicdesign.com/api/register/us/download";
PRODUCT = "DaVinci Resolve${lib.optionalString studioVariant " Studio"}";
VERSION = version;
USERAGENT = builtins.concatStringsSep " " [
"User-Agent: Mozilla/5.0 (X11; Linux ${stdenv.hostPlatform.linuxArch})"
@@ -77,10 +85,16 @@ let
"street" = "Hogeweide 346";
"state" = "Province of Utrecht";
"city" = "Utrecht";
"product" = "DaVinci Resolve";
"product" = PRODUCT;
};
} ''
DOWNLOADID=$(
curl --silent --compressed "$DOWNLOADSURL" \
| jq --raw-output '.downloads[] | select(.name | test("^'"$PRODUCT $VERSION"'( Update)?$")) | .urls.Linux[0].downloadId'
)
echo "downloadid is $DOWNLOADID"
test -n "$DOWNLOADID"
RESOLVEURL=$(curl \
--silent \
--header 'Host: www.blackmagicdesign.com' \
@@ -95,7 +109,7 @@ let
--header 'Cookie: _ga=GA1.2.1849503966.1518103294; _gid=GA1.2.953840595.1518103294' \
--data-ascii "$REQJSON" \
--compressed \
"$SITEURL")
"$SITEURL/$DOWNLOADID")
curl \
--retry 3 --retry-delay 3 \
@@ -111,14 +125,17 @@ let
# The unpack phase won't generate a directory
sourceRoot = ".";
installPhase = ''
installPhase = let
appimageName = "DaVinci_Resolve_${lib.optionalString studioVariant "Studio_"}${version}_Linux.run";
in ''
runHook preInstall
export HOME=$PWD/home
mkdir -p $HOME
mkdir -p $out
appimage-run ./DaVinci_Resolve_${version}_Linux.run -i -y -n -C $out
test -e ${lib.escapeShellArg appimageName}
appimage-run ${lib.escapeShellArg appimageName} -i -y -n -C $out
mkdir -p $out/{configs,DolbyVision,easyDCP,Fairlight,GPUCache,logs,Media,"Resolve Disk Database",.crashreport,.license,.LUT}
runHook postInstall
@@ -162,7 +179,9 @@ let
);
in
buildFHSEnv {
name = "davinci-resolve";
inherit (davinci) pname version;
name = null;
targetPkgs = pkgs: with pkgs; [
alsa-lib
aprutil
@@ -201,6 +220,7 @@ buildFHSEnv {
xorg.libXinerama
xorg.libXrandr
xorg.libXrender
xorg.libXt
xorg.libXtst
xorg.libXxf86vm
xorg.libxcb
@@ -213,16 +233,22 @@ buildFHSEnv {
zlib
];
extraBwrapArgs = lib.optionals studioVariant [
"--bind \"$HOME\"/.local/share/DaVinciResolve/license ${davinci}/.license"
];
runScript = "${bash}/bin/bash ${
writeText "davinci-wrapper"
''
export QT_XKB_CONFIG_ROOT="${xkeyboard_config}/share/X11/xkb"
export QT_PLUGIN_PATH="${davinci}/libs/plugins:$QT_PLUGIN_PATH"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${davinci}/libs
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib32:${davinci}/libs
${davinci}/bin/resolve
''
}";
passthru = { inherit davinci; };
meta = with lib; {
description = "Professional video editing, color, effects and audio post-processing";
homepage = "https://www.blackmagicdesign.com/products/davinciresolve";
@@ -2,13 +2,13 @@
buildKodiBinaryAddon rec {
pname = "pvr-hts";
namespace = "pvr.hts";
version = "20.6.4";
version = "20.6.5";
src = fetchFromGitHub {
owner = "kodi-pvr";
repo = "pvr.hts";
rev = "${version}-${rel}";
sha256 = "sha256-IrVz4rHAmaj/ACBNEF0x3kJa3fFPTTT7Pv9GnWJm8Vg=";
sha256 = "sha256-NrSLWZn+aeWUKxM/ETvoE4gRo4JZsD1snpLvMLDlpFw=";
};
meta = with lib; {
@@ -10,11 +10,11 @@
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "tart";
version = "2.3.0";
version = "2.4.1";
src = fetchurl {
url = "https://github.com/cirruslabs/tart/releases/download/${finalAttrs.version}/tart.tar.gz";
sha256 = "sha256-LdzP0Vovda0W6uBg71dJlTxP+Qly+c2Shv3xrMmxYDg=";
sha256 = "sha256-dCKUwDC7M3u8/8yJQp/v0zy7GuB7SvjnRmTLtodUz80=";
};
sourceRoot = ".";
@@ -1,4 +1,4 @@
{ lib, stdenv, fetchurl, fetchpatch2
{ lib, stdenv, fetchurl
, meson, ninja, pkg-config, python3, wayland-scanner
, cairo, libGL, libdrm, libevdev, libinput, libxkbcommon, mesa, seatd, wayland
, wayland-protocols, xcbutilcursor
@@ -19,23 +19,13 @@
stdenv.mkDerivation rec {
pname = "weston";
version = "12.0.2";
version = "13.0.0";
src = fetchurl {
url = "https://gitlab.freedesktop.org/wayland/weston/-/releases/${version}/downloads/weston-${version}.tar.xz";
hash = "sha256-62hqfPAJkqI7F/GS/KmohzE+ksNG7jXYV1GWmD1la0o=";
hash = "sha256-Uv8dSqI5Si5BbIWjOLYnzpf6cdQ+t2L9Sq8UXTb8eVo=";
};
patches = [
# ci, backend-vnc: update to Neat VNC 0.7.0
# part of https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/1051
(fetchpatch2 {
url = "https://gitlab.freedesktop.org/wayland/weston/-/commit/8895b15f3dfc555a869e310ff6e16ff5dced1336.patch";
hash = "sha256-PGAmQhzG8gZcYRaZwhKPlgzfbILIXGAHLSd9dCHAP1A=";
excludes = [ ".gitlab-ci.yml" ];
})
];
depsBuildBuild = [ pkg-config ];
nativeBuildInputs = [ meson ninja pkg-config python3 wayland-scanner ];
buildInputs = [
@@ -14,6 +14,7 @@ in
, recursiveHash ? true
, postFetch ? ""
, postUnpack ? ""
, meta ? {}
}:
let
afterSuccess = writeShellScript "fetch-bittorrent-done.sh" ''
@@ -30,6 +31,7 @@ let
jsonConfig = (formats.json {}).generate "jsonConfig" config;
in
runCommand name {
inherit meta;
nativeBuildInputs = [ cacert ] ++ (if (backend == "transmission" ) then [ transmission_noSystemd ] else if (backend == "rqbit") then [ rqbit ] else throw "rqbit or transmission are the only available backends for fetchtorrent");
outputHashAlgo = if hash != "" then null else "sha256";
outputHash = hash;
+24 -2
View File
@@ -1,25 +1,47 @@
{ testers, fetchtorrent, ... }:
{ testers, fetchtorrent, lib, ... }:
let
wired-cd.meta.license = [
# track 1, 4 and 11
{
spdxID = "CC NC-SAMPLING+ 1.0 Deed";
fullName = "NonCommercial Sampling Plus 1.0 Generic";
url = "https://creativecommons.org/licenses/nc-sampling+/1.0/";
free = false; # for noncommercial purposes only
}
# the rest
{
spdxID = "CC SAMPLING+ 1.0 Deed";
fullName = "Sampling Plus 1.0 Generic";
url = "https://creativecommons.org/licenses/sampling+/1.0/";
free = true; # no use in advertisement
}
];
in
{
http-link = testers.invalidateFetcherByDrvHash fetchtorrent {
url = "https://webtorrent.io/torrents/wired-cd.torrent";
hash = "sha256-OCsC22WuanqoN6lPv5wDT5ZxPcEHDpZ1EgXGvz1SDYo=";
backend = "transmission";
inherit (wired-cd) meta;
};
magnet-link = testers.invalidateFetcherByDrvHash fetchtorrent {
url = "magnet:?xt=urn:btih:a88fda5954e89178c372716a6a78b8180ed4dad3&dn=The+WIRED+CD+-+Rip.+Sample.+Mash.+Share&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fwired-cd.torrent";
hash = "sha256-OCsC22WuanqoN6lPv5wDT5ZxPcEHDpZ1EgXGvz1SDYo=";
backend = "transmission";
inherit (wired-cd) meta;
};
http-link-rqbit = testers.invalidateFetcherByDrvHash fetchtorrent {
url = "https://webtorrent.io/torrents/wired-cd.torrent";
hash = "sha256-OCsC22WuanqoN6lPv5wDT5ZxPcEHDpZ1EgXGvz1SDYo=";
backend = "rqbit";
inherit (wired-cd) meta;
};
magnet-link-rqbit = testers.invalidateFetcherByDrvHash fetchtorrent {
url = "magnet:?xt=urn:btih:a88fda5954e89178c372716a6a78b8180ed4dad3&dn=The+WIRED+CD+-+Rip.+Sample.+Mash.+Share&tr=udp%3A%2F%2Fexplodie.org%3A6969&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Ftracker.empire-js.us%3A1337&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Ftracker.opentrackr.org%3A1337&tr=wss%3A%2F%2Ftracker.btorrent.xyz&tr=wss%3A%2F%2Ftracker.fastcast.nz&tr=wss%3A%2F%2Ftracker.openwebtorrent.com&ws=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2F&xs=https%3A%2F%2Fwebtorrent.io%2Ftorrents%2Fwired-cd.torrent";
hash = "sha256-OCsC22WuanqoN6lPv5wDT5ZxPcEHDpZ1EgXGvz1SDYo=";
backend = "rqbit";
inherit (wired-cd) meta;
};
}
+56
View File
@@ -0,0 +1,56 @@
{ stdenv
, lib
, buildGoModule
, fetchFromGitHub
, runCommand
, alp
}:
buildGoModule rec {
pname = "alp";
version = "1.1.17";
src = fetchFromGitHub {
owner = "gernotfeichter";
repo = "alp";
rev = version;
hash = "sha256-7lyWu1bVn7UwLb/Em6VBbg3FrMyxGjebxt5gJhm/xpI=";
};
vendorHash = "sha256-a2CQZKN/rPWh/Pn9gXfSArTCcGST472tsz1Kqm7M4vM=";
sourceRoot = "${src.name}/linux";
# Executing Go commands directly in checkPhase and buildPhase below,
# because the default testsuite runs all go tests, some of which require docker.
# Docker is too expensive for https://github.com/NixOS/ofborg.
checkPhase = ''
runHook preCheck
go test -run Test_main_init
runHook postCheck
'';
buildPhase = ''
runHook preBuild
go build -o $GOPATH/bin/${pname} main.go
runHook postBuild
'';
passthru.tests = {
test-version = runCommand "${pname}-test" {} ''
${alp}/bin/alp version > $out
cat $out | grep '${version}'
'';
};
meta = with lib; {
description = "A convenient authentication method that lets you use your android device as a key for your Linux machine";
homepage = "https://github.com/gernotfeichter/alp";
license = licenses.gpl2Only;
mainProgram = "alp";
maintainers = with maintainers; [ gernotfeichter ];
};
}
@@ -0,0 +1,147 @@
{ stdenv
, lib
, fetchFromGitHub
, gitUpdater
, nixosTests
, testers
, accountsservice
, cmake
, dbus-test-runner
, withDocumentation ? true
, docbook_xsl
, docbook_xml_dtd_45
, glib
, gobject-introspection
, gtest
, gtk-doc
, intltool
, lomiri
, pkg-config
, python3
, systemd
, vala
, wrapGAppsHook
}:
stdenv.mkDerivation (finalAttrs: {
pname = "ayatana-indicator-messages";
version = "23.10.0";
src = fetchFromGitHub {
owner = "AyatanaIndicators";
repo = "ayatana-indicator-messages";
rev = finalAttrs.version;
hash = "sha256-FBJeP5hOXJcOk04cRJpw+oN7L3w3meDX3ivLmFWkhVI=";
};
outputs = [
"out"
"dev"
] ++ lib.optionals withDocumentation [
"devdoc"
];
postPatch = ''
# Uses pkg_get_variable, cannot substitute prefix with that
substituteInPlace data/CMakeLists.txt \
--replace "\''${SYSTEMD_USER_DIR}" "$out/lib/systemd/user"
# Bad concatenation
substituteInPlace libmessaging-menu/messaging-menu.pc.in \
--replace "\''${exec_prefix}/@CMAKE_INSTALL_LIBDIR@" '@CMAKE_INSTALL_FULL_LIBDIR@' \
--replace "\''${prefix}/@CMAKE_INSTALL_INCLUDEDIR@" '@CMAKE_INSTALL_FULL_INCLUDEDIR@'
'' + lib.optionalString (!withDocumentation) ''
sed -i CMakeLists.txt \
'/add_subdirectory(doc)/d'
'';
strictDeps = true;
nativeBuildInputs = [
cmake
glib # For glib-compile-schemas
intltool
pkg-config
vala
wrapGAppsHook
] ++ lib.optionals withDocumentation [
docbook_xsl
docbook_xml_dtd_45
gtk-doc
];
buildInputs = [
accountsservice
lomiri.cmake-extras
glib
gobject-introspection
systemd
];
nativeCheckInputs = [
(python3.withPackages (ps: with ps; [
pygobject3
python-dbusmock
]))
];
checkInputs = [
dbus-test-runner
gtest
];
cmakeFlags = [
"-DENABLE_TESTS=${lib.boolToString finalAttrs.doCheck}"
"-DGSETTINGS_LOCALINSTALL=ON"
"-DGSETTINGS_COMPILE=ON"
];
makeFlags = lib.optionals withDocumentation [
# gtk-doc doesn't call ld with the correct arguments
# ld: ...: undefined reference to symbol 'strncpy@@GLIBC_2.2.5', 'qsort@@GLIBC_2.2.5'
"LD=${stdenv.cc.targetPrefix}cc"
];
doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
preCheck = ''
# test-client imports gir, whose solib entry points to final store location
install -Dm644 libmessaging-menu/libmessaging-menu.so.0.0.0 $out/lib/libmessaging-menu.so.0
'';
postCheck = ''
# remove the above solib-installation, let it be done properly
rm -r $out
'';
preInstall = lib.optionalString withDocumentation ''
# installing regenerates docs, generated files are created without write permissions, errors out while trying to overwrite them
chmod +w doc/reference/html/*
'';
passthru = {
ayatana-indicators = [
"ayatana-indicator-messages"
];
tests = {
pkg-config = testers.testMetaPkgConfig finalAttrs.finalPackage;
vm = nixosTests.ayatana-indicators;
};
updateScript = gitUpdater { };
};
meta = with lib; {
description = "Ayatana Indicator Messages Applet";
longDescription = ''
The -messages Ayatana System Indicator is the messages menu indicator for Unity7, MATE and Lomiri (optionally for
others, e.g. XFCE, LXDE).
'';
homepage = "https://github.com/AyatanaIndicators/ayatana-indicator-messages";
license = licenses.gpl3Only;
platforms = platforms.linux;
maintainers = with maintainers; [ OPNA2608 ];
pkgConfigModules = [
"messaging-menu"
];
};
})
+2 -2
View File
@@ -15,11 +15,11 @@
stdenv.mkDerivation rec {
pname = "bruno";
version = "1.2.0";
version = "1.3.0";
src = fetchurl {
url = "https://github.com/usebruno/bruno/releases/download/v${version}/bruno_${version}_amd64_linux.deb";
hash = "sha256-60YwXAukGnMiaYxVOcUgGa/r/If1pJC6pMyyltTfd1c=";
hash = "sha256-E9aVyZWqY8XTwoUbHaj8VM32Eex7GNQcEpg8Hkk2O0U=";
};
nativeBuildInputs = [ autoPatchelfHook dpkg wrapGAppsHook ];
File diff suppressed because it is too large Load Diff
+97
View File
@@ -0,0 +1,97 @@
{
lib,
stdenv,
fetchFromGitHub,
rust,
rustPlatform,
cmake,
makeBinaryWrapper,
cosmic-icons,
just,
pkg-config,
libxkbcommon,
glib,
gtk3,
libinput,
fontconfig,
freetype,
wayland,
xorg,
}:
rustPlatform.buildRustPackage rec {
pname = "cosmic-edit";
version = "unstable-2023-11-29";
src = fetchFromGitHub {
owner = "pop-os";
repo = pname;
rev = "4a3dd101f35eb3c1c585f104d78ed4ee31d393d3";
hash = "sha256-pk+4u13oWZ4fgXy1tlDgq+E4J+UddjTNSexMm4dgBSo=";
};
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"accesskit-0.11.0" = "sha256-xVhe6adUb8VmwIKKjHxwCwOo5Y1p3Or3ylcJJdLDrrE=";
"atomicwrites-0.4.2" = "sha256-QZSuGPrJXh+svMeFWqAXoqZQxLq/WfIiamqvjJNVhxA=";
"cosmic-config-0.1.0" = "sha256-wBliqZbRHYiwZmu0vHeIP5DFzg/1IeQP3aMxiYC88bo=";
"cosmic-text-0.10.0" = "sha256-fE5HkhITLw0OBfFLFMsKEJw5idO265i4S7qylHTt7C0=";
"sctk-adwaita-0.5.4" = "sha256-yK0F2w/0nxyKrSiHZbx7+aPNY2vlFs7s8nu/COp2KqQ=";
"softbuffer-0.3.3" = "sha256-eKYFVr6C1+X6ulidHIu9SP591rJxStxwL9uMiqnXx4k=";
"smithay-client-toolkit-0.16.1" = "sha256-z7EZThbh7YmKzAACv181zaEZmWxTrMkFRzP0nfsHK6c=";
"systemicons-0.7.0" = "sha256-zzAI+6mnpQOh+3mX7/sJ+w4a7uX27RduQ99PNxLNF78=";
"taffy-0.3.11" = "sha256-SCx9GEIJjWdoNVyq+RZAGn0N71qraKZxf9ZWhvyzLaI=";
"winit-0.28.6" = "sha256-FhW6d2XnXCGJUMoT9EMQew9/OPXiehy/JraeCiVd76M=";
};
};
postPatch = ''
substituteInPlace justfile --replace '#!/usr/bin/env' "#!$(command -v env)"
'';
nativeBuildInputs = [
cmake
just
pkg-config
makeBinaryWrapper
];
buildInputs = [
libxkbcommon
xorg.libX11
libinput
fontconfig
freetype
wayland
glib
gtk3
];
dontUseJustBuild = true;
justFlags = [
"--set"
"prefix"
(placeholder "out")
"--set"
"bin-src"
"target/${
rust.lib.toRustTargetSpecShort stdenv.hostPlatform
}/release/cosmic-edit"
];
# LD_LIBRARY_PATH can be removed once tiny-xlib is bumped above 0.2.2
postInstall = ''
wrapProgram "$out/bin/${pname}" \
--suffix XDG_DATA_DIRS : "${cosmic-icons}/share" \
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ xorg.libX11 ]}
'';
meta = with lib; {
homepage = "https://github.com/pop-os/cosmic-edit";
description = "Text Editor for the COSMIC Desktop Environment";
license = licenses.gpl3Only;
maintainers = with maintainers; [ ahoneybun ];
platforms = platforms.linux;
};
}
+33
View File
@@ -0,0 +1,33 @@
{
lib,
python3Packages,
fetchFromGitHub,
fetchpatch,
}:
python3Packages.buildPythonPackage rec {
pname = "doge";
version = "3.6.0";
src = fetchFromGitHub {
owner = "Olivia5k";
repo = "doge";
rev = version;
hash = "sha256-72nRghD5k0ofrlvV3hEdyrr6uzV4+8At1bOCmRZTxhk=";
};
patches = [
# https://github.com/Olivia5k/doge/pull/66, adds a small doge
(fetchpatch {
url = "https://github.com/Olivia5k/doge/commit/14e3ccc0a3f1e91862492e20a34d008768a34039.patch";
hash = "sha256-3F+7F9RuoiVWoN+69T7tM871AXX1IQbHqFxD+S3TjxQ=";
})
];
meta = {
homepage = "https://github.com/Olivia5k/doge";
description = "Wow very terminal doge";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [Gonzih quantenzitrone];
mainProgram = "doge";
};
}
+31
View File
@@ -0,0 +1,31 @@
{ lib
, stdenv
, fetchFromGitHub
}:
stdenv.mkDerivation rec {
pname = "emojify";
version = "2.2.0";
src = fetchFromGitHub {
owner = "mrowa44";
repo = "emojify";
rev = version;
hash = "sha256-6cV+S8wTqJxPGsxiJ3hP6/CYPMWdF3qnz4ddL+F/oJU=";
};
installPhase = ''
runHook preInstall
install -Dm755 emojify $out/bin/emojify
runHook postInstall
'';
meta = with lib; {
description = "Emoji on the command line";
homepage = "https://github.com/mrowa44/emojify";
license = licenses.mit;
maintainers = with maintainers; [ snowflake ];
platforms = platforms.all;
mainProgram = "emojify";
};
}
+2 -2
View File
@@ -19,13 +19,13 @@ let
pieBuild = stdenv.hostPlatform.isMusl;
in buildGoModule rec {
pname = "frankenphp";
version = "1.0.0-rc.3";
version = "1.0.0-rc.4";
src = fetchFromGitHub {
owner = "dunglas";
repo = "frankenphp";
rev = "v${version}";
hash = "sha256-Al0gCxTb6s41ugX9J8N8lshop9kP3RPGCzlq5etk1RY=";
hash = "sha256-4jNCKHt4eYI1BNaonIdS1Eq2OnJwgrU6qWZoiSpeIYk=";
};
sourceRoot = "source/caddy";
+39
View File
@@ -0,0 +1,39 @@
{ lib
, stdenv
, fetchFromGitHub
, ffmpeg
, makeWrapper
}:
stdenv.mkDerivation rec {
pname = "gifgen";
version = "1.2.0";
src = fetchFromGitHub {
owner = "lukechilds";
repo = "gifgen";
rev = version;
hash = "sha256-ni9RL4LyMejmu8vm5HC8WSTqAPQMBQNRDOZ4ZfvrkSU=";
};
nativeBuildInputs = [
makeWrapper
];
installPhase = ''
runHook preInstall
install -Dm755 gifgen $out/bin/gifgen
wrapProgram $out/bin/gifgen \
--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
runHook postInstall
'';
meta = with lib; {
description = "Simple high quality GIF encoding";
homepage = "https://github.com/lukechilds/gifgen";
license = licenses.mit;
maintainers = with maintainers; [ snowflake ];
mainProgram = "gifgen";
platforms = platforms.all;
};
}
+56
View File
@@ -0,0 +1,56 @@
{ lib
, stdenv
, fetchFromGitHub
, which
, pkg-config
, autoconf
, automake
, libtool
, gettext
, openssl
, curl
}:
stdenv.mkDerivation rec {
pname = "lib3270";
version = "5.4";
src = fetchFromGitHub {
owner = "PerryWerneck";
repo = pname;
rev = version;
hash = "sha256-w6Bg+TvSDAuZwtu/nyAIuq6pgheM5nXtfuryECfnKng=";
};
nativeBuildInputs = [
which
pkg-config
autoconf
automake
libtool
];
buildInputs = [
gettext
openssl
curl
];
postPatch = ''
# Patch the required version.
sed -i -e "s/20211118/19800101/" src/core/session.c
'';
preConfigure = ''
NOCONFIGURE=1 sh autogen.sh
'';
enableParallelBuilds = true;
meta = with lib; {
description = "TN3270 client Library";
homepage = "https://github.com/PerryWerneck/lib3270";
license = licenses.lgpl3Plus;
maintainers = [ maintainers.vifino ];
};
}
+58
View File
@@ -0,0 +1,58 @@
{ lib
, stdenv
, fetchFromGitHub
, autoconf
, automake
, libtool
, which
, pkg-config
, gtk3
, lib3270
}:
stdenv.mkDerivation rec {
pname = "libv3270";
version = "5.4";
src = fetchFromGitHub {
owner = "PerryWerneck";
repo = pname;
rev = version;
hash = "sha256-Z3FvxPa1pfeECxfB5ZL6gwhkbTKFpfO3D/zLVLF+uiI=";
};
nativeBuildInputs = [
which
pkg-config
autoconf
automake
libtool
];
buildInputs = [
gtk3
lib3270
];
postPatch = ''
# lib3270_build_data_filename is relative to lib3270's share - not ours.
for f in $(find . -type f -iname "*.c"); do
sed -i -e "s@lib3270_build_data_filename(@g_build_filename(\"$out/share/pw3270\", @" "$f"
done
'';
preConfigure = ''
mkdir -p scripts
touch scripts/config.rpath
NOCONFIGURE=1 sh ./autogen.sh
'';
enableParallelBuilds = true;
meta = with lib; {
description = "3270 Virtual Terminal for GTK";
homepage = "https://github.com/PerryWerneck/libv3270";
license = licenses.lgpl3Plus;
maintainers = [ maintainers.vifino ];
};
}
@@ -0,0 +1,42 @@
{ lib
, stdenvNoCC
, fetchFromGitHub
, inkscape
, xcursorgen
}:
stdenvNoCC.mkDerivation {
pname = "material-cursors";
version = "unstable-2023-11-30";
src = fetchFromGitHub {
owner = "varlesh";
repo = "material-cursors";
rev = "2a5f302fefe04678c421473bed636b4d87774b4a";
hash = "sha256-uC2qx3jF4d2tGLPnXEpogm0vyC053MvDVVdVXX8AZ60=";
};
nativeBuildInputs = [
inkscape
xcursorgen
];
buildPhase = ''
runHook preBuild
# Silences the inkscape warning spam.
HOME=$(pwd) bash build.sh 2> /dev/null
runHook postBuild
'';
installFlags = [ "PREFIX=$(out)" ];
meta = {
description = "Material cursors for Linux";
homepage = "https://github.com/varlesh/material-cursors";
license = lib.licenses.gpl3Only;
platforms = lib.platforms.linux;
maintainers = with lib.maintainers; [ RGBCube ];
};
}
+117
View File
@@ -0,0 +1,117 @@
{ lib
, stdenv
, python3
, fetchFromGitHub
, tesseract4
, leptonica
, wl-clipboard
, libnotify
, xorg
}:
let
ps = python3.pkgs;
wrapperDeps = [
leptonica
tesseract4
libnotify
] ++ lib.optionals stdenv.isLinux [
wl-clipboard
];
in
ps.buildPythonApplication rec {
pname = "normcap";
version = "0.4.4";
format = "pyproject";
disabled = ps.pythonOlder "3.9";
src = fetchFromGitHub {
owner = "dynobo";
repo = "normcap";
rev = "refs/tags/v${version}";
hash = "sha256-dShtmoqS9TC3PHuwq24OEOhYfBHGhDCma8Du8QCkFuI=";
};
pythonRemoveDeps = [
"PySide6-Essentials"
];
nativeBuildInputs = [
ps.pythonRelaxDepsHook
ps.poetry-core
];
propagatedBuildInputs = [
ps.pyside6
];
preFixup = ''
makeWrapperArgs+=(
"''${qtWrapperArgs[@]}"
--set QT_QPA_PLATFORM xcb
--prefix PATH : ${lib.makeBinPath wrapperDeps}
)
'';
nativeCheckInputs = wrapperDeps ++ [
ps.pytestCheckHook
ps.pytest-qt
ps.toml
] ++ lib.optionals stdenv.isLinux [
ps.pytest-xvfb
xorg.xorgserver
];
preCheck = ''
export HOME=$(mktemp -d)
'' + lib.optionalString stdenv.isLinux ''
# setup a virtual x11 display
export DISPLAY=:$((2000 + $RANDOM % 1000))
Xvfb $DISPLAY -screen 5 1024x768x8 &
xvfb_pid=$!
'';
postCheck = lib.optionalString stdenv.isLinux ''
# cleanup the virtual x11 display
kill $xvfb_pid
'';
disabledTests = [
# requires a wayland session (no xclip support)
"test_wl_copy"
# times out, unknown why
"test_update_checker_triggers_checked_signal"
# touches network
"test_urls_reachable"
# requires xdg
"test_synchronized_capture"
] ++ lib.optionals stdenv.isDarwin [
# requires impure pbcopy
"test_get_copy_func_with_pbcopy"
"test_get_copy_func_without_pbcopy"
"test_perform_pbcopy"
];
disabledTestPaths = [
# touches network
"tests/tests_gui/test_downloader.py"
# fails to import, causes pytest to freeze
"tests/tests_gui/test_language_manager.py"
] ++ lib.optionals stdenv.isDarwin [
# requires a display
"tests/integration/test_normcap.py"
];
meta = with lib; {
description = "OCR powered screen-capture tool to capture information instead of images";
homepage = "https://dynobo.github.io/normcap/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ cafkafk pbsds ];
mainProgram = "normcap";
};
}
+67
View File
@@ -0,0 +1,67 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, libxcrypt
, pam
, pkg-config
}:
stdenv.mkDerivation (finalAttrs: {
pname = "passwdqc";
version = "2.0.3";
src = fetchFromGitHub {
owner = "openwall";
repo = "passwdqc";
rev = "v${finalAttrs.version}";
hash = "sha256-EgPeccqS+DDDMBVMc4bd70EMnXFuyglftxuqoaYHwNY=";
};
patches = [
(fetchpatch {
name = "0001-fix-solaris-macos-builds.patch";
url = "https://github.com/openwall/passwdqc/commit/fbf38229857f3d1982aa305c20da5e1ea0195b3e.patch";
hash = "sha256-FaEWROHwFzd4ZTeKyPvuAr9vcgnHEv8MhERblIU8JC4=";
})
];
outputs = [ "out" "man" ];
nativeBuildInputs = [
pkg-config
];
buildInputs = [
libxcrypt
pam
];
strictDeps = true;
makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
installFlags = [
# Yet another software that does not use GNUInstallDirs Convention...
"BINDIR=$(out)/bin"
"CONFDIR=$(out)/etc"
"DEVEL_LIBDIR=$(out)/lib"
"INCLUDEDIR=$(out)/include"
"LOCALEDIR=$(out)/share/locale"
"MANDIR=$(man)/man"
"PKGCONFIGDIR=$(out)/lib/pkgconfig"
"SECUREDIR=$(out)/lib/security"
"SECUREDIR_DARWIN=$(out)/lib/security"
"SHARED_LIBDIR=$(out)/lib"
"SHARED_LIBDIR_REL=$(out)/lib"
];
meta = {
homepage = "https://www.openwall.com/passwdqc/";
description = "Passphrase strength checking and enforcement";
license = with lib.licenses; [ bsd3 ];
maintainers = with lib.maintainers; [ AndersonTorres ];
mainProgram = "passwdqc";
platforms = lib.platforms.unix;
};
})
@@ -2,13 +2,13 @@
php.buildComposerProject (finalAttrs: {
pname = "phpunit";
version = "10.5.0";
version = "10.5.1";
src = fetchFromGitHub {
owner = "sebastianbergmann";
repo = "phpunit";
rev = finalAttrs.version;
hash = "sha256-CpgYMUJE7c2eRBYkK/vMRdGgzY7Y7K/wMmyUH+Bssjs=";
hash = "sha256-uYSVzKLefcBMqfrHaF6pg4gohAeb6LVg8QGaTS8jwfE=";
};
vendorHash = "sha256-uUdgz3ZZ+3nU07pUC1sdkNgU1b1beo3sS/yySUzdZwU=";
+2 -2
View File
@@ -42,13 +42,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "polybar";
version = "3.7.0";
version = "3.7.1";
src = fetchFromGitHub {
owner = "polybar";
repo = "polybar";
rev = finalAttrs.version;
hash = "sha256-Z1rL9WvEZHr5M03s9KCJ6O6rNuaK7PpwUDaatYuCocI=";
hash = "sha256-DX648jY1vewl3ImK84gF6/vtcSCg3wtgq6Ie3fCwZoA=";
fetchSubmodules = true;
};
+76
View File
@@ -0,0 +1,76 @@
{ lib
, stdenv
, fetchFromGitHub
, which
, pkg-config
, automake
, autoconf
, m4
, libtool
, gtk3
, libv3270
, lib3270
, openssl
, gettext
, desktop-file-utils
, glib
, wrapGAppsHook
}:
stdenv.mkDerivation rec {
pname = "pw3270";
version = "5.4";
src = fetchFromGitHub {
owner = "PerryWerneck";
repo = pname;
rev = version;
hash = "sha256-Nk/OUqrWngKgb1D1Wi8q5ygKtvuRKUPhPQaLvWi1Z4g=";
};
nativeBuildInputs = [
which
pkg-config
autoconf
automake
libtool
desktop-file-utils
wrapGAppsHook
];
buildInputs = [
gtk3
gettext
libv3270
lib3270
openssl
];
postPatch = ''
# lib3270_build_data_filename is relative to lib3270's share - not ours.
for f in $(find . -type f -iname "*.c"); do
sed -i -e "s@lib3270_build_data_filename(@g_build_filename(\"$out/share/pw3270\", @" "$f"
done
'';
preConfigure = ''
NOCONFIGURE=1 sh autogen.sh
'';
postFixup = ''
# Schemas get installed to wrong directory.
mkdir -p $out/share/glib-2.0
mv $out/share/gsettings-schemas/${pname}-${version}/glib-2.0/schemas $out/share/glib-2.0/
rm -rf $out/share/gsettings-schemas
'';
enableParallelBuilds = true;
meta = with lib; {
description = "3270 Emulator for gtk";
homepage = "https://softwarepublico.gov.br/social/pw3270/";
license = licenses.lgpl3Plus;
maintainers = [ maintainers.vifino ];
mainProgram = "pw3270";
};
}
@@ -11,17 +11,18 @@
, libxkbcommon
, wayland
, wayland-protocols
, gitUpdater
}:
stdenv.mkDerivation (finalAttrs: {
pname = "sov";
version = "0.92b";
version = "0.93";
src = fetchFromGitHub {
owner = "milgra";
repo = "sov";
rev = finalAttrs.version;
hash = "sha256-1L5D0pzcXbkz3VS7VB6ID8BJEbGeNxjo3xCr71CGcIo=";
hash = "sha256-Oc25ixrl0QX0jBBMV34BPAixyBikvevXJ1JNGZymPhg=";
};
patches = [
@@ -54,6 +55,8 @@ stdenv.mkDerivation (finalAttrs: {
wayland-protocols
];
passthru.updateScript = gitUpdater { };
meta = {
description = "Workspace overview app for sway";
homepage = "https://github.com/milgra/sov";
+54
View File
@@ -0,0 +1,54 @@
{ lib
, buildGoModule
, fetchFromGitHub
, wine
, makeBinaryWrapper
, pkg-config
, libGL
, libxkbcommon
, xorg
}:
buildGoModule rec {
pname = "vinegar";
version = "1.5.8";
src = fetchFromGitHub {
owner = "vinegarhq";
repo = "vinegar";
rev = "v${version}";
hash = "sha256-1KDcc9Hms1hQgpvf/49zFJ85kDUsieNcoOTYaZWV+S0=";
};
vendorHash = "sha256-UJLwSOJ4vZt3kquKllm5OMfFheZtAG5gLSA20313PpA=";
nativeBuildInputs = [ pkg-config makeBinaryWrapper ];
buildInputs = [ libGL libxkbcommon xorg.libX11 xorg.libXcursor xorg.libXfixes wine ];
buildPhase = ''
runHook preBuild
make PREFIX=$out
runHook postBuild
'';
installPhase = ''
runHook preInstall
make PREFIX=$out install
runHook postInstall
'';
postInstall = ''
wrapProgram $out/bin/vinegar \
--prefix PATH : ${lib.makeBinPath [ wine ]}
'';
meta = with lib; {
description = "An open-source, minimal, configurable, fast bootstrapper for running Roblox on Linux";
homepage = "https://github.com/vinegarhq/vinegar";
changelog = "https://github.com/vinegarhq/vinegar/releases/tag/v${version}";
mainProgram = "vinegar";
license = licenses.gpl3Only;
platforms = [ "x86_64-linux" "i686-linux" ];
maintainers = with maintainers; [ nyanbinary ];
};
}
@@ -0,0 +1,33 @@
{ stdenvNoCC
, fetchFromGitHub
, lib
}:
stdenvNoCC.mkDerivation rec {
pname = "vimix-cursor-theme";
version = "2020-02-24";
src = fetchFromGitHub {
owner = "vinceliuice";
repo = "Vimix-cursors";
rev = version;
hash = "sha256-TfcDer85+UOtDMJVZJQr81dDy4ekjYgEvH1RE1IHMi4=";
};
installPhase = ''
sed -i 's/Vimix Cursors$/Vimix-Cursors/g' dist{,-white}/index.theme
install -dm 755 $out/share/icons/Vimix-Cursors{,-White}
cp -dr --no-preserve='ownership' dist/* $out/share/icons/Vimix-Cursors
cp -dr --no-preserve='ownership' dist-white/* $out/share/icons/Vimix-Cursors-White
'';
meta = with lib; {
description = "An x-cursor theme inspired by Materia design and based on capitaine-cursors";
homepage = "https://github.com/vinceliuice/Vimix-cursors";
license = licenses.gpl3Only;
platforms = platforms.all;
maintainers = with maintainers; [ redxtech ];
};
}
+3
View File
@@ -17,6 +17,9 @@ let
gmenuharness = callPackage ./development/gmenuharness { };
libusermetrics = callPackage ./development/libusermetrics { };
lomiri-api = callPackage ./development/lomiri-api { };
#### Services
biometryd = callPackage ./services/biometryd { };
};
in
lib.makeScope libsForQt5.newScope packages
@@ -0,0 +1,137 @@
{ stdenv
, lib
, fetchFromGitLab
, fetchpatch
, gitUpdater
, testers
, boost
, cmake
, cmake-extras
, dbus
, dbus-cpp
, gtest
, libapparmor
, libelf
, pkg-config
, process-cpp
, properties-cpp
, qtbase
, qtdeclarative
, sqlite
}:
stdenv.mkDerivation (finalAttrs: {
pname = "biometryd";
version = "0.3.0";
src = fetchFromGitLab {
owner = "ubports";
repo = "development/core/biometryd";
rev = finalAttrs.version;
hash = "sha256-b095rsQnd63Ziqe+rn3ROo4LGXZxZ3Sa6h3apzCuyCs=";
};
outputs = [
"out"
"dev"
];
patches = [
# https://gitlab.com/ubports/development/core/biometryd/-/merge_requests/31
(fetchpatch {
url = "https://gitlab.com/OPNA2608/biometryd/-/commit/d01d979e4f98c6473761d1ace308aa182017804e.patch";
hash = "sha256-JxL3BLuh33ptfneU1y2qNGFKpeMlZlTMwCK97Rk3aTA=";
})
(fetchpatch {
url = "https://gitlab.com/OPNA2608/biometryd/-/commit/3cec6a3d42ea6aba8892da2c771b317f44daf9e2.patch";
hash = "sha256-Ij/aio38WmZ+NsUSbM195Gwb83goWIcCnJvGwAOJi50=";
})
(fetchpatch {
url = "https://gitlab.com/OPNA2608/biometryd/-/commit/e89bd9444bc1cfe84a9aa93faa23057c80f39564.patch";
hash = "sha256-1vEG349X9+SvY/f3no/l5cMVGpdzC8h/8XOZwL/70Dc=";
})
# https://gitlab.com/ubports/development/core/biometryd/-/merge_requests/32
(fetchpatch {
url = "https://gitlab.com/OPNA2608/biometryd/-/commit/9e52fad0139c5a45f69e6a6256b2b5ff54f77740.patch";
hash = "sha256-DZSdzKq6EYgAllKSDgkGk2g57zHN+gI5fOoj7U5AcKY=";
})
];
postPatch = ''
# Remove with !31 patches, fetchpatch can't apply renames
pushd data
for type in conf service; do
mv biometryd.$type biometryd.$type.in
substituteInPlace biometryd.$type.in \
--replace '/usr/bin' "\''${CMAKE_INSTALL_FULL_BINDIR}"
done
popd
# Uses pkg_get_variable, cannot substitute prefix with that
substituteInPlace CMakeLists.txt \
--replace 'pkg_get_variable(SYSTEMD_SYSTEM_UNIT_DIR systemd systemdsystemunitdir)' 'set(SYSTEMD_SYSTEM_UNIT_DIR "${placeholder "out"}/lib/systemd/system")'
substituteInPlace src/biometry/qml/Biometryd/CMakeLists.txt \
--replace "\''${CMAKE_INSTALL_LIBDIR}/qt5/qml" "\''${CMAKE_INSTALL_PREFIX}/${qtbase.qtQmlPrefix}"
'' + lib.optionalString (!finalAttrs.doCheck) ''
sed -i -e '/add_subdirectory(tests)/d' CMakeLists.txt
'';
strictDeps = true;
nativeBuildInputs = [
cmake
pkg-config
qtdeclarative # qmlplugindump
];
buildInputs = [
boost
cmake-extras
dbus
dbus-cpp
libapparmor
libelf
process-cpp
properties-cpp
qtbase
qtdeclarative
sqlite
];
checkInputs = [
gtest
];
dontWrapQtApps = true;
cmakeFlags = [
"-DENABLE_WERROR=OFF"
"-DWITH_HYBRIS=OFF"
];
preBuild = ''
# Generating plugins.qmltypes (also used in checkPhase?)
export QT_PLUGIN_PATH=${lib.getBin qtbase}/${qtbase.qtPluginPrefix}
'';
doCheck = stdenv.buildPlatform.canExecute stdenv.hostPlatform;
meta = with lib; {
description = "Mediates/multiplexes access to biometric devices";
longDescription = ''
biometryd mediates and multiplexes access to biometric devices present
on the system, enabling applications and system components to leverage
them for identification and verification of users.
'';
homepage = "https://gitlab.com/ubports/development/core/biometryd";
license = licenses.lgpl3Only;
maintainers = teams.lomiri.members;
mainProgram = "biometryd";
platforms = platforms.linux;
pkgConfigModules = [
"biometryd"
];
};
})
@@ -1,15 +1,25 @@
{ lib, mkXfceDerivation, dbus, dbus-glib
, gst_all_1, gtk3, libnotify, libxfce4ui, libxfce4util
, taglib, xfconf }:
{ lib
, mkXfceDerivation
, dbus
, dbus-glib
, gst_all_1
, gtk3
, libnotify
, libX11
, libxfce4ui
, libxfce4util
, taglib
, xfconf
}:
# Doesn't seem to find H.264 codec even though built with gst-plugins-bad.
mkXfceDerivation {
category = "apps";
pname = "parole";
version = "4.18.0";
version = "4.18.1";
sha256 = "sha256-TLH9ZUggjclJlbBg3EBVgbcrdiMZ8n+cGDgfNgYNiPI=";
sha256 = "sha256-g+Wy90tHpCeylbU7aUa8578ehmuyWI5WlCK7YdJKlNQ=";
postPatch = ''
substituteInPlace src/plugins/mpris2/Makefile.am \
@@ -25,6 +35,7 @@ mkXfceDerivation {
gst-plugins-ugly
gtk3
libnotify
libX11
libxfce4ui
libxfce4util
taglib
+2 -2
View File
@@ -16,9 +16,9 @@
mkXfceDerivation {
category = "xfce";
pname = "tumbler";
version = "4.18.1";
version = "4.18.2";
sha256 = "sha256-hn77W8IsvwNc9xSuDe9rXw9499olOvvJ2P7q+26HIG8=";
sha256 = "sha256-thioE0q2qnV4weJFPz8OWoHIRuUcXnQEviwBtCWsSV4=";
buildInputs = [
libxfce4util
@@ -12,9 +12,9 @@
mkXfceDerivation {
category = "xfce";
pname = "xfce4-power-manager";
version = "4.18.2";
version = "4.18.3";
sha256 = "sha256-1+DP5CACzzj96FyRTeCdVEFORnpzFT49d9Uk1iijbFs=";
sha256 = "sha256-CuW2siApho7u8P01t15dAiqNAiwQzAMZsEugYuKN4kM=";
buildInputs = [
gtk3
@@ -16,9 +16,9 @@
mkXfceDerivation {
category = "xfce";
pname = "xfce4-settings";
version = "4.18.3";
version = "4.18.4";
sha256 = "sha256-QGh5th790qkvqchUfi+kOAJ9A1M+zEIzMxOM5eCGPEk=";
sha256 = "sha256-f6ldTmTSvfRjn6j/LKIoFI3cbYZFtNdnAq3dQewc948=";
postPatch = ''
for f in xfsettingsd/pointers.c dialogs/mouse-settings/main.c; do
+2 -2
View File
@@ -2,11 +2,11 @@
stdenvNoCC.mkDerivation rec {
pname = "flix";
version = "0.41.0";
version = "0.42.0";
src = fetchurl {
url = "https://github.com/flix/flix/releases/download/v${version}/flix.jar";
sha256 = "sha256-bDeqwk+grkCxmGE9H8Ks7Q8KvLxNCzaLe44DlR6E7YE=";
sha256 = "sha256-fkYyJxBlJWUkXGgcszerNKFNEFRIOm6tUyiTZj0q11k=";
};
dontUnpack = true;
@@ -6,7 +6,7 @@
, boehmgc
, openssl
, zlib
, odbcSupport ? true
, odbcSupport ? !stdenv.isDarwin
, libiodbc
}:
@@ -31,8 +31,10 @@ stdenv.mkDerivation rec {
buildInputs = [ libffi boehmgc openssl zlib ] ++ lib.optional odbcSupport libiodbc;
env.NIX_CFLAGS_COMPILE = lib.optionalString stdenv.isDarwin "-Wno-error=int-conversion";
meta = with lib; {
broken = stdenv.isDarwin;
broken = stdenv.isDarwin && stdenv.isAarch64;
description = "An R6RS/R7RS Scheme system";
longDescription = ''
Sagittarius Scheme is a free Scheme implementation supporting
@@ -20,7 +20,7 @@
} @ args:
let
inherit (lib) getVersion versionAtLeast optional;
inherit (lib) getVersion versionAtLeast optional concatStringsSep;
in
assert versionAtLeast (getVersion erlang) minimumOTPVersion;
@@ -36,7 +36,12 @@ stdenv.mkDerivation ({
LANG = "C.UTF-8";
LC_TYPE = "C.UTF-8";
buildFlags = optional debugInfo "ERL_COMPILER_OPTIONS=debug_info";
ERLC_OPTS =
let
erlc_opts = [ "deterministic" ]
++ optional debugInfo "debug_info";
in
"[${concatStringsSep "," erlc_opts}]";
preBuild = ''
patchShebangs ${escriptPath} || true
@@ -12,23 +12,24 @@ to update all non-pinned libraries in that folder.
"""
import argparse
import collections
import json
import logging
import os
import re
import requests
from concurrent.futures import ThreadPoolExecutor as Pool
from packaging.version import Version as _Version
from packaging.version import InvalidVersion
from packaging.specifiers import SpecifierSet
from typing import Optional, Any
import collections
import subprocess
from concurrent.futures import ThreadPoolExecutor as Pool
from typing import Any, Optional
import requests
from packaging.specifiers import SpecifierSet
from packaging.version import InvalidVersion
from packaging.version import Version as _Version
INDEX = "https://pypi.io/pypi"
"""url of PyPI"""
EXTENSIONS = ['tar.gz', 'tar.bz2', 'tar', 'zip', '.whl']
EXTENSIONS = ["tar.gz", "tar.bz2", "tar", "zip", ".whl"]
"""Permitted file extensions. These are evaluated from left to right and the first occurance is returned."""
PRERELEASES = False
@@ -37,13 +38,16 @@ BULK_UPDATE = False
GIT = "git"
NIXPKGS_ROOT = subprocess.check_output(["git", "rev-parse", "--show-toplevel"]).decode('utf-8').strip()
NIXPKGS_ROOT = (
subprocess.check_output(["git", "rev-parse", "--show-toplevel"])
.decode("utf-8")
.strip()
)
logging.basicConfig(level=logging.INFO)
class Version(_Version, collections.abc.Sequence):
def __init__(self, version):
super().__init__(version)
# We cannot use `str(Version(0.04.21))` because that becomes `0.4.21`
@@ -65,7 +69,7 @@ def _get_values(attribute, text):
:returns: List of matches.
"""
regex = fr'{re.escape(attribute)}\s+=\s+"(.*)";'
regex = rf'{re.escape(attribute)}\s+=\s+"(.*)";'
regex = re.compile(regex)
values = regex.findall(text)
return values
@@ -73,14 +77,19 @@ def _get_values(attribute, text):
def _get_attr_value(attr_path: str) -> Optional[Any]:
try:
response = subprocess.check_output([
"nix",
"--extra-experimental-features", "nix-command",
"eval",
"-f", f"{NIXPKGS_ROOT}/default.nix",
"--json",
f"{attr_path}"
])
response = subprocess.check_output(
[
"nix",
"--extra-experimental-features",
"nix-command",
"eval",
"-f",
f"{NIXPKGS_ROOT}/default.nix",
"--json",
f"{attr_path}",
],
stderr=subprocess.DEVNULL,
)
return json.loads(response.decode())
except (subprocess.CalledProcessError, ValueError):
return None
@@ -100,12 +109,13 @@ def _get_unique_value(attribute, text):
else:
raise ValueError("no value found for {}".format(attribute))
def _get_line_and_value(attribute, text, value=None):
"""Match attribute in text. Return the line and the value of the attribute."""
if value is None:
regex = rf'({re.escape(attribute)}\s+=\s+\"(.*)\";)'
regex = rf"({re.escape(attribute)}\s+=\s+\"(.*)\";)"
else:
regex = rf'({re.escape(attribute)}\s+=\s+\"({re.escape(value)})\";)'
regex = rf"({re.escape(attribute)}\s+=\s+\"({re.escape(value)})\";)"
regex = re.compile(regex)
results = regex.findall(text)
n = len(results)
@@ -138,7 +148,7 @@ def _fetch_page(url):
def _fetch_github(url):
headers = {}
token = os.environ.get('GITHUB_API_TOKEN')
token = os.environ.get("GITHUB_API_TOKEN")
if token:
headers["Authorization"] = f"token {token}"
r = requests.get(url, headers=headers)
@@ -151,31 +161,26 @@ def _fetch_github(url):
def _hash_to_sri(algorithm, value):
"""Convert a hash to its SRI representation"""
return subprocess.check_output([
"nix",
"hash",
"to-sri",
"--type", algorithm,
value
]).decode().strip()
return (
subprocess.check_output(["nix", "hash", "to-sri", "--type", algorithm, value])
.decode()
.strip()
)
def _skip_bulk_update(attr_name: str) -> bool:
return bool(_get_attr_value(
f"{attr_name}.skipBulkUpdate"
))
return bool(_get_attr_value(f"{attr_name}.skipBulkUpdate"))
SEMVER = {
'major' : 0,
'minor' : 1,
'patch' : 2,
"major": 0,
"minor": 1,
"patch": 2,
}
def _determine_latest_version(current_version, target, versions):
"""Determine latest version, given `target`.
"""
"""Determine latest version, given `target`."""
current_version = Version(current_version)
def _parse_versions(versions):
@@ -193,7 +198,7 @@ def _determine_latest_version(current_version, target, versions):
if len(ceiling) == 0:
ceiling = None
else:
ceiling[-1]+=1
ceiling[-1] += 1
ceiling = Version(".".join(map(str, ceiling)))
# We do not want prereleases
@@ -210,17 +215,19 @@ def _get_latest_version_pypi(package, extension, current_version, target):
url = "{}/{}/json".format(INDEX, package)
json = _fetch_page(url)
versions = json['releases'].keys()
versions = json["releases"].keys()
version = _determine_latest_version(current_version, target, versions)
try:
releases = json['releases'][version]
releases = json["releases"][version]
except KeyError as e:
raise KeyError('Could not find version {} for {}'.format(version, package)) from e
raise KeyError(
"Could not find version {} for {}".format(version, package)
) from e
for release in releases:
if release['filename'].endswith(extension):
if release["filename"].endswith(extension):
# TODO: In case of wheel we need to do further checks!
sha256 = release['digests']['sha256']
sha256 = release["digests"]["sha256"]
break
else:
sha256 = None
@@ -240,33 +247,40 @@ def _get_latest_version_github(package, extension, current_version, target):
attr_path = os.environ.get("UPDATE_NIX_ATTR_PATH", f"python3Packages.{package}")
try:
homepage = subprocess.check_output(
["nix", "eval", "-f", f"{NIXPKGS_ROOT}/default.nix", "--raw", f"{attr_path}.src.meta.homepage"])\
.decode('utf-8')
[
"nix",
"eval",
"-f",
f"{NIXPKGS_ROOT}/default.nix",
"--raw",
f"{attr_path}.src.meta.homepage",
]
).decode("utf-8")
except Exception as e:
raise ValueError(f"Unable to determine homepage: {e}")
owner_repo = homepage[len("https://github.com/"):] # remove prefix
owner_repo = homepage[len("https://github.com/") :] # remove prefix
owner, repo = owner_repo.split("/")
url = f"https://api.github.com/repos/{owner}/{repo}/releases"
all_releases = _fetch_github(url)
releases = list(filter(lambda x: not x['prerelease'], all_releases))
releases = list(filter(lambda x: not x["prerelease"], all_releases))
if len(releases) == 0:
raise ValueError(f"{homepage} does not contain any stable releases")
versions = map(lambda x: strip_prefix(x['tag_name']), releases)
versions = map(lambda x: strip_prefix(x["tag_name"]), releases)
version = _determine_latest_version(current_version, target, versions)
release = next(filter(lambda x: strip_prefix(x['tag_name']) == version, releases))
prefix = get_prefix(release['tag_name'])
release = next(filter(lambda x: strip_prefix(x["tag_name"]) == version, releases))
prefix = get_prefix(release["tag_name"])
# some attributes require using the fetchgit
git_fetcher_args = []
if (_get_attr_value(f"{attr_path}.src.fetchSubmodules")):
if _get_attr_value(f"{attr_path}.src.fetchSubmodules"):
git_fetcher_args.append("--fetch-submodules")
if (_get_attr_value(f"{attr_path}.src.fetchLFS")):
if _get_attr_value(f"{attr_path}.src.fetchLFS"):
git_fetcher_args.append("--fetch-lfs")
if (_get_attr_value(f"{attr_path}.src.leaveDotGit")):
if _get_attr_value(f"{attr_path}.src.leaveDotGit"):
git_fetcher_args.append("--leave-dotGit")
if git_fetcher_args:
@@ -274,8 +288,10 @@ def _get_latest_version_github(package, extension, current_version, target):
cmd = [
"nix-prefetch-git",
f"https://github.com/{owner}/{repo}.git",
"--hash", algorithm,
"--rev", f"refs/tags/{release['tag_name']}"
"--hash",
algorithm,
"--rev",
f"refs/tags/{release['tag_name']}",
]
cmd.extend(git_fetcher_args)
response = subprocess.check_output(cmd)
@@ -283,45 +299,60 @@ def _get_latest_version_github(package, extension, current_version, target):
hash = _hash_to_sri(algorithm, document[algorithm])
else:
try:
hash = subprocess.check_output([
"nix-prefetch-url",
"--type", "sha256",
"--unpack",
f"{release['tarball_url']}"
], stderr=subprocess.DEVNULL).decode('utf-8').strip()
hash = (
subprocess.check_output(
[
"nix-prefetch-url",
"--type",
"sha256",
"--unpack",
f"{release['tarball_url']}",
],
stderr=subprocess.DEVNULL,
)
.decode("utf-8")
.strip()
)
except (subprocess.CalledProcessError, UnicodeError):
# this may fail if they have both a branch and a tag of the same name, attempt tag name
tag_url = str(release['tarball_url']).replace("tarball","tarball/refs/tags")
hash = subprocess.check_output([
"nix-prefetch-url",
"--type", "sha256",
"--unpack",
tag_url
], stderr=subprocess.DEVNULL).decode('utf-8').strip()
tag_url = str(release["tarball_url"]).replace(
"tarball", "tarball/refs/tags"
)
hash = (
subprocess.check_output(
["nix-prefetch-url", "--type", "sha256", "--unpack", tag_url],
stderr=subprocess.DEVNULL,
)
.decode("utf-8")
.strip()
)
return version, hash, prefix
FETCHERS = {
'fetchFromGitHub' : _get_latest_version_github,
'fetchPypi' : _get_latest_version_pypi,
'fetchurl' : _get_latest_version_pypi,
"fetchFromGitHub": _get_latest_version_github,
"fetchPypi": _get_latest_version_pypi,
"fetchurl": _get_latest_version_pypi,
}
DEFAULT_SETUPTOOLS_EXTENSION = 'tar.gz'
DEFAULT_SETUPTOOLS_EXTENSION = "tar.gz"
FORMATS = {
'setuptools' : DEFAULT_SETUPTOOLS_EXTENSION,
'wheel' : 'whl',
'pyproject' : 'tar.gz',
'flit' : 'tar.gz'
"setuptools": DEFAULT_SETUPTOOLS_EXTENSION,
"wheel": "whl",
"pyproject": "tar.gz",
"flit": "tar.gz",
}
def _determine_fetcher(text):
# Count occurrences of fetchers.
nfetchers = sum(text.count('src = {}'.format(fetcher)) for fetcher in FETCHERS.keys())
nfetchers = sum(
text.count("src = {}".format(fetcher)) for fetcher in FETCHERS.keys()
)
if nfetchers == 0:
raise ValueError("no fetcher.")
elif nfetchers > 1:
@@ -329,7 +360,7 @@ def _determine_fetcher(text):
else:
# Then we check which fetcher to use.
for fetcher in FETCHERS.keys():
if 'src = {}'.format(fetcher) in text:
if "src = {}".format(fetcher) in text:
return fetcher
@@ -341,47 +372,46 @@ def _determine_extension(text, fetcher):
- fetchurl, we determine the extension from the url.
- fetchFromGitHub we simply use `.tar.gz`.
"""
if fetcher == 'fetchPypi':
if fetcher == "fetchPypi":
try:
src_format = _get_unique_value('format', text)
src_format = _get_unique_value("format", text)
except ValueError:
src_format = None # format was not given
src_format = None # format was not given
try:
extension = _get_unique_value('extension', text)
extension = _get_unique_value("extension", text)
except ValueError:
extension = None # extension was not given
extension = None # extension was not given
if extension is None:
if src_format is None:
src_format = 'setuptools'
elif src_format == 'other':
src_format = "setuptools"
elif src_format == "other":
raise ValueError("Don't know how to update a format='other' package.")
extension = FORMATS[src_format]
elif fetcher == 'fetchurl':
url = _get_unique_value('url', text)
elif fetcher == "fetchurl":
url = _get_unique_value("url", text)
extension = os.path.splitext(url)[1]
if 'pypi' not in url:
raise ValueError('url does not point to PyPI.')
if "pypi" not in url:
raise ValueError("url does not point to PyPI.")
elif fetcher == 'fetchFromGitHub':
elif fetcher == "fetchFromGitHub":
extension = "tar.gz"
return extension
def _update_package(path, target):
# Read the expression
with open(path, 'r') as f:
with open(path, "r") as f:
text = f.read()
# Determine pname. Many files have more than one pname
pnames = _get_values('pname', text)
pnames = _get_values("pname", text)
# Determine version.
version = _get_unique_value('version', text)
version = _get_unique_value("version", text)
# First we check how many fetchers are mentioned.
fetcher = _determine_fetcher(text)
@@ -393,8 +423,12 @@ def _update_package(path, target):
for pname in pnames:
if BULK_UPDATE and _skip_bulk_update(f"python3Packages.{pname}"):
raise ValueError(f"Bulk update skipped for {pname}")
elif _get_attr_value(f"python3Packages.{pname}.cargoDeps") is not None:
raise ValueError(f"Cargo dependencies are unsupported, skipping {pname}")
try:
new_version, new_sha256, prefix = FETCHERS[fetcher](pname, extension, version, target)
new_version, new_sha256, prefix = FETCHERS[fetcher](
pname, extension, version, target
)
successful_fetch = True
break
except ValueError:
@@ -411,7 +445,7 @@ def _update_package(path, target):
if not new_sha256:
raise ValueError("no file available for {}.".format(pname))
text = _replace_value('version', new_version, text)
text = _replace_value("version", new_version, text)
# hashes from pypi are 16-bit encoded sha256's, normalize it to sri to avoid merge conflicts
# sri hashes have been the default format since nix 2.4+
@@ -421,16 +455,16 @@ def _update_package(path, target):
if old_hash := _get_attr_value(f"python3Packages.{pname}.src.outputHash"):
# fetchers can specify a sha256, or a sri hash
try:
text = _replace_value('hash', sri_hash, text, old_hash)
text = _replace_value("hash", sri_hash, text, old_hash)
except ValueError:
text = _replace_value('sha256', sri_hash, text, old_hash)
text = _replace_value("sha256", sri_hash, text, old_hash)
else:
raise ValueError(f"Unable to retrieve old hash for {pname}")
if fetcher == 'fetchFromGitHub':
if fetcher == "fetchFromGitHub":
# in the case of fetchFromGitHub, it's common to see `rev = version;` or `rev = "v${version}";`
# in which no string value is meant to be substituted. However, we can just overwrite the previous value.
regex = r'(rev\s+=\s+[^;]*;)'
regex = r"(rev\s+=\s+[^;]*;)"
regex = re.compile(regex)
matches = regex.findall(text)
n = len(matches)
@@ -442,30 +476,33 @@ def _update_package(path, target):
match = matches[0]
text = text.replace(match, f'rev = "refs/tags/{prefix}${{version}}";')
# incase there's no prefix, just rewrite without interpolation
text = text.replace('"${version}";', 'version;')
text = text.replace('"${version}";', "version;")
with open(path, 'w') as f:
with open(path, "w") as f:
f.write(text)
logging.info("Path {}: updated {} from {} to {}".format(path, pname, version, new_version))
logging.info(
"Path {}: updated {} from {} to {}".format(
path, pname, version, new_version
)
)
result = {
'path' : path,
'target': target,
'pname': pname,
'old_version' : version,
'new_version' : new_version,
"path": path,
"target": target,
"pname": pname,
"old_version": version,
"new_version": new_version,
#'fetcher' : fetcher,
}
}
return result
def _update(path, target):
# We need to read and modify a Nix expression.
if os.path.isdir(path):
path = os.path.join(path, 'default.nix')
path = os.path.join(path, "default.nix")
# If a default.nix does not exist, we quit.
if not os.path.isfile(path):
@@ -485,32 +522,41 @@ def _update(path, target):
def _commit(path, pname, old_version, new_version, pkgs_prefix="python: ", **kwargs):
"""Commit result.
"""
"""Commit result."""
msg = f'{pkgs_prefix}{pname}: {old_version} -> {new_version}'
msg = f"{pkgs_prefix}{pname}: {old_version} -> {new_version}"
if changelog := _get_attr_value(f"{pkgs_prefix}{pname}.meta.changelog"):
msg += f"\n\n{changelog}"
try:
subprocess.check_call([GIT, 'add', path])
subprocess.check_call([GIT, 'commit', '-m', msg])
subprocess.check_call([GIT, "add", path])
subprocess.check_call([GIT, "commit", "-m", msg])
except subprocess.CalledProcessError as e:
subprocess.check_call([GIT, 'checkout', path])
raise subprocess.CalledProcessError(f'Could not commit {path}') from e
subprocess.check_call([GIT, "checkout", path])
raise subprocess.CalledProcessError(f"Could not commit {path}") from e
return True
def main():
epilog = """
environment variables:
GITHUB_API_TOKEN\tGitHub API token used when updating github packages
"""
parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, epilog=epilog)
parser.add_argument('package', type=str, nargs='+')
parser.add_argument('--target', type=str, choices=SEMVER.keys(), default='major')
parser.add_argument('--commit', action='store_true', help='Create a commit for each package update')
parser.add_argument('--use-pkgs-prefix', action='store_true', help='Use python3Packages.${pname}: instead of python: ${pname}: when making commits')
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter, epilog=epilog
)
parser.add_argument("package", type=str, nargs="+")
parser.add_argument("--target", type=str, choices=SEMVER.keys(), default="major")
parser.add_argument(
"--commit", action="store_true", help="Create a commit for each package update"
)
parser.add_argument(
"--use-pkgs-prefix",
action="store_true",
help="Use python3Packages.${pname}: instead of python: ${pname}: when making commits",
)
args = parser.parse_args()
target = args.target
@@ -545,6 +591,5 @@ environment variables:
logging.info("{} package(s) updated".format(count))
if __name__ == '__main__':
if __name__ == "__main__":
main()
@@ -1,6 +1,7 @@
{ lib
, stdenv
, fetchFromGitHub
, cctools-port
, perl
, CoreServices
, ApplicationServices
@@ -29,6 +30,10 @@ stdenv.mkDerivation rec {
--replace '`sw_vers -productVersion`' '"$MACOSX_DEPLOYMENT_TARGET"'
'';
nativeBuildInputs = lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [
cctools-port
];
buildInputs = [ perl ] ++ lib.optionals stdenv.isDarwin [ CoreServices ApplicationServices ];
doCheck = false; # MoarVM does not come with its own test suite
@@ -2,19 +2,19 @@
rustPlatform.buildRustPackage rec {
pname = "wasmtime";
version = "15.0.0";
version = "15.0.1";
src = fetchFromGitHub {
owner = "bytecodealliance";
repo = pname;
rev = "v${version}";
hash = "sha256-oX8xhSyK7D5gFvgTJuXK59kcuYDa/9w25ndfwfhGPDE=";
hash = "sha256-9vArmudz1Avxz46IS9FZIKbs8wZXoeWMd/FGLmpPitw=";
fetchSubmodules = true;
};
# Disable cargo-auditable until https://github.com/rust-secure-code/cargo-auditable/issues/124 is solved.
auditable = false;
cargoHash = "sha256-cTQrC4xXgx6HMMq5TqGnFLhGAHGt57zKXp1Cc8jEX8Y=";
cargoHash = "sha256-/mX9zUN+dZoOCOPMeWCJ9U7KfI6JnFl8B2leYosy2jQ=";
cargoBuildFlags = [ "--package" "wasmtime-cli" "--package" "wasmtime-c-api" ];
outputs = [ "out" "dev" ];
@@ -24,13 +24,13 @@ let
in
stdenv.mkDerivation rec {
pname = "ctranslate2";
version = "3.22.0";
version = "3.23.0";
src = fetchFromGitHub {
owner = "OpenNMT";
repo = "CTranslate2";
rev = "v${version}";
hash = "sha256-Fw0pMTc0Zmr4RfH2rdPgpOODZW9CL5UbDbIeH6A4zZQ=";
hash = "sha256-jqeLNKOGdGtAVx7ExGGDxxgi5zDmQgmJ6bxIuguaM3k=";
fetchSubmodules = true;
};

Some files were not shown because too many files have changed in this diff Show More