fleshed out river config

feat/kile-v2
Ricard Illa 2022-12-29 20:55:37 +01:00
parent 1c31c5a05d
commit f6bb7b1113
No known key found for this signature in database
GPG Key ID: F69A672B72E54902
5 changed files with 411 additions and 33 deletions

View File

@ -0,0 +1,101 @@
{ config, pkgs, ... }:
# usage: bemenu [options]
# Options
# -h, --help display this help and exit.
# -v, --version display version.
# -i, --ignorecase match items case insensitively.
# -F, --filter filter entries for a given string.
# -w, --wrap wraps cursor selection.
# -l, --list list items vertically with the given number of lines.
# -p, --prompt defines the prompt text to be displayed.
# -P, --prefix text to show before highlighted item.
# -I, --index select item at index automatically.
# -x, --password hide input.
# -s, --no-spacing disable the title spacing on entries.
# --scrollbar display scrollbar. (none (default), always, autohide)
# --ifne only display menu if there are items.
# --fork always fork. (bemenu-run)
# --no-exec do not execute command. (bemenu-run)
#
# Use BEMENU_BACKEND env variable to force backend:
# curses ncurses based terminal backend
# wayland wayland backend
# x11 x11 backend
#
# If BEMENU_BACKEND is empty, one of the GUI backends is selected automatically.
#
# Backend specific options
# c = ncurses, w == wayland, x == x11
# (...) At end of help indicates the backend support for option.
#
# -b, --bottom appears at the bottom of the screen. (wx)
# -c, --center appears at the center of the screen. (wx)
# -f, --grab show the menu before reading stdin. (wx)
# -n, --no-overlap adjust geometry to not overlap with panels. (w)
# -m, --monitor index of monitor where menu will appear. (wx)
# -H, --line-height defines the height to make each menu line (0 = default height). (wx)
# -M, --margin defines the empty space on either side of the menu. (wx)
# -W, --width-factor defines the relative width factor of the menu (from 0 to 1). (wx)
# -B, --border defines the width of the border in pixels around the menu. (wx)
# --ch defines the height of the cursor (0 = scales with line height). (wx)
# --cw defines the width of the cursor. (wx)
# --hp defines the horizontal padding for the entries in single line mode. (wx)
# --fn defines the font to be used ('name [size]'). (wx)
# --tb defines the title background color. (wx)
# --tf defines the title foreground color. (wx)
# --fb defines the filter background color. (wx)
# --ff defines the filter foreground color. (wx)
# --nb defines the normal background color. (wx)
# --nf defines the normal foreground color. (wx)
# --hb defines the highlighted background color. (wx)
# --hf defines the highlighted foreground color. (wx)
# --fbb defines the feedback background color. (wx)
# --fbf defines the feedback foreground color. (wx)
# --sb defines the selected background color. (wx)
# --sf defines the selected foreground color. (wx)
# --ab defines the alternating background color. (wx)
# --af defines the alternating foreground color. (wx)
# --scb defines the scrollbar background color. (wx)
# --scf defines the scrollbar foreground color. (wx)
# --bdr defines the border color. (wx)
let
bemenuColors = {
titleBackground = "#282828E0";
titleForeground = "#fbf1c7";
filterBackground = "#282828E0";
filterForeground = "#ebdbb2";
normalBackground = "#282828E0";
normalForeground = "#ebdbb2";
highlightedBackground = "#458588E0";
highlightedForeground = "#fbf1c7";
scrollbarBackground = "#282828E0";
scrollbarForeground = "#458588E0";
};
in {
home.packages = [ pkgs.bemenu ];
home.sessionVariables.BEMENU_OPTS = ''
--ignorecase \
--list 20 \
--prompt '' \
--scrollbar none \
--wrap \
--scrollbar autohide \
--no-overlap \
--monitor all \
--fn 'Inter 13px' \
--tb '${bemenuColors.titleBackground}' \
--tf '${bemenuColors.titleForeground}' \
--fb '${bemenuColors.filterBackground}' \
--ff '${bemenuColors.filterForeground}' \
--nb '${bemenuColors.normalBackground}' \
--ab '${bemenuColors.normalBackground}' \
--nf '${bemenuColors.normalForeground}' \
--af '${bemenuColors.normalForeground}' \
--hb '${bemenuColors.highlightedBackground}' \
--hf '${bemenuColors.highlightedForeground}' \
--scb '${bemenuColors.scrollbarBackground}' \
--scf '${bemenuColors.scrollbarForeground}'
'';
}

