diff --git a/modules/home/librewolf.nix b/modules/home/librewolf.nix index 3d07f6d..4561e86 100755 --- a/modules/home/librewolf.nix +++ b/modules/home/librewolf.nix @@ -37,6 +37,7 @@ (extension "enhancer-for-youtube" "enhancerforyoutube@maximerf.addons.mozilla.org") (extension "indie-wiki-buddy" "{cb31ec5d-c49a-4e5a-b240-16c767444f62}") (extension "libredirect" "7esoorv3@alefvanoon.anonaddy.me") + (extension "new-tab-override" "newtaboverride@agenedia.com") (extension "privacy-badger17" "jid1-MnnxcxisBPnSXQ@jetpack") (extension "return-youtube-dislikes" "{762f9885-5a13-4abd-9c77-433dcd38b8fd}") (extension "ublock-origin" "uBlock0@raymondhill.net") @@ -45,8 +46,15 @@ profiles.wo2w = { search = { force = true; - default = "ddg"; - privateDefault = "ddg"; + default = "searxng"; + privateDefault = "searxng"; + engines = { + searxng = { + name = "SearXNG"; + iconMapObj."16" = "https://searxng.taild5f7e6.ts.net/favicon.ico"; + urls = [{ template = "https://searxng.taild5f7e6.ts.net/search?q={searchTerms}"; }]; + }; + }; }; settings = { "browser.urlbar.suggest.history" = true; @@ -54,8 +62,10 @@ "browser.urlbar.suggest.openpage" = false; "browser.urlbar.suggest.topsites" = false; "browser.urlbar.suggest.recentsearches" = false; + # remember tabs on startup "browser.startup.page" = 3; + "browser.startup.homepage" = "https://glance.taild5f7e6.ts.net"; # encrypted dns "network.trr.mode" = 2; @@ -67,8 +77,7 @@ "privacy.clearOnShutdown.cache" = false; "privacy.clearOnShutdown.cookies" = false; "privacy.clearOnShutdown.sessions" = false; - "privacy.donottrackheader.enabled" = true; - + "privacy.globalprivacycontrol.enabled" = true; # use xdg file picker instead of builtin browser picker "widget.use-xdg-desktop-portal.file-picker" = 1; }; diff --git a/modules/nixos/services/homeserver/caddy.nix b/modules/nixos/services/homeserver/caddy.nix index 1f6c8fe..d0565be 100755 --- a/modules/nixos/services/homeserver/caddy.nix +++ b/modules/nixos/services/homeserver/caddy.nix @@ -29,11 +29,9 @@ enableReload = false; extraConfig = '' - (cloudflare-tls) { - tls ${config.sops.secrets."caddy/wo2wz.fyi.crt".path} ${config.sops.secrets."caddy/wo2wz.fyi.key".path} - } - (default-settings) { + import httpcat-errors + encode header { @@ -45,6 +43,26 @@ -X-Powered-By } } + + (cloudflare-tls) { + tls ${config.sops.secrets."caddy/wo2wz.fyi.crt".path} ${config.sops.secrets."caddy/wo2wz.fyi.key".path} + } + + (httpcat-errors) { + handle_errors { + header Content-Type text/html + respond < + + {err.status_code} {err.status_text} + + {err.status_code} {err.status_text} +

shit

error id: {err.id}

+ + + HTML + } + } ''; # have to specify node tags here because if there are two tailscale blocks it just dont work globalConfig = '' @@ -67,6 +85,9 @@ tags tag:drone + glance { + tags tag:drone tag:glance + } grafana { tags tag:drone tag:grafana } diff --git a/modules/nixos/services/homeserver/default.nix b/modules/nixos/services/homeserver/default.nix index 0ed971d..22df8a8 100755 --- a/modules/nixos/services/homeserver/default.nix +++ b/modules/nixos/services/homeserver/default.nix @@ -9,6 +9,7 @@ ./continuwuity.nix ./forgejo.nix ./gameserver-caddy.nix + ./glance.nix ./jellyfin.nix ./kanidm.nix ./nextcloud.nix diff --git a/modules/nixos/services/homeserver/glance.nix b/modules/nixos/services/homeserver/glance.nix new file mode 100644 index 0000000..be9ef49 --- /dev/null +++ b/modules/nixos/services/homeserver/glance.nix @@ -0,0 +1,176 @@ +{ config, ... }: + +{ + sops.secrets."glance/secrets.env" = {}; + + services.caddy.virtualHosts."glance.taild5f7e6.ts.net".extraConfig = '' + import default-settings + + bind tailscale/glance + + reverse_proxy localhost:${toString config.services.glance.settings.server.port} + ''; + + services.glance = { + enable = true; + environmentFile = config.sops.secrets."glance/secrets.env".path; + settings = { + server = { + host = "127.0.0.1"; + port = 8008; + proxied = true; + }; + + pages = + let + domain = "wo2wz.fyi"; + tsDomain = "taild5f7e6.ts.net"; + in [ + { + name = "Home"; + columns = [ + { + size = "small"; + widgets = [ + { + # xkcd + type = "custom-api"; + cache = "1h"; + title = "XKCD"; + title-url = "https://xkcd.com"; + + url = "https://xkcd.com/info.0.json"; + template = '' + {{ .JSON.String "title" }} + + ''; + } + { + type = "hacker-news"; + cache = "30m"; + limit = 10; + collapse-after = 5; + } + ]; + } + { + size = "full"; + widgets = [ + { + type = "search"; + title-url = "https://searxng.${tsDomain}"; + search-engine = "https://searxng.${tsDomain}/search?q={QUERY}"; + autofocus = true; + } + { + type = "bookmarks"; + same-tab = true; + groups = [ + { + title = "Services"; + links = [ + { + title = "Proton Mail"; + icon = "sh:proton-mail"; + url = "https://mail.proton.me"; + } + { + title = "Cloudflare Dashboard"; + icon = "sh:cloudflare"; + url = "https://dash.cloudflare.com"; + } + { + title = "Tailscale Dashboard"; + icon = "sh:tailscale"; + url = "https://login.tailscale.com/admin"; + } + ]; + } + { + title = "Self Hosted (Public)"; + links = [ + { + title = "Nextcloud"; + icon = "sh:nextcloud"; + url = "https://nextcloud.${domain}/index.php"; + } + { + title = "Forgejo"; + icon = "sh:forgejo"; + url = "https://git.${domain}"; + } + ]; + } + { + title = "Self Hosted (Private)"; + links = [ + { + title = "Vaultwarden"; + icon = "sh:vaultwarden"; + url = "https://vaultwarden.${tsDomain}"; + } + { + title = "Jellyfin"; + icon = "sh:jellyfin"; + url = "https://jellyfin.${tsDomain}"; + } + ]; + } + { + title = "Self Hosted (Monitoring)"; + links = [ + { + title = "Grafana"; + icon = "sh:grafana"; + url = "https://grafana.${tsDomain}"; + } + { + title = "Uptime Kuma"; + icon = "sh:uptime-kuma"; + url = "https://uptime-kuma.${domain}"; + } + ]; + } + ]; + } + ]; + } + { + size = "small"; + widgets = [ + { + type = "clock"; + title = "Time and Weather"; + hour-format = "24h"; + timezones = [ + { + timezone = "America/New_York"; + label = "New York"; + } + { + timezone = "Etc/UTC"; + label = "UTC"; + } + ]; + } + { + type = "calendar"; + hide-header = true; + first-day-of-week = "sunday"; + } + { + type = "weather"; + hide-header = true; + location = "\${GLANCE_WEATHER_LOCATION}"; + units = "imperial"; + hour-format = "24h"; + hide-location = true; + } + ]; + } + ]; + } + ]; + }; + }; +} \ No newline at end of file diff --git a/modules/nixos/services/homeserver/vaultwarden.nix b/modules/nixos/services/homeserver/vaultwarden.nix index e788729..ad71f08 100755 --- a/modules/nixos/services/homeserver/vaultwarden.nix +++ b/modules/nixos/services/homeserver/vaultwarden.nix @@ -14,7 +14,8 @@ bind tailscale/vaultwarden # block connections to admin login - respond /admin/* 403 + @admin path /admin /admin/* + respond @admin 403 reverse_proxy localhost:8000 ''; diff --git a/secrets/drone.yaml b/secrets/drone.yaml index ff5f1b2..d20344a 100755 --- a/secrets/drone.yaml +++ b/secrets/drone.yaml @@ -9,6 +9,8 @@ cloudflared: forgejo: secret-key: ENC[AES256_GCM,data:KFKTo9Qy6rLOmZmSfTIpJ7RLI+MEhttH9W9Orv6KJhoWG+7mzKNg8SK8ejcj4xVakerFd6XwOITTcmS+xQdpVg==,iv:KAJvvg0DfzF2aQPciCQyhZBlKPx4YNPSCX78Bqh3BGQ=,tag:kCeA8DqOtDPUUjRL4aAt9g==,type:str] internal-token: ENC[AES256_GCM,data:OQYevugICOaLCQxSleATN1cKVDRvfV5paAas8Opzb1qOu+VmXCcJnoJEd7z0oswQo4Tar0ps9KvuYvOsCcJGChb9U2drFjRRpNQaVWZYG5uIZY2QHzA+Ak/a88JGu025czsAFxLbg5Uj,iv:xglBQ+pqoGZcRPu6GJLxSYs9f+G/CgZUze+hPkdn80Y=,tag:hvMdcV6yX1NjpD7zxRFNLA==,type:str] +glance: + secrets.env: ENC[AES256_GCM,data:GuSXJuflDiLszoqUCZV/c4ynsYCmaNJGFMFqIWBVTaVG/+HnPmaBQ2LF+C1x+AgwiiszQEV1JXQfPzfgPmqcLpgjTw==,iv:L6gwfqwkLyo38KQwvsMLs0G37dmt1Y6oIXNfKAqRnhU=,tag:EfRlAqy7rUZBwuD38ELV8w==,type:str] grafana: secrets.env: ENC[AES256_GCM,data:yv7u5+8l7M4PJ4BzCUlTGX8PeFxxVMtS2Pi4yKnvAeZf+4tcz6NFNRjyPeqTFinqmZ8yq+iYA1tBS5Gy9DTHo8TzmhoaWBPI/ZUXQgl5Y7lnGBOyZ6wHlllsP8zbC+zEWW+gRssaXj6yYBuvQTTzfSqSlmZdB7VwhUegiVxMs722jbys1Rl+NE8TKDc384IbwPRAIi6ZO+UH,iv:M/dgcJ++gMH5/sNQDUQvkiJW2n+fSkPCEDZBcFRXWuE=,tag:SocmiehkaCzl9ZB8dNZPZQ==,type:str] kanidm: @@ -45,7 +47,7 @@ sops: N0U5bkt4aXJOS3N0Z2N4YTg4TDVUVncKCQLUTMmdM/IPzV3NDRhPdta1tvXxy/6P RYbLzlUryw+tqfTp8nDrdxyOWScLNzPOswAq0Qf7VMcEQ5bJEkAOhQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-02-05T14:48:03Z" - mac: ENC[AES256_GCM,data:4xjci10r/reABYCATMOay5VGn/lhLLpojgSQ2QjVkgxyKM2zcJleJjOwbxdj+D55ntlxlJSEEhxBZ/Ie8BujqQv/01FQrdUwRWEFqD/aHtAhFkUjsEFlpHhN2mzXQpqFB4WQDrjkqKkPpcw9PmrNlf9TOjPrl4CS+9b2HtDnYmw=,iv:L/3c+amIPkP9n8A3ECLewi8NlsiVr9GCQOKs1N0jK+c=,tag:TS/wqMF+n8Sux7k4ANv6NA==,type:str] + lastmodified: "2026-02-16T22:07:49Z" + mac: ENC[AES256_GCM,data:eBcRGioZ1oIPOljdmY/o3lR5UIkm6H9QggE9uPXrJO5hHfi0CBsVkpHACFcd/H5qBd29LUGajHB5m3xbIJErPStsrl5lo32+QNW8sYybxf9MchqZuB7U2H7qfCGrS6TB82FoTc4WKkwWxcbJlLzrtp8cF/jY+xOpB6KisBTyrFg=,iv:r63ELQTJ006K5b8muq1hKHyCKhvW7CxeAlIDSbM39ac=,tag:cs2tyb+Ti4Gjz00AfivrLQ==,type:str] unencrypted_suffix: _unencrypted version: 3.11.0