Merge master into haskell-updates
This commit is contained in:
commit
a4b8f2e732
450 changed files with 25965 additions and 6386 deletions
1
.github/labeler.yml
vendored
1
.github/labeler.yml
vendored
|
@ -122,6 +122,7 @@
|
|||
- any:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file:
|
||||
- pkgs/development/tools/misc/luarocks/*
|
||||
- pkgs/development/interpreters/lua-5/**/*
|
||||
- pkgs/development/interpreters/luajit/**/*
|
||||
- pkgs/development/lua-modules/**/*
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -17,6 +17,9 @@ The main package set contains aliases to these package sets, e.g.
|
|||
`luaPackages` refers to `lua5_1.pkgs` and `lua52Packages` to
|
||||
`lua5_2.pkgs`.
|
||||
|
||||
Note that nixpkgs patches the non-luajit interpreters to avoid referring to
|
||||
`/usr` and have `;;` (a [placeholder](https://www.lua.org/manual/5.1/manual.html#pdf-package.path) replaced with the default LUA_PATH) work correctly.
|
||||
|
||||
### Installing Lua and packages {#installing-lua-and-packages}
|
||||
|
||||
#### Lua environment defined in separate `.nix` file {#lua-environment-defined-in-separate-.nix-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";
|
||||
|
@ -15767,6 +15774,12 @@
|
|||
githubId = 4201956;
|
||||
name = "pongo1231";
|
||||
};
|
||||
poptart = {
|
||||
email = "poptart@hosakacorp.net";
|
||||
github = "terrorbyte";
|
||||
githubId = 1601039;
|
||||
name = "Cale Black";
|
||||
};
|
||||
portothree = {
|
||||
name = "Gustavo Porto";
|
||||
email = "gus@p8s.co";
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -12,7 +12,7 @@ looks like this:
|
|||
type = type specification;
|
||||
default = default value;
|
||||
example = example value;
|
||||
description = lib.mdDoc "Description for use in the NixOS manual.";
|
||||
description = "Description for use in the NixOS manual.";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -58,12 +58,9 @@ The function `mkOption` accepts the following arguments.
|
|||
|
||||
`description`
|
||||
|
||||
: A textual description of the option, in [Nixpkgs-flavored Markdown](
|
||||
https://nixos.org/nixpkgs/manual/#sec-contributing-markup) format, that will be
|
||||
included in the NixOS manual. During the migration process from DocBook
|
||||
it is necessary to mark descriptions written in CommonMark with `lib.mdDoc`.
|
||||
The description may still be written in DocBook (without any marker), but this
|
||||
is discouraged and will be deprecated in the future.
|
||||
: A textual description of the option in [Nixpkgs-flavored Markdown](
|
||||
https://nixos.org/nixpkgs/manual/#sec-contributing-markup) format that will be
|
||||
included in the NixOS manual.
|
||||
|
||||
## Utility functions for common option patterns {#sec-option-declarations-util}
|
||||
|
||||
|
@ -81,13 +78,13 @@ For example:
|
|||
::: {#ex-options-declarations-util-mkEnableOption-magic .example}
|
||||
### `mkEnableOption` usage
|
||||
```nix
|
||||
lib.mkEnableOption (lib.mdDoc "magic")
|
||||
lib.mkEnableOption "magic"
|
||||
# is like
|
||||
lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
description = lib.mdDoc "Whether to enable magic.";
|
||||
description = "Whether to enable magic.";
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
@ -135,7 +132,7 @@ lib.mkOption {
|
|||
type = lib.types.package;
|
||||
default = pkgs.hello;
|
||||
defaultText = lib.literalExpression "pkgs.hello";
|
||||
description = lib.mdDoc "The hello package to use.";
|
||||
description = "The hello package to use.";
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
@ -153,7 +150,7 @@ lib.mkOption {
|
|||
default = pkgs.ghc;
|
||||
defaultText = lib.literalExpression "pkgs.ghc";
|
||||
example = lib.literalExpression "pkgs.haskell.packages.ghc92.ghc.withPackages (hkgs: [ hkgs.primes ])";
|
||||
description = lib.mdDoc "The GHC package to use.";
|
||||
description = "The GHC package to use.";
|
||||
}
|
||||
```
|
||||
:::
|
||||
|
|
|
@ -63,6 +63,9 @@ Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for Pi
|
|||
}
|
||||
```
|
||||
|
||||
- lua interpreters default LUA_PATH and LUA_CPATH are not overriden by nixpkgs
|
||||
anymore, we patch LUA_ROOT instead which is more respectful to upstream.
|
||||
|
||||
- Plasma 6 is now available and can be installed with `services.xserver.desktopManager.plasma6.enable = true;`. Plasma 5 will likely be deprecated in the next release (24.11). Note that Plasma 6 runs as Wayland by default, and the X11 session needs to be explicitly selected if necessary.
|
||||
|
||||
## New Services {#sec-release-24.05-new-services}
|
||||
|
@ -138,8 +141,12 @@ 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).
|
||||
|
||||
- [Mealie](https://nightly.mealie.io/), a self-hosted recipe manager and meal planner with a RestAPI backend and a reactive frontend application built in NuxtJS for a pleasant user experience for the whole family. Available as [services.mealie](#opt-services.mealie.enable)
|
||||
|
||||
- [Uni-Sync](https://github.com/EightB1ts/uni-sync), a synchronization tool for Lian Li Uni Controllers. Available as [hardware.uni-sync](#opt-hardware.uni-sync.enable)
|
||||
|
@ -466,6 +473,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
|||
- `services.zfs.zed.enableMail` now uses the global `sendmail` wrapper defined by an email module
|
||||
(such as msmtp or Postfix). It no longer requires using a special ZFS build with email support.
|
||||
|
||||
- `castopod` has some migration actions to be taken in case of a S3 setup. Some new features may also need some manual migration actions. See [https://code.castopod.org/adaures/castopod/-/releases](https://code.castopod.org/adaures/castopod/-/releases) for more informations.
|
||||
|
||||
- `nextcloud-setup.service` no longer changes the group of each file & directory inside `/var/lib/nextcloud/{config,data,store-apps}` if one of these directories has the wrong owner group. This was part of transitioning the group used for `/var/lib/nextcloud`, but isn't necessary anymore.
|
||||
|
||||
- `services.kavita` now uses the freeform option `services.kavita.settings` for the application settings file.
|
||||
|
|
|
@ -117,9 +117,7 @@
|
|||
# deprecated since 23.11.
|
||||
# TODO remove in a while.
|
||||
, allowDocBook ? false
|
||||
# whether lib.mdDoc is required for descriptions to be read as markdown.
|
||||
# deprecated since 23.11.
|
||||
# TODO remove in a while.
|
||||
# TODO remove in a while (see https://github.com/NixOS/nixpkgs/issues/300735)
|
||||
, markdownByDefault ? true
|
||||
}:
|
||||
|
||||
|
|
|
@ -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)
|
||||
)}
|
||||
'';
|
||||
|
|
|
@ -1,8 +1,13 @@
|
|||
{ lib, systemdUtils }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib)
|
||||
concatMapStrings
|
||||
concatStringsSep
|
||||
flip
|
||||
optionalString
|
||||
;
|
||||
|
||||
attrsToSection = systemdUtils.lib.attrsToSection;
|
||||
commonMatchText = def:
|
||||
optionalString (def.matchConfig != { }) ''
|
||||
|
|
|
@ -1,47 +1,90 @@
|
|||
{ 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)
|
||||
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 "copying of this file and symlinking it") // { default = true; };
|
||||
|
||||
target = mkOption {
|
||||
type = types.path;
|
||||
description = lib.mdDoc ''
|
||||
type = path;
|
||||
description = ''
|
||||
Path of the symlink.
|
||||
'';
|
||||
default = name;
|
||||
|
@ -49,13 +92,13 @@ rec {
|
|||
|
||||
text = mkOption {
|
||||
default = null;
|
||||
type = types.nullOr types.lines;
|
||||
description = lib.mdDoc "Text of the file.";
|
||||
type = nullOr lines;
|
||||
description = "Text of the file.";
|
||||
};
|
||||
|
||||
source = mkOption {
|
||||
type = types.path;
|
||||
description = lib.mdDoc "Path of the source file.";
|
||||
type = path;
|
||||
description = "Path of the source file.";
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -1,9 +1,32 @@
|
|||
{ 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
|
||||
mergeEqualOption
|
||||
mkIf
|
||||
mkMerge
|
||||
mkOption
|
||||
mkOptionType
|
||||
singleton
|
||||
toList
|
||||
types
|
||||
;
|
||||
|
||||
checkService = checkUnitConfig "Service" [
|
||||
(assertValueOneOf "Type" [
|
||||
"exec" "simple" "forking" "oneshot" "dbus" "notify" "notify-reload" "idle"
|
||||
|
@ -31,7 +54,7 @@ in rec {
|
|||
enable = mkOption {
|
||||
default = true;
|
||||
type = types.bool;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
If set to false, this unit will be a symlink to
|
||||
/dev/null. This is primarily useful to prevent specific
|
||||
template instances
|
||||
|
@ -45,7 +68,7 @@ in rec {
|
|||
overrideStrategy = mkOption {
|
||||
default = "asDropinIfExists";
|
||||
type = types.enum [ "asDropinIfExists" "asDropin" ];
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Defines how unit configuration is provided for systemd:
|
||||
|
||||
`asDropinIfExists` creates a unit file when no unit file is provided by the package
|
||||
|
@ -61,7 +84,7 @@ in rec {
|
|||
requiredBy = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
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 +94,7 @@ in rec {
|
|||
upheldBy = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Keep this unit running as long as the listed units are running. This is a continuously
|
||||
enforced version of wantedBy.
|
||||
'';
|
||||
|
@ -80,7 +103,7 @@ in rec {
|
|||
wantedBy = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
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 +121,7 @@ in rec {
|
|||
aliases = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc "Aliases of that unit.";
|
||||
description = "Aliases of that unit.";
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -108,12 +131,12 @@ in rec {
|
|||
text = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = lib.mdDoc "Text of this systemd unit.";
|
||||
description = "Text of this systemd unit.";
|
||||
};
|
||||
|
||||
unit = mkOption {
|
||||
internal = true;
|
||||
description = lib.mdDoc "The generated unit.";
|
||||
description = "The generated unit.";
|
||||
};
|
||||
|
||||
};
|
||||
|
@ -124,19 +147,19 @@ in rec {
|
|||
description = mkOption {
|
||||
default = "";
|
||||
type = types.singleLineStr;
|
||||
description = lib.mdDoc "Description of this unit used in systemd messages and progress indicators.";
|
||||
description = "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 = "A list of URIs referencing documentation for this unit or its configuration.";
|
||||
};
|
||||
|
||||
requires = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Start the specified units when this unit is started, and stop
|
||||
this unit when the specified units are stopped or fail.
|
||||
'';
|
||||
|
@ -145,7 +168,7 @@ in rec {
|
|||
wants = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Start the specified units when this unit is started.
|
||||
'';
|
||||
};
|
||||
|
@ -153,7 +176,7 @@ in rec {
|
|||
upholds = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Keeps the specified running while this unit is running. A continuous version of `wants`.
|
||||
'';
|
||||
};
|
||||
|
@ -161,7 +184,7 @@ in rec {
|
|||
after = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
If the specified units are started at the same time as
|
||||
this unit, delay this unit until they have started.
|
||||
'';
|
||||
|
@ -170,7 +193,7 @@ in rec {
|
|||
before = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
If the specified units are started at the same time as
|
||||
this unit, delay them until this unit has started.
|
||||
'';
|
||||
|
@ -179,7 +202,7 @@ in rec {
|
|||
bindsTo = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Like ‘requires’, but in addition, if the specified units
|
||||
unexpectedly disappear, this unit will be stopped as well.
|
||||
'';
|
||||
|
@ -188,7 +211,7 @@ in rec {
|
|||
partOf = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
If the specified units are stopped or restarted, then this
|
||||
unit is stopped or restarted as well.
|
||||
'';
|
||||
|
@ -197,7 +220,7 @@ in rec {
|
|||
conflicts = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
If the specified units are started, then this unit is stopped
|
||||
and vice versa.
|
||||
'';
|
||||
|
@ -206,7 +229,7 @@ in rec {
|
|||
requisite = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Similar to requires. However if the units listed are not started,
|
||||
they will not be started and the transaction will fail.
|
||||
'';
|
||||
|
@ -216,7 +239,7 @@ in rec {
|
|||
default = {};
|
||||
example = { RequiresMountsFor = "/data"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Unit]` section of the unit. See
|
||||
{manpage}`systemd.unit(5)` for details.
|
||||
|
@ -226,7 +249,7 @@ in rec {
|
|||
onFailure = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
A list of one or more units that are activated when
|
||||
this unit enters the "failed" state.
|
||||
'';
|
||||
|
@ -235,7 +258,7 @@ in rec {
|
|||
onSuccess = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitNameType;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
A list of one or more units that are activated when
|
||||
this unit enters the "inactive" state.
|
||||
'';
|
||||
|
@ -243,7 +266,7 @@ in rec {
|
|||
|
||||
startLimitBurst = mkOption {
|
||||
type = types.int;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
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 +275,7 @@ in rec {
|
|||
|
||||
startLimitIntervalSec = mkOption {
|
||||
type = types.int;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
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 +294,7 @@ in rec {
|
|||
restartTriggers = mkOption {
|
||||
default = [];
|
||||
type = types.listOf types.unspecified;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
An arbitrary list of items such as derivations. If any item
|
||||
in the list changes between reconfigurations, the service will
|
||||
be restarted.
|
||||
|
@ -281,7 +304,7 @@ in rec {
|
|||
reloadTriggers = mkOption {
|
||||
default = [];
|
||||
type = types.listOf unitOption;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
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 +322,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 = "Environment variables passed to the service's processes.";
|
||||
};
|
||||
|
||||
path = mkOption {
|
||||
default = [];
|
||||
type = with types; listOf (oneOf [ package str ]);
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Packages added to the service's {env}`PATH`
|
||||
environment variable. Both the {file}`bin`
|
||||
and {file}`sbin` subdirectories of each
|
||||
|
@ -319,7 +342,7 @@ in rec {
|
|||
{ RestartSec = 5;
|
||||
};
|
||||
type = types.addCheck (types.attrsOf unitOption) checkService;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Service]` section of the unit. See
|
||||
{manpage}`systemd.service(5)` for details.
|
||||
|
@ -329,14 +352,14 @@ in rec {
|
|||
script = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = lib.mdDoc "Shell commands executed as the service's main process.";
|
||||
description = "Shell commands executed as the service's main process.";
|
||||
};
|
||||
|
||||
scriptArgs = mkOption {
|
||||
type = types.str;
|
||||
default = "";
|
||||
example = "%i";
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Arguments passed to the main process script.
|
||||
Can contain specifiers (`%` placeholders expanded by systemd, see {manpage}`systemd.unit(5)`).
|
||||
'';
|
||||
|
@ -345,7 +368,7 @@ in rec {
|
|||
preStart = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed before the service's main process
|
||||
is started.
|
||||
'';
|
||||
|
@ -354,7 +377,7 @@ in rec {
|
|||
postStart = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed after the service's main process
|
||||
is started.
|
||||
'';
|
||||
|
@ -363,7 +386,7 @@ in rec {
|
|||
reload = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed when the service's main process
|
||||
is reloaded.
|
||||
'';
|
||||
|
@ -372,7 +395,7 @@ in rec {
|
|||
preStop = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed to stop the service.
|
||||
'';
|
||||
};
|
||||
|
@ -380,7 +403,7 @@ in rec {
|
|||
postStop = mkOption {
|
||||
type = types.lines;
|
||||
default = "";
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Shell commands executed after the service's main process
|
||||
has exited.
|
||||
'';
|
||||
|
@ -389,7 +412,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 = "A list of all job script derivations of this unit.";
|
||||
default = [];
|
||||
};
|
||||
|
||||
|
@ -434,7 +457,7 @@ in rec {
|
|||
restartIfChanged = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Whether the service should be restarted during a NixOS
|
||||
configuration switch if its definition has changed.
|
||||
'';
|
||||
|
@ -443,7 +466,7 @@ in rec {
|
|||
reloadIfChanged = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
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 +482,7 @@ in rec {
|
|||
stopIfChanged = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
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 +498,7 @@ in rec {
|
|||
type = with types; either str (listOf str);
|
||||
default = [];
|
||||
example = "Sun 14:00:00";
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
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 +525,7 @@ in rec {
|
|||
default = [];
|
||||
type = types.listOf types.str;
|
||||
example = [ "0.0.0.0:993" "/run/my-socket" ];
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
For each item in this list, a `ListenStream`
|
||||
option in the `[Socket]` section will be created.
|
||||
'';
|
||||
|
@ -512,7 +535,7 @@ in rec {
|
|||
default = [];
|
||||
type = types.listOf types.str;
|
||||
example = [ "0.0.0.0:993" "/run/my-socket" ];
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
For each item in this list, a `ListenDatagram`
|
||||
option in the `[Socket]` section will be created.
|
||||
'';
|
||||
|
@ -522,7 +545,7 @@ in rec {
|
|||
default = {};
|
||||
example = { ListenStream = "/run/my-socket"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Socket]` section of the unit. See
|
||||
{manpage}`systemd.socket(5)` for details.
|
||||
|
@ -554,7 +577,7 @@ in rec {
|
|||
default = {};
|
||||
example = { OnCalendar = "Sun 14:00:00"; Unit = "foo.service"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Timer]` section of the unit. See
|
||||
{manpage}`systemd.timer(5)` and
|
||||
|
@ -587,7 +610,7 @@ in rec {
|
|||
default = {};
|
||||
example = { PathChanged = "/some/path"; Unit = "changedpath.service"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Path]` section of the unit. See
|
||||
{manpage}`systemd.path(5)` for details.
|
||||
|
@ -618,13 +641,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 = "Absolute path of device node, file or other resource. (Mandatory)";
|
||||
};
|
||||
|
||||
where = mkOption {
|
||||
example = "/mnt";
|
||||
type = types.str;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Absolute path of a directory of the mount point.
|
||||
Will be created if it doesn't exist. (Mandatory)
|
||||
'';
|
||||
|
@ -634,21 +657,21 @@ in rec {
|
|||
default = "";
|
||||
example = "ext4";
|
||||
type = types.str;
|
||||
description = lib.mdDoc "File system type.";
|
||||
description = "File system type.";
|
||||
};
|
||||
|
||||
options = mkOption {
|
||||
default = "";
|
||||
example = "noatime";
|
||||
type = types.commas;
|
||||
description = lib.mdDoc "Options used to mount the file system.";
|
||||
description = "Options used to mount the file system.";
|
||||
};
|
||||
|
||||
mountConfig = mkOption {
|
||||
default = {};
|
||||
example = { DirectoryMode = "0775"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Mount]` section of the unit. See
|
||||
{manpage}`systemd.mount(5)` for details.
|
||||
|
@ -678,7 +701,7 @@ in rec {
|
|||
where = mkOption {
|
||||
example = "/mnt";
|
||||
type = types.str;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Absolute path of a directory of the mount point.
|
||||
Will be created if it doesn't exist. (Mandatory)
|
||||
'';
|
||||
|
@ -688,7 +711,7 @@ in rec {
|
|||
default = {};
|
||||
example = { DirectoryMode = "0775"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Automount]` section of the unit. See
|
||||
{manpage}`systemd.automount(5)` for details.
|
||||
|
@ -719,7 +742,7 @@ in rec {
|
|||
default = {};
|
||||
example = { MemoryMax = "2G"; };
|
||||
type = types.attrsOf unitOption;
|
||||
description = lib.mdDoc ''
|
||||
description = ''
|
||||
Each attribute in this set specifies an option in the
|
||||
`[Slice]` section of the unit. See
|
||||
{manpage}`systemd.slice(5)` for details.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{ config, lib, hostPkgs, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types literalMD mdDoc;
|
||||
inherit (lib) mkOption types literalMD;
|
||||
|
||||
# Reifies and correctly wraps the python test driver for
|
||||
# the respective qemu version and with or without ocr support
|
||||
|
@ -104,13 +104,13 @@ in
|
|||
options = {
|
||||
|
||||
driver = mkOption {
|
||||
description = mdDoc "Package containing a script that runs the test.";
|
||||
description = "Package containing a script that runs the test.";
|
||||
type = types.package;
|
||||
defaultText = literalMD "set by the test framework";
|
||||
};
|
||||
|
||||
hostPkgs = mkOption {
|
||||
description = mdDoc "Nixpkgs attrset used outside the nodes.";
|
||||
description = "Nixpkgs attrset used outside the nodes.";
|
||||
type = types.raw;
|
||||
example = lib.literalExpression ''
|
||||
import nixpkgs { inherit system config overlays; }
|
||||
|
@ -118,14 +118,14 @@ in
|
|||
};
|
||||
|
||||
qemu.package = mkOption {
|
||||
description = mdDoc "Which qemu package to use for the virtualisation of [{option}`nodes`](#test-opt-nodes).";
|
||||
description = "Which qemu package to use for the virtualisation of [{option}`nodes`](#test-opt-nodes).";
|
||||
type = types.package;
|
||||
default = hostPkgs.qemu_test;
|
||||
defaultText = "hostPkgs.qemu_test";
|
||||
};
|
||||
|
||||
globalTimeout = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A global timeout for the complete test, expressed in seconds.
|
||||
Beyond that timeout, every resource will be killed and released and the test will fail.
|
||||
|
||||
|
@ -137,7 +137,7 @@ in
|
|||
};
|
||||
|
||||
enableOCR = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Whether to enable Optical Character Recognition functionality for
|
||||
testing graphical programs. See [Machine objects](`ssec-machine-objects`).
|
||||
'';
|
||||
|
@ -146,7 +146,7 @@ in
|
|||
};
|
||||
|
||||
extraPythonPackages = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Python packages to add to the test driver.
|
||||
|
||||
The argument is a Python package set, similar to `pkgs.pythonPackages`.
|
||||
|
@ -159,7 +159,7 @@ in
|
|||
};
|
||||
|
||||
extraDriverArgs = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Extra arguments to pass to the test driver.
|
||||
|
||||
They become part of [{option}`driver`](#test-opt-driver) via `wrapProgram`.
|
||||
|
@ -171,7 +171,7 @@ in
|
|||
skipLint = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Do not run the linters. This may speed up your iteration cycle, but it is not something you should commit.
|
||||
'';
|
||||
};
|
||||
|
@ -179,7 +179,7 @@ in
|
|||
skipTypeCheck = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Disable type checking. This must not be enabled for new NixOS tests.
|
||||
|
||||
This may speed up your iteration cycle, unless you're working on the [{option}`testScript`](#test-opt-testScript).
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{ config, lib, moduleType, hostPkgs, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types mdDoc;
|
||||
inherit (lib) mkOption types;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
interactive = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Tests [can be run interactively](#sec-running-nixos-tests-interactively)
|
||||
using the program in the test derivation's `.driverInteractive` attribute.
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib) types mkOption mdDoc;
|
||||
inherit (lib) types mkOption;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
meta = lib.mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The [`meta`](https://nixos.org/manual/nixpkgs/stable/#chap-meta) attributes that will be set on the returned derivations.
|
||||
|
||||
Not all [`meta`](https://nixos.org/manual/nixpkgs/stable/#chap-meta) attributes are supported, but more can be added as desired.
|
||||
|
@ -16,21 +16,21 @@ in
|
|||
maintainers = lib.mkOption {
|
||||
type = types.listOf types.raw;
|
||||
default = [];
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The [list of maintainers](https://nixos.org/manual/nixpkgs/stable/#var-meta-maintainers) for this test.
|
||||
'';
|
||||
};
|
||||
timeout = lib.mkOption {
|
||||
type = types.nullOr types.int;
|
||||
default = 3600; # 1 hour
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The [{option}`test`](#test-opt-test)'s [`meta.timeout`](https://nixos.org/manual/nixpkgs/stable/#var-meta-timeout) in seconds.
|
||||
'';
|
||||
};
|
||||
broken = lib.mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Sets the [`meta.broken`](https://nixos.org/manual/nixpkgs/stable/#var-meta-broken) attribute on the [{option}`test`](#test-opt-test) derivation.
|
||||
'';
|
||||
};
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
{ lib, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types mdDoc;
|
||||
inherit (lib) mkOption types;
|
||||
in
|
||||
{
|
||||
options.name = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The name of the test.
|
||||
|
||||
This is used in the derivation names of the [{option}`driver`](#test-opt-driver) and [{option}`test`](#test-opt-test) runner.
|
||||
|
|
|
@ -5,7 +5,6 @@ let
|
|||
attrNames concatMap concatMapStrings flip forEach head
|
||||
listToAttrs mkDefault mkOption nameValuePair optionalString
|
||||
range toLower types zipListsWith zipLists
|
||||
mdDoc
|
||||
;
|
||||
|
||||
nodeNumbers =
|
||||
|
@ -89,7 +88,7 @@ let
|
|||
default = name;
|
||||
# We need to force this in specilisations, otherwise it'd be
|
||||
# readOnly = true;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The `name` in `nodes.<name>`; stable across `specialisations`.
|
||||
'';
|
||||
};
|
||||
|
@ -98,7 +97,7 @@ let
|
|||
type = types.int;
|
||||
readOnly = true;
|
||||
default = nodeNumbers.${config.virtualisation.test.nodeName};
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A unique number assigned for each node in `nodes`.
|
||||
'';
|
||||
};
|
||||
|
|
|
@ -5,7 +5,6 @@ let
|
|||
literalExpression
|
||||
literalMD
|
||||
mapAttrs
|
||||
mdDoc
|
||||
mkDefault
|
||||
mkIf
|
||||
mkOption mkForce
|
||||
|
@ -76,7 +75,7 @@ in
|
|||
nodes = mkOption {
|
||||
type = types.lazyAttrsOf config.node.type;
|
||||
visible = "shallow";
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
An attribute set of NixOS configuration modules.
|
||||
|
||||
The configurations are augmented by the [`defaults`](#test-opt-defaults) option.
|
||||
|
@ -88,7 +87,7 @@ in
|
|||
};
|
||||
|
||||
defaults = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
NixOS configuration that is applied to all [{option}`nodes`](#test-opt-nodes).
|
||||
'';
|
||||
type = types.deferredModule;
|
||||
|
@ -96,7 +95,7 @@ in
|
|||
};
|
||||
|
||||
extraBaseModules = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
NixOS configuration that, like [{option}`defaults`](#test-opt-defaults), is applied to all [{option}`nodes`](#test-opt-nodes) and can not be undone with [`specialisation.<name>.inheritParentConfig`](https://search.nixos.org/options?show=specialisation.%3Cname%3E.inheritParentConfig&from=0&size=50&sort=relevance&type=packages&query=specialisation).
|
||||
'';
|
||||
type = types.deferredModule;
|
||||
|
@ -104,7 +103,7 @@ in
|
|||
};
|
||||
|
||||
node.pkgs = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
The Nixpkgs to use for the nodes.
|
||||
|
||||
Setting this will make the `nixpkgs.*` options read-only, to avoid mistakenly testing with a Nixpkgs configuration that diverges from regular use.
|
||||
|
@ -117,7 +116,7 @@ in
|
|||
};
|
||||
|
||||
node.pkgsReadOnly = mkOption {
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Whether to make the `nixpkgs.*` options read-only. This is only relevant when [`node.pkgs`](#test-opt-node.pkgs) is set.
|
||||
|
||||
Set this to `false` when any of the [`nodes`](#test-opt-nodes) needs to configure any of the `nixpkgs.*` options. This will slow down evaluation of your test a bit.
|
||||
|
@ -130,7 +129,7 @@ in
|
|||
node.specialArgs = mkOption {
|
||||
type = types.lazyAttrsOf types.raw;
|
||||
default = { };
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
An attribute set of arbitrary values that will be made available as module arguments during the resolution of module `imports`.
|
||||
|
||||
Note that it is not possible to override these from within the NixOS configurations. If you argument is not relevant to `imports`, consider setting {option}`defaults._module.args.<name>` instead.
|
||||
|
@ -139,7 +138,7 @@ in
|
|||
|
||||
nodesCompat = mkOption {
|
||||
internal = true;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Basically `_module.args.nodes`, but with backcompat and warnings added.
|
||||
|
||||
This will go away.
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{ config, hostPkgs, lib, ... }:
|
||||
let
|
||||
inherit (lib) types mkOption mdDoc;
|
||||
inherit (lib) types mkOption;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
passthru = mkOption {
|
||||
type = types.lazyAttrsOf types.raw;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Attributes to add to the returned derivations,
|
||||
which are not necessarily part of the build.
|
||||
|
||||
|
@ -18,7 +18,7 @@ in
|
|||
|
||||
rawTestDerivation = mkOption {
|
||||
type = types.package;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Unfiltered version of `test`, for troubleshooting the test framework and `testBuildFailure` in the test framework's test suite.
|
||||
This is not intended for general use. Use `test` instead.
|
||||
'';
|
||||
|
@ -28,7 +28,7 @@ in
|
|||
test = mkOption {
|
||||
type = types.package;
|
||||
# TODO: can the interactive driver be configured to access the network?
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
Derivation that runs the test as its "build" process.
|
||||
|
||||
This implies that NixOS tests run isolated from the network, making them
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
testModuleArgs@{ config, lib, hostPkgs, nodes, moduleType, ... }:
|
||||
let
|
||||
inherit (lib) mkOption types mdDoc;
|
||||
inherit (lib) mkOption types;
|
||||
inherit (types) either str functionTo;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
testScript = mkOption {
|
||||
type = either str (functionTo str);
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A series of python declarations and statements that you write to perform
|
||||
the test.
|
||||
'';
|
||||
|
@ -25,7 +25,7 @@ in
|
|||
};
|
||||
withoutTestScriptReferences = mkOption {
|
||||
type = moduleType;
|
||||
description = mdDoc ''
|
||||
description = ''
|
||||
A parallel universe where the testScript is invalid and has no references.
|
||||
'';
|
||||
internal = true;
|
||||
|
|
|
@ -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; };
|
||||
|
|
|
@ -342,7 +342,6 @@
|
|||
./services/amqp/rabbitmq.nix
|
||||
./services/audio/alsa.nix
|
||||
./services/audio/botamusique.nix
|
||||
./services/audio/castopod.nix
|
||||
./services/audio/gmediarender.nix
|
||||
./services/audio/gonic.nix
|
||||
./services/audio/goxlr-utility.nix
|
||||
|
@ -799,6 +798,7 @@
|
|||
./services/misc/transfer-sh.nix
|
||||
./services/misc/tzupdate.nix
|
||||
./services/misc/uhub.nix
|
||||
./services/misc/wastebin.nix
|
||||
./services/misc/weechat.nix
|
||||
./services/misc/workout-tracker.nix
|
||||
./services/misc/xmr-stak.nix
|
||||
|
@ -1302,12 +1302,14 @@
|
|||
./services/web-apps/bookstack.nix
|
||||
./services/web-apps/c2fmzq-server.nix
|
||||
./services/web-apps/calibre-web.nix
|
||||
./services/web-apps/castopod.nix
|
||||
./services/web-apps/coder.nix
|
||||
./services/web-apps/changedetection-io.nix
|
||||
./services/web-apps/chatgpt-retrieval-plugin.nix
|
||||
./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
|
||||
|
|
|
@ -118,7 +118,7 @@ are already created.
|
|||
before = "service1.service";
|
||||
after = "postgresql.service";
|
||||
serviceConfig.User = "postgres";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.port}";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
|
||||
path = [ postgresql ];
|
||||
script = ''
|
||||
$PSQL service1 -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
|
||||
|
@ -139,7 +139,7 @@ are already created.
|
|||
|
||||
```nix
|
||||
{
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.port}";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
|
||||
path = [ postgresql ];
|
||||
systemd.services."service1".preStart = ''
|
||||
$PSQL -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
|
||||
|
@ -159,7 +159,7 @@ are already created.
|
|||
before = "service1.service";
|
||||
after = "postgresql.service";
|
||||
serviceConfig.User = "service1";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.port}";
|
||||
environment.PSQL = "psql --port=${toString services.postgresql.settings.port}";
|
||||
path = [ postgresql ];
|
||||
script = ''
|
||||
$PSQL -c 'GRANT SELECT ON ALL TABLES IN SCHEMA public TO "extraUser1"'
|
||||
|
|
|
@ -27,7 +27,7 @@ let
|
|||
else toString value;
|
||||
|
||||
# The main PostgreSQL configuration file.
|
||||
configFile = pkgs.writeTextDir "postgresql.conf" (concatStringsSep "\n" (mapAttrsToList (n: v: "${n} = ${toStr v}") cfg.settings));
|
||||
configFile = pkgs.writeTextDir "postgresql.conf" (concatStringsSep "\n" (mapAttrsToList (n: v: "${n} = ${toStr v}") (filterAttrs (const (x: x != null)) cfg.settings)));
|
||||
|
||||
configFileCheck = pkgs.runCommand "postgresql-configfile-check" {} ''
|
||||
${cfg.package}/bin/postgres -D${configFile} -C config_file >/dev/null
|
||||
|
@ -41,6 +41,9 @@ in
|
|||
{
|
||||
imports = [
|
||||
(mkRemovedOptionModule [ "services" "postgresql" "extraConfig" ] "Use services.postgresql.settings instead.")
|
||||
|
||||
(mkRenamedOptionModule [ "services" "postgresql" "logLinePrefix" ] [ "services" "postgresql" "settings" "log_line_prefix" ])
|
||||
(mkRenamedOptionModule [ "services" "postgresql" "port" ] [ "services" "postgresql" "settings" "port" ])
|
||||
];
|
||||
|
||||
###### interface
|
||||
|
@ -57,14 +60,6 @@ in
|
|||
example = "postgresql_15";
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5432;
|
||||
description = lib.mdDoc ''
|
||||
The port on which PostgreSQL listens.
|
||||
'';
|
||||
};
|
||||
|
||||
checkConfig = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
|
@ -352,17 +347,6 @@ in
|
|||
'';
|
||||
};
|
||||
|
||||
logLinePrefix = mkOption {
|
||||
type = types.str;
|
||||
default = "[%p] ";
|
||||
example = "%m [%p] ";
|
||||
description = lib.mdDoc ''
|
||||
A printf-style string that is output at the beginning of each log line.
|
||||
Upstream default is `'%m [%p] '`, i.e. it includes the timestamp. We do
|
||||
not include the timestamp, because journal has it anyway.
|
||||
'';
|
||||
};
|
||||
|
||||
extraPlugins = mkOption {
|
||||
type = with types; coercedTo (listOf path) (path: _ignorePg: path) (functionTo (listOf path));
|
||||
default = _: [];
|
||||
|
@ -373,7 +357,38 @@ in
|
|||
};
|
||||
|
||||
settings = mkOption {
|
||||
type = with types; attrsOf (oneOf [ bool float int str ]);
|
||||
type = with types; submodule {
|
||||
freeformType = attrsOf (oneOf [ bool float int str ]);
|
||||
options = {
|
||||
shared_preload_libraries = mkOption {
|
||||
type = nullOr (coercedTo (listOf str) (concatStringsSep ", ") str);
|
||||
default = null;
|
||||
example = literalExpression ''[ "auto_explain" "anon" ]'';
|
||||
description = mdDoc ''
|
||||
List of libraries to be preloaded.
|
||||
'';
|
||||
};
|
||||
|
||||
log_line_prefix = mkOption {
|
||||
type = types.str;
|
||||
default = "[%p] ";
|
||||
example = "%m [%p] ";
|
||||
description = lib.mdDoc ''
|
||||
A printf-style string that is output at the beginning of each log line.
|
||||
Upstream default is `'%m [%p] '`, i.e. it includes the timestamp. We do
|
||||
not include the timestamp, because journal has it anyway.
|
||||
'';
|
||||
};
|
||||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = 5432;
|
||||
description = lib.mdDoc ''
|
||||
The port on which PostgreSQL listens.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
default = {};
|
||||
description = lib.mdDoc ''
|
||||
PostgreSQL configuration. Refer to
|
||||
|
@ -439,9 +454,7 @@ in
|
|||
hba_file = "${pkgs.writeText "pg_hba.conf" cfg.authentication}";
|
||||
ident_file = "${pkgs.writeText "pg_ident.conf" cfg.identMap}";
|
||||
log_destination = "stderr";
|
||||
log_line_prefix = cfg.logLinePrefix;
|
||||
listen_addresses = if cfg.enableTCPIP then "*" else "localhost";
|
||||
port = cfg.port;
|
||||
jit = mkDefault (if cfg.enableJIT then "on" else "off");
|
||||
};
|
||||
|
||||
|
@ -524,7 +537,7 @@ in
|
|||
# Wait for PostgreSQL to be ready to accept connections.
|
||||
postStart =
|
||||
''
|
||||
PSQL="psql --port=${toString cfg.port}"
|
||||
PSQL="psql --port=${toString cfg.settings.port}"
|
||||
|
||||
while ! $PSQL -d postgres -c "" 2> /dev/null; do
|
||||
if ! kill -0 "$MAINPID"; then exit 1; fi
|
||||
|
|
|
@ -114,11 +114,11 @@ in
|
|||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if !usePostgresql then 3306 else pg.port;
|
||||
default = if usePostgresql then pg.settings.port else 3306;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} != "postgresql"
|
||||
then 3306
|
||||
else config.${options.services.postgresql.port}
|
||||
else 5432
|
||||
'';
|
||||
description = mdDoc "Database host port.";
|
||||
};
|
||||
|
|
|
@ -100,11 +100,11 @@ in
|
|||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if !usePostgresql then 3306 else pg.port;
|
||||
default = if usePostgresql then pg.settings.port else 3306;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} != "postgresql"
|
||||
then 3306
|
||||
else config.${options.services.postgresql.port}
|
||||
else 5432
|
||||
'';
|
||||
description = lib.mdDoc "Database host port.";
|
||||
};
|
||||
|
|
|
@ -20,7 +20,7 @@ in {
|
|||
extraFlags = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
description = "Extra flags passed to llama-cpp-server.";
|
||||
example = ["-c" "4096" "-ngl" "32" "--numa"];
|
||||
example = ["-c" "4096" "-ngl" "32" "--numa" "numactl"];
|
||||
default = [];
|
||||
};
|
||||
|
||||
|
|
|
@ -10,16 +10,22 @@ let
|
|||
format = pkgs.formats.yaml {};
|
||||
bundle = "${cfg.package}/share/redmine/bin/bundle";
|
||||
|
||||
databaseYml = pkgs.writeText "database.yml" ''
|
||||
production:
|
||||
adapter: ${cfg.database.type}
|
||||
database: ${cfg.database.name}
|
||||
host: ${if (cfg.database.type == "postgresql" && cfg.database.socket != null) then cfg.database.socket else cfg.database.host}
|
||||
port: ${toString cfg.database.port}
|
||||
username: ${cfg.database.user}
|
||||
password: #dbpass#
|
||||
${optionalString (cfg.database.type == "mysql2" && cfg.database.socket != null) "socket: ${cfg.database.socket}"}
|
||||
'';
|
||||
databaseSettings = {
|
||||
production = {
|
||||
adapter = cfg.database.type;
|
||||
database = if cfg.database.type == "sqlite3" then "${cfg.stateDir}/database.sqlite3" else cfg.database.name;
|
||||
} // optionalAttrs (cfg.database.type != "sqlite3") {
|
||||
host = if (cfg.database.type == "postgresql" && cfg.database.socket != null) then cfg.database.socket else cfg.database.host;
|
||||
port = cfg.database.port;
|
||||
username = cfg.database.user;
|
||||
} // optionalAttrs (cfg.database.type != "sqlite3" && cfg.database.passwordFile != null) {
|
||||
password = "#dbpass#";
|
||||
} // optionalAttrs (cfg.database.type == "mysql2" && cfg.database.socket != null) {
|
||||
socket = cfg.database.socket;
|
||||
};
|
||||
};
|
||||
|
||||
databaseYml = format.generate "database.yml" databaseSettings;
|
||||
|
||||
configurationYml = format.generate "configuration.yml" cfg.settings;
|
||||
additionalEnvironment = pkgs.writeText "additional_environment.rb" cfg.extraEnv;
|
||||
|
@ -145,7 +151,7 @@ in
|
|||
|
||||
database = {
|
||||
type = mkOption {
|
||||
type = types.enum [ "mysql2" "postgresql" ];
|
||||
type = types.enum [ "mysql2" "postgresql" "sqlite3" ];
|
||||
example = "postgresql";
|
||||
default = "mysql2";
|
||||
description = lib.mdDoc "Database engine to use.";
|
||||
|
@ -261,7 +267,7 @@ in
|
|||
config = mkIf cfg.enable {
|
||||
|
||||
assertions = [
|
||||
{ assertion = cfg.database.passwordFile != null || cfg.database.socket != null;
|
||||
{ assertion = cfg.database.type != "sqlite3" -> cfg.database.passwordFile != null || cfg.database.socket != null;
|
||||
message = "one of services.redmine.database.socket or services.redmine.database.passwordFile must be set";
|
||||
}
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.user == cfg.user;
|
||||
|
@ -270,7 +276,7 @@ in
|
|||
{ assertion = pgsqlLocal -> cfg.database.user == cfg.database.name;
|
||||
message = "services.redmine.database.user and services.redmine.database.name must be the same when using a local postgresql database";
|
||||
}
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.socket != null;
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.type != "sqlite3" && cfg.database.socket != null;
|
||||
message = "services.redmine.database.socket must be set if services.redmine.database.createLocally is set to true";
|
||||
}
|
||||
{ assertion = cfg.database.createLocally -> cfg.database.host == "localhost";
|
||||
|
@ -395,9 +401,13 @@ in
|
|||
|
||||
|
||||
# handle database.passwordFile & permissions
|
||||
DBPASS=${optionalString (cfg.database.passwordFile != null) "$(head -n1 ${cfg.database.passwordFile})"}
|
||||
cp -f ${databaseYml} "${cfg.stateDir}/config/database.yml"
|
||||
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
|
||||
|
||||
${optionalString ((cfg.database.type != "sqlite3") && (cfg.database.passwordFile != null)) ''
|
||||
DBPASS="$(head -n1 ${cfg.database.passwordFile})"
|
||||
sed -e "s,#dbpass#,$DBPASS,g" -i "${cfg.stateDir}/config/database.yml"
|
||||
''}
|
||||
|
||||
chmod 440 "${cfg.stateDir}/config/database.yml"
|
||||
|
||||
|
||||
|
|
158
nixos/modules/services/misc/wastebin.nix
Normal file
158
nixos/modules/services/misc/wastebin.nix
Normal file
|
@ -0,0 +1,158 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.services.wastebin;
|
||||
inherit (lib)
|
||||
mkEnableOption mkPackageOption mkIf mkOption
|
||||
types mapAttrs isBool getExe boolToString optionalAttrs;
|
||||
in
|
||||
{
|
||||
|
||||
options.services.wastebin = {
|
||||
|
||||
enable = mkEnableOption "Wastenbin pastebin service";
|
||||
|
||||
package = mkPackageOption pkgs "wastebin" { };
|
||||
|
||||
stateDir = mkOption {
|
||||
type = types.path;
|
||||
default = "/var/lib/wastebin";
|
||||
description = "State directory of the daemon.";
|
||||
};
|
||||
|
||||
secretFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
example = "/run/secrets/wastebin.env";
|
||||
description = ''
|
||||
Path to file containing sensitive environment variables.
|
||||
Some variables that can be considered secrets are:
|
||||
|
||||
- WASTEBIN_PASSWORD_SALT:
|
||||
salt used to hash user passwords used for encrypting pastes.
|
||||
|
||||
- WASTEBIN_SIGNING_KEY:
|
||||
sets the key to sign cookies. If not set, a random key will be
|
||||
generated which means cookies will become invalid after restarts and
|
||||
paste creators will not be able to delete their pastes anymore.
|
||||
'';
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
|
||||
description = ''
|
||||
Additional configuration for wastebin, see
|
||||
<https://github.com/matze/wastebin#usage> for supported values.
|
||||
For secrets use secretFile option instead.
|
||||
'';
|
||||
|
||||
type = types.submodule {
|
||||
|
||||
freeformType = with types; attrsOf (oneOf [ bool int str ]);
|
||||
|
||||
options = {
|
||||
|
||||
WASTEBIN_ADDRESS_PORT = mkOption {
|
||||
type = types.str;
|
||||
default = "0.0.0.0:8088";
|
||||
description = "Address and port to bind to";
|
||||
};
|
||||
|
||||
WASTEBIN_BASE_URL = mkOption {
|
||||
default = "http://localhost";
|
||||
example = "https://myhost.tld";
|
||||
type = types.str;
|
||||
description = ''
|
||||
Base URL for the QR code display. If not set, the user agent's Host
|
||||
header field is used as an approximation.
|
||||
'';
|
||||
};
|
||||
|
||||
WASTEBIN_CACHE_SIZE = mkOption {
|
||||
default = 128;
|
||||
type = types.int;
|
||||
description = "Number of rendered syntax highlight items to cache. Can be disabled by setting to 0.";
|
||||
};
|
||||
|
||||
WASTEBIN_DATABASE_PATH = mkOption {
|
||||
default = "/var/lib/wastebin/sqlite3.db"; # TODO make this default to stateDir/sqlite3.db
|
||||
type = types.str;
|
||||
description = "Path to the sqlite3 database file. If not set, an in-memory database is used.";
|
||||
};
|
||||
|
||||
WASTEBIN_HTTP_TIMEOUT = mkOption {
|
||||
default = 5;
|
||||
type = types.int;
|
||||
description = "Maximum number of seconds a request can be processed until wastebin responds with 408";
|
||||
};
|
||||
|
||||
WASTEBIN_MAX_BODY_SIZE = mkOption {
|
||||
default = 1024;
|
||||
type = types.int;
|
||||
description = "Number of bytes to accept for POST requests";
|
||||
};
|
||||
|
||||
WASTEBIN_TITLE = mkOption {
|
||||
default = "wastebin";
|
||||
type = types.str;
|
||||
description = "Overrides the HTML page title";
|
||||
};
|
||||
|
||||
RUST_LOG = mkOption {
|
||||
default = "info";
|
||||
type = types.str;
|
||||
description =
|
||||
''
|
||||
Influences logging. Besides the typical trace, debug, info etc.
|
||||
keys, you can also set the tower_http key to some log level to get
|
||||
additional information request and response logs.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
default = { };
|
||||
|
||||
example = {
|
||||
WASTEBIN_TITLE = "My awesome pastebin";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable
|
||||
{
|
||||
systemd.services.wastebin = {
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = mapAttrs (_: v: if isBool v then boolToString v else toString v) cfg.settings;
|
||||
serviceConfig = {
|
||||
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
|
||||
DevicePolicy = "closed";
|
||||
DynamicUser = true;
|
||||
ExecStart = "${getExe cfg.package}";
|
||||
LockPersonality = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
PrivateDevices = true;
|
||||
PrivateUsers = true;
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectKernelTunables = true;
|
||||
ProtectProc = "invisible";
|
||||
RestrictAddressFamilies = [ "AF_INET" "AF_INET6" ];
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
SystemCallArchitectures = [ "native" ];
|
||||
SystemCallFilter = [ "@system-service" ];
|
||||
StateDirectory = baseNameOf cfg.stateDir;
|
||||
ReadWritePaths = cfg.stateDir;
|
||||
} // optionalAttrs (cfg.secretFile != null) {
|
||||
EnvironmentFile = cfg.secretFile;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ pinpox ];
|
||||
}
|
|
@ -103,11 +103,11 @@ in
|
|||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if cfg.database.type == "mysql" then mysql.port else pgsql.port;
|
||||
default = if cfg.database.type == "mysql" then mysql.port else pgsql.services.port;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} == "mysql"
|
||||
then config.${options.services.mysql.port}
|
||||
else config.${options.services.postgresql.port}
|
||||
else config.services.postgresql.settings.port
|
||||
'';
|
||||
description = lib.mdDoc "Database host port.";
|
||||
};
|
||||
|
|
|
@ -95,11 +95,11 @@ in
|
|||
|
||||
port = mkOption {
|
||||
type = types.port;
|
||||
default = if cfg.database.type == "mysql" then mysql.port else pgsql.port;
|
||||
default = if cfg.database.type == "mysql" then mysql.port else pgsql.settings.port;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} == "mysql"
|
||||
then config.${options.services.mysql.port}
|
||||
else config.${options.services.postgresql.port}
|
||||
else config.services.postgresql.settings.port
|
||||
'';
|
||||
description = lib.mdDoc "Database host port.";
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -4,6 +4,7 @@ Castopod is an open-source hosting platform made for podcasters who want to enga
|
|||
|
||||
## Quickstart {#module-services-castopod-quickstart}
|
||||
|
||||
Configure ACME (https://nixos.org/manual/nixos/unstable/#module-security-acme).
|
||||
Use the following configuration to start a public instance of Castopod on `castopod.example.com` domain:
|
||||
|
||||
```nix
|
|
@ -4,7 +4,6 @@ let
|
|||
fpm = config.services.phpfpm.pools.castopod;
|
||||
|
||||
user = "castopod";
|
||||
stateDirectory = "/var/lib/castopod";
|
||||
|
||||
# https://docs.castopod.org/getting-started/install.html#requirements
|
||||
phpPackage = pkgs.php.withExtensions ({ enabled, all }: with all; [
|
||||
|
@ -29,6 +28,15 @@ in
|
|||
defaultText = lib.literalMD "pkgs.castopod";
|
||||
description = lib.mdDoc "Which Castopod package to use.";
|
||||
};
|
||||
dataDir = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = "/var/lib/castopod";
|
||||
description = lib.mdDoc ''
|
||||
The path where castopod stores all data. This path must be in sync
|
||||
with the castopod package (where it is hardcoded during the build in
|
||||
accordance with its own `dataDir` argument).
|
||||
'';
|
||||
};
|
||||
database = {
|
||||
createLocally = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
|
@ -59,6 +67,8 @@ in
|
|||
description = lib.mdDoc ''
|
||||
A file containing the password corresponding to
|
||||
[](#opt-services.castopod.database.user).
|
||||
|
||||
This file is loaded using systemd LoadCredentials.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
@ -85,6 +95,8 @@ in
|
|||
Environment file to inject e.g. secrets into the configuration.
|
||||
See [](https://code.castopod.org/adaures/castopod/-/blob/main/.env.example)
|
||||
for available environment variables.
|
||||
|
||||
This file is loaded using systemd LoadCredentials.
|
||||
'';
|
||||
};
|
||||
configureNginx = lib.mkOption {
|
||||
|
@ -111,6 +123,19 @@ in
|
|||
Options for Castopod's PHP pool. See the documentation on `php-fpm.conf` for details on configuration directives.
|
||||
'';
|
||||
};
|
||||
maxUploadSize = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "512M";
|
||||
description = lib.mdDoc ''
|
||||
Maximum supported size for a file upload in. Maximum HTTP body
|
||||
size is set to this value for nginx and PHP (because castopod doesn't
|
||||
support chunked uploads yet:
|
||||
https://code.castopod.org/adaures/castopod/-/issues/330).
|
||||
|
||||
Note, that practical upload size limit is smaller. For example, with
|
||||
512 MiB setting - around 500 MiB is possible.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -120,13 +145,13 @@ in
|
|||
sslEnabled = with config.services.nginx.virtualHosts.${cfg.localDomain}; addSSL || forceSSL || onlySSL || enableACME || useACMEHost != null;
|
||||
baseURL = "http${lib.optionalString sslEnabled "s"}://${cfg.localDomain}";
|
||||
in
|
||||
lib.mapAttrs (name: lib.mkDefault) {
|
||||
lib.mapAttrs (_: lib.mkDefault) {
|
||||
"app.forceGlobalSecureRequests" = sslEnabled;
|
||||
"app.baseURL" = baseURL;
|
||||
|
||||
"media.baseURL" = "/";
|
||||
"media.baseURL" = baseURL;
|
||||
"media.root" = "media";
|
||||
"media.storage" = stateDirectory;
|
||||
"media.storage" = cfg.dataDir;
|
||||
|
||||
"admin.gateway" = "admin";
|
||||
"auth.gateway" = "auth";
|
||||
|
@ -142,13 +167,13 @@ in
|
|||
services.phpfpm.pools.castopod = {
|
||||
inherit user;
|
||||
group = config.services.nginx.group;
|
||||
phpPackage = phpPackage;
|
||||
inherit phpPackage;
|
||||
phpOptions = ''
|
||||
# https://code.castopod.org/adaures/castopod/-/blob/main/docker/production/app/uploads.ini
|
||||
# https://code.castopod.org/adaures/castopod/-/blob/develop/docker/production/common/uploads.template.ini
|
||||
file_uploads = On
|
||||
memory_limit = 512M
|
||||
upload_max_filesize = 500M
|
||||
post_max_size = 512M
|
||||
upload_max_filesize = ${cfg.maxUploadSize}
|
||||
post_max_size = ${cfg.maxUploadSize}
|
||||
max_execution_time = 300
|
||||
max_input_time = 300
|
||||
'';
|
||||
|
@ -165,45 +190,50 @@ in
|
|||
path = [ pkgs.openssl phpPackage ];
|
||||
script =
|
||||
let
|
||||
envFile = "${stateDirectory}/.env";
|
||||
envFile = "${cfg.dataDir}/.env";
|
||||
media = "${cfg.settings."media.storage"}/${cfg.settings."media.root"}";
|
||||
in
|
||||
''
|
||||
mkdir -p ${stateDirectory}/writable/{cache,logs,session,temp,uploads}
|
||||
mkdir -p ${cfg.dataDir}/writable/{cache,logs,session,temp,uploads}
|
||||
|
||||
if [ ! -d ${lib.escapeShellArg media} ]; then
|
||||
cp --no-preserve=mode,ownership -r ${cfg.package}/share/castopod/public/media ${lib.escapeShellArg media}
|
||||
fi
|
||||
|
||||
if [ ! -f ${stateDirectory}/salt ]; then
|
||||
openssl rand -base64 33 > ${stateDirectory}/salt
|
||||
if [ ! -f ${cfg.dataDir}/salt ]; then
|
||||
openssl rand -base64 33 > ${cfg.dataDir}/salt
|
||||
fi
|
||||
|
||||
cat <<'EOF' > ${envFile}
|
||||
${lib.generators.toKeyValue { } cfg.settings}
|
||||
EOF
|
||||
|
||||
echo "analytics.salt=$(cat ${stateDirectory}/salt)" >> ${envFile}
|
||||
echo "analytics.salt=$(cat ${cfg.dataDir}/salt)" >> ${envFile}
|
||||
|
||||
${if (cfg.database.passwordFile != null) then ''
|
||||
echo "database.default.password=$(cat ${lib.escapeShellArg cfg.database.passwordFile})" >> ${envFile}
|
||||
echo "database.default.password=$(cat "$CREDENTIALS_DIRECTORY/dbpasswordfile)" >> ${envFile}
|
||||
'' else ''
|
||||
echo "database.default.password=" >> ${envFile}
|
||||
''}
|
||||
|
||||
${lib.optionalString (cfg.environmentFile != null) ''
|
||||
cat ${lib.escapeShellArg cfg.environmentFile}) >> ${envFile}
|
||||
cat "$CREDENTIALS_DIRECTORY/envfile" >> ${envFile}
|
||||
''}
|
||||
|
||||
php spark castopod:database-update
|
||||
php ${cfg.package}/share/castopod/spark castopod:database-update
|
||||
'';
|
||||
serviceConfig = {
|
||||
StateDirectory = "castopod";
|
||||
LoadCredential = lib.optional (cfg.environmentFile != null)
|
||||
"envfile:${cfg.environmentFile}"
|
||||
++ (lib.optional (cfg.database.passwordFile != null)
|
||||
"dbpasswordfile:${cfg.database.passwordFile}");
|
||||
WorkingDirectory = "${cfg.package}/share/castopod";
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
User = user;
|
||||
Group = config.services.nginx.group;
|
||||
ReadWritePaths = cfg.dataDir;
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -212,9 +242,7 @@ in
|
|||
wantedBy = [ "multi-user.target" ];
|
||||
path = [ phpPackage ];
|
||||
script = ''
|
||||
php public/index.php scheduled-activities
|
||||
php public/index.php scheduled-websub-publish
|
||||
php public/index.php scheduled-video-clips
|
||||
php ${cfg.package}/share/castopod/spark tasks:run
|
||||
'';
|
||||
serviceConfig = {
|
||||
StateDirectory = "castopod";
|
||||
|
@ -222,6 +250,8 @@ in
|
|||
Type = "oneshot";
|
||||
User = user;
|
||||
Group = config.services.nginx.group;
|
||||
ReadWritePaths = cfg.dataDir;
|
||||
LogLevelMax = "notice"; # otherwise periodic tasks flood the journal
|
||||
};
|
||||
};
|
||||
|
||||
|
@ -251,6 +281,7 @@ in
|
|||
extraConfig = ''
|
||||
try_files $uri $uri/ /index.php?$args;
|
||||
index index.php index.html;
|
||||
client_max_body_size ${cfg.maxUploadSize};
|
||||
'';
|
||||
|
||||
locations."^~ /${cfg.settings."media.root"}/" = {
|
||||
|
@ -278,7 +309,7 @@ in
|
|||
};
|
||||
};
|
||||
|
||||
users.users.${user} = lib.mapAttrs (name: lib.mkDefault) {
|
||||
users.users.${user} = lib.mapAttrs (_: lib.mkDefault) {
|
||||
description = "Castopod user";
|
||||
isSystemUser = true;
|
||||
group = config.services.nginx.group;
|
32
nixos/modules/services/web-apps/davis.md
Normal file
32
nixos/modules/services/web-apps/davis.md
Normal 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`.
|
554
nixos/modules/services/web-apps/davis.nix
Normal file
554
nixos/modules/services/web-apps/davis.nix
Normal 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;
|
||||
};
|
||||
}
|
|
@ -346,8 +346,8 @@ in
|
|||
|
||||
port = lib.mkOption {
|
||||
type = types.port;
|
||||
default = options.services.postgresql.port.default;
|
||||
defaultText = lib.literalExpression "options.services.postgresql.port.default";
|
||||
default = config.services.postgresql.settings.port;
|
||||
defaultText = lib.literalExpression "config.services.postgresql.settings.port";
|
||||
description = lib.mdDoc ''
|
||||
The port of the database Invidious should use.
|
||||
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -76,11 +76,11 @@ in
|
|||
type = types.port;
|
||||
default =
|
||||
if cfg.database.type == "mysql" then config.services.mysql.port
|
||||
else if cfg.database.type == "pgsql" then config.services.postgresql.port
|
||||
else if cfg.database.type == "pgsql" then config.services.postgresql.settings.port
|
||||
else 1521;
|
||||
defaultText = literalExpression ''
|
||||
if config.${opt.database.type} == "mysql" then config.${options.services.mysql.port}
|
||||
else if config.${opt.database.type} == "pgsql" then config.${options.services.postgresql.port}
|
||||
else if config.${opt.database.type} == "pgsql" then config.services.postgresql.settings.port
|
||||
else 1521
|
||||
'';
|
||||
description = lib.mdDoc "Database host port.";
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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) [
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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 {};
|
||||
|
@ -457,7 +458,7 @@ in {
|
|||
kerberos = handleTest ./kerberos/default.nix {};
|
||||
kernel-generic = handleTest ./kernel-generic.nix {};
|
||||
kernel-latest-ath-user-regd = handleTest ./kernel-latest-ath-user-regd.nix {};
|
||||
kernel-rust = handleTestOn ["x86_64-linux"] ./kernel-rust.nix {};
|
||||
kernel-rust = handleTest ./kernel-rust.nix {};
|
||||
keter = handleTest ./keter.nix {};
|
||||
kexec = handleTest ./kexec.nix {};
|
||||
keycloak = discoverTests (import ./keycloak.nix);
|
||||
|
@ -985,6 +986,7 @@ in {
|
|||
vsftpd = handleTest ./vsftpd.nix {};
|
||||
warzone2100 = handleTest ./warzone2100.nix {};
|
||||
wasabibackend = handleTest ./wasabibackend.nix {};
|
||||
wastebin = handleTest ./wastebin.nix {};
|
||||
watchdogd = handleTest ./watchdogd.nix {};
|
||||
webhook = runTest ./webhook.nix;
|
||||
wiki-js = handleTest ./wiki-js.nix {};
|
||||
|
|
|
@ -4,74 +4,218 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
|||
meta = with lib.maintainers; {
|
||||
maintainers = [ alexoundos misuzu ];
|
||||
};
|
||||
|
||||
nodes.castopod = { nodes, ... }: {
|
||||
# otherwise 500 MiB file upload fails!
|
||||
virtualisation.diskSize = 512 + 3 * 512;
|
||||
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
networking.extraHosts = ''
|
||||
127.0.0.1 castopod.example.com
|
||||
'';
|
||||
networking.extraHosts =
|
||||
lib.strings.concatStringsSep "\n"
|
||||
(lib.attrsets.mapAttrsToList
|
||||
(name: _: "127.0.0.1 ${name}")
|
||||
nodes.castopod.services.nginx.virtualHosts);
|
||||
|
||||
services.castopod = {
|
||||
enable = true;
|
||||
database.createLocally = true;
|
||||
localDomain = "castopod.example.com";
|
||||
maxUploadSize = "512M";
|
||||
};
|
||||
environment.systemPackages =
|
||||
let
|
||||
username = "admin";
|
||||
email = "admin@castood.example.com";
|
||||
password = "v82HmEp5";
|
||||
testRunner = pkgs.writers.writePython3Bin "test-runner"
|
||||
{
|
||||
libraries = [ pkgs.python3Packages.selenium ];
|
||||
flakeIgnore = [
|
||||
"E501"
|
||||
];
|
||||
} ''
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver import Firefox
|
||||
from selenium.webdriver.firefox.options import Options
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
from selenium.webdriver.support import expected_conditions as EC
|
||||
|
||||
options = Options()
|
||||
options.add_argument('--headless')
|
||||
driver = Firefox(options=options)
|
||||
try:
|
||||
driver.implicitly_wait(20)
|
||||
driver.get('http://castopod.example.com/cp-install')
|
||||
|
||||
wait = WebDriverWait(driver, 10)
|
||||
|
||||
wait.until(EC.title_contains("installer"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#username').send_keys(
|
||||
'${username}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
|
||||
'${email}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
|
||||
'${password}'
|
||||
)
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Finish install')]").click()
|
||||
|
||||
wait.until(EC.title_contains("Auth"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
|
||||
'${email}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
|
||||
'${password}'
|
||||
)
|
||||
driver.find_element(By.XPATH, "//button[contains(., 'Login')]").click()
|
||||
|
||||
wait.until(EC.title_contains("Admin dashboard"))
|
||||
finally:
|
||||
driver.close()
|
||||
driver.quit()
|
||||
'';
|
||||
in
|
||||
[ pkgs.firefox-unwrapped pkgs.geckodriver testRunner ];
|
||||
};
|
||||
|
||||
nodes.client = { nodes, pkgs, lib, ... }:
|
||||
let
|
||||
domain = nodes.castopod.services.castopod.localDomain;
|
||||
|
||||
getIP = node:
|
||||
(builtins.head node.networking.interfaces.eth1.ipv4.addresses).address;
|
||||
|
||||
targetPodcastSize = 500 * 1024 * 1024;
|
||||
lameMp3Bitrate = 348300;
|
||||
lameMp3FileAdjust = -800;
|
||||
targetPodcastDuration = toString
|
||||
((targetPodcastSize + lameMp3FileAdjust) / (lameMp3Bitrate / 8));
|
||||
bannerWidth = 3000;
|
||||
banner = pkgs.runCommand "gen-castopod-cover.jpg" { } ''
|
||||
${pkgs.imagemagick}/bin/magick `
|
||||
`-background green -bordercolor white -gravity northwest xc:black `
|
||||
`-duplicate 99 `
|
||||
`-seed 1 -resize "%[fx:rand()*72+24]" `
|
||||
`-seed 0 -rotate "%[fx:rand()*360]" -border 6x6 -splice 16x36 `
|
||||
`-seed 0 -rotate "%[fx:floor(rand()*4)*90]" -resize "150x50!" `
|
||||
`+append -crop 10x1@ +repage -roll "+%[fx:(t%2)*72]+0" -append `
|
||||
`-resize ${toString bannerWidth} -quality 1 $out
|
||||
'';
|
||||
|
||||
coverWidth = toString 3000;
|
||||
cover = pkgs.runCommand "gen-castopod-banner.jpg" { } ''
|
||||
${pkgs.imagemagick}/bin/magick `
|
||||
`-background white -bordercolor white -gravity northwest xc:black `
|
||||
`-duplicate 99 `
|
||||
`-seed 1 -resize "%[fx:rand()*72+24]" `
|
||||
`-seed 0 -rotate "%[fx:rand()*360]" -border 6x6 -splice 36x36 `
|
||||
`-seed 0 -rotate "%[fx:floor(rand()*4)*90]" -resize "144x144!" `
|
||||
`+append -crop 10x1@ +repage -roll "+%[fx:(t%2)*72]+0" -append `
|
||||
`-resize ${coverWidth} -quality 1 $out
|
||||
'';
|
||||
in
|
||||
{
|
||||
networking.extraHosts =
|
||||
lib.strings.concatStringsSep "\n"
|
||||
(lib.attrsets.mapAttrsToList
|
||||
(name: _: "${getIP nodes.castopod} ${name}")
|
||||
nodes.castopod.services.nginx.virtualHosts);
|
||||
|
||||
environment.systemPackages =
|
||||
let
|
||||
username = "admin";
|
||||
email = "admin@${domain}";
|
||||
password = "Abcd1234";
|
||||
podcastTitle = "Some Title";
|
||||
episodeTitle = "Episode Title";
|
||||
browser-test = pkgs.writers.writePython3Bin "browser-test"
|
||||
{
|
||||
libraries = [ pkgs.python3Packages.selenium ];
|
||||
flakeIgnore = [ "E124" "E501" ];
|
||||
} ''
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver import Firefox
|
||||
from selenium.webdriver.firefox.options import Options
|
||||
from selenium.webdriver.firefox.service import Service
|
||||
from selenium.webdriver.support.ui import WebDriverWait
|
||||
from selenium.webdriver.support import expected_conditions as EC
|
||||
from subprocess import STDOUT
|
||||
import logging
|
||||
|
||||
selenium_logger = logging.getLogger("selenium")
|
||||
selenium_logger.setLevel(logging.DEBUG)
|
||||
selenium_logger.addHandler(logging.StreamHandler())
|
||||
|
||||
options = Options()
|
||||
options.add_argument('--headless')
|
||||
service = Service(log_output=STDOUT)
|
||||
driver = Firefox(options=options, service=service)
|
||||
driver = Firefox(options=options)
|
||||
driver.implicitly_wait(30)
|
||||
|
||||
# install ##########################################################
|
||||
|
||||
driver.get('http://${domain}/cp-install')
|
||||
|
||||
wait = WebDriverWait(driver, 20)
|
||||
|
||||
wait.until(EC.title_contains("installer"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#username').send_keys(
|
||||
'${username}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
|
||||
'${email}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
|
||||
'${password}'
|
||||
)
|
||||
driver.find_element(By.XPATH,
|
||||
"//button[contains(., 'Finish install')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("Auth"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#email').send_keys(
|
||||
'${email}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#password').send_keys(
|
||||
'${password}'
|
||||
)
|
||||
driver.find_element(By.XPATH,
|
||||
"//button[contains(., 'Login')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("Admin dashboard"))
|
||||
|
||||
# create podcast ###################################################
|
||||
|
||||
driver.get('http://${domain}/admin/podcasts/new')
|
||||
|
||||
wait.until(EC.title_contains("Create podcast"))
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#cover').send_keys(
|
||||
'${cover}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#banner').send_keys(
|
||||
'${banner}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#title').send_keys(
|
||||
'${podcastTitle}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#handle').send_keys(
|
||||
'some_handle'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#description').send_keys(
|
||||
'Some description'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#owner_name').send_keys(
|
||||
'Owner Name'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#owner_email').send_keys(
|
||||
'owner@email.xyz'
|
||||
)
|
||||
driver.find_element(By.XPATH,
|
||||
"//button[contains(., 'Create podcast')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("${podcastTitle}"))
|
||||
|
||||
driver.find_element(By.XPATH,
|
||||
"//span[contains(., 'Add an episode')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("Add an episode"))
|
||||
|
||||
# upload podcast ###################################################
|
||||
|
||||
driver.find_element(By.CSS_SELECTOR, '#audio_file').send_keys(
|
||||
'/tmp/podcast.mp3'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#cover').send_keys(
|
||||
'${cover}'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#description').send_keys(
|
||||
'Episode description'
|
||||
)
|
||||
driver.find_element(By.CSS_SELECTOR, '#title').send_keys(
|
||||
'${episodeTitle}'
|
||||
)
|
||||
driver.find_element(By.XPATH,
|
||||
"//button[contains(., 'Create episode')]"
|
||||
).click()
|
||||
|
||||
wait.until(EC.title_contains("${episodeTitle}"))
|
||||
|
||||
driver.close()
|
||||
driver.quit()
|
||||
'';
|
||||
in
|
||||
[
|
||||
pkgs.firefox-unwrapped
|
||||
pkgs.geckodriver
|
||||
browser-test
|
||||
(pkgs.writeShellApplication {
|
||||
name = "build-mp3";
|
||||
runtimeInputs = with pkgs; [ sox lame ];
|
||||
text = ''
|
||||
out=/tmp/podcast.mp3
|
||||
sox -n -r 48000 -t wav - synth ${targetPodcastDuration} sine 440 `
|
||||
`| lame --noreplaygain -cbr -q 9 -b 320 - $out
|
||||
FILESIZE="$(stat -c%s $out)"
|
||||
[ "$FILESIZE" -gt 0 ]
|
||||
[ "$FILESIZE" -le "${toString targetPodcastSize}" ]
|
||||
'';
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
castopod.wait_for_unit("castopod-setup.service")
|
||||
|
@ -79,9 +223,11 @@ import ./make-test-python.nix ({ pkgs, lib, ... }:
|
|||
castopod.wait_for_unit("nginx.service")
|
||||
castopod.wait_for_open_port(80)
|
||||
castopod.wait_until_succeeds("curl -sS -f http://castopod.example.com")
|
||||
castopod.succeed("curl -s http://localhost/cp-install | grep 'Create your Super Admin account' > /dev/null")
|
||||
|
||||
with subtest("Create superadmin and log in"):
|
||||
castopod.succeed("PYTHONUNBUFFERED=1 systemd-cat -t test-runner test-runner")
|
||||
client.succeed("build-mp3")
|
||||
|
||||
with subtest("Create superadmin, log in, create and upload a podcast"):
|
||||
client.succeed(\
|
||||
"PYTHONUNBUFFERED=1 systemd-cat -t browser-test browser-test")
|
||||
'';
|
||||
})
|
||||
|
|
59
nixos/tests/davis.nix
Normal file
59
nixos/tests/davis.nix
Normal 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* ]]"
|
||||
)
|
||||
'';
|
||||
}
|
||||
)
|
|
@ -18,7 +18,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
|||
host invidious invidious samenet scram-sha-256
|
||||
'';
|
||||
};
|
||||
networking.firewall.allowedTCPPorts = [ config.services.postgresql.port ];
|
||||
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
|
||||
};
|
||||
machine = { config, lib, pkgs, ... }: {
|
||||
services.invidious = {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
}:
|
||||
|
||||
let
|
||||
inherit (pkgs.lib) const filterAttrs mapAttrs;
|
||||
inherit (pkgs.lib) const filterAttrs mapAttrs meta;
|
||||
|
||||
kernelRustTest = kernelPackages: import ./make-test-python.nix ({ lib, ... }: {
|
||||
name = "kernel-rust";
|
||||
|
@ -38,6 +38,8 @@ let
|
|||
inherit (builtins.tryEval (
|
||||
x.rust-out-of-tree-module or null != null
|
||||
)) success value;
|
||||
in success && value))
|
||||
available =
|
||||
meta.availableOn pkgs.stdenv.hostPlatform x.rust-out-of-tree-module;
|
||||
in success && value && available))
|
||||
pkgs.linuxKernel.vanillaPackages;
|
||||
in mapAttrs (const kernelRustTest) kernels
|
||||
|
|
|
@ -76,7 +76,7 @@ in
|
|||
systemd.services.postgresql.postStart = lib.mkAfter ''
|
||||
$PSQL -tAd miniflux -c 'CREATE EXTENSION hstore;'
|
||||
'';
|
||||
networking.firewall.allowedTCPPorts = [ config.services.postgresql.port ];
|
||||
networking.firewall.allowedTCPPorts = [ config.services.postgresql.settings.port ];
|
||||
};
|
||||
externalDb = { ... }: {
|
||||
security.apparmor.enable = true;
|
||||
|
|
|
@ -7,7 +7,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
|||
services.postgresql = {
|
||||
enable = true;
|
||||
extraPlugins = ps: [ ps.anonymizer ];
|
||||
settings.shared_preload_libraries = "anon";
|
||||
settings.shared_preload_libraries = [ "anon" ];
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ in
|
|||
pgmanage = {
|
||||
enable = true;
|
||||
connections = {
|
||||
${conn} = "hostaddr=127.0.0.1 port=${toString config.services.postgresql.port} dbname=postgres";
|
||||
${conn} = "hostaddr=127.0.0.1 port=${toString config.services.postgresql.settings.port} dbname=postgres";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
19
nixos/tests/wastebin.nix
Normal file
19
nixos/tests/wastebin.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
||||
name = "wastebin";
|
||||
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ pinpox ];
|
||||
};
|
||||
|
||||
nodes.machine = { pkgs, ... }: {
|
||||
services.wastebin = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("wastebin.service")
|
||||
machine.wait_for_open_port(8088)
|
||||
machine.succeed("curl --fail http://localhost:8088/")
|
||||
'';
|
||||
})
|
|
@ -33,7 +33,7 @@ in
|
|||
extraHosts = hosts;
|
||||
firewall.allowedTCPPorts = [
|
||||
config.services.redis.servers.mastodon.port
|
||||
config.services.postgresql.port
|
||||
config.services.postgresql.settings.port
|
||||
];
|
||||
};
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
, ffmpeg-headless
|
||||
, lib
|
||||
, nixosTests
|
||||
, stateDirectory ? "/var/lib/castopod"
|
||||
, dataDir ? "/var/lib/castopod"
|
||||
}:
|
||||
stdenv.mkDerivation {
|
||||
pname = "castopod";
|
||||
|
@ -20,13 +20,16 @@ stdenv.mkDerivation {
|
|||
postPatch = ''
|
||||
# not configurable at runtime unfortunately:
|
||||
substituteInPlace app/Config/Paths.php \
|
||||
--replace "__DIR__ . '/../../writable'" "'${stateDirectory}/writable'"
|
||||
--replace "__DIR__ . '/../../writable'" "'${dataDir}/writable'"
|
||||
|
||||
# configuration file must be writable, place it to ${stateDirectory}
|
||||
substituteInPlace modules/Admin/Controllers/DashboardController.php \
|
||||
--replace "disk_total_space('./')" "disk_total_space('${dataDir}')"
|
||||
|
||||
# configuration file must be writable, place it to ${dataDir}
|
||||
substituteInPlace modules/Install/Controllers/InstallController.php \
|
||||
--replace "ROOTPATH" "'${stateDirectory}/'"
|
||||
--replace "ROOTPATH" "'${dataDir}/'"
|
||||
substituteInPlace public/index.php spark \
|
||||
--replace "DotEnv(ROOTPATH)" "DotEnv('${stateDirectory}')"
|
||||
--replace "DotEnv(ROOTPATH)" "DotEnv('${dataDir}')"
|
||||
|
||||
# ffmpeg is required for Video Clips feature
|
||||
substituteInPlace modules/MediaClipper/VideoClipper.php \
|
||||
|
|
|
@ -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" ];
|
||||
|
||||
|
|
125
pkgs/applications/audio/pwvucontrol/Cargo.lock
generated
125
pkgs/applications/audio/pwvucontrol/Cargo.lock
generated
|
@ -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",
|
||||
|
|
|
@ -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; {
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
}
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ergo";
|
||||
version = "5.0.20";
|
||||
version = "5.0.21";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/ergoplatform/ergo/releases/download/v${version}/ergo-${version}.jar";
|
||||
sha256 = "sha256-wC3KnuKHsUw1jt7EXVAgPhB6Sk8630sVaM3yn6CGPqs=";
|
||||
sha256 = "sha256-WtBsChSHnYbRBojxRUGdMnXlG+45hp4ZSd8GLx5n/88=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -34,10 +34,10 @@
|
|||
elpaBuild {
|
||||
pname = "activities";
|
||||
ename = "activities";
|
||||
version = "0.5.1";
|
||||
version = "0.7";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/activities-0.5.1.tar";
|
||||
sha256 = "0ng9sgajcpal881s3kavkmz0fc38f2h207hpqj62cf14z7bsk0zk";
|
||||
url = "https://elpa.gnu.org/packages/activities-0.7.tar";
|
||||
sha256 = "17vwbblcwayf1lqfvc64s606cyv1pyh094i3d8fz0k5ivgfp6ybi";
|
||||
};
|
||||
packageRequires = [ emacs persist ];
|
||||
meta = {
|
||||
|
@ -261,6 +261,21 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
assess = callPackage ({ elpaBuild, emacs, fetchurl, lib, m-buffer }:
|
||||
elpaBuild {
|
||||
pname = "assess";
|
||||
ename = "assess";
|
||||
version = "0.7";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/assess-0.7.tar";
|
||||
sha256 = "0ixs6ab5j12q69bn9h423a6c7mpc7r5spf6m039x3rl14yc04cy4";
|
||||
};
|
||||
packageRequires = [ emacs m-buffer ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/assess.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
async = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "async";
|
||||
|
@ -280,10 +295,10 @@
|
|||
elpaBuild {
|
||||
pname = "auctex";
|
||||
ename = "auctex";
|
||||
version = "14.0.3";
|
||||
version = "14.0.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/auctex-14.0.3.tar";
|
||||
sha256 = "1xk29nk3r7ilxk2vag3diacamqvlws7mbjk5a0iivz5y6fy7hmjc";
|
||||
url = "https://elpa.gnu.org/packages/auctex-14.0.4.tar";
|
||||
sha256 = "03w6qs4f0ksb8f54zsx189775w3wdyfaqg3dwn20a77y5cvisk52";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -550,10 +565,10 @@
|
|||
elpaBuild {
|
||||
pname = "brief";
|
||||
ename = "brief";
|
||||
version = "5.88.22.2";
|
||||
version = "5.90";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/brief-5.88.22.2.tar";
|
||||
sha256 = "1i4sdm8kcrazzp22gb4hi1gd4lfq6hdh6pnldmi1zjjyhl1gbzn3";
|
||||
url = "https://elpa.gnu.org/packages/brief-5.90.tar";
|
||||
sha256 = "18v0qf3aj14sh6njrrjdahzaghsqy50hdjrwl3k1m7x2jqvzxd1z";
|
||||
};
|
||||
packageRequires = [ cl-lib nadvice ];
|
||||
meta = {
|
||||
|
@ -565,10 +580,10 @@
|
|||
elpaBuild {
|
||||
pname = "buffer-env";
|
||||
ename = "buffer-env";
|
||||
version = "0.5";
|
||||
version = "0.6";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/buffer-env-0.5.tar";
|
||||
sha256 = "17q0flxp0rp52ksyh5ijcamvvm003icbyzv28r6vknrw3qsphb3p";
|
||||
url = "https://elpa.gnu.org/packages/buffer-env-0.6.tar";
|
||||
sha256 = "08li070s2s64lifgzns0z6xjk1qyaik56d6sbdp3gsyghc1sx7rn";
|
||||
};
|
||||
packageRequires = [ compat emacs ];
|
||||
meta = {
|
||||
|
@ -659,10 +674,10 @@
|
|||
elpaBuild {
|
||||
pname = "cape";
|
||||
ename = "cape";
|
||||
version = "1.3";
|
||||
version = "1.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/cape-1.3.tar";
|
||||
sha256 = "1178f6js821zcmsc3zrlclnaf4sswgvzs2qazzi975dkcfqcn3vq";
|
||||
url = "https://elpa.gnu.org/packages/cape-1.4.tar";
|
||||
sha256 = "1y0b0lx6qb27x3d0yn3gxykfir07cw4w5jkkw3ff8x1ak6wrf4zv";
|
||||
};
|
||||
packageRequires = [ compat emacs ];
|
||||
meta = {
|
||||
|
@ -809,10 +824,10 @@
|
|||
elpaBuild {
|
||||
pname = "comint-mime";
|
||||
ename = "comint-mime";
|
||||
version = "0.3";
|
||||
version = "0.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/comint-mime-0.3.tar";
|
||||
sha256 = "0dlzwzmiwq9z8riq6h1gpq1g713x09kxgaz2m4anxkbmgb95r7hf";
|
||||
url = "https://elpa.gnu.org/packages/comint-mime-0.4.tar";
|
||||
sha256 = "1wgr1dq3qdnsvziylcqaiwhjafdqph4jrnq4cp0lcr1j796vp1dz";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -907,10 +922,10 @@
|
|||
elpaBuild {
|
||||
pname = "compat";
|
||||
ename = "compat";
|
||||
version = "29.1.4.4";
|
||||
version = "29.1.4.5";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/compat-29.1.4.4.tar";
|
||||
sha256 = "0710g552b1nznnfx2774gmg6yizs27s0bakqm95nsjrp6kgznbfr";
|
||||
url = "https://elpa.gnu.org/packages/compat-29.1.4.5.tar";
|
||||
sha256 = "191cjzrw9xm5bvcf8s1yr9hdcn9i02789xfd8pz33lk65s0rq413";
|
||||
};
|
||||
packageRequires = [ emacs seq ];
|
||||
meta = {
|
||||
|
@ -922,10 +937,10 @@
|
|||
elpaBuild {
|
||||
pname = "consult";
|
||||
ename = "consult";
|
||||
version = "1.3";
|
||||
version = "1.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/consult-1.3.tar";
|
||||
sha256 = "1qyqvc4rp0287lidpzhvi669ygjnqmlw8wq0hc0nks2703p283c8";
|
||||
url = "https://elpa.gnu.org/packages/consult-1.4.tar";
|
||||
sha256 = "1vxc9i4jwnq4q8svgqjzn6nqqjzh3b6gp81iyfcr5n2122y0aq1y";
|
||||
};
|
||||
packageRequires = [ compat emacs ];
|
||||
meta = {
|
||||
|
@ -933,8 +948,7 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
consult-hoogle = callPackage ({ consult
|
||||
, elpaBuild
|
||||
consult-hoogle = callPackage ({ elpaBuild
|
||||
, emacs
|
||||
, fetchurl
|
||||
, haskell-mode
|
||||
|
@ -942,12 +956,12 @@
|
|||
elpaBuild {
|
||||
pname = "consult-hoogle";
|
||||
ename = "consult-hoogle";
|
||||
version = "0.1.1";
|
||||
version = "0.2.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/consult-hoogle-0.1.1.tar";
|
||||
sha256 = "1bcl7h5ykcgrsfj27wkv9l9jvbj2bbkh0w9d60663m1bkp0p3y2r";
|
||||
url = "https://elpa.gnu.org/packages/consult-hoogle-0.2.0.tar";
|
||||
sha256 = "1wzd7i7sfd1l8fkfgfaj5vyc9nx9aycfr4yp5yxg1mr6fz8m2rmz";
|
||||
};
|
||||
packageRequires = [ consult emacs haskell-mode ];
|
||||
packageRequires = [ emacs haskell-mode ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/consult-hoogle.html";
|
||||
license = lib.licenses.free;
|
||||
|
@ -1152,10 +1166,10 @@
|
|||
elpaBuild {
|
||||
pname = "dape";
|
||||
ename = "dape";
|
||||
version = "0.7.0";
|
||||
version = "0.9.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/dape-0.7.0.tar";
|
||||
sha256 = "0fbafwmrs9dlv875vcg1c9gh0hqs1zpnyqxgkdvbrazww7ffn60g";
|
||||
url = "https://elpa.gnu.org/packages/dape-0.9.0.tar";
|
||||
sha256 = "13xvl24l8lr64ndc8rk1dxdgsbvwxhn90844xkdzl7qs8i3hyw1l";
|
||||
};
|
||||
packageRequires = [ emacs jsonrpc ];
|
||||
meta = {
|
||||
|
@ -1242,10 +1256,10 @@
|
|||
elpaBuild {
|
||||
pname = "denote";
|
||||
ename = "denote";
|
||||
version = "2.2.4";
|
||||
version = "2.3.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/denote-2.2.4.tar";
|
||||
sha256 = "0a0f4s715nfb7kly82m1gb2ady69z089wlay5i53n9bxzi61x3j7";
|
||||
url = "https://elpa.gnu.org/packages/denote-2.3.0.tar";
|
||||
sha256 = "0h6pdn9w1ggyrmfniqvy307wnlf49n05asa2z5wqxvj6mnvjza1y";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -1287,10 +1301,10 @@
|
|||
elpaBuild {
|
||||
pname = "devdocs";
|
||||
ename = "devdocs";
|
||||
version = "0.5";
|
||||
version = "0.6";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/devdocs-0.5.tar";
|
||||
sha256 = "0qyp8lhf76yv2ym7cryvygvf2m9jah5nsl1g79gqjrsin6vlhqka";
|
||||
url = "https://elpa.gnu.org/packages/devdocs-0.6.tar";
|
||||
sha256 = "17av2l61mr4y8la4cqiq1dnaznni4xirr5k3wdix1jzl3q1apypy";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -1653,10 +1667,10 @@
|
|||
elpaBuild {
|
||||
pname = "eev";
|
||||
ename = "eev";
|
||||
version = "20240205";
|
||||
version = "20240309";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/eev-20240205.tar";
|
||||
sha256 = "06psmcf3yi7pincsbhjrcrml0wzwgmlv6xy2fbpg1sg8vlibbgi3";
|
||||
url = "https://elpa.gnu.org/packages/eev-20240309.tar";
|
||||
sha256 = "0j9hz5raxrk3d2ashbsp9yvi04d5ap0chb4lpljr4pbh2lnyjr4h";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -1668,10 +1682,10 @@
|
|||
elpaBuild {
|
||||
pname = "ef-themes";
|
||||
ename = "ef-themes";
|
||||
version = "1.5.1";
|
||||
version = "1.6.1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/ef-themes-1.5.1.tar";
|
||||
sha256 = "00qh5b7kx0dlms7drnzj95mvgwfzg5h5m9prkbr8qi4ssx939gdw";
|
||||
url = "https://elpa.gnu.org/packages/ef-themes-1.6.1.tar";
|
||||
sha256 = "1ms0rqivxdsbx7jv6d5h1khvm4ghml152ab831chg4z77apmq1ga";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -1778,22 +1792,16 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
ellama = callPackage ({ dash
|
||||
, elpaBuild
|
||||
, emacs
|
||||
, fetchurl
|
||||
, lib
|
||||
, llm
|
||||
, spinner }:
|
||||
ellama = callPackage ({ elpaBuild, emacs, fetchurl, lib, llm, spinner }:
|
||||
elpaBuild {
|
||||
pname = "ellama";
|
||||
ename = "ellama";
|
||||
version = "0.8.7";
|
||||
version = "0.8.13";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/ellama-0.8.7.tar";
|
||||
sha256 = "0qmd7zrh026rjic26bdp9zinb7vkppdm14inwpwaashqxa5brwi5";
|
||||
url = "https://elpa.gnu.org/packages/ellama-0.8.13.tar";
|
||||
sha256 = "012j3rnvwj8ajyjdlgdx6nrs773i71dyl5brs0jgx010jibzmafi";
|
||||
};
|
||||
packageRequires = [ dash emacs llm spinner ];
|
||||
packageRequires = [ emacs llm spinner ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/ellama.html";
|
||||
license = lib.licenses.free;
|
||||
|
@ -1893,10 +1901,10 @@
|
|||
elpaBuild {
|
||||
pname = "emms";
|
||||
ename = "emms";
|
||||
version = "18";
|
||||
version = "19";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/emms-18.tar";
|
||||
sha256 = "1jslk37kx7yzvwy4hq1a6b71kp4a3bgfzzp8bpplv7z6vcmwrmgq";
|
||||
url = "https://elpa.gnu.org/packages/emms-19.tar";
|
||||
sha256 = "13c884s92ddn52psgkaz3zvb94g23gq41dbidpx7x4gzdhd9qqxm";
|
||||
};
|
||||
packageRequires = [ cl-lib nadvice seq ];
|
||||
meta = {
|
||||
|
@ -2125,10 +2133,10 @@
|
|||
elpaBuild {
|
||||
pname = "filechooser";
|
||||
ename = "filechooser";
|
||||
version = "0.1.2";
|
||||
version = "0.2.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/filechooser-0.1.2.tar";
|
||||
sha256 = "0s0mdc851zd2hy8hfpbamiimbh7c788cyz8mxnwzkpmf6jlj6xdw";
|
||||
url = "https://elpa.gnu.org/packages/filechooser-0.2.0.tar";
|
||||
sha256 = "1pl6n6d6gymdm0gx0nz96hwps8v1s2zpqph41d0h5hdvsvxacx6w";
|
||||
};
|
||||
packageRequires = [ compat emacs ];
|
||||
meta = {
|
||||
|
@ -2554,10 +2562,10 @@
|
|||
elpaBuild {
|
||||
pname = "greader";
|
||||
ename = "greader";
|
||||
version = "0.9.7";
|
||||
version = "0.9.19";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/greader-0.9.7.tar";
|
||||
sha256 = "08q2qfcwyxrnmjbzblgk16xhshhn2314swjs0kr5jrdijdgpfghh";
|
||||
url = "https://elpa.gnu.org/packages/greader-0.9.19.tar";
|
||||
sha256 = "1d04d1shzb505qs2mf7387dvl56pwlwh4b349s5fq2prwqrq71l7";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -2584,10 +2592,10 @@
|
|||
elpaBuild {
|
||||
pname = "gtags-mode";
|
||||
ename = "gtags-mode";
|
||||
version = "1.0";
|
||||
version = "1.1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/gtags-mode-1.0.tar";
|
||||
sha256 = "0nyzsr3fnds931ihw2dp5xlgv151kzph7qv1n751r1cajimzlp7n";
|
||||
url = "https://elpa.gnu.org/packages/gtags-mode-1.1.tar";
|
||||
sha256 = "0fgs6iqrivmyxfkjl6hxxs3zfjkkdas61z34q08qfjgw0ixz188h";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -2726,10 +2734,10 @@
|
|||
elpaBuild {
|
||||
pname = "hyperbole";
|
||||
ename = "hyperbole";
|
||||
version = "9.0.0";
|
||||
version = "9.0.1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/hyperbole-9.0.0.tar";
|
||||
sha256 = "07kpyp3ggf4knakn18niy819l184apx4d9vbcwv57j8zyqgn4c3l";
|
||||
url = "https://elpa.gnu.org/packages/hyperbole-9.0.1.tar";
|
||||
sha256 = "0a7py2dvszh0rf2smbmm8msjrc8vbbvlqnsqw0m2l12v8vllmxnb";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -2786,10 +2794,10 @@
|
|||
elpaBuild {
|
||||
pname = "isearch-mb";
|
||||
ename = "isearch-mb";
|
||||
version = "0.7";
|
||||
version = "0.8";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/isearch-mb-0.7.tar";
|
||||
sha256 = "1dfjh4ya9515vx0q2dv1brddw350gxd40h1g1vsa783ivvm0hm75";
|
||||
url = "https://elpa.gnu.org/packages/isearch-mb-0.8.tar";
|
||||
sha256 = "06241rwz01z4ysgmizczq12zl0cc6xvfyds48glzk1jp82zp4adp";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -2956,10 +2964,10 @@
|
|||
elpaBuild {
|
||||
pname = "jinx";
|
||||
ename = "jinx";
|
||||
version = "1.3";
|
||||
version = "1.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/jinx-1.3.tar";
|
||||
sha256 = "0xlfw1sw92qf8bwpw9qnjhkz4ax6n7kcl72ypqm3swmj92jbgsg7";
|
||||
url = "https://elpa.gnu.org/packages/jinx-1.4.tar";
|
||||
sha256 = "1vv85pbhcpwjvd3iwnr8ksjpbydrsk7m3zm34hcbybg703yk2nl7";
|
||||
};
|
||||
packageRequires = [ compat emacs ];
|
||||
meta = {
|
||||
|
@ -2971,10 +2979,10 @@
|
|||
elpaBuild {
|
||||
pname = "jit-spell";
|
||||
ename = "jit-spell";
|
||||
version = "0.3";
|
||||
version = "0.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/jit-spell-0.3.tar";
|
||||
sha256 = "0q8wd9phd0zcjhc92j633vz82fr0ji8zc9vir7kcn1msrf6jspwz";
|
||||
url = "https://elpa.gnu.org/packages/jit-spell-0.4.tar";
|
||||
sha256 = "1p83spcq52l7k63p56y3w5r3kl49wbrs4abynwn25ikhkd4wl8x3";
|
||||
};
|
||||
packageRequires = [ compat emacs ];
|
||||
meta = {
|
||||
|
@ -3016,10 +3024,10 @@
|
|||
elpaBuild {
|
||||
pname = "jsonrpc";
|
||||
ename = "jsonrpc";
|
||||
version = "1.0.24";
|
||||
version = "1.0.25";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/jsonrpc-1.0.24.tar";
|
||||
sha256 = "05nwxfybczxx7pmflq762dq3wypm3pmcfljqs5kh81icxvdqvk8s";
|
||||
url = "https://elpa.gnu.org/packages/jsonrpc-1.0.25.tar";
|
||||
sha256 = "0hlc70xlm3a53il7k24s6s25dhnd09l2454r5qkpfnjdz9p5ih6f";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -3137,6 +3145,40 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
lentic = callPackage ({ dash, elpaBuild, emacs, fetchurl, lib, m-buffer }:
|
||||
elpaBuild {
|
||||
pname = "lentic";
|
||||
ename = "lentic";
|
||||
version = "0.12";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/lentic-0.12.tar";
|
||||
sha256 = "15sb126sq5aw3n09vqydmsl1l5svfar70iz42hnqi783cpw1lh0m";
|
||||
};
|
||||
packageRequires = [ dash emacs m-buffer ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/lentic.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
lentic-server = callPackage ({ elpaBuild
|
||||
, fetchurl
|
||||
, lentic
|
||||
, lib
|
||||
, web-server }:
|
||||
elpaBuild {
|
||||
pname = "lentic-server";
|
||||
ename = "lentic-server";
|
||||
version = "0.2";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/lentic-server-0.2.tar";
|
||||
sha256 = "1vifs91r4rm57rka8by50f8zg5pr2hjqwbdz28mbbxhkj3war6s5";
|
||||
};
|
||||
packageRequires = [ lentic web-server ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/lentic-server.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
let-alist = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "let-alist";
|
||||
|
@ -3182,14 +3224,36 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
listen = callPackage ({ elpaBuild
|
||||
, emacs
|
||||
, fetchurl
|
||||
, lib
|
||||
, persist
|
||||
, taxy
|
||||
, taxy-magit-section
|
||||
, transient }:
|
||||
elpaBuild {
|
||||
pname = "listen";
|
||||
ename = "listen";
|
||||
version = "0.8";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/listen-0.8.tar";
|
||||
sha256 = "1vj9fsyp5v1qh87asj23k625080x6c8mgkas4933lrz7l2g7h1y2";
|
||||
};
|
||||
packageRequires = [ emacs persist taxy taxy-magit-section transient ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/listen.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
llm = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "llm";
|
||||
ename = "llm";
|
||||
version = "0.9.1";
|
||||
version = "0.12.1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/llm-0.9.1.tar";
|
||||
sha256 = "0vib0zl41fsacc5d79f1l52j2vxnbqc37471b86cxw9rha0clr8m";
|
||||
url = "https://elpa.gnu.org/packages/llm-0.12.1.tar";
|
||||
sha256 = "11z56fqp0y13jmvm2611xyqsz41k01rsqdjvrzvbf33n56vsw713";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -3317,6 +3381,21 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
m-buffer = callPackage ({ elpaBuild, fetchurl, lib, seq }:
|
||||
elpaBuild {
|
||||
pname = "m-buffer";
|
||||
ename = "m-buffer";
|
||||
version = "0.16";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/m-buffer-0.16.tar";
|
||||
sha256 = "1mb03hrszxxsk61yvh70rnkn7iiwx1vx6n1br02clkpn2q2c0mq5";
|
||||
};
|
||||
packageRequires = [ seq ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/m-buffer.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
map = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "map";
|
||||
|
@ -3516,10 +3595,10 @@
|
|||
elpaBuild {
|
||||
pname = "modus-themes";
|
||||
ename = "modus-themes";
|
||||
version = "4.3.0";
|
||||
version = "4.4.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/modus-themes-4.3.0.tar";
|
||||
sha256 = "0zsglzqc36bw9r7fgvxjdcrdjar6xwad29kwyqd2k36bq3pivzq3";
|
||||
url = "https://elpa.gnu.org/packages/modus-themes-4.4.0.tar";
|
||||
sha256 = "1n6fmgj2kpdy2mmwg5hh6dic30zy0gd3ap6hlipl9qn08lawbbgq";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -3527,6 +3606,21 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
mpdired = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "mpdired";
|
||||
ename = "mpdired";
|
||||
version = "1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/mpdired-1.tar";
|
||||
sha256 = "1b7xsdgsrwy7qkshkk83bizz9r78g4pdfnavwl6riyb947gk6zkx";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/mpdired.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
multi-mode = callPackage ({ elpaBuild, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "multi-mode";
|
||||
|
@ -3900,10 +3994,10 @@
|
|||
elpaBuild {
|
||||
pname = "orderless";
|
||||
ename = "orderless";
|
||||
version = "1.0";
|
||||
version = "1.1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/orderless-1.0.tar";
|
||||
sha256 = "0kslgrs857h3mm837hcb8v52ankbv0hm2pz0q136imckzj32m43s";
|
||||
url = "https://elpa.gnu.org/packages/orderless-1.1.tar";
|
||||
sha256 = "19iy0ps8h1qjh16mdybayd9i25bn27sa2slqsa6nslh251pxc0rk";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -3915,10 +4009,10 @@
|
|||
elpaBuild {
|
||||
pname = "org";
|
||||
ename = "org";
|
||||
version = "9.6.19";
|
||||
version = "9.6.23";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/org-9.6.19.tar";
|
||||
sha256 = "0ibgw0i7nsn589k0ynifwdp1f3ia6p8369myhjqgmwy392cwrcxg";
|
||||
url = "https://elpa.gnu.org/packages/org-9.6.23.tar";
|
||||
sha256 = "0yqn3kag4anzm8ahfgjxrxjndzq6rbs6kayfq93gx4rn0qxa334q";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -3975,10 +4069,10 @@
|
|||
elpaBuild {
|
||||
pname = "org-modern";
|
||||
ename = "org-modern";
|
||||
version = "1.1";
|
||||
version = "1.2";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/org-modern-1.1.tar";
|
||||
sha256 = "1aclips7y3dasjh6rjdcx1b6fkaripjam6120b7wm487qpjcrzc8";
|
||||
url = "https://elpa.gnu.org/packages/org-modern-1.2.tar";
|
||||
sha256 = "1kgvrsmbgadbr7wk48sgx1prlgpbp31nih9bl9div35d496njcnw";
|
||||
};
|
||||
packageRequires = [ compat emacs ];
|
||||
meta = {
|
||||
|
@ -4376,6 +4470,21 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
pq = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "pq";
|
||||
ename = "pq";
|
||||
version = "0.2";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/pq-0.2.tar";
|
||||
sha256 = "0gy3i2l1fxwpav6l57yf3mml15lhwh9xp8sm40hlpgyn15nyz4c6";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/pq.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
project = callPackage ({ elpaBuild, emacs, fetchurl, lib, xref }:
|
||||
elpaBuild {
|
||||
pname = "project";
|
||||
|
@ -4575,10 +4684,10 @@
|
|||
elpaBuild {
|
||||
pname = "rcirc-sqlite";
|
||||
ename = "rcirc-sqlite";
|
||||
version = "0.1.3";
|
||||
version = "0.1.4";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/rcirc-sqlite-0.1.3.tar";
|
||||
sha256 = "1pwxkw6dzwbg5g3rxilpp6iy3mzxgpn0mw59i3dcx25hdyizqhip";
|
||||
url = "https://elpa.gnu.org/packages/rcirc-sqlite-0.1.4.tar";
|
||||
sha256 = "0hz0nm35jq6fg9pr4j725r2awxbf1q23bzn85nhcbpafzb8mmajl";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -4845,10 +4954,10 @@
|
|||
elpaBuild {
|
||||
pname = "rt-liberation";
|
||||
ename = "rt-liberation";
|
||||
version = "6";
|
||||
version = "7";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/rt-liberation-6.tar";
|
||||
sha256 = "1l87q2h1hqm5zpg1fz835gmbf5fgl9fvcqg42c17v6kim4has8zd";
|
||||
url = "https://elpa.gnu.org/packages/rt-liberation-7.tar";
|
||||
sha256 = "0gb1an3a68ib27jrc8x8grq5z3xya4b1gl8ii82a1clzf87n7k63";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
|
@ -5215,10 +5324,10 @@
|
|||
elpaBuild {
|
||||
pname = "spacious-padding";
|
||||
ename = "spacious-padding";
|
||||
version = "0.3.0";
|
||||
version = "0.4.1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/spacious-padding-0.3.0.tar";
|
||||
sha256 = "1iiaxgl18k8hkwwyz3qnargv6q8kwzyh39ai46k5xbpmyrsj4b16";
|
||||
url = "https://elpa.gnu.org/packages/spacious-padding-0.4.1.tar";
|
||||
sha256 = "02bc0r20b4mgnlzryq26q0jq45wfgpvv7y3zhvnaaqj11rw7779f";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -5689,10 +5798,10 @@
|
|||
elpaBuild {
|
||||
pname = "tramp";
|
||||
ename = "tramp";
|
||||
version = "2.6.2.1";
|
||||
version = "2.6.2.2";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/tramp-2.6.2.1.tar";
|
||||
sha256 = "145riknpdvw7rvpz20m766yci3w012f241mw38pbbb9cb8pn2rbf";
|
||||
url = "https://elpa.gnu.org/packages/tramp-2.6.2.2.tar";
|
||||
sha256 = "0bbsff2qr71f70nxhdi19b3jzpv6bgfb7x7qkrccsygvsvgyrb2h";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -5749,10 +5858,10 @@
|
|||
elpaBuild {
|
||||
pname = "transient";
|
||||
ename = "transient";
|
||||
version = "0.5.3";
|
||||
version = "0.6.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/transient-0.5.3.tar";
|
||||
sha256 = "12ak6rykg627rkwwiga5d9g9pzcrq2sliynqbr3lm8rvlwbdhkhx";
|
||||
url = "https://elpa.gnu.org/packages/transient-0.6.0.tar";
|
||||
sha256 = "1lsh8cvg1kspa8gl9fml0x7r61fbhjajmjqjf4r2s7qz102z66xb";
|
||||
};
|
||||
packageRequires = [ compat emacs seq ];
|
||||
meta = {
|
||||
|
@ -5899,10 +6008,10 @@
|
|||
elpaBuild {
|
||||
pname = "urgrep";
|
||||
ename = "urgrep";
|
||||
version = "0.4.0";
|
||||
version = "0.4.1";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/urgrep-0.4.0.tar";
|
||||
sha256 = "0l0gswml6hkna48gfljj3hajhcx3bbc1rqwb2v01hvqab05an7zs";
|
||||
url = "https://elpa.gnu.org/packages/urgrep-0.4.1.tar";
|
||||
sha256 = "1kwcb7xxk9lcby5s8gpd5dchya7qq063j217rxsjyn8vv9z91lfc";
|
||||
};
|
||||
packageRequires = [ compat emacs project ];
|
||||
meta = {
|
||||
|
@ -6106,10 +6215,10 @@
|
|||
elpaBuild {
|
||||
pname = "verilog-mode";
|
||||
ename = "verilog-mode";
|
||||
version = "2023.6.6.141322628";
|
||||
version = "2024.3.1.121933719";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/verilog-mode-2023.6.6.141322628.tar";
|
||||
sha256 = "14qls4v5yxrgyiimvvggimw5ddlx0ll387a1r6awm274rj4p3d19";
|
||||
url = "https://elpa.gnu.org/packages/verilog-mode-2024.3.1.121933719.tar";
|
||||
sha256 = "047kna2j1mbsibw1psxdp8qmg91dnjrdrskdzhys9pmaqggfl5ry";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
|
|
|
@ -64,10 +64,10 @@
|
|||
elpaBuild {
|
||||
pname = "annotate";
|
||||
ename = "annotate";
|
||||
version = "2.1.0";
|
||||
version = "2.2.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/annotate-2.1.0.tar";
|
||||
sha256 = "07q8s3qi3lm8g01ypvqqq0cn5jx5jrgyv74fbfam3mmz5l3mqp6q";
|
||||
url = "https://elpa.nongnu.org/nongnu/annotate-2.2.0.tar";
|
||||
sha256 = "1h1whavdrwfsc79kcvh2vbvjzqd7n01xzjb1acgyiy9wkyl79p7b";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
|
@ -306,10 +306,10 @@
|
|||
elpaBuild {
|
||||
pname = "buttercup";
|
||||
ename = "buttercup";
|
||||
version = "1.33";
|
||||
version = "1.34";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/buttercup-1.33.tar";
|
||||
sha256 = "0245fq4iny1jnm440dzkq0fadw10ncnhkj28mayqs9iyyzj9g5h4";
|
||||
url = "https://elpa.nongnu.org/nongnu/buttercup-1.34.tar";
|
||||
sha256 = "0bdlky9d5fzc9x9wpjxyvrclz1rmzsnvc89lf0m5fhyp4r8jvxy4";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -459,6 +459,26 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
consult-flycheck = callPackage ({ consult
|
||||
, elpaBuild
|
||||
, emacs
|
||||
, fetchurl
|
||||
, flycheck
|
||||
, lib }:
|
||||
elpaBuild {
|
||||
pname = "consult-flycheck";
|
||||
ename = "consult-flycheck";
|
||||
version = "1.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/consult-flycheck-1.0.tar";
|
||||
sha256 = "0901wliqdzj5dmam1kkbq0nxhywqf11182q7yxjxh98czy5w3xh8";
|
||||
};
|
||||
packageRequires = [ consult emacs flycheck ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/consult-flycheck.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
corfu-terminal = callPackage ({ corfu
|
||||
, elpaBuild
|
||||
, emacs
|
||||
|
@ -479,16 +499,16 @@
|
|||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
crux = callPackage ({ elpaBuild, fetchurl, lib, seq }:
|
||||
crux = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "crux";
|
||||
ename = "crux";
|
||||
version = "0.4.0";
|
||||
version = "0.5.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/crux-0.4.0.tar";
|
||||
sha256 = "01yg54s2l3zr4h7h3nw408bqzrr4yds9rfgc575b76006v5d3ciy";
|
||||
url = "https://elpa.nongnu.org/nongnu/crux-0.5.0.tar";
|
||||
sha256 = "0zdzfglzvhkzyvnkk2d217c6f8gnbcxlp8adimwrxgqh7c6gwihp";
|
||||
};
|
||||
packageRequires = [ seq ];
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/crux.html";
|
||||
license = lib.licenses.free;
|
||||
|
@ -742,10 +762,10 @@
|
|||
elpaBuild {
|
||||
pname = "elpher";
|
||||
ename = "elpher";
|
||||
version = "3.5.1";
|
||||
version = "3.6.0";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/elpher-3.5.1.tar";
|
||||
sha256 = "0687npypihavghz9bjs8f6h10awjgjv5fdd11dmh43p1krhrga2w";
|
||||
url = "https://elpa.nongnu.org/nongnu/elpher-3.6.0.tar";
|
||||
sha256 = "0pa8y3zc768wdgp43546qvwr6ly2q9gznfrl6qmm90gkv5wrc5ln";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -2682,10 +2702,10 @@
|
|||
elpaBuild {
|
||||
pname = "racket-mode";
|
||||
ename = "racket-mode";
|
||||
version = "1.0.20240219.135847";
|
||||
version = "1.0.20240319.160226";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/racket-mode-1.0.20240219.135847.tar";
|
||||
sha256 = "06g1ci7kq8fxjh65qwwnh530xvvh6pr9ha52f7xmbjf56iifn1da";
|
||||
url = "https://elpa.nongnu.org/nongnu/racket-mode-1.0.20240319.160226.tar";
|
||||
sha256 = "1alqiagpkbxqi8nyrn1qzfx23fagpn1ml9hqpyj897jwf5f03zsh";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -3382,10 +3402,10 @@
|
|||
elpaBuild {
|
||||
pname = "visual-fill-column";
|
||||
ename = "visual-fill-column";
|
||||
version = "2.6.0";
|
||||
version = "2.6.2";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/visual-fill-column-2.6.0.tar";
|
||||
sha256 = "1gpjby6g9wq8p25q1a35hr56nfb4sbcdrf0bjxidh1diw5g5saw4";
|
||||
url = "https://elpa.nongnu.org/nongnu/visual-fill-column-2.6.2.tar";
|
||||
sha256 = "13z87xyzldllvga8iygb33qaqvrrc2qnc315zalvbmydw174cq1i";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -3397,10 +3417,10 @@
|
|||
elpaBuild {
|
||||
pname = "web-mode";
|
||||
ename = "web-mode";
|
||||
version = "17.3.18";
|
||||
version = "17.3.19";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/web-mode-17.3.18.tar";
|
||||
sha256 = "18ylzq12gsayp3cmd8qjdqsnyiymjd95ffqs3xcyva6sl8d41hmy";
|
||||
url = "https://elpa.nongnu.org/nongnu/web-mode-17.3.19.tar";
|
||||
sha256 = "1z33y7p1dilwpwydb9q14n55q48n80mynm7fjr7ih91wvk8zz5di";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
@ -3560,10 +3580,10 @@
|
|||
elpaBuild {
|
||||
pname = "xah-fly-keys";
|
||||
ename = "xah-fly-keys";
|
||||
version = "24.21.20240220095736";
|
||||
version = "24.24.20240324101507";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.nongnu.org/nongnu/xah-fly-keys-24.21.20240220095736.tar";
|
||||
sha256 = "04ra1m9mwhz3zh0776gbzfn4kn0yxgbfbh1hq78r2zxggvpjfikv";
|
||||
url = "https://elpa.nongnu.org/nongnu/xah-fly-keys-24.24.20240324101507.tar";
|
||||
sha256 = "1lqrrs5j523q33vvs85j3dlnd56bmnzglfkc8jilv6yq44dmv7v7";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -98,10 +98,10 @@ in
|
|||
|
||||
emacs29 = import ./make-emacs.nix (mkArgs {
|
||||
pname = "emacs";
|
||||
version = "29.2";
|
||||
version = "29.3";
|
||||
variant = "mainline";
|
||||
rev = "29.2";
|
||||
hash = "sha256-qSQmQzVyEGSr4GAI6rqnEwBvhl09D2D8MNasHqZQPL8=";
|
||||
rev = "29.3";
|
||||
hash = "sha256-4yN81djeKb9Hlr6MvaDdXqf4XOl0oolXEYGqkA+KUO0=";
|
||||
});
|
||||
|
||||
emacs28-macport = import ./make-emacs.nix (mkArgs {
|
||||
|
|
|
@ -17081,5 +17081,17 @@ final: prev:
|
|||
meta.homepage = "https://github.com/codethread/qmk.nvim/";
|
||||
};
|
||||
|
||||
vim-godot = buildVimPlugin {
|
||||
pname = "vim-godot";
|
||||
version = "2024-02-18";
|
||||
src = fetchFromGitHub {
|
||||
owner = "habamax";
|
||||
repo = "vim-godot";
|
||||
rev = "f9c0b36b299efcc4aa4cb119a2be36a83fe10388";
|
||||
sha256 = "sha256-HKp3CQwAOs+7TL8MjWZ2EHLHMZ3Ss7AckAZ5eOjTDEg=";
|
||||
};
|
||||
meta.homepage = "https://github.com/habamax/vim-godot/";
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@ neovimRequireCheckHook () {
|
|||
# editorconfig-checker-disable
|
||||
export HOME="$TMPDIR"
|
||||
@nvimBinary@ -es --headless -n -u NONE -i NONE --clean -V1 \
|
||||
--cmd "set rtp+=$out" \
|
||||
--cmd "set rtp+=$out,${dependencies/ /,}" \
|
||||
--cmd "lua require('$nvimRequireCheck')"
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -670,6 +670,9 @@
|
|||
|
||||
hardhat-nvim = super.hardhat-nvim.overrideAttrs {
|
||||
dependencies = with self; [ overseer-nvim plenary-nvim ];
|
||||
|
||||
doInstallCheck = true;
|
||||
nvimRequireCheck = "hardhat";
|
||||
};
|
||||
|
||||
harpoon = super.harpoon.overrideAttrs {
|
||||
|
|
|
@ -1100,6 +1100,7 @@ https://github.com/junegunn/vim-github-dashboard/,,
|
|||
https://github.com/tikhomirov/vim-glsl/,,
|
||||
https://github.com/jamessan/vim-gnupg/,,
|
||||
https://github.com/fatih/vim-go/,,
|
||||
https://github.com/habamax/vim-godot/,HEAD,
|
||||
https://github.com/rhysd/vim-grammarous/,,
|
||||
https://github.com/jparise/vim-graphql/,,
|
||||
https://github.com/mhinz/vim-grepper/,,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, fetchpatch
|
||||
, cmake
|
||||
, pkg-config
|
||||
, wrapQtAppsHook
|
||||
|
@ -71,6 +72,12 @@ stdenv.mkDerivation rec {
|
|||
patches = [
|
||||
# Remove when merged https://github.com/dolphin-emu/dolphin/pull/12070
|
||||
./find-minizip-ng.patch
|
||||
|
||||
# fix buidl w/ glibc-2.39
|
||||
(fetchpatch {
|
||||
url = "https://github.com/dolphin-emu/dolphin/commit/3da2e15e6b95f02f66df461e87c8b896e450fdab.patch";
|
||||
hash = "sha256-+8yGF412wQUYbyEuYWd41pgOgEbhCaezexxcI5CNehc=";
|
||||
})
|
||||
];
|
||||
|
||||
strictDeps = true;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
stdenvNoCC.mkDerivation rec {
|
||||
pname = "irpf";
|
||||
version = "2023-1.5";
|
||||
version = "2024-1.0";
|
||||
|
||||
# https://www.gov.br/receitafederal/pt-br/centrais-de-conteudo/download/pgd/dirpf
|
||||
# Para outros sistemas operacionais -> Multi
|
||||
|
@ -19,7 +19,7 @@ stdenvNoCC.mkDerivation rec {
|
|||
year = lib.head (lib.splitVersion version);
|
||||
in fetchzip {
|
||||
url = "https://downloadirpf.receita.fazenda.gov.br/irpf/${year}/irpf/arquivos/IRPF${version}.zip";
|
||||
hash = "sha256-L1X+xysQSJ43TO8NSdO+T4aalampd4REL+5Uv33kYUI=";
|
||||
hash = "sha256-x47Ud/aSfPuZYMZSGhJLnNFtNE62I+WjaFFatJPMPYg=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ unzip makeWrapper copyDesktopItems ];
|
||||
|
|
|
@ -5,13 +5,13 @@
|
|||
|
||||
stdenv.mkDerivation {
|
||||
pname = "hello-wayland";
|
||||
version = "unstable-2023-10-26";
|
||||
version = "0-unstable-2024-03-04";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "emersion";
|
||||
repo = "hello-wayland";
|
||||
rev = "b631afa4f6fd86560ccbdb8c7b6fe42851c06a57";
|
||||
sha256 = "MaBzGZ05uCoeeiglFYHC40hQlPvtDw5sQhqXgtVDySc=";
|
||||
rev = "5f3a35def81116f0a74fcaf5a421d66c6700482d";
|
||||
hash = "sha256-gcLR8gosQlPPgFrxqmRQ6/59RjAfJNX6CcsYP+L+A58=";
|
||||
};
|
||||
|
||||
separateDebugInfo = true;
|
||||
|
|
|
@ -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 ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"];
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -1,35 +1,31 @@
|
|||
{ stdenv, lib, fetchFromGitea, qmake, qttools, qtbase, qtserialport
|
||||
, qtconnectivity, qtcharts, wrapQtAppsHook }:
|
||||
, qtconnectivity, qtcharts, wrapQtAppsHook, fetchpatch }:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "ubpm";
|
||||
version = "1.7.3";
|
||||
version = "1.10.0";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "codeberg.org";
|
||||
owner = "LazyT";
|
||||
repo = "ubpm";
|
||||
rev = finalAttrs.version;
|
||||
hash = "sha256-6lvDSU0ssfs71xrac6R6qlmE0QyVcAMTUf0xmJPVzhY=";
|
||||
hash = "sha256-BUUn1WyLT7nm4I+2SpO1ZtIf8isGDy8Za15SiO7sXL8=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace sources/mainapp/mainapp.pro \
|
||||
--replace 'INSTALLDIR = /tmp/ubpm.AppDir' "INSTALLDIR = $out" \
|
||||
--replace '/usr/bin' '/bin' \
|
||||
--replace 'INSTALLS += target translations themes devices help lin' 'INSTALLS += target translations themes devices help'
|
||||
'';
|
||||
patches = [
|
||||
# fixes qmake for nix
|
||||
(fetchpatch {
|
||||
url =
|
||||
"https://codeberg.org/LazyT/ubpm/commit/f18841d6473cab9aa2a9d4c02392b8e103245ef6.diff";
|
||||
hash = "sha256-lgXWu8PUUCt66btj6hVgOFXz3U1BJM3ataSo1MpHkfU=";
|
||||
})
|
||||
];
|
||||
|
||||
preConfigure = ''
|
||||
cd ./sources/
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
install -Dm644 ../package/lin/ubpm.desktop -t $out/share/applications/
|
||||
install -Dm644 ../package/lin/de.lazyt.ubpm.appdata.xml -t $out/share/metainfo/
|
||||
install -Dm644 ../sources/mainapp/res/ico/app.png $out/share/icons/hicolor/256x256/apps/ubpm.png
|
||||
'';
|
||||
|
||||
postFixup = ''
|
||||
wrapQtApp $out/bin/ubpm
|
||||
'';
|
||||
|
@ -47,5 +43,6 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
mainProgram = "ubpm";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [ kurnevsky ];
|
||||
broken = stdenv.isDarwin;
|
||||
};
|
||||
})
|
||||
|
|
|
@ -1,39 +1,49 @@
|
|||
{ stdenv
|
||||
, lib
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchgit
|
||||
, ninja
|
||||
, pkg-config
|
||||
, ed
|
||||
, wrapGAppsHook
|
||||
, webkitgtk
|
||||
, libxml2
|
||||
, glib
|
||||
, glib-networking
|
||||
, gettext
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "badwolf";
|
||||
version = "1.2.2";
|
||||
version = "1.3.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "git://hacktivis.me/git/badwolf.git";
|
||||
url = "https://hacktivis.me/git/badwolf.git";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-HfAsq6z+1kqMAsNxJjWJx9nd2cbv0XN4KRS8cYuhOsQ=";
|
||||
hash = "sha256-feWSxK9TJ5MWxUKutuTcdmMk5IbLjNseUAvfm20kQ1U=";
|
||||
};
|
||||
|
||||
preConfigure = ''
|
||||
export PREFIX=$out
|
||||
'';
|
||||
# configure script not accepting '--prefix'
|
||||
prefixKey = "PREFIX=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config wrapGAppsHook ];
|
||||
nativeBuildInputs = [
|
||||
ninja
|
||||
pkg-config
|
||||
ed
|
||||
wrapGAppsHook
|
||||
];
|
||||
|
||||
buildInputs = [ webkitgtk libxml2 gettext glib glib-networking ];
|
||||
buildInputs = [
|
||||
webkitgtk
|
||||
libxml2
|
||||
gettext
|
||||
glib-networking
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Minimalist and privacy-oriented WebKitGTK+ browser";
|
||||
mainProgram = "badwolf";
|
||||
homepage = "https://hacktivis.me/projects/badwolf";
|
||||
license = licenses.bsd3;
|
||||
license = with licenses; [ bsd3 cc-by-sa-40 ];
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [ laalsaas ];
|
||||
maintainers = with maintainers; [ laalsaas aleksana ];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -12,13 +12,13 @@
|
|||
|
||||
stdenv.mkDerivation {
|
||||
pname = "litebrowser";
|
||||
version = "unstable-2022-10-31";
|
||||
version = "unstable-2024-02-25";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "litehtml";
|
||||
repo = "litebrowser-linux";
|
||||
rev = "4654f8fb2d5e2deba7ac6223b6639341bd3b7eba";
|
||||
hash = "sha256-SvW1AOxLBLKqa+/2u2Zn+/t33ZzQHmqlcLRl6z0rK9U=";
|
||||
rev = "8130cf50af90e07d201d43b934b5a57f7ed4e68d";
|
||||
hash = "sha256-L/pd4VypDfjLKfh+HLpc4um+POWGzGa4OOttudwJxyk=";
|
||||
fetchSubmodules = true; # litehtml submodule
|
||||
};
|
||||
|
||||
|
@ -46,6 +46,7 @@ stdenv.mkDerivation {
|
|||
'';
|
||||
|
||||
meta = with lib; {
|
||||
broken = stdenv.cc.isClang; # https://github.com/litehtml/litebrowser-linux/issues/19
|
||||
description = "A simple browser based on the litehtml engine";
|
||||
mainProgram = "litebrowser";
|
||||
homepage = "https://github.com/litehtml/litebrowser-linux";
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "cilium-cli";
|
||||
version = "0.16.3";
|
||||
version = "0.16.4";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cilium";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-WD0CUPl9Qkalhog2IbefMkiLiVZFW59X21sYH4hUqZs=";
|
||||
hash = "sha256-fhTjYhRCtJu18AGYF6hiTdRMEdlNO+DmDwh2hZBXzPk=";
|
||||
};
|
||||
|
||||
vendorHash = null;
|
||||
|
@ -37,11 +37,12 @@ buildGoModule rec {
|
|||
--zsh <($out/bin/cilium completion zsh)
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
meta = {
|
||||
changelog = "https://github.com/cilium/cilium-cli/releases/tag/v${version}";
|
||||
description = "CLI to install, manage & troubleshoot Kubernetes clusters running Cilium";
|
||||
license = licenses.asl20;
|
||||
license = lib.licenses.asl20;
|
||||
homepage = "https://www.cilium.io/";
|
||||
maintainers = with maintainers; [ humancalico bryanasdev000 qjoly ];
|
||||
maintainers = with lib.maintainers; [ bryanasdev000 humancalico qjoly superherointj ];
|
||||
mainProgram = "cilium";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -12,16 +12,16 @@
|
|||
|
||||
buildGoModule rec {
|
||||
pname = "kubebuilder";
|
||||
version = "3.14.0";
|
||||
version = "3.14.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "kubernetes-sigs";
|
||||
repo = "kubebuilder";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-em+I2YICcqljaaNQ+zOAnOZ552elmV6Ywbfla8buwaY=";
|
||||
hash = "sha256-TMKixwZonYGPXIqOtgnuilbH7BaIRyqJU6uKtp9ANKM=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-iBwhpVs9u5AQAvmzb69SaewdYHmmaV19Bstd0Tux9CA=";
|
||||
vendorHash = "sha256-Hl01dFSffYv59zensKTjXWLXxwfkQYAO5xadlc5iBJY=";
|
||||
|
||||
subPackages = ["cmd"];
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
python3.pkgs.buildPythonApplication rec {
|
||||
pname = "flexget";
|
||||
version = "3.11.25";
|
||||
version = "3.11.27";
|
||||
pyproject = true;
|
||||
|
||||
# Fetch from GitHub in order to use `requirements.in`
|
||||
|
@ -14,7 +14,7 @@ python3.pkgs.buildPythonApplication rec {
|
|||
owner = "Flexget";
|
||||
repo = "Flexget";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-bvCogSBB990LIkk273EMTlqNN303JKr5WCI8g7hLU9Q=";
|
||||
hash = "sha256-0ENBUOH+/pe4OsVQ6cu1xLTPPHtUMNARQGVyxOk60X0=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "signalbackup-tools";
|
||||
version = "20240320";
|
||||
version = "20240328-1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bepaald";
|
||||
repo = pname;
|
||||
rev = version;
|
||||
hash = "sha256-2H+VGVPnSHdsx62hPygWc5uz5vH6DS7AfmYSlBZuB4A=";
|
||||
hash = "sha256-oEwWbTs8Orpo+qRCKVvkeJYEob8O/qkKmv/iA5JUpfQ=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -45,14 +45,14 @@ let
|
|||
|
||||
pname = "slack";
|
||||
|
||||
x86_64-darwin-version = "4.36.140";
|
||||
x86_64-darwin-sha256 = "0w1fxza3aglh7513znv190gsha12rk7k1ybdp4ml2pffwmm8diad";
|
||||
x86_64-darwin-version = "4.37.94";
|
||||
x86_64-darwin-sha256 = "01v7v977fq8mfsl0lipdc7ig55p2sknxzr1jmh8qxiq4f4y0rj5g";
|
||||
|
||||
x86_64-linux-version = "4.36.140";
|
||||
x86_64-linux-sha256 = "0zahhhpcb1dxdhfmam32iqr5w3pspzbmcdv53ciqfnbkmwzkc3xr";
|
||||
x86_64-linux-version = "4.37.94";
|
||||
x86_64-linux-sha256 = "1f1spl767ldrarvpxrayry2d0nyr22b8xacxl4g1r8raryvnyz0x";
|
||||
|
||||
aarch64-darwin-version = "4.36.140";
|
||||
aarch64-darwin-sha256 = "118mzkpk431dcm61gkbj5m4sdxkwnk6fvmxg9f96xiv6n22n7pnx";
|
||||
aarch64-darwin-version = "4.37.94";
|
||||
aarch64-darwin-sha256 = "0gh45gvlbjzxh0fn24z15glxqih5lggam8w6kpawsxgivkw6rjcc";
|
||||
|
||||
version = {
|
||||
x86_64-darwin = x86_64-darwin-version;
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "rtl-sdr";
|
||||
version = "0.8.0";
|
||||
version = "0.9.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "librtlsdr";
|
||||
repo = "librtlsdr";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-s03h+3EfC5c7yRYBM6aCRWtmstwRJWuBywuyVt+k/bk=";
|
||||
hash = "sha256-I1rbywQ0ZBw26wZdtMBkfpj7+kv09XKrrcoDuhIkRmw=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
{ mkDerivation, lib, fetchFromGitHub, cmake, boost179, ceres-solver, eigen,
|
||||
freeimage, glog, libGLU, glew, qtbase,
|
||||
autoAddDriverRunpath,
|
||||
config,
|
||||
cudaSupport ? config.cudaSupport, cudaPackages }:
|
||||
cudaSupport ? config.cudaSupport, cudaPackages
|
||||
}:
|
||||
|
||||
assert cudaSupport -> cudaPackages != { };
|
||||
|
||||
|
@ -37,7 +39,7 @@ mkDerivation rec {
|
|||
nativeBuildInputs = [
|
||||
cmake
|
||||
] ++ lib.optionals cudaSupport [
|
||||
cudaPackages.autoAddDriverRunpath
|
||||
autoAddDriverRunpath
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
|
|
|
@ -16,11 +16,11 @@
|
|||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "st";
|
||||
version = "0.9";
|
||||
version = "0.9.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dl.suckless.org/st/st-${finalAttrs.version}.tar.gz";
|
||||
hash = "sha256-82NZeZc06ueFvss3QGPwvoM88i+ItPFpzSUbmTJOCOc=";
|
||||
hash = "sha256-FvQ7lDOt6dcNYIXDH5/Znyg16q3jEiECDyIUMDXfwNI=";
|
||||
};
|
||||
|
||||
outputs = [ "out" "terminfo" ];
|
||||
|
@ -66,7 +66,7 @@ stdenv.mkDerivation (finalAttrs: {
|
|||
homepage = "https://st.suckless.org/";
|
||||
description = "Simple Terminal for X from Suckless.org Community";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ andsild ];
|
||||
maintainers = with maintainers; [ andsild qusic ];
|
||||
platforms = platforms.unix;
|
||||
mainProgram = "st";
|
||||
};
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
})
|
|
@ -1,107 +0,0 @@
|
|||
source 'https://rubygems.org'
|
||||
|
||||
ruby '>= 2.5.0', '< 3.2.0'
|
||||
gem 'bundler', '>= 1.12.0'
|
||||
|
||||
gem 'rails', '6.1.7.6'
|
||||
gem 'globalid', '~> 0.4.2' if Gem.ruby_version < Gem::Version.new('2.6.0')
|
||||
gem 'rouge', '~> 3.28.0'
|
||||
gem 'request_store', '~> 1.5.0'
|
||||
gem 'mini_mime', '~> 1.1.0'
|
||||
gem "actionpack-xml_parser"
|
||||
gem 'roadie-rails', (Gem.ruby_version < Gem::Version.new('2.6.0') ? '~> 2.2.0' : '~> 3.0.0')
|
||||
gem 'marcel'
|
||||
gem "mail", "~> 2.7.1"
|
||||
gem 'csv', '~> 3.2.0'
|
||||
gem 'nokogiri', (if Gem.ruby_version < Gem::Version.new('2.6.0')
|
||||
'~> 1.12.5'
|
||||
elsif Gem.ruby_version < Gem::Version.new('2.7.0')
|
||||
'~> 1.13.10'
|
||||
else
|
||||
'~> 1.15.2'
|
||||
end)
|
||||
gem "rexml", require: false if Gem.ruby_version >= Gem::Version.new('3.0')
|
||||
gem 'i18n', '~> 1.10.0'
|
||||
gem 'rbpdf', '~> 1.21.3'
|
||||
gem 'addressable'
|
||||
gem 'rubyzip', '~> 2.3.0'
|
||||
gem 'net-smtp', '~> 0.3.0'
|
||||
gem 'net-imap', '~> 0.2.2'
|
||||
gem 'net-pop', '~> 0.1.1'
|
||||
# Rails 6.1.6.1 does not work with Pysch 3.0.2, which is installed by default with Ruby 2.5. See https://github.com/rails/rails/issues/45590
|
||||
gem 'psych', '>= 3.1.0' if Gem.ruby_version < Gem::Version.new('2.6.0')
|
||||
|
||||
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||
gem 'tzinfo-data', platforms: [:mingw, :x64_mingw, :mswin]
|
||||
|
||||
# TOTP-based 2-factor authentication
|
||||
gem 'rotp', '>= 5.0.0'
|
||||
gem 'rqrcode'
|
||||
|
||||
# Optional gem for LDAP authentication
|
||||
group :ldap do
|
||||
gem 'net-ldap', '~> 0.17.0'
|
||||
end
|
||||
|
||||
# Optional gem for exporting the gantt to a PNG file
|
||||
group :minimagick do
|
||||
gem 'mini_magick', '~> 4.11.0'
|
||||
end
|
||||
|
||||
# Optional Markdown support, not for JRuby
|
||||
# ToDo: Remove common_mark group when common_mark is decoupled from markdown. See defect (#36892) for more details.
|
||||
gem 'redcarpet', '~> 3.5.1', groups: [:markdown, :common_mark]
|
||||
|
||||
# Optional CommonMark support, not for JRuby
|
||||
group :common_mark do
|
||||
gem "html-pipeline", "~> 2.13.2"
|
||||
gem "commonmarker", (Gem.ruby_version < Gem::Version.new('2.6.0') ? '0.21.0' : '~> 0.23.8')
|
||||
gem "sanitize", "~> 6.0"
|
||||
gem 'deckar01-task_list', '2.3.2'
|
||||
end
|
||||
|
||||
# webrick
|
||||
gem 'webrick'
|
||||
|
||||
# Include database gems for the database adapters NixOS supports
|
||||
require 'erb'
|
||||
require 'yaml'
|
||||
gem "mysql2", "~> 0.5.0", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
gem "pg", "~> 1.4.2", :platforms => [:mri, :mingw, :x64_mingw]
|
||||
|
||||
group :development do
|
||||
gem 'listen', '~> 3.3'
|
||||
gem "yard"
|
||||
end
|
||||
|
||||
group :test do
|
||||
gem "rails-dom-testing"
|
||||
gem 'mocha', '>= 2.0.1'
|
||||
gem 'simplecov', '~> 0.21.2', :require => false
|
||||
gem "ffi", platforms: [:mri, :mingw, :x64_mingw, :mswin]
|
||||
# For running system tests
|
||||
gem 'puma', (Gem.ruby_version < Gem::Version.new('2.7') ? '< 6.0.0' : '>= 0')
|
||||
gem 'capybara', (if Gem.ruby_version < Gem::Version.new('2.6')
|
||||
'~> 3.35.3'
|
||||
elsif Gem.ruby_version < Gem::Version.new('2.7')
|
||||
'~> 3.36.0'
|
||||
else
|
||||
'~> 3.38.0'
|
||||
end)
|
||||
gem "selenium-webdriver", "~> 3.142.7"
|
||||
gem 'webdrivers', '4.6.1', require: false
|
||||
# RuboCop
|
||||
gem 'rubocop', '~> 1.26.0'
|
||||
gem 'rubocop-performance', '~> 1.13.0'
|
||||
gem 'rubocop-rails', '~> 2.14.0'
|
||||
end
|
||||
|
||||
local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
|
||||
if File.exist?(local_gemfile)
|
||||
eval_gemfile local_gemfile
|
||||
end
|
||||
|
||||
# Load plugins' Gemfiles
|
||||
Dir.glob File.expand_path("../plugins/*/{Gemfile,PluginGemfile}", __FILE__) do |file|
|
||||
eval_gemfile file
|
||||
end
|
|
@ -10,11 +10,11 @@
|
|||
}:
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "tart";
|
||||
version = "2.6.0";
|
||||
version = "2.7.2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/cirruslabs/tart/releases/download/${finalAttrs.version}/tart-arm64.tar.gz";
|
||||
hash = "sha256-QtVqgmjYpLAhFibW1DIVWNYiOjHB1X/YY6zRVB+1soA=";
|
||||
hash = "sha256-Z/LZ8g1/FYT7Jh943tFxN8L5HeNf0CVz1VEJj+2fCd8=";
|
||||
};
|
||||
sourceRoot = ".";
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue