forked from fabian/nix
		
	modularize gui
This commit is contained in:
		
							parent
							
								
									61eb9ed8c5
								
							
						
					
					
						commit
						bcd049b8c5
					
				
					 13 changed files with 202 additions and 89 deletions
				
			
		|  | @ -11,5 +11,6 @@ | ||||||
|     ./steam |     ./steam | ||||||
|     ./yubikey.nix |     ./yubikey.nix | ||||||
|     ./browsers.nix |     ./browsers.nix | ||||||
|  |     ./gui | ||||||
|   ]; |   ]; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										32
									
								
								home/modules/gui/autorandr.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								home/modules/gui/autorandr.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | with lib; let | ||||||
|  |   cfg = config.local.gui; | ||||||
|  | in { | ||||||
|  |   programs.autorandr = { | ||||||
|  |     profiles."default" = { | ||||||
|  |       fingerprint = | ||||||
|  |         mapAttrs | ||||||
|  |         (monitorId: monitor: monitor.fingerprint) | ||||||
|  |         cfg.monitors; | ||||||
|  | 
 | ||||||
|  |       config = | ||||||
|  |         mapAttrs ( | ||||||
|  |           monitorId: | ||||||
|  |             filterAttrs | ||||||
|  |             (k: v: | ||||||
|  |               !elem k [ | ||||||
|  |                 #list of options to exclude from this list | ||||||
|  |                 "fingerprint" | ||||||
|  |                 "initialI3Workspace" | ||||||
|  |                 "monitorId" | ||||||
|  |               ]) | ||||||
|  |         ) | ||||||
|  |         cfg.monitors; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										116
									
								
								home/modules/gui/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								home/modules/gui/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,116 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   pkgs, | ||||||
|  |   lib, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | with lib; let | ||||||
|  |   cfg = config.local.gui; | ||||||
|  |   monitorType = {setName}: ( | ||||||
|  |     types.submodule ({name ? null, ...}: { | ||||||
|  |       options = { | ||||||
|  |         monitorId = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           example = "DP-1"; | ||||||
|  |           readOnly = true; | ||||||
|  |           internal = true; | ||||||
|  |         }; | ||||||
|  |         primary = mkOption { | ||||||
|  |           type = types.bool; | ||||||
|  |           default = false; | ||||||
|  |           description = "is primary monitor"; | ||||||
|  |           example = "true"; | ||||||
|  |         }; | ||||||
|  |         position = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           example = "0x0"; | ||||||
|  |         }; | ||||||
|  |         mode = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           description = "resolution"; | ||||||
|  |           default = "1920x1080"; | ||||||
|  |           example = "1920x1080"; | ||||||
|  |         }; | ||||||
|  |         rate = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           description = "refresh rate"; | ||||||
|  |           example = "143.85"; | ||||||
|  |         }; | ||||||
|  |         rotate = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           default = "normal"; | ||||||
|  |           example = "left"; | ||||||
|  |         }; | ||||||
|  |         fingerprint = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           example = "00ffffffffffff003669a03bd4040000231e0104a5341d783bd005ac5048a627125054bfcf00814081809500714f81c0b30001010101023a801871382d40582c450009252100001e0882805070384d400820f80c09252100001a000000fd003090b4b422010a202020202020000000fc004d53492047323443340a20202001a2020320f14d010304131f120211900e0f1d1e230907078301000065030c001000866f80a0703840403020350009252100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9"; | ||||||
|  |         }; | ||||||
|  |         initialI3Workspace = mkOption { | ||||||
|  |           type = types.nullOr types.int; | ||||||
|  |           default = null; | ||||||
|  |           example = 1; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |       config = optionalAttrs setName { | ||||||
|  |         # make this better later | ||||||
|  |         monitorId = name; | ||||||
|  |       }; | ||||||
|  |     }) | ||||||
|  |   ); | ||||||
|  | in { | ||||||
|  |   options.local.gui = { | ||||||
|  |     enable = mkEnableOption "GUI settings"; | ||||||
|  |     primaryMonitor = mkOption { | ||||||
|  |       type = monitorType {setName = false;}; | ||||||
|  |       readOnly = true; | ||||||
|  |       internal = true; | ||||||
|  |     }; | ||||||
|  |     monitors = mkOption { | ||||||
|  |       type = types.attrsOf (monitorType {setName = true;}); | ||||||
|  |     }; | ||||||
|  |     displayBatteryLevel = mkOption { | ||||||
|  |       type = types.bool; | ||||||
|  |       default = false; | ||||||
|  |       description = "show battery level on polybar"; | ||||||
|  |       example = "true"; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   imports = [ | ||||||
|  |     ./autorandr.nix | ||||||
|  |     ./fonts.nix | ||||||
|  |     ./i3.nix | ||||||
|  |     ./polybar.nix | ||||||
|  |     ./startx.nix # move to ly once 24.11 comes out :( | ||||||
|  |     ./picom.nix | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   config = let | ||||||
|  |     primaryMonitors = | ||||||
|  |       filter (monitor: monitor.primary) | ||||||
|  |       (attrValues cfg.monitors); | ||||||
|  |   in | ||||||
|  |     mkIf cfg.enable { | ||||||
|  |       assertions = [ | ||||||
|  |         { | ||||||
|  |           assertion = length primaryMonitors == 1; | ||||||
|  |           message = "Exactly one (1) primary monitor is requiered."; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  | 
 | ||||||
|  |       local.gui.primaryMonitor = head primaryMonitors; | ||||||
|  | 
 | ||||||
|  |       xsession = { | ||||||
|  |         enable = true; | ||||||
|  |         windowManager.i3.enable = true; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       programs.autorandr.enable = true; | ||||||
|  |       services = { | ||||||
|  |         dunst.enable = true; | ||||||
|  |         betterlockscreen.enable = true; | ||||||
|  |         polybar.enable = true; | ||||||
|  |         picom.enable = true; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | } | ||||||
|  | @ -1,4 +1,3 @@ | ||||||
| #TODO: do i really need to take all these args? |  | ||||||
| { | { | ||||||
|   config, |   config, | ||||||
|   lib, |   lib, | ||||||
|  | @ -6,7 +6,6 @@ | ||||||
| }: | }: | ||||||
| with lib; { | with lib; { | ||||||
|   xsession.windowManager.i3 = { |   xsession.windowManager.i3 = { | ||||||
|     enable = true; |  | ||||||
|     package = pkgs.i3-gaps; |     package = pkgs.i3-gaps; | ||||||
| 
 | 
 | ||||||
|     config = let |     config = let | ||||||
|  | @ -87,17 +86,17 @@ with lib; { | ||||||
|         } |         } | ||||||
|       ]; |       ]; | ||||||
| 
 | 
 | ||||||
|       workspaceOutputAssign = [ |       workspaceOutputAssign = | ||||||
|         { |         mapAttrsToList ( | ||||||
|           output = "DP-1"; |           monitorId: v: | ||||||
|           workspace = "1"; |             { | ||||||
|         } |               output = monitorId; | ||||||
|         { |             } | ||||||
|           output = "DP-2"; |             // optionalAttrs (v.initialI3Workspace != null) { | ||||||
|           workspace = "10"; |               workspace = toString v.initialI3Workspace; | ||||||
|         } |             } | ||||||
|       ]; |         ) | ||||||
| 
 |         config.local.gui.monitors; | ||||||
|       bars = []; |       bars = []; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
|  | @ -5,7 +5,6 @@ | ||||||
|   ... |   ... | ||||||
| }: { | }: { | ||||||
|   services.picom = { |   services.picom = { | ||||||
|     enable = true; |  | ||||||
|     fade = true; |     fade = true; | ||||||
|     fadeSteps = [0.1 0.1]; |     fadeSteps = [0.1 0.1]; | ||||||
|     fadeDelta = 10; |     fadeDelta = 10; | ||||||
|  | @ -6,7 +6,6 @@ | ||||||
| }: | }: | ||||||
| with lib; { | with lib; { | ||||||
|   services.polybar = { |   services.polybar = { | ||||||
|     enable = true; |  | ||||||
|     package = pkgs.polybarFull; |     package = pkgs.polybarFull; | ||||||
|     script = '' |     script = '' | ||||||
|       # Terminate already running bar instances |       # Terminate already running bar instances | ||||||
|  | @ -33,7 +32,7 @@ with lib; { | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       "bar/main" = { |       "bar/main" = { | ||||||
|         monitor = "DP-1"; |         monitor = config.local.gui.primaryMonitor.monitorId; | ||||||
|         width = "100%"; |         width = "100%"; | ||||||
|         height = 30; |         height = 30; | ||||||
|         offset-x = "0%"; |         offset-x = "0%"; | ||||||
|  | @ -82,7 +81,9 @@ with lib; { | ||||||
|       }; |       }; | ||||||
| 
 | 
 | ||||||
|       "bar/secondary" = { |       "bar/secondary" = { | ||||||
|         monitor = "DP-2"; |         monitor = head (attrNames (filterAttrs (monitorId: v: | ||||||
|  |           !v.primary) | ||||||
|  |         config.local.gui.monitors)); # this is bad. will fail if more than 2 monitors. this sets all monitors other than the primary one for this bar. | ||||||
|         "inherit" = "bar/main"; |         "inherit" = "bar/main"; | ||||||
| 
 | 
 | ||||||
|         modules-left = "i3"; |         modules-left = "i3"; | ||||||
							
								
								
									
										16
									
								
								home/modules/gui/startx.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								home/modules/gui/startx.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | ||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | with lib; { | ||||||
|  |   config = mkIf config.local.gui.enable { | ||||||
|  |     home.file.".xinitrc".source = let | ||||||
|  |       content = '' | ||||||
|  |         exec ~/.xsession | ||||||
|  |       ''; | ||||||
|  |     in | ||||||
|  |       pkgs.writeShellScript "xinitrc" content; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | @ -8,7 +8,6 @@ | ||||||
|   imports = [ |   imports = [ | ||||||
|     ./apps.nix |     ./apps.nix | ||||||
|     ./systemd |     ./systemd | ||||||
|     ./gui |  | ||||||
|     ./isolation.nix |     ./isolation.nix | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|  | @ -22,6 +21,28 @@ | ||||||
|     "unstable".flake = flakes.unstable; |     "unstable".flake = flakes.unstable; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   local.gui = { | ||||||
|  |     enable = true; | ||||||
|  |     #? wallpaperPath = ""; place wallpaper in config? | ||||||
|  |     monitors = { | ||||||
|  |       DP-1 = { | ||||||
|  |         primary = true; | ||||||
|  |         position = "0x0"; | ||||||
|  |         mode = "1920x1080"; | ||||||
|  |         rate = "143.85"; | ||||||
|  |         fingerprint = "00ffffffffffff003669a03bd4040000231e0104a5341d783bd005ac5048a627125054bfcf00814081809500714f81c0b30001010101023a801871382d40582c450009252100001e0882805070384d400820f80c09252100001a000000fd003090b4b422010a202020202020000000fc004d53492047323443340a20202001a2020320f14d010304131f120211900e0f1d1e230907078301000065030c001000866f80a0703840403020350009252100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9"; | ||||||
|  |         initialI3Workspace = 1; | ||||||
|  |       }; | ||||||
|  |       DP-2 = { | ||||||
|  |         position = "1920x0"; | ||||||
|  |         mode = "1920x1080"; | ||||||
|  |         rate = "59.94"; | ||||||
|  |         fingerprint = "00ffffffffffff0009d1e77845540000061f0104a5351e783a0565a756529c270f5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff0039324d30303033323031510a20000000fd00324c1e5311010a202020202020000000fc0042656e51204757323438300a20019b02031cf14f901f041303120211011406071516052309070783010000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f28210000180000000000000000000000000000000000000000000000000000008d"; | ||||||
|  |         initialI3Workspace = 10; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|   home = { |   home = { | ||||||
|     stateVersion = "21.11"; # No tocar esto |     stateVersion = "21.11"; # No tocar esto | ||||||
|     username = "fabian"; |     username = "fabian"; | ||||||
|  |  | ||||||
|  | @ -1,35 +0,0 @@ | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   programs.autorandr = { |  | ||||||
|     enable = true; |  | ||||||
|     profiles."posixlycorrect" = { |  | ||||||
|       fingerprint = { |  | ||||||
|         DP-1 = "00ffffffffffff003669a03bd4040000231e0104a5341d783bd005ac5048a627125054bfcf00814081809500714f81c0b30001010101023a801871382d40582c450009252100001e0882805070384d400820f80c09252100001a000000fd003090b4b422010a202020202020000000fc004d53492047323443340a20202001a2020320f14d010304131f120211900e0f1d1e230907078301000065030c001000866f80a0703840403020350009252100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9"; |  | ||||||
|         DP-2 = "00ffffffffffff0009d1e77845540000061f0104a5351e783a0565a756529c270f5054a56b80d1c0b300a9c08180810081c001010101023a801871382d40582c45000f282100001e000000ff0039324d30303033323031510a20000000fd00324c1e5311010a202020202020000000fc0042656e51204757323438300a20019b02031cf14f901f041303120211011406071516052309070783010000023a801871382d40582c45000f282100001f011d8018711c1620582c25000f282100009f011d007251d01e206e2855000f282100001e8c0ad08a20e02d10103e96000f28210000180000000000000000000000000000000000000000000000000000008d"; |  | ||||||
|       }; |  | ||||||
|       config = { |  | ||||||
|         DP-1 = { |  | ||||||
|           enable = true; |  | ||||||
|           primary = true; |  | ||||||
|           position = "0x0"; |  | ||||||
|           mode = "1920x1080"; |  | ||||||
|           rate = "143.85"; |  | ||||||
|           rotate = "normal"; |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         DP-2 = { |  | ||||||
|           enable = true; |  | ||||||
|           primary = false; |  | ||||||
|           position = "1920x0"; |  | ||||||
|           mode = "1920x1080"; |  | ||||||
|           rate = "59.94"; |  | ||||||
|           rotate = "normal"; |  | ||||||
|         }; |  | ||||||
|       }; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   pkgs, |  | ||||||
|   lib, |  | ||||||
|   ... |  | ||||||
| }: { |  | ||||||
|   imports = [ |  | ||||||
|     ./autorandr.nix |  | ||||||
|     ./fonts.nix |  | ||||||
|     ./i3.nix |  | ||||||
|     ./polybar.nix |  | ||||||
|     ./startx.nix |  | ||||||
|     ./picom.nix |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   services = { |  | ||||||
|     dunst.enable = true; |  | ||||||
|     betterlockscreen.enable = true; |  | ||||||
|   }; |  | ||||||
| } |  | ||||||
|  | @ -1,16 +0,0 @@ | ||||||
| { |  | ||||||
|   config, |  | ||||||
|   lib, |  | ||||||
|   pkgs, |  | ||||||
|   ... |  | ||||||
| }: |  | ||||||
| with lib; { |  | ||||||
|   xsession.enable = true; |  | ||||||
| 
 |  | ||||||
|   home.file.".xinitrc".source = let |  | ||||||
|     content = '' |  | ||||||
|       exec ~/.xsession |  | ||||||
|     ''; |  | ||||||
|   in |  | ||||||
|     pkgs.writeShellScript "xinitrc" content; |  | ||||||
| } |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue