Merge staging-next into staging
This commit is contained in:
@@ -354,7 +354,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
pnpmDeps = pnpm.fetchDeps {
|
||||
inherit (finalAttrs) pname version src;
|
||||
fetcherVersion = 2;
|
||||
fetcherVersion = 3;
|
||||
hash = "...";
|
||||
};
|
||||
})
|
||||
@@ -501,6 +501,7 @@ Changes can include workarounds or bug fixes to existing PNPM issues.
|
||||
|
||||
- 1: Initial version, nothing special
|
||||
- 2: [Ensure consistent permissions](https://github.com/NixOS/nixpkgs/pull/422975)
|
||||
- 3: [Build a reproducible tarball](https://github.com/NixOS/nixpkgs/pull/469950)
|
||||
|
||||
### Yarn {#javascript-yarn}
|
||||
|
||||
|
||||
@@ -12,46 +12,85 @@ let
|
||||
gid = config.ids.gids.mpd;
|
||||
cfg = config.services.mpd;
|
||||
|
||||
credentialsPlaceholder = (
|
||||
creds:
|
||||
let
|
||||
placeholders = (
|
||||
lib.imap0 (
|
||||
i: c: ''password "{{password-${toString i}}}@${lib.concatStringsSep "," c.permissions}"''
|
||||
) creds
|
||||
);
|
||||
in
|
||||
lib.concatStringsSep "\n" placeholders
|
||||
);
|
||||
|
||||
mpdConf = pkgs.writeText "mpd.conf" ''
|
||||
# This file was automatically generated by NixOS. Edit mpd's configuration
|
||||
# via NixOS' configuration.nix, as this file will be rewritten upon mpd's
|
||||
# restart.
|
||||
|
||||
music_directory "${cfg.musicDirectory}"
|
||||
playlist_directory "${cfg.playlistDirectory}"
|
||||
${lib.optionalString (cfg.dbFile != null) ''
|
||||
db_file "${cfg.dbFile}"
|
||||
''}
|
||||
state_file "${cfg.dataDir}/state"
|
||||
sticker_file "${cfg.dataDir}/sticker.sql"
|
||||
|
||||
${lib.optionalString (
|
||||
cfg.network.listenAddress != "any"
|
||||
) ''bind_to_address "${cfg.network.listenAddress}"''}
|
||||
${lib.optionalString (cfg.network.port != 6600) ''port "${toString cfg.network.port}"''}
|
||||
${lib.optionalString (cfg.fluidsynth) ''
|
||||
decoder {
|
||||
plugin "fluidsynth"
|
||||
soundfont "${pkgs.soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2"
|
||||
}
|
||||
''}
|
||||
|
||||
${lib.optionalString (cfg.credentials != [ ]) (credentialsPlaceholder cfg.credentials)}
|
||||
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
mkKeyValue =
|
||||
a:
|
||||
lib.mapAttrsToList (
|
||||
k: v:
|
||||
k
|
||||
+ " "
|
||||
+ (
|
||||
if builtins.isBool v then
|
||||
# Mainly for https://mpd.readthedocs.io/en/stable/user.html#zeroconf
|
||||
"\"" + (lib.boolToYesNo v) + "\""
|
||||
else
|
||||
"\"" + (toString v) + "\""
|
||||
)
|
||||
) a;
|
||||
nonBlockSettings = lib.filterAttrs (n: v: !(builtins.isAttrs v || builtins.isList v)) cfg.settings;
|
||||
pureBlockSettings = builtins.removeAttrs cfg.settings (builtins.attrNames nonBlockSettings);
|
||||
blocks =
|
||||
pureBlockSettings
|
||||
// lib.optionalAttrs cfg.fluidsynth {
|
||||
decoder = (pureBlockSettings.decoder or [ ]) ++ [
|
||||
{
|
||||
plugin = "fluidsynth";
|
||||
soundfont = "${pkgs.soundfont-fluid}/share/soundfonts/FluidR3_GM2-2.sf2";
|
||||
}
|
||||
];
|
||||
};
|
||||
processSingleBlock =
|
||||
n: v:
|
||||
[
|
||||
(n + " {")
|
||||
]
|
||||
# Add indentation, for better readability
|
||||
++ (map (l: " " + l) (mkKeyValue v))
|
||||
++ [ "}" ];
|
||||
mpdConf = pkgs.writeTextFile {
|
||||
name = "mpd.conf";
|
||||
text = ''
|
||||
# This file was automatically generated by NixOS. Edit mpd's configuration
|
||||
# via NixOS' configuration.nix, as this file will be rewritten upon mpd's
|
||||
# restart.
|
||||
''
|
||||
+ lib.concatStringsSep "\n" (
|
||||
mkKeyValue (
|
||||
{
|
||||
state_file = "${cfg.dataDir}/state";
|
||||
sticker_file = "${cfg.dataDir}/sticker.sql";
|
||||
}
|
||||
// nonBlockSettings
|
||||
)
|
||||
++ lib.flatten (
|
||||
lib.mapAttrsToList (
|
||||
n: v: if builtins.isList v then (map (b: processSingleBlock n b) v) else (processSingleBlock n v)
|
||||
) blocks
|
||||
)
|
||||
++ lib.imap0 (
|
||||
i: a: "password \"{{password-${toString i}}}@${lib.concatStringsSep "," a.permissions}\""
|
||||
) cfg.credentials
|
||||
);
|
||||
derivationArgs = {
|
||||
expectScript = ''
|
||||
spawn ${lib.getExe pkgs.buildPackages.mpd} --no-daemon "$env(out)"
|
||||
expect {
|
||||
"exception: Error in \"$env(out)\"" {
|
||||
puts "Config file invalid\n"
|
||||
exit 1
|
||||
}
|
||||
"exception:" {
|
||||
exit 0
|
||||
}
|
||||
}
|
||||
'';
|
||||
passAsFile = [
|
||||
"expectScript"
|
||||
];
|
||||
};
|
||||
checkPhase = ''
|
||||
${lib.getExe pkgs.buildPackages.expect} -f "$expectScriptPath"
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
{
|
||||
@@ -80,39 +119,16 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
musicDirectory = lib.mkOption {
|
||||
type = with lib.types; either path (strMatching "(http|https|nfs|smb)://.+");
|
||||
default = "${cfg.dataDir}/music";
|
||||
defaultText = lib.literalExpression ''"''${dataDir}/music"'';
|
||||
description = ''
|
||||
The directory or NFS/SMB network share where MPD reads music from. If left
|
||||
as the default value this directory will automatically be created before
|
||||
the MPD server starts, otherwise the sysadmin is responsible for ensuring
|
||||
the directory exists with appropriate ownership and permissions.
|
||||
'';
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = name;
|
||||
description = "User account under which MPD runs.";
|
||||
};
|
||||
|
||||
playlistDirectory = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = "${cfg.dataDir}/playlists";
|
||||
defaultText = lib.literalExpression ''"''${dataDir}/playlists"'';
|
||||
description = ''
|
||||
The directory where MPD stores playlists. If left as the default value
|
||||
this directory will automatically be created before the MPD server starts,
|
||||
otherwise the sysadmin is responsible for ensuring the directory exists
|
||||
with appropriate ownership and permissions.
|
||||
'';
|
||||
};
|
||||
|
||||
extraConfig = lib.mkOption {
|
||||
type = lib.types.lines;
|
||||
default = "";
|
||||
description = ''
|
||||
Extra directives added to to the end of MPD's configuration file,
|
||||
mpd.conf. Basic configuration like file location and uid/gid
|
||||
is added automatically to the beginning of the file. For available
|
||||
options see {manpage}`mpd.conf(5)`.
|
||||
'';
|
||||
group = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = name;
|
||||
description = "Group account under which MPD runs.";
|
||||
};
|
||||
|
||||
dataDir = lib.mkOption {
|
||||
@@ -126,48 +142,135 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = name;
|
||||
description = "User account under which MPD runs.";
|
||||
openFirewall = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Open ports in the firewall for mpd.";
|
||||
};
|
||||
|
||||
group = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = name;
|
||||
description = "Group account under which MPD runs.";
|
||||
};
|
||||
settings = lib.mkOption {
|
||||
type = lib.types.submodule {
|
||||
freeformType =
|
||||
let
|
||||
inherit (lib.types)
|
||||
oneOf
|
||||
attrsOf
|
||||
listOf
|
||||
str
|
||||
int
|
||||
bool
|
||||
path
|
||||
;
|
||||
atomType = oneOf [
|
||||
str
|
||||
int
|
||||
bool
|
||||
path
|
||||
];
|
||||
in
|
||||
attrsOf (oneOf [
|
||||
atomType
|
||||
(listOf (attrsOf atomType))
|
||||
]);
|
||||
options = {
|
||||
music_directory = lib.mkOption {
|
||||
type = with lib.types; either path (strMatching "([a-z]+)://.+");
|
||||
default = "${cfg.dataDir}/music";
|
||||
defaultText = lib.literalExpression ''"''${dataDir}/music"'';
|
||||
description = ''
|
||||
The directory or URI where MPD reads music from. If left
|
||||
as the default value this directory will automatically be created before
|
||||
the MPD server starts, otherwise the sysadmin is responsible for ensuring
|
||||
the directory exists with appropriate ownership and permissions.
|
||||
'';
|
||||
};
|
||||
|
||||
network = {
|
||||
playlist_directory = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = "${cfg.dataDir}/playlists";
|
||||
defaultText = lib.literalExpression ''"''${dataDir}/playlists"'';
|
||||
description = ''
|
||||
The directory where MPD stores playlists. If left as the default value
|
||||
this directory will automatically be created before the MPD server starts,
|
||||
otherwise the sysadmin is responsible for ensuring the directory exists
|
||||
with appropriate ownership and permissions.
|
||||
'';
|
||||
};
|
||||
|
||||
listenAddress = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "127.0.0.1";
|
||||
example = "any";
|
||||
description = ''
|
||||
The address for the daemon to listen on.
|
||||
Use `any` to listen on all addresses.
|
||||
'';
|
||||
bind_to_address = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "127.0.0.1";
|
||||
example = "any";
|
||||
description = ''
|
||||
The address for the daemon to listen on.
|
||||
Use `any` to listen on all addresses.
|
||||
'';
|
||||
};
|
||||
|
||||
port = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
default = 6600;
|
||||
description = ''
|
||||
This setting is the TCP port that is desired for the daemon to get assigned
|
||||
to.
|
||||
'';
|
||||
};
|
||||
|
||||
db_file = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = "${cfg.dataDir}/tag_cache";
|
||||
defaultText = lib.literalExpression ''"''${dataDir}/tag_cache"'';
|
||||
description = ''
|
||||
The path to MPD's database.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
port = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
default = 6600;
|
||||
description = ''
|
||||
This setting is the TCP port that is desired for the daemon to get assigned
|
||||
to.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
dbFile = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = "${cfg.dataDir}/tag_cache";
|
||||
defaultText = lib.literalExpression ''"''${dataDir}/tag_cache"'';
|
||||
default = { };
|
||||
description = ''
|
||||
The path to MPD's database. If set to `null` the
|
||||
parameter is omitted from the configuration.
|
||||
Configuration for MPD. MPD supports key-value like blocks for settings
|
||||
like `audio_output` and `neighbor`. Some of these blocks can be
|
||||
specified multiple times, so the following configuration:
|
||||
|
||||
```txt
|
||||
audio_output {
|
||||
device "iec958:CARD=Intel,DEV=0"
|
||||
mixer_control "PCM"
|
||||
name "My specific ALSA output"
|
||||
type "alsa"
|
||||
}
|
||||
audio_output {
|
||||
mixer_type "null"
|
||||
name "ALSA Null"
|
||||
type "alsa"
|
||||
}
|
||||
audio_output {
|
||||
name "The Pulse"
|
||||
type "pulse"
|
||||
}
|
||||
```
|
||||
|
||||
Can be inserted with:
|
||||
|
||||
```nix
|
||||
audio_output = [
|
||||
{
|
||||
type = "alsa";
|
||||
name = "My specific ALSA output";
|
||||
device = "iec958:CARD=Intel,DEV=0";
|
||||
mixer_control = "PCM";
|
||||
}
|
||||
{
|
||||
type = "alsa";
|
||||
name = "ALSA Null";
|
||||
mixer_type = "null";
|
||||
}
|
||||
{
|
||||
type = "pulse";
|
||||
name = "The Pulse";
|
||||
}
|
||||
];
|
||||
```
|
||||
'';
|
||||
};
|
||||
|
||||
@@ -226,7 +329,7 @@ in
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
If set, add fluidsynth soundfont and configure the plugin.
|
||||
If set, add fluidsynth soundfont `decoder` block.
|
||||
'';
|
||||
};
|
||||
};
|
||||
@@ -235,8 +338,47 @@ in
|
||||
|
||||
###### implementation
|
||||
|
||||
imports = [
|
||||
(lib.mkRenamedOptionModule
|
||||
[ "services" "mpd" "musicDirectory" ]
|
||||
[ "services" "mpd" "settings" "music_directory" ]
|
||||
)
|
||||
(lib.mkRenamedOptionModule
|
||||
[ "services" "mpd" "playlistDirectory" ]
|
||||
[ "services" "mpd" "settings" "playlist_directory" ]
|
||||
)
|
||||
(lib.mkRenamedOptionModule [ "services" "mpd" "dbFile" ] [ "services" "mpd" "settings" "db_file" ])
|
||||
(lib.mkRenamedOptionModule
|
||||
[ "services" "mpd" "network" "listenAddress" ]
|
||||
[ "services" "mpd" "settings" "bind_to_address" ]
|
||||
)
|
||||
(lib.mkRenamedOptionModule
|
||||
[ "services" "mpd" "network" "port" ]
|
||||
[ "services" "mpd" "settings" "port" ]
|
||||
)
|
||||
(lib.mkRemovedOptionModule
|
||||
[
|
||||
"services"
|
||||
"mpd"
|
||||
"extraConfig"
|
||||
]
|
||||
"services.mpd.extraConfig was replaced by the declarative services.mpd.settings option, per RFC42."
|
||||
)
|
||||
];
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
warnings =
|
||||
lib.optional
|
||||
(
|
||||
!(builtins.elem cfg.bind_to_address [
|
||||
"localhost"
|
||||
"127.0.0.1"
|
||||
])
|
||||
&& !cfg.openFirewall
|
||||
)
|
||||
"Using '${cfg.bind_to_address}' as services.mpd.settings.bind_to_address without enabling services.mpd.openFirewall, might prevent you from accessing MPD from other clients.";
|
||||
|
||||
# install mpd units
|
||||
systemd.packages = [ pkgs.mpd ];
|
||||
|
||||
@@ -245,12 +387,12 @@ in
|
||||
listenStreams = [
|
||||
"" # Note: this is needed to override the upstream unit
|
||||
(
|
||||
if pkgs.lib.hasPrefix "/" cfg.network.listenAddress then
|
||||
cfg.network.listenAddress
|
||||
if pkgs.lib.hasPrefix "/" cfg.settings.bind_to_address then
|
||||
cfg.settings.bind_to_address
|
||||
else
|
||||
"${
|
||||
lib.optionalString (cfg.network.listenAddress != "any") "${cfg.network.listenAddress}:"
|
||||
}${toString cfg.network.port}"
|
||||
lib.optionalString (cfg.settings.bind_to_address != "any") "${cfg.settings.bind_to_address}:"
|
||||
}${toString cfg.settings.port}"
|
||||
)
|
||||
];
|
||||
};
|
||||
@@ -282,17 +424,19 @@ in
|
||||
StateDirectory =
|
||||
[ ]
|
||||
++ lib.optionals (cfg.dataDir == "/var/lib/${name}") [ name ]
|
||||
++ lib.optionals (cfg.playlistDirectory == "/var/lib/${name}/playlists") [
|
||||
++ lib.optionals (cfg.settings.playlist_directory == "/var/lib/${name}/playlists") [
|
||||
name
|
||||
"${name}/playlists"
|
||||
]
|
||||
++ lib.optionals (cfg.musicDirectory == "/var/lib/${name}/music") [
|
||||
++ lib.optionals (cfg.settings.music_directory == "/var/lib/${name}/music") [
|
||||
name
|
||||
"${name}/music"
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.allowedTCPPorts = lib.optionals cfg.openFirewall [ cfg.settings.port ];
|
||||
|
||||
users.users = lib.optionalAttrs (cfg.user == name) {
|
||||
${name} = {
|
||||
inherit uid;
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
let
|
||||
cfg = config.services.mpdscribble;
|
||||
mpdCfg = config.services.mpd;
|
||||
mpdOpt = options.services.mpd;
|
||||
|
||||
endpointUrls = {
|
||||
"last.fm" = "http://post.audioscrobbler.com";
|
||||
@@ -114,11 +113,11 @@ in
|
||||
|
||||
host = lib.mkOption {
|
||||
default = (
|
||||
if mpdCfg.network.listenAddress != "any" then mpdCfg.network.listenAddress else "localhost"
|
||||
if mpdCfg.settings.bind_to_address != "any" then mpdCfg.settings.bind_to_address else "localhost"
|
||||
);
|
||||
defaultText = lib.literalExpression ''
|
||||
if config.${mpdOpt.network.listenAddress} != "any"
|
||||
then config.${mpdOpt.network.listenAddress}
|
||||
if config.services.mpd.settings.bind_to_address != "any"
|
||||
then config.services.mpd.settings.bind_to_address
|
||||
else "localhost"
|
||||
'';
|
||||
type = lib.types.str;
|
||||
@@ -148,8 +147,8 @@ in
|
||||
};
|
||||
|
||||
port = lib.mkOption {
|
||||
default = mpdCfg.network.port;
|
||||
defaultText = lib.literalExpression "config.${mpdOpt.network.port}";
|
||||
default = mpdCfg.settings.port;
|
||||
defaultText = lib.literalExpression "config.services.mpd.settings.port";
|
||||
type = lib.types.port;
|
||||
description = ''
|
||||
Port for the mpdscribble daemon to search for a mpd daemon on.
|
||||
|
||||
@@ -33,8 +33,8 @@ in
|
||||
|
||||
port = lib.mkOption {
|
||||
type = lib.types.port;
|
||||
default = config.services.mpd.network.port;
|
||||
defaultText = lib.literalExpression "config.services.mpd.network.port";
|
||||
default = config.services.mpd.settings.port;
|
||||
defaultText = lib.literalExpression "config.services.mpd.settings.port";
|
||||
description = "The port where MPD is listening.";
|
||||
example = 6600;
|
||||
};
|
||||
|
||||
@@ -176,6 +176,7 @@ in
|
||||
]
|
||||
++ lib.optional (cfg.configDir != null) "d '${cfg.configDir}' - ${cfg.user} ${cfg.group} - -"
|
||||
++ lib.optionals cfg.analysis.enable [
|
||||
"d '${cfg.stateDir}/tools' - ${cfg.user} ${cfg.group} - -"
|
||||
"d '${cfg.stateDir}/tools/klipper_estimator' - ${cfg.user} ${cfg.group} - -"
|
||||
"L+ '${cfg.stateDir}/tools/klipper_estimator/klipper_estimator_linux' - - - - ${lib.getExe pkgs.klipper-estimator}"
|
||||
];
|
||||
|
||||
@@ -245,6 +245,7 @@ in
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallFilter = [
|
||||
"@chown"
|
||||
"@system-service"
|
||||
"~@privileged"
|
||||
];
|
||||
|
||||
@@ -63,19 +63,28 @@
|
||||
# On New Event page
|
||||
machine.succeed("xdotool mousemove 500 230 click 1")
|
||||
machine.sleep(2)
|
||||
machine.send_chars("foobar")
|
||||
machine.send_chars("Poke")
|
||||
machine.sleep(2) # make sure they're actually in there
|
||||
machine.succeed("xdotool mousemove 1000 40 click 1")
|
||||
machine.sleep(10) # Give the app some time to save the event
|
||||
|
||||
# Can't consistently OCR for "Agenda". Just restart it.
|
||||
machine.succeed("pgrep -afx lomiri-calendar-app >&2")
|
||||
machine.succeed("pkill -efx lomiri-calendar-app >&2")
|
||||
machine.wait_until_fails("pgrep -afx lomiri-calendar-app >&2")
|
||||
machine.succeed("lomiri-calendar-app >&2 &")
|
||||
machine.sleep(10)
|
||||
machine.send_key("alt-f10")
|
||||
machine.sleep(2)
|
||||
machine.wait_for_text("Agenda")
|
||||
machine.screenshot("lomiri-calendar_eventadded")
|
||||
|
||||
# Back on main page
|
||||
# Event was created, does it have the correct name?
|
||||
machine.wait_for_text("foobar")
|
||||
machine.wait_for_text("Poke")
|
||||
machine.screenshot("lomiri-calendar_works")
|
||||
|
||||
machine.succeed("pkill -f lomiri-calendar-app")
|
||||
machine.succeed("pgrep -afx lomiri-calendar-app >&2")
|
||||
machine.succeed("pkill -efx lomiri-calendar-app >&2")
|
||||
machine.wait_until_fails("pgrep -afx lomiri-calendar-app >&2")
|
||||
|
||||
with subtest("lomiri calendar localisation works"):
|
||||
machine.succeed("env LANG=de_DE.UTF-8 lomiri-calendar-app >&2 &")
|
||||
|
||||
@@ -145,12 +145,12 @@ in
|
||||
with subtest("lomiri music plays music"):
|
||||
machine.succeed("xdotool mousemove 30 720 click 1") # Skip intro
|
||||
machine.sleep(2)
|
||||
machine.wait_for_text("Albums")
|
||||
machine.wait_for_window("Albums")
|
||||
machine.succeed("xdotool mousemove 25 45 click 1") # Open categories
|
||||
machine.sleep(2)
|
||||
machine.succeed("xdotool mousemove 25 240 click 1") # Switch to Tracks category
|
||||
machine.sleep(2)
|
||||
machine.wait_for_text("Tracks") # Written in larger text now, easier for OCR
|
||||
machine.wait_for_window("Tracks")
|
||||
machine.screenshot("lomiri-music_listing")
|
||||
|
||||
# Ensure pause colours isn't present already
|
||||
@@ -192,7 +192,7 @@ in
|
||||
machine.sleep(10)
|
||||
machine.send_key("alt-f10")
|
||||
machine.sleep(2)
|
||||
machine.wait_for_text("Titel")
|
||||
machine.wait_for_window("Titel")
|
||||
machine.screenshot("lomiri-music_localised")
|
||||
'';
|
||||
}
|
||||
|
||||
+32
-34
@@ -1,28 +1,18 @@
|
||||
{ pkgs, lib, ... }:
|
||||
let
|
||||
track = pkgs.fetchurl {
|
||||
# Sourced from http://freemusicarchive.org/music/Blue_Wave_Theory/Surf_Music_Month_Challenge/Skyhawk_Beach_fade_in
|
||||
# Sourced from https://freemusicarchive.org/music/Jazz_at_Mladost_Club/Jazz_Night/Blue_bossa/
|
||||
|
||||
name = "Blue_Wave_Theory-Skyhawk_Beach.mp3";
|
||||
url = "https://freemusicarchive.org/file/music/ccCommunity/Blue_Wave_Theory/Surf_Music_Month_Challenge/Blue_Wave_Theory_-_04_-_Skyhawk_Beach.mp3";
|
||||
hash = "sha256-91VDWwrcP6Cw4rk72VHvZ8RGfRBrpRE8xo/02dcJhHc=";
|
||||
name = "Blue bossa - Jazz at Miadost Club.mp3";
|
||||
url = "https://files.freemusicarchive.org/storage-freemusicarchive-org/music/no_curator/Jazz_at_Mladost_Club/Jazz_Night/Jazz_at_Mladost_Club_-_07_-_Blue_bossa.mp3?download=1&name=Jazz%20at%20Mladost%20Club%20-%20Blue%20bossa.mp3";
|
||||
hash = "sha256-cAG4nBuc97J3ZJc9cm/6vWTgnPL/Hfkar7cA3+89rto=";
|
||||
meta.license = lib.licenses.cc-by-sa-40;
|
||||
};
|
||||
|
||||
defaultCfg = rec {
|
||||
defaultMpdCfg = {
|
||||
user = "mpd";
|
||||
group = "mpd";
|
||||
dataDir = "/var/lib/mpd";
|
||||
musicDirectory = "${dataDir}/music";
|
||||
};
|
||||
|
||||
defaultMpdCfg = {
|
||||
inherit (defaultCfg)
|
||||
dataDir
|
||||
musicDirectory
|
||||
user
|
||||
group
|
||||
;
|
||||
enable = true;
|
||||
};
|
||||
|
||||
@@ -30,7 +20,7 @@ let
|
||||
{
|
||||
user,
|
||||
group,
|
||||
musicDirectory,
|
||||
dataDir,
|
||||
}:
|
||||
{
|
||||
description = "Sets up the music file(s) for MPD to use.";
|
||||
@@ -38,7 +28,7 @@ let
|
||||
after = [ "mpd.service" ];
|
||||
wantedBy = [ "default.target" ];
|
||||
script = ''
|
||||
cp ${track} ${musicDirectory}
|
||||
cp ${track} ${dataDir}/music
|
||||
'';
|
||||
serviceConfig = {
|
||||
User = user;
|
||||
@@ -57,7 +47,10 @@ in
|
||||
{
|
||||
name = "mpd";
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ emmanuelrosa ];
|
||||
maintainers = with lib.maintainers; [
|
||||
emmanuelrosa
|
||||
doronbehar
|
||||
];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
@@ -68,18 +61,20 @@ in
|
||||
lib.mkMerge [
|
||||
(mkServer {
|
||||
mpd = defaultMpdCfg // {
|
||||
network.listenAddress = "any";
|
||||
extraConfig = ''
|
||||
audio_output {
|
||||
type "alsa"
|
||||
name "ALSA"
|
||||
mixer_type "null"
|
||||
}
|
||||
'';
|
||||
settings = {
|
||||
bind_to_address = "any";
|
||||
audio_output = [
|
||||
{
|
||||
type = "alsa";
|
||||
name = "ALSA";
|
||||
mixer_type = "null";
|
||||
}
|
||||
];
|
||||
};
|
||||
openFirewall = true;
|
||||
};
|
||||
musicService = musicService { inherit (defaultMpdCfg) user group musicDirectory; };
|
||||
musicService = musicService { inherit (defaultMpdCfg) user group dataDir; };
|
||||
})
|
||||
{ networking.firewall.allowedTCPPorts = [ 6600 ]; }
|
||||
];
|
||||
|
||||
serverPulseAudio =
|
||||
@@ -87,15 +82,15 @@ in
|
||||
lib.mkMerge [
|
||||
(mkServer {
|
||||
mpd = defaultMpdCfg // {
|
||||
extraConfig = ''
|
||||
audio_output {
|
||||
type "pulse"
|
||||
name "The Pulse"
|
||||
settings.audio_output = [
|
||||
{
|
||||
type = "pulse";
|
||||
name = "The Pulse";
|
||||
}
|
||||
'';
|
||||
];
|
||||
};
|
||||
|
||||
musicService = musicService { inherit (defaultMpdCfg) user group musicDirectory; };
|
||||
musicService = musicService { inherit (defaultMpdCfg) user group dataDir; };
|
||||
})
|
||||
{
|
||||
services.pulseaudio = {
|
||||
@@ -144,5 +139,8 @@ in
|
||||
# The PulseAudio-based server is configured not to accept external client connections
|
||||
# to perform the following test:
|
||||
client.fail(f"{mpc} -h serverPulseAudio status")
|
||||
# For inspecting these files
|
||||
serverALSA.copy_from_vm("/run/mpd/mpd.conf", "ALSA")
|
||||
serverPulseAudio.copy_from_vm("/run/mpd/mpd.conf", "PulseAudio")
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
{ lib, vscode-utils }:
|
||||
|
||||
let
|
||||
inherit (vscode-utils) buildVscodeMarketplaceExtension;
|
||||
in
|
||||
buildVscodeMarketplaceExtension {
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
}:
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-wakatime";
|
||||
publisher = "WakaTime";
|
||||
version = "25.3.2";
|
||||
hash = "sha256-xX1vejS8zoidcI6fnp7vvtSw4rMHIe2IF4JQJB5hvqs=";
|
||||
version = "25.4.0";
|
||||
hash = "sha256-furuRhQPcK9r4G878WKD9BiQuiwRbn+pJpNWAbpIgOw=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -16,27 +16,116 @@ version skew policy.
|
||||
> Upgrade the server nodes first, one at a time. Once all servers have been upgraded, you may then
|
||||
> upgrade agent nodes.
|
||||
|
||||
## Release Channels
|
||||
## Release Maintenance
|
||||
|
||||
This section describes how new RKE2 releases are published in nixpkgs.
|
||||
|
||||
Before contributing new RKE2 packages or updating existing packages, make sure that
|
||||
|
||||
- New packages build (e.g. `nix-build -A rke2_1_34`)
|
||||
- All tests pass (e.g. `nix-build -A rke2_1_34.tests`)
|
||||
- You respect the nixpkgs [contributing guidelines](/CONTRIBUTING.md)
|
||||
|
||||
### Release Channels
|
||||
|
||||
RKE2 has two named release channels, i.e. `stable` and `latest`. Additionally, there exists a
|
||||
release channel tied to each Kubernetes minor version, e.g. `v1.32`.
|
||||
|
||||
Nixpkgs follows active minor version release channels (typically 4 at a time) and sets aliases for
|
||||
`rke2_stable` and `rke2_latest` accordingly.
|
||||
|
||||
Patch releases should be backported to the latest stable release branch; however, new minor
|
||||
versions are not backported.
|
||||
`rke2_stable` and `rke2_latest` accordingly. The [update-script](./update-script.sh) takes care of
|
||||
updating the aliases automatically.
|
||||
|
||||
For further information visit the
|
||||
[RKE2 release channels documentation](https://docs.rke2.io/upgrades/manual_upgrade?_highlight=manua#release-channels).
|
||||
|
||||
## EOL Versions
|
||||
### Patch Releases
|
||||
|
||||
Approximately every 4 months a minor RKE2 version reaches EOL. EOL versions should be removed from
|
||||
`nixpkgs-unstable`, preferably by throwing with an explanatory message in
|
||||
`pkgs/top-level/aliases.nix`. With stable releases, however, it isn't expected that packages will be
|
||||
removed. Instead we set `meta.knownVulnerabilities` for stable EOL packages, like it is also done
|
||||
for EOL JDKs, browser engines, Node.js versions, etc.
|
||||
Updates to existing packages should be performed by the update script. In order to update an RKE2
|
||||
package, you call the update script and pass it the minor version of the package you want to update.
|
||||
|
||||
For further information on the RKE2 lifecycle, see the
|
||||
[SUSE Product Support Lifecycle page](https://www.suse.com/lifecycle#rke2).
|
||||
For example, to update `rke2_1_34`:
|
||||
|
||||
```
|
||||
./pkgs/applications/networking/cluster/rke2/update-script.sh 34
|
||||
```
|
||||
|
||||
Patch releases for packages that are also available on the latest stable release channel should be
|
||||
backported. The backport PR can be created automatically by adding the `backport release-XX.XX`
|
||||
label on the update PR.
|
||||
|
||||
### Minor Releases
|
||||
|
||||
Every minor release gets a dedicated package in nixpkgs. For example, you would release `rke2_1_35`
|
||||
by doing the following:
|
||||
|
||||
1. Copy the version information of an existing release, its contents will be updated by the update
|
||||
script later on
|
||||
- `cp -r ./pkgs/applications/networking/cluster/rke2/1_34 ./pkgs/applications/networking/cluster/rke2/1_35`
|
||||
2. Add a new package block to [default.nix](./default.nix), you can copy an existing block from a
|
||||
previous release and update the version numbers
|
||||
- `rke2_1_35 = ...`
|
||||
3. Run the update script for the new package
|
||||
- `./pkgs/applications/networking/cluster/rke2/update-script.sh 35`
|
||||
|
||||
New minor versions are **not** backported to stable release channels.
|
||||
|
||||
### Final Patch Releases (EOL)
|
||||
|
||||
RKE2 follows Kubernetes' release schedule. In general, there is a final patch release with which a
|
||||
minor version enters end-of-life. See Kubernetes'
|
||||
[non-active branch history](https://kubernetes.io/releases/patch-releases/#non-active-branch-history)
|
||||
for further information. Approximately every 4 months a minor RKE2 version reaches EOL.
|
||||
|
||||
Due to the delay between Kubernetes releases and RKE2 releases, the final patch version for RKE2 may
|
||||
be released slightly after the EOL date. Usually this is nothing to worry about.
|
||||
|
||||
#### Handling EOL on unstable
|
||||
|
||||
EOL packages are removed from unstable. The final patch version should not be released on unstable,
|
||||
if it has entered end-of-life already.
|
||||
|
||||
In order to remove a versioned RKE2 package, create a PR achieving the following:
|
||||
|
||||
1. Remove the versioned folder containing the version files
|
||||
- `rm -r ./pkgs/applications/networking/cluster/rke2/1_34`
|
||||
2. Remove the package block from [default.nix](../default.nix) (`rke2_1_34 = ...`)
|
||||
3. Remove the package reference from
|
||||
[pkgs/top-level/all-packages.nix](/pkgs/top-level/all-packages.nix)
|
||||
4. Add a deprecation notice in [pkgs/top-level/aliases.nix](/pkgs/top-level/aliases.nix)
|
||||
- Such as
|
||||
`rke2_1_34 = throw "'rke2_1_34' has been removed from nixpkgs as it has reached end of life"; # Added 2026-10-27`
|
||||
|
||||
#### Handling EOL on stable
|
||||
|
||||
EOL packages should **not** be removed from a stable release branch. Instead we mark stable EOL
|
||||
packages as vulnerable due to EOL, like it is also done for EOL JDKs, browser engines, Node.js
|
||||
versions, etc.
|
||||
|
||||
In order to mark a versioned RKE2 package as vulnerable, override `meta.knownVulnerabilities` on the
|
||||
respective package block.
|
||||
|
||||
```nix
|
||||
{
|
||||
rke2_1_34 =
|
||||
(common (
|
||||
(import ./1_34/versions.nix)
|
||||
// {
|
||||
updateScript = [
|
||||
./update-script.sh
|
||||
"34"
|
||||
];
|
||||
}
|
||||
) extraArgs).overrideAttrs
|
||||
{
|
||||
meta.knownVulnerabilities = [ "rke2_1_34 has reached end-of-life on 2026-10-27" ];
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
> [!NOTE]
|
||||
> Remember to add "Not-cherry-picked-because: <reason>" in the commit message for commits on stable
|
||||
> that are not cherry picked.
|
||||
|
||||
#### Additional Resources
|
||||
|
||||
- [RKE2 Product Support Lifecycle page](https://www.suse.com/lifecycle#rke2)
|
||||
|
||||
@@ -9,7 +9,7 @@ makeScopeWithSplicing' {
|
||||
mkLinphoneDerivation = self.mk-linphone-derivation;
|
||||
|
||||
linphoneSdkVersion = "5.4.67";
|
||||
linphoneSdkHash = "sha256-QM4EVm7VJeOTt5Dc4DFAJOrGphCRcGniN0Tnfl4zab8=";
|
||||
linphoneSdkHash = "sha256-YG+GF6En1r8AYoIj7E5hqPcmXidMmO0ZKVx/YC5w55I=";
|
||||
};
|
||||
f =
|
||||
self:
|
||||
|
||||
@@ -109,7 +109,7 @@ tryHashedMirrors() {
|
||||
set -o noglob
|
||||
|
||||
urls2=
|
||||
for url in $urls; do
|
||||
for url in "${urls[@]}"; do
|
||||
if test "${url:0:9}" != "mirror://"; then
|
||||
urls2="$urls2 $url"
|
||||
else
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
xdg-user-dirs,
|
||||
keybinder3,
|
||||
libnotify,
|
||||
gst_all_1,
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -17,11 +18,11 @@ let
|
||||
rec {
|
||||
x86_64-linux = {
|
||||
urlSuffix = "linux-x86_64.tar.gz";
|
||||
hash = "sha256-HXBRWQfdhlKmOOULdRELrGcxVVhKV+PvgtRHW1yU6+I=";
|
||||
hash = "sha256-87mauW50ccOaPyK04O4I7+0bsvxVrdFxhi/Muc53wDY=";
|
||||
};
|
||||
x86_64-darwin = {
|
||||
urlSuffix = "macos-universal.zip";
|
||||
hash = "sha256-Mv4HfG93+NpbMAhDwcXZ260APL+sbYM6C+DqGZr6ogU=";
|
||||
hash = "sha256-a1WhOQ8NU3/aGAdaw8o3y7ckRdBsNgLZZ2nOrMsQdOA=";
|
||||
};
|
||||
aarch64-darwin = x86_64-darwin;
|
||||
}
|
||||
@@ -30,7 +31,7 @@ let
|
||||
in
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "appflowy";
|
||||
version = "0.10.4";
|
||||
version = "0.10.6";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://github.com/AppFlowy-IO/appflowy/releases/download/${finalAttrs.version}/AppFlowy-${finalAttrs.version}-${dist.urlSuffix}";
|
||||
@@ -48,6 +49,8 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
gtk3
|
||||
keybinder3
|
||||
libnotify
|
||||
gst_all_1.gstreamer
|
||||
gst_all_1.gst-plugins-base
|
||||
];
|
||||
|
||||
dontBuild = true;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
buildGoModule,
|
||||
buildGo124Module,
|
||||
fetchFromGitHub,
|
||||
go-task,
|
||||
}:
|
||||
|
||||
buildGoModule rec {
|
||||
buildGo124Module rec {
|
||||
pname = "arduino-create-agent";
|
||||
version = "1.7.0";
|
||||
|
||||
|
||||
@@ -18,16 +18,16 @@
|
||||
}:
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "asusctl";
|
||||
version = "6.1.17";
|
||||
version = "6.2.0";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "asus-linux";
|
||||
repo = "asusctl";
|
||||
tag = version;
|
||||
hash = "sha256-rNLQYCE7NZAel2fr5VoAMlm7QkH1KrySKdEn2+WMPo8=";
|
||||
hash = "sha256-frQbfCdK7bD6IAUa+MAOaRLhMrbdFRdHocQ0Z1tzsqE=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-/vMVSGUO6Zu/8GSTq1jsXLWVP9sWsuD7fJty3NnKXf4=";
|
||||
cargoHash = "sha256-Z3JFp/qH3mD3Hy/kqSONOZ+syulgr+t0ZzFRvNN+Ayg=";
|
||||
|
||||
postPatch = ''
|
||||
files="
|
||||
@@ -46,7 +46,6 @@ rustPlatform.buildRustPackage rec {
|
||||
substituteInPlace rog-control-center/src/main.rs \
|
||||
--replace-fail 'std::env::var("RUST_TRANSLATIONS").is_ok()' 'true'
|
||||
|
||||
substituteInPlace data/asusd.rules --replace-fail /usr/bin/systemctl ${lib.getExe' systemd "systemctl"}
|
||||
substituteInPlace data/asusd.service \
|
||||
--replace-fail /usr/bin/asusd $out/bin/asusd \
|
||||
--replace-fail /bin/sleep ${lib.getExe' coreutils "sleep"}
|
||||
@@ -106,6 +105,7 @@ rustPlatform.buildRustPackage rec {
|
||||
maintainers = with lib.maintainers; [
|
||||
k900
|
||||
aacebedo
|
||||
yuannan
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
|
||||
python3,
|
||||
python3Packages,
|
||||
nimble,
|
||||
nim,
|
||||
}:
|
||||
|
||||
buildNimPackage rec {
|
||||
@@ -71,26 +69,23 @@ buildNimPackage rec {
|
||||
--replace-fail '"main=auto-editor"' '"main"'
|
||||
'';
|
||||
|
||||
# TODO: Fix checks
|
||||
/*
|
||||
nativeCheckInputs = [
|
||||
python3Packages.av
|
||||
python3
|
||||
];
|
||||
nativeCheckInputs = [
|
||||
python3
|
||||
python3Packages.av
|
||||
];
|
||||
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
checkPhase = ''
|
||||
runHook preCheck
|
||||
|
||||
nim c \
|
||||
${if withHEVC then "-d:enable_hevc" else ""} \
|
||||
${if withWhisper then "-d:enable_whisper" else ""} \
|
||||
-r $src/src/rationals
|
||||
eval "nim r --nimcache:$NIX_BUILD_TOP/nimcache $nimFlags $src/tests/rationals.nim"
|
||||
|
||||
python3 $src/tests/test.py
|
||||
substituteInPlace tests/test.py \
|
||||
--replace-fail '"./auto-editor"' "\"$out/bin/main\""
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
*/
|
||||
python3 tests/test.py
|
||||
|
||||
runHook postCheck
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/main $out/bin/auto-editor
|
||||
|
||||
@@ -28,8 +28,8 @@ stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
src
|
||||
pnpmWorkspaces
|
||||
;
|
||||
fetcherVersion = 1;
|
||||
hash = "sha256-NvyqPv5OKgZi3hW98Da8LhsYatmrzrPX8kLOfLr+BrI=";
|
||||
fetcherVersion = 3;
|
||||
hash = "sha256-6i+1V3ZkjiJ/IXDun3JfwmfDOiemxCmAXMzS/rGT6ZU=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -12,16 +12,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "bettercap";
|
||||
version = "2.41.4";
|
||||
version = "2.41.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bettercap";
|
||||
repo = "bettercap";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-y23gNqS5f/MP+wyRMxe40I+9RuZGyZEok17LIc9Z8O4=";
|
||||
sha256 = "sha256-mw2Fe/7kSowozUpmXC5tMHZ02bF5+UHmy+lmkJ6SeLM=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-1kgjMPsj8z2Cl0YWe/1zY0Zuiza0X+ZAIgsMqPhCrMw=";
|
||||
vendorHash = "sha256-ssNGy40KMJ9P33uEGyYOer92QRS2T6DQlKaf/3XMFwQ=";
|
||||
|
||||
doCheck = false;
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ let
|
||||
exec = "bolt-launcher";
|
||||
icon = "bolt-launcher";
|
||||
categories = [ "Game" ];
|
||||
startupWMClass = "BoltLauncher";
|
||||
})
|
||||
];
|
||||
});
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
meson,
|
||||
ninja,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "bstring";
|
||||
version = "1.0.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "msteinert";
|
||||
repo = "bstring";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-efXMSRcPgo+WlOdbS1kY2PYQqSVwcsVSyU1JfsU8OOo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
meson
|
||||
ninja
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Better String Library for C";
|
||||
homepage = "https://github.com/msteinert/bstring";
|
||||
changelog = "https://github.com/msteinert/bstring/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.bsd3;
|
||||
platforms = lib.platforms.unix;
|
||||
maintainers = with lib.maintainers; [ nulleric ];
|
||||
};
|
||||
})
|
||||
@@ -6,7 +6,7 @@
|
||||
installShellFiles,
|
||||
nixosTests,
|
||||
externalPlugins ? [ ],
|
||||
vendorHash ? "sha256-pU8INVCKjYfAFOeobM7N1XCMHod7Kz0N5NKwpMpA2lU=",
|
||||
vendorHash ? "sha256-bnNpJgy54wvTST1Jtfbd1ldLJrIzTW62TL7wyHeqz28=",
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -14,13 +14,13 @@ let
|
||||
in
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "coredns";
|
||||
version = "1.13.1";
|
||||
version = "1.13.2";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "coredns";
|
||||
repo = "coredns";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-rWa4xjHRREoMtvPqW6ZP6Ym9qNTa0l8Opd15FsmxraI=";
|
||||
hash = "sha256-9ggyFixdNy0t4UA8ZxU5oMUzA/8EB/k1jors4f8Q6YE=";
|
||||
};
|
||||
|
||||
inherit vendorHash;
|
||||
@@ -135,6 +135,7 @@ buildGoModule (finalAttrs: {
|
||||
maintainers = with lib.maintainers; [
|
||||
deltaevo
|
||||
djds
|
||||
johanot
|
||||
rtreffer
|
||||
rushmorem
|
||||
];
|
||||
|
||||
@@ -32,13 +32,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ddnet";
|
||||
version = "19.5";
|
||||
version = "19.6";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ddnet";
|
||||
repo = "ddnet";
|
||||
tag = version;
|
||||
hash = "sha256-L9n6jvI9rzrBp8yzKQPZRBSbT5/ZnEm6eLW6qMA+sy0=";
|
||||
hash = "sha256-U0Yd3Xus0hsBpbXUsEC7EyoMtmsOXZJT4c3cFai918g=";
|
||||
};
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "exfatprogs";
|
||||
version = "1.3.0";
|
||||
version = "1.3.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "exfatprogs";
|
||||
repo = "exfatprogs";
|
||||
rev = version;
|
||||
sha256 = "sha256-2kD2ZENAyhApYHs6+NNYkxfLj5fw/cIHRUhw0UnQx04=";
|
||||
sha256 = "sha256-AwY5TkQRfWjkkcleymNN580mKGxIdZ0O30tt6yBbo5M=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -7,18 +7,18 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "flaca";
|
||||
version = "3.4.2";
|
||||
version = "3.5.3";
|
||||
|
||||
lockFile = fetchurl {
|
||||
url = "https://github.com/Blobfolio/flaca/releases/download/v${finalAttrs.version}/Cargo.lock";
|
||||
hash = "sha256-6SpIqz/iLGVvOkwfiTcvf2EdlbVafQ+aHVc7taYLPDc=";
|
||||
hash = "sha256-NNeq8qr+z0s98mgFYyUu9aNRqaAi2CZfQx0vQzSzOc8=";
|
||||
};
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Blobfolio";
|
||||
repo = "flaca";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-9fD+nfSe0Rk06d+o3hnMH2lC6OAFa10gDNiDW57lSTg=";
|
||||
hash = "sha256-Fh+nWnAG87NL3scr/y2jCNqaeJtEwi4nCYTGwnmEsIQ=";
|
||||
};
|
||||
|
||||
postUnpack = ''
|
||||
@@ -27,7 +27,7 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
|
||||
nativeBuildInputs = [ rustPlatform.bindgenHook ];
|
||||
|
||||
cargoHash = "sha256-LVY1+Nvcy7WoJ7Bsf1rgrdTzLMRqpquDXD8X3X8jX20=";
|
||||
cargoHash = "sha256-yHkUsxJppHhIpgX7Vtrs8TCy43xaNpqoVkMZ0msr02k=";
|
||||
|
||||
meta = {
|
||||
description = "CLI tool to losslessly compress JPEG and PNG images";
|
||||
|
||||
@@ -13,16 +13,16 @@
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "foundry";
|
||||
version = "1.4.4";
|
||||
version = "1.5.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "foundry-rs";
|
||||
repo = "foundry";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-u+JCurH1gx4onC5Poxxd9+gVrUyyebcd6xnXY4Le6Rs=";
|
||||
hash = "sha256-mbOv5XZH+AYZQjSUI+ksuAdLxZyRdF0LXK/8Q1DIgrU=";
|
||||
};
|
||||
|
||||
cargoHash = "sha256-JLuCZckiNv0t+kPuDk6TWmPIXKOvqf3HR/oFrQ5fKKQ=";
|
||||
cargoHash = "sha256-vws7LcBRtoha+Sa4TLDNxMKA8caKkWFOauCLZs6we4Y=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
|
||||
@@ -945,9 +945,21 @@
|
||||
"urls": [
|
||||
"dweb:/ipfs/QmPsmKxpd5berCgcTBXXPBC4PLHrb56tr3f6ZMxPGEf6vn"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "solc-linux-amd64-v0.8.31+commit.fd3a2265",
|
||||
"version": "0.8.31",
|
||||
"build": "commit.fd3a2265",
|
||||
"longVersion": "0.8.31+commit.fd3a2265",
|
||||
"keccak256": "0xc6f3968537d87ec3432a06c25840491a3fac9d538c3e7c30900f47722f978f31",
|
||||
"sha256": "0xaac9cd0116e9ae0cd3d8f64a8641381845dc9f12e2a52653de36fb619323e557",
|
||||
"urls": [
|
||||
"dweb:/ipfs/QmcpFFGAaoKkwiqng4czei7sa5Mvd9Hv4vRwUpRNNTCb9r"
|
||||
]
|
||||
}
|
||||
],
|
||||
"releases": {
|
||||
"0.8.31": "solc-linux-amd64-v0.8.31+commit.fd3a2265",
|
||||
"0.8.30": "solc-linux-amd64-v0.8.30+commit.73712a01",
|
||||
"0.8.29": "solc-linux-amd64-v0.8.29+commit.ab55807c",
|
||||
"0.8.28": "solc-linux-amd64-v0.8.28+commit.7893614a",
|
||||
@@ -1035,5 +1047,5 @@
|
||||
"0.4.11": "solc-linux-amd64-v0.4.11+commit.68ef5810",
|
||||
"0.4.10": "solc-linux-amd64-v0.4.10+commit.9e8cc01b"
|
||||
},
|
||||
"latestRelease": "0.8.30"
|
||||
"latestRelease": "0.8.31"
|
||||
}
|
||||
|
||||
@@ -1066,9 +1066,21 @@
|
||||
"urls": [
|
||||
"dweb:/ipfs/QmbrZ9EQQakmwZ2MKzdT6Xp6RQfwbbc6bhrP7ZSeMGE6fx"
|
||||
]
|
||||
},
|
||||
{
|
||||
"path": "solc-macosx-amd64-v0.8.31+commit.fd3a2265",
|
||||
"version": "0.8.31",
|
||||
"build": "commit.fd3a2265",
|
||||
"longVersion": "0.8.31+commit.fd3a2265",
|
||||
"keccak256": "0xe24d2e6c51018020bd86cd51369e4087f3f59288577dd038326ebf84becf26c2",
|
||||
"sha256": "0xf5a243d6b2dd8fba307e36c5fefa2d8eb3ae74ba81036d1c17c971b5d346ade9",
|
||||
"urls": [
|
||||
"dweb:/ipfs/QmXnqLGQF6Dgpkegp59Z8DcSq7UeT9jY7ENAWUzYjPaq8H"
|
||||
]
|
||||
}
|
||||
],
|
||||
"releases": {
|
||||
"0.8.31": "solc-macosx-amd64-v0.8.31+commit.fd3a2265",
|
||||
"0.8.30": "solc-macosx-amd64-v0.8.30+commit.73712a01",
|
||||
"0.8.29": "solc-macosx-amd64-v0.8.29+commit.ab55807c",
|
||||
"0.8.28": "solc-macosx-amd64-v0.8.28+commit.7893614a",
|
||||
@@ -1167,5 +1179,5 @@
|
||||
"0.4.0": "solc-macosx-amd64-v0.4.0+commit.acd334c9",
|
||||
"0.3.6": "solc-macosx-amd64-v0.3.6+commit.988fe5e5"
|
||||
},
|
||||
"latestRelease": "0.8.30"
|
||||
"latestRelease": "0.8.31"
|
||||
}
|
||||
|
||||
@@ -40,8 +40,8 @@ for url in "${urls[@]}"; do
|
||||
# Extract filename from URL
|
||||
filename=$(extract_filename "$url")
|
||||
|
||||
# Download the file and fix line endings
|
||||
# Download the file, filter out prereleases, and fix line endings
|
||||
echo "Fetching $url to $dir/$filename"
|
||||
curl -sL "$url" -o "${dir}/${filename}"
|
||||
curl -sL "$url" | jq 'del(.builds[] | select(has("prerelease")))' > "${dir}/${filename}"
|
||||
ensure_unix_format "${dir}/${filename}"
|
||||
done
|
||||
|
||||
@@ -29,13 +29,13 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "homepage-dashboard";
|
||||
version = "1.7.0";
|
||||
version = "1.8.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "gethomepage";
|
||||
repo = "homepage";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-03am9z381UozNsmWZefopMp8/tLycXJyiZ5BUGaV1kY=";
|
||||
hash = "sha256-T2bAN8ucCjcWhXScTI8YxtfrwK9NEfHGHIE8xJgD6Bs=";
|
||||
};
|
||||
|
||||
pnpmDeps = pnpm_10.fetchDeps {
|
||||
@@ -45,7 +45,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
src
|
||||
;
|
||||
fetcherVersion = 1;
|
||||
hash = "sha256-svkqmRFwZpcExFWtAbLL0lpHhzsI2s7RiLfQajIqjck=";
|
||||
hash = "sha256-42dT1za9M4DowBh27UYh2QDyoVoNWA/L/9lyIY5OVwM=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -19,13 +19,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "iconic";
|
||||
version = "2025.3.2";
|
||||
version = "2025.9.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "youpie";
|
||||
repo = "Iconic";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-mj95GShV/PxFXweL14zTVANO10CGpXyktJjJGtD1XS8=";
|
||||
hash = "sha256-vjtPVE+n1p5DB+KewhylA9w1kVkpKyDz0WF5Mrd+BBM=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -33,15 +33,13 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
--replace-fail "/app" "$out"
|
||||
substituteInPlace src/windows/regeneration.rs \
|
||||
--replace-fail "/app" "$out"
|
||||
substituteInPlace src/config.rs \
|
||||
--replace-fail "/app" "$out"
|
||||
substituteInPlace src/window.rs \
|
||||
--replace-fail "create_dir" "create_dir_all"
|
||||
'';
|
||||
|
||||
cargoDeps = rustPlatform.fetchCargoVendor {
|
||||
inherit (finalAttrs) pname version src;
|
||||
hash = "sha256-/D4l85PO2h+172f8AgQFze665otIeouxEdVL56f+hoM=";
|
||||
hash = "sha256-Ma+ryvDaFfP3BYrtuPPKMVjF2l83xP+T7GlIiOenRAo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
{
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
lib,
|
||||
wirelesstools,
|
||||
makeWrapper,
|
||||
wireguard-tools,
|
||||
openvpn,
|
||||
obfs4,
|
||||
iproute2,
|
||||
dnscrypt-proxy,
|
||||
iptables,
|
||||
gawk,
|
||||
util-linux,
|
||||
nix-update-script,
|
||||
}:
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "ivpn-service";
|
||||
version = "3.15.0";
|
||||
|
||||
buildInputs = [ wirelesstools ];
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ivpn";
|
||||
repo = "desktop-app";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE=";
|
||||
};
|
||||
|
||||
modRoot = "daemon";
|
||||
vendorHash = "sha256-DVKSCcEeE7vI8aOYuEwk22n0wtF7MMDOyAgYoXYadwI=";
|
||||
|
||||
proxyVendor = true; # .c file
|
||||
|
||||
patches = [ ./permissions.patch ];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace daemon/service/platform/platform_linux.go \
|
||||
--replace 'openVpnBinaryPath = "/usr/sbin/openvpn"' \
|
||||
'openVpnBinaryPath = "${openvpn}/bin/openvpn"' \
|
||||
--replace 'routeCommand = "/sbin/ip route"' \
|
||||
'routeCommand = "${iproute2}/bin/ip route"'
|
||||
|
||||
substituteInPlace daemon/netinfo/netinfo_linux.go \
|
||||
--replace 'retErr := shell.ExecAndProcessOutput(log, outParse, "", "/sbin/ip", "route")' \
|
||||
'retErr := shell.ExecAndProcessOutput(log, outParse, "", "${iproute2}/bin/ip", "route")'
|
||||
|
||||
substituteInPlace daemon/service/platform/platform_linux_release.go \
|
||||
--replace 'installDir := "/opt/ivpn"' "installDir := \"$out\"" \
|
||||
--replace 'obfsproxyStartScript = path.Join(installDir, "obfsproxy/obfs4proxy")' \
|
||||
'obfsproxyStartScript = "${lib.getExe obfs4}"' \
|
||||
--replace 'wgBinaryPath = path.Join(installDir, "wireguard-tools/wg-quick")' \
|
||||
'wgBinaryPath = "${wireguard-tools}/bin/wg-quick"' \
|
||||
--replace 'wgToolBinaryPath = path.Join(installDir, "wireguard-tools/wg")' \
|
||||
'wgToolBinaryPath = "${wireguard-tools}/bin/wg"' \
|
||||
--replace 'dnscryptproxyBinPath = path.Join(installDir, "dnscrypt-proxy/dnscrypt-proxy")' \
|
||||
'dnscryptproxyBinPath = "${dnscrypt-proxy}/bin/dnscrypt-proxy"'
|
||||
'';
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
"-w"
|
||||
"-X github.com/ivpn/desktop-app/daemon/version._version=${finalAttrs.version}"
|
||||
"-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/{daemon,ivpn-service}
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
mkdir -p $out/etc
|
||||
cp -r $src/daemon/References/Linux/etc/* $out/etc/
|
||||
cp -r $src/daemon/References/common/etc/* $out/etc/
|
||||
|
||||
patchShebangs --build $out/etc/firewall.sh $out/etc/splittun.sh $out/etc/client.down $out/etc/client.up
|
||||
|
||||
wrapProgram "$out/bin/ivpn-service" \
|
||||
--suffix PATH : ${
|
||||
lib.makeBinPath [
|
||||
iptables
|
||||
gawk
|
||||
util-linux
|
||||
]
|
||||
}
|
||||
'';
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "Official IVPN Desktop app service daemon";
|
||||
homepage = "https://www.ivpn.net/apps";
|
||||
changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [
|
||||
urandom
|
||||
blenderfreaky
|
||||
];
|
||||
mainProgram = "ivpn-service";
|
||||
};
|
||||
})
|
||||
@@ -9,23 +9,20 @@
|
||||
makeWrapper,
|
||||
ivpn-service,
|
||||
}:
|
||||
let
|
||||
version = "3.14.34";
|
||||
in
|
||||
buildNpmPackage {
|
||||
buildNpmPackage (finalAttrs: {
|
||||
pname = "ivpn-ui";
|
||||
inherit version;
|
||||
version = "3.15.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ivpn";
|
||||
repo = "desktop-app";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-Q96G5mJahJnXxpqJ8IF0oFie7l0Nd1p8drHH9NSpwEw=";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE=";
|
||||
};
|
||||
|
||||
sourceRoot = "source/ui";
|
||||
|
||||
npmDepsHash = "sha256-y/VxvSZUvcIuckJF87639i5pcVJLg8SDAbWmg5bO3/s=";
|
||||
npmDepsHash = "sha256-OOBBUDJwTP2T/KqzJPRV+A9ncRmb14KBoAXqa0T6c58=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
copyDesktopItems
|
||||
@@ -85,9 +82,9 @@ buildNpmPackage {
|
||||
mainProgram = "ivpn-ui";
|
||||
homepage = "https://www.ivpn.net";
|
||||
downloadPage = "https://github.com/ivpn/desktop-app";
|
||||
changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}";
|
||||
changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [ blenderfreaky ];
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
||||
})
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
lib,
|
||||
wirelesstools,
|
||||
nix-update-script,
|
||||
}:
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "ivpn";
|
||||
version = "3.15.0";
|
||||
|
||||
buildInputs = [ wirelesstools ];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ivpn";
|
||||
repo = "desktop-app";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE=";
|
||||
};
|
||||
|
||||
modRoot = "cli";
|
||||
vendorHash = "sha256-xZ1tMiv06fE2wtpDagKjHiVTPYWpj32hM6n/v9ZcgrE=";
|
||||
|
||||
proxyVendor = true; # .c file
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
"-w"
|
||||
"-X github.com/ivpn/desktop-app/daemon/version._version=${finalAttrs.version}"
|
||||
"-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/{cli,ivpn}
|
||||
'';
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "Official IVPN Desktop app";
|
||||
homepage = "https://www.ivpn.net/apps";
|
||||
changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [
|
||||
urandom
|
||||
blenderfreaky
|
||||
];
|
||||
mainProgram = "ivpn";
|
||||
};
|
||||
})
|
||||
@@ -25,6 +25,12 @@ python3Packages.buildPythonPackage {
|
||||
substitute '${knot-resolver.unwrapped.config_py}'/knot_resolver/constants.py ./python/knot_resolver/constants.py \
|
||||
--replace-fail '${knot-resolver.unwrapped.out}/etc' '/etc' \
|
||||
--replace-fail '${knot-resolver.unwrapped.out}/sbin' '${knot-resolver}/bin'
|
||||
''
|
||||
# On non-Linux let's simplify construction of the knot-resolver command line,
|
||||
# as it would break because of nixpkgs-specific wrapping of python packages.
|
||||
+ ''
|
||||
substituteInPlace python/knot_resolver/controller/supervisord/config_file.py \
|
||||
--replace-fail 'args = [sys.executable] + sys.argv' 'args = sys.argv'
|
||||
'';
|
||||
|
||||
build-system = with python3Packages; [
|
||||
@@ -42,6 +48,7 @@ python3Packages.buildPythonPackage {
|
||||
typing-extensions
|
||||
];
|
||||
|
||||
doCheck = python3Packages.stdenv.isLinux; # maybe in future
|
||||
nativeCheckInputs = with python3Packages; [
|
||||
augeas
|
||||
dnspython
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
lib,
|
||||
stdenv,
|
||||
fetchurl,
|
||||
fetchpatch,
|
||||
# native deps.
|
||||
runCommand,
|
||||
pkg-config,
|
||||
@@ -48,6 +49,15 @@ let
|
||||
"config_py"
|
||||
];
|
||||
|
||||
patches = [
|
||||
(fetchpatch {
|
||||
name = "test-cache-aarch64-darwin.patch";
|
||||
url = "https://gitlab.nic.cz/knot/knot-resolver/-/commit/d155d0dbe408a3327b39f70e122aea6fb2b86684.diff";
|
||||
excludes = [ "NEWS" ];
|
||||
hash = "sha256-3w33v8UfhGdA50BlkfHpQLFxg+5ELk0lp7RzgvkSzK8=";
|
||||
})
|
||||
];
|
||||
|
||||
# Path fixups for the NixOS service.
|
||||
# systemd Exec* options are difficult to override in NixOS *if present*, so we drop them.
|
||||
postPatch = ''
|
||||
|
||||
@@ -7,16 +7,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "lego";
|
||||
version = "4.27.0";
|
||||
version = "4.29.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "go-acme";
|
||||
repo = "lego";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-mc/aWjYvgF5PSl6Ng9oLNWAlGDjnhzEouo9LXh/PFsE=";
|
||||
hash = "sha256-czCOrgC3Xy42KigAe+tsPRdWqxgdHFl0KN3Ei2zeyy8=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-648FrZqSatEYONzj03x8z8pV0WIvfYnIOcxERxYxSPw=";
|
||||
vendorHash = "sha256-OnCtobizqDrqZTQenRPBTlUHvNx/xX34PYw8K4rgxSk=";
|
||||
|
||||
doCheck = false;
|
||||
|
||||
|
||||
@@ -232,8 +232,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
(stdenv.hostPlatform.isDarwin && lib.versionOlder stdenv.hostPlatform.darwinSdkVersion "12.0")
|
||||
''
|
||||
substituteInPlace src/output/plugins/OSXOutputPlugin.cxx \
|
||||
--replace kAudioObjectPropertyElement{Main,Master} \
|
||||
--replace kAudioHardwareServiceDeviceProperty_Virtual{Main,Master}Volume
|
||||
--replace-fail kAudioObjectPropertyElement{Main,Master} \
|
||||
--replace-fail kAudioHardwareServiceDeviceProperty_Virtual{Main,Master}Volume
|
||||
''
|
||||
+
|
||||
lib.optionalString
|
||||
@@ -262,17 +262,19 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
];
|
||||
|
||||
mesonFlags = [
|
||||
"-Dtest=true"
|
||||
"-Dmanpages=true"
|
||||
"-Dhtml_manual=true"
|
||||
(lib.mesonBool "test" true)
|
||||
(lib.mesonBool "manpages" true)
|
||||
(lib.mesonBool "html_manual" true)
|
||||
]
|
||||
++ map (x: "-D${x}=enabled") features_
|
||||
++ map (x: "-D${x}=disabled") (lib.subtractLists features_ knownFeatures)
|
||||
++ map (x: lib.mesonEnable x true) features_
|
||||
++ map (x: lib.mesonEnable x false) (lib.subtractLists features_ knownFeatures)
|
||||
++ lib.optional (builtins.elem "zeroconf" features_) (
|
||||
"-Dzeroconf=" + (if stdenv.hostPlatform.isDarwin then "bonjour" else "avahi")
|
||||
lib.mesonOption "zeroconf" (if stdenv.hostPlatform.isDarwin then "bonjour" else "avahi")
|
||||
)
|
||||
++ lib.optional (builtins.elem "systemd" features_) "-Dsystemd_system_unit_dir=etc/systemd/system"
|
||||
++ lib.optional (builtins.elem "qobuz" features_) "-Dnlohmann_json=enabled";
|
||||
++ lib.optional (builtins.elem "systemd" features_) (
|
||||
lib.mesonOption "systemd_system_unit_dir" "etc/systemd/system"
|
||||
)
|
||||
++ lib.optional (builtins.elem "qobuz" features_) (lib.mesonEnable "nlohmann_json" true);
|
||||
|
||||
passthru.tests.nixos = nixosTests.mpd;
|
||||
|
||||
@@ -282,6 +284,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
license = lib.licenses.gpl2Only;
|
||||
maintainers = with lib.maintainers; [
|
||||
tobim
|
||||
doronbehar
|
||||
];
|
||||
platforms = lib.platforms.unix;
|
||||
mainProgram = "mpd";
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
acl,
|
||||
autoreconfHook,
|
||||
avahi,
|
||||
bstring,
|
||||
db,
|
||||
libevent,
|
||||
libgcrypt,
|
||||
@@ -28,11 +29,11 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "netatalk";
|
||||
version = "4.2.4";
|
||||
version = "4.3.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/netatalk/netatalk/netatalk-${finalAttrs.version}.tar.xz";
|
||||
hash = "sha256-Twe74RipUd10DT9RqHtcr7oklr0LIucEQ49CGqZnD5k=";
|
||||
hash = "sha256-KXe0/RExgvDMGDM3uiPVcB+yvk4N/Ox+5XW01zpzjTo=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -45,6 +46,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
buildInputs = [
|
||||
acl
|
||||
avahi
|
||||
bstring
|
||||
db
|
||||
libevent
|
||||
libgcrypt
|
||||
@@ -69,7 +71,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
"-Dwith-bdb-include-path=${db.dev}/include"
|
||||
"-Dwith-install-hooks=false"
|
||||
"-Dwith-init-hooks=false"
|
||||
"-Dwith-lockfile-path=/run/lock/"
|
||||
"-Dwith-lockfile-path=/run/lock"
|
||||
"-Dwith-cracklib=true"
|
||||
"-Dwith-cracklib-path=${cracklib.out}"
|
||||
"-Dwith-statedir-creation=false"
|
||||
@@ -82,6 +84,9 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
homepage = "https://netatalk.io/";
|
||||
license = lib.licenses.gpl2Plus;
|
||||
platforms = lib.platforms.linux;
|
||||
maintainers = with lib.maintainers; [ jcumming ];
|
||||
maintainers = with lib.maintainers; [
|
||||
jcumming
|
||||
nulleric
|
||||
];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -64,11 +64,11 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "networkmanager";
|
||||
version = "1.54.1";
|
||||
version = "1.54.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/releases/${finalAttrs.version}/downloads/NetworkManager-${finalAttrs.version}.tar.xz";
|
||||
hash = "sha256-APPwvhKsTUhY6/FSQwuS3vFXSAP/YQf378dkoFbUxMc=";
|
||||
hash = "sha256-z0/vw76WgCxaTas+aQvcTOTHglGVTvChtlAm2IZwmYk=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
|
||||
@@ -14,16 +14,16 @@ assert
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "opa-envoy-plugin";
|
||||
version = "1.10.0-envoy";
|
||||
version = "1.11.0-envoy";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "open-policy-agent";
|
||||
repo = "opa-envoy-plugin";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-qKLeSpVy/ImeJ2WPLa3uQSHA/6Y4Visb9lgC4PkURkI=";
|
||||
hash = "sha256-BYNwr4smlY5evtja1CdCeVzKZIY0pFjiJwwhWOFHIm0=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-l/0IaHz1wTNqX/Im8g0fjTqVOtMHSdqSpl0Oo1ByyxA=";
|
||||
vendorHash = "sha256-wwXl115vhqUro5yhaMmlR8ms/uJMhFw9IzsX9mGRy+0=";
|
||||
|
||||
nativeBuildInputs = [ installShellFiles ];
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
pkg-config,
|
||||
installShellFiles,
|
||||
buildGoModule,
|
||||
buildPackages,
|
||||
gpgme,
|
||||
lvm2,
|
||||
btrfs-progs,
|
||||
@@ -12,7 +13,6 @@
|
||||
libseccomp,
|
||||
libselinux,
|
||||
systemdMinimal,
|
||||
go-md2man,
|
||||
nixosTests,
|
||||
python3,
|
||||
makeBinaryWrapper,
|
||||
@@ -71,7 +71,6 @@ buildGoModule (finalAttrs: {
|
||||
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
go-md2man
|
||||
installShellFiles
|
||||
makeBinaryWrapper
|
||||
python3
|
||||
@@ -90,6 +89,7 @@ buildGoModule (finalAttrs: {
|
||||
env = {
|
||||
HELPER_BINARIES_DIR = "${placeholder "out"}/libexec/podman"; # used in buildPhase & installPhase
|
||||
PREFIX = "${placeholder "out"}";
|
||||
GOMD2MAN = "${buildPackages.go-md2man}/bin/go-md2man";
|
||||
};
|
||||
|
||||
buildPhase = ''
|
||||
|
||||
@@ -116,10 +116,10 @@ stdenv.mkDerivation rec {
|
||||
(python3.pythonOnBuildForHost.withPackages (
|
||||
pp: with pp; [
|
||||
dbus-python
|
||||
(python-dbusmock.overridePythonAttrs (attrs: {
|
||||
(python-dbusmock.override {
|
||||
# Avoid dependency cycle.
|
||||
doCheck = false;
|
||||
}))
|
||||
})
|
||||
]
|
||||
))
|
||||
];
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
}:
|
||||
let
|
||||
pname = "positron-bin";
|
||||
version = "2025.12.0-167";
|
||||
version = "2025.12.1-4";
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
inherit version pname;
|
||||
@@ -31,17 +31,17 @@ stdenv.mkDerivation {
|
||||
if stdenv.hostPlatform.isDarwin then
|
||||
fetchurl {
|
||||
url = "https://cdn.posit.co/positron/releases/mac/universal/Positron-${version}-universal.dmg";
|
||||
hash = "sha256-GrABm5PJFZ1ugb4Lj3y/Ynnt/RTkY0DMk3GZKqVAlk0=";
|
||||
hash = "sha256-9T0ae4m60TZkGUzJscZ1HTAbaw7y0Boi8EDy7HTt5+s=";
|
||||
}
|
||||
else if stdenv.hostPlatform.system == "aarch64-linux" then
|
||||
fetchurl {
|
||||
url = "https://cdn.posit.co/positron/releases/deb/arm64/Positron-${version}-arm64.deb";
|
||||
hash = "sha256-WP8ULCMY268av8W0Op0j6P6ry8MwTjNsjV1iJV50wTg=";
|
||||
hash = "sha256-dH1bV1iX7ISYGcfPg8y7itoYF8y2ApHs9kcSUIDnZUw=";
|
||||
}
|
||||
else
|
||||
fetchurl {
|
||||
url = "https://cdn.posit.co/positron/releases/deb/x86_64/Positron-${version}-x64.deb";
|
||||
hash = "sha256-3Z4mRN5WOV0wj51TzoyC0wfU1Zu6wEAb1gTH5IFQRIg=";
|
||||
hash = "sha256-MurH+NEIejOHp3h69buyb/1MAxnOJ7KkU9mWJVTN5Xw=";
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
||||
@@ -11,12 +11,12 @@
|
||||
}:
|
||||
buildGoModule (finalAttrs: {
|
||||
pname = "qui";
|
||||
version = "1.9.1";
|
||||
version = "1.10.0";
|
||||
src = fetchFromGitHub {
|
||||
owner = "autobrr";
|
||||
repo = "qui";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-PcJl9nxHPWv17AqtEok0qHhrTQ1WInUKAtxrxoSeMSw=";
|
||||
hash = "sha256-aGCEv/HX2XYhtJqWtLHKjsBIy8WYOwezxGQxfF6lu0M=";
|
||||
};
|
||||
|
||||
qui-web = stdenvNoCC.mkDerivation (finalAttrs': {
|
||||
@@ -39,7 +39,7 @@ buildGoModule (finalAttrs: {
|
||||
sourceRoot
|
||||
;
|
||||
fetcherVersion = 2;
|
||||
hash = "sha256-bDaMax5RS+ot6vaJmNJm6p4gFaCD9aslJXI/58ua9DI=";
|
||||
hash = "sha256-6brOEC1UAxjIZB4pujhA624jKTTxfZQiiz/PzqooPeA=";
|
||||
};
|
||||
|
||||
postBuild = ''
|
||||
@@ -51,7 +51,7 @@ buildGoModule (finalAttrs: {
|
||||
'';
|
||||
});
|
||||
|
||||
vendorHash = "sha256-UF6V737MF2la24oW8oPp+0N8nv0uEykMrTbzvx/gtec=";
|
||||
vendorHash = "sha256-EJ26MqXxdV9m5reqWAYTXwuHLMbf2l1J3667e1FEv7A=";
|
||||
|
||||
preBuild = ''
|
||||
cp -r ${finalAttrs.qui-web}/* web/dist
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
}:
|
||||
let
|
||||
pname = "remnote";
|
||||
version = "1.22.28";
|
||||
version = "1.22.31";
|
||||
src = fetchurl {
|
||||
url = "https://download2.remnote.io/remnote-desktop2/RemNote-${version}.AppImage";
|
||||
hash = "sha256-suYd2IK/lwPd0sEoRmKPydgyExX5aRNyBLikubBmMpI=";
|
||||
hash = "sha256-P2kjlskK+rrLWHMebt2UcbE0mJDOEa/OnAuRQGODkSA=";
|
||||
};
|
||||
appimageContents = appimageTools.extractType2 { inherit pname version src; };
|
||||
in
|
||||
|
||||
@@ -2,7 +2,17 @@
|
||||
fetchFromGitHub,
|
||||
nix-update-script,
|
||||
renode,
|
||||
lib,
|
||||
}:
|
||||
let
|
||||
normalizedVersion =
|
||||
v:
|
||||
let
|
||||
parts = lib.splitString "-" v;
|
||||
result = builtins.head parts;
|
||||
in
|
||||
result;
|
||||
in
|
||||
renode.overrideAttrs (old: rec {
|
||||
pname = "renode-unstable";
|
||||
version = "1.16.0-unstable-2025-08-08";
|
||||
@@ -16,9 +26,9 @@ renode.overrideAttrs (old: rec {
|
||||
};
|
||||
|
||||
prePatch = ''
|
||||
substituteInPlace tools/building/createAssemblyInfo.sh \
|
||||
--replace CURRENT_INFORMATIONAL_VERSION="`git rev-parse --short=8 HEAD`" \
|
||||
CURRENT_INFORMATIONAL_VERSION="${builtins.substring 0 8 src.rev}"
|
||||
sed -i 's/AssemblyVersion("%VERSION%.*")/AssemblyVersion("${normalizedVersion version}.0")/g' src/Renode/Properties/AssemblyInfo.template
|
||||
sed -i 's/AssemblyInformationalVersion("%INFORMATIONAL_VERSION%")/AssemblyInformationalVersion("${src.rev}")/g' src/Renode/Properties/AssemblyInfo.template
|
||||
mv src/Renode/Properties/AssemblyInfo.template src/Renode/Properties/AssemblyInfo.cs
|
||||
'';
|
||||
|
||||
passthru = old.passthru // {
|
||||
|
||||
Generated
+177
-72
@@ -129,6 +129,11 @@
|
||||
"version": "4.5.0",
|
||||
"hash": "sha256-dAhj/CgXG5VIy2dop1xplUsLje7uBPFjxasz9rdFIgY="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.CSharp",
|
||||
"version": "4.6.0",
|
||||
"hash": "sha256-16OdEKbPLxh+jLYS4cOiGRX/oU6nv3KMF4h5WnZAsHs="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.CSharp",
|
||||
"version": "4.7.0",
|
||||
@@ -139,11 +144,6 @@
|
||||
"version": "1.0.0",
|
||||
"hash": "sha256-HX3iOXH75I1L7eNihCbMNDDpcotfZpfQUdqdRTGM6FY="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Extensions.ObjectPool",
|
||||
"version": "5.0.10",
|
||||
"hash": "sha256-tAjiU3w0hdPAGUitszxZ6jtEilRn977MY7N5eZMx0x0="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Extensions.ObjectPool",
|
||||
"version": "6.0.16",
|
||||
@@ -244,11 +244,6 @@
|
||||
"version": "4.4.0",
|
||||
"hash": "sha256-ZumsykAAIYKmVtP4QI5kZ0J10n2zcOZZ69PmAK0SEiE="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Win32.SystemEvents",
|
||||
"version": "4.7.0",
|
||||
"hash": "sha256-GHxnD1Plb32GJWVWSv0Y51Kgtlb+cdKgOYVBYZSgVF4="
|
||||
},
|
||||
{
|
||||
"pname": "Microsoft.Win32.SystemEvents",
|
||||
"version": "5.0.0",
|
||||
@@ -286,13 +281,13 @@
|
||||
},
|
||||
{
|
||||
"pname": "NETStandard.Library",
|
||||
"version": "2.0.0",
|
||||
"hash": "sha256-Pp7fRylai8JrE1O+9TGfIEJrAOmnWTJRLWE+qJBahK0="
|
||||
"version": "1.6.1",
|
||||
"hash": "sha256-iNan1ix7RtncGWC9AjAZ2sk70DoxOsmEOgQ10fXm4Pw="
|
||||
},
|
||||
{
|
||||
"pname": "NETStandard.Library",
|
||||
"version": "2.0.3",
|
||||
"hash": "sha256-Prh2RPebz/s8AzHb2sPHg3Jl8s31inv9k+Qxd293ybo="
|
||||
"version": "2.0.0",
|
||||
"hash": "sha256-Pp7fRylai8JrE1O+9TGfIEJrAOmnWTJRLWE+qJBahK0="
|
||||
},
|
||||
{
|
||||
"pname": "Newtonsoft.Json",
|
||||
@@ -339,6 +334,11 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-PaiITTFI2FfPylTEk7DwzfKeiA/g/aooSU1pDcdwWLU="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.any.System.Globalization.Calendars",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-AYh39tgXJVFu8aLi9Y/4rK8yWMaza4S4eaxjfcuEEL4="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.any.System.IO",
|
||||
"version": "4.3.0",
|
||||
@@ -394,6 +394,11 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-agdOM0NXupfHbKAQzQT8XgbI9B8hVEh+a/2vqeHctg4="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.any.System.Threading.Timer",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-BgHxXCIbicVZtpgMimSXixhFC3V+p5ODqeljDjO8hCs="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl",
|
||||
"version": "4.3.0",
|
||||
@@ -414,6 +419,21 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.native.System.IO.Compression",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-DWnXs4vlKoU6WxxvCArTJupV6sX3iBbZh8SbqfHace8="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.native.System.Net.Http",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-c556PyheRwpYhweBjSfIwEyZHnAUB8jWioyKEcp/2dg="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.native.System.Security.Cryptography.Apple",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-2IhBv0i6pTcOyr8FFIyfPEaaCHUmJZ8DYwLUwJ+5waw="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.native.System.Security.Cryptography.OpenSsl",
|
||||
"version": "4.3.0",
|
||||
@@ -429,6 +449,11 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-zi+b4sCFrA9QBiSGDD7xPV27r3iHGlV99gpyVUjRmc4="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-serkd4A7F6eciPiPJtUyJyxzdAtupEcWIZQ9nptEzIM="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl",
|
||||
"version": "4.3.0",
|
||||
@@ -459,6 +484,11 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-LZb23lRXzr26tRS5aA0xyB08JxiblPDoA7HBvn6awXg="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.unix.System.Console",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-AHkdKShTRHttqfMjmi+lPpTuCrM5vd/WRy6Kbtie190="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.unix.System.Diagnostics.Debug",
|
||||
"version": "4.3.0",
|
||||
@@ -469,6 +499,16 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-Pf4mRl6YDK2x2KMh0WdyNgv0VUNdSKVDLlHqozecy5I="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.unix.System.Net.Primitives",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-pHJ+I6i16MV6m77uhTC6GPY6jWGReE3SSP3fVB59ti0="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.unix.System.Net.Sockets",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-IvgOeA2JuBjKl5yAVGjPYMPDzs9phb3KANs95H9v1w4="
|
||||
},
|
||||
{
|
||||
"pname": "runtime.unix.System.Private.Uri",
|
||||
"version": "4.3.0",
|
||||
@@ -489,20 +529,20 @@
|
||||
"version": "4.1.0",
|
||||
"hash": "sha256-v6YfyfrKmhww+EYHUq6cwYUMj00MQ6SOfJtcGVRlYzs="
|
||||
},
|
||||
{
|
||||
"pname": "System.AppContext",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-yg95LNQOwFlA1tWxXdQkVyJqT4AnoDc+ACmrNvzGiZg="
|
||||
},
|
||||
{
|
||||
"pname": "System.Buffers",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-XqZWb4Kd04960h4U9seivjKseGA/YEIpdplfHYHQ9jk="
|
||||
},
|
||||
{
|
||||
"pname": "System.Buffers",
|
||||
"version": "4.5.1",
|
||||
"hash": "sha256-wws90sfi9M7kuCPWkv1CEYMJtCqx9QB/kj0ymlsNaxI="
|
||||
},
|
||||
{
|
||||
"pname": "System.CodeDom",
|
||||
"version": "6.0.0",
|
||||
"hash": "sha256-uPetUFZyHfxjScu5x4agjk9pIhbCkt5rG4Axj25npcQ="
|
||||
"version": "8.0.0",
|
||||
"hash": "sha256-uwVhi3xcvX7eiOGQi7dRETk3Qx1EfHsUfchZsEto338="
|
||||
},
|
||||
{
|
||||
"pname": "System.Collections",
|
||||
@@ -514,6 +554,11 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-afY7VUtD6w/5mYqrce8kQrvDIfS2GXDINDh73IjxJKc="
|
||||
},
|
||||
{
|
||||
"pname": "System.Collections.Concurrent",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-KMY5DfJnDeIsa13DpqvyN8NkReZEMAFnlmNglVoFIXI="
|
||||
},
|
||||
{
|
||||
"pname": "System.Collections.Immutable",
|
||||
"version": "5.0.0",
|
||||
@@ -579,6 +624,11 @@
|
||||
"version": "1.0.31",
|
||||
"hash": "sha256-w9ApcUJr7jYP4Vf5+efIIqoWmr5v9R56W4uC0n8KktQ="
|
||||
},
|
||||
{
|
||||
"pname": "System.Console",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-Xh3PPBZr0pDbDaK8AEHbdGz7ePK6Yi1ZyRWI1JM6mbo="
|
||||
},
|
||||
{
|
||||
"pname": "System.Diagnostics.Debug",
|
||||
"version": "4.0.11",
|
||||
@@ -589,6 +639,11 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-fkA79SjPbSeiEcrbbUsb70u9B7wqbsdM9s1LnoKj0gM="
|
||||
},
|
||||
{
|
||||
"pname": "System.Diagnostics.DiagnosticSource",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-OFJRb0ygep0Z3yDBLwAgM/Tkfs4JCDtsNhwDH9cd1Xw="
|
||||
},
|
||||
{
|
||||
"pname": "System.Diagnostics.EventLog",
|
||||
"version": "6.0.0",
|
||||
@@ -619,11 +674,6 @@
|
||||
"version": "4.7.0",
|
||||
"hash": "sha256-D3qG+xAe78lZHvlco9gHK2TEAM370k09c6+SQi873Hk="
|
||||
},
|
||||
{
|
||||
"pname": "System.Drawing.Common",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-8PgFBZ3Agd+UI9IMxr4fRIW8IA1hqCl15nqlLTJETzk="
|
||||
},
|
||||
{
|
||||
"pname": "System.Drawing.Common",
|
||||
"version": "5.0.3",
|
||||
@@ -634,11 +684,6 @@
|
||||
"version": "4.0.11",
|
||||
"hash": "sha256-qWqFVxuXioesVftv2RVJZOnmojUvRjb7cS3Oh3oTit4="
|
||||
},
|
||||
{
|
||||
"pname": "System.Formats.Asn1",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-9nL3dN4w/dZ49W1pCkTjRqZm6Dh0mMVExNungcBHrKs="
|
||||
},
|
||||
{
|
||||
"pname": "System.Formats.Asn1",
|
||||
"version": "6.0.0",
|
||||
@@ -654,6 +699,11 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-caL0pRmFSEsaoeZeWN5BTQtGrAtaQPwFi8YOZPZG5rI="
|
||||
},
|
||||
{
|
||||
"pname": "System.Globalization.Calendars",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-uNOD0EOVFgnS2fMKvMiEtI9aOw00+Pfy/H+qucAQlPc="
|
||||
},
|
||||
{
|
||||
"pname": "System.Globalization.Extensions",
|
||||
"version": "4.3.0",
|
||||
@@ -669,6 +719,16 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-ruynQHekFP5wPrDiVyhNiRIXeZ/I9NpjK5pU+HPDiRY="
|
||||
},
|
||||
{
|
||||
"pname": "System.IO.Compression",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-f5PrQlQgj5Xj2ZnHxXW8XiOivaBvfqDao9Sb6AVinyA="
|
||||
},
|
||||
{
|
||||
"pname": "System.IO.Compression.ZipFile",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-WQl+JgWs+GaRMeiahTFUbrhlXIHapzcpTFXbRvAtvvs="
|
||||
},
|
||||
{
|
||||
"pname": "System.IO.FileSystem",
|
||||
"version": "4.0.1",
|
||||
@@ -720,9 +780,24 @@
|
||||
"hash": "sha256-3sCEfzO4gj5CYGctl9ZXQRRhwAraMQfse7yzKoRe65E="
|
||||
},
|
||||
{
|
||||
"pname": "System.Numerics.Vectors",
|
||||
"version": "4.4.0",
|
||||
"hash": "sha256-auXQK2flL/JpnB/rEcAcUm4vYMCYMEMiWOCAlIaqu2U="
|
||||
"pname": "System.Net.Http",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-UoBB7WPDp2Bne/fwxKF0nE8grJ6FzTMXdT/jfsphj8Q="
|
||||
},
|
||||
{
|
||||
"pname": "System.Net.NameResolution",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-eGZwCBExWsnirWBHyp2sSSSXp6g7I6v53qNmwPgtJ5c="
|
||||
},
|
||||
{
|
||||
"pname": "System.Net.Primitives",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-MY7Z6vOtFMbEKaLW9nOSZeAjcWpwCtdO7/W1mkGZBzE="
|
||||
},
|
||||
{
|
||||
"pname": "System.Net.Sockets",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-il7dr5VT/QWDg/0cuh+4Es2u8LY//+qqiY9BZmYxSus="
|
||||
},
|
||||
{
|
||||
"pname": "System.Numerics.Vectors",
|
||||
@@ -871,8 +946,8 @@
|
||||
},
|
||||
{
|
||||
"pname": "System.Runtime.CompilerServices.Unsafe",
|
||||
"version": "4.5.3",
|
||||
"hash": "sha256-lnZMUqRO4RYRUeSO8HSJ9yBHqFHLVbmenwHWkIU20ak="
|
||||
"version": "4.5.2",
|
||||
"hash": "sha256-8eUXXGWO2LL7uATMZye2iCpQOETn2jCcjUhG6coR5O8="
|
||||
},
|
||||
{
|
||||
"pname": "System.Runtime.CompilerServices.Unsafe",
|
||||
@@ -909,11 +984,21 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-8sDH+WUJfCR+7e4nfpftj/+lstEiZixWUBueR2zmHgI="
|
||||
},
|
||||
{
|
||||
"pname": "System.Runtime.InteropServices.RuntimeInformation",
|
||||
"version": "4.0.0",
|
||||
"hash": "sha256-5j53amb76A3SPiE3B0llT2XPx058+CgE7OXL4bLalT4="
|
||||
},
|
||||
{
|
||||
"pname": "System.Runtime.InteropServices.RuntimeInformation",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-MYpl6/ZyC6hjmzWRIe+iDoldOMW1mfbwXsduAnXIKGA="
|
||||
},
|
||||
{
|
||||
"pname": "System.Runtime.Numerics",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-P5jHCgMbgFMYiONvzmaKFeOqcAIDPu/U8bOVrNPYKqc="
|
||||
},
|
||||
{
|
||||
"pname": "System.Runtime.Serialization.Primitives",
|
||||
"version": "4.1.1",
|
||||
@@ -929,16 +1014,26 @@
|
||||
"version": "4.7.0",
|
||||
"hash": "sha256-/9ZCPIHLdhzq7OW4UKqTsR0O93jjHd6BRG1SRwgHE1g="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.AccessControl",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-ueSG+Yn82evxyGBnE49N4D+ngODDXgornlBtQ3Omw54="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.AccessControl",
|
||||
"version": "6.0.0",
|
||||
"hash": "sha256-qOyWEBbNr3EjyS+etFG8/zMbuPjA+O+di717JP9Cxyg="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Claims",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-Fua/rDwAqq4UByRVomAxMPmDBGd5eImRqHVQIeSxbks="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Algorithms",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-tAJvNSlczYBJ3Ed24Ae27a55tq/n4D3fubNQdwcKWA8="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Cng",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-u17vy6wNhqok91SrVLno2M1EzLHZm6VMca85xbVChsw="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Cng",
|
||||
"version": "4.5.0",
|
||||
@@ -950,35 +1045,45 @@
|
||||
"hash": "sha256-MvVSJhAojDIvrpuyFmcSVRSZPl3dRYOI9hSptbA+6QA="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Cng",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-nOJP3vdmQaYA07TI373OvZX6uWshETipvi5KpL7oExo="
|
||||
"pname": "System.Security.Cryptography.Csp",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-oefdTU/Z2PWU9nlat8uiRDGq/PGZoSPRgkML11pmvPQ="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Encoding",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-Yuge89N6M+NcblcvXMeyHZ6kZDfwBv3LPMDiF8HhJss="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.OpenSsl",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-DL+D2sc2JrQiB4oAcUggTFyD8w3aLEjJfod5JPe+Oz4="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Pkcs",
|
||||
"version": "4.7.0",
|
||||
"hash": "sha256-lZMmOxtg5d7Oyoof8p6awVALUsYQstc2mBNNrQr9m9c="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Pkcs",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-kq/tvYQSa24mKSvikFK2fKUAnexSL4PO4LkPppqtYkE="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Pkcs",
|
||||
"version": "6.0.1",
|
||||
"hash": "sha256-OJ4NJ8E/8l86aR+Hsw+k/7II63Y/zPS+MgC+UfeCXHM="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Primitives",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-fnFi7B3SnVj5a+BbgXnbjnGNvWrCEU6Hp/wjsjWz318="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.X509Certificates",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-MG3V/owDh273GCUPsGGraNwaVpcydupl3EtPXj6TVG0="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Xml",
|
||||
"version": "4.7.0",
|
||||
"hash": "sha256-67k24CjNisMJUtnyWb08V/t7mBns+pxLyNhBG5YXiCE="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Xml",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-0LyU7KmpFRFZFCugAgDnp93Unw3rL4hFSqx6GNqov9o="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Cryptography.Xml",
|
||||
"version": "6.0.1",
|
||||
@@ -995,9 +1100,14 @@
|
||||
"hash": "sha256-BGgXMLUi5rxVmmChjIhcXUxisJjvlNToXlyaIbUxw40="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Permissions",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-BI1Js3L4R32UkKOLMTAVpXzGlQ27m+oaYHSV3J+iQfc="
|
||||
"pname": "System.Security.Principal",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-rjudVUHdo8pNJg2EVEn0XxxwNo5h2EaYo+QboPkXlYk="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Principal.Windows",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-mbdLVUcEwe78p3ZnB6jYsizNEqxMaCAWI3tEQNhRQAE="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Principal.Windows",
|
||||
@@ -1009,11 +1119,6 @@
|
||||
"version": "4.7.0",
|
||||
"hash": "sha256-rWBM2U8Kq3rEdaa1MPZSYOOkbtMGgWyB8iPrpIqmpqg="
|
||||
},
|
||||
{
|
||||
"pname": "System.Security.Principal.Windows",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-CBOQwl9veFkrKK2oU8JFFEiKIh/p+aJO+q9Tc2Q/89Y="
|
||||
},
|
||||
{
|
||||
"pname": "System.ServiceModel.Duplex",
|
||||
"version": "4.8.1",
|
||||
@@ -1119,11 +1224,6 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-Z5rXfJ1EXp3G32IKZGiZ6koMjRu0n8C1NGrwpdIen4w="
|
||||
},
|
||||
{
|
||||
"pname": "System.Threading.Tasks.Extensions",
|
||||
"version": "4.0.0",
|
||||
"hash": "sha256-+YdcPkMhZhRbMZHnfsDwpNbUkr31X7pQFGxXYcAPZbE="
|
||||
},
|
||||
{
|
||||
"pname": "System.Threading.Tasks.Extensions",
|
||||
"version": "4.3.0",
|
||||
@@ -1144,6 +1244,11 @@
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-wW0QdvssRoaOfQLazTGSnwYTurE4R8FxDx70pYkL+gg="
|
||||
},
|
||||
{
|
||||
"pname": "System.Threading.Timer",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-pmhslmhQhP32TWbBzoITLZ4BoORBqYk25OWbru04p9s="
|
||||
},
|
||||
{
|
||||
"pname": "System.ValueTuple",
|
||||
"version": "4.5.0",
|
||||
@@ -1154,11 +1259,6 @@
|
||||
"version": "4.7.0",
|
||||
"hash": "sha256-yW+GvQranReaqPw5ZFv+mSjByQ5y1pRLl05JIEf3tYU="
|
||||
},
|
||||
{
|
||||
"pname": "System.Windows.Extensions",
|
||||
"version": "5.0.0",
|
||||
"hash": "sha256-fzWnaRBCDuoq3hQsGIi0PvCEJN7yGaaJvlU6pq4052A="
|
||||
},
|
||||
{
|
||||
"pname": "System.Xml.ReaderWriter",
|
||||
"version": "4.0.11",
|
||||
@@ -1174,6 +1274,11 @@
|
||||
"version": "4.0.11",
|
||||
"hash": "sha256-KPz1kxe0RUBM+aoktJ/f9p51GudMERU8Pmwm//HdlFg="
|
||||
},
|
||||
{
|
||||
"pname": "System.Xml.XDocument",
|
||||
"version": "4.3.0",
|
||||
"hash": "sha256-rWtdcmcuElNOSzCehflyKwHkDRpiOhJJs8CeQ0l1CCI="
|
||||
},
|
||||
{
|
||||
"pname": "System.Xml.XmlDocument",
|
||||
"version": "4.3.0",
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
buildDotnetModule,
|
||||
cmake,
|
||||
dconf,
|
||||
dotnet-runtime_8,
|
||||
dotnet-sdk_6,
|
||||
dotnetCorePackages,
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
gcc,
|
||||
@@ -23,13 +22,6 @@ let
|
||||
rev = "d3d69f8f17ed164ee23e46f0c06844a69bf4c004";
|
||||
hash = "sha256-wR3heL58NOQLENwCzL4lPM4KuvT/ON7dlc/KUqrlRjg=";
|
||||
};
|
||||
assemblyVersion =
|
||||
s:
|
||||
let
|
||||
part = lib.strings.splitString "-" s;
|
||||
result = builtins.head part;
|
||||
in
|
||||
result;
|
||||
|
||||
pythonLibs =
|
||||
with python3Packages;
|
||||
@@ -79,17 +71,18 @@ buildDotnetModule rec {
|
||||
|
||||
projectFile = "Renode_NET.sln";
|
||||
|
||||
dotnet-runtime = dotnet-runtime_8;
|
||||
dotnet-sdk = dotnet-sdk_6;
|
||||
dotnet-sdk = dotnetCorePackages.sdk_9_0;
|
||||
|
||||
nugetDeps = ./deps.json;
|
||||
|
||||
patches = [ ./renode-test.patch ];
|
||||
|
||||
dotnetFlags = [ "-p:TargetFrameworks=net9.0" ];
|
||||
|
||||
prePatch = ''
|
||||
substituteInPlace tools/building/createAssemblyInfo.sh \
|
||||
--replace CURRENT_INFORMATIONAL_VERSION="`git rev-parse --short=8 HEAD`" \
|
||||
CURRENT_INFORMATIONAL_VERSION="${builtins.substring 0 8 src.rev}"
|
||||
sed -i 's/AssemblyVersion("%VERSION%.*")/AssemblyVersion("${version}.0")/g' src/Renode/Properties/AssemblyInfo.template
|
||||
sed -i 's/AssemblyInformationalVersion("%INFORMATIONAL_VERSION%")/AssemblyInformationalVersion("${src.rev}")/g' src/Renode/Properties/AssemblyInfo.template
|
||||
mv src/Renode/Properties/AssemblyInfo.template src/Renode/Properties/AssemblyInfo.cs
|
||||
'';
|
||||
|
||||
postPatch = ''
|
||||
@@ -105,7 +98,6 @@ buildDotnetModule rec {
|
||||
patchShebangs build.sh tools/
|
||||
|
||||
# Fixes determinism build error
|
||||
sed -i 's/AssemblyVersion("%VERSION%.*")/AssemblyVersion("${assemblyVersion version}")/g' src/Renode/Properties/AssemblyInfo.template
|
||||
sed -i 's/AssemblyVersion("1.0.*")/AssemblyVersion("1.0.0.0")/g' lib/AntShell/AntShell/Properties/AssemblyInfo.cs lib/CxxDemangler/CxxDemangler/Properties/AssemblyInfo.cs
|
||||
'';
|
||||
|
||||
@@ -117,7 +109,6 @@ buildDotnetModule rec {
|
||||
cmake
|
||||
gcc
|
||||
];
|
||||
|
||||
runtimeDeps = [
|
||||
gtk3
|
||||
mono
|
||||
@@ -169,7 +160,7 @@ buildDotnetModule rec {
|
||||
ln -s $out/lib/*.so src/Infrastructure/src/Emulator/Cores/bin/Release/lib
|
||||
'';
|
||||
|
||||
dotnetInstallFlags = [ "-p:TargetFramework=net6.0" ];
|
||||
dotnetInstallFlags = [ "-p:TargetFramework=net9.0" ];
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/lib/renode
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{
|
||||
"flutter_secure_storage_linux": "sha256-cFNHW7dAaX8BV7arwbn68GgkkBeiAgPfhMOAFSJWlyY=",
|
||||
"receive_sharing_intent": "sha256-8D5ZENARPZ7FGrdIErxOoV3Ao35/XoQ2tleegI42ZUY=",
|
||||
"yaru": "sha256-1sx2jtU6TXtzdGQn14dGZUszxqRBAEJkuEM5mDG7cR4="
|
||||
"receive_sharing_intent": "sha256-8D5ZENARPZ7FGrdIErxOoV3Ao35/XoQ2tleegI42ZUY="
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
lib,
|
||||
flutter335,
|
||||
flutter338,
|
||||
fetchFromGitHub,
|
||||
gst_all_1,
|
||||
libunwind,
|
||||
@@ -24,16 +24,16 @@ let
|
||||
ln -s ${zlib}/lib $out/lib
|
||||
'';
|
||||
|
||||
version = "0.26.10";
|
||||
version = "1.29.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "saber-notes";
|
||||
repo = "saber";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-PmkhIyRbRWp+ZujP8R1/h7NpKwYsaKx4JtYIikZjVzc=";
|
||||
hash = "sha256-+hqZQQtuNsyAIUKb0fydSnRTqc8EGVxWRtGubccsK2w=";
|
||||
};
|
||||
in
|
||||
flutter335.buildFlutterApplication {
|
||||
flutter338.buildFlutterApplication {
|
||||
pname = "saber";
|
||||
inherit version src;
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -10,14 +10,14 @@
|
||||
|
||||
python3Packages.buildPythonApplication rec {
|
||||
pname = "snakemake";
|
||||
version = "9.14.1";
|
||||
version = "9.14.4";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "snakemake";
|
||||
repo = "snakemake";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-yRnoo6vaq2Gw+/WJ3Jjk4AMnj0OPylgPI2lezCzK/B4=";
|
||||
hash = "sha256-r8Fz0ZOGZbkQ5x5oarxkxzGMYSuh15N4RYlZZxPwPA0=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "solanum";
|
||||
version = "0-unstable-2025-10-23";
|
||||
version = "0-unstable-2025-12-10";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "solanum-ircd";
|
||||
repo = "solanum";
|
||||
rev = "4544f823127c59951c7695f0f260128ee0691a67";
|
||||
hash = "sha256-x+i4LUImepwIz5H13W5eNYl9GzgFvNGS1OSLVtl9qmE=";
|
||||
rev = "b58ba9b980389b064c67fa42052a66508db73b40";
|
||||
hash = "sha256-FAT1k9ETN4TozWhXSLWQ7SpvqQ0j/G/uEL0ErYFs8B8=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "sparkle";
|
||||
version = "1.6.12";
|
||||
version = "1.6.15";
|
||||
|
||||
src =
|
||||
let
|
||||
@@ -40,8 +40,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
fetchurl {
|
||||
url = "https://github.com/xishang0128/sparkle/releases/download/${finalAttrs.version}/sparkle-linux-${finalAttrs.version}-${arch}.deb";
|
||||
hash = selectSystem {
|
||||
x86_64-linux = "sha256-jExqA15faSvkjXMAvKMwDwsdBjijG3hOyf0j1J7jH/A=";
|
||||
aarch64-linux = "sha256-1hZa5Dr+Fh9vc+066TNcvgH44Lgx5sebvMKSO+bh9B4=";
|
||||
x86_64-linux = "sha256-6WGMFmsUr/17lxZd+Q2Ellgs8ftn2YRb/lwmSR7uqLE=";
|
||||
aarch64-linux = "sha256-lo19xwSqNgTxBxZuNIV7cq2qE93xtbxnsn7K3vROmrc=";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -81,7 +81,6 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/bin
|
||||
chmod 0755 opt/sparkle/resources/files/sysproxy
|
||||
cp -r opt $out/opt
|
||||
substituteInPlace usr/share/applications/sparkle.desktop \
|
||||
--replace-fail "/opt/sparkle/sparkle" "sparkle"
|
||||
|
||||
@@ -42,13 +42,13 @@ in
|
||||
|
||||
rustPlatform.buildRustPackage (finalAttrs: {
|
||||
pname = "sqlpage";
|
||||
version = "0.39.0";
|
||||
version = "0.40.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lovasoa";
|
||||
repo = "SQLpage";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-M9WtpDc067G/EfRTJBoDxBrdXRMqOwVTdGgyXSdHlhE=";
|
||||
hash = "sha256-CmsAImnySdXlPQGWNMkPYhVj0HsvCzFB2LXeqFnjWG4=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -71,9 +71,12 @@ rustPlatform.buildRustPackage (finalAttrs: {
|
||||
substituteInPlace sqlpage/tomselect.js \
|
||||
--replace-fail '/* !include https://cdn.jsdelivr.net/npm/tom-select@2.4.1/dist/js/tom-select.popular.min.js */' \
|
||||
"$(cat ${tomselect})"
|
||||
substituteInPlace build.rs \
|
||||
--replace-fail "https://cdn.jsdelivr.net/npm/@tabler/icons-sprite@3.35.0/dist/tabler-sprite.svg" "${tablerIcons}" \
|
||||
--replace-fail "copy_url_to_opened_file(&client, sprite_url, &mut sprite_content).await;" "sprite_content = std::fs::read(sprite_url).unwrap();"
|
||||
'';
|
||||
|
||||
cargoHash = "sha256-lUQ1j2f/LXpqpb6VK4Bq2NI0L9KoyEdlPkENMOKkt0w=";
|
||||
cargoHash = "sha256-CTJYFzSOLYFq7I9lJhD3JcO2PuqQjqtXnBCEk2VfLfI=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
|
||||
|
||||
@@ -18,13 +18,13 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "vencord";
|
||||
version = "1.13.8";
|
||||
version = "1.13.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Vendicated";
|
||||
repo = "Vencord";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-qVR5LcRWuh5KUoK0VRTpjEK3Er8VNjb71NP5G3RSDQM=";
|
||||
hash = "sha256-AvwYAsc/dozSfIGPcsySAqOa47jg6bXvHj53eVsjYiM=";
|
||||
};
|
||||
|
||||
patches = [ ./fix-deps.patch ];
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "xmind";
|
||||
version = "25.07.03033-202507241842";
|
||||
version = "26.01.03145-202510170359";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dl3.xmind.app/Xmind-for-Linux-amd64bit-${finalAttrs.version}.deb";
|
||||
hash = "sha256-ZD5sFILeMgyO+jV+oArGqqDogW33JE8y49KkclEUHzE=";
|
||||
hash = "sha256-h7qxDf219+t8oAk8IABs7MyasNd3K/PAM6a79kyaLdw=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
@@ -95,7 +95,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
mainProgram = "xmind";
|
||||
license = lib.licenses.unfree;
|
||||
platforms = lib.platforms.linux;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with lib.maintainers; [ michalrus ];
|
||||
};
|
||||
})
|
||||
|
||||
@@ -1,31 +1,28 @@
|
||||
{
|
||||
lib,
|
||||
flutter335,
|
||||
python3,
|
||||
python3Packages,
|
||||
fetchFromGitHub,
|
||||
pcre2,
|
||||
libnotify,
|
||||
libappindicator,
|
||||
pkg-config,
|
||||
gnome-screenshot,
|
||||
makeWrapper,
|
||||
removeReferencesTo,
|
||||
runCommand,
|
||||
yq,
|
||||
yubioath-flutter,
|
||||
yq-go,
|
||||
_experimental-update-script-combinators,
|
||||
gitUpdater,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
flutter335.buildFlutterApplication rec {
|
||||
pname = "yubioath-flutter";
|
||||
version = "7.3.0";
|
||||
version = "7.3.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Yubico";
|
||||
repo = "yubioath-flutter";
|
||||
tag = version;
|
||||
hash = "sha256-1Hr8ZDHXiLiYfQg4PEpmIuIJR/USbsGCgI4YZSex2Eg=";
|
||||
hash = "sha256-jfWLj5pN1NGfnmYQ0lYeKwlc0v7pCdvAjmmWX5GP7aM=";
|
||||
};
|
||||
|
||||
pubspecLock = lib.importJSON ./pubspec.lock.json;
|
||||
@@ -39,11 +36,7 @@ flutter335.buildFlutterApplication rec {
|
||||
--replace-fail "../build/linux/helper" "${passthru.helper}/libexec/helper"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
removeReferencesTo
|
||||
pkg-config
|
||||
];
|
||||
nativeBuildInputs = [ removeReferencesTo ];
|
||||
|
||||
buildInputs = [
|
||||
pcre2
|
||||
@@ -86,19 +79,24 @@ flutter335.buildFlutterApplication rec {
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
helper = python3.pkgs.callPackage ./helper.nix { inherit src version meta; };
|
||||
helper = python3Packages.callPackage ./helper.nix { inherit src version meta; };
|
||||
pubspecSource =
|
||||
runCommand "pubspec.lock.json"
|
||||
{
|
||||
nativeBuildInputs = [ yq ];
|
||||
inherit (yubioath-flutter) src;
|
||||
inherit src;
|
||||
nativeBuildInputs = [ yq-go ];
|
||||
}
|
||||
''
|
||||
cat $src/pubspec.lock | yq > $out
|
||||
yq eval --output-format=json --prettyPrint $src/pubspec.lock > "$out"
|
||||
'';
|
||||
updateScript = _experimental-update-script-combinators.sequence [
|
||||
(gitUpdater { })
|
||||
(_experimental-update-script-combinators.copyAttrOutputToFile "yubioath-flutter.pubspecSource" ./pubspec.lock.json)
|
||||
(nix-update-script { extraArgs = [ "--use-github-releases" ]; })
|
||||
(
|
||||
(_experimental-update-script-combinators.copyAttrOutputToFile "yubioath-flutter.pubspecSource" ./pubspec.lock.json)
|
||||
// {
|
||||
supportedFeatures = [ ];
|
||||
}
|
||||
)
|
||||
];
|
||||
};
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
lib,
|
||||
fetchFromGitLab,
|
||||
cpio,
|
||||
cups,
|
||||
ddcutil,
|
||||
easyeffects,
|
||||
gjs,
|
||||
@@ -184,6 +185,14 @@ lib.trivial.pipe super [
|
||||
}
|
||||
))
|
||||
|
||||
(patchExtension "printers@linux-man.org" (old: {
|
||||
patches = [
|
||||
(replaceVars ./extensionOverridesPatches/printers_at_linux-man.org.patch {
|
||||
inherit cups;
|
||||
})
|
||||
];
|
||||
}))
|
||||
|
||||
(patchExtension "system-monitor@gnome-shell-extensions.gcampax.github.com" (old: {
|
||||
patches = [
|
||||
(replaceVars
|
||||
|
||||
+42
@@ -0,0 +1,42 @@
|
||||
diff --git a/extension.js b/extension.js
|
||||
index 91b81dc..e4a2552 100755
|
||||
--- a/extension.js
|
||||
+++ b/extension.js
|
||||
@@ -122,8 +122,8 @@ const PrintersManager = GObject.registerClass(class PrintersManager extends Pane
|
||||
this.menu.addMenuItem(printers);
|
||||
//Add Printers
|
||||
this.printers = [];
|
||||
- let p_list = await exec_async(['/usr/bin/lpstat', '-a']);
|
||||
- let p_default = await exec_async(['/usr/bin/lpstat', '-d']);
|
||||
+ let p_list = await exec_async(['@cups@/bin/lpstat', '-a']);
|
||||
+ let p_default = await exec_async(['@cups@/bin/lpstat', '-d']);
|
||||
if(p_default.split(': ')[1] != undefined) p_default = p_default.split(': ')[1].trim();
|
||||
else p_default = 'no default';
|
||||
p_list = p_list.split('\n');
|
||||
@@ -143,7 +143,7 @@ const PrintersManager = GObject.registerClass(class PrintersManager extends Pane
|
||||
}
|
||||
}
|
||||
//Jobs
|
||||
- let p_jobs = await exec_async(['/usr/bin/lpstat', '-o']);
|
||||
+ let p_jobs = await exec_async(['@cups@/bin/lpstat', '-o']);
|
||||
//Cancel all Jobs
|
||||
if(p_jobs.length > 0) {
|
||||
this.menu.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
||||
@@ -154,7 +154,7 @@ const PrintersManager = GObject.registerClass(class PrintersManager extends Pane
|
||||
//Add Jobs
|
||||
p_jobs = p_jobs.split(/\n/);
|
||||
this.jobsCount = p_jobs.length - 1
|
||||
- let p_jobs2 = await exec_async(['/usr/bin/lpq', '-a']);
|
||||
+ let p_jobs2 = await exec_async(['@cups@/bin/lpq', '-a']);
|
||||
p_jobs2 = p_jobs2.replace(/\n/g, ' ').split(/\s+/);
|
||||
let sendJobs = [];
|
||||
for(var n = 0; n < p_jobs.length - 1; n++) {
|
||||
@@ -194,7 +194,7 @@ const PrintersManager = GObject.registerClass(class PrintersManager extends Pane
|
||||
this.show();
|
||||
if(this.show_icon == 0 || (this.show_icon == 1 && this.printersCount > 0) || (this.show_icon == 2 && this.jobsCount > 0)) {
|
||||
this.show();
|
||||
- let p_error = await exec_async(['/usr/bin/lpstat', '-l']);
|
||||
+ let p_error = await exec_async(['@cups@/bin/lpstat', '-l']);
|
||||
this.printError = p_error.indexOf('Unable') >= 0 || p_error.indexOf(' not ') >= 0 || p_error.indexOf(' failed') >= 0;
|
||||
if(this.printWarning) this._icon.icon_name = warningIcon;
|
||||
else if(this.show_error && this.printError) this._icon.icon_name = errorIcon;
|
||||
@@ -36,6 +36,7 @@ buildDunePackage rec {
|
||||
Markdown, to name but a few! This library provides OCaml combinators
|
||||
for these web formats.
|
||||
'';
|
||||
homepage = "https://mirage.github.io/ocaml-cow/";
|
||||
license = lib.licenses.isc;
|
||||
maintainers = with lib.maintainers; [ sternenseemann ];
|
||||
};
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
lib,
|
||||
buildDunePackage,
|
||||
fetchFromGitHub,
|
||||
dune-configurator,
|
||||
ppxlib,
|
||||
}:
|
||||
|
||||
buildDunePackage (finalAttrs: {
|
||||
pname = "extunix";
|
||||
version = "0.4.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ygrek";
|
||||
repo = "extunix";
|
||||
tag = "v${finalAttrs.version}";
|
||||
hash = "sha256-7wJDGv19etkDHRwwQ+WONtJswxNMjr2Q2Vhis4WgFek=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace src/dune --replace-fail 'libraries unix bigarray bytes' 'libraries unix bigarray'
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
dune-configurator
|
||||
];
|
||||
|
||||
propagatedBuildInputs = [
|
||||
ppxlib
|
||||
];
|
||||
|
||||
# need absolute paths outside from sandbox
|
||||
doCheck = false;
|
||||
|
||||
meta = {
|
||||
description = "Collection of thin bindings to various low-level system API";
|
||||
homepage = "https://github.com/ygrek/extunix";
|
||||
changelog = "https://github.com/ygrek/extunix/releases/tag/v${finalAttrs.version}";
|
||||
license = lib.licenses.lgpl21Only;
|
||||
maintainers = with lib.maintainers; [ redianthus ];
|
||||
};
|
||||
})
|
||||
@@ -0,0 +1,34 @@
|
||||
{
|
||||
lib,
|
||||
fetchurl,
|
||||
buildDunePackage,
|
||||
ppxlib,
|
||||
ounit2,
|
||||
}:
|
||||
|
||||
buildDunePackage (finalAttrs: {
|
||||
pname = "ppx_deriving_variant_string";
|
||||
version = "1.0.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ahrefs/ppx_deriving_variant_string/releases/download/${finalAttrs.version}/ppx_deriving_variant_string-${finalAttrs.version}.tbz";
|
||||
hash = "sha256-nSU9LEwPOOQuCpNAVQgBGucHuk5wjJ3dDIj708djLwc=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
ppxlib
|
||||
];
|
||||
|
||||
doCheck = true;
|
||||
checkInputs = [
|
||||
ounit2
|
||||
];
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/ahrefs/ppx_deriving_variant_string";
|
||||
description = "OCaml PPX deriver that generates converters between regular or polymorphic variants and strings.";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.marijanp ];
|
||||
changelog = "https://raw.githubusercontent.com/ahrefs/ppx_deriving_variant_string/${finalAttrs.version}/CHANGES.md";
|
||||
};
|
||||
})
|
||||
@@ -0,0 +1,50 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchPypi,
|
||||
bce-python-sdk,
|
||||
click,
|
||||
prettytable,
|
||||
psutil,
|
||||
requests,
|
||||
tqdm,
|
||||
}:
|
||||
|
||||
let
|
||||
version = "0.3.8";
|
||||
|
||||
format = "wheel";
|
||||
in
|
||||
buildPythonPackage {
|
||||
pname = "aistudio-sdk";
|
||||
inherit version format;
|
||||
|
||||
# No source code dist available
|
||||
src = fetchPypi {
|
||||
pname = "aistudio_sdk";
|
||||
inherit version format;
|
||||
dist = "py3";
|
||||
python = "py3";
|
||||
hash = "sha256-v8lq9yQ6wu4zAwFISapAKHF8zlr6Yir4z+Oh1E0ZQdY=";
|
||||
};
|
||||
|
||||
dependencies = [
|
||||
bce-python-sdk
|
||||
click
|
||||
prettytable
|
||||
psutil
|
||||
requests
|
||||
tqdm
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "aistudio_sdk" ];
|
||||
|
||||
meta = {
|
||||
description = "Python client library for the AIStudio API";
|
||||
homepage = "https://pypi.org/project/aistudio-sdk";
|
||||
license = lib.licenses.unfree;
|
||||
mainProgram = "aistudio";
|
||||
maintainers = with lib.maintainers; [ kyehn ];
|
||||
sourceProvenance = with lib.sourceTypes; [ fromSource ];
|
||||
};
|
||||
}
|
||||
@@ -20,14 +20,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "approvaltests";
|
||||
version = "16.1.0";
|
||||
version = "16.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "approvals";
|
||||
repo = "ApprovalTests.Python";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-9zBpq4/jAH441eeMMV2WS767Rz+1qCX/QIfbToUHnAQ=";
|
||||
hash = "sha256-SAevC6yIDndtNRakyzsRNw4vM2wLc/Qbs3ZlmXEa+40=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
@@ -36,8 +36,6 @@ buildPythonPackage rec {
|
||||
substituteInPlace setup.py \
|
||||
--replace-fail "from setup_utils" "from setup.setup_utils"
|
||||
|
||||
echo 'version_number = "${version}"' > version.py
|
||||
|
||||
patchShebangs internal_documentation/scripts
|
||||
'';
|
||||
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
pythonAtLeast,
|
||||
fetchPypi,
|
||||
setuptools,
|
||||
future,
|
||||
pycryptodome,
|
||||
six,
|
||||
}:
|
||||
|
||||
let
|
||||
version = "0.9.46";
|
||||
in
|
||||
buildPythonPackage {
|
||||
pname = "bce-python-sdk";
|
||||
inherit version;
|
||||
pyproject = true;
|
||||
|
||||
disabled = pythonAtLeast "3.13";
|
||||
|
||||
src = fetchPypi {
|
||||
pname = "bce_python_sdk";
|
||||
inherit version;
|
||||
hash = "sha256-S/AbIubRcszZSqIB+LxvKpjQ2keEFg53z6z8xxwmhr4=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
future
|
||||
pycryptodome
|
||||
six
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "baidubce" ];
|
||||
|
||||
meta = {
|
||||
description = "Baidu Cloud Engine SDK for python";
|
||||
homepage = "https://github.com/baidubce/bce-sdk-python";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ kyehn ];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
poetry-core,
|
||||
pydantic,
|
||||
typer,
|
||||
pytestCheckHook,
|
||||
}:
|
||||
buildPythonPackage rec {
|
||||
pname = "countryinfo";
|
||||
version = "1.0.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "porimol";
|
||||
repo = "countryinfo";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-Y4nJnjXg8raJx2f00DFMktdcWoLO09wqTFK6Fc8RKSI=";
|
||||
};
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
|
||||
patches = [ ./fix-pyproject-file.patch ];
|
||||
|
||||
dependencies = [
|
||||
pydantic
|
||||
typer
|
||||
];
|
||||
|
||||
pythonRelaxDeps = [ "typer" ];
|
||||
|
||||
pythonImportsCheck = [ "countryinfo" ];
|
||||
|
||||
nativeCheckInputs = [ pytestCheckHook ];
|
||||
|
||||
meta = {
|
||||
homepage = "https://github.com/porimol/countryinfo";
|
||||
description = "Data about countries, ISO info and states/provinces within them";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [
|
||||
cizniarova
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
diff --git a/pyproject.toml b/pyproject.toml
|
||||
index f31c9e3..31fa9c8 100644
|
||||
--- a/pyproject.toml
|
||||
+++ b/pyproject.toml
|
||||
@@ -1,3 +1,6 @@
|
||||
+[project]
|
||||
+name = "countryinfo"
|
||||
+
|
||||
[tool.poetry]
|
||||
name = "countryinfo"
|
||||
version = "1.0.0"
|
||||
@@ -14,12 +14,12 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "meshcore";
|
||||
version = "2.2.2";
|
||||
version = "2.2.3";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-vn/vF4avMDwDLL0EMVrrMWkZrZ1GTiUxGyTBOtKvG1I=";
|
||||
sha256 = "sha256-lmMflAlrNnfsc10J3CBxor9ftHK10bWyGTbjASJv82s=";
|
||||
};
|
||||
|
||||
build-system = [ hatchling ];
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
setuptools,
|
||||
filelock,
|
||||
requests,
|
||||
tqdm,
|
||||
}:
|
||||
|
||||
let
|
||||
version = "1.31.0";
|
||||
in
|
||||
buildPythonPackage {
|
||||
pname = "modelscope";
|
||||
inherit version;
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "modelscope";
|
||||
repo = "modelscope";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-3o3iI4LGDSsF36jnrUTN3bBaM8XGCw+msIPS3WauMNQ=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace setup.py \
|
||||
--replace-fail "exec(compile(f.read(), version_file, 'exec'))" "ns = {}; exec(compile(f.read(), version_file, 'exec'), ns)" \
|
||||
--replace-fail "return locals()['__version__']" "return ns['__version__']"
|
||||
'';
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
dependencies = [
|
||||
filelock
|
||||
requests
|
||||
setuptools
|
||||
tqdm
|
||||
];
|
||||
|
||||
doCheck = false; # need network
|
||||
|
||||
pythonImportsCheck = [ "modelscope" ];
|
||||
|
||||
meta = {
|
||||
description = "Bring the notion of Model-as-a-Service to life";
|
||||
homepage = "https://github.com/modelscope/modelscope";
|
||||
license = lib.licenses.asl20;
|
||||
mainProgram = "modelscope";
|
||||
maintainers = with lib.maintainers; [ kyehn ];
|
||||
};
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
pythonOlder,
|
||||
fetchPypi,
|
||||
poetry-core,
|
||||
cryptography,
|
||||
@@ -25,7 +24,10 @@ buildPythonPackage rec {
|
||||
hash = "sha256-ZyB5gNZc5HxohZypc/198PPBxqG9URscQfXYAWzs7n8=";
|
||||
};
|
||||
|
||||
pythonRelaxDeps = [ "protobuf" ];
|
||||
pythonRelaxDeps = [
|
||||
"protobuf"
|
||||
"hidapi"
|
||||
];
|
||||
|
||||
build-system = [ poetry-core ];
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
{
|
||||
x86_64-linux = {
|
||||
platform = "manylinux1_x86_64";
|
||||
cpu = {
|
||||
cp312 = "sha256-gafFsQFQsHUh0c0Ukdyh+3b/YhsU2xDomdlZ86d5Neo=";
|
||||
cp313 = "sha256-j8SGXv02Vu6ZQkEkeSy4imQhUbTVkafW1KXGr9rpWVk=";
|
||||
};
|
||||
gpu = {
|
||||
cp311 = "sha256-KWlGhjg9k1+wlm3Tk/mvMqh9LWZ0yGA1g99bCPlFf0U=";
|
||||
cp312 = "sha256-KJ2drJWLuwdaYsCj7egh1nQV4j35vT+UgH0qTdxoyHk=";
|
||||
};
|
||||
};
|
||||
aarch64-linux = {
|
||||
platform = "manylinux2014_aarch64";
|
||||
cpu = {
|
||||
cp312 = "sha256-3aqZaosKANvkJp2iHWUFKHfsNpOiLswHucraPs0RaIY=";
|
||||
cp313 = "sha256-u8TVc7NdJKJi4C1yaW6A9bSu5B9phnGvlXTe6xqD5vc=";
|
||||
};
|
||||
};
|
||||
x86_64-darwin = {
|
||||
platform = "macosx_10_9_x86_64";
|
||||
cpu = {
|
||||
cp312 = "sha256-3P6/sQ3rFaoz0qLWbVoS2d5lRh2KQNJofi+zIhFQ0Lo=";
|
||||
cp313 = "sha256-UsQB/+Sq5WMWZgozAVpv11XNoj09cKKLE7c9cMvbuMs=";
|
||||
};
|
||||
};
|
||||
aarch64-darwin = {
|
||||
platform = "macosx_11_0_arm64";
|
||||
cpu = {
|
||||
cp312 = "sha256-hnfo1C/2b3T7yjL/Mti2S749Vu0pqS1D3EGPDxaPy2k=";
|
||||
cp313 = "sha256-nRBR8uII2h1Dna7nyGG8tQJA8JcSSW62Hpzoxhj68vk=";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -3,10 +3,13 @@
|
||||
lib,
|
||||
stdenv,
|
||||
buildPythonPackage,
|
||||
fetchurl,
|
||||
fetchPypi,
|
||||
python,
|
||||
pythonOlder,
|
||||
pythonAtLeast,
|
||||
autoPatchelfHook,
|
||||
bash,
|
||||
zlib,
|
||||
setuptools,
|
||||
cudaSupport ? config.cudaSupport or false,
|
||||
@@ -25,27 +28,34 @@
|
||||
|
||||
let
|
||||
pname = "paddlepaddle" + lib.optionalString cudaSupport "-gpu";
|
||||
version = if cudaSupport then "2.6.2" else "3.0.0";
|
||||
sources = import ./sources.nix;
|
||||
version = sources.version;
|
||||
format = "wheel";
|
||||
pyShortVersion = "cp${builtins.replaceStrings [ "." ] [ "" ] python.pythonVersion}";
|
||||
cpuOrGpu = if cudaSupport then "gpu" else "cpu";
|
||||
allHashAndPlatform = import ./binary-hashes.nix;
|
||||
hash =
|
||||
allHashAndPlatform."${stdenv.hostPlatform.system}"."${cpuOrGpu}"."${pyShortVersion}"
|
||||
or (throw "${pname} has no binary-hashes.nix entry for '${stdenv.hostPlatform.system}.${cpuOrGpu}.${pyShortVersion}' attribute");
|
||||
platform = allHashAndPlatform."${stdenv.hostPlatform.system}".platform;
|
||||
src = fetchPypi {
|
||||
inherit
|
||||
version
|
||||
format
|
||||
hash
|
||||
platform
|
||||
;
|
||||
pname = builtins.replaceStrings [ "-" ] [ "_" ] pname;
|
||||
dist = pyShortVersion;
|
||||
python = pyShortVersion;
|
||||
abi = pyShortVersion;
|
||||
};
|
||||
sources."${stdenv.hostPlatform.system}"."${cpuOrGpu}"."${pyShortVersion}"
|
||||
or (throw "${pname} has no sources.nix entry for '${stdenv.hostPlatform.system}.${cpuOrGpu}.${pyShortVersion}' attribute");
|
||||
platform = sources."${stdenv.hostPlatform.system}".platform;
|
||||
src =
|
||||
if cudaSupport then
|
||||
(fetchurl {
|
||||
url = "https://paddle-whl.bj.bcebos.com/stable/cu128/paddlepaddle-gpu/paddlepaddle-${version}-${pyShortVersion}-${pyShortVersion}-linux_x86_64.whl";
|
||||
inherit hash;
|
||||
})
|
||||
else
|
||||
(fetchPypi {
|
||||
inherit
|
||||
version
|
||||
format
|
||||
hash
|
||||
platform
|
||||
;
|
||||
pname = "paddlepaddle";
|
||||
dist = pyShortVersion;
|
||||
python = pyShortVersion;
|
||||
abi = pyShortVersion;
|
||||
});
|
||||
in
|
||||
buildPythonPackage {
|
||||
inherit
|
||||
@@ -55,13 +65,12 @@ buildPythonPackage {
|
||||
src
|
||||
;
|
||||
|
||||
disabled =
|
||||
if cudaSupport then
|
||||
(pythonOlder "3.11" || pythonAtLeast "3.13")
|
||||
else
|
||||
(pythonOlder "3.12" || pythonAtLeast "3.14");
|
||||
disabled = pythonOlder "3.12" || pythonAtLeast "3.14";
|
||||
|
||||
nativeBuildInputs = [ addDriverRunpath ];
|
||||
nativeBuildInputs = [
|
||||
addDriverRunpath
|
||||
]
|
||||
++ lib.optionals cudaSupport [ autoPatchelfHook ];
|
||||
|
||||
dependencies = [
|
||||
setuptools
|
||||
@@ -75,40 +84,48 @@ buildPythonPackage {
|
||||
typing-extensions
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "paddle" ];
|
||||
# Segmentation fault in darwin sandbox
|
||||
pythonImportsCheck = lib.optionals stdenv.hostPlatform.isLinux [ "paddle" ];
|
||||
|
||||
# no tests
|
||||
doCheck = false;
|
||||
|
||||
postFixup = lib.optionalString stdenv.hostPlatform.isLinux (
|
||||
let
|
||||
libraryPath = lib.makeLibraryPath (
|
||||
[
|
||||
zlib
|
||||
(lib.getLib stdenv.cc.cc)
|
||||
]
|
||||
++ lib.optionals cudaSupport (
|
||||
with cudaPackages;
|
||||
postFixup =
|
||||
lib.optionalString stdenv.hostPlatform.isLinux (
|
||||
let
|
||||
libraryPath = lib.makeLibraryPath (
|
||||
[
|
||||
cudatoolkit.lib
|
||||
cudatoolkit.out
|
||||
cudnn
|
||||
zlib
|
||||
(lib.getLib stdenv.cc.cc)
|
||||
]
|
||||
)
|
||||
);
|
||||
in
|
||||
''
|
||||
function fixRunPath {
|
||||
p=$(patchelf --print-rpath $1)
|
||||
patchelf --set-rpath "$p:${libraryPath}" $1
|
||||
${lib.optionalString cudaSupport ''
|
||||
addDriverRunpath $1
|
||||
''}
|
||||
}
|
||||
fixRunPath $out/${python.sitePackages}/paddle/base/libpaddle.so
|
||||
fixRunPath $out/${python.sitePackages}/paddle/libs/lib*.so
|
||||
''
|
||||
);
|
||||
++ lib.optionals cudaSupport (
|
||||
with cudaPackages;
|
||||
[
|
||||
cudatoolkit.lib
|
||||
cudatoolkit.out
|
||||
cudnn
|
||||
]
|
||||
)
|
||||
);
|
||||
in
|
||||
''
|
||||
function fixRunPath {
|
||||
patchelf --add-rpath ${libraryPath} $1
|
||||
${lib.optionalString cudaSupport ''
|
||||
addDriverRunpath $1
|
||||
''}
|
||||
}
|
||||
fixRunPath $out/${python.sitePackages}/paddle/base/libpaddle.so
|
||||
fixRunPath $out/${python.sitePackages}/paddle/libs/lib*.so
|
||||
''
|
||||
)
|
||||
+ ''
|
||||
substituteInPlace $out/bin/paddle \
|
||||
--replace-fail "/bin/bash" "${lib.getExe bash}" \
|
||||
--replace-fail "python -" "${lib.getExe (python.withPackages (ps: with ps; [ distutils ]))} -"
|
||||
sed -i '/# Check python lib installed or not./,/^fi$/d' $out/bin/paddle
|
||||
sed -i 's/^INSTALLED_VERSION=.*/INSTALLED_VERSION="${version}"/' $out/bin/paddle
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Machine Learning Framework from Industrial Practice";
|
||||
@@ -120,7 +137,6 @@ buildPythonPackage {
|
||||
]
|
||||
++ lib.optionals (!cudaSupport) [
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
{
|
||||
version = "3.2.0";
|
||||
x86_64-linux = {
|
||||
platform = "manylinux1_x86_64";
|
||||
cpu = {
|
||||
cp312 = "sha256-LBf2daJevQZ19wP3uCd36pLbDDYL1Vpcay36rXvD8mA=";
|
||||
cp313 = "sha256-+irs0GFCQ1D2dwqD3aB5aR9yJGNc/ydurvTj4XRAA50=";
|
||||
};
|
||||
gpu = {
|
||||
cp312 = "sha256-YqxAWSvjhYOQUCiUPtjC3PdRxFeWGm/be8FxOrpaLZo=";
|
||||
cp313 = "sha256-TdFx5Ut3iOTRg8USL2eIHyRYv8QT4KrLBPdiPkaK+Nc=";
|
||||
};
|
||||
};
|
||||
aarch64-linux = {
|
||||
platform = "manylinux2014_aarch64";
|
||||
cpu = {
|
||||
cp312 = "sha256-TOUUEUr3Zxh1/Ekn6gBa+51dD9d3rrVqEHjSL39Os/s=";
|
||||
cp313 = "sha256-KqDlAvbdKE7aIcKH0yZFTfomrMqIwjqgrFgdHvmDGMU=";
|
||||
};
|
||||
};
|
||||
aarch64-darwin = {
|
||||
platform = "macosx_11_0_arm64";
|
||||
cpu = {
|
||||
cp312 = "sha256-rDNK9y0bDUnUyTPP1OtC1z7C3HpqryJIxihkPUGbbac=";
|
||||
cp313 = "sha256-OBhOHqf9e/A4g+ph9FYZuXEtksE60foWk06p4NbT6ZE=";
|
||||
};
|
||||
};
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
#! /usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p bash nix-update common-updater-scripts jq
|
||||
|
||||
set -eou pipefail
|
||||
|
||||
nix-update --system=x86_64-linux --url=https://github.com/PaddlePaddle/Paddle --override-filename=pkgs/development/python-modules/paddlepaddle/sources.nix --use-github-releases python313Packages.paddlepaddle || true
|
||||
|
||||
latestVersion=$(nix eval --raw --file . python313Packages.paddlepaddle.version)
|
||||
|
||||
systems=$(nix eval --json -f . python313Packages.paddlepaddle.meta.platforms | jq --raw-output '.[]')
|
||||
for system in $systems; do
|
||||
for pythonPackages in "python313Packages" "python312Packages"; do
|
||||
hash=$(nix --extra-experimental-features nix-command hash convert --to sri --hash-algo sha256 $(nix-prefetch-url $(nix eval --raw --file . $pythonPackages.paddlepaddle.src.url --system "$system")))
|
||||
update-source-version $pythonPackages.paddlepaddle $latestVersion $hash --file=pkgs/development/python-modules/paddlepaddle/sources.nix --system=$system --ignore-same-version --ignore-same-hash
|
||||
done
|
||||
done
|
||||
|
||||
for pythonPackages in "python313Packages" "python312Packages"; do
|
||||
hash=$(nix --extra-experimental-features nix-command hash convert --to sri --hash-algo sha256 $(nix-prefetch-url $(nix eval --raw --file . pkgsCuda.$pythonPackages.paddlepaddle.src.url --system x86_64-linux)))
|
||||
update-source-version pkgsCuda.$pythonPackages.paddlepaddle $latestVersion $hash --file=pkgs/development/python-modules/paddlepaddle/sources.nix --system=x86_64-linux --ignore-same-version --ignore-same-hash
|
||||
done
|
||||
@@ -19,6 +19,8 @@
|
||||
ujson,
|
||||
distutils,
|
||||
huggingface-hub,
|
||||
modelscope,
|
||||
aistudio-sdk,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
@@ -63,11 +65,6 @@ buildPythonPackage rec {
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
pythonRemoveDeps = [
|
||||
# unpackaged
|
||||
"aistudio-sdk"
|
||||
"modelscope"
|
||||
];
|
||||
pythonRelaxDeps = [
|
||||
"numpy"
|
||||
"pandas"
|
||||
@@ -91,6 +88,8 @@ buildPythonPackage rec {
|
||||
ujson
|
||||
gputil
|
||||
huggingface-hub
|
||||
modelscope
|
||||
aistudio-sdk
|
||||
];
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
@@ -10,14 +10,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "pysrdaligateway";
|
||||
version = "0.19.0";
|
||||
version = "0.19.2";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "maginawin";
|
||||
repo = "PySrDaliGateway";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-m4gkhDYrw+58FN80zTKjSPK/3Wsl7rZ+Xlo/iWNZTWw=";
|
||||
hash = "sha256-ONwWEgipiXW8lsF6KLeZRKfIGKxoQVVqkqL9IW/ldrw=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
fetchpatch,
|
||||
runCommand,
|
||||
|
||||
# build-system
|
||||
@@ -12,6 +13,7 @@
|
||||
dbus-python,
|
||||
|
||||
# checks
|
||||
doCheck ? true,
|
||||
dbus,
|
||||
gobject-introspection,
|
||||
pygobject3,
|
||||
@@ -40,6 +42,14 @@ buildPythonPackage rec {
|
||||
hash = "sha256-9YnMOQUuwAcrL0ZaQr7iGly9esZaSRIFThQRNUtSndo=";
|
||||
};
|
||||
|
||||
patches = lib.optionals doCheck [
|
||||
(fetchpatch {
|
||||
name = "networkmanager-1.54.2.patch";
|
||||
url = "https://github.com/martinpitt/python-dbusmock/commit/1ce6196a687d324a55fbf1f74e0f66a4e83f7a15.patch";
|
||||
hash = "sha256-Wo7AhmZu74cTHT9I36+NGGSU9dcFwmcDvtzgseTj/yA=";
|
||||
})
|
||||
];
|
||||
|
||||
build-system = [
|
||||
setuptools
|
||||
setuptools-scm
|
||||
@@ -47,6 +57,8 @@ buildPythonPackage rec {
|
||||
|
||||
dependencies = [ dbus-python ];
|
||||
|
||||
inherit doCheck;
|
||||
|
||||
nativeCheckInputs = [
|
||||
dbus
|
||||
gobject-introspection
|
||||
|
||||
@@ -17,14 +17,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "raylib-python-cffi";
|
||||
version = "5.5.0.3";
|
||||
version = "5.5.0.4";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "electronstudio";
|
||||
repo = "raylib-python-cffi";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-VsdUOk26xXEwha7kGYHy4Cgwrr3yOiSlJg4nYn+ZYYs=";
|
||||
hash = "sha256-MKyTpGnup4QmRui2OVBpnyn9KENATWcwYcikOmYX4c8=";
|
||||
};
|
||||
|
||||
build-system = [ setuptools ];
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
{
|
||||
lib,
|
||||
buildPythonPackage,
|
||||
fetchFromGitHub,
|
||||
|
||||
# build-system
|
||||
flit,
|
||||
setuptools,
|
||||
|
||||
# dependencies
|
||||
boltons,
|
||||
bottleneck,
|
||||
cf-xarray,
|
||||
cftime,
|
||||
click,
|
||||
dask,
|
||||
filelock,
|
||||
jsonpickle,
|
||||
numba,
|
||||
packaging,
|
||||
pandas,
|
||||
pint,
|
||||
platformdirs,
|
||||
pooch,
|
||||
pyarrow,
|
||||
pyyaml,
|
||||
scikit-learn,
|
||||
scipy,
|
||||
statsmodels,
|
||||
xarray,
|
||||
yamale,
|
||||
|
||||
# test
|
||||
versionCheckHook,
|
||||
}:
|
||||
buildPythonPackage rec {
|
||||
pname = "xclim";
|
||||
version = "0.59.1";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Ouranosinc";
|
||||
repo = "xclim";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-n9HJoIHLyLWxrgCuDZDQ9dcW7frgEA/LoYqnTEBLqD8=";
|
||||
};
|
||||
|
||||
build-system = [
|
||||
flit
|
||||
setuptools
|
||||
];
|
||||
|
||||
dependencies = [
|
||||
boltons
|
||||
bottleneck
|
||||
cf-xarray
|
||||
cftime
|
||||
click
|
||||
dask
|
||||
filelock
|
||||
jsonpickle
|
||||
numba
|
||||
packaging
|
||||
pandas
|
||||
pint
|
||||
platformdirs
|
||||
pooch
|
||||
pyarrow
|
||||
pyyaml
|
||||
scikit-learn
|
||||
scipy
|
||||
statsmodels
|
||||
xarray
|
||||
yamale
|
||||
];
|
||||
|
||||
# No python test hooks has been added as all tests seems to be relying on network data
|
||||
# https://github.com/Ouranosinc/xclim/blob/e8ce9bf37083832517afb3375acc853191782d8f/tests/conftest.py#L314
|
||||
nativeCheckInputs = [
|
||||
versionCheckHook
|
||||
];
|
||||
|
||||
versionCheckProgramArg = "--version";
|
||||
|
||||
pythonImportsCheck = [
|
||||
"xclim"
|
||||
"xclim.ensembles"
|
||||
"xclim.indices"
|
||||
];
|
||||
|
||||
meta = {
|
||||
description = "Operational Python library supporting climate services, based on xarray";
|
||||
homepage = "https://github.com/Ouranosinc/xclim";
|
||||
changelog = "https://github.com/Ouranosinc/xclim/releases/tag/${src.tag}";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [ daspk04 ];
|
||||
mainProgram = "xclim";
|
||||
};
|
||||
}
|
||||
@@ -8,6 +8,7 @@
|
||||
makeSetupHook,
|
||||
pnpm,
|
||||
yq,
|
||||
zstd,
|
||||
}:
|
||||
|
||||
let
|
||||
@@ -16,6 +17,7 @@ let
|
||||
supportedFetcherVersions = [
|
||||
1 # First version. Here to preserve backwards compatibility
|
||||
2 # Ensure consistent permissions. See https://github.com/NixOS/nixpkgs/pull/422975
|
||||
3 # Build a reproducible tarball. See https://github.com/NixOS/nixpkgs/pull/469950
|
||||
];
|
||||
in
|
||||
{
|
||||
@@ -72,6 +74,7 @@ in
|
||||
moreutils
|
||||
args.pnpm or pnpm'
|
||||
yq
|
||||
zstd
|
||||
];
|
||||
|
||||
impureEnvVars = lib.fetchers.proxyImpureEnvVars ++ [ "NIX_NPM_REGISTRY" ];
|
||||
@@ -87,13 +90,23 @@ in
|
||||
|
||||
export HOME=$(mktemp -d)
|
||||
|
||||
# For fetcherVersion < 3, the pnpm store files are placed directly into $out.
|
||||
# For fetcherVersion >= 3, it is bundled into a compressed tarball within $out,
|
||||
# without distributing the uncompressed store files.
|
||||
if [[ ${toString fetcherVersion} -ge 3 ]]; then
|
||||
mkdir $out
|
||||
storePath=$(mktemp -d)
|
||||
else
|
||||
storePath=$out
|
||||
fi
|
||||
|
||||
# If the packageManager field in package.json is set to a different pnpm version than what is in nixpkgs,
|
||||
# any pnpm command would fail in that directory, the following disables this
|
||||
pushd ..
|
||||
pnpm config set manage-package-manager-versions false
|
||||
popd
|
||||
|
||||
pnpm config set store-dir $out
|
||||
pnpm config set store-dir $storePath
|
||||
# Some packages produce platform dependent outputs. We do not want to cache those in the global store
|
||||
pnpm config set side-effects-cache false
|
||||
# As we pin pnpm versions, we don't really care about updates
|
||||
@@ -122,8 +135,8 @@ in
|
||||
runHook preFixup
|
||||
|
||||
# Remove timestamp and sort the json files
|
||||
rm -rf $out/{v3,v10}/tmp
|
||||
for f in $(find $out -name "*.json"); do
|
||||
rm -rf $storePath/{v3,v10}/tmp
|
||||
for f in $(find $storePath -name "*.json"); do
|
||||
jq --sort-keys "del(.. | .checkedAt?)" $f | sponge $f
|
||||
done
|
||||
|
||||
@@ -139,9 +152,22 @@ in
|
||||
# See https://github.com/NixOS/nixpkgs/pull/350063
|
||||
# See https://github.com/NixOS/nixpkgs/issues/422889
|
||||
if [[ ${toString fetcherVersion} -ge 2 ]]; then
|
||||
find $out -type f -name "*-exec" -print0 | xargs -0 chmod 555
|
||||
find $out -type f -not -name "*-exec" -print0 | xargs -0 chmod 444
|
||||
find $out -type d -print0 | xargs -0 chmod 555
|
||||
find $storePath -type f -name "*-exec" -print0 | xargs -0 chmod 555
|
||||
find $storePath -type f -not -name "*-exec" -print0 | xargs -0 chmod 444
|
||||
find $storePath -type d -print0 | xargs -0 chmod 555
|
||||
fi
|
||||
|
||||
if [[ ${toString fetcherVersion} -ge 3 ]]; then
|
||||
(
|
||||
cd $storePath
|
||||
|
||||
# Build a reproducible tarball, per instructions at https://reproducible-builds.org/docs/archives/
|
||||
tar --sort=name \
|
||||
--mtime="@$SOURCE_DATE_EPOCH" \
|
||||
--owner=0 --group=0 --numeric-owner \
|
||||
--pax-option=exthdr.name=%d/PaxHeaders/%f,delete=atime,delete=ctime \
|
||||
--zstd -cf $out/pnpm-store.tar.zst .
|
||||
)
|
||||
fi
|
||||
|
||||
runHook postFixup
|
||||
@@ -166,7 +192,10 @@ in
|
||||
|
||||
configHook = makeSetupHook {
|
||||
name = "pnpm-config-hook";
|
||||
propagatedBuildInputs = [ pnpm ];
|
||||
propagatedBuildInputs = [
|
||||
pnpm
|
||||
zstd
|
||||
];
|
||||
substitutions = {
|
||||
npmArch = stdenvNoCC.targetPlatform.node.arch;
|
||||
npmPlatform = stdenvNoCC.targetPlatform.node.platform;
|
||||
|
||||
@@ -12,10 +12,7 @@ pnpmConfigHook() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
fetcherVersion=1
|
||||
if [[ -e "${pnpmDeps}/.fetcher-version" ]]; then
|
||||
fetcherVersion=$(cat "${pnpmDeps}/.fetcher-version")
|
||||
fi
|
||||
fetcherVersion=$(cat "${pnpmDeps}/.fetcher-version" || echo 1)
|
||||
|
||||
echo "Using fetcherVersion: $fetcherVersion"
|
||||
|
||||
@@ -26,7 +23,12 @@ pnpmConfigHook() {
|
||||
export npm_config_arch="@npmArch@"
|
||||
export npm_config_platform="@npmPlatform@"
|
||||
|
||||
cp -Tr "$pnpmDeps" "$STORE_PATH"
|
||||
if [[ $fetcherVersion -ge 3 ]]; then
|
||||
tar --zstd -xf "$pnpmDeps/pnpm-store.tar.zst" -C "$STORE_PATH"
|
||||
else
|
||||
cp -Tr "$pnpmDeps" "$STORE_PATH"
|
||||
fi
|
||||
|
||||
chmod -R +w "$STORE_PATH"
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
writeShellApplication,
|
||||
pnpm,
|
||||
pnpmDeps,
|
||||
zstd,
|
||||
}:
|
||||
|
||||
writeShellApplication {
|
||||
@@ -9,11 +10,14 @@ writeShellApplication {
|
||||
|
||||
runtimeInputs = [
|
||||
pnpm
|
||||
zstd
|
||||
];
|
||||
|
||||
text = ''
|
||||
storePath=$(mktemp -d)
|
||||
|
||||
fetcherVersion=$(cat "${pnpmDeps}/.fetcher-version" || echo 1)
|
||||
|
||||
clean() {
|
||||
echo "Cleaning up temporary store at '$storePath'..."
|
||||
|
||||
@@ -22,7 +26,12 @@ writeShellApplication {
|
||||
|
||||
echo "Copying pnpm store '${pnpmDeps}' to temporary store..."
|
||||
|
||||
cp -Tr "${pnpmDeps}" "$storePath"
|
||||
if [[ $fetcherVersion -ge 3 ]]; then
|
||||
tar --zstd -xf "${pnpmDeps}/pnpm-store.tar.zst" -C "$storePath"
|
||||
else
|
||||
cp -Tr "${pnpmDeps}" "$storePath"
|
||||
fi
|
||||
|
||||
chmod -R +w "$storePath"
|
||||
|
||||
echo "Run 'pnpm install --store-dir \"$storePath\"' to install packages from this store."
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
qtdeclarative,
|
||||
qt5compat,
|
||||
qqc2-desktop-style,
|
||||
fetchpatch,
|
||||
}:
|
||||
# Kirigami has a runtime dependency on qqc2-desktop-style,
|
||||
# which has a build time dependency on Kirigami.
|
||||
@@ -19,6 +20,13 @@ let
|
||||
|
||||
patches = [
|
||||
./rb-templates.patch
|
||||
|
||||
# Fix rendering issues in some applications
|
||||
# FIXME: remove in next update
|
||||
(fetchpatch {
|
||||
url = "https://invent.kde.org/frameworks/kirigami/-/commit/19127672cd812d177192cf84da4107f9abed2934.diff";
|
||||
hash = "sha256-dh1OwMTksbVTEsEDw4vfBarR3fyBaulQa8SSHsddht0=";
|
||||
})
|
||||
];
|
||||
|
||||
extraNativeBuildInputs = [
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
mkKdeDerivation {
|
||||
pname = "libplasma";
|
||||
|
||||
patches = [
|
||||
# https://invent.kde.org/plasma/libplasma/-/merge_requests/1406
|
||||
./rb-extracomponents.patch
|
||||
];
|
||||
|
||||
extraNativeBuildInputs = [ pkg-config ];
|
||||
|
||||
extraBuildInputs = [
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
commit fd5e1a04b024a9b955d6942e52295582144fbea7
|
||||
Author: Arnout Engelen <arnout@bzzt.net>
|
||||
Date: Sun Dec 14 10:43:57 2025 +0100
|
||||
|
||||
reproducible builds: make qml dependency explicit
|
||||
|
||||
Similar to https://qt-project.atlassian.net/browse/QTBUG-137440
|
||||
|
||||
To fix https://bugs.kde.org/show_bug.cgi?id=512868
|
||||
|
||||
I'll admit I don't quite know what I'm doing here, I'm mostly guessing and mimicking, but it does seem to remove the nondeterminism :)
|
||||
|
||||
diff --git a/src/declarativeimports/plasmaextracomponents/CMakeLists.txt b/src/declarativeimports/plasmaextracomponents/CMakeLists.txt
|
||||
index 1a7827819..989318c80 100644
|
||||
--- a/src/declarativeimports/plasmaextracomponents/CMakeLists.txt
|
||||
+++ b/src/declarativeimports/plasmaextracomponents/CMakeLists.txt
|
||||
@@ -44,6 +44,10 @@ target_link_libraries(plasmaextracomponentsplugin PRIVATE
|
||||
KF6::WidgetsAddons
|
||||
Plasma::Plasma)
|
||||
|
||||
+add_dependencies(plasmaextracomponentsplugin
|
||||
+ org_kde_plasmacomponents3
|
||||
+)
|
||||
+
|
||||
ecm_finalize_qml_module(plasmaextracomponentsplugin DESTINATION ${KDE_INSTALL_QMLDIR})
|
||||
|
||||
ecm_generate_qdoc(plasmaextracomponentsplugin plasmaextras.qdocconf)
|
||||
+127
-150
@@ -15,15 +15,15 @@ let
|
||||
concatMapStrings
|
||||
concatMapStringsSep
|
||||
concatStrings
|
||||
filter
|
||||
findFirst
|
||||
getName
|
||||
isDerivation
|
||||
length
|
||||
concatMap
|
||||
mutuallyExclusive
|
||||
optional
|
||||
optionalAttrs
|
||||
optionalString
|
||||
optionals
|
||||
isAttrs
|
||||
isString
|
||||
mapAttrs
|
||||
@@ -47,6 +47,11 @@ let
|
||||
toPretty
|
||||
;
|
||||
|
||||
inherit (builtins)
|
||||
getEnv
|
||||
trace
|
||||
;
|
||||
|
||||
# If we're in hydra, we can dispense with the more verbose error
|
||||
# messages and make problems easier to spot.
|
||||
inHydra = config.inHydra or false;
|
||||
@@ -57,11 +62,11 @@ let
|
||||
getNameWithVersion =
|
||||
attrs: attrs.name or "${attrs.pname or "«name-missing»"}-${attrs.version or "«version-missing»"}";
|
||||
|
||||
allowUnfree = config.allowUnfree || builtins.getEnv "NIXPKGS_ALLOW_UNFREE" == "1";
|
||||
allowUnfree = config.allowUnfree || getEnv "NIXPKGS_ALLOW_UNFREE" == "1";
|
||||
|
||||
allowNonSource =
|
||||
let
|
||||
envVar = builtins.getEnv "NIXPKGS_ALLOW_NONSOURCE";
|
||||
envVar = getEnv "NIXPKGS_ALLOW_NONSOURCE";
|
||||
in
|
||||
if envVar != "" then envVar != "0" else config.allowNonSource or true;
|
||||
|
||||
@@ -74,33 +79,34 @@ let
|
||||
else
|
||||
throw "allowlistedLicenses and blocklistedLicenses are not mutually exclusive.";
|
||||
|
||||
hasLicense = attrs: attrs ? meta.license;
|
||||
|
||||
hasListedLicense =
|
||||
assert areLicenseListsValid;
|
||||
list: attrs:
|
||||
length list > 0
|
||||
&& hasLicense attrs
|
||||
&& (
|
||||
if isList attrs.meta.license then
|
||||
any (l: elem l list) attrs.meta.license
|
||||
else
|
||||
elem attrs.meta.license list
|
||||
);
|
||||
list:
|
||||
if list == [ ] then
|
||||
attrs: false
|
||||
else
|
||||
attrs:
|
||||
attrs ? meta.license
|
||||
&& (
|
||||
if isList attrs.meta.license then
|
||||
any (l: elem l list) attrs.meta.license
|
||||
else
|
||||
elem attrs.meta.license list
|
||||
);
|
||||
|
||||
hasAllowlistedLicense = attrs: hasListedLicense allowlist attrs;
|
||||
hasAllowlistedLicense = hasListedLicense allowlist;
|
||||
|
||||
hasBlocklistedLicense = attrs: hasListedLicense blocklist attrs;
|
||||
hasBlocklistedLicense = hasListedLicense blocklist;
|
||||
|
||||
allowBroken = config.allowBroken || builtins.getEnv "NIXPKGS_ALLOW_BROKEN" == "1";
|
||||
allowBroken = config.allowBroken || getEnv "NIXPKGS_ALLOW_BROKEN" == "1";
|
||||
|
||||
allowUnsupportedSystem =
|
||||
config.allowUnsupportedSystem || builtins.getEnv "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" == "1";
|
||||
config.allowUnsupportedSystem || getEnv "NIXPKGS_ALLOW_UNSUPPORTED_SYSTEM" == "1";
|
||||
|
||||
isUnfree =
|
||||
licenses:
|
||||
if isAttrs licenses then
|
||||
!licenses.free or true
|
||||
!(licenses.free or true)
|
||||
# TODO: Returning false in the case of a string is a bug that should be fixed.
|
||||
# In a previous implementation of this function the function body
|
||||
# was `licenses: lib.lists.any (l: !l.free or true) licenses;`
|
||||
@@ -108,9 +114,9 @@ let
|
||||
else if isString licenses then
|
||||
false
|
||||
else
|
||||
any (l: !l.free or true) licenses;
|
||||
any (l: !(l.free or true)) licenses;
|
||||
|
||||
hasUnfreeLicense = attrs: hasLicense attrs && isUnfree attrs.meta.license;
|
||||
hasUnfreeLicense = attrs: attrs ? meta.license && isUnfree attrs.meta.license;
|
||||
|
||||
hasNoMaintainers =
|
||||
# To get usable output, we want to avoid flagging "internal" derivations.
|
||||
@@ -161,19 +167,13 @@ let
|
||||
attrs: hasUnfreeLicense attrs && !allowUnfree && !allowUnfreePredicate attrs;
|
||||
|
||||
allowInsecureDefaultPredicate =
|
||||
x: builtins.elem (getNameWithVersion x) (config.permittedInsecurePackages or [ ]);
|
||||
allowInsecurePredicate = x: (config.allowInsecurePredicate or allowInsecureDefaultPredicate) x;
|
||||
x: elem (getNameWithVersion x) (config.permittedInsecurePackages or [ ]);
|
||||
allowInsecurePredicate = config.allowInsecurePredicate or allowInsecureDefaultPredicate;
|
||||
|
||||
hasAllowedInsecure =
|
||||
attrs:
|
||||
!(isMarkedInsecure attrs)
|
||||
|| allowInsecurePredicate attrs
|
||||
|| builtins.getEnv "NIXPKGS_ALLOW_INSECURE" == "1";
|
||||
allowInsecure = getEnv "NIXPKGS_ALLOW_INSECURE" == "1";
|
||||
|
||||
isNonSource = sourceTypes: any (t: !t.isSource) sourceTypes;
|
||||
|
||||
hasNonSourceProvenance =
|
||||
attrs: (attrs ? meta.sourceProvenance) && isNonSource attrs.meta.sourceProvenance;
|
||||
hasDisallowedInsecure =
|
||||
attrs: isMarkedInsecure attrs && !allowInsecure && !allowInsecurePredicate attrs;
|
||||
|
||||
# Allow granular checks to allow only some non-source-built packages
|
||||
# Example:
|
||||
@@ -188,7 +188,11 @@ let
|
||||
# package has non-source provenance and is not explicitly allowed by the
|
||||
# `allowNonSourcePredicate` function.
|
||||
hasDeniedNonSourceProvenance =
|
||||
attrs: hasNonSourceProvenance attrs && !allowNonSource && !allowNonSourcePredicate attrs;
|
||||
attrs:
|
||||
attrs ? meta.sourceProvenance
|
||||
&& any (t: !t.isSource) attrs.meta.sourceProvenance
|
||||
&& !allowNonSource
|
||||
&& !allowNonSourcePredicate attrs;
|
||||
|
||||
showLicenseOrSourceType =
|
||||
value: toString (map (v: v.shortName or v.fullName or "unknown") (toList value));
|
||||
@@ -197,17 +201,6 @@ let
|
||||
|
||||
pos_str = meta: meta.position or "«unknown-file»";
|
||||
|
||||
remediation = {
|
||||
unfree = remediate_allowlist "Unfree" (remediate_predicate "allowUnfreePredicate");
|
||||
non-source = remediate_allowlist "NonSource" (remediate_predicate "allowNonSourcePredicate");
|
||||
broken = remediate_allowlist "Broken" (x: "");
|
||||
unsupported = remediate_allowlist "UnsupportedSystem" (x: "");
|
||||
blocklisted = x: "";
|
||||
insecure = remediate_insecure;
|
||||
broken-outputs = remediateOutputsToInstall;
|
||||
unknown-meta = x: "";
|
||||
maintainerless = x: "";
|
||||
};
|
||||
remediation_env_var =
|
||||
allow_attr:
|
||||
{
|
||||
@@ -230,7 +223,7 @@ let
|
||||
|
||||
Alternatively you can configure a predicate to allow specific packages:
|
||||
{ nixpkgs.config.${predicateConfigAttr} = pkg: builtins.elem (lib.getName pkg) [
|
||||
"${lib.getName attrs}"
|
||||
"${getName attrs}"
|
||||
];
|
||||
}
|
||||
'';
|
||||
@@ -241,7 +234,7 @@ let
|
||||
then pass `--impure` in order to allow use of environment variables.
|
||||
";
|
||||
|
||||
remediate_allowlist = allow_attr: rebuild_amendment: attrs: ''
|
||||
remediate_allowlist = allow_attr: rebuild_amendment: ''
|
||||
a) To temporarily allow ${remediation_phrase allow_attr}, you can use an environment variable
|
||||
for a single invocation of the nix tools.
|
||||
|
||||
@@ -250,7 +243,7 @@ let
|
||||
b) For `nixos-rebuild` you can set
|
||||
{ nixpkgs.config.allow${allow_attr} = true; }
|
||||
in configuration.nix to override this.
|
||||
${rebuild_amendment attrs}
|
||||
${rebuild_amendment}
|
||||
c) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add
|
||||
{ allow${allow_attr} = true; }
|
||||
to ~/.config/nixpkgs/config.nix.
|
||||
@@ -300,7 +293,7 @@ let
|
||||
let
|
||||
expectedOutputs = attrs.meta.outputsToInstall or [ ];
|
||||
actualOutputs = attrs.outputs or [ "out" ];
|
||||
missingOutputs = builtins.filter (output: !builtins.elem output actualOutputs) expectedOutputs;
|
||||
missingOutputs = filter (output: !elem output actualOutputs) expectedOutputs;
|
||||
in
|
||||
''
|
||||
The package ${getNameWithVersion attrs} has set meta.outputsToInstall to: ${builtins.concatStringsSep ", " expectedOutputs}
|
||||
@@ -312,45 +305,6 @@ let
|
||||
${concatStrings (map (output: " - ${output}\n") missingOutputs)}
|
||||
'';
|
||||
|
||||
handleEvalIssue =
|
||||
{ meta, attrs }:
|
||||
{
|
||||
reason,
|
||||
errormsg ? "",
|
||||
}:
|
||||
let
|
||||
msg =
|
||||
if inHydra then
|
||||
"Failed to evaluate ${getNameWithVersion attrs}: «${reason}»: ${errormsg}"
|
||||
else
|
||||
''
|
||||
Package ‘${getNameWithVersion attrs}’ in ${pos_str meta} ${errormsg}, refusing to evaluate.
|
||||
|
||||
''
|
||||
+ (builtins.getAttr reason remediation) attrs;
|
||||
|
||||
handler = if config ? handleEvalIssue then config.handleEvalIssue reason else throw;
|
||||
in
|
||||
handler msg;
|
||||
|
||||
handleEvalWarning =
|
||||
{ meta, attrs }:
|
||||
{
|
||||
reason,
|
||||
errormsg ? "",
|
||||
}:
|
||||
let
|
||||
remediationMsg = (builtins.getAttr reason remediation) attrs;
|
||||
msg =
|
||||
if inHydra then
|
||||
"Warning while evaluating ${getNameWithVersion attrs}: «${reason}»: ${errormsg}"
|
||||
else
|
||||
"Package ${getNameWithVersion attrs} in ${pos_str meta} ${errormsg}, continuing anyway."
|
||||
+ (optionalString (remediationMsg != "") "\n${remediationMsg}");
|
||||
isEnabled = findFirst (x: x == reason) null showWarnings;
|
||||
in
|
||||
if isEnabled != null then builtins.trace msg true else true;
|
||||
|
||||
metaTypes =
|
||||
let
|
||||
types = import ./meta-types.nix { inherit lib; };
|
||||
@@ -446,11 +400,10 @@ let
|
||||
identifiers = attrs;
|
||||
};
|
||||
|
||||
# Map attrs directly to the verify function for performance
|
||||
metaTypes' = mapAttrs (_: t: t.verify) metaTypes;
|
||||
|
||||
checkMetaAttr =
|
||||
let
|
||||
# Map attrs directly to the verify function for performance
|
||||
metaTypes' = mapAttrs (_: t: t.verify) metaTypes;
|
||||
in
|
||||
k: v:
|
||||
if metaTypes ? ${k} then
|
||||
if metaTypes'.${k} v then
|
||||
@@ -467,81 +420,80 @@ let
|
||||
concatMapStringsSep ", " (x: "'${x}'") (attrNames metaTypes)
|
||||
}]"
|
||||
];
|
||||
checkMeta =
|
||||
meta:
|
||||
optionals config.checkMeta (concatMap (attr: checkMetaAttr attr meta.${attr}) (attrNames meta));
|
||||
|
||||
checkMeta = meta: concatMap (attr: checkMetaAttr attr meta.${attr}) (attrNames meta);
|
||||
|
||||
metaInvalid =
|
||||
if config.checkMeta then
|
||||
meta: !all (attr: metaTypes ? ${attr} && metaTypes'.${attr} meta.${attr}) (attrNames meta)
|
||||
else
|
||||
meta: false;
|
||||
|
||||
checkOutputsToInstall =
|
||||
attrs:
|
||||
let
|
||||
expectedOutputs = attrs.meta.outputsToInstall or [ ];
|
||||
actualOutputs = attrs.outputs or [ "out" ];
|
||||
missingOutputs = builtins.filter (output: !builtins.elem output actualOutputs) expectedOutputs;
|
||||
in
|
||||
if config.checkMeta then builtins.length missingOutputs > 0 else false;
|
||||
if config.checkMeta then
|
||||
attrs:
|
||||
let
|
||||
actualOutputs = attrs.outputs or [ "out" ];
|
||||
in
|
||||
any (output: !elem output actualOutputs) (attrs.meta.outputsToInstall or [ ])
|
||||
else
|
||||
attrs: false;
|
||||
|
||||
# Check if a derivation is valid, that is whether it passes checks for
|
||||
# e.g brokenness or license.
|
||||
#
|
||||
# Return { valid: "yes", "warn" or "no" } and additionally
|
||||
# { reason: String; errormsg: String } if it is not valid, where
|
||||
# { reason: String; errormsg: String, remediation: String } if it is not valid, where
|
||||
# reason is one of "unfree", "blocklisted", "broken", "insecure", ...
|
||||
# !!! reason strings are hardcoded into OfBorg, make sure to keep them in sync
|
||||
# Along with a boolean flag for each reason
|
||||
checkValidity =
|
||||
let
|
||||
validYes = {
|
||||
valid = "yes";
|
||||
handled = true;
|
||||
};
|
||||
in
|
||||
attrs:
|
||||
# Check meta attribute types first, to make sure it is always called even when there are other issues
|
||||
# Note that this is not a full type check and functions below still need to by careful about their inputs!
|
||||
let
|
||||
res = checkMeta (attrs.meta or { });
|
||||
in
|
||||
if res != [ ] then
|
||||
if metaInvalid (attrs.meta or { }) then
|
||||
{
|
||||
valid = "no";
|
||||
reason = "unknown-meta";
|
||||
errormsg = "has an invalid meta attrset:${concatMapStrings (x: "\n - " + x) res}\n";
|
||||
errormsg = "has an invalid meta attrset:${
|
||||
concatMapStrings (x: "\n - " + x) (checkMeta attrs.meta)
|
||||
}\n";
|
||||
remediation = "";
|
||||
}
|
||||
|
||||
# --- Put checks that cannot be ignored here ---
|
||||
else if checkOutputsToInstall attrs then
|
||||
{
|
||||
valid = "no";
|
||||
reason = "broken-outputs";
|
||||
errormsg = "has invalid meta.outputsToInstall";
|
||||
remediation = remediateOutputsToInstall attrs;
|
||||
}
|
||||
|
||||
# --- Put checks that can be ignored here ---
|
||||
else if hasDeniedUnfreeLicense attrs && !(hasAllowlistedLicense attrs) then
|
||||
{
|
||||
valid = "no";
|
||||
reason = "unfree";
|
||||
errormsg = "has an unfree license (‘${showLicense attrs.meta.license}’)";
|
||||
remediation = remediate_allowlist "Unfree" (remediate_predicate "allowUnfreePredicate" attrs);
|
||||
}
|
||||
else if hasBlocklistedLicense attrs then
|
||||
{
|
||||
valid = "no";
|
||||
reason = "blocklisted";
|
||||
errormsg = "has a blocklisted license (‘${showLicense attrs.meta.license}’)";
|
||||
remediation = "";
|
||||
}
|
||||
else if hasDeniedNonSourceProvenance attrs then
|
||||
{
|
||||
valid = "no";
|
||||
reason = "non-source";
|
||||
errormsg = "contains elements not built from source (‘${showSourceType attrs.meta.sourceProvenance}’)";
|
||||
remediation = remediate_allowlist "NonSource" (remediate_predicate "allowNonSourcePredicate" attrs);
|
||||
}
|
||||
else if hasDeniedBroken attrs then
|
||||
{
|
||||
valid = "no";
|
||||
reason = "broken";
|
||||
errormsg = "is marked as broken";
|
||||
remediation = remediate_allowlist "Broken" "";
|
||||
}
|
||||
else if !allowUnsupportedSystem && hasUnsupportedPlatform attrs then
|
||||
else if hasUnsupportedPlatform attrs && !allowUnsupportedSystem then
|
||||
let
|
||||
toPretty' = toPretty {
|
||||
allowPrettyValues = true;
|
||||
@@ -549,7 +501,6 @@ let
|
||||
};
|
||||
in
|
||||
{
|
||||
valid = "no";
|
||||
reason = "unsupported";
|
||||
errormsg = ''
|
||||
is not available on the requested hostPlatform:
|
||||
@@ -557,25 +508,28 @@ let
|
||||
package.meta.platforms = ${toPretty' (attrs.meta.platforms or [ ])}
|
||||
package.meta.badPlatforms = ${toPretty' (attrs.meta.badPlatforms or [ ])}
|
||||
'';
|
||||
remediation = remediate_allowlist "UnsupportedSystem" "";
|
||||
}
|
||||
else if !(hasAllowedInsecure attrs) then
|
||||
else if hasDisallowedInsecure attrs then
|
||||
{
|
||||
valid = "no";
|
||||
reason = "insecure";
|
||||
errormsg = "is marked as insecure";
|
||||
remediation = remediate_insecure attrs;
|
||||
}
|
||||
else
|
||||
null;
|
||||
|
||||
# --- warnings ---
|
||||
# Please also update the type in /pkgs/top-level/config.nix alongside this.
|
||||
else if hasNoMaintainers attrs then
|
||||
# Please also update the type in /pkgs/top-level/config.nix alongside this.
|
||||
checkWarnings =
|
||||
attrs:
|
||||
if hasNoMaintainers attrs then
|
||||
{
|
||||
valid = "warn";
|
||||
reason = "maintainerless";
|
||||
errormsg = "has no maintainers or teams";
|
||||
remediation = "";
|
||||
}
|
||||
# -----
|
||||
else
|
||||
validYes;
|
||||
null;
|
||||
|
||||
# Helper functions and declarations to handle identifiers, extracted to reduce allocations
|
||||
hasAllCPEParts =
|
||||
@@ -730,34 +684,57 @@ let
|
||||
|
||||
available =
|
||||
validity.valid != "no"
|
||||
&& (
|
||||
if config.checkMetaRecursively or false then all (d: d.meta.available or true) references else true
|
||||
);
|
||||
&& ((config.checkMetaRecursively or false) -> all (d: d.meta.available or true) references);
|
||||
};
|
||||
|
||||
validYes = {
|
||||
valid = "yes";
|
||||
handled = true;
|
||||
};
|
||||
|
||||
assertValidity =
|
||||
{ meta, attrs }:
|
||||
let
|
||||
validity = checkValidity attrs;
|
||||
inherit (validity) valid;
|
||||
invalid = checkValidity attrs;
|
||||
warning = checkWarnings attrs;
|
||||
in
|
||||
if validity ? handled then
|
||||
validity
|
||||
if isNull invalid then
|
||||
if isNull warning then
|
||||
validYes
|
||||
else
|
||||
let
|
||||
msg =
|
||||
if inHydra then
|
||||
"Warning while evaluating ${getNameWithVersion attrs}: «${warning.reason}»: ${warning.errormsg}"
|
||||
else
|
||||
"Package ${getNameWithVersion attrs} in ${pos_str meta} ${warning.errormsg}, continuing anyway."
|
||||
+ (optionalString (warning.remediation != "") "\n${warning.remediation}");
|
||||
|
||||
handled = if elem warning.reason showWarnings then trace msg true else true;
|
||||
in
|
||||
warning
|
||||
// {
|
||||
valid = "warn";
|
||||
handled = handled;
|
||||
}
|
||||
else
|
||||
validity
|
||||
// {
|
||||
# Throw an error if trying to evaluate a non-valid derivation
|
||||
# or, alternatively, just output a warning message.
|
||||
handled = (
|
||||
if valid == "yes" then
|
||||
true
|
||||
else if valid == "no" then
|
||||
(handleEvalIssue { inherit meta attrs; } { inherit (validity) reason errormsg; })
|
||||
else if valid == "warn" then
|
||||
(handleEvalWarning { inherit meta attrs; } { inherit (validity) reason errormsg; })
|
||||
let
|
||||
msg =
|
||||
if inHydra then
|
||||
"Failed to evaluate ${getNameWithVersion attrs}: «${invalid.reason}»: ${invalid.errormsg}"
|
||||
else
|
||||
throw "Unknown validity: '${valid}'"
|
||||
);
|
||||
''
|
||||
Package ‘${getNameWithVersion attrs}’ in ${pos_str meta} ${invalid.errormsg}, refusing to evaluate.
|
||||
|
||||
''
|
||||
+ invalid.remediation;
|
||||
|
||||
handled = if config ? handleEvalIssue then config.handleEvalIssue invalid.reason msg else throw msg;
|
||||
in
|
||||
invalid
|
||||
// {
|
||||
valid = "no";
|
||||
handled = handled;
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
{
|
||||
buildGoModule,
|
||||
fetchFromGitHub,
|
||||
lib,
|
||||
wirelesstools,
|
||||
makeWrapper,
|
||||
wireguard-tools,
|
||||
openvpn,
|
||||
obfs4,
|
||||
iproute2,
|
||||
dnscrypt-proxy,
|
||||
iptables,
|
||||
gawk,
|
||||
util-linux,
|
||||
nix-update-script,
|
||||
}:
|
||||
|
||||
builtins.mapAttrs
|
||||
(
|
||||
pname: attrs:
|
||||
buildGoModule (
|
||||
attrs
|
||||
// rec {
|
||||
inherit pname;
|
||||
version = "3.14.34";
|
||||
|
||||
buildInputs = [
|
||||
wirelesstools
|
||||
];
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ivpn";
|
||||
repo = "desktop-app";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-Q96G5mJahJnXxpqJ8IF0oFie7l0Nd1p8drHH9NSpwEw=";
|
||||
};
|
||||
|
||||
proxyVendor = true; # .c file
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
"-w"
|
||||
"-X github.com/ivpn/desktop-app/daemon/version._version=${version}"
|
||||
"-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01"
|
||||
];
|
||||
|
||||
postInstall = ''
|
||||
mv $out/bin/{${attrs.modRoot},${pname}}
|
||||
'';
|
||||
|
||||
passthru.updateScript = nix-update-script { };
|
||||
|
||||
meta = {
|
||||
description = "Official IVPN Desktop app";
|
||||
homepage = "https://www.ivpn.net/apps";
|
||||
changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}";
|
||||
license = lib.licenses.gpl3Only;
|
||||
maintainers = with lib.maintainers; [
|
||||
urandom
|
||||
blenderfreaky
|
||||
];
|
||||
mainProgram = "ivpn";
|
||||
};
|
||||
}
|
||||
)
|
||||
)
|
||||
{
|
||||
ivpn = {
|
||||
modRoot = "cli";
|
||||
vendorHash = "sha256-xZ1tMiv06fE2wtpDagKjHiVTPYWpj32hM6n/v9ZcgrE=";
|
||||
};
|
||||
ivpn-service = {
|
||||
modRoot = "daemon";
|
||||
vendorHash = "sha256-DVKSCcEeE7vI8aOYuEwk22n0wtF7MMDOyAgYoXYadwI=";
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
patches = [ ./permissions.patch ];
|
||||
postPatch = ''
|
||||
substituteInPlace daemon/service/platform/platform_linux.go \
|
||||
--replace 'openVpnBinaryPath = "/usr/sbin/openvpn"' \
|
||||
'openVpnBinaryPath = "${openvpn}/bin/openvpn"' \
|
||||
--replace 'routeCommand = "/sbin/ip route"' \
|
||||
'routeCommand = "${iproute2}/bin/ip route"'
|
||||
|
||||
substituteInPlace daemon/netinfo/netinfo_linux.go \
|
||||
--replace 'retErr := shell.ExecAndProcessOutput(log, outParse, "", "/sbin/ip", "route")' \
|
||||
'retErr := shell.ExecAndProcessOutput(log, outParse, "", "${iproute2}/bin/ip", "route")'
|
||||
|
||||
substituteInPlace daemon/service/platform/platform_linux_release.go \
|
||||
--replace 'installDir := "/opt/ivpn"' "installDir := \"$out\"" \
|
||||
--replace 'obfsproxyStartScript = path.Join(installDir, "obfsproxy/obfs4proxy")' \
|
||||
'obfsproxyStartScript = "${lib.getExe obfs4}"' \
|
||||
--replace 'wgBinaryPath = path.Join(installDir, "wireguard-tools/wg-quick")' \
|
||||
'wgBinaryPath = "${wireguard-tools}/bin/wg-quick"' \
|
||||
--replace 'wgToolBinaryPath = path.Join(installDir, "wireguard-tools/wg")' \
|
||||
'wgToolBinaryPath = "${wireguard-tools}/bin/wg"' \
|
||||
--replace 'dnscryptproxyBinPath = path.Join(installDir, "dnscrypt-proxy/dnscrypt-proxy")' \
|
||||
'dnscryptproxyBinPath = "${dnscrypt-proxy}/bin/dnscrypt-proxy"'
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
mkdir -p $out/etc
|
||||
cp -r $src/daemon/References/Linux/etc/* $out/etc/
|
||||
cp -r $src/daemon/References/common/etc/* $out/etc/
|
||||
|
||||
patchShebangs --build $out/etc/firewall.sh $out/etc/splittun.sh $out/etc/client.down $out/etc/client.up
|
||||
|
||||
wrapProgram "$out/bin/ivpn-service" \
|
||||
--suffix PATH : ${
|
||||
lib.makeBinPath [
|
||||
iptables
|
||||
gawk
|
||||
util-linux
|
||||
]
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -1061,11 +1061,6 @@ with pkgs;
|
||||
iroh-dns-server
|
||||
;
|
||||
|
||||
inherit (callPackages ../tools/networking/ivpn/default.nix { })
|
||||
ivpn
|
||||
ivpn-service
|
||||
;
|
||||
|
||||
kanata-with-cmd = kanata.override { withCmd = true; };
|
||||
|
||||
linux-router-without-wifi = linux-router.override { useWifiDependencies = false; };
|
||||
|
||||
@@ -570,6 +570,8 @@ let
|
||||
|
||||
extlib-1-7-7 = callPackage ../development/ocaml-modules/extlib/1.7.7.nix { };
|
||||
|
||||
extunix = callPackage ../development/ocaml-modules/extunix/default.nix { };
|
||||
|
||||
ezjsonm = callPackage ../development/ocaml-modules/ezjsonm { };
|
||||
|
||||
ezjsonm-encoding = callPackage ../development/ocaml-modules/ezjsonm-encoding { };
|
||||
@@ -1713,6 +1715,10 @@ let
|
||||
|
||||
ppx_deriving_rpc = callPackage ../development/ocaml-modules/ppx_deriving_rpc { };
|
||||
|
||||
ppx_deriving_variant_string =
|
||||
callPackage ../development/ocaml-modules/ppx_deriving_variant_string
|
||||
{ };
|
||||
|
||||
ppx_deriving_yaml = callPackage ../development/ocaml-modules/ppx_deriving_yaml {
|
||||
mdx = mdx.override { inherit logs; };
|
||||
};
|
||||
|
||||
@@ -582,6 +582,8 @@ self: super: with self; {
|
||||
|
||||
airtouch5py = callPackage ../development/python-modules/airtouch5py { };
|
||||
|
||||
aistudio-sdk = callPackage ../development/python-modules/aistudio-sdk { };
|
||||
|
||||
ajpy = callPackage ../development/python-modules/ajpy { };
|
||||
|
||||
ajsonrpc = callPackage ../development/python-modules/ajsonrpc { };
|
||||
@@ -1824,6 +1826,8 @@ self: super: with self; {
|
||||
|
||||
bcdoc = callPackage ../development/python-modules/bcdoc { };
|
||||
|
||||
bce-python-sdk = callPackage ../development/python-modules/bce-python-sdk { };
|
||||
|
||||
bcf = callPackage ../development/python-modules/bcf { };
|
||||
|
||||
bcg = callPackage ../development/python-modules/bcg { };
|
||||
@@ -3160,6 +3164,8 @@ self: super: with self; {
|
||||
|
||||
countryguess = callPackage ../development/python-modules/countryguess { };
|
||||
|
||||
countryinfo = callPackage ../development/python-modules/countryinfo { };
|
||||
|
||||
courlan = callPackage ../development/python-modules/courlan { };
|
||||
|
||||
coverage = callPackage ../development/python-modules/coverage { };
|
||||
@@ -9837,6 +9843,8 @@ self: super: with self; {
|
||||
|
||||
modeled = callPackage ../development/python-modules/modeled { };
|
||||
|
||||
modelscope = callPackage ../development/python-modules/modelscope { };
|
||||
|
||||
modern-colorthief = callPackage ../development/python-modules/modern-colorthief { };
|
||||
|
||||
moderngl = callPackage ../development/python-modules/moderngl { };
|
||||
@@ -20679,6 +20687,8 @@ self: super: with self; {
|
||||
|
||||
xcffib = callPackage ../development/python-modules/xcffib { };
|
||||
|
||||
xclim = callPackage ../development/python-modules/xclim { };
|
||||
|
||||
xdg = callPackage ../development/python-modules/xdg { };
|
||||
|
||||
xdg-base-dirs = callPackage ../development/python-modules/xdg-base-dirs { };
|
||||
|
||||
Reference in New Issue
Block a user