Refactor flake
This commit is contained in:
		
							parent
							
								
									da2eebf5d5
								
							
						
					
					
						commit
						804011f538
					
				
							
								
								
									
										68
									
								
								default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								default.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,68 @@ | ||||||
|  | { inputs, config, lib, pkgs, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | with lib.my; | ||||||
|  | with inputs; | ||||||
|  | { | ||||||
|  |   imports = | ||||||
|  |     # I use home-manager to deploy files to $HOME; little else | ||||||
|  |     [ home-manager.nixosModules.home-manager ] | ||||||
|  |     # All my personal modules | ||||||
|  |     ++ (mapModulesRec' (toString ./modules) import); | ||||||
|  | 
 | ||||||
|  |   # Common config for all nixos machines; and to ensure the flake operates | ||||||
|  |   # soundly | ||||||
|  |   environment.variables.DOTFILES = dotFilesDir; | ||||||
|  | 
 | ||||||
|  |   # Configure nix and nixpkgs | ||||||
|  |   environment.variables.NIXPKGS_ALLOW_UNFREE = "1"; | ||||||
|  |   nix = { | ||||||
|  |     package = pkgs.unstable.nixFlakes; | ||||||
|  |     extraOptions = "experimental-features = nix-command flakes"; | ||||||
|  |     nixPath = [ | ||||||
|  |       "nixpkgs=${nixos}" | ||||||
|  |       "nixpkgs-unstable=${nixos-unstable}" | ||||||
|  |       "nixpkgs-overlays=${dotFilesDir}/overlays" | ||||||
|  |       "home-manager=${home-manager}" | ||||||
|  |       "dotfiles=${dotFilesDir}" | ||||||
|  |     ]; | ||||||
|  |     binaryCaches = [ | ||||||
|  |       "https://cache.nixos.org/" | ||||||
|  |       "https://nix-community.cachix.org" | ||||||
|  |     ]; | ||||||
|  |     binaryCachePublicKeys = [ | ||||||
|  |       "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" | ||||||
|  |     ]; | ||||||
|  |     registry = { | ||||||
|  |       nixos.flake = nixos; | ||||||
|  |       nixpkgs.flake = nixos-unstable; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  |   system.configurationRevision = mkIf (self ? rev) self.rev; | ||||||
|  |   system.stateVersion = "20.09"; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   ## Some reasonable, global defaults | ||||||
|  |   # This is here to appease 'nix flake check' for generic hosts with no | ||||||
|  |   # hardware-configuration.nix or fileSystem config. | ||||||
|  |   fileSystems."/".device = "/dev/disk/by-label/nixos"; | ||||||
|  | 
 | ||||||
|  |   # Use the latest kernel | ||||||
|  |   boot.kernelPackages = pkgs.linuxPackages_latest; | ||||||
|  | 
 | ||||||
|  |   boot.loader = { | ||||||
|  |     efi.canTouchEfiVariables = true; | ||||||
|  |     systemd-boot.configurationLimit = 10; | ||||||
|  |     systemd-boot.enable = mkDefault true; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Just the bear necessities... | ||||||
|  |   environment.systemPackages = with pkgs; [ | ||||||
|  |     unstable.cached-nix-shell | ||||||
|  |     coreutils | ||||||
|  |     git | ||||||
|  |     vim | ||||||
|  |     wget | ||||||
|  |     gnumake | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										64
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								flake.nix
									
									
									
									
									
								
							|  | @ -27,21 +27,23 @@ | ||||||
|     let |     let | ||||||
|       inherit (builtins) baseNameOf; |       inherit (builtins) baseNameOf; | ||||||
|       inherit (lib) nixosSystem mkIf removeSuffix attrNames attrValues; |       inherit (lib) nixosSystem mkIf removeSuffix attrNames attrValues; | ||||||
|       inherit (lib.my) dotFilesDir mapModules mapModulesRec mapModulesRec'; |       inherit (lib.my) dotFilesDir mapModules mapModulesRec mapHosts; | ||||||
| 
 | 
 | ||||||
|       system = "x86_64-linux"; |       system = "x86_64-linux"; | ||||||
| 
 | 
 | ||||||
|       lib = nixos.lib.extend |       lib = nixos.lib.extend | ||||||
|         (self: super: { my = import ./lib { inherit pkgs; lib = self; }; }); |         (self: super: { my = import ./lib { inherit pkgs inputs; lib = self; }; }); | ||||||
| 
 | 
 | ||||||
|       mkPkgs = pkgs: extraOverlays: import pkgs { |       mkPkgs = pkgs: extraOverlays: import pkgs { | ||||||
|         inherit system; |         inherit system; | ||||||
|         config.allowUnfree = true;  # forgive me Stallman senpai |         config.allowUnfree = true;  # forgive me Stallman senpai | ||||||
|         overlays = extraOverlays ++ (attrValues self.overlays); |         overlays = extraOverlays ++ (attrValues self.overlays); | ||||||
|       }; |       }; | ||||||
|       pkgs     = mkPkgs nixos [ self.overlay ]; |       pkgs = mkPkgs nixos [ self.overlay ]; | ||||||
|       unstable = mkPkgs nixos-unstable []; |       unstable = mkPkgs nixos-unstable []; | ||||||
|     in { |     in { | ||||||
|  |       lib = lib.my; | ||||||
|  | 
 | ||||||
|       overlay = |       overlay = | ||||||
|         final: prev: { |         final: prev: { | ||||||
|           inherit unstable; |           inherit unstable; | ||||||
|  | @ -49,63 +51,17 @@ | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|       overlays = |       overlays = | ||||||
|         mapModules (toString ./overlays) import; |         mapModules ./overlays import; | ||||||
| 
 | 
 | ||||||
|       packages."${system}" = |       packages."${system}" = | ||||||
|         mapModules (toString ./packages) |         mapModules ./packages | ||||||
|           (p: pkgs.callPackage p {}); |           (p: pkgs.callPackage p {}); | ||||||
| 
 | 
 | ||||||
|       nixosModules = |       nixosModules = | ||||||
|         mapModulesRec (toString ./modules) import; |         { dotfiles = import ./.; } | ||||||
|  |         // mapModulesRec ./modules import; | ||||||
| 
 | 
 | ||||||
|       nixosConfigurations = |       nixosConfigurations = | ||||||
|         mapModules (toString ./hosts) |         mapHosts ./hosts { inherit system; }; | ||||||
|           (modulePath: nixosSystem { |  | ||||||
|             inherit system; |  | ||||||
|             specialArgs = { inherit lib inputs; }; |  | ||||||
|             modules = [ |  | ||||||
|               # Common config for all nixos machines; and to ensure the flake |  | ||||||
|               # operates soundly |  | ||||||
|               { |  | ||||||
|                 networking.hostName = removeSuffix ".nix" (baseNameOf modulePath); |  | ||||||
|                 environment.variables.NIXPKGS_ALLOW_UNFREE = "1"; |  | ||||||
|                 environment.variables.DOTFILES = dotFilesDir; |  | ||||||
|                 nixpkgs.pkgs = pkgs; |  | ||||||
|                 nix = { |  | ||||||
|                   package = unstable.nixFlakes; |  | ||||||
|                   extraOptions = "experimental-features = nix-command flakes"; |  | ||||||
|                   nixPath = [ |  | ||||||
|                     "nixpkgs=${nixos}" |  | ||||||
|                     "nixpkgs-unstable=${nixos-unstable}" |  | ||||||
|                     "nixpkgs-overlays=${dotFilesDir}/overlays" |  | ||||||
|                     "home-manager=${home-manager}" |  | ||||||
|                     "dotfiles=${dotFilesDir}" |  | ||||||
|                   ]; |  | ||||||
|                   binaryCaches = [ |  | ||||||
|                     "https://cache.nixos.org/" |  | ||||||
|                     "https://nix-community.cachix.org" |  | ||||||
|                   ]; |  | ||||||
|                   binaryCachePublicKeys = [ |  | ||||||
|                     "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" |  | ||||||
|                   ]; |  | ||||||
|                   registry = { |  | ||||||
|                     nixos.flake = nixos; |  | ||||||
|                     nixpkgs.flake = nixos-unstable; |  | ||||||
|                   }; |  | ||||||
|                 }; |  | ||||||
|                 system.configurationRevision = mkIf (self ? rev) self.rev; |  | ||||||
|                 system.stateVersion = "20.09"; |  | ||||||
|               } |  | ||||||
| 
 |  | ||||||
|               # I use home-manager to deploy files to $HOME; little else |  | ||||||
|               home-manager.nixosModules.home-manager |  | ||||||
| 
 |  | ||||||
|               # All my personal modules |  | ||||||
|               { imports = mapModulesRec' (toString ./modules) import; } |  | ||||||
| 
 |  | ||||||
|               ./hosts       # config common to all hosts |  | ||||||
|               modulePath    # host-specific config |  | ||||||
|             ]; |  | ||||||
|           }); |  | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -4,7 +4,10 @@ | ||||||
| 
 | 
 | ||||||
| with lib.my; | with lib.my; | ||||||
| { | { | ||||||
|   imports = [ ./hardware-configuration.nix ]; |   imports = [ | ||||||
|  |     ../personal.nix | ||||||
|  |     ./hardware-configuration.nix | ||||||
|  |   ]; | ||||||
| 
 | 
 | ||||||
|   ## Modules |   ## Modules | ||||||
|   modules = { |   modules = { | ||||||
|  | @ -20,7 +23,6 @@ with lib.my; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|   ## Local config |   ## Local config | ||||||
|   boot.loader.systemd-boot.enable = true; |  | ||||||
|   networking.networkmanager.enable = true; |   networking.networkmanager.enable = true; | ||||||
| 
 | 
 | ||||||
|   # nginx hosts |   # nginx hosts | ||||||
|  |  | ||||||
|  | @ -1,71 +0,0 @@ | ||||||
| # hosts/default.nix |  | ||||||
| # |  | ||||||
| # Loads config common to all hosts. |  | ||||||
| 
 |  | ||||||
| { config, lib, pkgs, ... }: |  | ||||||
| 
 |  | ||||||
| with lib; |  | ||||||
| with lib.my; |  | ||||||
| { |  | ||||||
|   ## Some reasonable, global defaults |  | ||||||
|   # This is here to appease 'nix flake check' for generic hosts with no |  | ||||||
|   # hardware-configuration.nix or fileSystem config. |  | ||||||
|   fileSystems."/".device = "/dev/disk/by-label/nixos"; |  | ||||||
| 
 |  | ||||||
|   boot.loader = { |  | ||||||
|     efi.canTouchEfiVariables = true; |  | ||||||
|     systemd-boot.configurationLimit = 10; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Just the bear necessities... |  | ||||||
|   environment.systemPackages = with pkgs; [ |  | ||||||
|     unstable.cached-nix-shell |  | ||||||
|     coreutils |  | ||||||
|     git |  | ||||||
|     vim |  | ||||||
|     wget |  | ||||||
|     gnumake |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   networking.firewall.enable = true; |  | ||||||
|   networking.hosts = |  | ||||||
|     let hostConfig = { |  | ||||||
|           "192.168.1.2"  = [ "ao" ]; |  | ||||||
|           "192.168.1.3"  = [ "aka" ]; |  | ||||||
|           "192.168.1.10" = [ "kuro" ]; |  | ||||||
|           "192.168.1.11" = [ "shiro" ]; |  | ||||||
|           "192.168.1.12" = [ "midori" ]; |  | ||||||
|         }; |  | ||||||
|         hosts = flatten (attrValues hostConfig); |  | ||||||
|         hostName = config.networking.hostName; |  | ||||||
|     in mkIf (builtins.elem hostName hosts) hostConfig; |  | ||||||
| 
 |  | ||||||
|   # Use the latest kernel |  | ||||||
|   boot.kernelPackages = pkgs.linuxPackages_latest; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   ## Location config -- since Toronto is my 127.0.0.1 |  | ||||||
|   time.timeZone = lib.mkDefault "America/Toronto"; |  | ||||||
|   i18n.defaultLocale = lib.mkDefault "en_US.UTF-8"; |  | ||||||
|   # For redshift, mainly |  | ||||||
|   location = (if config.time.timeZone == "America/Toronto" then { |  | ||||||
|     latitude = 43.70011; |  | ||||||
|     longitude = -79.4163; |  | ||||||
|   } else if config.time.timeZone == "Europe/Copenhagen" then { |  | ||||||
|     latitude = 55.88; |  | ||||||
|     longitude = 12.5; |  | ||||||
|   } else {}); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|   ## System security tweaks |  | ||||||
|   boot.tmpOnTmpfs = true; |  | ||||||
|   security.hideProcessInformation = true; |  | ||||||
|   security.protectKernelImage = true; |  | ||||||
|   # Fix a security hole in place for backwards compatibility. See desc in |  | ||||||
|   # nixpkgs/nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix |  | ||||||
|   boot.loader.systemd-boot.editor = false; |  | ||||||
| 
 |  | ||||||
|   # Change me later! |  | ||||||
|   user.initialPassword = "nix"; |  | ||||||
|   users.users.root.initialPassword = "nix"; |  | ||||||
| } |  | ||||||
|  | @ -1,6 +1,9 @@ | ||||||
| { ... }: | { ... }: | ||||||
| { | { | ||||||
|   imports = [ ./hardware-configuration.nix ]; |   imports = [ | ||||||
|  |     ../personal.nix | ||||||
|  |     ./hardware-configuration.nix | ||||||
|  |   ]; | ||||||
| 
 | 
 | ||||||
|   ## Modules |   ## Modules | ||||||
|   modules = { |   modules = { | ||||||
|  | @ -73,7 +76,6 @@ | ||||||
|   programs.ssh.startAgent = true; |   programs.ssh.startAgent = true; | ||||||
|   services.openssh.startWhenNeeded = true; |   services.openssh.startWhenNeeded = true; | ||||||
| 
 | 
 | ||||||
|   boot.loader.systemd-boot.enable = true; |  | ||||||
|   networking.networkmanager.enable = true; |   networking.networkmanager.enable = true; | ||||||
|   # The global useDHCP flag is deprecated, therefore explicitly set to false |   # The global useDHCP flag is deprecated, therefore explicitly set to false | ||||||
|   # here. Per-interface useDHCP will be mandatory in the future, so this |   # here. Per-interface useDHCP will be mandatory in the future, so this | ||||||
|  |  | ||||||
|  | @ -27,9 +27,7 @@ | ||||||
| 
 | 
 | ||||||
| { config, lib, pkgs, ... }: | { config, lib, pkgs, ... }: | ||||||
| 
 | 
 | ||||||
| let | with lib; | ||||||
|   inherit (lib) filter pathExists; |  | ||||||
| in |  | ||||||
| { | { | ||||||
|   imports = filter pathExists ["/etc/nixos/configuration.nix"]; |   imports = filter pathExists ["/etc/nixos/configuration.nix"]; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										28
									
								
								hosts/personal.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								hosts/personal.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | ||||||
|  | { config, lib, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | { | ||||||
|  |   networking.hosts = | ||||||
|  |     let hostConfig = { | ||||||
|  |           "192.168.1.2"  = [ "ao" ]; | ||||||
|  |           "192.168.1.3"  = [ "aka" ]; | ||||||
|  |           "192.168.1.10" = [ "kuro" ]; | ||||||
|  |           "192.168.1.11" = [ "shiro" ]; | ||||||
|  |           "192.168.1.12" = [ "midori" ]; | ||||||
|  |         }; | ||||||
|  |         hosts = flatten (attrValues hostConfig); | ||||||
|  |         hostName = config.networking.hostName; | ||||||
|  |     in mkIf (builtins.elem hostName hosts) hostConfig; | ||||||
|  | 
 | ||||||
|  |   ## Location config -- since Toronto is my 127.0.0.1 | ||||||
|  |   time.timeZone = mkDefault "America/Toronto"; | ||||||
|  |   i18n.defaultLocale = mkDefault "en_US.UTF-8"; | ||||||
|  |   # For redshift, mainly | ||||||
|  |   location = (if config.time.timeZone == "America/Toronto" then { | ||||||
|  |     latitude = 43.70011; | ||||||
|  |     longitude = -79.4163; | ||||||
|  |   } else if config.time.timeZone == "Europe/Copenhagen" then { | ||||||
|  |     latitude = 55.88; | ||||||
|  |     longitude = 12.5; | ||||||
|  |   } else {}); | ||||||
|  | } | ||||||
|  | @ -2,7 +2,10 @@ | ||||||
| 
 | 
 | ||||||
| { ... }: | { ... }: | ||||||
| { | { | ||||||
|   imports = [ ./hardware-configuration.nix ]; |   imports = [ | ||||||
|  |     ../personal.nix | ||||||
|  |     ./hardware-configuration.nix | ||||||
|  |   ]; | ||||||
| 
 | 
 | ||||||
|   ## Modules |   ## Modules | ||||||
|   modules = { |   modules = { | ||||||
|  | @ -77,7 +80,6 @@ | ||||||
|   programs.ssh.startAgent = true; |   programs.ssh.startAgent = true; | ||||||
|   services.openssh.startWhenNeeded = true; |   services.openssh.startWhenNeeded = true; | ||||||
| 
 | 
 | ||||||
|   boot.loader.systemd-boot.enable = true; |  | ||||||
|   networking.wireless.enable = true; |   networking.wireless.enable = true; | ||||||
|   hardware.opengl.enable = true; |   hardware.opengl.enable = true; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| { lib, pkgs, ... }: | { inputs, lib, pkgs, ... }: | ||||||
| 
 | 
 | ||||||
| let | let | ||||||
|   inherit (lib) makeExtensible attrValues foldr; |   inherit (lib) makeExtensible attrValues foldr; | ||||||
|  | @ -10,8 +10,8 @@ let | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   mylib = makeExtensible (self: |   mylib = makeExtensible (self: | ||||||
|     with self; mapModules (toString ./.) |     with self; mapModules ./. | ||||||
|       (file: import file { inherit self lib pkgs; })); |       (file: import file { inherit self lib pkgs inputs; })); | ||||||
| in | in | ||||||
| mylib.extend | mylib.extend | ||||||
|   (self: super: |   (self: super: | ||||||
|  |  | ||||||
							
								
								
									
										25
									
								
								lib/nixos.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								lib/nixos.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | { inputs, lib, pkgs, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | with lib.my; | ||||||
|  | let system = "x86_64-linux"; | ||||||
|  | in { | ||||||
|  |   mkHost = path: attrs @ { system ? system, ... }: | ||||||
|  |     nixosSystem { | ||||||
|  |       inherit system; | ||||||
|  |       specialArgs = { inherit lib inputs; }; | ||||||
|  |       modules = [ | ||||||
|  |         { | ||||||
|  |           nixpkgs.pkgs = pkgs; | ||||||
|  |           networking.hostName = mkDefault (removeSuffix ".nix" (baseNameOf path)); | ||||||
|  |         } | ||||||
|  |         (filterAttrs (n: v: !elem n [ "system" ]) attrs) | ||||||
|  |         ../. | ||||||
|  |         (import path) | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |   mapHosts = dir: attrs @ { system ? system, ... }: | ||||||
|  |     mapModules dir | ||||||
|  |       (hostPath: mkHost hostPath attrs); | ||||||
|  | } | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| # https://github.com/hlissner/doom-emacs. This module sets it up to meet my | # https://github.com/hlissner/doom-emacs. This module sets it up to meet my | ||||||
| # particular Doomy needs. | # particular Doomy needs. | ||||||
| 
 | 
 | ||||||
| { config, options, lib, pkgs, inputs, ... }: | { config, lib, pkgs, inputs, ... }: | ||||||
| 
 | 
 | ||||||
| with lib; | with lib; | ||||||
| with lib.my; | with lib.my; | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								modules/security.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								modules/security.nix
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   ## System security tweaks | ||||||
|  |   boot.tmpOnTmpfs = true; | ||||||
|  |   security.hideProcessInformation = true; | ||||||
|  |   security.protectKernelImage = true; | ||||||
|  | 
 | ||||||
|  |   # Fix a security hole in place for backwards compatibility. See desc in | ||||||
|  |   # nixpkgs/nixos/modules/system/boot/loader/systemd-boot/systemd-boot.nix | ||||||
|  |   boot.loader.systemd-boot.editor = false; | ||||||
|  | 
 | ||||||
|  |   # Change me later! | ||||||
|  |   user.initialPassword = "nix"; | ||||||
|  |   users.users.root.initialPassword = "nix"; | ||||||
|  | } | ||||||
		Loading…
	
		Reference in a new issue