flake.nix 3.2 KB

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