Compare commits
	
		
			13 commits
		
	
	
		
			87c59890d5
			...
			d32bad92f0
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| d32bad92f0 | |||
| 431b490e35 | |||
| 508336b1ed | |||
| 23b7c235f9 | |||
| dc24590058 | |||
| 3d65e68aaf | |||
| 934f6a4f0d | |||
| d6b0351bf7 | |||
| b109eda2d0 | |||
|  | 757189c8cb | ||
| 88f8687b36 | |||
| afda908416 | |||
| 3e6f386f7f | 
							
								
								
									
										2
									
								
								.github/CODEOWNERS
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,2 @@ | |||
| # Me, myself and I! | ||||
| * @jokiller230 | ||||
							
								
								
									
										
											BIN
										
									
								
								.github/assets/anything-but-windows.gif
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.8 KiB | 
							
								
								
									
										
											BIN
										
									
								
								.github/assets/code-with-zed.webp
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 1.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								.github/assets/i-love-reproducing-nix-btw.gif
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 44 KiB | 
							
								
								
									
										
											BIN
										
									
								
								.github/assets/powered-by-nixos.gif
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 3.4 KiB | 
| Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 128 KiB | 
							
								
								
									
										20
									
								
								.github/workflows/deadnix.yml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,20 @@ | |||
| name: "Nix: check for unused code" | ||||
| 
 | ||||
| on: | ||||
|   pull_request: | ||||
|   push: | ||||
|     paths: | ||||
|       - "**.nix" | ||||
|       - ".github/workflows/deadnix.yml" | ||||
| 
 | ||||
| jobs: | ||||
|   deadnix: | ||||
|     name: Run deadnix | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|       - uses: cachix/install-nix-action@v25 | ||||
|       - uses: cachix/cachix-action@v14 | ||||
|         with: | ||||
|           name: deadnix | ||||
|       - uses: phucleeuwu/deadnix-action@v1 | ||||
							
								
								
									
										30
									
								
								.github/workflows/validate.yml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,30 @@ | |||
| name: "Nix: validate flake" | ||||
| 
 | ||||
| on: | ||||
|   workflow_dispatch: | ||||
|   push: | ||||
|     paths: | ||||
|       - "**.nix" | ||||
|       - "**.lock" | ||||
|       - ".github/workflows/**.yml" | ||||
| 
 | ||||
| jobs: | ||||
|   check-flake: | ||||
|     name: Validate x86_64-linux | ||||
|     runs-on: ubuntu-latest | ||||
| 
 | ||||
|     steps: | ||||
|       - name: Checkout | ||||
|         uses: actions/checkout@v4 | ||||
|         with: | ||||
|           ref: ${{ github.ref_name }} | ||||
|           persist-credentials: false | ||||
| 
 | ||||
|       - name: Install Nix | ||||
|         uses: DeterminateSystems/nix-installer-action@main | ||||
|         with: | ||||
|           extra-conf: | | ||||
|             experimental-features = flakes nix-command recursive-nix pipe-operator | ||||
| 
 | ||||
|       - name: Validate Flake | ||||
|         run: nix flake check | ||||
							
								
								
									
										40
									
								
								README.md
									
										
									
									
									
								
							
							
						
						|  | @ -1,9 +1,16 @@ | |||
| <br> | ||||
| <div align="center"><img src="assets/puzzlevision.png" width="120px" height="auto"></div> | ||||
| <div align="center"><img src=".github/assets/puzzlevision.png" width="120px" height="auto"></div> | ||||
| 
 | ||||
| <h1 align="center">✨ Puzzlevision ✨<br></h1> | ||||
| <div align="center">Non-stop entertainment! The wackiest NixOS configuration to-date.</div> | ||||
| <br> | ||||
| <div align="center"> | ||||
|     <img src=".github/assets/powered-by-nixos.gif" width="88px" height="31px"> | ||||
|     <img src=".github/assets/i-love-reproducing-nix-btw.gif" width="88px" height="31px"> | ||||
|     <img src=".github/assets/anything-but-windows.gif" width="88px" height="31px"> | ||||
|     <img src=".github/assets/code-with-zed.webp" width="88px" height="31px"> | ||||
| </div> | ||||
| <br> | ||||
| 
 | ||||
| ## 🚧 State of development | ||||
| All the basic functionality of v2 should be working correctly, including: | ||||
|  | @ -14,9 +21,13 @@ All the basic functionality of v2 should be working correctly, including: | |||
| - Creating users in your systems through ${self.namespace}.users, | ||||
| automatically maps home-manager configurations from the `homes` directory to their corresponding users. | ||||
| 
 | ||||
