Merge staging-next into staging

This commit is contained in:
github-actions[bot] 2023-08-28 18:01:36 +00:00 committed by GitHub
commit 974a40b58e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
48 changed files with 1011 additions and 1406 deletions

View File

@ -21,6 +21,7 @@ let
{ name = "filesystem"; description = "filesystem functions"; }
{ name = "sources"; description = "source filtering functions"; }
{ name = "cli"; description = "command-line serialization functions"; }
{ name = "gvariant"; description = "GVariant formatted string serialization functions"; }
];
};

View File

@ -41,6 +41,7 @@ let
# serialization
cli = callLibs ./cli.nix;
gvariant = callLibs ./gvariant.nix;
generators = callLibs ./generators.nix;
# misc

View File

@ -230,6 +230,14 @@ rec {
in
toINI_ (gitFlattenAttrs attrs);
# mkKeyValueDefault wrapper that handles dconf INI quirks.
# The main differences of the format is that it requires strings to be quoted.
mkDconfKeyValue = mkKeyValueDefault { mkValueString = v: toString (lib.gvariant.mkValue v); } "=";
# Generates INI in dconf keyfile style. See https://help.gnome.org/admin/system-admin-guide/stable/dconf-keyfiles.html.en
# for details.
toDconfINI = toINI { mkKeyValue = mkDconfKeyValue; };
/* Generates JSON from an arbitrary (non-function) value.
* For more information see the documentation of the builtin.
*/

290
lib/gvariant.nix Normal file
View File

@ -0,0 +1,290 @@
# This file is based on https://github.com/nix-community/home-manager
# Copyright (c) 2017-2022 Home Manager contributors
#
{ lib }:
/* A partial and basic implementation of GVariant formatted strings.
See https://docs.gtk.org/glib/gvariant-format-strings.html for detauls.
Note, this API is not considered fully stable and it might therefore
change in backwards incompatible ways without prior notice.
*/
let
inherit (lib)
concatMapStringsSep concatStrings escape head replaceStrings;
mkPrimitive = t: v: {
_type = "gvariant";
type = t;
value = v;
__toString = self: "@${self.type} ${toString self.value}"; # https://docs.gtk.org/glib/gvariant-text.html
};
type = {
arrayOf = t: "a${t}";
maybeOf = t: "m${t}";
tupleOf = ts: "(${concatStrings ts})";
dictionaryEntryOf = nameType: valueType: "{${nameType}${valueType}}";
string = "s";
boolean = "b";
uchar = "y";
int16 = "n";
uint16 = "q";
int32 = "i";
uint32 = "u";
int64 = "x";
uint64 = "t";
double = "d";
variant = "v";
};
/* Check if a value is a GVariant value
Type:
isGVariant :: Any -> Bool
*/
isGVariant = v: v._type or "" == "gvariant";
in
rec {
inherit type isGVariant;
/* Returns the GVariant value that most closely matches the given Nix value.
If no GVariant value can be found unambiguously then error is thrown.
Type:
mkValue :: Any -> gvariant
*/
mkValue = v:
if builtins.isBool v then
mkBoolean v
else if builtins.isFloat v then
mkDouble v
else if builtins.isString v then
mkString v
else if builtins.isList v then
mkArray v
else if isGVariant v then
v
else
throw "The GVariant type of ${v} can't be inferred.";
/* Returns the GVariant array from the given type of the elements and a Nix list.
Type:
mkArray :: [Any] -> gvariant
Example:
# Creating a string array
lib.gvariant.mkArray [ "a" "b" "c" ]
*/
mkArray = elems:
let
vs = map mkValue (lib.throwIf (elems == [ ]) "Please create empty array with mkEmptyArray." elems);
elemType = lib.throwIfNot (lib.all (t: (head vs).type == t) (map (v: v.type) vs))
"Elements in a list should have same type."
(head vs).type;
in
mkPrimitive (type.arrayOf elemType) vs // {
__toString = self:
"@${self.type} [${concatMapStringsSep "," toString self.value}]";
};
/* Returns the GVariant array from the given empty Nix list.
Type:
mkEmptyArray :: gvariant.type -> gvariant
Example:
# Creating an empty string array
lib.gvariant.mkEmptyArray (lib.gvariant.type.string)
*/
mkEmptyArray = elemType: mkPrimitive (type.arrayOf elemType) [ ] // {
__toString = self: "@${self.type} []";
};
/* Returns the GVariant variant from the given Nix value. Variants are containers
of different GVariant type.
Type:
mkVariant :: Any -> gvariant
Example:
lib.gvariant.mkArray [
(lib.gvariant.mkVariant "a string")
(lib.gvariant.mkVariant (lib.gvariant.mkInt32 1))
]
*/
mkVariant = elem:
let gvarElem = mkValue elem;
in mkPrimitive type.variant gvarElem // {
__toString = self: "<${toString self.value}>";
};
/* Returns the GVariant dictionary entry from the given key and value.
Type:
mkDictionaryEntry :: String -> Any -> gvariant
Example:
# A dictionary describing an Epiphanys search provider
[
(lib.gvariant.mkDictionaryEntry "url" (lib.gvariant.mkVariant "https://duckduckgo.com/?q=%s&t=epiphany"))
(lib.gvariant.mkDictionaryEntry "bang" (lib.gvariant.mkVariant "!d"))
(lib.gvariant.mkDictionaryEntry "name" (lib.gvariant.mkVariant "DuckDuckGo"))
]
*/
mkDictionaryEntry =
# The key of the entry
name:
# The value of the entry
value:
let
name' = mkValue name;
value' = mkValue value;
dictionaryType = type.dictionaryEntryOf name'.type value'.type;
in
mkPrimitive dictionaryType { inherit name value; } // {
__toString = self: "@${self.type} {${name'},${value'}}";
};
/* Returns the GVariant maybe from the given element type.
Type:
mkMaybe :: gvariant.type -> Any -> gvariant
*/
mkMaybe = elemType: elem:
mkPrimitive (type.maybeOf elemType) elem // {
__toString = self:
if self.value == null then
"@${self.type} nothing"
else
"just ${toString self.value}";
};
/* Returns the GVariant nothing from the given element type.
Type:
mkNothing :: gvariant.type -> gvariant
*/
mkNothing = elemType: mkMaybe elemType null;
/* Returns the GVariant just from the given Nix value.
Type:
mkJust :: Any -> gvariant
*/
mkJust = elem: let gvarElem = mkValue elem; in mkMaybe gvarElem.type gvarElem;
/* Returns the GVariant tuple from the given Nix list.
Type:
mkTuple :: [Any] -> gvariant
*/
mkTuple = elems:
let
gvarElems = map mkValue elems;
tupleType = type.tupleOf (map (e: e.type) gvarElems);
in
mkPrimitive tupleType gvarElems // {
__toString = self:
"@${self.type} (${concatMapStringsSep "," toString self.value})";
};
/* Returns the GVariant boolean from the given Nix bool value.
Type:
mkBoolean :: Bool -> gvariant
*/
mkBoolean = v:
mkPrimitive type.boolean v // {
__toString = self: if self.value then "true" else "false";
};
/* Returns the GVariant string from the given Nix string value.
Type:
mkString :: String -> gvariant
*/
mkString = v:
let sanitize = s: replaceStrings [ "\n" ] [ "\\n" ] (escape [ "'" "\\" ] s);
in mkPrimitive type.string v // {
__toString = self: "'${sanitize self.value}'";
};
/* Returns the GVariant object path from the given Nix string value.
Type:
mkObjectpath :: String -> gvariant
*/
mkObjectpath = v:
mkPrimitive type.string v // {
__toString = self: "objectpath '${escape [ "'" ] self.value}'";
};
/* Returns the GVariant uchar from the given Nix int value.
Type:
mkUchar :: Int -> gvariant
*/
mkUchar = mkPrimitive type.uchar;
/* Returns the GVariant int16 from the given Nix int value.
Type:
mkInt16 :: Int -> gvariant
*/
mkInt16 = mkPrimitive type.int16;
/* Returns the GVariant uint16 from the given Nix int value.
Type:
mkUint16 :: Int -> gvariant
*/
mkUint16 = mkPrimitive type.uint16;
/* Returns the GVariant int32 from the given Nix int value.
Type:
mkInt32 :: Int -> gvariant
*/
mkInt32 = v:
mkPrimitive type.int32 v // {
__toString = self: toString self.value;
};
/* Returns the GVariant uint32 from the given Nix int value.
Type:
mkUint32 :: Int -> gvariant
*/
mkUint32 = mkPrimitive type.uint32;
/* Returns the GVariant int64 from the given Nix int value.
Type:
mkInt64 :: Int -> gvariant
*/
mkInt64 = mkPrimitive type.int64;
/* Returns the GVariant uint64 from the given Nix int value.
Type:
mkUint64 :: Int -> gvariant
*/
mkUint64 = mkPrimitive type.uint64;
/* Returns the GVariant double from the given Nix float value.
Type:
mkDouble :: Float -> gvariant
*/
mkDouble = v:
mkPrimitive type.double v // {
__toString = self: toString self.value;
};
}

