add initial river configs

This commit is contained in:
Aly Raffauf 2024-09-15 00:32:31 -04:00
parent 34038b6472
commit 6301b11610
11 changed files with 292 additions and 14 deletions

View file

@ -7,6 +7,7 @@
}: {
imports = [
./hyprland
./river
./sway
./wayland
];

View file

@ -0,0 +1,157 @@
# Sway
## Features
- Clamshell mode for laptops
- Default apps + theme integration
- Random wallpapers that cycle every 15 minutes
- Slick looks
- swayfx support
## Desktop Utilities
- Bluetooth: [blueberry.py](https://github.com/linuxmint/blueberry).
- Idle daemon: [swayidle](https://github.com/swaywm/swayidle).
- Launcher [rofi-wayland](https://github.com/lbonn/rofi).
- Notifications: [mako](https://github.com/emersion/mako).
- Panel: [waybar](https://github.com/Alexays/Waybar).
- Polkit: [mate-polkit](https://github.com/mate-desktop/mate-polkit).
- Wallpapers: [swaybg](https://github.com/swaywm/swaybg).
- WiFi: [networkmanager-dmenu](https://github.com/firecat53/networkmanager-dmenu).
## Keybindings
### Launching Apps
- SUPER + B: Open Browser.
- SUPER + E: Open Text Editor.
- SUPER + F: Open File Manager.
- SUPER + R: Open Launcher.
- SUPER + T: Open Terminal.
### Screenshots
- PRINT // CTRL + F12: Take screenshot of monitor or selected area.
### Session Control
- SUPER CTRL + L: Lock screen.
- SUPER + M: Logout/shutdown dialog.
### Workspaces
#### Switching Workspaces
- SUPER + {1..9}: Switch to numbered workspace.
- SUPER + Comma: Switch to previous numbered workspace.
- SUPER + Period: Switch to next numbered workspace.
- TOUCHPAD: 3 Finger Swipe Left/Up or Right/Down.
#### Multi-Monitor Workspace Management
- SUPER CTRL SHIFT + Down: Move current workspace to monitor below.
- SUPER CTRL SHIFT + Up: Move current workspace to monitor above.
- SUPER CTRL SHIFT + Left: Move current workspace to monitor left.
- SUPER CTRL SHIFT + Right: Move current workspace to monitor right.
______________________________________________________________________
- SUPER CTRL SHIFT + J: Move current workspace to monitor below.
- SUPER CTRL SHIFT + K: Move current workspace to monitor above.
- SUPER CTRL SHIFT + H: Move current workspace to monitor left.
- SUPER CTRL SHIFT + L: Move current workspace to monitor right.
### Window Management
- SUPER + C: Kill focused window.
- SUPER + F11: Show/hide top panel.
- SUPER + TAB: Open Window list.
- SUPER + V: Toggle floating window.
- SUPER SHIFT + Backslash: Toggle vertical/horizontal splits.
- SUPER SHIFT + G: Toggle tabbed layout.
- SUPER SHIFT + W: Toggle fullscreen.
#### Focus
- SUPER + Down: Change focus down.
- SUPER + Up: Change focus up.
- SUPER + Left: Change focus left.
- SUPER + Right: Change focus right.
______________________________________________________________________
- SUPER + J: Change focus down.
- SUPER + K: Change focus up.
- SUPER + H: Change focus left.
- SUPER + L: Change focus right.
#### Movement
- SUPER SHIFT + Down: Move window down.
- SUPER SHIFT + Up: Move window up.
- SUPER SHIFT + Left: Move window left.
- SUPER SHIFT + Right: Move window right.
______________________________________________________________________
- SUPER SHIFT + J: Move window down.
- SUPER SHIFT + K: Move window up.
- SUPER SHIFT + H: Move window left.
- SUPER SHIFT + L: Move window right.
#### Moving between Workspaces
- SUPER SHIFT + {1..9}: Move to specified numbered workspace.
- SUPER SHIFT + Comma: Move to previous numbered workspace.
- SUPER SHIFT + Period: Move to next numbered workspace.
#### Scratchpad
- SUPER + S: Switch to scratchpad (overlay).
- SUPER SHIFT + S: Move window to scratchpad.
### Modes
These modes provide special submaps where you are free to use various key binds without pressing the full key combo, because certain keys are assumed.
#### Resize Mode
- CTRL ALT + R: Enter resize mode.
- Down: Resize active window (0,10).
- Up: Resize active window (0,-10)
- Left: Resize active window (-10,0).
- Right: Resize active window (10,0).
______________________________________________________________________
- J: Resize active window (0,10).
- K: Resize active window (0,-10)
- H: Resize active window (-10,0).
- L: Resize active window (10,0).
- ESCAPE: Exit resize mode.
#### Move Mode
- CTRL ALT + M: Enter move mode.
- {1..0}: Move to numbered workspace.
- Comma: Move to previous numbered workspace.
- Period: Move to next numbered workspace.
______________________________________________________________________
- Down: Move window down.
- Up: Move window up.
- Left: Move window left.
- Right: Move window right.
______________________________________________________________________
- J: Move window down.
- K: Move window up.
- H: Move window left.
- L: Move window right.
- ESCAPE: Exit move mode.

View file

@ -0,0 +1,18 @@
{
config,
lib,
pkgs,
...
}: {
config = lib.mkIf config.ar.home.desktop.river.enable {
ar.home.theme.gtk.hideTitleBar = true;
wayland.windowManager.river = import ./settings.nix {inherit config lib pkgs;};
xdg.portal = {
enable = true;
configPackages = [pkgs.xdg-desktop-portal-wlr];
extraPortals = [pkgs.xdg-desktop-portal-wlr];
};
};
}

View file

@ -0,0 +1,87 @@
{
config,
lib,
pkgs,
...
}: let
cfg = config.ar.home;
focused = config.lib.stylix.colors.base0D;
helpers = import ../wayland/helpers.nix {inherit config lib pkgs;};
modifier = "Super";
unfocused = config.lib.stylix.colors.base03;
urgent = config.lib.stylix.colors.base08;
in {
enable = true;
extraConfig = ''
touchpad=`riverctl list-inputs|grep -i touchpad`
for t in ''${touchpad[@]}; do
riverctl input $t natural-scroll enabled
riverctl input $t click-method clickfinger
riverctl input $t tap enabled
riverctl input $t disable-while-typing enabled
done
for i in $(seq 1 8)
do
tags=$((1 << ($i - 1)))
# ${modifier}+[1-9] to focus tag [0-8]
riverctl map normal ${modifier} $i set-focused-tags $tags
# ${modifier}+Shift+[1-9] to tag focused view with tag [0-8]
riverctl map normal ${modifier}+Shift $i set-view-tags $tags
# ${modifier}+Control+[1-9] to toggle focus of tag [0-8]
riverctl map normal ${modifier}+Control $i toggle-focused-tags $tags
# ${modifier}+Shift+Control+[1-9] to toggle tag [0-8] of focused view
riverctl map normal ${modifier}+Shift+Control $i toggle-view-tags $tags
done
'';
systemd.enable = true;
settings = {
border-color-focused = "0x${focused}";
border-color-unfocused = "0x${unfocused}";
border-color-urgent = "0x${urgent}";
border-width = 4;
default-layout = "rivertile";
declare-mode = [
"locked"
"normal"
];
focus-follows-cursor = "normal";
map = {
normal = {
"${modifier} B" = "spawn ${lib.getExe cfg.defaultApps.webBrowser}";
"${modifier} C" = "close";
"${modifier} E" = "spawn ${lib.getExe cfg.defaultApps.editor}";
"${modifier} F" = "spawn ${lib.getExe cfg.defaultApps.fileManager}";
"${modifier} M" = ''spawn "${lib.getExe config.programs.rofi.package} -show power-menu -modi 'power-menu:${lib.getExe pkgs.rofi-power-menu} --choices=logout/lockscreen/suspend/shutdown/reboot'"'';
"${modifier} R" = "spawn '${lib.getExe config.programs.rofi.package} -show combi'";
"${modifier} T" = "spawn ${lib.getExe cfg.defaultApps.terminal}";
"${modifier}+Control L" = "spawn ${lib.getExe pkgs.swaylock}";
"${modifier}+Shift V" = "toggle-float";
};
};
map-pointer.normal = {
"${modifier} BTN_LEFT" = "move-view";
"${modifier} BTN_RIGHT" = "resize-view";
};
rule-add = {
"" = "ssd";
};
spawn = [
"rivertile"
];
};
}

View file

@ -149,6 +149,14 @@ in {
};
};
river = {
enable = lib.mkOption {
description = "River with full desktop session components.";
default = false; #osConfig.ar.desktop.river.enable;
type = lib.types.bool;
};
};
windowManagerBinds = lib.mkOption {
description = "Default binds for window management.";

View file

@ -13,9 +13,9 @@ in {
};
systemd.user.services.gammastep = {
Install.WantedBy = lib.mkForce (lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target");
Install.WantedBy = lib.mkForce (lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target");
Service.Restart = lib.mkForce "no";
Unit.BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target";
Unit.BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target";
};
};
}

View file

@ -36,7 +36,7 @@ in {
systemd.user.services.mako = {
Unit = {
After = "graphical-session.target";
BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target";
BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target";
Description = "Lightweight Wayland notification daemon";
Documentation = "man:mako(1)";
PartOf = "graphical-session.target";
@ -51,7 +51,7 @@ in {
Type = "dbus";
};
Install.WantedBy = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target";
Install.WantedBy = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target";
};
};
}

View file

@ -14,7 +14,7 @@ in {
systemd.user.services.randomWallpaper = {
Unit = {
After = "graphical-session.target";
BindsTo = lib.optional (config.ar.home.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (config.ar.home.desktop.sway.enable) "sway-session.target";
BindsTo = lib.optional (config.ar.home.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (config.ar.home.desktop.sway.enable) "sway-session.target" ++ lib.optional (config.ar.home.desktop.river.enable) "river-session.target";
Description = "Lightweight swaybg-based random wallpaper daemon.";
PartOf = "graphical-session.target";
};
@ -36,7 +36,7 @@ in {
TasksMax = "infinity";
};
Install.WantedBy = lib.optional (config.ar.home.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (config.ar.home.desktop.sway.enable) "sway-session.target";
Install.WantedBy = lib.optional (config.ar.home.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (config.ar.home.desktop.sway.enable) "sway-session.target" ++ lib.optional (config.ar.home.desktop.river.enable) "river-session.target";
};
};
}

View file

@ -57,7 +57,7 @@ in {
};
systemd.user.services.swayidle = {
Install.WantedBy = lib.mkForce (lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target");
Install.WantedBy = lib.mkForce (lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target");
Service = {
Environment = lib.mkForce [
@ -77,7 +77,7 @@ in {
Restart = lib.mkForce "no";
};
Unit.BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target";
Unit.BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target";
};
};
}

View file

@ -17,9 +17,9 @@ in {
};
systemd.user.services.swayosd = {
Install.WantedBy = lib.mkForce (lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target");
Install.WantedBy = lib.mkForce (lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target");
Service.Restart = lib.mkForce "no";
Unit.BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target";
Unit.BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target";
};
xdg.configFile."swayosd/style.css" = {

View file

@ -27,7 +27,9 @@ in {
lib.optionals (cfg.desktop.hyprland.enable)
["hyprland/workspaces"]
++ lib.optionals (cfg.desktop.sway.enable)
["sway/workspaces"];
["sway/workspaces"]
++ lib.optionals (cfg.desktop.river.enable)
["river/tags"];
modules-right = [
"tray"
@ -275,18 +277,23 @@ in {
#scratchpad,
#session,
#submap,
#tags,
#tray,
#workspaces {
margin: 0px 5px;
padding: 0px 2.5px;
}
#tags button,
#workspaces button {
border-radius: 0px;
}
#tags button.active,
#tags button.focused,
#workspaces button.active,
#workspaces button.focused {
#workspaces button.focused
{
color: ${config.lib.stylix.colors.withHashtag.base0D};
}
@ -318,7 +325,7 @@ in {
};
systemd.user.services.waybar = {
Install.WantedBy = lib.mkForce (lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target");
Install.WantedBy = lib.mkForce (lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target");
Service = {
Environment = lib.mkForce [
@ -350,7 +357,7 @@ in {
Restart = lib.mkForce "no";
};
Unit.BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target";
Unit.BindsTo = lib.optional (cfg.desktop.hyprland.enable) "hyprland-session.target" ++ lib.optional (cfg.desktop.sway.enable) "sway-session.target" ++ lib.optional (cfg.desktop.river.enable) "river-session.target";
};
xdg.configFile."nwg-drawer/drawer.css".text = ''