Merge master into haskell-updates

This commit is contained in:
github-actions[bot] 2024-03-28 00:12:55 +00:00 committed by GitHub
commit 8de0afeb83
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
237 changed files with 3875 additions and 1373 deletions

View file

@ -4745,6 +4745,12 @@
githubId = 4956158;
name = "Robin Stumm";
};
DerRockWolf = {
email = "git@rockwolf.eu";
github = "DerRockWolf";
githubId = 50499906;
name = "DerRockWolf";
};
DerTim1 = {
email = "tim.digel@active-group.de";
github = "DerTim1";
@ -4826,6 +4832,12 @@
github = "dfithian";
githubId = 8409320;
};
dflores = {
email = "dflores.country455@passinbox.com";
name = "David Flores";
github = "dflores1";
githubId = 8538265;
};
dfordivam = {
email = "dfordivam+nixpkgs@gmail.com";
github = "dfordivam";
@ -6795,6 +6807,15 @@
githubId = 21362942;
name = "Fugi";
};
funkeleinhorn = {
email = "git@funkeleinhorn.com";
github = "funkeleinhorn";
githubId = 103313934;
name = "Funkeleinhorn";
keys = [{
fingerprint = "689D 1C81 DA0D 1EB2 F029 D24E C7BE A25A 0A33 5A72";
}];
};
fusion809 = {
email = "brentonhorne77@gmail.com";
github = "fusion809";
@ -7459,6 +7480,13 @@
githubId = 201997;
name = "Eric Seidel";
};
grimmauld = {
name = "Sören Bender";
email = "soeren@benjos.de";
github = "LordGrimmauld";
githubId = 49513131;
matrix = "@grimmauld:grimmauld.de";
};
grindhold = {
name = "grindhold";
email = "grindhold+nix@skarphed.org";
@ -7788,6 +7816,12 @@
matrix = "@chris:netsoj.nl";
name = "Chris Josten";
};
hennk = {
email = "henning.kiel@gmail.com";
github = "hennk";
githubId = 328259;
name = "Henning Kiel";
};
henrikolsson = {
email = "henrik@fixme.se";
github = "henrikolsson";
@ -8666,6 +8700,12 @@
github = "j4m3s-s";
githubId = 9413812;
};
jab = {
name = "Joshua Bronson";
email = "jabronson@gmail.com";
github = "jab";
githubId = 64992;
};
jacbart = {
name = "Jack Bartlett";
email = "jacbart@gmail.com";
@ -10329,6 +10369,12 @@
githubId = 691290;
name = "Keshav Kini";
};
kintrix = {
email = "kintrix007@proton.me";
github = "kintrix007";
githubId = 60898798;
name = "kintrix";
};
kinzoku = {
email = "kinzokudev4869@gmail.com";
github = "kinzoku-dev";
@ -11497,6 +11543,15 @@
githubId = 3717454;
name = "Lucas Bergman";
};
lucas-deangelis = {
email = "deangelis.lucas@outlook.com";
github = "lucas-deangelis";
githubId = 55180995;
name = "Lucas De Angelis";
keys = [{
fingerprint = "3C8B D3AD 93BB 1F36 B8FF 30BD 8627 E5ED F74B 5BF4";
}];
};
lucasew = {
email = "lucas59356@gmail.com";
github = "lucasew";
@ -12495,6 +12550,12 @@
fingerprint = "D709 03C8 0BE9 ACDC 14F0 3BFB 77BF E531 397E DE94";
}];
};
mdorman = {
email = "mdorman@jaunder.io";
github = "mdorman";
githubId = 333344;
name = "Michael Alan Dorman";
};
mdr = {
email = "MattRussellUK@gmail.com";
github = "mdr";
@ -12526,6 +12587,12 @@
githubId = 1631737;
name = "Mikhail Medvedev";
};
meebey = {
email = "meebey@meebey.net";
github = "meebey";
githubId = 318066;
name = "Mirco Bauer";
};
megheaiulian = {
email = "iulian.meghea@gmail.com";
github = "megheaiulian";

View file

@ -32,6 +32,11 @@ In addition to numerous new and upgraded packages, this release has the followin
- Julia environments can now be built with arbitrary packages from the ecosystem using the `.withPackages` function. For example: `julia.withPackages ["Plots"]`.
- The PipeWire and WirePlumber modules have removed support for using
`environment.etc."pipewire/..."` and `environment.etc."wireplumber/..."`.
Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for PipeWire and
`services.pipewire.wireplumber.configPackages` for WirePlumber instead."
- A new option `systemd.sysusers.enable` was added. If enabled, users and
groups are created with systemd-sysusers instead of with a custom perl script.
@ -141,6 +146,9 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
- The `power.ups` module now generates `upsd.conf`, `upsd.users` and `upsmon.conf` automatically from a set of new configuration options. This breaks compatibility with existing `power.ups` setups where these files were created manually. Back up these files before upgrading NixOS.
- `programs.nix-ld.libraries` no longer sets `baseLibraries` via the option's default but in config and now merges any additional libraries with the default ones.
This means that `lib.mkForce` must be used to clear the list of default libraries.
- `pdns` was updated to version [v4.9.x](https://doc.powerdns.com/authoritative/changelog/4.9.html), which introduces breaking changes. Check out the [Upgrade Notes](https://doc.powerdns.com/authoritative/upgrading.html#to-4-9-0) for details.
- `unrar` was updated to v7. See [changelog](https://www.rarlab.com/unrar7notes.htm) for more information.
@ -441,6 +449,10 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
- `nextcloud-setup.service` no longer changes the group of each file & directory inside `/var/lib/nextcloud/{config,data,store-apps}` if one of these directories has the wrong owner group. This was part of transitioning the group used for `/var/lib/nextcloud`, but isn't necessary anymore.
- `services.kavita` now uses the freeform option `services.kavita.settings` for the application settings file.
The options `services.kavita.ipAdresses` and `services.kavita.port` now exist at `services.kavita.settings.IpAddresses`
and `services.kavita.settings.IpAddresses`.
- The `krb5` module has been rewritten and moved to `security.krb5`, moving all options but `security.krb5.enable` and `security.krb5.package` into `security.krb5.settings`.
- Gitea 1.21 upgrade has several breaking changes, including:

View file

@ -1250,6 +1250,5 @@ class Machine:
check_return=False,
check_output=False,
)
self.wait_for_console_text(r"systemd\[1\]:.*Switching root\.")
self.connected = False
self.connect()

View file

@ -193,6 +193,7 @@
./programs/gnome-disks.nix
./programs/gnome-terminal.nix
./programs/gnupg.nix
./programs/goldwarden.nix
./programs/gpaste.nix
./programs/gphoto2.nix
./programs/haguichi.nix
@ -1107,6 +1108,11 @@
./services/networking/rpcbind.nix
./services/networking/rxe.nix
./services/networking/sabnzbd.nix
./services/networking/scion/scion.nix
./services/networking/scion/scion-control.nix
./services/networking/scion/scion-daemon.nix
./services/networking/scion/scion-dispatcher.nix
./services/networking/scion/scion-router.nix
./services/networking/seafile.nix
./services/networking/searx.nix
./services/networking/shadowsocks.nix

View file

@ -0,0 +1,50 @@
{ lib, config, pkgs, ... }:
let
cfg = config.programs.goldwarden;
in
{
options.programs.goldwarden = {
enable = lib.mkEnableOption "Goldwarden";
package = lib.mkPackageOption pkgs "goldwarden" {};
useSshAgent = lib.mkEnableOption "Goldwarden's SSH Agent" // { default = true; };
};
config = lib.mkIf cfg.enable {
assertions = [{
assertion = cfg.useSshAgent -> !config.programs.ssh.startAgent;
message = "Only one ssh-agent can be used at a time.";
}];
environment = {
etc = lib.mkIf config.programs.chromium.enable {
"chromium/native-messaging-hosts/com.8bit.bitwarden.json".source = "${cfg.package}/etc/chromium/native-messaging-hosts/com.8bit.bitwarden.json";
"opt/chrome/native-messaging-hosts/com.8bit.bitwarden.json".source = "${cfg.package}/etc/chrome/native-messaging-hosts/com.8bit.bitwarden.json";
};
extraInit = lib.mkIf cfg.useSshAgent ''
if [ -z "$SSH_AUTH_SOCK" -a -n "$HOME" ]; then
export SSH_AUTH_SOCK="$HOME/.goldwarden-ssh-agent.sock"
fi
'';
systemPackages = [
# for cli and polkit action
cfg.package
# binary exec's into pinentry which should match the DE
config.programs.gnupg.agent.pinentryPackage
];
};
programs.firefox.nativeMessagingHosts.packages = [ cfg.package ];
# see https://github.com/quexten/goldwarden/blob/main/cmd/goldwarden.service
systemd.user.services.goldwarden = {
description = "Goldwarden daemon";
wantedBy = [ "graphical-session.target" ];
after = [ "graphical-session.target" ];
serviceConfig.ExecStart = "${lib.getExe cfg.package} daemonize";
path = [ config.programs.gnupg.agent.pinentryPackage ];
unitConfig.ConditionUser = "!@system";
};
};
}

View file

@ -3,7 +3,7 @@ let
cfg = config.programs.nix-ld;
nix-ld-libraries = pkgs.buildEnv {
name = "lb-library-path";
name = "ld-library-path";
pathsToLink = [ "/lib" ];
paths = map lib.getLib cfg.libraries;
# TODO make glibc here configurable?
@ -13,25 +13,6 @@ let
extraPrefix = "/share/nix-ld";
ignoreCollisions = true;
};
# We currently take all libraries from systemd and nix as the default.
# Is there a better list?
baseLibraries = with pkgs; [
zlib
zstd
stdenv.cc.cc
curl
openssl
attr
libssh
bzip2
libxml2
acl
libsodium
util-linux
xz
systemd
];
in
{
meta.maintainers = [ lib.maintainers.mic92 ];
@ -41,7 +22,7 @@ in
libraries = lib.mkOption {
type = lib.types.listOf lib.types.package;
description = lib.mdDoc "Libraries that automatically become available to all programs. The default set includes common libraries.";
default = baseLibraries;
default = [ ];
defaultText = lib.literalExpression "baseLibraries derived from systemd and nix dependencies.";
};
};
@ -57,5 +38,24 @@ in
NIX_LD = "/run/current-system/sw/share/nix-ld/lib/ld.so";
NIX_LD_LIBRARY_PATH = "/run/current-system/sw/share/nix-ld/lib";
};
# We currently take all libraries from systemd and nix as the default.
# Is there a better list?
programs.nix-ld.libraries = with pkgs; [
zlib
zstd
stdenv.cc.cc
curl
openssl
attr
libssh
bzip2
libxml2
acl
libsodium
util-linux
xz
systemd
];
};
}

View file

