Compare commits
35 Commits
wip/overla
...
staging/ma
Author | SHA1 | Date | |
---|---|---|---|
638420ea0d | |||
d55dd5ace6 | |||
45695aed6b | |||
d6e79c4d07 | |||
380ceaf625 | |||
942c581107 | |||
b6d94c2e08 | |||
fd7acc8fc8 | |||
db670fc172 | |||
6438971c8c | |||
e439d398b6 | |||
0f25cba331 | |||
39959e912d | |||
62e649743d | |||
b1741a18e1 | |||
a829a8e027 | |||
d742ae83bd | |||
110ab1a794 | |||
7d5a81e542 | |||
1af2a3f329 | |||
3fa9e910a9 | |||
6befc40700 | |||
29db2d8dc5 | |||
36d8052982 | |||
48115231a3 | |||
8b56ddd1ca | |||
c1457f5bfb | |||
7dfaf77a71 | |||
72dc7029e6 | |||
95f3215b00 | |||
baac8df8c2 | |||
dc6a08a12b | |||
2413e2eb5f | |||
7327128493 | |||
ed8059f4c4 |
20
flake.lock
generated
20
flake.lock
generated
@@ -60,7 +60,7 @@
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1,
|
||||
"narHash": "sha256-5eJxyBRYQCoRt92ZFUOdT237Z0VscuNRd0pktDYWJYE=",
|
||||
"narHash": "sha256-FaeqnQPm3MIXkQsNsGTB4A9lN82YKpLkmVHgdJyJNGg=",
|
||||
"path": "nixpatches",
|
||||
"type": "path"
|
||||
},
|
||||
@@ -71,11 +71,11 @@
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1673163619,
|
||||
"narHash": "sha256-B33PFBL64ZgTWgMnhFL3jgheAN/DjHPsZ1Ih3z0VE5I=",
|
||||
"lastModified": 1673527292,
|
||||
"narHash": "sha256-903EpRSDCfUvic7Hsiqwy+h7zlMTLAUbCXkEGGriCfM=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "8c54d842d9544361aac5f5b212ba04e4089e8efe",
|
||||
"rev": "6a3f9996408c970b99b8b992b11bb249d1455b62",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -102,11 +102,11 @@
|
||||
},
|
||||
"nixpkgs-unpatched": {
|
||||
"locked": {
|
||||
"lastModified": 1673226411,
|
||||
"narHash": "sha256-b6cGb5Ln7Zy80YO66+cbTyGdjZKtkoqB/iIIhDX9gRA=",
|
||||
"lastModified": 1673450908,
|
||||
"narHash": "sha256-b8em+kwrNtnB7gR8SyVf6WuTyQ+6tHS6dzt9D9wgKF0=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "aa1d74709f5dac623adb4d48fdfb27cc2c92a4d4",
|
||||
"rev": "6c8644fc37b6e141cbfa6c7dc8d98846c4ff0c2e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -134,11 +134,11 @@
|
||||
"nixpkgs-stable": "nixpkgs-stable_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1673147300,
|
||||
"narHash": "sha256-gR9OEfTzWfL6vG0qkbn1TlBAOlg4LuW8xK/u0V41Ihc=",
|
||||
"lastModified": 1673481602,
|
||||
"narHash": "sha256-P80X38fOM2MtoYdgkyuksGOQPDhIhNJW2W2jMeMIZzE=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "2253120d2a6147e57bafb5c689e086221df8032f",
|
||||
"rev": "32187b33ac6ec9b628dcd08dd941a715e6241dda",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
@@ -43,10 +43,12 @@
|
||||
|
||||
evalHost = { name, local, target }:
|
||||
let
|
||||
# XXX: we'd prefer to use `nixosSystem = (nixpkgsCompiledBy local).nixos`
|
||||
# XXX: we'd prefer to use `nixosSystem = (nixpkgsCompiledBy target).nixos`
|
||||
# but it doesn't propagate config to the underlying pkgs, meaning it doesn't let you use
|
||||
# non-free packages even after setting nixpkgs.allowUnfree.
|
||||
nixosSystem = import ((nixpkgsCompiledBy local).path + "/nixos/lib/eval-config.nix");
|
||||
# XXX: patch using the target -- not local -- otherwise the target will
|
||||
# need to emulate the host in order to rebuild!
|
||||
nixosSystem = import ((nixpkgsCompiledBy target).path + "/nixos/lib/eval-config.nix");
|
||||
in
|
||||
(nixosSystem {
|
||||
# we use pkgs built for and *by* the target, i.e. emulation, by default.
|
||||
@@ -96,7 +98,7 @@
|
||||
|
||||
overlays = rec {
|
||||
default = pkgs;
|
||||
pkgs = import ./pkgs/overlay.nix;
|
||||
pkgs = import ./overlays/pkgs.nix;
|
||||
passthru =
|
||||
let
|
||||
stable = next: prev: {
|
||||
|
@@ -1,5 +1,12 @@
|
||||
{ ... }:
|
||||
{ config, ... }:
|
||||
|
||||
let
|
||||
mkCrossFrom = localSystem: pkgs: import pkgs.path {
|
||||
inherit localSystem;
|
||||
crossSystem = pkgs.stdenv.hostPlatform.system;
|
||||
inherit (config.nixpkgs) config overlays;
|
||||
};
|
||||
in
|
||||
{
|
||||
# the configuration of which specific package set `pkgs.cross` refers to happens elsewhere;
|
||||
# here we just define them all.
|
||||
@@ -8,8 +15,8 @@
|
||||
# non-emulated packages build *from* local *for* target.
|
||||
# for large packages like the linux kernel which are expensive to build under emulation,
|
||||
# the config can explicitly pull such packages from `pkgs.cross` to do more efficient cross-compilation.
|
||||
crossFrom."x86_64-linux" = (prev.forceSystem "x86_64-linux" null).appendOverlays next.overlays;
|
||||
crossFrom."aarch64-linux" = (prev.forceSystem "aarch64-linux" null).appendOverlays next.overlays;
|
||||
crossFrom."x86_64-linux" = mkCrossFrom "x86_64-linux" next;
|
||||
crossFrom."aarch64-linux" = mkCrossFrom "aarch64-linux" next;
|
||||
})
|
||||
];
|
||||
}
|
||||
|
@@ -39,6 +39,11 @@
|
||||
nix.extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
'';
|
||||
# allow `nix-shell` (and probably nix-index?) to locate our patched and custom packages
|
||||
nix.nixPath = [
|
||||
"nixpkgs=${pkgs.path}"
|
||||
"nixpkgs-overlays=${../..}/overlays"
|
||||
];
|
||||
|
||||
# TODO: move this into home-manager?
|
||||
fonts = {
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{ ... }:
|
||||
{ lib, sane-data, ... }:
|
||||
let
|
||||
hourly = { freq = "hourly"; };
|
||||
daily = { freq = "daily"; };
|
||||
@@ -12,6 +12,8 @@ let
|
||||
tech = { cat = "tech"; };
|
||||
uncat = { cat = "uncat"; };
|
||||
|
||||
text = { format = "text"; };
|
||||
|
||||
mkRss = format: url: { inherit url format; } // uncat // infrequent;
|
||||
# format-specific helpers
|
||||
mkText = mkRss "text";
|
||||
@@ -21,48 +23,74 @@ let
|
||||
# host-specific helpers
|
||||
mkSubstack = subdomain: { substack = subdomain; };
|
||||
|
||||
fromDb = name:
|
||||
let
|
||||
raw = sane-data.feeds."${name}";
|
||||
in {
|
||||
url = raw.url;
|
||||
# not sure the exact mapping with velocity here: entries per day?
|
||||
freq = lib.mkDefault (
|
||||
if raw.velocity or 0 > 2 then
|
||||
"hourly"
|
||||
else if raw.velocity or 0 > 0.5 then
|
||||
"daily"
|
||||
else if raw.velocity or 0 > 0.1 then
|
||||
"weekly"
|
||||
else
|
||||
"infrequent"
|
||||
);
|
||||
} // lib.optionalAttrs (raw.is_podcast or false) {
|
||||
format = "podcast";
|
||||
} // lib.optionalAttrs (raw.title or "" != "") {
|
||||
title = lib.mkDefault raw.title;
|
||||
};
|
||||
|
||||
podcasts = [
|
||||
(mkPod "https://lexfridman.com/feed/podcast/" // rat // weekly)
|
||||
(fromDb "lexfridman.com/podcast" // rat)
|
||||
# (mkPod "https://lexfridman.com/feed/podcast/" // rat // weekly)
|
||||
## Astral Codex Ten
|
||||
(mkPod "http://feeds.libsyn.com/108018/rss" // rat // daily)
|
||||
(fromDb "sscpodcast.libsyn.com" // rat)
|
||||
## Econ Talk
|
||||
(mkPod "https://feeds.simplecast.com/wgl4xEgL" // rat // daily)
|
||||
## Cory Doctorow
|
||||
(mkPod "https://feeds.feedburner.com/doctorow_podcast" // pol // infrequent)
|
||||
(fromDb "feeds.simplecast.com/wgl4xEgL" // rat)
|
||||
## Cory Doctorow -- both podcast & text entries
|
||||
(fromDb "craphound.com" // pol)
|
||||
(mkPod "https://congressionaldish.libsyn.com/rss" // pol // infrequent)
|
||||
## Civboot
|
||||
(mkPod "https://anchor.fm/s/34c7232c/podcast/rss" // tech // infrequent)
|
||||
(mkPod "https://feeds.feedburner.com/80000HoursPodcast" // rat // weekly)
|
||||
(mkPod "https://allinchamathjason.libsyn.com/rss" // pol // weekly)
|
||||
(mkPod "https://acquired.libsyn.com/rss" // tech // infrequent)
|
||||
(mkPod "https://rss.acast.com/deconstructed" // pol // infrequent)
|
||||
## Civboot -- https://anchor.fm/civboot
|
||||
(fromDb "anchor.fm/s/34c7232c/podcast/rss" // tech)
|
||||
(fromDb "feeds.feedburner.com/80000HoursPodcast" // rat)
|
||||
(fromDb "allinchamathjason.libsyn.com" // pol)
|
||||
(fromDb "acquired.libsyn.com" // tech)
|
||||
# The Intercept - Deconstructed; also available: <rss.acast.com/deconstructed>
|
||||
(fromDb "rss.prod.firstlook.media/deconstructed/podcast.rss" // pol)
|
||||
## The Daily
|
||||
(mkPod "https://feeds.simplecast.com/54nAGcIl" // pol // daily)
|
||||
(mkPod "https://rss.acast.com/intercepted-with-jeremy-scahill" // pol // weekly)
|
||||
(mkPod "https://podcast.posttv.com/itunes/post-reports.xml" // pol // weekly)
|
||||
# The Intercept - Intercepted; also available: <https://rss.acast.com/intercepted-with-jeremy-scahill>
|
||||
(fromDb "rss.prod.firstlook.media/intercepted/podcast.rss" // pol)
|
||||
(fromDb "podcast.posttv.com/itunes/post-reports.xml" // pol)
|
||||
## Eric Weinstein
|
||||
(mkPod "https://rss.art19.com/the-portal" // rat // infrequent)
|
||||
(mkPod "https://feeds.megaphone.fm/darknetdiaries" // tech // infrequent)
|
||||
(mkPod "http://feeds.wnyc.org/radiolab" // pol // infrequent)
|
||||
(mkPod "https://wakingup.libsyn.com/rss" // pol // infrequent)
|
||||
## 99% Invisible
|
||||
(mkPod "https://feeds.simplecast.com/BqbsxVfO" // pol // infrequent)
|
||||
(mkPod "https://rss.acast.com/ft-tech-tonic" // tech // infrequent)
|
||||
(mkPod "https://feeds.feedburner.com/dancarlin/history?format=xml" // rat // infrequent)
|
||||
## 60 minutes (NB: this features more than *just* audio?)
|
||||
(mkPod "https://www.cbsnews.com/latest/rss/60-minutes" // pol // infrequent)
|
||||
(fromDb "rss.art19.com/the-portal" // rat)
|
||||
(fromDb "darknetdiaries.com" // tech)
|
||||
## Radiolab -- also available here, but ONLY OVER HTTP: <http://feeds.wnyc.org/radiolab>
|
||||
(fromDb "feeds.feedburner.com/radiolab" // pol)
|
||||
## Sam Harris
|
||||
(fromDb "wakingup.libsyn.com" // pol)
|
||||
## 99% Invisible -- also available here: <https://feeds.simplecast.com/BqbsxVfO>
|
||||
(fromDb "feeds.99percentinvisible.org/99percentinvisible" // pol)
|
||||
(fromDb "rss.acast.com/ft-tech-tonic" // tech)
|
||||
(fromDb "feeds.feedburner.com/dancarlin/history" // rat)
|
||||
(fromDb "rss.art19.com/60-minutes" // pol)
|
||||
## The Verge - Decoder
|
||||
(mkPod "https://feeds.megaphone.fm/recodedecode" // tech // weekly)
|
||||
(fromDb "feeds.megaphone.fm/recodedecode" // tech)
|
||||
## Matrix (chat) Live
|
||||
(mkPod "https://feed.podbean.com/matrixlive/feed.xml" // tech // weekly)
|
||||
## Michael Malice - Your Welcome
|
||||
(mkPod "https://www.podcastone.com/podcast?categoryID2=2232" // pol // weekly)
|
||||
(fromDb "feed.podbean.com/matrixlive/feed.xml" // tech)
|
||||
## Michael Malice - Your Welcome -- also available here: <https://origin.podcastone.com/podcast?categoryID2=2232>
|
||||
(fromDb "rss.art19.com/your-welcome" // pol)
|
||||
];
|
||||
|
||||
texts = [
|
||||
# AGGREGATORS (> 1 post/day)
|
||||
(mkText "https://www.lesswrong.com/feed.xml" // rat // hourly)
|
||||
(mkText "http://www.econlib.org/index.xml" // pol // hourly)
|
||||
(fromDb "lesswrong.com" // rat)
|
||||
(fromDb "econlib.org" // pol)
|
||||
|
||||
# AGGREGATORS (< 1 post/day)
|
||||
(mkText "https://palladiummag.com/feed" // uncat // weekly)
|
||||
@@ -75,10 +103,10 @@ let
|
||||
(mkText "https://www.rifters.com/crawl/?feed=rss2" // uncat // weekly)
|
||||
|
||||
# DEVELOPERS
|
||||
(mkText "https://uninsane.org/atom.xml" // infrequent // tech)
|
||||
(mkText "https://mg.lol/blog/rss/" // infrequent // tech)
|
||||
(fromDb "uninsane.org" // tech)
|
||||
(fromDb "mg.lol" // tech)
|
||||
## Ken Shirriff
|
||||
(mkText "https://www.righto.com/feeds/posts/default" // tech // infrequent)
|
||||
(fromDb "righto.com" // tech)
|
||||
## Vitalik Buterin
|
||||
(mkText "https://vitalik.ca/feed.xml" // tech // infrequent)
|
||||
## ian (Sanctuary)
|
||||
@@ -94,7 +122,7 @@ let
|
||||
(mkText "https://pomeroyb.com/feed.xml" // tech // infrequent)
|
||||
|
||||
# (TECH; POL) COMMENTATORS
|
||||
(mkSubstack "edwardsnowden" // pol // infrequent)
|
||||
(fromDb "edwardsnowden.substack.com" // pol // text)
|
||||
(mkText "http://benjaminrosshoffman.com/feed" // pol // weekly)
|
||||
## Ben Thompson
|
||||
(mkText "https://www.stratechery.com/rss" // pol // weekly)
|
||||
@@ -148,4 +176,11 @@ let
|
||||
in
|
||||
{
|
||||
sane.feeds = texts ++ images ++ podcasts;
|
||||
|
||||
assertions = builtins.map
|
||||
(p: {
|
||||
assertion = p.format or "unknown" == "podcast";
|
||||
message = ''${p.url} is not a podcast: ${p.format or "unknown"}'';
|
||||
})
|
||||
podcasts;
|
||||
}
|
||||
|
@@ -125,6 +125,9 @@ in
|
||||
# aarch64-unknown-linux-gnu-gcc: error: unrecognized command line option '-mfpu=neon'
|
||||
# make[3]: *** [../scripts/Makefile.build:289: drivers/video/fbdev/sun5i-eink-neon.o] Error 1
|
||||
FB_SUN5I_EINK = no;
|
||||
# used by the pinephone pro, but fails to compile with:
|
||||
# ../drivers/media/i2c/ov8858.c:1834:27: error: implicit declaration of function 'compat_ptr'
|
||||
VIDEO_OV8858 = no;
|
||||
})
|
||||
))
|
||||
];
|
||||
|
21
modules/data/feeds/sources/acquired.libsyn.com/default.json
Normal file
21
modules/data/feeds/sources/acquired.libsyn.com/default.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 1369733,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "Every company has a story. Learn the playbooks that built the world’s greatest companies — and how you can apply them as a founder, operator, or investor.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 173,
|
||||
"last_seen": "2023-01-11T15:26:37.515527+00:00",
|
||||
"last_updated": "2022-12-19T07:22:28+00:00",
|
||||
"score": 18,
|
||||
"self_url": "https://acquired.libsyn.com/rss",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "Acquired",
|
||||
"url": "https://acquired.libsyn.com/rss",
|
||||
"velocity": 0.066,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 1030773,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "Industry veterans, degenerate gamblers & besties Chamath Palihapitiya, Jason Calacanis, David Sacks & David Friedberg cover all things economic, tech, political, social & poker.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 124,
|
||||
"last_seen": "2023-01-11T12:44:53.606606+00:00",
|
||||
"last_updated": "2023-01-06T10:51:00+00:00",
|
||||
"score": 18,
|
||||
"self_url": "https://allinchamathjason.libsyn.com/rss",
|
||||
"site_name": "All-In with Chamath, Jason, Sacks & Friedberg",
|
||||
"site_url": "https://allinchamathjason.libsyn.com",
|
||||
"title": "All-In with Chamath, Jason, Sacks & Friedberg",
|
||||
"url": "https://allinchamathjason.libsyn.com/rss",
|
||||
"velocity": 0.12,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 13316,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "A podcast around the idea of creating a Civilizational Bootstrapper, a set of tools and technology that can be used to replicate the foundations of civilization along with itself.",
|
||||
"favicon": null,
|
||||
"hubs": [
|
||||
"https://pubsubhubbub.appspot.com/"
|
||||
],
|
||||
"is_podcast": true,
|
||||
"is_push": true,
|
||||
"item_count": 6,
|
||||
"last_seen": "2023-01-11T16:11:01.720399+00:00",
|
||||
"last_updated": "2022-04-13T19:37:17+00:00",
|
||||
"score": 22,
|
||||
"self_url": "https://anchor.fm/s/34c7232c/podcast/rss",
|
||||
"site_name": "Anchor",
|
||||
"site_url": "https://anchor.fm",
|
||||
"title": "Civboot",
|
||||
"url": "https://anchor.fm/s/34c7232c/podcast/rss",
|
||||
"velocity": 0.009,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 12669,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "The territory is a map of the map.",
|
||||
"favicon": "http://benjaminrosshoffman.com/favicon.ico",
|
||||
"hubs": [],
|
||||
"is_podcast": false,
|
||||
"is_push": false,
|
||||
"item_count": 10,
|
||||
"last_seen": "2023-01-11T12:32:52.176940+00:00",
|
||||
"last_updated": "2023-01-09T04:33:31+00:00",
|
||||
"score": -15,
|
||||
"self_url": "http://benjaminrosshoffman.com/comments/feed/",
|
||||
"site_name": "Compass Rose",
|
||||
"site_url": "http://benjaminrosshoffman.com",
|
||||
"title": "Comments for Compass Rose",
|
||||
"url": "http://benjaminrosshoffman.com/comments/feed/",
|
||||
"velocity": 0.312,
|
||||
"version": "rss20"
|
||||
}
|
21
modules/data/feeds/sources/craphound.com/default.json
Normal file
21
modules/data/feeds/sources/craphound.com/default.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 56666,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "Cory Doctorow's Literary Works",
|
||||
"favicon": "https://craphound.com/favicon.ico",
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 20,
|
||||
"last_seen": "2023-01-11T12:55:10.545856+00:00",
|
||||
"last_updated": "2022-12-12T14:46:35+00:00",
|
||||
"score": 12,
|
||||
"self_url": "https://craphound.com/feed/",
|
||||
"site_name": "Cory Doctorow's craphound.com | Cory Doctorow's Literary Works",
|
||||
"site_url": "https://craphound.com",
|
||||
"title": "Cory Doctorow's craphound.com",
|
||||
"url": "https://craphound.com/feed/",
|
||||
"velocity": 0.069,
|
||||
"version": "rss20"
|
||||
}
|
21
modules/data/feeds/sources/darknetdiaries.com/default.json
Normal file
21
modules/data/feeds/sources/darknetdiaries.com/default.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 227480,
|
||||
"content_type": "application/xml; charset=utf-8",
|
||||
"description": "True stories from the dark side of the Internet",
|
||||
"favicon": "https://darknetdiaries.com/imgs/favicon.png",
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 131,
|
||||
"last_seen": "2023-01-11T14:49:53.136566+00:00",
|
||||
"last_updated": "2022-12-27T08:00:00+00:00",
|
||||
"score": 20,
|
||||
"self_url": "https://darknetdiaries.com/feedfree.xml",
|
||||
"site_name": "Darknet Diaries – True stories from the dark side of the Internet.",
|
||||
"site_url": "https://darknetdiaries.com",
|
||||
"title": "Darknet Diaries (ad free)",
|
||||
"url": "https://darknetdiaries.com/feedfree.xml",
|
||||
"velocity": 0.067,
|
||||
"version": "rss20"
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 27184,
|
||||
"content_length": 66775,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "The Library of Economics and Liberty",
|
||||
"favicon": null,
|
||||
@@ -9,13 +9,13 @@
|
||||
"is_push": false,
|
||||
"item_count": 10,
|
||||
"last_seen": "2023-01-11T10:46:38.526754+00:00",
|
||||
"last_updated": "2023-01-09T11:30:25+00:00",
|
||||
"score": -18,
|
||||
"self_url": "http://www.econtalk.org/feed/",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "EconTalk Podcast – Econlib",
|
||||
"url": "http://www.econtalk.org/feed/",
|
||||
"velocity": 0.143,
|
||||
"last_updated": "2023-01-10T05:21:31+00:00",
|
||||
"score": 14,
|
||||
"self_url": "https://www.econlib.org/feed/",
|
||||
"site_name": "Econlib",
|
||||
"site_url": "https://www.econlib.org",
|
||||
"title": "Econlib",
|
||||
"url": "https://www.econlib.org/feed/",
|
||||
"velocity": 2.549,
|
||||
"version": "rss20"
|
||||
}
|
||||
|
21
modules/data/feeds/sources/econtalk.org/default.json
Normal file
21
modules/data/feeds/sources/econtalk.org/default.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 27185,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "The Library of Economics and Liberty",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": false,
|
||||
"is_push": false,
|
||||
"item_count": 10,
|
||||
"last_seen": "2023-01-11T13:05:47.318206+00:00",
|
||||
"last_updated": "2023-01-09T11:30:25+00:00",
|
||||
"score": 14,
|
||||
"self_url": "https://www.econtalk.org/feed/",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "EconTalk Podcast – Econlib",
|
||||
"url": "https://www.econtalk.org/feed",
|
||||
"velocity": 0.143,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 429348,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "The world's most famous whistleblower writes from exile on the intersection of technology, humanity, and power.",
|
||||
"favicon": "https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2a7d3aa2-3c2f-4196-ab7c-31541be1272e/favicon.ico",
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 16,
|
||||
"last_seen": "2023-01-11T12:32:02.320483+00:00",
|
||||
"last_updated": "2022-09-20T13:03:59+00:00",
|
||||
"score": 14,
|
||||
"self_url": "https://edwardsnowden.substack.com/feed",
|
||||
"site_name": "Continuing Ed — with Edward Snowden",
|
||||
"site_url": "https://edwardsnowden.substack.com",
|
||||
"title": "Continuing Ed — with Edward Snowden",
|
||||
"url": "https://edwardsnowden.substack.com/feed",
|
||||
"velocity": 0.032,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 281377,
|
||||
"content_type": "text/xml; charset=utf-8",
|
||||
"description": "Matrix Live, now as an audio podcast",
|
||||
"favicon": "https://feed.podbean.com/favicon.ico",
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 100,
|
||||
"last_seen": "2023-01-11T15:54:24.440541+00:00",
|
||||
"last_updated": "2023-01-06T16:45:00+00:00",
|
||||
"score": 18,
|
||||
"self_url": "https://feed.podbean.com/matrixlive/feed.xml",
|
||||
"site_name": null,
|
||||
"site_url": "https://feed.podbean.com",
|
||||
"title": "Matrix Live",
|
||||
"url": "https://feed.podbean.com/matrixlive/feed.xml",
|
||||
"velocity": 0.12,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 1600578,
|
||||
"content_type": "application/xml; charset=utf-8",
|
||||
"description": "Design is everywhere in our lives, perhaps most importantly in the places where we've just stopped noticing. 99% Invisible is a weekly exploration of the process and power of design and architecture. From award winning producer Roman Mars. Learn more at 99percentinvisible.org.",
|
||||
"favicon": null,
|
||||
"hubs": [
|
||||
"https://simplecast.superfeedr.com/"
|
||||
],
|
||||
"is_podcast": true,
|
||||
"is_push": true,
|
||||
"item_count": 577,
|
||||
"last_seen": "2023-01-11T15:25:01.536556+00:00",
|
||||
"last_updated": "2023-01-10T23:46:05+00:00",
|
||||
"score": 4,
|
||||
"self_url": "https://feeds.simplecast.com/BqbsxVfO",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "99% Invisible",
|
||||
"url": "https://feeds.simplecast.com/BqbsxVfO",
|
||||
"velocity": 0.128,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 1505641,
|
||||
"content_type": "text/xml; charset=utf-8",
|
||||
"description": "<p>Unusually in-depth conversations about the world's most pressing problems and what you can do to solve them.<br /></p>",
|
||||
"favicon": null,
|
||||
"hubs": [
|
||||
"https://pubsubhubbub.appspot.com/"
|
||||
],
|
||||
"is_podcast": true,
|
||||
"is_push": true,
|
||||
"item_count": 181,
|
||||
"last_seen": "2023-01-11T13:29:43.501516+00:00",
|
||||
"last_updated": "2023-01-09T22:57:00+00:00",
|
||||
"score": 14,
|
||||
"self_url": "https://feeds.backtracks.fm/feeds/80000hours/80000-hours-podcast-with-rob-wiblin/feed.xml",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "80,000 Hours Podcast with Rob Wiblin",
|
||||
"url": "https://feeds.feedburner.com/80000HoursPodcast",
|
||||
"velocity": 0.087,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 23712,
|
||||
"content_type": "text/xml; charset=utf-8",
|
||||
"description": "This isn't academic history (and Carlin isn't a historian) but the podcast's unique blend of high drama, masterful narration and Twilight Zone-style twists has entertained millions of listeners.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 13,
|
||||
"last_seen": "2023-01-11T15:05:34.359948+00:00",
|
||||
"last_updated": "2022-03-06T19:08:44+00:00",
|
||||
"score": 2,
|
||||
"self_url": "https://feeds.feedburner.com/dancarlin/history?format=xml",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "Dan Carlin's Hardcore History",
|
||||
"url": "https://feeds.feedburner.com/dancarlin/history",
|
||||
"velocity": 0.005,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 62633,
|
||||
"content_type": "text/xml; charset=utf-8",
|
||||
"description": "Articles, speeches, stories and novels by an award-winning science fiction writer, read aloud in small regular chunks",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 20,
|
||||
"last_seen": "2023-01-11T12:57:50.103797+00:00",
|
||||
"last_updated": "2022-12-12T14:46:35+00:00",
|
||||
"score": 4,
|
||||
"self_url": "https://craphound.com/category/podcast/feed/",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "Podcast – Cory Doctorow's craphound.com",
|
||||
"url": "https://feeds.feedburner.com/doctorow_podcast",
|
||||
"velocity": 0.068,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 1315558,
|
||||
"content_type": "text/xml; charset=utf-8",
|
||||
"description": "Radiolab",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 150,
|
||||
"last_seen": "2023-01-11T15:01:17.273650+00:00",
|
||||
"last_updated": "2023-01-06T15:00:00+00:00",
|
||||
"score": 4,
|
||||
"self_url": "https://www.wnycstudios.org/feeds/series/podcasts",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "Radiolab",
|
||||
"url": "https://feeds.feedburner.com/radiolab",
|
||||
"velocity": 0.139,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 2976783,
|
||||
"content_type": "application/xml; charset=utf-8",
|
||||
"description": "A business show about big ideas — and other problems.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 660,
|
||||
"last_seen": "2023-01-11T15:51:13.652417+00:00",
|
||||
"last_updated": "2023-01-10T10:00:00+00:00",
|
||||
"score": 14,
|
||||
"self_url": "https://feeds.megaphone.fm/recodedecode",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "Decoder with Nilay Patel",
|
||||
"url": "https://feeds.megaphone.fm/recodedecode",
|
||||
"velocity": 0.24,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 2940192,
|
||||
"content_type": "application/xml; charset=utf-8",
|
||||
"description": "EconTalk: Conversations for the Curious is an award-winning weekly podcast hosted by Russ Roberts of Shalem College in Jerusalem and Stanford's Hoover Institution. The eclectic guest list includes authors, doctors, psychologists, historians, philosophers, economists, and more. Learn how the health care system really works, the serenity that comes from humility, the challenge of interpreting data, how potato chips are made, what it's like to run an upscale Manhattan restaurant, what caused the 2008 financial crisis, the nature of consciousness, and more. EconTalk has been taking the Monday out of Mondays since 2006. All 800+ episodes are available in the archive. Go to EconTalk.org for transcripts, related resources, and comments.",
|
||||
"favicon": null,
|
||||
"hubs": [
|
||||
"https://simplecast.superfeedr.com/"
|
||||
],
|
||||
"is_podcast": true,
|
||||
"is_push": true,
|
||||
"item_count": 875,
|
||||
"last_seen": "2023-01-11T14:31:49.308489+00:00",
|
||||
"last_updated": "2023-01-09T11:30:00+00:00",
|
||||
"score": 24,
|
||||
"self_url": "https://feeds.simplecast.com/wgl4xEgL",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "EconTalk",
|
||||
"url": "https://feeds.simplecast.com/wgl4xEgL",
|
||||
"velocity": 0.142,
|
||||
"version": "rss20"
|
||||
}
|
@@ -10,7 +10,7 @@
|
||||
"is_podcast": true,
|
||||
"is_push": true,
|
||||
"item_count": 300,
|
||||
"last_seen": "2023-01-08T23:41:32.928322+00:00",
|
||||
"last_seen": "2023-01-11T12:40:59.343327+00:00",
|
||||
"last_updated": "2022-12-29T17:35:50+00:00",
|
||||
"score": 20,
|
||||
"self_url": "https://lexfridman.com/feed/podcast/",
|
21
modules/data/feeds/sources/mg.lol/default.json
Normal file
21
modules/data/feeds/sources/mg.lol/default.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 83074,
|
||||
"content_type": "text/xml; charset=utf-8",
|
||||
"description": "projects & research",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": false,
|
||||
"is_push": false,
|
||||
"item_count": 14,
|
||||
"last_seen": "2023-01-11T12:28:34.383284+00:00",
|
||||
"last_updated": "2021-07-29T05:10:05+00:00",
|
||||
"score": 14,
|
||||
"self_url": "https://mg.lol/blog/rss/",
|
||||
"site_name": null,
|
||||
"site_url": "https://mg.lol",
|
||||
"title": "MG",
|
||||
"url": "https://mg.lol/blog/rss/",
|
||||
"velocity": 0.004,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 3568150,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "Post Reports",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 1070,
|
||||
"last_seen": "2023-01-11T14:37:23.650030+00:00",
|
||||
"last_updated": "2023-01-10T21:40:40+00:00",
|
||||
"score": 14,
|
||||
"self_url": "https://podcast.posttv.com/itunes/post-reports.xml",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "Post Reports",
|
||||
"url": "https://podcast.posttv.com/itunes/post-reports.xml",
|
||||
"velocity": 0.711,
|
||||
"version": "rss20"
|
||||
}
|
23
modules/data/feeds/sources/righto.com/default.json
Normal file
23
modules/data/feeds/sources/righto.com/default.json
Normal file
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 862917,
|
||||
"content_type": "application/atom+xml; charset=utf-8",
|
||||
"description": "Computer history, restoring vintage computers, IC reverse engineering, and whatever",
|
||||
"favicon": "https://www.blogger.com/about/favicon/favicon.ico",
|
||||
"hubs": [
|
||||
"http://pubsubhubbub.appspot.com/"
|
||||
],
|
||||
"is_podcast": false,
|
||||
"is_push": true,
|
||||
"item_count": 25,
|
||||
"last_seen": "2023-01-11T12:29:19.820378+00:00",
|
||||
"last_updated": "2023-01-10T18:21:20.265000+00:00",
|
||||
"score": -2,
|
||||
"self_url": "https://www.blogger.com/feeds/6264947694886887540/posts/default",
|
||||
"site_name": "Blogger.com - Create a unique and beautiful blog easily.",
|
||||
"site_url": "https://www.blogger.com",
|
||||
"title": "Ken Shirriff's blog",
|
||||
"url": "https://www.blogger.com/feeds/6264947694886887540/posts/default",
|
||||
"velocity": 0.12,
|
||||
"version": "atom10"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 550915,
|
||||
"content_type": "application/xml; charset=utf-8",
|
||||
"description": "The show that looks at the way technology is changing our economies, societies and daily lives.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 160,
|
||||
"last_seen": "2023-01-11T15:31:40.303733+00:00",
|
||||
"last_updated": "2022-11-22T05:00:36+00:00",
|
||||
"score": 10,
|
||||
"self_url": "https://feeds.acast.com/public/shows/125ef5a6-6c61-4024-b70e-3487a971a26c",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "FT Tech Tonic",
|
||||
"url": "https://feeds.acast.com/public/shows/125ef5a6-6c61-4024-b70e-3487a971a26c",
|
||||
"velocity": 0.072,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 1041745,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "<p>Get the best reporting and storytelling on television from 60 Minutes - on your schedule. Now you can listen to the show in its entirety every week. 60 Minutes is the most successful broadcast in television history with more than 80 Emmys under its belt. 60 Minutes offers unbiased reporting on politics, in-depth investigations and important adventures from around the world- like no one else. </p>",
|
||||
"favicon": "https://rss.art19.com/favicon.ico",
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 374,
|
||||
"last_seen": "2023-01-11T15:45:07.189940+00:00",
|
||||
"last_updated": "2023-01-09T03:00:00+00:00",
|
||||
"score": 18,
|
||||
"self_url": "https://rss.art19.com/60-minutes",
|
||||
"site_name": null,
|
||||
"site_url": "https://rss.art19.com",
|
||||
"title": "60 Minutes",
|
||||
"url": "https://rss.art19.com/60-minutes",
|
||||
"velocity": 0.082,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 235911,
|
||||
"content_type": "application/xml; charset=utf-8",
|
||||
"description": "<p>The Portal is an exploration into discovery, including conversations with thought leaders. Host Eric Weinstein, Managing Director of Thiel Capital, brings his unique expertise and diverse roster of guests for a wide range of discussions, including science, culture, business, and capitalism. The show will feature people whose lives demonstrate that portals into what we would normally consider impossible, are indeed possible. Guests include presidential candidate Andrew Yang, NY Times bestselling author Sam Harris, and retired Navy Seal and creator of the hit business podcast Jocko Willink.</p>",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 44,
|
||||
"last_seen": "2023-01-11T14:47:44.995855+00:00",
|
||||
"last_updated": "2020-12-02T07:50:55+00:00",
|
||||
"score": -12,
|
||||
"self_url": "https://www.omnycontent.com/d/playlist/9b7dacdf-a925-4f95-84dc-ac46003451ff/1713c520-edb6-43a3-b1b9-acb8002fdae7/58e33a0c-f86b-41c5-a11c-acb8002fdaf5/podcast.rss",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "The Portal",
|
||||
"url": "https://www.omnycontent.com/d/playlist/9b7dacdf-a925-4f95-84dc-ac46003451ff/1713c520-edb6-43a3-b1b9-acb8002fdae7/58e33a0c-f86b-41c5-a11c-acb8002fdaf5/podcast.rss",
|
||||
"velocity": 0.082,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 1462485,
|
||||
"content_type": "text/xml; charset=utf-8",
|
||||
"description": "Michael Malice brings his unique perspective – and plenty of sick burns – as he discusses everything from north Korea to American politics and culture with a bevy of guests.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 238,
|
||||
"last_seen": "2023-01-11T15:58:45.264936+00:00",
|
||||
"last_updated": "2023-01-04T10:40:00+00:00",
|
||||
"score": -10,
|
||||
"self_url": "http://origin.podcastone.com/podcast?categoryID2=2232",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "\"YOUR WELCOME\" with Michael Malice",
|
||||
"url": "https://www.podcastone.com/podcast?categoryID2=2232",
|
||||
"velocity": 0.141,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 809084,
|
||||
"content_type": "application/xml+rss; charset=utf-8",
|
||||
"description": "A show that cuts through all the political drivel and media misinformation to give you a straight take on one big news story of the week.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 217,
|
||||
"last_seen": "2023-01-11T13:40:50.240217+00:00",
|
||||
"last_updated": "2023-01-06T10:37:50+00:00",
|
||||
"score": 16,
|
||||
"self_url": "https://feeds.acast.com/public/shows/1d1223a2-9d05-473b-9e79-c2b65b71d676",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "Deconstructed",
|
||||
"url": "https://rss.prod.firstlook.media/deconstructed/podcast.rss",
|
||||
"velocity": 0.122,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 1034995,
|
||||
"content_type": "application/xml+rss; charset=utf-8",
|
||||
"description": "The people behind The Intercept’s fearless reporting and incisive commentary discuss the crucial issues of our time.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 243,
|
||||
"last_seen": "2023-01-11T14:04:41.283509+00:00",
|
||||
"last_updated": "2022-12-21T10:30:43+00:00",
|
||||
"score": 16,
|
||||
"self_url": "https://feeds.acast.com/public/shows/f5b64019-68c3-57d4-b70b-043e63e5cbf6",
|
||||
"site_name": null,
|
||||
"site_url": null,
|
||||
"title": "Intercepted",
|
||||
"url": "https://rss.prod.firstlook.media/intercepted/podcast.rss",
|
||||
"velocity": 0.112,
|
||||
"version": "rss20"
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 3905927,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "The official audio version of Astral Codex Ten, with an archive of posts from Slate Star Codex. It's just me reading Scott Alexander's blog posts.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 739,
|
||||
"last_seen": "2023-01-11T11:05:40.604126+00:00",
|
||||
"last_updated": "2023-01-11T05:13:00+00:00",
|
||||
"score": 18,
|
||||
"self_url": "https://sscpodcast.libsyn.com/rss",
|
||||
"site_name": "Astral Codex Ten Podcast",
|
||||
"site_url": "https://sscpodcast.libsyn.com",
|
||||
"title": "Astral Codex Ten Podcast",
|
||||
"url": "https://sscpodcast.libsyn.com/rss",
|
||||
"velocity": 0.384,
|
||||
"version": "rss20"
|
||||
}
|
21
modules/data/feeds/sources/uninsane.org/default.json
Normal file
21
modules/data/feeds/sources/uninsane.org/default.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 1,
|
||||
"content_length": 178687,
|
||||
"content_type": "text/xml; charset=utf-8",
|
||||
"description": null,
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": false,
|
||||
"is_push": false,
|
||||
"item_count": 6,
|
||||
"last_seen": "2023-01-11T10:51:13.435393+00:00",
|
||||
"last_updated": "2022-10-13T00:00:00+00:00",
|
||||
"score": -4,
|
||||
"self_url": "https://uninsane.org/atom.xml",
|
||||
"site_name": "Perfectly Sane",
|
||||
"site_url": "https://uninsane.org",
|
||||
"title": "Perfectly Sane",
|
||||
"url": "https://uninsane.org/atom.xml",
|
||||
"velocity": 0.025,
|
||||
"version": "atom10"
|
||||
}
|
21
modules/data/feeds/sources/wakingup.libsyn.com/default.json
Normal file
21
modules/data/feeds/sources/wakingup.libsyn.com/default.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"bozo": 0,
|
||||
"content_length": 825822,
|
||||
"content_type": "application/rss+xml; charset=utf-8",
|
||||
"description": "Join neuroscientist, philosopher, and best-selling author Sam Harris as he explores questions about the human mind, society, and current events.",
|
||||
"favicon": null,
|
||||
"hubs": [],
|
||||
"is_podcast": true,
|
||||
"is_push": false,
|
||||
"item_count": 326,
|
||||
"last_seen": "2023-01-11T15:13:28.154435+00:00",
|
||||
"last_updated": "2023-01-05T18:36:25+00:00",
|
||||
"score": 18,
|
||||
"self_url": "https://wakingup.libsyn.com/rss",
|
||||
"site_name": "Making Sense with Sam Harris",
|
||||
"site_url": "https://wakingup.libsyn.com",
|
||||
"title": "Making Sense with Sam Harris",
|
||||
"url": "https://wakingup.libsyn.com/rss",
|
||||
"velocity": 0.096,
|
||||
"version": "rss20"
|
||||
}
|
@@ -21,4 +21,10 @@
|
||||
servo.root = root;
|
||||
};
|
||||
};
|
||||
|
||||
com.github = rec {
|
||||
# documented here: <https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints>
|
||||
# Github actually uses multiple keys -- one per format
|
||||
root = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl";
|
||||
};
|
||||
}
|
||||
|
@@ -1,4 +1,4 @@
|
||||
{ lib, ... }:
|
||||
{ lib, sane-data, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
@@ -16,6 +16,10 @@ let
|
||||
type = types.enum [ "text" "image" "podcast" ];
|
||||
default = "text";
|
||||
};
|
||||
title = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
url = mkOption {
|
||||
type = types.str;
|
||||
description = ''
|
||||
|
@@ -12,8 +12,24 @@ rec {
|
||||
# transform a list of feeds into an attrs mapping cat => [ feed0 feed1 ... ]
|
||||
partitionByCat = feeds: builtins.groupBy (f: f.cat) feeds;
|
||||
|
||||
xmlTag = tag: close: attrs:
|
||||
let
|
||||
fmt-attrs = builtins.concatStringsSep
|
||||
" "
|
||||
(lib.mapAttrsToList (name: value: ''${lib.escapeXML name}="${lib.escapeXML value}"'') attrs);
|
||||
fmt-close = if close then "/" else "";
|
||||
in
|
||||
''<${tag} ${fmt-attrs} ${fmt-close}>'';
|
||||
|
||||
# represents a single RSS feed.
|
||||
opmlTerminal = feed: ''<outline xmlUrl="${feed.url}" type="rss"/>'';
|
||||
opmlTerminal = feed: xmlTag "outline" true (
|
||||
{
|
||||
xmlUrl = feed.url;
|
||||
type = "rss";
|
||||
} // lib.optionalAttrs (feed.title != null) {
|
||||
title = feed.title;
|
||||
}
|
||||
);
|
||||
# a list of RSS feeds.
|
||||
opmlTerminals = feeds: lib.concatStringsSep "\n" (builtins.map opmlTerminal feeds);
|
||||
# one node which packages some flat grouping of terminals.
|
||||
|
@@ -151,7 +151,9 @@ let
|
||||
# vlc remembers play position in ~/.config/vlc/vlc-qt-interface.conf
|
||||
{ pkg = vlc; dir = [ ".config/vlc" ]; }
|
||||
|
||||
whalebird # pleroma client. input is broken on phosh
|
||||
# pleroma client (Electron). input is broken on phosh.
|
||||
{ pkg = whalebird; private = [ ".config/Whalebird" ]; }
|
||||
|
||||
xdg-utils # for xdg-open
|
||||
xterm # broken on phosh
|
||||
]
|
||||
|
@@ -103,7 +103,7 @@ let
|
||||
(orig: lib.recursiveUpdate
|
||||
(builtins.removeAttrs orig ["user" "group" "mode" ])
|
||||
{
|
||||
acl = sane-lib.filterByName ["user" "group" "mode"] (orig.acl or {});
|
||||
acl = sane-lib.filterByName ["user" "group" "mode"] orig;
|
||||
}
|
||||
)
|
||||
to;
|
||||
|
@@ -16,7 +16,14 @@
|
||||
# kiwix-tools: init at 3.4.0
|
||||
(fetchpatch {
|
||||
url = "https://github.com/NixOS/nixpkgs/pull/206254.diff";
|
||||
sha256 = "sha256-Z4V9mOv4HYg3kDnWoYcxz3ch03I/1USrLjzlq4X9YqI=";
|
||||
sha256 = "sha256-Cendm7a23qj/YRBj5qVM8jhl9oTpztaDEkXcSG4dJys=";
|
||||
})
|
||||
|
||||
# whalebird: 4.6.5 -> 4.7.4
|
||||
(fetchpatch {
|
||||
# url = "https://git.uninsane.org/colin/nixpkgs/compare/master...pr.whalebird-4.7.4.diff";
|
||||
url = "https://git.uninsane.org/colin/nixpkgs/commit/f5c7c70dde720e990fa7e0748d1dc4764d6e4406.diff";
|
||||
sha256 = "sha256-L9Ie80loaP6yl5ZFnJ1b5WMDpvO1QFE8tbrW5HBauko=";
|
||||
})
|
||||
|
||||
./2022-12-19-i2p-aarch64.patch
|
||||
|
67
overlays/pkgs.nix
Normal file
67
overlays/pkgs.nix
Normal file
@@ -0,0 +1,67 @@
|
||||
(next: prev:
|
||||
let
|
||||
sane = rec {
|
||||
#### my own, non-upstreamable packages:
|
||||
sane-scripts = prev.callPackage ../pkgs/sane-scripts { };
|
||||
feeds = prev.callPackage ../pkgs/feeds { };
|
||||
tow-boot-pinephone = prev.callPackage ../pkgs/tow-boot-pinephone { };
|
||||
tow-boot-rpi4 = prev.callPackage ../pkgs/tow-boot-rpi4 { };
|
||||
bootpart-uefi-x86_64 = prev.callPackage ../pkgs/bootpart-uefi-x86_64 { };
|
||||
bootpart-tow-boot-rpi-aarch64 = prev.callPackage ../pkgs/bootpart-tow-boot-rpi-aarch64 {
|
||||
# not sure why i can't just do `next.callPackage` instead
|
||||
inherit tow-boot-rpi4;
|
||||
};
|
||||
bootpart-u-boot-rpi-aarch64 = prev.callPackage ../pkgs/bootpart-u-boot-rpi-aarch64 {
|
||||
# not sure why i can't just do `next.callPackage` instead
|
||||
inherit ubootRaspberryPi4_64bit;
|
||||
};
|
||||
rtl8723cs-firmware = prev.callPackage ../pkgs/rtl8723cs-firmware { };
|
||||
linux-megous = prev.callPackage ../pkgs/linux-megous {
|
||||
kernelPatches = [
|
||||
prev.kernelPatches.bridge_stp_helper
|
||||
prev.kernelPatches.request_key_helper
|
||||
];
|
||||
};
|
||||
|
||||
sublime-music-mobile = prev.callPackage ../pkgs/sublime-music-mobile { };
|
||||
|
||||
#### customized packages
|
||||
fluffychat-moby = prev.callPackage ../pkgs/fluffychat-moby { };
|
||||
gpodder-configured = prev.callPackage ../pkgs/gpodder-configured { };
|
||||
# nixos-unstable pleroma is too far out-of-date for our db
|
||||
pleroma = prev.callPackage ../pkgs/pleroma { };
|
||||
# jackett doesn't allow customization of the bind address: this will probably always be here.
|
||||
jackett = prev.callPackage ../pkgs/jackett { inherit (prev) jackett; };
|
||||
# mozilla keeps nerfing itself and removing configuration options
|
||||
firefox-unwrapped = prev.callPackage ../pkgs/firefox-unwrapped { };
|
||||
|
||||
# patch rpi uboot with something that fixes USB HDD boot
|
||||
ubootRaspberryPi4_64bit = prev.callPackage ../pkgs/ubootRaspberryPi4_64bit { };
|
||||
|
||||
gocryptfs = prev.callPackage ../pkgs/gocryptfs { inherit (prev) gocryptfs; };
|
||||
|
||||
browserpass = prev.callPackage ../pkgs/browserpass { inherit (prev) browserpass; inherit sane-scripts; };
|
||||
|
||||
fractal-latest = prev.callPackage ../pkgs/fractal-latest { };
|
||||
|
||||
#### TEMPORARY: PACKAGES WAITING TO BE UPSTREAMED
|
||||
|
||||
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
|
||||
(py-final: py-prev: {
|
||||
feedsearch-crawler = py-final.callPackage ../pkgs/feedsearch-crawler { };
|
||||
})
|
||||
];
|
||||
|
||||
kaiteki = prev.callPackage ../pkgs/kaiteki { };
|
||||
lightdm-mobile-greeter = prev.callPackage ../pkgs/lightdm-mobile-greeter { };
|
||||
browserpass-extension = prev.callPackage ../pkgs/browserpass-extension { };
|
||||
gopass-native-messaging-host = prev.callPackage ../pkgs/gopass-native-messaging-host { };
|
||||
tokodon = prev.libsForQt5.callPackage ../pkgs/tokodon { };
|
||||
signaldctl = prev.callPackage ../pkgs/signaldctl { };
|
||||
splatmoji = prev.callPackage ../pkgs/splatmoji { };
|
||||
# trust-dns = prev.callPackage ../pkgs/trust-dns { };
|
||||
# kaiteki = prev.kaiteki;
|
||||
};
|
||||
in sane // { inherit sane; }
|
||||
)
|
||||
|
@@ -26,12 +26,17 @@
|
||||
passthru.initFeedScript = pkgs.writeShellScript
|
||||
"init-feed"
|
||||
''
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p git
|
||||
sources_dir=modules/data/feeds/sources
|
||||
name="$1"
|
||||
mkdir modules/data/feeds/sources/"$name"
|
||||
touch modules/data/feeds/sources/"$name"/default.json
|
||||
git add modules/data/feeds/sources/"$name"/default.json
|
||||
url="https://$name"
|
||||
json_path="$sources_dir/$name/default.json"
|
||||
|
||||
# the name could have slashes in it, so we want to mkdir -p that
|
||||
# but in a way where the least could go wrong.
|
||||
pushd "$sources_dir"; mkdir -p "$name"; popd
|
||||
|
||||
${./update.py} "$url" "$json_path"
|
||||
cat "$json_path"
|
||||
'';
|
||||
}
|
||||
))
|
||||
|
@@ -14,10 +14,7 @@ stdenv.mkDerivation {
|
||||
src = fetchurl {
|
||||
inherit url;
|
||||
};
|
||||
passthru.updateScript = [ ./update.sh url jsonPath ];
|
||||
# passthru.updateScript = callPackage ./update.nix {
|
||||
# inherit url jsonPath;
|
||||
# };
|
||||
passthru.updateScript = [ ./update.py url jsonPath ];
|
||||
meta = {
|
||||
description = "metadata about any feeds available at ${feedName}";
|
||||
homepage = feedName;
|
||||
|
@@ -1,18 +0,0 @@
|
||||
{ lib
|
||||
, curl
|
||||
, jq
|
||||
, runtimeShell
|
||||
, writeScript
|
||||
# feed-specific args
|
||||
, jsonPath
|
||||
, url
|
||||
}:
|
||||
|
||||
let
|
||||
apiQuery = "https://feedsearch.dev/api/v1/search?url=${url}";
|
||||
in
|
||||
writeScript "update-feed" ''
|
||||
#!${runtimeShell}
|
||||
PATH=${lib.makeBinPath [ curl jq ]}
|
||||
curl -X GET '${apiQuery}' | jq '.[-1]' > '${jsonPath}'
|
||||
''
|
24
pkgs/feeds/update.py
Executable file
24
pkgs/feeds/update.py
Executable file
@@ -0,0 +1,24 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i python3 -p "python3.withPackages (ps: [ ps.feedsearch-crawler ])"
|
||||
|
||||
from feedsearch_crawler import search, sort_urls
|
||||
from feedsearch_crawler.crawler import coerce_url
|
||||
|
||||
import json
|
||||
import sys
|
||||
url, jsonPath = sys.argv[1:]
|
||||
|
||||
url = coerce_url(url, default_scheme="https")
|
||||
items = search(url)
|
||||
items = sort_urls(items)
|
||||
|
||||
# print all results
|
||||
serialized = [item.serialize() for item in items]
|
||||
for item in serialized:
|
||||
print(json.dumps(item, sort_keys=True, indent=2))
|
||||
|
||||
# save the first result to disk
|
||||
keep = serialized[0] if serialized else {}
|
||||
results = json.dumps(keep, sort_keys=True, indent=2)
|
||||
with open(jsonPath, "w") as out:
|
||||
out.write(results)
|
@@ -1,10 +0,0 @@
|
||||
#!/usr/bin/env nix-shell
|
||||
#!nix-shell -i bash -p curl jq
|
||||
|
||||
set -xeu -o pipefail
|
||||
|
||||
url="$1"
|
||||
jsonPath="$2"
|
||||
|
||||
apiQuery="https://feedsearch.dev/api/v1/search?url=$url"
|
||||
curl -X GET "$apiQuery" | jq '.[-1]' > "$jsonPath"
|
65
pkgs/feedsearch-crawler/default.nix
Normal file
65
pkgs/feedsearch-crawler/default.nix
Normal file
@@ -0,0 +1,65 @@
|
||||
{ lib
|
||||
, buildPythonPackage
|
||||
, fetchFromGitHub
|
||||
# nativeBuildInputs python packages
|
||||
, poetry-core
|
||||
# propagatedBuildInputs python packages
|
||||
, aiodns
|
||||
, aiohttp
|
||||
, beautifulsoup4
|
||||
, brotlipy
|
||||
, cchardet
|
||||
, feedparser
|
||||
, python-dateutil
|
||||
, uvloop
|
||||
, w3lib
|
||||
, yarl
|
||||
}:
|
||||
|
||||
buildPythonPackage rec {
|
||||
pname = "feedsearch-crawler";
|
||||
version = "2022-05-28";
|
||||
format = "pyproject";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "DBeath";
|
||||
repo = "feedsearch-crawler";
|
||||
rev = "f49a6f5a07e796e359c4482fd29305b1a019f71f";
|
||||
hash = "sha256-pzvyeXzqdi8pRjk2+QjKhJfgtxbgVT6C08K9fhVFVmY=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [
|
||||
poetry-core
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace pyproject.toml \
|
||||
--replace 'w3lib = "^1.22.0"' 'w3lib = "*"' \
|
||||
--replace 'aiodns = "^2.0.0"' 'aiodns = "*"' \
|
||||
--replace 'uvloop = "^0.15.2"' 'uvloop = "*"'
|
||||
'';
|
||||
|
||||
propagatedBuildInputs = [
|
||||
aiodns
|
||||
aiohttp
|
||||
beautifulsoup4
|
||||
brotlipy
|
||||
cchardet
|
||||
feedparser
|
||||
python-dateutil
|
||||
uvloop
|
||||
w3lib
|
||||
yarl
|
||||
];
|
||||
|
||||
pythonImportsCheck = [
|
||||
"feedsearch_crawler"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://feedsearch.dev";
|
||||
description = "Crawl sites for RSS, Atom, and JSON feeds";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ colinsane ];
|
||||
};
|
||||
}
|
@@ -5,7 +5,7 @@ with lib;
|
||||
let
|
||||
base = "6.1.0";
|
||||
# set to empty if not a release candidate
|
||||
rc = "-rc7";
|
||||
rc = "-rc8";
|
||||
in buildLinux (args // rec {
|
||||
version = base + rc;
|
||||
|
||||
@@ -16,9 +16,15 @@ in buildLinux (args // rec {
|
||||
extraMeta.branch = versions.majorMinor version;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
# HOW TO UPDATE:
|
||||
# - `git fetch` from megous' github.
|
||||
# - there should be some new tag, like `orange-pi-6.1-blah`. use that.
|
||||
# - megi publishes release notes as the most recent commit on any stable branch, so just `git log`.
|
||||
# - orange-pi is listed as the "main integration branch".
|
||||
# - specific branches like `pp` (pinephone) are dev branches, and probably less stable.
|
||||
owner = "megous";
|
||||
repo = "linux";
|
||||
rev = "orange-pi-6.1-20221128-1027";
|
||||
hash = "sha256-kEujs4v5rPHPYy4YLyEWHa1Bu0sxoXLgSvmOH9QPWos=";
|
||||
rev = "orange-pi-6.1-20221211-1046";
|
||||
hash = "sha256-TgFXH8bHWHs26rlf7a/zNO9zubFazC8Ie6J1gj4gLgw=";
|
||||
};
|
||||
} // (args.argsOverride or { }))
|
||||
|
@@ -1,60 +0,0 @@
|
||||
(next: prev:
|
||||
let
|
||||
sane = rec {
|
||||
#### my own, non-upstreamable packages:
|
||||
sane-scripts = prev.callPackage ./sane-scripts { };
|
||||
feeds = prev.callPackage ./feeds { };
|
||||
tow-boot-pinephone = prev.callPackage ./tow-boot-pinephone { };
|
||||
tow-boot-rpi4 = prev.callPackage ./tow-boot-rpi4 { };
|
||||
bootpart-uefi-x86_64 = prev.callPackage ./bootpart-uefi-x86_64 { };
|
||||
bootpart-tow-boot-rpi-aarch64 = prev.callPackage ./bootpart-tow-boot-rpi-aarch64 {
|
||||
# not sure why i can't just do `next.callPackage` instead
|
||||
inherit tow-boot-rpi4;
|
||||
};
|
||||
bootpart-u-boot-rpi-aarch64 = prev.callPackage ./bootpart-u-boot-rpi-aarch64 {
|
||||
# not sure why i can't just do `next.callPackage` instead
|
||||
inherit ubootRaspberryPi4_64bit;
|
||||
};
|
||||
rtl8723cs-firmware = prev.callPackage ./rtl8723cs-firmware { };
|
||||
linux-megous = prev.callPackage ./linux-megous {
|
||||
kernelPatches = [
|
||||
prev.kernelPatches.bridge_stp_helper
|
||||
prev.kernelPatches.request_key_helper
|
||||
];
|
||||
};
|
||||
|
||||
sublime-music-mobile = prev.callPackage ./sublime-music-mobile { };
|
||||
|
||||
#### customized packages
|
||||
fluffychat-moby = prev.callPackage ./fluffychat-moby { };
|
||||
gpodder-configured = prev.callPackage ./gpodder-configured { };
|
||||
# nixos-unstable pleroma is too far out-of-date for our db
|
||||
pleroma = prev.callPackage ./pleroma { };
|
||||
# jackett doesn't allow customization of the bind address: this will probably always be here.
|
||||
jackett = prev.callPackage ./jackett { inherit (prev) jackett; };
|
||||
# mozilla keeps nerfing itself and removing configuration options
|
||||
firefox-unwrapped = prev.callPackage ./firefox-unwrapped { };
|
||||
|
||||
# patch rpi uboot with something that fixes USB HDD boot
|
||||
ubootRaspberryPi4_64bit = prev.callPackage ./ubootRaspberryPi4_64bit { };
|
||||
|
||||
gocryptfs = prev.callPackage ./gocryptfs { inherit (prev) gocryptfs; };
|
||||
|
||||
browserpass = prev.callPackage ./browserpass { inherit (prev) browserpass; inherit sane-scripts; };
|
||||
|
||||
fractal-latest = prev.callPackage ./fractal-latest { };
|
||||
|
||||
#### TEMPORARY: PACKAGES WAITING TO BE UPSTREAMED
|
||||
kaiteki = prev.callPackage ./kaiteki { };
|
||||
lightdm-mobile-greeter = prev.callPackage ./lightdm-mobile-greeter { };
|
||||
browserpass-extension = prev.callPackage ./browserpass-extension { };
|
||||
gopass-native-messaging-host = prev.callPackage ./gopass-native-messaging-host { };
|
||||
tokodon = prev.libsForQt5.callPackage ./tokodon { };
|
||||
signaldctl = prev.callPackage ./signaldctl { };
|
||||
splatmoji = prev.callPackage ./splatmoji { };
|
||||
# trust-dns = prev.callPackage ./trust-dns { };
|
||||
# kaiteki = prev.kaiteki;
|
||||
};
|
||||
in sane // { inherit sane; }
|
||||
)
|
||||
|
Reference in New Issue
Block a user