From f1d4ea06fc6a7969992f0dfe51709c4b71251f1f Mon Sep 17 00:00:00 2001 From: Nickolaj Jepsen Date: Tue, 20 Jan 2026 00:22:18 +0100 Subject: [PATCH] feat: add zwift integration to home-assistant --- hosts/desktop/monitors.nix | 4 +- justfile | 1 + modules/homelab/home-assistant.nix | 38 +++++++++++++++++- modules/homelab/sso.nix | 5 +++ modules/programs/opencode.nix | 4 +- ...1fb1cd9e147d47728d2b7a59ac-hassSecrets.age | Bin 0 -> 417 bytes ...fd4d365506669c2d35e6d3abc5-hassSecrets.age | 8 ---- secrets/hosts/homelab/hass.yaml.age | Bin 474 -> 493 bytes 8 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 secrets/hosts/homelab/.rekey/1e5aaf1fb1cd9e147d47728d2b7a59ac-hassSecrets.age delete mode 100644 secrets/hosts/homelab/.rekey/89aac8fd4d365506669c2d35e6d3abc5-hassSecrets.age diff --git a/hosts/desktop/monitors.nix b/hosts/desktop/monitors.nix index 827b040..b18b2af 100644 --- a/hosts/desktop/monitors.nix +++ b/hosts/desktop/monitors.nix @@ -1,7 +1,7 @@ _: { monitors = [ { - name = "DP-2"; + name = "DP-3"; resolution = { width = 2560; height = 1440; @@ -14,7 +14,7 @@ _: { }; } { - name = "DP-3"; + name = "DP-2"; resolution = { width = 2560; height = 1440; diff --git a/justfile b/justfile index f681c54..9dc4a9a 100644 --- a/justfile +++ b/justfile @@ -39,6 +39,7 @@ switch hostname=`hostname -s` target='': else {{ nixcmd }} run nixpkgs#nixos-rebuild -- switch \ --flake .#{{ hostname }} \ + --use-substitutes \ --target-host {{ target }} \ --sudo fi diff --git a/modules/homelab/home-assistant.nix b/modules/homelab/home-assistant.nix index 0fea1ab..d363afd 100644 --- a/modules/homelab/home-assistant.nix +++ b/modules/homelab/home-assistant.nix @@ -79,6 +79,36 @@ in { hash = "sha256-W9xO3JjnRKHk/dlXMA6y5nEJl/KsGzPvJoumGw+nohw="; }; }) + (pkgs.buildHomeAssistantComponent rec { + owner = "snicker"; + domain = "zwift"; + version = "v3.3.5"; + src = pkgs.fetchFromGitHub { + inherit owner; + repo = "zwift_hass"; + rev = version; + hash = "sha256-+lJ6Otp8lT+xVtjiQLSQrqT5cVinRTRPTzS+HB1AxB0="; + }; + propagatedBuildInputs = [ + (pkgs.python313.pkgs.buildPythonPackage rec { + pname = "zwift-client"; + version = "0.2.0"; + pyproject = true; + src = pkgs.fetchFromGitHub { + owner = "nickolaj-jepsen"; + repo = "zwift-client"; + rev = "882fb881f1271dc104fd0250cab4ceb6e3710a59"; + hash = "sha256-4gOlWG+QVwODlIhiNH7rhiD0rzNv2WxY2ty9o/51eHU="; + }; + doCheck = false; + propagatedBuildInputs = with pkgs.python313.pkgs; [ + hatchling + requests + protobuf + ]; + }) + ]; + }) ]; extraComponents = [ "default_config" @@ -110,8 +140,14 @@ in { "127.0.0.1" "::1" ]; - # base_url = "https://ha.nickolaj.com"; }; + sensor = [ + { + platform = "zwift"; + username = "!secret zwift_username"; + password = "!secret zwift_password"; + } + ]; automation = "!include automations.yaml"; script = "!include scripts.yaml"; diff --git a/modules/homelab/sso.nix b/modules/homelab/sso.nix index f4927f5..032dacd 100644 --- a/modules/homelab/sso.nix +++ b/modules/homelab/sso.nix @@ -108,4 +108,9 @@ in { cookie-domain = ".${rootDomain}"; }; }; + + systemd.services.oauth2-proxy.serviceConfig = { + Restart = "always"; + RestartSec = "5s"; + }; }) diff --git a/modules/programs/opencode.nix b/modules/programs/opencode.nix index 5cdbe6f..45f8704 100644 --- a/modules/programs/opencode.nix +++ b/modules/programs/opencode.nix @@ -7,8 +7,8 @@ }: { config = lib.mkIf config.fireproof.dev.enable { environment.systemPackages = with inputs.opencode.packages.${pkgs.stdenv.hostPlatform.system}; [ - opencode - desktop + # opencode + # desktop ]; }; } diff --git a/secrets/hosts/homelab/.rekey/1e5aaf1fb1cd9e147d47728d2b7a59ac-hassSecrets.age b/secrets/hosts/homelab/.rekey/1e5aaf1fb1cd9e147d47728d2b7a59ac-hassSecrets.age new file mode 100644 index 0000000000000000000000000000000000000000..2a2ba6f72fbe8d55a540bdd2160d5ba65041c71c GIT binary patch literal 417 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR14F3!+RO))YxHMCSHttixvDpxQ{3@+Dp zGRm(qaF56+$;?fu$jJ(*D6cfh4bBbstIYRLjPwXKcFHk!bmdB}DAmr$iwHC_(JpiJ zFtdp8jm%GTN)Jg5PA@49h^PwIc5*VwH3{}{F#y@7>8@Xx>ZGTeUX+?xoT{MhWL~Xj zs-Wdzw;+*VZY?ADj=I-bnl4D|&%%!WVtB{)# zTvDE-ZCR1(?3R_OpX(D^=wDf7>{?``ZC2vp?44Z_?j7u19v+hE%4L_-x@$_PYlE#+ z>b+&D4}Y&K+9N(;!lb+R5-(}4TK<}$qd86FQ}N_S8{Zz(cAd~1HuKVrT&JQh3yUZI zGv&y9^4_&P>2fsNW2L@{$}d3$%JwTCl5x+rd!;nz|0D#RrJJ5$b_+Y1@i-A(BI(_JXw PJSpVUBI&I)D@^17E2O0a literal 0 HcmV?d00001 diff --git a/secrets/hosts/homelab/.rekey/89aac8fd4d365506669c2d35e6d3abc5-hassSecrets.age b/secrets/hosts/homelab/.rekey/89aac8fd4d365506669c2d35e6d3abc5-hassSecrets.age deleted file mode 100644 index 79e50f8..0000000 --- a/secrets/hosts/homelab/.rekey/89aac8fd4d365506669c2d35e6d3abc5-hassSecrets.age +++ /dev/null @@ -1,8 +0,0 @@ -age-encryption.org/v1 --> ssh-ed25519 uxq+Zw reTHDLwj8jaI7giq5hw77+cvVurKP2vR8KeonjAJ+nY -Pe6Df2WQawEnCp5GVCzegzEJaK868bhwZm2hEEwAc/I --> 6`Rk-grease K=O ttrh.^ [o4vdGR -9xDUT+18cwMzzTgWlQzWBAniL9GAv+e4rmhwu3Vdwdh/mBeXJdfgEMxTqyRZk9TX -BSW+CifV9iGZXmYm9b+NzKwWJUQ ---- /NXPE/9QIghJoaXFNtmPMvs78dD2RdXbDWiBnwgXIzo -er12G [sM[#ԝ,I< *~aYvYXOQK:#g&:mHKǷ EZ-pj!] \ No newline at end of file diff --git a/secrets/hosts/homelab/hass.yaml.age b/secrets/hosts/homelab/hass.yaml.age index 8bb8ad458d8ae0868dc5a832777938ba55330505..dc704fa21dd0843f3f91e3d4f311052ed58a7632 100644 GIT binary patch delta 471 zcmcb`{FZrwLVZq!fq9xsh_OLPM0!NINts(#c~X&YN}yL#mUEJCfMJD~MYvH;Rd#+* zF_*WIi;qWYkXNW-Rftz)a7a#ONsfU}UVdnLxT9-Yj!TAFkxOWjQG~a9HkYoQLP2Jk zZh?`hnL?qlk6&21f}@d_QH7~xYCwrwk)xA=nR%gke!Zh*gr&Y=h((Z-YoLpTafrE_ zd2v8Nt~Qs6fp1EYU#?G?WnNiYTCt<4i&J<>T2yv^uD@GJMR0LmMRBHEKxUb~vn$9l z)v`L>^rFt{j8n)WTHXLQ5l)FfLtPU4@kV z6i37Qs4z>{qHNc4^Gx^9)H1JB{m^1#&$LXFU|0VN_Z)-3B9m;xa91vVIjvg@8(i~` zJzq9Wq5rdDg|>&dn@v_7qyJ5(f(PH%B>HE$CTw2*C~Vb4PxUtp^Q|i9vhBYg-=ch4 zJYwSe{cba@qu(1ueRx>=T;;;Hl{)8+_Pu->pA{t&u&--nQ=$0OtCDxSFW(kjH8=Fm zq{gq`w}?1@zr|(ye%FG`GLzpLHew=bS1r$Q@16Gcbnw*Y-{=1qVo2U}{#ec14SZI! Tcdcxh`1QGNpVdfvGzZjiZ~e|o5;NpP@%yR&DAZ+%i`XhD8eut}!AS#FAlah0*Z zzEieeR2WxsVt#R%ZbYj9YUiDj-=RCs1dph>n{epse&vb#riL^8;- zfJpZ+edXK$-Snc=#Nt#1Js0;Z7lq)Mm~{UnuJS;0pQ!NioD4VLs?3P8lpLqR#L^J= zqBNiSsPNPze`iYrx2#N`EW;3EQztV|Ph)5Ez)WXzpPYcGatohwE?r$+h1>|o%-~$F zaF^8N(ui;~lK|&jZD*g1!pPhdlR`gNGi^tIx9qZfH@}c{F0Y7Xn>A){o!j5xe%ZBD zeV=Hdc5Bi>xBV9Fp~jDDnW41+