diff --git a/nix/configuration/configuration.nix b/nix/configuration/configuration.nix index 67e3a45..8ba3d1e 100644 --- a/nix/configuration/configuration.nix +++ b/nix/configuration/configuration.nix @@ -28,6 +28,7 @@ ./roles/graphics ./roles/sound ./roles/sway + ./roles/kanshi ./roles/alacritty ./roles/firefox ./roles/chromium @@ -47,6 +48,7 @@ ./roles/media ./roles/steam ./roles/latex + ./roles/launch_keyboard ]; nix.settings.experimental-features = [ diff --git a/nix/configuration/roles/launch_keyboard/default.nix b/nix/configuration/roles/launch_keyboard/default.nix new file mode 100644 index 0000000..ba51cb4 --- /dev/null +++ b/nix/configuration/roles/launch_keyboard/default.nix @@ -0,0 +1,36 @@ +{ + config, + lib, + pkgs, + ... +}: + +{ + imports = [ ]; + + config = lib.mkIf config.me.graphical { + environment.systemPackages = with pkgs; [ + system76-keyboard-configurator + dfu-programmer # For flashing keyboard https://support.system76.com/articles/launch_2-firmware-update/ + avrdude # For flashing keyboard https://support.system76.com/articles/launch_2-firmware-update/ + lxqt.lxqt-policykit # Need a polkit agent to launch the keyboard configurator + ]; + + # TODO: Switch sway to using seatd instead of polkit + systemd = { + user.services.lxqt-policykit-agent = { + description = "lxqt-policykit-agent"; + wantedBy = [ "graphical-session.target" ]; + wants = [ "graphical-session.target" ]; + after = [ "graphical-session.target" ]; + serviceConfig = { + Type = "simple"; + ExecStart = "${pkgs.lxqt.lxqt-policykit}/bin/lxqt-policykit-agent"; + Restart = "on-failure"; + RestartSec = 1; + TimeoutStopSec = 10; + }; + }; + }; + }; +} diff --git a/nix/configuration/roles/launch_keyboard/files/launch_keyboard_layout.json b/nix/configuration/roles/launch_keyboard/files/launch_keyboard_layout.json new file mode 100644 index 0000000..8bfcee7 --- /dev/null +++ b/nix/configuration/roles/launch_keyboard/files/launch_keyboard_layout.json @@ -0,0 +1,894 @@ +{ + "model": "system76/launch_2", + "version": 1, + "map": { + "K00": [ + "ESC", + "RESET", + "ROLL_OVER", + "ROLL_OVER" + ], + "K01": [ + "F1", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K02": [ + "F2", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K03": [ + "F3", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K04": [ + "F4", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K05": [ + "F5", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K06": [ + "F6", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K07": [ + "F7", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K08": [ + "F8", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K09": [ + "F9", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K0A": [ + "F10", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K0B": [ + "F11", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K0C": [ + "F12", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K0D": [ + "DEL", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K0E": [ + "HOME", + "PLAY_PAUSE", + "ROLL_OVER", + "ROLL_OVER" + ], + "K10": [ + "TICK", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K11": [ + "1", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K12": [ + "2", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K13": [ + "3", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K14": [ + "4", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K15": [ + "5", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K16": [ + "6", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K17": [ + "7", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K18": [ + "8", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K19": [ + "9", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K1A": [ + "0", + "KBD_TOGGLE", + "ROLL_OVER", + "ROLL_OVER" + ], + "K1B": [ + "MINUS", + "KBD_DOWN", + "ROLL_OVER", + "ROLL_OVER" + ], + "K1C": [ + "EQUALS", + "KBD_UP", + "ROLL_OVER", + "ROLL_OVER" + ], + "K1D": [ + "BKSP", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K1E": [ + "PGUP", + "VOLUME_UP", + "ROLL_OVER", + "ROLL_OVER" + ], + "K20": [ + "TAB", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K21": [ + "Q", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K22": [ + "W", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K23": [ + "E", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K24": [ + "R", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K25": [ + "T", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K26": [ + "Y", + "HOME", + "ROLL_OVER", + "ROLL_OVER" + ], + "K27": [ + "U", + "PGDN", + "ROLL_OVER", + "ROLL_OVER" + ], + "K28": [ + "I", + "PGUP", + "ROLL_OVER", + "ROLL_OVER" + ], + "K29": [ + "O", + "END", + "ROLL_OVER", + "ROLL_OVER" + ], + "K2A": [ + "P", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K2B": [ + "BRACE_OPEN", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K2C": [ + "BRACE_CLOSE", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K2D": [ + "BACKSLASH", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K2E": [ + "PGDN", + "VOLUME_DOWN", + "ROLL_OVER", + "ROLL_OVER" + ], + "K30": [ + "CAPS", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K31": [ + "A", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K32": [ + "S", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K33": [ + "D", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K34": [ + "F", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K35": [ + "G", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K36": [ + "H", + "LEFT", + "ROLL_OVER", + "ROLL_OVER" + ], + "K37": [ + "J", + "DOWN", + "ROLL_OVER", + "ROLL_OVER" + ], + "K38": [ + "K", + "UP", + "ROLL_OVER", + "ROLL_OVER" + ], + "K39": [ + "L", + "RIGHT", + "ROLL_OVER", + "ROLL_OVER" + ], + "K3A": [ + "SEMICOLON", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K3B": [ + "QUOTE", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K3C": [ + "ENTER", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K3D": [ + "END", + "MUTE", + "ROLL_OVER", + "ROLL_OVER" + ], + "K40": [ + "LEFT_SHIFT", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K41": [ + "Z", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K42": [ + "X", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K43": [ + "C", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K44": [ + "V", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K45": [ + "B", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K46": [ + "N", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K47": [ + "M", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K48": [ + "COMMA", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K49": [ + "PERIOD", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K4A": [ + "SLASH", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K4B": [ + "RIGHT_SHIFT", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K4C": [ + "UP", + "PGUP", + "ROLL_OVER", + "ROLL_OVER" + ], + "K50": [ + "LEFT_CTRL", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K51": [ + "LEFT_SUPER", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K52": [ + "LEFT_ALT", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K53": [ + "FN", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K54": [ + "SPACE", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K55": [ + "SPACE", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K56": [ + "RIGHT_CTRL", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K57": [ + "RIGHT_ALT", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K58": [ + "PRINT_SCREEN", + "ROLL_OVER", + "ROLL_OVER", + "ROLL_OVER" + ], + "K59": [ + "LEFT", + "HOME", + "ROLL_OVER", + "ROLL_OVER" + ], + "K5A": [ + "DOWN", + "PGDN", + "ROLL_OVER", + "ROLL_OVER" + ], + "K5B": [ + "RIGHT", + "END", + "ROLL_OVER", + "ROLL_OVER" + ] + }, + "key_leds": { + "K00": [ + 0, + 0 + ], + "K01": [ + 0, + 0 + ], + "K02": [ + 0, + 0 + ], + "K03": [ + 0, + 0 + ], + "K04": [ + 0, + 0 + ], + "K05": [ + 0, + 0 + ], + "K06": [ + 0, + 0 + ], + "K07": [ + 0, + 0 + ], + "K08": [ + 0, + 0 + ], + "K09": [ + 0, + 0 + ], + "K0A": [ + 0, + 0 + ], + "K0B": [ + 0, + 0 + ], + "K0C": [ + 0, + 0 + ], + "K0D": [ + 0, + 0 + ], + "K0E": [ + 0, + 0 + ], + "K10": [ + 0, + 0 + ], + "K11": [ + 0, + 0 + ], + "K12": [ + 0, + 0 + ], + "K13": [ + 0, + 0 + ], + "K14": [ + 0, + 0 + ], + "K15": [ + 0, + 0 + ], + "K16": [ + 0, + 0 + ], + "K17": [ + 0, + 0 + ], + "K18": [ + 0, + 0 + ], + "K19": [ + 0, + 0 + ], + "K1A": [ + 0, + 0 + ], + "K1B": [ + 0, + 0 + ], + "K1C": [ + 0, + 0 + ], + "K1D": [ + 0, + 0 + ], + "K1E": [ + 0, + 0 + ], + "K20": [ + 0, + 0 + ], + "K21": [ + 0, + 0 + ], + "K22": [ + 0, + 0 + ], + "K23": [ + 0, + 0 + ], + "K24": [ + 0, + 0 + ], + "K25": [ + 0, + 0 + ], + "K26": [ + 0, + 0 + ], + "K27": [ + 0, + 0 + ], + "K28": [ + 0, + 0 + ], + "K29": [ + 0, + 0 + ], + "K2A": [ + 0, + 0 + ], + "K2B": [ + 0, + 0 + ], + "K2C": [ + 0, + 0 + ], + "K2D": [ + 0, + 0 + ], + "K2E": [ + 0, + 0 + ], + "K30": [ + 0, + 0 + ], + "K31": [ + 0, + 0 + ], + "K32": [ + 0, + 0 + ], + "K33": [ + 0, + 0 + ], + "K34": [ + 0, + 0 + ], + "K35": [ + 0, + 0 + ], + "K36": [ + 0, + 0 + ], + "K37": [ + 0, + 0 + ], + "K38": [ + 0, + 0 + ], + "K39": [ + 0, + 0 + ], + "K3A": [ + 0, + 0 + ], + "K3B": [ + 0, + 0 + ], + "K3C": [ + 0, + 0 + ], + "K3D": [ + 0, + 0 + ], + "K40": [ + 0, + 0 + ], + "K41": [ + 0, + 0 + ], + "K42": [ + 0, + 0 + ], + "K43": [ + 0, + 0 + ], + "K44": [ + 0, + 0 + ], + "K45": [ + 0, + 0 + ], + "K46": [ + 0, + 0 + ], + "K47": [ + 0, + 0 + ], + "K48": [ + 0, + 0 + ], + "K49": [ + 0, + 0 + ], + "K4A": [ + 0, + 0 + ], + "K4B": [ + 0, + 0 + ], + "K4C": [ + 0, + 0 + ], + "K50": [ + 0, + 0 + ], + "K51": [ + 0, + 0 + ], + "K52": [ + 0, + 0 + ], + "K53": [ + 0, + 0 + ], + "K54": [ + 0, + 0 + ], + "K55": [ + 0, + 0 + ], + "K56": [ + 0, + 0 + ], + "K57": [ + 0, + 0 + ], + "K58": [ + 0, + 0 + ], + "K59": [ + 0, + 0 + ], + "K5A": [ + 0, + 0 + ], + "K5B": [ + 0, + 0 + ] + }, + "layers": [ + { + "mode": [ + 0, + 127 + ], + "brightness": 109, + "color": [ + 0, + 0 + ] + }, + { + "mode": [ + 13, + 127 + ], + "brightness": 109, + "color": [ + 21, + 255 + ] + }, + { + "mode": [ + 13, + 127 + ], + "brightness": 109, + "color": [ + 142, + 255 + ] + }, + { + "mode": [ + 13, + 127 + ], + "brightness": 109, + "color": [ + 142, + 255 + ] + } + ] +} \ No newline at end of file diff --git a/nix/configuration/roles/sway/default.nix b/nix/configuration/roles/sway/default.nix index 183e6c3..1b3b8ba 100644 --- a/nix/configuration/roles/sway/default.nix +++ b/nix/configuration/roles/sway/default.nix @@ -256,7 +256,7 @@ let in { imports = [ - ../kanshi + ./graphical_session_target.nix ]; options.me.swayIncludes = lib.mkOption { @@ -310,14 +310,12 @@ in extraOptions = if config.me.buildingIso then [ - "--debug" "--config" "${sway-config}" "--unsupported-gpu" ] else [ - "--debug" "--config" "${sway-config}" ]; @@ -384,7 +382,7 @@ in environment.loginShellInit = '' # TODO: This shouldn't be shoe-horned into the sway config doas iw dev wlan0 set power_save off - [[ "$(tty)" = "/dev/tty1" ]] && exec sway + [ -z "$WAYLAND_DISPLAY" ] && [ -n "$XDG_VTNR" ] && [ "$XDG_VTNR" -eq 1 ] && [ "$(tty)" = "/dev/tty1" ] && exec ${pkgs.systemd}/bin/systemd-cat --identifier=sway sway ''; }; } diff --git a/nix/configuration/roles/sway/graphical_session_target.nix b/nix/configuration/roles/sway/graphical_session_target.nix new file mode 100644 index 0000000..b80c631 --- /dev/null +++ b/nix/configuration/roles/sway/graphical_session_target.nix @@ -0,0 +1,24 @@ +{ + config, + lib, + pkgs, + ... +}: + +let + start_sway_session = pkgs.writeTextFile { + name = "start_sway_session.conf"; + text = '' + # Trigger graphical-session.target through sway-session.target so systemd user units can depend on it. + exec systemctl --user start sway-session.target + ''; + }; +in +{ + imports = [ ]; + + me.swayIncludes = lib.mkAfter [ + start_sway_session + ]; + +}