Merge staging-next into staging

This commit is contained in:
github-actions[bot] 2024-04-01 18:01:27 +00:00 committed by GitHub
commit 0156d8b951
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
157 changed files with 13882 additions and 1722 deletions

View File

@ -29,8 +29,8 @@
* [Discourse Forum](https://discourse.nixos.org/)
* [Matrix Chat](https://matrix.to/#/#community:nixos.org)
* [NixOS Weekly](https://weekly.nixos.org/)
* [Community-maintained wiki](https://nixos.wiki/)
* [Community-maintained list of ways to get in touch](https://nixos.wiki/wiki/Get_In_Touch#Chat) (Discord, Telegram, IRC, etc.)
* [Official wiki](https://wiki.nixos.org/)
* [Community-maintained list of ways to get in touch](https://wiki.nixos.org/wiki/Get_In_Touch#Chat) (Discord, Telegram, IRC, etc.)
# Other Project Repositories

View File

@ -1784,6 +1784,13 @@
fingerprint = "C919 E69E A7C0 E147 9E0F C26E 1EDA D0C6 70BD 062D";
}];
};
assistant = {
email = "assistant.moetron@gmail.com";
github = "Assistant";
githubId = 2748721;
matrix = "@assistant:pygmalion.chat";
name = "Assistant Moetron";
};
astavie = {
email = "astavie@pm.me";
github = "astavie";

View File

@ -1,83 +0,0 @@
#! /usr/bin/env nix-shell
#! nix-shell -I nixpkgs=. -i bash -p delta jq perl
set -euo pipefail
shopt -s inherit_errexit
cat <<'EOF'
This script attempts to automatically convert option descriptions from
DocBook syntax to markdown. Naturally this process is incomplete and
imperfect, so any changes generated by this script MUST be reviewed.
Possible problems include: incorrectly replaced tags, badly formatted
markdown, DocBook tags this script doesn't recognize remaining in the
output and crashing the docs build, incorrect escaping of markdown
metacharacters, incorrect unescaping of XML entities—and the list goes on.
Always review the generated changes!
Some known limitations:
- Does not transform literalDocBook items
- Replacements can occur in non-option code, such as string literals
EOF
build-options-json() {
nix-build --no-out-link --expr '
let
sys = import ./nixos/default.nix {
configuration = {};
};
in
[
sys.config.system.build.manual.optionsJSON
]
'
}
git diff --quiet || {
echo "Worktree is dirty. Please stash or commit first."
exit 1
}
echo "Building options.json ..."
old_options=$(build-options-json)
echo "Applying replacements ..."
perl -pi -e '
BEGIN {
undef $/;
}
s,<literal>([^`]*?)</literal>,`$1`,smg;
s,<replaceable>([]*?)</replaceable>,«$1»,smg;
s,<filename>([^`]*?)</filename>,{file}`$1`,smg;
s,<option>([^`]*?)</option>,{option}`$1`,smg;
s,<code>([^`]*?)</code>,`$1`,smg;
s,<command>([^`]*?)</command>,{command}`$1`,smg;
s,<link xlink:href="(.+?)" ?/>,<$1>,smg;
s,<link xlink:href="(.+?)">(.*?)</link>,[$2]($1),smg;
s,<package>([^`]*?)</package>,`$1`,smg;
s,<emphasis>([^*]*?)</emphasis>,*$1*,smg;
s,<citerefentry>\s*
<refentrytitle>\s*(.*?)\s*</refentrytitle>\s*
<manvolnum>\s*(.*?)\s*</manvolnum>\s*
</citerefentry>,{manpage}`$1($2)`,smgx;
s,^( +description =),\1 lib.mdDoc,smg;
' "$@"
echo "Building options.json again ..."
new_options=$(build-options-json)
! cmp -s {$old_options,$new_options}/share/doc/nixos/options.json && {
diff -U10 \
<(jq . <$old_options/share/doc/nixos/options.json) \
<(jq . <$new_options/share/doc/nixos/options.json) \
| delta
}

View File

@ -7,7 +7,7 @@ However, it is possible and not-uncommon to create [impermanent systems], whose
`rootfs` is either a `tmpfs` or reset during boot. While NixOS itself supports
this kind of configuration, special care needs to be taken.
[impermanent systems]: https://nixos.wiki/wiki/Impermanence
[impermanent systems]: https://wiki.nixos.org/wiki/Impermanence
```{=include=} sections

View File

@ -141,6 +141,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
- [Scrutiny](https://github.com/AnalogJ/scrutiny), a S.M.A.R.T monitoring tool for hard disks with a web frontend.
- [davis](https://github.com/tchapi/davis), a simple CardDav and CalDav server inspired by Baïkal. Available as [services.davis]($opt-services-davis.enable).
- [systemd-lock-handler](https://git.sr.ht/~whynothugo/systemd-lock-handler/), a bridge between logind D-Bus events and systemd targets. Available as [services.systemd-lock-handler.enable](#opt-services.systemd-lock-handler.enable).
- [wastebin](https://github.com/matze/wastebin), a pastebin server written in rust. Available as [services.wastebin](#opt-services.wastebin.enable).

View File

@ -1,8 +1,47 @@
{ config, lib, pkgs }:
with lib;
let
inherit (lib)
all
attrByPath
attrNames
concatLists
concatMap
concatMapStrings
concatStrings
concatStringsSep
const
elem
filter
filterAttrs
flip
head
isInt
isList
length
makeBinPath
makeSearchPathOutput
mapAttrs
mapAttrsToList
mkAfter
mkIf
optional
optionalAttrs
optionalString
range
replaceStrings
reverseList
splitString
stringLength
stringToCharacters
tail
toIntBase10
trace
types
;
inherit (lib.strings) toJSON;
cfg = config.systemd;
lndir = "${pkgs.buildPackages.xorg.lndir}/bin/lndir";
systemd = cfg.package;
@ -10,7 +49,7 @@ in rec {
shellEscape = s: (replaceStrings [ "\\" ] [ "\\\\" ] s);
mkPathSafeName = lib.replaceStrings ["@" ":" "\\" "[" "]"] ["-" "-" "-" "" ""];
mkPathSafeName = replaceStrings ["@" ":" "\\" "[" "]"] ["-" "-" "-" "" ""];
# a type for options that take a unit name
unitNameType = types.strMatching "[a-zA-Z0-9@%:_.\\-]+[.](service|socket|device|mount|automount|swap|target|path|timer|scope|slice)";
@ -133,7 +172,7 @@ in rec {
)) attrs;
errors = concatMap (c: c group defs) checks;
in if errors == [] then true
else builtins.trace (concatStringsSep "\n" errors) false;
else trace (concatStringsSep "\n" errors) false;
toOption = x:
if x == true then "true"
@ -220,7 +259,7 @@ in rec {
# upstream unit.
for i in ${toString (mapAttrsToList
(n: v: v.unit)
(lib.filterAttrs (n: v: (attrByPath [ "overrideStrategy" ] "asDropinIfExists" v) == "asDropinIfExists") units))}; do
(filterAttrs (n: v: (attrByPath [ "overrideStrategy" ] "asDropinIfExists" v) == "asDropinIfExists") units))}; do
fn=$(basename $i/*)
if [ -e $out/$fn ]; then
if [ "$(readlink -f $i/$fn)" = /dev/null ]; then
@ -243,7 +282,7 @@ in rec {
# treated as drop-in file.
for i in ${toString (mapAttrsToList
(n: v: v.unit)
(lib.filterAttrs (n: v: v ? overrideStrategy && v.overrideStrategy == "asDropin") units))}; do
(filterAttrs (n: v: v ? overrideStrategy && v.overrideStrategy == "asDropin") units))}; do
fn=$(basename $i/*)
mkdir -p $out/$fn.d
ln -s $i/$fn $out/$fn.d/overrides.conf
@ -384,7 +423,7 @@ in rec {
commonUnitText = def: lines: ''
[Unit]
${attrsToSection def.unitConfig}
'' + lines + lib.optionalString (def.wantedBy != [ ]) ''
'' + lines + optionalString (def.wantedBy != [ ]) ''
[Install]
WantedBy=${concatStringsSep " " def.wantedBy}
@ -406,7 +445,7 @@ in rec {
'' + (let env = cfg.globalEnvironment // def.environment;
in concatMapStrings (n:
let s = optionalString (env.${n} != null)
"Environment=${builtins.toJSON "${n}=${env.${n}}"}\n";
"Environment=${toJSON "${n}=${env.${n}}"}\n";
# systemd max line length is now 1MiB
# https://github.com/systemd/systemd/commit/e6dde451a51dc5aaa7f4d98d39b8fe735f73d2af
in if stringLength s >= 1048576 then throw "The value of the environment variable ${n} in systemd service ${name}.service is too long." else s) (attrNames env))
@ -475,13 +514,13 @@ in rec {
# in that attrset are determined by the supplied format.
definitions = directoryName: format: definitionAttrs:
let
listOfDefinitions = lib.mapAttrsToList
listOfDefinitions = mapAttrsToList
(name: format.generate "${name}.conf")
definitionAttrs;
in
pkgs.runCommand directoryName { } ''
mkdir -p $out
${(lib.concatStringsSep "\n"
${(concatStringsSep "\n"
(map (pkg: "cp ${pkg} $out/${pkg.name}") listOfDefinitions)
)}
'';

View File

@ -1,8 +1,13 @@
{ lib, systemdUtils }:
with lib;
let
inherit (lib)
concatMapStrings
concatStringsSep
flip
optionalString
;
attrsToSection = systemdUtils.lib.attrsToSection;
commonMatchText = def:
optionalString (def.matchConfig != { }) ''

View File

@ -1,47 +1,91 @@
{ lib, systemdUtils, pkgs }:
with systemdUtils.lib;
with systemdUtils.unitOptions;
with lib;
let
inherit (systemdUtils.lib)
automountConfig
makeUnit
mountConfig
stage1ServiceConfig
stage2ServiceConfig
unitConfig
;
inherit (systemdUtils.unitOptions)
concreteUnitOptions
stage1AutomountOptions
stage1CommonUnitOptions
stage1MountOptions
stage1PathOptions
stage1ServiceOptions
stage1SliceOptions
stage1SocketOptions
stage1TimerOptions
stage2AutomountOptions
stage2CommonUnitOptions
stage2MountOptions
stage2PathOptions
stage2ServiceOptions
stage2SliceOptions
stage2SocketOptions
stage2TimerOptions
;
inherit (lib)
mdDoc
mkDefault
mkDerivedConfig
mkEnableOption
mkIf
mkOption
;
inherit (lib.types)
attrsOf
lines
listOf
nullOr
path
submodule
;
in
rec {
units = with types;
attrsOf (submodule ({ name, config, ... }: {
options = concreteUnitOptions;
config = { unit = mkDefault (systemdUtils.lib.makeUnit name config); };
}));
units = attrsOf (submodule ({ name, config, ... }: {
options = concreteUnitOptions;
config = { unit = mkDefault (makeUnit name config); };
}));
services = with types; attrsOf (submodule [ stage2ServiceOptions unitConfig stage2ServiceConfig ]);
initrdServices = with types; attrsOf (submodule [ stage1ServiceOptions unitConfig stage1ServiceConfig ]);
services = attrsOf (submodule [ stage2ServiceOptions unitConfig stage2ServiceConfig ]);
initrdServices = attrsOf (submodule [ stage1ServiceOptions unitConfig stage1ServiceConfig ]);
targets = with types; attrsOf (submodule [ stage2CommonUnitOptions unitConfig ]);
initrdTargets = with types; attrsOf (submodule [ stage1CommonUnitOptions unitConfig ]);
targets = attrsOf (submodule [ stage2CommonUnitOptions unitConfig ]);
initrdTargets = attrsOf (submodule [ stage1CommonUnitOptions unitConfig ]);
sockets = with types; attrsOf (submodule [ stage2SocketOptions unitConfig ]);
initrdSockets = with types; attrsOf (submodule [ stage1SocketOptions unitConfig ]);
sockets = attrsOf (submodule [ stage2SocketOptions unitConfig ]);
initrdSockets = attrsOf (submodule [ stage1SocketOptions unitConfig ]);
timers = with types; attrsOf (submodule [ stage2TimerOptions unitConfig ]);
initrdTimers = with types; attrsOf (submodule [ stage1TimerOptions unitConfig ]);
timers = attrsOf (submodule [ stage2TimerOptions unitConfig ]);
initrdTimers = attrsOf (submodule [ stage1TimerOptions unitConfig ]);
paths = with types; attrsOf (submodule [ stage2PathOptions unitConfig ]);
initrdPaths = with types; attrsOf (submodule [ stage1PathOptions unitConfig ]);
paths = attrsOf (submodule [ stage2PathOptions unitConfig ]);
initrdPaths = attrsOf (submodule [ stage1PathOptions unitConfig ]);
slices = with types; attrsOf (submodule [ stage2SliceOptions unitConfig ]);
initrdSlices = with types; attrsOf (submodule [ stage1SliceOptions unitConfig ]);
slices = attrsOf (submodule [ stage2SliceOptions unitConfig ]);
initrdSlices = attrsOf (submodule [ stage1SliceOptions unitConfig ]);
mounts = with types; listOf (submodule [ stage2MountOptions unitConfig mountConfig ]);
initrdMounts = with types; listOf (submodule [ stage1MountOptions unitConfig mountConfig ]);
mounts = listOf (submodule [ stage2MountOptions unitConfig mountConfig ]);
initrdMounts = listOf (submodule [ stage1MountOptions unitConfig mountConfig ]);
automounts = with types; listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
initrdAutomounts = with types; attrsOf (submodule [ stage1AutomountOptions unitConfig automountConfig ]);
automounts = listOf (submodule [ stage2AutomountOptions unitConfig automountConfig ]);
initrdAutomounts = attrsOf (submodule [ stage1AutomountOptions unitConfig automountConfig ]);
initrdContents = types.attrsOf (types.submodule ({ config, options, name, ... }: {
initrdContents = attrsOf (submodule ({ config, options, name, ... }: {
options = {
enable = mkEnableOption (lib.mdDoc "copying of this file and symlinking it") // { default = true; };
enable = mkEnableOption (mdDoc "copying of this file and symlinking it") // { default = true; };
target = mkOption {
type = types.path;
description = lib.mdDoc ''
type = path;
description = mdDoc ''
Path of the symlink.
'';
default = name;
@ -49,13 +93,13 @@ rec {
text = mkOption {
default = null;
type = types.nullOr types.lines;
description = lib.mdDoc "Text of the file.";
type = nullOr lines;
description = mdDoc "Text of the file.";
};
source = mkOption {
type = types.path;
description = lib.mdDoc "Path of the source file.";
type = path;
description = mdDoc "Path of the source file.";
};
};

View File

@ -1,9 +1,33 @@
{ lib, systemdUtils }:
with systemdUtils.lib;
with lib;
let
inherit (systemdUtils.lib)
assertValueOneOf
automountConfig
checkUnitConfig
makeJobScript
mountConfig
serviceConfig
unitConfig
unitNameType
;
inherit (lib)
any
concatMap
filterOverrides
isList
mdDoc
mergeEqualOption
mkIf
mkMerge
mkOption
mkOptionType
singleton
toList
types
;
checkService = checkUnitConfig "Service" [
(assertValueOneOf "Type" [
"exec" "simple" "forking" "oneshot" "dbus" "notify" "notify-reload" "idle"
@ -31,7 +55,7 @@ in rec {
enable = mkOption {
default = true;
type = types.bool;
description = lib.mdDoc ''
description = mdDoc ''
If set to false, this unit will be a symlink to
/dev/null. This is primarily useful to prevent specific
template instances
@ -45,7 +69,7 @@ in rec {
overrideStrategy = mkOption {
default = "asDropinIfExists";
type = types.enum [ "asDropinIfExists" "asDropin" ];
description = lib.mdDoc ''
description = mdDoc ''
Defines how unit configuration is provided for systemd:
`asDropinIfExists` creates a unit file when no unit file is provided by the package
@ -61,7 +85,7 @@ in rec {
requiredBy = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
Units that require (i.e. depend on and need to go down with) this unit.
As discussed in the `wantedBy` option description this also creates
`.requires` symlinks automatically.
@ -71,7 +95,7 @@ in rec {
upheldBy = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
Keep this unit running as long as the listed units are running. This is a continuously
enforced version of wantedBy.
'';
@ -80,7 +104,7 @@ in rec {
wantedBy = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
Units that want (i.e. depend on) this unit. The default method for
starting a unit by default at boot time is to set this option to
`["multi-user.target"]` for system services. Likewise for user units
@ -98,7 +122,7 @@ in rec {
aliases = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc "Aliases of that unit.";
description = mdDoc "Aliases of that unit.";
};
};
@ -108,12 +132,12 @@ in rec {
text = mkOption {
type = types.nullOr types.str;
default = null;
description = lib.mdDoc "Text of this systemd unit.";
description = mdDoc "Text of this systemd unit.";
};
unit = mkOption {
internal = true;
description = lib.mdDoc "The generated unit.";
description = mdDoc "The generated unit.";
};
};
@ -124,19 +148,19 @@ in rec {
description = mkOption {
default = "";
type = types.singleLineStr;
description = lib.mdDoc "Description of this unit used in systemd messages and progress indicators.";
description = mdDoc "Description of this unit used in systemd messages and progress indicators.";
};
documentation = mkOption {
default = [];
type = types.listOf types.str;
description = lib.mdDoc "A list of URIs referencing documentation for this unit or its configuration.";
description = mdDoc "A list of URIs referencing documentation for this unit or its configuration.";
};
requires = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
Start the specified units when this unit is started, and stop
this unit when the specified units are stopped or fail.
'';
@ -145,7 +169,7 @@ in rec {
wants = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
Start the specified units when this unit is started.
'';
};
@ -153,7 +177,7 @@ in rec {
upholds = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
Keeps the specified running while this unit is running. A continuous version of `wants`.
'';
};
@ -161,7 +185,7 @@ in rec {
after = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
If the specified units are started at the same time as
this unit, delay this unit until they have started.
'';
@ -170,7 +194,7 @@ in rec {
before = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
If the specified units are started at the same time as
this unit, delay them until this unit has started.
'';
@ -179,7 +203,7 @@ in rec {
bindsTo = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
Like requires, but in addition, if the specified units
unexpectedly disappear, this unit will be stopped as well.
'';
@ -188,7 +212,7 @@ in rec {
partOf = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
If the specified units are stopped or restarted, then this
unit is stopped or restarted as well.
'';
@ -197,7 +221,7 @@ in rec {
conflicts = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
If the specified units are started, then this unit is stopped
and vice versa.
'';
@ -206,7 +230,7 @@ in rec {
requisite = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
Similar to requires. However if the units listed are not started,
they will not be started and the transaction will fail.
'';
@ -216,7 +240,7 @@ in rec {
default = {};
example = { RequiresMountsFor = "/data"; };
type = types.attrsOf unitOption;
description = lib.mdDoc ''
description = mdDoc ''
Each attribute in this set specifies an option in the
`[Unit]` section of the unit. See
{manpage}`systemd.unit(5)` for details.
@ -226,7 +250,7 @@ in rec {
onFailure = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
A list of one or more units that are activated when
this unit enters the "failed" state.
'';
@ -235,7 +259,7 @@ in rec {
onSuccess = mkOption {
default = [];
type = types.listOf unitNameType;
description = lib.mdDoc ''
description = mdDoc ''
A list of one or more units that are activated when
this unit enters the "inactive" state.
'';
@ -243,7 +267,7 @@ in rec {
startLimitBurst = mkOption {
type = types.int;
description = lib.mdDoc ''
description = mdDoc ''
Configure unit start rate limiting. Units which are started
more than startLimitBurst times within an interval time
interval are not permitted to start any more.
@ -252,7 +276,7 @@ in rec {
startLimitIntervalSec = mkOption {
type = types.int;
description = lib.mdDoc ''
description = mdDoc ''
Configure unit start rate limiting. Units which are started
more than startLimitBurst times within an interval time
interval are not permitted to start any more.
@ -271,7 +295,7 @@ in rec {
restartTriggers = mkOption {
default = [];
type = types.listOf types.unspecified;
description = lib.mdDoc ''
description = mdDoc ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be restarted.
@ -281,7 +305,7 @@ in rec {
reloadTriggers = mkOption {
default = [];
type = types.listOf unitOption;
description = lib.mdDoc ''
description = mdDoc ''
An arbitrary list of items such as derivations. If any item
in the list changes between reconfigurations, the service will
be reloaded. If anything but a reload trigger changes in the
@ -299,13 +323,13 @@ in rec {
default = {};
type = with types; attrsOf (nullOr (oneOf [ str path package ]));
example = { PATH = "/foo/bar/bin"; LANG = "nl_NL.UTF-8"; };
description = lib.mdDoc "Environment variables passed to the service's processes.";
description = mdDoc "Environment variables passed to the service's processes.";
};
path = mkOption {
default = [];
type = with types; listOf (oneOf [ package str ]);
description = lib.mdDoc ''
description = mdDoc ''
Packages added to the service's {env}`PATH`
environment variable. Both the {file}`bin`
and {file}`sbin` subdirectories of each
@ -319,7 +343,7 @@ in rec {
{ RestartSec = 5;
};
type = types.addCheck (types.attrsOf unitOption) checkService;
description = lib.mdDoc ''
description = mdDoc ''
Each attribute in this set specifies an option in the
`[Service]` section of the unit. See
{manpage}`systemd.service(5)` for details.
@ -329,14 +353,14 @@ in rec {
script = mkOption {
type = types.lines;
default = "";
description = lib.mdDoc "Shell commands executed as the service's main process.";
description = mdDoc "Shell commands executed as the service's main process.";
};
scriptArgs = mkOption {
type = types.str;
default = "";
example = "%i";
description = lib.mdDoc ''
description = mdDoc ''
Arguments passed to the main process script.
Can contain specifiers (`%` placeholders expanded by systemd, see {manpage}`systemd.unit(5)`).
'';
@ -345,7 +369,7 @@ in rec {
preStart = mkOption {
type = types.lines;
default = "";
description = lib.mdDoc ''
description = mdDoc ''
Shell commands executed before the service's main process
is started.
'';
@ -354,7 +378,7 @@ in rec {
postStart = mkOption {
type = types.lines;
default = "";
description = lib.mdDoc ''
description = mdDoc ''
Shell commands executed after the service's main process
is started.
'';
@ -363,7 +387,7 @@ in rec {
reload = mkOption {
type = types.lines;
default = "";
description = lib.mdDoc ''
description = mdDoc ''
Shell commands executed when the service's main process
is reloaded.
'';
@ -372,7 +396,7 @@ in rec {
preStop = mkOption {
type = types.lines;
default = "";
description = lib.mdDoc ''
description = mdDoc ''
Shell commands executed to stop the service.
'';
};
@ -380,7 +404,7 @@ in rec {
postStop = mkOption {
type = types.lines;
default = "";
description = lib.mdDoc ''
description = mdDoc ''
Shell commands executed after the service's main process
has exited.
'';
@ -389,7 +413,7 @@ in rec {
jobScripts = mkOption {
type = with types; coercedTo path singleton (listOf path);
internal = true;
description = lib.mdDoc "A list of all job script derivations of this unit.";
description = mdDoc "A list of all job script derivations of this unit.";
default = [];
};
@ -434,7 +458,7 @@ in rec {
restartIfChanged = mkOption {
type = types.bool;
default = true;
description = lib.mdDoc ''
description = mdDoc ''
Whether the service should be restarted during a NixOS
configuration switch if its definition has changed.
'';
@ -443,7 +467,7 @@ in rec {
reloadIfChanged = mkOption {
type = types.bool;
default = false;
description = lib.mdDoc ''
description = mdDoc ''
Whether the service should be reloaded during a NixOS
configuration switch if its definition has changed. If
enabled, the value of {option}`restartIfChanged` is
@ -459,7 +483,7 @@ in rec {
stopIfChanged = mkOption {
type = types.bool;
default = true;
description = lib.mdDoc ''
description = mdDoc ''
If set, a changed unit is restarted by calling
{command}`systemctl stop` in the old configuration,
then {command}`systemctl start` in the new one.
@ -475,7 +499,7 @@ in rec {
type = with types; either str (listOf str);
default = [];
example = "Sun 14:00:00";
description = lib.mdDoc ''
description = mdDoc ''
Automatically start this unit at the given date/time, which
must be in the format described in
{manpage}`systemd.time(7)`. This is equivalent
@ -502,7 +526,7 @@ in rec {
default = [];
type = types.listOf types.str;
example = [ "0.0.0.0:993" "/run/my-socket" ];
description = lib.mdDoc ''
description = mdDoc ''
For each item in this list, a `ListenStream`
option in the `[Socket]` section will be created.
'';
@ -512,7 +536,7 @@ in rec {
default = [];
type = types.listOf types.str;
example = [ "0.0.0.0:993" "/run/my-socket" ];
description = lib.mdDoc ''
description = mdDoc ''
For each item in this list, a `ListenDatagram`
option in the `[Socket]` section will be created.
'';
@ -522,7 +546,7 @@ in rec {
default = {};
example = { ListenStream = "/run/my-socket"; };
type = types.attrsOf unitOption;
description = lib.mdDoc ''
description = mdDoc ''
Each attribute in this set specifies an option in the
`[Socket]` section of the unit. See
{manpage}`systemd.socket(5)` for details.
@ -554,7 +578,7 @@ in rec {
default = {};
example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
type = types.attrsOf unitOption;
description = lib.mdDoc ''
description = mdDoc ''
Each attribute in this set specifies an option in the
`[Timer]` section of the unit. See
{manpage}`systemd.timer(5)` and
@ -587,7 +611,7 @@ in rec {
default = {};
example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
type = types.attrsOf unitOption;
description = lib.mdDoc ''
description = mdDoc ''
Each attribute in this set specifies an option in the
`[Path]` section of the unit. See
{manpage}`systemd.path(5)` for details.
@ -618,13 +642,13 @@ in rec {
what = mkOption {
example = "/dev/sda1";
type = types.str;
description = lib.mdDoc "Absolute path of device node, file or other resource. (Mandatory)";
description = mdDoc "Absolute path of device node, file or other resource. (Mandatory)";
};
where = mkOption {
example = "/mnt";
type = types.str;
description = lib.mdDoc ''
description = mdDoc ''
Absolute path of a directory of the mount point.
Will be created if it doesn't exist. (Mandatory)
'';
@ -634,21 +658,21 @@ in rec {
default = "";
example = "ext4";
type = types.str;
description = lib.mdDoc "File system type.";
description = mdDoc "File system type.";
};
options = mkOption {
default = "";
example = "noatime";
type = types.commas;
description = lib.mdDoc "Options used to mount the file system.";
description = mdDoc "Options used to mount the file system.";
};
mountConfig = mkOption {
default = {};
example = { DirectoryMode = "0775"; };
type = types.attrsOf unitOption;
description = lib.mdDoc ''
description = mdDoc ''
Each attribute in this set specifies an option in the
`[Mount]` section of the unit. See
{manpage}`systemd.mount(5)` for details.
@ -678,7 +702,7 @@ in rec {
where = mkOption {
example = "/mnt";
type = types.str;
description = lib.mdDoc ''
description = mdDoc ''
Absolute path of a directory of the mount point.
Will be created if it doesn't exist. (Mandatory)
'';
@ -688,7 +712,7 @@ in rec {
default = {};
example = { DirectoryMode = "0775"; };
type = types.attrsOf unitOption;
description = lib.mdDoc ''
description = mdDoc ''
Each attribute in this set specifies an option in the
`[Automount]` section of the unit. See
{manpage}`systemd.automount(5)` for details.
@ -719,7 +743,7 @@ in rec {
default = {};
example = { MemoryMax = "2G"; };
type = types.attrsOf unitOption;
description = lib.mdDoc ''
description = mdDoc ''
Each attribute in this set specifies an option in the
`[Slice]` section of the unit. See
{manpage}`systemd.slice(5)` for details.

View File

@ -1,9 +1,44 @@
{ lib, config, pkgs }: with lib;
{ lib, config, pkgs }:
let
inherit (lib)
any
attrNames
concatMapStringsSep
concatStringsSep
elem
escapeShellArg
filter
flatten
getName
hasPrefix
hasSuffix
imap0
imap1
isAttrs
isDerivation
isFloat
isInt
isList
isPath
isString
listToAttrs
nameValuePair
optionalString
removePrefix
removeSuffix
replaceStrings
stringToCharacters
types
;
inherit (lib.strings) toJSON normalizePath escapeC;
in
rec {
# Copy configuration files to avoid having the entire sources in the system closure
copyFile = filePath: pkgs.runCommand (builtins.unsafeDiscardStringContext (builtins.baseNameOf filePath)) {} ''
copyFile = filePath: pkgs.runCommand (builtins.unsafeDiscardStringContext (baseNameOf filePath)) {} ''
cp ${filePath} $out
'';
@ -46,11 +81,11 @@ rec {
escapeSystemdPath = s: let
replacePrefix = p: r: s: (if (hasPrefix p s) then r + (removePrefix p s) else s);
trim = s: removeSuffix "/" (removePrefix "/" s);
normalizedPath = strings.normalizePath s;
normalizedPath = normalizePath s;
in
replaceStrings ["/"] ["-"]
(replacePrefix "." (strings.escapeC ["."] ".")
(strings.escapeC (stringToCharacters " !\"#$%&'()*+,;<=>=@[\\]^`{|}~-")
(replacePrefix "." (escapeC ["."] ".")
(escapeC (stringToCharacters " !\"#$%&'()*+,;<=>=@[\\]^`{|}~-")
(if normalizedPath == "/" then normalizedPath else trim normalizedPath)));
# Quotes an argument for use in Exec* service lines.
@ -62,12 +97,12 @@ rec {
# substitution for the directive.
escapeSystemdExecArg = arg:
let
s = if builtins.isPath arg then "${arg}"
else if builtins.isString arg then arg
else if builtins.isInt arg || builtins.isFloat arg || lib.isDerivation arg then toString arg
s = if isPath arg then "${arg}"
else if isString arg then arg
else if isInt arg || isFloat arg || isDerivation arg then toString arg
else throw "escapeSystemdExecArg only allows strings, paths, numbers and derivations";
in
replaceStrings [ "%" "$" ] [ "%%" "$$" ] (builtins.toJSON s);
replaceStrings [ "%" "$" ] [ "%%" "$$" ] (toJSON s);
# Quotes a list of arguments into a single string for use in a Exec*
# line.
@ -197,7 +232,7 @@ rec {
(attrNames secrets))
+ "\n"
+ "${pkgs.jq}/bin/jq >'${output}' "
+ lib.escapeShellArg (stringOrDefault
+ escapeShellArg (stringOrDefault
(concatStringsSep
" | "
(imap1 (index: name: ''${name} = $ENV.secret${toString index}'')
@ -205,7 +240,7 @@ rec {
".")
+ ''
<<'EOF'
${builtins.toJSON set}
${toJSON set}
EOF
(( ! $inherit_errexit_enabled )) && shopt -u inherit_errexit
'';
@ -222,9 +257,9 @@ rec {
*/
removePackagesByName = packages: packagesToRemove:
let
namesToRemove = map lib.getName packagesToRemove;
namesToRemove = map getName packagesToRemove;
in
lib.filter (x: !(builtins.elem (lib.getName x) namesToRemove)) packages;
filter (x: !(elem (getName x) namesToRemove)) packages;
systemdUtils = {
lib = import ./systemd-lib.nix { inherit lib config pkgs; };

View File

@ -1309,6 +1309,7 @@
./services/web-apps/cloudlog.nix
./services/web-apps/code-server.nix
./services/web-apps/convos.nix
./services/web-apps/davis.nix
./services/web-apps/dex.nix
./services/web-apps/discourse.nix
./services/web-apps/documize.nix

View File

@ -113,25 +113,6 @@ in
config = mkIf cfg.enable {
services.nfs.extraConfig = ''
[nfsd]
threads=${toString cfg.nproc}
${optionalString (cfg.hostName != null) "host=${cfg.hostName}"}
${cfg.extraNfsdConfig}
[mountd]
${optionalString (cfg.mountdPort != null) "port=${toString cfg.mountdPort}"}
[statd]
${optionalString (cfg.statdPort != null) "port=${toString cfg.statdPort}"}
[lockd]
${optionalString (cfg.lockdPort != null) ''
port=${toString cfg.lockdPort}
udp-port=${toString cfg.lockdPort}
''}
'';
services.rpcbind.enable = true;
boot.supportedFilesystems = [ "nfs" ]; # needed for statd and idmapd

View File

@ -0,0 +1,32 @@
# Davis {#module-services-davis}
[Davis](https://github.com/tchapi/davis/) is a caldav and carrddav server. It
has a simple, fully translatable admin interface for sabre/dav based on Symfony
5 and Bootstrap 5, initially inspired by Baïkal.
## Basic Usage {#module-services-davis-basic-usage}
At first, an application secret is needed, this can be generated with:
```ShellSession
$ cat /dev/urandom | tr -dc a-zA-Z0-9 | fold -w 48 | head -n 1
```
After that, `davis` can be deployed like this:
```
{
services.davis = {
enable = true;
hostname = "davis.example.com";
mail = {
dsn = "smtp://username@example.com:25";
inviteFromAddress = "davis@example.com";
};
adminLogin = "admin";
adminPasswordFile = "/run/secrets/davis-admin-password";
appSecretFile = "/run/secrets/davis-app-secret";
nginx = {};
};
}
```
This deploys Davis using a sqlite database running out of `/var/lib/davis`.

View File

@ -0,0 +1,554 @@
{
config,
lib,
pkgs,
...
}:
let
cfg = config.services.davis;
db = cfg.database;
mail = cfg.mail;
mysqlLocal = db.createLocally && db.driver == "mysql";
pgsqlLocal = db.createLocally && db.driver == "postgresql";
user = cfg.user;
group = cfg.group;
isSecret = v: lib.isAttrs v && v ? _secret && (lib.isString v._secret || builtins.isPath v._secret);
davisEnvVars = lib.generators.toKeyValue {
mkKeyValue = lib.flip lib.generators.mkKeyValueDefault "=" {
mkValueString =
v:
if builtins.isInt v then
toString v
else if lib.isString v then
"\"${v}\""
else if true == v then
"true"
else if false == v then
"false"
else if null == v then
""
else if isSecret v then
if (lib.isString v._secret) then
builtins.hashString "sha256" v._secret
else
builtins.hashString "sha256" (builtins.readFile v._secret)
else
throw "unsupported type ${builtins.typeOf v}: ${(lib.generators.toPretty { }) v}";
};
};
secretPaths = lib.mapAttrsToList (_: v: v._secret) (lib.filterAttrs (_: isSecret) cfg.config);
mkSecretReplacement = file: ''
replace-secret ${
lib.escapeShellArgs [
(
if (lib.isString file) then
builtins.hashString "sha256" file
else
builtins.hashString "sha256" (builtins.readFile file)
)
file
"${cfg.dataDir}/.env.local"
]
}
'';
secretReplacements = lib.concatMapStrings mkSecretReplacement secretPaths;
filteredConfig = lib.converge (lib.filterAttrsRecursive (
_: v:
!lib.elem v [
{ }
null
]
)) cfg.config;
davisEnv = pkgs.writeText "davis.env" (davisEnvVars filteredConfig);
in
{
options.services.davis = {
enable = lib.mkEnableOption (lib.mdDoc "Davis is a caldav and carddav server");
user = lib.mkOption {
default = "davis";
description = lib.mdDoc "User davis runs as.";
type = lib.types.str;
};
group = lib.mkOption {
default = "davis";
description = lib.mdDoc "Group davis runs as.";
type = lib.types.str;
};
package = lib.mkPackageOption pkgs "davis" { };
dataDir = lib.mkOption {
type = lib.types.path;
default = "/var/lib/davis";
description = lib.mdDoc ''
Davis data directory.
'';
};
hostname = lib.mkOption {
type = lib.types.str;
example = "davis.yourdomain.org";
description = lib.mdDoc ''
Domain of the host to serve davis under. You may want to change it if you
run Davis on a different URL than davis.yourdomain.
'';
};
config = lib.mkOption {
type = lib.types.attrsOf (
lib.types.nullOr (
lib.types.either
(lib.types.oneOf [
lib.types.bool
lib.types.int
lib.types.port
lib.types.path
lib.types.str
])
(
lib.types.submodule {
options = {
_secret = lib.mkOption {
type = lib.types.nullOr (
lib.types.oneOf [
lib.types.str
lib.types.path
]
);
description = lib.mdDoc ''
The path to a file containing the value the
option should be set to in the final
configuration file.
'';
};
};
}
)
)
);
default = { };
example = '''';
description = lib.mdDoc '''';
};
adminLogin = lib.mkOption {
type = lib.types.str;
default = "root";
description = lib.mdDoc ''
Username for the admin account.
'';
};
adminPasswordFile = lib.mkOption {
type = lib.types.path;
description = lib.mdDoc ''
The full path to a file that contains the admin's password. Must be
readable by the user.
'';
example = "/run/secrets/davis-admin-pass";
};
appSecretFile = lib.mkOption {
type = lib.types.path;
description = lib.mdDoc ''
A file containing the Symfony APP_SECRET - Its value should be a series
of characters, numbers and symbols chosen randomly and the recommended
length is around 32 characters. Can be generated with <code>cat
/dev/urandom | tr -dc a-zA-Z0-9 | fold -w 48 | head -n 1</code>.
'';
example = "/run/secrets/davis-appsecret";
};
database = {
driver = lib.mkOption {
type = lib.types.enum [
"sqlite"
"postgresql"
"mysql"
];
default = "sqlite";
description = lib.mdDoc "Database type, required in all circumstances.";
};
urlFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
example = "/run/secrets/davis-db-url";
description = lib.mdDoc ''
A file containing the database connection url. If set then it
overrides all other database settings (except driver). This is
mandatory if you want to use an external database, that is when
`services.davis.database.createLocally` is `false`.
'';
};
name = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = "davis";
description = lib.mdDoc "Database name, only used when the databse is created locally.";
};
createLocally = lib.mkOption {
type = lib.types.bool;
default = true;
description = lib.mdDoc "Create the database and database user locally.";
};
};
mail = {
dsn = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = lib.mdDoc "Mail DSN for sending emails. Mutually exclusive with `services.davis.mail.dsnFile`.";
example = "smtp://username:password@example.com:25";
};
dsnFile = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
example = "/run/secrets/davis-mail-dsn";
description = lib.mdDoc "A file containing the mail DSN for sending emails. Mutually exclusive with `servies.davis.mail.dsn`.";
};
inviteFromAddress = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = lib.mdDoc "Email address to send invitations from.";
example = "no-reply@dav.example.com";
};
};
nginx = lib.mkOption {
type = lib.types.submodule (
lib.recursiveUpdate (import ../web-servers/nginx/vhost-options.nix { inherit config lib; }) { }
);
default = null;
example = ''
{
serverAliases = [
"dav.''${config.networking.domain}"
];
# To enable encryption and let let's encrypt take care of certificate
forceSSL = true;
enableACME = true;
}
'';
description = lib.mdDoc ''
With this option, you can customize the nginx virtualHost settings.
'';
};
poolConfig = lib.mkOption {
type = lib.types.attrsOf (
lib.types.oneOf [
lib.types.str
lib.types.int
lib.types.bool
]
);
default = {
"pm" = "dynamic";
"pm.max_children" = 32;
"pm.start_servers" = 2;
"pm.min_spare_servers" = 2;
"pm.max_spare_servers" = 4;
"pm.max_requests" = 500;
};
description = lib.mdDoc ''
Options for the davis PHP pool. See the documentation on <literal>php-fpm.conf</literal>
for details on configuration directives.
'';
};
};
config =
let
defaultServiceConfig = {
ReadWritePaths = "${cfg.dataDir}";
User = user;
UMask = 77;
DeviceAllow = "";
LockPersonality = true;
NoNewPrivileges = true;
PrivateDevices = true;
PrivateTmp = true;
PrivateUsers = true;
ProcSubset = "pid";
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectKernelTunables = true;
ProtectProc = "invisible";
ProtectSystem = "strict";
RemoveIPC = true;
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@system-service"
"~@resources"
"~@privileged"
];
WorkingDirectory = "${cfg.package}/";
};
in
lib.mkIf cfg.enable {
assertions = [
{
assertion = db.createLocally -> db.urlFile == null;
message = "services.davis.database.urlFile must be unset if services.davis.database.createLocally is set true.";
}
{
assertion = db.createLocally || db.urlFile != null;
message = "One of services.davis.database.urlFile or services.davis.database.createLocally must be set.";
}
{
assertion = (mail.dsn != null) != (mail.dsnFile != null);
message = "One of (and only one of) services.davis.mail.dsn or services.davis.mail.dsnFile must be set.";
}
];
services.davis.config =
{
APP_ENV = "prod";
CACHE_DIR = "${cfg.dataDir}/var/cache";
# note: we do not need the log dir (we log to stdout/journald), by davis/symfony will try to create it, and the default value is one in the nix-store
# so we set it to a path under dataDir to avoid something like: Unable to create the "logs" directory (/nix/store/5cfskz0ybbx37s1161gjn5klwb5si1zg-davis-4.4.1/var/log).
LOG_DIR = "${cfg.dataDir}/var/log";
LOG_FILE_PATH = "/dev/stdout";
DATABASE_DRIVER = db.driver;
INVITE_FROM_ADDRESS = mail.inviteFromAddress;
APP_SECRET._secret = cfg.appSecretFile;
ADMIN_LOGIN = cfg.adminLogin;
ADMIN_PASSWORD._secret = cfg.adminPasswordFile;
APP_TIMEZONE = config.time.timeZone;
WEBDAV_ENABLED = false;
CALDAV_ENABLED = true;
CARDDAV_ENABLED = true;
}
// (if mail.dsn != null then { MAILER_DSN = mail.dsn; } else { MAILER_DSN._secret = mail.dsnFile; })
// (
if db.createLocally then
{
DATABASE_URL =
if db.driver == "sqlite" then
"sqlite:///${cfg.dataDir}/davis.db" # note: sqlite needs 4 slashes for an absolute path
else if
pgsqlLocal
# note: davis expects a non-standard postgres uri (due to the underlying doctrine library)
# specifically the charset query parameter, and the dummy hostname which is overriden by the host query parameter
then
"postgres://${user}@localhost/${db.name}?host=/run/postgresql&charset=UTF-8"
else if mysqlLocal then
"mysql://${user}@localhost/${db.name}?socket=/run/mysqld/mysqld.sock"
else
null;
}
else
{ DATABASE_URL._secret = db.urlFile; }
);
users = {
users = lib.mkIf (user == "davis") {
davis = {
description = "Davis service user";
group = cfg.group;
isSystemUser = true;
home = cfg.dataDir;
};
};
groups = lib.mkIf (group == "davis") { davis = { }; };
};
systemd.tmpfiles.rules = [
"d ${cfg.dataDir} 0710 ${user} ${group} - -"
"d ${cfg.dataDir}/var 0700 ${user} ${group} - -"
"d ${cfg.dataDir}/var/log 0700 ${user} ${group} - -"
"d ${cfg.dataDir}/var/cache 0700 ${user} ${group} - -"
];
services.phpfpm.pools.davis = {
inherit user group;
phpOptions = ''
log_errors = on
'';
phpEnv = {
ENV_DIR = "${cfg.dataDir}";
CACHE_DIR = "${cfg.dataDir}/var/cache";
#LOG_DIR = "${cfg.dataDir}/var/log";
};
settings =
{
"listen.mode" = "0660";
"pm" = "dynamic";
"pm.max_children" = 256;
"pm.start_servers" = 10;
"pm.min_spare_servers" = 5;
"pm.max_spare_servers" = 20;
}
// (
if cfg.nginx != null then
{
"listen.owner" = config.services.nginx.user;
"listen.group" = config.services.nginx.group;
}
else
{ }
)
// cfg.poolConfig;
};
# Reading the user-provided secret files requires root access
systemd.services.davis-env-setup = {
description = "Setup davis environment";
before = [
"phpfpm-davis.service"
"davis-db-migrate.service"
];
wantedBy = [ "multi-user.target" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
};
path = [ pkgs.replace-secret ];
restartTriggers = [
cfg.package
davisEnv
];
script = ''
# error handling
set -euo pipefail
# create .env file with the upstream values
install -T -m 0600 -o ${user} ${cfg.package}/env-upstream "${cfg.dataDir}/.env"
# create .env.local file with the user-provided values
install -T -m 0600 -o ${user} ${davisEnv} "${cfg.dataDir}/.env.local"
${secretReplacements}
'';
};
systemd.services.davis-db-migrate = {
description = "Migrate davis database";
before = [ "phpfpm-davis.service" ];
after =
lib.optional mysqlLocal "mysql.service"
++ lib.optional pgsqlLocal "postgresql.service"
++ [ "davis-env-setup.service" ];
requires =
lib.optional mysqlLocal "mysql.service"
++ lib.optional pgsqlLocal "postgresql.service"
++ [ "davis-env-setup.service" ];
wantedBy = [ "multi-user.target" ];
serviceConfig = defaultServiceConfig // {
Type = "oneshot";
RemainAfterExit = true;
Environment = [
"ENV_DIR=${cfg.dataDir}"
"CACHE_DIR=${cfg.dataDir}/var/cache"
"LOG_DIR=${cfg.dataDir}/var/log"
];
EnvironmentFile = "${cfg.dataDir}/.env.local";
};
restartTriggers = [
cfg.package
davisEnv
];
script = ''
set -euo pipefail
${cfg.package}/bin/console cache:clear --no-debug
${cfg.package}/bin/console cache:warmup --no-debug
${cfg.package}/bin/console doctrine:migrations:migrate
'';
};
systemd.services.phpfpm-davis.after = [
"davis-env-setup.service"
"davis-db-migrate.service"
];
systemd.services.phpfpm-davis.requires = [
"davis-env-setup.service"
"davis-db-migrate.service"
] ++ lib.optional mysqlLocal "mysql.service" ++ lib.optional pgsqlLocal "postgresql.service";
systemd.services.phpfpm-davis.serviceConfig.ReadWritePaths = [ cfg.dataDir ];
services.nginx = lib.mkIf (cfg.nginx != null) {
enable = lib.mkDefault true;
virtualHosts = {
"${cfg.hostname}" = lib.mkMerge [
cfg.nginx
{
root = lib.mkForce "${cfg.package}/public";
extraConfig = ''
charset utf-8;
index index.php;
'';
locations = {
"/" = {
extraConfig = ''
try_files $uri $uri/ /index.php$is_args$args;
'';
};
"~* ^/.well-known/(caldav|carddav)$" = {
extraConfig = ''
return 302 $http_x_forwarded_proto://$host/dav/;
'';
};
"~ ^(.+\.php)(.*)$" = {
extraConfig = ''
try_files $fastcgi_script_name =404;
include ${config.services.nginx.package}/conf/fastcgi_params;
include ${config.services.nginx.package}/conf/fastcgi.conf;
fastcgi_pass unix:${config.services.phpfpm.pools.davis.socket};
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param X-Forwarded-Proto $http_x_forwarded_proto;
fastcgi_param X-Forwarded-Port $http_x_forwarded_port;
'';
};
"~ /(\\.ht)" = {
extraConfig = ''
deny all;
return 404;
'';
};
};
}
];
};
};
services.mysql = lib.mkIf mysqlLocal {
enable = true;
package = lib.mkDefault pkgs.mariadb;
ensureDatabases = [ db.name ];
ensureUsers = [
{
name = user;
ensurePermissions = {
"${db.name}.*" = "ALL PRIVILEGES";
};
}
];
};
services.postgresql = lib.mkIf pgsqlLocal {
enable = true;
ensureDatabases = [ db.name ];
ensureUsers = [
{
name = user;
ensureDBOwnership = true;
}
];
};
};
meta = {
doc = ./davis.md;
maintainers = pkgs.davis.meta.maintainers;
};
}

View File

@ -783,6 +783,8 @@ in
# This working directory is required to find stuff like the set of
# onboarding files:
WorkingDirectory = "${cfg.package}/share/outline";
# In case this directory is not in /var/lib/outline, it needs to be made writable explicitly
ReadWritePaths = [ cfg.storage.localRootDir ];
};
};
};

View File

@ -47,6 +47,9 @@ let
"rescue.target"
"rescue.service"
# systemd-debug-generator
"debug-shell.service"
# Udev.
"systemd-tmpfiles-setup-dev-early.service"
"systemd-udevd-control.socket"

View File

@ -18,10 +18,10 @@ let
cfg = config.boot.initrd.systemd;
# Copied from fedora
upstreamUnits = [
"basic.target"
"ctrl-alt-del.target"
"debug-shell.service"
"emergency.service"
"emergency.target"
"final.target"
@ -398,7 +398,8 @@ in {
++ lib.optional (config.boot.initrd.systemd.root == "gpt-auto") "rw";
boot.initrd.systemd = {
initrdBin = [pkgs.bash pkgs.coreutils cfg.package.kmod cfg.package];
# bashInteractive is easier to use and also required by debug-shell.service
initrdBin = [pkgs.bashInteractive pkgs.coreutils cfg.package.kmod cfg.package];
extraBin = {
less = "${pkgs.less}/bin/less";
mount = "${cfg.package.util-linux}/bin/mount";
@ -472,6 +473,9 @@ in {
"${cfg.package.util-linux}/bin/umount"
"${cfg.package.util-linux}/bin/sulogin"
# required for script services
"${pkgs.runtimeShell}"
# so NSS can look up usernames
"${pkgs.glibc}/lib/libnss_files.so.2"
] ++ optionals (cfg.package.withCryptsetup && cfg.enableTpm2) [

View File

@ -13,7 +13,46 @@ let
format = pkgs.formats.ini {};
idmapdConfFile = format.generate "idmapd.conf" cfg.idmapd.settings;
nfsConfFile = pkgs.writeText "nfs.conf" cfg.extraConfig;
# merge parameters from services.nfs.server
nfsConfSettings =
optionalAttrs (cfg.server.nproc != null) {
nfsd.threads = cfg.server.nproc;
} // optionalAttrs (cfg.server.hostName != null) {
nfsd.host= cfg.hostName;
} // optionalAttrs (cfg.server.mountdPort != null) {
mountd.port = cfg.server.mountdPort;
} // optionalAttrs (cfg.server.statdPort != null) {
statd.port = cfg.server.statdPort;
} // optionalAttrs (cfg.server.lockdPort != null) {
lockd.port = cfg.server.lockdPort;
lockd.udp-port = cfg.server.lockdPort;
};
nfsConfDeprecated = cfg.extraConfig + ''
[nfsd]
threads=${toString cfg.server.nproc}
${optionalString (cfg.server.hostName != null) "host=${cfg.server.hostName}"}
${cfg.server.extraNfsdConfig}
[mountd]
${optionalString (cfg.server.mountdPort != null) "port=${toString cfg.server.mountdPort}"}
[statd]
${optionalString (cfg.server.statdPort != null) "port=${toString cfg.server.statdPort}"}
[lockd]
${optionalString (cfg.server.lockdPort != null) ''
port=${toString cfg.server.lockdPort}
udp-port=${toString cfg.server.lockdPort}
''}
'';
nfsConfFile =
if cfg.settings != {}
then format.generate "nfs.conf" (recursiveUpdate nfsConfSettings cfg.settings)
else pkgs.writeText "nfs.conf" nfsConfDeprecated;
requestKeyConfFile = pkgs.writeText "request-key.conf" ''
create id_resolver * * ${pkgs.nfs-utils}/bin/nfsidmap -t 600 %k %d
'';
@ -46,6 +85,19 @@ in
}
'';
};
settings = mkOption {
type = format.type;
default = {};
description = lib.mdDoc ''
General configuration for NFS daemons and tools.
See nfs.conf(5) and related man pages for details.
'';
example = literalExpression ''
{
mountd.manage-gids = true;
}
'';
};
extraConfig = mkOption {
type = types.lines;
default = "";
@ -60,6 +112,17 @@ in
config = mkIf (config.boot.supportedFilesystems.nfs or config.boot.supportedFilesystems.nfs4 or false) {
warnings =
(optional (cfg.extraConfig != "") ''
`services.nfs.extraConfig` is deprecated. Use `services.nfs.settings` instead.
'') ++ (optional (cfg.server.extraNfsdConfig != "") ''
`services.nfs.server.extraNfsdConfig` is deprecated. Use `services.nfs.settings` instead.
'');
assertions = [{
assertion = cfg.settings != {} -> cfg.extraConfig == "" && cfg.server.extraNfsdConfig == "";
message = "`services.nfs.settings` cannot be used together with `services.nfs.extraConfig` and `services.nfs.server.extraNfsdConfig`.";
}];
services.rpcbind.enable = true;
services.nfs.idmapd.settings = {

View File

@ -233,6 +233,7 @@ in {
croc = handleTest ./croc.nix {};
darling = handleTest ./darling.nix {};
dae = handleTest ./dae.nix {};
davis = handleTest ./davis.nix {};
dconf = handleTest ./dconf.nix {};
deconz = handleTest ./deconz.nix {};
deepin = handleTest ./deepin.nix {};

59
nixos/tests/davis.nix Normal file
View File

@ -0,0 +1,59 @@
import ./make-test-python.nix (
{ lib, pkgs, ... }:
{
name = "davis";
meta.maintainers = pkgs.davis.meta.maintainers;
nodes.machine =
{ config, ... }:
{
virtualisation = {
memorySize = 512;
};
services.davis = {
enable = true;
hostname = "davis.example.com";
database = {
driver = "postgresql";
};
mail = {
dsnFile = "${pkgs.writeText "davisMailDns" "smtp://username:password@example.com:25"}";
inviteFromAddress = "dav@example.com";
};
adminLogin = "admin";
appSecretFile = "${pkgs.writeText "davisAppSecret" "52882ef142066e09ab99ce816ba72522e789505caba224"}";
adminPasswordFile = "${pkgs.writeText "davisAdminPass" "nixos"}";
nginx = { };
};
};
testScript = ''
start_all()
machine.wait_for_unit("postgresql.service")
machine.wait_for_unit("davis-env-setup.service")
machine.wait_for_unit("davis-db-migrate.service")
machine.wait_for_unit("nginx.service")
machine.wait_for_unit("phpfpm-davis.service")
with subtest("welcome screen loads"):
machine.succeed(
"curl -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/ | grep '<title>Davis</title>'"
)
with subtest("login works"):
csrf_token = machine.succeed(
"curl -c /tmp/cookies -sSfL --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/login | grep '_csrf_token' | sed -E 's,.*value=\"(.*)\".*,\\1,g'"
)
r = machine.succeed(
f"curl -b /tmp/cookies --resolve davis.example.com:80:127.0.0.1 http://davis.example.com/login -X POST -F username=admin -F password=nixos -F _csrf_token={csrf_token.strip()} -D headers"
)
print(r)
machine.succeed(
"[[ $(grep -i 'location: ' headers | cut -d: -f2- | xargs echo) == /dashboard* ]]"
)
'';
}
)

View File

@ -9,18 +9,18 @@
buildGoModule rec {
pname = "go-musicfox";
version = "4.3.1";
version = "4.3.3";
src = fetchFromGitHub {
owner = "go-musicfox";
repo = pname;
repo = "go-musicfox";
rev = "v${version}";
hash = "sha256-QZHuQAOnthSm7Kb82i3NUWTnKk+9OMHV5vzOU72inX0=";
hash = "sha256-J6R3T92cHFUkKwc+GKm612tVjglP2Tc/kDUmzUMhvio=";
};
deleteVendor = true;
vendorHash = "sha256-6DeoxpjVfykBI3fJAJpMZwJ4VTooIbxGpk5+SW198hU=";
vendorHash = "sha256-KSIdBEEvYaYcDIDmzfRO857I8FSN4Ajw6phAPQLYEqg=";
subPackages = [ "cmd/musicfox.go" ];

View File

@ -4,18 +4,18 @@ version = 3
[[package]]
name = "aho-corasick"
version = "1.0.3"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86b8f9420f797f2d9e935edf629310eb938a0d839f984e25327f3c7eed22300c"
checksum = "6748e8def348ed4d14996fa801f4122cd763fff530258cdc03f64b25f89d3a5a"
dependencies = [
"memchr",
]
[[package]]
name = "anyhow"
version = "1.0.72"
version = "1.0.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
[[package]]
name = "autocfg"
@ -25,11 +25,11 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bindgen"
version = "0.64.0"
version = "0.66.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4"
checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.0",
"cexpr",
"clang-sys",
"lazy_static",
@ -40,7 +40,7 @@ dependencies = [
"regex",
"rustc-hash",
"shlex",
"syn 1.0.109",
"syn 2.0.29",
]
[[package]]
@ -51,9 +51,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.3.3"
version = "2.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635"
[[package]]
name = "bitmaps"
@ -76,7 +76,7 @@ version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d859b656775a6b1dd078d3e5924884e6ea88aa649a7fdde03d5b2ec56ffcc10b"
dependencies = [
"bitflags 2.3.3",
"bitflags 2.4.0",
"cairo-sys-rs",
"glib",
"libc",
@ -137,6 +137,7 @@ checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f"
dependencies = [
"glob",
"libc",
"libloading",
]
[[package]]
@ -226,7 +227,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.28",
"syn 2.0.29",
]
[[package]]
@ -287,9 +288,9 @@ dependencies = [
[[package]]
name = "gdk4"
version = "0.7.1"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8965ed5455cbfa1eb45c14a3b971cbacb43481913a3a5b9078b2ef0d9a01bd4b"
checksum = "6982d9815ed6ac95b0467b189e81f29dea26d08a732926ec113e65744ed3f96c"
dependencies = [
"cairo-rs",
"gdk-pixbuf",
@ -302,9 +303,9 @@ dependencies = [
[[package]]
name = "gdk4-sys"
version = "0.7.1"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aeffd4a7d68046c28666d817071bf025254aaed4df35099443f0c306ca6177f3"
checksum = "dbab43f332a3cf1df9974da690b5bb0e26720ed09a228178ce52175372dcfef0"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -375,7 +376,7 @@ version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "331156127e8166dd815cf8d2db3a5beb492610c716c03ee6db4f2d07092af0a7"
dependencies = [
"bitflags 2.3.3",
"bitflags 2.4.0",
"futures-channel",
"futures-core",
"futures-executor",
@ -404,7 +405,7 @@ dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.28",
"syn 2.0.29",
]
[[package]]
@ -459,9 +460,9 @@ dependencies = [
[[package]]
name = "gsk4"
version = "0.7.1"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53b3b9e8090acb325d08cde84b30fc29b963a75fbac93160e9c5a30d2b335742"
checksum = "cc25855255120f294d874acd6eaf4fbed7ce1cdc550e2d8415ea57fafbe816d5"
dependencies = [
"cairo-rs",
"gdk4",
@ -474,9 +475,9 @@ dependencies = [
[[package]]
name = "gsk4-sys"
version = "0.7.0"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0770d1ede7189092748c4ef5b6921264eb945fd2318a58e8f59dc273000810f8"
checksum = "e1ecf3a63bf1223d68f80f72cc896c4d8c80482fbce1c9a12c66d3de7290ee46"
dependencies = [
"cairo-sys-rs",
"gdk4-sys",
@ -490,9 +491,9 @@ dependencies = [
[[package]]
name = "gtk4"
version = "0.7.1"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0973f9b9ade10fc22403810b7283d47b533033715f2aaa36288cd3bf90d63efc"
checksum = "a3b095b26f2a2df70be1805d3590eeb9d7a05ecb5be9649b82defc72dc56228c"
dependencies = [
"cairo-rs",
"field-offset",
@ -511,9 +512,9 @@ dependencies = [
[[package]]
name = "gtk4-macros"
version = "0.7.1"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ae9f2c4530f3168fe506b0be7bc15f7a93ef38d020edb27d81a921a26cbca851"
checksum = "d57ec49cf9b657f69a05bca8027cff0a8dfd0c49e812be026fc7311f2163832f"
dependencies = [
"anyhow",
"proc-macro-crate",
@ -525,9 +526,9 @@ dependencies = [
[[package]]
name = "gtk4-sys"
version = "0.7.0"
version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19fde71ef2e78ac8fb18073c345b5f29609048d4045a345613645aa1163243c1"
checksum = "7b0bdde87c50317b4f355bcbb4a9c2c414ece1b7c824fb4ad4ba8f3bdb2c6603"
dependencies = [
"cairo-sys-rs",
"gdk-pixbuf-sys",
@ -629,11 +630,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
[[package]]
name = "libspa"
version = "0.6.0"
source = "git+https://gitlab.freedesktop.org/saivert/pipewire-rs?branch=misc_fixes#46bfbd8bdf0ad3ff1d25d02b2e36f97333c78e23"
name = "libloading"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f"
dependencies = [
"bitflags 2.3.3",
"cfg-if",
"winapi",
]
[[package]]
name = "libspa"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcdea6b6663acf456641a4dea1b87fa6970a3e881596237713192d8f5423b542"
dependencies = [
"bitflags 2.4.0",
"cc",
"convert_case",
"cookie-factory",
@ -646,8 +658,9 @@ dependencies = [
[[package]]
name = "libspa-sys"
version = "0.6.0"
source = "git+https://gitlab.freedesktop.org/saivert/pipewire-rs?branch=misc_fixes#46bfbd8bdf0ad3ff1d25d02b2e36f97333c78e23"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e63fc701d3375e6e255765d6a6172d9af06583115e78f3dfe2c8ff1dfd0b2dab"
dependencies = [
"bindgen",
"cc",
@ -669,9 +682,9 @@ dependencies = [
[[package]]
name = "log"
version = "0.4.19"
version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "malloc_buf"
@ -816,11 +829,12 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "pipewire"
version = "0.6.0"
source = "git+https://gitlab.freedesktop.org/saivert/pipewire-rs?branch=misc_fixes#46bfbd8bdf0ad3ff1d25d02b2e36f97333c78e23"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "062c97c31818918b8bffdc66cfd93f3e4b4141f505c63234f9ff0a658fddedab"
dependencies = [
"anyhow",
"bitflags 2.3.3",
"bitflags 2.4.0",
"libc",
"libspa",
"libspa-sys",
@ -832,8 +846,9 @@ dependencies = [
[[package]]
name = "pipewire-sys"
version = "0.6.0"
source = "git+https://gitlab.freedesktop.org/saivert/pipewire-rs?branch=misc_fixes#46bfbd8bdf0ad3ff1d25d02b2e36f97333c78e23"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d558e2cffe5f97ac32c7e0b6cb6074b5271b8c2c628ac68633342ee08fdab308"
dependencies = [
"bindgen",
"libspa-sys",
@ -908,9 +923,9 @@ dependencies = [
[[package]]
name = "quote"
version = "1.0.32"
version = "1.0.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
dependencies = [
"proc-macro2",
]
@ -1045,9 +1060,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.28"
version = "2.0.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
checksum = "c324c494eba9d92503e6f1ef2e6df781e78f6a7705a0202d9801b198807d518a"
dependencies = [
"proc-macro2",
"quote",
@ -1081,22 +1096,22 @@ checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
[[package]]
name = "thiserror"
version = "1.0.44"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90"
checksum = "97a802ec30afc17eee47b2855fc72e0c4cd62be9b4efe6591edde0ec5bd68d8f"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.44"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
checksum = "6bb623b56e39ab7dcd4b1b98bb6c8f8d907ed255b18de254088016b27a8ee19b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.28",
"syn 2.0.29",
]
[[package]]
@ -1187,9 +1202,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]]
name = "winnow"
version = "0.5.4"
version = "0.5.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acaaa1190073b2b101e15083c38ee8ec891b5e05cbee516521e94ec008f61e64"
checksum = "d09770118a7eb1ccaf4a594a221334119a44a814fcb0d31c5b85e83e97227a97"
dependencies = [
"memchr",
]
@ -1197,9 +1212,9 @@ dependencies = [
[[package]]
name = "wireplumber"
version = "0.1.0"
source = "git+https://github.com/saivert/wireplumber.rs.git?branch=use_pipewire_from_git#8dbf383ce54dee7b8d578b87c13f3507a65291f8"
source = "git+https://github.com/arcnmx/wireplumber.rs.git?rev=341b0c4e8d177f5f21c109cf88cca4f2dc1f853a#341b0c4e8d177f5f21c109cf88cca4f2dc1f853a"
dependencies = [
"bitflags 1.3.2",
"bitflags 2.4.0",
"gio",
"glib",
"libc",
@ -1213,7 +1228,7 @@ dependencies = [
[[package]]
name = "wireplumber-sys"
version = "0.1.0"
source = "git+https://github.com/saivert/wireplumber.rs.git?branch=use_pipewire_from_git#8dbf383ce54dee7b8d578b87c13f3507a65291f8"
source = "git+https://github.com/arcnmx/wireplumber.rs.git?rev=341b0c4e8d177f5f21c109cf88cca4f2dc1f853a#341b0c4e8d177f5f21c109cf88cca4f2dc1f853a"
dependencies = [
"gio-sys",
"glib-sys",

View File

@ -1,6 +1,7 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchFromGitLab
, cargo
, desktop-file-utils
, meson
@ -19,22 +20,33 @@
, wireplumber
}:
let
wireplumber_0_4 = wireplumber.overrideAttrs (attrs: rec {
version = "0.4.17";
src = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "pipewire";
repo = "wireplumber";
rev = version;
hash = "sha256-vhpQT67+849WV1SFthQdUeFnYe/okudTQJoL3y+wXwI=";
};
});
in
stdenv.mkDerivation rec {
pname = "pwvucontrol";
version = "0.2";
version = "0.3.1";
src = fetchFromGitHub {
owner = "saivert";
repo = "pwvucontrol";
rev = version;
hash = "sha256-jBvMLewBZi4LyX//YUyJQjqPvxnKqlpuLZAm9zpDMrA=";
hash = "sha256-t4JUpKtuO1JgrdsNbl0M/SwPmoqu7WxsaD74vlJeVhY=";
};
cargoDeps = rustPlatform.importCargoLock {
lockFile = ./Cargo.lock;
outputHashes = {
"libspa-0.6.0" = "sha256-CVLQ9JXRMo78/kay1TpRgRuk5v/Z5puPVMzLA30JRk8=";
"wireplumber-0.1.0" = "sha256-wkku9vqIMdV+HTkWCPXKH2KM1Xzf0xApC5zrVmgxhsA=";
"wireplumber-0.1.0" = "sha256-+LZ8xKok2AOegW8WvfrfZGXuQB4xHrLNshcTOHab+xQ=";
};
};
@ -58,7 +70,7 @@ stdenv.mkDerivation rec {
libadwaita
pango
pipewire
wireplumber
wireplumber_0_4
];
meta = with lib; {

View File

@ -1,37 +0,0 @@
{ lib, fetchurl, appimageTools, }:
let
pname = "ytmdesktop";
version = "1.13.0";
name = "${pname}-${version}";
src = fetchurl {
url = "https://github.com/ytmdesktop/ytmdesktop/releases/download/v${version}/YouTube-Music-Desktop-App-${version}.AppImage";
sha256 = "0f5l7hra3m3q9zd0ngc9dj4mh1lk0rgicvh9idpd27wr808vy28v";
};
appimageContents = appimageTools.extract { inherit name src; };
in appimageTools.wrapType2 rec {
inherit name src;
extraInstallCommands = ''
mv $out/bin/{${name},${pname}}
install -m 444 \
-D ${appimageContents}/youtube-music-desktop-app.desktop \
-t $out/share/applications
substituteInPlace \
$out/share/applications/youtube-music-desktop-app.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
cp -r ${appimageContents}/usr/share/icons $out/share
'';
meta = with lib; {
description = "A Desktop App for YouTube Music";
homepage = "https://ytmdesktop.app/";
license = licenses.cc0;
platforms = platforms.linux;
maintainers = [ maintainers.lgcl ];
mainProgram = "ytmdesktop";
};
}

View File

@ -997,26 +997,26 @@ let
sources = {
"x86_64-linux" = {
arch = "linux-x64";
sha256 = "05kh6sf3jv3510q33chf8s5n1kfp9wcm7650va7mcrdkfr9g8ysq";
sha256 = "1y5g8ay9sfz7r21fhwb2wr28yng7w3f2l265ljnfkz8yv8qzqpgk";
};
"x86_64-darwin" = {
arch = "darwin-x64";
sha256 = "0242h9kq47qvs1xynr5x8dzxkc5pwgb6km0iqpyy9kydg8ng1vp3";
sha256 = "14v9p5k9c9s9hfb1ymmkp66kmm9pvnvvljzrrs9wmajss5mlglf5";
};
"aarch64-linux" = {
arch = "linux-arm64";
sha256 = "1qm3f2lh8mi3hnyp2bmx7j2lir6fmbbxkzh6b8zf579khhbapnaz";
sha256 = "1mngfy42crp8xs14s06rkyzv16ci12bq8y39miyy7wa3a343b0ii";
};
"aarch64-darwin" = {
arch = "darwin-arm64";
sha256 = "18w22z1c5qgkpw2zlwmi9gs9dx1pcm51f0r8my7ynnvgl6mp12sg";
sha256 = "1gd1kr91s52kc8ldzy78cbn6gix1b8cvd6jh4sfrhq7k8yyn7g1l";
};
};
in
{
name = "continue";
publisher = "Continue";
version = "0.8.12";
version = "0.8.22";
} // sources.${stdenv.system};
nativeBuildInputs = [
autoPatchelfHook

View File

@ -7,7 +7,7 @@
, isInsiders ? false
# sourceExecutableName is the name of the binary in the source archive over
# which we have no control and it is needed to run the insider version as
# documented in https://nixos.wiki/wiki/Visual_Studio_Code#Insiders_Build
# documented in https://wiki.nixos.org/wiki/Visual_Studio_Code#Insiders_Build
# On MacOS the insider binary is still called code instead of code-insiders as
# of 2023-08-06.
, sourceExecutableName ? "code" + lib.optionalString (isInsiders && stdenv.isLinux) "-insiders"

View File

@ -74,6 +74,6 @@ stdenv.mkDerivation rec {
homepage = "https://gitlab.com/schmiddi-on-mobile/railway";
license = lib.licenses.gpl3Plus;
mainProgram = "diebahn";
maintainers = with lib.maintainers; [ dotlambda ];
maintainers = with lib.maintainers; [ dotlambda lilacious ];
};
}

View File

@ -1,18 +1,19 @@
GEM
remote: https://rubygems.org/
specs:
RedCloth (4.3.2)
asciidoctor (2.0.18)
RedCloth (4.3.4)
asciidoctor (2.0.22)
base64 (0.2.0)
builder (3.2.4)
concurrent-ruby (1.2.2)
concurrent-ruby (1.2.3)
crass (1.0.6)
creole (0.5.0)
execjs (2.8.1)
execjs (2.9.1)
expression_parser (0.9.0)
ffi (1.15.5)
ffi (1.16.3)
gemojione (4.3.3)
json
github-markup (4.0.1)
github-markup (4.0.2)
gollum (5.3.2)
gemojione (~> 4.1)
gollum-lib (>= 5.2.3, < 6.0)
@ -45,51 +46,51 @@ GEM
mime-types (~> 3.4)
rugged (~> 1.5)
htmlentities (4.3.4)
i18n (1.13.0)
i18n (1.14.4)
concurrent-ruby (~> 1.0)
json (2.6.3)
json (2.7.1)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
loofah (2.20.0)
loofah (2.22.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
mime-types (3.4.1)
nokogiri (>= 1.12.0)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2023.0218.1)
mini_portile2 (2.8.2)
mime-types-data (3.2024.0305)
mini_portile2 (2.8.5)
multi_json (1.15.0)
mustache (1.1.1)
mustache-sinatra (2.0.0)
mustache (~> 1.0)
mustermann (2.0.2)
ruby2_keywords (~> 0.0.1)
nokogiri (1.14.3)
mini_portile2 (~> 2.8.0)
nokogiri (1.16.3)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
octicons (12.1.0)
nokogiri (>= 1.6.3.1)
org-ruby (0.9.12)
rubypants (~> 0.2)
psych (5.1.0)
psych (5.1.2)
stringio
racc (1.6.2)
rack (2.2.7)
racc (1.7.3)
rack (2.2.9)
rack-protection (2.2.4)
rack
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rdoc (6.5.0)
rdoc (6.6.3.1)
psych (>= 4.0.0)
rexml (3.2.5)
rexml (3.2.6)
rouge (3.30.0)
rss (0.2.9)
rexml
ruby2_keywords (0.0.5)
rubypants (0.7.1)
rugged (1.6.3)
rugged (1.7.2)
sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
@ -106,23 +107,24 @@ GEM
rack-protection (= 2.2.4)
sinatra (= 2.2.4)
tilt (~> 2.0)
sprockets (3.7.2)
sprockets (3.7.3)
base64
concurrent-ruby (~> 1.0)
rack (> 1, < 3)
sprockets-helpers (1.4.0)
sprockets (>= 2.2)
stringio (3.0.6)
stringio (3.1.0)
therubyrhino (2.1.2)
therubyrhino_jar (>= 1.7.4, < 1.7.9)
therubyrhino_jar (1.7.8)
tilt (2.1.0)
tilt (2.3.0)
twitter-text (1.14.7)
unf (~> 0.1.0)
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unf_ext (0.0.9.1)
useragent (0.16.10)
webrick (1.8.1)
wikicloth (0.8.3)
@ -144,4 +146,4 @@ DEPENDENCIES
wikicloth
BUNDLED WITH
2.4.12
2.5.6

View File

@ -4,10 +4,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "11z3vnd8vh3ny1vx69bjrbck5b2g8zsbj94npyadpn7fdp8y3ldv";
sha256 = "1mnan6dxw4aqii9kcmp1s3sc91jiwaqkdpsg6g01fdisb6xz3n56";
type = "gem";
};
version = "2.0.18";
version = "2.0.22";
};
base64 = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01qml0yilb9basf7is2614skjp8384h2pycfx86cr8023arfj98g";
type = "gem";
};
version = "0.2.0";
};
builder = {
groups = ["default"];
@ -24,10 +34,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0krcwb6mn0iklajwngwsg850nk8k9b35dhmc2qkbdqvmifdi2y9q";
sha256 = "1qh1b14jwbbj242klkyz5fc7npd4j0mvndz62gajhvl1l3wd7zc2";
type = "gem";
};
version = "1.2.2";
version = "1.2.3";
};
crass = {
groups = ["default"];
@ -54,10 +64,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "121h6af4i6wr3wxvv84y53jcyw2sk71j5wsncm6wq6yqrwcrk4vd";
sha256 = "1yywajqlpjhrj1m43s3lfg3i4lkb6pxwccmwps7qw37ndmphdzg8";
type = "gem";
};
version = "2.8.1";
version = "2.9.1";
};
expression_parser = {
groups = ["default"];
@ -74,10 +84,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1862ydmclzy1a0cjbvm8dz7847d9rch495ib0zb64y84d3xd4bkg";
sha256 = "1yvii03hcgqj30maavddqamqy50h7y6xcn2wcyq72wn823zl4ckd";
type = "gem";
};
version = "1.15.5";
version = "1.16.3";
};
gemojione = {
dependencies = ["json"];
@ -95,10 +105,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0p40hbrrzq9gypkx0p8wqdqa2gfmmw2cd9a0sv2dw1nnk1qbcl8y";
sha256 = "0mv2l0h3v5g4cwqh2lgb3braafh8n3v2s84i573wi5m79f4qhw1z";
type = "gem";
};
version = "4.0.1";
version = "4.0.2";
};
gollum = {
dependencies = ["gemojione" "gollum-lib" "i18n" "kramdown" "kramdown-parser-gfm" "mustache-sinatra" "octicons" "rdoc" "rss" "sass" "sinatra" "sinatra-contrib" "sprockets" "sprockets-helpers" "therubyrhino" "uglifier" "useragent" "webrick"];
@ -149,20 +159,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1yk33slipi3i1kydzrrchbi7cgisaxym6pgwlzx7ir8vjk6wl90x";
sha256 = "0lbm33fpb3w06wd2231sg58dwlwgjsvym93m548ajvl6s3mfvpn7";
type = "gem";
};
version = "1.13.0";
version = "1.14.4";
};
json = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0nalhin1gda4v8ybk6lq8f407cgfrj6qzn234yra4ipkmlbfmal6";
sha256 = "0r9jmjhg2ly3l736flk7r2al47b5c8cayh0gqkq0yhjqzc9a6zhq";
type = "gem";
};
version = "2.6.3";
version = "2.7.1";
};
kramdown = {
dependencies = ["rexml"];
@ -192,10 +202,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1mi4ia13fisc97fzd8xcd9wkjdki7zfbmdn1xkdzplicir68gyp8";
sha256 = "1zkjqf37v2d7s11176cb35cl83wls5gm3adnfkn2zcc61h3nxmqh";
type = "gem";
};
version = "2.20.0";
version = "2.22.0";
};
mime-types = {
dependencies = ["mime-types-data"];
@ -203,30 +213,30 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
sha256 = "1r64z0m5zrn4k37wabfnv43wa6yivgdfk6cf2rpmmirlz889yaf1";
type = "gem";
};
version = "3.4.1";
version = "3.5.2";
};
mime-types-data = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1pky3vzaxlgm9gw5wlqwwi7wsw3jrglrfflrppvvnsrlaiz043z9";
sha256 = "00x7w5xqsj9m33v3vkmy23wipkkysafksib53ypzn27p5g81w455";
type = "gem";
};
version = "3.2023.0218.1";
version = "3.2024.0305";
};
mini_portile2 = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0z7f38iq37h376n9xbl4gajdrnwzq284c9v1py4imw3gri2d5cj6";
sha256 = "1kl9c3kdchjabrihdqfmcplk3lq4cw1rr9f378y6q22qwy5dndvs";
type = "gem";
};
version = "2.8.2";
version = "2.8.5";
};
multi_json = {
groups = ["default"];
@ -276,10 +286,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0fnw0z8zl8b5k35g9m5hhc1g4s6ajzjinhyxnqjrx7l7p07fw71v";
sha256 = "0j72sg8n8834vbw2x8glcp46y5r2dls2pj64ll7rmf6mri9s52j9";
type = "gem";
};
version = "1.14.3";
version = "1.16.3";
};
octicons = {
dependencies = ["nokogiri"];
@ -309,30 +319,30 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1msambb54r3d1sg6smyj4k2pj9h9lz8jq4jamip7ivcyv32a85vz";
sha256 = "0s5383m6004q76xm3lb732bp4sjzb6mxb6rbgn129gy2izsj4wrk";
type = "gem";
};
version = "5.1.0";
version = "5.1.2";
};
racc = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "09jgz6r0f7v84a7jz9an85q8vvmp743dqcsdm3z9c8rqcqv6pljq";
sha256 = "01b9662zd2x9bp4rdjfid07h09zxj7kvn7f5fghbqhzc625ap1dp";
type = "gem";
};
version = "1.6.2";
version = "1.7.3";
};
rack = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "16w217k9z02c4hqizym8dkj6bqmmzx4qdvqpnskgzf174a5pwdxk";
sha256 = "0hj0rkw2z9r1lcg2wlrcld2n3phwrcgqcp7qd1g9a7hwgalh2qzx";
type = "gem";
};
version = "2.2.7";
version = "2.2.9";
};
rack-protection = {
dependencies = ["rack"];
@ -372,30 +382,30 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05r2cxscapr9saqjw8dlp89as7jvc2mlz1h5kssrmkbz105qmfcm";
sha256 = "0ib3cnf4yllvw070gr4bz94sbmqx3haqc5f846fsvdcs494vgxrr";
type = "gem";
};
version = "6.5.0";
version = "6.6.3.1";
};
RedCloth = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0m9dv7ya9q93r8x1pg2gi15rxlbck8m178j1fz7r5v6wr1avrrqy";
sha256 = "15r2h7rfp4bi9i0bfmvgnmvmw0kl3byyac53rcakk4qsv7yv4caj";
type = "gem";
};
version = "4.3.2";
version = "4.3.4";
};
rexml = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "08ximcyfjy94pm1rhcx04ny1vx2sk0x4y185gzn86yfsbzwkng53";
sha256 = "05i8518ay14kjbma550mv0jm8a6di8yp5phzrd8rj44z9qnrlrp0";
type = "gem";
};
version = "3.2.5";
version = "3.2.6";
};
rouge = {
groups = ["default"];
@ -443,10 +453,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "016bawsahkhxx7p8azxirpl7y2y7i8a027pj8910gwf6ipg329in";
sha256 = "1sccng15h8h3mcjxfgvxy85lfpswbj0nhmzwwsqdffbzqgsb2jch";
type = "gem";
};
version = "1.6.3";
version = "1.7.2";
};
sass = {
dependencies = ["sass-listen"];
@ -493,15 +503,15 @@
version = "2.2.4";
};
sprockets = {
dependencies = ["concurrent-ruby" "rack"];
dependencies = ["base64" "concurrent-ruby" "rack"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "182jw5a0fbqah5w9jancvfmjbk88h8bxdbwnl4d3q809rpxdg8ay";
sha256 = "0lyc6mx4yalsnxc9yp4a5xra4nz1nwwbk5634wlfncml0ll1bnnw";
type = "gem";
};
version = "3.7.2";
version = "3.7.3";
};
sprockets-helpers = {
dependencies = ["sprockets"];
@ -519,10 +529,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "10w46rlh844kax248l1m3pyrj94n1qpc9691j8r5v0rzdxibpy7v";
sha256 = "063psvsn1aq6digpznxfranhcpmi0sdv2jhra5g0459sw0x2dxn1";
type = "gem";
};
version = "3.0.6";
version = "3.1.0";
};
therubyrhino = {
dependencies = ["therubyrhino_jar"];
@ -550,10 +560,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1qmhi6d9przjzhsyk9g5pq2j75c656msh6xzprqd2mxgphf23jxs";
sha256 = "0p3l7v619hwfi781l3r7ypyv1l8hivp09r18kmkn6g11c4yr1pc2";
type = "gem";
};
version = "2.1.0";
version = "2.3.0";
};
twitter-text = {
dependencies = ["unf"];
@ -593,10 +603,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1yj2nz2l101vr1x9w2k83a0fag1xgnmjwp8w8rw4ik2rwcz65fch";
sha256 = "1sf6bxvf6x8gihv6j63iakixmdddgls58cpxpg32chckb2l18qcj";
type = "gem";
};
version = "0.0.8.2";
version = "0.0.9.1";
};
useragent = {
groups = ["default"];

View File

@ -14,12 +14,11 @@ GEM
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
base64 (0.2.0)
bigdecimal (3.1.6)
bigdecimal (3.1.7)
colorator (1.1.0)
concurrent-ruby (1.2.3)
connection_pool (2.4.1)
drb (2.2.0)
ruby2_keywords
drb (2.2.1)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
@ -27,12 +26,13 @@ GEM
ffi (1.16.3)
forwardable-extended (2.6.0)
gemoji (4.1.0)
google-protobuf (3.25.3)
google-protobuf (4.26.1)
rake (>= 13)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.8.0)
i18n (1.14.1)
i18n (1.14.4)
concurrent-ruby (~> 1.0)
jekyll (4.3.3)
addressable (~> 2.4)
@ -77,9 +77,9 @@ GEM
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
mini_portile2 (2.8.5)
minitest (5.22.2)
minitest (5.22.3)
mutex_m (0.2.0)
nokogiri (1.16.2)
nokogiri (1.16.3)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
pathutil (0.16.2)
@ -91,11 +91,10 @@ GEM
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.6)
rouge (4.2.0)
ruby2_keywords (0.0.5)
rouge (4.2.1)
safe_yaml (1.0.5)
sass-embedded (1.71.1)
google-protobuf (~> 3.25)
sass-embedded (1.72.0)
google-protobuf (>= 3.25, < 5.0)
rake (>= 13.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)

