Merge branch 'staging-next' into staging

This commit is contained in:
Jan Tojnar 2022-02-27 09:24:31 +01:00
commit 1316edc465
863 changed files with 27323 additions and 5484 deletions

4
.github/CODEOWNERS vendored
View file

@ -226,10 +226,10 @@
/pkgs/applications/editors/neovim @jonringer @teto
# VimPlugins
/pkgs/misc/vim-plugins @jonringer @softinio
/pkgs/applications/editors/vim/plugins @jonringer
# VsCode Extensions
/pkgs/misc/vscode-extensions @jonringer
/pkgs/applications/editors/vscode/extensions @jonringer
# Prometheus exporter modules and tests
/nixos/modules/services/monitoring/prometheus/exporters.nix @WilliButz

2
.github/labeler.yml vendored
View file

@ -142,7 +142,7 @@
"6.topic: vim":
- doc/languages-frameworks/vim.section.md
- pkgs/applications/editors/vim/**/*
- pkgs/misc/vim-plugins/**/*
- pkgs/applications/editors/vim/plugins/**/*
- nixos/modules/programs/neovim.nix
- pkgs/applications/editors/neovim/**/*

View file

@ -98,7 +98,7 @@ We use jbidwatcher as an example for a discontinued project here.
1. Create a new branch for your change, e.g. `git checkout -b jbidwatcher`
1. Remove the actual package including its directory, e.g. `rm -rf pkgs/applications/misc/jbidwatcher`
1. Remove the package from the list of all packages (`pkgs/top-level/all-packages.nix`).
1. Add an alias for the package name in `pkgs/top-level/aliases.nix` (There is also `pkgs/misc/vim-plugins/aliases.nix`. Package sets typically do not have aliases, so we can't add them there.)
1. Add an alias for the package name in `pkgs/top-level/aliases.nix` (There is also `pkgs/applications/editors/vim/plugins/aliases.nix`. Package sets typically do not have aliases, so we can't add them there.)
For example in this case:

View file

@ -29,7 +29,8 @@ The recommended way of defining a derivation for a Coq library, is to use the `c
* `releaseRev` (optional, defaults to `(v: v)`), provides a default mapping from release names to revision hashes/branch names/tags,
* `displayVersion` (optional), provides a way to alter the computation of `name` from `pname`, by explaining how to display version numbers,
* `namePrefix` (optional, defaults to `[ "coq" ]`), provides a way to alter the computation of `name` from `pname`, by explaining which dependencies must occur in `name`,
* `extraBuildInputs` (optional), by default `buildInputs` just contains `coq`, this allows to add more build inputs,
* `extraNativeBuildInputs` (optional), by default `nativeBuildInputs` just contains `coq`, this allows to add more native build inputs, `nativeBuildInputs` are executables and `buildInputs` are libraries and dependencies,
* `extraBuildInputs` (optional), this allows to add more build inputs,
* `mlPlugin` (optional, defaults to `false`). Some extensions (plugins) might require OCaml and sometimes other OCaml packages. Standard dependencies can be added by setting the current option to `true`. For a finer grain control, the `coq.ocamlPackages` attribute can be used in `extraBuildInputs` to depend on the same package set Coq was built against.
* `useDune2ifVersion` (optional, default to `(x: false)` uses Dune2 to build the package if the provided predicate evaluates to true on the version, e.g. `useDune2if = versions.isGe "1.1"` will use dune if the version of the package is greater or equal to `"1.1"`,
* `useDune2` (optional, defaults to `false`) uses Dune2 to build the package if set to true, the presence of this attribute overrides the behavior of the previous one.

View file

@ -979,6 +979,31 @@ with import <nixpkgs> {};
in python.withPackages(ps: [ps.blaze])).env
```
#### Optional extra dependencies
Some packages define optional dependencies for additional features. With
`setuptools` this is called `extras_require` and `flit` calls it `extras-require`. A
method for supporting this is by declaring the extras of a package in its
`passthru`, e.g. in case of the package `dask`
```nix
passthru.extras-require = {
complete = [ distributed ];
};
```
and letting the package requiring the extra add the list to its dependencies
```nix
propagatedBuildInputs = [
...
] ++ dask.extras-require.complete;
```
Note this method is preferred over adding parameters to builders, as that can
result in packages depending on different variants and thereby causing
collisions.
#### `buildPythonApplication` function {#buildpythonapplication-function}
The `buildPythonApplication` function is practically the same as

View file

@ -309,9 +309,9 @@ Sample output2:
## Adding new plugins to nixpkgs {#adding-new-plugins-to-nixpkgs}
Nix expressions for Vim plugins are stored in [pkgs/misc/vim-plugins](https://github.com/NixOS/nixpkgs/tree/master/pkgs/misc/vim-plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vim-plugins/update.py). This creates a [generated.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vim-plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vim-plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]@[gitref]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
Nix expressions for Vim plugins are stored in [pkgs/applications/editors/vim/plugins](https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/editors/vim/plugins). For the vast majority of plugins, Nix expressions are automatically generated by running [`./update.py`](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/update.py). This creates a [generated.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/generated.nix) file based on the plugins listed in [vim-plugin-names](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/vim-plugin-names). Plugins are listed in alphabetical order in `vim-plugin-names` using the format `[github username]/[repository]@[gitref]`. For example https://github.com/scrooloose/nerdtree becomes `scrooloose/nerdtree`.
Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/misc/vim-plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
Some plugins require overrides in order to function properly. Overrides are placed in [overrides.nix](https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/editors/vim/plugins/overrides.nix). Overrides are most often required when a plugin requires some dependencies, or extra steps are required during the build process. For example `deoplete-fish` requires both `deoplete-nvim` and `vim-fish`, and so the following override was added:
```nix
deoplete-fish = super.deoplete-fish.overrideAttrs(old: {
@ -330,13 +330,13 @@ Finally, there are some plugins that are also packaged in nodePackages because t
Run the update script with a GitHub API token that has at least `public_repo` access. Running the script without the token is likely to result in rate-limiting (429 errors). For steps on creating an API token, please refer to [GitHub's token documentation](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token).
```sh
GITHUB_API_TOKEN=my_token ./pkgs/misc/vim-plugins/update.py
GITHUB_API_TOKEN=my_token ./pkgs/applications/editors/vim/plugins/update.py
```
Alternatively, set the number of processes to a lower count to avoid rate-limiting.
```sh
./pkgs/misc/vim-plugins/update.py --proc 1
./pkgs/applications/editors/vim/plugins/update.py --proc 1
```
## Important repositories {#important-repositories}

View file

@ -2993,6 +2993,12 @@
githubId = 8404455;
name = "Diego Lelis";
};
DieracDelta = {
email = "justin@restivo.me";
github = "DieracDelta";
githubId = 13730968;
name = "Justin Restivo";
};
diffumist = {
email = "git@diffumist.me";
github = "diffumist";

View file

@ -1,4 +1,4 @@
# Used by pkgs/misc/vim-plugins/update.py and pkgs/applications/editors/kakoune/plugins/update.py
# Used by pkgs/applications/editors/vim/plugins/update.py and pkgs/applications/editors/kakoune/plugins/update.py
# format:
# $ nix run nixpkgs.python3Packages.black -c black update.py
@ -454,8 +454,8 @@ def prefetch_plugin(
)
def fetch_plugin_from_pluginline(plugin_line: str) -> Plugin:
plugin, _ = prefetch_plugin(parse_plugin_line(plugin_line))
def fetch_plugin_from_pluginline(config: FetchConfig, plugin_line: str) -> Plugin:
plugin, _ = prefetch_plugin(parse_plugin_line(config, plugin_line))
return plugin
@ -586,6 +586,7 @@ def prefetch(
def rewrite_input(
config: FetchConfig,
input_file: Path,
deprecated: Path,
redirects: Dict[str, str] = None,
@ -603,8 +604,8 @@ def rewrite_input(
with open(deprecated, "r") as f:
deprecations = json.load(f)
for old, new in redirects.items():
old_plugin = fetch_plugin_from_pluginline(old)
new_plugin = fetch_plugin_from_pluginline(new)
old_plugin = fetch_plugin_from_pluginline(config, old)
new_plugin = fetch_plugin_from_pluginline(config, new)
if old_plugin.normalized_name != new_plugin.normalized_name:
deprecations[old_plugin.normalized_name] = {
"new": new_plugin.normalized_name,
@ -640,7 +641,7 @@ def update_plugins(editor: Editor, args):
update = editor.get_update(args.input_file, args.outfile, fetch_config)
redirects = update()
editor.rewrite_input(args.input_file, editor.deprecated, redirects)
editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, redirects)
autocommit = not args.no_commit
@ -659,9 +660,9 @@ def update_plugins(editor: Editor, args):
)
for plugin_line in args.add_plugins:
editor.rewrite_input(args.input_file, editor.deprecated, append=(plugin_line + "\n",))
editor.rewrite_input(fetch_config, args.input_file, editor.deprecated, append=(plugin_line + "\n",))
update()
plugin = fetch_plugin_from_pluginline(plugin_line)
plugin = fetch_plugin_from_pluginline(fetch_config, plugin_line)
if autocommit:
commit(
nixpkgs_repo,

View file

@ -26,8 +26,26 @@
</listitem>
<listitem>
<para>
<literal>iptables</literal> now uses
<literal>nf_tables</literal> backend.
<literal>iptables</literal> is now using
<literal>nf_tables</literal> under the hood, by using
<literal>iptables-nft</literal>, similar to
<link xlink:href="https://wiki.debian.org/nftables#Current_status">Debian</link>
and
<link xlink:href="https://fedoraproject.org/wiki/Changes/iptables-nft-default">Fedora</link>.
This means, <literal>ip[6]tables</literal>,
<literal>arptables</literal> and <literal>ebtables</literal>
commands will actually show rules from some specific tables in
the <literal>nf_tables</literal> kernel subsystem.
</para>
</listitem>
<listitem>
<para>
systemd got an <literal>nftables</literal> backend, and
configures (networkd) rules in their own
<literal>io.systemd.*</literal> tables. Check
<literal>nft list ruleset</literal> to see these rules, not
<literal>iptables-save</literal> (which only shows
<literal>iptables</literal>-created rules.
</para>
</listitem>
<listitem>

View file

@ -98,7 +98,7 @@
<link xlink:href="https://frrouting.org/">FRRouting</link>, a
popular suite of Internet routing protocol daemons (BGP, BFD,
OSPF, IS-IS, VVRP and others). Available as
<link linkend="opt-services.ffr.babel.enable">services.frr</link>
<link linkend="opt-services.frr.babel.enable">services.frr</link>
</para>
</listitem>
<listitem>
@ -122,6 +122,13 @@
<link xlink:href="options.html#opt-services.powerdns-admin.enable">services.powerdns-admin</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/postgres/pgadmin4">pgadmin4</link>,
an admin interface for the PostgreSQL database. Available at
<link xlink:href="options.html#opt-services.pgadmin.enable">services.pgadmin</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/sezanzeb/input-remapper">input-remapper</link>,
@ -145,6 +152,15 @@
<link xlink:href="options.html#opt-services.maddy.enable">services.maddy</link>.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://www.scorchworks.com/K40whisperer/k40whisperer.html">K40-Whisperer</link>,
a program to control cheap Chinese laser cutters. Available as
<link xlink:href="options.html#opt-programs.k4-whisperer.enable">programs.k40-whisperer.enable</link>.
Users must add themselves to the <literal>k40</literal> group
to be able to access the device.
</para>
</listitem>
<listitem>
<para>
<link xlink:href="https://github.com/mgumz/mtr-exporter">mtr-exporter</link>,
@ -196,7 +212,7 @@
<para>
<link xlink:href="https://moosefs.com">moosefs</link>, fault
tolerant petabyte distributed file system. Available as
<link linkend="opt-services.moosefs">moosefs</link>.
<link linkend="opt-services.moosefs.client.enable">moosefs</link>.
</para>
</listitem>
<listitem>
@ -543,6 +559,14 @@
<literal>tilp2</literal> was removed together with its module
</para>
</listitem>
<listitem>
<para>
<literal>bird1</literal> and its modules
<literal>services.bird</literal> as well as
<literal>services.bird6</literal> have been removed. Upgrade
to <literal>services.bird2</literal>.
</para>
</listitem>
<listitem>
<para>
The options
@ -612,6 +636,13 @@
<literal>otelcorecol</literal> and enjoy a 7x smaller binary.
</para>
</listitem>
<listitem>
<para>
<literal>pkgs.pgadmin</literal> now refers to
<literal>pkgs.pgadmin4</literal>. If you still need pgadmin3,
use <literal>pkgs.pgadmin3</literal>.
</para>
</listitem>
<listitem>
<para>
<literal>pkgs.noto-fonts-cjk</literal> is now deprecated in
@ -735,6 +766,70 @@
<literal>false</literal>.
</para>
</listitem>
<listitem>
<para>
<literal>pkgs.makeDesktopItem</literal> has been refactored to
provide a more idiomatic API. Specifically:
</para>
<itemizedlist spacing="compact">
<listitem>
<para>
All valid options as of FDO Desktop Entry specification
version 1.4 can now be passed in as explicit arguments
</para>
</listitem>
<listitem>
<para>
<literal>exec</literal> can now be null, for entries that
are not of type Application
</para>
</listitem>
<listitem>
<para>
<literal>mimeType</literal> argument is renamed to
<literal>mimeTypes</literal> for consistency
</para>
</listitem>
<listitem>
<para>
<literal>mimeTypes</literal>,
<literal>categories</literal>,
<literal>implements</literal>,
<literal>keywords</literal>, <literal>onlyShowIn</literal>
and <literal>notShowIn</literal> take lists of strings
instead of one string with semicolon separators
</para>
</listitem>
<listitem>
<para>
<literal>extraDesktopEntries</literal> renamed to
<literal>extraConfig</literal> for consistency
</para>
</listitem>
<listitem>
<para>
Actions should now be provided as an attrset
<literal>actions</literal>, the <literal>Actions</literal>
line will be autogenerated.
</para>
</listitem>
<listitem>
<para>
<literal>extraEntries</literal> is removed.
</para>
</listitem>
<listitem>
<para>
Additional validation is added both at eval time and at
build time.
</para>
</listitem>
</itemizedlist>
<para>
See the <literal>vscode</literal> package for a more detailed
example.
</para>
</listitem>
</itemizedlist>
</section>
<section xml:id="sec-release-22.05-notable-changes">
@ -936,6 +1031,16 @@
<literal>true</literal>.
</para>
</listitem>
<listitem>
<para>
The <literal>element-desktop</literal> package now has an
<literal>useKeytar</literal> option (defaults to
<literal>true</literal>), which allows disabling
<literal>keytar</literal> and in turn
<literal>libsecret</literal> usage (which binds to native
credential managers / keychain libraries).
</para>
</listitem>
<listitem>
<para>
The option <literal>services.thelounge.plugins</literal> has
@ -1043,7 +1148,7 @@
<listitem>
<para>
The option
<link linkend="opt-services.networking.networkmanager.enableFccUnlock">services.networking.networkmanager.enableFccUnlock</link>
<link linkend="opt-networking.networkmanager.enableFccUnlock">services.networking.networkmanager.enableFccUnlock</link>
was added to support FCC unlock procedures. Since release
1.18.4, the ModemManager daemon no longer automatically
performs the FCC unlock procedure by default. See

View file

@ -8,6 +8,7 @@
This section lists the release notes for each stable version of NixOS and
current unstable revision.
</para>
<xi:include href="../from_md/release-notes/rl-2205.section.xml" />
<xi:include href="../from_md/release-notes/rl-2111.section.xml" />
<xi:include href="../from_md/release-notes/rl-2105.section.xml" />
<xi:include href="../from_md/release-notes/rl-2009.section.xml" />

View file

@ -8,7 +8,15 @@ In addition to numerous new and upgraded packages, this release has the followin
- Nix has been updated to version 2.4, reference its [release notes](https://discourse.nixos.org/t/nix-2-4-released/15822) for more information on what has changed. The previous version of Nix, 2.3.16, remains available for the time being in the `nix_2_3` package.
- `iptables` now uses `nf_tables` backend.
- `iptables` is now using `nf_tables` under the hood, by using `iptables-nft`,
similar to [Debian](https://wiki.debian.org/nftables#Current_status) and
[Fedora](https://fedoraproject.org/wiki/Changes/iptables-nft-default).
This means, `ip[6]tables`, `arptables` and `ebtables` commands will actually
show rules from some specific tables in the `nf_tables` kernel subsystem.
- systemd got an `nftables` backend, and configures (networkd) rules in their
own `io.systemd.*` tables. Check `nft list ruleset` to see these rules, not
`iptables-save` (which only shows `iptables`-created rules.
- PHP now defaults to PHP 8.0, updated from 7.4.

View file

@ -31,7 +31,7 @@ In addition to numerous new and upgraded packages, this release has the followin
- [apfs](https://github.com/linux-apfs/linux-apfs-rw), a kernel module for mounting the Apple File System (APFS).
- [FRRouting](https://frrouting.org/), a popular suite of Internet routing protocol daemons (BGP, BFD, OSPF, IS-IS, VVRP and others). Available as [services.frr](#opt-services.ffr.babel.enable)
- [FRRouting](https://frrouting.org/), a popular suite of Internet routing protocol daemons (BGP, BFD, OSPF, IS-IS, VVRP and others). Available as [services.frr](#opt-services.frr.babel.enable)
- [heisenbridge](https://github.com/hifi/heisenbridge), a bouncer-style Matrix IRC bridge. Available as [services.heisenbridge](options.html#opt-services.heisenbridge.enable).
@ -39,12 +39,16 @@ In addition to numerous new and upgraded packages, this release has the followin
- [PowerDNS-Admin](https://github.com/ngoduykhanh/PowerDNS-Admin), a web interface for the PowerDNS server. Available at [services.powerdns-admin](options.html#opt-services.powerdns-admin.enable).
- [pgadmin4](https://github.com/postgres/pgadmin4), an admin interface for the PostgreSQL database. Available at [services.pgadmin](options.html#opt-services.pgadmin.enable).
- [input-remapper](https://github.com/sezanzeb/input-remapper), an easy to use tool to change the mapping of your input device buttons. Available at [services.input-remapper](options.html#opt-services.input-remapper.enable).
- [InvoicePlane](https://invoiceplane.com), web application for managing and creating invoices. Available at [services.invoiceplane](options.html#opt-services.invoiceplane.enable).
- [maddy](https://maddy.email), a composable all-in-one mail server. Available as [services.maddy](options.html#opt-services.maddy.enable).
- [K40-Whisperer](https://www.scorchworks.com/K40whisperer/k40whisperer.html), a program to control cheap Chinese laser cutters. Available as [programs.k40-whisperer.enable](options.html#opt-programs.k4-whisperer.enable). Users must add themselves to the `k40` group to be able to access the device.
- [mtr-exporter](https://github.com/mgumz/mtr-exporter), a Prometheus exporter for mtr metrics. Available as [services.mtr-exporter](options.html#opt-services.mtr-exporter.enable).
- [tetrd](https://tetrd.app), share your internet connection from your device to your PC and vice versa through a USB cable. Available at [services.tetrd](#opt-services.tetrd.enable).
@ -58,7 +62,7 @@ In addition to numerous new and upgraded packages, this release has the followin
- [BaGet](https://loic-sharma.github.io/BaGet/), a lightweight NuGet and symbol server. Available at [services.baget](#opt-services.baget.enable).
- [moosefs](https://moosefs.com), fault tolerant petabyte distributed file system.
Available as [moosefs](#opt-services.moosefs).
Available as [moosefs](#opt-services.moosefs.client.enable).
- [prosody-filer](https://github.com/ThomasLeister/prosody-filer), a server for handling XMPP HTTP Upload requests. Available at [services.prosody-filer](#opt-services.prosody-filer.enable).
@ -178,6 +182,8 @@ In addition to numerous new and upgraded packages, this release has the followin
- `tilp2` was removed together with its module
- `bird1` and its modules `services.bird` as well as `services.bird6` have been removed. Upgrade to `services.bird2`.
- The options `networking.interfaces.<name>.ipv4.routes` and `networking.interfaces.<name>.ipv6.routes` are no longer ignored when using networkd instead of the default scripted network backend by setting `networking.useNetworkd` to `true`.
- MultiMC has been replaced with the fork PolyMC due to upstream developers being hostile to 3rd party package maintainers. PolyMC removes all MultiMC branding and is aimed at providing proper 3rd party packages like the one contained in Nixpkgs. This change affects the data folder where game instances and other save and configuration files are stored. Users with existing installations should rename `~/.local/share/multimc` to `~/.local/share/polymc`. The main config file's path has also moved from `~/.local/share/multimc/multimc.cfg` to `~/.local/share/polymc/polymc.cfg`.
@ -196,6 +202,8 @@ In addition to numerous new and upgraded packages, this release has the followin
you should change the package you refer to. If you don't need them update your
commands from `otelcontribcol` to `otelcorecol` and enjoy a 7x smaller binary.
- `pkgs.pgadmin` now refers to `pkgs.pgadmin4`.
If you still need pgadmin3, use `pkgs.pgadmin3`.
- `pkgs.noto-fonts-cjk` is now deprecated in favor of `pkgs.noto-fonts-cjk-sans`
and `pkgs.noto-fonts-cjk-serif` because they each have different release
@ -229,6 +237,18 @@ In addition to numerous new and upgraded packages, this release has the followin
pipewire-media-session is deprecated by upstream and not recommended, but can still be manually enabled by setting
`services.pipewire.media-session.enable` to `true` and `services.pipewire.wireplumber.enable` to `false`.
- `pkgs.makeDesktopItem` has been refactored to provide a more idiomatic API. Specifically:
- All valid options as of FDO Desktop Entry specification version 1.4 can now be passed in as explicit arguments
- `exec` can now be null, for entries that are not of type Application
- `mimeType` argument is renamed to `mimeTypes` for consistency
- `mimeTypes`, `categories`, `implements`, `keywords`, `onlyShowIn` and `notShowIn` take lists of strings instead of one string with semicolon separators
- `extraDesktopEntries` renamed to `extraConfig` for consistency
- Actions should now be provided as an attrset `actions`, the `Actions` line will be autogenerated.
- `extraEntries` is removed.
- Additional validation is added both at eval time and at build time.
See the `vscode` package for a more detailed example.
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
## Other Notable Changes {#sec-release-22.05-notable-changes}
@ -313,6 +333,10 @@ In addition to numerous new and upgraded packages, this release has the followin
using `fetchgit` or `fetchhg` if the argument `fetchSubmodules`
is set to `true`.
- The `element-desktop` package now has an `useKeytar` option (defaults to `true`),
which allows disabling `keytar` and in turn `libsecret` usage
(which binds to native credential managers / keychain libraries).
- The option `services.thelounge.plugins` has been added to allow installing plugins for The Lounge. Plugins can be found in `pkgs.theLoungePlugins.plugins` and `pkgs.theLoungePlugins.themes`.
- The `firmwareLinuxNonfree` package has been renamed to `linux-firmware`.
@ -344,7 +368,7 @@ In addition to numerous new and upgraded packages, this release has the followin
Using the old option name will still work, but produce a warning.
- The option
[services.networking.networkmanager.enableFccUnlock](#opt-services.networking.networkmanager.enableFccUnlock)
[services.networking.networkmanager.enableFccUnlock](#opt-networking.networkmanager.enableFccUnlock)
was added to support FCC unlock procedures. Since release 1.18.4, the ModemManager
daemon no longer automatically performs the FCC unlock procedure by default. See
[the docs](https://modemmanager.org/docs/modemmanager/fcc-unlock/) for more details.

View file

@ -24,6 +24,9 @@
[pi3]
kernel=u-boot-rpi3.bin
[pi02]
kernel=u-boot-rpi3.bin
[pi4]
kernel=u-boot-rpi4.bin
enable_gic=1
@ -33,6 +36,9 @@
# what the pi3 firmware does by default.
disable_overscan=1
# Supported in newer board revisions
arm_boost=1
[all]
# Boot in 64-bit mode.
arm_64bit=1

View file

@ -129,7 +129,7 @@ let
genericName = "View NixOS documentation in a web browser";
icon = "nix-snowflake";
exec = "nixos-help";
categories = "System";
categories = ["System"];
};
in pkgs.symlinkJoin {

View file

@ -167,6 +167,7 @@
./programs/iftop.nix
./programs/iotop.nix
./programs/java.nix
./programs/k40-whisperer.nix
./programs/kdeconnect.nix
./programs/kbdlight.nix
./programs/less.nix
@ -253,6 +254,7 @@
./security/tpm2.nix
./services/admin/meshcentral.nix
./services/admin/oxidized.nix
./services/admin/pgadmin.nix
./services/admin/salt/master.nix
./services/admin/salt/minion.nix
./services/amqp/activemq/default.nix
@ -897,6 +899,7 @@
./services/networking/tcpcrypt.nix
./services/networking/teamspeak3.nix
./services/networking/tedicross.nix
./services/networking/tetrd.nix
./services/networking/teleport.nix
./services/networking/thelounge.nix
./services/networking/tinc.nix

View file

@ -0,0 +1,40 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.k40-whisperer;
pkg = cfg.package.override {
udevGroup = cfg.group;
};
in
{
options.programs.k40-whisperer = {
enable = mkEnableOption "K40-Whisperer";
group = mkOption {
type = types.str;
description = ''
Group assigned to the device when connected.
'';
default = "k40";
};
package = mkOption {
type = types.package;
default = pkgs.k40-whisperer;
defaultText = literalExpression "pkgs.k40-whisperer";
example = literalExpression "pkgs.k40-whisperer";
description = ''
K40 Whisperer package to use.
'';
};
};
config = mkIf cfg.enable {
users.groups.${cfg.group} = {};
environment.systemPackages = [ pkg ];
services.udev.packages = [ pkg ];
};
}

View file

@ -8,18 +8,17 @@ let
# Based on https://source.puri.sm/Librem5/librem5-base/-/blob/4596c1056dd75ac7f043aede07887990fd46f572/default/sm.puri.OSK0.desktop
oskItem = pkgs.makeDesktopItem {
name = "sm.puri.OSK0";
type = "Application";
desktopName = "On-screen keyboard";
exec = "${pkgs.squeekboard}/bin/squeekboard";
categories = "GNOME;Core;";
extraEntries = ''
OnlyShowIn=GNOME;
NoDisplay=true
X-GNOME-Autostart-Phase=Panel
X-GNOME-Provides=inputmethod
X-GNOME-Autostart-Notify=true
X-GNOME-AutoRestart=true
'';
categories = [ "GNOME" "Core" ];
onlyShowIn = [ "GNOME" ];
noDisplay = true;
extraConfig = {
X-GNOME-Autostart-Phase = "Panel";
X-GNOME-Provides = "inputmethod";
X-GNOME-Autostart-Notify = "true";
X-GNOME-AutoRestart = "true";
};
};
phocConfigType = types.submodule {

View file

@ -0,0 +1,127 @@
{ config, lib, pkgs, ... }:
with lib;
let
pkg = pkgs.pgadmin4;
cfg = config.services.pgadmin;
_base = with types; [ int bool str ];
base = with types; oneOf ([ (listOf (oneOf _base)) (attrsOf (oneOf _base)) ] ++ _base);
formatAttrset = attr:
"{${concatStringsSep "\n" (mapAttrsToList (key: value: "${builtins.toJSON key}: ${formatPyValue value},") attr)}}";
formatPyValue = value:
if builtins.isString value then builtins.toJSON value
else if value ? _expr then value._expr
else if builtins.isInt value then toString value
else if builtins.isBool value then (if value then "True" else "False")
else if builtins.isAttrs value then (formatAttrset value)
else if builtins.isList value then "[${concatStringsSep "\n" (map (v: "${formatPyValue v},") value)}]"
else throw "Unrecognized type";
formatPy = attrs:
concatStringsSep "\n" (mapAttrsToList (key: value: "${key} = ${formatPyValue value}") attrs);
pyType = with types; attrsOf (oneOf [ (attrsOf base) (listOf base) base ]);
in
{
options.services.pgadmin = {
enable = mkEnableOption "PostgreSQL Admin 4";
port = mkOption {
description = "Port for pgadmin4 to run on";
type = types.port;
default = 5050;
};
initialEmail = mkOption {
description = "Initial email for the pgAdmin account.";
type = types.str;
};
initialPasswordFile = mkOption {
description = ''
Initial password file for the pgAdmin account.
NOTE: Should be string not a store path, to prevent the password from being world readable.
'';
type = types.path;
};
openFirewall = mkEnableOption "firewall passthrough for pgadmin4";
settings = mkOption {
description = ''
Settings for pgadmin4.
<link xlink:href="https://www.pgadmin.org/docs/pgadmin4/development/config_py.html">Documentation</link>.
'';
type = pyType;
default= {};
};
};
config = mkIf (cfg.enable) {
networking.firewall.allowedTCPPorts = mkIf (cfg.openFirewall) [ cfg.port ];
services.pgadmin.settings = {
DEFAULT_SERVER_PORT = cfg.port;
SERVER_MODE = true;
} // (optionalAttrs cfg.openFirewall {
DEFAULT_SERVER = mkDefault "::";
});
systemd.services.pgadmin = {
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
requires = [ "network.target" ];
# we're adding this optionally so just in case there's any race it'll be caught
# in case postgres doesn't start, pgadmin will just start normally
wants = [ "postgresql.service" ];
path = [ config.services.postgresql.package pkgs.coreutils pkgs.bash ];
preStart = ''
# NOTE: this is idempotent (aka running it twice has no effect)
(
# Email address:
echo ${escapeShellArg cfg.initialEmail}
# file might not contain newline. echo hack fixes that.
PW=$(cat ${escapeShellArg cfg.initialPasswordFile})
# Password:
echo "$PW"
# Retype password:
echo "$PW"
) | ${pkg}/bin/pgadmin4-setup
'';
restartTriggers = [
"/etc/pgadmin/config_system.py"
];
serviceConfig = {
User = "pgadmin";
DynamicUser = true;
LogsDirectory = "pgadmin";
StateDirectory = "pgadmin";
ExecStart = "${pkg}/bin/pgadmin4";
};
};
users.users.pgadmin = {
isSystemUser = true;
group = "pgadmin";
};
users.groups.pgadmin = {};
environment.etc."pgadmin/config_system.py" = {
text = formatPy cfg.settings;
mode = "0600";
user = "pgadmin";
group = "pgadmin";
};
};
}

View file

@ -44,24 +44,24 @@ let
optionString = concatStringsSep " " (mapAttrsToList streamToOption cfg.streams
# global options
++ [ "--stream.bind_to_address ${cfg.listenAddress}" ]
++ [ "--stream.port ${toString cfg.port}" ]
++ optionalNull cfg.sampleFormat "--stream.sampleformat ${cfg.sampleFormat}"
++ optionalNull cfg.codec "--stream.codec ${cfg.codec}"
++ optionalNull cfg.streamBuffer "--stream.stream_buffer ${toString cfg.streamBuffer}"
++ optionalNull cfg.buffer "--stream.buffer ${toString cfg.buffer}"
++ [ "--stream.bind_to_address=${cfg.listenAddress}" ]
++ [ "--stream.port=${toString cfg.port}" ]
++ optionalNull cfg.sampleFormat "--stream.sampleformat=${cfg.sampleFormat}"
++ optionalNull cfg.codec "--stream.codec=${cfg.codec}"
++ optionalNull cfg.streamBuffer "--stream.stream_buffer=${toString cfg.streamBuffer}"
++ optionalNull cfg.buffer "--stream.buffer=${toString cfg.buffer}"
++ optional cfg.sendToMuted "--stream.send_to_muted"
# tcp json rpc
++ [ "--tcp.enabled ${toString cfg.tcp.enable}" ]
++ [ "--tcp.enabled=${toString cfg.tcp.enable}" ]
++ optionals cfg.tcp.enable [
"--tcp.bind_to_address ${cfg.tcp.listenAddress}"
"--tcp.port ${toString cfg.tcp.port}" ]
"--tcp.bind_to_address=${cfg.tcp.listenAddress}"
"--tcp.port=${toString cfg.tcp.port}" ]
# http json rpc
++ [ "--http.enabled ${toString cfg.http.enable}" ]
++ [ "--http.enabled=${toString cfg.http.enable}" ]
++ optionals cfg.http.enable [
"--http.bind_to_address ${cfg.http.listenAddress}"
"--http.port ${toString cfg.http.port}"
] ++ optional (cfg.http.docRoot != null) "--http.doc_root \"${toString cfg.http.docRoot}\"");
"--http.bind_to_address=${cfg.http.listenAddress}"
"--http.port=${toString cfg.http.port}"
] ++ optional (cfg.http.docRoot != null) "--http.doc_root=\"${toString cfg.http.docRoot}\"");
in {
imports = [

View file

@ -266,7 +266,7 @@ in
in
''
export KUBECONFIG=${clusterAdminKubeconfig}
${kubectl}/bin/kubectl apply -f ${concatStringsSep " \\\n -f " files}
${kubernetes}/bin/kubectl apply -f ${concatStringsSep " \\\n -f " files}
'';
})]);

View file

@ -259,7 +259,7 @@ in
ipfs --offline config Mounts.IPFS ${cfg.ipfsMountDir}
ipfs --offline config Mounts.IPNS ${cfg.ipnsMountDir}
'' + optionalString cfg.autoMigrate ''
${pkgs.ipfs-migrator}/bin/fs-repo-migrations -y
${pkgs.ipfs-migrator}/bin/fs-repo-migrations -to '${cfg.package.repoVersion}' -y
'' + ''
ipfs --offline config show \
| ${pkgs.jq}/bin/jq '. * $extraConfig' --argjson extraConfig ${

View file

@ -3,103 +3,107 @@
let
inherit (lib) mkEnableOption mkIf mkOption optionalString types;
generic = variant:
let
cfg = config.services.${variant};
pkg = pkgs.${variant};
birdBin = if variant == "bird6" then "bird6" else "bird";
birdc = if variant == "bird6" then "birdc6" else "birdc";
descr =
{ bird = "1.6.x with IPv4 support";
bird6 = "1.6.x with IPv6 support";
bird2 = "2.x";
}.${variant};
in {
###### interface
options = {
services.${variant} = {
enable = mkEnableOption "BIRD Internet Routing Daemon (${descr})";
config = mkOption {
type = types.lines;
description = ''
BIRD Internet Routing Daemon configuration file.
<link xlink:href='http://bird.network.cz/'/>
'';
};
checkConfig = mkOption {
type = types.bool;
default = true;
description = ''
Whether the config should be checked at build time.
When the config can't be checked during build time, for example when it includes
other files, either disable this option or use <code>preCheckConfig</code> to create
the included files before checking.
'';
};
preCheckConfig = mkOption {
type = types.lines;
default = "";
example = ''
echo "cost 100;" > include.conf
'';
description = ''
Commands to execute before the config file check. The file to be checked will be
available as <code>${variant}.conf</code> in the current directory.
Files created with this option will not be available at service runtime, only during
build time checking.
'';
};
};
cfg = config.services.bird2;
in
{
###### interface
options = {
services.bird2 = {
enable = mkEnableOption "BIRD Internet Routing Daemon";
config = mkOption {
type = types.lines;
description = ''
BIRD Internet Routing Daemon configuration file.
<link xlink:href='http://bird.network.cz/'/>
'';
};
checkConfig = mkOption {
type = types.bool;
default = true;
description = ''
Whether the config should be checked at build time.
When the config can't be checked during build time, for example when it includes
other files, either disable this option or use <code>preCheckConfig</code> to create
the included files before checking.
'';
};
preCheckConfig = mkOption {
type = types.lines;
default = "";
example = ''
echo "cost 100;" > include.conf
'';
description = ''
Commands to execute before the config file check. The file to be checked will be
available as <code>bird2.conf</code> in the current directory.
###### implementation
config = mkIf cfg.enable {
environment.systemPackages = [ pkg ];
environment.etc."bird/${variant}.conf".source = pkgs.writeTextFile {
name = "${variant}.conf";
text = cfg.config;
checkPhase = optionalString cfg.checkConfig ''
ln -s $out ${variant}.conf
${cfg.preCheckConfig}
${pkg}/bin/${birdBin} -d -p -c ${variant}.conf
'';
};
systemd.services.${variant} = {
description = "BIRD Internet Routing Daemon (${descr})";
wantedBy = [ "multi-user.target" ];
reloadIfChanged = true;
restartTriggers = [ config.environment.etc."bird/${variant}.conf".source ];
serviceConfig = {
Type = "forking";
Restart = "on-failure";
ExecStart = "${pkg}/bin/${birdBin} -c /etc/bird/${variant}.conf -u ${variant} -g ${variant}";
ExecReload = "/bin/sh -c '${pkg}/bin/${birdBin} -c /etc/bird/${variant}.conf -p && ${pkg}/bin/${birdc} configure'";
ExecStop = "${pkg}/bin/${birdc} down";
CapabilityBoundingSet = [ "CAP_CHOWN" "CAP_FOWNER" "CAP_DAC_OVERRIDE" "CAP_SETUID" "CAP_SETGID"
# see bird/sysdep/linux/syspriv.h
"CAP_NET_BIND_SERVICE" "CAP_NET_BROADCAST" "CAP_NET_ADMIN" "CAP_NET_RAW" ];
ProtectSystem = "full";
ProtectHome = "yes";
SystemCallFilter="~@cpu-emulation @debug @keyring @module @mount @obsolete @raw-io";
MemoryDenyWriteExecute = "yes";
};
};
users = {
users.${variant} = {
description = "BIRD Internet Routing Daemon user";
group = variant;
isSystemUser = true;
};
groups.${variant} = {};
};
Files created with this option will not be available at service runtime, only during
build time checking.
'';
};
};
};
in
{
imports = map generic [ "bird" "bird6" "bird2" ];
imports = [
(lib.mkRemovedOptionModule [ "services" "bird" ] "Use services.bird2 instead")
(lib.mkRemovedOptionModule [ "services" "bird6" ] "Use services.bird2 instead")
];
###### implementation
config = mkIf cfg.enable {
environment.systemPackages = [ pkgs.bird ];
environment.etc."bird/bird2.conf".source = pkgs.writeTextFile {
name = "bird2";
text = cfg.config;
checkPhase = optionalString cfg.checkConfig ''
ln -s $out bird2.conf
${cfg.preCheckConfig}
${pkgs.bird}/bin/bird -d -p -c bird2.conf
'';
};
systemd.services.bird2 = {
description = "BIRD Internet Routing Daemon";
wantedBy = [ "multi-user.target" ];
reloadIfChanged = true;
restartTriggers = [ config.environment.etc."bird/bird2.conf".source ];
serviceConfig = {
Type = "forking";
Restart = "on-failure";
# We need to start as root so bird can open netlink sockets i.e. for ospf
ExecStart = "${pkgs.bird}/bin/bird -c /etc/bird/bird2.conf -u bird2 -g bird2";
ExecReload = "/bin/sh -c '${pkgs.bird}/bin/bird -c /etc/bird/bird2.conf -p && ${pkgs.bird}/bin/birdc configure'";
ExecStop = "${pkgs.bird}/bin/birdc down";
RuntimeDirectory = "bird";
CapabilityBoundingSet = [
"CAP_CHOWN"
"CAP_FOWNER"
"CAP_SETUID"
"CAP_SETGID"
"CAP_NET_ADMIN"
"CAP_NET_BROADCAST"
"CAP_NET_BIND_SERVICE"
"CAP_NET_RAW"
];
ProtectSystem = "full";
ProtectHome = "yes";
ProtectKernelTunables = true;
ProtectControlGroups = true;
PrivateTmp = true;
PrivateDevices = true;
SystemCallFilter = "~@cpu-emulation @debug @keyring @module @mount @obsolete @raw-io";
MemoryDenyWriteExecute = "yes";
};
};
users = {
users.bird2 = {
description = "BIRD Internet Routing Daemon user";
group = "bird2";
isSystemUser = true;
};
groups.bird2 = { };
};
};
}

View file

@ -306,7 +306,7 @@ in
Type = if forking then "forking" else "simple";
PIDFile = mkIf forking "/run/murmur/murmurd.pid";
EnvironmentFile = mkIf (cfg.environmentFile != null) cfg.environmentFile;
ExecStart = "${cfg.package}/bin/murmurd -ini /run/murmur/murmurd.ini";
ExecStart = "${cfg.package}/bin/mumble-server -ini /run/murmur/murmurd.ini";
Restart = "always";
RuntimeDirectory = "murmur";
RuntimeDirectoryMode = "0700";

View file

@ -1,7 +1,7 @@
{ config, lib, pkgs, ... }:
{
options.services.tetrd.enable = lib.mkEnableOption pkgs.tetrd.meta.description;
options.services.tetrd.enable = lib.mkEnableOption "tetrd";
config = lib.mkIf config.services.tetrd.enable {
environment = {

View file

@ -320,6 +320,7 @@ in {
};
storage = {
tmp = lib.mkDefault "/var/lib/peertube/storage/tmp/";
bin = lib.mkDefault "/var/lib/peertube/storage/bin/";
avatars = lib.mkDefault "/var/lib/peertube/storage/avatars/";
videos = lib.mkDefault "/var/lib/peertube/storage/videos/";
streaming_playlists = lib.mkDefault "/var/lib/peertube/storage/streaming-playlists/";
@ -333,6 +334,15 @@ in {
plugins = lib.mkDefault "/var/lib/peertube/storage/plugins/";
client_overrides = lib.mkDefault "/var/lib/peertube/storage/client-overrides/";
};
import = {
videos = {
http = {
youtube_dl_release = {
python_path = "${pkgs.python3}/bin/python";
};
};
};
};
}
(lib.mkIf cfg.redis.enableUnixSocket { redis = { socket = "/run/redis/redis.sock"; }; })
];
@ -380,7 +390,7 @@ in {
environment = env;
path = with pkgs; [ bashInteractive ffmpeg nodejs-16_x openssl yarn youtube-dl ];
path = with pkgs; [ bashInteractive ffmpeg nodejs-16_x openssl yarn python3 ];
script = ''
#!/bin/sh

View file

@ -1224,6 +1224,7 @@ in
keep = 1;
extraConfig = ''
create 0660 root ${config.users.groups.utmp.name}
minsize 1M
'';
};
"/var/log/wtmp" = mapAttrs (_: mkDefault) {
@ -1231,6 +1232,7 @@ in
keep = 1;
extraConfig = ''
create 0664 root ${config.users.groups.utmp.name}
minsize 1M
'';
};
};

View file

@ -0,0 +1,64 @@
{ config, pkgs, lib, ... }:
with lib;
{
options.proxmoxLXC = {
privileged = mkOption {
type = types.bool;
default = false;
description = ''
Whether to enable privileged mounts
'';
};
manageNetwork = mkOption {
type = types.bool;
default = false;
description = ''
Whether to manage network interfaces through nix options
When false, systemd-networkd is enabled to accept network
configuration from proxmox.
'';
};
};
config =
let
cfg = config.proxmoxLXC;
in
{
system.build.tarball = pkgs.callPackage ../../lib/make-system-tarball.nix {
storeContents = [{
object = config.system.build.toplevel;
symlink = "none";
}];
contents = [{
source = config.system.build.toplevel + "/init";
target = "/sbin/init";
}];
extraCommands = "mkdir -p root etc/systemd/network";
};
boot = {
isContainer = true;
loader.initScript.enable = true;
};
networking = mkIf (!cfg.manageNetwork) {
useDHCP = false;
useHostResolvConf = false;
useNetworkd = true;
};
services.openssh = {
enable = mkDefault true;
startWhenNeeded = mkDefault true;
};
systemd.mounts = mkIf (!cfg.privileged)
[{ where = "/sys/kernel/debug"; enable = false; }];
};
}

View file

@ -322,7 +322,6 @@ in
mysql-replication = handleTest ./mysql/mysql-replication.nix {};
n8n = handleTest ./n8n.nix {};
nagios = handleTest ./nagios.nix {};
nano = handleTest ./nano.nix {};
nar-serve = handleTest ./nar-serve.nix {};
nat.firewall = handleTest ./nat.nix { withFirewall = true; };
nat.firewall-conntrack = handleTest ./nat.nix { withFirewall = true; withConntrackHelpers = true; };
@ -394,6 +393,8 @@ in
pdns-recursor = handleTest ./pdns-recursor.nix {};
peerflix = handleTest ./peerflix.nix {};
peertube = handleTestOn ["x86_64-linux"] ./web-apps/peertube.nix {};
pgadmin4 = handleTest ./pgadmin4.nix {};
pgadmin4-standalone = handleTest ./pgadmin4-standalone.nix {};
pgjwt = handleTest ./pgjwt.nix {};
pgmanage = handleTest ./pgmanage.nix {};
php = handleTest ./php {};

View file

@ -9,7 +9,7 @@ let
inherit (import ../lib/testing-python.nix { inherit system pkgs; }) makeTest;
inherit (pkgs.lib) optionalString;
hostShared = hostId: { pkgs, ... }: {
makeBird2Host = hostId: { pkgs, ... }: {
virtualisation.vlans = [ 1 ];
environment.systemPackages = with pkgs; [ jq ];
@ -24,105 +24,6 @@ let
name = "eth1";
networkConfig.Address = "10.0.0.${hostId}/24";
};
};
birdTest = v4:
let variant = "bird${optionalString (!v4) "6"}"; in
makeTest {
name = variant;
nodes.host1 = makeBirdHost variant "1";
nodes.host2 = makeBirdHost variant "2";
testScript = makeTestScript variant v4 (!v4);
};
bird2Test = makeTest {
name = "bird2";
nodes.host1 = makeBird2Host "1";
nodes.host2 = makeBird2Host "2";
testScript = makeTestScript "bird2" true true;
};
makeTestScript = variant: v4: v6: ''
start_all()
host1.wait_for_unit("${variant}.service")
host2.wait_for_unit("${variant}.service")
${optionalString v4 ''
with subtest("Waiting for advertised IPv4 routes"):
host1.wait_until_succeeds("ip --json r | jq -e 'map(select(.dst == \"10.10.0.2\")) | any'")
host2.wait_until_succeeds("ip --json r | jq -e 'map(select(.dst == \"10.10.0.1\")) | any'")
''}
${optionalString v6 ''
with subtest("Waiting for advertised IPv6 routes"):
host1.wait_until_succeeds("ip --json -6 r | jq -e 'map(select(.dst == \"fdff::2\")) | any'")
host2.wait_until_succeeds("ip --json -6 r | jq -e 'map(select(.dst == \"fdff::1\")) | any'")
''}
with subtest("Check fake routes in preCheckConfig do not exists"):
${optionalString v4 ''host1.fail("ip --json r | jq -e 'map(select(.dst == \"1.2.3.4\")) | any'")''}
${optionalString v4 ''host2.fail("ip --json r | jq -e 'map(select(.dst == \"1.2.3.4\")) | any'")''}
${optionalString v6 ''host1.fail("ip --json -6 r | jq -e 'map(select(.dst == \"fd00::\")) | any'")''}
${optionalString v6 ''host2.fail("ip --json -6 r | jq -e 'map(select(.dst == \"fd00::\")) | any'")''}
'';
makeBirdHost = variant: hostId: { pkgs, ... }: {
imports = [ (hostShared hostId) ];
services.${variant} = {
enable = true;
config = ''
log syslog all;
debug protocols all;
router id 10.0.0.${hostId};
protocol device {
}
protocol kernel {
import none;
export all;
}
protocol static {
include "static.conf";
}
protocol ospf {
export all;
area 0 {
interface "eth1" {
hello 5;
wait 5;
};
};
}
'';
preCheckConfig =
let
route = { bird = "1.2.3.4/32"; bird6 = "fd00::/128"; }.${variant};
in
''echo "route ${route} blackhole;" > static.conf'';
};
systemd.tmpfiles.rules =
let
route = { bird = "10.10.0.${hostId}/32"; bird6 = "fdff::${hostId}/128"; }.${variant};
in
[ "f /etc/bird/static.conf - - - - route ${route} blackhole;" ];
};
makeBird2Host = hostId: { pkgs, ... }: {
imports = [ (hostShared hostId) ];
services.bird2 = {
enable = true;
@ -198,8 +99,30 @@ let
];
};
in
{
bird = birdTest true;
bird6 = birdTest false;
bird2 = bird2Test;
makeTest {
name = "bird2";
nodes.host1 = makeBird2Host "1";
nodes.host2 = makeBird2Host "2";
testScript = ''
start_all()
host1.wait_for_unit("bird2.service")
host2.wait_for_unit("bird2.service")
with subtest("Waiting for advertised IPv4 routes"):
host1.wait_until_succeeds("ip --json r | jq -e 'map(select(.dst == \"10.10.0.2\")) | any'")
host2.wait_until_succeeds("ip --json r | jq -e 'map(select(.dst == \"10.10.0.1\")) | any'")
with subtest("Waiting for advertised IPv6 routes"):
host1.wait_until_succeeds("ip --json -6 r | jq -e 'map(select(.dst == \"fdff::2\")) | any'")
host2.wait_until_succeeds("ip --json -6 r | jq -e 'map(select(.dst == \"fdff::1\")) | any'")
with subtest("Check fake routes in preCheckConfig do not exists"):
host1.fail("ip --json r | jq -e 'map(select(.dst == \"1.2.3.4\")) | any'")
host2.fail("ip --json r | jq -e 'map(select(.dst == \"1.2.3.4\")) | any'")
host1.fail("ip --json -6 r | jq -e 'map(select(.dst == \"fd00::\")) | any'")
host2.fail("ip --json -6 r | jq -e 'map(select(.dst == \"fd00::\")) | any'")
'';
}

View file

@ -18,7 +18,7 @@ let
${master.ip} api.${domain}
${concatMapStringsSep "\n" (machineName: "${machines.${machineName}.ip} ${machineName}.${domain}") (attrNames machines)}
'';
kubectl = with pkgs; runCommand "wrap-kubectl" { buildInputs = [ makeWrapper ]; } ''
wrapKubectl = with pkgs; runCommand "wrap-kubectl" { buildInputs = [ makeWrapper ]; } ''
mkdir -p $out/bin
makeWrapper ${pkgs.kubernetes}/bin/kubectl $out/bin/kubectl --set KUBECONFIG "/etc/kubernetes/cluster-admin.kubeconfig"
'';
@ -48,7 +48,7 @@ let
};
};
programs.bash.enableCompletion = true;
environment.systemPackages = [ kubectl ];
environment.systemPackages = [ wrapKubectl ];
services.flannel.iface = "eth1";
services.kubernetes = {
proxy.hostname = "${masterName}.${domain}";

View file

@ -76,7 +76,7 @@ let
}];
});
kubectl = pkgs.runCommand "copy-kubectl" { buildInputs = [ pkgs.kubernetes ]; } ''
copyKubectl = pkgs.runCommand "copy-kubectl" { } ''
mkdir -p $out/bin
cp ${pkgs.kubernetes}/bin/kubectl $out/bin/kubectl
'';
@ -84,7 +84,7 @@ let
kubectlImage = pkgs.dockerTools.buildImage {
name = "kubectl";
tag = "latest";
contents = [ kubectl pkgs.busybox kubectlPod2 ];
contents = [ copyKubectl pkgs.busybox kubectlPod2 ];
config.Entrypoint = ["/bin/sh"];
};

View file

@ -19,7 +19,8 @@ import ./make-test-python.nix ({ pkgs, ...} : rec {
# wtmp is present in default config.
"rm -f /var/log/wtmp*",
"echo test > /var/log/wtmp",
# we need to give it at least 1MB
"dd if=/dev/zero of=/var/log/wtmp bs=2M count=1",
# move into the future and rotate
"date -s 'now + 1 month + 1 day'",

View file

@ -1,44 +0,0 @@
import ./make-test-python.nix ({ pkgs, ...} : {
name = "nano";
meta = with pkgs.lib.maintainers; {
maintainers = [ nequissimus ];
};
machine = { lib, ... }: {
environment.systemPackages = [ pkgs.nano ];
};
testScript = { ... }: ''
start_all()
with subtest("Create user and log in"):
machine.wait_for_unit("multi-user.target")
machine.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
machine.succeed("useradd -m alice")
machine.succeed("(echo foobar; echo foobar) | passwd alice")
machine.wait_until_tty_matches(1, "login: ")
machine.send_chars("alice\n")
machine.wait_until_tty_matches(1, "login: alice")
machine.wait_until_succeeds("pgrep login")
machine.wait_until_tty_matches(1, "Password: ")
machine.send_chars("foobar\n")
machine.wait_until_succeeds("pgrep -u alice bash")
machine.screenshot("prompt")
with subtest("Use nano"):
machine.send_chars("nano /tmp/foo")
machine.send_key("ret")
machine.sleep(2)
machine.send_chars("42")
machine.sleep(1)
machine.send_key("ctrl-x")
machine.sleep(1)
machine.send_key("y")
machine.sleep(1)
machine.screenshot("nano")
machine.sleep(1)
machine.send_key("ret")
machine.wait_for_file("/tmp/foo")
assert "42" in machine.succeed("cat /tmp/foo")
'';
})

View file

@ -868,7 +868,7 @@ let
print(client.succeed("ip l add name foo type dummy"))
print(client.succeed("stat /etc/systemd/network/50-foo.link"))
client.succeed("udevadm settle")
assert "mtu 1442" in client.succeed("ip l show dummy0")
assert "mtu 1442" in client.succeed("ip l show dev foo")
'';
};
wlanInterface = let

View file

@ -0,0 +1,43 @@
import ./make-test-python.nix ({ pkgs, lib, ... }:
# This is seperate from pgadmin4 since we don't want both running at once
{
name = "pgadmin4-standalone";
meta.maintainers = with lib.maintainers; [ mkg20001 ];
nodes.machine = { pkgs, ... }: {
environment.systemPackages = with pkgs; [
curl
];
services.postgresql = {
enable = true;
authentication = ''
host all all localhost trust
'';
ensureUsers = [
{
name = "postgres";
ensurePermissions = {
"DATABASE \"postgres\"" = "ALL PRIVILEGES";
};
}
];
};
services.pgadmin = {
enable = true;
initialEmail = "bruh@localhost.de";
initialPasswordFile = pkgs.writeText "pw" "bruh2012!";
};
};
testScript = ''
machine.wait_for_unit("postgresql")
machine.wait_for_unit("pgadmin")
machine.wait_until_succeeds("curl -s localhost:5050")
'';
})

142
nixos/tests/pgadmin4.nix Normal file
View file

@ -0,0 +1,142 @@
import ./make-test-python.nix ({ pkgs, lib, ... }:
let
pgadmin4SrcDir = "/pgadmin";
pgadmin4Dir = "/var/lib/pgadmin";
pgadmin4LogDir = "/var/log/pgadmin";
python-with-needed-packages = pkgs.python3.withPackages (ps: with ps; [
selenium
testtools
testscenarios
flask
flask-babelex
flask-babel
flask-gravatar
flask_login
flask_mail
flask_migrate
flask_sqlalchemy
flask_wtf
flask-compress
passlib
pytz
simplejson
six
sqlparse
wtforms
flask-paranoid
psutil
psycopg2
python-dateutil
sqlalchemy
itsdangerous
flask-security-too
bcrypt
cryptography
sshtunnel
ldap3
gssapi
flask-socketio
eventlet
httpagentparser
user-agents
wheel
authlib
qrcode
pillow
pyotp
]);
in
{
name = "pgadmin4";
meta.maintainers = with lib.maintainers; [ gador ];
nodes.machine = { pkgs, ... }: {
imports = [ ./common/x11.nix ];
environment.systemPackages = with pkgs; [
pgadmin4
postgresql
python-with-needed-packages
chromedriver
chromium
];
services.postgresql = {
enable = true;
authentication = ''
host all all localhost trust
'';
ensureUsers = [
{
name = "postgres";
ensurePermissions = {
"DATABASE \"postgres\"" = "ALL PRIVILEGES";
};
}
];
};
};
testScript = ''
machine.wait_for_unit("postgresql")
# pgadmin4 needs its data and log directories
machine.succeed(
"mkdir -p ${pgadmin4Dir} \
&& mkdir -p ${pgadmin4LogDir} \
&& mkdir -p ${pgadmin4SrcDir}"
)
machine.succeed(
"tar xvzf ${pkgs.pgadmin4.src} -C ${pgadmin4SrcDir}"
)
machine.wait_for_file("${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/README.md")
# set paths and config for tests
machine.succeed(
"cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version} \
&& cp -v web/regression/test_config.json.in web/regression/test_config.json \
&& sed -i 's|PostgreSQL 9.4|PostgreSQL|' web/regression/test_config.json \
&& sed -i 's|/opt/PostgreSQL/9.4/bin/|${pkgs.postgresql}/bin|' web/regression/test_config.json \
&& sed -i 's|\"headless_chrome\": false|\"headless_chrome\": true|' web/regression/test_config.json"
)
# adapt chrome config to run within a sandbox without GUI
# see https://stackoverflow.com/questions/50642308/webdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-t#50642913
# add chrome binary path. use spaces to satisfy python indention (tabs throw an error)
# this works for selenium 3 (currently used), but will need to be updated
# to work with "from selenium.webdriver.chrome.service import Service" in selenium 4
machine.succeed(
"cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version} \
&& sed -i '\|options.add_argument(\"--disable-infobars\")|a \ \ \ \ \ \ \ \ options.binary_location = \"${pkgs.chromium}/bin/chromium\"' web/regression/runtests.py \
&& sed -i '\|options.add_argument(\"--no-sandbox\")|a \ \ \ \ \ \ \ \ options.add_argument(\"--headless\")' web/regression/runtests.py \
&& sed -i '\|options.add_argument(\"--disable-infobars\")|a \ \ \ \ \ \ \ \ options.add_argument(\"--disable-dev-shm-usage\")' web/regression/runtests.py \
&& sed -i 's|(chrome_options=options)|(executable_path=\"${pkgs.chromedriver}/bin/chromedriver\", chrome_options=options)|' web/regression/runtests.py \
&& sed -i 's|driver_local.maximize_window()||' web/regression/runtests.py"
)
# don't bother to test LDAP authentification
with subtest("run browser test"):
machine.succeed(
'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
&& ${python-with-needed-packages.interpreter} regression/runtests.py --pkg browser --exclude \
browser.tests.test_ldap_login.LDAPLoginTestCase,browser.tests.test_ldap_login'
)
# fontconfig is necessary for chromium to run
# https://github.com/NixOS/nixpkgs/issues/136207
with subtest("run feature test"):
machine.succeed(
'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
&& export FONTCONFIG_FILE=${pkgs.makeFontsConf { fontDirectories = [];}} \
&& ${python-with-needed-packages.interpreter} regression/runtests.py --pkg feature_tests'
)
with subtest("run resql test"):
machine.succeed(
'cd ${pgadmin4SrcDir}/pgadmin4-${pkgs.pgadmin4.version}/web \
&& ${python-with-needed-packages.interpreter} regression/runtests.py --pkg resql'
)
'';
})

View file

@ -126,7 +126,7 @@ import ../make-test-python.nix (
podman.succeed("docker network create default")
podman.succeed("tar cv --files-from /dev/null | podman import - scratchimg")
podman.succeed(
"docker run -d --name=sleeping -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin scratchimg /bin/sleep 10"
"docker run -d --name=sleeping -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin localhost/scratchimg /bin/sleep 10"
)
podman.succeed("docker ps | grep sleeping")
podman.succeed("podman ps | grep sleeping")

View file

@ -129,7 +129,7 @@ import ../make-test-python.nix (
podman.succeed("tar cv --files-from /dev/null | podman import - scratchimg")
client.succeed(
"docker run -d --name=sleeping -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin scratchimg /bin/sleep 10"
"docker run -d --name=sleeping -v /nix/store:/nix/store -v /run/current-system/sw/bin:/bin localhost/scratchimg /bin/sleep 10"
)
client.succeed("docker ps | grep sleeping")
podman.succeed("docker ps | grep sleeping")

View file

@ -15,13 +15,13 @@ assert withGtk3 -> gtk3 != null;
stdenv.mkDerivation rec {
pname = "carla";
version = "2.4.1";
version = "2.4.2";
src = fetchFromGitHub {
owner = "falkTX";
repo = pname;
rev = "v${version}";
sha256 = "sha256-faVLPHPQ4voR/RHiPpUwnZK+5Jx0u4rJWuH5zlydzwY=";
sha256 = "sha256-A0QmyphjsNU06kh2f9rXrR+GkDEI5HqXRA9J82E6qJU=";
};
nativeBuildInputs = [

View file

@ -12,7 +12,6 @@ with lib;
let
pname = "goattracker" + optionalString isStereo "-stereo";
desktopItem = makeDesktopItem {
type = "Application";
name = pname;
desktopName = "GoatTracker 2" + optionalString isStereo " Stereo";
genericName = "Music Tracker";
@ -20,8 +19,8 @@ let
then "gt2stereo"
else "goattrk2";
icon = "goattracker";
categories = "AudioVideo;AudioVideoEditing;";
extraEntries = "Keywords=tracker;music;";
categories = [ "AudioVideo" "AudioVideoEditing" ];
keywords = [ "tracker" "music" ];
};
in stdenv.mkDerivation rec {

View file

@ -38,19 +38,15 @@ mkDerivation rec{
desktopItems = [
(makeDesktopItem {
name = "jamesdsp.desktop";
name = "jamesdsp";
desktopName = "JamesDSP";
genericName = "Audio effects processor";
exec = "jamesdsp";
icon = "jamesdsp";
comment = "JamesDSP for Linux";
categories = "AudioVideo;Audio";
categories = [ "AudioVideo" "Audio" ];
startupNotify = false;
terminal = false;
type = "Application";
extraDesktopEntries = {
Keywords = "equalizer;audio;effect";
};
keywords = [ "equalizer" "audio" "effect" ];
})
];

View file

@ -3,12 +3,12 @@
mkDerivation rec {
pname = "jamulus";
version = "3.8.1";
version = "3.8.2";
src = fetchFromGitHub {
owner = "jamulussoftware";
repo = "jamulus";
rev = "r${lib.replaceStrings [ "." ] [ "_" ] version}";
sha256 = "sha256-QtlvcKVqKgRAO/leHy4CgvjNW49HAyZLI2JtKERP7HQ=";
sha256 = "sha256-K2HznkntDhp+I8DHJk5Cuh5cR8yjwfzX+pGGzS8yVLQ=";
};
nativeBuildInputs = [ pkg-config qmake ];

View file

@ -15,7 +15,7 @@ let
icon = "${placeholder "out"}/share/lyrebird/icon.png";
desktopName = "Lyrebird";
genericName = "Voice Changer";
categories = "AudioVideo;Audio;";
categories = [ "AudioVideo" "Audio" ];
};
in
python3Packages.buildPythonApplication rec {

View file

@ -11,7 +11,6 @@
, wrapGAppsHook
, fetchurl
, fetchFromGitHub
, makeDesktopItem
}:
rustPlatform.buildRustPackage rec {
pname = "netease-cloud-music-gtk";

View file

@ -2,12 +2,12 @@
let
pname = "plexamp";
version = "4.0.1";
version = "4.0.2";
src = fetchurl {
url = "https://plexamp.plex.tv/plexamp.plex.tv/desktop/Plexamp-${version}.AppImage";
name="${pname}-${version}.AppImage";
sha512 = "pZy2afj7g6wnOIHH3ecCYUX7/NX5op4aLSHe4/GbI5L9NUuFGoJIWWuVbv2kngcTo+XUqP0yoe0Ns+I4WulDVA==";
sha512 = "DqgzEt+frDJOcwOnQ5sx7JqEH5l/FJYCL5/97YBsEC2iTMIYi+NBUvuzyZcfRzOTfq7b/QBALDpRgvepWYjkxg==";
};
appimageContents = appimageTools.extractType2 {
@ -33,7 +33,7 @@ in appimageTools.wrapType2 {
meta = with lib; {
description = "A beautiful Plex music player for audiophiles, curators, and hipsters";
homepage = "https://plexamp.com/";
changelog = "https://forums.plex.tv/t/plexamp-release-notes/221280/39";
changelog = "https://forums.plex.tv/t/plexamp-release-notes/221280/40";
license = licenses.unfree;
maintainers = with maintainers; [ killercup synthetica ];
platforms = [ "x86_64-linux" ];

View file

@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
icon = pname;
desktopName = "REW";
genericName = "Software for audio measurements";
categories = "AudioVideo;";
categories = [ "AudioVideo" ];
};
responseFile = writeTextFile {

View file

@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
icon = "SonyHeadphonesClient";
desktopName = "Sony Headphones Client";
comment = "A client recreating the functionality of the Sony Headphones app";
categories = "Audio;Mixer;";
categories = [ "Audio" "Mixer" ];
}) ];
meta = with lib; {

View file

@ -36,13 +36,13 @@
mkDerivation rec {
pname = "strawberry";
version = "1.0.1";
version = "1.0.2";
src = fetchFromGitHub {
owner = "jonaski";
repo = pname;
rev = version;
sha256 = "sha256-MlS1ShRXfsTMs97MeExW6sfpv40OcQLDIzIzOYGk7Rw=";
sha256 = "sha256-/pwHWmQTV1QBK+5SS0/NC6wMm2QQm+iCZArxiHjn4M4=";
};
buildInputs = [

View file

@ -21,13 +21,13 @@
stdenv.mkDerivation rec {
pname = "tauon";
version = "7.1.1";
version = "7.1.2";
src = fetchFromGitHub {
owner = "Taiko2k";
repo = "TauonMusicBox";
rev = "v${version}";
sha256 = "sha256-eVliTSFTBG56mU1Crt3syoYxKclz/6W15y/30C+Tf1g=";
sha256 = "sha256-0/xWSae5TD5qI+HgoJ2DAHxqv/Z0E4DGiQhfTA03xkM=";
};
postPatch = ''

View file

@ -1,26 +1,35 @@
{ stdenv, lib, fetchFromGitHub, cmake, pkg-config
, mpg123, ffmpeg, libvorbis, libao, jansson
, mpg123, ffmpeg, libvorbis, libao, jansson, speex
}:
let
vgmstreamVersion = "r1702-5596-00bdb165b";
in
stdenv.mkDerivation rec {
pname = "vgmstream";
version = "r1050-3448-g77cc431b";
pname = "vgmstream";
version = "unstable-2022-02-21";
src = fetchFromGitHub {
owner = "vgmstream";
repo = "vgmstream";
rev = version;
sha256 = "030q02c9li14by7vm00gn6v3m4dxxmfwiy9iyz3xsgzq1i7pqc1d";
owner = "vgmstream";
repo = "vgmstream";
rev = "00bdb165ba6b55420bbd5b21f54c4f7a825d15a0";
sha256 = "18g1yqlnf48hi2xn2z2wajnjljpdbfdqmcmi7y8hi1r964ypmfcr";
};
passthru.updateScript = ./update.sh;
nativeBuildInputs = [ cmake pkg-config ];
buildInputs = [ mpg123 ffmpeg libvorbis libao jansson ];
buildInputs = [ mpg123 ffmpeg libvorbis libao jansson speex ];
# There's no nice way to build the audacious plugin without a circular dependency
cmakeFlags = [ "-DBUILD_AUDACIOUS=OFF" ];
cmakeFlags = [
# There's no nice way to build the audacious plugin without a circular dependency
"-DBUILD_AUDACIOUS=OFF"
# It always tries to download it, no option to use the system one
"-DUSE_CELT=OFF"
];
preConfigure = ''
echo "#define VERSION \"${version}\"" > cli/version.h
postConfigure = ''
echo "#define VGMSTREAM_VERSION \"${vgmstreamVersion}\"" > ../version.h
'';
meta = with lib; {

View file

@ -0,0 +1,77 @@
#!/usr/bin/env nix-shell
#!nix-shell -i bash --pure --keep GITHUB_TOKEN -p gnused jq nix-prefetch-git curl cacert
set -euo pipefail
ROOT="$(dirname "$(readlink -f "$0")")"
if [[ ! "$(basename $ROOT)" == "vgmstream" || ! -f "$ROOT/default.nix" ]]; then
echo "ERROR: Not in the vgmstream folder"
exit 1
fi
if [[ ! -v GITHUB_TOKEN ]]; then
echo "ERROR: \$GITHUB_TOKEN not set"
exit 1
fi
payload=$(jq -cn --rawfile query /dev/stdin '{"query": $query}' <<EOF | curl -s -H "Authorization: bearer $GITHUB_TOKEN" -d '@-' https://api.github.com/graphql
{
repository(owner: "vgmstream", name: "vgmstream") {
branch: ref(qualifiedName: "refs/heads/master") {
target {
oid
... on Commit {
committedDate
history {
totalCount
}
}
}
}
tag: refs(refPrefix: "refs/tags/", first: 1, orderBy: {field: TAG_COMMIT_DATE, direction: DESC}) {
nodes {
name
}
}
}
}
EOF
)
committed_full_date=$(jq -r .data.repository.branch.target.committedDate <<< "$payload")
committed_date=$(sed -nE 's/^([0-9]{4}-[0-9]{2}-[0-9]{2}).+$/\1/p' <<< $committed_full_date)
commit_unix=$(date --utc --date="$committed_date" +%s)
last_updated_unix=$(date --utc --date=$(sed -nE 's/^\s*version\s*=\s*\"unstable-([0-9]{4}-[0-9]{2}-[0-9]{2})\";$/\1/p' default.nix) +%s)
commit_sha=$(jq -r .data.repository.branch.target.oid <<< "$payload")
major_ver=$(jq -r .data.repository.tag.nodes[0].name <<< "$payload" | sed 's/^v//g')
commit_count=$(jq -r .data.repository.branch.target.history.totalCount <<< "$payload")
final_ver="$major_ver-$commit_count-${commit_sha::9}"
echo "INFO: Latest commit is $commit_sha"
echo "INFO: Latest commit date is $committed_full_date"
echo "INFO: Latest version is $final_ver"
##
# VGMStream has no stable releases, so only update if there's been at
# least a week between commits to reduce maintainer pressure.
##
time_diff=$(( $commit_unix - $last_updated_unix ))
if [[ $time_diff -lt 604800 ]]; then
echo "INFO: Not updating, less than a week between commits."
echo "INFO: $time_diff < 604800"
exit 0
fi
nix_sha256=$(nix-prefetch-git --quiet https://github.com/vgmstream/vgmstream.git "$commit_sha" | jq -r .sha256)
echo "INFO: SHA256 is $nix_sha256"
sed -i -E \
-e "s/vgmstreamVersion\s*=\s*\"[a-z0-9-]+\";$/vgmstreamVersion = \"${final_ver}\";/g" \
-e "s/version\s*=\s*\"[a-z0-9-]+\";$/version = \"unstable-${committed_date}\";/g" \
-e "s/rev\s*=\s*\"[a-z0-9]+\";$/rev = \"${commit_sha}\";/g" \
-e "s/sha256\s*=\s*\"[a-z0-9]+\";$/sha256 = \"${nix_sha256}\";/g" \
"$ROOT/default.nix"

View file

@ -17,8 +17,8 @@
, fftwFloat
, flex
, glib
, gtk3
, gtksourceview3
, gtk4
, gtksourceview5
, guile
, graphviz
, help2man
@ -56,17 +56,19 @@
, xxHash
, vamp-plugin-sdk
, zstd
, libadwaita
, sassc
}:
stdenv.mkDerivation rec {
pname = "zrythm";
version = "1.0.0-alpha.26.0.13";
version = "1.0.0-alpha.28.1.3";
src = fetchFromGitHub {
owner = pname;
repo = pname;
rev = "v${version}";
sha256 = "sha256-dkXlkJ+qlfxV9Bv2UvZZa2iRVm8tgpK4JxkWL2Jeq48=";
sha256 = "sha256-ERE7I6E3+RmmpnZEtcJL/1v9a37IwFauVsbJvI9gsRQ=";
};
nativeBuildInputs = [
@ -99,8 +101,8 @@ stdenv.mkDerivation rec {
flex
breeze-icons
glib
gtk3
gtksourceview3
gtk4
gtksourceview5
graphviz
guile
json-glib
@ -128,6 +130,8 @@ stdenv.mkDerivation rec {
xdg-utils
xxHash
zstd
libadwaita
sassc
];
mesonFlags = [
@ -157,7 +161,7 @@ stdenv.mkDerivation rec {
preFixup = ''
gappsWrapperArgs+=(
--prefix GSETTINGS_SCHEMA_DIR : "$out/share/gsettings-schemas/${pname}-${version}/glib-2.0/schemas/"
)
)
'';
meta = with lib; {

View file

@ -51,7 +51,7 @@ stdenv.mkDerivation rec {
icon = "bisq";
desktopName = "Bisq ${version}";
genericName = "Decentralized bitcoin exchange";
categories = "Network;P2P;";
categories = [ "Network" "P2P" ];
})
];

View file

@ -1,4 +1,4 @@
{ lib, fetchurl, makeDesktopItem, appimageTools, imagemagick }:
{ lib, fetchurl, appimageTools, imagemagick }:
let
pname = "chain-desktop-wallet";

View file

@ -2,16 +2,16 @@
buildGoModule rec {
pname = "erigon";
version = "2022.02.02";
version = "2022.02.03";
src = fetchFromGitHub {
owner = "ledgerwatch";
repo = pname;
rev = "v${version}";
sha256 = "sha256-hFoIPlmNzG2oQON86OUY9Y8oRbqexPVo4e7+pTbh1Kk=";
sha256 = "sha256-M8rCLkKoCx+5Eg53HfK6Ui4UrYsujGd7G8ckONclhTM=";
};
vendorSha256 = "sha256-vXIuXT7BIs7xjGq1DBk0/dGQ0ccxfrFGLn6E03MUvY4=";
vendorSha256 = "sha256-loYo1nAR1lARsfoY5Q+k/tgVBxNxcr++zwUjLN3TRLA=";
proxyVendor = true;
# Build errors in mdbx when format hardening is enabled:

View file

@ -4,11 +4,11 @@ cups, vivaldi-ffmpeg-codecs, libpulseaudio, at-spi2-core, libxkbcommon, mesa }:
stdenv.mkDerivation rec {
pname = "exodus";
version = "21.12.3";
version = "22.2.11";
src = fetchurl {
url = "https://downloads.exodus.io/releases/${pname}-linux-x64-${version}.zip";
sha256 = "sha256-8Jgg9OxptkhD1SBjVBoklHQVCUOO+EePWnyEajqlivE=";
sha256 = "sha256-/K5dB5Qfaiv68YWTQ4j5QnqSo+TXPkWcQ+PlJpzDoe8=";
};
sourceRoot = ".";

View file

@ -76,7 +76,7 @@ stdenv.mkDerivation rec {
icon = "monero";
desktopName = "Monero";
genericName = "Wallet";
categories = "Network;Utility;";
categories = [ "Network" "Utility" ];
};
postInstall = ''

View file

@ -23,7 +23,7 @@ let
comment = "MyCrypto is a free, open-source interface for interacting with the blockchain";
exec = pname;
icon = "mycrypto";
categories = "Finance;";
categories = [ "Finance" ];
};
in appimageTools.wrapType2 rec {

View file

@ -3,14 +3,14 @@
with lib;
stdenv.mkDerivation rec {
version = "nc0.21.1";
version = "nc22.0";
name = "namecoin" + toString (optional (!withGui) "d") + "-" + version;
src = fetchFromGitHub {
owner = "namecoin";
repo = "namecoin-core";
rev = version;
sha256 = "sha256-dA4BGhxHm0EdvqMq27zzWp2vOPyKbCgV1i1jt17TVxU=";
sha256 = "sha256-Z3CLDe0c4IpFPPTie8yoh0kcuvGmiegSgl4ITNSDkgY=";
};
nativeBuildInputs = [

View file

@ -59,9 +59,10 @@ stdenv.mkDerivation rec {
meta = with lib; {
description = "Private cryptocurrency based on Monero";
homepage = "https://oxen.io/";
license = licenses.bsd3;
platforms = platforms.all;
homepage = "https://oxen.io/";
license = licenses.bsd3;
platforms = platforms.all;
maintainers = [ maintainers.viric ];
broken = stdenv.isDarwin; # never built on Hydra https://hydra.nixos.org/job/nixpkgs/trunk/oxen.x86_64-darwin
};
}

View file

@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
desktopName = "Wasabi";
genericName = "Bitcoin wallet";
comment = meta.description;
categories = "Network;Utility;";
categories = [ "Network" "Utility" ];
};
installPhase = ''

View file

@ -159,14 +159,14 @@ let
};
desktopItem = makeDesktopItem {
name = drvName;
name = pname;
exec = pname;
icon = drvName;
icon = pname;
desktopName = "Android Studio (${channel} channel)";
comment = "The official Android IDE";
categories = "Development;IDE;";
startupNotify = "true";
extraEntries="StartupWMClass=jetbrains-studio";
categories = [ "Development" "IDE" ];
startupNotify = true;
startupWMClass = "jetbrains-studio";
};
# Android Studio downloads prebuilt binaries as part of the SDK. These tools
@ -229,6 +229,6 @@ in runCommand
echo -n "$startScript" > $out/bin/${pname}
chmod +x $out/bin/${pname}
ln -s ${androidStudio}/bin/studio.png $out/share/pixmaps/${drvName}.png
ln -s ${androidStudio}/bin/studio.png $out/share/pixmaps/${pname}.png
ln -s ${desktopItem}/share/applications $out/share/applications
''

View file

@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
comment = "Integrated Development Environment";
desktopName = "Eclipse IDE";
genericName = "Integrated Development Environment";
categories = "Development;";
categories = [ "Development" ];
};
buildInputs = [

View file

@ -234,10 +234,10 @@
elpaBuild {
pname = "auctex";
ename = "auctex";
version = "13.0.16";
version = "13.1.1";
src = fetchurl {
url = "https://elpa.gnu.org/packages/auctex-13.0.16.tar";
sha256 = "1r9piq4js45knw8sf73kk8jjinmx4m2mdinc98xrklnwcffw7hjf";
url = "https://elpa.gnu.org/packages/auctex-13.1.1.tar";
sha256 = "193sqq2wiq3lg99m8hifl9rjxdazpy638r99sqvmxmkfm98cr34r";
};
packageRequires = [ emacs ];
meta = {
@ -309,10 +309,10 @@
elpaBuild {
pname = "bbdb";
ename = "bbdb";
version = "3.2";
version = "3.2.1";
src = fetchurl {
url = "https://elpa.gnu.org/packages/bbdb-3.2.tar";
sha256 = "1p56dg0mja2b2figy7yhdx714zd5j6njzn0k07zjka3jc06izvjx";
url = "https://elpa.gnu.org/packages/bbdb-3.2.1.tar";
sha256 = "01vsnifs47krq1srgdkk9agbv3p2fykl9nydr4nrfjxbqpnyh3ij";
};
packageRequires = [ cl-lib emacs ];
meta = {
@ -1236,10 +1236,10 @@
elpaBuild {
pname = "eev";
ename = "eev";
version = "20220212";
version = "20220224";
src = fetchurl {
url = "https://elpa.gnu.org/packages/eev-20220212.tar";
sha256 = "1w04jwh8y6l1fgx6sahwj9znw9cm83a1lld5vdgnbsww2m5nk8zm";
url = "https://elpa.gnu.org/packages/eev-20220224.tar";
sha256 = "008750fm7w5k9yrkwyxgank02smxki2857cd2d8qvhsa2qnz6c5n";
};
packageRequires = [ emacs ];
meta = {
@ -1394,10 +1394,10 @@
elpaBuild {
pname = "emms";
ename = "emms";
version = "9";
version = "10";
src = fetchurl {
url = "https://elpa.gnu.org/packages/emms-9.tar";
sha256 = "12p9nigzyrlpkfvg7v76jmcfs08z84gggnx7h4frdaim3kx5y6xf";
url = "https://elpa.gnu.org/packages/emms-10.tar";
sha256 = "1lgjw9p799sl7nqnl2sk4g67ra10z2ldygx9kb8pmxjrx64mi3qm";
};
packageRequires = [ cl-lib nadvice seq ];
meta = {
@ -2043,10 +2043,10 @@
elpaBuild {
pname = "isearch-mb";
ename = "isearch-mb";
version = "0.3";
version = "0.4";
src = fetchurl {
url = "https://elpa.gnu.org/packages/isearch-mb-0.3.tar";
sha256 = "01yq1skc6rm9yp80vz2fhh9lbkdb9nhf57h424mrkycdky2w50mx";
url = "https://elpa.gnu.org/packages/isearch-mb-0.4.tar";
sha256 = "11q9sdi6l795hspi7hr621bbra66pxsgrkry95k7wxjkmibcbsxr";
};
packageRequires = [ emacs ];
meta = {
@ -2622,10 +2622,10 @@
elpaBuild {
pname = "modus-themes";
ename = "modus-themes";
version = "2.0.0";
version = "2.2.0";
src = fetchurl {
url = "https://elpa.gnu.org/packages/modus-themes-2.0.0.tar";
sha256 = "15d1ywj8k4yh57arzv7z2ir49gf2j7a80pscrfgxsypnyl2dkkfa";
url = "https://elpa.gnu.org/packages/modus-themes-2.2.0.tar";
sha256 = "1vgwr9q16d3hjwmqljmmzlpn177gvwbk3wg4l1fmgc5bpb7k78ky";
};
packageRequires = [ emacs ];
meta = {
@ -3160,10 +3160,10 @@
elpaBuild {
pname = "parser-generator";
ename = "parser-generator";
version = "0.1.4";
version = "0.1.5";
src = fetchurl {
url = "https://elpa.gnu.org/packages/parser-generator-0.1.4.tar";
sha256 = "0712y22cl6i98jlhmsm436v0mlmscbypc15sdkn704a491ipq2qj";
url = "https://elpa.gnu.org/packages/parser-generator-0.1.5.tar";
sha256 = "06cl9whk321l1q5xcjmgq5c59l10ybwcdsmmbrkrllnbpqxy23bj";
};
packageRequires = [ emacs ];
meta = {
@ -3650,10 +3650,10 @@
elpaBuild {
pname = "repology";
ename = "repology";
version = "1.1.0";
version = "1.2.2";
src = fetchurl {
url = "https://elpa.gnu.org/packages/repology-1.1.0.tar";
sha256 = "031245rrhazj53bk1csa6x3ygzvg74w2hwjf08ficwvmdn97li90";
url = "https://elpa.gnu.org/packages/repology-1.2.2.tar";
sha256 = "0ggb0zgz24hs5andhyrlpqm0gda0gf1wynzkarj4z7gpk5p9wrpr";
};
packageRequires = [ emacs ];
meta = {
@ -3727,6 +3727,21 @@
license = lib.licenses.free;
};
}) {};
satchel = callPackage ({ elpaBuild, emacs, fetchurl, lib, project }:
elpaBuild {
pname = "satchel";
ename = "satchel";
version = "0.2";
src = fetchurl {
url = "https://elpa.gnu.org/packages/satchel-0.2.tar";
sha256 = "1ajsfrr988nglw2l4kqjbbdq9x8gidv0ymsrg3jm2b9nisfhnixv";
};
packageRequires = [ emacs project ];
meta = {
homepage = "https://elpa.gnu.org/packages/satchel.html";
license = lib.licenses.free;
};
}) {};
scanner = callPackage ({ dash, elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "scanner";
@ -4305,6 +4320,21 @@
license = lib.licenses.free;
};
}) {};
tramp-nspawn = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "tramp-nspawn";
ename = "tramp-nspawn";
version = "1.0";
src = fetchurl {
url = "https://elpa.gnu.org/packages/tramp-nspawn-1.0.tar";
sha256 = "1si649vcj4md50p5nzvw431580rcl113rraj6fw636a394485hvx";
};
packageRequires = [ emacs ];
meta = {
homepage = "https://elpa.gnu.org/packages/tramp-nspawn.html";
license = lib.licenses.free;
};
}) {};
tramp-theme = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
elpaBuild {
pname = "tramp-theme";
@ -4903,10 +4933,10 @@
elpaBuild {
pname = "xref";
ename = "xref";
version = "1.3.2";
version = "1.4.0";
src = fetchurl {
url = "https://elpa.gnu.org/packages/xref-1.3.2.tar";
sha256 = "1bwvli2d6d06gh004hnbbwy6rkn0jv1d1s7slfladqjjdkpjvpzd";
url = "https://elpa.gnu.org/packages/xref-1.4.0.tar";
sha256 = "1ng03fyhpisa1v99sc96mpr7hna1pmg4gdc61p86r8lka9m5gqfx";
};
packageRequires = [ emacs ];
meta = {

View file

@ -1825,10 +1825,10 @@
elpaBuild {
pname = "rust-mode";
ename = "rust-mode";
version = "1.0.3";
version = "1.0.4";
src = fetchurl {
url = "https://elpa.nongnu.org/nongnu/rust-mode-1.0.3.tar";
sha256 = "1hg5hr5jma5v4rilchwyyw1fzm8lkfd3fxay0sb9dgzrgypvh5am";
url = "https://elpa.nongnu.org/nongnu/rust-mode-1.0.4.tar";
sha256 = "137z04h29cgy1dmkf2cnchlfzqs4f5v3cc9gv9qxisw9dswlvdvk";
};
packageRequires = [ emacs ];
meta = {

View file

@ -25,6 +25,8 @@
, srcRepo ? false, autoreconfHook ? null, texinfo ? null
, siteStart ? ./site-start.el
, nativeComp ? false
, withAthena ? false
, withToolkitScrollBars ? true
, withPgtk ? false
, withXinput2 ? false
, withImageMagick ? lib.versionOlder version "27" && (withX || withNS)
@ -32,6 +34,7 @@
if withGTK2 then "gtk2"
else if withGTK3 then "gtk3"
else if withMotif then "motif"
else if withAthena then "athena"
else "lucid")
}:
@ -154,6 +157,7 @@ let emacs = stdenv.mkDerivation (lib.optionalAttrs nativeComp {
++ lib.optional withImageMagick "--with-imagemagick"
++ lib.optional withPgtk "--with-pgtk"
++ lib.optional withXinput2 "--with-xinput2"
++ lib.optional (!withToolkitScrollBars) "--without-toolkit-scroll-bars"
;
installTargets = [ "tags" "install" ];

View file

@ -27,11 +27,9 @@ with stdenv; lib.makeOverridable mkDerivation (rec {
comment = lib.replaceChars ["\n"] [" "] meta.longDescription;
desktopName = product;
genericName = meta.description;
categories = "Development;";
categories = [ "Development" ];
icon = mainProgram;
extraEntries = ''
StartupWMClass=${wmClass}
'';
startupWMClass = wmClass;
};
vmoptsFile = optionalString (vmopts != null) (writeText vmoptsName vmopts);

View file

@ -1,14 +1,12 @@
{ stdenv, lib, fetchFromGitHub, cmake, extra-cmake-modules, threadweaver, ktexteditor, kdevelop-unwrapped, kdevelop-pg-qt }:
{ stdenv, lib, fetchurl, cmake, extra-cmake-modules, threadweaver, ktexteditor, kdevelop-unwrapped, kdevelop-pg-qt }:
stdenv.mkDerivation rec {
pname = "kdev-php";
version = "5.6.2";
src = fetchFromGitHub {
owner = "KDE";
repo = "kdev-php";
rev = "v${version}";
sha256 = "sha256-hEumH7M6yAuH+jPShOmbKjHmuPRg2djaVy9Xt28eK38=";
src = fetchurl {
url = "mirror://kde/stable/kdevelop/${version}/src/${pname}-${version}.tar.xz";
hash = "sha256-8Qg9rsK4x1LeGgRB0Pn3InSx4tKccjAF7Xjc+Lpxfgw=";
};
nativeBuildInputs = [ cmake extra-cmake-modules ];

View file

@ -1,14 +1,12 @@
{ stdenv, lib, fetchFromGitHub, cmake, extra-cmake-modules, threadweaver, ktexteditor, kdevelop-unwrapped, python }:
{ stdenv, lib, fetchurl, cmake, extra-cmake-modules, threadweaver, ktexteditor, kdevelop-unwrapped, python }:
stdenv.mkDerivation rec {
pname = "kdev-python";
version = "5.6.2";
src = fetchFromGitHub {
owner = "KDE";
repo = "kdev-python";
rev = "v${version}";
sha256 = "sha256-xYElqpJjRtBRIyZGf6JaCvurQ+QrGrdLHxtuANYfCds=";
src = fetchurl {
url = "mirror://kde/stable/kdevelop/${version}/src/${pname}-${version}.tar.xz";
hash = "sha256-IPm3cblhJi3tmGpPMrjSWa2fe8SLsp6sCl1YU74dkX8=";
};
cmakeFlags = [

View file

@ -39,7 +39,7 @@ in
comment = "Kode Studio is an IDE for Kha based on Visual Studio Code";
desktopName = "Kode Studio";
genericName = "Text Editor";
categories = "GNOME;GTK;Utility;TextEditor;Development;";
categories = [ "GNOME" "GTK" "Utility" "TextEditor" "Development" ];
};
sourceRoot = ".";

View file

@ -24,11 +24,9 @@ mkDerivation rec {
comment = meta.description;
desktopName = "Leo";
genericName = "Text Editor";
categories = lib.concatStringsSep ";" [
"Application" "Development" "IDE"
];
startupNotify = "false";
mimeType = lib.concatStringsSep ";" [
categories = [ "Application" "Development" "IDE" ];
startupNotify = false;
mimeTypes = [
"text/plain" "text/asp" "text/x-c" "text/x-script.elisp" "text/x-fortran"
"text/html" "application/inf" "text/x-java-source" "application/x-javascript"
"application/javascript" "text/ecmascript" "application/x-ksh" "text/x-script.ksh"

View file

@ -1,5 +1,5 @@
{ lib, stdenv, fetchurl, fetchFromGitHub, ncurses, texinfo, writeScript
, common-updater-scripts, git, nix, nixfmt, coreutils, gnused, nixosTests
, common-updater-scripts, git, nix, nixfmt, coreutils, gnused, callPackage
, gettext ? null, enableNls ? true, enableTiny ? false }:
assert enableNls -> (gettext != null);
@ -16,11 +16,11 @@ let
in stdenv.mkDerivation rec {
pname = "nano";
version = "6.1";
version = "6.2";
src = fetchurl {
url = "mirror://gnu/nano/${pname}-${version}.tar.xz";
sha256 = "PVfsiT+/3tEmZbfw1WPXRDH8Q6vqzKzt6iO2avcE20A=";
sha256 = "K8oYBL6taq9K15H3VuR0m7Ve2GDuwQWpf7qGS8anfLM=";
};
nativeBuildInputs = [ texinfo ] ++ optional enableNls gettext;
@ -41,7 +41,9 @@ in stdenv.mkDerivation rec {
enableParallelBuilding = true;
passthru = {
tests = { inherit (nixosTests) nano; };
tests = {
expect = callPackage ./test-with-expect.nix {};
};
updateScript = writeScript "update.sh" ''
#!${stdenv.shell}

View file

@ -0,0 +1,35 @@
{ nano, expect, runCommand, writeScriptBin, runtimeShell }:
let expect-script = writeScriptBin "expect-script" ''
#!${expect}/bin/expect -f
# Load nano
spawn nano file.txt
expect "GNU nano ${nano.version}"
# Add some text to the buffer
send "Hello world!"
expect "Hello world!"
# Send ctrl-x (exit)
send "\030"
expect "Save modified buffer?"
# Answer "yes"
send "y"
expect "File Name to Write"
# Send "return" to accept the file path.
send "\r"
sleep 1
exit
''; in
runCommand "nano-test-expect"
{
nativeBuildInputs = [ nano expect ];
passthru = { inherit expect-script; };
} ''
expect -f ${expect-script}/bin/expect-script
grep "Hello world!" file.txt
touch $out
''

View file

@ -10,7 +10,7 @@ let
comment = "Integrated Development Environment";
desktopName = "Apache NetBeans IDE";
genericName = "Integrated Development Environment";
categories = "Development;";
categories = [ "Development" ];
icon = "netbeans";
};
in

View file

@ -10,7 +10,7 @@ let
icon = "quartus";
desktopName = "Quartus";
genericName = "Quartus Prime";
categories = "Development;";
categories = [ "Development" ];
};
# I think modelsim_ase/linux/vlm checksums itself, so use FHSUserEnv instead of `patchelf`
in buildFHSUserEnv rec {

View file

@ -227,8 +227,13 @@ in
desktopName = "RStudio";
genericName = "IDE";
comment = description;
categories = "Development;";
mimeType = "text/x-r-source;text/x-r;text/x-R;text/x-r-doc;text/x-r-sweave;text/x-r-markdown;text/x-r-html;text/x-r-presentation;application/x-r-data;application/x-r-project;text/x-r-history;text/x-r-profile;text/x-tex;text/x-markdown;text/html;text/css;text/javascript;text/x-chdr;text/x-csrc;text/x-c++hdr;text/x-c++src;";
categories = [ "Development" ];
mimeTypes = [
"text/x-r-source" "text/x-r" "text/x-R" "text/x-r-doc" "text/x-r-sweave" "text/x-r-markdown"
"text/x-r-html" "text/x-r-presentation" "application/x-r-data" "application/x-r-project"
"text/x-r-history" "text/x-r-profile" "text/x-tex" "text/x-markdown" "text/html"
"text/css" "text/javascript" "text/x-chdr" "text/x-csrc" "text/x-c++hdr" "text/x-c++src"
];
})
];
})

View file

@ -6,13 +6,13 @@
mkDerivation rec {
pname = "sigil";
version = "1.8.0";
version = "1.9.0";
src = fetchFromGitHub {
repo = "Sigil";
owner = "Sigil-Ebook";
rev = version;
sha256 = "sha256-luX4/KERB4GwpID7zVnd6F/mN8SHTy9zmqSUzJ1CYPk=";
sha256 = "sha256-3rECGnb0kkQwzsMxLxgAp0QEoHFHv+qCjiCgzCZeUJw=";
};
pythonPath = with python3Packages; [ lxml ];

View file

@ -55,7 +55,7 @@ stdenv.mkDerivation rec {
comment = meta.description;
desktopName = "Sublime Text";
genericName = "Text Editor";
categories = "TextEditor;Development;";
categories = [ "TextEditor" "Development" ];
icon = "sublime_text";
};

View file

@ -21,7 +21,7 @@ buildPythonApplication rec {
icon = "thonny";
desktopName = "Thonny";
comment = "Python IDE for beginners";
categories = "Development;IDE";
categories = [ "Development" "IDE" ];
}) ];
propagatedBuildInputs = with python3.pkgs; [

View file

@ -414,7 +414,7 @@ self: super: {
markdown-preview-nvim = super.markdown-preview-nvim.overrideAttrs (old: let
# We only need its dependencies `node-modules`.
nodeDep = nodePackages."markdown-preview-nvim-../../misc/vim-plugins/markdown-preview-nvim".overrideAttrs (old: {
nodeDep = nodePackages."markdown-preview-nvim-../../applications/editors/vim/plugins/markdown-preview-nvim".overrideAttrs (old: {
dontNpmInstall = true;
});
in {

View file

@ -1,5 +1,6 @@
{ pkgs ? import ../../.. { } }:
{ pkgs ? import ../../../../.. { } }:
# Ideally, pkgs points to default.nix file of Nixpkgs official tree
with pkgs;
let
pyEnv = python3.withPackages (ps: [ ps.GitPython ]);

View file

@ -13,6 +13,9 @@
# refer to:
#
# https://github.com/NixOS/nixpkgs/blob/master/doc/languages-frameworks/vim.section.md#updating-plugins-in-nixpkgs-updating-plugins-in-nixpkgs
#
# (or the equivalent file /doc/languages-frameworks/vim.section.md from Nixpkgs master tree).
#
import inspect
import os
@ -27,7 +30,8 @@ log.addHandler(logging.StreamHandler())
# Import plugin update library from maintainers/scripts/pluginupdate.py
ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))))
sys.path.insert(0, os.path.join(ROOT.parent.parent.parent, "maintainers", "scripts"))
# Ideally, ROOT.(parent^5) points to root of Nixpkgs official tree
sys.path.insert(0, os.path.join(ROOT.parent.parent.parent.parent.parent, "maintainers", "scripts"))
import pluginupdate
GET_PLUGINS = f"""(with import <localpkgs> {{}};
@ -47,7 +51,7 @@ let
in lib.filterAttrs (n: v: v != null) checksums)"""
HEADER = (
"# This file has been generated by ./pkgs/misc/vim-plugins/update.py. Do not edit!"
"# This file has been generated by ./pkgs/applications/editors/vim/plugins/update.py. Do not edit!"
)

View file

@ -18,6 +18,7 @@ alvan/vim-closetag
alvarosevilla95/luatab.nvim
alx741/vim-hindent
alx741/vim-stylishask
AmeerTaweel/todo.nvim
amiorin/ctrlp-z
andersevenrud/cmp-tmux
andersevenrud/nordic.nvim
@ -52,7 +53,6 @@ benizi/vim-automkdir
bhurlow/vim-parinfer
bitc/vim-hdevtools
bkad/camelcasemotion
blackCauldron7/surround.nvim
bling/vim-bufferline
blueballs-theme/blueballs-neovim
blueyed/vim-diminactive
@ -314,6 +314,7 @@ joonty/vim-xdebug
joosepalviste/nvim-ts-context-commentstring
jordwalke/vim-reasonml
josa42/coc-lua
josa42/nvim-lightline-lsp
josa42/vim-lightline-coc
jose-elias-alvarez/minsnip.nvim
jose-elias-alvarez/null-ls.nvim
@ -420,6 +421,7 @@ lighttiger2505/deoplete-vim-lsp
lilydjwg/colorizer
lilydjwg/fcitx.vim@fcitx5
liuchengxu/graphviz.vim
liuchengxu/space-vim
liuchengxu/vim-clap
liuchengxu/vim-which-key
liuchengxu/vista.vim
@ -772,6 +774,8 @@ sodapopcan/vim-twiggy
solarnz/arcanist.vim
sonph/onehalf
sotte/presenting.vim
SpaceVim/SpaceVim
spywhere/lightline-lsp
srcery-colors/srcery-vim
steelsojka/completion-buffers
steelsojka/pears.nvim
@ -887,6 +891,7 @@ uarun/vim-protobuf
udalov/kotlin-vim
ujihisa/neco-look
unblevable/quick-scope
ur4ltz/surround.nvim
urbit/hoon.vim
Valloric/MatchTagAlways
Valodim/deoplete-notmuch

View file

@ -82,7 +82,8 @@ See vimHelpTags sample code below.
CONTRIBUTING AND CUSTOMIZING
============================
The example file pkgs/misc/vim-plugins/default.nix provides both:
The example file pkgs/applications/editors/vim/plugins/default.nix provides
both:
* manually mantained plugins
* plugins created by VAM's nix#ExportPluginsForNix implementation

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