nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 config,
3 lib,
4 fetchFromGitHub,
5 fetchFromGitLab,
6 callPackage,
7}:
8
9let
10 buildFreshRssExtension = (callPackage ./freshrss-utils.nix { }).buildFreshRssExtension;
11
12 official_extensions_version = "unstable-2025-12-26";
13 official_extensions_src = fetchFromGitHub {
14 owner = "FreshRSS";
15 repo = "Extensions";
16 rev = "42c32bfd9af2d816933cf310e24d25888a8e167d";
17 hash = "sha256-El488QK3xWQM01GsuyBizud6VghXsRDqiOblnMfjVxE=";
18 };
19
20 baseExtensions =
21 _self:
22 lib.mapAttrs (_n: lib.recurseIntoAttrs) {
23 auto-ttl = buildFreshRssExtension rec {
24 FreshRssExtUniqueId = "AutoTTL";
25 pname = "auto-ttl";
26 version = "0.5.0";
27 src = fetchFromGitHub {
28 owner = "mgnsk";
29 repo = "FreshRSS-AutoTTL";
30 rev = "v${version}";
31 hash = "sha256-OiTiLZ2BjQD1W/BD8EkUt7WB2wOjL6GMGJ+APT4YpwE=";
32 };
33 meta = {
34 description = "FreshRSS extension for automatic feed refresh TTL based on the average frequency of entries";
35 homepage = "https://github.com/mgnsk/FreshRSS-AutoTTL";
36 license = lib.licenses.agpl3Only;
37 maintainers = [ lib.maintainers.stunkymonkey ];
38 };
39 };
40
41 demo = buildFreshRssExtension {
42 FreshRssExtUniqueId = "Demo";
43 pname = "demo";
44 version = "unstable-2023-12-22";
45 src = fetchFromGitHub {
46 owner = "FreshRSS";
47 repo = "xExtension-Demo";
48 rev = "8d60f71a2f0411f5fbbb1f88a57791cee0848f35";
49 hash = "sha256-5fe8TjefSiGMaeZkurxSJjX8qEEa1ArhJxDztp7ZNZc=";
50 };
51 meta = {
52 description = "FreshRSS Extension for the demo version";
53 homepage = "https://github.com/FreshRSS/xExtension-Demo";
54 license = lib.licenses.agpl3Only;
55 maintainers = [ lib.maintainers.stunkymonkey ];
56 };
57 };
58
59 reading-time = buildFreshRssExtension {
60 FreshRssExtUniqueId = "ReadingTime";
61 pname = "reading-time";
62 version = "1.5";
63 src = fetchFromGitLab {
64 domain = "framagit.org";
65 owner = "Lapineige";
66 repo = "FreshRSS_Extension-ReadingTime";
67 rev = "fb6e9e944ef6c5299fa56ffddbe04c41e5a34ebf";
68 hash = "sha256-C5cRfaphx4Qz2xg2z+v5qRji8WVSIpvzMbethTdSqsk=";
69 };
70 meta = {
71 description = "FreshRSS extension adding a reading time estimation next to each article";
72 homepage = "https://framagit.org/Lapineige/FreshRSS_Extension-ReadingTime";
73 license = lib.licenses.agpl3Only;
74 maintainers = [ lib.maintainers.stunkymonkey ];
75 };
76 };
77
78 reddit-image = buildFreshRssExtension rec {
79 FreshRssExtUniqueId = "RedditImage";
80 pname = "reddit-image";
81 version = "1.2.0";
82 src = fetchFromGitHub {
83 owner = "aledeg";
84 repo = "xExtension-RedditImage";
85 rev = "v${version}";
86 hash = "sha256-H/uxt441ygLL0RoUdtTn9Q6Q/Ois8RHlhF8eLpTza4Q=";
87 };
88 meta = {
89 description = "FreshRSS extension to process Reddit feeds";
90 homepage = "https://github.com/aledeg/xExtension-RedditImage";
91 license = lib.licenses.agpl3Only;
92 maintainers = [ lib.maintainers.stunkymonkey ];
93 };
94 };
95
96 title-wrap = buildFreshRssExtension {
97 FreshRssExtUniqueId = "TitleWrap";
98 pname = "title-wrap";
99 version = official_extensions_version;
100 src = official_extensions_src;
101 sourceRoot = "${official_extensions_src.name}/xExtension-TitleWrap";
102 meta = {
103 description = "FreshRSS extension instead of truncating the title is wrapped";
104 homepage = "https://github.com/FreshRSS/Extensions/tree/master/xExtension-TitleWrap";
105 license = lib.licenses.agpl3Only;
106 maintainers = [ lib.maintainers.stunkymonkey ];
107 };
108 };
109
110 unsafe-auto-login = buildFreshRssExtension {
111 FreshRssExtUniqueId = "UnsafeAutologin";
112 pname = "unsafe-auto-login";
113 version = official_extensions_version;
114 src = official_extensions_src;
115 sourceRoot = "${official_extensions_src.name}/xExtension-UnsafeAutologin";
116 meta = {
117 description = "FreshRSS extension to bring back unsafe autologin functionality.";
118 homepage = "https://github.com/FreshRSS/Extensions/tree/master/xExtension-UnsafeAutologin";
119 license = lib.licenses.agpl3Only;
120 maintainers = [ lib.maintainers.stunkymonkey ];
121 };
122 };
123
124 youtube = buildFreshRssExtension {
125 FreshRssExtUniqueId = "YouTube";
126 pname = "youtube";
127 version = official_extensions_version;
128 src = official_extensions_src;
129 sourceRoot = "${official_extensions_src.name}/xExtension-YouTube";
130 meta = {
131 description = "FreshRSS extension allows you to directly watch YouTube/PeerTube videos from within subscribed channel feeds";
132 homepage = "https://github.com/FreshRSS/Extensions/tree/master/xExtension-YouTube";
133 license = lib.licenses.agpl3Only;
134 maintainers = [ lib.maintainers.stunkymonkey ];
135 };
136 };
137 };
138
139 # add possibility to define aliases
140 aliases = super: {
141 # example: RedditImage = super.reddit-image;
142 };
143
144 # overlays will be applied left to right, overrides should come after aliases.
145 overlays = lib.optionals config.allowAliases [
146 (_self: super: lib.recursiveUpdate super (aliases super))
147 ];
148
149 toFix = lib.foldl' (lib.flip lib.extends) baseExtensions overlays;
150in
151(lib.fix toFix)
152// {
153 inherit buildFreshRssExtension;
154}