Merge master into haskell-updates
This commit is contained in:
commit
da36c43e86
11
.github/CODEOWNERS
vendored
11
.github/CODEOWNERS
vendored
@ -53,7 +53,7 @@
|
||||
/pkgs/build-support/setup-hooks/auto-patchelf.py @layus
|
||||
/pkgs/pkgs-lib @infinisil
|
||||
## Format generators/serializers
|
||||
/pkgs/pkgs-lib/formats/libconfig @ckiee @h7x4
|
||||
/pkgs/pkgs-lib/formats/libconfig @h7x4
|
||||
/pkgs/pkgs-lib/formats/hocon @h7x4
|
||||
|
||||
# pkgs/by-name
|
||||
@ -225,18 +225,15 @@ pkgs/development/python-modules/buildcatrust/ @ajs124 @lukegb @mweinelt
|
||||
/nixos/modules/services/networking/ntp @thoughtpolice
|
||||
|
||||
# Network
|
||||
/pkgs/tools/networking/octodns @Janik-Haag
|
||||
/pkgs/tools/networking/kea/default.nix @mweinelt
|
||||
/pkgs/tools/networking/babeld/default.nix @mweinelt
|
||||
/nixos/modules/services/networking/babeld.nix @mweinelt
|
||||
/nixos/modules/services/networking/kea.nix @mweinelt
|
||||
/nixos/modules/services/networking/knot.nix @mweinelt
|
||||
nixos/modules/services/networking/networkmanager.nix @Janik-Haag
|
||||
/nixos/modules/services/monitoring/prometheus/exporters/kea.nix @mweinelt
|
||||
/nixos/tests/babeld.nix @mweinelt
|
||||
/nixos/tests/kea.nix @mweinelt
|
||||
/nixos/tests/knot.nix @mweinelt
|
||||
/nixos/tests/networking/* @Janik-Haag
|
||||
|
||||
# Web servers
|
||||
/doc/packages/nginx.section.md @raitobezarius
|
||||
@ -322,9 +319,9 @@ pkgs/by-name/fo/forgejo/package.nix @adamcstephens @bendlas @emilylange
|
||||
/doc/languages-frameworks/dotnet.section.md @corngood
|
||||
|
||||
# Node.js
|
||||
/pkgs/build-support/node/build-npm-package @lilyinstarlight @winterqt
|
||||
/pkgs/build-support/node/fetch-npm-deps @lilyinstarlight @winterqt
|
||||
/doc/languages-frameworks/javascript.section.md @lilyinstarlight @winterqt
|
||||
/pkgs/build-support/node/build-npm-package @winterqt
|
||||
/pkgs/build-support/node/fetch-npm-deps @winterqt
|
||||
/doc/languages-frameworks/javascript.section.md @winterqt
|
||||
|
||||
# environment.noXlibs option aka NoX
|
||||
/nixos/modules/config/no-x-libs.nix @SuperSandro2000
|
||||
|
@ -120,9 +120,10 @@ It has two modes:
|
||||
|
||||
Checks that the output from running a command contains the specified version string in it as a whole word.
|
||||
|
||||
Although simplistic, this test assures that the main program can run.
|
||||
While there's no substitute for a real test case, it does catch dynamic linking errors and such.
|
||||
It also provides some protection against accidentally building the wrong version, for example when using an "old" hash in a fixed-output derivation.
|
||||
NOTE: In most cases, [`versionCheckHook`](#versioncheckhook) should be preferred, but this function is provided and documented here anyway. The motivation for adding either tests would be:
|
||||
|
||||
- Catch dynamic linking errors and such and missing environment variables that should be added by wrapping.
|
||||
- Probable protection against accidentally building the wrong version, for example when using an "old" hash in a fixed-output derivation.
|
||||
|
||||
By default, the command to be run will be inferred from the given `package` attribute:
|
||||
it will check `meta.mainProgram` first, and fall back to `pname` or `name`.
|
||||
|
@ -468,7 +468,7 @@ This is for consistency with the convention of software packages placing executa
|
||||
|
||||
The created file is marked as executable.
|
||||
The file's contents will be put into `/nix/store/<store path>/bin/<name>`.
|
||||
The store path will include the the name, and it will be a directory.
|
||||
The store path will include the name, and it will be a directory.
|
||||
|
||||
::: {.example #ex-writeScriptBin}
|
||||
# Usage of `writeScriptBin`
|
||||
|
@ -29,6 +29,7 @@ scons.section.md
|
||||
tetex-tex-live.section.md
|
||||
unzip.section.md
|
||||
validatePkgConfig.section.md
|
||||
versionCheckHook.section.md
|
||||
waf.section.md
|
||||
zig.section.md
|
||||
xcbuild.section.md
|
||||
|
35
doc/hooks/versionCheckHook.section.md
Normal file
35
doc/hooks/versionCheckHook.section.md
Normal file
@ -0,0 +1,35 @@
|
||||
# versionCheckHook {#versioncheckhook}
|
||||
|
||||
This hook adds a `versionCheckPhase` to the [`preInstallCheckHooks`](#ssec-installCheck-phase) that runs the main program of the derivation with a `--help` or `--version` argument, and checks that the `${version}` string is found in that output. You use it like this:
|
||||
|
||||
```nix
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
versionCheckHook,
|
||||
# ...
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
# ...
|
||||
|
||||
nativeInstallCheckInputs = [
|
||||
versionCheckHook
|
||||
];
|
||||
doInstallCheck = true;
|
||||
|
||||
# ...
|
||||
})
|
||||
```
|
||||
|
||||
Note that for [`buildPythonPackage`](#buildpythonpackage-function) and [`buildPythonApplication`](#buildpythonapplication-function), `doInstallCheck` is enabled by default.
|
||||
|
||||
It does so in a clean environment (using `env --ignore-environment`), and it checks for the `${version}` string in both the `stdout` and the `stderr` of the command. It will report to you in the build log the output it received and it will fail the build if it failed to find `${version}`.
|
||||
|
||||
The variables that this phase control are:
|
||||
|
||||
- `dontVersionCheck`: Disable adding this hook to the [`preDistPhases`](#var-stdenv-preDist). Useful if you do want to load the bash functions of the hook, but run them differently.
|
||||
- `versionCheckProgram`: The full path to the program that should print the `${version}` string. Defaults roughly to `${placeholder "out"}/bin/${pname}`. Using `$out` in the value of this variable won't work, as environment variables from this variable are not expanded by the hook. Hence using `placeholder` is unavoidable.
|
||||
- `versionCheckProgramArg`: The argument that needs to be passed to `versionCheckProgram`. If undefined the hook tries first `--help` and then `--version`. Examples: `version`, `-V`, `-v`.
|
||||
- `preVersionCheck`: A hook to run before the check is done.
|
||||
- `postVersionCheck`: A hook to run after the check is done.
|
@ -143,7 +143,7 @@ You can also pass additional arguments to `makeWrapper` using `gappsWrapperArgs`
|
||||
|
||||
## Updating GNOME packages {#ssec-gnome-updating}
|
||||
|
||||
Most GNOME package offer [`updateScript`](#var-passthru-updateScript), it is therefore possible to update to latest source tarball by running `nix-shell maintainers/scripts/update.nix --argstr package gnome.nautilus` or even en masse with `nix-shell maintainers/scripts/update.nix --argstr path gnome`. Read the package’s `NEWS` file to see what changed.
|
||||
Most GNOME package offer [`updateScript`](#var-passthru-updateScript), it is therefore possible to update to latest source tarball by running `nix-shell maintainers/scripts/update.nix --argstr package nautilus` or even en masse with `nix-shell maintainers/scripts/update.nix --argstr path gnome`. Read the package’s `NEWS` file to see what changed.
|
||||
|
||||
## Frequently encountered issues {#ssec-gnome-common-issues}
|
||||
|
||||
|
@ -75,40 +75,17 @@ The Nixpkgs systems for continuous integration [Hydra](https://hydra.nixos.org/)
|
||||
#### Package tests {#var-passthru-tests-packages}
|
||||
[]{#var-meta-tests-packages} <!-- legacy anchor -->
|
||||
|
||||
Tests that are part of the source package, if they run quickly, are typically executed in the [`installCheckPhase`](#var-stdenv-phases).
|
||||
This phase is also suitable for performing a `--version` test for packages that support such flag.
|
||||
Most programs distributed by Nixpkgs support such a `--version` flag, and successfully calling the program with that flag indicates that the package at least got compiled properly.
|
||||
Besides tests provided by upstream, that you run in the [`checkPhase`](#ssec-check-phase), you may want to define tests derivations in the `passthru.tests` attribute, which won't change the build. `passthru.tests` have several advantages over running tests during any of the [standard phases](#sec-stdenv-phases):
|
||||
|
||||
:::{.example #ex-checking-build-installCheckPhase}
|
||||
- They access the package as consumers would, independently from the environment in which it was built
|
||||
- They can be run and debugged without rebuilding the package, which is useful if that takes a long time
|
||||
- They don't add overhead to each build, as opposed checks added to the [`distPhase`](#ssec-distribution-phase), such as [`versionCheckHook`](#versioncheckhook).
|
||||
|
||||
## Checking builds with `installCheckPhase`
|
||||
It is also possible to use `passthru.tests` to test the version with [`testVersion`](#tester-testVersion), but since that is pretty trivial and recommended thing to do, we recommend using [`versionCheckHook`](#versioncheckhook) for that, which has the following advantages over `passthru.tests`:
|
||||
|
||||
When building `git`, a rudimentary test for successful compilation would be running `git --version`:
|
||||
|
||||
```nix
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "git";
|
||||
version = "1.2.3";
|
||||
# ...
|
||||
doInstallCheck = true;
|
||||
installCheckPhase = ''
|
||||
runHook preInstallCheck
|
||||
echo checking if 'git --version' mentions ${finalAttrs.version}
|
||||
$out/bin/git --version | grep ${finalAttrs.version}
|
||||
runHook postInstallCheck
|
||||
'';
|
||||
# ...
|
||||
})
|
||||
```
|
||||
:::
|
||||
|
||||
However, tests that are non-trivial will better fit into `passthru.tests` because they:
|
||||
|
||||
- Access the package as consumers would, independently from the environment in which it was built
|
||||
- Can be run and debugged without rebuilding the package, which is useful if that takes a long time
|
||||
- Don't add overhad to each build, as opposed to `installCheckPhase`
|
||||
|
||||
It is also possible to use `passthru.tests` to test the version with [`testVersion`](#tester-testVersion).
|
||||
- If the `versionCheckPhase` (the phase defined by [`versionCheckHook`](#versioncheckhook)) fails, it triggers a failure which can't be ignored if you use the package, or if you find out about it in a [`nixpkgs-review`](https://github.com/Mic92/nixpkgs-review) report.
|
||||
- Sometimes packages become silently broken - meaning they fail to launch but their build passes because they don't perform any tests in the `checkPhase`. If you use this tool infrequently, such a silent breakage may rot in your system / profile configuration, and you will not notice the failure until you will want to use this package. Testing such basic functionality ensures you have to deal with the failure when you update your system / profile.
|
||||
- When you open a PR, [ofborg](https://github.com/NixOS/ofborg)'s CI _will_ run `passthru.tests` of [packages that are directly changed by your PR (according to your commits' messages)](https://github.com/NixOS/ofborg?tab=readme-ov-file#automatic-building), but if you'd want to use the [`@ofborg build`](https://github.com/NixOS/ofborg?tab=readme-ov-file#build) command for dependent packages, you won't have to specify in addition the `.tests` attribute of the packages you want to build, and no body will be able to avoid these tests.
|
||||
|
||||
<!-- NOTE(@fricklerhandwerk): one may argue whether that testing guide should rather be in the user's manual -->
|
||||
For more on how to write and run package tests for Nixpkgs, see the [testing section in the package contributor guide](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#package-tests).
|
||||
|
@ -762,6 +762,8 @@ Before and after running `make`, the hooks `preBuild` and `postBuild` are called
|
||||
|
||||
The check phase checks whether the package was built correctly by running its test suite. The default `checkPhase` calls `make $checkTarget`, but only if the [`doCheck` variable](#var-stdenv-doCheck) is enabled.
|
||||
|
||||
It is highly recommended, for packages' sources that are not distributed with any tests, to at least use [`versionCheckHook`](#versioncheckhook) to test that the resulting executable is basically functional.
|
||||
|
||||
#### Variables controlling the check phase {#variables-controlling-the-check-phase}
|
||||
|
||||
##### `doCheck` {#var-stdenv-doCheck}
|
||||
|
@ -1115,6 +1115,12 @@
|
||||
github = "AmeerTaweel";
|
||||
githubId = 20538273;
|
||||
};
|
||||
amerino = {
|
||||
name = "Alberto Merino";
|
||||
email = "amerinor01@gmail.com";
|
||||
github = "amerinor01";
|
||||
githubId = 22280447;
|
||||
};
|
||||
amesgen = {
|
||||
email = "amesgen@amesgen.de";
|
||||
github = "amesgen";
|
||||
@ -1196,6 +1202,12 @@
|
||||
githubId = 754494;
|
||||
name = "Anders Asheim Hennum";
|
||||
};
|
||||
andershus = {
|
||||
email = "anders.husebo@eviny.no";
|
||||
github = "andershus";
|
||||
githubId = 93526270;
|
||||
name = "Anders Husebø";
|
||||
};
|
||||
andersk = {
|
||||
email = "andersk@mit.edu";
|
||||
github = "andersk";
|
||||
@ -1780,12 +1792,6 @@
|
||||
githubId = 104313094;
|
||||
name = "Andrey Shaat";
|
||||
};
|
||||
ashkitten = {
|
||||
email = "ashlea@protonmail.com";
|
||||
github = "ashkitten";
|
||||
githubId = 9281956;
|
||||
name = "ash lea";
|
||||
};
|
||||
ashley = {
|
||||
email = "ashley@kira64.xyz";
|
||||
github = "kira64xyz";
|
||||
@ -2799,6 +2805,12 @@
|
||||
githubId = 3465841;
|
||||
name = "Boris Sukholitko";
|
||||
};
|
||||
bot-wxt1221 = {
|
||||
email = "3264117476@qq.com";
|
||||
github = "Bot-wxt1221";
|
||||
githubId = 74451279;
|
||||
name = "Bot-wxt1221";
|
||||
};
|
||||
bouk = {
|
||||
name = "Bouke van der Bijl";
|
||||
email = "i@bou.ke";
|
||||
@ -3713,14 +3725,6 @@
|
||||
githubId = 1448923;
|
||||
name = "Christian Kauhaus";
|
||||
};
|
||||
ckie = {
|
||||
email = "nixpkgs-0efe364@ckie.dev";
|
||||
github = "ckiee";
|
||||
githubId = 25263210;
|
||||
keys = [ { fingerprint = "539F 0655 4D35 38A5 429A E253 13E7 9449 C052 5215"; } ];
|
||||
name = "ckie";
|
||||
matrix = "@ckie:ckie.dev";
|
||||
};
|
||||
cko = {
|
||||
email = "christine.koppelt@gmail.com";
|
||||
github = "cko";
|
||||
@ -3759,6 +3763,12 @@
|
||||
githubId = 848609;
|
||||
name = "Michael Bishop";
|
||||
};
|
||||
clevor = {
|
||||
email = "myclevorname@gmail.com";
|
||||
github = "myclevorname";
|
||||
githubId = 140354451;
|
||||
name = "Samuel Connelly";
|
||||
};
|
||||
clkamp = {
|
||||
email = "c@lkamp.de";
|
||||
github = "clkamp";
|
||||
@ -4352,6 +4362,12 @@
|
||||
githubId = 24708079;
|
||||
name = "Dan Eads";
|
||||
};
|
||||
danid3v = {
|
||||
email = "sch220233@spengergasse.at";
|
||||
github = "DaniD3v";
|
||||
githubId = 124387056;
|
||||
name = "DaniD3v";
|
||||
};
|
||||
danielalvsaaker = {
|
||||
email = "daniel.alvsaaker@proton.me";
|
||||
github = "danielalvsaaker";
|
||||
@ -7139,6 +7155,12 @@
|
||||
githubId = 37017396;
|
||||
name = "gbtb";
|
||||
};
|
||||
gcleroux = {
|
||||
email = "guillaume@cleroux.dev";
|
||||
github = "gcleroux";
|
||||
githubId = 73357644;
|
||||
name = "Guillaume Cléroux";
|
||||
};
|
||||
gdamjan = {
|
||||
email = "gdamjan@gmail.com";
|
||||
matrix = "@gdamjan:spodeli.org";
|
||||
@ -8016,12 +8038,6 @@
|
||||
githubId = 222664;
|
||||
name = "Matthew Leach";
|
||||
};
|
||||
hexchen = {
|
||||
email = "nix@lilwit.ch";
|
||||
github = "hexchen";
|
||||
githubId = 41522204;
|
||||
name = "hexchen";
|
||||
};
|
||||
hexclover = {
|
||||
email = "hexclover@outlook.com";
|
||||
github = "hexclover";
|
||||
@ -8963,13 +8979,6 @@
|
||||
githubId = 1358764;
|
||||
name = "Jamie Magee";
|
||||
};
|
||||
janik = {
|
||||
name = "Janik";
|
||||
email = "janik@aq0.de";
|
||||
matrix = "@janik0:matrix.org";
|
||||
github = "Janik-Haag";
|
||||
githubId = 80165193;
|
||||
};
|
||||
jankaifer = {
|
||||
name = "Jan Kaifer";
|
||||
email = "jan@kaifer.cz";
|
||||
@ -11422,15 +11431,6 @@
|
||||
githubId = 3696783;
|
||||
name = "Leroy Hopson";
|
||||
};
|
||||
liketechnik = {
|
||||
name = "Florian Warzecha";
|
||||
|
||||
email = "liketechnik@disroot.org";
|
||||
github = "liketechnik";
|
||||
githubId = 24209689;
|
||||
|
||||
keys = [ { fingerprint = "92D8 A09D 03DD B774 AABD 53B9 E136 2F07 D750 DB5C"; } ];
|
||||
};
|
||||
lilacious = {
|
||||
email = "yuchenhe126@gmail.com";
|
||||
github = "Lilacious";
|
||||
@ -11443,19 +11443,6 @@
|
||||
githubId = 54189319;
|
||||
name = "Lilly Cham";
|
||||
};
|
||||
lilyball = {
|
||||
email = "lily@sb.org";
|
||||
github = "lilyball";
|
||||
githubId = 714;
|
||||
name = "Lily Ballard";
|
||||
};
|
||||
lilyinstarlight = {
|
||||
email = "lily@lily.flowers";
|
||||
matrix = "@lily:lily.flowers";
|
||||
github = "lilyinstarlight";
|
||||
githubId = 298109;
|
||||
name = "Lily Foster";
|
||||
};
|
||||
limeytexan = {
|
||||
email = "limeytexan@gmail.com";
|
||||
github = "limeytexan";
|
||||
@ -12349,12 +12336,6 @@
|
||||
githubId = 33522919;
|
||||
name = "Marshall Arruda";
|
||||
};
|
||||
martfont = {
|
||||
name = "Martino Fontana";
|
||||
email = "tinozzo123@tutanota.com";
|
||||
github = "SuperSamus";
|
||||
githubId = 40663462;
|
||||
};
|
||||
martijnvermaat = {
|
||||
email = "martijn@vermaat.name";
|
||||
github = "martijnvermaat";
|
||||
@ -14048,10 +14029,6 @@
|
||||
githubId = 4532582;
|
||||
keys = [ { fingerprint = "BDEA AB07 909D B96F 4106 85F1 CC15 0758 46BC E91B"; } ];
|
||||
};
|
||||
nayala = {
|
||||
name = "Nia";
|
||||
matrix = "@fly:asra.gr";
|
||||
};
|
||||
nazarewk = {
|
||||
name = "Krzysztof Nazarewski";
|
||||
email = "nixpkgs@kdn.im";
|
||||
@ -17454,6 +17431,12 @@
|
||||
githubId = 61306;
|
||||
name = "Rene Treffer";
|
||||
};
|
||||
rubenhoenle = {
|
||||
email = "git@hoenle.xyz";
|
||||
github = "rubenhoenle";
|
||||
githubId = 56157634;
|
||||
name = "Ruben Hönle";
|
||||
};
|
||||
ruby0b = {
|
||||
github = "ruby0b";
|
||||
githubId = 106119328;
|
||||
@ -21047,12 +21030,6 @@
|
||||
githubId = 5837359;
|
||||
name = "Adrian Pistol";
|
||||
};
|
||||
vigress8 = {
|
||||
email = "vig@disroot.org";
|
||||
github = "vigress8";
|
||||
githubId = 150687949;
|
||||
name = "Vigress";
|
||||
};
|
||||
vikanezrimaya = {
|
||||
email = "vika@fireburn.ru";
|
||||
github = "vikanezrimaya";
|
||||
|
@ -158,7 +158,7 @@ let
|
||||
to run all update scripts for all packages that lists \`garbas\` as a maintainer
|
||||
and have \`updateScript\` defined, or:
|
||||
|
||||
% nix-shell maintainers/scripts/update.nix --argstr package gnome.nautilus
|
||||
% nix-shell maintainers/scripts/update.nix --argstr package nautilus
|
||||
|
||||
to run update script for specific package, or
|
||||
|
||||
|
@ -715,10 +715,7 @@ with lib.maintainers;
|
||||
};
|
||||
|
||||
node = {
|
||||
members = [
|
||||
lilyinstarlight
|
||||
winter
|
||||
];
|
||||
members = [ winter ];
|
||||
scope = "Maintain Node.js runtimes and build tooling.";
|
||||
shortName = "Node.js";
|
||||
enableFeatureFreezePing = true;
|
||||
|
@ -33,6 +33,8 @@
|
||||
|
||||
- `androidenv.androidPkgs_9_0` has been removed, and replaced with `androidenv.androidPkgs` for a more complete Android SDK including support for Android 9 and later.
|
||||
|
||||
- `grafana` has been updated to version 11.1. This version doesn't support setting `http_addr` to a hostname anymore, an IP address is expected.
|
||||
|
||||
- `wstunnel` has had a major version upgrade that entailed rewriting the program in Rust.
|
||||
The module was updated to accommodate for breaking changes.
|
||||
Breaking changes to the module API were minimised as much as possible,
|
||||
@ -58,6 +60,20 @@
|
||||
it is set, instead of the previous hardcoded default of
|
||||
`${networking.hostName}.${security.ipa.domain}`.
|
||||
|
||||
- The fcgiwrap module now allows multiple instances running as distinct users.
|
||||
The option `services.fgciwrap` now takes an attribute set of the
|
||||
configuration of each individual instance.
|
||||
This requires migrating any previous configuration keys from
|
||||
`services.fcgiwrap.*` to `services.fcgiwrap.some-instance.*`.
|
||||
The ownership and mode of the UNIX sockets created by this service are now
|
||||
configurable and private by default.
|
||||
Processes also now run as a dynamically allocated user by default instead of
|
||||
root.
|
||||
|
||||
- `services.cgit` now runs as the cgit user by default instead of root.
|
||||
This change requires granting access to the repositories to this user or
|
||||
setting the appropriate one through `services.cgit.some-instance.user`.
|
||||
|
||||
- `nvimpager` was updated to version 0.13.0, which changes the order of user and
|
||||
nvimpager settings: user commands in `-c` and `--cmd` now override the
|
||||
respective default settings because they are executed later.
|
||||
@ -124,6 +140,8 @@
|
||||
GitLab administrators should migrate to the [new runner registration workflow](https://docs.gitlab.com/17.0/ee/ci/runners/new_creation_workflow.html#using-registration-tokens-after-gitlab-170)
|
||||
with *runner authentication tokens* until the release of GitLab 18.0.
|
||||
|
||||
- `gitlab` has been updated from 16.x to 17.x and requires at least `postgresql` 14.9, as stated in the [documentation](https://docs.gitlab.com/17.1/ee/install/requirements.html#postgresql-requirements). Check the [upgrade guide](#module-services-postgres-upgrading) in the NixOS manual on how to upgrade your PostgreSQL installation.
|
||||
|
||||
- `zx` was updated to v8, which introduces several breaking changes.
|
||||
See the [v8 changelog](https://github.com/google/zx/releases/tag/8.0.0) for more information.
|
||||
|
||||
|
@ -1,16 +0,0 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
cfg = config.hardware.decklink;
|
||||
kernelPackages = config.boot.kernelPackages;
|
||||
in
|
||||
{
|
||||
options.hardware.decklink.enable = lib.mkEnableOption "hardware support for the Blackmagic Design Decklink audio/video interfaces";
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
boot.kernelModules = [ "blackmagic" "blackmagic-io" "snd_blackmagic-io" ];
|
||||
boot.extraModulePackages = [ kernelPackages.decklink ];
|
||||
systemd.packages = [ pkgs.blackmagic-desktop-video ];
|
||||
systemd.services.DesktopVideoHelper.wantedBy = [ "multi-user.target" ];
|
||||
};
|
||||
}
|
@ -59,7 +59,6 @@
|
||||
./hardware/cpu/intel-microcode.nix
|
||||
./hardware/cpu/intel-sgx.nix
|
||||
./hardware/cpu/x86-msr.nix
|
||||
./hardware/decklink.nix
|
||||
./hardware/device-tree.nix
|
||||
./hardware/digitalbitbox.nix
|
||||
./hardware/flipperzero.nix
|
||||
|
@ -14,7 +14,7 @@ in {
|
||||
|
||||
enable = lib.mkEnableOption "File Roller, an archive manager for GNOME";
|
||||
|
||||
package = lib.mkPackageOption pkgs [ "gnome" "file-roller" ] { };
|
||||
package = lib.mkPackageOption pkgs "file-roller" { };
|
||||
|
||||
};
|
||||
|
||||
|
@ -13,7 +13,7 @@ in {
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = [ pkgs.gnome.geary ];
|
||||
environment.systemPackages = [ pkgs.geary ];
|
||||
programs.dconf.enable = true;
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
services.gnome.gnome-online-accounts.enable = true;
|
||||
|
@ -32,9 +32,9 @@
|
||||
|
||||
config = lib.mkIf config.programs.gnome-disks.enable {
|
||||
|
||||
environment.systemPackages = [ pkgs.gnome.gnome-disk-utility ];
|
||||
environment.systemPackages = [ pkgs.gnome-disk-utility ];
|
||||
|
||||
services.dbus.packages = [ pkgs.gnome.gnome-disk-utility ];
|
||||
services.dbus.packages = [ pkgs.gnome-disk-utility ];
|
||||
|
||||
};
|
||||
|
||||
|
@ -19,9 +19,9 @@ in
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = [ pkgs.gnome.gnome-terminal ];
|
||||
services.dbus.packages = [ pkgs.gnome.gnome-terminal ];
|
||||
systemd.packages = [ pkgs.gnome.gnome-terminal ];
|
||||
environment.systemPackages = [ pkgs.gnome-terminal ];
|
||||
services.dbus.packages = [ pkgs.gnome-terminal ];
|
||||
systemd.packages = [ pkgs.gnome-terminal ];
|
||||
|
||||
programs.bash.vteIntegration = true;
|
||||
programs.zsh.vteIntegration = true;
|
||||
|
@ -18,12 +18,12 @@
|
||||
|
||||
###### implementation
|
||||
config = lib.mkIf config.programs.gpaste.enable {
|
||||
environment.systemPackages = [ pkgs.gnome.gpaste ];
|
||||
services.dbus.packages = [ pkgs.gnome.gpaste ];
|
||||
systemd.packages = [ pkgs.gnome.gpaste ];
|
||||
environment.systemPackages = [ pkgs.gpaste ];
|
||||
services.dbus.packages = [ pkgs.gpaste ];
|
||||
systemd.packages = [ pkgs.gpaste ];
|
||||
# gnome-control-center crashes in Keyboard Shortcuts pane without the GSettings schemas.
|
||||
services.xserver.desktopManager.gnome.sessionPath = [ pkgs.gnome.gpaste ];
|
||||
services.xserver.desktopManager.gnome.sessionPath = [ pkgs.gpaste ];
|
||||
# gpaste-reloaded applet doesn't work without the typelib
|
||||
services.xserver.desktopManager.cinnamon.sessionPath = [ pkgs.gnome.gpaste ];
|
||||
services.xserver.desktopManager.cinnamon.sessionPath = [ pkgs.gpaste ];
|
||||
};
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ in
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs; [
|
||||
gnome.nautilus-python
|
||||
nautilus-python
|
||||
nautilus-open-any-terminal
|
||||
];
|
||||
programs.dconf = lib.optionalAttrs (cfg.terminal != null) {
|
||||
|
@ -8,7 +8,7 @@
|
||||
let
|
||||
cfg = config.programs.qdmr;
|
||||
in {
|
||||
meta.maintainers = [ lib.maintainers.janik ];
|
||||
meta.maintainers = [ ];
|
||||
|
||||
options = {
|
||||
programs.qdmr = {
|
||||
|
@ -21,14 +21,14 @@
|
||||
|
||||
config = lib.mkIf config.programs.seahorse.enable {
|
||||
|
||||
programs.ssh.askPassword = lib.mkDefault "${pkgs.gnome.seahorse}/libexec/seahorse/ssh-askpass";
|
||||
programs.ssh.askPassword = lib.mkDefault "${pkgs.seahorse}/libexec/seahorse/ssh-askpass";
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.gnome.seahorse
|
||||
pkgs.seahorse
|
||||
];
|
||||
|
||||
services.dbus.packages = [
|
||||
pkgs.gnome.seahorse
|
||||
pkgs.seahorse
|
||||
];
|
||||
|
||||
};
|
||||
|
@ -723,7 +723,7 @@ let
|
||||
disable_interactive = true;
|
||||
}; }
|
||||
{ name = "kwallet"; enable = cfg.kwallet.enable; control = "optional"; modulePath = "${cfg.kwallet.package}/lib/security/pam_kwallet5.so"; }
|
||||
{ name = "gnome_keyring"; enable = cfg.enableGnomeKeyring; control = "optional"; modulePath = "${pkgs.gnome.gnome-keyring}/lib/security/pam_gnome_keyring.so"; }
|
||||
{ name = "gnome_keyring"; enable = cfg.enableGnomeKeyring; control = "optional"; modulePath = "${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so"; }
|
||||
{ name = "intune"; enable = config.services.intune.enable; control = "optional"; modulePath = "${pkgs.intune-portal}/lib/security/pam_intune.so"; }
|
||||
{ name = "gnupg"; enable = cfg.gnupg.enable; control = "optional"; modulePath = "${pkgs.pam_gnupg}/lib/security/pam_gnupg.so"; settings = {
|
||||
store-only = cfg.gnupg.storeOnly;
|
||||
@ -789,7 +789,7 @@ let
|
||||
{ name = "krb5"; enable = config.security.pam.krb5.enable; control = "sufficient"; modulePath = "${pam_krb5}/lib/security/pam_krb5.so"; settings = {
|
||||
use_first_pass = true;
|
||||
}; }
|
||||
{ name = "gnome_keyring"; enable = cfg.enableGnomeKeyring; control = "optional"; modulePath = "${pkgs.gnome.gnome-keyring}/lib/security/pam_gnome_keyring.so"; settings = {
|
||||
{ name = "gnome_keyring"; enable = cfg.enableGnomeKeyring; control = "optional"; modulePath = "${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so"; settings = {
|
||||
use_authtok = true;
|
||||
}; }
|
||||
];
|
||||
@ -858,7 +858,7 @@ let
|
||||
debug = true;
|
||||
}; }
|
||||
{ name = "kwallet"; enable = cfg.kwallet.enable; control = "optional"; modulePath = "${cfg.kwallet.package}/lib/security/pam_kwallet5.so"; }
|
||||
{ name = "gnome_keyring"; enable = cfg.enableGnomeKeyring; control = "optional"; modulePath = "${pkgs.gnome.gnome-keyring}/lib/security/pam_gnome_keyring.so"; settings = {
|
||||
{ name = "gnome_keyring"; enable = cfg.enableGnomeKeyring; control = "optional"; modulePath = "${pkgs.gnome-keyring}/lib/security/pam_gnome_keyring.so"; settings = {
|
||||
auto_start = true;
|
||||
}; }
|
||||
{ name = "gnupg"; enable = cfg.gnupg.enable; control = "optional"; modulePath = "${pkgs.pam_gnupg}/lib/security/pam_gnupg.so"; settings = {
|
||||
|
@ -109,7 +109,7 @@ let
|
||||
};
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ janik ambroisie ];
|
||||
meta.maintainers = with lib.maintainers; [ ambroisie ];
|
||||
|
||||
options = {
|
||||
services.woodpecker-agents = {
|
||||
|
@ -8,7 +8,7 @@ let
|
||||
cfg = config.services.woodpecker-server;
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ janik ambroisie ];
|
||||
meta.maintainers = with lib.maintainers; [ ambroisie ];
|
||||
|
||||
|
||||
options = {
|
||||
|
@ -26,14 +26,14 @@ in
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = [ pkgs.gnome.gnome-keyring ];
|
||||
environment.systemPackages = [ pkgs.gnome-keyring ];
|
||||
|
||||
services.dbus.packages = [
|
||||
pkgs.gnome.gnome-keyring
|
||||
pkgs.gnome-keyring
|
||||
pkgs.gcr
|
||||
];
|
||||
|
||||
xdg.portal.extraPortals = [ pkgs.gnome.gnome-keyring ];
|
||||
xdg.portal.extraPortals = [ pkgs.gnome-keyring ];
|
||||
|
||||
security.pam.services = lib.mkMerge [
|
||||
{
|
||||
@ -52,7 +52,7 @@ in
|
||||
owner = "root";
|
||||
group = "root";
|
||||
capabilities = "cap_ipc_lock=ep";
|
||||
source = "${pkgs.gnome.gnome-keyring}/bin/gnome-keyring-daemon";
|
||||
source = "${pkgs.gnome-keyring}/bin/gnome-keyring-daemon";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
@ -26,11 +26,11 @@
|
||||
config = lib.mkIf config.services.gnome.gnome-user-share.enable {
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.gnome.gnome-user-share
|
||||
pkgs.gnome-user-share
|
||||
];
|
||||
|
||||
systemd.packages = [
|
||||
pkgs.gnome.gnome-user-share
|
||||
pkgs.gnome-user-share
|
||||
];
|
||||
|
||||
};
|
||||
|
@ -23,12 +23,12 @@
|
||||
|
||||
###### implementation
|
||||
config = lib.mkIf config.services.gnome.rygel.enable {
|
||||
environment.systemPackages = [ pkgs.gnome.rygel ];
|
||||
environment.systemPackages = [ pkgs.rygel ];
|
||||
|
||||
services.dbus.packages = [ pkgs.gnome.rygel ];
|
||||
services.dbus.packages = [ pkgs.rygel ];
|
||||
|
||||
systemd.packages = [ pkgs.gnome.rygel ];
|
||||
systemd.packages = [ pkgs.rygel ];
|
||||
|
||||
environment.etc."rygel.conf".source = "${pkgs.gnome.rygel}/etc/rygel.conf";
|
||||
environment.etc."rygel.conf".source = "${pkgs.rygel}/etc/rygel.conf";
|
||||
};
|
||||
}
|
||||
|
@ -31,9 +31,9 @@
|
||||
|
||||
config = lib.mkIf config.services.gnome.sushi.enable {
|
||||
|
||||
environment.systemPackages = [ pkgs.gnome.sushi ];
|
||||
environment.systemPackages = [ pkgs.sushi ];
|
||||
|
||||
services.dbus.packages = [ pkgs.gnome.sushi ];
|
||||
services.dbus.packages = [ pkgs.sushi ];
|
||||
|
||||
};
|
||||
|
||||
|
@ -9,12 +9,28 @@ let
|
||||
dataDir = "/var/lib/stalwart-mail";
|
||||
useLegacyStorage = versionOlder config.system.stateVersion "24.11";
|
||||
|
||||
parsePorts = listeners: let
|
||||
parseAddresses = listeners: lib.flatten(lib.mapAttrsToList (name: value: value.bind) listeners);
|
||||
splitAddress = addr: strings.splitString ":" addr;
|
||||
extractPort = addr: strings.toInt(builtins.foldl' (a: b: b) "" (splitAddress addr));
|
||||
in
|
||||
builtins.map(address: extractPort address) (parseAddresses listeners);
|
||||
|
||||
in {
|
||||
options.services.stalwart-mail = {
|
||||
enable = mkEnableOption "the Stalwart all-in-one email server";
|
||||
|
||||
package = mkPackageOption pkgs "stalwart-mail" { };
|
||||
|
||||
openFirewall = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to open TCP firewall ports, which are specified in
|
||||
{option}`services.stalwart-mail.settings.listener` on all interfaces.
|
||||
'';
|
||||
};
|
||||
|
||||
settings = mkOption {
|
||||
inherit (configFormat) type;
|
||||
default = { };
|
||||
@ -138,6 +154,11 @@ in {
|
||||
|
||||
# Make admin commands available in the shell
|
||||
environment.systemPackages = [ cfg.package ];
|
||||
|
||||
networking.firewall = mkIf (cfg.openFirewall
|
||||
&& (builtins.hasAttr "listener" cfg.settings.server)) {
|
||||
allowedTCPPorts = parsePorts cfg.settings.server.listener;
|
||||
};
|
||||
};
|
||||
|
||||
meta = {
|
||||
|
@ -12,7 +12,7 @@ let
|
||||
postgresqlPackage = if config.services.postgresql.enable then
|
||||
config.services.postgresql.package
|
||||
else
|
||||
pkgs.postgresql_13;
|
||||
pkgs.postgresql_14;
|
||||
|
||||
gitlabSocket = "${cfg.statePath}/tmp/sockets/gitlab.socket";
|
||||
gitalySocket = "${cfg.statePath}/tmp/sockets/gitaly.socket";
|
||||
@ -1119,8 +1119,8 @@ in {
|
||||
message = "services.gitlab.secrets.jwsFile must be set!";
|
||||
}
|
||||
{
|
||||
assertion = versionAtLeast postgresqlPackage.version "13.6.0";
|
||||
message = "PostgreSQL >=13.6 is required to run GitLab 16. Follow the instructions in the manual section for upgrading PostgreSQL here: https://nixos.org/manual/nixos/stable/index.html#module-services-postgres-upgrading";
|
||||
assertion = versionAtLeast postgresqlPackage.version "14.9";
|
||||
message = "PostgreSQL >= 14.9 is required to run GitLab 17. Follow the instructions in the manual section for upgrading PostgreSQL here: https://nixos.org/manual/nixos/stable/index.html#module-services-postgres-upgrading";
|
||||
}
|
||||
];
|
||||
|
||||
@ -1282,6 +1282,7 @@ in {
|
||||
"d ${gitlabConfig.production.shared.path}/registry 0750 ${cfg.user} ${cfg.group} -"
|
||||
"d ${gitlabConfig.production.shared.path}/terraform_state 0750 ${cfg.user} ${cfg.group} -"
|
||||
"d ${gitlabConfig.production.shared.path}/ci_secure_files 0750 ${cfg.user} ${cfg.group} -"
|
||||
"d ${gitlabConfig.production.shared.path}/external-diffs 0750 ${cfg.user} ${cfg.group} -"
|
||||
"L+ /run/gitlab/config - - - - ${cfg.statePath}/config"
|
||||
"L+ /run/gitlab/log - - - - ${cfg.statePath}/log"
|
||||
"L+ /run/gitlab/tmp - - - - ${cfg.statePath}/tmp"
|
||||
|
@ -7,7 +7,7 @@ let
|
||||
toml = pkgs.formats.toml { };
|
||||
in
|
||||
{
|
||||
meta.maintainers = with maintainers; [ ckie ];
|
||||
meta.maintainers = with maintainers; [ ];
|
||||
|
||||
options.services.rkvm = {
|
||||
enable = mkOption {
|
||||
|
@ -202,10 +202,10 @@ in {
|
||||
];
|
||||
|
||||
services = {
|
||||
fcgiwrap = lib.mkIf useNginx {
|
||||
enable = true;
|
||||
preforkProcesses = cfg.cameras;
|
||||
inherit user group;
|
||||
fcgiwrap.zoneminder = lib.mkIf useNginx {
|
||||
process.prefork = cfg.cameras;
|
||||
process.user = user;
|
||||
process.group = group;
|
||||
};
|
||||
|
||||
mysql = lib.mkIf cfg.database.createLocally {
|
||||
@ -225,9 +225,7 @@ in {
|
||||
default = true;
|
||||
root = "${pkg}/share/zoneminder/www";
|
||||
listen = [ { addr = "0.0.0.0"; inherit (cfg) port; } ];
|
||||
extraConfig = let
|
||||
fcgi = config.services.fcgiwrap;
|
||||
in ''
|
||||
extraConfig = ''
|
||||
index index.php;
|
||||
|
||||
location / {
|
||||
@ -257,7 +255,7 @@ in {
|
||||
fastcgi_param HTTP_PROXY "";
|
||||
fastcgi_intercept_errors on;
|
||||
|
||||
fastcgi_pass ${fcgi.socketType}:${fcgi.socketAddress};
|
||||
fastcgi_pass unix:${config.services.fcgiwrap.zoneminder.socket.address};
|
||||
}
|
||||
|
||||
location /cache/ {
|
||||
|
@ -105,7 +105,7 @@ let
|
||||
};
|
||||
url = mkOption {
|
||||
type = types.str;
|
||||
default = "localhost";
|
||||
default = "";
|
||||
description = "Url of the datasource.";
|
||||
};
|
||||
editable = mkOption {
|
||||
|
@ -25,14 +25,14 @@ let
|
||||
|
||||
regexLocation = cfg: regexEscape (stripLocation cfg);
|
||||
|
||||
mkFastcgiPass = cfg: ''
|
||||
mkFastcgiPass = name: cfg: ''
|
||||
${if cfg.nginx.location == "/" then ''
|
||||
fastcgi_param PATH_INFO $uri;
|
||||
'' else ''
|
||||
fastcgi_split_path_info ^(${regexLocation cfg})(/.+)$;
|
||||
fastcgi_param PATH_INFO $fastcgi_path_info;
|
||||
''
|
||||
}fastcgi_pass unix:${config.services.fcgiwrap.socketAddress};
|
||||
}fastcgi_pass unix:${config.services.fcgiwrap."cgit-${name}".socket.address};
|
||||
'';
|
||||
|
||||
cgitrcLine = name: value: "${name}=${
|
||||
@ -72,25 +72,11 @@ let
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
|
||||
mkCgitReposDir = cfg:
|
||||
if cfg.scanPath != null then
|
||||
cfg.scanPath
|
||||
else
|
||||
pkgs.runCommand "cgit-repos" {
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
} ''
|
||||
mkdir -p "$out"
|
||||
${
|
||||
concatStrings (
|
||||
mapAttrsToList
|
||||
(name: value: ''
|
||||
ln -s ${escapeShellArg value.path} "$out"/${escapeShellArg name}
|
||||
'')
|
||||
cfg.repos
|
||||
)
|
||||
}
|
||||
'';
|
||||
fcgiwrapUnitName = name: "fcgiwrap-cgit-${name}";
|
||||
fcgiwrapRuntimeDir = name: "/run/${fcgiwrapUnitName name}";
|
||||
gitProjectRoot = name: cfg: if cfg.scanPath != null
|
||||
then cfg.scanPath
|
||||
else "${fcgiwrapRuntimeDir name}/repos";
|
||||
|
||||
in
|
||||
{
|
||||
@ -154,6 +140,18 @@ in
|
||||
type = types.lines;
|
||||
default = "";
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
description = "User to run the cgit service as.";
|
||||
type = types.str;
|
||||
default = "cgit";
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
description = "Group to run the cgit service as.";
|
||||
type = types.str;
|
||||
default = "cgit";
|
||||
};
|
||||
};
|
||||
}));
|
||||
};
|
||||
@ -165,18 +163,46 @@ in
|
||||
message = "Exactly one of services.cgit.${vhost}.scanPath or services.cgit.${vhost}.repos must be set.";
|
||||
}) cfgs;
|
||||
|
||||
services.fcgiwrap.enable = true;
|
||||
users = mkMerge (flip mapAttrsToList cfgs (_: cfg: {
|
||||
users.${cfg.user} = {
|
||||
isSystemUser = true;
|
||||
inherit (cfg) group;
|
||||
};
|
||||
groups.${cfg.group} = { };
|
||||
}));
|
||||
|
||||
services.fcgiwrap = flip mapAttrs' cfgs (name: cfg:
|
||||
nameValuePair "cgit-${name}" {
|
||||
process = { inherit (cfg) user group; };
|
||||
socket = { inherit (config.services.nginx) user group; };
|
||||
}
|
||||
);
|
||||
|
||||
systemd.services = flip mapAttrs' cfgs (name: cfg:
|
||||
nameValuePair (fcgiwrapUnitName name)
|
||||
(mkIf (cfg.repos != { }) {
|
||||
serviceConfig.RuntimeDirectory = fcgiwrapUnitName name;
|
||||
preStart = ''
|
||||
GIT_PROJECT_ROOT=${escapeShellArg (gitProjectRoot name cfg)}
|
||||
mkdir -p "$GIT_PROJECT_ROOT"
|
||||
cd "$GIT_PROJECT_ROOT"
|
||||
${concatLines (flip mapAttrsToList cfg.repos (name: repo: ''
|
||||
ln -s ${escapeShellArg repo.path} ${escapeShellArg name}
|
||||
''))}
|
||||
'';
|
||||
}
|
||||
));
|
||||
|
||||
services.nginx.enable = true;
|
||||
|
||||
services.nginx.virtualHosts = mkMerge (mapAttrsToList (_: cfg: {
|
||||
services.nginx.virtualHosts = mkMerge (mapAttrsToList (name: cfg: {
|
||||
${cfg.nginx.virtualHost} = {
|
||||
locations = (
|
||||
genAttrs'
|
||||
[ "cgit.css" "cgit.png" "favicon.ico" "robots.txt" ]
|
||||
(name: nameValuePair "= ${stripLocation cfg}/${name}" {
|
||||
(fileName: nameValuePair "= ${stripLocation cfg}/${fileName}" {
|
||||
extraConfig = ''
|
||||
alias ${cfg.package}/cgit/${name};
|
||||
alias ${cfg.package}/cgit/${fileName};
|
||||
'';
|
||||
})
|
||||
) // {
|
||||
@ -184,10 +210,10 @@ in
|
||||
fastcgiParams = rec {
|
||||
SCRIPT_FILENAME = "${pkgs.git}/libexec/git-core/git-http-backend";
|
||||
GIT_HTTP_EXPORT_ALL = "1";
|
||||
GIT_PROJECT_ROOT = mkCgitReposDir cfg;
|
||||
GIT_PROJECT_ROOT = gitProjectRoot name cfg;
|
||||
HOME = GIT_PROJECT_ROOT;
|
||||
};
|
||||
extraConfig = mkFastcgiPass cfg;
|
||||
extraConfig = mkFastcgiPass name cfg;
|
||||
};
|
||||
"${stripLocation cfg}/" = {
|
||||
fastcgiParams = {
|
||||
@ -196,7 +222,7 @@ in
|
||||
HTTP_HOST = "$server_name";
|
||||
CGIT_CONFIG = mkCgitrc cfg;
|
||||
};
|
||||
extraConfig = mkFastcgiPass cfg;
|
||||
extraConfig = mkFastcgiPass name cfg;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -2,10 +2,11 @@
|
||||
# cfg.configFile contains secrets such as proxy servers' credential!
|
||||
# we dont want plaintext secrets in world-readable `/nix/store`.
|
||||
|
||||
{ lib
|
||||
, config
|
||||
, pkgs
|
||||
, ...
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.mihomo;
|
||||
@ -17,7 +18,6 @@ in
|
||||
package = lib.mkPackageOption pkgs "mihomo" { };
|
||||
|
||||
configFile = lib.mkOption {
|
||||
default = null;
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
description = "Configuration file to use.";
|
||||
};
|
||||
@ -67,7 +67,7 @@ in
|
||||
ExecStart = lib.concatStringsSep " " [
|
||||
(lib.getExe cfg.package)
|
||||
"-d /var/lib/private/mihomo"
|
||||
(lib.optionalString (cfg.configFile != null) "-f \${CREDENTIALS_DIRECTORY}/config.yaml")
|
||||
"-f \${CREDENTIALS_DIRECTORY}/config.yaml"
|
||||
(lib.optionalString (cfg.webui != null) "-ext-ui ${cfg.webui}")
|
||||
(lib.optionalString (cfg.extraOpts != null) cfg.extraOpts)
|
||||
];
|
||||
|
@ -127,7 +127,7 @@ in
|
||||
{
|
||||
|
||||
meta = {
|
||||
maintainers = teams.freedesktop.members ++ [ lib.maintainers.janik ];
|
||||
maintainers = teams.freedesktop.members;
|
||||
};
|
||||
|
||||
###### interface
|
||||
|
@ -716,6 +716,17 @@ in
|
||||
description = "Additional prosody configuration";
|
||||
};
|
||||
|
||||
log = mkOption {
|
||||
type = types.lines;
|
||||
default = ''"*syslog"'';
|
||||
description = "Logging configuration. See [](https://prosody.im/doc/logging) for more details";
|
||||
example = ''
|
||||
{
|
||||
{ min = "warn"; to = "*syslog"; };
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
|
||||
@ -764,7 +775,7 @@ in
|
||||
|
||||
pidfile = "/run/prosody/prosody.pid"
|
||||
|
||||
log = "*syslog"
|
||||
log = ${cfg.log}
|
||||
|
||||
data_path = "${cfg.dataDir}"
|
||||
plugin_paths = {
|
||||
|
@ -337,7 +337,11 @@ in
|
||||
};
|
||||
|
||||
# use nginx to serve the smokeping web service
|
||||
services.fcgiwrap.enable = mkIf cfg.webService true;
|
||||
services.fcgiwrap.smokeping = mkIf cfg.webService {
|
||||
process.user = cfg.user;
|
||||
process.group = cfg.user;
|
||||
socket = { inherit (config.services.nginx) user group; };
|
||||
};
|
||||
services.nginx = mkIf cfg.webService {
|
||||
enable = true;
|
||||
virtualHosts."smokeping" = {
|
||||
@ -349,7 +353,7 @@ in
|
||||
locations."/smokeping.fcgi" = {
|
||||
extraConfig = ''
|
||||
include ${config.services.nginx.package}/conf/fastcgi_params;
|
||||
fastcgi_pass unix:${config.services.fcgiwrap.socketAddress};
|
||||
fastcgi_pass unix:${config.services.fcgiwrap.smokeping.socket.address};
|
||||
fastcgi_param SCRIPT_FILENAME ${smokepingHome}/smokeping.fcgi;
|
||||
fastcgi_param DOCUMENT_ROOT ${smokepingHome};
|
||||
'';
|
||||
|
@ -368,6 +368,15 @@ in {
|
||||
'';
|
||||
};
|
||||
|
||||
type = mkOption {
|
||||
type = types.enum [ "sendreceive" "sendonly" "receiveonly" "receiveencrypted" ];
|
||||
default = "sendreceive";
|
||||
description = ''
|
||||
Controls how the folder is handled by Syncthing.
|
||||
See <https://docs.syncthing.net/users/config.html#config-option-folder.type>.
|
||||
'';
|
||||
};
|
||||
|
||||
devices = mkOption {
|
||||
type = types.listOf types.str;
|
||||
default = [];
|
||||
|
@ -5,6 +5,15 @@ let
|
||||
cfg = config.services.freshrss;
|
||||
|
||||
poolName = "freshrss";
|
||||
|
||||
extension-env = pkgs.buildEnv {
|
||||
name = "freshrss-extensions";
|
||||
paths = cfg.extensions;
|
||||
};
|
||||
env-vars = {
|
||||
DATA_PATH = cfg.dataDir;
|
||||
THIRDPARTY_EXTENSIONS_PATH = "${extension-env}/share/freshrss/";
|
||||
};
|
||||
in
|
||||
{
|
||||
meta.maintainers = with maintainers; [ etu stunkymonkey mattchrist ];
|
||||
@ -14,6 +23,31 @@ in
|
||||
|
||||
package = mkPackageOption pkgs "freshrss" { };
|
||||
|
||||
extensions = mkOption {
|
||||
type = types.listOf types.package;
|
||||
default = [ ];
|
||||
defaultText = literalExpression "[]";
|
||||
example = literalExpression ''
|
||||
with freshrss-extensions; [
|
||||
youtube
|
||||
] ++ [
|
||||
(freshrss-extensions.buildFreshRssExtension {
|
||||
FreshRssExtUniqueId = "ReadingTime";
|
||||
pname = "reading-time";
|
||||
version = "1.5";
|
||||
src = pkgs.fetchFromGitLab {
|
||||
domain = "framagit.org";
|
||||
owner = "Lapineige";
|
||||
repo = "FreshRSS_Extension-ReadingTime";
|
||||
rev = "fb6e9e944ef6c5299fa56ffddbe04c41e5a34ebf";
|
||||
hash = "sha256-C5cRfaphx4Qz2xg2z+v5qRji8WVSIpvzMbethTdSqsk=";
|
||||
};
|
||||
})
|
||||
]
|
||||
'';
|
||||
description = "Additional extensions to be used.";
|
||||
};
|
||||
|
||||
defaultUser = mkOption {
|
||||
type = types.str;
|
||||
default = "admin";
|
||||
@ -214,9 +248,7 @@ in
|
||||
"pm.max_spare_servers" = 5;
|
||||
"catch_workers_output" = true;
|
||||
};
|
||||
phpEnv = {
|
||||
DATA_PATH = "${cfg.dataDir}";
|
||||
};
|
||||
phpEnv = env-vars;
|
||||
};
|
||||
};
|
||||
|
||||
@ -259,9 +291,7 @@ in
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
restartIfChanged = true;
|
||||
environment = {
|
||||
DATA_PATH = cfg.dataDir;
|
||||
};
|
||||
environment = env-vars;
|
||||
|
||||
script =
|
||||
let
|
||||
@ -293,9 +323,7 @@ in
|
||||
description = "FreshRSS feed updater";
|
||||
after = [ "freshrss-config.service" ];
|
||||
startAt = "*:0/5";
|
||||
environment = {
|
||||
DATA_PATH = cfg.dataDir;
|
||||
};
|
||||
environment = env-vars;
|
||||
serviceConfig = defaultServiceConfig // {
|
||||
ExecStart = "${cfg.package}/app/actualize_script.php";
|
||||
};
|
||||
|
@ -40,7 +40,7 @@ in {
|
||||
pixelfed = {
|
||||
enable = mkEnableOption "a Pixelfed instance";
|
||||
package = mkPackageOption pkgs "pixelfed" { };
|
||||
phpPackage = mkPackageOption pkgs "php81" { };
|
||||
phpPackage = mkPackageOption pkgs "php82" { };
|
||||
|
||||
user = mkOption {
|
||||
type = types.str;
|
||||
|
@ -435,7 +435,7 @@ in
|
||||
example = literalExpression ''
|
||||
[
|
||||
"proxy_connect"
|
||||
{ name = "jk"; path = "''${pkgs.tomcat_connectors}/modules/mod_jk.so"; }
|
||||
{ name = "jk"; path = "''${pkgs.apacheHttpdPackages.mod_jk}/modules/mod_jk.so"; }
|
||||
]
|
||||
'';
|
||||
description = ''
|
||||
|
@ -3,70 +3,128 @@
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.services.fcgiwrap;
|
||||
forEachInstance = f: flip mapAttrs' config.services.fcgiwrap (name: cfg:
|
||||
nameValuePair "fcgiwrap-${name}" (f cfg)
|
||||
);
|
||||
|
||||
in {
|
||||
|
||||
options = {
|
||||
services.fcgiwrap = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
description = "Whether to enable fcgiwrap, a server for running CGI applications over FastCGI.";
|
||||
};
|
||||
|
||||
preforkProcesses = mkOption {
|
||||
type = types.int;
|
||||
options.services.fcgiwrap = mkOption {
|
||||
description = "Configuration for fcgiwrap instances.";
|
||||
default = { };
|
||||
type = types.attrsOf (types.submodule ({ config, ... }: { options = {
|
||||
process.prefork = mkOption {
|
||||
type = types.ints.positive;
|
||||
default = 1;
|
||||
description = "Number of processes to prefork.";
|
||||
};
|
||||
|
||||
socketType = mkOption {
|
||||
process.user = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
User as which this instance of fcgiwrap will be run.
|
||||
Set to `null` (the default) to use a dynamically allocated user.
|
||||
'';
|
||||
};
|
||||
|
||||
process.group = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "Group as which this instance of fcgiwrap will be run.";
|
||||
};
|
||||
|
||||
socket.type = mkOption {
|
||||
type = types.enum [ "unix" "tcp" "tcp6" ];
|
||||
default = "unix";
|
||||
description = "Socket type: 'unix', 'tcp' or 'tcp6'.";
|
||||
};
|
||||
|
||||
socketAddress = mkOption {
|
||||
socket.address = mkOption {
|
||||
type = types.str;
|
||||
default = "/run/fcgiwrap.sock";
|
||||
default = "/run/fcgiwrap-${config._module.args.name}.sock";
|
||||
example = "1.2.3.4:5678";
|
||||
description = "Socket address. In case of a UNIX socket, this should be its filesystem path.";
|
||||
description = ''
|
||||
Socket address.
|
||||
In case of a UNIX socket, this should be its filesystem path.
|
||||
'';
|
||||
};
|
||||
|
||||
user = mkOption {
|
||||
socket.user = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "User permissions for the socket.";
|
||||
description = ''
|
||||
User to be set as owner of the UNIX socket.
|
||||
Defaults to the process running user.
|
||||
'';
|
||||
};
|
||||
|
||||
group = mkOption {
|
||||
socket.group = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "Group permissions for the socket.";
|
||||
description = ''
|
||||
Group to be set as owner of the UNIX socket.
|
||||
Defaults to the process running group.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
socket.mode = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = if config.socket.type == "unix" then "0600" else null;
|
||||
defaultText = literalExpression ''
|
||||
if config.socket.type == "unix" then "0600" else null
|
||||
'';
|
||||
description = ''
|
||||
Mode to be set on the UNIX socket.
|
||||
Defaults to private to the socket's owner.
|
||||
'';
|
||||
};
|
||||
}; }));
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.fcgiwrap = {
|
||||
config = {
|
||||
assertions = concatLists (mapAttrsToList (name: cfg: [
|
||||
{
|
||||
assertion = cfg.socket.user != null -> cfg.socket.type == "unix";
|
||||
message = "Socket owner can only be set for the UNIX socket type.";
|
||||
}
|
||||
{
|
||||
assertion = cfg.socket.group != null -> cfg.socket.type == "unix";
|
||||
message = "Socket owner can only be set for the UNIX socket type.";
|
||||
}
|
||||
{
|
||||
assertion = cfg.socket.mode != null -> cfg.socket.type == "unix";
|
||||
message = "Socket mode can only be set for the UNIX socket type.";
|
||||
}
|
||||
]) config.services.fcgiwrap);
|
||||
|
||||
systemd.services = forEachInstance (cfg: {
|
||||
after = [ "nss-user-lookup.target" ];
|
||||
wantedBy = optional (cfg.socketType != "unix") "multi-user.target";
|
||||
wantedBy = optional (cfg.socket.type != "unix") "multi-user.target";
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.fcgiwrap}/sbin/fcgiwrap -c ${builtins.toString cfg.preforkProcesses} ${
|
||||
optionalString (cfg.socketType != "unix") "-s ${cfg.socketType}:${cfg.socketAddress}"
|
||||
}";
|
||||
} // (if cfg.user != null && cfg.group != null then {
|
||||
User = cfg.user;
|
||||
Group = cfg.group;
|
||||
} else { } );
|
||||
};
|
||||
ExecStart = ''
|
||||
${pkgs.fcgiwrap}/sbin/fcgiwrap ${cli.toGNUCommandLineShell {} ({
|
||||
c = cfg.process.prefork;
|
||||
} // (optionalAttrs (cfg.socket.type != "unix") {
|
||||
s = "${cfg.socket.type}:${cfg.socket.address}";
|
||||
}))}
|
||||
'';
|
||||
} // (if cfg.process.user != null then {
|
||||
User = cfg.process.user;
|
||||
Group = cfg.process.group;
|
||||
} else {
|
||||
DynamicUser = true;
|
||||
});
|
||||
});
|
||||
|
||||
systemd.sockets = if (cfg.socketType == "unix") then {
|
||||
fcgiwrap = {
|
||||
wantedBy = [ "sockets.target" ];
|
||||
socketConfig.ListenStream = cfg.socketAddress;
|
||||
systemd.sockets = forEachInstance (cfg: mkIf (cfg.socket.type == "unix") {
|
||||
wantedBy = [ "sockets.target" ];
|
||||
socketConfig = {
|
||||
ListenStream = cfg.socket.address;
|
||||
SocketUser = cfg.socket.user;
|
||||
SocketGroup = cfg.socket.group;
|
||||
SocketMode = cfg.socket.mode;
|
||||
};
|
||||
} else { };
|
||||
});
|
||||
};
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ in {
|
||||
'';
|
||||
type = types.listOf types.package;
|
||||
default = [];
|
||||
example = literalExpression "[ pkgs.gnome.gpaste ]";
|
||||
example = literalExpression "[ pkgs.gpaste ]";
|
||||
};
|
||||
|
||||
extraGSettingsOverrides = mkOption {
|
||||
@ -132,7 +132,7 @@ in {
|
||||
gnome-menus
|
||||
|
||||
# Required by Budgie Control Center.
|
||||
gnome.zenity
|
||||
zenity
|
||||
|
||||
# Provides `gsettings`.
|
||||
glib
|
||||
@ -162,7 +162,7 @@ in {
|
||||
++ cfg.sessionPath;
|
||||
|
||||
# Both budgie-desktop-view and nemo defaults to this emulator.
|
||||
programs.gnome-terminal.enable = mkDefault (notExcluded pkgs.gnome.gnome-terminal);
|
||||
programs.gnome-terminal.enable = mkDefault (notExcluded pkgs.gnome-terminal);
|
||||
|
||||
# Fonts.
|
||||
fonts.packages = [
|
||||
|
@ -27,7 +27,7 @@ in
|
||||
sessionPath = mkOption {
|
||||
default = [];
|
||||
type = types.listOf types.package;
|
||||
example = literalExpression "[ pkgs.gnome.gpaste ]";
|
||||
example = literalExpression "[ pkgs.gpaste ]";
|
||||
description = ''
|
||||
Additional list of packages to be added to the session search path.
|
||||
Useful for GSettings-conditional autostart.
|
||||
@ -163,8 +163,8 @@ in
|
||||
libgnomekbd
|
||||
|
||||
# theme
|
||||
gnome.adwaita-icon-theme
|
||||
gnome.gnome-themes-extra
|
||||
adwaita-icon-theme
|
||||
gnome-themes-extra
|
||||
gtk3.out
|
||||
|
||||
# other
|
||||
@ -229,11 +229,11 @@ in
|
||||
})
|
||||
|
||||
(mkIf serviceCfg.apps.enable {
|
||||
programs.gnome-disks.enable = mkDefault (notExcluded pkgs.gnome.gnome-disk-utility);
|
||||
programs.gnome-terminal.enable = mkDefault (notExcluded pkgs.gnome.gnome-terminal);
|
||||
programs.file-roller.enable = mkDefault (notExcluded pkgs.gnome.file-roller);
|
||||
programs.gnome-disks.enable = mkDefault (notExcluded pkgs.gnome-disk-utility);
|
||||
programs.gnome-terminal.enable = mkDefault (notExcluded pkgs.gnome-terminal);
|
||||
programs.file-roller.enable = mkDefault (notExcluded pkgs.file-roller);
|
||||
|
||||
environment.systemPackages = with pkgs // pkgs.gnome // pkgs.cinnamon; utils.removePackagesByName [
|
||||
environment.systemPackages = with pkgs // pkgs.cinnamon; utils.removePackagesByName [
|
||||
# cinnamon team apps
|
||||
bulky
|
||||
warpinator
|
||||
|
@ -114,7 +114,7 @@ in `dconf-editor`
|
||||
## Shell Extensions {#sec-gnome-shell-extensions}
|
||||
|
||||
Most Shell extensions are packaged under the `gnomeExtensions` attribute.
|
||||
Some packages that include Shell extensions, like `gnome.gpaste`, don’t have their extension decoupled under this attribute.
|
||||
Some packages that include Shell extensions, like `gpaste`, don’t have their extension decoupled under this attribute.
|
||||
|
||||
You can install them like any other package:
|
||||
|
||||
|
@ -89,7 +89,7 @@ in
|
||||
sessionPath = mkOption {
|
||||
default = [];
|
||||
type = types.listOf types.package;
|
||||
example = literalExpression "[ pkgs.gnome.gpaste ]";
|
||||
example = literalExpression "[ pkgs.gpaste ]";
|
||||
description = ''
|
||||
Additional list of packages to be added to the session search path.
|
||||
Useful for GNOME Shell extensions or GSettings-conditional autostart.
|
||||
@ -176,7 +176,7 @@ in
|
||||
|
||||
environment.gnome.excludePackages = mkOption {
|
||||
default = [];
|
||||
example = literalExpression "[ pkgs.gnome.totem ]";
|
||||
example = literalExpression "[ pkgs.totem ]";
|
||||
type = types.listOf types.package;
|
||||
description = "Which packages gnome should exclude from the default environment";
|
||||
};
|
||||
@ -373,7 +373,7 @@ in
|
||||
gnome-shell
|
||||
];
|
||||
optionalPackages = with pkgs.gnome; [
|
||||
adwaita-icon-theme
|
||||
pkgs.adwaita-icon-theme
|
||||
nixos-background-info
|
||||
gnome-backgrounds
|
||||
gnome-bluetooth
|
||||
@ -399,28 +399,28 @@ in
|
||||
with pkgs.gnome;
|
||||
utils.removePackagesByName
|
||||
([
|
||||
baobab
|
||||
epiphany
|
||||
pkgs.baobab
|
||||
pkgs.epiphany
|
||||
pkgs.gnome-text-editor
|
||||
gnome-calculator
|
||||
gnome-calendar
|
||||
pkgs.gnome-calculator
|
||||
pkgs.gnome-calendar
|
||||
gnome-characters
|
||||
gnome-clocks
|
||||
pkgs.gnome-console
|
||||
gnome-contacts
|
||||
gnome-font-viewer
|
||||
pkgs.gnome-font-viewer
|
||||
gnome-logs
|
||||
gnome-maps
|
||||
gnome-music
|
||||
gnome-system-monitor
|
||||
pkgs.gnome-system-monitor
|
||||
gnome-weather
|
||||
pkgs.loupe
|
||||
nautilus
|
||||
pkgs.nautilus
|
||||
pkgs.gnome-connections
|
||||
simple-scan
|
||||
pkgs.simple-scan
|
||||
pkgs.snapshot
|
||||
totem
|
||||
yelp
|
||||
pkgs.totem
|
||||
pkgs.yelp
|
||||
] ++ lib.optionals config.services.flatpak.enable [
|
||||
# Since PackageKit Nix support is not there yet,
|
||||
# only install gnome-software if flatpak is enabled.
|
||||
@ -432,12 +432,12 @@ in
|
||||
# Since some of these have a corresponding package, we only
|
||||
# enable that program module if the package hasn't been excluded
|
||||
# through `environment.gnome.excludePackages`
|
||||
programs.evince.enable = notExcluded pkgs.gnome.evince;
|
||||
programs.file-roller.enable = notExcluded pkgs.gnome.file-roller;
|
||||
programs.geary.enable = notExcluded pkgs.gnome.geary;
|
||||
programs.gnome-disks.enable = notExcluded pkgs.gnome.gnome-disk-utility;
|
||||
programs.seahorse.enable = notExcluded pkgs.gnome.seahorse;
|
||||
services.gnome.sushi.enable = notExcluded pkgs.gnome.sushi;
|
||||
programs.evince.enable = notExcluded pkgs.evince;
|
||||
programs.file-roller.enable = notExcluded pkgs.file-roller;
|
||||
programs.geary.enable = notExcluded pkgs.geary;
|
||||
programs.gnome-disks.enable = notExcluded pkgs.gnome-disk-utility;
|
||||
programs.seahorse.enable = notExcluded pkgs.seahorse;
|
||||
services.gnome.sushi.enable = notExcluded pkgs.sushi;
|
||||
|
||||
# VTE shell integration for gnome-console
|
||||
programs.bash.vteIntegration = mkDefault true;
|
||||
@ -482,9 +482,9 @@ in
|
||||
|
||||
# Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/3.38.0/elements/core/meta-gnome-core-developer-tools.bst
|
||||
(lib.mkIf serviceCfg.core-developer-tools.enable {
|
||||
environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
|
||||
dconf-editor
|
||||
devhelp
|
||||
environment.systemPackages = utils.removePackagesByName [
|
||||
pkgs.dconf-editor
|
||||
pkgs.devhelp
|
||||
pkgs.gnome-builder
|
||||
# boxes would make sense in this option, however
|
||||
# it doesn't function well enough to be included
|
||||
|
@ -44,7 +44,7 @@ in
|
||||
sessionPath = mkOption {
|
||||
default = [];
|
||||
type = types.listOf types.package;
|
||||
example = literalExpression "[ pkgs.gnome.gpaste ]";
|
||||
example = literalExpression "[ pkgs.gpaste ]";
|
||||
description = ''
|
||||
Additional list of packages to be added to the session search path.
|
||||
Useful for GSettings-conditional autostart.
|
||||
@ -207,7 +207,7 @@ in
|
||||
desktop-file-utils
|
||||
glib # for gsettings program
|
||||
gnome-menus
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
gtk3.out # for gtk-launch program
|
||||
onboard
|
||||
orca # elementary/greeter#668
|
||||
@ -284,11 +284,11 @@ in
|
||||
})
|
||||
|
||||
(mkIf serviceCfg.apps.enable {
|
||||
programs.evince.enable = mkDefault (notExcluded pkgs.gnome.evince);
|
||||
programs.file-roller.enable = mkDefault (notExcluded pkgs.gnome.file-roller);
|
||||
programs.evince.enable = mkDefault (notExcluded pkgs.evince);
|
||||
programs.file-roller.enable = mkDefault (notExcluded pkgs.file-roller);
|
||||
|
||||
environment.systemPackages = utils.removePackagesByName ([
|
||||
pkgs.gnome.gnome-font-viewer
|
||||
pkgs.gnome-font-viewer
|
||||
] ++ (with pkgs.pantheon; [
|
||||
elementary-calculator
|
||||
elementary-calendar
|
||||
|
@ -84,8 +84,8 @@ in
|
||||
glib # for gsettings
|
||||
gtk3.out # gtk-update-icon-cache
|
||||
|
||||
gnome.gnome-themes-extra
|
||||
gnome.adwaita-icon-theme
|
||||
gnome-themes-extra
|
||||
adwaita-icon-theme
|
||||
hicolor-icon-theme
|
||||
tango-icon-theme
|
||||
xfce4-icon-theme
|
||||
|
@ -155,7 +155,7 @@ in
|
||||
gdm # for gnome-login.session
|
||||
config.services.displayManager.sessionData.desktops
|
||||
pkgs.gnome.gnome-control-center # for accessibility icon
|
||||
pkgs.gnome.adwaita-icon-theme
|
||||
pkgs.adwaita-icon-theme
|
||||
pkgs.hicolor-icon-theme # empty icon theme as a base
|
||||
];
|
||||
} // optionalAttrs (xSessionWrapper != null) {
|
||||
@ -183,7 +183,7 @@ in
|
||||
|
||||
# Otherwise GDM will not be able to start correctly and display Wayland sessions
|
||||
systemd.packages = with pkgs.gnome; [ gdm gnome-session gnome-shell ];
|
||||
environment.systemPackages = [ pkgs.gnome.adwaita-icon-theme ];
|
||||
environment.systemPackages = [ pkgs.adwaita-icon-theme ];
|
||||
|
||||
# We dont use the upstream gdm service
|
||||
# it has to be disabled since the gdm package has it
|
||||
|
@ -34,8 +34,8 @@ in {
|
||||
theme = {
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.gnome.gnome-themes-extra;
|
||||
defaultText = literalExpression "pkgs.gnome.gnome-themes-extra";
|
||||
default = pkgs.gnome-themes-extra;
|
||||
defaultText = literalExpression "pkgs.gnome-themes-extra";
|
||||
description = ''
|
||||
The package path that contains the theme given in the name option.
|
||||
'';
|
||||
|
@ -47,8 +47,8 @@ in
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.gnome.gnome-themes-extra;
|
||||
defaultText = literalExpression "pkgs.gnome.gnome-themes-extra";
|
||||
default = pkgs.gnome-themes-extra;
|
||||
defaultText = literalExpression "pkgs.gnome-themes-extra";
|
||||
description = ''
|
||||
The package path that contains the theme given in the name option.
|
||||
'';
|
||||
@ -68,8 +68,8 @@ in
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.gnome.adwaita-icon-theme;
|
||||
defaultText = literalExpression "pkgs.gnome.adwaita-icon-theme";
|
||||
default = pkgs.adwaita-icon-theme;
|
||||
defaultText = literalExpression "pkgs.adwaita-icon-theme";
|
||||
description = ''
|
||||
The package path that contains the icon theme given in the name option.
|
||||
'';
|
||||
@ -89,8 +89,8 @@ in
|
||||
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.gnome.adwaita-icon-theme;
|
||||
defaultText = literalExpression "pkgs.gnome.adwaita-icon-theme";
|
||||
default = pkgs.adwaita-icon-theme;
|
||||
defaultText = literalExpression "pkgs.adwaita-icon-theme";
|
||||
description = ''
|
||||
The package path that contains the cursor theme given in the name option.
|
||||
'';
|
||||
|
@ -33,8 +33,8 @@ in
|
||||
theme = {
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.gnome.gnome-themes-extra;
|
||||
defaultText = literalExpression "pkgs.gnome.gnome-themes-extra";
|
||||
default = pkgs.gnome-themes-extra;
|
||||
defaultText = literalExpression "pkgs.gnome-themes-extra";
|
||||
description = ''
|
||||
The package path that contains the theme given in the name option.
|
||||
'';
|
||||
@ -52,8 +52,8 @@ in
|
||||
iconTheme = {
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.gnome.adwaita-icon-theme;
|
||||
defaultText = literalExpression "pkgs.gnome.adwaita-icon-theme";
|
||||
default = pkgs.adwaita-icon-theme;
|
||||
defaultText = literalExpression "pkgs.adwaita-icon-theme";
|
||||
description = ''
|
||||
The package path that contains the icon theme given in the name option.
|
||||
'';
|
||||
@ -90,8 +90,8 @@ in
|
||||
cursorTheme = {
|
||||
package = mkOption {
|
||||
type = types.package;
|
||||
default = pkgs.gnome.adwaita-icon-theme;
|
||||
defaultText = literalExpression "pkgs.gnome.adwaita-icon-theme";
|
||||
default = pkgs.adwaita-icon-theme;
|
||||
defaultText = literalExpression "pkgs.adwaita-icon-theme";
|
||||
description = ''
|
||||
The package path that contains the cursor theme given in the name option.
|
||||
'';
|
||||
|
@ -72,7 +72,7 @@ in {
|
||||
type = types.lines;
|
||||
example = "Storage=volatile";
|
||||
description = ''
|
||||
Extra config options for systemd-journald. See man journald.conf
|
||||
Extra config options for systemd-journald. See {manpage}`journald.conf(5)`
|
||||
for available options.
|
||||
'';
|
||||
};
|
||||
|
@ -337,6 +337,7 @@ in {
|
||||
freenet = handleTest ./freenet.nix {};
|
||||
freeswitch = handleTest ./freeswitch.nix {};
|
||||
freetube = discoverTests (import ./freetube.nix);
|
||||
freshrss-extensions = handleTest ./freshrss-extensions.nix {};
|
||||
freshrss-sqlite = handleTest ./freshrss-sqlite.nix {};
|
||||
freshrss-pgsql = handleTest ./freshrss-pgsql.nix {};
|
||||
freshrss-http-auth = handleTest ./freshrss-http-auth.nix {};
|
||||
|
@ -23,7 +23,7 @@ in {
|
||||
nginx.location = "/(c)git/";
|
||||
repos = {
|
||||
some-repo = {
|
||||
path = "/srv/git/some-repo";
|
||||
path = "/tmp/git/some-repo";
|
||||
desc = "some-repo description";
|
||||
};
|
||||
};
|
||||
@ -50,12 +50,12 @@ in {
|
||||
|
||||
server.fail("curl -fsS http://localhost/robots.txt")
|
||||
|
||||
server.succeed("${pkgs.writeShellScript "setup-cgit-test-repo" ''
|
||||
server.succeed("sudo -u cgit ${pkgs.writeShellScript "setup-cgit-test-repo" ''
|
||||
set -e
|
||||
git init --bare -b master /srv/git/some-repo
|
||||
git init --bare -b master /tmp/git/some-repo
|
||||
git init -b master reference
|
||||
cd reference
|
||||
git remote add origin /srv/git/some-repo
|
||||
git remote add origin /tmp/git/some-repo
|
||||
date > date.txt
|
||||
git add date.txt
|
||||
git -c user.name=test -c user.email=test@localhost commit -m 'add date'
|
||||
|
@ -14,7 +14,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
||||
};
|
||||
|
||||
# For the sessionPath subtest.
|
||||
services.xserver.desktopManager.cinnamon.sessionPath = [ pkgs.gnome.gpaste ];
|
||||
services.xserver.desktopManager.cinnamon.sessionPath = [ pkgs.gpaste ];
|
||||
};
|
||||
|
||||
enableOCR = true;
|
||||
|
@ -13,7 +13,7 @@ import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
||||
environment.cinnamon.excludePackages = [ pkgs.gnome-text-editor ];
|
||||
|
||||
# For the sessionPath subtest.
|
||||
services.xserver.desktopManager.cinnamon.sessionPath = [ pkgs.gnome.gpaste ];
|
||||
services.xserver.desktopManager.cinnamon.sessionPath = [ pkgs.gpaste ];
|
||||
};
|
||||
|
||||
enableOCR = true;
|
||||
|
@ -113,7 +113,7 @@ in {
|
||||
name = "curl-impersonate";
|
||||
|
||||
meta = with lib.maintainers; {
|
||||
maintainers = [ lilyinstarlight ];
|
||||
maintainers = [ ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
|
19
nixos/tests/freshrss-extensions.nix
Normal file
19
nixos/tests/freshrss-extensions.nix
Normal file
@ -0,0 +1,19 @@
|
||||
import ./make-test-python.nix ({ lib, pkgs, ... }: {
|
||||
name = "freshrss";
|
||||
|
||||
nodes.machine = { pkgs, ... }: {
|
||||
services.freshrss = {
|
||||
enable = true;
|
||||
baseUrl = "http://localhost";
|
||||
authType = "none";
|
||||
extensions = [ pkgs.freshrss-extensions.youtube ];
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
machine.wait_for_unit("multi-user.target")
|
||||
machine.wait_for_open_port(80)
|
||||
response = machine.succeed("curl -vvv -s http://127.0.0.1:80/i/?c=extension")
|
||||
assert '<span class="ext_name disabled">YouTube Video Feed</span>' in response, "Extension not present in extensions page."
|
||||
'';
|
||||
})
|
@ -1,6 +1,6 @@
|
||||
import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
||||
name = "frp";
|
||||
meta.maintainers = with lib.maintainers; [ zaldnoay janik ];
|
||||
meta.maintainers = with lib.maintainers; [ zaldnoay ];
|
||||
nodes = {
|
||||
frps = {
|
||||
networking = {
|
||||
|
@ -24,7 +24,12 @@ import ./make-test-python.nix (
|
||||
{
|
||||
networking.firewall.allowedTCPPorts = [ 80 ];
|
||||
|
||||
services.fcgiwrap.enable = true;
|
||||
services.fcgiwrap.gitolite = {
|
||||
process.user = "gitolite";
|
||||
process.group = "gitolite";
|
||||
socket = { inherit (config.services.nginx) user group; };
|
||||
};
|
||||
|
||||
services.gitolite = {
|
||||
enable = true;
|
||||
adminPubkey = adminPublicKey;
|
||||
@ -59,7 +64,7 @@ import ./make-test-python.nix (
|
||||
fastcgi_param SCRIPT_FILENAME ${pkgs.gitolite}/bin/gitolite-shell;
|
||||
|
||||
# use Unix domain socket or inet socket
|
||||
fastcgi_pass unix:/run/fcgiwrap.sock;
|
||||
fastcgi_pass unix:${config.services.fcgiwrap.gitolite.socket.address};
|
||||
'';
|
||||
};
|
||||
|
||||
@ -82,7 +87,7 @@ import ./make-test-python.nix (
|
||||
|
||||
server.wait_for_unit("gitolite-init.service")
|
||||
server.wait_for_unit("nginx.service")
|
||||
server.wait_for_file("/run/fcgiwrap.sock")
|
||||
server.wait_for_file("/run/fcgiwrap-gitolite.sock")
|
||||
|
||||
client.wait_for_unit("multi-user.target")
|
||||
client.succeed(
|
||||
|
@ -10,7 +10,7 @@ let
|
||||
analytics.reporting_enabled = false;
|
||||
|
||||
server = {
|
||||
http_addr = "localhost";
|
||||
http_addr = "::1";
|
||||
domain = "localhost";
|
||||
};
|
||||
|
||||
@ -47,7 +47,7 @@ let
|
||||
|
||||
postgresql = {
|
||||
services.grafana.settings.database = {
|
||||
host = "127.0.0.1:5432";
|
||||
host = "[::1]:5432";
|
||||
user = "grafana";
|
||||
};
|
||||
services.postgresql = {
|
||||
@ -91,9 +91,9 @@ in {
|
||||
|
||||
with subtest("Declarative plugins installed"):
|
||||
declarativePlugins.wait_for_unit("grafana.service")
|
||||
declarativePlugins.wait_for_open_port(3000)
|
||||
declarativePlugins.wait_for_open_port(3000, addr="::1")
|
||||
declarativePlugins.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/plugins | grep grafana-clock-panel"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/plugins | grep grafana-clock-panel"
|
||||
)
|
||||
declarativePlugins.shutdown()
|
||||
|
||||
@ -101,10 +101,10 @@ in {
|
||||
sqlite.wait_for_unit("grafana.service")
|
||||
sqlite.wait_for_open_port(3000)
|
||||
print(sqlite.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users -i"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/org/users -i"
|
||||
))
|
||||
sqlite.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/org/users | grep admin\@localhost"
|
||||
)
|
||||
sqlite.shutdown()
|
||||
|
||||
@ -112,10 +112,10 @@ in {
|
||||
socket.wait_for_unit("grafana.service")
|
||||
socket.wait_for_open_port(80)
|
||||
print(socket.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1/api/org/users -i"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]/api/org/users -i"
|
||||
))
|
||||
socket.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1/api/org/users | grep admin\@localhost"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]/api/org/users | grep admin\@localhost"
|
||||
)
|
||||
socket.shutdown()
|
||||
|
||||
@ -125,7 +125,7 @@ in {
|
||||
postgresql.wait_for_open_port(3000)
|
||||
postgresql.wait_for_open_port(5432)
|
||||
postgresql.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/org/users | grep admin\@localhost"
|
||||
)
|
||||
postgresql.shutdown()
|
||||
|
||||
@ -135,7 +135,7 @@ in {
|
||||
mysql.wait_for_open_port(3000)
|
||||
mysql.wait_for_open_port(3306)
|
||||
mysql.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/org/users | grep admin\@localhost"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/org/users | grep admin\@localhost"
|
||||
)
|
||||
mysql.shutdown()
|
||||
'';
|
||||
|
@ -11,7 +11,7 @@ let
|
||||
analytics.reporting_enabled = false;
|
||||
|
||||
server = {
|
||||
http_addr = "localhost";
|
||||
http_addr = "::1";
|
||||
domain = "localhost";
|
||||
};
|
||||
|
||||
@ -177,41 +177,41 @@ in {
|
||||
for description, machine in [nodeNix, nodeYaml, nodeYamlDir]:
|
||||
with subtest(f"Should start provision node: {description}"):
|
||||
machine.wait_for_unit("grafana.service")
|
||||
machine.wait_for_open_port(3000)
|
||||
machine.wait_for_open_port(3000, addr="::1")
|
||||
|
||||
with subtest(f"Successful datasource provision with {description}"):
|
||||
machine.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/datasources/uid/test_datasource | grep Test\ Datasource"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/datasources/uid/test_datasource | grep Test\ Datasource"
|
||||
)
|
||||
|
||||
with subtest(f"Successful dashboard provision with {description}"):
|
||||
machine.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/dashboards/uid/test_dashboard | grep Test\ Dashboard"
|
||||
)
|
||||
|
||||
with subtest(f"Successful rule provision with {description}"):
|
||||
machine.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/alert-rules/test_rule | grep Test\ Rule"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/alert-rules/test_rule | grep Test\ Rule"
|
||||
)
|
||||
|
||||
with subtest(f"Successful contact point provision with {description}"):
|
||||
machine.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/contact-points | grep Test\ Contact\ Point"
|
||||
)
|
||||
|
||||
with subtest(f"Successful policy provision with {description}"):
|
||||
machine.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/policies | grep Test\ Contact\ Point"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/policies | grep Test\ Contact\ Point"
|
||||
)
|
||||
|
||||
with subtest(f"Successful template provision with {description}"):
|
||||
machine.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/templates | grep Test\ Template"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/templates | grep Test\ Template"
|
||||
)
|
||||
|
||||
with subtest("Successful mute timings provision with {description}"):
|
||||
machine.succeed(
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://127.0.0.1:3000/api/v1/provisioning/mute-timings | grep Test\ Mute\ Timing"
|
||||
"curl -sSfN -u testadmin:snakeoilpwd http://[::1]:3000/api/v1/provisioning/mute-timings | grep Test\ Mute\ Timing"
|
||||
)
|
||||
'';
|
||||
})
|
||||
|
@ -166,7 +166,7 @@ let
|
||||
in lib.mapAttrs (lib.const (attrs: makeTest (attrs // {
|
||||
name = "${attrs.name}-Networking-NetworkManager";
|
||||
meta = {
|
||||
maintainers = with lib.maintainers; [ janik ];
|
||||
maintainers = with lib.maintainers; [ ];
|
||||
};
|
||||
|
||||
}))) testCases
|
||||
|
@ -9,7 +9,7 @@ import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
|
||||
{ imports = [ ./common/x11.nix ];
|
||||
programs.plotinus.enable = true;
|
||||
environment.systemPackages = [ pkgs.gnome.gnome-calculator pkgs.xdotool ];
|
||||
environment.systemPackages = [ pkgs.gnome-calculator pkgs.xdotool ];
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
|
@ -42,7 +42,7 @@ let tests = {
|
||||
|
||||
germinal.pkg = p: p.germinal;
|
||||
|
||||
gnome-terminal.pkg = p: p.gnome.gnome-terminal;
|
||||
gnome-terminal.pkg = p: p.gnome-terminal;
|
||||
|
||||
guake.pkg = p: p.guake;
|
||||
guake.cmd = "SHELL=$command guake --show";
|
||||
|
@ -9,7 +9,7 @@ let
|
||||
textInput = "This works.";
|
||||
inputBoxText = "Enter input";
|
||||
inputBox = pkgs.writeShellScript "zenity-input" ''
|
||||
${lib.getExe pkgs.gnome.zenity} --entry --text '${inputBoxText}:' > /tmp/output &
|
||||
${lib.getExe pkgs.zenity} --entry --text '${inputBoxText}:' > /tmp/output &
|
||||
'';
|
||||
asUser = ''
|
||||
def as_user(cmd: str):
|
||||
|
@ -29,7 +29,7 @@
|
||||
, curl
|
||||
, pcre
|
||||
, mount
|
||||
, gnome
|
||||
, zenity
|
||||
, Accelerate
|
||||
, Cocoa
|
||||
, WebKit
|
||||
@ -91,7 +91,7 @@ stdenv.mkDerivation rec {
|
||||
libusb1
|
||||
alsa-lib
|
||||
libjack2
|
||||
gnome.zenity
|
||||
zenity
|
||||
alsa-tools
|
||||
libxcb
|
||||
xcbutil
|
||||
@ -129,7 +129,7 @@ stdenv.mkDerivation rec {
|
||||
# These X11 libs get dlopen'd, they cause visual bugs when unavailable.
|
||||
wrapProgram $out/bin/BespokeSynth \
|
||||
--prefix PATH : '${lib.makeBinPath [
|
||||
gnome.zenity
|
||||
zenity
|
||||
(python3.withPackages (ps: with ps; [ jedi ]))
|
||||
]}'
|
||||
'';
|
||||
|
@ -17,6 +17,7 @@
|
||||
libxml2,
|
||||
gsettings-desktop-schemas,
|
||||
gnome,
|
||||
adwaita-icon-theme,
|
||||
wrapGAppsHook3,
|
||||
fetchpatch,
|
||||
}:
|
||||
@ -59,7 +60,7 @@ stdenv.mkDerivation rec {
|
||||
opusfile
|
||||
flac
|
||||
gsettings-desktop-schemas
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
];
|
||||
|
||||
doCheck = false; # fails 1 out of 9 tests
|
||||
|
@ -1,8 +1,8 @@
|
||||
{ stdenv, lib, fetchFromGitHub
|
||||
, gobject-introspection, makeWrapper, wrapGAppsHook3
|
||||
, gtk3, gst_all_1, python3
|
||||
, gettext, gnome, help2man, keybinder3, libnotify, librsvg, streamripper, udisks, webkitgtk
|
||||
, iconTheme ? gnome.adwaita-icon-theme
|
||||
, gettext, adwaita-icon-theme, help2man, keybinder3, libnotify, librsvg, streamripper, udisks, webkitgtk
|
||||
, iconTheme ? adwaita-icon-theme
|
||||
, deviceDetectionSupport ? true
|
||||
, documentationSupport ? true
|
||||
, notificationSupport ? true
|
||||
|
@ -2,7 +2,7 @@
|
||||
, fetchFromGitHub
|
||||
, gitUpdater
|
||||
, glibcLocales
|
||||
, gnome
|
||||
, adwaita-icon-theme
|
||||
, gobject-introspection
|
||||
, gtk3
|
||||
, intltool
|
||||
@ -42,7 +42,7 @@ python3Packages.buildPythonApplication rec {
|
||||
buildInputs = [
|
||||
python3
|
||||
gtk3
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
];
|
||||
|
||||
nativeCheckInputs = with python3Packages; [
|
||||
|
@ -12,7 +12,7 @@
|
||||
, glib
|
||||
, glib-networking
|
||||
, glibmm
|
||||
, gnome
|
||||
, adwaita-icon-theme
|
||||
, gsettings-desktop-schemas
|
||||
, gtk3
|
||||
, gtkmm3
|
||||
@ -76,7 +76,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
glib
|
||||
glib-networking.out
|
||||
glibmm
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
gsettings-desktop-schemas
|
||||
gtk3
|
||||
gtkmm3
|
||||
|
@ -1,5 +1,5 @@
|
||||
{ lib, stdenv, fetchFromGitHub
|
||||
, alsa-lib, freetype, xorg, curl, libGL, libjack2, gnome
|
||||
, alsa-lib, freetype, xorg, curl, libGL, libjack2, zenity
|
||||
, pkg-config, makeWrapper
|
||||
}:
|
||||
|
||||
@ -17,7 +17,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
buildInputs = [
|
||||
alsa-lib freetype xorg.libX11 xorg.libXext xorg.libXinerama xorg.libXrandr
|
||||
xorg.libXcursor xorg.libXcomposite curl libGL libjack2 gnome.zenity
|
||||
xorg.libXcursor xorg.libXcomposite curl libGL libjack2 zenity
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ pkg-config makeWrapper ];
|
||||
@ -31,7 +31,7 @@ stdenv.mkDerivation rec {
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
install -Dm755 build/helio $out/bin
|
||||
wrapProgram $out/bin/helio --prefix PATH ":" ${gnome.zenity}/bin
|
||||
wrapProgram $out/bin/helio --prefix PATH ":" ${zenity}/bin
|
||||
|
||||
mkdir -p $out/share
|
||||
cp -r ../Deployment/Linux/Debian/x64/usr/share/* $out/share
|
||||
|
@ -67,6 +67,6 @@ stdenv.mkDerivation rec {
|
||||
license = licenses.asl20;
|
||||
# currently broken on i686-linux and aarch64-linux due to other nixpkgs dependencies
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with maintainers; [ ckie ];
|
||||
maintainers = with maintainers; [ ];
|
||||
};
|
||||
}
|
||||
|
@ -24,6 +24,6 @@ pythonPackages.buildPythonApplication rec {
|
||||
homepage = "https://github.com/phijor/mopidy-notify";
|
||||
description = "Mopidy extension for showing desktop notifications on track change";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ lilyinstarlight ];
|
||||
maintainers = with maintainers; [ ];
|
||||
};
|
||||
}
|
||||
|
@ -30,6 +30,6 @@ pythonPackages.buildPythonApplication rec {
|
||||
homepage = "https://github.com/mopidy/mopidy-spotify";
|
||||
description = "Mopidy extension for playing music from Spotify";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ lilyinstarlight ];
|
||||
maintainers = with maintainers; [ ];
|
||||
};
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ buildNpmPackage rec {
|
||||
description = "Libre and modular OSC / MIDI controller";
|
||||
homepage = "https://openstagecontrol.ammd.net/";
|
||||
license = licenses.gpl3Only;
|
||||
maintainers = with maintainers; [ lilyinstarlight ];
|
||||
maintainers = with maintainers; [ ];
|
||||
platforms = platforms.linux;
|
||||
mainProgram = "open-stage-control";
|
||||
};
|
||||
|
@ -83,7 +83,7 @@ buildDotnetModule rec {
|
||||
# worldline resampler binary - no source is available (hence "unfree") but usage of the binary is MIT
|
||||
unfreeRedistributable
|
||||
];
|
||||
maintainers = with maintainers; [ lilyinstarlight ];
|
||||
maintainers = with maintainers; [ ];
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
mainProgram = "OpenUtau";
|
||||
};
|
||||
|
@ -8,7 +8,7 @@
|
||||
, libsigcxx
|
||||
, libcanberra-gtk3
|
||||
, json-glib
|
||||
, gnome
|
||||
, adwaita-icon-theme
|
||||
, wrapGAppsHook3
|
||||
}:
|
||||
|
||||
@ -27,7 +27,7 @@ stdenv.mkDerivation rec {
|
||||
libsigcxx
|
||||
libcanberra-gtk3
|
||||
json-glib
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ pkg-config intltool wrapGAppsHook3 ];
|
||||
|
@ -1,5 +1,5 @@
|
||||
{ stdenv, lib, fetchFromGitHub, meson, ninja, pkg-config, appstream-glib
|
||||
, wrapGAppsHook3, pythonPackages, gtk3, gnome, gobject-introspection
|
||||
, wrapGAppsHook3, pythonPackages, gtk3, adwaita-icon-theme, gobject-introspection
|
||||
, libnotify, libsecret, gst_all_1 }:
|
||||
|
||||
pythonPackages.buildPythonApplication rec {
|
||||
@ -27,7 +27,7 @@ pythonPackages.buildPythonApplication rec {
|
||||
];
|
||||
|
||||
propagatedBuildInputs =
|
||||
[ gtk3 gobject-introspection libnotify libsecret gnome.adwaita-icon-theme ] ++
|
||||
[ gtk3 gobject-introspection libnotify libsecret adwaita-icon-theme ] ++
|
||||
(with gst_all_1; [ gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly gst-plugins-bad ]) ++
|
||||
(with pythonPackages; [ pygobject3 pylast ]);
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
, alsa-lib
|
||||
, freetype
|
||||
, webkitgtk
|
||||
, gnome
|
||||
, zenity
|
||||
, curl
|
||||
, xorg
|
||||
, python3
|
||||
@ -102,7 +102,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
# These X11 libs get dlopen'd, they cause visual bugs when unavailable.
|
||||
wrapProgram $out/bin/plugdata \
|
||||
--prefix PATH : '${lib.makeBinPath [
|
||||
gnome.zenity
|
||||
zenity
|
||||
]}' \
|
||||
--prefix LD_LIBRARY_PATH : '${lib.makeLibraryPath [
|
||||
xorg.libXrandr
|
||||
|
@ -1,5 +1,5 @@
|
||||
{ lib, stdenv, fetchFromGitHub, libjack2, libsndfile, xorg, freetype
|
||||
, libxkbcommon, cairo, glib, gnome, flac, libogg, libvorbis, libopus, cmake
|
||||
, libxkbcommon, cairo, glib, zenity, flac, libogg, libvorbis, libopus, cmake
|
||||
, pango, pkg-config, catch2
|
||||
}:
|
||||
|
||||
@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
|
||||
libxkbcommon
|
||||
cairo
|
||||
glib
|
||||
gnome.zenity
|
||||
zenity
|
||||
freetype
|
||||
pango
|
||||
];
|
||||
@ -47,9 +47,9 @@ stdenv.mkDerivation rec {
|
||||
cp ${catch2}/include/catch2/catch.hpp tests/catch2/catch.hpp
|
||||
|
||||
substituteInPlace plugins/editor/external/vstgui4/vstgui/lib/platform/linux/x11fileselector.cpp \
|
||||
--replace 'zenitypath = "zenity"' 'zenitypath = "${gnome.zenity}/bin/zenity"'
|
||||
--replace 'zenitypath = "zenity"' 'zenitypath = "${zenity}/bin/zenity"'
|
||||
substituteInPlace plugins/editor/src/editor/NativeHelpers.cpp \
|
||||
--replace '/usr/bin/zenity' '${gnome.zenity}/bin/zenity'
|
||||
--replace '/usr/bin/zenity' '${zenity}/bin/zenity'
|
||||
'';
|
||||
|
||||
cmakeFlags = [ "-DSFIZZ_TESTS=ON" ];
|
||||
|
@ -1,5 +1,5 @@
|
||||
{ lib, fetchFromGitHub, wrapGAppsHook3, gettext
|
||||
, python3Packages, gnome, gtk3, glib, gdk-pixbuf, gsettings-desktop-schemas, gobject-introspection }:
|
||||
, python3Packages, adwaita-icon-theme, gtk3, glib, gdk-pixbuf, gsettings-desktop-schemas, gobject-introspection }:
|
||||
|
||||
let
|
||||
inherit (python3Packages) buildPythonApplication isPy3k dbus-python pygobject3 mpd2 setuptools;
|
||||
@ -24,7 +24,7 @@ in buildPythonApplication rec {
|
||||
|
||||
buildInputs = [
|
||||
glib
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
gsettings-desktop-schemas
|
||||
gtk3
|
||||
gdk-pixbuf
|
||||
|
@ -224,7 +224,7 @@ stdenv.mkDerivation rec {
|
||||
homepage = "https://sonic-pi.net/";
|
||||
description = "Free live coding synth for everyone originally designed to support computing and music lessons within schools";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ Phlogistique kamilchm c0deaddict sohalt lilyinstarlight ];
|
||||
maintainers = with maintainers; [ Phlogistique kamilchm c0deaddict sohalt ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
@ -11,6 +11,7 @@
|
||||
, brasero
|
||||
, libcanberra-gtk3
|
||||
, gnome
|
||||
, adwaita-icon-theme
|
||||
, gst_all_1
|
||||
, libmusicbrainz5
|
||||
, libdiscid
|
||||
@ -42,7 +43,7 @@ stdenv.mkDerivation rec {
|
||||
gtk3
|
||||
brasero
|
||||
libcanberra-gtk3
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
gsettings-desktop-schemas
|
||||
libmusicbrainz5
|
||||
libdiscid
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ fetchurl, lib, stdenv, squashfsTools, xorg, alsa-lib, makeShellWrapper, wrapGAppsHook3, openssl, freetype
|
||||
, glib, pango, cairo, atk, gdk-pixbuf, gtk3, cups, nspr, nss_latest, libpng, libnotify
|
||||
, libgcrypt, systemd, fontconfig, dbus, expat, ffmpeg_4, curlWithGnuTls, zlib, gnome
|
||||
, libgcrypt, systemd, fontconfig, dbus, expat, ffmpeg_4, curlWithGnuTls, zlib, zenity
|
||||
, at-spi2-atk, at-spi2-core, libpulseaudio, libdrm, mesa, libxkbcommon
|
||||
, pname, meta, harfbuzz, libayatana-appindicator, libdbusmenu, libGL
|
||||
# High-DPI support: Spotify's --force-device-scale-factor argument
|
||||
@ -179,7 +179,7 @@ stdenv.mkDerivation {
|
||||
--add-flags "--force-device-scale-factor=${toString deviceScaleFactor}" \
|
||||
''} \
|
||||
--prefix LD_LIBRARY_PATH : "$librarypath" \
|
||||
--prefix PATH : "${gnome.zenity}/bin" \
|
||||
--prefix PATH : "${zenity}/bin" \
|
||||
--add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--enable-features=UseOzonePlatform --ozone-platform=wayland}}"
|
||||
|
||||
runHook postFixup
|
||||
|
@ -18,7 +18,7 @@
|
||||
, libXrender
|
||||
, libXxf86vm
|
||||
, libglvnd
|
||||
, gnome
|
||||
, zenity
|
||||
}:
|
||||
|
||||
let
|
||||
@ -39,7 +39,7 @@ let
|
||||
];
|
||||
|
||||
runBinDeps = [
|
||||
gnome.zenity
|
||||
zenity
|
||||
];
|
||||
in
|
||||
|
||||
@ -101,7 +101,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Next generation modular control surface";
|
||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||
license = licenses.unfree;
|
||||
maintainers = with maintainers; [ lilyinstarlight ];
|
||||
maintainers = with maintainers; [ ];
|
||||
platforms = [ "aarch64-linux" "armv7l-linux" "x86_64-linux" ];
|
||||
mainProgram = "TouchOSC";
|
||||
};
|
||||
|
@ -7,7 +7,7 @@
|
||||
, ghc_filesystem
|
||||
, glew
|
||||
, glfw
|
||||
, gnome
|
||||
, zenity
|
||||
, gtk3-x11
|
||||
, imagemagick
|
||||
, jansson
|
||||
@ -173,7 +173,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
# Fix reference to zenity
|
||||
substituteInPlace dep/osdialog/osdialog_zenity.c \
|
||||
--replace 'zenityBin[] = "zenity"' 'zenityBin[] = "${gnome.zenity}/bin/zenity"'
|
||||
--replace 'zenityBin[] = "zenity"' 'zenityBin[] = "${zenity}/bin/zenity"'
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
@ -191,7 +191,7 @@ stdenv.mkDerivation rec {
|
||||
ghc_filesystem
|
||||
glew
|
||||
glfw
|
||||
gnome.zenity
|
||||
zenity
|
||||
gtk3-x11
|
||||
jansson
|
||||
libarchive
|
||||
|
@ -17,7 +17,7 @@
|
||||
, libxkbcommon
|
||||
, vulkan-loader
|
||||
, wayland
|
||||
, gnome
|
||||
, zenity
|
||||
, libsForQt5
|
||||
}:
|
||||
|
||||
@ -85,7 +85,7 @@ rustPlatform.buildRustPackage rec {
|
||||
in
|
||||
''
|
||||
patchelf --set-rpath "${libPath}" "$out/bin/ludusavi"
|
||||
wrapProgram $out/bin/ludusavi --prefix PATH : ${lib.makeBinPath [ gnome.zenity libsForQt5.kdialog ]}
|
||||
wrapProgram $out/bin/ludusavi --prefix PATH : ${lib.makeBinPath [ zenity libsForQt5.kdialog ]}
|
||||
'';
|
||||
|
||||
|
||||
|
@ -21,7 +21,7 @@ rustPlatform.buildRustPackage rec {
|
||||
description = "CLI tool to check the integrity of a restic repository without unlocking it";
|
||||
homepage = "https://git.nwex.de/networkException/restic-integrity";
|
||||
license = with licenses; [ bsd2 ];
|
||||
maintainers = with maintainers; [ janik ];
|
||||
maintainers = with maintainers; [ ];
|
||||
mainProgram = "restic-integrity";
|
||||
};
|
||||
}
|
||||
|
@ -21,13 +21,13 @@
|
||||
, polkit
|
||||
, accountsservice
|
||||
, gtk-doc
|
||||
, gnome
|
||||
, gobject-introspection
|
||||
, vala
|
||||
, fetchpatch
|
||||
, withQt5 ? false
|
||||
, qtbase
|
||||
, yelp-tools
|
||||
, yelp-xsl
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@ -47,7 +47,7 @@ stdenv.mkDerivation rec {
|
||||
autoconf
|
||||
automake
|
||||
yelp-tools
|
||||
gnome.yelp-xsl
|
||||
yelp-xsl
|
||||
gobject-introspection
|
||||
gtk-doc
|
||||
intltool
|
||||
|
186
pkgs/applications/editors/android-studio-for-platform/common.nix
Normal file
186
pkgs/applications/editors/android-studio-for-platform/common.nix
Normal file
@ -0,0 +1,186 @@
|
||||
{ channel, pname, version, sha256Hash }:
|
||||
|
||||
{ android-tools
|
||||
, bash
|
||||
, buildFHSEnv
|
||||
, coreutils
|
||||
, dpkg
|
||||
, e2fsprogs
|
||||
, fetchurl
|
||||
, findutils
|
||||
, git
|
||||
, gnugrep
|
||||
, gnused
|
||||
, gnutar
|
||||
, gtk2, gnome_vfs, glib, GConf
|
||||
, gzip
|
||||
, fontsConf
|
||||
, fontconfig
|
||||
, freetype
|
||||
, libX11
|
||||
, libXext
|
||||
, libXi
|
||||
, libXrandr
|
||||
, libXrender
|
||||
, libXtst
|
||||
, makeFontsConf
|
||||
, makeWrapper
|
||||
, ncurses5
|
||||
, openssl
|
||||
, ps
|
||||
, python3
|
||||
, lib
|
||||
, stdenv
|
||||
, unzip
|
||||
, usbutils
|
||||
, which
|
||||
, runCommand
|
||||
, xkeyboard_config
|
||||
, zip
|
||||
, zlib
|
||||
, makeDesktopItem
|
||||
, tiling_wm ? false # if we are using a tiling wm, need to set _JAVA_AWT_WM_NONREPARENTING in wrapper
|
||||
}:
|
||||
|
||||
let
|
||||
drvName = "${pname}-${version}";
|
||||
filename = "asfp-${version}-linux.deb";
|
||||
|
||||
androidStudioForPlatform = stdenv.mkDerivation {
|
||||
name = "${drvName}-unwrapped";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://dl.google.com/android/asfp/${filename}";
|
||||
sha256 = sha256Hash;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
dpkg
|
||||
makeWrapper
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
cp -r "./opt/${pname}/" $out
|
||||
wrapProgram $out/bin/studio.sh \
|
||||
--set-default JAVA_HOME "$out/jbr" \
|
||||
--set QT_XKB_CONFIG_ROOT "${xkeyboard_config}/share/X11/xkb" \
|
||||
${lib.optionalString tiling_wm "--set _JAVA_AWT_WM_NONREPARENTING 1"} \
|
||||
--set FONTCONFIG_FILE ${fontsConf} \
|
||||
--prefix PATH : "${lib.makeBinPath [
|
||||
|
||||
# Checked in studio.sh
|
||||
coreutils
|
||||
findutils
|
||||
gnugrep
|
||||
which
|
||||
gnused
|
||||
|
||||
# Used during setup wizard
|
||||
gnutar
|
||||
gzip
|
||||
|
||||
# Runtime stuff
|
||||
git
|
||||
ps
|
||||
usbutils
|
||||
android-tools
|
||||
|
||||
# For Soong sync
|
||||
openssl
|
||||
python3
|
||||
unzip
|
||||
zip
|
||||
e2fsprogs
|
||||
]}" \
|
||||
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
|
||||
# Crash at startup without these
|
||||
fontconfig
|
||||
freetype
|
||||
libXext
|
||||
libXi
|
||||
libXrender
|
||||
libXtst
|
||||
libX11
|
||||
|
||||
# Support multiple monitors
|
||||
libXrandr
|
||||
|
||||
# For GTKLookAndFeel
|
||||
gtk2
|
||||
gnome_vfs
|
||||
glib
|
||||
GConf
|
||||
|
||||
# For Soong sync
|
||||
e2fsprogs
|
||||
]}"
|
||||
'';
|
||||
};
|
||||
|
||||
desktopItem = makeDesktopItem {
|
||||
name = pname;
|
||||
exec = pname;
|
||||
icon = pname;
|
||||
desktopName = "Android Studio for Platform (${channel} channel)";
|
||||
comment = "The official Android IDE for Android platform development";
|
||||
categories = [ "Development" "IDE" ];
|
||||
startupNotify = true;
|
||||
startupWMClass = "jetbrains-studio";
|
||||
};
|
||||
|
||||
# Android Studio for Platform downloads prebuilt binaries as part of the SDK. These tools
|
||||
# (e.g. `mksdcard`) have `/lib/ld-linux.so.2` set as the interpreter. An FHS
|
||||
# environment is used as a work around for that.
|
||||
fhsEnv = buildFHSEnv {
|
||||
name = "${drvName}-fhs-env";
|
||||
multiPkgs = pkgs: [
|
||||
zlib
|
||||
ncurses5
|
||||
ncurses5.dev
|
||||
];
|
||||
profile = ''
|
||||
export ALLOW_NINJA_ENV=true
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib32
|
||||
'';
|
||||
};
|
||||
in runCommand
|
||||
drvName
|
||||
{
|
||||
startScript = ''
|
||||
#!${bash}/bin/bash
|
||||
${fhsEnv}/bin/${drvName}-fhs-env ${androidStudioForPlatform}/bin/studio.sh "$@"
|
||||
'';
|
||||
preferLocalBuild = true;
|
||||
allowSubstitutes = false;
|
||||
passthru = {
|
||||
unwrapped = androidStudioForPlatform;
|
||||
};
|
||||
meta = with lib; {
|
||||
description = "The Official IDE for Android platform development";
|
||||
longDescription = ''
|
||||
Android Studio for Platform (ASfP) is the version of the Android Studio IDE
|
||||
for Android Open Source Project (AOSP) platform developers who build with the Soong build system.
|
||||
'';
|
||||
homepage = "https://developer.android.com/studio/platform.html";
|
||||
license = with licenses; [ asl20 unfree ]; # The code is under Apache-2.0, but:
|
||||
# If one selects Help -> Licenses in Android Studio, the dialog shows the following:
|
||||
# "Android Studio includes proprietary code subject to separate license,
|
||||
# including JetBrains CLion(R) (www.jetbrains.com/clion) and IntelliJ(R)
|
||||
# IDEA Community Edition (www.jetbrains.com/idea)."
|
||||
# Also: For actual development the Android SDK is required and the Google
|
||||
# binaries are also distributed as proprietary software (unlike the
|
||||
# source-code itself).
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with maintainers; [ robbins ];
|
||||
mainProgram = pname;
|
||||
};
|
||||
}
|
||||
''
|
||||
mkdir -p $out/{bin,share/pixmaps}
|
||||
|
||||
echo -n "$startScript" > $out/bin/${pname}
|
||||
chmod +x $out/bin/${pname}
|
||||
|
||||
ln -s ${androidStudioForPlatform}/bin/studio.png $out/share/pixmaps/${pname}.png
|
||||
ln -s ${desktopItem}/share/applications $out/share/applications
|
||||
''
|
@ -0,0 +1,32 @@
|
||||
{ callPackage, makeFontsConf, gnome2, buildFHSEnv, tiling_wm ? false }:
|
||||
|
||||
let
|
||||
mkStudio = opts: callPackage (import ./common.nix opts) {
|
||||
fontsConf = makeFontsConf {
|
||||
fontDirectories = [];
|
||||
};
|
||||
inherit (gnome2) GConf gnome_vfs;
|
||||
inherit buildFHSEnv;
|
||||
inherit tiling_wm;
|
||||
};
|
||||
stableVersion = {
|
||||
version = "2023.2.1.20"; # Android Studio Iguana | 2023.2.1 Beta 2
|
||||
sha256Hash = "sha256-cM/pkSghqLUUvJVF/OVLDOxVBJlJLH8ge1bfZtDUegY=";
|
||||
};
|
||||
canaryVersion = {
|
||||
version = "2023.3.2.1"; # Android Studio Jellyfish | 2023.3.2 Canary 1
|
||||
sha256Hash = "sha256-XOsbMyNentklfEp1k49H3uFeiRNMCV/Seisw9K1ganM=";
|
||||
};
|
||||
in {
|
||||
# Attributes are named by their corresponding release channels
|
||||
|
||||
stable = mkStudio (stableVersion // {
|
||||
channel = "stable";
|
||||
pname = "android-studio-for-platform";
|
||||
});
|
||||
|
||||
canary = mkStudio (canaryVersion // {
|
||||
channel = "canary";
|
||||
pname = "android-studio-for-platform-canary";
|
||||
});
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
, enchant
|
||||
, gucharmap
|
||||
, python3
|
||||
, gnome
|
||||
, adwaita-icon-theme
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@ -22,7 +22,7 @@ stdenv.mkDerivation rec {
|
||||
|
||||
nativeBuildInputs = [ pkg-config wrapGAppsHook3 ];
|
||||
buildInputs = [
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
gtk
|
||||
libxml2
|
||||
enchant
|
||||
|
@ -12,6 +12,7 @@
|
||||
, libgedit-gtksourceview
|
||||
, libgedit-tepl
|
||||
, libgee
|
||||
, adwaita-icon-theme
|
||||
, gnome
|
||||
, glib
|
||||
, pkg-config
|
||||
@ -49,7 +50,7 @@ stdenv.mkDerivation rec {
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
gnome.adwaita-icon-theme
|
||||
adwaita-icon-theme
|
||||
glib
|
||||
gsettings-desktop-schemas
|
||||
gspell
|
||||
|
@ -19,7 +19,7 @@ stdenv.mkDerivation rec {
|
||||
description = "Simple text editor forked from Leafpad using GTK+ 3.x";
|
||||
homepage = "https://github.com/stevenhoneyman/l3afpad";
|
||||
platforms = platforms.linux;
|
||||
maintainers = with maintainers; [ ckie ];
|
||||
maintainers = with maintainers; [ ];
|
||||
license = licenses.gpl2;
|
||||
mainProgram = "l3afpad";
|
||||
};
|
||||
|
@ -1,8 +1,6 @@
|
||||
{ lib, stdenv, callPackage, vimUtils, buildEnv, makeWrapper }:
|
||||
|
||||
let
|
||||
macvim = callPackage ./macvim.nix { inherit stdenv; };
|
||||
|
||||
makeCustomizable = macvim: macvim // {
|
||||
# configure expects the same args as vimUtils.vimrcFile.
|
||||
# This is the same as the value given to neovim.override { configure = … }
|
||||
@ -62,5 +60,4 @@ let
|
||||
override = f: makeCustomizable (macvim.override f);
|
||||
overrideAttrs = f: makeCustomizable (macvim.overrideAttrs f);
|
||||
};
|
||||
in
|
||||
makeCustomizable macvim
|
||||
in { inherit makeCustomizable; }
|
||||
|
@ -6,15 +6,23 @@
|
||||
, gettext
|
||||
, pkg-config
|
||||
, cscope
|
||||
, ruby
|
||||
, ruby_3_2
|
||||
, tcl
|
||||
, perl
|
||||
, perl536
|
||||
, luajit
|
||||
, darwin
|
||||
, libiconv
|
||||
, python3
|
||||
}:
|
||||
|
||||
# Try to match MacVim's documented script interface compatibility
|
||||
let
|
||||
# Perl 5.30 - closest we get is 5.36. 5.38 is currently failing
|
||||
perl = perl536;
|
||||
# Ruby 3.2
|
||||
ruby = ruby_3_2;
|
||||
in
|
||||
|
||||
let
|
||||
# Building requires a few system tools to be in PATH.
|
||||
# Some of these we could patch into the relevant source files (such as xcodebuild and
|
||||
@ -26,16 +34,16 @@ let
|
||||
'';
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "macvim";
|
||||
|
||||
version = "8.2.3455";
|
||||
version = "178";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "macvim-dev";
|
||||
repo = "macvim";
|
||||
rev = "snapshot-172";
|
||||
sha256 = "sha256-LLLQ/V1vyKTuSXzHW3SOlOejZD5AV16NthEdMoTnfko=";
|
||||
rev = "release-${finalAttrs.version}";
|
||||
hash = "sha256-JYh5fyaYuME/Lk67vrf1hYOIcAkEbwtslcnI9KRzHa8=";
|
||||
};
|
||||
|
||||
enableParallelBuilding = true;
|
||||
@ -48,26 +56,26 @@ stdenv.mkDerivation {
|
||||
patches = [ ./macvim.patch ];
|
||||
|
||||
configureFlags = [
|
||||
"--enable-cscope"
|
||||
"--enable-fail-if-missing"
|
||||
"--with-features=huge"
|
||||
"--enable-gui=macvim"
|
||||
"--enable-multibyte"
|
||||
"--enable-nls"
|
||||
"--enable-luainterp=dynamic"
|
||||
"--enable-python3interp=dynamic"
|
||||
"--enable-perlinterp=dynamic"
|
||||
"--enable-rubyinterp=dynamic"
|
||||
"--enable-tclinterp=yes"
|
||||
"--without-local-dir"
|
||||
"--with-luajit"
|
||||
"--with-lua-prefix=${luajit}"
|
||||
"--with-python3-command=${python3}/bin/python3"
|
||||
"--with-ruby-command=${ruby}/bin/ruby"
|
||||
"--with-tclsh=${tcl}/bin/tclsh"
|
||||
"--with-tlib=ncurses"
|
||||
"--with-compiledby=Nix"
|
||||
"--disable-sparkle"
|
||||
"--enable-cscope"
|
||||
"--enable-fail-if-missing"
|
||||
"--with-features=huge"
|
||||
"--enable-gui=macvim"
|
||||
"--enable-multibyte"
|
||||
"--enable-nls"
|
||||
"--enable-luainterp=dynamic"
|
||||
"--enable-python3interp=dynamic"
|
||||
"--enable-perlinterp=dynamic"
|
||||
"--enable-rubyinterp=dynamic"
|
||||
"--enable-tclinterp=yes"
|
||||
"--without-local-dir"
|
||||
"--with-luajit"
|
||||
"--with-lua-prefix=${luajit}"
|
||||
"--with-python3-command=${python3}/bin/python3"
|
||||
"--with-ruby-command=${ruby}/bin/ruby"
|
||||
"--with-tclsh=${tcl}/bin/tclsh"
|
||||
"--with-tlib=ncurses"
|
||||
"--with-compiledby=Nix"
|
||||
"--disable-sparkle"
|
||||
];
|
||||
|
||||
# Remove references to Sparkle.framework from the project.
|
||||
@ -78,37 +86,45 @@ stdenv.mkDerivation {
|
||||
sed -e '/Sparkle\.framework/d' -i src/MacVim/MacVim.xcodeproj/project.pbxproj
|
||||
'';
|
||||
|
||||
# This is unfortunate, but we need to use the same compiler as Xcode,
|
||||
# but Xcode doesn't provide a way to configure the compiler.
|
||||
preConfigure = ''
|
||||
CC=/usr/bin/clang
|
||||
# This is unfortunate, but we need to use the same compiler as Xcode, but Xcode doesn't provide a
|
||||
# way to configure the compiler. We also need to pull in lib/include paths for some of our build
|
||||
# inputs since we don't have cc-wrapper to do that for us.
|
||||
preConfigure =
|
||||
let
|
||||
# ideally we'd recurse, but we don't need that right now
|
||||
inputs = [ ncurses ] ++ perl.propagatedBuildInputs;
|
||||
ldflags = map (drv: "-L${lib.getLib drv}/lib") inputs;
|
||||
cppflags = map (drv: "-isystem ${lib.getDev drv}/include") inputs;
|
||||
in
|
||||
''
|
||||
CC=/usr/bin/clang
|
||||
|
||||
DEV_DIR=$(/usr/bin/xcode-select -print-path)/Platforms/MacOSX.platform/Developer
|
||||
configureFlagsArray+=(
|
||||
--with-developer-dir="$DEV_DIR"
|
||||
LDFLAGS="-L${ncurses}/lib"
|
||||
CPPFLAGS="-isystem ${ncurses.dev}/include"
|
||||
CFLAGS="-Wno-error=implicit-function-declaration"
|
||||
)
|
||||
''
|
||||
# For some reason having LD defined causes PSMTabBarControl to fail at link-time as it
|
||||
# passes arguments to ld that it meant for clang.
|
||||
+ ''
|
||||
unset LD
|
||||
''
|
||||
# When building with nix-daemon, we need to pass -derivedDataPath or else it tries to use
|
||||
# a folder rooted in /var/empty and fails. Unfortunately we can't just pass -derivedDataPath
|
||||
# by itself as this flag requires the use of -scheme or -xctestrun (not sure why), but MacVim
|
||||
# by default just runs `xcodebuild -project src/MacVim/MacVim.xcodeproj`, relying on the default
|
||||
# behavior to build the first target in the project. Experimentally, there seems to be a scheme
|
||||
# called MacVim, so we'll explicitly select that. We also need to specify the configuration too
|
||||
# as the scheme seems to have the wrong default.
|
||||
+ ''
|
||||
configureFlagsArray+=(
|
||||
XCODEFLAGS="-scheme MacVim -derivedDataPath $NIX_BUILD_TOP/derivedData"
|
||||
--with-xcodecfg="Release"
|
||||
)
|
||||
''
|
||||
DEV_DIR=$(/usr/bin/xcode-select -print-path)/Platforms/MacOSX.platform/Developer
|
||||
configureFlagsArray+=(
|
||||
--with-developer-dir="$DEV_DIR"
|
||||
LDFLAGS=${lib.escapeShellArg ldflags}
|
||||
CPPFLAGS=${lib.escapeShellArg cppflags}
|
||||
CFLAGS="-Wno-error=implicit-function-declaration"
|
||||
)
|
||||
''
|
||||
# For some reason having LD defined causes PSMTabBarControl to fail at link-time as it
|
||||
# passes arguments to ld that it meant for clang.
|
||||
+ ''
|
||||
unset LD
|
||||
''
|
||||
# When building with nix-daemon, we need to pass -derivedDataPath or else it tries to use
|
||||
# a folder rooted in /var/empty and fails. Unfortunately we can't just pass -derivedDataPath
|
||||
# by itself as this flag requires the use of -scheme or -xctestrun (not sure why), but MacVim
|
||||
# by default just runs `xcodebuild -project src/MacVim/MacVim.xcodeproj`, relying on the default
|
||||
# behavior to build the first target in the project. Experimentally, there seems to be a scheme
|
||||
# called MacVim, so we'll explicitly select that. We also need to specify the configuration too
|
||||
# as the scheme seems to have the wrong default.
|
||||
+ ''
|
||||
configureFlagsArray+=(
|
||||
XCODEFLAGS="-scheme MacVim -derivedDataPath $NIX_BUILD_TOP/derivedData"
|
||||
--with-xcodecfg="Release"
|
||||
)
|
||||
''
|
||||
;
|
||||
|
||||
# Because we're building with system clang, this means we're building against Xcode's SDK and
|
||||
@ -124,7 +140,7 @@ stdenv.mkDerivation {
|
||||
# Xcode project or pass it as a flag to xcodebuild as well.
|
||||
postConfigure = ''
|
||||
substituteInPlace src/auto/config.mk \
|
||||
--replace "PERL_CFLAGS =" "PERL_CFLAGS = -I${darwin.libutil}/include" \
|
||||
--replace "PERL_CFLAGS${"\t"}=" "PERL_CFLAGS${"\t"}= -I${darwin.libutil}/include" \
|
||||
--replace " -L${stdenv.cc.libc}/lib" "" \
|
||||
--replace " -L${darwin.libobjc}/lib" "" \
|
||||
--replace " -L${darwin.libunwind}/lib" "" \
|
||||
@ -143,17 +159,25 @@ stdenv.mkDerivation {
|
||||
substituteInPlace src/MacVim/vimrc --subst-var-by CSCOPE ${cscope}/bin/cscope
|
||||
'';
|
||||
|
||||
# Note that $out/MacVim.app has a misnamed set of binaries in the Contents/bin folder (the V is
|
||||
# capitalized) and is missing a bunch of them. This is why we're grabbing the version from the
|
||||
# build folder.
|
||||
postInstall = ''
|
||||
mkdir -p $out/Applications
|
||||
cp -r src/MacVim/build/Release/MacVim.app $out/Applications
|
||||
rm -rf $out/MacVim.app
|
||||
|
||||
rm $out/bin/*
|
||||
|
||||
cp src/vimtutor $out/bin
|
||||
for prog in mvim ex vi vim vimdiff view rvim rvimdiff rview; do
|
||||
mkdir -p $out/bin
|
||||
for prog in ex vi {,g,m,r}vi{m,mdiff,ew}; do
|
||||
ln -s $out/Applications/MacVim.app/Contents/bin/mvim $out/bin/$prog
|
||||
done
|
||||
for prog in {,g}vimtutor xxd; do
|
||||
ln -s $out/Applications/MacVim.app/Contents/bin/$prog $out/bin/$prog
|
||||
done
|
||||
ln -s $out/Applications/MacVim.app/Contents/bin/gvimtutor $out/bin/mvimtutor
|
||||
|
||||
mkdir -p $out/share
|
||||
ln -s $out/Applications/MacVim.app/Contents/man $out/share/man
|
||||
|
||||
# Fix rpaths
|
||||
exe="$out/Applications/MacVim.app/Contents/MacOS/Vim"
|
||||
@ -165,7 +189,7 @@ stdenv.mkDerivation {
|
||||
install_name_tool -add_rpath ${ruby}/lib $exe
|
||||
|
||||
# Remove manpages from tools we aren't providing
|
||||
find $out/share/man \( -name eVim.1 -or -name xxd.1 \) -delete
|
||||
find $out/Applications/MacVim.app/Contents/man -name evim.1 -delete
|
||||
'';
|
||||
|
||||
# We rely on the user's Xcode install to build. It may be located in an arbitrary place, and
|
||||
@ -179,10 +203,10 @@ stdenv.mkDerivation {
|
||||
|
||||
meta = with lib; {
|
||||
description = "Vim - the text editor - for macOS";
|
||||
homepage = "https://github.com/macvim-dev/macvim";
|
||||
homepage = "https://macvim.org/";
|
||||
license = licenses.vim;
|
||||
maintainers = with maintainers; [ lilyball ];
|
||||
platforms = platforms.darwin;
|
||||
maintainers = with maintainers; [ ];
|
||||
platforms = platforms.darwin;
|
||||
hydraPlatforms = []; # hydra can't build this as long as we rely on Xcode and sandboxProfile
|
||||
};
|
||||
}
|
||||
})
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user