diff --git a/doc/release-notes/rl-2605.section.md b/doc/release-notes/rl-2605.section.md index 87a68f80dd71..9d3bb68f5c06 100644 --- a/doc/release-notes/rl-2605.section.md +++ b/doc/release-notes/rl-2605.section.md @@ -247,6 +247,8 @@ - All Xfce packages have been moved to top level (e.g. if you previously added `pkgs.xfce.xfce4-whiskermenu-plugin` to `environment.systemPackages`, you will need to change it to `pkgs.xfce4-whiskermenu-plugin`). The `xfce` scope will be removed in NixOS 26.11. +- The Dovecot IMAP server has been updated to version 2.4, with the `dovecot` attribute now referring to this backwards-incompatible version. The attribute `dovecot_2_3` refers to the previous version. The Pigeonhole plugin has been similarly updated to 2.4, with the version compatible with Dovecot 2.3 being at `dovecot_pigeonhole_0_5`. See for more information on how to upgrade. + - `spacefm` was removed because it appeared to be unmaintained upstream. - `vimPlugins.nvim-treesitter` has been updated to `main` branch, which is a full and incompatible rewrite. If you can't or don't want to update, you should use `vimPlugins.nvim-treesitter-legacy`. diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index ff9c6f2fa3c9..792be35e4563 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -5685,6 +5685,11 @@ name = "Serg Nesterov"; keys = [ { fingerprint = "6E7D BA30 DB5D BA60 693C 3BE3 1512 F6EB 84AE CC8C"; } ]; }; + cvengler = { + name = "Clara Engler"; + github = "cvengler"; + githubId = 12272949; + }; cwoac = { email = "oliver@codersoffortune.net"; github = "cwoac"; @@ -10898,12 +10903,6 @@ githubId = 44043764; name = "Liam Hupfer"; }; - hqurve = { - email = "hqurve@outlook.com"; - github = "hqurve"; - githubId = 53281855; - name = "hqurve"; - }; hraban = { email = "hraban@0brg.net"; github = "hraban"; diff --git a/nixos/doc/manual/release-notes/rl-2605.section.md b/nixos/doc/manual/release-notes/rl-2605.section.md index 09a82d0bce35..b855729692f6 100644 --- a/nixos/doc/manual/release-notes/rl-2605.section.md +++ b/nixos/doc/manual/release-notes/rl-2605.section.md @@ -318,6 +318,10 @@ See . - For shortlived certificates with a total validty below 10 days renewal will happen after half of the total lifetime has passed +- The module for the Dovecot IMAP server, *services.dovecot*, now uses RFC-42-style settings, exposing a structured interface to write the configuration file. + + Also see the list of available settings for [Dovecot 2.3](https://doc.dovecot.org/2.3/settings/core/) or [2.4](https://doc.dovecot.org/2.4.2/core/summaries/settings.html). + - Cinnamon has been updated to 6.6, please check the [upstream announcement](https://www.linuxmint.com/rel_zena_whatsnew.php) for more details. - Budgie has been updated to 10.10, please check the [upstream announcement](https://buddiesofbudgie.org/blog/budgie-10-10-released) for more details. diff --git a/nixos/modules/services/mail/dovecot.nix b/nixos/modules/services/mail/dovecot.nix index af91440c6a3f..a9dd9531fadf 100644 --- a/nixos/modules/services/mail/dovecot.nix +++ b/nixos/modules/services/mail/dovecot.nix @@ -7,37 +7,53 @@ let inherit (lib) - attrValues + all + attrsToList concatMapStringsSep - concatStrings concatStringsSep + elemAt + filter flatten imap1 + isAttrs + isBool + isDerivation + isInt + isList + isPath + isString + listToAttrs literalExpression + mapAttrs' mapAttrsToList + mkDefault mkEnableOption mkIf + mkMerge mkOption + mkPackageOption mkRemovedOptionModule + mkRenamedOptionModule + nameValuePair optional optionalAttrs optionalString + optionals singleton + splitString + traceSeq types - mkRenamedOptionModule - nameValuePair - mapAttrs' - listToAttrs - filter + versionAtLeast + versionOlder ; - inherit (lib.strings) match; cfg = config.services.dovecot2; - dovecotPkg = pkgs.dovecot; baseDir = "/run/dovecot2"; stateDir = "/var/lib/dovecot"; + sievec = lib.getExe' cfg.package.passthru.dovecot_pigeonhole "sievec"; + sieveScriptSettings = mapAttrs' ( to: _: nameValuePair "sieve_${to}" "${stateDir}/sieve/${to}" ) cfg.sieve.scripts; @@ -69,35 +85,6 @@ let ) ); - mkExtraConfigCollisionWarning = term: '' - You referred to ${term} in `services.dovecot2.extraConfig`. - - Due to gradual transition to structured configuration for plugin configuration, it is possible - this will cause your plugin configuration to be ignored. - - Consider setting `services.dovecot2.pluginSettings.${term}` instead. - ''; - - # Those settings are automatically set based on other parts - # of this module. - automaticallySetPluginSettings = [ - "sieve_plugins" - "sieve_extensions" - "sieve_global_extensions" - "sieve_pipe_bin_dir" - ] - ++ (builtins.attrNames sieveScriptSettings) - ++ (builtins.attrNames imapSieveMailboxSettings); - - # The idea is to match everything that looks like `$term =` - # but not `# $term something something` - # or `# $term = some value` because those are comments. - configContainsSetting = lines: term: (match "[[:blank:]]*${term}[[:blank:]]*=.*" lines) != null; - - warnAboutExtraConfigCollisions = map mkExtraConfigCollisionWarning ( - filter (configContainsSetting cfg.extraConfig) automaticallySetPluginSettings - ); - sievePipeBinScriptDirectory = pkgs.linkFarm "sieve-pipe-bins" ( map (el: { name = builtins.unsafeDiscardStringContext (baseNameOf el); @@ -105,219 +92,600 @@ let }) cfg.sieve.pipeBins ); - dovecotConf = concatStrings [ - '' - base_dir = ${baseDir} - protocols = ${concatStringsSep " " cfg.protocols} - sendmail_path = /run/wrappers/bin/sendmail - mail_plugin_dir = /run/current-system/sw/lib/dovecot/modules - # defining mail_plugins must be done before the first protocol {} filter because of https://doc.dovecot.org/configuration_manual/config_file/config_file_syntax/#variable-expansion - mail_plugins = $mail_plugins ${concatStringsSep " " cfg.mailPlugins.globally.enable} - '' + yesOrNo = v: if v then "yes" else "no"; - (concatStringsSep "\n" ( - mapAttrsToList (protocol: plugins: '' - protocol ${protocol} { - mail_plugins = $mail_plugins ${concatStringsSep " " plugins.enable} - } - '') cfg.mailPlugins.perProtocol - )) + toOption = + i: n: v: + "${i}${toString n} = ${v}"; - ( - if cfg.sslServerCert == null then - '' - ssl = no - disable_plaintext_auth = no - '' + formatKeyValue = + indent: n: v: + if (v == null) then + "" + else if isInt v then + toOption indent n (toString v) + else if isBool v then + toOption indent n (yesOrNo v) + else if isString v then + toOption indent n v + else if isList v then + if all isString v then + toOption indent n (concatStringsSep " " v) else - '' - ssl_cert = <${cfg.sslServerCert} - ssl_key = <${cfg.sslServerKey} - ${optionalString (cfg.sslCACert != null) ("ssl_ca = <" + cfg.sslCACert)} - ${optionalString cfg.enableDHE "ssl_dh = <${config.security.dhparams.params.dovecot2.path}"} - disable_plaintext_auth = yes - '' - ) + map (formatKeyValue indent n) v + else if isPath v || isDerivation v then + # paths -> copy to store + # derivations -> just use output path instead of looping over the attrs + toOption indent n "${v}" + else if isAttrs v && v ? _section then + let + sectionType = v._section.type; + sectionName = v._section.name; + sectionTitle = concatStringsSep " " ( + filter (s: s != null) [ + sectionType + sectionName + ] + ); + in + concatStringsSep "\n" ( + [ + "${indent}${sectionTitle} {" + ] + ++ (mapAttrsToList (formatKeyValue "${indent} ") (removeAttrs v [ "_section" ])) + ++ [ "${indent}}" ] + ) + else if isAttrs v then + concatStringsSep "\n" ( + [ + "${indent}${n} {" + ] + ++ (mapAttrsToList (formatKeyValue "${indent} ") v) + ++ [ "${indent}}" ] + ) + else + throw (traceSeq v "services.dovecot2.settings: unexpected type"); - '' - default_internal_user = ${cfg.user} - default_internal_group = ${cfg.group} - ${optionalString (cfg.mailUser != null) "mail_uid = ${cfg.mailUser}"} - ${optionalString (cfg.mailGroup != null) "mail_gid = ${cfg.mailGroup}"} + doveConf = + let + configVersion = cfg.settings.dovecot_config_version or null; + storageVersion = cfg.settings.dovecot_storage_version or null; + remainingSettings = builtins.removeAttrs cfg.settings [ + "dovecot_config_version" + "dovecot_storage_version" + ]; + in + concatStringsSep "\n" ( + optional (configVersion != null) (formatKeyValue "" "dovecot_config_version" configVersion) + ++ optional (storageVersion != null) (formatKeyValue "" "dovecot_storage_version" storageVersion) + ++ optionals (cfg.includeFiles != [ ]) (map (f: "!include ${f}") cfg.includeFiles) + ++ flatten (mapAttrsToList (formatKeyValue "") remainingSettings) + ); - mail_location = ${cfg.mailLocation} - - maildir_copy_with_hardlinks = yes - pop3_uidl_format = %08Xv%08Xu - - auth_mechanisms = plain login - - service auth { - user = root - } - '' - - (optionalString cfg.enablePAM '' - userdb { - driver = passwd - } - - passdb { - driver = pam - args = ${optionalString cfg.showPAMFailure "failure_show_msg=yes"} dovecot2 - } - '') - - (optionalString (cfg.mailboxes != { }) '' - namespace inbox { - inbox=yes - ${concatStringsSep "\n" (map mailboxConfig (attrValues cfg.mailboxes))} - } - '') - - (optionalString cfg.enableQuota '' - service quota-status { - executable = ${dovecotPkg}/libexec/dovecot/quota-status -p postfix - inet_listener { - port = ${cfg.quotaPort} - } - client_limit = 1 - } - - plugin { - quota_rule = *:storage=${cfg.quotaGlobalPerUser} - quota = count:User quota # per virtual mail user quota - quota_status_success = DUNNO - quota_status_nouser = DUNNO - quota_status_overquota = "552 5.2.2 Mailbox is full" - quota_grace = 10%% - quota_vsizes = yes - } - '') - - # General plugin settings: - # - sieve is mostly generated here, refer to `pluginSettings` to follow - # the control flow. - '' - plugin { - ${concatStringsSep "\n" (mapAttrsToList (key: value: " ${key} = ${value}") cfg.pluginSettings)} - } - '' - - cfg.extraConfig - ]; - - mailboxConfig = - mailbox: - '' - mailbox "${mailbox.name}" { - auto = ${toString mailbox.auto} - '' - + optionalString (mailbox.autoexpunge != null) '' - autoexpunge = ${mailbox.autoexpunge} - '' - + optionalString (mailbox.specialUse != null) '' - special_use = \${toString mailbox.specialUse} - '' - + "}"; - - mailboxes = - { name, ... }: - { - options = { - name = mkOption { - type = types.strMatching ''[^"]+''; - example = "Spam"; - default = name; - readOnly = true; - description = "The name of the mailbox."; - }; - auto = mkOption { - type = types.enum [ - "no" - "create" - "subscribe" - ]; - default = "no"; - example = "subscribe"; - description = "Whether to automatically create or create and subscribe to the mailbox or not."; - }; - specialUse = mkOption { - type = types.nullOr ( - types.enum [ - "All" - "Archive" - "Drafts" - "Flagged" - "Junk" - "Sent" - "Trash" - ] - ); - default = null; - example = "Junk"; - description = "Null if no special use flag is set. Other than that every use flag mentioned in the RFC is valid."; - }; - autoexpunge = mkOption { - type = types.nullOr types.str; - default = null; - example = "60d"; - description = '' - To automatically remove all email from the mailbox which is older than the - specified time. - ''; - }; - }; - }; + isPre24 = versionOlder cfg.package.version "2.4"; in { imports = [ - (mkRemovedOptionModule [ "services" "dovecot2" "package" ] "") (mkRemovedOptionModule [ "services" "dovecot2" "modules" ] "Now need to use `environment.systemPackages` to load additional Dovecot modules") + (mkRemovedOptionModule [ + "services" + "dovecot2" + "enablePop3" + ] "Set 'services.dovecot2.settings.protocols.pop3 = true/false;' instead.") + (mkRemovedOptionModule [ + "services" + "dovecot2" + "enableImap" + ] "Set 'services.dovecot2.settings.protocols.imap = true/false;' instead.") + (mkRemovedOptionModule [ + "services" + "dovecot2" + "enableLmtp" + ] "Set 'services.dovecot2.settings.protocols.lmtp = true/false;' instead.") + (mkRemovedOptionModule [ + "services" + "dovecot2" + "sslServerCert" + ] "Use `settings.ssl_cert` for Dovecot 2.3, `settings.ssl_server_cert_file` for 2.4.") + (mkRemovedOptionModule [ + "services" + "dovecot2" + "sslServerKey" + ] "Use `settings.ssl_key` for Dovecot 2.3, `settings.ssl_server_key_file` for 2.4.") + (mkRemovedOptionModule [ + "services" + "dovecot2" + "sslCACert" + ] "Use `settings.ssl_ca` for Dovecot 2.3, `settings.ssl_server_ca_file` for 2.4.") + (mkRemovedOptionModule [ + "services" + "dovecot2" + "mailLocation" + ] "Use `settings.mail_location` for Dovecot 2.3, `settings.mail_path` for 2.4.") + (mkRemovedOptionModule [ + "services" + "dovecot2" + "enableDHE" + ] "Use ECDHE instead, or use recommended parameters from RFC7919.") (mkRenamedOptionModule [ "services" "dovecot2" "sieveScripts" ] [ "services" "dovecot2" "sieve" "scripts" ] ) - ]; + (mkRemovedOptionModule [ + "services" + "dovecot2" + "sieve" + "plugins" + ] "Set 'services.dovecot2.settings.plugin.sieve_plugins' instead.") + (mkRenamedOptionModule + [ "services" "dovecot2" "mailUser" ] + [ "services" "dovecot2" "settings" "mail_uid" ] + ) + (mkRenamedOptionModule + [ "services" "dovecot2" "mailGroup" ] + [ "services" "dovecot2" "settings" "mail_gid" ] + ) + (mkRenamedOptionModule + [ "services" "dovecot2" "protocols" ] + [ "services" "dovecot2" "settings" "protocols" ] + ) + ] + ++ ( + let + basePath = [ + "services" + "dovecot2" + ]; + mkRemovedOptions = + list: + map ( + name: mkRemovedOptionModule (basePath ++ name) "Please use services.dovecot2.settings instead." + ) list; + in + mkRemovedOptions [ + [ "extraConfig" ] + [ "mailboxes" ] + [ "pluginSettings" ] + [ "enableQuota" ] + [ "quotaPort" ] + [ "quotaGlobalPerUser" ] + ] + ); options.services.dovecot2 = { enable = mkEnableOption "the dovecot 2.x POP3/IMAP server"; - enablePop3 = mkEnableOption "starting the POP3 listener (when Dovecot is enabled)"; - - enableImap = mkEnableOption "starting the IMAP listener (when Dovecot is enabled)" // { - default = true; + package = mkPackageOption pkgs "dovecot" { } // { + default = + if versionAtLeast config.system.stateVersion "26.05" then pkgs.dovecot else pkgs.dovecot_2_3; + defaultText = lib.literalExpression ''if versionAtLeast config.system.stateVersion "26.05" then pkgs.dovecot else pkgs.dovecot_2_3''; }; - enableLmtp = mkEnableOption "starting the LMTP listener (when Dovecot is enabled)"; + settings = mkOption { + default = { }; + type = + let + inherit (lib.types) + attrsOf + path + bool + int + listOf + nonEmptyListOf + nonEmptyStr + nullOr + oneOf + str + submodule + ; + inherit (lib.lists) last dropEnd; - protocols = mkOption { - type = types.listOf types.str; - default = [ ]; - description = "Additional listeners to start when Dovecot is enabled."; - }; + sectionBase = + fixed: + { name, options, ... }: + let + # if the current name is a list (matches '[definition .*]') -> get + # name' from _module.args.loc & use it for {type,name}Default + name' = + if (builtins.match "[[]definition .*].*" name) == null then + name + else + last (dropEnd 3 options._module.args.loc); - user = mkOption { - type = types.str; - default = "dovecot2"; - description = "Dovecot user name."; - }; + # split name' on the first space + splits = builtins.match "([^ ]+) (.+)" name'; + typeDefault = if splits == null then name' else builtins.elemAt splits 0; + nameDefault = if splits == null then null else builtins.elemAt splits 1; + in + { + options = { + _section = { + type = mkOption { + description = "Section type, mandatory for every section."; + type = nonEmptyStr; + default = typeDefault; - group = mkOption { - type = types.str; - default = "dovecot2"; - description = "Dovecot group name."; - }; + readOnly = fixed; + internal = fixed; + }; + name = mkOption { + description = "Section name, comes after section type & is optional in some cases."; + type = nullOr nonEmptyStr; + default = nameDefault; - extraConfig = mkOption { - type = types.lines; - default = ""; - example = "mail_debug = yes"; - description = "Additional entries to put verbatim into Dovecot's config file."; + readOnly = fixed; + internal = fixed; + }; + }; + }; + + freeformType = attrsOf valueType; + }; + section = submodule (sectionBase false); + fixedSectionWith = + extraModule: + submodule [ + (sectionBase true) + extraModule + ]; + + primitiveType = oneOf [ + int + str + bool + # path must order before section, otherwise the latter will + # interpret path literals as a module path to load + path + section + ]; + + valueType = + nullOr (oneOf [ + primitiveType + (nonEmptyListOf primitiveType) + ]) + // { + description = "Dovecot config value"; + }; + + booleanList = oneOf [ + (attrsOf bool) + (listOf str) + ]; + + toplevel = submodule { + options = { + base_dir = mkOption { + default = baseDir; + description = '' + The base directory in which Dovecot should store runtime data. + + See . + ''; + type = path; + }; + + sendmail_path = mkOption { + default = "/run/wrappers/bin/sendmail"; + description = '' + The binary to use for sending email. + + See . + ''; + type = path; + }; + + mail_plugin_dir = mkOption { + default = "/run/current-system/sw/lib/dovecot/modules"; + description = '' + The directory in which to search for Dovecot mail plugins. + + See . + ''; + type = path; + }; + + default_internal_user = mkOption { + default = "dovecot2"; + description = '' + Define the default internal user. + + See . + ''; + type = str; + }; + + default_internal_group = mkOption { + default = "dovecot2"; + description = '' + Define the default internal group. + + See . + ''; + type = str; + }; + + maildir_copy_with_hardlinks = mkOption { + default = true; + description = '' + If enabled, copying of a message is done with hard links whenever possible. + + See . + ''; + type = bool; + }; + + auth_mechanisms = mkOption { + default = [ + "plain" + "login" + ]; + description = '' + Here you can supply a space-separated list of the authentication mechanisms you wish to use. + + See . + ''; + type = booleanList; + }; + + "passdb pam" = mkOption { + default = null; + description = '' + Configuration for the PAM password database. + + See . + ''; + type = nullOr (fixedSectionWith { + options = { + driver = mkOption { + default = if isPre24 then "pam" else null; + defaultText = literalExpression ''if isPre24 then "pam" else null''; + description = '' + The driver used for this password database. + + See . + ''; + type = nullOr str; + }; + + args = mkOption { + # set below in config + default = null; + defaultText = ''if isPre24 then [ "dovecot2" ] else null''; + description = '' + Arguments for the passdb backend. + + This option is exclusive to Dovecot 2.3. + + See . + ''; + type = nullOr (listOf str); + }; + + service_name = mkOption { + default = if isPre24 then null else "dovecot2"; + defaultText = literalExpression ''if isPre24 then null else "dovecot2"''; + description = '' + The PAM service name to be used with the pam passdb. + + This option is exclusive to Dovecot 2.4. + + See . + ''; + type = nullOr str; + }; + + failure_show_msg = mkOption { + default = if isPre24 then null else cfg.showPAMFailure; + defaultText = literalExpression "if isPre24 then null else config.services.dovecot2.showPAMFailure"; + description = '' + Replace the default "Authentication failed" reply with PAM's failure. + + This option is exclusive to Dovecot 2.4. + + See . + ''; + type = nullOr bool; + }; + }; + }); + }; + + "userdb passwd" = mkOption { + default = null; + description = '' + Configuration for the Passwd user database. + + See . + ''; + type = nullOr (fixedSectionWith { + options = { + driver = mkOption { + default = if isPre24 then "passwd" else null; + defaultText = literalExpression ''if isPre24 then "passwd" else null''; + description = '' + The driver used for this user database. + + See . + ''; + type = nullOr str; + }; + }; + }); + }; + + # 2.3-only options + + plugin = mkOption { + default = null; + description = "Plugin settings. This option is exclusive to Dovecot 2.3."; + type = nullOr (fixedSectionWith { + options = { + sieve_pipe_bin_dir = mkOption { + default = null; + description = '' + Points to a directory where the plugin looks for programs (shell scripts) to execute directly and pipe messages to for the *vnd.dovecot.pipe* extension. + + This option is exclusive to Dovecot 2.3. + + See . + ''; + type = nullOr path; + }; + + sieve_plugins = mkOption { + default = null; + description = '' + List of Sieve plugins to load. + + This option is exclusive to Dovecot 2.3. + + See . + ''; + type = nullOr (listOf str); + }; + + sieve_extensions = mkOption { + default = null; + description = '' + The Sieve language extensions available to users. + + This option is exclusive to Dovecot 2.3. + + See . + ''; + type = nullOr (listOf str); + }; + + sieve_global_extensions = mkOption { + default = null; + description = '' + Which Sieve language extensions are **only** available in global scripts. + + This option is exclusive to Dovecot 2.3. + + See . + ''; + type = nullOr (listOf str); + }; + }; + }); + }; + + # 2.4-only options + + sieve_script_bin_path = mkOption { + default = if isPre24 then null else "/tmp/dovecot-%{user|username|lower}"; + defaultText = literalExpression '' + if isPre24 + then null + else "/tmp/dovecot-%{user|username|lower}" + ''; + description = '' + Points to the directory where the compiled binaries for this script location are stored. This directory is created automatically if possible. + + This option is exclusive to Dovecot 2.4. + + See . + ''; + type = nullOr str; + }; + + sieve_pipe_bin_dir = mkOption { + default = null; + description = '' + Points to a directory where the plugin looks for programs (shell scripts) to execute directly and pipe messages to for the *vnd.dovecot.pipe* extension. + + This option is exclusive to Dovecot 2.4. + + See . + ''; + type = nullOr path; + }; + + sieve_plugins = mkOption { + default = null; + description = '' + List of Sieve plugins to load. + + This option is exclusive to Dovecot 2.4. + + See . + ''; + type = nullOr booleanList; + }; + + sieve_global_extensions = mkOption { + default = null; + description = '' + Which Sieve language extensions are **only** available in global scripts. + + This option is exclusive to Dovecot 2.4. + + See . + ''; + type = nullOr booleanList; + }; + }; + + freeformType = attrsOf valueType; + }; + in + toplevel; + description = '' + Dovecot configuration, see + for all available options. + + For information on the configuration structure, see . + + ::: {.warning} + Explicit settings in [{option}`services.dovecot2.settings`](#opt-services.dovecot2.settings) can silently override values set by other `services.dovecot2.*` options. + ::: + ''; + example = { + protocols = { + imap = true; + submission = true; + lmtp = true; + }; + + mail_driver = "maildir"; + mail_home = "/var/vmail/%{user | domain}/%{user | username}"; + mail_path = "~/mail"; + + "namespace inbox" = { + inbox = true; + separator = "/"; + }; + service = [ + { + _section.name = "imap"; + process_min_avail = 1; + client_limit = 100; + "inet_listener imap".port = 31143; + "inet_listener imaps".port = 31993; + } + { + _section.name = "lmtp"; + user = "dovemail"; + "unix_listener lmtp" = { + mode = "0660"; + user = "postfix"; + }; + } + ]; + "protocol imap".mail_plugins = { + imap_sieve = true; + imap_filter_sieve = true; + }; + mail_attribute."dict file" = { + path = "%{home}/dovecot-attributes"; + }; + }; }; mailPlugins = @@ -374,132 +742,38 @@ in type = types.nullOr types.path; default = null; description = "Config file used for the whole dovecot configuration."; - apply = v: if v != null then v else pkgs.writeText "dovecot.conf" dovecotConf; + apply = v: if v != null then v else pkgs.writeText "dovecot.conf" doveConf; }; - mailLocation = mkOption { - type = types.str; - default = "maildir:/var/spool/mail/%u"; # Same as inbox, as postfix - example = "maildir:~/mail:INBOX=/var/spool/mail/%u"; - description = '' - Location that dovecot will use for mail folders. Dovecot mail_location option. - ''; - }; - - mailUser = mkOption { - type = types.nullOr types.str; - default = null; - description = "Default user to store mail for virtual users."; - }; - - mailGroup = mkOption { - type = types.nullOr types.str; - default = null; - description = "Default group to store mail for virtual users."; + includeFiles = mkOption { + type = types.listOf types.path; + default = [ ]; + description = "Files to include in the Dovecot config file using !include directives."; + example = [ "/foo/bar/extraDovecotConfig.conf" ]; }; createMailUser = mkEnableOption '' automatically creating the user - given in {option}`services.dovecot.user` and the group - given in {option}`services.dovecot.group`'' + given in {option}`services.dovecot2.settings.mail_uid` and the group + given in {option}`services.dovecot2.settings.mail_gid`'' // { default = true; }; - sslCACert = mkOption { - type = types.nullOr types.str; - default = null; - description = "Path to the server's CA certificate key."; - }; - - sslServerCert = mkOption { - type = types.nullOr types.str; - default = null; - description = "Path to the server's public key."; - }; - - sslServerKey = mkOption { - type = types.nullOr types.str; - default = null; - description = "Path to the server's private key."; - }; - - enablePAM = mkEnableOption "creating a own Dovecot PAM service and configure PAM user logins" // { - default = true; - }; - - enableDHE = mkEnableOption "ssl_dh and generation of primes for the key exchange" // { - default = true; - }; + enablePAM = mkEnableOption "creating a own Dovecot PAM service and configure PAM user logins"; showPAMFailure = mkEnableOption "showing the PAM failure message on authentication error (useful for OTPW)"; - mailboxes = mkOption { - type = - with types; - coercedTo (listOf unspecified) ( - list: - listToAttrs ( - map (entry: { - name = entry.name; - value = removeAttrs entry [ "name" ]; - }) list - ) - ) (attrsOf (submodule mailboxes)); - default = { }; - example = literalExpression '' - { - Spam = { specialUse = "Junk"; auto = "create"; }; - } - ''; - description = "Configure mailboxes and auto create or subscribe them."; - }; - - enableQuota = mkEnableOption "the dovecot quota service"; - - quotaPort = mkOption { - type = types.str; - default = "12340"; - description = '' - The Port the dovecot quota service binds to. - If using postfix, add check_policy_service inet:localhost:12340 to your smtpd_recipient_restrictions in your postfix config. - ''; - }; - quotaGlobalPerUser = mkOption { - type = types.str; - default = "100G"; - example = "10G"; - description = "Quota limit for the user in bytes. Supports suffixes b, k, M, G, T and %."; - }; - - pluginSettings = mkOption { - # types.str does not coerce from packages, like `sievePipeBinScriptDirectory`. - type = types.attrsOf ( - types.oneOf [ - types.str - types.package - ] - ); - default = { }; - example = literalExpression '' - { - sieve = "file:~/sieve;active=~/.dovecot.sieve"; - } - ''; - description = '' - Plugin settings for dovecot in general, e.g. `sieve`, `sieve_default`, etc. - - Some of the other knobs of this module will influence by default the plugin settings, but you - can still override any plugin settings. - - If you override a plugin setting, its value is cleared and you have to copy over the defaults. - ''; - }; - imapsieve.mailbox = mkOption { default = [ ]; - description = "Configure Sieve filtering rules on IMAP actions"; + description = '' + Configure Sieve filtering rules on IMAP actions + + ::: {.note} + This option is no longer used starting from Dovecot version 2.4. + ::: + ''; type = types.listOf ( types.submodule ( { config, ... }: @@ -576,13 +850,6 @@ in }; sieve = { - plugins = mkOption { - default = [ ]; - example = [ "sieve_extprograms" ]; - description = "Sieve plugins to load"; - type = types.listOf types.str; - }; - extensions = mkOption { default = [ ]; description = "Sieve extensions for use in user scripts"; @@ -624,36 +891,69 @@ in config = mkIf cfg.enable { security.pam.services.dovecot2 = mkIf cfg.enablePAM { }; - security.dhparams = mkIf (cfg.sslServerCert != null && cfg.enableDHE) { - enable = true; - params.dovecot2 = { }; - }; - services.dovecot2 = { - protocols = - optional cfg.enableImap "imap" ++ optional cfg.enablePop3 "pop3" ++ optional cfg.enableLmtp "lmtp"; + sieve.globalExtensions = mkIf isPre24 (optional (cfg.sieve.pipeBins != [ ]) "vnd.dovecot.pipe"); - mailPlugins = mkIf cfg.enableQuota { - globally.enable = [ "quota" ]; - perProtocol.imap.enable = [ "imap_quota" ]; - }; + settings = mkMerge [ + # these options differ quite a bit between 2.3 and 2.4, which is why they were split up here + # for pre-2.4: + (mkIf isPre24 { + "passdb pam" = mkIf cfg.enablePAM { + args = mkMerge ( + optional cfg.showPAMFailure "failure_show_msg=yes" ++ singleton (lib.mkAfter [ "dovecot2" ]) + ); + }; - sieve.plugins = - optional (cfg.imapsieve.mailbox != [ ]) "sieve_imapsieve" - ++ optional (cfg.sieve.pipeBins != [ ]) "sieve_extprograms"; + "userdb passwd" = mkIf cfg.enablePAM { }; - sieve.globalExtensions = optional (cfg.sieve.pipeBins != [ ]) "vnd.dovecot.pipe"; + mail_plugins = mkDefault "$mail_plugins ${concatStringsSep " " cfg.mailPlugins.globally.enable}"; - pluginSettings = lib.mapAttrs (n: lib.mkDefault) ( - { - sieve_plugins = concatStringsSep " " cfg.sieve.plugins; - sieve_extensions = concatStringsSep " " (map (el: "+${el}") cfg.sieve.extensions); - sieve_global_extensions = concatStringsSep " " (map (el: "+${el}") cfg.sieve.globalExtensions); - sieve_pipe_bin_dir = sievePipeBinScriptDirectory; - } - // sieveScriptSettings - // imapSieveMailboxSettings - ); + plugin = mkMerge [ + sieveScriptSettings + imapSieveMailboxSettings + { + sieve_plugins = mkMerge [ + (mkIf (cfg.imapsieve.mailbox != [ ]) [ "sieve_imapsieve" ]) + (mkIf (cfg.sieve.pipeBins != [ ]) [ "sieve_extprograms" ]) + ]; + sieve_pipe_bin_dir = + mkIf (cfg.sieve.pipeBins != [ ]) # . + sievePipeBinScriptDirectory; + sieve_extensions = + mkIf (cfg.sieve.extensions != [ ]) # . + (map (el: "+${el}") cfg.sieve.extensions); + sieve_global_extensions = + mkIf (cfg.sieve.globalExtensions != [ ]) # . + (map (el: "+${el}") cfg.sieve.globalExtensions); + } + ]; + }) + (mkIf (isPre24 && cfg.mailPlugins.perProtocol != { } || cfg.mailPlugins.globally.enable != [ ]) ( + listToAttrs ( + map (m: { + name = "protocol ${elemAt (splitString "." m.name) 0}"; + value.mail_plugins = "$mail_plugins ${ + concatStringsSep " " (m.value.enable ++ cfg.mailPlugins.globally.enable) + }"; + }) (attrsToList cfg.mailPlugins.perProtocol) + ) + )) + # for 2.4: + (mkIf (!isPre24) { + "passdb pam" = mkIf cfg.enablePAM { }; + "userdb passwd" = mkIf cfg.enablePAM { }; + + sieve_plugins = mkIf (cfg.sieve.pipeBins != [ ]) { + "sieve_extprograms" = true; + }; + + sieve_global_extensions = mkIf (cfg.sieve.pipeBins != [ ]) { + "vnd.dovecot.pipe" = true; + }; + + sieve_pipe_bin_dir = mkIf (cfg.sieve.pipeBins != [ ]) sievePipeBinScriptDirectory; + }) + ]; }; users.users = { @@ -663,29 +963,31 @@ in group = "dovenull"; }; } - // optionalAttrs (cfg.user == "dovecot2") { + // optionalAttrs (cfg.settings.default_internal_user == "dovecot2") { dovecot2 = { uid = config.ids.uids.dovecot2; description = "Dovecot user"; - group = cfg.group; + group = cfg.settings.default_internal_group; }; } - // optionalAttrs (cfg.createMailUser && cfg.mailUser != null) { - ${cfg.mailUser} = { + // optionalAttrs (cfg.settings.mail_uid or null != null && cfg.createMailUser) { + ${cfg.settings.mail_uid} = { description = "Virtual Mail User"; isSystemUser = true; } - // optionalAttrs (cfg.mailGroup != null) { group = cfg.mailGroup; }; + // optionalAttrs (cfg.settings.mail_gid or null != null) { + group = cfg.settings.mail_gid; + }; }; users.groups = { dovenull.gid = config.ids.gids.dovenull2; } - // optionalAttrs (cfg.group == "dovecot2") { + // optionalAttrs (cfg.settings.default_internal_group == "dovecot2") { dovecot2.gid = config.ids.gids.dovecot2; } - // optionalAttrs (cfg.createMailUser && cfg.mailGroup != null) { - ${cfg.mailGroup} = { }; + // optionalAttrs (cfg.settings.mail_gid or null != null && cfg.createMailUser) { + ${cfg.settings.mail_gid} = { }; }; environment.etc."dovecot/dovecot.conf".source = cfg.configFile; @@ -704,8 +1006,8 @@ in startLimitIntervalSec = 60; # 1 min serviceConfig = { Type = "notify"; - ExecStart = "${dovecotPkg}/sbin/dovecot -F"; - ExecReload = "${dovecotPkg}/sbin/doveadm reload"; + ExecStart = "${lib.getExe cfg.package} -F"; + ExecReload = "${lib.getExe' cfg.package "doveadm"} reload"; CapabilityBoundingSet = [ "CAP_CHOWN" @@ -770,10 +1072,12 @@ in else cp -p '${from}' '${stateDir}/sieve/${to}' fi - ${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/sieve/${to}' + ${sievec} '${stateDir}/sieve/${to}' '') cfg.sieve.scripts )} - chown -R '${cfg.mailUser}:${cfg.mailGroup}' '${stateDir}/sieve' + ${optionalString ( + cfg.settings ? mail_uid && cfg.settings.mail_uid != null && cfg.settings.mail_gid != null + ) "chown -R '${cfg.settings.mail_uid}:${cfg.settings.mail_gid}' '${stateDir}/sieve'"} '' + optionalString (cfg.imapsieve.mailbox != [ ]) '' mkdir -p ${stateDir}/imapsieve/{before,after} @@ -782,38 +1086,104 @@ in el: optionalString (el.before != null) '' cp -p ${el.before} ${stateDir}/imapsieve/before/${baseNameOf el.before} - ${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/imapsieve/before/${baseNameOf el.before}' + ${sievec} '${stateDir}/imapsieve/before/${baseNameOf el.before}' '' + optionalString (el.after != null) '' cp -p ${el.after} ${stateDir}/imapsieve/after/${baseNameOf el.after} - ${pkgs.dovecot_pigeonhole}/bin/sievec '${stateDir}/imapsieve/after/${baseNameOf el.after}' + ${sievec} '${stateDir}/imapsieve/after/${baseNameOf el.after}' '' ) cfg.imapsieve.mailbox} ${optionalString ( - cfg.mailUser != null && cfg.mailGroup != null - ) "chown -R '${cfg.mailUser}:${cfg.mailGroup}' '${stateDir}/imapsieve'"} + cfg.settings ? mail_uid && cfg.settings.mail_uid != null && cfg.settings.mail_gid != null + ) "chown -R '${cfg.settings.mail_uid}:${cfg.settings.mail_gid}' '${stateDir}/imapsieve'"} ''; }; - environment.systemPackages = [ dovecotPkg ]; + environment.systemPackages = [ cfg.package ]; - warnings = warnAboutExtraConfigCollisions; + warnings = optional isPre24 '' + While Dovecot 2.3 is not yet deprecated or EOL, + there is a newer version available in Nixpkgs (Dovecot 2.4). + Check https://doc.dovecot.org/latest/installation/upgrade/2.3-to-2.4.html + before upgrading. + ''; assertions = [ + { + assertion = isPre24 || cfg.settings.dovecot_config_version != null; + message = '' + services.dovecot2: Since Dovecot 2.4, the option 'services.dovecot2.settings.dovecot_config_version' must be explicitly set. + To retain compatibility with future updates, set the following and manually update as needed. + + services.dovecot2.settings.dovecot_config_version = "${cfg.package.version}"; + + Alternatively, you can automatically update to newer versions of the configuration format, which might break compatibility with future updates. + + services.dovecot2.settings.dovecot_config_version = config.services.dovecot2.package.version; + + See . + ''; + } + { + assertion = isPre24 || cfg.settings.dovecot_storage_version != null; + message = '' + services.dovecot2: Since Dovecot 2.4, the option 'services.dovecot2.settings.dovecot_storage_version' must be explicitly set. + Set it to the oldest version the storage should stay compatible with, for example the following for the currently selected version. + + services.dovecot2.settings.dovecot_storage_version = "${cfg.package.version}"; + + See . + ''; + } + { + assertion = isPre24 || cfg.imapsieve.mailbox == [ ]; + message = "since Dovecot 2.4, the `imapsieve.mailbox` option is no longer used in the NixOS module, please use the `settings` option instead."; + } + { + assertion = isPre24 || cfg.sieve.scripts == { }; + message = '' + services.dovecot2: Since Dovecot 2.4, the option 'services.dovecot2.sieve.scripts' is no longer valid, but it is set. + See . + ''; + } + { + assertion = isPre24 || cfg.sieve.extensions == [ ]; + message = '' + services.dovecot2: Since Dovecot 2.4, the option 'services.dovecot2.sieve.extensions' is no longer valid, but it is set. + Set 'services.dovecot2.settings.sieve_extensions' instead. + See . + ''; + } + { + assertion = isPre24 || cfg.sieve.globalExtensions == [ ]; + message = '' + services.dovecot2: Since Dovecot 2.4, the option 'services.dovecot2.sieve.globalExtensions' is no longer valid, but it is set. + Set 'services.dovecot2.settings.sieve_global_extensions' instead. + See . + ''; + } { assertion = - (cfg.sslServerCert == null) == (cfg.sslServerKey == null) - && (cfg.sslCACert != null -> !(cfg.sslServerCert == null || cfg.sslServerKey == null)); - message = "dovecot needs both sslServerCert and sslServerKey defined for working crypto"; + isPre24 + || + # this is the default value for cfg.mailPlugins + cfg.mailPlugins == { + globally = { + enable = [ ]; + }; + perProtocol = { }; + }; + message = "since Dovecot 2.4, the `mailPlugins` option is no longer used in the NixOS module, please use the `settings` option instead."; } { assertion = cfg.showPAMFailure -> cfg.enablePAM; message = "dovecot is configured with showPAMFailure while enablePAM is disabled"; } { - assertion = cfg.sieve.scripts != { } -> (cfg.mailUser != null && cfg.mailGroup != null); - message = "dovecot requires mailUser and mailGroup to be set when `sieve.scripts` is set"; + assertion = + cfg.sieve.scripts != { } -> (cfg.settings.mail_uid != null && cfg.settings.mail_gid != null); + message = "dovecot requires settings.mail_uid and settings.mail_gid to be set when `sieve.scripts` is set"; } { assertion = config.systemd.services ? dovecot2 == false; @@ -822,8 +1192,11 @@ in ''; } ]; - }; - meta.maintainers = [ lib.maintainers.dblsaiko ]; + meta.maintainers = with lib.maintainers; [ + dblsaiko + jappie3 + prince213 + ]; } diff --git a/nixos/modules/services/web-apps/drupal.nix b/nixos/modules/services/web-apps/drupal.nix index dff3450553be..3b307327a6d7 100644 --- a/nixos/modules/services/web-apps/drupal.nix +++ b/nixos/modules/services/web-apps/drupal.nix @@ -66,8 +66,8 @@ let postInstall = '' ln -s ${cfg.stateDir}/sites $out/share/php/${cfg.package.pname}${cfg.webRoot} - ln -s ${cfg.modulesDir} $out/share/php/${cfg.package.pname}/modules - ln -s ${cfg.themesDir} $out/share/php/${cfg.package.pname}/themes + ln -s ${cfg.modulesDir} $out/share/php/${cfg.package.pname}${cfg.webRoot}/modules/nixos-modules + ln -s ${cfg.themesDir} $out/share/php/${cfg.package.pname}${cfg.webRoot}/themes/nixos-themes ''; }); diff --git a/nixos/modules/system/boot/systemd.nix b/nixos/modules/system/boot/systemd.nix index 8c2735c00b8c..2808a2ac4e21 100644 --- a/nixos/modules/system/boot/systemd.nix +++ b/nixos/modules/system/boot/systemd.nix @@ -886,6 +886,21 @@ in serviceConfig.ExecSearchPath = "${config.services.openssh.package}/bin"; overrideStrategy = "asDropin"; }; + + # Fix paths in sshd-vsock.socket + # https://github.com/systemd/systemd/blob/v259.3/src/ssh-generator/ssh-generator.c#L239 + # this socket is used, for example, when NixOS is started via systemd-vmspawn + systemd.sockets.sshd-vsock = mkIf config.services.openssh.enable { + overrideStrategy = "asDropin"; + socketConfig.ExecStartPost = [ + "" + "${config.systemd.package}/lib/systemd/systemd-ssh-issue --make-vsock" + ]; + socketConfig.ExecStopPre = [ + "" + "${config.systemd.package}/lib/systemd/systemd-ssh-issue --rm-vsock" + ]; + }; }; # FIXME: Remove these eventually. diff --git a/nixos/tests/dovecot.nix b/nixos/tests/dovecot.nix index 83b3781c773d..ddc8b6632acc 100644 --- a/nixos/tests/dovecot.nix +++ b/nixos/tests/dovecot.nix @@ -2,18 +2,28 @@ name = "dovecot"; nodes.machine = - { pkgs, ... }: + { config, pkgs, ... }: + let + dovecot = config.services.dovecot2.package; + in { imports = [ common/user-account.nix ]; services.postfix.enable = true; services.dovecot2 = { enable = true; - protocols = [ - "imap" - "pop3" - ]; - mailUser = "vmail"; - mailGroup = "vmail"; + enablePAM = true; + settings = { + dovecot_config_version = dovecot.version; + dovecot_storage_version = dovecot.version; + mail_driver = "maildir"; + mail_path = "${config.services.postfix.settings.main.mail_spool_directory}/%{user}"; + protocols = [ + "imap" + "pop3" + ]; + mail_uid = "vmail"; + mail_gid = "vmail"; + }; }; environment.systemPackages = let @@ -31,7 +41,7 @@ sendTestMailViaDeliveryAgent = pkgs.writeScriptBin "send-lda" '' #!${pkgs.runtimeShell} - exec ${pkgs.dovecot}/libexec/dovecot/deliver -d bob <$ Obsession ''; } + { + plugin = vim-obsession; + type = "lua"; + config = '' + -- this is a comment + vim.g.nixpkgs_test_value = 42 + ''; + } ]; packagesWithSingleLineConfigs = with vimPlugins; [ @@ -43,20 +48,6 @@ let } ]; - nvimConfSingleLines = { - plugins = packagesWithSingleLineConfigs; - neovimRcContent = '' - " just a comment - ''; - }; - - nvimConfNix = { - inherit plugins; - neovimRcContent = '' - " just a comment - ''; - }; - nvim-with-luasnip = wrapNeovim2 "-with-luasnip" { plugins = [ { @@ -105,6 +96,7 @@ let } ( '' + export PATH="${neovim-drv}/bin:$PATH" source ${nmt}/bash-lib/assertions.sh vimrc="${writeText "test-${neovim-drv.name}-init.vim" neovim-drv.initRc}" luarc="${writeText "test-${neovim-drv.name}-init.lua" neovim-drv.luaRcContent}" @@ -139,8 +131,19 @@ pkgs.lib.recurseIntoAttrs rec { ### neovim tests ################## - nvim_with_plugins = wrapNeovim2 "-with-plugins" nvimConfNix; - nvim_singlelines = wrapNeovim2 "-single-lines" nvimConfSingleLines; + nvim_with_plugins = wrapNeovim2 "-with-plugins" { + inherit plugins; + neovimRcContent = '' + " just a comment + ''; + }; + + nvim_singlelines = wrapNeovim2 "-single-lines" { + plugins = packagesWithSingleLineConfigs; + neovimRcContent = '' + " just a comment + ''; + }; # test that passthru.initRc hasn't changed passthruInitRc = runTest nvim_singlelines '' @@ -413,12 +416,19 @@ pkgs.lib.recurseIntoAttrs rec { # check that bringing in one plugin with lua deps makes those deps visible from wrapper # for instance luasnip has a dependency on jsregexp can_require_transitive_deps = runTest nvim-with-luasnip '' - ${nvim-with-luasnip}/bin/nvim -i NONE -c "lua require'jsregexp'" -e +quitall! + nvim --headless -i NONE -c "lua require'jsregexp'" -e +quitall! ''; inherit nvim_with_rocks_nvim; rocks_install_plenary = runTest nvim_with_rocks_nvim '' - ${nvim_with_rocks_nvim}/bin/nvim -V3log.txt -i NONE +'Rocks install plenary.nvim' +quit! -e + nvim -V3rocks-log.txt -i NONE +'Rocks install plenary.nvim' +quit! -e + ''; + + can_load_lua_config = runTest nvim_with_plugins '' + if ! nvim --headless -V3lua-config-log.txt -i NONE -c 'lua if vim.g.nixpkgs_test_value ~= 42 then os.exit(42) end' +quit! -e; then + echo "Failed to find plugin config" + exit 1 + fi ''; inherit (vimPlugins) corePlugins; diff --git a/pkgs/applications/editors/neovim/utils.nix b/pkgs/applications/editors/neovim/utils.nix index af180c869a73..ae3ff9dc1800 100644 --- a/pkgs/applications/editors/neovim/utils.nix +++ b/pkgs/applications/editors/neovim/utils.nix @@ -6,12 +6,8 @@ config, vimUtils, vimPlugins, - nodejs, neovim-unwrapped, - bundlerEnv, - ruby, lua, - python3Packages, wrapNeovimUnstable, }: let @@ -109,11 +105,12 @@ let # viml config set by the user along with the plugin inherit (checked_cfg) - userPluginViml + userPluginViml # redefine via userPluginConfigs runtimeDeps pluginAdvisedLua pluginPython3Packages luaDependencies + userPluginConfigs ; # A Vim "package", see ':h packages' diff --git a/pkgs/applications/editors/neovim/wrapper.nix b/pkgs/applications/editors/neovim/wrapper.nix index 723f608c3f40..f048fac3ac2b 100644 --- a/pkgs/applications/editors/neovim/wrapper.nix +++ b/pkgs/applications/editors/neovim/wrapper.nix @@ -14,7 +14,6 @@ neovimUtils, perl, lndir, - vimUtils, runCommand, }: @@ -100,7 +99,10 @@ let # we call vimrcContent without 'packages' to avoid the init.vim generation neovimRcContent' = lib.concatStringsSep "\n" ( - vimPackageInfo.userPluginViml ++ lib.optional (neovimRcContent != null) neovimRcContent + lib.optional (vimPackageInfo.userPluginConfigs.viml or "" != "") ( + vimPackageInfo.userPluginConfigs.viml + ) + ++ (lib.optional (neovimRcContent != null) neovimRcContent) ); packpathDirs.myNeovimPackages = vimPackageInfo.vimPackage; @@ -126,6 +128,9 @@ let lib.optional (luaDeps != [ ]) luaPathLuaRc ++ [ providerLuaRc ] ++ lib.optional (luaRcContent != "") luaRcContent + ++ lib.optional ( + vimPackageInfo.userPluginConfigs.lua or "" != "" + ) vimPackageInfo.userPluginConfigs.lua ++ lib.optional (neovimRcContent' != "") '' vim.cmd.source "${writeText "init.vim" neovimRcContent'}" '' diff --git a/pkgs/applications/editors/vim/plugins/generated.nix b/pkgs/applications/editors/vim/plugins/generated.nix index 87ac3ebe270d..ff0ab4fbc83e 100644 --- a/pkgs/applications/editors/vim/plugins/generated.nix +++ b/pkgs/applications/editors/vim/plugins/generated.nix @@ -5980,6 +5980,19 @@ final: prev: { meta.hydraPlatforms = [ ]; }; + git-dev-nvim = buildVimPlugin { + pname = "git-dev.nvim"; + version = "0.11.0-unstable-2026-04-11"; + src = fetchFromGitHub { + owner = "moyiz"; + repo = "git-dev.nvim"; + rev = "916c7309c34bd8f53da1e30f31cec697e9ac5e52"; + hash = "sha256-5KSjh/Gh8sXrQ7YU66XaaM1M1a3LZswamoBtnA6qiKg="; + }; + meta.homepage = "https://github.com/moyiz/git-dev.nvim/"; + meta.hydraPlatforms = [ ]; + }; + git-messenger-vim = buildVimPlugin { pname = "git-messenger.vim"; version = "0-unstable-2025-05-30"; @@ -23777,6 +23790,19 @@ final: prev: { meta.hydraPlatforms = [ ]; }; + zen-nvim = buildVimPlugin { + pname = "zen.nvim"; + version = "0-unstable-2026-04-12"; + src = fetchFromGitHub { + owner = "sand4rt"; + repo = "zen.nvim"; + rev = "31d0d45a56eae2a750818b7afa9f504044d7e382"; + hash = "sha256-vmQ3dJpMACv4oP4MKuIHe3PVs1ZMy0916lNRmtbzZ88="; + }; + meta.homepage = "https://github.com/sand4rt/zen.nvim/"; + meta.hydraPlatforms = [ ]; + }; + zenbones-nvim = buildVimPlugin { pname = "zenbones.nvim"; version = "4.11.0-unstable-2026-02-11"; diff --git a/pkgs/applications/editors/vim/plugins/vim-plugin-names b/pkgs/applications/editors/vim/plugins/vim-plugin-names index 132b9818d97e..0e25e5f7fb0a 100644 --- a/pkgs/applications/editors/vim/plugins/vim-plugin-names +++ b/pkgs/applications/editors/vim/plugins/vim-plugin-names @@ -458,6 +458,7 @@ https://github.com/eagletmt/ghcmod-vim/,, https://github.com/f-person/git-blame.nvim/,, https://github.com/akinsho/git-conflict.nvim/,HEAD, https://github.com/juansalvatore/git-dashboard-nvim/,HEAD, +https://github.com/moyiz/git-dev.nvim/,, https://github.com/rhysd/git-messenger.vim/,, https://github.com/mikesmithgh/git-prompt-string-lualine.nvim/,HEAD, https://github.com/polarmutex/git-worktree.nvim/,HEAD, @@ -1827,6 +1828,7 @@ https://github.com/KabbAmine/zeavim.vim/,, https://github.com/swaits/zellij-nav.nvim/,HEAD, https://github.com/Lilja/zellij.nvim/,HEAD, https://github.com/folke/zen-mode.nvim/,, +https://github.com/sand4rt/zen.nvim/,HEAD, https://github.com/zenbones-theme/zenbones.nvim/,HEAD, https://github.com/jnurmine/zenburn/,, https://github.com/nvimdev/zephyr-nvim/,, diff --git a/pkgs/applications/misc/openbangla-keyboard/default.nix b/pkgs/applications/misc/openbangla-keyboard/default.nix index 510402f40417..005345179886 100644 --- a/pkgs/applications/misc/openbangla-keyboard/default.nix +++ b/pkgs/applications/misc/openbangla-keyboard/default.nix @@ -73,10 +73,7 @@ stdenv.mkDerivation (finalAttrs: { mainProgram = "openbangla-gui"; homepage = "https://openbangla.github.io/"; license = lib.licenses.gpl3Plus; - maintainers = with lib.maintainers; [ - hqurve - johnrtitor - ]; + maintainers = with lib.maintainers; [ johnrtitor ]; platforms = lib.platforms.linux; # never built on aarch64-linux since first introduction in nixpkgs broken = stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isAarch64; diff --git a/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix b/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix index 980e5044af68..c77cb1ca44f5 100644 --- a/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix +++ b/pkgs/applications/misc/remarkable/remarkable-mouse/default.nix @@ -1,28 +1,35 @@ { lib, buildPythonApplication, - fetchPypi, + fetchFromGitHub, libevdev, paramiko, pynput, + setuptools, screeninfo, + tkinter, }: -buildPythonApplication rec { +buildPythonApplication { pname = "remarkable-mouse"; - version = "7.1.1"; - format = "setuptools"; + version = "unstable-2024-02-23"; - src = fetchPypi { - inherit pname version; - hash = "sha256-82P9tE3jiUlKBGZCiWDoL+9VJ06Bc+If+aMfcEEU90U="; + src = fetchFromGitHub { + owner = "Evidlo"; + repo = "remarkable_mouse"; + rev = "05142ef37a8b3f9e350156a14c2dec6844ed0ea8"; + hash = "sha256-0X/7SIfSnlEL98fxJBAYrHAkRmdtymqA7xBmVoa5VIw="; }; + pyproject = true; + build-system = [ setuptools ]; + propagatedBuildInputs = [ screeninfo paramiko pynput libevdev + tkinter ]; # no tests diff --git a/pkgs/applications/networking/cluster/terraform-providers/providers.json b/pkgs/applications/networking/cluster/terraform-providers/providers.json index 5e1037ff713d..67018d55cd5c 100644 --- a/pkgs/applications/networking/cluster/terraform-providers/providers.json +++ b/pkgs/applications/networking/cluster/terraform-providers/providers.json @@ -110,13 +110,13 @@ "vendorHash": null }, "bpg_proxmox": { - "hash": "sha256-1bNiIhF5AyvpQZYIOu9YHa+ACx/mE+1MRUdK8AcHuv0=", + "hash": "sha256-D8pHNC3iof/zSVsCLAu2S6BJlUnUGySQc0tP4RfZ9V0=", "homepage": "https://registry.terraform.io/providers/bpg/proxmox", "owner": "bpg", "repo": "terraform-provider-proxmox", - "rev": "v0.100.0", + "rev": "v0.101.1", "spdx": "MPL-2.0", - "vendorHash": "sha256-l0acl8PpDN/o2OHVRirswy297L/VM8MC85OrsPbyo0s=" + "vendorHash": "sha256-oEl7thSbcviz3pDOYE6ovCBBA4Zdmoss8H/On33zL2o=" }, "brightbox_brightbox": { "hash": "sha256-pwFbCP+qDL/4IUfbPRCkddkbsEEeAu7Wp12/mDL0ABA=", @@ -824,13 +824,13 @@ "vendorHash": "sha256-7mJ+BX7laBKsr4DX1keMXnGi79CZp8M1jD0COQ1lcmU=" }, "kreuzwerker_docker": { - "hash": "sha256-fektxIObUvQSHeu1MJL3lirF+oUq8+CheaxcPDoQB+k=", + "hash": "sha256-PwImvuX6NkdYFjS4I7BbTZWEIVsJ01rsfiLcLfGales=", "homepage": "https://registry.terraform.io/providers/kreuzwerker/docker", "owner": "kreuzwerker", "repo": "terraform-provider-docker", - "rev": "v4.0.0", + "rev": "v4.1.0", "spdx": "MPL-2.0", - "vendorHash": "sha256-wqHArSldDyAxFX0Hmcl6FRDzfRuZGssl1h4GjN/0mgQ=" + "vendorHash": "sha256-3NlY3EysHcRu7aV4NoJxF2IhQ17F9JtxldC5+x3PbL0=" }, "launchdarkly_launchdarkly": { "hash": "sha256-lcemT7kpBlZX35Sb+ujHzSdakBQkUSmYAxTVsJkRW6A=", diff --git a/pkgs/applications/science/math/labplot/default.nix b/pkgs/applications/science/math/labplot/default.nix index f1f07f250b81..9e01f7107d78 100644 --- a/pkgs/applications/science/math/labplot/default.nix +++ b/pkgs/applications/science/math/labplot/default.nix @@ -121,7 +121,7 @@ stdenv.mkDerivation rec { lgpl3Plus mit ]; - maintainers = with lib.maintainers; [ hqurve ]; + maintainers = [ ]; mainProgram = "labplot2"; platforms = lib.platforms.unix; }; diff --git a/pkgs/by-name/ba/bats/package.nix b/pkgs/by-name/ba/bats/package.nix index 0a6232cde99c..6220ecf5698c 100644 --- a/pkgs/by-name/ba/bats/package.nix +++ b/pkgs/by-name/ba/bats/package.nix @@ -18,6 +18,7 @@ symlinkJoin, makeWrapper, runCommand, + writeText, doInstallCheck ? true, # packages that use bats (for update testing) bash-preexec, @@ -151,59 +152,58 @@ resholve.mkDerivation rec { wrapProgram "$out/bin/bats" \ --suffix BATS_LIB_PATH : "$out/share/bats" ''; + + inherit meta; }; passthru.tests = { libraries = - runCommand "${bats.name}-with-libraries-test" - { - testScript = '' - setup() { - bats_load_library bats-support - bats_load_library bats-assert - bats_load_library bats-file - bats_load_library bats-detik/detik.bash + let + testScript = writeText "bats-libraries-test-script" '' + setup() { + bats_load_library bats-support + bats_load_library bats-assert + bats_load_library bats-file + bats_load_library bats-detik/detik.bash - bats_require_minimum_version 1.5.0 + bats_require_minimum_version 1.5.0 - TEST_TEMP_DIR="$(temp_make --prefix 'nixpkgs-bats-test')" - } + TEST_TEMP_DIR="$(temp_make --prefix 'nixpkgs-bats-test')" + } - teardown() { - temp_del "$TEST_TEMP_DIR" - } + teardown() { + temp_del "$TEST_TEMP_DIR" + } - @test echo_hi { - run -0 echo hi - assert_output "hi" - } + @test echo_hi { + run -0 echo hi + assert_output "hi" + } - @test cp_failure { - run ! cp - assert_line --index 0 "cp: missing file operand" - assert_line --index 1 "Try 'cp --help' for more information." - } + @test cp_failure { + run ! cp + assert_line --index 0 "cp: missing file operand" + assert_line --index 1 "Try 'cp --help' for more information." + } - @test file_exists { - echo "hi" > "$TEST_TEMP_DIR/hello.txt" - assert_file_exist "$TEST_TEMP_DIR/hello.txt" - run cat "$TEST_TEMP_DIR/hello.txt" - assert_output "hi" - } - ''; - passAsFile = [ "testScript" ]; - } - '' - ${ - bats.withLibraries (p: [ - p.bats-support - p.bats-assert - p.bats-file - p.bats-detik - ]) - }/bin/bats "$testScriptPath" - touch "$out" + @test file_exists { + echo "hi" > "$TEST_TEMP_DIR/hello.txt" + assert_file_exist "$TEST_TEMP_DIR/hello.txt" + run cat "$TEST_TEMP_DIR/hello.txt" + assert_output "hi" + } ''; + batsWithLibraries = bats.withLibraries (p: [ + p.bats-support + p.bats-assert + p.bats-file + p.bats-detik + ]); + in + runCommand "${bats.name}-with-libraries-test" { } '' + ${lib.getExe batsWithLibraries} "${testScript}" + touch "$out" + ''; upstream = bats.unresholved.overrideAttrs (old: { name = "${bats.name}-tests"; diff --git a/pkgs/by-name/cd/cdncheck/package.nix b/pkgs/by-name/cd/cdncheck/package.nix index 3c848f798e79..bd8a3b1a0844 100644 --- a/pkgs/by-name/cd/cdncheck/package.nix +++ b/pkgs/by-name/cd/cdncheck/package.nix @@ -6,13 +6,13 @@ buildGoModule (finalAttrs: { pname = "cdncheck"; - version = "1.2.30"; + version = "1.2.31"; src = fetchFromGitHub { owner = "projectdiscovery"; repo = "cdncheck"; tag = "v${finalAttrs.version}"; - hash = "sha256-CzTwax3XuUt5ZJsYXIbXHz3czev6natd1WsTQIrokEE="; + hash = "sha256-IHImxkPuid5dALQ6YUf0eYHs4AlV5vF+w7xQXw+z05o="; }; vendorHash = "sha256-z/wOCtd39ENUe8WQUst4uhl8R6RwCDdcUC4OZcRJWSs="; diff --git a/pkgs/by-name/cl/cloudfox/package.nix b/pkgs/by-name/cl/cloudfox/package.nix index 6b67c2f52cf7..8652103f5ac2 100644 --- a/pkgs/by-name/cl/cloudfox/package.nix +++ b/pkgs/by-name/cl/cloudfox/package.nix @@ -6,16 +6,16 @@ buildGoModule (finalAttrs: { pname = "cloudfox"; - version = "2.0.1"; + version = "2.0.2"; src = fetchFromGitHub { owner = "BishopFox"; repo = "cloudfox"; tag = "v${finalAttrs.version}"; - hash = "sha256-l342y30DFDmq2LDVr5L2ayLNUdC97zBwwL2w8C9MAek="; + hash = "sha256-vP19+COji92pm0a08PCE6KNaXgOWajavSuwhlaaPhl0="; }; - vendorHash = "sha256-RnAScQlq8GCTYwhugSZC0I8Crf7CYriidICq1PEII+g="; + vendorHash = "sha256-cQxmDyr+K0Gvv4QdWs9A/Ju7X53+zHQ+OXKI+SySUik="; ldflags = [ "-w" diff --git a/pkgs/by-name/co/connect-box/package.nix b/pkgs/by-name/co/connect-box/package.nix new file mode 100644 index 000000000000..87769f0d7360 --- /dev/null +++ b/pkgs/by-name/co/connect-box/package.nix @@ -0,0 +1,5 @@ +{ python3Packages }: + +(python3Packages.toPythonApplication python3Packages.connect-box3).overrideAttrs { + __structuredAttrs = true; +} diff --git a/pkgs/by-name/cu/cubiomes-viewer/package.nix b/pkgs/by-name/cu/cubiomes-viewer/package.nix index 1978424fedf1..ba3d71172f1f 100644 --- a/pkgs/by-name/cu/cubiomes-viewer/package.nix +++ b/pkgs/by-name/cu/cubiomes-viewer/package.nix @@ -71,6 +71,6 @@ stdenv.mkDerivation (finalAttrs: { ''; platforms = lib.platforms.all; license = lib.licenses.gpl3Plus; - maintainers = with lib.maintainers; [ hqurve ]; + maintainers = [ ]; }; }) diff --git a/pkgs/by-name/cz/czkawka/package.nix b/pkgs/by-name/cz/czkawka/package.nix index 8908fe329a2d..c83dee38753c 100644 --- a/pkgs/by-name/cz/czkawka/package.nix +++ b/pkgs/by-name/cz/czkawka/package.nix @@ -75,10 +75,16 @@ let # Desktop items, icons and metainfo are not installed automatically postInstall = '' + # Czkawka install -Dm444 -t $out/share/applications data/com.github.qarmin.czkawka.desktop install -Dm444 -t $out/share/icons/hicolor/scalable/apps data/icons/com.github.qarmin.czkawka.svg install -Dm444 -t $out/share/icons/hicolor/scalable/apps data/icons/com.github.qarmin.czkawka-symbolic.svg install -Dm444 -t $out/share/metainfo data/com.github.qarmin.czkawka.metainfo.xml + + # Krokiet + install -Dm444 -t $out/share/applications data/io.github.qarmin.krokiet.desktop + install -Dm444 -t $out/share/icons/hicolor/scalable/apps data/icons/io.github.qarmin.krokiet.svg + install -Dm444 -t $out/share/metainfo data/io.github.qarmin.krokiet.metainfo.xml ''; dontWrapGApps = true; diff --git a/pkgs/by-name/do/dovecot/2.3.nix b/pkgs/by-name/do/dovecot/2.3.nix new file mode 100644 index 000000000000..3b8ad371034e --- /dev/null +++ b/pkgs/by-name/do/dovecot/2.3.nix @@ -0,0 +1,18 @@ +import ./generic.nix { + version = "2.3.21.1"; + hash = "sha256-1THBB401r6AnZbnHGhIq+o+nR8v94O0mIX68Pv0miiE="; + patches = fetchpatch: [ + # Fix loading extended modules. + ./load-extended-modules.patch + # fix openssl 3.0 compatibility + (fetchpatch { + url = "https://salsa.debian.org/debian/dovecot/-/raw/debian/1%252.3.19.1+dfsg1-2/debian/patches/Support-openssl-3.0.patch"; + hash = "sha256-PbBB1jIY3jIC8Js1NY93zkV0gISGUq7Nc67Ul5tN7sw="; + }) + (fetchpatch { + name = "dovecot-test-data-stack-drop-bogus-assertion.patch"; + url = "https://github.com/dovecot/core/commit/9f642dd868db6e7401f24e4fb4031b5bdca8aae7.patch"; + hash = "sha256-dAX80dRqOba9Fkzl11ChYJ6vqcgfkaw/o+TOQKCnnns="; + }) + ]; +} diff --git a/pkgs/by-name/do/dovecot/2.4.nix b/pkgs/by-name/do/dovecot/2.4.nix deleted file mode 100644 index 7421368e2a3e..000000000000 --- a/pkgs/by-name/do/dovecot/2.4.nix +++ /dev/null @@ -1,8 +0,0 @@ -import ./generic.nix { - version = "2.4.3"; - hash = "sha256-NTtQMHK/IzAYHKb1lxClUUJkyJpeLo7mKRCAR1GaUTo="; - patches = _: [ - # Fix loading extended modules. - ./load-extended-modules.patch - ]; -} diff --git a/pkgs/by-name/do/dovecot/generic.nix b/pkgs/by-name/do/dovecot/generic.nix index 49d809e6fae5..fbdfcef9557a 100644 --- a/pkgs/by-name/do/dovecot/generic.nix +++ b/pkgs/by-name/do/dovecot/generic.nix @@ -33,8 +33,7 @@ fetchpatch, rpcsvc-proto, libtirpc, - dovecot_pigeonhole_0_5, - dovecot_pigeonhole ? dovecot_pigeonhole_0_5, + dovecot_pigeonhole, withApparmor ? false, libapparmor, withLDAP ? true, diff --git a/pkgs/by-name/do/dovecot/package.nix b/pkgs/by-name/do/dovecot/package.nix index 3b8ad371034e..7421368e2a3e 100644 --- a/pkgs/by-name/do/dovecot/package.nix +++ b/pkgs/by-name/do/dovecot/package.nix @@ -1,18 +1,8 @@ import ./generic.nix { - version = "2.3.21.1"; - hash = "sha256-1THBB401r6AnZbnHGhIq+o+nR8v94O0mIX68Pv0miiE="; - patches = fetchpatch: [ + version = "2.4.3"; + hash = "sha256-NTtQMHK/IzAYHKb1lxClUUJkyJpeLo7mKRCAR1GaUTo="; + patches = _: [ # Fix loading extended modules. ./load-extended-modules.patch - # fix openssl 3.0 compatibility - (fetchpatch { - url = "https://salsa.debian.org/debian/dovecot/-/raw/debian/1%252.3.19.1+dfsg1-2/debian/patches/Support-openssl-3.0.patch"; - hash = "sha256-PbBB1jIY3jIC8Js1NY93zkV0gISGUq7Nc67Ul5tN7sw="; - }) - (fetchpatch { - name = "dovecot-test-data-stack-drop-bogus-assertion.patch"; - url = "https://github.com/dovecot/core/commit/9f642dd868db6e7401f24e4fb4031b5bdca8aae7.patch"; - hash = "sha256-dAX80dRqOba9Fkzl11ChYJ6vqcgfkaw/o+TOQKCnnns="; - }) ]; } diff --git a/pkgs/by-name/do/dovecot_pigeonhole/0.5.nix b/pkgs/by-name/do/dovecot_pigeonhole/0.5.nix new file mode 100644 index 000000000000..4de2e7419269 --- /dev/null +++ b/pkgs/by-name/do/dovecot_pigeonhole/0.5.nix @@ -0,0 +1,10 @@ +import ./generic.nix { + version = "0.5.21.1"; + url = + { + version, + dovecotMajorMinor, + }: + "https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-${dovecotMajorMinor}-pigeonhole-${version}.tar.gz"; + hash = "sha256-andOWZmgWYIPATEk0V+mHmReL+quG81azwPkBMoo9OE="; +} diff --git a/pkgs/by-name/do/dovecot_pigeonhole/2.4.nix b/pkgs/by-name/do/dovecot_pigeonhole/2.4.nix deleted file mode 100644 index ca18eaa2d271..000000000000 --- a/pkgs/by-name/do/dovecot_pigeonhole/2.4.nix +++ /dev/null @@ -1,17 +0,0 @@ -import ./generic.nix { - version = "2.4.3"; - url = - { - version, - dovecotMajorMinor, - }: - "https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-pigeonhole-${version}.tar.gz"; - hash = "sha256-LQNhqYnBVICabluj8F07UOZR5frt6bd9JSyuHJDS6hc="; - patches = fetchpatch: [ - # https://github.com/NixOS/nixpkgs/pull/388463#issuecomment-3066016707 - (fetchpatch { - url = "https://github.com/dovecot/pigeonhole/commit/517d74aa1d98b853b72608ce722bc58009c0f4a9.patch"; - hash = "sha256-BLBz9ZhOGEIIitnXG0uM6bZBRNnQBy4K2IJlh1+Un50="; - }) - ]; -} diff --git a/pkgs/by-name/do/dovecot_pigeonhole/generic.nix b/pkgs/by-name/do/dovecot_pigeonhole/generic.nix index 5f11b695efa1..fca1f17172ec 100644 --- a/pkgs/by-name/do/dovecot_pigeonhole/generic.nix +++ b/pkgs/by-name/do/dovecot_pigeonhole/generic.nix @@ -9,8 +9,7 @@ stdenv, fetchpatch, fetchzip, - dovecot_2_3, - dovecot ? dovecot_2_3, + dovecot, openssl, libstemmer, perl, diff --git a/pkgs/by-name/do/dovecot_pigeonhole/package.nix b/pkgs/by-name/do/dovecot_pigeonhole/package.nix index 4de2e7419269..ca18eaa2d271 100644 --- a/pkgs/by-name/do/dovecot_pigeonhole/package.nix +++ b/pkgs/by-name/do/dovecot_pigeonhole/package.nix @@ -1,10 +1,17 @@ import ./generic.nix { - version = "0.5.21.1"; + version = "2.4.3"; url = { version, dovecotMajorMinor, }: - "https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-${dovecotMajorMinor}-pigeonhole-${version}.tar.gz"; - hash = "sha256-andOWZmgWYIPATEk0V+mHmReL+quG81azwPkBMoo9OE="; + "https://pigeonhole.dovecot.org/releases/${dovecotMajorMinor}/dovecot-pigeonhole-${version}.tar.gz"; + hash = "sha256-LQNhqYnBVICabluj8F07UOZR5frt6bd9JSyuHJDS6hc="; + patches = fetchpatch: [ + # https://github.com/NixOS/nixpkgs/pull/388463#issuecomment-3066016707 + (fetchpatch { + url = "https://github.com/dovecot/pigeonhole/commit/517d74aa1d98b853b72608ce722bc58009c0f4a9.patch"; + hash = "sha256-BLBz9ZhOGEIIitnXG0uM6bZBRNnQBy4K2IJlh1+Un50="; + }) + ]; } diff --git a/pkgs/by-name/ex/exploitdb/package.nix b/pkgs/by-name/ex/exploitdb/package.nix index c0449a53b8d9..26f51f32f3a9 100644 --- a/pkgs/by-name/ex/exploitdb/package.nix +++ b/pkgs/by-name/ex/exploitdb/package.nix @@ -6,13 +6,13 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "exploitdb"; - version = "2026-04-07"; + version = "2026-04-11"; src = fetchFromGitLab { owner = "exploit-database"; repo = "exploitdb"; tag = finalAttrs.version; - hash = "sha256-tq0E5Kzp4T+eYfA4Q4kR5kbpWrtnyKoNEpJNJCDcEKc="; + hash = "sha256-Gxi+gb9PbjF2QYDYClSBqru8pebf8ay0AvJnCEYbaSc="; }; nativeBuildInputs = [ makeWrapper ]; diff --git a/pkgs/by-name/fi/filebrowser/package.nix b/pkgs/by-name/fi/filebrowser/package.nix index c90a011ff6ac..aa6a25433792 100644 --- a/pkgs/by-name/fi/filebrowser/package.nix +++ b/pkgs/by-name/fi/filebrowser/package.nix @@ -12,13 +12,13 @@ }: let - version = "2.62.2"; + version = "2.63.2"; src = fetchFromGitHub { owner = "filebrowser"; repo = "filebrowser"; rev = "v${version}"; - hash = "sha256-yjy3RMgC38oktxMpvw78w5VVCUE/1+Lv37G/RJaQte0="; + hash = "sha256-pAD7mEiDQyfmKmClO9oMLgPua0jOrcImiQrSGLvhCEA="; }; frontend = buildNpmPackage rec { diff --git a/pkgs/by-name/fl/flood/package.nix b/pkgs/by-name/fl/flood/package.nix index 431463bf6278..330d72f5f3f0 100644 --- a/pkgs/by-name/fl/flood/package.nix +++ b/pkgs/by-name/fl/flood/package.nix @@ -10,13 +10,13 @@ }: buildNpmPackage rec { pname = "flood"; - version = "4.13.0"; + version = "4.13.9"; src = fetchFromGitHub { owner = "jesec"; repo = "flood"; rev = "v${version}"; - hash = "sha256-3q9a3WwTHzKbZTptSBTevReu2q4XIkSmFzX0MJQAbc4="; + hash = "sha256-0jez1JwgE7J4EOm5wC/hFpvaP4+Zl/XvupLYAR/tGJQ="; }; nativeBuildInputs = [ pnpm_9 ]; @@ -31,7 +31,7 @@ buildNpmPackage rec { ; pnpm = pnpm_9; fetcherVersion = 1; - hash = "sha256-ukhZ1SCejwi0n3PubBo5qIRE/8snjHSZaGVIbHKvwdI="; + hash = "sha256-CT0e/IaAhFqRG+FdlA6ZIXOcmy1IzDdd677XV81SgHY="; }; passthru = { diff --git a/pkgs/by-name/fl/flyctl/package.nix b/pkgs/by-name/fl/flyctl/package.nix index 325ada0394b8..7815e93ae602 100644 --- a/pkgs/by-name/fl/flyctl/package.nix +++ b/pkgs/by-name/fl/flyctl/package.nix @@ -12,7 +12,7 @@ buildGoModule rec { pname = "flyctl"; - version = "0.4.29"; + version = "0.4.33"; src = fetchFromGitHub { owner = "superfly"; @@ -22,11 +22,11 @@ buildGoModule rec { cd "$out" git rev-parse HEAD > COMMIT ''; - hash = "sha256-mpyxl8Bjk6d0nCmnl+yzp0GtKiugjLykCFlfnf53+K4="; + hash = "sha256-d6GcWiEf/Ir8Uut+xEQagOCcEjOoIxGPvvYC2fqzQPo="; }; proxyVendor = true; - vendorHash = "sha256-BqlLRnyr0m57lshGsjElK39JKYoJrIr281SevOUVhzI="; + vendorHash = "sha256-YO1/E1ys2rt/7nswYsuwynlACH3XsKtsrVRqzoJlny0="; subPackages = [ "." ]; diff --git a/pkgs/by-name/gl/gleam/package.nix b/pkgs/by-name/gl/gleam/package.nix index 061d2abf4b8b..94b734c0240a 100644 --- a/pkgs/by-name/gl/gleam/package.nix +++ b/pkgs/by-name/gl/gleam/package.nix @@ -16,16 +16,16 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "gleam"; - version = "1.15.2"; + version = "1.15.4"; src = fetchFromGitHub { owner = "gleam-lang"; repo = "gleam"; tag = "v${finalAttrs.version}"; - hash = "sha256-A5rss4+hTLiE0mylzTT1sw18MmDdYBIyu6xLTvMJ1YY="; + hash = "sha256-BTbBcmGOoII7GP68RNl/U2PCNQdG2vdwq1/3/brMuIc="; }; - cargoHash = "sha256-VyVcBAqwrgwiyUXkKPbfP4qTKtFOMCUD0Tho79xJxC8="; + cargoHash = "sha256-+5sGYrqF8CKG5/G1QEQEnMZDFnE8D40TBGygdHBBthA="; nativeBuildInputs = [ pkg-config diff --git a/pkgs/by-name/go/golazo/package.nix b/pkgs/by-name/go/golazo/package.nix index ab4a5b8f442a..7dab451dc34f 100644 --- a/pkgs/by-name/go/golazo/package.nix +++ b/pkgs/by-name/go/golazo/package.nix @@ -27,6 +27,8 @@ buildGoModule (finalAttrs: { "-X github.com/0xjuanma/golazo/cmd.Version=v${finalAttrs.version}" ]; + __structuredAttrs = true; + passthru.updateScript = gitUpdater { rev-prefix = "v"; }; diff --git a/pkgs/by-name/go/google-cloud-sdk/components.nix b/pkgs/by-name/go/google-cloud-sdk/components.nix index 970ff88433aa..45a2e619cb7f 100644 --- a/pkgs/by-name/go/google-cloud-sdk/components.nix +++ b/pkgs/by-name/go/google-cloud-sdk/components.nix @@ -168,7 +168,7 @@ let fi # Write the snapshot file to the `.install` folder - cp $snapshotPath $out/google-cloud-sdk/.install/${pname}.snapshot.json + printf "%s" "$snapshot" > $out/google-cloud-sdk/.install/${pname}.snapshot.json ''; nativeBuildInputs = [ python3 @@ -185,7 +185,7 @@ let passthru = { dependencies = filterForSystem dependencies; }; - passAsFile = [ "snapshot" ]; + __structuredAttrs = true; meta = { inherit description platforms; }; diff --git a/pkgs/by-name/go/gource/package.nix b/pkgs/by-name/go/gource/package.nix index 55e9b4704602..66ab89b8889d 100644 --- a/pkgs/by-name/go/gource/package.nix +++ b/pkgs/by-name/go/gource/package.nix @@ -22,21 +22,16 @@ stdenv.mkDerivation (finalAttrs: { pname = "gource"; - version = "0.55"; + version = "0.56"; src = fetchurl { url = "https://github.com/acaudwell/Gource/releases/download/gource-${finalAttrs.version}/gource-${finalAttrs.version}.tar.gz"; - hash = "sha256-yCOSEtKLB1CNnkd2GZdoAmgWKPwl6z4E9mcRdwE8AUI="; + hash = "sha256-My2Jual5sXQX+84O3XKxmRTxQJ/RJqE9EXh9DhXcDXk="; }; postPatch = '' # remove bundled library rm -r src/tinyxml - - # Fix build with boost 1.89 - rm m4/ax_boost_system.m4 - substituteInPlace configure.ac \ - --replace-fail "AX_BOOST_SYSTEM" "" ''; nativeBuildInputs = [ diff --git a/pkgs/by-name/ja/java-language-server/package.nix b/pkgs/by-name/ja/java-language-server/package.nix index afcf58970e4e..234270d9cb12 100644 --- a/pkgs/by-name/ja/java-language-server/package.nix +++ b/pkgs/by-name/ja/java-language-server/package.nix @@ -71,6 +71,6 @@ maven.buildMavenPackage { mainProgram = "java-language-server"; homepage = "https://github.com/georgewfraser/java-language-server"; license = lib.licenses.mit; - maintainers = with lib.maintainers; [ hqurve ]; + maintainers = [ ]; }; } diff --git a/pkgs/by-name/ju/junction/package.nix b/pkgs/by-name/ju/junction/package.nix index c6e995abf3f9..531b7a91d4b5 100644 --- a/pkgs/by-name/ju/junction/package.nix +++ b/pkgs/by-name/ju/junction/package.nix @@ -73,7 +73,6 @@ stdenv.mkDerivation (finalAttrs: { description = "Choose the application to open files and links"; homepage = "https://apps.gnome.org/Junction/"; license = lib.licenses.gpl3Only; - maintainers = with lib.maintainers; [ hqurve ]; teams = [ lib.teams.gnome-circle ]; platforms = lib.platforms.linux; }; diff --git a/pkgs/by-name/li/liteparse/package.nix b/pkgs/by-name/li/liteparse/package.nix index a714029b424c..66033f300268 100644 --- a/pkgs/by-name/li/liteparse/package.nix +++ b/pkgs/by-name/li/liteparse/package.nix @@ -10,13 +10,13 @@ buildNpmPackage (finalAttrs: { pname = "liteparse"; - version = "1.4.4"; + version = "1.4.6"; src = fetchFromGitHub { owner = "run-llama"; repo = "liteparse"; tag = "v${finalAttrs.version}"; - hash = "sha256-UHZaKWjzaoYbD2NHwNgvlpPfviD66zPQ6d0UWW/lrmk="; + hash = "sha256-GUtqJsmAOrbxLc/aAIre95QD6aaFsj5ClqZfo7jdwB4="; }; npmDepsHash = "sha256-Wz46n7BbubC3Cq1CHOHM2q/dVOvOVNQTloHZfkAwzpg="; diff --git a/pkgs/by-name/lo/log4cxx/package.nix b/pkgs/by-name/lo/log4cxx/package.nix index 3db873cfcb7b..ea9531070b12 100644 --- a/pkgs/by-name/lo/log4cxx/package.nix +++ b/pkgs/by-name/lo/log4cxx/package.nix @@ -15,11 +15,11 @@ stdenv.mkDerivation (finalAttrs: { pname = "log4cxx"; - version = "1.6.1"; + version = "1.7.0"; src = fetchurl { url = "mirror://apache/logging/log4cxx/${finalAttrs.version}/apache-log4cxx-${finalAttrs.version}.tar.gz"; - hash = "sha256-GHyFg29bLyf7Ho13x/Hyk5cl8fZJi3QrDdVpujCWX9I="; + hash = "sha256-uUP/FwOT5M44GrTEkUOWEnv01E+4vR8OXvhFPzxNNkw="; }; postPatch = '' diff --git a/pkgs/by-name/lo/lorien/package.nix b/pkgs/by-name/lo/lorien/package.nix index 0bebd281ef00..ad69944d35d6 100644 --- a/pkgs/by-name/lo/lorien/package.nix +++ b/pkgs/by-name/lo/lorien/package.nix @@ -135,7 +135,7 @@ stdenv.mkDerivation rec { ''; license = lib.licenses.mit; platforms = lib.platforms.unix; - maintainers = with lib.maintainers; [ hqurve ]; + maintainers = [ ]; mainProgram = "lorien"; }; } diff --git a/pkgs/by-name/me/mediaelch/package.nix b/pkgs/by-name/me/mediaelch/package.nix index 1b4121976e7a..29adab944c09 100644 --- a/pkgs/by-name/me/mediaelch/package.nix +++ b/pkgs/by-name/me/mediaelch/package.nix @@ -78,6 +78,7 @@ stdenv.mkDerivation (finalAttrs: { HOME = "/tmp"; # for the font cache LANG = "C.UTF-8"; QT_QPA_PLATFORM = "offscreen"; # the tests require a UI + QT_QPA_PLATFORM_PLUGIN_PATH = "${qt'.qtbase}/${qt'.qtbase.qtPluginPrefix}/platforms"; }; doCheck = true; diff --git a/pkgs/by-name/ne/neovim-unwrapped/package.nix b/pkgs/by-name/ne/neovim-unwrapped/package.nix index 7f9bea9b6481..1990d31ae0d8 100644 --- a/pkgs/by-name/ne/neovim-unwrapped/package.nix +++ b/pkgs/by-name/ne/neovim-unwrapped/package.nix @@ -19,6 +19,7 @@ procps ? null, versionCheckHook, nix-update-script, + writableTmpDirAsHomeHook, # now defaults to false because some tests can be flaky (clipboard etc), see # also: https://github.com/neovim/neovim/issues/16233 @@ -161,22 +162,18 @@ stdenv.mkDerivation ( unibilium utf8proc ] - ++ lib.optionals finalAttrs.finalPackage.doCheck [ - glibcLocales - procps - ] ++ lib.optionals (stdenv.hostPlatform.libc != "glibc") [ # Provide libintl for non-glibc platforms gettext ]; - doCheck = false; + doCheck = true; # to be exhaustive, one could run # make oldtests too checkPhase = '' runHook preCheck - make functionaltest + make functionaltest__treesitter runHook postCheck ''; @@ -219,6 +216,7 @@ stdenv.mkDerivation ( # third-party/CMakeLists.txt is not read at all. (lib.cmakeBool "USE_BUNDLED" false) (lib.cmakeBool "ENABLE_TRANSLATIONS" true) + (lib.cmakeBool "USE_BUNDLED_BUSTED" false) ] ++ ( if lua.pkgs.isLuaJIT then @@ -252,6 +250,12 @@ stdenv.mkDerivation ( nativeInstallCheckInputs = [ versionCheckHook + lua.pkgs.busted + writableTmpDirAsHomeHook + glibcLocales + + # needs git for vim.pack tests as well + procps ]; versionCheckProgram = "${placeholder "out"}/bin/nvim"; doInstallCheck = true; diff --git a/pkgs/by-name/on/onnx/package.nix b/pkgs/by-name/on/onnx/package.nix index d5eec863c95f..31adc3753a6c 100644 --- a/pkgs/by-name/on/onnx/package.nix +++ b/pkgs/by-name/on/onnx/package.nix @@ -33,13 +33,13 @@ stdenv.mkDerivation (finalAttrs: { strictDeps = true; pname = "onnx"; - version = "1.20.1"; + version = "1.21.0"; src = fetchFromGitHub { owner = "onnx"; repo = "onnx"; tag = "v${finalAttrs.version}"; - hash = "sha256-XZJXD6sBvVJ6cLPyDkKOW8oSkjqcw9whUqDWd7dxY3c="; + hash = "sha256-eF6BdTwTuHh6ckuLGN1d6z2GLU47lPqtzu4zIv8+cTs="; }; outputs = [ diff --git a/pkgs/by-name/op/open5gs-webui/package.nix b/pkgs/by-name/op/open5gs-webui/package.nix index 76d6c28d1241..872f7ccf77f2 100644 --- a/pkgs/by-name/op/open5gs-webui/package.nix +++ b/pkgs/by-name/op/open5gs-webui/package.nix @@ -9,5 +9,5 @@ buildNpmPackage (finalAttrs: { sourceRoot = "${finalAttrs.src.name}/webui"; - npmDepsHash = "sha256-IpqineYa15GBqoPDJ7RpaDsq+MQIIDcdq7yhwmH4Lzo="; + npmDepsHash = "sha256-Epz+pCbgejkj7vcdwbPC2RfAkp2HRqGV0urXiiBrjZQ="; }) diff --git a/pkgs/by-name/op/open5gs/package.nix b/pkgs/by-name/op/open5gs/package.nix index d4e30914a6f8..ea5895282f95 100644 --- a/pkgs/by-name/op/open5gs/package.nix +++ b/pkgs/by-name/op/open5gs/package.nix @@ -26,7 +26,7 @@ stdenv.mkDerivation (finalAttrs: { pname = "open5gs"; - version = "2.7.6"; + version = "2.7.7"; diameter = fetchFromGitHub { owner = "open5gs"; @@ -38,8 +38,8 @@ stdenv.mkDerivation (finalAttrs: { libtins = fetchFromGitHub { owner = "open5gs"; repo = "libtins"; - rev = "fb152ba63bd8d7d024d5f86e5fbd24a4cb3dd93d"; # r4.3 - hash = "sha256-q++F1bvf739P82VpUf4TUygHjhYwOsaQzStJv8PN2Hc="; + rev = "bf22438172d269e6db70e27246dffd8e1f0b96e3"; # r4.5 + hash = "sha256-BxSBNKI+jwI33lN+vmYCYSDAxsVDXS190byAzq6lB/A="; }; mesonFlags = [ @@ -58,7 +58,7 @@ stdenv.mkDerivation (finalAttrs: { owner = "open5gs"; repo = "open5gs"; tag = "v${finalAttrs.version}"; - hash = "sha256-2k+S+OXfdskJPtDUFSxb/+2UZcUiOZzRSSGgsEJWolc="; + hash = "sha256-ZK4q6m/9v+us+6dWpi0k188KfFu1b6G9pGE4VGAe4+4="; }; nativeBuildInputs = [ diff --git a/pkgs/by-name/op/openbgpd/package.nix b/pkgs/by-name/op/openbgpd/package.nix index 910e80f2a63b..79d8f6b8b73c 100644 --- a/pkgs/by-name/op/openbgpd/package.nix +++ b/pkgs/by-name/op/openbgpd/package.nix @@ -60,7 +60,7 @@ stdenv.mkDerivation rec { description = "Free implementation of the Border Gateway Protocol, Version 4. It allows ordinary machines to be used as routers exchanging routes with other systems speaking the BGP protocol"; license = lib.licenses.isc; homepage = "http://www.openbgpd.org/"; - maintainers = with lib.maintainers; [ kloenk ]; + maintainers = with lib.maintainers; [ cvengler ]; platforms = lib.platforms.linux; }; } diff --git a/pkgs/by-name/pa/pay-respects/package.nix b/pkgs/by-name/pa/pay-respects/package.nix index 03ac629334c5..6b2a37269dda 100644 --- a/pkgs/by-name/pa/pay-respects/package.nix +++ b/pkgs/by-name/pa/pay-respects/package.nix @@ -6,16 +6,16 @@ }: rustPlatform.buildRustPackage (finalAttrs: { pname = "pay-respects"; - version = "0.7.13"; + version = "0.8.5"; src = fetchFromCodeberg { owner = "iff"; repo = "pay-respects"; tag = "v${finalAttrs.version}"; - hash = "sha256-jKK8wc+M5U8L7D4z8aQT/VJdZE1q2Z2BTRrtw+UWoeo="; + hash = "sha256-rI4cikbZ+J6SSs5l2WroM6862yDe8IFDqpmAV4Od5ng="; }; - cargoHash = "sha256-w9BJ0S6q13udi2JWHtbCCXDjgUYo59/FRjxQGuM5r8c="; + cargoHash = "sha256-IQMB5bYvP/1u6FItZ34GYkMBe1fVao5CK2OPGaikIbk="; env = { _DEF_PR_AI_API_KEY = ""; diff --git a/pkgs/by-name/pd/pdfchain/package.nix b/pkgs/by-name/pd/pdfchain/package.nix index 0041dc48f548..e755f2331169 100644 --- a/pkgs/by-name/pd/pdfchain/package.nix +++ b/pkgs/by-name/pd/pdfchain/package.nix @@ -70,7 +70,7 @@ stdenv.mkDerivation rec { description = "Graphical user interface for the PDF Toolkit (PDFtk)"; homepage = "https://pdfchain.sourceforge.io"; license = lib.licenses.gpl3Plus; - maintainers = with lib.maintainers; [ hqurve ]; + maintainers = [ ]; platforms = lib.platforms.unix; mainProgram = "pdfchain"; }; diff --git a/pkgs/by-name/pe/peazip/package.nix b/pkgs/by-name/pe/peazip/package.nix index b4661eceab1f..764670abb4dd 100644 --- a/pkgs/by-name/pe/peazip/package.nix +++ b/pkgs/by-name/pe/peazip/package.nix @@ -135,7 +135,10 @@ stdenv.mkDerivation (finalAttrs: { license = lib.licenses.gpl3Only; homepage = "https://peazip.github.io"; platforms = lib.platforms.linux; - maintainers = with lib.maintainers; [ annaaurora ]; + maintainers = with lib.maintainers; [ + annaaurora + ProxyVT + ]; mainProgram = "peazip"; }; }) diff --git a/pkgs/by-name/pe/peco/package.nix b/pkgs/by-name/pe/peco/package.nix index f76bac4813eb..837925628d92 100644 --- a/pkgs/by-name/pe/peco/package.nix +++ b/pkgs/by-name/pe/peco/package.nix @@ -2,22 +2,29 @@ lib, buildGoModule, fetchFromGitHub, + installShellFiles, }: buildGoModule (finalAttrs: { pname = "peco"; - version = "0.5.11"; + version = "0.6.0"; subPackages = [ "cmd/peco" ]; src = fetchFromGitHub { owner = "peco"; repo = "peco"; - rev = "v${finalAttrs.version}"; - sha256 = "sha256-OVUfeNpnmuJsgD//JTn6n9n4oOBxep69LhIpHX+ru2w="; + tag = "v${finalAttrs.version}"; + hash = "sha256-jvjqk1t2mTxkcGFWpynf3/J5VR3G1lhOBpIFqh6OoS0="; }; - vendorHash = "sha256-+HQz7UUgATdgSWlI1dg2DdQRUSke9MyAtXgLikFhF90="; + vendorHash = "sha256-EvLi1v3c1Myx9GVvenXiZb2V5foloQzPc35VVjVLuiU="; + + nativeBuildInputs = [ installShellFiles ]; + + postInstall = '' + installManPage contrib/man/peco.1 + ''; meta = { description = "Simplistic interactive filtering tool"; diff --git a/pkgs/by-name/pl/platformio-chrootenv/package.nix b/pkgs/by-name/pl/platformio-chrootenv/package.nix index edec21cc2322..6e9b2710320c 100644 --- a/pkgs/by-name/pl/platformio-chrootenv/package.nix +++ b/pkgs/by-name/pl/platformio-chrootenv/package.nix @@ -17,11 +17,18 @@ let xdg-user-dirs ncurses udev + # Required for esp-idf and other frameworks that manage their own + # Python virtual environments during the build process. + # See: https://github.com/NixOS/nixpkgs/issues/133185 + cmake + ninja ]) ++ (with python.pkgs; [ python setuptools pip + wheel + virtualenv bottle ]); diff --git a/pkgs/by-name/sl/slidev-cli/package.nix b/pkgs/by-name/sl/slidev-cli/package.nix index d69441182f3d..1bfbd5db6c06 100644 --- a/pkgs/by-name/sl/slidev-cli/package.nix +++ b/pkgs/by-name/sl/slidev-cli/package.nix @@ -10,13 +10,13 @@ }: stdenv.mkDerivation (finalAttrs: { pname = "slidev-cli"; - version = "52.14.1"; + version = "52.14.2"; src = fetchFromGitHub { owner = "slidevjs"; repo = "slidev"; tag = "v${finalAttrs.version}"; - hash = "sha256-GIg4KU2TJMSZXjnB+A8MPZUUp1/M1YX5ctO13dfmOz0="; + hash = "sha256-dyvEY4jrptPt3FzOpjwkAv8akXXArzyobpzV2Y3fCr0="; }; pnpmWorkspaces = [ "@slidev/cli..." ]; diff --git a/pkgs/by-name/sp/space-cadet-pinball/package.nix b/pkgs/by-name/sp/space-cadet-pinball/package.nix index 32777f439b80..d10ad63b21a7 100644 --- a/pkgs/by-name/sp/space-cadet-pinball/package.nix +++ b/pkgs/by-name/sp/space-cadet-pinball/package.nix @@ -76,10 +76,7 @@ stdenv.mkDerivation rec { unfree mit ]; - maintainers = with lib.maintainers; [ - hqurve - nadiaholmquist - ]; + maintainers = with lib.maintainers; [ nadiaholmquist ]; platforms = lib.platforms.all; mainProgram = "SpaceCadetPinball"; }; diff --git a/pkgs/by-name/te/teams-for-linux/package.nix b/pkgs/by-name/te/teams-for-linux/package.nix index 84ef705ebe60..e9e2ac9dfcd5 100644 --- a/pkgs/by-name/te/teams-for-linux/package.nix +++ b/pkgs/by-name/te/teams-for-linux/package.nix @@ -5,7 +5,7 @@ fetchFromGitHub, alsa-utils, copyDesktopItems, - electron_39, + electron_41, makeDesktopItem, makeWrapper, nix-update-script, @@ -16,16 +16,16 @@ buildNpmPackage rec { pname = "teams-for-linux"; - version = "2.7.13"; + version = "2.8.0"; src = fetchFromGitHub { owner = "IsmaelMartinez"; repo = "teams-for-linux"; tag = "v${version}"; - hash = "sha256-5JgmV4VeeM3mMlI3AI4BuF9wFzjsrLnmOCESnKbqY9c="; + hash = "sha256-ybxJCCdam5g43Ycf+Ro3ptOr+4+49Fw+y0rqG4fEzBc="; }; - npmDepsHash = "sha256-ChtRC+NtjZdl5mFirSSz6Jo4CvebH1UqtJ4ywfjWEOI="; + npmDepsHash = "sha256-+VwOlzR+80m+qQS4L0IPmFTn4xuPM7aX7EtSd50D9KM="; nativeBuildInputs = [ makeWrapper @@ -46,7 +46,7 @@ buildNpmPackage rec { buildPhase = '' runHook preBuild - cp -r ${electron_39.dist} electron-dist + cp -r ${electron_41.dist} electron-dist chmod -R u+w electron-dist '' # Electron builder complains about symlink in electron-dist @@ -61,7 +61,7 @@ buildNpmPackage rec { -c.npmRebuild=true \ -c.asarUnpack="**/*.node" \ -c.electronDist=electron-dist \ - -c.electronVersion=${electron_39.version} \ + -c.electronVersion=${electron_41.version} \ -c.mac.identity=null runHook postBuild @@ -83,7 +83,7 @@ buildNpmPackage rec { popd # Linux needs 'aplay' for notification sounds - makeWrapper '${lib.getExe electron_39}' "$out/bin/teams-for-linux" \ + makeWrapper '${lib.getExe electron_41}' "$out/bin/teams-for-linux" \ --prefix PATH : ${ lib.makeBinPath [ alsa-utils diff --git a/pkgs/by-name/tu/tuxbox/package.nix b/pkgs/by-name/tu/tuxbox/package.nix index bb9e95c7a074..c889f6b2659c 100644 --- a/pkgs/by-name/tu/tuxbox/package.nix +++ b/pkgs/by-name/tu/tuxbox/package.nix @@ -5,14 +5,14 @@ }: python3Packages.buildPythonApplication (finalAttrs: { pname = "tuxbox"; - version = "3.1.0"; + version = "3.1.1"; pyproject = true; src = fetchFromGitHub { owner = "AndyCappDev"; repo = "tuxbox"; tag = "v${finalAttrs.version}"; - hash = "sha256-jPPjGumArcnsRKQm3HKhoTGh913WEB5MUs7Y7eCHXNY="; + hash = "sha256-+fVN6z6mxgSDcmG8F3baAMfFbb5eUkt+B0tu6+ZSqKw="; }; build-system = [ python3Packages.setuptools ]; diff --git a/pkgs/by-name/xp/xpipe/package.nix b/pkgs/by-name/xp/xpipe/package.nix index ae30b427484f..2018098377d3 100644 --- a/pkgs/by-name/xp/xpipe/package.nix +++ b/pkgs/by-name/xp/xpipe/package.nix @@ -39,7 +39,7 @@ let hash = { - x86_64-linux = "sha256-gyNZ+DyULv3TPD5YvHo8RvB/pjRtLHOsDNcD8bt/RbY="; + x86_64-linux = "sha256-dKYGepfjgqcYflVABXGp2heI8XY1rIyMJi04aTld4ss="; } .${system} or throwSystem; @@ -48,7 +48,7 @@ let in stdenvNoCC.mkDerivation rec { pname = "xpipe"; - version = "22.5"; + version = "22.9"; src = fetchzip { url = "https://github.com/xpipe-io/xpipe/releases/download/${version}/xpipe-portable-linux-${arch}.tar.gz"; diff --git a/pkgs/by-name/zl/zluda/package.nix b/pkgs/by-name/zl/zluda/package.nix index 6df37d213903..09097a6f828f 100644 --- a/pkgs/by-name/zl/zluda/package.nix +++ b/pkgs/by-name/zl/zluda/package.nix @@ -16,13 +16,13 @@ rustPlatform.buildRustPackage (finalAttrs: { pname = "zluda"; - version = "6-preview.55"; + version = "6-preview.63"; src = fetchFromGitHub { owner = "vosen"; repo = "ZLUDA"; rev = "v${finalAttrs.version}"; - hash = "sha256-yhWEzoDjNk1GefSqOVwowNky36ahmH/gTMdq1YTOhfE="; + hash = "sha256-AZGSO6aV1T3elsVDJxFylhzYjkhkIy1QFtTdH4u4Lrw="; fetchSubmodules = true; fetchLFS = true; }; @@ -51,7 +51,7 @@ rustPlatform.buildRustPackage (finalAttrs: { clang ]; - cargoHash = "sha256-YNBeweZ/vfXGfM0lrZbAh71z6Rb0+B7nOuO8VL2BmCo="; + cargoHash = "sha256-2YAlc8HW+aqfRzLSXw/I++DM4/JneE7UNmV6BVZb4VM="; # Tests require a GPU and segfault in the sandbox doCheck = false; diff --git a/pkgs/development/python-modules/anthropic/default.nix b/pkgs/development/python-modules/anthropic/default.nix index 5052decd19cc..7ae65e00b5d4 100644 --- a/pkgs/development/python-modules/anthropic/default.nix +++ b/pkgs/development/python-modules/anthropic/default.nix @@ -38,14 +38,14 @@ buildPythonPackage (finalAttrs: { pname = "anthropic"; - version = "0.86.0"; + version = "0.94.0"; pyproject = true; src = fetchFromGitHub { owner = "anthropics"; repo = "anthropic-sdk-python"; tag = "v${finalAttrs.version}"; - hash = "sha256-24z9LrZ6xktwITQHHvslrT4J2RZ/CKbZD3uwbZBV+rE="; + hash = "sha256-Gh7My8ftI2o0CxrwuVsbr8tdZ2MtKdRw0mfQxb7REJk="; }; postPatch = '' @@ -90,7 +90,8 @@ buildPythonPackage (finalAttrs: { pytest-xdist pytestCheckHook respx - ]; + ] + ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); pythonImportsCheck = [ "anthropic" ]; diff --git a/pkgs/development/python-modules/connect-box3/default.nix b/pkgs/development/python-modules/connect-box3/default.nix new file mode 100644 index 000000000000..e9fd4a33a4d5 --- /dev/null +++ b/pkgs/development/python-modules/connect-box3/default.nix @@ -0,0 +1,52 @@ +{ + lib, + buildPythonPackage, + cyclopts, + fetchFromGitHub, + hatchling, + httpx, + mashumaro, + pytest-asyncio, + pytest-httpx, + pytestCheckHook, + rich, +}: + +buildPythonPackage (finalAttrs: { + pname = "connect-box3"; + version = "0.2.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "home-assistant-ecosystem"; + repo = "python-connect-box3"; + tag = finalAttrs.version; + hash = "sha256-eLrCMziV/+maLIded1n0248Xb14uVBps/gzTUz8NMMc="; + }; + + build-system = [ hatchling ]; + + dependencies = [ + cyclopts + httpx + mashumaro + rich + ]; + + nativeCheckInputs = [ + pytestCheckHook + pytest-asyncio + pytest-httpx + ]; + + pythonImportsCheck = [ "connect_box3" ]; + + meta = { + description = "Interact with a Connect Box 3 modem/router"; + homepage = "https://github.com/home-assistant-ecosystem/python-connect-box3"; + changelog = "https://github.com/home-assistant-ecosystem/python-connect-box3/releases/tag/${finalAttrs.src.tag}"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ fab ]; + mainProgram = "connect-box"; + }; +}) diff --git a/pkgs/development/python-modules/fastcore/default.nix b/pkgs/development/python-modules/fastcore/default.nix index bdd236f11bae..e84534501c6a 100644 --- a/pkgs/development/python-modules/fastcore/default.nix +++ b/pkgs/development/python-modules/fastcore/default.nix @@ -8,14 +8,14 @@ buildPythonPackage (finalAttrs: { pname = "fastcore"; - version = "1.12.34"; + version = "1.12.38"; pyproject = true; src = fetchFromGitHub { owner = "fastai"; repo = "fastcore"; tag = finalAttrs.version; - hash = "sha256-kWF3xEou6yq1si0pfJEljzFKY1xV2IMGQceTOEOe3qI="; + hash = "sha256-xqME3sz7AqGsIuTb8Ge4ByDi4sfwKo/TXEAw6/cTTmU="; }; build-system = [ setuptools ]; diff --git a/pkgs/development/python-modules/fluss-api/default.nix b/pkgs/development/python-modules/fluss-api/default.nix index 44e2c522a44f..b346014af6d2 100644 --- a/pkgs/development/python-modules/fluss-api/default.nix +++ b/pkgs/development/python-modules/fluss-api/default.nix @@ -8,14 +8,14 @@ buildPythonPackage (finalAttrs: { pname = "fluss-api"; - version = "0.2.0"; + version = "0.2.4"; pyproject = true; src = fetchFromGitHub { owner = "fluss"; repo = "Fluss_Python_Library"; tag = "v${finalAttrs.version}"; - hash = "sha256-LD+boeDNWOm3KXZFIkLPvzIyngmFd6lOtIFsrn478wA="; + hash = "sha256-zAhxx2X1DnfXlf+OzyACx6e3bQkoagffBPPnEe05xbM="; }; build-system = [ setuptools ]; diff --git a/pkgs/development/python-modules/home-assistant-datasets/default.nix b/pkgs/development/python-modules/home-assistant-datasets/default.nix new file mode 100644 index 000000000000..256262b4fc22 --- /dev/null +++ b/pkgs/development/python-modules/home-assistant-datasets/default.nix @@ -0,0 +1,66 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + google-generativeai, + hass-client, + jinja2, + mashumaro, + openai, + pyrate-limiter, + pytestCheckHook, + python-slugify, + pyyaml, + setuptools-scm, + setuptools, + synthetic-home, + syrupy, +}: + +buildPythonPackage (finalAttrs: { + pname = "home-assistant-datasets"; + version = "0.3.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "allenporter"; + repo = "home-assistant-datasets"; + tag = finalAttrs.version; + hash = "sha256-csvjbPtsl7/olJAFmiLES9GH7wAZHxOADTpqbcQbM3s="; + }; + + build-system = [ + setuptools + setuptools-scm + ]; + + dependencies = [ + google-generativeai + hass-client + mashumaro + openai + pyrate-limiter + pyyaml + synthetic-home + ]; + + nativeCheckInputs = [ + jinja2 + pytestCheckHook + python-slugify + syrupy + ]; + + pythonImportsCheck = [ "home_assistant_datasets" ]; + + # Tests want to import Home Assistant as a module + doCheck = false; + + meta = { + description = "Collection of datasets for evaluating AI Models in the context of Home Assistant"; + homepage = "https://github.com/allenporter/home-assistant-datasets"; + changelog = "https://github.com/allenporter/home-assistant-datasets/releases/tag/${finalAttrs.src.tag}"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/development/python-modules/kagglesdk/default.nix b/pkgs/development/python-modules/kagglesdk/default.nix index 25a5ff60464e..ea5f0c18b3b0 100644 --- a/pkgs/development/python-modules/kagglesdk/default.nix +++ b/pkgs/development/python-modules/kagglesdk/default.nix @@ -16,14 +16,14 @@ buildPythonPackage (finalAttrs: { pname = "kagglesdk"; - version = "0.1.16"; + version = "0.1.18"; pyproject = true; src = fetchFromGitHub { owner = "Kaggle"; repo = "kagglesdk"; tag = "v${finalAttrs.version}"; - hash = "sha256-MmgX9gQ8fQU8yE/2qpw1Kz/VslVix3qUhaGkRahSxns="; + hash = "sha256-2WmYx4Q8Qx1ZdDzqeYwGsOPf0q1Cxtw9zM0iWK4z2xM="; }; build-system = [ diff --git a/pkgs/development/python-modules/llguidance/default.nix b/pkgs/development/python-modules/llguidance/default.nix index fcd7ecb0d262..8e307699086d 100644 --- a/pkgs/development/python-modules/llguidance/default.nix +++ b/pkgs/development/python-modules/llguidance/default.nix @@ -23,19 +23,19 @@ buildPythonPackage (finalAttrs: { pname = "llguidance"; - version = "1.7.0"; + version = "1.7.2"; pyproject = true; src = fetchFromGitHub { owner = "guidance-ai"; repo = "llguidance"; tag = "v${finalAttrs.version}"; - hash = "sha256-f9qSnNpLl4KUdv1ZzN68MUytCOjP/+a3ZjocX7DiAlw="; + hash = "sha256-Eu+hhYCVoZWMdwrjiHyvbGwjYKnbkBETZNMQ+SOb8AU="; }; cargoDeps = rustPlatform.fetchCargoVendor { inherit (finalAttrs) src pname version; - hash = "sha256-scHxmG5XAbWMR88yyFru0ar2v7Uj/OQP0gpL5wo7Du8="; + hash = "sha256-oeFm9dPqlJWPnrA7//D31E1W2St+zIRd8pzR6gUhiTg="; }; nativeBuildInputs = [ diff --git a/pkgs/development/python-modules/lupa/default.nix b/pkgs/development/python-modules/lupa/default.nix index 5c392c494642..0a0b6c217452 100644 --- a/pkgs/development/python-modules/lupa/default.nix +++ b/pkgs/development/python-modules/lupa/default.nix @@ -6,14 +6,14 @@ setuptools, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "lupa"; - version = "2.6"; + version = "2.7"; pyproject = true; src = fetchPypi { - inherit pname version; - hash = "sha256-mncKbolXa+NEdmjXztMSzW/UHTwTwkYsncLCq1cORdk="; + inherit (finalAttrs) pname version; + hash = "sha256-c6ZM5dyM2Vt1ozDBUT5G4JjUD87tP+pRbAn2WV6t6Ik="; }; build-system = [ @@ -26,8 +26,8 @@ buildPythonPackage rec { meta = { description = "Lua in Python"; homepage = "https://github.com/scoder/lupa"; - changelog = "https://github.com/scoder/lupa/blob/lupa-${version}/CHANGES.rst"; + changelog = "https://github.com/scoder/lupa/blob/lupa-${finalAttrs.version}/CHANGES.rst"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ fab ]; }; -} +}) diff --git a/pkgs/development/python-modules/mobi/default.nix b/pkgs/development/python-modules/mobi/default.nix index c5e5d1e898c4..4b747b433131 100644 --- a/pkgs/development/python-modules/mobi/default.nix +++ b/pkgs/development/python-modules/mobi/default.nix @@ -6,6 +6,7 @@ hatchling, standard-imghdr, pytestCheckHook, + pythonOlder, }: buildPythonPackage rec { @@ -29,6 +30,8 @@ buildPythonPackage rec { standard-imghdr ]; + pythonRemoveDeps = lib.optionals (pythonOlder "3.13") [ "standard-imghdr" ]; + nativeCheckInputs = [ pytestCheckHook ]; diff --git a/pkgs/development/python-modules/mwxml/default.nix b/pkgs/development/python-modules/mwxml/default.nix index e48f938344d6..b42e1dfcb175 100644 --- a/pkgs/development/python-modules/mwxml/default.nix +++ b/pkgs/development/python-modules/mwxml/default.nix @@ -14,16 +14,17 @@ # tests pytestCheckHook, + pythonAtLeast, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "mwxml"; - version = "0.3.6"; + version = "0.3.8"; pyproject = true; src = fetchPypi { - inherit pname version; - hash = "sha256-WlMYHTAhUq0D7FE/8Yaongx+H8xQx4MwRSoIcsqmOTU="; + inherit (finalAttrs) pname version; + hash = "sha256-yiIyqX6pMem7JPhbVKSRBYwjwHRXY3LnESRq+scGFuA="; }; build-system = [ setuptools ]; @@ -38,10 +39,15 @@ buildPythonPackage rec { nativeCheckInputs = [ pytestCheckHook ]; - disabledTests = lib.optionals stdenv.hostPlatform.isDarwin [ - # AttributeError: Can't get local object 'map..process_path' - "test_complex_error_handler" - ]; + disabledTests = + lib.optionals (pythonAtLeast "3.14") [ + # _pickle.PicklingError: Can't pickle local object .process_path at 0x7ffff580f480> + "test_complex_error_handler" + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + # AttributeError: Can't get local object 'map..process_path' + "test_complex_error_handler" + ]; meta = { description = "Set of utilities for processing MediaWiki XML dump data"; @@ -50,4 +56,4 @@ buildPythonPackage rec { license = lib.licenses.mit; maintainers = with lib.maintainers; [ GaetanLepage ]; }; -} +}) diff --git a/pkgs/development/python-modules/onnx-ir/default.nix b/pkgs/development/python-modules/onnx-ir/default.nix index c4dbfc72ac66..cd419744a99d 100644 --- a/pkgs/development/python-modules/onnx-ir/default.nix +++ b/pkgs/development/python-modules/onnx-ir/default.nix @@ -74,6 +74,10 @@ buildPythonPackage (finalAttrs: { disabledTestPaths = [ # Circular dependency with onnxscript "src/onnx_ir/passes/common/common_subexpression_elimination_test.py" + + # ImportError: cannot import name 'hub' from 'onnx' + # onnx.hub was removed in 1.21.0 + "tools/model_zoo_test/model_zoo_test.py" ]; # Importing onnxruntime in the sandbox crashes on aarch64-linux: diff --git a/pkgs/development/python-modules/para/default.nix b/pkgs/development/python-modules/para/default.nix index 7277d533dd86..5dc4feb35ced 100644 --- a/pkgs/development/python-modules/para/default.nix +++ b/pkgs/development/python-modules/para/default.nix @@ -3,28 +3,36 @@ stdenv, buildPythonPackage, fetchPypi, - pytestCheckHook, + + # build-system setuptools, + + # tests + pytestCheckHook, + pythonOlder, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "para"; version = "0.0.8"; pyproject = true; src = fetchPypi { - inherit pname version; + inherit (finalAttrs) pname version; hash = "sha256-RsMjKunY6p2IbP0IzdESiSICvthkX0C2JVWXukz+8hc="; }; build-system = [ setuptools ]; - nativeCheckInputs = [ pytestCheckHook ]; - pythonImportsCheck = [ "para" ]; - # AttributeError: Can't get local object 'test_output_queue_size..get_the_a' - doCheck = !stdenv.hostPlatform.isDarwin; + nativeCheckInputs = [ pytestCheckHook ]; + + doCheck = + # AttributeError: Can't get local object 'test_output_queue_size..get_the_a' + (!stdenv.hostPlatform.isDarwin) + # _pickle.PicklingError: Can't pickle local object .get_the_a at 0x7ffff5689fe0> + && (pythonOlder "3.14"); meta = { description = "Set utilities that ake advantage of python's 'multiprocessing' module to distribute CPU-intensive tasks"; @@ -32,4 +40,4 @@ buildPythonPackage rec { license = lib.licenses.mit; maintainers = with lib.maintainers; [ GaetanLepage ]; }; -} +}) diff --git a/pkgs/development/python-modules/pyais/default.nix b/pkgs/development/python-modules/pyais/default.nix index 90a21c204ed8..2242311760c3 100644 --- a/pkgs/development/python-modules/pyais/default.nix +++ b/pkgs/development/python-modules/pyais/default.nix @@ -11,14 +11,14 @@ buildPythonPackage (finalAttrs: { pname = "pyais"; - version = "2.20.1"; + version = "3.0.0"; pyproject = true; src = fetchFromGitHub { owner = "M0r13n"; repo = "pyais"; tag = "v${finalAttrs.version}"; - hash = "sha256-ZyVXZZd9JXTkfucJ5tAcP813FLWapoiTUrzj27SrLlk="; + hash = "sha256-aAmvtCl+rObPkpuKb+FzQfKPfVhXHdbsdCWUytRE6mk="; }; __darwinAllowLocalNetworking = true; diff --git a/pkgs/development/python-modules/pyworxcloud/default.nix b/pkgs/development/python-modules/pyworxcloud/default.nix index 349ceca3fe23..175ff491effd 100644 --- a/pkgs/development/python-modules/pyworxcloud/default.nix +++ b/pkgs/development/python-modules/pyworxcloud/default.nix @@ -13,14 +13,14 @@ buildPythonPackage (finalAttrs: { pname = "pyworxcloud"; - version = "6.3.0"; + version = "6.3.2"; pyproject = true; src = fetchFromGitHub { owner = "MTrab"; repo = "pyworxcloud"; tag = "v${finalAttrs.version}"; - hash = "sha256-+97WpQlAxDe9VTCpG7ByhL+qG6u2zZwPNxRFBZDlh48="; + hash = "sha256-T5mSM/vGi+fcMPtCcpAgQ8rlr6+8bnEU7nn6aO/g0H0="; }; pythonRelaxDeps = [ "awsiotsdk" ]; diff --git a/pkgs/development/python-modules/skytemple-files/default.nix b/pkgs/development/python-modules/skytemple-files/default.nix index 1a2073a28a74..da4073032608 100644 --- a/pkgs/development/python-modules/skytemple-files/default.nix +++ b/pkgs/development/python-modules/skytemple-files/default.nix @@ -1,31 +1,38 @@ { - stdenv, lib, buildPythonPackage, fetchFromGitHub, + + # build-system + setuptools, + + # buildInputs + armips, + + # dependencies appdirs, dungeon-eos, explorerscript, ndspy, pillow, - setuptools, - skytemple-rust, - pyyaml, pmdsky-debug-py, + pyyaml, range-typed-integers, - # optional dependencies for SpriteCollab + skytemple-rust, + + # optional-dependencies aiohttp, - lru-dict, - graphql-core, gql, - armips, + graphql-core, + lru-dict, + # tests - pytestCheckHook, parameterized, + pytestCheckHook, xmldiff, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "skytemple-files"; version = "1.8.5"; pyproject = true; @@ -33,31 +40,38 @@ buildPythonPackage rec { src = fetchFromGitHub { owner = "SkyTemple"; repo = "skytemple-files"; - rev = version; - hash = "sha256-s7r6wS7H19+is3CFr+dLaTiq0N/gaO/8IFknmr+OAJk="; + tag = finalAttrs.version; # Most patches are in submodules fetchSubmodules = true; + hash = "sha256-s7r6wS7H19+is3CFr+dLaTiq0N/gaO/8IFknmr+OAJk="; }; postPatch = '' - substituteInPlace skytemple_files/patch/arm_patcher.py skytemple_files/data/data_cd/armips_importer.py \ - --replace-fail "exec_name = os.getenv(\"SKYTEMPLE_ARMIPS_EXEC\", f\"{prefix}armips\")" "exec_name = \"${armips}/bin/armips\"" + substituteInPlace \ + skytemple_files/patch/arm_patcher.py \ + skytemple_files/data/data_cd/armips_importer.py \ + --replace-fail \ + "exec_name = os.getenv(\"SKYTEMPLE_ARMIPS_EXEC\", f\"{prefix}armips\")" \ + "exec_name = \"${armips}/bin/armips\"" ''; build-system = [ setuptools ]; buildInputs = [ armips ]; + pythonRelaxDeps = [ + "pmdsky-debug-py" + ]; dependencies = [ appdirs dungeon-eos explorerscript ndspy pillow - skytemple-rust - pyyaml pmdsky-debug-py + pyyaml range-typed-integers + skytemple-rust ]; optional-dependencies = { @@ -71,11 +85,11 @@ buildPythonPackage rec { }; nativeCheckInputs = [ - pytestCheckHook parameterized + pytestCheckHook xmldiff ] - ++ optional-dependencies.spritecollab; + ++ finalAttrs.passthru.optional-dependencies.spritecollab; preCheck = "pushd test"; postCheck = "popd"; @@ -88,11 +102,14 @@ buildPythonPackage rec { pythonImportsCheck = [ "skytemple_files" ]; meta = { - homepage = "https://github.com/SkyTemple/skytemple-files"; description = "Python library to edit the ROM of Pokémon Mystery Dungeon Explorers of Sky"; + homepage = "https://github.com/SkyTemple/skytemple-files"; mainProgram = "skytemple_export_maps"; license = lib.licenses.gpl3Plus; maintainers = with lib.maintainers; [ marius851000 ]; - broken = stdenv.hostPlatform.isDarwin; # pyobjc is missing + badPlatforms = [ + # pyobjc is missing + lib.systems.inspect.patterns.isDarwin + ]; }; -} +}) diff --git a/pkgs/development/python-modules/slack-bolt/default.nix b/pkgs/development/python-modules/slack-bolt/default.nix index b53f724fde10..9f78da222d65 100644 --- a/pkgs/development/python-modules/slack-bolt/default.nix +++ b/pkgs/development/python-modules/slack-bolt/default.nix @@ -39,16 +39,16 @@ writableTmpDirAsHomeHook, }: -buildPythonPackage rec { +buildPythonPackage (finalAttrs: { pname = "slack-bolt"; - version = "1.27.0"; + version = "1.28.0"; pyproject = true; src = fetchFromGitHub { owner = "slackapi"; repo = "bolt-python"; - tag = "v${version}"; - hash = "sha256-3aYsISTNc2uexzpIiBNnw40XegczL5BdKqi6j9K/A80="; + tag = "v${finalAttrs.version}"; + hash = "sha256-1AJO7+7YG/NFh6Rmqwkm6yua2LWdYQ9Rv1oadfHAlhE="; }; build-system = [ setuptools ]; @@ -89,7 +89,7 @@ buildPythonPackage rec { pytestCheckHook writableTmpDirAsHomeHook ] - ++ lib.concatAttrValues optional-dependencies; + ++ lib.flatten (builtins.attrValues finalAttrs.passthru.optional-dependencies); __darwinAllowLocalNetworking = true; @@ -108,8 +108,8 @@ buildPythonPackage rec { meta = { description = "Framework to build Slack apps using Python"; homepage = "https://github.com/slackapi/bolt-python"; - changelog = "https://github.com/slackapi/bolt-python/releases/tag/${src.tag}"; + changelog = "https://github.com/slackapi/bolt-python/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ samuela ]; }; -} +}) diff --git a/pkgs/development/python-modules/synthetic-home/default.nix b/pkgs/development/python-modules/synthetic-home/default.nix new file mode 100644 index 000000000000..6c974e90bdd7 --- /dev/null +++ b/pkgs/development/python-modules/synthetic-home/default.nix @@ -0,0 +1,55 @@ +{ + lib, + aiohttp, + buildPythonPackage, + fetchFromGitHub, + mashumaro, + pytest-asyncio, + pytestCheckHook, + python-slugify, + pyyaml, + setuptools, + syrupy, +}: + +buildPythonPackage (finalAttrs: { + pname = "synthetic-home"; + version = "5.0.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "allenporter"; + repo = "synthetic-home"; + tag = finalAttrs.version; + hash = "sha256-u5suLTK7Cdp6IKVxnmiw8p+xQiXV5nfc6QUvpqCyxTk="; + }; + + build-system = [ setuptools ]; + + dependencies = [ + aiohttp + mashumaro + ]; + + nativeCheckInputs = [ + pytest-asyncio + pytestCheckHook + python-slugify + pyyaml + syrupy + ]; + + pythonImportsCheck = [ "synthetic_home" ]; + + preCheck = '' + export PATH="$PATH:$out/bin"; + ''; + + meta = { + description = "Library for managing synthetic home device registry"; + homepage = "https://github.com/allenporter/synthetic-home"; + changelog = "https://github.com/allenporter/synthetic-home/releases/tag/${finalAttrs.src.tag}"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ fab ]; + }; +}) diff --git a/pkgs/servers/home-assistant/cli.nix b/pkgs/servers/home-assistant/cli.nix index c7b1c56ea42c..a332a5e2eb80 100644 --- a/pkgs/servers/home-assistant/cli.nix +++ b/pkgs/servers/home-assistant/cli.nix @@ -6,24 +6,23 @@ installShellFiles, }: -python3.pkgs.buildPythonApplication rec { +python3.pkgs.buildPythonApplication (finalAttrs: { pname = "homeassistant-cli"; - version = "0.9.6"; - format = "setuptools"; + version = "1.0.0"; + pyproject = true; src = fetchFromGitHub { owner = "home-assistant-ecosystem"; repo = "home-assistant-cli"; - rev = version; - hash = "sha256-4OeHJ7icDZUOC5K4L0F0Nd9lbJPgdW4LCU0wniLvJ1Q="; + tag = finalAttrs.version; + hash = "sha256-LF6JXELAP3Mvta3RuDUs4UiQ7ptNFh0vZmPh3ICJFRY="; }; - postPatch = '' - # Ignore pinned versions - sed -i "s/'\(.*\)\(==\|>=\).*'/'\1'/g" setup.py - ''; + pythonRelaxDeps = true; - propagatedBuildInputs = with python3.pkgs; [ + build-system = with python3.pkgs; [ poetry-core ]; + + dependencies = with python3.pkgs; [ aiohttp click click-log @@ -57,8 +56,8 @@ python3.pkgs.buildPythonApplication rec { description = "Command-line tool for Home Assistant"; mainProgram = "hass-cli"; homepage = "https://github.com/home-assistant-ecosystem/home-assistant-cli"; - changelog = "https://github.com/home-assistant-ecosystem/home-assistant-cli/releases/tag/${version}"; + changelog = "https://github.com/home-assistant-ecosystem/home-assistant-cli/releases/tag/${finalAttrs.src.tag}"; license = lib.licenses.asl20; teams = [ lib.teams.home-assistant ]; }; -} +}) diff --git a/pkgs/tools/inputmethods/fcitx5/update.py b/pkgs/tools/inputmethods/fcitx5/update.py index 5da7d34a51a6..74c0a8311603 100755 --- a/pkgs/tools/inputmethods/fcitx5/update.py +++ b/pkgs/tools/inputmethods/fcitx5/update.py @@ -23,21 +23,26 @@ REPOS = [ ( "fcitx", "fcitx5-table-extra" ), ( "fcitx", "fcitx5-table-other" ), ( "fcitx", "fcitx5-unikey" ), - ( "fcitx", "fcitx5-unikey" ) + ( "fcitx", "fcitx5-unikey" ), ( "ray2501", "fcitx5-array" ) ] -OWNER = "fcitx" +QT_REPOS = [ + "fcitx5-chinese-addons", + "fcitx5-configtool", + "fcitx5-qt", + "fcitx5-unikey", + ] -def get_latest_tag(repo, owner=OWNER): +def get_latest_tag(repo, owner): r = requests.get('https://api.github.com/repos/{}/{}/tags'.format(owner,repo)) return r.json()[0].get("name") def main(): for (owner, repo) in REPOS: rev = get_latest_tag(repo, owner) - if repo == "fcitx5-qt": + if repo in QT_REPOS: subprocess.run(["nix-update", "--commit", "--version", rev, "qt6Packages.{}".format(repo)]) else: subprocess.run(["nix-update", "--commit", "--version", rev, repo]) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index cc70a882b0ac..ccd5f8d4ad4b 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -8036,15 +8036,15 @@ with pkgs; dodgy = with python3Packages; toPythonApplication dodgy; - dovecot_2_3 = dovecot; - dovecot_2_4 = callPackage ../by-name/do/dovecot/2.4.nix { - dovecot_pigeonhole = dovecot_pigeonhole_2_4; + dovecot_2_3 = callPackage ../by-name/do/dovecot/2.3.nix { + dovecot_pigeonhole = dovecot_pigeonhole_0_5; }; + dovecot_2_4 = dovecot; - dovecot_pigeonhole_0_5 = dovecot_pigeonhole; - dovecot_pigeonhole_2_4 = callPackage ../by-name/do/dovecot_pigeonhole/2.4.nix { - dovecot = dovecot_2_4; + dovecot_pigeonhole_0_5 = callPackage ../by-name/do/dovecot_pigeonhole/0.5.nix { + dovecot = dovecot_2_3; }; + dovecot_pigeonhole_2_4 = dovecot_pigeonhole; inherit (callPackages ../servers/firebird { }) firebird_4 diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 91208e3b4e53..a9dd0eda53f7 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -3160,6 +3160,8 @@ self: super: with self; { connect-box = callPackage ../development/python-modules/connect-box { }; + connect-box3 = callPackage ../development/python-modules/connect-box3 { }; + connected-components-3d = callPackage ../development/python-modules/connected-components-3d { }; connection-pool = callPackage ../development/python-modules/connection-pool { }; @@ -7106,6 +7108,8 @@ self: super: with self; { callPackage ../development/python-modules/home-assistant-chip-wheels { } ); + home-assistant-datasets = callPackage ../development/python-modules/home-assistant-datasets { }; + home-connect-async = callPackage ../development/python-modules/home-connect-async { }; homeassistant-stubs = callPackage ../servers/home-assistant/stubs.nix { }; @@ -18904,6 +18908,8 @@ self: super: with self; { synology-srm = callPackage ../development/python-modules/synology-srm { }; + synthetic-home = callPackage ../development/python-modules/synthetic-home { }; + syrupy = callPackage ../development/python-modules/syrupy { }; syslog-rfc5424-formatter = callPackage ../development/python-modules/syslog-rfc5424-formatter { }; diff --git a/pkgs/top-level/release-cross.nix b/pkgs/top-level/release-cross.nix index cd8e473c414b..1f84ee073af5 100644 --- a/pkgs/top-level/release-cross.nix +++ b/pkgs/top-level/release-cross.nix @@ -84,6 +84,7 @@ let mesa = nativePlatforms; rustc = nativePlatforms; cargo = nativePlatforms; + fd = nativePlatforms; }; gnuCommon = recursiveUpdate common {