{
  description = "Torjus nixos config flake";

  inputs = {
    nixpkgs-stable.url = "github:nixos/nixpkgs?ref=nixos-24.11";
    #nixpkgs-master.url = "github:nixos/nixpkgs?ref=master";
    nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
    home-manager = {
      url = "github:nix-community/home-manager";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    sops-nix = {
      url = "github:Mic92/sops-nix";
      inputs.nixpkgs.follows = "nixpkgs";
      #inputs.nixpkgs-stable.follows = "nixpkgs-stable";
    };
    ghettoptt = {
      url = "git+https://git.t-juice.club/torjus/ghettoptt?ref=master";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    huecli = {
      url = "git+https://git.t-juice.club/torjus/huecli?ref=master";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nix-packages = {
      url = "git+https://git.t-juice.club/torjus/nix-packages?ref=master";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    nixprstatus = {
      url = "git+https://git.t-juice.club/torjus/nixprstatus?ref=master";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    alerttonotify = {
      url = "git+https://git.t-juice.club/torjus/alerttonotify?ref=master";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs =
    {
      self,
      nixpkgs,
      # nixpkgs-master,
      nixpkgs-stable,
      nixprstatus,
      sops-nix,
      ghettoptt,
      huecli,
      alerttonotify,
      nix-packages,
      ...
    }@inputs:
    let
      system = "x86_64-linux";
      user = "torjus";
      overlay-stable = final: prev: {
        stable = import nixpkgs-stable {
          inherit system;
          config.allowUnfree = true;
        };
      };
      # overlay-master = final: prev: {
      #   master = import nixpkgs-master {
      #     inherit system;
      #     config.allowUnfree = true;
      #   };
      # };
      allSystems = [
        "x86_64-linux"
        "aarch64-linux"
        "x86_64-darwin"
        "aarch64-darwin"
      ];
      forAllSystems =
        f: nixpkgs.lib.genAttrs allSystems (system: f { pkgs = import nixpkgs { inherit system; }; });
      commonOverlays = [
        overlay-stable
        # overlay-master
        ghettoptt.overlays.default
        huecli.overlays.default
        nix-packages.overlays.default
        nixprstatus.overlays.default
        alerttonotify.overlays.default
      ];
    in
    {
      nixosConfigurations = {
        prismo = nixpkgs.lib.nixosSystem {
          inherit system;
          specialArgs = {
            inherit inputs self user;
          };
          modules = [
            (
              { config, pkgs, ... }:
              {
                nixpkgs.overlays = commonOverlays;
              }
            )
            ./hosts/prismo
            sops-nix.nixosModules.sops
          ];
        };
        magicman = nixpkgs.lib.nixosSystem {
          inherit system;
          specialArgs = {
            inherit inputs self user;
          };
          modules = [
            (
              { config, pkgs, ... }:
              {
                nixpkgs.overlays = commonOverlays;
              }
            )
            ./hosts/magicman
            sops-nix.nixosModules.sops
          ];
        };
        gunter = nixpkgs.lib.nixosSystem {
          inherit system;
          specialArgs = {
            inherit
              inputs
              self
              user
              sops-nix
              ;
          };
          modules = [
            (
              { config, pkgs, ... }:
              {
                nixpkgs.overlays = commonOverlays;
              }
            )
            ./hosts/gunter
            sops-nix.nixosModules.sops
          ];
        };
      };
      devShells = forAllSystems (
        { pkgs }:
        {
          default = pkgs.mkShell {
            packages = with pkgs; [
              act
              actionlint
              yamllint
            ];
          };
        }
      );
    };
}