View File

@ -0,0 +1,93 @@
{ config, lib, ... }:
let inherit (lib) concatStringsSep mapAttrsToList mkMerge mkOption types gvariant;
in {
options.examples = mkOption { type = types.attrsOf gvariant; };
config = {
examples = with gvariant;
mkMerge [
{ bool = true; }
{ bool = true; }
{ float = 3.14; }
{ int32 = mkInt32 (- 42); }
{ int32 = mkInt32 (- 42); }
{ uint32 = mkUint32 42; }
{ uint32 = mkUint32 42; }
{ int16 = mkInt16 (-42); }
{ int16 = mkInt16 (-42); }
{ uint16 = mkUint16 42; }
{ uint16 = mkUint16 42; }
{ int64 = mkInt64 (-42); }
{ int64 = mkInt64 (-42); }
{ uint64 = mkUint64 42; }
{ uint64 = mkUint64 42; }
{ array1 = [ "one" ]; }
{ array1 = mkArray [ "two" ]; }
{ array2 = mkArray [ (mkInt32 1) ]; }
{ array2 = mkArray [ (nkUint32 2) ]; }
{ emptyArray1 = [ ]; }
{ emptyArray2 = mkEmptyArray type.uint32; }
{ string = "foo"; }
{ string = "foo"; }
{
escapedString = ''
'\
'';
}
{ tuple = mkTuple [ (mkInt32 1) [ "foo" ] ]; }
{ maybe1 = mkNothing type.string; }
{ maybe2 = mkJust (mkUint32 4); }
{ variant1 = mkVariant "foo"; }
{ variant2 = mkVariant 42; }
{ dictionaryEntry = mkDictionaryEntry (mkInt32 1) [ "foo" ]; }
];
assertions = [
{
assertion = (
let
mkLine = n: v: "${n} = ${toString (gvariant.mkValue v)}";
result = concatStringsSep "\n" (mapAttrsToList mkLine config.examples);
in
result + "\n"
) == ''
array1 = @as ['one','two']
array2 = @au [1,2]
bool = true
dictionaryEntry = @{ias} {1,@as ['foo']}
emptyArray1 = @as []
emptyArray2 = @au []
escapedString = '\'\\\n'
float = 3.140000
int = -42
int16 = @n -42
int64 = @x -42
maybe1 = @ms nothing
maybe2 = just @u 4
string = 'foo'
tuple = @(ias) (1,@as ['foo'])
uint16 = @q 42
uint32 = @u 42
uint64 = @t 42
variant1 = @v <'foo'>
variant2 = @v <42>
'';
}
];
};
}

View File

