Merge remote-tracking branch 'origin/staging-next' into staging
This commit is contained in:
commit
4f29b5a16b
@ -44,6 +44,10 @@ indent_size = 4
|
|||||||
indent_size = 2
|
indent_size = 2
|
||||||
indent_style = space
|
indent_style = space
|
||||||
|
|
||||||
|
# Match package.json, which are generally pulled from upstream and accept them as they are
|
||||||
|
[package.json]
|
||||||
|
indent_style = unset
|
||||||
|
|
||||||
# Disable file types or individual files
|
# Disable file types or individual files
|
||||||
# some of these files may be auto-generated and/or require significant changes
|
# some of these files may be auto-generated and/or require significant changes
|
||||||
|
|
||||||
|
@ -27,3 +27,49 @@ devShellTools.valueToString (builtins.toFile "foo" "bar")
|
|||||||
devShellTools.valueToString false
|
devShellTools.valueToString false
|
||||||
=> ""
|
=> ""
|
||||||
```
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## `devShellTools.unstructuredDerivationInputEnv` {#sec-devShellTools-unstructuredDerivationInputEnv}
|
||||||
|
|
||||||
|
Convert a set of derivation attributes (as would be passed to [`derivation`]) to a set of environment variables that can be used in a shell script.
|
||||||
|
This function does not support `__structuredAttrs`, but does support `passAsFile`.
|
||||||
|
|
||||||
|
:::{.example}
|
||||||
|
## `unstructuredDerivationInputEnv` usage example
|
||||||
|
|
||||||
|
```nix
|
||||||
|
devShellTools.unstructuredDerivationInputEnv {
|
||||||
|
drvAttrs = {
|
||||||
|
name = "foo";
|
||||||
|
buildInputs = [ hello figlet ];
|
||||||
|
builder = bash;
|
||||||
|
args = [ "-c" "${./builder.sh}" ];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
=> {
|
||||||
|
name = "foo";
|
||||||
|
buildInputs = "/nix/store/...-hello /nix/store/...-figlet";
|
||||||
|
builder = "/nix/store/...-bash";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that `args` is not included, because Nix does not added it to the builder process environment.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
## `devShellTools.derivationOutputEnv` {#sec-devShellTools-derivationOutputEnv}
|
||||||
|
|
||||||
|
Takes the relevant parts of a derivation and returns a set of environment variables, that would be present in the derivation.
|
||||||
|
|
||||||
|
:::{.example}
|
||||||
|
## `derivationOutputEnv` usage example
|
||||||
|
|
||||||
|
```nix
|
||||||
|
let
|
||||||
|
pkg = hello;
|
||||||
|
in
|
||||||
|
devShellTools.derivationOutputEnv { outputList = pkg.outputs; outputMap = pkg; }
|
||||||
|
```
|
||||||
|
|
||||||
|
:::
|
||||||
|
@ -60,7 +60,7 @@ stdenvNoCC.mkDerivation (
|
|||||||
|
|
||||||
nixos-render-docs manual html \
|
nixos-render-docs manual html \
|
||||||
--manpage-urls ./manpage-urls.json \
|
--manpage-urls ./manpage-urls.json \
|
||||||
--revision ${lib.trivial.revisionWithDefault (nixpkgs.rev or "master")} \
|
--revision ${nixpkgs.rev or "master"} \
|
||||||
--stylesheet style.css \
|
--stylesheet style.css \
|
||||||
--stylesheet highlightjs/mono-blue.css \
|
--stylesheet highlightjs/mono-blue.css \
|
||||||
--script ./highlightjs/highlight.pack.js \
|
--script ./highlightjs/highlight.pack.js \
|
||||||
|
5
doc/interoperability.md
Normal file
5
doc/interoperability.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Interoperability Standards {#part-interoperability}
|
||||||
|
|
||||||
|
```{=include=} chapters
|
||||||
|
interoperability/cyclonedx.md
|
||||||
|
```
|
79
doc/interoperability/cyclonedx.md
Normal file
79
doc/interoperability/cyclonedx.md
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
# CycloneDX {#chap-interop-cyclonedx}
|
||||||
|
|
||||||
|
[OWASP](https://owasp.org/) [CycloneDX](https://cyclonedx.org/) is a Software [Bill of Materials](https://en.wikipedia.org/wiki/Bill_of_materials) (SBOM) standard.
|
||||||
|
The standards described here are for including Nix specific information within SBOMs in a way that is interoperable with external SBOM tooling.
|
||||||
|
|
||||||
|
## `nix` Namespace Property Taxonomy {#sec-interop.cylonedx-nix}
|
||||||
|
|
||||||
|
The following tables describe namespaces for [properties](https://cyclonedx.org/docs/1.6/json/#components_items_properties) that may be attached to components within SBOMs.
|
||||||
|
Component properties are lists of name-value-pairs where values must be strings.
|
||||||
|
Properties with the same name may appear more than once.
|
||||||
|
Names and values are case-sensitive.
|
||||||
|
|
||||||
|
| Property | Description |
|
||||||
|
|------------------|-------------|
|
||||||
|
| `nix:store_path` | A Nix store path for the given component. This property should be contextualized by additional properties that describe the production of the store path, such as those from the `nix:narinfo:` and `nix:fod` namespaces. |
|
||||||
|
|
||||||
|
|
||||||
|
| Namespace | Description |
|
||||||
|
|---------------|-------------|
|
||||||
|
| [`nix:narinfo`](#sec-interop.cylonedx-narinfo) | Namespace for properties that are specific to how a component is stored as a [Nix archive](https://nixos.org/manual/nix/stable/glossary#gloss-nar) (NAR) in a [binary cache](https://nixos.org/manual/nix/stable/glossary#gloss-binary-cache). |
|
||||||
|
| [`nix:fod`](#sec-interop.cylonedx-fod) | Namespace for properties that describe a [fixed-output derivation](https://nixos.org/manual/nix/stable/glossary#gloss-fixed-output-derivation). |
|
||||||
|
|
||||||
|
|
||||||
|
### `nix:narinfo` {#sec-interop.cylonedx-narinfo}
|
||||||
|
|
||||||
|
Narinfo properties describe component archives that may be available from binary caches.
|
||||||
|
The `nix:narinfo` properties should be accompanied by a `nix:store_path` property within the same property list.
|
||||||
|
|
||||||
|
| Property | Description |
|
||||||
|
|---------------------------|-------------|
|
||||||
|
| `nix:narinfo:store_path` | Store path for the given store component. |
|
||||||
|
| `nix:narinfo:url` | URL path component. |
|
||||||
|
| `nix:narinfo:nar_hash` | Hash of the file system object part of the component when serialized as a Nix Archive. |
|
||||||
|
| `nix:narinfo:nar_size` | Size of the component when serialized as a Nix Archive. |
|
||||||
|
| `nix:narinfo:compression` | The compression format that component archive is in. |
|
||||||
|
| `nix:narinfo:file_hash` | A digest for the compressed component archive itself, as opposed to the data contained within. |
|
||||||
|
| `nix:narinfo:file_size` | The size of the compressed component archive itself. |
|
||||||
|
| `nix:narinfo:deriver` | The path to the derivation from which this component is produced. |
|
||||||
|
| `nix:narinfo:system` | The hardware and software platform on which this component is produced. |
|
||||||
|
| `nix:narinfo:sig` | Signatures claiming that this component is what it claims to be. |
|
||||||
|
| `nix:narinfo:ca` | Content address of this store object's file system object, used to compute its store path. |
|
||||||
|
| `nix:narinfo:references` | A whitespace separated array of store paths that this component references. |
|
||||||
|
|
||||||
|
### `nix:fod` {#sec-interop.cylonedx-fod}
|
||||||
|
|
||||||
|
FOD properties describe a [fixed-output derivation](https://nixos.org/manual/nix/stable/glossary#gloss-fixed-output-derivation).
|
||||||
|
The `nix:fod:method` property is required and must be accompanied by a `nix:store_path` property within the same property list.
|
||||||
|
All other properties in this namespace are method-specific.
|
||||||
|
To reproduce the build of a component the `nix:fod:method` value is resolved to an [appropriate function](#chap-pkgs-fetchers) within Nixpkgs whose arguments intersect with the given properties.
|
||||||
|
When generating `nix:fod` properties the method selected should be a stable function with a minimal number arguments.
|
||||||
|
For example, the `fetchFromGitHub` is commonly used within Nixpkgs but should be reduced to a call to the function by which it is implemented, `fetchzip`.
|
||||||
|
|
||||||
|
| Property | Description |
|
||||||
|
|------------------|-------------|
|
||||||
|
| `nix:fod:method` | Nixpkg function that produces this FOD. Required. Examples: `"fetchzip"`, `"fetchgit"` |
|
||||||
|
| `nix:fod:name` | Derivation name, present when method is `"fetchzip"` |
|
||||||
|
| `nix:fod:ref` | [Git ref](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefrefaref), present when method is `"fetchgit"` |
|
||||||
|
| `nix:fod:rev` | [Git rev](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefrevisionarevision), present when method is `"fetchgit"` |
|
||||||
|
| `nix:fod:sha256` | FOD hash |
|
||||||
|
| `nix:fod:url` | URL to fetch |
|
||||||
|
|
||||||
|
|
||||||
|
`nix:fod` properties may be extracted and evaluated to a derivation using code similar to the following, assuming a fictitious function `filterPropertiesToAttrs`:
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ pkgs, filterPropertiesToAttrs, properties }:
|
||||||
|
let
|
||||||
|
fodProps = filterPropertiesToAttrs "nix:fod:" properties;
|
||||||
|
|
||||||
|
methods = {
|
||||||
|
fetchzip =
|
||||||
|
{ name, url, sha256, ... }:
|
||||||
|
pkgs.fetchzip {
|
||||||
|
inherit name url sha256;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
in methods.${fodProps.method} fodProps
|
||||||
|
```
|
@ -162,7 +162,8 @@ following are specific to `buildPythonPackage`:
|
|||||||
* `dontWrapPythonPrograms ? false`: Skip wrapping of Python programs.
|
* `dontWrapPythonPrograms ? false`: Skip wrapping of Python programs.
|
||||||
* `permitUserSite ? false`: Skip setting the `PYTHONNOUSERSITE` environment
|
* `permitUserSite ? false`: Skip setting the `PYTHONNOUSERSITE` environment
|
||||||
variable in wrapped programs.
|
variable in wrapped programs.
|
||||||
* `pyproject`: Whether the pyproject format should be used. When set to `true`,
|
* `pyproject`: Whether the pyproject format should be used. As all other formats
|
||||||
|
are deprecated, you are recommended to set this to `true`. When you do so,
|
||||||
`pypaBuildHook` will be used, and you can add the required build dependencies
|
`pypaBuildHook` will be used, and you can add the required build dependencies
|
||||||
from `build-system.requires` to `build-system`. Note that the pyproject
|
from `build-system.requires` to `build-system`. Note that the pyproject
|
||||||
format falls back to using `setuptools`, so you can use `pyproject = true`
|
format falls back to using `setuptools`, so you can use `pyproject = true`
|
||||||
|
@ -41,7 +41,7 @@ rustPlatform.buildRustPackage rec {
|
|||||||
description = "Fast line-oriented regex search tool, similar to ag and ack";
|
description = "Fast line-oriented regex search tool, similar to ag and ack";
|
||||||
homepage = "https://github.com/BurntSushi/ripgrep";
|
homepage = "https://github.com/BurntSushi/ripgrep";
|
||||||
license = lib.licenses.unlicense;
|
license = lib.licenses.unlicense;
|
||||||
maintainers = [];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -642,6 +642,7 @@ builds the `retworkx` Python package. `fetchCargoTarball` and
|
|||||||
buildPythonPackage rec {
|
buildPythonPackage rec {
|
||||||
pname = "retworkx";
|
pname = "retworkx";
|
||||||
version = "0.6.0";
|
version = "0.6.0";
|
||||||
|
pyproject = true;
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "Qiskit";
|
owner = "Qiskit";
|
||||||
@ -656,8 +657,6 @@ buildPythonPackage rec {
|
|||||||
hash = "sha256-heOBK8qi2nuc/Ib+I/vLzZ1fUUD/G/KTw9d7M4Hz5O0=";
|
hash = "sha256-heOBK8qi2nuc/Ib+I/vLzZ1fUUD/G/KTw9d7M4Hz5O0=";
|
||||||
};
|
};
|
||||||
|
|
||||||
format = "pyproject";
|
|
||||||
|
|
||||||
nativeBuildInputs = with rustPlatform; [ cargoSetupHook maturinBuildHook ];
|
nativeBuildInputs = with rustPlatform; [ cargoSetupHook maturinBuildHook ];
|
||||||
|
|
||||||
# ...
|
# ...
|
||||||
|
@ -12,4 +12,5 @@ stdenv.md
|
|||||||
build-helpers.md
|
build-helpers.md
|
||||||
development.md
|
development.md
|
||||||
contributing.md
|
contributing.md
|
||||||
|
interoperability.md
|
||||||
```
|
```
|
||||||
|
@ -15060,6 +15060,12 @@
|
|||||||
githubId = 158758;
|
githubId = 158758;
|
||||||
name = "Oliver Dunkl";
|
name = "Oliver Dunkl";
|
||||||
};
|
};
|
||||||
|
odygrd = {
|
||||||
|
email = "odysseas.georgoudis@gmail.com";
|
||||||
|
github = "odygrd";
|
||||||
|
githubId = 7397786;
|
||||||
|
name = "Odysseas Georgoudis";
|
||||||
|
};
|
||||||
ofek = {
|
ofek = {
|
||||||
email = "oss@ofek.dev";
|
email = "oss@ofek.dev";
|
||||||
github = "ofek";
|
github = "ofek";
|
||||||
|
@ -1,5 +1,17 @@
|
|||||||
with import ../../../. { };
|
{
|
||||||
|
pkgs ? import ../../.. { },
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (pkgs) lib stdenv mkShell;
|
||||||
|
in
|
||||||
mkShell {
|
mkShell {
|
||||||
packages = [ rustc cargo clippy rustfmt ] ++ lib.optional stdenv.isDarwin libiconv;
|
packages =
|
||||||
|
with pkgs;
|
||||||
|
[
|
||||||
|
rustc
|
||||||
|
cargo
|
||||||
|
clippy
|
||||||
|
rustfmt
|
||||||
|
]
|
||||||
|
++ lib.optional stdenv.isDarwin pkgs.libiconv;
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ ldoc,,,,,,
|
|||||||
lgi,,,,,,
|
lgi,,,,,,
|
||||||
linenoise,https://raw.githubusercontent.com/hoelzro/lua-linenoise/master/linenoise-0.9-1.rockspec,,,,,
|
linenoise,https://raw.githubusercontent.com/hoelzro/lua-linenoise/master/linenoise-0.9-1.rockspec,,,,,
|
||||||
ljsyscall,,,,,5.1,lblasc
|
ljsyscall,,,,,5.1,lblasc
|
||||||
|
llscheck,,,,,,mrcjkb
|
||||||
lmathx,,,,,5.3,alexshpilkin
|
lmathx,,,,,5.3,alexshpilkin
|
||||||
lmpfrlib,,,,,5.3,alexshpilkin
|
lmpfrlib,,,,,5.3,alexshpilkin
|
||||||
loadkit,,,,,,alerque
|
loadkit,,,,,,alerque
|
||||||
|
|
@ -1019,10 +1019,7 @@ with lib.maintainers;
|
|||||||
};
|
};
|
||||||
|
|
||||||
zig = {
|
zig = {
|
||||||
members = [
|
members = [ figsoda ];
|
||||||
AndersonTorres
|
|
||||||
figsoda
|
|
||||||
];
|
|
||||||
scope = "Maintain the Zig compiler toolchain and nixpkgs integration.";
|
scope = "Maintain the Zig compiler toolchain and nixpkgs integration.";
|
||||||
shortName = "Zig";
|
shortName = "Zig";
|
||||||
enableFeatureFreezePing = true;
|
enableFeatureFreezePing = true;
|
||||||
|
@ -231,6 +231,8 @@
|
|||||||
Explicitly set `kubelet.hostname` to `networking.fqdnOrHostName` to get back
|
Explicitly set `kubelet.hostname` to `networking.fqdnOrHostName` to get back
|
||||||
the old default behavior.
|
the old default behavior.
|
||||||
|
|
||||||
|
- Docker now defaults to 27.x, because version 24.x stopped receiving security updates and bug fixes after [February 1, 2024](https://github.com/moby/moby/pull/46772#discussion_r1686464084).
|
||||||
|
|
||||||
- `keycloak` was updated to version 25, which introduces new hostname related options.
|
- `keycloak` was updated to version 25, which introduces new hostname related options.
|
||||||
See [Upgrading Guide](https://www.keycloak.org/docs/25.0.1/upgrading/#migrating-to-25-0-0) for instructions.
|
See [Upgrading Guide](https://www.keycloak.org/docs/25.0.1/upgrading/#migrating-to-25-0-0) for instructions.
|
||||||
|
|
||||||
@ -304,6 +306,8 @@
|
|||||||
|
|
||||||
- The `shadowstack` hardening flag has been added, though disabled by default.
|
- The `shadowstack` hardening flag has been added, though disabled by default.
|
||||||
|
|
||||||
|
- `restic` module now has an option for inhibiting system sleep while backups are running, defaulting to off (not inhibiting sleep), available as [`services.restic.backups.<name>.inhibitsSleep`](#opt-services.restic.backups._name_.inhibitsSleep).
|
||||||
|
|
||||||
- Support for *runner registration tokens* has been [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872)
|
- Support for *runner registration tokens* has been [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/380872)
|
||||||
in `gitlab-runner` 15.6 and is expected to be removed in `gitlab-runner` 18.0. Configuration of existing runners
|
in `gitlab-runner` 15.6 and is expected to be removed in `gitlab-runner` 18.0. Configuration of existing runners
|
||||||
should be changed to using *runner authentication tokens* by configuring
|
should be changed to using *runner authentication tokens* by configuring
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
with import ../../.. {};
|
{
|
||||||
pkgs.callPackage ./default.nix {}
|
pkgs ? import ../../.. { },
|
||||||
|
}:
|
||||||
|
pkgs.callPackage ./default.nix { }
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
with (import ../../../../default.nix {});
|
{
|
||||||
stdenv.mkDerivation {
|
pkgs ? import ../../../../default.nix { },
|
||||||
|
}:
|
||||||
|
|
||||||
|
pkgs.stdenv.mkDerivation {
|
||||||
name = "nixcfg-azure-devenv";
|
name = "nixcfg-azure-devenv";
|
||||||
|
|
||||||
nativeBuildInputs = [
|
nativeBuildInputs = with pkgs; [
|
||||||
azure-cli
|
azure-cli
|
||||||
bash
|
bash
|
||||||
cacert
|
cacert
|
||||||
azure-storage-azcopy
|
azure-storage-azcopy
|
||||||
];
|
];
|
||||||
|
|
||||||
AZURE_CONFIG_DIR="/tmp/azure-cli/.azure";
|
AZURE_CONFIG_DIR = "/tmp/azure-cli/.azure";
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,6 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,7 @@ let
|
|||||||
homepage = "https://downloads.linux.hpe.com/SDR/downloads/MCP/Ubuntu/pool/non-free/";
|
homepage = "https://downloads.linux.hpe.com/SDR/downloads/MCP/Ubuntu/pool/non-free/";
|
||||||
license = licenses.unfreeRedistributable;
|
license = licenses.unfreeRedistributable;
|
||||||
platforms = [ "x86_64-linux" ];
|
platforms = [ "x86_64-linux" ];
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
|
@ -256,7 +256,9 @@ in
|
|||||||
|
|
||||||
open = lib.mkEnableOption ''
|
open = lib.mkEnableOption ''
|
||||||
the open source NVIDIA kernel module
|
the open source NVIDIA kernel module
|
||||||
'';
|
'' // {
|
||||||
|
defaultText = lib.literalExpression ''lib.versionAtLeast config.hardware.nvidia.package.version "560"'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -305,6 +307,8 @@ in
|
|||||||
extraPackages32 = [ nvidia_x11.lib32 ];
|
extraPackages32 = [ nvidia_x11.lib32 ];
|
||||||
};
|
};
|
||||||
environment.systemPackages = [ nvidia_x11.bin ];
|
environment.systemPackages = [ nvidia_x11.bin ];
|
||||||
|
|
||||||
|
hardware.nvidia.open = lib.mkDefault (lib.versionAtLeast nvidia_x11.version "560");
|
||||||
})
|
})
|
||||||
|
|
||||||
# X11
|
# X11
|
||||||
|
@ -304,6 +304,7 @@
|
|||||||
./programs/wayland/hyprlock.nix
|
./programs/wayland/hyprlock.nix
|
||||||
./programs/wayland/hyprland.nix
|
./programs/wayland/hyprland.nix
|
||||||
./programs/wayland/labwc.nix
|
./programs/wayland/labwc.nix
|
||||||
|
./programs/wayland/miracle-wm.nix
|
||||||
./programs/wayland/river.nix
|
./programs/wayland/river.nix
|
||||||
./programs/wayland/sway.nix
|
./programs/wayland/sway.nix
|
||||||
./programs/wayland/waybar.nix
|
./programs/wayland/waybar.nix
|
||||||
|
@ -4,7 +4,7 @@ let
|
|||||||
cfg = config.programs.dmrconfig;
|
cfg = config.programs.dmrconfig;
|
||||||
|
|
||||||
in {
|
in {
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
###### interface
|
###### interface
|
||||||
options = {
|
options = {
|
||||||
|
43
nixos/modules/programs/wayland/miracle-wm.nix
Normal file
43
nixos/modules/programs/wayland/miracle-wm.nix
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.programs.wayland.miracle-wm;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.programs.wayland.miracle-wm = {
|
||||||
|
enable = lib.mkEnableOption ''
|
||||||
|
miracle-wm, a tiling Mir based Wayland compositor. You can manually launch miracle-wm by
|
||||||
|
executing "exec miracle-wm" on a TTY, or launch it from a display manager.
|
||||||
|
Consult the USERGUIDE.md at <https://github.com/mattkae/miracle-wm> for information on
|
||||||
|
how to use & configure it
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
config = lib.mkIf cfg.enable (
|
||||||
|
lib.mkMerge [
|
||||||
|
{
|
||||||
|
environment = {
|
||||||
|
systemPackages = [ pkgs.miracle-wm ];
|
||||||
|
};
|
||||||
|
|
||||||
|
# To make the miracle-wm session available if a display manager like SDDM is enabled:
|
||||||
|
services.displayManager.sessionPackages = [ pkgs.miracle-wm ];
|
||||||
|
}
|
||||||
|
|
||||||
|
(import ./wayland-session.nix {
|
||||||
|
inherit lib pkgs;
|
||||||
|
# Hardcoded path in Mir, not really possible to disable
|
||||||
|
enableXWayland = true;
|
||||||
|
# No portal support yet: https://github.com/mattkae/miracle-wm/issues/164
|
||||||
|
enableWlrPortal = false;
|
||||||
|
})
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
meta.maintainers = with lib.maintainers; [ OPNA2608 ];
|
||||||
|
}
|
@ -1,4 +1,9 @@
|
|||||||
{ config, lib, pkgs, ...}:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.programs.wayfire;
|
cfg = config.programs.wayfire;
|
||||||
in
|
in
|
||||||
@ -12,7 +17,10 @@ in
|
|||||||
|
|
||||||
plugins = lib.mkOption {
|
plugins = lib.mkOption {
|
||||||
type = lib.types.listOf lib.types.package;
|
type = lib.types.listOf lib.types.package;
|
||||||
default = with pkgs.wayfirePlugins; [ wcm wf-shell ];
|
default = with pkgs.wayfirePlugins; [
|
||||||
|
wcm
|
||||||
|
wf-shell
|
||||||
|
];
|
||||||
defaultText = lib.literalExpression "with pkgs.wayfirePlugins; [ wcm wf-shell ]";
|
defaultText = lib.literalExpression "with pkgs.wayfirePlugins; [ wcm wf-shell ]";
|
||||||
example = lib.literalExpression ''
|
example = lib.literalExpression ''
|
||||||
with pkgs.wayfirePlugins; [
|
with pkgs.wayfirePlugins; [
|
||||||
@ -25,26 +33,39 @@ in
|
|||||||
Additional plugins to use with the wayfire window manager.
|
Additional plugins to use with the wayfire window manager.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
xwayland.enable = lib.mkEnableOption "XWayland" // {
|
||||||
|
default = true;
|
||||||
config = let
|
|
||||||
finalPackage = pkgs.wayfire-with-plugins.override {
|
|
||||||
wayfire = cfg.package;
|
|
||||||
plugins = cfg.plugins;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
lib.mkIf cfg.enable {
|
|
||||||
environment.systemPackages = [
|
|
||||||
finalPackage
|
|
||||||
];
|
|
||||||
|
|
||||||
services.displayManager.sessionPackages = [ finalPackage ];
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = lib.mkDefault true;
|
|
||||||
wlr.enable = lib.mkDefault true;
|
|
||||||
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050914
|
|
||||||
config.wayfire.default = lib.mkDefault [ "wlr" "gtk" ];
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
config =
|
||||||
|
let
|
||||||
|
finalPackage = pkgs.wayfire-with-plugins.override {
|
||||||
|
wayfire = cfg.package;
|
||||||
|
plugins = cfg.plugins;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
lib.mkIf cfg.enable (
|
||||||
|
lib.mkMerge [
|
||||||
|
{
|
||||||
|
environment.systemPackages = [ finalPackage ];
|
||||||
|
|
||||||
|
services.displayManager.sessionPackages = [ finalPackage ];
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
enable = lib.mkDefault true;
|
||||||
|
wlr.enable = lib.mkDefault true;
|
||||||
|
# https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1050914
|
||||||
|
config.wayfire.default = lib.mkDefault [
|
||||||
|
"wlr"
|
||||||
|
"gtk"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
(import ./wayland-session.nix {
|
||||||
|
inherit lib pkgs;
|
||||||
|
enableXWayland = cfg.xwayland.enable;
|
||||||
|
})
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -99,6 +99,7 @@ let
|
|||||||
}));
|
}));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
package = config.security.pam.package;
|
||||||
parentConfig = config;
|
parentConfig = config;
|
||||||
|
|
||||||
pamOpts = { config, name, ... }: let cfg = config; in let config = parentConfig; in {
|
pamOpts = { config, name, ... }: let cfg = config; in let config = parentConfig; in {
|
||||||
@ -648,16 +649,16 @@ let
|
|||||||
# The required pam_unix.so module has to come after all the sufficient modules
|
# The required pam_unix.so module has to come after all the sufficient modules
|
||||||
# because otherwise, the account lookup will fail if the user does not exist
|
# because otherwise, the account lookup will fail if the user does not exist
|
||||||
# locally, for example with MySQL- or LDAP-auth.
|
# locally, for example with MySQL- or LDAP-auth.
|
||||||
{ name = "unix"; control = "required"; modulePath = "pam_unix.so"; }
|
{ name = "unix"; control = "required"; modulePath = "${package}/lib/security/pam_unix.so"; }
|
||||||
];
|
];
|
||||||
|
|
||||||
auth = autoOrderRules ([
|
auth = autoOrderRules ([
|
||||||
{ name = "oslogin_login"; enable = cfg.googleOsLoginAuthentication; control = "[success=done perm_denied=die default=ignore]"; modulePath = "${pkgs.google-guest-oslogin}/lib/security/pam_oslogin_login.so"; }
|
{ name = "oslogin_login"; enable = cfg.googleOsLoginAuthentication; control = "[success=done perm_denied=die default=ignore]"; modulePath = "${pkgs.google-guest-oslogin}/lib/security/pam_oslogin_login.so"; }
|
||||||
{ name = "rootok"; enable = cfg.rootOK; control = "sufficient"; modulePath = "pam_rootok.so"; }
|
{ name = "rootok"; enable = cfg.rootOK; control = "sufficient"; modulePath = "${package}/lib/security/pam_rootok.so"; }
|
||||||
{ name = "wheel"; enable = cfg.requireWheel; control = "required"; modulePath = "pam_wheel.so"; settings = {
|
{ name = "wheel"; enable = cfg.requireWheel; control = "required"; modulePath = "${package}/lib/security/pam_wheel.so"; settings = {
|
||||||
use_uid = true;
|
use_uid = true;
|
||||||
}; }
|
}; }
|
||||||
{ name = "faillock"; enable = cfg.logFailures; control = "required"; modulePath = "pam_faillock.so"; }
|
{ name = "faillock"; enable = cfg.logFailures; control = "required"; modulePath = "${package}/lib/security/pam_faillock.so"; }
|
||||||
{ name = "mysql"; enable = cfg.mysqlAuth; control = "sufficient"; modulePath = "${pkgs.pam_mysql}/lib/security/pam_mysql.so"; settings = {
|
{ name = "mysql"; enable = cfg.mysqlAuth; control = "sufficient"; modulePath = "${pkgs.pam_mysql}/lib/security/pam_mysql.so"; settings = {
|
||||||
config_file = "/etc/security/pam_mysql.conf";
|
config_file = "/etc/security/pam_mysql.conf";
|
||||||
}; }
|
}; }
|
||||||
@ -710,7 +711,7 @@ let
|
|||||||
|| cfg.zfs))
|
|| cfg.zfs))
|
||||||
[
|
[
|
||||||
{ name = "systemd_home-early"; enable = config.services.homed.enable; control = "optional"; modulePath = "${config.systemd.package}/lib/security/pam_systemd_home.so"; }
|
{ name = "systemd_home-early"; enable = config.services.homed.enable; control = "optional"; modulePath = "${config.systemd.package}/lib/security/pam_systemd_home.so"; }
|
||||||
{ name = "unix-early"; enable = cfg.unixAuth; control = "optional"; modulePath = "pam_unix.so"; settings = {
|
{ name = "unix-early"; enable = cfg.unixAuth; control = "optional"; modulePath = "${package}/lib/security/pam_unix.so"; settings = {
|
||||||
nullok = cfg.allowNullPassword;
|
nullok = cfg.allowNullPassword;
|
||||||
inherit (cfg) nodelay;
|
inherit (cfg) nodelay;
|
||||||
likeauth = true;
|
likeauth = true;
|
||||||
@ -731,7 +732,7 @@ let
|
|||||||
{ name = "gnupg"; enable = cfg.gnupg.enable; control = "optional"; modulePath = "${pkgs.pam_gnupg}/lib/security/pam_gnupg.so"; settings = {
|
{ name = "gnupg"; enable = cfg.gnupg.enable; control = "optional"; modulePath = "${pkgs.pam_gnupg}/lib/security/pam_gnupg.so"; settings = {
|
||||||
store-only = cfg.gnupg.storeOnly;
|
store-only = cfg.gnupg.storeOnly;
|
||||||
}; }
|
}; }
|
||||||
{ name = "faildelay"; enable = cfg.failDelay.enable; control = "optional"; modulePath = "${pkgs.pam}/lib/security/pam_faildelay.so"; settings = {
|
{ name = "faildelay"; enable = cfg.failDelay.enable; control = "optional"; modulePath = "${package}/lib/security/pam_faildelay.so"; settings = {
|
||||||
inherit (cfg.failDelay) delay;
|
inherit (cfg.failDelay) delay;
|
||||||
}; }
|
}; }
|
||||||
{ name = "google_authenticator"; enable = cfg.googleAuthenticator.enable; control = "required"; modulePath = "${pkgs.google-authenticator}/lib/security/pam_google_authenticator.so"; settings = {
|
{ name = "google_authenticator"; enable = cfg.googleAuthenticator.enable; control = "required"; modulePath = "${pkgs.google-authenticator}/lib/security/pam_google_authenticator.so"; settings = {
|
||||||
@ -740,7 +741,7 @@ let
|
|||||||
{ name = "duo"; enable = cfg.duoSecurity.enable; control = "required"; modulePath = "${pkgs.duo-unix}/lib/security/pam_duo.so"; }
|
{ name = "duo"; enable = cfg.duoSecurity.enable; control = "required"; modulePath = "${pkgs.duo-unix}/lib/security/pam_duo.so"; }
|
||||||
]) ++ [
|
]) ++ [
|
||||||
{ name = "systemd_home"; enable = config.services.homed.enable; control = "sufficient"; modulePath = "${config.systemd.package}/lib/security/pam_systemd_home.so"; }
|
{ name = "systemd_home"; enable = config.services.homed.enable; control = "sufficient"; modulePath = "${config.systemd.package}/lib/security/pam_systemd_home.so"; }
|
||||||
{ name = "unix"; enable = cfg.unixAuth; control = "sufficient"; modulePath = "pam_unix.so"; settings = {
|
{ name = "unix"; enable = cfg.unixAuth; control = "sufficient"; modulePath = "${package}/lib/security/pam_unix.so"; settings = {
|
||||||
nullok = cfg.allowNullPassword;
|
nullok = cfg.allowNullPassword;
|
||||||
inherit (cfg) nodelay;
|
inherit (cfg) nodelay;
|
||||||
likeauth = true;
|
likeauth = true;
|
||||||
@ -768,12 +769,12 @@ let
|
|||||||
action = "store";
|
action = "store";
|
||||||
use_first_pass = true;
|
use_first_pass = true;
|
||||||
}; }
|
}; }
|
||||||
{ name = "deny"; control = "required"; modulePath = "pam_deny.so"; }
|
{ name = "deny"; control = "required"; modulePath = "${package}/lib/security/pam_deny.so"; }
|
||||||
]);
|
]);
|
||||||
|
|
||||||
password = autoOrderRules [
|
password = autoOrderRules [
|
||||||
{ name = "systemd_home"; enable = config.services.homed.enable; control = "sufficient"; modulePath = "${config.systemd.package}/lib/security/pam_systemd_home.so"; }
|
{ name = "systemd_home"; enable = config.services.homed.enable; control = "sufficient"; modulePath = "${config.systemd.package}/lib/security/pam_systemd_home.so"; }
|
||||||
{ name = "unix"; control = "sufficient"; modulePath = "pam_unix.so"; settings = {
|
{ name = "unix"; control = "sufficient"; modulePath = "${package}/lib/security/pam_unix.so"; settings = {
|
||||||
nullok = true;
|
nullok = true;
|
||||||
yescrypt = true;
|
yescrypt = true;
|
||||||
}; }
|
}; }
|
||||||
@ -798,24 +799,24 @@ let
|
|||||||
];
|
];
|
||||||
|
|
||||||
session = autoOrderRules [
|
session = autoOrderRules [
|
||||||
{ name = "env"; enable = cfg.setEnvironment; control = "required"; modulePath = "pam_env.so"; settings = {
|
{ name = "env"; enable = cfg.setEnvironment; control = "required"; modulePath = "${package}/lib/security/pam_env.so"; settings = {
|
||||||
conffile = "/etc/pam/environment";
|
conffile = "/etc/pam/environment";
|
||||||
readenv = 0;
|
readenv = 0;
|
||||||
}; }
|
}; }
|
||||||
{ name = "unix"; control = "required"; modulePath = "pam_unix.so"; }
|
{ name = "unix"; control = "required"; modulePath = "${package}/lib/security/pam_unix.so"; }
|
||||||
{ name = "loginuid"; enable = cfg.setLoginUid; control = if config.boot.isContainer then "optional" else "required"; modulePath = "pam_loginuid.so"; }
|
{ name = "loginuid"; enable = cfg.setLoginUid; control = if config.boot.isContainer then "optional" else "required"; modulePath = "${package}/lib/security/pam_loginuid.so"; }
|
||||||
{ name = "tty_audit"; enable = cfg.ttyAudit.enable; control = "required"; modulePath = "${pkgs.pam}/lib/security/pam_tty_audit.so"; settings = {
|
{ name = "tty_audit"; enable = cfg.ttyAudit.enable; control = "required"; modulePath = "${package}/lib/security/pam_tty_audit.so"; settings = {
|
||||||
open_only = cfg.ttyAudit.openOnly;
|
open_only = cfg.ttyAudit.openOnly;
|
||||||
enable = cfg.ttyAudit.enablePattern;
|
enable = cfg.ttyAudit.enablePattern;
|
||||||
disable = cfg.ttyAudit.disablePattern;
|
disable = cfg.ttyAudit.disablePattern;
|
||||||
}; }
|
}; }
|
||||||
{ name = "systemd_home"; enable = config.services.homed.enable; control = "required"; modulePath = "${config.systemd.package}/lib/security/pam_systemd_home.so"; }
|
{ name = "systemd_home"; enable = config.services.homed.enable; control = "required"; modulePath = "${config.systemd.package}/lib/security/pam_systemd_home.so"; }
|
||||||
{ name = "mkhomedir"; enable = cfg.makeHomeDir; control = "required"; modulePath = "${pkgs.pam}/lib/security/pam_mkhomedir.so"; settings = {
|
{ name = "mkhomedir"; enable = cfg.makeHomeDir; control = "required"; modulePath = "${package}/lib/security/pam_mkhomedir.so"; settings = {
|
||||||
silent = true;
|
silent = true;
|
||||||
skel = config.security.pam.makeHomeDir.skelDirectory;
|
skel = config.security.pam.makeHomeDir.skelDirectory;
|
||||||
inherit (config.security.pam.makeHomeDir) umask;
|
inherit (config.security.pam.makeHomeDir) umask;
|
||||||
}; }
|
}; }
|
||||||
{ name = "lastlog"; enable = cfg.updateWtmp; control = "required"; modulePath = "${pkgs.pam}/lib/security/pam_lastlog.so"; settings = {
|
{ name = "lastlog"; enable = cfg.updateWtmp; control = "required"; modulePath = "${package}/lib/security/pam_lastlog.so"; settings = {
|
||||||
silent = true;
|
silent = true;
|
||||||
}; }
|
}; }
|
||||||
{ name = "ecryptfs"; enable = config.security.pam.enableEcryptfs; control = "optional"; modulePath = "${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so"; }
|
{ name = "ecryptfs"; enable = config.security.pam.enableEcryptfs; control = "optional"; modulePath = "${pkgs.ecryptfs}/lib/security/pam_ecryptfs.so"; }
|
||||||
@ -823,11 +824,11 @@ let
|
|||||||
# Skips the pam_fscrypt module for systemd-user sessions which do not have a password
|
# Skips the pam_fscrypt module for systemd-user sessions which do not have a password
|
||||||
# anyways.
|
# anyways.
|
||||||
# See also https://github.com/google/fscrypt/issues/95
|
# See also https://github.com/google/fscrypt/issues/95
|
||||||
{ name = "fscrypt-skip-systemd"; enable = config.security.pam.enableFscrypt; control = "[success=1 default=ignore]"; modulePath = "pam_succeed_if.so"; args = [
|
{ name = "fscrypt-skip-systemd"; enable = config.security.pam.enableFscrypt; control = "[success=1 default=ignore]"; modulePath = "${package}/lib/security/pam_succeed_if.so"; args = [
|
||||||
"service" "=" "systemd-user"
|
"service" "=" "systemd-user"
|
||||||
]; }
|
]; }
|
||||||
{ name = "fscrypt"; enable = config.security.pam.enableFscrypt; control = "optional"; modulePath = "${pkgs.fscrypt-experimental}/lib/security/pam_fscrypt.so"; }
|
{ name = "fscrypt"; enable = config.security.pam.enableFscrypt; control = "optional"; modulePath = "${pkgs.fscrypt-experimental}/lib/security/pam_fscrypt.so"; }
|
||||||
{ name = "zfs_key-skip-systemd"; enable = cfg.zfs; control = "[success=1 default=ignore]"; modulePath = "pam_succeed_if.so"; args = [
|
{ name = "zfs_key-skip-systemd"; enable = cfg.zfs; control = "[success=1 default=ignore]"; modulePath = "${package}/lib/security/pam_succeed_if.so"; args = [
|
||||||
"service" "=" "systemd-user"
|
"service" "=" "systemd-user"
|
||||||
]; }
|
]; }
|
||||||
{ name = "zfs_key"; enable = cfg.zfs; control = "optional"; modulePath = "${config.boot.zfs.package}/lib/security/pam_zfs_key.so"; settings = {
|
{ name = "zfs_key"; enable = cfg.zfs; control = "optional"; modulePath = "${config.boot.zfs.package}/lib/security/pam_zfs_key.so"; settings = {
|
||||||
@ -846,14 +847,14 @@ let
|
|||||||
{ name = "krb5"; enable = config.security.pam.krb5.enable; control = "optional"; modulePath = "${pam_krb5}/lib/security/pam_krb5.so"; }
|
{ name = "krb5"; enable = config.security.pam.krb5.enable; control = "optional"; modulePath = "${pam_krb5}/lib/security/pam_krb5.so"; }
|
||||||
{ name = "otpw"; enable = cfg.otpwAuth; control = "optional"; modulePath = "${pkgs.otpw}/lib/security/pam_otpw.so"; }
|
{ name = "otpw"; enable = cfg.otpwAuth; control = "optional"; modulePath = "${pkgs.otpw}/lib/security/pam_otpw.so"; }
|
||||||
{ name = "systemd"; enable = cfg.startSession; control = "optional"; modulePath = "${config.systemd.package}/lib/security/pam_systemd.so"; }
|
{ name = "systemd"; enable = cfg.startSession; control = "optional"; modulePath = "${config.systemd.package}/lib/security/pam_systemd.so"; }
|
||||||
{ name = "xauth"; enable = cfg.forwardXAuth; control = "optional"; modulePath = "pam_xauth.so"; settings = {
|
{ name = "xauth"; enable = cfg.forwardXAuth; control = "optional"; modulePath = "${package}/lib/security/pam_xauth.so"; settings = {
|
||||||
xauthpath = "${pkgs.xorg.xauth}/bin/xauth";
|
xauthpath = "${pkgs.xorg.xauth}/bin/xauth";
|
||||||
systemuser = 99;
|
systemuser = 99;
|
||||||
}; }
|
}; }
|
||||||
{ name = "limits"; enable = cfg.limits != []; control = "required"; modulePath = "${pkgs.pam}/lib/security/pam_limits.so"; settings = {
|
{ name = "limits"; enable = cfg.limits != []; control = "required"; modulePath = "${package}/lib/security/pam_limits.so"; settings = {
|
||||||
conf = "${makeLimitsConf cfg.limits}";
|
conf = "${makeLimitsConf cfg.limits}";
|
||||||
}; }
|
}; }
|
||||||
{ name = "motd"; enable = cfg.showMotd && (config.users.motd != null || config.users.motdFile != null); control = "optional"; modulePath = "${pkgs.pam}/lib/security/pam_motd.so"; settings = {
|
{ name = "motd"; enable = cfg.showMotd && (config.users.motd != null || config.users.motdFile != null); control = "optional"; modulePath = "${package}/lib/security/pam_motd.so"; settings = {
|
||||||
inherit motd;
|
inherit motd;
|
||||||
}; }
|
}; }
|
||||||
{ name = "apparmor"; enable = cfg.enableAppArmor && config.security.apparmor.enable; control = "optional"; modulePath = "${pkgs.apparmor-pam}/lib/security/pam_apparmor.so"; settings = {
|
{ name = "apparmor"; enable = cfg.enableAppArmor && config.security.apparmor.enable; control = "optional"; modulePath = "${pkgs.apparmor-pam}/lib/security/pam_apparmor.so"; settings = {
|
||||||
@ -967,6 +968,8 @@ in
|
|||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
|
||||||
|
security.pam.package = mkPackageOption pkgs "pam" { };
|
||||||
|
|
||||||
security.pam.loginLimits = mkOption {
|
security.pam.loginLimits = mkOption {
|
||||||
default = [];
|
default = [];
|
||||||
type = limitsType;
|
type = limitsType;
|
||||||
@ -1515,7 +1518,7 @@ in
|
|||||||
|
|
||||||
environment.systemPackages =
|
environment.systemPackages =
|
||||||
# Include the PAM modules in the system path mostly for the manpages.
|
# Include the PAM modules in the system path mostly for the manpages.
|
||||||
[ pkgs.pam ]
|
[ package ]
|
||||||
++ optional config.users.ldap.enable pam_ldap
|
++ optional config.users.ldap.enable pam_ldap
|
||||||
++ optional config.services.kanidm.enablePam config.services.kanidm.package
|
++ optional config.services.kanidm.enablePam config.services.kanidm.package
|
||||||
++ optional config.services.sssd.enable pkgs.sssd
|
++ optional config.services.sssd.enable pkgs.sssd
|
||||||
@ -1533,7 +1536,7 @@ in
|
|||||||
setuid = true;
|
setuid = true;
|
||||||
owner = "root";
|
owner = "root";
|
||||||
group = "root";
|
group = "root";
|
||||||
source = "${pkgs.pam}/bin/unix_chkpwd";
|
source = "${package}/bin/unix_chkpwd";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1574,11 +1577,6 @@ in
|
|||||||
lib.concatMapStrings
|
lib.concatMapStrings
|
||||||
(name: "r ${config.environment.etc."pam.d/${name}".source},\n")
|
(name: "r ${config.environment.etc."pam.d/${name}".source},\n")
|
||||||
(attrNames config.security.pam.services) +
|
(attrNames config.security.pam.services) +
|
||||||
''
|
|
||||||
mr ${getLib pkgs.pam}/lib/security/pam_filter/*,
|
|
||||||
mr ${getLib pkgs.pam}/lib/security/pam_*.so,
|
|
||||||
r ${getLib pkgs.pam}/lib/security/,
|
|
||||||
'' +
|
|
||||||
(with lib; pipe config.security.pam.services [
|
(with lib; pipe config.security.pam.services [
|
||||||
attrValues
|
attrValues
|
||||||
(catAttrs "rules")
|
(catAttrs "rules")
|
||||||
@ -1586,6 +1584,12 @@ in
|
|||||||
(concatMap attrValues)
|
(concatMap attrValues)
|
||||||
(filter (rule: rule.enable))
|
(filter (rule: rule.enable))
|
||||||
(catAttrs "modulePath")
|
(catAttrs "modulePath")
|
||||||
|
# TODO(@uninsane): replace this warning + filter with just an assertion
|
||||||
|
(map (modulePath: lib.warnIfNot
|
||||||
|
(hasPrefix "/" modulePath)
|
||||||
|
''non-absolute PAM modulePath "${modulePath}" is unsupported by apparmor and will be treated as an error by future versions of nixpkgs; see <https://github.com/NixOS/nixpkgs/pull/314791>''
|
||||||
|
modulePath
|
||||||
|
))
|
||||||
(filter (hasPrefix "/"))
|
(filter (hasPrefix "/"))
|
||||||
unique
|
unique
|
||||||
(map (module: "mr ${module},"))
|
(map (module: "mr ${module},"))
|
||||||
|
@ -40,5 +40,5 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,15 @@ in
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inhibitsSleep = mkOption {
|
||||||
|
default = false;
|
||||||
|
type = types.bool;
|
||||||
|
example = true;
|
||||||
|
description = ''
|
||||||
|
Prevents the system from sleeping while backing up.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
repository = mkOption {
|
repository = mkOption {
|
||||||
type = with types; nullOr str;
|
type = with types; nullOr str;
|
||||||
default = null;
|
default = null;
|
||||||
@ -299,7 +308,14 @@ in
|
|||||||
(name: backup:
|
(name: backup:
|
||||||
let
|
let
|
||||||
extraOptions = concatMapStrings (arg: " -o ${arg}") backup.extraOptions;
|
extraOptions = concatMapStrings (arg: " -o ${arg}") backup.extraOptions;
|
||||||
resticCmd = "${backup.package}/bin/restic${extraOptions}";
|
inhibitCmd = concatStringsSep " " [
|
||||||
|
"${pkgs.systemd}/bin/systemd-inhibit"
|
||||||
|
"--mode='block'"
|
||||||
|
"--who='restic'"
|
||||||
|
"--what='sleep'"
|
||||||
|
"--why=${escapeShellArg "Scheduled backup ${name}"} "
|
||||||
|
];
|
||||||
|
resticCmd = "${optionalString backup.inhibitsSleep inhibitCmd}${backup.package}/bin/restic${extraOptions}";
|
||||||
excludeFlags = optional (backup.exclude != []) "--exclude-file=${pkgs.writeText "exclude-patterns" (concatStringsSep "\n" backup.exclude)}";
|
excludeFlags = optional (backup.exclude != []) "--exclude-file=${pkgs.writeText "exclude-patterns" (concatStringsSep "\n" backup.exclude)}";
|
||||||
filesFromTmpFile = "/run/restic-backups-${name}/includes";
|
filesFromTmpFile = "/run/restic-backups-${name}/includes";
|
||||||
doBackup = (backup.dynamicFilesFrom != null) || (backup.paths != null && backup.paths != []);
|
doBackup = (backup.dynamicFilesFrom != null) || (backup.paths != null && backup.paths != []);
|
||||||
|
@ -51,5 +51,5 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -41,5 +41,5 @@ in {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -55,6 +55,6 @@ in
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -65,5 +65,5 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -215,6 +215,7 @@ in
|
|||||||
# https://docs.nvidia.com/dgx/pdf/dgx-os-5-user-guide.pdf
|
# https://docs.nvidia.com/dgx/pdf/dgx-os-5-user-guide.pdf
|
||||||
"char-nvidiactl"
|
"char-nvidiactl"
|
||||||
"char-nvidia-caps"
|
"char-nvidia-caps"
|
||||||
|
"char-nvidia-frontend"
|
||||||
"char-nvidia-uvm"
|
"char-nvidia-uvm"
|
||||||
# ROCm
|
# ROCm
|
||||||
"char-drm"
|
"char-drm"
|
||||||
|
@ -117,5 +117,5 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ let
|
|||||||
toml = pkgs.formats.toml { };
|
toml = pkgs.formats.toml { };
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta.maintainers = with maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
options.services.rkvm = {
|
options.services.rkvm = {
|
||||||
enable = mkOption {
|
enable = mkOption {
|
||||||
|
@ -372,5 +372,5 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ let
|
|||||||
in {
|
in {
|
||||||
meta = {
|
meta = {
|
||||||
# doc = ./bee.xml;
|
# doc = ./bee.xml;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
### interface
|
### interface
|
||||||
|
@ -90,6 +90,6 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -316,7 +316,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
doc = ./firefox-syncserver.md;
|
doc = ./firefox-syncserver.md;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -141,5 +141,5 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -183,37 +183,45 @@ let
|
|||||||
in
|
in
|
||||||
pkgs.writeText "i2pd.conf" (concatStringsSep "\n" opts);
|
pkgs.writeText "i2pd.conf" (concatStringsSep "\n" opts);
|
||||||
|
|
||||||
tunnelConf = let opts = [
|
tunnelConf = let
|
||||||
notice
|
mkOutTunnel = tun:
|
||||||
(flip map
|
let
|
||||||
(collect (tun: tun ? port && tun ? destination) cfg.outTunnels)
|
outTunOpts = [
|
||||||
(tun: let outTunOpts = [
|
(sec tun.name)
|
||||||
(sec tun.name)
|
"type = client"
|
||||||
"type = client"
|
(intOpt "port" tun.port)
|
||||||
(intOpt "port" tun.port)
|
(strOpt "destination" tun.destination)
|
||||||
(strOpt "destination" tun.destination)
|
|
||||||
] ++ (optionals (tun ? destinationPort) (optionalNullInt "destinationport" tun.destinationPort))
|
] ++ (optionals (tun ? destinationPort) (optionalNullInt "destinationport" tun.destinationPort))
|
||||||
++ (optionals (tun ? keys) (optionalNullString "keys" tun.keys))
|
++ (optionals (tun ? keys) (optionalNullString "keys" tun.keys))
|
||||||
++ (optionals (tun ? address) (optionalNullString "address" tun.address))
|
++ (optionals (tun ? address) (optionalNullString "address" tun.address))
|
||||||
++ (optionals (tun ? inbound.length) (optionalNullInt "inbound.length" tun.inbound.length))
|
++ (optionals (tun ? inbound.length) (optionalNullInt "inbound.length" tun.inbound.length))
|
||||||
++ (optionals (tun ? inbound.quantity) (optionalNullInt "inbound.quantity" tun.inbound.quantity))
|
++ (optionals (tun ? inbound.quantity) (optionalNullInt "inbound.quantity" tun.inbound.quantity))
|
||||||
++ (optionals (tun ? outbound.length) (optionalNullInt "outbound.length" tun.outbound.length))
|
++ (optionals (tun ? outbound.length) (optionalNullInt "outbound.length" tun.outbound.length))
|
||||||
++ (optionals (tun ? outbound.quantity) (optionalNullInt "outbound.quantity" tun.outbound.quantity))
|
++ (optionals (tun ? outbound.quantity) (optionalNullInt "outbound.quantity" tun.outbound.quantity))
|
||||||
++ (optionals (tun ? crypto.tagsToSend) (optionalNullInt "crypto.tagstosend" tun.crypto.tagsToSend));
|
++ (optionals (tun ? crypto.tagsToSend) (optionalNullInt "crypto.tagstosend" tun.crypto.tagsToSend));
|
||||||
in concatStringsSep "\n" outTunOpts))
|
in
|
||||||
(flip map
|
concatStringsSep "\n" outTunOpts;
|
||||||
(collect (tun: tun ? port && tun ? address) cfg.inTunnels)
|
|
||||||
(tun: let inTunOpts = [
|
mkInTunnel = tun:
|
||||||
(sec tun.name)
|
let
|
||||||
"type = server"
|
inTunOpts = [
|
||||||
(intOpt "port" tun.port)
|
(sec tun.name)
|
||||||
(strOpt "host" tun.address)
|
"type = server"
|
||||||
] ++ (optionals (tun ? destination) (optionalNullString "destination" tun.destination))
|
(intOpt "port" tun.port)
|
||||||
++ (optionals (tun ? keys) (optionalNullString "keys" tun.keys))
|
(strOpt "host" tun.address)
|
||||||
++ (optionals (tun ? inPort) (optionalNullInt "inport" tun.inPort))
|
] ++ (optionals (tun ? destination) (optionalNullString "destination" tun.destination))
|
||||||
++ (optionals (tun ? accessList) (optionalEmptyList "accesslist" tun.accessList));
|
++ (optionals (tun ? keys) (optionalNullString "keys" tun.keys))
|
||||||
in concatStringsSep "\n" inTunOpts))];
|
++ (optionals (tun ? inPort) (optionalNullInt "inport" tun.inPort))
|
||||||
in pkgs.writeText "i2pd-tunnels.conf" opts;
|
++ (optionals (tun ? accessList) (optionalEmptyList "accesslist" tun.accessList));
|
||||||
|
in
|
||||||
|
concatStringsSep "\n" inTunOpts;
|
||||||
|
|
||||||
|
allOutTunnels = collect (tun: tun ? port && tun ? destination) cfg.outTunnels;
|
||||||
|
allInTunnels = collect (tun: tun ? port && tun ? address) cfg.inTunnels;
|
||||||
|
|
||||||
|
opts = [ notice ] ++ (map mkOutTunnel allOutTunnels) ++ (map mkInTunnel allInTunnels);
|
||||||
|
in
|
||||||
|
pkgs.writeText "i2pd-tunnels.conf" (concatStringsSep "\n" opts);
|
||||||
|
|
||||||
i2pdFlags = concatStringsSep " " (
|
i2pdFlags = concatStringsSep " " (
|
||||||
optional (cfg.address != null) ("--host=" + cfg.address) ++ [
|
optional (cfg.address != null) ("--host=" + cfg.address) ++ [
|
||||||
|
@ -721,7 +721,7 @@ in
|
|||||||
};
|
};
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
doc = ./mosquitto.md;
|
doc = ./mosquitto.md;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
|
@ -291,5 +291,5 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -54,5 +54,5 @@ in {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -70,5 +70,5 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ let
|
|||||||
settingsFormat = (pkgs.formats.json { });
|
settingsFormat = (pkgs.formats.json { });
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
options = {
|
options = {
|
||||||
services.step-ca = {
|
services.step-ca = {
|
||||||
|
@ -89,6 +89,6 @@ in
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
meta.maintainers = with maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -219,7 +219,7 @@ in
|
|||||||
# Fonts
|
# Fonts
|
||||||
"/etc/plymouth/fonts".source = pkgs.runCommand "plymouth-initrd-fonts" {} ''
|
"/etc/plymouth/fonts".source = pkgs.runCommand "plymouth-initrd-fonts" {} ''
|
||||||
mkdir -p $out
|
mkdir -p $out
|
||||||
cp ${cfg.font} $out
|
cp ${escapeShellArg cfg.font} $out
|
||||||
'';
|
'';
|
||||||
"/etc/fonts/fonts.conf".text = ''
|
"/etc/fonts/fonts.conf".text = ''
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
|
@ -79,7 +79,7 @@ with lib;
|
|||||||
# ec2-get-console-output.
|
# ec2-get-console-output.
|
||||||
echo "-----BEGIN SSH HOST KEY FINGERPRINTS-----" > /dev/console
|
echo "-----BEGIN SSH HOST KEY FINGERPRINTS-----" > /dev/console
|
||||||
for i in /etc/ssh/ssh_host_*_key.pub; do
|
for i in /etc/ssh/ssh_host_*_key.pub; do
|
||||||
${config.programs.ssh.package}/bin/ssh-keygen -l -f $i > /dev/console
|
${config.programs.ssh.package}/bin/ssh-keygen -l -f $i || true > /dev/console
|
||||||
done
|
done
|
||||||
echo "-----END SSH HOST KEY FINGERPRINTS-----" > /dev/console
|
echo "-----END SSH HOST KEY FINGERPRINTS-----" > /dev/console
|
||||||
'';
|
'';
|
||||||
|
@ -264,6 +264,7 @@ in {
|
|||||||
docker-rootless = handleTestOn ["aarch64-linux" "x86_64-linux"] ./docker-rootless.nix {};
|
docker-rootless = handleTestOn ["aarch64-linux" "x86_64-linux"] ./docker-rootless.nix {};
|
||||||
docker-registry = handleTest ./docker-registry.nix {};
|
docker-registry = handleTest ./docker-registry.nix {};
|
||||||
docker-tools = handleTestOn ["x86_64-linux"] ./docker-tools.nix {};
|
docker-tools = handleTestOn ["x86_64-linux"] ./docker-tools.nix {};
|
||||||
|
docker-tools-nix-shell = runTest ./docker-tools-nix-shell.nix;
|
||||||
docker-tools-cross = handleTestOn ["x86_64-linux" "aarch64-linux"] ./docker-tools-cross.nix {};
|
docker-tools-cross = handleTestOn ["x86_64-linux" "aarch64-linux"] ./docker-tools-cross.nix {};
|
||||||
docker-tools-overlay = handleTestOn ["x86_64-linux"] ./docker-tools-overlay.nix {};
|
docker-tools-overlay = handleTestOn ["x86_64-linux"] ./docker-tools-overlay.nix {};
|
||||||
documize = handleTest ./documize.nix {};
|
documize = handleTest ./documize.nix {};
|
||||||
@ -578,6 +579,7 @@ in {
|
|||||||
minidlna = handleTest ./minidlna.nix {};
|
minidlna = handleTest ./minidlna.nix {};
|
||||||
miniflux = handleTest ./miniflux.nix {};
|
miniflux = handleTest ./miniflux.nix {};
|
||||||
minio = handleTest ./minio.nix {};
|
minio = handleTest ./minio.nix {};
|
||||||
|
miracle-wm = runTest ./miracle-wm.nix;
|
||||||
miriway = handleTest ./miriway.nix {};
|
miriway = handleTest ./miriway.nix {};
|
||||||
misc = handleTest ./misc.nix {};
|
misc = handleTest ./misc.nix {};
|
||||||
mjolnir = handleTest ./matrix/mjolnir.nix {};
|
mjolnir = handleTest ./matrix/mjolnir.nix {};
|
||||||
|
@ -13,7 +13,7 @@ let
|
|||||||
|
|
||||||
{ imports = [ ./common/user-account.nix ./common/x11.nix ];
|
{ imports = [ ./common/user-account.nix ./common/x11.nix ];
|
||||||
hardware.graphics.enable = true;
|
hardware.graphics.enable = true;
|
||||||
virtualisation.memorySize = 256;
|
virtualisation.memorySize = 384;
|
||||||
environment = {
|
environment = {
|
||||||
systemPackages = [ pkgs.armagetronad ];
|
systemPackages = [ pkgs.armagetronad ];
|
||||||
variables.XAUTHORITY = "/home/${user}/.Xauthority";
|
variables.XAUTHORITY = "/home/${user}/.Xauthority";
|
||||||
@ -208,7 +208,7 @@ makeTest {
|
|||||||
barrier.wait()
|
barrier.wait()
|
||||||
|
|
||||||
# Get to the Server Bookmarks screen on both clients. This takes a while so do it asynchronously.
|
# Get to the Server Bookmarks screen on both clients. This takes a while so do it asynchronously.
|
||||||
barrier = threading.Barrier(3, timeout=120)
|
barrier = threading.Barrier(len(clients) + 1, timeout=240)
|
||||||
for client in clients:
|
for client in clients:
|
||||||
threading.Thread(target=client_setup, args=(client, servers, barrier)).start()
|
threading.Thread(target=client_setup, args=(client, servers, barrier)).start()
|
||||||
barrier.wait()
|
barrier.wait()
|
||||||
|
@ -4,7 +4,7 @@ import ./make-test-python.nix (
|
|||||||
{
|
{
|
||||||
name = "crabfit";
|
name = "crabfit";
|
||||||
|
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
nodes = {
|
nodes = {
|
||||||
machine =
|
machine =
|
||||||
|
95
nixos/tests/docker-tools-nix-shell.nix
Normal file
95
nixos/tests/docker-tools-nix-shell.nix
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# nix-build -A nixosTests.docker-tools-nix-shell
|
||||||
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.node.pkgs.dockerTools) examples;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = "docker-tools-nix-shell";
|
||||||
|
meta = with lib.maintainers; {
|
||||||
|
maintainers = [
|
||||||
|
infinisil
|
||||||
|
roberth
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
nodes = {
|
||||||
|
docker =
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
virtualisation = {
|
||||||
|
diskSize = 3072;
|
||||||
|
docker.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
testScript = ''
|
||||||
|
docker.wait_for_unit("sockets.target")
|
||||||
|
|
||||||
|
with subtest("buildImageWithNixDB: Has a nix database"):
|
||||||
|
docker.succeed(
|
||||||
|
"docker load --input='${examples.nix}'",
|
||||||
|
"docker run --rm ${examples.nix.imageName} nix-store -q --references /bin/bash"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: Can build a basic derivation"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-basic} | docker load",
|
||||||
|
"docker run --rm nix-shell-basic bash -c 'buildDerivation && $out/bin/hello' | grep '^Hello, world!$'"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: Runs the shell hook"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-hook} | docker load",
|
||||||
|
"docker run --rm -it nix-shell-hook | grep 'This is the shell hook!'"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: Sources stdenv, making build inputs available"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-inputs} | docker load",
|
||||||
|
"docker run --rm -it nix-shell-inputs | grep 'Hello, world!'"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: passAsFile works"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-pass-as-file} | docker load",
|
||||||
|
"docker run --rm -it nix-shell-pass-as-file | grep 'this is a string'"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: run argument works"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-run} | docker load",
|
||||||
|
"docker run --rm -it nix-shell-run | grep 'This shell is not interactive'"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: command argument works"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-command} | docker load",
|
||||||
|
"docker run --rm -it nix-shell-command | grep 'This shell is interactive'"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: home directory is writable by default"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-writable-home} | docker load",
|
||||||
|
"docker run --rm -it nix-shell-writable-home"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: home directory can be made non-existent"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-nonexistent-home} | docker load",
|
||||||
|
"docker run --rm -it nix-shell-nonexistent-home"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("buildNixShellImage: can build derivations"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-shell-build-derivation} | docker load",
|
||||||
|
"docker run --rm -it nix-shell-build-derivation"
|
||||||
|
)
|
||||||
|
|
||||||
|
with subtest("streamLayeredImage: with nix db"):
|
||||||
|
docker.succeed(
|
||||||
|
"${examples.nix-layered} | docker load",
|
||||||
|
"docker run --rm ${examples.nix-layered.imageName} nix-store -q --references /bin/bash"
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
}
|
@ -60,7 +60,7 @@ let
|
|||||||
};
|
};
|
||||||
|
|
||||||
nonRootTestImage =
|
nonRootTestImage =
|
||||||
pkgs.dockerTools.streamLayeredImage rec {
|
pkgs.dockerTools.streamLayeredImage {
|
||||||
name = "non-root-test";
|
name = "non-root-test";
|
||||||
tag = "latest";
|
tag = "latest";
|
||||||
uid = 1000;
|
uid = 1000;
|
||||||
@ -567,66 +567,6 @@ in {
|
|||||||
docker.succeed("docker run --rm image-with-certs:latest test -r /etc/pki/tls/certs/ca-bundle.crt")
|
docker.succeed("docker run --rm image-with-certs:latest test -r /etc/pki/tls/certs/ca-bundle.crt")
|
||||||
docker.succeed("docker image rm image-with-certs:latest")
|
docker.succeed("docker image rm image-with-certs:latest")
|
||||||
|
|
||||||
with subtest("buildImageWithNixDB: Has a nix database"):
|
|
||||||
docker.succeed(
|
|
||||||
"docker load --input='${examples.nix}'",
|
|
||||||
"docker run --rm ${examples.nix.imageName} nix-store -q --references /bin/bash"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: Can build a basic derivation"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-basic} | docker load",
|
|
||||||
"docker run --rm nix-shell-basic bash -c 'buildDerivation && $out/bin/hello' | grep '^Hello, world!$'"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: Runs the shell hook"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-hook} | docker load",
|
|
||||||
"docker run --rm -it nix-shell-hook | grep 'This is the shell hook!'"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: Sources stdenv, making build inputs available"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-inputs} | docker load",
|
|
||||||
"docker run --rm -it nix-shell-inputs | grep 'Hello, world!'"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: passAsFile works"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-pass-as-file} | docker load",
|
|
||||||
"docker run --rm -it nix-shell-pass-as-file | grep 'this is a string'"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: run argument works"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-run} | docker load",
|
|
||||||
"docker run --rm -it nix-shell-run | grep 'This shell is not interactive'"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: command argument works"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-command} | docker load",
|
|
||||||
"docker run --rm -it nix-shell-command | grep 'This shell is interactive'"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: home directory is writable by default"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-writable-home} | docker load",
|
|
||||||
"docker run --rm -it nix-shell-writable-home"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: home directory can be made non-existent"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-nonexistent-home} | docker load",
|
|
||||||
"docker run --rm -it nix-shell-nonexistent-home"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("buildNixShellImage: can build derivations"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-shell-build-derivation} | docker load",
|
|
||||||
"docker run --rm -it nix-shell-build-derivation"
|
|
||||||
)
|
|
||||||
|
|
||||||
with subtest("streamLayeredImage: chown is persistent in fakeRootCommands"):
|
with subtest("streamLayeredImage: chown is persistent in fakeRootCommands"):
|
||||||
docker.succeed(
|
docker.succeed(
|
||||||
"${chownTestImage} | docker load",
|
"${chownTestImage} | docker load",
|
||||||
@ -638,11 +578,5 @@ in {
|
|||||||
"${nonRootTestImage} | docker load",
|
"${nonRootTestImage} | docker load",
|
||||||
"docker run --rm ${chownTestImage.imageName} | diff /dev/stdin <(echo 12345:12345)"
|
"docker run --rm ${chownTestImage.imageName} | diff /dev/stdin <(echo 12345:12345)"
|
||||||
)
|
)
|
||||||
|
|
||||||
with subtest("streamLayeredImage: with nix db"):
|
|
||||||
docker.succeed(
|
|
||||||
"${examples.nix-layered} | docker load",
|
|
||||||
"docker run --rm ${examples.nix-layered.imageName} nix-store -q --references /bin/bash"
|
|
||||||
)
|
|
||||||
'';
|
'';
|
||||||
})
|
})
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
import ./make-test-python.nix ({ pkgs, lib, ... }: {
|
||||||
name = "graylog";
|
name = "graylog";
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
nodes.machine = { pkgs, ... }: {
|
nodes.machine = { pkgs, ... }: {
|
||||||
virtualisation.memorySize = 4096;
|
virtualisation.memorySize = 4096;
|
||||||
|
131
nixos/tests/miracle-wm.nix
Normal file
131
nixos/tests/miracle-wm.nix
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
{ pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
name = "miracle-wm";
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
maintainers = with lib.maintainers; [ OPNA2608 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
nodes.machine =
|
||||||
|
{ config, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./common/auto.nix
|
||||||
|
./common/user-account.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Seems to very rarely get interrupted by oom-killer
|
||||||
|
virtualisation.memorySize = 2047;
|
||||||
|
|
||||||
|
test-support.displayManager.auto = {
|
||||||
|
enable = true;
|
||||||
|
user = "alice";
|
||||||
|
};
|
||||||
|
|
||||||
|
services.xserver.enable = true;
|
||||||
|
services.displayManager.defaultSession = lib.mkForce "miracle-wm";
|
||||||
|
|
||||||
|
programs.wayland.miracle-wm.enable = true;
|
||||||
|
|
||||||
|
# To ensure a specific config for the tests
|
||||||
|
systemd.tmpfiles.rules =
|
||||||
|
let
|
||||||
|
testConfig = (pkgs.formats.yaml { }).generate "miracle-wm.yaml" {
|
||||||
|
terminal = "env WINIT_UNIX_BACKEND=x11 WAYLAND_DISPLAY= alacritty";
|
||||||
|
startup_apps = [
|
||||||
|
{
|
||||||
|
command = "foot";
|
||||||
|
restart_on_death = false;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
[
|
||||||
|
"d ${config.users.users.alice.home}/.config 0700 alice users - -"
|
||||||
|
"L ${config.users.users.alice.home}/.config/miracle-wm.yaml - - - - ${testConfig}"
|
||||||
|
];
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
shellAliases = {
|
||||||
|
test-wayland = "wayland-info | tee /tmp/test-wayland.out && touch /tmp/test-wayland-exit-ok";
|
||||||
|
test-x11 = "glinfo | tee /tmp/test-x11.out && touch /tmp/test-x11-exit-ok";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemPackages = with pkgs; [
|
||||||
|
mesa-demos
|
||||||
|
wayland-utils
|
||||||
|
foot
|
||||||
|
alacritty
|
||||||
|
];
|
||||||
|
|
||||||
|
# To help with OCR
|
||||||
|
etc."xdg/foot/foot.ini".text = lib.generators.toINI { } {
|
||||||
|
main = {
|
||||||
|
font = "inconsolata:size=16";
|
||||||
|
};
|
||||||
|
colors = rec {
|
||||||
|
foreground = "000000";
|
||||||
|
background = "ffffff";
|
||||||
|
regular2 = foreground;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
etc."xdg/alacritty/alacritty.yml".text = lib.generators.toYAML { } {
|
||||||
|
font = rec {
|
||||||
|
normal.family = "Inconsolata";
|
||||||
|
bold.family = normal.family;
|
||||||
|
italic.family = normal.family;
|
||||||
|
bold_italic.family = normal.family;
|
||||||
|
size = 16;
|
||||||
|
};
|
||||||
|
colors = rec {
|
||||||
|
primary = {
|
||||||
|
foreground = "0x000000";
|
||||||
|
background = "0xffffff";
|
||||||
|
};
|
||||||
|
normal = {
|
||||||
|
green = primary.foreground;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fonts.packages = [ pkgs.inconsolata ];
|
||||||
|
};
|
||||||
|
|
||||||
|
enableOCR = true;
|
||||||
|
|
||||||
|
testScript =
|
||||||
|
{ ... }:
|
||||||
|
''
|
||||||
|
start_all()
|
||||||
|
machine.wait_for_unit("multi-user.target")
|
||||||
|
|
||||||
|
# Wait for Miriway to complete startup
|
||||||
|
machine.wait_for_file("/run/user/1000/wayland-0")
|
||||||
|
machine.succeed("pgrep miracle-wm")
|
||||||
|
machine.screenshot("miracle-wm_launched")
|
||||||
|
|
||||||
|
# Test Wayland
|
||||||
|
with subtest("wayland client works"):
|
||||||
|
# We let miracle-wm start the first terminal, as we might get stuck if it's not ready to process the first keybind
|
||||||
|
# machine.send_key("ctrl-alt-t")
|
||||||
|
machine.wait_for_text("alice@machine")
|
||||||
|
machine.send_chars("test-wayland\n")
|
||||||
|
machine.wait_for_file("/tmp/test-wayland-exit-ok")
|
||||||
|
machine.copy_from_vm("/tmp/test-wayland.out")
|
||||||
|
machine.screenshot("foot_wayland_info")
|
||||||
|
machine.send_chars("exit\n")
|
||||||
|
machine.wait_until_fails("pgrep foot")
|
||||||
|
|
||||||
|
# Test XWayland
|
||||||
|
with subtest("x11 client works"):
|
||||||
|
machine.send_key("meta_l-ret")
|
||||||
|
machine.wait_for_text("alice@machine")
|
||||||
|
machine.send_chars("test-x11\n")
|
||||||
|
machine.wait_for_file("/tmp/test-x11-exit-ok")
|
||||||
|
machine.copy_from_vm("/tmp/test-x11.out")
|
||||||
|
machine.screenshot("alacritty_glinfo")
|
||||||
|
machine.send_chars("exit\n")
|
||||||
|
machine.wait_until_fails("pgrep alacritty")
|
||||||
|
'';
|
||||||
|
}
|
@ -12,7 +12,7 @@ let default-config = {
|
|||||||
in import ./make-test-python.nix ({ pkgs, ...} : {
|
in import ./make-test-python.nix ({ pkgs, ...} : {
|
||||||
name = "networking-proxy";
|
name = "networking-proxy";
|
||||||
meta = with pkgs.lib.maintainers; {
|
meta = with pkgs.lib.maintainers; {
|
||||||
maintainers = [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
nodes = {
|
nodes = {
|
||||||
|
@ -166,7 +166,7 @@ let
|
|||||||
in lib.mapAttrs (lib.const (attrs: makeTest (attrs // {
|
in lib.mapAttrs (lib.const (attrs: makeTest (attrs // {
|
||||||
name = "${attrs.name}-Networking-NetworkManager";
|
name = "${attrs.name}-Networking-NetworkManager";
|
||||||
meta = {
|
meta = {
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
}))) testCases
|
}))) testCases
|
||||||
|
@ -4,6 +4,7 @@ import ./make-test-python.nix (
|
|||||||
let
|
let
|
||||||
remoteRepository = "/root/restic-backup";
|
remoteRepository = "/root/restic-backup";
|
||||||
remoteFromFileRepository = "/root/restic-backup-from-file";
|
remoteFromFileRepository = "/root/restic-backup-from-file";
|
||||||
|
remoteInhibitTestRepository = "/root/restic-backup-inhibit-test";
|
||||||
remoteNoInitRepository = "/root/restic-backup-no-init";
|
remoteNoInitRepository = "/root/restic-backup-no-init";
|
||||||
rcloneRepository = "rclone:local:/root/restic-rclone-backup";
|
rcloneRepository = "rclone:local:/root/restic-rclone-backup";
|
||||||
|
|
||||||
@ -66,6 +67,12 @@ import ./make-test-python.nix (
|
|||||||
find /opt -mindepth 1 -maxdepth 1 ! -name a_dir # all files in /opt except for a_dir
|
find /opt -mindepth 1 -maxdepth 1 ! -name a_dir # all files in /opt except for a_dir
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
inhibit-test = {
|
||||||
|
inherit passwordFile paths exclude pruneOpts;
|
||||||
|
repository = remoteInhibitTestRepository;
|
||||||
|
initialize = true;
|
||||||
|
inhibitsSleep = true;
|
||||||
|
};
|
||||||
remote-noinit-backup = {
|
remote-noinit-backup = {
|
||||||
inherit passwordFile exclude pruneOpts paths;
|
inherit passwordFile exclude pruneOpts paths;
|
||||||
initialize = false;
|
initialize = false;
|
||||||
@ -190,6 +197,13 @@ import ./make-test-python.nix (
|
|||||||
'restic-remotebackup snapshots --json | ${pkgs.jq}/bin/jq "length | . == 1"',
|
'restic-remotebackup snapshots --json | ${pkgs.jq}/bin/jq "length | . == 1"',
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# test that the inhibit option is working
|
||||||
|
server.systemctl("start --no-block restic-backups-inhibit-test.service")
|
||||||
|
server.wait_until_succeeds(
|
||||||
|
"systemd-inhibit --no-legend --no-pager | grep -q restic",
|
||||||
|
5
|
||||||
|
)
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import ./make-test-python.nix ({ pkgs, ... }: {
|
import ./make-test-python.nix ({ pkgs, ... }: {
|
||||||
name = "sogo";
|
name = "sogo";
|
||||||
meta = with pkgs.lib.maintainers; {
|
meta = with pkgs.lib.maintainers; {
|
||||||
maintainers = [];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
|
|
||||||
nodes = {
|
nodes = {
|
||||||
|
@ -8,7 +8,7 @@ let
|
|||||||
in
|
in
|
||||||
{
|
{
|
||||||
name = "soju";
|
name = "soju";
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
nodes.machine = { ... }: {
|
nodes.machine = { ... }: {
|
||||||
services.soju = {
|
services.soju = {
|
||||||
|
@ -61,6 +61,7 @@ import ../make-test-python.nix ({ lib, pkgs, ... }:
|
|||||||
}
|
}
|
||||||
.scope_name = structured.msgid
|
.scope_name = structured.msgid
|
||||||
del(.message)
|
del(.message)
|
||||||
|
del(.host)
|
||||||
del(.timestamp)
|
del(.timestamp)
|
||||||
del(.service)
|
del(.service)
|
||||||
del(.source_type)
|
del(.source_type)
|
||||||
|
@ -14,7 +14,7 @@ import ./make-test-python.nix ({ lib, ... }@args: let
|
|||||||
inherit (pkgs.vscode.passthru) rev vscodeServer;
|
inherit (pkgs.vscode.passthru) rev vscodeServer;
|
||||||
in {
|
in {
|
||||||
name = "vscode-remote-ssh";
|
name = "vscode-remote-ssh";
|
||||||
meta.maintainers = with lib.maintainers; [ ];
|
meta.maintainers = [ ];
|
||||||
|
|
||||||
nodes = let
|
nodes = let
|
||||||
serverAddress = "192.168.0.2";
|
serverAddress = "192.168.0.2";
|
||||||
|
@ -12,13 +12,13 @@
|
|||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation rec {
|
||||||
pname = "ashuffle";
|
pname = "ashuffle";
|
||||||
version = "3.14.7";
|
version = "3.14.8";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "joshkunz";
|
owner = "joshkunz";
|
||||||
repo = "ashuffle";
|
repo = "ashuffle";
|
||||||
rev = "v${version}";
|
rev = "v${version}";
|
||||||
hash = "sha256-id55Ss/7PLBPn55RikAlqr3VkNzgm8NiL/ruFGAmH30=";
|
hash = "sha256-XnibLlwUspI2aveWfMg/TOe59vK6Z2WEnF7gafUmx6E=";
|
||||||
fetchSubmodules = true;
|
fetchSubmodules = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
|
|||||||
'';
|
'';
|
||||||
homepage = "http://www.jpj.net/~trevor/aumix.html";
|
homepage = "http://www.jpj.net/~trevor/aumix.html";
|
||||||
license = licenses.gpl2Plus;
|
license = licenses.gpl2Plus;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@ stdenv.mkDerivation rec {
|
|||||||
homepage = "https://gmpclient.org";
|
homepage = "https://gmpclient.org";
|
||||||
description = "GTK2 frontend for Music Player Daemon";
|
description = "GTK2 frontend for Music Player Daemon";
|
||||||
license = licenses.gpl2;
|
license = licenses.gpl2;
|
||||||
maintainers = [];
|
maintainers = [ ];
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -66,6 +66,6 @@ stdenv.mkDerivation rec {
|
|||||||
license = licenses.asl20;
|
license = licenses.asl20;
|
||||||
# currently broken on i686-linux and aarch64-linux due to other nixpkgs dependencies
|
# currently broken on i686-linux and aarch64-linux due to other nixpkgs dependencies
|
||||||
platforms = [ "x86_64-linux" ];
|
platforms = [ "x86_64-linux" ];
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
|
|||||||
homepage = "https://github.com/jagrosh/MusicBot";
|
homepage = "https://github.com/jagrosh/MusicBot";
|
||||||
sourceProvenance = with sourceTypes; [ binaryBytecode ];
|
sourceProvenance = with sourceTypes; [ binaryBytecode ];
|
||||||
license = licenses.asl20;
|
license = licenses.asl20;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
inherit (jre_headless.meta) platforms;
|
inherit (jre_headless.meta) platforms;
|
||||||
mainProgram = "JMusicBot";
|
mainProgram = "JMusicBot";
|
||||||
};
|
};
|
||||||
|
@ -26,7 +26,7 @@ stdenv.mkDerivation rec {
|
|||||||
description = "Tracker music player for the terminal";
|
description = "Tracker music player for the terminal";
|
||||||
homepage = "http://mikmod.shlomifish.org/";
|
homepage = "http://mikmod.shlomifish.org/";
|
||||||
license = lib.licenses.gpl2Plus;
|
license = lib.licenses.gpl2Plus;
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = with lib.platforms; linux;
|
platforms = with lib.platforms; linux;
|
||||||
mainProgram = "mikmod";
|
mainProgram = "mikmod";
|
||||||
};
|
};
|
||||||
|
@ -20,7 +20,7 @@ pythonPackages.buildPythonApplication rec {
|
|||||||
homepage = "https://github.com/martijnboland/moped";
|
homepage = "https://github.com/martijnboland/moped";
|
||||||
description = "Web client for Mopidy";
|
description = "Web client for Mopidy";
|
||||||
license = licenses.mit;
|
license = licenses.mit;
|
||||||
maintainers = [];
|
maintainers = [ ];
|
||||||
hydraPlatforms = [];
|
hydraPlatforms = [];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,6 @@ pythonPackages.buildPythonApplication rec {
|
|||||||
description = "Mopidy web client with Snapcast support";
|
description = "Mopidy web client with Snapcast support";
|
||||||
homepage = "https://github.com/cristianpb/muse";
|
homepage = "https://github.com/cristianpb/muse";
|
||||||
license = licenses.asl20;
|
license = licenses.asl20;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,6 @@ pythonPackages.buildPythonApplication rec {
|
|||||||
homepage = "https://github.com/pimusicbox/mopidy-musicbox-webclient";
|
homepage = "https://github.com/pimusicbox/mopidy-musicbox-webclient";
|
||||||
changelog = "https://github.com/pimusicbox/mopidy-musicbox-webclient/blob/v${version}/CHANGELOG.rst";
|
changelog = "https://github.com/pimusicbox/mopidy-musicbox-webclient/blob/v${version}/CHANGELOG.rst";
|
||||||
license = licenses.asl20;
|
license = licenses.asl20;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,6 @@ pythonPackages.buildPythonApplication rec {
|
|||||||
homepage = "https://github.com/phijor/mopidy-notify";
|
homepage = "https://github.com/phijor/mopidy-notify";
|
||||||
description = "Mopidy extension for showing desktop notifications on track change";
|
description = "Mopidy extension for showing desktop notifications on track change";
|
||||||
license = licenses.asl20;
|
license = licenses.asl20;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,6 @@ python3Packages.buildPythonApplication rec {
|
|||||||
description = "Mopidy extension for playing music from tunein";
|
description = "Mopidy extension for playing music from tunein";
|
||||||
homepage = "https://github.com/kingosticks/mopidy-tunein";
|
homepage = "https://github.com/kingosticks/mopidy-tunein";
|
||||||
license = licenses.asl20;
|
license = licenses.asl20;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -67,6 +67,6 @@ python3.pkgs.buildPythonApplication rec {
|
|||||||
description = "Mopidy extension for playing music from YouTube";
|
description = "Mopidy extension for playing music from YouTube";
|
||||||
homepage = "https://github.com/natumbri/mopidy-youtube";
|
homepage = "https://github.com/natumbri/mopidy-youtube";
|
||||||
license = licenses.asl20;
|
license = licenses.asl20;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ buildNpmPackage rec {
|
|||||||
description = "Libre and modular OSC / MIDI controller";
|
description = "Libre and modular OSC / MIDI controller";
|
||||||
homepage = "https://openstagecontrol.ammd.net/";
|
homepage = "https://openstagecontrol.ammd.net/";
|
||||||
license = licenses.gpl3Only;
|
license = licenses.gpl3Only;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
mainProgram = "open-stage-control";
|
mainProgram = "open-stage-control";
|
||||||
};
|
};
|
||||||
|
@ -83,7 +83,7 @@ buildDotnetModule rec {
|
|||||||
# worldline resampler binary - no source is available (hence "unfree") but usage of the binary is MIT
|
# worldline resampler binary - no source is available (hence "unfree") but usage of the binary is MIT
|
||||||
unfreeRedistributable
|
unfreeRedistributable
|
||||||
];
|
];
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
platforms = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
|
||||||
mainProgram = "OpenUtau";
|
mainProgram = "OpenUtau";
|
||||||
};
|
};
|
||||||
|
@ -16,7 +16,7 @@ stdenv.mkDerivation rec {
|
|||||||
description = "Tools to work with opus encoded audio streams";
|
description = "Tools to work with opus encoded audio streams";
|
||||||
homepage = "https://www.opus-codec.org/";
|
homepage = "https://www.opus-codec.org/";
|
||||||
license = lib.licenses.bsd2;
|
license = lib.licenses.bsd2;
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = with lib.platforms; unix;
|
platforms = with lib.platforms; unix;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,56 +1,72 @@
|
|||||||
{ fetchurl
|
{
|
||||||
, lib
|
fetchFromGitLab,
|
||||||
, stdenv
|
lib,
|
||||||
, pkg-config
|
stdenv,
|
||||||
, intltool
|
pkg-config,
|
||||||
, libpulseaudio
|
intltool,
|
||||||
, gtkmm3
|
libpulseaudio,
|
||||||
, libsigcxx
|
gtkmm4,
|
||||||
, libcanberra-gtk3
|
libsigcxx,
|
||||||
, json-glib
|
# Since version 6.0, libcanberra is optional
|
||||||
, adwaita-icon-theme
|
withLibcanberra ? true,
|
||||||
, wrapGAppsHook3
|
libcanberra-gtk3,
|
||||||
|
json-glib,
|
||||||
|
adwaita-icon-theme,
|
||||||
|
wrapGAppsHook4,
|
||||||
|
meson,
|
||||||
|
ninja,
|
||||||
|
libpressureaudio,
|
||||||
}:
|
}:
|
||||||
|
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
pname = "pavucontrol";
|
pname = "pavucontrol";
|
||||||
version = "5.0";
|
version = "6.0";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchFromGitLab {
|
||||||
url = "https://freedesktop.org/software/pulseaudio/${pname}/${pname}-${version}.tar.xz";
|
domain = "gitlab.freedesktop.org";
|
||||||
sha256 = "sha256-zityw7XxpwrQ3xndgXUPlFW9IIcNHTo20gU2ry6PTno=";
|
owner = "pulseaudio";
|
||||||
|
repo = "pavucontrol";
|
||||||
|
rev = "refs/tags/v${finalAttrs.version}";
|
||||||
|
hash = "sha256-nxzFvD/KUevIJOw9jgcr0Hfvg7KiSOmTBfKN3jLu3Cg=";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
libpulseaudio
|
libpulseaudio
|
||||||
gtkmm3
|
gtkmm4
|
||||||
libsigcxx
|
libsigcxx
|
||||||
libcanberra-gtk3
|
(lib.optionals withLibcanberra libcanberra-gtk3)
|
||||||
json-glib
|
json-glib
|
||||||
adwaita-icon-theme
|
adwaita-icon-theme
|
||||||
|
libpressureaudio
|
||||||
];
|
];
|
||||||
|
|
||||||
nativeBuildInputs = [ pkg-config intltool wrapGAppsHook3 ];
|
nativeBuildInputs = [
|
||||||
|
pkg-config
|
||||||
|
intltool
|
||||||
|
wrapGAppsHook4
|
||||||
|
meson
|
||||||
|
ninja
|
||||||
|
];
|
||||||
|
|
||||||
configureFlags = [ "--disable-lynx" ];
|
mesonFlags = [
|
||||||
|
"--prefix=${placeholder "out"}"
|
||||||
|
(lib.mesonBool "lynx" false)
|
||||||
|
];
|
||||||
|
|
||||||
enableParallelBuilding = true;
|
enableParallelBuilding = true;
|
||||||
|
|
||||||
meta = with lib; {
|
meta = {
|
||||||
|
changelog = "https://freedesktop.org/software/pulseaudio/pavucontrol/#news";
|
||||||
description = "PulseAudio Volume Control";
|
description = "PulseAudio Volume Control";
|
||||||
|
homepage = "http://freedesktop.org/software/pulseaudio/pavucontrol/";
|
||||||
|
license = lib.licenses.gpl2Plus;
|
||||||
longDescription = ''
|
longDescription = ''
|
||||||
PulseAudio Volume Control (pavucontrol) provides a GTK
|
PulseAudio Volume Control (pavucontrol) provides a GTK
|
||||||
graphical user interface to connect to a PulseAudio server and
|
graphical user interface to connect to a PulseAudio server and
|
||||||
easily control the volume of all clients, sinks, etc.
|
easily control the volume of all clients, sinks, etc.
|
||||||
'';
|
'';
|
||||||
|
|
||||||
homepage = "http://freedesktop.org/software/pulseaudio/pavucontrol/";
|
|
||||||
|
|
||||||
license = lib.licenses.gpl2Plus;
|
|
||||||
|
|
||||||
maintainers = with maintainers; [ abbradar ];
|
|
||||||
platforms = platforms.linux;
|
|
||||||
mainProgram = "pavucontrol";
|
mainProgram = "pavucontrol";
|
||||||
|
maintainers = with lib.maintainers; [ abbradar ];
|
||||||
|
platforms = lib.platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
})
|
||||||
|
@ -16,7 +16,7 @@ stdenv.mkDerivation {
|
|||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
homepage = "https://www.parabola.me.uk/alsa/pmidi.html";
|
homepage = "https://www.parabola.me.uk/alsa/pmidi.html";
|
||||||
description = "Straightforward command line program to play midi files through the ALSA sequencer";
|
description = "Straightforward command line program to play midi files through the ALSA sequencer";
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
license = licenses.gpl2;
|
license = licenses.gpl2;
|
||||||
mainProgram = "pmidi";
|
mainProgram = "pmidi";
|
||||||
};
|
};
|
||||||
|
@ -56,7 +56,7 @@ mkDerivation rec {
|
|||||||
description = "Cross-platform Milkdrop-compatible music visualizer";
|
description = "Cross-platform Milkdrop-compatible music visualizer";
|
||||||
license = lib.licenses.lgpl21;
|
license = lib.licenses.lgpl21;
|
||||||
platforms = lib.platforms.unix;
|
platforms = lib.platforms.unix;
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
longDescription = ''
|
longDescription = ''
|
||||||
The open-source project that reimplements the esteemed Winamp Milkdrop by Geiss in a more modern, cross-platform reusable library.
|
The open-source project that reimplements the esteemed Winamp Milkdrop by Geiss in a more modern, cross-platform reusable library.
|
||||||
Read an audio input and produces mesmerizing visuals, detecting tempo, and rendering advanced equations into a limitless array of user-contributed visualizations.
|
Read an audio input and produces mesmerizing visuals, detecting tempo, and rendering advanced equations into a limitless array of user-contributed visualizations.
|
||||||
|
@ -104,7 +104,7 @@ in stdenv.mkDerivation rec {
|
|||||||
mainProgram = "pulseeffects";
|
mainProgram = "pulseeffects";
|
||||||
homepage = "https://github.com/wwmm/pulseeffects";
|
homepage = "https://github.com/wwmm/pulseeffects";
|
||||||
license = licenses.gpl3Plus;
|
license = licenses.gpl3Plus;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
557
pkgs/applications/audio/pwvucontrol/Cargo.lock
generated
557
pkgs/applications/audio/pwvucontrol/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -32,21 +32,21 @@ let
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
in
|
in
|
||||||
stdenv.mkDerivation rec {
|
stdenv.mkDerivation (finalAttrs: {
|
||||||
pname = "pwvucontrol";
|
pname = "pwvucontrol";
|
||||||
version = "0.4.2";
|
version = "0.4.5";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "saivert";
|
owner = "saivert";
|
||||||
repo = "pwvucontrol";
|
repo = "pwvucontrol";
|
||||||
rev = version;
|
rev = "refs/tags/${finalAttrs.version}";
|
||||||
hash = "sha256-cWNWdCMk9hF8Nzq2UFBEKSx1zS8JlplMG7B5gv7BaZA=";
|
hash = "sha256-s4sop1qmqPVOGX7erRfClUUcixNhi+wUY5MXSmv+zVk=";
|
||||||
};
|
};
|
||||||
|
|
||||||
cargoDeps = rustPlatform.importCargoLock {
|
cargoDeps = rustPlatform.importCargoLock {
|
||||||
lockFile = ./Cargo.lock;
|
lockFile = ./Cargo.lock;
|
||||||
outputHashes = {
|
outputHashes = {
|
||||||
"wireplumber-0.1.0" = "sha256-r3p4OpmMgiFgjn1Fj4LeMOhx6R2UWollIdJRy/0kiNM=";
|
"wireplumber-0.1.0" = "sha256-ocagwmjyhfx6n/9xKxF2vhylqy2HunKQRx3eMo6m/l4=";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -73,12 +73,16 @@ stdenv.mkDerivation rec {
|
|||||||
wireplumber_0_4
|
wireplumber_0_4
|
||||||
];
|
];
|
||||||
|
|
||||||
meta = with lib; {
|
meta = {
|
||||||
description = "Pipewire Volume Control";
|
description = "Pipewire Volume Control";
|
||||||
homepage = "https://github.com/saivert/pwvucontrol";
|
homepage = "https://github.com/saivert/pwvucontrol";
|
||||||
license = licenses.gpl3Plus;
|
license = lib.licenses.gpl3Plus;
|
||||||
maintainers = with maintainers; [ figsoda Guanran928 ];
|
maintainers = with lib.maintainers; [
|
||||||
|
figsoda
|
||||||
|
Guanran928
|
||||||
|
johnrtitor
|
||||||
|
];
|
||||||
mainProgram = "pwvucontrol";
|
mainProgram = "pwvucontrol";
|
||||||
platforms = platforms.linux;
|
platforms = lib.platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
})
|
||||||
|
@ -105,7 +105,7 @@ stdenv.mkDerivation rec {
|
|||||||
description = "Internet radio player for linux";
|
description = "Internet radio player for linux";
|
||||||
homepage = "https://github.com/ebruck/radiotray-ng";
|
homepage = "https://github.com/ebruck/radiotray-ng";
|
||||||
license = licenses.gpl3;
|
license = licenses.gpl3;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ stdenv.mkDerivation rec {
|
|||||||
homepage = "https://ccrma.stanford.edu/software/snd/";
|
homepage = "https://ccrma.stanford.edu/software/snd/";
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
license = licenses.free;
|
license = licenses.free;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
mainProgram = "snd";
|
mainProgram = "snd";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ stdenv.mkDerivation rec {
|
|||||||
description = "Next generation modular control surface";
|
description = "Next generation modular control surface";
|
||||||
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||||
license = licenses.unfree;
|
license = licenses.unfree;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = [ "aarch64-linux" "armv7l-linux" "x86_64-linux" ];
|
platforms = [ "aarch64-linux" "armv7l-linux" "x86_64-linux" ];
|
||||||
mainProgram = "TouchOSC";
|
mainProgram = "TouchOSC";
|
||||||
};
|
};
|
||||||
|
@ -5,23 +5,23 @@
|
|||||||
|
|
||||||
rustPlatform.buildRustPackage rec {
|
rustPlatform.buildRustPackage rec {
|
||||||
pname = "restic-integrity";
|
pname = "restic-integrity";
|
||||||
version = "1.2.2";
|
version = "1.3.0";
|
||||||
|
|
||||||
src = fetchFromGitea {
|
src = fetchFromGitea {
|
||||||
domain = "git.nwex.de";
|
domain = "git.nwex.de";
|
||||||
owner = "networkException";
|
owner = "networkException";
|
||||||
repo = "restic-integrity";
|
repo = "restic-integrity";
|
||||||
rev = version;
|
rev = version;
|
||||||
hash = "sha256-QiISJCxxJH8wQeH/klB48POn6W9juQmIMCLGzGSyl6w=";
|
hash = "sha256-mryHePqfEawW/vLgxfm+eh4oSbcALhxvRid4kF9klTs=";
|
||||||
};
|
};
|
||||||
|
|
||||||
cargoHash = "sha256-GxehJjDd0AHbEc8kPWyLXAOPbrPCT59LddAL1ydnT5g=";
|
cargoHash = "sha256-0BvB1ijsppblEC2PNLfVt+sgM4wTdSLZ/RoDH4JrQy4=";
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
description = "CLI tool to check the integrity of a restic repository without unlocking it";
|
description = "CLI tool to check the integrity of a restic repository without unlocking it";
|
||||||
homepage = "https://git.nwex.de/networkException/restic-integrity";
|
homepage = "https://git.nwex.de/networkException/restic-integrity";
|
||||||
license = with licenses; [ bsd2 ];
|
license = with licenses; [ bsd2 ];
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = with maintainers; [ networkexception ];
|
||||||
mainProgram = "restic-integrity";
|
mainProgram = "restic-integrity";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ buildGoModule rec {
|
|||||||
homepage = "https://decred.org";
|
homepage = "https://decred.org";
|
||||||
description = "Secure Decred wallet daemon written in Go (golang)";
|
description = "Secure Decred wallet daemon written in Go (golang)";
|
||||||
license = with lib.licenses; [ isc ];
|
license = with lib.licenses; [ isc ];
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
mainProgram = "dcrctl";
|
mainProgram = "dcrctl";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ stdenv.mkDerivation rec {
|
|||||||
description = "Decentralized open source information registration and transfer system based on the Bitcoin cryptocurrency";
|
description = "Decentralized open source information registration and transfer system based on the Bitcoin cryptocurrency";
|
||||||
homepage = "https://namecoin.org";
|
homepage = "https://namecoin.org";
|
||||||
license = licenses.mit;
|
license = licenses.mit;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -101,7 +101,7 @@ stdenv.mkDerivation rec {
|
|||||||
'';
|
'';
|
||||||
homepage = "https://wownero.org/";
|
homepage = "https://wownero.org/";
|
||||||
license = licenses.bsd3;
|
license = licenses.bsd3;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
|
|||||||
homepage = "https://bviplus.sourceforge.net";
|
homepage = "https://bviplus.sourceforge.net";
|
||||||
license = licenses.gpl3;
|
license = licenses.gpl3;
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
mainProgram = "bviplus";
|
mainProgram = "bviplus";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -22,7 +22,7 @@ formats commits for you.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{ lib, stdenv, texinfo, writeText, gcc, pkgs, buildPackages }:
|
{ lib, pkgs, buildPackages }:
|
||||||
|
|
||||||
self: let
|
self: let
|
||||||
|
|
||||||
@ -32,11 +32,6 @@ self: let
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
elpaBuild = import ../build-support/elpa.nix {
|
|
||||||
inherit lib stdenv texinfo writeText gcc;
|
|
||||||
inherit (self) emacs;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Use custom elpa url fetcher with fallback/uncompress
|
# Use custom elpa url fetcher with fallback/uncompress
|
||||||
fetchurl = buildPackages.callPackage ./fetchelpa.nix { };
|
fetchurl = buildPackages.callPackage ./fetchelpa.nix { };
|
||||||
|
|
||||||
@ -99,6 +94,6 @@ self: let
|
|||||||
|
|
||||||
elpaDevelPackages = super // overrides;
|
elpaDevelPackages = super // overrides;
|
||||||
|
|
||||||
in elpaDevelPackages // { inherit elpaBuild; });
|
in elpaDevelPackages);
|
||||||
|
|
||||||
in generateElpa { }
|
in generateElpa { }
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -22,7 +22,7 @@ formats commits for you.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
{ lib, stdenv, texinfo, writeText, gcc, pkgs, buildPackages }:
|
{ lib, pkgs, buildPackages }:
|
||||||
|
|
||||||
self: let
|
self: let
|
||||||
|
|
||||||
@ -32,11 +32,6 @@ self: let
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
elpaBuild = import ../build-support/elpa.nix {
|
|
||||||
inherit lib stdenv texinfo writeText gcc;
|
|
||||||
inherit (self) emacs;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Use custom elpa url fetcher with fallback/uncompress
|
# Use custom elpa url fetcher with fallback/uncompress
|
||||||
fetchurl = buildPackages.callPackage ./fetchelpa.nix { };
|
fetchurl = buildPackages.callPackage ./fetchelpa.nix { };
|
||||||
|
|
||||||
@ -188,7 +183,7 @@ self: let
|
|||||||
|
|
||||||
elpaPackages = super // overrides;
|
elpaPackages = super // overrides;
|
||||||
|
|
||||||
in elpaPackages // { inherit elpaBuild; });
|
in elpaPackages);
|
||||||
|
|
||||||
in
|
in
|
||||||
generateElpa { }
|
generateElpa { }
|
||||||
|
@ -4,8 +4,8 @@ let
|
|||||||
src = pkgs.fetchFromGitHub {
|
src = pkgs.fetchFromGitHub {
|
||||||
owner = "nix-community";
|
owner = "nix-community";
|
||||||
repo = "emacs2nix";
|
repo = "emacs2nix";
|
||||||
rev = "e5389c3d7be9c3af135f022d86c61767d41c364f";
|
rev = "cf706a3e7a4c56be2d4dc83cc453810dfa023967";
|
||||||
sha256 = "sha256-mueyrGXgbjvmXQqPRuLUJdJuB5dqiGGdzCQ74Ud+Z9Y=";
|
hash = "sha256-jVbRcjNNKfuOIz76EMbrQxnKCN9d9C+szrk0zC8DaNE=";
|
||||||
fetchSubmodules = true;
|
fetchSubmodules = true;
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
@ -13,6 +13,7 @@ pkgs.mkShell {
|
|||||||
|
|
||||||
packages = [
|
packages = [
|
||||||
pkgs.bash
|
pkgs.bash
|
||||||
|
pkgs.nixfmt-rfc-style
|
||||||
];
|
];
|
||||||
|
|
||||||
EMACS2NIX = src;
|
EMACS2NIX = src;
|
||||||
|
@ -1,63 +1,111 @@
|
|||||||
lib: self:
|
lib: self:
|
||||||
|
|
||||||
let
|
let
|
||||||
|
inherit (lib) elemAt;
|
||||||
|
|
||||||
fetcherGenerators = { repo ? null
|
matchForgeRepo = builtins.match "(.+)/(.+)";
|
||||||
, url ? null
|
|
||||||
, ... }:
|
fetchers = lib.mapAttrs (_: fetcher: self.callPackage fetcher { }) {
|
||||||
{ sha256
|
github =
|
||||||
, commit
|
{ fetchFromGitHub }:
|
||||||
, ...}: {
|
{
|
||||||
github = self.callPackage ({ fetchFromGitHub }:
|
repo ? null,
|
||||||
fetchFromGitHub {
|
...
|
||||||
owner = lib.head (lib.splitString "/" repo);
|
}:
|
||||||
repo = lib.head (lib.tail (lib.splitString "/" repo));
|
{ sha256, commit, ... }:
|
||||||
rev = commit;
|
let
|
||||||
inherit sha256;
|
m = matchForgeRepo repo;
|
||||||
}
|
in
|
||||||
) {};
|
assert m != null;
|
||||||
gitlab = self.callPackage ({ fetchFromGitLab }:
|
fetchFromGitHub {
|
||||||
fetchFromGitLab {
|
owner = elemAt m 0;
|
||||||
owner = lib.head (lib.splitString "/" repo);
|
repo = elemAt m 1;
|
||||||
repo = lib.head (lib.tail (lib.splitString "/" repo));
|
rev = commit;
|
||||||
rev = commit;
|
inherit sha256;
|
||||||
inherit sha256;
|
};
|
||||||
}
|
|
||||||
) {};
|
gitlab =
|
||||||
git = self.callPackage ({ fetchgit }:
|
{ fetchFromGitLab }:
|
||||||
(fetchgit {
|
{
|
||||||
rev = commit;
|
repo ? null,
|
||||||
inherit sha256 url;
|
...
|
||||||
}).overrideAttrs(_: {
|
}:
|
||||||
GIT_SSL_NO_VERIFY = true;
|
{ sha256, commit, ... }:
|
||||||
})
|
let
|
||||||
) {};
|
m = matchForgeRepo repo;
|
||||||
bitbucket = self.callPackage ({ fetchhg }:
|
in
|
||||||
fetchhg {
|
assert m != null;
|
||||||
rev = commit;
|
fetchFromGitLab {
|
||||||
url = "https://bitbucket.com/${repo}";
|
owner = elemAt m 0;
|
||||||
inherit sha256;
|
repo = elemAt m 1;
|
||||||
}
|
rev = commit;
|
||||||
) {};
|
inherit sha256;
|
||||||
hg = self.callPackage ({ fetchhg }:
|
};
|
||||||
fetchhg {
|
|
||||||
rev = commit;
|
git = (
|
||||||
inherit sha256 url;
|
{ fetchgit }:
|
||||||
}
|
{
|
||||||
) {};
|
url ? null,
|
||||||
sourcehut = self.callPackage ({ fetchzip }:
|
...
|
||||||
fetchzip {
|
}:
|
||||||
url = "https://git.sr.ht/~${repo}/archive/${commit}.tar.gz";
|
{ sha256, commit, ... }:
|
||||||
inherit sha256;
|
(fetchgit {
|
||||||
}
|
rev = commit;
|
||||||
) {};
|
inherit sha256 url;
|
||||||
codeberg = self.callPackage ({ fetchzip }:
|
}).overrideAttrs(_: {
|
||||||
fetchzip {
|
GIT_SSL_NO_VERIFY = true;
|
||||||
url = "https://codeberg.org/${repo}/archive/${commit}.tar.gz";
|
})
|
||||||
inherit sha256;
|
);
|
||||||
}
|
|
||||||
) {};
|
bitbucket =
|
||||||
};
|
{ fetchhg }:
|
||||||
|
{
|
||||||
|
repo ? null,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{ sha256, commit, ... }:
|
||||||
|
fetchhg {
|
||||||
|
rev = commit;
|
||||||
|
url = "https://bitbucket.com/${repo}";
|
||||||
|
inherit sha256;
|
||||||
|
};
|
||||||
|
|
||||||
|
hg =
|
||||||
|
{ fetchhg }:
|
||||||
|
{
|
||||||
|
url ? null,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{ sha256, commit, ... }:
|
||||||
|
fetchhg {
|
||||||
|
rev = commit;
|
||||||
|
inherit sha256 url;
|
||||||
|
};
|
||||||
|
|
||||||
|
sourcehut =
|
||||||
|
{ fetchzip }:
|
||||||
|
{
|
||||||
|
repo ? null,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{ sha256, commit, ... }:
|
||||||
|
fetchzip {
|
||||||
|
url = "https://git.sr.ht/~${repo}/archive/${commit}.tar.gz";
|
||||||
|
inherit sha256;
|
||||||
|
};
|
||||||
|
|
||||||
|
codeberg =
|
||||||
|
{ fetchzip }:
|
||||||
|
{
|
||||||
|
repo ? null,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{ sha256, commit, ... }:
|
||||||
|
fetchzip {
|
||||||
|
url = "https://codeberg.org/${repo}/archive/${commit}.tar.gz";
|
||||||
|
inherit sha256;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
@ -88,7 +136,7 @@ in {
|
|||||||
(builtins.filter (n: n >= 0) version)));
|
(builtins.filter (n: n >= 0) version)));
|
||||||
# TODO: Broken should not result in src being null (hack to avoid eval errors)
|
# TODO: Broken should not result in src being null (hack to avoid eval errors)
|
||||||
src = if (sha256 == null || broken) then null else
|
src = if (sha256 == null || broken) then null else
|
||||||
lib.getAttr fetcher (fetcherGenerators args sourceArgs);
|
fetchers.${fetcher} args sourceArgs;
|
||||||
recipe = if commit == null then null else
|
recipe = if commit == null then null else
|
||||||
fetchurl {
|
fetchurl {
|
||||||
name = pname + "-recipe";
|
name = pname + "-recipe";
|
||||||
|
@ -36,6 +36,7 @@ melpaBuild {
|
|||||||
license = lib.licenses.mit;
|
license = lib.licenses.mit;
|
||||||
maintainers = with lib.maintainers; [ bbigras ];
|
maintainers = with lib.maintainers; [ bbigras ];
|
||||||
platforms = [
|
platforms = [
|
||||||
|
"aarch64-darwin"
|
||||||
"x86_64-darwin"
|
"x86_64-darwin"
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
"x86_64-windows"
|
"x86_64-windows"
|
||||||
|
@ -24,6 +24,6 @@ melpaBuild {
|
|||||||
description = "Major mode for editing LIGO source code";
|
description = "Major mode for editing LIGO source code";
|
||||||
homepage = "https://gitlab.com/ligolang/ligo";
|
homepage = "https://gitlab.com/ligolang/ligo";
|
||||||
license = lib.licenses.mit;
|
license = lib.licenses.mit;
|
||||||
maintainers = with lib.maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -29,13 +29,13 @@ let
|
|||||||
in
|
in
|
||||||
melpaBuild {
|
melpaBuild {
|
||||||
pname = "lsp-bridge";
|
pname = "lsp-bridge";
|
||||||
version = "0-unstable-2024-07-14";
|
version = "0-unstable-2024-07-27";
|
||||||
|
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
owner = "manateelazycat";
|
owner = "manateelazycat";
|
||||||
repo = "lsp-bridge";
|
repo = "lsp-bridge";
|
||||||
rev = "023924926ae6adfbcf5458c350b90dea7c05d51b";
|
rev = "92d58ff0fb938ced513d690e0daadef74737e5d4";
|
||||||
hash = "sha256-59bl4YbKS3HgrGJlUfM3LPabxKuuE+dT7CnVUJIl05k=";
|
hash = "sha256-qeoKPwK3qKcvUFchaQYCCQmSlXgN+Tt2kU+lXqiUwaw=";
|
||||||
};
|
};
|
||||||
|
|
||||||
patches = [
|
patches = [
|
||||||
|
@ -24,6 +24,6 @@ stdenv.mkDerivation rec {
|
|||||||
description = "Small session management for emacs";
|
description = "Small session management for emacs";
|
||||||
homepage = "https://emacs-session.sourceforge.net/";
|
homepage = "https://emacs-session.sourceforge.net/";
|
||||||
license = licenses.gpl2;
|
license = licenses.gpl2;
|
||||||
maintainers = with maintainers; [ ];
|
maintainers = [ ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user