Compare commits
	
		
			6 Commits
		
	
	
		
			be0a1be47d
			...
			3321ec122a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 3321ec122a | ||
|  | 47d937e12d | ||
|  | f5668462eb | ||
|  | be0755bcfe | ||
|  | fb74112c15 | ||
|  | 51d961484e | 
							
								
								
									
										19
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								flake.nix
									
									
									
									
									
								
							| @ -18,26 +18,31 @@ | |||||||
|       wrapPkgsSystem = { system }: |       wrapPkgsSystem = { system }: | ||||||
|         import nixpkgs rec { |         import nixpkgs rec { | ||||||
|           inherit system; |           inherit system; | ||||||
|           unstable = wrapUnstablePkgsSystem { inherit system; }; |            | ||||||
|  |           unstablePkgs = wrapUnstablePkgsSystem { inherit system; }; | ||||||
|           config.allowUnfree = true; |           config.allowUnfree = true; | ||||||
|           overlays = [ |           overlays = [ | ||||||
|             (final: prev: { inherit unstable; }) |             (final: prev: { inherit unstablePkgs; }) | ||||||
|           ]; |           ]; | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|       wrapUnstablePkgsSystem = { system }: |       wrapUnstablePkgsSystem = { system }: | ||||||
|         import nixos-unstable { |         import nixos-unstable { | ||||||
|           inherit system; |           inherit system; | ||||||
|  |            | ||||||
|           config.allowUnfree = true; |           config.allowUnfree = true; | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|       wrapUtils = { pkgs, unstable, system }: |       wrapUtils = { pkgs, unstablePkgs, system }: | ||||||
|         let |         let | ||||||
|           inherit (pkgs.lib) makeScope; |           inherit (pkgs.lib) makeScope; | ||||||
|           inherit (pkgs) newScope; |           inherit (pkgs) newScope; | ||||||
|         in |         in | ||||||
|         makeScope newScope (self: { |         makeScope newScope (self: rec { | ||||||
|           inherit nixpkgs home-manager nixos-unstable; |           inherit nixpkgs home-manager nixos-unstable; | ||||||
|  |           inherit (self.callPackage ./lib/utils.nix { }) mkSysRole mkHomeRole; | ||||||
|  |           inherit (user) mkUser; | ||||||
|  | 
 | ||||||
|           user = self.callPackage ./lib/user.nix { }; |           user = self.callPackage ./lib/user.nix { }; | ||||||
|           host = self.callPackage ./lib/host.nix { }; |           host = self.callPackage ./lib/host.nix { }; | ||||||
|         }); |         }); | ||||||
| @ -45,15 +50,15 @@ | |||||||
| 
 | 
 | ||||||
|       pkgsLinuxX64 = wrapPkgsSystem { system = sysLinuxX64; }; |       pkgsLinuxX64 = wrapPkgsSystem { system = sysLinuxX64; }; | ||||||
|       unstableLinuxX64 = wrapUnstablePkgsSystem { system = sysLinuxX64; }; |       unstableLinuxX64 = wrapUnstablePkgsSystem { system = sysLinuxX64; }; | ||||||
|       utilsLinuxX64 = wrapUtils { system = sysLinuxX64; pkgs = pkgsLinuxX64; unstable = unstableLinuxX64; }; |       utilsLinuxX64 = wrapUtils { system = sysLinuxX64; pkgs = pkgsLinuxX64; unstablePkgs = unstableLinuxX64; }; | ||||||
| 
 | 
 | ||||||
|       pkgsLinuxAarch = wrapPkgsSystem { system = sysLinuxAarch; }; |       pkgsLinuxAarch = wrapPkgsSystem { system = sysLinuxAarch; }; | ||||||
|       unstableLinuxAarch = wrapUnstablePkgsSystem { system = sysLinuxAarch; }; |       unstableLinuxAarch = wrapUnstablePkgsSystem { system = sysLinuxAarch; }; | ||||||
|       utilsLinuxAarch = wrapUtils { system = sysLinuxAarch; pkgs = pkgsLinuxAarch; unstable = unstableLinuxAarch; }; |       utilsLinuxAarch = wrapUtils { system = sysLinuxAarch; pkgs = pkgsLinuxAarch; unstablePkgs = unstableLinuxAarch; }; | ||||||
| 
 | 
 | ||||||
|       pkgsDarwin = wrapPkgsSystem { system = sysDarwin; }; |       pkgsDarwin = wrapPkgsSystem { system = sysDarwin; }; | ||||||
|       unstableDarwin = wrapUnstablePkgsSystem { system = sysDarwin; }; |       unstableDarwin = wrapUnstablePkgsSystem { system = sysDarwin; }; | ||||||
|       utilsDarwin = wrapUtils { system = sysDarwin; pkgs = pkgsDarwin; unstable = unstableDarwin; }; |       utilsDarwin = wrapUtils { system = sysDarwin; pkgs = pkgsDarwin; unstablePkgs = unstableDarwin; }; | ||||||
|     in |     in | ||||||
|     { |     { | ||||||
|       nixosConfigurations = { |       nixosConfigurations = { | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ let | |||||||
| in | in | ||||||
| { | { | ||||||
|   imports = [ |   imports = [ | ||||||
|     # Include the results of the hardware scan. |     ./options.nix | ||||||
|     ./backup.nix |     ./backup.nix | ||||||
|     ./hardware.nix |     ./hardware.nix | ||||||
|     ./firewall.nix |     ./firewall.nix | ||||||
| @ -132,6 +132,11 @@ in | |||||||
|     driSupport = true; |     driSupport = true; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   architect.firewall = { | ||||||
|  |     openTCP = [ 22 ]; | ||||||
|  |     openTCPVPN = [ 22 ]; | ||||||
|  |   }; | ||||||
|  |    | ||||||
|   services = { |   services = { | ||||||
|     fwupd.enable = true; |     fwupd.enable = true; | ||||||
|     das_watchdog.enable = true; |     das_watchdog.enable = true; | ||||||
|  | |||||||
| @ -4,8 +4,15 @@ let | |||||||
|   domain = "htdel.giugl.io"; |   domain = "htdel.giugl.io"; | ||||||
|   network = import ./network.nix; |   network = import ./network.nix; | ||||||
|   auth_block = (import ./openid.nix { inherit lib; }).openresty_oidc_block; |   auth_block = (import ./openid.nix { inherit lib; }).openresty_oidc_block; | ||||||
|  | 
 | ||||||
|  |   listenPorts = [ 51413 51414 ]; | ||||||
| in | in | ||||||
| { | { | ||||||
|  |   architect.firewall = { | ||||||
|  |     openTCP = listenPorts; | ||||||
|  |     openUDP = listenPorts; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|   services = { |   services = { | ||||||
|     deluge = { |     deluge = { | ||||||
|       enable = true; |       enable = true; | ||||||
| @ -24,7 +31,7 @@ in | |||||||
|         max_connections_global = 1000; |         max_connections_global = 1000; | ||||||
|         max_active_limit = 100; |         max_active_limit = 100; | ||||||
|         max_active_downloading = 100; |         max_active_downloading = 100; | ||||||
|         listen_ports = [ 51413 51414 ]; |         listen_ports = listenPorts; | ||||||
|         random_port = false; |         random_port = false; | ||||||
|         enabled_plugins = [ "Label" "Extractor" ]; |         enabled_plugins = [ "Label" "Extractor" ]; | ||||||
|       }; |       }; | ||||||
|  | |||||||
| @ -6,6 +6,8 @@ let | |||||||
|   dnscrypt_listen_port = "5353"; |   dnscrypt_listen_port = "5353"; | ||||||
| in | in | ||||||
| { | { | ||||||
|  |   architect.firewall.openUDPVPN = [ 53 ]; | ||||||
|  | 
 | ||||||
|   services = { |   services = { | ||||||
|     dnsmasq = { |     dnsmasq = { | ||||||
|       enable = true; |       enable = true; | ||||||
|  | |||||||
| @ -1,54 +1,13 @@ | |||||||
| { config, lib, ... }: | { config, lib, ... }: | ||||||
| 
 | 
 | ||||||
| with import ./network.nix; | with import ./network.nix; | ||||||
|  | with lib; | ||||||
| 
 | 
 | ||||||
| let | let | ||||||
|   # TCP services |   openTCP = concatMapStringsSep "," (x: toString x) config.architect.firewall.openTCP; | ||||||
|   ssh_tcp = 22; |   openUDP = concatMapStringsSep "," (x: toString x) config.architect.firewall.openUDP; | ||||||
|   http_tcp = 80; |   openTCPVPN = concatMapStringsSep "," (x: toString x) config.architect.firewall.openTCPVPN; | ||||||
|   https_tcp = 443; |   openUDPVPN = concatMapStringsSep "," (x: toString x) config.architect.firewall.openUDPVPN; | ||||||
|   synapse_tcp = 8448; |  | ||||||
|   gitea_tcp = 10022; |  | ||||||
|   prosody_tcp = 5222; |  | ||||||
|   minecraft_tcp = 25565; |  | ||||||
| 
 |  | ||||||
|   # UDP services |  | ||||||
|   dns_udp = 53; |  | ||||||
|   wireguard_udp = 1194; |  | ||||||
| 
 |  | ||||||
|   # TCP/UDP services |  | ||||||
|   torrent_a = 51413; |  | ||||||
|   torrent_b = 51414; |  | ||||||
| 
 |  | ||||||
|   # grouping |  | ||||||
|   open_tcp_ports = lib.concatMapStringsSep "," (x: toString x) [ |  | ||||||
|     ssh_tcp |  | ||||||
|     http_tcp |  | ||||||
|     https_tcp |  | ||||||
|     synapse_tcp |  | ||||||
|     gitea_tcp |  | ||||||
|     torrent_a |  | ||||||
|     torrent_b |  | ||||||
|     minecraft_tcp |  | ||||||
|   ]; |  | ||||||
|   open_udp_ports = lib.concatMapStringsSep "," (x: toString x) [ |  | ||||||
|     wireguard_udp |  | ||||||
|     torrent_a |  | ||||||
|     torrent_b |  | ||||||
|     config.services.tailscale.port |  | ||||||
|   ]; |  | ||||||
|   open_tcp_ports_vpn = lib.concatMapStringsSep "," (x: toString x) [ |  | ||||||
|     ssh_tcp |  | ||||||
|     http_tcp |  | ||||||
|     https_tcp |  | ||||||
|     prosody_tcp |  | ||||||
|     minecraft_tcp |  | ||||||
|   ]; |  | ||||||
|   open_udp_ports_vpn = lib.concatMapStringsSep "," (x: toString x) [ |  | ||||||
|     dns_udp |  | ||||||
|     wireguard_udp |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
| in | in | ||||||
| { | { | ||||||
|   networking = { |   networking = { | ||||||
| @ -161,10 +120,11 @@ in | |||||||
|             ip saddr ${tailscale-net} accept comment "tailscale > local" |             ip saddr ${tailscale-net} accept comment "tailscale > local" | ||||||
|             ip saddr {${lib.concatStringsSep "," gdevices}} accept comment "vpn > local" |             ip saddr {${lib.concatStringsSep "," gdevices}} accept comment "vpn > local" | ||||||
| 
 | 
 | ||||||
|             iifname ${wan-if} tcp dport {${open_tcp_ports}} accept |             iifname ${wan-if} tcp dport {${openTCP}} accept | ||||||
|             iifname ${wan-if} udp dport {${open_udp_ports}} accept |             iifname ${wan-if} udp dport {${openUDP}} accept | ||||||
|             iifname ${vpn-if} tcp dport {${open_tcp_ports_vpn}} accept |             iifname ${vpn-if} tcp dport {${openTCPVPN}} accept | ||||||
|             iifname ${vpn-if} udp dport {${open_udp_ports_vpn}} accept |             iifname ${vpn-if} udp dport {${openUDPVPN}} accept | ||||||
|  |                        | ||||||
|             iifname ${vpn-if} icmp type echo-request accept |             iifname ${vpn-if} icmp type echo-request accept | ||||||
|             iifname ${docker-if} udp dport 53 accept |             iifname ${docker-if} udp dport 53 accept | ||||||
|             jump filter_drop |             jump filter_drop | ||||||
|  | |||||||
| @ -1,11 +1,12 @@ | |||||||
| { lib, ... }: | { config, lib, ... }: | ||||||
| 
 | 
 | ||||||
| let | let | ||||||
|   domain = "git.giugl.io"; |   domain = "git.giugl.io"; | ||||||
|   network = import ./network.nix; |   network = import ./network.nix; | ||||||
|   auth_block = (import ./openid.nix { inherit lib; }).openresty_oidc_block; |  | ||||||
| in | in | ||||||
| { | { | ||||||
|  |   architect.firewall.openTCP = [ config.services.gitea.settings.server.SSH_PORT ]; | ||||||
|  | 
 | ||||||
|   services.gitea = { |   services.gitea = { | ||||||
|     enable = true; |     enable = true; | ||||||
|     database.type = "sqlite3"; |     database.type = "sqlite3"; | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ in | |||||||
|     invidious = { |     invidious = { | ||||||
|       enable = true; |       enable = true; | ||||||
|       port = 9092; |       port = 9092; | ||||||
|       package = pkgs.unstable.invidious; |       package = pkgs.unstablePkgs.invidious; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     nginx.virtualHosts.${domain} = { |     nginx.virtualHosts.${domain} = { | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ in | |||||||
|     jellyfin = { |     jellyfin = { | ||||||
|       enable = true; |       enable = true; | ||||||
|       group = "media"; |       group = "media"; | ||||||
|       package = pkgs.unstable.jellyfin; |       package = pkgs.unstablePkgs.jellyfin; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     nginx.virtualHosts.${domain} = { |     nginx.virtualHosts.${domain} = { | ||||||
|  | |||||||
| @ -5,11 +5,13 @@ let | |||||||
|   network = import ./network.nix; |   network = import ./network.nix; | ||||||
| in | in | ||||||
| { | { | ||||||
|  |   architect.firewall.openTCP = [ 25565 ]; | ||||||
|  |    | ||||||
|   services.minecraft-server = { |   services.minecraft-server = { | ||||||
|     enable = true; |     enable = true; | ||||||
|     eula = true; |     eula = true; | ||||||
|     declarative = true; |     declarative = true; | ||||||
|     package = pkgs.unstable.minecraft-server; |     package = pkgs.unstablePkgs.minecraft-server; | ||||||
|     serverProperties = { motd = "Welcome on the RuNas server!"; }; |     serverProperties = { motd = "Welcome on the RuNas server!"; }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ in | |||||||
|   services = { |   services = { | ||||||
|     mysql = { |     mysql = { | ||||||
|       enable = true; |       enable = true; | ||||||
|       package = pkgs.unstable.mysql80; |       package = pkgs.unstablePkgs.mysql80; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     redis = { |     redis = { | ||||||
| @ -24,7 +24,7 @@ in | |||||||
|       enable = true; |       enable = true; | ||||||
|       hostName = domain; |       hostName = domain; | ||||||
|       https = true; |       https = true; | ||||||
|       package = pkgs.unstable.nextcloud25; |       package = pkgs.unstablePkgs.nextcloud25; | ||||||
|       datadir = "/services/nextcloud"; |       datadir = "/services/nextcloud"; | ||||||
|       caching = { |       caching = { | ||||||
|         redis = true; |         redis = true; | ||||||
|  | |||||||
| @ -1,6 +1,11 @@ | |||||||
| { services, pkgs, lib, ... }: | { services, pkgs, lib, ... }: | ||||||
| 
 | 
 | ||||||
| { | { | ||||||
|  |   architect.firewall = { | ||||||
|  |     openTCP = [ 80 443 ]; | ||||||
|  |     openTCPVPN = [ 80 443 ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|   services.nginx = { |   services.nginx = { | ||||||
|     enable = true; |     enable = true; | ||||||
|     package = pkgs.openresty; |     package = pkgs.openresty; | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ in | |||||||
|       server = { |       server = { | ||||||
|         port = 9093; |         port = 9093; | ||||||
|         hostname = domain; |         hostname = domain; | ||||||
|         staticDir = "${pkgs.unstable.nitter}/share/nitter/public"; |         staticDir = "${pkgs.unstablePkgs.nitter}/share/nitter/public"; | ||||||
|       }; |       }; | ||||||
|       preferences = { |       preferences = { | ||||||
|         replaceYouTube = "tube.giugl.io"; |         replaceYouTube = "tube.giugl.io"; | ||||||
|  | |||||||
							
								
								
									
										25
									
								
								hosts/architect/options.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								hosts/architect/options.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | |||||||
|  | { config, lib, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   options.architect.firewall = { | ||||||
|  |     openTCP = mkOption { | ||||||
|  |       type = types.listOf types.int; | ||||||
|  |       default = [ ]; | ||||||
|  |     }; | ||||||
|  |     openUDP = mkOption { | ||||||
|  |       type = types.listOf types.int; | ||||||
|  |       default = [ ]; | ||||||
|  |     }; | ||||||
|  |     openTCPVPN = mkOption { | ||||||
|  |       type = types.listOf types.int; | ||||||
|  |       default = [ ]; | ||||||
|  |     }; | ||||||
|  |     openUDPVPN = mkOption { | ||||||
|  |       type = types.listOf types.int; | ||||||
|  |       default = [ ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  | } | ||||||
| @ -7,7 +7,7 @@ in | |||||||
| { | { | ||||||
|   services.plex = { |   services.plex = { | ||||||
|     enable = true; |     enable = true; | ||||||
|     package = pkgs.unstable.plex; |     package = pkgs.unstablePkgs.plex; | ||||||
|     dataDir = "/plex"; |     dataDir = "/plex"; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| { lib, ... }: | { config, lib, ... }: | ||||||
| 
 | 
 | ||||||
| let | let | ||||||
|   network = import ./network.nix; |   network = import ./network.nix; | ||||||
| @ -6,6 +6,8 @@ let | |||||||
|   ifname = "ts0"; |   ifname = "ts0"; | ||||||
| in | in | ||||||
| { | { | ||||||
|  |   architect.firewall.openUDP = [ config.services.tailscale.port ]; | ||||||
|  | 
 | ||||||
|   services = { |   services = { | ||||||
|     tailscale = { |     tailscale = { | ||||||
|       enable = true; |       enable = true; | ||||||
|  | |||||||
| @ -1,4 +1,14 @@ | |||||||
| with import ./network.nix; { | { config, lib, ... }: | ||||||
|  | with import ./network.nix; | ||||||
|  | let | ||||||
|  |   listenPort = 1194; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   architect.firewall = { | ||||||
|  |     openUDP = lib.singleton listenPort; | ||||||
|  |     openUDPVPN = lib.singleton listenPort; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|   networking = { |   networking = { | ||||||
|     extraHosts = '' |     extraHosts = '' | ||||||
|       ${architect-wg} architect.devs.giugl.io |       ${architect-wg} architect.devs.giugl.io | ||||||
| @ -37,7 +47,8 @@ with import ./network.nix; { | |||||||
| 
 | 
 | ||||||
|     wireguard = { |     wireguard = { | ||||||
|       interfaces.${vpn-if} = { |       interfaces.${vpn-if} = { | ||||||
|         listenPort = 1194; |         inherit listenPort; | ||||||
|  | 
 | ||||||
|         ips = [ "10.3.0.1/24" ]; |         ips = [ "10.3.0.1/24" ]; | ||||||
|         privateKeyFile = "/secrets/wireguard/server.key"; |         privateKeyFile = "/secrets/wireguard/server.key"; | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										44
									
								
								lib/host.nix
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								lib/host.nix
									
									
									
									
									
								
							| @ -1,18 +1,26 @@ | |||||||
| { pkgs, nixpkgs, nixos-unstable, unstable, home-manager, user, system, ... }: | { pkgs | ||||||
|  | , nixpkgs | ||||||
|  | , nixos-unstable | ||||||
|  | , unstablePkgs | ||||||
|  | , home-manager | ||||||
|  | , system | ||||||
|  | , mkHomeRole | ||||||
|  | , mkSysRole | ||||||
|  | , mkUser | ||||||
|  | , ... | ||||||
|  | }: | ||||||
| 
 | 
 | ||||||
| { | { | ||||||
|   mkHost = { name, users, roles ? [ ], imports ? [ ] }: |   mkHost = { name, users, roles ? [ ], imports ? [ ] }: | ||||||
|     let |     let | ||||||
|       mkRole = role: pkgs.callPackage (../roles + "/${role}.nix") { }; |  | ||||||
| 
 |  | ||||||
|       users_mod = (map |       users_mod = (map | ||||||
|         (u: |         (u: | ||||||
|           user.mkUser { |           mkUser { | ||||||
|             name = u.user; |             name = u.user; | ||||||
|             roles = u.roles; |             roles = u.roles; | ||||||
|           }) |           }) | ||||||
|         users); |         users); | ||||||
|       roles_mod = (map (r: mkRole r) roles); |       roles_mod = (map (r: mkSysRole r) roles); | ||||||
|       add_imports = imports; |       add_imports = imports; | ||||||
|     in |     in | ||||||
|     nixpkgs.lib.nixosSystem { |     nixpkgs.lib.nixosSystem { | ||||||
| @ -20,26 +28,36 @@ | |||||||
| 
 | 
 | ||||||
|       modules = [ |       modules = [ | ||||||
|         { |         { | ||||||
|           imports = users_mod ++ roles_mod ++ add_imports; |           imports = users_mod ++ roles_mod ++ add_imports ++ [ | ||||||
|  |             (mkSysRole "common") | ||||||
|  |             (mkSysRole "acme") | ||||||
|  |           ]; | ||||||
|  | 
 | ||||||
|           nixpkgs = { inherit pkgs; }; |           nixpkgs = { inherit pkgs; }; | ||||||
| 
 | 
 | ||||||
|           nix.nixPath = [ "nixpkgs=${nixpkgs}" "unstable=${nixos-unstable}" ]; |           nix = { | ||||||
|           nix.registry.nixpkgs.flake = nixpkgs; |             nixPath = [ | ||||||
|           nix.registry.unstable.flake = nixos-unstable; |               "nixpkgs=${nixpkgs}" | ||||||
|  |               "unstable=${nixos-unstable}" | ||||||
|  |             ]; | ||||||
|  |             registry = { | ||||||
|  |               nixpkgs.flake = nixpkgs; | ||||||
|  |               unstable.flake = nixos-unstable; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
| 
 | 
 | ||||||
|           users.users.root = { shell = pkgs.zsh; }; |           users.users.root = { shell = pkgs.zsh; }; | ||||||
| 
 | 
 | ||||||
|           home-manager = { |           home-manager = { | ||||||
|             users.root.imports = [ ../roles/home/common.nix ]; |             users.root.imports = pkgs.lib.singleton (mkHomeRole "common"); | ||||||
|             extraSpecialArgs.unstable = unstable; |             extraSpecialArgs.unstablePkgs = unstablePkgs; | ||||||
|             useGlobalPkgs = true; |             useGlobalPkgs = true; | ||||||
|           }; |           }; | ||||||
|  | 
 | ||||||
|           system.stateVersion = "22.11"; |           system.stateVersion = "22.11"; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         home-manager.nixosModules.home-manager |         home-manager.nixosModules.home-manager | ||||||
|         ../roles/common.nix |  | ||||||
|         ../roles/acme.nix |  | ||||||
|         ../hosts/${name}/default.nix |         ../hosts/${name}/default.nix | ||||||
|       ]; |       ]; | ||||||
|     }; |     }; | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								lib/user.nix
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								lib/user.nix
									
									
									
									
									
								
							| @ -1,10 +1,9 @@ | |||||||
| { pkgs, unstable, home-manager, ... }: | { pkgs, home-manager, mkHomeRole, ... }: | ||||||
| 
 | 
 | ||||||
| { | { | ||||||
|   mkUser = { name, roles ? [ ] }: |   mkUser = { name, roles ? [ ] }: | ||||||
|     let |     let | ||||||
|       mkRole = role: import (../roles/home + "/${role}.nix"); |       roles_mod = (map (r: mkHomeRole r) roles); | ||||||
|       roles_mod = (map (r: mkRole r) roles); |  | ||||||
|     in |     in | ||||||
|     { |     { | ||||||
|       users.groups.plugdev = { }; |       users.groups.plugdev = { }; | ||||||
| @ -21,13 +20,12 @@ | |||||||
|         extraGroups = [ "wheel" "plugdev" ]; |         extraGroups = [ "wheel" "plugdev" ]; | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       home-manager.users.${name}.imports = [ (mkRole "common") ] ++ roles_mod; |       home-manager.users.${name}.imports = [ (mkHomeRole "common") ] ++ roles_mod; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|   mkHMUser = { name, roles }: |   mkHMUser = { name, roles ? [ ] }: | ||||||
|     let |     let | ||||||
|       mkRole = role: import (../roles/home + "/${role}.nix"); |       roles_mod = (map (r: mkHomeRole r) roles); | ||||||
|       roles_mod = (map (r: mkRole r) roles); |  | ||||||
|     in |     in | ||||||
|     home-manager.lib.homeManagerConfiguration { |     home-manager.lib.homeManagerConfiguration { | ||||||
|       inherit pkgs; |       inherit pkgs; | ||||||
| @ -39,7 +37,7 @@ | |||||||
|               if pkgs.stdenv.isLinux then "/home/${name}" else "/Users/${name}"; |               if pkgs.stdenv.isLinux then "/home/${name}" else "/Users/${name}"; | ||||||
|           }; |           }; | ||||||
|         } |         } | ||||||
|         (mkRole "common") |         (mkHomeRole "common") | ||||||
|       ] ++ roles_mod; |       ] ++ roles_mod; | ||||||
|     }; |     }; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										6
									
								
								lib/utils.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								lib/utils.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   mkSysRole = role: import (../roles/${role}.nix); | ||||||
|  |   mkHomeRole = role: import (../roles/home/${role}.nix); | ||||||
|  | } | ||||||
| @ -22,7 +22,7 @@ | |||||||
|   environment.systemPackages = with pkgs; [ |   environment.systemPackages = with pkgs; [ | ||||||
|     gnomeExtensions.appindicator |     gnomeExtensions.appindicator | ||||||
|     gnomeExtensions.sound-output-device-chooser |     gnomeExtensions.sound-output-device-chooser | ||||||
|     pkgs.unstable.gnomeExtensions.pop-shell |     pkgs.unstablePkgs.gnomeExtensions.pop-shell | ||||||
|   ]; |   ]; | ||||||
|   security.pam.services.gdm.enableGnomeKeyring = true; |   security.pam.services.gdm.enableGnomeKeyring = true; | ||||||
| } | } | ||||||
|  | |||||||
| @ -33,7 +33,7 @@ | |||||||
|       formatter = { command = "nixpkgs-fmt" } |       formatter = { command = "nixpkgs-fmt" } | ||||||
|     ''; |     ''; | ||||||
| 
 | 
 | ||||||
|     packages = with pkgs.unstable; [ |     packages = with pkgs.unstablePkgs; [ | ||||||
|       helix |       helix | ||||||
|       clang-tools |       clang-tools | ||||||
|       rust-analyzer |       rust-analyzer | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user