386 lines
12 KiB
Nix
386 lines
12 KiB
Nix
{
|
|
flake.modules = {
|
|
nixos.niri =
|
|
{ inputs, pkgs, ... }:
|
|
{
|
|
imports = [
|
|
inputs.niri-flake.nixosModules.niri
|
|
];
|
|
|
|
programs.niri = {
|
|
enable = true;
|
|
package = inputs.niri-flake.packages.${pkgs.system}.niri-unstable;
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
kitty
|
|
fuzzel
|
|
|
|
inputs.niri-flake.packages.${pkgs.system}.xwayland-satellite-unstable
|
|
|
|
wl-clipboard
|
|
xsel
|
|
|
|
mako
|
|
waybar
|
|
];
|
|
|
|
xdg = {
|
|
autostart.enable = true;
|
|
portal = {
|
|
enable = true;
|
|
extraPortals = [
|
|
pkgs.xdg-desktop-portal-gnome
|
|
pkgs.xdg-desktop-portal-gtk
|
|
];
|
|
xdgOpenUsePortal = true;
|
|
|
|
config = {
|
|
common = {
|
|
default = [ "*" ];
|
|
"org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
|
|
};
|
|
niri = {
|
|
default = [
|
|
"gnome"
|
|
"gtk"
|
|
];
|
|
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
|
"org.freedesktop.impl.portal.OpenURI" = [ "gtk" ];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
environment.sessionVariables = {
|
|
NIXOS_OZONE_WL = "1"; # Hint electron apps to use wayland
|
|
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
|
|
|
XDG_SESSION_TYPE = "wayland";
|
|
|
|
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
|
|
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
|
|
QT_QPA_PLATFORM = "wayland;xcb";
|
|
};
|
|
|
|
};
|
|
|
|
homeManager.cholli =
|
|
{
|
|
config,
|
|
inputs,
|
|
lib,
|
|
osConfig,
|
|
pkgs,
|
|
...
|
|
}:
|
|
{
|
|
config = lib.mkIf (osConfig.networking.hostName == "yggdrasil" && osConfig.programs.niri.enable) {
|
|
|
|
programs.niri.settings = {
|
|
prefer-no-csd = true;
|
|
|
|
input = {
|
|
keyboard = {
|
|
xkb = {
|
|
layout = "us";
|
|
rules = "escape:nocaps";
|
|
};
|
|
numlock = true;
|
|
};
|
|
|
|
touchpad = {
|
|
enable = false;
|
|
};
|
|
};
|
|
|
|
outputs."DP-1" = {
|
|
mode = {
|
|
width = 3440;
|
|
height = 1440;
|
|
};
|
|
};
|
|
outputs."HDMI-A-1" = {
|
|
mode = {
|
|
width = 1920;
|
|
height = 1080;
|
|
};
|
|
transform.rotation = 90;
|
|
# layout = {
|
|
# default-column-width.proportion = 1.0;
|
|
# };
|
|
};
|
|
|
|
layout = {
|
|
gaps = 5;
|
|
center-focused-column = "never";
|
|
|
|
default-column-width = {
|
|
proportion = 0.5;
|
|
};
|
|
|
|
preset-column-widths = [
|
|
{ proportion = 1. / 3.; }
|
|
{ proportion = 1. / 2.; }
|
|
{ proportion = 2. / 3.; }
|
|
];
|
|
|
|
focus-ring = {
|
|
width = 1;
|
|
active = {
|
|
color = "#7fc8ff";
|
|
};
|
|
inactive = {
|
|
color = "#505050";
|
|
};
|
|
};
|
|
};
|
|
|
|
hotkey-overlay.skip-at-startup = true;
|
|
|
|
screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png";
|
|
|
|
# TODO: block 1pass from screenshots and window capture
|
|
# TODO: move windows to workspaces where I expect them
|
|
window-rules = [
|
|
{
|
|
excludes = [ ];
|
|
clip-to-geometry = true;
|
|
geometry-corner-radius = {
|
|
top-left = 15.0;
|
|
top-right = 15.0;
|
|
bottom-left = 15.0;
|
|
bottom-right = 15.0;
|
|
};
|
|
}
|
|
{
|
|
matches = [ { is-window-cast-target = true; } ];
|
|
|
|
focus-ring = {
|
|
active.color = "#f38ba8";
|
|
inactive.color = "#7d0d2d";
|
|
};
|
|
|
|
border = {
|
|
inactive.color = "#7d0d2d";
|
|
};
|
|
|
|
shadow = {
|
|
color = "#7d0d2d70";
|
|
};
|
|
|
|
tab-indicator = {
|
|
active.color = "#f38ba8";
|
|
inactive.color = "#7d0d2d";
|
|
};
|
|
}
|
|
{
|
|
matches = [
|
|
{
|
|
app-id = "discord";
|
|
}
|
|
{
|
|
app-id = "1Password";
|
|
}
|
|
{
|
|
app-id = "steam";
|
|
title = "Friends List.*";
|
|
}
|
|
];
|
|
open-on-output = "HDMI-A-1";
|
|
default-column-width.proportion = 1.0;
|
|
}
|
|
];
|
|
|
|
binds =
|
|
with config.lib.niri;
|
|
let
|
|
workspaces = (builtins.genList (x: x + 1) 9);
|
|
|
|
focus-workspaces = builtins.listToAttrs (
|
|
map (num: {
|
|
name = "Mod+${toString num}";
|
|
value = {
|
|
action.focus-workspace = num;
|
|
};
|
|
}) workspaces
|
|
);
|
|
move-to-workspaces = builtins.listToAttrs (
|
|
map (num: {
|
|
name = "Mod+Ctrl+${toString num}";
|
|
value = {
|
|
action.move-window-to-workspace = num;
|
|
};
|
|
}) workspaces
|
|
);
|
|
in
|
|
|
|
lib.mkMerge [
|
|
{
|
|
"Mod+Shift+Slash".action = actions.show-hotkey-overlay;
|
|
"Mod+Shift+E".action = actions.quit;
|
|
"Ctrl+Alt+Delete".action = actions.quit;
|
|
|
|
"Mod+Return".action.spawn = "${lib.getExe pkgs.kitty}";
|
|
"Mod+D".action.spawn = "${lib.getExe pkgs.fuzzel}";
|
|
"Mod+Alt+L".action.spawn = "hyprlock-blur";
|
|
|
|
"Mod+Shift+Q" = {
|
|
action = actions.close-window;
|
|
repeat = false;
|
|
};
|
|
|
|
"Mod+O" = {
|
|
action = actions.toggle-overview;
|
|
repeat = false;
|
|
};
|
|
|
|
"Mod+J" = {
|
|
action = actions.focus-window-or-workspace-down;
|
|
};
|
|
"Mod+K" = {
|
|
action = actions.focus-window-or-workspace-up;
|
|
};
|
|
"Mod+Ctrl+J" = {
|
|
action = actions.move-window-down-or-to-workspace-down;
|
|
};
|
|
"Mod+Ctrl+K" = {
|
|
action = actions.move-window-up-or-to-workspace-up;
|
|
};
|
|
"Mod+Down" = {
|
|
action = actions.focus-window-or-workspace-down;
|
|
};
|
|
"Mod+Up" = {
|
|
action = actions.focus-window-or-workspace-up;
|
|
};
|
|
"Mod+Ctrl+Down" = {
|
|
action = actions.move-window-down-or-to-workspace-down;
|
|
};
|
|
"Mod+Ctrl+Up" = {
|
|
action = actions.move-window-up-or-to-workspace-up;
|
|
};
|
|
|
|
"Mod+H" = {
|
|
action = actions.focus-column-or-monitor-left;
|
|
};
|
|
"Mod+L" = {
|
|
action = actions.focus-column-or-monitor-right;
|
|
};
|
|
"Mod+Ctrl+H" = {
|
|
action = actions.move-column-left-or-to-monitor-left;
|
|
};
|
|
"Mod+Ctrl+L" = {
|
|
action = actions.move-column-right-or-to-monitor-right;
|
|
};
|
|
"Mod+Left" = {
|
|
action = actions.focus-column-or-monitor-left;
|
|
};
|
|
"Mod+Right" = {
|
|
action = actions.focus-column-or-monitor-right;
|
|
};
|
|
"Mod+Ctrl+Left" = {
|
|
action = actions.move-column-left-or-to-monitor-left;
|
|
};
|
|
"Mod+Ctrl+Right" = {
|
|
action = actions.move-column-right-or-to-monitor-right;
|
|
};
|
|
|
|
"Mod+WheelScrollDown" = {
|
|
action = actions.focus-column-right;
|
|
};
|
|
"Mod+WheelScrollUp" = {
|
|
action = actions.focus-column-left;
|
|
};
|
|
"Mod+Shift+WheelScrollDown" = {
|
|
action = actions.focus-workspace-down;
|
|
cooldown-ms = 150;
|
|
};
|
|
"Mod+Shift+WheelScrollUp" = {
|
|
action = actions.focus-workspace-up;
|
|
cooldown-ms = 150;
|
|
};
|
|
|
|
# Window Sizes
|
|
"Mod+BracketLeft".action = actions.consume-or-expel-window-left;
|
|
"Mod+BracketRight".action = actions.consume-or-expel-window-right;
|
|
"Mod+Comma".action = actions.consume-window-into-column;
|
|
"Mod+Period".action = actions.expel-window-from-column;
|
|
|
|
"Mod+R".action = actions.switch-preset-column-width;
|
|
"Mod+Shift+R".action = actions.switch-preset-window-height;
|
|
"Mod+Ctrl+R".action = actions.reset-window-height;
|
|
"Mod+F".action = actions.fullscreen-window;
|
|
"Mod+Shift+F".action = actions.maximize-column;
|
|
"Mod+Ctrl+F".action = actions.expand-column-to-available-width;
|
|
|
|
"Mod+C".action = actions.center-column;
|
|
"Mod+V".action = actions.toggle-window-floating;
|
|
|
|
# Xwayland keyboard stuff
|
|
"Mod+Shift+C".action = actions.spawn [
|
|
"sh"
|
|
"-c"
|
|
"env DISPLAY=:0 xsel -ob | wl-copy"
|
|
];
|
|
"Mod+Shift+V".action = actions.spawn [
|
|
"sh"
|
|
"-c"
|
|
"wl-paste -n | env DISPLAY=:0 xsel -ib"
|
|
];
|
|
|
|
"XF86AudioRaiseVolume" = {
|
|
action.spawn = [
|
|
"wpctl"
|
|
"set-volume"
|
|
"@DEFAULT_AUDIO_SINK@"
|
|
"0.1+"
|
|
];
|
|
allow-when-locked = true;
|
|
};
|
|
"XF86AudioLowerVolume" = {
|
|
action.spawn = [
|
|
"wpctl"
|
|
"set-volume"
|
|
"@DEFAULT_AUDIO_SINK@"
|
|
"0.1-"
|
|
];
|
|
allow-when-locked = true;
|
|
};
|
|
"XF86AudioMute" = {
|
|
action.spawn = [
|
|
"wpctl"
|
|
"set-mute"
|
|
"@DEFAULT_AUDIO_SINK@"
|
|
"toggle"
|
|
];
|
|
allow-when-locked = true;
|
|
};
|
|
"XF86AudioMicMute" = {
|
|
action.spawn = [
|
|
"wpctl"
|
|
"set-mute"
|
|
"@DEFAULT_AUDIO_SOURCE@"
|
|
"toggle"
|
|
];
|
|
allow-when-locked = true;
|
|
};
|
|
}
|
|
focus-workspaces
|
|
move-to-workspaces
|
|
];
|
|
|
|
spawn-at-startup = [
|
|
{ argv = [ "waybar" ]; }
|
|
{ argv = [ "zen-beta" ]; }
|
|
{ argv = [ "steam" ]; }
|
|
{ argv = [ "obsidian" ]; }
|
|
{ argv = [ "discord" ]; }
|
|
{ argv = [ "1password" ]; }
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
};
|
|
};
|
|
}
|