From 298060655681ec239491252da9b295d854ff51fe Mon Sep 17 00:00:00 2001 From: royce-c <114127058+royce-c@users.noreply.github.com> Date: Tue, 25 Mar 2025 11:13:37 -0700 Subject: [PATCH 01/18] distrobox: replace hardcoded path with config package's path (#6701) --- modules/programs/distrobox.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/programs/distrobox.nix b/modules/programs/distrobox.nix index 1e9f0ac09..7ae68bcbd 100644 --- a/modules/programs/distrobox.nix +++ b/modules/programs/distrobox.nix @@ -87,7 +87,7 @@ in { if [[ $prev_hash != $new_hash ]]; then rm -rf /tmp/storage-run-1000/containers rm -rf /tmp/storage-run-1000/libpod/tmp - $HOME/.nix-profile/bin/distrobox-assemble create --file $containers_file + ${cfg.package}/bin/distrobox-assemble create --file $containers_file echo $new_hash > $prev_hash_file fi ''}"; From e3dded7a85c68f8445a735d70920fc00a808621b Mon Sep 17 00:00:00 2001 From: Zhaofeng Li Date: Tue, 25 Mar 2025 12:13:52 -0600 Subject: [PATCH 02/18] fish: Fix manpage completion generation with paths containing spaces (#6703) Manual pages with spaces in their paths can lead to argument injection. --- modules/programs/fish.nix | 2 +- tests/modules/programs/fish/default.nix | 1 + tests/modules/programs/fish/manpage.nix | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 tests/modules/programs/fish/manpage.nix diff --git a/modules/programs/fish.nix b/modules/programs/fish.nix index 73691d5fb..d4f9751d9 100644 --- a/modules/programs/fish.nix +++ b/modules/programs/fish.nix @@ -449,7 +449,7 @@ in { for src in $srcs; do if [ -d $src/share/man ]; then find -L $src/share/man -type f \ - | xargs python ${cfg.package}/share/fish/tools/create_manpage_completions.py --directory $out \ + -exec python ${cfg.package}/share/fish/tools/create_manpage_completions.py --directory $out {} + \ > /dev/null fi done diff --git a/tests/modules/programs/fish/default.nix b/tests/modules/programs/fish/default.nix index f81ff971e..f7da4d4d0 100644 --- a/tests/modules/programs/fish/default.nix +++ b/tests/modules/programs/fish/default.nix @@ -4,4 +4,5 @@ fish-functions = ./functions.nix; fish-no-functions = ./no-functions.nix; fish-plugins = ./plugins.nix; + fish-manpage = ./manpage.nix; } diff --git a/tests/modules/programs/fish/manpage.nix b/tests/modules/programs/fish/manpage.nix new file mode 100644 index 000000000..2601b69c7 --- /dev/null +++ b/tests/modules/programs/fish/manpage.nix @@ -0,0 +1,12 @@ +{ lib, pkgs, ... }: { + config = { + programs.fish = { enable = true; }; + + home.packages = [ + (pkgs.runCommand "manpage-with-space" { } '' + mkdir -p $out/share/man/man1 + echo "It works!" >"$out/share/man/man1/hello -inject.1" + '') + ]; + }; +} From 5abb21dc10e4a9aaee5874c36e800a2609eceaef Mon Sep 17 00:00:00 2001 From: royce-c <114127058+royce-c@users.noreply.github.com> Date: Mon, 24 Mar 2025 21:40:09 -0700 Subject: [PATCH 03/18] distrobox: fix typo --- modules/programs/distrobox.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/programs/distrobox.nix b/modules/programs/distrobox.nix index 7ae68bcbd..30e716644 100644 --- a/modules/programs/distrobox.nix +++ b/modules/programs/distrobox.nix @@ -47,7 +47,7 @@ in { } ''; description = '' - A set of containers and all its respective configurations. Each option cat be either a + A set of containers and all its respective configurations. Each option can be either a bool, string or a list of strings. If passed a list, the option will be repeated for each element. See common-debian in the example config. All the available options for the containers can be found in the distrobox-assemble documentation at . From 529906d6a2ef020130110f4f8214a4513aa7996f Mon Sep 17 00:00:00 2001 From: royce-c <114127058+royce-c@users.noreply.github.com> Date: Mon, 24 Mar 2025 21:41:30 -0700 Subject: [PATCH 04/18] podman: fix typo --- modules/services/podman-linux/images.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/services/podman-linux/images.nix b/modules/services/podman-linux/images.nix index 957ed11bf..58bb97da1 100644 --- a/modules/services/podman-linux/images.nix +++ b/modules/services/podman-linux/images.nix @@ -77,7 +77,7 @@ in let decryptionKeyFile = mkOption { type = with types; nullOr path; default = null; - description = "Path to key used for decrpytion of images."; + description = "Path to key used for decryption of images."; }; description = mkOption { From 8bef8b7a0a95d347018f09b291e2fa0a77abd23f Mon Sep 17 00:00:00 2001 From: royce-c <114127058+royce-c@users.noreply.github.com> Date: Mon, 24 Mar 2025 21:44:23 -0700 Subject: [PATCH 05/18] direnv: fix typo --- modules/programs/direnv.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/programs/direnv.nix b/modules/programs/direnv.nix index 644914d58..c588c6b14 100644 --- a/modules/programs/direnv.nix +++ b/modules/programs/direnv.nix @@ -54,7 +54,7 @@ in { enableFishIntegration = lib.hm.shell.mkFishIntegrationOption { inherit config; extraDescription = '' - Note, enabling the direnv module will always active its functionality + Note, enabling the direnv module will always activate its functionality for Fish since the direnv package automatically gets loaded in Fish. If this is not the case try adding From d8b4ba070f5dfcb6c051c74fb31eafb58127580b Mon Sep 17 00:00:00 2001 From: Bob van der Linden Date: Tue, 25 Mar 2025 21:37:24 +0100 Subject: [PATCH 06/18] mergiraf: init module (#6633) This adds git integration for mergiraf. It sets up git to use mergiraf to automatically resolve merge conflicts. --- modules/modules.nix | 1 + modules/programs/mergiraf.nix | 31 +++++++++++++++++++ tests/default.nix | 2 ++ .../programs/mergiraf/basic-configuration.nix | 13 ++++++++ tests/modules/programs/mergiraf/default.nix | 1 + .../mergiraf/mergiraf-git-attributes.conf | 1 + .../programs/mergiraf/mergiraf-git.conf | 9 ++++++ 7 files changed, 58 insertions(+) create mode 100644 modules/programs/mergiraf.nix create mode 100644 tests/modules/programs/mergiraf/basic-configuration.nix create mode 100644 tests/modules/programs/mergiraf/default.nix create mode 100644 tests/modules/programs/mergiraf/mergiraf-git-attributes.conf create mode 100644 tests/modules/programs/mergiraf/mergiraf-git.conf diff --git a/modules/modules.nix b/modules/modules.nix index 68bdf73e3..ded27ace1 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -170,6 +170,7 @@ let ./programs/mbsync.nix ./programs/mcfly.nix ./programs/mercurial.nix + ./programs/mergiraf.nix ./programs/micro.nix ./programs/mise.nix ./programs/mods.nix diff --git a/modules/programs/mergiraf.nix b/modules/programs/mergiraf.nix new file mode 100644 index 000000000..0597b7d93 --- /dev/null +++ b/modules/programs/mergiraf.nix @@ -0,0 +1,31 @@ +{ pkgs, config, lib, ... }: +let + inherit (lib) + mkEnableOption mkPackageOption types literalExpression mkIf maintainers; + cfg = config.programs.mergiraf; + mergiraf = "${cfg.package}/bin/mergiraf"; +in { + meta.maintainers = [ maintainers.bobvanderlinden ]; + + options = { + programs.mergiraf = { + enable = mkEnableOption "mergiraf"; + package = mkPackageOption pkgs "mergiraf" { }; + }; + }; + + config = mkIf cfg.enable { + home.packages = [ cfg.package ]; + + programs.git = { + attributes = [ "* merge=mergiraf" ]; + extraConfig = { + merge.mergiraf = { + name = "mergiraf"; + driver = + "${mergiraf} merge --git %O %A %B -s %S -x %X -y %Y -p %P -l %L"; + }; + }; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 427f4e87a..5d099211f 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -131,6 +131,7 @@ let "lsd" "lieer" "mbsync" + "mergiraf" "micro" "mise" "mpv" @@ -341,6 +342,7 @@ in import nmtSrc { ./modules/programs/lieer ./modules/programs/man ./modules/programs/mbsync + ./modules/programs/mergiraf ./modules/programs/micro ./modules/programs/mise ./modules/programs/mods diff --git a/tests/modules/programs/mergiraf/basic-configuration.nix b/tests/modules/programs/mergiraf/basic-configuration.nix new file mode 100644 index 000000000..3d8688ad7 --- /dev/null +++ b/tests/modules/programs/mergiraf/basic-configuration.nix @@ -0,0 +1,13 @@ +{ config, lib, ... }: + +{ + programs.git.enable = true; + programs.mergiraf.enable = true; + + nmt.script = '' + assertFileContent "home-files/.config/git/config" ${./mergiraf-git.conf} + assertFileContent "home-files/.config/git/attributes" ${ + ./mergiraf-git-attributes.conf + } + ''; +} diff --git a/tests/modules/programs/mergiraf/default.nix b/tests/modules/programs/mergiraf/default.nix new file mode 100644 index 000000000..67d8916b7 --- /dev/null +++ b/tests/modules/programs/mergiraf/default.nix @@ -0,0 +1 @@ +{ mergiraf-basic-configuration = ./basic-configuration.nix; } diff --git a/tests/modules/programs/mergiraf/mergiraf-git-attributes.conf b/tests/modules/programs/mergiraf/mergiraf-git-attributes.conf new file mode 100644 index 000000000..789ed5db5 --- /dev/null +++ b/tests/modules/programs/mergiraf/mergiraf-git-attributes.conf @@ -0,0 +1 @@ +* merge=mergiraf diff --git a/tests/modules/programs/mergiraf/mergiraf-git.conf b/tests/modules/programs/mergiraf/mergiraf-git.conf new file mode 100644 index 000000000..46da0369f --- /dev/null +++ b/tests/modules/programs/mergiraf/mergiraf-git.conf @@ -0,0 +1,9 @@ +[gpg] + format = "openpgp" + +[gpg "openpgp"] + program = "@gnupg@/bin/gpg" + +[merge "mergiraf"] + driver = "@mergiraf@/bin/mergiraf merge --git %O %A %B -s %S -x %X -y %Y -p %P -l %L" + name = "mergiraf" From f565da89e759ebf57b236510aa955b8a2d41c779 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Tue, 25 Mar 2025 16:25:32 -0500 Subject: [PATCH 07/18] davmail: add package option (#6705) --- modules/services/davmail.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/services/davmail.nix b/modules/services/davmail.nix index 5eb2f80a2..a58a2fea7 100644 --- a/modules/services/davmail.nix +++ b/modules/services/davmail.nix @@ -19,6 +19,8 @@ in { enable = mkEnableOption "DavMail, an MS Exchange gateway."; + package = lib.mkPackageOption pkgs "davmail" { }; + imitateOutlook = mkOption { type = types.bool; default = false; @@ -91,7 +93,7 @@ in { Install.WantedBy = [ "graphical-session.target" ]; Service = { Type = "simple"; - ExecStart = "${pkgs.davmail}/bin/davmail ${settingsFile}"; + ExecStart = "${lib.getExe cfg.package} ${settingsFile}"; Restart = "on-failure"; CapabilityBoundingSet = [ "" ]; @@ -121,8 +123,6 @@ in { }; }; - home.packages = [ pkgs.davmail ]; - + home.packages = [ cfg.package ]; }; - } From b9da58d50551ebd74226fb8487b248a5a36c988f Mon Sep 17 00:00:00 2001 From: Fea <53912746+feathecutie@users.noreply.github.com> Date: Wed, 26 Mar 2025 00:06:44 +0100 Subject: [PATCH 08/18] carapace: conditionally disable unnecessary fish completion workaround on fish 4.0 (#6694) The disabled workaround stopped being necessary with fish 4.0, as noted in https://carapace-sh.github.io/carapace-bin/setup.html#fish --- modules/programs/carapace.nix | 13 +++++++++---- tests/modules/programs/carapace/fish.nix | 12 ++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/modules/programs/carapace.nix b/modules/programs/carapace.nix index 6d1b6f8ac..d07cb6bd0 100644 --- a/modules/programs/carapace.nix +++ b/modules/programs/carapace.nix @@ -61,18 +61,23 @@ in { }; }; - xdg.configFile = - mkIf (config.programs.fish.enable && cfg.enableFishIntegration) ( + xdg.configFile = mkIf (config.programs.fish.enable + && cfg.enableFishIntegration + && lib.versionOlder config.programs.fish.package.version "4.0.0") ( # Convert the entries from `carapace --list` to empty # xdg.configFile."fish/completions/NAME.fish" entries. # # This is to disable fish builtin completion for each of the - # carapace-supported completions It is in line with the instructions from + # carapace-supported completions. + # + # This is necessary for carapace to properly work with fish version < 4.0b1. + # + # It is in line with the instructions from # carapace-bin: # # carapace --list | awk '{print $1}' | xargs -I{} touch ~/.config/fish/completions/{}.fish # - # See https://github.com/rsteube/carapace-bin#getting-started + # See https://carapace-sh.github.io/carapace-bin/setup.html#fish let carapaceListFile = pkgs.runCommandLocal "carapace-list" { buildInputs = [ cfg.package ]; diff --git a/tests/modules/programs/carapace/fish.nix b/tests/modules/programs/carapace/fish.nix index f0a281d38..b83136c6c 100644 --- a/tests/modules/programs/carapace/fish.nix +++ b/tests/modules/programs/carapace/fish.nix @@ -8,13 +8,17 @@ lib.mkIf config.test.enableBig { nixpkgs.overlays = [ (self: super: { inherit (realPkgs) carapace; }) ]; - nmt.script = '' + nmt.script = let + needsCompletionOverrides = lib.versionOlder realPkgs.fish.version "4.0.0"; + in '' assertFileExists home-files/.config/fish/config.fish assertFileRegex home-files/.config/fish/config.fish \ '/nix/store/.*carapace.*/bin/carapace _carapace fish \| source' - - # Check whether completions are overridden. + '' + (lib.optionalString needsCompletionOverrides '' + # Check whether completions are overridden, necessary for fish < 4.0 assertFileExists home-files/.config/fish/completions/git.fish assertFileContent home-files/.config/fish/completions/git.fish /dev/null - ''; + '') + (lib.optionalString (!needsCompletionOverrides) '' + assertPathNotExists home-files/.config/fish/completions + ''); } From 338b2eabdfde14a79755341ea472e2c55d1064c4 Mon Sep 17 00:00:00 2001 From: Alex Epelde Date: Tue, 25 Mar 2025 19:48:07 -0400 Subject: [PATCH 09/18] waybar: integrate with tray.target (#6675) Inspired by [#3432][0], but with a smaller footprint. This change makes it so that services with `Requires=tray.target` and `After=tray.target`, such as [`blueman-applet`][1] or [`network-manager-applet`][2] get started *after* waybar is ready. [0]: https://github.com/nix-community/home-manager/pull/3432 [1]: https://github.com/nix-community/home-manager/blob/6c2b79403e9ae852fbf1d55b29f2ea4d2aa43255/modules/services/blueman-applet.nix [2]: https://github.com/nix-community/home-manager/blob/6c2b79403e9ae852fbf1d55b29f2ea4d2aa43255/modules/services/network-manager-applet.nix --- modules/programs/waybar.nix | 6 +++--- .../waybar/systemd-with-graphical-session-target.service | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/modules/programs/waybar.nix b/modules/programs/waybar.nix index 0d7294d03..c0ce4c169 100644 --- a/modules/programs/waybar.nix +++ b/modules/programs/waybar.nix @@ -321,7 +321,7 @@ in { Description = "Highly customizable Wayland bar for Sway and Wlroots based compositors."; Documentation = "https://github.com/Alexays/Waybar/wiki"; - PartOf = [ cfg.systemd.target ]; + PartOf = [ cfg.systemd.target "tray.target" ]; After = [ cfg.systemd.target ]; ConditionEnvironment = "WAYLAND_DISPLAY"; X-Restart-Triggers = optional (settings != [ ]) @@ -339,8 +339,8 @@ in { Environment = [ "GTK_DEBUG=interactive" ]; }; - Install.WantedBy = - lib.optional (cfg.systemd.target != null) cfg.systemd.target; + Install.WantedBy = [ "tray.target" ] + ++ lib.optional (cfg.systemd.target != null) cfg.systemd.target; }; }) ]); diff --git a/tests/modules/programs/waybar/systemd-with-graphical-session-target.service b/tests/modules/programs/waybar/systemd-with-graphical-session-target.service index f3e3b24a3..5056d1be4 100644 --- a/tests/modules/programs/waybar/systemd-with-graphical-session-target.service +++ b/tests/modules/programs/waybar/systemd-with-graphical-session-target.service @@ -1,4 +1,5 @@ [Install] +WantedBy=tray.target WantedBy=sway-session.target [Service] @@ -13,3 +14,4 @@ ConditionEnvironment=WAYLAND_DISPLAY Description=Highly customizable Wayland bar for Sway and Wlroots based compositors. Documentation=https://github.com/Alexays/Waybar/wiki PartOf=sway-session.target +PartOf=tray.target From 2321c6889bd473d384b687c7d536d88fec3b3256 Mon Sep 17 00:00:00 2001 From: Joseph LaFreniere Date: Tue, 25 Mar 2025 19:48:21 -0400 Subject: [PATCH 10/18] ripgrep-all: Add module (#5459) --- modules/modules.nix | 1 + modules/programs/ripgrep-all.nix | 102 ++++++++++++++++++ tests/default.nix | 1 + .../programs/ripgrep-all/custom-arguments.nix | 51 +++++++++ .../ripgrep-all/default-arguments.nix | 13 +++ .../modules/programs/ripgrep-all/default.nix | 4 + 6 files changed, 172 insertions(+) create mode 100644 modules/programs/ripgrep-all.nix create mode 100644 tests/modules/programs/ripgrep-all/custom-arguments.nix create mode 100644 tests/modules/programs/ripgrep-all/default-arguments.nix create mode 100644 tests/modules/programs/ripgrep-all/default.nix diff --git a/modules/modules.nix b/modules/modules.nix index ded27ace1..e28d33227 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -226,6 +226,7 @@ let ./programs/readline.nix ./programs/rio.nix ./programs/ripgrep.nix + ./programs/ripgrep-all.nix ./programs/rofi-pass.nix ./programs/rofi.nix ./programs/rtorrent.nix diff --git a/modules/programs/ripgrep-all.nix b/modules/programs/ripgrep-all.nix new file mode 100644 index 000000000..cef0de21b --- /dev/null +++ b/modules/programs/ripgrep-all.nix @@ -0,0 +1,102 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.programs.ripgrep-all; + configPath = if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/ripgrep-all/config.jsonc" + else + "${config.xdg.configHome}/ripgrep-all/config.jsonc"; + customAdapter = lib.types.submodule { + # Descriptions are largely copied from https://github.com/phiresky/ripgrep-all/blob/v1.0.0-alpha.5/src/adapters/custom.rs + options = { + name = lib.mkOption { + type = lib.types.str; + description = + "The unique identifier and name of this adapter; must only include a-z, 0-9, _"; + }; + version = lib.mkOption { + type = lib.types.int; + default = 1; + description = + "The version identifier used to key cache entries; change if the configuration or program changes"; + }; + description = lib.mkOption { + type = lib.types.str; + description = "A description of this adapter; shown in rga's help"; + }; + extensions = lib.mkOption { + type = with lib.types; listOf str; + description = "The file extensions this adapter supports"; + example = [ "pdf" ]; + }; + mimetypes = lib.mkOption { + type = with lib.types; nullOr (listOf str); + default = null; + description = + "If not null and --rga-accurate is enabled, mime type matching is used instead of file name matching"; + example = [ "application/pdf" ]; + }; + binary = lib.mkOption { + type = lib.types.path; + description = "The path of the binary to run"; + }; + args = lib.mkOption { + type = with lib.types; listOf str; + default = [ ]; + description = + "The output path hint; the placeholders are the same as for rga's `args`"; + }; + disabled_by_default = lib.mkOption { + type = with lib.types; nullOr bool; + default = null; + description = "If true, the adapter will be disabled by default"; + }; + match_only_by_mime = lib.mkOption { + type = with lib.types; nullOr bool; + default = null; + description = + "if --rga-accurate, only match by mime types, ignore extensions completely"; + }; + output_path_hint = lib.mkOption { + type = with lib.types; nullOr str; + default = null; + description = + "Setting this is useful if the output format is not plain text (.txt) but instead some other format that should be passed to another adapter"; + example = "$${input_virtual_path}.txt.asciipagebreaks"; + }; + }; + }; +in { + meta.maintainers = with lib.maintainers; [ lafrenierejm ]; + + options = { + programs.ripgrep-all = { + enable = lib.mkEnableOption "ripgrep-all (rga)"; + + package = lib.mkPackageOption pkgs "ripgrep-all" { nullable = true; }; + + custom_adapters = lib.mkOption { + type = lib.types.listOf customAdapter; + default = [ ]; + description = '' + Custom adapters that invoke external preprocessing scripts. + See . + ''; + }; + }; + }; + + config = lib.mkIf cfg.enable { + home = { + packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + file."${configPath}" = lib.mkIf (cfg.custom_adapters != [ ]) { + source = (pkgs.formats.json { }).generate "ripgrep-all" { + "$schema" = "./config.schema.json"; + custom_adapters = + map (lib.filterAttrs (n: v: v != null)) cfg.custom_adapters; + }; + }; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index 5d099211f..233587c45 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -379,6 +379,7 @@ in import nmtSrc { ./modules/programs/readline ./modules/programs/rio ./modules/programs/ripgrep + ./modules/programs/ripgrep-all ./modules/programs/ruff ./modules/programs/sagemath ./modules/programs/sapling diff --git a/tests/modules/programs/ripgrep-all/custom-arguments.nix b/tests/modules/programs/ripgrep-all/custom-arguments.nix new file mode 100644 index 000000000..01ee70db7 --- /dev/null +++ b/tests/modules/programs/ripgrep-all/custom-arguments.nix @@ -0,0 +1,51 @@ +{ pkgs, config, ... }: { + config = { + programs.ripgrep-all = { + enable = true; + package = config.lib.test.mkStubPackage { name = "ripgrep-all"; }; + custom_adapters = [{ + name = "gron"; + version = 1; + description = "Transform JSON into discrete JS assignments"; + extensions = [ "json" ]; + mimetypes = [ "application/json" ]; + binary = "/bin/gron"; + disabled_by_default = false; + match_only_by_mime = false; + }]; + }; + + nmt.script = let + configPath = if pkgs.stdenv.hostPlatform.isDarwin then + "Library/Application Support/ripgrep-all/config.jsonc" + else + ".config/ripgrep-all/config.jsonc"; + in '' + assertFileExists "home-files/${configPath}" + assertFileContent "home-files/${configPath}" ${ + pkgs.writeText "ripgrep-all.expected" '' + { + "$schema": "./config.schema.json", + "custom_adapters": [ + { + "args": [], + "binary": "/bin/gron", + "description": "Transform JSON into discrete JS assignments", + "disabled_by_default": false, + "extensions": [ + "json" + ], + "match_only_by_mime": false, + "mimetypes": [ + "application/json" + ], + "name": "gron", + "version": 1 + } + ] + } + '' + } + ''; + }; +} diff --git a/tests/modules/programs/ripgrep-all/default-arguments.nix b/tests/modules/programs/ripgrep-all/default-arguments.nix new file mode 100644 index 000000000..61ba46b62 --- /dev/null +++ b/tests/modules/programs/ripgrep-all/default-arguments.nix @@ -0,0 +1,13 @@ +{ config, ... }: { + config = { + programs.ripgrep-all = { + enable = true; + package = config.lib.test.mkStubPackage { name = "ripgrep-all"; }; + }; + + nmt.script = '' + assertPathNotExists home-files/.config/ripgrep-all/config.jsonc + assertPathNotExists 'home-files/Library/Application Support/ripgrep-all/config.jsonc' + ''; + }; +} diff --git a/tests/modules/programs/ripgrep-all/default.nix b/tests/modules/programs/ripgrep-all/default.nix new file mode 100644 index 000000000..ddc31c28b --- /dev/null +++ b/tests/modules/programs/ripgrep-all/default.nix @@ -0,0 +1,4 @@ +{ + ripgrep-all-default-arguments = ./default-arguments.nix; + ripgrep-all-custom-arguments = ./custom-arguments.nix; +} From 0ff53f6d336edb3ad81647dc931ad1c9c7f890ca Mon Sep 17 00:00:00 2001 From: Aneesh Bhave Date: Tue, 25 Mar 2025 23:55:51 +0000 Subject: [PATCH 11/18] helix: add extraConfig option (#6575) The extraConfig option can be used to append ordered lines to helix configuration. Helix depends on order for rendering minor mode menus. --- modules/programs/helix.nix | 24 +++++++++++++++---- .../programs/helix/example-settings.nix | 10 +++++--- .../programs/helix/settings-expected.toml | 4 ++++ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/modules/programs/helix.nix b/modules/programs/helix.nix index 840f5d82f..6529e6c22 100644 --- a/modules/programs/helix.nix +++ b/modules/programs/helix.nix @@ -1,7 +1,5 @@ { config, lib, pkgs, ... }: - with lib; - let cfg = config.programs.helix; tomlFormat = pkgs.formats.toml { }; @@ -26,6 +24,20 @@ in { description = "Extra packages available to hx."; }; + extraConfig = mkOption { + type = types.lines; + default = ""; + description = '' + Extra lines to be appended to the config file. + Use this if you would like to maintain order for helix settings (eg. for minor modes) + ''; + example = literalExpression '' + [keys.normal.g] # Reverse Alphabetical Order + G = "goto_file_end" + g = "goto_file_start" + ''; + }; + defaultEditor = mkOption { type = types.bool; default = false; @@ -200,7 +212,9 @@ in { xdg.configFile = let settings = { "helix/config.toml" = mkIf (cfg.settings != { }) { - source = tomlFormat.generate "helix-config" cfg.settings; + text = + builtins.readFile (tomlFormat.generate "helix-config" cfg.settings) + + "\n" + cfg.extraConfig; }; "helix/languages.toml" = mkIf (cfg.languages != { }) { source = tomlFormat.generate "helix-languages-config" cfg.languages; @@ -210,10 +224,10 @@ in { }; }; - themes = (mapAttrs' (n: v: + themes = mapAttrs' (n: v: nameValuePair "helix/themes/${n}.toml" { source = tomlFormat.generate "helix-theme-${n}" v; - }) cfg.themes); + }) cfg.themes; in settings // themes; }; } diff --git a/tests/modules/programs/helix/example-settings.nix b/tests/modules/programs/helix/example-settings.nix index 69a5ef557..e345725e4 100644 --- a/tests/modules/programs/helix/example-settings.nix +++ b/tests/modules/programs/helix/example-settings.nix @@ -1,6 +1,4 @@ -{ config, ... }: - -{ +{ config, ... }: { programs.helix = { enable = true; @@ -18,6 +16,12 @@ }; }; + extraConfig = '' + [keys.normal.G] + G = "goto_file_end" + g = "goto_file_start" + ''; + languages = { language-server.typescript-language-server = let typescript-language-server = config.lib.test.mkStubPackage { diff --git a/tests/modules/programs/helix/settings-expected.toml b/tests/modules/programs/helix/settings-expected.toml index 91682f0ae..5e218ed77 100644 --- a/tests/modules/programs/helix/settings-expected.toml +++ b/tests/modules/programs/helix/settings-expected.toml @@ -12,3 +12,7 @@ esc = ["collapse_selection", "keep_primary_selection"] q = ":q" space = "file_picker" w = ":w" + +[keys.normal.G] +G = "goto_file_end" +g = "goto_file_start" From ce287a5cd3ef78203bc78021447f937a988d9f6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= <65362461+msyds@users.noreply.github.com> Date: Tue, 25 Mar 2025 20:44:04 -0600 Subject: [PATCH 12/18] mpdscribble: add module (#6259) --- modules/lib/maintainers.nix | 6 + modules/misc/news.nix | 11 + modules/modules.nix | 1 + modules/services/mpdscribble.nix | 222 ++++++++++++++++++ tests/default.nix | 1 + .../mpdscribble/basic-configuration.nix | 28 +++ .../mpdscribble/basic-configuration.service | 14 ++ .../modules/services/mpdscribble/default.nix | 1 + 8 files changed, 284 insertions(+) create mode 100644 modules/services/mpdscribble.nix create mode 100644 tests/modules/services/mpdscribble/basic-configuration.nix create mode 100644 tests/modules/services/mpdscribble/basic-configuration.service create mode 100644 tests/modules/services/mpdscribble/default.nix diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index e6a43034f..9fb20cdd5 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -310,6 +310,12 @@ github = "mifom"; githubId = 23462908; }; + msyds = { + name = "Madeleine Sydney Ślaga"; + email = "65362461+msyds@users.noreply.github.com"; + github = "msyds"; + githubId = 65362461; + }; nikp123 = { name = "nikp123"; email = "nikp123@users.noreply.github.com"; diff --git a/modules/misc/news.nix b/modules/misc/news.nix index 672930883..51c35976a 100644 --- a/modules/misc/news.nix +++ b/modules/misc/news.nix @@ -2148,6 +2148,7 @@ in { under '$XDG_CONFIG_HOME/easyeffects/{input,output}/'. ''; } + { time = "2025-02-12T15:56:00+00:00"; message = '' @@ -2169,6 +2170,16 @@ in { - programs.zellij.enableZshIntegration ''; } + + { + time = "2025-01-02T11:21:19+00:00"; + message = '' + A new module is available: 'services.mpdscribble'. + + A MPD client which submits information about tracks being played to a + scrobbler (e.g. last.fm) + ''; + } ]; }; } diff --git a/modules/modules.nix b/modules/modules.nix index e28d33227..b48ef31af 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -363,6 +363,7 @@ let ./services/mopidy.nix ./services/mpd.nix ./services/mpdris2.nix + ./services/mpdscribble.nix ./services/mpd-discord-rpc.nix ./services/mpd-mpris.nix ./services/mpris-proxy.nix diff --git a/modules/services/mpdscribble.nix b/modules/services/mpdscribble.nix new file mode 100644 index 000000000..d868f24b1 --- /dev/null +++ b/modules/services/mpdscribble.nix @@ -0,0 +1,222 @@ +{ config, lib, options, pkgs, ... }: + +let + cfg = config.services.mpdscribble; + mpdCfg = config.services.mpd; + mpdOpt = options.services.mpd; + + endpointUrls = { + "last.fm" = "http://post.audioscrobbler.com"; + "libre.fm" = "http://turtle.libre.fm"; + "jamendo" = "http://postaudioscrobbler.jamendo.com"; + "listenbrainz" = "http://proxy.listenbrainz.org"; + }; +in { + options.services.mpdscribble = { + + enable = lib.mkEnableOption '' + mpdscribble, an MPD client which submits info about tracks being played to + Last.fm (formerly AudioScrobbler) + ''; + + proxy = lib.mkOption { + default = null; + type = lib.types.nullOr lib.types.str; + description = '' + HTTP proxy URL. + ''; + }; + + verbose = lib.mkOption { + default = 1; + type = lib.types.int; + description = '' + Log level for the mpdscribble daemon. + ''; + }; + + journalInterval = lib.mkOption { + default = 600; + example = 60; + type = lib.types.int; + description = '' + How often should mpdscribble save the journal file? [seconds] + ''; + }; + + host = lib.mkOption { + default = (if mpdCfg.network.listenAddress != "any" then + mpdCfg.network.listenAddress + else + "localhost"); + defaultText = lib.literalExpression '' + if config.${mpdOpt.network.listenAddress} != "any" + then config.${mpdOpt.network.listenAddress} + else "localhost" + ''; + type = lib.types.str; + description = '' + Host for the mpdscribble daemon to search for a mpd daemon on. + ''; + }; + + package = lib.mkPackageOption pkgs "mpdscribble" { }; + + passwordFile = lib.mkOption { + default = null; + type = lib.types.nullOr lib.types.str; + description = '' + File containing the password for the mpd daemon. + ''; + }; + + port = lib.mkOption { + default = mpdCfg.network.port; + defaultText = lib.literalExpression "config.${mpdOpt.network.port}"; + type = lib.types.port; + description = '' + Port for the mpdscribble daemon to search for a mpd daemon on. + ''; + }; + + endpoints = lib.mkOption { + type = let + endpoint = { name, ... }: { + options = { + url = lib.mkOption { + type = lib.types.str; + default = endpointUrls.${name} or ""; + description = + "The url endpoint where the scrobble API is listening."; + }; + username = lib.mkOption { + type = lib.types.str; + description = '' + Username for the scrobble service. + ''; + }; + passwordFile = lib.mkOption { + type = lib.types.nullOr lib.types.str; + description = + "File containing the password, either as MD5SUM or cleartext."; + }; + }; + }; + in lib.types.attrsOf (lib.types.submodule endpoint); + default = { }; + example = { + "last.fm" = { + username = "foo"; + passwordFile = "/run/secrets/lastfm_password"; + }; + }; + description = '' + Endpoints to scrobble to. + If the endpoint is one of "${ + lib.concatStringsSep ''", "'' (builtins.attrNames endpointUrls) + }" the url is set automatically. + ''; + }; + + }; + + config = lib.mkIf cfg.enable { + assertions = [ + (lib.hm.assertions.assertPlatform "services.mpdscribble" pkgs + lib.platforms.linux) + ]; + systemd.user.services.mpdscribble = let + localMpd = (cfg.host == "localhost" || cfg.host == "127.0.0.1"); + + mkSection = secname: secCfg: '' + [${secname}] + url = ${secCfg.url} + username = ${secCfg.username} + password = {{${secname}_PASSWORD}} + journal = /var/lib/mpdscribble/${secname}.journal + ''; + + endpoints = + lib.concatStringsSep "\n" (lib.mapAttrsToList mkSection cfg.endpoints); + cfgTemplate = pkgs.writeText "mpdscribble.conf" '' + ## This file was automatically genenrated by home-manager and will be + ## overwritten. Do not edit. Edit your home-manager configuration instead. + + ## mpdscribble - an audioscrobbler for the Music Player Daemon. + ## http://mpd.wikia.com/wiki/Client:mpdscribble + + # HTTP proxy URL. + ${lib.optionalString (cfg.proxy != null) "proxy = ${cfg.proxy}"} + + # The location of the mpdscribble log file. The special value + # "syslog" makes mpdscribble use the local syslog daemon. On most + # systems, log messages will appear in /var/log/daemon.log then. + # "-" means log to stderr (the current terminal). + log = - + + # How verbose mpdscribble's logging should be. Default is 1. + verbose = ${toString cfg.verbose} + + # How often should mpdscribble save the journal file? [seconds] + journal_interval = ${toString cfg.journalInterval} + + # The host running MPD, possibly protected by a password + # ([PASSWORD@]HOSTNAME). + host = ${ + (lib.optionalString (cfg.passwordFile != null) "{{MPD_PASSWORD}}@") + + cfg.host + } + + # The port that the MPD listens on and mpdscribble should try to + # connect to. + port = ${toString cfg.port} + + ${endpoints} + ''; + + configFile = + "\${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/mpdscribble/mpdscribble.conf"; + + replaceSecret = secretFile: placeholder: targetFile: + lib.optionalString (secretFile != null) '' + ${pkgs.replace-secret}/bin/replace-secret '${placeholder}' '${secretFile}' "${targetFile}" + ''; + + preStart = pkgs.writeShellApplication { + name = "mpdscribble-pre-start"; + runtimeInputs = [ pkgs.replace-secret pkgs.coreutils ]; + text = '' + configFile="${configFile}" + mkdir -p "$(dirname "$configFile")" + cp --no-preserve=mode,ownership -f "${cfgTemplate}" "$configFile" + ${replaceSecret cfg.passwordFile "{{MPD_PASSWORD}}" "$configFile"} + ${lib.concatStringsSep "\n" (lib.mapAttrsToList (secname: cfg: + replaceSecret cfg.passwordFile "{{${secname}_PASSWORD}}" + "$configFile") cfg.endpoints)} + ''; + }; + + start = pkgs.writeShellScript "mpdscribble-start" '' + configFile="${configFile}" + exec "${lib.getExe cfg.package}" --no-daemon --conf "$configFile" + ''; + + in { + Unit = { + Description = "mpdscribble mpd scrobble client"; + After = [ "network.target" ] ++ lib.optional localMpd "mpd.service"; + }; + Install.WantedBy = [ "default.target" ]; + Service = { + StateDirectory = "mpdscribble"; + RuntimeDirectory = "mpdscribble"; + RuntimeDirectoryMode = "700"; + # TODO use LoadCredential= instead of running preStart with full privileges? + ExecStartPre = "+${preStart}/bin/mpdscribble-pre-start"; + ExecStart = "${start}"; + }; + }; + }; + + meta.maintainers = [ lib.hm.maintainers.msyds ]; +} diff --git a/tests/default.nix b/tests/default.nix index 233587c45..04d7b1c52 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -525,6 +525,7 @@ in import nmtSrc { ./modules/services/mpd ./modules/services/mpd-mpris ./modules/services/mpdris2 + ./modules/services/mpdscribble ./modules/services/nix-gc ./modules/services/ollama/linux ./modules/services/osmscout-server diff --git a/tests/modules/services/mpdscribble/basic-configuration.nix b/tests/modules/services/mpdscribble/basic-configuration.nix new file mode 100644 index 000000000..18c02585f --- /dev/null +++ b/tests/modules/services/mpdscribble/basic-configuration.nix @@ -0,0 +1,28 @@ +{ config, lib, pkgs, ... }: + +with lib; + +{ + services.mpdscribble = { + enable = true; + endpoints = { + "libre.fm" = { + username = "musicfan1992"; + passwordFile = toString ./password-file; + }; + "https://music.com/" = { + username = "musicHATER1000"; + passwordFile = toString ./password-file; + }; + }; + }; + + home.stateVersion = "22.11"; + + test.stubs.mpd = { }; + + nmt.script = '' + serviceFile=$(normalizeStorePaths home-files/.config/systemd/user/mpdscribble.service) + assertFileContent "$serviceFile" ${./basic-configuration.service} + ''; +} diff --git a/tests/modules/services/mpdscribble/basic-configuration.service b/tests/modules/services/mpdscribble/basic-configuration.service new file mode 100644 index 000000000..efa7da9ad --- /dev/null +++ b/tests/modules/services/mpdscribble/basic-configuration.service @@ -0,0 +1,14 @@ +[Install] +WantedBy=default.target + +[Service] +ExecStart=/nix/store/00000000000000000000000000000000-mpdscribble-start +ExecStartPre=+/nix/store/00000000000000000000000000000000-mpdscribble-pre-start/bin/mpdscribble-pre-start +RuntimeDirectory=mpdscribble +RuntimeDirectoryMode=700 +StateDirectory=mpdscribble + +[Unit] +After=network.target +After=mpd.service +Description=mpdscribble mpd scrobble client diff --git a/tests/modules/services/mpdscribble/default.nix b/tests/modules/services/mpdscribble/default.nix new file mode 100644 index 000000000..b44dae9dd --- /dev/null +++ b/tests/modules/services/mpdscribble/default.nix @@ -0,0 +1 @@ +{ mpdscribble-basic-configuration = ./basic-configuration.nix; } From 693840c01b9bef9e54100239cef937e53d4661bf Mon Sep 17 00:00:00 2001 From: Tim Steinbach Date: Wed, 26 Mar 2025 09:44:18 -0400 Subject: [PATCH 13/18] vscode: Fix version checks when using Cursor (#6680) The version check for VSCode fails when using Cursor. Cursor has its own versioning and is currently at 0.45.14 (based on VSCode version 1.96.2). The version checks for generating the `extensions.json` in the module look at the package version, which causes them not to be generated for Cursor. --- modules/programs/vscode.nix | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/modules/programs/vscode.nix b/modules/programs/vscode.nix index 69b7e1812..2fee53ac1 100644 --- a/modules/programs/vscode.nix +++ b/modules/programs/vscode.nix @@ -389,25 +389,26 @@ in { mkMerge (concatMap toPaths (flatten (mapAttrsToList (n: v: v.extensions) cfg.profiles)) ++ optional - (versionAtLeast vscodeVersion "1.74.0" && defaultProfile != { }) { - # Whenever our immutable extensions.json changes, force VSCode to regenerate - # extensions.json with both mutable and immutable extensions. - "${extensionPath}/.extensions-immutable.json" = { - text = extensionJson defaultProfile.extensions; - onChange = '' - run rm $VERBOSE_ARG -f ${extensionPath}/{extensions.json,.init-default-profile-extensions} - verboseEcho "Regenerating VSCode extensions.json" - run ${getExe cfg.package} --list-extensions > /dev/null - ''; - }; - }) + ((versionAtLeast vscodeVersion "1.74.0" || vscodePname == "cursor") + && defaultProfile != { }) { + # Whenever our immutable extensions.json changes, force VSCode to regenerate + # extensions.json with both mutable and immutable extensions. + "${extensionPath}/.extensions-immutable.json" = { + text = extensionJson defaultProfile.extensions; + onChange = '' + run rm $VERBOSE_ARG -f ${extensionPath}/{extensions.json,.init-default-profile-extensions} + verboseEcho "Regenerating VSCode extensions.json" + run ${getExe cfg.package} --list-extensions > /dev/null + ''; + }; + }) else { "${extensionPath}".source = let combinedExtensionsDrv = pkgs.buildEnv { name = "vscode-extensions"; paths = (flatten (mapAttrsToList (n: v: v.extensions) cfg.profiles)) - ++ optional - (versionAtLeast vscodeVersion "1.74.0" && defaultProfile != { }) + ++ optional ((versionAtLeast vscodeVersion "1.74.0" || vscodePname + == "cursor") && defaultProfile != { }) (extensionJsonFile "default" (extensionJson defaultProfile.extensions)); }; From 171915bfce41018528fda9960211e81946d999b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B?= Date: Thu, 27 Mar 2025 14:40:07 +0100 Subject: [PATCH 14/18] fzf: fix zsh integration (keybinds rewritten by omz) (#6712) fzf history keybind (^R) was being rewritten by omz. This PR moves the initialization of the fzf zsh integration just after omz integration (but sill before other history managers, eg: atuin) --- modules/programs/fzf.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/programs/fzf.nix b/modules/programs/fzf.nix index 518ea22a7..77a431f33 100644 --- a/modules/programs/fzf.nix +++ b/modules/programs/fzf.nix @@ -195,8 +195,10 @@ in { # Note, since fzf unconditionally binds C-r we use `mkOrder` to make the # initialization show up a bit earlier. This is to make initialization of # other history managers, like mcfly or atuin, take precedence. + # Still needs to be initialized after oh-my-zsh (order 800), otherwise + # omz will take precedence. programs.zsh.initContent = - mkIf cfg.enableZshIntegration (mkOrder 200 zshIntegration); + mkIf cfg.enableZshIntegration (mkOrder 810 zshIntegration); programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration (mkOrder 200 fishIntegration); From b14a70c40f4fd0b73d095ab04a7c6e31fbc18e52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B?= Date: Thu, 27 Mar 2025 18:49:40 +0100 Subject: [PATCH 15/18] fzf: update zsh integration to be after plugins (#6716) --- modules/programs/fzf.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/programs/fzf.nix b/modules/programs/fzf.nix index 77a431f33..76c5e2c4b 100644 --- a/modules/programs/fzf.nix +++ b/modules/programs/fzf.nix @@ -198,7 +198,7 @@ in { # Still needs to be initialized after oh-my-zsh (order 800), otherwise # omz will take precedence. programs.zsh.initContent = - mkIf cfg.enableZshIntegration (mkOrder 810 zshIntegration); + mkIf cfg.enableZshIntegration (mkOrder 910 zshIntegration); programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration (mkOrder 200 fishIntegration); From 13d68e9ac05caccc1f81ce40612a8086421e1706 Mon Sep 17 00:00:00 2001 From: Shogo Takata Date: Fri, 28 Mar 2025 13:31:30 +0900 Subject: [PATCH 16/18] helix: avoid IFD (#6714) Avoids IFD in the helix module which was introduced in #6575. The helix module fails to build when --no-allow-import-from-derivation is enabled. --- modules/programs/helix.nix | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/programs/helix.nix b/modules/programs/helix.nix index 6529e6c22..3119a06d4 100644 --- a/modules/programs/helix.nix +++ b/modules/programs/helix.nix @@ -212,9 +212,13 @@ in { xdg.configFile = let settings = { "helix/config.toml" = mkIf (cfg.settings != { }) { - text = - builtins.readFile (tomlFormat.generate "helix-config" cfg.settings) - + "\n" + cfg.extraConfig; + source = let + configFile = tomlFormat.generate "config.toml" cfg.settings; + extraConfigFile = + pkgs.writeText "extra-config.toml" ("\n" + cfg.extraConfig); + in pkgs.runCommand "helix-config.toml" { } '' + cat ${configFile} ${extraConfigFile} >> $out + ''; }; "helix/languages.toml" = mkIf (cfg.languages != { }) { source = tomlFormat.generate "helix-languages-config" cfg.languages; From 26ccff08df360afd888b08633a5dddbb99f04d8f Mon Sep 17 00:00:00 2001 From: Dominic Meyer <103406971+dominicmeyer@users.noreply.github.com> Date: Fri, 28 Mar 2025 05:32:30 +0100 Subject: [PATCH 17/18] thunderbird: set additional gmail smtpserver settings (#6713) To resolve issues when using gmail with thunderbird, added default smtpserver authMethod of oauth --- modules/programs/thunderbird.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/programs/thunderbird.nix b/modules/programs/thunderbird.nix index 9e869025f..d567ab44f 100644 --- a/modules/programs/thunderbird.nix +++ b/modules/programs/thunderbird.nix @@ -387,6 +387,8 @@ in { attrsOf (submodule ({ config, ... }: { config.thunderbird = { settings = lib.mkIf (config.flavor == "gmail.com") (id: { + "mail.smtpserver.smtp_${id}.authMethod" = + mkOptionDefault 10; # 10 = OAuth2 "mail.server.server_${id}.authMethod" = mkOptionDefault 10; # 10 = OAuth2 "mail.server.server_${id}.socketType" = From 1efd2503172016a6742c87b47b43ca2c8145607d Mon Sep 17 00:00:00 2001 From: home-manager-bot <106474382+home-manager-bot@users.noreply.github.com> Date: Fri, 28 Mar 2025 05:36:12 +0100 Subject: [PATCH 18/18] flake.lock: Update (#6708) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Flake lock file updates: • Updated input 'nixpkgs': 'github:NixOS/nixpkgs/a84ebe20c6bc2ecbcfb000a50776219f48d134cc?narHash=sha256-mNqIplmEohk5jRkqYqG19GA8MbQ/D4gQSK0Mu4LvfRQ%3D' (2025-03-19) → 'github:NixOS/nixpkgs/1e5b653dff12029333a6546c11e108ede13052eb?narHash=sha256-G5n%2BFOXLXcRx%2B3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w%3D' (2025-03-22) Co-authored-by: github-actions[bot] --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 62e06142f..c0e3b5c70 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1742422364, - "narHash": "sha256-mNqIplmEohk5jRkqYqG19GA8MbQ/D4gQSK0Mu4LvfRQ=", + "lastModified": 1742669843, + "narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a84ebe20c6bc2ecbcfb000a50776219f48d134cc", + "rev": "1e5b653dff12029333a6546c11e108ede13052eb", "type": "github" }, "original": {