Merge staging-next into staging
This commit is contained in:
commit
7b0b3b6225
|
@ -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";
|
||||
|
|
|
@ -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 don’t 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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 Wikipedia’s <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 = [
|
148
nixos/modules/services/web-servers/agate.nix
Normal file
148
nixos/modules/services/web-servers/agate.nix
Normal 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"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {};
|
||||
|
|
|
@ -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"))
|
||||
'';
|
||||
})
|
||||
|
|
29
nixos/tests/web-servers/agate.nix
Normal file
29
nixos/tests/web-servers/agate.nix
Normal 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
|
||||
'';
|
||||
}
|
||||
)
|
|
@ -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";
|
||||
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -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 = ''
|
||||
|
|
|
@ -46,5 +46,6 @@ stdenv.mkDerivation rec {
|
|||
'';
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ AndersonTorres ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ];
|
||||
|
||||
|
|
|
@ -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))
|
||||
|
|
35
pkgs/data/themes/artim-dark/default.nix
Normal file
35
pkgs/data/themes/artim-dark/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
|
@ -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 = [
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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; {
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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"
|
||||
|
|
819
pkgs/development/node-packages/node-packages.nix
generated
819
pkgs/development/node-packages/node-packages.nix
generated
File diff suppressed because it is too large
Load diff
|
@ -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
|
||||
''
|
||||
|
|
45
pkgs/development/python-modules/aiopyarr/default.nix
Normal file
45
pkgs/development/python-modules/aiopyarr/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
59
pkgs/development/python-modules/autarco/default.nix
Normal file
59
pkgs/development/python-modules/autarco/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
|
@ -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
|
||||
|
|
58
pkgs/development/python-modules/eiswarnung/default.nix
Normal file
58
pkgs/development/python-modules/eiswarnung/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
38
pkgs/development/python-modules/findimports/default.nix
Normal file
38
pkgs/development/python-modules/findimports/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
58
pkgs/development/python-modules/net2grid/default.nix
Normal file
58
pkgs/development/python-modules/net2grid/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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"
|
||||
|
|
52
pkgs/development/tools/circup/default.nix
Normal file
52
pkgs/development/tools/circup/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
|
@ -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 ];
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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"),
|
|
@ -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
|
||||
|
|
@ -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 *******
|
||||
|
|
@ -83,6 +83,8 @@ stdenv.mkDerivation rec {
|
|||
wrapQtApp "$out/bin/zbarcam-qt"
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Bar code reader";
|
||||
longDescription = ''
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
|
|
26
pkgs/tools/misc/phrase-cli/default.nix
Normal file
26
pkgs/tools/misc/phrase-cli/default.nix
Normal 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 ];
|
||||
};
|
||||
}
|
|
@ -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"')
|
|
@ -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'
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ let
|
|||
|
||||
outputHashAlgo = "sha256";
|
||||
outputHashMode = "recursive";
|
||||
outputHash = "0qx1axqr0h5zbn2z9bnb1d0rbs0vajw4p8szw34nicngnn213g7k";
|
||||
outputHash = "sha256-IlHuvFfkqM3O+3PPVBqUJzQXJELKGKHrmI1tdxsBpSk=";
|
||||
};
|
||||
|
||||
# Point to our local deps repo
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 { };
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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 { };
|
||||
|
|
Loading…
Reference in a new issue