{ description = "Theming framework for NixOS, Home Manager, nix-darwin, and Nix-on-Droid"; inputs = { base16-fish = { flake = false; url = "github:tomyun/base16-fish"; }; base16-helix = { flake = false; url = "github:tinted-theming/base16-helix"; }; base16-vim = { flake = false; # TODO: Unlock this input once [1] ("Seemingly bad parsing of whitespace # in abbriviated lists (affecting stylix's handling of base16-vim)") is # resolved, preventing us from fetching commit [2] ("fix(theme): Remove # illegal style attributes"). # # [1]: https://github.com/SenchoPens/fromYaml/issues/1 # [2]: https://github.com/tinted-theming/tinted-vim/commit/0508601eff146db2537eff23e93dd0c543914896 url = "github:tinted-theming/base16-vim/577fe8125d74ff456cf942c733a85d769afe58b7"; }; base16.url = "github:SenchoPens/base16.nix"; flake-compat.url = "github:edolstra/flake-compat"; flake-utils = { inputs.systems.follows = "systems"; url = "github:numtide/flake-utils"; }; git-hooks = { inputs = { flake-compat.follows = "flake-compat"; nixpkgs.follows = "nixpkgs"; }; url = "github:cachix/git-hooks.nix"; }; gnome-shell = { flake = false; # TODO: Unlocking the input and pointing to official repository requires # updating the patch: # https://github.com/danth/stylix/pull/224#discussion_r1460339607. url = "github:GNOME/gnome-shell/47.2"; }; # The 'home-manager' input is used to generate the documentation. home-manager = { inputs.nixpkgs.follows = "nixpkgs"; url = "github:nix-community/home-manager"; }; nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; # Interface flake systems. systems.url = "github:nix-systems/default"; tinted-foot = { flake = false; # Lock the tinted-foot input to prevent upstream breaking changes. # # Considering that Stylix eventually re-implements this input's # functionality [1], it might be easiest to lock this input to avoid # wasted maintenance effort. # # [1]: https://github.com/danth/stylix/issues/571 url = "github:tinted-theming/tinted-foot/fd1b924b6c45c3e4465e8a849e67ea82933fcbe4"; }; tinted-zed = { flake = false; url = "github:tinted-theming/base16-zed"; }; tinted-tmux = { flake = false; url = "github:tinted-theming/tinted-tmux"; }; tinted-kitty = { flake = false; # Lock the tinted-kitty input to prevent upstream breaking changes. # # Considering that Stylix eventually re-implements this input's # functionality [1], it might be easiest to lock this input to avoid # wasted maintenance effort. # # [1]: https://github.com/danth/stylix/issues/534 url = "github:tinted-theming/tinted-kitty/eb39e141db14baef052893285df9f266df041ff8"; }; tinted-schemes = { url = "github:tinted-theming/schemes"; flake = false; }; firefox-gnome-theme = { flake = false; url = "github:rafaelmardojai/firefox-gnome-theme"; }; nur = { url = "github:nix-community/NUR"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { nixpkgs, base16, self, ... }@inputs: inputs.flake-utils.lib.eachDefaultSystem ( system: let inherit (nixpkgs) lib; pkgs = nixpkgs.legacyPackages.${system}; in { checks = lib.attrsets.unionOfDisjoint { git-hooks = inputs.git-hooks.lib.${system}.run { hooks = { deadnix.enable = true; editorconfig-checker.enable = true; hlint.enable = true; nixfmt-rfc-style = { enable = true; settings.width = 80; }; statix.enable = true; stylish-haskell.enable = true; typos.enable = true; yamllint.enable = true; }; src = ./.; }; maintainers-sorted = (import ./stylix/check-maintainers-sorted.nix) pkgs; } self.packages.${system}; devShells = { default = let check = pkgs.writeShellApplication { name = "stylix-check"; runtimeInputs = with pkgs; [ nix nix-fast-build ]; text = '' cores="$(nproc)" system="$(nix eval --expr builtins.currentSystem --impure --raw)" nix-fast-build \ --eval-max-memory-size 512 \ --eval-workers "$cores" \ --flake ".#checks.$system" \ --no-link \ --skip-cached \ "$@" ''; }; in pkgs.mkShell { inherit (self.checks.${system}.git-hooks) shellHook; packages = [ check inputs.home-manager.packages.${system}.default self.checks.${system}.git-hooks.enabledPackages ]; }; ghc = pkgs.mkShell { inputsFrom = [ self.devShells.${system}.default ]; packages = [ pkgs.ghc ]; }; }; packages = let universalPackages = { docs = import ./docs { inherit pkgs inputs lib; }; palette-generator = pkgs.callPackage ./palette-generator { }; }; # Testbeds are virtual machines based on NixOS, therefore they are # only available for Linux systems. testbedPackages = lib.optionalAttrs (lib.hasSuffix "-linux" system) ( import ./stylix/testbed.nix { inherit pkgs inputs lib; } ); # Discord is not available on arm64. This workaround filters out # testbeds using that package, until we have a better way to handle # this. testbedPackages' = if system == "aarch64-linux" then lib.filterAttrs ( name: _: !lib.hasPrefix "testbed:discord:vencord" name ) testbedPackages else testbedPackages; in universalPackages // testbedPackages'; } ) // { nixosModules.stylix = { pkgs, ... }@args: { imports = [ (import ./stylix/nixos inputs) { stylix = { inherit inputs; paletteGenerator = self.packages.${pkgs.stdenv.hostPlatform.system}.palette-generator; base16 = base16.lib args; homeManagerIntegration.module = self.homeManagerModules.stylix; }; } ]; }; homeManagerModules.stylix = { pkgs, ... }@args: { imports = [ (import ./stylix/hm inputs) { stylix = { inherit inputs; paletteGenerator = self.packages.${pkgs.stdenv.hostPlatform.system}.palette-generator; base16 = base16.lib args; }; } ]; }; darwinModules.stylix = { pkgs, ... }@args: { imports = [ (import ./stylix/darwin inputs) { stylix = { inherit inputs; paletteGenerator = self.packages.${pkgs.stdenv.hostPlatform.system}.palette-generator; base16 = base16.lib args; homeManagerIntegration.module = self.homeManagerModules.stylix; }; } ]; }; nixOnDroidModules.stylix = { pkgs, ... }@args: { imports = [ (import ./stylix/droid inputs) { stylix = { paletteGenerator = self.packages.${pkgs.stdenv.hostPlatform.system}.palette-generator; base16 = base16.lib args; homeManagerIntegration.module = self.homeManagerModules.stylix; }; } ]; }; }; }