View File

@ -36,10 +36,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00db5v09k1z3539g1zrk7vkjrln9967k08adh6qx33ng97a2gg5w";
sha256 = "0cq1c29zbkcxgdihqisirhcw76xc768z2zpd5vbccpq0l1lv76g7";
type = "gem";
};
version = "3.1.6";
version = "3.1.7";
};
colorator = {
groups = ["default"];
@ -72,15 +72,14 @@
version = "2.4.1";
};
drb = {
dependencies = ["ruby2_keywords"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "03ylflxbp9jrs1hx3d4wvx05yb9hdq4a0r706zz6qc6kvqfazr79";
sha256 = "0h5kbj9hvg5hb3c7l425zpds0vb42phvln2knab8nmazg2zp5m79";
type = "gem";
};
version = "2.2.0";
version = "2.2.1";
};
em-websocket = {
dependencies = ["eventmachine" "http_parser.rb"];
@ -134,14 +133,15 @@
version = "4.1.0";
};
google-protobuf = {
dependencies = ["rake"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1mnxzcq8kmyfb9bkzqnp019d1hx1vprip3yzdkkha6b3qz5rgg9r";
sha256 = "14s40yxj35vixx9pvpnbrkz9z7ga3m7vcy72yll1flnn3cirl1aj";
type = "gem";
};
version = "3.25.3";
version = "4.26.1";
};
html-pipeline = {
dependencies = ["activesupport" "nokogiri"];
@ -170,10 +170,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
sha256 = "0lbm33fpb3w06wd2231sg58dwlwgjsvym93m548ajvl6s3mfvpn7";
type = "gem";
};
version = "1.14.1";
version = "1.14.4";
};
jekyll = {
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table" "webrick"];
@ -331,10 +331,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0667vf0zglacry87nkcl3ns8421aydvz71vfa3g3yjhiq8zh19f5";
sha256 = "07lq26b86giy3ha3fhrywk9r1ajhc2pm2mzj657jnpnbj1i6g17a";
type = "gem";
};
version = "5.22.2";
version = "5.22.3";
};
mutex_m = {
groups = ["default"];
@ -352,10 +352,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "173zavvxlwyi48lfskk48wcrdbkvjlhjhvy4jpcrfx72rpjjx4k8";
sha256 = "0j72sg8n8834vbw2x8glcp46y5r2dls2pj64ll7rmf6mri9s52j9";
type = "gem";
};
version = "1.16.2";
version = "1.16.3";
};
pathutil = {
dependencies = ["forwardable-extended"];
@ -434,20 +434,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fkfa0iq3r9b0zzrxpxha17avmyzci3kidzmfbf6fd1279mndpb0";
sha256 = "1zd1pdldi6h8x27dqim7cy8m69xr01aw5c8k1zhkz497n4np6wgk";
type = "gem";
};
version = "4.2.0";
};
ruby2_keywords = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
type = "gem";
};
version = "0.0.5";
version = "4.2.1";
};
safe_yaml = {
groups = ["default"];
@ -465,10 +455,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ccqqkmicqs2nbawyknb17qfafwqq0k6jxibcm86vqd1jp185pxa";
sha256 = "0bixk8c02dhflvhi4s5hxzjg8akzgicvjxjvxx74nah2j8qfblq5";
type = "gem";
};
version = "1.71.1";
version = "1.72.0";
};
terminal-table = {
dependencies = ["unicode-display_width"];

View File

@ -14,7 +14,7 @@ GEM
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
base64 (0.2.0)
bigdecimal (3.1.6)
bigdecimal (3.1.7)
classifier-reborn (2.3.0)
fast-stemmer (~> 1.0)
matrix (~> 0.4)
@ -26,8 +26,7 @@ GEM
colorator (1.1.0)
concurrent-ruby (1.2.3)
connection_pool (2.4.1)
drb (2.2.0)
ruby2_keywords
drb (2.2.1)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
@ -41,12 +40,13 @@ GEM
ffi (1.16.3)
forwardable-extended (2.6.0)
gemoji (4.1.0)
google-protobuf (3.25.3)
google-protobuf (4.26.1)
rake (>= 13)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.8.0)
i18n (1.14.1)
i18n (1.14.4)
concurrent-ruby (~> 1.0)
jekyll (4.3.3)
addressable (~> 2.4)
@ -81,7 +81,7 @@ GEM
html-pipeline (~> 2.3)
jekyll (>= 3.7, < 5.0)
jekyll-paginate (1.1.0)
jekyll-polyglot (1.7.0)
jekyll-polyglot (1.8.0)
jekyll (>= 4.0, >= 3.0)
jekyll-redirect-from (0.16.0)
jekyll (>= 3.3, < 5.0)
@ -114,14 +114,14 @@ GEM
mercenary (0.4.0)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2024.0206)
mime-types-data (3.2024.0305)
mini_magick (4.12.0)
mini_portile2 (2.8.5)
minitest (5.22.2)
minitest (5.22.3)
mutex_m (0.2.0)
net-http (0.4.1)
uri
nokogiri (1.16.2)
nokogiri (1.16.3)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
octokit (4.25.1)
@ -137,14 +137,13 @@ GEM
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rdoc (6.6.2)
rdoc (6.6.3.1)
psych (>= 4.0.0)
rexml (3.2.6)
rouge (4.2.0)
ruby2_keywords (0.0.5)
rouge (4.2.1)
safe_yaml (1.0.5)
sass-embedded (1.71.1)
google-protobuf (~> 3.25)
sass-embedded (1.72.0)
google-protobuf (>= 3.25, < 5.0)
rake (>= 13.0.0)
sawyer (0.9.2)
addressable (>= 2.3.5)

