Refactor packages
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
12
hosts/common/configs/system/nix-update/default.nix
Normal file
12
hosts/common/configs/system/nix-update/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
nixpkgs.overlays = [
|
||||
(final: prev: {
|
||||
nix-update = prev.nix-update.overrideAttrs (oldAttrs: {
|
||||
patches = oldAttrs.patches or [ ] ++ [ ./source-attribute.patch ];
|
||||
});
|
||||
})
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [ nix-update ];
|
||||
}
|
127
hosts/common/configs/system/nix-update/source-attribute.patch
Normal file
127
hosts/common/configs/system/nix-update/source-attribute.patch
Normal file
@@ -0,0 +1,127 @@
|
||||
diff --git a/nix_update/__init__.py b/nix_update/__init__.py
|
||||
index 89bbe45..93f9322 100644
|
||||
--- a/nix_update/__init__.py
|
||||
+++ b/nix_update/__init__.py
|
||||
@@ -124,6 +124,12 @@ def parse_args(args: list[str]) -> Options:
|
||||
default=[],
|
||||
)
|
||||
|
||||
+ parser.add_argument(
|
||||
+ "--src-attr",
|
||||
+ help="Src attribute",
|
||||
+ default="src",
|
||||
+ )
|
||||
+
|
||||
a = parser.parse_args(args)
|
||||
extra_flags = ["--extra-experimental-features", "flakes nix-command"]
|
||||
if a.system:
|
||||
@@ -146,6 +152,7 @@ def parse_args(args: list[str]) -> Options:
|
||||
version=a.version,
|
||||
version_preference=VersionPreference.from_str(a.version),
|
||||
attribute=a.attribute,
|
||||
+ source_attribute=a.src_attr,
|
||||
test=a.test,
|
||||
version_regex=a.version_regex,
|
||||
review=a.review,
|
||||
diff --git a/nix_update/eval.py b/nix_update/eval.py
|
||||
index 1767056..f85ea69 100644
|
||||
--- a/nix_update/eval.py
|
||||
+++ b/nix_update/eval.py
|
||||
@@ -105,12 +105,19 @@ class Package:
|
||||
def eval_expression(
|
||||
escaped_import_path: str,
|
||||
attr: str,
|
||||
+ source_attr: str,
|
||||
flake: bool,
|
||||
system: str | None,
|
||||
override_filename: str | None,
|
||||
) -> str:
|
||||
system = f'"{system}"' if system else "builtins.currentSystem"
|
||||
|
||||
+ source_attrs = source_attr.rpartition(".")
|
||||
+ source_attr_last = source_attrs[-1] or source_attr
|
||||
+ source_attr_all_but_last = (
|
||||
+ f".{source_attrs[0]}" if source_attr_last != source_attr else ""
|
||||
+ )
|
||||
+
|
||||
if flake:
|
||||
sanitize_position = (
|
||||
f"""
|
||||
@@ -164,8 +171,8 @@ let
|
||||
raw_version_position
|
||||
else if pkg ? isPhpExtension then
|
||||
raw_version_position
|
||||
- else if (builtins.unsafeGetAttrPos "src" pkg) != null then
|
||||
- sanitizePosition (builtins.unsafeGetAttrPos "src" pkg)
|
||||
+ else if (builtins.unsafeGetAttrPos "{source_attr_last}" pkg) != null then
|
||||
+ sanitizePosition (builtins.unsafeGetAttrPos "{source_attr_last}" pkg{source_attr_all_but_last})
|
||||
else
|
||||
sanitizePosition (positionFromMeta pkg);
|
||||
in {{
|
||||
@@ -174,11 +181,11 @@ in {{
|
||||
inherit raw_version_position;
|
||||
filename = position.file;
|
||||
line = position.line;
|
||||
- urls = pkg.src.urls or null;
|
||||
- url = pkg.src.url or null;
|
||||
- rev = pkg.src.rev or null;
|
||||
- tag = pkg.src.tag or null;
|
||||
- hash = pkg.src.outputHash or null;
|
||||
+ urls = pkg.{source_attr}.urls or null;
|
||||
+ url = pkg.{source_attr}.url or null;
|
||||
+ rev = pkg.{source_attr}.rev or null;
|
||||
+ tag = pkg.{source_attr}.tag or null;
|
||||
+ hash = pkg.{source_attr}.outputHash or null;
|
||||
go_modules = pkg.goModules.outputHash or null;
|
||||
go_modules_old = pkg.go-modules.outputHash or null;
|
||||
cargo_deps = pkg.cargoDeps.outputHash or null;
|
||||
@@ -205,7 +212,7 @@ in {{
|
||||
mix_deps = pkg.mixFodDeps.outputHash or null;
|
||||
tests = builtins.attrNames (pkg.passthru.tests or {{}});
|
||||
has_update_script = {has_update_script};
|
||||
- src_homepage = pkg.src.meta.homepage or null;
|
||||
+ src_homepage = pkg.{source_attr}.meta.homepage or null;
|
||||
changelog = pkg.meta.changelog or null;
|
||||
maintainers = pkg.meta.maintainers or null;
|
||||
}}"""
|
||||
@@ -215,6 +222,7 @@ def eval_attr(opts: Options) -> Package:
|
||||
expr = eval_expression(
|
||||
opts.escaped_import_path,
|
||||
opts.escaped_attribute,
|
||||
+ opts.source_attribute,
|
||||
opts.flake,
|
||||
opts.system,
|
||||
opts.override_filename,
|
||||
diff --git a/nix_update/options.py b/nix_update/options.py
|
||||
index 2d07b77..ab5c305 100644
|
||||
--- a/nix_update/options.py
|
||||
+++ b/nix_update/options.py
|
||||
@@ -8,6 +8,7 @@ from .version.version import VersionPreference
|
||||
@dataclass
|
||||
class Options:
|
||||
attribute: str
|
||||
+ source_attribute: str = "src"
|
||||
flake: bool = False
|
||||
version: str = "stable"
|
||||
version_preference: VersionPreference = VersionPreference.STABLE
|
||||
@@ -33,4 +34,7 @@ class Options:
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
self.escaped_attribute = ".".join(map(json.dumps, self.attribute.split(".")))
|
||||
+ self.escaped_source_attribute = ".".join(
|
||||
+ map(json.dumps, self.source_attribute.split("."))
|
||||
+ )
|
||||
self.escaped_import_path = json.dumps(self.import_path)
|
||||
diff --git a/nix_update/update.py b/nix_update/update.py
|
||||
index 82b7bc5..464bf3d 100644
|
||||
--- a/nix_update/update.py
|
||||
+++ b/nix_update/update.py
|
||||
@@ -155,7 +155,7 @@ def git_prefetch(x: tuple[str, tuple[str, str]]) -> tuple[str, str]:
|
||||
|
||||
|
||||
def update_src_hash(opts: Options, filename: str, current_hash: str) -> None:
|
||||
- target_hash = nix_prefetch(opts, "src")
|
||||
+ target_hash = nix_prefetch(opts, opts.source_attribute)
|
||||
replace_hash(filename, current_hash, target_hash)
|
||||
|
||||
|
@@ -14,10 +14,13 @@
|
||||
];
|
||||
};
|
||||
|
||||
registry.self.flake = inputs.self;
|
||||
channel.enable = false;
|
||||
|
||||
gc.automatic = true;
|
||||
optimise.automatic = true;
|
||||
|
||||
registry.self.flake = inputs.self;
|
||||
|
||||
extraOptions = ''
|
||||
!include ${config.sops.secrets."nix/accessTokens/github".path}
|
||||
'';
|
||||
|
@@ -9,7 +9,12 @@
|
||||
|
||||
environment = {
|
||||
persistence."/persist"."/etc/ssh/ssh_host_ed25519_key" = { };
|
||||
systemPackages = with pkgs; [ sops ];
|
||||
|
||||
systemPackages = with pkgs; [
|
||||
sops
|
||||
age
|
||||
ssh-to-age
|
||||
];
|
||||
};
|
||||
|
||||
sops.age = {
|
||||
|
Reference in New Issue
Block a user