mirror of
				https://github.com/nmasur/dotfiles
				synced 2025-11-04 00:03:16 +00:00 
			
		
		
		
	Compare commits
	
		
			43 Commits
		
	
	
		
			9b948f45ee
			...
			home-manag
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					df9cbc4fb3 | ||
| 
						 | 
					a4b5e05f8f | ||
| 
						 | 
					83f548e95f | ||
| 
						 | 
					c66ca460c0 | ||
| 
						 | 
					2b36140fbf | ||
| 
						 | 
					66207830ba | ||
| 
						 | 
					0f7c15bf36 | ||
| 
						 | 
					d31a083ed6 | ||
| 
						 | 
					148839b0ab | ||
| 
						 | 
					7714635fa0 | ||
| 
						 | 
					ca6c275cd8 | ||
| 
						 | 
					54a897abb6 | ||
| 
						 | 
					45eb33485d | ||
| 
						 | 
					cbdf17f618 | ||
| 
						 | 
					fdf231b46e | ||
| 
						 | 
					e9d611fc03 | ||
| 
						 | 
					f899a76f7f | ||
| 
						 | 
					aa93604a6a | ||
| 
						 | 
					6d8fb63d54 | ||
| 
						 | 
					1cb5827438 | ||
| 
						 | 
					fccee387b8 | ||
| 
						 | 
					6f22a3031b | ||
| 
						 | 
					185258ad8a | ||
| 
						 | 
					b69a9a2de7 | ||
| 
						 | 
					f16859893d | ||
| 
						 | 
					b668c991c8 | ||
| 
						 | 
					405b1ce60f | ||
| 
						 | 
					e6f5649999 | ||
| 
						 | 
					ef03bb112d | ||
| 
						 | 
					da172aaa66 | ||
| 
						 | 
					11625adbe8 | ||
| 
						 | 
					b691895e05 | ||
| 
						 | 
					66ef1fa38d | ||
| 
						 | 
					30cc02c2a7 | ||
| 
						 | 
					0d3e42be3f | ||
| 
						 | 
					61ab3e1b3f | ||
| 
						 | 
					bc604bc2ce | ||
| 
						 | 
					39f80ea79a | ||
| 
						 | 
					6ca944fe42 | ||
| 
						 | 
					28ffa10a59 | ||
| 
						 | 
					006554f545 | ||
| 
						 | 
					1b04f9a883 | ||
| 
						 | 
					00f23f4b9c | 
@@ -21,7 +21,7 @@
 | 
				
			|||||||
          exit 1
 | 
					          exit 1
 | 
				
			||||||
      fi
 | 
					      fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      ${pkgs.disko-packaged}/bin/disko \
 | 
					      ${pkgs.disko}/bin/disko \
 | 
				
			||||||
          --mode create \
 | 
					          --mode create \
 | 
				
			||||||
          --dry-run \
 | 
					          --dry-run \
 | 
				
			||||||
          --flake "path:$(pwd)#root" \
 | 
					          --flake "path:$(pwd)#root" \
 | 
				
			||||||