@ -13888,6 +13888,16 @@
githubId = 33375;
name = "Peter Sanford";
};
pschmitt = {
email = "philipp@schmitt.co";
github = "pschmitt";
githubId = 37886;
name = "Philipp Schmitt";
matrix = "@pschmitt:one.ems.host";
keys = [{
fingerprint = "9FBF 2ABF FB37 F7F3 F502 44E5 DC43 9C47 EACB 17F9";
}];
};
pshirshov = {
email = "pshirshov@eml.cc";
github = "pshirshov";
@ -18631,6 +18641,12 @@
github = "XYenon";
githubId = 20698483;
};
xyven1 = {
name = "Xyven";
email = "nix@xyven.dev";
github = "xyven1";
githubId = 35360746;
};
xzfc = {
email = "xzfcpw@gmail.com";
github = "xzfc";

View File

@ -1,55 +1,217 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.dconf;
cfgDir = pkgs.symlinkJoin {
name = "dconf-system-config";
paths = map (x: "${x}/etc/dconf") cfg.packages;
postBuild = ''
mkdir -p $out/profile
mkdir -p $out/db
'' + (
concatStringsSep "\n" (
mapAttrsToList (
name: path: ''
ln -s ${path} $out/profile/${name}
''
) cfg.profiles
)
) + ''
${pkgs.dconf}/bin/dconf update $out/db
'';
# Compile keyfiles to dconf DB
compileDconfDb = dir: pkgs.runCommand "dconf-db"
{
nativeBuildInputs = [ (lib.getBin pkgs.dconf) ];
} "dconf compile $out ${dir}";
# Check if dconf keyfiles are valid
checkDconfKeyfiles = dir: pkgs.runCommand "check-dconf-keyfiles"
{
nativeBuildInputs = [ (lib.getBin pkgs.dconf) ];
} ''
if [[ -f ${dir} ]]; then
echo "dconf keyfiles should be a directory but a file is provided: ${dir}"
exit 1
fi
dconf compile db ${dir} || (
echo "The dconf keyfiles are invalid: ${dir}"
exit 1
)
cp -R ${dir} $out
'';
mkAllLocks = settings: lib.flatten (
lib.mapAttrsToList (k: v: lib.mapAttrsToList (k': _: "/${k}/${k'}") v) settings);
# Generate dconf DB from dconfDatabase and keyfiles
mkDconfDb = val: compileDconfDb (pkgs.symlinkJoin {
name = "nixos-generated-dconf-keyfiles";
paths = [
(pkgs.writeTextDir "nixos-generated-dconf-keyfiles" (lib.generators.toDconfINI val.settings))
(pkgs.writeTextDir "locks/nixos-generated-dconf-locks" (lib.concatStringsSep "\n"
(if val.lockAll then mkAllLocks val.settings else val.locks)
))
] ++ (map checkDconfKeyfiles val.keyfiles);
});
# Check if a dconf DB file is valid. The dconf cli doesn't return 1 when it can't
# open the database file so we have to check if the output is empty.
checkDconfDb = file: pkgs.runCommand "check-dconf-db"
{
nativeBuildInputs = [ (lib.getBin pkgs.dconf) ];
} ''
if [[ -d ${file} ]]; then
echo "dconf DB should be a file but a directory is provided: ${file}"
exit 1
fi
echo "file-db:${file}" > profile
DCONF_PROFILE=$(pwd)/profile dconf dump / > output 2> error
if [[ ! -s output ]] && [[ -s error ]]; then
cat error
echo "The dconf DB file is invalid: ${file}"
exit 1
fi
cp ${file} $out
'';
# Generate dconf profile
mkDconfProfile = name: value:
if lib.isDerivation value || lib.isPath value then
pkgs.runCommand "dconf-profile" { } ''
if [[ -d ${value} ]]; then
echo "Dconf profile should be a file but a directory is provided."
exit 1
fi
mkdir -p $out/etc/dconf/profile/
cp ${value} $out/etc/dconf/profile/${name}
''
else
pkgs.writeTextDir "etc/dconf/profile/${name}" (
lib.concatMapStrings (x: "${x}\n") ((
lib.optional value.enableUserDb "user-db:user"
) ++ (
map
(value:
let
db = if lib.isAttrs value && !lib.isDerivation value then mkDconfDb value else checkDconfDb value;
in
"file-db:${db}")
value.databases
))
);
dconfDatabase = with lib.types; submodule {
options = {
keyfiles = lib.mkOption {
type = listOf (oneOf [ path package ]);
default = [ ];
description = lib.mdDoc "A list of dconf keyfile directories.";
};
settings = lib.mkOption {
type = attrs;
default = { };
description = lib.mdDoc "An attrset used to generate dconf keyfile.";
example = literalExpression ''
with lib.gvariant;
{
"com/raggesilver/BlackBox" = {
scrollback-lines = mkUint32 10000;
theme-dark = "Tommorow Night";
};
}
'';
};
locks = lib.mkOption {
type = with lib.types; listOf str;
default = [ ];
description = lib.mdDoc ''
A list of dconf keys to be lockdown. This doesn't take effect if `lockAll`
is set.
'';
example = literalExpression ''
[ "/org/gnome/desktop/background/picture-uri" ]
'';
};
lockAll = lib.mkOption {
type = lib.types.bool;
default = false;
description = lib.mdDoc "Lockdown all dconf keys in `settings`.";
};
};
};
in
{
###### interface
options = {
programs.dconf = {
enable = mkEnableOption (lib.mdDoc "dconf");
profiles = mkOption {
type = types.attrsOf types.path;
default = {};
description = lib.mdDoc "Set of dconf profile files, installed at {file}`/etc/dconf/profiles/«name»`.";
internal = true;
dconfProfile = with lib.types; submodule {
options = {
enableUserDb = lib.mkOption {
type = bool;
default = true;
description = lib.mdDoc "Add `user-db:user` at the beginning of the profile.";
};
packages = mkOption {
type = types.listOf types.package;
default = [];
databases = lib.mkOption {
type = with lib.types; listOf (oneOf [
path
package
dconfDatabase
]);
default = [ ];
description = lib.mdDoc ''
List of data sources for the profile. An element can be an attrset,
or the path of an already compiled database. Each element is converted
to a file-db.
A key is searched from up to down and the first result takes the
priority. If a lock for a particular key is installed then the value from
the last database in the profile where the key is locked will be used.
This can be used to enforce mandatory settings.
'';
};
};
};
in
{
options = {
programs.dconf = {
enable = lib.mkEnableOption (lib.mdDoc "dconf");
profiles = lib.mkOption {
type = with lib.types; attrsOf (oneOf [
path
package
dconfProfile
]);
default = { };
description = lib.mdDoc ''
Attrset of dconf profiles. By default the `user` profile is used which
ends up in `/etc/dconf/profile/user`.
'';
example = lib.literalExpression ''
{
# A "user" profile with a database
user.databases = [
{
settings = { };
}
];
# A "bar" profile from a package
bar = pkgs.bar-dconf-profile;
# A "foo" profile from a path
foo = ''${./foo}
};
'';
};
packages = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [ ];
description = lib.mdDoc "A list of packages which provide dconf profiles and databases in {file}`/etc/dconf`.";
};
};
};
###### implementation
config = lib.mkIf (cfg.profiles != { } || cfg.enable) {
programs.dconf.packages = lib.mapAttrsToList mkDconfProfile cfg.profiles;
config = mkIf (cfg.profiles != {} || cfg.enable) {
environment.etc.dconf = mkIf (cfg.profiles != {} || cfg.packages != []) {
source = cfgDir;
environment.etc.dconf = lib.mkIf (cfg.packages != [ ]) {
source = pkgs.symlinkJoin {
name = "dconf-system-config";
paths = map (x: "${x}/etc/dconf") cfg.packages;
nativeBuildInputs = [ (lib.getBin pkgs.dconf) ];
postBuild = ''
if test -d $out/db; then
dconf update $out/db
fi
'';
};
};
services.dbus.packages = [ pkgs.dconf ];
@ -59,8 +221,9 @@ in
# For dconf executable
environment.systemPackages = [ pkgs.dconf ];
# Needed for unwrapped applications
environment.sessionVariables.GIO_EXTRA_MODULES = mkIf cfg.enable [ "${pkgs.dconf.lib}/lib/gio/modules" ];
environment.sessionVariables = lib.mkIf cfg.enable {
# Needed for unwrapped applications
GIO_EXTRA_MODULES = [ "${pkgs.dconf.lib}/lib/gio/modules" ];
};
};
}

View File

@ -231,40 +231,14 @@ in
systemd.user.services.dbus.wantedBy = [ "default.target" ];
programs.dconf.profiles.gdm =
let
customDconf = pkgs.writeTextFile {
name = "gdm-dconf";
destination = "/dconf/gdm-custom";
text = ''
${optionalString (!cfg.gdm.autoSuspend) ''
[org/gnome/settings-daemon/plugins/power]
sleep-inactive-ac-type='nothing'
sleep-inactive-battery-type='nothing'
sleep-inactive-ac-timeout=0
sleep-inactive-battery-timeout=0
''}
'';
programs.dconf.profiles.gdm.databases = lib.optionals (!cfg.gdm.autoSuspend) [{
settings."org/gnome/settings-daemon/plugins/power" = {
sleep-inactive-ac-type = "nothing";
sleep-inactive-battery-type = "nothing";
sleep-inactive-ac-timeout = lib.gvariant.mkInt32 0;
sleep-inactive-battery-timeout = lib.gvariant.mkInt32 0;
};
customDconfDb = pkgs.stdenv.mkDerivation {
name = "gdm-dconf-db";
buildCommand = ''
${pkgs.dconf}/bin/dconf compile $out ${customDconf}/dconf
'';
};
in pkgs.stdenv.mkDerivation {
name = "dconf-gdm-profile";
buildCommand = ''
# Check that the GDM profile starts with what we expect.
if [ $(head -n 1 ${gdm}/share/dconf/profile/gdm) != "user-db:user" ]; then
echo "GDM dconf profile changed, please update gdm.nix"
exit 1
fi
# Insert our custom DB behind it.
sed '2ifile-db:${customDconfDb}' ${gdm}/share/dconf/profile/gdm > $out
'';
};
}] ++ [ "${gdm}/share/gdm/greeter-dconf-defaults" ];
# Use AutomaticLogin if delay is zero, because it's immediate.
# Otherwise with TimedLogin with zero seconds the prompt is still

View File

@ -210,6 +210,7 @@ in {
custom-ca = handleTest ./custom-ca.nix {};
croc = handleTest ./croc.nix {};
darling = handleTest ./darling.nix {};
dconf = handleTest ./dconf.nix {};
deepin = handleTest ./deepin.nix {};
deluge = handleTest ./deluge.nix {};
dendrite = handleTest ./matrix/dendrite.nix {};

34
nixos/tests/dconf.nix Normal file
View File

@ -0,0 +1,34 @@
import ./make-test-python.nix
({ lib, ... }:
{
name = "dconf";
meta.maintainers = with lib.maintainers; [
linsui
];
nodes.machine = { config, pkgs, lib, ... }: {
users.extraUsers.alice = { isNormalUser = true; };
programs.dconf = with lib.gvariant; {
enable = true;
profiles.user.databases = [
{
settings = {
"test/not/locked" = mkInt32 1;
"test/is/locked" = "locked";
};
locks = [
"/test/is/locked"
];
}
];
};
};
testScript = ''
machine.succeed("test $(dconf read -d /test/not/locked) == 1")
machine.succeed("test $(dconf read -d /test/is/locked) == \"'locked'\"")
machine.fail("sudo -u alice dbus-run-session -- dconf write /test/is/locked \"@s 'unlocked'\"")
machine.succeed("sudo -u alice dbus-run-session -- dconf write /test/not/locked \"@i 2\"")
'';
})

View File

@ -4,12 +4,30 @@
, pkg-config
, openssl
, cmake
# deps for audio backends
, alsa-lib
, libpulseaudio
, portaudio
, libjack2
, SDL2
, gst_all_1
, dbus
, fontconfig
, libsixel
# build options
, withStreaming ? true
, withDaemon ? true
, withAudioBackend ? "rodio" # alsa, pulseaudio, rodio, portaudio, jackaudio, rodiojack, sdl
, withMediaControl ? true
, withLyrics ? true
, withImage ? true
, withNotify ? true
, withSixel ? true
}:
assert lib.assertOneOf "withAudioBackend" withAudioBackend [ "" "alsa" "pulseaudio" "rodio" "portaudio" "jackaudio" "rodiojack" "sdl" "gstreamer" ];
rustPlatform.buildRustPackage rec {
pname = "spotify-player";
version = "0.15.0";
@ -30,31 +48,37 @@ rustPlatform.buildRustPackage rec {
buildInputs = [
openssl
alsa-lib
dbus
fontconfig
libsixel
];
]
++ lib.optionals withSixel [ libsixel ]
++ lib.optionals (withAudioBackend == "alsa") [ alsa-lib ]
++ lib.optionals (withAudioBackend == "pulseaudio") [ libpulseaudio ]
++ lib.optionals (withAudioBackend == "rodio") [ alsa-lib ]
++ lib.optionals (withAudioBackend == "portaudio") [ portaudio ]
++ lib.optionals (withAudioBackend == "jackaudio") [ libjack2 ]
++ lib.optionals (withAudioBackend == "rodiojack") [ alsa-lib libjack2 ]
++ lib.optionals (withAudioBackend == "sdl") [ SDL2 ]
++ lib.optionals (withAudioBackend == "gstreamer") [ gst_all_1.gstreamer gst_all_1.gst-devtools gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good ];
buildNoDefaultFeatures = true;
buildFeatures = [
"rodio-backend"
"media-control"
"image"
"lyric-finder"
"daemon"
"notify"
"streaming"
"sixel"
];
buildFeatures = [ ]
++ lib.optionals (withAudioBackend != "") [ "${withAudioBackend}-backend" ]
++ lib.optionals withMediaControl [ "media-control" ]
++ lib.optionals withImage [ "image" ]
++ lib.optionals withLyrics [ "lyric-finder" ]
++ lib.optionals withDaemon [ "daemon" ]
++ lib.optionals withNotify [ "notify" ]
++ lib.optionals withStreaming [ "streaming" ]
++ lib.optionals withSixel [ "sixel" ];
meta = with lib; {
description = "A command driven spotify player";
meta = {
description = "A terminal spotify player that has feature parity with the official client";
homepage = "https://github.com/aome510/spotify-player";
changelog = "https://github.com/aome510/spotify-player/releases/tag/v${version}";
mainProgram = "spotify_player";
license = licenses.mit;
maintainers = with maintainers; [ dit7ya ];
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ dit7ya xyven1 ];
};
}

View File

@ -8,8 +8,11 @@ least specific (the system profile)"
;;; Extend `load-path' to search for elisp files in subdirectories of all folders in `NIX_PROFILES'.
;;; Non-Nix distros have similar logic in /usr/share/emacs/site-lisp/subdirs.el.
;;; See https://www.gnu.org/software/emacs/manual/html_node/elisp/Library-Search.html
(dolist (profile (nix--profile-paths))
(let ((default-directory (expand-file-name "share/emacs/site-lisp/" profile)))
(dolist (profile (reverse (nix--profile-paths)))
;; `directory-file-name' is important to add sub dirs to the right place of `load-path'
;; see the source code of `normal-top-level-add-to-load-path'
(let ((default-directory (directory-file-name
(expand-file-name "share/emacs/site-lisp/" profile))))
(when (file-exists-p default-directory)
(setq load-path (cons default-directory load-path))
(normal-top-level-add-subdirs-to-load-path))))
@ -37,13 +40,19 @@ least specific (the system profile)"
(mapconcat 'identity new-env-list ":"))))))
;;; Set up native-comp load path.
(when (featurep 'comp)
(when (featurep 'native-compile)
;; Append native-comp subdirectories from `NIX_PROFILES'.
;; Emacs writes asynchronous native-compilation files to the first writable directory[1].
;; At this time, (car native-comp-eln-load-path) is a writable one in `user-emacs-directory'[2].
;; So we keep that one unchanged.
;; [1]: info "(elisp) Native-Compilation Variables"
;; [2]: https://git.savannah.gnu.org/cgit/emacs.git/tree/lisp/startup.el?id=3685387e609753293c4518be75e77c659c3b2d8d#n601
(setq native-comp-eln-load-path
(append (mapcar (lambda (profile-dir)
(append (list (car native-comp-eln-load-path))
(mapcar (lambda (profile-dir)
(concat profile-dir "/share/emacs/native-lisp/"))
(nix--profile-paths))
native-comp-eln-load-path)))
(cdr native-comp-eln-load-path))))
;;; Make `woman' find the man pages
(defvar woman-manpath)

View File

@ -1,8 +1,8 @@
{ mkDerivation, lib
, extra-cmake-modules, ki18n
, kconfig, kconfigwidgets, kcoreaddons, kdbusaddons, kiconthemes, kcmutils
, kio, knotifications, plasma-framework, kwidgetsaddons, kwindowsystem
, kitemmodels, kitemviews, lcms2, libXrandr, qtx11extras
, kconfig, kconfigwidgets, kcoreaddons, kdbusaddons, kiconthemes, kirigami-addons
, kcmutils, kio, knotifications, plasma-framework, kwidgetsaddons
, kwindowsystem, kitemmodels, kitemviews, lcms2, libXrandr, qtx11extras
}:
mkDerivation {
@ -11,7 +11,7 @@ mkDerivation {
nativeBuildInputs = [ extra-cmake-modules ];
buildInputs = [
kconfig kconfigwidgets kcoreaddons kdbusaddons kiconthemes
kconfig kconfigwidgets kcoreaddons kdbusaddons kiconthemes kirigami-addons
kcmutils ki18n kio knotifications plasma-framework kwidgetsaddons
kwindowsystem kitemmodels kitemviews lcms2 libXrandr qtx11extras
];

View File

@ -1,19 +1,19 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (7.0.4.3)
activesupport (7.0.7.2)
concurrent-ruby (~> 1.0, >= 1.0.2)
i18n (>= 1.6, < 2)
minitest (>= 5.1)
tzinfo (~> 2.0)
addressable (2.8.4)
addressable (2.8.5)
public_suffix (>= 2.0.2, < 6.0)
colorize (0.8.1)
concurrent-ruby (1.2.2)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
ejson (1.3.1)
faraday (2.7.4)
ejson (1.4.1)
faraday (2.7.10)
faraday-net_http (>= 2.0, < 3.1)
ruby2_keywords (>= 0.0.4)
faraday-net_http (3.0.2)
@ -21,7 +21,7 @@ GEM
ffi-compiler (1.0.1)
ffi (>= 1.0.0)
rake
googleauth (1.5.2)
googleauth (1.7.0)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
@ -37,12 +37,12 @@ GEM
http-cookie (1.0.5)
domain_name (~> 0.5)
http-form_data (2.3.0)
i18n (1.12.0)
i18n (1.14.1)
concurrent-ruby (~> 1.0)
jsonpath (1.1.2)
jsonpath (1.1.3)
multi_json
jwt (2.7.0)
krane (3.1.0)
jwt (2.7.1)
krane (3.3.0)
activesupport (>= 5.0)
colorize (~> 0.8)
concurrent-ruby (~> 1.1)
@ -50,7 +50,7 @@ GEM
googleauth (~> 1.2)
jsonpath (~> 1.0)
kubeclient (~> 4.9)
oj (~> 3.0)
multi_json
statsd-instrument (>= 2.8, < 4)
thor (>= 1.0, < 2.0)
kubeclient (4.11.0)
@ -62,15 +62,14 @@ GEM
ffi-compiler (~> 1.0)
rake (~> 13.0)
memoist (0.16.2)
mime-types (3.4.1)
mime-types (3.5.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2023.0218.1)
minitest (5.18.0)
mime-types-data (3.2023.0808)
minitest (5.19.0)
multi_json (1.15.0)
netrc (0.11.0)
oj (3.14.3)
os (1.1.4)
public_suffix (5.0.1)
public_suffix (5.0.3)
rake (13.0.6)
recursive-open-struct (1.1.3)
rest-client (2.1.0)
@ -84,8 +83,8 @@ GEM
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
statsd-instrument (3.5.7)
thor (1.2.1)
statsd-instrument (3.5.11)
thor (1.2.2)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unf (0.1.4)
@ -99,4 +98,4 @@ DEPENDENCIES
krane
BUNDLED WITH
2.4.10
2.4.18

View File

@ -5,10 +5,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15m0b1im6i401ab51vzr7f8nk8kys1qa0snnl741y3sir3xd07jp";
sha256 = "1vlzcnyqlbchaq85phmdv73ydlc18xpvxy1cbsk191cwd29i7q32";
type = "gem";
};
version = "7.0.4.3";
version = "7.0.7.2";
};
addressable = {
dependencies = ["public_suffix"];
@ -16,10 +16,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "15s8van7r2ad3dq6i03l3z4hqnvxcq75a3h72kxvf9an53sqma20";
sha256 = "05r1fwy487klqkya7vzia8hnklcxy4vr92m9dmni3prfwk6zpw33";
type = "gem";
};
version = "2.8.4";
version = "2.8.5";
};
colorize = {
groups = ["default"];
@ -57,10 +57,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0gmfyyzzvb9k5nm1a5x83d7krajfghghfsakhxmdpvncyj2vnrpa";
sha256 = "1bpry4i9ajh2h8fyljp0cb17iy03ar36yc9mpfxflmdznl7dwsjf";
type = "gem";
};
version = "1.3.1";
version = "1.4.1";
};
faraday = {
dependencies = ["faraday-net_http" "ruby2_keywords"];
@ -68,10 +68,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1f20vjx0ywx0zdb4dfx4cpa7kd51z6vg7dw5hs35laa45dy9g9pj";
sha256 = "187clqhp9mv5mnqmjlfdp57svhsg1bggz84ak8v333j9skrnrgh9";
type = "gem";
};
version = "2.7.4";
version = "2.7.10";
};
faraday-net_http = {
groups = ["default"];
@ -110,10 +110,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1lj5haarpn7rybbq9s031zcn9ji3rlz5bk64bwa2j34q5s1h5gis";
sha256 = "0h1k47vjaq37l0w9q49g3f50j1b0c1svhk07rmd1h49w38v2hxag";
type = "gem";
};
version = "1.5.2";
version = "1.7.0";
};
http = {
dependencies = ["addressable" "http-cookie" "http-form_data" "llhttp-ffi"];
@ -163,10 +163,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1vdcchz7jli1p0gnc669a7bj3q1fv09y9ppf0y3k0vb1jwdwrqwi";
sha256 = "0qaamqsh5f3szhcakkak8ikxlzxqnv49n2p7504hcz2l0f4nj0wx";
type = "gem";
};
version = "1.12.0";
version = "1.14.1";
};
jsonpath = {
dependencies = ["multi_json"];
@ -174,31 +174,31 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0fkdjic88hh0accp0sbx5mcrr9yaqwampf5c3214212d4i614138";
sha256 = "1i1idcl0rpfkzkxngadw33a33v3gqf93a3kj52y2ha2zs26bdzjp";
type = "gem";
};
version = "1.1.2";
version = "1.1.3";
};
jwt = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "09yj3z5snhaawh2z1w45yyihzmh57m6m7dp8ra8gxavhj5kbiq5p";
sha256 = "16z11alz13vfc4zs5l3fk6n51n2jw9lskvc4h4prnww0y797qd87";
type = "gem";
};
version = "2.7.0";
version = "2.7.1";
};
krane = {
dependencies = ["activesupport" "colorize" "concurrent-ruby" "ejson" "googleauth" "jsonpath" "kubeclient" "oj" "statsd-instrument" "thor"];
dependencies = ["activesupport" "colorize" "concurrent-ruby" "ejson" "googleauth" "jsonpath" "kubeclient" "multi_json" "statsd-instrument" "thor"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1d8vdj3wd2qp8agyadn0w33qf7z2p5lk3vlslb8jlph8x5y3mm70";
sha256 = "1qf5la1w4zrbda5n3s01pb9gij5hyknwglsnqsrc0vcm6bslfygj";
type = "gem";
};
version = "3.1.0";
version = "3.3.0";
};
kubeclient = {
dependencies = ["http" "jsonpath" "recursive-open-struct" "rest-client"];
@ -238,30 +238,30 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ipw892jbksbxxcrlx9g5ljq60qx47pm24ywgfbyjskbcl78pkvb";
sha256 = "0q8d881k1b3rbsfcdi3fx0b5vpdr5wcrhn88r2d9j7zjdkxp5mw5";
type = "gem";
};
version = "3.4.1";
version = "3.5.1";
};
mime-types-data = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1pky3vzaxlgm9gw5wlqwwi7wsw3jrglrfflrppvvnsrlaiz043z9";
sha256 = "17zdim7kzrh5j8c97vjqp4xp78wbyz7smdp4hi5iyzk0s9imdn5a";
type = "gem";
};
version = "3.2023.0218.1";
version = "3.2023.0808";
};
minitest = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ic7i5z88zcaqnpzprf7saimq2f6sad57g5mkkqsrqrcd6h3mx06";
sha256 = "0jnpsbb2dbcs95p4is4431l2pw1l5pn7dfg3vkgb4ga464j0c5l6";
type = "gem";
};
version = "5.18.0";
version = "5.19.0";
};
multi_json = {
groups = ["default"];
@ -283,16 +283,6 @@
};
version = "0.11.0";
};
oj = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0l8l90iibzrxs33vn3adrhbg8cbmbn1qfh962p7gzwwybsdw73qy";
type = "gem";
};
version = "3.14.3";
};
os = {
groups = ["default"];
platforms = [];
@ -308,10 +298,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0hz0bx2qs2pwb0bwazzsah03ilpf3aai8b7lk7s35jsfzwbkjq35";
sha256 = "0n9j7mczl15r3kwqrah09cxj8hxdfawiqxa60kga2bmxl9flfz9k";
type = "gem";
};
version = "5.0.1";
version = "5.0.3";
};
rake = {
groups = ["default"];
@ -370,20 +360,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1pg308z3ck1vpazrmczklqa6f9qciay8nysnhc16pgfsh2npzzrz";
sha256 = "1zpr5ms18ynygpwx73v0a8nkf41kpjylc9m3fyhvchq3ms17hcb0";
type = "gem";
};
version = "3.5.7";
version = "3.5.11";
};
thor = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0inl77jh4ia03jw3iqm5ipr76ghal3hyjrd6r8zqsswwvi9j2xdi";
sha256 = "0k7j2wn14h1pl4smibasw0bp66kg626drxb59z7rzflch99cd4rg";
type = "gem";
};
version = "1.2.1";
version = "1.2.2";
};
tzinfo = {
dependencies = ["concurrent-ruby"];

View File

@ -12,13 +12,13 @@
let
thunderbird-unwrapped = thunderbirdPackages.thunderbird-102;
version = "102.12.0";
version = "102.14.0";
majVer = lib.versions.major version;
betterbird-patches = fetchFromGitHub {
owner = "Betterbird";
repo = "thunderbird-patches";
rev = "${version}-bb37";
rev = "${version}-bb39";
postFetch = ''
echo "Retrieving external patches"
@ -36,7 +36,7 @@ let
. ./external.sh
rm external.sh
'';
sha256 = "sha256-LH0dgWqariutfaOCPIUZrHzZ8oCbZF1VaaKQIQS4aL8=";
hash = "sha256-O9nGlJs3OziQLbdbdt3eFRHvk1A9cdEsbKDtsZrnY5Q=";
};
in ((buildMozillaMach {
pname = "betterbird";
@ -49,7 +49,7 @@ in ((buildMozillaMach {
src = fetchurl {
# https://download.cdn.mozilla.net/pub/thunderbird/releases/
url = "mirror://mozilla/thunderbird/releases/${version}/source/thunderbird-${version}.source.tar.xz";
sha512 = "303787a8f22a204e48784d54320d5f4adaeeeedbe4c2294cd26ad75792272ffc9453be7f0ab1434214b61a2cc46982c23c4fd447c4d80d588df4a7800225ddee";
sha512 = "4ae3f216833aec55421f827d55bc1b5fc2f0ad4fefecb27724a5be3318c351df24d30a4897b924e733ed2e3995be284b6d135049d46001143fb1c961fefc1830";
};
extraPostPatch = thunderbird-unwrapped.extraPostPatch or "" + /* bash */ ''

View File

@ -10,14 +10,14 @@
stdenv.mkDerivation (finalAttrs: {
pname = "vnote";
version = "3.16.0";
version = "3.17.0";
src = fetchFromGitHub {
owner = "vnotex";
repo = "vnote";
rev = "v${finalAttrs.version}";
fetchSubmodules = true;
hash = "sha256-tcu6y2DqdhFE2nbDkiANDk/Mzidcp8PLi8bWZaI6sH0=";
hash = "sha256-NUVu6tKXrrwAoT4BgxX05mmGSC9yx20lwvXzd4y19Zs=";
};
nativeBuildInputs = [

View File

@ -20,6 +20,8 @@
obs-command-source = callPackage ./obs-command-source.nix { };
obs-freeze-filter = qt6Packages.callPackage ./obs-freeze-filter.nix { };
obs-gradient-source = callPackage ./obs-gradient-source.nix { };
obs-gstreamer = callPackage ./obs-gstreamer.nix { };

View File

@ -0,0 +1,40 @@
{ stdenv
, lib
, fetchFromGitHub
, cmake
, obs-studio
, qtbase
}:
stdenv.mkDerivation (finalAttrs: {
pname = "obs-freeze-filter";
version = "0.3.3";
src = fetchFromGitHub {
owner = "exeldro";
repo = "obs-freeze-filter";
rev = finalAttrs.version;
sha256 = "sha256-CaHBTfdk8VFjmiclG61elj35glQafgz5B4ENo+7J35o=";
fetchSubmodules = true;
};
nativeBuildInputs = [ cmake ];
buildInputs = [ obs-studio qtbase ];
postInstall = ''
rm -rf "$out/share"
mkdir -p "$out/share/obs"
mv "$out/data/obs-plugins" "$out/share/obs"
rm -rf "$out/obs-plugins" "$out/data"
'';
dontWrapQtApps = true;
meta = with lib; {
description = "Plugin for OBS Studio to freeze a source using a filter";
homepage = "https://github.com/exeldro/obs-freeze-filter";
license = licenses.gpl2Only;
platforms = platforms.linux;
maintainers = with maintainers; [ pschmitt ];
};
})

View File

@ -69,7 +69,7 @@ let
includeFortifyHeaders' = if includeFortifyHeaders != null
then includeFortifyHeaders
else targetPlatform.libc == "musl";
else (targetPlatform.libc == "musl" && isGNU);
# Prefix for binaries. Customarily ends with a dash separator.
#

View File

@ -159,12 +159,10 @@ runCommand
rm -f $siteStart $siteStartByteCompiled $subdirs $subdirsByteCompiled
cat >"$siteStart" <<EOF
(let ((inhibit-message t))
(load-file "$emacs/share/emacs/site-lisp/site-start.el"))
(add-to-list 'load-path "$out/share/emacs/site-lisp")
(load "$emacs/share/emacs/site-lisp/site-start"))
;; "$out/share/emacs/site-lisp" is added to load-path in wrapper.sh
;; "$out/share/emacs/native-lisp" is added to native-comp-eln-load-path in wrapper.sh
(add-to-list 'exec-path "$out/bin")
${lib.optionalString withNativeCompilation ''
(add-to-list 'native-comp-eln-load-path "$out/share/emacs/native-lisp/")
''}
${lib.optionalString withTreeSitter ''
(add-to-list 'treesit-extra-load-path "$out/lib/")
''}
@ -226,7 +224,7 @@ runCommand
mkdir -p $out/share
# Link icons and desktop files into place
for dir in applications icons info man emacs; do
for dir in applications icons info man; do
ln -s $emacs/share/$dir $out/share/$dir
done
''

View File

@ -1,4 +1,5 @@
{ lib, stdenv
{ lib
, stdenv
, fetchurl
, fetchpatch
, substituteAll
@ -8,7 +9,6 @@
, pkg-config
, glib
, itstool
, libxml2
, xorg
, accountsservice
, libX11
@ -24,12 +24,12 @@
, audit
, gobject-introspection
, plymouth
, librsvg
, coreutils
, xorgserver
, xwayland
, dbus
, nixos-icons
, runCommand
}:
let
@ -41,21 +41,21 @@ let
in
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "gdm";
version = "44.1";
outputs = [ "out" "dev" ];
src = fetchurl {
url = "mirror://gnome/sources/gdm/${lib.versions.major version}/${pname}-${version}.tar.xz";
url = "mirror://gnome/sources/gdm/${lib.versions.major finalAttrs.version}/${finalAttrs.pname}-${finalAttrs.version}.tar.xz";
sha256 = "aCZrOr59KPxGnQBnqsnF2rsMp5UswffCOKBJUfPcWw0=";
};
mesonFlags = [
"-Dgdm-xsession=true"
# TODO: Setup a default-path? https://gitlab.gnome.org/GNOME/gdm/-/blob/6fc40ac6aa37c8ad87c32f0b1a5d813d34bf7770/meson_options.txt#L6
"-Dinitial-vt=${passthru.initialVT}"
"-Dinitial-vt=${finalAttrs.passthru.initialVT}"
"-Dudev-dir=${placeholder "out"}/lib/udev/rules.d"
"-Dsystemdsystemunitdir=${placeholder "out"}/lib/systemd/system"
"-Dsystemduserunitdir=${placeholder "out"}/lib/systemd/user"
@ -131,21 +131,21 @@ stdenv.mkDerivation rec {
'';
preInstall = ''
install -D ${override} ${DESTDIR}/$out/share/glib-2.0/schemas/org.gnome.login-screen.gschema.override
install -D ${override} $DESTDIR/$out/share/glib-2.0/schemas/org.gnome.login-screen.gschema.override
'';
postInstall = ''
# Move stuff from DESTDIR to proper location.
# We use rsync to merge the directories.
rsync --archive "${DESTDIR}/etc" "$out"
rm --recursive "${DESTDIR}/etc"
rsync --archive "$DESTDIR/etc" "$out"
rm --recursive "$DESTDIR/etc"
for o in $(getAllOutputNames); do
if [[ "$o" = "debug" ]]; then continue; fi
rsync --archive "${DESTDIR}/''${!o}" "$(dirname "''${!o}")"
rm --recursive "${DESTDIR}/''${!o}"
rsync --archive "$DESTDIR/''${!o}" "$(dirname "''${!o}")"
rm --recursive "$DESTDIR/''${!o}"
done
# Ensure the DESTDIR is removed.
rmdir "${DESTDIR}/nix/store" "${DESTDIR}/nix" "${DESTDIR}"
rmdir "$DESTDIR/nix/store" "$DESTDIR/nix" "$DESTDIR"
# We are setting DESTDIR so the post-install script does not compile the schemas.
glib-compile-schemas "$out/share/glib-2.0/schemas"
@ -170,6 +170,18 @@ stdenv.mkDerivation rec {
# Used in GDM NixOS module
# Don't remove.
initialVT = "7";
dconfDb = "${finalAttrs.finalPackage}/share/gdm/greeter-dconf-defaults";
dconfProfile = "user-db:user\nfile-db:${finalAttrs.passthru.dconfDb}";
tests = {
profile = runCommand "gdm-profile-test" { } ''
if test "${finalAttrs.passthru.dconfProfile}" != "$(cat ${finalAttrs.finalPackage}/share/dconf/profile/gdm)"; then
echo "GDM dconf profile changed, please update gdm.nix"
exit 1
fi
touch $out
'';
};
};
meta = with lib; {
@ -179,4 +191,4 @@ stdenv.mkDerivation rec {
maintainers = teams.gnome.members;
platforms = platforms.linux;
};
}
})

View File

@ -2,12 +2,12 @@
stdenv.mkDerivation {
pname = "libubox";
version = "unstable-2023-01-03${lib.optionalString with_ustream_ssl "-${ustream-ssl.ssl_implementation.pname}"}";
version = "unstable-2023-05-23";
src = fetchgit {
url = "https://git.openwrt.org/project/libubox.git";
rev = "eac92a4d5d82eb31e712157e7eb425af728b2c43";
sha256 = "0w6mmwmd3ljhkqfk0qswq28dp63k30s3brlgf8lyi7vj7mrhvn3c";
rev = "75a3b870cace1171faf57bd55e5a9a2f1564f757";
hash = "sha256-QhJ09i7IWP6rbxrYuhisVsCr82Ou/JAZMEdkaLhZp1o=";
};
cmakeFlags = [ "-DBUILD_EXAMPLES=OFF" (if with_lua then "-DLUAPATH=${placeholder "out"}/lib/lua" else "-DBUILD_LUA=OFF") ];

View File

@ -2,12 +2,12 @@
stdenv.mkDerivation {
pname = "ubus";
version = "unstable-2021-02-15";
version = "unstable-2023-06-05";
src = fetchgit {
url = "https://git.openwrt.org/project/ubus.git";
rev = "2537be01858710e714c329153760c64fe3f8a73e";
sha256 = "03ljxsn4w87bfrilccxhrkzqmd30hy6ihkvsinw0i3l7rpp5m4a7";
rev = "f787c97b34894a38b15599886cacbca01271684f";
hash = "sha256-PGPFtNaRXS6ryC+MA/w2CtPQfJa+vG5OXf/NPFMoIzQ=";
};
cmakeFlags = [ "-DBUILD_LUA=OFF" ];

View File

@ -2,12 +2,12 @@
stdenv.mkDerivation {
pname = "uci";
version = "unstable-2021-04-14";
version = "unstable-2023-08-10";
src = fetchgit {
url = "https://git.openwrt.org/project/uci.git";
rev = "4b3db1179747b6a6779029407984bacef851325c";
sha256 = "1zflxazazzkrycpflzfg420kzp7kgy4dlz85cms279vk07dc1d52";
rev = "5781664d5087ccc4b5ab58505883231212dbedbc";
hash = "sha256-8MyFaZdAMh5oMPO/5QyNT+Or57eBL3mamJLblGGoF9g=";
};
hardeningDisable = [ "all" ];

View File

@ -2,12 +2,12 @@
stdenv.mkDerivation {
pname = "uclient";
version = "unstable-2022-02-24";
version = "unstable-2023-04-13";
src = fetchgit {
url = "https://git.openwrt.org/project/uclient.git";
rev = "644d3c7e13c6a64bf5cb628137ee5bd4dada4b74";
sha256 = "0vy4whs64699whp92d1zl7a8kh16yrfywqq0yp2y809l9z19sw22";
rev = "007d945467499f43656b141171d31f5643b83a6c";
hash = "sha256-A47dyVc2MtOL6aImZ0b3SMWH2vzjfAXzRAOF4nfH6S0=";
};
nativeBuildInputs = [ cmake pkg-config ];

View File

@ -2,12 +2,12 @@
stdenv.mkDerivation {
pname = "ustream-ssl";
version = "unstable-2022-12-08-${ssl_implementation.pname}";
version = "unstable-2023-02-25";
src = fetchgit {
url = "https://git.openwrt.org/project/ustream-ssl.git";
rev = "9217ab46536353c7c792951b57163063f5ec7a3b";
sha256 = "1ldyyb3is213iljyccx98f56rb69rfpgdcb1kjxw9a176hvpipdd";
rev = "498f6e268d4d2b0ad33b430f4ba1abe397d31496";
hash = "sha256-qwF3pzJ/nUTaJ8NZtgLyXnSozekY3dovxK3ZWHPGORM=";
};
preConfigure = ''

View File

@ -18,7 +18,7 @@
buildPythonPackage rec {
pname = "approvaltests";
version = "8.4.1";
version = "9.0.0";
format = "setuptools";
disabled = pythonOlder "3.7";
@ -27,7 +27,7 @@ buildPythonPackage rec {
owner = "approvals";
repo = "ApprovalTests.Python";
rev = "refs/tags/v${version}";
hash = "sha256-BuFiNZZ7228CKJ97mVK2S8Siqe040EYV5pElVtwuVf4=";
hash = "sha256-tyUPXeMdFuzlBY/HrGHLDEwYngzBELayaVVfEh92lbE=";
};
propagatedBuildInputs = [

View File

@ -1,5 +1,6 @@
{ lib
, buildPythonPackage
, cryptography
, django
, djangorestframework
, fetchPypi
@ -11,7 +12,7 @@
buildPythonPackage rec {
pname = "djangorestframework-simplejwt";
version = "5.2.2";
version = "5.3.0";
format = "setuptools";
disabled = pythonOlder "3.7";
@ -19,7 +20,7 @@ buildPythonPackage rec {
src = fetchPypi {
pname = "djangorestframework_simplejwt";
inherit version;
hash = "sha256-0n1LysLGOU9njeqLTQ1RHG4Yp/Lriq7rin3mAa63fEI=";
hash = "sha256-jkxd/KjRHAuKZt/YpOP8HGqn6hiNEJB/+RyUL0tS7WY=";
};
nativeBuildInputs = [
@ -30,9 +31,17 @@ buildPythonPackage rec {
django
djangorestframework
pyjwt
python-jose
];
passthru.optional-dependencies = {
python-jose = [
python-jose
];
crypto = [
cryptography
];
};
# Test raises django.core.exceptions.ImproperlyConfigured
doCheck = false;
@ -43,6 +52,7 @@ buildPythonPackage rec {
meta = with lib; {
description = "JSON Web Token authentication plugin for Django REST Framework";
homepage = "https://github.com/davesque/django-rest-framework-simplejwt";
changelog = "https://github.com/jazzband/djangorestframework-simplejwt/blob/v${version}/CHANGELOG.md";
license = licenses.mit;
maintainers = with maintainers; [ arnoldfarkas ];
};

View File

@ -11,13 +11,13 @@
buildPythonPackage rec {
pname = "mkdocs-minify";
version = "0.6.3";
version = "0.7.1";
src = fetchFromGitHub {
owner = "byrnereese";
repo = "${pname}-plugin";
rev = "refs/tags/${version}";
hash = "sha256-ajXkEKLBC86Y8YzDCZXd6x6QtLLrCDJkb6kDrRE536o=";
hash = "sha256-LDCAWKVbFsa6Y/tmY2Zne4nOtxe4KvNplZuWxg4e4L8=";
};
propagatedBuildInputs = [

View File

@ -1,21 +1,26 @@
{ lib, buildGoModule, fetchFromGitHub, installShellFiles }:
{ lib
, buildGoModule
, fetchFromGitHub
, installShellFiles
}:
buildGoModule rec {
pname = "hcloud";
version = "1.36.0";
version = "1.37.0";
src = fetchFromGitHub {
owner = "hetznercloud";
repo = "cli";
rev = "v${version}";
sha256 = "sha256-BmV+g0Geue41KNcB++TaoSsuGG1HA+uH5GHye7QRWOM=";
rev = "refs/tags/v${version}";
hash = "sha256-6UQaO2ArAYd6Lr1maciC83k1GlR8FLx+acAZh6SjI3g=";
};
vendorHash = "sha256-eGeaH9nIjBSZLxNlsQtas122eEXrIbrGn/GYVB4KhvY=";
vendorHash = "sha256-mxAG3o3IY70xn8WymUzF96Q2XWwQ0efWrrw1VV4Y8HU=";
ldflags = [
"-s" "-w"
"-X github.com/hetznercloud/cli/internal/version.Version=${version}"
"-s"
"-w"
"-X=github.com/hetznercloud/cli/internal/version.Version=${version}"
];
nativeBuildInputs = [ installShellFiles ];

View File

@ -1,25 +1,30 @@
{ lib, buildGoModule, fetchFromGitHub }:
{ lib, buildGoModule, fetchFromGitHub, libpg_query, xxHash, postgresql }:
buildGoModule rec {
pname = "sqldef";
version = "0.12.7";
version = "0.16.4";
src = fetchFromGitHub {
owner = "k0kubun";
repo = pname;
repo = "sqldef";
rev = "v${version}";
sha256 = "sha256-HyM2HTdQgH+2vFe+1q02zmaD/A1M5h6Z56Wff9qxaHM=";
hash = "sha256-HQ6WyeKYRd+pY/P2Bsu7W2eMjgpjUhbwEFE7bADrxDY=";
};
vendorSha256 = "sha256-T1Kdtpm90fy93mYWQz13k552wWGB96BOeN8NtTuuj0c=";
proxyVendor = true;
vendorHash = "sha256-YdZo2XN+425s0K/3COqQx3g1Bpus4uWiwnzrYJ8qdOM=";
ldflags = [ "-s" "-w" "-X main.version=${version}" ];
# The test requires a running database
doCheck = false;
meta = with lib; {
description = "Idempotent SQL schema management tool";
license = with licenses; [ mit /* for everythnig except parser */ asl20 /* for parser */ ];
license = with licenses; [ mit /* for everything except parser */ asl20 /* for parser */ ];
homepage = "https://github.com/k0kubun/sqldef";
changelog = "https://github.com/k0kubun/sqldef/blob/v${version}/CHANGELOG.md";
maintainers = with maintainers; [ kgtkr ];
};
}

View File

@ -2,13 +2,13 @@
let
data = stdenv.mkDerivation(finalAttrs: {
pname = "path-of-building-data";
version = "2.33.3";
version = "2.33.5";
src = fetchFromGitHub {
owner = "PathOfBuildingCommunity";
repo = "PathOfBuilding";
rev = "v${finalAttrs.version}";
hash = "sha256-mRF8bXDBTfMGB8SAhF4rrwkBZq1XyGA9Wkb1ZpvTCv0=";
hash = "sha256-a7/xuVfsLQaSsmHVFKqDEypCunFQtHvcVISaQD1YCEs=";
};
nativeBuildInputs = [ unzip ];

View File

@ -52,21 +52,21 @@
"6.1": {
"patch": {
"extra": "-hardened1",
"name": "linux-hardened-6.1.46-hardened1.patch",
"sha256": "1filmigpmn3bly4f08450izq4gabn57xi1fkczcnmkphwp83rk4l",
"url": "https://github.com/anthraxx/linux-hardened/releases/download/6.1.46-hardened1/linux-hardened-6.1.46-hardened1.patch"
"name": "linux-hardened-6.1.47-hardened1.patch",
"sha256": "0wgsjb05m9f0fgv4vj0m0ll9bx22z894qlpwb45b33mq66fvbgwn",
"url": "https://github.com/anthraxx/linux-hardened/releases/download/6.1.47-hardened1/linux-hardened-6.1.47-hardened1.patch"
},
"sha256": "15m228bllks2p8gpsmvplx08yxzp7bij9fnmnafqszylrk7ppxpm",
"version": "6.1.46"
"sha256": "1azwvlzyp1s2adm17ic0jfmv3ph70wqzycb8s96z9987y1m8pmck",
"version": "6.1.47"
},
"6.4": {
"patch": {
"extra": "-hardened1",
"name": "linux-hardened-6.4.11-hardened1.patch",
"sha256": "15c8fs5dmkm2a9j66gq5c1hcbw95p4d03y71rvh6jhglpna7b3xc",
"url": "https://github.com/anthraxx/linux-hardened/releases/download/6.4.11-hardened1/linux-hardened-6.4.11-hardened1.patch"
"name": "linux-hardened-6.4.12-hardened1.patch",
"sha256": "0xkcvyy2ii5wfdw8h21svcsz3s3q0qk4yx7dxzbrisap10d79l51",
"url": "https://github.com/anthraxx/linux-hardened/releases/download/6.4.12-hardened1/linux-hardened-6.4.12-hardened1.patch"
},
"sha256": "0609lhgc42j9id2vvdpv8n7djabp46p2mridf9s0sg3x16snhssl",
"version": "6.4.11"
"sha256": "0x56b4hslm730ghvggz41fjkbzlnxp6k8857dn7iy27yavlipafc",
"version": "6.4.12"
}
}

View File

@ -3,7 +3,7 @@
with lib;
buildLinux (args // rec {
version = "5.10.191";
version = "5.10.192";
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
modDirVersion = versions.pad 3 version;
@ -13,6 +13,6 @@ buildLinux (args // rec {
src = fetchurl {
url = "mirror://kernel/linux/kernel/v5.x/linux-${version}.tar.xz";
sha256 = "1hk2x5dgvfq9v6161v25wz5qpzgyvqbx34xbm7ww8z4ish76cm6b";
sha256 = "1fdmn38l3hilpqwjl2sr28rjpr2k3jxd3nxs54j162p5avp123f4";
};
} // (args.argsOverride or {}))

View File

@ -3,7 +3,7 @@
with lib;
buildLinux (args // rec {
version = "5.15.127";
version = "5.15.128";
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
modDirVersion = versions.pad 3 version;
@ -13,6 +13,6 @@ buildLinux (args // rec {
src = fetchurl {
url = "mirror://kernel/linux/kernel/v5.x/linux-${version}.tar.xz";
sha256 = "09lgj9hs1cjxg84hb7avras4rlsx18igr69mx433l9hv6issbl5d";
sha256 = "1pl03djrfa7bqzpcvqlfgqnwx6iby6bpr1hc7gspdzc3a62clbhg";
};
} // (args.argsOverride or { }))

View File

@ -3,7 +3,7 @@
with lib;
buildLinux (args // rec {
version = "6.1.47";
version = "6.1.49";
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
modDirVersion = versions.pad 3 version;
@ -13,6 +13,6 @@ buildLinux (args // rec {
src = fetchurl {
url = "mirror://kernel/linux/kernel/v6.x/linux-${version}.tar.xz";
sha256 = "1azwvlzyp1s2adm17ic0jfmv3ph70wqzycb8s96z9987y1m8pmck";
sha256 = "03vs0ncpxx12d2pm0glxa68lqkj17j69lcx9h8w6xjm43hii9sn9";
};
} // (args.argsOverride or { }))

View File

@ -0,0 +1,18 @@
{ lib, fetchurl, buildLinux, ... } @ args:
with lib;
buildLinux (args // rec {
version = "6.5";
# modDirVersion needs to be x.y.z, will automatically add .0 if needed
modDirVersion = versions.pad 3 version;
# branchVersion needs to be x.y
extraMeta.branch = versions.majorMinor version;
src = fetchurl {
url = "mirror://kernel/linux/kernel/v6.x/linux-${version}.tar.xz";
hash = "sha256-eldLvCCALqdrUsp/rwcmf3IEXoYbGJFcUnKpjCer+IQ=";
};
} // (args.argsOverride or { }))

View File

@ -1,8 +1,8 @@
{ stdenv, lib, fetchsvn, linux
, scripts ? fetchsvn {
url = "https://www.fsfla.org/svn/fsfla/software/linux-libre/releases/branches/";
rev = "19392";
sha256 = "09d61yw3jmq1cpzp1kpnmjrnl1gxhp8p0vqnc75j05ikmibqpa4l";
rev = "19397";
sha256 = "130q08my839kwbi1v8lqwvs6w8s6328ki7s243as4yz4kfrlymr3";
}
, ...
}:

View File

@ -2,12 +2,12 @@
stdenv.mkDerivation {
pname = "libnl-tiny";
version = "unstable-2022-12-13";
version = "unstable-2023-07-27";
src = fetchgit {
url = "https://git.openwrt.org/project/libnl-tiny.git";
rev = "f5d9b7e4f534a69cbd35c3f150fa6d57b9d631e4";
sha256 = "0c5ycsdas8rr5c33gd0mnmm515dq631fmdjn5mp2j1m0j1bk7hc0";
rev = "bc92a280186f9becc53c0f17e4e43cfbdeec7e7b";
hash = "sha256-/d6so8hfBOyp8NbUhPZ0aRj6gXO/RLgwCQnAT7N/rF8=";
};
nativeBuildInputs = [ cmake pkg-config ];

View File

@ -14,16 +14,16 @@
rustPlatform.buildRustPackage rec {
pname = "eza";
version = "0.10.8";
version = "0.10.9";
src = fetchFromGitHub {
owner = "eza-community";
repo = "eza";
rev = "v${version}";
hash = "sha256-3g4eauJqnbIqWtDmRvKsDiZh1eAz171FP9idF2nBXLQ=";
hash = "sha256-ssP4jPO7Yt98ZCKOpQi7RwKfUBOHQ1dK5rzWxAJD9Jc=";
};
cargoHash = "sha256-HS/nmLxr5zvyneiSJk9tPUhszF5vFwSo5HMsRql9I38=";
cargoHash = "sha256-XxqAAs44iZuqcAsixIqEgUHWytwS9umuM/KIPosrfRo=";
nativeBuildInputs = [ cmake pkg-config installShellFiles pandoc ];
buildInputs = [ zlib ]

View File

@ -0,0 +1,45 @@
{ lib
, rustPlatform
, fetchFromGitHub
}:
rustPlatform.buildRustPackage rec {
pname = "ntpd-rs";
version = "0.3.7";
src = fetchFromGitHub {
owner = "pendulum-project";
repo = "ntpd-rs";
rev = "v${version}";
hash = "sha256-AUCzsveG9U+KxYO/4LGmyCPkR+w9pGDA/vTzMAGiVuI=";
};
cargoHash = "sha256-6FUVkr3uock43ZBHuMEVIZ5F8Oh8wMifh2EokMWv4hU=";
checkFlags = [
# doesn't find the testca
"--skip=keyexchange::tests::key_exchange_roundtrip"
# seems flaky
"--skip=algorithm::kalman::peer::tests::test_offset_steering_and_measurements"
# needs networking
"--skip=hwtimestamp::tests::get_hwtimestamp"
];
postInstall = ''
install -vDt $out/lib/systemd/system pkg/common/ntpd-rs.service
for testprog in demobilize-server rate-limit-server nts-ke nts-ke-server peer-state simple-daemon; do
moveToOutput bin/$testprog "$tests"
done
'';
outputs = [ "out" "tests" ];
meta = with lib; {
description = "A full-featured implementation of the Network Time Protocol";
homepage = "https://tweedegolf.nl/en/pendulum";
changelog = "https://github.com/pendulum-project/ntpd-rs/blob/v${version}/CHANGELOG.md";
license = with licenses; [ mit /* or */ asl20 ];
maintainers = with maintainers; [ fpletz ];
};
}

View File

@ -12,13 +12,13 @@
stdenv.mkDerivation (finalAttrs: {
pname = "ugrep";
version = "4.0.4";
version = "4.0.5";
src = fetchFromGitHub {
owner = "Genivia";
repo = "ugrep";
rev = "v${finalAttrs.version}";
hash = "sha256-VkONia3xhhgCcq+dh5lNYoj3C8abDYNG7JfoBXomMUw=";
hash = "sha256-7cE8kbj8ChvHOPb1F7Fj9talg82nXpXRPt4oBSGSWZw=";
};
buildInputs = [

File diff suppressed because it is too large Load Diff

View File

@ -9,21 +9,16 @@
rustPlatform.buildRustPackage rec {
pname = "shotman";
version = "0.4.3";
version = "0.4.5";
src = fetchFromSourcehut {
owner = "~whynothugo";
repo = pname;
rev = "v${version}";
hash = "sha256-c2fgP6XB/fqKfsjqRRQpOFzHZyF/a9tLAKIGdKFAcSQ=";
hash = "sha256-SctWNhYCFTAOOnDEcsFZH61+QQAcmup11GVVXA1U5Dw=";
};
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"smithay-client-toolkit-0.16.0" = "sha256-n+s+qH39tna0yN44D6GGlQGZHjsr9FBpp+NZItyqwaE=";
};
};
cargoHash = "sha256-q5scdgfB5NgtjAgnIy/+c+y/mymF0b9ZZSz2LmM0pfw=";
nativeBuildInputs = [ pkg-config makeWrapper ];
@ -39,6 +34,6 @@ rustPlatform.buildRustPackage rec {
homepage = "https://git.sr.ht/~whynothugo/shotman";
license = licenses.isc;
platforms = platforms.linux;
maintainers = with maintainers; [ zendo ];
maintainers = with maintainers; [ zendo fpletz ];
};
}

View File

@ -973,6 +973,7 @@ mapAliases ({
linuxPackages_6_2 = linuxKernel.packages.linux_6_2;
linuxPackages_6_3 = linuxKernel.packages.linux_6_3;
linuxPackages_6_4 = linuxKernel.packages.linux_6_4;
linuxPackages_6_5 = linuxKernel.packages.linux_6_5;
linuxPackages_hardkernel_4_14 = linuxKernel.packages.hardkernel_4_14;
linuxPackages_rpi0 = linuxKernel.packages.linux_rpi1;
linuxPackages_rpi02w = linuxKernel.packages.linux_rpi3;
@ -997,6 +998,7 @@ mapAliases ({
linux_6_2 = linuxKernel.kernels.linux_6_2;
linux_6_3 = linuxKernel.kernels.linux_6_3;
linux_6_4 = linuxKernel.kernels.linux_6_4;
linux_6_5 = linuxKernel.kernels.linux_6_5;
linuxPackages_mptcp = throw "'linuxPackages_mptcp' has been moved to https://github.com/teto/mptcp-flake"; # Converted to throw 2022-10-04
linux_mptcp = throw "'linux_mptcp' has been moved to https://github.com/teto/mptcp-flake"; # Converted to throw 2022-10-04
linux_mptcp_95 = throw "'linux_mptcp_95' has been moved to https://github.com/teto/mptcp-flake"; # Converted to throw 2022-10-04

View File

@ -1890,6 +1890,8 @@ with pkgs;
nominatim = callPackage ../servers/nominatim { };
ntpd-rs = callPackage ../tools/networking/ntpd-rs { };
ocs-url = libsForQt5.callPackage ../tools/misc/ocs-url { };
openbugs = pkgsi686Linux.callPackage ../applications/science/machine-learning/openbugs { };
@ -9605,6 +9607,14 @@ with pkgs;
jupyter = callPackage ../applications/editors/jupyter { };
jupyter-all = jupyter.override {
definitions = {
clojure = clojupyter.definition;
octave = octave-kernel.definition;
# wolfram = wolfram-for-jupyter-kernel.definition; # unfree
};
};
jupyter-kernel = callPackage ../applications/editors/jupyter/kernel.nix { };
justify = callPackage ../tools/text/justify { };

View File

@ -182,6 +182,13 @@ in {
];
};
linux_6_5 = callPackage ../os-specific/linux/kernel/linux-6.5.nix {
kernelPatches = [
kernelPatches.bridge_stp_helper
kernelPatches.request_key_helper
];
};
linux_testing = let
testing = callPackage ../os-specific/linux/kernel/linux-testing.nix {
kernelPatches = [
@ -575,6 +582,7 @@ in {
linux_5_15 = recurseIntoAttrs (packagesFor kernels.linux_5_15);
linux_6_1 = recurseIntoAttrs (packagesFor kernels.linux_6_1);
linux_6_4 = recurseIntoAttrs (packagesFor kernels.linux_6_4);
linux_6_5 = recurseIntoAttrs (packagesFor kernels.linux_6_5);
} // lib.optionalAttrs config.allowAliases {
linux_4_9 = throw "linux 4.9 was removed because it will reach its end of life within 22.11"; # Added 2022-11-08
linux_5_18 = throw "linux 5.18 was removed because it reached its end of life upstream"; # Added 2022-09-17
@ -636,7 +644,7 @@ in {
packageAliases = {
linux_default = packages.linux_6_1;
# Update this when adding the newest kernel major version!
linux_latest = packages.linux_6_4;
linux_latest = packages.linux_6_5;
linux_mptcp = throw "'linux_mptcp' has been moved to https://github.com/teto/mptcp-flake";
linux_rt_default = packages.linux_rt_5_4;
linux_rt_latest = packages.linux_rt_6_1;