104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, pkgs, lib, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
|   cfg = config.programs.rootston;
 | |
| 
 | |
|   rootstonWrapped = pkgs.writeScriptBin "rootston" ''
 | |
|     #! ${pkgs.runtimeShell}
 | |
|     if [[ "$#" -ge 1 ]]; then
 | |
|       exec ${pkgs.rootston}/bin/rootston "$@"
 | |
|     else
 | |
|       ${cfg.extraSessionCommands}
 | |
|       exec ${pkgs.rootston}/bin/rootston -C ${cfg.configFile}
 | |
|     fi
 | |
|   '';
 | |
| in {
 | |
|   options.programs.rootston = {
 | |
|     enable = mkEnableOption ''
 | |
|       rootston, the reference compositor for wlroots. The purpose of rootston
 | |
|       is to test and demonstrate the features of wlroots (if you want a real
 | |
|       Wayland compositor you should e.g. use Sway instead). You can manually
 | |
|       start the compositor by running "rootston" from a terminal'';
 | |
| 
 | |
|     extraSessionCommands = mkOption {
 | |
|       type = types.lines;
 | |
|       default = "";
 | |
|       example = ''
 | |
|         # Define a keymap (US QWERTY is the default)
 | |
|         export XKB_DEFAULT_LAYOUT=de,us
 | |
|         export XKB_DEFAULT_VARIANT=nodeadkeys
 | |
|         export XKB_DEFAULT_OPTIONS=grp:alt_shift_toggle,caps:escape
 | |
|       '';
 | |
|       description = ''
 | |
|         Shell commands executed just before rootston is started.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     extraPackages = mkOption {
 | |
|       type = with types; listOf package;
 | |
|       default = with pkgs; [
 | |
|         westonLite xwayland rofi
 | |
|       ];
 | |
|       defaultText = literalExample ''
 | |
|         with pkgs; [
 | |
|           westonLite xwayland rofi
 | |
|         ]
 | |
|       '';
 | |
|       example = literalExample "[ ]";
 | |
|       description = ''
 | |
|         Extra packages to be installed system wide.
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     config = mkOption {
 | |
|       type = types.str;
 | |
|       default = ''
 | |
|         [keyboard]
 | |
|         meta-key = Logo
 | |
| 
 | |
|         # Sway/i3 like Keybindings
 | |
|         # Maps key combinations with commands to execute
 | |
|         # Commands include:
 | |
|         # - "exit" to stop the compositor
 | |
|         # - "exec" to execute a shell command
 | |
|         # - "close" to close the current view
 | |
|         # - "next_window" to cycle through windows
 | |
|         [bindings]
 | |
|         Logo+Shift+e = exit
 | |
|         Logo+q = close
 | |
|         Logo+m = maximize
 | |
|         Alt+Tab = next_window
 | |
|         Logo+Return = exec weston-terminal
 | |
|         Logo+d = exec rofi -show run
 | |
|       '';
 | |
|       description = ''
 | |
|         Default configuration for rootston (used when called without any
 | |
|         parameters).
 | |
|       '';
 | |
|     };
 | |
| 
 | |
|     configFile = mkOption {
 | |
|       type = types.path;
 | |
|       default = "/etc/rootston.ini";
 | |
|       example = literalExample "${pkgs.rootston}/etc/rootston.ini";
 | |
|       description = ''
 | |
|         Path to the default rootston configuration file (the "config" option
 | |
|         will have no effect if you change the path).
 | |
|       '';
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     environment.etc."rootston.ini".text = cfg.config;
 | |
|     environment.systemPackages = [ rootstonWrapped ] ++ cfg.extraPackages;
 | |
| 
 | |
|     hardware.opengl.enable = mkDefault true;
 | |
|     fonts.enableDefaultFonts = mkDefault true;
 | |
|     programs.dconf.enable = mkDefault true;
 | |
|   };
 | |
| 
 | |
|   meta.maintainers = with lib.maintainers; [ primeos gnidorah ];
 | |
| }
 | 
