forked from jan-leila/nix-config
		
	main #2
					 13 changed files with 275 additions and 233 deletions
				
			
		|  | @ -1,7 +1,7 @@ | ||||||
| {osConfig, ...}: { | {osConfig, ...}: { | ||||||
|   imports = [ |   imports = [ | ||||||
|  |     ./packages | ||||||
|     ./i18n.nix |     ./i18n.nix | ||||||
|     ./packages.nix |  | ||||||
|     ./impermanence.nix |     ./impermanence.nix | ||||||
|     ./dconf.nix |     ./dconf.nix | ||||||
|   ]; |   ]; | ||||||
|  |  | ||||||
|  | @ -1,136 +0,0 @@ | ||||||
| { |  | ||||||
|   lib, |  | ||||||
|   config, |  | ||||||
|   osConfig, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: let |  | ||||||
|   userConfig = osConfig.host.users.leyla; |  | ||||||
|   hardware = osConfig.host.hardware; |  | ||||||
| in { |  | ||||||
|   imports = [ |  | ||||||
|     ./vscode/default.nix |  | ||||||
|     ./firefox.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   config = lib.mkMerge [ |  | ||||||
|     (lib.mkIf userConfig.isTerminalUser { |  | ||||||
|       home.packages = with pkgs; [ |  | ||||||
|         # command line tools |  | ||||||
|         sox |  | ||||||
|         yt-dlp |  | ||||||
|         ffmpeg |  | ||||||
|         imagemagick |  | ||||||
|       ]; |  | ||||||
|     }) |  | ||||||
|     (lib.mkIf userConfig.isDesktopUser { |  | ||||||
|       nixpkgs.config = { |  | ||||||
|         allowUnfree = true; |  | ||||||
|       }; |  | ||||||
| 
 |  | ||||||
|       home.packages = ( |  | ||||||
|         lib.lists.optionals userConfig.isDesktopUser ( |  | ||||||
|           (with pkgs; [ |  | ||||||
|             # helvetica font |  | ||||||
|             aileron |  | ||||||
| 
 |  | ||||||
|             gnomeExtensions.dash-to-dock |  | ||||||
| 
 |  | ||||||
|             # development tools |  | ||||||
|             dbeaver-bin |  | ||||||
|             bruno |  | ||||||
|             proxmark3 |  | ||||||
|           ]) |  | ||||||
|           ++ ( |  | ||||||
|             lib.lists.optionals hardware.directAccess.enable (with pkgs; [ |  | ||||||
|               #foss platforms |  | ||||||
|               signal-desktop-bin |  | ||||||
|               bitwarden |  | ||||||
|               ungoogled-chromium |  | ||||||
|               libreoffice |  | ||||||
|               inkscape |  | ||||||
|               gimp |  | ||||||
|               krita |  | ||||||
|               freecad |  | ||||||
|               # cura |  | ||||||
|               # kicad-small |  | ||||||
|               makemkv |  | ||||||
|               onionshare |  | ||||||
|               # rhythmbox |  | ||||||
|               (lib.mkIf hardware.graphicsAcceleration.enable obs-studio) |  | ||||||
|               # wireshark |  | ||||||
|               # rpi-imager |  | ||||||
|               # fritzing |  | ||||||
|               mfoc |  | ||||||
|               tor-browser |  | ||||||
|               anki |  | ||||||
|               pdfarranger |  | ||||||
|               calibre |  | ||||||
|               qbittorrent |  | ||||||
|               picard |  | ||||||
| 
 |  | ||||||
|               # proprietary platforms |  | ||||||
|               discord |  | ||||||
|               obsidian |  | ||||||
|               prostudiomasters |  | ||||||
|               (lib.mkIf hardware.graphicsAcceleration.enable davinci-resolve) |  | ||||||
| 
 |  | ||||||
|               # development tools |  | ||||||
|               # androidStudioPackages.canary |  | ||||||
|               jetbrains.idea-community |  | ||||||
|               qFlipper |  | ||||||
| 
 |  | ||||||
|               # system tools |  | ||||||
|               protonvpn-gui |  | ||||||
|               openvpn |  | ||||||
|               noisetorch |  | ||||||
| 
 |  | ||||||
|               # hardware management tools |  | ||||||
|               (lib.mkIf hardware.piperMouse.enable piper) |  | ||||||
|               (lib.mkIf hardware.openRGB.enable openrgb) |  | ||||||
|               (lib.mkIf hardware.viaKeyboard.enable via) |  | ||||||
|             ]) |  | ||||||
|           ) |  | ||||||
|         ) |  | ||||||
|       ); |  | ||||||
|       programs = lib.mkIf userConfig.isDesktopUser { |  | ||||||
|         # Let Home Manager install and manage itself. |  | ||||||
|         home-manager.enable = true; |  | ||||||
| 
 |  | ||||||
|         # set up git defaults |  | ||||||
|         git = { |  | ||||||
|           enable = true; |  | ||||||
|           userName = "Leyla Becker"; |  | ||||||
|           userEmail = "git@jan-leila.com"; |  | ||||||
|           extraConfig.init.defaultBranch = "main"; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         # add direnv to auto load flakes for development |  | ||||||
|         direnv = { |  | ||||||
|           enable = true; |  | ||||||
|           enableBashIntegration = true; |  | ||||||
|           nix-direnv.enable = true; |  | ||||||
|           config = { |  | ||||||
|             global.hide_env_diff = true; |  | ||||||
|             whitelist.exact = ["/home/leyla/documents/code/nix-config"]; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|         bash.enable = true; |  | ||||||
| 
 |  | ||||||
|         openssh = { |  | ||||||
|           authorizedKeys = [ |  | ||||||
|             "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJHeItmt8TRW43uNcOC+eIurYC7Eunc0V3LGocQqLaYj leyla@horizon" |  | ||||||
|             "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIILimFIW2exEH/Xo7LtXkqgE04qusvnPNpPWSCeNrFkP leyla@defiant" |  | ||||||
|             "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKBiZkg1c2aaNHiieBX4cEziqvJVj9pcDfzUrKU/mO0I leyla@twilight" |  | ||||||
|           ]; |  | ||||||
|           hostKeys = [ |  | ||||||
|             { |  | ||||||
|               type = "ed25519"; |  | ||||||
|               path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; |  | ||||||
|             } |  | ||||||
|           ]; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }) |  | ||||||
|   ]; |  | ||||||
| } |  | ||||||
							
								
								
									
										104
									
								
								configurations/home-manager/leyla/packages/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								configurations/home-manager/leyla/packages/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,104 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   config, | ||||||
|  |   osConfig, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   hardware = osConfig.host.hardware; | ||||||
|  | in { | ||||||
|  |   imports = [ | ||||||
|  |     ./vscode | ||||||
|  |     ./firefox.nix | ||||||
|  |     ./direnv.nix | ||||||
|  |     ./openssh.nix | ||||||
|  |     ./git.nix | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   config = lib.mkMerge [ | ||||||
|  |     (lib.mkIf config.user.isTerminalUser { | ||||||
|  |       home.packages = with pkgs; [ | ||||||
|  |         # command line tools | ||||||
|  |         sox | ||||||
|  |         yt-dlp | ||||||
|  |         ffmpeg | ||||||
|  |         imagemagick | ||||||
|  |       ]; | ||||||
|  |     }) | ||||||
|  |     (lib.mkIf config.user.isDesktopUser { | ||||||
|  |       nixpkgs.config = { | ||||||
|  |         allowUnfree = true; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       home.packages = ( | ||||||
|  |         (with pkgs; [ | ||||||
|  |           # helvetica font | ||||||
|  |           aileron | ||||||
|  | 
 | ||||||
|  |           gnomeExtensions.dash-to-dock | ||||||
|  | 
 | ||||||
|  |           # development tools | ||||||
|  |           dbeaver-bin | ||||||
|  |           bruno | ||||||
|  |           proxmark3 | ||||||
|  |         ]) | ||||||
|  |         ++ ( | ||||||
|  |           lib.lists.optionals hardware.directAccess.enable (with pkgs; [ | ||||||
|  |             #foss platforms | ||||||
|  |             signal-desktop-bin | ||||||
|  |             bitwarden | ||||||
|  |             ungoogled-chromium | ||||||
|  |             libreoffice | ||||||
|  |             inkscape | ||||||
|  |             gimp | ||||||
|  |             krita | ||||||
|  |             freecad | ||||||
|  |             # cura | ||||||
|  |             # kicad-small | ||||||
|  |             makemkv | ||||||
|  |             onionshare | ||||||
|  |             # rhythmbox | ||||||
|  |             (lib.mkIf hardware.graphicsAcceleration.enable obs-studio) | ||||||
|  |             # wireshark | ||||||
|  |             # rpi-imager | ||||||
|  |             # fritzing | ||||||
|  |             mfoc | ||||||
|  |             tor-browser | ||||||
|  |             anki | ||||||
|  |             pdfarranger | ||||||
|  |             calibre | ||||||
|  |             qbittorrent | ||||||
|  |             picard | ||||||
|  | 
 | ||||||
|  |             # proprietary platforms | ||||||
|  |             discord | ||||||
|  |             obsidian | ||||||
|  |             prostudiomasters | ||||||
|  |             (lib.mkIf hardware.graphicsAcceleration.enable davinci-resolve) | ||||||
|  | 
 | ||||||
|  |             # development tools | ||||||
|  |             # androidStudioPackages.canary | ||||||
|  |             jetbrains.idea-community | ||||||
|  |             qFlipper | ||||||
|  | 
 | ||||||
|  |             # system tools | ||||||
|  |             protonvpn-gui | ||||||
|  |             openvpn | ||||||
|  |             noisetorch | ||||||
|  | 
 | ||||||
|  |             # hardware management tools | ||||||
|  |             (lib.mkIf hardware.piperMouse.enable piper) | ||||||
|  |             (lib.mkIf hardware.openRGB.enable openrgb) | ||||||
|  |             (lib.mkIf hardware.viaKeyboard.enable via) | ||||||
|  |           ]) | ||||||
|  |         ) | ||||||
|  |       ); | ||||||
|  |       programs = { | ||||||
|  |         # Let Home Manager install and manage itself. | ||||||
|  |         home-manager.enable = true; | ||||||
|  | 
 | ||||||
|  |         bash.enable = true; | ||||||
|  |       }; | ||||||
|  |     }) | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								configurations/home-manager/leyla/packages/direnv.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								configurations/home-manager/leyla/packages/direnv.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | ||||||
|  | {config, ...}: { | ||||||
|  |   config = { | ||||||
|  |     programs = { | ||||||
|  |       git = { | ||||||
|  |         enable = config.user.isDesktopUser || config.user.isTerminalUser; | ||||||
|  |         userName = "Leyla Becker"; | ||||||
|  |         userEmail = "git@jan-leila.com"; | ||||||
|  |         extraConfig.init.defaultBranch = "main"; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -2,14 +2,12 @@ | ||||||
|   lib, |   lib, | ||||||
|   pkgs, |   pkgs, | ||||||
|   inputs, |   inputs, | ||||||
|   osConfig, |   config, | ||||||
|   ... |   ... | ||||||
| }: let | }: { | ||||||
|   is-desktop-user = osConfig.host.users.leyla.isDesktopUser; |   config = { | ||||||
| in { |  | ||||||
|   config = lib.mkIf is-desktop-user { |  | ||||||
|     programs.firefox = { |     programs.firefox = { | ||||||
|       enable = true; |       enable = config.user.isDesktopUser; | ||||||
|       profiles.leyla = { |       profiles.leyla = { | ||||||
|         settings = { |         settings = { | ||||||
|           "browser.search.defaultenginename" = "Searx"; |           "browser.search.defaultenginename" = "Searx"; | ||||||
							
								
								
									
										22
									
								
								configurations/home-manager/leyla/packages/git.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								configurations/home-manager/leyla/packages/git.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,22 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   osConfig, | ||||||
|  |   ... | ||||||
|  | }: let | ||||||
|  |   userConfig = osConfig.host.users.leyla; | ||||||
|  | in { | ||||||
|  |   config = lib.mkIf userConfig.isDesktopUser { | ||||||
|  |     programs = { | ||||||
|  |       direnv = { | ||||||
|  |         enable = true; | ||||||
|  |         enableBashIntegration = true; | ||||||
|  |         nix-direnv.enable = true; | ||||||
|  |         config = { | ||||||
|  |           global.hide_env_diff = true; | ||||||
|  |           whitelist.exact = ["${config.home.homeDirectory}/documents/code/nix-config"]; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								configurations/home-manager/leyla/packages/openssh.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								configurations/home-manager/leyla/packages/openssh.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,24 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   osConfig, | ||||||
|  |   ... | ||||||
|  | }: { | ||||||
|  |   config = { | ||||||
|  |     programs = { | ||||||
|  |       openssh = { | ||||||
|  |         enable = config.user.isDesktopUser; | ||||||
|  |         authorizedKeys = [ | ||||||
|  |           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJHeItmt8TRW43uNcOC+eIurYC7Eunc0V3LGocQqLaYj leyla@horizon" | ||||||
|  |           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIILimFIW2exEH/Xo7LtXkqgE04qusvnPNpPWSCeNrFkP leyla@defiant" | ||||||
|  |           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKBiZkg1c2aaNHiieBX4cEziqvJVj9pcDfzUrKU/mO0I leyla@twilight" | ||||||
|  |         ]; | ||||||
|  |         hostKeys = [ | ||||||
|  |           { | ||||||
|  |             type = "ed25519"; | ||||||
|  |             path = "${config.home.username}_${osConfig.networking.hostName}_ed25519"; | ||||||
|  |           } | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -8,9 +8,8 @@ | ||||||
| }: let | }: let | ||||||
|   nix-development-enabled = osConfig.host.nix-development.enable; |   nix-development-enabled = osConfig.host.nix-development.enable; | ||||||
|   ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable; |   ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable; | ||||||
|   is-desktop-user = osConfig.host.users.leyla.isDesktopUser; |  | ||||||
| in { | in { | ||||||
|   config = lib.mkIf is-desktop-user { |   config = lib.mkIf config.user.isDesktopUser { | ||||||
|     nixpkgs = { |     nixpkgs = { | ||||||
|       overlays = [ |       overlays = [ | ||||||
|         inputs.nix-vscode-extensions.overlays.default |         inputs.nix-vscode-extensions.overlays.default | ||||||
|  | @ -7,40 +7,38 @@ | ||||||
| }: let | }: let | ||||||
|   ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable; |   ai-tooling-enabled = config.user.continue.enable && osConfig.host.ai.enable; | ||||||
| in { | in { | ||||||
|   options = { |   options.user.continue = { | ||||||
|     user.continue = { |     enable = lib.mkEnableOption "should continue be enabled on this machine"; | ||||||
|       enable = lib.mkEnableOption "should continue be enabled on this machine"; |     docs = lib.mkOption { | ||||||
|       docs = lib.mkOption { |       type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { | ||||||
|         type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { |         options = { | ||||||
|           options = { |           name = lib.mkOption { | ||||||
|             name = lib.mkOption { |             type = lib.types.str; | ||||||
|               type = lib.types.str; |             default = name; | ||||||
|               default = name; |  | ||||||
|             }; |  | ||||||
|             startUrl = lib.mkOption { |  | ||||||
|               type = lib.types.str; |  | ||||||
|             }; |  | ||||||
|           }; |           }; | ||||||
|         })); |           startUrl = lib.mkOption { | ||||||
|       }; |             type = lib.types.str; | ||||||
|       context = lib.mkOption { |  | ||||||
|         type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { |  | ||||||
|           options = { |  | ||||||
|             provider = lib.mkOption { |  | ||||||
|               type = lib.types.str; |  | ||||||
|               default = name; |  | ||||||
|             }; |  | ||||||
|           }; |           }; | ||||||
|         })); |  | ||||||
|         default = { |  | ||||||
|           "code" = {}; |  | ||||||
|           "docs" = {}; |  | ||||||
|           "diff" = {}; |  | ||||||
|           "terminal" = {}; |  | ||||||
|           "problems" = {}; |  | ||||||
|           "folder" = {}; |  | ||||||
|           "codebase" = {}; |  | ||||||
|         }; |         }; | ||||||
|  |       })); | ||||||
|  |     }; | ||||||
|  |     context = lib.mkOption { | ||||||
|  |       type = lib.types.attrsOf (lib.types.submodule ({name, ...}: { | ||||||
|  |         options = { | ||||||
|  |           provider = lib.mkOption { | ||||||
|  |             type = lib.types.str; | ||||||
|  |             default = name; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       })); | ||||||
|  |       default = { | ||||||
|  |         "code" = {}; | ||||||
|  |         "docs" = {}; | ||||||
|  |         "diff" = {}; | ||||||
|  |         "terminal" = {}; | ||||||
|  |         "problems" = {}; | ||||||
|  |         "folder" = {}; | ||||||
|  |         "codebase" = {}; | ||||||
|       }; |       }; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| # this folder container modules that are for home manager only | # this folder container modules that are for home manager only | ||||||
| {...}: { | {...}: { | ||||||
|   imports = [ |   imports = [ | ||||||
|  |     ./user.nix | ||||||
|     ./flipperzero.nix |     ./flipperzero.nix | ||||||
|     ./i18n.nix |     ./i18n.nix | ||||||
|     ./openssh.nix |     ./openssh.nix | ||||||
|  |  | ||||||
|  | @ -6,6 +6,7 @@ | ||||||
|   ... |   ... | ||||||
| }: { | }: { | ||||||
|   options.programs.openssh = { |   options.programs.openssh = { | ||||||
|  |     enable = lib.mkEnableOption "should we enable openssh"; | ||||||
|     authorizedKeys = lib.mkOption { |     authorizedKeys = lib.mkOption { | ||||||
|       type = lib.types.listOf lib.types.str; |       type = lib.types.listOf lib.types.str; | ||||||
|       default = []; |       default = []; | ||||||
|  | @ -37,63 +38,65 @@ | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   config = lib.mkMerge [ |   config = lib.mkIf config.programs.openssh.enable ( | ||||||
|     ( |     lib.mkMerge [ | ||||||
|       lib.mkIf ((builtins.length config.programs.openssh.hostKeys) != 0) { |       ( | ||||||
|         services.ssh-agent.enable = true; |         lib.mkIf ((builtins.length config.programs.openssh.hostKeys) != 0) { | ||||||
|         programs.ssh = { |           services.ssh-agent.enable = true; | ||||||
|           enable = true; |           programs.ssh = { | ||||||
|           compression = true; |             enable = true; | ||||||
|           addKeysToAgent = "confirm"; |             compression = true; | ||||||
|           extraConfig = lib.strings.concatLines ( |             addKeysToAgent = "confirm"; | ||||||
|             builtins.map (hostKey: "IdentityFile ~/.ssh/${hostKey.path}") config.programs.openssh.hostKeys |             extraConfig = lib.strings.concatLines ( | ||||||
|  |               builtins.map (hostKey: "IdentityFile ~/.ssh/${hostKey.path}") config.programs.openssh.hostKeys | ||||||
|  |             ); | ||||||
|  |           }; | ||||||
|  | 
 | ||||||
|  |           systemd.user.services = builtins.listToAttrs ( | ||||||
|  |             builtins.map (hostKey: | ||||||
|  |               lib.attrsets.nameValuePair "ssh-gen-keys-${hostKey.path}" { | ||||||
|  |                 Install = { | ||||||
|  |                   WantedBy = ["default.target"]; | ||||||
|  |                 }; | ||||||
|  |                 Service = let | ||||||
|  |                   path = "${config.home.homeDirectory}/.ssh/${hostKey.path}"; | ||||||
|  |                 in { | ||||||
|  |                   Restart = "always"; | ||||||
|  |                   Type = "simple"; | ||||||
|  |                   ExecStart = "${ | ||||||
|  |                     pkgs.writeShellScript "ssh-gen-keys" '' | ||||||
|  |                       if ! [ -s "${path}" ]; then | ||||||
|  |                           if ! [ -h "${path}" ]; then | ||||||
|  |                               rm -f "${path}" | ||||||
|  |                           fi | ||||||
|  |                           mkdir -p "$(dirname '${path}')" | ||||||
|  |                           chmod 0755 "$(dirname '${path}')" | ||||||
|  |                           ${pkgs.openssh}/bin/ssh-keygen \ | ||||||
|  |                             -t "${hostKey.type}" \ | ||||||
|  |                             ${lib.optionalString (hostKey ? bits) "-b ${toString hostKey.bits}"} \ | ||||||
|  |                             ${lib.optionalString (hostKey ? rounds) "-a ${toString hostKey.rounds}"} \ | ||||||
|  |                             ${lib.optionalString (hostKey ? comment) "-C '${hostKey.comment}'"} \ | ||||||
|  |                             ${lib.optionalString (hostKey ? openSSHFormat && hostKey.openSSHFormat) "-o"} \ | ||||||
|  |                             -f "${path}" \ | ||||||
|  |                             -N "" | ||||||
|  |                           chown ${config.home.username} ${path}* | ||||||
|  |                           chgrp ${config.home.username} ${path}* | ||||||
|  |                       fi | ||||||
|  |                     '' | ||||||
|  |                   }"; | ||||||
|  |                 }; | ||||||
|  |               }) | ||||||
|  |             config.programs.openssh.hostKeys | ||||||
|  |           ); | ||||||
|  |         } | ||||||
|  |       ) | ||||||
|  |       (lib.mkIf osConfig.host.impermanence.enable { | ||||||
|  |         home.persistence."/persist${config.home.homeDirectory}" = { | ||||||
|  |           files = lib.lists.flatten ( | ||||||
|  |             builtins.map (hostKey: [".ssh/${hostKey.path}" ".ssh/${hostKey.path}.pub"]) config.programs.openssh.hostKeys | ||||||
|           ); |           ); | ||||||
|         }; |         }; | ||||||
| 
 |       }) | ||||||
|         systemd.user.services = builtins.listToAttrs ( |     ] | ||||||
|           builtins.map (hostKey: |   ); | ||||||
|             lib.attrsets.nameValuePair "ssh-gen-keys-${hostKey.path}" { |  | ||||||
|               Install = { |  | ||||||
|                 WantedBy = ["default.target"]; |  | ||||||
|               }; |  | ||||||
|               Service = let |  | ||||||
|                 path = "${config.home.homeDirectory}/.ssh/${hostKey.path}"; |  | ||||||
|               in { |  | ||||||
|                 Restart = "always"; |  | ||||||
|                 Type = "simple"; |  | ||||||
|                 ExecStart = "${ |  | ||||||
|                   pkgs.writeShellScript "ssh-gen-keys" '' |  | ||||||
|                     if ! [ -s "${path}" ]; then |  | ||||||
|                         if ! [ -h "${path}" ]; then |  | ||||||
|                             rm -f "${path}" |  | ||||||
|                         fi |  | ||||||
|                         mkdir -p "$(dirname '${path}')" |  | ||||||
|                         chmod 0755 "$(dirname '${path}')" |  | ||||||
|                         ${pkgs.openssh}/bin/ssh-keygen \ |  | ||||||
|                           -t "${hostKey.type}" \ |  | ||||||
|                           ${lib.optionalString (hostKey ? bits) "-b ${toString hostKey.bits}"} \ |  | ||||||
|                           ${lib.optionalString (hostKey ? rounds) "-a ${toString hostKey.rounds}"} \ |  | ||||||
|                           ${lib.optionalString (hostKey ? comment) "-C '${hostKey.comment}'"} \ |  | ||||||
|                           ${lib.optionalString (hostKey ? openSSHFormat && hostKey.openSSHFormat) "-o"} \ |  | ||||||
|                           -f "${path}" \ |  | ||||||
|                           -N "" |  | ||||||
|                         chown ${config.home.username} ${path}* |  | ||||||
|                         chgrp ${config.home.username} ${path}* |  | ||||||
|                     fi |  | ||||||
|                   '' |  | ||||||
|                 }"; |  | ||||||
|               }; |  | ||||||
|             }) |  | ||||||
|           config.programs.openssh.hostKeys |  | ||||||
|         ); |  | ||||||
|       } |  | ||||||
|     ) |  | ||||||
|     (lib.mkIf osConfig.host.impermanence.enable { |  | ||||||
|       home.persistence."/persist${config.home.homeDirectory}" = { |  | ||||||
|         files = lib.lists.flatten ( |  | ||||||
|           builtins.map (hostKey: [".ssh/${hostKey.path}" ".ssh/${hostKey.path}.pub"]) config.programs.openssh.hostKeys |  | ||||||
|         ); |  | ||||||
|       }; |  | ||||||
|     }) |  | ||||||
|   ]; |  | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										17
									
								
								modules/home-manager-modules/user.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								modules/home-manager-modules/user.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | ||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   osConfig, | ||||||
|  |   ... | ||||||
|  | }: { | ||||||
|  |   options.user = { | ||||||
|  |     isDesktopUser = lib.mkOption { | ||||||
|  |       type = lib.types.bool; | ||||||
|  |       default = osConfig.host.users.${config.home.username}.isDesktopUser; | ||||||
|  |     }; | ||||||
|  |     isTerminalUser = lib.mkOption { | ||||||
|  |       type = lib.types.bool; | ||||||
|  |       default = osConfig.host.users.${config.home.username}.isTerminalUser; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue