···160 Refer to the `nixos-generate-config` step in
161 [](#sec-installation) for more information.
162000000000000163 You'll likely want to set a root password for your first boot using
164 the configuration files because you won't have a chance to enter a
165 password until after you reboot. You can initialize the root password
···231 $ echo etc/nixos | sudo tee -a /etc/NIXOS_LUSTRATE
232 ```
233234-1. Finally, move the `/boot` directory of your current distribution out
235- of the way (the lustrate process will take care of the rest once you
236- reboot, but this one must be moved out now because NixOS needs to
237- install its own boot files:
000000238239 ::: {.warning}
240- Once you complete this step, your current distribution will no
241- longer be bootable! If you didn't get all the NixOS configuration
242- right, especially those settings pertaining to boot loading and root
243- partition, NixOS may not be bootable either. Have a USB rescue
244- device ready in case this happens.
00245 :::
246247 ```ShellSession
248- $ sudo mv -v /boot /boot.bak &&
249- sudo /nix/var/nix/profiles/system/bin/switch-to-configuration boot
250 ```
251252 Cross your fingers, reboot, hopefully you should get a NixOS prompt!
0000000000002532541. If for some reason you want to revert to the old distribution,
255 you'll need to boot on a USB rescue disk and do something along
···160 Refer to the `nixos-generate-config` step in
161 [](#sec-installation) for more information.
162163+ ::: {.note}
164+ On [UEFI](https://en.wikipedia.org/wiki/UEFI) systems, check that your `/etc/nixos/hardware-configuration.nix` did the right thing with the [EFI System Partition](https://en.wikipedia.org/wiki/EFI_system_partition).
165+ In NixOS, by default, both [systemd-boot](https://systemd.io/BOOT/) and [grub](https://www.gnu.org/software/grub/index.html) expect it to be mounted on `/boot`.
166+ However, the configuration generator bases its [](#opt-fileSystems) configuration on the current mount points at the time it is run.
167+ If the current system and NixOS's bootloader configuration don't agree on where the [EFI System Partition](https://en.wikipedia.org/wiki/EFI_system_partition) is to be mounted, you'll need to manually alter the mount point in `hardware-configuration.nix` before building the system closure.
168+ :::
169+170+ ::: {.note}
171+ The lustrate process will not work if the [](#opt-boot.initrd.systemd.enable) option is set to `true`.
172+ If you want to use this option, wait until after the first boot into the NixOS system to enable it and rebuild.
173+ :::
174+175 You'll likely want to set a root password for your first boot using
176 the configuration files because you won't have a chance to enter a
177 password until after you reboot. You can initialize the root password
···243 $ echo etc/nixos | sudo tee -a /etc/NIXOS_LUSTRATE
244 ```
245246+1. Finally, install NixOS's boot system, backing up the current boot system's files in the process.
247+248+ The details of this step can vary depending on the bootloader configuration in NixOS and the bootloader in use by the current system.
249+250+ The commands below should work for:
251+252+ - [BIOS](https://en.wikipedia.org/wiki/BIOS) systems.
253+254+ - [UEFI](https://en.wikipedia.org/wiki/UEFI) systems where both the current system and NixOS mount the [EFI System Partition](https://en.wikipedia.org/wiki/EFI_system_partition) on `/boot`.
255+ Both [systemd-boot](https://systemd.io/BOOT/) and [grub](https://www.gnu.org/software/grub/index.html) expect this by default in NixOS, but other distributions vary.
256257 ::: {.warning}
258+ Once you complete this step, your current distribution will no longer be bootable!
259+ If you didn't get all the NixOS configuration right, especially those settings pertaining to boot loading and root partition, NixOS may not be bootable either.
260+ Have a USB rescue device ready in case this happens.
261+ :::
262+263+ ::: {.warning}
264+ On [UEFI](https://en.wikipedia.org/wiki/UEFI) systems, anything on the [EFI System Partition](https://en.wikipedia.org/wiki/EFI_system_partition) will be removed by these commands, such as other coexisting OS's bootloaders.
265 :::
266267 ```ShellSession
268+ $ sudo mkdir /boot.bak && sudo mv /boot/* /boot.bak &&
269+ sudo NIXOS_INSTALL_BOOTLOADER=1 /nix/var/nix/profiles/system/bin/switch-to-configuration boot
270 ```
271272 Cross your fingers, reboot, hopefully you should get a NixOS prompt!
273+274+ In other cases, most commonly where the [EFI System Partition](https://en.wikipedia.org/wiki/EFI_system_partition) of the current system is instead mounted on `/boot/efi`, the goal is to:
275+276+ - Make sure `/boot` (and the [EFI System Partition](https://en.wikipedia.org/wiki/EFI_system_partition), if mounted elsewhere) are mounted how the NixOS configuration would mount them.
277+278+ - Clear them of files related to the current system, backing them up outside of `/boot`.
279+ NixOS will move the backups into `/old-root` along with everything else when it first boots.
280+281+ - Instruct the NixOS closure built earlier to install its bootloader with:
282+ ```ShellSession
283+ sudo NIXOS_INSTALL_BOOTLOADER=1 /nix/var/nix/profiles/system/bin/switch-to-configuration boot
284+ ```
2852861. If for some reason you want to revert to the old distribution,
287 you'll need to boot on a USB rescue disk and do something along
···17 sdImage = {
18 populateFirmwareCommands = let
19 configTxt = pkgs.writeText "config.txt" ''
000020 # Prevent the firmware from smashing the framebuffer setup done by the mainline kernel
21 # when attempting to show low-voltage or overtemperature warnings.
22 avoid_warnings=1
···28 kernel=u-boot-rpi1.bin
29 '';
30 in ''
31- (cd ${pkgs.raspberrypifw}/share/raspberrypi/boot && cp bootcode.bin fixup*.dat start*.elf $NIX_BUILD_TOP/firmware/)
32 cp ${pkgs.ubootRaspberryPiZero}/u-boot.bin firmware/u-boot-rpi0.bin
33 cp ${pkgs.ubootRaspberryPi}/u-boot.bin firmware/u-boot-rpi1.bin
34 cp ${configTxt} firmware/config.txt
···17 sdImage = {
18 populateFirmwareCommands = let
19 configTxt = pkgs.writeText "config.txt" ''
20+ # u-boot refuses to start (gets stuck at rainbow polygon) without this,
21+ # at least on Raspberry Pi 0.
22+ enable_uart=1
23+24 # Prevent the firmware from smashing the framebuffer setup done by the mainline kernel
25 # when attempting to show low-voltage or overtemperature warnings.
26 avoid_warnings=1
···32 kernel=u-boot-rpi1.bin
33 '';
34 in ''
35+ (cd ${pkgs.raspberrypifw}/share/raspberrypi/boot && cp bootcode.bin fixup*.dat start*.elf *.dtb $NIX_BUILD_TOP/firmware/)
36 cp ${pkgs.ubootRaspberryPiZero}/u-boot.bin firmware/u-boot-rpi0.bin
37 cp ${pkgs.ubootRaspberryPi}/u-boot.bin firmware/u-boot-rpi1.bin
38 cp ${configTxt} firmware/config.txt
+2-2
nixos/modules/profiles/installation-device.nix
···74 # installation device for head-less systems i.e. arm boards by manually
75 # mounting the storage in a different system.
76 services.openssh = {
77- enable = true;
78- settings.PermitRootLogin = "yes";
79 };
8081 # Enable wpa_supplicant, but don't start it by default.
···74 # installation device for head-less systems i.e. arm boards by manually
75 # mounting the storage in a different system.
76 services.openssh = {
77+ enable = mkDefault true;
78+ settings.PermitRootLogin = mkDefault "yes";
79 };
8081 # Enable wpa_supplicant, but don't start it by default.
···1035 all kernel interfaces.
1036 '';
10371038- start_action = mkEnumParam ["none" "trap" "start"] "none" ''
1039 Action to perform after loading the configuration.
10401041 - The default of `none` loads the connection only, which
···1043 - The value `trap` installs a trap policy, which triggers
1044 the tunnel as soon as matching traffic has been detected.
1045 - The value `start` initiates the connection actively.
0010461047 When unloading or replacing a CHILD_SA configuration having a
1048 {option}`start_action` different from `none`,
···1035 all kernel interfaces.
1036 '';
10371038+ start_action = mkEnumParam ["none" "trap" "start" "trap|start" ] "none" ''
1039 Action to perform after loading the configuration.
10401041 - The default of `none` loads the connection only, which
···1043 - The value `trap` installs a trap policy, which triggers
1044 the tunnel as soon as matching traffic has been detected.
1045 - The value `start` initiates the connection actively.
1046+ - Since version 5.9.6 two modes above can be combined with `trap|start`,
1047+ to immediately initiate a connection for which trap policies have been installed.
10481049 When unloading or replacing a CHILD_SA configuration having a
1050 {option}`start_action` different from `none`,
-9
nixos/modules/services/web-apps/plausible.md
···15{
16 services.plausible = {
17 enable = true;
18- adminUser = {
19- # activate is used to skip the email verification of the admin-user that's
20- # automatically created by plausible. This is only supported if
21- # postgresql is configured by the module. This is done by default, but
22- # can be turned off with services.plausible.database.postgres.setup.
23- activate = true;
24- email = "admin@localhost";
25- passwordFile = "/run/secrets/plausible-admin-pwd";
26- };
27 server = {
28 baseUrl = "http://analytics.example.org";
29 # secretKeybaseFile is a path to the file which contains the secret generated
···15{
16 services.plausible = {
17 enable = true;
00000000018 server = {
19 baseUrl = "http://analytics.example.org";
20 # secretKeybaseFile is a path to the file which contains the secret generated
+5-47
nixos/modules/services/web-apps/plausible.nix
···1112 package = mkPackageOption pkgs "plausible" { };
1314- adminUser = {
15- name = mkOption {
16- default = "admin";
17- type = types.str;
18- description = ''
19- Name of the admin user that plausible will created on initial startup.
20- '';
21- };
22-23- email = mkOption {
24- type = types.str;
25- example = "admin@localhost";
26- description = ''
27- Email-address of the admin-user.
28- '';
29- };
30-31- passwordFile = mkOption {
32- type = types.either types.str types.path;
33- description = ''
34- Path to the file which contains the password of the admin user.
35- '';
36- };
37-38- activate = mkEnableOption "activating the freshly created admin-user";
39- };
40-41 database = {
42 clickhouse = {
43 setup = mkEnableOption "creating a clickhouse instance" // { default = true; };
···164165 imports = [
166 (mkRemovedOptionModule [ "services" "plausible" "releaseCookiePath" ] "Plausible uses no distributed Erlang features, so this option is no longer necessary and was removed")
0000167 ];
168169 config = mkIf cfg.enable {
170- assertions = [
171- { assertion = cfg.adminUser.activate -> cfg.database.postgres.setup;
172- message = ''
173- Unable to automatically activate the admin-user if no locally managed DB for
174- postgres (`services.plausible.database.postgres.setup') is enabled!
175- '';
176- }
177- ];
178-179 services.postgresql = mkIf cfg.database.postgres.setup {
180 enable = true;
181 };
···243 # Home is needed to connect to the node with iex
244 HOME = "/var/lib/plausible";
245246- ADMIN_USER_NAME = cfg.adminUser.name;
247- ADMIN_USER_EMAIL = cfg.adminUser.email;
248-249- DATABASE_SOCKET_DIR = cfg.database.postgres.socket;
250- DATABASE_NAME = cfg.database.postgres.dbname;
251 CLICKHOUSE_DATABASE_URL = cfg.database.clickhouse.url;
252253 BASE_URL = cfg.server.baseUrl;
···270 # even though we set `RELEASE_DISTRIBUTION=none` so the cookie should be unused.
271 # Thus, make a random one, which should then be ignored.
272 export RELEASE_COOKIE=$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 20)
273- export ADMIN_USER_PWD="$(< $CREDENTIALS_DIRECTORY/ADMIN_USER_PWD )"
274 export SECRET_KEY_BASE="$(< $CREDENTIALS_DIRECTORY/SECRET_KEY_BASE )"
275276 ${lib.optionalString (cfg.mail.smtp.passwordFile != null)
···283284 ${cfg.package}/migrate.sh
285 export IP_GEOLOCATION_DB=${pkgs.dbip-country-lite}/share/dbip/dbip-country-lite.mmdb
286- ${cfg.package}/bin/plausible eval "(Plausible.Release.prepare() ; Plausible.Auth.create_user(\"$ADMIN_USER_NAME\", \"$ADMIN_USER_EMAIL\", \"$ADMIN_USER_PWD\"))"
287- ${optionalString cfg.adminUser.activate ''
288- psql -d plausible <<< "UPDATE users SET email_verified=true where email = '$ADMIN_USER_EMAIL';"
289- ''}
290291 exec plausible start
292 '';
···297 WorkingDirectory = "/var/lib/plausible";
298 StateDirectory = "plausible";
299 LoadCredential = [
300- "ADMIN_USER_PWD:${cfg.adminUser.passwordFile}"
301 "SECRET_KEY_BASE:${cfg.server.secretKeybaseFile}"
302 ] ++ lib.optionals (cfg.mail.smtp.passwordFile != null) [ "SMTP_USER_PWD:${cfg.mail.smtp.passwordFile}"];
303 };
···1112 package = mkPackageOption pkgs "plausible" { };
1300000000000000000000000000014 database = {
15 clickhouse = {
16 setup = mkEnableOption "creating a clickhouse instance" // { default = true; };
···137138 imports = [
139 (mkRemovedOptionModule [ "services" "plausible" "releaseCookiePath" ] "Plausible uses no distributed Erlang features, so this option is no longer necessary and was removed")
140+ (mkRemovedOptionModule [ "services" "plausible" "adminUser" "name" ] "Admin user is now created using first start wizard")
141+ (mkRemovedOptionModule [ "services" "plausible" "adminUser" "email" ] "Admin user is now created using first start wizard")
142+ (mkRemovedOptionModule [ "services" "plausible" "adminUser" "passwordFile" ] "Admin user is now created using first start wizard")
143+ (mkRemovedOptionModule [ "services" "plausible" "adminUser" "activate" ] "Admin user is now created using first start wizard")
144 ];
145146 config = mkIf cfg.enable {
000000000147 services.postgresql = mkIf cfg.database.postgres.setup {
148 enable = true;
149 };
···211 # Home is needed to connect to the node with iex
212 HOME = "/var/lib/plausible";
213214+ DATABASE_URL = "postgresql:///${cfg.database.postgres.dbname}?host=${cfg.database.postgres.socket}";
0000215 CLICKHOUSE_DATABASE_URL = cfg.database.clickhouse.url;
216217 BASE_URL = cfg.server.baseUrl;
···234 # even though we set `RELEASE_DISTRIBUTION=none` so the cookie should be unused.
235 # Thus, make a random one, which should then be ignored.
236 export RELEASE_COOKIE=$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 20)
0237 export SECRET_KEY_BASE="$(< $CREDENTIALS_DIRECTORY/SECRET_KEY_BASE )"
238239 ${lib.optionalString (cfg.mail.smtp.passwordFile != null)
···246247 ${cfg.package}/migrate.sh
248 export IP_GEOLOCATION_DB=${pkgs.dbip-country-lite}/share/dbip/dbip-country-lite.mmdb
0000249250 exec plausible start
251 '';
···256 WorkingDirectory = "/var/lib/plausible";
257 StateDirectory = "plausible";
258 LoadCredential = [
0259 "SECRET_KEY_BASE:${cfg.server.secretKeybaseFile}"
260 ] ++ lib.optionals (cfg.mail.smtp.passwordFile != null) [ "SMTP_USER_PWD:${cfg.mail.smtp.passwordFile}"];
261 };
···41my $out = "@out@";
42# System closure path to switch to
43my $toplevel = "@toplevel@";
44-# Path to the directory containing systemd tools of the old system
45-my $cur_systemd = abs_path("/run/current-system/sw/bin");
46-# Path to the systemd store path of the new system
47-my $new_systemd = "@systemd@";
4849# To be robust against interruption, record what units need to be started etc.
50# We read these files again every time this script starts to make sure we continue
···129if ($action eq "boot") {
130 exit(0);
131}
000000132133# Check if we can activate the new configuration.
134my $cur_init_interface_version = read_file("/run/current-system/init-interface-version", err_mode => "quiet") // "";
···41my $out = "@out@";
42# System closure path to switch to
43my $toplevel = "@toplevel@";
00004445# To be robust against interruption, record what units need to be started etc.
46# We read these files again every time this script starts to make sure we continue
···125if ($action eq "boot") {
126 exit(0);
127}
128+129+# Path to the directory containing systemd tools of the old system
130+# Needs to be after the "boot" action exits, as this directory will not exist when doing a NIXOS_LUSTRATE install
131+my $cur_systemd = abs_path("/run/current-system/sw/bin");
132+# Path to the systemd store path of the new system
133+my $new_systemd = "@systemd@";
134135# Check if we can activate the new configuration.
136my $cur_init_interface_version = read_file("/run/current-system/init-interface-version", err_mode => "quiet") // "";
+3-24
nixos/tests/plausible.nix
···1-import ./make-test-python.nix ({ pkgs, lib, ... }: {
2 name = "plausible";
3- meta = with lib.maintainers; {
4- maintainers = [ ];
5 };
67 nodes.machine = { pkgs, ... }: {
8 virtualisation.memorySize = 4096;
9 services.plausible = {
10 enable = true;
11- adminUser = {
12- email = "admin@example.org";
13- passwordFile = "${pkgs.writeText "pwd" "foobar"}";
14- activate = true;
15- };
16 server = {
17 baseUrl = "http://localhost:8000";
18 secretKeybaseFile = "${pkgs.writeText "dont-try-this-at-home" "nannannannannannannannannannannannannannannannannannannan_batman!"}";
···32 machine.succeed("curl -f localhost:8000 >&2")
3334 machine.succeed("curl -f localhost:8000/js/script.js >&2")
35-36- csrf_token = machine.succeed(
37- "curl -c /tmp/cookies localhost:8000/login | grep '_csrf_token' | sed -E 's,.*value=\"(.*)\".*,\\1,g'"
38- )
39-40- machine.succeed(
41- f"curl -b /tmp/cookies -f -X POST localhost:8000/login -F email=admin@example.org -F password=foobar -F _csrf_token={csrf_token.strip()} -D headers"
42- )
43-44- # By ensuring that the user is redirected to the dashboard after login, we
45- # also make sure that the automatic verification of the module works.
46- machine.succeed(
47- "[[ $(grep 'location: ' headers | cut -d: -f2- | xargs echo) == /sites* ]]"
48- )
49-50- machine.shutdown()
51 '';
52})
···23buildGoModule rec {
4 pname = "orchard";
5- version = "0.24.1";
67 src = fetchFromGitHub {
8 owner = "cirruslabs";
9 repo = pname;
10 rev = version;
11- hash = "sha256-6w/UcifseoajAOKZnn0GJiUzXAmLNGKLDCZkeZLK8NI=";
12 # populate values that require us to use git. By doing this in postFetch we
13 # can delete .git afterwards and maintain better reproducibility of the src.
14 leaveDotGit = true;
···23buildGoModule rec {
4 pname = "orchard";
5+ version = "0.25.2";
67 src = fetchFromGitHub {
8 owner = "cirruslabs";
9 repo = pname;
10 rev = version;
11+ hash = "sha256-FuqzVMpv62Knbbhy9yExyjT2UVdH2KlaQ+ETW8/abWc=";
12 # populate values that require us to use git. By doing this in postFetch we
13 # can delete .git afterwards and maintain better reproducibility of the src.
14 leaveDotGit = true;
···36# note: there is a generic builder in pkgs/games/sm64ex/generic.nix that is meant to help build sm64ex and its forks; however sm64coopdx has departed significantly enough in its build that it doesn't make sense to use that other than the baseRom derivation
37stdenv.mkDerivation (finalAttrs: {
38 pname = "sm64coopdx";
39- version = "1.0.3";
4041 src = fetchFromGitHub {
42 owner = "coop-deluxe";
43 repo = "sm64coopdx";
44 rev = "v${finalAttrs.version}";
45- hash = "sha256-cIH3escLFMcHgtFxeSKIo5nZXvaknti+EVt72uB4XXc=";
46 };
4748 nativeBuildInputs = [ makeWrapper ];
···71 # remove -march flags, stdenv manages them
72 substituteInPlace Makefile \
73 --replace-fail ' -march=$(TARGET_ARCH)' ""
74- # workaround a bug in the build
75- # see https://github.com/coop-deluxe/sm64coopdx/issues/186#issuecomment-2216163935
76- # this can likely be removed when the next version releases
77- make build/us_pc/sound/sequences.bin
78 '';
7980 installPhase = ''
···36# note: there is a generic builder in pkgs/games/sm64ex/generic.nix that is meant to help build sm64ex and its forks; however sm64coopdx has departed significantly enough in its build that it doesn't make sense to use that other than the baseRom derivation
37stdenv.mkDerivation (finalAttrs: {
38 pname = "sm64coopdx";
39+ version = "1.0.4";
4041 src = fetchFromGitHub {
42 owner = "coop-deluxe";
43 repo = "sm64coopdx";
44 rev = "v${finalAttrs.version}";
45+ hash = "sha256-v50C87/NN75owxtLL4vm8TLZha7U8FkefPhpO6iXYGU=";
46 };
4748 nativeBuildInputs = [ makeWrapper ];
···71 # remove -march flags, stdenv manages them
72 substituteInPlace Makefile \
73 --replace-fail ' -march=$(TARGET_ARCH)' ""
000074 '';
7576 installPhase = ''
···997 std::env::set_var("LOCALE_ARCHIVE", locale_archive);
998 }
9991000- let current_system_bin = std::path::PathBuf::from("/run/current-system/sw/bin")
1001- .canonicalize()
1002- .context("/run/current-system/sw/bin is missing")?;
1003-1004 let os_release = parse_os_release().context("Failed to parse os-release")?;
10051006 let distro_id_re = Regex::new(format!("^\"?{}\"?$", distro_id).as_str())
···1071 if *action == Action::Boot {
1072 std::process::exit(0);
1073 }
0000010741075 let current_init_interface_version =
1076 std::fs::read_to_string("/run/current-system/init-interface-version").unwrap_or_default();
···997 std::env::set_var("LOCALE_ARCHIVE", locale_archive);
998 }
99900001000 let os_release = parse_os_release().context("Failed to parse os-release")?;
10011002 let distro_id_re = Regex::new(format!("^\"?{}\"?$", distro_id).as_str())
···1067 if *action == Action::Boot {
1068 std::process::exit(0);
1069 }
1070+1071+ // Needs to be after the "boot" action exits, as this directory will not exist when doing a NIXOS_LUSTRATE install
1072+ let current_system_bin = std::path::PathBuf::from("/run/current-system/sw/bin")
1073+ .canonicalize()
1074+ .context("/run/current-system/sw/bin is missing")?;
10751076 let current_init_interface_version =
1077 std::fs::read_to_string("/run/current-system/init-interface-version").unwrap_or_default();
···2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
056 # dependencies
7 appdirs,
···29 rev = "refs/tags/v${version}";
30 hash = "sha256-dxCGCPnk1IFKg8ZVqMJsojQL0KlNirKlHJoaaOYIzMU=";
31 };
0000000003233 # keras and tensorflow are not in the official setup.py requirements but are required for the CLI utilities to run.
34 dependencies = [
···94 changelog = "https://github.com/openvax/mhcflurry/releases/tag/v${version}";
95 license = lib.licenses.asl20;
96 maintainers = with lib.maintainers; [ samuela ];
97- # Requires a recent version of tensorflow
98- broken = lib.versionOlder tensorflow.version "2.15.0";
99 };
100}
···2 lib,
3 buildPythonPackage,
4 fetchFromGitHub,
5+ fetchpatch,
67 # dependencies
8 appdirs,
···30 rev = "refs/tags/v${version}";
31 hash = "sha256-dxCGCPnk1IFKg8ZVqMJsojQL0KlNirKlHJoaaOYIzMU=";
32 };
33+34+ patches = [
35+ # TODO: this has been merged in master and will thus be included in the next release.
36+ (fetchpatch {
37+ name = "migrate-from-nose-to-pytest";
38+ url = "https://github.com/openvax/mhcflurry/commit/8e9f35381a476362ca41cb71eb0a90f6573fe4b3.patch";
39+ hash = "sha256-PyyxGrjE3OZR8dKHEQBQGiRG9A8kcz/e14PRyrVvqrE=";
40+ })
41+ ];
4243 # keras and tensorflow are not in the official setup.py requirements but are required for the CLI utilities to run.
44 dependencies = [
···104 changelog = "https://github.com/openvax/mhcflurry/releases/tag/v${version}";
105 license = lib.licenses.asl20;
106 maintainers = with lib.maintainers; [ samuela ];
00107 };
108}
···69+
70+ Rectangle {
71+ width: 700
72-+ height: 200
73+ color: palette.base
74+ radius: 10
75+ border.width: 0
76+ Text {
77+ color: palette.text
78+ width: 600
79-+ height: 150
80+ anchors.centerIn: parent
81-+ text: qsTr("NixOS is fully open source, but it also provides optional software packages that do not respect users' freedom to run, copy, distribute, study, change and improve the software, and are commonly not open source. By default such "unfree" packages are not allowed, but you can enable it here. If you check this box, you agree that unfree software may be installed which might have additional End User License Agreements (EULAs) that you need to agree to. If not enabled, some hardware (notably Nvidia GPUs and some WiFi chips) might not work or not work optimally.<br/>")
82+ font.pointSize: 12
83+ wrapMode: Text.WordWrap
84+ }
···86+ CheckBox {
87+ id: element2
88+ anchors.horizontalCenter: parent.horizontalCenter
89-+ y: 145
90+ text: qsTr("Allow unfree software")
91+ checked: false
92+
···69+
70+ Rectangle {
71+ width: 700
72++ height: 250
73+ color: palette.base
74+ radius: 10
75+ border.width: 0
76+ Text {
77+ color: palette.text
78+ width: 600
79++ height: 200
80+ anchors.centerIn: parent
81++ text: qsTr("NixOS is fully open source, but it also provides optional software packages that do not respect users' freedom to run, copy, distribute, study, change and improve the software, and are commonly not open source. By default such \"unfree\" packages are not allowed, but you can enable it here. If you check this box, you agree that unfree software may be installed which might have additional End User License Agreements (EULAs) that you need to agree to. If not enabled, some hardware (notably Nvidia GPUs and some WiFi chips) might not work or not work optimally.<br/>")
82+ font.pointSize: 12
83+ wrapMode: Text.WordWrap
84+ }
···86+ CheckBox {
87+ id: element2
88+ anchors.horizontalCenter: parent.horizontalCenter
89++ y: 190
90+ text: qsTr("Allow unfree software")
91+ checked: false
92+
···70 ### I ###
7172 insert_dylib = throw "'darwin.insert_dylib' has been renamed to 'insert-dylib'"; # added 2024-04-04
07374 ### L ###
75
···70 ### I ###
7172 insert_dylib = throw "'darwin.insert_dylib' has been renamed to 'insert-dylib'"; # added 2024-04-04
73+ ios-deploy = throw "'darwin.ios-deploy' has been renamed to 'ios-deploy'"; # added 2024-11-28
7475 ### L ###
76
-2
pkgs/top-level/darwin-packages.nix
···229 # As the name says, this is broken, but I don't want to lose it since it's a direction we want to go in
230 # libdispatch-broken = callPackage ../os-specific/darwin/swift-corelibs/libdispatch.nix { };
231232- ios-deploy = callPackage ../os-specific/darwin/ios-deploy {};
233-234 # See doc/packages/darwin-builder.section.md
235 linux-builder = lib.makeOverridable ({ modules }:
236 let
···229 # As the name says, this is broken, but I don't want to lose it since it's a direction we want to go in
230 # libdispatch-broken = callPackage ../os-specific/darwin/swift-corelibs/libdispatch.nix { };
23100232 # See doc/packages/darwin-builder.section.md
233 linux-builder = lib.makeOverridable ({ modules }:
234 let