mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-02-14 16:14:50 +00:00
Merge branch 'NixOS:master' into master
This commit is contained in:
commit
a4c569c9e5
1
.github/workflows/check-nix-format.yml
vendored
1
.github/workflows/check-nix-format.yml
vendored
@ -37,6 +37,7 @@ jobs:
|
||||
pkgs/development/cuda-modules
|
||||
pkgs/test/cuda
|
||||
pkgs/top-level/cuda-packages.nix
|
||||
NIX_FMT_PATHS_VSCODE_EXTS: pkgs/applications/editors/vscode/extensions
|
||||
# Iterate over all environment variables beginning with NIX_FMT_PATHS_.
|
||||
run: |
|
||||
for env_var in "${!NIX_FMT_PATHS_@}"; do
|
||||
|
@ -632,6 +632,11 @@ in mkLicense lset) ({
|
||||
url = "https://old.calculate-linux.org/packages/licenses/iASL";
|
||||
};
|
||||
|
||||
icu = {
|
||||
spdxId = "ICU";
|
||||
fullName = "ICU";
|
||||
};
|
||||
|
||||
ijg = {
|
||||
spdxId = "IJG";
|
||||
fullName = "Independent JPEG Group License";
|
||||
|
@ -13,7 +13,7 @@ let
|
||||
"x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin"
|
||||
|
||||
# FreeBSD
|
||||
"i686-freebsd13" "x86_64-freebsd13"
|
||||
"i686-freebsd" "x86_64-freebsd"
|
||||
|
||||
# Genode
|
||||
"aarch64-genode" "i686-genode" "x86_64-genode"
|
||||
|
@ -328,7 +328,7 @@ rec {
|
||||
# BSDs
|
||||
|
||||
x86_64-freebsd = {
|
||||
config = "x86_64-unknown-freebsd13";
|
||||
config = "x86_64-unknown-freebsd";
|
||||
useLLVM = true;
|
||||
};
|
||||
|
||||
|
@ -326,11 +326,7 @@ rec {
|
||||
# the normalized name for macOS.
|
||||
macos = { execFormat = macho; families = { inherit darwin; }; name = "darwin"; };
|
||||
ios = { execFormat = macho; families = { inherit darwin; }; };
|
||||
# A tricky thing about FreeBSD is that there is no stable ABI across
|
||||
# versions. That means that putting in the version as part of the
|
||||
# config string is paramount.
|
||||
freebsd12 = { execFormat = elf; families = { inherit bsd; }; name = "freebsd"; version = 12; };
|
||||
freebsd13 = { execFormat = elf; families = { inherit bsd; }; name = "freebsd"; version = 13; };
|
||||
freebsd = { execFormat = elf; families = { inherit bsd; }; name = "freebsd"; };
|
||||
linux = { execFormat = elf; families = { }; };
|
||||
netbsd = { execFormat = elf; families = { inherit bsd; }; };
|
||||
none = { execFormat = unknown; families = { }; };
|
||||
|
@ -2,7 +2,7 @@
|
||||
# Don't test properties of pkgs.lib, but rather the lib in the parent directory
|
||||
pkgs ? import ../.. {} // { lib = throw "pkgs.lib accessed, but the lib tests should use nixpkgs' lib path directly!"; },
|
||||
nix ? pkgs-nixVersions.stable,
|
||||
nixVersions ? [ pkgs-nixVersions.minimum nix pkgs-nixVersions.unstable ],
|
||||
nixVersions ? [ pkgs-nixVersions.minimum nix pkgs-nixVersions.latest ],
|
||||
pkgs-nixVersions ? import ./nix-for-tests.nix { inherit pkgs; },
|
||||
}:
|
||||
|
||||
|
@ -40,7 +40,7 @@ lib.runTests (
|
||||
|
||||
testarm = mseteq arm [ "armv5tel-linux" "armv6l-linux" "armv6l-netbsd" "armv6l-none" "armv7a-linux" "armv7a-netbsd" "armv7l-linux" "armv7l-netbsd" "arm-none" "armv7a-darwin" ];
|
||||
testarmv7 = mseteq armv7 [ "armv7a-darwin" "armv7a-linux" "armv7l-linux" "armv7a-netbsd" "armv7l-netbsd" ];
|
||||
testi686 = mseteq i686 [ "i686-linux" "i686-freebsd13" "i686-genode" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
|
||||
testi686 = mseteq i686 [ "i686-linux" "i686-freebsd" "i686-genode" "i686-netbsd" "i686-openbsd" "i686-cygwin" "i686-windows" "i686-none" "i686-darwin" ];
|
||||
testmips = mseteq mips [ "mips-none" "mips64-none" "mips-linux" "mips64-linux" "mips64el-linux" "mipsel-linux" "mipsel-netbsd" ];
|
||||
testmmix = mseteq mmix [ "mmix-mmixware" ];
|
||||
testpower = mseteq power [ "powerpc-netbsd" "powerpc-none" "powerpc64-linux" "powerpc64le-linux" "powerpcle-none" ];
|
||||
@ -48,11 +48,11 @@ lib.runTests (
|
||||
testriscv32 = mseteq riscv32 [ "riscv32-linux" "riscv32-netbsd" "riscv32-none" ];
|
||||
testriscv64 = mseteq riscv64 [ "riscv64-linux" "riscv64-netbsd" "riscv64-none" ];
|
||||
tests390x = mseteq s390x [ "s390x-linux" "s390x-none" ];
|
||||
testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd13" "x86_64-genode" "x86_64-redox" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
|
||||
testx86_64 = mseteq x86_64 [ "x86_64-linux" "x86_64-darwin" "x86_64-freebsd" "x86_64-genode" "x86_64-redox" "x86_64-openbsd" "x86_64-netbsd" "x86_64-cygwin" "x86_64-solaris" "x86_64-windows" "x86_64-none" ];
|
||||
|
||||
testcygwin = mseteq cygwin [ "i686-cygwin" "x86_64-cygwin" ];
|
||||
testdarwin = mseteq darwin [ "x86_64-darwin" "i686-darwin" "aarch64-darwin" "armv7a-darwin" ];
|
||||
testfreebsd = mseteq freebsd [ "i686-freebsd13" "x86_64-freebsd13" ];
|
||||
testfreebsd = mseteq freebsd [ "i686-freebsd" "x86_64-freebsd" ];
|
||||
testgenode = mseteq genode [ "aarch64-genode" "i686-genode" "x86_64-genode" ];
|
||||
testredox = mseteq redox [ "x86_64-redox" ];
|
||||
testgnu = mseteq gnu (linux /* ++ kfreebsd ++ ... */);
|
||||
|
@ -429,6 +429,12 @@
|
||||
githubId = 1517066;
|
||||
name = "Aiken Cairncross";
|
||||
};
|
||||
a-camarillo = {
|
||||
name = "Anthony Camarillo";
|
||||
email = "anthony.camarillo.96@gmail.com";
|
||||
github = "a-camarillo";
|
||||
githubId = 58638902;
|
||||
};
|
||||
aciceri = {
|
||||
name = "Andrea Ciceri";
|
||||
email = "andrea.ciceri@autistici.org";
|
||||
@ -1448,6 +1454,12 @@
|
||||
githubId = 5411704;
|
||||
name = "Manuel Sanchez Pinar";
|
||||
};
|
||||
aos = {
|
||||
email = "n@aos.sh";
|
||||
github = "aos";
|
||||
githubId = 25783780;
|
||||
name = "aos";
|
||||
};
|
||||
apeschar = {
|
||||
email = "albert@peschar.net";
|
||||
github = "apeschar";
|
||||
@ -2071,12 +2083,6 @@
|
||||
githubId = 135230;
|
||||
name = "Aycan iRiCAN";
|
||||
};
|
||||
ayes-web = {
|
||||
email = "ayes2022@protonmail.com";
|
||||
github = "ayes-web";
|
||||
githubId = 52951851;
|
||||
name = "ayes-web";
|
||||
};
|
||||
aynish = {
|
||||
github = "Chickensoupwithrice";
|
||||
githubId = 22575913;
|
||||
@ -2264,6 +2270,12 @@
|
||||
githubId = 576355;
|
||||
name = "Bas van Dijk";
|
||||
};
|
||||
BatteredBunny = {
|
||||
email = "ayes2022@protonmail.com";
|
||||
github = "BatteredBunny";
|
||||
githubId = 52951851;
|
||||
name = "BatteredBunny";
|
||||
};
|
||||
BattleCh1cken = {
|
||||
email = "BattleCh1cken@larkov.de";
|
||||
github = "BattleCh1cken";
|
||||
@ -2937,6 +2949,12 @@
|
||||
fingerprint = "BF4FCB85C69989B4ED95BF938AE74787A4B7C07E";
|
||||
}];
|
||||
};
|
||||
b-rodrigues = {
|
||||
email = "bruno@brodrigues.co";
|
||||
github = "b-rodrigues";
|
||||
githubId = 2998834;
|
||||
name = "Bruno Rodrigues";
|
||||
};
|
||||
broke = {
|
||||
email = "broke@in-fucking.space";
|
||||
github = "broke";
|
||||
@ -3012,6 +3030,12 @@
|
||||
githubId = 37375448;
|
||||
name = "Buildit";
|
||||
};
|
||||
buurro = {
|
||||
email = "marcoburro98@gmail.com";
|
||||
github = "buurro";
|
||||
githubId = 9320677;
|
||||
name = "Marco Burro";
|
||||
};
|
||||
bwc9876 = {
|
||||
email = "bwc9876@gmail.com";
|
||||
github = "Bwc9876";
|
||||
@ -5792,6 +5816,15 @@
|
||||
githubId = 4576666;
|
||||
name = "Eliza Velasquez";
|
||||
};
|
||||
eljamm = {
|
||||
name = "Fedi Jamoussi";
|
||||
email = "fedi.jamoussi@protonmail.ch";
|
||||
github = "eljamm";
|
||||
githubId = 83901271;
|
||||
keys = [{
|
||||
fingerprint = "FF59 E027 4EE2 E792 512B BDC8 7630 FDF7 C8FB 1F3F";
|
||||
}];
|
||||
};
|
||||
elkowar = {
|
||||
email = "thereal.elkowar@gmail.com";
|
||||
github = "elkowar";
|
||||
@ -7702,6 +7735,12 @@
|
||||
githubId = 10654650;
|
||||
name = "Guillaume Koenig";
|
||||
};
|
||||
guitargeek = {
|
||||
email = "jonas.rembser@cern.ch";
|
||||
github = "guitargeek";
|
||||
githubId = 6578603;
|
||||
name = "Jonas Rembser";
|
||||
};
|
||||
guserav = {
|
||||
github = "guserav";
|
||||
githubId = 28863828;
|
||||
@ -7785,6 +7824,12 @@
|
||||
github = "HannahMR";
|
||||
githubId = 9088467;
|
||||
};
|
||||
hannesgith = {
|
||||
email = "nix@h-h.win";
|
||||
github = "hannesgith";
|
||||
githubId = 33062605;
|
||||
name = "Hannes Hattenbach";
|
||||
};
|
||||
hansjoergschurr = {
|
||||
email = "commits@schurr.at";
|
||||
github = "hansjoergschurr";
|
||||
@ -15271,6 +15316,12 @@
|
||||
githubId = 1788628;
|
||||
name = "pandaman";
|
||||
};
|
||||
pandapip1 = {
|
||||
email = "gavinnjohn@gmail.com";
|
||||
github = "Pandapip1";
|
||||
githubId = 45835846;
|
||||
name = "Gavin John";
|
||||
};
|
||||
panicgh = {
|
||||
email = "nbenes.gh@xandea.de";
|
||||
github = "panicgh";
|
||||
@ -15834,6 +15885,13 @@
|
||||
githubId = 4056630;
|
||||
name = "Patrick Steinhardt";
|
||||
};
|
||||
pkulak = {
|
||||
name = "Phil Kulak";
|
||||
email = "phil@kulak.us";
|
||||
matrix = "@phil:kulak.us";
|
||||
github = "pkulak";
|
||||
githubId = 502905;
|
||||
};
|
||||
plabadens = {
|
||||
name = "Pierre Labadens";
|
||||
email = "labadens.pierre+nixpkgs@gmail.com";
|
||||
@ -16500,6 +16558,11 @@
|
||||
githubId = 35229674;
|
||||
name = "Armin Rothfuss";
|
||||
};
|
||||
r3n3gad3p3arl = {
|
||||
github = "r3n3gad3p3arl";
|
||||
githubId = 20760527;
|
||||
name = "Madelyn";
|
||||
};
|
||||
raboof = {
|
||||
email = "arnout@bzzt.net";
|
||||
matrix = "@raboof:matrix.org";
|
||||
@ -16803,6 +16866,12 @@
|
||||
githubId = 18155001;
|
||||
name = "Gabe Dunn";
|
||||
};
|
||||
redyf = {
|
||||
email = "mateusalvespereira7@gmail.com";
|
||||
github = "redyf";
|
||||
githubId = 98139059;
|
||||
name = "Mateus Alves";
|
||||
};
|
||||
reedrw = {
|
||||
email = "reedrw5601@gmail.com";
|
||||
github = "reedrw";
|
||||
|
@ -854,8 +854,10 @@ with lib.maintainers; {
|
||||
|
||||
r = {
|
||||
members = [
|
||||
b-rodrigues
|
||||
bcdarwin
|
||||
jbedo
|
||||
kupac
|
||||
];
|
||||
scope = "Maintain the R programming language and related packages.";
|
||||
shortName = "R";
|
||||
|
@ -10,13 +10,13 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
|
||||
- `cryptsetup` has been upgraded from 2.6.1 to 2.7.0. Cryptsetup is a critical component enabling LUKS-based (but not only) full disk encryption.
|
||||
Take the time to review [the release notes](https://gitlab.com/cryptsetup/cryptsetup/-/raw/v2.7.0/docs/v2.7.0-ReleaseNotes).
|
||||
One of the highlight is that it is now possible to use hardware OPAL-based encryption of your disk with `cryptsetup`, it has a lot of caveats, see the above notes for the full details.
|
||||
One of the highlights is that it is now possible to use hardware OPAL-based encryption of your disk with `cryptsetup`. It has a lot of caveats, see the above notes for the full details.
|
||||
|
||||
- `screen`'s module has been cleaned, and will now require you to set `programs.screen.enable` in order to populate `screenrc` and add the program to the environment.
|
||||
|
||||
- `linuxPackages_testing_bcachefs` is now fully deprecated by `linuxPackages_latest`, and is therefore no longer available.
|
||||
|
||||
- The default kernel package has been updated from 6.1 to 6.6. All supported kernels remain available.
|
||||
- (TODO not sure what path to use here) The default kernel package has been updated from 6.1 to 6.6. All supported kernels remain available.
|
||||
|
||||
- NixOS now installs a stub ELF loader that prints an informative error message when users attempt to run binaries not made for NixOS.
|
||||
- This can be disabled through the `environment.stub-ld.enable` option.
|
||||
@ -30,9 +30,13 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
|
||||
To disable this, set [nixpkgs.flake.setNixPath](#opt-nixpkgs.flake.setNixPath) and [nixpkgs.flake.setFlakeRegistry](#opt-nixpkgs.flake.setFlakeRegistry) to false.
|
||||
|
||||
- Julia environments can now be built with arbitrary packages from the ecosystem using the `.withPackages` function. For example: `julia.withPackages ["Plots"]`.
|
||||
- `nixVersions.unstable` was removed. Instead the following attributes are provided:
|
||||
- `nixVersions.git` which tracks the latest Nix master and is roughly updated once a week. This is intended to enable people to easily test unreleased changes of Nix to catch regressions earlier.
|
||||
- `nixVersions.latest` which points to the latest Nix version packaged in nixpkgs.
|
||||
|
||||
- The PipeWire and WirePlumber modules have removed support for using
|
||||
- `julia` environments can now be built with arbitrary packages from the ecosystem using the `.withPackages` function. For example: `julia.withPackages ["Plots"]`.
|
||||
|
||||
- `pipewire` and `wireplumber` modules have removed support for using
|
||||
`environment.etc."pipewire/..."` and `environment.etc."wireplumber/..."`.
|
||||
Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for PipeWire and
|
||||
`services.pipewire.wireplumber.configPackages` for WirePlumber instead."
|
||||
@ -41,7 +45,7 @@ Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for Pi
|
||||
Refer to upstream [upgrade instructions](https://goteleport.com/docs/management/operations/upgrading/)
|
||||
and release notes for [v15](https://goteleport.com/docs/changelog/#1500-013124).
|
||||
|
||||
- A new option `systemd.sysusers.enable` was added. If enabled, users and
|
||||
- `systemd.sysusers.enable` option was added. If enabled, users and
|
||||
groups are created with systemd-sysusers instead of with a custom perl script.
|
||||
|
||||
- `virtualisation.docker.enableNvidia` and `virtualisation.podman.enableNvidia` options are deprecated. `hardware.nvidia-container-toolkit.enable` should be used instead. This option will expose GPUs on containers with the `--device` CLI option. This is supported by Docker 25, Podman 3.2.0 and Singularity 4. Any container runtime that supports the CDI specification will take advantage of this feature.
|
||||
@ -65,16 +69,16 @@ Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for Pi
|
||||
}
|
||||
```
|
||||
|
||||
- The initial Incus LTS release (v6.0.x) is now available through `virtualisation.incus` as the default. Users who wish to continue using the non-LTS release will need to set `virtualisation.incus.package = pkgs.incus`. Stable release users are encouraged to stay on the LTS release as non-LTS releases will by default not be backported.
|
||||
- `virtialisation.incus` now defaults to the newly-added `incus-lts` release (v6.0.x). Users who wish to continue using the non-LTS release will need to set `virtualisation.incus.package = pkgs.incus`. Stable release users are encouraged to stay on the LTS release as non-LTS releases will by default not be backported.
|
||||
|
||||
- Canonical LXD has been upgraded to v5.21.x, an LTS release. The LTS release is now the only supported LXD release. Users are encouraged to [migrate to Incus](https://linuxcontainers.org/incus/docs/main/howto/server_migrate_lxd/) for better support on NixOS.
|
||||
- Canonical `lxd` has been upgraded to v5.21.x, an LTS release. The LTS release is now the only supported LXD release. Users are encouraged to [migrate to Incus](https://linuxcontainers.org/incus/docs/main/howto/server_migrate_lxd/) for better support on NixOS.
|
||||
|
||||
- lua interpreters default LUA_PATH and LUA_CPATH are not overriden by nixpkgs
|
||||
- `lua` interpreters default LUA_PATH and LUA_CPATH are not overriden by nixpkgs
|
||||
anymore, we patch LUA_ROOT instead which is more respectful to upstream.
|
||||
|
||||
- Plasma 6 is now available and can be installed with `services.xserver.desktopManager.plasma6.enable = true;`. Plasma 5 will likely be deprecated in the next release (24.11). Note that Plasma 6 runs as Wayland by default, and the X11 session needs to be explicitly selected if necessary.
|
||||
- `plasma6` is now available and can be installed with `services.xserver.desktopManager.plasma6.enable = true;`. Plasma 5 will likely be deprecated in the next release (24.11). Note that Plasma 6 runs as Wayland by default, and the X11 session needs to be explicitly selected if necessary.
|
||||
|
||||
- The desktop mode of Lomiri (formerly known as Unity8), using Mir 2.x to function as a Wayland compositor, is now available and can be installed with `services.desktopManager.lomiri.enable = true`. Note that some core applications, services and indicators have yet to be packaged, and some functions may remain incomplete, but the base experience should be there.
|
||||
- `lomiri` (formerly known as Unity8) desktop mode, using Mir 2.x to function as a Wayland compositor, is now available and can be installed with `services.desktopManager.lomiri.enable = true`. Note that some core applications, services and indicators have yet to be packaged, and some functions may remain incomplete, but the base experience should be there.
|
||||
|
||||
## New Services {#sec-release-24.05-new-services}
|
||||
|
||||
@ -88,6 +92,8 @@ Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for Pi
|
||||
|
||||
- [PhotonVision](https://photonvision.org/), a free, fast, and easy-to-use computer vision solution for the FIRST® Robotics Competition.
|
||||
|
||||
- [clatd](https://github.com/toreanderson/clatd), a a CLAT / SIIT-DC Edge Relay implementation for Linux.
|
||||
|
||||
- [pyLoad](https://pyload.net/), a FOSS download manager written in Python. Available as [services.pyload](#opt-services.pyload.enable)
|
||||
|
||||
- [maubot](https://github.com/maubot/maubot), a plugin-based Matrix bot framework. Available as [services.maubot](#opt-services.maubot.enable).
|
||||
@ -96,7 +102,7 @@ Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for Pi
|
||||
|
||||
- [ryzen-smu](https://gitlab.com/leogx9r/ryzen_smu), Linux kernel driver to expose the SMU (System Management Unit) for certain AMD Ryzen Processors. Includes the userspace program `monitor_cpu`. Available at [hardward.cpu.amd.ryzen-smu](#opt-hardware.cpu.amd.ryzen-smu.enable)
|
||||
|
||||
- systemd's gateway, upload, and remote services, which provides ways of sending journals across the network. Enable using [services.journald.gateway](#opt-services.journald.gateway.enable), [services.journald.upload](#opt-services.journald.upload.enable), and [services.journald.remote](#opt-services.journald.remote.enable).
|
||||
- `systemd`'s `gateway`, `upload`, and `remote` services, which provide ways of sending journals across the network. Enable using [services.journald.gateway](#opt-services.journald.gateway.enable), [services.journald.upload](#opt-services.journald.upload.enable), and [services.journald.remote](#opt-services.journald.remote.enable).
|
||||
|
||||
- [GNS3](https://www.gns3.com/), a network software emulator. Available as [services.gns3-server](#opt-services.gns3-server.enable).
|
||||
|
||||
@ -123,10 +129,12 @@ Use `services.pipewire.extraConfig` or `services.pipewire.configPackages` for Pi
|
||||
- [db-rest](https://github.com/derhuerst/db-rest), a wrapper around Deutsche Bahn's internal API for public transport data. Available as [services.db-rest](#opt-services.db-rest.enable).
|
||||
|
||||
- [Anki Sync Server](https://docs.ankiweb.net/sync-server.html), the official sync server built into recent versions of Anki. Available as [services.anki-sync-server](#opt-services.anki-sync-server.enable).
|
||||
The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been marked deprecated and will be dropped after 24.05 due to lack of maintenance of the anki-sync-server softwares.
|
||||
The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been marked deprecated and will be dropped after 24.05 due to lack of maintenance of the anki-sync-server software.
|
||||
|
||||
- [mautrix-meta](https://github.com/mautrix/meta), a Matrix <-> Facebook and Matrix <-> Instagram hybrid puppeting/relaybot bridge. Available as services.mautrix-meta
|
||||
|
||||
- [Jottacloud Command-line Tool](https://docs.jottacloud.com/en/articles/1436834-jottacloud-command-line-tool), a CLI for the [Jottacloud](https://jottacloud.com/) cloud storage provider. Available as [user.services.jotta-cli](#opt-user.services.jotta-cli.enable).
|
||||
|
||||
- [transfer-sh](https://github.com/dutchcoders/transfer.sh), a tool that supports easy and fast file sharing from the command-line. Available as [services.transfer-sh](#opt-services.transfer-sh.enable).
|
||||
|
||||
- [FCast Receiver](https://fcast.org), an open-source alternative to Chromecast and AirPlay. Available as [programs.fcast-receiver](#opt-programs.fcast-receiver.enable).
|
||||
@ -135,7 +143,7 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||
|
||||
- [Suwayomi Server](https://github.com/Suwayomi/Suwayomi-Server), a free and open source manga reader server that runs extensions built for [Tachiyomi](https://tachiyomi.org). Available as [services.suwayomi-server](#opt-services.suwayomi-server.enable).
|
||||
|
||||
- A self-hosted management server for the [Netbird](https://netbird.io). Available as [services.netbird.server](#opt-services.netbird.server.enable).
|
||||
- [Netbird](https://netbird.io), an open-source VPN management platform, now has a self-hosted management server. Available as [services.netbird.server](#opt-services.netbird.server.enable).
|
||||
|
||||
- [ping_exporter](https://github.com/czerwonk/ping_exporter), a Prometheus exporter for ICMP echo requests. Available as [services.prometheus.exporters.ping](#opt-services.prometheus.exporters.ping.enable).
|
||||
|
||||
@ -147,9 +155,9 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||
|
||||
- [Monado](https://monado.freedesktop.org/), an open source XR runtime. Available as [services.monado](#opt-services.monado.enable).
|
||||
|
||||
- [Pretix](https://pretix.eu/about/en/), an open source ticketing software for events. Available as [services.pretix]($opt-services-pretix.enable).
|
||||
- [Pretix](https://pretix.eu/about/en/), an open source ticketing software for events. Available as [services.pretix](#opt-services.pretix.enable).
|
||||
|
||||
- [microsocks](https://github.com/rofl0r/microsocks), a tiny, portable SOCKS5 server with very moderate resource usage. Available as [services.microsocks]($opt-services-microsocks.enable).
|
||||
- [microsocks](https://github.com/rofl0r/microsocks), a tiny, portable SOCKS5 server with very moderate resource usage. Available as [services.microsocks](#opt-services.microsocks.enable).
|
||||
|
||||
- [inadyn](https://github.com/troglobit/inadyn), a Dynamic DNS client with built-in support for multiple providers. Available as [services.inadyn](#opt-services.inadyn.enable).
|
||||
|
||||
@ -159,21 +167,21 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||
|
||||
- [armagetronad](https://wiki.armagetronad.org), a mid-2000s 3D lightcycle game widely played at iD Tech Camps. You can define multiple servers using `services.armagetronad.<server>.enable`.
|
||||
|
||||
- [wyoming-satellite](https://github.com/rhasspy/wyoming-satellite), a voice assistant satellite for Home Assistant using the Wyoming protocol. Available as [services.wyoming.satellite]($opt-services.wyoming.satellite.enable).
|
||||
- [wyoming-satellite](https://github.com/rhasspy/wyoming-satellite), a voice assistant satellite for Home Assistant using the Wyoming protocol. Available as [services.wyoming.satellite](#opt-services.wyoming.satellite.enable).
|
||||
|
||||
- [TuxClocker](https://github.com/Lurkki14/tuxclocker), a hardware control and monitoring program. Available as [programs.tuxclocker](#opt-programs.tuxclocker.enable).
|
||||
|
||||
- binfmt option for AppImage-run to support running [AppImage](https://appimage.org/)'s seamlessly on NixOS.. Available as [programs.appimage.binfmt](#opt-programs.appimage.binfmt).
|
||||
- [AppImage](https://appimage.org/), a tool to package desktop applications, now has a `binfmt` option to support running AppImages seamlessly on NixOS. Available as [programs.appimage.binfmt](#opt-programs.appimage.binfmt).
|
||||
|
||||
- [nh](https://github.com/viperML/nh), yet another Nix CLI helper. Available as [programs.nh](#opt-programs.nh.enable).
|
||||
|
||||
- [ALVR](https://github.com/alvr-org/alvr), a VR desktop streamer. Available as [programs.alvr](#opt-programs.alvr.enable)
|
||||
|
||||
- [RustDesk](https://rustdesk.com), a full-featured open source remote control alternative for self-hosting and security with minimal configuration. Alternative to TeamViewer.
|
||||
- [RustDesk](https://rustdesk.com), a full-featured open source remote control alternative for self-hosting and security with minimal configuration. Alternative to TeamViewer. Available as [services.rustdesk-server](#opt-services.rustdesk-server.enable).
|
||||
|
||||
- [Scrutiny](https://github.com/AnalogJ/scrutiny), a S.M.A.R.T monitoring tool for hard disks with a web frontend.
|
||||
- [Scrutiny](https://github.com/AnalogJ/scrutiny), a S.M.A.R.T monitoring tool for hard disks with a web frontend. Available as [services.scrutiny](#opt-services.scrutiny.enable).
|
||||
|
||||
- [davis](https://github.com/tchapi/davis), a simple CardDav and CalDav server inspired by Baïkal. Available as [services.davis]($opt-services-davis.enable).
|
||||
- [davis](https://github.com/tchapi/davis), a simple CardDav and CalDav server inspired by Baïkal. Available as [services.davis](#opt-services.davis.enable).
|
||||
|
||||
- [Firefly-iii](https://www.firefly-iii.org), a free and open source personal finance manager. Available as [services.firefly-iii](#opt-services.firefly-iii.enable)
|
||||
|
||||
@ -204,7 +212,7 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||
defaulting to `/etc/ssh/authorized_keys.d/%u`.
|
||||
::: {.warning}
|
||||
Users of {manpage}`pam_ssh_agent_auth(8)` must take care that the pubkeys they use (for instance with `sudo`)
|
||||
are listed in [`sshAgentAuth.authorizedKeysFiles`]..
|
||||
are listed in [`sshAgentAuth.authorizedKeysFiles`].
|
||||
:::
|
||||
::: {.note}
|
||||
Previously, all `services.openssh.authorizedKeysFiles` were trusted, including `~/.ssh/authorized_keys`,
|
||||
@ -222,7 +230,7 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||
|
||||
- `cudaPackages.autoFixElfFiles` has been deprecated for `pkgs.autoFixElfFiles`. Functionality has not changed, but the setuphook has been renamed and moved to the top-level package scope.
|
||||
|
||||
- `appimageTools.wrapAppImage` now create the binary at `$out/bin/${pname}` rather than `$out/bin/${pname}-${version}`, which will break downstream workarounds.
|
||||
- `appimageTools.wrapAppImage` now creates the binary at `$out/bin/${pname}` rather than `$out/bin/${pname}-${version}`, which will break downstream workarounds.
|
||||
|
||||
- `pdns` was updated to version [v4.9.x](https://doc.powerdns.com/authoritative/changelog/4.9.html), which introduces breaking changes. Check out the [Upgrade Notes](https://doc.powerdns.com/authoritative/upgrading.html#to-4-9-0) for details.
|
||||
|
||||
@ -242,16 +250,16 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||
The list in `nixos/modules/virtualisation/amazon-ec2-amis.nix` will stop
|
||||
being updated and will be removed in the future.
|
||||
|
||||
- The option `services.postgresql.ensureUsers._.ensurePermissions` has been removed as it's
|
||||
- The option `services.postgresql.ensureUsers._.ensurePermissions` has been removed as it is
|
||||
not declarative and is broken with newer postgresql versions. Consider using
|
||||
[](#opt-services.postgresql.ensureUsers._.ensureDBOwnership)
|
||||
instead or a tool that's more suited for managing the data inside a postgresql database.
|
||||
instead or a tool that is more suited for managing the data inside a postgresql database.
|
||||
|
||||
- `idris2` was updated to v0.7.0. This version introduces breaking changes. Check out the [changelog](https://github.com/idris-lang/Idris2/blob/v0.7.0/CHANGELOG.md#v070) for details.
|
||||
|
||||
- `nvtop` family of packages was reorganized into nested attrset. `nvtop` has been renamed to `nvtopPackages.full`, and all `nvtop-{amd,nvidia,intel,msm}` packages are now named as `nvtopPackages.{amd,nvidia,intel,msm}`
|
||||
|
||||
- `neo4j` has been updated to version 5, you may want to read the [release notes for Neo4j 5](https://neo4j.com/release-notes/database/neo4j-5/)
|
||||
- `neo4j` has been updated to version 5. You may want to read the [release notes for Neo4j 5](https://neo4j.com/release-notes/database/neo4j-5/).
|
||||
|
||||
- `services.neo4j.allowUpgrade` was removed and no longer has any effect. Neo4j 5 supports automatic rolling upgrades.
|
||||
|
||||
@ -351,11 +359,14 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||
|
||||
- `gtest` package has been updated past v1.13.0, which requires C++14 or higher.
|
||||
|
||||
- The latest available version of Nextcloud is v28 (available as `pkgs.nextcloud28`). The installation logic is as follows:
|
||||
- Nextcloud 26 has been removed since it's not maintained anymore by upstream.
|
||||
|
||||
- The latest available version of Nextcloud is v29 (available as `pkgs.nextcloud29`). The installation logic is as follows:
|
||||
- If [`services.nextcloud.package`](#opt-services.nextcloud.package) is specified explicitly, this package will be installed (**recommended**)
|
||||
- If [`system.stateVersion`](#opt-system.stateVersion) is >=24.05, `pkgs.nextcloud28` will be installed by default.
|
||||
- If [`system.stateVersion`](#opt-system.stateVersion) is >=24.05, `pkgs.nextcloud29` will be installed by default.
|
||||
- If [`system.stateVersion`](#opt-system.stateVersion) is >=23.11, `pkgs.nextcloud27` will be installed by default.
|
||||
- Please note that an upgrade from v26 (or older) to v28 directly is not possible. Please upgrade to `nextcloud27` (or earlier) first. Nextcloud prohibits skipping major versions while upgrading. You can upgrade by declaring [`services.nextcloud.package = pkgs.nextcloud27;`](options.html#opt-services.nextcloud.package).
|
||||
- Please note that an upgrade from v27 (or older) to v29 directly is not possible. Please upgrade to `nextcloud28` (or earlier) first. Nextcloud prohibits skipping major versions while upgrading. You can upgrade by declaring [`services.nextcloud.package = pkgs.nextcloud28;`](options.html#opt-services.nextcloud.package).
|
||||
- Known warnings after the upgrade are documented in [](#module-services-nextcloud-known-warnings).
|
||||
|
||||
- The vendored third party libraries have been mostly removed from `cudaPackages.nsight_systems`, which we now only ship for `cudaPackages_11_8` and later due to outdated dependencies. Users comfortable with the vendored dependencies may use `overrideAttrs` to amend the `postPatch` phase and the `meta.broken` correspondingly. Alternatively, one could package the deprecated `boost170` locally, as required for `cudaPackages_11_4.nsight_systems`.
|
||||
|
||||
@ -391,6 +402,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m
|
||||
|
||||
- `services.zope2` has been removed as `zope2` is unmaintained and was relying on Python2.
|
||||
|
||||
- `services.oauth2_proxy` was renamed to `services.oauth2-proxy`. Also the corresponding service, user and group were renamed.
|
||||
|
||||
- `services.avahi.nssmdns` got split into `services.avahi.nssmdns4` and `services.avahi.nssmdns6` which enable the mDNS NSS switch for IPv4 and IPv6 respectively.
|
||||
Since most mDNS responders only register IPv4 addresses, most users want to keep the IPv6 support disabled to avoid long timeouts.
|
||||
|
||||
|
@ -47,7 +47,7 @@ with lib;
|
||||
gst_all_1 = super.gst_all_1 // {
|
||||
gst-plugins-bad = super.gst_all_1.gst-plugins-bad.override { guiSupport = false; };
|
||||
gst-plugins-base = super.gst_all_1.gst-plugins-base.override { enableWayland = false; enableX11 = false; };
|
||||
gst-plugins-good = super.gst_all_1.gst-plugins-good.override { enableX11 = false; };
|
||||
gst-plugins-good = super.gst_all_1.gst-plugins-good.override { enableWayland = false; enableX11 = false; gtkSupport = false; qt5Support = false; qt6Support = false; };
|
||||
};
|
||||
imagemagick = super.imagemagick.override { libX11Support = false; libXtSupport = false; };
|
||||
imagemagickBig = super.imagemagickBig.override { libX11Support = false; libXtSupport = false; };
|
||||
|
@ -19,7 +19,9 @@ let
|
||||
[Startup]
|
||||
sync_effects_enabled = ${toPyBoolStr cfg.syncEffectsEnabled}
|
||||
devices_off_on_screensaver = ${toPyBoolStr cfg.devicesOffOnScreensaver}
|
||||
mouse_battery_notifier = ${toPyBoolStr cfg.mouseBatteryNotifier}
|
||||
battery_notifier = ${toPyBoolStr (cfg.mouseBatteryNotifier || cfg.batteryNotifier.enable)}
|
||||
battery_notifier_freq = ${builtins.toString cfg.batteryNotifier.frequency}
|
||||
battery_notifier_percent = ${builtins.toString cfg.batteryNotifier.percentage}
|
||||
|
||||
[Statistics]
|
||||
key_statistics = ${toPyBoolStr cfg.keyStatistics}
|
||||
@ -86,6 +88,41 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
batteryNotifier = mkOption {
|
||||
description = ''
|
||||
Settings for device battery notifications.
|
||||
'';
|
||||
default = {};
|
||||
type = types.submodule {
|
||||
options = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Mouse battery notifier.
|
||||
'';
|
||||
};
|
||||
frequency = mkOption {
|
||||
type = types.int;
|
||||
default = 600;
|
||||
description = ''
|
||||
How often battery notifications should be shown (in seconds).
|
||||
A value of 0 disables notifications.
|
||||
'';
|
||||
};
|
||||
|
||||
percentage = mkOption {
|
||||
type = types.int;
|
||||
default = 33;
|
||||
description = ''
|
||||
At what battery percentage the device should reach before
|
||||
sending notifications.
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
keyStatistics = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
@ -107,6 +144,13 @@ in
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
warnings = flatten [
|
||||
(optional cfg.mouseBatteryNotifier ''
|
||||
The option openrazer.mouseBatteryNotifier is deprecated.
|
||||
Please use openrazer.batteryNotifier instead to enable and configure battery notifications.
|
||||
'')
|
||||
];
|
||||
|
||||
boot.extraModulePackages = [ kernelPackages.openrazer ];
|
||||
boot.kernelModules = drivers;
|
||||
|
||||
@ -127,15 +171,15 @@ in
|
||||
systemd.user.services.openrazer-daemon = {
|
||||
description = "Daemon to manage razer devices in userspace";
|
||||
unitConfig.Documentation = "man:openrazer-daemon(8)";
|
||||
# Requires a graphical session so the daemon knows when the screensaver
|
||||
# starts. See the 'devicesOffOnScreensaver' option.
|
||||
wantedBy = [ "graphical-session.target" ];
|
||||
partOf = [ "graphical-session.target" ];
|
||||
serviceConfig = {
|
||||
Type = "dbus";
|
||||
BusName = "org.razer";
|
||||
ExecStart = "${daemonExe} --foreground";
|
||||
Restart = "always";
|
||||
# Requires a graphical session so the daemon knows when the screensaver
|
||||
# starts. See the 'devicesOffOnScreensaver' option.
|
||||
wantedBy = [ "graphical-session.target" ];
|
||||
partOf = [ "graphical-session.target" ];
|
||||
serviceConfig = {
|
||||
Type = "dbus";
|
||||
BusName = "org.razer";
|
||||
ExecStart = "${daemonExe} --foreground";
|
||||
Restart = "always";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -946,6 +946,7 @@
|
||||
./services/networking/charybdis.nix
|
||||
./services/networking/chisel-server.nix
|
||||
./services/networking/cjdns.nix
|
||||
./services/networking/clatd.nix
|
||||
./services/networking/cloudflare-dyndns.nix
|
||||
./services/networking/cloudflared.nix
|
||||
./services/networking/cntlm.nix
|
||||
@ -1029,6 +1030,7 @@
|
||||
./services/networking/jigasi.nix
|
||||
./services/networking/jitsi-videobridge.nix
|
||||
./services/networking/jool.nix
|
||||
./services/networking/jotta-cli.nix
|
||||
./services/networking/kea.nix
|
||||
./services/networking/keepalived/default.nix
|
||||
./services/networking/keybase.nix
|
||||
@ -1256,8 +1258,8 @@
|
||||
./services/security/kanidm.nix
|
||||
./services/security/munge.nix
|
||||
./services/security/nginx-sso.nix
|
||||
./services/security/oauth2_proxy.nix
|
||||
./services/security/oauth2_proxy_nginx.nix
|
||||
./services/security/oauth2-proxy.nix
|
||||
./services/security/oauth2-proxy-nginx.nix
|
||||
./services/security/opensnitch.nix
|
||||
./services/security/pass-secret-service.nix
|
||||
./services/security/physlock.nix
|
||||
|
@ -315,6 +315,14 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
mailErrorSummaryTo = mkOption {
|
||||
type = singleLineStr;
|
||||
default = "";
|
||||
description = ''
|
||||
Email address to send a summary to if "send task(s) failed".
|
||||
'';
|
||||
};
|
||||
|
||||
noDestroy = mkOption {
|
||||
type = bool;
|
||||
default = false;
|
||||
@ -455,6 +463,8 @@ in
|
||||
"--loglevel=${cfg.logLevel}"
|
||||
(optionalString cfg.noDestroy "--nodestroy")
|
||||
(optionalString cfg.autoCreation "--autoCreation")
|
||||
(optionalString (cfg.mailErrorSummaryTo != "")
|
||||
"--mailErrorSummaryTo=${cfg.mailErrorSummaryTo}")
|
||||
(optionalString (enabledFeatures != [])
|
||||
"--features=${concatStringsSep "," enabledFeatures}")
|
||||
]; in "${pkgs.znapzend}/bin/znapzend ${args}";
|
||||
|
@ -1,8 +1,31 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
inherit (lib)
|
||||
attrValues
|
||||
concatMapStrings
|
||||
concatStringsSep
|
||||
const
|
||||
elem
|
||||
filterAttrs
|
||||
isString
|
||||
literalExpression
|
||||
mapAttrs
|
||||
mapAttrsToList
|
||||
mkAfter
|
||||
mkBefore
|
||||
mkDefault
|
||||
mkEnableOption
|
||||
mkIf
|
||||
mkMerge
|
||||
mkOption
|
||||
mkPackageOption
|
||||
mkRemovedOptionModule
|
||||
mkRenamedOptionModule
|
||||
optionalString
|
||||
types
|
||||
versionAtLeast
|
||||
;
|
||||
|
||||
cfg = config.services.postgresql;
|
||||
|
||||
@ -24,7 +47,7 @@ let
|
||||
if true == value then "yes"
|
||||
else if false == value then "no"
|
||||
else if isString value then "'${lib.replaceStrings ["'"] ["''"] value}'"
|
||||
else toString value;
|
||||
else builtins.toString value;
|
||||
|
||||
# The main PostgreSQL configuration file.
|
||||
configFile = pkgs.writeTextDir "postgresql.conf" (concatStringsSep "\n" (mapAttrsToList (n: v: "${n} = ${toStr v}") (filterAttrs (const (x: x != null)) cfg.settings)));
|
||||
@ -439,7 +462,7 @@ in
|
||||
config = mkIf cfg.enable {
|
||||
|
||||
assertions = map ({ name, ensureDBOwnership, ... }: {
|
||||
assertion = ensureDBOwnership -> builtins.elem name cfg.ensureDatabases;
|
||||
assertion = ensureDBOwnership -> elem name cfg.ensureDatabases;
|
||||
message = ''
|
||||
For each database user defined with `services.postgresql.ensureUsers` and
|
||||
`ensureDBOwnership = true;`, a database with the same name must be defined
|
||||
@ -537,7 +560,7 @@ in
|
||||
# Wait for PostgreSQL to be ready to accept connections.
|
||||
postStart =
|
||||
''
|
||||
PSQL="psql --port=${toString cfg.settings.port}"
|
||||
PSQL="psql --port=${builtins.toString cfg.settings.port}"
|
||||
|
||||
while ! $PSQL -d postgres -c "" 2> /dev/null; do
|
||||
if ! kill -0 "$MAINPID"; then exit 1; fi
|
||||
|
@ -97,50 +97,50 @@ in
|
||||
|
||||
logs = {
|
||||
main = mkOption {
|
||||
type = types.enum [ "error" "notice" "info" "debug"];
|
||||
type = types.enum [ "none" "error" "notice" "info" "debug"];
|
||||
default = "info";
|
||||
description = ''
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (error|notice|info|debug) [all:notice].
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (none|error|notice|info|debug) [all:notice].
|
||||
'';
|
||||
};
|
||||
|
||||
network = mkOption {
|
||||
type = types.enum [ "error" "notice" "info" "debug"];
|
||||
type = types.enum [ "none" "error" "notice" "info" "debug"];
|
||||
default = "info";
|
||||
description = ''
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (error|notice|info|debug) [all:notice].
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (none|error|notice|info|debug) [all:notice].
|
||||
'';
|
||||
};
|
||||
|
||||
bus = mkOption {
|
||||
type = types.enum [ "error" "notice" "info" "debug"];
|
||||
type = types.enum [ "none" "error" "notice" "info" "debug"];
|
||||
default = "info";
|
||||
description = ''
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (error|notice|info|debug) [all:notice].
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (none|error|notice|info|debug) [all:notice].
|
||||
'';
|
||||
};
|
||||
|
||||
update = mkOption {
|
||||
type = types.enum [ "error" "notice" "info" "debug"];
|
||||
type = types.enum [ "none" "error" "notice" "info" "debug"];
|
||||
default = "info";
|
||||
description = ''
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (error|notice|info|debug) [all:notice].
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (none|error|notice|info|debug) [all:notice].
|
||||
'';
|
||||
};
|
||||
|
||||
other = mkOption {
|
||||
type = types.enum [ "error" "notice" "info" "debug"];
|
||||
type = types.enum [ "none" "error" "notice" "info" "debug"];
|
||||
default = "info";
|
||||
description = ''
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (error|notice|info|debug) [all:notice].
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (none|error|notice|info|debug) [all:notice].
|
||||
'';
|
||||
};
|
||||
|
||||
all = mkOption {
|
||||
type = types.enum [ "error" "notice" "info" "debug"];
|
||||
type = types.enum [ "none" "error" "notice" "info" "debug"];
|
||||
default = "info";
|
||||
description = ''
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (error|notice|info|debug) [all:notice].
|
||||
Only write log for matching AREAs (main|network|bus|update|other|all) below or equal to LEVEL (none|error|notice|info|debug) [all:notice].
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
@ -224,7 +224,7 @@ in
|
||||
and users are replaced by dummy users), so tests are complemented by a
|
||||
logrotate-checkconf service that is enabled by default.
|
||||
This extra check can be disabled by disabling it at the systemd level with the
|
||||
{option}`services.systemd.services.logrotate-checkconf.enable` option.
|
||||
{option}`systemd.services.logrotate-checkconf.enable` option.
|
||||
|
||||
Conversely there are still things that might make this check fail incorrectly
|
||||
(e.g. a file path where we don't have access to intermediate directories):
|
||||
|
@ -534,14 +534,11 @@ in {
|
||||
hyperkittyApiKey=$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 64)
|
||||
secretKey=$(tr -dc A-Za-z0-9 < /dev/urandom | head -c 64)
|
||||
|
||||
mailmanWebCfgTmp=$(mktemp)
|
||||
jq -n '.MAILMAN_ARCHIVER_KEY=$archiver_key | .SECRET_KEY=$secret_key' \
|
||||
install -m 0440 -o root -g mailman \
|
||||
<(jq -n '.MAILMAN_ARCHIVER_KEY=$archiver_key | .SECRET_KEY=$secret_key' \
|
||||
--arg archiver_key "$hyperkittyApiKey" \
|
||||
--arg secret_key "$secretKey" \
|
||||
>"$mailmanWebCfgTmp"
|
||||
chown root:mailman "$mailmanWebCfgTmp"
|
||||
chmod 440 "$mailmanWebCfgTmp"
|
||||
mv -n "$mailmanWebCfgTmp" "$mailmanWebCfg"
|
||||
--arg secret_key "$secretKey") \
|
||||
"$mailmanWebCfg"
|
||||
fi
|
||||
|
||||
hyperkittyApiKey="$(jq -r .MAILMAN_ARCHIVER_KEY "$mailmanWebCfg")"
|
||||
|
@ -301,7 +301,7 @@ in
|
||||
description = ''
|
||||
The addresses to send outgoing mail to.
|
||||
'';
|
||||
apply = x: if x == [] then null else lib.concatStringsSep "," x;
|
||||
apply = x: if x == [] || x == null then null else lib.concatStringsSep "," x;
|
||||
};
|
||||
};
|
||||
|
||||
@ -438,7 +438,7 @@ in
|
||||
];
|
||||
dashboards.settings.providers = lib.mkIf cfg.provision.grafana.dashboard [{
|
||||
name = "parsedmarc";
|
||||
options.path = "${pkgs.python3Packages.parsedmarc.dashboard}";
|
||||
options.path = "${pkgs.parsedmarc.dashboard}";
|
||||
}];
|
||||
};
|
||||
};
|
||||
@ -446,7 +446,7 @@ in
|
||||
services.parsedmarc.settings = lib.mkMerge [
|
||||
(lib.mkIf cfg.provision.elasticsearch {
|
||||
elasticsearch = {
|
||||
hosts = [ "localhost:9200" ];
|
||||
hosts = [ "http://localhost:9200" ];
|
||||
ssl = false;
|
||||
};
|
||||
})
|
||||
@ -530,7 +530,7 @@ in
|
||||
MemoryDenyWriteExecute = true;
|
||||
LockPersonality = true;
|
||||
SystemCallArchitectures = "native";
|
||||
ExecStart = "${pkgs.python3Packages.parsedmarc}/bin/parsedmarc -c /run/parsedmarc/parsedmarc.ini";
|
||||
ExecStart = "${lib.getExe pkgs.parsedmarc} -c /run/parsedmarc/parsedmarc.ini";
|
||||
};
|
||||
};
|
||||
|
||||
|
82
nixos/modules/services/networking/clatd.nix
Normal file
82
nixos/modules/services/networking/clatd.nix
Normal file
@ -0,0 +1,82 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.clatd;
|
||||
|
||||
settingsFormat = pkgs.formats.keyValue {};
|
||||
|
||||
configFile = settingsFormat.generate "clatd.conf" cfg.settings;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
services.clatd = {
|
||||
enable = mkEnableOption "clatd";
|
||||
|
||||
package = mkPackageOption pkgs "clatd" { };
|
||||
|
||||
settings = mkOption {
|
||||
type = types.submodule ({ name, ... }: {
|
||||
freeformType = settingsFormat.type;
|
||||
});
|
||||
default = { };
|
||||
example = literalExpression ''
|
||||
{
|
||||
plat-prefix = "64:ff9b::/96";
|
||||
}
|
||||
'';
|
||||
description = ''
|
||||
Configuration of clatd. See [clatd Documentation](https://github.com/toreanderson/clatd/blob/master/README.pod#configuration).
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
systemd.services.clatd = {
|
||||
description = "464XLAT CLAT daemon";
|
||||
documentation = [ "man:clatd(8)" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
startLimitIntervalSec = 0;
|
||||
|
||||
serviceConfig = {
|
||||
ExecStart = "${cfg.package}/bin/clatd -c ${configFile}";
|
||||
startLimitIntervalSec = 0;
|
||||
|
||||
# Hardening
|
||||
CapabilityBoundingSet = [
|
||||
"CAP_NET_ADMIN"
|
||||
];
|
||||
LockPersonality = true;
|
||||
MemoryDenyWriteExecute = true;
|
||||
NoNewPrivileges = true;
|
||||
PrivateTmp = true;
|
||||
ProtectClock = true;
|
||||
ProtectControlGroups = true;
|
||||
ProtectHome = true;
|
||||
ProtectHostname = true;
|
||||
ProtectKernelLogs = true;
|
||||
ProtectKernelModules = true;
|
||||
ProtectProc = "invisible";
|
||||
ProtectSystem = true;
|
||||
RestrictAddressFamilies = [
|
||||
"AF_INET"
|
||||
"AF_INET6"
|
||||
"AF_NETLINK"
|
||||
];
|
||||
RestrictNamespaces = true;
|
||||
RestrictRealtime = true;
|
||||
RestrictSUIDSGID = true;
|
||||
SystemCallArchitectures = "native";
|
||||
SystemCallFilter = [
|
||||
"@network-io"
|
||||
"@system-service"
|
||||
"~@privileged"
|
||||
"~@resources"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
27
nixos/modules/services/networking/jotta-cli.md
Normal file
27
nixos/modules/services/networking/jotta-cli.md
Normal file
@ -0,0 +1,27 @@
|
||||
# Jottacloud Command-line Tool {#module-services-jotta-cli}
|
||||
|
||||
The [Jottacloud Command-line Tool](https://docs.jottacloud.com/en/articles/1436834-jottacloud-command-line-tool) is a headless [Jottacloud](https://jottacloud.com) client.
|
||||
|
||||
## Quick Start {#module-services-jotta-cli-quick-start}
|
||||
|
||||
```nix
|
||||
{
|
||||
user.services.jotta-cli.enable = true;
|
||||
}
|
||||
```
|
||||
|
||||
This adds `jotta-cli` to `environment.systemPackages` and starts a user service that runs `jottad` with the default options.
|
||||
|
||||
## Example Configuration {#module-services-jotta-cli-example-configuration}
|
||||
|
||||
```nix
|
||||
user.services.jotta-cli = {
|
||||
enable = true;
|
||||
options = [ "slow" ];
|
||||
package = pkgs.jotta-cli;
|
||||
};
|
||||
```
|
||||
|
||||
This uses `jotta-cli` and `jottad` from the `pkgs.jotta-cli` package and starts `jottad` in low memory mode.
|
||||
|
||||
`jottad` is also added to `environment.systemPackages`, so `jottad --help` can be used to explore options.
|
43
nixos/modules/services/networking/jotta-cli.nix
Normal file
43
nixos/modules/services/networking/jotta-cli.nix
Normal file
@ -0,0 +1,43 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let cfg = config.user.services.jotta-cli;
|
||||
in {
|
||||
options = {
|
||||
user.services.jotta-cli = {
|
||||
|
||||
enable = mkEnableOption "Jottacloud Command-line Tool";
|
||||
|
||||
options = mkOption {
|
||||
default = [ "stdoutlog" "datadir" "%h/.jottad/" ];
|
||||
example = [ ];
|
||||
type = with types; listOf str;
|
||||
description = "Command-line options passed to jottad.";
|
||||
};
|
||||
|
||||
package = lib.mkPackageOption pkgs "jotta-cli" { };
|
||||
};
|
||||
};
|
||||
config = mkIf cfg.enable {
|
||||
systemd.user.services.jottad = {
|
||||
|
||||
description = "Jottacloud Command-line Tool daemon";
|
||||
|
||||
serviceConfig = {
|
||||
Type = "notify";
|
||||
EnvironmentFile = "-%h/.config/jotta-cli/jotta-cli.env";
|
||||
ExecStart = "${lib.getExe' cfg.package "jottad"} ${concatStringsSep " " cfg.options}";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
|
||||
wantedBy = [ "default.target" ];
|
||||
wants = [ "network-online.target" ];
|
||||
after = [ "network-online.target" ];
|
||||
};
|
||||
environment.systemPackages = [ pkgs.jotta-cli ];
|
||||
};
|
||||
|
||||
meta.maintainers = with lib.maintainers; [ evenbrenden ];
|
||||
meta.doc = ./jotta-cli.md;
|
||||
}
|
@ -51,7 +51,7 @@ in
|
||||
package = mkPackageOption pkgs "trust-dns" {
|
||||
extraDescription = ''
|
||||
::: {.note}
|
||||
The package must provide `meta.mainProgram` which names the server binayr; any other utilities (client, resolver) are not needed.
|
||||
The package must provide `meta.mainProgram` which names the server binary; any other utilities (client, resolver) are not needed.
|
||||
:::
|
||||
'';
|
||||
};
|
||||
@ -86,7 +86,7 @@ in
|
||||
type = types.listOf types.str;
|
||||
default = [ "0.0.0.0" ];
|
||||
description = ''
|
||||
List of ipv4 addresses on which to listen for DNS queries.
|
||||
List of ipv4 addresses on which to listen for DNS queries.
|
||||
'';
|
||||
};
|
||||
listen_addrs_ipv6 = mkOption {
|
||||
@ -114,7 +114,7 @@ in
|
||||
};
|
||||
zones = mkOption {
|
||||
description = "List of zones to serve.";
|
||||
default = {};
|
||||
default = [];
|
||||
type = types.listOf (types.coercedTo types.str (zone: { inherit zone; }) zoneType);
|
||||
};
|
||||
};
|
||||
|
@ -1,56 +1,55 @@
|
||||
{ config, lib, ... }:
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.oauth2_proxy.nginx;
|
||||
cfg = config.services.oauth2-proxy.nginx;
|
||||
in
|
||||
{
|
||||
options.services.oauth2_proxy.nginx = {
|
||||
proxy = mkOption {
|
||||
type = types.str;
|
||||
default = config.services.oauth2_proxy.httpAddress;
|
||||
defaultText = literalExpression "config.services.oauth2_proxy.httpAddress";
|
||||
options.services.oauth2-proxy.nginx = {
|
||||
proxy = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = config.services.oauth2-proxy.httpAddress;
|
||||
defaultText = lib.literalExpression "config.services.oauth2-proxy.httpAddress";
|
||||
description = ''
|
||||
The address of the reverse proxy endpoint for oauth2_proxy
|
||||
The address of the reverse proxy endpoint for oauth2-proxy
|
||||
'';
|
||||
};
|
||||
|
||||
domain = mkOption {
|
||||
type = types.str;
|
||||
domain = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = ''
|
||||
The domain under which the oauth2_proxy will be accesible and the path of cookies are set to.
|
||||
The domain under which the oauth2-proxy will be accesible and the path of cookies are set to.
|
||||
This setting must be set to ensure back-redirects are working properly
|
||||
if oauth2-proxy is configured with {option}`services.oauth2_proxy.cookie.domain`
|
||||
or multiple {option}`services.oauth2_proxy.nginx.virtualHosts` that are not on the same domain.
|
||||
if oauth2-proxy is configured with {option}`services.oauth2-proxy.cookie.domain`
|
||||
or multiple {option}`services.oauth2-proxy.nginx.virtualHosts` that are not on the same domain.
|
||||
'';
|
||||
};
|
||||
|
||||
virtualHosts = mkOption {
|
||||
virtualHosts = lib.mkOption {
|
||||
type = let
|
||||
vhostSubmodule = types.submodule {
|
||||
vhostSubmodule = lib.types.submodule {
|
||||
options = {
|
||||
allowed_groups = mkOption {
|
||||
type = types.nullOr (types.listOf types.str);
|
||||
allowed_groups = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.listOf lib.types.str);
|
||||
description = "List of groups to allow access to this vhost, or null to allow all.";
|
||||
default = null;
|
||||
};
|
||||
allowed_emails = mkOption {
|
||||
type = types.nullOr (types.listOf types.str);
|
||||
allowed_emails = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.listOf lib.types.str);
|
||||
description = "List of emails to allow access to this vhost, or null to allow all.";
|
||||
default = null;
|
||||
};
|
||||
allowed_email_domains = mkOption {
|
||||
type = types.nullOr (types.listOf types.str);
|
||||
allowed_email_domains = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.listOf lib.types.str);
|
||||
description = "List of email domains to allow access to this vhost, or null to allow all.";
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
};
|
||||
oldType = types.listOf types.str;
|
||||
oldType = lib.types.listOf lib.types.str;
|
||||
convertFunc = x:
|
||||
lib.warn "services.oauth2_proxy.nginx.virtualHosts should be an attrset, found ${lib.generators.toPretty {} x}"
|
||||
lib.warn "services.oauth2-proxy.nginx.virtualHosts should be an attrset, found ${lib.generators.toPretty {} x}"
|
||||
lib.genAttrs x (_: {});
|
||||
newType = types.attrsOf vhostSubmodule;
|
||||
in types.coercedTo oldType convertFunc newType;
|
||||
newType = lib.types.attrsOf vhostSubmodule;
|
||||
in lib.types.coercedTo oldType convertFunc newType;
|
||||
default = {};
|
||||
example = {
|
||||
"protected.foo.com" = {
|
||||
@ -65,11 +64,11 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
config.services.oauth2_proxy = mkIf (cfg.virtualHosts != [] && (hasPrefix "127.0.0.1:" cfg.proxy)) {
|
||||
config.services.oauth2-proxy = lib.mkIf (cfg.virtualHosts != [] && (lib.hasPrefix "127.0.0.1:" cfg.proxy)) {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
config.services.nginx = mkIf (cfg.virtualHosts != [] && config.services.oauth2_proxy.enable) (mkMerge ([
|
||||
config.services.nginx = lib.mkIf (cfg.virtualHosts != [] && config.services.oauth2-proxy.enable) (lib.mkMerge ([
|
||||
{
|
||||
virtualHosts.${cfg.domain}.locations."/oauth2/" = {
|
||||
proxyPass = cfg.proxy;
|
||||
@ -79,7 +78,7 @@ in
|
||||
'';
|
||||
};
|
||||
}
|
||||
] ++ optional (cfg.virtualHosts != []) {
|
||||
] ++ lib.optional (cfg.virtualHosts != []) {
|
||||
recommendedProxySettings = true; # needed because duplicate headers
|
||||
} ++ (lib.mapAttrsToList (vhost: conf: {
|
||||
virtualHosts.${vhost} = {
|
@ -1,15 +1,12 @@
|
||||
# NixOS module for oauth2_proxy.
|
||||
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.services.oauth2_proxy;
|
||||
cfg = config.services.oauth2-proxy;
|
||||
|
||||
# oauth2_proxy provides many options that are only relevant if you are using
|
||||
# oauth2-proxy provides many options that are only relevant if you are using
|
||||
# a certain provider. This set maps from provider name to a function that
|
||||
# takes the configuration and returns a string that can be inserted into the
|
||||
# command-line to launch oauth2_proxy.
|
||||
# command-line to launch oauth2-proxy.
|
||||
providerSpecificOptions = {
|
||||
azure = cfg: {
|
||||
azure-tenant = cfg.azure.tenant;
|
||||
@ -73,28 +70,28 @@ let
|
||||
} // (getProviderOptions cfg cfg.provider) // cfg.extraConfig;
|
||||
|
||||
mapConfig = key: attr:
|
||||
optionalString (attr != null && attr != []) (
|
||||
if isDerivation attr then mapConfig key (toString attr) else
|
||||
if (builtins.typeOf attr) == "set" then concatStringsSep " "
|
||||
(mapAttrsToList (name: value: mapConfig (key + "-" + name) value) attr) else
|
||||
if (builtins.typeOf attr) == "list" then concatMapStringsSep " " (mapConfig key) attr else
|
||||
if (builtins.typeOf attr) == "bool" then "--${key}=${boolToString attr}" else
|
||||
lib.optionalString (attr != null && attr != []) (
|
||||
if lib.isDerivation attr then mapConfig key (toString attr) else
|
||||
if (builtins.typeOf attr) == "set" then lib.concatStringsSep " "
|
||||
(lib.mapAttrsToList (name: value: mapConfig (key + "-" + name) value) attr) else
|
||||
if (builtins.typeOf attr) == "list" then lib.concatMapStringsSep " " (mapConfig key) attr else
|
||||
if (builtins.typeOf attr) == "bool" then "--${key}=${lib.boolToString attr}" else
|
||||
if (builtins.typeOf attr) == "string" then "--${key}='${attr}'" else
|
||||
"--${key}=${toString attr}");
|
||||
|
||||
configString = concatStringsSep " " (mapAttrsToList mapConfig allConfig);
|
||||
configString = lib.concatStringsSep " " (lib.mapAttrsToList mapConfig allConfig);
|
||||
in
|
||||
{
|
||||
options.services.oauth2_proxy = {
|
||||
enable = mkEnableOption "oauth2_proxy";
|
||||
options.services.oauth2-proxy = {
|
||||
enable = lib.mkEnableOption "oauth2-proxy";
|
||||
|
||||
package = mkPackageOption pkgs "oauth2-proxy" { };
|
||||
package = lib.mkPackageOption pkgs "oauth2-proxy" { };
|
||||
|
||||
##############################################
|
||||
# PROVIDER configuration
|
||||
# Taken from: https://github.com/oauth2-proxy/oauth2-proxy/blob/master/providers/providers.go
|
||||
provider = mkOption {
|
||||
type = types.enum [
|
||||
provider = lib.mkOption {
|
||||
type = lib.types.enum [
|
||||
"adfs"
|
||||
"azure"
|
||||
"bitbucket"
|
||||
@ -116,24 +113,24 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
approvalPrompt = mkOption {
|
||||
type = types.enum ["force" "auto"];
|
||||
approvalPrompt = lib.mkOption {
|
||||
type = lib.types.enum ["force" "auto"];
|
||||
default = "force";
|
||||
description = ''
|
||||
OAuth approval_prompt.
|
||||
'';
|
||||
};
|
||||
|
||||
clientID = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
clientID = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
description = ''
|
||||
The OAuth Client ID.
|
||||
'';
|
||||
example = "123456.apps.googleusercontent.com";
|
||||
};
|
||||
|
||||
oidcIssuerUrl = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
oidcIssuerUrl = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
The OAuth issuer URL.
|
||||
@ -141,15 +138,15 @@ in
|
||||
example = "https://login.microsoftonline.com/{TENANT_ID}/v2.0";
|
||||
};
|
||||
|
||||
clientSecret = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
clientSecret = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
description = ''
|
||||
The OAuth Client Secret.
|
||||
'';
|
||||
};
|
||||
|
||||
skipAuthRegexes = mkOption {
|
||||
type = types.listOf types.str;
|
||||
skipAuthRegexes = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [];
|
||||
description = ''
|
||||
Skip authentication for requests matching any of these regular
|
||||
@ -159,8 +156,8 @@ in
|
||||
|
||||
# XXX: Not clear whether these two options are mutually exclusive or not.
|
||||
email = {
|
||||
domains = mkOption {
|
||||
type = types.listOf types.str;
|
||||
domains = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [];
|
||||
description = ''
|
||||
Authenticate emails with the specified domains. Use
|
||||
@ -168,8 +165,8 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
addresses = mkOption {
|
||||
type = types.nullOr types.lines;
|
||||
addresses = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.lines;
|
||||
default = null;
|
||||
description = ''
|
||||
Line-separated email addresses that are allowed to authenticate.
|
||||
@ -177,8 +174,8 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
loginURL = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
loginURL = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Authentication endpoint.
|
||||
@ -190,8 +187,8 @@ in
|
||||
example = "https://provider.example.com/oauth/authorize";
|
||||
};
|
||||
|
||||
redeemURL = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
redeemURL = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Token redemption endpoint.
|
||||
@ -203,8 +200,8 @@ in
|
||||
example = "https://provider.example.com/oauth/token";
|
||||
};
|
||||
|
||||
validateURL = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
validateURL = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Access token validation endpoint.
|
||||
@ -216,10 +213,10 @@ in
|
||||
example = "https://provider.example.com/user/emails";
|
||||
};
|
||||
|
||||
redirectURL = mkOption {
|
||||
redirectURL = lib.mkOption {
|
||||
# XXX: jml suspects this is always necessary, but the command-line
|
||||
# doesn't require it so making it optional.
|
||||
type = types.nullOr types.str;
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
The OAuth2 redirect URL.
|
||||
@ -228,16 +225,16 @@ in
|
||||
};
|
||||
|
||||
azure = {
|
||||
tenant = mkOption {
|
||||
type = types.str;
|
||||
tenant = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "common";
|
||||
description = ''
|
||||
Go to a tenant-specific or common (tenant-independent) endpoint.
|
||||
'';
|
||||
};
|
||||
|
||||
resource = mkOption {
|
||||
type = types.str;
|
||||
resource = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = ''
|
||||
The resource that is protected.
|
||||
'';
|
||||
@ -245,8 +242,8 @@ in
|
||||
};
|
||||
|
||||
google = {
|
||||
adminEmail = mkOption {
|
||||
type = types.str;
|
||||
adminEmail = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = ''
|
||||
The Google Admin to impersonate for API calls.
|
||||
|
||||
@ -258,16 +255,16 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
groups = mkOption {
|
||||
type = types.listOf types.str;
|
||||
groups = lib.mkOption {
|
||||
type = lib.types.listOf lib.types.str;
|
||||
default = [];
|
||||
description = ''
|
||||
Restrict logins to members of these Google groups.
|
||||
'';
|
||||
};
|
||||
|
||||
serviceAccountJSON = mkOption {
|
||||
type = types.path;
|
||||
serviceAccountJSON = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = ''
|
||||
The path to the service account JSON credentials.
|
||||
'';
|
||||
@ -275,16 +272,16 @@ in
|
||||
};
|
||||
|
||||
github = {
|
||||
org = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
org = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Restrict logins to members of this organisation.
|
||||
'';
|
||||
};
|
||||
|
||||
team = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
team = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Restrict logins to members of this team.
|
||||
@ -295,8 +292,8 @@ in
|
||||
|
||||
####################################################
|
||||
# UPSTREAM Configuration
|
||||
upstream = mkOption {
|
||||
type = with types; coercedTo str (x: [x]) (listOf str);
|
||||
upstream = lib.mkOption {
|
||||
type = with lib.types; coercedTo str (x: [x]) (listOf str);
|
||||
default = [];
|
||||
description = ''
|
||||
The http url(s) of the upstream endpoint or `file://`
|
||||
@ -304,40 +301,40 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
passAccessToken = mkOption {
|
||||
type = types.bool;
|
||||
passAccessToken = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Pass OAuth access_token to upstream via X-Forwarded-Access-Token header.
|
||||
'';
|
||||
};
|
||||
|
||||
passBasicAuth = mkOption {
|
||||
type = types.bool;
|
||||
passBasicAuth = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Pass HTTP Basic Auth, X-Forwarded-User and X-Forwarded-Email information to upstream.
|
||||
'';
|
||||
};
|
||||
|
||||
basicAuthPassword = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
basicAuthPassword = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
The password to set when passing the HTTP Basic Auth header.
|
||||
'';
|
||||
};
|
||||
|
||||
passHostHeader = mkOption {
|
||||
type = types.bool;
|
||||
passHostHeader = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Pass the request Host Header to upstream.
|
||||
'';
|
||||
};
|
||||
|
||||
signatureKey = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
signatureKey = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
GAP-Signature request signature key.
|
||||
@ -346,8 +343,8 @@ in
|
||||
};
|
||||
|
||||
cookie = {
|
||||
domain = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
domain = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Optional cookie domains to force cookies to (ie: `.yourcompany.com`).
|
||||
@ -357,33 +354,33 @@ in
|
||||
example = ".yourcompany.com";
|
||||
};
|
||||
|
||||
expire = mkOption {
|
||||
type = types.str;
|
||||
expire = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "168h0m0s";
|
||||
description = ''
|
||||
Expire timeframe for cookie.
|
||||
'';
|
||||
};
|
||||
|
||||
httpOnly = mkOption {
|
||||
type = types.bool;
|
||||
httpOnly = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Set HttpOnly cookie flag.
|
||||
'';
|
||||
};
|
||||
|
||||
name = mkOption {
|
||||
type = types.str;
|
||||
name = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "_oauth2_proxy";
|
||||
description = ''
|
||||
The name of the cookie that the oauth_proxy creates.
|
||||
'';
|
||||
};
|
||||
|
||||
refresh = mkOption {
|
||||
refresh = lib.mkOption {
|
||||
# XXX: Unclear what the behavior is when this is not specified.
|
||||
type = types.nullOr types.str;
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Refresh the cookie after this duration; 0 to disable.
|
||||
@ -391,15 +388,15 @@ in
|
||||
example = "168h0m0s";
|
||||
};
|
||||
|
||||
secret = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
secret = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
description = ''
|
||||
The seed string for secure cookies.
|
||||
'';
|
||||
};
|
||||
|
||||
secure = mkOption {
|
||||
type = types.bool;
|
||||
secure = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Set secure (HTTPS) cookie flag.
|
||||
@ -410,8 +407,8 @@ in
|
||||
####################################################
|
||||
# OAUTH2 PROXY configuration
|
||||
|
||||
httpAddress = mkOption {
|
||||
type = types.str;
|
||||
httpAddress = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "http://127.0.0.1:4180";
|
||||
description = ''
|
||||
HTTPS listening address. This module does not expose the port by
|
||||
@ -421,8 +418,8 @@ in
|
||||
};
|
||||
|
||||
htpasswd = {
|
||||
file = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
file = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
Additionally authenticate against a htpasswd file. Entries must be
|
||||
@ -430,8 +427,8 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
displayForm = mkOption {
|
||||
type = types.bool;
|
||||
displayForm = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Display username / password login form if an htpasswd file is provided.
|
||||
@ -439,16 +436,16 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
customTemplatesDir = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
customTemplatesDir = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
Path to custom HTML templates.
|
||||
'';
|
||||
};
|
||||
|
||||
reverseProxy = mkOption {
|
||||
type = types.bool;
|
||||
reverseProxy = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
In case when running behind a reverse proxy, controls whether headers
|
||||
@ -458,8 +455,8 @@ in
|
||||
'';
|
||||
};
|
||||
|
||||
proxyPrefix = mkOption {
|
||||
type = types.str;
|
||||
proxyPrefix = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "/oauth2";
|
||||
description = ''
|
||||
The url root path that this proxy should be nested under.
|
||||
@ -467,30 +464,30 @@ in
|
||||
};
|
||||
|
||||
tls = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
enable = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Whether to serve over TLS.
|
||||
'';
|
||||
};
|
||||
|
||||
certificate = mkOption {
|
||||
type = types.path;
|
||||
certificate = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = ''
|
||||
Path to certificate file.
|
||||
'';
|
||||
};
|
||||
|
||||
key = mkOption {
|
||||
type = types.path;
|
||||
key = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
description = ''
|
||||
Path to private key file.
|
||||
'';
|
||||
};
|
||||
|
||||
httpsAddress = mkOption {
|
||||
type = types.str;
|
||||
httpsAddress = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = ":443";
|
||||
description = ''
|
||||
`addr:port` to listen on for HTTPS clients.
|
||||
@ -502,8 +499,8 @@ in
|
||||
};
|
||||
};
|
||||
|
||||
requestLogging = mkOption {
|
||||
type = types.bool;
|
||||
requestLogging = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Log requests to stdout.
|
||||
@ -514,42 +511,42 @@ in
|
||||
# UNKNOWN
|
||||
|
||||
# XXX: Is this mandatory? Is it part of another group? Is it part of the provider specification?
|
||||
scope = mkOption {
|
||||
scope = lib.mkOption {
|
||||
# XXX: jml suspects this is always necessary, but the command-line
|
||||
# doesn't require it so making it optional.
|
||||
type = types.nullOr types.str;
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
OAuth scope specification.
|
||||
'';
|
||||
};
|
||||
|
||||
profileURL = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
profileURL = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Profile access endpoint.
|
||||
'';
|
||||
};
|
||||
|
||||
setXauthrequest = mkOption {
|
||||
type = types.nullOr types.bool;
|
||||
setXauthrequest = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Set X-Auth-Request-User and X-Auth-Request-Email response headers (useful in Nginx auth_request mode). Setting this to 'null' means using the upstream default (false).
|
||||
'';
|
||||
};
|
||||
|
||||
extraConfig = mkOption {
|
||||
extraConfig = lib.mkOption {
|
||||
default = {};
|
||||
type = types.attrsOf types.anything;
|
||||
type = lib.types.attrsOf lib.types.anything;
|
||||
description = ''
|
||||
Extra config to pass to oauth2-proxy.
|
||||
'';
|
||||
};
|
||||
|
||||
keyFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
keyFile = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
oauth2-proxy allows passing sensitive configuration via environment variables.
|
||||
@ -557,28 +554,30 @@ in
|
||||
OAUTH2_PROXY_CLIENT_SECRET=asdfasdfasdf.apps.googleuserscontent.com
|
||||
and specify the path here.
|
||||
'';
|
||||
example = "/run/keys/oauth2_proxy";
|
||||
example = "/run/keys/oauth2-proxy";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
imports = [
|
||||
(lib.mkRenamedOptionModule [ "services" "oauth2_proxy" ] [ "services" "oauth2-proxy" ])
|
||||
];
|
||||
|
||||
services.oauth2_proxy = mkIf (cfg.keyFile != null) {
|
||||
clientID = mkDefault null;
|
||||
clientSecret = mkDefault null;
|
||||
cookie.secret = mkDefault null;
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.oauth2-proxy = lib.mkIf (cfg.keyFile != null) {
|
||||
clientID = lib.mkDefault null;
|
||||
clientSecret = lib.mkDefault null;
|
||||
cookie.secret = lib.mkDefault null;
|
||||
};
|
||||
|
||||
users.users.oauth2_proxy = {
|
||||
users.users.oauth2-proxy = {
|
||||
description = "OAuth2 Proxy";
|
||||
isSystemUser = true;
|
||||
group = "oauth2_proxy";
|
||||
group = "oauth2-proxy";
|
||||
};
|
||||
|
||||
users.groups.oauth2_proxy = {};
|
||||
users.groups.oauth2-proxy = {};
|
||||
|
||||
systemd.services.oauth2_proxy = {
|
||||
systemd.services.oauth2-proxy = {
|
||||
description = "OAuth2 Proxy";
|
||||
path = [ cfg.package ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
@ -586,10 +585,10 @@ in
|
||||
after = [ "network-online.target" ];
|
||||
|
||||
serviceConfig = {
|
||||
User = "oauth2_proxy";
|
||||
User = "oauth2-proxy";
|
||||
Restart = "always";
|
||||
ExecStart = "${cfg.package}/bin/oauth2-proxy ${configString}";
|
||||
EnvironmentFile = mkIf (cfg.keyFile != null) cfg.keyFile;
|
||||
EnvironmentFile = lib.mkIf (cfg.keyFile != null) cfg.keyFile;
|
||||
};
|
||||
};
|
||||
|
@ -56,8 +56,8 @@ in
|
||||
};
|
||||
|
||||
devRootTokenID = mkOption {
|
||||
type = types.str;
|
||||
default = false;
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = ''
|
||||
Initial root token. This only applies when {option}`services.vault.dev` is true
|
||||
'';
|
||||
|
@ -5,7 +5,7 @@ self-hostable cloud platform. The server setup can be automated using
|
||||
[services.nextcloud](#opt-services.nextcloud.enable). A
|
||||
desktop client is packaged at `pkgs.nextcloud-client`.
|
||||
|
||||
The current default by NixOS is `nextcloud28` which is also the latest
|
||||
The current default by NixOS is `nextcloud29` which is also the latest
|
||||
major version available.
|
||||
|
||||
## Basic usage {#module-services-nextcloud-basic-usage}
|
||||
@ -184,6 +184,32 @@ Alternatively, extra apps can also be declared with the [](#opt-services.nextclo
|
||||
When using this setting, apps can no longer be managed statefully because this can lead to Nextcloud updating apps
|
||||
that are managed by Nix. If you want automatic updates it is recommended that you use web interface to install apps.
|
||||
|
||||
## Known warnings {#module-services-nextcloud-known-warnings}
|
||||
|
||||
### Failed to get an iterator for log entries: Logreader application only supports "file" log_type {#module-services-nextcloud-warning-logreader}
|
||||
|
||||
This is because
|
||||
|
||||
* our module writes logs into the journal (`journalctl -t Nextcloud`)
|
||||
* the Logreader application that allows reading logs in the admin panel is enabled
|
||||
by default and requires logs written to a file.
|
||||
|
||||
The logreader application doesn't work, as it was the case before. The only change is that
|
||||
it complains loudly now. So nothing actionable here by default. Alternatively you can
|
||||
|
||||
* disable the logreader application to shut up the "error".
|
||||
|
||||
We can't really do that by default since whether apps are enabled/disabled is part
|
||||
of the application's state and tracked inside the database.
|
||||
|
||||
* set [](#opt-services.nextcloud.settings.log_type) to "file" to be able to view logs
|
||||
from the admin panel.
|
||||
|
||||
### Your web server is not properly set up to resolve `.well-known` URLs, failed on: `/.well-known/caldav` {#module-services-nextcloud-warning-wellknown-caldav}
|
||||
|
||||
This warning appearing seems to be an upstream issue and is being sorted out
|
||||
in [nextcloud/server#45033](https://github.com/nextcloud/server/issues/45033).
|
||||
|
||||
## Maintainer information {#module-services-nextcloud-maintainer-info}
|
||||
|
||||
As stated in the previous paragraph, we must provide a clean upgrade-path for Nextcloud
|
||||
|
@ -819,7 +819,8 @@ in {
|
||||
++ (optional (versionOlder cfg.package.version "25") (upgradeWarning 24 "22.11"))
|
||||
++ (optional (versionOlder cfg.package.version "26") (upgradeWarning 25 "23.05"))
|
||||
++ (optional (versionOlder cfg.package.version "27") (upgradeWarning 26 "23.11"))
|
||||
++ (optional (versionOlder cfg.package.version "28") (upgradeWarning 27 "24.05"));
|
||||
++ (optional (versionOlder cfg.package.version "28") (upgradeWarning 27 "24.05"))
|
||||
++ (optional (versionOlder cfg.package.version "29") (upgradeWarning 28 "24.11"));
|
||||
|
||||
services.nextcloud.package = with pkgs;
|
||||
mkDefault (
|
||||
@ -832,10 +833,12 @@ in {
|
||||
else if versionOlder stateVersion "23.05" then nextcloud25
|
||||
else if versionOlder stateVersion "23.11" then nextcloud26
|
||||
else if versionOlder stateVersion "24.05" then nextcloud27
|
||||
else nextcloud28
|
||||
else nextcloud29
|
||||
);
|
||||
|
||||
services.nextcloud.phpPackage = pkgs.php82;
|
||||
services.nextcloud.phpPackage =
|
||||
if versionOlder cfg.package.version "29" then pkgs.php82
|
||||
else pkgs.php83;
|
||||
|
||||
services.nextcloud.phpOptions = mkMerge [
|
||||
(mapAttrs (const mkOptionDefault) defaultPHPSettings)
|
||||
|
@ -352,7 +352,8 @@ let
|
||||
|
||||
# The acme-challenge location doesn't need to be added if we are not using any automated
|
||||
# certificate provisioning and can also be omitted when we use a certificate obtained via a DNS-01 challenge
|
||||
acmeLocation = optionalString (vhost.enableACME || (vhost.useACMEHost != null && config.security.acme.certs.${vhost.useACMEHost}.dnsProvider == null))
|
||||
acmeName = if vhost.useACMEHost != null then vhost.useACMEHost else vhostName;
|
||||
acmeLocation = optionalString ((vhost.enableACME || vhost.useACMEHost != null) && config.security.acme.certs.${acmeName}.dnsProvider == null)
|
||||
# Rule for legitimate ACME Challenge requests (like /.well-known/acme-challenge/xxxxxxxxx)
|
||||
# We use ^~ here, so that we don't check any regexes (which could
|
||||
# otherwise easily override this intended match accidentally).
|
||||
|
@ -9,7 +9,7 @@ let
|
||||
cfg = config.virtualisation.incus;
|
||||
preseedFormat = pkgs.formats.yaml { };
|
||||
|
||||
serverBinPath = ''${pkgs.qemu_kvm}/libexec:${
|
||||
serverBinPath = ''/run/wrappers/bin:${pkgs.qemu_kvm}/libexec:${
|
||||
lib.makeBinPath (
|
||||
with pkgs;
|
||||
[
|
||||
@ -33,30 +33,41 @@ let
|
||||
gzip
|
||||
iproute2
|
||||
iptables
|
||||
iw
|
||||
kmod
|
||||
libnvidia-container
|
||||
libxfs
|
||||
lvm2
|
||||
minio
|
||||
minio-client
|
||||
nftables
|
||||
qemu_kvm
|
||||
qemu-utils
|
||||
qemu_kvm
|
||||
rsync
|
||||
squashfs-tools-ng
|
||||
squashfsTools
|
||||
sshfs
|
||||
swtpm
|
||||
systemd
|
||||
thin-provisioning-tools
|
||||
util-linux
|
||||
virtiofsd
|
||||
xdelta
|
||||
xz
|
||||
]
|
||||
++ lib.optionals config.security.apparmor.enable [
|
||||
apparmor-bin-utils
|
||||
|
||||
(writeShellScriptBin "apparmor_parser" ''
|
||||
exec '${apparmor-parser}/bin/apparmor_parser' -I '${apparmor-profiles}/etc/apparmor.d' "$@"
|
||||
'')
|
||||
]
|
||||
++ lib.optionals config.services.ceph.client.enable [ ceph-client ]
|
||||
++ lib.optionals config.virtualisation.vswitch.enable [ config.virtualisation.vswitch.package ]
|
||||
++ lib.optionals config.boot.zfs.enabled [
|
||||
config.boot.zfs.package
|
||||
"${config.boot.zfs.package}/lib/udev"
|
||||
]
|
||||
++ lib.optionals config.virtualisation.vswitch.enable [ config.virtualisation.vswitch.package ]
|
||||
)
|
||||
}'';
|
||||
|
||||
|
@ -219,6 +219,11 @@ in
|
||||
systemd.services.podman.environment = config.networking.proxy.envVars;
|
||||
systemd.sockets.podman.wantedBy = [ "sockets.target" ];
|
||||
systemd.sockets.podman.socketConfig.SocketGroup = "podman";
|
||||
# Podman does not support multiple sockets, as of podman 5.0.2, so we use
|
||||
# a symlink. Unfortunately this does not let us use an alternate group,
|
||||
# such as `docker`.
|
||||
systemd.sockets.podman.socketConfig.Symlinks =
|
||||
lib.mkIf cfg.dockerSocket.enable [ "/run/docker.sock" ];
|
||||
|
||||
systemd.user.services.podman.environment = config.networking.proxy.envVars;
|
||||
systemd.user.sockets.podman.wantedBy = [ "sockets.target" ];
|
||||
@ -239,11 +244,6 @@ in
|
||||
'')
|
||||
];
|
||||
|
||||
systemd.tmpfiles.rules =
|
||||
lib.optionals cfg.dockerSocket.enable [
|
||||
"L! /run/docker.sock - - - - /run/podman/podman.sock"
|
||||
];
|
||||
|
||||
users.groups.podman = { };
|
||||
|
||||
assertions = [
|
||||
|
@ -82,7 +82,9 @@ in rec {
|
||||
(onFullSupported "nixos.tests.gitlab")
|
||||
(onFullSupported "nixos.tests.gnome")
|
||||
(onFullSupported "nixos.tests.gnome-xorg")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.hibernate")
|
||||
# FIXME: broken by QEMU 8.2.3 upgrade, reenable when fixed
|
||||
# Upstream issue: https://gitlab.com/qemu-project/qemu/-/issues/2321
|
||||
# (onSystems ["x86_64-linux"] "nixos.tests.hibernate")
|
||||
(onFullSupported "nixos.tests.i3wm")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSimple")
|
||||
(onSystems ["x86_64-linux"] "nixos.tests.installer.btrfsSubvolDefault")
|
||||
|
@ -193,6 +193,7 @@ in {
|
||||
cinnamon = handleTest ./cinnamon.nix {};
|
||||
cinnamon-wayland = handleTest ./cinnamon-wayland.nix {};
|
||||
cjdns = handleTest ./cjdns.nix {};
|
||||
clatd = handleTest ./clatd.nix {};
|
||||
clickhouse = handleTest ./clickhouse.nix {};
|
||||
cloud-init = handleTest ./cloud-init.nix {};
|
||||
cloud-init-hostname = handleTest ./cloud-init-hostname.nix {};
|
||||
@ -451,6 +452,7 @@ in {
|
||||
jirafeau = handleTest ./jirafeau.nix {};
|
||||
jitsi-meet = handleTest ./jitsi-meet.nix {};
|
||||
jool = import ./jool.nix { inherit pkgs runTest; };
|
||||
jotta-cli = handleTest ./jotta-cli.nix {};
|
||||
k3s = handleTest ./k3s {};
|
||||
kafka = handleTest ./kafka.nix {};
|
||||
kanidm = handleTest ./kanidm.nix {};
|
||||
|
189
nixos/tests/clatd.nix
Normal file
189
nixos/tests/clatd.nix
Normal file
@ -0,0 +1,189 @@
|
||||
# This test verifies that we can ping an IPv4-only server from an IPv6-only
|
||||
# client via a NAT64 router using CLAT on the client. The hosts and networks
|
||||
# are configured as follows:
|
||||
#
|
||||
# +------
|
||||
# Client | clat Address: 192.0.0.1/32 (configured via clatd)
|
||||
# | Route: default
|
||||
# |
|
||||
# | eth1 Address: 2001:db8::2/64
|
||||
# | | Route: default via 2001:db8::1
|
||||
# +--|---
|
||||
# | VLAN 3
|
||||
# +--|---
|
||||
# | eth2 Address: 2001:db8::1/64
|
||||
# Router |
|
||||
# | nat64 Address: 64:ff9b::1/128
|
||||
# | Route: 64:ff9b::/96
|
||||
# | Address: 192.0.2.0/32
|
||||
# | Route: 192.0.2.0/24
|
||||
# |
|
||||
# | eth1 Address: 100.64.0.1/24
|
||||
# +--|---
|
||||
# | VLAN 2
|
||||
# +--|---
|
||||
# Server | eth1 Address: 100.64.0.2/24
|
||||
# | Route: 192.0.2.0/24 via 100.64.0.1
|
||||
# +------
|
||||
|
||||
import ./make-test-python.nix ({ pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
name = "clatd";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
maintainers = [ hax404 ];
|
||||
};
|
||||
|
||||
nodes = {
|
||||
# The server is configured with static IPv4 addresses. RFC 6052 Section 3.1
|
||||
# disallows the mapping of non-global IPv4 addresses like RFC 1918 into the
|
||||
# Well-Known Prefix 64:ff9b::/96. TAYGA also does not allow the mapping of
|
||||
# documentation space (RFC 5737). To circumvent this, 100.64.0.2/24 from
|
||||
# RFC 6589 (Carrier Grade NAT) is used here.
|
||||
# To reach the IPv4 address pool of the NAT64 gateway, there is a static
|
||||
# route configured. In normal cases, where the router would also source NAT
|
||||
# the pool addresses to one IPv4 addresses, this would not be needed.
|
||||
server = {
|
||||
virtualisation.vlans = [
|
||||
2 # towards router
|
||||
];
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
interfaces.eth1 = lib.mkForce {};
|
||||
};
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
networks."vlan1" = {
|
||||
matchConfig.Name = "eth1";
|
||||
address = [
|
||||
"100.64.0.2/24"
|
||||
];
|
||||
routes = [
|
||||
{ routeConfig = { Destination = "192.0.2.0/24"; Gateway = "100.64.0.1"; }; }
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# The router is configured with static IPv4 addresses towards the server
|
||||
# and IPv6 addresses towards the client. For NAT64, the Well-Known prefix
|
||||
# 64:ff9b::/96 is used. NAT64 is done with TAYGA which provides the
|
||||
# tun-interface nat64 and does the translation over it. The IPv6 packets
|
||||
# are sent to this interfaces and received as IPv4 packets and vice versa.
|
||||
# As TAYGA only translates IPv6 addresses to dedicated IPv4 addresses, it
|
||||
# needs a pool of IPv4 addresses which must be at least as big as the
|
||||
# expected amount of clients. In this test, the packets from the pool are
|
||||
# directly routed towards the client. In normal cases, there would be a
|
||||
# second source NAT44 to map all clients behind one IPv4 address.
|
||||
router = {
|
||||
boot.kernel.sysctl = {
|
||||
"net.ipv4.ip_forward" = 1;
|
||||
"net.ipv6.conf.all.forwarding" = 1;
|
||||
};
|
||||
|
||||
virtualisation.vlans = [
|
||||
2 # towards server
|
||||
3 # towards client
|
||||
];
|
||||
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
useNetworkd = true;
|
||||
firewall.enable = false;
|
||||
interfaces.eth1 = lib.mkForce {
|
||||
ipv4 = {
|
||||
addresses = [ { address = "100.64.0.1"; prefixLength = 24; } ];
|
||||
};
|
||||
};
|
||||
interfaces.eth2 = lib.mkForce {
|
||||
ipv6 = {
|
||||
addresses = [ { address = "2001:db8::1"; prefixLength = 64; } ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
services.tayga = {
|
||||
enable = true;
|
||||
ipv4 = {
|
||||
address = "192.0.2.0";
|
||||
router = {
|
||||
address = "192.0.2.1";
|
||||
};
|
||||
pool = {
|
||||
address = "192.0.2.0";
|
||||
prefixLength = 24;
|
||||
};
|
||||
};
|
||||
ipv6 = {
|
||||
address = "2001:db8::1";
|
||||
router = {
|
||||
address = "64:ff9b::1";
|
||||
};
|
||||
pool = {
|
||||
address = "64:ff9b::";
|
||||
prefixLength = 96;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# The client is configured with static IPv6 addresses. It has also a static
|
||||
# default route towards the router. To reach the IPv4-only server, the
|
||||
# client starts the clat daemon which starts and configures the local
|
||||
# IPv4 -> IPv6 translation via Tayga.
|
||||
client = {
|
||||
virtualisation.vlans = [
|
||||
3 # towards router
|
||||
];
|
||||
|
||||
networking = {
|
||||
useDHCP = false;
|
||||
interfaces.eth1 = lib.mkForce {};
|
||||
};
|
||||
|
||||
systemd.network = {
|
||||
enable = true;
|
||||
networks."vlan1" = {
|
||||
matchConfig.Name = "eth1";
|
||||
address = [
|
||||
"2001:db8::2/64"
|
||||
];
|
||||
routes = [
|
||||
{ routeConfig = { Destination = "::/0"; Gateway = "2001:db8::1"; }; }
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
services.clatd = {
|
||||
enable = true;
|
||||
settings.plat-prefix = "64:ff9b::/96";
|
||||
};
|
||||
|
||||
environment.systemPackages = [ pkgs.mtr ];
|
||||
};
|
||||
};
|
||||
|
||||
testScript = ''
|
||||
start_all()
|
||||
|
||||
# wait for all machines to start up
|
||||
for machine in client, router, server:
|
||||
machine.wait_for_unit("network-online.target")
|
||||
|
||||
with subtest("Wait for tayga and clatd"):
|
||||
router.wait_for_unit("tayga.service")
|
||||
client.wait_for_unit("clatd.service")
|
||||
# clatd checks if this system has IPv4 connectivity for 10 seconds
|
||||
client.wait_until_succeeds(
|
||||
'journalctl -u clatd -e | grep -q "Starting up TAYGA, using config file"'
|
||||
)
|
||||
|
||||
with subtest("Test ICMP"):
|
||||
client.wait_until_succeeds("ping -c 3 100.64.0.2 >&2")
|
||||
|
||||
with subtest("Test ICMP and show a traceroute"):
|
||||
client.wait_until_succeeds("mtr --show-ips --report-wide 100.64.0.2 >&2")
|
||||
|
||||
client.log(client.execute("systemd-analyze security clatd.service")[1])
|
||||
'';
|
||||
})
|
@ -1,5 +1,5 @@
|
||||
# NixOS tests for gnome-desktop-testing-runner using software
|
||||
# See https://wiki.gnome.org/Initiatives/GnomeGoals/InstalledTests
|
||||
# See https://github.com/NixOS/nixpkgs/issues/34987
|
||||
|
||||
{ system ? builtins.currentSystem,
|
||||
config ? {},
|
||||
|
25
nixos/tests/jotta-cli.nix
Normal file
25
nixos/tests/jotta-cli.nix
Normal file
@ -0,0 +1,25 @@
|
||||
import ./make-test-python.nix ({ pkgs, ... }: {
|
||||
|
||||
name = "jotta-cli";
|
||||
meta.maintainers = with pkgs.lib.maintainers; [ evenbrenden ];
|
||||
|
||||
nodes.machine = { pkgs, ... }: {
|
||||
user.services.jotta-cli.enable = true;
|
||||
imports = [ ./common/user-account.nix ];
|
||||
};
|
||||
|
||||
testScript = { nodes, ... }:
|
||||
let uid = toString nodes.machine.users.users.alice.uid;
|
||||
in ''
|
||||
machine.start()
|
||||
|
||||
machine.succeed("loginctl enable-linger alice")
|
||||
machine.wait_for_unit("user@${uid}.service")
|
||||
|
||||
machine.wait_for_unit("jottad.service", "alice")
|
||||
machine.wait_for_open_unix_socket("/run/user/${uid}/jottad/jottad.socket")
|
||||
|
||||
# "jotta-cli version" should fail if jotta-cli cannot connect to jottad
|
||||
machine.succeed('XDG_RUNTIME_DIR=/run/user/${uid} su alice -c "jotta-cli version"')
|
||||
'';
|
||||
})
|
@ -76,14 +76,17 @@ import ./make-test-python.nix ({ pkgs, ... }:
|
||||
with subtest("Test LDAP interface"):
|
||||
server.succeed("ldapsearch -H ldaps://${serverDomain}:636 -b '${ldapBaseDN}' -x '(name=test)'")
|
||||
|
||||
with subtest("Test CLI login"):
|
||||
client.succeed("kanidm login -D anonymous")
|
||||
client.succeed("kanidm self whoami | grep anonymous@${serverDomain}")
|
||||
client.succeed("kanidm logout")
|
||||
|
||||
with subtest("Recover idm_admin account"):
|
||||
idm_admin_password = server.succeed("su - kanidm -c 'kanidmd recover-account -c ${serverConfigFile} idm_admin 2>&1 | rg -o \'[A-Za-z0-9]{48}\' '").strip().removeprefix("'").removesuffix("'")
|
||||
|
||||
with subtest("Test CLI login"):
|
||||
client.wait_until_tty_matches("1", "login: ")
|
||||
client.send_chars("root\n")
|
||||
client.send_chars("kanidm login -D idm_admin\n")
|
||||
client.wait_until_tty_matches("1", "Enter password: ")
|
||||
client.send_chars(f"{idm_admin_password}\n")
|
||||
client.wait_until_tty_matches("1", "Login Success for idm_admin")
|
||||
|
||||
with subtest("Test unixd connection"):
|
||||
client.wait_for_unit("kanidm-unixd.service")
|
||||
client.wait_for_file("/run/kanidm-unixd/sock")
|
||||
@ -92,12 +95,6 @@ import ./make-test-python.nix ({ pkgs, ... }:
|
||||
with subtest("Test user creation"):
|
||||
client.wait_for_unit("getty@tty1.service")
|
||||
client.wait_until_succeeds("pgrep -f 'agetty.*tty1'")
|
||||
client.wait_until_tty_matches("1", "login: ")
|
||||
client.send_chars("root\n")
|
||||
client.send_chars("kanidm login -D idm_admin\n")
|
||||
client.wait_until_tty_matches("1", "Enter password: ")
|
||||
client.send_chars(f"{idm_admin_password}\n")
|
||||
client.wait_until_tty_matches("1", "Login Success for idm_admin")
|
||||
client.succeed("kanidm person create testuser TestUser")
|
||||
client.succeed("kanidm person posix set --shell \"$SHELL\" testuser")
|
||||
client.send_chars("kanidm person posix set-password testuser\n")
|
||||
|
@ -119,11 +119,11 @@ in
|
||||
with subtest("Libreswan is ready"):
|
||||
alice.wait_for_unit("ipsec")
|
||||
bob.wait_for_unit("ipsec")
|
||||
alice.succeed("ipsec verify 1>&2")
|
||||
alice.succeed("ipsec checkconfig")
|
||||
|
||||
with subtest("Alice and Bob can start the tunnel"):
|
||||
alice.execute("ipsec auto --start tunnel >&2 &")
|
||||
bob.succeed("ipsec auto --start tunnel")
|
||||
alice.execute("ipsec start tunnel >&2 &")
|
||||
bob.succeed("ipsec start tunnel")
|
||||
# apparently this is needed to "wake" the tunnel
|
||||
bob.execute("ping -c1 alice")
|
||||
|
||||
|
@ -22,4 +22,4 @@ foldl
|
||||
};
|
||||
})
|
||||
{ }
|
||||
[ 26 27 28 ]
|
||||
[ 27 28 29 ]
|
||||
|
@ -1,7 +1,7 @@
|
||||
import ./make-test-python.nix ({ pkgs, ... }:
|
||||
|
||||
let inherit (import ./ssh-keys.nix pkgs)
|
||||
snakeOilPrivateKey snakeOilPublicKey;
|
||||
snakeOilPrivateKey snakeOilPublicKey snakeOilEd25519PrivateKey snakeOilEd25519PublicKey;
|
||||
in {
|
||||
name = "openssh";
|
||||
meta = with pkgs.lib.maintainers; {
|
||||
@ -108,6 +108,31 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
server-no-openssl =
|
||||
{ ... }:
|
||||
{
|
||||
programs.ssh.package = pkgs.opensshPackages.openssh.override {
|
||||
linkOpenssl = false;
|
||||
};
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
hostKeys = [
|
||||
{ type = "ed25519"; path = "/etc/ssh/ssh_host_ed25519_key"; }
|
||||
];
|
||||
settings = {
|
||||
# Must not specify the OpenSSL provided algorithms.
|
||||
Ciphers = [ "chacha20-poly1305@openssh.com" ];
|
||||
KexAlgorithms = [
|
||||
"curve25519-sha256"
|
||||
"curve25519-sha256@libssh.org"
|
||||
];
|
||||
};
|
||||
};
|
||||
users.users.root.openssh.authorizedKeys.keys = [
|
||||
snakeOilEd25519PublicKey
|
||||
];
|
||||
};
|
||||
|
||||
server-no-pam =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
@ -139,6 +164,7 @@ in {
|
||||
server_allowed_users.wait_for_unit("sshd", timeout=30)
|
||||
server_localhost_only.wait_for_unit("sshd", timeout=30)
|
||||
server_match_rule.wait_for_unit("sshd", timeout=30)
|
||||
server_no_openssl.wait_for_unit("sshd", timeout=30)
|
||||
server_no_pam.wait_for_unit("sshd", timeout=30)
|
||||
|
||||
server_lazy.wait_for_unit("sshd.socket", timeout=30)
|
||||
@ -230,6 +256,16 @@ in {
|
||||
timeout=30
|
||||
)
|
||||
|
||||
with subtest("no-openssl"):
|
||||
client.succeed(
|
||||
"cat ${snakeOilEd25519PrivateKey} > privkey.snakeoil"
|
||||
)
|
||||
client.succeed("chmod 600 privkey.snakeoil")
|
||||
client.succeed(
|
||||
"ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i privkey.snakeoil server-no-openssl true",
|
||||
timeout=30
|
||||
)
|
||||
|
||||
with subtest("no-pam"):
|
||||
client.succeed(
|
||||
"cat ${snakeOilPrivateKey} > privkey.snakeoil"
|
||||
|
@ -12,4 +12,16 @@ pkgs:
|
||||
"yNTYAAABBBChdA2BmwcG49OrQN33f/sj+OHL5sJhwVl2Qim0vkUJQCry1zFpKTa"
|
||||
"9ZcDMiWaEhoAR6FGoaGI04ff7CS+1yybQ= snakeoil"
|
||||
];
|
||||
|
||||
snakeOilEd25519PrivateKey = pkgs.writeText "privkey.snakeoil" ''
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||
QyNTUxOQAAACAYBTIWo1J4PkY4/7AhVyPT8xvAUI67tp+yYFFRdSm7+QAAAJC89yCivPcg
|
||||
ogAAAAtzc2gtZWQyNTUxOQAAACAYBTIWo1J4PkY4/7AhVyPT8xvAUI67tp+yYFFRdSm7+Q
|
||||
AAAEDJmKp3lX6Pz0unTc0QZwrHb8Eyr9fJUopE9d2/+q+eCxgFMhajUng+Rjj/sCFXI9Pz
|
||||
G8BQjru2n7JgUVF1Kbv5AAAACnRvbUBvemRlc2sBAgM=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
||||
'';
|
||||
|
||||
snakeOilEd25519PublicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBgFMhajUng+Rjj/sCFXI9PzG8BQjru2n7JgUVF1Kbv5 snakeoil";
|
||||
}
|
||||
|
@ -27,11 +27,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "bitwig-studio";
|
||||
version = "5.1.6";
|
||||
version = "5.1.8";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://downloads.bitwig.com/stable/${version}/${pname}-${version}.deb";
|
||||
sha256 = "sha256-U1Qp7/7kAr1IEcv256I2J/sb5MYxfR20Pi5N8WaVh2U=";
|
||||
sha256 = "sha256-KxNLae/uTYL1m/X+/7wr7hhKfw31NpB9Mw9RzfrTuus=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ dpkg makeWrapper wrapGAppsHook ];
|
||||
|
@ -1,42 +0,0 @@
|
||||
Shows build and link errors in configure for ease of debugging which
|
||||
options require what.
|
||||
diff --git a/scripts/checks.sh b/scripts/checks.sh
|
||||
index 64cbbf3..fab4d9b 100644
|
||||
--- a/scripts/checks.sh
|
||||
+++ b/scripts/checks.sh
|
||||
@@ -425,7 +425,7 @@ try_compile()
|
||||
echo "$1" > $__src || exit 1
|
||||
shift
|
||||
__cmd="$CC -c $CFLAGS $@ $__src -o $__obj"
|
||||
- $CC -c $CFLAGS "$@" $__src -o $__obj 2>/dev/null
|
||||
+ $CC -c $CFLAGS "$@" $__src -o $__obj
|
||||
;;
|
||||
cxx)
|
||||
__src=`tmp_file prog.cc`
|
||||
@@ -433,7 +433,7 @@ try_compile()
|
||||
echo "$1" > $__src || exit 1
|
||||
shift
|
||||
__cmd="$CXX -c $CXXFLAGS $@ $__src -o $__obj"
|
||||
- $CXX -c $CXXFLAGS "$@" $__src -o $__obj 2>/dev/null
|
||||
+ $CXX -c $CXXFLAGS "$@" $__src -o $__obj
|
||||
;;
|
||||
esac
|
||||
return $?
|
||||
@@ -451,7 +451,7 @@ try_compile_link()
|
||||
echo "$1" > $__src || exit 1
|
||||
shift
|
||||
__cmd="$CC $__src -o $__exe $CFLAGS $LDFLAGS $@"
|
||||
- $CC $__src -o $__exe $CFLAGS $LDFLAGS "$@" 2>/dev/null
|
||||
+ $CC $__src -o $__exe $CFLAGS $LDFLAGS "$@"
|
||||
;;
|
||||
cxx)
|
||||
__src=`tmp_file prog.cc`
|
||||
@@ -459,7 +459,7 @@ try_compile_link()
|
||||
echo "$1" > $__src || exit 1
|
||||
shift
|
||||
__cmd="$CXX $__src -o $__exe $CXXFLAGS $CXXLDFLAGS $@"
|
||||
- $CXX $__src -o $__exe $CXXFLAGS $CXXLDFLAGS "$@" 2>/dev/null
|
||||
+ $CXX $__src -o $__exe $CXXFLAGS $CXXLDFLAGS "$@"
|
||||
;;
|
||||
esac
|
||||
return $?
|
@ -34,7 +34,7 @@ in stdenv.mkDerivation rec {
|
||||
meta = with lib; {
|
||||
description = "View and edit tags for various audio files";
|
||||
mainProgram = "easytag";
|
||||
homepage = "https://wiki.gnome.org/Apps/EasyTAG";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/easytag";
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = with maintainers; [ ];
|
||||
platforms = platforms.linux;
|
||||
|
@ -69,7 +69,7 @@ stdenv.mkDerivation rec {
|
||||
meta = with lib; {
|
||||
description = "Listen to your favorite podcasts";
|
||||
mainProgram = "gnome-podcasts";
|
||||
homepage = "https://wiki.gnome.org/Apps/Podcasts";
|
||||
homepage = "https://apps.gnome.org/Podcasts/";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = teams.gnome.members;
|
||||
platforms = platforms.unix;
|
||||
|
@ -102,7 +102,7 @@ python3.pkgs.buildPythonApplication rec {
|
||||
meta = with lib; {
|
||||
changelog = "https://gitlab.gnome.org/World/lollypop/tags/${version}";
|
||||
description = "A modern music player for GNOME";
|
||||
homepage = "https://wiki.gnome.org/Apps/Lollypop";
|
||||
homepage = "https://gitlab.gnome.org/World/lollypop";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = with maintainers; [ lovesegfault ];
|
||||
platforms = platforms.linux;
|
||||
|
@ -5,13 +5,13 @@
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
version = "10.60";
|
||||
version = "10.71";
|
||||
pname = "monkeys-audio";
|
||||
|
||||
src = fetchzip {
|
||||
url = "https://monkeysaudio.com/files/MAC_${
|
||||
builtins.concatStringsSep "" (lib.strings.splitString "." finalAttrs.version)}_SDK.zip";
|
||||
hash = "sha256-llOo9G65UDDCzaSahq5qssw6SmOJ5C9qS2bdXB/pKF0=";
|
||||
hash = "sha256-YHPC+dHfvRSr6GldWSlgCGt/wuO/WXQGRliarnM8/AU=";
|
||||
stripRoot = false;
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
|
@ -26,11 +26,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "qmmp";
|
||||
version = "2.1.6";
|
||||
version = "2.1.7";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://qmmp.ylsoftware.com/files/qmmp/2.1/${pname}-${version}.tar.bz2";
|
||||
hash = "sha256-knqo5yCkcO/bFmM++z+SdiWzpDKK9ooV0wqlcIKj7so=";
|
||||
hash = "sha256-5qdnvGFgFEk+00tjnVhqW29AyyjCfiFQOyYyVmAjHnM=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
|
||||
|
@ -13,14 +13,14 @@
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "qpwgraph";
|
||||
version = "0.6.3";
|
||||
version = "0.7.1";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
domain = "gitlab.freedesktop.org";
|
||||
owner = "rncbc";
|
||||
repo = "qpwgraph";
|
||||
rev = "v${finalAttrs.version}";
|
||||
sha256 = "sha256-mTWmXHC9KkXgUIO5CIcGOoYYLx+5si/LETSmHFhmrRE=";
|
||||
sha256 = "sha256-mtW+dbjdp7as0N5+iacMSNrJ4jm8HWYqJP6G+lutucc=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "qsynth";
|
||||
version = "0.9.13";
|
||||
version = "0.9.90";
|
||||
|
||||
src = fetchurl {
|
||||
url = "mirror://sourceforge/qsynth/${pname}-${version}.tar.gz";
|
||||
hash = "sha256-SvgZrdS6BwWhNgbovcfhpQKVcu0iwr4dDqeIckuo1fk=";
|
||||
hash = "sha256-5lqmoUku4/8oKxlQio1nJtMu1kn42iK8mi0K3s9y70M=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ];
|
||||
|
@ -113,7 +113,7 @@ stdenv.mkDerivation rec {
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://wiki.gnome.org/Apps/Rhythmbox";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/rhythmbox";
|
||||
description = "A music playing application for GNOME";
|
||||
license = licenses.gpl2Plus;
|
||||
platforms = platforms.linux;
|
||||
|
@ -1,32 +1,21 @@
|
||||
{ stdenv, lib, fetchFromGitHub, fetchpatch, cmake, pkg-config
|
||||
{ stdenv, lib, fetchFromGitHub, cmake, pkg-config
|
||||
, alsa-lib, asio, avahi, boost179, flac, libogg, libvorbis, libopus, soxr
|
||||
, IOKit, AudioToolbox
|
||||
, aixlog, popl
|
||||
, pulseaudioSupport ? false, libpulseaudio
|
||||
, nixosTests }:
|
||||
|
||||
assert pulseaudioSupport -> libpulseaudio != null;
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "snapcast";
|
||||
version = "0.27.0";
|
||||
version = "0.28.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "badaix";
|
||||
repo = "snapcast";
|
||||
rev = "v${version}";
|
||||
sha256 = "sha256-dlK1xQQqst4VQjioC7MZzqXwMC+JfqtvnD5lrOqGhYI=";
|
||||
sha256 = "sha256-XxpiLojs1TI3qM7yXS+OPcHKo6pLcfJ+Eop7GjQ4HQw=";
|
||||
};
|
||||
|
||||
patches = [
|
||||
# Can be removed with next release after 0.27.0
|
||||
(fetchpatch {
|
||||
name = "include-cstdint.patch";
|
||||
url = "https://github.com/badaix/snapcast/commit/481f08199ca31c60c9a3475f1064e6b06a503d12.patch";
|
||||
hash = "sha256-klpvmBpBAlBMtcgnNfW6X6vDbJFnOuOsPUDXcNf5tGc=";
|
||||
})
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ cmake pkg-config ];
|
||||
# snapcast also supports building against tremor but as we have libogg, that's
|
||||
# not needed
|
||||
|
@ -41,13 +41,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "sonic-pi";
|
||||
version = "4.5.0";
|
||||
version = "4.5.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "sonic-pi-net";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-s9B3OBwiUdCJyxbeQXeidv38pzmvC442Byl+llabqp0=";
|
||||
hash = "sha256-JMextQY0jLShWmqRQoVAbqIzDhA1mOzI7vfsG7+jjX0=";
|
||||
};
|
||||
|
||||
mixFodDeps = beamPackages.fetchMixDeps {
|
||||
|
@ -63,7 +63,7 @@ stdenv.mkDerivation rec {
|
||||
meta = with lib; {
|
||||
description = "A Gnome CD Ripper";
|
||||
mainProgram = "sound-juicer";
|
||||
homepage = "https://wiki.gnome.org/Apps/SoundJuicer";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/sound-juicer";
|
||||
maintainers = [ maintainers.bdimcheff ];
|
||||
license = licenses.gpl2Plus;
|
||||
platforms = platforms.linux;
|
||||
|
@ -250,6 +250,7 @@ stdenv.mkDerivation rec {
|
||||
# no-derivatives clause
|
||||
license = with licenses; [ gpl3Plus cc-by-nc-40 unfreeRedistributable ];
|
||||
maintainers = with maintainers; [ nathyong jpotier ddelabru ];
|
||||
mainProgram = "Rack";
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
of backing up the Right Way (encrypted, off-site, and regular) \
|
||||
and uses duplicity as the backend.
|
||||
'';
|
||||
homepage = "https://wiki.gnome.org/Apps/DejaDup";
|
||||
homepage = "https://apps.gnome.org/DejaDup/";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = with maintainers; [ jtojnar ];
|
||||
platforms = platforms.linux;
|
||||
|
@ -25,13 +25,13 @@
|
||||
|
||||
mkDerivation rec {
|
||||
pname = "bitcoin" + lib.optionalString (!withGui) "d" + "-abc";
|
||||
version = "0.29.2";
|
||||
version = "0.29.3";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "bitcoin-ABC";
|
||||
repo = "bitcoin-abc";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-og9hMQdDXGdUQN+A+z0064E6svF+qPd9CWtDQsdvNYQ=";
|
||||
hash = "sha256-hYA0O7nDT8J1EnpW4i1+eBzkNw77JC6M7GwO3BdBh3U=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ pkg-config cmake ];
|
||||
|
@ -6,16 +6,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "lnd";
|
||||
version = "0.17.4-beta";
|
||||
version = "0.17.5-beta";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "lightningnetwork";
|
||||
repo = "lnd";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-O6cGK4UMKrZpYqtghjjqqLBStLG5GEi/Q5liR557I8s=";
|
||||
hash = "sha256-q/mzF6LPW/ThgqfGgjtax8GvoC3JEpg0IetfSTo1XYk=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-eaQmM5bfsUmzTiUALX543VBQRJK+TqW2i28npwSrn3Q=";
|
||||
vendorHash = "sha256-unT0zJrOEmKHpoUsrBHKfn5IziGlaqEtMfkeo/74Rfc=";
|
||||
|
||||
subPackages = [ "cmd/lncli" "cmd/lnd" ];
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
, gperf
|
||||
, libmicrohttpd
|
||||
, libsodium
|
||||
, lz4
|
||||
, openssl
|
||||
, readline
|
||||
, secp256k1
|
||||
@ -16,13 +17,13 @@
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ton";
|
||||
version = "2024.03";
|
||||
version = "2024.04";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "ton-blockchain";
|
||||
repo = "ton";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-AVg33aZAyedmNIFqQJm4Nn6luLxK4mKgnIRmNU7j2C0=";
|
||||
hash = "sha256-hh8D4IZX6RS/RXdhVONhgetqp89kpTC2IwDQ2KHdKsE=";
|
||||
fetchSubmodules = true;
|
||||
};
|
||||
|
||||
@ -38,6 +39,7 @@ stdenv.mkDerivation rec {
|
||||
gperf
|
||||
libmicrohttpd
|
||||
libsodium
|
||||
lz4
|
||||
openssl
|
||||
readline
|
||||
secp256k1
|
||||
|
@ -16,9 +16,8 @@
|
||||
let
|
||||
inherit (melpaStablePackages) tree-sitter-langs;
|
||||
|
||||
libSuffix = if stdenv.isDarwin then "dylib" else "so";
|
||||
langName = g: lib.removeSuffix "-grammar" (lib.removePrefix "tree-sitter-" g.pname);
|
||||
soName = g: langName g + "." + libSuffix;
|
||||
soName = g: langName g + stdenv.hostPlatform.extensions.sharedLibrary;
|
||||
|
||||
grammarDir = runCommand "emacs-tree-sitter-grammars" {
|
||||
# Fake same version number as upstream language bundle to prevent triggering runtime downloads
|
||||
|
@ -176,7 +176,7 @@ stdenv.mkDerivation rec {
|
||||
currently recommend running gnome-builder inside a nix-shell with
|
||||
appropriate dependencies loaded.
|
||||
'';
|
||||
homepage = "https://wiki.gnome.org/Apps/Builder";
|
||||
homepage = "https://apps.gnome.org/Builder/";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = teams.gnome.members;
|
||||
platforms = platforms.linux;
|
||||
|
@ -1,22 +1,21 @@
|
||||
{ lib
|
||||
, vscode-utils }:
|
||||
{ lib, vscode-utils }:
|
||||
|
||||
let
|
||||
inherit (vscode-utils) buildVscodeMarketplaceExtension;
|
||||
in
|
||||
buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-wakatime";
|
||||
publisher = "WakaTime";
|
||||
version = "18.0.5";
|
||||
hash = "sha256-vWqGxMbxKqd4UgKK0sOKadMTDf6Y3TQxfWsc93MHjFs=";
|
||||
};
|
||||
buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-wakatime";
|
||||
publisher = "WakaTime";
|
||||
version = "18.0.5";
|
||||
hash = "sha256-vWqGxMbxKqd4UgKK0sOKadMTDf6Y3TQxfWsc93MHjFs=";
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = ''
|
||||
Visual Studio Code plugin for automatic time tracking and metrics generated
|
||||
from your programming activity
|
||||
'';
|
||||
license = lib.licenses.bsd3;
|
||||
};
|
||||
}
|
||||
meta = {
|
||||
description = ''
|
||||
Visual Studio Code plugin for automatic time tracking and metrics generated
|
||||
from your programming activity
|
||||
'';
|
||||
license = lib.licenses.bsd3;
|
||||
};
|
||||
}
|
||||
|
@ -1,11 +1,19 @@
|
||||
{ lib, stdenv, vscode-utils, callPackage }:
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
vscode-utils,
|
||||
callPackage,
|
||||
}:
|
||||
let
|
||||
version = "1.50.0";
|
||||
rescript-editor-analysis = callPackage ./rescript-editor-analysis.nix { inherit version; };
|
||||
arch =
|
||||
if stdenv.isLinux then "linux"
|
||||
else if stdenv.isDarwin then "darwin"
|
||||
else throw "Unsupported system: ${stdenv.system}";
|
||||
if stdenv.isLinux then
|
||||
"linux"
|
||||
else if stdenv.isDarwin then
|
||||
"darwin"
|
||||
else
|
||||
throw "Unsupported system: ${stdenv.system}";
|
||||
analysisDir = "server/analysis_binaries/${arch}";
|
||||
in
|
||||
vscode-utils.buildVscodeMarketplaceExtension rec {
|
||||
@ -23,7 +31,10 @@ vscode-utils.buildVscodeMarketplaceExtension rec {
|
||||
meta = {
|
||||
description = "The official VSCode plugin for ReScript";
|
||||
homepage = "https://github.com/rescript-lang/rescript-vscode";
|
||||
maintainers = [ lib.maintainers.dlip lib.maintainers.jayesh-bhoot ];
|
||||
maintainers = [
|
||||
lib.maintainers.dlip
|
||||
lib.maintainers.jayesh-bhoot
|
||||
];
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
}
|
||||
|
@ -1,4 +1,13 @@
|
||||
{ lib, stdenv, fetchFromGitHub, bash, ocaml, ocamlPackages, dune_3, version }:
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
bash,
|
||||
ocaml,
|
||||
ocamlPackages,
|
||||
dune_3,
|
||||
version,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "rescript-editor-analysis";
|
||||
@ -11,7 +20,11 @@ stdenv.mkDerivation {
|
||||
hash = "sha256-+Ht8qWwxtFWHFMiV/aoZIs2S3SxkOWgdwSKN+akp/LU=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ ocaml dune_3 ocamlPackages.cppo ];
|
||||
nativeBuildInputs = [
|
||||
ocaml
|
||||
dune_3
|
||||
ocamlPackages.cppo
|
||||
];
|
||||
|
||||
# Skip testing phases because they need to download and install node modules
|
||||
postPatch = ''
|
||||
@ -28,7 +41,10 @@ stdenv.mkDerivation {
|
||||
meta = {
|
||||
description = "Analysis binary for the ReScript VSCode plugin";
|
||||
homepage = "https://github.com/rescript-lang/rescript-vscode";
|
||||
maintainers = [ lib.maintainers.dlip lib.maintainers.jayesh-bhoot ];
|
||||
maintainers = [
|
||||
lib.maintainers.dlip
|
||||
lib.maintainers.jayesh-bhoot
|
||||
];
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
}
|
||||
|
@ -1,8 +1,9 @@
|
||||
{ graphviz
|
||||
, jre
|
||||
, lib
|
||||
, makeWrapper
|
||||
, vscode-utils
|
||||
{
|
||||
graphviz,
|
||||
jre,
|
||||
lib,
|
||||
makeWrapper,
|
||||
vscode-utils,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension rec {
|
||||
@ -13,13 +14,9 @@ vscode-utils.buildVscodeMarketplaceExtension rec {
|
||||
hash = "sha256-TvApcBBI+Egu7t4tJuEYTs6mhvABOY2eXVb57O4gWfs=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
makeWrapper
|
||||
];
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
buildInputs = [
|
||||
graphviz
|
||||
];
|
||||
buildInputs = [ graphviz ];
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/share/vscode/extensions/contextmapper.context-mapper-vscode-extension/lsp/bin/context-mapper-lsp \
|
||||
|
@ -970,7 +970,7 @@ let
|
||||
version = "0.8.25";
|
||||
}
|
||||
// sources.${stdenv.system};
|
||||
nativeBuildInputs = [ autoPatchelfHook ];
|
||||
nativeBuildInputs = lib.optionals stdenv.isLinux [ autoPatchelfHook ];
|
||||
buildInputs = [ stdenv.cc.cc.lib ];
|
||||
meta = {
|
||||
description = "Open-source autopilot for software development - bring the power of ChatGPT to your IDE";
|
||||
@ -3446,6 +3446,8 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
reditorsupport.r = callPackage ./reditorsupport.r { };
|
||||
|
||||
reloadedextensions.reloaded-cpp = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "reloaded-cpp";
|
||||
@ -3514,8 +3516,8 @@ let
|
||||
mktplcRef = {
|
||||
name = "wikitext";
|
||||
publisher = "RoweWilsonFrederiskHolme";
|
||||
version = "3.8.0";
|
||||
sha256 = "30540a85163e797028eec9bc3db1866bbf473e98615bf6ade6d1d672017ebe52";
|
||||
version = "3.8.1";
|
||||
hash = "sha256-piwS3SPjx10nsjN5axC+EN0MEDf0r2lVFllqQzciOfc=";
|
||||
};
|
||||
meta = {
|
||||
description = "Extension that helps users view and write MediaWiki's Wikitext files";
|
||||
@ -4571,6 +4573,22 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
vue.volar = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "volar";
|
||||
publisher = "Vue";
|
||||
version = "2.0.16";
|
||||
hash = "sha256-RTBbF7qahYP4L7SZ/5aCM/e5crZAyyPRcgL48FVL1jk=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://github.com/vuejs/language-tools/blob/master/CHANGELOG.md";
|
||||
description = "The official Vue VSCode extension";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=Vue.volar";
|
||||
homepage = "https://github.com/vuejs/language-tools";
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
};
|
||||
|
||||
vspacecode.whichkey = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "whichkey";
|
||||
@ -4583,6 +4601,22 @@ let
|
||||
};
|
||||
};
|
||||
|
||||
vue.vscode-typescript-vue-plugin = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-typescript-vue-plugin";
|
||||
publisher = "Vue";
|
||||
version = "1.8.27";
|
||||
hash = "sha256-ym1+WPKBcn4h9lqSFVehfiDoGUEviOSEVXVLhHcYvfc=";
|
||||
};
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/Vue.vscode-typescript-vue-plugin/changelog";
|
||||
description = "Vue VSCode extension for TypeScript";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin";
|
||||
homepage = "https://github.com/vuejs/language-tools";
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
};
|
||||
|
||||
waderyan.gitblame = buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "gitblame";
|
||||
|
@ -1,6 +1,4 @@
|
||||
{ lib
|
||||
, vscode-utils
|
||||
}:
|
||||
{ lib, vscode-utils }:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
|
@ -1,4 +1,8 @@
|
||||
{ lib, vscode-utils, terraform-ls }:
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
terraform-ls,
|
||||
}:
|
||||
vscode-utils.buildVscodeMarketplaceExtension rec {
|
||||
mktplcRef = {
|
||||
name = "terraform";
|
||||
|
@ -1,4 +1,10 @@
|
||||
{ lib, vscode-utils, plantuml, jq, moreutils }:
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
plantuml,
|
||||
jq,
|
||||
moreutils,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
@ -7,7 +13,10 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
version = "2.17.4";
|
||||
hash = "sha256-fnz6ubB73i7rJcv+paYyNV1r4cReuyFPjgPM0HO40ug=";
|
||||
};
|
||||
nativeBuildInputs = [ jq moreutils ];
|
||||
nativeBuildInputs = [
|
||||
jq
|
||||
moreutils
|
||||
];
|
||||
postInstall = ''
|
||||
cd "$out/$installPrefix"
|
||||
jq '.contributes.configuration.properties."plantuml.java".default = "${plantuml}/bin/plantuml"' package.json | sponge package.json
|
||||
@ -15,13 +24,10 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
|
||||
meta = {
|
||||
description = "A Visual Studio Code extension for supporting Rich PlantUML";
|
||||
downloadPage =
|
||||
"https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=jebbs.plantuml";
|
||||
homepage = "https://github.com/qjebbs/vscode-plantuml";
|
||||
changelog =
|
||||
"https://marketplace.visualstudio.com/items/jebbs.plantuml/changelog";
|
||||
changelog = "https://marketplace.visualstudio.com/items/jebbs.plantuml/changelog";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.victormignot ];
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,12 @@ with vscode-utils;
|
||||
|
||||
let
|
||||
|
||||
buildVscodeLanguagePack = { language, version ? "1.76.2023030809", sha256 }:
|
||||
buildVscodeLanguagePack =
|
||||
{
|
||||
language,
|
||||
version ? "1.76.2023030809",
|
||||
sha256,
|
||||
}:
|
||||
buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "vscode-language-pack-${language}";
|
||||
@ -15,7 +20,6 @@ let
|
||||
license = lib.licenses.mit;
|
||||
};
|
||||
};
|
||||
|
||||
in
|
||||
|
||||
# See list of core language packs at https://github.com/Microsoft/vscode-loc
|
||||
|
@ -1,4 +1,11 @@
|
||||
{ publisher, name, version, arch ? "", sha256 ? "", hash ? "" }:
|
||||
{
|
||||
publisher,
|
||||
name,
|
||||
version,
|
||||
arch ? "",
|
||||
sha256 ? "",
|
||||
hash ? "",
|
||||
}:
|
||||
let
|
||||
archurl = (if arch == "" then "" else "?targetPlatform=${arch}");
|
||||
in
|
||||
|
@ -1,56 +1,59 @@
|
||||
{ lib
|
||||
, icu
|
||||
, openssl
|
||||
, patchelf
|
||||
, stdenv
|
||||
, vscode-utils
|
||||
{
|
||||
lib,
|
||||
icu,
|
||||
openssl,
|
||||
patchelf,
|
||||
stdenv,
|
||||
vscode-utils,
|
||||
}:
|
||||
let
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
inherit (vscode-utils) buildVscodeMarketplaceExtension;
|
||||
|
||||
extInfo = {
|
||||
x86_64-linux = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-7m85Zl9oV40le3nkNPzoKu/AAf8XhQpI8sBMsQXmBg8=";
|
||||
binaries = [
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/servicehub-controller-net60.linux-x64/Microsoft.ServiceHub.Controller"
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-code-servicehost.linux-x64/Microsoft.VisualStudio.Code.ServiceHost"
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-reliability-monitor.linux-x64/Microsoft.VisualStudio.Reliability.Monitor"
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-server.linux-x64/Microsoft.VisualStudio.Code.Server"
|
||||
];
|
||||
};
|
||||
aarch64-linux = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-39D55EdwE4baDYbHc9GD/1XoxGbQkUkS1H2uysJHlxw=";
|
||||
binaries = [
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/servicehub-controller-net60.linux-arm64/Microsoft.ServiceHub.Controller"
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-code-servicehost.linux-arm64/Microsoft.VisualStudio.Code.ServiceHost"
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-reliability-monitor.linux-arm64/Microsoft.VisualStudio.Reliability.Monitor"
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-server.linux-arm64/Microsoft.VisualStudio.Code.Server"
|
||||
];
|
||||
};
|
||||
x86_64-darwin = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-gfhJX07R+DIw9FbzaEE0JZwEmDeifiq4vHyMHZZ1udM=";
|
||||
binaries = [
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/servicehub-controller-net60.darwin-x64/Microsoft.ServiceHub.Controller"
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-code-servicehost.darwin-x64/Microsoft.VisualStudio.Code.ServiceHost"
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-reliability-monitor.darwin-x64/Microsoft.VisualStudio.Reliability.Monitor"
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-server.darwin-x64/Microsoft.VisualStudio.Code.Server"
|
||||
];
|
||||
};
|
||||
aarch64-darwin = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-vogstgCWvI9csNF9JfJ41XPR1POy842g2yhWqIDoHLw=";
|
||||
binaries = [
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/servicehub-controller-net60.darwin-arm64/Microsoft.ServiceHub.Controller"
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-code-servicehost.darwin-arm64/Microsoft.VisualStudio.Code.ServiceHost"
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-reliability-monitor.darwin-arm64/Microsoft.VisualStudio.Reliability.Monitor"
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-server.darwin-arm64/Microsoft.VisualStudio.Code.Server"
|
||||
];
|
||||
};
|
||||
}.${system} or (throw "Unsupported system: ${system}");
|
||||
extInfo =
|
||||
{
|
||||
x86_64-linux = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-7m85Zl9oV40le3nkNPzoKu/AAf8XhQpI8sBMsQXmBg8=";
|
||||
binaries = [
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/servicehub-controller-net60.linux-x64/Microsoft.ServiceHub.Controller"
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-code-servicehost.linux-x64/Microsoft.VisualStudio.Code.ServiceHost"
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-reliability-monitor.linux-x64/Microsoft.VisualStudio.Reliability.Monitor"
|
||||
"components/vs-green-server/platforms/linux-x64/node_modules/@microsoft/visualstudio-server.linux-x64/Microsoft.VisualStudio.Code.Server"
|
||||
];
|
||||
};
|
||||
aarch64-linux = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-39D55EdwE4baDYbHc9GD/1XoxGbQkUkS1H2uysJHlxw=";
|
||||
binaries = [
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/servicehub-controller-net60.linux-arm64/Microsoft.ServiceHub.Controller"
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-code-servicehost.linux-arm64/Microsoft.VisualStudio.Code.ServiceHost"
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-reliability-monitor.linux-arm64/Microsoft.VisualStudio.Reliability.Monitor"
|
||||
"components/vs-green-server/platforms/linux-arm64/node_modules/@microsoft/visualstudio-server.linux-arm64/Microsoft.VisualStudio.Code.Server"
|
||||
];
|
||||
};
|
||||
x86_64-darwin = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-gfhJX07R+DIw9FbzaEE0JZwEmDeifiq4vHyMHZZ1udM=";
|
||||
binaries = [
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/servicehub-controller-net60.darwin-x64/Microsoft.ServiceHub.Controller"
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-code-servicehost.darwin-x64/Microsoft.VisualStudio.Code.ServiceHost"
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-reliability-monitor.darwin-x64/Microsoft.VisualStudio.Reliability.Monitor"
|
||||
"components/vs-green-server/platforms/darwin-x64/node_modules/@microsoft/visualstudio-server.darwin-x64/Microsoft.VisualStudio.Code.Server"
|
||||
];
|
||||
};
|
||||
aarch64-darwin = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-vogstgCWvI9csNF9JfJ41XPR1POy842g2yhWqIDoHLw=";
|
||||
binaries = [
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/servicehub-controller-net60.darwin-arm64/Microsoft.ServiceHub.Controller"
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-code-servicehost.darwin-arm64/Microsoft.VisualStudio.Code.ServiceHost"
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-reliability-monitor.darwin-arm64/Microsoft.VisualStudio.Reliability.Monitor"
|
||||
"components/vs-green-server/platforms/darwin-arm64/node_modules/@microsoft/visualstudio-server.darwin-arm64/Microsoft.VisualStudio.Code.Server"
|
||||
];
|
||||
};
|
||||
}
|
||||
.${system} or (throw "Unsupported system: ${system}");
|
||||
in
|
||||
buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
@ -61,50 +64,55 @@ buildVscodeMarketplaceExtension {
|
||||
};
|
||||
sourceRoot = "extension"; # This has more than one folder.
|
||||
|
||||
nativeBuildInputs = [
|
||||
patchelf
|
||||
];
|
||||
nativeBuildInputs = [ patchelf ];
|
||||
|
||||
postPatch = ''
|
||||
declare ext_unique_id
|
||||
ext_unique_id="$(basename "$out" | head -c 32)"
|
||||
postPatch =
|
||||
''
|
||||
declare ext_unique_id
|
||||
ext_unique_id="$(basename "$out" | head -c 32)"
|
||||
|
||||
patchelf_add_icu_as_needed() {
|
||||
declare elf="''${1?}"
|
||||
declare icu_major_v="${
|
||||
lib.head (lib.splitVersion (lib.getVersion icu.name))
|
||||
}"
|
||||
patchelf_add_icu_as_needed() {
|
||||
declare elf="''${1?}"
|
||||
declare icu_major_v="${lib.head (lib.splitVersion (lib.getVersion icu.name))}"
|
||||
|
||||
for icu_lib in icui18n icuuc icudata; do
|
||||
patchelf --add-needed "lib''${icu_lib}.so.$icu_major_v" "$elf"
|
||||
done
|
||||
}
|
||||
for icu_lib in icui18n icuuc icudata; do
|
||||
patchelf --add-needed "lib''${icu_lib}.so.$icu_major_v" "$elf"
|
||||
done
|
||||
}
|
||||
|
||||
patchelf_common() {
|
||||
declare elf="''${1?}"
|
||||
patchelf_common() {
|
||||
declare elf="''${1?}"
|
||||
|
||||
patchelf_add_icu_as_needed "$elf"
|
||||
patchelf --add-needed "libssl.so" "$elf"
|
||||
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath "${lib.makeLibraryPath [stdenv.cc.cc openssl icu.out]}:\$ORIGIN" \
|
||||
"$elf"
|
||||
}
|
||||
patchelf_add_icu_as_needed "$elf"
|
||||
patchelf --add-needed "libssl.so" "$elf"
|
||||
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath "${
|
||||
lib.makeLibraryPath [
|
||||
stdenv.cc.cc
|
||||
openssl
|
||||
icu.out
|
||||
]
|
||||
}:\$ORIGIN" \
|
||||
"$elf"
|
||||
}
|
||||
|
||||
substituteInPlace dist/extension.js \
|
||||
--replace 'e.extensionPath,"cache"' 'require("os").tmpdir(),"'"$ext_unique_id"'"' \
|
||||
--replace 't.setExecuteBit=async function(e){if("win32"!==process.platform){const t=i.join(e[a.SERVICEHUB_CONTROLLER_COMPONENT_NAME],"Microsoft.ServiceHub.Controller"),n=i.join(e[a.SERVICEHUB_HOST_COMPONENT_NAME],(0,a.getServiceHubHostEntrypointName)()),r=[(0,a.getServerPath)(e),t,n,(0,c.getReliabilityMonitorPath)(e)];await Promise.all(r.map((e=>(0,o.chmod)(e,"0755"))))}}' 't.setExecuteBit=async function(e){}'
|
||||
substituteInPlace dist/extension.js \
|
||||
--replace 'e.extensionPath,"cache"' 'require("os").tmpdir(),"'"$ext_unique_id"'"' \
|
||||
--replace 't.setExecuteBit=async function(e){if("win32"!==process.platform){const t=i.join(e[a.SERVICEHUB_CONTROLLER_COMPONENT_NAME],"Microsoft.ServiceHub.Controller"),n=i.join(e[a.SERVICEHUB_HOST_COMPONENT_NAME],(0,a.getServiceHubHostEntrypointName)()),r=[(0,a.getServerPath)(e),t,n,(0,c.getReliabilityMonitorPath)(e)];await Promise.all(r.map((e=>(0,o.chmod)(e,"0755"))))}}' 't.setExecuteBit=async function(e){}'
|
||||
|
||||
''
|
||||
+ (lib.concatStringsSep "\n" (map
|
||||
(bin: ''
|
||||
chmod +x "${bin}"
|
||||
'')
|
||||
extInfo.binaries))
|
||||
+ lib.optionalString stdenv.isLinux (lib.concatStringsSep "\n" (map
|
||||
(bin: ''
|
||||
patchelf_common "${bin}"
|
||||
'')
|
||||
extInfo.binaries));
|
||||
''
|
||||
+ (lib.concatStringsSep "\n" (
|
||||
map (bin: ''
|
||||
chmod +x "${bin}"
|
||||
'') extInfo.binaries
|
||||
))
|
||||
+ lib.optionalString stdenv.isLinux (
|
||||
lib.concatStringsSep "\n" (
|
||||
map (bin: ''
|
||||
patchelf_common "${bin}"
|
||||
'') extInfo.binaries
|
||||
)
|
||||
);
|
||||
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/ms-dotnettools.csdevkit/changelog";
|
||||
@ -112,6 +120,11 @@ buildVscodeMarketplaceExtension {
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csdevkit";
|
||||
license = lib.licenses.unfree;
|
||||
maintainers = [ lib.maintainers.ggg ];
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
{ lib
|
||||
, vscode-utils
|
||||
, patchelf
|
||||
, icu
|
||||
, stdenv
|
||||
, openssl
|
||||
, coreutils
|
||||
,
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
patchelf,
|
||||
icu,
|
||||
stdenv,
|
||||
openssl,
|
||||
coreutils,
|
||||
}:
|
||||
let
|
||||
inherit (stdenv.hostPlatform) system;
|
||||
@ -26,31 +26,32 @@ let
|
||||
".debugger/x86_64/vsdbg"
|
||||
];
|
||||
in
|
||||
{
|
||||
x86_64-linux = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-si4HKGVIHu44QNlNI2WEnMff9+QZOMWiBfWQaaFGyQE=";
|
||||
binaries = linuxBins;
|
||||
};
|
||||
aarch64-linux = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-1IXkSRgCHOLD4VeCdqyy54MXCBUX5RDDb3pf7GQH5jA=";
|
||||
binaries = linuxBins;
|
||||
};
|
||||
x86_64-darwin = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-AAbYjZ+YYyGEXSLkiFfluLf7P4OzPhmHzK44N5XT9UI=";
|
||||
binaries = darwinBins;
|
||||
};
|
||||
aarch64-darwin = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-1m47kX0Jo+UvthNfgdoPdBBOcDyCA8DfP+zRk3SicR0=";
|
||||
binaries = darwinBins ++ [
|
||||
".debugger/arm64/vsdbg-ui"
|
||||
".debugger/arm64/vsdbg"
|
||||
];
|
||||
};
|
||||
}.${system} or (throw "Unsupported system: ${system}");
|
||||
{
|
||||
x86_64-linux = {
|
||||
arch = "linux-x64";
|
||||
hash = "sha256-si4HKGVIHu44QNlNI2WEnMff9+QZOMWiBfWQaaFGyQE=";
|
||||
binaries = linuxBins;
|
||||
};
|
||||
aarch64-linux = {
|
||||
arch = "linux-arm64";
|
||||
hash = "sha256-1IXkSRgCHOLD4VeCdqyy54MXCBUX5RDDb3pf7GQH5jA=";
|
||||
binaries = linuxBins;
|
||||
};
|
||||
x86_64-darwin = {
|
||||
arch = "darwin-x64";
|
||||
hash = "sha256-AAbYjZ+YYyGEXSLkiFfluLf7P4OzPhmHzK44N5XT9UI=";
|
||||
binaries = darwinBins;
|
||||
};
|
||||
aarch64-darwin = {
|
||||
arch = "darwin-arm64";
|
||||
hash = "sha256-1m47kX0Jo+UvthNfgdoPdBBOcDyCA8DfP+zRk3SicR0=";
|
||||
binaries = darwinBins ++ [
|
||||
".debugger/arm64/vsdbg-ui"
|
||||
".debugger/arm64/vsdbg"
|
||||
];
|
||||
};
|
||||
}
|
||||
.${system} or (throw "Unsupported system: ${system}");
|
||||
in
|
||||
buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
@ -60,16 +61,13 @@ buildVscodeMarketplaceExtension {
|
||||
inherit (extInfo) hash arch;
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
patchelf
|
||||
];
|
||||
nativeBuildInputs = [ patchelf ];
|
||||
|
||||
postPatch = ''
|
||||
postPatch =
|
||||
''
|
||||
patchelf_add_icu_as_needed() {
|
||||
declare elf="''${1?}"
|
||||
declare icu_major_v="${
|
||||
lib.head (lib.splitVersion (lib.getVersion icu.name))
|
||||
}"
|
||||
declare icu_major_v="${lib.head (lib.splitVersion (lib.getVersion icu.name))}"
|
||||
|
||||
for icu_lib in icui18n icuuc icudata; do
|
||||
patchelf --add-needed "lib''${icu_lib}.so.$icu_major_v" "$elf"
|
||||
@ -82,7 +80,13 @@ buildVscodeMarketplaceExtension {
|
||||
patchelf_add_icu_as_needed "$elf"
|
||||
patchelf --add-needed "libssl.so" "$elf"
|
||||
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath "${lib.makeLibraryPath [stdenv.cc.cc openssl icu.out]}:\$ORIGIN" \
|
||||
--set-rpath "${
|
||||
lib.makeLibraryPath [
|
||||
stdenv.cc.cc
|
||||
openssl
|
||||
icu.out
|
||||
]
|
||||
}:\$ORIGIN" \
|
||||
"$elf"
|
||||
}
|
||||
|
||||
@ -90,22 +94,29 @@ buildVscodeMarketplaceExtension {
|
||||
--replace 'uname -m' '${lib.getExe' coreutils "uname"} -m'
|
||||
|
||||
''
|
||||
+ (lib.concatStringsSep "\n" (map
|
||||
(bin: ''
|
||||
+ (lib.concatStringsSep "\n" (
|
||||
map (bin: ''
|
||||
chmod +x "${bin}"
|
||||
'')
|
||||
extInfo.binaries))
|
||||
+ lib.optionalString stdenv.isLinux (lib.concatStringsSep "\n" (map
|
||||
(bin: ''
|
||||
patchelf_common "${bin}"
|
||||
'')
|
||||
extInfo.binaries));
|
||||
'') extInfo.binaries
|
||||
))
|
||||
+ lib.optionalString stdenv.isLinux (
|
||||
lib.concatStringsSep "\n" (
|
||||
map (bin: ''
|
||||
patchelf_common "${bin}"
|
||||
'') extInfo.binaries
|
||||
)
|
||||
);
|
||||
|
||||
meta = {
|
||||
description = "Official C# support for Visual Studio Code";
|
||||
homepage = "https://github.com/dotnet/vscode-csharp";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = with lib.maintainers; [ ggg ];
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
"x86_64-darwin"
|
||||
"aarch64-darwin"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@ -1,19 +1,20 @@
|
||||
{ lib
|
||||
, vscode-utils
|
||||
, icu
|
||||
, python3
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
icu,
|
||||
python3,
|
||||
# When `true`, the python default setting will be fixed to specified.
|
||||
# Use version from `PATH` for default setting otherwise.
|
||||
# Defaults to `false` as we expect it to be project specific most of the time.
|
||||
, pythonUseFixed ? false
|
||||
pythonUseFixed ? false,
|
||||
# For updateScript
|
||||
, writeScript
|
||||
, bash
|
||||
, curl
|
||||
, coreutils
|
||||
, gnused
|
||||
, jq
|
||||
, nix
|
||||
writeScript,
|
||||
bash,
|
||||
curl,
|
||||
coreutils,
|
||||
gnused,
|
||||
jq,
|
||||
nix,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension rec {
|
||||
@ -33,33 +34,37 @@ vscode-utils.buildVscodeMarketplaceExtension rec {
|
||||
jedi-language-server
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
# remove bundled python deps and use libs from nixpkgs
|
||||
rm -r pythonFiles/lib
|
||||
mkdir -p pythonFiles/lib/python/
|
||||
ln -s ${python3.pkgs.debugpy}/lib/*/site-packages/debugpy pythonFiles/lib/python/
|
||||
buildPythonPath "$propagatedBuildInputs"
|
||||
for i in pythonFiles/*.py; do
|
||||
patchPythonScript "$i"
|
||||
done
|
||||
'' + lib.optionalString pythonUseFixed ''
|
||||
# Patch `packages.json` so that nix's *python* is used as default value for `python.pythonPath`.
|
||||
substituteInPlace "./package.json" \
|
||||
--replace "\"default\": \"python\"" "\"default\": \"${python3.interpreter}\""
|
||||
'';
|
||||
postPatch =
|
||||
''
|
||||
# remove bundled python deps and use libs from nixpkgs
|
||||
rm -r pythonFiles/lib
|
||||
mkdir -p pythonFiles/lib/python/
|
||||
ln -s ${python3.pkgs.debugpy}/lib/*/site-packages/debugpy pythonFiles/lib/python/
|
||||
buildPythonPath "$propagatedBuildInputs"
|
||||
for i in pythonFiles/*.py; do
|
||||
patchPythonScript "$i"
|
||||
done
|
||||
''
|
||||
+ lib.optionalString pythonUseFixed ''
|
||||
# Patch `packages.json` so that nix's *python* is used as default value for `python.pythonPath`.
|
||||
substituteInPlace "./package.json" \
|
||||
--replace "\"default\": \"python\"" "\"default\": \"${python3.interpreter}\""
|
||||
'';
|
||||
|
||||
passthru.updateScript = writeScript "update" ''
|
||||
#! ${bash}/bin/bash
|
||||
|
||||
set -eu -o pipefail
|
||||
|
||||
export PATH=${lib.makeBinPath [
|
||||
curl
|
||||
coreutils
|
||||
gnused
|
||||
jq
|
||||
nix
|
||||
]}
|
||||
export PATH=${
|
||||
lib.makeBinPath [
|
||||
curl
|
||||
coreutils
|
||||
gnused
|
||||
jq
|
||||
nix
|
||||
]
|
||||
}
|
||||
|
||||
api=$(curl -s 'https://marketplace.visualstudio.com/_apis/public/gallery/extensionquery' \
|
||||
-H 'accept: application/json;api-version=3.0-preview.1' \
|
||||
@ -82,7 +87,14 @@ vscode-utils.buildVscodeMarketplaceExtension rec {
|
||||
homepage = "https://github.com/Microsoft/vscode-python";
|
||||
changelog = "https://github.com/microsoft/vscode-python/releases";
|
||||
license = lib.licenses.mit;
|
||||
platforms = [ "x86_64-linux" "aarch64-darwin" "x86_64-darwin" ];
|
||||
maintainers = [ lib.maintainers.jraygauthier lib.maintainers.jfchevrette ];
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-darwin"
|
||||
"x86_64-darwin"
|
||||
];
|
||||
maintainers = [
|
||||
lib.maintainers.jraygauthier
|
||||
lib.maintainers.jfchevrette
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@ -1,4 +1,9 @@
|
||||
{ lib, vscode-utils, jq, moreutils }:
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
jq,
|
||||
moreutils,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
|
@ -1,7 +1,8 @@
|
||||
{ lib
|
||||
, nixosTests
|
||||
, vscode-utils
|
||||
, useLocalExtensions ? false
|
||||
{
|
||||
lib,
|
||||
nixosTests,
|
||||
vscode-utils,
|
||||
useLocalExtensions ? false,
|
||||
}:
|
||||
# Note that useLocalExtensions requires that vscode-server is not running
|
||||
# on host. If it is, you'll need to remove $HOME/.vscode-server,
|
||||
@ -92,7 +93,9 @@ buildVscodeMarketplaceExtension {
|
||||
--replace '# Start the server\n' '${patch}'
|
||||
'';
|
||||
|
||||
passthru.tests = { inherit (nixosTests) vscode-remote-ssh; };
|
||||
passthru.tests = {
|
||||
inherit (nixosTests) vscode-remote-ssh;
|
||||
};
|
||||
|
||||
meta = {
|
||||
description = "Use any remote machine with a SSH server as your development environment.";
|
||||
|
@ -1,8 +1,19 @@
|
||||
{ lib, vscode-utils
|
||||
, fetchurl, writeScript, runtimeShell
|
||||
, jq, clang-tools
|
||||
, gdbUseFixed ? true, gdb # The gdb default setting will be fixed to specified. Use version from `PATH` otherwise.
|
||||
, autoPatchelfHook, makeWrapper, stdenv, lttng-ust, libkrb5, zlib
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
fetchurl,
|
||||
writeScript,
|
||||
runtimeShell,
|
||||
jq,
|
||||
clang-tools,
|
||||
gdbUseFixed ? true,
|
||||
gdb, # The gdb default setting will be fixed to specified. Use version from `PATH` otherwise.
|
||||
autoPatchelfHook,
|
||||
makeWrapper,
|
||||
stdenv,
|
||||
lttng-ust,
|
||||
libkrb5,
|
||||
zlib,
|
||||
}:
|
||||
|
||||
/*
|
||||
@ -94,7 +105,13 @@ vscode-utils.buildVscodeMarketplaceExtension {
|
||||
description = "The C/C++ extension adds language support for C/C++ to Visual Studio Code, including features such as IntelliSense and debugging.";
|
||||
homepage = "https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools";
|
||||
license = lib.licenses.unfree;
|
||||
maintainers = [ lib.maintainers.jraygauthier lib.maintainers.stargate01 ];
|
||||
platforms = [ "x86_64-linux" "aarch64-linux" ];
|
||||
maintainers = [
|
||||
lib.maintainers.jraygauthier
|
||||
lib.maintainers.stargate01
|
||||
];
|
||||
platforms = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
@ -1,4 +1,8 @@
|
||||
{ lib, vscode-utils, xsel }:
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
xsel,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
|
@ -0,0 +1,42 @@
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
jq,
|
||||
moreutils,
|
||||
python311Packages,
|
||||
R,
|
||||
rPackages,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "r";
|
||||
publisher = "reditorsupport";
|
||||
version = "2.8.2";
|
||||
hash = "sha256-FPL/JjW452KRchcQ0iHXRJarZXvS3B8PvZhXjf3rMhQ=";
|
||||
};
|
||||
nativeBuildInputs = [
|
||||
jq
|
||||
moreutils
|
||||
];
|
||||
buildInputs = [
|
||||
python311Packages.radian
|
||||
R
|
||||
rPackages.languageserver
|
||||
];
|
||||
postInstall = ''
|
||||
cd "$out/$installPrefix"
|
||||
jq '.contributes.configuration.properties."r.rpath.mac".default = "${lib.getExe' R "R"}"' package.json | sponge package.json
|
||||
jq '.contributes.configuration.properties."r.rpath.linux".default = "${lib.getExe' R "R"}"' package.json | sponge package.json
|
||||
jq '.contributes.configuration.properties."r.rterm.mac".default = "${lib.getExe python311Packages.radian}"' package.json | sponge package.json
|
||||
jq '.contributes.configuration.properties."r.rterm.linux".default = "${lib.getExe python311Packages.radian}"' package.json | sponge package.json
|
||||
'';
|
||||
meta = {
|
||||
changelog = "https://marketplace.visualstudio.com/items/REditorSupport.r/changelog";
|
||||
description = "A Visual Studio Code extension for the R programming language";
|
||||
downloadPage = "https://marketplace.visualstudio.com/items?itemName=REditorSupport.r";
|
||||
homepage = "https://github.com/REditorSupport/vscode-R";
|
||||
license = lib.licenses.mit;
|
||||
maintainers = [ lib.maintainers.pandapip1 ];
|
||||
};
|
||||
}
|
@ -1,16 +1,17 @@
|
||||
{ lib
|
||||
, fetchFromGitHub
|
||||
, vscode-utils
|
||||
, jq
|
||||
, rust-analyzer
|
||||
, nodePackages
|
||||
, moreutils
|
||||
, esbuild
|
||||
, pkg-config
|
||||
, libsecret
|
||||
, stdenv
|
||||
, darwin
|
||||
, setDefaultServerPath ? true
|
||||
{
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
vscode-utils,
|
||||
jq,
|
||||
rust-analyzer,
|
||||
nodePackages,
|
||||
moreutils,
|
||||
esbuild,
|
||||
pkg-config,
|
||||
libsecret,
|
||||
stdenv,
|
||||
darwin,
|
||||
setDefaultServerPath ? true,
|
||||
}:
|
||||
|
||||
let
|
||||
@ -29,26 +30,32 @@ let
|
||||
hash = "sha256-Oj/RPMridKpYt3eRqUIPg9YNrj6npG8THIGuWjsamnE=";
|
||||
};
|
||||
|
||||
build-deps = nodePackages."rust-analyzer-build-deps-../../applications/editors/vscode/extensions/rust-lang.rust-analyzer/build-deps";
|
||||
build-deps =
|
||||
nodePackages."rust-analyzer-build-deps-../../applications/editors/vscode/extensions/rust-lang.rust-analyzer/build-deps";
|
||||
# FIXME: Making a new derivation to link `node_modules` and run `npm run package`
|
||||
# will cause a build failure.
|
||||
vsix = build-deps.override {
|
||||
src = "${src}/editors/code";
|
||||
outputs = [ "vsix" "out" ];
|
||||
outputs = [
|
||||
"vsix"
|
||||
"out"
|
||||
];
|
||||
|
||||
inherit releaseTag;
|
||||
|
||||
nativeBuildInputs = [
|
||||
jq
|
||||
moreutils
|
||||
esbuild
|
||||
# Required by `keytar`, which is a dependency of `vsce`.
|
||||
pkg-config
|
||||
libsecret
|
||||
] ++ lib.optionals stdenv.isDarwin [
|
||||
darwin.apple_sdk.frameworks.AppKit
|
||||
darwin.apple_sdk.frameworks.Security
|
||||
];
|
||||
nativeBuildInputs =
|
||||
[
|
||||
jq
|
||||
moreutils
|
||||
esbuild
|
||||
# Required by `keytar`, which is a dependency of `vsce`.
|
||||
pkg-config
|
||||
libsecret
|
||||
]
|
||||
++ lib.optionals stdenv.isDarwin [
|
||||
darwin.apple_sdk.frameworks.AppKit
|
||||
darwin.apple_sdk.frameworks.Security
|
||||
];
|
||||
|
||||
# Follows https://github.com/rust-lang/rust-analyzer/blob/41949748a6123fd6061eb984a47f4fe780525e63/xtask/src/dist.rs#L39-L65
|
||||
postRebuild = ''
|
||||
@ -65,7 +72,6 @@ let
|
||||
echo y | npx vsce package -o $vsix/${pname}.zip
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
vscode-utils.buildVscodeExtension {
|
||||
inherit version vsix;
|
||||
@ -75,7 +81,10 @@ vscode-utils.buildVscodeExtension {
|
||||
vscodeExtPublisher = publisher;
|
||||
vscodeExtName = pname;
|
||||
|
||||
nativeBuildInputs = lib.optionals setDefaultServerPath [ jq moreutils ];
|
||||
nativeBuildInputs = lib.optionals setDefaultServerPath [
|
||||
jq
|
||||
moreutils
|
||||
];
|
||||
|
||||
preInstall = lib.optionalString setDefaultServerPath ''
|
||||
jq '.contributes.configuration.properties."rust-analyzer.server.path".default = $s' \
|
||||
@ -86,9 +95,11 @@ vscode-utils.buildVscodeExtension {
|
||||
meta = {
|
||||
description = "An alternative rust language server to the RLS";
|
||||
homepage = "https://github.com/rust-lang/rust-analyzer";
|
||||
license = [ lib.licenses.mit lib.licenses.asl20 ];
|
||||
license = [
|
||||
lib.licenses.mit
|
||||
lib.licenses.asl20
|
||||
];
|
||||
maintainers = [ ];
|
||||
platforms = lib.platforms.all;
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
{ lib
|
||||
, vscode-utils
|
||||
, lua-language-server
|
||||
{
|
||||
lib,
|
||||
vscode-utils,
|
||||
lua-language-server,
|
||||
}:
|
||||
|
||||
vscode-utils.buildVscodeMarketplaceExtension {
|
||||
|
@ -1,39 +1,43 @@
|
||||
# Updates the vscode setting file base on a nix expression
|
||||
# should run from the workspace root.
|
||||
{ writeShellScriptBin
|
||||
, lib
|
||||
, jq
|
||||
{
|
||||
writeShellScriptBin,
|
||||
lib,
|
||||
jq,
|
||||
}:
|
||||
##User Input
|
||||
{ settings ? {}
|
||||
# if marked as true will create an empty json file if does not exist
|
||||
, createIfDoesNotExists ? true
|
||||
, vscodeSettingsFile ? ".vscode/settings.json"
|
||||
, userSettingsFolder ? ""
|
||||
, symlinkFromUserSetting ? false
|
||||
{
|
||||
settings ? { },
|
||||
# if marked as true will create an empty json file if does not exist
|
||||
createIfDoesNotExists ? true,
|
||||
vscodeSettingsFile ? ".vscode/settings.json",
|
||||
userSettingsFolder ? "",
|
||||
symlinkFromUserSetting ? false,
|
||||
}:
|
||||
let
|
||||
|
||||
updateVSCodeSettingsCmd = ''
|
||||
(
|
||||
echo 'updateSettings.nix: Updating ${vscodeSettingsFile}...'
|
||||
oldSettings=$(cat ${vscodeSettingsFile})
|
||||
echo $oldSettings' ${builtins.toJSON settings}' | ${jq}/bin/jq -s add > ${vscodeSettingsFile}
|
||||
)'';
|
||||
(
|
||||
echo 'updateSettings.nix: Updating ${vscodeSettingsFile}...'
|
||||
oldSettings=$(cat ${vscodeSettingsFile})
|
||||
echo $oldSettings' ${builtins.toJSON settings}' | ${jq}/bin/jq -s add > ${vscodeSettingsFile}
|
||||
)'';
|
||||
|
||||
createEmptySettingsCmd = ''mkdir -p .vscode && echo "{}" > ${vscodeSettingsFile}'';
|
||||
fileName = builtins.baseNameOf vscodeSettingsFile;
|
||||
symlinkFromUserSettingCmd = lib.optionalString symlinkFromUserSetting
|
||||
'' && mkdir -p "${userSettingsFolder}" && ln -sfv "$(pwd)/${vscodeSettingsFile}" "${userSettingsFolder}/" '';
|
||||
symlinkFromUserSettingCmd = lib.optionalString symlinkFromUserSetting ''&& mkdir -p "${userSettingsFolder}" && ln -sfv "$(pwd)/${vscodeSettingsFile}" "${userSettingsFolder}/" '';
|
||||
in
|
||||
|
||||
writeShellScriptBin ''vscodeNixUpdate-${lib.removeSuffix ".json" (fileName)}''
|
||||
(lib.optionalString (settings != {})
|
||||
(if createIfDoesNotExists then ''
|
||||
[ ! -f "${vscodeSettingsFile}" ] && ${createEmptySettingsCmd}
|
||||
${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
|
||||
''
|
||||
else ''[ -f "${vscodeSettingsFile}" ] && ${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
|
||||
''
|
||||
)
|
||||
writeShellScriptBin ''vscodeNixUpdate-${lib.removeSuffix ".json" (fileName)}'' (
|
||||
lib.optionalString (settings != { }) (
|
||||
if createIfDoesNotExists then
|
||||
''
|
||||
[ ! -f "${vscodeSettingsFile}" ] && ${createEmptySettingsCmd}
|
||||
${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
|
||||
''
|
||||
else
|
||||
''
|
||||
[ -f "${vscodeSettingsFile}" ] && ${updateVSCodeSettingsCmd} ${symlinkFromUserSettingCmd}
|
||||
''
|
||||
)
|
||||
)
|
||||
|
@ -1,5 +1,5 @@
|
||||
with import <nixpkgs>{};
|
||||
callPackage (import ./updateSettings.nix) {} {
|
||||
with import <nixpkgs> { };
|
||||
callPackage (import ./updateSettings.nix) { } {
|
||||
settings = {
|
||||
a = "fdsdf";
|
||||
};
|
||||
|
@ -1,5 +1,20 @@
|
||||
{ pkgs, lib, stdenv, fetchFromGitHub, runCommand, rustPlatform, makeWrapper, llvmPackages
|
||||
, buildNpmPackage, cmake, nodejs, unzip, python3, pkg-config, libsecret, darwin
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
runCommand,
|
||||
rustPlatform,
|
||||
makeWrapper,
|
||||
llvmPackages,
|
||||
buildNpmPackage,
|
||||
cmake,
|
||||
nodejs,
|
||||
unzip,
|
||||
python3,
|
||||
pkg-config,
|
||||
libsecret,
|
||||
darwin,
|
||||
}:
|
||||
assert lib.versionAtLeast python3.version "3.5";
|
||||
let
|
||||
@ -31,9 +46,7 @@ let
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
env = lib.optionalAttrs stdenv.isDarwin {
|
||||
NIX_LDFLAGS = "-llldb -lc++abi";
|
||||
};
|
||||
env = lib.optionalAttrs stdenv.isDarwin { NIX_LDFLAGS = "-llldb -lc++abi"; };
|
||||
|
||||
buildAndTestSubdir = "adapter";
|
||||
|
||||
@ -76,12 +89,15 @@ let
|
||||
pkg-config
|
||||
];
|
||||
|
||||
buildInputs = [
|
||||
libsecret
|
||||
] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
|
||||
Security
|
||||
AppKit
|
||||
]);
|
||||
buildInputs =
|
||||
[ libsecret ]
|
||||
++ lib.optionals stdenv.isDarwin (
|
||||
with darwin.apple_sdk.frameworks;
|
||||
[
|
||||
Security
|
||||
AppKit
|
||||
]
|
||||
);
|
||||
|
||||
dontNpmBuild = true;
|
||||
|
||||
@ -103,14 +119,25 @@ let
|
||||
"/Applications/Xcode.app/Contents/SharedFrameworks/LLDB.framework/Versions/A/Resources/debugserver"
|
||||
else
|
||||
"${lldb.out}/bin/lldb-server";
|
||||
|
||||
in stdenv.mkDerivation {
|
||||
in
|
||||
stdenv.mkDerivation {
|
||||
pname = "vscode-extension-${publisher}-${pname}";
|
||||
inherit src version vscodeExtUniqueId vscodeExtPublisher vscodeExtName;
|
||||
inherit
|
||||
src
|
||||
version
|
||||
vscodeExtUniqueId
|
||||
vscodeExtPublisher
|
||||
vscodeExtName
|
||||
;
|
||||
|
||||
installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}";
|
||||
|
||||
nativeBuildInputs = [ cmake nodejs unzip makeWrapper ];
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
nodejs
|
||||
unzip
|
||||
makeWrapper
|
||||
];
|
||||
|
||||
patches = [ ./cmake-build-extension-only.patch ];
|
||||
|
||||
@ -120,12 +147,14 @@ in stdenv.mkDerivation {
|
||||
--replace "1.9.2" ${version}
|
||||
'';
|
||||
|
||||
postConfigure = ''
|
||||
cp -r ${nodeDeps}/lib/node_modules .
|
||||
'' + lib.optionalString stdenv.isDarwin ''
|
||||
export HOME="$TMPDIR/home"
|
||||
mkdir $HOME
|
||||
'';
|
||||
postConfigure =
|
||||
''
|
||||
cp -r ${nodeDeps}/lib/node_modules .
|
||||
''
|
||||
+ lib.optionalString stdenv.isDarwin ''
|
||||
export HOME="$TMPDIR/home"
|
||||
mkdir $HOME
|
||||
'';
|
||||
|
||||
cmakeFlags = [
|
||||
# Do not append timestamp to version.
|
||||
|
@ -1,5 +1,9 @@
|
||||
# Patched lldb for Rust language support.
|
||||
{ fetchFromGitHub, runCommand, llvmPackages }:
|
||||
{
|
||||
fetchFromGitHub,
|
||||
runCommand,
|
||||
llvmPackages,
|
||||
}:
|
||||
let
|
||||
llvmSrc = fetchFromGitHub {
|
||||
owner = "vadimcn";
|
||||
@ -8,8 +12,9 @@ let
|
||||
rev = "4c267c83cbb55fedf2e0b89644dc1db320fdfde7";
|
||||
hash = "sha256-jM//ej6AxnRYj+8BAn4QrxHPT6HiDzK5RqHPSg3dCcw=";
|
||||
};
|
||||
in (llvmPackages.lldb.overrideAttrs (oldAttrs: rec {
|
||||
passthru = (oldAttrs.passthru or {}) // {
|
||||
in
|
||||
(llvmPackages.lldb.overrideAttrs (oldAttrs: rec {
|
||||
passthru = (oldAttrs.passthru or { }) // {
|
||||
inherit llvmSrc;
|
||||
};
|
||||
|
||||
@ -23,7 +28,8 @@ in (llvmPackages.lldb.overrideAttrs (oldAttrs: rec {
|
||||
echo "'lldb --version' returns: $versionOutput"
|
||||
echo "$versionOutput" | grep -q 'rust-enabled'
|
||||
'';
|
||||
})).override({
|
||||
monorepoSrc = llvmSrc;
|
||||
libllvm = llvmPackages.libllvm.override({ monorepoSrc = llvmSrc; });
|
||||
})
|
||||
})).override
|
||||
({
|
||||
monorepoSrc = llvmSrc;
|
||||
libllvm = llvmPackages.libllvm.override ({ monorepoSrc = llvmSrc; });
|
||||
})
|
||||
|
@ -1,77 +1,101 @@
|
||||
{ stdenv, lib, buildEnv, writeShellScriptBin, fetchurl, vscode, unzip, jq }:
|
||||
{
|
||||
stdenv,
|
||||
lib,
|
||||
buildEnv,
|
||||
writeShellScriptBin,
|
||||
fetchurl,
|
||||
vscode,
|
||||
unzip,
|
||||
jq,
|
||||
}:
|
||||
let
|
||||
buildVscodeExtension = a@{
|
||||
name,
|
||||
src,
|
||||
# Same as "Unique Identifier" on the extension's web page.
|
||||
# For the moment, only serve as unique extension dir.
|
||||
vscodeExtPublisher,
|
||||
vscodeExtName,
|
||||
vscodeExtUniqueId,
|
||||
configurePhase ? ''
|
||||
runHook preConfigure
|
||||
runHook postConfigure
|
||||
'',
|
||||
buildPhase ?''
|
||||
runHook preBuild
|
||||
runHook postBuild
|
||||
'',
|
||||
dontPatchELF ? true,
|
||||
dontStrip ? true,
|
||||
nativeBuildInputs ? [],
|
||||
passthru ? { },
|
||||
...
|
||||
}:
|
||||
stdenv.mkDerivation ((removeAttrs a [ "vscodeExtUniqueId" ]) // {
|
||||
buildVscodeExtension =
|
||||
a@{
|
||||
name,
|
||||
src,
|
||||
# Same as "Unique Identifier" on the extension's web page.
|
||||
# For the moment, only serve as unique extension dir.
|
||||
vscodeExtPublisher,
|
||||
vscodeExtName,
|
||||
vscodeExtUniqueId,
|
||||
configurePhase ? ''
|
||||
runHook preConfigure
|
||||
runHook postConfigure
|
||||
'',
|
||||
buildPhase ? ''
|
||||
runHook preBuild
|
||||
runHook postBuild
|
||||
'',
|
||||
dontPatchELF ? true,
|
||||
dontStrip ? true,
|
||||
nativeBuildInputs ? [ ],
|
||||
passthru ? { },
|
||||
...
|
||||
}:
|
||||
stdenv.mkDerivation (
|
||||
(removeAttrs a [ "vscodeExtUniqueId" ])
|
||||
// {
|
||||
|
||||
name = "vscode-extension-${name}";
|
||||
name = "vscode-extension-${name}";
|
||||
|
||||
passthru = passthru // {
|
||||
inherit vscodeExtPublisher vscodeExtName vscodeExtUniqueId;
|
||||
};
|
||||
passthru = passthru // {
|
||||
inherit vscodeExtPublisher vscodeExtName vscodeExtUniqueId;
|
||||
};
|
||||
|
||||
inherit configurePhase buildPhase dontPatchELF dontStrip;
|
||||
inherit
|
||||
configurePhase
|
||||
buildPhase
|
||||
dontPatchELF
|
||||
dontStrip
|
||||
;
|
||||
|
||||
# Some .vsix files contain other directories (e.g., `package`) that we don't use.
|
||||
# If other directories are present but `sourceRoot` is unset, the unpacker phase fails.
|
||||
sourceRoot = "extension";
|
||||
# Some .vsix files contain other directories (e.g., `package`) that we don't use.
|
||||
# If other directories are present but `sourceRoot` is unset, the unpacker phase fails.
|
||||
sourceRoot = "extension";
|
||||
|
||||
installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}";
|
||||
installPrefix = "share/vscode/extensions/${vscodeExtUniqueId}";
|
||||
|
||||
nativeBuildInputs = [ unzip ] ++ nativeBuildInputs;
|
||||
nativeBuildInputs = [ unzip ] ++ nativeBuildInputs;
|
||||
|
||||
installPhase = ''
|
||||
installPhase = ''
|
||||
|
||||
runHook preInstall
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p "$out/$installPrefix"
|
||||
find . -mindepth 1 -maxdepth 1 | xargs -d'\n' mv -t "$out/$installPrefix/"
|
||||
mkdir -p "$out/$installPrefix"
|
||||
find . -mindepth 1 -maxdepth 1 | xargs -d'\n' mv -t "$out/$installPrefix/"
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
);
|
||||
|
||||
});
|
||||
fetchVsixFromVscodeMarketplace =
|
||||
mktplcExtRef: fetchurl (import ./mktplcExtRefToFetchArgs.nix mktplcExtRef);
|
||||
|
||||
fetchVsixFromVscodeMarketplace = mktplcExtRef:
|
||||
fetchurl (import ./mktplcExtRefToFetchArgs.nix mktplcExtRef);
|
||||
|
||||
buildVscodeMarketplaceExtension = a@{
|
||||
name ? "",
|
||||
src ? null,
|
||||
vsix ? null,
|
||||
mktplcRef,
|
||||
...
|
||||
}: assert "" == name; assert null == src;
|
||||
buildVscodeExtension ((removeAttrs a [ "mktplcRef" "vsix" ]) // {
|
||||
name = "${mktplcRef.publisher}-${mktplcRef.name}-${mktplcRef.version}";
|
||||
version = mktplcRef.version;
|
||||
src = if (vsix != null)
|
||||
then vsix
|
||||
else fetchVsixFromVscodeMarketplace mktplcRef;
|
||||
vscodeExtPublisher = mktplcRef.publisher;
|
||||
vscodeExtName = mktplcRef.name;
|
||||
vscodeExtUniqueId = "${mktplcRef.publisher}.${mktplcRef.name}";
|
||||
});
|
||||
buildVscodeMarketplaceExtension =
|
||||
a@{
|
||||
name ? "",
|
||||
src ? null,
|
||||
vsix ? null,
|
||||
mktplcRef,
|
||||
...
|
||||
}:
|
||||
assert "" == name;
|
||||
assert null == src;
|
||||
buildVscodeExtension (
|
||||
(removeAttrs a [
|
||||
"mktplcRef"
|
||||
"vsix"
|
||||
])
|
||||
// {
|
||||
name = "${mktplcRef.publisher}-${mktplcRef.name}-${mktplcRef.version}";
|
||||
version = mktplcRef.version;
|
||||
src = if (vsix != null) then vsix else fetchVsixFromVscodeMarketplace mktplcRef;
|
||||
vscodeExtPublisher = mktplcRef.publisher;
|
||||
vscodeExtName = mktplcRef.name;
|
||||
vscodeExtUniqueId = "${mktplcRef.publisher}.${mktplcRef.name}";
|
||||
}
|
||||
);
|
||||
|
||||
mktplcRefAttrList = [
|
||||
"name"
|
||||
@ -82,14 +106,18 @@ let
|
||||
"arch"
|
||||
];
|
||||
|
||||
mktplcExtRefToExtDrv = ext:
|
||||
buildVscodeMarketplaceExtension (removeAttrs ext mktplcRefAttrList // {
|
||||
mktplcRef = builtins.intersectAttrs (lib.genAttrs mktplcRefAttrList (_: null)) ext;
|
||||
});
|
||||
mktplcExtRefToExtDrv =
|
||||
ext:
|
||||
buildVscodeMarketplaceExtension (
|
||||
removeAttrs ext mktplcRefAttrList
|
||||
// {
|
||||
mktplcRef = builtins.intersectAttrs (lib.genAttrs mktplcRefAttrList (_: null)) ext;
|
||||
}
|
||||
);
|
||||
|
||||
extensionFromVscodeMarketplace = mktplcExtRefToExtDrv;
|
||||
extensionsFromVscodeMarketplace = mktplcExtRefList:
|
||||
builtins.map extensionFromVscodeMarketplace mktplcExtRefList;
|
||||
extensionsFromVscodeMarketplace =
|
||||
mktplcExtRefList: builtins.map extensionFromVscodeMarketplace mktplcExtRefList;
|
||||
|
||||
vscodeWithConfiguration = import ./vscodeWithConfiguration.nix {
|
||||
inherit lib extensionsFromVscodeMarketplace writeShellScriptBin;
|
||||
@ -102,7 +130,13 @@ let
|
||||
};
|
||||
|
||||
vscodeEnv = import ./vscodeEnv.nix {
|
||||
inherit lib buildEnv writeShellScriptBin extensionsFromVscodeMarketplace jq;
|
||||
inherit
|
||||
lib
|
||||
buildEnv
|
||||
writeShellScriptBin
|
||||
extensionsFromVscodeMarketplace
|
||||
jq
|
||||
;
|
||||
vscodeDefault = vscode;
|
||||
};
|
||||
|
||||
@ -139,9 +173,16 @@ let
|
||||
toExtensionJson = extensions: builtins.toJSON (map toExtensionJsonEntry extensions);
|
||||
in
|
||||
{
|
||||
inherit fetchVsixFromVscodeMarketplace buildVscodeExtension
|
||||
buildVscodeMarketplaceExtension extensionFromVscodeMarketplace
|
||||
extensionsFromVscodeMarketplace
|
||||
vscodeWithConfiguration vscodeExts2nix vscodeEnv
|
||||
toExtensionJsonEntry toExtensionJson;
|
||||
inherit
|
||||
fetchVsixFromVscodeMarketplace
|
||||
buildVscodeExtension
|
||||
buildVscodeMarketplaceExtension
|
||||
extensionFromVscodeMarketplace
|
||||
extensionsFromVscodeMarketplace
|
||||
vscodeWithConfiguration
|
||||
vscodeExts2nix
|
||||
vscodeEnv
|
||||
toExtensionJsonEntry
|
||||
toExtensionJson
|
||||
;
|
||||
}
|
||||
|
@ -1,47 +1,58 @@
|
||||
#Use vscodeWithConfiguration and vscodeExts2nix to create a vscode executable. When the executable exits, it updates the mutable extension file, which is imported when evaluated by Nix later.
|
||||
{ lib
|
||||
, buildEnv
|
||||
, writeShellScriptBin
|
||||
, extensionsFromVscodeMarketplace
|
||||
, vscodeDefault
|
||||
, jq
|
||||
{
|
||||
lib,
|
||||
buildEnv,
|
||||
writeShellScriptBin,
|
||||
extensionsFromVscodeMarketplace,
|
||||
vscodeDefault,
|
||||
jq,
|
||||
}:
|
||||
##User input
|
||||
{ vscode ? vscodeDefault
|
||||
, nixExtensions ? []
|
||||
, vscodeExtsFolderName ? ".vscode-exts"
|
||||
# will add to the command updateSettings (which will run on executing vscode) settings to override in settings.json file
|
||||
, settings ? {}
|
||||
, createSettingsIfDoesNotExists ? true
|
||||
, launch ? {}
|
||||
, createLaunchIfDoesNotExists ? true
|
||||
# will add to the command updateKeybindings(which will run on executing vscode) keybindings to override in keybinding.json file
|
||||
, keybindings ? {}
|
||||
, createKeybindingsIfDoesNotExists ? true
|
||||
, user-data-dir ? ''"''${TMP}''${name}"/vscode-data-dir''
|
||||
# if file exists will use it and import the extensions in it into this derivation else will use empty extensions list
|
||||
# this file will be created/updated by vscodeExts2nix when vscode exists
|
||||
, mutableExtensionsFile
|
||||
{
|
||||
vscode ? vscodeDefault,
|
||||
nixExtensions ? [ ],
|
||||
vscodeExtsFolderName ? ".vscode-exts",
|
||||
# will add to the command updateSettings (which will run on executing vscode) settings to override in settings.json file
|
||||
settings ? { },
|
||||
createSettingsIfDoesNotExists ? true,
|
||||
launch ? { },
|
||||
createLaunchIfDoesNotExists ? true,
|
||||
# will add to the command updateKeybindings(which will run on executing vscode) keybindings to override in keybinding.json file
|
||||
keybindings ? { },
|
||||
createKeybindingsIfDoesNotExists ? true,
|
||||
user-data-dir ? ''"''${TMP}''${name}"/vscode-data-dir'',
|
||||
# if file exists will use it and import the extensions in it into this derivation else will use empty extensions list
|
||||
# this file will be created/updated by vscodeExts2nix when vscode exists
|
||||
mutableExtensionsFile,
|
||||
}:
|
||||
let
|
||||
mutableExtensionsFilePath = toString mutableExtensionsFile;
|
||||
mutableExtensions = lib.optionals (builtins.pathExists mutableExtensionsFile) (import mutableExtensionsFilePath);
|
||||
vscodeWithConfiguration = import ./vscodeWithConfiguration.nix {
|
||||
inherit lib writeShellScriptBin extensionsFromVscodeMarketplace;
|
||||
vscodeDefault = vscode;
|
||||
}
|
||||
{
|
||||
inherit nixExtensions mutableExtensions vscodeExtsFolderName user-data-dir;
|
||||
};
|
||||
mutableExtensions = lib.optionals (builtins.pathExists mutableExtensionsFile) (
|
||||
import mutableExtensionsFilePath
|
||||
);
|
||||
vscodeWithConfiguration =
|
||||
import ./vscodeWithConfiguration.nix
|
||||
{
|
||||
inherit lib writeShellScriptBin extensionsFromVscodeMarketplace;
|
||||
vscodeDefault = vscode;
|
||||
}
|
||||
{
|
||||
inherit
|
||||
nixExtensions
|
||||
mutableExtensions
|
||||
vscodeExtsFolderName
|
||||
user-data-dir
|
||||
;
|
||||
};
|
||||
|
||||
updateSettings = import ./updateSettings.nix { inherit lib writeShellScriptBin jq; };
|
||||
userSettingsFolder = "${ user-data-dir }/User";
|
||||
userSettingsFolder = "${user-data-dir}/User";
|
||||
|
||||
updateSettingsCmd = updateSettings {
|
||||
settings = {
|
||||
"extensions.autoCheckUpdates" = false;
|
||||
"extensions.autoUpdate" = false;
|
||||
"update.mode" = "none";
|
||||
"extensions.autoCheckUpdates" = false;
|
||||
"extensions.autoUpdate" = false;
|
||||
"update.mode" = "none";
|
||||
} // settings;
|
||||
inherit userSettingsFolder;
|
||||
createIfDoesNotExists = createSettingsIfDoesNotExists;
|
||||
@ -62,14 +73,16 @@ let
|
||||
symlinkFromUserSetting = (user-data-dir != "");
|
||||
};
|
||||
|
||||
vscodeExts2nix = import ./vscodeExts2nix.nix {
|
||||
inherit lib writeShellScriptBin;
|
||||
vscodeDefault = vscodeWithConfiguration;
|
||||
}
|
||||
{
|
||||
extensionsToIgnore = nixExtensions;
|
||||
extensions = mutableExtensions;
|
||||
};
|
||||
vscodeExts2nix =
|
||||
import ./vscodeExts2nix.nix
|
||||
{
|
||||
inherit lib writeShellScriptBin;
|
||||
vscodeDefault = vscodeWithConfiguration;
|
||||
}
|
||||
{
|
||||
extensionsToIgnore = nixExtensions;
|
||||
extensions = mutableExtensions;
|
||||
};
|
||||
code = writeShellScriptBin "code" ''
|
||||
${updateSettingsCmd}/bin/vscodeNixUpdate-settings
|
||||
${updateLaunchCmd}/bin/vscodeNixUpdate-launch
|
||||
@ -81,5 +94,11 @@ let
|
||||
in
|
||||
buildEnv {
|
||||
name = "vscodeEnv";
|
||||
paths = [ code vscodeExts2nix updateSettingsCmd updateLaunchCmd updateKeybindingsCmd ];
|
||||
paths = [
|
||||
code
|
||||
vscodeExts2nix
|
||||
updateSettingsCmd
|
||||
updateLaunchCmd
|
||||
updateKeybindingsCmd
|
||||
];
|
||||
}
|
||||
|
@ -1,11 +1,13 @@
|
||||
with import <nixpkgs>{};
|
||||
callPackage (import ./vscodeEnv.nix) {
|
||||
extensionsFromVscodeMarketplace = vscode-utils.extensionsFromVscodeMarketplace;
|
||||
vscodeDefault = vscode;
|
||||
} {
|
||||
mutableExtensionsFile = ./extensions.nix;
|
||||
settings = {
|
||||
a = "fdsdf";
|
||||
t = "test";
|
||||
};
|
||||
}
|
||||
with import <nixpkgs> { };
|
||||
callPackage (import ./vscodeEnv.nix)
|
||||
{
|
||||
extensionsFromVscodeMarketplace = vscode-utils.extensionsFromVscodeMarketplace;
|
||||
vscodeDefault = vscode;
|
||||
}
|
||||
{
|
||||
mutableExtensionsFile = ./extensions.nix;
|
||||
settings = {
|
||||
a = "fdsdf";
|
||||
t = "test";
|
||||
};
|
||||
}
|
||||
|
@ -1,14 +1,16 @@
|
||||
# based on the passed vscode will stdout a nix expression with the installed vscode extensions
|
||||
{ lib
|
||||
, vscodeDefault
|
||||
, writeShellScriptBin
|
||||
{
|
||||
lib,
|
||||
vscodeDefault,
|
||||
writeShellScriptBin,
|
||||
}:
|
||||
|
||||
##User input
|
||||
{ vscode ? vscodeDefault
|
||||
, extensionsToIgnore ? []
|
||||
# will use those extensions to get sha256 if still exists when executed.
|
||||
, extensions ? []
|
||||
{
|
||||
vscode ? vscodeDefault,
|
||||
extensionsToIgnore ? [ ],
|
||||
# will use those extensions to get sha256 if still exists when executed.
|
||||
extensions ? [ ],
|
||||
}:
|
||||
let
|
||||
mktplcExtRefToFetchArgs = import ./mktplcExtRefToFetchArgs.nix;
|
||||
@ -17,22 +19,32 @@ writeShellScriptBin "vscodeExts2nix" ''
|
||||
echo '['
|
||||
|
||||
for line in $(${vscode}/bin/code --list-extensions --show-versions \
|
||||
${lib.optionalString (extensionsToIgnore != []) ''
|
||||
| grep -v -i '^\(${lib.concatMapStringsSep "\\|" (e : "${e.publisher}.${e.name}") extensionsToIgnore}\)'
|
||||
''}
|
||||
${
|
||||
lib.optionalString (extensionsToIgnore != [ ]) ''
|
||||
| grep -v -i '^\(${
|
||||
lib.concatMapStringsSep "\\|" (e: "${e.publisher}.${e.name}") extensionsToIgnore
|
||||
}\)'
|
||||
''
|
||||
}
|
||||
) ; do
|
||||
[[ $line =~ ([^.]*)\.([^@]*)@(.*) ]]
|
||||
name=''${BASH_REMATCH[2]}
|
||||
publisher=''${BASH_REMATCH[1]}
|
||||
version=''${BASH_REMATCH[3]}
|
||||
|
||||
extensions="${lib.concatMapStringsSep "." (e : "${e.publisher}${e.name}@${e.sha256}") extensions}"
|
||||
extensions="${lib.concatMapStringsSep "." (e: "${e.publisher}${e.name}@${e.sha256}") extensions}"
|
||||
reCurrentExt=$publisher$name"@([^.]*)"
|
||||
if [[ $extensions =~ $reCurrentExt ]]; then
|
||||
sha256=''${BASH_REMATCH[1]}
|
||||
else
|
||||
sha256=$(
|
||||
nix-prefetch-url "${(mktplcExtRefToFetchArgs {publisher = ''"$publisher"''; name = ''"$name"''; version = ''"$version"'';}).url}" 2> /dev/null
|
||||
nix-prefetch-url "${
|
||||
(mktplcExtRefToFetchArgs {
|
||||
publisher = ''"$publisher"'';
|
||||
name = ''"$name"'';
|
||||
version = ''"$version"'';
|
||||
}).url
|
||||
}" 2> /dev/null
|
||||
)
|
||||
fi
|
||||
|
||||
|
@ -1,54 +1,61 @@
|
||||
# wrapper over vscode to control extensions per project (extensions folder will be created in execution path)
|
||||
{ lib
|
||||
, writeShellScriptBin
|
||||
, extensionsFromVscodeMarketplace
|
||||
, vscodeDefault
|
||||
{
|
||||
lib,
|
||||
writeShellScriptBin,
|
||||
extensionsFromVscodeMarketplace,
|
||||
vscodeDefault,
|
||||
}:
|
||||
## User input
|
||||
{ vscode ? vscodeDefault
|
||||
# extensions to be symlinked into the project's extensions folder
|
||||
, nixExtensions ? []
|
||||
# extensions to be copied into the project's extensions folder
|
||||
, mutableExtensions ? []
|
||||
, vscodeExtsFolderName ? ".vscode-exts"
|
||||
, user-data-dir ? ''"''${TMP}vscodeWithConfiguration/vscode-data-dir"''
|
||||
{
|
||||
vscode ? vscodeDefault,
|
||||
# extensions to be symlinked into the project's extensions folder
|
||||
nixExtensions ? [ ],
|
||||
# extensions to be copied into the project's extensions folder
|
||||
mutableExtensions ? [ ],
|
||||
vscodeExtsFolderName ? ".vscode-exts",
|
||||
user-data-dir ? ''"''${TMP}vscodeWithConfiguration/vscode-data-dir"'',
|
||||
}:
|
||||
let
|
||||
nixExtsDrvs = extensionsFromVscodeMarketplace nixExtensions;
|
||||
mutExtsDrvs = extensionsFromVscodeMarketplace mutableExtensions;
|
||||
mutableExtsPaths = lib.forEach mutExtsDrvs ( e:
|
||||
{
|
||||
mutableExtsPaths = lib.forEach mutExtsDrvs (e: {
|
||||
origin = "${e}/share/vscode/extensions/${e.vscodeExtUniqueId}";
|
||||
target = ''${vscodeExtsFolderName}/${e.vscodeExtUniqueId}-${(lib.findSingle (ext: "${ext.publisher}.${ext.name}" == e.vscodeExtUniqueId) "" "m" mutableExtensions ).version}'';
|
||||
}
|
||||
);
|
||||
target = ''${vscodeExtsFolderName}/${e.vscodeExtUniqueId}-${
|
||||
(lib.findSingle (
|
||||
ext: "${ext.publisher}.${ext.name}" == e.vscodeExtUniqueId
|
||||
) "" "m" mutableExtensions).version
|
||||
}'';
|
||||
});
|
||||
|
||||
#removed not defined extensions
|
||||
rmExtensions = lib.optionalString (nixExtensions++mutableExtensions != []) ''
|
||||
rmExtensions = lib.optionalString (nixExtensions ++ mutableExtensions != [ ]) ''
|
||||
find ${vscodeExtsFolderName} -mindepth 1 -maxdepth 1 ${
|
||||
lib.concatMapStringsSep " " (e : "! -iname ${e.publisher}.${e.name} ") nixExtensions
|
||||
+
|
||||
lib.concatMapStringsSep " " (e : "! -iname ${e.publisher}.${e.name}-${e.version} ") mutableExtensions
|
||||
} -exec rm -rf {} \;
|
||||
lib.concatMapStringsSep " " (e: "! -iname ${e.publisher}.${e.name} ") nixExtensions
|
||||
+ lib.concatMapStringsSep " " (
|
||||
e: "! -iname ${e.publisher}.${e.name}-${e.version} "
|
||||
) mutableExtensions
|
||||
} -exec rm -rf {} \;
|
||||
'';
|
||||
#copy mutable extension out of the nix store
|
||||
cpExtensions = ''
|
||||
${lib.concatMapStringsSep "\n" (e : "ln -sfn ${e}/share/vscode/extensions/* ${vscodeExtsFolderName}/") nixExtsDrvs}
|
||||
${lib.concatMapStringsSep "\n" (ePath : ''
|
||||
${lib.concatMapStringsSep "\n" (
|
||||
e: "ln -sfn ${e}/share/vscode/extensions/* ${vscodeExtsFolderName}/"
|
||||
) nixExtsDrvs}
|
||||
${lib.concatMapStringsSep "\n" (ePath: ''
|
||||
if [ ! -d ${ePath.target} ]; then
|
||||
cp -a ${ePath.origin} ${ePath.target}
|
||||
chmod -R u+rwx ${ePath.target}
|
||||
fi
|
||||
'') mutableExtsPaths}
|
||||
'') mutableExtsPaths}
|
||||
'';
|
||||
in
|
||||
writeShellScriptBin "code" ''
|
||||
if ! [[ "$@" =~ "--list-extension" ]]; then
|
||||
mkdir -p "${vscodeExtsFolderName}"
|
||||
${rmExtensions}
|
||||
${cpExtensions}
|
||||
fi
|
||||
${vscode}/bin/code --extensions-dir "${vscodeExtsFolderName}" ${
|
||||
lib.optionalString (user-data-dir != "") "--user-data-dir ${user-data-dir}"
|
||||
} "$@"
|
||||
''
|
||||
writeShellScriptBin "code" ''
|
||||
if ! [[ "$@" =~ "--list-extension" ]]; then
|
||||
mkdir -p "${vscodeExtsFolderName}"
|
||||
${rmExtensions}
|
||||
${cpExtensions}
|
||||
fi
|
||||
${vscode}/bin/code --extensions-dir "${vscodeExtsFolderName}" ${
|
||||
lib.optionalString (user-data-dir != "") "--user-data-dir ${user-data-dir}"
|
||||
} "$@"
|
||||
''
|
||||
|
@ -1,10 +1,8 @@
|
||||
{ lib
|
||||
, stdenv
|
||||
, fetchFromGitHub
|
||||
, fetchpatch
|
||||
, callPackage
|
||||
, patchelf
|
||||
, unzip
|
||||
, poco
|
||||
, openssl
|
||||
, SDL2
|
||||
@ -16,18 +14,18 @@
|
||||
}:
|
||||
|
||||
let
|
||||
version = "2.8.1";
|
||||
version = "2.8.2";
|
||||
craftos2-lua = fetchFromGitHub {
|
||||
owner = "MCJack123";
|
||||
repo = "craftos2-lua";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-8bl83AOIWtUQ06F2unYEF08VT13o9EGo9YDZpdNxd8w=";
|
||||
hash = "sha256-Kv0supnYKWLaVqOeZAzQNd3tQRP2KJugZqytyoj8QtY=";
|
||||
};
|
||||
craftos2-rom = fetchFromGitHub {
|
||||
owner = "McJack123";
|
||||
repo = "craftos2-rom";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-aCRJ3idSrRM8ydt8hP8nA1RR0etPnWpQKphXcOGgTfk=";
|
||||
hash = "sha256-5ZsLsqrkO02NLJCzsgf0k/ifsqNybTi4DcB9GLmWDHw=";
|
||||
};
|
||||
in
|
||||
|
||||
@ -39,7 +37,7 @@ stdenv.mkDerivation rec {
|
||||
owner = "MCJack123";
|
||||
repo = "craftos2";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-iQCv4EDdqmnU0fYxMwpCZ2Z5p43P0MGBNIG/dZrWndg=";
|
||||
hash = "sha256-ozebHgUgwdqYtWAyL+EdwpjEvZC+PkWcLYCPWz2FjSw=";
|
||||
};
|
||||
|
||||
buildInputs = [ patchelf poco openssl SDL2 SDL2_mixer ncurses libpng pngpp libwebp ];
|
||||
|
@ -115,7 +115,7 @@ stdenv.mkDerivation rec {
|
||||
meta = with lib; {
|
||||
description = "Access, organize and share your photos";
|
||||
mainProgram = "gnome-photos";
|
||||
homepage = "https://wiki.gnome.org/Apps/Photos";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/gnome-photos";
|
||||
license = licenses.gpl3Plus;
|
||||
maintainers = teams.gnome.members;
|
||||
platforms = platforms.linux;
|
||||
|
@ -107,7 +107,7 @@ stdenv.mkDerivation rec {
|
||||
};
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://wiki.gnome.org/Apps/Gthumb";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/gthumb";
|
||||
description = "Image browser and viewer for GNOME";
|
||||
mainProgram = "gthumb";
|
||||
platforms = platforms.linux;
|
||||
|
@ -14,14 +14,14 @@
|
||||
|
||||
python3Packages.buildPythonPackage rec {
|
||||
pname = "hydrus";
|
||||
version = "566";
|
||||
version = "572";
|
||||
format = "other";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "hydrusnetwork";
|
||||
repo = "hydrus";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-0vz2UnfU7yZIy1S+KOXLFrlQDuPCbpSw1GYEK8YZ/Qc=";
|
||||
hash = "sha256-mLb4rUsoMDxl7lPrrRJq/bWSqZlgg94efHJzgykZJ/g=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
|
@ -64,7 +64,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://wiki.gnome.org/Apps/OCRFeeder";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/ocrfeeder";
|
||||
description = "Complete Optical Character Recognition and Document Analysis and Recognition program";
|
||||
maintainers = with maintainers; [ doronbehar ];
|
||||
license = licenses.gpl3Plus;
|
||||
|
@ -35,8 +35,6 @@
|
||||
, gsettings-desktop-schemas
|
||||
}:
|
||||
|
||||
# for dependencies see https://wiki.gnome.org/Apps/Shotwell/BuildingAndInstalling
|
||||
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "shotwell";
|
||||
version = "0.32.6";
|
||||
@ -97,9 +95,9 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
meta = with lib; {
|
||||
description = "Popular photo organizer for the GNOME desktop";
|
||||
mainProgram = "shotwell";
|
||||
homepage = "https://wiki.gnome.org/Apps/Shotwell";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/shotwell";
|
||||
license = licenses.lgpl21Plus;
|
||||
maintainers = with maintainers; [];
|
||||
maintainers = with maintainers; [ bobby285271 ];
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
})
|
||||
|
@ -94,7 +94,7 @@ stdenv.mkDerivation rec {
|
||||
meta = with lib; {
|
||||
description = "Small GTK application to allow to keep a diary of your life";
|
||||
mainProgram = "almanah";
|
||||
homepage = "https://wiki.gnome.org/Apps/Almanah_Diary";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/almanah";
|
||||
license = licenses.gpl3Plus;
|
||||
platforms = platforms.unix;
|
||||
maintainers = teams.gnome.members;
|
||||
|
@ -55,7 +55,7 @@ stdenv.mkDerivation rec {
|
||||
meta = with lib; {
|
||||
description = "Tool for writing an ISO file to multiple USB devices at once";
|
||||
mainProgram = "gnome-multi-writer";
|
||||
homepage = "https://wiki.gnome.org/Apps/MultiWriter";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/gnome-multi-writer";
|
||||
license = licenses.gpl2Plus;
|
||||
maintainers = teams.gnome.members;
|
||||
platforms = platforms.linux;
|
||||
|
@ -70,7 +70,7 @@ stdenv.mkDerivation rec {
|
||||
meta = with lib; {
|
||||
description = "Recipe management application for GNOME";
|
||||
mainProgram = "gnome-recipes";
|
||||
homepage = "https://wiki.gnome.org/Apps/Recipes";
|
||||
homepage = "https://gitlab.gnome.org/GNOME/recipes";
|
||||
maintainers = teams.gnome.members;
|
||||
license = licenses.gpl3Plus;
|
||||
platforms = platforms.unix;
|
||||
|
@ -2,16 +2,16 @@
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "gum";
|
||||
version = "0.13.0";
|
||||
version = "0.14.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "charmbracelet";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-NgMEgSfHVLCEKZ3MmNV571ySMUD8wj+kq5EccGrxtZc=";
|
||||
hash = "sha256-TpLaZ/935S57K60NdgJXVY+YQEedralZMoQHWRgkH+A=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-fmc6nbS/Xmn/YRwToRH7EhP4SFRMf8hjZ/rLtaP/USo=";
|
||||
vendorHash = "sha256-UgpOHZ/CEnGsmUTyNrhh+qDmKEplr18b/OrO2qcIhF4=";
|
||||
|
||||
nativeBuildInputs = [
|
||||
installShellFiles
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user