@ -1,14 +1,21 @@
# PipeWire service.
{ config, lib, pkgs, ... }:
with lib;
let
inherit (builtins) attrNames concatMap length;
inherit (lib) maintainers teams;
inherit (lib.attrsets) attrByPath attrsToList concatMapAttrs filterAttrs;
inherit (lib.lists) flatten optional optionals;
inherit (lib.modules) mkIf mkRemovedOptionModule;
inherit (lib.options) literalExpression mkEnableOption mkOption mkPackageOption;
inherit (lib.strings) concatMapStringsSep hasPrefix optionalString;
inherit (lib.types) attrsOf bool listOf package;
json = pkgs.formats.json {};
mapToFiles = location: config: concatMapAttrs (name: value: { "share/pipewire/${location}.conf.d/${name}.conf" = json.generate "${name}" value; }) config;
extraConfigPkgFromFiles = locations: filesSet: pkgs.runCommand "pipewire-extra-config" { } ''
mkdir -p ${lib.concatMapStringsSep " " (l: "$out/share/pipewire/${l}.conf.d") locations}
${lib.concatMapStringsSep ";" ({name, value}: "ln -s ${value} $out/${name}") (lib.attrsToList filesSet)}
mkdir -p ${concatMapStringsSep " " (l: "$out/share/pipewire/${l}.conf.d") locations}
${concatMapStringsSep ";" ({name, value}: "ln -s ${value} $out/${name}") (attrsToList filesSet)}
'';
cfg = config.services.pipewire;
enable32BitAlsaPlugins = cfg.alsa.support32Bit
@ -40,15 +47,15 @@ let
name = "pipewire-configs";
paths = configPackages
++ [ extraConfigPkg ]
++ lib.optionals cfg.wireplumber.enable cfg.wireplumber.configPackages;
++ optionals cfg.wireplumber.enable cfg.wireplumber.configPackages;
pathsToLink = [ "/share/pipewire" ];
};
requiredLv2Packages = lib.flatten
requiredLv2Packages = flatten
(
lib.concatMap
concatMap
(p:
lib.attrByPath ["passthru" "requiredLv2Packages"] [] p
attrByPath ["passthru" "requiredLv2Packages"] [] p
)
configPackages
);
@ -59,58 +66,58 @@ let
pathsToLink = [ "/lib/lv2" ];
};
in {
meta.maintainers = teams.freedesktop.members ++ [ lib.maintainers.k900 ];
meta.maintainers = teams.freedesktop.members ++ [ maintainers.k900 ];
###### interface
options = {
services.pipewire = {
enable = mkEnableOption (lib.mdDoc "PipeWire service");
enable = mkEnableOption "PipeWire service";
package = mkPackageOption pkgs "pipewire" { };
socketActivation = mkOption {
default = true;
type = types.bool;
description = lib.mdDoc ''
type = bool;
description = ''
Automatically run PipeWire when connections are made to the PipeWire socket.
'';
};
audio = {
enable = lib.mkOption {
type = lib.types.bool;
enable = mkOption {
type = bool;
# this is for backwards compatibility
default = cfg.alsa.enable || cfg.jack.enable || cfg.pulse.enable;
defaultText = lib.literalExpression "config.services.pipewire.alsa.enable || config.services.pipewire.jack.enable || config.services.pipewire.pulse.enable";
description = lib.mdDoc "Whether to use PipeWire as the primary sound server";
defaultText = literalExpression "config.services.pipewire.alsa.enable || config.services.pipewire.jack.enable || config.services.pipewire.pulse.enable";
description = "Whether to use PipeWire as the primary sound server";
};
};
alsa = {
enable = mkEnableOption (lib.mdDoc "ALSA support");
support32Bit = mkEnableOption (lib.mdDoc "32-bit ALSA support on 64-bit systems");
enable = mkEnableOption "ALSA support";
support32Bit = mkEnableOption "32-bit ALSA support on 64-bit systems";
};
jack = {
enable = mkEnableOption (lib.mdDoc "JACK audio emulation");
enable = mkEnableOption "JACK audio emulation";
};
raopOpenFirewall = mkOption {
type = lib.types.bool;
type = bool;
default = false;
description = lib.mdDoc ''
description = ''
Opens UDP/6001-6002, required by RAOP/Airplay for timing and control data.
'';
};
pulse = {
enable = mkEnableOption (lib.mdDoc "PulseAudio server emulation");
enable = mkEnableOption "PulseAudio server emulation";
};
systemWide = lib.mkOption {
type = lib.types.bool;
systemWide = mkOption {
type = bool;
default = false;
description = lib.mdDoc ''
description = ''
If true, a system-wide PipeWire service and socket is enabled
allowing all users in the "pipewire" group to use it simultaneously.
If false, then user units are used instead, restricting access to
@ -124,7 +131,7 @@ in {
extraConfig = {
pipewire = mkOption {
type = lib.types.attrsOf json.type;
type = attrsOf json.type;
default = {};
example = {
"10-clock-rate" = {
@ -138,7 +145,7 @@ in {
};
};
};
description = lib.mdDoc ''
description = ''
Additional configuration for the PipeWire server.
Every item in this attrset becomes a separate drop-in file in `/etc/pipewire/pipewire.conf.d`.
@ -157,7 +164,7 @@ in {
'';
};
client = mkOption {
type = lib.types.attrsOf json.type;
type = attrsOf json.type;
default = {};
example = {
"10-no-resample" = {
@ -166,7 +173,7 @@ in {
};
};
};
description = lib.mdDoc ''
description = ''
Additional configuration for the PipeWire client library, used by most applications.
Every item in this attrset becomes a separate drop-in file in `/etc/pipewire/client.conf.d`.
@ -177,7 +184,7 @@ in {
'';
};
client-rt = mkOption {
type = lib.types.attrsOf json.type;
type = attrsOf json.type;
default = {};
example = {
"10-alsa-linear-volume" = {
@ -186,7 +193,7 @@ in {
};
};
};
description = lib.mdDoc ''
description = ''
Additional configuration for the PipeWire client library, used by real-time applications and legacy ALSA clients.
Every item in this attrset becomes a separate drop-in file in `/etc/pipewire/client-rt.conf.d`.
@ -198,7 +205,7 @@ in {
'';
};
jack = mkOption {
type = lib.types.attrsOf json.type;
type = attrsOf json.type;
default = {};
example = {
"20-hide-midi" = {
@ -207,7 +214,7 @@ in {
};
};
};
description = lib.mdDoc ''
description = ''
Additional configuration for the PipeWire JACK server and client library.
Every item in this attrset becomes a separate drop-in file in `/etc/pipewire/jack.conf.d`.
@ -218,7 +225,7 @@ in {
'';
};
pipewire-pulse = mkOption {
type = lib.types.attrsOf json.type;
type = attrsOf json.type;
default = {};
example = {
"15-force-s16-info" = {
@ -232,7 +239,7 @@ in {
}];
};
};
description = lib.mdDoc ''
description = ''
Additional configuration for the PipeWire PulseAudio server.
Every item in this attrset becomes a separate drop-in file in `/etc/pipewire/pipewire-pulse.conf.d`.
@ -248,10 +255,32 @@ in {
};
};
configPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
configPackages = mkOption {
type = listOf package;
default = [];
description = lib.mdDoc ''
example = literalExpression ''[
(pkgs.writeTextDir "share/pipewire/pipewire.conf.d/10-loopback.conf" '''
context.modules = [
{ name = libpipewire-module-loopback
args = {
node.description = "Scarlett Focusrite Line 1"
capture.props = {
audio.position = [ FL ]
stream.dont-remix = true
node.target = "alsa_input.usb-Focusrite_Scarlett_Solo_USB_Y7ZD17C24495BC-00.analog-stereo"
node.passive = true
}
playback.props = {
node.name = "SF_mono_in_1"
media.class = "Audio/Source"
audio.position = [ MONO ]
}
}
}
]
''')
]'';
description = ''
List of packages that provide PipeWire configuration, in the form of
`share/pipewire/*/*.conf` files.
@ -260,11 +289,11 @@ in {
'';
};
extraLv2Packages = lib.mkOption {
type = lib.types.listOf lib.types.package;
extraLv2Packages = mkOption {
type = listOf package;
default = [];
example = lib.literalExpression "[ pkgs.lsp-plugins ]";
description = lib.mdDoc ''
example = literalExpression "[ pkgs.lsp-plugins ]";
description = ''
List of packages that provide LV2 plugins in `lib/lv2` that should
be made available to PipeWire for [filter chains][wiki-filter-chain].
@ -279,11 +308,11 @@ in {
};
imports = [
(lib.mkRemovedOptionModule ["services" "pipewire" "config"] ''
(mkRemovedOptionModule ["services" "pipewire" "config"] ''
Overriding default PipeWire configuration through NixOS options never worked correctly and is no longer supported.
Please create drop-in configuration files via `services.pipewire.extraConfig` instead.
'')
(lib.mkRemovedOptionModule ["services" "pipewire" "media-session"] ''
(mkRemovedOptionModule ["services" "pipewire" "media-session"] ''
pipewire-media-session is no longer supported upstream and has been removed.
Please switch to `services.pipewire.wireplumber` instead.
'')
@ -306,12 +335,12 @@ in {
message = "Using PipeWire's ALSA/PulseAudio compatibility layers requires running PipeWire as the sound server. Set `services.pipewire.audio.enable` to true.";
}
{
assertion = builtins.length
(builtins.attrNames
assertion = length
(attrNames
(
lib.filterAttrs
filterAttrs
(name: value:
lib.hasPrefix "pipewire/" name || name == "pipewire"
hasPrefix "pipewire/" name || name == "pipewire"
)
config.environment.etc
)) == 1;
@ -320,7 +349,7 @@ in {
];
environment.systemPackages = [ cfg.package ]
++ lib.optional cfg.jack.enable jack-libs;
++ optional cfg.jack.enable jack-libs;
systemd.packages = [ cfg.package ];
@ -336,16 +365,16 @@ in {
systemd.user.sockets.pipewire.enable = !cfg.systemWide;
systemd.user.services.pipewire.enable = !cfg.systemWide;
systemd.services.pipewire.environment.LV2_PATH = lib.mkIf cfg.systemWide "${lv2Plugins}/lib/lv2";
systemd.user.services.pipewire.environment.LV2_PATH = lib.mkIf (!cfg.systemWide) "${lv2Plugins}/lib/lv2";
systemd.services.pipewire.environment.LV2_PATH = mkIf cfg.systemWide "${lv2Plugins}/lib/lv2";
systemd.user.services.pipewire.environment.LV2_PATH = mkIf (!cfg.systemWide) "${lv2Plugins}/lib/lv2";
# Mask pw-pulse if it's not wanted
systemd.user.services.pipewire-pulse.enable = cfg.pulse.enable;
systemd.user.sockets.pipewire-pulse.enable = cfg.pulse.enable;
systemd.sockets.pipewire.wantedBy = lib.mkIf cfg.socketActivation [ "sockets.target" ];
systemd.user.sockets.pipewire.wantedBy = lib.mkIf cfg.socketActivation [ "sockets.target" ];
systemd.user.sockets.pipewire-pulse.wantedBy = lib.mkIf cfg.socketActivation [ "sockets.target" ];
systemd.sockets.pipewire.wantedBy = mkIf cfg.socketActivation [ "sockets.target" ];
systemd.user.sockets.pipewire.wantedBy = mkIf cfg.socketActivation [ "sockets.target" ];
systemd.user.sockets.pipewire-pulse.wantedBy = mkIf cfg.socketActivation [ "sockets.target" ];
services.udev.packages = [ cfg.package ];
@ -377,18 +406,18 @@ in {
};
environment.sessionVariables.LD_LIBRARY_PATH =
lib.mkIf cfg.jack.enable [ "${cfg.package.jack}/lib" ];
mkIf cfg.jack.enable [ "${cfg.package.jack}/lib" ];
networking.firewall.allowedUDPPorts = lib.mkIf cfg.raopOpenFirewall [ 6001 6002 ];
networking.firewall.allowedUDPPorts = mkIf cfg.raopOpenFirewall [ 6001 6002 ];
users = lib.mkIf cfg.systemWide {
users = mkIf cfg.systemWide {
users.pipewire = {
uid = config.ids.uids.pipewire;
group = "pipewire";
extraGroups = [
"audio"
"video"
] ++ lib.optional config.security.rtkit.enable "rtkit";
] ++ optional config.security.rtkit.enable "rtkit";
description = "PipeWire system service user";
isSystemUser = true;
home = "/var/lib/pipewire";

View file

@ -1,46 +1,65 @@
{ config, lib, pkgs, ... }:
let
inherit (builtins) attrNames concatMap length;
inherit (lib) maintainers;
inherit (lib.attrsets) attrByPath filterAttrs;
inherit (lib.lists) flatten optional;
inherit (lib.modules) mkIf;
inherit (lib.options) literalExpression mkOption;
inherit (lib.strings) hasPrefix;
inherit (lib.types) bool listOf package;
pwCfg = config.services.pipewire;
cfg = pwCfg.wireplumber;
pwUsedForAudio = pwCfg.audio.enable;
in
{
meta.maintainers = [ lib.maintainers.k900 ];
meta.maintainers = [ maintainers.k900 ];
options = {
services.pipewire.wireplumber = {
enable = lib.mkOption {
type = lib.types.bool;
default = config.services.pipewire.enable;
defaultText = lib.literalExpression "config.services.pipewire.enable";
description = lib.mdDoc "Whether to enable WirePlumber, a modular session / policy manager for PipeWire";
enable = mkOption {
type = bool;
default = pwCfg.enable;
defaultText = literalExpression "config.services.pipewire.enable";
description = "Whether to enable WirePlumber, a modular session / policy manager for PipeWire";
};
package = lib.mkOption {
type = lib.types.package;
package = mkOption {
type = package;
default = pkgs.wireplumber;
defaultText = lib.literalExpression "pkgs.wireplumber";
description = lib.mdDoc "The WirePlumber derivation to use.";
defaultText = literalExpression "pkgs.wireplumber";
description = "The WirePlumber derivation to use.";
};
configPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
configPackages = mkOption {
type = listOf package;
default = [ ];
description = lib.mdDoc ''
example = literalExpression ''[
(pkgs.writeTextDir "share/wireplumber/wireplumber.conf.d/10-bluez.conf" '''
monitor.bluez.properties = {
bluez5.roles = [ a2dp_sink a2dp_source bap_sink bap_source hsp_hs hsp_ag hfp_hf hfp_ag ]
bluez5.codecs = [ sbc sbc_xq aac ]
bluez5.enable-sbc-xq = true
bluez5.hfphsp-backend = "native"
}
''')
]'';
description = ''
List of packages that provide WirePlumber configuration, in the form of
`share/wireplumber/*/*.lua` files.
`share/wireplumber/*/*.conf` files.
LV2 dependencies will be picked up from config packages automatically
via `passthru.requiredLv2Packages`.
'';
};
extraLv2Packages = lib.mkOption {
type = lib.types.listOf lib.types.package;
extraLv2Packages = mkOption {
type = listOf package;
default = [];
example = lib.literalExpression "[ pkgs.lsp-plugins ]";
description = lib.mdDoc ''
example = literalExpression "[ pkgs.lsp-plugins ]";
description = ''
List of packages that provide LV2 plugins in `lib/lv2` that should
be made available to WirePlumber for [filter chains][wiki-filter-chain].
@ -78,8 +97,8 @@ in
'';
configPackages = cfg.configPackages
++ lib.optional (!pwUsedForAudio) pwNotForAudioConfigPkg
++ lib.optional config.services.pipewire.systemWide systemwideConfigPkg;
++ optional (!pwUsedForAudio) pwNotForAudioConfigPkg
++ optional pwCfg.systemWide systemwideConfigPkg;
configs = pkgs.buildEnv {
name = "wireplumber-configs";
@ -87,11 +106,11 @@ in
pathsToLink = [ "/share/wireplumber" ];
};
requiredLv2Packages = lib.flatten
requiredLv2Packages = flatten
(
lib.concatMap
concatMap
(p:
lib.attrByPath ["passthru" "requiredLv2Packages"] [] p
attrByPath ["passthru" "requiredLv2Packages"] [] p
)
configPackages
);
@ -102,19 +121,19 @@ in
pathsToLink = [ "/lib/lv2" ];
};
in
lib.mkIf cfg.enable {
mkIf cfg.enable {
assertions = [
{
assertion = !config.hardware.bluetooth.hsphfpd.enable;
message = "Using WirePlumber conflicts with hsphfpd, as it provides the same functionality. `hardware.bluetooth.hsphfpd.enable` needs be set to false";
}
{
assertion = builtins.length
(builtins.attrNames
assertion = length
(attrNames
(
lib.filterAttrs
filterAttrs
(name: value:
lib.hasPrefix "wireplumber/" name || name == "wireplumber"
hasPrefix "wireplumber/" name || name == "wireplumber"
)
config.environment.etc
)) == 1;
@ -128,19 +147,19 @@ in
systemd.packages = [ cfg.package ];
systemd.services.wireplumber.enable = config.services.pipewire.systemWide;
systemd.user.services.wireplumber.enable = !config.services.pipewire.systemWide;
systemd.services.wireplumber.enable = pwCfg.systemWide;
systemd.user.services.wireplumber.enable = !pwCfg.systemWide;
systemd.services.wireplumber.wantedBy = [ "pipewire.service" ];
systemd.user.services.wireplumber.wantedBy = [ "pipewire.service" ];
systemd.services.wireplumber.environment = lib.mkIf config.services.pipewire.systemWide {
systemd.services.wireplumber.environment = mkIf pwCfg.systemWide {
# Force WirePlumber to use system dbus.
DBUS_SESSION_BUS_ADDRESS = "unix:path=/run/dbus/system_bus_socket";
LV2_PATH = "${lv2Plugins}/lib/lv2";
};
systemd.user.services.wireplumber.environment.LV2_PATH =
lib.mkIf (!config.services.pipewire.systemWide) "${lv2Plugins}/lib/lv2";
mkIf (!pwCfg.systemWide) "${lv2Plugins}/lib/lv2";
};
}

View file

@ -0,0 +1,69 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.scion.scion-control;
toml = pkgs.formats.toml { };
defaultConfig = {
general = {
id = "cs";
config_dir = "/etc/scion";
reconnect_to_dispatcher = true;
};
beacon_db = {
connection = "/var/lib/scion-control/control.beacon.db";
};
path_db = {
connection = "/var/lib/scion-control/control.path.db";
};
trust_db = {
connection = "/var/lib/scion-control/control.trust.db";
};
log.console = {
level = "info";
};
};
configFile = toml.generate "scion-control.toml" (defaultConfig // cfg.settings);
in
{
options.services.scion.scion-control = {
enable = mkEnableOption (lib.mdDoc "the scion-control service");
settings = mkOption {
default = { };
type = toml.type;
example = literalExpression ''
{
path_db = {
connection = "/var/lib/scion-control/control.path.db";
};
log.console = {
level = "info";
};
}
'';
description = lib.mdDoc ''
scion-control configuration. Refer to
<https://docs.scion.org/en/latest/manuals/common.html>
for details on supported values.
'';
};
};
config = mkIf cfg.enable {
systemd.services.scion-control = {
description = "SCION Control Service";
after = [ "network-online.target" "scion-dispatcher.service" ];
wants = [ "network-online.target" "scion-dispatcher.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
Group = if (config.services.scion.scion-dispatcher.enable == true) then "scion" else null;
ExecStart = "${pkgs.scion}/bin/scion-control --config ${configFile}";
DynamicUser = true;
Restart = "on-failure";
BindPaths = [ "/dev/shm:/run/shm" ];
StateDirectory = "scion-control";
};
};
};
}

View file

@ -0,0 +1,64 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.scion.scion-daemon;
toml = pkgs.formats.toml { };
defaultConfig = {
general = {
id = "sd";
config_dir = "/etc/scion";
reconnect_to_dispatcher = true;
};
path_db = {
connection = "/var/lib/scion-daemon/sd.path.db";
};
trust_db = {
connection = "/var/lib/scion-daemon/sd.trust.db";
};
log.console = {
level = "info";
};
};
configFile = toml.generate "scion-daemon.toml" (defaultConfig // cfg.settings);
in
{
options.services.scion.scion-daemon = {
enable = mkEnableOption (lib.mdDoc "the scion-daemon service");
settings = mkOption {
default = { };
type = toml.type;
example = literalExpression ''
{
path_db = {
connection = "/var/lib/scion-daemon/sd.path.db";
};
log.console = {
level = "info";
};
}
'';
description = lib.mdDoc ''
scion-daemon configuration. Refer to
<https://docs.scion.org/en/latest/manuals/common.html>
for details on supported values.
'';
};
};
config = mkIf cfg.enable {
systemd.services.scion-daemon = {
description = "SCION Daemon";
after = [ "network-online.target" "scion-dispatcher.service" ];
wants = [ "network-online.target" "scion-dispatcher.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.scion}/bin/scion-daemon --config ${configFile}";
Restart = "on-failure";
DynamicUser = true;
StateDirectory = "scion-daemon";
};
};
};
}

View file

@ -0,0 +1,74 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.scion.scion-dispatcher;
toml = pkgs.formats.toml { };
defaultConfig = {
dispatcher = {
id = "dispatcher";
socket_file_mode = "0770";
application_socket = "/dev/shm/dispatcher/default.sock";
};
log.console = {
level = "info";
};
};
configFile = toml.generate "scion-dispatcher.toml" (defaultConfig // cfg.settings);
in
{
options.services.scion.scion-dispatcher = {
enable = mkEnableOption (lib.mdDoc "the scion-dispatcher service");
settings = mkOption {
default = { };
type = toml.type;
example = literalExpression ''
{
dispatcher = {
id = "dispatcher";
socket_file_mode = "0770";
application_socket = "/dev/shm/dispatcher/default.sock";
};
log.console = {
level = "info";
};
}
'';
description = lib.mdDoc ''
scion-dispatcher configuration. Refer to
<https://docs.scion.org/en/latest/manuals/common.html>
for details on supported values.
'';
};
};
config = mkIf cfg.enable {
# Needed for group ownership of the dispatcher socket
users.groups.scion = {};
# scion programs hardcode path to dispatcher in /run/shm, and is not
# configurable at runtime upstream plans to obsolete the dispatcher in
# favor of an SCMP daemon, at which point this can be removed.
system.activationScripts.scion-dispatcher = ''
ln -sf /dev/shm /run/shm
'';
systemd.services.scion-dispatcher = {
description = "SCION Dispatcher";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
Group = "scion";
DynamicUser = true;
BindPaths = [ "/dev/shm:/run/shm" ];
ExecStartPre = "${pkgs.coreutils}/bin/rm -rf /run/shm/dispatcher";
ExecStart = "${pkgs.scion}/bin/scion-dispatcher --config ${configFile}";
Restart = "on-failure";
StateDirectory = "scion-dispatcher";
};
};
};
}

View file

@ -0,0 +1,49 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.scion.scion-router;
toml = pkgs.formats.toml { };
defaultConfig = {
general = {
id = "br";
config_dir = "/etc/scion";
};
};
configFile = toml.generate "scion-router.toml" (defaultConfig // cfg.settings);
in
{
options.services.scion.scion-router = {
enable = mkEnableOption (lib.mdDoc "the scion-router service");
settings = mkOption {
default = { };
type = toml.type;
example = literalExpression ''
{
general.id = "br";
}
'';
description = lib.mdDoc ''
scion-router configuration. Refer to
<https://docs.scion.org/en/latest/manuals/common.html>
for details on supported values.
'';
};
};
config = mkIf cfg.enable {
systemd.services.scion-router = {
description = "SCION Router";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.scion}/bin/scion-router --config ${configFile}";
Restart = "on-failure";
DynamicUser = true;
StateDirectory = "scion-router";
};
};
};
}

View file

@ -0,0 +1,39 @@
{ config, lib, ... }:
with lib;
let
cfg = config.services.scion;
in
{
options.services.scion = {
enable = mkEnableOption (lib.mdDoc "all of the scion components and services");
bypassBootstrapWarning = mkOption {
type = types.bool;
default = false;
description = lib.mdDoc ''
bypass Nix warning about SCION PKI bootstrapping
'';
};
};
config = mkIf cfg.enable {
services.scion = {
scion-dispatcher.enable = true;
scion-daemon.enable = true;
scion-router.enable = true;
scion-control.enable = true;
};
assertions = [
{ assertion = cfg.bypassBootstrapWarning == true;
message = ''
SCION is a routing protocol and requires bootstrapping with a manual, imperative key signing ceremony. You may want to join an existing Isolation Domain (ISD) such as scionlab.org, or bootstrap your own. If you have completed and configured the public key infrastructure for SCION and are sure this process is complete, then add the following to your configuration:
services.scion.bypassBootstrapWarning = true;
refer to docs.scion.org for more information
'';
}
];
};
}

View file

@ -80,7 +80,7 @@ in
};
implicitPolicyTarget = mkOption {
type = policy;
type = types.enum [ "allow" "block" "reject" ];
default = "block";
description = lib.mdDoc ''
How to treat USB devices that don't match any rule in the policy.
@ -110,7 +110,7 @@ in
};
insertedDevicePolicy = mkOption {
type = policy;
type = types.enum [ "block" "reject" "apply-policy" ];
default = "apply-policy";
description = lib.mdDoc ''
How to treat USB devices that are already connected after the daemon

View file

@ -2,7 +2,18 @@
let
cfg = config.services.kavita;
in {
settingsFormat = pkgs.formats.json { };
appsettings = settingsFormat.generate "appsettings.json" ({ TokenKey = "@TOKEN@"; } // cfg.settings);
in
{
imports = [
(lib.mkChangedOptionModule [ "services" "kavita" "ipAdresses" ] [ "services" "kavita" "settings" "IpAddresses" ] (config:
let value = lib.getAttrFromPath [ "services" "kavita" "ipAdresses" ] config; in
lib.concatStringsSep "," value
))
(lib.mkRenamedOptionModule [ "services" "kavita" "port" ] [ "services" "kavita" "settings" "Port" ])
];
options.services.kavita = {
enable = lib.mkEnableOption (lib.mdDoc "Kavita reading server");
@ -27,16 +38,31 @@ in {
It can be generated with `head -c 32 /dev/urandom | base64`.
'';
};
port = lib.mkOption {
default = 5000;
type = lib.types.port;
description = lib.mdDoc "Port to bind to.";
};
ipAdresses = lib.mkOption {
default = ["0.0.0.0" "::"];
type = lib.types.listOf lib.types.str;
description = lib.mdDoc "IP Addresses to bind to. The default is to bind
to all IPv4 and IPv6 addresses.";
settings = lib.mkOption {
default = { };
description = lib.mdDoc ''
Kavita configuration options, as configured in {file}`appsettings.json`.
'';
type = lib.types.submodule {
freeformType = settingsFormat.type;
options = {
Port = lib.mkOption {
default = 5000;
type = lib.types.port;
description = lib.mdDoc "Port to bind to.";
};
IpAddresses = lib.mkOption {
default = "0.0.0.0,::";
type = lib.types.commas;
description = lib.mdDoc ''
IP Addresses to bind to. The default is to bind to all IPv4 and IPv6 addresses.
'';
};
};
};
};
};
@ -46,18 +72,15 @@ in {
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
preStart = ''
umask u=rwx,g=rx,o=
cat > "${cfg.dataDir}/config/appsettings.json" <<EOF
{
"TokenKey": "$(cat ${cfg.tokenKeyFile})",
"Port": ${toString cfg.port},
"IpAddresses": "${lib.concatStringsSep "," cfg.ipAdresses}"
}
EOF
install -m600 ${appsettings} ${lib.escapeShellArg cfg.dataDir}/config/appsettings.json
${pkgs.replace-secret}/bin/replace-secret '@TOKEN@' \
''${CREDENTIALS_DIRECTORY}/token \
'${cfg.dataDir}/config/appsettings.json'
'';
serviceConfig = {
WorkingDirectory = cfg.dataDir;
ExecStart = "${lib.getExe cfg.package}";
LoadCredential = [ "token:${cfg.tokenKeyFile}" ];
ExecStart = lib.getExe cfg.package;
Restart = "always";
User = cfg.user;
};

View file

@ -63,7 +63,7 @@ in
};
options.services.pretix = {
enable = mkEnableOption "pretix";
enable = mkEnableOption "Pretix, a ticket shop application for conferences, festivals, concerts, etc.";
package = mkPackageOption pkgs "pretix" { };

View file

@ -263,6 +263,7 @@ in
{
INCUS_LXC_TEMPLATE_CONFIG = "${pkgs.lxcfs}/share/lxc/config";
INCUS_OVMF_PATH = ovmf;
INCUS_USBIDS_PATH = "${pkgs.hwdata}/share/hwdata/usb.ids";
PATH = lib.mkForce serverBinPath;
}
(lib.mkIf (cfg.ui.enable) { "INCUS_UI" = cfg.ui.package; })

View file

@ -791,6 +791,7 @@ in {
sanoid = handleTest ./sanoid.nix {};
scaphandre = handleTest ./scaphandre.nix {};
schleuder = handleTest ./schleuder.nix {};
scion-freestanding-deployment = handleTest ./scion/freestanding-deployment {};
scrutiny = handleTest ./scrutiny.nix {};
sddm = handleTest ./sddm.nix {};
seafile = handleTest ./seafile.nix {};
@ -963,6 +964,7 @@ in {
user-activation-scripts = handleTest ./user-activation-scripts.nix {};
user-expiry = runTest ./user-expiry.nix;
user-home-mode = handleTest ./user-home-mode.nix {};
ustreamer = handleTest ./ustreamer.nix {};
uwsgi = handleTest ./uwsgi.nix {};
v2ray = handleTest ./v2ray.nix {};
varnish60 = handleTest ./varnish.nix { package = pkgs.varnish60; };

View file

@ -1,4 +1,4 @@
import ./make-test-python.nix ({ pkgs, ...} : {
import ./make-test-python.nix ({ pkgs, ... }: {
name = "kavita";
meta = with pkgs.lib.maintainers; {
maintainers = [ misterio77 ];
@ -8,29 +8,35 @@ import ./make-test-python.nix ({ pkgs, ...} : {
kavita = { config, pkgs, ... }: {
services.kavita = {
enable = true;
port = 5000;
tokenKeyFile = builtins.toFile "kavita.key" "QfpjFvjT83BLtZ74GE3U3Q==";
tokenKeyFile = builtins.toFile "kavita.key" "d26ba694b455271a8872415830fb7b5c58f8da98f9ef7f58b2ca4c34bd406512";
};
};
};
testScript = let
regUrl = "http://kavita:5000/api/Account/register";
payload = builtins.toFile "payload.json" (builtins.toJSON {
username = "foo";
password = "correcthorsebatterystaple";
email = "foo@bar";
});
in ''
kavita.start
kavita.wait_for_unit("kavita.service")
testScript =
let
regUrl = "http://kavita:5000/api/Account/register";
loginUrl = "http://kavita:5000/api/Account/login";
localeUrl = "http://kavita:5000/api/locale";
in
''
import json
# Check that static assets are working
kavita.wait_until_succeeds("curl http://kavita:5000/site.webmanifest | grep Kavita")
kavita.start
kavita.wait_for_unit("kavita.service")
# Check that registration is working
kavita.succeed("curl -fX POST ${regUrl} --json @${payload}")
# But only for the first one
kavita.fail("curl -fX POST ${regUrl} --json @${payload}")
'';
# Check that static assets are working
kavita.wait_until_succeeds("curl http://kavita:5000/site.webmanifest | grep Kavita")
# Check that registration is working
kavita.succeed("""curl -fX POST ${regUrl} --json '{"username": "foo", "password": "correcthorsebatterystaple"}'""")
# But only for the first one
kavita.fail("""curl -fX POST ${regUrl} --json '{"username": "foo", "password": "correcthorsebatterystaple"}'""")
# Log in and retrieve token
session = json.loads(kavita.succeed("""curl -fX POST ${loginUrl} --json '{"username": "foo", "password": "correcthorsebatterystaple"}'"""))
# Check list of locales
locales = json.loads(kavita.succeed(f"curl -fX GET ${localeUrl} -H 'Authorization: Bearer {session['token']}'"))
assert len(locales) > 0, "expected a list of locales"
'';
})

View file

@ -1,5 +1,5 @@
f: {
system,
system ? builtins.currentSystem,
pkgs ? import ../.. { inherit system; config = {}; overlays = []; },
...
} @ args:

View file

@ -0,0 +1,12 @@
This NixOS VM test implements the network topology outlined in https://github.com/scionproto/scion/blob/27983125bccac6b84d1f96f406853aab0e460405/doc/tutorials/deploy.rst#sample-scion-demo-topology, below is an excerpt from that document
Sample SCION Demo Topology
..........................
The topology of the ISD includes the inter-AS connections to neighboring ASes, and defines the underlay IP/UDP addresses of services and routers running in this AS. This is specified in topology files - this guide later explains how to configure these files. A following graphic depicts the topology on a high level.
.. figure:: https://github.com/scionproto/scion/raw/27983125bccac6b84d1f96f406853aab0e460405/doc/tutorials/deploy/SCION-deployment-guide.drawio.png
:width: 95 %
:figwidth: 100 %
*Figure 1 - Topology of the sample SCION demo environment. It consists of 1 ISD, 3 core ASes and 2 non-core ASes.*

View file

@ -0,0 +1,172 @@
# implements https://github.com/scionproto/scion/blob/27983125bccac6b84d1f96f406853aab0e460405/doc/tutorials/deploy.rst
import ../../make-test-python.nix ({ pkgs, ... }:
let
trust-root-configuration-keys = pkgs.runCommand "generate-trc-keys.sh" {
buildInputs = [
pkgs.scion
];
} ''
set -euo pipefail
mkdir /tmp/tutorial-scion-certs && cd /tmp/tutorial-scion-certs
mkdir AS{1..5}
# Create voting and root keys and (self-signed) certificates for core ASes
pushd AS1
scion-pki certificate create --not-after=3650d --profile=sensitive-voting <(echo '{"isd_as": "42-ffaa:1:1", "common_name": "42-ffaa:1:1 sensitive voting cert"}') sensitive-voting.pem sensitive-voting.key
scion-pki certificate create --not-after=3650d --profile=regular-voting <(echo '{"isd_as": "42-ffaa:1:1", "common_name": "42-ffaa:1:1 regular voting cert"}') regular-voting.pem regular-voting.key
scion-pki certificate create --not-after=3650d --profile=cp-root <(echo '{"isd_as": "42-ffaa:1:1", "common_name": "42-ffaa:1:1 cp root cert"}') cp-root.pem cp-root.key
popd
pushd AS2
scion-pki certificate create --not-after=3650d --profile=cp-root <(echo '{"isd_as": "42-ffaa:1:2", "common_name": "42-ffaa:1:2 cp root cert"}') cp-root.pem cp-root.key
popd
pushd AS3
scion-pki certificate create --not-after=3650d --profile=sensitive-voting <(echo '{"isd_as": "42-ffaa:1:3", "common_name": "42-ffaa:1:3 sensitive voting cert"}') sensitive-voting.pem sensitive-voting.key
scion-pki certificate create --not-after=3650d --profile=regular-voting <(echo '{"isd_as": "42-ffaa:1:3", "common_name": "42-ffaa:1:3 regular voting cert"}') regular-voting.pem regular-voting.key
popd
# Create the TRC (Trust Root Configuration)
mkdir tmp
echo '
isd = 42
description = "Demo ISD 42"
serial_version = 1
base_version = 1
voting_quorum = 2
core_ases = ["ffaa:1:1", "ffaa:1:2", "ffaa:1:3"]
authoritative_ases = ["ffaa:1:1", "ffaa:1:2", "ffaa:1:3"]
cert_files = ["AS1/sensitive-voting.pem", "AS1/regular-voting.pem", "AS1/cp-root.pem", "AS2/cp-root.pem", "AS3/sensitive-voting.pem", "AS3/regular-voting.pem"]
[validity]
not_before = '$(date +%s)'
validity = "365d"' \
> trc-B1-S1-pld.tmpl
scion-pki trc payload --out=tmp/ISD42-B1-S1.pld.der --template trc-B1-S1-pld.tmpl
rm trc-B1-S1-pld.tmpl
# Sign and bundle the TRC
scion-pki trc sign tmp/ISD42-B1-S1.pld.der AS1/sensitive-voting.{pem,key} --out tmp/ISD42-B1-S1.AS1-sensitive.trc
scion-pki trc sign tmp/ISD42-B1-S1.pld.der AS1/regular-voting.{pem,key} --out tmp/ISD42-B1-S1.AS1-regular.trc
scion-pki trc sign tmp/ISD42-B1-S1.pld.der AS3/sensitive-voting.{pem,key} --out tmp/ISD42-B1-S1.AS3-sensitive.trc
scion-pki trc sign tmp/ISD42-B1-S1.pld.der AS3/regular-voting.{pem,key} --out tmp/ISD42-B1-S1.AS3-regular.trc
scion-pki trc combine tmp/ISD42-B1-S1.AS{1,3}-{sensitive,regular}.trc --payload tmp/ISD42-B1-S1.pld.der --out ISD42-B1-S1.trc
rm tmp -r
# Create CA key and certificate for issuing ASes
pushd AS1
scion-pki certificate create --profile=cp-ca <(echo '{"isd_as": "42-ffaa:1:1", "common_name": "42-ffaa:1:1 CA cert"}') cp-ca.pem cp-ca.key --ca cp-root.pem --ca-key cp-root.key
popd
pushd AS2
scion-pki certificate create --profile=cp-ca <(echo '{"isd_as": "42-ffaa:1:2", "common_name": "42-ffaa:1:2 CA cert"}') cp-ca.pem cp-ca.key --ca cp-root.pem --ca-key cp-root.key
popd
# Create AS key and certificate chains
scion-pki certificate create --profile=cp-as <(echo '{"isd_as": "42-ffaa:1:1", "common_name": "42-ffaa:1:1 AS cert"}') AS1/cp-as.pem AS1/cp-as.key --ca AS1/cp-ca.pem --ca-key AS1/cp-ca.key --bundle
scion-pki certificate create --profile=cp-as <(echo '{"isd_as": "42-ffaa:1:2", "common_name": "42-ffaa:1:2 AS cert"}') AS2/cp-as.pem AS2/cp-as.key --ca AS2/cp-ca.pem --ca-key AS2/cp-ca.key --bundle
scion-pki certificate create --profile=cp-as <(echo '{"isd_as": "42-ffaa:1:3", "common_name": "42-ffaa:1:3 AS cert"}') AS3/cp-as.pem AS3/cp-as.key --ca AS1/cp-ca.pem --ca-key AS1/cp-ca.key --bundle
scion-pki certificate create --profile=cp-as <(echo '{"isd_as": "42-ffaa:1:4", "common_name": "42-ffaa:1:4 AS cert"}') AS4/cp-as.pem AS4/cp-as.key --ca AS1/cp-ca.pem --ca-key AS1/cp-ca.key --bundle
scion-pki certificate create --profile=cp-as <(echo '{"isd_as": "42-ffaa:1:5", "common_name": "42-ffaa:1:5 AS cert"}') AS5/cp-as.pem AS5/cp-as.key --ca AS2/cp-ca.pem --ca-key AS2/cp-ca.key --bundle
for i in {1..5}
do
mkdir -p $out/AS$i
cp AS$i/cp-as.{key,pem} $out/AS$i
done
mv *.trc $out
'';
imports = hostId: [
({
services.scion = {
enable = true;
bypassBootstrapWarning = true;
};
networking = {
useNetworkd = true;
useDHCP = false;
};
systemd.network.networks."01-eth1" = {
name = "eth1";
networkConfig.Address = "192.168.1.${toString hostId}/24";
};
environment.etc = {
"scion/topology.json".source = ./topology${toString hostId}.json;
"scion/crypto/as".source = trust-root-configuration-keys + "/AS${toString hostId}";
"scion/certs/ISD42-B1-S1.trc".source = trust-root-configuration-keys + "/ISD42-B1-S1.trc";
"scion/keys/master0.key".text = "U${toString hostId}v4k23ZXjGDwDofg/Eevw==";
"scion/keys/master1.key".text = "dBMko${toString hostId}qMS8DfrN/zP2OUdA==";
};
environment.systemPackages = [
pkgs.scion
];
})
];
in
{
name = "scion-test";
nodes = {
scion01 = { ... }: {
imports = (imports 1);
};
scion02 = { ... }: {
imports = (imports 2);
};
scion03 = { ... }: {
imports = (imports 3);
};
scion04 = { ... }: {
imports = (imports 4);
};
scion05 = { ... }: {
imports = (imports 5);
};
};
testScript = let
pingAll = pkgs.writeShellScript "ping-all-scion.sh" ''
addresses="42-ffaa:1:1 42-ffaa:1:2 42-ffaa:1:3 42-ffaa:1:4 42-ffaa:1:5"
timeout=100
wait_for_all() {
for as in "$@"
do
scion showpaths $as --no-probe > /dev/null
return 1
done
return 0
}
ping_all() {
for as in "$@"
do
scion ping "$as,127.0.0.1" -c 3
done
return 0
}
for i in $(seq 0 $timeout); do
wait_for_all $addresses && exit 0
ping_all $addresses && exit 0
sleep 1
done
'';
in
''
# List of AS instances
machines = [scion01, scion02, scion03, scion04, scion05]
# Wait for scion-control.service on all instances
for i in machines:
i.wait_for_unit("scion-control.service")
# Execute pingAll command on all instances
for i in machines:
i.succeed("${pingAll} >&2")
# Restart scion-dispatcher and ping again to test robustness
for i in machines:
i.succeed("systemctl restart scion-dispatcher >&2")
i.succeed("${pingAll} >&2")
'';
})

View file

@ -0,0 +1,51 @@
{
"attributes": [
"core"
],
"isd_as": "42-ffaa:1:1",
"mtu": 1472,
"control_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"discovery_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"border_routers": {
"br": {
"internal_addr": "127.0.0.1:31002",
"interfaces": {
"1": {
"underlay": {
"public": "192.168.1.1:50014",
"remote": "192.168.1.4:50014"
},
"isd_as": "42-ffaa:1:4",
"link_to": "child",
"mtu": 1472
},
"2": {
"underlay": {
"public": "192.168.1.1:50012",
"remote": "192.168.1.2:50012"
},
"isd_as": "42-ffaa:1:2",
"link_to": "core",
"mtu": 1472
},
"3": {
"underlay": {
"public": "192.168.1.1:50013",
"remote": "192.168.1.3:50013"
},
"isd_as": "42-ffaa:1:3",
"link_to": "core",
"mtu": 1472
}
}
}
}
}

View file

@ -0,0 +1,51 @@
{
"attributes": [
"core"
],
"isd_as": "42-ffaa:1:2",
"mtu": 1472,
"control_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"discovery_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"border_routers": {
"br": {
"internal_addr": "127.0.0.1:31002",
"interfaces": {
"1": {
"underlay": {
"public": "192.168.1.2:50012",
"remote": "192.168.1.1:50012"
},
"isd_as": "42-ffaa:1:1",
"link_to": "core",
"mtu": 1472
},
"2": {
"underlay": {
"public": "192.168.1.2:50023",
"remote": "192.168.1.3:50023"
},
"isd_as": "42-ffaa:1:3",
"link_to": "core",
"mtu": 1472
},
"3": {
"underlay": {
"public": "192.168.1.2:50025",
"remote": "192.168.1.5:50025"
},
"isd_as": "42-ffaa:1:5",
"link_to": "child",
"mtu": 1472
}
}
}
}
}

View file

@ -0,0 +1,60 @@
{
"attributes": [
"core"
],
"isd_as": "42-ffaa:1:3",
"mtu": 1472,
"control_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"discovery_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"border_routers": {
"br": {
"internal_addr": "127.0.0.1:31002",
"interfaces": {
"1": {
"underlay": {
"public": "192.168.1.3:50013",
"remote": "192.168.1.1:50013"
},
"isd_as": "42-ffaa:1:1",
"link_to": "core",
"mtu": 1472
},
"2": {
"underlay": {
"public": "192.168.1.3:50023",
"remote": "192.168.1.2:50023"
},
"isd_as": "42-ffaa:1:2",
"link_to": "core",
"mtu": 1472
},
"3": {
"underlay": {
"public": "192.168.1.3:50034",
"remote": "192.168.1.4:50034"
},
"isd_as": "42-ffaa:1:4",
"link_to": "child",
"mtu": 1472
},
"4": {
"underlay": {
"public": "192.168.1.3:50035",
"remote": "192.168.1.5:50035"
},
"isd_as": "42-ffaa:1:5",
"link_to": "child",
"mtu": 1472
}
}
}
}
}

View file

@ -0,0 +1,40 @@
{
"attributes": [],
"isd_as": "42-ffaa:1:4",
"mtu": 1472,
"control_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"discovery_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"border_routers": {
"br": {
"internal_addr": "127.0.0.1:31002",
"interfaces": {
"1": {
"underlay": {
"public": "192.168.1.4:50014",
"remote": "192.168.1.1:50014"
},
"isd_as": "42-ffaa:1:1",
"link_to": "parent",
"mtu": 1472
},
"2": {
"underlay": {
"public": "192.168.1.4:50034",
"remote": "192.168.1.3:50034"
},
"isd_as": "42-ffaa:1:3",
"link_to": "parent",
"mtu": 1472
}
}
}
}
}

View file

@ -0,0 +1,40 @@
{
"attributes": [],
"isd_as": "42-ffaa:1:5",
"mtu": 1472,
"control_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"discovery_service": {
"cs": {
"addr": "127.0.0.1:31000"
}
},
"border_routers": {
"br": {
"internal_addr": "127.0.0.1:31002",
"interfaces": {
"1": {
"underlay": {
"public": "192.168.1.5:50025",
"remote": "192.168.1.2:50025"
},
"isd_as": "42-ffaa:1:2",
"link_to": "parent",
"mtu": 1472
},
"2": {
"underlay": {
"public": "192.168.1.5:50035",
"remote": "192.168.1.3:50035"
},
"isd_as": "42-ffaa:1:3",
"link_to": "parent",
"mtu": 1472
}
}
}
}
}

75
nixos/tests/ustreamer.nix Normal file
View file

@ -0,0 +1,75 @@
import ./make-test-python.nix ({ pkgs, ... }: {
name = "ustreamer-vmtest";
nodes = {
client = {...}: {
environment.systemPackages = [ pkgs.curl ];
};
camera = {config, ...}: let
configFile = pkgs.writeText "akvcam-configFile" ''
[Cameras]
cameras/size = 2
cameras/1/type = output
cameras/1/mode = mmap, userptr, rw
cameras/1/description = Virtual Camera (output device)
cameras/1/formats = 2
cameras/1/videonr = 7
cameras/2/type = capture
cameras/2/mode = mmap, rw
cameras/2/description = Virtual Camera
cameras/2/formats = 1, 2
cameras/2/videonr = 9
[Connections]
connections/size = 1
connections/1/connection = 1:2
[Formats]
formats/size = 2
formats/1/format = YUY2
formats/1/width = 640
formats/1/height = 480
formats/1/fps = 30
formats/2/format = RGB24, YUY2
formats/2/width = 640
formats/2/height = 480
formats/2/fps = 20/1, 15/2
'';
in {
environment.systemPackages = [ pkgs.ustreamer ];
networking.firewall.enable = false;
systemd.services.ustreamer = {
description = "ustreamer service";
wantedBy = ["multi-user.target"];
serviceConfig = {
DynamicUser = true;
ExecStart = "${pkgs.ustreamer}/bin/ustreamer --host=0.0.0.0 --port 8000 --device /dev/video9 --device-timeout=8";
PrivateTmp = true;
BindReadOnlyPaths = "/dev/video9";
SupplementaryGroups = [
"video"
];
Restart = "always";
};
};
boot.extraModulePackages = [config.boot.kernelPackages.akvcam];
boot.kernelModules = ["akvcam"];
boot.extraModprobeConfig = ''
options akvcam config_file=${configFile}
'';
};
};
testScript = ''
start_all()
camera.wait_for_unit("ustreamer.service")
camera.wait_for_open_port(8000)
client.wait_for_unit("multi-user.target")
client.succeed("curl http://camera:8000")
'';
})

View file

@ -6,18 +6,19 @@
, alsa-utils
, alsa-lib
, gtk4
, openssl
, wrapGAppsHook4
}:
stdenv.mkDerivation rec {
pname = "alsa-scarlett-gui";
version = "0.3.3";
version = "0.4.0";
src = fetchFromGitHub {
owner = "geoffreybennett";
repo = pname;
rev = version;
sha256 = "sha256-lIwDNyzuvolDhTVCslCtUfbsC/TxKtxQF97h0zYxp9k=";
sha256 = "sha256-+74JRQn2xwgPHZSrp5b+uny0+aLnsFvx/cOKIdj4J40=";
};
NIX_CFLAGS_COMPILE = [ "-Wno-error=deprecated-declarations" ];
@ -25,7 +26,7 @@ stdenv.mkDerivation rec {
makeFlags = [ "DESTDIR=\${out}" "PREFIX=''" ];
sourceRoot = "${src.name}/src";
nativeBuildInputs = [ pkg-config wrapGAppsHook4 makeWrapper ];
buildInputs = [ gtk4 alsa-lib ];
buildInputs = [ gtk4 alsa-lib openssl ];
postInstall = ''
wrapProgram $out/bin/alsa-scarlett-gui --prefix PATH : ${lib.makeBinPath [ alsa-utils ]}
@ -37,11 +38,11 @@ stdenv.mkDerivation rec {
hardeningDisable = [ "fortify3" ];
meta = with lib; {
description = "GUI for alsa controls presented by Focusrite Scarlett Gen 2/3 Mixer Driver";
description = "GUI for alsa controls presented by Focusrite Scarlett Gen 2/3/4 Mixer Driver";
mainProgram = "alsa-scarlett-gui";
homepage = "https://github.com/geoffreybennett/alsa-scarlett-gui";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ sebtm ];
maintainers = with maintainers; [ mdorman ];
platforms = platforms.linux;
};
}

View file

@ -5,11 +5,11 @@
let
pname = "codux";
version = "15.22.2";
version = "15.23.1";
src = fetchurl {
url = "https://github.com/wixplosives/codux-versions/releases/download/${version}/Codux-${version}.x86_64.AppImage";
sha256 = "sha256-aYGZPoA2Tux6pmpZFShkZB+os34jZczXsfmYN/pu+Ic=";
sha256 = "sha256-9ZzWsLEPEG+PDrDf9lU4ODGOD6/fvMbGBSo9BEQrkn4=";
};
appimageContents = appimageTools.extractType2 { inherit pname version src; };

View file

@ -110,6 +110,27 @@ in
variant = "macport";
rev = "emacs-28.2-mac-9.1";
hash = "sha256-Ne2jQ2nVLNiQmnkkOXVc5AkLVkTpm8pFC7VNY2gQjPE=";
patches = fetchpatch: [
# CVE-2022-45939
(fetchpatch {
url = "https://git.savannah.gnu.org/cgit/emacs.git/patch/?id=d48bb4874bc6cd3e69c7a15fc3c91cc141025c51";
hash = "sha256-TiBQkexn/eb6+IqJNDqR/Rn7S7LVdHmL/21A5tGsyJs=";
})
# https://lists.gnu.org/archive/html/emacs-devel/2024-03/msg00611.html
(fetchpatch {
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/28.2/10_all_org-macro-eval.patch?id=af40e12cb742510e5d40a06ffc6dfca97e340dd6";
hash = "sha256-OdGt4e9JGjWJPkfJhbYsmQQc6jart4BH5aIKPIbWKFs=";
})
(fetchpatch {
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/28.2/11_all_untrusted-content.patch?id=af40e12cb742510e5d40a06ffc6dfca97e340dd6";
hash = "sha256-wa2bsnCt5yFx0+RAFZGBPI+OoKkbrfkkMer/KBEc/wA=";
})
(fetchpatch {
url = "https://gitweb.gentoo.org/proj/emacs-patches.git/plain/emacs/28.2/12_all_org-remote-unsafe.patch?id=af40e12cb742510e5d40a06ffc6dfca97e340dd6";
hash = "sha256-b6WU1o3PfDV/6BTPfPNUFny6oERJCNsDrvflxX3Yvek=";
})
];
});
emacs29-macport = import ./make-emacs.nix (mkArgs {

View file

@ -16985,6 +16985,18 @@ final: prev:
meta.homepage = "https://github.com/samodostal/image.nvim/";
};
texpresso-vim = buildVimPlugin {
pname = "texpresso.vim";
version = "2024-03-08";
src = fetchFromGitHub {
owner = "let-def";
repo = "texpresso.vim";
rev = "04816dcdddc27e6c50fc2a4faff0ef1675a7ee8e";
sha256 = "08lzl0g1b287agscd345yg9cmxsj2vlbg83s1mgsa13qn81y6jga";
};
meta.homepage = "https://github.com/let-def/texpresso.vim/";
};
tinykeymap = buildVimPlugin {
pname = "tinykeymap";
version = "2024-02-17";

View file

@ -901,6 +901,7 @@ https://github.com/wincent/terminus/,,
https://github.com/oberblastmeister/termwrapper.nvim/,,
https://github.com/ternjs/tern_for_vim/,,
https://github.com/KeitaNakamura/tex-conceal.vim/,,
https://github.com/let-def/texpresso.vim/,HEAD,
https://github.com/johmsalas/text-case.nvim/,HEAD,
https://github.com/ron89/thesaurus_query.vim/,,
https://github.com/itchyny/thumbnail.vim/,,

View file

@ -6,16 +6,17 @@
, enableNewDynarec ? enableDynarec && stdenv.hostPlatform.isAarch
, enableVncRenderer ? false
, unfreeEnableDiscord ? false
, unfreeEnableRoms ? false
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "86Box";
version = "4.1";
src = fetchFromGitHub {
owner = "86Box";
repo = "86Box";
rev = "v${version}";
rev = "v${finalAttrs.version}";
hash = "sha256-JYOJFXiUTLRs6AEMYNx88PwcVw13ChQzV1ZE5OtX6Ds=";
};
@ -48,38 +49,46 @@ stdenv.mkDerivation rec {
++ lib.optional (!enableDynarec) "-DDYNAREC=OFF"
++ lib.optional (!unfreeEnableDiscord) "-DDISCORD=OFF";
postInstall = lib.optional stdenv.isLinux ''
postInstall = lib.optionalString stdenv.isLinux ''
install -Dm644 -t $out/share/applications $src/src/unix/assets/net.86box.86Box.desktop
for size in 48 64 72 96 128 192 256 512; do
install -Dm644 -t $out/share/icons/hicolor/"$size"x"$size"/apps \
$src/src/unix/assets/"$size"x"$size"/net.86box.86Box.png
done;
''
+ lib.optionalString unfreeEnableRoms ''
mkdir -p $out/share/86Box
ln -s ${finalAttrs.passthru.roms} $out/share/86Box/roms
'';
passthru = {
roms = fetchFromGitHub {
owner = "86Box";
repo = "roms";
rev = "v${finalAttrs.version}";
hash = "sha256-1HtoizO0QIGNjQTW0clzRp40h1ulw55+iTYz12UJSms=";
};
};
# Some libraries are loaded dynamically, but QLibrary doesn't seem to search
# the runpath, so use a wrapper instead.
postFixup = let
preFixup = let
libPath = lib.makeLibraryPath ([
libpcap
] ++ lib.optional unfreeEnableDiscord discord-gamesdk);
libPathVar = if stdenv.isDarwin then "DYLD_LIBRARY_PATH" else "LD_LIBRARY_PATH";
in
''
wrapProgram $out/bin/86Box \
"''${qtWrapperArgs[@]}" \
--prefix ${libPathVar} : "${libPath}"
in ''
makeWrapperArgs+=(--prefix ${libPathVar} : "${libPath}")
'';
# Do not wrap twice.
dontWrapQtApps = true;
meta = with lib; {
description = "Emulator of x86-based machines based on PCem.";
mainProgram = "86Box";
homepage = "https://86box.net/";
license = with licenses; [ gpl2Only ] ++ optional unfreeEnableDiscord unfree;
license = with licenses; [ gpl2Only ]
++ optional (unfreeEnableDiscord || unfreeEnableRoms) unfree;
maintainers = [ maintainers.jchw ];
platforms = platforms.linux;
};
}
})

View file

@ -1,4 +1,5 @@
{ lib, stdenv
{ lib
, stdenv
, cmake
, fetchFromGitHub
, wrapQtAppsHook
@ -93,6 +94,7 @@ stdenv.mkDerivation rec {
description = "Very customizable imageboard/booru downloader with powerful filenaming features";
license = licenses.asl20;
homepage = "https://bionus.github.io/imgbrd-grabber/";
mainProgram = "Grabber";
maintainers = [ maintainers.evanjs ];
};
}

View file

@ -16,7 +16,6 @@
cudaSupport ? config.cudaSupport,
dbus,
embree,
fetchpatch,
fetchurl,
fetchzip,
ffmpeg,
@ -68,7 +67,7 @@
pkg-config,
potrace,
pugixml,
python310Packages, # must use instead of python3.pkgs, see https://github.com/NixOS/nixpkgs/issues/211340
python311Packages, # must use instead of python3.pkgs, see https://github.com/NixOS/nixpkgs/issues/211340
rocmPackages, # comes with a significantly larger closure size
runCommand,
spaceNavSupport ? stdenv.isLinux,
@ -82,7 +81,7 @@
}:
let
python3Packages = python310Packages;
python3Packages = python311Packages;
python3 = python3Packages.python;
pyPkgsOpenusd = python3Packages.openusd.override { withOsl = false; };
@ -100,25 +99,14 @@ in
stdenv.mkDerivation (finalAttrs: {
pname = "blender";
version = "4.0.2";
version = "4.1.0";
src = fetchurl {
url = "https://download.blender.org/source/${finalAttrs.pname}-${finalAttrs.version}.tar.xz";
hash = "sha256-qqDnKdp1kc+/RXcq92NFl32qp7EaCvNdmPkxPiRgd6M=";
hash = "sha256-3AAtguPDQMk4VcZoRzDQGAG2aaKbHMa3XuuZC6aecj8=";
};
patches = [
./draco.patch
(fetchpatch {
url = "https://projects.blender.org/blender/blender/commit/cf4365e555a759d5b3225bce77858374cb07faad.diff";
hash = "sha256-Nypd04yFSHYa7RBa8kNmoApqJrU4qpaOle3tkj44d4g=";
})
(fetchpatch {
# https://projects.blender.org/blender/blender/issues/117145
url = "https://projects.blender.org/blender/blender/commit/eb99895c972b6c713294f68a34798aa51d36034a.patch";
hash = "sha256-95nG5mW408lhKJ2BppgaUwBMMeXeGyBqho6mCfB53GI=";
})
] ++ lib.optional stdenv.isDarwin ./darwin.patch;
patches = [ ./draco.patch ] ++ lib.optional stdenv.isDarwin ./darwin.patch;
postPatch =
(
@ -247,7 +235,7 @@ stdenv.mkDerivation (finalAttrs: {
]
++ lib.optionals (!stdenv.isAarch64) [
embree
openimagedenoise
(openimagedenoise.override { inherit cudaSupport; })
]
++ (
if (!stdenv.isDarwin) then

View file

@ -6,6 +6,9 @@
, autoreconfHook
, pkg-config
, waylandSupport ? true
, x11Support ? true
, cairo
, glib
, libnotify
@ -13,6 +16,8 @@
, wl-clipboard
, xclip
, xsel
, xdotool
, wtype
}:
stdenv.mkDerivation rec {
@ -38,9 +43,12 @@ stdenv.mkDerivation rec {
postFixup = ''
chmod +x $out/share/rofi-emoji/clipboard-adapter.sh
wrapProgram $out/share/rofi-emoji/clipboard-adapter.sh \
--prefix PATH ":" ${lib.makeBinPath [ libnotify wl-clipboard xclip xsel ]}
--prefix PATH ":" ${lib.makeBinPath ([ libnotify wl-clipboard xclip xsel ]
++ lib.optionals waylandSupport [ wtype ]
++ lib.optionals x11Support [ xdotool ])}
'';
nativeBuildInputs = [
autoreconfHook
pkg-config

View file

@ -1,11 +1,11 @@
{
stable = {
chromedriver = {
hash_darwin = "sha256-yRLbe3xl0L/PfRcVB4LA6JeDvLpgUhtKZiAfyB2v/ZE=";
hash_darwin = "sha256-sB6gH5k5zK1IIctBTXQpxlgmLEoIatcLDYO+WIFaYxA=";
hash_darwin_aarch64 =
"sha256-TMreCFF9Lo+9gy7kzZWd9Mjep0CYa3Cxn4kr9BNTdkE=";
hash_linux = "sha256-rM2usA0zDZ1aXvkbvm+l0xalViEJIxu8ZYZvoTkNiis=";
version = "123.0.6312.58";
"sha256-sikyGQG0Y14eNjT3f/Z50cPmm38T58X7zQIGopXOHOs=";
hash_linux = "sha256-2WZmRXyvxN3hXeOoPQXL6lU6Xki9iUmTdETRxOkIYD0=";
version = "123.0.6312.86";
};
deps = {
gn = {
@ -15,9 +15,9 @@
version = "2024-02-19";
};
};
hash = "sha256-GrCYCUjxV16tinqrIqW4DQD51dKIgKNu2fLLz9Yqq7k=";
hash_deb_amd64 = "sha256-z+UC7wUsWAX7kPIgk8S9ujW2n6HlUp0m3zHTvsAiTps=";
version = "123.0.6312.58";
hash = "sha256-b72MiRv4uxolKE92tK224FvyA56NM3FcCjijkc9m3ro=";
hash_deb_amd64 = "sha256-JsEJw8aEptesRiCtIrfHRQu1xq27TzHSmUr+dsvnV7o=";
version = "123.0.6312.86";
};
ungoogled-chromium = {
deps = {

View file

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "cilium-cli";
version = "0.16.0";
version = "0.16.3";
src = fetchFromGitHub {
owner = "cilium";
repo = pname;
rev = "v${version}";
hash = "sha256-RJJETvgLdE/fJtd1LMShJ7Hm8/s1zUybhec6YPT44wg=";
hash = "sha256-WD0CUPl9Qkalhog2IbefMkiLiVZFW59X21sYH4hUqZs=";
};
vendorHash = null;

View file

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "fn";
version = "0.6.29";
version = "0.6.30";
src = fetchFromGitHub {
owner = "fnproject";
repo = "cli";
rev = version;
hash = "sha256-hN9Kok2+ZNYZsG+3ffzr1jGfIMg99JzgzC0x585KDF4=";
hash = "sha256-1j0Hd/SYoBhelCIFUFxkByczWSYFXjTE9TVH9E3Km+Y=";
};
vendorHash = null;

View file

@ -9,13 +9,13 @@
buildGoModule rec {
pname = "kaniko";
version = "1.21.1";
version = "1.22.0";
src = fetchFromGitHub {
owner = "GoogleContainerTools";
repo = "kaniko";
rev = "v${version}";
hash = "sha256-mVoXJPNkG0VPTaZ1pg6oB5qa/bYQa9Gn82CoGRsVwWg=";
hash = "sha256-EL54lr5i6F4F9sdjQJZ3X+mmj4tWXVX2db8CkRe8WzI=";
};
vendorHash = null;

View file

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "krelay";
version = "0.0.8";
version = "0.0.9";
src = fetchFromGitHub {
owner = "knight42";
repo = pname;
rev = "v${version}";
hash = "sha256-KR5lBLgzv9yjL3JvCjg8dxXWmPgagnnKxYtrPunAyXY=";
hash = "sha256-8UMbSsZzk9GPQR+d8ybqRQa1ouL6h8nzk/O7j0jJyk4=";
};
vendorHash = "sha256-vaWdJyPOLsrLrhipBvUCOHo/TjnJz4Qpvj3lvUPHomU=";

View file

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "popeye";
version = "0.21.1";
version = "0.21.2";
src = fetchFromGitHub {
rev = "v${version}";
owner = "derailed";
repo = "popeye";
sha256 = "sha256-zk3SMIvaFV6t+VCMvcmMaHpTEYx/LinaPLNXUU+JSwk=";
sha256 = "sha256-NhQER6XeicpQY0rYisGvkUCHYsURJqt6xVKc9F0CmtE=";
};
ldflags = [

View file

@ -13,11 +13,11 @@
stdenv.mkDerivation rec {
pname = "appflowy";
version = "0.5.2";
version = "0.5.3";
src = fetchzip {
url = "https://github.com/AppFlowy-IO/appflowy/releases/download/${version}/AppFlowy-${version}-linux-x86_64.tar.gz";
hash = "sha256-yXrdV/m6Ss9DyYleA5K7Wz1RUa8fznDJl5Yvco+jaiA=";
hash = "sha256-BFPtT8/DvSsZY1ckrXRZn6F0+pSRRZLoqc638JKUpjQ=";
stripRoot = false;
};

View file

@ -8,11 +8,11 @@
python3.pkgs.buildPythonApplication rec {
pname = "quisk";
version = "4.2.29";
version = "4.2.30";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-xG6nRSk0txUMPPuNRK+hOeqLfCfPt6KcacAtcdZT5E8=";
sha256 = "sha256-1CpIb8Hj9hpsOkxhY3HNKaYYbWa5cZY5//WAzeuvY/o=";
};
buildInputs = [

View file

@ -10,13 +10,13 @@
stdenv.mkDerivation rec {
pname = "iqtree";
version = "2.2.2.7";
version = "2.3.1";
src = fetchFromGitHub {
owner = "iqtree";
repo = "iqtree2";
rev = "v${version}";
hash = "sha256-XyjVo5TYMoB+ZOAGc4ivYqFGnEO1M7mhxXrG45TP44Y=";
hash = "sha256-GaNumiTGa6mxvFifv730JFgKrRxG41gJN+ci3imDbzs=";
fetchSubmodules = true;
};

View file

@ -2,11 +2,11 @@
let
pname = "alt-ergo";
version = "2.5.2";
version = "2.5.3";
src = fetchurl {
url = "https://github.com/OCamlPro/alt-ergo/releases/download/v${version}/alt-ergo-${version}.tbz";
hash = "sha256-9GDBcBH49sheO5AjmDsznMEbw0JSrnSOcIIRN40/aJU=";
hash = "sha256-tmWLZBLfdmfYlCQq+zcUneeueDAE6AJeZMy8kfNCC04=";
};
in

View file

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
pname = "cytoscape";
version = "3.10.1";
version = "3.10.2";
src = fetchurl {
url = "https://github.com/cytoscape/cytoscape/releases/download/${version}/${pname}-unix-${version}.tar.gz";
sha256 = "sha256-fqxAsnpMYCYj0hW2oxu/NH4PqesRlWPs5eDSeSjy1aU=";
sha256 = "sha256-ArT+g3GbtSxq3FvRi1H4z/kpsmcFCmKhzEJI4bCK44E=";
};
patches = [

View file

@ -20,12 +20,12 @@
buildGoModule rec {
pname = "gitea";
version = "1.21.9";
version = "1.21.10";
# 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-4o5pSkC9jl8rI68naorDrRE4Rm0/chj3+cRxZqoziIU=";
hash = "sha256-g/aDRIAKaPi8AWWJL4N8CZt2N4HBEWK7xSBvjrcPDD8=";
};
vendorHash = null;

View file

@ -5,13 +5,13 @@
stdenv.mkDerivation rec {
pname = "droidcam";
version = "2.1.2";
version = "2.1.3";
src = fetchFromGitHub {
owner = "aramg";
repo = "droidcam";
rev = "v${version}";
sha256 = "sha256-NZ6sKLE/Sq4VBJSf7iG0CgdVwmU8JXQH/utbobBEFi0=";
sha256 = "sha256-Pwq7PDj+MH1wzrUyfva2F2+oELm4Sb1EJPUUCsHYb7k=";
};
nativeBuildInputs = [

View file

@ -637,7 +637,7 @@ rec {
if tag != null
then tag
else
lib.head (lib.strings.splitString "-" (baseNameOf result.outPath));
lib.head (lib.strings.splitString "-" (baseNameOf (builtins.unsafeDiscardStringContext result.outPath)));
} ''
${lib.optionalString (tag == null) ''
outName="$(basename "$out")"
@ -1001,7 +1001,7 @@ rec {
if tag != null
then tag
else
lib.head (lib.strings.splitString "-" (baseNameOf conf.outPath));
lib.head (lib.strings.splitString "-" (baseNameOf (builtins.unsafeDiscardStringContext conf.outPath)));
paths = buildPackages.referencesByPopularity overallClosure;
nativeBuildInputs = [ jq ];
} ''

View file

@ -4,9 +4,9 @@ version = 3
[[package]]
name = "eyre"
version = "0.6.11"
version = "0.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6267a1fa6f59179ea4afc8e50fd8612a3cc60bc858f786ff877a4a8cb042799"
checksum = "7cd915d99f24784cdc19fd37ef22b97e3ff0ae756c7e492e9fbfe897d61e2aec"
dependencies = [
"indenter",
"once_cell",

View file

@ -7,16 +7,16 @@
rustPlatform.buildRustPackage rec {
pname = "ast-grep";
version = "0.19.4";
version = "0.20.0";
src = fetchFromGitHub {
owner = "ast-grep";
repo = "ast-grep";
rev = version;
hash = "sha256-hKqj3LVu/3ndGoZQYyH1yCm5vF0/Ck5bkTKjLIkcUys=";
hash = "sha256-vOHBrz/a42jRyQs7oJLkg3/ra3SMR9FKuiwJ9RrFizw=";
};
cargoHash = "sha256-Fli97ANWHZvvBC6hImymELkpBqqrAOm006LROj3R3sM=";
cargoHash = "sha256-T30V9FYNmh2Rg5ZFc9elcf4ZbTR1vwieirawEs3a4sI=";
nativeBuildInputs = [ installShellFiles ];

View file

@ -0,0 +1,65 @@
{ lib
, boost
, cmake
, cxxopts
, digestpp
, fetchFromGitHub
, fmt
, jsoncons
, pugixml
, sqlite
, sqlite_orm
, stdenv
}:
stdenv.mkDerivation {
pname = "bt-migrate";
version = "0-unstable-2023-08-17";
src = fetchFromGitHub {
owner = "mikedld";
repo = "bt-migrate";
rev = "e15a489c0c76f98355586ebbee08223af4e9bf50";
hash = "sha256-kA6yxhbIh3ThmgF8Zyoe3I79giLVmdNr9IIrw5Xx4s0=";
};
nativeBuildInputs = [
cmake
];
buildInputs = [
boost
cxxopts
fmt
jsoncons
pugixml
sqlite_orm
];
cmakeFlags = [
(lib.strings.cmakeBool "USE_VCPKG" false)
# NOTE: digestpp does not have proper CMake packaging (yet?)
(lib.strings.cmakeBool "USE_FETCHCONTENT" true)
(lib.strings.cmakeFeature "FETCHCONTENT_SOURCE_DIR_DIGESTPP" "${digestpp}/include/digestpp")
];
# NOTE: no install target in CMake...
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp BtMigrate $out/bin
runHook postInstall
'';
strictDeps = true;
meta = with lib; {
description = "Torrent state migration tool";
homepage = "https://github.com/mikedld/bt-migrate?tab=readme-ov-file";
license = licenses.gpl3Only;
maintainers = with maintainers; [ ambroisie ];
mainProgram = "BtMigrate";
platforms = platforms.all;
};
}

View file

@ -0,0 +1,32 @@
{ lib
, stdenv
, fetchFromGitHub
, SDL
}:
stdenv.mkDerivation (finalAttrs: {
pname = "cg-term";
version = "1.7b2";
src = fetchFromGitHub {
owner = "MagerValp";
repo = "CGTerm";
rev = "01e35d64c29bccee52211b0afc66035a10e4792a"; # no tags
hash = "sha256-Gk7t9wnVCRWwnqcItS3j031VqJnBqk6rHw1SABtzqfE=";
};
buildInputs = [
SDL
];
makeFlags = [ "CC:=$(CC)" "PREFIX=$(out)" ];
meta = with lib; {
description = "C/G telnet client for C64 BBS's";
homepage = "https://github.com/MagerValp/CGTerm";
license = licenses.bsd2;
maintainers = with maintainers; [ matthewcroughan ];
mainProgram = "cg-term";
platforms = platforms.all;
};
})

File diff suppressed because it is too large Load diff

View file

@ -5,17 +5,18 @@
, openssl
, pkg-config
, rustPlatform
, nix-update-script
}:
rustPlatform.buildRustPackage rec {
pname = "crunchy-cli";
version = "3.2.5";
version = "3.3.1";
src = fetchFromGitHub {
owner = "crunchy-labs";
repo = "crunchy-cli";
rev = "v${version}";
hash = "sha256-hzmTwUd+bQwr+5UtXKMalJZUDxOC5nhXNTXbYZN8xtA=";
hash = "sha256-qpbAUqtSOLO1m4gF7+rwArIEpbGnssqw1B/kPrmOhm0=";
};
cargoLock = {
@ -39,11 +40,13 @@ rustPlatform.buildRustPackage rec {
OPENSSL_NO_VENDOR = true;
};
meta = with lib; {
passthru.updateScript = nix-update-script { };
meta = {
description = "Command-line downloader for Crunchyroll";
homepage = "https://github.com/crunchy-labs/crunchy-cli";
license = licenses.mit;
maintainers = with maintainers; [ stepbrobd ];
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ stepbrobd ];
mainProgram = "crunchy-cli";
};
}

View file

@ -0,0 +1,32 @@
{ lib
, fetchFromGitHub
, stdenvNoCC
}:
stdenvNoCC.mkDerivation {
pname = "digestpp";
version = "0-unstable-2023-11-07";
src = fetchFromGitHub {
owner = "kerukuro";
repo = "digestpp";
rev = "ebb699402c244e22c3aff61d2239bcb2e87b8ef8";
hash = "sha256-9X/P7DgZB6bSYjQWRli4iAXEFjhmACOVv3EYQrXuH5c=";
};
installPhase = ''
runHook preInstall
mkdir -p $out/include/digestpp
cp -r *.hpp algorithm/ detail/ $out/include/digestpp
runHook postInstall
'';
meta = with lib; {
description = "C++11 header-only message digest library";
homepage = "https://github.com/kerukuro/digestpp";
license = licenses.unlicense;
maintainers = with maintainers; [ ambroisie ];
platforms = platforms.all;
};
}

View file

@ -0,0 +1,26 @@
{ lib
, rustPlatform
, fetchFromGitHub
}:
rustPlatform.buildRustPackage rec {
pname = "dipc";
version = "1.0.0";
src = fetchFromGitHub {
owner = "doprz";
repo = "dipc";
rev = "bf578bd9474084b7099ef665138667e486dce671";
hash = "sha256-RXEC8bwdnUOaDmYIb7ci/JD+vi16tBn55FRsUmwaRzk=";
};
cargoHash = "sha256-XQ85T64K1NLdSOtAFr0XluvFNTaHzoWKxoQtBQ+uSKQ=";
meta = with lib; {
description = "Convert your favorite images and wallpapers with your favorite color palettes/themes";
homepage = "https://github.com/doprz/dipc";
license = with licenses; [ mit asl20 ];
maintainers = with maintainers; [ ByteSudoer ];
mainProgram = "dipc";
};
}

View file

@ -0,0 +1,45 @@
{ lib
, stdenv
, fetchFromGitHub
, testers
, dmalloc
}:
stdenv.mkDerivation rec {
pname = "dmalloc";
version = "5.6.5";
src = fetchFromGitHub {
owner = "j256";
repo = "dmalloc";
rev = "dmalloc_release_${lib.replaceStrings ["."] ["_"] version}";
hash = "sha256-P63I9s32C3v1q+Sy9joK0HKYb0ebBu9g72tTTwxvkz8=";
};
configureFlags = [
"--enable-cxx"
"--enable-shlib"
"--enable-threads"
];
passthru.tests.version = testers.testVersion {
package = dmalloc;
};
meta = with lib; {
description = "Debug Malloc memory allocation debugging C library";
longDescription = ''
The debug memory allocation or "dmalloc" library has been designed as a
drop in replacement for the system's malloc, realloc, calloc, free and
other memory management routines while providing powerful debugging
facilities configurable at runtime. These facilities include such things
as memory-leak tracking, fence-post write detection, file/line number
reporting, and general logging of statistics.
'';
homepage = "https://dmalloc.com";
license = licenses.isc;
maintainers = with maintainers; [ azahi ];
platforms = platforms.all;
mainProgram = "dmalloc";
};
}

View file

@ -5,13 +5,13 @@ rustPlatform.buildRustPackage rec {
# Since then, `dust` has been freed up, allowing this package to take that attribute.
# However in order for tools like `nix-env` to detect package updates, keep `du-dust` for pname.
pname = "du-dust";
version = "0.9.0";
version = "1.0.0";
src = fetchFromGitHub {
owner = "bootandy";
repo = "dust";
rev = "v${version}";
hash = "sha256-5X7gRMTUrG6ecZnwExBTadOJo/HByohTMDsgxFmp1HM=";
hash = "sha256-KTsB9QqcLafG2XNj8PdkzwVrFDmpBQzNyDLajT/JDz0=";
# Remove unicode file names which leads to different checksums on HFS+
# vs. other filesystems because of unicode normalisation.
postFetch = ''
@ -19,7 +19,7 @@ rustPlatform.buildRustPackage rec {
'';
};
cargoHash = "sha256-uc7jbA8HqsH1bSJgbnUVT/f7F7kZJ4Jf3yyFvseH7no=";
cargoHash = "sha256-d6Mnuo6JlbuHUGz+UCmC8jvNks3SpeP/aNQGXHBzB+8=";
nativeBuildInputs = [ installShellFiles ];
@ -36,7 +36,7 @@ rustPlatform.buildRustPackage rec {
description = "du + rust = dust. Like du but more intuitive";
homepage = "https://github.com/bootandy/dust";
license = licenses.asl20;
maintainers = with maintainers; [ infinisil ];
maintainers = with maintainers; [ aaronjheng ];
mainProgram = "dust";
};
}

View file

@ -0,0 +1,39 @@
{ autoreconfHook
, cmake
, lib
, pkg-config
, stdenv
, fetchFromGitLab
, gitUpdater
}:
stdenv.mkDerivation (finalAttrs: {
pname = "ethercat";
version = "1.6-alpha";
src = fetchFromGitLab {
owner = "etherlab.org";
repo = "ethercat";
rev = "refs/tags/${finalAttrs.version}";
hash = "sha256-kzyA6h0rZFEROLcFZoU+2fIQ/Y0NwtdPuliKDbwkHrE=";
};
separateDebugInfo = true;
nativeBuildInputs = [ autoreconfHook pkg-config ];
configureFlags = [
"--enable-userlib=yes"
"--enable-kernel=no"
];
passthru.updateScript = gitUpdater { };
meta = with lib; {
description = "IgH EtherCAT Master for Linux";
homepage = "https://etherlab.org/ethercat";
changelog = "https://gitlab.com/etherlab.org/ethercat/-/blob/${finalAttrs.version}/NEWS";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ stv0g ];
platforms = [ "x86_64-linux" ];
};
})

View file

@ -17,16 +17,16 @@
rustPlatform.buildRustPackage rec {
pname = "eza";
version = "0.18.8";
version = "0.18.9";
src = fetchFromGitHub {
owner = "eza-community";
repo = "eza";
rev = "v${version}";
hash = "sha256-VKBiISHZmSqLf/76svKHqmQtsj+Trz41GhCJxgGY76Y=";
hash = "sha256-SXGJTxTHCizgVBLp5fO5Appfe1B3+DFrobxc/aIlJRo=";
};
cargoHash = "sha256-xFLnd0Pw3AtA4Nrg5rlqJj0fYOZ2xeNtS5vnAMWk4sc=";
cargoHash = "sha256-COq1WSX7DUoXb7ojISyzmDV/a3zqXI0oKCSsPPi4/CA=";
nativeBuildInputs = [ cmake pkg-config installShellFiles pandoc ];
buildInputs = [ zlib ]

View file

@ -2,9 +2,9 @@
buildDotnetGlobalTool {
pname = "fantomas";
version = "6.2.3";
version = "6.3.0";
nugetSha256 = "sha256-Aol10o5Q7l8s6SdX0smVdi3ec2IgAx+gMksAMjXhIfU=";
nugetSha256 = "sha256-PWiyzkiDL8LBE/fwClS0d6PrE0D5pKYYZiMDZmyk9Y0=";
meta = with lib; {
description = "F# source code formatter";

View file

@ -10,13 +10,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "fastcdr";
version = "2.2.0";
version = "2.2.1";
src = fetchFromGitHub {
owner = "eProsima";
repo = "Fast-CDR";
rev = "v${finalAttrs.version}";
hash = "sha256-hhYNgBLJCTZV/fgHEH7rxlTy+qpShAykxHLbPtPA/Uw=";
hash = "sha256-9eIPGGrDBsxLbX+oR++jg8ddUYKOC3nLnqg0q1bxPZU=";
};
patches = [

View file

@ -0,0 +1,83 @@
{ lib,
stdenv,
fetchzip,
jre,
perl,
makeWrapper,
imagemagick,
makeDesktopItem,
copyDesktopItems,
desktopToDarwinBundle,
testers
}:
stdenv.mkDerivation (finalAttrs: {
pname = "fastqc";
version = "0.12.1";
src = fetchzip {
url = "https://www.bioinformatics.babraham.ac.uk/projects/fastqc/fastqc_v${finalAttrs.version}.zip";
hash = "sha256-TenRG2x8ivJ2HM2ZpLaJShp0yI0Qc6K5lW5/NJFAa1I";
};
dontBuild = true;
nativeBuildInputs = [ makeWrapper imagemagick ]
++ lib.optional stdenv.isLinux copyDesktopItems # postInstallHook
++ lib.optional stdenv.isDarwin desktopToDarwinBundle; #fixupOutputHook
buildInputs = [ jre perl];
desktopItem = (makeDesktopItem {
name = "FastQC";
exec = "fastqc";
icon = "fastqc";
desktopName = "FastQC";
comment = finalAttrs.meta.description;
categories = [ "Science" ];
});
desktopItems = [ finalAttrs.desktopItem ];
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,FastQC}
cp -r $src/* $out/FastQC
# Create desktop item
mkdir -p $out/share/{applications,icons}
# Freedesktop doesn't support windows ICO files. Use imagemagick to convert it to PNG
convert $out/FastQC/fastqc_icon.ico $out/share/icons/fastqc.png
runHook postInstall
'';
preFixup = ''
makeWrapper $out/FastQC/fastqc $out/bin/fastqc --prefix PATH : ${jre}/bin
'';
passthru.tests.version = testers.testVersion {
package = finalAttrs.finalPackage;
version = "v${finalAttrs.version}";
};
meta = {
description = "A quality control application for high throughput sequence data";
longDescription = ''
FastQC aims to provide a simple way to do some quality control checks on raw sequence data coming from high throughput sequencing pipelines. It provides a modular set of analyses which you can use to give a quick impression of whether your data has any problems of which you should be aware before doing any further analysis.
The main functions of FastQC are
- Import of data from BAM, SAM or FastQ files (any variant)
- Providing a quick overview to tell you in which areas there may be problems
- Summary graphs and tables to quickly assess your data
- Export of results to an HTML based permanent report
- Offline operation to allow automated generation of reports without running the interactive application
'';
homepage = "https://www.bioinformatics.babraham.ac.uk/projects/fastqc/";
sourceProvenance = [ lib.sourceTypes.binaryNativeCode ];
license = with lib.licenses; [ gpl3Plus asl20 ];
maintainers = [ lib.maintainers.dflores ];
mainProgram = "fastqc";
platforms = lib.platforms.unix;
};
})

View file

@ -2,15 +2,17 @@
, installShellFiles
, lib
, libftdi1
, libgpiod_1
, libgpiod
, libjaylink
, libusb1
, pciutils
, pkg-config
, stdenv
, withJlink ? true
, withGpio ? stdenv.isLinux
}:
stdenv.mkDerivation rec {
stdenv.mkDerivation {
pname = "flashprog";
version = "1.0.1";
@ -24,24 +26,36 @@ stdenv.mkDerivation rec {
installShellFiles
pkg-config
];
buildInputs = [
libftdi1
libjaylink
libusb1
] ++ lib.optionals (!stdenv.isDarwin) [
libgpiod_1
pciutils
] ++ lib.optionals (withJlink) [
libjaylink
] ++ lib.optionals (withGpio) [
libgpiod
];
makeFlags = [ "PREFIX=$(out)" "libinstall" ]
++ lib.optionals stdenv.isDarwin [ "CONFIG_ENABLE_LIBPCI_PROGRAMMERS=no" ]
++ lib.optionals (stdenv.isDarwin && stdenv.isx86_64) [ "CONFIG_INTERNAL_X86=no" "CONFIG_INTERNAL_DMI=no" "CONFIG_RAYER_SPI=0" ];
makeFlags =
let
yesNo = flag: if flag then "yes" else "no";
in
[
"libinstall"
"PREFIX=$(out)"
"CONFIG_JLINK_SPI=${yesNo withJlink}"
"CONFIG_LINUX_GPIO_SPI=${yesNo withGpio}"
"CONFIG_ENABLE_LIBPCI_PROGRAMMERS=${yesNo (!stdenv.isDarwin)}"
"CONFIG_INTERNAL_X86=${yesNo (!(stdenv.isDarwin) && stdenv.isx86_64)}"
"CONFIG_INTERNAL_DMI=${yesNo (!(stdenv.isDarwin) && stdenv.isx86_64)}"
"CONFIG_RAYER_SPI=${yesNo (!(stdenv.isDarwin) && stdenv.isx86_64)}"
];
meta = with lib; {
homepage = "https://flashprog.org";
description = "Utility for reading, writing, erasing and verifying flash ROM chips";
license = with licenses; [ gpl2 gpl2Plus ];
license = with licenses; [ gpl2Plus ];
maintainers = with maintainers; [ felixsinger ];
platforms = platforms.all;
mainProgram = "flashprog";

View file

@ -0,0 +1,36 @@
{
lib,
rustPlatform,
fetchFromGitHub,
}:
rustPlatform.buildRustPackage rec {
pname = "glas";
version = "0.2.2";
src = fetchFromGitHub {
owner = "maurobalbi";
repo = "glas";
rev = "v${version}";
sha256 = "sha256-y1sPDCHIfECEhKP6EQs3kDrX/yM+ni0irfPe1c50jJU=";
};
cargoHash = "sha256-h27NqsVOW+LM83xtSAV7cvlRbznGE87aJb2/WeSmfOY=";
doInstallCheck = true;
postInstallCheck = ''
$out/bin/glas --help > /dev/null
'';
meta = {
description = "A language server for the Gleam programming language.";
homepage = "https://github.com/maurobalbi/glas";
changelog = "https://github.com/maurobalbi/glas/tag/v${version}";
license = with lib.licenses; [
asl20
mit
];
mainProgram = "glas";
maintainers = with lib.maintainers; [ payas ];
};
}

View file

@ -13,24 +13,23 @@
, graphene
, gst_all_1
, glib-networking
, darwin
}:
stdenv.mkDerivation rec {
pname = "glide-media-player";
version = "0.6.2";
version = "0.6.3";
src = fetchFromGitHub {
owner = "philn";
repo = "glide";
rev = version;
hash = "sha256-SN/1Yf4fHlDbJ2X6DGktsn1GFW8bbkeznlO1S8sBZyg=";
hash = "sha256-rWWMMuA41uFWazIJBVLxzaCrR5X5tI4x+GXXYkfeqz8=";
};
cargoDeps = rustPlatform.fetchCargoTarball {
inherit src;
name = "${pname}-${version}";
hash = "sha256-2Ma7ZAKFiAQXFWFze4RLwGu33d/vC6FVW6fJdqwED20=";
hash = "sha256-Kvdbo5tkhwsah9W7Y5zqpoA3bVHfmjGj7Cjsqxkljls=";
};
postPatch = ''
@ -41,8 +40,6 @@ stdenv.mkDerivation rec {
patchShebangs --build \
scripts/meson_post_install.py \
build-aux/cargo-build.py
'' + lib.optionalString stdenv.isDarwin ''
sed -i "/wayland,x11egl,x11glx/d" meson.build
'';
nativeBuildInputs = [
@ -64,8 +61,6 @@ stdenv.mkDerivation rec {
gst_all_1.gst-plugins-bad
gst_all_1.gst-plugins-good
glib-networking
] ++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk_11_0.frameworks.IOKit
];
meta = with lib; {
@ -74,8 +69,7 @@ stdenv.mkDerivation rec {
license = licenses.mit;
maintainers = with maintainers; [ aleksana ];
mainProgram = "glide";
platforms = platforms.unix;
# error: could not find system library 'gstreamer-gl-1.0' required by the 'gstreamer-gl-sys' crate
broken = stdenv.isDarwin && stdenv.isx86_64;
# Required gdk4-{wayland,x11} and gstreamer-gl not available on darwin
platforms = subtractLists platforms.darwin platforms.unix;
};
}

View file

@ -1,43 +1,102 @@
{ lib
, buildGoModule
, fetchFromGitHub
, makeBinaryWrapper
, fetchpatch
, gobject-introspection
, gtk4
, libadwaita
, libfido2
, dbus
, pinentry-gnome3
, nix-update-script
, libnotify
, python3
, wrapGAppsHook
}:
buildGoModule rec {
pname = "goldwarden";
version = "0.2.13";
version = "0.2.13-unstable-2024-03-14";
src = fetchFromGitHub {
owner = "quexten";
repo = "goldwarden";
rev = "v${version}";
hash = "sha256-4KxPtsIEW46p+cFx6yeSdNlsffy9U31k+ZSkE6V0AFc=";
rev = "d6e1cd263365611e520a2ef6c7847c9da19362f1";
hash = "sha256-IItKOmE0xHKO2u5jp7R20/T2eSvQ3QCxlzp6R4oiqf8=";
};
patches = [
(fetchpatch {
url = "https://github.com/quexten/goldwarden/pull/140/commits/c134a0e61d51079c44865f68ab65cfb3aea6f8f2.patch";
hash = "sha256-nClC/FYq3muXMeYXln+VVGUhanqElEgJRosWeSTNlmM=";
})
(fetchpatch {
url = "https://github.com/quexten/goldwarden/pull/140/commits/86d4f907fba241fd66d0fb3c109c0281a9766bb4.patch";
hash = "sha256-A8PBzfyd2blFIjCeO4xOVJMQjnEPwtK4wTcRcfsjyDk=";
})
];
postPatch = ''
substituteInPlace browserbiometrics/chrome-com.8bit.bitwarden.json browserbiometrics/mozilla-com.8bit.bitwarden.json \
--replace-fail "@PATH@" "$out/bin/goldwarden"
substituteInPlace gui/com.quexten.Goldwarden.desktop \
--replace-fail "Exec=goldwarden_ui_main.py" "Exec=$out/bin/goldwarden-gui"
substituteInPlace gui/src/gui/browserbiometrics.py \
--replace-fail "flatpak run --filesystem=home --command=goldwarden com.quexten.Goldwarden" "goldwarden"
substituteInPlace gui/src/gui/ssh.py \
--replace-fail "flatpak run --command=goldwarden com.quexten.Goldwarden" "goldwarden" \
--replace-fail 'SSH_AUTH_SOCK=/home/$USER/.var/app/com.quexten.Goldwarden/data/ssh-auth-sock' 'SSH_AUTH_SOCK=/home/$USER/.goldwarden-ssh-agent.sock'
substituteInPlace gui/src/{linux/main.py,linux/monitors/dbus_monitor.py,gui/settings.py} \
--replace-fail "python3" "${(python3.buildEnv.override { extraLibs = pythonPath; }).interpreter}"
'';
vendorHash = "sha256-IH0p7t1qInA9rNYv6ekxDN/BT5Kguhh4cZfmL+iqwVU=";
ldflags = [ "-s" "-w" ];
nativeBuildInputs = [makeBinaryWrapper];
nativeBuildInputs = [
gobject-introspection
python3.pkgs.wrapPython
wrapGAppsHook
];
buildInputs = [libfido2];
buildInputs = [
gtk4
libadwaita
libfido2
libnotify
];
pythonPath = with python3.pkgs; [
dbus-python
pygobject3
tendo
];
postInstall = ''
wrapProgram $out/bin/goldwarden \
--suffix PATH : ${lib.makeBinPath [dbus pinentry-gnome3]}
chmod +x gui/goldwarden_ui_main.py
ln -s $out/share/goldwarden/goldwarden_ui_main.py $out/bin/goldwarden-gui
mkdir -p $out/share/goldwarden
cp -r gui/* $out/share/goldwarden/
rm $out/share/goldwarden/{com.quexten.Goldwarden.desktop,com.quexten.Goldwarden.metainfo.xml,goldwarden.svg,python3-requirements.json,requirements.txt}
install -Dm644 $src/resources/com.quexten.goldwarden.policy -t $out/share/polkit-1/actions
install -D gui/com.quexten.Goldwarden.desktop -t $out/share/applications
install -D gui/goldwarden.svg -t $out/share/icons/hicolor/scalable/apps
install -Dm644 gui/com.quexten.Goldwarden.metainfo.xml -t $out/share/metainfo
install -Dm644 resources/com.quexten.goldwarden.policy -t $out/share/polkit-1/actions
install -D browserbiometrics/chrome-com.8bit.bitwarden.json $out/etc/chrome/native-messaging-hosts/com.8bit.bitwarden.json
install -D browserbiometrics/chrome-com.8bit.bitwarden.json $out/etc/chromium/native-messaging-hosts/com.8bit.bitwarden.json
install -D browserbiometrics/chrome-com.8bit.bitwarden.json $out/etc/edge/native-messaging-hosts/com.8bit.bitwarden.json
install -D browserbiometrics/mozilla-com.8bit.bitwarden.json $out/lib/mozilla/native-messaging-hosts/com.8bit.bitwarden.json
'';
passthru.updateScript = nix-update-script {};
dontWrapGApps = true;
postFixup = ''
makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
wrapPythonProgramsIn $out/share/goldwarden "$out/share/goldwarden $pythonPath"
'';
meta = with lib; {
description = "A feature-packed Bitwarden compatible desktop integration";
description = "Feature-packed Bitwarden compatible desktop integration";
homepage = "https://github.com/quexten/goldwarden";
license = licenses.mit;
maintainers = with maintainers; [ arthsmn ];

View file

@ -0,0 +1,54 @@
{ lib
, fetchFromGitHub
, stdenv
, meson
, ninja
, cmake
, pkg-config
, wrapGAppsHook
, gtk3
, glib
, openssl
, nettle
, libb2
, libgcrypt
}:
stdenv.mkDerivation rec {
pname = "gtkhash";
version = "1.5";
src = fetchFromGitHub {
repo = "gtkhash";
owner = "gtkhash";
rev = "v${version}";
hash = "sha256-XpgTolpTSsW3i0xk19tt4cn9qANoeiq7YnBBR6g8ioU=";
};
nativeBuildInputs = [
meson
ninja
cmake
pkg-config
wrapGAppsHook
];
buildInputs = [
gtk3
glib
openssl
nettle
libb2
libgcrypt
];
strictDeps = true;
meta = with lib; {
description = "A cross-platform desktop utility for computing message digests or checksums";
homepage = "https://gtkhash.org";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ ByteSudoer ];
mainProgram = "gtkhash";
platforms = platforms.unix;
};
}

View file

@ -1,29 +0,0 @@
From 32a4beecbf8098fdbb15ef5f36088956922630f7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgraber@stgraber.org>
Date: Fri, 23 Feb 2024 18:47:15 -0500
Subject: [PATCH] incusd/device/disk: Fix incorrect block volume usage
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Stéphane Graber <stgraber@stgraber.org>
---
internal/server/device/disk.go | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/internal/server/device/disk.go b/internal/server/device/disk.go
index 0d19e21139..4f9a3e7c1b 100644
--- a/internal/server/device/disk.go
+++ b/internal/server/device/disk.go
@@ -339,6 +339,11 @@ func (d *disk) validateConfig(instConf instance.ConfigReader) error {
var usedBy []string
err = storagePools.VolumeUsedByInstanceDevices(d.state, d.pool.Name(), storageProjectName, &dbVolume.StorageVolume, true, func(inst db.InstanceArgs, project api.Project, usedByDevices []string) error {
+ // Don't count the current instance.
+ if d.inst != nil && d.inst.Project().Name == inst.Project && d.inst.Name() == inst.Name {
+ return nil
+ }
+
usedBy = append(usedBy, inst.Name)
return nil

View file

@ -31,10 +31,8 @@ buildGoModule {
subPackages = [ "cmd/incus" ];
postInstall = ''
# use custom bash completion as it has extra logic for e.g. instance names
installShellCompletion --bash --name incus ./scripts/bash/incus
installShellCompletion --cmd incus \
--bash <($out/bin/incus completion bash) \
--fish <($out/bin/incus completion fish) \
--zsh <($out/bin/incus completion zsh)
'';

View file

@ -45,12 +45,6 @@ buildGoModule rec {
inherit hash;
};
# replace with env var > 0.6 https://github.com/lxc/incus/pull/610
postPatch = ''
substituteInPlace internal/usbid/load.go \
--replace-fail "/usr/share/misc/usb.ids" "${hwdata}/share/hwdata/usb.ids"
'';
excludedPackages = [
# statically compile these
"cmd/incus-agent"
@ -103,10 +97,8 @@ buildGoModule rec {
'';
postInstall = ''
# use custom bash completion as it has extra logic for e.g. instance names
installShellCompletion --bash --name incus ./scripts/bash/incus
installShellCompletion --cmd incus \
--bash <($out/bin/incus completion bash) \
--fish <($out/bin/incus completion fish) \
--zsh <($out/bin/incus completion zsh)
'';

View file

@ -1,9 +1,6 @@
import ./generic.nix {
hash = "sha256-tGuAS0lZvoYb+TvmCklQ8TADZhbm4w/lhdI0ycS4/0o=";
version = "0.6.0";
vendorHash = "sha256-+WmgLOEBJ/7GF596iiTgyTPxn8l+hE6RVqjLKfCi5rs=";
patches = [
# fix storage bug, fixed in > 0.6
./529.patch
];
hash = "sha256-6TLoua3rooDRyPc5BPYgzU/oeVy6F8h+p3UtKGPZkAE=";
version = "0.7.0";
vendorHash = "sha256-Slw58pszT6sbpxK6/f+ojA+uStt0zSWxztFTm5ovZr8=";
patches = [ ];
}

View file

@ -10,12 +10,19 @@ def main [--lts = false, --regex: string] {
let current_version = nix eval --raw -f default.nix $"($attr).version" | str trim
if $latest_tag != $current_version {
print $"Updating: new ($latest_tag) != old ($current_version)"
update-source-version $attr $latest_tag $"--file=($file)"
let oldVendorHash = nix-instantiate . --eval --strict -A $"($attr).goModules.drvAttrs.outputHash" --json | from json
let vendorHash = do { nix-build -A $"($attr).goModules" } | complete | get stderr | lines | str trim | find --regex 'got:[[:space:]]*sha256' | split row ' ' | last
open $file | str replace $oldVendorHash $vendorHash | save --force $file
let checkBuild = do { nix-build -A $"($attr).goModules" } | complete
let vendorHash = $checkBuild.stderr | lines | str trim | find --regex 'got:[[:space:]]*sha256' | split row ' ' | last
if $vendorHash != null {
open $file | str replace $oldVendorHash $vendorHash | save --force $file
} else {
print $checkBuild.stderr
exit 1
}
}
{"lts?": $lts, before: $current_version, after: $latest_tag}

View file

@ -0,0 +1,32 @@
{ lib
, fetchzip
, stdenvNoCC
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "itsycal";
version = "0.15.3";
src = fetchzip {
url = "https://itsycal.s3.amazonaws.com/Itsycal-${finalAttrs.version}.zip";
hash = "sha256-jpTlJY7yAARrkHzreQKbFaKj0sYp950R0qPPcDeY6AE=";
};
installPhase = ''
runHook preInstall
mkdir -p $out/Applications/Itsycal.app
cp -R . $out/Applications/Itsycal.app
runHook postInstall
'';
meta = {
description = "Itsycal is a tiny menu bar calendar";
homepage = "https://www.mowglii.com/itsycal/";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ donteatoreo ];
platforms = lib.platforms.darwin;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
})

View file

@ -16,13 +16,13 @@
assert lib.assertOneOf "graphicsLibrary" graphicsLibrary [ "SDL2" "GLFW" ];
stdenv.mkDerivation (finalAttrs: {
pname = "jazz2";
version = "2.5.0";
version = "2.6.0";
src = fetchFromGitHub {
owner = "deathkiller";
repo = "jazz2-native";
rev = finalAttrs.version;
hash = "sha256-IFsSIfHmSE6B1bpc5RWetJnlkv/jjlAUvRFV1pvVVNo=";
hash = "sha256-ZTQz6+2myUIJr2HqiwYksM7qiwXrd4+3+h1TC6FuPFU=";
};
patches = [ ./nocontent.patch ];

View file

@ -0,0 +1,28 @@
{ lib
, stdenv
, rustPlatform
, fetchFromGitHub
}:
rustPlatform.buildRustPackage rec {
pname = "job-security";
version = "unstable-0-2024-03-24";
src = fetchFromGitHub {
owner = "yshui";
repo = "job-security";
rev = "3881a4a0e66afe19cbdba3f43d0f85732796f977";
hash = "sha256-mXmDzBsHdiim0bWrs0SvgtMZmKnYVz/RV9LNqPHHlnk=";
};
cargoHash = "sha256-W5evL36ByUUjvSwa3Nmf4MT2oZYoQ8kmchNOxUwmpuE=";
meta = {
description = "Job control from anywhere";
homepage = "https://github.com/yshui/job-security";
license = with lib.licenses; [ asl20 mit mpl20 ];
maintainers = with lib.maintainers; [ fgaz ];
mainProgram = "jobs";
broken = stdenv.isDarwin;
};
}

View file

@ -6,11 +6,11 @@
appimageTools.wrapType2 rec {
pname = "lunar-client";
version = "3.2.3";
version = "3.2.4";
src = fetchurl {
url = "https://launcherupdates.lunarclientcdn.com/Lunar%20Client-${version}.AppImage";
hash = "sha512-2zuVURKDw+Z/8I1AO8G5KPVOlPIZC/Mbt9jK5gn9CV1zmRiWKL+m1/Bw9/h7fanBdm0fhfLklplmlTTabPm7dg==";
hash = "sha512-KaQvjtSzQzebzPrcFBntCqP6fRbenH9tQo4LYO1TwDoJ7pAeZ8D4kSMRaRfFV0CPZ/pDnKECYdKXAuaujOpw8g==";
};
extraInstallCommands =

View file

@ -1,27 +1,22 @@
{ lib
, stdenvNoCC
, fetchurl
, unzip
, fetchzip
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "mousecape";
version = "1813";
src = fetchurl {
src = fetchzip {
url = "https://github.com/alexzielenski/Mousecape/releases/download/${finalAttrs.version}/Mousecape_${finalAttrs.version}.zip";
hash = "sha256-lp7HFGr1J+iQCUWVDplF8rFcTrGf+DX4baYzLsUi/9I=";
hash = "sha256-VjbvrXfsRFpbTJfIHFvyCxRdDcGNv0zzLToWn7lyLM8=";
};
sourceRoot = ".";
nativeBuildInputs = [ unzip ];
installPhase = ''
runHook preInstall
mkdir -p $out/Applications
mv Mousecape.app $out/Applications
mkdir -p $out/Applications/Mousecape.app
cp -R . $out/Applications/Mousecape.app/
runHook postInstall
'';
@ -30,7 +25,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
description = "A cursor manager for macOS built using private, nonintrusive CoreGraphics APIs";
homepage = "https://github.com/alexzielenski/Mousecape";
license = with lib; licenses.free;
maintainers = with lib; with maintainers; [ DontEatOreo ];
maintainers = with lib; with maintainers; [ donteatoreo ];
platforms = with lib; platforms.darwin;
sourceProvenance = with lib; with sourceTypes; [ binaryNativeCode ];
};

View file

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "plumber";
version = "2.6.0";
version = "2.6.1";
src = fetchFromGitHub {
owner = "streamdal";
repo = pname;
rev = "v${version}";
hash = "sha256-H1tyMedYKj1bePNcaEWYP3njHw57cJ0jgxwC7zDXQvk=";
hash = "sha256-7sOj21ZTmo3KJ8CduH25jA4gmXLMKi5QWAng6nP0dsQ=";
};
vendorHash = null;

View file

@ -7,10 +7,10 @@
inherit buildUnstable;
}).overrideAttrs (finalAttrs: _: {
pname = "renode-unstable";
version = "1.15.0+20240320git97be875a3";
version = "1.15.0+20240323git3bd8e280d";
src = fetchurl {
url = "https://builds.renode.io/renode-${finalAttrs.version}.linux-portable.tar.gz";
hash = "sha256-+1tOZ44fg/Z4n4gjPylRQlRE7KnL0AGcODlue/HLb3I=";
hash = "sha256-hIPBM9PE6vtqo8XJvOWS3mIa9Vr7v9bcMdXmeQzBYsk=";
};
})

View file

@ -2,6 +2,7 @@
, buildGoModule
, fetchFromGitHub
, fetchpatch2
, nixosTests
}:
let
version = "0.10.0";
@ -42,6 +43,16 @@ buildGoModule {
${skipTest 1 "TestOpensslCompatible" "scion-pki/trcs/sign_test.go"}
'';
postInstall = ''
set +e
mv $out/bin/gateway $out/bin/scion-ip-gateway
mv $out/bin/dispatcher $out/bin/scion-dispatcher
mv $out/bin/router $out/bin/scion-router
mv $out/bin/control $out/bin/scion-control
mv $out/bin/daemon $out/bin/scion-daemon
set -e
'';
doCheck = true;
patches = [
@ -51,6 +62,10 @@ buildGoModule {
})
];
passthru.tests = {
inherit (nixosTests) scion-freestanding-deployment;
};
meta = with lib; {
description = "A future Internet architecture utilizing path-aware networking";
homepage = "https://scion-architecture.net/";

View file

@ -0,0 +1,105 @@
{ stdenv
, autoconf, automake, itstool, intltool, pkg-config
, fetchFromGitHub
, glib
, gettext
, sqlite
, mono
, stfl
, makeWrapper, lib
, guiSupport ? true
, gtk-sharp-2_0
, gdk-pixbuf
, pango
}:
stdenv.mkDerivation rec {
pname = "smuxi";
version = "unstable-2023-07-01";
runtimeLoaderEnvVariableName = if stdenv.isDarwin then
"DYLD_FALLBACK_LIBRARY_PATH"
else
"LD_LIBRARY_PATH";
src = fetchFromGitHub {
owner = "meebey";
repo = "smuxi";
rev = "3e4b5050b66944532e95df3c31245c8ae6379b3f";
hash = "sha256-zSsckcEPEX99v3RkM4O4+Get5tnz4FOpiodoTGTZq+8=";
fetchSubmodules = true;
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ autoconf automake itstool intltool gettext
mono
stfl
makeWrapper ] ++ lib.optionals (guiSupport) [
gtk-sharp-2_0
# loaded at runtime by GTK#
gdk-pixbuf pango
];
preConfigure = ''
NOCONFIGURE=1 NOGIT=1 ./autogen.sh
'';
configureFlags = [
"--disable-frontend-gnome"
"--enable-frontend-stfl"
] ++ lib.optional guiSupport "--enable-frontend-gnome";
postInstall = ''
makeWrapper "${mono}/bin/mono" "$out/bin/smuxi-message-buffer" \
--add-flags "$out/lib/smuxi/smuxi-message-buffer.exe" \
--prefix ${runtimeLoaderEnvVariableName} : ${lib.makeLibraryPath [
gettext sqlite
]}
makeWrapper "${mono}/bin/mono" "$out/bin/smuxi-server" \
--add-flags "$out/lib/smuxi/smuxi-server.exe" \
--prefix ${runtimeLoaderEnvVariableName} : ${lib.makeLibraryPath [
gettext sqlite
]}
makeWrapper "${mono}/bin/mono" "$out/bin/smuxi-frontend-stfl" \
--add-flags "$out/lib/smuxi/smuxi-frontend-stfl.exe" \
--prefix ${runtimeLoaderEnvVariableName} : ${lib.makeLibraryPath [
gettext sqlite stfl
]}
makeWrapper "${mono}/bin/mono" "$out/bin/smuxi-frontend-gnome" \
--add-flags "$out/lib/smuxi/smuxi-frontend-gnome.exe" \
--prefix MONO_GAC_PREFIX : ${if guiSupport then gtk-sharp-2_0 else ""} \
--prefix ${runtimeLoaderEnvVariableName} : ${lib.makeLibraryPath [
gettext
glib
sqlite
gtk-sharp-2_0
gtk-sharp-2_0.gtk gdk-pixbuf pango
]}
# install log4net and nini libraries
mkdir -p $out/lib/smuxi/
cp -a lib/log4net.dll $out/lib/smuxi/
cp -a lib/Nini.dll $out/lib/smuxi/
# install GTK+ icon theme on Darwin
${if guiSupport && stdenv.isDarwin then "
mkdir -p $out/lib/smuxi/icons/
cp -a images/Smuxi-Symbolic $out/lib/smuxi/icons/
" else ""}
'';
meta = with lib; {
homepage = "https://smuxi.im/";
downloadPage = "https://smuxi.im/download/";
changelog = "https://github.com/meebey/smuxi/releases/tag/v${version}";
description = "irssi-inspired, detachable, cross-platform, multi-protocol (IRC, XMPP/Jabber) chat client for the GNOME desktop";
platforms = platforms.unix;
license = lib.licenses.gpl2Plus;
maintainers = with maintainers; [
meebey
];
};
}

View file

@ -0,0 +1,35 @@
{ lib
, cmake
, fetchFromGitHub
, sqlite
, stdenv
}:
stdenv.mkDerivation (finalAttrs: {
pname = "sqlite_orm";
version = "1.8.2";
src = fetchFromGitHub {
owner = "fnc12";
repo = "sqlite_orm";
rev = "v${finalAttrs.version}";
hash = "sha256-KqphGFcnR1Y11KqL7sxODSv7lEvcURdF6kLd3cg84kc=";
};
nativeBuildInputs = [
cmake
];
propagatedBuildInputs = [
sqlite
];
strictDeps = true;
meta = with lib; {
description = "Light header only SQLite ORM";
homepage = "https://sqliteorm.com/";
license = licenses.agpl3Only; # MIT license is commercial
maintainers = with maintainers; [ ambroisie ];
platforms = platforms.all;
};
})

View file

@ -0,0 +1,34 @@
{ lib
, buildGo122Module
, fetchFromGitHub
, openssl
}:
buildGo122Module rec {
pname = "ssh-tpm-agent";
version = "0.3.1";
src = fetchFromGitHub {
owner = "Foxboron";
repo = "ssh-tpm-agent";
rev = "v${version}";
hash = "sha256-8CGSiCOcns4cWkYWqibs6hAFRipYabKPCpkhxF4OE8w=";
};
proxyVendor = true;
vendorHash = "sha256-zUAIesBeuh1zlxXcjKSNmMawZGgUr9z3NzT0XKn/YCQ=";
buildInputs = [
openssl
];
meta = with lib; {
description = "SSH agent with support for TPM sealed keys for public key authentication";
homepage = "https://github.com/Foxboron/ssh-agent-tpm";
license = licenses.mit;
platforms = platforms.linux;
maintainers = with maintainers; [ sgo ];
mainProgram = "ssh-tpm-agent";
};
}

View file

@ -0,0 +1,80 @@
{ lib
, buildGoModule
, fetchFromGitHub
, installShellFiles
, makeWrapper
, less
, xdg-utils
, testers
, runCommand
, stackit-cli
}:
buildGoModule rec {
pname = "stackit-cli";
version = "0.1.0-prerelease.2";
src = fetchFromGitHub {
owner = "stackitcloud";
repo = "stackit-cli";
rev = "v${version}";
hash = "sha256-GS3ZXarhXs1xuVmiLPMrrzXnO79R1+2va0x7N7CKNjQ=";
};
vendorHash = "sha256-Cill5hq8KVeKGRX2u9oIudi/s8XHIW5C8sgbTshrLY4=";
subPackages = [ "." ];
CGO_ENABLED = 0;
ldflags = [
"-s"
"-w"
"-X main.version=${version}"
];
nativeBuildInputs = [ installShellFiles makeWrapper ];
preCheck = ''
export HOME=$TMPDIR # needed because the binary always creates a dir & config file
'';
postInstall = ''
export HOME=$TMPDIR # needed because the binary always creates a dir & config file
mv $out/bin/{${pname},stackit} # rename the binary
installShellCompletion --cmd stackit --bash <($out/bin/stackit completion bash)
installShellCompletion --cmd stackit --zsh <($out/bin/stackit completion zsh)
installShellCompletion --cmd stackit --fish <($out/bin/stackit completion fish)
# Use this instead, once https://github.com/stackitcloud/stackit-cli/issues/153 is fixed:
# installShellCompletion --cmd stackit \
# --bash <($out/bin/stackit completion bash) \
# --zsh <($out/bin/stackit completion zsh) \
# --fish <($out/bin/stackit completion fish)
# Ensure that all 3 completion scripts exist AND have content (should be kept for regression testing)
[ $(find $out/share -not -empty -type f | wc -l) -eq 3 ]
'';
postFixup = ''
wrapProgram $out/bin/stackit \
--suffix PATH : ${lib.makeBinPath [ less xdg-utils ]}
'';
nativeCheckInputs = [ less ];
passthru.tests = {
version = testers.testVersion {
package = stackit-cli;
command = "HOME=$TMPDIR stackit --version";
};
};
meta = with lib; {
description = "CLI to manage STACKIT cloud services";
homepage = "https://github.com/stackitcloud/stackit-cli";
changelog = "https://github.com/stackitcloud/stackit-cli/releases/tag/v${version}";
license = licenses.asl20;
maintainers = with maintainers; [ DerRockWolf ];
mainProgram = "stackit";
};
}

View file

@ -3,8 +3,8 @@
fetchFromGitHub,
installShellFiles,
lib,
makeWrapper,
nix-update-script,
stdenv,
steampipe,
testers,
}:
@ -16,30 +16,48 @@ buildGoModule rec {
src = fetchFromGitHub {
owner = "turbot";
repo = "steampipe";
rev = "v${version}";
rev = "refs/tags/v${version}";
hash = "sha256-Oz1T9koeXnmHc5oru1apUtmhhvKi/gAtg/Hb7HKkkP0=";
};
vendorHash = "sha256-U0BeGCRLjL56ZmVKcKqrrPTCXpShJzJq5/wnXDKax6g=";
proxyVendor = true;
patchPhase = ''
runHook prePatch
postPatch = ''
# Patch test that relies on looking up homedir in user struct to prefer ~
substituteInPlace pkg/steampipeconfig/shared_test.go \
--replace 'filehelpers "github.com/turbot/go-kit/files"' "" \
--replace 'filepaths.SteampipeDir, _ = filehelpers.Tildefy("~/.steampipe")' 'filepaths.SteampipeDir = "~/.steampipe"';
runHook postPatch
--replace-fail 'filehelpers "github.com/turbot/go-kit/files"' "" \
--replace-fail 'filepaths.SteampipeDir, _ = filehelpers.Tildefy("~/.steampipe")' 'filepaths.SteampipeDir = "~/.steampipe"';
'';
nativeBuildInputs = [ installShellFiles ];
nativeBuildInputs = [
installShellFiles
makeWrapper
];
ldflags = [ "-s" "-w" ];
ldflags = [
"-s"
"-w"
];
# panic: could not create backups directory: mkdir /var/empty/.steampipe: operation not permitted
doCheck = !stdenv.isDarwin;
doCheck = true;
checkFlags =
let
skippedTests = [
# panic: could not create backups directory: mkdir /var/empty/.steampipe: operation not permitted
"TestTrimBackups"
# Skip tests that require network access
"TestIsPortBindable"
];
in
[ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ];
postInstall = ''
wrapProgram $out/bin/steampipe \
--set-default STEAMPIPE_UPDATE_CHECK false \
--set-default STEAMPIPE_TELEMETRY none
INSTALL_DIR=$(mktemp -d)
installShellCompletion --cmd steampipe \
--bash <($out/bin/steampipe --install-dir $INSTALL_DIR completion bash) \
@ -56,12 +74,12 @@ buildGoModule rec {
updateScript = nix-update-script { };
};
meta = with lib; {
homepage = "https://steampipe.io/";
description = "select * from cloud;";
license = licenses.agpl3Only;
mainProgram = "steampipe";
maintainers = with maintainers; [ hardselius ];
meta = {
changelog = "https://github.com/turbot/steampipe/blob/v${version}/CHANGELOG.md";
description = "Dynamically query your cloud, code, logs & more with SQL";
homepage = "https://steampipe.io/";
license = lib.licenses.agpl3Only;
mainProgram = "steampipe";
maintainers = with lib.maintainers; [ hardselius anthonyroussel ];
};
}

View file

@ -0,0 +1,37 @@
{ cmake
, fetchFromGitea
, lib
, nlohmann_json
, qt6
, stdenv
}:
stdenv.mkDerivation (finalAttrs: {
version = "1.0";
pname = "swaymux";
src = fetchFromGitea {
rev = "v${finalAttrs.version}";
domain = "git.grimmauld.de";
owner = "Grimmauld";
repo = "swaymux";
hash = "sha256-M85pqfYnYeVPTZXKtjg/ks5LUl3u2onG9Nfn8Xs+BSA=";
};
buildInputs = [ qt6.qtwayland nlohmann_json qt6.qtbase];
nativeBuildInputs = [ cmake qt6.wrapQtAppsHook ];
doCheck = true;
meta = with lib; {
changelog = "https://git.grimmauld.de/Grimmauld/swaymux/commits/branch/main";
description = "A program to quickly navigate sway";
homepage = "https://git.grimmauld.de/Grimmauld/swaymux";
license = licenses.bsd3;
longDescription = ''
Swaymux allows the user to quickly navigate and administrate outputs, workspaces and containers in a tmux-style approach.
'';
mainProgram = "swaymux";
maintainers = with maintainers; [ grimmauld ];
platforms = platforms.linux;
};
})

View file

@ -0,0 +1,40 @@
{ lib
, stdenv
, fetchFromGitHub
, brotli
, bzip2
, lz4
, xz
, zlib
, zstd
}:
stdenv.mkDerivation (finalAttrs: {
pname = "ugrep-indexer";
version = "0.9.6";
src = fetchFromGitHub {
owner = "Genivia";
repo = "ugrep-indexer";
rev = "v${finalAttrs.version}";
hash = "sha256-ZXZF9ZSdfQ2gxi5JkDJCUzMbkTs9KLzZBsyYxR/v4tI=";
};
buildInputs = [
brotli
bzip2
lz4
zlib
zstd
xz
];
meta = with lib; {
description = "Utility that recursively indexes files to speed up recursive grepping";
homepage = "https://github.com/Genivia/ugrep-indexer";
changelog = "https://github.com/Genivia/ugrep-indexer/releases/tag/v${finalAttrs.version}";
maintainers = with maintainers; [ mikaelfangel ];
license = licenses.bsd3;
platforms = platforms.all;
};
})

View file

@ -0,0 +1,55 @@
{ lib
, autoconf-archive
, autoreconfHook
, boost
, fetchFromGitHub
, libtorrent-rasterbar
, libvlc
, openssl
, pkg-config
, stdenv
}:
# VLC does not know where the vlc-bittorrent package is installed.
# make sure to have something like:
# environment.variables.VLC_PLUGIN_PATH = "${pkgs.vlc-bittorrent}";
stdenv.mkDerivation (finalAttrs: {
pname = "vlc-bittorrent";
version = "2.15.0";
src = fetchFromGitHub {
owner = "johang";
repo = "vlc-bittorrent";
rev = "v${finalAttrs.version}";
hash = "sha256-7FHeQYHbMKZJ3yeHqxTTAUwghTje+gEX8gSEJzfG5sQ=";
};
nativeBuildInputs = [
autoconf-archive
autoreconfHook
pkg-config
];
buildInputs = [
boost
libtorrent-rasterbar
libvlc
openssl
];
strictDeps = true;
# It's a library, should not have a desktop file
postFixup = ''
rm -r $out/share/
'';
meta = with lib; {
description = "A bittorrent plugin for VLC";
homepage = "https://github.com/johang/vlc-bittorrent";
license = licenses.gpl3Plus;
platforms = platforms.linux;
maintainers = [ maintainers.kintrix ];
};
})

View file

@ -55,16 +55,16 @@ assert (extraParameters != null) -> set != null;
buildNpmPackage rec {
pname = "Iosevka${toString set}";
version = "29.0.3";
version = "29.0.4";
src = fetchFromGitHub {
owner = "be5invis";
repo = "iosevka";
rev = "v${version}";
hash = "sha256-7vNfmrQ/B+T9hF5/ikIU1RvBcSRStnEmOY7VPbrll6s=";
hash = "sha256-dkFvgiGCHvBp7gBNAG08cfpTc0c7b2oU56xfxjPHhm8=";
};
npmDepsHash = "sha256-FGGhuMlDhXd97AY23/ZPlrcrmirZIooAYJaskn2aM6w=";
npmDepsHash = "sha256-IvMO0LZy/vlNxsp2D5pK97l6OIltrjv8iZ2CGl2XhFM=";
nativeBuildInputs = [
remarshal

View file

@ -2,13 +2,13 @@
stdenv.mkDerivation {
pname = "rime-data";
version = "0.38.20211002";
version = "0.38.20231116";
src = fetchFromGitHub {
owner = "rime";
repo = "plum";
rev = "1730556e1da5a08bb8e0a656c4780a46851a2913";
sha256 = "sha256-D7rPUxcB3QkCtisfBLHPiqfgL5lqmxjSiuEcpE63elw=";
rev = "6f502ff6fa87789847fa18200415318e705bffa4";
sha256 = "sha256-DNSLP0dzzgJ6XzwvxGPeRqRrRIUV/GwD2+8cz9bYAwA=";
};
buildInputs = [ librime ];

View file

@ -5,8 +5,8 @@ mkdir -p package/rime
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-array";
rev = "d10f2f8b2aec7c7e736ace01e8a399e5ae5e7c3a";
sha256 = "sha256-4t6+gh2V57SueDp9Tn6vTuxQCZNGzjLdJEhzIEqRjdI=";
rev = "b37aad383ff6e71e457aa6d1d47d2040af8649b9";
sha256 = "0krvxnjr35r49wwi6bcjdnld6zbk791l7vm294wmdy36qfp2924y";
}} package/rime/array
ln -sv ${fetchFromGitHub {
owner = "rime";
@ -23,14 +23,14 @@ ln -sv ${fetchFromGitHub {
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-cantonese";
rev = "b6f800c74eb639816d56d0d5601aaa96c8963178";
sha256 = "1a4ksacbz8l30y3y5c017d0hzwik8knplglb3yswy7l4hsvaanyh";
rev = "e3c6b17e638ac8a9aeab4d5852e5909b049c5ab3";
sha256 = "171a64l17yb6isgiih2z0cp2vgzvdcn0vby3rk8556b0ir4j545q";
}} package/rime/cantonese
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-combo-pinyin";
rev = "a84065a86b272c76215215bd6f03c506b6e7097c";
sha256 = "1f0b4kakw0x26gmx7xi4f94nbjlb8lvi9bks4f92jswa045vnd87";
rev = "17b66079a23a00d3214639fee2b8ae97d3e620dc";
sha256 = "1izx29hawfryapfzadysjbb2zfw0yq6vwsw56khkf6gsaz1faamn";
}} package/rime/combo-pinyin
ln -sv ${fetchFromGitHub {
owner = "rime";
@ -41,14 +41,14 @@ ln -sv ${fetchFromGitHub {
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-emoji";
rev = "4c8c51f4a3bc7298c99376eda9bbd86070fc4fa1";
sha256 = "0175jqh210fncafqckr9zzaw55qpswmqjrykwms1apmc68l43122";
rev = "a18b09997e7c457066e4c92adf249a4b3e235f9c";
sha256 = "0gaa9r3yx1s135jlqxp85iyygcwqgz2k4n1bpvjr2n8xkn9297b6";
}} package/rime/emoji
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-essay";
rev = "9db2e77305e75798baf3ec8dcf1f82785b5e1be9";
sha256 = "03ypkkaadd5qmyg26n24a66cll90xvcimgbmiyv4d33jradiqg22";
rev = "e0519d0579722a0871efb68189272cba61a7350b";
sha256 = "1g7188vgklxindvm6p65b5jlm6z47fdmhmp0hqrrd6smg9pz4qpw";
}} package/rime/essay
ln -sv ${fetchFromGitHub {
owner = "rime";
@ -59,32 +59,32 @@ ln -sv ${fetchFromGitHub {
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-jyutping";
rev = "1e24baa6998815c716c581effe8ec65ee87c4e8c";
sha256 = "0s2rckpwlrm3n7w1csnqyi5p9mkpp3z87s7mrm2vc9sv06rpv7zl";
rev = "50100769f645bf92afef5170e3bf42be5147b41b";
sha256 = "1dmw2ssbqxbs93iab0whjzncsvv66vyw3hwb30kly2v18bwkagq0";
}} package/rime/jyutping
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-luna-pinyin";
rev = "623adb022b094d540218b287c2e601509eee3347";
sha256 = "06pcwp09l5wkqv7792gbsl31xnlb3gr9q6bgbp94vvq6m2ycahqz";
rev = "79aeae200a7370720be98232844c0715f277e1c0";
sha256 = "06vff5hq85dkbmqch9d3w2rww2n8sk41c7say0pdlkfphyjs76ps";
}} package/rime/luna-pinyin
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-middle-chinese";
rev = "9fad7a7c0c26167d5e6e85db8df48a15c7f7d4f0";
sha256 = "0a0bqrlzg0k692xblqnh1rh1fwwqqb205xwxlihgji85n8ibcgph";
rev = "582e144e525525ac2b6c2498097d7c7919e84174";
sha256 = "0ixj2f3syc0hv9n5r0cavcq0jrdf1www2frjl11855gwydp4lsx5";
}} package/rime/middle-chinese
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-pinyin-simp";
rev = "b0e84cda02c613ebdedc127a26131b3800f45a8e";
sha256 = "05v804qr3a9xvjzp9yid7231fi2l2yrl47ybbvql61z9k36ab094";
rev = "52b9c75f085479799553f2499c4f4c611d618cdf";
sha256 = "1zi9yqgijb4r3q5ah89hdwbli5xhlmg19xj8sq1grnpfbw2hbdbj";
}} package/rime/pinyin-simp
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-prelude";
rev = "3de303ffaa731dba07b0462ce59f4767e1219ad2";
sha256 = "0g7a0bla58rh1v3md59k6adk185pilb4z8i2i0pqdl4nwqp40n2p";
rev = "dd84abecc33f0b05469f1d744e32d2b60b3529e3";
sha256 = "14wn86xqvb6r73pgksi51wgfc70pj95iqrl85m2i0fwl43zg2y5g";
}} package/rime/prelude
ln -sv ${fetchFromGitHub {
owner = "rime";
@ -113,20 +113,20 @@ ln -sv ${fetchFromGitHub {
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-stroke";
rev = "ea8576d1accd6fda339e96b415caadb56e2a07d1";
sha256 = "07h6nq9867hjrd2v3h1pnr940sdrw4mqrzj43siz1rzjxz3s904r";
rev = "e6c7608925009636577ff7469eecc870f1de18f3";
sha256 = "1rzclksf09s9js6z9mjm4ibgybr6kg2c4xq4j6sg9b3pnjbjwv8g";
}} package/rime/stroke
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-terra-pinyin";
rev = "ce7b9249612f575d2f43d51fcacd31d1b4e0ef1b";
sha256 = "0vm303f4lrdmdmif5klrp6w29vn9z2vzw33cw0y83pcnz39wiads";
rev = "9427853de91d645d9aca9ceace8fe9e9d8bc5b50";
sha256 = "0f1wiqasy41hp3kw3qc5zk6z0rgfrswdw91kc66v1w1a3skb6wpp";
}} package/rime/terra-pinyin
ln -sv ${fetchFromGitHub {
owner = "rime";
repo = "rime-wubi";
rev = "f1876f08f1d4a9696395be0070c0e8e4353c44cb";
sha256 = "1d9y9rqssacria9d0hla96czsqv2wkfm6z926m1x269ryv96zxvk";
rev = "152a0d3f3efe40cae216d1e3b338242446848d07";
sha256 = "1p2ikcw40q84fx0ixarm1jfp8ax276pabansybchrj34cqs53sr1";
}} package/rime/wubi
ln -sv ${fetchFromGitHub {
owner = "rime";

View file

@ -37,7 +37,7 @@ mixRelease {
# of the no-deps-check requirement
buildPhase = ''
runHook preBuild
mix do compile --no-deps-check, elixir_ls.release
mix do compile --no-deps-check, elixir_ls.release${lib.optionalString (lib.versionAtLeast elixir.version "1.16.0") "2"}
runHook postBuild
'';

View file

@ -1,19 +1,22 @@
{ lib
, stdenv
, fetchurl
, unzip
, fetchFromGitHub
, zlib
}:
stdenv.mkDerivation rec {
pname = "atasm";
version = "1.09";
version = "1.23";
src = fetchurl {
url = "https://atari.miribilist.com/${pname}/${pname}${builtins.replaceStrings ["."] [""] version}.zip";
hash = "sha256-26shhw2r30GZIPz6S1rf6dOLKRpgpLwrqCRZX3+8PvA=";
src = fetchFromGitHub {
owner = "CycoPH";
repo = "atasm";
rev = "V${version}";
hash = "sha256-U1HNYTiXO6WZEQJl2icY0ZEVy82CsL1mKR7Xgj9OZ14=";
};
makefile = "Makefile";
patches = [
# make install fails because atasm.txt was moved; report to upstream
./0000-file-not-found.diff
@ -23,10 +26,6 @@ stdenv.mkDerivation rec {
dontConfigure = true;
nativeBuildInputs = [
unzip
];
buildInputs = [
zlib
];
@ -42,9 +41,10 @@ stdenv.mkDerivation rec {
'';
preInstall = ''
mkdir -p $out/bin/
install -d $out/share/doc/${pname} $out/man/man1
installFlagsArray+=(
DESTDIR=$out
DESTDIR=$out/bin/
DOCDIR=$out/share/doc/${pname}
MANDIR=$out/man/man1
)
@ -55,9 +55,10 @@ stdenv.mkDerivation rec {
'';
meta = with lib; {
homepage = "https://atari.miribilist.com/atasm/";
homepage = "https://github.com/CycoPH/atasm";
description = "A commandline 6502 assembler compatible with Mac/65";
license = licenses.gpl2Plus;
changelog = "https://github.com/CycoPH/atasm/releases/tag/V${version}";
maintainers = with maintainers; [ AndersonTorres ];
platforms = with platforms; unix;
};

View file

@ -213,6 +213,7 @@ in let
(!stdenv.targetPlatform.isWasm && stdenv.targetPlatform.useLLVM or false)
"-lunwind"
++ lib.optional stdenv.targetPlatform.isWasm "-fno-exceptions";
nixSupport.cc-ldflags = lib.optionals (!stdenv.targetPlatform.isWasm) [ "-L${targetLlvmLibraries.libunwind}/lib" ];
};
clangNoLibcxx = wrapCCWith rec {

View file

@ -227,7 +227,13 @@ self: super: builtins.intersectAttrs super {
ghc-debug-brick = enableSeparateBinOutput super.ghc-debug-brick;
nixfmt = enableSeparateBinOutput super.nixfmt;
calligraphy = enableSeparateBinOutput super.calligraphy;
niv = enableSeparateBinOutput (self.generateOptparseApplicativeCompletions [ "niv" ] super.niv);
niv = overrideCabal (drv: {
buildTools = (drv.buildTools or []) ++ [ pkgs.buildPackages.makeWrapper ];
postInstall = ''
wrapProgram ''${!outputBin}/bin/niv --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.nix ]}
'';
})
(enableSeparateBinOutput (self.generateOptparseApplicativeCompletions [ "niv" ] super.niv));
ghcid = enableSeparateBinOutput super.ghcid;
ormolu = self.generateOptparseApplicativeCompletions [ "ormolu" ] (enableSeparateBinOutput super.ormolu);
hnix = self.generateOptparseApplicativeCompletions [ "hnix" ] super.hnix;

View file

@ -65,7 +65,7 @@ stdenv.mkDerivation rec {
meta = with lib; {
description = "Graphical User Interface Toolkit for mono and .Net";
homepage = "https://www.mono-project.com/docs/gui/gtksharp";
platforms = platforms.linux;
platforms = platforms.unix;
license = licenses.gpl2;
};
}

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