flake.nix 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. {
  2. description = "Nix Dotfiles with flake";
  3. inputs = {
  4. nixpkgs.url = "github:NixOS/nixpkgs/nixos-26.05";
  5. home-manager = {
  6. url = "github:nix-community/home-manager/release-26.05";
  7. inputs.nixpkgs.follows = "nixpkgs";
  8. };
  9. nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.7.0";
  10. dms = {
  11. url = "github:AvengeMedia/DankMaterialShell/stable";
  12. inputs.nixpkgs.follows = "nixpkgs";
  13. };
  14. dank-greeter = {
  15. url = "github:AvengeMedia/dank-greeter";
  16. inputs.nixpkgs.follows = "nixpkgs";
  17. };
  18. };
  19. outputs =
  20. {
  21. self,
  22. nix-flatpak,
  23. ...
  24. }@inputs:
  25. let
  26. lib = inputs.nixpkgs.lib;
  27. hosts = import ./config/hosts.nix;
  28. mkHomeConfigurations =
  29. {
  30. host,
  31. nixpkgs,
  32. home-manager,
  33. modules ? [ ],
  34. }:
  35. home-manager.lib.homeManagerConfiguration {
  36. pkgs = import nixpkgs {
  37. system = host.arch;
  38. config = {
  39. allowUnfree = true;
  40. };
  41. };
  42. extraSpecialArgs = { inherit inputs host; };
  43. modules = [
  44. ./hosts/${host.dir}/home
  45. ] ++ modules;
  46. };
  47. mkNixOSConfigurations =
  48. {
  49. host,
  50. nixpkgs,
  51. home-manager,
  52. modules ? [ ],
  53. overlays ? [],
  54. }:
  55. nixpkgs.lib.nixosSystem {
  56. system = host.arch;
  57. specialArgs = {
  58. inherit inputs host;
  59. };
  60. modules = [
  61. nix-flatpak.nixosModules.nix-flatpak
  62. ./hosts/${host.dir}/nixos
  63. { nixpkgs.overlays = overlays; }
  64. home-manager.nixosModules.home-manager
  65. {
  66. home-manager.extraSpecialArgs = { inherit inputs host; };
  67. home-manager.useGlobalPkgs = true;
  68. home-manager.useUserPackages = true;
  69. home-manager.backupFileExtension = "backup";
  70. home-manager.users."${host.user}" = import ./hosts/${host.dir}/home;
  71. }
  72. ] ++ modules;
  73. };
  74. mkISOConfiguration = # Build with: nix build .#nixosConfigurations.<hostname>-iso.config.system.build.isoImage
  75. {
  76. host,
  77. nixpkgs,
  78. }:
  79. nixpkgs.lib.nixosSystem {
  80. system = host.arch;
  81. modules = [
  82. ./hosts/${host.dir}/iso.nix
  83. { networking.hostName = "${host.hostname}-iso"; }
  84. ];
  85. };
  86. in
  87. {
  88. nixosConfigurations =
  89. lib.mapAttrs
  90. (name: host:
  91. mkNixOSConfigurations {
  92. inherit host;
  93. nixpkgs = inputs.nixpkgs;
  94. home-manager = inputs.home-manager;
  95. }
  96. )
  97. hosts
  98. // lib.mapAttrs'
  99. (name: host:
  100. lib.nameValuePair
  101. "${host.hostname}-iso"
  102. (mkISOConfiguration {
  103. inherit host;
  104. nixpkgs = inputs.nixpkgs;
  105. })
  106. )
  107. hosts;
  108. homeConfigurations = lib.mapAttrs'
  109. (name: host:
  110. lib.nameValuePair
  111. "${host.user}@${host.hostname}"
  112. (mkHomeConfigurations {
  113. inherit host;
  114. nixpkgs = inputs.nixpkgs;
  115. home-manager = inputs.home-manager;
  116. })
  117. )
  118. hosts;
  119. };
  120. }