forked from mirrors_public/oddlama_nix-config
313 lines
11 KiB
Nix
313 lines
11 KiB
Nix
{
|
|
lib,
|
|
config,
|
|
nixosConfig,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib)
|
|
escapeShellArg
|
|
getExe
|
|
mapAttrs'
|
|
nameValuePair
|
|
;
|
|
|
|
bindWithModifier = mapAttrs' (k: nameValuePair (cfg.modifier + "+" + k));
|
|
cfg = config.xsession.windowManager.i3.config;
|
|
|
|
i3-per-workspace-layout = pkgs.rustPlatform.buildRustPackage {
|
|
pname = "i3-per-workspace-layout";
|
|
version = "1.0.0";
|
|
|
|
src = ./i3-per-workspace-layout;
|
|
cargoHash = "sha256-Sr++AnE/b7vj7dhoQhHW+riwkAOhueGusW0RtHciDK0=";
|
|
|
|
meta = with lib; {
|
|
description = "A helper utility to allow assigning a layout to each workspace in i3";
|
|
license = licenses.mit;
|
|
maintainers = with maintainers; [ oddlama ];
|
|
mainProgram = "i3-per-workspace-layout";
|
|
};
|
|
};
|
|
|
|
sway-overfocus = pkgs.rustPlatform.buildRustPackage {
|
|
pname = "sway-overfocus";
|
|
version = "1.0.0";
|
|
|
|
src = pkgs.fetchFromGitHub {
|
|
owner = "korreman";
|
|
repo = "sway-overfocus";
|
|
rev = "8c2a80fd111dcb9ce7e956b867c0d0180b13b649";
|
|
hash = "sha256-Rv4dTycB19c2JyQ0y5WpDpX15D2RhjKq2lPOyuK2Ki8=";
|
|
};
|
|
cargoHash = "sha256-n/Ytn8t67f4FuZWqd4kQtQRewnDRfko7LO3OFb0Omaw=";
|
|
|
|
meta = with lib; {
|
|
description = "Better focus navigation for sway and i3";
|
|
license = licenses.mit;
|
|
maintainers = with maintainers; [ oddlama ];
|
|
mainProgram = "sway-overfocus";
|
|
};
|
|
};
|
|
in
|
|
{
|
|
xsession.numlock.enable = true;
|
|
xsession.windowManager.i3 = {
|
|
enable = true;
|
|
enableSystemdTarget = true;
|
|
config = {
|
|
modifier = "Mod4";
|
|
terminal = "kitty";
|
|
|
|
# Excuse me, le füque
|
|
focus.followMouse = false;
|
|
focus.mouseWarping = false;
|
|
|
|
# TODO menu = "rofi -show run";
|
|
|
|
keybindings =
|
|
{
|
|
"XF86AudioRaiseVolume" =
|
|
"exec --no-startup-id ${getExe pkgs.scripts.volume} set-volume @DEFAULT_AUDIO_SINK@ 5%+";
|
|
"XF86AudioLowerVolume" =
|
|
"exec --no-startup-id ${getExe pkgs.scripts.volume} set-volume @DEFAULT_AUDIO_SINK@ 5%-";
|
|
"XF86AudioMute" =
|
|
"exec --no-startup-id ${getExe pkgs.scripts.volume} set-mute @DEFAULT_AUDIO_SINK@ toggle";
|
|
"XF86AudioMicMute" =
|
|
"exec --no-startup-id ${getExe pkgs.scripts.volume} set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
|
|
"XF86AudioPlay" = "exec --no-startup-id ${getExe pkgs.playerctl} play-pause";
|
|
"XF86AudioNext" = "exec --no-startup-id ${getExe pkgs.playerctl} next";
|
|
"XF86AudioPrev" = "exec --no-startup-id ${getExe pkgs.playerctl} previous";
|
|
"XF86MonBrightnessUp" = "exec --no-startup-id ${getExe pkgs.scripts.brightness} set +5%";
|
|
"XF86MonBrightnessDown" = "exec --no-startup-id ${getExe pkgs.scripts.brightness} set 5%-";
|
|
}
|
|
// {
|
|
"Menu" = "exec ${cfg.menu}";
|
|
}
|
|
# General mappings that start with $modifier+...
|
|
// bindWithModifier {
|
|
"t" = "exec ${cfg.terminal}";
|
|
"asciicircum" = "exec ${cfg.menu}";
|
|
# TODO only open if not already open
|
|
# TODO shortcut to open these from eww bar with 1 click
|
|
"b" = "exec firefox"; # TODO ; exec signal-desktop; exec discord
|
|
"Shift+s" = "exec --no-startup-id ${getExe pkgs.scripts.screenshot-area}";
|
|
"F11" = "exec --no-startup-id ${getExe pkgs.scripts.screenshot-area-scan-qr}";
|
|
# Exlicitly without --no-startup-id to show the spinner
|
|
"F12" = "exec ${getExe pkgs.scripts.screenshot-screen}";
|
|
"Print" =
|
|
"exec --no-startup-id env QT_AUTO_SCREEN_SCALE_FACTOR=0 QT_SCREEN_SCALE_FACTORS='' ${getExe pkgs.flameshot} gui";
|
|
|
|
"Shift+r" = "reload";
|
|
"q" = "kill";
|
|
|
|
# Don't focus tabs
|
|
"Left" = "exec --no-startup-id ${getExe sway-overfocus} split-lt float-lt output-ls";
|
|
"Right" = "exec --no-startup-id ${getExe sway-overfocus} split-rt float-rt output-rs";
|
|
"Up" = "exec --no-startup-id ${getExe sway-overfocus} split-ut float-ut output-us";
|
|
"Down" = "exec --no-startup-id ${getExe sway-overfocus} split-dt float-dt output-ds";
|
|
"Tab" = "exec --no-startup-id ${getExe sway-overfocus} group-rw group-dw";
|
|
"Shift+Tab" = "exec --no-startup-id ${getExe sway-overfocus} group-lw group-uw";
|
|
|
|
"Shift+Left" = "move left";
|
|
"Shift+Right" = "move right";
|
|
"Shift+Up" = "move up";
|
|
"Shift+Down" = "move down";
|
|
|
|
"space" = "layout toggle tabbed splitv splith";
|
|
"s" = "splitv";
|
|
"v" = "splith";
|
|
"f" = "floating toggle";
|
|
"Shift+f" = "focus mode_toggle";
|
|
"Return" = "fullscreen toggle";
|
|
"a" = "focus parent";
|
|
|
|
"Shift+Ctrl+q" =
|
|
"exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'";
|
|
"r" = "mode resize";
|
|
|
|
"1" = "workspace number 1";
|
|
"2" = "workspace number 2";
|
|
"3" = "workspace number 3";
|
|
"4" = "workspace number 4";
|
|
"5" = "workspace number 5";
|
|
"6" = "workspace number 6";
|
|
"7" = "workspace number 7";
|
|
"8" = "workspace number 8";
|
|
"9" = "workspace number 9";
|
|
"Comma" = "workspace prev";
|
|
"Period" = "workspace next";
|
|
|
|
"Shift+1" = "move container to workspace number 1";
|
|
"Shift+2" = "move container to workspace number 2";
|
|
"Shift+3" = "move container to workspace number 3";
|
|
"Shift+4" = "move container to workspace number 4";
|
|
"Shift+5" = "move container to workspace number 5";
|
|
"Shift+6" = "move container to workspace number 6";
|
|
"Shift+7" = "move container to workspace number 7";
|
|
"Shift+8" = "move container to workspace number 8";
|
|
"Shift+9" = "move container to workspace number 9";
|
|
"Shift+Comma" = "move container to workspace prev";
|
|
"Shift+Period" = "move container to workspace next";
|
|
};
|
|
|
|
window.titlebar = false;
|
|
|
|
floating.criteria = [
|
|
{ class = "^Pavucontrol$"; }
|
|
#{class = "^awakened-poe-trade$";}
|
|
];
|
|
|
|
assigns = {
|
|
"1" = [
|
|
{ class = "^firefox$"; }
|
|
];
|
|
"5" = [
|
|
{ class = "^bottles$"; }
|
|
{ class = "^steam$"; }
|
|
{ class = "^prismlauncher$"; }
|
|
];
|
|
"7" = [
|
|
{ class = "^obsidian$"; }
|
|
{ class = "^discord$"; }
|
|
{ class = "^Signal$"; }
|
|
{ class = "^TelegramDesktop$"; }
|
|
];
|
|
"8" = [
|
|
{ class = "^Spotify$"; }
|
|
];
|
|
};
|
|
# TODO eww -> bars = [ ];
|
|
|
|
workspaceOutputAssign =
|
|
{
|
|
kroma =
|
|
let
|
|
monitorMain = "DP-2";
|
|
monitorLeft = "DP-4";
|
|
in
|
|
map
|
|
(x: {
|
|
workspace = x;
|
|
output = monitorMain;
|
|
})
|
|
[
|
|
"1"
|
|
"2"
|
|
"3"
|
|
"4"
|
|
"5"
|
|
"6"
|
|
]
|
|
++
|
|
map
|
|
(x: {
|
|
workspace = x;
|
|
output = monitorLeft;
|
|
})
|
|
[
|
|
"7"
|
|
"8"
|
|
"9"
|
|
];
|
|
}
|
|
.${nixosConfig.node.name} or [ ];
|
|
|
|
startup =
|
|
let
|
|
configLayouts = (pkgs.formats.toml { }).generate "per-workspace-layouts.toml" {
|
|
force = true;
|
|
layouts = {
|
|
"1" = "tabbed";
|
|
"5" = "tabbed";
|
|
"7" = "tabbed";
|
|
"8" = "tabbed";
|
|
"9" = "tabbed";
|
|
};
|
|
};
|
|
in
|
|
[
|
|
{
|
|
command = "${getExe i3-per-workspace-layout} --config ${configLayouts}";
|
|
always = false;
|
|
notification = false;
|
|
}
|
|
];
|
|
};
|
|
};
|
|
|
|
systemd.user.services = {
|
|
flameshot.Install.WantedBy = lib.mkForce [ "i3-session.target" ];
|
|
};
|
|
|
|
programs.autorandr.enable = true;
|
|
programs.autorandr.profiles =
|
|
{
|
|
kroma =
|
|
let
|
|
monitorMain = "DP-2";
|
|
monitorLeft = "DP-4";
|
|
in
|
|
{
|
|
main = {
|
|
config = {
|
|
${monitorLeft} = {
|
|
enable = true;
|
|
mode = "3840x2160";
|
|
rate = "60.00";
|
|
position = "0x0";
|
|
};
|
|
${monitorMain} = {
|
|
enable = true;
|
|
primary = true;
|
|
mode = "3840x2160";
|
|
rate = "144.00";
|
|
position = "3840x0";
|
|
};
|
|
};
|
|
fingerprint = {
|
|
${monitorMain} =
|
|
"00ffffffffffff001e6d9a5b078e0a000b1f0104b53c2278f919c1ae5044af260e5054210800d1c061404540314001010101010101014dd000a0f0703e803020350058542100001a000000fd0c3090505086010a202020202020000000fc003237474e3935300a2020202020000000ff003131314e5447594c423731390a02e602032d7123090707830100004410040301e2006ae305c000e60605017360216d1a0000020b309000047321602900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f47012790300030128d8060284ff0e9f002f801f006f08910002000400404f0104ff0e9f002f801f006f086200020004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006d90";
|
|
${monitorLeft} =
|
|
"00ffffffffffff001e6d095b39790700081a0104b53c22789f3035a7554ea3260f50542108007140818081c0a9c0d1c08100010101014dd000a0f0703e803020650c58542100001a286800a0f0703e800890650c58542100001a000000fd00283d878738010a202020202020000000fc004c4720556c7472612048440a2001850203117144900403012309070783010000023a801871382d40582c450058542100001e565e00a0a0a029503020350058542100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8";
|
|
};
|
|
};
|
|
};
|
|
}
|
|
.${nixosConfig.node.name} or { };
|
|
|
|
home.sessionVariables = {
|
|
# Make gtk apps bigger
|
|
GDK_SCALE = 2;
|
|
# Make QT apps bigger
|
|
QT_SCREEN_SCALE_FACTORS = 2;
|
|
};
|
|
|
|
xsession.wallpapers.enable = true;
|
|
|
|
home.file.".xinitrc".text = ''
|
|
if test -z "$DBUS_SESSION_BUS_ADDRESS"; then
|
|
eval $(dbus-launch --exit-with-session --sh-syntax)
|
|
fi
|
|
|
|
export DESKTOP_SESSION=i3
|
|
systemctl --user import-environment PATH DISPLAY XAUTHORITY DESKTOP_SESSION XDG_CONFIG_DIRS XDG_DATA_DIRS XDG_RUNTIME_DIR XDG_SESSION_ID DBUS_SESSION_BUS_ADDRESS
|
|
if command -v dbus-update-activation-environment >/dev/null 2>&1; then
|
|
dbus-update-activation-environment --systemd --all
|
|
fi
|
|
|
|
autorandr -c
|
|
xset mouse 1 0
|
|
xset r rate 235 60
|
|
|
|
[[ -f "$HOME"/${escapeShellArg config.xsession.scriptPath} ]] \
|
|
&& source "$HOME"/${escapeShellArg config.xsession.scriptPath}
|
|
|
|
exec i3
|
|
'';
|
|
|
|
home.packages = with pkgs; [
|
|
xclip
|
|
];
|
|
}
|