Merge remote-tracking branch 'origin/master' into staging-next

This commit is contained in:
K900 2024-10-01 08:44:24 +03:00
commit 3f7da3dfa9
152 changed files with 3783 additions and 7259 deletions

View File

@ -1,6 +1,7 @@
## Description of changes
<!--
^ Please summarise the changes you have done and explain why they are necessary here ^
For package updates please link to a changelog or describe changes, this helps your fellow maintainers discover breaking updates.
For new packages please briefly describe the package or provide a link to its homepage.
-->

View File

@ -30,6 +30,7 @@ postgresql-test-hook.section.md
premake.section.md
python.section.md
scons.section.md
tauri.section.md
tetex-tex-live.section.md
unzip.section.md
validatePkgConfig.section.md

108
doc/hooks/tauri.section.md Normal file
View File

@ -0,0 +1,108 @@
# cargo-tauri.hook {#tauri-hook}
[Tauri](https://tauri.app/) is a framework for building smaller, faster, and
more secure desktop applications with a web frontend.
In Nixpkgs, `cargo-tauri.hook` overrides the default build and install phases.
## Example code snippet {#tauri-hook-example-code-snippet}
```nix
{
lib,
stdenv,
rustPlatform,
fetchNpmDeps,
cargo-tauri,
darwin,
glib-networking,
libsoup,
nodejs,
npmHooks,
openssl,
pkg-config,
webkitgtk,
wrapGAppsHook3,
}:
rustPlatform.buildRustPackage rec {
# . . .
cargoHash = "...";
# Assuming our app's frontend uses `npm` as a package manager
npmDeps = fetchNpmDeps {
name = "${pname}-npm-deps-${version}";
inherit src;
hash = "...";
};
nativeBuildInputs = [
# Pull in our main hook
cargo-tauri.hook
# Setup npm
nodejs
npmHooks.npmConfigHook
# Make sure we can find our libraries
pkg-config
wrapGAppsHook3
];
buildInputs =
[ openssl ]
++ lib.optionals stdenv.isLinux [
glib-networking # Most Tauri apps need networking
libsoup
webkitgtk
]
++ lib.optionals stdenv.isDarwin (
with darwin.apple_sdk.frameworks;
[
AppKit
CoreServices
Security
WebKit
]
);
# Set our Tauri source directory
cargoRoot = "src-tauri";
# And make sure we build there too
buildAndTestSubdir = cargoRoot;
# . . .
}
```
## Variables controlling cargo-tauri {#tauri-hook-variables-controlling}
### Tauri Exclusive Variables {#tauri-hook-exclusive-variables}
#### `tauriBuildFlags` {#tauri-build-flags}
Controls the flags passed to `cargo tauri build`.
#### `tauriBundleType` {#tauri-bundle-type}
The [bundle type](https://tauri.app/v1/guides/building/) to build.
#### `dontTauriBuild` {#dont-tauri-build}
Disables using `tauriBuildHook`.
#### `dontTauriInstall` {#dont-tauri-install}
Disables using `tauriInstallPostBuildHook` and `tauriInstallHook`.
### Honored Variables {#tauri-hook-honored-variables}
Along with those found in [](#compiling-rust-applications-with-cargo), the
following variables used by `cargoBuildHook` and `cargoInstallHook` are honored
by the cargo-tauri setup hook.
- `buildAndTestSubdir`
- `cargoBuildType`
- `cargoBuildNoDefaultFeatures`
- `cargoBuildFeatures`

View File

@ -354,12 +354,7 @@ let
else if m._type == "if" || m._type == "override" then
loadModule args fallbackFile fallbackKey { config = m; }
else
throw (
"Could not load a value as a module, because it is of type ${lib.strings.escapeNixString m._type}"
+ optionalString (fallbackFile != unknownModule) ", in file ${toString fallbackFile}."
+ optionalString (m._type == "configuration") " If you do intend to import this configuration, please only import the modules that make up the configuration. You may have to create a `let` binding, file or attribute to give yourself access to the relevant modules.\nWhile loading a configuration into the module system is a very sensible idea, it can not be done cleanly in practice."
# Extended explanation: That's because a finalized configuration is more than just a set of modules. For instance, it has its own `specialArgs` that, by the nature of `specialArgs` can't be loaded through `imports` or the the `modules` argument. So instead, we have to ask you to extract the relevant modules and use those instead. This way, we keep the module system comparatively simple, and hopefully avoid a bad surprise down the line.
)
throw (messages.not_a_module { inherit fallbackFile; value = m; _type = m._type; expectedClass = class; })
else if isList m then
let defs = [{ file = fallbackFile; value = m; }]; in
throw "Module imports can't be nested lists. Perhaps you meant to remove one level of lists? Definitions: ${showDefs defs}"
@ -1450,6 +1445,110 @@ let
collectModules = collectModules null;
};
/**
Error messages produced by the module system.
We factor these out to improve the flow when reading the code.
Functions in `messages` that produce error messages are spelled in
lower_snake_case. This goes against the convention in order to make the
error message implementation more readable, and to visually distinguish
them from other functions in the module system.
*/
messages = let
inherit (lib.strings) concatMapStringsSep escapeNixString trim;
/** "" or ", in file FOO" */
into_fallback_file_maybe = file:
optionalString
(file != null && file != unknownModule)
", while trying to load a module into ${toString file}";
/** Format text with one line break between each list item. */
lines = concatMapStringsSep "\n" trim;
/** Format text with two line break between each list item. */
paragraphs = concatMapStringsSep "\n\n" trim;
/**
```
optionalMatch
{ foo = "Foo result";
bar = "Bar result";
} "foo"
== [ "Foo result" ]
optionalMatch { foo = "Foo"; } "baz" == [ ]
optionalMatch { foo = "Foo"; } true == [ ]
```
*/
optionalMatch = cases: value:
if isString value && cases?${value}
then [ cases.${value} ]
else [];
# esc = builtins.fromJSON "\"\\u001b\"";
esc = builtins.fromJSON "\"\\u001b\"";
# Bold purple for warnings
warn = s: "${esc}[1;35m${s}${esc}[0m";
# Bold green for suggestions
good = s: "${esc}[1;32m${s}${esc}[0m";
# Bold, default color for code
code = s: "${esc}[1m${s}${esc}[0m";
in {
/** When load a value with a (wrong) _type as a module */
not_a_module = { fallbackFile, value, _type, expectedClass ? null }:
paragraphs (
[ ''
Expected a module, but found a value of type ${warn (escapeNixString _type)}${into_fallback_file_maybe fallbackFile}.
A module is typically loaded by adding it the ${code "imports = [ ... ];"} attribute of an existing module, or in the ${code "modules = [ ... ];"} argument of various functions.
Please make sure that each of the list items is a module, and not a different kind of value.
''
]
++ (optionalMatch
{
"configuration" = trim ''
If you really mean to import this configuration, instead please only import the modules that make up the configuration.
You may have to create a `let` binding, file or attribute to give yourself access to the relevant modules.
While loading a configuration into the module system is a very sensible idea, it can not be done cleanly in practice.
'';
# ^^ Extended explanation: That's because a finalized configuration is more than just a set of modules. For instance, it has its own `specialArgs` that, by the nature of `specialArgs` can't be loaded through `imports` or the the `modules` argument. So instead, we have to ask you to extract the relevant modules and use those instead. This way, we keep the module system comparatively simple, and hopefully avoid a bad surprise down the line.
"flake" = lines
([(trim ''
Perhaps you forgot to select an attribute name?
Instead of, for example,
${warn "inputs.someflake"}
you need to write something like
${warn "inputs.someflake"}${
if expectedClass == null
then good ".modules.someApp.default"
else good ".modules.${expectedClass}.default"
}
'')]
++ optionalMatch
{ # We'll no more than 5 custom suggestions here.
# Please switch to `.modules.${class}` in your Module System application.
"nixos" = trim ''
or
${warn "inputs.someflake"}${good ".nixosModules.default"}
'';
"darwin" = trim ''
or
${warn "inputs.someflake"}${good ".darwinModules.default"}
'';
}
expectedClass
);
}
_type
)
);
};
in
private //
{

View File

@ -384,8 +384,17 @@ let
}.${cpu.name} or cpu.name;
vendor_ = final.rust.platform.vendor;
# TODO: deprecate args.rustc in favour of args.rust after 23.05 is EOL.
in args.rust.rustcTarget or args.rustc.config
or "${cpu_}-${vendor_}-${kernel.name}${optionalString (abi.name != "unknown") "-${abi.name}"}";
in
args.rust.rustcTarget or
args.rustc.config or (
# Rust uses `wasm32-wasip?` rather than `wasm32-unknown-wasi`.
# We cannot know which subversion does the user want, and
# currently use WASI 0.1 as default for compatibility. Custom
# users can set `rust.rustcTarget` to override it.
if final.isWasi
then "${cpu_}-wasip1"
else "${cpu_}-${vendor_}-${kernel.name}${optionalString (abi.name != "unknown") "-${abi.name}"}"
);
# The name of the rust target if it is standard, or the json file
# containing the custom target spec.

View File

@ -256,7 +256,7 @@ rec {
iphone64 = {
config = "aarch64-apple-ios";
# config = "aarch64-apple-darwin14";
sdkVer = "14.3";
darwinSdkVersion = "14.3";
xcodeVer = "12.3";
xcodePlatform = "iPhoneOS";
useiOSPrebuilt = true;
@ -265,7 +265,7 @@ rec {
iphone32 = {
config = "armv7a-apple-ios";
# config = "arm-apple-darwin10";
sdkVer = "14.3";
darwinSdkVersion = "14.3";
xcodeVer = "12.3";
xcodePlatform = "iPhoneOS";
useiOSPrebuilt = true;
@ -274,7 +274,7 @@ rec {
iphone64-simulator = {
config = "x86_64-apple-ios";
# config = "x86_64-apple-darwin14";
sdkVer = "14.3";
darwinSdkVersion = "14.3";
xcodeVer = "12.3";
xcodePlatform = "iPhoneSimulator";
darwinPlatform = "ios-simulator";
@ -284,7 +284,7 @@ rec {
iphone32-simulator = {
config = "i686-apple-ios";
# config = "i386-apple-darwin11";
sdkVer = "14.3";
darwinSdkVersion = "14.3";
xcodeVer = "12.3";
xcodePlatform = "iPhoneSimulator";
darwinPlatform = "ios-simulator";

View File

@ -534,9 +534,10 @@ checkConfigError 'The module .*/module-class-is-darwin.nix was imported into nix
checkConfigError 'A submoduleWith option is declared multiple times with conflicting class values "darwin" and "nixos".' config.sub.mergeFail.config ./class-check.nix
# _type check
checkConfigError 'Could not load a value as a module, because it is of type "flake", in file .*/module-imports-_type-check.nix' config.ok.config ./module-imports-_type-check.nix
checkConfigError 'Expected a module, but found a value of type .*"flake".*, while trying to load a module into .*/module-imports-_type-check.nix' config.ok.config ./module-imports-_type-check.nix
checkConfigOutput '^true$' "$@" config.enable ./declare-enable.nix ./define-enable-with-top-level-mkIf.nix
checkConfigError 'Could not load a value as a module, because it is of type "configuration", in file .*/import-configuration.nix.*please only import the modules that make up the configuration.*' config ./import-configuration.nix
checkConfigError 'Expected a module, but found a value of type .*"configuration".*, while trying to load a module into .*/import-configuration.nix.' config ./import-configuration.nix
checkConfigError 'please only import the modules that make up the configuration' config ./import-configuration.nix
# doRename works when `warnings` does not exist.
checkConfigOutput '^1234$' config.c.d.e ./doRename-basic.nix

View File

@ -8479,6 +8479,11 @@
githubId = 15121114;
name = "Tom Herbers";
};
herschenglime = {
github = "Herschenglime";
githubId = 69494718;
name = "Herschenglime";
};
hexa = {
email = "hexa@darmstadt.ccc.de";
matrix = "@hexa:lossy.network";
@ -11380,6 +11385,12 @@
githubId = 787421;
name = "Kevin Quick";
};
kraanzu = {
name = "Murli Tawari";
email = "kraanzu@gmail.com";
github = "kraanzu";
githubId = 97718086;
};
kradalby = {
name = "Kristoffer Dalby";
email = "kristoffer@dalby.cc";
@ -15230,6 +15241,11 @@
github = "noaccOS";
githubId = 24324352;
};
noahgitsham = {
name = "Noah Gitsham";
github = "noahgitsham";
githubId = 73707948;
};
nobbz = {
name = "Norbert Melzer";
email = "timmelzer+nixpkgs@gmail.com";

View File

@ -84,6 +84,8 @@
alos create normal users and change passwords. Available as
[services.userborn](#opt-services.userborn.enable)
- [Hatsu](https://github.com/importantimport/hatsu), a self-hosted bridge that interacts with Fediverse on behalf of your static site. Available as [services.hatsu](options.html#opt-services.hatsu).
- [Flood](https://flood.js.org/), a beautiful WebUI for various torrent clients. Available as [services.flood](options.html#opt-services.flood).
- [Firefly-iii Data Importer](https://github.com/firefly-iii/data-importer), a data importer for Firefly-III. Available as [services.firefly-iii-data-importer](options.html#opt-services.firefly-iii-data-importer)
@ -302,6 +304,12 @@
- `tests.overriding` has its `passthru.tests` restructured as an attribute set instead of a list, making individual tests accessible by their names.
- Package `skk-dict` was split into multiple packages under `skkDictionaries`.
If in doubt, try `skkDictionaries.l`. As part of this change, the dictionaries
were moved from `$out/share` to `$out/share/skk`. Also, the dictionaries won't
be converted to UTF-8 unless the `useUtf8` package option is enabled. UTF-8
converted dictionaries will have the .utf8 suffix appended to its filename.
- `vaultwarden` lost the capability to bind to privileged ports. If you rely on
this behavior, override the systemd unit to allow `CAP_NET_BIND_SERVICE` in
your local configuration.
@ -545,6 +553,16 @@
- The kubelet configuration file can now be amended with arbitrary additional content using the `services.kubernetes.kubelet.extraConfig` option.
- The `services.seafile` module was updated to major version 11.
- As part of this upgrade, the database backend will be migrated to MySQL.
This process should be automatic, but in case of a botched migration,
old sqlite files are not removed and can be used to manually migrate the database.
- Additionally, the updated CSRF protection may prevent some users from logging in.
Specific origin addresses can be whitelisted using the `services.seafile.seahubExtraConf` option
(e.g. `services.seafile.seahubExtraConf = ''CSRF_TRUSTED_ORIGINS = ["https://example.com"]'';`).
Note that first solution of the [official FAQ answer](https://cloud.seatable.io/dtable/external-links/7b976c85f504491cbe8e/?tid=0000&vid=0000&row-id=BQhH-2HSQs68Nq2EW91DBA)
is not allowed by the `services.nginx` module's config-checker.
- To facilitate dependency injection, the `imgui` package now builds a static archive using vcpkg' CMake rules.
The derivation now installs "impl" headers selectively instead of by a wildcard.
Use `imgui.src` if you just want to access the unpacked sources.
@ -560,6 +578,8 @@
- `security.pam.u2f` now follows RFC42.
All module options are now settable through the freeform `.settings`.
- Mikutter was removed because the package was broken and had no maintainers.
- Gollum was upgraded to major version 6. Read their [migration notes](https://github.com/gollum/gollum/wiki/6.0-Release-Notes).
- The hooks `yarnConfigHook` and `yarnBuildHook` were added. These should replace `yarn2nix.mkYarnPackage` and other `yarn2nix` related tools. The motivation to get rid of `yarn2nix` tools is the fact that they are too complex and hard to maintain, and they rely upon too much Nix evaluation which is problematic if import-from-derivation is not allowed (see more details at [#296856](https://github.com/NixOS/nixpkgs/issues/296856). The transition from `mkYarnPackage` to `yarn{Config,Build}Hook` is tracked at [#324246](https://github.com/NixOS/nixpkgs/issues/324246).
@ -583,6 +603,9 @@
- The arguments from [](#opt-services.postgresql.initdbArgs) now get shell-escaped.
- `cargo-tauri.hook` was introduced to help users build [Tauri](https://tauri.app/) projects. It is meant to be used alongside
`rustPlatform.buildRustPackage` and Node hooks such as `npmConfigHook`, `pnpm.configHook`, and the new `yarnConfig`
- Support for *runner registration tokens* has been [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872)
in `gitlab-runner` 15.6 and is expected to be removed in `gitlab-runner` 18.0. Configuration of existing runners
should be changed to using *runner authentication tokens* by configuring

View File

@ -1427,6 +1427,7 @@
./services/web-apps/goatcounter.nix
./services/web-apps/guacamole-client.nix
./services/web-apps/guacamole-server.nix
./services/web-apps/hatsu.nix
./services/web-apps/healthchecks.nix
./services/web-apps/hedgedoc.nix
./services/web-apps/hledger-web.nix

View File

@ -19,6 +19,6 @@ in
# To make a cardboard session available for certain DMs like SDDM
services.displayManager.sessionPackages = [ cfg.package ];
}
(import ./wayland-session.nix { inherit lib; })
(import ./wayland-session.nix { inherit lib pkgs; })
]);
}

View File

@ -70,7 +70,7 @@ in
}
(import ./wayland-session.nix {
inherit lib;
inherit lib pkgs;
enableXWayland = cfg.xwayland.enable;
enableWlrPortal = lib.mkDefault false; # Hyprland has its own portal, wlr is not needed
})

View File

@ -20,6 +20,6 @@ in
# To make a labwc session available for certain DMs like SDDM
services.displayManager.sessionPackages = [ cfg.package ];
}
(import ./wayland-session.nix { inherit lib; })
(import ./wayland-session.nix { inherit lib pkgs; })
]);
}

View File

@ -30,11 +30,12 @@ in
}
(import ./wayland-session.nix {
inherit lib;
inherit lib pkgs;
# Hardcoded path in Mir, not really possible to disable
enableXWayland = true;
# No portal support yet: https://github.com/mattkae/miracle-wm/issues/164
enableWlrPortal = false;
enableGtkPortal = false;
})
]
);

View File

@ -56,7 +56,7 @@ in
}
(import ./wayland-session.nix {
inherit lib;
inherit lib pkgs;
enableXWayland = cfg.xwayland.enable;
})
]);

View File

@ -148,7 +148,7 @@ in
}
(import ./wayland-session.nix {
inherit lib;
inherit lib pkgs;
enableXWayland = cfg.xwayland.enable;
})
]);

View File

@ -63,7 +63,7 @@ in
};
}
(import ./wayland-session.nix {
inherit lib;
inherit lib pkgs;
enableXWayland = cfg.xwayland.enable;
})
]

View File

