Restructuring #1
							
								
								
									
										60
									
								
								flake.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								flake.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | |||||||
|  | { | ||||||
|  |   "nodes": { | ||||||
|  |     "glue": { | ||||||
|  |       "locked": { | ||||||
|  |         "path": "./glue", | ||||||
|  |         "type": "path" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "path": "./glue", | ||||||
|  |         "type": "path" | ||||||
|  |       }, | ||||||
|  |       "parent": [] | ||||||
|  |     }, | ||||||
|  |     "home-manager": { | ||||||
|  |       "inputs": { | ||||||
|  |         "nixpkgs": [ | ||||||
|  |           "nixpkgs" | ||||||
|  |         ] | ||||||
|  |       }, | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1746981801, | ||||||
|  |         "narHash": "sha256-+Bfr0KqZV6gZdA7e2kupeoawozaLIHLuiPtC54uxbFc=", | ||||||
|  |         "owner": "nix-community", | ||||||
|  |         "repo": "home-manager", | ||||||
|  |         "rev": "ff915842e4a2e63c4c8c5c08c6870b9d5b3c3ee9", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "nix-community", | ||||||
|  |         "repo": "home-manager", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "nixpkgs": { | ||||||
|  |       "locked": { | ||||||
|  |         "lastModified": 1746576598, | ||||||
|  |         "narHash": "sha256-FshoQvr6Aor5SnORVvh/ZdJ1Sa2U4ZrIMwKBX5k2wu0=", | ||||||
|  |         "owner": "nixos", | ||||||
|  |         "repo": "nixpkgs", | ||||||
|  |         "rev": "b3582c75c7f21ce0b429898980eddbbf05c68e55", | ||||||
|  |         "type": "github" | ||||||
|  |       }, | ||||||
|  |       "original": { | ||||||
|  |         "owner": "nixos", | ||||||
|  |         "ref": "nixpkgs-unstable", | ||||||
|  |         "repo": "nixpkgs", | ||||||
|  |         "type": "github" | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|  |     "root": { | ||||||
|  |       "inputs": { | ||||||
|  |         "glue": "glue", | ||||||
|  |         "home-manager": "home-manager", | ||||||
|  |         "nixpkgs": "nixpkgs" | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  |   "root": "root", | ||||||
|  |   "version": 7 | ||||||
|  | } | ||||||
							
								
								
									
										86
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								flake.nix
									
									
									
									
									
								
							| @ -1,88 +1,12 @@ | |||||||
| { | { | ||||||
|   description = "NixOS system"; |   description = "System configuration for NixOS"; | ||||||
| 
 | 
 | ||||||
|   inputs = { |   inputs = { | ||||||
|  |     glue.url = "./glue"; | ||||||
|     nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; |     nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; | ||||||
|     home-manager = { |     home-manager.url = "github:nix-community/home-manager"; | ||||||
|       url = "github:nix-community/home-manager"; |     home-manager.inputs.nixpkgs.follows = "nixpkgs"; | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
|     stylix.url = "github:danth/stylix"; |  | ||||||
|     nixvim.url = "github:nix-community/nixvim"; |  | ||||||
|     nur = { |  | ||||||
|       url = "github:nix-community/NUR"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
|     nix-matlab = { |  | ||||||
|       url = "gitlab:doronbehar/nix-matlab"; |  | ||||||
|       inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|     }; |  | ||||||
|     flake-utils.url = "github:numtide/flake-utils"; |  | ||||||
|     nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   outputs = |   outputs = inputs: inputs.glue { inherit inputs; }; | ||||||
|     { |  | ||||||
|       self, |  | ||||||
|       nixpkgs, |  | ||||||
|       home-manager, |  | ||||||
|       stylix, |  | ||||||
|       nixvim, |  | ||||||
|       nur, |  | ||||||
|       nix-matlab, |  | ||||||
|       nixos-cosmic, |  | ||||||
|       ... |  | ||||||
|     }: |  | ||||||
|     let |  | ||||||
|       mkConfig = |  | ||||||
|         system: machineConfig: userConfig: |  | ||||||
|         (nixpkgs.lib.nixosSystem { |  | ||||||
|           inherit system; |  | ||||||
|           specialArgs = { inherit system; }; |  | ||||||
|           modules = [ |  | ||||||
|             machineConfig |  | ||||||
|             home-manager.nixosModules.home-manager |  | ||||||
|             { |  | ||||||
|               nix.settings = { |  | ||||||
|                 substituters = [ "https://cosmic.cachix.org/" ]; |  | ||||||
|                 trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ]; |  | ||||||
|               }; |  | ||||||
|               machine.users = userConfig; |  | ||||||
|               home-manager.extraSpecialArgs = { inherit system; }; |  | ||||||
|               home-manager.sharedModules = [ |  | ||||||
|                 stylix.homeManagerModules.stylix |  | ||||||
|                 nixvim.homeManagerModules.nixvim |  | ||||||
|                 nur.modules.homeManager.default |  | ||||||
|                 { |  | ||||||
|                   nixpkgs.overlays = [ |  | ||||||
|                     nix-matlab.overlay |  | ||||||
|                     nixos-cosmic.overlays.default |  | ||||||
|                   ]; |  | ||||||
|                 } |  | ||||||
|               ]; |  | ||||||
|             } |  | ||||||
|           ]; |  | ||||||
|         }); |  | ||||||
|     in |  | ||||||
|     { |  | ||||||
|       nixosConfigurations = { |  | ||||||
|         "20212060" = mkConfig "x86_64-linux" ./machines/laptop.nix { |  | ||||||
|           jan = { |  | ||||||
|             sudo = true; |  | ||||||
|             configuration = ./users/jan.nix; |  | ||||||
|           }; |  | ||||||
|           berg-van-abstractie = { |  | ||||||
|             sudo = false; |  | ||||||
|             configuration = ./users/comp-prog.nix; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|         "vm-audio" = mkConfig "x86_64-linux" ./machines/vm-audio.nix { |  | ||||||
|           local = { |  | ||||||
|             sudo = true; |  | ||||||
|             configuration = ./users/server.nix; |  | ||||||
|           }; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|       lib = import ./shell-modules/default.nix self.inputs; |  | ||||||
|     }; |  | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								glue/flake.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								glue/flake.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,14 @@ | |||||||
|  | { | ||||||
|  |   description = "Some glue"; | ||||||
|  | 
 | ||||||
|  |   inputs = { }; | ||||||
|  | 
 | ||||||
|  |   outputs = | ||||||
|  |     inputs: | ||||||
|  |     let | ||||||
|  |       glue = import ./lib { inherit inputs; }; | ||||||
|  |     in | ||||||
|  |     { | ||||||
|  |       __functor = _: glue; | ||||||
|  |     }; | ||||||
|  | } | ||||||
							
								
								
									
										167
									
								
								glue/lib/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								glue/lib/default.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,167 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | let | ||||||
|  |   mkGlue = | ||||||
|  |     { | ||||||
|  |       inputs, | ||||||
|  |       ... | ||||||
|  |     }: | ||||||
|  |     let | ||||||
|  |       flake = inputs.self; | ||||||
|  |       nixpkgs = inputs.nixpkgs; | ||||||
|  |       lib = nixpkgs.lib; | ||||||
|  | 
 | ||||||
|  |       importDir = | ||||||
|  |         path: fn: | ||||||
|  |         let | ||||||
|  |           entries = builtins.readDir path; | ||||||
|  | 
 | ||||||
|  |           # Get paths to directories | ||||||
|  |           dirs = lib.filterAttrs (_: type: type == "directory") entries; | ||||||
|  |           dirPaths = lib.mapAttrs (name: type: { | ||||||
|  |             path = "${path}/${name}"; | ||||||
|  |             type = type; | ||||||
|  |           }) dirs; | ||||||
|  | 
 | ||||||
|  |           # Get paths to nix files | ||||||
|  |           nixName = name: builtins.match "(.*)\\.nix" name; | ||||||
|  |           files = lib.filterAttrs (name: type: (type != "directory") && ((nixName name) != null)) entries; | ||||||
|  |           filePaths = lib.mapAttrs' (name: type: { | ||||||
|  |             name = builtins.head (nixName name); | ||||||
|  |             value = { | ||||||
|  |               path = "${path}/${name}"; | ||||||
|  |               type = type; | ||||||
|  |             }; | ||||||
|  |           }) files; | ||||||
|  | 
 | ||||||
|  |           combined = dirPaths // filePaths; | ||||||
|  |         in | ||||||
|  |         fn (lib.optionalAttrs (builtins.pathExists path) combined); | ||||||
|  | 
 | ||||||
|  |       # Split out into getNixFiles, getNixFilesRecursive, getDirs | ||||||
|  |       importDirRecursive = | ||||||
|  |         path: fn: | ||||||
|  |         let | ||||||
|  |           entries = importDir path lib.id; | ||||||
|  | 
 | ||||||
|  |           # Dig down recursively | ||||||
|  |           dirs = lib.filterAttrs (_: entry: entry.type == "directory") entries; | ||||||
|  |           recursedEntries = lib.mapAttrs (name: entry: (importDirRecursive entry.path lib.id)) dirs; | ||||||
|  |         in | ||||||
|  |         fn (entries // recursedEntries); | ||||||
|  | 
 | ||||||
|  |       systems = [ | ||||||
|  |         "x86_64-linux" | ||||||
|  |         "aarch64-linux" | ||||||
|  |       ]; | ||||||
|  | 
 | ||||||
|  |       eachSystem = fn: lib.genAttrs systems fn; | ||||||
|  | 
 | ||||||
|  |       systemArgs = eachSystem (system: { | ||||||
|  |         pkgs = ( | ||||||
|  |           import inputs.nixpkgs { | ||||||
|  |             inherit system; | ||||||
|  |           } | ||||||
|  |         ); | ||||||
|  |       }); | ||||||
|  | 
 | ||||||
|  |       allPackages = importDir "${flake}/packages" ( | ||||||
|  |         attrs: | ||||||
|  |         lib.mapAttrs ( | ||||||
|  |           name: entry: (if entry.type == "directory" then "${entry.path}/default.nix" else entry.path) | ||||||
|  |         ) attrs | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       packages = | ||||||
|  |         let | ||||||
|  |           # TODO: Filter out packages that are not supported on the platform? | ||||||
|  |           mkPackages = | ||||||
|  |             system: | ||||||
|  |             let | ||||||
|  |               args = systemArgs."${system}"; | ||||||
|  |               pkgs = args.pkgs; | ||||||
|  |             in | ||||||
|  |             lib.mapAttrs (name: package: pkgs.callPackage package { }) allPackages; | ||||||
|  |         in | ||||||
|  |         eachSystem mkPackages; | ||||||
|  | 
 | ||||||
|  |       overlay = final: prev: (lib.mapAttrs (name: package: prev.callPackage package { }) allPackages); | ||||||
|  | 
 | ||||||
|  |       collectEntries = | ||||||
|  |         attrs: | ||||||
|  |         lib.attrsets.collect ( | ||||||
|  |           entry: (lib.isAttrs entry) && (lib.hasAttr "path" entry) && (lib.hasAttr "type" entry) | ||||||
|  |         ) attrs; | ||||||
|  | 
 | ||||||
|  |       collectModules = | ||||||
|  |         path: | ||||||
|  |         importDirRecursive path ( | ||||||
|  |           attrs: | ||||||
|  |           map (entry: if entry.type == "directory" then entry.path + "/default.nix" else entry.path) ( | ||||||
|  |             collectEntries attrs | ||||||
|  |           ) | ||||||
|  |         ); | ||||||
|  | 
 | ||||||
|  |       nixosModules = collectModules "${flake}/modules/nixos"; | ||||||
|  | 
 | ||||||
|  |       homeModules = collectModules "${flake}/modules/home"; | ||||||
|  | 
 | ||||||
|  |       overlayModule = | ||||||
|  |         { ... }: | ||||||
|  |         { | ||||||
|  |           nixpkgs.overlays = [ overlay ]; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |       homeManager = inputs.home-manager.nixosModules.home-manager; | ||||||
|  | 
 | ||||||
|  |       nixosConfigurations = importDir "${flake}/hosts" ( | ||||||
|  |         attrs: | ||||||
|  |         lib.mapAttrs ( | ||||||
|  |           name: entry: | ||||||
|  |           lib.nixosSystem { | ||||||
|  |             specialArgs = { | ||||||
|  |               inherit inputs; | ||||||
|  |             }; | ||||||
|  |             modules = | ||||||
|  |               let | ||||||
|  |                 systemPath = "${entry.path}/configuration.nix"; | ||||||
|  | 
 | ||||||
|  |                 userEntries = importDir "${entry.path}/users" lib.id; | ||||||
|  | 
 | ||||||
|  |                 usersConfiguration = lib.mapAttrs (name: entry: { | ||||||
|  |                   isNormalUser = true; | ||||||
|  |                   group = name; | ||||||
|  |                 }) userEntries; | ||||||
|  |                 groupsConfiguration = lib.mapAttrs (name: entry: { | ||||||
|  |                 }) userEntries; | ||||||
|  |                 homesConfiguration = lib.mapAttrs (name: entry: entry.path) userEntries; | ||||||
|  | 
 | ||||||
|  |                 usersModule = | ||||||
|  |                   { ... }: | ||||||
|  |                   { | ||||||
|  |                     home-manager.sharedModules = homeModules; | ||||||
|  |                     home-manager.useUserPackages = false; # TODO: See if this should be changed to true? | ||||||
|  |                     home-manager.useGlobalPkgs = true; | ||||||
|  |                     home-manager.users = homesConfiguration; | ||||||
|  |                     users.users = usersConfiguration; | ||||||
|  |                     users.groups = groupsConfiguration; | ||||||
|  |                   }; | ||||||
|  |               in | ||||||
|  |               [ | ||||||
|  |                 systemPath | ||||||
|  |                 overlayModule | ||||||
|  |                 usersModule | ||||||
|  |                 homeManager | ||||||
|  |               ] | ||||||
|  |               ++ nixosModules; | ||||||
|  |           } | ||||||
|  |         ) (lib.attrsets.filterAttrs (name: entry: entry.type == "directory") attrs) | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |     in | ||||||
|  |     { | ||||||
|  |       inherit packages nixosConfigurations; | ||||||
|  |       overlays.default = overlay; | ||||||
|  |     }; | ||||||
|  | in | ||||||
|  | mkGlue | ||||||
							
								
								
									
										20
									
								
								hosts/20212060/configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								hosts/20212060/configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | { flake, ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   # State version | ||||||
|  |   system.stateVersion = "24.05"; | ||||||
|  | 
 | ||||||
|  |   # Machine hostname | ||||||
|  |   networking.hostName = "20212060"; | ||||||
|  | 
 | ||||||
|  |   # Admin users | ||||||
|  |   users.users.jan.extraGroups = [ "wheel" ]; | ||||||
|  | 
 | ||||||
|  |   modules = { | ||||||
|  |     profiles.laptop.enable = true; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   imports = [ | ||||||
|  |     ./hardware-configuration.nix | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										43
									
								
								hosts/20212060/hardware-configuration.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								hosts/20212060/hardware-configuration.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,43 @@ | |||||||
|  | { ... }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   # Machine platform | ||||||
|  |   nixpkgs.hostPlatform = "x86_64-linux"; | ||||||
|  | 
 | ||||||
|  |   # Hardware configuration | ||||||
|  |   hardware.enableRedistributableFirmware = true; | ||||||
|  |   boot.initrd.availableKernelModules = [ | ||||||
|  |     "xhci_pci" | ||||||
|  |     "nvme" | ||||||
|  |     "usb_storage" | ||||||
|  |     "sd_mod" | ||||||
|  |     "rtsx_pci_sdmmc" | ||||||
|  |   ]; | ||||||
|  |   boot.initrd.kernelModules = [ ]; | ||||||
|  |   boot.kernelModules = [ "kvm-intel" ]; | ||||||
|  |   boot.extraModulePackages = [ ]; | ||||||
|  |   hardware.cpu.intel.updateMicrocode = true; | ||||||
|  | 
 | ||||||
|  |   # Filesystems | ||||||
|  |   fileSystems."/" = { | ||||||
|  |     device = "/dev/disk/by-uuid/3b91eaeb-ea95-4bea-8dc1-f55af7502d23"; | ||||||
|  |     fsType = "ext4"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   fileSystems."/boot" = { | ||||||
|  |     device = "/dev/disk/by-uuid/46BF-DE2C"; | ||||||
|  |     fsType = "vfat"; | ||||||
|  |     options = [ | ||||||
|  |       "fmask=0077" | ||||||
|  |       "dmask=0077" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Swapfile | ||||||
|  |   swapDevices = [ | ||||||
|  |     { | ||||||
|  |       device = "/var/lib/swapfile"; | ||||||
|  |       size = 16 * 1024; | ||||||
|  |     } | ||||||
|  |   ]; | ||||||
|  | } | ||||||
							
								
								
									
										99
									
								
								hosts/20212060/users/jan.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								hosts/20212060/users/jan.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,99 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   home.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   home.packages = with pkgs; [ | ||||||
|  |     libreoffice-still | ||||||
|  |     remmina | ||||||
|  |     thunderbird | ||||||
|  |     signal-desktop | ||||||
|  |     prusa-slicer | ||||||
|  |     freecad-wayland | ||||||
|  |     inkscape | ||||||
|  |     ente-auth | ||||||
|  |     bitwarden | ||||||
|  |     carla | ||||||
|  |     baobab | ||||||
|  |     gnome-calculator | ||||||
|  |     nautilus | ||||||
|  |     winbox | ||||||
|  |     whatsapp-for-linux | ||||||
|  |     discord | ||||||
|  |     steam | ||||||
|  |     spotify | ||||||
|  |     # feishin # TODO: Fix or replace as insecure | ||||||
|  |     eduvpn-client | ||||||
|  |     river # TODO: Move | ||||||
|  |     firefox # TODO: Move to dediated module | ||||||
|  |     ryubing | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   modules = { | ||||||
|  |     # Desktop environment | ||||||
|  |     desktop.gnome.enable = true; | ||||||
|  |     # desktop.tiling.enable = true; | ||||||
|  | 
 | ||||||
|  |     # Browser | ||||||
|  |     # firefox = { | ||||||
|  |     #   enable = true; | ||||||
|  |     #   default = false; | ||||||
|  |     # }; | ||||||
|  |     # qutebrowser = { | ||||||
|  |     #   enable = true; | ||||||
|  |     #   default = true; | ||||||
|  |     # }; | ||||||
|  | 
 | ||||||
|  |     # Gaming | ||||||
|  |     # retroarch.enable = true; | ||||||
|  |     # ryujinx.enable = true; | ||||||
|  | 
 | ||||||
|  |     # Tools | ||||||
|  |     git = { | ||||||
|  |       enable = true; | ||||||
|  |       user = "Jan-Bulthuis"; | ||||||
|  |       email = "git@bulthuis.dev"; | ||||||
|  |       # TODO: Move | ||||||
|  |       ignores = [ | ||||||
|  |         ".envrc" | ||||||
|  |         ".direnv" | ||||||
|  |         "flake.nix" | ||||||
|  |         "flake.lock" | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |     # btop.enable = true; | ||||||
|  |     direnv.enable = true; | ||||||
|  |     fish.enable = true; | ||||||
|  |     # bluetuith.enable = false; | ||||||
|  |     # obsidian.enable = true; | ||||||
|  |     # zathura.enable = true; | ||||||
|  |     # keyring.enable = true; | ||||||
|  |     # scripts.enable = true; | ||||||
|  |     xpra = { | ||||||
|  |       enable = true; | ||||||
|  |       hosts = [ | ||||||
|  |         "mixer@10.20.60.251" | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Development | ||||||
|  |     # neovim.enable = true; | ||||||
|  |     vscode.enable = true; | ||||||
|  |     # docker.enable = true; | ||||||
|  |     # matlab.enable = true; | ||||||
|  |     # mathematica.enable = true; | ||||||
|  | 
 | ||||||
|  |     # Languages | ||||||
|  |     haskell.enable = false; | ||||||
|  |     js.enable = false; | ||||||
|  |     nix.enable = true; | ||||||
|  |     rust.enable = true; | ||||||
|  |     python.enable = true; | ||||||
|  |     cpp.enable = true; | ||||||
|  |     tex.enable = true; | ||||||
|  |     jupyter.enable = false; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										17
									
								
								hosts/20212060/users/test.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								hosts/20212060/users/test.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,17 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   home.stateVersion = "24.11"; | ||||||
|  | 
 | ||||||
|  |   home.packages = with pkgs; [ | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   modules = { | ||||||
|  |     # Desktop environment | ||||||
|  |     # desktop.gnome.enable = true; | ||||||
|  |     # desktop.tiling.enable = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										32
									
								
								modules/home/desktop/gnome/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								modules/home/desktop/gnome/default.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,32 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.desktop.gnome; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.desktop.gnome = { | ||||||
|  |     enable = mkEnableOption "gnome"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # TODO: Enable extensions with dconf | ||||||
|  | 
 | ||||||
|  |     home.packages = | ||||||
|  |       with pkgs; | ||||||
|  |       [ | ||||||
|  |         gnome-control-center | ||||||
|  |         gnome-tweaks | ||||||
|  |         blackbox-terminal | ||||||
|  |       ] | ||||||
|  |       ++ (with pkgs.gnomeExtensions; [ | ||||||
|  |         gsconnect | ||||||
|  |         disable-workspace-animation | ||||||
|  |       ]); | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								modules/home/desktop/tiling/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/home/desktop/tiling/default.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.desktop.tiling; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.desktop.tiling = { | ||||||
|  |     enable = mkEnableOption "tiling desktop"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |      | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										53
									
								
								modules/home/development/git.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								modules/home/development/git.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,53 @@ | |||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.git; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.git = { | ||||||
|  |     enable = mkEnableOption "git"; | ||||||
|  | 
 | ||||||
|  |     user = mkOption { | ||||||
|  |       type = types.str; | ||||||
|  |       description = "Default user name to use."; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     email = mkOption { | ||||||
|  |       type = types.str; | ||||||
|  |       description = "Default user email to use."; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     ignores = mkOption { | ||||||
|  |       type = types.listOf types.str; | ||||||
|  |       default = [ ]; | ||||||
|  |       description = "Paths to globally ignore"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       git | ||||||
|  |       lazygit | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     programs.git = { | ||||||
|  |       enable = true; | ||||||
|  | 
 | ||||||
|  |       extraConfig = { | ||||||
|  |         pull = { | ||||||
|  |           rebase = false; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       userName = cfg.user; | ||||||
|  |       userEmail = cfg.email; | ||||||
|  |       ignores = cfg.ignores; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										50
									
								
								modules/home/development/languages/cpp.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								modules/home/development/languages/cpp.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,50 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.cpp; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.cpp = { | ||||||
|  |     enable = mkEnableOption "cpp"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Gitignore additions | ||||||
|  |     modules.git.ignores = [ | ||||||
|  |       ".ccls-cache" | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # Development packages | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       gnumake | ||||||
|  |       gcc | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # VSCode configuration | ||||||
|  |     programs.vscode = { | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ | ||||||
|  |           ms-vscode.cpptools | ||||||
|  |           ms-vscode.cmake-tools | ||||||
|  |           ms-vscode.cpptools-extension-pack | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = { | ||||||
|  |           # TODO: Add setting to set the compiler, it currently needs to be set for each workspace individually | ||||||
|  |           # "C_Cpp.clang_format_fallbackStyle" = "{ BasedOnStyle: Google, IndentWidth: 4 }"; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Neovim configuration | ||||||
|  |     # programs.nixvim = { | ||||||
|  |     #   plugins.lsp.servers.ccls.enable = true; | ||||||
|  |     # }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										42
									
								
								modules/home/development/languages/haskell.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								modules/home/development/languages/haskell.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,42 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.haskell; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.haskell = { | ||||||
|  |     enable = mkEnableOption "haskell"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Development packages | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       haskell.compiler.ghc948 | ||||||
|  |       (haskell-language-server.override { supportedGhcVersions = [ "948" ]; }) | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # VSCode configuration | ||||||
|  |     programs.vscode = { | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ | ||||||
|  |           haskell.haskell | ||||||
|  |           justusadam.language-haskell | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = { | ||||||
|  |           "[haskell]" = { }; | ||||||
|  |           # "haskell.formattingProvider" = "fourmolu"; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Neovim configuration | ||||||
|  |     # programs.nixvim = { }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										38
									
								
								modules/home/development/languages/js.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								modules/home/development/languages/js.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.js; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.js = { | ||||||
|  |     enable = mkEnableOption "js"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Development packages | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       nodejs | ||||||
|  |       tailwindcss | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # VSCode configuration | ||||||
|  |     programs.vscode = { | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ | ||||||
|  |           bradlc.vscode-tailwindcss | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = { }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Neovim configuration | ||||||
|  |     # programs.nixvim = { }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										44
									
								
								modules/home/development/languages/jupyter.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								modules/home/development/languages/jupyter.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | # TODO: Move to a module for notebooks in general | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.jupyter; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.jupyter = { | ||||||
|  |     enable = mkEnableOption "jupyter"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Development packages | ||||||
|  |     # home.packages = with pkgs; [ | ||||||
|  |     #   evcxr | ||||||
|  |     # ]; | ||||||
|  | 
 | ||||||
|  |     # modules.python.extraPythonPackages = p: [ | ||||||
|  |     #   p.jupyter | ||||||
|  |     #   p.notebook | ||||||
|  |     # ]; | ||||||
|  | 
 | ||||||
|  |     # VSCode configuration | ||||||
|  |     programs.vscode = { | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ | ||||||
|  |           ms-toolsai.jupyter | ||||||
|  |           ms-toolsai.jupyter-renderers | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = { }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Neovim configuration | ||||||
|  |     # programs.nixvim = { }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										60
									
								
								modules/home/development/languages/nix.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								modules/home/development/languages/nix.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,60 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.nix; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.nix = { | ||||||
|  |     enable = mkEnableOption "nix"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Development packages | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       nix-tree | ||||||
|  |       nixfmt-rfc-style | ||||||
|  |       nixd | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # Add nix tree | ||||||
|  |     xdg.desktopEntries.nix-tree = { | ||||||
|  |       exec = "${pkgs.nix-tree}/bin/nix-tree"; | ||||||
|  |       name = "Nix Tree"; | ||||||
|  |       terminal = true; | ||||||
|  |       type = "Application"; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # VSCode configuration | ||||||
|  |     programs.vscode = { | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ jnoortheen.nix-ide ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = { | ||||||
|  |           "[nix]" = { | ||||||
|  |             "editor.tabSize" = 2; | ||||||
|  |           }; | ||||||
|  |           "nix.enableLanguageServer" = true; | ||||||
|  |           "nix.serverPath" = "nixd"; | ||||||
|  |           "nix.serverSettings" = { | ||||||
|  |             nixd = { | ||||||
|  |               formatting = { | ||||||
|  |                 command = [ "nixfmt" ]; | ||||||
|  |               }; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Neovim configuration | ||||||
|  |     # programs.nixvim = { | ||||||
|  | 
 | ||||||
|  |     # }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										52
									
								
								modules/home/development/languages/python.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								modules/home/development/languages/python.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.python; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.python = { | ||||||
|  |     enable = mkEnableOption "python"; | ||||||
|  |     extraPythonPackages = mkOption { | ||||||
|  |       type = types.functionTo (types.listOf types.package) // { | ||||||
|  |         merge = | ||||||
|  |           loc: defs: p: | ||||||
|  |           lib.concatMap (def: (def.value p)) defs; | ||||||
|  |       }; | ||||||
|  |       default = p: [ ]; | ||||||
|  |       description = "Extra Python packages to install"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Development packages | ||||||
|  |     home.packages = [ ]; | ||||||
|  | 
 | ||||||
|  |     # VSCode configuration | ||||||
|  |     programs.vscode = { | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ | ||||||
|  |           ms-python.python | ||||||
|  |           ms-python.debugpy | ||||||
|  |           ms-python.vscode-pylance | ||||||
|  |           ms-python.black-formatter | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = { | ||||||
|  |           "python.defaultInterpreterPath" = "\${env:PYTHONINTERPRETER}"; | ||||||
|  |           "[python]" = { | ||||||
|  |             "editor.defaultFormatter" = "ms-python.black-formatter"; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Neovim configuration | ||||||
|  |     # programs.nixvim = { }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										59
									
								
								modules/home/development/languages/rust.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								modules/home/development/languages/rust.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.rust; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.rust = { | ||||||
|  |     enable = mkEnableOption "rust"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Development packages | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       # rustup | ||||||
|  |       # rustc | ||||||
|  |       # cargo | ||||||
|  |       # gcc | ||||||
|  |       # lldb | ||||||
|  |       # bacon | ||||||
|  |       # rust-analyzer | ||||||
|  |       # rustfmt | ||||||
|  |       # clippy | ||||||
|  |       # evcxr | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # VSCode configuration | ||||||
|  |     programs.vscode = { | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ | ||||||
|  |           rust-lang.rust-analyzer | ||||||
|  |           vadimcn.vscode-lldb | ||||||
|  |           tamasfe.even-better-toml | ||||||
|  |           serayuzgur.crates | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = { | ||||||
|  |           "[rust]" = { | ||||||
|  |             "editor.inlayHints.enabled" = "off"; | ||||||
|  |           }; | ||||||
|  |           "rust-analyzer.check.command" = "clippy"; | ||||||
|  |           "rust-analyzer.showUnlinkedFileNotification" = false; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Neovim configuration | ||||||
|  |     # programs.nixvim = { | ||||||
|  |     #   plugins.rustaceanvim = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #   }; | ||||||
|  |     # }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										69
									
								
								modules/home/development/languages/tex.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								modules/home/development/languages/tex.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.tex; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.tex = { | ||||||
|  |     enable = mkEnableOption "tex"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Development packages | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       (texlive.combine { | ||||||
|  |         inherit (texlive) scheme-full; | ||||||
|  |       }) | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # Pygments for minted | ||||||
|  |     modules.python.extraPythonPackages = p: [ | ||||||
|  |       p.pygments | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # VSCode configuration | ||||||
|  |     programs.vscode = { | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ jnoortheen.nix-ide ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = { | ||||||
|  |           "[tex]" = { }; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Neovim configuration | ||||||
|  |     # programs.nixvim = { | ||||||
|  |     #   extraConfigVim = '' | ||||||
|  |     #     " Enforce latexmk | ||||||
|  |     #     let g:vimtex_compiler_method = 'latexmk' | ||||||
|  | 
 | ||||||
|  |     #     " Set latexmk compilation settings | ||||||
|  |     #     let g:vimtex_compiler_latexmk = { | ||||||
|  |     #       \ 'options': [ | ||||||
|  |     #       \   '-shell-escape', | ||||||
|  |     #       \   '-verbose', | ||||||
|  |     #       \   '-file-line-error', | ||||||
|  |     #       \   '-synctex=1', | ||||||
|  |     #       \   '-interaction=nonstopmode', | ||||||
|  |     #       \ ], | ||||||
|  |     #       \} | ||||||
|  |     #   ''; | ||||||
|  | 
 | ||||||
|  |     #   # Vimtex plugin | ||||||
|  |     #   plugins.vimtex = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #     texlivePackage = null; | ||||||
|  |     #     settings = { | ||||||
|  |     #       view_method = "zathura"; | ||||||
|  |     #     }; | ||||||
|  |     #   }; | ||||||
|  |     # }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										27
									
								
								modules/home/development/mathematica.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								modules/home/development/mathematica.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.mathematica; | ||||||
|  | 
 | ||||||
|  |   my-mathematica = pkgs.mathematica.override { | ||||||
|  |     # TODO: Just use a generic name for the installer? | ||||||
|  |     # source = ./Wolfram_14.2.1_LIN_Bndl.sh; | ||||||
|  |   }; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.mathematica = { | ||||||
|  |     enable = mkEnableOption "mathematica"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     home.packages = [ | ||||||
|  |       my-mathematica | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										190
									
								
								modules/home/development/neovim.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										190
									
								
								modules/home/development/neovim.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,190 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.neovim; | ||||||
|  |   # theme = config.desktop.theming; | ||||||
|  |   # colors = theme.colors; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.neovim = { | ||||||
|  |     enable = mkEnableOption "neovim"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # programs.nixvim = { | ||||||
|  |     #   enable = true; | ||||||
|  |     #   defaultEditor = true; | ||||||
|  |     #   viAlias = true; | ||||||
|  |     #   vimAlias = true; | ||||||
|  | 
 | ||||||
|  |     #   # extraPackages = with pkgs; [ ]; | ||||||
|  | 
 | ||||||
|  |     #   opts = { | ||||||
|  |     #     number = true; | ||||||
|  |     #     relativenumber = true; | ||||||
|  | 
 | ||||||
|  |     #     signcolumn = "yes"; | ||||||
|  | 
 | ||||||
|  |     #     ignorecase = true; | ||||||
|  |     #     smartcase = true; | ||||||
|  | 
 | ||||||
|  |     #     tabstop = 4; | ||||||
|  |     #     shiftwidth = 4; | ||||||
|  |     #     softtabstop = 0; | ||||||
|  |     #     expandtab = true; | ||||||
|  |     #     smarttab = true; | ||||||
|  | 
 | ||||||
|  |     #     list = true; | ||||||
|  |     #     listchars = "tab:»┈«,trail:·,extends:→,precedes:←,nbsp:␣"; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   diagnostic.settings = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #     signs = true; | ||||||
|  |     #     underline = true; | ||||||
|  |     #     update_in_insert = true; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   extraConfigLua = '' | ||||||
|  |     #     vim.fn.sign_define("DiagnosticSignError", | ||||||
|  |     #       {text = "", texthl = "DiagnosticSignError"}) | ||||||
|  |     #     vim.fn.sign_define("DiagnosticSignWarn", | ||||||
|  |     #       {text = "", texthl = "DiagnosticSignWarn"}) | ||||||
|  |     #     vim.fn.sign_define("DiagnosticSignInfo", | ||||||
|  |     #       {text = "", texthl = "DiagnosticSignInfo"}) | ||||||
|  |     #     vim.fn.sign_define("DiagnosticSignHint", | ||||||
|  |     #       {text = "💡", texthl = "DiagnosticSignHint"}) | ||||||
|  |     #   ''; | ||||||
|  | 
 | ||||||
|  |     #   keymaps = [ | ||||||
|  |     #     # Save shortcut | ||||||
|  |     #     { | ||||||
|  |     #       action = ":update<CR>"; | ||||||
|  |     #       key = "<C-s>"; | ||||||
|  |     #       mode = "n"; | ||||||
|  |     #     } | ||||||
|  |     #     { | ||||||
|  |     #       action = "<C-o>:update<CR>"; | ||||||
|  |     #       key = "<C-s>"; | ||||||
|  |     #       mode = "i"; | ||||||
|  |     #     } | ||||||
|  | 
 | ||||||
|  |     #     # Neo tree | ||||||
|  |     #     { | ||||||
|  |     #       action = ":Neotree action=focus reveal toggle<CR>"; | ||||||
|  |     #       key = "<leader>n"; | ||||||
|  |     #       mode = "n"; | ||||||
|  |     #       options.silent = true; | ||||||
|  |     #     } | ||||||
|  |     #   ]; | ||||||
|  | 
 | ||||||
|  |     #   autoCmd = [ | ||||||
|  |     #     { | ||||||
|  |     #       desc = "Automatic formatting"; | ||||||
|  |     #       event = "BufWritePre"; | ||||||
|  |     #       callback = { | ||||||
|  |     #         __raw = '' | ||||||
|  |     #           function() | ||||||
|  |     #             vim.lsp.buf.format { | ||||||
|  |     #               async = false, | ||||||
|  |     #             } | ||||||
|  |     #           end | ||||||
|  |     #         ''; | ||||||
|  |     #       }; | ||||||
|  |     #     } | ||||||
|  |     #   ]; | ||||||
|  | 
 | ||||||
|  |     #   # highlight = { | ||||||
|  |     #   #   Comment = { | ||||||
|  |     #   #     italic = true; | ||||||
|  |     #   #     fg = theme.schemeColors.withHashtag.base03; # TODO: Come up with a good name colors.muted maybe? | ||||||
|  |     #   #   }; | ||||||
|  |     #   # }; | ||||||
|  | 
 | ||||||
|  |     #   plugins.lsp = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   #plugins.treesitter = { | ||||||
|  |     #   #  enable = true; | ||||||
|  |     #   #}; | ||||||
|  | 
 | ||||||
|  |     #   plugins.cmp = { | ||||||
|  |     #     enable = true; | ||||||
|  | 
 | ||||||
|  |     #     settings = { | ||||||
|  |     #       mapping = { | ||||||
|  |     #         "<C-Space>" = "cmp.mapping.complete()"; | ||||||
|  |     #         "<C-d>" = "cmp.mapping.scroll_docs(-4)"; | ||||||
|  |     #         "<C-e>" = "cmp.mapping.close()"; | ||||||
|  |     #         "<C-f>" = "cmp.mapping.scroll_docs(4)"; | ||||||
|  |     #         "<CR>" = "cmp.mapping.confirm({ select = true })"; | ||||||
|  |     #         "<S-Tab>" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; | ||||||
|  |     #         "<Tab>" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; | ||||||
|  |     #       }; | ||||||
|  |     #       sources = [ | ||||||
|  |     #         { name = "path"; } | ||||||
|  |     #         { name = "nvim_lsp"; } | ||||||
|  |     #       ]; | ||||||
|  |     #     }; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   plugins.web-devicons = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   plugins.neo-tree = { | ||||||
|  |     #     enable = true; | ||||||
|  | 
 | ||||||
|  |     #     closeIfLastWindow = true; | ||||||
|  |     #     window = { | ||||||
|  |     #       width = 30; | ||||||
|  |     #       autoExpandWidth = true; | ||||||
|  |     #     }; | ||||||
|  | 
 | ||||||
|  |     #     extraOptions = { | ||||||
|  |     #       default_component_configs.git_status.symbols = { | ||||||
|  |     #         # Change type | ||||||
|  |     #         added = "+"; | ||||||
|  |     #         deleted = "✕"; | ||||||
|  |     #         modified = "✦"; | ||||||
|  |     #         renamed = "→"; | ||||||
|  | 
 | ||||||
|  |     #         # Status type | ||||||
|  |     #         untracked = "?"; | ||||||
|  |     #         ignored = "▫"; | ||||||
|  |     #         unstaged = "□"; | ||||||
|  |     #         staged = "■"; | ||||||
|  |     #         conflict = "‼"; | ||||||
|  |     #       }; | ||||||
|  |     #     }; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   #plugins.cmp-nvim-lsp.enable = true; | ||||||
|  | 
 | ||||||
|  |     #   plugins.gitsigns = { | ||||||
|  |     #     enable = true; | ||||||
|  |     #     settings.current_line_blame = true; | ||||||
|  |     #   }; | ||||||
|  | 
 | ||||||
|  |     #   #plugins.copilot-vim = { | ||||||
|  |     #   #  enable = true; | ||||||
|  |     #   #}; | ||||||
|  | 
 | ||||||
|  |     #   # plugins.vimtex = { | ||||||
|  |     #   #   enable = true; | ||||||
|  |     #   #   texlivePackage = null; | ||||||
|  |     #   #   settings = { | ||||||
|  |     #   #     view_method = "zathura"; | ||||||
|  |     #   #   }; | ||||||
|  |     #   # }; | ||||||
|  |     # }; | ||||||
|  |     # programs.neovim.defaultEditor = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										96
									
								
								modules/home/development/vscode.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								modules/home/development/vscode.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | |||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.vscode; | ||||||
|  |   # theme = config.desktop.theming; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.vscode = { | ||||||
|  |     enable = mkEnableOption "vscode"; | ||||||
|  |     # codeFont = mkOption { | ||||||
|  |     #   type = types.anything; | ||||||
|  |     #   default = theme.fonts.pkgs."Fira Code"; | ||||||
|  |     # }; | ||||||
|  |     # fallbackFont = mkOption { | ||||||
|  |     #   type = types.anything; | ||||||
|  |     #   default = theme.fonts.pkgs."Symbols Nerd Font Mono"; | ||||||
|  |     # }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # TODO: Fix theming | ||||||
|  |     # desktop.theming.fonts.extraFonts = [ cfg.codeFont ]; | ||||||
|  | 
 | ||||||
|  |     programs.vscode = { | ||||||
|  |       enable = true; | ||||||
|  | 
 | ||||||
|  |       mutableExtensionsDir = false; | ||||||
|  |       profiles.default = { | ||||||
|  |         extensions = with pkgs.vscode-extensions; [ | ||||||
|  |           eamodio.gitlens | ||||||
|  |           ms-vscode.hexeditor | ||||||
|  |           mkhl.direnv | ||||||
|  |           usernamehw.errorlens | ||||||
|  |           gruntfuggly.todo-tree | ||||||
|  |           github.copilot | ||||||
|  |           github.copilot-chat | ||||||
|  |           tomoki1207.pdf | ||||||
|  |           ms-vsliveshare.vsliveshare | ||||||
|  |           ms-vscode-remote.remote-ssh | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         userSettings = | ||||||
|  |           let | ||||||
|  |             # font-family = mkForce "'${cfg.codeFont.name}', '${cfg.fallbackFont.name}'"; | ||||||
|  |             # TODO: Move the conversion factor to theme settings | ||||||
|  |             # font-size = mkForce cfg.codeFont.recommendedSize; # Convert pt to px | ||||||
|  |           in | ||||||
|  |           { | ||||||
|  |             # Font setup | ||||||
|  |             # "editor.fontFamily" = font-family; | ||||||
|  |             # "editor.inlayHints.fontFamily" = font-family; | ||||||
|  |             # "editor.inlineSuggest.fontFamily" = font-family; | ||||||
|  |             # "editor.fontSize" = font-size; | ||||||
|  |             # "editor.fontLigatures" = true; | ||||||
|  |             # "terminal.integrated.fontFamily" = font-family; | ||||||
|  |             # "terminal.integrated.fontSize" = font-size; | ||||||
|  |             # "chat.editor.fontFamily" = font-family; # TODO: Change this font to the standard UI font | ||||||
|  |             # "chat.editor.fontSize" = font-size; | ||||||
|  |             # "debug.console.fontFamily" = font-family; | ||||||
|  |             # "debug.console.fontSize" = font-size; | ||||||
|  |             # "scm.inputFontFamily" = font-family; # TODO: Change this font to the standard UI font | ||||||
|  |             # "scm.inputFontSize" = font-size; | ||||||
|  |             # "markdown.preview.fontFamily" = mkForce theme.fonts.sansSerif.name; # TODO: Change this font to the standard UI font | ||||||
|  |             # "markdown.preview.fontSize" = mkForce theme.fonts.sansSerif.recommendedSize; | ||||||
|  | 
 | ||||||
|  |             # Formatting | ||||||
|  |             "editor.formatOnSave" = true; | ||||||
|  |             "editor.tabSize" = 4; | ||||||
|  | 
 | ||||||
|  |             # Layout | ||||||
|  |             "window.menuBarVisibility" = "hidden"; | ||||||
|  | 
 | ||||||
|  |             # Git settings | ||||||
|  |             "git.autofetch" = true; | ||||||
|  |             "git.enableSmartCommit" = false; | ||||||
|  |             "git.suggestSmartCommit" = false; | ||||||
|  | 
 | ||||||
|  |             # Disable update notifications | ||||||
|  |             "update.mode" = "none"; | ||||||
|  | 
 | ||||||
|  |             # TODO: Move to direnv module | ||||||
|  |             # Ignore direnv folder | ||||||
|  |             "files.exclude" = { | ||||||
|  |               ".direnv" = true; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										27
									
								
								modules/home/utilities/bash.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								modules/home/utilities/bash.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,27 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.bash; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.bash = { | ||||||
|  |     enable = mkEnableOption "bash"; | ||||||
|  |     aliases = mkOption { | ||||||
|  |       type = types.attrsOf types.str; | ||||||
|  |       default = { | ||||||
|  |         "..." = "cd ../.."; | ||||||
|  |       }; | ||||||
|  |       description = "Shell aliases"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config.programs.bash = { | ||||||
|  |     enable = cfg.enable; | ||||||
|  |     shellAliases = cfg.aliases; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										26
									
								
								modules/home/utilities/direnv.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								modules/home/utilities/direnv.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,26 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.direnv; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.direnv = { | ||||||
|  |     enable = mkEnableOption "direnv"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     programs.direnv = { | ||||||
|  |       enable = true; | ||||||
|  |       nix-direnv.enable = true; | ||||||
|  |     }; | ||||||
|  |     modules.git.ignores = [ | ||||||
|  |       ".direnv" | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										57
									
								
								modules/home/utilities/fish.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								modules/home/utilities/fish.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.fish; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.fish = { | ||||||
|  |     enable = mkEnableOption "fish"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Make bash load into fish | ||||||
|  |     # Bash will remain the default shell as fish is not POSIX compliant. | ||||||
|  |     modules.bash.enable = true; | ||||||
|  |     programs.bash.initExtra = '' | ||||||
|  |       if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] | ||||||
|  |       then | ||||||
|  |         shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" | ||||||
|  |         exec ${pkgs.fish}/bin/fish $LOGIN_OPTION | ||||||
|  |       fi | ||||||
|  |     ''; | ||||||
|  | 
 | ||||||
|  |     # Actual fish configuration | ||||||
|  |     programs.fish = { | ||||||
|  |       enable = true; | ||||||
|  | 
 | ||||||
|  |       shellAliases = config.modules.bash.aliases; | ||||||
|  | 
 | ||||||
|  |       plugins = [ | ||||||
|  |         { | ||||||
|  |           name = "done"; | ||||||
|  |           src = pkgs.fishPlugins.done.src; | ||||||
|  |         } | ||||||
|  |         { | ||||||
|  |           name = "fzf"; | ||||||
|  |           src = pkgs.fishPlugins.fzf-fish.src; | ||||||
|  |         } | ||||||
|  |         { | ||||||
|  |           name = "grc"; | ||||||
|  |           src = pkgs.fishPlugins.grc.src; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Fish plugin dependencies | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       fzf | ||||||
|  |       grc | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										63
									
								
								modules/home/utilities/xpra.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								modules/home/utilities/xpra.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.xpra; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.xpra = { | ||||||
|  |     enable = mkEnableOption "Enable xpra"; | ||||||
|  |     hosts = mkOption { | ||||||
|  |       type = types.listOf types.str; | ||||||
|  |       default = { }; | ||||||
|  |       description = "xpra hosts"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     home.packages = with pkgs; [ | ||||||
|  |       xpra | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     xdg.desktopEntries = ( | ||||||
|  |       listToAttrs ( | ||||||
|  |         map | ||||||
|  |           (entry: { | ||||||
|  |             name = "xpra${ | ||||||
|  |               builtins.substring 0 12 (builtins.hashString "sha256" "${entry.name} (${entry.comment})") | ||||||
|  |             }"; | ||||||
|  |             value = entry // { | ||||||
|  |               type = "Application"; | ||||||
|  |               terminal = false; | ||||||
|  |               genericName = entry.comment; | ||||||
|  |             }; | ||||||
|  |           }) | ||||||
|  |           ( | ||||||
|  |             concatMap ( | ||||||
|  |               host: | ||||||
|  |               let | ||||||
|  |                 uri = "tcp://${host}:15151/7"; | ||||||
|  |               in | ||||||
|  |               [ | ||||||
|  |                 { | ||||||
|  |                   name = "Xpra - Attach"; | ||||||
|  |                   comment = host; | ||||||
|  |                   exec = "xpra attach --min-quality=100 --min-speed=100 --encoding=png --speaker=off ${uri}"; | ||||||
|  |                 } | ||||||
|  |                 { | ||||||
|  |                   name = "Xpra - Detach"; | ||||||
|  |                   comment = host; | ||||||
|  |                   exec = "xpra detach ${uri}"; | ||||||
|  |                 } | ||||||
|  |               ] | ||||||
|  |             ) cfg.hosts | ||||||
|  |           ) | ||||||
|  |       ) | ||||||
|  |     ); | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										18
									
								
								modules/nixos/bluetooth.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								modules/nixos/bluetooth.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.bluetooth; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.bluetooth = { | ||||||
|  |     enable = mkEnableOption "bluetooth"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Enable bluetooth | ||||||
|  |     hardware.bluetooth = { | ||||||
|  |       enable = true; | ||||||
|  |       powerOnBoot = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								modules/nixos/bootloader.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/nixos/bootloader.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.bootloader; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.bootloader = { | ||||||
|  |     enable = mkEnableOption "bootloader"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Bootloader | ||||||
|  |     boot.loader = { | ||||||
|  |       timeout = 0; | ||||||
|  |       systemd-boot.enable = true; | ||||||
|  |       systemd-boot.editor = false; | ||||||
|  |       efi.canTouchEfiVariables = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										35
									
								
								modules/nixos/fonts.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								modules/nixos/fonts.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.fonts; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.fonts = { | ||||||
|  |     enable = mkEnableOption "fonts"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     console.packages = [ | ||||||
|  |       pkgs.dina-psfu | ||||||
|  |     ]; | ||||||
|  |     console.font = "dina"; | ||||||
|  |     console.earlySetup = true; | ||||||
|  | 
 | ||||||
|  |     # TODO: Disable default fonts, fonts should be managed per user | ||||||
|  |     # fonts.enableDefaultPackages = false; | ||||||
|  |     # fonts.fontconfig = { | ||||||
|  |     #   enable = true; | ||||||
|  |     #   defaultFonts = { | ||||||
|  |     #     serif = mkDefault [ ]; | ||||||
|  |     #     sansSerif = mkDefault [ ]; | ||||||
|  |     #     monospace = mkDefault [ ]; | ||||||
|  |     #     emoji = mkDefault [ ]; | ||||||
|  |     #   }; | ||||||
|  |     # }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										95
									
								
								modules/nixos/gnome.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								modules/nixos/gnome.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,95 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.gnome; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.gnome = { | ||||||
|  |     enable = mkEnableOption "gnome"; | ||||||
|  |     # TODO: Add RDP toggle | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Enable GDM and Gnome | ||||||
|  |     services.xserver.enable = true; | ||||||
|  |     services.xserver.displayManager.gdm.enable = true; | ||||||
|  |     services.xserver.desktopManager.gnome.enable = true; | ||||||
|  |     services.gnome.core-utilities.enable = false; | ||||||
|  |     services.gnome.games.enable = false; | ||||||
|  |     services.gnome.core-developer-tools.enable = false; | ||||||
|  |     environment.gnome.excludePackages = with pkgs; [ | ||||||
|  |       adwaita-icon-theme | ||||||
|  |       (derivation { name = "nixos-background-info"; }) | ||||||
|  |       gnome-backgrounds | ||||||
|  |       gnome-bluetooth | ||||||
|  |       gnome-color-manager | ||||||
|  |       gnome-control-center | ||||||
|  |       gnome-shell-extensions | ||||||
|  |       gnome-tour | ||||||
|  |       gnome-user-docs | ||||||
|  |       glib | ||||||
|  |       gnome-menus | ||||||
|  |       gtk3.out | ||||||
|  |       xdg-user-dirs | ||||||
|  |       xdg-user-dirs-gtk | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # Set up desktop entries for possible desktop environments | ||||||
|  |     services.displayManager.sessionPackages = [ | ||||||
|  |       (pkgs.writeTextFile { | ||||||
|  |         name = "river.desktop"; | ||||||
|  |         text = '' | ||||||
|  |           [Desktop Entry] | ||||||
|  |           Name=River | ||||||
|  |           Comment=A dynamic tiling Wayland compositor | ||||||
|  |           Exec=river | ||||||
|  |           Type=Application | ||||||
|  |         ''; | ||||||
|  |         destination = "/share/wayland-sessions/river.desktop"; | ||||||
|  |         passthru.providedSessions = [ "river" ]; | ||||||
|  |       }) | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # Enable Gnome Remote Desktop | ||||||
|  |     services.gnome.gnome-remote-desktop.enable = true; | ||||||
|  |     systemd.services."gnome-remote-desktop".wantedBy = [ "graphical.target" ]; | ||||||
|  |     networking.firewall = { | ||||||
|  |       allowedTCPPorts = [ | ||||||
|  |         3389 | ||||||
|  |         3390 | ||||||
|  |       ]; | ||||||
|  |       allowedUDPPorts = [ | ||||||
|  |         3389 | ||||||
|  |         3390 | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # For GSConnect/KDE Connect | ||||||
|  |     # TODO: Move to host config? | ||||||
|  |     networking.firewall = { | ||||||
|  |       allowedTCPPortRanges = [ | ||||||
|  |         { | ||||||
|  |           from = 1714; | ||||||
|  |           to = 1764; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |       allowedUDPPortRanges = [ | ||||||
|  |         { | ||||||
|  |           from = 1714; | ||||||
|  |           to = 1764; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Enable dependencies | ||||||
|  |     modules = { | ||||||
|  |       networkmanager.enable = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								modules/nixos/graphics.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/nixos/graphics.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.graphics; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.graphics = { | ||||||
|  |     enable = mkEnableOption "graphics"; | ||||||
|  |     # TODO: Add toggle for hybrid graphics | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     hardware.graphics.enable = true; | ||||||
|  |     hardware.graphics.enable32Bit = true; | ||||||
|  |     services.xserver.videoDrivers = [ "nvidia" ]; | ||||||
|  |     # TODO: Add nvidia settings back in | ||||||
|  |     # TODO: Move to nvidia module | ||||||
|  |     hardware.nvidia = { | ||||||
|  |       open = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								modules/nixos/networkmanager.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								modules/nixos/networkmanager.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.networkmanager; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.networkmanager = { | ||||||
|  |     enable = mkEnableOption "networkmanager"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # TODO: Add sudo users to the networkmanager group? | ||||||
|  |     networking.networkmanager.enable = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										20
									
								
								modules/nixos/power-saving.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								modules/nixos/power-saving.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,20 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.power-saving; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.power-saving = { | ||||||
|  |     enable = mkEnableOption "power saving"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Setup power management | ||||||
|  |     powerManagement.enable = true; | ||||||
|  |     services.thermald.enable = true; | ||||||
|  |     services.power-profiles-daemon.enable = true; | ||||||
|  | 
 | ||||||
|  |     # Enable wifi power saving | ||||||
|  |     networking.networkmanager.wifi.powersave = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										22
									
								
								modules/nixos/printing.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								modules/nixos/printing.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.printing; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.printing = { | ||||||
|  |     enable = mkEnableOption "printing"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Enable CUPS | ||||||
|  |     services.printing.enable = true; | ||||||
|  | 
 | ||||||
|  |     # Enable Avahi to auto-detect network printers | ||||||
|  |     services.avahi = { | ||||||
|  |       enable = true; | ||||||
|  |       nssmdns4 = true; | ||||||
|  |       openFirewall = true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										61
									
								
								modules/nixos/profiles/base.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								modules/nixos/profiles/base.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,61 @@ | |||||||
|  | { | ||||||
|  |   mkModule, | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.base; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.base = { | ||||||
|  |     enable = mkEnableOption "base profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     modules = { | ||||||
|  |       bootloader.enable = mkDefault true; | ||||||
|  |       ssh.enable = mkDefault true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Localization | ||||||
|  |     time.timeZone = "Europe/Amsterdam"; | ||||||
|  |     i18n.defaultLocale = "en_US.UTF-8"; | ||||||
|  |     console.keyMap = "us"; | ||||||
|  | 
 | ||||||
|  |     # Enable neovim | ||||||
|  |     programs.neovim = { | ||||||
|  |       enable = true; | ||||||
|  |       defaultEditor = true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Allow unfree packages | ||||||
|  |     nixpkgs.config.allowUnfree = true; | ||||||
|  | 
 | ||||||
|  |     # Enable the usage of flakes | ||||||
|  |     nix.settings.experimental-features = [ | ||||||
|  |       "nix-command" | ||||||
|  |       "flakes" | ||||||
|  |     ]; | ||||||
|  | 
 | ||||||
|  |     # Clean tmp | ||||||
|  |     boot.tmp.cleanOnBoot = true; | ||||||
|  | 
 | ||||||
|  |     # Base packages | ||||||
|  |     environment.systemPackages = with pkgs; [ | ||||||
|  |       git | ||||||
|  |       wget | ||||||
|  |       curl | ||||||
|  |       dig | ||||||
|  |       procps | ||||||
|  |       wireguard-tools | ||||||
|  |       usbutils | ||||||
|  |       pciutils | ||||||
|  |       zip | ||||||
|  |       unzip | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										28
									
								
								modules/nixos/profiles/desktop.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								modules/nixos/profiles/desktop.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,28 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.desktop; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.desktop = { | ||||||
|  |     enable = mkEnableOption "desktop profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     modules = { | ||||||
|  |       profiles.base.enable = mkDefault true; | ||||||
|  |       fonts.enable = mkDefault true; | ||||||
|  |       graphics.enable = mkDefault true; | ||||||
|  |       gnome.enable = mkDefault true; # TODO: Rename to display manager? | ||||||
|  |       networkmanager.enable = mkDefault true; | ||||||
|  |       printing.enable = mkDefault true; | ||||||
|  |       sound.enable = mkDefault true; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										30
									
								
								modules/nixos/profiles/laptop.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								modules/nixos/profiles/laptop.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | { | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.profiles.laptop; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.profiles.laptop = { | ||||||
|  |     enable = mkEnableOption "laptop profile"; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Setup modules | ||||||
|  |     modules = { | ||||||
|  |       profiles.desktop.enable = mkDefault true; | ||||||
|  |       bluetooth.enable = mkDefault true; | ||||||
|  |       power-saving.enable = mkDefault true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Add packages | ||||||
|  |     environment.systemPackages = with pkgs; [ | ||||||
|  |       brightnessctl | ||||||
|  |     ]; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										24
									
								
								modules/nixos/sound.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								modules/nixos/sound.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.sound; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.sound = { | ||||||
|  |     enable = mkEnableOption "sound"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     # Enable pipewire | ||||||
|  |     services.pipewire = { | ||||||
|  |       enable = true; | ||||||
|  |       alsa.enable = true; | ||||||
|  |       alsa.support32Bit = true; | ||||||
|  |       pulse.enable = true; | ||||||
|  |       jack.enable = true; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|  |     # Recommended by wiki, allows user processes to use realtime kernel | ||||||
|  |     security.rtkit.enable = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								modules/nixos/ssh.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								modules/nixos/ssh.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | |||||||
|  | { lib, config, ... }: | ||||||
|  | 
 | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.modules.ssh; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   options.modules.ssh = { | ||||||
|  |     enable = mkEnableOption "ssh"; | ||||||
|  |   }; | ||||||
|  |   config = mkIf cfg.enable { | ||||||
|  |     services.openssh.enable = true; | ||||||
|  |     # TODO: Is this default configuration secure? | ||||||
|  |   }; | ||||||
|  | } | ||||||
| @ -1,63 +0,0 @@ | |||||||
| { lib, ... }: |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|   imports = [ |  | ||||||
|     # Import environment |  | ||||||
|     ../default.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   config = { |  | ||||||
|     # State version |  | ||||||
|     system.stateVersion = "24.05"; |  | ||||||
| 
 |  | ||||||
|     # Machine hostname |  | ||||||
|     networking.hostName = "20212060"; |  | ||||||
| 
 |  | ||||||
|     # Enabled modules |  | ||||||
|     modules = { |  | ||||||
|       base.desktop.enable = true; |  | ||||||
|       bluetooth.enable = true; |  | ||||||
|       power-saving.enable = false; |  | ||||||
|       networkmanager.enable = true; |  | ||||||
|       grdp.enable = true; |  | ||||||
|       printing.enable = true; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Hardware configuration |  | ||||||
|     hardware.enableRedistributableFirmware = true; |  | ||||||
|     boot.initrd.availableKernelModules = [ |  | ||||||
|       "xhci_pci" |  | ||||||
|       "nvme" |  | ||||||
|       "usb_storage" |  | ||||||
|       "sd_mod" |  | ||||||
|       "rtsx_pci_sdmmc" |  | ||||||
|     ]; |  | ||||||
|     boot.initrd.kernelModules = [ ]; |  | ||||||
|     boot.kernelModules = [ "kvm-intel" ]; |  | ||||||
|     boot.extraModulePackages = [ ]; |  | ||||||
|     hardware.cpu.intel.updateMicrocode = true; |  | ||||||
| 
 |  | ||||||
|     # Filesystems |  | ||||||
|     fileSystems."/" = { |  | ||||||
|       device = "/dev/disk/by-uuid/3b91eaeb-ea95-4bea-8dc1-f55af7502d23"; |  | ||||||
|       fsType = "ext4"; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     fileSystems."/boot" = { |  | ||||||
|       device = "/dev/disk/by-uuid/46BF-DE2C"; |  | ||||||
|       fsType = "vfat"; |  | ||||||
|       options = [ |  | ||||||
|         "fmask=0077" |  | ||||||
|         "dmask=0077" |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     # Swapfile |  | ||||||
|     swapDevices = [ |  | ||||||
|       { |  | ||||||
|         device = "/var/lib/swapfile"; |  | ||||||
|         size = 16 * 1024; |  | ||||||
|       } |  | ||||||
|     ]; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
							
								
								
									
										370
									
								
								unorganized/users/jan.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										370
									
								
								unorganized/users/jan.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,370 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | { | ||||||
|  |   config = ( | ||||||
|  |     lib.recursiveUpdate | ||||||
|  |       { | ||||||
|  |         # State version | ||||||
|  |         home.stateVersion = "24.05"; | ||||||
|  | 
 | ||||||
|  |         # TODO: Move into modules | ||||||
|  |         home.packages = with pkgs; [ | ||||||
|  |           libreoffice-still | ||||||
|  |           remmina | ||||||
|  |           pinentry | ||||||
|  |           thunderbird | ||||||
|  |           signal-desktop | ||||||
|  |           prusa-slicer | ||||||
|  |           freecad-wayland | ||||||
|  |           inkscape | ||||||
|  |           ente-auth | ||||||
|  |           bitwarden | ||||||
|  |           carla | ||||||
|  |           baobab | ||||||
|  |           gnome-calculator | ||||||
|  |           nautilus | ||||||
|  |         ]; | ||||||
|  | 
 | ||||||
|  |         # desktop.development = "river-light"; | ||||||
|  |         desktop.enable = true; | ||||||
|  |         desktop.environments = { | ||||||
|  |           river-dark = { | ||||||
|  |             name = "River Dark"; | ||||||
|  |             type = "custom"; | ||||||
|  |             config = { }; | ||||||
|  |             extraConfig = { | ||||||
|  |               modules = { | ||||||
|  |                 # Desktop environment | ||||||
|  |                 river.enable = true; | ||||||
|  |                 waylock.enable = true; | ||||||
|  |                 waybar.enable = true; | ||||||
|  |                 mako.enable = true; | ||||||
|  |                 foot.enable = true; | ||||||
|  |                 rofi-rbw.enable = true; | ||||||
|  |               }; | ||||||
|  | 
 | ||||||
|  |               # TODO: Remove everything below, it is here out of convenience and should be elsewhere | ||||||
|  |               xdg.portal = { | ||||||
|  |                 enable = true; | ||||||
|  | 
 | ||||||
|  |                 config.common.default = [ | ||||||
|  |                   "wlr" | ||||||
|  |                   "gtk" | ||||||
|  |                 ]; | ||||||
|  | 
 | ||||||
|  |                 extraPortals = with pkgs; [ | ||||||
|  |                   xdg-desktop-portal-gtk | ||||||
|  |                   xdg-desktop-portal-wlr | ||||||
|  |                 ]; | ||||||
|  |               }; | ||||||
|  | 
 | ||||||
|  |               # Color scheme | ||||||
|  |               desktop.theming.background = { | ||||||
|  |                 image = { | ||||||
|  |                   url = "https://i.postimg.cc/tTB3dM3T/1382899.png"; | ||||||
|  |                   hash = "sha256-kStcwAtK2vxitU6uaQtZTA5iFS8k0iXkFwinY2M8wQE="; | ||||||
|  |                 }; | ||||||
|  |                 themed = true; | ||||||
|  |                 inverted = false; | ||||||
|  |               }; | ||||||
|  |               desktop.theming.themes.catppuccin = { | ||||||
|  |                 enable = true; | ||||||
|  |                 flavor = "mocha"; | ||||||
|  |               }; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |           river-light = { | ||||||
|  |             name = "River Light"; | ||||||
|  |             type = "custom"; | ||||||
|  |             config = { }; | ||||||
|  |             extraConfig = { | ||||||
|  |               modules = { | ||||||
|  |                 # Desktop environment | ||||||
|  |                 river.enable = true; | ||||||
|  |                 waylock.enable = true; | ||||||
|  |                 waybar.enable = true; | ||||||
|  |                 mako.enable = true; | ||||||
|  |                 foot.enable = true; | ||||||
|  |                 rofi-rbw.enable = true; | ||||||
|  |               }; | ||||||
|  | 
 | ||||||
|  |               # TODO: Remove everything below, it is here out of convenience and should be elsewhere | ||||||
|  |               xdg.portal = { | ||||||
|  |                 enable = true; | ||||||
|  | 
 | ||||||
|  |                 config.common.default = [ | ||||||
|  |                   "wlr" | ||||||
|  |                   "gtk" | ||||||
|  |                 ]; | ||||||
|  | 
 | ||||||
|  |                 extraPortals = with pkgs; [ | ||||||
|  |                   xdg-desktop-portal-gtk | ||||||
|  |                   xdg-desktop-portal-wlr | ||||||
|  |                 ]; | ||||||
|  |               }; | ||||||
|  | 
 | ||||||
|  |               # Color scheme | ||||||
|  |               desktop.theming.background = { | ||||||
|  |                 image = { | ||||||
|  |                   url = "https://raw.githubusercontent.com/dharmx/walls/refs/heads/main/digital/a_drawing_of_a_spider_on_a_white_surface.png"; | ||||||
|  |                   hash = "sha256-eCEjM7R9yeHNhZZtvHjrgkfwT25JA7FeMoVwnQ887CQ="; | ||||||
|  |                 }; | ||||||
|  |                 themed = true; | ||||||
|  |                 inverted = false; | ||||||
|  |               }; | ||||||
|  |               desktop.theming.themes.catppuccin = { | ||||||
|  |                 enable = true; | ||||||
|  |                 flavor = lib.mkForce "latte"; | ||||||
|  |               }; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |           gnome = { | ||||||
|  |             name = "Gnome"; | ||||||
|  |             type = "custom"; | ||||||
|  |             config = { }; | ||||||
|  |             extraConfig = { | ||||||
|  |               programs = { | ||||||
|  |                 gnome-shell.enable = true; | ||||||
|  |               }; | ||||||
|  |               desktop = { | ||||||
|  |                 initScript = '' | ||||||
|  |                   ${pkgs.gnome-session}/bin/gnome-session | ||||||
|  |                 ''; | ||||||
|  |                 session = { | ||||||
|  |                   type = "wayland"; | ||||||
|  |                   desktop = "GNOME"; | ||||||
|  |                 }; | ||||||
|  |               }; | ||||||
|  |               modules.river.enable = lib.mkForce false; | ||||||
|  | 
 | ||||||
|  |               # TODO: Remove everything below, it is here out of convenience and should be elsewhere | ||||||
|  |               xdg.portal = { | ||||||
|  |                 enable = true; | ||||||
|  | 
 | ||||||
|  |                 config.common.default = [ | ||||||
|  |                   "gnome" | ||||||
|  |                   "gtk" | ||||||
|  |                 ]; | ||||||
|  | 
 | ||||||
|  |                 extraPortals = with pkgs; [ | ||||||
|  |                   xdg-desktop-portal-gnome | ||||||
|  |                   xdg-desktop-portal-gtk | ||||||
|  |                 ]; | ||||||
|  |               }; | ||||||
|  |               home.packages = [ | ||||||
|  |                 # Core utilities | ||||||
|  |                 pkgs.epiphany | ||||||
|  |                 pkgs.gnome-text-editor | ||||||
|  |                 pkgs.gnome-calendar | ||||||
|  |                 pkgs.gnome-characters | ||||||
|  |                 pkgs.gnome-clocks | ||||||
|  |                 pkgs.gnome-console | ||||||
|  |                 pkgs.gnome-contacts | ||||||
|  |                 pkgs.gnome-font-viewer | ||||||
|  |                 pkgs.gnome-logs | ||||||
|  |                 pkgs.gnome-maps | ||||||
|  |                 pkgs.gnome-music | ||||||
|  |                 pkgs.gnome-system-monitor | ||||||
|  |                 pkgs.gnome-weather | ||||||
|  |                 pkgs.loupe | ||||||
|  |                 pkgs.gnome-connections | ||||||
|  |                 pkgs.simple-scan | ||||||
|  |                 pkgs.snapshot | ||||||
|  |                 pkgs.totem | ||||||
|  |                 pkgs.yelp | ||||||
|  | 
 | ||||||
|  |                 # Optional packages | ||||||
|  |                 pkgs.adwaita-icon-theme | ||||||
|  |                 pkgs.gnome-backgrounds | ||||||
|  |                 pkgs.gnome-bluetooth | ||||||
|  |                 pkgs.gnome-color-manager | ||||||
|  |                 pkgs.gnome-control-center | ||||||
|  |                 pkgs.gnome-shell-extensions | ||||||
|  |                 pkgs.gnome-tour # GNOME Shell detects the .desktop file on first log-in. | ||||||
|  |                 pkgs.gnome-user-docs | ||||||
|  |                 pkgs.glib # for gsettings program | ||||||
|  |                 pkgs.gnome-menus | ||||||
|  |                 pkgs.gtk3.out # for gtk-launch program | ||||||
|  |                 pkgs.xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/ | ||||||
|  |                 pkgs.xdg-user-dirs-gtk # Used to create the default bookmarks | ||||||
|  | 
 | ||||||
|  |                 # Fonts | ||||||
|  |                 pkgs.cantarell-fonts | ||||||
|  |                 pkgs.dejavu_fonts | ||||||
|  |                 pkgs.source-code-pro # Default monospace font in 3.32 | ||||||
|  |                 pkgs.source-sans | ||||||
|  | 
 | ||||||
|  |                 # Other stuff | ||||||
|  |                 pkgs.gnome-session | ||||||
|  |               ]; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         # Pipewire roc sink | ||||||
|  |         xdg.configFile."pipewire/pipewire.conf.d/60-roc-sink.conf" = { | ||||||
|  |           text = '' | ||||||
|  |             context.modules = [ | ||||||
|  |               { | ||||||
|  |                 name = "libpipewire-module-roc-sink" | ||||||
|  |                 args = { | ||||||
|  |                   fec.code = "rs8m" | ||||||
|  |                   remote.ip = "10.20.60.251" | ||||||
|  |                   remote.source.port = 10001 | ||||||
|  |                   remote.repair.port = 10002 | ||||||
|  |                   sink.name = "Roc Sink" | ||||||
|  |                   sink.props.node.name = "roc-sink" | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |             ] | ||||||
|  |           ''; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         # Enabled modules | ||||||
|  |         modules = { | ||||||
|  |           # Communication | ||||||
|  |           whatsapp.enable = true; | ||||||
|  |           discord.enable = true; | ||||||
|  | 
 | ||||||
|  |           # Browser | ||||||
|  |           firefox = { | ||||||
|  |             enable = true; | ||||||
|  |             default = false; | ||||||
|  |           }; | ||||||
|  |           qutebrowser = { | ||||||
|  |             enable = true; | ||||||
|  |             default = true; | ||||||
|  |           }; | ||||||
|  | 
 | ||||||
|  |           # Gaming | ||||||
|  |           steam.enable = true; | ||||||
|  |           # modrinth.enable = true; | ||||||
|  |           # es-de.enable = true; # TODO: Fix, again | ||||||
|  |           retroarch.enable = true; | ||||||
|  |           ryujinx.enable = true; | ||||||
|  | 
 | ||||||
|  |           # Media | ||||||
|  |           spotify.enable = true; | ||||||
|  |           feishin.enable = true; | ||||||
|  | 
 | ||||||
|  |           # Tools | ||||||
|  |           git = { | ||||||
|  |             enable = true; | ||||||
|  |             user = "Jan-Bulthuis"; | ||||||
|  |             email = "git@bulthuis.dev"; | ||||||
|  |             # TODO: Move | ||||||
|  |             ignores = [ | ||||||
|  |               ".envrc" | ||||||
|  |               ".direnv" | ||||||
|  |               "flake.nix" | ||||||
|  |               "flake.lock" | ||||||
|  |             ]; | ||||||
|  |           }; | ||||||
|  |           btop.enable = true; | ||||||
|  |           fish.enable = true; | ||||||
|  |           bluetuith.enable = false; | ||||||
|  |           winbox.enable = true; | ||||||
|  |           obsidian.enable = true; | ||||||
|  |           zathura.enable = true; | ||||||
|  |           eduvpn.enable = true; | ||||||
|  |           keyring.enable = true; | ||||||
|  |           scripts.enable = true; | ||||||
|  |           xpra = { | ||||||
|  |             enable = true; | ||||||
|  |             hosts = [ | ||||||
|  |               "mixer@10.20.60.251" | ||||||
|  |             ]; | ||||||
|  |           }; | ||||||
|  | 
 | ||||||
|  |           # Development | ||||||
|  |           neovim.enable = true; | ||||||
|  |           vscode.enable = true; | ||||||
|  |           docker.enable = true; | ||||||
|  |           matlab.enable = true; | ||||||
|  |           mathematica.enable = true; | ||||||
|  | 
 | ||||||
|  |           # Languages | ||||||
|  |           haskell.enable = false; | ||||||
|  |           js.enable = true; | ||||||
|  |           nix.enable = true; | ||||||
|  |           rust.enable = true; | ||||||
|  |           python.enable = true; | ||||||
|  |           cpp.enable = true; | ||||||
|  |           tex.enable = true; | ||||||
|  |           jupyter.enable = true; | ||||||
|  | 
 | ||||||
|  |           # Enable unfree | ||||||
|  |           unfree.enable = true; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         # Theme configuration | ||||||
|  |         desktop.theming = | ||||||
|  |           let | ||||||
|  |             fontpkgs = config.desktop.theming.fonts.pkgs; | ||||||
|  |           in | ||||||
|  |           lib.mkDefault { | ||||||
|  |             # Fonts | ||||||
|  |             fonts.serif = fontpkgs."DejaVu Serif"; | ||||||
|  |             fonts.sansSerif = fontpkgs."DejaVu Sans"; | ||||||
|  |             fonts.monospace = fontpkgs."Dina"; | ||||||
|  |             fonts.emoji = fontpkgs."Noto Color Emoji"; | ||||||
|  |             fonts.interface = fontpkgs."Dina"; | ||||||
|  |             fonts.extraFonts = [ ]; | ||||||
|  | 
 | ||||||
|  |             # Color scheme | ||||||
|  |             themes.catppuccin = { | ||||||
|  |               enable = true; | ||||||
|  |               flavor = "mocha"; | ||||||
|  |             }; | ||||||
|  |           }; | ||||||
|  |       } | ||||||
|  |       { | ||||||
|  |         # Default desktop environment | ||||||
|  |         modules = { | ||||||
|  |           # Desktop environment | ||||||
|  |           river.enable = true; | ||||||
|  |           waylock.enable = true; | ||||||
|  |           waybar.enable = true; | ||||||
|  |           mako.enable = true; | ||||||
|  |           foot.enable = true; | ||||||
|  |           rofi-rbw.enable = true; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         # TODO: Remove everything below, it is here out of convenience and should be elsewhere | ||||||
|  |         xdg.portal = { | ||||||
|  |           enable = true; | ||||||
|  | 
 | ||||||
|  |           config.common.default = lib.mkDefault [ | ||||||
|  |             "wlr" | ||||||
|  |             "gtk" | ||||||
|  |           ]; | ||||||
|  | 
 | ||||||
|  |           extraPortals = | ||||||
|  |             with pkgs; | ||||||
|  |             lib.mkDefault [ | ||||||
|  |               xdg-desktop-portal-gtk | ||||||
|  |               xdg-desktop-portal-wlr | ||||||
|  |             ]; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         # Color scheme | ||||||
|  |         desktop.theming.background = lib.mkDefault { | ||||||
|  |           image = { | ||||||
|  |             url = "https://i.postimg.cc/tTB3dM3T/1382899.png"; | ||||||
|  |             hash = "sha256-kStcwAtK2vxitU6uaQtZTA5iFS8k0iXkFwinY2M8wQE="; | ||||||
|  |           }; | ||||||
|  |           themed = true; | ||||||
|  |           inverted = false; | ||||||
|  |         }; | ||||||
|  |         desktop.theming.themes.catppuccin = { | ||||||
|  |           enable = true; | ||||||
|  |           flavor = "mocha"; | ||||||
|  |         }; | ||||||
|  |       } | ||||||
|  |   ); | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user