Merge master into haskell-updates

This commit is contained in:
github-actions[bot]
2024-05-03 00:13:16 +00:00
committed by GitHub
281 changed files with 26016 additions and 16806 deletions
+1 -1
View File
@@ -111,7 +111,7 @@ in pkgs.stdenv.mkDerivation {
${lib-docs}/index.md \
> ./functions/library.md
substitute ./manual.md.in ./manual.md \
--replace '@MANUAL_VERSION@' '${pkgs.lib.version}'
--replace-fail '@MANUAL_VERSION@' '${pkgs.lib.version}'
mkdir -p out/media
+2 -2
View File
@@ -9,14 +9,14 @@ In Nixpkgs, `zig.hook` overrides the default build, check and install phases.
```nix
{ lib
, stdenv
, zig_0_11
, zig
}:
stdenv.mkDerivation {
# . . .
nativeBuildInputs = [
zig_0_11.hook
zig.hook
];
zigBuildFlags = [ "-Dman-pages=true" ];
+60 -1
View File
@@ -53,6 +53,53 @@ rec {
inherit type isGVariant;
intConstructors = [
{
name = "mkInt32";
type = type.int32;
min = -2147483648;
max = 2147483647;
}
{
name = "mkUint32";
type = type.uint32;
min = 0;
max = 4294967295;
}
{
name = "mkInt64";
type = type.int64;
# Nix does not support such large numbers.
min = null;
max = null;
}
{
name = "mkUint64";
type = type.uint64;
min = 0;
# Nix does not support such large numbers.
max = null;
}
{
name = "mkInt16";
type = type.int16;
min = -32768;
max = 32767;
}
{
name = "mkUint16";
type = type.uint16;
min = 0;
max = 65535;
}
{
name = "mkUchar";
type = type.uchar;
min = 0;
max = 255;
}
];
/* Returns the GVariant value that most closely matches the given Nix value.
If no GVariant value can be found unambiguously then error is thrown.
@@ -70,8 +117,20 @@ rec {
mkArray v
else if isGVariant v then
v
else if builtins.isInt v then
let
validConstructors = builtins.filter ({ min, max, ... }: (min == null || min <= v) && (max == null || v <= max)) intConstructors;
in
throw ''
The GVariant type for number ${builtins.toString v} is unclear.
Please wrap the value with one of the following, depending on the value type in GSettings schema:
${lib.concatMapStringsSep "\n" ({ name, type, ...}: "- `lib.gvariant.${name}` for `${type}`") validConstructors}
''
else if builtins.isAttrs v then
throw "Cannot construct GVariant value from an attribute set. If you want to construct a dictionary, you will need to create an array containing items constructed with `lib.gvariant.mkDictionaryEntry`."
else
throw "The GVariant type of ${v} can't be inferred.";
throw "The GVariant type of ${builtins.typeOf v} can't be inferred.";
/* Returns the GVariant array from the given type of the elements and a Nix list.
+5
View File
@@ -632,6 +632,11 @@ in mkLicense lset) ({
url = "https://old.calculate-linux.org/packages/licenses/iASL";
};
icu = {
spdxId = "ICU";
fullName = "ICU";
};
ijg = {
spdxId = "IJG";
fullName = "Independent JPEG Group License";
+63
View File
@@ -429,6 +429,12 @@
githubId = 1517066;
name = "Aiken Cairncross";
};
a-camarillo = {
name = "Anthony Camarillo";
email = "anthony.camarillo.96@gmail.com";
github = "a-camarillo";
githubId = 58638902;
};
aciceri = {
name = "Andrea Ciceri";
email = "andrea.ciceri@autistici.org";
@@ -1448,6 +1454,12 @@
githubId = 5411704;
name = "Manuel Sanchez Pinar";
};
aos = {
email = "n@aos.sh";
github = "aos";
githubId = 25783780;
name = "aos";
};
apeschar = {
email = "albert@peschar.net";
github = "apeschar";
@@ -2937,6 +2949,12 @@
fingerprint = "BF4FCB85C69989B4ED95BF938AE74787A4B7C07E";
}];
};
b-rodrigues = {
email = "bruno@brodrigues.co";
github = "b-rodrigues";
githubId = 2998834;
name = "Bruno Rodrigues";
};
broke = {
email = "broke@in-fucking.space";
github = "broke";
@@ -3012,6 +3030,12 @@
githubId = 37375448;
name = "Buildit";
};
buurro = {
email = "marcoburro98@gmail.com";
github = "buurro";
githubId = 9320677;
name = "Marco Burro";
};
bwc9876 = {
email = "bwc9876@gmail.com";
github = "Bwc9876";
@@ -5792,6 +5816,15 @@
githubId = 4576666;
name = "Eliza Velasquez";
};
eljamm = {
name = "Fedi Jamoussi";
email = "fedi.jamoussi@protonmail.ch";
github = "eljamm";
githubId = 83901271;
keys = [{
fingerprint = "FF59 E027 4EE2 E792 512B BDC8 7630 FDF7 C8FB 1F3F";
}];
};
elkowar = {
email = "thereal.elkowar@gmail.com";
github = "elkowar";
@@ -7567,6 +7600,12 @@
githubId = 76716;
name = "Graham Christensen";
};
grahamnorris = {
email = "oss@grahamjnorris.com";
github = "grahamnorris";
githubId = 66037909;
name = "Graham J. Norris";
};
gravndal = {
email = "gaute.ravndal+nixos@gmail.com";
github = "gravndal";
@@ -7791,6 +7830,12 @@
github = "HannahMR";
githubId = 9088467;
};
hannesgith = {
email = "nix@h-h.win";
github = "hannesgith";
githubId = 33062605;
name = "Hannes Hattenbach";
};
hansjoergschurr = {
email = "commits@schurr.at";
github = "hansjoergschurr";
@@ -15846,6 +15891,13 @@
githubId = 4056630;
name = "Patrick Steinhardt";
};
pkulak = {
name = "Phil Kulak";
email = "phil@kulak.us";
matrix = "@phil:kulak.us";
github = "pkulak";
githubId = 502905;
};
plabadens = {
name = "Pierre Labadens";
email = "labadens.pierre+nixpkgs@gmail.com";
@@ -16512,6 +16564,11 @@
githubId = 35229674;
name = "Armin Rothfuss";
};
r3n3gad3p3arl = {
github = "r3n3gad3p3arl";
githubId = 20760527;
name = "Madelyn";
};
raboof = {
email = "arnout@bzzt.net";
matrix = "@raboof:matrix.org";
@@ -16815,6 +16872,12 @@
githubId = 18155001;
name = "Gabe Dunn";
};
redyf = {
email = "mateusalvespereira7@gmail.com";
github = "redyf";
githubId = 98139059;
name = "Mateus Alves";
};
reedrw = {
email = "reedrw5601@gmail.com";
github = "reedrw";
+2
View File
@@ -854,8 +854,10 @@ with lib.maintainers; {
r = {
members = [
b-rodrigues
bcdarwin
jbedo
kupac
];
scope = "Maintain the R programming language and related packages.";
shortName = "R";
+4 -4
View File
@@ -80,17 +80,17 @@ let
cp -r --no-preserve=all $inputs/* .
substituteInPlace ./manual.md \
--replace '@NIXOS_VERSION@' "${version}"
--replace-fail '@NIXOS_VERSION@' "${version}"
substituteInPlace ./configuration/configuration.md \
--replace \
--replace-fail \
'@MODULE_CHAPTERS@' \
${escapeShellArg (concatMapStringsSep "\n" (p: "${p.value}") config.meta.doc)}
substituteInPlace ./nixos-options.md \
--replace \
--replace-fail \
'@NIXOS_OPTIONS_JSON@' \
${optionsDoc.optionsJSON}/${common.outputPath}/options.json
substituteInPlace ./development/writing-nixos-tests.section.md \
--replace \
--replace-fail \
'@NIXOS_TEST_OPTIONS_JSON@' \
${testOptionsDoc.optionsJSON}/${common.outputPath}/options.json
sed -e '/@PYTHON_MACHINE_METHODS@/ {' -e 'r ${testDriverMachineDocstrings}/machine-methods.md' -e 'd' -e '}' \
@@ -92,6 +92,8 @@ Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for Pi
- [PhotonVision](https://photonvision.org/), a free, fast, and easy-to-use computer vision solution for the FIRST® Robotics Competition.
- [clatd](https://github.com/toreanderson/clatd), a a CLAT / SIIT-DC Edge Relay implementation for Linux.
- [pyLoad](https://pyload.net/), a FOSS download manager written in Python. Available as [services.pyload](#opt-services.pyload.enable)
- [maubot](https://github.com/maubot/maubot), a plugin-based Matrix bot framework. Available as [services.maubot](#opt-services.maubot.enable).
@@ -131,6 +133,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
- [mautrix-meta](https://github.com/mautrix/meta), a Matrix <-> Facebook and Matrix <-> Instagram hybrid puppeting/relaybot bridge. Available as services.mautrix-meta
- [Jottacloud Command-line Tool](https://docs.jottacloud.com/en/articles/1436834-jottacloud-command-line-tool), a CLI for the [Jottacloud](https://jottacloud.com/) cloud storage provider. Available as [user.services.jotta-cli](#opt-user.services.jotta-cli.enable).
- [transfer-sh](https://github.com/dutchcoders/transfer.sh), a tool that supports easy and fast file sharing from the command-line. Available as [services.transfer-sh](#opt-services.transfer-sh.enable).
- [FCast Receiver](https://fcast.org), an open-source alternative to Chromecast and AirPlay. Available as [programs.fcast-receiver](#opt-programs.fcast-receiver.enable).
@@ -398,6 +402,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
- `services.zope2` has been removed as `zope2` is unmaintained and was relying on Python2.
- `services.oauth2_proxy` was renamed to `services.oauth2-proxy`. Also the corresponding service, user and group were renamed.
- `services.avahi.nssmdns` got split into `services.avahi.nssmdns4` and `services.avahi.nssmdns6` which enable the mDNS NSS switch for IPv4 and IPv6 respectively.
Since most mDNS responders only register IPv4 addresses, most users want to keep the IPv6 support disabled to avoid long timeouts.
+4 -2
View File
@@ -946,6 +946,7 @@
./services/networking/charybdis.nix
./services/networking/chisel-server.nix
./services/networking/cjdns.nix
./services/networking/clatd.nix
./services/networking/cloudflare-dyndns.nix
./services/networking/cloudflared.nix
./services/networking/cntlm.nix
@@ -1029,6 +1030,7 @@
./services/networking/jigasi.nix
./services/networking/jitsi-videobridge.nix
./services/networking/jool.nix
./services/networking/jotta-cli.nix
./services/networking/kea.nix
./services/networking/keepalived/default.nix
./services/networking/keybase.nix
@@ -1256,8 +1258,8 @@
./services/security/kanidm.nix
./services/security/munge.nix
./services/security/nginx-sso.nix
./services/security/oauth2_proxy.nix
./services/security/oauth2_proxy_nginx.nix
./services/security/oauth2-proxy.nix
./services/security/oauth2-proxy-nginx.nix
./services/security/opensnitch.nix
./services/security/pass-secret-service.nix
./services/security/physlock.nix
+3 -12
View File
@@ -2,28 +2,19 @@
{ config, pkgs, lib, ... }:
with lib;
let cfg = config.programs.evince;
in {
# Added 2019-08-09
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "evince" "enable" ]
[ "programs" "evince" "enable" ])
];
###### interface
options = {
programs.evince = {
enable = mkEnableOption "Evince, the GNOME document viewer";
enable = lib.mkEnableOption "Evince, the GNOME document viewer";
package = mkPackageOption pkgs "evince" { };
package = lib.mkPackageOption pkgs "evince" { };
};
@@ -32,7 +23,7 @@ in {
###### implementation
config = mkIf config.programs.evince.enable {
config = lib.mkIf config.programs.evince.enable {
environment.systemPackages = [ cfg.package ];
+3 -12
View File
@@ -2,28 +2,19 @@
{ config, pkgs, lib, ... }:
with lib;
let cfg = config.programs.file-roller;
in {
# Added 2019-08-09
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "file-roller" "enable" ]
[ "programs" "file-roller" "enable" ])
];
###### interface
options = {
programs.file-roller = {
enable = mkEnableOption "File Roller, an archive manager for GNOME";
enable = lib.mkEnableOption "File Roller, an archive manager for GNOME";
package = mkPackageOption pkgs [ "gnome" "file-roller" ] { };
package = lib.mkPackageOption pkgs [ "gnome" "file-roller" ] { };
};
@@ -32,7 +23,7 @@ in {
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
+4 -13
View File
@@ -2,29 +2,20 @@
{ config, pkgs, lib, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2019-08-09
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-disks" "enable" ]
[ "programs" "gnome-disks" "enable" ])
];
###### interface
options = {
programs.gnome-disks = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable GNOME Disks daemon, a program designed to
@@ -39,7 +30,7 @@ with lib;
###### implementation
config = mkIf config.programs.gnome-disks.enable {
config = lib.mkIf config.programs.gnome-disks.enable {
environment.systemPackages = [ pkgs.gnome.gnome-disk-utility ];
+3 -12
View File
@@ -2,8 +2,6 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.programs.gnome-terminal;
@@ -13,21 +11,14 @@ in
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2019-08-19
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-terminal-server" "enable" ]
[ "programs" "gnome-terminal" "enable" ])
];
options = {
programs.gnome-terminal.enable = mkEnableOption "GNOME Terminal";
programs.gnome-terminal.enable = lib.mkEnableOption "GNOME Terminal";
};
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.gnome.gnome-terminal ];
services.dbus.packages = [ pkgs.gnome.gnome-terminal ];
systemd.packages = [ pkgs.gnome.gnome-terminal ];
+3 -12
View File
@@ -1,22 +1,13 @@
# GPaste.
{ config, lib, pkgs, ... }:
with lib;
{
# Added 2019-08-09
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gpaste" "enable" ]
[ "programs" "gpaste" "enable" ])
];
###### interface
options = {
programs.gpaste = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable GPaste, a clipboard manager.
@@ -26,7 +17,7 @@ with lib;
};
###### implementation
config = mkIf config.programs.gpaste.enable {
config = lib.mkIf config.programs.gpaste.enable {
environment.systemPackages = [ pkgs.gnome.gpaste ];
services.dbus.packages = [ pkgs.gnome.gpaste ];
systemd.packages = [ pkgs.gnome.gpaste ];
+3 -13
View File
@@ -2,25 +2,15 @@
{ config, pkgs, lib, ... }:
with lib;
{
# Added 2019-08-27
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "seahorse" "enable" ]
[ "programs" "seahorse" "enable" ])
];
###### interface
options = {
programs.seahorse = {
enable = mkEnableOption "Seahorse, a GNOME application for managing encryption keys and passwords in the GNOME Keyring";
enable = lib.mkEnableOption "Seahorse, a GNOME application for managing encryption keys and passwords in the GNOME Keyring";
};
@@ -29,9 +19,9 @@ with lib;
###### implementation
config = mkIf config.programs.seahorse.enable {
config = lib.mkIf config.programs.seahorse.enable {
programs.ssh.askPassword = mkDefault "${pkgs.gnome.seahorse}/libexec/seahorse/ssh-askpass";
programs.ssh.askPassword = lib.mkDefault "${pkgs.gnome.seahorse}/libexec/seahorse/ssh-askpass";
environment.systemPackages = [
pkgs.gnome.seahorse
@@ -315,6 +315,14 @@ in
'';
};
mailErrorSummaryTo = mkOption {
type = singleLineStr;
default = "";
description = ''
Email address to send a summary to if "send task(s) failed".
'';
};
noDestroy = mkOption {
type = bool;
default = false;
@@ -455,6 +463,8 @@ in
"--loglevel=${cfg.logLevel}"
(optionalString cfg.noDestroy "--nodestroy")
(optionalString cfg.autoCreation "--autoCreation")
(optionalString (cfg.mailErrorSummaryTo != "")
"--mailErrorSummaryTo=${cfg.mailErrorSummaryTo}")
(optionalString (enabledFeatures != [])
"--features=${concatStringsSep "," enabledFeatures}")
]; in "${pkgs.znapzend}/bin/znapzend ${args}";
@@ -2,30 +2,19 @@
{ config, lib, pkgs, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
###### interface
# Added 2021-05-07
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "at-spi2-core" "enable" ]
[ "services" "gnome" "at-spi2-core" "enable" ]
)
];
options = {
services.gnome.at-spi2-core = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable at-spi2-core, a service for the Assistive Technologies
@@ -43,14 +32,14 @@ with lib;
###### implementation
config = mkMerge [
(mkIf config.services.gnome.at-spi2-core.enable {
config = lib.mkMerge [
(lib.mkIf config.services.gnome.at-spi2-core.enable {
environment.systemPackages = [ pkgs.at-spi2-core ];
services.dbus.packages = [ pkgs.at-spi2-core ];
systemd.packages = [ pkgs.at-spi2-core ];
})
(mkIf (!config.services.gnome.at-spi2-core.enable) {
(lib.mkIf (!config.services.gnome.at-spi2-core.enable) {
environment.sessionVariables = {
NO_AT_BRIDGE = "1";
GTK_A11Y = "none";
@@ -2,44 +2,30 @@
{ config, lib, pkgs, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2021-05-07
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "evolution-data-server" "enable" ]
[ "services" "gnome" "evolution-data-server" "enable" ]
)
(mkRenamedOptionModule
[ "services" "gnome3" "evolution-data-server" "plugins" ]
[ "services" "gnome" "evolution-data-server" "plugins" ]
)
];
###### interface
options = {
services.gnome.evolution-data-server = {
enable = mkEnableOption "Evolution Data Server, a collection of services for storing addressbooks and calendars";
plugins = mkOption {
type = types.listOf types.package;
enable = lib.mkEnableOption "Evolution Data Server, a collection of services for storing addressbooks and calendars";
plugins = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [ ];
description = "Plugins for Evolution Data Server.";
};
};
programs.evolution = {
enable = mkEnableOption "Evolution, a Personal information management application that provides integrated mail, calendaring and address book functionality";
plugins = mkOption {
type = types.listOf types.package;
enable = lib.mkEnableOption "Evolution, a Personal information management application that provides integrated mail, calendaring and address book functionality";
plugins = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [ ];
example = literalExpression "[ pkgs.evolution-ews ]";
example = lib.literalExpression "[ pkgs.evolution-ews ]";
description = "Plugins for Evolution.";
};
@@ -52,15 +38,15 @@ with lib;
let
bundle = pkgs.evolutionWithPlugins.override { inherit (config.services.gnome.evolution-data-server) plugins; };
in
mkMerge [
(mkIf config.services.gnome.evolution-data-server.enable {
lib.mkMerge [
(lib.mkIf config.services.gnome.evolution-data-server.enable {
environment.systemPackages = [ bundle ];
services.dbus.packages = [ bundle ];
systemd.packages = [ bundle ];
})
(mkIf config.programs.evolution.enable {
(lib.mkIf config.programs.evolution.enable {
services.gnome.evolution-data-server = {
enable = true;
plugins = [ pkgs.evolution ] ++ config.programs.evolution.plugins;
@@ -2,29 +2,19 @@
{ config, pkgs, lib, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2021-05-07
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "glib-networking" "enable" ]
[ "services" "gnome" "glib-networking" "enable" ]
)
];
###### interface
options = {
services.gnome.glib-networking = {
enable = mkEnableOption "network extensions for GLib";
enable = lib.mkEnableOption "network extensions for GLib";
};
@@ -32,7 +22,7 @@ with lib;
###### implementation
config = mkIf config.services.gnome.glib-networking.enable {
config = lib.mkIf config.services.gnome.glib-networking.enable {
services.dbus.packages = [ pkgs.glib-networking ];
@@ -9,19 +9,6 @@ in
maintainers = teams.gnome.members;
};
imports = [
# Added 2021-05-07
(mkRenamedOptionModule
[ "services" "gnome3" "chrome-gnome-shell" "enable" ]
[ "services" "gnome" "gnome-browser-connector" "enable" ]
)
# Added 2022-07-25
(mkRenamedOptionModule
[ "services" "gnome" "chrome-gnome-shell" "enable" ]
[ "services" "gnome" "gnome-browser-connector" "enable" ]
)
];
options = {
services.gnome.gnome-browser-connector.enable = mkEnableOption ''
native host connector for the GNOME Shell browser extension, a DBus service
@@ -2,8 +2,6 @@
{ config, pkgs, lib, ... }:
with lib;
let
# GNOME initial setup's run is conditioned on whether
@@ -45,24 +43,16 @@ in
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2021-05-07
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-initial-setup" "enable" ]
[ "services" "gnome" "gnome-initial-setup" "enable" ]
)
];
###### interface
options = {
services.gnome.gnome-initial-setup = {
enable = mkEnableOption "GNOME Initial Setup, a Simple, easy, and safe way to prepare a new system";
enable = lib.mkEnableOption "GNOME Initial Setup, a Simple, easy, and safe way to prepare a new system";
};
@@ -71,12 +61,12 @@ in
###### implementation
config = mkIf config.services.gnome.gnome-initial-setup.enable {
config = lib.mkIf config.services.gnome.gnome-initial-setup.enable {
environment.systemPackages = [
pkgs.gnome.gnome-initial-setup
]
++ optional (versionOlder config.system.stateVersion "20.03") createGisStampFilesAutostart
++ lib.optional (lib.versionOlder config.system.stateVersion "20.03") createGisStampFilesAutostart
;
systemd.packages = [
@@ -2,30 +2,20 @@
{ config, pkgs, lib, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2021-05-07
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-keyring" "enable" ]
[ "services" "gnome" "gnome-keyring" "enable" ]
)
];
###### interface
options = {
services.gnome.gnome-keyring = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable GNOME Keyring daemon, a service designed to
@@ -41,7 +31,7 @@ with lib;
###### implementation
config = mkIf config.services.gnome.gnome-keyring.enable {
config = lib.mkIf config.services.gnome.gnome-keyring.enable {
environment.systemPackages = [ pkgs.gnome.gnome-keyring ];
@@ -2,30 +2,20 @@
{ config, pkgs, lib, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2021-05-07
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-online-accounts" "enable" ]
[ "services" "gnome" "gnome-online-accounts" "enable" ]
)
];
###### interface
options = {
services.gnome.gnome-online-accounts = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable GNOME Online Accounts daemon, a service that provides
@@ -40,7 +30,7 @@ with lib;
###### implementation
config = mkIf config.services.gnome.gnome-online-accounts.enable {
config = lib.mkIf config.services.gnome.gnome-online-accounts.enable {
environment.systemPackages = [ pkgs.gnome-online-accounts ];
@@ -2,30 +2,20 @@
{ config, pkgs, lib, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2021-05-07
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-online-miners" "enable" ]
[ "services" "gnome" "gnome-online-miners" "enable" ]
)
];
###### interface
options = {
services.gnome.gnome-online-miners = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable GNOME Online Miners, a service that
@@ -40,7 +30,7 @@ with lib;
###### implementation
config = mkIf config.services.gnome.gnome-online-miners.enable {
config = lib.mkIf config.services.gnome.gnome-online-miners.enable {
environment.systemPackages = [ pkgs.gnome.gnome-online-miners ];
@@ -1,30 +1,20 @@
# Remote desktop daemon using Pipewire.
{ config, lib, pkgs, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2021-05-07
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-remote-desktop" "enable" ]
[ "services" "gnome" "gnome-remote-desktop" "enable" ]
)
];
###### interface
options = {
services.gnome.gnome-remote-desktop = {
enable = mkEnableOption "Remote Desktop support using Pipewire";
enable = lib.mkEnableOption "Remote Desktop support using Pipewire";
};
};
###### implementation
config = mkIf config.services.gnome.gnome-remote-desktop.enable {
config = lib.mkIf config.services.gnome.gnome-remote-desktop.enable {
services.pipewire.enable = true;
systemd.packages = [ pkgs.gnome.gnome-remote-desktop ];
@@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.gnome.gnome-settings-daemon;
@@ -13,28 +11,16 @@ in
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
imports = [
(mkRemovedOptionModule
["services" "gnome3" "gnome-settings-daemon" "package"]
"")
# Added 2021-05-07
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-settings-daemon" "enable" ]
[ "services" "gnome" "gnome-settings-daemon" "enable" ]
)
];
###### interface
options = {
services.gnome.gnome-settings-daemon = {
enable = mkEnableOption "GNOME Settings Daemon";
enable = lib.mkEnableOption "GNOME Settings Daemon";
};
@@ -43,7 +29,7 @@ in
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [
pkgs.gnome.gnome-settings-daemon
@@ -2,29 +2,19 @@
{ config, pkgs, lib, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
imports = [
# Added 2021-05-07
(mkRenamedOptionModule
[ "services" "gnome3" "gnome-user-share" "enable" ]
[ "services" "gnome" "gnome-user-share" "enable" ]
)
];
###### interface
options = {
services.gnome.gnome-user-share = {
enable = mkEnableOption "GNOME User Share, a user-level file sharing service for GNOME";
enable = lib.mkEnableOption "GNOME User Share, a user-level file sharing service for GNOME";
};
@@ -33,7 +23,7 @@ with lib;
###### implementation
config = mkIf config.services.gnome.gnome-user-share.enable {
config = lib.mkIf config.services.gnome.gnome-user-share.enable {
environment.systemPackages = [
pkgs.gnome.gnome-user-share
@@ -1,38 +1,28 @@
# rygel service.
{ config, lib, pkgs, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
imports = [
# Added 2021-05-07
(mkRenamedOptionModule
[ "services" "gnome3" "rygel" "enable" ]
[ "services" "gnome" "rygel" "enable" ]
)
];
###### interface
options = {
services.gnome.rygel = {
enable = mkOption {
enable = lib.mkOption {
default = false;
description = ''
Whether to enable Rygel UPnP Mediaserver.
You will need to also allow UPnP connections in firewall, see the following [comment](https://github.com/NixOS/nixpkgs/pull/45045#issuecomment-416030795).
'';
type = types.bool;
type = lib.types.bool;
};
};
};
###### implementation
config = mkIf config.services.gnome.rygel.enable {
config = lib.mkIf config.services.gnome.rygel.enable {
environment.systemPackages = [ pkgs.gnome.rygel ];
services.dbus.packages = [ pkgs.gnome.rygel ];
@@ -2,30 +2,20 @@
{ config, lib, pkgs, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
imports = [
# Added 2021-05-07
(mkRenamedOptionModule
[ "services" "gnome3" "sushi" "enable" ]
[ "services" "gnome" "sushi" "enable" ]
)
];
###### interface
options = {
services.gnome.sushi = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable Sushi, a quick previewer for nautilus.
@@ -39,7 +29,7 @@ with lib;
###### implementation
config = mkIf config.services.gnome.sushi.enable {
config = lib.mkIf config.services.gnome.sushi.enable {
environment.systemPackages = [ pkgs.gnome.sushi ];
@@ -2,30 +2,20 @@
{ config, pkgs, lib, ... }:
with lib;
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
imports = [
# Added 2021-05-07
(mkRenamedOptionModule
[ "services" "gnome3" "tracker-miners" "enable" ]
[ "services" "gnome" "tracker-miners" "enable" ]
)
];
###### interface
options = {
services.gnome.tracker-miners = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable Tracker miners, indexing services for Tracker
@@ -39,7 +29,7 @@ with lib;
###### implementation
config = mkIf config.services.gnome.tracker-miners.enable {
config = lib.mkIf config.services.gnome.tracker-miners.enable {
environment.systemPackages = [ pkgs.tracker-miners ];
@@ -2,33 +2,23 @@
{ config, pkgs, lib, ... }:
with lib;
let
cfg = config.services.gnome.tracker;
in
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
imports = [
# Added 2021-05-07
(mkRenamedOptionModule
[ "services" "gnome3" "tracker" "enable" ]
[ "services" "gnome" "tracker" "enable" ]
)
];
###### interface
options = {
services.gnome.tracker = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to enable Tracker services, a search engine,
@@ -36,8 +26,8 @@ in
'';
};
subcommandPackages = mkOption {
type = types.listOf types.package;
subcommandPackages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [ ];
internal = true;
description = ''
@@ -52,7 +42,7 @@ in
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ pkgs.tracker ];
+4 -13
View File
@@ -2,8 +2,6 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.gvfs;
@@ -13,26 +11,19 @@ in
{
meta = {
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
# Added 2019-08-19
imports = [
(mkRenamedOptionModule
[ "services" "gnome3" "gvfs" "enable" ]
[ "services" "gvfs" "enable" ])
];
###### interface
options = {
services.gvfs = {
enable = mkEnableOption "GVfs, a userspace virtual filesystem";
enable = lib.mkEnableOption "GVfs, a userspace virtual filesystem";
# gvfs can be built with multiple configurations
package = mkPackageOption pkgs [ "gnome" "gvfs" ] { };
package = lib.mkPackageOption pkgs [ "gnome" "gvfs" ] { };
};
@@ -41,7 +32,7 @@ in
###### implementation
config = mkIf cfg.enable {
config = lib.mkIf cfg.enable {
environment.systemPackages = [ cfg.package ];
@@ -29,12 +29,6 @@ let
fi
'') cfg.sessionPackages}
'';
dmDefault = config.services.xserver.desktopManager.default;
# fallback default for cases when only default wm is set
dmFallbackDefault = if dmDefault != null then dmDefault else "none";
wmDefault = config.services.xserver.windowManager.default;
defaultSessionFromLegacyOptions = dmFallbackDefault + lib.optionalString (wmDefault != null && wmDefault != "none") "+${wmDefault}";
in
{
options = {
@@ -125,14 +119,7 @@ in
${lib.concatStringsSep "\n " cfg.displayManager.sessionData.sessionNames}
'';
};
default =
if dmDefault != null || wmDefault != null then
defaultSessionFromLegacyOptions
else
null;
defaultText = lib.literalMD ''
Taken from display manager settings or window manager settings, if either is set.
'';
default = null;
example = "gnome";
description = ''
Graphical session to pre-select in the session chooser (only effective for GDM, LightDM and SDDM).
@@ -192,20 +179,6 @@ in
}
];
warnings =
lib.mkIf (dmDefault != null || wmDefault != null) [
''
The following options are deprecated:
${lib.concatStringsSep "\n " (map ({c, t}: t) (lib.filter ({c, t}: c != null) [
{ c = dmDefault; t = "- services.xserver.desktopManager.default"; }
{ c = wmDefault; t = "- services.xserver.windowManager.default"; }
]))}
Please use
services.displayManager.defaultSession = "${defaultSessionFromLegacyOptions}";
instead.
''
];
# Make xsessions and wayland sessions available in XDG_DATA_DIRS
# as some programs have behavior that depends on them being present
environment.sessionVariables.XDG_DATA_DIRS = lib.mkIf (cfg.sessionPackages != [ ]) [
+31 -15
View File
@@ -18,6 +18,8 @@ let
gitalySocket = "${cfg.statePath}/tmp/sockets/gitaly.socket";
pathUrlQuote = url: replaceStrings ["/"] ["%2F"] url;
gitlabVersionAtLeast = version: lib.versionAtLeast (lib.getVersion cfg.packages.gitlab) version;
databaseConfig = let
val = {
adapter = "postgresql";
@@ -27,10 +29,16 @@ let
encoding = "utf8";
pool = cfg.databasePool;
} // cfg.extraDatabaseConfig;
in if lib.versionAtLeast (lib.getVersion cfg.packages.gitlab) "15.0" then {
production.main = val;
} else {
production = val;
in {
production = (
if (gitlabVersionAtLeast "15.0")
then { main = val; }
else val
) // lib.optionalAttrs (gitlabVersionAtLeast "15.9") {
ci = val // {
database_tasks = false;
};
};
};
# We only want to create a database if we're actually going to connect to it.
@@ -1168,7 +1176,7 @@ in {
set -eu
PSQL() {
psql --port=${toString pgsql.port} "$@"
psql --port=${toString pgsql.settings.port} "$@"
}
PSQL -tAc "SELECT 1 FROM pg_database WHERE datname = '${cfg.databaseName}'" | grep -q 1 || PSQL -tAc 'CREATE DATABASE "${cfg.databaseName}" OWNER "${cfg.databaseUsername}"'
@@ -1348,7 +1356,7 @@ in {
rm -f '${cfg.statePath}/config/database.yml'
${if cfg.databasePasswordFile != null then ''
${lib.optionalString (cfg.databasePasswordFile != null) ''
db_password="$(<'${cfg.databasePasswordFile}')"
export db_password
@@ -1356,16 +1364,24 @@ in {
>&2 echo "Database password was an empty string!"
exit 1
fi
''}
jq <${pkgs.writeText "database.yml" (builtins.toJSON databaseConfig)} \
'.${if lib.versionAtLeast (lib.getVersion cfg.packages.gitlab) "15.0" then "production.main" else "production"}.password = $ENV.db_password' \
>'${cfg.statePath}/config/database.yml'
''
else ''
jq <${pkgs.writeText "database.yml" (builtins.toJSON databaseConfig)} \
>'${cfg.statePath}/config/database.yml'
''
}
# GitLab expects the `production.main` section to be the first entry in the file.
jq <${pkgs.writeText "database.yml" (builtins.toJSON databaseConfig)} '{
production: [
${lib.optionalString (cfg.databasePasswordFile != null) (
builtins.concatStringsSep "\n " (
[ ".production${lib.optionalString (gitlabVersionAtLeast "15.0") ".main"}.password = $ENV.db_password" ]
++ lib.optional (gitlabVersionAtLeast "15.9") "| .production.ci.password = $ENV.db_password"
++ [ "|" ]
)
)} .production
| to_entries[]
]
| sort_by(.key)
| reverse
| from_entries
}' >'${cfg.statePath}/config/database.yml'
${utils.genJqSecretsReplacementSnippet
gitlabConfig
@@ -301,7 +301,7 @@ in
description = ''
The addresses to send outgoing mail to.
'';
apply = x: if x == [] then null else lib.concatStringsSep "," x;
apply = x: if x == [] || x == null then null else lib.concatStringsSep "," x;
};
};
@@ -438,7 +438,7 @@ in
];
dashboards.settings.providers = lib.mkIf cfg.provision.grafana.dashboard [{
name = "parsedmarc";
options.path = "${pkgs.python3Packages.parsedmarc.dashboard}";
options.path = "${pkgs.parsedmarc.dashboard}";
}];
};
};
@@ -446,7 +446,7 @@ in
services.parsedmarc.settings = lib.mkMerge [
(lib.mkIf cfg.provision.elasticsearch {
elasticsearch = {
hosts = [ "localhost:9200" ];
hosts = [ "http://localhost:9200" ];
ssl = false;
};
})
@@ -530,7 +530,7 @@ in
MemoryDenyWriteExecute = true;
LockPersonality = true;
SystemCallArchitectures = "native";
ExecStart = "${pkgs.python3Packages.parsedmarc}/bin/parsedmarc -c /run/parsedmarc/parsedmarc.ini";
ExecStart = "${lib.getExe pkgs.parsedmarc} -c /run/parsedmarc/parsedmarc.ini";
};
};
@@ -0,0 +1,82 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.clatd;
settingsFormat = pkgs.formats.keyValue {};
configFile = settingsFormat.generate "clatd.conf" cfg.settings;
in
{
options = {
services.clatd = {
enable = mkEnableOption "clatd";
package = mkPackageOption pkgs "clatd" { };
settings = mkOption {
type = types.submodule ({ name, ... }: {
freeformType = settingsFormat.type;
});
default = { };
example = literalExpression ''
{
plat-prefix = "64:ff9b::/96";
}
'';
description = ''
Configuration of clatd. See [clatd Documentation](https://github.com/toreanderson/clatd/blob/master/README.pod#configuration).
'';
};
};
};
config = mkIf cfg.enable {
systemd.services.clatd = {
description = "464XLAT CLAT daemon";
documentation = [ "man:clatd(8)" ];
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
startLimitIntervalSec = 0;
serviceConfig = {
ExecStart = "${cfg.package}/bin/clatd -c ${configFile}";
startLimitIntervalSec = 0;
# Hardening
CapabilityBoundingSet = [
"CAP_NET_ADMIN"
];
LockPersonality = true;
MemoryDenyWriteExecute = true;
NoNewPrivileges = true;
PrivateTmp = true;
ProtectClock = true;
ProtectControlGroups = true;
ProtectHome = true;
ProtectHostname = true;
ProtectKernelLogs = true;
ProtectKernelModules = true;
ProtectProc = "invisible";
ProtectSystem = true;
RestrictAddressFamilies = [
"AF_INET"
"AF_INET6"
"AF_NETLINK"
];
RestrictNamespaces = true;
RestrictRealtime = true;
RestrictSUIDSGID = true;
SystemCallArchitectures = "native";
SystemCallFilter = [
"@network-io"
"@system-service"
"~@privileged"
"~@resources"
];
};
};
};
}
@@ -0,0 +1,27 @@
# Jottacloud Command-line Tool {#module-services-jotta-cli}
The [Jottacloud Command-line Tool](https://docs.jottacloud.com/en/articles/1436834-jottacloud-command-line-tool) is a headless [Jottacloud](https://jottacloud.com) client.
## Quick Start {#module-services-jotta-cli-quick-start}
```nix
{
user.services.jotta-cli.enable = true;
}
```
This adds `jotta-cli` to `environment.systemPackages` and starts a user service that runs `jottad` with the default options.
## Example Configuration {#module-services-jotta-cli-example-configuration}
```nix
user.services.jotta-cli = {
enable = true;
options = [ "slow" ];
package = pkgs.jotta-cli;
};
```
This uses `jotta-cli` and `jottad` from the `pkgs.jotta-cli` package and starts `jottad` in low memory mode.
`jottad` is also added to `environment.systemPackages`, so `jottad --help` can be used to explore options.
@@ -0,0 +1,43 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.user.services.jotta-cli;
in {
options = {
user.services.jotta-cli = {
enable = mkEnableOption "Jottacloud Command-line Tool";
options = mkOption {
default = [ "stdoutlog" "datadir" "%h/.jottad/" ];
example = [ ];
type = with types; listOf str;
description = "Command-line options passed to jottad.";
};
package = lib.mkPackageOption pkgs "jotta-cli" { };
};
};
config = mkIf cfg.enable {
systemd.user.services.jottad = {
description = "Jottacloud Command-line Tool daemon";
serviceConfig = {
Type = "notify";
EnvironmentFile = "-%h/.config/jotta-cli/jotta-cli.env";
ExecStart = "${lib.getExe' cfg.package "jottad"} ${concatStringsSep " " cfg.options}";
Restart = "on-failure";
};
wantedBy = [ "default.target" ];
wants = [ "network-online.target" ];
after = [ "network-online.target" ];
};
environment.systemPackages = [ pkgs.jotta-cli ];
};
meta.maintainers = with lib.maintainers; [ evenbrenden ];
meta.doc = ./jotta-cli.md;
}
@@ -51,7 +51,7 @@ in
package = mkPackageOption pkgs "trust-dns" {
extraDescription = ''
::: {.note}
The package must provide `meta.mainProgram` which names the server binayr; any other utilities (client, resolver) are not needed.
The package must provide `meta.mainProgram` which names the server binary; any other utilities (client, resolver) are not needed.
:::
'';
};
@@ -86,7 +86,7 @@ in
type = types.listOf types.str;
default = [ "0.0.0.0" ];
description = ''
List of ipv4 addresses on which to listen for DNS queries.
List of ipv4 addresses on which to listen for DNS queries.
'';
};
listen_addrs_ipv6 = mkOption {
@@ -114,7 +114,7 @@ in
};
zones = mkOption {
description = "List of zones to serve.";
default = {};
default = [];
type = types.listOf (types.coercedTo types.str (zone: { inherit zone; }) zoneType);
};
};
@@ -1,56 +1,55 @@
{ config, lib, ... }:
with lib;
let
cfg = config.services.oauth2_proxy.nginx;
cfg = config.services.oauth2-proxy.nginx;
in
{
options.services.oauth2_proxy.nginx = {
proxy = mkOption {
type = types.str;
default = config.services.oauth2_proxy.httpAddress;
defaultText = literalExpression "config.services.oauth2_proxy.httpAddress";
options.services.oauth2-proxy.nginx = {
proxy = lib.mkOption {
type = lib.types.str;
default = config.services.oauth2-proxy.httpAddress;
defaultText = lib.literalExpression "config.services.oauth2-proxy.httpAddress";
description = ''
The address of the reverse proxy endpoint for oauth2_proxy
The address of the reverse proxy endpoint for oauth2-proxy
'';
};
domain = mkOption {
type = types.str;
domain = lib.mkOption {
type = lib.types.str;
description = ''
The domain under which the oauth2_proxy will be accesible and the path of cookies are set to.
The domain under which the oauth2-proxy will be accesible and the path of cookies are set to.
This setting must be set to ensure back-redirects are working properly
if oauth2-proxy is configured with {option}`services.oauth2_proxy.cookie.domain`
or multiple {option}`services.oauth2_proxy.nginx.virtualHosts` that are not on the same domain.
if oauth2-proxy is configured with {option}`services.oauth2-proxy.cookie.domain`
or multiple {option}`services.oauth2-proxy.nginx.virtualHosts` that are not on the same domain.
'';
};
virtualHosts = mkOption {
virtualHosts = lib.mkOption {
type = let
vhostSubmodule = types.submodule {
vhostSubmodule = lib.types.submodule {
options = {
allowed_groups = mkOption {
type = types.nullOr (types.listOf types.str);
allowed_groups = lib.mkOption {
type = lib.types.nullOr (lib.types.listOf lib.types.str);
description = "List of groups to allow access to this vhost, or null to allow all.";
default = null;
};
allowed_emails = mkOption {
type = types.nullOr (types.listOf types.str);
allowed_emails = lib.mkOption {
type = lib.types.nullOr (lib.types.listOf lib.types.str);
description = "List of emails to allow access to this vhost, or null to allow all.";
default = null;
};
allowed_email_domains = mkOption {
type = types.nullOr (types.listOf types.str);
allowed_email_domains = lib.mkOption {
type = lib.types.nullOr (lib.types.listOf lib.types.str);
description = "List of email domains to allow access to this vhost, or null to allow all.";
default = null;
};
};
};
oldType = types.listOf types.str;
oldType = lib.types.listOf lib.types.str;
convertFunc = x:
lib.warn "services.oauth2_proxy.nginx.virtualHosts should be an attrset, found ${lib.generators.toPretty {} x}"
lib.warn "services.oauth2-proxy.nginx.virtualHosts should be an attrset, found ${lib.generators.toPretty {} x}"
lib.genAttrs x (_: {});
newType = types.attrsOf vhostSubmodule;
in types.coercedTo oldType convertFunc newType;
newType = lib.types.attrsOf vhostSubmodule;
in lib.types.coercedTo oldType convertFunc newType;
default = {};
example = {
"protected.foo.com" = {
@@ -65,11 +64,11 @@ in
};
};
config.services.oauth2_proxy = mkIf (cfg.virtualHosts != [] && (hasPrefix "127.0.0.1:" cfg.proxy)) {
config.services.oauth2-proxy = lib.mkIf (cfg.virtualHosts != [] && (lib.hasPrefix "127.0.0.1:" cfg.proxy)) {
enable = true;
};
config.services.nginx = mkIf (cfg.virtualHosts != [] && config.services.oauth2_proxy.enable) (mkMerge ([
config.services.nginx = lib.mkIf (cfg.virtualHosts != [] && config.services.oauth2-proxy.enable) (lib.mkMerge ([
{
virtualHosts.${cfg.domain}.locations."/oauth2/" = {
proxyPass = cfg.proxy;
@@ -79,7 +78,7 @@ in
'';
};
}
] ++ optional (cfg.virtualHosts != []) {
] ++ lib.optional (cfg.virtualHosts != []) {
recommendedProxySettings = true; # needed because duplicate headers
} ++ (lib.mapAttrsToList (vhost: conf: {
virtualHosts.${vhost} = {
@@ -1,15 +1,12 @@
# NixOS module for oauth2_proxy.
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.oauth2_proxy;
cfg = config.services.oauth2-proxy;
# oauth2_proxy provides many options that are only relevant if you are using
# oauth2-proxy provides many options that are only relevant if you are using
# a certain provider. This set maps from provider name to a function that
# takes the configuration and returns a string that can be inserted into the
# command-line to launch oauth2_proxy.
# command-line to launch oauth2-proxy.
providerSpecificOptions = {
azure = cfg: {
azure-tenant = cfg.azure.tenant;
@@ -73,28 +70,28 @@ let
} // (getProviderOptions cfg cfg.provider) // cfg.extraConfig;
mapConfig = key: attr:
optionalString (attr != null && attr != []) (
if isDerivation attr then mapConfig key (toString attr) else
if (builtins.typeOf attr) == "set" then concatStringsSep " "
(mapAttrsToList (name: value: mapConfig (key + "-" + name) value) attr) else
if (builtins.typeOf attr) == "list" then concatMapStringsSep " " (mapConfig key) attr else
if (builtins.typeOf attr) == "bool" then "--${key}=${boolToString attr}" else
lib.optionalString (attr != null && attr != []) (
if lib.isDerivation attr then mapConfig key (toString attr) else
if (builtins.typeOf attr) == "set" then lib.concatStringsSep " "
(lib.mapAttrsToList (name: value: mapConfig (key + "-" + name) value) attr) else
if (builtins.typeOf attr) == "list" then lib.concatMapStringsSep " " (mapConfig key) attr else
if (builtins.typeOf attr) == "bool" then "--${key}=${lib.boolToString attr}" else
if (builtins.typeOf attr) == "string" then "--${key}='${attr}'" else
"--${key}=${toString attr}");
configString = concatStringsSep " " (mapAttrsToList mapConfig allConfig);
configString = lib.concatStringsSep " " (lib.mapAttrsToList mapConfig allConfig);
in
{
options.services.oauth2_proxy = {
enable = mkEnableOption "oauth2_proxy";
options.services.oauth2-proxy = {
enable = lib.mkEnableOption "oauth2-proxy";
package = mkPackageOption pkgs "oauth2-proxy" { };
package = lib.mkPackageOption pkgs "oauth2-proxy" { };
##############################################
# PROVIDER configuration
# Taken from: https://github.com/oauth2-proxy/oauth2-proxy/blob/master/providers/providers.go
provider = mkOption {
type = types.enum [
provider = lib.mkOption {
type = lib.types.enum [
"adfs"
"azure"
"bitbucket"
@@ -116,24 +113,24 @@ in
'';
};
approvalPrompt = mkOption {
type = types.enum ["force" "auto"];
approvalPrompt = lib.mkOption {
type = lib.types.enum ["force" "auto"];
default = "force";
description = ''
OAuth approval_prompt.
'';
};
clientID = mkOption {
type = types.nullOr types.str;
clientID = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = ''
The OAuth Client ID.
'';
example = "123456.apps.googleusercontent.com";
};
oidcIssuerUrl = mkOption {
type = types.nullOr types.str;
oidcIssuerUrl = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
The OAuth issuer URL.
@@ -141,15 +138,15 @@ in
example = "https://login.microsoftonline.com/{TENANT_ID}/v2.0";
};
clientSecret = mkOption {
type = types.nullOr types.str;
clientSecret = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = ''
The OAuth Client Secret.
'';
};
skipAuthRegexes = mkOption {
type = types.listOf types.str;
skipAuthRegexes = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
description = ''
Skip authentication for requests matching any of these regular
@@ -159,8 +156,8 @@ in
# XXX: Not clear whether these two options are mutually exclusive or not.
email = {
domains = mkOption {
type = types.listOf types.str;
domains = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
description = ''
Authenticate emails with the specified domains. Use
@@ -168,8 +165,8 @@ in
'';
};
addresses = mkOption {
type = types.nullOr types.lines;
addresses = lib.mkOption {
type = lib.types.nullOr lib.types.lines;
default = null;
description = ''
Line-separated email addresses that are allowed to authenticate.
@@ -177,8 +174,8 @@ in
};
};
loginURL = mkOption {
type = types.nullOr types.str;
loginURL = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Authentication endpoint.
@@ -190,8 +187,8 @@ in
example = "https://provider.example.com/oauth/authorize";
};
redeemURL = mkOption {
type = types.nullOr types.str;
redeemURL = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Token redemption endpoint.
@@ -203,8 +200,8 @@ in
example = "https://provider.example.com/oauth/token";
};
validateURL = mkOption {
type = types.nullOr types.str;
validateURL = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Access token validation endpoint.
@@ -216,10 +213,10 @@ in
example = "https://provider.example.com/user/emails";
};
redirectURL = mkOption {
redirectURL = lib.mkOption {
# XXX: jml suspects this is always necessary, but the command-line
# doesn't require it so making it optional.
type = types.nullOr types.str;
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
The OAuth2 redirect URL.
@@ -228,16 +225,16 @@ in
};
azure = {
tenant = mkOption {
type = types.str;
tenant = lib.mkOption {
type = lib.types.str;
default = "common";
description = ''
Go to a tenant-specific or common (tenant-independent) endpoint.
'';
};
resource = mkOption {
type = types.str;
resource = lib.mkOption {
type = lib.types.str;
description = ''
The resource that is protected.
'';
@@ -245,8 +242,8 @@ in
};
google = {
adminEmail = mkOption {
type = types.str;
adminEmail = lib.mkOption {
type = lib.types.str;
description = ''
The Google Admin to impersonate for API calls.
@@ -258,16 +255,16 @@ in
'';
};
groups = mkOption {
type = types.listOf types.str;
groups = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [];
description = ''
Restrict logins to members of these Google groups.
'';
};
serviceAccountJSON = mkOption {
type = types.path;
serviceAccountJSON = lib.mkOption {
type = lib.types.path;
description = ''
The path to the service account JSON credentials.
'';
@@ -275,16 +272,16 @@ in
};
github = {
org = mkOption {
type = types.nullOr types.str;
org = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Restrict logins to members of this organisation.
'';
};
team = mkOption {
type = types.nullOr types.str;
team = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Restrict logins to members of this team.
@@ -295,8 +292,8 @@ in
####################################################
# UPSTREAM Configuration
upstream = mkOption {
type = with types; coercedTo str (x: [x]) (listOf str);
upstream = lib.mkOption {
type = with lib.types; coercedTo str (x: [x]) (listOf str);
default = [];
description = ''
The http url(s) of the upstream endpoint or `file://`
@@ -304,40 +301,40 @@ in
'';
};
passAccessToken = mkOption {
type = types.bool;
passAccessToken = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Pass OAuth access_token to upstream via X-Forwarded-Access-Token header.
'';
};
passBasicAuth = mkOption {
type = types.bool;
passBasicAuth = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Pass HTTP Basic Auth, X-Forwarded-User and X-Forwarded-Email information to upstream.
'';
};
basicAuthPassword = mkOption {
type = types.nullOr types.str;
basicAuthPassword = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
The password to set when passing the HTTP Basic Auth header.
'';
};
passHostHeader = mkOption {
type = types.bool;
passHostHeader = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Pass the request Host Header to upstream.
'';
};
signatureKey = mkOption {
type = types.nullOr types.str;
signatureKey = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
GAP-Signature request signature key.
@@ -346,8 +343,8 @@ in
};
cookie = {
domain = mkOption {
type = types.nullOr types.str;
domain = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Optional cookie domains to force cookies to (ie: `.yourcompany.com`).
@@ -357,33 +354,33 @@ in
example = ".yourcompany.com";
};
expire = mkOption {
type = types.str;
expire = lib.mkOption {
type = lib.types.str;
default = "168h0m0s";
description = ''
Expire timeframe for cookie.
'';
};
httpOnly = mkOption {
type = types.bool;
httpOnly = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Set HttpOnly cookie flag.
'';
};
name = mkOption {
type = types.str;
name = lib.mkOption {
type = lib.types.str;
default = "_oauth2_proxy";
description = ''
The name of the cookie that the oauth_proxy creates.
'';
};
refresh = mkOption {
refresh = lib.mkOption {
# XXX: Unclear what the behavior is when this is not specified.
type = types.nullOr types.str;
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Refresh the cookie after this duration; 0 to disable.
@@ -391,15 +388,15 @@ in
example = "168h0m0s";
};
secret = mkOption {
type = types.nullOr types.str;
secret = lib.mkOption {
type = lib.types.nullOr lib.types.str;
description = ''
The seed string for secure cookies.
'';
};
secure = mkOption {
type = types.bool;
secure = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Set secure (HTTPS) cookie flag.
@@ -410,8 +407,8 @@ in
####################################################
# OAUTH2 PROXY configuration
httpAddress = mkOption {
type = types.str;
httpAddress = lib.mkOption {
type = lib.types.str;
default = "http://127.0.0.1:4180";
description = ''
HTTPS listening address. This module does not expose the port by
@@ -421,8 +418,8 @@ in
};
htpasswd = {
file = mkOption {
type = types.nullOr types.path;
file = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
Additionally authenticate against a htpasswd file. Entries must be
@@ -430,8 +427,8 @@ in
'';
};
displayForm = mkOption {
type = types.bool;
displayForm = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Display username / password login form if an htpasswd file is provided.
@@ -439,16 +436,16 @@ in
};
};
customTemplatesDir = mkOption {
type = types.nullOr types.path;
customTemplatesDir = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
Path to custom HTML templates.
'';
};
reverseProxy = mkOption {
type = types.bool;
reverseProxy = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
In case when running behind a reverse proxy, controls whether headers
@@ -458,8 +455,8 @@ in
'';
};
proxyPrefix = mkOption {
type = types.str;
proxyPrefix = lib.mkOption {
type = lib.types.str;
default = "/oauth2";
description = ''
The url root path that this proxy should be nested under.
@@ -467,30 +464,30 @@ in
};
tls = {
enable = mkOption {
type = types.bool;
enable = lib.mkOption {
type = lib.types.bool;
default = false;
description = ''
Whether to serve over TLS.
'';
};
certificate = mkOption {
type = types.path;
certificate = lib.mkOption {
type = lib.types.path;
description = ''
Path to certificate file.
'';
};
key = mkOption {
type = types.path;
key = lib.mkOption {
type = lib.types.path;
description = ''
Path to private key file.
'';
};
httpsAddress = mkOption {
type = types.str;
httpsAddress = lib.mkOption {
type = lib.types.str;
default = ":443";
description = ''
`addr:port` to listen on for HTTPS clients.
@@ -502,8 +499,8 @@ in
};
};
requestLogging = mkOption {
type = types.bool;
requestLogging = lib.mkOption {
type = lib.types.bool;
default = true;
description = ''
Log requests to stdout.
@@ -514,42 +511,42 @@ in
# UNKNOWN
# XXX: Is this mandatory? Is it part of another group? Is it part of the provider specification?
scope = mkOption {
scope = lib.mkOption {
# XXX: jml suspects this is always necessary, but the command-line
# doesn't require it so making it optional.
type = types.nullOr types.str;
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
OAuth scope specification.
'';
};
profileURL = mkOption {
type = types.nullOr types.str;
profileURL = lib.mkOption {
type = lib.types.nullOr lib.types.str;
default = null;
description = ''
Profile access endpoint.
'';
};
setXauthrequest = mkOption {
type = types.nullOr types.bool;
setXauthrequest = lib.mkOption {
type = lib.types.nullOr lib.types.bool;
default = false;
description = ''
Set X-Auth-Request-User and X-Auth-Request-Email response headers (useful in Nginx auth_request mode). Setting this to 'null' means using the upstream default (false).
'';
};
extraConfig = mkOption {
extraConfig = lib.mkOption {
default = {};
type = types.attrsOf types.anything;
type = lib.types.attrsOf lib.types.anything;
description = ''
Extra config to pass to oauth2-proxy.
'';
};
keyFile = mkOption {
type = types.nullOr types.path;
keyFile = lib.mkOption {
type = lib.types.nullOr lib.types.path;
default = null;
description = ''
oauth2-proxy allows passing sensitive configuration via environment variables.
@@ -557,28 +554,30 @@ in
OAUTH2_PROXY_CLIENT_SECRET=asdfasdfasdf.apps.googleuserscontent.com
and specify the path here.
'';
example = "/run/keys/oauth2_proxy";
example = "/run/keys/oauth2-proxy";
};
};
config = mkIf cfg.enable {
imports = [
(lib.mkRenamedOptionModule [ "services" "oauth2_proxy" ] [ "services" "oauth2-proxy" ])
];
services.oauth2_proxy = mkIf (cfg.keyFile != null) {
clientID = mkDefault null;
clientSecret = mkDefault null;
cookie.secret = mkDefault null;
config = lib.mkIf cfg.enable {
services.oauth2-proxy = lib.mkIf (cfg.keyFile != null) {
clientID = lib.mkDefault null;
clientSecret = lib.mkDefault null;
cookie.secret = lib.mkDefault null;
};
users.users.oauth2_proxy = {
users.users.oauth2-proxy = {
description = "OAuth2 Proxy";
isSystemUser = true;
group = "oauth2_proxy";
group = "oauth2-proxy";
};
users.groups.oauth2_proxy = {};
users.groups.oauth2-proxy = {};
systemd.services.oauth2_proxy = {
systemd.services.oauth2-proxy = {
description = "OAuth2 Proxy";
path = [ cfg.package ];
wantedBy = [ "multi-user.target" ];
@@ -586,10 +585,10 @@ in
after = [ "network-online.target" ];
serviceConfig = {
User = "oauth2_proxy";
User = "oauth2-proxy";
Restart = "always";
ExecStart = "${cfg.package}/bin/oauth2-proxy ${configString}";
EnvironmentFile = mkIf (cfg.keyFile != null) cfg.keyFile;
EnvironmentFile = lib.mkIf (cfg.keyFile != null) cfg.keyFile;
};
};
@@ -1,8 +1,7 @@
{ config, lib, pkgs, ... }:
with lib;
let
inherit (lib) mkOption types;
xcfg = config.services.xserver;
cfg = xcfg.desktopManager;
@@ -59,7 +58,7 @@ in
session = mkOption {
internal = true;
default = [];
example = singleton
example = lib.singleton
{ name = "kde";
bgSupport = true;
start = "...";
@@ -73,26 +72,15 @@ in
manage = "desktop";
start = d.start
# literal newline to ensure d.start's last line is not appended to
+ optionalString (needBGCond d) ''
+ lib.optionalString (needBGCond d) ''
if [ -e $HOME/.background-image ]; then
${pkgs.feh}/bin/feh --bg-${cfg.wallpaper.mode} ${optionalString cfg.wallpaper.combineScreens "--no-xinerama"} $HOME/.background-image
${pkgs.feh}/bin/feh --bg-${cfg.wallpaper.mode} ${lib.optionalString cfg.wallpaper.combineScreens "--no-xinerama"} $HOME/.background-image
fi
'';
});
};
default = mkOption {
type = types.nullOr types.str;
default = null;
example = "none";
description = ''
**Deprecated**, please use [](#opt-services.displayManager.defaultSession) instead.
Default desktop manager loaded if none have been chosen.
'';
};
};
};
@@ -1,8 +1,7 @@
{ config, lib, pkgs, utils, ... }:
with lib;
let
inherit (lib) mkOption types mkDefault mkEnableOption literalExpression;
cfg = config.services.xserver.desktopManager.gnome;
serviceCfg = config.services.gnome;
@@ -51,8 +50,8 @@ let
destination = "/share/gnome-background-properties/nixos.xml";
};
flashbackEnabled = cfg.flashback.enableMetacity || length cfg.flashback.customSessions > 0;
flashbackWms = optional cfg.flashback.enableMetacity {
flashbackEnabled = cfg.flashback.enableMetacity || lib.length cfg.flashback.customSessions > 0;
flashbackWms = lib.optional cfg.flashback.enableMetacity {
wmName = "metacity";
wmLabel = "Metacity";
wmCommand = "${pkgs.gnome.metacity}/bin/metacity";
@@ -67,73 +66,9 @@ in
meta = {
doc = ./gnome.md;
maintainers = teams.gnome.members;
maintainers = lib.teams.gnome.members;
};
imports = [
# Added 2021-05-07
(mkRenamedOptionModule
[ "services" "gnome3" "core-os-services" "enable" ]
[ "services" "gnome" "core-os-services" "enable" ]
)
(mkRenamedOptionModule
[ "services" "gnome3" "core-shell" "enable" ]
[ "services" "gnome" "core-shell" "enable" ]
)
(mkRenamedOptionModule
[ "services" "gnome3" "core-utilities" "enable" ]
[ "services" "gnome" "core-utilities" "enable" ]
)
(mkRenamedOptionModule
[ "services" "gnome3" "core-developer-tools" "enable" ]
[ "services" "gnome" "core-developer-tools" "enable" ]
)
(mkRenamedOptionModule
[ "services" "gnome3" "games" "enable" ]
[ "services" "gnome" "games" "enable" ]
)
(mkRenamedOptionModule
[ "services" "gnome3" "experimental-features" "realtime-scheduling" ]
[ "services" "gnome" "experimental-features" "realtime-scheduling" ]
)
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "gnome3" "enable" ]
[ "services" "xserver" "desktopManager" "gnome" "enable" ]
)
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "gnome3" "sessionPath" ]
[ "services" "xserver" "desktopManager" "gnome" "sessionPath" ]
)
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "gnome3" "favoriteAppsOverride" ]
[ "services" "xserver" "desktopManager" "gnome" "favoriteAppsOverride" ]
)
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "gnome3" "extraGSettingsOverrides" ]
[ "services" "xserver" "desktopManager" "gnome" "extraGSettingsOverrides" ]
)
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "gnome3" "extraGSettingsOverridePackages" ]
[ "services" "xserver" "desktopManager" "gnome" "extraGSettingsOverridePackages" ]
)
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "gnome3" "debug" ]
[ "services" "xserver" "desktopManager" "gnome" "debug" ]
)
(mkRenamedOptionModule
[ "services" "xserver" "desktopManager" "gnome3" "flashback" ]
[ "services" "xserver" "desktopManager" "gnome" "flashback" ]
)
(mkRenamedOptionModule
[ "environment" "gnome3" "excludePackages" ]
[ "environment" "gnome" "excludePackages" ]
)
(mkRemovedOptionModule
[ "services" "gnome" "experimental-features" "realtime-scheduling" ]
"Set `security.rtkit.enable = true;` to make realtime scheduling possible. (Still needs to be enabled using GSettings.)"
)
];
options = {
services.gnome = {
@@ -248,8 +183,8 @@ in
};
config = mkMerge [
(mkIf (cfg.enable || flashbackEnabled) {
config = lib.mkMerge [
(lib.mkIf (cfg.enable || flashbackEnabled) {
# Seed our configuration into nixos-generate-config
system.nixos-generate-config.desktopConfiguration = [''
# Enable the GNOME Desktop Environment.
@@ -264,7 +199,7 @@ in
services.displayManager.sessionPackages = [ pkgs.gnome.gnome-session.sessions ];
environment.extraInit = ''
${concatMapStrings (p: ''
${lib.concatMapStrings (p: ''
if [ -d "${p}/share/gsettings-schemas/${p.name}" ]; then
export XDG_DATA_DIRS=$XDG_DATA_DIRS''${XDG_DATA_DIRS:+:}${p}/share/gsettings-schemas/${p.name}
fi
@@ -278,19 +213,19 @@ in
environment.systemPackages = cfg.sessionPath;
environment.sessionVariables.GNOME_SESSION_DEBUG = mkIf cfg.debug "1";
environment.sessionVariables.GNOME_SESSION_DEBUG = lib.mkIf cfg.debug "1";
# Override GSettings schemas
environment.sessionVariables.NIX_GSETTINGS_OVERRIDES_DIR = "${nixos-gsettings-desktop-schemas}/share/gsettings-schemas/nixos-gsettings-overrides/glib-2.0/schemas";
})
(mkIf flashbackEnabled {
(lib.mkIf flashbackEnabled {
services.displayManager.sessionPackages =
let
wmNames = map (wm: wm.wmName) flashbackWms;
namesAreUnique = lib.unique wmNames == wmNames;
in
assert (assertMsg namesAreUnique "Flashback WM names must be unique.");
assert (lib.assertMsg namesAreUnique "Flashback WM names must be unique.");
map
(wm:
pkgs.gnome.gnome-flashback.mkSessionForWm {
@@ -318,7 +253,7 @@ in
++ (map (wm: gnome-flashback.mkGnomeSession { inherit (wm) wmName wmLabel enableGnomePanel; }) flashbackWms);
})
(mkIf serviceCfg.core-os-services.enable {
(lib.mkIf serviceCfg.core-os-services.enable {
hardware.bluetooth.enable = mkDefault true;
hardware.pulseaudio.enable = mkDefault true;
programs.dconf.enable = true;
@@ -371,7 +306,7 @@ in
];
})
(mkIf serviceCfg.core-shell.enable {
(lib.mkIf serviceCfg.core-shell.enable {
services.xserver.desktopManager.gnome.sessionPath =
let
mandatoryPackages = [
@@ -393,7 +328,7 @@ in
services.gnome.gnome-user-share.enable = mkDefault true;
services.gnome.rygel.enable = mkDefault true;
services.gvfs.enable = true;
services.system-config-printer.enable = (mkIf config.services.printing.enable (mkDefault true));
services.system-config-printer.enable = (lib.mkIf config.services.printing.enable (mkDefault true));
systemd.packages = with pkgs.gnome; [
gnome-session
@@ -463,7 +398,7 @@ in
})
# Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/gnome-45/elements/core/meta-gnome-core-utilities.bst
(mkIf serviceCfg.core-utilities.enable {
(lib.mkIf serviceCfg.core-utilities.enable {
environment.systemPackages =
with pkgs.gnome;
utils.removePackagesByName
@@ -524,7 +459,7 @@ in
];
})
(mkIf serviceCfg.games.enable {
(lib.mkIf serviceCfg.games.enable {
environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
aisleriot
atomix
@@ -550,7 +485,7 @@ in
})
# Adapt from https://gitlab.gnome.org/GNOME/gnome-build-meta/-/blob/3.38.0/elements/core/meta-gnome-core-developer-tools.bst
(mkIf serviceCfg.core-developer-tools.enable {
(lib.mkIf serviceCfg.core-developer-tools.enable {
environment.systemPackages = with pkgs.gnome; utils.removePackagesByName [
dconf-editor
devhelp
@@ -9,9 +9,8 @@
{ config, lib, options, pkgs, ... }:
with lib;
let
inherit (lib) mkOption types literalExpression optionalString;
cfg = config.services.xserver;
xorg = pkgs.xorg;
@@ -91,7 +90,7 @@ let
# Import environment variables into the systemd user environment.
${optionalString (cfg.displayManager.importedVariables != []) (
"/run/current-system/systemd/bin/systemctl --user import-environment "
+ toString (unique cfg.displayManager.importedVariables)
+ toString (lib.unique cfg.displayManager.importedVariables)
)}
# Speed up application start by 50-150ms according to
@@ -222,13 +221,6 @@ in
};
config = {
assertions = [
{
assertion = cfg.desktopManager.default != null || cfg.windowManager.default != null -> cfg.displayManager.defaultSession == defaultSessionFromLegacyOptions;
message = "You cannot use both services.displayManager.defaultSession option and legacy options (services.xserver.desktopManager.default and services.xserver.windowManager.default).";
}
];
services.displayManager.sessionData.wrapper = xsessionWrapper;
services.xserver.displayManager.xserverBin = "${xorg.xorgserver.out}/bin/X";
@@ -254,8 +246,8 @@ in
# that do not have upstream session files (those defined using services.{display,desktop,window}Manager.session options).
services.displayManager.sessionPackages =
let
dms = filter (s: s.manage == "desktop") cfg.displayManager.session;
wms = filter (s: s.manage == "window") cfg.displayManager.session;
dms = lib.filter (s: s.manage == "desktop") cfg.displayManager.session;
wms = lib.filter (s: s.manage == "window") cfg.displayManager.session;
# Script responsible for starting the window manager and the desktop manager.
xsession = dm: wm: pkgs.writeScript "xsession" ''
@@ -283,16 +275,16 @@ in
'';
in
# We will generate every possible pair of WM and DM.
concatLists (
lib.concatLists (
lib.mapCartesianProduct
({dm, wm}: let
sessionName = "${dm.name}${optionalString (wm.name != "none") ("+" + wm.name)}";
script = xsession dm wm;
desktopNames = if dm ? desktopNames
then concatStringsSep ";" dm.desktopNames
then lib.concatStringsSep ";" dm.desktopNames
else sessionName;
in
optional (dm.name != "none" || wm.name != "none")
lib.optional (dm.name != "none" || wm.name != "none")
(pkgs.writeTextFile {
name = "${sessionName}-xsession";
destination = "/share/xsessions/${sessionName}.desktop";
@@ -317,11 +309,11 @@ in
};
imports = [
(mkRemovedOptionModule [ "services" "xserver" "displayManager" "desktopManagerHandlesLidAndPower" ]
(lib.mkRemovedOptionModule [ "services" "xserver" "displayManager" "desktopManagerHandlesLidAndPower" ]
"The option is no longer necessary because all display managers have already delegated lid management to systemd.")
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "logsXsession" ] [ "services" "displayManager" "logToFile" ])
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "logToJournal" ] [ "services" "displayManager" "logToJournal" ])
(mkRenamedOptionModule [ "services" "xserver" "displayManager" "extraSessionFilesPackages" ] [ "services" "displayManager" "sessionPackages" ])
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "job" "logsXsession" ] [ "services" "displayManager" "logToFile" ])
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "logToJournal" ] [ "services" "displayManager" "logToJournal" ])
(lib.mkRenamedOptionModule [ "services" "xserver" "displayManager" "extraSessionFilesPackages" ] [ "services" "displayManager" "sessionPackages" ])
];
}
@@ -1,8 +1,7 @@
{ config, lib, ... }:
with lib;
let
inherit (lib) mkOption types;
cfg = config.services.xserver.windowManager;
in
@@ -72,17 +71,6 @@ in
});
};
default = mkOption {
type = types.nullOr types.str;
default = null;
example = "wmii";
description = ''
**Deprecated**, please use [](#opt-services.displayManager.defaultSession) instead.
Default window manager loaded if none have been chosen.
'';
};
};
};
@@ -6,7 +6,6 @@ let
concatMap
concatMapStrings
concatStrings
concatStringsSep
escapeShellArg
flip
foldr
@@ -491,10 +490,10 @@ in
theme = mkOption {
type = types.nullOr types.path;
example = literalExpression "pkgs.nixos-grub2-theme";
example = literalExpression ''"''${pkgs.libsForQt5.breeze-grub}/grub/themes/breeze"'';
default = null;
description = ''
Grub theme to be used.
Path to the grub theme to be used.
'';
};
@@ -219,6 +219,11 @@ in
systemd.services.podman.environment = config.networking.proxy.envVars;
systemd.sockets.podman.wantedBy = [ "sockets.target" ];
systemd.sockets.podman.socketConfig.SocketGroup = "podman";
# Podman does not support multiple sockets, as of podman 5.0.2, so we use
# a symlink. Unfortunately this does not let us use an alternate group,
# such as `docker`.
systemd.sockets.podman.socketConfig.Symlinks =
lib.mkIf cfg.dockerSocket.enable [ "/run/docker.sock" ];
systemd.user.services.podman.environment = config.networking.proxy.envVars;
systemd.user.sockets.podman.wantedBy = [ "sockets.target" ];
@@ -239,11 +244,6 @@ in
'')
];
systemd.tmpfiles.rules =
lib.optionals cfg.dockerSocket.enable [
"L! /run/docker.sock - - - - /run/podman/podman.sock"
];
users.groups.podman = { };
assertions = [
+3 -1
View File
@@ -82,7 +82,9 @@ in rec {
(onFullSupported "nixos.tests.gitlab")
(onFullSupported "nixos.tests.gnome")
(onFullSupported "nixos.tests.gnome-xorg")
(onSystems ["x86_64-linux"] "nixos.tests.hibernate")
# FIXME: broken by QEMU 8.2.3 upgrade, reenable when fixed
# Upstream issue: https://gitlab.com/qemu-project/qemu/-/issues/2321
# (onSystems ["x86_64-linux"] "nixos.tests.hibernate")
(onFullSupported "nixos.tests.i3wm")
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSimple")
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSubvolDefault")
+2
View File
@@ -193,6 +193,7 @@ in {
cinnamon = handleTest ./cinnamon.nix {};
cinnamon-wayland = handleTest ./cinnamon-wayland.nix {};
cjdns = handleTest ./cjdns.nix {};
clatd = handleTest ./clatd.nix {};
clickhouse = handleTest ./clickhouse.nix {};
cloud-init = handleTest ./cloud-init.nix {};
cloud-init-hostname = handleTest ./cloud-init-hostname.nix {};
@@ -451,6 +452,7 @@ in {
jirafeau = handleTest ./jirafeau.nix {};
jitsi-meet = handleTest ./jitsi-meet.nix {};
jool = import ./jool.nix { inherit pkgs runTest; };
jotta-cli = handleTest ./jotta-cli.nix {};
k3s = handleTest ./k3s {};
kafka = handleTest ./kafka.nix {};
kanidm = handleTest ./kanidm.nix {};
+189
View File
@@ -0,0 +1,189 @@
# This test verifies that we can ping an IPv4-only server from an IPv6-only
# client via a NAT64 router using CLAT on the client. The hosts and networks
# are configured as follows:
#
# +------
# Client | clat Address: 192.0.0.1/32 (configured via clatd)
# | Route: default
# |
# | eth1 Address: 2001:db8::2/64
# | | Route: default via 2001:db8::1
# +--|---
# | VLAN 3
# +--|---
# | eth2 Address: 2001:db8::1/64
# Router |
# | nat64 Address: 64:ff9b::1/128
# | Route: 64:ff9b::/96
# | Address: 192.0.2.0/32
# | Route: 192.0.2.0/24
# |
# | eth1 Address: 100.64.0.1/24
# +--|---
# | VLAN 2
# +--|---
# Server | eth1 Address: 100.64.0.2/24
# | Route: 192.0.2.0/24 via 100.64.0.1
# +------
import ./make-test-python.nix ({ pkgs, lib, ... }:
{
name = "clatd";
meta = with pkgs.lib.maintainers; {
maintainers = [ hax404 ];
};
nodes = {
# The server is configured with static IPv4 addresses. RFC 6052 Section 3.1
# disallows the mapping of non-global IPv4 addresses like RFC 1918 into the
# Well-Known Prefix 64:ff9b::/96. TAYGA also does not allow the mapping of
# documentation space (RFC 5737). To circumvent this, 100.64.0.2/24 from
# RFC 6589 (Carrier Grade NAT) is used here.
# To reach the IPv4 address pool of the NAT64 gateway, there is a static
# route configured. In normal cases, where the router would also source NAT
# the pool addresses to one IPv4 addresses, this would not be needed.
server = {
virtualisation.vlans = [
2 # towards router
];
networking = {
useDHCP = false;
interfaces.eth1 = lib.mkForce {};
};
systemd.network = {
enable = true;
networks."vlan1" = {
matchConfig.Name = "eth1";
address = [
"100.64.0.2/24"
];
routes = [
{ routeConfig = { Destination = "192.0.2.0/24"; Gateway = "100.64.0.1"; }; }
];
};
};
};
# The router is configured with static IPv4 addresses towards the server
# and IPv6 addresses towards the client. For NAT64, the Well-Known prefix
# 64:ff9b::/96 is used. NAT64 is done with TAYGA which provides the
# tun-interface nat64 and does the translation over it. The IPv6 packets
# are sent to this interfaces and received as IPv4 packets and vice versa.
# As TAYGA only translates IPv6 addresses to dedicated IPv4 addresses, it
# needs a pool of IPv4 addresses which must be at least as big as the
# expected amount of clients. In this test, the packets from the pool are
# directly routed towards the client. In normal cases, there would be a
# second source NAT44 to map all clients behind one IPv4 address.
router = {
boot.kernel.sysctl = {
"net.ipv4.ip_forward" = 1;
"net.ipv6.conf.all.forwarding" = 1;
};
virtualisation.vlans = [
2 # towards server
3 # towards client
];
networking = {
useDHCP = false;
useNetworkd = true;
firewall.enable = false;
interfaces.eth1 = lib.mkForce {
ipv4 = {
addresses = [ { address = "100.64.0.1"; prefixLength = 24; } ];
};
};
interfaces.eth2 = lib.mkForce {
ipv6 = {
addresses = [ { address = "2001:db8::1"; prefixLength = 64; } ];
};
};
};
services.tayga = {
enable = true;
ipv4 = {
address = "192.0.2.0";
router = {
address = "192.0.2.1";
};
pool = {
address = "192.0.2.0";
prefixLength = 24;
};
};
ipv6 = {
address = "2001:db8::1";
router = {
address = "64:ff9b::1";
};
pool = {
address = "64:ff9b::";
prefixLength = 96;
};
};
};
};
# The client is configured with static IPv6 addresses. It has also a static
# default route towards the router. To reach the IPv4-only server, the
# client starts the clat daemon which starts and configures the local
# IPv4 -> IPv6 translation via Tayga.
client = {
virtualisation.vlans = [
3 # towards router
];
networking = {
useDHCP = false;
interfaces.eth1 = lib.mkForce {};
};
systemd.network = {
enable = true;
networks."vlan1" = {
matchConfig.Name = "eth1";
address = [
"2001:db8::2/64"
];
routes = [
{ routeConfig = { Destination = "::/0"; Gateway = "2001:db8::1"; }; }
];
};
};
services.clatd = {
enable = true;
settings.plat-prefix = "64:ff9b::/96";
};
environment.systemPackages = [ pkgs.mtr ];
};
};
testScript = ''
start_all()
# wait for all machines to start up
for machine in client, router, server:
machine.wait_for_unit("network-online.target")
with subtest("Wait for tayga and clatd"):
router.wait_for_unit("tayga.service")
client.wait_for_unit("clatd.service")
# clatd checks if this system has IPv4 connectivity for 10 seconds
client.wait_until_succeeds(
'journalctl -u clatd -e | grep -q "Starting up TAYGA, using config file"'
)
with subtest("Test ICMP"):
client.wait_until_succeeds("ping -c 3 100.64.0.2 >&2")
with subtest("Test ICMP and show a traceroute"):
client.wait_until_succeeds("mtr --show-ips --report-wide 100.64.0.2 >&2")
client.log(client.execute("systemd-analyze security clatd.service")[1])
'';
})
+25
View File
@@ -0,0 +1,25 @@
import ./make-test-python.nix ({ pkgs, ... }: {
name = "jotta-cli";
meta.maintainers = with pkgs.lib.maintainers; [ evenbrenden ];
nodes.machine = { pkgs, ... }: {
user.services.jotta-cli.enable = true;
imports = [ ./common/user-account.nix ];
};
testScript = { nodes, ... }:
let uid = toString nodes.machine.users.users.alice.uid;
in ''
machine.start()
machine.succeed("loginctl enable-linger alice")
machine.wait_for_unit("user@${uid}.service")
machine.wait_for_unit("jottad.service", "alice")
machine.wait_for_open_unix_socket("/run/user/${uid}/jottad/jottad.socket")
# "jotta-cli version" should fail if jotta-cli cannot connect to jottad
machine.succeed('XDG_RUNTIME_DIR=/run/user/${uid} su alice -c "jotta-cli version"')
'';
})
+8 -11
View File
@@ -76,14 +76,17 @@ import ./make-test-python.nix ({ pkgs, ... }:
with subtest("Test LDAP interface"):
server.succeed("ldapsearch -H ldaps://${serverDomain}:636 -b '${ldapBaseDN}' -x '(name=test)'")
with subtest("Test CLI login"):
client.succeed("kanidm login -D anonymous")
client.succeed("kanidm self whoami | grep anonymous@${serverDomain}")
client.succeed("kanidm logout")
with subtest("Recover idm_admin account"):
idm_admin_password = server.succeed("su - kanidm -c 'kanidmd recover-account -c ${serverConfigFile} idm_admin 2>&1 | rg -o \'[A-Za-z0-9]{48}\' '").strip().removeprefix("'").removesuffix("'")
with subtest("Test CLI login"):
client.wait_until_tty_matches("1", "login: ")
client.send_chars("root\n")
client.send_chars("kanidm login -D idm_admin\n")
client.wait_until_tty_matches("1", "Enter password: ")
client.send_chars(f"{idm_admin_password}\n")
client.wait_until_tty_matches("1", "Login Success for idm_admin")
with subtest("Test unixd connection"):
client.wait_for_unit("kanidm-unixd.service")
client.wait_for_file("/run/kanidm-unixd/sock")
@@ -92,12 +95,6 @@ import ./make-test-python.nix ({ pkgs, ... }:
with subtest("Test user creation"):
client.wait_for_unit("getty@tty1.service")
client.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
client.wait_until_tty_matches("1", "login: ")
client.send_chars("root\n")
client.send_chars("kanidm login -D idm_admin\n")
client.wait_until_tty_matches("1", "Enter password: ")
client.send_chars(f"{idm_admin_password}\n")
client.wait_until_tty_matches("1", "Login Success for idm_admin")
client.succeed("kanidm person create testuser TestUser")
client.succeed("kanidm person posix set --shell \"$SHELL\" testuser")
client.send_chars("kanidm person posix set-password testuser\n")
@@ -1,42 +0,0 @@
Shows build and link errors in configure for ease of debugging which
options require what.
diff --git a/scripts/checks.sh b/scripts/checks.sh
index 64cbbf3..fab4d9b 100644
--- a/scripts/checks.sh
+++ b/scripts/checks.sh
@@ -425,7 +425,7 @@ try_compile()
echo "$1" > $__src || exit 1
shift
__cmd="$CC -c $CFLAGS $@ $__src -o $__obj"
- $CC -c $CFLAGS "$@" $__src -o $__obj 2>/dev/null
+ $CC -c $CFLAGS "$@" $__src -o $__obj
;;
cxx)
__src=`tmp_file prog.cc`
@@ -433,7 +433,7 @@ try_compile()
echo "$1" > $__src || exit 1
shift
__cmd="$CXX -c $CXXFLAGS $@ $__src -o $__obj"
- $CXX -c $CXXFLAGS "$@" $__src -o $__obj 2>/dev/null
+ $CXX -c $CXXFLAGS "$@" $__src -o $__obj
;;
esac
return $?
@@ -451,7 +451,7 @@ try_compile_link()
echo "$1" > $__src || exit 1
shift
__cmd="$CC $__src -o $__exe $CFLAGS $LDFLAGS $@"
- $CC $__src -o $__exe $CFLAGS $LDFLAGS "$@" 2>/dev/null
+ $CC $__src -o $__exe $CFLAGS $LDFLAGS "$@"
;;
cxx)
__src=`tmp_file prog.cc`
@@ -459,7 +459,7 @@ try_compile_link()
echo "$1" > $__src || exit 1
shift
__cmd="$CXX $__src -o $__exe $CXXFLAGS $CXXLDFLAGS $@"
- $CXX $__src -o $__exe $CXXFLAGS $CXXLDFLAGS "$@" 2>/dev/null
+ $CXX $__src -o $__exe $CXXFLAGS $CXXLDFLAGS "$@"
;;
esac
return $?
+2 -2
View File
@@ -13,14 +13,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "qpwgraph";
version = "0.6.3";
version = "0.7.1";
src = fetchFromGitLab {
domain = "gitlab.freedesktop.org";
owner = "rncbc";
repo = "qpwgraph";
rev = "v${finalAttrs.version}";
sha256 = "sha256-mTWmXHC9KkXgUIO5CIcGOoYYLx+5si/LETSmHFhmrRE=";
sha256 = "sha256-mtW+dbjdp7as0N5+iacMSNrJ4jm8HWYqJP6G+lutucc=";
};
nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
@@ -250,6 +250,7 @@ stdenv.mkDerivation rec {
# no-derivatives clause
license = with licenses; [ gpl3Plus cc-by-nc-40 unfreeRedistributable ];
maintainers = with maintainers; [ nathyong jpotier ddelabru ];
mainProgram = "Rack";
platforms = platforms.linux;
};
}
@@ -15,13 +15,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "youtube-music";
version = "3.3.5";
version = "3.3.6";
src = fetchFromGitHub {
owner = "th-ch";
repo = "youtube-music";
rev = "v${finalAttrs.version}";
hash = "sha256-JOmcfe7xrKRaxJwj2No3e99HBYbX+ROTjHl5Frc2P9Q=";
hash = "sha256-nxpctEG4XoxW6jOAxGdgTEYr6YnhFRR8+5HUQLxRJB0=";
};
pnpmDeps = stdenvNoCC.mkDerivation {
@@ -47,10 +47,10 @@ stdenv.mkDerivation (finalAttrs: {
dontFixup = true;
outputHashMode = "recursive";
outputHash = {
x86_64-linux = "sha256-K2yJdoi+bJpz0Xf2MHlFzQXbP+H3uVE2hYfkzoB7vBE=";
aarch64-linux = "sha256-ZiA6XKPnkoAl9m2vEJth2wyDxj61Efye4cUk+76znnM=";
x86_64-darwin = "sha256-wh5Y47c5qD2PctROP9AWqLDs7H5S2/8X0zxkSMkr1xQ=";
aarch64-darwin = "sha256-e2h4bLVnSEtZcHERsfkNmawgxQHQXxgXrNlFKB+IRTw=";
x86_64-linux = "sha256-bujlQxP6Lr3qPUDxYXKyb702ZJY/xbuCsu3wVDhcb+8=";
aarch64-linux = "sha256-0kyjjttpXpFVhdza5NAjGrRn++qc/N5/u2dQl7VufLE=";
x86_64-darwin = "sha256-Q37QJt/mhfpSguOlkJGKFTCrIOrpbG3OBwaD/Bg09Us=";
aarch64-darwin = "sha256-wbfjzoGa/6vIlOOVX3bKNQ2uxzph3WSofo3MGXqA6yQ=";
}.${stdenv.system} or (throw "Unsupported system: ${stdenv.system}");
};
@@ -25,13 +25,13 @@
mkDerivation rec {
pname = "bitcoin" + lib.optionalString (!withGui) "d" + "-abc";
version = "0.29.2";
version = "0.29.3";
src = fetchFromGitHub {
owner = "bitcoin-ABC";
repo = "bitcoin-abc";
rev = "v${version}";
hash = "sha256-og9hMQdDXGdUQN+A+z0064E6svF+qPd9CWtDQsdvNYQ=";
hash = "sha256-hYA0O7nDT8J1EnpW4i1+eBzkNw77JC6M7GwO3BdBh3U=";
};
nativeBuildInputs = [ pkg-config cmake ];
@@ -16,9 +16,8 @@
let
inherit (melpaStablePackages) tree-sitter-langs;
libSuffix = if stdenv.isDarwin then "dylib" else "so";
langName = g: lib.removeSuffix "-grammar" (lib.removePrefix "tree-sitter-" g.pname);
soName = g: langName g + "." + libSuffix;
soName = g: langName g + stdenv.hostPlatform.extensions.sharedLibrary;
grammarDir = runCommand "emacs-tree-sitter-grammars" {
# Fake same version number as upstream language bundle to prevent triggering runtime downloads
@@ -5590,6 +5590,18 @@ final: prev:
meta.homepage = "https://github.com/smjonas/live-command.nvim/";
};
llm-nvim = buildVimPlugin {
pname = "llm.nvim";
version = "2024-02-22";
src = fetchFromGitHub {
owner = "huggingface";
repo = "llm.nvim";
rev = "51b76dac9c33c0122adfe28daf52ceaa31c4aa02";
sha256 = "07i1ixbiby4c81lkydwvygz6vxs1xhqnwzcsad3xzcaz7zdl00kx";
};
meta.homepage = "https://github.com/huggingface/llm.nvim/";
};
lsp-colors-nvim = buildVimPlugin {
pname = "lsp-colors.nvim";
version = "2023-02-27";
@@ -468,6 +468,7 @@ https://github.com/ldelossa/litee-filetree.nvim/,,
https://github.com/ldelossa/litee-symboltree.nvim/,,
https://github.com/ldelossa/litee.nvim/,,
https://github.com/smjonas/live-command.nvim/,HEAD,
https://github.com/huggingface/llm.nvim/,HEAD,
https://github.com/folke/lsp-colors.nvim/,,
https://github.com/lukas-reineke/lsp-format.nvim/,HEAD,
https://github.com/lvimuser/lsp-inlayhints.nvim/,HEAD,
@@ -970,7 +970,7 @@ let
version = "0.8.25";
}
// sources.${stdenv.system};
nativeBuildInputs = [ autoPatchelfHook ];
nativeBuildInputs = lib.optionals stdenv.isLinux [ autoPatchelfHook ];
buildInputs = [ stdenv.cc.cc.lib ];
meta = {
description = "Open-source autopilot for software development - bring the power of ChatGPT to your IDE";
@@ -1,10 +1,8 @@
{ lib
, stdenv
, fetchFromGitHub
, fetchpatch
, callPackage
, patchelf
, unzip
, poco
, openssl
, SDL2
@@ -16,18 +14,18 @@
}:
let
version = "2.8.1";
version = "2.8.2";
craftos2-lua = fetchFromGitHub {
owner = "MCJack123";
repo = "craftos2-lua";
rev = "v${version}";
hash = "sha256-8bl83AOIWtUQ06F2unYEF08VT13o9EGo9YDZpdNxd8w=";
hash = "sha256-Kv0supnYKWLaVqOeZAzQNd3tQRP2KJugZqytyoj8QtY=";
};
craftos2-rom = fetchFromGitHub {
owner = "McJack123";
repo = "craftos2-rom";
rev = "v${version}";
hash = "sha256-aCRJ3idSrRM8ydt8hP8nA1RR0etPnWpQKphXcOGgTfk=";
hash = "sha256-5ZsLsqrkO02NLJCzsgf0k/ifsqNybTi4DcB9GLmWDHw=";
};
in
@@ -39,7 +37,7 @@ stdenv.mkDerivation rec {
owner = "MCJack123";
repo = "craftos2";
rev = "v${version}";
hash = "sha256-iQCv4EDdqmnU0fYxMwpCZ2Z5p43P0MGBNIG/dZrWndg=";
hash = "sha256-ozebHgUgwdqYtWAyL+EdwpjEvZC+PkWcLYCPWz2FjSw=";
};
buildInputs = [ patchelf poco openssl SDL2 SDL2_mixer ncurses libpng pngpp libwebp ];
+2 -2
View File
@@ -5,14 +5,14 @@
python3.pkgs.buildPythonApplication rec {
pname = "urlscan";
version = "1.0.1";
version = "1.0.2";
format = "pyproject";
src = fetchFromGitHub {
owner = "firecat53";
repo = pname;
rev = "refs/tags/${version}";
hash = "sha256-OzcoOIgEiadWrsUPIxBJTuZQYjScJBYKyqCu1or6fz8=";
hash = "sha256-nyq4BrpfbZwK/nOnB8ZEN1wlM8CssYVRvV7ytpX7k40=";
};
nativeBuildInputs = with python3.pkgs; [
@@ -248,8 +248,8 @@ let
# Partial revert of https://github.com/chromium/chromium/commit/3687976b0c6d36cf4157419a24a39f6770098d61
# allowing us to use our rustc and our clang.
./patches/chromium-121-rust.patch
] ++ lib.optionals (chromiumVersionAtLeast "124" && !chromiumVersionAtLeast "125") [
# M124 shipped with broken --ozone-platform-hint flag handling, which we rely on
] ++ lib.optionals (chromiumVersionAtLeast "124" && !chromiumVersionAtLeast "124.0.6367.118") [
# M124 < 124.0.6367.118 shipped with broken --ozone-platform-hint flag handling, which we rely on
# for our NIXOS_OZONE_WL (wayland) environment variable.
# See <https://issues.chromium.org/issues/329678163>.
# This is the commit for the fix that landed in M125, which applies clean on M124.
@@ -15,9 +15,9 @@
version = "2024-03-14";
};
};
hash = "sha256-tajZtdiXgs5lRLTmDmgNTM2vD+N+LuWpBS0dYzxUsMA=";
hash_deb_amd64 = "sha256-CyCbZQ5ce8WLTt2JVSqbDkLDboE4BloiZ8pJff3dmSY=";
version = "124.0.6367.91";
hash = "sha256-+r/48dxipSAo74v1deMuKalW+Hj85hCun63ZcgLYDLk=";
hash_deb_amd64 = "sha256-H3bv6WiVBl4j38ROZ80+SD9UO9ok+xxcKFxDd9yjWNY=";
version = "124.0.6367.118";
};
ungoogled-chromium = {
deps = {
@@ -1,17 +1,17 @@
{ callPackage }:
{
helm-cm-push = callPackage ./helm-cm-push.nix { };
helm-diff = callPackage ./helm-diff.nix { };
helm-git = callPackage ./helm-git.nix { };
helm-cm-push = callPackage ./helm-cm-push.nix { };
helm-mapkubeapis = callPackage ./helm-mapkubeapis.nix { };
helm-s3 = callPackage ./helm-s3.nix { };
helm-secrets = callPackage ./helm-secrets.nix { };
helm-unittest = callPackage ./helm-unittest.nix { };
}
@@ -0,0 +1,34 @@
{ buildGoModule, fetchFromGitHub, lib }:
buildGoModule rec {
pname = "helm-mapkubeapis";
version = "0.4.1";
src = fetchFromGitHub {
owner = "helm";
repo = "helm-mapkubeapis";
rev = "v${version}";
hash = "sha256-6NeePXTdp5vlBLfIlWeXQZMZ0Uz/e1ZCgZmJvBJfaFw=";
};
vendorHash = "sha256-rVrQqeakPQl3rjzmqzHw74ffreLEVzP153wWJ8TEOIM=";
# NOTE: Remove the install and upgrade hooks.
postPatch = ''
sed -i '/^hooks:/,+2 d' plugin.yaml
'';
postInstall = ''
install -dm755 $out/helm-mapkubeapis
mv $out/bin $out/helm-mapkubeapis/
install -m644 -Dt $out/helm-mapkubeapis/config/ config/Map.yaml
install -m644 -Dt $out/helm-mapkubeapis plugin.yaml
'';
meta = {
description = "A Helm plugin which maps deprecated or removed Kubernetes APIs in a release to supported APIs";
homepage = "https://github.com/helm/helm-mapkubeapis";
license = with lib.licenses; [ asl20 ];
maintainers = with lib.maintainers; [ aos ];
};
}
@@ -14,22 +14,22 @@
let
package = buildGoModule rec {
pname = "opentofu";
version = "1.6.2";
version = "1.7.0";
src = fetchFromGitHub {
owner = "opentofu";
repo = "opentofu";
rev = "v${version}";
hash = "sha256-CYiwn2NDIAx30J8tmbrV45dbCIGoA3U+yBdMj4RX5Ho=";
hash = "sha256-e0u8aFua3oMsBafwRPYuWQ9M6DtC7f9LlCDGJ5vdAWE=";
};
vendorHash = "sha256-kSm5RZqQRgbmPaKt5IWmuMhHwAu+oJKTX1q1lbE7hWk=";
vendorHash = "sha256-cML742FfWFNIwGyIdRd3JWcfDlOXnJVgUXz4j5fa74Q=";
ldflags = [ "-s" "-w" "-X" "github.com/opentofu/opentofu/version.dev=no" ];
postConfigure = ''
# speakeasy hardcodes /bin/stty https://github.com/bgentry/speakeasy/issues/22
substituteInPlace vendor/github.com/bgentry/speakeasy/speakeasy_unix.go \
--replace "/bin/stty" "${coreutils}/bin/stty"
--replace-fail "/bin/stty" "${coreutils}/bin/stty"
'';
nativeBuildInputs = [ installShellFiles ];
@@ -2,16 +2,16 @@
buildGoModule rec {
pname = "stern";
version = "1.28.0";
version = "1.29.0";
src = fetchFromGitHub {
owner = "stern";
repo = "stern";
rev = "v${version}";
sha256 = "sha256-Lx5f2dqjdhgMXky1Pv2ik9i56ugsQmZK/ag4veC9Dac=";
sha256 = "sha256-8Tvhul7GwVbRJqJenbYID8OY5zGzFhIormUwEtLE0Lw=";
};
vendorHash = "sha256-6jI/I7Nw/vJwKNvgH/35uHYu51SBX+WFH5s0WKfCqBo=";
vendorHash = "sha256-RLcF7KfKtkwB+nWzaQb8Va9pau+TS2uE9AmJ0aFNsik=";
subPackages = [ "." ];
+2 -2
View File
@@ -12,7 +12,7 @@
}:
let
version = "2023.09.06";
version = "2024.04.17";
dropboxd = "${dropbox}/bin/dropbox";
in
stdenv.mkDerivation {
@@ -23,7 +23,7 @@ stdenv.mkDerivation {
src = fetchurl {
url = "https://linux.dropbox.com/packages/nautilus-dropbox-${version}.tar.bz2";
hash = "sha256-kZMwj8Fn8Hf58C57wE025TlmiSs5TaKMGEzvb2QjgSw=";
hash = "sha256-pqCYzxaqR0f0CBaseT1Z436K47cIDQswYR1sK4Zj8sE=";
};
strictDeps = true;
+16 -29
View File
@@ -1,40 +1,27 @@
{ stdenv, lib, fetchurl, dpkg, makeWrapper, electron }:
{ lib
, appimageTools
, fetchurl }:
stdenv.mkDerivation rec {
appimageTools.wrapType2 rec {
pname = "clockify";
version = "2.1.6";
version = "2.1.17.1354";
src = fetchurl {
url = "https://web.archive.org/web/20231110130133/https://clockify.me/downloads/Clockify_Setup_x64.deb";
hash = "sha256-jndoMk3vqk8a5jMzKVo6ThovSISmcu+hef9IJcg3reQ=";
url = "https://web.archive.org/web/20240406052908/https://clockify.me/downloads/Clockify_Setup.AppImage";
hash = "sha256-G5VOAf6PrjHUsnk7IlXdqJ2D941cnggjuHkkgrOaVaA=";
};
nativeBuildInputs = [
dpkg
makeWrapper
];
extraInstallCommands =
let appimageContents = appimageTools.extract { inherit pname version src; };
in ''
mv $out/bin/${pname}-${version} $out/bin/${pname}
dontBuild = true;
dontConfigure = true;
install -Dm 444 ${appimageContents}/clockify.desktop -t $out/share/applications
install -Dm 444 ${appimageContents}/clockify.png -t $out/share/pixmaps
unpackPhase = ''
dpkg-deb -x ${src} ./
'';
installPhase = ''
runHook preInstall
mv usr $out
mv opt $out
substituteInPlace $out/share/applications/clockify.desktop \
--replace "/opt/Clockify/" ""
makeWrapper ${electron}/bin/electron $out/bin/clockify \
--add-flags $out/opt/Clockify/resources/app.asar
runHook postInstall
'';
substituteInPlace $out/share/applications/clockify.desktop \
--replace 'Exec=AppRun' 'Exec=${pname}'
'';
meta = with lib; {
description = "Free time tracker and timesheet app that lets you track work hours across projects";
@@ -58,6 +58,10 @@ let
# may wish to wrap GR without python support.
pythonPkgs = extraPythonPackages
++ [ (unwrapped.python.pkgs.toPythonModule unwrapped) ]
++ unwrapped.passthru.uhd.pythonPath
++ lib.optionals (unwrapped.passthru.uhd.pythonPath != []) [
(unwrapped.python.pkgs.toPythonModule unwrapped.passthru.uhd)
]
# Add the extraPackages as python modules as well
++ (builtins.map unwrapped.python.pkgs.toPythonModule extraPackages)
++ lib.flatten (lib.mapAttrsToList (
+92 -53
View File
@@ -8,15 +8,8 @@
, boost
, ncurses
, enableCApi ? true
# Although we handle the Python API's dependencies in pythonEnvArg, this
# feature is currently disabled as upstream attempts to run `python setup.py
# install` by itself, and it fails because the Python's environment's prefix is
# not a writable directly. Adding support for this feature would require using
# python's pypa/build nad pypa/install hooks directly, and currently it is hard
# to do that because it all happens after a long buildPhase of the C API.
, enablePythonApi ? false
, enablePythonApi ? true
, python3
, buildPackages
, enableExamples ? false
, enableUtils ? true
, libusb1
@@ -38,13 +31,7 @@
}:
let
onOffBool = b: if b then "ON" else "OFF";
inherit (lib) optionals;
# Later used in pythonEnv generation. Python + mako are always required for the build itself but not necessary for runtime.
pythonEnvArg = (ps: with ps; [ mako ]
++ optionals (enablePythonApi) [ numpy setuptools ]
++ optionals (enableUtils) [ requests six ]
);
inherit (lib) optionals cmakeBool;
in
stdenv.mkDerivation (finalAttrs: {
@@ -72,7 +59,30 @@ stdenv.mkDerivation (finalAttrs: {
# hash.
sha256 = "17g503mhndaabrdl7qai3rdbafr8xx8awsyr7h2bdzwzprzmh4m3";
};
# This are the minimum required Python dependencies, this attribute might
# be useful if you want to build a development environment with a python
# interpreter able to import the uhd module.
pythonPath = optionals (enablePythonApi || enableUtils) [
python3.pkgs.numpy
python3.pkgs.setuptools
] ++ optionals (enableUtils) [
python3.pkgs.requests
python3.pkgs.six
/* These deps are needed for the usrp_hwd.py utility, however even if they
would have been added here, the utility wouldn't have worked because it
depends on an old python library mprpc that is not supported for Python >
3.8. See also report upstream:
https://github.com/EttusResearch/uhd/issues/744
python3.pkgs.gevent
python3.pkgs.pyudev
python3.pkgs.pyroute2
*/
];
passthru = {
runtimePython = python3.withPackages (ps: finalAttrs.pythonPath);
updateScript = [
./update.sh
# Pass it this file name as argument
@@ -83,66 +93,91 @@ stdenv.mkDerivation (finalAttrs: {
cmakeFlags = [
"-DENABLE_LIBUHD=ON"
"-DENABLE_USB=ON"
"-DENABLE_TESTS=ON" # This installs tests as well so we delete them via postPhases
"-DENABLE_EXAMPLES=${onOffBool enableExamples}"
"-DENABLE_UTILS=${onOffBool enableUtils}"
"-DENABLE_C_API=${onOffBool enableCApi}"
"-DENABLE_PYTHON_API=${onOffBool enablePythonApi}"
"-DENABLE_DPDK=${onOffBool enableDpdk}"
# Regardless of doCheck, we want to build the tests to help us gain
# confident that the package is OK.
"-DENABLE_TESTS=ON"
(cmakeBool "ENABLE_EXAMPLES" enableExamples)
(cmakeBool "ENABLE_UTILS" enableUtils)
(cmakeBool "ENABLE_C_API" enableCApi)
(cmakeBool "ENABLE_PYTHON_API" enablePythonApi)
/*
Otherwise python tests fail. Using a dedicated pythonEnv for either or both
nativeBuildInputs and buildInputs makes upstream's cmake scripts fail to
install the Python API as reported on our end at [1] (we don't want
upstream to think we are in a virtual environment because we use
python3.withPackages...).
Putting simply the python dependencies in the nativeBuildInputs and
buildInputs as they are now from some reason makes the `python` in the
checkPhase fail to find the python dependencies, as reported at [2]. Even
using nativeCheckInputs with the python dependencies, or using a
`python3.withPackages` wrapper in nativeCheckInputs, doesn't help, as the
`python` found in $PATH first is the one from nativeBuildInputs.
[1]: https://github.com/NixOS/nixpkgs/pull/307435
[2]: https://discourse.nixos.org/t/missing-python-package-in-checkphase/9168/
Hence we use upstream's provided cmake flag to control which python
interpreter they will use to run the the python tests.
*/
"-DRUNTIME_PYTHON_EXECUTABLE=${lib.getExe finalAttrs.passthru.runtimePython}"
(cmakeBool "ENABLE_DPDK" enableDpdk)
# Devices
"-DENABLE_OCTOCLOCK=${onOffBool enableOctoClock}"
"-DENABLE_MPMD=${onOffBool enableMpmd}"
"-DENABLE_B100=${onOffBool enableB100}"
"-DENABLE_B200=${onOffBool enableB200}"
"-DENABLE_USRP1=${onOffBool enableUsrp1}"
"-DENABLE_USRP2=${onOffBool enableUsrp2}"
"-DENABLE_X300=${onOffBool enableX300}"
"-DENABLE_N300=${onOffBool enableN300}"
"-DENABLE_N320=${onOffBool enableN320}"
"-DENABLE_E300=${onOffBool enableE300}"
"-DENABLE_E320=${onOffBool enableE320}"
]
(cmakeBool "ENABLE_OCTOCLOCK" enableOctoClock)
(cmakeBool "ENABLE_MPMD" enableMpmd)
(cmakeBool "ENABLE_B100" enableB100)
(cmakeBool "ENABLE_B200" enableB200)
(cmakeBool "ENABLE_USRP1" enableUsrp1)
(cmakeBool "ENABLE_USRP2" enableUsrp2)
(cmakeBool "ENABLE_X300" enableX300)
(cmakeBool "ENABLE_N300" enableN300)
(cmakeBool "ENABLE_N320" enableN320)
(cmakeBool "ENABLE_E300" enableE300)
(cmakeBool "ENABLE_E320" enableE320)
# TODO: Check if this still needed
# ABI differences GCC 7.1
# /nix/store/wd6r25miqbk9ia53pp669gn4wrg9n9cj-gcc-7.3.0/include/c++/7.3.0/bits/vector.tcc:394:7: note: parameter passing for argument of type 'std::vector<uhd::range_t>::iterator {aka __gnu_cxx::__normal_iterator<uhd::range_t*, std::vector<uhd::range_t> >}' changed in GCC 7.1
++ [ (lib.optionalString stdenv.isAarch32 "-DCMAKE_CXX_FLAGS=-Wno-psabi") ]
;
pythonEnv = python3.withPackages pythonEnvArg;
] ++ optionals stdenv.isAarch32 [
"-DCMAKE_CXX_FLAGS=-Wno-psabi"
];
nativeBuildInputs = [
cmake
pkg-config
# Present both here and in buildInputs for cross compilation.
(buildPackages.python3.withPackages pythonEnvArg)
python3
python3.pkgs.mako
# We add this unconditionally, but actually run wrapPythonPrograms only if
# python utilities are enabled
python3.pkgs.wrapPython
];
buildInputs = [
buildInputs = finalAttrs.pythonPath ++ [
boost
libusb1
]
# However, if enableLibuhd_Python_api *or* enableUtils is on, we need
# pythonEnv for runtime as well. The utilities' runtime dependencies are
# handled at the environment
++ optionals (enableExamples) [ ncurses ncurses.dev ]
++ optionals (enablePythonApi || enableUtils) [ finalAttrs.pythonEnv ]
++ optionals (enableDpdk) [ dpdk ]
;
] ++ optionals (enableExamples) [
ncurses ncurses.dev
] ++ optionals (enableDpdk) [
dpdk
];
# many tests fails on darwin, according to ofborg
doCheck = !stdenv.isDarwin;
# Build only the host software
preConfigure = "cd host";
# TODO: Check if this still needed, perhaps relevant:
# https://files.ettus.com/manual_archive/v3.15.0.0/html/page_build_guide.html#build_instructions_unix_arm
patches = [
# Disable tests that fail in the sandbox
# Disable tests that fail in the sandbox, last checked at version 4.6.0.0
./no-adapter-tests.patch
];
postPhases = [ "installFirmware" "removeInstalledTests" ]
++ optionals (enableUtils && stdenv.hostPlatform.isLinux) [ "moveUdevRules" ]
;
postPhases = [
"installFirmware"
"removeInstalledTests"
] ++ optionals (enableUtils && stdenv.hostPlatform.isLinux) [
"moveUdevRules"
];
# UHD expects images in `$CMAKE_INSTALL_PREFIX/share/uhd/images`
installFirmware = ''
@@ -162,6 +197,10 @@ stdenv.mkDerivation (finalAttrs: {
mv $out/lib/uhd/utils/uhd-usrp.rules $out/lib/udev/rules.d/
'';
# Wrap the python utilities with our pythonPath definition
postFixup = lib.optionalString (enablePythonApi && enableUtils) ''
wrapPythonPrograms
'';
disallowedReferences = optionals (!enablePythonApi && !enableUtils) [
python3
];
@@ -3,17 +3,18 @@
}:
let
pname = "digital";
pkgDescription = "A digital logic designer and circuit simulator.";
version = "0.30";
buildDate = "2023-02-03T08:00:56+01:00"; # v0.30 commit date
desktopItem = makeDesktopItem {
type = "Application";
name = "Digital";
desktopName = pkgDescription;
name = pname;
desktopName = "Digital";
comment = "Easy-to-use digital logic designer and circuit simulator";
exec = "digital";
icon = "digital";
exec = pname;
icon = pname;
categories = [ "Education" "Electronics" ];
mimeTypes = [ "text/x-digital" ];
terminal = false;
@@ -28,8 +29,7 @@ let
mvnParameters = "-Pno-git-rev -Dgit.commit.id.describe=${version} -Dproject.build.outputTimestamp=${buildDate} -DbuildTimestamp=${buildDate}";
in
maven.buildMavenPackage rec {
pname = "digital";
inherit version jre;
inherit pname version jre;
src = fetchFromGitHub {
owner = "hneemann";
@@ -44,6 +44,8 @@ maven.buildMavenPackage rec {
nativeBuildInputs = [ copyDesktopItems makeWrapper ];
installPhase = ''
runHook preInstall
mkdir -p $out/bin
mkdir -p $out/share/java
@@ -53,6 +55,13 @@ maven.buildMavenPackage rec {
makeWrapper ${jre}/bin/java $out/bin/${pname} \
--add-flags "-classpath $out/share/java/${pname}-${version}.jar:''${classpath#:}" \
--add-flags "-jar $out/share/java/Digital.jar"
install -Dm644 src/main/svg/icon.svg $out/share/icons/hicolor/scalable/apps/${pname}.svg
for size in 16 32 48 64 128; do
install -Dm644 src/main/resources/icons/icon"$size".png $out/share/icons/hicolor/"$size"x"$size"/apps/${pname}.png
done
runHook postInstall
'';
desktopItems = [ desktopItem ];
@@ -16,11 +16,11 @@
stdenv.mkDerivation rec {
pname = "gtkwave";
version = "3.3.118";
version = "3.3.119";
src = fetchurl {
url = "mirror://sourceforge/gtkwave/${pname}-gtk3-${version}.tar.gz";
sha256 = "sha256-D0MwwCiiqz0vTUzur222kl2wEMS2/VLRECLQ5d6gSGo=";
sha256 = "sha256-6rPgnnZBEVwHhIv7MPfdDDu+K4y+RQF+leB327pqwDg=";
};
nativeBuildInputs = [ pkg-config wrapGAppsHook ];
@@ -1,58 +0,0 @@
diff --git a/src/sage/libs/linbox/conversion.pxd b/src/sage/libs/linbox/conversion.pxd
index 7794c9edc3..1753277b1f 100644
--- a/src/sage/libs/linbox/conversion.pxd
+++ b/src/sage/libs/linbox/conversion.pxd
@@ -177,9 +177,8 @@ cdef inline Vector_integer_dense new_sage_vector_integer_dense(P, DenseVector_in
- v -- linbox vector
"""
cdef Vector_integer_dense res = P()
- cdef cppvector[Integer] * vec = &v.refRep()
cdef size_t i
for i in range(<size_t> res._degree):
- mpz_set(res._entries[i], vec[0][i].get_mpz_const())
+ mpz_set(res._entries[i], v.getEntry(i).get_mpz_const())
return res
diff --git a/src/sage/libs/linbox/linbox.pxd b/src/sage/libs/linbox/linbox.pxd
index 9112d151f8..dcc482960c 100644
--- a/src/sage/libs/linbox/linbox.pxd
+++ b/src/sage/libs/linbox/linbox.pxd
@@ -32,7 +32,7 @@ cdef extern from "linbox/matrix/dense-matrix.h":
ctypedef Modular_double Field
ctypedef double Element
DenseMatrix_Modular_double(Field F, size_t m, size_t n)
- DenseMatrix_Modular_double(Field F, Element*, size_t m, size_t n)
+ DenseMatrix_Modular_double(Field F, size_t m, size_t n, Element*)
void setEntry(size_t i, size_t j, Element& a)
Element &getEntry(size_t i, size_t j)
@@ -42,7 +42,7 @@ cdef extern from "linbox/matrix/dense-matrix.h":
ctypedef Modular_float Field
ctypedef float Element
DenseMatrix_Modular_float(Field F, size_t m, size_t n)
- DenseMatrix_Modular_float(Field F, Element*, size_t m, size_t n)
+ DenseMatrix_Modular_float(Field F, size_t m, size_t n, Element*)
void setEntry(size_t i, size_t j, Element& a)
Element &getEntry(size_t i, size_t j)
@@ -101,7 +101,6 @@ cdef extern from "linbox/vector/vector.h":
DenseVector_integer (Field &F)
DenseVector_integer (Field &F, long& m)
DenseVector_integer (Field &F, cppvector[Integer]&)
- cppvector[Element]& refRep()
size_t size()
void resize(size_t)
void resize(size_t n, const Element&)
diff --git a/src/sage/matrix/matrix_modn_dense_template.pxi b/src/sage/matrix/matrix_modn_dense_template.pxi
index 010365d76f..3d60726ff9 100644
--- a/src/sage/matrix/matrix_modn_dense_template.pxi
+++ b/src/sage/matrix/matrix_modn_dense_template.pxi
@@ -219,7 +219,7 @@ cdef inline linbox_echelonize_efd(celement modulus, celement* entries, Py_ssize_
return 0,[]
cdef ModField *F = new ModField(<long>modulus)
- cdef DenseMatrix *A = new DenseMatrix(F[0], <ModField.Element*>entries,<Py_ssize_t>nrows, <Py_ssize_t>ncols)
+ cdef DenseMatrix *A = new DenseMatrix(F[0], <Py_ssize_t>nrows, <Py_ssize_t>ncols, <ModField.Element*>entries)
cdef Py_ssize_t r = reducedRowEchelonize(A[0])
cdef Py_ssize_t i,j
for i in range(nrows):
@@ -1,75 +0,0 @@
diff --unified --recursive a/src/gui/TopologyTools.cc b/src/gui/TopologyTools.cc
--- a/src/gui/TopologyTools.cc 2021-07-05 05:11:47.000000000 +0200
+++ b/src/gui/TopologyTools.cc 2022-12-07 22:35:20.444054124 +0100
@@ -3448,7 +3448,7 @@
std::find_if(
d_visible_boundary_section_seq.begin(),
d_visible_boundary_section_seq.end(),
- boost::bind(&VisibleSection::d_section_info_index, _1) ==
+ boost::bind(&VisibleSection::d_section_info_index, boost::placeholders::_1) ==
boost::cref(section_index));
if (visible_section_iter == d_visible_boundary_section_seq.end())
@@ -3467,7 +3467,7 @@
std::find_if(
d_visible_interior_section_seq.begin(),
d_visible_interior_section_seq.end(),
- boost::bind(&VisibleSection::d_section_info_index, _1) ==
+ boost::bind(&VisibleSection::d_section_info_index, boost::placeholders::_1) ==
boost::cref(section_index));
if (visible_section_iter == d_visible_interior_section_seq.end())
diff --unified --recursive a/src/presentation/ReconstructionGeometryRenderer.cc b/src/presentation/ReconstructionGeometryRenderer.cc
--- a/src/presentation/ReconstructionGeometryRenderer.cc 2021-07-05 05:11:50.000000000 +0200
+++ b/src/presentation/ReconstructionGeometryRenderer.cc 2022-12-07 22:36:11.117884262 +0100
@@ -274,7 +274,7 @@
GPlatesPresentation::ReconstructionGeometryRenderer::RenderParamsPopulator::visit_reconstruct_visual_layer_params(
const ReconstructVisualLayerParams &params)
{
- d_render_params.show_vgp = boost::bind(&ReconstructVisualLayerParams::show_vgp, &params, _1, _2);
+ d_render_params.show_vgp = boost::bind(&ReconstructVisualLayerParams::show_vgp, &params, boost::placeholders::_1, boost::placeholders::_2);
d_render_params.vgp_draw_circular_error = params.get_vgp_draw_circular_error();
d_render_params.fill_polygons = params.get_fill_polygons();
d_render_params.fill_polylines = params.get_fill_polylines();
diff --unified --recursive a/src/presentation/VisualLayerRegistry.cc b/src/presentation/VisualLayerRegistry.cc
--- a/src/presentation/VisualLayerRegistry.cc 2021-07-05 05:11:50.000000000 +0200
+++ b/src/presentation/VisualLayerRegistry.cc 2022-12-07 22:38:12.950877614 +0100
@@ -448,7 +448,7 @@
&GPlatesQtWidgets::ReconstructScalarCoverageLayerOptionsWidget::create,
boost::bind(
&ReconstructScalarCoverageVisualLayerParams::create,
- _1),
+ boost::placeholders::_1),
true);
registry.register_visual_layer_type(
@@ -498,7 +498,7 @@
// NOTE: We pass in ViewState and not the GlobeAndMapWidget, obtained from
// ViewportWindow, because ViewportWindow is not yet available (a reference to
// it not yet been initialised inside ViewState) so accessing it would crash...
- _1, boost::ref(view_state)),
+ boost::placeholders::_1, boost::ref(view_state)),
true);
// DERIVED_DATA group.
@@ -549,7 +549,7 @@
&GPlatesQtWidgets::VelocityFieldCalculatorLayerOptionsWidget::create,
boost::bind(
&VelocityFieldCalculatorVisualLayerParams::create,
- _1, boost::cref(view_state.get_rendered_geometry_parameters())),
+ boost::placeholders::_1, boost::cref(view_state.get_rendered_geometry_parameters())),
true);
using namespace GPlatesUtils;
diff --unified --recursive a/src/qt-widgets/ViewportWindow.cc b/src/qt-widgets/ViewportWindow.cc
--- a/src/qt-widgets/ViewportWindow.cc 2021-08-05 05:44:01.000000000 +0200
+++ b/src/qt-widgets/ViewportWindow.cc 2022-12-07 22:39:20.487981302 +0100
@@ -326,7 +326,7 @@
*d_geometry_operation_state_ptr,
*d_modify_geometry_state,
*d_measure_distance_state_ptr,
- boost::bind(&canvas_tool_status_message, boost::ref(*this), _1),
+ boost::bind(&canvas_tool_status_message, boost::ref(*this), boost::placeholders::_1),
get_view_state(),
*this);
@@ -1,13 +0,0 @@
diff --git a/source/thirdparty/breakpad/src/client/linux/handler/exception_handler.cc b/source/thirdparty/breakpad/src/client/linux/handler/exception_handler.cc
index ca353c4099..499be0a986 100644
--- a/source/thirdparty/breakpad/src/client/linux/handler/exception_handler.cc
+++ b/source/thirdparty/breakpad/src/client/linux/handler/exception_handler.cc
@@ -138,7 +138,7 @@ void InstallAlternateStackLocked() {
// SIGSTKSZ may be too small to prevent the signal handlers from overrunning
// the alternative stack. Ensure that the size of the alternative stack is
// large enough.
- static const unsigned kSigStackSize = std::max(16384, SIGSTKSZ);
+ const unsigned kSigStackSize = std::max<unsigned>(16384, SIGSTKSZ);
// Only set an alternative stack if there isn't already one, or if the current
// one is too small.
@@ -2,13 +2,13 @@
stdenv.mkDerivation rec {
pname = "tym";
version = "3.5.0";
version = "3.5.1";
src = fetchFromGitHub {
owner = "endaaman";
repo = "${pname}";
rev = version;
sha256 = "sha256-aXV3TNjHxg/9Lb2o+ci5/cCAPbkWhxqOka3wv21ajSA=";
sha256 = "sha256-53XAHyDiFPUTmw/rgoEoSoh+c/t4rS12gxwH1yKHqvw=";
};
nativeBuildInputs = [
@@ -1,17 +1,22 @@
{ lib, fetchFromGitHub, rustPlatform }:
{
lib,
fetchFromGitHub,
rustPlatform,
}:
rustPlatform.buildRustPackage rec {
rustPlatform.buildRustPackage {
pname = "git-vanity-hash";
version = "1.0.0";
src = fetchFromGitHub {
owner = "prasmussen";
repo = "git-vanity-hash";
rev = "v${version}";
hash = "sha256-jD8cSFXf9UNBZ9d8JTnuwhs6nPHY/xGd5RyqF+mQOlo=";
# v1.0.0 + build fix
rev = "a80e7725ac6d0b7e6807cd7315cfdc7eaf0584f6";
hash = "sha256-1z4jbtzUB3SH79dDXAITf7Vup1YZdTLHBieSrhrvSXc=";
};
cargoHash = "sha256-8oW6gRtdQdmSmdwKlcU2EhHsyhk9hFhKl7RtsYwC7Ps=";
cargoHash = "sha256-+SQ0HpURBjnnwH1Ue7IUReOtI4LxVPK9AGSAihs0qsc=";
postInstall = ''
mkdir -p $out/share/doc/git-vanity-hash
@@ -75,6 +75,7 @@ let
modernx-zydezu = callPackage ./modernx-zydezu.nix { };
mpris = callPackage ./mpris.nix { };
mpv-cheatsheet = callPackage ./mpv-cheatsheet.nix { };
mpv-notify-send = callPackage ./mpv-notify-send.nix { };
mpv-osc-modern = callPackage ./mpv-osc-modern.nix { };
mpv-playlistmanager = callPackage ./mpv-playlistmanager.nix { };
mpv-slicing = callPackage ./mpv-slicing.nix { };
@@ -1,4 +1,9 @@
{ lib, fetchFromGitHub, nodePackages, stdenvNoCC }:
{ lib
, fetchFromGitHub
, gitUpdater
, nodePackages
, stdenvNoCC
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "mpv-cheatsheet";
version = "0.30.0.2";
@@ -9,6 +14,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
rev = "v${finalAttrs.version}";
hash = "sha256-MWK0CYto3zgn3fivmL43tvgZn6XrjPxKLp0lgTFdplM=";
};
passthru.updateScript = gitUpdater { rev-prefix = "v"; };
nativeBuildInputs = [
nodePackages.browserify
@@ -0,0 +1,39 @@
{ lib
, buildLua
, fetchFromGitHub
, fetchpatch
, unstableGitUpdater
, libnotify }:
buildLua rec {
pname = "mpv-notify-send";
version = "0-unstable-2020-02-24";
src = fetchFromGitHub {
owner = "emilazy";
repo = pname;
rev = "a2bab8b2fd8e8d14faa875b5cc3a73f1276cd88a";
sha256 = "sha256-EwVkhyB87TJ3i9xJmmZMSTMUKvfbImI1S+y1vgRWbDk=";
};
patches = [
# show title of online videos instead of url
(fetchpatch {
url = "https://github.com/emilazy/mpv-notify-send/pull/6.patch";
hash = "sha256-7aXQ8qeqG4yX0Uyn09xCIESnwPZsb6Frd7C49XgbpFw=";
})
];
passthru.extraWrapperArgs = [
"--prefix" "PATH" ":" (lib.makeBinPath libnotify)
];
passthru.updateScript = unstableGitUpdater { };
meta = with lib; {
description = "A Lua script for mpv to send notifications with notify-send";
homepage = "https://github.com/emilazy/mpv-notify-send";
license = licenses.wtfpl;
maintainers = with maintainers; [ r3n3gad3p3arl ];
};
}
@@ -3,6 +3,7 @@
buildLua,
fetchFromGitHub,
ffmpeg,
unstableGitUpdater,
}:
buildLua {
@@ -15,6 +16,7 @@ buildLua {
rev = "d09c11227704c8d5bdaa2c799ef64dce881c63a7";
hash = "sha256-MKoM0f74/XoctiHQVOB3LzFWtJXpsREfQh5icaebCJo=";
};
passthru.updateScript = unstableGitUpdater { };
postPatch = ''
substituteInPlace slicing.lua \
@@ -12,15 +12,16 @@
, libxkbcommon
, pkg-config
}:
stdenv.mkDerivation rec {
pname = "showmethekey";
version = "1.12.0";
version = "1.13.0";
src = fetchFromGitHub {
owner = "AlynxZhou";
repo = pname;
rev = "v${version}";
hash = "sha256-eeObomb4Gv/vpvViHsi3+O0JR/rYamrlZNZaXKL6KJw=";
repo = "showmethekey";
rev = "refs/tags/v${version}";
hash = "sha256-pVFkO/+a7GAOXbYBfU0zcO/uD26PX+y02bEZa3f1ZP8=";
};
nativeBuildInputs = [
@@ -40,8 +41,9 @@ stdenv.mkDerivation rec {
];
meta = with lib; {
homepage = "https://showmethekey.alynx.one/";
description = "Show keys you typed on screen";
homepage = "https://showmethekey.alynx.one/";
changelog = "https://github.com/AlynxZhou/showmethekey/releases/tag/v${version}";
license = licenses.asl20;
platforms = platforms.linux;
maintainers = with maintainers; [ ocfox ];
@@ -15,13 +15,13 @@
buildGoModule rec {
pname = "cri-o";
version = "1.29.3";
version = "1.29.4";
src = fetchFromGitHub {
owner = "cri-o";
repo = "cri-o";
rev = "v${version}";
hash = "sha256-JJuqYC4GAZqXyyAjVoPipnGjRGbVx1rfH4UrtIOP7cc=";
hash = "sha256-bF9hvKKwhsmX606Jk34qn32JklUrG939BW2x4tbknjo=";
};
vendorHash = null;
@@ -7,20 +7,30 @@
, mesa
, pango
, udev
, shaderc
, libglvnd
, vulkan-loader
, autoPatchelfHook
}:
rustPlatform.buildRustPackage rec {
pname = "jay";
version = "unstable-2022-11-20";
version = "1.1.0";
src = fetchFromGitHub {
owner = "mahkoh";
repo = pname;
rev = "09b4668a5363a6e93dfb8ba35b244835f4edb0f2";
sha256 = "sha256-0IIzXY7AFTGEe0TzJVKOtTPUZee0Wz40yKgEWLeIYJw=";
rev = "v${version}";
sha256 = "sha256-9fWwVUqeYADt33HGaJRRFmM20WM7qRWbNGpt3rk9xQM=";
};
cargoSha256 = "sha256-zSq6YBlm6gJXGlF9xZ8gWSTMewdNqrJzwP58a0x8QIU=";
cargoSha256 = "sha256-oPGY/rVx94BkWgKkwwyDjfASMyGGU32R5IZuNjOv+EM=";
SHADERC_LIB_DIR = "${lib.getLib shaderc}/lib";
nativeBuildInputs = [
autoPatchelfHook
];
buildInputs = [
libGL
@@ -29,9 +39,18 @@ rustPlatform.buildRustPackage rec {
pango
udev
libinput
shaderc
];
RUSTC_BOOTSTRAP = 1;
runtimeDependencies = [
libglvnd
vulkan-loader
];
postInstall = ''
install -D etc/jay.portal $out/usr/share/xdg-desktop-portal/portals/jay.portal
install -D etc/jay-portals.conf $out/usr/share/xdg-desktop-portal/jay-portals.conf
'';
meta = with lib; {
description = "A Wayland compositor written in Rust";
@@ -27,9 +27,9 @@ composerInstallConfigureHook() {
setComposeRootVersion
composer \
--no-ansi \
--no-install \
--no-interaction \
--no-progress \
${composerNoDev:+--no-dev} \
${composerNoPlugins:+--no-plugins} \
${composerNoScripts:+--no-scripts} \
@@ -104,8 +104,8 @@ composerInstallInstallHook() {
# Finally, run `composer install` to install the dependencies and generate
# the autoloader.
composer \
--no-ansi \
--no-interaction \
--no-progress \
${composerNoDev:+--no-dev} \
${composerNoPlugins:+--no-plugins} \
${composerNoScripts:+--no-scripts} \
@@ -117,8 +117,9 @@ composerInstallInstallHook() {
# Create symlinks for the binaries.
jq -r -c 'try (.bin[] | select(test(".bat$")? | not) )' composer.json | while read -r bin; do
mkdir -p "$out"/share/php/"${pname}" "$out"/bin
makeWrapper "$out"/share/php/"${pname}"/"$bin" "$out"/bin/"$(basename "$bin")"
echo -e "\e[32mCreating symlink ${bin}...\e[0m"
mkdir -p "$out"/bin
ln -s "$out"/share/php/"${pname}"/"$bin" "$out"/bin/"$(basename "$bin")"
done
echo "Finished composerInstallInstallHook"
@@ -23,9 +23,9 @@ composerRepositoryConfigureHook() {
setComposeRootVersion
composer \
--no-ansi \
--no-install \
--no-interaction \
--no-progress \
${composerNoDev:+--no-dev} \
${composerNoPlugins:+--no-plugins} \
${composerNoScripts:+--no-scripts} \
+1 -2
View File
@@ -4,7 +4,6 @@
, jq
, writeShellApplication
, moreutils
, makeBinaryWrapper
, cacert
, buildPackages
}:
@@ -29,7 +28,7 @@ in
composerInstallHook = makeSetupHook
{
name = "composer-install-hook.sh";
propagatedBuildInputs = [ jq makeBinaryWrapper moreutils cacert ];
propagatedBuildInputs = [ jq moreutils cacert ];
substitutions = {
# Specify the stdenv's `diff` by abspath to ensure that the user's build
# inputs do not cause us to find the wrong `diff`.
+5 -5
View File
@@ -3,18 +3,18 @@
, fetchFromGitHub
}: buildNpmPackage rec {
pname = "arrpc";
version = "3.3.1";
version = "3.4.0";
src = fetchFromGitHub {
owner = "OpenAsar";
repo = "arrpc";
# Release commits are not tagged
# release: 3.3.0
rev = "b4796fffe3bf1b1361cc4781024349f7a4f9400e";
hash = "sha256-iEfV85tRl2KyjodoaSxVHiqweBpLeiCAYWc8+afl/sA=";
# release: 3.4.0
rev = "cca93db585dedf8acc1423f5e2db215de95c4c3b";
hash = "sha256-SeegrCgbjfVxG/9xfOcdfbVdDssZOhjBRnDipu6L7Wg=";
};
npmDepsHash = "sha256-YlSUGncpY0MyTiCfZcPsfcNx3fR+SCtkOFWbjOPLUzk=";
npmDepsHash = "sha256-S9cIyTXqCp8++Yj3VjBbcStOjzjgd0Cq7KL7NNzZFpY=";
dontNpmBuild = true;
+3 -3
View File
@@ -6,16 +6,16 @@
}:
buildGoModule rec {
pname = "athens";
version = "0.13.3";
version = "0.14.0";
src = fetchFromGitHub {
owner = "gomods";
repo = "athens";
rev = "v${version}";
hash = "sha256-psO3x8xLWGSlsZT2HiAvYWP1rCvbWUx+WoJ4eves9lw=";
hash = "sha256-5E9jBV+m19AUtSTpTlkCx8JUHwlcM2pgSGfo4zPqDNk=";
};
vendorHash = "sha256-hk0hmkmhRPRbh2Yqf1lYei6iiKUurMfc1Y3VPNStcBs=";
vendorHash = "sha256-LajNPzGbWqW+9aqiquk2LvSUjKwi1gbDY4cKXmn3PWk=";
CGO_ENABLED = "0";
ldflags = [ "-s" "-w" "-X github.com/gomods/athens/pkg/build.version=${version}" ];
+64
View File
@@ -0,0 +1,64 @@
{ lib
, stdenv
, fetchFromGitHub
, autoconf
, protobuf
, pkg-config
, grpc
, libtool
, which
, automake
, libax25
}:
stdenv.mkDerivation {
pname = "ax25ms";
version = "0-unstable-2024-04-28";
src = fetchFromGitHub {
owner = "ThomasHabets";
repo = "ax25ms";
rev = "c7d7213bb182e4b60f655c3f9f1bcb2b2440406b";
hash = "sha256-GljGJa44topJ6T0g5wuU8GTHLKzNmQqUl8/AR+pw2+I=";
};
buildInputs = [
protobuf
grpc
libax25
];
nativeBuildInputs = [
which
pkg-config
autoconf
libtool
automake
];
preConfigure = ''
patchShebangs scripts
./bootstrap.sh
'';
postInstall = ''
set +e
for binary_path in "$out/bin"/*; do
filename=$(basename "$binary_path")
mv "$binary_path" "$out/bin/ax25ms-$filename"
done
set -e
'';
meta = with lib; {
description = "Set of AX.25 microservices, designed to be pluggable for any implementation";
homepage = "https://github.com/ThomasHabets/ax25ms";
license = licenses.asl20;
maintainers = with maintainers; [
matthewcroughan
sarcasticadmin
pkharvey
];
platforms = platforms.all;
};
}
+28
View File
@@ -0,0 +1,28 @@
{ lib
, buildGoModule
, fetchFromGitHub
}:
buildGoModule rec {
pname = "broom";
version = "0.3.0";
src = fetchFromGitHub {
owner = "a-camarillo";
repo = "broom";
rev = "v${version}";
hash = "sha256-a2hUgYpiKm/dZWLRuCZKuGStmZ/7jDtLRAjd/B57Vxw=";
};
vendorHash = "sha256-zNklqGjMt89b+JOZfKjTO6c75SXO10e7YtQOqqQZpnA=";
ldflags = [ "-s" "-w" ];
meta = with lib; {
description = "An interactive CLI tool for managing local git branches";
homepage = "https://github.com/a-camarillo/broom";
license = licenses.mit;
maintainers = with maintainers; [ a-camarillo ];
mainProgram = "broom";
};
}
+2 -2
View File
@@ -3,11 +3,11 @@
stdenv.mkDerivation (finalAttrs: {
pname = "butt";
version = "0.1.41";
version = "1.41.1";
src = fetchurl {
url = "https://danielnoethen.de/butt/release/${finalAttrs.version}/butt-${finalAttrs.version}.tar.gz";
hash = "sha256-wTypjqd2PpmDSA8vScMLkAL44xE/WAccm747PS9ClVA=";
hash = "sha256-y/XIcFm1TWVd5SL+kDCJc21CtMwipMQgRE4gPra5+98=";
};
postPatch = ''
+3
View File
@@ -7,6 +7,7 @@
, tayga
, iproute2
, iptables
, nixosTests
}:
stdenv.mkDerivation rec {
@@ -52,6 +53,8 @@ stdenv.mkDerivation rec {
}
'';
passthru.tests.clatd = nixosTests.clatd;
meta = with lib; {
description = "A 464XLAT CLAT implementation for Linux";
homepage = "https://github.com/toreanderson/clatd";
File diff suppressed because it is too large Load Diff
+101
View File
@@ -0,0 +1,101 @@
{ lib
, rustPlatform
, fetchFromGitHub
, pkg-config
, wrapGAppsHook
, atk
, cairo
, gdk-pixbuf
, glib
, gtk3
, libsecret
, libxkbcommon
, openssl
, pango
, sqlite
, vulkan-loader
, stdenv
, darwin
, wayland
}:
let
commitDate = "2024-04-30";
in rustPlatform.buildRustPackage rec {
pname = "cosmic-tasks";
version = "0-unstable-${commitDate}";
src = fetchFromGitHub {
owner = "edfloreshz";
repo = "cosmic-tasks";
rev = "020ae8633b23091f113b19f4b6f992e36404f2e2";
hash = "sha256-ZPEzvscLYH4vJ+5Nh5J9m8ZX2jXXDMOLswSnHaCdSdA=";
};
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"accesskit-0.12.2" = "sha256-ksaYMGT/oug7isQY8/1WD97XDUsX2ShBdabUzxWffYw=";
"atomicwrites-0.4.2" = "sha256-QZSuGPrJXh+svMeFWqAXoqZQxLq/WfIiamqvjJNVhxA=";
"clipboard_macos-0.1.0" = "sha256-KVcKQ4DtoZCgFBnejIaQfQxJJJxd/mFzHBI+4PbGBio=";
"cosmic-config-0.1.0" = "sha256-VEE/1XQZaojz9gxTV/Zz++eVplsCfiDPgf/cAr2Rih8=";
"cosmic-text-0.11.2" = "sha256-gUIQFHPaFTmtUfgpVvsGTnw2UKIBx9gl0K67KPuynWs=";
"d3d12-0.19.0" = "sha256-usrxQXWLGJDjmIdw1LBXtBvX+CchZDvE8fHC0LjvhD4=";
"glyphon-0.5.0" = "sha256-j1HrbEpUBqazWqNfJhpyjWuxYAxkvbXzRKeSouUoPWg=";
"smithay-client-toolkit-0.18.0" = "sha256-/7twYMt5/LpzxLXAQKTGNnWcfspUkkZsN5hJu7KaANc=";
"smithay-clipboard-0.8.0" = "sha256-LDd56TJ175qsj2/EV/dbBRV9HMU7RzgrG5JP7H2PmhE=";
"softbuffer-0.4.1" = "sha256-a0bUFz6O8CWRweNt/OxTvflnPYwO5nm6vsyc/WcXyNg=";
"taffy-0.3.11" = "sha256-SCx9GEIJjWdoNVyq+RZAGn0N71qraKZxf9ZWhvyzLaI=";
"winit-0.29.10" = "sha256-ScTII2AzK3SC8MVeASZ9jhVWsEaGrSQ2BnApTxgfxK4=";
};
};
# COSMIC applications now uses vergen for the About page
# Update the COMMIT_DATE to match when the commit was made
env.VERGEN_GIT_COMMIT_DATE = commitDate;
env.VERGEN_GIT_SHA = src.rev;
nativeBuildInputs = [
pkg-config
wrapGAppsHook
];
buildInputs = [
atk
cairo
gdk-pixbuf
glib
gtk3
libsecret
libxkbcommon
openssl
pango
sqlite
vulkan-loader
] ++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.AppKit
darwin.apple_sdk.frameworks.CoreFoundation
darwin.apple_sdk.frameworks.CoreGraphics
darwin.apple_sdk.frameworks.CoreServices
darwin.apple_sdk.frameworks.Foundation
darwin.apple_sdk.frameworks.Metal
darwin.apple_sdk.frameworks.QuartzCore
darwin.apple_sdk.frameworks.Security
] ++ lib.optionals stdenv.isLinux [
wayland
];
postFixup = lib.optionalString stdenv.isLinux ''
wrapProgram $out/bin/cosmic-tasks \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libxkbcommon wayland ]}"
'';
meta = with lib; {
description = "A simple task management application for the COSMIC desktop";
homepage = "https://github.com/edfloreshz/cosmic-tasks";
license = licenses.gpl3Only;
maintainers = with maintainers; [ GaetanLepage ];
platforms = platforms.linux;
mainProgram = "cosmic-tasks";
};
}
+2 -2
View File
@@ -2,10 +2,10 @@
buildDotnetGlobalTool {
pname = "csharpier";
version = "0.27.2";
version = "0.28.2";
executables = "dotnet-csharpier";
nugetSha256 = "sha256-P4v4h09FuisIry9B/6batrG0CpLqnrkxnlk1yEd1JbY=";
nugetSha256 = "sha256-fXyE25niM80pPXCLC80Hm9XEHGUMx0XZOMxdVoA0h18=";
meta = with lib; {
description = "An opinionated code formatter for C#";
+47
View File
@@ -0,0 +1,47 @@
{ lib
, stdenv
, fetchFromGitLab
, libuv
, coreutils-full
, pkg-config
, gnugrep
, gnused
}:
stdenv.mkDerivation rec {
pname = "dps8m";
version = "3.0.1";
src = fetchFromGitLab {
owner = "dps8m";
repo = "dps8m";
rev = "R${version}";
hash = "sha256-YCDeHryxXZXOXqUXkbWwH7Vna+ljzydFXPeo2et87x8=";
fetchSubmodules = true;
};
env = {
ENV = "${coreutils-full}/bin/env";
GREP = "${gnugrep}/bin/grep";
SED = "${gnused}/bin/sed";
PREFIX = placeholder "out";
};
nativeBuildInputs = [
coreutils-full
pkg-config
];
buildInputs = [
libuv
];
meta = with lib; {
description = "DPS8M: GE / Honeywell / Bull DPS8/M mainframe simulator";
homepage = "https://gitlab.com/dps8m/dps8m";
license = licenses.icu;
maintainers = with maintainers; [ matthewcroughan sarcasticadmin ];
mainProgram = "dps8m";
platforms = platforms.all;
};
}

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