mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-29 18:33:00 +00:00
Merge staging-next into staging
This commit is contained in:
commit
9fb5041877
@ -207,6 +207,12 @@
|
||||
The <option>security.hideProcessInformation</option> module has been removed.
|
||||
It was broken since the switch to cgroups-v2.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <literal>linuxPackages.ati_drivers_x11</literal> kernel modules have been removed.
|
||||
The drivers only supported kernels prior to 4.2, and thus have become obsolete.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
@ -1113,6 +1119,11 @@ environment.systemPackages = [
|
||||
This prevents NVRAM from filling up, which ensures the latest diagnostic data is always stored and alleviates problems with writing new boot configurations.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Nixpkgs now contains <link xlink:href="https://github.com/NixOS/nixpkgs/pull/118232">automatically packaged GNOME Shell extensions</link> from the <link xlink:href="https://extensions.gnome.org/">GNOME Extensions</link> portal. You can find them, filed by their UUID, under <literal>gnome38Extensions</literal> attribute for GNOME 3.38 and under <literal>gnome40Extensions</literal> for GNOME 40. Finally, the <literal>gnomeExtensions</literal> attribute contains extensions for the latest GNOME Shell version in Nixpkgs, listed under a more human-friendly name. The unqualified attribute scope also contains manually packaged extensions. Note that the automatically packaged extensions are provided for convenience and are not checked or guaranteed to work.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
</section>
|
||||
|
@ -316,8 +316,9 @@ class Machine:
|
||||
start_command += "-cdrom " + args["cdrom"] + " "
|
||||
|
||||
if "usb" in args:
|
||||
# https://github.com/qemu/qemu/blob/master/docs/usb2.txt
|
||||
start_command += (
|
||||
"-device piix3-usb-uhci -drive "
|
||||
"-device usb-ehci -drive "
|
||||
+ "id=usbdisk,file="
|
||||
+ args["usb"]
|
||||
+ ",if=none,readonly "
|
||||
|
@ -63,8 +63,7 @@ in
|
||||
description = ''
|
||||
On 64-bit systems, whether to support Direct Rendering for
|
||||
32-bit applications (such as Wine). This is currently only
|
||||
supported for the <literal>nvidia</literal> and
|
||||
<literal>ati_unfree</literal> drivers, as well as
|
||||
supported for the <literal>nvidia</literal> as well as
|
||||
<literal>Mesa</literal>.
|
||||
'';
|
||||
};
|
||||
|
@ -1,40 +0,0 @@
|
||||
# This module provides the proprietary ATI X11 / OpenGL drivers.
|
||||
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
|
||||
drivers = config.services.xserver.videoDrivers;
|
||||
|
||||
enabled = elem "ati_unfree" drivers;
|
||||
|
||||
ati_x11 = config.boot.kernelPackages.ati_drivers_x11;
|
||||
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
config = mkIf enabled {
|
||||
|
||||
nixpkgs.config.xorg.abiCompat = "1.17";
|
||||
|
||||
services.xserver.drivers = singleton
|
||||
{ name = "fglrx"; modules = [ ati_x11 ]; display = true; };
|
||||
|
||||
hardware.opengl.package = ati_x11;
|
||||
hardware.opengl.package32 = pkgs.pkgsi686Linux.linuxPackages.ati_drivers_x11.override { libsOnly = true; kernel = null; };
|
||||
hardware.opengl.setLdLibraryPath = true;
|
||||
|
||||
environment.systemPackages = [ ati_x11 ];
|
||||
|
||||
boot.extraModulePackages = [ ati_x11 ];
|
||||
|
||||
boot.blacklistedKernelModules = [ "radeon" ];
|
||||
|
||||
environment.etc.ati.source = "${ati_x11}/etc/ati";
|
||||
|
||||
};
|
||||
|
||||
}
|
@ -76,7 +76,6 @@
|
||||
./hardware/wooting.nix
|
||||
./hardware/uinput.nix
|
||||
./hardware/video/amdgpu-pro.nix
|
||||
./hardware/video/ati.nix
|
||||
./hardware/video/capture/mwprocapture.nix
|
||||
./hardware/video/bumblebee.nix
|
||||
./hardware/video/displaylink.nix
|
||||
@ -806,6 +805,7 @@
|
||||
./services/networking/smartdns.nix
|
||||
./services/networking/smokeping.nix
|
||||
./services/networking/softether.nix
|
||||
./services/networking/solanum.nix
|
||||
./services/networking/spacecookie.nix
|
||||
./services/networking/spiped.nix
|
||||
./services/networking/squid.nix
|
||||
|
@ -31,11 +31,11 @@
|
||||
<link linkend="opt-services.mailman.enable">enable</link> = true;
|
||||
<link linkend="opt-services.mailman.serve.enable">serve.enable</link> = true;
|
||||
<link linkend="opt-services.mailman.hyperkitty.enable">hyperkitty.enable</link> = true;
|
||||
<link linkend="opt-services.mailman.hyperkitty.enable">webHosts</link> = ["lists.example.org"];
|
||||
<link linkend="opt-services.mailman.hyperkitty.enable">siteOwner</link> = "mailman@example.org";
|
||||
<link linkend="opt-services.mailman.webHosts">webHosts</link> = ["lists.example.org"];
|
||||
<link linkend="opt-services.mailman.siteOwner">siteOwner</link> = "mailman@example.org";
|
||||
};
|
||||
<link linkend="opt-services.nginx.virtualHosts._name_.enableACME">services.nginx.virtualHosts."lists.example.org".enableACME</link> = true;
|
||||
<link linkend="opt-services.mailman.hyperkitty.enable">networking.firewall.allowedTCPPorts</link> = [ 25 80 443 ];
|
||||
<link linkend="opt-networking.firewall.allowedTCPPorts">networking.firewall.allowedTCPPorts</link> = [ 25 80 443 ];
|
||||
}</programlisting>
|
||||
</para>
|
||||
<para>
|
||||
|
@ -386,6 +386,10 @@ let
|
||||
List of relabel configurations.
|
||||
'';
|
||||
|
||||
metric_relabel_configs = mkOpt (types.listOf promTypes.relabel_config) ''
|
||||
List of metric relabel configurations.
|
||||
'';
|
||||
|
||||
sample_limit = mkDefOpt types.int "0" ''
|
||||
Per-scrape limit on number of scraped samples that will be accepted.
|
||||
If more than this number of samples are present after metric relabelling
|
||||
|
104
nixos/modules/services/networking/solanum.nix
Normal file
104
nixos/modules/services/networking/solanum.nix
Normal file
@ -0,0 +1,104 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
let
|
||||
inherit (lib) mkEnableOption mkIf mkOption types;
|
||||
inherit (pkgs) solanum;
|
||||
cfg = config.services.solanum;
|
||||
|
||||
configFile = pkgs.writeText "solanum.conf" cfg.config;
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
###### interface
|
||||
|
||||
options = {
|
||||
|
||||
services.solanum = {
|
||||
|
||||
enable = mkEnableOption "Solanum IRC daemon";
|
||||
|
||||
config = mkOption {
|
||||
type = types.str;
|
||||
default = ''
|
||||
serverinfo {
|
||||
name = "irc.example.com";
|
||||
sid = "1ix";
|
||||
description = "irc!";
|
||||
|
||||
vhost = "0.0.0.0";
|
||||
vhost6 = "::";
|
||||
};
|
||||
|
||||
listen {
|
||||
host = "0.0.0.0";
|
||||
port = 6667;
|
||||
};
|
||||
|
||||
auth {
|
||||
user = "*@*";
|
||||
class = "users";
|
||||
flags = exceed_limit;
|
||||
};
|
||||
channel {
|
||||
default_split_user_count = 0;
|
||||
};
|
||||
'';
|
||||
description = ''
|
||||
Solanum IRC daemon configuration file.
|
||||
check <link xlink:href="https://github.com/solanum-ircd/solanum/blob/main/doc/reference.conf"/> for all options.
|
||||
'';
|
||||
};
|
||||
|
||||
openFilesLimit = mkOption {
|
||||
type = types.int;
|
||||
default = 1024;
|
||||
description = ''
|
||||
Maximum number of open files. Limits the clients and server connections.
|
||||
'';
|
||||
};
|
||||
|
||||
motd = mkOption {
|
||||
type = types.nullOr types.lines;
|
||||
default = null;
|
||||
description = ''
|
||||
Solanum MOTD text.
|
||||
|
||||
Solanum will read its MOTD from <literal>/etc/solanum/ircd.motd</literal>.
|
||||
If set, the value of this option will be written to this path.
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
###### implementation
|
||||
|
||||
config = mkIf cfg.enable (lib.mkMerge [
|
||||
{
|
||||
systemd.services.solanum = {
|
||||
description = "Solanum IRC daemon";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
environment = {
|
||||
BANDB_DBPATH = "/var/lib/solanum/ban.db";
|
||||
};
|
||||
serviceConfig = {
|
||||
ExecStart = "${solanum}/bin/solanum -foreground -logfile /dev/stdout -configfile ${configFile} -pidfile /run/solanum/ircd.pid";
|
||||
DynamicUser = true;
|
||||
User = "solanum";
|
||||
StateDirectory = "solanum";
|
||||
RuntimeDirectory = "solanum";
|
||||
LimitNOFILE = "${toString cfg.openFilesLimit}";
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
(mkIf (cfg.motd != null) {
|
||||
environment.etc."solanum/ircd.motd".text = cfg.motd;
|
||||
})
|
||||
]);
|
||||
}
|
@ -384,6 +384,7 @@ in
|
||||
snapcast = handleTest ./snapcast.nix {};
|
||||
snapper = handleTest ./snapper.nix {};
|
||||
sogo = handleTest ./sogo.nix {};
|
||||
solanum = handleTest ./solanum.nix {};
|
||||
solr = handleTest ./solr.nix {};
|
||||
sonarr = handleTest ./sonarr.nix {};
|
||||
spacecookie = handleTest ./spacecookie.nix {};
|
||||
|
89
nixos/tests/solanum.nix
Normal file
89
nixos/tests/solanum.nix
Normal file
@ -0,0 +1,89 @@
|
||||
let
|
||||
clients = [
|
||||
"ircclient1"
|
||||
"ircclient2"
|
||||
];
|
||||
server = "solanum";
|
||||
ircPort = 6667;
|
||||
channel = "nixos-cat";
|
||||
iiDir = "/tmp/irc";
|
||||
in
|
||||
|
||||
import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
||||
name = "solanum";
|
||||
nodes = {
|
||||
"${server}" = {
|
||||
networking.firewall.allowedTCPPorts = [ ircPort ];
|
||||
services.solanum = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
} // lib.listToAttrs (builtins.map (client: lib.nameValuePair client {
|
||||
imports = [
|
||||
./common/user-account.nix
|
||||
];
|
||||
|
||||
systemd.services.ii = {
|
||||
requires = [ "network.target" ];
|
||||
wantedBy = [ "default.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecPreStartPre = "mkdir -p ${iiDir}";
|
||||
ExecStart = ''
|
||||
${lib.getBin pkgs.ii}/bin/ii -n ${client} -s ${server} -i ${iiDir}
|
||||
'';
|
||||
User = "alice";
|
||||
};
|
||||
};
|
||||
}) clients);
|
||||
|
||||
testScript =
|
||||
let
|
||||
msg = client: "Hello, my name is ${client}";
|
||||
clientScript = client: [
|
||||
''
|
||||
${client}.wait_for_unit("network.target")
|
||||
${client}.systemctl("start ii")
|
||||
${client}.wait_for_unit("ii")
|
||||
${client}.wait_for_file("${iiDir}/${server}/out")
|
||||
''
|
||||
# wait until first PING from server arrives before joining,
|
||||
# so we don't try it too early
|
||||
''
|
||||
${client}.wait_until_succeeds("grep 'PING' ${iiDir}/${server}/out")
|
||||
''
|
||||
# join ${channel}
|
||||
''
|
||||
${client}.succeed("echo '/j #${channel}' > ${iiDir}/${server}/in")
|
||||
${client}.wait_for_file("${iiDir}/${server}/#${channel}/in")
|
||||
''
|
||||
# send a greeting
|
||||
''
|
||||
${client}.succeed(
|
||||
"echo '${msg client}' > ${iiDir}/${server}/#${channel}/in"
|
||||
)
|
||||
''
|
||||
# check that all greetings arrived on all clients
|
||||
] ++ builtins.map (other: ''
|
||||
${client}.succeed(
|
||||
"grep '${msg other}$' ${iiDir}/${server}/#${channel}/out"
|
||||
)
|
||||
'') clients;
|
||||
|
||||
# foldl', but requires a non-empty list instead of a start value
|
||||
reduce = f: list:
|
||||
builtins.foldl' f (builtins.head list) (builtins.tail list);
|
||||
in ''
|
||||
start_all()
|
||||
${server}.systemctl("status solanum")
|
||||
${server}.wait_for_open_port(${toString ircPort})
|
||||
|
||||
# run clientScript for all clients so that every list
|
||||
# entry is executed by every client before advancing
|
||||
# to the next one.
|
||||
'' + lib.concatStrings
|
||||
(reduce
|
||||
(lib.zipListsWith (cs: c: cs + c))
|
||||
(builtins.map clientScript clients));
|
||||
})
|
@ -14,11 +14,10 @@
|
||||
, musepackSupport ? true, libmpc, libmpcdec, taglib
|
||||
, vorbisSupport ? true, libvorbis
|
||||
, speexSupport ? true, speex
|
||||
, ffmpegSupport ? true, ffmpeg_3
|
||||
, ffmpegSupport ? true, ffmpeg
|
||||
, sndfileSupport ? true, libsndfile
|
||||
, wavpackSupport ? true, wavpack
|
||||
# Misc
|
||||
, withffmpeg4 ? false, ffmpeg_4
|
||||
, curlSupport ? true, curl
|
||||
, samplerateSupport ? true, libsamplerate
|
||||
, withDebug ? false
|
||||
@ -39,7 +38,7 @@ in stdenv.mkDerivation rec {
|
||||
};
|
||||
|
||||
patches = []
|
||||
++ opt withffmpeg4 ./moc-ffmpeg4.patch
|
||||
++ opt ffmpegSupport ./moc-ffmpeg4.patch
|
||||
++ opt pulseSupport ./pulseaudio.patch;
|
||||
|
||||
nativeBuildInputs = [ pkg-config ]
|
||||
@ -60,8 +59,7 @@ in stdenv.mkDerivation rec {
|
||||
++ lib.optionals musepackSupport [ libmpc libmpcdec taglib ]
|
||||
++ opt vorbisSupport libvorbis
|
||||
++ opt speexSupport speex
|
||||
++ opt (ffmpegSupport && !withffmpeg4) ffmpeg_3
|
||||
++ opt (ffmpegSupport && withffmpeg4) ffmpeg_4
|
||||
++ opt ffmpegSupport ffmpeg
|
||||
++ opt sndfileSupport libsndfile
|
||||
++ opt wavpackSupport wavpack
|
||||
# Misc
|
||||
|
@ -655,10 +655,10 @@
|
||||
elpaBuild {
|
||||
pname = "corfu";
|
||||
ename = "corfu";
|
||||
version = "0.6";
|
||||
version = "0.8";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/corfu-0.6.tar";
|
||||
sha256 = "0zl769l3mmy4b0pj70dwjllq0224r2w4l45xvaqbj75qfqclj6cj";
|
||||
url = "https://elpa.gnu.org/packages/corfu-0.8.tar";
|
||||
sha256 = "1qrrky1g4k5vw56435dgkwnmnri7i51gkydd76as3l0ixm4pnp05";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
@ -1738,6 +1738,21 @@
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
isearch-mb = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "isearch-mb";
|
||||
ename = "isearch-mb";
|
||||
version = "0.2";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/isearch-mb-0.2.tar";
|
||||
sha256 = "1mfjppv33cb5f5f6cc1486msxjxfjnnkryc1yax43k6fgzjr0j4h";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
homepage = "https://elpa.gnu.org/packages/isearch-mb.html";
|
||||
license = lib.licenses.free;
|
||||
};
|
||||
}) {};
|
||||
iterators = callPackage ({ elpaBuild, emacs, fetchurl, lib }:
|
||||
elpaBuild {
|
||||
pname = "iterators";
|
||||
@ -2544,10 +2559,10 @@
|
||||
elpaBuild {
|
||||
pname = "org";
|
||||
ename = "org";
|
||||
version = "9.4.5";
|
||||
version = "9.4.6";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/org-9.4.5.tar";
|
||||
sha256 = "0h5qhrd984vf17qc227wz68191xfgbpq32dyhw0lcz2d9i0pl3xk";
|
||||
url = "https://elpa.gnu.org/packages/org-9.4.6.tar";
|
||||
sha256 = "1k49ymsi77366as2wi4kzv2f1xnbwpb47iw7iw07yxwlhmm7vskq";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
||||
@ -2829,10 +2844,10 @@
|
||||
elpaBuild {
|
||||
pname = "pyim";
|
||||
ename = "pyim";
|
||||
version = "3.7.5";
|
||||
version = "3.7.6";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/pyim-3.7.5.tar";
|
||||
sha256 = "09f34wgzckbxgr5xvaqrj0wdcmnfsb31a6m460f5g0acys20ams5";
|
||||
url = "https://elpa.gnu.org/packages/pyim-3.7.6.tar";
|
||||
sha256 = "1crimmvyppjmds9shfvxy9j5zi3mk133bv5av0fgicm7ddkivksr";
|
||||
};
|
||||
packageRequires = [ async emacs xr ];
|
||||
meta = {
|
||||
@ -3955,10 +3970,10 @@
|
||||
elpaBuild {
|
||||
pname = "vertico";
|
||||
ename = "vertico";
|
||||
version = "0.8";
|
||||
version = "0.10";
|
||||
src = fetchurl {
|
||||
url = "https://elpa.gnu.org/packages/vertico-0.8.tar";
|
||||
sha256 = "1cdq49csd57vqhrs1nbif79yw4s8c0p2i2ww5n5znzj7rnxwpva4";
|
||||
url = "https://elpa.gnu.org/packages/vertico-0.10.tar";
|
||||
sha256 = "07bzhxgp3k6q4wl9ijhx4vg8diinn782xhr8axn790a5vj199j78";
|
||||
};
|
||||
packageRequires = [ emacs ];
|
||||
meta = {
|
@ -5,8 +5,9 @@
|
||||
To update the list of packages from MELPA,
|
||||
|
||||
1. Run `./update-elpa`.
|
||||
2. Check for evaluation errors: `nix-instantiate ../../../.. -A emacs.pkgs.elpaPackages`.
|
||||
3. `git commit -m "elpa-packages $(date -Idate)" -- elpa-generated.nix`
|
||||
2. Check for evaluation errors:
|
||||
`nix-instantiate ../../../../../ -A emacs.pkgs.elpaPackages`.
|
||||
3. Run `git commit -m "elpa-packages $(date -Idate)" -- elpa-generated.nix`
|
||||
|
||||
## Update from overlay
|
||||
|
||||
@ -15,8 +16,8 @@ Alternatively, run the following command:
|
||||
./update-from-overlay
|
||||
|
||||
It will update both melpa and elpa packages using
|
||||
https://github.com/nix-community/emacs-overlay. It's almost
|
||||
instantenous and formats commits for you.
|
||||
https://github.com/nix-community/emacs-overlay. It's almost instantenous and
|
||||
formats commits for you.
|
||||
|
||||
*/
|
||||
|
||||
@ -30,7 +31,7 @@ self: let
|
||||
});
|
||||
};
|
||||
|
||||
elpaBuild = import ../../../build-support/emacs/elpa.nix {
|
||||
elpaBuild = import ../../../../build-support/emacs/elpa.nix {
|
||||
inherit lib stdenv texinfo writeText;
|
||||
inherit (self) emacs;
|
||||
};
|
@ -1,5 +1,5 @@
|
||||
let
|
||||
pkgs = import ../../../.. { };
|
||||
pkgs = import ../../../../.. { };
|
||||
|
||||
src = pkgs.fetchgit {
|
||||
url = "https://github.com/ttuegel/emacs2nix.git";
|
@ -211,13 +211,19 @@
|
||||
# From old emacsPackages (pre emacsPackagesNg)
|
||||
cedet = callPackage ./cedet { };
|
||||
cedille = callPackage ./cedille { cedille = pkgs.cedille; };
|
||||
colorThemeSolarized = callPackage ./color-theme-solarized { };
|
||||
emacsSessionManagement = callPackage ./session-management-for-emacs { };
|
||||
color-theme-solarized = callPackage ./color-theme-solarized { };
|
||||
session-management-for-emacs = callPackage ./session-management-for-emacs { };
|
||||
hsc3-mode = callPackage ./hsc3 { };
|
||||
ido-ubiquitous = callPackage ./ido-ubiquitous { };
|
||||
prolog-mode = callPackage ./prolog { };
|
||||
rectMark = callPackage ./rect-mark { };
|
||||
sunriseCommander = callPackage ./sunrise-commander { };
|
||||
rect-mark = callPackage ./rect-mark { };
|
||||
sunrise-commander = callPackage ./sunrise-commander { };
|
||||
|
||||
# camelCase aliases for some of the kebab-case expressions above
|
||||
colorThemeSolarized = color-theme-solarized;
|
||||
emacsSessionManagement = session-management-for-emacs;
|
||||
rectMark = rect-mark;
|
||||
sunriseCommander = sunrise-commander;
|
||||
|
||||
# Legacy aliases, these try to mostly map to melpa stable because it's
|
||||
# closer to the old outdated package infra.
|
@ -4,11 +4,11 @@
|
||||
|
||||
To update the list of packages from MELPA,
|
||||
|
||||
1. Run ./update-melpa
|
||||
1. Run `./update-melpa`
|
||||
2. Check for evaluation errors:
|
||||
env NIXPKGS_ALLOW_BROKEN=1 nix-instantiate --show-trace ../../../../ -A emacs.pkgs..melpaStablePackages
|
||||
env NIXPKGS_ALLOW_BROKEN=1 nix-instantiate --show-trace ../../../../ -A emacs.pkgs..melpaPackages
|
||||
3. `git commit -m "melpa-packages: $(date -Idate)" recipes-archive-melpa.json`
|
||||
env NIXPKGS_ALLOW_BROKEN=1 nix-instantiate --show-trace ../../../../../ -A emacs.pkgs.melpaStablePackages
|
||||
env NIXPKGS_ALLOW_BROKEN=1 nix-instantiate --show-trace ../../../../../ -A emacs.pkgs.melpaPackages
|
||||
3. Run `git commit -m "melpa-packages: $(date -Idate)" recipes-archive-melpa.json`
|
||||
|
||||
## Update from overlay
|
||||
|
||||
@ -17,8 +17,8 @@ Alternatively, run the following command:
|
||||
./update-from-overlay
|
||||
|
||||
It will update both melpa and elpa packages using
|
||||
https://github.com/nix-community/emacs-overlay. It's almost
|
||||
instantenous and formats commits for you.
|
||||
https://github.com/nix-community/emacs-overlay. It's almost instantenous and
|
||||
formats commits for you.
|
||||
|
||||
*/
|
||||
|
@ -4,10 +4,10 @@
|
||||
elpaBuild {
|
||||
pname = "org";
|
||||
ename = "org";
|
||||
version = "20210510";
|
||||
version = "20210519";
|
||||
src = fetchurl {
|
||||
url = "https://orgmode.org/elpa/org-20210510.tar";
|
||||
sha256 = "015c68pk52vksar7kpyb0nkcyjihlczmpq4h5vdv8xayas2qlzc7";
|
||||
url = "https://orgmode.org/elpa/org-20210519.tar";
|
||||
sha256 = "14vchfg69wai1yxv1fzvjk185gnfr7d9qrdijf0qmbbr5znci8rf";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
||||
@ -19,10 +19,10 @@
|
||||
elpaBuild {
|
||||
pname = "org-plus-contrib";
|
||||
ename = "org-plus-contrib";
|
||||
version = "20210510";
|
||||
version = "20210519";
|
||||
src = fetchurl {
|
||||
url = "https://orgmode.org/elpa/org-plus-contrib-20210510.tar";
|
||||
sha256 = "0pdwjnpcsk75jv4qs8n4xia6vspwn6dndbdx9z7kq5vqz7w4ykmw";
|
||||
url = "https://orgmode.org/elpa/org-plus-contrib-20210519.tar";
|
||||
sha256 = "0g765fsc7ssn779xnhjzrxy1sz5b019h7dk1q26yk2w6i540ybfl";
|
||||
};
|
||||
packageRequires = [];
|
||||
meta = {
|
@ -5,8 +5,8 @@
|
||||
To update the list of packages from Org (ELPA),
|
||||
|
||||
1. Run `./update-org`.
|
||||
2. Check for evaluation errors: `nix-instantiate ../../../.. -A emacs.pkgs.orgPackages`.
|
||||
3. `git commit -m "org-packages $(date -Idate)" -- org-generated.nix`
|
||||
2. Check for evaluation errors: `nix-instantiate ../../../../.. -A emacs.pkgs.orgPackages`.
|
||||
3. Run `git commit -m "org-packages $(date -Idate)" -- org-generated.nix`
|
||||
|
||||
*/
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -8,14 +8,14 @@ export NIXPKGS_ALLOW_BROKEN=1
|
||||
# You can use this to avoid running lengthy code generation jobs locally
|
||||
|
||||
curl -s -O https://raw.githubusercontent.com/nix-community/emacs-overlay/master/repos/elpa/elpa-generated.nix
|
||||
nix-instantiate ../../../.. -A emacs.pkgs.elpaPackages --show-trace
|
||||
nix-instantiate ../../../../../ -A emacs.pkgs.elpaPackages --show-trace
|
||||
git diff --exit-code elpa-generated.nix > /dev/null || git commit -m "emacs.pkgs.elpa-packages: $(date --iso)" -- elpa-generated.nix
|
||||
|
||||
curl -s -O https://raw.githubusercontent.com/nix-community/emacs-overlay/master/repos/org/org-generated.nix
|
||||
nix-instantiate ../../../.. -A emacs.pkgs.orgPackages --show-trace
|
||||
nix-instantiate ../../../../../ -A emacs.pkgs.orgPackages --show-trace
|
||||
git diff --exit-code org-generated.nix > /dev/null || git commit -m "emacs.pkgs.org-packages: $(date --iso)" -- org-generated.nix
|
||||
|
||||
curl -s -O https://raw.githubusercontent.com/nix-community/emacs-overlay/master/repos/melpa/recipes-archive-melpa.json
|
||||
nix-instantiate --show-trace ../../../../ -A emacs.pkgs.melpaStablePackages
|
||||
nix-instantiate --show-trace ../../../../ -A emacs.pkgs.melpaPackages
|
||||
nix-instantiate --show-trace ../../../../../ -A emacs.pkgs.melpaStablePackages
|
||||
nix-instantiate --show-trace ../../../../../ -A emacs.pkgs.melpaPackages
|
||||
git diff --exit-code recipes-archive-melpa.json > /dev/null || git commit -m "emacs.pkgs.melpa-packages: $(date --iso)" -- recipes-archive-melpa.json
|
@ -1,5 +1,5 @@
|
||||
let
|
||||
pkgs = import ../../../.. {};
|
||||
pkgs = import ../../../../.. {};
|
||||
|
||||
emacsEnv = pkgs.emacs.pkgs.withPackages (epkgs: let
|
||||
|
@ -1,6 +1,6 @@
|
||||
{ lib, stdenv, makeDesktopItem, fetchurl, unzip
|
||||
, gdk-pixbuf, glib, gtk3, atk, at-spi2-atk, pango, cairo, freetype, fontconfig, dbus, nss, nspr, alsaLib, cups, expat, udev, gnome
|
||||
, xorg, mozjpeg, makeWrapper, wrapGAppsHook, libuuid, at-spi2-core, libdrm, mesa
|
||||
, xorg, mozjpeg, makeWrapper, wrapGAppsHook, libuuid, at-spi2-core, libdrm, mesa, libxkbcommon
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
@ -33,6 +33,8 @@ stdenv.mkDerivation rec {
|
||||
udev
|
||||
libX11
|
||||
libxcb
|
||||
libxshmfence
|
||||
libxkbcommon
|
||||
libXi
|
||||
libXcursor
|
||||
libXdamage
|
||||
|
@ -327,11 +327,11 @@ buildStdenv.mkDerivation ({
|
||||
"BUILD_OFFICIAL=1"
|
||||
]
|
||||
++ lib.optionals ltoSupport [
|
||||
"AR=${llvmPackages.bintools}/bin/llvm-ar"
|
||||
"LLVM_OBJDUMP=${llvmPackages.bintools}/bin/llvm-objdump"
|
||||
"NM=${llvmPackages.bintools}/bin/llvm-nm"
|
||||
"RANLIB=${llvmPackages.bintools}/bin/llvm-ranlib"
|
||||
"STRIP=${llvmPackages.bintools}/bin/llvm-strip"
|
||||
"AR=${buildStdenv.cc.bintools.bintools}/bin/llvm-ar"
|
||||
"LLVM_OBJDUMP=${buildStdenv.cc.bintools.bintools}/bin/llvm-objdump"
|
||||
"NM=${buildStdenv.cc.bintools.bintools}/bin/llvm-nm"
|
||||
"RANLIB=${buildStdenv.cc.bintools.bintools}/bin/llvm-ranlib"
|
||||
"STRIP=${buildStdenv.cc.bintools.bintools}/bin/llvm-strip"
|
||||
]
|
||||
++ extraMakeFlags;
|
||||
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "cloudflared";
|
||||
version = "2021.5.7";
|
||||
version = "2021.5.9";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "cloudflare";
|
||||
repo = "cloudflared";
|
||||
rev = version;
|
||||
sha256 = "sha256-ekQ5cfQo6/IUIhYaVgyAqbHAaHABL55zhIpqLy6tQ8g=";
|
||||
sha256 = "sha256-Ojbn4QRNZWkSF9RUtFt7roGbt/6l5SFAqEXBCcTJvRI=";
|
||||
};
|
||||
|
||||
vendorSha256 = null;
|
||||
|
@ -10,7 +10,7 @@
|
||||
, cyrus_sasl
|
||||
, fetchFromGitLab
|
||||
, fetchurl
|
||||
, ffmpeg_3
|
||||
, ffmpeg
|
||||
, gdk-pixbuf
|
||||
, glib
|
||||
, gnused
|
||||
@ -87,7 +87,7 @@ mkDerivation rec {
|
||||
bzrtp
|
||||
cairo
|
||||
cyrus_sasl
|
||||
ffmpeg_3
|
||||
ffmpeg
|
||||
gdk-pixbuf
|
||||
glib
|
||||
gtk2
|
||||
|
26
pkgs/desktops/gnome/extensions/README.md
Normal file
26
pkgs/desktops/gnome/extensions/README.md
Normal file
@ -0,0 +1,26 @@
|
||||
# GNOME Shell extensions
|
||||
|
||||
All extensions are packaged automatically. They can be found in the `pkgs.gnomeXYExtensions` for XY being a GNOME version. The package names are the extension’s UUID, which can be a bit unwieldy to use. `pkgs.gnomeExtensions` is a set of manually curated extensions that match the current `gnome.gnome-shell` versions. Their name is human-friendly, compared to the other extensions sets. Some of its extensions are manually packaged.
|
||||
|
||||
## Automatically packaged extensions
|
||||
|
||||
The actual packages are created by `buildGnomeExtensions.nix`, provided the correct arguments are fed into it. The important extension data is stored in `extensions.json`, one line/item per extension. That file is generated by running `update-extensions.py`. Furthermore, the automatic generated names are dumped in `collisions.json` for manual inspection. `extensionRenames.nix` contains provides new names for all extensions that collide.
|
||||
|
||||
### Extensions updates
|
||||
|
||||
For everyday updates,
|
||||
|
||||
1. Run `update-extensions.py`.
|
||||
2. Update `extensionRenames.nix` according to the comment at the top.
|
||||
|
||||
For GNOME updates,
|
||||
|
||||
1. Add a new `gnomeXYExtensions` set
|
||||
2. Remove old ones for GNOME versions we don’t want to support any more
|
||||
3. Update `supported_versions` in `./update-extensions.py` and re-run it
|
||||
4. Change `gnomeExtensions` to the new version
|
||||
5. Update `./extensionsRenames.nix` accordingly
|
||||
|
||||
## Manually packaged extensions
|
||||
|
||||
Manually packaged extensions overwrite some of the automatically packaged ones in `pkgs.gnomeExtensions`. They are listed in `manuallyPackaged.nix`, every extension has its own sub-folder.
|
54
pkgs/desktops/gnome/extensions/buildGnomeExtension.nix
Normal file
54
pkgs/desktops/gnome/extensions/buildGnomeExtension.nix
Normal file
@ -0,0 +1,54 @@
|
||||
{ pkgs, lib, stdenv, fetchzip }:
|
||||
|
||||
let
|
||||
|
||||
buildGnomeExtension = {
|
||||
# Every gnome extension has a UUID. It's the name of the extension folder once unpacked
|
||||
# and can always be found in the metadata.json of every extension.
|
||||
uuid,
|
||||
name,
|
||||
pname,
|
||||
description,
|
||||
# extensions.gnome.org extension URL
|
||||
link,
|
||||
# Extension version numbers are integers
|
||||
version,
|
||||
sha256,
|
||||
# Hex-encoded string of JSON bytes
|
||||
metadata,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
inherit pname;
|
||||
version = builtins.toString version;
|
||||
src = fetchzip {
|
||||
url = "https://extensions.gnome.org/extension-data/${
|
||||
builtins.replaceStrings [ "@" ] [ "" ] uuid
|
||||
}.v${builtins.toString version}.shell-extension.zip";
|
||||
inherit sha256;
|
||||
stripRoot = false;
|
||||
# The download URL may change content over time. This is because the
|
||||
# metadata.json is automatically generated, and parts of it can be changed
|
||||
# without making a new release. We simply substitute the possibly changed fields
|
||||
# with their content from when we last updated, and thus get a deterministic output
|
||||
# hash.
|
||||
extraPostFetch = ''
|
||||
echo "${metadata}" | base64 --decode > $out/metadata.json
|
||||
'';
|
||||
};
|
||||
buildCommand = ''
|
||||
mkdir -p $out/share/gnome-shell/extensions/
|
||||
cp -r -T $src $out/share/gnome-shell/extensions/${uuid}
|
||||
'';
|
||||
meta = {
|
||||
description = builtins.head (lib.splitString "\n" description);
|
||||
longDescription = description;
|
||||
homepage = link;
|
||||
license = lib.licenses.gpl2Plus; # https://wiki.gnome.org/Projects/GnomeShell/Extensions/Review#Licensing
|
||||
maintainers = with lib.maintainers; [ piegames ];
|
||||
};
|
||||
# Store the extension's UUID, because we might need it at some places
|
||||
passthru.extensionUuid = uuid;
|
||||
};
|
||||
in
|
||||
lib.makeOverridable buildGnomeExtension
|
42
pkgs/desktops/gnome/extensions/collisions.json
Normal file
42
pkgs/desktops/gnome/extensions/collisions.json
Normal file
@ -0,0 +1,42 @@
|
||||
{
|
||||
"38": {
|
||||
"applications-menu": [
|
||||
"apps-menu@gnome-shell-extensions.gcampax.github.com",
|
||||
"Applications_Menu@rmy.pobox.com"
|
||||
],
|
||||
"workspace-indicator": [
|
||||
"workspace-indicator@gnome-shell-extensions.gcampax.github.com",
|
||||
"horizontal-workspace-indicator@tty2.io"
|
||||
],
|
||||
"lock-keys": [
|
||||
"lockkeys@vaina.lt",
|
||||
"lockkeys@fawtytoo"
|
||||
],
|
||||
"fuzzy-clock": [
|
||||
"Fuzzy_Clock@dallagi",
|
||||
"fuzzy-clock@keepawayfromfire.co.uk"
|
||||
],
|
||||
"transparent-window": [
|
||||
"transparent-window@pbxqdown.github.com",
|
||||
"transparentwindows.mdirshad07"
|
||||
],
|
||||
"floating-dock": [
|
||||
"floatingDock@sun.wxg@gmail.com",
|
||||
"floating-dock@nandoferreira_prof@hotmail.com"
|
||||
]
|
||||
},
|
||||
"40": {
|
||||
"applications-menu": [
|
||||
"apps-menu@gnome-shell-extensions.gcampax.github.com",
|
||||
"Applications_Menu@rmy.pobox.com"
|
||||
],
|
||||
"workspace-indicator": [
|
||||
"workspace-indicator@gnome-shell-extensions.gcampax.github.com",
|
||||
"horizontal-workspace-indicator@tty2.io"
|
||||
],
|
||||
"lock-keys": [
|
||||
"lockkeys@vaina.lt",
|
||||
"lockkeys@fawtytoo"
|
||||
]
|
||||
}
|
||||
}
|
73
pkgs/desktops/gnome/extensions/default.nix
Normal file
73
pkgs/desktops/gnome/extensions/default.nix
Normal file
@ -0,0 +1,73 @@
|
||||
{ lib
|
||||
, callPackage
|
||||
, config
|
||||
}:
|
||||
let
|
||||
buildShellExtension = callPackage ./buildGnomeExtension.nix { };
|
||||
|
||||
# Index of all scraped extensions (with supported versions)
|
||||
extensionsIndex = lib.importJSON ./extensions.json;
|
||||
|
||||
# A list of UUIDs that have the same pname and we need to rename them
|
||||
extensionRenames = import ./extensionRenames.nix;
|
||||
|
||||
# Take all extensions from the index that match the gnome version, build them and put them into a list of derivations
|
||||
produceExtensionsList = shell-version:
|
||||
lib.trivial.pipe extensionsIndex [
|
||||
# Does a given extension match our current shell version?
|
||||
(builtins.filter
|
||||
(extension: (builtins.hasAttr shell-version extension."shell_version_map"))
|
||||
)
|
||||
# Take in an `extension` object from the JSON and transform it into the correct args to call `buildShellExtension`
|
||||
(map
|
||||
(extension: {
|
||||
inherit (extension) uuid name description link pname;
|
||||
inherit (extension.shell_version_map.${shell-version}) version sha256 metadata;
|
||||
})
|
||||
)
|
||||
# Build them
|
||||
(map buildShellExtension)
|
||||
];
|
||||
|
||||
# Map the list of extensions to an attrset based on the UUID as key
|
||||
mapUuidNames = extensions:
|
||||
lib.trivial.pipe extensions [
|
||||
(map (extension: lib.nameValuePair extension.extensionUuid extension))
|
||||
builtins.listToAttrs
|
||||
];
|
||||
|
||||
# Map the list of extensions to an attrset based on the pname as key, which is more human readable than the UUID
|
||||
# We also take care of conflict renaming in here
|
||||
mapReadableNames = extensionsList: lib.trivial.pipe extensionsList [
|
||||
# Filter out all extensions that map to null
|
||||
(lib.filter (extension:
|
||||
!(
|
||||
(builtins.hasAttr extension.extensionUuid extensionRenames)
|
||||
&& ((builtins.getAttr extension.extensionUuid extensionRenames) == null)
|
||||
)
|
||||
))
|
||||
# Map all extensions to their pname, with potential overwrites
|
||||
(map (extension:
|
||||
lib.nameValuePair (extensionRenames.${extension.extensionUuid} or extension.pname) extension
|
||||
))
|
||||
builtins.listToAttrs
|
||||
];
|
||||
|
||||
in rec {
|
||||
inherit buildShellExtension;
|
||||
|
||||
gnome38Extensions = mapUuidNames (produceExtensionsList "38");
|
||||
gnome40Extensions = mapUuidNames (produceExtensionsList "40");
|
||||
|
||||
gnomeExtensions = lib.recurseIntoAttrs (
|
||||
(mapReadableNames (produceExtensionsList "40"))
|
||||
// (callPackage ./manuallyPackaged.nix {})
|
||||
// lib.optionalAttrs (config.allowAliases or false) {
|
||||
unite-shell = gnomeExtensions.unite; # added 2021-01-19
|
||||
arc-menu = gnomeExtensions.arcmenu; # added 2021-02-14
|
||||
|
||||
nohotcorner = throw "gnomeExtensions.nohotcorner removed since 2019-10-09: Since 3.34, it is a part of GNOME Shell configurable through GNOME Tweaks.";
|
||||
mediaplayer = throw "gnomeExtensions.mediaplayer deprecated since 2019-09-23: retired upstream https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer/blob/master/README.md";
|
||||
}
|
||||
);
|
||||
}
|
29
pkgs/desktops/gnome/extensions/extensionRenames.nix
Normal file
29
pkgs/desktops/gnome/extensions/extensionRenames.nix
Normal file
@ -0,0 +1,29 @@
|
||||
# A list of UUIDs that have the same pname and we need to rename them
|
||||
# MAINTENANCE:
|
||||
# - Every item from ./collisions.json (for the respective Shell version) should have an entry in here
|
||||
# - Set the value to `null` for filtering (duplicate or unmaintained extensions)
|
||||
# - Sort the entries in order of appearance in the collisions.json
|
||||
{
|
||||
"apps-menu@gnome-shell-extensions.gcampax.github.com" = "applications-menu";
|
||||
"Applications_Menu@rmy.pobox.com" = "frippery-applications-menu";
|
||||
|
||||
"workspace-indicator@gnome-shell-extensions.gcampax.github.com" = "workspace-indicator";
|
||||
"horizontal-workspace-indicator@tty2.io" = "workspace-indicator-2";
|
||||
|
||||
"lockkeys@vaina.lt" = "lock-keys";
|
||||
"lockkeys@fawtytoo" = "lock-keys-2";
|
||||
|
||||
|
||||
# These are conflicts for 3.38 extensions. They will very probably come back
|
||||
# once more of them support 40.
|
||||
|
||||
# See https://github.com/pbxqdown/gnome-shell-extension-transparent-window/issues/12#issuecomment-800765381
|
||||
#"transparent-window@pbxqdown.github.com" = "transparent-window";
|
||||
#"transparentwindows.mdirshad07" = null;
|
||||
|
||||
#"floatingDock@sun.wxg@gmail.com" = "floating-dock";
|
||||
#"floating-dock@nandoferreira_prof@hotmail.com" = "floating-dock-2";
|
||||
|
||||
# That extension is broken because of https://github.com/NixOS/nixpkgs/issues/118612
|
||||
#"flypie@schneegans.github.com" = null;
|
||||
}
|
450
pkgs/desktops/gnome/extensions/extensions.json
Normal file
450
pkgs/desktops/gnome/extensions/extensions.json
Normal file
File diff suppressed because one or more lines are too long
40
pkgs/desktops/gnome/extensions/manuallyPackaged.nix
Normal file
40
pkgs/desktops/gnome/extensions/manuallyPackaged.nix
Normal file
@ -0,0 +1,40 @@
|
||||
{ callPackage }:
|
||||
{
|
||||
appindicator = callPackage ./appindicator { };
|
||||
arcmenu = callPackage ./arcmenu { };
|
||||
caffeine = callPackage ./caffeine { };
|
||||
clipboard-indicator = callPackage ./clipboard-indicator { };
|
||||
clock-override = callPackage ./clock-override { };
|
||||
dash-to-dock = callPackage ./dash-to-dock { };
|
||||
dash-to-panel = callPackage ./dash-to-panel { };
|
||||
disable-unredirect = callPackage ./disable-unredirect { };
|
||||
draw-on-your-screen = callPackage ./draw-on-your-screen { };
|
||||
drop-down-terminal = callPackage ./drop-down-terminal { };
|
||||
dynamic-panel-transparency = callPackage ./dynamic-panel-transparency { };
|
||||
easyScreenCast = callPackage ./EasyScreenCast { };
|
||||
emoji-selector = callPackage ./emoji-selector { };
|
||||
freon = callPackage ./freon { };
|
||||
fuzzy-app-search = callPackage ./fuzzy-app-search { };
|
||||
gsconnect = callPackage ./gsconnect { };
|
||||
hot-edge = callPackage ./hot-edge { };
|
||||
icon-hider = callPackage ./icon-hider { };
|
||||
impatience = callPackage ./impatience { };
|
||||
material-shell = callPackage ./material-shell { };
|
||||
mpris-indicator-button = callPackage ./mpris-indicator-button { };
|
||||
night-theme-switcher = callPackage ./night-theme-switcher { };
|
||||
no-title-bar = callPackage ./no-title-bar { };
|
||||
noannoyance = callPackage ./noannoyance { };
|
||||
paperwm = callPackage ./paperwm { };
|
||||
pidgin-im-integration = callPackage ./pidgin-im-integration { };
|
||||
remove-dropdown-arrows = callPackage ./remove-dropdown-arrows { };
|
||||
sound-output-device-chooser = callPackage ./sound-output-device-chooser { };
|
||||
system-monitor = callPackage ./system-monitor { };
|
||||
taskwhisperer = callPackage ./taskwhisperer { };
|
||||
tilingnome = callPackage ./tilingnome { };
|
||||
timepp = callPackage ./timepp { };
|
||||
topicons-plus = callPackage ./topicons-plus { };
|
||||
unite = callPackage ./unite { };
|
||||
window-corner-preview = callPackage ./window-corner-preview { };
|
||||
window-is-ready-remover = callPackage ./window-is-ready-remover { };
|
||||
workspace-matrix = callPackage ./workspace-matrix { };
|
||||
}
|
284
pkgs/desktops/gnome/extensions/update-extensions.py
Executable file
284
pkgs/desktops/gnome/extensions/update-extensions.py
Executable file
@ -0,0 +1,284 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -I nixpkgs=../../../.. -i python3 -p python3
|
||||
|
||||
import json
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
from typing import List, Dict, Optional, Any, Tuple
|
||||
import logging
|
||||
from operator import itemgetter
|
||||
import subprocess
|
||||
import zipfile
|
||||
import io
|
||||
import base64
|
||||
|
||||
# We don't want all those deprecated legacy extensions
|
||||
# Group extensions by GNOME "major" version for compatibility reasons
|
||||
supported_versions = {
|
||||
"38": "3.38",
|
||||
"40": "40",
|
||||
}
|
||||
|
||||
|
||||
# Some type alias to increase readility of complex compound types
|
||||
PackageName = str
|
||||
ShellVersion = str
|
||||
Uuid = str
|
||||
ExtensionVersion = int
|
||||
|
||||
|
||||
# Keep track of all names that have been used till now to detect collisions.
|
||||
# This works because we deterministically process all extensions in historical order
|
||||
# The outer dict level is the shell version, as we are tracking duplicates only per same Shell version.
|
||||
# key: shell version, value: Dict with key: pname, value: list of UUIDs with that pname
|
||||
package_name_registry: Dict[ShellVersion, Dict[PackageName, List[Uuid]]] = {}
|
||||
for shell_version in supported_versions.keys():
|
||||
package_name_registry[shell_version] = {}
|
||||
|
||||
|
||||
def fetch_extension_data(uuid: str, version: str) -> Tuple[str, str]:
|
||||
"""
|
||||
Download the extension and hash it. We use `nix-prefetch-url` for this for efficiency reasons.
|
||||
Returns a tuple with the hash (Nix-compatible) of the zip file's content and the base64-encoded content of its metadata.json.
|
||||
"""
|
||||
|
||||
# The download URLs follow this schema
|
||||
uuid = uuid.replace("@", "")
|
||||
url: str = f"https://extensions.gnome.org/extension-data/{uuid}.v{version}.shell-extension.zip"
|
||||
|
||||
# Yes, we download that file three times:
|
||||
|
||||
# The first time is for the maintainter, so they may have a personal backup to fix potential issues
|
||||
# subprocess.run(
|
||||
# ["wget", url], capture_output=True, text=True
|
||||
# )
|
||||
|
||||
# The second time, we extract the metadata.json because we need it too
|
||||
with urllib.request.urlopen(url) as response:
|
||||
data = zipfile.ZipFile(io.BytesIO(response.read()), 'r')
|
||||
metadata = base64.b64encode(data.read('metadata.json')).decode()
|
||||
|
||||
# The third time is to get the file into the store and to get its hash
|
||||
hash = subprocess.run(
|
||||
["nix-prefetch-url", "--unpack", url], capture_output=True, text=True
|
||||
).stdout.strip()
|
||||
|
||||
return hash, metadata
|
||||
|
||||
|
||||
def generate_extension_versions(
|
||||
extension_version_map: Dict[ShellVersion, ExtensionVersion], uuid: str
|
||||
) -> Dict[ShellVersion, Dict[str, str]]:
|
||||
"""
|
||||
Takes in a mapping from shell versions to extension versions and transforms it the way we need it:
|
||||
- Only take one extension version per GNOME Shell major version (as per `supported_versions`)
|
||||
- Filter out versions that only support old GNOME versions
|
||||
- Download the extension and hash it
|
||||
"""
|
||||
extension_versions: Dict[ShellVersion, Dict[str, str]] = {}
|
||||
for shell_version, version_prefix in supported_versions.items():
|
||||
# Newest compatible extension version
|
||||
extension_version: Optional[int] = max(
|
||||
(
|
||||
int(ext_ver)
|
||||
for shell_ver, ext_ver in extension_version_map.items()
|
||||
if (shell_ver.startswith(version_prefix))
|
||||
),
|
||||
default=None,
|
||||
)
|
||||
# Extension is not compatible with this GNOME version
|
||||
if not extension_version:
|
||||
continue
|
||||
logging.debug(
|
||||
f"[{shell_version}] Downloading '{uuid}' v{extension_version}"
|
||||
)
|
||||
sha256, metadata = fetch_extension_data(uuid, str(extension_version))
|
||||
extension_versions[shell_version] = {
|
||||
"version": str(extension_version),
|
||||
"sha256": sha256,
|
||||
# The downloads are impure, their metadata.json may change at any time.
|
||||
# Thus, be back it up / pin it to remain deterministic
|
||||
# Upstream issue: https://gitlab.gnome.org/Infrastructure/extensions-web/-/issues/137
|
||||
"metadata": metadata,
|
||||
}
|
||||
return extension_versions
|
||||
|
||||
|
||||
def pname_from_url(url: str) -> Tuple[str, str]:
|
||||
"""
|
||||
Parse something like "/extension/1475/battery-time/" and output ("battery-time", "1475")
|
||||
"""
|
||||
|
||||
url = url.split("/") # type: ignore
|
||||
return (url[3], url[2])
|
||||
|
||||
|
||||
def process_extension(extension: Dict[str, Any]) -> Optional[Dict[str, Any]]:
|
||||
"""
|
||||
Process an extension. It takes in raw scraped data and downloads all the necessary information that buildGnomeExtension.nix requires
|
||||
|
||||
Input: a json object of one extension queried from the site. It has the following schema (only important key listed):
|
||||
{
|
||||
"uuid": str,
|
||||
"name": str,
|
||||
"description": str,
|
||||
"link": str,
|
||||
"shell_version_map": {
|
||||
str: { "version": int, … },
|
||||
…
|
||||
},
|
||||
…
|
||||
}
|
||||
|
||||
"uuid" is an extension UUID that looks like this (most of the time): "extension-name@username.domain.tld".
|
||||
Don't make any assumptions on it, and treat it like an opaque string!
|
||||
"link" follows the following schema: "/extension/$number/$string/"
|
||||
The number is monotonically increasing and unique to every extension.
|
||||
The string is usually derived from the extensions's name (but shortened, kebab-cased and URL friendly).
|
||||
It may diverge from the actual name.
|
||||
The keys of "shell_version_map" are GNOME Shell version numbers.
|
||||
|
||||
Output: a json object to be stored, or None if the extension should be skipped. Schema:
|
||||
{
|
||||
"uuid": str,
|
||||
"name": str,
|
||||
"pname": str,
|
||||
"description": str,
|
||||
"link": str,
|
||||
"shell_version_map": {
|
||||
str: { "version": int, "sha256": str, "metadata": <hex> },
|
||||
…
|
||||
}
|
||||
}
|
||||
|
||||
Only "uuid" gets passed along unmodified. "name", "description" and "link" are taken from the input, but sanitized.
|
||||
"pname" gets generated from other fields and "shell_version_map" has a completely different structure than the input
|
||||
field with the same name.
|
||||
"""
|
||||
uuid = extension["uuid"]
|
||||
|
||||
# Yeah, there are some extensions without any releases
|
||||
if not extension["shell_version_map"]:
|
||||
return None
|
||||
logging.info(f"Processing '{uuid}'")
|
||||
|
||||
# Input is a mapping str -> { version: int, … }
|
||||
# We want to map shell versions to extension versions
|
||||
shell_version_map: Dict[ShellVersion, int] = {
|
||||
k: v["version"] for k, v in extension["shell_version_map"].items()
|
||||
}
|
||||
# Transform shell_version_map to be more useful for us. Also throw away unwanted versions
|
||||
shell_version_map: Dict[ShellVersion, Dict[str, str]] = generate_extension_versions(shell_version_map, uuid) # type: ignore
|
||||
|
||||
# No compatible versions found
|
||||
if not shell_version_map:
|
||||
return None
|
||||
|
||||
# Fetch a human-readable name for the package.
|
||||
(pname, _pname_id) = pname_from_url(extension["link"])
|
||||
|
||||
for shell_version in shell_version_map.keys():
|
||||
if pname in package_name_registry[shell_version]:
|
||||
logging.warning(f"Package name '{pname}' is colliding.")
|
||||
package_name_registry[shell_version][pname].append(uuid)
|
||||
else:
|
||||
package_name_registry[shell_version][pname] = [uuid]
|
||||
|
||||
return {
|
||||
"uuid": uuid,
|
||||
"name": extension["name"],
|
||||
"pname": pname,
|
||||
"description": extension["description"],
|
||||
"link": "https://extensions.gnome.org" + extension["link"],
|
||||
"shell_version_map": shell_version_map,
|
||||
}
|
||||
|
||||
|
||||
def scrape_extensions_index() -> List[Dict[str, Any]]:
|
||||
"""
|
||||
Scrape the list of extensions by sending search queries to the API. We simply go over it
|
||||
page by page until we hit a non-full page or a 404 error.
|
||||
|
||||
The returned list is sorted by the age of the extension, in order to be deterministic.
|
||||
"""
|
||||
page = 0
|
||||
extensions = []
|
||||
while True:
|
||||
page += 1
|
||||
logging.info("Scraping page " + str(page))
|
||||
try:
|
||||
with urllib.request.urlopen(
|
||||
f"https://extensions.gnome.org/extension-query/?n_per_page=25&page={page}"
|
||||
) as response:
|
||||
data = json.loads(response.read().decode())["extensions"]
|
||||
responseLength = len(data)
|
||||
|
||||
for extension in data:
|
||||
extensions.append(extension)
|
||||
|
||||
# If our page isn't "full", it must have been the last one
|
||||
if responseLength < 25:
|
||||
logging.debug(
|
||||
f"\tThis page only has {responseLength} entries, so it must be the last one."
|
||||
)
|
||||
break
|
||||
except urllib.error.HTTPError as e:
|
||||
if e.code == 404:
|
||||
# We reached past the last page and are done now
|
||||
break
|
||||
else:
|
||||
raise
|
||||
|
||||
# `pk` is the primary key in the extensions.gnome.org database. Sorting on it will give us a stable,
|
||||
# deterministic ordering.
|
||||
extensions.sort(key=itemgetter("pk"))
|
||||
return extensions
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
raw_extensions = scrape_extensions_index()
|
||||
|
||||
logging.info(f"Downloaded {len(raw_extensions)} extensions. Processing …")
|
||||
processed_extensions: List[Dict[str, Any]] = []
|
||||
for num, raw_extension in enumerate(raw_extensions):
|
||||
processed_extension = process_extension(raw_extension)
|
||||
if processed_extension:
|
||||
processed_extensions.append(processed_extension)
|
||||
logging.debug(f"Processed {num + 1} / {len(raw_extensions)}")
|
||||
|
||||
logging.info(
|
||||
f"Done. Writing results to extensions.json ({len(processed_extensions)} extensions in total)"
|
||||
)
|
||||
|
||||
with open("extensions.json", "w") as out:
|
||||
# Manually pretty-print the outer level, but then do one compact line per extension
|
||||
# This allows for the diffs to be manageable (one line of change per extension) despite their quantity
|
||||
for index, extension in enumerate(processed_extensions):
|
||||
if index == 0:
|
||||
out.write("[ ")
|
||||
else:
|
||||
out.write(", ")
|
||||
json.dump(extension, out, ensure_ascii=False)
|
||||
out.write("\n")
|
||||
out.write("]\n")
|
||||
|
||||
with open("extensions.json", "r") as out:
|
||||
# Check that the generated file actually is valid JSON, just to be sure
|
||||
json.load(out)
|
||||
|
||||
logging.info(
|
||||
"Done. Writing name collisions to collisions.json (please check manually)"
|
||||
)
|
||||
with open("collisions.json", "w") as out:
|
||||
# Filter out those that are not duplicates
|
||||
package_name_registry_filtered: Dict[ShellVersion, Dict[PackageName, List[Uuid]]] = {
|
||||
# The outer level keys are shell versions
|
||||
shell_version: {
|
||||
# The inner keys are extension names, with a list of all extensions with that name as value.
|
||||
pname: extensions for pname, extensions in collisions.items() if len(extensions) > 1
|
||||
} for shell_version, collisions in package_name_registry.items()
|
||||
}
|
||||
json.dump(package_name_registry_filtered, out, indent=2, ensure_ascii=False)
|
||||
out.write("\n")
|
@ -6,13 +6,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "intel-media-driver";
|
||||
version = "21.2.0";
|
||||
version = "21.2.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "intel";
|
||||
repo = "media-driver";
|
||||
rev = "intel-media-${version}";
|
||||
sha256 = "101wbg5j00amdbfz4p6mpg90wi549dl78jd34mac5g6zhcpwqbh9";
|
||||
sha256 = "0a49087ca3li1cbsdcwp31zlakfw9dxcr2lnxzm5s3x63jvwlbag";
|
||||
};
|
||||
|
||||
cmakeFlags = [
|
||||
|
@ -10,7 +10,7 @@
|
||||
, cyrus_sasl
|
||||
, doxygen
|
||||
, fetchFromGitLab
|
||||
, ffmpeg_3
|
||||
, ffmpeg
|
||||
, gdk-pixbuf
|
||||
, glib
|
||||
, graphviz
|
||||
@ -73,7 +73,7 @@ stdenv.mkDerivation rec {
|
||||
bzrtp
|
||||
cairo
|
||||
cyrus_sasl
|
||||
ffmpeg_3
|
||||
ffmpeg
|
||||
gdk-pixbuf
|
||||
glib
|
||||
gtk2
|
||||
|
@ -4,7 +4,7 @@
|
||||
, cmake
|
||||
, doxygen
|
||||
, fetchFromGitLab
|
||||
, ffmpeg_3
|
||||
, ffmpeg
|
||||
, glew
|
||||
, gsm
|
||||
, intltool
|
||||
@ -65,7 +65,7 @@ stdenv.mkDerivation rec {
|
||||
alsaLib
|
||||
bctoolbox
|
||||
bzrtp
|
||||
ffmpeg_3
|
||||
ffmpeg
|
||||
glew
|
||||
gsm
|
||||
libGL
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "octomap";
|
||||
version = "1.9.6";
|
||||
version = "1.9.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "OctoMap";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "03v341dffa0pfzmf2431xb5nq50zq9zlhgl6k2aa3fsza5xmbb70";
|
||||
sha256 = "1pb58w6vka7wzs533lcy7i6y5nwjfrzy6b35fhrb1dhq2mgszc79";
|
||||
};
|
||||
sourceRoot = "source/octomap";
|
||||
|
||||
|
@ -11,14 +11,14 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "aiodiscover";
|
||||
version = "1.4.0";
|
||||
version = "1.4.2";
|
||||
disabled = pythonOlder "3.7";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bdraco";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-t0bs3n0eLUR22i1lZkepCffjiUFzvXBdP7Xq49KXeS4=";
|
||||
sha256 = "sha256-xiIN/YLIOdPuqenyxybu0iUpYEy3MyBssXswza5InU0=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
@ -7,13 +7,13 @@
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "karton-asciimagic";
|
||||
version = "1.0.1";
|
||||
version = "1.1.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "CERT-Polska";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
sha256 = "0d15fhb3y0jpwdfm4y11i6pmfa9szr943cm6slvf0ir31f9nznyz";
|
||||
sha256 = "0vj4b8man81g99g4c53zyvp1gc47c2imj5ha9r4z4bf8gs3aqsv6";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
@ -5,6 +5,7 @@
|
||||
, ipykernel
|
||||
, jupyter_client
|
||||
, nbformat
|
||||
, pytestCheckHook
|
||||
, pytest
|
||||
, six
|
||||
, glibcLocales
|
||||
@ -23,7 +24,7 @@ buildPythonPackage rec {
|
||||
};
|
||||
|
||||
checkInputs = [
|
||||
pytest
|
||||
pytestCheckHook
|
||||
matplotlib
|
||||
sympy
|
||||
pytestcov
|
||||
@ -40,14 +41,15 @@ buildPythonPackage rec {
|
||||
six
|
||||
];
|
||||
|
||||
# Set HOME so that matplotlib doesn't try to use
|
||||
# /homeless-shelter/.config/matplotlib, otherwise some of the tests fail for
|
||||
# having an unexpected warning on stderr produced by matplotlib.
|
||||
# Ignore impure tests.
|
||||
checkPhase = ''
|
||||
export HOME=$(mktemp -d)
|
||||
pytest tests --ignore tests/test_timeouts.py
|
||||
'';
|
||||
pytestFlagsArray = [
|
||||
"tests"
|
||||
# These are the main tests but they're fragile so skip them. They error
|
||||
# whenever matplotlib outputs any unexpected warnings, e.g. deprecation
|
||||
# warnings.
|
||||
"--ignore=tests/test_unit_tests_in_notebooks.py"
|
||||
# Impure
|
||||
"--ignore=tests/test_timeouts.py"
|
||||
];
|
||||
|
||||
# Some of the tests use localhost networking.
|
||||
__darwinAllowLocalNetworking = true;
|
||||
|
@ -14,12 +14,12 @@
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
version = "0.12.4";
|
||||
version = "0.13";
|
||||
pname = "pybids";
|
||||
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "830f3f518ab0d2e058e9ba6d6ff9a942792909c874433b3ad58a3339a23f46bf";
|
||||
sha256 = "sha256-zVFaGAKgTP9UiUdmO4+Tut8Qc64xuGyB26cQLRHOqYw=";
|
||||
};
|
||||
|
||||
propagatedBuildInputs = [
|
||||
|
@ -1,9 +1,9 @@
|
||||
{ lib, stdenv, fetchFromGitHub, fetchpatch,
|
||||
{ lib, stdenv, fetchFromGitHub,
|
||||
fetchHex, erlang, makeWrapper,
|
||||
writeScript, common-updater-scripts, coreutils, git, gnused, nix, rebar3-nix }:
|
||||
|
||||
let
|
||||
version = "3.15.1";
|
||||
version = "3.16.0";
|
||||
owner = "erlang";
|
||||
deps = import ./rebar-deps.nix { inherit fetchFromGitHub fetchHex; };
|
||||
rebar3 = stdenv.mkDerivation rec {
|
||||
@ -16,20 +16,11 @@ let
|
||||
inherit owner;
|
||||
repo = pname;
|
||||
rev = version;
|
||||
sha256 = "1pcy5m79g0l9l3d8lkbx6cq1w87z1g3sa6wwvgbgraj2v3wkyy5g";
|
||||
sha256 = "1yqvm37l5rn5dyg4sc2hv47930s2524qrdpnjwy3zqa27r7k5n36";
|
||||
};
|
||||
|
||||
buildInputs = [ erlang ];
|
||||
|
||||
patches = [
|
||||
# TODO: remove this on next rebar3 release
|
||||
(fetchpatch {
|
||||
name = "escriptize-erl-libs";
|
||||
url = "https://github.com/erlang/rebar3/commit/8049a92512420b0967a4c23acfa304d8ca7a712e.patch";
|
||||
sha256 = "0jzdy7n2nz4v38nn76bgjcmssvqgvdhy9v2gl867ylwqn1y5sdm1";
|
||||
})
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
mkdir -p _checkouts _build/default/lib/
|
||||
|
||||
@ -109,7 +100,7 @@ let
|
||||
# global-deps.patch makes it possible to use REBAR_GLOBAL_PLUGINS to
|
||||
# instruct rebar3 to always load a certain plugin. It is necessary since
|
||||
# REBAR_GLOBAL_CONFIG_DIR doesn't seem to work for this.
|
||||
patches = old.patches ++ [ ./skip-plugins.patch ./global-plugins.patch ];
|
||||
patches = [ ./skip-plugins.patch ./global-plugins.patch ];
|
||||
}));
|
||||
in stdenv.mkDerivation {
|
||||
pname = "rebar3-with-plugins";
|
||||
|
@ -16,11 +16,6 @@
|
||||
version = "1.8.1";
|
||||
sha256 = "sha256-5FdFrenEdqmkaeoIQOQYqxk2DcRPAaIzME4RikRIa6A=";
|
||||
};
|
||||
parse_trans = fetchHex {
|
||||
pkg = "parse_trans";
|
||||
version = "3.3.1";
|
||||
sha256 = "sha256-B82Vd4hfVjYtQU6MTE5r3xDUOodnq7ktJMvoskxUiIs=";
|
||||
};
|
||||
getopt = fetchHex {
|
||||
pkg = "getopt";
|
||||
version = "1.0.1";
|
||||
@ -33,8 +28,8 @@
|
||||
};
|
||||
erlware_commons = fetchHex {
|
||||
pkg = "erlware_commons";
|
||||
version = "1.4.0";
|
||||
sha256 = "sha256-GF7PXPQ7qzoBPds2FM57un9seoJ5BOZOV9pU/N/c4uY=";
|
||||
version = "1.5.0";
|
||||
sha256 = "sha256-PnxvsrpMKbDdXf6dAxtmRJ4giOzsGoFGW9n94F7X0Ns=";
|
||||
};
|
||||
cth_readable = fetchHex {
|
||||
pkg = "cth_readable";
|
||||
@ -48,8 +43,8 @@
|
||||
};
|
||||
certifi = fetchHex {
|
||||
pkg = "certifi";
|
||||
version = "2.5.3";
|
||||
sha256 = "sha256-7VFqyzkpsQEgip1wAGLVIPOVPaO2uRjYZhBv+pgOHBA=";
|
||||
version = "2.6.1";
|
||||
sha256 = "sha256-UkyXtJkbOEndXBemMSI4licsawr0RneLpGdaHf9Tu34=";
|
||||
};
|
||||
bbmustache = fetchHex {
|
||||
pkg = "bbmustache";
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "wally-cli";
|
||||
version = "2.0.0";
|
||||
version = "2.0.1";
|
||||
|
||||
subPackages = [ "." ];
|
||||
|
||||
@ -14,15 +14,12 @@ buildGoModule rec {
|
||||
owner = "zsa";
|
||||
repo = "wally-cli";
|
||||
rev = "${version}-linux";
|
||||
sha256 = "0xz3z18bbnf736ngjj6jhnp3p2j55m5jhnb2xl6l5hybracfyhm7";
|
||||
sha256 = "NuyQHEygy4LNqLtrpdwfCR+fNy3ZUxOClVdRen6AXMc=";
|
||||
};
|
||||
|
||||
vendorSha256 = "0jqx38x5qvir6zc5yq9p2adafwqhy4hil1k5g81rr1fvbn06k3a6";
|
||||
vendorSha256 = "AVYG+aLpAXohUOORV/uPw7vro+Kg98+AmSmYGHtOals=";
|
||||
runVend = true;
|
||||
|
||||
# Can be removed when https://github.com/zsa/wally-cli/pull/1 is merged.
|
||||
doCheck = false;
|
||||
|
||||
meta = with lib; {
|
||||
description = "A tool to flash firmware to mechanical keyboards";
|
||||
homepage = "https://ergodox-ez.com/pages/wally-planck";
|
||||
|
@ -1,34 +0,0 @@
|
||||
{ stdenv, lib, fetchurl, autoPatchelfHook }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "deepspeech";
|
||||
version = "0.9.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/mozilla/DeepSpeech/releases/download/v${version}/native_client.amd64.cpu.linux.tar.xz";
|
||||
sha256 = "1qy2gspprcxi76jk06ljp028xl0wkk1m3mqaxyf5qbhhfbvvpfap";
|
||||
};
|
||||
setSourceRoot = "sourceRoot=`pwd`";
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoPatchelfHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
stdenv.cc.cc.lib
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
install -D deepspeech $out/bin/deepspeech
|
||||
install -D deepspeech.h $out/include/deepspeech.h
|
||||
install -D libdeepspeech.so $out/lib/libdeepspeech.so
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = https://github.com/mozilla/DeepSpeech;
|
||||
description = "Open source embedded (offline, on-device) speech-to-text engine, which can run in real time on broad range of devices";
|
||||
license = licenses.mpl20;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with maintainers; [ rvolosatovs ];
|
||||
};
|
||||
}
|
@ -5,19 +5,17 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "betterlockscreen";
|
||||
version = "3.0.1";
|
||||
version = "3.1.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "pavanjadhaw";
|
||||
repo = "betterlockscreen";
|
||||
rev = version;
|
||||
sha256 = "0jc8ifb69shmd0avx6vny4m1w5dfxkkf5vnm7qcrmc8yflb0s3z6";
|
||||
sha256 = "14vkgdzw7mprjsvmhm3aav8gds73ngn2xxij4syq7l1mhk701wak";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
patches = [ ./replace-i3lock.patch ];
|
||||
|
||||
installPhase =
|
||||
let
|
||||
PATH =
|
||||
|
@ -1,12 +0,0 @@
|
||||
--- a/betterlockscreen
|
||||
+++ b/betterlockscreen
|
||||
@@ -76,7 +76,7 @@ prelock() {
|
||||
lock() {
|
||||
#$1 image path
|
||||
|
||||
- i3lock \
|
||||
+ i3lock-color \
|
||||
-t -i "$1" \
|
||||
--timepos='x+110:h-70' \
|
||||
--datepos='x+43:h-45' \
|
||||
|
@ -1,4 +1,4 @@
|
||||
{ lib, stdenv, fetchurl, fetchpatch, kernel }:
|
||||
{ lib, stdenv, fetchurl, kernel }:
|
||||
|
||||
let cfg = import ./version.nix; in
|
||||
|
||||
@ -11,14 +11,6 @@ stdenv.mkDerivation rec {
|
||||
sha256 = cfg.sha256.${pname};
|
||||
};
|
||||
|
||||
patches = [
|
||||
(fetchpatch {
|
||||
# Fix build with Kernel>=5.12, remove for batman-adv>=2021.1
|
||||
url = "https://git.open-mesh.org/batman-adv.git/patch/6d67ca7f530d4620e3d066b02aefbfd8893d6c05?hp=362da918384286a959ad7c3455d9d33d9ff99d7d";
|
||||
sha256 = "039x67yfkwl0b8af8vwx5m58ji2qn8x44rr1rkzi5j43cvmnh2cg";
|
||||
})
|
||||
];
|
||||
|
||||
nativeBuildInputs = kernel.moduleBuildDependencies;
|
||||
|
||||
hardeningDisable = [ "pic" ];
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
version = "2021.0";
|
||||
version = "2021.1";
|
||||
|
||||
sha256 = {
|
||||
batman-adv = "1898y0m8sgca0dmhyfkpmx2g6qc0b1xvh5nm7cvnhwl9h2jrp62s";
|
||||
alfred = "0jr4wbz81ijd03ssfxb9mqlj3zbx2k495lsl0np262hyla6w0qm0";
|
||||
batctl = "1r01a8zxivq4slwc81dgg9qknqsli8qw17csfj95321gjpqqpv4w";
|
||||
batman-adv = "1l1lk41h4chymrb41ihqrr3p80xdwhhp1kkksr157mzailyq8xxz";
|
||||
alfred = "122y92vqrpp3g6dbjfv8hkhwjlfa3skr91lbzicr0pw8mm6wzqll";
|
||||
batctl = "0xp1cqcw0g0irgw9yhkch01rbn39gzvfxv8b2yya32vbnkmqrcj4";
|
||||
};
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,3 @@
|
||||
[
|
||||
{"matrix-appservice-irc": "git+https://github.com/matrix-org/matrix-appservice-irc.git#0.25.0" }
|
||||
{"matrix-appservice-irc": "git+https://github.com/matrix-org/matrix-appservice-irc.git#0.26.0" }
|
||||
]
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
{
|
||||
matrix-synapse-ldap3 = callPackage ./ldap3.nix { };
|
||||
matrix-synapse-mjolnir-antispam = callPackage ./mjolnir-antispam.nix { };
|
||||
matrix-synapse-pam = callPackage ./pam.nix { };
|
||||
matrix-synapse-shared-secret-auth = callPackage ./shared-secret-auth.nix { };
|
||||
}
|
||||
|
32
pkgs/servers/matrix-synapse/plugins/mjolnir-antispam.nix
Normal file
32
pkgs/servers/matrix-synapse/plugins/mjolnir-antispam.nix
Normal file
@ -0,0 +1,32 @@
|
||||
{ lib, buildPythonPackage, fetchFromGitHub, matrix-synapse }:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "matrix-synapse-mjolnir-antispam";
|
||||
version = "0.1.17";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "matrix-org";
|
||||
repo = "mjolnir";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-uBI5AllXWgl3eL60WZ/j11Tt7QpY7CKcmFQOU74/Qjs=";
|
||||
};
|
||||
|
||||
sourceRoot = "./source/synapse_antispam";
|
||||
|
||||
propagatedBuildInputs = [ matrix-synapse ];
|
||||
|
||||
doCheck = false; # no tests
|
||||
pythonImportsCheck = [ "mjolnir" ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "AntiSpam / Banlist plugin to be used with mjolnir";
|
||||
longDescription = ''
|
||||
Primarily meant to block invites from undesired homeservers/users,
|
||||
Mjolnir's Synapse module is a way to interpret ban lists and apply
|
||||
them to your entire homeserver.
|
||||
'';
|
||||
homepage = "https://github.com/matrix-org/mjolnir#synapse-module";
|
||||
license = licenses.asl20;
|
||||
maintainers = with maintainers; [ jojosch ];
|
||||
};
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "grafana";
|
||||
version = "7.5.6";
|
||||
version = "7.5.7";
|
||||
|
||||
excludedPackages = [ "release_publisher" ];
|
||||
|
||||
@ -10,15 +10,15 @@ buildGoModule rec {
|
||||
rev = "v${version}";
|
||||
owner = "grafana";
|
||||
repo = "grafana";
|
||||
sha256 = "1683as90p4zkzhaj52vy60bcmpr77zynys87mjzh3s6ks3xfxn2x";
|
||||
sha256 = "sha256-GTQK02zxOBTE+93vT0zLMhAeZ7F3Cq/0lbvbzwB2QZA=";
|
||||
};
|
||||
|
||||
srcStatic = fetchurl {
|
||||
url = "https://dl.grafana.com/oss/release/grafana-${version}.linux-amd64.tar.gz";
|
||||
sha256 = "1mywvm4d116y56rffiywk1hx6wxj1418gf7q0v0hfdlwk1lqi9nz";
|
||||
sha256 = "sha256-IQ7aAuUrNa+bSh5ld6IttujM8AgKUSlu8H7pwzDi164=";
|
||||
};
|
||||
|
||||
vendorSha256 = "01a5v292x59fmayjkqnf4c8k8viasxr2s2khs4yrv6p829lx3hq2";
|
||||
vendorSha256 = "sha256-AsPRaRLomp090XAKLXLXKm40ESPO4im9qi6VLpLYRQU=";
|
||||
|
||||
# grafana-aws-sdk is specified with two versions which causes a problem later:
|
||||
# go: inconsistent vendoring in /build/source:
|
||||
|
@ -16,8 +16,10 @@ let
|
||||
passthru.tests = nixosTests.nextcloud;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
mkdir -p $out/
|
||||
cp -R . $out/
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
@ -58,8 +60,8 @@ in {
|
||||
};
|
||||
|
||||
nextcloud21 = generic {
|
||||
version = "21.0.1";
|
||||
sha256 = "dd7c8ccc01547914a75b44bbf86028289c8919dc39f4e2e720147b6bd596aebe";
|
||||
version = "21.0.2";
|
||||
sha256 = "5e5b38109a3485db5fd2d248f24478eabe6c0790ec10b030acbbee207d5511fe";
|
||||
};
|
||||
# tip: get she sha with:
|
||||
# curl 'https://download.nextcloud.com/server/releases/nextcloud-${version}.tar.bz2.sha256'
|
||||
|
35
pkgs/servers/pr-tracker/default.nix
Normal file
35
pkgs/servers/pr-tracker/default.nix
Normal file
@ -0,0 +1,35 @@
|
||||
{ rustPlatform
|
||||
, lib
|
||||
, fetchgit
|
||||
, openssl
|
||||
, pkg-config
|
||||
, systemd
|
||||
}:
|
||||
|
||||
rustPlatform.buildRustPackage rec {
|
||||
pname = "pr-tracker";
|
||||
version = "1.0.0";
|
||||
|
||||
src = fetchgit {
|
||||
url = "https://git.qyliss.net/pr-tracker";
|
||||
rev = version;
|
||||
sha256 = "sha256-NHtY05Llrvfvcb3uyagLd6kaVW630TIP3IreFrY3wl0=";
|
||||
};
|
||||
|
||||
cargoSha256 = "sha256-SgSASfIanADV31pVy+VIwozTLxq7P3oMDIiAAQ8s+k0=";
|
||||
|
||||
nativeBuildInputs = [ pkg-config ];
|
||||
buildInputs = [ openssl systemd ];
|
||||
|
||||
meta = with lib; {
|
||||
description = "Nixpkgs pull request channel tracker";
|
||||
longDescription = ''
|
||||
A web server that displays the path a Nixpkgs pull request will take
|
||||
through the various release channels.
|
||||
'';
|
||||
platforms = platforms.linux;
|
||||
homepage = "https://git.qyliss.net/pr-tracker";
|
||||
license = licenses.agpl3Plus;
|
||||
maintainers = with maintainers; [ sumnerevans ];
|
||||
};
|
||||
}
|
@ -2,13 +2,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "tailscale";
|
||||
version = "1.8.3";
|
||||
version = "1.8.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "tailscale";
|
||||
repo = "tailscale";
|
||||
rev = "v${version}";
|
||||
sha256 = "0q0nk0ychb00xhycq3kda57dzrswl8yhci7fzv8yiqzrv3ygpvyd";
|
||||
sha256 = "0wr6zb8v5082gbh0isz8inmndvqfqgmh5bgaz8ij2id5qwx5znx6";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
34
pkgs/tools/audio/stt/default.nix
Normal file
34
pkgs/tools/audio/stt/default.nix
Normal file
@ -0,0 +1,34 @@
|
||||
{ stdenv, lib, fetchurl, autoPatchelfHook }:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "stt";
|
||||
version = "0.9.3";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/coqui-ai/STT/releases/download/v${version}/native_client.tf.Linux.tar.xz";
|
||||
sha256 = "0axwys8vis4f0m7d1i2r3dfqlc8p3yj2nisvc7pdi5qs741xgy8w";
|
||||
};
|
||||
setSourceRoot = "sourceRoot=`pwd`";
|
||||
|
||||
nativeBuildInputs = [
|
||||
autoPatchelfHook
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
stdenv.cc.cc.lib
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
install -D stt $out/bin/stt
|
||||
install -D coqui-stt.h $out/include/coqui-stt.h
|
||||
install -D libstt.so $out/lib/libstt.so
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = https://github.com/coqui-ai/STT;
|
||||
description = "Deep learning toolkit for Speech-to-Text, battle-tested in research and production";
|
||||
license = licenses.mpl20;
|
||||
platforms = [ "x86_64-linux" ];
|
||||
maintainers = with maintainers; [ rvolosatovs ];
|
||||
};
|
||||
}
|
@ -5,13 +5,13 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "ipinfo";
|
||||
version = "1.1.4";
|
||||
version = "1.1.5";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = pname;
|
||||
repo = "cli";
|
||||
rev = "${pname}-${version}";
|
||||
sha256 = "1j50bbq7skbh1pffkmrbs1cyz2x22bniwcdw27rjzmvjixs4wj6h";
|
||||
sha256 = "16i5vmx39j7l5mhs28niapki9530nsbw6xik8rsky55v9i5pr72d";
|
||||
};
|
||||
|
||||
vendorSha256 = null;
|
||||
|
@ -167,6 +167,7 @@ mapAliases ({
|
||||
deadpixi-sam = deadpixi-sam-unstable;
|
||||
debian_devscripts = debian-devscripts; # added 2016-03-23
|
||||
deepin = throw "deepin was a work in progress and it has been canceled and removed https://github.com/NixOS/nixpkgs/issues/94870"; # added 2020-08-31
|
||||
deepspeech = throw "deepspeech was removed in favor of stt. https://github.com/NixOS/nixpkgs/issues/119496"; # added 2021-05-05
|
||||
desktop_file_utils = desktop-file-utils; # added 2018-02-25
|
||||
devicemapper = lvm2; # added 2018-04-25
|
||||
digikam5 = digikam; # added 2017-02-18
|
||||
|
@ -7871,6 +7871,8 @@ in
|
||||
|
||||
polygraph = callPackage ../tools/networking/polygraph { };
|
||||
|
||||
pr-tracker = callPackage ../servers/pr-tracker { };
|
||||
|
||||
progress = callPackage ../tools/misc/progress { };
|
||||
|
||||
ps3netsrv = callPackage ../servers/ps3netsrv { };
|
||||
@ -28674,6 +28676,8 @@ in
|
||||
|
||||
streamlit = python3Packages.callPackage ../applications/science/machine-learning/streamlit { };
|
||||
|
||||
stt = callPackage ../tools/audio/stt { };
|
||||
|
||||
stuntrally = callPackage ../games/stuntrally {
|
||||
ogre = ogre1_9;
|
||||
mygui = mygui.override {
|
||||
@ -28939,51 +28943,10 @@ in
|
||||
|
||||
gnome = recurseIntoAttrs (callPackage ../desktops/gnome { });
|
||||
|
||||
gnomeExtensions = recurseIntoAttrs {
|
||||
appindicator = callPackage ../desktops/gnome/extensions/appindicator { };
|
||||
arcmenu = callPackage ../desktops/gnome/extensions/arcmenu { };
|
||||
caffeine = callPackage ../desktops/gnome/extensions/caffeine { };
|
||||
clipboard-indicator = callPackage ../desktops/gnome/extensions/clipboard-indicator { };
|
||||
clock-override = callPackage ../desktops/gnome/extensions/clock-override { };
|
||||
dash-to-dock = callPackage ../desktops/gnome/extensions/dash-to-dock { };
|
||||
dash-to-panel = callPackage ../desktops/gnome/extensions/dash-to-panel { };
|
||||
disable-unredirect = callPackage ../desktops/gnome/extensions/disable-unredirect { };
|
||||
draw-on-your-screen = callPackage ../desktops/gnome/extensions/draw-on-your-screen { };
|
||||
drop-down-terminal = callPackage ../desktops/gnome/extensions/drop-down-terminal { };
|
||||
dynamic-panel-transparency = callPackage ../desktops/gnome/extensions/dynamic-panel-transparency { };
|
||||
easyScreenCast = callPackage ../desktops/gnome/extensions/EasyScreenCast { };
|
||||
emoji-selector = callPackage ../desktops/gnome/extensions/emoji-selector { };
|
||||
freon = callPackage ../desktops/gnome/extensions/freon { };
|
||||
fuzzy-app-search = callPackage ../desktops/gnome/extensions/fuzzy-app-search { };
|
||||
gsconnect = callPackage ../desktops/gnome/extensions/gsconnect { };
|
||||
hot-edge = callPackage ../desktops/gnome/extensions/hot-edge { };
|
||||
icon-hider = callPackage ../desktops/gnome/extensions/icon-hider { };
|
||||
impatience = callPackage ../desktops/gnome/extensions/impatience { };
|
||||
material-shell = callPackage ../desktops/gnome/extensions/material-shell { };
|
||||
mpris-indicator-button = callPackage ../desktops/gnome/extensions/mpris-indicator-button { };
|
||||
night-theme-switcher = callPackage ../desktops/gnome/extensions/night-theme-switcher { };
|
||||
no-title-bar = callPackage ../desktops/gnome/extensions/no-title-bar { };
|
||||
noannoyance = callPackage ../desktops/gnome/extensions/noannoyance { };
|
||||
paperwm = callPackage ../desktops/gnome/extensions/paperwm { };
|
||||
pidgin-im-integration = callPackage ../desktops/gnome/extensions/pidgin-im-integration { };
|
||||
remove-dropdown-arrows = callPackage ../desktops/gnome/extensions/remove-dropdown-arrows { };
|
||||
sound-output-device-chooser = callPackage ../desktops/gnome/extensions/sound-output-device-chooser { };
|
||||
system-monitor = callPackage ../desktops/gnome/extensions/system-monitor { };
|
||||
taskwhisperer = callPackage ../desktops/gnome/extensions/taskwhisperer { };
|
||||
tilingnome = callPackage ../desktops/gnome/extensions/tilingnome { };
|
||||
timepp = callPackage ../desktops/gnome/extensions/timepp { };
|
||||
topicons-plus = callPackage ../desktops/gnome/extensions/topicons-plus { };
|
||||
unite = callPackage ../desktops/gnome/extensions/unite { };
|
||||
window-corner-preview = callPackage ../desktops/gnome/extensions/window-corner-preview { };
|
||||
window-is-ready-remover = callPackage ../desktops/gnome/extensions/window-is-ready-remover { };
|
||||
workspace-matrix = callPackage ../desktops/gnome/extensions/workspace-matrix { };
|
||||
|
||||
nohotcorner = throw "gnomeExtensions.nohotcorner removed since 2019-10-09: Since 3.34, it is a part of GNOME Shell configurable through GNOME Tweaks.";
|
||||
mediaplayer = throw "gnomeExtensions.mediaplayer deprecated since 2019-09-23: retired upstream https://github.com/JasonLG1979/gnome-shell-extensions-mediaplayer/blob/master/README.md";
|
||||
} // lib.optionalAttrs (config.allowAliases or false) {
|
||||
unite-shell = gnomeExtensions.unite; # added 2021-01-19
|
||||
arc-menu = gnomeExtensions.arcmenu; # added 2021-02-14
|
||||
};
|
||||
inherit (callPackage ../desktops/gnome/extensions { })
|
||||
gnomeExtensions
|
||||
gnome38Extensions
|
||||
gnome40Extensions;
|
||||
|
||||
gnome-connections = callPackage ../desktops/gnome/apps/gnome-connections { };
|
||||
|
||||
@ -30172,8 +30135,6 @@ in
|
||||
|
||||
dbus-map = callPackage ../tools/misc/dbus-map { };
|
||||
|
||||
deepspeech = callPackage ../misc/deepspeech { };
|
||||
|
||||
dell-530cdn = callPackage ../misc/drivers/dell-530cdn {};
|
||||
|
||||
demjson = with python3Packages; toPythonApplication demjson;
|
||||
|
@ -25,21 +25,21 @@
|
||||
|
||||
let
|
||||
|
||||
mkElpaPackages = { pkgs, lib }: import ../applications/editors/emacs-modes/elpa-packages.nix {
|
||||
mkElpaPackages = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/elpa-packages.nix {
|
||||
inherit (pkgs) stdenv texinfo writeText;
|
||||
inherit lib;
|
||||
};
|
||||
|
||||
# Contains both melpa stable & unstable
|
||||
melpaGeneric = { pkgs, lib }: import ../applications/editors/emacs-modes/melpa-packages.nix {
|
||||
melpaGeneric = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/melpa-packages.nix {
|
||||
inherit lib pkgs;
|
||||
};
|
||||
|
||||
mkOrgPackages = { lib }: import ../applications/editors/emacs-modes/org-packages.nix {
|
||||
mkOrgPackages = { lib }: import ../applications/editors/emacs/elisp-packages/org-packages.nix {
|
||||
inherit lib;
|
||||
};
|
||||
|
||||
mkManualPackages = { pkgs, lib }: import ../applications/editors/emacs-modes/manual-packages.nix {
|
||||
mkManualPackages = { pkgs, lib }: import ../applications/editors/emacs/elisp-packages/manual-packages.nix {
|
||||
inherit lib pkgs;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user