From f3042f960f91d1acced9c7fb3fb61b9572565a00 Mon Sep 17 00:00:00 2001 From: servius Date: Mon, 11 May 2026 01:56:25 +0000 Subject: [PATCH] feat: Added home-assistant-cli module --- home/programs/hass-cli.nix | 16 ++++++++++++++-- modules/home/hass-cli.nix | 39 +++++++++++++++++++++++++++++++++++++++ secrets/secrets.yaml | 9 +++++---- 3 file(s) changed, 58 insertion(s)(+), 6 deletion(s)(-) diff --git a/home/programs/hass-cli.nix b/home/programs/hass-cli.nix --- a/home/programs/hass-cli.nix +++ b/home/programs/hass-cli.nix @@ -1,3 +1,15 @@ -{pkgs, ...}: { - home.packages = [pkgs.home-assistant-cli]; +{config, ...}: { + imports = [../../modules/home/hass-cli.nix]; + + sops.secrets."homeassistant/cli-token" = {}; + + programs.hass-cli = { + enable = true; + server = "https://home.darksailor.dev"; + tokenFile = config.sops.secrets."homeassistant/cli-token".path; + }; + + home.shellAliases.ha = "hass-cli"; + programs.fish.shellAliases.ha = "hass-cli"; + programs.nushell.shellAliases.ha = "hass-cli"; } diff --git a/modules/home/hass-cli.nix b/modules/home/hass-cli.nix new file mode 100644 --- /dev/null +++ b/modules/home/hass-cli.nix @@ -0,0 +1,39 @@ +{ + config, + pkgs, + lib, + ... +}: +with lib; let + cfg = config.programs.hass-cli; + wrapped = pkgs.writeShellScriptBin "hass-cli" '' + export HASS_SERVER=${escapeShellArg cfg.server} + export NETRC=/dev/null + ${optionalString (cfg.tokenFile != null) '' + HASS_TOKEN="$(cat ${escapeShellArg (toString cfg.tokenFile)})" + export HASS_TOKEN + ''} + exec ${cfg.package}/bin/hass-cli "$@" + ''; +in { + options.programs.hass-cli = { + enable = mkEnableOption "home-assistant-cli"; + package = mkPackageOption pkgs "home-assistant-cli" {}; + server = mkOption { + type = types.str; + default = "http://localhost:8123"; + example = "https://home.darksailor.dev"; + description = "Home Assistant server URL."; + }; + tokenFile = mkOption { + type = types.nullOr (types.either types.path types.str); + default = null; + example = literalExpression ''config.sops.secrets."homeassistant/cli-token".path''; + description = "Path to a file containing a long-lived access token."; + }; + }; + + config = mkIf cfg.enable { + home.packages = [wrapped]; + }; +} diff --git a/secrets/secrets.yaml b/secrets/secrets.yaml --- a/secrets/secrets.yaml +++ b/secrets/secrets.yaml @@ -1,6 +1,6 @@ nextcloud: - adminpass: ENC[AES256_GCM,data:v9WXJ3Ig5NcWd+02P8VnaNkMy2yfEQ==,iv:LfS0avmRZfjdqjNE69h7L90ePzzdmtP57X+0U1vAMvs=,tag:Dq90tfGAUyqzTW3oM96IRg==,type:str] - mcp_password: ENC[AES256_GCM,data:q4dQ7AOf+PnYF+sHaW/KpYR8KNLlibVoo/o1ltOh,iv:Nr/1U0hbHuXvOAtOfZLgNiYVyN513pHNX2kivlRLjcc=,tag:fCcMvvQwXNvq94Ow6ipW/A==,type:str] + adminpass: ENC[AES256_GCM,data:+vZy52JX1EFNODW4RWCa32YMWVP6/XvhPtSsJILJKx+F68pHdNs8BzaxKqlplLhkssiZQYJL0B57BJ3VjcLa+Q==,iv:34xD3hPwIFT3JlMpDx3aRFOMGWOWSxEIEqMalC4dLNw=,tag:bK9KU9+rCAQvC/zYTCqE6A==,type:str] + mcp_password: ENC[AES256_GCM,data:ZziTOfW62+FNpryO5iprpgWdjxr0qKK6mhX+5layGlskjfJZC730XJB/hdgoc7TpjwT34JCEEjMf3kPbNPj2hg==,iv:gQKy27nFPDQvNOMRk2K3sYMVm7V8ITwTaKCeWAXSfBw=,tag:OmgOyG218FZbZ9tJsd3DAA==,type:str] paperless: adminpass: ENC[AES256_GCM,data:SkW+uh8/WlpJOgEF5GIIt5UygLU=,iv:KaKAmqJxSs822be6FsthJZ3dactgOckwrXLNa3dx350=,tag:40kSGe1O5d6killRdZiSYQ==,type:str] secret_key: ENC[AES256_GCM,data:9OkJ/WRLHCQXA0a/FqMieoUX5Lk=,iv:br2OSWU6uQ4/JAEvYeRlA1buhF2PGyPCdGYx0OwROek=,tag:cgnmTTWgkga6E0krWXFIdw==,type:str] @@ -135,6 +135,7 @@ password: ENC[AES256_GCM,data:33siZFCBxFAJ/PlqUWoYFmiJJOJK8cCgia+RKqeA1nRxLXfEbNVl33jUh1WF1MzzCPSKGl2dfhs/onadWWM23Q==,iv:E5gWP7grOjkWWpj9njdf1ILMvLvQxYUNtBU5JiHavsM=,tag:mCMwlW2O4/Qm1+qI3ZyIeg==,type:str] username: ENC[AES256_GCM,data:ugJAJrZmjQ==,iv:WLEG/u2nu2K1KeKlwguiY17VpyXNnxS1ihUzwhI8U4g=,tag:/bsiLe22kDwV/CH6rljtpQ==,type:str] homeassistant: puppet-token: ENC[AES256_GCM,data:K/0uCgwQZcnXNdj3gyz0WPeeas/G8ssF/Km6oV/dqQEnGtQ3cGWiyeRBvHW6LRjG/s8rpJiXB5pNlDON6BA6nFdYhkyx22zOBdYItBOCP1TPUE+VKdh3WRU+N/iiTBqNPH3nK3c2OAn+adhK8OGpDl41OcY+noCdewFXO81Fu0o4V0IQw6Ehzwy0+ZgIwDyIWV1HiW+cA9Rb8HTqKNVMpVYaVE/hnEeTpbOyysMmLOqBZCED0bwW,iv:GpZVhOpUlEmT0uPrgpjfmJfp8Hna4PYI5updSyg7HC4=,tag:KeCWwbloaiZYsLRs0e5slg==,type:str] + cli-token: ENC[AES256_GCM,data:KIeAiFEufm3M3bW5vhfscNE/kL2q4Lx6+cm7Hlj4vqvJ7dRqRt4Hjg6W6aqZ1WvO7cE+4dyy2sZUxNmyEmKE9VTLaskb+N2ayxwE8sTC4P/cAIsgTAsa+XmsZ4re90ZLWQJ6AtZpaaONRZLIkae8Ub1/4ztnAyhOm+xdZ0wsNc2hHLGGqKhIvtaFn6skCLAWeDNIEKsqysU/MQuRr1GWFaszj4xw1Q6mZOqQax2Y4bzPkcQAlHLC,iv:Ro8OuAc9HoS+jvf2L1ReWInJanJuqsGN/KLFWfM3wGU=,tag:SdDsvSQRshXYyHr00hmJKw==,type:str] harmonia: sign_key: ENC[AES256_GCM,data:0MlTjdPo8GAkqaigBIE83++mpgownBSCTAcT0Xdq9IhA2X8GYVKBmlR6V1k3pcjjhTK3g/jPMC188QeCBSOZDqSrb/RGNzKYMbxD323FHRO5ggkRvGet75qkZzR1Bvt4D2u/vK6+QLYo5QDCoPBW,iv:l0568lbmo1WlcNLWS2bkKV5W3DEoy7EH8YVOL2My2T0=,tag:/6FO2/u/i19o+Z4xIMycog==,type:str] github: @@ -158,7 +159,7 @@ RVYwYUd3bkw3WmcxMHFUSWxqME0vMmMKLS0tIGFINWlBZDV3cWhEN2JOTXZweWZI VGZKdHpVeFRpQUxtSEkyaEhLMlBJcGsKLb0DvPNZosPBUuiX6qz1s5IO5INQh8CK ZtXTVClwMSmaUYhdSB2gKFrKVZHXTJZ4oAL5t/BpC0pOHyr+o96T3Q== -----END AGE ENCRYPTED FILE----- - lastmodified: "2026-05-08T08:20:41Z" - mac: ENC[AES256_GCM,data:GptBnDnOr3em2w9Xy3ckRQ4D8LR2VvnkgU5/NcQ0NIB8RLgac8r1oCp5BOVpAEgWTeFExcO7E1AwRRYRmzXm4BLcbpb1QCe2UVMbBlhOHzPhXCK83LYq2E4phOzoF4ASYCWG5wCHh0himn+0atAEEMlNP+ULs/W/BzJlwJgLrak=,iv:+SZsq5nwkvgQgcELZ4ADrHed8rWVEmuILsQU2HSfdIs=,tag:Lgv5uxQaEGVMYI3VRcqezQ==,type:str] + lastmodified: "2026-05-11T01:55:19Z" + mac: ENC[AES256_GCM,data:7XDbFZFo12mKa1NVMryHbzGAjIYUVfT1FLbe3quHTszG4zRVA1XRsCHodmmemmBfT/j1ThQ1S1yydu8XWEaSIIT05dA0r8lGNMJOBvIFOVcwGbfH4+HVxiw370kU8fOrVSsdo83lnrVybyd5R1U7TOgKQwBFdq5fJtWxT9MpLuE=,iv:/k4RWVmrWUc5Vx87lUbJZbUJ+waxmYKj0gVQJl1xvL0=,tag:Y1T7eVvxp0X35xUl0HEeBA==,type:str] unencrypted_suffix: _unencrypted version: 3.12.2 -- tangled.sh