View File

@ -36,10 +36,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "00db5v09k1z3539g1zrk7vkjrln9967k08adh6qx33ng97a2gg5w";
sha256 = "0cq1c29zbkcxgdihqisirhcw76xc768z2zpd5vbccpq0l1lv76g7";
type = "gem";
};
version = "3.1.6";
version = "3.1.7";
};
classifier-reborn = {
dependencies = ["fast-stemmer" "matrix"];
@ -126,15 +126,14 @@
version = "2.4.1";
};
drb = {
dependencies = ["ruby2_keywords"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "03ylflxbp9jrs1hx3d4wvx05yb9hdq4a0r706zz6qc6kvqfazr79";
sha256 = "0h5kbj9hvg5hb3c7l425zpds0vb42phvln2knab8nmazg2zp5m79";
type = "gem";
};
version = "2.2.0";
version = "2.2.1";
};
em-websocket = {
dependencies = ["eventmachine" "http_parser.rb"];
@ -242,14 +241,15 @@
version = "4.1.0";
};
google-protobuf = {
dependencies = ["rake"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1mnxzcq8kmyfb9bkzqnp019d1hx1vprip3yzdkkha6b3qz5rgg9r";
sha256 = "14s40yxj35vixx9pvpnbrkz9z7ga3m7vcy72yll1flnn3cirl1aj";
type = "gem";
};
version = "3.25.3";
version = "4.26.1";
};
html-pipeline = {
dependencies = ["activesupport" "nokogiri"];
@ -278,10 +278,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
sha256 = "0lbm33fpb3w06wd2231sg58dwlwgjsvym93m548ajvl6s3mfvpn7";
type = "gem";
};
version = "1.14.1";
version = "1.14.4";
};
jekyll = {
dependencies = ["addressable" "colorator" "em-websocket" "i18n" "jekyll-sass-converter" "jekyll-watch" "kramdown" "kramdown-parser-gfm" "liquid" "mercenary" "pathutil" "rouge" "safe_yaml" "terminal-table" "webrick"];
@ -376,10 +376,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "189scj27hczbxp02s5v27r4civfqq2fr981jrp0xldwvcw5qfbll";
sha256 = "0xbmsm30jgpbamqvbjvjgfq2w9ihdpqsbay9jrd5pljrbhvy02di";
type = "gem";
};
version = "1.7.0";
version = "1.8.0";
};
jekyll-redirect-from = {
dependencies = ["jekyll"];
@ -584,10 +584,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0zpn5brxdf5akh7ij511bkrd30fxd7697shmxxszahqj9m62zvn5";
sha256 = "00x7w5xqsj9m33v3vkmy23wipkkysafksib53ypzn27p5g81w455";
type = "gem";
};
version = "3.2024.0206";
version = "3.2024.0305";
};
mini_magick = {
groups = ["default"];
@ -614,10 +614,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0667vf0zglacry87nkcl3ns8421aydvz71vfa3g3yjhiq8zh19f5";
sha256 = "07lq26b86giy3ha3fhrywk9r1ajhc2pm2mzj657jnpnbj1i6g17a";
type = "gem";
};
version = "5.22.2";
version = "5.22.3";
};
mutex_m = {
groups = ["default"];
@ -646,10 +646,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "173zavvxlwyi48lfskk48wcrdbkvjlhjhvy4jpcrfx72rpjjx4k8";
sha256 = "0j72sg8n8834vbw2x8glcp46y5r2dls2pj64ll7rmf6mri9s52j9";
type = "gem";
};
version = "1.16.2";
version = "1.16.3";
};
octokit = {
dependencies = ["faraday" "sawyer"];
@ -741,10 +741,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "14wnrpd1kl43ynk1wwwgv9avsw84d1lrvlfyrjy3d4h7h7ndnqzp";
sha256 = "0ib3cnf4yllvw070gr4bz94sbmqx3haqc5f846fsvdcs494vgxrr";
type = "gem";
};
version = "6.6.2";
version = "6.6.3.1";
};
rexml = {
groups = ["default"];
@ -761,20 +761,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1fkfa0iq3r9b0zzrxpxha17avmyzci3kidzmfbf6fd1279mndpb0";
sha256 = "1zd1pdldi6h8x27dqim7cy8m69xr01aw5c8k1zhkz497n4np6wgk";
type = "gem";
};
version = "4.2.0";
};
ruby2_keywords = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vz322p8n39hz3b4a9gkmz9y7a5jaz41zrm2ywf31dvkqm03glgz";
type = "gem";
};
version = "0.0.5";
version = "4.2.1";
};
safe_yaml = {
groups = ["default"];
@ -792,10 +782,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1ccqqkmicqs2nbawyknb17qfafwqq0k6jxibcm86vqd1jp185pxa";
sha256 = "0bixk8c02dhflvhi4s5hxzjg8akzgicvjxjvxx74nah2j8qfblq5";
type = "gem";
};
version = "1.71.1";
version = "1.72.0";
};
sawyer = {
dependencies = ["addressable" "faraday"];

View File

@ -6,13 +6,13 @@
stdenv.mkDerivation rec {
pname = "johnny-reborn-engine";
version = "0.30";
version = "0.34";
src = fetchFromGitHub {
owner = "xesf";
repo = "jc_reborn";
rev = "v${version}";
hash = "sha256-n3ELNFvjeDzbamyQIdM9mf/A1sstuhCGzrL9NuXf90Y=";
hash = "sha256-JXaYSHpow7Pzy+ATEinET9ffvPIkOmlylnerZJnMUjY=";
};
buildInputs = [ SDL2 ];

View File

@ -2,13 +2,13 @@
buildGoModule rec {
pname = "kubedb-cli";
version = "0.42.1";
version = "0.44.0";
src = fetchFromGitHub {
owner = "kubedb";
repo = "cli";
rev = "v${version}";
sha256 = "sha256-i+0oQaEHMu3525mJTQyL+Me2DPFSpaIK1xGaPMR2M0s=";
sha256 = "sha256-ppsGSzgJvAHRGs6PGPNgE7nDbK8SPYBPNbAlGwocAZs=";
};
vendorHash = null;

View File

@ -1,16 +1,16 @@
{ buildGoModule, lib, fetchFromGitHub }:
buildGoModule rec {
pname = "tfswitch";
version = "0.13.1308";
version = "1.0.0";
src = fetchFromGitHub {
owner = "warrensbox";
repo = "terraform-switcher";
rev = version;
sha256 = "sha256-EyA7LwfL3vCNzd2wpyUbrUnvkM0/f7/cQp+jcAcGZsg=";
sha256 = "sha256-zUFnJCYh6XM0HiET45ZRa/ESS/n3XdYKkUJuLiDDRAg=";
};
vendorHash = "sha256-NX+vzI/Fa/n9ZQjpESes4fNVAmKlA1rqPwSKsL2GEUY=";
vendorHash = "sha256-DsC9djgt7Er2m2TacUldpJP43jC0IBklPnu41Saf4DY=";
# Disable tests since it requires network access and relies on the
# presence of release.hashicorp.com

View File

@ -10,16 +10,16 @@
buildGoModule rec {
pname = "werf";
version = "1.2.300";
version = "1.2.301";
src = fetchFromGitHub {
owner = "werf";
repo = "werf";
rev = "v${version}";
hash = "sha256-DWSjdgLjVJHlcXa6QV2KzASFQkCpUDSrtYpx/oa+Ff4=";
hash = "sha256-w7gHcHXvCWGzIiq4NvKjha/gs7W8fmNnZPe99lHstIg=";
};
vendorHash = "sha256-o/s3JZe/lO6smCXVs0ZzOTqGt7ikgTsC4Wo2O9fALe8=";
vendorHash = "sha256-pPWX9KtWDgJrQKt9PX1gb0v/DCop8lOxJyAjFZr3RpI=";
proxyVendor = true;

View File

@ -1,9 +1,9 @@
{
"version" = "1.11.61";
"version" = "1.11.63";
"hashes" = {
"desktopSrcHash" = "sha256-1Pq26e2ngcji7wieHNOQAWPFBKGLoeTRAKQ3Aqnn1jw=";
"desktopYarnHash" = "16psxfai8dyckm4xwrg5czv6l4163x2nlqqcdgly6axabllgacj1";
"webSrcHash" = "sha256-RJhZgwTMDLMt+ha0lxPwqiP5sipXIcGZfdPVgCxePH4=";
"webYarnHash" = "1vj3f2bml8jyjz6djzvw1hbrv7148wk8y9hwp323zf8n6y4rnk28";
"desktopSrcHash" = "sha256-wQSFnF3HzERW4iS5leHP2LZKrJkTPW+LUgmj5b0/KZk=";
"desktopYarnHash" = "003d44psrw09dldvp9lfhsnipmcy1fwbicsvmd48mg7n3vnrg0zw";
"webSrcHash" = "sha256-FjYDwXa+7Lx/K0AERn64mPbjp0QFIoVoYMPx/mG4Zrs=";
"webYarnHash" = "0n7z9y3141rx0c5476zw3ccfck0f4b2jwsaxmq2ff7spwyw81zd2";
};
}

View File

@ -1,8 +1,8 @@
{ stdenv, lib, writeScript, qt5, fetchurl, autoPatchelfHook, dpkg, glibc, cpio, xar, undmg, gtk3, pango, libxcb }:
let
pname = "synology-drive-client";
baseUrl = "https://global.download.synology.com/download/Utility/SynologyDriveClient";
version = "3.3.0-15082";
baseUrl = "https://global.synologydownload.com/download/Utility/SynologyDriveClient";
version = "3.4.0-15724";
buildNumber = with lib; last (splitString "-" version);
meta = with lib; {
description = "Desktop application to synchronize files and folders between the computer and the Synology Drive server.";
@ -29,8 +29,8 @@ let
inherit pname version meta passthru;
src = fetchurl {
url = "${baseUrl}/${version}/Ubuntu/Installer/x86_64/synology-drive-client-${buildNumber}.x86_64.deb";
sha256 = "sha256-ha3KRpEIT7w6pUVUwZV011W1F/v/hNq9f3ArfzU0ZGc=";
url = "${baseUrl}/${version}/Ubuntu/Installer/synology-drive-client-${buildNumber}.x86_64.deb";
sha256 = "sha256-Zf6JMghXy8ODbR4MhVSPmD4QDu003MTc7YNfbiRVRoY=";
};
nativeBuildInputs = [ autoPatchelfHook dpkg ];
@ -60,7 +60,7 @@ let
src = fetchurl {
url = "${baseUrl}/${version}/Mac/Installer/synology-drive-client-${buildNumber}.dmg";
sha256 = "sha256-dxmpB31ZjO1uAnAbY13OjVR81CCDLf9vJC20iZaPZJ4=";
sha256 = "sha256-65mZeRYHGl+n9TeTx7bxRrGPjcZiV9UlyfcCZ3GwOhE=";
};
nativeBuildInputs = [ cpio xar undmg ];

View File

@ -1,86 +0,0 @@
{ stdenv
, lib
, fetchurl
, autoPatchelfHook
, wrapGAppsHook
, makeWrapper
, gnome
, libsecret
, git
, curl
, nss
, nspr
, xorg
, libdrm
, alsa-lib
, cups
, mesa
, systemd
, openssl
}:
stdenv.mkDerivation (finalAttrs: {
pname = "github-desktop";
version = "3.3.6";
rcversion = "3";
arch = "amd64";
src = fetchurl {
url = "https://github.com/shiftkey/desktop/releases/download/release-${finalAttrs.version}-linux${finalAttrs.rcversion}/GitHubDesktop-linux-${finalAttrs.arch}-${finalAttrs.version}-linux${finalAttrs.rcversion}.deb";
hash = "sha256-900JhfHN78CuAXptPX2ToTvT9E+g+xRXqmlm34J9l6k=";
};
nativeBuildInputs = [
autoPatchelfHook
(wrapGAppsHook.override { inherit makeWrapper; })
];
buildInputs = [
gnome.gnome-keyring
xorg.libXdamage
xorg.libX11
libsecret
git
curl
nss
nspr
libdrm
alsa-lib
cups
mesa
openssl
];
unpackPhase = ''
mkdir -p $TMP/${finalAttrs.pname} $out/{opt,bin}
cp $src $TMP/${finalAttrs.pname}.deb
ar vx ${finalAttrs.pname}.deb
tar --no-overwrite-dir -xvf data.tar.xz -C $TMP/${finalAttrs.pname}/
'';
installPhase = ''
cp -R $TMP/${finalAttrs.pname}/usr/share $out/
cp -R $TMP/${finalAttrs.pname}/usr/lib/${finalAttrs.pname}/* $out/opt/
ln -sf $out/opt/${finalAttrs.pname} $out/bin/${finalAttrs.pname}
'';
preFixup = ''
gappsWrapperArgs+=(
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland}}"
)
'';
runtimeDependencies = [
(lib.getLib systemd)
];
meta = {
description = "GUI for managing Git and GitHub.";
homepage = "https://desktop.github.com/";
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ dan4ik605743 ];
platforms = lib.platforms.linux;
mainProgram = "github-desktop";
};
})

View File

@ -24,6 +24,10 @@ buildPythonPackage rec {
propagatedBuildInputs = [ more-itertools click ];
postFixup = ''
wrapProgram $out/bin/hyprshade --set HYPRSHADE_SHADERS_DIR $out/share/hyprshade/shaders
'';
meta = with lib; {
homepage = "https://github.com/loqusion/hyprshade";
description = "Hyprland shade configuration tool";

View File

@ -53,7 +53,12 @@ rec {
mkdir -p $out/outputs
cp -r ./* $out/outputs/
runHook postCheckpointInstall
unset postPhases
'';
dontFixup = true;
doInstallCheck = false;
doDist = false;
});
/* Build a derivation based on the checkpoint output generated by

10650
pkgs/by-name/da/davis/composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,78 @@
diff --git a/bin/console b/bin/console
index 8fe9d49..3af9662 100755
--- a/bin/console
+++ b/bin/console
@@ -1,5 +1,8 @@
#!/usr/bin/env php
<?php
+if (getenv('ENV_DIR') !== false) {
+ $_SERVER['APP_RUNTIME_OPTIONS']['dotenv_path'] = getenv('ENV_DIR').'/.env';
+}
use App\Kernel;
use Symfony\Bundle\FrameworkBundle\Console\Application;
@@ -28,7 +31,11 @@ if ($input->hasParameterOption('--no-debug', true)) {
putenv('APP_DEBUG='.$_SERVER['APP_DEBUG'] = $_ENV['APP_DEBUG'] = '0');
}
-(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
+if (getenv('ENV_DIR') !== false) {
+ (new Dotenv())->bootEnv(getenv('ENV_DIR').'/.env');
+} else {
+ (new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
+}
if ($_SERVER['APP_DEBUG']) {
umask(0000);
diff --git a/public/index.php b/public/index.php
index 3f8b90e..c57ec21 100644
--- a/public/index.php
+++ b/public/index.php
@@ -1,5 +1,9 @@
<?php
+if (getenv('ENV_DIR') !== false) {
+ $_SERVER['APP_RUNTIME_OPTIONS']['dotenv_path'] = getenv('ENV_DIR').'/.env';
+}
+
use App\Kernel;
use Symfony\Component\Dotenv\Dotenv;
use Symfony\Component\ErrorHandler\Debug;
@@ -7,7 +11,11 @@ use Symfony\Component\HttpFoundation\Request;
require dirname(__DIR__).'/vendor/autoload.php';
-(new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
+if (getenv('ENV_DIR') !== false) {
+ (new Dotenv())->bootEnv(getenv('ENV_DIR').'/.env');
+} else {
+ (new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
+}
if ($_SERVER['APP_DEBUG']) {
umask(0000);
diff --git a/src/Kernel.php b/src/Kernel.php
index 0f43d2f..8863f2c 100644
--- a/src/Kernel.php
+++ b/src/Kernel.php
@@ -49,4 +49,20 @@ class Kernel extends BaseKernel
(require $path)($routes->withPath($path), $this);
}
}
+
+ public function getCacheDir(): string
+ {
+ if (getenv('CACHE_DIR') !== false) {
+ return getenv('CACHE_DIR') . '/' . $this->getEnvironment();
+ }
+ return parent::getCacheDir();
+ }
+
+ public function getLogDir(): string
+ {
+ if (getenv('LOG_DIR') !== false) {
+ return getenv('LOG_DIR') . '/' . $this->getEnvironment();
+ }
+ return parent::getLogDir();
+ }
}

View File

@ -0,0 +1,41 @@
{ lib, fetchFromGitHub, php, }:
php.buildComposerProject (finalAttrs: {
pname = "davis";
version = "4.4.1";
src = fetchFromGitHub {
owner = "tchapi";
repo = "davis";
rev = "v${finalAttrs.version}";
hash = "sha256-UBekmxKs4dveHh866Ix8UzY2NL6ygb8CKor+V3Cblns=";
};
composerLock = ./composer.lock;
vendorHash = "sha256-WGeNwBRzfUXa7kPIwd7/5dPXDjaBxXirAJcm6lNzueY=";
patches = [
# Symfony loads .env files from the same directory as composer.json
# The .env files contain runtime configuration that shouldn't be baked into deriviation for the package
# This patch adds a few extension points exposing three environment variables:
# RUNTIME_DIRECTORY (where to load .env from), CACHE_DIRECTORY and LOG_DIRECTORY (symfony cache and log rw directories)
# Upstream PR https://github.com/tchapi/davis/issues/154
./davis-data.patch
];
postInstall = ''
# Only include the files needed for runtime in the derivation
mv $out/share/php/${finalAttrs.pname}/{migrations,public,src,config,bin,templates,tests,translations,vendor,symfony.lock,composer.json,composer.lock} $out
# Save the upstream .env file for reference, but rename it so it is not loaded
mv $out/share/php/${finalAttrs.pname}/.env $out/env-upstream
rm -rf "$out/share"
'';
meta = {
changelog = "https://github.com/tchapi/davis/releases/tag/v${finalAttrs.version}";
homepage = "https://github.com/tchapi/davis";
description = "A simple CardDav and CalDav server inspired by Baïkal";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ ramblurr ];
};
})

View File

@ -0,0 +1,15 @@
diff --git a/Makefile b/Makefile
index 75f62aed..91b9571b 100644
--- a/Makefile
+++ b/Makefile
@@ -16,6 +16,10 @@ ifeq ($(shell uname -m),arm64)
export aarch64=1
endif
+ifeq ($(shell uname -m),aarch64)
+ export aarch64=1
+endif
+
.PHONY: clean all profile debug minimap2 samtools
.DEFAULT_GOAL := all

View File

@ -0,0 +1,51 @@
{ lib
, fetchFromGitHub
, python3Packages
, zlib
, curl
, libdeflate
, bash
, coreutils
}:
python3Packages.buildPythonApplication rec {
pname = "flye";
version = "2.9.3";
src = fetchFromGitHub {
owner = "fenderglass";
repo = "flye";
rev = version;
hash = "sha256-IALqtIPmvDYoH4w/tk2WB/P/pAcKXxgnsu9PFp+wIes=";
};
nativeCheckInputs = [ python3Packages.pytestCheckHook ];
propagatedBuildInputs = [ coreutils ];
buildInputs = [
zlib
curl
libdeflate
];
patches = [ ./aarch64-fix.patch ];
postPatch = ''
substituteInPlace flye/polishing/alignment.py \
--replace-fail "/bin/bash" "${lib.getExe bash}"
substituteInPlace flye/tests/test_toy.py \
--replace-fail "find_executable(\"flye" "find_executable(\"$out/bin/flye" \
--replace-fail "[\"flye" "[\"$out/bin/flye"
'';
meta = with lib; {
description = "De novo assembler for single molecule sequencing reads using repeat graphs";
homepage = "https://github.com/fenderglass/Flye";
license = licenses.bsd3;
platforms = platforms.unix;
mainProgram = "flye";
maintainers = with maintainers; [ assistant ];
};
}

View File

@ -0,0 +1,101 @@
{ stdenvNoCC
, lib
, fetchurl
, autoPatchelfHook
, wrapGAppsHook
, makeWrapper
, gnome
, libsecret
, git
, curl
, nss
, nspr
, xorg
, libdrm
, alsa-lib
, cups
, mesa
, systemd
, openssl
}:
let
rcversion = "2";
in
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "github-desktop";
version = "3.3.12";
src =
let
urls = {
"x86_64-linux" = {
url = "https://github.com/shiftkey/desktop/releases/download/release-${finalAttrs.version}-linux${rcversion}/GitHubDesktop-linux-amd64-${finalAttrs.version}-linux${rcversion}.deb";
hash = "sha256-iflKD7NPuZvhxviNW8xmtCOYgdRz1rXiG42ycWCjXiY=";
};
"aarch64-linux" = {
url = "https://github.com/shiftkey/desktop/releases/download/release-${finalAttrs.version}-linux${rcversion}/GitHubDesktop-linux-arm64-${finalAttrs.version}-linux${rcversion}.deb";
hash = "sha256-C9eCvuf/TwXQiYjZ88xSiyaqi8+cppmrLiSYTyQCkmg=";
};
};
in
fetchurl urls."${stdenvNoCC.hostPlatform.system}" or (throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}");
nativeBuildInputs = [
autoPatchelfHook
(wrapGAppsHook.override { inherit makeWrapper; })
];
buildInputs = [
gnome.gnome-keyring
xorg.libXdamage
xorg.libX11
libsecret
git
curl
nss
nspr
libdrm
alsa-lib
cups
mesa
openssl
];
unpackPhase = ''
runHook preUnpack
mkdir -p $TMP/github-desktop $out/{opt,bin}
cp $src $TMP/github-desktop.deb
ar vx github-desktop.deb
tar --no-overwrite-dir -xvf data.tar.xz -C $TMP/github-desktop/
runHook postUnpack
'';
installPhase = ''
runHook preInstall
cp -R $TMP/github-desktop/usr/share $out/
cp -R $TMP/github-desktop/usr/lib/github-desktop/* $out/opt/
ln -sf $out/opt/github-desktop $out/bin/github-desktop
runHook postInstall
'';
preFixup = ''
gappsWrapperArgs+=(
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland}}"
)
'';
runtimeDependencies = [
(lib.getLib systemd)
];
meta = {
description = "GUI for managing Git and GitHub.";
homepage = "https://desktop.github.com/";
license = lib.licenses.mit;
mainProgram = "github-desktop";
maintainers = with lib.maintainers; [ dan4ik605743 ];
platforms = lib.platforms.linux;
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
})

View File

@ -18,6 +18,13 @@ stdenv.mkDerivation (finalAttrs: {
doCheck = true;
doInstallCheck = true;
# Give hello some install checks for testing purpose.
postInstallCheck = ''
stat "''${!outputBin}/bin/${finalAttrs.meta.mainProgram}"
'';
passthru.tests = {
version = testers.testVersion { package = hello; };

View File

@ -14,14 +14,14 @@
let buildToxAV = !stdenv.isAarch32;
in stdenv.mkDerivation rec {
pname = "libtoxcore";
version = "0.2.18";
version = "0.2.19";
src =
# We need the prepared sources tarball.
fetchurl {
url =
"https://github.com/TokTok/c-toxcore/releases/download/v${version}/c-toxcore-${version}.tar.gz";
sha256 = "sha256-8pQFN5mIY1k+KLxqa19W8JZ19s2KKDJre8MbSDbAiUI=";
sha256 = "sha256-i0GPZHDbCFz1mpkVaFYTVWVW3yv0JxSPGBS3sRhihZQ=";
};
cmakeFlags = [
@ -51,11 +51,11 @@ in stdenv.mkDerivation rec {
# We might be getting the wrong pkg-config file anyway:
# https://github.com/TokTok/c-toxcore/issues/2334
meta = with lib; {
meta = {
description = "P2P FOSS instant messaging application aimed to replace Skype";
homepage = "https://tox.chat";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ peterhoeg ehmry ];
platforms = platforms.all;
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ peterhoeg ehmry ];
platforms = lib.platforms.all;
};
}

View File

@ -0,0 +1,37 @@
{ lib
, stdenvNoCC
, fetchFromGitHub
, gitUpdater
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "nerdfetch";
version = "8.1.1";
src = fetchFromGitHub {
owner = "ThatOneCalculator";
repo = "NerdFetch";
rev = "v${finalAttrs.version}";
hash = "sha256-mSRS7MUgaa14mgPYkbC4O1/gXxbyDKOiVCRgoh8He/c=";
};
dontUnpack = true;
dontConfigure = true;
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
cp $src/nerdfetch $out/bin
'';
passthru.updateScript = gitUpdater {
rev-prefix = "v";
};
meta = with lib;{
description = "A POSIX *nix (Linux, macOS, Android, *BSD, etc) fetch script using Nerdfonts";
homepage = "https://github.com/ThatOneCalculator/NerdFetch";
maintainers = with maintainers; [ ByteSudoer ];
license = licenses.mit;
mainProgram = "nerdfetch";
platforms = platforms.unix;
};
})

View File

@ -7,11 +7,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "quarkus-cli";
version = "3.8.3";
version = "3.9.1";
src = fetchurl {
url = "https://github.com/quarkusio/quarkus/releases/download/${finalAttrs.version}/quarkus-cli-${finalAttrs.version}.tar.gz";
hash = "sha256-+HUVnd21q2xln58UR1QS0UFCjlY0sbf79ZkvWbRCH7Q=";
hash = "sha256-qWlg6ZferLAy3TOyFe7Dhy102GzISGpB08Dwy8JFxSk=";
};
nativeBuildInputs = [ makeWrapper ];

View File

@ -11,13 +11,13 @@
stdenv.mkDerivation rec {
pname = "raft-cowsql";
version = "0.22.0";
version = "0.22.1";
src = fetchFromGitHub {
owner = "cowsql";
repo = "raft";
rev = "refs/tags/v${version}";
hash = "sha256-kd0PD45+CenlfRMp5O48uELyZ2gEtasCe7xNEzsKU+M=";
hash = "sha256-aGw/ATu8Xdjfqa0qWg8Sld9PKCmQsMtZhuNBwagER7M=";
};
nativeBuildInputs = [ autoreconfHook pkg-config ];

View File

@ -1,76 +0,0 @@
{
lib,
stdenv,
fetchFromGitLab,
cargo,
desktop-file-utils,
meson,
ninja,
pkg-config,
rustPlatform,
rustc,
wrapGAppsHook4,
cairo,
gdk-pixbuf,
glib,
gtk4,
libadwaita,
pango,
darwin,
}:
stdenv.mkDerivation rec {
pname = "railway-travel";
version = "2.4.0";
src = fetchFromGitLab {
owner = "schmiddi-on-mobile";
repo = "railway";
rev = version;
hash = "sha256-2iLxErEP0OG+BcG7fvJBzNjh95EkNoC3NC7rKxPLhYk=";
};
cargoDeps = rustPlatform.fetchCargoTarball {
inherit src;
name = "${pname}-${version}";
hash = "sha256-yalFC7Pw9rq1ylLwoxLi4joTyjQsZJ/ZC61GhTNc49w=";
};
nativeBuildInputs = [
desktop-file-utils
cargo
meson
ninja
pkg-config
rustPlatform.cargoSetupHook
rustc
wrapGAppsHook4
];
buildInputs =
[
cairo
gdk-pixbuf
glib
gtk4
libadwaita
pango
]
++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.Foundation
darwin.apple_sdk.frameworks.Security
];
env.NIX_CFLAGS_COMPILE = toString (
lib.optionals stdenv.cc.isClang [ "-Wno-error=incompatible-function-pointer-types" ]
);
meta = with lib; {
description = "Find all your travel information";
homepage = "https://gitlab.com/schmiddi-on-mobile/railway";
changelog = "https://gitlab.com/schmiddi-on-mobile/railway/-/blob/${src.rev}/CHANGELOG.md";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ lilacious ];
mainProgram = "diebahn";
platforms = platforms.all;
};
}

View File

@ -4,13 +4,13 @@
stdenv.mkDerivation rec {
pname = "toxic";
version = "0.11.3";
version = "0.15.1";
src = fetchFromGitHub {
owner = "Tox";
owner = "TokTok";
repo = "toxic";
rev = "v${version}";
sha256 = "sha256-BabRY9iu5ccEXo5POrWkWaIWAeQU4MVlMK8I+Iju6aQ=";
sha256 = "sha256-+nOjlQED2pbYwGV6IGeKK1pymBSrDVWCWKjZ42vib7E=";
};
makeFlags = [ "PREFIX=$(out)"];
@ -23,11 +23,12 @@ stdenv.mkDerivation rec {
];
nativeBuildInputs = [ pkg-config libconfig ];
meta = with lib; src.meta // {
meta = src.meta // {
description = "Reference CLI for Tox";
mainProgram = "toxic";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ ehmry ];
platforms = platforms.linux;
homepage = "https://github.com/TokTok/toxic";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ ehmry ];
platforms = lib.platforms.linux;
};
}

View File

@ -7,13 +7,13 @@
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "vcpkg";
version = "2024.03.19";
version = "2024.03.25";
src = fetchFromGitHub {
owner = "microsoft";
repo = "vcpkg";
rev = finalAttrs.version;
hash = "sha256-861r4XsXCyxUVDlSrekZ+g17td+idUN8qJmmTZNDzow=";
hash = "sha256-HMK3sebq/9TuxHQ75+5UIMvN09cPWmq7TFBBwRY4X7o=";
};
installPhase = let

View File

@ -0,0 +1,33 @@
{ lib
, stdenv
, fetchFromGitHub
}:
stdenv.mkDerivation rec {
pname = "whatfiles";
version = "1.0";
src = fetchFromGitHub {
owner = "spieglt";
repo = "whatfiles";
rev = "v${version}";
hash = "sha256-5Ju9g7/B9uxLkQzV/MN3vBkjve4EAMseO6K4HTAoS/o=";
};
installPhase = ''
runHook preInstall
install -Dm755 bin/whatfiles $out/bin/whatfiles
runHook postInstall
'';
meta = with lib; {
description = "Log what files are accessed by any Linux process";
homepage = "https://github.com/spieglt/whatfiles";
license = licenses.gpl3Only;
maintainers = with maintainers; [ azahi ];
platforms = platforms.linux;
mainProgram = "whatfiles";
};
}

View File

@ -5,8 +5,11 @@ stdenvNoCC.mkDerivation rec {
version = "unstable-2016-08-01"; # date in the zip file, actual creation date unknown
src = fetchzip {
url = "https://fontlibrary.org/assets/downloads/u001/3ea00b3c0c8fa6ce4373e5766fafd651/u001.zip";
sha256 = "sha256-7H32pfr0g68XP5B48VUY99e6fbd7rhH6fEnCKNXWEkU=";
urls = [
"https://fontlibrary.org/assets/downloads/u001/3ea00b3c0c8fa6ce4373e5766fafd651/u001.zip"
"https://web.archive.org/web/20220830085803/https://fontlibrary.org/assets/downloads/u001/3ea00b3c0c8fa6ce4373e5766fafd651/u001.zip"
];
hash = "sha256-7H32pfr0g68XP5B48VUY99e6fbd7rhH6fEnCKNXWEkU=";
stripRoot = false;
};

View File

@ -3,12 +3,12 @@
let
generator = pkgsBuildBuild.buildGoModule rec {
pname = "v2ray-domain-list-community";
version = "20240316051411";
version = "20240324094850";
src = fetchFromGitHub {
owner = "v2fly";
repo = "domain-list-community";
rev = version;
hash = "sha256-wao//QAdEqxkyKSVgC2eJqtQlPQ7IXG88atUSjQIGcI=";
hash = "sha256-Fdb0Bk0dk0SkBmUdeBjMH8/++fDvw1GtiKCYXdVAfCc=";
};
vendorHash = "sha256-azvMUi8eLNoNofRa2X4SKTTiMd6aOyO6H/rOiKjkpIY=";
meta = with lib; {

View File

@ -0,0 +1,17 @@
diff --git a/scripts/create_theme.py b/scripts/create_theme.py
index 074dc43..7e7a8eb 100644
--- a/scripts/create_theme.py
+++ b/scripts/create_theme.py
@@ -34,7 +34,11 @@ def create_theme(types: List[str], accents: List[str], dest: str, link: bool = F
os.chdir(work_dir)
subprocess.call("./build.sh", shell=True) # Rebuild all scss
subprocess.call(install_cmd, shell=True) # Install the theme globally for you
- subprocess.call("git reset --hard HEAD", shell=True) # reset colloid repo to original state
+ # subprocess.call("git reset --hard HEAD", shell=True) # reset colloid repo to original state
+ # recreate git reset
+ os.chdir(repo_dir)
+ shutil.rmtree("colloid")
+ shutil.copytree("colloid-base", "colloid")
try:
# Rename colloid generated files as per catppuccin

View File

@ -40,6 +40,10 @@ stdenvNoCC.mkDerivation rec {
nativeBuildInputs = [ gtk3 sassc ];
patches = [
./colloid-src-git-reset.patch
];
buildInputs = [
gnome-themes-extra
(python3.withPackages (ps: [ ps.catppuccin ]))
@ -54,7 +58,7 @@ stdenvNoCC.mkDerivation rec {
'';
postPatch = ''
patchShebangs --build colloid/install.sh
patchShebangs --build colloid/install.sh colloid/build.sh
'';
dontConfigure = true;
@ -63,6 +67,7 @@ stdenvNoCC.mkDerivation rec {
installPhase = ''
runHook preInstall
cp -r colloid colloid-base
mkdir -p $out/share/themes
export HOME=$(mktemp -d)

View File

@ -3,12 +3,12 @@
stdenv.mkDerivation {
pname = "cakelisp";
# using unstable as it's the only version that builds against gcc-13
version = "0.3.0-unstable-2024-02-21";
version = "0.3.0-unstable-2024-03-21";
src = fetchgit {
url = "https://macoy.me/code/macoy/cakelisp";
rev = "75ce620b265bf83c6952c0093df2b9d4f7f32a54";
hash = "sha256-X+tWq2QQogy4d042pcVuldc80jcClYtV09Jr91rHJl4=";
rev = "6bde4b8002e4825116f3b18291a012bf1729f497";
hash = "sha256-jpwVHiDRVa6QoYxsasmiV1IdbBqZj0tU5EBruOHfzYg=";
};
buildInputs = [ gcc ];

View File

@ -55,7 +55,7 @@ let
in rec {
# Maint version
perl536 = callPackage ./intepreter.nix {
perl536 = callPackage ./interpreter.nix {
self = perl536;
version = "5.36.3";
sha256 = "sha256-8qGtiBFjkaF2Ji3ULfxS7yKvtA9MDpgQ8V1WHm8ccmo=";
@ -63,7 +63,7 @@ in rec {
};
# Maint version
perl538 = callPackage ./intepreter.nix {
perl538 = callPackage ./interpreter.nix {
self = perl538;
version = "5.38.2";
sha256 = "sha256-oKMVNEUet7g8fWWUpJdUOlTUiLyQygD140diV39AZV4=";

View File

@ -18,13 +18,13 @@
stdenv.mkDerivation {
pname = "libfive";
version = "0-unstable-2024-02-14";
version = "0-unstable-2024-03-28";
src = fetchFromGitHub {
owner = "libfive";
repo = "libfive";
rev = "7af5f43684a8a497ac8610d39f7fca935364a9b9";
hash = "sha256-GQzsHKeKsCWKOVfBrTuUFq2XasPxhsN+19stWY0WtVc=";
rev = "4c59b11667bbe8be9802f59697fa64bbfe1ea82d";
hash = "sha256-scYSprozfC537vAXhMfWswyS3xivpoURWPhplH7yHIg=";
};
nativeBuildInputs = [ wrapQtAppsHook cmake ninja pkg-config python.pkgs.pythonImportsCheckHook ];

View File

@ -7,7 +7,7 @@
buildPythonPackage rec {
pname = "elementpath";
version = "4.3.0";
version = "4.4.0";
pyproject = true;
disabled = pythonOlder "3.7";
@ -16,7 +16,7 @@ buildPythonPackage rec {
owner = "sissaschool";
repo = "elementpath";
rev = "refs/tags/v${version}";
hash = "sha256-DE8XAZwYzbYaTJoBNqHR0x4Wigmke+/zgj562X391qM=";
hash = "sha256-n1Ps0CybeLeDR5E4UnqmSkbFe0SXyplomEGDchAweSY=";
};
nativeBuildInputs = [

View File

@ -8,7 +8,7 @@
buildPythonPackage rec {
pname = "frozendict";
version = "2.4.0";
version = "2.4.1";
format = "setuptools";
disabled = pythonOlder "3.6";
@ -17,7 +17,7 @@ buildPythonPackage rec {
owner = "Marco-Sulla";
repo = "python-frozendict";
rev = "refs/tags/v${version}";
hash = "sha256-mC5udKWez1s9JiVthtzCwEUPLheJpxRmcL3KdRiYP18=";
hash = "sha256-cPDuJ6AzMxOmJztSf6IZ04acJhjJCphQSl0DaN9cChI=";
};
# build C version if it exists

View File

@ -13,21 +13,21 @@
buildPythonPackage rec {
pname = "google-cloud-securitycenter";
version = "1.29.0";
version = "1.30.0";
pyproject = true;
disabled = pythonOlder "3.7";
src = fetchPypi {
inherit pname version;
hash = "sha256-4c7tuLxO3+B8ZojVpSKWcl35doqoqHrofY6n80t9UrY=";
hash = "sha256-Tq+Uicfk1SqvisYEdBfREngICvWP8NyFJy4hJp9qD8Y=";
};
nativeBuildInputs = [
build-system = [
setuptools
];
propagatedBuildInputs = [
dependencies = [
grpc-google-iam-v1
google-api-core
proto-plus

View File

@ -17,14 +17,14 @@
buildPythonPackage rec {
pname = "imbalanced-learn";
version = "0.12.0";
version = "0.12.2";
pyproject = true;
disabled = pythonOlder "3.8";
src = fetchPypi {
inherit pname version;
hash = "sha256-uczZqqMChpkHnUOm1Nn8nQOfVTdnM7Mfh8fZsSXcwWU=";
hash = "sha256-qAxWztywcSTyZr5i06XSq1tXeZCac0P98bmTR5Zi9sE=";
};
nativeBuildInputs = [

View File

@ -10,7 +10,7 @@
buildPythonPackage rec {
pname = "plexapi";
version = "4.15.10";
version = "4.15.11";
pyproject = true;
disabled = pythonOlder "3.8";
@ -19,14 +19,14 @@ buildPythonPackage rec {
owner = "pkkid";
repo = "python-plexapi";
rev = "refs/tags/${version}";
hash = "sha256-3qvAf3oray3Fm3No6ixv/D1mY4lipt5pixgpyXNCRoc=";
hash = "sha256-OPhmw7nCe0n7VLekXeB5PiLdBk2DPmLoQ1nZiGEwqis=";
};
nativeBuildInputs = [
build-system = [
setuptools
];
propagatedBuildInputs = [
dependencies = [
requests
tqdm
websocket-client

View File

@ -17,19 +17,19 @@
buildPythonPackage rec {
pname = "pytest-mypy-plugins";
version = "3.1.1";
version = "3.1.2";
pyproject = true;
disabled = pythonOlder "3.7";
disabled = pythonOlder "3.8";
src = fetchFromGitHub {
owner = "typeddjango";
repo = "pytest-mypy-plugins";
rev = "refs/tags/${version}";
hash = "sha256-kZbTCdZM+809yFkKWMpeyBOq6hcqcYk7rEYqee9hZwk=";
hash = "sha256-yme1g9Kj5guao0Lf8mbkNJRw6ipS2Wd4Io1cSlEBAGo=";
};
nativeBuildInputs = [
build-system = [
setuptools
];
@ -37,7 +37,7 @@ buildPythonPackage rec {
pytest
];
propagatedBuildInputs = [
dependencies = [
decorator
jinja2
jsonschema

View File

@ -10,7 +10,7 @@
buildPythonPackage rec {
pname = "testcontainers";
version = "4.2.0";
version = "4.3.0";
disabled = pythonOlder "3.9";
pyproject = true;
@ -19,7 +19,7 @@ buildPythonPackage rec {
owner = "testcontainers";
repo = "testcontainers-python";
rev = "refs/tags/testcontainers-v${version}";
hash = "sha256-vHCrfeL3fPLZQgH7nlugIlADQaBbUQKsTBFhhq7kYWQ=";
hash = "sha256-eCoGMfd4gNuPY1rRRK5LH2BI236ZiZ0igTZDALuHevk=";
};
postPatch = ''

View File

@ -33,7 +33,7 @@ stdenv.mkDerivation {
# of the nix store -- but ekam builds capnp locally and links against it,
# so that causes the build to fail. So, we turn this off.
#
# See: https://nixos.wiki/wiki/Development_environment_with_nix-shell#Troubleshooting
# See: https://wiki.nixos.org/wiki/Development_environment_with_nix-shell#Troubleshooting
preBuild = ''
unset NIX_ENFORCE_PURITY
'';

View File

@ -6,15 +6,15 @@
buildGoModule rec {
pname = "conftest";
version = "0.50.0";
version = "0.51.0";
src = fetchFromGitHub {
owner = "open-policy-agent";
repo = "conftest";
rev = "refs/tags/v${version}";
hash = "sha256-DqZl16CQR88n5etJvX+5wxpOQsyWq/UWjJou23pjpWk=";
hash = "sha256-1jMVb1Hip7ljmt4WtFg3Qa2/rse2sjISTe3SUS5UCTo=";
};
vendorHash = "sha256-9afq6ccgiaeZqyM3Le1NQ0ADB/wmBW+qdT+uVtbARC8=";
vendorHash = "sha256-Yw5p2mTTkYvRjeuF9owirohyClSS3j1gKVg8Ma2NIa8=";
ldflags = [
"-s"

View File

@ -16,7 +16,7 @@ buildGoModule rec {
subPackages = [ "cmd/migrate" ];
tags = [ "postgres" "mysql" "redshift" "cassandra" "spanner" "cockroachdb" "clickhouse" "mongodb" "sqlserver" "firebird" "neo4j" "pgx" ];
tags = [ "cassandra" "clickhouse" "cockroachdb" "crate" "firebird" "mongodb" "multistmt" "mysql" "neo4j" "pgx" "postgres" "ql" "redshift" "rqlite" "shell" "snowflake" "spanner" "sqlite3" "sqlserver" "stub" "testing" "yugabytedb" ];
meta = with lib; {
homepage = "https://github.com/golang-migrate/migrate";

View File

@ -42,7 +42,7 @@ let
else "${k}=${builtins.toJSON v}");
in
stdenv.mkDerivation rec {
pname = "godot";
pname = "godot4";
version = "4.2.1-stable";
commitHash = "b09f793f564a6c95dc76acc654b390e68441bd01";

View File

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "golangci-lint";
version = "1.57.1";
version = "1.57.2";
src = fetchFromGitHub {
owner = "golangci";
repo = "golangci-lint";
rev = "v${version}";
hash = "sha256-CDk0lmspteeewLzvixjIJr16M8Ko8uSgdnJZfJ1SqOA=";
hash = "sha256-d3U56fRIyntj/uKTOHuKFvOZqh+6VtzYrbKDjcKzhbI=";
};
vendorHash = "sha256-lBRVnsttq6M9gyZfV4I/EOwsp6yGARCSYYefRvZvHEA=";
vendorHash = "sha256-3gS/F1jcjegtkLfmPcBzYqDA4KmwABkKpPAhTxqguYw=";
subPackages = [ "cmd/golangci-lint" ];

View File

@ -5,16 +5,16 @@
buildGoModule rec {
pname = "act";
version = "0.2.60";
version = "0.2.61";
src = fetchFromGitHub {
owner = "nektos";
repo = pname;
rev = "refs/tags/v${version}";
hash = "sha256-FFSnxxqKAFYPuX4NJahiBS65Goj6se2U5WdPiKpNXDo=";
hash = "sha256-X2Um6z3BXhshNGTwih/mvXigCplzUr+mVOn0SZ7RESA=";
};
vendorHash = "sha256-FLomnHVhpvbM+O3OGwjXfrtTVbegnzry8Sl+4a3uw08=";
vendorHash = "sha256-HtCHAMcTFQS8YWjWt9LEHkhZBE8XDF4YOcGBFv0e5l0=";
doCheck = false;

View File

@ -8,16 +8,16 @@
rustPlatform.buildRustPackage rec {
pname = "oxlint";
version = "0.2.14";
version = "0.2.15";
src = fetchFromGitHub {
owner = "web-infra-dev";
repo = "oxc";
rev = "oxlint_v${version}";
hash = "sha256-nIY80YWZpDJSFkPLMBjXyk2SYx2tnVhFrxiBrYFu/e4=";
hash = "sha256-hEN9TLIeAfMGO/PL5OcT7+H0dmoCtH+dcIEafpQ45UU=";
};
cargoHash = "sha256-BRrF0Ad6tbN+xajzPhDHP7ZJPbruRrcdwjZBFukMKfs=";
cargoHash = "sha256-uChoDlU0tb52pBBEqmmwhCS83pykFRpXRFSuUGquHEQ=";
buildInputs = [
rust-jemalloc-sys

View File

@ -5,7 +5,7 @@
buildGoModule rec {
pname = "templ";
version = "0.2.646";
version = "0.2.648";
subPackages = [ "cmd/templ" ];
@ -21,7 +21,7 @@ buildGoModule rec {
owner = "a-h";
repo = "templ";
rev = "refs/tags/v${version}";
hash = "sha256-ocuDWdIHL4Ub1ybWBScg4ysTRQdvCxlod0TNuJFDA4o=";
hash = "sha256-9Co3yvfy8X69PIffPg2lDjVCVTjDhiFnSsJd4MQ6cf4=";
};
vendorHash = "sha256-Upd5Wq4ajsyOMDiAWS2g2iNO1sm1XJc43AFQLIo5eDM=";

View File

@ -1,13 +0,0 @@
diff --git a/Cargo.lock b/Cargo.lock
index fcbe50c..27d4c30 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1390,7 +1390,7 @@ dependencies = [
[[package]]
name = "tokio-console"
-version = "0.1.8"
+version = "0.1.9"
dependencies = [
"atty",
"clap",

View File

@ -1,25 +1,27 @@
{ lib
, fetchFromGitHub
, installShellFiles
, rustPlatform
, protobuf
}:
rustPlatform.buildRustPackage rec {
pname = "tokio-console";
version = "0.1.9";
version = "0.1.10";
src = fetchFromGitHub {
owner = "tokio-rs";
repo = "console";
rev = "tokio-console-v${version}";
hash = "sha256-zISgEhUmAfHErq4AelbnSwtKjtxYH//pbLUAlPKxQYk=";
hash = "sha256-sjfdxOeaNANYJuJMjZ/tCGc2mWM+98d8yPHAVSl4cF4=";
};
cargoHash = "sha256-qK8U6BZN7sdBP8CbzsDeewsGulNA/KFVS9vscBxysRg=";
cargoHash = "sha256-86KQpRpYSCQs6SUeG0HV26b58x/QUyovoL+5fg8JCOI=";
nativeBuildInputs = [ protobuf ];
cargoPatches = [ ./cargo-lock.patch ];
nativeBuildInputs = [
installShellFiles
protobuf
];
# uses currently unstable tokio features
RUSTFLAGS = "--cfg tokio_unstable";
@ -31,6 +33,13 @@ rustPlatform.buildRustPackage rec {
"--skip config::tests::toml_example_changed"
];
postInstall = ''
installShellCompletion --cmd tokio-console \
--bash <($out/bin/tokio-console --log-dir $(mktemp -d) gen-completion bash) \
--fish <($out/bin/tokio-console --log-dir $(mktemp -d) gen-completion fish) \
--zsh <($out/bin/tokio-console --log-dir $(mktemp -d) gen-completion zsh)
'';
meta = with lib; {
description = "A debugger for asynchronous Rust code";
homepage = "https://github.com/tokio-rs/console";

View File

@ -100,7 +100,7 @@ in rec {
) (builtins.attrNames pkgConfig);
# build-time JSON generation to avoid IFD
# see https://nixos.wiki/wiki/Import_From_Derivation
# see https://wiki.nixos.org/wiki/Import_From_Derivation
workspaceJSON = pkgs.runCommand "${name}-workspace-package.json"
{
nativeBuildInputs = [ pkgs.jq ];

View File

@ -12,7 +12,7 @@
}:
stdenvNoCC.mkDerivation rec {
version = "1.0.35";
version = "1.0.36";
pname = "bun";
src = passthru.sources.${stdenvNoCC.hostPlatform.system} or (throw "Unsupported system: ${stdenvNoCC.hostPlatform.system}");
@ -51,19 +51,19 @@ stdenvNoCC.mkDerivation rec {
sources = {
"aarch64-darwin" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-darwin-aarch64.zip";
hash = "sha256-QuCd2l5PNz2pJzKrzy5Zvd9MbAsTu9HzdBulyBvSUok=";
hash = "sha256-NYsCwYdYL8cw5uPaViCA+fcaP1znNzvRCJuhnFixx84=";
};
"aarch64-linux" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-linux-aarch64.zip";
hash = "sha256-rxXkCViPgJiSNhlaNQMGcurONhXXK7shrLD0Zk1pLmw=";
hash = "sha256-ztRE4MxrAkSvORTGU5veDj5qhchYbsY4BxP6duZLeoQ=";
};
"x86_64-darwin" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-darwin-x64.zip";
hash = "sha256-eS9s6acf1AxzFkeb/RskuJ1pXdiv52WpP7cEKTEXPEo=";
hash = "sha256-p8YqXW1iShvTX2bB0UrD9yh5PMpcaoiUJ5ZfCrEZmsI=";
};
"x86_64-linux" = fetchurl {
url = "https://github.com/oven-sh/bun/releases/download/bun-v${version}/bun-linux-x64.zip";
hash = "sha256-I7fqIhMs/2N9pcxJf5ED4p0kq+rQPnfYGOciAd+6mXU=";
hash = "sha256-+AR0EYOVOgvElDzQjCtlCg5oZFBtLfdEmrL1jFWDAfQ=";
};
};
updateScript = writeShellScript "update-bun" ''

View File

@ -3,22 +3,22 @@
let
pname = "anki-bin";
# Update hashes for both Linux and Darwin!
version = "23.12.1";
version = "24.04";
sources = {
linux = fetchurl {
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-linux-qt6.tar.zst";
sha256 = "sha256-bFtAUqSoFS8CWESiepWXywndkijATbWp6CJdqlQecuk=";
sha256 = "sha256-mIQ448ecBDrMo3qspXVOBJM/0LebJ9lA1JIwz70Uqhc=";
};
# For some reason anki distributes completely separate dmg-files for the aarch64 version and the x86_64 version
darwin-x86_64 = fetchurl {
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-intel-qt6.dmg";
sha256 = "sha256-z48REB14p7rb50ty9u/26wx0sY4QZb4pj6wOXsSBCdg=";
sha256 = "sha256-ab8cc+QMt3ZJp1NZmAwz2VNZwWQK0DBPKnz2fGmC7Fs=";
};
darwin-aarch64 = fetchurl {
url = "https://github.com/ankitects/anki/releases/download/${version}/anki-${version}-mac-apple-qt6.dmg";
sha256 = "sha256-bdaCqSjje86wmVKIFZqzuFaEZ7SWQr7CAS/Hm1CpOMg=";
sha256 = "sha256-bRpPVOXpDRq+EXwW1yWiAgzkcdLhLnMrHo/t9Jgzth0=";
};
};
@ -60,7 +60,7 @@ let
'';
# Dependencies of anki
targetPkgs = pkgs: (with pkgs; [ xorg.libxkbfile xcb-util-cursor-HEAD krb5 ]);
targetPkgs = pkgs: (with pkgs; [ xorg.libxkbfile xcb-util-cursor-HEAD krb5 zstd ]);
runScript = writeShellScript "anki-wrapper.sh" ''
exec ${unpacked}/bin/anki ${ lib.strings.escapeShellArgs commandLineArgs } "$@"

View File

@ -29,13 +29,13 @@
stdenv.mkDerivation rec {
pname = "widelands";
version = "1.1";
version = "1.2";
src = fetchFromGitHub {
owner = "widelands";
repo = "widelands";
rev = "v${version}";
sha256 = "sha256-fe1fey34b6T1+kqMa22STROu7dagQJtg24nW2jhVix8=";
sha256 = "sha256-V7eappIMEQMNbf9EGQhv71Fwz0wH679ifi/qAHWwMNU=";
};
postPatch = ''
@ -45,6 +45,7 @@ stdenv.mkDerivation rec {
cmakeFlags = [
"-Wno-dev" # dev warnings are only needed for upstream development
"-DCMAKE_BUILD_TYPE=Release"
"-DWL_INSTALL_BASEDIR=${placeholder "out"}/share/widelands" # for COPYING, Changelog, etc.
"-DWL_INSTALL_DATADIR=${placeholder "out"}/share/widelands" # for game data
"-DWL_INSTALL_BINDIR=${placeholder "out"}/bin"
@ -92,7 +93,7 @@ stdenv.mkDerivation rec {
Settlers II". It has a single player campaign mode, as well as a networked
multiplayer mode.
'';
changelog = "https://github.com/widelands/widelands/releases/tag/v1.1";
changelog = "https://github.com/widelands/widelands/releases/tag/v${version}";
mainProgram = "widelands";
license = licenses.gpl2Plus;
maintainers = with maintainers; [ raskin jcumming ];

View File

@ -125,9 +125,9 @@
"hash": "sha256-2dz0Ncoy1J8kG5EWyzWa2TrQ8KsgZ/bkG5VaeDTY4bo="
},
"kwin": {
"version": "6.0.3",
"url": "mirror://kde/stable/plasma/6.0.3/kwin-6.0.3.tar.xz",
"hash": "sha256-D0bnds1Qg3TFUsClpVpFvyj5zMyIcAiQCYVKETTXKnk="
"version": "6.0.3.1",
"url": "mirror://kde/stable/plasma/6.0.3/kwin-6.0.3.1.tar.xz",
"hash": "sha256-8VEIqZMga5YqPFg1uYigtJIsCpvJq4D69rNqM00yGzM="
},
"kwrited": {
"version": "6.0.3",
@ -215,9 +215,9 @@
"hash": "sha256-W+t3hNEk2eoQjwCAQ6k8g3wHVz9byK/PkhbutGRK/Yo="
},
"plasma-mobile": {
"version": "6.0.3",
"url": "mirror://kde/stable/plasma/6.0.3/plasma-mobile-6.0.3.tar.xz",
"hash": "sha256-oHgh272xMZYdoTidGyR2xsdASVTU50mAw9+nUyF5+Xo="
"version": "6.0.3.1",
"url": "mirror://kde/stable/plasma/6.0.3/plasma-mobile-6.0.3.1.tar.xz",
"hash": "sha256-pIkzv+U5s3JOxKP4JwW54SF4MwhgNA1nd4riCmU224M="
},
"plasma-nano": {
"version": "6.0.3",

View File

@ -2,22 +2,6 @@ diff --git a/board/raspberrypi/rpi/rpi.env b/board/raspberrypi/rpi/rpi.env
index 30228285ed..0327ef74fa 100644
--- a/board/raspberrypi/rpi/rpi.env
+++ b/board/raspberrypi/rpi/rpi.env
@@ -55,11 +55,11 @@ dfu_alt_info+=zImage fat 0 1
* more than ~700M away from the start of the kernel image but this number can
* be larger OR smaller depending on e.g. the 'vmalloc=xxxM' command line
* parameter given to the kernel. So reserving memory from low to high
- * satisfies this constraint again. Reserving 1M at 0x02600000-0x02700000 for
- * the DTB leaves rest of the free RAM to the initrd starting at 0x02700000.
+ * satisfies this constraint again. Reserving 1M at 0x04700000-0x04800000 for
+ * the DTB leaves rest of the free RAM to the initrd starting at 0x04800000.
* Even with the smallest possible CPU-GPU memory split of the CPU getting
- * only 64M, the remaining 25M starting at 0x02700000 should allow quite
- * large initrds before they start colliding with U-Boot.
+ * only 64M, the remaining 8M starting at 0x04800000 should allow reasonably
+ * sized initrds before they start colliding with U-Boot.
*/
#ifdef CONFIG_ARM64
fdt_high=ffffffffffffffff
@@ -69,9 +69,9 @@ fdt_high=ffffffff
initrd_high=ffffffff
#endif
@ -26,10 +10,10 @@ index 30228285ed..0327ef74fa 100644
-pxefile_addr_r=0x02500000
-fdt_addr_r=0x02600000
-ramdisk_addr_r=0x02700000
+scriptaddr=0x04500000
+pxefile_addr_r=0x04600000
+fdt_addr_r=0x04700000
+ramdisk_addr_r=0x04800000
+scriptaddr=0x05500000
+pxefile_addr_r=0x05600000
+fdt_addr_r=0x05700000
+ramdisk_addr_r=0x05800000
boot_targets=mmc usb pxe dhcp

View File

@ -1,904 +1,77 @@
{ stdenv, lib, stdenvNoCC
, makeScopeWithSplicing', generateSplicesForMkScope
, buildPackages
, bsdSetupHook, makeSetupHook
, fetchgit, fetchzip, coreutils, groff, mandoc, byacc, flex, which, m4, gawk, substituteAll, runtimeShell
, zlib, expat, libmd
, runCommand, writeShellScript, writeText, symlinkJoin
, fetchgit, fetchzip
}:
let
inherit (buildPackages.buildPackages) rsync;
versions = builtins.fromJSON (builtins.readFile ./versions.json);
version = "13.1.0";
# `BuildPackages.fetchgit` avoids some probably splicing-caused infinite
# recursion.
freebsdSrc = buildPackages.fetchgit {
url = "https://git.FreeBSD.org/src.git";
rev = "release/${version}";
sha256 = "14nhk0kls83xfb64d5xy14vpi6k8laswjycjg80indq9pkcr2rlv";
};
freebsdSetupHook = makeSetupHook {
name = "freebsd-setup-hook";
} ./setup-hook.sh;
mkBsdArch = stdenv': {
x86_64 = "amd64";
aarch64 = "arm64";
i486 = "i386";
i586 = "i386";
i686 = "i386";
}.${stdenv'.hostPlatform.parsed.cpu.name}
or stdenv'.hostPlatform.parsed.cpu.name;
install-wrapper = ''
set -eu
args=()
declare -i path_args=0
while (( $# )); do
if (( $# == 1 )); then
if (( path_args > 1)) || [[ "$1" = */ ]]; then
mkdir -p "$1"
else
mkdir -p "$(dirname "$1")"
fi
fi
case $1 in
-C) ;;
-o | -g) shift ;;
-s) ;;
-m | -l)
# handle next arg so not counted as path arg
args+=("$1" "$2")
shift
;;
-*) args+=("$1") ;;
*)
path_args+=1
args+=("$1")
;;
esac
shift
done
'';
branch = "release/${version}";
in makeScopeWithSplicing' {
otherSplices = generateSplicesForMkScope "freebsd";
f = (self: let
inherit (self) mkDerivation;
in {
inherit freebsdSrc;
f = (self: lib.packagesFromDirectoryRecursive {
callPackage = self.callPackage;
directory = ./pkgs;
} // {
sourceData = versions.${branch};
ports = fetchzip {
url = "https://cgit.freebsd.org/ports/snapshot/ports-dde3b2b456c3a4bdd217d0bf3684231cc3724a0a.tar.gz";
sha256 = "BpHqJfnGOeTE7tkFJBx0Wk8ryalmf4KNTit/Coh026E=";
};
# Why do we have splicing and yet do `nativeBuildInputs = with self; ...`?
# See note in ../netbsd/default.nix.
compatIfNeeded = lib.optional (!stdenvNoCC.hostPlatform.isFreeBSD) self.compat;
mkDerivation = lib.makeOverridable (attrs: let
stdenv' = if attrs.noCC or false then stdenvNoCC else stdenv;
in stdenv'.mkDerivation (rec {
pname = "${attrs.pname or (baseNameOf attrs.path)}-freebsd";
inherit version;
src = runCommand "${pname}-filtered-src" {
nativeBuildInputs = [ rsync ];
} ''
for p in ${lib.concatStringsSep " " ([ attrs.path ] ++ attrs.extraPaths or [])}; do
set -x
path="$out/$p"
mkdir -p "$(dirname "$path")"
src_path="${freebsdSrc}/$p"
if [[ -d "$src_path" ]]; then src_path+=/; fi
rsync --chmod="+w" -r "$src_path" "$path"
set +x
done
'';
extraPaths = [ ];
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal
install tsort lorder mandoc groff #statHook
];
buildInputs = with self; compatIfNeeded;
HOST_SH = stdenv'.shell;
# Since STRIP below is the flag
STRIPBIN = "${stdenv.cc.bintools.targetPrefix}strip";
makeFlags = [
"STRIP=-s" # flag to install, not command
] ++ lib.optional (!stdenv.hostPlatform.isFreeBSD) "MK_WERROR=no";
# amd64 not x86_64 for this on unlike NetBSD
MACHINE_ARCH = mkBsdArch stdenv';
MACHINE = mkBsdArch stdenv';
MACHINE_CPUARCH = MACHINE_ARCH;
COMPONENT_PATH = attrs.path or null;
strictDeps = true;
meta = with lib; {
maintainers = with maintainers; [ ericson2314 ];
platforms = platforms.unix;
license = licenses.bsd2;
ports = fetchzip {
url = "https://cgit.freebsd.org/ports/snapshot/ports-dde3b2b456c3a4bdd217d0bf3684231cc3724a0a.tar.gz";
sha256 = "BpHqJfnGOeTE7tkFJBx0Wk8ryalmf4KNTit/Coh026E=";
};
} // lib.optionalAttrs stdenv'.hasCC {
# TODO should CC wrapper set this?
CPP = "${stdenv'.cc.targetPrefix}cpp";
} // lib.optionalAttrs stdenv'.isDarwin {
MKRELRO = "no";
} // lib.optionalAttrs (stdenv'.cc.isClang or false) {
HAVE_LLVM = lib.versions.major (lib.getVersion stdenv'.cc.cc);
} // lib.optionalAttrs (stdenv'.cc.isGNU or false) {
HAVE_GCC = lib.versions.major (lib.getVersion stdenv'.cc.cc);
} // lib.optionalAttrs (stdenv'.isx86_32) {
USE_SSP = "no";
} // lib.optionalAttrs (attrs.headersOnly or false) {
installPhase = "includesPhase";
dontBuild = true;
} // attrs));
##
## START BOOTSTRAPPING
##
makeMinimal = mkDerivation rec {
inherit (self.make) path;
# Why do we have splicing and yet do `nativeBuildInputs = with self; ...`?
# See note in ../netbsd/default.nix.
buildInputs = with self; [];
nativeBuildInputs = with buildPackages.netbsd; [ bsdSetupHook freebsdSetupHook ];
compatIfNeeded = lib.optional (!stdenvNoCC.hostPlatform.isFreeBSD) self.compat;
skipIncludesPhase = true;
freebsd-lib = import ./lib { inherit version; };
makeFlags = [];
# Overridden arguments avoid cross package-set splicing issues,
# otherwise would just use implicit
# `lib.packagesFromDirectoryRecursive` auto-call.
postPatch = ''
patchShebangs configure
${self.make.postPatch}
'';
compat = self.callPackage ./pkgs/compat/package.nix {
inherit stdenv;
inherit (buildPackages.freebsd) makeMinimal boot-install;
};
buildPhase = ''
runHook preBuild
csu = self.callPackage ./pkgs/csu.nix {
inherit (buildPackages.freebsd) makeMinimal install gencat;
inherit (self) include;
};
sh ./make-bootstrap.sh
include = self.callPackage ./pkgs/include/package.nix {
inherit (buildPackages.freebsd) makeMinimal install rpcgen;
};
runHook postBuild
'';
install = self.callPackage ./pkgs/install.nix {
inherit (buildPackages.freebsd) makeMinimal;
inherit (self) mtree libnetbsd;
};
installPhase = ''
runHook preInstall
libc = self.callPackage ./pkgs/libc/package.nix {
inherit (buildPackages.freebsd) makeMinimal install gencat rpcgen;
inherit (self) csu include;
};
install -D bmake "$out/bin/bmake"
ln -s "$out/bin/bmake" "$out/bin/make"
mkdir -p "$out/share"
cp -r "$BSDSRCDIR/share/mk" "$out/share/mk"
find "$out/share/mk" -type f -print0 |
while IFS= read -r -d "" f; do
substituteInPlace "$f" --replace 'usr/' ""
done
substituteInPlace "$out/share/mk/bsd.symver.mk" \
--replace '/share/mk' "$out/share/mk"
libnetbsd = self.callPackage ./pkgs/libnetbsd/package.nix {
inherit (buildPackages.freebsd) makeMinimal;
};
runHook postInstall
'';
mkDerivation = self.callPackage ./pkgs/mkDerivation.nix {
inherit stdenv;
inherit (buildPackages.freebsd) makeMinimal install tsort;
};
postInstall = lib.optionalString (!stdenv.targetPlatform.isFreeBSD) ''
boot_mk="$BSDSRCDIR/tools/build/mk"
cp "$boot_mk"/Makefile.boot* "$out/share/mk"
replaced_mk="$out/share/mk.orig"
mkdir "$replaced_mk"
mv "$out"/share/mk/bsd.{lib,prog}.mk "$replaced_mk"
for m in bsd.{lib,prog}.mk; do
cp "$boot_mk/$m" "$out/share/mk"
substituteInPlace "$out/share/mk/$m" --replace '../../../share/mk' '../mk.orig'
done
'';
makeMinimal = self.callPackage ./pkgs/makeMinimal.nix {
inherit (self) make;
};
extraPaths = with self; make.extraPaths;
};
# Wrap NetBSD's install
boot-install = buildPackages.writeShellScriptBin "boot-install" (install-wrapper + ''
${buildPackages.netbsd.install}/bin/xinstall "''${args[@]}"
'');
compat = mkDerivation rec {
pname = "compat";
path = "tools/build";
extraPaths = [
"lib/libc/db"
"lib/libc/stdlib" # getopt
"lib/libc/gen" # getcap
"lib/libc/locale" # rpmatch
] ++ lib.optionals stdenv.hostPlatform.isLinux [
"lib/libc/string" # strlcpy
"lib/libutil"
] ++ [
"contrib/libc-pwcache"
"contrib/libc-vis"
"sys/libkern"
"sys/kern/subr_capability.c"
# Take only individual headers, or else we will clobber native libc, etc.
"sys/rpc/types.h"
# Listed in Makekfile as INC
"include/mpool.h"
"include/ndbm.h"
"include/err.h"
"include/stringlist.h"
"include/a.out.h"
"include/nlist.h"
"include/db.h"
"include/getopt.h"
"include/nl_types.h"
"include/elf.h"
"sys/sys/ctf.h"
# Listed in Makekfile as SYSINC
"sys/sys/capsicum.h"
"sys/sys/caprights.h"
"sys/sys/imgact_aout.h"
"sys/sys/nlist_aout.h"
"sys/sys/nv.h"
"sys/sys/dnv.h"
"sys/sys/cnv.h"
"sys/sys/elf32.h"
"sys/sys/elf64.h"
"sys/sys/elf_common.h"
"sys/sys/elf_generic.h"
"sys/${mkBsdArch stdenv}/include"
] ++ lib.optionals stdenv.hostPlatform.isx86 [
"sys/x86/include"
] ++ [
"sys/sys/queue.h"
"sys/sys/md5.h"
"sys/sys/sbuf.h"
"sys/sys/tree.h"
"sys/sys/font.h"
"sys/sys/consio.h"
"sys/sys/fnv_hash.h"
"sys/crypto/chacha20/_chacha.h"
"sys/crypto/chacha20/chacha.h"
# included too, despite ".c"
"sys/crypto/chacha20/chacha.c"
"sys/fs"
"sys/ufs"
"sys/sys/disk"
"lib/libcapsicum"
"lib/libcasper"
];
patches = [
./compat-install-dirs.patch
./compat-fix-typedefs-locations.patch
];
preBuild = ''
NIX_CFLAGS_COMPILE+=' -I../../include -I../../sys'
cp ../../sys/${mkBsdArch stdenv}/include/elf.h ../../sys/sys
cp ../../sys/${mkBsdArch stdenv}/include/elf.h ../../sys/sys/${mkBsdArch stdenv}
'' + lib.optionalString stdenv.hostPlatform.isx86 ''
cp ../../sys/x86/include/elf.h ../../sys/x86
'';
setupHooks = [
../../../build-support/setup-hooks/role.bash
./compat-setup-hook.sh
];
# This one has an ifdefed `#include_next` that makes it annoying.
postInstall = ''
rm ''${!outputDev}/0-include/libelf.h
'';
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal
boot-install
which
];
buildInputs = [ expat zlib ];
makeFlags = [
"STRIP=-s" # flag to install, not command
"MK_WERROR=no"
"HOST_INCLUDE_ROOT=${lib.getDev stdenv.cc.libc}/include"
"INSTALL=boot-install"
];
preIncludes = ''
mkdir -p $out/{0,1}-include
cp --no-preserve=mode -r cross-build/include/common/* $out/0-include
'' + lib.optionalString stdenv.hostPlatform.isLinux ''
cp --no-preserve=mode -r cross-build/include/linux/* $out/1-include
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
cp --no-preserve=mode -r cross-build/include/darwin/* $out/1-include
'';
};
libnetbsd = mkDerivation {
path = "lib/libnetbsd";
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal mandoc groff
(if stdenv.hostPlatform == stdenv.buildPlatform
then boot-install
else install)
];
patches = lib.optionals (!stdenv.hostPlatform.isFreeBSD) [
./libnetbsd-do-install.patch
#./libnetbsd-define-__va_list.patch
];
makeFlags = [
"STRIP=-s" # flag to install, not command
"MK_WERROR=no"
] ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "INSTALL=boot-install";
buildInputs = with self; compatIfNeeded;
};
# HACK: to ensure parent directories exist. This emulates GNU
# installs -D option. No alternative seems to exist in BSD install.
install = let binstall = writeShellScript "binstall" (install-wrapper + ''
@out@/bin/xinstall "''${args[@]}"
''); in mkDerivation {
path = "usr.bin/xinstall";
extraPaths = with self; [ mtree.path ];
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal mandoc groff
(if stdenv.hostPlatform == stdenv.buildPlatform
then boot-install
else install)
];
skipIncludesPhase = true;
buildInputs = with self; compatIfNeeded ++ [ libmd libnetbsd ];
makeFlags = [
"STRIP=-s" # flag to install, not command
"MK_WERROR=no"
"TESTSDIR=${builtins.placeholder "test"}"
] ++ lib.optional (stdenv.hostPlatform == stdenv.buildPlatform) "INSTALL=boot-install";
postInstall = ''
install -D -m 0550 ${binstall} $out/bin/binstall
substituteInPlace $out/bin/binstall --subst-var out
mv $out/bin/install $out/bin/xinstall
ln -s ./binstall $out/bin/install
'';
outputs = [ "out" "man" "test" ];
};
sed = mkDerivation {
path = "usr.bin/sed";
TESTSRC = "${freebsdSrc}/contrib/netbsd-tests";
MK_TESTS = "no";
};
# Don't add this to nativeBuildInputs directly. Use statHook instead.
stat = mkDerivation {
path = "usr.bin/stat";
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
];
};
# stat isn't in POSIX, and NetBSD stat supports a completely
# different range of flags than GNU stat, so including it in PATH
# breaks stdenv. Work around that with a hook that will point
# NetBSD's build system and NetBSD stat without including it in
# PATH.
statHook = makeSetupHook {
name = "netbsd-stat-hook";
} (writeText "netbsd-stat-hook-impl" ''
makeFlagsArray+=(TOOL_STAT=${self.stat}/bin/stat)
'');
tsort = mkDerivation {
path = "usr.bin/tsort";
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
];
};
lorder = mkDerivation rec {
path = "usr.bin/lorder";
noCC = true;
dontBuild = true;
installPhase = ''
mkdir -p "$out/bin" "$man/share/man"
mv "lorder.sh" "$out/bin/lorder"
chmod +x "$out/bin/lorder"
mv "lorder.1" "$man/share/man"
'';
nativeBuildInputs = [ bsdSetupHook freebsdSetupHook ];
buildInputs = [];
outputs = [ "out" "man" ];
};
##
## END BOOTSTRAPPING
##
##
## START COMMAND LINE TOOLS
##
make = mkDerivation {
path = "contrib/bmake";
version = "9.2";
postPatch = ''
# make needs this to pick up our sys make files
export NIX_CFLAGS_COMPILE+=" -D_PATH_DEFSYSPATH=\"$out/share/mk\""
'' + lib.optionalString stdenv.isDarwin ''
substituteInPlace $BSDSRCDIR/share/mk/bsd.sys.mk \
--replace '-Wl,--fatal-warnings' "" \
--replace '-Wl,--warn-shared-textrel' ""
'';
postInstall = ''
make -C $BSDSRCDIR/share/mk FILESDIR=$out/share/mk install
'';
extraPaths = [ "share/mk" ]
++ lib.optional (!stdenv.hostPlatform.isFreeBSD) "tools/build/mk";
};
mtree = mkDerivation {
path = "contrib/mtree";
extraPaths = with self; [ mknod.path ];
};
mknod = mkDerivation {
path = "sbin/mknod";
};
rpcgen = mkDerivation rec {
path = "usr.bin/rpcgen";
patches = lib.optionals (stdenv.hostPlatform.libc == "glibc") [
# `WUNTRACED` is defined privately `bits/waitflags.h` in glibc.
# But instead of having a regular header guard, it has some silly
# non-modular logic. `stdlib.h` will include it if `sys/wait.h`
# hasn't yet been included (for it would first), and vice versa.
#
# The problem is that with the FreeBSD compat headers, one of
# those headers ends up included other headers...which ends up
# including the other one, this means by the first time we reach
# `#include `<bits/waitflags.h>`, both `_SYS_WAIT_H` and
# `_STDLIB_H` are already defined! Thus, we never ned up including
# `<bits/waitflags.h>` and defining `WUNTRACED`.
#
# This hacks around this by manually including `WUNTRACED` until
# the problem is fixed properly in glibc.
./rpcgen-glibc-hack.patch
];
};
gencat = mkDerivation {
path = "usr.bin/gencat";
};
file2c = mkDerivation {
path = "usr.bin/file2c";
MK_TESTS = "no";
};
libnv = mkDerivation {
path = "lib/libnv";
extraPaths = [
"sys/contrib/libnv"
"sys/sys"
];
MK_TESTS = "no";
};
libsbuf = mkDerivation {
path = "lib/libsbuf";
extraPaths = [
"sys/kern"
];
MK_TESTS = "no";
};
libelf = mkDerivation {
path = "lib/libelf";
extraPaths = [
"contrib/elftoolchain/libelf"
"contrib/elftoolchain/common"
"sys/sys/elf32.h"
"sys/sys/elf64.h"
"sys/sys/elf_common.h"
];
BOOTSTRAPPING = !stdenv.isFreeBSD;
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
m4
];
MK_TESTS = "no";
};
libdwarf = mkDerivation {
path = "lib/libdwarf";
extraPaths = [
"contrib/elftoolchain/libdwarf"
"contrib/elftoolchain/common"
"sys/sys/elf32.h"
"sys/sys/elf64.h"
"sys/sys/elf_common.h"
];
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
m4
];
buildInputs = with self; compatIfNeeded ++ [
libelf
];
MK_TESTS = "no";
};
uudecode = mkDerivation {
path = "usr.bin/uudecode";
MK_TESTS = "no";
};
config = mkDerivation {
path = "usr.sbin/config";
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
flex byacc file2c
];
buildInputs = with self; compatIfNeeded ++ [ libnv libsbuf ];
};
##
## END COMMAND LINE TOOLS
##
##
## START HEADERS
##
include = mkDerivation {
path = "include";
extraPaths = [
"contrib/libc-vis"
"etc/mtree/BSD.include.dist"
"sys"
];
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal
install
mandoc groff rsync /*nbperf*/ rpcgen
# HACK use NetBSD's for now
buildPackages.netbsd.mtree
];
patches = [
./no-perms-BSD.include.dist.patch
];
# The makefiles define INCSDIR per subdirectory, so we have to set
# something else on the command line so those definitions aren't
# overridden.
postPatch = ''
find "$BSDSRCDIR" -name Makefile -exec \
sed -i -E \
-e 's_/usr/include_''${INCSDIR0}_' \
{} \;
'';
makeFlags = [
"RPCGEN_CPP=${buildPackages.stdenv.cc.cc}/bin/cpp"
];
# multiple header dirs, see above
postConfigure = ''
makeFlags=''${makeFlags/INCSDIR/INCSDIR0}
'';
headersOnly = true;
MK_HESIOD = "yes";
meta.platforms = lib.platforms.freebsd;
};
##
## END HEADERS
##
csu = mkDerivation {
path = "lib/csu";
extraPaths = with self; [
"lib/Makefile.inc"
"lib/libc/include/libc_private.h"
];
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal
install
flex byacc gencat
];
buildInputs = with self; [ include ];
MK_TESTS = "no";
meta.platforms = lib.platforms.freebsd;
};
libc = mkDerivation rec {
pname = "libc";
path = "lib/libc";
extraPaths = [
"etc/group"
"etc/master.passwd"
"etc/shells"
"lib/libmd"
"lib/libutil"
"lib/msun"
"sys/kern"
"sys/libkern"
"sys/sys"
"sys/crypto/chacha20"
"include/rpcsvc"
"contrib/jemalloc"
"contrib/gdtoa"
"contrib/libc-pwcache"
"contrib/libc-vis"
"contrib/tzcode/stdtime"
# libthr
"lib/libthr"
"lib/libthread_db"
"libexec/rtld-elf"
# librpcsvc
"lib/librpcsvc"
# librt
"lib/librt"
# libcrypt
"lib/libcrypt"
"lib/libmd"
"sys/crypto/sha2"
];
patches = [
# Hack around broken propogating MAKEFLAGS to submake, just inline logic
./libc-msun-arch-subdir.patch
# Don't force -lcompiler-rt, we don't actually call it that
./libc-no-force--lcompiler-rt.patch
# Fix extra include dir to get rpcsvc headers.
./librpcsvc-include-subdir.patch
];
postPatch = ''
substituteInPlace $COMPONENT_PATH/Makefile --replace '.include <src.opts.mk>' ""
'';
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal
install
flex byacc gencat rpcgen
];
buildInputs = with self; [ include csu ];
env.NIX_CFLAGS_COMPILE = "-B${self.csu}/lib";
# Suppress lld >= 16 undefined version errors
# https://github.com/freebsd/freebsd-src/commit/2ba84b4bcdd6012e8cfbf8a0d060a4438623a638
env.NIX_LDFLAGS = lib.optionalString (stdenv.targetPlatform.linker == "lld") "--undefined-version";
makeFlags = [
"STRIP=-s" # flag to install, not command
# lib/libc/gen/getgrent.c has sketchy cast from `void *` to enum
"MK_WERROR=no"
];
MK_SYMVER = "yes";
MK_SSP = "yes";
MK_NLS = "yes";
MK_ICONV = "no"; # TODO make srctop
MK_NS_CACHING = "yes";
MK_INET6_SUPPORT = "yes";
MK_HESIOD = "yes";
MK_NIS = "yes";
MK_HYPERV = "yes";
MK_FP_LIBC = "yes";
MK_TCSH = "no";
MK_MALLOC_PRODUCTION = "yes";
MK_TESTS = "no";
postInstall = ''
pushd ${self.include}
find . -type d -exec mkdir -p $out/\{} \;
find . \( -type f -o -type l \) -exec cp -pr \{} $out/\{} \;
popd
pushd ${self.csu}
find . -type d -exec mkdir -p $out/\{} \;
find . \( -type f -o -type l \) -exec cp -pr \{} $out/\{} \;
popd
sed -i -e 's| [^ ]*/libc_nonshared.a||' $out/lib/libc.so
$CC -nodefaultlibs -lgcc -shared -o $out/lib/libgcc_s.so
NIX_CFLAGS_COMPILE+=" -B$out/lib"
NIX_CFLAGS_COMPILE+=" -I$out/include"
NIX_LDFLAGS+=" -L$out/lib"
make -C $BSDSRCDIR/lib/libthr $makeFlags
make -C $BSDSRCDIR/lib/libthr $makeFlags install
make -C $BSDSRCDIR/lib/msun $makeFlags
make -C $BSDSRCDIR/lib/msun $makeFlags install
make -C $BSDSRCDIR/lib/librpcsvc $makeFlags
make -C $BSDSRCDIR/lib/librpcsvc $makeFlags install
make -C $BSDSRCDIR/lib/libutil $makeFlags
make -C $BSDSRCDIR/lib/libutil $makeFlags install
make -C $BSDSRCDIR/lib/librt $makeFlags
make -C $BSDSRCDIR/lib/librt $makeFlags install
make -C $BSDSRCDIR/lib/libcrypt $makeFlags
make -C $BSDSRCDIR/lib/libcrypt $makeFlags install
'';
meta.platforms = lib.platforms.freebsd;
};
##
## Kernel
##
libspl = mkDerivation {
path = "cddl/lib/libspl";
extraPaths = [
"sys/contrib/openzfs/lib/libspl"
"sys/contrib/openzfs/include"
"cddl/compat/opensolaris/include"
"sys/contrib/openzfs/module/icp/include"
"sys/modules/zfs"
];
# nativeBuildInputs = with buildPackages.freebsd; [
# bsdSetupHook freebsdSetupHook
# makeMinimal install mandoc groff
# flex byacc file2c
# ];
# buildInputs = with self; compatIfNeeded ++ [ libnv libsbuf ];
meta.license = lib.licenses.cddl;
};
ctfconvert = mkDerivation {
path = "cddl/usr.bin/ctfconvert";
extraPaths = [
"cddl/compat/opensolaris"
"cddl/contrib/opensolaris"
"sys/cddl/compat/opensolaris"
"sys/cddl/contrib/opensolaris"
"sys/contrib/openzfs"
];
OPENSOLARIS_USR_DISTDIR = "$(SRCTOP)/cddl/contrib/opensolaris";
OPENSOLARIS_SYS_DISTDIR = "$(SRCTOP)/sys/cddl/contrib/opensolaris";
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
# flex byacc file2c
];
buildInputs = with self; compatIfNeeded ++ [
libelf libdwarf zlib libspl
];
meta.license = lib.licenses.cddl;
};
xargs-j = substituteAll {
name = "xargs-j";
shell = runtimeShell;
src = ../xargs-j.sh;
dir = "bin";
isExecutable = true;
};
sys = mkDerivation (let
cfg = "MINIMAL";
in rec {
path = "sys";
nativeBuildInputs = with buildPackages.freebsd; [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
config rpcgen file2c gawk uudecode xargs-j
#ctfconvert
];
patches = [
./sys-gnu-date.patch
./sys-no-explicit-intrinsics-dep.patch
];
# --dynamic-linker /red/herring is used when building the kernel.
NIX_ENFORCE_PURITY = 0;
AWK = "${buildPackages.gawk}/bin/awk";
CWARNEXTRA = "-Wno-error=shift-negative-value -Wno-address-of-packed-member";
MK_CTF = "no";
KODIR = "${builtins.placeholder "out"}/kernel";
KMODDIR = "${builtins.placeholder "out"}/kernel";
DTBDIR = "${builtins.placeholder"out"}/dbt";
KERN_DEBUGDIR = "${builtins.placeholder "out"}/debug";
KERN_DEBUGDIR_KODIR = "${KERN_DEBUGDIR}/kernel";
KERN_DEBUGDIR_KMODDIR = "${KERN_DEBUGDIR}/kernel";
skipIncludesPhase = true;
configurePhase = ''
runHook preConfigure
for f in conf/kmod.mk contrib/dev/acpica/acpica_prep.sh; do
substituteInPlace "$f" --replace 'xargs -J' 'xargs-j '
done
for f in conf/*.mk; do
substituteInPlace "$f" --replace 'KERN_DEBUGDIR}''${' 'KERN_DEBUGDIR_'
done
cd ${mkBsdArch stdenv}/conf
sed -i ${cfg} \
-e 's/WITH_CTF=1/WITH_CTF=0/' \
-e '/KDTRACE/d'
config ${cfg}
runHook postConfigure
'';
preBuild = ''
cd ../compile/${cfg}
'';
});
});
}

View File

@ -33,7 +33,7 @@ stdenv.mkDerivation {
INSTALL_AS_USER = true;
NO_CHECKSUM = true;
NO_MTREE = true;
SRC_BASE = freebsd.freebsdSrc;
SRC_BASE = freebsd.source;
preUnpack = ''
export MAKE_JOBS_NUMBER="$NIX_BUILD_CORES"

View File

@ -0,0 +1,16 @@
{ version }:
{
inherit version;
mkBsdArch = stdenv': {
x86_64 = "amd64";
aarch64 = "arm64";
i486 = "i386";
i586 = "i386";
i686 = "i386";
}.${stdenv'.hostPlatform.parsed.cpu.name}
or stdenv'.hostPlatform.parsed.cpu.name;
install-wrapper = builtins.readFile ./install-wrapper.sh;
}

View File

@ -0,0 +1,30 @@
set -eu
args=()
declare -i path_args=0
while (( $# )); do
if (( $# == 1 )); then
if (( path_args > 1)) || [[ "$1" = */ ]]; then
mkdir -p "$1"
else
mkdir -p "$(dirname "$1")"
fi
fi
case $1 in
-C) ;;
-o | -g) shift ;;
-s) ;;
-m | -l)
# handle next arg so not counted as path arg
args+=("$1" "$2")
shift
;;
-*) args+=("$1") ;;
*)
path_args+=1
args+=("$1")
;;
esac
shift
done

