You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

108 lines
3.2 KiB

# This is a custom file for a surface.
{ config, lib, pkgs, modulesPath, ... }:
{
environment.systemPackages = with pkgs; [
obs-studio
rnote
xournalpp
];
# Set an usable key configuration: Ctrl at capslock, Win at Alt, Alt at Ctrl
services.xserver.displayManager.sessionCommands =''
${pkgs.xorg.xmodmap}/bin/xmodmap "${pkgs.writeText "xkb-layout" ''
!
! Swap Caps_Lock and Control_L
!
remove Lock = Caps_Lock
remove Control = Control_L
! keysym Control_L = Caps_Lock
keysym Control_L = Mode_switch
keysym Caps_Lock = Control_L
add Lock = Caps_Lock
add Control = Control_L
! map arrows to more ergonomic position
keycode 43 = h H Left
keycode 44 = j J Down
keycode 45 = k K Up
keycode 46 = l L Right
''}"
'';
# add pulseaudio support to manage audio
hardware.pulseaudio.enable = true;
# next sleep & wake is code from: https://github.com/hpfr/system/blob/2e5b3b967b0436203d7add6adbd6b6f55e87cf3c/hosts/linux-surface.nix
systemd.services = {
surface-sleep = {
enable = lib.versionOlder config.boot.kernelPackages.kernel.version "5.4";
before = [ "suspend.target" ];
wantedBy = [ "suspend.target" ];
serviceConfig.Type = "oneshot";
path = with pkgs; [ procps kmod bluez ];
script = ''
# Disable bluetooth if no device is connected
if ps cax | grep bluetoothd && ! bluetoothctl info; then
bluetoothctl power off
fi
## Disable bluetooth regardless if devices are connected (see notes below)
# if ps cax | grep bluetoothd; then
# bluetoothctl power off
# fi
## > Remove IPTS from ME side
modprobe -r ipts_surface
modprobe -r intel_ipts
# modprobe -r mei_hdcp
modprobe -r mei_me
modprobe -r mei
## > Remove IPTS from i915 side
for i in $(find /sys/kernel/debug/dri -name i915_ipts_cleanup); do
echo 1 > $i
done
'';
};
surface-wake = {
enable = lib.versionOlder config.boot.kernelPackages.kernel.version "5.4";
after = [ "post-resume.target" ];
wantedBy = [ "post-resume.target" ];
serviceConfig.Type = "oneshot";
path = with pkgs; [ procps kmod bluez ];
script = ''
## > Load IPTS from i915 side
for i in $(find /sys/kernel/debug/dri -name i915_ipts_init); do
echo 1 > $i
done
## > Load IPTS from ME side
modprobe mei
modprobe mei_me
# modprobe mei_hdcp
modprobe intel_ipts
modprobe ipts_surface
# Restart bluetooth
if ps cax | grep bluetoothd; then
bluetoothctl power on
fi
'';
};
};
## NOTES:
# Susspend issue:
# https://github.com/linux-surface/linux-surface/wiki/Known-Issues-and-FAQ#suspend-aka-sleep-vs-lid-closingopening-events
# run:
# > sudo modprobe -r surface_gpe
# and:
# > sudo bash -c 'echo -e "\n# Blacklisting lid vs. suspend issue module\nblacklist surface_gpe" >> /etc/modprobe.d/blacklist.conf'
#
# Now folding the keyboard to the screen will not suspend and brick the
# session, but you will need to manually suspend the session if saving battery
# is desired.
}