Compare commits

..

93 Commits

Author SHA1 Message Date
fd19802e91 WIP: fixup sway bugs 2023-01-28 12:25:12 +00:00
d84846e293 refactor: sway: port away from home-manager 2023-01-28 11:13:54 +00:00
b46ccb9bc2 zsh: add an empty .zshrc to shutup prezto 2023-01-28 10:59:06 +00:00
1958c1f36b refactor: port waybar config out of home-manager 2023-01-28 09:58:18 +00:00
67299ebfd7 nix-index: move out of home-manager -> nixos 2023-01-28 09:44:32 +00:00
adecfbaea4 refactor: home-manager: remove dead sysconfig hack 2023-01-28 09:31:09 +00:00
fa4a576703 refactor: zsh: enable VTE with programs.zsh.vteIntegration instead of manual sourcing 2023-01-28 09:30:45 +00:00
abb0a3c94e refactor: move xdg.nix -> xdg-dirs.nix 2023-01-28 09:27:10 +00:00
32612e6acb refactor: sort the mime associations 2023-01-28 09:26:29 +00:00
e0a3979b65 refactor: mimeapps: port from home-manager -> nixos 2023-01-28 09:23:41 +00:00
4d84ca0878 refactor: xdg.conf: move out of home-manager 2023-01-28 03:57:35 +00:00
1ae8ab2550 refactor: ~/.cache/nix-index: persist in common/users.nix instead of home-manager 2023-01-28 03:48:37 +00:00
ed1380ba70 libreoffice config: move out of home-manager 2023-01-28 03:45:51 +00:00
e1b8d3ccc3 zsh: move out of home-manager 2023-01-28 03:40:26 +00:00
392ad7c674 zsh: port from home-manager to nixos 2023-01-28 03:39:13 +00:00
4026334e51 neovim: move out of home-manager 2023-01-28 00:20:40 +00:00
2269016736 neovim: port to nixos config instead of home-manager 2023-01-28 00:19:48 +00:00
f2c61d64b7 mpv: move out of home-manager 2023-01-27 08:12:37 +00:00
840c2feba5 mpv: specify config by sane.fs instead of home-manager 2023-01-27 08:11:59 +00:00
4603f0fd8e kitty: move out of home-manager 2023-01-27 08:09:03 +00:00
64704d361b kitty: configure via sane.fs instead of home-manager 2023-01-27 08:08:22 +00:00
7df18686e0 git: move out of home-manager 2023-01-27 07:57:42 +00:00
aee928dac0 git: populate with sane.fs instead of home-manager 2023-01-27 07:55:38 +00:00
76c0c3dc6a vlc: move out of home-manager 2023-01-27 07:34:07 +00:00
796988bdeb sublime-music: move out of home-manager 2023-01-27 07:33:23 +00:00
31d28ccf23 ssh: move out of home-manager 2023-01-27 07:19:04 +00:00
a298678622 splatmoji: move out of home-manager 2023-01-27 07:18:13 +00:00
32eb3b1998 newsflash: move out of home-manager 2023-01-27 07:17:27 +00:00
7a726b8d08 keyring: move out of home-manager 2023-01-27 07:15:45 +00:00
3edbb1c873 gpodder: move out of home-manager 2023-01-27 07:12:29 +00:00
d94687e8cc gfeeds: move out of home-manager 2023-01-27 07:11:31 +00:00
641ffc3452 firefox: move out of home-manager 2023-01-27 07:09:10 +00:00
fa8016db67 aerc: migrate out of home-manager directory 2023-01-27 07:08:03 +00:00
0c9cc87728 patch handbrake instead of pinning it 2023-01-27 05:15:09 +00:00
5236da2383 Merge branch 'staging/nixpkgs-2023-01-25' 2023-01-27 04:22:25 +00:00
aa24eebf40 all hosts: declare $host-hn as an alias to speak with that host over the Home Network vpn 2023-01-27 03:18:49 +00:00
3cc0d7ec40 flake update: nixpkgs/nixos-unstable 2023-01-23 -> 2023-01-25; mobile-nixos; nixpkgs/nixos-22.11
```
• Updated input 'mobile-nixos':
    'github:nixos/mobile-nixos/4d2093efa7efa00131d385fd9d11e54ce16bc57a' (2023-01-24)
  → 'github:nixos/mobile-nixos/80ece5a61738fbf3b96fdda402ab2dfc74ee5cee' (2023-01-27)
• Updated input 'nixpkgs':
    'path:/nix/store/2yvdsmlp8nx67fh4gvn64mbm82pbgzz8-source/nixpatches?lastModified=1&narHash=sha256-hxFwrPvi%2fvd6g8BfCYtTM2CEIDde%2fgz7GjVmkmRzP+o=' (1970-01-01)
  → 'path:/nix/store/4xd16l52dabh0xgwg57j4qraj2nrijl5-source/nixpatches?lastModified=1&narHash=sha256-hxFwrPvi%2fvd6g8BfCYtTM2CEIDde%2fgz7GjVmkmRzP+o=' (1970-01-01)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/ab1254087f4cdf4af74b552d7fc95175d9bdbb49' (2023-01-22)
  → 'github:nixos/nixpkgs/def9e420d27c951026d57dc96ce0218c3131f412' (2023-01-26)
• Updated input 'nixpkgs-unpatched':
    'github:nixos/nixpkgs/1b1f50645af2a70dc93eae18bfd88d330bfbcf7f' (2023-01-23)
  → 'github:nixos/nixpkgs/9b97ad7b4330aacda9b2343396eb3df8a853b4fc' (2023-01-25)
```
2023-01-27 03:08:23 +00:00
42c2d93306 firefox: persist just the ~/.mozilla/firefox/default profile dir 2023-01-27 01:52:00 +00:00
f6f8d0e19d sane-lib.fs: new wantedDir helper 2023-01-27 01:51:35 +00:00
8ad4d8a4f9 nits: fix comments/improve docs 2023-01-27 00:00:50 +00:00
d419e10f10 moby: bump CMA 384M -> 512M 2023-01-26 23:41:22 +00:00
c56734e00e remove unused custom signaldctl package (it has been upstreamed) 2023-01-26 23:37:34 +00:00
e095149797 remove unused custom pleroma package 2023-01-26 23:36:36 +00:00
6006b84f9e moby: disable metamask 2023-01-26 23:35:57 +00:00
b3b914bc2e disable i2p on all hosts (i don't use it) 2023-01-26 23:35:29 +00:00
d6f87c7ee7 formatting: firefox: sort addons by name/attr 2023-01-26 23:31:46 +00:00
028d78437b firefox: make all addons externally configurable 2023-01-26 23:30:56 +00:00
0539bb8fd5 firefox: factor out the addons a little 2023-01-26 23:17:06 +00:00
95cc42f057 Merge branch 'staging/linux-6.2' 2023-01-26 09:21:33 +00:00
b358cbe02a feeds: rifters: port to db 2023-01-26 00:07:29 +00:00
64cd562824 feeds: IEEE spectrum: port to db 2023-01-26 00:05:50 +00:00
749f59a4af feeds: palladium: port to db 2023-01-26 00:04:17 +00:00
77d5ff623e feeds: Profectus: port to db 2023-01-26 00:02:55 +00:00
6386abb8c6 feeds: SemiAccurate: port to db 2023-01-26 00:01:28 +00:00
28f8434c53 feeds: vitalik.ca: port to db 2023-01-26 00:00:16 +00:00
30fafb4837 feeds: sagacious suricata: port to db 2023-01-25 23:59:23 +00:00
c7205ed668 feeds: bunnie juang: port to db 2023-01-25 23:58:43 +00:00
c69c6612fe feeds: Daniel Janus: port to db 2023-01-25 23:57:53 +00:00
6951b277ad feeds: ian henry: port to db 2023-01-25 23:57:00 +00:00
1167c9bd0c feeds: bitbashing: port to db 2023-01-25 23:56:22 +00:00
8537fe411b feeds: idiomdrottning: port to db 2023-01-25 23:55:36 +00:00
1fb2ddbecc feeds: jefftk: port to db 2023-01-25 23:52:00 +00:00
27608cb8c7 feeds: pomeroyb: port to db 2023-01-25 23:51:12 +00:00
33ee59e80d feeds: miniature-calendar: port to db 2023-01-25 23:49:52 +00:00
edacc28e4a feeds: smbc: port to db 2023-01-25 23:45:49 +00:00
99780e30bc feeds: pbfcomics: port to db 2023-01-25 23:45:16 +00:00
140dd05bd1 feeds: xkcd: port to db 2023-01-25 23:44:06 +00:00
c35bc92ac9 feeds: Sean Carrol/Preposterous Universe: port to db 2023-01-25 23:40:55 +00:00
16b92f98e7 feeds: put a num on it: port to db 2023-01-25 23:38:58 +00:00
576b63da9c feeds: sideways view: port to db 2023-01-25 23:35:39 +00:00
e434add20d feeds: Overcoming Bias: port to db 2023-01-25 23:34:30 +00:00
d288086aa2 feeds: roots of progress: port to db 2023-01-25 23:32:53 +00:00
e9c0f692d8 feeds: gwern: port to db 2023-01-25 23:32:11 +00:00
5a75d0f56b feeds: richardcarrier: port to db 2023-01-25 23:29:58 +00:00
a222cf18a3 feeds: port slimemoldtimemold to db 2023-01-25 23:29:17 +00:00
45b9ee763b feeds: applied divinity studies: port to db 2023-01-25 23:28:23 +00:00
50a2196495 feeds: unintended consequences: port to db 2023-01-25 23:27:15 +00:00
e4419ffad4 feeds: stpeter.im: port to db 2023-01-25 23:26:23 +00:00
ae3ba64fc3 feeds: dshr.org: port to db 2023-01-25 23:25:11 +00:00
948b2489d3 feeds: port austinvernon to db 2023-01-25 22:50:41 +00:00
abe491b563 feeds: port lynalden to db 2023-01-25 22:49:45 +00:00
9911593a63 feeds: port benedict evans to db 2023-01-25 22:48:57 +00:00
798ba7f7e3 remove benjaminrosshoffman.com db entry: it only has the comments feed and is not useful 2023-01-25 22:23:06 +00:00
f72e901f57 feeds: port balaji to db 2023-01-25 22:22:06 +00:00
2047222233 RSS: add philosopher.coach 2023-01-25 21:27:18 +00:00
5d33cb66d6 feeds: add Julia Evans 2023-01-25 10:55:50 +00:00
6fded1f256 feeds: add Matt Webb 2023-01-25 10:36:10 +00:00
1d1c528abc feeds: add Merveilles forum 2023-01-25 10:31:51 +00:00
35fdd2788f feeds: add Emerge podcast 2023-01-25 10:28:15 +00:00
77cb951545 feeds: port congressionaldish to db 2023-01-25 09:46:10 +00:00
1909e0fbe8 feedsearch-crawler: fix for very large RSS feeds (like congressionaldish) 2023-01-25 09:44:32 +00:00
33d7819619 trust-dns: add a "quiet" option and enable it 2023-01-25 08:18:29 +00:00
0846abb6bf signald: update, and persist the /var/lib/signald accounts directory 2023-01-25 06:38:27 +00:00
90 changed files with 2010 additions and 3007 deletions

24
flake.lock generated
View File

@@ -39,11 +39,11 @@
"mobile-nixos": {
"flake": false,
"locked": {
"lastModified": 1674593731,
"narHash": "sha256-RHJOhxqPKLxbLLabbj1IEuUQqO76TOTtmpxYyTtfDmU=",
"lastModified": 1674779092,
"narHash": "sha256-mFBD0Dvjf8tuxWtJhsCQ+8VYqI4fQeWjd/vfWsZiRRo=",
"owner": "nixos",
"repo": "mobile-nixos",
"rev": "4d2093efa7efa00131d385fd9d11e54ce16bc57a",
"rev": "80ece5a61738fbf3b96fdda402ab2dfc74ee5cee",
"type": "github"
},
"original": {
@@ -60,22 +60,22 @@
},
"locked": {
"lastModified": 1,
"narHash": "sha256-P5BXhRIaKF6ze3am7CY//NFOJ4ihoys9h0ka9S15VV4=",
"path": "/nix/store/41f11k8hk1qjd440mavrybc7xgrcp9gj-source/nixpatches",
"narHash": "sha256-5pNu9Ph1LIBj5q9RWLV3r7daANjmd4u5y+MVq8vlfS4=",
"path": "/nix/store/bjzsgw8zn4av0dv4sqyj7vxhi43na16y-source/nixpatches",
"type": "path"
},
"original": {
"path": "/nix/store/41f11k8hk1qjd440mavrybc7xgrcp9gj-source/nixpatches",
"path": "/nix/store/bjzsgw8zn4av0dv4sqyj7vxhi43na16y-source/nixpatches",
"type": "path"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1674407282,
"narHash": "sha256-2qwc8mrPINSFdWffPK+ji6nQ9aGnnZyHSItVcYDZDlk=",
"lastModified": 1674692158,
"narHash": "sha256-oqGpwVg4D+eMSgF7Th5Ve1ysCiH3H3g85vGJ3nvJsZQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ab1254087f4cdf4af74b552d7fc95175d9bdbb49",
"rev": "def9e420d27c951026d57dc96ce0218c3131f412",
"type": "github"
},
"original": {
@@ -103,11 +103,11 @@
},
"nixpkgs-unpatched": {
"locked": {
"lastModified": 1674459583,
"narHash": "sha256-L0UZl/u2H3HGsrhN+by42c5kNYeKtdmJiPzIRvEVeiM=",
"lastModified": 1674641431,
"narHash": "sha256-qfo19qVZBP4qn5M5gXc/h1MDgAtPA5VxJm9s8RUAkVk=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1b1f50645af2a70dc93eae18bfd88d330bfbcf7f",
"rev": "9b97ad7b4330aacda9b2343396eb3df8a853b4fc",
"type": "github"
},
"original": {

View File

@@ -27,9 +27,16 @@
neededForUsers = true;
};
# usability compromises
sane.web-browser.persistCache = "private";
sane.web-browser.persistData = "private";
sane.web-browser = {
# compromise impermanence for the sake of usability
persistCache = "private";
persistData = "private";
# i don't do crypto stuff on moby
addons.ether-metamask.enable = false;
# addons.sideberry.enable = false;
};
sane.persist.home.plaintext = [
".config/pulse" # persist pulseaudio volume
];
@@ -61,7 +68,7 @@
# the default CMA seems to be 32M.
# i was running fine with 256MB from 2022/07-ish through 2022/12-ish, but then the phone quit reliably coming back from sleep: maybe a memory leak?
# `cat /proc/meminfo` to see CmaTotal/CmaFree if interested in tuning this.
boot.kernelParams = [ "cma=384M" ];
boot.kernelParams = [ "cma=512M" ];
# mobile-nixos' /lib/firmware includes:
# rtl_bt (bluetooth)

View File

@@ -2,6 +2,11 @@
# - <https://github.com/mautrix/signal/blob/master/mautrix_signal/example-config.yaml>
{ config, pkgs, ... }:
{
sane.persist.sys.plaintext = [
{ user = "mautrix-signal"; group = "mautrix-signal"; directory = "/var/lib/mautrix-signal"; }
{ user = "signald"; group = "signald"; directory = "/var/lib/signald"; }
];
services.signald.enable = true;
services.mautrix-signal.enable = true;
services.mautrix-signal.environmentFile =
@@ -21,10 +26,6 @@
ReadWritePaths = [ "/run/signald" ];
};
sane.persist.sys.plaintext = [
{ user = "mautrix-signal"; group = "mautrix-signal"; directory = "/var/lib/mautrix-signal"; }
];
sops.secrets."mautrix_signal_env" = {
format = "binary";
mode = "0440";

View File

@@ -9,6 +9,7 @@
"192.168.0.5"
"10.0.1.5"
];
sane.services.trust-dns.quiet = true;
sane.services.trust-dns.zones."uninsane.org".TTL = 900;

View File

@@ -5,6 +5,7 @@
./feeds.nix
./fs.nix
./hardware.nix
./home
./i2p.nix
./ids.nix
./machine-id.nix
@@ -47,7 +48,6 @@
"nixpkgs-overlays=${../..}/overlays"
];
# TODO: move this into home-manager?
fonts = {
enableDefaultFonts = true;
fonts = with pkgs; [ font-awesome twitter-color-emoji hack-font ];

View File

@@ -13,6 +13,7 @@ let
uncat = { cat = "uncat"; };
text = { format = "text"; };
img = { format = "image"; };
mkRss = format: url: { inherit url format; } // uncat // infrequent;
# format-specific helpers
@@ -29,16 +30,16 @@ let
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
freq = lib.mkIf (raw.velocity or 0 != 0) (lib.mkDefault (
if raw.velocity > 2 then
"hourly"
else if raw.velocity or 0 > 0.5 then
else if raw.velocity > 0.5 then
"daily"
else if raw.velocity or 0 > 0.1 then
else if raw.velocity > 0.1 then
"weekly"
else
"infrequent"
);
));
} // lib.optionalAttrs (raw.is_podcast or false) {
format = "podcast";
} // lib.optionalAttrs (raw.title or "" != "") {
@@ -53,9 +54,11 @@ let
(fromDb "feeds.simplecast.com/wgl4xEgL" // rat)
## Cory Doctorow -- both podcast & text entries
(fromDb "craphound.com" // pol)
(mkPod "https://congressionaldish.libsyn.com/rss" // pol // infrequent)
(fromDb "congressionaldish.libsyn.com" // pol)
## Civboot -- https://anchor.fm/civboot
(fromDb "anchor.fm/s/34c7232c/podcast/rss" // tech)
## Emerge: making sense of what's next -- <https://www.whatisemerging.com/emergepodcast>
(mkPod "https://anchor.fm/s/21bc734/podcast/rss" // pol // infrequent)
(fromDb "feeds.feedburner.com/80000HoursPodcast" // rat)
(fromDb "allinchamathjason.libsyn.com" // pol)
(fromDb "acquired.libsyn.com" // tech)
@@ -96,14 +99,16 @@ let
(fromDb "econlib.org" // pol)
# AGGREGATORS (< 1 post/day)
(mkText "https://palladiummag.com/feed" // uncat // weekly)
(mkText "https://profectusmag.com/feed" // uncat // weekly)
(mkText "https://semiaccurate.com/feed" // tech // weekly)
(fromDb "palladiummag.com" // uncat)
(fromDb "profectusmag.com" // uncat)
(fromDb "semiaccurate.com" // tech)
(mkText "https://linuxphoneapps.org/blog/atom.xml" // tech // infrequent)
(mkText "https://spectrum.ieee.org/rss" // tech // weekly)
(fromDb "spectrum.ieee.org" // tech)
## n.b.: quality RSS list here: <https://forum.merveilles.town/thread/57/share-your-rss-feeds%21-6/>
(mkText "https://forum.merveilles.town/rss.xml" // pol // infrequent)
## No Moods, Ads or Cutesy Fucking Icons
(mkText "https://www.rifters.com/crawl/?feed=rss2" // uncat // weekly)
(fromDb "rifters.com/crawl" // uncat)
# DEVELOPERS
(fromDb "uninsane.org" // tech)
@@ -114,70 +119,76 @@ let
## shared blog by a few NixOS devs, notably onny
(fromDb "project-insanity.org" // tech)
## Vitalik Buterin
(mkText "https://vitalik.ca/feed.xml" // tech // infrequent)
(fromDb "vitalik.ca" // tech)
## ian (Sanctuary)
(mkText "https://sagacioussuricata.com/feed.xml" // tech // infrequent)
(fromDb "sagacioussuricata.com" // tech)
## Bunnie Juang
(mkText "https://www.bunniestudios.com/blog/?feed=rss2" // tech // infrequent)
(mkText "https://blog.danieljanus.pl/atom.xml" // tech // infrequent)
(mkText "https://ianthehenry.com/feed.xml" // tech // infrequent)
(mkText "https://bitbashing.io/feed.xml" // tech // infrequent)
(mkText "https://idiomdrottning.org/feed.xml" // uncat // daily)
(fromDb "bunniestudios.com" // tech)
(fromDb "blog.danieljanus.pl" // tech)
(fromDb "ianthehenry.com" // tech)
(fromDb "bitbashing.io" // tech)
(fromDb "idiomdrottning.org" // uncat)
(mkText "https://anish.lakhwara.com/home.html" // tech // weekly)
(mkText "https://www.jefftk.com/news.rss" // tech // daily)
(mkText "https://pomeroyb.com/feed.xml" // tech // infrequent)
(fromDb "jefftk.com" // tech)
(fromDb "pomeroyb.com" // tech)
# (TECH; POL) COMMENTATORS
## Matt Webb -- engineering-ish, but dreamy
(fromDb "interconnected.org/home/feed" // rat)
(fromDb "edwardsnowden.substack.com" // pol // text)
## Julia Evans
(mkText "https://jvns.ca/atom.xml" // tech // weekly)
(mkText "http://benjaminrosshoffman.com/feed" // pol // weekly)
## Ben Thompson
(mkText "https://www.stratechery.com/rss" // pol // weekly)
## Balaji
(mkText "https://balajis.com/rss" // pol // weekly)
(mkText "https://www.ben-evans.com/benedictevans/rss.xml" // pol // weekly)
(mkText "https://www.lynalden.com/feed" // pol // infrequent)
(mkText "https://austinvernon.site/rss.xml" // tech // infrequent)
(fromDb "balajis.com" // pol)
(fromDb "ben-evans.com/benedictevans" // pol)
(fromDb "lynalden.com" // pol)
(fromDb "austinvernon.site" // tech)
(mkSubstack "oversharing" // pol // daily)
(mkSubstack "doomberg" // tech // weekly)
## David Rosenthal
(mkText "https://blog.dshr.org/rss.xml" // pol // weekly)
(fromDb "blog.dshr.org" // pol)
## Matt Levine
(mkText "https://www.bloomberg.com/opinion/authors/ARbTQlRLRjE/matthew-s-levine.rss" // pol // weekly)
(mkText "https://stpeter.im/atom.xml" // pol // weekly)
(fromDb "stpeter.im/atom.xml" // pol)
## Peter Saint-Andre -- side project of stpeter.im
(fromDb "philosopher.coach" // rat)
# RATIONALITY/PHILOSOPHY/ETC
(mkSubstack "samkriss" // humor // infrequent)
(mkText "https://unintendedconsequenc.es/feed" // rat // infrequent)
(mkText "https://applieddivinitystudies.com/atom.xml" // rat // weekly)
(mkText "https://slimemoldtimemold.com/feed.xml" // rat // weekly)
(mkText "https://www.richardcarrier.info/feed" // rat // weekly)
(mkText "https://www.gwern.net/feed.xml" // uncat // infrequent)
(fromDb "unintendedconsequenc.es" // rat)
(fromDb "applieddivinitystudies.com" // rat)
(fromDb "slimemoldtimemold.com" // rat)
(fromDb "richardcarrier.info" // rat)
(fromDb "gwern.net" // rat)
## Jason Crawford
(mkText "https://rootsofprogress.org/feed.xml" // rat // weekly)
(fromDb "rootsofprogress.org" // rat)
## Robin Hanson
(mkText "https://www.overcomingbias.com/feed" // rat // daily)
(fromDb "overcomingbias.com" // rat)
## Scott Alexander
(mkSubstack "astralcodexten" // rat // daily)
## Paul Christiano
(mkText "https://sideways-view.com/feed" // rat // infrequent)
(fromDb "sideways-view.com" // rat)
## Sean Carroll
(mkText "https://www.preposterousuniverse.com/rss" // rat // infrequent)
(fromDb "preposterousuniverse.com" // rat)
## mostly dating topics. not advice, or humor, but looking through a social lens
(mkText "https://putanumonit.com/feed" // rat // infrequent)
(fromDb "putanumonit.com" // rat)
# CODE
# (mkText "https://github.com/Kaiteki-Fedi/Kaiteki/commits/master.atom" // tech // infrequent)
];
images = [
(mkImg "https://www.smbc-comics.com/comic/rss" // humor // daily)
(mkImg "https://xkcd.com/atom.xml" // humor // daily)
(mkImg "https://pbfcomics.com/feed" // humor // infrequent)
(fromDb "smbc-comics.com" // img // humor)
(fromDb "xkcd.com" // img // humor)
(fromDb "pbfcomics.com" // img // humor)
# (mkImg "http://dilbert.com/feed" // humor // daily)
# ART
(mkImg "https://miniature-calendar.com/feed" // art // daily)
(fromDb "miniature-calendar.com" // img // art // daily)
];
in
{

View File

@@ -5,7 +5,7 @@ lib.mkIf config.sane.home-manager.enable
{
sops.secrets."aerc_accounts" = {
owner = config.users.users.colin.name;
sopsFile = ../../secrets/universal/aerc_accounts.conf;
sopsFile = ../../../secrets/universal/aerc_accounts.conf;
format = "binary";
};
sane.fs."/home/colin/.config/aerc/accounts.conf" = sane-lib.fs.wantedSymlinkTo config.sops.secrets.aerc_accounts.path;

View File

@@ -0,0 +1,23 @@
{ ... }:
{
imports = [
./aerc.nix
./firefox.nix
./gfeeds.nix
./git.nix
./gpodder.nix
./keyring.nix
./kitty.nix
./libreoffice.nix
./mime.nix
./mpv.nix
./neovim.nix
./newsflash.nix
./splatmoji.nix
./ssh.nix
./sublime-music.nix
./vlc.nix
./xdg-dirs.nix
./zsh
];
}

View File

@@ -32,6 +32,18 @@ let
defaultSettings = firefoxSettings;
# defaultSettings = librewolfSettings;
addon = name: extid: hash: pkgs.fetchFirefoxAddon {
inherit name hash;
url = "https://addons.mozilla.org/firefox/downloads/latest/${name}/latest.xpi";
# extid can be found by unar'ing the above xpi, and copying browser_specific_settings.gecko.id field
fixedExtid = extid;
};
localAddon = pkg: pkgs.fetchFirefoxAddon {
inherit (pkg) name;
src = "${pkg}/share/mozilla/extensions/\\{ec8030f7-c20a-464f-9b0e-13a3a9e97384\\}/${pkg.extid}.xpi";
fixedExtid = pkg.extid;
};
package = pkgs.wrapFirefox cfg.browser.browser {
# inherit the default librewolf.cfg
# it can be further customized via ~/.librewolf/librewolf.overrides.cfg
@@ -41,32 +53,7 @@ let
extraNativeMessagingHosts = [ pkgs.browserpass ];
# extraNativeMessagingHosts = [ pkgs.gopass-native-messaging-host ];
nixExtensions = let
addon = name: extid: hash: pkgs.fetchFirefoxAddon {
inherit name hash;
url = "https://addons.mozilla.org/firefox/downloads/latest/${name}/latest.xpi";
# extid can be found by unar'ing the above xpi, and copying browser_specific_settings.gecko.id field
fixedExtid = extid;
};
localAddon = pkg: pkgs.fetchFirefoxAddon {
inherit (pkg) name;
src = "${pkg}/share/mozilla/extensions/\\{ec8030f7-c20a-464f-9b0e-13a3a9e97384\\}/${pkg.extid}.xpi";
fixedExtid = pkg.extid;
};
in [
# get names from:
# - ~/ref/nix-community/nur-combined/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix
# `wget ...xpi`; `unar ...xpi`; `cat */manifest.json | jq '.browser_specific_settings.gecko.id'`
(addon "ublock-origin" "uBlock0@raymondhill.net" "sha256-a/ivUmY1P6teq9x0dt4CbgHt+3kBsEMMXlOfZ5Hx7cg=")
(addon "sponsorblock" "sponsorBlocker@ajay.app" "sha256-d2K3ufvurWnYVzqLbyR//MgejybkY9exitAf9RdLNRo=")
(addon "bypass-paywalls-clean" "{d133e097-46d9-4ecc-9903-fa6a722a6e0e}" "sha256-JOj5P7c2JTTReHCRZXm4BscaGr3i+9Y4Ey/y621x8PI=")
(addon "sidebery" "{3c078156-979c-498b-8990-85f7987dd929}" "sha256-YONfK/rIjlsrTgRHIt3km07Q7KnpIW89Z9r92ZSCc6w=")
(addon "ether-metamask" "webextension@metamask.io" "sha256-G+MwJDOcsaxYSUXjahHJmkWnjLeQ0Wven8DU/lGeMzA=")
(addon "ublacklist" "@ublacklist" "sha256-RqY5iHzbL2qizth7aguyOKWPyINXmrwOlf/OsfqAS48=")
(addon "i2p-in-private-browsing" "i2ppb@eyedeekay.github.io" "sha256-dJcJ3jxeAeAkRvhODeIVrCflvX+S4E0wT/PyYzQBQWs=")
# (addon "browserpass-ce" "browserpass@maximbaz.com" "sha256-sXgUBbRvMnRpeIW1MTkmTcoqtW/8RDXAkxAq1evFkpc=")
(localAddon pkgs.browserpass-extension)
];
nixExtensions = concatMap (ext: optional ext.enable ext.package) (attrValues cfg.addons);
extraPolicies = {
NoDefaultBookmarks = true;
@@ -102,6 +89,17 @@ let
# NewTabPage = true;
};
};
addonOpts = types.submodule {
options = {
package = mkOption {
type = types.package;
};
enable = mkOption {
type = types.bool;
};
};
};
in
{
options = {
@@ -119,6 +117,32 @@ in
type = types.nullOr types.str;
default = "cryptClearOnBoot";
};
sane.web-browser.addons = mkOption {
type = types.attrsOf addonOpts;
default = {
# get names from:
# - ~/ref/nix-community/nur-combined/repos/rycee/pkgs/firefox-addons/generated-firefox-addons.nix
# `wget ...xpi`; `unar ...xpi`; `cat */manifest.json | jq '.browser_specific_settings.gecko.id'`
# browserpass-ce.package = addon "browserpass-ce" "browserpass@maximbaz.com" "sha256-sXgUBbRvMnRpeIW1MTkmTcoqtW/8RDXAkxAq1evFkpc=";
browserpass-extension.package = localAddon pkgs.browserpass-extension;
bypass-paywalls-clean.package = addon "bypass-paywalls-clean" "{d133e097-46d9-4ecc-9903-fa6a722a6e0e}" "sha256-JOj5P7c2JTTReHCRZXm4BscaGr3i+9Y4Ey/y621x8PI=";
ether-metamask.package = addon "ether-metamask" "webextension@metamask.io" "sha256-G+MwJDOcsaxYSUXjahHJmkWnjLeQ0Wven8DU/lGeMzA=";
i2p-in-private-browsing.package = addon "i2p-in-private-browsing" "i2ppb@eyedeekay.github.io" "sha256-dJcJ3jxeAeAkRvhODeIVrCflvX+S4E0wT/PyYzQBQWs=";
sidebery.package = addon "sidebery" "{3c078156-979c-498b-8990-85f7987dd929}" "sha256-YONfK/rIjlsrTgRHIt3km07Q7KnpIW89Z9r92ZSCc6w=";
sponsorblock.package = addon "sponsorblock" "sponsorBlocker@ajay.app" "sha256-d2K3ufvurWnYVzqLbyR//MgejybkY9exitAf9RdLNRo=";
ublacklist.package = addon "ublacklist" "@ublacklist" "sha256-RqY5iHzbL2qizth7aguyOKWPyINXmrwOlf/OsfqAS48=";
ublock-origin.package = addon "ublock-origin" "uBlock0@raymondhill.net" "sha256-a/ivUmY1P6teq9x0dt4CbgHt+3kBsEMMXlOfZ5Hx7cg=";
browserpass-extension.enable = lib.mkDefault true;
bypass-paywalls-clean.enable = lib.mkDefault true;
ether-metamask.enable = lib.mkDefault true;
i2p-in-private-browsing.enable = lib.mkDefault config.services.i2p.enable;
sidebery.enable = lib.mkDefault true;
sponsorblock.enable = lib.mkDefault true;
ublacklist.enable = lib.mkDefault true;
ublock-origin.enable = lib.mkDefault true;
};
};
};
config = lib.mkIf config.sane.home-manager.enable {
@@ -149,13 +173,27 @@ in
'';
sane.packages.extraGuiPkgs = [ package ];
# flood the cache to disk to avoid it taking up too much tmp
# flush the cache to disk to avoid it taking up too much tmp
sane.persist.home.byPath."${cfg.browser.cacheDir}" = lib.mkIf (cfg.persistCache != null) {
store = cfg.persistCache;
};
sane.persist.home.byPath."${cfg.browser.dotDir}" = lib.mkIf (cfg.persistData != null) {
sane.persist.home.byPath."${cfg.browser.dotDir}/default" = lib.mkIf (cfg.persistData != null) {
store = cfg.persistData;
};
sane.fs."/home/colin/${cfg.browser.dotDir}/default" = sane-lib.fs.wantedDir;
# instruct Firefox to put the profile in a predictable directory (so we can do things like persist just it).
# XXX: the directory *must* exist, even if empty; Firefox will not create the directory itself.
sane.fs."/home/colin/${cfg.browser.dotDir}/profiles.ini" = sane-lib.fs.wantedText ''
[Profile0]
Name=default
IsRelative=1
Path=default
Default=1
[General]
StartWithLastProfile=1
'';
};
}

19
hosts/common/home/git.nix Normal file
View File

@@ -0,0 +1,19 @@
{ config, lib, pkgs, sane-lib, ... }:
let
mkCfg = lib.generators.toINI { };
in
lib.mkIf config.sane.home-manager.enable
{
sane.fs."/home/colin/.config/git/config" = sane-lib.fs.wantedText (mkCfg {
user.name = "Colin";
user.email = "colin@uninsane.org";
alias.co = "checkout";
# difftastic docs:
# - <https://difftastic.wilfred.me.uk/git.html>
diff.tool = "difftastic";
difftool.prompt = false;
"difftool \"difftastic\"".cmd = ''${pkgs.difftastic}/bin/difft "$LOCAL" "$REMOTE"'';
# now run `git difftool` to use difftastic git
});
}

View File

@@ -5,7 +5,7 @@ lib.mkIf config.sane.home-manager.enable
sane.persist.home.private = [ ".local/share/keyrings" ];
sane.fs."/home/colin/private/.local/share/keyrings/default" = {
generated.script.script = builtins.readFile ../../scripts/init-keyring;
generated.script.script = builtins.readFile ../../../scripts/init-keyring;
wantedBy = [ config.sane.fs."/home/colin/private".unit ];
};
}

View File

@@ -0,0 +1,69 @@
{ config, lib, pkgs, sane-lib, ... }:
lib.mkIf config.sane.home-manager.enable
{
sane.fs."/home/colin/.config/kitty/kitty.conf" = sane-lib.fs.wantedText ''
# docs: https://sw.kovidgoyal.net/kitty/conf/
# disable terminal bell (when e.g. you backspace too many times)
enable_audio_bell no
map ctrl+n new_os_window_with_cwd
include ${pkgs.kitty-themes}/themes/PaperColor_dark.conf
'';
# THEME CHOICES:
# docs: https://github.com/kovidgoyal/kitty-themes
# theme = "1984 Light"; # dislike: awful, harsh blues/teals
# theme = "Adventure Time"; # dislike: harsh (dark)
# theme = "Atom One Light"; # GOOD: light theme. all color combos readable. not a huge fan of the blue.
# theme = "Belafonte Day"; # dislike: too low contrast for text colors
# theme = "Belafonte Night"; # better: dark theme that's easy on the eyes. all combos readable. low contrast.
# theme = "Catppuccin"; # dislike: a bit pale/low-contrast (dark)
# theme = "Desert"; # mediocre: colors are harsh
# theme = "Earthsong"; # BEST: dark theme. readable, good contrast. unique, but decent colors.
# theme = "Espresso Libre"; # better: dark theme. readable, but meh colors
# theme = "Forest Night"; # decent: very pastel. it's workable, but unconventional and muted/flat.
# theme = "Gruvbox Material Light Hard"; # mediocre light theme.
# theme = "kanagawabones"; # better: dark theme. colors are too background-y
# theme = "Kaolin Dark"; # dislike: too dark
# theme = "Kaolin Breeze"; # mediocre: not-too-harsh light theme, but some parts are poor contrast
# theme = "Later This Evening"; # mediocre: not-too-harsh dark theme, but cursor is poor contrast
# theme = "Material"; # decent: light theme, few colors.
# theme = "Mayukai"; # decent: not-too-harsh dark theme. the teal is a bit straining
# theme = "Nord"; # mediocre: pale background, low contrast
# theme = "One Half Light"; # better: not-too-harsh light theme. contrast could be better
# theme = "PaperColor Dark"; # BEST: dark theme, very readable still the colors are background-y
# theme = "Parasio Dark"; # dislike: too low contrast
# theme = "Pencil Light"; # better: not-too-harsh light theme. decent contrast.
# theme = "Pnevma"; # dislike: too low contrast
# theme = "Piatto Light"; # better: readable light theme. pleasing colors. powerline prompt is hard to read.
# theme = "Rosé Pine Dawn"; # GOOD: light theme. all color combinations are readable. it is very mild -- may need to manually tweak contrast. tasteful colors
# theme = "Rosé Pine Moon"; # GOOD: dark theme. tasteful colors. but background is a bit intense
# theme = "Sea Shells"; # mediocre. not all color combos are readable
# theme = "Solarized Light"; # mediocre: not-too-harsh light theme; GREAT background; but some colors are low contrast
# theme = "Solarized Dark Higher Contrast"; # better: dark theme, decent colors
# theme = "Sourcerer"; # mediocre: ugly colors
# theme = "Space Gray"; # mediocre: too muted
# theme = "Space Gray Eighties"; # better: all readable, decent colors
# theme = "Spacemacs"; # mediocre: too muted
# theme = "Spring"; # mediocre: readable light theme, but the teal is ugly.
# theme = "Srcery"; # better: highly readable. colors are ehhh
# theme = "Substrata"; # decent: nice colors, but a bit flat.
# theme = "Sundried"; # mediocre: the solar text makes me squint
# theme = "Symfonic"; # mediocre: the dark purple has low contrast to the black bg.
# theme = "Tango Light"; # dislike: teal is too grating
# theme = "Tokyo Night Day"; # medicore: too muted
# theme = "Tokyo Night"; # better: tasteful. a bit flat
# theme = "Tomorrow"; # GOOD: all color combinations are readable. contrast is slightly better than Rose. on the blander side
# theme = "Treehouse"; # dislike: the orange is harsh on my eyes.
# theme = "Urple"; # dislike: weird palette
# theme = "Warm Neon"; # decent: not-too-harsh dark theme. the green is a bit unattractive
# theme = "Wild Cherry"; # GOOD: dark theme: nice colors. a bit flat
# theme = "Xcodedark"; # dislike: bad palette
# theme = "citylights"; # decent: dark theme. some parts have just a bit low contrast
# theme = "neobones_light"; # better light theme. the background is maybe too muted
# theme = "vimbones";
# theme = "zenbones_dark"; # mediocre: readable, but meh colors
# theme = "zenbones_light"; # decent: light theme. all colors are readable. contrast is passable but not excellent. highlight color is BAD
# theme = "zenwritten_dark"; # mediocre: looks same as zenbones_dark
}

View File

@@ -0,0 +1,15 @@
{ config, lib, sane-lib, ... }:
lib.mkIf config.sane.home-manager.enable
{
# libreoffice: disable first-run stuff
sane.fs."/home/colin/.config/libreoffice/4/user/registrymodifications.xcu" = sane-lib.fs.wantedText ''
<?xml version="1.0" encoding="UTF-8"?>
<oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="FirstRun" oor:op="fuse"><value>false</value></prop></item>
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="ShowTipOfTheDay" oor:op="fuse"><value>false</value></prop></item>
</oor:items>
'';
# <item oor:path="/org.openoffice.Setup/Product"><prop oor:name="LastTimeDonateShown" oor:op="fuse"><value>1667693880</value></prop></item>
# <item oor:path="/org.openoffice.Setup/Product"><prop oor:name="LastTimeGetInvolvedShown" oor:op="fuse"><value>1667693880</value></prop></item>
}

View File

@@ -0,0 +1,43 @@
{ config, lib, sane-lib, ...}:
let
www = config.sane.web-browser.browser.desktop;
pdf = "org.gnome.Evince.desktop";
md = "obsidian.desktop";
thumb = "org.gnome.gThumb.desktop";
video = "vlc.desktop";
# audio = "mpv.desktop";
audio = "vlc.desktop";
in
lib.mkIf config.sane.home-manager.enable
{
# the xdg mime type for a file can be found with:
# - `xdg-mime query filetype path/to/thing.ext`
# we can have single associations or a list of associations.
# there's also options to *remove* [non-default] associations from specific apps
xdg.mime.enable = true;
xdg.mime.defaultApplications = {
# AUDIO
"audio/flac" = audio;
"audio/mpeg" = audio;
"audio/x-vorbis+ogg" = audio;
# IMAGES
"image/heif" = thumb; # apple codec
"image/png" = thumb;
"image/jpeg" = thumb;
# VIDEO
"video/mp4" = video;
"video/quicktime" = video;
"video/x-matroska" = video;
# HTML
"text/html" = www;
"x-scheme-handler/http" = www;
"x-scheme-handler/https" = www;
"x-scheme-handler/about" = www;
"x-scheme-handler/unknown" = www;
# RICH-TEXT DOCUMENTS
"application/pdf" = pdf;
"text/markdown" = md;
};
}

11
hosts/common/home/mpv.nix Normal file
View File

@@ -0,0 +1,11 @@
{ config, lib, sane-lib, ... }:
lib.mkIf config.sane.home-manager.enable
{
# format is <key>=%<length>%<value>
sane.fs."/home/colin/.config/mpv/mpv.conf" = sane-lib.fs.wantedText ''
save-position-on-quit=%3%yes
keep-open=%3%yes
'';
}

View File

@@ -0,0 +1,130 @@
{ config, lib, pkgs, ... }:
let
inherit (builtins) map;
inherit (lib) concatMapStrings optionalString;
# this structure roughly mirrors home-manager's `programs.neovim.plugins` option
plugins = with pkgs.vimPlugins; [
# docs: surround-nvim: https://github.com/ur4ltz/surround.nvim/
# docs: vim-surround: https://github.com/tpope/vim-surround
{ plugin = vim-surround; }
# docs: fzf-vim (fuzzy finder): https://github.com/junegunn/fzf.vim
{ plugin = fzf-vim; }
({
# docs: tex-conceal-vim: https://github.com/KeitaNakamura/tex-conceal.vim/
plugin = tex-conceal-vim;
type = "viml";
config = ''
" present prettier fractions
let g:tex_conceal_frac=1
'';
})
({
plugin = vim-SyntaxRange;
type = "viml";
config = ''
" enable markdown-style codeblock highlighting for tex code
autocmd BufEnter * call SyntaxRange#Include('```tex', '```', 'tex', 'NonText')
" autocmd Syntax tex set conceallevel=2
'';
})
({
# treesitter syntax highlighting: https://nixos.wiki/wiki/Tree_sitters
# docs: https://github.com/nvim-treesitter/nvim-treesitter
# config taken from: https://github.com/i077/system/blob/master/modules/home/neovim/default.nix
# this is required for tree-sitter to even highlight
plugin = nvim-treesitter.withAllGrammars;
type = "lua";
config = ''
require'nvim-treesitter.configs'.setup {
highlight = {
enable = true,
-- disable treesitter on Rust so that we can use SyntaxRange
-- and leverage TeX rendering in rust projects
disable = { "rust", "tex", "latex" },
-- disable = { "tex", "latex" },
-- true to also use builtin vim syntax highlighting when treesitter fails
additional_vim_regex_highlighting = false
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "gnn",
node_incremental = "grn",
mcope_incremental = "grc",
node_decremental = "grm"
}
},
indent = {
enable = true,
disable = {}
}
}
vim.o.foldmethod = 'expr'
vim.o.foldexpr = 'nvim_treesitter#foldexpr()'
'';
})
];
plugin-packages = map (p: p.plugin) plugins;
plugin-config-tex = concatMapStrings (p: optionalString (p.type or "" == "viml") p.config) plugins;
plugin-config-lua = concatMapStrings (p: optionalString (p.type or "" == "lua") p.config) plugins;
in
lib.mkIf config.sane.home-manager.enable
{
# private because there could be sensitive things in the swap
sane.persist.home.private = [ ".cache/vim-swap" ];
programs.neovim = {
# neovim: https://github.com/neovim/neovim
enable = true;
viAlias = true;
vimAlias = true;
configure = {
packages.myVimPackage = {
start = plugin-packages;
};
customRC = ''
" let the terminal handle mouse events, that way i get OS-level ctrl+shift+c/etc
" this used to be default, until <https://github.com/neovim/neovim/pull/19290>
set mouse=
" copy/paste to system clipboard
set clipboard=unnamedplus
" screw tabs; always expand them into spaces
set expandtab
" at least don't open files with sections folded by default
set nofoldenable
" allow text substitutions for certain glyphs.
" higher number = more aggressive substitution (0, 1, 2, 3)
" i only make use of this for tex, but it's unclear how to
" apply that *just* to tex and retain the SyntaxRange stuff.
set conceallevel=2
" horizontal rule under the active line
" set cursorline
" highlight trailing space & related syntax errors (doesn't seem to work??)
" let c_space_errors=1
" let python_space_errors=1
" enable highlighting of leading/trailing spaces,
" and especially tabs
" source: https://www.reddit.com/r/neovim/comments/chlmfk/highlight_trailing_whitespaces_in_neovim/
set list
set listchars=tab:\·,trail:·,extends:,precedes:,nbsp:
""""" PLUGIN CONFIG (tex)
${plugin-config-tex}
""""" PLUGIN CONFIG (lua)
lua <<EOF
${plugin-config-lua}
EOF
'';
};
};
}

View File

@@ -5,7 +5,7 @@ lib.mkIf config.sane.home-manager.enable
# TODO: this should only be shipped on gui platforms
sops.secrets."sublime_music_config" = {
owner = config.users.users.colin.name;
sopsFile = ../../secrets/universal/sublime_music_config.json.bin;
sopsFile = ../../../secrets/universal/sublime_music_config.json.bin;
format = "binary";
};
sane.fs."/home/colin/.config/sublime-music/config.json" = sane-lib.fs.wantedSymlinkTo config.sops.secrets.sublime_music_config.path;

View File

@@ -0,0 +1,21 @@
{ config, lib, sane-lib, ...}:
lib.mkIf config.sane.home-manager.enable
{
# XDG defines things like ~/Desktop, ~/Downloads, etc.
# these clutter the home, so i mostly don't use them.
sane.fs."/home/colin/.config/user-dirs.dirs" = sane-lib.fs.wantedText ''
XDG_DESKTOP_DIR="$HOME/.xdg/Desktop"
XDG_DOCUMENTS_DIR="$HOME/dev"
XDG_DOWNLOAD_DIR="$HOME/tmp"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_PUBLICSHARE_DIR="$HOME/.xdg/Public"
XDG_TEMPLATES_DIR="$HOME/.xdg/Templates"
XDG_VIDEOS_DIR="$HOME/Videos"
'';
# prevent `xdg-user-dirs-update` from overriding/updating our config
# see <https://manpages.ubuntu.com/manpages/bionic/man5/user-dirs.conf.5.html>
sane.fs."/home/colin/.config/user-dirs.conf" = sane-lib.fs.wantedText "enabled=False";
}

View File

@@ -0,0 +1,141 @@
{ config, lib, pkgs, sane-lib, ... }:
let
# powerlevel10k prompt config
# p10k.zsh is the auto-generated config, and i overwrite those defaults here, below.
p10k-overrides = ''
# powerlevel10k launches a gitstatusd daemon to accelerate git prompt queries.
# this keeps open file handles for any git repo i touch for 60 minutes (by default).
# that prevents unmounting whatever device the git repo is on -- particularly problematic for ~/private.
# i can disable gitstatusd and get slower fallback git queries:
# - either universally
# - or selectively by path
# see: <https://github.com/romkatv/powerlevel10k/issues/246>
typeset -g POWERLEVEL9K_VCS_DISABLED_DIR_PATTERN='(/home/colin/private/*|/home/colin/knowledge/*)'
# typeset -g POWERLEVEL9K_DISABLE_GITSTATUS=true
# show user@host also when logged into the current machine.
# default behavior is to show it only over ssh.
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION='$P9K_CONTENT'
'';
prezto-init = ''
source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source ${pkgs.zsh-prezto}/share/zsh-prezto/init.zsh
'';
in
lib.mkIf config.sane.home-manager.enable
{
sane.persist.home.plaintext = [
# we don't need to full zsh dir -- just the history file --
# but zsh will sometimes backup the history file and we get fewer errors if we do proper mounts instead of symlinks.
# TODO: should be private?
".local/share/zsh"
# cache gitstatus otherwise p10k fetched it from the net EVERY BOOT
".cache/gitstatus"
];
# zsh/prezto complains if zshrc doesn't exist; but it does allow an "empty" file.
sane.fs."/home/colin/.config/zsh/.zshrc" = sane-lib.fs.wantedText "# ";
programs.zsh = {
enable = true;
histFile = "$HOME/.local/share/zsh/history";
shellAliases = {
":q" = "exit";
# common typos
"cd.." = "cd ..";
"cd../" = "cd ../";
};
setOptions = [
# defaults:
"HIST_IGNORE_DUPS"
"SHARE_HISTORY"
"HIST_FCNTL_LOCK"
# disable `rm *` confirmations
"rmstarsilent"
];
# .zshenv config:
shellInit = ''
ZDOTDIR=$HOME/.config/zsh
'';
# .zshrc config:
interactiveShellInit =
(builtins.readFile ./p10k.zsh)
+ p10k-overrides
+ prezto-init
+ ''
# zmv is a way to do rich moves/renames, with pattern matching/substitution.
# see for an example: <https://filipe.kiss.ink/zmv-zsh-rename/>
autoload -Uz zmv
HISTORY_IGNORE='(sane-shutdown *|sane-reboot *|rm *)'
# extra aliases
# TODO: move to `shellAliases` config?
function nd() {
mkdir -p "$1";
pushd "$1";
}
# auto-cd into any of these dirs by typing them and pressing 'enter':
hash -d 3rd="/home/colin/dev/3rd"
hash -d dev="/home/colin/dev"
hash -d knowledge="/home/colin/knowledge"
hash -d nixos="/home/colin/nixos"
hash -d nixpkgs="/home/colin/dev/3rd/nixpkgs"
hash -d ref="/home/colin/ref"
hash -d secrets="/home/colin/knowledge/secrets"
hash -d tmp="/home/colin/tmp"
hash -d uninsane="/home/colin/dev/uninsane"
hash -d Videos="/home/colin/Videos"
'';
syntaxHighlighting.enable = true;
vteIntegration = true;
};
# enable a command-not-found hook to show nix packages that might provide the binary typed.
programs.nix-index.enable = true;
programs.command-not-found.enable = false; #< mutually exclusive with nix-index
# prezto = oh-my-zsh fork; controls prompt, auto-completion, etc.
# see: https://github.com/sorin-ionescu/prezto
# i believe this file is auto-sourced by the prezto init.zsh script.
sane.fs."/home/colin/.config/zsh/.zpreztorc" = sane-lib.fs.wantedText ''
zstyle ':prezto:*:*' color 'yes'
# modules (they ship with prezto):
# ENVIRONMENT: configures jobs to persist after shell exit; other basic niceties
# TERMINAL: auto-titles terminal (e.g. based on cwd)
# EDITOR: configures shortcuts like Ctrl+U=undo, Ctrl+L=clear
# HISTORY: `history-stat` alias, setopts for good history defaults
# DIRECTORY: sets AUTO_CD, adds `d` alias to list directory stack, and `1`-`9` to cd that far back the stack
# SPECTRUM: helpers for term colors and styling. used by prompts? might be unnecessary
# UTILITY: configures aliases like `ll`, `la`, disables globbing for things like rsync
# adds aliases like `get` to fetch a file. also adds `http-serve` alias??
# COMPLETION: tab completion. requires `utility` module prior to loading
# TODO: enable AUTO_PARAM_SLASH
zstyle ':prezto:load' pmodule \
'environment' \
'terminal' \
'editor' \
'history' \
'directory' \
'spectrum' \
'utility' \
'completion' \
'prompt'
# default keymap. try also `vicmd` (vim normal mode, AKA "cmd mode") or `vi`.
zstyle ':prezto:module:editor' key-bindings 'emacs'
zstyle ':prezto:module:prompt' theme 'powerlevel10k'
# disable `mv` confirmation (and `rm`, too, unfortunately)
zstyle ':prezto:module:utility' safe-ops 'no'
'';
}

View File

@@ -1,4 +1,4 @@
{ ... }:
{
services.i2p.enable = true;
# services.i2p.enable = true;
}

View File

@@ -87,6 +87,7 @@ in
"Videos"
".cache/nix"
".cache/nix-index"
".cargo"
".rustup"
];

View File

@@ -1,11 +1,21 @@
{ config, lib, ... }:
{
# if using router's DNS, these mappings will already exist.
# if using a different DNS provider (which servo does), then we need to explicity provide them.
# ugly hack. would be better to get servo to somehow use the router's DNS
networking.hosts = lib.mapAttrs' (host: cfg: {
name = cfg.lan-ip;
value = [ host ];
}) config.sane.hosts.by-name;
# give each host a shortname that all the other hosts know, to allow easy comms.
networking.hosts = lib.mkMerge [
(lib.mapAttrs' (host: cfg: {
# bare-name for LAN addresses
# if using router's DNS, these mappings will already exist.
# if using a different DNS provider (which servo does), then we need to explicity provide them.
# ugly hack. would be better to get servo to somehow use the router's DNS
name = cfg.lan-ip;
value = [ host ];
}) config.sane.hosts.by-name)
(lib.mapAttrs' (host: cfg: {
# -hn suffixed name for communication over my wg-home VPN.
# hn = "home network"
name = cfg.wg-home.ip;
value = [ "${host}-hn" ];
}) config.sane.hosts.by-name)
];
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 208377,
"content_type": "application/xml; charset=utf-8",
"description": "applieddivinitystudies@gmail.com",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 20,
"last_updated": "2022-12-20T01:23:44.546000+00:00",
"score": 26,
"self_url": "https://applieddivinitystudies.com/atom.xml",
"site_name": "Applied Divinity Studies",
"site_url": "https://applieddivinitystudies.com",
"title": "Applied Divinity Studies",
"url": "https://applieddivinitystudies.com/atom.xml",
"velocity": 0.079,
"version": "atom10"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 19245,
"content_type": "text/xml; charset=utf-8",
"description": "Austin Vernon's Blog",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 42,
"last_updated": "2023-01-05T00:00:00+00:00",
"score": 24,
"self_url": "",
"site_name": "Austin Vernon - Austin Vernon's Blog",
"site_url": "https://austinvernon.site",
"title": "Austin Vernon",
"url": "https://austinvernon.site/rss.xml",
"velocity": 0.063,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 453506,
"content_type": "text/xml; charset=utf-8",
"description": "Balaji Srinivasan's personal blog. Formerly CTO of Coinbase and General Partner at a16z, @balajis is an investor and founder.",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 15,
"last_updated": "2022-04-28T18:22:11+00:00",
"score": 16,
"self_url": "https://balajis.com/rss/",
"site_name": "Balaji Srinivasan",
"site_url": "https://balajis.com",
"title": "Balaji Srinivasan",
"url": "https://balajis.com/rss/",
"velocity": 0.01,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 213052,
"content_type": "application/rss+xml; charset=utf-8",
"description": "",
"favicon": "https://images.squarespace-cdn.com/content/v1/50363cf324ac8e905e7df861/ebdb4645-db93-4967-881d-db698ee59c2c/favicon.ico?format=100w",
"favicon_data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAB4FBMVEUAAADmRjIBAADmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjLmRjL///8mIgRMAAAAnnRSTlMAAAA6W1pZTTESpvnryogzAeaCFKwboQv38vP6X449P0FPe8b8vw5mhe02aAif/VhCZx/h4PVD1xwEmQVt3i1uBwwWPpv0Ybu8vtLx7m/JSf5IniT28DWLOTxAUX3EzSgXaXJxc0URa+elCjSdnKLWGewykUv4VSB87zgmHs8iKbZlCbFXhLfHGOpKY9VTjaOuUDAG2tvLGidGL+iWJUyE2tMAAAJwSURBVHja7df5U1JRGMZxnxItw6Q0FdTCoowyWiSJMLXQrMAyU9ojWxQFc8+MijYL23db+VsbTsCZC9xkbu9JnTnfH58Z+MywvAN5MplMJpPJFjuoRoqszNelVVC4ajUpAxTFMlqjL15bYgAEIbx160sBUQivbAMgCuGVVwCkSKUxmakq9dZUEyM1GzclMtdu3mKJsbZuo0XqAF7p9ko2WnfQIjvBJ6B+FxttuwUgfNxjYuteeoSHfQ1srRaL2OPj/kaBCGA2xkfHAXEI4DzIxhoDNQKeq4m974eaQYu0tFYkOnzE3dYen0xHqW+Xo+NYouMnPGzxdjqFH8iTpwzCT31Xx+lWiD/1pu4zAEiRnt5UqVtf7Esh+Fs5I2fPnU924eKly3+cK/7kM+Bq37XrWbtxE9pOPfoHAmwdHEoiQW9MpRA0fuMBnYcdr0IggVjVkGFNCFtdt9hc7hSA8LnAEp9HRjlC9XLxYGbna2xcgdh6rel5JjQjwORUfDa6FcjY7fFgWr7pf0DusHnmrgIJhJGZVgS4d5/N9gdKJAK6Xyvo746xHg5RIo8A3mP3ExtbbX2gREJPdYny62afJT+vz6NkiGpzL5ghFLG+NAhHXr1mhkik4U0YzFAgfmSWC/K2q0rZVLve8a4lYmCPVyI9ZW3DikIT0zkhJe9rlU02fhj9CE5wJEseXy5ItriwIGINIk97SwmZ8ZEjFvsnZZ+/NJMjc+7ovLKoixwJfEVGlIj6N14iEllGSBhZIkY8swNN6XV+o0TUKlrxH5DBZYZ4xb9c+D7yI5A9/U8ypP6XX6XIPAWw8P94mUwmk8lki95vmJ/g9Xmlv3QAAAAASUVORK5CYII=",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 20,
"last_updated": "2022-12-14T09:43:49+00:00",
"score": 8,
"self_url": "",
"site_name": "Benedict Evans",
"site_url": "https://www.ben-evans.com",
"title": "Essays - Benedict Evans",
"url": "https://www.ben-evans.com/benedictevans?format=rss",
"velocity": 0.033,
"version": "rss20"
}

View File

@@ -1,21 +0,0 @@
{
"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"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 339384,
"content_type": "application/xml; charset=utf-8",
"description": "Yet another programming blog. Thoughts on software and related misadventures.",
"favicon": "https://bitbashing.io/favicon.ico",
"favicon_data_uri": "data:image/png;base64,AAABAAEAEBACAAEAAQCwAAAAFgAAACgAAAAQAAAAIAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUFBQAAAAAAP//AAD//wAA7/8AAO//AADv/wAA7/8AAO//AADvAwAA7/8AAO8DAADv/wAA7/8AAO//AADv/wAA//8AAP//AAD//wAA//8AAO//AADv/wAA7/8AAO//AADv/wAA7wMAAO//AADvAwAA7/8AAO//AADv/wAA7/8AAP//AAD//wAA",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 10,
"last_updated": "2022-11-22T00:00:00+00:00",
"score": 20,
"self_url": "https://bitbashing.io/feed.xml",
"site_name": "Bit Bashing",
"site_url": "https://bitbashing.io",
"title": "Bit Bashing",
"url": "https://bitbashing.io/feed.xml",
"velocity": 0.003,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 1,
"content_length": 343256,
"content_type": "text/xml; charset=utf-8",
"description": null,
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 60,
"last_updated": "2022-11-07T00:00:00+00:00",
"score": -4,
"self_url": "",
"site_name": "Daniel Janus \u2013 blog",
"site_url": "https://blog.danieljanus.pl",
"title": "code \u00b7 words \u00b7 emotions: Daniel Janus\u2019s blog",
"url": "https://blog.danieljanus.pl/atom.xml",
"velocity": 0.011,
"version": "atom10"
}

View File

@@ -0,0 +1,23 @@
{
"bozo": 0,
"content_length": 623592,
"content_type": "application/atom+xml; charset=utf-8",
"description": "I'm David Rosenthal, and this is a place to discuss the work I'm doing in Digital Preservation.",
"favicon": "",
"favicon_data_uri": "",
"hubs": [
"http://pubsubhubbub.appspot.com/"
],
"is_podcast": false,
"is_push": true,
"item_count": 25,
"last_updated": "2023-01-10T17:59:42.157000+00:00",
"score": 20,
"self_url": "https://www.blogger.com/feeds/4503292949532760618/posts/default",
"site_name": "DSHR's Blog",
"site_url": "https://blog.dshr.org",
"title": "DSHR's Blog",
"url": "https://blog.dshr.org/feeds/posts/default",
"velocity": 0.35,
"version": "atom10"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 45559,
"content_type": "application/rss+xml; charset=utf-8",
"description": "bunnie's blog",
"favicon": "https://www.bunniestudios.com/favicon.ico",
"favicon_data_uri": "data:image/png;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAAFBQUADU1NQBdXV0AoKCgACYmJgBpaWkATk5OAIODgwAKCgoAfHx8ALi4uACxsbEAAgICAKOjowA+Pj4AAQEBAERERADy8vIABwcHABsbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAASAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAALAAAAAAAAAAAAABMAAAAAAAAAAAAAAAAABQAACgAAAAAPAAAAAAAAAAkAAAAAAAAOAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCQAAAAAAAAAAAAAAAAAAABANAAAAAAAAAAAAAAAAAP//AADAfQAAwTgAAMeZAADPnwAAz88AAM/PAADPzwAAz58AAMefAADDHwAAyD8AAM//AADP/wAAD/8AAA//AAA=",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 5,
"last_updated": "2023-01-04T15:49:57+00:00",
"score": 20,
"self_url": "https://www.bunniestudios.com/blog/?feed=rss2",
"site_name": " bunnie's blog",
"site_url": "https://www.bunniestudios.com",
"title": "bunnie's blog",
"url": "https://www.bunniestudios.com/blog/?feed=rss2",
"velocity": 0.114,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 15076852,
"content_type": "application/rss+xml; charset=utf-8",
"description": "Congressional Dish is a twice-monthly podcast that aims to draw attention to where the American people truly have power: Congress. From the perspective of a fed up taxpayer with no allegiance to any political party, Jennifer Briney will fill you in on the must-know information about what our representatives do AFTER the elections and how their actions can and will affect our day to day lives. \nHosted by @JenBriney. \n\nLinks to information sources available at www.congressionaldish.com",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": true,
"is_push": false,
"item_count": 269,
"last_updated": "2023-01-06T18:13:57+00:00",
"score": 0,
"self_url": "https://feeds.libsyn.com/39908/rss",
"site_name": "",
"site_url": "",
"title": "Congressional Dish",
"url": "https://feeds.libsyn.com/39908/rss",
"velocity": 0.071,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 140827,
"content_type": "application/rss+xml; charset=utf-8",
"description": "Latest gwern.net updates, interesting links, and reviews",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 14,
"last_updated": "2021-06-11T14:16:22+00:00",
"score": -6,
"self_url": "https://gwern.substack.com/feed",
"site_name": "",
"site_url": "",
"title": "Gwern.net Newsletter",
"url": "https://gwern.substack.com/feed",
"velocity": 0.032,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 359714,
"content_type": "text/xml; charset=utf-8",
"description": "Ian Henry's blog.",
"favicon": "https://ianthehenry.com/favicon.ico",
"favicon_data_uri": "data:image/png;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAHH1uIDShg/xEsZv8GFk3/CSJb/wgZT/8IGU//CBlP/wkiW/8HGE7/CBlP/wkiW/8HIFX/BxhO/wcgVf8OK2t7JDhz/wcfW/8NNn7/CSpq/wkjYf8MJGP/DCJg/w02ef9SqdX/TKHJ/1my2f9Moc3/UqzV/1Cr1v9Pocf/Ditr/xk2cf8KJGL/CjR8/wwva/8RK2r/Cido/w8qa/8LLW//TqjT/1Gnz/9bsNf/Sp/K/1Wt2f9Wrtj/UKjQ/w8xc/8gPHj/Di5w/xk4ef8TL27/Dy5u/xU3fv8QLGv/Ditr/1qy3f9dttv/Yrje/0ecx/9Knsz/U6fQ/1m13f8YN3n/JjZx/wszdv8YOXz/Eilm/xc3e/8dSZT/GDJz/xk/hv9hu+P/WbHZ/1mv1v9Kn8z/WLHd/1212v9ds9n/Eipr/xcqYv8SOX3/GzRz/xQrZ/8aM3D/HEuU/xc0df8fPYD/Yrre/1603P9dt9z/VKvY/1iz4v9etNr/Y73m/xk5fP8cMm3/JEWK/xc0dP8eO3v/Hjd4/ydRnP8WM3P/Gjd3/2bA5/9dtd//Ybng/2K95v9ct+P/Ybnf/2K95/8oS5L/GChg/xxBh/8lSIz/GC5s/yM5ev8hRoz/HTp7/yE6e/9Zsdz/YLzn/2jF7v9ryfL/YLzn/1qu1f9htdz/GDyD/y0/ev9qx/X/acDn/1235v9euun/Yb3r/1665v9owu7/GUOL/yhGh/8nUJL/MkmI/yBFiP8jOHb/MVag/yM+gv8VMGv/acXx/27G7/9szv3/bMb1/2zD6/9vy/X/edf5/yBHjv8yS47/JEuO/zVLiv8nS5D/LkOB/yRXpP8lQoT/H0WI/3fS+P910Pf/b8/8/2bB7/991Pn/eNb+/3nT+P8pS5L/O1GS/ytUnP86UJH/NF2k/zNLjP8sXKv/JkCB/x4+ff+B2/3/etT9/4He//922f//fNf//3TT//991/7/NU6N/zZSkP86Zav/PlWR/zFepv88ZKb/MF2n/yQ/gf8bNXH/fd3//3/b//+K6P//ft///3vV//993f//gdz//0hWlf9FZKX/RmOj/0JXlv9IeMP/QXKz/0Jsuf8eO3z/Hjt2/3vd//+C3v//ju3//3zg//+H4v//guL//4nj//9HXp3/UGur/ztgqf9JYqP/S3G4/05ur/9EbLT/Hjt7/zNJhf+G4///heT//4rq//+E5///iOT//4jr//+G4///UXO0/09iov9EX6H/SWWn/1V5wP9Kaa7/RGSp/ydLj/8NKGCfDShg/x8+d/8RLGb/CBlP/wYWTf8GFEj/CBNH/wooZP8JIlv/CCJd/woWSf8HGE7/ByBV/wwgU/8fO3mfAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 10,
"last_updated": "2022-07-11T00:00:00+00:00",
"score": 20,
"self_url": "https://ianthehenry.com/feed.xml",
"site_name": "Ian Henry",
"site_url": "https://ianthehenry.com",
"title": "Ian Henry",
"url": "https://ianthehenry.com/feed.xml",
"velocity": 0.027,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 88585,
"content_type": "text/xml; charset=utf-8",
"description": "<p>The most unruly and least considered, most shameful among various Idiomdrottning components and libraries can be found here.</p>\n <p>To contact me, <a href=\"mailto:sandra.snan@idiomdrottning.org\">send mail to sandra.snan@idiomdrottning.org</a></p>",
"favicon": "https://idiomdrottning.org/favicon.png",
"favicon_data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9kKHQ8EITJ/4sMAAAUJSURBVFjD7ZZ5bFRVGMV/983W6d5KoS21gFKWqpWEQkqCoCxqRHCBKEhcE8SYGsRgSEREoyaEJZgQETFBggpxRSBUlrBoF8rSlrZpQUqhsRVIO53SbabzZt69/jF06NBOW8ofxIT710vefe+ce853vvsJpZTiDi6NO7zuErhL4P9NoDPB0qsz0DTfFgEhBABV328OPIciGYrgbVvgaWqkeuc3PYIopRBCcHbL+pAEtb5llr2+d9dfobWmmst/7u8GIoSgsfQUjpLCgVvQ4aincvPakDIaHS7M9nDK1q5ESRl0er3lGrmL5xKRnDpwAvaERJqrKih492W8Lde6EfG5XSAEerMTj9OBUiogfeWXqwGIHD5y4ASUUmQs/YSGk3nsn5VJ2z8XEULcKC7DACGQus7V3IMIIRBC0FxVwYUdXwMQO/rBbkWptzSjlOpfEUakDCN2VDrS6+HIghlczT8S8NtksYJSIAQ1v+/wx9IwOP1hNuaIKITJRHji0ACwEIILO7ZQvmEVQohgAm21l0JGLeuL7wCBkgZ5b83l38P7/BJabf59ECg2R1EBrZeq/GpoJmxxgxBCoDc3kZ89n7J1Kxm3fHV3C1qr/2bXhGTy336RuoN78Lna/RIDtth4hj37EkopLJHRFC57nabKUky2sIACmtmCs7yIguwFoGkoKYkenoYlKhpnRQn7pqXTcCqf1FnzMIWF+Yl3DiSdhdNYdorcRc+jpIHJFkZ4cipDpz/N2MXLMLw6u7NS0SxWv/y2MB7dnsOB2ROxREQhvV6GTHqM+pN/ITQNX4ebR776GUdJIVXbN6GUQnq9zMmrxhRm9yvUdSLqJNF84SzHl75CR/1VhKYhvTrCbOGBd1ZgCY+gdM2KQI+IHZNBU+UZNJM56B8AZnsEKU8+R/WPWzFZrSilyPx0Iykzn7lhcaiRzPB0cHTh47TVXkJoN5wSZjNCCAxdD9ndekyTlETdN4rpOw8H11hfM+H5bRspW7cSc2R0UPx6Be/8Y5ct9iHJzPglF81s7p2A3tyEz9WOr8OF8hmYrDYaio9Tvv4jpM/bK7AKxgxYYrKFMXXbPqKGj+zern1ul7p8LIe6A3toPHMCZRgoKf13gOpyFCWD/L0VEjN/yyc8KSVEJ9Q0rDHxRKaOwBafgKfJgc/djjJ8fgJKwfULqRNchdBcoQLgSkqscfcw/adjIcEDFnQ9mbetlZrdP3D5cA7u+it421owXO2dXQmEQABKCIS6DirEdXARAI9Lf5gpW/f2WS89xjCQBN2D4Xbha2/l2rlynOXF1B3ajaexIajYpJBoaH4NpCRj2WeMmPdqv1LSZwo8Tgd1h/bgKCqgoagAX1urX4WAHQoUSN1DQuZknBXFzMmtDopuvwl0KqCUwtPYQPmGVdTm/IpmsyGE1uOopZkt2BOTmfD5JmJHP8TRhU9gT0oma923Pap68zLffPEooPC912g4nYfUdUxh9qAPpM+H1D2EJ6Uw6o0lJE6eQUTyvYH3LRfP0VJzHr25CUtUTJ9KBBVh7f5dFH28JHABKWmgDANLZBThyalEjUgjPiOTwROnEJM2tpsiTRUlWGPiKV3zAW01VYx5832GzX6hfxbkZ8/HUVyI0EyEJ6UQlz6OQeOzGDxpGvaEIYQq1J4GGMPdzt6paUzbeZTo+0f30TWVUobXqzqcDuV1u1RPS0qpbmX5PB3qj6fGqxPLF/W59z/I3vExRaQkUAAAAABJRU5ErkJggg==",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 20,
"last_updated": "2023-01-25T13:06:38+00:00",
"score": 10,
"self_url": "https://idiomdrottning.org/blog",
"site_name": "Idiomdrottning",
"site_url": "https://idiomdrottning.org",
"title": "Idiomdrottning",
"url": "https://idiomdrottning.org/blog",
"velocity": 0.441,
"version": "atom10"
}

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 80033,
"content_type": "application/xml; charset=utf-8",
"description": "A blog by Matt Webb. My notebook and space for thinking out loud since February 2000.",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 8,
"last_updated": "2023-01-24T20:48:00+00:00",
"score": 22,
"self_url": "",
"site_name": "Matt Webb",
"site_url": "https://interconnected.org",
"title": "Interconnected",
"url": "https://interconnected.org/home/feed",
"velocity": 0.279,
"version": "rss20"
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 10608,
"content_type": "application/rss+xml; charset=utf-8",
"description": "Investment Strategy",
"favicon": "https://www.lynalden.com/wp-content/plugins/genesis-favicon-uploader/favicons/favicon.ico",
"favicon_data_uri": "data:image/png;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAA6KIAAFc9AAAfFgAAHRQHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQRERERETAABBERERERMAAEEREREREwAAQRESIiIgAABBERAAAAAAAEEREAAAAAAAQREQAAAAAABBERAAAAAAAEEREAAAAAAAQREQAAAAAABBERAAAAAAAEEREAAAAAAAQREQAAAAAABBERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 10,
"last_updated": "2022-12-10T19:36:37+00:00",
"score": 12,
"self_url": "https://www.lynalden.com/feed/",
"site_name": "Lyn Alden",
"site_url": "https://www.lynalden.com",
"title": "Lyn Alden",
"url": "https://www.lynalden.com/feed/",
"velocity": 0.031,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 1990,
"content_type": "application/atom+xml; charset=utf-8",
"description": "\u65e5\u7528\u54c1\u3092\u5225\u306e\u3082\u306e\u306b\u898b\u7acb\u3066\u305f\u3001\u30df\u30cb\u30c1\u30e5\u30a2\u30a2\u30fc\u30c8\u3092\u6bce\u65e5\u66f4\u65b0\u4e2d",
"favicon": "https://www.miniature-calendar.com/images/favicon.ico",
"favicon_data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABPlBMVEXdzb3ezbng0b7f0r/h0L7h0r/h0MDi0sLn18fg0MDh0cHk08Pm1cXn18jl2MfezbvdzLjf0L3f0Lvj08Tfzr7i08Dm1sbf0cTcz7w+Ny3k1MTe0sLl1cbczLU/OS1AOi7g0bzby7TayrPbyrjezb3fzrzcy7fZyLTbyrY+Oi7dzLxAOizczbrdy7XdzbbbzLnez7zdzLrezr7WxLDZx7NBOjBAOS/ezLbczbjaxbDYxrDZx7HcyrTayLLcy7s/OzBBOy/Ww7LZybI/OzLYybY+Oi/czLzXxbHYyLFAOTHZxLPZx6/aybXazLLayLDcyLDcyrbczLPbybPXxLVCOzHbybXXxLPayLTZxrfaya/bxbDZybDVw63axK3axK/cx7LayrHYx7PezLTUwq7UwqzXwq/Vw6/Xw6vWx7DbxbcPDeShAAABAUlEQVQYlT2IizfCUByAf27LVGRXC8Pt2pY9PDLVHTbZKsxjIqYxyavC//8P4DjHd853znc+gAmU4tKTPD+VyeamZ/IwK2A0hzMFMZsr8vP5BQBhEUsYSxyW0oWl5RUgpPQPRUX+Z9Df/HMVpUFWqEzU8ppWTnEUIQy6YSpUM7XS+sYmFRECZcvUiVIh25YAdKdahVqd6bZmy0ylu2zPAth3bNeVDxqHtuczlVjQdJjjtdoG9Y6OTwwRIDg9O78ILztXfvs6NEgXbm4jFkU+i9ida3SJCkHQi+8fGklceQxjRTGgX+slfSd5Gjy/uB3t9Q3eh8PBaDwefTTrn+FXGHwDcrgsthZvWMkAAAAASUVORK5CYII=",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 1,
"last_updated": "2023-01-25T22:00:38+00:00",
"score": 20,
"self_url": "https://miniature-calendar.com/feed/atom/",
"site_name": "MINIATURE CALENDAR",
"site_url": "https://miniature-calendar.com",
"title": "MINIATURE CALENDAR",
"url": "https://miniature-calendar.com/feed/atom/",
"velocity": 0,
"version": "atom10"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 26528028,
"content_type": "application/rss+xml; charset=utf-8",
"description": "This is a blog on why we believe and do what we do, why we pretend otherwise, how we might do better, and what our descendants might do, if they don't all die.",
"favicon": "https://www.overcomingbias.com/favicon.ico",
"favicon_data_uri": "data:image/png;base64,AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAAAABMLAAATCwAAAAEAAAAAAAAAAAAALgAAAC0mFQAAEysAFCozACoqKgBMMysAWVUiABI0RgACRk4AEk5uAABrcgBKSkwAbUZEAG5sTwBxcXEAkXJQAKuMbQDSklcAFXCPABWWnwAAq9cAAO7zAI6QkQCusLAAzq6XAPO0jwD7y5gAzM3NAOnS0gD7+/sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHh4eHh4eHh4eHh4eDwUcHh4eHh4eHh4eHh4eHhcHBQ8eHh4eHh4eHh4eHh4MEhsRHh4eHh4eHhgXHh4YBRsbGx4eHh4eHh4XBAQFABEbGxseHh4eHhwdDxUWFgkNGxsbHh4eHh4FCQsWFhYWABEOBx4eHh4dBBYWFhYWFggFBwceHh4eDwkWFhYWFhYIEhsbBQ8XDAAUFhYWFhYVABsbGxENDREQABUWFhYWBAARGxsbGxEGBhAACRMKAw4SAA4bDQACERsbBg4HBwIbGxkBBgAQGxsbEQIbGxsAEhsbGgIbGxsbGwUQGxsbBgcbGxsbGxsbGxECGhsbGxEAGxsbGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 4476,
"last_updated": "2023-01-24T19:20:26+00:00",
"score": 14,
"self_url": "https://www.overcomingbias.com/feed",
"site_name": "Overcoming Bias",
"site_url": "https://www.overcomingbias.com",
"title": "Overcoming Bias",
"url": "https://www.overcomingbias.com/feed",
"velocity": 0.757,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 1,
"content_length": 617003,
"content_type": "text/xml; charset=utf-8",
"description": "Governance Futurism",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 18,
"last_updated": "2023-01-20T19:45:09+00:00",
"score": 28,
"self_url": "https://www.palladiummag.com/feed/",
"site_name": "Palladium Magazine",
"site_url": "https://www.palladiummag.com",
"title": "Palladium",
"url": "https://www.palladiummag.com/feed/index.xml",
"velocity": 0.167,
"version": "rss20"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 997224,
"content_type": "application/rss+xml; charset=utf-8",
"description": "Preposterous Universe",
"favicon": "https://www.preposterousuniverse.com/wp-content/uploads/cropped-prepu-32x32.png",
"favicon_data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADqklEQVRYhe2WT2hcVRjFf+e+STqTaP5RG/FPYzCKQgoBi6LWahdFUEGI1aXQhdSN7kXX4t6NCIpFsHSjIkWz6lItQslCKmGqaWsT2mhNk0kaM/PeOy7mzczLdGqSVTa5cHhc7ve+c+6957v3CjA72MJOku8K2BUAUPj/YTW/AkwXLc0pkAApwrlS2l5RqfMfAnoJeh70LPZjwChoGOjKYm6Bq4hrmKtI0+BzmPPgyrYEOQ8x4KAPHXTdqGqoGZI2pBka/bgep5qlJStMOegdS48a5HaONuTINeGgC1nCPNFW0C4ytlRxCF856EmjaDMB/ZZmcuSdZrxdIXEduuUofGHpvk4rgkGWXs0t93bI4k1EZzGqWZp10DMbRISWDfZRd3jD+VuzTm+0yNgDZYqla0hVUNxmLeo5HbBHMN8gPdHMUmgGsIxYwvRvSYSUcBeLnGaSw6u/8O+Lw1wZ38fsyAiXK/u5ePFhyuUxyuVR5ubuIU6K4AL2ICF8CT6IWW2UYUC8gfUC+HhLV0chKQB9usFpTXI0/bFVy4K4KxA/1QUvR+illD2Pm7W1Pv64dC+Xfh/lt5kxyuVHOHv2U2ZnzzfWqtviuOGExSnD2h28UN/PPi34+3DIMXIKtyFBjpGrIfLKWNEr75ZcmSo5Xik5ToKTJPiD9/vzJhw0vGVxwvC24ROLhQ7lWHNJN/119IpjcNKBvCWiNR6DY8krQwVXjvV4+WSvjxzuq5d+XcAQ4hiNg9EEYC9wBDgI9IBMiVVO6k0m0zMoM9hmbnFbP5U4U+ji9TghdtLYvojAJGYQmid7AIrAXsQBihrl8/Aer6U/EDntbMzNyIFrocBzMpeSBGi6LSHlHOgocpQlM+YWMIdZ5ACfUU2n+BkYlhhE3G1nN4M3XKvOfRNgHVgFbgIfSVxOk2Zs7jb8E/knzNNAQ4SABLHMg/zKjFPmMT1ACdML9AN9EqVsvSIaJ4BJDDXqWAOmo4hTSbzh7swJMOYCYgk4lJ0H9ZUoqMaQ5vnLpgKUgJ4MN4A9NkXq92QhQ6M044x8IQQ+Tk21bWNuew+YeeBbxDgwjulmP/MoXSfNkq0DlYywO5t5d4aI1oshzmb/twLfAVc6eOcO74FGKxF4iIlojYn0StN8ZqPhlJHmyQ2sKzCDmCZl2Z1pNhHQCIGizP0KDBv6MXuAHlQ3YZalBiwB/wDXEVdJqG4h+yYhtwcr12t3f74CtpNzx9qOv4p3Bey4gMLAwMCOCvgPU/1XrXUZXDwAAAAASUVORK5CYII=",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 10,
"last_updated": "2023-01-23T12:26:31+00:00",
"score": 12,
"self_url": "https://www.preposterousuniverse.com/feed/",
"site_name": "Sean Carroll \u2013 Preposterous Universe",
"site_url": "https://www.preposterousuniverse.com",
"title": "Sean Carroll",
"url": "https://www.preposterousuniverse.com/feed/",
"velocity": 0.129,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 196719,
"content_type": "application/rss+xml; charset=utf-8",
"description": "By Archbridge Institute",
"favicon": "https://profectusmag.com/wp-content/uploads/2021/08/icologo.png",
"favicon_data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACgCAAAAADLScqOAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDcuMC1jMDAwIDc5LmRhYmFjYmIsIDIwMjEvMDQvMTQtMDA6Mzk6NDQgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdFJlZj0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlUmVmIyIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkY3RTExMkQ0MDQ3MjExRUM4RDE3OUYxNjg3QTgxNkE2IiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkY3RTExMkQzMDQ3MjExRUM4RDE3OUYxNjg3QTgxNkE2IiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCAyMi40IChXaW5kb3dzKSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOkYzOTJDMDg3RjY0MjExRUJCMDlCQkZEMENDODc2MjlDIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOkYzOTJDMDg4RjY0MjExRUJCMDlCQkZEMENDODc2MjlDIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+c+eNBwAABrRJREFUeNrtnMmT2lYQh5829oFhR4JhBAweO7Gd3alU5ZRL8jfnkmuSU8qxU3GZRRoQCAECCUagPYqXlB00G5aEXPV+B6oQQvqq1a9ft15LAEBBQUFBQUGFWMjOlhqRjSO2b+czpPlSu3E3fGcLimIYavlFhQAMQcAeWJ+nviB9tJb6/Le/1D2wHuR+uucj1jY7YcQ9sJKpfMRHZyaOY9jNe6E7W1R17ecY0xXd2gfLtiw/sUzrNg6ChjNuhRQLv8bcumHbAPHiLDbAcBzzBksZzbaWN1gmmioUMqgnWMunzxcm4gmWgVYePUx5gyU9+4XzyFoW0sQpivAESxV6nHfRfbqxvRmJtmUGHa5ug4USMe/CR4xAPcKC4RRiQSyIBbEgFsSCWBALYkEsiAWxIBbEglgQC2KFHgsPD0kSUVVghQkLRfBcJa+xozBhpQrlUpEsZIY/8yG5iCiGRfKNxr02XYlhf754CtQwYBXLjkqVCkUVnG9NKgPkQ2HZpu58IjiOJ0ut9lnrNBd5sx4Ur1TB4FBYlqYAECFJskyWHEOVk//9QpRp8OuhsIgMSSToVrvdqKUxDHtn8SZSv38wl0dyj46xfLVUKhX+f26i8WnQWOrbFWq08uRJLp9G0d01LguLB42lGW8WfbDicSThust2zHQDxYrEomfU0evpF026QW+3qsz1u70gsXK1k5P7X59cvZwoXgwGHD8TF1IwWFg8Hk8UqFarSZMxtx3MzWZzORt1ux1mogaVQcSoer1eIbOOjlxXcTdj9uJizC/FxWIVSGITSySTR9RJs9Gicq5E20vlUh4Pur3eSAws3yrUT09pspjOZI7dXWo6YFiWF+SlJOlBpIFoylGebDToZsWVyFqv15fzIdvv9wU1qOw0QTZP6TqZSR+lU+7RieszDDtZrFbyOpCkOe6gZEpUk6ZPMu5EsrySpsN+n2XloHJ5pFKnm3S1lDxKpVwvnj0ZdhlmKKxX67UeRImBOo6dyVZrztUrux7PlqSlLHIcw16MjaAqn2S10Wo0y7l4Muk+2W2GTK/L8HPFiQmBFGTxnBMpi2T99KSedE8cRHGxnHLDC3Yo3+XAH4IVKdbOzmi6mHSmGFd3MhZst9Nlp6utstFBAFhoLp/P5slKvV4l3fdYzOeLmTAasMPR/9pYcNv0BQtB0jXasROVi8ViUTcXB/KY6XSZC3HrZCzvUqHxBGGsb+4CujNWolAo5gsUVauRV8TL+WwqCuPxcDhevv/LcTFfqsVmL7obT62FoGgkRzfbZ41iiohGdpvqbMs2RLbfecnwsqZpxnv/TVbr7Vb7HP1d42wvsYpOVeCUUBRVLV/hToIwnTp2GnH8jvekmw8eVh0bp8HwNl1v12LZb8oCxCmc0uXm2VnjNEc4cknnTFMReh1n2M23hq7vmiP7zY/fpgkCA/bG+MCR+JYqVSqTBacmJ8mSuzupwoQXJsJkPOalK44VLdLVtyWQ/UFYDhWK4ASRP22023XyCMPxXfObhqEvRo6d+gPZMIyrG3xNVfemN9AwiXKBqpVK5WK5UnBvXRT50VjgBUHgp/oNdx4Mj7Ditc8ip+3zei6CYi6tz5qub6dM92VnICiml22EN2BVfngczZXK7tOvwY24ES/MpoIgA+91DVYxbyOIy2DWNVWTJh1nthtIhu1Pu/g1WIh7E/KCG3Kj8Xw6m8104JfuEuUtZ4ZTZlzPme3GG98ei7grljYeDFmeF8W5KPl9f+B2WJqyUdaji16vw80tEIBuhbV0SnKWny6Xi4UGQAiw7MtLRRFHvW6/O9kGeM/weqztxKnpBvxCkiQZgINiYfirhFNdXa5W/KjXZy7mIHDhLjP0v07tFL9sf8yv5NVKBWHAUgh2u55zQ4Zl+C04kHaxuIVlDgZzZXW5tkF4sF4QHZmbgcNqF6uDAE0FocNagxDoI1urRstZW1purTBhIWi69gm9efZcDY+1srhTeBVImuSW3RBdxGbiuy/b+WSUiKQQOzxY55nvn7yq5hNYmFy+lmu9vsdg2mEKEPHEmxIsXFhO+RvGcGpZVhixQiGIBbEgFsTaB8s2De8Cq2F69QAz8ObB+L2Odc09CCyaSHj2KoFEFPMIK06dZwxvLKZjdCWBeoOVeZyQTMSTMaFhxXsFj94Hkf3qgWF79YaDSDKBe4MVjcK49fFiIX6e8HZDexcLw3xtNSMwFNkHy7IMP7F0c79lTiW6EFHTr0uIrWXV2geLk/+Y436tCqAR+e+pug+WoW0Vwi8sxNiohyyLoaCgoKCgoKAC1z8J6rnVnnQOqwAAAABJRU5ErkJggg==",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 10,
"last_updated": "2023-01-24T16:36:00+00:00",
"score": 12,
"self_url": "https://profectusmag.com/feed/",
"site_name": "Profectus Magazine",
"site_url": "https://profectusmag.com",
"title": "Profectus Magazine",
"url": "https://profectusmag.com/feed/",
"velocity": 0.085,
"version": "rss20"
}

View File

@@ -0,0 +1,23 @@
{
"bozo": 0,
"content_length": 33691,
"content_type": "application/rss+xml; charset=utf-8",
"description": "Upon a globe of math, a blog of math and puns",
"favicon": "https://putanumonit.files.wordpress.com/2017/04/putanumonit-logo-square1.png?w=32",
"favicon_data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAGj0lEQVRIx61WW29cVxVe61znzNXjscdzcXy348w4aWI3jUuapIqtVogqqlAFFMQbD32hUp+rPlXiBwAPCKGChIQqHmhASCBU0iqkKaRJ09hNPLHH1xnP3XO/nOtefRjf45gKuh+Ozt7n7O/be61vf3vhq29HYV9DQgQiQARgSPB/N+FQn5AIAIC+AWwAAODHL/sBYPrUTH9gtFTLG4b27Qs/+FZkFoDy5QyHSEAyL1tkHYOCAHjMDhAAERC5V57/0R8/+nW3N5zMLU+OXY4MPgsAg8HxL1fv/OWT3x9DMBqOel3+O7GPntw3BwBnhqcjfVMXJ15OFxPEzGwx8XjjwR8+/LlNUvwdofmVO7fm/nYMeofT98rFH2eKSUWyHx2iQiWdLib+efeD9XQMgBizErm4SdZSci5VSBQqqa1K1mTmoZhwBISAhE6b0yJ2dfLVTClRrOYOR++QivbJaXv+5bPfGQqOb+SWc6WkTbLXmhW/NzQ5dmkodGqrkhnpPbOWfvzLD97OljaPTMR2kg+trqcj/L2rb6ykFjRTffcn77kcntmp73qcPp/b73P7zwxf6HT5Vb0RHTyfLqyN9k58Fvs4V04duVDuiDFCvzccGTgf7OwDIN3UfvXnd1WjJYv2yMD5F89d8zh9FjMXkw8KpdT1W79tqFW74v4vMj20g2I1myqspoobqtb0OH0rm48A8Pq/fqPI9oX1+xxyN+5fjycflmr51VRMNZp3Yx83tToATI5cTBcTXysH/1vzd4QD3rDA8ffjnxIetQOf2//DmZ/qems6MqNI9lwp2e0JWKbhsneoRmt3WW0JcXQ4r81WLTowVVNriFBXa0cQRPufBWKSZKs0tgKdJxaT8/2Bsddn36zWi+niBgL0dY+Mec4HuWjYNtrXO2CAXlcrezwI9VbFqbgHAyfX0jFAPOxF9xZv9veMrGeXALDHGwYAIiuRi6+mFhCo3xOpfAb/+fzvuqEjoE2xXZq5ovmb5foW7VDkK5lI/7lqq+xUPDW1ekSSy41i+6WuVgGgUMnG1u6pRgsBs7coPr/IGGujmaaZWE2cGj5bE/MW2zOrPv/wvce3TvafzRSTh2Ua8IafNGmG4FI8b730RsipqJq+/5NhaPM3Y7aDJqHqKiLOLX0KQNw+2hEEGglP7MZTFiQAQgK/vevayUsDevMX77z2zHgvHfTyaqXCM2G/yiVJMU29fZ0cIAACgr3Jvf6QJAiyqHQ5fBd7AnZBRoa9IZ+mG7Dvt+BAt0oN3BkhgC8WP7F2urvMyJgFgMQIdsS3nt64NnX1nO5NxuOJhbi3y5vJF2t11aGI1brK8+hx2V+cPvXSMwEUlRuN1Fz5YRurodWevNEIEQkBOY7nhbZ3WsxKLWVv/vVP3W6vw2tziYrdbrsy5rkwEN3aqlQqdeA4vpZ573d3NNMcnHkOHSCgaIK5P4Z7sWPMEnjxi/jtvsDoSmoBADhO3LibtwfFqlZdX8iaWls8BHDEZd3Kl4W12mtS8HTXYHZ46H3jfraWPZCDR2v3psZeaKi1NjoA9PoGVh7GNIsxhqbG2tgER5cCmbnF4IY+bbS6ZK6nUP0+i/CABwgqrXKhnNkvhqDY2RFC3iHmsk2Ox+NdCBGff/lCos9j2ZJ1vtnqcrczeeCgleqFfT6Ojc9bsrPVG3UZFtQaplozBQ45BIT2scU9cABGUBj0rXSmZwcLN0IT7y992FYa97QVSaJtZPJ0ZU0Ojrt9vfatpFpTWa5mbjXMqkoNnVSDaQZTDdbSrXLLytdNpe6WOZRE0S1Ku4WP8DQC1Wjd1W8Ov37a7xur+xOBMGVTSSIwLDAsBkB2t+vE0Kiz2807BL5DEH1KRttcLePP6lPZTOzr3gccAQBxyAe7BnxOP6lgWRYCcjauyRqpwmpLrRMAPT1BgizY7LKj2ixbZCIhAMqCjEiqqSJxdpujqTcsxrKlzXw5qRm6KMkIpBs6ENptTkSOiEmChAC6qQFxkigbhsoQFFExmClYzBoOT5zoGTGM1uPEA0V2nht5odrc4jlxfuXfoc7+5c3Yc5Eryfy6JEnFao6RNRo+7VQ6Hizf7nIHllOPpqOzG5m4xQyXo9Nld69sPhoKRS1mVlul21/+ox0ikgTZMHRCQABZklVd21FJu3oBJGTY9hACQFmQdFOH7TKZgHDXnXheIGIWMSQkpHaSUTf1HTxoo8P2DNwe3z5e20/N1HY9huDA0d4t0QiPlek31b4Cx9JJjxBDkt0AAAAASUVORK5CYII=",
"hubs": [
"https://putanumonit.com/?pushpress=hub"
],
"is_podcast": false,
"is_push": true,
"item_count": 20,
"last_updated": "2023-01-04T19:22:18+00:00",
"score": 22,
"self_url": "https://putanumonit.com/feed/",
"site_name": "Put A Number On It!",
"site_url": "https://putanumonit.com",
"title": "Put A Number On It!",
"url": "https://putanumonit.com/feed/",
"velocity": 0.03,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 17074,
"content_type": "text/xml; charset=utf-8",
"description": "Announcing appearances, publications, and analysis of questions historical, philosophical, and political by author, philosopher, and historian Richard Carrier.",
"favicon": "https://www.richardcarrier.info/favicon.ico",
"favicon_data_uri": "data:image/png;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAEAAAAAAACrwL0AAAAAAC1jjAACAQMAHREOAC1JWgAZFRoACQQDACY4QwA1VFcAc9nlAChXcgA7QmkA+8eSAAUQHgBGlq8AIigvAIz9/wCyx6YAMjELADhXhAClZD0ACQMBAE6LfQAIJzYAzsORAFerpgAICRMA/rucAIvs+gAnNlAAGRo8AAgLGQA+U1UAFgsHAB4dRQAZDAoAJiQtAEU7KQCHkJQAVKLuADFAUwABAAIAAAEFABIcFgAjKTwAAAQFAA0WMQANGC4AHjZIAD5ZiwAIBgsAHhciAEhKRAA4TmIAHR8oAHRyaQAICxoAEwgIANy8mAAoUY8AV0g1AERqkQA1N0IARZS9AEhMZQCXgYMAEi5MAPm2fQAkTloACxsmAAMDAwBEeKAAWYe6AAEDDAC/tLcAXLnRACMxQwAUFywAHBgdABgYJgAtTnUAEhpHAGS24wA2cZ4ACy5EAINRIwAaKSwANThGABkvNQD/8coAuMWRABQSFQAAAAQAFTlBABkTGAAtZpAAGRUeAGfT8gAKBgQAZaXnAAkHBwAmL1AAEAUBAAoJDQDyzJwACyZIABgnMAAFMU4ANXiZAAoQGQAKCiIAireoAAYVKAAZDgoA5f/1AElQYQAVK04AJC0wAAICAgBfcWkASVJwAERAOwAhFhkALlFlAB8YHwA6NxgAXbXrAERrcwADCCYACg0RADI+LQAHDRoAj/H7AIqhwQBBPx4AakgdABEwTAA0STwAJi0oAAYgJgBaTUcAFxQUAGjU5QDxvZUAGxkRAAsgLwCkgokAFRksAEdCSwAeGCkAfrSqABwcLAABDyEA/PC4ACQZIwANCQ8AGR47AAURHgBOjaMA6LKQAEA5KAA3VXIATDAoAGZabgAQGBgABBgzAAgWLQAAAQEAHQ4MAAUaMAABAQEAlZR4ABwvQQAAAwcAeta2ACArRwAoJzsAm/38ADmDswBfvNUAgmBTABs8VgCouZ4AaVNIACIyXADF8tsAcVRLADY8OwAoIycAY15pAC9ZiAA3g5kAFRMTADk2VgBQgdEAVk5VAGdffgBybmMADAYIAAIRIABLsNcAFAsOAAoQHQAbIkkAJCQ0ACxGUQA+OTwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAROhJj2IVhWuKqtdggMBAQF+eo24u7Wjk5Sodys5AQEBhzW8iyyRvT+GRy6CGwEBAYMIkkZXdnmkZRZuzYEBAQGKIVlNdEGQRGhjB5UAAQEBzoCMrSc7oBzCb8ulCQEBAQUxfHBbGWkNsVIvhGsBAQEQPMkPHYW6WkLFzEtYAQEBLVECYEARshe3OMQMvgEBATewtolqbEwaXniaxs8BAQFPmE6ecapVC0WvcxKsAQEBXCMfSg6ZyBjAtI8KlwEBAY6WnDMgp6ZDs2RTYp8BAQElymfHwVAwdW1JKH+iAQEBBn0EIiSbnblUPsNINgEBAWFfOnKpezRmvxQyHikBAYADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAACAAwAAgAMAAIADAAA=",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 10,
"last_updated": "2023-01-24T17:28:06+00:00",
"score": 14,
"self_url": "https://www.richardcarrier.info/feed",
"site_name": "Richard Carrier",
"site_url": "https://www.richardcarrier.info",
"title": "Richard Carrier",
"url": "https://www.richardcarrier.info/feed",
"velocity": 0.158,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 213356,
"content_type": "application/atom+xml; charset=utf-8",
"description": "In love with the moment. Scared shitless of the future.",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 20,
"last_updated": "2022-12-23T18:02:25+00:00",
"score": 22,
"self_url": "https://www.rifters.com/crawl/?feed=atom",
"site_name": "Echopraxia",
"site_url": "https://rifters.com",
"title": "No Moods, Ads or Cutesy Fucking Icons",
"url": "https://www.rifters.com/crawl/?feed=atom",
"velocity": 0.068,
"version": "atom10"
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 115494,
"content_type": "text/xml; charset=utf-8",
"description": "Embedded Linux, Electronics, and more.",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 3,
"last_updated": "2021-06-02T00:00:00+00:00",
"score": 20,
"self_url": "https://sagacioussuricata.com/feed.xml",
"site_name": "Sagacious Suricata",
"site_url": "https://sagacioussuricata.com",
"title": "Sagacious Suricata",
"url": "https://sagacioussuricata.com/feed.xml",
"velocity": 0.018,
"version": "atom10"
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,23 @@
{
"bozo": 0,
"content_length": 288864,
"content_type": "application/rss+xml; charset=utf-8",
"description": "Mad Science Blogging",
"favicon": "",
"favicon_data_uri": "",
"hubs": [
"https://slimemoldtimemold.com/?pushpress=hub"
],
"is_podcast": false,
"is_push": true,
"item_count": 10,
"last_updated": "2023-01-19T16:42:16+00:00",
"score": 22,
"self_url": "https://slimemoldtimemold.com/feed/",
"site_name": "SLIME MOLD TIME MOLD",
"site_url": "https://slimemoldtimemold.com",
"title": "SLIME MOLD TIME MOLD",
"url": "https://slimemoldtimemold.com/feed/",
"velocity": 0.1,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 16750,
"content_type": "application/xml; charset=utf-8",
"description": "Latest Saturday Morning Breakfast Cereal comics and news",
"favicon": "https://www.smbc-comics.com/favicon.ico",
"favicon_data_uri": "data:image/png;base64,AAABAAEAEBAAAAAAAABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAgI/wCChokAIDSDAI/u1QBNUCsATU7uAKqsvgAAALUARW+OAGu2xAAAAHQAHCssANLTyQBjZLsAISLJACxGVgA0VrUAov//AFdYaQCkpZQAU4qvAG25mwAREZYAf9a7AOrr5wAAANoAf4StAEVGngA4OTUAenxsABspZgANExMAFiGuADVYjABRiJIANDTOAMDBwwCR+O0AERHTABQU7QAAAJEAHzGeAGasrQBxcq0AdsWsADc5qgA0VEcAkZKTABERugAtL24AAQDuACpFPABQUZMAGCKSAEt9pQCOj4AADROpAA4QAgABAMkAAACkACtFqwDk59gAIjU3ABsodgAAABAAb7q1AENErQC1tr4AJCUhABwevQDGzL4Aiu3qAAkKsgCV//0ACAqbABka0AAGBr4ABwfmAKWnoAAVGJ8AAAD6ABESxwAkN24AoP/0AAcH1QABAIYA8PLiAAAA5AAHBvMAERoYAAYGqgAsRjMAnqCZABcYwgBSUzIABwfMAJj/8AAAAL8AExQHAHZ4qwAHB90AAACsAAUFlACztbcAdcezABobkwCP79wABQX6AAQFuAAHB+0AAwD1AAsL1gADAekADhWYAICCjACO89YAAQH/AA4O0ACR+fIAjvTsAAAAzgAAAIwAAACWAAYGsgAYJ5IABAPyAKP/9wAEBP8AAwPkAAABuQAOFMUAFyGyAAAA3gAAAKgABwb3ABIUuAAuRqkAAADzAAUE6QAAAOoABAHsAA4P0wD///wABwfwAAcH6gACAMEAn//2AAECAAACAPkAAQDxAAcG+gAFBfIAAgDlAAMC5gAAALsAAAD8AAAA+AAEBP0AAADsAAcH6AAAAJQAAAD/AAcH/wAFBPsAAADwAAcH9gAFBPEABwjsAAAAygAGB9YABgfLAAEA/wAAAPEACAj+AAYG9wAHB+wABwfrAAcH5wAAAM0ABwfcABARlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBWBwHj0ctSAEBAQABAQE/ZYmqECUohnwDkAEAAQFpUY1uFBUfOTOLh3QBAAEIg1KCQmSVHkY7XIGiDgAaSp5ttgZeMSZQYAwCoDYAD6ZwrRgvU3esTWsqlqMyAHFZhTdMoKWZmZ20ilRBCQA8OGxdLgSbb386Q1UwGSMAK4BJIXhqZ4iXIJRLDXkLACIFJ1tiLGNamFcXEzV1EgCafiRAFoSokm+McwoRPjQAKZ6caD2OqbKSkXJ7kxsCAF+fq05Ws7Kysm9mfU+1sAAdrqGyb7GysrKysbGxp2EARXqkAq+vr6+vr68CAnZEAAAAAAAAAAAAAAAAAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAP//AAA=",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 20,
"last_updated": "2023-01-25T17:51:00+00:00",
"score": 16,
"self_url": "https://www.smbc-comics.com/comic/rss",
"site_name": "Saturday Morning Breakfast Cereal - Intro",
"site_url": "https://www.smbc-comics.com",
"title": "Saturday Morning Breakfast Cereal",
"url": "https://www.smbc-comics.com/comic/rss",
"velocity": 0.997,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 419093,
"content_type": "application/rss+xml; charset=utf-8",
"description": "IEEE Spectrum",
"favicon": "https://assets.rebelmouse.io/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpbWFnZSI6Imh0dHBzOi8vYXNzZXRzLnJibC5tcy8yNjU5NjY0OS9vcmlnaW4ucG5nIiwiZXhwaXJlc19hdCI6MTcyMjY3NDUwNn0.E9lMSNv23A_GyW60aP_Rh5AzMMAKAHMpGrotgTDO5_Q/img.png?width=32&height=32",
"favicon_data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAADWUlEQVRYhe2WW4hOURTH93HP7UHkjfIg5cntgRqMy4xvzpkbMzVm5sV1JjRDbkVERCFMrhNSUh4Z5ToueRsNuaTcIsUkIYWMMZef1rf2cc6Y7+hgyoPZtTv7nL3PWv+9/v+19jZ4hn/ZTRcAuijw/kA8bmic3Q1yekCu7TLO6Q6e03Ftp4jQtU9xkjAw3cAUA2m2y3iagVkWnABx4wJwI8bhb9kOZBlIN1A4ANZPh4NL4MR6OLkBqithswvFgxVIwgJx4wLIdizyVIAcNZjTTZ29byCyfXwPZ6ugcCBkRoMwP4z7DjJsWCNBGKirCRy1tnR0Hv727A4UDbKUdKTDBC/W+ZLRsG22hi8MQjifauDwMjXc3AQtzTpueAK1x+HSUXh+V7/JXONnHV8+1n5TkRQkDDyq0592FKnDpKJD8/ev6fy3Jn3Wn4f83jDTaJc1p3d3jMr84ZYKJwJAtqNhWjcNvn7Rn3YWKwhJLxFeXi94+dAC+KrPIytgnG/YRrGgP9Sfg3vX4PZFuFMLFWMU4E9RMO24lUlJo1WToKkxAJFu56Q/qQ9CnAz/U9iQASVDYE5frQOzQikpEckK+YjWgNFJ2a04XDVReU6CKNFvwmPNXhuBRmhtDULc+AnevYKnt3T3NVWajuI8QoCpC5EPQkS4fDx8/qAO9i1SOuYNa59+Eonmb9AWAhNuQkPp0DhZYH4NoGqBikgMlY+Cu1egrS21U0lDAeXTJBpIxC1EuakosGKU+UzLrbwvHAG7SuH4GjizB26cgsd1ISCtQU1YPQlm/I0IPUfVXTkWVkzQXjZS53xAmbZvL9R/JUJ+FPaX6bpwWnux07CnptfikZp+sjPhXIwLHZJe+X10nYhO1r55oTaECmlSwJIAevxJIXKCaujXgRZr+OZZKOinIGbYTNnkBhniR2BLruoqMgJejFIs4T60NFSKLYi3L+H6SbhQDbfOB7v2i9W7Bj05k0J0/vIwShi4eqK94n9uwn04Q7bmxTwL3BjHcZYFUV0Br5+nTkOfogc3YG1aoH63My4kntWD0CGH0NrJcKDcXkg2wrGVsGOuilNEHXYeqxJ6v3Ely7IOwleyyRZcRii1Y1/JvN8EkepSmryYdg+O3U6/lHqd200XAP53Cr4DHOtbq3CQHqsAAAAASUVORK5CYII=",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 30,
"last_updated": "2023-01-25T16:00:04+00:00",
"score": 20,
"self_url": "https://spectrum.ieee.org/feeds/feed.rss",
"site_name": "IEEE Spectrum",
"site_url": "https://spectrum.ieee.org",
"title": "IEEE Spectrum",
"url": "https://spectrum.ieee.org/feeds/feed.rss",
"velocity": 0.082,
"version": "rss20"
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,21 @@
{
"bozo": 0,
"content_length": 14271,
"content_type": "application/rss+xml; charset=utf-8",
"description": "systems | complexity | second-order effects",
"favicon": "https://cdn-dlcpd.nitrocdn.com/AXTCkwJcRLSJOItDRESOskxEnohxciAV/assets/images/optimized/wp-content/uploads/2018/04/Unintended-Consequences-1-100x100.png",
"favicon_data_uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkBAMAAACCzIhnAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAAkUExURSA4ZP///+Xo7fX2+C1DbT9UelRmiM7T3ZmkuGt7mIORqbS8y5bZow4AAAKMSURBVFjD7ZbLTxNBGMDnUJvCbXcOi/RUGsXoqd2EiKc9yEsuDWkF46UpESOeeCUIF7SQQLkUG/F1gUQbwVOVIPx3zvOb2dlZAok35zvNtzO/me813yzybizIIQ5xiEMc8u+QcKhYugmCh1uHtaev9pdTERwS0fTyXhVRyYx9WlHIEJGiXJJfINIDwv+OQMabEvFf1Gq1WUAiMtmBM3eQJjMSGaDaPGxbJxps8CayIreppcqUI6JOinFQR1bkDlFuFQA5I2qfGK8hO7JK10DcvbtEzRZshyhkiyg5FVVm5xLQNgS3iTKtkAFwDR+JpZlnp7snHyJAWIhmFBLQIB1DvCnxlWatvF6XSFCJIz5deEBHo+KQ59xR/OC9RCIDqchcnnEiuySnSgLJ088NA2GZbXPkZaL488hyyrwcQPSuRKShAfd+qpRAWIlNGxGjhg5yuyY8+ym5eF6YYSJgjRQkq04fkcgIR45TEM1HFtqOKFc7wr1sxO4LS6VA3iYRHsuctGwQtk5HWFmiTFPc3G0kyzLdMFb8CD3hV2QjAteE+wcWZJVPzZGegzd4xlkAR9UlMRF5kaZOW11R7v2QIGsq5ZQuE54qmL5kwfALE5eOp5Vlz9LGt0yCJxaL4p+1IGZXkLYkrlgZkLxpmdhXXuTXwpt7X1Tn3zbs6mntmeofi/TN2Kv0K+RRrPNCe9Wa0u5Ft8pjLxD8LXZIU2+cumiI91D3Zg4SYTZYHfHO1fes1h7WrkB8eHrG3mlJCNrpiOefP2Z+jP+KJe5+lI54ePPkcOHzzxXjtb2MjFDGX+QwLCUf6EuITGbx9/XefbzZrUb0DV/8U7j230U4fNH6sb9ccv9jDnGIQxzyfyJ/AYXxdx48GBSRAAAAAElFTkSuQmCC",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 10,
"last_updated": "2022-09-27T19:12:34+00:00",
"score": 12,
"self_url": "https://unintendedconsequenc.es/feed/",
"site_name": "Unintended Consequences",
"site_url": "https://unintendedconsequenc.es",
"title": "Unintended Consequences",
"url": "https://unintendedconsequenc.es/feed/",
"velocity": 0.019,
"version": "rss20"
}

View File

@@ -0,0 +1,21 @@
{
"bozo": 1,
"content_length": 29010,
"content_type": "text/xml; charset=utf-8",
"description": "Vitalik Buterin's website",
"favicon": "",
"favicon_data_uri": "",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 101,
"last_updated": "2023-01-20T00:00:00+00:00",
"score": 0,
"self_url": "",
"site_name": " Vitalik Buterin's website ",
"site_url": "https://vitalik.ca",
"title": "Vitalik Buterin's website",
"url": "https://vitalik.ca/feed.xml",
"velocity": 0.011,
"version": "rss20"
}

View File

@@ -1,21 +1,21 @@
{
"bozo": 0,
"content_length": 2302,
"content_length": 1913,
"content_type": "text/xml; charset=utf-8",
"description": null,
"description": "xkcd.com: A webcomic of romance and math humor.",
"favicon": "https://xkcd.com/s/919f27.ico",
"favicon_data_uri": "data:image/png;base64,AAABAAIAEBAAAAAAAABoBQAAJgAAACAgEAAAAAAA6AIAAI4FAAAoAAAAEAAAACAAAAABAAgAAAAAAAABAAAAAAAAAAAAAAABAAAAAAAAAAAAAJycnABGRkYAenp6AIODgwAkJCQA6+vrAIyMjAAdHR0A29vbAHx8fAAvLy8Ajo6OADg4OAD///8AFhYWAEpKSgB+fn4AsrKyACgoKAAGBgYA+Pj4AKKiogDW1tYAd3d3AICAgAAqKioAiYmJAOjo6AC9vb0AXl5eAPHx8QBnZ2cA+vr6AHBwcADh4eEAgoKCAIuLiwBgYGAA8/PzAJ2dnQBHR0cAe3t7AOPj4wAlJSUAn5+fANPT0wB0dHQAsbGxAFtbWwCPj48AMDAwADk5OQChoaEAdnZ2AH9/fwApKSkAiIiIAJqamgBvb28AeHh4ANfX1wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0zADc7NwAzMwAEBAATNzM8DgAODg4ADg4ADg4ADg48Ig4aKg4DGg4OKTASDQ4OIiIOKggOOAMODi00NDUODiIZIA4AKAAOHgkOAAAOLh08OQ8bDgAOGwUAFQwMFQAjGBgfAA4ADgAcIQACAgAnDiIiDiQsACwkDgEQAAAQAQ4iIg4OFgAWDg4CAAAAAAIOIiIOJAAAACQOLxEODjsvDiIYKxQXDhcUKzYlDg4OJg4iGTs9Dg4OPTsyAAcOIjsOIhkYPA4ODjw2BwAAAAAKDiIYBgALMgsACQ4xAAAxDg4iPA46AAAAOg4ODg4ODg4OPDMYEQwyDBE7Ozs7Ozs7GDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAAAABAAAAAAQAEAAAAAAAAAgAAAAAAAAAAAAAQAAAAAAAAAAAAAADPz88A39/fACAgIAD///8AcHBwAICAgACQkJAAoKCgANfX1wAoKCgAf39/AIiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAREREAARAAEREAAREQAREAERERABERABERABEREAERABEREQAREQAVEUARERABEQwNERDA0REYHRHDEREQAREQAREQAREREAEQAFEREAEREAJREAERERABmAERERABERDCkQwNERETAiAxEREQARERABEAEREREEAABREREAEAEQwAANEADREMANEQwRABAA0QwA0QwADREAERDA0QARABEQAREAEMDRABEMDREAEQwNEAEQwNEMDQAQwNERABEQwNABDA0REMAAAA0REQAREQAQAQAREREAAAAREREAEREMAAAA0RFAAAAAABURABEREMAADRERQAAAAAAVEQAREREQAREREQAAAAAAEREAEREQwAANEREADREQwBERABEQwAAAAA0RAJEREQgREQAREAAREQABEQEREREQEREAEQwRERERANEADREREBERABEAEREREQARAADREQwREQARAREREREQEQAAERCAEREAEQARERERABEAAAAAABERABEAEREREQARDAAAAADREQARDAAREQAA0RDAAAANEREAERAAAAAAARERLAAC0RERABEQwAAAAA0REREREREREQARERDAAA0REREREREREREAERERERERERERERERERERAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"hubs": [],
"is_podcast": false,
"is_push": false,
"item_count": 4,
"last_seen": "2023-01-11T10:29:36.530001+00:00",
"last_updated": "2023-01-09T00:00:00+00:00",
"score": 16,
"self_url": null,
"last_updated": "2023-01-25T05:00:00+00:00",
"score": 24,
"self_url": "",
"site_name": "xkcd",
"site_url": "https://xkcd.com",
"title": "xkcd.com",
"url": "https://xkcd.com/atom.xml",
"url": "https://xkcd.com/rss.xml",
"velocity": 0.429,
"version": "atom10"
}
"version": "rss20"
}

File diff suppressed because it is too large Load Diff

View File

@@ -13,24 +13,6 @@ let
pkg-list = pkgspec: builtins.map (e: e.pkg) pkgspec;
in
{
imports = [
./aerc.nix
./firefox.nix
./gfeeds.nix
./git.nix
./gpodder.nix
./keyring.nix
./kitty.nix
./mpv.nix
./neovim.nix
./newsflash.nix
./splatmoji.nix
./ssh.nix
./sublime-music.nix
./vlc.nix
./zsh
];
options = {
sane.home-manager.enable = mkOption {
default = false;
@@ -41,106 +23,30 @@ in
default = {};
type = types.attrs;
};
# extra attributes to include in home-manager's `programs` option
sane.home-manager.programs = mkOption {
default = {};
type = types.attrs;
};
};
config = lib.mkIf cfg.enable {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
# XXX this weird rename + closure is to get home-manager's `config.lib.file` to exist.
# see: https://github.com/nix-community/home-manager/issues/589#issuecomment-950474105
home-manager.users.colin = let sysconfig = config; in { config, ... }: {
home-manager.users.colin = {
# run `home-manager-help` to access manpages
# or `man home-configuration.nix`
manual.html.enable = false; # TODO: set to true later (build failure)
manual.manpages.enable = false; # TODO: enable after https://github.com/nix-community/home-manager/issues/3344
home.packages = pkg-list sysconfig.sane.packages.enabledUserPkgs;
home.packages = pkg-list config.sane.packages.enabledUserPkgs;
wayland.windowManager = cfg.windowManager;
home.stateVersion = "21.11";
home.username = "colin";
home.homeDirectory = "/home/colin";
# XDG defines things like ~/Desktop, ~/Downloads, etc.
# these clutter the home, so i mostly don't use them.
xdg.userDirs = {
enable = true;
createDirectories = false; # on headless systems, most xdg dirs are noise
desktop = "$HOME/.xdg/Desktop";
documents = "$HOME/dev";
download = "$HOME/tmp";
music = "$HOME/Music";
pictures = "$HOME/Pictures";
publicShare = "$HOME/.xdg/Public";
templates = "$HOME/.xdg/Templates";
videos = "$HOME/Videos";
programs = {
# XXX: unsure what this does?
home-manager.enable = true;
};
# the xdg mime type for a file can be found with:
# - `xdg-mime query filetype path/to/thing.ext`
xdg.mimeApps.enable = true;
xdg.mimeApps.defaultApplications = let
www = sysconfig.sane.web-browser.browser.desktop;
pdf = "org.gnome.Evince.desktop";
md = "obsidian.desktop";
thumb = "org.gnome.gThumb.desktop";
video = "vlc.desktop";
# audio = "mpv.desktop";
audio = "vlc.desktop";
in {
# HTML
"text/html" = [ www ];
"x-scheme-handler/http" = [ www ];
"x-scheme-handler/https" = [ www ];
"x-scheme-handler/about" = [ www ];
"x-scheme-handler/unknown" = [ www ];
# RICH-TEXT DOCUMENTS
"application/pdf" = [ pdf ];
"text/markdown" = [ md ];
# IMAGES
"image/heif" = [ thumb ]; # apple codec
"image/png" = [ thumb ];
"image/jpeg" = [ thumb ];
# VIDEO
"video/mp4" = [ video ];
"video/quicktime" = [ video ];
"video/x-matroska" = [ video ];
# AUDIO
"audio/flac" = [ audio ];
"audio/mpeg" = [ audio ];
"audio/x-vorbis+ogg" = [ audio ];
};
# libreoffice: disable first-run stuff
xdg.configFile."libreoffice/4/user/registrymodifications.xcu".text = ''
<?xml version="1.0" encoding="UTF-8"?>
<oor:items xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="FirstRun" oor:op="fuse"><value>false</value></prop></item>
<item oor:path="/org.openoffice.Office.Common/Misc"><prop oor:name="ShowTipOfTheDay" oor:op="fuse"><value>false</value></prop></item>
</oor:items>
'';
# <item oor:path="/org.openoffice.Setup/Product"><prop oor:name="LastTimeDonateShown" oor:op="fuse"><value>1667693880</value></prop></item>
# <item oor:path="/org.openoffice.Setup/Product"><prop oor:name="LastTimeGetInvolvedShown" oor:op="fuse"><value>1667693880</value></prop></item>
programs = lib.mkMerge [
{
home-manager.enable = true; # this lets home-manager manage dot-files in user dirs, i think
# "command not found" will cause the command to be searched in nixpkgs
nix-index.enable = true;
}
cfg.programs
];
};
sane.persist.home.plaintext = [ ".cache/nix-index" ];
};
}

View File

@@ -1,20 +0,0 @@
{ config, lib, pkgs, ... }:
lib.mkIf config.sane.home-manager.enable
{
home-manager.users.colin.programs.git = {
enable = true;
userName = "colin";
userEmail = "colin@uninsane.org";
aliases = { co = "checkout"; };
extraConfig = {
# difftastic docs:
# - <https://difftastic.wilfred.me.uk/git.html>
diff.tool = "difftastic";
difftool.prompt = false;
"difftool \"difftastic\"".cmd = ''${pkgs.difftastic}/bin/difft "$LOCAL" "$REMOTE"'';
# now run `git difftool` to use difftastic git
};
};
}

View File

@@ -1,71 +0,0 @@
{ config, lib, ... }:
lib.mkIf config.sane.home-manager.enable
{
home-manager.users.colin.programs.kitty = {
enable = true;
# docs: https://sw.kovidgoyal.net/kitty/conf/
settings = {
# disable terminal bell (when e.g. you backspace too many times)
enable_audio_bell = false;
};
keybindings = {
"ctrl+n" = "new_os_window_with_cwd";
};
# docs: https://github.com/kovidgoyal/kitty-themes
# theme = "1984 Light"; # dislike: awful, harsh blues/teals
# theme = "Adventure Time"; # dislike: harsh (dark)
# theme = "Atom One Light"; # GOOD: light theme. all color combos readable. not a huge fan of the blue.
# theme = "Belafonte Day"; # dislike: too low contrast for text colors
# theme = "Belafonte Night"; # better: dark theme that's easy on the eyes. all combos readable. low contrast.
# theme = "Catppuccin"; # dislike: a bit pale/low-contrast (dark)
# theme = "Desert"; # mediocre: colors are harsh
# theme = "Earthsong"; # BEST: dark theme. readable, good contrast. unique, but decent colors.
# theme = "Espresso Libre"; # better: dark theme. readable, but meh colors
# theme = "Forest Night"; # decent: very pastel. it's workable, but unconventional and muted/flat.
# theme = "Gruvbox Material Light Hard"; # mediocre light theme.
# theme = "kanagawabones"; # better: dark theme. colors are too background-y
# theme = "Kaolin Dark"; # dislike: too dark
# theme = "Kaolin Breeze"; # mediocre: not-too-harsh light theme, but some parts are poor contrast
# theme = "Later This Evening"; # mediocre: not-too-harsh dark theme, but cursor is poor contrast
# theme = "Material"; # decent: light theme, few colors.
# theme = "Mayukai"; # decent: not-too-harsh dark theme. the teal is a bit straining
# theme = "Nord"; # mediocre: pale background, low contrast
# theme = "One Half Light"; # better: not-too-harsh light theme. contrast could be better
theme = "PaperColor Dark"; # BEST: dark theme, very readable still the colors are background-y
# theme = "Parasio Dark"; # dislike: too low contrast
# theme = "Pencil Light"; # better: not-too-harsh light theme. decent contrast.
# theme = "Pnevma"; # dislike: too low contrast
# theme = "Piatto Light"; # better: readable light theme. pleasing colors. powerline prompt is hard to read.
# theme = "Rosé Pine Dawn"; # GOOD: light theme. all color combinations are readable. it is very mild -- may need to manually tweak contrast. tasteful colors
# theme = "Rosé Pine Moon"; # GOOD: dark theme. tasteful colors. but background is a bit intense
# theme = "Sea Shells"; # mediocre. not all color combos are readable
# theme = "Solarized Light"; # mediocre: not-too-harsh light theme; GREAT background; but some colors are low contrast
# theme = "Solarized Dark Higher Contrast"; # better: dark theme, decent colors
# theme = "Sourcerer"; # mediocre: ugly colors
# theme = "Space Gray"; # mediocre: too muted
# theme = "Space Gray Eighties"; # better: all readable, decent colors
# theme = "Spacemacs"; # mediocre: too muted
# theme = "Spring"; # mediocre: readable light theme, but the teal is ugly.
# theme = "Srcery"; # better: highly readable. colors are ehhh
# theme = "Substrata"; # decent: nice colors, but a bit flat.
# theme = "Sundried"; # mediocre: the solar text makes me squint
# theme = "Symfonic"; # mediocre: the dark purple has low contrast to the black bg.
# theme = "Tango Light"; # dislike: teal is too grating
# theme = "Tokyo Night Day"; # medicore: too muted
# theme = "Tokyo Night"; # better: tasteful. a bit flat
# theme = "Tomorrow"; # GOOD: all color combinations are readable. contrast is slightly better than Rose. on the blander side
# theme = "Treehouse"; # dislike: the orange is harsh on my eyes.
# theme = "Urple"; # dislike: weird palette
# theme = "Warm Neon"; # decent: not-too-harsh dark theme. the green is a bit unattractive
# theme = "Wild Cherry"; # GOOD: dark theme: nice colors. a bit flat
# theme = "Xcodedark"; # dislike: bad palette
# theme = "citylights"; # decent: dark theme. some parts have just a bit low contrast
# theme = "neobones_light"; # better light theme. the background is maybe too muted
# theme = "vimbones";
# theme = "zenbones_dark"; # mediocre: readable, but meh colors
# theme = "zenbones_light"; # decent: light theme. all colors are readable. contrast is passable but not excellent. highlight color is BAD
# theme = "zenwritten_dark"; # mediocre: looks same as zenbones_dark
# extraConfig = "";
};
}

View File

@@ -1,13 +0,0 @@
{ config, lib, ... }:
lib.mkIf config.sane.home-manager.enable
{
home-manager.users.colin.programs.mpv = {
enable = true;
config = {
save-position-on-quit = true;
keep-open = "yes";
};
};
}

View File

@@ -1,109 +0,0 @@
{ config, lib, pkgs, ... }:
lib.mkIf config.sane.home-manager.enable
{
# private because there could be sensitive things in the swap
sane.persist.home.private = [ ".cache/vim-swap" ];
home-manager.users.colin.programs.neovim = {
# neovim: https://github.com/neovim/neovim
enable = true;
viAlias = true;
vimAlias = true;
plugins = with pkgs.vimPlugins; [
# docs: surround-nvim: https://github.com/ur4ltz/surround.nvim/
# docs: vim-surround: https://github.com/tpope/vim-surround
vim-surround
# docs: fzf-vim (fuzzy finder): https://github.com/junegunn/fzf.vim
fzf-vim
# docs: https://github.com/KeitaNakamura/tex-conceal.vim/
({
plugin = tex-conceal-vim;
type = "viml";
config = ''
" present prettier fractions
let g:tex_conceal_frac=1
'';
})
({
plugin = vim-SyntaxRange;
type = "viml";
config = ''
" enable markdown-style codeblock highlighting for tex code
autocmd BufEnter * call SyntaxRange#Include('```tex', '```', 'tex', 'NonText')
" autocmd Syntax tex set conceallevel=2
'';
})
# treesitter syntax highlighting: https://nixos.wiki/wiki/Tree_sitters
# docs: https://github.com/nvim-treesitter/nvim-treesitter
# config taken from: https://github.com/i077/system/blob/master/modules/home/neovim/default.nix
# this is required for tree-sitter to even highlight
({
plugin = nvim-treesitter.withAllGrammars;
type = "lua";
config = ''
require'nvim-treesitter.configs'.setup {
highlight = {
enable = true,
-- disable treesitter on Rust so that we can use SyntaxRange
-- and leverage TeX rendering in rust projects
disable = { "rust", "tex", "latex" },
-- disable = { "tex", "latex" },
-- true to also use builtin vim syntax highlighting when treesitter fails
additional_vim_regex_highlighting = false
},
incremental_selection = {
enable = true,
keymaps = {
init_selection = "gnn",
node_incremental = "grn",
mcope_incremental = "grc",
node_decremental = "grm"
}
},
indent = {
enable = true,
disable = {}
}
}
vim.o.foldmethod = 'expr'
vim.o.foldexpr = 'nvim_treesitter#foldexpr()'
'';
})
];
extraConfig = ''
" let the terminal handle mouse events, that way i get OS-level ctrl+shift+c/etc
" this used to be default, until <https://github.com/neovim/neovim/pull/19290>
set mouse=
" copy/paste to system clipboard
set clipboard=unnamedplus
" screw tabs; always expand them into spaces
set expandtab
" at least don't open files with sections folded by default
set nofoldenable
" allow text substitutions for certain glyphs.
" higher number = more aggressive substitution (0, 1, 2, 3)
" i only make use of this for tex, but it's unclear how to
" apply that *just* to tex and retain the SyntaxRange stuff.
set conceallevel=2
" horizontal rule under the active line
" set cursorline
" highlight trailing space & related syntax errors (doesn't seem to work??)
" let c_space_errors=1
" let python_space_errors=1
" enable highlighting of leading/trailing spaces,
" and especially tabs
" source: https://www.reddit.com/r/neovim/comments/chlmfk/highlight_trailing_whitespaces_in_neovim/
set list
set listchars=tab:\·,trail:·,extends:,precedes:,nbsp:
'';
};
}

View File

@@ -1,108 +0,0 @@
{ config, lib, ... }:
lib.mkIf config.sane.home-manager.enable
{
sane.persist.home.plaintext = [
# we don't need to full zsh dir -- just the history file --
# but zsh will sometimes backup the history file and we get fewer errors if we do proper mounts instead of symlinks.
# TODO: should be private?
".local/share/zsh"
# cache gitstatus otherwise p10k fetched it from the net EVERY BOOT
".cache/gitstatus"
];
home-manager.users.colin.programs.zsh = {
enable = true;
enableSyntaxHighlighting = true;
enableVteIntegration = true;
history.ignorePatterns = [ "rm *" ];
dotDir = ".config/zsh";
history.path = "/home/colin/.local/share/zsh/history";
# defaultKeymap = "vicmd"; # vim normal mode (cmd mode)
# powerlevel10k prompt config
# p10k.zsh is the auto-generated config, and i overwrite those defaults here, below.
initExtraBeforeCompInit = (builtins.readFile ./p10k.zsh) + ''
# powerlevel10k launches a gitstatusd daemon to accelerate git prompt queries.
# this keeps open file handles for any git repo i touch for 60 minutes (by default).
# that prevents unmounting whatever device the git repo is on -- particularly problematic for ~/private.
# i can disable gitstatusd and get slower fallback git queries:
# - either universally
# - or selectively by path
# see: <https://github.com/romkatv/powerlevel10k/issues/246>
typeset -g POWERLEVEL9K_VCS_DISABLED_DIR_PATTERN='(/home/colin/private/*|/home/colin/knowledge/*)'
# typeset -g POWERLEVEL9K_DISABLE_GITSTATUS=true
# show user@host also when logged into the current machine.
# default behavior is to show it only over ssh.
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_CONTENT_EXPANSION='$P9K_CONTENT'
'';
initExtra = ''
# zmv is a way to do rich moves/renames, with pattern matching/substitution.
# see for an example: <https://filipe.kiss.ink/zmv-zsh-rename/>
autoload -Uz zmv
# disable `rm *` confirmations
setopt rmstarsilent
function nd() {
mkdir -p "$1";
pushd "$1";
}
'';
# prezto = oh-my-zsh fork; controls prompt, auto-completion, etc.
# see: https://github.com/sorin-ionescu/prezto
prezto = {
enable = true;
pmodules = [
# configures jobs to persist after shell exit; other basic niceties
"environment"
# auto-titles terminal (e.g. based on cwd)
"terminal"
# configures shortcuts like Ctrl+U=undo, Ctrl+L=clear
"editor"
# adds `history-stat` alias, setopts for good history defaults
"history"
# sets AUTO_CD, adds `d` alias to list directory stack, and `1`-`9` to cd that far back the stack
"directory"
# helpers for term colors and styling. used by prompts? might be unnecessary
"spectrum"
# configures aliases like `ll`, `la`, disables globbing for things like rsync
# adds aliases like `get` to fetch a file. also adds `http-serve` alias??
"utility"
# tab completion. requires `utility` module prior to loading
# TODO: enable AUTO_PARAM_SLASH
"completion"
"prompt"
# TODO: enable syntax-highlighting ?
];
prompt.theme = "powerlevel10k";
utility.safeOps = false; # disable `mv` confirmation (and supposedly `rm`, too)
# editor.keymap = "vi";
};
dirHashes = {
# convenient `cd`-isms
"3rd" = "/home/colin/dev/3rd";
"dev" = "/home/colin/dev";
"knowledge" = "/home/colin/knowledge";
"nixos" = "/home/colin/nixos";
"nixpkgs" = "/home/colin/dev/3rd/nixpkgs";
"ref" = "/home/colin/ref";
"secrets" = "/home/colin/knowledge/secrets";
"tmp" = "/home/colin/tmp";
"uninsane" = "/home/colin/dev/uninsane";
"Videos" = "/home/colin/Videos";
};
};
home-manager.users.colin.home.shellAliases = {
":q" = "exit";
# common typos
"cd.." = "cd ..";
"cd../" = "cd ../";
};
}

View File

@@ -2,6 +2,7 @@
rec {
wanted = lib.attrsets.unionOfDisjoint { wantedBeforeBy = [ "multi-user.target" ]; };
wantedDir = wanted { dir = {}; };
wantedSymlink = symlink: wanted { inherit symlink; };
wantedSymlinkTo = target: wantedSymlink { inherit target; };
wantedText = text: wantedSymlink { inherit text; };

View File

@@ -112,6 +112,7 @@ let
kdenlive
kid3 # audio tagging
kitty
krita
libreoffice-fresh # XXX colin: maybe don't want this on mobile
lollypop
@@ -205,6 +206,7 @@ let
fd
file
gawk
git
gptfdisk
hdparm
htop

View File

@@ -160,7 +160,9 @@ let
store-names;
in {
byPath = lib.mkMerge (concatLists [
# convert the list-style per-store entries into attrsOf entries
(applyToAllStores (store: dirToAttrs))
# add the `store` attr to everything we ingested
(applyToAllStores annotateWithStore)
]);
};

View File

@@ -72,6 +72,10 @@ in
default = [];
description = "array of ipv4 addresses on which to listen for DNS queries";
};
quiet = mkOption {
type = types.bool;
default = false;
};
# reference <nixpkgs:nixos/modules/services/web-servers/nginx/vhost-options.nix>
zones = mkOption {
type = types.attrsOf (types.submodule {
@@ -160,11 +164,14 @@ in
systemd.services.trust-dns = {
description = "trust-dns DNS server";
serviceConfig = {
ExecStart = ''
${pkgs.trust-dns}/bin/named \
--config ${configFile} \
--zonedir /
'';
ExecStart =
let
flags = lib.optionalString cfg.quiet "-q";
in ''
${pkgs.trust-dns}/bin/named \
--config ${configFile} \
--zonedir / ${flags}
'';
Type = "simple";
Restart = "on-failure";
RestartSec = "10s";

View File

@@ -0,0 +1,78 @@
diff --git a/pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch b/pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch
index 1d9ca8d838d..d2cf9dd4315 100644
--- a/pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch
+++ b/pkgs/applications/networking/instant-messengers/signald/0001-Fetch-buildconfig-during-gradle-build-inside-Nix-FOD.patch
@@ -11,25 +11,15 @@ diff --git a/build.gradle b/build.gradle
index 799e782..caceaac 100644
--- a/build.gradle
+++ b/build.gradle
-@@ -83,6 +83,9 @@ static String getVersion() {
-
- repositories {
- maven {url "https://gitlab.com/api/v4/groups/6853927/-/packages/maven"} // https://gitlab.com/groups/signald/-/packages
-+ maven {
-+ url "https://plugins.gradle.org/m2/"
-+ }
- mavenCentral()
- }
-
-@@ -104,6 +107,8 @@ dependencies {
- implementation 'io.prometheus:simpleclient_httpserver:0.16.0'
- implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'
- implementation 'io.sentry:sentry:6.4.0'
-+ implementation 'com.github.gmazzo.buildconfig:com.github.gmazzo.buildconfig.gradle.plugin:3.1.0'
-+ implementation 'org.jetbrains.kotlin:kotlin-scripting-jvm:1.7.10'
- testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'
+@@ -87,7 +86,7 @@ repositories {
}
+ dependencies {
+- implementation 'org.signald:signal-service-java-' + getTarget() + ':2.15.3_unofficial_50_signald_1'
++ implementation 'org.signald:signal-service-java-' + getTarget() + ':2.15.3_unofficial_50_signald_2'
+ implementation 'org.bouncycastle:bcprov-jdk15on:1.70'
+ implementation 'com.kohlschutter.junixsocket:junixsocket-common:2.6.1'
+ implementation 'com.kohlschutter.junixsocket:junixsocket-native-common:2.6.1'
@@ -171,4 +176,4 @@ allprojects {
runtime {
options = ['--strip-java-debug-attributes', '--compress', '2', '--no-header-files', '--no-man-pages']
diff --git a/pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch b/pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch
index 96a7d6d2ef3..2f0f6e73159 100644
--- a/pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch
+++ b/pkgs/applications/networking/instant-messengers/signald/0002-buildconfig-local-deps-fixes.patch
@@ -47,15 +47,15 @@ index 799e782..6ecef3e 100644
}
dependencies {
-@@ -104,6 +117,8 @@ dependencies {
- implementation 'io.prometheus:simpleclient_httpserver:0.16.0'
- implementation 'com.squareup.okhttp3:logging-interceptor:4.9.3'
- implementation 'io.sentry:sentry:6.4.0'
-+ implementation 'com.github.gmazzo.buildconfig:com.github.gmazzo.buildconfig.gradle.plugin:3.1.0'
-+ implementation 'org.jetbrains.kotlin:kotlin-scripting-jvm:1.7.10'
- testImplementation 'org.junit.jupiter:junit-jupiter:5.8.2'
+@@ -87,7 +86,7 @@ repositories {
}
+ dependencies {
+- implementation 'org.signald:signal-service-java-' + getTarget() + ':2.15.3_unofficial_50_signald_1'
++ implementation 'org.signald:signal-service-java-' + getTarget() + ':2.15.3_unofficial_50_signald_2'
+ implementation 'org.bouncycastle:bcprov-jdk15on:1.70'
+ implementation 'com.kohlschutter.junixsocket:junixsocket-common:2.6.1'
+ implementation 'com.kohlschutter.junixsocket:junixsocket-native-common:2.6.1'
@@ -167,8 +182,3 @@ allprojects {
}
}
diff --git a/pkgs/applications/networking/instant-messengers/signald/default.nix b/pkgs/applications/networking/instant-messengers/signald/default.nix
index a9e023cdf63..8847707e137 100644
--- a/pkgs/applications/networking/instant-messengers/signald/default.nix
+++ b/pkgs/applications/networking/instant-messengers/signald/default.nix
@@ -54,8 +54,8 @@ let
outputHashMode = "recursive";
# Downloaded jars differ by platform
outputHash = {
- x86_64-linux = "sha256-ANiNDdTuCuDEH5zUPsrVF6Uegdq3zVsMv+uMtYRX0jE=";
- aarch64-linux = "sha256-V9zn4v/ZeLELAwFJ5y7OVAeJwZp4DmHm4KWxE6KpwGs=";
+ x86_64-linux = "sha256-B2T8bM8xdob5507oS1CVO+sszEg9VWL8QKUEanIlXvk=";
+ aarch64-linux = "sha256-I314eLUQP8HPbwc+10ZDKzcn9WsqLGuBtfoiCEYZRck=";
}.${stdenv.system} or (throw "Unsupported platform");
};

View File

@@ -6,13 +6,6 @@
sha256 = "sha256-Ne4hyHQDwBHUlWo8Z3QyRdmEv1rYGOjFGxSfOAcLUvQ=";
})
# trust-dns: init at 0.22.0
(fetchpatch {
# https://git.uninsane.org/colin/nixpkgs/compare/master...pr-trust-dns.diff
url = "https://git.uninsane.org/colin/nixpkgs/commit/feee7e0357a74ab0510b2d113a3bdede1d509759.diff";
sha256 = "sha256-t4sG+xLDaxbJ/mV5G18N4ag8EC3IXPgtN5FJGANh1Dc=";
})
# splatmoji: init at 1.2.0
(fetchpatch {
# https://github.com/NixOS/nixpkgs/pull/211874
@@ -20,15 +13,27 @@
hash = "sha256-IvsIcd2wPdz4b/7FMrDrcVlIZjFecCQ9uiL0Umprbx0=";
})
# matrix-synapse,mautrix-facebook: fix runtime inclusion of python3 systemd #212391
# merged 2023/01/24
# fix libreoffice build by: Revert "mdds: 2.0.3 -> 2.1.0"
# merged 2023/01/25
(fetchpatch {
url = "https://github.com/NixOS/nixpkgs/pull/212391.diff";
hash = "sha256-N9lzQLi8NN9cbd+d04yx2v5mI9tVnlSKVbl0+QGE1YQ=";
url = "https://github.com/NixOS/nixpkgs/pull/212583.diff";
hash = "sha256-nkXgwQUtxYkJT2OzG6Jc72snizW5wHvR1nmh2KDnaPc=";
})
# fix handbrake build by: handbrake: 1.5.1 -> 1.6.1
# PR opened 2023/01/23
(fetchpatch {
# see alternate fix: <https://github.com/NixOS/nixpkgs/pull/211834>
url = "https://github.com/NixOS/nixpkgs/pull/212306.diff";
hash = "sha256-iQX2NaZaCzZVRlCM0pgXt0gecNwhXGeh3kXEiY38ZIM=";
})
./2022-12-19-i2p-aarch64.patch
# fix for <https://gitlab.com/signald/signald/-/issues/345>
# allows to actually run signald
./2023-01-25-signald-update.patch
# # kaiteki: init at 2022-09-03
# vendorHash changes too frequently (might not be reproducible).
# using local package defn until stabilized

View File

@@ -30,8 +30,5 @@
# error: 1 dependencies of derivation '/nix/store/hrb3qpdbisqh0lzlyz1g9g4164khmqwn-etc.drv' failed to build
# error: 1 dependencies of derivation '/nix/store/ny21xyicbgim5wy7ksg2hibd9gn7i01b-nixos-system-moby-23.05pre-git.drv' failed to build
# nheko
# TODO(unpin): broken build on 2023/01/16. <https://hydra.nixos.org/build/205551450>
handbrake
;
})

View File

@@ -28,8 +28,6 @@
#### 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
@@ -60,7 +58,6 @@
# provided by nixpkgs patch or upstream preview
# splatmoji = prev.callPackage ../pkgs/splatmoji { };
# signaldctl = prev.callPackage ../pkgs/signaldctl { };
};
in sane // { inherit sane; }
)

View File

@@ -5,11 +5,16 @@ from feedsearch_crawler import search, sort_urls
from feedsearch_crawler.crawler import coerce_url
import json
import logging
import sys
url, jsonPath = sys.argv[1:]
logging.getLogger().setLevel(logging.DEBUG)
logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
logging.getLogger(__name__).debug("logging enabled")
url = coerce_url(url, default_scheme="https")
items = search(url)
items = search(url, total_timeout=180, request_timeout=90, max_content_length=100*1024*1024)
items = sort_urls(items)
# print all results

View File

@@ -0,0 +1,13 @@
diff --git a/feedsearch_crawler/crawler/request.py b/feedsearch_crawler/crawler/request.py
index 70f3d5a..00668ad 100644
--- a/feedsearch_crawler/crawler/request.py
+++ b/feedsearch_crawler/crawler/request.py
@@ -277,7 +277,7 @@ class Request(Queueable):
"""
body: bytes = b""
try:
- async for chunk in resp.content.iter_chunked(1024):
+ async for chunk in resp.content.iter_chunked(64 * 1024):
if not chunk:
break
body += chunk

View File

@@ -28,6 +28,12 @@ buildPythonPackage rec {
hash = "sha256-pzvyeXzqdi8pRjk2+QjKhJfgtxbgVT6C08K9fhVFVmY=";
};
patches = [
# fix for <https://github.com/aio-libs/aiohttp/issues/4581>
# where large feeds would timeout in an unrecoverable way
./0001-response-chunk-size.patch
];
nativeBuildInputs = [
poetry-core
];

View File

@@ -1,260 +0,0 @@
{ lib, beamPackages
, fetchFromGitHub, fetchFromGitLab
, file, cmake, bash
, libxcrypt
, nixosTests, writeText
, cookieFile ? "/var/lib/pleroma/.cookie"
, ...
}:
beamPackages.mixRelease rec {
pname = "pleroma";
version = "2.4.52";
src = fetchFromGitLab {
domain = "git.pleroma.social";
owner = "pleroma";
repo = "pleroma";
rev = "7a519b6a6607bc1dd22e6a3450aebf0f1ff11fb8";
# to update: uncomment the null hash, run nixos-rebuild and
# compute the new hash with `nix to-sri sha256:<output from failed nix build>`
sha256 = "sha256-6NglBcEGEvRlYMnVNB8kr4i/fccrzO6mnyp3X+O0m74=";
};
preFixup = if (cookieFile != null) then ''
# There's no way to use a subprocess to cat the content of the
# file cookie using wrapProgram: it gets escaped (by design) with
# a pair of backticks :(
# We have to come up with our own custom wrapper to do this.
function wrapWithCookie () {
local hidden
hidden="$(dirname "$1")/.$(basename "$1")"-wrapped
while [ -e "$hidden" ]; do
hidden="''${hidden}_"
done
mv "$1" "''${hidden}"
cat > "$1" << EOF
#!${bash}/bin/bash
export RELEASE_COOKIE="\$(cat "${cookieFile}")"
exec -a "\$0" "''${hidden}" "\$@"
EOF
chmod +x "$1"
}
for f in "$out"/bin/*; do
if [[ -x "$f" ]]; then
wrapWithCookie "$f"
fi
done
'' else "";
stripDebug = false;
mixNixDeps = import ./mix.nix {
inherit beamPackages lib;
overrides = (final: prev: {
# mix2nix does not support git dependencies yet,
# so we need to add them manually. these are grabbed from git/pleroma/`mix.exs`
gettext = beamPackages.buildMix rec {
name = "gettext";
version = "0.19.1";
src = fetchFromGitHub {
owner = "tusooa";
repo = "gettext";
rev = "72fb2496b6c5280ed911bdc3756890e7f38a4808";
sha256 = "V0qmE+LcAbVoWsJmWE4fwrduYFIZ5BzK/sGzgLY3eH0=";
};
beamDeps = with final; [ ];
};
crypt = beamPackages.buildRebar3 rec {
name = "crypt";
version = "0.4.3";
# src = fetchFromGitHub {
# owner = "msantos";
# repo = "crypt";
# rev = "f75cd55325e33cbea198fb41fe41871392f8fb76";
# sha256 = "sha256-ZYhZTe7cTITkl8DZ4z2IOlxTX5gnbJImu/lVJ2ZjR1o=";
# };
# this is the old crypt, from before 2021/09/21.
# nixpkgs still uses this as of 2022-10-24 and it works.
src = fetchFromGitLab {
domain = "git.pleroma.social";
group = "pleroma";
owner = "elixir-libraries";
repo = "crypt";
rev = "cf2aa3f11632e8b0634810a15b3e612c7526f6a3";
sha256 = "sha256-48QIsgyEaDzvnihdsFy7pYURLFcb9G8DXIrf5Luk3zo=";
};
postInstall = "mv $out/lib/erlang/lib/crypt-${version}/priv/{source,crypt}.so";
beamDeps = with final; [ elixir_make ];
buildInputs = [ libxcrypt ];
};
prometheus_ex = beamPackages.buildMix rec {
name = "prometheus_ex";
version = "3.0.5";
src = fetchFromGitHub {
owner = "lanodan";
repo = "prometheus.ex";
# branch = "fix/elixir-1.14";
rev = "31f7fbe4b71b79ba27efc2a5085746c4011ceb8f";
sha256 = "sha256-2PZP+YnwnHt69HtIAQvjMBqBbfdbkRSoMzb1AL2Zsyc=";
};
# src = fetchFromGitLab {
# domain = "git.pleroma.social";
# group = "pleroma";
# owner = "elixir-libraries";
# repo = "prometheus.ex";
# rev = "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5";
# sha256 = "1v0q4bi7sb253i8q016l7gwlv5562wk5zy3l2sa446csvsacnpjk";
# };
beamDeps = with final; [ prometheus ];
};
prometheus_phx = beamPackages.buildMix rec {
name = "prometheus_phx";
version = "0.1.1";
preBuild = ''
touch config/prod.exs
'';
src = fetchFromGitLab {
domain = "git.pleroma.social";
group = "pleroma";
owner = "elixir-libraries";
repo = "prometheus-phx";
rev = "0c950ac2d145b1ee3fc8ee5c3290ccb9ef2331e9";
sha256 = "sha256-HjN0ku1q5aNtrhHopch0wpp4Z+dMCGj5GxHroiz5u/w=";
};
beamDeps = with final; [ prometheus_ex ];
};
remote_ip = beamPackages.buildMix rec {
name = "remote_ip";
version = "0.1.5";
src = fetchFromGitLab {
domain = "git.pleroma.social";
group = "pleroma";
owner = "elixir-libraries";
repo = "remote_ip";
rev = "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8";
sha256 = "0c7vmakcxlcs3j040018i7bfd6z0yq6fjfig02g5fgakx398s0x6";
};
beamDeps = with final; [ combine plug inet_cidr ];
};
captcha = beamPackages.buildMix rec {
name = "captcha";
version = "0.1.0";
src = fetchFromGitLab {
domain = "git.pleroma.social";
group = "pleroma";
owner = "elixir-libraries";
repo = "elixir-captcha";
rev = "e0f16822d578866e186a0974d65ad58cddc1e2ab";
sha256 = "0qbf86l59kmpf1nd82v4141ba9ba75xwmnqzpgbm23fa1hh8pi9c";
};
beamDeps = with final; [ ];
};
# majic needs a patch to build
majic = beamPackages.buildMix rec {
name = "majic";
version = "1.0.0";
src = beamPackages.fetchHex {
pkg = "${name}";
version = "${version}";
sha256 = "17hab8kmqc6gsiqicfgsaik0rvmakb6mbshlbxllj3b5fs7qa1br";
};
# src = fetchFromGitLab {
# domain = "git.pleroma.social";
# group = "pleroma";
# owner = "elixir-libraries";
# repo = "majic";
# rev = "289cda1b6d0d70ccb2ba508a2b0bd24638db2880";
# sha256 = "15605lsdd74bmsp5z96f76ihn7m2g3p1hjbhs2x7v7309n1k108n";
# };
# patchPhase = ''
# substituteInPlace lib/majic/server.ex --replace "erlang.now" "erlang.time"
# '';
buildInputs = [ file ];
beamDeps = with final; [ nimble_pool mime plug elixir_make ];
};
# Some additional build inputs and build fixes
http_signatures = prev.http_signatures.override {
patchPhase = ''
substituteInPlace mix.exs --replace ":logger" ":logger, :public_key"
'';
};
fast_html = prev.fast_html.override {
nativeBuildInputs = [ cmake ];
dontUseCmakeConfigure = true;
};
syslog = prev.syslog.override {
buildPlugins = with beamPackages; [ pc ];
};
# This needs a different version (1.0.14 -> 1.0.18) to build properly with
# our Erlang/OTP version.
eimp = beamPackages.buildRebar3 rec {
name = "eimp";
version = "1.0.18";
src = beamPackages.fetchHex {
pkg = name;
inherit version;
sha256 = "0fnx2pm1n2m0zs2skivv43s42hrgpq9i143p9mngw9f3swjqpxvx";
};
patchPhase = ''
echo '{plugins, [pc]}.' >> rebar.config
'';
buildPlugins = with beamPackages; [ pc ];
beamDeps = with final; [ p1_utils ];
};
mime = prev.mime.override {
patchPhase = let
cfgFile = writeText "config.exs" ''
use Mix.Config
config :mime, :types, %{
"application/activity+json" => ["activity+json"],
"application/jrd+json" => ["jrd+json"],
"application/ld+json" => ["activity+json"],
"application/xml" => ["xml"],
"application/xrd+xml" => ["xrd+xml"]
}
'';
in ''
mkdir config
cp ${cfgFile} config/config.exs
'';
};
});
};
passthru = {
tests.pleroma = nixosTests.pleroma;
inherit mixNixDeps;
};
meta = with lib; {
description = "ActivityPub microblogging server";
homepage = "https://git.pleroma.social/pleroma/pleroma";
license = licenses.agpl3;
maintainers = with maintainers; [ petabyteboy ninjatrappeur yuka kloenk ];
platforms = platforms.unix;
};
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,16 +0,0 @@
in pleroma checkout:
- grab version: `rg 'version: ' mix.exs`
in default.nix:
- update `rev` and recompute sha256.
in pleroma checkout:
- `mix2nix > mix.nix`
in nix repo:
- cp the new mix.nix here.
- move majic from mix.nix -> default.nix and add:
- buildInputs = [ file ];
- update `mixNixDeps` in default.nix:
- grab the version from pleroma/mix.exs or mix.lock
- redundant?: inside mix.nix, change base64url to use buildRebar3 instead of buildMix

View File

@@ -1,24 +0,0 @@
{ lib
, buildGoModule
, fetchFromGitLab }:
buildGoModule rec {
pname = "signaldctl";
version = "0.6.1";
src = fetchFromGitLab {
owner = "signald";
repo = "signald-go";
rev = "v${version}";
hash = "sha256-lMJyr4BPZ8V2f//CUkr7CVQ6o8nRyeLBHMDEyLcHSgQ=";
};
vendorHash = "sha256-LGIWAVhDJCg6Ox7U4ZK15K8trjsvSZm4/0jNpIDmG7I=";
meta = with lib; {
description = "A golang library for communicating with signald";
homepage = "https://signald.org/signaldctl/";
license = licenses.gpl3;
maintainers = with maintainers; [ colinsane ];
platforms = [ "x86_64-linux" "aarch64-linux" ];
};
}