@ -1,7 +1,9 @@
{
lib,
pkgs,
enableXWayland ? true,
enableWlrPortal ? true,
enableGtkPortal ? true,
}:
{
@ -18,6 +20,9 @@
services.graphical-desktop.enable = true;
xdg.portal.wlr.enable = enableWlrPortal;
xdg.portal.extraPortals = lib.mkIf enableGtkPortal [
pkgs.xdg-desktop-portal-gtk
];
# Window manager only sessions (unlike DEs) don't handle XDG
# autostart files, so force them to run the service

View File

@ -93,6 +93,7 @@ in
DATA_DIR = ".";
HF_HOME = ".";
SENTENCE_TRANSFORMERS_HOME = ".";
WEBUI_URL = "http://localhost:${toString cfg.port}";
} // cfg.environment;
serviceConfig = {

View File

@ -1,19 +1,42 @@
{ config, lib, pkgs, ... }:
with lib;
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.seafile;
settingsFormat = pkgs.formats.ini { };
ccnetConf = settingsFormat.generate "ccnet.conf" cfg.ccnetSettings;
ccnetConf = settingsFormat.generate "ccnet.conf" (
lib.attrsets.recursiveUpdate {
Database = {
ENGINE = "mysql";
UNIX_SOCKET = "/var/run/mysqld/mysqld.sock";
DB = "ccnet_db";
CONNECTION_CHARSET = "utf8";
};
} cfg.ccnetSettings
);
seafileConf = settingsFormat.generate "seafile.conf" cfg.seafileSettings;
seafileConf = settingsFormat.generate "seafile.conf" (
lib.attrsets.recursiveUpdate {
database = {
type = "mysql";
unix_socket = "/var/run/mysqld/mysqld.sock";
db_name = "seafile_db";
connection_charset = "utf8";
};
} cfg.seafileSettings
);
seahubSettings = pkgs.writeText "seahub_settings.py" ''
FILE_SERVER_ROOT = '${cfg.ccnetSettings.General.SERVICE_URL}/seafhttp'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': '${seahubDir}/seahub.db',
'ENGINE': 'django.db.backends.mysql',
'NAME' : 'seahub_db',
'HOST' : '/var/run/mysqld/mysqld.sock',
}
}
MEDIA_ROOT = '${seahubDir}/media/'
@ -21,23 +44,25 @@ let
SERVICE_URL = '${cfg.ccnetSettings.General.SERVICE_URL}'
CSRF_TRUSTED_ORIGINS = ["${cfg.ccnetSettings.General.SERVICE_URL}"]
with open('${seafRoot}/.seahubSecret') as f:
SECRET_KEY = f.readline().rstrip()
${cfg.seahubExtraConf}
'';
seafRoot = "/var/lib/seafile"; # hardcode it due to dynamicuser
seafRoot = "/var/lib/seafile";
ccnetDir = "${seafRoot}/ccnet";
dataDir = "${seafRoot}/data";
seahubDir = "${seafRoot}/seahub";
defaultUser = "seafile";
in
{
###### Interface
options.services.seafile = {
options.services.seafile = with lib; {
enable = mkEnableOption "Seafile server";
ccnetSettings = mkOption {
@ -47,7 +72,7 @@ in
options = {
General = {
SERVICE_URL = mkOption {
type = types.str;
type = types.singleLineStr;
example = "https://www.example.com";
description = ''
Seahub public URL.
@ -78,11 +103,17 @@ in
'';
};
host = mkOption {
type = types.str;
default = "127.0.0.1";
example = "0.0.0.0";
type = types.singleLineStr;
default = "ipv4:127.0.0.1";
example = "unix:/run/seafile/server.sock";
description = ''
The binding address used by seafile fileserver.
The bind address used by seafile fileserver.
The addr can be defined as one of the following:
- ipv6:<ipv6addr> for binding to an IPv6 address.
- unix:<named pipe> for binding to a unix named socket
- ipv4:<ipv4addr> for binding to an ipv4 address
Otherwise the addr is assumed to be ipv4.
'';
};
};
@ -96,6 +127,19 @@ in
'';
};
seahubAddress = mkOption {
type = types.singleLineStr;
default = "unix:/run/seahub/gunicorn.sock";
example = "[::1]:8083";
description = ''
Which address to bind the seahub server to, of the form:
- HOST
- HOST:PORT
- unix:PATH.
IPv6 HOSTs must be wrapped in brackets.
'';
};
workers = mkOption {
type = types.int;
default = 4;
@ -107,7 +151,7 @@ in
adminEmail = mkOption {
example = "john@example.com";
type = types.str;
type = types.singleLineStr;
description = ''
Seafile Seahub Admin Account Email.
'';
@ -115,17 +159,79 @@ in
initialAdminPassword = mkOption {
example = "someStrongPass";
type = types.str;
type = types.singleLineStr;
description = ''
Seafile Seahub Admin Account initial password.
Should be change via Seahub web front-end.
Should be changed via Seahub web front-end.
'';
};
seafilePackage = mkPackageOption pkgs "seafile-server" { };
seahubPackage = mkPackageOption pkgs "seahub" { };
user = mkOption {
type = types.singleLineStr;
default = defaultUser;
description = "User account under which seafile runs.";
};
group = mkOption {
type = types.singleLineStr;
default = defaultUser;
description = "Group under which seafile runs.";
};
dataDir = mkOption {
type = types.path;
default = "${seafRoot}/data";
description = "Path in which to store user data";
};
gc = {
enable = mkEnableOption "automatic garbage collection on stored data blocks";
dates = mkOption {
type = types.listOf types.singleLineStr;
default = [ "Sun 03:00:00" ];
description = ''
When to run garbage collection on stored data blocks.
The time format is described in {manpage}`systemd.time(7)`.
'';
};
randomizedDelaySec = mkOption {
default = "0";
type = types.singleLineStr;
example = "45min";
description = ''
Add a randomized delay before each garbage collection.
The delay will be chosen between zero and this value.
This value must be a time span in the format specified by
{manpage}`systemd.time(7)`
'';
};
persistent = mkOption {
default = true;
type = types.bool;
example = false;
description = ''
Takes a boolean argument. If true, the time when the service
unit was last triggered is stored on disk. When the timer is
activated, the service unit is triggered immediately if it
would have been triggered at least once during the time when
the timer was inactive. Such triggering is nonetheless
subject to the delay imposed by RandomizedDelaySec=. This is
useful to catch up on missed runs of the service when the
system was powered down.
'';
};
};
seahubExtraConf = mkOption {
default = "";
example = ''
CSRF_TRUSTED_ORIGINS = ["https://example.com"]
'';
type = types.lines;
description = ''
Extra config to append to `seahub_settings.py` file.
@ -137,12 +243,40 @@ in
###### Implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
services.mysql = {
enable = true;
package = lib.mkDefault pkgs.mariadb;
ensureDatabases = [
"ccnet_db"
"seafile_db"
"seahub_db"
];
ensureUsers = [
{
name = cfg.user;
ensurePermissions = {
"ccnet_db.*" = "ALL PRIVILEGES";
"seafile_db.*" = "ALL PRIVILEGES";
"seahub_db.*" = "ALL PRIVILEGES";
};
}
];
};
environment.etc."seafile/ccnet.conf".source = ccnetConf;
environment.etc."seafile/seafile.conf".source = seafileConf;
environment.etc."seafile/seahub_settings.py".source = seahubSettings;
users.users = lib.optionalAttrs (cfg.user == defaultUser) {
"${defaultUser}" = {
group = cfg.group;
isSystemUser = true;
};
};
users.groups = lib.optionalAttrs (cfg.group == defaultUser) { "${defaultUser}" = { }; };
systemd.targets.seafile = {
wantedBy = [ "multi-user.target" ];
description = "Seafile components";
@ -150,10 +284,12 @@ in
systemd.services =
let
securityOptions = {
serviceOptions = {
ProtectHome = true;
PrivateUsers = true;
PrivateDevices = true;
PrivateTmp = true;
ProtectSystem = "strict";
ProtectClock = true;
ProtectHostname = true;
ProtectProc = "invisible";
@ -162,36 +298,49 @@ in
ProtectKernelLogs = true;
ProtectControlGroups = true;
RestrictNamespaces = true;
RemoveIPC = true;
LockPersonality = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
NoNewPrivileges = true;
MemoryDenyWriteExecute = true;
SystemCallArchitectures = "native";
RestrictAddressFamilies = [ "AF_UNIX" "AF_INET" ];
RestrictAddressFamilies = [
"AF_UNIX"
"AF_INET"
];
User = cfg.user;
Group = cfg.group;
StateDirectory = "seafile";
RuntimeDirectory = "seafile";
LogsDirectory = "seafile";
ConfigurationDirectory = "seafile";
ReadWritePaths = lib.lists.optional (cfg.dataDir != "${seafRoot}/data") cfg.dataDir;
};
in
{
seaf-server = {
description = "Seafile server";
partOf = [ "seafile.target" ];
after = [ "network.target" ];
unitConfig.RequiresMountsFor = lib.lists.optional (cfg.dataDir != "${seafRoot}/data") cfg.dataDir;
requires = [ "mysql.service" ];
after = [
"network.target"
"mysql.service"
];
wantedBy = [ "seafile.target" ];
restartTriggers = [ ccnetConf seafileConf ];
path = [ pkgs.sqlite ];
serviceConfig = securityOptions // {
User = "seafile";
Group = "seafile";
DynamicUser = true;
StateDirectory = "seafile";
RuntimeDirectory = "seafile";
LogsDirectory = "seafile";
ConfigurationDirectory = "seafile";
restartTriggers = [
ccnetConf
seafileConf
];
serviceConfig = serviceOptions // {
ExecStart = ''
${cfg.seafilePackage}/bin/seaf-server \
${lib.getExe cfg.seahubPackage.seafile-server} \
--foreground \
-F /etc/seafile \
-c ${ccnetDir} \
-d ${dataDir} \
-d ${cfg.dataDir} \
-l /var/log/seafile/server.log \
-P /run/seafile/server.pid \
-p /run/seafile
@ -199,100 +348,201 @@ in
};
preStart = ''
if [ ! -f "${seafRoot}/server-setup" ]; then
mkdir -p ${dataDir}/library-template
mkdir -p ${ccnetDir}/{GroupMgr,misc,OrgMgr,PeerMgr}
sqlite3 ${ccnetDir}/GroupMgr/groupmgr.db ".read ${cfg.seafilePackage}/share/seafile/sql/sqlite/groupmgr.sql"
sqlite3 ${ccnetDir}/misc/config.db ".read ${cfg.seafilePackage}/share/seafile/sql/sqlite/config.sql"
sqlite3 ${ccnetDir}/OrgMgr/orgmgr.db ".read ${cfg.seafilePackage}/share/seafile/sql/sqlite/org.sql"
sqlite3 ${ccnetDir}/PeerMgr/usermgr.db ".read ${cfg.seafilePackage}/share/seafile/sql/sqlite/user.sql"
sqlite3 ${dataDir}/seafile.db ".read ${cfg.seafilePackage}/share/seafile/sql/sqlite/seafile.sql"
echo "${cfg.seafilePackage.version}-sqlite" > "${seafRoot}"/server-setup
mkdir -p ${cfg.dataDir}/library-template
# Load schema on first install
${pkgs.mariadb.client}/bin/mysql --database=ccnet_db < ${cfg.seahubPackage.seafile-server}/share/seafile/sql/mysql/ccnet.sql
${pkgs.mariadb.client}/bin/mysql --database=seafile_db < ${cfg.seahubPackage.seafile-server}/share/seafile/sql/mysql/seafile.sql
echo "${cfg.seahubPackage.seafile-server.version}-mysql" > "${seafRoot}"/server-setup
echo Loaded MySQL schemas for first install
fi
# checking for upgrades and handling them
installedMajor=$(cat "${seafRoot}/server-setup" | cut -d"-" -f1 | cut -d"." -f1)
installedMinor=$(cat "${seafRoot}/server-setup" | cut -d"-" -f1 | cut -d"." -f2)
pkgMajor=$(echo "${cfg.seafilePackage.version}" | cut -d"." -f1)
pkgMinor=$(echo "${cfg.seafilePackage.version}" | cut -d"." -f2)
pkgMajor=$(echo "${cfg.seahubPackage.seafile-server.version}" | cut -d"." -f1)
pkgMinor=$(echo "${cfg.seahubPackage.seafile-server.version}" | cut -d"." -f2)
if [[ $installedMajor == $pkgMajor && $installedMinor == $pkgMinor ]]; then
:
elif [[ $installedMajor == 8 && $installedMinor == 0 && $pkgMajor == 9 && $pkgMinor == 0 ]]; then
# Upgrade from 8.0 to 9.0
sqlite3 ${dataDir}/seafile.db ".read ${pkgs.seahub}/scripts/upgrade/sql/9.0.0/sqlite3/seafile.sql"
echo "${cfg.seafilePackage.version}-sqlite" > "${seafRoot}"/server-setup
elif [[ $installedMajor == 9 && $installedMinor == 0 && $pkgMajor == 10 && $pkgMinor == 0 ]]; then
# Upgrade from 9.0 to 10.0
sqlite3 ${dataDir}/seafile.db ".read ${pkgs.seahub}/scripts/upgrade/sql/10.0.0/sqlite3/seafile.sql"
echo "${cfg.seafilePackage.version}-sqlite" > "${seafRoot}"/server-setup
elif [[ $installedMajor == 10 && $installedMinor == 0 && $pkgMajor == 11 && $pkgMinor == 0 ]]; then
# Upgrade from 10.0 to 11.0: migrate to mysql
echo Migrating from version 10 to 11
# From https://github.com/haiwen/seahub/blob/e12f941bfef7191795d8c72a7d339c01062964b2/scripts/sqlite2mysql.sh
echo Migrating ccnet database to MySQL
${lib.getExe pkgs.sqlite} ${ccnetDir}/PeerMgr/usermgr.db ".dump" | \
${lib.getExe cfg.seahubPackage.python3} ${cfg.seahubPackage}/scripts/sqlite2mysql.py > ${ccnetDir}/ccnet.sql
${lib.getExe pkgs.sqlite} ${ccnetDir}/GroupMgr/groupmgr.db ".dump" | \
${lib.getExe cfg.seahubPackage.python3} ${cfg.seahubPackage}/scripts/sqlite2mysql.py >> ${ccnetDir}/ccnet.sql
sed 's/ctime INTEGER/ctime BIGINT/g' -i ${ccnetDir}/ccnet.sql
sed 's/email TEXT, role TEXT/email VARCHAR(255), role TEXT/g' -i ${ccnetDir}/ccnet.sql
${pkgs.mariadb.client}/bin/mysql --database=ccnet_db < ${ccnetDir}/ccnet.sql
echo Migrating seafile database to MySQL
${lib.getExe pkgs.sqlite} ${cfg.dataDir}/seafile.db ".dump" | \
${lib.getExe cfg.seahubPackage.python3} ${cfg.seahubPackage}/scripts/sqlite2mysql.py > ${cfg.dataDir}/seafile.sql
sed 's/owner_id TEXT/owner_id VARCHAR(255)/g' -i ${cfg.dataDir}/seafile.sql
sed 's/user_name TEXT/user_name VARCHAR(255)/g' -i ${cfg.dataDir}/seafile.sql
${pkgs.mariadb.client}/bin/mysql --database=seafile_db < ${cfg.dataDir}/seafile.sql
echo Migrating seahub database to MySQL
echo 'SET FOREIGN_KEY_CHECKS=0;' > ${seahubDir}/seahub.sql
${lib.getExe pkgs.sqlite} ${seahubDir}/seahub.db ".dump" | \
${lib.getExe cfg.seahubPackage.python3} ${cfg.seahubPackage}/scripts/sqlite2mysql.py >> ${seahubDir}/seahub.sql
sed 's/`permission` , `reporter` text NOT NULL/`permission` longtext NOT NULL/g' -i ${seahubDir}/seahub.sql
sed 's/varchar(256) NOT NULL UNIQUE/varchar(255) NOT NULL UNIQUE/g' -i ${seahubDir}/seahub.sql
sed 's/, UNIQUE (`user_email`, `contact_email`)//g' -i ${seahubDir}/seahub.sql
sed '/INSERT INTO `base_dirfileslastmodifiedinfo`/d' -i ${seahubDir}/seahub.sql
sed '/INSERT INTO `notifications_usernotification`/d' -i ${seahubDir}/seahub.sql
sed 's/DEFERRABLE INITIALLY DEFERRED//g' -i ${seahubDir}/seahub.sql
${pkgs.mariadb.client}/bin/mysql --database=seahub_db < ${seahubDir}/seahub.sql
echo "${cfg.seahubPackage.seafile-server.version}-mysql" > "${seafRoot}"/server-setup
echo Migration complete
else
echo "Unsupported upgrade" >&2
echo "Unsupported upgrade: $installedMajor.$installedMinor to $pkgMajor.$pkgMinor" >&2
exit 1
fi
'';
# Fix unix socket permissions
postStart = (
lib.strings.optionalString (lib.strings.hasPrefix "unix:" cfg.seafileSettings.fileserver.host) ''
while [[ ! -S "${lib.strings.removePrefix "unix:" cfg.seafileSettings.fileserver.host}" ]]; do
sleep 1
done
chmod 666 "${lib.strings.removePrefix "unix:" cfg.seafileSettings.fileserver.host}"
''
);
};
seahub = {
description = "Seafile Server Web Frontend";
wantedBy = [ "seafile.target" ];
partOf = [ "seafile.target" ];
after = [ "network.target" "seaf-server.service" ];
requires = [ "seaf-server.service" ];
unitConfig.RequiresMountsFor = lib.lists.optional (cfg.dataDir != "${seafRoot}/data") cfg.dataDir;
requires = [
"mysql.service"
"seaf-server.service"
];
after = [
"network.target"
"mysql.service"
"seaf-server.service"
];
restartTriggers = [ seahubSettings ];
environment = {
PYTHONPATH = "${pkgs.seahub.pythonPath}:${pkgs.seahub}/thirdpart:${pkgs.seahub}";
PYTHONPATH = "${cfg.seahubPackage.pythonPath}:${cfg.seahubPackage}/thirdpart:${cfg.seahubPackage}";
DJANGO_SETTINGS_MODULE = "seahub.settings";
CCNET_CONF_DIR = ccnetDir;
SEAFILE_CONF_DIR = dataDir;
SEAFILE_CONF_DIR = cfg.dataDir;
SEAFILE_CENTRAL_CONF_DIR = "/etc/seafile";
SEAFILE_RPC_PIPE_PATH = "/run/seafile";
SEAHUB_LOG_DIR = "/var/log/seafile";
};
serviceConfig = securityOptions // {
User = "seafile";
Group = "seafile";
DynamicUser = true;
serviceConfig = serviceOptions // {
RuntimeDirectory = "seahub";
StateDirectory = "seafile";
LogsDirectory = "seafile";
ConfigurationDirectory = "seafile";
ExecStart = ''
${pkgs.seahub.python.pkgs.gunicorn}/bin/gunicorn seahub.wsgi:application \
${lib.getExe cfg.seahubPackage.python3.pkgs.gunicorn} seahub.wsgi:application \
--name seahub \
--workers ${toString cfg.workers} \
--log-level=info \
--preload \
--timeout=1200 \
--limit-request-line=8190 \
--bind unix:/run/seahub/gunicorn.sock
--bind ${cfg.seahubAddress}
'';
};
preStart = ''
mkdir -p ${seahubDir}/media
# Link all media except avatars
for m in `find ${pkgs.seahub}/media/ -maxdepth 1 -not -name "avatars"`; do
for m in `find ${cfg.seahubPackage}/media/ -maxdepth 1 -not -name "avatars"`; do
ln -sf $m ${seahubDir}/media/
done
if [ ! -e "${seafRoot}/.seahubSecret" ]; then
${pkgs.seahub.python}/bin/python ${pkgs.seahub}/tools/secret_key_generator.py > ${seafRoot}/.seahubSecret
chmod 400 ${seafRoot}/.seahubSecret
(
umask 377 &&
${lib.getExe cfg.seahubPackage.python3} ${cfg.seahubPackage}/tools/secret_key_generator.py > ${seafRoot}/.seahubSecret
)
fi
if [ ! -f "${seafRoot}/seahub-setup" ]; then
# avatars directory should be writable
install -D -t ${seahubDir}/media/avatars/ ${pkgs.seahub}/media/avatars/default.png
install -D -t ${seahubDir}/media/avatars/groups ${pkgs.seahub}/media/avatars/groups/default.png
install -D -t ${seahubDir}/media/avatars/ ${cfg.seahubPackage}/media/avatars/default.png
install -D -t ${seahubDir}/media/avatars/groups ${cfg.seahubPackage}/media/avatars/groups/default.png
# init database
${pkgs.seahub}/manage.py migrate
${cfg.seahubPackage}/manage.py migrate
# create admin account
${pkgs.expect}/bin/expect -c 'spawn ${pkgs.seahub}/manage.py createsuperuser --email=${cfg.adminEmail}; expect "Password: "; send "${cfg.initialAdminPassword}\r"; expect "Password (again): "; send "${cfg.initialAdminPassword}\r"; expect "Superuser created successfully."'
echo "${pkgs.seahub.version}-sqlite" > "${seafRoot}/seahub-setup"
${lib.getExe pkgs.expect} -c 'spawn ${cfg.seahubPackage}/manage.py createsuperuser --email=${cfg.adminEmail}; expect "Password: "; send "${cfg.initialAdminPassword}\r"; expect "Password (again): "; send "${cfg.initialAdminPassword}\r"; expect "Superuser created successfully."'
echo "${cfg.seahubPackage.version}-mysql" > "${seafRoot}/seahub-setup"
fi
if [ $(cat "${seafRoot}/seahub-setup" | cut -d"-" -f1) != "${pkgs.seahub.version}" ]; then
# update database
${pkgs.seahub}/manage.py migrate
echo "${pkgs.seahub.version}-sqlite" > "${seafRoot}/seahub-setup"
# run django migrations
${cfg.seahubPackage}/manage.py migrate
echo "${cfg.seahubPackage.version}-mysql" > "${seafRoot}/seahub-setup"
fi
'';
};
seaf-gc = {
description = "Seafile storage garbage collection";
conflicts = [
"seaf-server.service"
"seahub.service"
];
after = [
"seaf-server.service"
"seahub.service"
];
unitConfig.RequiresMountsFor = lib.lists.optional (cfg.dataDir != "${seafRoot}/data") cfg.dataDir;
onSuccess = [
"seaf-server.service"
"seahub.service"
];
onFailure = [
"seaf-server.service"
"seahub.service"
];
startAt = lib.lists.optionals cfg.gc.enable cfg.gc.dates;
serviceConfig = serviceOptions // {
Type = "oneshot";
};
script = ''
if [ ! -f "${seafRoot}/server-setup" ]; then
echo "Server not setup yet, GC not needed" >&2
exit
fi
# checking for pending upgrades
installedMajor=$(cat "${seafRoot}/server-setup" | cut -d"-" -f1 | cut -d"." -f1)
installedMinor=$(cat "${seafRoot}/server-setup" | cut -d"-" -f1 | cut -d"." -f2)
pkgMajor=$(echo "${cfg.seahubPackage.seafile-server.version}" | cut -d"." -f1)
pkgMinor=$(echo "${cfg.seahubPackage.seafile-server.version}" | cut -d"." -f2)
if [[ $installedMajor != $pkgMajor || $installedMinor != $pkgMinor ]]; then
echo "Server not upgraded yet" >&2
exit
fi
# Clean up user-deleted blocks and libraries
${cfg.seahubPackage.seafile-server}/bin/seafserv-gc \
-F /etc/seafile \
-c ${ccnetDir} \
-d ${cfg.dataDir} \
--rm-fs
'';
};
};
systemd.timers.seaf-gc = lib.mkIf cfg.gc.enable {
timerConfig = {
randomizedDelaySec = cfg.gc.randomizedDelaySec;
Persistent = cfg.gc.persistent;
};
};
};
meta.maintainers = with lib.maintainers; [
greizgh
schmittlauch
];
}

View File

@ -0,0 +1,23 @@
# Hatsu {#module-services-hatsu}
[Hatsu](https://github.com/importantimport/hatsu) is an fully-automated ActivityPub bridge for static sites.
## Quickstart {#module-services-hatsu-quickstart}
the minimum configuration to start hatsu server would look like this:
```nix
{
services.hatsu = {
enable = true;
settings = {
HATSU_DOMAIN = "hatsu.local";
HATSU_PRIMARY_ACCOUNT = "example.com";
};
};
}
```
this will start the hatsu server on port 3939 and save the database in `/var/lib/hatsu/hatsu.sqlite3`.
Please refer to the [Hatsu Documentation](https://hatsu.cli.rs) for additional configuration options.

View File

@ -0,0 +1,97 @@
{
lib,
pkgs,
config,
...
}:
let
cfg = config.services.hatsu;
in
{
meta.doc = ./hatsu.md;
meta.maintainers = with lib.maintainers; [ kwaa ];
options.services.hatsu = {
enable = lib.mkEnableOption "Self-hosted and fully-automated ActivityPub bridge for static sites";
package = lib.mkPackageOption pkgs "hatsu" { };
settings = lib.mkOption {
type = lib.types.submodule {
freeformType =
with lib.types;
attrsOf (
nullOr (oneOf [
bool
int
port
str
])
);
options = {
HATSU_DATABASE_URL = lib.mkOption {
type = lib.types.str;
default = "sqlite:///var/lib/hatsu/hatsu.sqlite?mode=rwc";
example = "postgres://username:password@host/database";
description = "Database URL.";
};
HATSU_DOMAIN = lib.mkOption {
type = lib.types.str;
description = "The domain name of your instance (eg 'hatsu.local').";
};
HATSU_LISTEN_HOST = lib.mkOption {
type = lib.types.str;
default = "127.0.0.1";
description = "Host where hatsu should listen for incoming requests.";
};
HATSU_LISTEN_PORT = lib.mkOption {
type = lib.types.port;
apply = toString;
default = 3939;
description = "Port where hatsu should listen for incoming requests.";
};
HATSU_PRIMARY_ACCOUNT = lib.mkOption {
type = lib.types.str;
description = "The primary account of your instance (eg 'example.com').";
};
};
};
default = { };
description = ''
Configuration for Hatsu, see
<link xlink:href="https://hatsu.cli.rs/admins/environments.html"/>
for supported values.
'';
};
};
config = lib.mkIf cfg.enable {
systemd.services.hatsu = {
environment = cfg.settings;
description = "Hatsu server";
documentation = [ "https://hatsu.cli.rs/" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
DynamicUser = true;
ExecStart = "${lib.getExe cfg.package}";
Restart = "on-failure";
StateDirectory = "hatsu";
Type = "simple";
WorkingDirectory = "%S/hatsu";
};
};
};
}

View File

@ -855,6 +855,7 @@ let
"UseGateway"
"UseRoutes"
"UseTimezone"
"IPv6OnlyMode"
"ClientIdentifier"
"VendorClassIdentifier"
"UserClass"
@ -888,6 +889,7 @@ let
(assertValueOneOf "UseGateway" boolValues)
(assertValueOneOf "UseRoutes" boolValues)
(assertValueOneOf "UseTimezone" boolValues)
(assertValueOneOf "IPv6OnlyMode" boolValues)
(assertValueOneOf "ClientIdentifier" ["mac" "duid" "duid-only"])
(assertInt "IAID")
(assertValueOneOf "RequestBroadcast" boolValues)

View File

@ -31,6 +31,7 @@ in
testScript = ''
import json
import xml.etree.ElementTree as xml
machine.start()
@ -45,5 +46,18 @@ in
# Check that the name was overridden via the environmentFile option.
assert webui_config["name"] == "${webuiName} (Open WebUI)"
webui_opensearch_xml = machine.succeed("curl http://127.0.0.1:${mainPort}/opensearch.xml")
webui_opensearch = xml.fromstring(webui_opensearch_xml)
webui_opensearch_url = webui_opensearch.find(
".//{http://a9.com/-/spec/opensearch/1.1/}Url"
)
assert (
webui_opensearch_url is not None
), f"no url tag found in {webui_opensearch_xml}"
assert (
webui_opensearch_url.get("template") == "http://localhost:8080/?q={searchTerms}"
), "opensearch url doesn't match the configured port"
'';
}

View File

@ -14,6 +14,7 @@ import ./make-test-python.nix ({ pkgs, ... }:
services.seafile = {
enable = true;
ccnetSettings.General.SERVICE_URL = "http://server";
seafileSettings.fileserver.host = "unix:/run/seafile/server.sock";
adminEmail = "admin@example.com";
initialAdminPassword = "seafile_password";
};
@ -22,7 +23,7 @@ import ./make-test-python.nix ({ pkgs, ... }:
virtualHosts."server" = {
locations."/".proxyPass = "http://unix:/run/seahub/gunicorn.sock";
locations."/seafhttp" = {
proxyPass = "http://127.0.0.1:8082";
proxyPass = "http://unix:/run/seafile/server.sock";
extraConfig = ''
rewrite ^/seafhttp(.*)$ $1 break;
client_max_body_size 0;

View File

@ -24,7 +24,7 @@ import ../make-test-python.nix ({ lib, pkgs, ... }: {
with subtest("Home screen loads"):
machine.succeed(
"curl -sSfL http://localhost:8000 | grep '<title>Sign In'"
"curl -sSfL http://localhost:8000 | grep '<title>Log In'"
)
with subtest("Setting SITE_NAME via freeform option works"):

View File

@ -745,7 +745,7 @@ stdenv.mkDerivation {
Nixpkgs periodically tries to update all packages that have a `passthru.updateScript` attribute.
> [!Note]
> A common pattern is to use the [`nix-update-script`](../pkgs/common-updater/nix-update.nix) attribute provided in Nixpkgs, which runs [`nix-update`](https://github.com/Mic92/nix-update):
> A common pattern is to use the [`nix-update-script`](../pkgs/by-name/ni/nix-update/nix-update-script.nix) attribute provided in Nixpkgs, which runs [`nix-update`](https://github.com/Mic92/nix-update):
>
> ```nix
> { stdenv, nix-update-script }:
@ -755,7 +755,7 @@ Nixpkgs periodically tries to update all packages that have a `passthru.updateSc
> }
> ```
>
> For simple packages, this is often enough, and will ensure that the package is updated automatically by [`nixpkgs-update`](https://ryantm.github.io/nixpkgs-update) when a new version is released.
> For simple packages, this is often enough, and will ensure that the package is updated automatically by [`nixpkgs-update`](https://github.com/nix-community/nixpkgs-update) when a new version is released.
> The [update bot](https://nix-community.org/update-bot) runs periodically to attempt to automatically update packages, and will run `passthru.updateScript` if set.
> While not strictly necessary if the project is listed on [Repology](https://repology.org), using `nix-update-script` allows the package to update via many more sources (e.g. GitHub releases).

View File

@ -39,7 +39,7 @@ stdenv.mkDerivation rec {
configureFlags = [
"BOOST_LIB_SUFFIX="
(lib.enableFeature outputsSupport "outputs")
(lib.enableFeature visualizerSupport "enable-visualizer")
(lib.enableFeature visualizerSupport "visualizer")
(lib.withFeature visualizerSupport "fftw")
(lib.enableFeature clockSupport "clock")
(lib.withFeature taglibSupport "taglib")

View File

@ -6,7 +6,7 @@
, lighthouse
, nix-update-script
, nodePackages
, perl
, openssl
, pkg-config
, postgresql
, protobuf
@ -57,7 +57,6 @@ rustPlatform.buildRustPackage rec {
nativeBuildInputs = [
rustPlatform.bindgenHook
cmake
perl
pkg-config
protobuf
];
@ -65,6 +64,8 @@ rustPlatform.buildRustPackage rec {
buildInputs = [
rust-jemalloc-sys
sqlite
] ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [
openssl
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
CoreFoundation
Security
@ -84,6 +85,8 @@ rustPlatform.buildRustPackage rec {
LIGHTHOUSE_DEPOSIT_CONTRACT_SPEC_URL = "file://${depositContractSpec}";
LIGHTHOUSE_DEPOSIT_CONTRACT_TESTNET_URL = "file://${testnetDepositContractSpec}";
OPENSSL_NO_VENDOR = true;
cargoBuildFlags = [
"--package lighthouse"
];

View File

@ -1,17 +1,19 @@
{ lib, fetchFromGitHub, rustPlatform }:
{ lib, stdenv, fetchFromGitHub, rustPlatform, darwin }:
rustPlatform.buildRustPackage rec {
pname = "ox";
version = "0.3.0";
version = "0.6.1";
src = fetchFromGitHub {
owner = "curlpipe";
repo = pname;
rev = version;
hash = "sha256-g5M/d6pts4Y17CpWJAsWFL5KCq1YFaACJq6n6BQw7mo=";
hash = "sha256-37o8Ak+8LPeGny7JBLc2STpRjfWBCwOrRyP3HJbD25o=";
};
cargoHash = "sha256-6+W/guijsb9+ip1cvke8JLVa4h1nU2zQJCrLv64vsa0=";
cargoHash = "sha256-c7XhMYfhMCxyidZJemnu5f9KwQmPmbun6mrI3v2EpZ4=";
buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ darwin.apple_sdk.frameworks.AppKit ];
meta = with lib; {
description = "Independent Rust text editor that runs in your terminal";

View File

@ -406,8 +406,8 @@ let
mktplcRef = {
name = "vscode-neovim";
publisher = "asvetliakov";
version = "1.18.11";
hash = "sha256-j1igEItS4TT1WxSxK3tFG29McTTo8ojEs6TJShGZiGI=";
version = "1.18.12";
hash = "sha256-3Nmk0MFIMFYQHrRyZ7ioFk9KfHSk0CSF7FwNaEJbsyg=";
};
meta = {
changelog = "https://marketplace.visualstudio.com/items/asvetliakov.vscode-neovim/changelog";
@ -2119,8 +2119,8 @@ let
mktplcRef = {
name = "gitlab-workflow";
publisher = "gitlab";
version = "5.6.0";
hash = "sha256-K4oCMQBH5jrt61f/C3DDZC61RuDvOApnPEF3AsOrE20=";
version = "5.13.0";
hash = "sha256-A9QFW6Vk+g0pJfpXmZdUWJ/+WJBFXG79NXpCBuTjjok=";
};
meta = {
description = "GitLab extension for Visual Studio Code";

View File

@ -1,5 +1,4 @@
{ lib
, cmake
, dbus
, fetchFromGitHub
, fetchYarnDeps
@ -13,12 +12,14 @@
, cyrus_sasl
, stdenv
, fixup_yarn_lock
, yarn
, yarnConfigHook
, nodejs-slim
, cargo-tauri
, cargo
, rustPlatform
, rustc
, jq
, moreutils
}:
stdenv.mkDerivation rec {
@ -32,6 +33,11 @@ stdenv.mkDerivation rec {
hash = "sha256-Bi9GCQr7yox5Plc7o0svRKYi1XoK/HDGj1VbW1z4jac=";
};
# Yarn *really* wants us to use corepack if this is set
postPatch = ''
jq 'del(.packageManager)' package.json | sponge package.json
'';
yarnOfflineCache = fetchYarnDeps {
yarnLock = "${src}/yarn.lock";
hash = "sha256-ih5NSOvYje981SkVfPHm/u2sS1B36kgxpfe9LmQaxdo=";
@ -47,37 +53,22 @@ stdenv.mkDerivation rec {
};
};
configurePhase = ''
export HOME=$(mktemp -d)
yarn config --offline set yarn-offline-mirror ${yarnOfflineCache}
fixup_yarn_lock yarn.lock
yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive
patchShebangs node_modules/
yarn run postinstall --offline
'';
preBuild = ''
yarn tauri build -b deb
'';
cargoRoot = "backend/";
preInstall = ''
mv backend/target/release/bundle/deb/*/data/usr/ "$out"
'';
buildAndTestDir = cargoRoot;
nativeBuildInputs = [
cmake
pkg-config
perl
rustPlatform.cargoSetupHook
cargo
rustc
cargo-tauri
cargo-tauri.hook
fixup_yarn_lock
yarn
yarnConfigHook
nodejs-slim
cyrus_sasl
jq
moreutils # for sponge
];
buildInputs = [

View File

@ -121,6 +121,7 @@ python3Packages.buildPythonApplication rec {
homepage = "https://ulauncher.io/";
license = licenses.gpl3;
platforms = platforms.linux;
mainProgram = "ulauncher";
maintainers = with maintainers; [ aaronjanse sebtm ];
};
}

View File

@ -1,4 +1,4 @@
{ lib, buildGoModule, fetchFromGitHub }:
{ lib, stdenv, buildGoModule, fetchFromGitHub, kubectl, installShellFiles }:
buildGoModule rec {
pname = "kubecolor";
@ -19,6 +19,26 @@ buildGoModule rec {
"."
];
nativeBuildInputs = [ installShellFiles ];
postInstall = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) ''
# kubecolor re-uses the completions of kubectl for its own executable
installShellCompletion --cmd kubecolor \
--bash <(${lib.getExe kubectl} completion bash) \
--fish <(${lib.getExe kubectl} completion fish) \
--zsh <(${lib.getExe kubectl} completion zsh)
# https://kubecolor.github.io/setup/shells/bash/
echo 'complete -o default -F __start_kubectl kubecolor' >> $out/share/bash-completion/completions/kubecolor.bash
# https://kubecolor.github.io/setup/shells/fish/
echo -e 'function kubecolor --wraps kubectl\n command kubecolor $argv\nend' >> $out/share/fish/vendor_completions.d/kubecolor.fish
# https://kubecolor.github.io/setup/shells/zsh/
echo 'compdef kubecolor=kubectl' >> $out/share/zsh/site-functions/_kubecolor
'';
meta = with lib; {
description = "Colorizes kubectl output";
mainProgram = "kubecolor";

View File

@ -8,7 +8,7 @@ buildGoModule rec {
owner = "stackrox";
repo = "stackrox";
rev = version;
sha256 = "sha256-dJtqUYH6TUEb3IMSzVg3NBi1UYGvUPDQUaQ9h19a3NY=";
sha256 = "sha256-H6pgPo2/RIpYnNOxP6PgIZhij1I45bm9DVkV2sNcW3A=";
};
vendorHash = "sha256-qDSi1Jk6erSCwPiLubdVlqOT6PQygMQghS8leieJ78s=";

View File

@ -1,71 +0,0 @@
{ lib, stdenv, rustPlatform, fetchFromGitHub, stfl, sqlite, curl, gettext, pkg-config, libxml2, json_c, ncurses
, asciidoctor, libiconv, Security, Foundation, makeWrapper, nix-update-script }:
rustPlatform.buildRustPackage rec {
pname = "newsboat";
version = "2.36";
src = fetchFromGitHub {
owner = "newsboat";
repo = "newsboat";
rev = "r${version}";
hash = "sha256-RnDnyRAZ71aE5st5wUcUKjFFGY288oFpiyDXAno15MQ=";
};
cargoHash = "sha256-0z3G8j0Qk0HEDUKA7fmjFfNW956rRtzKO+0ltNQR4es=";
# TODO: Check if that's still needed
postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
# Allow other ncurses versions on Darwin
substituteInPlace config.sh \
--replace "ncurses5.4" "ncurses"
'';
nativeBuildInputs = [
pkg-config
asciidoctor
gettext
] ++ lib.optionals stdenv.hostPlatform.isDarwin [ makeWrapper ncurses ];
buildInputs = [ stfl sqlite curl libxml2 json_c ncurses ]
++ lib.optionals stdenv.hostPlatform.isDarwin [ Security Foundation libiconv gettext ];
postBuild = ''
make -j $NIX_BUILD_CORES prefix="$out"
'';
# https://github.com/NixOS/nixpkgs/pull/98471#issuecomment-703100014 . We set
# these for all platforms, since upstream's gettext crate behavior might
# change in the future.
GETTEXT_LIB_DIR = "${lib.getLib gettext}/lib";
GETTEXT_INCLUDE_DIR = "${lib.getDev gettext}/include";
GETTEXT_BIN_DIR = "${lib.getBin gettext}/bin";
doCheck = true;
preCheck = ''
make -j $NIX_BUILD_CORES test
'';
postInstall = ''
make -j $NIX_BUILD_CORES prefix="$out" install
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
for prog in $out/bin/*; do
wrapProgram "$prog" --prefix DYLD_LIBRARY_PATH : "${stfl}/lib"
done
'';
passthru = {
updateScript = nix-update-script { };
};
meta = {
homepage = "https://newsboat.org/";
changelog = "https://github.com/newsboat/newsboat/blob/${src.rev}/CHANGELOG.md";
description = "Fork of Newsbeuter, an RSS/Atom feed reader for the text console";
maintainers = with lib.maintainers; [ dotlambda nicknovitski ];
license = lib.licenses.mit;
platforms = lib.platforms.unix;
mainProgram = "newsboat";
};
}

View File

@ -1,159 +0,0 @@
{ lib
, stdenv
, fetchurl
, bundlerEnv
, alsa-utils
, atk
, copyDesktopItems
, gobject-introspection
, gtk2
, ruby
, libicns
, libnotify
, makeDesktopItem
, which
, wrapGAppsHook3
, writeText
}:
let
# NOTE: $out may have different values depending on context
mikutterPaths = rec {
optPrefixDir = "$out/opt/mikutter";
appPrefixDir = "$out/Applications/mikutter.app/Contents";
appBinDir = "${appPrefixDir}/MacOS";
appResourceDir = "${appPrefixDir}/Resources";
iconPath = "${optPrefixDir}/core/skin/data/icon.png";
};
gems = bundlerEnv {
name = "mikutter-gems"; # leave the version out to enable package reuse
gemdir = ./deps;
groups = [ "default" "plugin" ];
inherit ruby;
# Avoid the following error:
# > `<module:Moneta>': uninitialized constant Moneta::Builder (NameError)
#
# Related:
# https://github.com/NixOS/nixpkgs/pull/76510
# https://github.com/NixOS/nixpkgs/pull/76765
# https://github.com/NixOS/nixpkgs/issues/83442
# https://github.com/NixOS/nixpkgs/issues/106545
copyGemFiles = true;
};
mkDesktopItem = { description }:
makeDesktopItem {
name = "mikutter";
desktopName = "mikutter";
exec = "mikutter";
icon = "mikutter";
categories = [ "Network" ];
comment = description;
keywords = [ "Mastodon" ];
};
mkInfoPlist = { version }:
writeText "Info.plist" (lib.generators.toPlist { } {
CFBundleName = "mikutter";
CFBundleDisplayName = "mikutter";
CFBundleExecutable = "mikutter";
CFBundleIconFile = "mikutter";
CFBundleIdentifier = "net.hachune.mikutter";
CFBundleInfoDictionaryVersion = "6.0";
CFBundlePackageType = "APPL";
CFBundleVersion = version;
CFBundleShortVersionString = version;
});
inherit (gems) wrappedRuby;
in
with mikutterPaths; stdenv.mkDerivation rec {
pname = "mikutter";
version = "4.1.4";
src = fetchurl {
url = "https://mikutter.hachune.net/bin/mikutter-${version}.tar.gz";
sha256 = "05253nz4i1lmnq6czj48qdab2ny4vx2mznj6nsn2l1m2z6zqkwk3";
};
nativeBuildInputs = [ copyDesktopItems wrapGAppsHook3 gobject-introspection ]
++ lib.optionals stdenv.hostPlatform.isDarwin [ libicns ];
buildInputs = [
atk
gtk2
libnotify
which # some plugins use it at runtime
wrappedRuby
] ++ lib.optionals stdenv.hostPlatform.isLinux [ alsa-utils ];
scriptPath = lib.makeBinPath (
[ wrappedRuby libnotify which ]
++ lib.optionals stdenv.hostPlatform.isLinux [ alsa-utils ]
);
postUnpack = ''
rm -rf vendor
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin ${optPrefixDir}
install -Dm644 README $out/share/doc/mikutter/README
install -Dm644 LICENSE $out/share/doc/mikutter/LICENSE
rm -r README LICENSE deployment
cp -r . ${optPrefixDir}
gappsWrapperArgsHook # FIXME: currently runs at preFixup
wrapGApp ${optPrefixDir}/mikutter.rb \
--prefix PATH : "${scriptPath}" \
--set DISABLE_BUNDLER_SETUP 1
mv ${optPrefixDir}/mikutter.rb $out/bin/mikutter
install -Dm644 ${iconPath} $out/share/icons/hicolor/256x256/apps/mikutter.png
runHook postInstall
'';
postInstall =
let
infoPlist = mkInfoPlist { inherit version; };
in
lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p ${appBinDir} ${appResourceDir}
install -Dm644 ${infoPlist} ${appPrefixDir}/Info.plist
ln -s $out/bin/mikutter ${appBinDir}/mikutter
png2icns ${appResourceDir}/mikutter.icns ${iconPath}
'';
installCheckPhase = ''
runHook preInstallCheck
testDir="$(mktemp -d)"
install -Dm644 ${./test_plugin.rb} "$testDir/plugin/test_plugin/test_plugin.rb"
$out/bin/mikutter --confroot="$testDir" --plugin=test_plugin --debug
runHook postInstallCheck
'';
desktopItems = [
(mkDesktopItem { inherit (meta) description; })
];
doInstallCheck = true;
dontWrapGApps = true; # the target is placed outside of bin/
passthru.updateScript = [ ./update.sh version (toString ./.) ];
meta = with lib; {
description = "An extensible Mastodon client";
homepage = "https://mikutter.hachune.net";
platforms = ruby.meta.platforms;
license = licenses.mit;
};
}

View File

@ -1,39 +0,0 @@
alias __source_distinct__ source
def source(url)
@loaded ||= {}
unless @loaded[url]
@loaded[url] = true
__source_distinct__(url) end end
source 'https://rubygems.org'
ruby '>= 2.5.0'
group :default do
gem 'addressable','>= 2.7.0', '< 2.8'
gem 'delayer','>= 1.1.2', '< 2.0'
gem 'delayer-deferred','>= 2.2.0', '< 3.0'
gem 'diva','>= 1.0.2', '< 2.0'
gem 'memoist','>= 0.16.2', '< 0.17'
gem 'oauth','>= 0.5.4'
gem 'pluggaloid','>= 1.5.0', '< 2.0'
gem 'typed-array','>= 0.1.2', '< 0.2'
end
group :test do
gem 'test-unit','>= 3.3.4', '< 4.0'
gem 'rake','>= 13.0.1'
gem 'mocha','>= 1.11.1'
gem 'webmock','>= 3.7.6'
gem 'ruby-prof','>= 1.1.0'
end
group :plugin do
Dir.glob(File.expand_path(File.join(__dir__, 'plugin/*/Gemfile'))){ |path|
eval File.open(path).read
}
Dir.glob(File.join(File.expand_path(ENV['MIKUTTER_CONFROOT'] || '~/.mikutter'), 'plugin/*/Gemfile')){ |path|
eval File.open(path).read
}
end

View File

@ -1,101 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.7.0)
public_suffix (>= 2.0.2, < 5.0)
atk (3.4.1)
glib2 (= 3.4.1)
cairo (1.17.5)
native-package-installer (>= 1.0.3)
pkg-config (>= 1.2.2)
red-colors
cairo-gobject (3.4.1)
cairo (>= 1.16.2)
glib2 (= 3.4.1)
crack (0.4.5)
rexml
delayer (1.2.0)
delayer-deferred (2.2.0)
delayer (>= 1.1.2, < 2.0)
diva (1.0.2)
addressable (>= 2.5.2, < 2.8)
gdk_pixbuf2 (3.4.1)
gio2 (= 3.4.1)
gettext (3.3.7)
locale (>= 2.0.5)
text (>= 1.3.0)
gio2 (3.4.1)
gobject-introspection (= 3.4.1)
glib2 (3.4.1)
native-package-installer (>= 1.0.3)
pkg-config (>= 1.3.5)
gobject-introspection (3.4.1)
glib2 (= 3.4.1)
gtk2 (3.4.1)
atk (= 3.4.1)
gdk_pixbuf2 (= 3.4.1)
pango (= 3.4.1)
hashdiff (1.0.1)
httpclient (2.8.3)
instance_storage (1.0.0)
locale (2.1.3)
memoist (0.16.2)
mini_portile2 (2.5.0)
mocha (1.12.0)
moneta (1.4.1)
native-package-installer (1.1.1)
nokogiri (1.11.3)
mini_portile2 (~> 2.5.0)
racc (~> 1.4)
oauth (0.5.6)
pango (3.4.1)
cairo-gobject (= 3.4.1)
gobject-introspection (= 3.4.1)
pkg-config (1.4.6)
pluggaloid (1.5.0)
delayer (>= 1.1.0, < 2.0)
instance_storage (>= 1.0.0, < 2.0.0)
power_assert (2.0.0)
public_suffix (4.0.6)
racc (1.5.2)
rake (13.0.3)
red-colors (0.1.1)
rexml (3.2.5)
ruby-prof (1.4.3)
test-unit (3.4.0)
power_assert
text (1.3.1)
typed-array (0.1.2)
webmock (3.12.2)
addressable (>= 2.3.6)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
PLATFORMS
ruby
DEPENDENCIES
addressable (>= 2.7.0, < 2.8)
delayer (>= 1.1.2, < 2.0)
delayer-deferred (>= 2.2.0, < 3.0)
diva (>= 1.0.2, < 2.0)
gettext (>= 3.3.5, < 3.4)
gtk2 (= 3.4.1)
httpclient
memoist (>= 0.16.2, < 0.17)
mocha (>= 1.11.1)
moneta
nokogiri
oauth (>= 0.5.4)
pluggaloid (>= 1.5.0, < 2.0)
rake (>= 13.0.1)
ruby-prof (>= 1.1.0)
test-unit (>= 3.3.4, < 4.0)
typed-array (>= 0.1.2, < 0.2)
webmock (>= 3.7.6)
RUBY VERSION
ruby 2.6.6p146
BUNDLED WITH
2.1.4

View File

@ -1,410 +0,0 @@
{
addressable = {
dependencies = ["public_suffix"];
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fvchp2rhp2rmigx7qglf69xvjqvzq7x0g49naliw29r2bz656sy";
type = "gem";
};
version = "2.7.0";
};
atk = {
dependencies = ["glib2"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0a8q9a1f6x4gy55p8cf52a22bnpjgn18ad9n959x0f4gybbhs948";
type = "gem";
};
version = "3.4.1";
};
cairo = {
dependencies = ["native-package-installer" "pkg-config" "red-colors"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0vbj9szp2xbnxqan8hppip8vm9fxpcmpx745y5fvg2scdh9f0p7s";
type = "gem";
};
version = "1.17.5";
};
cairo-gobject = {
dependencies = ["cairo" "glib2"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0gkxdfslcvrwrs48giilji3bgxd5bwijwq33p9h00r10jzfg2028";
type = "gem";
};
version = "3.4.1";
};
crack = {
dependencies = ["rexml"];
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1cr1kfpw3vkhysvkk3wg7c54m75kd68mbm9rs5azdjdq57xid13r";
type = "gem";
};
version = "0.4.5";
};
delayer = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0iqf4i18i8rk3x7qgvkhbiqskf0xzdf733fjimrq6xkag2mq60bl";
type = "gem";
};
version = "1.2.0";
};
delayer-deferred = {
dependencies = ["delayer"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0i2das3ncssacpqdgaf4as77vrxm7jfiizaja884fqv4rzv6s2sv";
type = "gem";
};
version = "2.2.0";
};
diva = {
dependencies = ["addressable"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05wl4wg57vvng4nrp4lzjq148v908xzq092kq93phwvyxs7jnw2g";
type = "gem";
};
version = "1.0.2";
};
gdk_pixbuf2 = {
dependencies = ["gio2"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0194gzn0kialfh0j7crllvp808r64sg6dh297x69b0av21ar5pam";
type = "gem";
};
version = "3.4.1";
};
gettext = {
dependencies = ["locale" "text"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fqlwq7i8ck1fjyhn19q3skvgrbz44q7gq51mlr0qym5rkj5f6rn";
type = "gem";
};
version = "3.3.7";
};
gio2 = {
dependencies = ["gobject-introspection"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1l3jpgbdvb55xhcmpkcqgwx5068dfyi8kijfvzhbqh96ng0p1m7g";
type = "gem";
};
version = "3.4.1";
};
glib2 = {
dependencies = ["native-package-installer" "pkg-config"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "18clyn0fp0h5alnkf9i2bqd6wvl78h468pdbzs1csqnba8vw4q1c";
type = "gem";
};
version = "3.4.1";
};
gobject-introspection = {
dependencies = ["glib2"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1a3x8qiisbax3x0izj8l5w66r53ba5ma53ax2jhdbhbvaxx3d02n";
type = "gem";
};
version = "3.4.1";
};
gtk2 = {
dependencies = ["atk" "gdk_pixbuf2" "pango"];
groups = ["plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "17az8g0n1yzz90kdbjg2hpabi04qccda7v6lin76bs637ivfg2md";
type = "gem";
};
version = "3.4.1";
};
hashdiff = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1nynpl0xbj0nphqx1qlmyggq58ms1phf5i03hk64wcc0a17x1m1c";
type = "gem";
};
version = "1.0.1";
};
httpclient = {
groups = ["plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "19mxmvghp7ki3klsxwrlwr431li7hm1lczhhj8z4qihl2acy8l99";
type = "gem";
};
version = "2.8.3";
};
instance_storage = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "08nf5fhq9dckq9lmaklxydq0hrlfi7phk66gr3bggxg45zd687pl";
type = "gem";
};
version = "1.0.0";
};
locale = {
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0997465kxvpxm92fiwc2b16l49mngk7b68g5k35ify0m3q0yxpdn";
type = "gem";
};
version = "2.1.3";
};
memoist = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0i9wpzix3sjhf6d9zw60dm4371iq8kyz7ckh2qapan2vyaim6b55";
type = "gem";
};
version = "0.16.2";
};
mini_portile2 = {
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1hdbpmamx8js53yk3h8cqy12kgv6ca06k0c9n3pxh6b6cjfs19x7";
type = "gem";
};
version = "2.5.0";
};
mocha = {
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05yw6rwgjppq116jgqfg4pv4bql3ci4r2fmmg0m2c3sqib1bq41a";
type = "gem";
};
version = "1.12.0";
};
moneta = {
groups = ["plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0z25b4yysvnf2hi9jxnsiv3fvnicnzr2m70ci231av5093jfknc6";
type = "gem";
};
version = "1.4.1";
};
native-package-installer = {
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ww1mq41q7rda975byjmq5dk8k13v8dawvm33370pbkrymd8syp8";
type = "gem";
};
version = "1.1.1";
};
nokogiri = {
dependencies = ["mini_portile2" "racc"];
groups = ["plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "19d78mdg2lbz9jb4ph6nk783c9jbsdm8rnllwhga6pd53xffp6x0";
type = "gem";
};
version = "1.11.3";
};
oauth = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1zwd6v39yqfdrpg1p3d9jvzs9ljg55ana2p06m0l7qn5w0lgx1a0";
type = "gem";
};
version = "0.5.6";
};
pango = {
dependencies = ["cairo-gobject" "gobject-introspection"];
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1d0cn50qgpifrcv8qx72wi6l9xalw3ryngbfmm9xpg9vx5rl1qbp";
type = "gem";
};
version = "3.4.1";
};
pkg-config = {
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1mjjy1grxr64znkffxsvprcckbrrnm40b6gbllnbm7jxslbr3gjl";
type = "gem";
};
version = "1.4.6";
};
pluggaloid = {
dependencies = ["delayer" "instance_storage"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0m3f940lf1bg01jin22by7hg9hs43y995isgcyqb6vbvlv51zj11";
type = "gem";
};
version = "1.5.0";
};
power_assert = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "172qfmzwxdf82bmwgcb13hnz9i3p6i2s2nijxnx6r63kn3drjppr";
type = "gem";
};
version = "2.0.0";
};
public_suffix = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
type = "gem";
};
version = "4.0.6";
};
racc = {
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "178k7r0xn689spviqzhvazzvxfq6fyjldxb3ywjbgipbfi4s8j1g";
type = "gem";
};
version = "1.5.2";
};
rake = {
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1iik52mf9ky4cgs38fp2m8r6skdkq1yz23vh18lk95fhbcxb6a67";
type = "gem";
};
version = "13.0.3";
};
red-colors = {
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ar2k7zvhr1215jx5di29hkg5h1798f1gypmq6v0sy9v35w6ijca";
type = "gem";
};
version = "0.1.1";
};
rexml = {
groups = ["default" "test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
type = "gem";
};
version = "3.2.5";
};
ruby-prof = {
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1r3xalp91l07m0cwllcxjzg6nkviiqnxkcbgg5qnzsdji6rgy65m";
type = "gem";
};
version = "1.4.3";
};
test-unit = {
dependencies = ["power_assert"];
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1h0c323zfn4hdida4g58h8wnlh4kax438gyxlw20dd78kcp01i8m";
type = "gem";
};
version = "3.4.0";
};
text = {
groups = ["default" "plugin"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1x6kkmsr49y3rnrin91rv8mpc3dhrf3ql08kbccw8yffq61brfrg";
type = "gem";
};
version = "1.3.1";
};
typed-array = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qlv2rnkin9rwkgjx3k5qvc17m0m7jf5cdirw3wxbjnw5kga27w9";
type = "gem";
};
version = "0.1.2";
};
webmock = {
dependencies = ["addressable" "crack" "hashdiff"];
groups = ["test"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "038igpmkpmn0nw0k7s4db8x88af1nwcy7wzh9m9c9q4p74h7rii0";
type = "gem";
};
version = "3.12.2";
};
}