| Nonetheless, one should still consider this implementation experimental, | ||||
| once I start using this on my laptop, | ||||
| I'll aim for production grade stability. | ||||
| Since I am actively using this configuration on my main workstation, things are evolving quickly, | ||||
| leftover issues are actively being resolved and the list of modules is ever-growing. | ||||
| Nonetheless, one should still consider this implementation experimental. | ||||
| 
 | ||||
| My next goal is to setup an attic binary cache, | ||||
| with a build/release workflow that runs in regular intervals. | ||||
| (similar to isabelroses's workflow setup) | ||||
| 
 | ||||
| ## 🚀 Deployment | ||||
| To deploy a system run the following command in your terminal of choice. | ||||
|  | @ -66,6 +77,27 @@ Lastly, when adding new systems, make sure to update any required secret files w | |||
| nix-shell -p sops --run "sops updatekeys secrets/example.yaml" | ||||
| ``` | ||||
| 
 | ||||
| ## 👷 CI/CD coverage | ||||
| Currently, this repository houses 2 workflows, which are executed when pushing to the v2 branch. | ||||
| 
 | ||||
| #### ↪️ `Nix: check for unused code` | ||||
| This workflow can be found in `.github/workflows/deadnix.yml`, | ||||
| and should be pretty self-explanatory. | ||||
| 
 | ||||
| Here's what it does: | ||||
| 1. Checks out current branch | ||||
| 2. Finds any unused variables/imports etc... | ||||
| 3. Creates a new commit, instantly removing any unused code | ||||
| 
 | ||||
| #### ↪️ `Nix: validate flake` | ||||
| This workflow can be found in `.github/workflows/validate.yml`. | ||||
| It simply validates a flake using `nix flake check`. | ||||
| 
 | ||||
| To be specific, it does the following: | ||||
| 1. Checks out current branch | ||||
| 2. Installs nix with some experimental features (flakes, nix-command, recursive-nix, pipe-operator) | ||||
| 3. Runs `nix flake check` on the codebase | ||||
| 
 | ||||
| ## 📝 Goals and improvements | ||||
| The main goals of this rewritten flake are: | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										168
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						|  | @ -7,11 +7,11 @@ | |||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1746650299, | ||||
|         "narHash": "sha256-4+pxk1KcSH8ww3tgN808nNJ3E7Q8gNWI+U0sesW7mBQ=", | ||||
|         "lastModified": 1747519437, | ||||
|         "narHash": "sha256-uv9Wv59d+mckS2CkorOF484wp2G5TNGijdoBZ5RkAk0=", | ||||
|         "owner": "catppuccin", | ||||
|         "repo": "nix", | ||||
|         "rev": "f746600f15b69df05c84e3037749a3be5b1276d1", | ||||
|         "rev": "3ba714046ee32373e88166e6e9474d6ae6a5b734", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -22,11 +22,11 @@ | |||
|     }, | ||||
|     "easy-hosts": { | ||||
|       "locked": { | ||||
|         "lastModified": 1743693165, | ||||
|         "narHash": "sha256-BAYno/4P0hq3aaqfVLbDmv8pgvzJWcN+4L8jK8SzaMo=", | ||||
|         "lastModified": 1747174689, | ||||
|         "narHash": "sha256-WEA2HdjC90GLf5VpMLpvOF3/uSSq6AV4DQ4ezLFspc0=", | ||||
|         "owner": "tgirlcloud", | ||||
|         "repo": "easy-hosts", | ||||
|         "rev": "611cc21942feb55c6a38410dfe8eee3fb5f08c8d", | ||||
|         "rev": "e1210563fc527221e12544ce55cd954acf94e7ed", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -35,6 +35,20 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "flake-compat": { | ||||
|       "locked": { | ||||
|         "lastModified": 1733328505, | ||||
|         "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=", | ||||
|         "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", | ||||
|         "revCount": 69, | ||||
|         "type": "tarball", | ||||
|         "url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.1.0/01948eb7-9cba-704f-bbf3-3fa956735b52/source.tar.gz" | ||||
|       }, | ||||
|       "original": { | ||||
|         "type": "tarball", | ||||
|         "url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz" | ||||
|       } | ||||
|     }, | ||||
|     "flake-parts": { | ||||
|       "inputs": { | ||||
|         "nixpkgs-lib": [ | ||||
|  | @ -62,11 +76,11 @@ | |||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1746727295, | ||||
|         "narHash": "sha256-0364XVBdfEA8rWfqEPvsgBqGFfq5r9LAo9CS9tvT7tg=", | ||||
|         "lastModified": 1747955385, | ||||
|         "narHash": "sha256-AKoBFaEGN02tGvBlkwVIDOGXouHvrTTfOUcvBDGxkxQ=", | ||||
|         "owner": "nix-community", | ||||
|         "repo": "home-manager", | ||||
|         "rev": "a51598236f23c89e59ee77eb8e0614358b0e896c", | ||||
|         "rev": "a868570581f0dbdef7e33c8c9bb34b735dfcbacf", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -75,13 +89,71 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "home-manager_2": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|           "youtube-music", | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1747439237, | ||||
|         "narHash": "sha256-5rCGrnkglKKj4cav1U3HC+SIUNJh08pqOK4spQv9RjA=", | ||||
|         "owner": "nix-community", | ||||
|         "repo": "home-manager", | ||||
|         "rev": "ae755329092c87369b9e9a1510a8cf1ce2b1c708", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "nix-community", | ||||
|         "repo": "home-manager", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixcord": { | ||||
|       "inputs": { | ||||
|         "flake-compat": "flake-compat", | ||||
|         "nixpkgs": "nixpkgs", | ||||
|         "systems": "systems", | ||||
|         "treefmt-nix": "treefmt-nix" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1747878048, | ||||
|         "narHash": "sha256-kAR4Ox+vShPzsUar/1rHarRgUBPpm7hxwi7sIffNYa4=", | ||||
|         "owner": "kaylorben", | ||||
|         "repo": "nixcord", | ||||
|         "rev": "5f737debf65b8409392604098a7489d997746450", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "kaylorben", | ||||
|         "repo": "nixcord", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1746461020, | ||||
|         "narHash": "sha256-7+pG1I9jvxNlmln4YgnlW4o+w0TZX24k688mibiFDUE=", | ||||
|         "lastModified": 1744868846, | ||||
|         "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "3730d8a308f94996a9ba7c7138ede69c1b9ac4ae", | ||||
|         "rev": "ebe4301cbd8f81c4f8d3244b3632338bbeb6d49c", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "NixOS", | ||||
|         "ref": "nixpkgs-unstable", | ||||
|         "repo": "nixpkgs", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs_2": { | ||||
|       "locked": { | ||||
|         "lastModified": 1747744144, | ||||
|         "narHash": "sha256-W7lqHp0qZiENCDwUZ5EX/lNhxjMdNapFnbErcbnP11Q=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "2795c506fe8fb7b03c36ccb51f75b6df0ab2553f", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -91,7 +163,7 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs_2": { | ||||
|     "nixpkgs_3": { | ||||
|       "locked": { | ||||
|         "lastModified": 1744868846, | ||||
|         "narHash": "sha256-5RJTdUHDmj12Qsv7XOhuospjAjATNiTMElplWnJE9Hs=", | ||||
|  | @ -113,20 +185,22 @@ | |||
|         "easy-hosts": "easy-hosts", | ||||
|         "flake-parts": "flake-parts", | ||||
|         "home-manager": "home-manager", | ||||
|         "nixpkgs": "nixpkgs", | ||||
|         "sops-nix": "sops-nix" | ||||
|         "nixcord": "nixcord", | ||||
|         "nixpkgs": "nixpkgs_2", | ||||
|         "sops-nix": "sops-nix", | ||||
|         "youtube-music": "youtube-music" | ||||
|       } | ||||
|     }, | ||||
|     "sops-nix": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": "nixpkgs_2" | ||||
|         "nixpkgs": "nixpkgs_3" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1746485181, | ||||
|         "narHash": "sha256-PxrrSFLaC7YuItShxmYbMgSuFFuwxBB+qsl9BZUnRvg=", | ||||
|         "lastModified": 1747603214, | ||||
|         "narHash": "sha256-lAblXm0VwifYCJ/ILPXJwlz0qNY07DDYdLD+9H+Wc8o=", | ||||
|         "owner": "Mic92", | ||||
|         "repo": "sops-nix", | ||||
|         "rev": "e93ee1d900ad264d65e9701a5c6f895683433386", | ||||
|         "rev": "8d215e1c981be3aa37e47aeabd4e61bb069548fd", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|  | @ -134,6 +208,62 @@ | |||
|         "repo": "sops-nix", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "systems": { | ||||
|       "locked": { | ||||
|         "lastModified": 1681028828, | ||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "id": "systems", | ||||
|         "type": "indirect" | ||||
|       } | ||||
|     }, | ||||
|     "treefmt-nix": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|           "nixcord", | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1744961264, | ||||
|         "narHash": "sha256-aRmUh0AMwcbdjJHnytg1e5h5ECcaWtIFQa6d9gI85AI=", | ||||
|         "owner": "numtide", | ||||
|         "repo": "treefmt-nix", | ||||
|         "rev": "8d404a69efe76146368885110f29a2ca3700bee6", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "numtide", | ||||
|         "repo": "treefmt-nix", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "youtube-music": { | ||||
|       "inputs": { | ||||
|         "home-manager": "home-manager_2", | ||||
|         "nixpkgs": [ | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1747498370, | ||||
|         "narHash": "sha256-mJ7fLdL/A4cWHMm0n3/dcQ72Ijm+uTu/snl8iqgtbtc=", | ||||
|         "owner": "h-banii", | ||||
|         "repo": "youtube-music-nix", | ||||
|         "rev": "410071c47bb39a5abb672cd5c1a59bc5f853d908", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "h-banii", | ||||
|         "repo": "youtube-music-nix", | ||||
|         "type": "github" | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "root": "root", | ||||
|  |  | |||
|  | @ -35,6 +35,15 @@ | |||
|       url = "github:catppuccin/nix"; | ||||
|       inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     }; | ||||
| 
 | ||||
|     nixcord = { | ||||
|       url = "github:kaylorben/nixcord"; | ||||
|     }; | ||||
| 
 | ||||
|     youtube-music = { | ||||
|       url = "github:h-banii/youtube-music-nix"; | ||||
|       inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   outputs = {flake-parts, ...} @ inputs: | ||||
|  |  | |||
							
								
								
									
										53
									
								
								homes/x86_64-linux/jo/apps/discord/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,53 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib) mkIf; | ||||
| in { | ||||
|   # Enable arRPC for discord Rich Presence stuffs | ||||
|   services.arrpc.enable = true; | ||||
| 
 | ||||
|   programs.nixcord = { | ||||
|     enable = true; | ||||
|     vesktop.enable = true; | ||||
|     discord.enable = false; | ||||
| 
 | ||||
|     config = { | ||||
|       useQuickCss = true; | ||||
|       themeLinks = [ | ||||
|         (mkIf config.catppuccin.enable "https://catppuccin.github.io/discord/dist/catppuccin-${config.catppuccin.flavor}-${config.catppuccin.accent}.theme.css") | ||||
|       ]; | ||||
| 
 | ||||
|       frameless = true; | ||||
|       plugins = { | ||||
|         betterFolders = { | ||||
|           enable = true; | ||||
|           closeAllFolders = true; | ||||
|           closeAllHomeButton = true; | ||||
|           closeOthers = true; | ||||
|         }; | ||||
| 
 | ||||
|         fakeNitro = { | ||||
|           enable = true; | ||||
|           enableStickerBypass = false; | ||||
|           enableEmojiBypass = false; | ||||
|         }; | ||||
| 
 | ||||
|         betterSettings.enable = true; | ||||
|         betterUploadButton.enable = true; | ||||
|         blurNSFW.enable = true; | ||||
|         clearURLs.enable = true; | ||||
|         callTimer.enable = true; | ||||
|         consoleJanitor.enable = true; | ||||
|         copyEmojiMarkdown.enable = true; | ||||
|         userMessagesPronouns.enable = true; | ||||
|         reviewDB.enable = true; | ||||
| 
 | ||||
|         # Vesktop exclusive | ||||
|         webRichPresence.enable = true; | ||||
|         webScreenShareFixes.enable = true; | ||||
|       }; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -0,0 +1,6 @@ | |||
| /* frappe */ | ||||
| @import url("https://youtubemusic.catppuccin.com/src/frappe.css"); | ||||
| 
 | ||||
| html:not(.style-scope) { | ||||
|     --ctp-accent: var(--ctp-blue) !important; | ||||
| } | ||||
|  | @ -0,0 +1,6 @@ | |||
| /* latte */ | ||||
| @import url("https://youtubemusic.catppuccin.com/src/latte.css"); | ||||
| 
 | ||||
| html:not(.style-scope) { | ||||
|     --ctp-accent: var(--ctp-blue) !important; | ||||
| } | ||||
|  | @ -0,0 +1,6 @@ | |||
| /* macchiato */ | ||||
| @import url("https://youtubemusic.catppuccin.com/src/macchiato.css"); | ||||
| 
 | ||||
| html:not(.style-scope) { | ||||
|     --ctp-accent: var(--ctp-blue) !important; | ||||
| } | ||||
|  | @ -0,0 +1,6 @@ | |||
| /* mocha */ | ||||
| @import url("https://youtubemusic.catppuccin.com/src/mocha.css"); | ||||
| 
 | ||||
| html:not(.style-scope) { | ||||
|     --ctp-accent: var(--ctp-blue) !important; | ||||
| } | ||||
							
								
								
									
										29
									
								
								homes/x86_64-linux/jo/apps/youtube-music/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,29 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   osConfig, | ||||
|   namespace, | ||||
|   ... | ||||
| }: let | ||||
|   inherit (lib) mkIf; | ||||
| in { | ||||
|   programs.youtube-music = { | ||||
|     enable = true; | ||||
|     options = { | ||||
|       tray = true; | ||||
|       trayClickPlayPause = true; | ||||
|       resumeOnStart = false; | ||||
| 
 | ||||
|       themes = [ | ||||
|         (mkIf config.catppuccin.enable ./catppuccin-${config.catppuccin.flavor}.css) | ||||
|       ]; | ||||
| 
 | ||||
|       language = osConfig.${namespace}.system.locale.keymap; | ||||
|       autoUpdates = false; | ||||
|     }; | ||||
| 
 | ||||
|     plugins = { | ||||
|       discord.enabled = true; | ||||
|     }; | ||||
|   }; | ||||
| } | ||||
|  | @ -3,8 +3,14 @@ | |||
|   config, | ||||
|   ... | ||||
| }: { | ||||
|   imports = [ | ||||
|     ./apps/discord | ||||
|     ./apps/youtube-music | ||||
|   ]; | ||||
| 
 | ||||
|   puzzlevision = { | ||||
|     themes.catppuccin.enable = true; | ||||
|     apps.zed.enable = true; | ||||
|   }; | ||||
| 
 | ||||
|   sops.secrets.wakatime-cfg = { | ||||
|  | @ -15,8 +21,6 @@ | |||
| 
 | ||||
|   home.packages = with pkgs; [ | ||||
|     ## GENERAL | ||||
|     youtube-music | ||||
|     discord | ||||
|     ghostty | ||||
|     teams-for-linux | ||||
|     enpass | ||||
|  | @ -26,8 +30,6 @@ | |||
|     ungoogled-chromium | ||||
| 
 | ||||
|     ## EDITORS | ||||
|     nano | ||||
|     zed-editor | ||||
|     apostrophe | ||||
|     jetbrains.phpstorm | ||||
|     arduino-ide | ||||
|  |  | |||
|  | @ -1,18 +1,18 @@ | |||
| { | ||||
| 	"data": "ENC[AES256_GCM,data:NaNu0ytz8Ji7WJ4gDinY2Tsny+MzgG9vV/7xnZY/dQzB0jMHBxIRAcrzH1A+aqsANeeZPD0XGXC2qIpYUlMKBcfMxkqmlj7XnpvDiXQ9RciCNp8l1xs0wvoxjYghbD8nsL57UQ==,iv:qa1SPnWCShIiz7l4EW6tCT2gJO0qNNcDk05F5hS8H7U=,tag:zArwz8R3/uegsO1ShLjfwg==,type:str]", | ||||
| 	"data": "ENC[AES256_GCM,data:UAADE/aH98MYyfxL3ZkZ06lHHTRmmRVuOhiqEyF6DP35sGTC7Mpqe++MTYBDFrD4Rraeao9T2tcu3sL22p9SW9jF7Y2L1YZ9zKKUyP2y+G8PN25GqXWaNwJQG/hxcKs8km448g==,iv:SkyBC+VkwccprAomhXUzdmSQuBDfFn22MKJwjV9ZSzo=,tag:m/uUcl9r3GW3QYCajoAhYw==,type:str]", | ||||
| 	"sops": { | ||||
| 		"age": [ | ||||
| 			{ | ||||
| 				"recipient": "age1qcjcwh9tq8pzf2yr7m3hm2n3n3y5rlc30fpkr0eytju9w57ucgcsgcy79d", | ||||
| 				"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBJS0EySk4wMGVzaUtOZWlN\nUE15SXNVOUtqUDQxV29tNGpBRkdLek5icWg0Cnd5b1FmT3VQTTBDdEtCYzQxNVdk\nWVpQMFpmTXpOcFFlMG5MQjFLTXZRUGsKLS0tIHBvakR1Q0dYdkRqVTJtLzRORzBP\nNU55UEtWUXhBdGN0M0lMQktaVmhSK00KA93LFut6jiYtlndm9Oq0ferFPT4IlBQ1\nDmnD4hWz7NLimWED7RiJ2lSO9IRgQBhLHeiLums/ZPxjFGnnO6sicg==\n-----END AGE ENCRYPTED FILE-----\n" | ||||
| 				"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA5VmtTRHo4NWVuU2tiZTc5\nWUVyeU54ZmtZbi9uUWNablIxSm9aZ3hadjBnCmNiVlBXS2lEbE00VFl6QVRlQk92\nMFI0TVBMVDZiQXg3VzZTaVNEd2RROTQKLS0tIEg3aGwvWXgvVldGTjZFaS95dEVP\nUmZHaGFaNndDRWY5cXBJeGY4TVVqbTgKeFTClhSmX5IQ5+7DXk4HEwTAv4uB/HCl\nVeoKUNaTHme60hWE/J12B2PvxtRa+f6diDMFg11mQkPOZwyEcQWMpg==\n-----END AGE ENCRYPTED FILE-----\n" | ||||
| 			}, | ||||
| 			{ | ||||
| 				"recipient": "age1ajkq0lalyc75tjhdtpx2yshw5y3wt85fwjy24luf69rvpavg33vqw6c3tc", | ||||
| 				"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBSTHh4eExqN1lmUWhOd0tF\ndzVUYXpWblVlem5QcndUQVRRSnZsS0dNK3lVCnpJQUVyRDRiNTFyb3RnSFZnQW9D\nV2sxRlZDcE1yQjI5Yzk3Tmh2ZkdxZ00KLS0tIGlKYUVnZXZtYTJPNEhEVEVhVlI4\na1hGbjJ3VDE0WDZKd0FGYUZzZUp5SEkKp043TYYglP+SWD7IdK/rnSJ4jfqvpGSY\njIDWMZmFTIcPoeVSQrxi7PD9Cd4Q56lhPhCYZR4czk5EdeIEWS9Z6w==\n-----END AGE ENCRYPTED FILE-----\n" | ||||
| 				"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnK1NtOE9tZ0poRjdkOTBi\nbWFQbGovY1VvRDN4clJmRGdTSHlzQk5JSmtrCitSc3hnb21CMVVuclZ2YndIOWRk\naDduM3VadDBaWFRDRElZSWlUaXdUZGMKLS0tIEJOUEFoS3ZJQWtkNGFQNk1CdGxI\nSmRFQ25TSXY1S0FHQmhUbWNsT1Z2c2sKBTV2WEW+HynmrrPza8gsIQAK2V3HhYfJ\nrG6rjnzMONd+0Q6Z0KBqgoMfCTjWE9CBnm78DL16u9pRH3CwhpKabg==\n-----END AGE ENCRYPTED FILE-----\n" | ||||
| 			} | ||||
| 		], | ||||
| 		"lastmodified": "2025-05-21T22:54:54Z", | ||||
| 		"mac": "ENC[AES256_GCM,data:vYmgUvgyQ1i+gih/6YMWX1vqkWzcAn8zgNspICF6KxTYE08i61LGJSaM2R5rh2r/xWY9zKYv8EKH2GSVyJ+hGgSsS0qY8BOKetKMHZEWuWtWSbjO/iKPlmqZXxmPPiPlYUXjlfXB1rzi7RXwDzwVpD1nQTuiK8t2rYJjGgH0kRM=,iv:EEepXDQ/1zy1sO8eXl5LXTHI5OUPFca6WwuYTkHuyEs=,tag:MHA262l7qa8Ngy0tuggPpw==,type:str]", | ||||
| 		"lastmodified": "2025-05-22T18:30:26Z", | ||||
| 		"mac": "ENC[AES256_GCM,data:/aZOXw2xgQ8UZG5TIWXwHZjlofa08WM2XpPhXUbf2qrx0yyhEyZrtibalCIDdUGgzaZjt8b+qrZqgNE9o+HCUNVX9fU9yCXRL1kpksz9e6HV4S+KIrdHnEFtuRt7r8nP29BotLYoP9KKbA57lL5SYJgPINHq11CAiQLU6A8W8YI=,iv:0zvQe2wRd/qKjrqinc9kgP8RSl47xxD0LofREiK8XOc=,tag:eWhtD/X3CPHTlEZPgp0cjA==,type:str]", | ||||
| 		"unencrypted_suffix": "_unencrypted", | ||||
| 		"version": "3.10.2" | ||||
| 	} | ||||
|  |  | |||
|  | @ -40,6 +40,16 @@ in { | |||
|           copilot = false; | ||||
|         }; | ||||
| 
 | ||||
|         formatter = { | ||||
|           external = { | ||||
|             command = "alejandra"; | ||||
|             arguments = ["--quiet"]; | ||||
|             language = ["nix"]; | ||||
|           }; | ||||
|         }; | ||||
| 
 | ||||
|         format_on_save = "on"; | ||||
| 
 | ||||
|         ### Language specific configurations | ||||
|         languages = { | ||||
|           ### Nix language | ||||
|  | @ -47,17 +57,6 @@ in { | |||
|             language_servers = ["nixd" "!nil"]; | ||||
|           }; | ||||
|         }; | ||||
| 
 | ||||
|         ### LSP configurations | ||||
|         lsp = { | ||||
|           nixd = { | ||||
|             initialization_options = { | ||||
|               formatting = { | ||||
|                 command = ["alejandra" "--quiet" "--"]; | ||||
|               }; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|       extraPackages = with pkgs; [nixd]; | ||||
|  | @ -44,7 +44,7 @@ in { | |||
|         enable-blur = mkOpt bool false "Whether to enable blur-my-shell application blur."; | ||||
|       }; | ||||
|     }; | ||||
|     wallpaper = mkOpt str (builtins.toString ../wallpapers/catppuccin/mountain_tower_sunset.jpg) "Specify the path of your prefered Gnome wallpaper."; | ||||
|     wallpaper = mkOpt str (builtins.toString ../wallpapers/catppuccin/howard-chen-mao-mao-forest-campsite.jpg) "Specify the path of your prefered Gnome wallpaper."; | ||||
|   }; | ||||
| 
 | ||||
|   config = mkIf osConfig.${namespace}.desktop.gnome.enable { | ||||
|  |  | |||
| After Width: | Height: | Size: 702 KiB | 
|  | @ -1,6 +1,7 @@ | |||
| { | ||||
|   lib, | ||||
|   self, | ||||
|   pkgs, | ||||
|   config, | ||||
|   ... | ||||
| }: let | ||||
|  | @ -33,6 +34,7 @@ in { | |||
|         nix = { | ||||
|           enable = true; | ||||
|           use-lix = true; | ||||
|           use-nixld =  true; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|  | @ -43,6 +45,10 @@ in { | |||
|       desktop.gnome.enable = true; | ||||
|     }; | ||||
| 
 | ||||
|     environment.systemPackages = with pkgs; [ | ||||
|       nano | ||||
|     ]; | ||||
| 
 | ||||
|     time.timeZone = mkDefault "Europe/Berlin"; | ||||
|   }; | ||||
| } | ||||
|  |  | |||
|  | @ -29,6 +29,7 @@ in { | |||
|       gnome-console | ||||
|       gnome-terminal | ||||
|       gnome-music | ||||
|       totem # Gnome videos | ||||
|       hitori # Sudoku game | ||||
|       gnome-contacts | ||||
|       gnome-initial-setup | ||||
|  | @ -39,7 +40,8 @@ in { | |||
|     services.gnome.gnome-keyring.enable = true; | ||||
| 
 | ||||
|     environment.systemPackages = with pkgs; [ | ||||
|       gnome-tweaks | ||||
|       refine | ||||
|       showtime | ||||
|       resources | ||||
|     ]; | ||||
|   }; | ||||
|  |  | |||
|  | @ -14,7 +14,22 @@ in { | |||
|     enable = mkEnableOption "system font management"; | ||||
|     fonts = mkOption { | ||||
|       type = listOf package; | ||||
|       default = with pkgs; [noto-fonts noto-fonts-cjk-sans noto-fonts-cjk-serif noto-fonts-emoji nerd-fonts.bigblue-terminal nerd-fonts.zed-mono monocraft]; | ||||
|       default = with pkgs; [ | ||||
|         corefonts | ||||
| 
 | ||||
|         noto-fonts | ||||
|         noto-fonts-cjk-sans | ||||
|         noto-fonts-cjk-serif | ||||
| 
 | ||||
|         inter | ||||
| 
 | ||||
|         nerd-fonts.zed-mono | ||||
|         monocraft | ||||
| 
 | ||||
|         noto-fonts-emoji | ||||
|         material-icons | ||||
|         material-design-icons | ||||
|       ]; | ||||
|       example = [noto-fonts noto-fonts-emoji]; | ||||
|       description = "Install additional font packages"; | ||||
|     }; | ||||
|  |  | |||
|  | @ -22,6 +22,7 @@ | |||
|       initialPassword = self.lib.mkOpt (types.nullOr types.str) null "Plaintext insecure initial user password, only recommended for testing."; | ||||
|       password = self.lib.mkOpt (types.nullOr types.str) null "Plaintext insecure user password, only recommended for testing."; | ||||
|       hashedPasswordFile = self.lib.mkOpt (types.nullOr types.str) null "Secure, hashed user password stored in a separate file, recommended for production."; | ||||
|       hashedPassword = self.lib.mkOpt (types.nullOr types.str) null "Secure, hashed password, stored in plaintext, fine to use."; | ||||
|       extraGroups = self.lib.mkOpt (types.listOf types.str) [] "List of additional groups this user belongs to."; | ||||
|     }; | ||||
|   }; | ||||
|  | @ -49,7 +50,7 @@ in { | |||
|     users.users = lib.mapAttrs (username: userConfig: | ||||
|       mkIf userConfig.enable { | ||||
|         name = username; | ||||
|         inherit (userConfig) isNormalUser isSystemUser initialPassword hashedPasswordFile password extraGroups; | ||||
|         inherit (userConfig) isNormalUser isSystemUser initialPassword hashedPasswordFile hashedPassword password extraGroups; | ||||
|       }) | ||||
|     cfg; | ||||
| 
 | ||||
|  | @ -68,7 +69,13 @@ in { | |||
|             mkIf (userConfig.enable && homeConfigExists username) ( | ||||
|               {osConfig, ...}: { | ||||
|                 # Import user home configuration and general home modules | ||||
|                 imports = [(getHomeConfigPath username) inputs.sops-nix.homeManagerModules.sops inputs.catppuccin.homeModules.default] ++ homeModules; | ||||
|                 imports = [ | ||||
|                   (getHomeConfigPath username) | ||||
|                   inputs.sops-nix.homeManagerModules.sops | ||||
|                   inputs.catppuccin.homeModules.default | ||||
|                   inputs.nixcord.homeModules.nixcord | ||||
|                   inputs.youtube-music.homeManagerModules.default | ||||
|                 ] ++ homeModules; | ||||
| 
 | ||||
|                 home.stateVersion = lib.mkDefault osConfig.system.stateVersion; | ||||
|               } | ||||
|  |  | |||
|  | @ -1,8 +1,4 @@ | |||
| { | ||||
|   pkgs, | ||||
|   config, | ||||
|   ... | ||||
| }: { | ||||
| {pkgs, ...}: { | ||||
|   imports = [ | ||||
|     ./hardware.nix | ||||
|   ]; | ||||
|  | @ -12,15 +8,10 @@ | |||
|   sops.defaultSopsFile = ./secrets/users.yaml; | ||||
|   sops.age.keyFile = "/var/lib/sops-nix/key.txt"; | ||||
| 
 | ||||
|   # Todo: automate this import in users module! | ||||
|   # Require user password secrets for users | ||||
|   sops.secrets."users/jo/password_hash".neededForUsers = true; | ||||
| 
 | ||||
|   puzzlevision = { | ||||
|     users.jo = { | ||||
|       enable = true; | ||||
|       #password = "4868320069443"; | ||||
|       hashedPasswordFile = config.sops.secrets."users/jo/password_hash".path; # For testing only, replace with sops secret before production use | ||||
|       hashedPassword = "$6$mvK9bT756Aok54Vt$vBRnT66Vb3HL0Y5rEMJlHvKkvzVQ.KUciInTmW3FCBFT00IuFMpz3q9RhXPLTLMRPho65bTg9hMnFPb84I774."; | ||||
|       extraGroups = ["wheel"]; | ||||
|     }; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,7 +1,7 @@ | |||
| # Do not modify this file!  It was generated by ‘nixos-generate-config’ | ||||
| # and may be overwritten by future invocations.  Please make changes | ||||
| # to /etc/nixos/configuration.nix instead. | ||||
| { config, lib, pkgs, modulesPath, ... }: | ||||
| { config, lib, modulesPath, ... }: | ||||
| 
 | ||||
| { | ||||
|   imports = | ||||
|  |  | |||