Merge master into haskell-updates

This commit is contained in:
github-actions[bot] 2024-07-03 00:14:14 +00:00 committed by GitHub
commit da36c43e86
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
700 changed files with 5884 additions and 6082 deletions

11
.github/CODEOWNERS vendored
View File

@ -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

View File

@ -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`.

View File

@ -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`

View File

@ -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

View 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.

View File

@ -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 packages `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 packages `NEWS` file to see what changed.
## Frequently encountered issues {#ssec-gnome-common-issues}

View File

@ -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).

View File

@ -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}

View File

@ -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";

View File

@ -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

View File

@ -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;

View File

@ -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.

View File

@ -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" ];
};
}

View File

@ -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

View File

@ -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" { };
};

View File

@ -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;

View File

@ -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 ];
};

View File

@ -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;

View File

@ -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 ];
};
}

View File

@ -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) {

View File

@ -8,7 +8,7 @@
let
cfg = config.programs.qdmr;
in {
meta.maintainers = [ lib.maintainers.janik ];
meta.maintainers = [ ];
options = {
programs.qdmr = {

View File

@ -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
];
};

View File

@ -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 = {

View File

@ -109,7 +109,7 @@ let
};
in
{
meta.maintainers = with lib.maintainers; [ janik ambroisie ];
meta.maintainers = with lib.maintainers; [ ambroisie ];
options = {
services.woodpecker-agents = {

View File

@ -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 = {

View File

@ -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";
};
};
}

View File

@ -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
];
};

View File

@ -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";
};
}

View File

@ -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 ];
};

View File

@ -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 = {

View File

@ -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"

View File

@ -7,7 +7,7 @@ let
toml = pkgs.formats.toml { };
in
{
meta.maintainers = with maintainers; [ ckie ];
meta.maintainers = with maintainers; [ ];
options.services.rkvm = {
enable = mkOption {

View File

@ -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/ {

View File

@ -105,7 +105,7 @@ let
};
url = mkOption {
type = types.str;
default = "localhost";
default = "";
description = "Url of the datasource.";
};
editable = mkOption {

View File

@ -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;
};
};
};

View File

@ -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)
];

View File

@ -127,7 +127,7 @@ in
{
meta = {
maintainers = teams.freedesktop.members ++ [ lib.maintainers.janik ];
maintainers = teams.freedesktop.members;
};
###### interface

View File

@ -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 = {

View File

@ -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};
'';

View File

@ -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 = [];

View File

@ -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";
};

View File

@ -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;

View File

@ -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 = ''

View File

@ -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 { };
});
};
}

View File

@ -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 = [

View File

@ -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

View File

@ -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`, dont have their extension decoupled under this attribute.
Some packages that include Shell extensions, like `gpaste`, dont have their extension decoupled under this attribute.
You can install them like any other package:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.
'';

View File

@ -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.
'';

View File

@ -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.
'';

View File

@ -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.
'';
};

View File

@ -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 {};

View File

@ -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'

View File

@ -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;

View File

@ -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;

View File

@ -113,7 +113,7 @@ in {
name = "curl-impersonate";
meta = with lib.maintainers; {
maintainers = [ lilyinstarlight ];
maintainers = [ ];
};
nodes = {

View 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."
'';
})

View File

@ -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 = {

View File

@ -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(

View File

@ -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()
'';

View File

@ -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"
)
'';
})

View File

@ -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

View File

@ -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 = ''

View File

@ -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";

View File

@ -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):

View File

@ -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 ]))
]}'
'';

View File

@ -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

View File

@ -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

View File

@ -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; [

View File

@ -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

View File

@ -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

View File

@ -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; [ ];
};
}

View File

@ -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; [ ];
};
}

View File

@ -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; [ ];
};
}

View File

@ -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";
};

View File

@ -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";
};

View File

@ -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 ];

View File

@ -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 ]);

View File

@ -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

View File

@ -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" ];

View File

@ -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

View File

@ -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;
};
}

View File

@ -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

View File

@ -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

View File

@ -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";
};

View File

@ -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

View File

@ -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 ]}
'';

View File

@ -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";
};
}

View File

@ -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

View 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
''

View File

@ -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";
});
}

View File

@ -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

View File

@ -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

View File

@ -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";
};

View File

@ -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; }

View File

@ -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