View File

@ -1,4 +0,0 @@
source 'https://rubygems.org'
gem 'gtk2', '3.4.1'

View File

@ -1,4 +0,0 @@
source 'https://rubygems.org'
gem 'nokogiri'
gem 'httpclient'

View File

@ -1,5 +0,0 @@
source 'https://rubygems.org'
group :default do
gem 'gettext', '>= 3.3.5', '< 3.4'
end

View File

@ -1,10 +0,0 @@
# Tests mikutter's event system.
Plugin.create(:test_plugin) do
require 'logger'
Delayer.new do
log = Logger.new(STDOUT)
log.info("loaded test_plugin")
exit
end
end

View File

@ -1,51 +0,0 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p bundler bundix curl jq common-updater-scripts
# shellcheck shell=bash
set -euo pipefail
main() {
local currentVer="$1"
local scriptDir="$2"
local latestVer
local srcDir
if [[ -z "$UPDATE_NIX_ATTR_PATH" ]]; then
echo "[ERROR] Please run the following instead:" >&2
echo >&2
echo " % nix-shell maintainers/scripts/update.nix --argstr path mikutter" >&2
exit 1
fi
latestVer="$(queryLatestVersion)"
if [[ "$currentVer" == "$latestVer" ]]; then
echo "[INFO] mikutter is already up to date" >&2
exit
fi
update-source-version "$UPDATE_NIX_ATTR_PATH" "$latestVer"
cd "$scriptDir"
rm -rf deps
mkdir deps
cd deps
srcDir="$(nix-build ../../../../../.. --no-out-link -A mikutter.src)"
tar xvf "$srcDir" --strip-components=1
find . -not -name Gemfile -exec rm {} \;
find . -type d -exec rmdir -p --ignore-fail-on-non-empty {} \; || true
bundle lock
bundix
}
queryLatestVersion() {
curl -sS 'https://mikutter.hachune.net/download.json?count=1' \
| jq -r '.[].version_string' \
| head -n1
}
main "$@"
# vim:set ft=bash:

