Something went wrong. Try again.
A tool for managing custom bluesky feeds
Something went wrong. Try again.
bskyfeedctl flake.nix
4.7 kB · 150 lines
Nix
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151{ description = "Development environment for this project";
inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; };
outputs = {self, nixpkgs, ...}: let systems = [ "x86_64-linux" "aarch64-darwin" ]; in { packages = builtins.listToAttrs ( builtins.map (system: let pkgs = import nixpkgs { inherit system; }; in { name = system; value = { default = pkgs.buildGoModule { name = "bskyfeedctl"; src = ./.; vendorHash = "sha256-/Q2ZICkS3s8T5Ryh20kGp1ZAUY78FJwoesVrjlDJbO0="; buildTestBinaries = false; exclude = [ "README.md" ".gitignore" "flake.nix" "flake.lock" "*.yaml" "scripts/" "deploy/" ]; }; docker = pkgs.dockerTools.buildImage { name = "bskyfeedctl"; tag = "latest"; runAsRoot = "mkdir -p /app"; copyToRoot = [ self.packages.${system}.default pkgs.dockerTools.caCertificates ]; config = { Entrypoint = [ "${self.packages.${system}.default}/bin/bskyfeedctl" ]; WorkingDir = "/app"; }; }; }; }) systems ); apps = builtins.listToAttrs ( builtins.map (system: let pkgs = import nixpkgs { inherit system; }; in { name = system; value = { plan = { type = "app"; program = toString (pkgs.writeShellScript "plan" '' echo "Planning infrastructure" cd "deploy/terraform" ${pkgs.opentofu}/bin/tofu plan; ''); meta.description = "Preview changes to infrastructure"; }; apply = { type = "app"; program = toString (pkgs.writeShellScript "apply" '' set -Ee echo "Applyning infrastructure" cd "deploy/terraform" ${pkgs.opentofu}/bin/tofu apply; export instance_ip=$(tofu output -raw instance_ip) cd - echo $instance_ip ansible-playbook -i deploy/ansible/inventory/ -i "$instance_ip", --user root deploy/ansible/setup.yml ''); meta.description = "Apply changes to infrastructure"; }; connect = { type = "app"; program = toString (pkgs.writeShellScript "apply" '' set -E echo "Connecting to VM" cd "deploy/terraform" export instance_ip=$(tofu output -raw instance_ip) cd - echo $instance_ip ssh root@$instance_ip ''); meta.description = "Apply changes to infrastructure"; }; background-start = { type = "app"; program = toString (pkgs.writeShellScript "apply" '' echo "Starting background services" ${pkgs.docker}/bin/docker compose up -d; ''); meta.description = "Start background services locally"; }; background-stop = { type = "app"; program = toString (pkgs.writeShellScript "apply" '' echo "Starting background services" ${pkgs.docker}/bin/docker compose down -d; ''); meta.description = "Stop local background services"; }; indexer = { type = "app"; program = toString (pkgs.writeShellScript "indexer" '' echo "Starting indexer" ${self.packages.${system}.default}/bin/bskyfeedctl indexer; ''); meta.description = "Start indexer"; }; lint= { type = "app"; program = toString (pkgs.writeShellScript "lint" '' ${pkgs.golangci-lint}/bin/golangci-lint run; ''); meta.description = "Start indexer"; }; }; }) systems ); devShells = builtins.listToAttrs ( builtins.map (system: let pkgs = import nixpkgs { inherit system; }; shell = pkgs.mkShell { packages = [ pkgs.go pkgs.golangci-lint pkgs.docker pkgs.docker-compose pkgs.postgresql pkgs.websocat pkgs.opentofu pkgs.ansible ]; }; in { name = system; value = { default = shell; }; }) systems ); };}