View File

@ -0,0 +1,7 @@
{ buildPackages, freebsd-lib }:
# Wrap NetBSD's install
buildPackages.writeShellScriptBin "boot-install" (freebsd-lib.install-wrapper + ''
${buildPackages.netbsd.install}/bin/xinstall "''${args[@]}"
'')

View File

@ -0,0 +1,135 @@
{ lib, stdenv, mkDerivation
, bsdSetupHook, freebsdSetupHook
, makeMinimal, boot-install
, which
, freebsd-lib
, expat, zlib,
}:
let
inherit (freebsd-lib) mkBsdArch;
in
mkDerivation rec {
pname = "compat";
path = "tools/build";
extraPaths = [
"lib/libc/db"
"lib/libc/stdlib" # getopt
"lib/libc/gen" # getcap
"lib/libc/locale" # rpmatch
] ++ lib.optionals stdenv.hostPlatform.isLinux [
"lib/libc/string" # strlcpy
"lib/libutil"
] ++ [
"contrib/libc-pwcache"
"contrib/libc-vis"
"sys/libkern"
"sys/kern/subr_capability.c"
# Take only individual headers, or else we will clobber native libc, etc.
"sys/rpc/types.h"
# Listed in Makekfile as INC
"include/mpool.h"
"include/ndbm.h"
"include/err.h"
"include/stringlist.h"
"include/a.out.h"
"include/nlist.h"
"include/db.h"
"include/getopt.h"
"include/nl_types.h"
"include/elf.h"
"sys/sys/ctf.h"
# Listed in Makekfile as SYSINC
"sys/sys/capsicum.h"
"sys/sys/caprights.h"
"sys/sys/imgact_aout.h"
"sys/sys/nlist_aout.h"
"sys/sys/nv.h"
"sys/sys/dnv.h"
"sys/sys/cnv.h"
"sys/sys/elf32.h"
"sys/sys/elf64.h"
"sys/sys/elf_common.h"
"sys/sys/elf_generic.h"
"sys/${mkBsdArch stdenv}/include"
] ++ lib.optionals stdenv.hostPlatform.isx86 [
"sys/x86/include"
] ++ [
"sys/sys/queue.h"
"sys/sys/md5.h"
"sys/sys/sbuf.h"
"sys/sys/tree.h"
"sys/sys/font.h"
"sys/sys/consio.h"
"sys/sys/fnv_hash.h"
"sys/crypto/chacha20/_chacha.h"
"sys/crypto/chacha20/chacha.h"
# included too, despite ".c"
"sys/crypto/chacha20/chacha.c"
"sys/fs"
"sys/ufs"
"sys/sys/disk"
"lib/libcapsicum"
"lib/libcasper"
];
patches = [
./compat-install-dirs.patch
./compat-fix-typedefs-locations.patch
];
preBuild = ''
NIX_CFLAGS_COMPILE+=' -I../../include -I../../sys'
cp ../../sys/${mkBsdArch stdenv}/include/elf.h ../../sys/sys
cp ../../sys/${mkBsdArch stdenv}/include/elf.h ../../sys/sys/${mkBsdArch stdenv}
'' + lib.optionalString stdenv.hostPlatform.isx86 ''
cp ../../sys/x86/include/elf.h ../../sys/x86
'';
setupHooks = [
../../../../../build-support/setup-hooks/role.bash
./compat-setup-hook.sh
];
# This one has an ifdefed `#include_next` that makes it annoying.
postInstall = ''
rm ''${!outputDev}/0-include/libelf.h
'';
nativeBuildInputs = [
bsdSetupHook freebsdSetupHook
makeMinimal
boot-install
which
];
buildInputs = [ expat zlib ];
makeFlags = [
"STRIP=-s" # flag to install, not command
"MK_WERROR=no"
"HOST_INCLUDE_ROOT=${lib.getDev stdenv.cc.libc}/include"
"INSTALL=boot-install"
];
preIncludes = ''
mkdir -p $out/{0,1}-include
cp --no-preserve=mode -r cross-build/include/common/* $out/0-include
'' + lib.optionalString stdenv.hostPlatform.isLinux ''
cp --no-preserve=mode -r cross-build/include/linux/* $out/1-include
'' + lib.optionalString stdenv.hostPlatform.isDarwin ''
cp --no-preserve=mode -r cross-build/include/darwin/* $out/1-include
'';
}

View File

@ -0,0 +1,17 @@
{ mkDerivation
, bsdSetupHook, freebsdSetupHook
, makeMinimal, install, mandoc, groff
, flex, byacc, file2c
, compatIfNeeded, libnv, libsbuf
}:
mkDerivation {
path = "usr.sbin/config";
nativeBuildInputs = [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
flex byacc file2c
];
buildInputs = compatIfNeeded ++ [ libnv libsbuf ];
}

View File

@ -0,0 +1,25 @@
{ lib, mkDerivation
, bsdSetupHook, freebsdSetupHook
, makeMinimal
, install
, flex, byacc, gencat
, include
}:
mkDerivation {
path = "lib/csu";
extraPaths = [
"lib/Makefile.inc"
"lib/libc/include/libc_private.h"
];
nativeBuildInputs = [
bsdSetupHook freebsdSetupHook
makeMinimal
install
flex byacc gencat
];
buildInputs = [ include ];
MK_TESTS = "no";
meta.platforms = lib.platforms.freebsd;
}

View File

@ -0,0 +1,28 @@
{ lib, stdenv, mkDerivation
, bsdSetupHook, freebsdSetupHook
, makeMinimal, install, mandoc, groff
, compatIfNeeded, libelf, libdwarf, zlib, libspl
}:
mkDerivation {
path = "cddl/usr.bin/ctfconvert";
extraPaths = [
"cddl/compat/opensolaris"
"cddl/contrib/opensolaris"
"sys/cddl/compat/opensolaris"
"sys/cddl/contrib/opensolaris"
"sys/contrib/openzfs"
];
OPENSOLARIS_USR_DISTDIR = "$(SRCTOP)/cddl/contrib/opensolaris";
OPENSOLARIS_SYS_DISTDIR = "$(SRCTOP)/sys/cddl/contrib/opensolaris";
nativeBuildInputs = [
bsdSetupHook freebsdSetupHook
makeMinimal install mandoc groff
# flex byacc file2c
];
buildInputs = compatIfNeeded ++ [
libelf libdwarf zlib libspl
];
meta.license = lib.licenses.cddl;
}

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