Merge staging-next into staging

This commit is contained in:
github-actions[bot] 2022-02-16 00:02:21 +00:00 committed by GitHub
commit 7b0b3b6225
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
75 changed files with 1621 additions and 980 deletions

View File

@ -6079,6 +6079,12 @@
githubId = 810075;
name = "Juan Rodal";
};
juboba = {
email = "juboba@gmail.com";
github = "juboba";
githubId = 1189739;
name = "Julio Borja Barra";
};
juliendehos = {
email = "dehos@lisic.univ-littoral.fr";
github = "juliendehos";

View File

@ -160,6 +160,14 @@
<link linkend="opt-services.tetrd.enable">services.tetrd</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/mbrubeck/agate">agate</link>,
a very simple server for the Gemini hypertext protocol.
Available as
<link xlink:href="options.html#opt-services.agate.enable">services.agate</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/JustArchiNET/ArchiSteamFarm">ArchiSteamFarm</link>,
@ -269,6 +277,23 @@
<literal>(ghc.withPackages.override { useLLVM = true; }) (p: [])</literal>.
</para>
</listitem>
<listitem>
<para>
The <literal>home-assistant</literal> module now requires
users that dont want their configuration to be managed
declaratively to set
<literal>services.home-assistant.config = null;</literal>.
This is required due to the way default settings are handled
with the new settings style.
</para>
<para>
Additionally the default list of
<literal>extraComponents</literal> now includes the minimal
dependencies to successfully complete the
<link xlink:href="https://www.home-assistant.io/getting-started/onboarding/">onboarding</link>
procedure.
</para>
</listitem>
<listitem>
<para>
<literal>pkgs.emacsPackages.orgPackages</literal> is removed

View File

@ -49,6 +49,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- [tetrd](https://tetrd.app), share your internet connection from your device to your PC and vice versa through a USB cable. Available at [services.tetrd](#opt-services.tetrd.enable).
- [agate](https://github.com/mbrubeck/agate), a very simple server for the Gemini hypertext protocol. Available as [services.agate](options.html#opt-services.agate.enable).
- [ArchiSteamFarm](https://github.com/JustArchiNET/ArchiSteamFarm), a C# application with primary purpose of idling Steam cards from multiple accounts simultaneously. Available as [services.archisteamfarm](options.html#opt-services.archisteamfarm.enable).
- [teleport](https://goteleport.com), allows engineers and security professionals to unify access for SSH servers, Kubernetes clusters, web applications, and databases across all environments. Available at [services.teleport](#opt-services.teleport.enable).
@ -91,6 +93,15 @@ In addition to numerous new and upgraded packages, this release has the followin
`useLLVM`. So instead of `(ghc.withPackages (p: [])).override { withLLVM = true; }`,
one needs to use `(ghc.withPackages.override { useLLVM = true; }) (p: [])`.
- The `home-assistant` module now requires users that don't want their
configuration to be managed declaratively to set
`services.home-assistant.config = null;`. This is required
due to the way default settings are handled with the new settings style.
Additionally the default list of `extraComponents` now includes the minimal
dependencies to successfully complete the [onboarding](https://www.home-assistant.io/getting-started/onboarding/)
procedure.
- `pkgs.emacsPackages.orgPackages` is removed because org elpa is deprecated.
The packages in the top level of `pkgs.emacsPackages`, such as org and
org-contrib, refer to the ones in `pkgs.emacsPackages.elpaPackages` and

View File

@ -450,6 +450,7 @@
./services/hardware/undervolt.nix
./services/hardware/vdr.nix
./services/hardware/xow.nix
./services/home-automation/home-assistant.nix
./services/logging/SystemdJournal2Gelf.nix
./services/logging/awstats.nix
./services/logging/filebeat.nix
@ -545,7 +546,6 @@
./services/misc/headphones.nix
./services/misc/heisenbridge.nix
./services/misc/greenclip.nix
./services/misc/home-assistant.nix
./services/misc/ihaskell.nix
./services/misc/input-remapper.nix
./services/misc/irkerd.nix
@ -1057,6 +1057,7 @@
./services/web-apps/wordpress.nix
./services/web-apps/youtrack.nix
./services/web-apps/zabbix.nix
./services/web-servers/agate.nix
./services/web-servers/apache-httpd/default.nix
./services/web-servers/caddy/default.nix
./services/web-servers/darkhttpd.nix

View File

@ -4,35 +4,27 @@ with lib;
let
cfg = config.services.home-assistant;
format = pkgs.formats.yaml {};
# cfg.config != null can be assumed here
configJSON = pkgs.writeText "configuration.json"
(builtins.toJSON (if cfg.applyDefaultConfig then
(recursiveUpdate defaultConfig cfg.config) else cfg.config));
# Render config attribute sets to YAML
# Values that are null will be filtered from the output, so this is one way to have optional
# options shown in settings.
# We post-process the result to add support for YAML functions, like secrets or includes, see e.g.
# https://www.home-assistant.io/docs/configuration/secrets/
filteredConfig = lib.converge (lib.filterAttrsRecursive (_: v: ! elem v [ null ])) cfg.config or {};
configFile = pkgs.runCommand "configuration.yaml" { preferLocalBuild = true; } ''
${pkgs.remarshal}/bin/json2yaml -i ${configJSON} -o $out
# Hack to support custom yaml objects,
# i.e. secrets: https://www.home-assistant.io/docs/configuration/secrets/
cp ${format.generate "configuration.yaml" filteredConfig} $out
sed -i -e "s/'\!\([a-z_]\+\) \(.*\)'/\!\1 \2/;s/^\!\!/\!/;" $out
'';
lovelaceConfig = cfg.lovelaceConfig or {};
lovelaceConfigFile = format.generate "ui-lovelace.yaml" lovelaceConfig;
lovelaceConfigJSON = pkgs.writeText "ui-lovelace.json"
(builtins.toJSON cfg.lovelaceConfig);
lovelaceConfigFile = pkgs.runCommand "ui-lovelace.yaml" { preferLocalBuild = true; } ''
${pkgs.remarshal}/bin/json2yaml -i ${lovelaceConfigJSON} -o $out
'';
# Components advertised by the home-assistant package
availableComponents = cfg.package.availableComponents;
# Components that were added by overriding the package
explicitComponents = cfg.package.extraComponents;
usedPlatforms = config:
if isAttrs config then
optional (config ? platform) config.platform
++ concatMap usedPlatforms (attrValues config)
else if isList config then
concatMap usedPlatforms config
else [ ];
useExplicitComponent = component: elem component explicitComponents;
# Given a component "platform", looks up whether it is used in the config
# as `platform = "platform";`.
@ -42,33 +34,45 @@ let
# platform = "mqtt";
# ...
# } ];
usedPlatforms = config:
if isAttrs config then
optional (config ? platform) config.platform
++ concatMap usedPlatforms (attrValues config)
else if isList config then
concatMap usedPlatforms config
else [ ];
useComponentPlatform = component: elem component (usedPlatforms cfg.config);
useExplicitComponent = component: elem component explicitComponents;
# Returns whether component is used in config or explicitly passed into package
# Returns whether component is used in config, explicitly passed into package or
# configured in the module.
useComponent = component:
hasAttrByPath (splitString "." component) cfg.config
|| useComponentPlatform component
|| useExplicitComponent component;
|| useExplicitComponent component
|| builtins.elem component cfg.extraComponents;
# List of components used in config
# Final list of components passed into the package to include required dependencies
extraComponents = filter useComponent availableComponents;
package = if (cfg.autoExtraComponents && cfg.config != null)
then (cfg.package.override { inherit extraComponents; })
else cfg.package;
# If you are changing this, please update the description in applyDefaultConfig
defaultConfig = {
homeassistant.time_zone = config.time.timeZone;
http.server_port = cfg.port;
} // optionalAttrs (cfg.lovelaceConfig != null) {
lovelace.mode = "yaml";
};
package = (cfg.package.override (oldArgs: {
# Respect overrides that already exist in the passed package and
# concat it with values passed via the module.
extraComponents = oldArgs.extraComponents ++ extraComponents;
extraPackages = ps: (oldArgs.extraPackages ps) ++ (cfg.extraPackages ps);
}));
in {
meta.maintainers = teams.home-assistant.members;
imports = [
# Migrations in NixOS 22.05
(mkRemovedOptionModule [ "services" "home-assistant" "applyDefaultConfig" ] "The default config was migrated into services.home-assistant.config")
(mkRemovedOptionModule [ "services" "home-assistant" "autoExtraComponents" ] "Components are now parsed from services.home-assistant.config unconditionally")
(mkRenamedOptionModule [ "services" "home-assistant" "port" ] [ "services" "home-assistant" "config" "http" "server_port" ])
];
meta = {
buildDocsInSandbox = false;
maintainers = teams.home-assistant.members;
};
options.services.home-assistant = {
# Running home-assistant on NixOS is considered an installation method that is unsupported by the upstream project.
@ -81,42 +85,166 @@ in {
description = "The config directory, where your <filename>configuration.yaml</filename> is located.";
};
port = mkOption {
default = 8123;
type = types.port;
description = "The port on which to listen.";
extraComponents = mkOption {
type = types.listOf (types.enum availableComponents);
default = [
# List of components required to complete the onboarding
"default_config"
"met"
"esphome"
] ++ optionals (pkgs.stdenv.hostPlatform.isAarch32 || pkgs.stdenv.hostPlatform.isAarch64) [
# Use the platform as an indicator that we might be running on a RaspberryPi and include
# relevant components
"rpi_power"
];
example = literalExpression ''
[
"analytics"
"default_config"
"esphome"
"my"
"shopping_list"
"wled"
]
'';
description = ''
List of <link xlink:href="https://www.home-assistant.io/integrations/">components</link> that have their dependencies included in the package.
The component name can be found in the URL, for example <literal>https://www.home-assistant.io/integrations/ffmpeg/</literal> would map to <literal>ffmpeg</literal>.
'';
};
applyDefaultConfig = mkOption {
default = true;
type = types.bool;
extraPackages = mkOption {
type = types.functionTo (types.listOf types.package);
default = _: [];
defaultText = literalExpression ''
python3Packages: with python3Packages; [];
'';
example = literalExpression ''
python3Packages: with python3Packages; [
# postgresql support
psycopg2
];
'';
description = ''
Setting this option enables a few configuration options for HA based on NixOS configuration (such as time zone) to avoid having to manually specify configuration we already have.
</para>
<para>
Currently one side effect of enabling this is that the <literal>http</literal> component will be enabled.
</para>
<para>
This only takes effect if <literal>config != null</literal> in order to ensure that a manually managed <filename>configuration.yaml</filename> is not overwritten.
List of packages to add to propagatedBuildInputs.
A popular example is <package>python3Packages.psycopg2</package>
for PostgreSQL support in the recorder component.
'';
};
config = mkOption {
default = null;
# Migrate to new option types later: https://github.com/NixOS/nixpkgs/pull/75584
type = with lib.types; let
valueType = nullOr (oneOf [
bool
int
float
str
(lazyAttrsOf valueType)
(listOf valueType)
]) // {
description = "Yaml value";
emptyValue.value = {};
type = types.submodule {
freeformType = format.type;
options = {
# This is a partial selection of the most common options, so new users can quickly
# pick up how to match home-assistants config structure to ours. It also lets us preset
# config values intelligently.
homeassistant = {
# https://www.home-assistant.io/docs/configuration/basic/
name = mkOption {
type = types.nullOr types.str;
default = null;
example = "Home";
description = ''
Name of the location where Home Assistant is running.
'';
};
latitude = mkOption {
type = types.nullOr (types.either types.float types.str);
default = null;
example = 52.3;
description = ''
Latitude of your location required to calculate the time the sun rises and sets.
'';
};
longitude = mkOption {
type = types.nullOr (types.either types.float types.str);
default = null;
example = 4.9;
description = ''
Longitude of your location required to calculate the time the sun rises and sets.
'';
};
unit_system = mkOption {
type = types.nullOr (types.enum [ "metric" "imperial" ]);
default = null;
example = "metric";
description = ''
The unit system to use. This also sets temperature_unit, Celsius for Metric and Fahrenheit for Imperial.
'';
};
temperature_unit = mkOption {
type = types.nullOr (types.enum [ "C" "F" ]);
default = null;
example = "C";
description = ''
Override temperature unit set by unit_system. <literal>C</literal> for Celsius, <literal>F</literal> for Fahrenheit.
'';
};
time_zone = mkOption {
type = types.nullOr types.str;
default = config.time.timeZone or null;
defaultText = literalExpression ''
config.time.timeZone or null
'';
example = "Europe/Amsterdam";
description = ''
Pick your time zone from the column TZ of Wikipedias <link xlink:href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">list of tz database time zones</link>.
'';
};
};
in valueType;
http = {
# https://www.home-assistant.io/integrations/http/
server_host = mkOption {
type = types.either types.str (types.listOf types.str);
default = [
"0.0.0.0"
"::"
];
example = "::1";
description = ''
Only listen to incoming requests on specific IP/host. The default listed assumes support for IPv4 and IPv6.
'';
};
server_port = mkOption {
default = 8123;
type = types.port;
description = ''
The port on which to listen.
'';
};
};
lovelace = {
# https://www.home-assistant.io/lovelace/dashboards/
mode = mkOption {
type = types.enum [ "yaml" "storage" ];
default = if cfg.lovelaceConfig != null
then "yaml"
else "storage";
defaultText = literalExpression ''
if cfg.lovelaceConfig != null
then "yaml"
else "storage";
'';
example = "yaml";
description = ''
In what mode should the main Lovelace panel be, <literal>yaml</literal> or <literal>storage</literal> (UI managed).
'';
};
};
};
};
example = literalExpression ''
{
homeassistant = {
@ -130,15 +258,19 @@ in {
frontend = {
themes = "!include_dir_merge_named themes";
};
http = { };
http = {};
feedreader.urls = [ "https://nixos.org/blogs.xml" ];
}
'';
description = ''
Your <filename>configuration.yaml</filename> as a Nix attribute set.
Beware that setting this option will delete your previous <filename>configuration.yaml</filename>.
<link xlink:href="https://www.home-assistant.io/docs/configuration/secrets/">Secrets</link>
are encoded as strings as shown in the example.
YAML functions like <link xlink:href="https://www.home-assistant.io/docs/configuration/secrets/">secrets</link>
can be passed as a string and will be unquoted automatically.
Unless this option is explicitly set to <literal>null</literal>
we assume your <filename>configuration.yaml</filename> is
managed through this module and thereby overwritten on startup.
'';
};
@ -147,16 +279,18 @@ in {
type = types.bool;
description = ''
Whether to make <filename>configuration.yaml</filename> writable.
This only has an effect if <option>config</option> is set.
This will allow you to edit it from Home Assistant's web interface.
This only has an effect if <option>config</option> is set.
However, bear in mind that it will be overwritten at every start of the service.
'';
};
lovelaceConfig = mkOption {
default = null;
type = with types; nullOr attrs;
# from https://www.home-assistant.io/lovelace/yaml-mode/
type = types.nullOr format.type;
# from https://www.home-assistant.io/lovelace/dashboards/
example = literalExpression ''
{
title = "My Awesome Home";
@ -172,8 +306,8 @@ in {
'';
description = ''
Your <filename>ui-lovelace.yaml</filename> as a Nix attribute set.
Setting this option will automatically add
<literal>lovelace.mode = "yaml";</literal> to your <option>config</option>.
Setting this option will automatically set <literal>lovelace.mode</literal> to <literal>yaml</literal>.
Beware that setting this option will delete your previous <filename>ui-lovelace.yaml</filename>
'';
};
@ -183,8 +317,10 @@ in {
type = types.bool;
description = ''
Whether to make <filename>ui-lovelace.yaml</filename> writable.
This only has an effect if <option>lovelaceConfig</option> is set.
This will allow you to edit it from Home Assistant's web interface.
This only has an effect if <option>lovelaceConfig</option> is set.
However, bear in mind that it will be overwritten at every start of the service.
'';
};
@ -201,11 +337,18 @@ in {
type = types.package;
example = literalExpression ''
pkgs.home-assistant.override {
extraPackages = ps: with ps; [ colorlog ];
extraPackages = python3Packages: with python3Packages; [
psycopg2
];
extraComponents = [
"default_config"
"esphome"
"met"
];
}
'';
description = ''
Home Assistant package to use. By default the tests are disabled, as they take a considerable amout of time to complete.
The Home Assistant package to use.
Override <literal>extraPackages</literal> or <literal>extraComponents</literal> in order to add additional dependencies.
If you specify <option>config</option> and do not set <option>autoExtraComponents</option>
to <literal>false</literal>, overriding <literal>extraComponents</literal> will have no effect.
@ -213,21 +356,6 @@ in {
'';
};
autoExtraComponents = mkOption {
default = true;
type = types.bool;
description = ''
If set to <literal>true</literal>, the components used in <literal>config</literal>
are set as the specified package's <literal>extraComponents</literal>.
This in turn adds all packaged dependencies to the derivation.
You might still see import errors in your log.
In this case, you will need to package the necessary dependencies yourself
or ask for someone else to package them.
If a dependency is packaged but not automatically added to this list,
you might need to specify it in <literal>extraPackages</literal>.
'';
};
openFirewall = mkOption {
default = false;
type = types.bool;
@ -240,18 +368,30 @@ in {
systemd.services.home-assistant = {
description = "Home Assistant";
after = [ "network.target" ];
preStart = optionalString (cfg.config != null) (if cfg.configWritable then ''
cp --no-preserve=mode ${configFile} "${cfg.configDir}/configuration.yaml"
'' else ''
rm -f "${cfg.configDir}/configuration.yaml"
ln -s ${configFile} "${cfg.configDir}/configuration.yaml"
'') + optionalString (cfg.lovelaceConfig != null) (if cfg.lovelaceConfigWritable then ''
cp --no-preserve=mode ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml"
'' else ''
rm -f "${cfg.configDir}/ui-lovelace.yaml"
ln -s ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml"
'');
after = [
"network-online.target"
# prevent races with database creation
"mysql.service"
"postgresql.service"
];
preStart = let
copyConfig = if cfg.configWritable then ''
cp --no-preserve=mode ${configFile} "${cfg.configDir}/configuration.yaml"
'' else ''
rm -f "${cfg.configDir}/configuration.yaml"
ln -s ${configFile} "${cfg.configDir}/configuration.yaml"
'';
copyLovelaceConfig = if cfg.lovelaceConfigWritable then ''
cp --no-preserve=mode ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml"
'' else ''
rm -f "${cfg.configDir}/ui-lovelace.yaml"
ln -s ${lovelaceConfigFile} "${cfg.configDir}/ui-lovelace.yaml"
'';
in
(optionalString (cfg.config != null) copyConfig) +
(optionalString (cfg.lovelaceConfig != null) copyLovelaceConfig)
;
serviceConfig = let
# List of capabilities to equip home-assistant with, depending on configured components
capabilities = [

View File

@ -0,0 +1,148 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.agate;
in
{
options = {
services.agate = {
enable = mkEnableOption "Agate Server";
package = mkOption {
type = types.package;
default = pkgs.agate;
defaultText = literalExpression "pkgs.agate";
description = "The package to use";
};
addresses = mkOption {
type = types.listOf types.str;
default = [ "0.0.0.0:1965" ];
description = ''
Addresses to listen on, IP:PORT, if you haven't disabled forwarding
only set IPv4.
'';
};
contentDir = mkOption {
default = "/var/lib/agate/content";
type = types.path;
description = "Root of the content directory.";
};
certificatesDir = mkOption {
default = "/var/lib/agate/certificates";
type = types.path;
description = "Root of the certificate directory.";
};
hostnames = mkOption {
default = [ ];
type = types.listOf types.str;
description = ''
Domain name of this Gemini server, enables checking hostname and port
in requests. (multiple occurences means basic vhosts)
'';
};
language = mkOption {
default = null;
type = types.nullOr types.str;
description = "RFC 4646 Language code for text/gemini documents.";
};
onlyTls_1_3 = mkOption {
default = false;
type = types.bool;
description = "Only use TLSv1.3 (default also allows TLSv1.2).";
};
extraArgs = mkOption {
type = types.listOf types.str;
default = [ "" ];
example = [ "--log-ip" ];
description = "Extra arguments to use running agate.";
};
};
};
config = mkIf cfg.enable {
# available for generating certs by hand
# it can be a bit arduous with openssl
environment.systemPackages = [ cfg.package ];
systemd.services.agate = {
description = "Agate";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" "network-online.target" ];
script =
let
prefixKeyList = key: list: concatMap (v: [ key v ]) list;
addresses = prefixKeyList "--addr" cfg.addresses;
hostnames = prefixKeyList "--hostname" cfg.hostnames;
in
''
exec ${cfg.package}/bin/agate ${
escapeShellArgs (
[
"--content" "${cfg.contentDir}"
"--certs" "${cfg.certificatesDir}"
] ++
addresses ++
(optionals (cfg.hostnames != []) hostnames) ++
(optionals (cfg.language != null) [ "--lang" cfg.language ]) ++
(optionals cfg.onlyTls_1_3 [ "--only-tls13" ]) ++
(optionals (cfg.extraArgs != []) cfg.extraArgs)
)
}
'';
serviceConfig = {
Restart = "always";
RestartSec = "5s";
DynamicUser = true;
StateDirectory = "agate";
# Security options:
AmbientCapabilities = "";
CapabilityBoundingSet = "";
# ProtectClock= adds DeviceAllow=char-rtc r
DeviceAllow = "";
LockPersonality = true;
PrivateTmp = true;
PrivateDevices = true;
PrivateUsers = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
RestrictNamespaces = true;
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
RestrictRealtime = true;
SystemCallArchitectures = "native";
SystemCallErrorNumber = "EPERM";
SystemCallFilter = [
"@system-service"
"~@cpu-emulation"
"~@debug"
"~@keyring"
"~@memlock"
"~@obsolete"
"~@privileged"
"~@setuid"
];
};
};
};
}

View File

@ -2,7 +2,6 @@
use strict;
use warnings;
use Array::Compare;
use Config::IniFiles;
use File::Path qw(make_path);
use File::Basename;
@ -221,9 +220,13 @@ sub unrecord_unit {
# - 2 if the units are different and a reload action is required
sub compare_units {
my ($old_unit, $new_unit) = @_;
my $comp = Array::Compare->new;
my $ret = 0;
my $comp_array = sub {
my ($a, $b) = @_;
return join("\0", @{$a}) eq join("\0", @{$b});
};
# Comparison hash for the sections
my %section_cmp = map { $_ => 1 } keys %{$new_unit};
# Iterate over the sections
@ -255,7 +258,7 @@ sub compare_units {
}
my @new_value = @{$new_unit->{$section_name}{$ini_key}};
# If the contents are different, the units are different
if (not $comp->compare(\@old_value, \@new_value)) {
if (not $comp_array->(\@old_value, \@new_value)) {
# Check if only the reload triggers changed
if ($section_name eq 'Unit' and $ini_key eq 'X-Reload-Triggers') {
$ret = 2;

View File

@ -117,7 +117,7 @@ let
configurationName = config.boot.loader.grub.configurationName;
# Needed by switch-to-configuration.
perl = pkgs.perl.withPackages (p: with p; [ ArrayCompare ConfigIniFiles FileSlurp NetDBus ]);
perl = pkgs.perl.withPackages (p: with p; [ ConfigIniFiles FileSlurp NetDBus ]);
};
# Handle assertions and warnings

View File

@ -32,6 +32,7 @@ in
acme = handleTest ./acme.nix {};
adguardhome = handleTest ./adguardhome.nix {};
aesmd = handleTest ./aesmd.nix {};
agate = handleTest ./web-servers/agate.nix {};
agda = handleTest ./agda.nix {};
airsonic = handleTest ./airsonic.nix {};
amazon-init-shell = handleTest ./amazon-init-shell.nix {};

View File

@ -10,6 +10,7 @@ in {
nodes.hass = { pkgs, ... }: {
environment.systemPackages = with pkgs; [ mosquitto ];
services.mosquitto = {
enable = true;
listeners = [ {
@ -21,14 +22,42 @@ in {
};
} ];
};
services.home-assistant = {
inherit configDir;
services.postgresql = {
enable = true;
ensureDatabases = [ "hass" ];
ensureUsers = [{
name = "hass";
ensurePermissions = {
"DATABASE hass" = "ALL PRIVILEGES";
};
}];
};
services.home-assistant = {
enable = true;
inherit configDir;
# tests loading components by overriding the package
package = (pkgs.home-assistant.override {
extraPackages = ps: with ps; [
colorama
];
extraComponents = [ "zha" ];
}).overrideAttrs (oldAttrs: {
doInstallCheck = false;
});
# tests loading components from the module
extraComponents = [
"wake_on_lan"
];
# test extra package passing from the module
extraPackages = python3Packages: with python3Packages; [
psycopg2
];
config = {
homeassistant = {
name = "Home";
@ -37,34 +66,58 @@ in {
longitude = "0.0";
elevation = 0;
};
# configure the recorder component to use the postgresql db
recorder.db_url = "postgresql://@/hass";
# we can't load default_config, because the updater requires
# network access and would cause an error, so load frontend
# here explicitly.
# https://www.home-assistant.io/integrations/frontend/
frontend = {};
# configure an mqtt broker connection
# https://www.home-assistant.io/integrations/mqtt
mqtt = {
broker = "127.0.0.1";
username = mqttUsername;
password = mqttPassword;
};
binary_sensor = [{
# create a mqtt sensor that syncs state with its mqtt topic
# https://www.home-assistant.io/integrations/sensor.mqtt/
binary_sensor = [ {
platform = "mqtt";
state_topic = "home-assistant/test";
payload_on = "let_there_be_light";
payload_off = "off";
}];
wake_on_lan = {};
switch = [{
} ];
# set up a wake-on-lan switch to test capset capability required
# for the ping suid wrapper
# https://www.home-assistant.io/integrations/wake_on_lan/
switch = [ {
platform = "wake_on_lan";
mac = "00:11:22:33:44:55";
host = "127.0.0.1";
}];
# tests component-based capability assignment (CAP_NET_BIND_SERVICE)
} ];
# test component-based capability assignment (CAP_NET_BIND_SERVICE)
# https://www.home-assistant.io/integrations/emulated_hue/
emulated_hue = {
host_ip = "127.0.0.1";
listen_port = 80;
};
# show mqtt interaction in the log
# https://www.home-assistant.io/integrations/logger/
logger = {
default = "info";
logs."homeassistant.components.mqtt" = "debug";
};
};
# configure the sample lovelace dashboard
lovelaceConfig = {
title = "My Awesome Home";
views = [{
@ -81,34 +134,57 @@ in {
};
testScript = ''
import re
start_all()
# Parse the package path out of the systemd unit, as we cannot
# access the final package, that is overriden inside the module,
# by any other means.
pattern = re.compile(r"path=(?P<path>[\/a-z0-9-.]+)\/bin\/hass")
response = hass.execute("systemctl show -p ExecStart home-assistant.service")[1]
match = pattern.search(response)
package = match.group('path')
hass.wait_for_unit("home-assistant.service")
with subtest("Check that YAML configuration file is in place"):
hass.succeed("test -L ${configDir}/configuration.yaml")
with subtest("lovelace config is copied because lovelaceConfigWritable = true"):
with subtest("Check the lovelace config is copied because lovelaceConfigWritable = true"):
hass.succeed("test -f ${configDir}/ui-lovelace.yaml")
with subtest("Check extraComponents and extraPackages are considered from the package"):
hass.succeed(f"grep -q 'colorama' {package}/extra_packages")
hass.succeed(f"grep -q 'zha' {package}/extra_components")
with subtest("Check extraComponents and extraPackages are considered from the module"):
hass.succeed(f"grep -q 'psycopg2' {package}/extra_packages")
hass.succeed(f"grep -q 'wake_on_lan' {package}/extra_components")
with subtest("Check that Home Assistant's web interface and API can be reached"):
hass.wait_until_succeeds("journalctl -u home-assistant.service | grep -q 'Home Assistant initialized in'")
hass.wait_for_open_port(8123)
hass.succeed("curl --fail http://localhost:8123/lovelace")
with subtest("Toggle a binary sensor using MQTT"):
hass.wait_for_open_port(1883)
hass.succeed(
"mosquitto_pub -V mqttv5 -t home-assistant/test -u ${mqttUsername} -P '${mqttPassword}' -m let_there_be_light"
)
with subtest("Check that capabilities are passed for emulated_hue to bind to port 80"):
hass.wait_for_open_port(80)
hass.succeed("curl --fail http://localhost:80/description.xml")
with subtest("Check extra components are considered in systemd unit hardening"):
hass.succeed("systemctl show -p DeviceAllow home-assistant.service | grep -q char-ttyUSB")
with subtest("Print log to ease debugging"):
output_log = hass.succeed("cat ${configDir}/home-assistant.log")
print("\n### home-assistant.log ###\n")
print(output_log + "\n")
# wait for home-assistant to fully boot
hass.sleep(30)
hass.wait_for_unit("home-assistant.service")
with subtest("Check that no errors were logged"):
assert "ERROR" not in output_log
@ -117,7 +193,7 @@ in {
assert "let_there_be_light" in output_log
with subtest("Check systemd unit hardening"):
hass.log(hass.succeed("systemctl show home-assistant.service"))
hass.log(hass.succeed("systemctl cat home-assistant.service"))
hass.log(hass.succeed("systemd-analyze security home-assistant.service"))
'';
})

View File

@ -0,0 +1,29 @@
import ../make-test-python.nix (
{ pkgs, lib, ... }:
{
name = "agate";
meta = with lib.maintainers; { maintainers = [ jk ]; };
nodes = {
geminiserver = { pkgs, ... }: {
services.agate = {
enable = true;
hostnames = [ "localhost" ];
contentDir = pkgs.writeTextDir "index.gmi" ''
# Hello NixOS!
'';
};
};
};
testScript = { nodes, ... }: ''
geminiserver.wait_for_unit("agate")
geminiserver.wait_for_open_port(1965)
with subtest("check is serving over gemini"):
response = geminiserver.succeed("${pkgs.gmni}/bin/gmni -j once -i -N gemini://localhost:1965")
print(response)
assert "Hello NixOS!" in response
'';
}
)

View File

@ -10,16 +10,16 @@
}:
rustPlatform.buildRustPackage rec {
pname = "snarkos";
version = "2.0.1";
version = "2.0.2";
src = fetchFromGitHub {
owner = "AleoHQ";
repo = "snarkOS";
rev = "v${version}";
sha256 = "sha256-BbCcdz0/oAEA+v9O8yQOpBb0/rXttn94tKS9tzRQ78w=";
sha256 = "sha256-sS8emB+uhWuoq5ISuT8FgSSzX7/WDoOY8hHzPE/EX3o=";
};
cargoSha256 = "sha256-+N1X3D+XSz3SoZJEy9SNmYWt9yZPdaumWUUYhwbD+0w=";
cargoSha256 = "sha256-XS6dw6BIoJdigEso/J1dUaAp7AIAda3HrKnCoBynRv8=";
# buildAndTestSubdir = "cli";

View File

@ -25,6 +25,8 @@ stdenv.mkDerivation rec {
GSEXE="${ghostscript}/bin/gs";
configureFlags = [ "--enable-transfig" ];
postInstall = ''
wrapProgram $out/bin/fig2ps2tex \
--set PATH ${lib.makeBinPath [ coreutils bc gnugrep gawk ]}
@ -36,7 +38,7 @@ stdenv.mkDerivation rec {
description = "Tool to convert Xfig files to other formats";
homepage = "http://mcj.sourceforge.net/";
license = licenses.xfig;
platforms = platforms.linux;
platforms = platforms.unix;
maintainers = with maintainers; [ lesuisse ];
};
}

View File

@ -10,11 +10,11 @@
# Based on https://gist.github.com/msteen/96cb7df66a359b827497c5269ccbbf94 and joplin-desktop nixpkgs.
let
pname = "zettlr";
version = "2.1.3";
version = "2.2.1";
name = "${pname}-${version}";
src = fetchurl {
url = "https://github.com/Zettlr/Zettlr/releases/download/v${version}/Zettlr-${version}-x86_64.appimage";
sha256 = "sha256-prUKMtM9qf34OXaMjuWa1jTZ+2tn99rVJBdqk1El3zs=";
sha256 = "sha256-nO5omfUdWQcvWmYfoGBHRpGZ6ihEeB6hyvyWeWVizbY=";
};
appimageContents = appimageTools.extractType2 {
inherit name src;

View File

@ -1,130 +0,0 @@
{ stdenv
, lib
, fetchzip
, autoPatchelfHook
, wrapGAppsHook
, gtk2
, nss
, xdg-utils
, xorg
, alsa-lib
, atk
, cairo
, cups
, curl
, dbus
, dbus-glib
, expat
, fontconfig
, freetype
, gdk-pixbuf
, glib
, gtk3
, libX11
, libxcb
, libXScrnSaver
, libXcomposite
, libXcursor
, libXdamage
, libXext
, libXfixes
, libXi
, libXrandr
, libXrender
, libXtst
, libdrm
, libnotify
, libopus
, libpulseaudio
, libuuid
, libxshmfence
, mesa
, nspr
, pango
, systemd
, at-spi2-atk
, at-spi2-core
}:
stdenv.mkDerivation rec {
pname = "icecat-bin";
version = "60.7.0";
src = fetchzip {
url = "https://mirror.tochlab.net/pub/gnu/gnuzilla/${version}/icecat-${version}.en-US.gnulinux-x86_64.tar.bz2";
sha256 = "sha256-bEapbQIcZXQ0Tip/X1Q0guowpr3wNDYsFbHGmTbc5mE=";
};
nativeBuildInputs = [
autoPatchelfHook
wrapGAppsHook
];
buildInputs = [
nss
xdg-utils
xorg.libxkbfile
alsa-lib
at-spi2-atk
at-spi2-core
atk
cairo
cups
curl
dbus
dbus-glib
expat
fontconfig.lib
freetype
gdk-pixbuf
glib
gtk2
gtk3
libX11
libXScrnSaver
libXcomposite
libXcursor
libXdamage
libXext
libXfixes
libXi
libXrandr
libXrender
libXtst
libdrm
libnotify
libopus
libuuid
libxcb
libxshmfence
mesa
nspr
nss
pango
xorg.libXt
stdenv.cc.cc.lib
];
unpackPhase = ''
mkdir -p $TMP/ $out/{opt,bin}
cp $src/* $TMP/ -r
'';
installPhase = ''
cp -r $TMP/* $out/opt/
ln -sf $out/opt/icecat-bin $out/bin/icecat
'';
runtimeDependencies = [
libpulseaudio.out
(lib.getLib systemd)
];
meta = with lib; {
description = "Binary build of the GNU version of the Mozilla Firefox browser";
homepage = "https://www.gnu.org/software/gnuzilla/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ dan4ik605743 ];
platforms = platforms.linux;
};
}

View File

@ -19,11 +19,11 @@ let
vivaldiName = if isSnapshot then "vivaldi-snapshot" else "vivaldi";
in stdenv.mkDerivation rec {
pname = "vivaldi";
version = "5.0.2497.51-1";
version = "5.1.2567.39-1";
src = fetchurl {
url = "https://downloads.vivaldi.com/${branch}/vivaldi-${branch}_${version}_amd64.deb";
sha256 = "OOLTY6Q0BI65PVN/B6+Q9t4Fa5Z0p9U2KyAeCGwCCPw=";
sha256 = "140idghryk132nyb8np011xiwzgh518n0fxrkjnnvi3c67shq7qc";
};
unpackPhase = ''

View File

@ -46,5 +46,6 @@ stdenv.mkDerivation rec {
'';
license = licenses.mit;
maintainers = with maintainers; [ AndersonTorres ];
platforms = platforms.linux;
};
}

View File

@ -17,14 +17,14 @@ let
};
in
stdenv.mkDerivation rec {
version = "14.32.6";
version = "14.32.21";
pname = "jmol";
src = let
baseVersion = "${lib.versions.major version}.${lib.versions.minor version}";
in fetchurl {
url = "mirror://sourceforge/jmol/Jmol/Version%20${baseVersion}/Jmol%20${version}/Jmol-${version}-binary.tar.gz";
sha256 = "sha256-b9E/IJfqeA8rBSQogb/ZVBMW3y9bc2dBj/BIl0HWFR8=";
sha256 = "sha256-jJw/y6lQ0bvzOmwOhedufxK0Tuq9Pq6lIPZ97o03Zec=";
};
patchPhase = ''

View File

@ -38,7 +38,8 @@ let
| sh
'';
outputHashMode = "recursive";
outputHash = "sha256-1TWySkS8w7L6Q+V946kcLOnM4hL3fieFvLrF5BZAlh4=";
outputHashAlgo = "sha256";
outputHash = "sha256-GjBUwJxeyJA6vGrPQVtNpcHb4CJlNlY4kHt1PT21xjo=";
};
in stdenv.mkDerivation rec {
inherit pname version src sourceRoot;

View File

@ -3,7 +3,7 @@
# Lua 5.3 needed and not available now
#, luaSupport ? false, lua5
, fortranSupport ? false, gfortran
, buildDocumentation ? false, transfig, ghostscript, doxygen
, buildDocumentation ? false, fig2dev, ghostscript, doxygen
, buildJavaBindings ? false, openjdk
, modelCheckingSupport ? false, libunwind, libevent, elfutils # Inside elfutils: libelf and libdw
, debug ? false
@ -40,7 +40,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ cmake perl python3 valgrind ]
++ optionals fortranSupport [ gfortran ]
++ optionals buildJavaBindings [ openjdk ]
++ optionals buildDocumentation [ transfig ghostscript doxygen ]
++ optionals buildDocumentation [ fig2dev ghostscript doxygen ]
++ optionals modelCheckingSupport [ libunwind libevent elfutils ];
#buildInputs = optional luaSupport lua5;

View File

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "gh";
version = "2.5.0";
version = "2.5.1";
src = fetchFromGitHub {
owner = "cli";
repo = "cli";
rev = "v${version}";
sha256 = "sha256-zQHFLXcsIFMqMCJp7+3Abc0WbSWKJyfAAE+TTJGRRmY=";
sha256 = "sha256-T0xThL4VHzpNMQV8fTVnG7R+D9ol/Z7a4MYMXbkQ680=";
};
vendorSha256 = "sha256-yMc3Czo7gTb2ZSWjj0yyId+qyro4mU1C+FOgEjZEhBY=";
vendorSha256 = "sha256-tJg/vekGUYP4q1ZP5UV3+lXv6bht4doVV3IaGH+4uf8=";
nativeBuildInputs = [ installShellFiles ];

View File

@ -18,7 +18,7 @@ config:
# Documentation
# python2Packages.markdown
, transfig, ghostscript, texinfo, pandoc
, fig2dev, ghostscript, texinfo, pandoc
, binutils-unwrapped
@ -81,7 +81,7 @@ stdenv.mkDerivation (rec {
python2Packages.wrapPython
# Documentation
python2Packages.markdown transfig ghostscript texinfo pandoc
python2Packages.markdown fig2dev ghostscript texinfo pandoc
# Others
] ++ (concatMap (x: x.buildInputs or []) (attrValues config.xenfiles))

View File

@ -0,0 +1,35 @@
{ lib, stdenvNoCC, fetchFromGitHub }:
stdenvNoCC.mkDerivation rec{
pname = "artim-dark";
version = "unstable-2021-12-29";
src = fetchFromGitHub {
owner="Mrcuve0";
repo="Aritim-Dark";
rev = "99cd330a1ab4814260e28f15431e3338a1103668";
hash = "sha256-xGnw5KpXbVyDdTuAkav1Hec6bitpZdPzZk0xv7WHTdY=";
};
dontBuild = true;
installPhase = ''
mkdir -p $out/share/plasma/desktoptheme
cp -R KDE/plasmaTheme/Aritim-Dark* $out/share/plasma/desktoptheme
mkdir -p $out/share/aurorae/themes
cp -R KDE/auroraeTheme $out/share/aurorae/themes/Aritim-Dark
mkdir -p $out/share/color-schemes
cp -R KDE/colorScheme/*.colors $out/share/color-schemes
mkdir -p $out/share/plasma/look-and-feel
cp -R KDE/globalTheme $out/share/plasma/look-and-feel/Aritim-Dark
mkdir -p $out/share/themes
cp -R GTK $out/share/themes/Aritim-Dark
'';
meta = {
description = "Dark theme deeply inspired by the Ayu Dark color palette";
homepage = "https://github.com/Mrcuve0/Aritim-Dark";
license = with lib.licenses; [ gpl3Only ];
platforms = lib.platforms.unix;
maintainers = [ lib.maintainers.pasqui23 ];
};
}

View File

@ -56,11 +56,11 @@
stdenv.mkDerivation rec {
pname = "efl";
version = "1.26.1";
version = "1.26.2";
src = fetchurl {
url = "http://download.enlightenment.org/rel/libs/${pname}/${pname}-${version}.tar.xz";
sha256 = "0hm6i1f2g4mwj726rc6na38xhys1plbv9swrlc9hrpa87mz6gac6";
sha256 = "071h0pscbd8g341yy5rz9mk1xn8yhryldhl6mmr1y6lafaycyy99";
};
nativeBuildInputs = [

View File

@ -21,11 +21,11 @@
stdenv.mkDerivation rec {
pname = "enlightenment";
version = "0.25.1";
version = "0.25.3";
src = fetchurl {
url = "http://download.enlightenment.org/rel/apps/${pname}/${pname}-${version}.tar.xz";
sha256 = "0i1424vsc929h36hx04646pbrjiya6nc1nqr6s15xwvfv7imzw1c";
sha256 = "1xngwixp0cckfq3jhrdmmk6zj67125amr7g6xwc6l89pnpmlkz9p";
};
nativeBuildInputs = [

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-arcmenu";
version = "20";
version = "21";
src = fetchFromGitLab {
owner = "arcmenu";
repo = "ArcMenu";
rev = "v${version}";
sha256 = "sha256-HjhOZfXld0gnKOAazT8qbI0Jdq6NY/FsrhzAY9uxxMg=";
sha256 = "sha256-A47nX2fmFcJfWvQUJZsFGK1h4GPkf3QBB0BALlr9ZlM=";
};
patches = [

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
pname = "rakudo";
version = "2021.12";
version = "2022.02";
src = fetchurl {
url = "https://rakudo.org/dl/rakudo/rakudo-${version}.tar.gz";
sha256 = "sha256-f1PSxxONE6sBaS1b19vCjz8p7Ya9ltUoCFb1WhqwVAY=";
sha256 = "sha256-am6dvMbZoWEKNMbsZ+LT9pTXsz6eCg8iRUMIn6f3EzI=";
};
nativeBuildInputs = [ removeReferencesTo ];

View File

@ -8,11 +8,11 @@
stdenv.mkDerivation rec {
pname = "moarvm";
version = "2021.12";
version = "2022.02";
src = fetchurl {
url = "https://moarvm.org/releases/MoarVM-${version}.tar.gz";
sha256 = "sha256-1Ju+sQ2WFsLYen+t0ca7elzhHBnHxEu7i+928ltQXE8=";
sha256 = "sha256-T5PNzmuKVloyKCuzjMlxzv63H10CLIUMM47oFFV07pY=";
};
postPatch = ''

View File

@ -2,11 +2,11 @@
stdenv.mkDerivation rec {
pname = "nqp";
version = "2021.12";
version = "2022.02";
src = fetchurl {
url = "https://github.com/raku/nqp/releases/download/${version}/nqp-${version}.tar.gz";
sha256 = "sha256-Dh1TT9HuYaTIByMJuvvARmDprnLYhhjaoOjxUCLw2RM=";
sha256 = "sha256-JdPJl0XNhPQEmpvZzya7XcgXklq6r+ccm9tohBzbGLE=";
};
buildInputs = [ perl ];

View File

@ -1,9 +1,15 @@
{ lib, stdenv, fetchurl, lv2, pkg-config, python3, serd, sord, sratom, wafHook }:
{ lib, stdenv, fetchurl, lv2, pkg-config, python3, serd, sord, sratom, wafHook
# test derivations
, pipewire
}:
stdenv.mkDerivation rec {
pname = "lilv";
version = "0.24.12";
outputs = [ "out" "dev" ];
src = fetchurl {
url = "https://download.drobilla.net/${pname}-${version}.tar.bz2";
sha256 = "sha256-JqN3kIkMnB+DggO0f1sjIDNP6SwCpNJuu+Jmnb12kGE=";
@ -15,6 +21,10 @@ stdenv.mkDerivation rec {
buildInputs = [ serd sord sratom ];
propagatedBuildInputs = [ lv2 ];
passthru.tests = {
inherit pipewire;
};
meta = with lib; {
homepage = "http://drobilla.net/software/lilv";
description = "A C library to make the use of LV2 plugins";

View File

@ -1,14 +1,14 @@
{lib, stdenv, fetchFromGitHub, cmake}:
stdenv.mkDerivation rec {
version = "1.3.2";
version = "1.4.2";
pname = "nanoflann";
src = fetchFromGitHub {
owner = "jlblancoc";
repo = "nanoflann";
rev = "v${version}";
sha256 = "0lq1zqwjvk8wv15hd7aw57jsqbvv45cwb8ngdh1d2iyw5rvnbhsn";
sha256 = "sha256-znIX1S0mfOqLYPIcyVziUM1asBjENPEAdafLud1CfFI=";
};
nativeBuildInputs = [ cmake ];

View File

@ -2,7 +2,7 @@
stdenv.mkDerivation rec {
pname = "primesieve";
version = "7.7";
version = "7.8";
nativeBuildInputs = [ cmake ];
@ -10,7 +10,7 @@ stdenv.mkDerivation rec {
owner = "kimwalisch";
repo = "primesieve";
rev = "v${version}";
sha256 = "sha256-1Gfo00yaf7zHzCLfu/abWqeM0qBuLu+f+lowFFnWFxY=";
sha256 = "sha256-M35CP/xEyC7mEh84kaGsgfsDI9fnanHraNPgTvpqimI=";
};
meta = with lib; {

View File

@ -382,18 +382,24 @@ let
meta.broken = since "10";
};
tailwindcss = super.tailwindcss.override {
tailwindcss = super.tailwindcss.overrideAttrs (oldAttrs: {
plugins = [ ];
nativeBuildInputs = [ pkgs.makeWrapper ];
postInstall = ''
nodePath=""
for p in "$out" "${self.postcss}" $plugins; do
nodePath="$nodePath''${nodePath:+:}$p/lib/node_modules"
done
wrapProgram "$out/bin/tailwind" \
--prefix NODE_PATH : ${self.postcss}/lib/node_modules
--prefix NODE_PATH : "$nodePath"
wrapProgram "$out/bin/tailwindcss" \
--prefix NODE_PATH : ${self.postcss}/lib/node_modules
--prefix NODE_PATH : "$nodePath"
unset nodePath
'';
passthru.tests = {
simple-execution = pkgs.callPackage ./package-tests/tailwindcss.nix { inherit (self) tailwindcss; };
};
};
});
tedicross = super."tedicross-git+https://github.com/TediCross/TediCross.git#v0.8.7".override {
nativeBuildInputs = [ pkgs.makeWrapper ];

View File

@ -13,7 +13,11 @@
, "@nerdwallet/shepherd"
, "@nestjs/cli"
, "@squoosh/cli"
, "@tailwindcss/aspect-ratio"
, "@tailwindcss/forms"
, "@tailwindcss/language-server"
, "@tailwindcss/line-clamp"
, "@tailwindcss/typography"
, "@uppy/companion"
, "@vue/cli"
, "@webassemblyjs/cli"

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +1,47 @@
{ runCommand, tailwindcss }:
{ runCommand, tailwindcss, nodePackages }:
let
inherit (tailwindcss) packageName version;
tailwindcssInput = builtins.toFile "input.css" ''
@tailwind base;
@tailwind components;
@tailwind utilities;
'';
tailwindcssWithPlugins = tailwindcss.overrideAttrs (oldAttrs: {
plugins = [
nodePackages."@tailwindcss/typography"
];
});
tailwindcssWithPluginsConfig = builtins.toFile "tailwind.config.js" ''
module.exports = {
content: ["./with-typography.input"],
plugins: [
require('@tailwindcss/typography'),
],
}
'';
in
runCommand "${packageName}-tests" { meta.timeout = 60; }
''
mkdir $out
# Ensure CLI runs
${tailwindcss}/bin/tailwind --help > /dev/null
${tailwindcss}/bin/tailwindcss --help > /dev/null
# Needed for Nix to register the command as successful
touch $out
# Ensure CLI with plugins runs
echo '"ml-4 prose"' > ./with-typography.input
${tailwindcssWithPlugins}/bin/tailwind \
--config ${tailwindcssWithPluginsConfig} \
--input ${tailwindcssInput} \
--output $out/with-typography.css
grep -q ml-4 $out/with-typography.css
grep -q prose $out/with-typography.css
''

View File

@ -0,0 +1,45 @@
{ lib
, aiohttp
, aresponses
, buildPythonPackage
, fetchFromGitHub
, pytest-asyncio
, pytestCheckHook
, pythonOlder
}:
buildPythonPackage rec {
pname = "aiopyarr";
version = "22.2.1";
format = "setuptools";
disabled = pythonOlder "3.9";
src = fetchFromGitHub {
owner = "tkdrob";
repo = pname;
rev = version;
hash = "sha256-SEF47hz5XbATuuuO5t5H40+kT7RWSBjP0BfYd38pNSw=";
};
propagatedBuildInputs = [
aiohttp
];
checkInputs = [
aresponses
pytest-asyncio
pytestCheckHook
];
pythonImportsCheck = [
"aiopyarr"
];
meta = with lib; {
description = "Python API client for Lidarr/Radarr/Readarr/Sonarr";
homepage = "https://github.com/tkdrob/aiopyarr";
license = with licenses; [ mit ];
maintainers = with maintainers; [ fab ];
};
}

View File

@ -0,0 +1,59 @@
{ lib
, aiohttp
, aresponses
, buildPythonPackage
, fetchFromGitHub
, poetry-core
, pytest-asyncio
, pytestCheckHook
, pythonOlder
, yarl
}:
buildPythonPackage rec {
pname = "autarco";
version = "0.1.0";
format = "pyproject";
disabled = pythonOlder "3.9";
src = fetchFromGitHub {
owner = "klaasnicolaas";
repo = "python-autarco";
rev = "v${version}";
hash = "sha256-ID1lCGfF6XHVv8Azd34a30hcsX17uMXo22stAhYH1Uo=";
};
nativeBuildInputs = [
poetry-core
];
propagatedBuildInputs = [
aiohttp
yarl
];
checkInputs = [
aresponses
pytest-asyncio
pytestCheckHook
];
postPatch = ''
# Upstream doesn't set a version for the pyproject.toml
substituteInPlace pyproject.toml \
--replace "0.0.0" "${version}" \
--replace "--cov" ""
'';
pythonImportsCheck = [
"autarco"
];
meta = with lib; {
description = "Module for the Autarco Inverter";
homepage = "https://github.com/klaasnicolaas/python-autarco";
license = with licenses; [ mit ];
maintainers = with maintainers; [ fab ];
};
}

View File

@ -42,6 +42,8 @@ buildPythonPackage rec {
--replace "pyjwt~=1.7.1" "pyjwt" \
--replace "qcs-api-client~=0.8.0" "qcs-api-client" \
--replace "iso8601~=0.1.14" "iso8601" \
--replace "rfc3986~=1.5.0" "rfc3986" \
--replace "pyquil~=3.0.0" "pyquil" \
--replace "pydantic~=1.8.2" "pydantic"
# Remove outdated test
rm cirq_rigetti/service_test.py

View File

@ -0,0 +1,58 @@
{ lib
, aiohttp
, aresponses
, buildPythonPackage
, fetchFromGitHub
, poetry-core
, pytest-asyncio
, pytestCheckHook
, pythonOlder
, yarl
}:
buildPythonPackage rec {
pname = "eiswarnung";
version = "1.0.0";
format = "pyproject";
disabled = pythonOlder "3.9";
src = fetchFromGitHub {
owner = "klaasnicolaas";
repo = "python-eiswarnung";
rev = "v${version}";
hash = "sha256-Cw/xRypErasdrOZJ/0dWLl4eYH01vBI9mYm98teIdRc=";
};
nativeBuildInputs = [
poetry-core
];
propagatedBuildInputs = [
aiohttp
yarl
];
checkInputs = [
aresponses
pytest-asyncio
pytestCheckHook
];
postPatch = ''
substituteInPlace pyproject.toml \
--replace '"0.0.0"' '"${version}"' \
--replace 'addopts = "--cov"' ""
'';
pythonImportsCheck = [
"eiswarnung"
];
meta = with lib; {
description = "Module for getting Eiswarning API forecasts";
homepage = "https://github.com/klaasnicolaas/python-eiswarnung";
license = with licenses; [ mit ];
maintainers = with maintainers; [ fab ];
};
}

View File

@ -0,0 +1,38 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, python
, pythonOlder
}:
buildPythonPackage rec {
pname = "findimports";
version = "2.2.0";
format = "setuptools";
disabled = pythonOlder "3.6";
src = fetchFromGitHub {
owner = "mgedmin";
repo = pname;
rev = version;
hash = "sha256-p13GVDXDOzOiTnRgtF7UxN1vwZRMa7wVEXJQrFQV7RU=";
};
pythonImportsCheck = [
"findimports"
];
checkPhase = ''
runHook preCheck
${python.interpreter} testsuite.py
runHook postCheck
'';
meta = with lib; {
description = "Module for the analysis of Python import statements";
homepage = "https://github.com/mgedmin/findimports";
license = with licenses; [ gpl2Only /* or */ gpl3Only ];
maintainers = with maintainers; [ fab ];
};
}

View File

@ -0,0 +1,58 @@
{ lib
, aiohttp
, aresponses
, buildPythonPackage
, fetchFromGitHub
, poetry-core
, pytest-asyncio
, pytestCheckHook
, pythonOlder
, yarl
}:
buildPythonPackage rec {
pname = "net2grid";
version = "2.0.0";
format = "pyproject";
disabled = pythonOlder "3.9";
src = fetchFromGitHub {
owner = "klaasnicolaas";
repo = "python-net2grid";
rev = "v${version}";
hash = "sha256-2hjWQaktx7XUS7gf7A+9QNSZSujyVZUka/SwEnEu2dg=";
};
nativeBuildInputs = [
poetry-core
];
propagatedBuildInputs = [
aiohttp
yarl
];
checkInputs = [
aresponses
pytest-asyncio
pytestCheckHook
];
postPatch = ''
substituteInPlace pyproject.toml \
--replace '"0.0.0"' '"${version}"' \
--replace 'addopts = "--cov"' ""
'';
pythonImportsCheck = [
"net2grid"
];
meta = with lib; {
description = "Module for interacting with NET2GRID devices";
homepage = "https://github.com/klaasnicolaas/python-net2grid";
license = with licenses; [ mit ];
maintainers = with maintainers; [ fab ];
};
}

View File

@ -1,7 +1,6 @@
{ lib
, buildPythonPackage
, fetchFromGitHub
, fetchpatch
, importlib-metadata
, ipython
, lark
@ -23,7 +22,7 @@
buildPythonPackage rec {
pname = "pyquil";
version = "3.0.1";
version = "3.1.0";
format = "pyproject";
disabled = pythonOlder "3.7";
@ -32,17 +31,9 @@ buildPythonPackage rec {
owner = "rigetti";
repo = pname;
rev = "v${version}";
sha256 = "sha256-OU7/LjcpCxvqlcfdlm5ll4f0DYXf0yxNprM8Muu2wyg=";
sha256 = "sha256-ejfzxCf2NucK/hfzswHu3h4DPPZQY8vkMAQ51XDRWKU=";
};
patches = [
(fetchpatch {
name = "pyquil-pr-1404-unpin-qcs-api-client-version-pyproject.patch";
url = "https://github.com/rigetti/pyquil/commit/2e35a4fdf65262fdf39c5091aeddfa3f3564925a.patch";
sha256 = "sha256-KGDNU2wpzsuifQSbbkoMwaFXspHW6zyIJ5GRZbw+lUY=";
})
];
nativeBuildInputs = [
poetry-core
];
@ -97,7 +88,9 @@ buildPythonPackage rec {
"test_classical"
];
pythonImportsCheck = [ "pyquil" ];
pythonImportsCheck = [
"pyquil"
];
meta = with lib; {
description = "Python library for creating Quantum Instruction Language (Quil) programs";

View File

@ -96,9 +96,9 @@ rec {
# https://docs.gradle.org/current/userguide/compatibility.html
gradle_7 = gen {
version = "7.3.3";
nativeVersion = "0.22-milestone-21";
sha256 = "00h3z0vxc4hv31sc71gb88r8yabyqgz304wpr0bxhbx2d14f11mm";
version = "7.4";
nativeVersion = "0.22-milestone-23";
sha256 = "0d56bgd2m64pzmycjk29hwdlhbpn1kkm7fjik1sibn6vslw71hlc";
defaultJava = jdk17;
};

View File

@ -35,9 +35,13 @@ do
f="gradle-${v}-spec.nix"
if [ -f "$f" ]
if [[ -n "$1" && "$1" != "$v" ]]
then
echo "$v SKIP"
echo "$v SKIP (nomatch)"
continue
elif [ "$1" == "" ] && [ -f "$f" ]
then
echo "$v SKIP (exists)"
continue
fi
@ -45,12 +49,18 @@ do
read -d "\n" gradle_hash gradle_path < <(nix-prefetch-url --print-path $url)
# Prefix and suffix for "native-platform" dependency.
gradle_native_prefix="gradle-$v/lib/native-native-"
gradle_native_prefix="gradle-$v/lib/native-platform-"
gradle_native_suffix=".jar"
gradle_native=$(zipinfo -1 "$gradle_path" "$gradle_native_prefix*$gradle_native_suffix" | head -n1)
tmp=$(mktemp)
zipinfo -1 "$gradle_path" "$gradle_native_prefix*$gradle_native_suffix" > $tmp
gradle_native=$(cat $tmp | head -n1)
gradle_native=${gradle_native#"$gradle_native_prefix"}
gradle_native=${gradle_native%"$gradle_native_suffix"}
# Supported architectures
#grep -Pho "(linux|osx)-\w+" $tmp | sort | uniq
rm -f $tmp
echo -e "{\\n version = \"$v\";\\n nativeVersion = \"$gradle_native\";\\n sha256 = \"$gradle_hash\";\\n}" > $f
echo "$v DONE"

View File

@ -0,0 +1,52 @@
{ lib
, fetchFromGitHub
, python3
}:
python3.pkgs.buildPythonApplication rec {
pname = "circup";
version = "1.0.3";
format = "setuptools";
src = fetchFromGitHub {
owner = "adafruit";
repo = pname;
rev = version;
hash = "sha256-1UNruZgA7Z0G1t3GLffiA/p+gjPYBPpdn5QqQk6D/o0=";
};
SETUPTOOLS_SCM_PRETEND_VERSION = version;
nativeBuildInputs = with python3.pkgs; [
setuptools-scm
];
propagatedBuildInputs = with python3.pkgs; [
appdirs
click
findimports
requests
semver
setuptools
update_checker
];
checkInputs = with python3.pkgs; [
pytestCheckHook
];
postBuild = ''
export HOME=$(mktemp -d);
'';
pythonImportsCheck = [
" circup "
];
meta = with lib; {
description = "CircuitPython library updater";
homepage = "https://github.com/adafruit/circup";
license = with licenses; [ mit ];
maintainers = with maintainers; [ fab ];
};
}

View File

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "mani";
version = "0.11.1";
version = "0.12.0";
src = fetchFromGitHub {
owner = "alajmo";
repo = "mani";
rev = "v${version}";
sha256 = "sha256-9SvjgXQADDNyv8O9KKE3gKXu67Nz5LepayUXSbWwEoY=";
sha256 = "sha256-EkoDyVDK+DmwK45qBPwyHegQGsK9B5SQ0zVf1lBYbPE=";
};
vendorSha256 = "sha256-cuAZN08A2nND9d4c9w+kTqiMB9yaJ49Q0aT/V0J9FRw=";
vendorSha256 = "sha256-NnXQAf8m2cGLvwSOzQWXffiG1zyVqDPQnGAeqe7EUHY=";
nativeBuildInputs = [ installShellFiles makeWrapper ];

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "nix-build-uncached";
version = "1.1.0";
version = "1.1.1";
src = fetchFromGitHub {
owner = "Mic92";
repo = "nix-build-uncached";
rev = "v${version}";
sha256 = "1v9xyv0hhvfw61k4pbgzrlgy7igl619cangi40fkh7gdvs01dxz4";
sha256 = "sha256-9oc5zoOlwV02cY3ek+qYLgZaFQk4dPE9xgF8mAePGBI=";
};
vendorSha256 = null;

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "semver-tool";
version = "3.2.0";
version = "3.3.0";
src = fetchFromGitHub {
owner = "fsaintjacques";
repo = pname;
rev = version;
sha256 = "sha256-coy/g4nEvSN+0/aqK2r3EEIaoUcnsZhzX66H1qsK9ac=";
sha256 = "sha256-LqZTHFiis4BYL1bnJoeuW56wf8+o38Ygs++CV9CKNhM=";
};
dontBuild = true; # otherwise we try to 'make' which fails.
@ -25,7 +25,7 @@ stdenv.mkDerivation rec {
meta = with lib; {
homepage = "https://github.com/fsaintjacques/semver-tool";
description = "semver bash implementation";
license = licenses.gpl3Plus;
license = licenses.asl20;
platforms = platforms.unix;
maintainers = [ maintainers.qyliss ];
};

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchurl, transfig, tex, ghostscript, colm
{ lib, stdenv, fetchurl, fig2dev, tex, ghostscript, colm
, build-manual ? false
}:
@ -13,7 +13,7 @@ let
inherit sha256;
};
buildInputs = lib.optional build-manual [ transfig ghostscript tex ];
buildInputs = lib.optional build-manual [ fig2dev ghostscript tex ];
preConfigure = lib.optionalString build-manual ''
sed -i "s/build_manual=no/build_manual=yes/g" DIST

View File

@ -4,16 +4,16 @@ let bins = [ "regbot" "regctl" "regsync" ]; in
buildGoModule rec {
pname = "regclient";
version = "0.3.8";
version = "0.3.10";
tag = "v${version}";
src = fetchFromGitHub {
owner = "regclient";
repo = "regclient";
rev = tag;
sha256 = "14w0g24sgphgib33sdvrvwk86p7km2pasb5fmr3p48i7sc71ja3h";
sha256 = "sha256-3nYVhKHNz0V0j6JlZ5Dm5TFWA2kmUhshNVUym/QWSyM=";
};
vendorSha256 = "sha256-9sRjP7lxMRdt9D9ElIX+mbYIvCaknWMgDyYl+1/q0/g=";
vendorSha256 = "sha256-rj4sQ8Ci2KMayJNXn+KVihOiZehk233l48Ps0yjOOE4=";
outputs = [ "out" ] ++ bins;

View File

@ -2,16 +2,16 @@
rustPlatform.buildRustPackage rec {
pname = "rpg-cli";
version = "1.0.0";
version = "1.0.1";
src = fetchFromGitHub {
owner = "facundoolano";
repo = pname;
rev = version;
sha256 = "sha256-Ih+1qO/VHkRp766WDe09xXL/pkby+sURopy7m5wRn4Y=";
sha256 = "sha256-rhG/EK68PWvQYoZdjhk0w7oNmh/QiTaAt4/WgEkgxEA=";
};
cargoSha256 = "sha256-Au7Nlpl4XOSG8rW0DaHFDqBr1kUY5Emyw6ff0htPc+I=";
cargoSha256 = "sha256-YXQohmDmkClziaLkL2N4cGURZ0tewyt7BuNY4hS+a4w=";
# tests assume the authors macbook, and thus fail
doCheck = false;

View File

@ -1,4 +1,4 @@
{ lib, stdenv, fetchFromGitHub, rustPlatform, libiconv, Security }:
{ lib, stdenv, nixosTests, fetchFromGitHub, rustPlatform, libiconv, Security }:
rustPlatform.buildRustPackage rec {
pname = "agate";
@ -23,6 +23,8 @@ rustPlatform.buildRustPackage rec {
runHook postInstallCheck
'';
passthru.tests = { inherit (nixosTests) agate; };
meta = with lib; {
homepage = "https://github.com/mbrubeck/agate";
changelog = "https://github.com/mbrubeck/agate/blob/master/CHANGELOG.md";

View File

@ -15,6 +15,9 @@
# Additional packages to add to propagatedBuildInputs
, extraPackages ? ps: []
# Write out info about included extraComponents and extraPackages
, writeText
# Override Python packages using
# self: super: { pkg = super.pkg.overridePythonAttrs (oldAttrs: { ... }); }
# Applied after defaultOverrides
@ -130,6 +133,10 @@ let
# Ensure that we are using a consistent package set
extraBuildInputs = extraPackages python.pkgs;
# Create info about included packages and components
extraComponentsFile = writeText "home-assistant-components" (lib.concatStringsSep "\n" extraComponents);
extraPackagesFile = writeText "home-assistant-packages" (lib.concatMapStringsSep "\n" (pkg: pkg.pname) extraBuildInputs);
# Don't forget to run parse-requirements.py after updating
hassVersion = "2022.2.6";
@ -158,7 +165,6 @@ in python.pkgs.buildPythonApplication rec {
src = ./patches/ffmpeg-path.patch;
ffmpeg = "${lib.getBin ffmpeg}/bin/ffmpeg";
})
./patches/tests-ignore-OSErrors-in-hass-fixture.patch
];
postPatch = let
@ -284,6 +290,11 @@ in python.pkgs.buildPythonApplication rec {
export PATH=${inetutils}/bin:$PATH
'';
postInstall = ''
cp -v ${extraComponentsFile} $out/extra_components
cp -v ${extraPackagesFile} $out/extra_packages
'';
passthru = {
inherit
availableComponents

View File

@ -1,27 +0,0 @@
From 3e3f5c37252a33ea1e71c39f2ca0f13940c261ad Mon Sep 17 00:00:00 2001
From: Martin Weinelt <hexa@darmstadt.ccc.de>
Date: Sat, 17 Jul 2021 16:11:23 +0200
Subject: [PATCH] tests: ignore OSErrors in hass fixture
The nix sandbox will cause OSErrors due to limitations imposed on
network interaction. This change makes it so we forgive these cases.
---
tests/conftest.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/conftest.py b/tests/conftest.py
index 1f5ffc80d0..b284727a0f 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -168,6 +168,8 @@ def hass(loop, load_registries, hass_storage, request):
continue
if isinstance(ex, ServiceNotFound):
continue
+ if isinstance(ex, OSError):
+ continue
raise ex
--
2.32.0

View File

@ -1,63 +0,0 @@
{ lib, stdenv, fetchurl, zlib, libjpeg, libpng, imake, gccmakedep }:
stdenv.mkDerivation rec {
pname = "transfig";
version = "3.2.4";
src = fetchurl {
url = "ftp://ftp.tex.ac.uk/pub/archive/graphics/transfig/transfig.${version}.tar.gz";
sha256 = "0429snhp5acbz61pvblwlrwv8nxr6gf12p37f9xxwrkqv4ir7dd4";
};
nativeBuildInputs = [ imake gccmakedep ];
buildInputs = [ zlib libjpeg libpng ];
patches = [
./patch-fig2dev-dev-Imakefile.patch
./patch-fig2dev-Imakefile.patch
./patch-transfig-Imakefile.patch
./patch-fig2dev-fig2dev.h.patch
./patch-fig2dev-dev-gensvg.c.patch
];
patchPhase = ''
runHook prePatch
configureImakefiles() {
local sedcmd=$1
sed "$sedcmd" fig2dev/Imakefile > tmpsed
cp tmpsed fig2dev/Imakefile
sed "$sedcmd" fig2dev/dev/Imakefile > tmpsed
cp tmpsed fig2dev/dev/Imakefile
sed "$sedcmd" transfig/Imakefile > tmpsed
cp tmpsed transfig/Imakefile
}
for i in $patches; do
header "applying patch $i" 3
patch -p0 < $i
stopNest
done
configureImakefiles "s:__PREFIX_PNG:${libpng}:"
configureImakefiles "s:__PREFIX:$out:"
runHook postPatch
'';
makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ];
preInstall = ''
mkdir -p $out
mkdir -p $out/lib
'';
hardeningDisable = [ "format" ];
meta = {
platforms = lib.platforms.unix;
};
}

View File

@ -1,75 +0,0 @@
--- fig2dev/Imakefile.orig Thu Mar 25 22:39:10 2004
+++ fig2dev/Imakefile Thu Mar 25 22:41:01 2004
@@ -16,17 +16,23 @@
XCOMM party to do so, with the only requirement being that this copyright
XCOMM notice remain intact.
+BINDIR = __PREFIX/bin
+DESTDIR = __DESTROOT
+MKDIRHIER = mkdirhier
+MANDIR = __PREFIX/share/man/$(MANSUFFIX)
+INSTALLFLAGS = -c
+
XCOMM ******
XCOMM You should point XFIGLIBDIR to the same directory you did when you compiled
XCOMM and installed xfig.
-XFIGLIBDIR = /usr/local/lib/X11/xfig
+XFIGLIBDIR = __PREFIX/lib/xfig
XCOMM ******
XCOMM If your system has the strerror() function (doesn't have sys_errlist) then
XCOMM comment out NEED_STRERROR with an XCOMM comment.
-NEED_STRERROR = -DNEED_STRERROR
+XCOMM NEED_STRERROR = -DNEED_STRERROR
XCOMM The following probably only applies to Windows 9x/NT:
XCOMM If your system can open files in text and binary modes and has the
@@ -39,7 +45,7 @@
XCOMM inline functions. With the "INLINE" keyword, you should notice that
XCOMM the display will be a bit faster in complex figures
-XCOMM USEINLINE = -DUSE_INLINE
+USEINLINE = -DUSE_INLINE
XCOMM ****************
XCOMM Change RGB if necessary, to point to your rgb.txt color database
@@ -60,8 +66,8 @@
XCOMM are in different places
#ifdef USEPNG
-PNGLIBDIR = $(USRLIBDIR)
-PNGINC = -I/usr/include/X11
+PNGLIBDIR = __PREFIX_PNG/lib
+PNGINC = -I__PREFIX_PNG/include
#endif
XCOMM ****************
@@ -73,7 +79,7 @@
XCOMM Change XPMINC if necessary to point to the include file for xpm (xpm.h)
XCOMM
-XCOMM #define USEXPM
+XCOMM #define USEXPM
#ifdef USEXPM
XPMLIBDIR = $(USRLIBDIR)
@@ -126,7 +132,7 @@
#ifdef I18N
I18N_DEFS = -DI18N
-FIG2DEV_LIBDIR = /usr/local/lib/fig2dev
+FIG2DEV_LIBDIR = __PREFIX/lib/fig2dev
I18N_DEV_DEFS = $(I18N_DEFS) -DFIG2DEV_LIBDIR=\\\"$(FIG2DEV_LIBDIR)\\\"
install::
@@ -177,7 +183,7 @@
IMAKE_DEFINES = $(DUSEPNG) $(DUSEXPM)
-DEVDEFINES = $(DUSEPNG) $(DUSEXPM) $(XPMINC) $(DDNFSS) $(DDA4) \
+DEVDEFINES = $(DUSEPNG) $(DUSEXPM) $(PNGINC) $(XPMINC) $(DDNFSS) $(DDA4) \
$(DDLATEX2E_GRAPHICS) $(DDEPSFIG) $(DDIBMGEC) $(DDDVIPS) $(I18N_DEV_DEFS)
#define IHaveSubdirs

View File

@ -1,15 +0,0 @@
--- fig2dev/dev/Imakefile.orig Thu Mar 25 22:47:18 2004
+++ fig2dev/dev/Imakefile Thu Mar 25 22:47:51 2004
@@ -18,6 +18,12 @@
XCOMM party to do so, with the only requirement being that this copyright
XCOMM notice remain intact.
+BINDIR = __PREFIX/bin
+USRLIBDIR = __PREFIX/lib
+DESTDIR = __DESTROOT
+MKDIRHIER = mkdirhier
+MANDIR = __PREFIX/share/man/$(MANSUFFIX)
+
INCLUDES = -I.. -I../..
#ifdef USE_PNG

View File

@ -1,21 +0,0 @@
--- fig2dev/dev/gensvg.c.orig Wed Jul 23 16:39:14 2003
+++ fig2dev/dev/gensvg.c Wed Jul 23 16:39:52 2003
@@ -692,16 +692,14 @@
if (t->angle != 0) {
fprintf (tfp, "<g transform=\"translate(%d,%d) rotate(%d)\" >\n",
(int) (t->base_x * mag), (int) (t->base_y * mag), degrees (t->angle));
- fprintf (tfp, "<text x=\"0\" y=\"0\" fill=\"#%6.6x\" font-family=\"%s\"
- font-style=\"%s\" font-weight=\"%s\" font-size=\"%d\" text-anchor=\"%s\" >\n",
+ fprintf (tfp, "<text x=\"0\" y=\"0\" fill=\"#%6.6x\" font-family=\"%s\" font-style=\"%s\" font-weight=\"%s\" font-size=\"%d\" text-anchor=\"%s\" >\n",
rgbColorVal (t->color), family[(int) ceil ((t->font + 1) / 4)],
(t->font % 2 == 0 ? "normal" : "italic"),
(t->font % 4 < 2 ? "normal" : "bold"), (int) (ceil (t->size * 12 * mag)),
anchor[t->type]);
}
else
- fprintf (tfp, "<text x=\"%d\" y=\"%d\" fill=\"#%6.6x\" font-family=\"%s\"
- font-style=\"%s\" font-weight=\"%s\" font-size=\"%d\" text-anchor=\"%s\" >\n",
+ fprintf (tfp, "<text x=\"%d\" y=\"%d\" fill=\"#%6.6x\" font-family=\"%s\" font-style=\"%s\" font-weight=\"%s\" font-size=\"%d\" text-anchor=\"%s\" >\n",
(int) (t->base_x * mag), (int) (t->base_y * mag), rgbColorVal (t->color),
family[(int) ceil ((t->font + 1) / 4)],
(t->font % 2 == 0 ? "normal" : "italic"),

View File

@ -1,19 +0,0 @@
--- fig2dev/fig2dev.h.orig Thu Dec 19 07:45:28 2002
+++ fig2dev/fig2dev.h Tue Jan 7 20:08:45 2003
@@ -22,7 +22,6 @@
#include <sys/file.h>
#include <signal.h>
#include <string.h>
-#include <varargs.h>
#include <pwd.h>
#include <errno.h>
#include <time.h>
@@ -210,7 +209,7 @@
#endif /* MAXPATHLEN */
#endif /* PATH_MAX */
-#if ( !defined(__NetBSD__) && !defined(__DARWIN__))
+#if ( !defined(__NetBSD__) && !defined(__FreeBSD__) && !defined(__DARWIN__))
extern int sys_nerr, errno;
#endif

View File

@ -1,22 +0,0 @@
--- transfig/Imakefile.orig Thu Mar 25 22:10:42 2004
+++ transfig/Imakefile Thu Mar 25 22:14:04 2004
@@ -14,11 +14,18 @@
XCOMM party to do so, with the only requirement being that this copyright
XCOMM notice remain intact.
+BINDIR = __PREFIX/bin
+USRLIBDIR = __PREFIX/lib
+DESTDIR = __DESTROOT
+MKDIRHIER = mkdirhier
+MANDIR = __PREFIX/share/man/$(MANSUFFIX)
+INSTALLFLAGS = -c
+
XCOMM Uncomment the USELATEX2E flag in the transfig/Imakefile file to use the
XCOMM \\usepackage{} command for LaTeX2e.
XCOMM The default is to use \\documentstyle{} for LaTeX209.
-XCOMM USELATEX2E = -DLATEX2E
+USELATEX2E = -DLATEX2E
XCOMM ******* DON'T CHANGE ANYTHIN BELOW THIS POINT *******

View File

@ -83,6 +83,8 @@ stdenv.mkDerivation rec {
wrapQtApp "$out/bin/zbarcam-qt"
'';
enableParallelBuilding = true;
meta = with lib; {
description = "Bar code reader";
longDescription = ''

View File

@ -1,16 +1,18 @@
{ lib, stdenv, fetchFromGitHub, python3 }:
{ lib, stdenv, fetchFromGitHub, python3, installShellFiles }:
stdenv.mkDerivation rec {
pname = "fpp";
version = "0.9.2";
version = "0.9.5";
src = fetchFromGitHub {
owner = "facebook";
repo = "PathPicker";
rev = version;
sha256 = "08p2xlz045fqyb0aj9pwwf2s5nb4b02i8zj81732q59yx5c6lrlv";
sha256 = "sha256-4BkdGvG/RyF3JBnd/X5r5nboEHG4aqahcYHDunMv2zU=";
};
nativeBuildInputs = [ installShellFiles ];
postPatch = ''
substituteInPlace fpp --replace 'PYTHONCMD="python3"' 'PYTHONCMD="${python3.interpreter}"'
'';
@ -19,6 +21,7 @@ stdenv.mkDerivation rec {
mkdir -p $out/share/fpp $out/bin
cp -r fpp src $out/share/fpp
ln -s $out/share/fpp/fpp $out/bin/fpp
installManPage debian/usr/share/man/man1/fpp.1
'';
meta = {

View File

@ -9,13 +9,13 @@
stdenv.mkDerivation rec {
pname = "opencbm";
version = "0.4.99.103";
version = "0.4.99.104";
src = fetchFromGitHub {
owner = "OpenCBM";
repo = "OpenCBM";
rev = "v${version}";
sha256 = "06844yfgcbbwrp3iz5k8zd1zjawzbpvl131lgmkwz6d542c2k4k9";
sha256 = "sha256-5lj5F79Gbhrvi9dxKGobdyDyBLGcptAtxx9SANhLrKw=";
};
makefile = "LINUX/Makefile";
@ -45,7 +45,8 @@ stdenv.mkDerivation rec {
disk copier included. Successor of cbm4linux. Also supports the XU1541
and the XUM1541 devices (a.k.a. "ZoomFloppy").
'';
license = licenses.gpl2;
homepage = "https://spiro.trikaliotis.net/opencbm";
license = licenses.gpl2Plus;
platforms = platforms.linux;
maintainers = [ maintainers.sander ];
};

View File

@ -0,0 +1,26 @@
{ lib, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
pname = "phrase-cli";
version = "2.4.4";
src = fetchFromGitHub {
owner = "phrase";
repo = "phrase-cli";
rev = version;
sha256 = "0xlfcj0jd6x4ynzg6d0p3wlmfq660w3zm13nzx04jfcjnks9sqvl";
};
vendorSha256 = "1ablrs3prw011bpad8vn87y3c81q44mps873nhj278hlkz6im34g";
postInstall = ''
ln -s $out/bin/phrase-cli $out/bin/phrase
'';
meta = with lib; {
homepage = "http://docs.phraseapp.com";
description = "PhraseApp API v2 Command Line Client";
license = licenses.mit;
maintainers = with maintainers; [ juboba ];
};
}

View File

@ -1,29 +0,0 @@
commit 26e7bf8bcb2823819c87115e07932c0d2ba88170 (HEAD -> configurable-dbfile-path)
Author: Eirik Nygaard <eirik@ngrd.no>
Date: Sun Jan 23 12:05:01 2022 +0100
Make entire path for plocate database configurable
diff --git a/meson.build b/meson.build
index 435cd0a..8dc2393 100644
--- a/meson.build
+++ b/meson.build
@@ -2,8 +2,7 @@ project('plocate', 'cpp', default_options: ['buildtype=debugoptimized','cpp_std=
add_project_arguments('-DGROUPNAME="' + get_option('locategroup') + '"', language: 'cpp')
add_project_arguments('-DUPDATEDB_CONF="/etc/updatedb.conf"', language: 'cpp')
-dbdir = join_paths(get_option('sharedstatedir'), 'plocate')
-dbfile = join_paths(dbdir, 'plocate.db')
+dbfile = join_paths(get_option('sharedstatedir'), get_option('dbpath'))
add_project_arguments('-DDBFILE="' + dbfile + '"', language: 'cpp')
add_project_arguments('-DPACKAGE_NAME="plocate"', language: 'cpp')
add_project_arguments('-DPACKAGE_VERSION="' + meson.project_version() + '"', language: 'cpp')
diff --git a/meson_options.txt b/meson_options.txt
index 8ac13c5..a9f3358 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -3,3 +3,4 @@ option('install_systemd', type: 'boolean', value: true, description: 'Install sy
option('systemunitdir', type: 'string', description: 'Where to install systemd units to (default: autodetect)')
option('locategroup', type: 'string', value: 'plocate', description: 'Group that the install script will use for the .db file')
option('updatedb_progname', type: 'string', value: 'updatedb', description: 'Binary name of updatedb')
+option('dbpath', type: 'string', value: 'plocate/plocate.db', description: 'Path to plocate database relative to "sharedstatedir"')

View File

@ -11,18 +11,17 @@
}:
let
dbfile = lib.attrByPath [ "locate" "dbfile" ] "/var/cache/locatedb" config;
in stdenv.mkDerivation rec {
in
stdenv.mkDerivation rec {
pname = "plocate";
version = "1.1.14";
version = "1.1.15";
src = fetchgit {
url = "https://git.sesse.net/plocate";
rev = version;
sha256 = "sha256-SgvCy03H5aKolbkI1dg/0G5VwT3TdSGenn2h9H4gfTY=";
sha256 = "sha256-r8/LivQhJkMTE8ejznr+eGplXFrQl4xwCgXOwbR4wlw=";
};
patches = [ ./dbfile.patch ];
postPatch = ''
sed -i meson.build \
-e '/mkdir\.sh/d'

View File

@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "haveged";
version = "1.9.15";
version = "1.9.17";
src = fetchFromGitHub {
owner = "jirka-h";
repo = "haveged";
rev = "v${version}";
sha256 = "sha256-bU+/lRx0RAqHheNQ9CWT/V0oZnZd0W9EHhhX3RRIZ/0=";
sha256 = "sha256-uVl+TZVMsf+9aRATQndYMK4l4JfOBvstd1O2nTHyMYU=";
};
strictDeps = true;
@ -34,8 +34,10 @@ stdenv.mkDerivation rec {
the barriers to using haveged for other tasks.
'';
homepage = "https://github.com/jirka-h/haveged";
license = licenses.gpl3;
changelog = "https://raw.githubusercontent.com/jirka-h/haveged/v${version}/ChangeLog";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ domenkozar ];
platforms = platforms.unix;
badPlatforms = platforms.darwin; # fails to build since v1.9.15
};
}

View File

@ -32,7 +32,7 @@ let
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "0qx1axqr0h5zbn2z9bnb1d0rbs0vajw4p8szw34nicngnn213g7k";
outputHash = "sha256-IlHuvFfkqM3O+3PPVBqUJzQXJELKGKHrmI1tdxsBpSk=";
};
# Point to our local deps repo

View File

@ -10,7 +10,7 @@
, makeWrapper
, pkg-config
, ploticus
, transfig
, fig2dev
, enableEmacs ? false, emacs
, enableLout ? true, lout
, enableTex ? true, tex
@ -39,7 +39,7 @@ in stdenv.mkDerivation rec{
guile-reader
imagemagick
ploticus
transfig
fig2dev
]
++ optional enableEmacs emacs
++ optional enableLout lout

View File

@ -1,5 +1,5 @@
{ lib, stdenv, fetchurl, python3, libxslt, texlive
, enableAllFeatures ? false, imagemagick ? null, transfig ? null, inkscape ? null, fontconfig ? null, ghostscript ? null
, enableAllFeatures ? false, imagemagick ? null, fig2dev ? null, inkscape ? null, fontconfig ? null, ghostscript ? null
, tex ? texlive.combine { # satisfy all packages that ./configure mentions
inherit (texlive) scheme-basic epstopdf anysize appendix changebar
@ -15,7 +15,7 @@
assert enableAllFeatures ->
imagemagick != null &&
transfig != null &&
fig2dev != null &&
inkscape != null &&
fontconfig != null &&
ghostscript != null;
@ -30,7 +30,7 @@ stdenv.mkDerivation rec {
};
buildInputs = [ python3 libxslt tex ]
++ lib.optionals enableAllFeatures [ imagemagick transfig ];
++ lib.optionals enableAllFeatures [ imagemagick fig2dev ];
# TODO: dblatex tries to execute texindy command, but nixpkgs doesn't have
# that yet. In Ubuntu, texindy is a part of the xindy package.
@ -49,7 +49,7 @@ stdenv.mkDerivation rec {
-e 's|"fc-match"|"${fontconfig.bin}/bin/fc-match"|g' \
-e 's|"fc-list"|"${fontconfig.bin}/bin/fc-list"|g' \
-e 's|cmd = "inkscape|cmd = "${inkscape}/bin/inkscape|g' \
-e 's|cmd = "fig2dev|cmd = "${transfig}/bin/fig2dev|g' \
-e 's|cmd = "fig2dev|cmd = "${fig2dev}/bin/fig2dev|g' \
-e 's|cmd = \["ps2pdf|cmd = ["${ghostscript}/bin/ps2pdf|g' \
-e 's|cmd = "convert|cmd = "${imagemagick.out}/bin/convert|g' \
-i "$file"

View File

@ -475,6 +475,7 @@ mapAliases ({
iana_etc = iana-etc; # Added 2017-03-08
iasl = throw "iasl has been removed, use acpica-tools instead"; # Added 2021-08-08
icecat-bin = throw "icecat-bin has been removed, the binary builds are not maintained upstream."; # Added 2022-02-15
icedtea8_web = adoptopenjdk-icedtea-web; # Added 2019-08-21
icedtea_web = adoptopenjdk-icedtea-web; # Added 2019-08-21
idea = jetbrains; # Added 2017-04-03
@ -1188,6 +1189,7 @@ mapAliases ({
torch-repl = throw "torch-repl has been removed, as the upstream project has been abandoned"; # Added 2020-03-28
torchPackages = throw "torchPackages has been removed, as the upstream project has been abandoned"; # Added 2020-03-28
trang = jing-trang; # Added 2018-04-25
transfig = fig2dev; # Added 2022-02-15
transmission-remote-cli = "transmission-remote-cli has been removed, as the upstream project has been abandoned. Please use tremc instead"; # Added 2020-10-14
transmission_gtk = transmission-gtk; # Added 2018-01-06
transmission_remote_gtk = transmission-remote-gtk; # Added 2018-01-06

View File

@ -4355,6 +4355,8 @@ with pkgs;
inherit (pkgs.darwin.apple_sdk.frameworks) PCSC;
};
artim-dark = callPackage ../data/themes/artim-dark {};
bore = callPackage ../tools/networking/bore {
inherit (darwin) Libsystem;
inherit (darwin.apple_sdk.frameworks) SystemConfiguration;
@ -4391,6 +4393,8 @@ with pkgs;
checkmate = callPackage ../development/tools/checkmate { };
circup = callPackage ../development/tools/circup { };
civetweb = callPackage ../development/libraries/civetweb { };
ckb-next = libsForQt5.callPackage ../tools/misc/ckb-next { };
@ -10963,10 +10967,6 @@ with pkgs;
ts = callPackage ../tools/system/ts { };
transfig = callPackage ../tools/graphics/transfig {
libpng = libpng12;
};
ttmkfdir = callPackage ../tools/misc/ttmkfdir { };
ttwatch = callPackage ../tools/misc/ttwatch { };
@ -26437,8 +26437,6 @@ with pkgs;
icewm = callPackage ../applications/window-managers/icewm {};
icecat-bin = callPackage ../applications/networking/browsers/icecat-bin { };
icon-library = callPackage ../applications/graphics/icon-library { };
id3v2 = callPackage ../applications/audio/id3v2 { };
@ -28052,6 +28050,8 @@ with pkgs;
phrasendrescher = callPackage ../tools/security/phrasendrescher { };
phrase-cli = callPackage ../tools/misc/phrase-cli { };
phraseapp-client = callPackage ../tools/misc/phraseapp-client { };
phwmon = callPackage ../applications/misc/phwmon { };

View File

@ -9944,6 +9944,21 @@ let
};
};
HashStoredIterator = buildPerlModule {
pname = "Hash-StoredIterator";
version = "0.008";
src = fetchurl {
url = "mirror://cpan/authors/id/M/MS/MSCHWERN/Hash-StoredIterator-0.008.tar.gz";
sha256 = "b9cbc4dcd8233e8d1d7f1481ddb79a4a5f9db7180cb3ef02b4bcbee05e65ea0c";
};
buildInputs = [ Test2Suite ];
perlPreHook = lib.optionalString stdenv.isDarwin "export LD=$CC";
meta = {
description = "Functions for accessing a hashes internal iterator";
license = with lib.licenses; [ artistic1 gpl1Plus ];
};
};
HashUtilFieldHashCompat = buildPerlPackage {
pname = "Hash-Util-FieldHash-Compat";
version = "0.11";

View File

@ -370,6 +370,8 @@ in {
aiopvpc = callPackage ../development/python-modules/aiopvpc { };
aiopyarr = callPackage ../development/python-modules/aiopyarr { };
aiopylgtv = callPackage ../development/python-modules/aiopylgtv { };
aiorecollect = callPackage ../development/python-modules/aiorecollect { };
@ -750,6 +752,8 @@ in {
aurorapy = callPackage ../development/python-modules/aurorapy { };
autarco = callPackage ../development/python-modules/autarco { };
auth0-python = callPackage ../development/python-modules/auth0-python { };
authcaptureproxy = callPackage ../development/python-modules/authcaptureproxy { };
@ -2523,6 +2527,8 @@ in {
einops = callPackage ../development/python-modules/einops { };
eiswarnung = callPackage ../development/python-modules/eiswarnung { };
elgato = callPackage ../development/python-modules/elgato { };
elkm1-lib = callPackage ../development/python-modules/elkm1-lib { };
@ -2829,6 +2835,8 @@ in {
finalfusion = callPackage ../development/python-modules/finalfusion { };
findimports = callPackage ../development/python-modules/findimports { };
fingerprints = callPackage ../development/python-modules/fingerprints { };
finitude = callPackage ../development/python-modules/finitude { };
@ -5372,6 +5380,8 @@ in {
nestedtext = callPackage ../development/python-modules/nestedtext { };
net2grid = callPackage ../development/python-modules/net2grid { };
netaddr = callPackage ../development/python-modules/netaddr { };
netcdf4 = callPackage ../development/python-modules/netcdf4 { };