View File

@ -1,12 +1,15 @@
{ config, pkgs, ... }:
{
imports = [ ./init.nix ];
imports = [ ./init.nix ./bemenu.nix ./waybar.nix ./foot.nix ];
home.packages = with pkgs; [ river foot ];
home.packages = with pkgs; [ river swaybg ];
programs.zsh.loginExtra = ''
[[ -z "''${DISPLAY}" ]] && [[ "$(tty)" = "/dev/tty1" ]] && \
export XKB_DEFAULT_LAYOUT="us"
export XKB_DEFAULT_VARIANT="altgr-intl"
export XKB_DEFAULT_OPTIONS="caps:escape"
exec ${pkgs.river}/bin/river
'';
}

View File

@ -0,0 +1,39 @@
{ config, pkgs, ... }:
{
programs.foot = {
enable = true;
settings = {
main = {
shell = "${pkgs.tmux}/bin/tmux -u";
font = "Hack Nerd Font:size=8:style=Regular";
font-bold = "Hack Nerd Font:size=8:style=Bold";
font-italic = "Hack Nerd Font:size=8:style=Italic";
font-bold-italic = "Hack Nerd Font:size=8:style=Bold Italic";
};
colors = {
alpha = 0.9;
background = "282828";
foreground = "ebdbb2";
regular0 = "282828"; # black
regular1 = "cc241d"; # red
regular2 = "98971a"; # green
regular3 = "d79921"; # yellow
regular4 = "458588"; # blue
regular5 = "b16286"; # magenta
regular6 = "689d6a"; # cyan
regular7 = "ebdbb2"; # white
bright0 = "928374"; # black
bright1 = "fb4934"; # red
bright2 = "b8bb26"; # green
bright3 = "fabd2f"; # yellow
bright4 = "83a598"; # blue
bright5 = "d3869b"; # magenta
bright6 = "8ec07c"; # cyan
bright7 = "ebdbb2"; # white
};
};
};
}

View File

