http://pkgs.tgirl.cloud/
1{
2 inputs.nixpkgs.url = "https://channels.nixos.org/nixpkgs-unstable/nixexprs.tar.xz";
3
4 outputs =
5 {
6 self,
7 nixpkgs,
8 ...
9 }:
10 let
11 inherit (nixpkgs) lib;
12
13 outputSystems = lib.systems.flakeExposed;
14 cachedSystems = [
15 "x86_64-linux"
16 "aarch64-linux"
17 "aarch64-darwin"
18 ];
19 devSystems = [
20 "x86_64-linux"
21 "aarch64-linux"
22 "x86_64-darwin"
23 "aarch64-darwin"
24 ];
25
26 forAllSystems =
27 systems: fn:
28 lib.genAttrs systems (
29 system:
30 fn (
31 import nixpkgs {
32 inherit system;
33 config.allowUnfree = true;
34 }
35 )
36 );
37
38 mkModule =
39 {
40 name ? "default",
41 class,
42 file,
43 }:
44 {
45 _class = class;
46 _file = "${self.outPath}/flake.nix#${class}Modules.${name}";
47
48 imports = [ (import file { tgirlpkgsSelf = self; }) ];
49 };
50 in
51 {
52 packages = forAllSystems outputSystems (
53 pkgs:
54 lib.filterAttrs (
55 _: pkg:
56 let
57 isDerivation = lib.isDerivation pkg;
58 availableOnHost = lib.meta.availableOn pkgs.stdenv.hostPlatform pkg;
59 isBroken = pkg.meta.broken or false;
60 in
61 isDerivation && !isBroken && availableOnHost
62 ) self.legacyPackages.${pkgs.stdenv.hostPlatform.system}
63 );
64
65 # a raw unfilted scope of packages
66 legacyPackages = forAllSystems outputSystems (pkgs: import ./default.nix { inherit pkgs; });
67
68 hydraJobs = forAllSystems cachedSystems (
69 pkgs:
70 lib.filterAttrs (
71 _: pkg:
72 let
73 isDerivation = lib.isDerivation pkg;
74 availableOnHost = lib.meta.availableOn pkgs.stdenv.hostPlatform pkg;
75 isCross = pkg.stdenv.buildPlatform != pkg.stdenv.targetPlatform;
76 isBroken = pkg.meta.broken or false;
77 isCacheable = !(pkg.preferLocalBuild or false);
78 in
79 isDerivation && (availableOnHost || isCross) && !isBroken && isCacheable
80 ) self.legacyPackages.${pkgs.stdenv.hostPlatform.system}
81 );
82
83 # taken and slightly modified from
84 # https://github.com/lilyinstarlight/nixos-cosmic/blob/0b0e62252fb3b4e6b0a763190413513be499c026/flake.nix#L81
85 apps = forAllSystems devSystems (pkgs: {
86 update = {
87 type = "app";
88 program = lib.getExe (
89 pkgs.writeShellApplication {
90 name = "update";
91
92 text = lib.concatStringsSep "\n" (
93 lib.mapAttrsToList (
94 name: pkg:
95 if pkg ? updateScript && (lib.isList pkg.updateScript) then
96 lib.escapeShellArgs (
97 if (lib.match "nix-update|.*/nix-update" (lib.head pkg.updateScript) != null) then
98 pkg.updateScript
99 ++ [
100 "--commit"
101 name
102 ]
103 else
104 pkg.updateScript
105 )
106 else
107 toString pkg.updateScript or "# no update script for ${name}"
108 ) self.legacyPackages.${pkgs.stdenv.hostPlatform.system}
109 );
110 }
111 );
112 };
113 });
114
115 devShells = forAllSystems devSystems (pkgs: {
116 default = pkgs.callPackage ./shell.nix { };
117 });
118
119 formatter = forAllSystems devSystems (pkgs: pkgs.nixfmt-tree);
120
121 overlays.default = _: prev: import ./default.nix { pkgs = prev; };
122
123 nixosModules.default = mkModule {
124 class = "nixos";
125 file = ./modules/nixos;
126 };
127
128 darwinModules.default = mkModule {
129 class = "darwin";
130 file = ./modules/darwin;
131 };
132
133 homeModules.default = mkModule {
134 class = "homeManager";
135 file = ./modules/home-manager;
136 };
137
138 homeManagerModules = lib.mapAttrs (
139 _:
140 lib.warn "Flake attribute 'tgirlpkgs.homeManagerModules' is deprecated and will be removed in the future. Use 'tgirlpkgs.homeModules' instead."
141 ) self.homeModules;
142 };
143
144 nixConfig = {
145 extra-substituters = [ "https://cache.tgirl.cloud/tgirlcloud" ];
146 extra-trusted-public-keys = [ "tgirlcloud:EaOlHrpuOI6Zwmir3/MzqS9uA0Xn3gYr15/k/v0HIPo=" ];
147 };
148}