View File

@ -19,11 +19,11 @@
stdenv.mkDerivation rec {
pname = "gnote";
version = "46.1";
version = "47.0";
src = fetchurl {
url = "mirror://gnome/sources/${pname}/${lib.versions.major version}/${pname}-${version}.tar.xz";
hash = "sha256-47v3A6WPgI3Fd9WiVsF3wYkHC5KPS9WSltDA3SXz2pk=";
hash = "sha256-vrNcreIMYOQxVRbyCsfr7p37wrgPAHy+2LxaUlIuRC4=";
};
buildInputs = [

View File

@ -25,28 +25,28 @@
, zsh
, fish
, nixosTests
, go
, buildGoModule
, go_1_23
, buildGo123Module
, nix-update-script
}:
with python3Packages;
buildPythonApplication rec {
pname = "kitty";
version = "0.36.1";
version = "0.36.4";
format = "other";
src = fetchFromGitHub {
owner = "kovidgoyal";
repo = "kitty";
rev = "refs/tags/v${version}";
hash = "sha256-7+MxxgQQlAje7klfJvvEWe8CfxyN0oTGQJ/QOORFUsY=";
hash = "sha256-nN0y2VKK5UNaozpHQNPN7AYkto9z6rJNpYRJhvLPtVQ=";
};
goModules = (buildGoModule {
goModules = (buildGo123Module {
pname = "kitty-go-modules";
inherit src version;
vendorHash = "sha256-YN4sSdDNDIVgtcykg60H0bZEryRHJJfZ5rXWUMYXGr4=";
vendorHash = "sha256-8hsQH7OdsxeVG6pomuxdmTXNmQYBROoUUxoC10LeLFo=";
}).goModules;
buildInputs = [
@ -82,7 +82,7 @@ buildPythonApplication rec {
sphinx-copybutton
sphinxext-opengraph
sphinx-inline-tabs
go
go_1_23
fontconfig
] ++ lib.optionals stdenv.hostPlatform.isDarwin [
imagemagick

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "fnc";
version = "0.16";
version = "0.18";
src = fetchurl {
url = "https://fnc.bsdbox.org/tarball/${finalAttrs.version}/fnc-${finalAttrs.version}.tar.gz";
hash = "sha256-6I6wtSMHaKdnlUK4pYiaybJeODGu2P+smYW8lQDIWGM=";
hash = "sha256-npS+sOxF0S/9TuFjtEFlev0HpIOsaP6zmcfopPNUehk=";
};
buildInputs = [ libiconv ncurses zlib ];

View File

@ -0,0 +1,19 @@
diff --git a/osdep/mac/input_helper.swift b/osdep/mac/input_helper.swift
index 0acec6bd40..0ec5837864 100644
--- a/osdep/mac/input_helper.swift
+++ b/osdep/mac/input_helper.swift
@@ -18,6 +18,14 @@
import Cocoa
import Carbon.HIToolbox
+extension NSCondition {
+ fileprivate func withLock<T>(_ body: () throws -> T) rethrows -> T {
+ self.lock()
+ defer { self.unlock() }
+ return try body()
+ }
+}
+
class InputHelper: NSObject {
var option: OptionHelper?
var lock = NSCondition()

View File

@ -151,6 +151,11 @@ stdenv'.mkDerivation (finalAttrs: {
hash = "sha256-BOGh+QBTO7hrHohh+RqjSF8eHQH8jVBPjG/k4eyFaaM=";
};
patches = [
# Fix build with Darwin SDK 11
./0001-fix-darwin-build.patch
];
postPatch = lib.concatStringsSep "\n" [
# Don't reference compile time dependencies or create a build outputs cycle
# between out and dev
@ -308,6 +313,8 @@ stdenv'.mkDerivation (finalAttrs: {
pushd ../TOOLS
cp mpv_identify.sh umpv $out/bin/
popd
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
pushd $out/share/applications
sed -e '/Icon=/ ! s|mpv|umpv|g; s|^Exec=.*|Exec=umpv %U|' \

View File

@ -8,13 +8,13 @@
buildLua rec {
pname = "mpv-quality-menu";
version = "4.1.1";
version = "4.1.2";
src = fetchFromGitHub {
owner = "christoph-heinrich";
repo = "mpv-quality-menu";
rev = "v${version}";
hash = "sha256-yrcTxqpLnOI1Tq3khhflO3wzhyeTPuvKifyH5/P57Ns=";
hash = "sha256-W7N8H+kq/bhF917TutyilfT8FBbWmbSFUrHd8a8k5Jg=";
};
passthru.updateScript = gitUpdater { rev-prefix = "v"; };

View File

@ -90,11 +90,29 @@ if package maintainers would like to use this feature, they are welcome to migra
To lessen PR traffic, they're encouraged to also perform some more general maintenance on the package in the same PR,
though this is not required and must not be expected.
Note that definitions in `all-packages.nix` with custom arguments should not be removed.
Note that `callPackage` definitions in `all-packages.nix` with custom arguments should not be removed.
That is a backwards-incompatible change because it changes the `.override` interface.
Such packages may still be moved to `pkgs/by-name` however, while keeping the definition in `all-packages.nix`.
Such packages may still be moved to `pkgs/by-name` however, in order to avoid the slightly superficial choice of directory / category in which the `default.nix` file was placed, but please keep the definition in `all-packages.nix` using `callPackage`.
See also [changing implicit attribute defaults](#changing-implicit-attribute-defaults).
Definitions like the following however, _can_ be transitioned:
```nix
# all-packages.nix
fooWithBaz = foo.override {
bar = baz;
};
# turned into pkgs/by-name/fo/fooWithBaz/package.nix with:
{
foo,
baz,
}:
foo.override {
bar = baz;
}
```
## Limitations
There's some limitations as to which packages can be defined using this structure:

View File

@ -0,0 +1,41 @@
{
lib,
stdenvNoCC,
fetchurl,
}:
let
version = "6.1.3";
in
stdenvNoCC.mkDerivation {
pname = "activemq";
inherit version;
src = fetchurl {
url = "https://archive.apache.org/dist/activemq/${version}/apache-activemq-${version}-bin.tar.gz";
hash = "sha256-ytFOgW6ZDxMScJ6/wij0KJXYxUxlLTzVbwtRRWNdx5Q=";
};
installPhase = ''
runHook preInstall
mkdir -p $out
mv * $out/
for j in $(find $out/lib -name "*.jar"); do
cp="''${cp:+"$cp:"}$j";
done
echo "CLASSPATH=$cp" > $out/lib/classpath.env
runHook postInstall
'';
meta = {
homepage = "https://activemq.apache.org/";
description = "Messaging and Integration Patterns server written in Java";
sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
license = lib.licenses.asl20;
mainProgram = "activemq";
maintainers = [ lib.maintainers.anthonyroussel ];
platforms = lib.platforms.unix;
};
}

View File

@ -2,7 +2,8 @@
lib,
fetchFromGitHub,
rustPlatform,
perl,
pkg-config,
openssl,
testers,
avml,
nix-update-script,
@ -21,7 +22,12 @@ rustPlatform.buildRustPackage rec {
cargoHash = "sha256-gcpjrxnQDyO92OW6LZVc4x73TmTtQoaEYhmGmqhz8ng=";
nativeBuildInputs = [ perl ];
nativeBuildInputs = [ pkg-config ];
buildInputs = [ openssl ];
env = {
OPENSSL_NO_VENDOR = true;
};
passthru.tests.version = testers.testVersion { package = avml; };

View File

@ -0,0 +1,56 @@
{
lib,
stdenv,
makeSetupHook,
cargo,
cargo-tauri,
rust,
# The subdirectory of `target/` from which to copy the build artifacts
targetSubdirectory ? stdenv.hostPlatform.rust.cargoShortTarget,
}:
let
kernelName = stdenv.hostPlatform.parsed.kernel.name;
in
makeSetupHook {
name = "tauri-hook";
propagatedBuildInputs = [
cargo
cargo-tauri
];
substitutions = {
inherit targetSubdirectory;
inherit (rust.envVars) rustHostPlatformSpec setEnv;
# A map of the bundles used for Tauri's different supported platforms
# https://github.com/tauri-apps/tauri/blob/23a912bb84d7c6088301e1ffc59adfa8a799beab/README.md#platforms
defaultTauriBundleType =
{
darwin = "app";
linux = "deb";
}
.${kernelName} or (throw "${kernelName} is not supported by cargo-tauri.hook");
# $targetDir is the path to the build artifacts (i.e., `./target/release`)
installScript =
{
darwin = ''
mkdir $out
mv "$targetDir"/bundle/macos $out/Applications
'';
linux = ''
mv "$targetDir"/bundle/deb/*/data/usr $out
'';
}
.${kernelName} or (throw "${kernelName} is not supported by cargo-tauri.hook");
};
meta = {
inherit (cargo-tauri.meta) maintainers broken;
# Platforms that Tauri supports bundles for
platforms = lib.platforms.darwin ++ lib.platforms.linux;
};
} ./hook.sh

View File

@ -0,0 +1,101 @@
# shellcheck shell=bash disable=SC2034,SC2154,SC2164
# We replace these
export dontCargoBuild=true
export dontCargoInstall=true
tauriBuildHook() {
echo "Executing tauriBuildHook"
runHook preBuild
## The following is lifted from rustPlatform.cargoBuildHook
## As we're replacing it, we should also be respecting its options.
# Account for running outside of mkRustPackage where this may not be set
cargoBuildType="${cargoBuildType:-release}"
# Let stdenv handle stripping, for consistency and to not break
# separateDebugInfo.
export "CARGO_PROFILE_${cargoBuildType@U}_STRIP"=false
if [ -n "${buildAndTestSubdir-}" ]; then
# ensure the output doesn't end up in the subdirectory
CARGO_TARGET_DIR="$(pwd)/target"
export CARGO_TARGET_DIR
# Tauri doesn't respect $CARGO_TARGET_DIR, but does respect the cargo
# argument...but that doesn't respect `--target`, so we have to use the
# config file
# https://github.com/tauri-apps/tauri/issues/10190
printf '\nbuild.target-dir = "%s"' "$CARGO_TARGET_DIR" >>config.toml
pushd "${buildAndTestSubdir}"
fi
local cargoFlagsArray=(
"-j" "$NIX_BUILD_CORES"
"--target" "@rustHostPlatformSpec@"
"--offline"
)
local tauriFlagsArray=(
"--bundles" "${tauriBundleType:-@defaultTauriBundleType@}"
"--target" "@rustHostPlatformSpec@"
)
if [ "${cargoBuildType}" != "debug" ]; then
cargoFlagsArray+=("--profile" "${cargoBuildType}")
fi
if [ -n "${cargoBuildNoDefaultFeatures-}" ]; then
cargoFlagsArray+=("--no-default-features")
fi
if [ -n "${cargoBuildFeatures-}" ]; then
cargoFlagsArray+=("--features=$(concatStringsSep "," cargoBuildFeatures)")
fi
concatTo cargoFlagsArray cargoBuildFlags
if [ "${cargoBuildType:-}" == "debug" ]; then
tauriFlagsArray+=("--debug")
fi
concatTo tauriFlagsArray tauriBuildFlags
echoCmd 'cargo-tauri.hook cargoFlags' "${cargoFlagsArray[@]}"
echoCmd 'cargo-tauri.hook tauriFlags' "${tauriFlagsArray[@]}"
@setEnv@ cargo tauri build "${tauriFlagsArray[@]}" -- "${cargoFlagsArray[@]}"
if [ -n "${buildAndTestSubdir-}" ]; then
popd
fi
runHook postBuild
echo "Finished tauriBuildHook"
}
tauriInstallHook() {
echo "Executing tauriInstallHook"
runHook preInstall
# Use a nice variable for our target directory in the following script
targetDir=target/@targetSubdirectory@/$cargoBuildType
@installScript@
runHook postInstall
echo "Finished tauriInstallHook"
}
if [ -z "${dontTauriBuild:-}" ] && [ -z "${buildPhase:-}" ]; then
buildPhase=tauriBuildHook
fi
if [ -z "${dontTauriInstall:-}" ] && [ -z "${installPhase:-}" ]; then
installPhase=tauriInstallHook
fi

View File

@ -1,21 +1,17 @@
{
lib,
stdenv,
callPackage,
rustPlatform,
fetchFromGitHub,
darwin,
gtk3,
libsoup,
openssl,
pkg-config,
glibc,
libsoup,
cairo,
gtk3,
webkitgtk,
darwin,
}:
let
inherit (darwin.apple_sdk.frameworks) CoreServices Security SystemConfiguration;
in
rustPlatform.buildRustPackage rec {
pname = "tauri";
version = "1.7.1-unstable-2024-08-16";
@ -33,33 +29,46 @@ rustPlatform.buildRustPackage rec {
cargoHash = "sha256-VXg/dAhwPTSrLwJm8HNzAi/sVF9RqgpHIF3PZe1LjSA=";
nativeBuildInputs = [ pkg-config ];
buildInputs =
[ openssl ]
++ lib.optionals stdenv.hostPlatform.isLinux [
glibc
libsoup
cairo
gtk3
libsoup
webkitgtk
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
++ lib.optionals stdenv.hostPlatform.isDarwin (
with darwin.apple_sdk.frameworks;
[
CoreServices
Security
SystemConfiguration
];
nativeBuildInputs = [ pkg-config ];
]
);
passthru = {
# See ./doc/hooks/tauri.section.md
hook = callPackage ./hook.nix { };
tests = {
setupHooks = callPackage ./test-app.nix { };
};
};
meta = {
description = "Build smaller, faster, and more secure desktop applications with a web frontend";
mainProgram = "cargo-tauri";
homepage = "https://tauri.app/";
changelog = "https://github.com/tauri-apps/tauri/releases/tag/tauri-v${version}";
license = with lib.licenses; [
asl20 # or
mit
];
maintainers = with lib.maintainers; [
dit7ya
getchoo
happysalada
];
mainProgram = "cargo-tauri";
};
}

View File

@ -0,0 +1,60 @@
{
lib,
stdenv,
rustPlatform,
cargo-tauri,
darwin,
glib-networking,
libsoup,
openssl,
pkg-config,
webkitgtk,
wrapGAppsHook3,
}:
rustPlatform.buildRustPackage rec {
pname = "test-app";
inherit (cargo-tauri) version src;
# Basic example provided by upstream
sourceRoot = "${src.name}/examples/workspace";
cargoPatches = [
# https://github.com/NixOS/nixpkgs/issues/332957
./update-time-crate.patch
];
cargoHash = "sha256-ull9BWzeKsnMi4wcH67FnKFzTjqEdiRlM3f+EKIPvvU=";
nativeBuildInputs = [
cargo-tauri.hook
pkg-config
wrapGAppsHook3
];
buildInputs =
[ openssl ]
++ lib.optionals stdenv.isLinux [
glib-networking
libsoup
webkitgtk
]
++ lib.optionals stdenv.isDarwin (
with darwin.apple_sdk.frameworks;
[
AppKit
CoreServices
Security
WebKit
]
);
# No one should be actually running this, so lets save some time
buildType = "debug";
doCheck = false;
meta = {
inherit (cargo-tauri.hook.meta) platforms;
};
}

File diff suppressed because it is too large Load Diff

View File

@ -3,11 +3,10 @@
stdenv,
darwin,
fetchFromGitHub,
rust,
rustPlatform,
cargo-tauri,
cinny,
copyDesktopItems,
desktop-file-utils,
wrapGAppsHook3,
pkg-config,
openssl,
@ -16,7 +15,6 @@
glib-networking,
libayatana-appindicator,
webkitgtk,
makeDesktopItem,
}:
rustPlatform.buildRustPackage rec {
@ -58,27 +56,22 @@ rustPlatform.buildRustPackage rec {
--replace "libayatana-appindicator3.so.1" "${libayatana-appindicator}/lib/libayatana-appindicator3.so.1"
'';
postBuild = lib.optionalString stdenv.hostPlatform.isDarwin ''
cargo tauri build --bundles app --target "${rust.envVars.rustHostPlatform}"
'';
postInstall =
lib.optionalString stdenv.hostPlatform.isLinux ''
install -DT icons/128x128@2x.png $out/share/icons/hicolor/256x256@2/apps/cinny.png
install -DT icons/128x128.png $out/share/icons/hicolor/128x128/apps/cinny.png
install -DT icons/32x32.png $out/share/icons/hicolor/32x32/apps/cinny.png
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p "$out/Applications/"
cp -r "target/${rust.envVars.rustHostPlatform}/release/bundle/macos/Cinny.app" "$out/Applications/"
lib.optionalString stdenv.hostPlatform.isDarwin ''
ln -sf "$out/Applications/Cinny.app/Contents/MacOS/Cinny" "$out/bin/cinny"
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
desktop-file-edit \
--set-comment "Yet another matrix client for desktop" \
--set-key="Categories" --set-value="Network;InstantMessaging;" \
$out/share/applications/cinny.desktop
'';
nativeBuildInputs = [
copyDesktopItems
wrapGAppsHook3
pkg-config
cargo-tauri
cargo-tauri.hook
desktop-file-utils
];
buildInputs =
@ -97,20 +90,6 @@ rustPlatform.buildRustPackage rec {
darwin.apple_sdk.frameworks.WebKit
];
desktopItems = lib.optionals stdenv.hostPlatform.isLinux [
(makeDesktopItem {
name = "cinny";
exec = "cinny";
icon = "cinny";
desktopName = "Cinny";
comment = meta.description;
categories = [
"Network"
"InstantMessaging"
];
})
];
meta = {
description = "Yet another matrix client for desktop";
homepage = "https://github.com/cinnyapp/cinny-desktop";

View File

@ -1,6 +1,5 @@
{ rustPlatform
, libdeltachat
, perl
, pkg-config
}:
@ -10,10 +9,13 @@ rustPlatform.buildRustPackage {
inherit (libdeltachat) version src cargoLock buildInputs;
nativeBuildInputs = [
perl
pkg-config
];
env = {
OPENSSL_NO_VENDOR = true;
};
cargoBuildFlags = [ "--package" "deltachat-repl" ];
doCheck = false;

View File

@ -1,6 +1,5 @@
{ rustPlatform
, libdeltachat
, perl
, pkg-config
}:
@ -10,10 +9,13 @@ rustPlatform.buildRustPackage {
inherit (libdeltachat) version src cargoLock buildInputs;
nativeBuildInputs = [
perl
pkg-config
];
env = {
OPENSSL_NO_VENDOR = true;
};
cargoBuildFlags = [ "--package" "deltachat-rpc-server" ];
doCheck = false;

View File

@ -24,7 +24,6 @@ python3.pkgs.buildPythonApplication rec {
build-system = with python3.pkgs; [ poetry-core ];
pythonRelaxDeps = [
"textual"
"tzlocal"
];
@ -33,7 +32,21 @@ python3.pkgs.buildPythonApplication rec {
pyperclip
python-dateutil
pyyaml
textual
(textual.overridePythonAttrs (oldAttrs: {
version = "0.47.1";
src = fetchFromGitHub {
owner = "Textualize";
repo = "textual";
rev = "refs/tags/v0.47.1";
hash = "sha256-RFaZKQ+0o6ZvfZxx95a1FjSHVJ0VOIAfzkdxYQXYBKU=";
};
disabledTests = [
"test_tracked_slugs"
"test_textual_env_var"
"test_register_language"
"test_register_language_existing_language"
];
}))
tzlocal
];
@ -57,6 +70,7 @@ python3.pkgs.buildPythonApplication rec {
maintainers = with maintainers; [
khaneliman
wesleyjrz
kraanzu
];
mainProgram = "dooit";
};

View File

@ -56,7 +56,7 @@ buildRustPackage rec {
[
pnpm_9.configHook
nodejs
cargo-tauri
cargo-tauri.hook
pkg-config
]
++ lib.optionals stdenv.hostPlatform.isLinux [ wrapGAppsHook3 ]
@ -77,35 +77,8 @@ buildRustPackage rec {
darwin.apple_sdk_11_0.frameworks.WebKit
];
# remove once cargo-tauri.hook becomes available
# https://github.com/NixOS/nixpkgs/pull/335751
buildPhase = ''
runHook preBuild
cargo tauri build --bundles ${if stdenv.hostPlatform.isDarwin then "app" else "deb"}
runHook postBuild
'';
doCheck = false; # many scoring tests fail
# remove once cargo-tauri.hook becomes available
installPhase = ''
runHook preInstall
${lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p "$out"/Applications
cp -r src-tauri/target/release/bundle/macos/* "$out"/Applications
''}
${lib.optionalString stdenv.hostPlatform.isLinux ''
mkdir -p "$out"
cp -r src-tauri/target/release/bundle/deb/*/data/usr/* "$out"
''}
runHook postInstall
'';
postInstall = lib.optionalString stdenv.hostPlatform.isDarwin ''
makeWrapper "$out"/Applications/en-croissant.app/Contents/MacOS/en-croissant $out/bin/en-croissant
'';

View File

@ -0,0 +1,30 @@
{
stdenv,
lib,
cmake,
fetchFromGitHub,
}:
stdenv.mkDerivation rec {
pname = "ffts";
version = "0-unstable-2019-03-19";
src = fetchFromGitHub {
owner = "linkotec";
repo = "ffts";
rev = "2c8da4877588e288ff4cd550f14bec2dc7bf668c";
hash = "sha256-Cj0n7fwFAu6+3ojgczL0Unobdx/XzGNFvNVMXdyHXE4=";
};
nativeBuildInputs = [ cmake ];
cmakeFlags = [ "-DENABLE_SHARED=ON" ];
meta = {
description = "The Fastest Fourier Transform in the South";
homepage = "https://github.com/linkotec/ffts";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ bgamari ];
platforms = lib.platforms.linux;
};
}

View File

@ -0,0 +1,36 @@
{
lib,
stdenvNoCC,
fetchzip,
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "fragment-mono";
version = "1.21";
src = fetchzip {
url = "https://github.com/weiweihuanghuang/fragment-mono/releases/download/${finalAttrs.version}/fragment-mono-${finalAttrs.version}.zip";
hash = "sha256-H5s4rYDN2d0J+zVRgBzg8vfZXCA/jjHrGBV8o8Dxutc=";
};
installPhase = ''
runHook preInstall
install -Dm644 fonts/ttf/*.ttf -t $out/share/fonts/truetype
runHook postInstall
'';
meta = {
homepage = "https://github.com/weiweihuanghuang/fragment-mono";
description = "Helvetica Monospace Coding Font";
changelog = "https://github.com/weiweihuanghuang/fragment-mono/releases/tag/${finalAttrs.version}";
longDescription = ''
Fragment Mono is a monospaced coding version of Helvetica created
by modifying and extending Nimbus Sans by URW Design Studio.
'';
license = lib.licenses.ofl;
platforms = lib.platforms.all;
maintainers = [ lib.maintainers.noahgitsham ];
};
})

View File

@ -1,6 +1,6 @@
{
"name": "gancio",
"version": "1.19.1",
"version": "1.19.4",
"description": "A shared agenda for local communities",
"author": "lesion",
"scripts": {

View File

@ -12,19 +12,19 @@
}:
mkYarnPackage rec {
inherit (nodePackages) nodejs;
version = "1.19.1";
version = "1.19.4";
src = fetchFromGitLab {
domain = "framagit.org";
owner = "les";
repo = "gancio";
rev = "v${version}";
hash = "sha256-V63cnyPY9todiA4V/9aENEBOfO0g0bJZBjsOfTY1O0c=";
hash = "sha256-x8s7eBVmHCY3kAjHjACotCncvZq6OBiLPJGF6hvfawE=";
};
offlineCache = fetchYarnDeps {
yarnLock = src + "/yarn.lock";
hash = "sha256-ONPvBvT3zf8IVkIEOmiQgcjI7zPCFwDuQfo+fOvDGzM=";
hash = "sha256-LXeAyxZSZOm6GxRuJb5rlHTlQpYa1fdKSENVjwLY4tU=";
};
packageJSON = ./package.json;

View File

@ -18,10 +18,12 @@
libsoup,
moreutils,
openssl,
rust,
webkitgtk,
nix-update-script,
cacert,
}:
rustPlatform.buildRustPackage rec {
pname = "gitbutler";
version = "0.12.16";
@ -33,11 +35,10 @@ rustPlatform.buildRustPackage rec {
hash = "sha256-L4PVaNb3blpLIcyA7XLc71qwUPUADclxvbOkq1Jc1no=";
};
# deactivate the upstream updater in tauri configuration
# TODO: use `tauri build`'s `--config` flag with the release configuration instead of manually merging
# them. it doesn't seem to like using paths currently, even though it should.
# deactivate the upstream updater in tauri configuration & set the version
postPatch = ''
jq --slurp ".[0] * .[1] | .tauri.updater.active = false" crates/gitbutler-tauri/tauri.conf{,.release}.json | sponge crates/gitbutler-tauri/tauri.conf.json
tauri_conf="crates/gitbutler-tauri/tauri.conf.release.json"
jq '.package.version = "${version}" | .tauri.updater.active = false' "$tauri_conf" | sponge "$tauri_conf"
'';
cargoLock = {
@ -54,7 +55,7 @@ rustPlatform.buildRustPackage rec {
};
nativeBuildInputs = [
cargo-tauri
cargo-tauri.hook
desktop-file-utils
jq
moreutils
@ -82,7 +83,15 @@ rustPlatform.buildRustPackage rec {
]
);
# extended release configuration
tauriBuildFlags = [ "--config crates/gitbutler-tauri/tauri.conf.release.json" ];
env = {
# make sure `crates/gitbutler-tauri/inject-git-binaries.sh` can find our
# target dir
# https://github.com/gitbutlerapp/gitbutler/blob/56b64d778042d0e93fa362f808c35a7f095ab1d1/crates/gitbutler-tauri/inject-git-binaries.sh#L10C10-L10C26
TRIPLE_OVERRIDE = rust.envVars.rustHostPlatformSpec;
# `pnpm`'s `fetchDeps` and `configHook` uses a specific version of pnpm, not upstream's
COREPACK_ENABLE_STRICT = 0;
@ -95,14 +104,6 @@ rustPlatform.buildRustPackage rec {
# we also need to have `tracing` support in `tokio` for `console-subscriber`
RUSTFLAGS = "--cfg tokio_unstable";
tauriBundle =
{
Linux = "deb";
Darwin = "app";
}
.${stdenv.hostPlatform.uname.system}
or (throw "No tauri bundle available for ${stdenv.hostPlatform.uname.system}");
ESBUILD_BINARY_PATH = lib.getExe (
esbuild.override {
buildGoModule =
@ -128,39 +129,23 @@ rustPlatform.buildRustPackage rec {
OPENSSL_NO_VENDOR = true;
};
buildPhase = ''
runHook preBuild
preBuild = ''
pushd packages/ui
pnpm package
popd
cargo tauri build --bundles "$tauriBundle"
runHook postBuild
'';
installPhase =
''
runHook preInstall
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p $out/bin
cp -r target/release/bundle/macos $out/Applications
postInstall =
lib.optionalString stdenv.hostPlatform.isDarwin ''
mv $out/Applications/GitButler.app/Contents/MacOS/GitButler $out/bin/git-butler
ln -s $out/bin/git-butler $out/Applications/GitButler.app/Contents/MacOS/GitButler
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
cp -r target/release/bundle/"$tauriBundle"/*/data/usr $out
desktop-file-edit \
--set-comment "A Git client for simultaneous branches on top of your existing workflow." \
--set-key="Keywords" --set-value="git;" \
--set-key="StartupWMClass" --set-value="GitButler" \
$out/share/applications/git-butler.desktop
''
+ ''
runHook postInstall
'';
# the `gitbutler-git` crate's checks do not support release mode

View File

@ -1,29 +1,3 @@
diff --git a/data/meson.build b/data/meson.build
index 5e4ce69..982b3c9 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -31,7 +31,7 @@ i18n.merge_file(
install_data(
'org.gnome.pomodoro.gschema.xml',
- install_dir: get_option('datadir') / 'glib-2.0' / 'schemas',
+ install_dir: gschema_dir,
)
subdir('icons')
diff --git a/meson-post-install.sh b/meson-post-install.sh
index bf4013a..c87fba4 100644
--- a/meson-post-install.sh
+++ b/meson-post-install.sh
@@ -7,7 +7,7 @@ datadir="${prefix}/$1"
# want/need us to do the below
if [ -z "${DESTDIR}" ]; then
echo "Compiling GSchema..."
- glib-compile-schemas "${datadir}/glib-2.0/schemas"
+ glib-compile-schemas "${datadir}/gsettings-schemas/@pname@-@version@/glib-2.0/schemas"
echo "Updating icon cache..."
gtk-update-icon-cache -f -t "${datadir}/icons/hicolor"
diff --git a/meson.build b/meson.build
index 09857a1..a07d27c 100644
--- a/meson.build
@ -38,3 +12,12 @@ index 09857a1..a07d27c 100644
plugin_libdir = get_option('prefix') / get_option('libdir') / meson.project_name() / 'plugins'
extension_dir = get_option('prefix') / get_option('datadir') / 'gnome-shell' / 'extensions' / 'pomodoro@arun.codito.in'
@@ -134,7 +135,7 @@
subdir('tests')
gnome.post_install(
- glib_compile_schemas: true,
+ glib_compile_schemas: false,
gtk_update_icon_cache: true,
update_desktop_database: true,
)

View File

@ -1,36 +1,36 @@
{ lib
, stdenv
, fetchFromGitHub
, substituteAll
, meson
, ninja
, pkg-config
, wrapGAppsHook3
, desktop-file-utils
, libcanberra
, gst_all_1
, vala
, gtk3
, gom
, sqlite
, libxml2
, glib
, gobject-introspection
, json-glib
, libpeas
, gsettings-desktop-schemas
, gettext
{
lib,
stdenv,
fetchFromGitHub,
substituteAll,
meson,
ninja,
pkg-config,
wrapGAppsHook3,
desktop-file-utils,
libcanberra,
gst_all_1,
vala,
gtk3,
gom,
sqlite,
libxml2,
glib,
gobject-introspection,
json-glib,
libpeas,
gsettings-desktop-schemas,
gettext,
}:
stdenv.mkDerivation rec {
pname = "gnome-pomodoro";
version = "0.24.1";
version = "0.26.0";
src = fetchFromGitHub {
owner = pname;
repo = pname;
rev = version;
hash = "sha256-Ml3znMz1Q9593rMgfAST8k9QglxMG9ocFD7W8kaFWCw=";
hash = "sha256-icyS/K6H90/DWYvqJ7f7XXTTuIwLea3k+vDDEBYil6o=";
};
patches = [
@ -42,6 +42,13 @@ stdenv.mkDerivation rec {
})
];
# Manually compile schemas for package since meson option
# gnome.post_install(glib_compile_schemas) used by package tries to compile in
# the wrong dir.
preFixup = ''
glib-compile-schemas ${glib.makeSchemaPath "$out" "${pname}-${version}"}
'';
nativeBuildInputs = [
meson
ninja
@ -76,7 +83,10 @@ stdenv.mkDerivation rec {
This GNOME utility helps to manage time according to Pomodoro Technique.
It intends to improve productivity and focus by taking short breaks.
'';
maintainers = with maintainers; [ aleksana ];
maintainers = with maintainers; [
aleksana
herschenglime
];
license = licenses.gpl3Plus;
platforms = platforms.linux;
};

View File

@ -4,20 +4,22 @@
buildGoModule,
}:
let
version = "1.11.0";
version = "1.12.0";
in
buildGoModule {
pname = "gotestsum";
inherit version;
# move back to stable releases when build is successful
version = "${version}-unstable-2024-09-17";
src = fetchFromGitHub {
owner = "gotestyourself";
repo = "gotestsum";
rev = "v${version}";
hash = "sha256-Sq0ejnX7AJoPf3deBge8PMOq1NlMbw+Ljn145C5MQ+s=";
rev = "2f61a73f997821b2e5a1823496e8362630e213f9";
hash = "sha256-5zgchATcpoM4g5Mxex9wYanzrR0Pie9GYqx48toORkM=";
};
vendorHash = "sha256-zUqa6xlDV12ZV4N6+EZ7fLPsL8U+GB7boQ0qG9egvm0=";
vendorHash = "sha256-DR4AyEhgD71hFFEAnPfSxaWYFFV7FlPugZBHUjDynEE=";
doCheck = false;

View File

@ -1,12 +1,12 @@
{
"name": "@withgraphite/graphite-cli",
"version": "1.4.4",
"version": "1.4.5",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@withgraphite/graphite-cli",
"version": "1.4.4",
"version": "1.4.5",
"hasInstallScript": true,
"license": "None",
"dependencies": {

View File

@ -7,14 +7,14 @@
buildNpmPackage rec {
pname = "graphite-cli";
version = "1.4.4";
version = "1.4.5";
src = fetchurl {
url = "https://registry.npmjs.org/@withgraphite/graphite-cli/-/graphite-cli-${version}.tgz";
hash = "sha256-a/ouR93i887/QnIeSZX5zVgF194LCCc2hNmSGsH8aDY=";
hash = "sha256-ftTJPI3h/v2W3t5CQHn0CdHTYcDeoOdGjfJcRZi58Bc=";
};
npmDepsHash = "sha256-MwJ7ALO0Ebh7K0LW4xJ79tL1FikNe5hiY06X1lwXlC4=";
npmDepsHash = "sha256-jXrH8HltxnIU/TIllYZyUueqCEI3Q9rhUY1tzHvXvSE=";
postPatch = ''
ln -s ${./package-lock.json} package-lock.json

View File

@ -5,7 +5,7 @@ https://bugs.gentoo.org/706154
echo '#define TIFFSTRIPBYTECOUNTS uint32_t'
echo '#define TIFFVERSION TIFF_VERSION'
echo '#define TIFFHEADER TIFFHeader';;
- 4.[0123456]) tiff_runlen_t="uint32_t"
- 4.[01234567]) tiff_runlen_t="uint32_t"
+ 4.[0-9]) tiff_runlen_t="uint32_t"
tiff_offset_t="uint64_t"
echo '#define TIFFSTRIPBYTECOUNTS uint64_t'

View File

@ -32,8 +32,8 @@
let
pname = "hylafaxplus";
version = "7.0.8";
hash = "sha512-6wTLVcaHpASy+2i+jeoJ1cM2aLgI5vznGrLd4NCkLHiOxlfCh/ASRaj2Nxt9ZZ5NN/deEwf9tNSZ7MkFZHVsqA==";
version = "7.0.9";
hash = "sha512-3OJwM4vFC9pzPozPobFLiNNx/Qnkl8BpNNziRUpJNBDLBxjtg/eDm3GnprS2hpt7VUoV4PCsFvp1hxhNnhlUwQ==";
configSite = substituteAll {
name = "${pname}-config.site";

View File

@ -8,20 +8,20 @@
buildGoModule rec {
pname = "hyprnotify";
version = "0.7.0";
version = "0.8.0";
src = fetchFromGitHub {
owner = "codelif";
repo = "hyprnotify";
rev = "v${version}";
hash = "sha256-dL+W+iMwRNw9042bs2XUFPMCCqIvDENXOMzhcLh+RL4=";
hash = "sha256-+vBOHXaCWEoQ/Lk9VwP55XqlhSzSS9hoVg4FQOj8dIU=";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ alsa-lib ];
vendorHash = "sha256-AZDtaiSNq7em876Q9f+YeDxboqVwA8IE9dDM6zggFXs=";
vendorHash = "sha256-2BuWJ57jELtfj7SGr+dLdC2KFc5sD2bC8MgjUHaIXUs=";
meta = {
description = "DBus Implementation of Freedesktop Notification spec for 'hyprctl notify'";

View File

@ -7,13 +7,13 @@
stdenvNoCC.mkDerivation {
pname = "jawiki-all-titles-in-ns0";
version = "0-unstable-2024-09-11";
version = "0-unstable-2024-10-01";
src = fetchFromGitHub {
owner = "musjj";
repo = "jawiki-archive";
rev = "d205f63665e351ea853edc72157f14daa22a227f";
hash = "sha256-Jj2vH8UMhgSzWv+RnOipnVNSdeOF6jttcLN/kVYa4D4=";
rev = "1e26e5efa36eea5322f55b178a5c4d5a5439feb9";
hash = "sha256-8jzsECzrrcHeMvV2K89WagSiCXHjEDEfUwLDanVVuas=";
};
installPhase = ''

View File

@ -7,15 +7,15 @@
stdenvNoCC.mkDerivation {
pname = "jp-zip-code";
version = "0-unstable-2024-09-01";
version = "0-unstable-2024-10-01";
# This package uses a mirror as the source because the
# original provider uses the same URL for updated content.
src = fetchFromGitHub {
owner = "musjj";
repo = "jp-zip-codes";
rev = "995d7cce9ae68a31efe4b5882137dd67ac26f7ff";
hash = "sha256-VnzczwIbYPUpWpWLMm2TYGqiDxzZaDDKs7xh4F3xA0E=";
rev = "94ddc993224a6e2c65480f9109564f7f68125665";
hash = "sha256-/2f/HXxrxKc6dv5E67S59xIpdJUkh0fX0lyTuo2y1N4=";
};
installPhase = ''

View File

@ -1,16 +1,15 @@
{ lib
, fetchFromGitHub
, copyDesktopItems
, stdenv
, rustc
, rustPlatform
, cargo
, cargo-tauri
, desktop-file-utils
, openssl
, libayatana-appindicator
, webkitgtk
, pkg-config
, makeDesktopItem
, pnpm
, nodejs
}:
@ -49,10 +48,10 @@ stdenv.mkDerivation (finalAttrs: {
rustPlatform.cargoSetupHook
cargo
rustc
cargo-tauri
cargo-tauri.hook
desktop-file-utils
nodejs
pnpm.configHook
copyDesktopItems
pkg-config
];
@ -62,28 +61,13 @@ stdenv.mkDerivation (finalAttrs: {
webkitgtk
];
preBuild = ''
cargo tauri build -b deb
postInstall = lib.optionalString stdenv.isLinux ''
desktop-file-edit \
--set-comment "An UNOFFICIAL cross-platform KakaoTalk client" \
--set-key="Categories" --set-value="Network;InstantMessaging;" \
$out/share/applications/kiwi-talk.desktop
'';
preInstall = ''
mv target/release/bundle/deb/*/data/usr/ $out
# delete the generated desktop entry
rm -r $out/share/applications
'';
desktopItems = [
(makeDesktopItem {
name = "KiwiTalk";
exec = "kiwi-talk";
icon = "kiwi-talk";
desktopName = "KiwiTalk";
comment = "An UNOFFICIAL cross-platform KakaoTalk client";
categories = [ "Network" "InstantMessaging" ];
terminal = false;
})
];
meta = with lib; {
description = "UNOFFICIAL cross-platform KakaoTalk client written in TypeScript & Rust (SolidJS, tauri)";
homepage = "https://github.com/KiwiTalk/KiwiTalk";

View File

@ -2,114 +2,115 @@
# Please dont edit it manually, your changes might get overwritten!
{ fetchNuGet }: [
(fetchNuGet { pname = "Avalonia"; version = "11.0.5"; sha256 = "1l8vpw7dmkgll197i42r98ikkl0g08469wkl1kxkcv8f0allgah6"; })
(fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2023020321"; sha256 = "1az4s1g22ipak9a3xfh55z2h3rm6lpqh7svbpw6ag4ysrgsjjsjd"; })
(fetchNuGet { pname = "Avalonia.BuildServices"; version = "0.0.29"; sha256 = "05mm7f0jssih3gbzqfgjnfq5cnqa85ihsg0z1897ciihv8qd3waq"; })
(fetchNuGet { pname = "Avalonia.Controls.ColorPicker"; version = "11.0.5"; sha256 = "0w1909yjg1s1h6zzxbfw1dazvlknpgk9v7d03ik7ihd14lxzr1i2"; })
(fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "11.0.5"; sha256 = "14nr767zhxcqwis901sn5s9qala0wf2ip4pic3ncdvkhyhq6w9fs"; })
(fetchNuGet { pname = "Avalonia.Desktop"; version = "11.0.5"; sha256 = "1zqp8whkvm95zxhjpwska7rhkbxjfkv2fz3821pn782931pn59ah"; })
(fetchNuGet { pname = "Avalonia.Diagnostics"; version = "11.0.5"; sha256 = "1plr03dgq24gjlcx39qlbcg2ywh7in58yfkkq9snvnagh8yk3ifi"; })
(fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "11.0.5"; sha256 = "0sn6c3mqvc62vhy8ssmz515wbcaq418qfrck67zysp2qzw5iyv9v"; })
(fetchNuGet { pname = "Avalonia.HtmlRenderer"; version = "11.0.0"; sha256 = "1glnc82dasxcajb84h41273cfaa5apxwfrh12bgd294hfzbza40c"; })
(fetchNuGet { pname = "Avalonia.Native"; version = "11.0.5"; sha256 = "1n41g1z36sgvhfl7bdavc3j7ccr3qkbqjc4znimqazzyfifh0m99"; })
(fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "11.0.5"; sha256 = "0a6a8lbpna3z5bcall7a953r3xjibcl90ic21gimwhipyp29sfn1"; })
(fetchNuGet { pname = "Avalonia.Skia"; version = "11.0.5"; sha256 = "008pqpim91i6mya0nfn3g9gclh0dw5mqmhi2fdalbh62sa8a18xc"; })
(fetchNuGet { pname = "Avalonia.Themes.Fluent"; version = "11.0.5"; sha256 = "1zhg11c8iah06gkv6gk7vzs0q9lbx1whfma5p2s00k3kyhv9lcqi"; })
(fetchNuGet { pname = "Avalonia.Themes.Simple"; version = "11.0.5"; sha256 = "1i6xpihpw32i9mywzzhw0nyc2gkifmri6ylila21y8xb0jdazdyv"; })
(fetchNuGet { pname = "Avalonia.Win32"; version = "11.0.5"; sha256 = "03rbx4msnl8jvw1017wi88rxvgg8iz7idy7wajp3nzk9m0c4pilx"; })
(fetchNuGet { pname = "Avalonia.X11"; version = "11.0.5"; sha256 = "1bixdr5yzd9spyjc4n2kf1bwg52q3p5akj9xsr25xp310j3kgyxf"; })
(fetchNuGet { pname = "CommunityToolkit.Mvvm"; version = "8.2.2"; sha256 = "01kkwhz3r7l9d70p6mcgpdc0f05dad0lv6dmcj4sq9ry9ic6pnmx"; })
(fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2.3"; sha256 = "115aybicqs9ijjlcv6k6r5v0agkjm1bm1nkd0rj3jglv8s0xvmp2"; })
(fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2.3"; sha256 = "1f18ahwkaginrg0vwsi6s56lvnqvvxv7pzklfs5lnknasxy1a76z"; })
(fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2.3"; sha256 = "052d8frpkj4ijs6fm6xp55xbv95b1s9biqwa0w8zp3rgm88m9236"; })
(fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2.3"; sha256 = "043hv36bg5240znbm8x5la7py17m4jfzy57q3ka32f6zjld83j36"; })
(fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2.3"; sha256 = "08khd2jqm8sw58ljz5srangzfm2sz3gd2q1jzc5fr80lj8rv6r74"; })
(fetchNuGet { pname = "ini-parser-netstandard"; version = "2.5.2"; sha256 = "14alsxh7ik07xl9xab8bdi108f4xhz8vcchxvxy1k5w3zf3gdml9"; })
(fetchNuGet { pname = "MicroCom.Runtime"; version = "0.11.0"; sha256 = "0p9c3m0zk59x9dcqw077hzd2yk60myisbacvm36mnwpcjwzjkp2m"; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.0.0"; sha256 = "0bbl0jpqywqmzz2gagld1p2gvdfldjfjmm25hil9wj2nq1zc4di8"; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.8.0"; sha256 = "12n7rvr39bzkf2maw7zplw8rwpxpxss4ich3bb2pw770rx4nyvyw"; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.8.0"; sha256 = "1kmry65csvfn72zzc16vj1nfbfwam28wcmlrk3m5rzb8ydbzgylb"; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.8.0"; sha256 = "0w0yx0lpg54iw5jazqk46h48gx43ij32gwac8iywdj6kxfxm03vw"; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.8.0"; sha256 = "0hjgxcsj5zy27lqk0986m59n5dbplx2vjjla2lsvg4bwg8qa7bpk"; })
(fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; sha256 = "0gw297dgkh0al1zxvgvncqs0j15lsna9l1wpqas4rflmys440xvb"; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "7.0.0"; sha256 = "121zs4jp8iimgbpzm3wsglhjwkc06irg1pxy8c1zcdlsg34cfq1p"; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "7.0.0"; sha256 = "181d7mp9307fs17lyy42f8cxnjwysddmpsalky4m0pqxcimnr6g7"; })
(fetchNuGet { pname = "Microsoft.Extensions.Http"; version = "7.0.0"; sha256 = "196b13zkkq0fhfgigkhwcw1hhaj4dj5pc27z7d5niaizzx6ycwiw"; })
(fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "7.0.0"; sha256 = "1bqd3pqn5dacgnkq0grc17cgb2i0w8z1raw12nwm3p3zhrfcvgxf"; })
(fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "7.0.0"; sha256 = "1gn7d18i1wfy13vrwhmdv1rmsb4vrk26kqdld4cgvh77yigj90xs"; })
(fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "7.0.0"; sha256 = "0b90zkrsk5dw3wr749rbynhpxlg4bgqdnd7d5vdlw2g9c7zlhgx6"; })
(fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "7.0.0"; sha256 = "1b4km9fszid9vp2zb3gya5ni9fn8bq62bzaas2ck2r7gs0sdys80"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; sha256 = "08vh1r12g6ykjygq5d3vq09zylgb84l63k49jc4v8faw9g93iqqm"; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; sha256 = "1507hnpr9my3z4w1r6xk5n0s1j3y6a2c2cnynj76za7cphxi1141"; })
(fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; sha256 = "193xwf33fbm0ni3idxzbr5fdq3i2dlfgihsac9jj7whj0gd902nh"; })
(fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; sha256 = "0c6pcj088g1yd1vs529q3ybgsd2vjlk5y1ic6dkmbhvrp5jibl9p"; })
(fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; sha256 = "0bv5qgm6vr47ynxqbnkc7i797fdi8gbjjxii173syrx14nmrkwg0"; })
(fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; sha256 = "1daqf33hssad94lamzg01y49xwndy2q97i2lrb7mgn28656qia1x"; })
(fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; sha256 = "0l8xz8zn46w4d10bcn3l4yyn4vhb3lrj2zw8llvz7jk14k4zps5x"; })
(fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; sha256 = "02c9h3y35pylc0zfq3wcsvc5nqci95nrkq0mszifc0sjx7xrzkly"; })
(fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; sha256 = "0zyri97dfc5vyaz9ba65hjj1zbcrzaffhsdlpxc9bh09wy22fq33"; })
(fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; sha256 = "0x1mm8c6iy8rlxm8w9vqw7gb7s1ljadrn049fmf70cyh42vdfhrf"; })
(fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "03kickal0iiby82wa5flar18kyv82s9s6d4xhk5h4bi5kfcyfjzl"; })
(fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; sha256 = "1cqh1sv3h5j7ixyb7axxbdkqx6cxy00p4np4j91kpm492rf4s25b"; })
(fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; sha256 = "0bh5bi25nk9w9xi8z23ws45q5yia6k7dg3i4axhfqlnj145l011x"; })
(fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "0c3g3g3jmhlhw4klrc86ka9fjbl7i59ds1fadsb2l8nqf8z3kb19"; })
(fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; sha256 = "0aqqi1v4wx51h51mk956y783wzags13wa7mgqyclacmsmpv02ps3"; })
(fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; sha256 = "03mnvkhskbzxddz4hm113zsch1jyzh2cs450dk3rgfjp8crlw1va"; })
(fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "16rnxzpk5dpbbl1x354yrlsbvwylrq456xzpsha1n9y3glnhyx9d"; })
(fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0hkg03sgm2wyq8nqk6dbm9jh5vcq57ry42lkqdmfklrw89lsmr59"; })
(fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0c2p354hjx58xhhz7wv6div8xpi90sc6ibdm40qin21bvi7ymcaa"; })
(fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; sha256 = "15hgf6zaq9b8br2wi1i3x0zvmk410nlmsmva9p0bbg73v6hml5k4"; })
(fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "18pzfdlwsg2nb1jjjjzyb5qlgy6xjxzmhnfaijq5s2jw3cm3ab97"; })
(fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0qyynf9nz5i7pc26cwhgi8j62ps27sqmf78ijcfgzab50z9g8ay3"; })
(fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1klrs545awhayryma6l7g2pvnp9xy4z0r1i40r80zb45q3i9nbyf"; })
(fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0zcxjv5pckplvkg0r6mw3asggm7aqzbdjimhvsasb0cgm59x09l3"; })
(fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "0vhynn79ih7hw7cwjazn87rm9z9fj0rvxgzlab36jybgcpcgphsn"; })
(fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "160p68l2c7cqmyqjwxydcvgw7lvl1cr0znkw8fp24d1by9mqc8p3"; })
(fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "15zrc8fgd8zx28hdghcj5f5i34wf3l6bq5177075m2bc2j34jrqy"; })
(fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; sha256 = "1p4dgxax6p7rlgj4q73k73rslcnz4wdcv8q2flg1s8ygwcm58ld5"; })
(fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "1lps7fbnw34bnh3lm31gs5c0g0dh7548wfmb8zz62v0zqz71msj5"; })
(fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; sha256 = "1jx02q6kiwlvfksq1q9qr17fj78y5v6mwsszav4qcz9z25d5g6vk"; })
(fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; sha256 = "0pnxxmm8whx38dp6yvwgmh22smknxmqs5n513fc7m4wxvs1bvi4p"; })
(fetchNuGet { pname = "SharpCompress"; version = "0.33.0"; sha256 = "1j94hfjvkygpp97svv75jay0rmnx9ygg86d5syyahl9hayns4ig9"; })
(fetchNuGet { pname = "SkiaSharp"; version = "2.88.6"; sha256 = "0xs11zjw9ha68maw3l825kfwlrid43qwy0mswljxhpjh0y1k6k6b"; })
(fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.6"; sha256 = "0cg38xgddww1y93xrnbfn40sin63yl39j5zm7gm5pdgp5si0cf2n"; })
(fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.6"; sha256 = "1fp9h8c8k6sbsh48b69dc6461isd4dajq7yw5i7j6fhkas78q4zf"; })
(fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.6"; sha256 = "02wpxwqwknhdhkl00in766samqfzi7r6jmhxs4d047v0fmygv1h8"; })
(fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.6"; sha256 = "1w2mwcwkqvrg4x4ybc4674xnkqwh1n2ihg520gqgpnqfc11ghc4n"; })
(fetchNuGet { pname = "System.Collections"; version = "4.3.0"; sha256 = "19r4y64dqyrq6k4706dnyhhw7fs24kpp3awak7whzss39dakpxk9"; })
(fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; sha256 = "1kvcllagxz2q92g81zkz81djkn2lid25ayjfgjalncyc68i15p0r"; })
(fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; sha256 = "1jj6f6g87k0iwsgmg3xmnn67a14mq88np0l1ys5zkxhkvbc8976p"; })
(fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; sha256 = "00yjlf19wjydyr6cfviaph3vsjzg3d5nvnya26i2fvfg53sknh3y"; })
(fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; sha256 = "02n8rzm58dac2np8b3xw8ychbvylja4nh6938l5k2fhyn40imlgz"; })
(fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; sha256 = "1d951hrvrpndk7insiag80qxjbf2y0y39y8h5hnq9612ws661glk"; })
(fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; sha256 = "1cp68vv683n6ic2zqh2s1fn4c2sd87g5hpp6l4d4nj4536jz98ki"; })
(fetchNuGet { pname = "System.IO"; version = "4.3.0"; sha256 = "05l9qdrzhm4s5dixmx68kxwif4l99ll5gqmh7rqgw554fx0agv5f"; })
(fetchNuGet { pname = "System.IO.Pipelines"; version = "6.0.0"; sha256 = "08211lvckdsdbd67xz4f6cyk76cli565j0dby1grlc4k9bhwby65"; })
(fetchNuGet { pname = "System.Linq"; version = "4.3.0"; sha256 = "1w0gmba695rbr80l1k2h4mrwzbzsyfl2z4klmpbsvsg5pm4a56s7"; })
(fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; sha256 = "0ky2nrcvh70rqq88m9a5yqabsl4fyd17bpr63iy2mbivjs2nyypv"; })
(fetchNuGet { pname = "System.Memory"; version = "4.5.4"; sha256 = "14gbbs22mcxwggn0fcfs1b062521azb9fbb7c113x0mq6dzq9h6y"; })
(fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; sha256 = "1kzrj37yzawf1b19jq0253rcs8hsq1l2q8g69d7ipnhzb0h97m59"; })
(fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; sha256 = "191p63zy5rpqx7dnrb3h7prvgixmk168fhvvkkvhlazncf8r3nc2"; })
(fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; sha256 = "04r1lkdnsznin0fj4ya1zikxiqr0h6r6a1ww2dsm60gqhdrf0mvx"; })
(fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; sha256 = "0xl55k0mw8cd8ra6dxzh974nxif58s3k1rjv1vbd7gjbjr39j11m"; })
(fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; sha256 = "11f8y3qfysfcrscjpjym9msk7lsfxkk4fmz9qq95kn3jd0769f74"; })
(fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; sha256 = "0w1n67glpv8241vnpz1kl14sy7zlnw414aqwj4hcx5nd86f6994q"; })
(fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; sha256 = "0ql7lcakycrvzgi9kxz1b3lljd990az1x6c4jsiwcacrvimpib5c"; })
(fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; sha256 = "02bly8bdc98gs22lqsfx9xicblszr2yan7v2mmw3g7hy6miq5hwq"; })
(fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; sha256 = "17qsl5nanlqk9iz0l5wijdn6ka632fs1m1fvx18dfgswm258r3ss"; })
(fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; sha256 = "04xqa33bld78yv5r93a8n76shvc8wwcdgr1qvvjh959g3rc31276"; })
(fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; sha256 = "0y2ssg08d817p0vdag98vn238gyrrynjdj4181hdg780sif3ykp1"; })
(fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; sha256 = "0sjqlzsryb0mg4y4xzf35xi523s4is4hz9q4qgdvlvgivl7qxn49"; })
(fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; sha256 = "066ixvgbf2c929kgknshcxqj6539ax7b9m570cp8n179cpfkapz7"; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; sha256 = "119br3pd85lq8zcgh4f60jzmv1g976q1kdgi3hvqdlhfbw6siz2j"; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; sha256 = "0qm741kh4rh57wky16sq4m0v05fxmkjjr87krycf5vp9f0zbahbc"; })
(fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; sha256 = "1ykp3dnhwvm48nap8q23893hagf665k0kn3cbgsqpwzbijdcgc60"; })
(fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; sha256 = "0sw2gfj2xr7sw9qjn0j3l9yw07x73lcs97p8xfc9w1x9h5g5m7i8"; })
(fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; sha256 = "00hywrn4g7hva1b2qri2s6rabzwgxnbpw9zfxmz28z09cpwwgh7j"; })
(fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; sha256 = "1f04lkir4iladpp51sdgmis9dj4y8v08cka0mbmsy0frc9a4gjqr"; })
(fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; sha256 = "1z21qyfs6sg76rp68qdx0c9iy57naan89pg7p6i3qpj8kyzn921w"; })
(fetchNuGet { pname = "System.Threading"; version = "4.3.0"; sha256 = "0rw9wfamvhayp5zh3j7p1yfmx9b5khbf4q50d8k5rk993rskfd34"; })
(fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; sha256 = "134z3v9abw3a6jsw17xl3f6hqjpak5l682k2vz39spj4kmydg6k7"; })
(fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; sha256 = "0y6ncasgfcgnjrhynaf0lwpkpkmv4a07sswwkwbwb5h7riisj153"; })
(fetchNuGet { pname = "Tmds.DBus.Protocol"; version = "0.15.0"; sha256 = "0d99kcs7r9cp6gpyc7z230czkkyx4164x86dhy0mca73f2ykc2g2"; })
(fetchNuGet { pname = "AnimatedImage.Avalonia"; version = "1.0.7"; hash = "sha256-E3wguYRmXYbdP7qcVER5IdxvB5S7rbGoZD7+jwrk5zM="; })
(fetchNuGet { pname = "Avalonia"; version = "11.0.5"; hash = "sha256-BqpHqQIObTb7DHTyZAgCD9A5I0pZkHhSoPTN2g6/G9E="; })
(fetchNuGet { pname = "Avalonia.Angle.Windows.Natives"; version = "2.1.0.2023020321"; hash = "sha256-TWop9cvak6cMv2vrA/GlpuYBxS8Fuj5UmupGIV7Q5Ks="; })
(fetchNuGet { pname = "Avalonia.BuildServices"; version = "0.0.29"; hash = "sha256-WPHRMNowRnYSCh88DWNBCltWsLPyOfzXGzBqLYE7tRY="; })
(fetchNuGet { pname = "Avalonia.Controls.ColorPicker"; version = "11.0.5"; hash = "sha256-Iob8OyWhwXhmHKCdnea7dtL9VQvcrf6/gUGHJ30CKXA="; })
(fetchNuGet { pname = "Avalonia.Controls.DataGrid"; version = "11.0.5"; hash = "sha256-2iVuMPRw7sbsYPGSG4XjQFGFky5WB5B05Jh1+I852ZI="; })
(fetchNuGet { pname = "Avalonia.Desktop"; version = "11.0.5"; hash = "sha256-UKVibxhJoGNvEGh8J/Z0sq8J81FT8yth/yXVPSFHF/8="; })
(fetchNuGet { pname = "Avalonia.Diagnostics"; version = "11.0.5"; hash = "sha256-0cUxPYJP2W11wnM6j4qNB3IvHlsUp9EZlY8I/NoAmd4="; })
(fetchNuGet { pname = "Avalonia.FreeDesktop"; version = "11.0.5"; hash = "sha256-O20fC/9YXO3/MZNlh1EgWLHFSyi/ao083MKwjetgxmo="; })
(fetchNuGet { pname = "Avalonia.HtmlRenderer"; version = "11.0.0"; hash = "sha256-DBD113eQJNHeEgFmx/tVRSnHxhGBQIKWVKxr1QRilr4="; })
(fetchNuGet { pname = "Avalonia.Native"; version = "11.0.5"; hash = "sha256-KVUAXXT+f4VrtJ8widfEIzN25GBbtXWog/tpM354gdg="; })
(fetchNuGet { pname = "Avalonia.Remote.Protocol"; version = "11.0.5"; hash = "sha256-wTqdxPU3Ql7jC4JFkChbUfaRR0nqUKrYKn8oexdFyig="; })
(fetchNuGet { pname = "Avalonia.Skia"; version = "11.0.5"; hash = "sha256-rKOgkNLCwEVVcyLCimvhDUDKXnrDOguUryaGVOPFFwE="; })
(fetchNuGet { pname = "Avalonia.Themes.Fluent"; version = "11.0.5"; hash = "sha256-ETOaNvRzTAC0uEVVB3noiyYM9N9nPrPnMwCqiFgID/4="; })
(fetchNuGet { pname = "Avalonia.Themes.Simple"; version = "11.0.5"; hash = "sha256-27evmgSrIx+EopF6E3N1cT7BvAUc/s99TVEMfmG83cQ="; })
(fetchNuGet { pname = "Avalonia.Win32"; version = "11.0.5"; hash = "sha256-ncZLGKhpfjuuVPz4Fs+P6L3dM0KRnwAC3xJRqyvpKw8="; })
(fetchNuGet { pname = "Avalonia.X11"; version = "11.0.5"; hash = "sha256-rvs3hwRh3F5E1j3JqcodWJTHV3BTWMKkvzq170tuPa4="; })
(fetchNuGet { pname = "CommunityToolkit.Mvvm"; version = "8.2.2"; hash = "sha256-vdprWEw+J6yJZLWZTUFTrQAHWLuPVXPBaYmePD7kcwY="; })
(fetchNuGet { pname = "HarfBuzzSharp"; version = "2.8.2.3"; hash = "sha256-4tbdgUabPjlkBm3aUFeocj4Fdslmms2olDFpzOLyqoQ="; })
(fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Linux"; version = "2.8.2.3"; hash = "sha256-3xwVfNfKTkuLdnT+e3bfG9tNTdEmar7ByzY+NTlUKLg="; })
(fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.macOS"; version = "2.8.2.3"; hash = "sha256-ZohUEaovj/sRB4rjuJIOq6S9eim3m+qMlpHIebNDTRQ="; })
(fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.WebAssembly"; version = "2.8.2.3"; hash = "sha256-ZsiBGpXfODHUHPgU/50k9QR/j6Klo7rsB0SUt8zYcBA="; })
(fetchNuGet { pname = "HarfBuzzSharp.NativeAssets.Win32"; version = "2.8.2.3"; hash = "sha256-5GSzM5IUoOwK+zJg0d74WlT3n1VZly8pKlyjiqVocCI="; })
(fetchNuGet { pname = "ini-parser-netstandard"; version = "2.5.2"; hash = "sha256-idb2hvuDlxl83x0yttGHnTgEQmwLLdUT7QfMeGDXVJE="; })
(fetchNuGet { pname = "MicroCom.Runtime"; version = "0.11.0"; hash = "sha256-VdwpP5fsclvNqJuppaOvwEwv2ofnAI5ZSz2V+UEdLF0="; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.Analyzers"; version = "3.0.0"; hash = "sha256-KDbCfsBWSJ5ohEXUKp1s1LX9xA2NPvXE/xVzj68EdC0="; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.Common"; version = "3.8.0"; hash = "sha256-3G9vSc/gHH7FWgOySLTut1+eEaf3H66qcPOvNPLOx4o="; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp"; version = "3.8.0"; hash = "sha256-i/r3V/No/VzqmJlWxpGoirvlbJDbBPa/ONZtzYrxuc4="; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.CSharp.Scripting"; version = "3.8.0"; hash = "sha256-fA9Qu+vTyMZ9REzxJ4aMg/SHCDRk4q9k4ZGUdynoHnA="; })
(fetchNuGet { pname = "Microsoft.CodeAnalysis.Scripting.Common"; version = "3.8.0"; hash = "sha256-866jMHp8kbc1FYpKuUWnd7ViU6kGJTAxPcL/IjXrT0I="; })
(fetchNuGet { pname = "Microsoft.CSharp"; version = "4.3.0"; hash = "sha256-a3dAiPaVuky0wpcHmpTVtAQJNGZ2v91/oArA+dpJgj8="; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection"; version = "7.0.0"; hash = "sha256-N2DHyHiaNvYDQ77f8HI0gE0uIX2aj/rvejVGdCXRP4g="; })
(fetchNuGet { pname = "Microsoft.Extensions.DependencyInjection.Abstractions"; version = "7.0.0"; hash = "sha256-55lsa2QdX1CJn1TpW1vTnkvbGXKCeE9P0O6AkW49LaA="; })
(fetchNuGet { pname = "Microsoft.Extensions.Http"; version = "7.0.0"; hash = "sha256-PHLmTf8/qmhLO/8IdotsRCoIA2cczhefgw7gOf8Iy6Q="; })
(fetchNuGet { pname = "Microsoft.Extensions.Logging"; version = "7.0.0"; hash = "sha256-rr/NXIZ/3FG5FYGrHD7iIIr12AksP4CnfUy1YvEdDa8="; })
(fetchNuGet { pname = "Microsoft.Extensions.Logging.Abstractions"; version = "7.0.0"; hash = "sha256-uoMkX/TnwP0YabThacTMmyxdc9itQp73CN7xEFFox74="; })
(fetchNuGet { pname = "Microsoft.Extensions.Options"; version = "7.0.0"; hash = "sha256-pj9I/2HpCU7bLu002/Bb5NF+ofUrJ3IyH7yVqfP8IC0="; })
(fetchNuGet { pname = "Microsoft.Extensions.Primitives"; version = "7.0.0"; hash = "sha256-AGnfNNDvZDGZ0Er9JQxeyLoUbVH+jfXF3anFr12qk6w="; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "1.1.0"; hash = "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM="; })
(fetchNuGet { pname = "Microsoft.NETCore.Platforms"; version = "2.1.2"; hash = "sha256-gYQQO7zsqG+OtN4ywYQyfsiggS2zmxw4+cPXlK+FB5Q="; })
(fetchNuGet { pname = "Microsoft.NETCore.Targets"; version = "1.1.0"; hash = "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ="; })
(fetchNuGet { pname = "Microsoft.Win32.SystemEvents"; version = "6.0.0"; hash = "sha256-N9EVZbl5w1VnMywGXyaVWzT9lh84iaJ3aD48hIBk1zA="; })
(fetchNuGet { pname = "runtime.any.System.Collections"; version = "4.3.0"; hash = "sha256-4PGZqyWhZ6/HCTF2KddDsbmTTjxs2oW79YfkberDZS8="; })
(fetchNuGet { pname = "runtime.any.System.Globalization"; version = "4.3.0"; hash = "sha256-PaiITTFI2FfPylTEk7DwzfKeiA/g/aooSU1pDcdwWLU="; })
(fetchNuGet { pname = "runtime.any.System.IO"; version = "4.3.0"; hash = "sha256-vej7ySRhyvM3pYh/ITMdC25ivSd0WLZAaIQbYj/6HVE="; })
(fetchNuGet { pname = "runtime.any.System.Reflection"; version = "4.3.0"; hash = "sha256-ns6f++lSA+bi1xXgmW1JkWFb2NaMD+w+YNTfMvyAiQk="; })
(fetchNuGet { pname = "runtime.any.System.Reflection.Extensions"; version = "4.3.0"; hash = "sha256-Y2AnhOcJwJVYv7Rp6Jz6ma0fpITFqJW+8rsw106K2X8="; })
(fetchNuGet { pname = "runtime.any.System.Reflection.Primitives"; version = "4.3.0"; hash = "sha256-LkPXtiDQM3BcdYkAm5uSNOiz3uF4J45qpxn5aBiqNXQ="; })
(fetchNuGet { pname = "runtime.any.System.Resources.ResourceManager"; version = "4.3.0"; hash = "sha256-9EvnmZslLgLLhJ00o5MWaPuJQlbUFcUF8itGQNVkcQ4="; })
(fetchNuGet { pname = "runtime.any.System.Runtime"; version = "4.3.0"; hash = "sha256-qwhNXBaJ1DtDkuRacgHwnZmOZ1u9q7N8j0cWOLYOELM="; })
(fetchNuGet { pname = "runtime.any.System.Runtime.Handles"; version = "4.3.0"; hash = "sha256-PQRACwnSUuxgVySO1840KvqCC9F8iI9iTzxNW0RcBS4="; })
(fetchNuGet { pname = "runtime.any.System.Runtime.InteropServices"; version = "4.3.0"; hash = "sha256-Kaw5PnLYIiqWbsoF3VKJhy7pkpoGsUwn4ZDCKscbbzA="; })
(fetchNuGet { pname = "runtime.any.System.Text.Encoding"; version = "4.3.0"; hash = "sha256-Q18B9q26MkWZx68exUfQT30+0PGmpFlDgaF0TnaIGCs="; })
(fetchNuGet { pname = "runtime.any.System.Threading.Tasks"; version = "4.3.0"; hash = "sha256-agdOM0NXupfHbKAQzQT8XgbI9B8hVEh+a/2vqeHctg4="; })
(fetchNuGet { pname = "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-LXUPLX3DJxsU1Pd3UwjO1PO9NM2elNEDXeu2Mu/vNps="; })
(fetchNuGet { pname = "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-qeSqaUI80+lqw5MK4vMpmO0CZaqrmYktwp6L+vQAb0I="; })
(fetchNuGet { pname = "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-SrHqT9wrCBsxILWtaJgGKd6Odmxm8/Mh7Kh0CUkZVzA="; })
(fetchNuGet { pname = "runtime.native.System"; version = "4.3.0"; hash = "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y="; })
(fetchNuGet { pname = "runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-Jy01KhtcCl2wjMpZWH+X3fhHcVn+SyllWFY8zWlz/6I="; })
(fetchNuGet { pname = "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-wyv00gdlqf8ckxEdV7E+Ql9hJIoPcmYEuyeWb5Oz3mM="; })
(fetchNuGet { pname = "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-zi+b4sCFrA9QBiSGDD7xPV27r3iHGlV99gpyVUjRmc4="; })
(fetchNuGet { pname = "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-gybQU6mPgaWV3rBG2dbH6tT3tBq8mgze3PROdsuWnX0="; })
(fetchNuGet { pname = "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-VsP72GVveWnGUvS/vjOQLv1U80H2K8nZ4fDAmI61Hm4="; })
(fetchNuGet { pname = "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-4yKGa/IrNCKuQ3zaDzILdNPD32bNdy6xr5gdJigyF5g="; })
(fetchNuGet { pname = "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-HmdJhhRsiVoOOCcUvAwdjpMRiyuSwdcgEv2j9hxi+Zc="; })
(fetchNuGet { pname = "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl"; version = "4.3.0"; hash = "sha256-pVFUKuPPIx0edQKjzRon3zKq8zhzHEzko/lc01V/jdw="; })
(fetchNuGet { pname = "runtime.unix.System.Diagnostics.Debug"; version = "4.3.0"; hash = "sha256-ReoazscfbGH+R6s6jkg5sIEHWNEvjEoHtIsMbpc7+tI="; })
(fetchNuGet { pname = "runtime.unix.System.Private.Uri"; version = "4.3.0"; hash = "sha256-c5tXWhE/fYbJVl9rXs0uHh3pTsg44YD1dJvyOA0WoMs="; })
(fetchNuGet { pname = "runtime.unix.System.Runtime.Extensions"; version = "4.3.0"; hash = "sha256-l8S9gt6dk3qYG6HYonHtdlYtBKyPb29uQ6NDjmrt3V4="; })
(fetchNuGet { pname = "SharpCompress"; version = "0.33.0"; hash = "sha256-6UWirVcwUai816UZ9J5P3dYMvJLl7K1Puvf5uaWDJMk="; })
(fetchNuGet { pname = "SkiaSharp"; version = "2.88.6"; hash = "sha256-y0wzgwdQXtgl5boCz/EgLWbK3SwC0cFVRUbBxOUPQXc="; })
(fetchNuGet { pname = "SkiaSharp.NativeAssets.Linux"; version = "2.88.6"; hash = "sha256-VjgGoi73tVvqO/UXmQb1w9ioAbFu2dxH8oHz1l5H4zE="; })
(fetchNuGet { pname = "SkiaSharp.NativeAssets.macOS"; version = "2.88.6"; hash = "sha256-7hOMjlYTOiNPLNwfLFUjTcdgiGEtmYUI1EubiRiC6bo="; })
(fetchNuGet { pname = "SkiaSharp.NativeAssets.WebAssembly"; version = "2.88.6"; hash = "sha256-CIb9fHVgHwIa0R1WafKJ3+GqtDHHRgDohA3ayTHvlws="; })
(fetchNuGet { pname = "SkiaSharp.NativeAssets.Win32"; version = "2.88.6"; hash = "sha256-ljD4QmAO2/vwA6I8GIUNkONpOzmGsOVJJy9vPDnjVfA="; })
(fetchNuGet { pname = "System.Collections"; version = "4.3.0"; hash = "sha256-afY7VUtD6w/5mYqrce8kQrvDIfS2GXDINDh73IjxJKc="; })
(fetchNuGet { pname = "System.Collections.Immutable"; version = "5.0.0"; hash = "sha256-GdwSIjLMM0uVfE56VUSLVNgpW0B//oCeSFj8/hSlbM8="; })
(fetchNuGet { pname = "System.ComponentModel.Annotations"; version = "4.5.0"; hash = "sha256-15yE2NoT9vmL9oGCaxHClQR1jLW1j1ef5hHMg55xRso="; })
(fetchNuGet { pname = "System.Diagnostics.Debug"; version = "4.3.0"; hash = "sha256-fkA79SjPbSeiEcrbbUsb70u9B7wqbsdM9s1LnoKj0gM="; })
(fetchNuGet { pname = "System.Drawing.Common"; version = "6.0.0"; hash = "sha256-/9EaAbEeOjELRSMZaImS1O8FmUe8j4WuFUw1VOrPyAo="; })
(fetchNuGet { pname = "System.Dynamic.Runtime"; version = "4.3.0"; hash = "sha256-k75gjOYimIQtLBD5NDzwwi3ZMUBPRW3jmc3evDMMJbU="; })
(fetchNuGet { pname = "System.Globalization"; version = "4.3.0"; hash = "sha256-caL0pRmFSEsaoeZeWN5BTQtGrAtaQPwFi8YOZPZG5rI="; })
(fetchNuGet { pname = "System.IO"; version = "4.3.0"; hash = "sha256-ruynQHekFP5wPrDiVyhNiRIXeZ/I9NpjK5pU+HPDiRY="; })
(fetchNuGet { pname = "System.IO.Pipelines"; version = "6.0.0"; hash = "sha256-xfjF4UqTMJpf8KsBWUyJlJkzPTOO/H5MW023yTYNQSA="; })
(fetchNuGet { pname = "System.Linq"; version = "4.3.0"; hash = "sha256-R5uiSL3l6a3XrXSSL6jz+q/PcyVQzEAByiuXZNSqD/A="; })
(fetchNuGet { pname = "System.Linq.Expressions"; version = "4.3.0"; hash = "sha256-+3pvhZY7rip8HCbfdULzjlC9FPZFpYoQxhkcuFm2wk8="; })
(fetchNuGet { pname = "System.Memory"; version = "4.5.4"; hash = "sha256-3sCEfzO4gj5CYGctl9ZXQRRhwAraMQfse7yzKoRe65E="; })
(fetchNuGet { pname = "System.Numerics.Vectors"; version = "4.5.0"; hash = "sha256-qdSTIFgf2htPS+YhLGjAGiLN8igCYJnCCo6r78+Q+c8="; })
(fetchNuGet { pname = "System.ObjectModel"; version = "4.3.0"; hash = "sha256-gtmRkWP2Kwr3nHtDh0yYtce38z1wrGzb6fjm4v8wN6Q="; })
(fetchNuGet { pname = "System.Private.Uri"; version = "4.3.0"; hash = "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM="; })
(fetchNuGet { pname = "System.Reflection"; version = "4.3.0"; hash = "sha256-NQSZRpZLvtPWDlvmMIdGxcVuyUnw92ZURo0hXsEshXY="; })
(fetchNuGet { pname = "System.Reflection.Emit"; version = "4.3.0"; hash = "sha256-5LhkDmhy2FkSxulXR+bsTtMzdU3VyyuZzsxp7/DwyIU="; })
(fetchNuGet { pname = "System.Reflection.Emit.ILGeneration"; version = "4.3.0"; hash = "sha256-mKRknEHNls4gkRwrEgi39B+vSaAz/Gt3IALtS98xNnA="; })
(fetchNuGet { pname = "System.Reflection.Emit.Lightweight"; version = "4.3.0"; hash = "sha256-rKx4a9yZKcajloSZHr4CKTVJ6Vjh95ni+zszPxWjh2I="; })
(fetchNuGet { pname = "System.Reflection.Extensions"; version = "4.3.0"; hash = "sha256-mMOCYzUenjd4rWIfq7zIX9PFYk/daUyF0A8l1hbydAk="; })
(fetchNuGet { pname = "System.Reflection.Metadata"; version = "5.0.0"; hash = "sha256-Wo+MiqhcP9dQ6NuFGrQTw6hpbJORFwp+TBNTq2yhGp8="; })
(fetchNuGet { pname = "System.Reflection.Primitives"; version = "4.3.0"; hash = "sha256-5ogwWB4vlQTl3jjk1xjniG2ozbFIjZTL9ug0usZQuBM="; })
(fetchNuGet { pname = "System.Reflection.TypeExtensions"; version = "4.3.0"; hash = "sha256-4U4/XNQAnddgQIHIJq3P2T80hN0oPdU2uCeghsDTWng="; })
(fetchNuGet { pname = "System.Resources.ResourceManager"; version = "4.3.0"; hash = "sha256-idiOD93xbbrbwwSnD4mORA9RYi/D/U48eRUsn/WnWGo="; })
(fetchNuGet { pname = "System.Runtime"; version = "4.3.0"; hash = "sha256-51813WXpBIsuA6fUtE5XaRQjcWdQ2/lmEokJt97u0Rg="; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "4.7.1"; hash = "sha256-UvyoDV8O0oY3HPG1GbA56YVdvwTGEfjYR5gW1O7IK4U="; })
(fetchNuGet { pname = "System.Runtime.CompilerServices.Unsafe"; version = "6.0.0"; hash = "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I="; })
(fetchNuGet { pname = "System.Runtime.Extensions"; version = "4.3.0"; hash = "sha256-wLDHmozr84v1W2zYCWYxxj0FR0JDYHSVRaRuDm0bd/o="; })
(fetchNuGet { pname = "System.Runtime.Handles"; version = "4.3.0"; hash = "sha256-KJ5aXoGpB56Y6+iepBkdpx/AfaJDAitx4vrkLqR7gms="; })
(fetchNuGet { pname = "System.Runtime.InteropServices"; version = "4.3.0"; hash = "sha256-8sDH+WUJfCR+7e4nfpftj/+lstEiZixWUBueR2zmHgI="; })
(fetchNuGet { pname = "System.Text.Encoding"; version = "4.3.0"; hash = "sha256-GctHVGLZAa/rqkBNhsBGnsiWdKyv6VDubYpGkuOkBLg="; })
(fetchNuGet { pname = "System.Text.Encoding.CodePages"; version = "4.5.1"; hash = "sha256-PIhkv59IXjyiuefdhKxS9hQfEwO9YWRuNudpo53HQfw="; })
(fetchNuGet { pname = "System.Threading"; version = "4.3.0"; hash = "sha256-ZDQ3dR4pzVwmaqBg4hacZaVenQ/3yAF/uV7BXZXjiWc="; })
(fetchNuGet { pname = "System.Threading.Tasks"; version = "4.3.0"; hash = "sha256-Z5rXfJ1EXp3G32IKZGiZ6koMjRu0n8C1NGrwpdIen4w="; })
(fetchNuGet { pname = "System.Threading.Tasks.Extensions"; version = "4.5.4"; hash = "sha256-owSpY8wHlsUXn5xrfYAiu847L6fAKethlvYx97Ri1ng="; })
(fetchNuGet { pname = "Tmds.DBus.Protocol"; version = "0.15.0"; hash = "sha256-4gk2vXDjKFaBh82gTkwg3c/5GRjiH+bvM5elfDSbKTU="; })
]

View File

@ -7,13 +7,13 @@
buildDotnetModule rec {
pname = "knossosnet";
version = "1.2.0";
version = "1.2.3";
src = fetchFromGitHub {
owner = "KnossosNET";
repo = "Knossos.NET";
rev = "v${version}";
hash = "sha256-4GVbwBykagSMGF3TxyZeoRb7Km+yLEMFOO8fCkH3U5A=";
hash = "sha256-5FNb+L+ABkR/ubSZXuV4hlzy6pIWEXaTXl4piNsmkmw=";
};
patches = [ ./targetframework.patch ];

View File

@ -0,0 +1,13 @@
{
lammps,
mpi,
lowPrio,
}:
lowPrio (
lammps.override {
extraBuildInputs = [
mpi
];
}
)

View File

@ -76,7 +76,7 @@ rustPlatform.buildRustPackage {
});
nativeBuildInputs = [
cargo-tauri
cargo-tauri.hook
desktop-file-utils
pnpm_8
nodejs
@ -100,14 +100,6 @@ rustPlatform.buildRustPackage {
);
env = {
tauriBundle =
{
Linux = "deb";
Darwin = "app";
}
.${stdenv.hostPlatform.uname.system}
or (builtins.throw "No tauri bundle available for ${stdenv.hostPlatform.uname.system}!");
ESBUILD_BINARY_PATH = lib.getExe (
esbuild.override {
buildGoModule = args: buildGoModule (args // rec {
@ -137,26 +129,12 @@ rustPlatform.buildRustPackage {
popd
'';
buildPhase = ''
runHook preBuild
cargo tauri build --bundles "$tauriBundle"
runHook postBuild
'';
installPhase =
''
runHook preInstall
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
mkdir -p "$out"/bin
cp -r target/release/bundle/macos "$out"/Applications
postInstall =
lib.optionalString stdenv.hostPlatform.isDarwin ''
mv "$out"/Applications/Modrinth\ App.app/Contents/MacOS/Modrinth\ App "$out"/bin/modrinth-app
ln -s "$out"/bin/modrinth-app "$out"/Applications/Modrinth\ App.app/Contents/MacOS/Modrinth\ App
''
+ lib.optionalString stdenv.hostPlatform.isLinux ''
cp -r target/release/bundle/"$tauriBundle"/*/data/usr "$out"
desktop-file-edit \
--set-comment "Modrinth's game launcher" \
--set-key="StartupNotify" --set-value="true" \
@ -164,9 +142,6 @@ rustPlatform.buildRustPackage {
--set-key="Keywords" --set-value="game;minecraft;mc;" \
--set-key="StartupWMClass" --set-value="ModrinthApp" \
$out/share/applications/modrinth-app.desktop
''
+ ''
runHook postInstall
'';
passthru = {

View File

@ -40,7 +40,7 @@ stdenv.mkDerivation (finalAttrs: {
rustPlatform.cargoSetupHook
cargo
rustc
cargo-tauri
cargo-tauri.hook
pkg-config
wrapGAppsHook3
];
@ -62,6 +62,7 @@ stdenv.mkDerivation (finalAttrs: {
};
cargoRoot = "src-tauri";
buildAndTestSubdir = finalAttrs.cargoRoot;
cargoDeps = rustPlatform.fetchCargoTarball {
inherit (finalAttrs) pname version src;
@ -69,19 +70,8 @@ stdenv.mkDerivation (finalAttrs: {
hash = "sha256-H8TMpYFJWp227jPA5H2ZhSqTMiT/U6pT6eLyjibuoLU=";
};
buildPhase = ''
runHook preBuild
cargo-tauri build -b deb
runHook postBuild
'';
installPhase = ''
runHook preInstall
postInstall = ''
install -Dm644 ${./80-mouse-actions.rules} $out/etc/udev/rules.d/80-mouse-actions.rules
cp -r src-tauri/target/release/bundle/deb/*/data/usr/* $out
runHook postInstall
'';
meta = {

View File

@ -7,13 +7,13 @@
stdenvNoCC.mkDerivation {
pname = "mozcdic-ut-jawiki";
version = "0-unstable-2024-09-21";
version = "0-unstable-2024-09-27";
src = fetchFromGitHub {
owner = "utuhiro78";
repo = "mozcdic-ut-jawiki";
rev = "c7bec6a8df7a3f893646bb8c017033499a8350be";
hash = "sha256-fjIOGT3SYKLtL31QfZVNT4vKMNuHy1YAKFVjf82BWMQ=";
rev = "773cc08e71c4daa3c06fc577853f715a2bb4d9aa";
hash = "sha256-TDZvB8/ZrUtkAbCr3vMfyFfhQ4v5SYWEqPNjuGB1Ve4=";
};
installPhase = ''

View File

@ -0,0 +1,114 @@
{
lib,
stdenv,
rustPlatform,
fetchFromGitHub,
stfl,
sqlite,
curl,
gettext,
pkg-config,
libxml2,
json_c,
ncurses,
darwin,
asciidoctor,
libiconv,
makeWrapper,
nix-update-script,
}:
rustPlatform.buildRustPackage rec {
pname = "newsboat";
version = "2.37";
src = fetchFromGitHub {
owner = "newsboat";
repo = "newsboat";
rev = "r${version}";
hash = "sha256-RNvzGGvicujqkRWVHBwnlROuhpH5XqPNWmx6q7n4g+U=";
};
cargoHash = "sha256-EBA+ucegXr3YtU2K7bhwli8O+knnugMMUuSksDuaY9E=";
# TODO: Check if that's still needed
postPatch = lib.optionalString stdenv.hostPlatform.isDarwin ''
# Allow other ncurses versions on Darwin
substituteInPlace config.sh \
--replace "ncurses5.4" "ncurses"
'';
nativeBuildInputs =
[
pkg-config
asciidoctor
gettext
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
makeWrapper
ncurses
];
buildInputs =
[
stfl
sqlite
curl
libxml2
json_c
ncurses
]
++ lib.optionals stdenv.hostPlatform.isDarwin (
with darwin.apple_sdk.frameworks;
[
Security
Foundation
libiconv
gettext
]
);
postBuild = ''
make -j $NIX_BUILD_CORES prefix="$out"
'';
# https://github.com/NixOS/nixpkgs/pull/98471#issuecomment-703100014 . We set
# these for all platforms, since upstream's gettext crate behavior might
# change in the future.
GETTEXT_LIB_DIR = "${lib.getLib gettext}/lib";
GETTEXT_INCLUDE_DIR = "${lib.getDev gettext}/include";
GETTEXT_BIN_DIR = "${lib.getBin gettext}/bin";
doCheck = true;
preCheck = ''
make -j $NIX_BUILD_CORES test
'';
postInstall =
''
make -j $NIX_BUILD_CORES prefix="$out" install
''
+ lib.optionalString stdenv.hostPlatform.isDarwin ''
for prog in $out/bin/*; do
wrapProgram "$prog" --prefix DYLD_LIBRARY_PATH : "${stfl}/lib"
done
'';
passthru = {
updateScript = nix-update-script { };
};
meta = {
homepage = "https://newsboat.org/";
changelog = "https://github.com/newsboat/newsboat/blob/${src.rev}/CHANGELOG.md";
description = "Fork of Newsbeuter, an RSS/Atom feed reader for the text console";
maintainers = with lib.maintainers; [
dotlambda
nicknovitski
];
license = lib.licenses.mit;
platforms = lib.platforms.unix;
mainProgram = "newsboat";
};
}

View File

@ -7,7 +7,7 @@
let
bits = if stdenv.hostPlatform.is64bit then "x64" else "ia32";
version = "0.91.0";
version = "0.92.0";
in
stdenv.mkDerivation {
pname = "nwjs-ffmpeg-prebuilt";
@ -16,8 +16,8 @@ stdenv.mkDerivation {
src =
let
hashes = {
"x64" = "sha256-C6ZOY+oFyWYqLvpYmM9KnQ3B7y0JAXp4SbeNBYvcUe0=";
"ia32" = "sha256-C6ZOY+oFyWYqLvpYmM9KnQ3B7y0JAXp4SbeNBYvcUe0=";
"x64" = "sha256-0Y0m9wGZGqH78LTPSWw+OCTvxd6kmIjuYzSaepwt9/I=";
"ia32" = "sha256-0Y0m9wGZGqH78LTPSWw+OCTvxd6kmIjuYzSaepwt9/I=";
};
in
fetchurl {

View File

@ -60,7 +60,7 @@ stdenv.mkDerivation (finalAttrs: {
rustPlatform.cargoSetupHook
cargo
rustc
cargo-tauri
cargo-tauri.hook
nodejs
pnpm.configHook
wrapGAppsHook3
@ -101,15 +101,6 @@ stdenv.mkDerivation (finalAttrs: {
chmod +w ..
'';
preBuild = ''
# Use cargo-tauri from nixpkgs instead of pnpm tauri from npm
cargo tauri build -b deb
'';
preInstall = ''
mv target/release/bundle/deb/*/data/usr/ $out
'';
meta = with lib; {
description = "Cross-platform translation software";
mainProgram = "pot";

View File

@ -10,7 +10,7 @@
python3.pkgs.buildPythonApplication rec {
pname = "satellite";
version = "0.4.3";
version = "0.5.0";
pyproject = true;
@ -19,7 +19,7 @@ python3.pkgs.buildPythonApplication rec {
owner = "tpikonen";
repo = "satellite";
rev = version;
hash = "sha256-4L6zbHjWAIJJv2N3XKcfHSZUAUC2FPjK5hT9XGBtQ3w=";
hash = "sha256-61HCk0W07w0LybSVB4APvQX4PMSsqH9mKGzc+Rmno90=";
};
nativeBuildInputs = [

View File

@ -0,0 +1,79 @@
{
stdenv,
lib,
fetchFromGitHub,
cmake,
pkg-config,
gtkmm3,
cairomm,
yaml-cpp,
glfw,
libtirpc,
liblxi,
libsigcxx,
glew,
zstd,
wrapGAppsHook4,
shaderc,
vulkan-headers,
vulkan-loader,
vulkan-tools,
glslang,
spirv-tools,
ffts,
}:
stdenv.mkDerivation rec {
pname = "scopehal-apps";
version = "0-unstable-2024-09-16";
src = fetchFromGitHub {
owner = "ngscopeclient";
repo = "scopehal-apps";
rev = "d2a1a2f17e9398a3f60c99483dd2f6dbc2e62efc";
hash = "sha256-FQoaTuL6mEqnH8oNXwHpDcOEAPGExqj6lhrUhZ9VAQ4=";
fetchSubmodules = true;
};
strictDeps = true;
nativeBuildInputs = [
cmake
pkg-config
shaderc
spirv-tools
wrapGAppsHook4
];
buildInputs = [
cairomm
ffts
glew
glfw
glslang
gtkmm3
liblxi
libsigcxx
libtirpc
vulkan-headers
vulkan-loader
vulkan-tools
yaml-cpp
zstd
];
# Targets InitializeSearchPaths
postPatch = ''
substituteInPlace lib/scopehal/scopehal.cpp \
--replace-fail '"/share/' '"/../share/'
'';
meta = {
description = "Advanced test & measurement remote control and analysis suite";
homepage = "https://www.ngscopeclient.org/";
license = lib.licenses.bsd3;
mainProgram = "ngscopeclient";
maintainers = with lib.maintainers; [ bgamari ];
platforms = lib.platforms.linux;
};
}

View File

@ -1,4 +1,10 @@
{ stdenv, lib, fetchFromGitHub, cmake, libevent }:
{
stdenv,
lib,
fetchFromGitHub,
cmake,
libevent,
}:
stdenv.mkDerivation rec {
pname = "libevhtp";
@ -24,6 +30,10 @@ stdenv.mkDerivation rec {
description = "Create extremely-fast and secure embedded HTTP servers with ease";
homepage = "https://github.com/criticalstack/libevhtp";
license = licenses.bsd3;
maintainers = with maintainers; [ greizgh schmittlauch ];
maintainers = with maintainers; [
greizgh
schmittlauch
melvyn2
];
};
}

View File

@ -1,50 +1,61 @@
{ stdenv
, lib
, fetchFromGitHub
, pkg-config
, python3
, autoreconfHook
, libuuid
, sqlite
, glib
, libevent
, libsearpc
, openssl
, fuse
, libarchive
, libjwt
, curl
, which
, vala
, cmake
, oniguruma
, nixosTests
{
stdenv,
lib,
fetchFromGitHub,
pkg-config,
python3,
autoreconfHook,
libuuid,
libmysqlclient,
sqlite,
glib,
libevent,
libsearpc,
openssl,
fuse,
libarchive,
libjwt,
curl,
which,
vala,
cmake,
oniguruma,
nixosTests,
}:
let
# seafile-server relies on a specific version of libevhtp.
# It contains non upstreamed patches and is forked off an outdated version.
libevhtp = import ./libevhtp.nix {
inherit stdenv lib fetchFromGitHub cmake libevent;
inherit
stdenv
lib
fetchFromGitHub
cmake
libevent
;
};
in
stdenv.mkDerivation rec {
stdenv.mkDerivation {
pname = "seafile-server";
version = "10.0.1";
version = "11.0.12";
src = fetchFromGitHub {
owner = "haiwen";
repo = "seafile-server";
rev = "db09baec1b88fc131bf4453a808ab63a3fc714c9"; # using a fixed revision because upstream may re-tag releases :/
sha256 = "sha256-a5vtJcbnaYzq6/3xmhbWk23BZ+Wil/Tb/q22ML4bDqs=";
rev = "5e6c0974e6abe5d92b8ba1db41c6ddbc1029f2d5"; # using a fixed revision because upstream may re-tag releases :/
hash = "sha256-BVa4QZiHPkqRB5FvDlCSbEVxdnyxVy2KuCDb2orRMuI=";
};
nativeBuildInputs = [ autoreconfHook pkg-config ];
nativeBuildInputs = [
autoreconfHook
pkg-config
];
buildInputs = [
libuuid
libmysqlclient
sqlite
openssl
glib
libsearpc
libevent
@ -52,7 +63,6 @@ stdenv.mkDerivation rec {
fuse
libarchive
libjwt
curl
which
vala
libevhtp
@ -73,6 +83,11 @@ stdenv.mkDerivation rec {
homepage = "https://github.com/haiwen/seafile-server";
license = licenses.agpl3Plus;
platforms = platforms.linux;
maintainers = with maintainers; [ greizgh schmittlauch ];
maintainers = with maintainers; [
greizgh
schmittlauch
melvyn2
];
mainProgram = "seaf-server";
};
}

View File

@ -1,47 +1,30 @@
{ lib
, fetchFromGitHub
, fetchpatch
, python3
, makeWrapper
, nixosTests
{
lib,
fetchFromGitHub,
python3,
makeWrapper,
nixosTests,
seafile-server,
}:
let
python = python3.override {
self = python;
packageOverrides = self: super: {
django = super.django_3;
};
};
in
python.pkgs.buildPythonApplication rec {
python3.pkgs.buildPythonApplication rec {
pname = "seahub";
version = "10.0.1";
version = "11.0.12";
pyproject = false;
src = fetchFromGitHub {
owner = "haiwen";
repo = "seahub";
rev = "e8c02236c0eaca6dde009872745f089da4b77e6e"; # using a fixed revision because upstream may re-tag releases :/
sha256 = "sha256-7JXWKEFqCsC+ZByhvyP8AmDpajT3hpgyYDNUqc3wXyg=";
rev = "d998361dd890cac3f6d6ebec3af47a589e0332bc"; # using a fixed revision because upstream may re-tag releases :/
hash = "sha256-n56sRZ9TVb37JA0+12ZoF2Mt7dADjaYk7V0PmdBY0EU=";
};
patches = [
(fetchpatch {
# PIL update fix
url = "https://patch-diff.githubusercontent.com/raw/haiwen/seahub/pull/5570.patch";
sha256 = "sha256-7V2aRlacJ7Qhdi9k4Bs+t/Emx+EAM/NNCI+K40bMwLA=";
})
];
dontBuild = true;
doCheck = false; # disabled because it requires a ccnet environment
nativeBuildInputs = [
makeWrapper
];
nativeBuildInputs = [ makeWrapper ];
propagatedBuildInputs = with python.pkgs; [
propagatedBuildInputs = with python3.pkgs; [
django
future
django-compressor
@ -50,6 +33,7 @@ python.pkgs.buildPythonApplication rec {
django-simple-captcha
django-picklefield
django-formtools
djangosaml2
mysqlclient
pillow
python-dateutil
@ -60,14 +44,21 @@ python.pkgs.buildPythonApplication rec {
chardet
pyjwt
pycryptodome
pyopenssl
python-ldap
qrcode
pysearpc
seaserv
gunicorn
markdown
bleach
(python3.pkgs.toPythonModule (seafile-server.override { inherit python3; }))
];
postPatch = ''
substituteInPlace seahub/settings.py --replace-fail "SEAFILE_VERSION = '6.3.3'" "SEAFILE_VERSION = '${version}'"
'';
installPhase = ''
cp -dr --no-preserve='ownership' . $out/
wrapProgram $out/manage.py \
@ -75,18 +66,23 @@ python.pkgs.buildPythonApplication rec {
'';
passthru = {
inherit python;
pythonPath = python.pkgs.makePythonPath propagatedBuildInputs;
inherit python3;
pythonPath = python3.pkgs.makePythonPath propagatedBuildInputs;
tests = {
inherit (nixosTests) seafile;
};
inherit seafile-server;
};
meta = with lib; {
description = "Web end of seafile server";
homepage = "https://github.com/haiwen/seahub";
license = licenses.asl20;
maintainers = with maintainers; [ greizgh schmittlauch ];
maintainers = with maintainers; [
greizgh
schmittlauch
melvyn2
];
platforms = platforms.linux;
};
}

View File

@ -5,14 +5,14 @@
}:
rustPlatform.buildRustPackage rec {
pname = "spl";
version = "0.3.2";
version = "0.4.0";
src = fetchgit {
url = "https://git.tudbut.de/tudbut/spl";
rev = "v${version}";
hash = "sha256-thTKM07EtgAVvjpIx8pVssTmN0jPK/OrPYhRfwp7T+U=";
hash = "sha256-/WjrQeE3zI71pvCil2yE9ZMaWkmyRG/tNmZ+XFF0nYw=";
};
cargoHash = "sha256-7MYwWA3F7uJewmBRR0iQD4iXJZokHqIt9Q9dMoj6JVs=";
cargoHash = "sha256-8xv7tXVklJDewnHqoRIMefsNWTD28+5WyV5ZI9imOh0=";
meta = {
description = "Simple, concise, concatenative scripting language";

View File

@ -22,7 +22,7 @@
let
pname = "spotube";
version = "3.8.1";
version = "3.8.2";
meta = {
description = "Open source, cross-platform Spotify client compatible across multiple platforms";
@ -56,7 +56,7 @@ let
src = fetchArtifact {
filename = "Spotube-macos-universal.dmg";
hash = "sha256-NbKFvg50n/GByVU6/vNLmTTV9bhIhl3AxlwAcG60KVY=";
hash = "sha256-2nqWHQDxJ0PcwTiLAa8YZffqwsdnepMpXvpqRPX5JxM=";
};
sourceRoot = ".";
@ -80,7 +80,7 @@ let
src = fetchArtifact {
filename = "Spotube-linux-x86_64.deb";
hash = "sha256-R/yHXx29T/7NNc1L1AmevzXp1k98qnmvOEd3cfSlJuA=";
hash = "sha256-kDPNWbspmORClVMH91Lt3dLVsRwGxiBtB49CHSHxQxI=";
};
nativeBuildInputs = [

View File

@ -8,11 +8,11 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "stats";
version = "2.11.7";
version = "2.11.11";
src = fetchurl {
url = "https://github.com/exelban/stats/releases/download/v${finalAttrs.version}/Stats.dmg";
hash = "sha256-UppO7Cky+9xYg292t/78GPJ822kJ0RMG9yvetxRMVsU=";
hash = "sha256-6USopfRy+ffxXYNAp14RcO/uKZa1yfnz2S3RP8HmCWw=";
};
sourceRoot = ".";

View File

@ -1,7 +1,7 @@
diff --git a/Cargo.lock b/Cargo.lock
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index 55f480a8..a69f9ed9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -1839,6 +1839,22 @@ dependencies = [
"tower-service",
]
@ -133,10 +133,10 @@ index 55f480a8..a69f9ed9 100644
[[package]]
name = "tokio-rustls"
version = "0.25.0"
diff --git a/Cargo.toml b/Cargo.toml
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 3e3ab7ee..b6612f95 100644
--- a/Cargo.toml
+++ b/Cargo.toml
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -28,6 +28,8 @@ time = { version = "0.3", default-features = false}
log = "^0.4"
url = "2"

View File

@ -18,12 +18,10 @@
, rustc
, rustPlatform
, stdenv
, stdenvNoCC
, webkitgtk_4_1
}:
let
cargo-tauri_2 = let
version = "2.0.0-rc.3";
src = fetchFromGitHub {
@ -68,8 +66,6 @@ in stdenv.mkDerivation (finalAttrs: {
hash = "sha256-jOjOdrVOcGPenFW5mkkXKA64C6c+/f9KzlvtUmw6vXc=";
};
sourceRoot = "${finalAttrs.src.name}/src-tauri";
# HACK: A dependency (surrealist -> tauri -> **reqwest**) contains hyper-tls
# as an actually optional dependency. It ends up in the `Cargo.lock` file of
# tauri, but not in the one of surrealist. We apply a patch to `Cargo.toml`
@ -80,47 +76,25 @@ in stdenv.mkDerivation (finalAttrs: {
./0001-Cargo.patch
];
ui = stdenvNoCC.mkDerivation {
inherit (finalAttrs) src version;
pname = "${finalAttrs.pname}-ui";
cargoDeps = rustPlatform.fetchCargoTarball {
inherit (finalAttrs) patches src;
sourceRoot = finalAttrs.cargoRoot;
name = "${finalAttrs.pname}-${finalAttrs.version}";
hash = "sha256-LtQS0kH+2P4odV7BJYiH6T51+iZHAM9W9mV96rNfNWs=";
};
pnpmDeps = pnpm.fetchDeps {
inherit (finalAttrs) pname version src;
hash = "sha256-zGs1MWJ8TEFuHOoekCNIKQo2PBnp95xLz+R8mzeJXh8=";
};
ESBUILD_BINARY_PATH = lib.getExe esbuild_21-5;
nativeBuildInputs = [ nodejs pnpm.configHook ];
buildPhase = ''
runHook preBuild
pnpm build:desktop
runHook postBuild
'';
installPhase = ''
runHook preInstall
cp -r dist $out
runHook postInstall
'';
};
cargoDeps = rustPlatform.fetchCargoTarball {
inherit (finalAttrs) patches src sourceRoot;
name = "${finalAttrs.pname}-${finalAttrs.version}";
hash = "sha256-LtQS0kH+2P4odV7BJYiH6T51+iZHAM9W9mV96rNfNWs=";
};
nativeBuildInputs = [
cargo
cargo-tauri_2
(cargo-tauri.hook.override { cargo-tauri = cargo-tauri_2; })
gobject-introspection
makeBinaryWrapper
nodejs
pnpm.configHook
pkg-config
rustc
rustPlatform.cargoSetupHook
@ -136,23 +110,12 @@ in stdenv.mkDerivation (finalAttrs: {
];
env = {
ESBUILD_BINARY_PATH = lib.getExe esbuild_21-5;
OPENSSL_NO_VENDOR = 1;
};
postPatch = ''
substituteInPlace ./tauri.conf.json \
--replace-fail '"frontendDist": "../dist",' '"frontendDist": "${finalAttrs.ui}",' \
--replace-fail '"beforeBuildCommand": "pnpm build:desktop",' '"beforeBuildCommand": "",'
'';
postBuild = ''
cargo tauri build --bundles deb
'';
postInstall = ''
install -Dm555 target/release/bundle/deb/Surrealist_${finalAttrs.version}_*/data/usr/bin/surrealist -t $out/bin
cp -r target/release/bundle/deb/Surrealist_${finalAttrs.version}_*/data/usr/share $out
'';
cargoRoot = "src-tauri";
buildAndTestSubdir = finalAttrs.cargoRoot;
postFixup = ''
wrapProgram "$out/bin/surrealist" \

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