@ -1,102 +1,128 @@
{ config, pkgs, ... }:
let
wallpapers = "${config.home.homeDirectory}/Images/wallpapers/enabled";
shell = "${pkgs.dash}/bin/dash";
riverctl = "${pkgs.river}/bin/riverctl";
rivertile = "${pkgs.river}/bin/rivertile";
foot = "${pkgs.foot}/bin/foot";
bemenu-run = "${pkgs.bemenu}/bin/bemenu-run";
waybar = "${pkgs.waybar}/bin/waybar";
swaybg = "${pkgs.swaybg}/bin/swaybg";
seq = "${pkgs.coreutils}/bin/seq";
playerctl = "${pkgs.playerctl}/bin/playerctl";
pamixer = "${pkgs.pamixer}/bin/pamixer";
light = "${pkgs.light}/bin/light";
eject = "${pkgs.util-linux}/bin/eject";
find = "${pkgs.findutils}/bin/find";
shuf = "${pkgs.coreutils}/bin/shuf";
in {
home.file.river_init = {
executable = true;
target = "${config.xdg.configHome}/river/init";
text = ''
#!${shell}
# start an instance of foot
# Super+Return to start an instance of foot (https://codeberg.org/dnkl/foot)
${riverctl} map normal Super Return spawn ${foot}
# close the focused view
${riverctl} map normal Super R spawn ${bemenu-run}
# Super+Shift+C to close the focused view
${riverctl} map normal Super+Shift C close
# exit river
# Super+Shift+Esc to exit river
${riverctl} map normal Super+Shift Escape exit
# focus next/previous
# Super+J and Super+K to focus the next/previous view in the layout stack
${riverctl} map normal Super J focus-view next
${riverctl} map normal Super K focus-view previous
# swap next/previous
# Super+Shift+J and Super+Shift+K to swap the focused view with the next/previous
# view in the layout stack
${riverctl} map normal Super+Shift J swap next
${riverctl} map normal Super+Shift K swap previous
# bump focused view to the top of the stack layout
# Super+E and Super+W to focus the next/previous output
${riverctl} map normal Super E focus-output next
${riverctl} map normal Super W focus-output previous
# Super+Shift+{W,E} to send the focused view to the next/previous output
${riverctl} map normal Super+Shift W send-to-output next
${riverctl} map normal Super+Shift W send-to-output previous
# Super+Shift+Return to bump the focused view to the top of the layout stack
${riverctl} map normal Super+Shift Return zoom
# increase/decrease the main ratio of rivertile
${riverctl} map normal Super H send-layout-cmd ${rivertile} "main-ratio -0.05"
${riverctl} map normal Super L send-layout-cmd ${rivertile} "main-ratio +0.05"
# Super+H and Super+L to decrease/increase the main ratio of rivertile(1)
${riverctl} map normal Super H send-layout-cmd rivertile "main-ratio -0.05"
${riverctl} map normal Super L send-layout-cmd rivertile "main-ratio +0.05"
# increase/decrease the main count of rivertile
${riverctl} map normal Super+Shift H send-layout-cmd ${rivertile} "main-count +1"
${riverctl} map normal Super+Shift L send-layout-cmd ${rivertile} "main-count -1"
# Super+Shift+Comma and Super+Shift+Period. to increment/decrement the main count of rivertile(1)
${riverctl} map normal Super+Shift Comma send-layout-cmd rivertile "main-count +1"
${riverctl} map normal Super+Shift Period send-layout-cmd rivertile "main-count -1"
# move views
# Super+Alt+{H,J,K,L} to move views
${riverctl} map normal Super+Alt H move left 100
${riverctl} map normal Super+Alt J move down 100
${riverctl} map normal Super+Alt K move up 100
${riverctl} map normal Super+Alt L move right 100
# snap views to screen edges
# Super+Alt+Control+{H,J,K,L} to snap views to screen edges
${riverctl} map normal Super+Alt+Control H snap left
${riverctl} map normal Super+Alt+Control J snap down
${riverctl} map normal Super+Alt+Control K snap up
${riverctl} map normal Super+Alt+Control L snap right
# resize views
# Super+Alt+Shift+{H,J,K,L} to resize views
${riverctl} map normal Super+Alt+Shift H resize horizontal -100
${riverctl} map normal Super+Alt+Shift J resize vertical 100
${riverctl} map normal Super+Alt+Shift K resize vertical -100
${riverctl} map normal Super+Alt+Shift L resize horizontal 100
# move/resize with mouse
# Super + Left Mouse Button to move views
${riverctl} map-pointer normal Super BTN_LEFT move-view
# Super + Right Mouse Button to resize views
${riverctl} map-pointer normal Super BTN_RIGHT resize-view
${rivertile} -view-padding 6 -outer-padding 6
# Super + Middle Mouse Button to toggle float
${riverctl} map-pointer normal Super BTN_MIDDLE toggle-float
for i in $(${seq} 1 9); do
for i in $(${seq} 1 9)
do
tags=$((1 << ($i - 1)))
# focus tag [0-8]
# Super+[1-9] to focus tag [0-8]
${riverctl} map normal Super $i set-focused-tags $tags
# tag focused view with tag [0-8]
# Super+Shift+[1-9] to tag focused view with tag [0-8]
${riverctl} map normal Super+Shift $i set-view-tags $tags
# toggle focus of tag [0-8]
# Super+Ctrl+[1-9] to toggle focus of tag [0-8]
${riverctl} map normal Super+Control $i toggle-focused-tags $tags
# toggle tag [0-8] of focused view
# Super+Shift+Ctrl+[1-9] to toggle tag [0-8] of focused view
${riverctl} map normal Super+Shift+Control $i toggle-view-tags $tags
done
# Super+0 to focus all tags
# Super+Shift+0 to tag focused view with all tags
all_tags=$(((1 << 32) - 1))
# focus all tags
${riverctl} map normal Super 0 set-focused-tags $all_tags
# tag focused view with all tags
${riverctl} map normal Super+Shift 0 set-view-tags $all_tags
# toggle float
# Super+T to toggle float
${riverctl} map normal Super T toggle-float
# toggle fullscreen
# Super+M to toggle fullscreen
${riverctl} map normal Super M toggle-fullscreen
# Super+{Up,Right,Down,Left} to change layout orientation
${riverctl} map normal Super Up send-layout-cmd ${rivertile} "main-location top"
${riverctl} map normal Super Right send-layout-cmd ${rivertile} "main-location right"
${riverctl} map normal Super Down send-layout-cmd ${rivertile} "main-location bottom"
${riverctl} map normal Super Left send-layout-cmd ${rivertile} "main-location left"
${riverctl} map normal Super Up send-layout-cmd rivertile "main-location top"
${riverctl} map normal Super Right send-layout-cmd rivertile "main-location right"
${riverctl} map normal Super Down send-layout-cmd rivertile "main-location bottom"
${riverctl} map normal Super Left send-layout-cmd rivertile "main-location left"
# Declare a passthrough mode. This mode has only a single mapping to return to
# normal mode. This makes it useful for testing a nested wayland compositor
@ -108,8 +134,57 @@ in {
# Super+F11 to return to normal mode
${riverctl} map passthrough Super F11 enter-mode normal
# Various media key mapping examples for both normal and locked mode which do
# not have a modifier
for mode in normal locked
do
# Eject the optical drive (well if you still have one that is)
${riverctl} map $mode None XF86Eject spawn '${eject} -T'
# Control pulse audio volume with pamixer (https://github.com/cdemoulins/pamixer)
${riverctl} map $mode None XF86AudioRaiseVolume spawn '${pamixer} -i 5'
${riverctl} map $mode None XF86AudioLowerVolume spawn '${pamixer} -d 5'
${riverctl} map $mode None XF86AudioMute spawn '${pamixer} --toggle-mute'
# Control MPRIS aware media players with playerctl (https://github.com/altdesktop/playerctl)
${riverctl} map $mode None XF86AudioMedia spawn '${playerctl} play-pause'
${riverctl} map $mode None XF86AudioPlay spawn '${playerctl} play-pause'
${riverctl} map $mode None XF86AudioPrev spawn '${playerctl} previous'
${riverctl} map $mode None XF86AudioNext spawn '${playerctl} next'
# Control screen backlight brightness with light (https://github.com/haikarainen/light)
${riverctl} map $mode None XF86MonBrightnessUp spawn '${light} -A 5'
${riverctl} map $mode None XF86MonBrightnessDown spawn '${light} -U 5'
done
# Set background and border color
${riverctl} background-color 0x282828
${riverctl} border-color-focused 0x458588
${riverctl} border-color-unfocused 0x504945
${riverctl} border-width 3
${riverctl} focus-follows-cursor normal
# Set keyboard repeat rate
${riverctl} set-repeat 50 300
# Make certain views start floating
${riverctl} float-filter-add app-id float
${riverctl} float-filter-add title "popup title with spaces"
# Set app-ids and titles of views which should use client side decorations
${riverctl} csd-filter-add app-id "gedit"
${riverctl} spawn "dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river"
${riverctl} spawn "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=river"
${riverctl} spawn "${waybar}"
${riverctl} spawn '${swaybg} --image "$(${find} ${wallpapers} -type f | ${shuf} -n 1)" --mode fill'
# Set the default layout generator to be rivertile and start it.
# River will send the process group of the init executable SIGTERM on exit.
${riverctl} default-layout rivertile
${rivertile} -view-padding 6 -outer-padding 6
${rivertile} -view-padding 0 -outer-padding 0 &
'';
};
}

View File

@ -0,0 +1,160 @@
{ config, pkgs, ... }:
{
home.packages = with pkgs; [ at-spi2-atk ];
programs.waybar = {
enable = true;
settings = [{
modules-left = [ "river/tags" ];
modules-center = [ "river/window" ];
modules-right = [ "tray" "pulseaudio" "battery" "network" "clock" ];
modules = {
clock.format = ''{: %m/%d <span color="#a89984">|</span> %H:%M}'';
network = {
format-icons = [
''<span color="#fb4944"></span>''
''<span color="#fabd2f"></span>''
''<span color="#b8bb26"></span>''
];
format = "({ifname})";
format-wifi = "{icon} {signalStrength}";
format-disconnected = ''<span color="#a89974"></span>'';
format-ethernet = "";
};
battery = {
states = {
good = 95;
warning = 50;
critical = 20;
};
format-icons = {
discharging = [
''<span color="#fb4944"></span>''
''<span color="#fb4944"></span>''
''<span color="#fb4944"></span>''
''<span color="#fabd2f"></span>''
''<span color="#fabd2f"></span>''
''<span color="#fabd2f"></span>''
''<span color="#b8bb26"></span>''
''<span color="#b8bb26"></span>''
''<span color="#b8bb26"></span>''
]; # 
charging = [
''<span color="#fb4944"></span>''
''<span color="#fb4944"></span>''
''<span color="#fabd2f"></span>''
''<span color="#fabd2f"></span>''
''<span color="#b8bb26"></span>''
''<span color="#b8bb26"></span>''
]; # 
};
format = " {capacity}";
format-full = "";
format-good-charging = "";
format-plugged = "";
format-charging = "{icon} {capacity}";
format-discharging = "{icon} {capacity} ({time})";
interval = 5;
};
pulseaudio = {
states = {
high = 101;
very_high = 111;
};
format-icons = [
''<span color="#a89974"></span>''
''<span color="#83a587">奔</span>''
''<span color="#b8bb26"></span>''
];
format = "{icon} {volume}";
format-bluetooth = "{icon} {volume}";
format-muted = "";
};
tray.icon-size = 14;
};
}];
style = ''
* {
border-radius: 0px;
border: none;
font-family: Inter, "mplus Nerd Font";
font-size: 13px;
min-height: 0;
}
window#waybar {
background-color: #282828;
color: #ebdbb2;
}
#window {
color: #fbf1c7;
padding-left: 10px;
padding-right: 10px;
}
#tags {
padding: 0px;
margin: 0px;
}
#tags button {
padding: 0px;
margin: 0px;
color: #a89984;
background: transparent;
}
#tags button.occupied {
color: #fbf1c7;
}
#tags button.focused {
background-color: #458588;
color: #fbf1c7;
}
#tags button.urgent {
background-color: #cc241d;
color: #fbf1c7;
}
#tray,
#pulseaudio,
#battery,
#network,
#cpu,
#memory,
#clock {
color: #fbf1c7;
padding-left: 5px;
padding-right: 5px;
}
#tray,
#pulseaudio,
#battery,
#cpu,
#memory,
#network {
border-right: 1px solid #a89984;
}
#pulseaudio.high {
color: #fabd2f;
}
#pulseaudio.very_high {
color: #fb4944;
}
#pulseaudio.muted {
color: #a8997a;
}
'';
systemd.enable = false;
};
}