diff --git a/appdaemon/devenv.nix b/appdaemon/devenv.nix deleted file mode 100644 index 38fefae..0000000 --- a/appdaemon/devenv.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ pkgs, config, ... }: { - # This is your devenv configuration - packages = [ pkgs.hello ]; - - enterShell = '' - export PS1="\[\033[01;34m\](AppDaemon)\[\033[00m\] \[\]\[\]\n\[\033[1;32m\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\$\[\033[0m\] \[\]\[\]" - echo "AppDaemon v$(uv pip show appdaemon | awk '/^Version:/ {print $2}') development shell started" - ''; - - processes.run.exec = "hello"; -} diff --git a/appdaemon/flake.lock b/appdaemon/flake.lock new file mode 100644 index 0000000..426fd85 --- /dev/null +++ b/appdaemon/flake.lock @@ -0,0 +1,301 @@ +{ + "nodes": { + "cachix": { + "inputs": { + "devenv": [ + "devenv" + ], + "flake-compat": [ + "devenv" + ], + "git-hooks": [ + "devenv" + ], + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1728672398, + "narHash": "sha256-KxuGSoVUFnQLB2ZcYODW7AVPAh9JqRlD5BrfsC/Q4qs=", + "owner": "cachix", + "repo": "cachix", + "rev": "aac51f698309fd0f381149214b7eee213c66ef0a", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "latest", + "repo": "cachix", + "type": "github" + } + }, + "devenv": { + "inputs": { + "cachix": "cachix", + "flake-compat": "flake-compat", + "git-hooks": "git-hooks", + "nix": "nix", + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1733323168, + "narHash": "sha256-d5DwB4MZvlaQpN6OQ4SLYxb5jA4UH5EtV5t5WOtjLPU=", + "owner": "cachix", + "repo": "devenv", + "rev": "efa9010b8b1cfd5dd3c7ed1e172a470c3b84a064", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_2": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "devenv", + "nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1712014858, + "narHash": "sha256-sB4SWl2lX95bExY2gMFG5HIzvva5AVMJd4Igm+GpZNw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9126214d0a59633752a136528f5f3b9aa8565b7d", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "git-hooks": { + "inputs": { + "flake-compat": [ + "devenv" + ], + "gitignore": "gitignore", + "nixpkgs": [ + "devenv", + "nixpkgs" + ], + "nixpkgs-stable": [ + "devenv" + ] + }, + "locked": { + "lastModified": 1730302582, + "narHash": "sha256-W1MIJpADXQCgosJZT8qBYLRuZls2KSiKdpnTVdKBuvU=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "af8a16fe5c264f5e9e18bcee2859b40a656876cf", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "devenv", + "git-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "libgit2": { + "flake": false, + "locked": { + "lastModified": 1697646580, + "narHash": "sha256-oX4Z3S9WtJlwvj0uH9HlYcWv+x1hqp8mhXl7HsLu2f0=", + "owner": "libgit2", + "repo": "libgit2", + "rev": "45fd9ed7ae1a9b74b957ef4f337bc3c8b3df01b5", + "type": "github" + }, + "original": { + "owner": "libgit2", + "repo": "libgit2", + "type": "github" + } + }, + "nix": { + "inputs": { + "flake-compat": [ + "devenv" + ], + "flake-parts": "flake-parts", + "libgit2": "libgit2", + "nixpkgs": "nixpkgs_2", + "nixpkgs-23-11": [ + "devenv" + ], + "nixpkgs-regression": [ + "devenv" + ], + "pre-commit-hooks": [ + "devenv" + ] + }, + "locked": { + "lastModified": 1727438425, + "narHash": "sha256-X8ES7I1cfNhR9oKp06F6ir4Np70WGZU5sfCOuNBEwMg=", + "owner": "domenkozar", + "repo": "nix", + "rev": "f6c5ae4c1b2e411e6b1e6a8181cc84363d6a7546", + "type": "github" + }, + "original": { + "owner": "domenkozar", + "ref": "devenv-2.24", + "repo": "nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1730531603, + "narHash": "sha256-Dqg6si5CqIzm87sp57j5nTaeBbWhHFaVyG7V6L8k3lY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7ffd9ae656aec493492b44d0ddfb28e79a1ea25d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-python": { + "inputs": { + "flake-compat": "flake-compat_2", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1733319315, + "narHash": "sha256-cFQBdRmtIZFVjr2P6NkaCOp7dddF93BC0CXBwFZFaN0=", + "owner": "cachix", + "repo": "nixpkgs-python", + "rev": "01263eeb28c09f143d59cd6b0b7c4cc8478efd48", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "nixpkgs-python", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1717432640, + "narHash": "sha256-+f9c4/ZX5MWDOuB1rKoWj+lBNm0z0rs4CK47HBLxy1o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "88269ab3044128b7c2f4c7d68448b2fb50456870", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "release-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1716977621, + "narHash": "sha256-Q1UQzYcMJH4RscmpTkjlgqQDX5yi1tZL0O345Ri6vXQ=", + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "4267e705586473d3e5c8d50299e71503f16a6fb6", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1733212471, + "narHash": "sha256-M1+uCoV5igihRfcUKrr1riygbe73/dzNnzPsmaLCmpo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "55d15ad12a74eb7d4646254e13638ad0c4128776", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "devenv": "devenv", + "nixpkgs": "nixpkgs_4", + "nixpkgs-python": "nixpkgs-python" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/appdaemon/flake.nix b/appdaemon/flake.nix index 71b2907..d00dd88 100644 --- a/appdaemon/flake.nix +++ b/appdaemon/flake.nix @@ -1,68 +1,78 @@ { - description = "AppDaemon development"; - inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; devenv.url = "github:cachix/devenv"; + nixpkgs-python = { + url = "github:cachix/nixpkgs-python"; + inputs = { nixpkgs.follows = "nixpkgs"; }; + }; }; - # nixConfig = { - # extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="; - # extra-substituters = "https://devenv.cachix.org"; - # }; + nixConfig = { + extra-trusted-public-keys = "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="; + extra-substituters = "https://devenv.cachix.org"; + }; outputs = { self, nixpkgs, devenv, ... } @ inputs: - let - system = "x86_64-linux"; - pkgs = nixpkgs.legacyPackages.${system}; - python = pkgs.python312; - adPath = "/usr/src/app"; - # uv = "${pkgs.uv}/bin/uv"; - in - { - packages.${system}.devenv-up = self.devShells.${system}.default.config.procfileScript; - packages.${system}.devenv-test = self.devShells.${system}.default.config.test; + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + adPath = "/usr/src/app"; + in + { + packages.${system} = { + devenv-up = self.devShells.${system}.default.config.procfileScript; + devenv-test = self.devShells.${system}.default.config.test; + }; - devShells.${system}.default = devenv.lib.mkShell { - inherit inputs pkgs; - modules = [ - ./devenv.nix - ]; + devShells.${system}.default = devenv.lib.mkShell { + inherit inputs pkgs; + modules = [ + ({ pkgs, config, ... }: { + # This is your devenv configuration + + pre-commit.hooks = { + end-of-file-fixer.enable = true; + trim-trailing-whitespace.enable = true; + }; + + languages.python = { + enable = true; + version = "3.12.7"; + uv = { + enable = true; + sync = { + enable = true; + allExtras = true; + arguments = [ "-U" ]; + }; + }; + }; + + packages = with pkgs; [ + git + (writeShellScriptBin "full-build" '' + cd ${adPath} + ${pkgs.uv}/bin/uv build --wheel + docker build -t acockburn/appdaemon:local-dev ${adPath} + '') + ]; + + enterShell = '' + alias appdaemon="${pkgs.uv}/bin/uv run --frozen python -m appdaemon" + alias ad="appdaemon" + + export PS1="\[\e[0;34m\](AppDaemon)\[\e[0m\] ''${PS1-}" + + export VIRTUAL_ENV=$UV_PROJECT_ENVIRONMENT + + echo -e "URL: \e[34m$(${pkgs.git}/bin/git config --get remote.origin.url)\e[0m" + echo -e "Branch: \e[32m$(${pkgs.git}/bin/git rev-parse --abbrev-ref HEAD)\e[0m" + echo -e "Hash: \e[33m$(${pkgs.git}/bin/git rev-parse --short HEAD)\e[0m" + echo "AppDaemon v$(${pkgs.uv}/bin/uv pip show appdaemon | awk '/^Version:/ {print $2}') development shell started" + ''; + }) + ]; + }; }; - - devShells.${system}.native = pkgs.mkShell { - nativeBuildInputs = with pkgs; [ - git - uv - python - ]; - - packages = with pkgs; [ - (writeShellScriptBin "cd-ad" "cd ${adPath}") - (writeShellScriptBin "full-build" '' - rm -rf ${adPath}/build ${adPath}/dist - ${pkgs.uv}/bin/uv build --wheel ${adPath} - docker build -t acockburn/appdaemon:local-dev ${adPath} - '') - ]; - - shellHook = '' - cd ${adPath} - echo "URL: $(${pkgs.git}/bin/git config --get remote.origin.url)" - echo "Branch: $(${pkgs.git}/bin/git rev-parse --abbrev-ref HEAD)" - echo "Hash: $(${pkgs.git}/bin/git rev-parse --short HEAD)" - - ${pkgs.uv}/bin/uv sync -U --all-extras - export UV_PYTHON="${adPath}/.venv/bin/python" - alias clean="rm -rf ${adPath}/dist ${adPath}/build" - alias appdaemon="${pkgs.uv}/bin/uv run --frozen python -m appdaemon" - alias ad="appdaemon" - - export PS1="\[\033[01;34m\](AppDaemon)\[\033[00m\] \[\]\[\]\n\[\033[1;32m\][\[\e]0;\u@\h: \w\a\]\u@\h:\w]\$\[\033[0m\] \[\]\[\]" - echo "AppDaemon v$(uv pip show appdaemon | awk '/^Version:/ {print $2}') development shell started" - ''; - - UV_LINK_MODE = "copy"; - }; - }; -} +} \ No newline at end of file diff --git a/configuration.nix b/configuration.nix index 2856a7b..8665922 100644 --- a/configuration.nix +++ b/configuration.nix @@ -25,7 +25,7 @@ in (pkgs.writeShellScriptBin "nrbsu" "sudo nix-channel --update && sudo nixos-rebuild switch") (pkgs.writeShellScriptBin "ads" '' cd ${adPath} - nix develop + nix develop --no-pure-eval ${adNixPath}/appdaemon '') (pkgs.writeShellScriptBin "ad-clone" '' if [ ! -d ${adPath} ]; then @@ -69,10 +69,12 @@ in users.users.appdaemon = { isNormalUser = true; home = "${adHome}"; - extraGroups = [ "wheel" "docker"]; + extraGroups = [ "wheel" "docker" ]; openssh.authorizedKeys.keyFiles = [ "/root/.ssh/authorized_keys" ]; }; + nix.settings.trusted-users = [ "root" "@wheel" ]; + home-manager = { useGlobalPkgs = true; users.appdaemon = { pkgs, ... }: {