@@ -31,7 +31,7 @@
 | 
				
			|||||||
          "This will ERASE ALL DATA on the disk /dev/''${DISK}. Are you sure you want to continue?" \
 | 
					          "This will ERASE ALL DATA on the disk /dev/''${DISK}. Are you sure you want to continue?" \
 | 
				
			||||||
          --default=false
 | 
					          --default=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      ${pkgs.disko-packaged}/bin/disko \
 | 
					      ${pkgs.disko}/bin/disko \
 | 
				
			||||||
          --mode create \
 | 
					          --mode create \
 | 
				
			||||||
          --flake "path:$(pwd)#root" \
 | 
					          --flake "path:$(pwd)#root" \
 | 
				
			||||||
          --arg disk "/dev/''${DISK}"
 | 
					          --arg disk "/dev/''${DISK}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										233
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										233
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							@@ -67,11 +67,11 @@
 | 
				
			|||||||
    "cmp-nvim-lsp-src": {
 | 
					    "cmp-nvim-lsp-src": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1715931395,
 | 
					        "lastModified": 1733823748,
 | 
				
			||||||
        "narHash": "sha256-CT1+Z4XJBVsl/RqvJeGmyitD6x7So0ylXvvef5jh7I8=",
 | 
					        "narHash": "sha256-iaihXNCF5bB5MdeoosD/kc3QtpA/QaIDZVLiLIurBSM=",
 | 
				
			||||||
        "owner": "hrsh7th",
 | 
					        "owner": "hrsh7th",
 | 
				
			||||||
        "repo": "cmp-nvim-lsp",
 | 
					        "repo": "cmp-nvim-lsp",
 | 
				
			||||||
        "rev": "39e2eda76828d88b773cc27a3f61d2ad782c922d",
 | 
					        "rev": "99290b3ec1322070bcfb9e846450a46f6efa50f0",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -87,11 +87,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732603785,
 | 
					        "lastModified": 1737162735,
 | 
				
			||||||
        "narHash": "sha256-AEjWTJwOmSnVYsSJCojKgoguGfFfwel6z/6ud6UFMU8=",
 | 
					        "narHash": "sha256-5T+HkouTMGaRm0rh3kgD4Z1O7ONKfgjyoPQH5rSyreU=",
 | 
				
			||||||
        "owner": "lnl7",
 | 
					        "owner": "lnl7",
 | 
				
			||||||
        "repo": "nix-darwin",
 | 
					        "repo": "nix-darwin",
 | 
				
			||||||
        "rev": "6ab87b7c84d4ee873e937108c4ff80c015a40c7a",
 | 
					        "rev": "87131f51f8256952d1a306b5521cedc2dc61aa08",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -108,11 +108,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732919362,
 | 
					        "lastModified": 1737038063,
 | 
				
			||||||
        "narHash": "sha256-3SxlMD3nSI90+pHOF27SuLEt3+wew8xl+sUJaJMeHOI=",
 | 
					        "narHash": "sha256-rMEuiK69MDhjz1JgbaeQ9mBDXMJ2/P8vmOYRbFndXsk=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "disko",
 | 
					        "repo": "disko",
 | 
				
			||||||
        "rev": "b71e3faca99b40fb801f03fd950fbefbbba691a4",
 | 
					        "rev": "bf0abfde48f469c256f2b0f481c6281ff04a5db2",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -145,11 +145,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732928331,
 | 
					        "lastModified": 1737161595,
 | 
				
			||||||
        "narHash": "sha256-MNeVQdjQIURSxe+yJtnPpVKIaIB+TMn6Mjw8eYY1ZwE=",
 | 
					        "narHash": "sha256-Txp3uh0KdB3+Pe6xihU0JWWe0LK8iXTUnZ8bOcKu3w0=",
 | 
				
			||||||
        "owner": "bandithedoge",
 | 
					        "owner": "bandithedoge",
 | 
				
			||||||
        "repo": "nixpkgs-firefox-darwin",
 | 
					        "repo": "nixpkgs-firefox-darwin",
 | 
				
			||||||
        "rev": "7b091902ef4ad7d2fff4201b1b9471c1b4243f83",
 | 
					        "rev": "3224752c71a5245e90cfae360e0dc5de98e2b53c",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -178,11 +178,11 @@
 | 
				
			|||||||
    "flake-compat_2": {
 | 
					    "flake-compat_2": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1696426674,
 | 
					        "lastModified": 1733328505,
 | 
				
			||||||
        "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
 | 
					        "narHash": "sha256-NeCCThCEP3eCl2l/+27kNNK7QrwZB1IJCrXfrbv5oqU=",
 | 
				
			||||||
        "owner": "edolstra",
 | 
					        "owner": "edolstra",
 | 
				
			||||||
        "repo": "flake-compat",
 | 
					        "repo": "flake-compat",
 | 
				
			||||||
        "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
 | 
					        "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -191,6 +191,27 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "flake-parts": {
 | 
				
			||||||
 | 
					      "inputs": {
 | 
				
			||||||
 | 
					        "nixpkgs-lib": [
 | 
				
			||||||
 | 
					          "nur",
 | 
				
			||||||
 | 
					          "nixpkgs"
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "locked": {
 | 
				
			||||||
 | 
					        "lastModified": 1733312601,
 | 
				
			||||||
 | 
					        "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
 | 
				
			||||||
 | 
					        "owner": "hercules-ci",
 | 
				
			||||||
 | 
					        "repo": "flake-parts",
 | 
				
			||||||
 | 
					        "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "original": {
 | 
				
			||||||
 | 
					        "owner": "hercules-ci",
 | 
				
			||||||
 | 
					        "repo": "flake-parts",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "flake-utils": {
 | 
					    "flake-utils": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "systems": "systems"
 | 
					        "systems": "systems"
 | 
				
			||||||
@@ -247,32 +268,14 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "flake-utils_4": {
 | 
					 | 
				
			||||||
      "inputs": {
 | 
					 | 
				
			||||||
        "systems": "systems_4"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1726560853,
 | 
					 | 
				
			||||||
        "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "numtide",
 | 
					 | 
				
			||||||
        "repo": "flake-utils",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "gh-collaborators": {
 | 
					    "gh-collaborators": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1717117275,
 | 
					        "lastModified": 1736185279,
 | 
				
			||||||
        "narHash": "sha256-x3p2bHL6U8gWanXnTTJGgA9x4Ixy9AOZiBbfcfn5VVw=",
 | 
					        "narHash": "sha256-SGmP/8Fvf2rcYkwscMOFG01Y0VJGb/TXrNZtLacurxA=",
 | 
				
			||||||
        "owner": "katiem0",
 | 
					        "owner": "katiem0",
 | 
				
			||||||
        "repo": "gh-collaborators",
 | 
					        "repo": "gh-collaborators",
 | 
				
			||||||
        "rev": "4dfcd0b5c2e31f2d0fbfd4b83fdfae787a5e6ff8",
 | 
					        "rev": "bf412dde50605e48af86f291c2ac8714f2c1b228",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -304,11 +307,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732884235,
 | 
					        "lastModified": 1737120639,
 | 
				
			||||||
        "narHash": "sha256-r8j6R3nrvwbT1aUp4EPQ1KC7gm0pu9VcV1aNaB+XG6Q=",
 | 
					        "narHash": "sha256-p5e/45V41YD3tMELuiNIoVCa25/w4nhOTm0B9MtdHFI=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "home-manager",
 | 
					        "repo": "home-manager",
 | 
				
			||||||
        "rev": "819f682269f4e002884702b87e445c82840c68f2",
 | 
					        "rev": "a0046af169ce7b1da503974e1b22c48ef4d71887",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -327,11 +330,11 @@
 | 
				
			|||||||
        "rust-overlay": "rust-overlay"
 | 
					        "rust-overlay": "rust-overlay"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732929643,
 | 
					        "lastModified": 1737163288,
 | 
				
			||||||
        "narHash": "sha256-5+jR08C37hrwSZucav0pqarKHyn0Xma+F+HVy2p++C0=",
 | 
					        "narHash": "sha256-PROBXqOUzgqIG66S74P1nyg7MbNoQ01k3oF0IM7qpHY=",
 | 
				
			||||||
        "owner": "martinvonz",
 | 
					        "owner": "martinvonz",
 | 
				
			||||||
        "repo": "jj",
 | 
					        "repo": "jj",
 | 
				
			||||||
        "rev": "0ca6f00421f6f893e974e0f5349e126abd41a812",
 | 
					        "rev": "83d40d2c425fa2e050bdac8837b19e5beb3bef25",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -406,7 +409,7 @@
 | 
				
			|||||||
    "nextcloud-snappymail": {
 | 
					    "nextcloud-snappymail": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732938511,
 | 
					        "lastModified": 1737171597,
 | 
				
			||||||
        "narHash": "sha256-oCw6Brs85rINBHvz3UJXheyLVqvA3RgPXG03b30Fx7E=",
 | 
					        "narHash": "sha256-oCw6Brs85rINBHvz3UJXheyLVqvA3RgPXG03b30Fx7E=",
 | 
				
			||||||
        "type": "tarball",
 | 
					        "type": "tarball",
 | 
				
			||||||
        "url": "https://snappymail.eu/repository/nextcloud/snappymail-2.38.2-nextcloud.tar.gz"
 | 
					        "url": "https://snappymail.eu/repository/nextcloud/snappymail-2.38.2-nextcloud.tar.gz"
 | 
				
			||||||
@@ -439,11 +442,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixlib": {
 | 
					    "nixlib": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732410305,
 | 
					        "lastModified": 1736643958,
 | 
				
			||||||
        "narHash": "sha256-/hxIKRTBsdrnudJWDGaBN8wIjHovqVAVxXdi8ByVtck=",
 | 
					        "narHash": "sha256-tmpqTSWVRJVhpvfSN9KXBvKEXplrwKnSZNAoNPf/S/s=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "nixpkgs.lib",
 | 
					        "repo": "nixpkgs.lib",
 | 
				
			||||||
        "rev": "87b6978992e2eb605732fba842cad0a7e14b2047",
 | 
					        "rev": "1418bc28a52126761c02dd3d89b2d8ca0f521181",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -460,11 +463,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732496924,
 | 
					        "lastModified": 1737057290,
 | 
				
			||||||
        "narHash": "sha256-/MNhZLR0eh9z/d3l+ammq+F5XxHln0RHgO4Bhtjr0IM=",
 | 
					        "narHash": "sha256-3Pe0yKlCc7EOeq1X/aJVDH0CtNL+tIBm49vpepwL1MQ=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "nixos-generators",
 | 
					        "repo": "nixos-generators",
 | 
				
			||||||
        "rev": "098e8b6ff72c86944a8d54b64ddd7b7e6635830a",
 | 
					        "rev": "d002ce9b6e7eb467cd1c6bb9aef9c35d191b5453",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -475,11 +478,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs": {
 | 
					    "nixpkgs": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732521221,
 | 
					        "lastModified": 1737062831,
 | 
				
			||||||
        "narHash": "sha256-2ThgXBUXAE1oFsVATK1ZX9IjPcS4nKFOAjhPNKuiMn0=",
 | 
					        "narHash": "sha256-Tbk1MZbtV2s5aG+iM99U8FqwxU/YNArMcWAv6clcsBc=",
 | 
				
			||||||
        "owner": "nixos",
 | 
					        "owner": "nixos",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "4633a7c72337ea8fd23a4f2ba3972865e3ec685d",
 | 
					        "rev": "5df43628fdf08d642be8ba5b3625a6c70731c19c",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -507,11 +510,11 @@
 | 
				
			|||||||
    },
 | 
					    },
 | 
				
			||||||
    "nixpkgs-stable": {
 | 
					    "nixpkgs-stable": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732749044,
 | 
					        "lastModified": 1735563628,
 | 
				
			||||||
        "narHash": "sha256-T38FQOg0BV5M8FN1712fovzNakSOENEYs+CSkg31C9Y=",
 | 
					        "narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=",
 | 
				
			||||||
        "owner": "nixos",
 | 
					        "owner": "nixos",
 | 
				
			||||||
        "repo": "nixpkgs",
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
        "rev": "0c5b4ecbed5b155b705336aa96d878e55acd8685",
 | 
					        "rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -521,13 +524,34 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "nur": {
 | 
					    "nixpkgs_2": {
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732938183,
 | 
					        "lastModified": 1737062831,
 | 
				
			||||||
        "narHash": "sha256-Gs3fB2JCLFPR5IAXRrZ40fzBIkXclDgdOv/LQFcz1ag=",
 | 
					        "narHash": "sha256-Tbk1MZbtV2s5aG+iM99U8FqwxU/YNArMcWAv6clcsBc=",
 | 
				
			||||||
 | 
					        "owner": "nixos",
 | 
				
			||||||
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
 | 
					        "rev": "5df43628fdf08d642be8ba5b3625a6c70731c19c",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "original": {
 | 
				
			||||||
 | 
					        "owner": "nixos",
 | 
				
			||||||
 | 
					        "ref": "nixos-unstable",
 | 
				
			||||||
 | 
					        "repo": "nixpkgs",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "nur": {
 | 
				
			||||||
 | 
					      "inputs": {
 | 
				
			||||||
 | 
					        "flake-parts": "flake-parts",
 | 
				
			||||||
 | 
					        "nixpkgs": "nixpkgs_2",
 | 
				
			||||||
 | 
					        "treefmt-nix": "treefmt-nix"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "locked": {
 | 
				
			||||||
 | 
					        "lastModified": 1737170882,
 | 
				
			||||||
 | 
					        "narHash": "sha256-Km700i1Eg72bFsU2X2ZgH4qEgx6SrdZFJURJGTSQH2M=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "nur",
 | 
					        "repo": "nur",
 | 
				
			||||||
        "rev": "954f3b73ddae61755abe0e9bbc40ba6d68a6a22d",
 | 
					        "rev": "62cdd681201843553ec740a85ccf2f0a6fca75c6",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -539,11 +563,11 @@
 | 
				
			|||||||
    "nvim-lint-src": {
 | 
					    "nvim-lint-src": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732288955,
 | 
					        "lastModified": 1736154173,
 | 
				
			||||||
        "narHash": "sha256-oRVyd2UtmVafoc8TEov+1Hlln6/AFnVokoiENh45X74=",
 | 
					        "narHash": "sha256-OChCLXHAqa129NiGfmwddq0Hj5F9AtC3TmFbnNCZqfo=",
 | 
				
			||||||
        "owner": "mfussenegger",
 | 
					        "owner": "mfussenegger",
 | 
				
			||||||
        "repo": "nvim-lint",
 | 
					        "repo": "nvim-lint",
 | 
				
			||||||
        "rev": "6b46370d02cd001509a765591a3ffc481b538794",
 | 
					        "rev": "dfa45de973c3ce7bd1b9a6d346f896a68ad07e44",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -572,11 +596,11 @@
 | 
				
			|||||||
    "nvim-tree-lua-src": {
 | 
					    "nvim-tree-lua-src": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732428058,
 | 
					        "lastModified": 1737156486,
 | 
				
			||||||
        "narHash": "sha256-HHgC7aH2m3gv2FtOK1jhjBgJOGWrdc+FQOEpMiEWe74=",
 | 
					        "narHash": "sha256-b8YOOIYML9aKy4Y7S+iLKIaTfCqrxK1wB/ZaeFRCUmo=",
 | 
				
			||||||
        "owner": "kyazdani42",
 | 
					        "owner": "kyazdani42",
 | 
				
			||||||
        "repo": "nvim-tree.lua",
 | 
					        "repo": "nvim-tree.lua",
 | 
				
			||||||
        "rev": "ca7c4c33cac2ad66ec69d45e465379716ef0cc97",
 | 
					        "rev": "fca0b67c0b5a31727fb33addc4d9c100736a2894",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -708,11 +732,11 @@
 | 
				
			|||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732242723,
 | 
					        "lastModified": 1735784864,
 | 
				
			||||||
        "narHash": "sha256-NWI8csIK0ujFlFuEXKnoc+7hWoCiEtINK9r48LUUMeU=",
 | 
					        "narHash": "sha256-tIl5p3ueaPw7T5T1UXkLc8ISMk6Y8CI/D/rd0msf73I=",
 | 
				
			||||||
        "owner": "oxalica",
 | 
					        "owner": "oxalica",
 | 
				
			||||||
        "repo": "rust-overlay",
 | 
					        "repo": "rust-overlay",
 | 
				
			||||||
        "rev": "a229311fcb45b88a95fdfa5cecd8349c809a272a",
 | 
					        "rev": "04d5f1836721461b256ec452883362c5edc5288e",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -724,11 +748,11 @@
 | 
				
			|||||||
    "snipe-nvim-src": {
 | 
					    "snipe-nvim-src": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732490186,
 | 
					        "lastModified": 1736108869,
 | 
				
			||||||
        "narHash": "sha256-/4mkMXNZrVVExMfMUshXXEijXCkk2LapB/TPtTn7rv0=",
 | 
					        "narHash": "sha256-sJ71eiE0XmMJkhNCkbY82R4eHzBOOKFrPa+nxLc1f8s=",
 | 
				
			||||||
        "owner": "leath-dub",
 | 
					        "owner": "leath-dub",
 | 
				
			||||||
        "repo": "snipe.nvim",
 | 
					        "repo": "snipe.nvim",
 | 
				
			||||||
        "rev": "3d560dcac1cda409f5f6adf17b8003df3ab85eee",
 | 
					        "rev": "0d0a482ac713370196e4fc0025d5aaac5030104d",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -782,21 +806,6 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "systems_4": {
 | 
					 | 
				
			||||||
      "locked": {
 | 
					 | 
				
			||||||
        "lastModified": 1681028828,
 | 
					 | 
				
			||||||
        "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
 | 
					 | 
				
			||||||
        "owner": "nix-systems",
 | 
					 | 
				
			||||||
        "repo": "default",
 | 
					 | 
				
			||||||
        "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "original": {
 | 
					 | 
				
			||||||
        "owner": "nix-systems",
 | 
					 | 
				
			||||||
        "repo": "default",
 | 
					 | 
				
			||||||
        "type": "github"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "telescope-nvim-src": {
 | 
					    "telescope-nvim-src": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
@@ -817,11 +826,11 @@
 | 
				
			|||||||
    "telescope-project-nvim-src": {
 | 
					    "telescope-project-nvim-src": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732660843,
 | 
					        "lastModified": 1733083023,
 | 
				
			||||||
        "narHash": "sha256-H4IMj/eyhTZtt2+mFWokcIRFDOLCLpkJNNe61O3JpWU=",
 | 
					        "narHash": "sha256-qEORRWYKBpK7fn7se8g+5uuVBJNu0T4JHSc0C2QzNDY=",
 | 
				
			||||||
        "owner": "nvim-telescope",
 | 
					        "owner": "nvim-telescope",
 | 
				
			||||||
        "repo": "telescope-project.nvim",
 | 
					        "repo": "telescope-project.nvim",
 | 
				
			||||||
        "rev": "9fc8428e2ccae167c36ad7cff72798bbd8e35836",
 | 
					        "rev": "1d7920e799fc5001dffc7bd10909a86e0358eaf4",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -833,11 +842,11 @@
 | 
				
			|||||||
    "tiny-inline-diagnostic-nvim-src": {
 | 
					    "tiny-inline-diagnostic-nvim-src": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1732895718,
 | 
					        "lastModified": 1736959343,
 | 
				
			||||||
        "narHash": "sha256-bkH9dqui4acLef53QCLgzipCjsqAc5dlm7pmGuROEfw=",
 | 
					        "narHash": "sha256-11+Z54shcy5oRevfTOu3dt5DtXhnYaH9zvktH6Lvxjs=",
 | 
				
			||||||
        "owner": "rachartier",
 | 
					        "owner": "rachartier",
 | 
				
			||||||
        "repo": "tiny-inline-diagnostic.nvim",
 | 
					        "repo": "tiny-inline-diagnostic.nvim",
 | 
				
			||||||
        "rev": "cd8e56dd88709e05ecd0036ca2a821d265379bfa",
 | 
					        "rev": "aaa6f0dd097f8ca2478cad259e61b7cb26ec0eb8",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -916,11 +925,11 @@
 | 
				
			|||||||
    "tree-sitter-puppet": {
 | 
					    "tree-sitter-puppet": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1713617121,
 | 
					        "lastModified": 1734835631,
 | 
				
			||||||
        "narHash": "sha256-+zMgzyuGerJ8l+i5ZtWnmGr3i4fFiSLD5FssyKESsmI=",
 | 
					        "narHash": "sha256-bO5g5AdhzpB13yHklpAndUHIX7Rvd7OMjH0Ds2ATA6Q=",
 | 
				
			||||||
        "owner": "amaanq",
 | 
					        "owner": "amaanq",
 | 
				
			||||||
        "repo": "tree-sitter-puppet",
 | 
					        "repo": "tree-sitter-puppet",
 | 
				
			||||||
        "rev": "584522f32495d648b18a53ccb52d988e60de127d",
 | 
					        "rev": "15f192929b7d317f5914de2b4accd37b349182a6",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -932,11 +941,11 @@
 | 
				
			|||||||
    "tree-sitter-python": {
 | 
					    "tree-sitter-python": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1731308116,
 | 
					        "lastModified": 1736288149,
 | 
				
			||||||
        "narHash": "sha256-/jYGi2yksifMGPitlS8oM/g3YrR7RJ57imBhEyow/jc=",
 | 
					        "narHash": "sha256-IIAL2qteFPBCPmDK1N2EdDgpI4CwfMuuVL8t5tYueLU=",
 | 
				
			||||||
        "owner": "tree-sitter",
 | 
					        "owner": "tree-sitter",
 | 
				
			||||||
        "repo": "tree-sitter-python",
 | 
					        "repo": "tree-sitter-python",
 | 
				
			||||||
        "rev": "6d14e44ea217bc5bb1c1804180e9818d7d1b8d91",
 | 
					        "rev": "409b5d671eb0ea4972eeacaaca24bbec1acf79b1",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
@@ -978,6 +987,27 @@
 | 
				
			|||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "treefmt-nix": {
 | 
				
			||||||
 | 
					      "inputs": {
 | 
				
			||||||
 | 
					        "nixpkgs": [
 | 
				
			||||||
 | 
					          "nur",
 | 
				
			||||||
 | 
					          "nixpkgs"
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "locked": {
 | 
				
			||||||
 | 
					        "lastModified": 1733222881,
 | 
				
			||||||
 | 
					        "narHash": "sha256-JIPcz1PrpXUCbaccEnrcUS8jjEb/1vJbZz5KkobyFdM=",
 | 
				
			||||||
 | 
					        "owner": "numtide",
 | 
				
			||||||
 | 
					        "repo": "treefmt-nix",
 | 
				
			||||||
 | 
					        "rev": "49717b5af6f80172275d47a418c9719a31a78b53",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "original": {
 | 
				
			||||||
 | 
					        "owner": "numtide",
 | 
				
			||||||
 | 
					        "repo": "treefmt-nix",
 | 
				
			||||||
 | 
					        "type": "github"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "wallpapers": {
 | 
					    "wallpapers": {
 | 
				
			||||||
      "flake": false,
 | 
					      "flake": false,
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
@@ -997,17 +1027,16 @@
 | 
				
			|||||||
    "wsl": {
 | 
					    "wsl": {
 | 
				
			||||||
      "inputs": {
 | 
					      "inputs": {
 | 
				
			||||||
        "flake-compat": "flake-compat_2",
 | 
					        "flake-compat": "flake-compat_2",
 | 
				
			||||||
        "flake-utils": "flake-utils_4",
 | 
					 | 
				
			||||||
        "nixpkgs": [
 | 
					        "nixpkgs": [
 | 
				
			||||||
          "nixpkgs"
 | 
					          "nixpkgs"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "locked": {
 | 
					      "locked": {
 | 
				
			||||||
        "lastModified": 1731682434,
 | 
					        "lastModified": 1736095716,
 | 
				
			||||||
        "narHash": "sha256-HnZFPB7akVIy0KuPq/tEkiB+Brt1qi0DUIDzR8z25qI=",
 | 
					        "narHash": "sha256-csysw/Szu98QDiA2lhWk9seYOyCebeVEWL89zh1cduM=",
 | 
				
			||||||
        "owner": "nix-community",
 | 
					        "owner": "nix-community",
 | 
				
			||||||
        "repo": "NixOS-WSL",
 | 
					        "repo": "NixOS-WSL",
 | 
				
			||||||
        "rev": "a6b9cf0b7805e2c50829020a73e7bde683fd36dd",
 | 
					        "rev": "63c3b4ed1712a3a0621002cd59bfdc80875ecbb0",
 | 
				
			||||||
        "type": "github"
 | 
					        "type": "github"
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      "original": {
 | 
					      "original": {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -249,6 +249,7 @@
 | 
				
			|||||||
          dotfilesRepo = "https://github.com/nmasur/dotfiles";
 | 
					          dotfilesRepo = "https://github.com/nmasur/dotfiles";
 | 
				
			||||||
          hostnames = {
 | 
					          hostnames = {
 | 
				
			||||||
            audiobooks = "read.${baseName}";
 | 
					            audiobooks = "read.${baseName}";
 | 
				
			||||||
 | 
					            budget = "money.${baseName}";
 | 
				
			||||||
            files = "files.${baseName}";
 | 
					            files = "files.${baseName}";
 | 
				
			||||||
            git = "git.${baseName}";
 | 
					            git = "git.${baseName}";
 | 
				
			||||||
            influxdb = "influxdb.${baseName}";
 | 
					            influxdb = "influxdb.${baseName}";
 | 
				
			||||||
@@ -259,6 +260,7 @@
 | 
				
			|||||||
            notifications = "ntfy.${baseName}";
 | 
					            notifications = "ntfy.${baseName}";
 | 
				
			||||||
            prometheus = "prom.${baseName}";
 | 
					            prometheus = "prom.${baseName}";
 | 
				
			||||||
            paperless = "paper.${baseName}";
 | 
					            paperless = "paper.${baseName}";
 | 
				
			||||||
 | 
					            photos = "photos.${baseName}";
 | 
				
			||||||
            secrets = "vault.${baseName}";
 | 
					            secrets = "vault.${baseName}";
 | 
				
			||||||
            stream = "stream.${baseName}";
 | 
					            stream = "stream.${baseName}";
 | 
				
			||||||
            content = "cloud.${baseName}";
 | 
					            content = "cloud.${baseName}";
 | 
				
			||||||
@@ -271,11 +273,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      # Common overlays to always use
 | 
					      # Common overlays to always use
 | 
				
			||||||
      overlays = [
 | 
					      overlays = [
 | 
				
			||||||
        inputs.nur.overlay
 | 
					        inputs.nur.overlays.default
 | 
				
			||||||
        inputs.nix2vim.overlay
 | 
					        inputs.nix2vim.overlay
 | 
				
			||||||
        inputs.jujutsu.overlays.default # Fix: https://github.com/martinvonz/jj/issues/4784
 | 
					        inputs.jujutsu.overlays.default # Fix: https://github.com/martinvonz/jj/issues/4784
 | 
				
			||||||
        (import ./overlays/neovim-plugins.nix inputs)
 | 
					        (import ./overlays/neovim-plugins.nix inputs)
 | 
				
			||||||
        (import ./overlays/disko.nix inputs)
 | 
					 | 
				
			||||||
        (import ./overlays/tree-sitter.nix inputs)
 | 
					        (import ./overlays/tree-sitter.nix inputs)
 | 
				
			||||||
        (import ./overlays/mpv-scripts.nix inputs)
 | 
					        (import ./overlays/mpv-scripts.nix inputs)
 | 
				
			||||||
        (import ./overlays/nextcloud-apps.nix inputs)
 | 
					        (import ./overlays/nextcloud-apps.nix inputs)
 | 
				
			||||||
@@ -283,6 +284,7 @@
 | 
				
			|||||||
        (import ./overlays/gh-collaborators.nix inputs)
 | 
					        (import ./overlays/gh-collaborators.nix inputs)
 | 
				
			||||||
        (import ./overlays/osc.nix inputs)
 | 
					        (import ./overlays/osc.nix inputs)
 | 
				
			||||||
        (import ./overlays/ren-rep.nix inputs)
 | 
					        (import ./overlays/ren-rep.nix inputs)
 | 
				
			||||||
 | 
					        (import ./overlays/volnoti.nix)
 | 
				
			||||||
      ];
 | 
					      ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # System types to support.
 | 
					      # System types to support.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -62,7 +62,7 @@ inputs.nixpkgs.lib.nixosSystem rec {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
      # Still require colors for programs like Neovim, K9S
 | 
					      # Still require colors for programs like Neovim, K9S
 | 
				
			||||||
      theme = {
 | 
					      theme = {
 | 
				
			||||||
        colors = (import ../../colorscheme/gruvbox).dark;
 | 
					        colors = (import ../../colorscheme/gruvbox-dark).dark;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Programs and services
 | 
					      # Programs and services
 | 
				
			||||||
@@ -71,6 +71,7 @@ inputs.nixpkgs.lib.nixosSystem rec {
 | 
				
			|||||||
      dotfiles.enable = true; # Clone dotfiles
 | 
					      dotfiles.enable = true; # Clone dotfiles
 | 
				
			||||||
      neovim.enable = true;
 | 
					      neovim.enable = true;
 | 
				
			||||||
      giteaRunner.enable = true;
 | 
					      giteaRunner.enable = true;
 | 
				
			||||||
 | 
					      services.actualbudget.enable = true;
 | 
				
			||||||
      services.caddy.enable = true;
 | 
					      services.caddy.enable = true;
 | 
				
			||||||
      services.grafana.enable = true;
 | 
					      services.grafana.enable = true;
 | 
				
			||||||
      services.thelounge.enable = true;
 | 
					      services.thelounge.enable = true;
 | 
				
			||||||
@@ -99,6 +100,7 @@ inputs.nixpkgs.lib.nixosSystem rec {
 | 
				
			|||||||
        endpoint = "s3.us-west-002.backblazeb2.com";
 | 
					        endpoint = "s3.us-west-002.backblazeb2.com";
 | 
				
			||||||
        bucket = "noahmasur-backup";
 | 
					        bucket = "noahmasur-backup";
 | 
				
			||||||
        accessKeyId = "0026b0e73b2e2c80000000005";
 | 
					        accessKeyId = "0026b0e73b2e2c80000000005";
 | 
				
			||||||
 | 
					        resticBucket = "noahmasur-restic";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Disable passwords, only use SSH key
 | 
					      # Disable passwords, only use SSH key
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,8 @@ inputs.darwin.lib.darwinSystem {
 | 
				
			|||||||
    inputs.mac-app-util.darwinModules.default
 | 
					    inputs.mac-app-util.darwinModules.default
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      nixpkgs.overlays = [ inputs.firefox-darwin.overlay ] ++ overlays;
 | 
					      nixpkgs.overlays = [ inputs.firefox-darwin.overlay ] ++ overlays;
 | 
				
			||||||
      networking.hostName = "lookingglass";
 | 
					      networking.hostName = "NYCM-NMASUR2";
 | 
				
			||||||
 | 
					      networking.computerName = "NYCM-NMASUR2";
 | 
				
			||||||
      identityFile = "/Users/Noah.Masur/.ssh/id_ed25519";
 | 
					      identityFile = "/Users/Noah.Masur/.ssh/id_ed25519";
 | 
				
			||||||
      gui.enable = true;
 | 
					      gui.enable = true;
 | 
				
			||||||
      theme = {
 | 
					      theme = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,6 +109,7 @@ inputs.nixpkgs.lib.nixosSystem rec {
 | 
				
			|||||||
      services.audiobookshelf.enable = true;
 | 
					      services.audiobookshelf.enable = true;
 | 
				
			||||||
      services.bind.enable = true;
 | 
					      services.bind.enable = true;
 | 
				
			||||||
      services.caddy.enable = true;
 | 
					      services.caddy.enable = true;
 | 
				
			||||||
 | 
					      services.immich.enable = true;
 | 
				
			||||||
      services.jellyfin.enable = true;
 | 
					      services.jellyfin.enable = true;
 | 
				
			||||||
      services.nextcloud.enable = true;
 | 
					      services.nextcloud.enable = true;
 | 
				
			||||||
      services.calibre-web.enable = true;
 | 
					      services.calibre-web.enable = true;
 | 
				
			||||||
@@ -133,6 +134,7 @@ inputs.nixpkgs.lib.nixosSystem rec {
 | 
				
			|||||||
        endpoint = "s3.us-west-002.backblazeb2.com";
 | 
					        endpoint = "s3.us-west-002.backblazeb2.com";
 | 
				
			||||||
        bucket = "noahmasur-backup";
 | 
					        bucket = "noahmasur-backup";
 | 
				
			||||||
        accessKeyId = "0026b0e73b2e2c80000000005";
 | 
					        accessKeyId = "0026b0e73b2e2c80000000005";
 | 
				
			||||||
 | 
					        resticBucket = "noahmasur-restic";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Disable passwords, only use SSH key
 | 
					      # Disable passwords, only use SSH key
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -41,6 +41,12 @@ inputs.nixpkgs.lib.nixosSystem rec {
 | 
				
			|||||||
      boot.kernelModules = [ "kvm-amd" ];
 | 
					      boot.kernelModules = [ "kvm-amd" ];
 | 
				
			||||||
      services.xserver.videoDrivers = [ "amdgpu" ];
 | 
					      services.xserver.videoDrivers = [ "amdgpu" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # I don't think I need this?
 | 
				
			||||||
 | 
					      # boot.kernelParams = [
 | 
				
			||||||
 | 
					      #   "video=DP-0:2560x1440@165"
 | 
				
			||||||
 | 
					      #   "video=DP-1:1920x1080@60"
 | 
				
			||||||
 | 
					      # ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Required binary blobs to boot on this machine
 | 
					      # Required binary blobs to boot on this machine
 | 
				
			||||||
      hardware.enableRedistributableFirmware = true;
 | 
					      hardware.enableRedistributableFirmware = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,6 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # Broken on 2023-12-11
 | 
					    # Broken on 2023-12-11
 | 
				
			||||||
    # https://forum.obsidian.md/t/electron-25-is-now-eol-please-upgrade-to-a-newer-version/72878/8
 | 
					    # https://forum.obsidian.md/t/electron-25-is-now-eol-please-upgrade-to-a-newer-version/72878/8
 | 
				
			||||||
    nixpkgs.config.permittedInsecurePackages = [ "electron-25.9.0" ];
 | 
					    insecurePackages = [ "electron-25.9.0" ];
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,4 +21,6 @@
 | 
				
			|||||||
      home.packages = with pkgs; [ slack ];
 | 
					      home.packages = with pkgs; [ slack ];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  # Theme string: #1D2122,#665C54,#8EC07C,#BDAE93
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,14 +29,14 @@
 | 
				
			|||||||
          sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.wezterm}/bin/wezterm";
 | 
					          sessionVariables.ROFI_SYSTEMD_TERM = "${pkgs.wezterm}/bin/wezterm";
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      terminal = "${pkgs.wezterm}/bin/wezterm";
 | 
				
			||||||
 | 
					      terminalLaunchCommand = "${config.terminal} start --";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      home-manager.users.${config.user} = {
 | 
					      home-manager.users.${config.user} = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Set the i3 terminal
 | 
					        # Set the i3 terminal
 | 
				
			||||||
        xsession.windowManager.i3.config.terminal = lib.mkIf pkgs.stdenv.isLinux "wezterm";
 | 
					        xsession.windowManager.i3.config.terminal = lib.mkIf pkgs.stdenv.isLinux "wezterm";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Set the Rofi terminal for running programs
 | 
					 | 
				
			||||||
        programs.rofi.terminal = lib.mkIf pkgs.stdenv.isLinux "${pkgs.wezterm}/bin/wezterm";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Display images in the terminal
 | 
					        # Display images in the terminal
 | 
				
			||||||
        programs.fish.shellAliases = {
 | 
					        programs.fish.shellAliases = {
 | 
				
			||||||
          icat = lib.mkForce "wezterm imgcat";
 | 
					          icat = lib.mkForce "wezterm imgcat";
 | 
				
			||||||
@@ -115,7 +115,7 @@
 | 
				
			|||||||
              left = 10,
 | 
					              left = 10,
 | 
				
			||||||
              right = 10,
 | 
					              right = 10,
 | 
				
			||||||
              top = 10,
 | 
					              top = 10,
 | 
				
			||||||
              bottom = 10,
 | 
					              bottom = 12,
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            config.font = wezterm.font('${font}', { weight = 'Bold'})
 | 
					            config.font = wezterm.font('${font}', { weight = 'Bold'})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,11 +76,20 @@
 | 
				
			|||||||
      description = "List of unfree packages to allow.";
 | 
					      description = "List of unfree packages to allow.";
 | 
				
			||||||
      default = [ ];
 | 
					      default = [ ];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					    insecurePackages = lib.mkOption {
 | 
				
			||||||
 | 
					      type = lib.types.listOf lib.types.str;
 | 
				
			||||||
 | 
					      description = "List of insecure packages to allow.";
 | 
				
			||||||
 | 
					      default = [ ];
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
    hostnames = {
 | 
					    hostnames = {
 | 
				
			||||||
      audiobooks = lib.mkOption {
 | 
					      audiobooks = lib.mkOption {
 | 
				
			||||||
        type = lib.types.str;
 | 
					        type = lib.types.str;
 | 
				
			||||||
        description = "Hostname for audiobook server (Audiobookshelf).";
 | 
					        description = "Hostname for audiobook server (Audiobookshelf).";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					      budget = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.str;
 | 
				
			||||||
 | 
					        description = "Hostname for budgeting server (ActualBudget).";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
      files = lib.mkOption {
 | 
					      files = lib.mkOption {
 | 
				
			||||||
        type = lib.types.str;
 | 
					        type = lib.types.str;
 | 
				
			||||||
        description = "Hostname for files server (Filebrowser).";
 | 
					        description = "Hostname for files server (Filebrowser).";
 | 
				
			||||||
@@ -101,6 +110,10 @@
 | 
				
			|||||||
        type = lib.types.str;
 | 
					        type = lib.types.str;
 | 
				
			||||||
        description = "Hostname for document server (paperless-ngx).";
 | 
					        description = "Hostname for document server (paperless-ngx).";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					      photos = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.str;
 | 
				
			||||||
 | 
					        description = "Hostname for photo management (Immich).";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
      prometheus = lib.mkOption {
 | 
					      prometheus = lib.mkOption {
 | 
				
			||||||
        type = lib.types.str;
 | 
					        type = lib.types.str;
 | 
				
			||||||
        description = "Hostname for Prometheus server.";
 | 
					        description = "Hostname for Prometheus server.";
 | 
				
			||||||
@@ -177,8 +190,22 @@
 | 
				
			|||||||
      # Retrieves package object based on string name
 | 
					      # Retrieves package object based on string name
 | 
				
			||||||
      nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) config.unfreePackages;
 | 
					      nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) config.unfreePackages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Allow specified insecure packages (identified elsewhere)
 | 
				
			||||||
 | 
					      nixpkgs.config.permittedInsecurePackages = config.insecurePackages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Pin a state version to prevent warnings
 | 
					      # Pin a state version to prevent warnings
 | 
				
			||||||
      home-manager.users.${config.user}.home.stateVersion = stateVersion;
 | 
					 | 
				
			||||||
      home-manager.users.root.home.stateVersion = stateVersion;
 | 
					      home-manager.users.root.home.stateVersion = stateVersion;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Fix for running home-manager against the repo directly
 | 
				
			||||||
 | 
					      # See: https://github.com/nix-community/home-manager/issues/2033
 | 
				
			||||||
 | 
					      home-manager.users.${config.user} = {
 | 
				
			||||||
 | 
					        home.stateVersion = stateVersion;
 | 
				
			||||||
 | 
					        news = {
 | 
				
			||||||
 | 
					          display = "silent";
 | 
				
			||||||
 | 
					          entries = lib.mkForce [ ];
 | 
				
			||||||
 | 
					          json = lib.mkForce { "output" = { }; };
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -169,7 +169,8 @@
 | 
				
			|||||||
          filters = {
 | 
					          filters = {
 | 
				
			||||||
            "text/plain" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
 | 
					            "text/plain" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
 | 
				
			||||||
            "text/calendar" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/libexec/aerc/filters/calendar";
 | 
					            "text/calendar" = "${pkgs.gawk}/bin/awk -f ${pkgs.aerc}/libexec/aerc/filters/calendar";
 | 
				
			||||||
            "text/html" = "${pkgs.aerc}/libexec/aerc/filters/html | ${pkgs.aerc}/libexec/aerc/filters/colorize"; # Requires w3m, dante
 | 
					            "text/html" =
 | 
				
			||||||
 | 
					              "${pkgs.aerc}/libexec/aerc/filters/html | ${pkgs.aerc}/libexec/aerc/filters/colorize"; # Requires w3m, dante
 | 
				
			||||||
            # "text/*" =
 | 
					            # "text/*" =
 | 
				
			||||||
            #   ''${pkgs.bat}/bin/bat -fP --file-name="$AERC_FILENAME "'';
 | 
					            #   ''${pkgs.bat}/bin/bat -fP --file-name="$AERC_FILENAME "'';
 | 
				
			||||||
            "message/delivery-status" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
 | 
					            "message/delivery-status" = "${pkgs.aerc}/libexec/aerc/filters/colorize";
 | 
				
			||||||
@@ -190,22 +191,19 @@
 | 
				
			|||||||
        };
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      xdg.desktopEntries.aerc = lib.mkIf pkgs.stdenv.isLinux {
 | 
					      xdg.desktopEntries.aerc = lib.mkIf (pkgs.stdenv.isLinux && config.gui.enable) {
 | 
				
			||||||
        name = "aerc";
 | 
					        name = "aerc";
 | 
				
			||||||
        exec = "${config.home-manager.users.${config.user}.programs.rofi.terminal} aerc %u";
 | 
					        exec = "${config.terminalLaunchCommand} aerc %u";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      xsession.windowManager.i3.config.keybindings = lib.mkIf pkgs.stdenv.isLinux {
 | 
					      xsession.windowManager.i3.config.keybindings = lib.mkIf pkgs.stdenv.isLinux {
 | 
				
			||||||
        "${
 | 
					        "${config.home-manager.users.${config.user}.xsession.windowManager.i3.config.modifier}+Shift+e" =
 | 
				
			||||||
          config.home-manager.users.${config.user}.xsession.windowManager.i3.config.modifier
 | 
					          "exec ${
 | 
				
			||||||
        }+Shift+e" = "exec ${
 | 
					 | 
				
			||||||
            # Don't name the script `aerc` or it will affect grep
 | 
					            # Don't name the script `aerc` or it will affect grep
 | 
				
			||||||
            builtins.toString (
 | 
					            builtins.toString (
 | 
				
			||||||
              pkgs.writeShellScript "focus-mail.sh" ''
 | 
					              pkgs.writeShellScript "focus-mail.sh" ''
 | 
				
			||||||
                count=$(ps aux | grep -c aerc)
 | 
					                count=$(ps aux | grep -c aerc)
 | 
				
			||||||
                if [ "$count" -eq 1 ]; then
 | 
					                if [ "$count" -eq 1 ]; then
 | 
				
			||||||
                  i3-msg "exec --no-startup-id ${
 | 
					                    i3-msg "exec --no-startup-id ${config.terminal} start --class aerc -- aerc"
 | 
				
			||||||
                    config.home-manager.users.${config.user}.programs.rofi.terminal
 | 
					 | 
				
			||||||
                  } --class aerc aerc"
 | 
					 | 
				
			||||||
                    sleep 0.25
 | 
					                    sleep 0.25
 | 
				
			||||||
                fi
 | 
					                fi
 | 
				
			||||||
                i3-msg "[class=aerc] focus"
 | 
					                i3-msg "[class=aerc] focus"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,6 +2,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  plugins = [
 | 
					  plugins = [
 | 
				
			||||||
 | 
					    pkgs.vimPlugins.nvim-cmp
 | 
				
			||||||
    pkgs.vimPlugins.cmp-nvim-lsp
 | 
					    pkgs.vimPlugins.cmp-nvim-lsp
 | 
				
			||||||
    pkgs.vimPlugins.cmp-buffer
 | 
					    pkgs.vimPlugins.cmp-buffer
 | 
				
			||||||
    pkgs.vimPlugins.cmp-path
 | 
					    pkgs.vimPlugins.cmp-path
 | 
				
			||||||
@@ -26,15 +27,21 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # Basic completion keybinds
 | 
					    # Basic completion keybinds
 | 
				
			||||||
    mapping = {
 | 
					    mapping = {
 | 
				
			||||||
      "['<C-n>']" = dsl.rawLua "require('cmp').mapping.select_next_item({ behavior = require('cmp').SelectBehavior.Insert }, { 'i', 'c' })";
 | 
					      "['<C-n>']" =
 | 
				
			||||||
      "['<C-p>']" = dsl.rawLua "require('cmp').mapping.select_prev_item({ behavior = require('cmp').SelectBehavior.Insert }, { 'i', 'c' })";
 | 
					        dsl.rawLua "require('cmp').mapping.select_next_item({ behavior = require('cmp').SelectBehavior.Insert }, { 'i', 'c' })";
 | 
				
			||||||
      "['<Down>']" = dsl.rawLua "require('cmp').mapping.select_next_item({ behavior = require('cmp').SelectBehavior.Select }, { 'i', 'c' })";
 | 
					      "['<C-p>']" =
 | 
				
			||||||
      "['<Up>']" = dsl.rawLua "require('cmp').mapping.select_prev_item({ behavior = require('cmp').SelectBehavior.Select }, { 'i', 'c' })";
 | 
					        dsl.rawLua "require('cmp').mapping.select_prev_item({ behavior = require('cmp').SelectBehavior.Insert }, { 'i', 'c' })";
 | 
				
			||||||
 | 
					      "['<Down>']" =
 | 
				
			||||||
 | 
					        dsl.rawLua "require('cmp').mapping.select_next_item({ behavior = require('cmp').SelectBehavior.Select }, { 'i', 'c' })";
 | 
				
			||||||
 | 
					      "['<Up>']" =
 | 
				
			||||||
 | 
					        dsl.rawLua "require('cmp').mapping.select_prev_item({ behavior = require('cmp').SelectBehavior.Select }, { 'i', 'c' })";
 | 
				
			||||||
      "['<C-d>']" = dsl.rawLua "require('cmp').mapping.scroll_docs(-4)";
 | 
					      "['<C-d>']" = dsl.rawLua "require('cmp').mapping.scroll_docs(-4)";
 | 
				
			||||||
      "['<C-f>']" = dsl.rawLua "require('cmp').mapping.scroll_docs(4)";
 | 
					      "['<C-f>']" = dsl.rawLua "require('cmp').mapping.scroll_docs(4)";
 | 
				
			||||||
      "['<C-e>']" = dsl.rawLua "require('cmp').mapping.abort()";
 | 
					      "['<C-e>']" = dsl.rawLua "require('cmp').mapping.abort()";
 | 
				
			||||||
      "['<C-y>']" = dsl.rawLua "require('cmp').mapping.confirm({ behavior = require('cmp').ConfirmBehavior.Insert, select = true, }, { 'i', 'c' })";
 | 
					      "['<C-y>']" =
 | 
				
			||||||
      "['<C-r>']" = dsl.rawLua "require('cmp').mapping.confirm({ behavior = require('cmp').ConfirmBehavior.Replace, select = true, }, { 'i', 'c' })";
 | 
					        dsl.rawLua "require('cmp').mapping.confirm({ behavior = require('cmp').ConfirmBehavior.Insert, select = true, }, { 'i', 'c' })";
 | 
				
			||||||
 | 
					      "['<C-r>']" =
 | 
				
			||||||
 | 
					        dsl.rawLua "require('cmp').mapping.confirm({ behavior = require('cmp').ConfirmBehavior.Replace, select = true, }, { 'i', 'c' })";
 | 
				
			||||||
      "['<Esc>']" = dsl.rawLua ''
 | 
					      "['<Esc>']" = dsl.rawLua ''
 | 
				
			||||||
        function(_)
 | 
					        function(_)
 | 
				
			||||||
            cmp.mapping({
 | 
					            cmp.mapping({
 | 
				
			||||||
@@ -128,7 +135,7 @@
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  lua = ''
 | 
					  lua' = ''
 | 
				
			||||||
    -- Use buffer source for `/`
 | 
					    -- Use buffer source for `/`
 | 
				
			||||||
    require('cmp').setup.cmdline("/", {
 | 
					    require('cmp').setup.cmdline("/", {
 | 
				
			||||||
        mapping = {
 | 
					        mapping = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,8 @@
 | 
				
			|||||||
}:
 | 
					}:
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  unfreePackages = [ "gh-copilot" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  home-manager.users.${config.user} = {
 | 
					  home-manager.users.${config.user} = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    programs.gh = lib.mkIf config.home-manager.users.${config.user}.programs.git.enable {
 | 
					    programs.gh = lib.mkIf config.home-manager.users.${config.user}.programs.git.enable {
 | 
				
			||||||
@@ -15,6 +17,7 @@
 | 
				
			|||||||
      extensions = [
 | 
					      extensions = [
 | 
				
			||||||
        pkgs.gh-collaborators
 | 
					        pkgs.gh-collaborators
 | 
				
			||||||
        pkgs.gh-dash
 | 
					        pkgs.gh-dash
 | 
				
			||||||
 | 
					        pkgs.gh-copilot
 | 
				
			||||||
      ];
 | 
					      ];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -54,7 +57,7 @@
 | 
				
			|||||||
        esac
 | 
					        esac
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        selected=$(gh repo list "$organization" \
 | 
					        selected=$(gh repo list "$organization" \
 | 
				
			||||||
            --limit 100 \
 | 
					            --limit 1000 \
 | 
				
			||||||
            --no-archived \
 | 
					            --no-archived \
 | 
				
			||||||
            --json=name,description,isPrivate,updatedAt,primaryLanguage \
 | 
					            --json=name,description,isPrivate,updatedAt,primaryLanguage \
 | 
				
			||||||
            | jq -r '.[] | .name + "," + if .description == "" then "-" else .description |= gsub(","; " ") | .description end + "," + .updatedAt + "," + .primaryLanguage.name' \
 | 
					            | jq -r '.[] | .name + "," + if .description == "" then "-" else .description |= gsub(","; " ") | .description end + "," + .updatedAt + "," + .primaryLanguage.name' \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,9 +16,15 @@
 | 
				
			|||||||
        nps = "nix repl --expr 'import <nixpkgs>{}'";
 | 
					        nps = "nix repl --expr 'import <nixpkgs>{}'";
 | 
				
			||||||
        nixo = "man configuration.nix";
 | 
					        nixo = "man configuration.nix";
 | 
				
			||||||
        nixh = "man home-configuration.nix";
 | 
					        nixh = "man home-configuration.nix";
 | 
				
			||||||
        nr = "rebuild-nixos";
 | 
					        nr = {
 | 
				
			||||||
        nro = "rebuild-nixos offline";
 | 
					          function = "rebuild-nixos";
 | 
				
			||||||
        hm = "rebuild-home";
 | 
					        };
 | 
				
			||||||
 | 
					        nro = {
 | 
				
			||||||
 | 
					          function = "rebuild-nixos-offline";
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        hm = {
 | 
				
			||||||
 | 
					          function = "rebuild-home";
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      functions = {
 | 
					      functions = {
 | 
				
			||||||
        nix-shell-run = {
 | 
					        nix-shell-run = {
 | 
				
			||||||
@@ -42,19 +48,20 @@
 | 
				
			|||||||
        };
 | 
					        };
 | 
				
			||||||
        rebuild-nixos = {
 | 
					        rebuild-nixos = {
 | 
				
			||||||
          body = ''
 | 
					          body = ''
 | 
				
			||||||
            if test "$argv[1]" = "offline"
 | 
					 | 
				
			||||||
                set option "--option substitute false"
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
					            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
				
			||||||
            commandline -r "doas nixos-rebuild switch $option --flake ${config.dotfilesPath}#${config.networking.hostName}"
 | 
					            echo "doas nixos-rebuild switch --flake ${config.dotfilesPath}#${config.networking.hostName}"
 | 
				
			||||||
            commandline --function execute
 | 
					          '';
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        rebuild-nixos-offline = {
 | 
				
			||||||
 | 
					          body = ''
 | 
				
			||||||
 | 
					            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
				
			||||||
 | 
					            echo "doas nixos-rebuild switch --option substitute false --flake ${config.dotfilesPath}#${config.networking.hostName}"
 | 
				
			||||||
          '';
 | 
					          '';
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        rebuild-home = {
 | 
					        rebuild-home = {
 | 
				
			||||||
          body = ''
 | 
					          body = ''
 | 
				
			||||||
            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
					            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
				
			||||||
            commandline -r "${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName}";
 | 
					            echo "${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#${config.networking.hostName}";
 | 
				
			||||||
            commandline --function execute
 | 
					 | 
				
			||||||
          '';
 | 
					          '';
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
@@ -91,12 +98,6 @@
 | 
				
			|||||||
    # Set channel to flake packages, used for nix-shell commands
 | 
					    # Set channel to flake packages, used for nix-shell commands
 | 
				
			||||||
    nixPath = [ "nixpkgs=${pkgs.path}" ];
 | 
					    nixPath = [ "nixpkgs=${pkgs.path}" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Set registry to this flake's packages, used for nix X commands
 | 
					 | 
				
			||||||
    registry.nixpkgs.to = {
 | 
					 | 
				
			||||||
      type = "path";
 | 
					 | 
				
			||||||
      path = builtins.toString pkgs.path;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # For security, only allow specific users
 | 
					    # For security, only allow specific users
 | 
				
			||||||
    settings.allowed-users = [
 | 
					    settings.allowed-users = [
 | 
				
			||||||
      "@wheel"
 | 
					      "@wheel"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,10 +34,11 @@ in
 | 
				
			|||||||
        osc # Clipboard over SSH
 | 
					        osc # Clipboard over SSH
 | 
				
			||||||
        qrencode # Generate qr codes
 | 
					        qrencode # Generate qr codes
 | 
				
			||||||
        rsync # Copy folders
 | 
					        rsync # Copy folders
 | 
				
			||||||
        ren # Rename files
 | 
					        # ren # Rename files
 | 
				
			||||||
        # rep # Replace text in files
 | 
					        # rep # Replace text in files
 | 
				
			||||||
        ripgrep # grep
 | 
					        ripgrep # grep
 | 
				
			||||||
        sd # sed
 | 
					        sd # sed
 | 
				
			||||||
 | 
					        spacer # Output lines in terminal
 | 
				
			||||||
        tealdeer # Cheatsheets
 | 
					        tealdeer # Cheatsheets
 | 
				
			||||||
        tree # View directory hierarchy
 | 
					        tree # View directory hierarchy
 | 
				
			||||||
        vimv-rs # Batch rename files
 | 
					        vimv-rs # Batch rename files
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,14 +8,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
 | 
					  home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    home.packages = with pkgs; [ (nerdfonts.override { fonts = [ "VictorMono" ]; }) ];
 | 
					    home.packages = with pkgs; [ nerd-fonts.victor-mono ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    programs.alacritty.settings = {
 | 
					    programs.alacritty.settings = {
 | 
				
			||||||
      font.normal.family = "VictorMono";
 | 
					      font.normal.family = "VictorMono";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    programs.kitty.font = {
 | 
					    programs.kitty.font = {
 | 
				
			||||||
      package = (pkgs.nerdfonts.override { fonts = [ "VictorMono" ]; });
 | 
					      package = pkgs.nerd-fonts.victor-mono;
 | 
				
			||||||
      name = "VictorMono Nerd Font Mono";
 | 
					      name = "VictorMono Nerd Font Mono";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,7 +46,7 @@
 | 
				
			|||||||
        "scroll-reverser" # Different scroll style for mouse vs. trackpad
 | 
					        "scroll-reverser" # Different scroll style for mouse vs. trackpad
 | 
				
			||||||
        "notunes" # Don't launch Apple Music with the play button
 | 
					        "notunes" # Don't launch Apple Music with the play button
 | 
				
			||||||
        "steam" # Not packaged for Nixon macOS
 | 
					        "steam" # Not packaged for Nixon macOS
 | 
				
			||||||
        # "epic-games" # Not packaged for Nix
 | 
					        "epic-games" # Not packaged for Nix
 | 
				
			||||||
      ];
 | 
					      ];
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,11 +6,12 @@
 | 
				
			|||||||
}:
 | 
					}:
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  config = lib.mkIf pkgs.stdenv.isDarwin {
 | 
					  #   config = lib.mkIf pkgs.stdenv.isDarwin {
 | 
				
			||||||
    networking = {
 | 
					  #     networking = {
 | 
				
			||||||
      computerName = config.networking.hostName;
 | 
					  #       computerName = config.networking.hostName;
 | 
				
			||||||
      # Adjust if necessary
 | 
					  #       # Adjust if necessary
 | 
				
			||||||
      # hostName = "";
 | 
					  #       # hostName = "";
 | 
				
			||||||
    };
 | 
					  #     };
 | 
				
			||||||
  };
 | 
					  #   };
 | 
				
			||||||
 | 
					  # }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,25 +10,30 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    programs.fish = {
 | 
					    programs.fish = {
 | 
				
			||||||
      shellAbbrs = {
 | 
					      shellAbbrs = {
 | 
				
			||||||
        nr = lib.mkForce "rebuild-darwin";
 | 
					        nr = {
 | 
				
			||||||
        nro = lib.mkForce "rebuild-darwin offline";
 | 
					          function = lib.mkForce "rebuild-darwin";
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        nro = {
 | 
				
			||||||
 | 
					          function = lib.mkForce "rebuild-darwin-offline";
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      functions = {
 | 
					      functions = {
 | 
				
			||||||
        rebuild-darwin = {
 | 
					        rebuild-darwin = {
 | 
				
			||||||
          body = ''
 | 
					          body = ''
 | 
				
			||||||
            if test "$argv[1]" = "offline"
 | 
					 | 
				
			||||||
                set option "--option substitute false"
 | 
					 | 
				
			||||||
            end
 | 
					 | 
				
			||||||
            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
					            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
				
			||||||
            commandline -r "darwin-rebuild switch $option --flake ${config.dotfilesPath}#lookingglass"
 | 
					            echo "darwin-rebuild switch --flake ${config.dotfilesPath}#lookingglass"
 | 
				
			||||||
            commandline --function execute
 | 
					          '';
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					        rebuild-darwin-offline = {
 | 
				
			||||||
 | 
					          body = ''
 | 
				
			||||||
 | 
					            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
				
			||||||
 | 
					            echo "darwin-rebuild switch --option substitute false --flake ${config.dotfilesPath}#lookingglass"
 | 
				
			||||||
          '';
 | 
					          '';
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
        rebuild-home = lib.mkForce {
 | 
					        rebuild-home = lib.mkForce {
 | 
				
			||||||
          body = ''
 | 
					          body = ''
 | 
				
			||||||
            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
					            git -C ${config.dotfilesPath} add --intent-to-add --all
 | 
				
			||||||
            commandline -r "${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#lookingglass";
 | 
					            echo "${pkgs.home-manager}/bin/home-manager switch --flake ${config.dotfilesPath}#lookingglass";
 | 
				
			||||||
            commandline --function execute
 | 
					 | 
				
			||||||
          '';
 | 
					          '';
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,6 +6,19 @@
 | 
				
			|||||||
}:
 | 
					}:
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  options = {
 | 
				
			||||||
 | 
					    terminal = lib.mkOption {
 | 
				
			||||||
 | 
					      type = lib.types.nullOr lib.types.str;
 | 
				
			||||||
 | 
					      description = "Path to executable for terminal emulator program.";
 | 
				
			||||||
 | 
					      default = null;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    terminalLaunchCommand = lib.mkOption {
 | 
				
			||||||
 | 
					      type = lib.types.nullOr lib.types.str;
 | 
				
			||||||
 | 
					      description = "Command for using the terminal to launch a new window with a program.";
 | 
				
			||||||
 | 
					      default = null;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  config = lib.mkIf pkgs.stdenv.isDarwin {
 | 
					  config = lib.mkIf pkgs.stdenv.isDarwin {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    services.nix-daemon.enable = true;
 | 
					    services.nix-daemon.enable = true;
 | 
				
			||||||
@@ -135,6 +148,9 @@
 | 
				
			|||||||
        # Where to save screenshots
 | 
					        # Where to save screenshots
 | 
				
			||||||
        screencapture.location = "~/Downloads";
 | 
					        screencapture.location = "~/Downloads";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Show seconds on the clock
 | 
				
			||||||
 | 
					        menuExtraClock.ShowSeconds = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        CustomUserPreferences = {
 | 
					        CustomUserPreferences = {
 | 
				
			||||||
          # Disable disk image verification
 | 
					          # Disable disk image verification
 | 
				
			||||||
          "com.apple.frameworks.diskimages" = {
 | 
					          "com.apple.frameworks.diskimages" = {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,11 +11,12 @@
 | 
				
			|||||||
    users.users."${config.user}" = {
 | 
					    users.users."${config.user}" = {
 | 
				
			||||||
      # macOS user
 | 
					      # macOS user
 | 
				
			||||||
      home = config.homePath;
 | 
					      home = config.homePath;
 | 
				
			||||||
 | 
					      uid = 502;
 | 
				
			||||||
      # shell = pkgs.fish; # Default shell
 | 
					      # shell = pkgs.fish; # Default shell
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # This might fix the shell issues
 | 
					    # This might fix the shell issues
 | 
				
			||||||
    # users.knownUsers = [ config.user ];
 | 
					    users.knownUsers = [ config.user ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    home-manager.users.${config.user} = {
 | 
					    home-manager.users.${config.user} = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,7 @@
 | 
				
			|||||||
  unfreePackages = [
 | 
					  unfreePackages = [
 | 
				
			||||||
    "consul"
 | 
					    "consul"
 | 
				
			||||||
    "vault-bin"
 | 
					    "vault-bin"
 | 
				
			||||||
    "teams"
 | 
					    # "teams"
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
 | 
					  home-manager.users.${config.user} = lib.mkIf pkgs.stdenv.isDarwin {
 | 
				
			||||||
@@ -32,8 +32,9 @@
 | 
				
			|||||||
      pkgs.consul
 | 
					      pkgs.consul
 | 
				
			||||||
      pkgs.noti # Create notifications programmatically
 | 
					      pkgs.noti # Create notifications programmatically
 | 
				
			||||||
      pkgs.ipcalc # Make IP network calculations
 | 
					      pkgs.ipcalc # Make IP network calculations
 | 
				
			||||||
      pkgs.teams
 | 
					      # pkgs.teams
 | 
				
			||||||
      pkgs.cloudflared # Allow connecting to Cloudflare tunnels
 | 
					      pkgs.cloudflared # Allow connecting to Cloudflare tunnels
 | 
				
			||||||
 | 
					      pkgs.monitorcontrol # Allows adjusting external displays
 | 
				
			||||||
      (pkgs.writeShellApplication {
 | 
					      (pkgs.writeShellApplication {
 | 
				
			||||||
        name = "ocr";
 | 
					        name = "ocr";
 | 
				
			||||||
        runtimeInputs = [ pkgs.tesseract ];
 | 
					        runtimeInputs = [ pkgs.tesseract ];
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,16 @@
 | 
				
			|||||||
      type = lib.types.str;
 | 
					      type = lib.types.str;
 | 
				
			||||||
      description = "Command to use for power options menu";
 | 
					      description = "Command to use for power options menu";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					    terminal = lib.mkOption {
 | 
				
			||||||
 | 
					      type = lib.types.nullOr lib.types.str;
 | 
				
			||||||
 | 
					      description = "Path to executable for terminal emulator program.";
 | 
				
			||||||
 | 
					      default = null;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    terminalLaunchCommand = lib.mkOption {
 | 
				
			||||||
 | 
					      type = lib.types.nullOr lib.types.str;
 | 
				
			||||||
 | 
					      description = "Command for using the terminal to launch a new window with a program.";
 | 
				
			||||||
 | 
					      default = null;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
    wallpaper = lib.mkOption {
 | 
					    wallpaper = lib.mkOption {
 | 
				
			||||||
      type = lib.types.path;
 | 
					      type = lib.types.path;
 | 
				
			||||||
      description = "Wallpaper background image file";
 | 
					      description = "Wallpaper background image file";
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    fonts.packages = with pkgs; [
 | 
					    fonts.packages = with pkgs; [
 | 
				
			||||||
      victor-mono # Used for Vim and Terminal
 | 
					      victor-mono # Used for Vim and Terminal
 | 
				
			||||||
      (nerdfonts.override { fonts = [ "Hack" ]; }) # For Polybar, Rofi
 | 
					      nerd-fonts.hack # For Polybar, Rofi
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
    fonts.fontconfig.defaultFonts.monospace = [ fontName ];
 | 
					    fonts.fontconfig.defaultFonts.monospace = [ fontName ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ in
 | 
				
			|||||||
        cycle = true;
 | 
					        cycle = true;
 | 
				
			||||||
        location = "center";
 | 
					        location = "center";
 | 
				
			||||||
        pass = { };
 | 
					        pass = { };
 | 
				
			||||||
 | 
					        terminal = lib.mkIf pkgs.stdenv.isLinux config.terminal;
 | 
				
			||||||
        plugins = [
 | 
					        plugins = [
 | 
				
			||||||
          pkgs.rofi-calc
 | 
					          pkgs.rofi-calc
 | 
				
			||||||
          pkgs.rofi-emoji
 | 
					          pkgs.rofi-emoji
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,10 +56,6 @@ in
 | 
				
			|||||||
      # Graphical volume notifications
 | 
					      # Graphical volume notifications
 | 
				
			||||||
      services.volnoti.enable = true;
 | 
					      services.volnoti.enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Fix: Volnoti binary not found
 | 
					 | 
				
			||||||
      # Broken by https://github.com/nix-community/home-manager/pull/5725/commits/98bf8de65dc1ed12c6443b18f6f24d36e9c438d6
 | 
					 | 
				
			||||||
      systemd.user.services.volnoti.Service.ExecStart = lib.mkForce "${pkgs.volnoti}/bin/volnoti -v -n";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      xsession.windowManager.i3.config = {
 | 
					      xsession.windowManager.i3.config = {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Make sure that Volnoti actually starts (home-manager doesn't start
 | 
					        # Make sure that Volnoti actually starts (home-manager doesn't start
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,16 +37,16 @@
 | 
				
			|||||||
      # Set up screen position and rotation
 | 
					      # Set up screen position and rotation
 | 
				
			||||||
      setupCommands = ''
 | 
					      setupCommands = ''
 | 
				
			||||||
        ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-1 \
 | 
					        ${pkgs.xorg.xrandr}/bin/xrandr --output DisplayPort-1 \
 | 
				
			||||||
                                            --mode 1920x1200 \
 | 
					 | 
				
			||||||
                                            --pos 1920x0 \
 | 
					 | 
				
			||||||
                                            --rotate left \
 | 
					 | 
				
			||||||
                                        --output HDMI-A-0 \
 | 
					 | 
				
			||||||
                                            --primary \
 | 
					                                            --primary \
 | 
				
			||||||
                                            --mode 1920x1080 \
 | 
					 | 
				
			||||||
                                            --pos 0x560 \
 | 
					 | 
				
			||||||
                                            --rotate normal \
 | 
					                                            --rotate normal \
 | 
				
			||||||
 | 
					                                            --mode 2560x1440 \
 | 
				
			||||||
 | 
					                                            --rate 165 \
 | 
				
			||||||
 | 
					                                        --output DisplayPort-2 \
 | 
				
			||||||
 | 
					                                            --right-of DisplayPort-1 \
 | 
				
			||||||
 | 
					                                            --rotate left \
 | 
				
			||||||
                                        --output DVI-0 --off \
 | 
					                                        --output DVI-0 --off \
 | 
				
			||||||
                                        --output DVI-1 --off \
 | 
					                                        --output DVI-1 --off \
 | 
				
			||||||
 | 
					                                        || echo "xrandr failed"
 | 
				
			||||||
      '';
 | 
					      '';
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  config = lib.mkIf (config.physical && !config.server) {
 | 
					  config = lib.mkIf (config.physical && !config.server) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Use power button to sleep instead of poweroff
 | 
				
			||||||
 | 
					    services.logind.powerKey = "suspend";
 | 
				
			||||||
 | 
					    services.logind.powerKeyLongPress = "poweroff";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Prevent wake from keyboard
 | 
					    # Prevent wake from keyboard
 | 
				
			||||||
    powerManagement.powerDownCommands = ''
 | 
					    powerManagement.powerDownCommands = ''
 | 
				
			||||||
      set +e
 | 
					      set +e
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										74
									
								
								modules/nixos/services/actualbudget.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								modules/nixos/services/actualbudget.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,74 @@
 | 
				
			|||||||
 | 
					{ config, lib, ... }:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  options = {
 | 
				
			||||||
 | 
					    services.actualbudget = {
 | 
				
			||||||
 | 
					      enable = lib.mkEnableOption "ActualBudget budgeting service";
 | 
				
			||||||
 | 
					      port = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.port;
 | 
				
			||||||
 | 
					        description = "Port to use for the localhost";
 | 
				
			||||||
 | 
					        default = 5006;
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  config = lib.mkIf config.services.actualbudget.enable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtualisation.podman.enable = lib.mkDefault true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    users.users.actualbudget = {
 | 
				
			||||||
 | 
					      isSystemUser = true;
 | 
				
			||||||
 | 
					      group = "shared";
 | 
				
			||||||
 | 
					      uid = 980;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Create budget directory, allowing others to manage it
 | 
				
			||||||
 | 
					    systemd.tmpfiles.rules = [
 | 
				
			||||||
 | 
					      "d /var/lib/actualbudget 0770 actualbudget shared"
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    virtualisation.oci-containers.containers.actualbudget = {
 | 
				
			||||||
 | 
					      workdir = null;
 | 
				
			||||||
 | 
					      volumes = [ "/var/lib/actualbudget:/data" ];
 | 
				
			||||||
 | 
					      user = "${toString (builtins.toString config.users.users.actualbudget.uid)}";
 | 
				
			||||||
 | 
					      pull = "missing";
 | 
				
			||||||
 | 
					      privileged = false;
 | 
				
			||||||
 | 
					      ports = [ "127.0.0.1:${builtins.toString config.services.actualbudget.port}:5006" ];
 | 
				
			||||||
 | 
					      networks = [ ];
 | 
				
			||||||
 | 
					      log-driver = "journald";
 | 
				
			||||||
 | 
					      labels = {
 | 
				
			||||||
 | 
					        app = "actualbudget";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      image = "ghcr.io/actualbudget/actual-server:25.1.0";
 | 
				
			||||||
 | 
					      hostname = null;
 | 
				
			||||||
 | 
					      environmentFiles = [ ];
 | 
				
			||||||
 | 
					      environment = {
 | 
				
			||||||
 | 
					        DEBUG = "actual:config"; # Enable debug logging
 | 
				
			||||||
 | 
					        ACTUAL_TRUSTED_PROXIES = builtins.concatStringsSep "," [ "127.0.0.1" ];
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      dependsOn = [ ];
 | 
				
			||||||
 | 
					      autoStart = true;
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Allow web traffic to Caddy
 | 
				
			||||||
 | 
					    caddy.routes = [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        match = [ { host = [ config.hostnames.budget ]; } ];
 | 
				
			||||||
 | 
					        handle = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            handler = "reverse_proxy";
 | 
				
			||||||
 | 
					            upstreams = [ { dial = "localhost:${builtins.toString config.services.actualbudget.port}"; } ];
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Configure Cloudflare DNS to point to this machine
 | 
				
			||||||
 | 
					    services.cloudflare-dyndns.domains = [ config.hostnames.budget ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Backups
 | 
				
			||||||
 | 
					    services.restic.backups.default.paths = [ "/var/lib/actualbudget" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -44,41 +44,44 @@ in
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  config = lib.mkIf config.arrs.enable {
 | 
					  config = lib.mkIf config.arrs.enable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Broken on 2024-12-07
 | 
				
			||||||
 | 
					    # https://discourse.nixos.org/t/solved-sonarr-is-broken-in-24-11-unstable-aka-how-the-hell-do-i-use-nixpkgs-config-permittedinsecurepackages/
 | 
				
			||||||
 | 
					    insecurePackages = [
 | 
				
			||||||
 | 
					      "aspnetcore-runtime-wrapped-6.0.36"
 | 
				
			||||||
 | 
					      "aspnetcore-runtime-6.0.36"
 | 
				
			||||||
 | 
					      "dotnet-sdk-wrapped-6.0.428"
 | 
				
			||||||
 | 
					      "dotnet-sdk-6.0.428"
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    services = {
 | 
					    services = {
 | 
				
			||||||
      bazarr = {
 | 
					      bazarr = {
 | 
				
			||||||
        enable = true;
 | 
					        enable = true;
 | 
				
			||||||
        group = "media";
 | 
					        group = "shared";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      jellyseerr.enable = true;
 | 
					      jellyseerr.enable = true;
 | 
				
			||||||
      prowlarr.enable = true;
 | 
					      prowlarr.enable = true;
 | 
				
			||||||
      sabnzbd = {
 | 
					      sabnzbd = {
 | 
				
			||||||
        enable = true;
 | 
					        enable = true;
 | 
				
			||||||
        group = "media";
 | 
					        group = "shared";
 | 
				
			||||||
        # The config file must be editable within the application
 | 
					        # The config file must be editable within the application
 | 
				
			||||||
        # It contains server configs and credentials
 | 
					        # It contains server configs and credentials
 | 
				
			||||||
        configFile = "/data/downloads/sabnzbd/sabnzbd.ini";
 | 
					        configFile = "/data/downloads/sabnzbd/sabnzbd.ini";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      sonarr = {
 | 
					      sonarr = {
 | 
				
			||||||
        enable = true;
 | 
					        enable = true;
 | 
				
			||||||
        group = "media";
 | 
					        group = "shared";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      radarr = {
 | 
					      radarr = {
 | 
				
			||||||
        enable = true;
 | 
					        enable = true;
 | 
				
			||||||
        group = "media";
 | 
					        group = "shared";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      readarr = {
 | 
					      readarr = {
 | 
				
			||||||
        enable = true;
 | 
					        enable = true;
 | 
				
			||||||
        group = "media";
 | 
					        group = "shared";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Create a media group to be shared between services
 | 
					    # Allows shared group to read/write the sabnzbd directory
 | 
				
			||||||
    users.groups.media = { };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Give the human user access to the media group
 | 
					 | 
				
			||||||
    users.users.${config.user}.extraGroups = [ "media" ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Allows media group to read/write the sabnzbd directory
 | 
					 | 
				
			||||||
    users.users.sabnzbd.homeMode = "0770";
 | 
					    users.users.sabnzbd.homeMode = "0770";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    unfreePackages = [ "unrar" ]; # Required as a dependency for sabnzbd
 | 
					    unfreePackages = [ "unrar" ]; # Required as a dependency for sabnzbd
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,6 +4,7 @@
 | 
				
			|||||||
  config = lib.mkIf config.services.audiobookshelf.enable {
 | 
					  config = lib.mkIf config.services.audiobookshelf.enable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    services.audiobookshelf = {
 | 
					    services.audiobookshelf = {
 | 
				
			||||||
 | 
					      group = "shared";
 | 
				
			||||||
      dataDir = "audiobookshelf";
 | 
					      dataDir = "audiobookshelf";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,15 +24,6 @@
 | 
				
			|||||||
    # Configure Cloudflare DNS to point to this machine
 | 
					    # Configure Cloudflare DNS to point to this machine
 | 
				
			||||||
    services.cloudflare-dyndns.domains = [ config.hostnames.audiobooks ];
 | 
					    services.cloudflare-dyndns.domains = [ config.hostnames.audiobooks ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Grant user access to Audiobookshelf directories
 | 
					 | 
				
			||||||
    users.users.${config.user}.extraGroups = [ config.services.audiobookshelf.group ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Grant audiobookshelf access to media and Calibre directories
 | 
					 | 
				
			||||||
    users.users.${config.services.audiobookshelf.user}.extraGroups = [
 | 
					 | 
				
			||||||
      "media"
 | 
					 | 
				
			||||||
      "calibre-web"
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,6 +22,11 @@
 | 
				
			|||||||
        description = "S3 access key ID for backups";
 | 
					        description = "S3 access key ID for backups";
 | 
				
			||||||
        default = null;
 | 
					        default = null;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					      resticBucket = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.nullOr lib.types.str;
 | 
				
			||||||
 | 
					        description = "S3 bucket for restic backups";
 | 
				
			||||||
 | 
					        default = null;
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -46,7 +51,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # Broken on 2024-08-23
 | 
					    # Broken on 2024-08-23
 | 
				
			||||||
    # https://github.com/NixOS/nixpkgs/commit/0875d0ce1c778f344cd2377a5337a45385d6ffa0
 | 
					    # https://github.com/NixOS/nixpkgs/commit/0875d0ce1c778f344cd2377a5337a45385d6ffa0
 | 
				
			||||||
    nixpkgs.config.permittedInsecurePackages = [ "litestream-0.3.13" ];
 | 
					    insecurePackages = [ "litestream-0.3.13" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Wait for secret to exist
 | 
					    # Wait for secret to exist
 | 
				
			||||||
    systemd.services.litestream = {
 | 
					    systemd.services.litestream = {
 | 
				
			||||||
@@ -69,5 +74,30 @@
 | 
				
			|||||||
    #   timerConfig = { OnCalendar = "00:05:00"; };
 | 
					    #   timerConfig = { OnCalendar = "00:05:00"; };
 | 
				
			||||||
    #   environmentFile = backup.s3File;
 | 
					    #   environmentFile = backup.s3File;
 | 
				
			||||||
    # };
 | 
					    # };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    secrets.s3-glacier = {
 | 
				
			||||||
 | 
					      source = ../../../private/s3-glacier.age;
 | 
				
			||||||
 | 
					      dest = "${config.secretsDirectory}/s3-glacier";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    secrets.restic = {
 | 
				
			||||||
 | 
					      source = ../../../private/restic.age;
 | 
				
			||||||
 | 
					      dest = "${config.secretsDirectory}/restic";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    services.restic.backups = lib.mkIf (config.backup.s3.resticBucket != null) {
 | 
				
			||||||
 | 
					      default = {
 | 
				
			||||||
 | 
					        repository = "s3:s3.us-east-1.amazonaws.com/${config.backup.s3.resticBucket}/restic";
 | 
				
			||||||
 | 
					        paths = [ ];
 | 
				
			||||||
 | 
					        environmentFile = config.secrets.s3-glacier.dest;
 | 
				
			||||||
 | 
					        passwordFile = config.secrets.restic.dest;
 | 
				
			||||||
 | 
					        pruneOpts = [
 | 
				
			||||||
 | 
					          "--keep-daily 14"
 | 
				
			||||||
 | 
					          "--keep-weekly 6"
 | 
				
			||||||
 | 
					          "--keep-monthly 12"
 | 
				
			||||||
 | 
					          "--keep-yearly 100"
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,6 +20,7 @@ let
 | 
				
			|||||||
    config.hostnames.content
 | 
					    config.hostnames.content
 | 
				
			||||||
    config.hostnames.books
 | 
					    config.hostnames.books
 | 
				
			||||||
    config.hostnames.download
 | 
					    config.hostnames.download
 | 
				
			||||||
 | 
					    config.hostnames.photos
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
  mkRecord = service: "${service}       A       ${localIp}";
 | 
					  mkRecord = service: "${service}       A       ${localIp}";
 | 
				
			||||||
  localRecords = lib.concatLines (map mkRecord localServices);
 | 
					  localRecords = lib.concatLines (map mkRecord localServices);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,7 @@ in
 | 
				
			|||||||
  config = lib.mkIf config.services.calibre-web.enable {
 | 
					  config = lib.mkIf config.services.calibre-web.enable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    services.calibre-web = {
 | 
					    services.calibre-web = {
 | 
				
			||||||
 | 
					      group = "shared";
 | 
				
			||||||
      openFirewall = true;
 | 
					      openFirewall = true;
 | 
				
			||||||
      options = {
 | 
					      options = {
 | 
				
			||||||
        reverseProxyAuth.enable = false;
 | 
					        reverseProxyAuth.enable = false;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  imports = [
 | 
					  imports = [
 | 
				
			||||||
 | 
					    ./actualbudget.nix
 | 
				
			||||||
    ./audiobookshelf.nix
 | 
					    ./audiobookshelf.nix
 | 
				
			||||||
    ./arr.nix
 | 
					    ./arr.nix
 | 
				
			||||||
    ./backups.nix
 | 
					    ./backups.nix
 | 
				
			||||||
@@ -15,6 +16,7 @@
 | 
				
			|||||||
    ./cloudflare.nix
 | 
					    ./cloudflare.nix
 | 
				
			||||||
    ./filebrowser.nix
 | 
					    ./filebrowser.nix
 | 
				
			||||||
    ./identity.nix
 | 
					    ./identity.nix
 | 
				
			||||||
 | 
					    ./immich.nix
 | 
				
			||||||
    ./irc.nix
 | 
					    ./irc.nix
 | 
				
			||||||
    ./gitea-runner.nix
 | 
					    ./gitea-runner.nix
 | 
				
			||||||
    ./gitea.nix
 | 
					    ./gitea.nix
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,12 +5,6 @@
 | 
				
			|||||||
  ...
 | 
					  ...
 | 
				
			||||||
}:
 | 
					}:
 | 
				
			||||||
let
 | 
					let
 | 
				
			||||||
  user =
 | 
					 | 
				
			||||||
    if config.services.nextcloud.enable then
 | 
					 | 
				
			||||||
      config.services.phpfpm.pools.nextcloud.user
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      "filebrowser";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  dataDir = "/var/lib/filebrowser";
 | 
					  dataDir = "/var/lib/filebrowser";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  settings = {
 | 
					  settings = {
 | 
				
			||||||
@@ -43,15 +37,15 @@ in
 | 
				
			|||||||
      startLimitBurst = 10;
 | 
					      startLimitBurst = 10;
 | 
				
			||||||
      serviceConfig = {
 | 
					      serviceConfig = {
 | 
				
			||||||
        ExecStart = "${pkgs.filebrowser}/bin/filebrowser";
 | 
					        ExecStart = "${pkgs.filebrowser}/bin/filebrowser";
 | 
				
			||||||
        DynamicUser = !config.services.nextcloud.enable; # Unique user if not using Nextcloud
 | 
					        DynamicUser = true;
 | 
				
			||||||
        User = user;
 | 
					        Group = "shared";
 | 
				
			||||||
        Group = user;
 | 
					 | 
				
			||||||
        ReadWritePaths = [ dataDir ];
 | 
					        ReadWritePaths = [ dataDir ];
 | 
				
			||||||
        StateDirectory = [ "filebrowser" ];
 | 
					        StateDirectory = [ "filebrowser" ];
 | 
				
			||||||
        Restart = "on-failure";
 | 
					        Restart = "on-failure";
 | 
				
			||||||
        RestartPreventExitStatus = 1;
 | 
					        RestartPreventExitStatus = 1;
 | 
				
			||||||
        RestartSec = "5s";
 | 
					        RestartSec = "5s";
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
 | 
					      path = [ pkgs.getent ]; # Fix: getent not found in $PATH
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    caddy.routes = [
 | 
					    caddy.routes = [
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										48
									
								
								modules/nixos/services/immich.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								modules/nixos/services/immich.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					{ config, lib, ... }:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  config = lib.mkIf config.services.immich.enable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    services.immich = {
 | 
				
			||||||
 | 
					      port = 2283;
 | 
				
			||||||
 | 
					      group = "shared";
 | 
				
			||||||
 | 
					      database.enable = true;
 | 
				
			||||||
 | 
					      redis.enable = true;
 | 
				
			||||||
 | 
					      machine-learning.enable = true;
 | 
				
			||||||
 | 
					      machine-learning.environment = { };
 | 
				
			||||||
 | 
					      mediaLocation = "/data/images";
 | 
				
			||||||
 | 
					      secretsFile = null;
 | 
				
			||||||
 | 
					      settings.server.externalDomain = "https://${config.hostnames.photos}";
 | 
				
			||||||
 | 
					      environment = {
 | 
				
			||||||
 | 
					        IMMICH_ENV = "production";
 | 
				
			||||||
 | 
					        IMMICH_LOG_LEVEL = "log";
 | 
				
			||||||
 | 
					        NO_COLOR = "false";
 | 
				
			||||||
 | 
					        IMMICH_TRUSTED_PROXIES = "127.0.0.1";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    caddy.routes = [
 | 
				
			||||||
 | 
					      {
 | 
				
			||||||
 | 
					        match = [ { host = [ config.hostnames.photos ]; } ];
 | 
				
			||||||
 | 
					        handle = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            handler = "reverse_proxy";
 | 
				
			||||||
 | 
					            upstreams = [ { dial = "localhost:${builtins.toString config.services.immich.port}"; } ];
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Configure Cloudflare DNS to point to this machine
 | 
				
			||||||
 | 
					    services.cloudflare-dyndns.domains = [ config.hostnames.photos ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Point localhost to the local domain
 | 
				
			||||||
 | 
					    networking.hosts."127.0.0.1" = [ config.hostnames.photos ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Backups
 | 
				
			||||||
 | 
					    services.restic.backups.default.paths = [ "/data/images" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -11,7 +11,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  config = lib.mkIf config.services.jellyfin.enable {
 | 
					  config = lib.mkIf config.services.jellyfin.enable {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    services.jellyfin.group = "media";
 | 
					    services.jellyfin.group = "shared";
 | 
				
			||||||
    users.users.jellyfin = {
 | 
					    users.users.jellyfin = {
 | 
				
			||||||
      isSystemUser = true;
 | 
					      isSystemUser = true;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@@ -49,8 +49,8 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # Create videos directory, allow anyone in Jellyfin group to manage it
 | 
					    # Create videos directory, allow anyone in Jellyfin group to manage it
 | 
				
			||||||
    systemd.tmpfiles.rules = [
 | 
					    systemd.tmpfiles.rules = [
 | 
				
			||||||
      "d /var/lib/jellyfin 0775 jellyfin media"
 | 
					      "d /var/lib/jellyfin 0775 jellyfin shared"
 | 
				
			||||||
      "d /var/lib/jellyfin/library 0775 jellyfin media"
 | 
					      "d /var/lib/jellyfin/library 0775 jellyfin shared"
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Enable VA-API for hardware transcoding
 | 
					    # Enable VA-API for hardware transcoding
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,5 +57,9 @@
 | 
				
			|||||||
    systemd.services.paperless-web.serviceConfig.UMask = lib.mkForce "0026";
 | 
					    systemd.services.paperless-web.serviceConfig.UMask = lib.mkForce "0026";
 | 
				
			||||||
    systemd.services.paperless-scheduler.serviceConfig.UMask = lib.mkForce "0026";
 | 
					    systemd.services.paperless-scheduler.serviceConfig.UMask = lib.mkForce "0026";
 | 
				
			||||||
    systemd.services.paperless-task-queue.serviceConfig.UMask = lib.mkForce "0026";
 | 
					    systemd.services.paperless-task-queue.serviceConfig.UMask = lib.mkForce "0026";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Backups
 | 
				
			||||||
 | 
					    services.restic.backups.default.paths = [ "/data/generic/paperless/documents" ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,6 +10,7 @@
 | 
				
			|||||||
    ./auto-upgrade.nix
 | 
					    ./auto-upgrade.nix
 | 
				
			||||||
    ./doas.nix
 | 
					    ./doas.nix
 | 
				
			||||||
    ./journald.nix
 | 
					    ./journald.nix
 | 
				
			||||||
 | 
					    ./shared.nix
 | 
				
			||||||
    ./user.nix
 | 
					    ./user.nix
 | 
				
			||||||
    ./timezone.nix
 | 
					    ./timezone.nix
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								modules/nixos/system/shared.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								modules/nixos/system/shared.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
				
			|||||||
 | 
					{ config, lib, ... }:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  config = lib.mkIf config.server {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Create a shared group for many services
 | 
				
			||||||
 | 
					    users.groups.shared = { };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Give the human user access to the shared group
 | 
				
			||||||
 | 
					    users.users.${config.user}.extraGroups = [ config.users.groups.shared.name ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -8,22 +8,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  config = lib.mkIf pkgs.stdenv.isLinux {
 | 
					  config = lib.mkIf pkgs.stdenv.isLinux {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    services.tzupdate.enable = true;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Service to determine location for time zone
 | 
					    # Service to determine location for time zone
 | 
				
			||||||
 | 
					    # This is required for redshift which depends on the location provider
 | 
				
			||||||
    services.geoclue2.enable = true;
 | 
					    services.geoclue2.enable = true;
 | 
				
			||||||
    services.geoclue2.enableWifi = false; # Breaks when it can't connect
 | 
					    services.geoclue2.enableWifi = false; # Breaks when it can't connect
 | 
				
			||||||
    location = {
 | 
					    location = {
 | 
				
			||||||
      provider = "geoclue2";
 | 
					      provider = "geoclue2";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Enable local time based on time zone
 | 
					 | 
				
			||||||
    services.localtimed.enable = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Required to get localtimed to talk to geoclue2
 | 
					 | 
				
			||||||
    services.geoclue2.appConfig.localtimed.isSystem = true;
 | 
					 | 
				
			||||||
    services.geoclue2.appConfig.localtimed.isAllowed = true;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Fix "Failed to set timezone"
 | 
					 | 
				
			||||||
    # https://github.com/NixOS/nixpkgs/issues/68489#issuecomment-1484030107
 | 
					 | 
				
			||||||
    services.geoclue2.enableDemoAgent = lib.mkForce true;
 | 
					 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
# Add disko to nixpkgs from its input flake
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
inputs: _final: prev: { disko = inputs.disko.packages.${prev.system}.disko; }
 | 
					 | 
				
			||||||
@@ -2,11 +2,10 @@ inputs: _final: prev: {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  gh-collaborators = prev.buildGoModule rec {
 | 
					  gh-collaborators = prev.buildGoModule rec {
 | 
				
			||||||
    pname = "gh-collaborators";
 | 
					    pname = "gh-collaborators";
 | 
				
			||||||
    version = "v2.0.3";
 | 
					    version = "v3.0.0";
 | 
				
			||||||
    src = inputs.gh-collaborators;
 | 
					    src = inputs.gh-collaborators;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # vendorHash = "sha256-rsRDOgJBa8T6+bC/APcmuRmg6ykbIp9pwRnJ9rrfHEs=";
 | 
					    vendorHash = "sha256-9qmvG2q9t1Zj8yhKFyA99IaJ90R/gRVdQVjdliVKLRE";
 | 
				
			||||||
    vendorHash = "sha256-fykxRb2U9DDsXorRTLiVWmhMY89N7RS07sal8ww6gz4=";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ldflags = [
 | 
					    ldflags = [
 | 
				
			||||||
      "-s"
 | 
					      "-s"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										44
									
								
								overlays/volnoti.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								overlays/volnoti.nix
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					# Fix: Volnoti error: 'volnoti' has been removed due to lack of maintenance upstream.
 | 
				
			||||||
 | 
					_final: prev: {
 | 
				
			||||||
 | 
					  volnoti = prev.stdenv.mkDerivation {
 | 
				
			||||||
 | 
					    pname = "volnoti-unstable";
 | 
				
			||||||
 | 
					    version = "2013-09-23";
 | 
				
			||||||
 | 
					    src = prev.fetchFromGitHub {
 | 
				
			||||||
 | 
					      owner = "davidbrazdil";
 | 
				
			||||||
 | 
					      repo = "volnoti";
 | 
				
			||||||
 | 
					      rev = "4af7c8e54ecc499097121909f02ecb42a8a60d24";
 | 
				
			||||||
 | 
					      sha256 = "155lb7w563dkdkdn4752hl0zjhgnq3j4cvs9z98nb25k1xpmpki7";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					    patches = [
 | 
				
			||||||
 | 
					      # Fix dbus interface headers. See
 | 
				
			||||||
 | 
					      # https://github.com/davidbrazdil/volnoti/pull/10
 | 
				
			||||||
 | 
					      (prev.fetchpatch {
 | 
				
			||||||
 | 
					        url = "https://github.com/davidbrazdil/volnoti/commit/623ad8ea5c3ac8720d00a2ced4b6163aae38c119.patch";
 | 
				
			||||||
 | 
					        sha256 = "046zfdjmvhb7jrsgh04vfgi35sgy1zkrhd3bzdby3nvds1wslfam";
 | 
				
			||||||
 | 
					      })
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    nativeBuildInputs = with prev; [
 | 
				
			||||||
 | 
					      pkg-config
 | 
				
			||||||
 | 
					      autoreconfHook
 | 
				
			||||||
 | 
					      wrapGAppsHook3
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    buildInputs = with prev; [
 | 
				
			||||||
 | 
					      dbus
 | 
				
			||||||
 | 
					      gdk-pixbuf
 | 
				
			||||||
 | 
					      glib
 | 
				
			||||||
 | 
					      xorg.libX11
 | 
				
			||||||
 | 
					      gtk2
 | 
				
			||||||
 | 
					      dbus-glib
 | 
				
			||||||
 | 
					      librsvg
 | 
				
			||||||
 | 
					    ];
 | 
				
			||||||
 | 
					    meta = with prev.lib; {
 | 
				
			||||||
 | 
					      description = "Lightweight volume notification for Linux";
 | 
				
			||||||
 | 
					      homepage = "https://github.com/davidbrazdil/volnoti";
 | 
				
			||||||
 | 
					      license = licenses.gpl3;
 | 
				
			||||||
 | 
					      platforms = platforms.linux;
 | 
				
			||||||
 | 
					      maintainers = [ ];
 | 
				
			||||||
 | 
					      # Broken by https://github.com/nix-community/home-manager/pull/5725/commits/98bf8de65dc1ed12c6443b18f6f24d36e9c438d6
 | 
				
			||||||
 | 
					      mainProgram = "volnoti";
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										17
									
								
								private/restic.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								private/restic.age
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
				
			|||||||
 | 
					-----BEGIN AGE ENCRYPTED FILE-----
 | 
				
			||||||
 | 
					YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyAvWi9T
 | 
				
			||||||
 | 
					NnFzUnlKUGord21NUy9OT1NDRjhIbFB6MUc3TzgwVzY3OHpFSlN3CmhuNFY1L1FB
 | 
				
			||||||
 | 
					VFBHY1lNNjFYdFZyeHoxZUZyTFdpVHhqM1JqMUM3YWljVUUKLT4gc3NoLWVkMjU1
 | 
				
			||||||
 | 
					MTkgWXlTVU1RIFI4aGU5Z2NUeGNSNmEzNFk0anBBbUw0NUtHTE55WmgxOUN0T1p1
 | 
				
			||||||
 | 
					QUZyR2cKeTNack0vMVVsNTFMbmFSUXdUUkw2MTlnSzhRajVSWXJvZmV2QjlFcUZY
 | 
				
			||||||
 | 
					QQotPiBzc2gtZWQyNTUxOSBuanZYNUEgc01kWFdYS3BBay96Uzd5cG1MMlNMNXhQ
 | 
				
			||||||
 | 
					NTV4NVpvc2lLZkpLWkhZZlRrVQo0SXJhWUVMVUtYb1hEOEtJUnJoY2t0OUlpQVY2
 | 
				
			||||||
 | 
					UUZYdHpBcWRvUU0yRHlvCi0+IHNzaC1lZDI1NTE5IENxSU9VQSB2NTZHWUd2c3o1
 | 
				
			||||||
 | 
					c0NKTThaMkgyeG54Nmw1dHZBQkZoYmJkOTZNcnVyMUJVCldzQ1NHNk8vTGRMNHlM
 | 
				
			||||||
 | 
					eU0yYmltMkhlUjY2NWxhdHQ2N3BMUjdzTk9PMFkKLT4gc3NoLWVkMjU1MTkgejFP
 | 
				
			||||||
 | 
					Y1p3IHh3OEEzTmIrQXhtSTE2REFUV1loVE5vNTRUbEJmNEE4YmhBckRmZGpwVXMK
 | 
				
			||||||
 | 
					OEo5RXdwU1JuY3FPQnJNQ1hMdHJxcE4xVnVVWVVLREROYjNsZkN3ZzV2cwotLS0g
 | 
				
			||||||
 | 
					aXMrandHZTJzME95VFRuUDRzWDQ5Z3N5RGxVOUUxQ1FGNGpvN3Y4SllSNApAOIi/
 | 
				
			||||||
 | 
					0iP9cccbkUqLZJicpIlKAP+QsYM8Bfb/wYyaQPnh4vlKqil4LpQEfFW+/J82DIti
 | 
				
			||||||
 | 
					8o/ddK8YDlLg3lwyiZ2dUm3O87jA7KEgd/g=
 | 
				
			||||||
 | 
					-----END AGE ENCRYPTED FILE-----
 | 
				
			||||||
							
								
								
									
										18
									
								
								private/s3-glacier.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								private/s3-glacier.age
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					-----BEGIN AGE ENCRYPTED FILE-----
 | 
				
			||||||
 | 
					YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IE1nSGFPdyBuQTZM
 | 
				
			||||||
 | 
					TTg0ai9yNi9Ia3pFNW0vb3JQczZtVEVyNkFNVzBlUVpVd3ZBbndrCklqdS8zeGky
 | 
				
			||||||
 | 
					WEN0YW5xck5sSXpXeFZCbHY0NHhDMU5SeGlaYmN4Szc0b1EKLT4gc3NoLWVkMjU1
 | 
				
			||||||
 | 
					MTkgWXlTVU1RIGJVZTZBdERTNUt6d0sxeGVOcnRtNmdCSlRKWUNjRHByMkZucUlz
 | 
				
			||||||
 | 
					Nm5FMTQKbHFtNnM4ZCtzdFNTa214ZVRkaFdmZnFYOCs1Z25YTDVVKzloYUVHVlg1
 | 
				
			||||||
 | 
					cwotPiBzc2gtZWQyNTUxOSBuanZYNUEgOXFwSzByaUdidFRWbE5seFNEVDYxRWtq
 | 
				
			||||||
 | 
					OXZURnEzVWphM0VoVnJvSURoUQpGbEt4YmcraDZOcXRTQUF1ekw4RTRCN2JRR1NK
 | 
				
			||||||
 | 
					QlRQaGRZd1RIMWNiRWpjCi0+IHNzaC1lZDI1NTE5IENxSU9VQSBzTTVsbnVjWUxt
 | 
				
			||||||
 | 
					L0hyM21RS2w2a2NIY2xvSmZ0OUdDWGFVcG5IYlNhUFNzClY1bmdNUkRYR2QyYVFW
 | 
				
			||||||
 | 
					VHF3enZqUlZqUWlvZlI2aHZrREdwZGUwdzdXUHMKLT4gc3NoLWVkMjU1MTkgejFP
 | 
				
			||||||
 | 
					Y1p3IDN4cThQRjdvTWJ2S2FaMjZ0RHlDeElDc1BuU0JDSzlpcFdzT2ZhLzA1QmcK
 | 
				
			||||||
 | 
					TjlFMkgzOFhKbkdvUWt2SGhaUUJXdjBxK2hUeE1sSzBsNWJyNG8rUlZRbwotLS0g
 | 
				
			||||||
 | 
					SGw4VmpCMktjQ0ZpUExnWUtsOHhHS0tZckoxeTdtZXMyVXpWT09Ea1NUMAoRRzA+
 | 
				
			||||||
 | 
					0rbfJ+eVeccDaulmqh+Wv3T1/+SQQJYD5trume3vSzXgRxJYeXR/BespsDzWJ3yg
 | 
				
			||||||
 | 
					McHYNvEK76stD3vopKvpDU3Nk861xp++SavJtrIVKon6YJl6a6Ox+GxhrNk0+5f9
 | 
				
			||||||
 | 
					xgDWhIHwzHLPvyseYNjRFy8GsYaP2tT9TGMrQHFTAKeuvA==
 | 
				
			||||||
 | 
					-----END AGE ENCRYPTED FILE-----
 | 
				
			||||||
		Reference in New Issue
	
	Block a user