This moves the various projects from "type-based" folders (such as "services" or "tools") into more appropriate semantic folders (such as "nix", "ops" or "web"). Deprecated projects (nixcon-demo & gotest) which only existed for testing/demonstration purposes have been removed. (Note: *all* builds are broken with this commit)
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
# Configuration for the desktop environment
 | 
						|
 | 
						|
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
let emacs = import ./emacs.nix { inherit pkgs; };
 | 
						|
screenLock = pkgs.writeShellScriptBin "screen-lock" ''
 | 
						|
  find ${pkgs.wallpapers} -name "*.png" | shuf -n1 | xargs i3lock -f -t -i
 | 
						|
'';
 | 
						|
in {
 | 
						|
  # Configure basic X-server stuff:
 | 
						|
  services.xserver = {
 | 
						|
    enable = true;
 | 
						|
    layout = "us,no";
 | 
						|
    xkbOptions = "caps:super, grp:shifts_toggle, parens:swap_brackets";
 | 
						|
    exportConfiguration = true;
 | 
						|
 | 
						|
    # Give EXWM permission to control the session.
 | 
						|
    displayManager.sessionCommands = "${pkgs.xorg.xhost}/bin/xhost +SI:localuser:$USER";
 | 
						|
 | 
						|
    # Use the pre 18.09 default display manager (slim)
 | 
						|
    displayManager.slim.enable = true;
 | 
						|
  };
 | 
						|
 | 
						|
  # Add a shell script with random screen lock wallpaper selection
 | 
						|
  environment.systemPackages = [ screenLock ];
 | 
						|
 | 
						|
  # Apparently when you have house guests they complain about your screen tearing!
 | 
						|
  services.compton.enable = true;
 | 
						|
  services.compton.backend = "xrender";
 | 
						|
 | 
						|
  # Configure desktop environment:
 | 
						|
  services.xserver.windowManager.session = lib.singleton {
 | 
						|
    name = "exwm";
 | 
						|
    start = ''
 | 
						|
      ${emacs}/bin/emacs --eval '(progn (server-start) (exwm-enable))'
 | 
						|
    '';
 | 
						|
  };
 | 
						|
 | 
						|
  # Configure Redshift for Oslo
 | 
						|
  services.redshift = {
 | 
						|
    enable = true;
 | 
						|
    latitude = "59.911491";
 | 
						|
    longitude = "10.757933";
 | 
						|
  };
 | 
						|
 | 
						|
  # Configure fonts
 | 
						|
  fonts = {
 | 
						|
    fonts = with pkgs; [
 | 
						|
      corefonts
 | 
						|
      font-awesome-ttf
 | 
						|
      input-fonts
 | 
						|
      noto-fonts-cjk
 | 
						|
      noto-fonts-emoji
 | 
						|
      powerline-fonts
 | 
						|
      helvetica-neue-lt-std
 | 
						|
    ];
 | 
						|
  };
 | 
						|
 | 
						|
  # Configure random setting of wallpapers
 | 
						|
  systemd.user.services.feh-wp = {
 | 
						|
    description = "Randomly set wallpaper via feh";
 | 
						|
    serviceConfig = {
 | 
						|
      Type             = "oneshot";
 | 
						|
      WorkingDirectory = "${pkgs.wallpapers}/share/wallpapers";
 | 
						|
 | 
						|
      # Manually shuffle because feh's --randomize option can't be restricted to
 | 
						|
      # just certain file types.
 | 
						|
      ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.fd}/bin/fd -atf | shuf | head -n1 | ${pkgs.findutils}/bin/xargs ${pkgs.feh}/bin/feh --bg-fill'";
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  systemd.user.timers.feh-wp = {
 | 
						|
    description = "Set a random wallpaper every hour";
 | 
						|
    wantedBy    = [ "graphical-session.target" ];
 | 
						|
    partOf      = [ "graphical-session.target" ];
 | 
						|
 | 
						|
    timerConfig = {
 | 
						|
      OnActiveSec     = "1second";
 | 
						|
      OnUnitActiveSec = "1hour";
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |