diff --git a/.github/labeler.yml b/.github/labeler.yml index 2e8d57b9e..395e1f68d 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -292,6 +292,7 @@ - modules/programs/pylint.nix - modules/programs/mise.nix - modules/programs/nix-index.nix + - modules/programs/nix-init.nix - modules/programs/nh.nix - modules/programs/bacon.nix - modules/programs/sqls.nix diff --git a/modules/misc/news/2025-04-20_18-44-29.nix b/modules/misc/news/2025-04-20_18-44-29.nix new file mode 100644 index 000000000..8f9ce4286 --- /dev/null +++ b/modules/misc/news/2025-04-20_18-44-29.nix @@ -0,0 +1,9 @@ +{ + time = "2025-04-21T01:44:29+00:00"; + condition = true; + message = '' + A new module is available: 'programs.nix-init'. + + nix-init generate Nix packages from URLs. + ''; +} diff --git a/modules/modules.nix b/modules/modules.nix index 0e55e5eed..33aa9562f 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -198,6 +198,7 @@ let ./programs/nh.nix ./programs/nheko.nix ./programs/nix-index.nix + ./programs/nix-init.nix ./programs/nix-your-shell.nix ./programs/nnn.nix ./programs/noti.nix diff --git a/modules/programs/nix-init.nix b/modules/programs/nix-init.nix new file mode 100644 index 000000000..08f112355 --- /dev/null +++ b/modules/programs/nix-init.nix @@ -0,0 +1,60 @@ +{ + lib, + pkgs, + config, + ... +}: +let + tomlFormat = pkgs.formats.toml { }; + cfg = config.programs.nix-init; +in +{ + meta.maintainers = [ lib.maintainers.awwpotato ]; + + options.programs.nix-init = { + enable = lib.mkEnableOption "nix-init"; + package = lib.mkPackageOption pkgs "nix-init" { nullable = true; }; + settings = lib.mkOption { + type = tomlFormat.type; + default = { }; + example = lib.literalExpression '' + { + maintainers = [ + "figsoda" + ]; + nixpkgs = ""; + commit = true; + access-tokens = { + github.com = "ghp_blahblahblah..."; + gitlab.com = { + command = [ + "secret-tool" + "or" + "whatever" + "you" + "use" + ]; + }; + gitlab.gnome.org = { + file = "/path/to/api/token"; + }; + }; + } + ''; + description = '' + Configuration written to + {file}`$XDG_CONFIG_HOME/nix-init/config.toml`. + See for the full list + of options. + ''; + }; + }; + + config = lib.mkIf cfg.enable { + home.packages = lib.mkIf (cfg.package != null) [ cfg.package ]; + + xdg.configFile."nix-init/config.toml" = lib.mkIf (cfg.settings != { }) { + source = tomlFormat.generate "config.toml" cfg.settings; + }; + }; +} diff --git a/tests/default.nix b/tests/default.nix index def1c3f34..eb76a54df 100644 --- a/tests/default.nix +++ b/tests/default.nix @@ -418,6 +418,7 @@ import nmtSrc { ./modules/programs/newsboat ./modules/programs/nheko ./modules/programs/nix-index + ./modules/programs/nix-init ./modules/programs/nix-your-shell ./modules/programs/nnn ./modules/programs/nushell diff --git a/tests/modules/programs/nix-init/basic-config.nix b/tests/modules/programs/nix-init/basic-config.nix new file mode 100644 index 000000000..434fdd882 --- /dev/null +++ b/tests/modules/programs/nix-init/basic-config.nix @@ -0,0 +1,40 @@ +{ pkgs, ... }: +{ + programs.nix-init = { + enable = true; + settings = { + maintainers = [ "figsoda" ]; + nixpkgs = ""; + commit = true; + access-tokens = { + "github.com" = "ghp_blahblahblah..."; + "gitlab.com".command = [ + "secret-tool" + "or" + "whatever" + "you" + "use" + ]; + "gitlab.gnome.org".file = "/path/to/api/token"; + }; + }; + }; + + nmt.script = '' + assertFileExists home-files/.config/nix-init/config.toml + assertFileContent home-files/.config/nix-init/config.toml \ + ${pkgs.writeText "settings-expected" '' + commit = true + maintainers = ["figsoda"] + nixpkgs = "" + [access-tokens] + "github.com" = "ghp_blahblahblah..." + + [access-tokens."gitlab.com"] + command = ["secret-tool", "or", "whatever", "you", "use"] + + [access-tokens."gitlab.gnome.org"] + file = "/path/to/api/token" + ''} + ''; +} diff --git a/tests/modules/programs/nix-init/default.nix b/tests/modules/programs/nix-init/default.nix new file mode 100644 index 000000000..01e36984c --- /dev/null +++ b/tests/modules/programs/nix-init/default.nix @@ -0,0 +1,3 @@ +{ + nix-init-basic-config = ./basic-config.nix; +}