Merge branch 'staging-next' into staging
This commit is contained in:
commit
1316edc465
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
|
@ -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
2
.github/labeler.yml
vendored
|
@ -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/**/*
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
|
|
40
nixos/modules/programs/k40-whisperer.nix
Normal file
40
nixos/modules/programs/k40-whisperer.nix
Normal 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 ];
|
||||
};
|
||||
}
|
|
@ -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 {
|
||||
|
|
127
nixos/modules/services/admin/pgadmin.nix
Normal file
127
nixos/modules/services/admin/pgadmin.nix
Normal 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";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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 = [
|
||||
|
|
|
@ -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}
|
||||
'';
|
||||
})]);
|
||||
|
||||
|
|
|
@ -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 ${
|
||||
|
|
|
@ -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 = { };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
64
nixos/modules/virtualisation/proxmox-lxc.nix
Normal file
64
nixos/modules/virtualisation/proxmox-lxc.nix
Normal 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; }];
|
||||
|
||||
};
|
||||
}
|
|
@ -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 {};
|
||||
|
|
|
@ -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'")
|
||||
'';
|
||||
}
|
||||
|
|
|
@ -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}";
|
||||
|
|
|
@ -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"];
|
||||
};
|
||||
|
||||
|
|
|
@ -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'",
|
||||
|
|
|
@ -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")
|
||||
'';
|
||||
})
|
|
@ -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
|
||||
|
|
43
nixos/tests/pgadmin4-standalone.nix
Normal file
43
nixos/tests/pgadmin4-standalone.nix
Normal 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
142
nixos/tests/pgadmin4.nix
Normal 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'
|
||||
)
|
||||
'';
|
||||
})
|
|
@ -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")
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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" ];
|
||||
})
|
||||
];
|
||||
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
, wrapGAppsHook
|
||||
, fetchurl
|
||||
, fetchFromGitHub
|
||||
, makeDesktopItem
|
||||
}:
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "netease-cloud-music-gtk";
|
||||
|
|
|
@ -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" ];
|
||||
|
|
|
@ -29,7 +29,7 @@ stdenv.mkDerivation rec {
|
|||
icon = pname;
|
||||
desktopName = "REW";
|
||||
genericName = "Software for audio measurements";
|
||||
categories = "AudioVideo;";
|
||||
categories = [ "AudioVideo" ];
|
||||
};
|
||||
|
||||
responseFile = writeTextFile {
|
||||
|
|
|
@ -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; {
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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 = ''
|
||||
|
|
|
@ -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; {
|
||||
|
|
77
pkgs/applications/audio/vgmstream/update.sh
Executable file
77
pkgs/applications/audio/vgmstream/update.sh
Executable 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"
|
|
@ -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; {
|
||||
|
|
|
@ -51,7 +51,7 @@ stdenv.mkDerivation rec {
|
|||
icon = "bisq";
|
||||
desktopName = "Bisq ${version}";
|
||||
genericName = "Decentralized bitcoin exchange";
|
||||
categories = "Network;P2P;";
|
||||
categories = [ "Network" "P2P" ];
|
||||
})
|
||||
];
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ lib, fetchurl, makeDesktopItem, appimageTools, imagemagick }:
|
||||
{ lib, fetchurl, appimageTools, imagemagick }:
|
||||
|
||||
let
|
||||
pname = "chain-desktop-wallet";
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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 = ".";
|
||||
|
|
|
@ -76,7 +76,7 @@ stdenv.mkDerivation rec {
|
|||
icon = "monero";
|
||||
desktopName = "Monero";
|
||||
genericName = "Wallet";
|
||||
categories = "Network;Utility;";
|
||||
categories = [ "Network" "Utility" ];
|
||||
};
|
||||
|
||||
postInstall = ''
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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
|
||||
};
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ stdenv.mkDerivation rec {
|
|||
desktopName = "Wasabi";
|
||||
genericName = "Bitcoin wallet";
|
||||
comment = meta.description;
|
||||
categories = "Network;Utility;";
|
||||
categories = [ "Network" "Utility" ];
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
|
|
|
@ -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
|
||||
''
|
||||
|
|
|
@ -14,7 +14,7 @@ stdenv.mkDerivation rec {
|
|||
comment = "Integrated Development Environment";
|
||||
desktopName = "Eclipse IDE";
|
||||
genericName = "Integrated Development Environment";
|
||||
categories = "Development;";
|
||||
categories = [ "Development" ];
|
||||
};
|
||||
|
||||
buildInputs = [
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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 = {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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" ];
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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 = ".";
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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}
|
||||
|
|
35
pkgs/applications/editors/nano/test-with-expect.nix
Normal file
35
pkgs/applications/editors/nano/test-with-expect.nix
Normal 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
|
||||
''
|
|
@ -10,7 +10,7 @@ let
|
|||
comment = "Integrated Development Environment";
|
||||
desktopName = "Apache NetBeans IDE";
|
||||
genericName = "Integrated Development Environment";
|
||||
categories = "Development;";
|
||||
categories = [ "Development" ];
|
||||
icon = "netbeans";
|
||||
};
|
||||
in
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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"
|
||||
];
|
||||
})
|
||||
];
|
||||
})
|
||||
|
|
|
@ -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 ];
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
|
||||
|
|
|
@ -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; [
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -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 {
|
|
@ -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 ]);
|
|
@ -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!"
|
||||
)
|
||||
|
||||
|
|
@ -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
|
|
@ -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
Loading…
Reference in a new issue