···134135Luarocks-based packages are generated in [pkgs/development/lua-modules/generated-packages.nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/lua-modules/generated-packages.nix) from
136the whitelist maintainers/scripts/luarocks-packages.csv and updated by running
137-the script
138-[maintainers/scripts/update-luarocks-packages](https://github.com/NixOS/nixpkgs/tree/master/maintainers/scripts/update-luarocks-packages):
139140```sh
141-./maintainers/scripts/update-luarocks-packages update
0142```
143144[luarocks2nix](https://github.com/nix-community/luarocks) is a tool capable of generating nix derivations from both rockspec and src.rock (and favors the src.rock).
···134135Luarocks-based packages are generated in [pkgs/development/lua-modules/generated-packages.nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/development/lua-modules/generated-packages.nix) from
136the whitelist maintainers/scripts/luarocks-packages.csv and updated by running
137+the package `luarocks-packages-updater`:
0138139```sh
140+141+nix-shell -p luarocks-packages-updater --run luarocks-packages-updater
142```
143144[luarocks2nix](https://github.com/nix-community/luarocks) is a tool capable of generating nix derivations from both rockspec and src.rock (and favors the src.rock).
+12-3
maintainers/scripts/pluginupdate.py
···468 "--input-names",
469 "-i",
470 dest="input_file",
0471 default=self.default_in,
472 help="A list of plugins in the form owner/repo",
473 )
···476 "-o",
477 dest="outfile",
478 default=self.default_out,
0479 help="Filename to save generated nix code",
480 )
481 common.add_argument(
···787788 if autocommit:
789 from datetime import date
790- editor.nixpkgs_repo = git.Repo(editor.root, search_parent_directories=True)
791- updated = date.today().strftime('%m-%d-%Y')
792793- commit(editor.nixpkgs_repo, f"{editor.attr_path}: updated the {updated}", [args.outfile])
000000000794795 if redirects:
796 update()
···468 "--input-names",
469 "-i",
470 dest="input_file",
471+ type=Path,
472 default=self.default_in,
473 help="A list of plugins in the form owner/repo",
474 )
···477 "-o",
478 dest="outfile",
479 default=self.default_out,
480+ type=Path,
481 help="Filename to save generated nix code",
482 )
483 common.add_argument(
···789790 if autocommit:
791 from datetime import date
00792793+ try:
794+ repo = git.Repo(os.getcwd())
795+ updated = date.today().strftime('%m-%d-%Y')
796+ print(args.outfile)
797+ commit(repo,
798+ f"{editor.attr_path}: updated the {updated}", [args.outfile]
799+ )
800+ except git.InvalidGitRepositoryError as e:
801+ print(f"Not in a git repository: {e}", file=sys.stderr)
802+ sys.exit(1)
803804 if redirects:
805 update()
-224
maintainers/scripts/update-luarocks-packages
···1-#!/usr/bin/env nix-shell
2-#!nix-shell update-luarocks-shell.nix -i python3
3-4-# format:
5-# $ nix run nixpkgs#python3Packages.black -- update.py
6-# type-check:
7-# $ nix run nixpkgs#python3Packages.mypy -- update.py
8-# linted:
9-# $ nix run nixpkgs#python3Packages.flake8 -- --ignore E501,E265,E402 update.py
10-11-import inspect
12-import os
13-import tempfile
14-import shutil
15-from dataclasses import dataclass
16-import subprocess
17-import csv
18-import logging
19-import textwrap
20-from multiprocessing.dummy import Pool
21-22-from typing import List, Tuple, Optional
23-from pathlib import Path
24-25-log = logging.getLogger()
26-log.addHandler(logging.StreamHandler())
27-28-ROOT = Path(os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))).parent.parent # type: ignore
29-import pluginupdate
30-from pluginupdate import update_plugins, FetchConfig, CleanEnvironment
31-32-PKG_LIST = "maintainers/scripts/luarocks-packages.csv"
33-TMP_FILE = "$(mktemp)"
34-GENERATED_NIXFILE = "pkgs/development/lua-modules/generated-packages.nix"
35-LUAROCKS_CONFIG = "maintainers/scripts/luarocks-config.lua"
36-37-HEADER = """/* {GENERATED_NIXFILE} is an auto-generated file -- DO NOT EDIT!
38-Regenerate it with:
39-nixpkgs$ ./maintainers/scripts/update-luarocks-packages
40-41-You can customize the generated packages in pkgs/development/lua-modules/overrides.nix
42-*/
43-""".format(
44- GENERATED_NIXFILE=GENERATED_NIXFILE
45-)
46-47-FOOTER = """
48-}
49-/* GENERATED - do not edit this file */
50-"""
51-52-53-@dataclass
54-class LuaPlugin:
55- name: str
56- """Name of the plugin, as seen on luarocks.org"""
57- src: str
58- """address to the git repository"""
59- ref: Optional[str]
60- """git reference (branch name/tag)"""
61- version: Optional[str]
62- """Set it to pin a package """
63- server: Optional[str]
64- """luarocks.org registers packages under different manifests.
65- Its value can be 'http://luarocks.org/dev'
66- """
67- luaversion: Optional[str]
68- """Attribue of the lua interpreter if a package is available only for a specific lua version"""
69- maintainers: Optional[str]
70- """ Optional string listing maintainers separated by spaces"""
71-72- @property
73- def normalized_name(self) -> str:
74- return self.name.replace(".", "-")
75-76-77-# rename Editor to LangUpdate/ EcosystemUpdater
78-class LuaEditor(pluginupdate.Editor):
79- def get_current_plugins(self):
80- return []
81-82- def load_plugin_spec(self, input_file) -> List[LuaPlugin]:
83- luaPackages = []
84- csvfilename = input_file
85- log.info("Loading package descriptions from %s", csvfilename)
86-87- with open(csvfilename, newline="") as csvfile:
88- reader = csv.DictReader(
89- csvfile,
90- )
91- for row in reader:
92- # name,server,version,luaversion,maintainers
93- plugin = LuaPlugin(**row)
94- luaPackages.append(plugin)
95- return luaPackages
96-97- def update(self, args):
98- update_plugins(self, args)
99-100- def generate_nix(self, results: List[Tuple[LuaPlugin, str]], outfilename: str):
101- with tempfile.NamedTemporaryFile("w+") as f:
102- f.write(HEADER)
103- header2 = textwrap.dedent(
104- # header2 = inspect.cleandoc(
105- """
106- { stdenv, lib, fetchurl, fetchgit, callPackage, ... }:
107- final: prev:
108- {
109- """
110- )
111- f.write(header2)
112- for plugin, nix_expr in results:
113- f.write(f"{plugin.normalized_name} = {nix_expr}")
114- f.write(FOOTER)
115- f.flush()
116-117- # if everything went fine, move the generated file to its destination
118- # using copy since move doesn't work across disks
119- shutil.copy(f.name, outfilename)
120-121- print(f"updated {outfilename}")
122-123- @property
124- def attr_path(self):
125- return "luaPackages"
126-127- def get_update(self, input_file: str, outfile: str, config: FetchConfig):
128- _prefetch = generate_pkg_nix
129-130- def update() -> dict:
131- plugin_specs = self.load_plugin_spec(input_file)
132- sorted_plugin_specs = sorted(plugin_specs, key=lambda v: v.name.lower())
133-134- try:
135- pool = Pool(processes=config.proc)
136- results = pool.map(_prefetch, sorted_plugin_specs)
137- finally:
138- pass
139-140- self.generate_nix(results, outfile)
141-142- redirects = {}
143- return redirects
144-145- return update
146-147- def rewrite_input(self, input_file: str, *args, **kwargs):
148- # vim plugin reads the file before update but that shouldn't be our case
149- # not implemented yet
150- # fieldnames = ['name', 'server', 'version', 'luaversion', 'maintainers']
151- # input_file = "toto.csv"
152- # with open(input_file, newline='') as csvfile:
153- # writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
154- # writer.writeheader()
155- # for row in reader:
156- # # name,server,version,luaversion,maintainers
157- # plugin = LuaPlugin(**row)
158- # luaPackages.append(plugin)
159- pass
160-161-162-def generate_pkg_nix(plug: LuaPlugin):
163- """
164- Generate nix expression for a luarocks package
165- Our cache key associates "p.name-p.version" to its rockspec
166- """
167- log.debug("Generating nix expression for %s", plug.name)
168- custom_env = os.environ.copy()
169- custom_env["LUAROCKS_CONFIG"] = LUAROCKS_CONFIG
170-171- # we add --dev else luarocks wont find all the "scm" (=dev) versions of the
172- # packages
173- # , "--dev"
174- cmd = ["luarocks", "nix"]
175-176- if plug.maintainers:
177- cmd.append(f"--maintainers={plug.maintainers}")
178-179- # if plug.server == "src":
180- if plug.src != "":
181- if plug.src is None:
182- msg = (
183- "src must be set when 'version' is set to \"src\" for package %s"
184- % plug.name
185- )
186- log.error(msg)
187- raise RuntimeError(msg)
188- log.debug("Updating from source %s", plug.src)
189- cmd.append(plug.src)
190- # update the plugin from luarocks
191- else:
192- cmd.append(plug.name)
193- if plug.version and plug.version != "src":
194- cmd.append(plug.version)
195-196- if plug.server != "src" and plug.server:
197- cmd.append(f"--only-server={plug.server}")
198-199- if plug.luaversion:
200- cmd.append(f"--lua-version={plug.luaversion}")
201-202- log.debug("running %s", " ".join(cmd))
203-204- output = subprocess.check_output(cmd, env=custom_env, text=True)
205- output = "callPackage(" + output.strip() + ") {};\n\n"
206- return (plug, output)
207-208-209-def main():
210- editor = LuaEditor(
211- "lua",
212- ROOT,
213- "",
214- default_in=ROOT.joinpath(PKG_LIST),
215- default_out=ROOT.joinpath(GENERATED_NIXFILE),
216- )
217-218- editor.run()
219-220-221-if __name__ == "__main__":
222- main()
223-224-# vim: set ft=python noet fdm=manual fenc=utf-8 ff=unix sts=0 sw=4 ts=4 :
···162163- `getent` has been moved from `glibc`'s `bin` output to its own dedicated output, reducing closure size for many dependents. Dependents using the `getent` alias should not be affected; others should move from using `glibc.bin` or `getBin glibc` to `getent` (which also improves compatibility with non-glibc platforms).
1640000165- The `users.users.<name>.passwordFile` has been renamed to `users.users.<name>.hashedPasswordFile` to avoid possible confusions. The option is in fact the file-based version of `hashedPassword`, not `password`, and expects a file containing the {manpage}`crypt(3)` hash of the user password.
0000166167- The `services.ananicy.extraRules` option now has the type of `listOf attrs` instead of `string`.
168···399- `buildGoModule` `go-modules` attrs have been renamed to `goModules`.
400401- The `fonts.fonts` and `fonts.enableDefaultFonts` options have been renamed to `fonts.packages` and `fonts.enableDefaultPackages` respectively.
000402403- `pkgs.openvpn3` now optionally supports systemd-resolved. `programs.openvpn3` will automatically enable systemd-resolved support if `config.services.resolved.enable` is enabled.
404
···162163- `getent` has been moved from `glibc`'s `bin` output to its own dedicated output, reducing closure size for many dependents. Dependents using the `getent` alias should not be affected; others should move from using `glibc.bin` or `getBin glibc` to `getent` (which also improves compatibility with non-glibc platforms).
164165+- `maintainers/scripts/update-luarocks-packages` is now a proper package
166+ `luarocks-packages-updater` that can be run to maintain out-of-tree luarocks
167+ packages
168+169- The `users.users.<name>.passwordFile` has been renamed to `users.users.<name>.hashedPasswordFile` to avoid possible confusions. The option is in fact the file-based version of `hashedPassword`, not `password`, and expects a file containing the {manpage}`crypt(3)` hash of the user password.
170+171+- `chromiumBeta` and `chromiumDev` have been removed due to the lack of maintenance in nixpkgs. Consider using `chromium` instead.
172+173+- `google-chrome-beta` and `google-chrome-dev` have been removed due to the lack of maintenance in nixpkgs. Consider using `google-chrome` instead.
174175- The `services.ananicy.extraRules` option now has the type of `listOf attrs` instead of `string`.
176···407- `buildGoModule` `go-modules` attrs have been renamed to `goModules`.
408409- The `fonts.fonts` and `fonts.enableDefaultFonts` options have been renamed to `fonts.packages` and `fonts.enableDefaultPackages` respectively.
410+411+- The `services.sslh` module has been updated to follow [RFC 0042](https://github.com/NixOS/rfcs/blob/master/rfcs/0042-config-option.md). As such, several options have been moved to the freeform attribute set [services.sslh.settings](#opt-services.sslh.settings), which allows to change any of the settings in {manpage}`sslh(8)`.
412+ In addition, the newly added option [services.sslh.method](#opt-services.sslh.method) allows to switch between the {manpage}`fork(2)`, {manpage}`select(2)` and `libev`-based connection handling method; see the [sslh docs](https://github.com/yrutschle/sslh/blob/master/doc/INSTALL.md#binaries) for a comparison.
413414- `pkgs.openvpn3` now optionally supports systemd-resolved. `programs.openvpn3` will automatically enable systemd-resolved support if `config.services.resolved.enable` is enabled.
415
···5let
6 cfg = config.services.sslh;
7 user = "sslh";
000000089+ configFormat = pkgs.formats.libconfig {};
10+ configFile = configFormat.generate "sslh.conf" cfg.settings;
11+in
00000120000000000000013{
14 imports = [
15 (mkRenamedOptionModule [ "services" "sslh" "listenAddress" ] [ "services" "sslh" "listenAddresses" ])
16+ (mkRenamedOptionModule [ "services" "sslh" "timeout" ] [ "services" "sslh" "settings" "timeout" ])
17+ (mkRenamedOptionModule [ "services" "sslh" "transparent" ] [ "services" "sslh" "settings" "transparent" ])
18+ (mkRemovedOptionModule [ "services" "sslh" "appendConfig" ] "Use services.sslh.settings instead")
19+ (mkChangedOptionModule [ "services" "sslh" "verbose" ] [ "services" "sslh" "settings" "verbose-connections" ]
20+ (config: if config.services.sslh.verbose then 1 else 0))
21 ];
2223+ meta.buildDocsInSandbox = false;
24+25+ options.services.sslh = {
26+ enable = mkEnableOption (lib.mdDoc "sslh, protocol demultiplexer");
27+28+ method = mkOption {
29+ type = types.enum [ "fork" "select" "ev" ];
30+ default = "fork";
31+ description = lib.mdDoc ''
32+ The method to use for handling connections:
33+34+ - `fork` forks a new process for each incoming connection. It is
35+ well-tested and very reliable, but incurs the overhead of many
36+ processes.
37+38+ - `select` uses only one thread, which monitors all connections at once.
39+ It has lower overhead per connection, but if it stops, you'll lose all
40+ connections.
41+42+ - `ev` is implemented using libev, it's similar to `select` but
43+ scales better to a large number of connections.
44+ '';
45+ };
46+47+ listenAddresses = mkOption {
48+ type = with types; coercedTo str singleton (listOf str);
49+ default = [ "0.0.0.0" "[::]" ];
50+ description = lib.mdDoc "Listening addresses or hostnames.";
51+ };
52+53+ port = mkOption {
54+ type = types.port;
55+ default = 443;
56+ description = lib.mdDoc "Listening port.";
57+ };
58+59+ settings = mkOption {
60+ type = types.submodule {
61+ freeformType = configFormat.type;
62+63+ options.timeout = mkOption {
64+ type = types.ints.unsigned;
65+ default = 2;
66+ description = lib.mdDoc "Timeout in seconds.";
67+ };
68+69+ options.transparent = mkOption {
70+ type = types.bool;
71+ default = false;
72+ description = lib.mdDoc ''
73+ Whether the services behind sslh (Apache, sshd and so on) will see the
74+ external IP and ports as if the external world connected directly to
75+ them.
76+ '';
77+ };
78+79+ options.verbose-connections = mkOption {
80+ type = types.ints.between 0 4;
81+ default = 0;
82+ description = lib.mdDoc ''
83+ Where to log connections information. Possible values are:
84+85+ 0. don't log anything
86+ 1. write log to stdout
87+ 2. write log to syslog
88+ 3. write log to both stdout and syslog
89+ 4. write to a log file ({option}`sslh.settings.logfile`)
90+ '';
91+ };
92+93+ options.numeric = mkOption {
94+ type = types.bool;
95+ default = true;
96+ description = lib.mdDoc ''
97+ Whether to disable reverse DNS lookups, thus keeping IP
98+ address literals in the log.
99+ '';
100+ };
101+102+ options.protocols = mkOption {
103+ type = types.listOf configFormat.type;
104+ default = [
105+ { name = "ssh"; host = "localhost"; port = "22"; service= "ssh"; }
106+ { name = "openvpn"; host = "localhost"; port = "1194"; }
107+ { name = "xmpp"; host = "localhost"; port = "5222"; }
108+ { name = "http"; host = "localhost"; port = "80"; }
109+ { name = "tls"; host = "localhost"; port = "443"; }
110+ { name = "anyprot"; host = "localhost"; port = "443"; }
111+ ];
112+ description = lib.mdDoc ''
113+ List of protocols sslh will probe for and redirect.
114+ Each protocol entry consists of:
115+116+ - `name`: name of the probe.
117118+ - `service`: libwrap service name (see {manpage}`hosts_access(5)`),
0000119120+ - `host`, `port`: where to connect when this probe succeeds,
0000121122+ - `log_level`: to log incoming connections,
0000123124+ - `transparent`: proxy this protocol transparently,
0000125126+ - etc.
0000127128+ See the documentation for all options, including probe-specific ones.
129+ '';
130+ };
0131 };
132+ description = lib.mdDoc "sslh configuration. See {manpage}`sslh(8)` for available settings.";
133 };
134 };
135···146 PermissionsStartOnly = true;
147 Restart = "always";
148 RestartSec = "1s";
149+ ExecStart = "${pkgs.sslh}/bin/sslh-${cfg.method} -F${configFile}";
150 KillMode = "process";
151+ AmbientCapabilities = ["CAP_NET_BIND_SERVICE" "CAP_NET_ADMIN" "CAP_SETGID" "CAP_SETUID"];
152 PrivateTmp = true;
153 PrivateDevices = true;
154 ProtectSystem = "full";
155 ProtectHome = true;
156 };
157 };
158+159+ services.sslh.settings = {
160+ # Settings defined here are not supposed to be changed: doing so will
161+ # break the module, as such you need `lib.mkForce` to override them.
162+ foreground = true;
163+ inetd = false;
164+ listen = map (addr: { host = addr; port = toString cfg.port; }) cfg.listenAddresses;
165+ };
166+167 })
168169 # code from https://github.com/yrutschle/sslh#transparent-proxy-support
170 # the only difference is using iptables mark 0x2 instead of 0x1 to avoid conflicts with nixos/nat module
171+ (mkIf (cfg.enable && cfg.settings.transparent) {
172 # Set route_localnet = 1 on all interfaces so that ssl can use "localhost" as destination
173 boot.kernel.sysctl."net.ipv4.conf.default.route_localnet" = 1;
174 boot.kernel.sysctl."net.ipv4.conf.all.route_localnet" = 1;
+40-10
nixos/modules/tasks/filesystems/bcachefs.nix
···52 }
53 '';
5455- openCommand = name: fs:
56- let
57- # we need only unlock one device manually, and cannot pass multiple at once
58- # remove this adaptation when bcachefs implements mounting by filesystem uuid
59- # also, implement automatic waiting for the constituent devices when that happens
60- # bcachefs does not support mounting devices with colons in the path, ergo we don't (see #49671)
61- firstDevice = head (splitString ":" fs.device);
62- in
63- ''
64- tryUnlock ${name} ${firstDevice}
00000000000000000000000065 '';
006667in
68···75 # use kernel package with bcachefs support until it's in mainline
76 # TODO replace with requireKernelConfig
77 boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
0078 }
7980 (mkIf ((elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
···94 '';
9596 boot.initrd.postDeviceCommands = commonFunctions + concatStrings (mapAttrsToList openCommand bootFs);
0097 })
98 ]);
99}
···52 }
53 '';
5455+ # we need only unlock one device manually, and cannot pass multiple at once
56+ # remove this adaptation when bcachefs implements mounting by filesystem uuid
57+ # also, implement automatic waiting for the constituent devices when that happens
58+ # bcachefs does not support mounting devices with colons in the path, ergo we don't (see #49671)
59+ firstDevice = fs: head (splitString ":" fs.device);
60+61+ openCommand = name: fs: ''
62+ tryUnlock ${name} ${firstDevice fs}
63+ '';
64+65+ mkUnits = prefix: name: fs: let
66+ mountUnit = "${utils.escapeSystemdPath (prefix + (lib.removeSuffix "/" fs.mountPoint))}.mount";
67+ device = firstDevice fs;
68+ deviceUnit = "${utils.escapeSystemdPath device}.device";
69+ in {
70+ name = "unlock-bcachefs-${utils.escapeSystemdPath fs.mountPoint}";
71+ value = {
72+ description = "Unlock bcachefs for ${fs.mountPoint}";
73+ requiredBy = [ mountUnit ];
74+ before = [ mountUnit ];
75+ bindsTo = [ deviceUnit ];
76+ after = [ deviceUnit ];
77+ unitConfig.DefaultDependencies = false;
78+ serviceConfig = {
79+ Type = "oneshot";
80+ ExecCondition = "${pkgs.bcachefs-tools}/bin/bcachefs unlock -c \"${device}\"";
81+ Restart = "on-failure";
82+ RestartMode = "direct";
83+ # Ideally, this service would lock the key on stop.
84+ # As is, RemainAfterExit doesn't accomplish anything.
85+ RemainAfterExit = true;
86+ };
87+ script = ''
88+ ${config.boot.initrd.systemd.package}/bin/systemd-ask-password --timeout=0 "enter passphrase for ${name}" | exec ${pkgs.bcachefs-tools}/bin/bcachefs unlock "${device}"
89 '';
90+ };
91+ };
9293in
94···101 # use kernel package with bcachefs support until it's in mainline
102 # TODO replace with requireKernelConfig
103 boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
104+105+ systemd.services = lib.mapAttrs' (mkUnits "") (lib.filterAttrs (n: fs: (fs.fsType == "bcachefs") && (!utils.fsNeededForBoot fs)) config.fileSystems);
106 }
107108 (mkIf ((elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
···122 '';
123124 boot.initrd.postDeviceCommands = commonFunctions + concatStrings (mapAttrsToList openCommand bootFs);
125+126+ boot.initrd.systemd.services = lib.mapAttrs' (mkUnits "/sysroot") bootFs;
127 })
128 ]);
129}
+2
nixos/tests/installer-systemd-stage-1.nix
···8 # them when fixed.
9 inherit (import ./installer.nix { inherit system config pkgs; systemdStage1 = true; })
10 # bcache
0011 btrfsSimple
12 btrfsSubvolDefault
13 btrfsSubvolEscape
···937 enableOCR = true;
938 preBootCommands = ''
939 machine.start()
940+ # Enter it wrong once
941+ machine.wait_for_text("enter passphrase for ")
942+ machine.send_chars("wrong\n")
943+ # Then enter it right.
944 machine.wait_for_text("enter passphrase for ")
945 machine.send_chars("password\n")
946 '';
···151 """Maps a channel name to the corresponding main Nixpkgs attribute name."""
152 if channel_name == 'stable':
153 return 'chromium'
154- if channel_name == 'beta':
155- return 'chromiumBeta'
156- if channel_name == 'dev':
157- return 'chromiumDev'
158 if channel_name == 'ungoogled-chromium':
159 return 'ungoogled-chromium'
160 print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr)
···204 # If we've already found a newer release for this channel, we're
205 # no longer interested in it.
206 if channel_name in channels:
0000207 continue
208209 # If we're back at the last release we used, we don't need to
···151 """Maps a channel name to the corresponding main Nixpkgs attribute name."""
152 if channel_name == 'stable':
153 return 'chromium'
0000154 if channel_name == 'ungoogled-chromium':
155 return 'ungoogled-chromium'
156 print(f'Error: Unexpected channel: {channel_name}', file=sys.stderr)
···200 # If we've already found a newer release for this channel, we're
201 # no longer interested in it.
202 if channel_name in channels:
203+ continue
204+205+ # We only look for channels that are listed in our version pin file.
206+ if channel_name not in last_channels:
207 continue
208209 # If we're back at the last release we used, we don't need to
···134 chefdk = throw "chefdk has been removed due to being deprecated upstream by Chef Workstation"; # Added 2023-03-22
135 chocolateDoom = chocolate-doom; # Added 2023-05-01
136 chrome-gnome-shell = gnome-browser-connector; # Added 2022-07-27
00137 citra = citra-nightly; # added 2022-05-17
138 clang-ocl = throw "'clang-ocl' has been replaced with 'rocmPackages.clang-ocl'"; # Added 2023-10-08
139 inherit (libsForQt5.mauiPackages) clip; # added 2022-05-17
···317 godot-headless = throw "godot-headless has been renamed to godot3-headless to distinguish from version 4"; # Added 2023-07-16
318 godot-server = throw "godot-server has been renamed to godot3-server to distinguish from version 4"; # Added 2023-07-16
31900320 google-gflags = throw "'google-gflags' has been renamed to/replaced by 'gflags'"; # Converted to throw 2023-09-10
321 go-thumbnailer = thud; # Added 2023-09-21
322 gometer = throw "gometer has been removed from nixpkgs because goLance stopped offering Linux support"; # Added 2023-02-10
···134 chefdk = throw "chefdk has been removed due to being deprecated upstream by Chef Workstation"; # Added 2023-03-22
135 chocolateDoom = chocolate-doom; # Added 2023-05-01
136 chrome-gnome-shell = gnome-browser-connector; # Added 2022-07-27
137+ chromiumBeta = throw "'chromiumBeta' has been removed due to the lack of maintenance in nixpkgs. Consider using 'chromium' instead."; # Added 2023-10-18
138+ chromiumDev = throw "'chromiumDev' has been removed due to the lack of maintenance in nixpkgs. Consider using 'chromium' instead."; # Added 2023-10-18
139 citra = citra-nightly; # added 2022-05-17
140 clang-ocl = throw "'clang-ocl' has been replaced with 'rocmPackages.clang-ocl'"; # Added 2023-10-08
141 inherit (libsForQt5.mauiPackages) clip; # added 2022-05-17
···319 godot-headless = throw "godot-headless has been renamed to godot3-headless to distinguish from version 4"; # Added 2023-07-16
320 godot-server = throw "godot-server has been renamed to godot3-server to distinguish from version 4"; # Added 2023-07-16
321322+ google-chrome-beta = throw "'google-chrome-beta' has been removed due to the lack of maintenance in nixpkgs. Consider using 'google-chrome' instead."; # Added 2023-10-18
323+ google-chrome-dev = throw "'google-chrome-dev' has been removed due to the lack of maintenance in nixpkgs. Consider using 'google-chrome' instead."; # Added 2023-10-18
324 google-gflags = throw "'google-gflags' has been renamed to/replaced by 'gflags'"; # Converted to throw 2023-09-10
325 go-thumbnailer = thud; # Added 2023-09-21
326 gometer = throw "gometer has been removed from nixpkgs because goLance stopped offering Linux support"; # Added 2023-02-10