From cc203583913f79e12a7f7ca96d928f7c8d5ed020 Mon Sep 17 00:00:00 2001 From: iiogama Date: Tue, 9 Jan 2024 20:50:35 -0800 Subject: [PATCH] Hyprland kept crashing and DWL wouldn't patch with Nix, error stated that tags was not declared, yet I didn't edit anything declaring tags in the config.h. Removed those two compositors and installed and configure river. --- home-manager/dots/bashrc | 1 + home-manager/dots/hypr/hyprland.conf | 202 --------------------------- home-manager/dots/mako/config | 11 +- home-manager/dots/river/init | 168 ++++++++++++++++++++++ home-manager/dots/waybar/colors.css | 12 ++ home-manager/dots/waybar/config | 50 +++++++ home-manager/dots/waybar/style.css | 37 +++++ home-manager/dots/waybar/wittr.sh | 5 + home-manager/wayland.nix | 15 +- nixos/cli.nix | 2 + nixos/gui.nix | 1 - nixos/patches/dwl/config.def.h | 171 ----------------------- nixos/patches/dwl/config.h | 173 ----------------------- nixos/wayland.nix | 9 +- nixos/xorg.nix | 5 +- way-displays | 24 ++++ 16 files changed, 328 insertions(+), 558 deletions(-) delete mode 100644 home-manager/dots/hypr/hyprland.conf create mode 100755 home-manager/dots/river/init create mode 100644 home-manager/dots/waybar/colors.css create mode 100644 home-manager/dots/waybar/config create mode 100644 home-manager/dots/waybar/style.css create mode 100755 home-manager/dots/waybar/wittr.sh delete mode 100644 nixos/patches/dwl/config.def.h delete mode 100644 nixos/patches/dwl/config.h create mode 100644 way-displays diff --git a/home-manager/dots/bashrc b/home-manager/dots/bashrc index f08f827..399f957 100644 --- a/home-manager/dots/bashrc +++ b/home-manager/dots/bashrc @@ -123,4 +123,5 @@ export BEMENU_OPTS="--tb '#6272a4'\ --binding 'vim'\ --vim-esc-exits\ --ignorecase\ + --bottom\ --no-overlap" diff --git a/home-manager/dots/hypr/hyprland.conf b/home-manager/dots/hypr/hyprland.conf deleted file mode 100644 index 909cad2..0000000 --- a/home-manager/dots/hypr/hyprland.conf +++ /dev/null @@ -1,202 +0,0 @@ -# Variables -$TERMINAL = foot -$MENU = iiwmenu -$FILEMANAGER = foot -e ranger -$MOD = SUPER -# Some default env vars. -env = XCURSOR_SIZE,24 - -# Auto-start -# exec-once = waybar & hyprpaper & firefox -exec-once = nm-applet -exec-once = mullvad-gui -exec-once = wl-paste --type text --watch cliphist store -exec-once = wl-paste --type image --watch cliphist store -exec-once = mako -exec-once = swww init -exec-once = swww img $HOME/Pictures/wallpapers/bliss-night.png --transition-type simple - -# Monitors -monitor=DP-1,2560x1440@164.99,0x0,1 -monitor=DP-2,2560x1440@164.99,2560x0,1 - -# Workspaces -workspace=1,monitor:DP-1 -workspace=2,monitor:DP-1 -workspace=3,monitor:DP-1 -workspace=4,monitor:DP-1 -workspace=5,monitor:DP-1 -workspace=6,monitor:DP-2 -workspace=7,monitor:DP-2 -workspace=8,monitor:DP-2 -workspace=9,monitor:DP-2 -workspace=10,monitor:DP-2 - -# Source a file (multi-file configs) -# source = ~/.config/hypr/myColors.conf - -# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ -input { - kb_layout = us - kb_variant = - kb_model = - kb_options = - kb_rules = - follow_mouse = 1 - touchpad { - natural_scroll = no - } - sensitivity = 0 # -1.0 - 1.0, 0 means no modification. -} - -general { - gaps_in = 10 - gaps_out = 20 - border_size = 2 - col.active_border = rgba(bd93f9ff) rgba(bd93f9ff) 45deg - col.inactive_border = rgba(282a3600) - layout = dwindle - allow_tearing = false - cursor_inactive_timeout = 1 -} - -decoration { - rounding = 10 - blur { - enabled = true - size = 3 - passes = 1 - } - drop_shadow = yes - shadow_range = 4 - shadow_render_power = 3 - col.shadow = rgba(1a1a1aee) -} - -animations { - enabled = yes - bezier = myBezier, 0.05, 0.9, 0.1, 1.05 - animation = windows, 1, 7, myBezier - animation = windowsOut, 1, 7, default, popin 80% - animation = border, 1, 10, default - animation = borderangle, 1, 8, default - animation = fade, 1, 7, default - animation = workspaces, 1, 6, default -} - -dwindle { - pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below - preserve_split = yes # you probably want this - default_split_ratio = 1.10 - force_split = 2 -} - -master { - new_is_master = false -} - -gestures { - # See https://wiki.hyprland.org/Configuring/Variables/ for more - workspace_swipe = off -} - -# Example per-device config -# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more -device:epic-mouse-v1 { - sensitivity = -0.5 -} - -# Hotkeys -bind = $MOD, Return, exec, $TERMINAL -e iitmux -bind = $MOD SHIFT, Return, exec, $TERMINAL -bind = $MOD, V, exec, cliphist list | bemenu -p 'Cliphist ' -l 8 | cliphist decode | wl-copy -bind = $MOD, Q, killactive, -bind = $MOD SHIFT, Q, exit, -bind = $MOD, F, togglefloating, -bind = , F11, fullscreen -bind = $MOD, Z, fullscreen, 1 -bind = $MOD, Space, exec, $MENU -bind = $MOD SHIFT, F, pseudo, # dwindle - -# Focus window -bind = $MOD, h, movefocus, l -bind = $MOD, j, movefocus, d -bind = $MOD, k, movefocus, u -bind = $MOD, l, movefocus, r -bind = ALT, TAB, cyclenext -bind = ALT Shift, TAB, cyclenext, prev - -# Move window -bind = $MOD CTRL, h, movewindow, l -bind = $MOD CTRL, j, movewindow, d -bind = $MOD CTRL, k, movewindow, u -bind = $MOD CTRL, l, movewindow, r - -# Swap window -bind = $MOD SHIFT, h, swapwindow, l -bind = $MOD SHIFT, j, swapwindow, d -bind = $MOD SHIFT, k, swapwindow, u -bind = $MOD SHIFT, l, swapwindow, r - -# Focus workspace -bind = $MOD, 1, workspace, 1 -bind = $MOD, 1, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 2, workspace, 2 -bind = $MOD, 2, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 3, workspace, 3 -bind = $MOD, 3, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 4, workspace, 4 -bind = $MOD, 4, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 5, workspace, 5 -bind = $MOD, 5, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 6, workspace, 6 -bind = $MOD, 6, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 7, workspace, 7 -bind = $MOD, 7, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 8, workspace, 8 -bind = $MOD, 8, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 9, workspace, 9 -bind = $MOD, 9, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, 0, workspace, 10 -bind = $MOD, 0, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD, TAB, workspace, previous - -# Move active window to a workspace with mainMod + SHIFT + [0-9] -bind = $MOD SHIFT, 1, movetoworkspace, 1 -bind = $MOD SHIFT, 1, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 2, movetoworkspace, 2 -bind = $MOD SHIFT, 2, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 3, movetoworkspace, 3 -bind = $MOD SHIFT, 3, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 4, movetoworkspace, 4 -bind = $MOD SHIFT, 4, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 5, movetoworkspace, 5 -bind = $MOD SHIFT, 5, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 6, movetoworkspace, 6 -bind = $MOD SHIFT, 6, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 7, movetoworkspace, 7 -bind = $MOD SHIFT, 7, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 8, movetoworkspace, 8 -bind = $MOD SHIFT, 8, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 9, movetoworkspace, 9 -bind = $MOD SHIFT, 9, exec, notify-send "$(hyprctl activeworkspace)" -bind = $MOD SHIFT, 0, movetoworkspace, 10 -bind = $MOD SHIFT, 0, exec, notify-send "$(hyprctl activeworkspace)" - -# Example special workspace (scratchpad) -bind = $MOD, Grave, togglespecialworkspace, scratch -bind = $MOD SHIFT, Grave, movetoworkspace, special:scratch - -# Move/resize windows with mainMod + LMB/RMB and dragging -bindm = $MOD, mouse:272, movewindow -bindm = $MOD, mouse:273, resizewindow - -# Screenshot -bind = $MOD SHIFT, S, exec, grimblast --notify copysave area "$HOME/Pictures/screenshots/scrot-$(date +%Y%m%d%H%M%s).jpg" - -# Example windowrule v1 -# windowrule = float, ^(kitty)$ -# Example windowrule v2 -# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ -# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more -windowrulev2 = nomaximizerequest, class:.* # You'll probably like this. diff --git a/home-manager/dots/mako/config b/home-manager/dots/mako/config index c884d74..cc7bc1b 100644 --- a/home-manager/dots/mako/config +++ b/home-manager/dots/mako/config @@ -1,14 +1,21 @@ max-history=10 +max-visible=5 +anchor=bottom-right font=Comic Mono 12 background-color=#282a36 -text-color=#44475a +text-color=#50fa7b border-color=#282a36 +default-timeout=10000 [urgency=low] border-color=#282a36 +text-color=#6272a4 [urgency=normal] -border-color=#f1fa8c +border-color=#bd93f9 +text-color=#50fa7b [urgency=high] +background-color=#ff5555 border-color=#ff5555 +text-color=#f8f8f2 diff --git a/home-manager/dots/river/init b/home-manager/dots/river/init new file mode 100755 index 0000000..f1dc812 --- /dev/null +++ b/home-manager/dots/river/init @@ -0,0 +1,168 @@ +#!/bin/sh +# See the river(1), riverctl(1), and rivertile(1) man pages for complete +# documentation. + +# Autostart +riverctl spawn "way-displays > /tmp/way-displays.${XDG_VTNR}.${USER}.log 2>&1" +riverctl spawn "swww init" +riverctl spawn "swww img $HOME/Pictures/wallpapers/bliss-night.png --transition-type simple" +riverctl spawn "wl-paste --type text --watch cliphist store" +riverctl spawn "wl-paste --type image --watch cliphist store" +riverctl spawn "waybar" +riverctl spawn "nm-applet" +riverctl spawn "mullvad-gui" +riverctl spawn "mako" + +# Theme +#riverctl background-color 0x282a36 +riverctl border-color-focused 0xbd93f9 +riverctl border-color-unfocused 0x282a36 + +# Note: the "Super" modifier is also known as Logo, GUI, Windows, Mod4, etc. + +# Super+Shift+Return to start an instance of foot (https://codeberg.org/dnkl/foot) +riverctl map normal Super+Shift Return spawn "foot iitmux" +riverctl map normal Super Space spawn "iiwmenu" + +# Super+Q to close the focused view +riverctl map normal Super Q close + +# Super+Shift+E to exit river +riverctl map normal Super+Shift Q exit + +# 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 + +# 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 + +# Super+Period and Super+Comma to focus the next/previous output +riverctl map normal Super Tab focus-output next +riverctl map normal Super+Shift Tab focus-output previous + +# Super+Shift+{Period,Comma} to send the focused view to the next/previous output +riverctl map normal Super+Shift Period send-to-output next +riverctl map normal Super+Shift Comma send-to-output previous + +# Super+Return to bump the focused view to the top of the layout stack +riverctl map normal Super Return zoom + +# 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" + +# Super+Shift+H and Super+Shift+L to increment/decrement the main count of rivertile(1) +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+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 + +# 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 + +# 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 + +# 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 + +# Super + Middle Mouse Button to toggle float +riverctl map-pointer normal Super BTN_MIDDLE toggle-float + +for i in $(seq 1 9) +do + tags=$((1 << ($i - 1))) + + # Super+[1-9] to focus tag [0-8] + riverctl map normal Super $i set-focused-tags $tags + + # Super+Shift+[1-9] to tag focused view with tag [0-8] + riverctl map normal Super+Shift $i set-view-tags $tags + + # Super+Control+[1-9] to toggle focus of tag [0-8] + riverctl map normal Super+Control $i toggle-focused-tags $tags + + # Super+Shift+Control+[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)) +riverctl map normal Super 0 set-focused-tags $all_tags +riverctl map normal Super+Shift 0 set-view-tags $all_tags + +# Super+Space to toggle float +riverctl map normal Super+Shift Space toggle-float + +# Super+F to toggle fullscreen +riverctl map normal Super F 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" + +# 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 +riverctl declare-mode passthrough + +# Super+F11 to enter passthrough mode +riverctl map normal Super F11 enter-mode passthrough + +# 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 keyboard repeat rate +riverctl set-repeat 50 300 + +# Make all views with an app-id that starts with "float" and title "foo" start floating. +riverctl rule-add -app-id 'float*' -title 'foo' float + +# Make all views with app-id "bar" and any title use client-side decorations +riverctl rule-add -app-id "bar" csd + +# 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 10 -outer-padding 10 & diff --git a/home-manager/dots/waybar/colors.css b/home-manager/dots/waybar/colors.css new file mode 100644 index 0000000..c1d5bda --- /dev/null +++ b/home-manager/dots/waybar/colors.css @@ -0,0 +1,12 @@ +@define-color background-darker rgba(30, 31, 41, 230); +@define-color background #282a36; +@define-color selection #44475a; +@define-color foreground #f8f8f2; +@define-color comment #6272a4; +@define-color cyan #8be9fd; +@define-color green #50fa7b; +@define-color orange #ffb86c; +@define-color pink #ff79c6; +@define-color purple #bd93f9; +@define-color red #ff5555; +@define-color yellow #f1fa8c; diff --git a/home-manager/dots/waybar/config b/home-manager/dots/waybar/config new file mode 100644 index 0000000..761f40a --- /dev/null +++ b/home-manager/dots/waybar/config @@ -0,0 +1,50 @@ +{ + "layer": "top", + "position": "top", + "height": 24, + "spacing": 8, + "modules-left": [ + "river/tags", + "river/mode", + "clock", + "custom/weather" + ], + "modules-center": ["river/window"], + "modules-right": [ + "wlr/taskbar", + "tray" + ], + "river/tags": { + "num-tags": 4, + "set-tags": [ + 2147483649, + 2147483650, + 2147483652, + 2147483656, + 2147483664 + ] + }, + "wlr/taskbar": { + "on-click": "activate", + "on-click-middle": "close", + "ignore-list": [ + "foot" + ] + }, + "tray": { + "icon-size": 21, + "spacing": 10 + }, + "custom/weather": { + "exec": "~/.config/waybar/wittr.sh", + "return-type": "json", + "format": "{}", + "tooltip": true, + "interval": 900 + }, + "clock": { + "format": "{:%Y.%m.%d %H:%M:%S}", + "tooltip-format": "{:%Y %B}\n{calendar}", + "interval": 1 + } +} diff --git a/home-manager/dots/waybar/style.css b/home-manager/dots/waybar/style.css new file mode 100644 index 0000000..feced2c --- /dev/null +++ b/home-manager/dots/waybar/style.css @@ -0,0 +1,37 @@ +@import url("./colors.css"); +* { + border: none; + border-radius: 0; + font-family: Comic Mono; + font-size: 12pt; + min-height: 0; +} +window#waybar { + opacity: 0.9; + background: @background-darker; + color: @foreground; + border-bottom: 2px solid @background; +} +#workspaces button { + padding: 0 10px; + background: @background; + color: @foreground; +} +#workspaces button:hover { + box-shadow: inherit; + text-shadow: inherit; + background-image: linear-gradient(0deg, @selection, @background-darker); +} +#workspaces button.active { + background-image: linear-gradient(0deg, @purple, @selection); +} +#workspaces button.urgent { + background-image: linear-gradient(0deg, @red, @background-darker); +} +#taskbar button.active { + background-image: linear-gradient(0deg, @selection, @background-darker); +} +#clock { + padding: 0 4px; + background: @background; +} diff --git a/home-manager/dots/waybar/wittr.sh b/home-manager/dots/waybar/wittr.sh new file mode 100755 index 0000000..1e0b1f1 --- /dev/null +++ b/home-manager/dots/waybar/wittr.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env sh +req=$(curl -s wttr.in/sacramento?format="%t|%l+(%c%f)+%h,+%C") +bar=$(echo $req | awk -F "|" '{print $1}') +tooltip=$(echo $req | awk -F "|" '{print $2}') +echo "{\"text\":\"$bar\", \"tooltip\":\"$tooltip\"}" diff --git a/home-manager/wayland.nix b/home-manager/wayland.nix index 524ce89..cbccef1 100644 --- a/home-manager/wayland.nix +++ b/home-manager/wayland.nix @@ -10,15 +10,20 @@ target = "foot"; recursive = true; }; - "hyprland" = { - source = ./dots/hypr; - target = "hypr"; - recursive = true; - }; "mako" = { source = ./dots/mako; target = "mako"; recursive = true; }; + "river" = { + source = ./dots/river; + target = "river"; + recursive = true; + }; + "waybar" = { + source = ./dots/waybar; + target = "waybar"; + recursive = true; + }; }; } diff --git a/nixos/cli.nix b/nixos/cli.nix index 731e2d8..d372de8 100644 --- a/nixos/cli.nix +++ b/nixos/cli.nix @@ -99,6 +99,7 @@ jo john jq + killall lynis mdp mediainfo @@ -117,6 +118,7 @@ unrar unzip up + ueberzugpp yai yank yq-go diff --git a/nixos/gui.nix b/nixos/gui.nix index 31253b8..f2b05fc 100644 --- a/nixos/gui.nix +++ b/nixos/gui.nix @@ -42,7 +42,6 @@ users.users.${user.name}.packages = with pkgs; [ ani-cli bashmount - feh glib lagrange librewolf diff --git a/nixos/patches/dwl/config.def.h b/nixos/patches/dwl/config.def.h deleted file mode 100644 index a8ed61d..0000000 --- a/nixos/patches/dwl/config.def.h +++ /dev/null @@ -1,171 +0,0 @@ -/* Taken from https://github.com/djpohly/dwl/issues/466 */ -#define COLOR(hex) { ((hex >> 24) & 0xFF) / 255.0f, \ - ((hex >> 16) & 0xFF) / 255.0f, \ - ((hex >> 8) & 0xFF) / 255.0f, \ - (hex & 0xFF) / 255.0f } -/* appearance */ -static const int sloppyfocus = 1; /* focus follows mouse */ -static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */ -static const unsigned int borderpx = 1; /* border pixel of windows */ -static const float rootcolor[] = COLOR(0x222222ff); -static const float bordercolor[] = COLOR(0x444444ff); -static const float focuscolor[] = COLOR(0x005577ff); -static const float urgentcolor[] = COLOR(0xff0000ff); -/* To conform the xdg-protocol, set the alpha to zero to restore the old behavior */ -static const float fullscreen_bg[] = {0.1, 0.1, 0.1, 1.0}; /* You can also use glsl colors */ - -/* tagging - TAGCOUNT must be no greater than 31 */ -#define TAGCOUNT (9) - -/* logging */ -static int log_level = WLR_ERROR; - -static const Rule rules[] = { - /* app_id title tags mask isfloating monitor */ - /* examples: - { "Gimp", NULL, 0, 1, -1 }, - */ - { "firefox", NULL, 1 << 8, 0, -1 }, -}; - -/* layout(s) */ -static const Layout layouts[] = { - /* symbol arrange function */ - { "[]=", tile }, - { "><>", NULL }, /* no layout function means floating behavior */ - { "[M]", monocle }, -}; - -/* monitors */ -/* NOTE: ALWAYS add a fallback rule, even if you are completely sure it won't be used */ -static const MonitorRule monrules[] = { - /* name mfact nmaster scale layout rotate/reflect x y */ - /* example of a HiDPI laptop monitor: - { "eDP-1", 0.5, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, - */ - /* defaults */ - { NULL, 0.55, 1, 1, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, -}; - -/* keyboard */ -static const struct xkb_rule_names xkb_rules = { - /* can specify fields: rules, model, layout, variant, options */ - /* example: - .options = "ctrl:nocaps", - */ - .options = NULL, -}; - -static const int repeat_rate = 25; -static const int repeat_delay = 600; - -/* Trackpad */ -static const int tap_to_click = 1; -static const int tap_and_drag = 1; -static const int drag_lock = 1; -static const int natural_scrolling = 0; -static const int disable_while_typing = 1; -static const int left_handed = 0; -static const int middle_button_emulation = 0; -/* You can choose between: -LIBINPUT_CONFIG_SCROLL_NO_SCROLL -LIBINPUT_CONFIG_SCROLL_2FG -LIBINPUT_CONFIG_SCROLL_EDGE -LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN -*/ -static const enum libinput_config_scroll_method scroll_method = LIBINPUT_CONFIG_SCROLL_2FG; - -/* You can choose between: -LIBINPUT_CONFIG_CLICK_METHOD_NONE -LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS -LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER -*/ -static const enum libinput_config_click_method click_method = LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS; - -/* You can choose between: -LIBINPUT_CONFIG_SEND_EVENTS_ENABLED -LIBINPUT_CONFIG_SEND_EVENTS_DISABLED -LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE -*/ -static const uint32_t send_events_mode = LIBINPUT_CONFIG_SEND_EVENTS_ENABLED; - -/* You can choose between: -LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT -LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE -*/ -static const enum libinput_config_accel_profile accel_profile = LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE; -static const double accel_speed = 0.0; -/* You can choose between: -LIBINPUT_CONFIG_TAP_MAP_LRM -- 1/2/3 finger tap maps to left/right/middle -LIBINPUT_CONFIG_TAP_MAP_LMR -- 1/2/3 finger tap maps to left/middle/right -*/ -static const enum libinput_config_tap_button_map button_map = LIBINPUT_CONFIG_TAP_MAP_LRM; - -/* If you want to use the windows key for MODKEY, use WLR_MODIFIER_LOGO */ -#define MODKEY WLR_MODIFIER_ALT - -#define TAGKEYS(KEY,SKEY,TAG) \ - { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ - { MODKEY|WLR_MODIFIER_CTRL, KEY, toggleview, {.ui = 1 << TAG} }, \ - { MODKEY|WLR_MODIFIER_SHIFT, SKEY, tag, {.ui = 1 << TAG} }, \ - { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT,SKEY,toggletag, {.ui = 1 << TAG} } - -/* helper for spawning shell commands in the pre dwm-5.0 fashion */ -#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } - -/* commands */ -static const char *termcmd[] = { "foot", NULL }; -static const char *menucmd[] = { "bemenu-run", NULL }; - -static const Key keys[] = { - /* Note that Shift changes certain key codes: c -> C, 2 -> at, etc. */ - /* modifier key function argument */ - { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd} }, - { MODKEY, XKB_KEY_j, focusstack, {.i = +1} }, - { MODKEY, XKB_KEY_k, focusstack, {.i = -1} }, - { MODKEY, XKB_KEY_i, incnmaster, {.i = +1} }, - { MODKEY, XKB_KEY_d, incnmaster, {.i = -1} }, - { MODKEY, XKB_KEY_h, setmfact, {.f = -0.05} }, - { MODKEY, XKB_KEY_l, setmfact, {.f = +0.05} }, - { MODKEY, XKB_KEY_Return, zoom, {0} }, - { MODKEY, XKB_KEY_Tab, view, {0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_C, killclient, {0} }, - { MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} }, - { MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} }, - { MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} }, - { MODKEY, XKB_KEY_space, setlayout, {0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, - { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, - { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, - { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, - { MODKEY, XKB_KEY_period, focusmon, {.i = WLR_DIRECTION_RIGHT} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = WLR_DIRECTION_LEFT} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = WLR_DIRECTION_RIGHT} }, - TAGKEYS( XKB_KEY_1, XKB_KEY_exclam, 0), - TAGKEYS( XKB_KEY_2, XKB_KEY_at, 1), - TAGKEYS( XKB_KEY_3, XKB_KEY_numbersign, 2), - TAGKEYS( XKB_KEY_4, XKB_KEY_dollar, 3), - TAGKEYS( XKB_KEY_5, XKB_KEY_percent, 4), - TAGKEYS( XKB_KEY_6, XKB_KEY_asciicircum, 5), - TAGKEYS( XKB_KEY_7, XKB_KEY_ampersand, 6), - TAGKEYS( XKB_KEY_8, XKB_KEY_asterisk, 7), - TAGKEYS( XKB_KEY_9, XKB_KEY_parenleft, 8), - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Q, quit, {0} }, - - /* Ctrl-Alt-Backspace and Ctrl-Alt-Fx used to be handled by X server */ - { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_Terminate_Server, quit, {0} }, - /* Ctrl-Alt-Fx is used to switch to another VT, if you don't know what a VT is - * do not remove them. - */ -#define CHVT(n) { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_XF86Switch_VT_##n, chvt, {.ui = (n)} } - CHVT(1), CHVT(2), CHVT(3), CHVT(4), CHVT(5), CHVT(6), - CHVT(7), CHVT(8), CHVT(9), CHVT(10), CHVT(11), CHVT(12), -}; - -static const Button buttons[] = { - { MODKEY, BTN_LEFT, moveresize, {.ui = CurMove} }, - { MODKEY, BTN_MIDDLE, togglefloating, {0} }, - { MODKEY, BTN_RIGHT, moveresize, {.ui = CurResize} }, -}; diff --git a/nixos/patches/dwl/config.h b/nixos/patches/dwl/config.h deleted file mode 100644 index c5ae7a6..0000000 --- a/nixos/patches/dwl/config.h +++ /dev/null @@ -1,173 +0,0 @@ -/* Taken from https://github.com/djpohly/dwl/issues/466 */ -#define COLOR(hex) { ((hex >> 24) & 0xFF) / 255.0f, \ - ((hex >> 16) & 0xFF) / 255.0f, \ - ((hex >> 8) & 0xFF) / 255.0f, \ - (hex & 0xFF) / 255.0f } -/* appearance */ -static const int sloppyfocus = 1; /* focus follows mouse */ -static const int bypass_surface_visibility = 0; /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible */ -static const unsigned int borderpx = 1; /* border pixel of windows */ -static const float rootcolor[] = COLOR(0x222222ff); -static const float bordercolor[] = COLOR(0x444444ff); -static const float focuscolor[] = COLOR(0x005577ff); -static const float urgentcolor[] = COLOR(0xff0000ff); -/* To conform the xdg-protocol, set the alpha to zero to restore the old behavior */ -static const float fullscreen_bg[] = {0.1, 0.1, 0.1, 1.0}; /* You can also use glsl colors */ - -/* tagging - TAGCOUNT must be no greater than 31 */ -#define TAGCOUNT (9) - -/* logging */ -static int log_level = WLR_ERROR; - -static const Rule rules[] = { - /* app_id title tags mask isfloating monitor */ - /* examples: - { "Gimp", NULL, 0, 1, -1 }, - { "firefox", NULL, 1 << 8, 0, -1 }, - */ -}; - -/* layout(s) */ -static const Layout layouts[] = { - /* symbol arrange function */ - { "[T]", tile }, - { "[F]", NULL }, /* no layout function means floating behavior */ - { "[M]", monocle }, -}; - -/* monitors */ -/* NOTE: ALWAYS add a fallback rule, even if you are completely sure it won't be used */ -static const MonitorRule monrules[] = { - /* name mfact nmaster scale layout rotate/reflect x y */ - /* example of a HiDPI laptop monitor: - { "eDP-1", 0.5, 1, 2, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, - */ - /* defaults */ - { NULL, 0.55, 1, 1, &layouts[0], WL_OUTPUT_TRANSFORM_NORMAL, -1, -1 }, -}; - -/* keyboard */ -static const struct xkb_rule_names xkb_rules = { - /* can specify fields: rules, model, layout, variant, options */ - /* example: - .options = "ctrl:nocaps", - */ - .options = NULL, -}; - -static const int repeat_rate = 25; -static const int repeat_delay = 600; - -/* Trackpad */ -static const int tap_to_click = 1; -static const int tap_and_drag = 1; -static const int drag_lock = 1; -static const int natural_scrolling = 0; -static const int disable_while_typing = 1; -static const int left_handed = 0; -static const int middle_button_emulation = 0; -/* You can choose between: -LIBINPUT_CONFIG_SCROLL_NO_SCROLL -LIBINPUT_CONFIG_SCROLL_2FG -LIBINPUT_CONFIG_SCROLL_EDGE -LIBINPUT_CONFIG_SCROLL_ON_BUTTON_DOWN -*/ -static const enum libinput_config_scroll_method scroll_method = LIBINPUT_CONFIG_SCROLL_2FG; - -/* You can choose between: -LIBINPUT_CONFIG_CLICK_METHOD_NONE -LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS -LIBINPUT_CONFIG_CLICK_METHOD_CLICKFINGER -*/ -static const enum libinput_config_click_method click_method = LIBINPUT_CONFIG_CLICK_METHOD_BUTTON_AREAS; - -/* You can choose between: -LIBINPUT_CONFIG_SEND_EVENTS_ENABLED -LIBINPUT_CONFIG_SEND_EVENTS_DISABLED -LIBINPUT_CONFIG_SEND_EVENTS_DISABLED_ON_EXTERNAL_MOUSE -*/ -static const uint32_t send_events_mode = LIBINPUT_CONFIG_SEND_EVENTS_ENABLED; - -/* You can choose between: -LIBINPUT_CONFIG_ACCEL_PROFILE_FLAT -LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE -*/ -static const enum libinput_config_accel_profile accel_profile = LIBINPUT_CONFIG_ACCEL_PROFILE_ADAPTIVE; -static const double accel_speed = 0.0; -/* You can choose between: -LIBINPUT_CONFIG_TAP_MAP_LRM -- 1/2/3 finger tap maps to left/right/middle -LIBINPUT_CONFIG_TAP_MAP_LMR -- 1/2/3 finger tap maps to left/middle/right -*/ -static const enum libinput_config_tap_button_map button_map = LIBINPUT_CONFIG_TAP_MAP_LRM; - -/* If you want to use the windows key for MODKEY, use WLR_MODIFIER_LOGO -#define MODKEY WLR_MODIFIER_ALT -*/ -#define MODKEY WLR_MODIFIER_LOGO - -#define TAGKEYS(KEY,SKEY,TAG) \ - { MODKEY, KEY, view, {.ui = 1 << TAG} }, \ - { MODKEY|WLR_MODIFIER_CTRL, KEY, toggleview, {.ui = 1 << TAG} }, \ - { MODKEY|WLR_MODIFIER_SHIFT, SKEY, tag, {.ui = 1 << TAG} }, \ - { MODKEY|WLR_MODIFIER_CTRL|WLR_MODIFIER_SHIFT,SKEY,toggletag, {.ui = 1 << TAG} } - -/* helper for spawning shell commands in the pre dwm-5.0 fashion */ -#define SHCMD(cmd) { .v = (const char*[]){ "/bin/sh", "-c", cmd, NULL } } - -/* commands */ -static const char *termcmd[] = { "foot", NULL }; -static const char *menucmd[] = { "bemenu-run", NULL }; - -static const Key keys[] = { - /* Note that Shift changes certain key codes: c -> C, 2 -> at, etc. */ - /* modifier key function argument */ - { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} }, - { MODKEY, XKB_KEY_Return, spawn, {.v = termcmd} }, - { MODKEY, XKB_KEY_j, focusstack, {.i = +1} }, - { MODKEY, XKB_KEY_k, focusstack, {.i = -1} }, - { MODKEY, XKB_KEY_i, incnmaster, {.i = +1} }, - { MODKEY, XKB_KEY_d, incnmaster, {.i = -1} }, - { MODKEY, XKB_KEY_h, setmfact, {.f = -0.05} }, - { MODKEY, XKB_KEY_l, setmfact, {.f = +0.05} }, - { MODKEY|WLR_MODIFER_SHIFT, XKB_KEY_Return, zoom, {0} }, - { MODKEY, XKB_KEY_Tab, view, {0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_C, killclient, {0} }, - { MODKEY, XKB_KEY_t, setlayout, {.v = &layouts[0]} }, - { MODKEY, XKB_KEY_f, setlayout, {.v = &layouts[1]} }, - { MODKEY, XKB_KEY_m, setlayout, {.v = &layouts[2]} }, - { MODKEY, XKB_KEY_space, setlayout, {0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_space, togglefloating, {0} }, - { MODKEY, XKB_KEY_e, togglefullscreen, {0} }, - { MODKEY, XKB_KEY_0, view, {.ui = ~0} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_parenright, tag, {.ui = ~0} }, - { MODKEY, XKB_KEY_comma, focusmon, {.i = WLR_DIRECTION_LEFT} }, - { MODKEY, XKB_KEY_period, focusmon, {.i = WLR_DIRECTION_RIGHT} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_less, tagmon, {.i = WLR_DIRECTION_LEFT} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_greater, tagmon, {.i = WLR_DIRECTION_RIGHT} }, - TAGKEYS( XKB_KEY_1, XKB_KEY_exclam, 0), - TAGKEYS( XKB_KEY_2, XKB_KEY_at, 1), - TAGKEYS( XKB_KEY_3, XKB_KEY_numbersign, 2), - TAGKEYS( XKB_KEY_4, XKB_KEY_dollar, 3), - TAGKEYS( XKB_KEY_5, XKB_KEY_percent, 4), - TAGKEYS( XKB_KEY_6, XKB_KEY_asciicircum, 5), - TAGKEYS( XKB_KEY_7, XKB_KEY_ampersand, 6), - TAGKEYS( XKB_KEY_8, XKB_KEY_asterisk, 7), - TAGKEYS( XKB_KEY_9, XKB_KEY_parenleft, 8), - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Q, quit, {0} }, - - /* Ctrl-Alt-Backspace and Ctrl-Alt-Fx used to be handled by X server */ - { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_Terminate_Server, quit, {0} }, - /* Ctrl-Alt-Fx is used to switch to another VT, if you don't know what a VT is - * do not remove them. - */ -#define CHVT(n) { WLR_MODIFIER_CTRL|WLR_MODIFIER_ALT,XKB_KEY_XF86Switch_VT_##n, chvt, {.ui = (n)} } - CHVT(1), CHVT(2), CHVT(3), CHVT(4), CHVT(5), CHVT(6), - CHVT(7), CHVT(8), CHVT(9), CHVT(10), CHVT(11), CHVT(12), -}; - -static const Button buttons[] = { - { MODKEY, BTN_LEFT, moveresize, {.ui = CurMove} }, - { MODKEY, BTN_MIDDLE, togglefloating, {0} }, - { MODKEY, BTN_RIGHT, moveresize, {.ui = CurResize} }, -}; diff --git a/nixos/wayland.nix b/nixos/wayland.nix index 393c3d9..35e09cb 100644 --- a/nixos/wayland.nix +++ b/nixos/wayland.nix @@ -32,18 +32,19 @@ dina-font ]; programs = { - hyprland = { + river = { enable = true; - xwayland.enable = true; }; }; security.pam.services.swaylock = { }; + users.users.${user.name}.packages = with pkgs; [ + imv + ]; environment.systemPackages = with pkgs; [ bemenu bemoji cliphist - eww-wayland foot grimblast hyprpicker @@ -51,6 +52,8 @@ swaylock swww tessen + waybar + way-displays wl-clipboard wtype ]; diff --git a/nixos/xorg.nix b/nixos/xorg.nix index 74caecd..873d81d 100644 --- a/nixos/xorg.nix +++ b/nixos/xorg.nix @@ -38,6 +38,10 @@ programs = { slock.enable = true; }; + users.users.${user.name}.packages = with pkgs; [ + feh + scrot + ]; environment.systemPackages = with pkgs; [ (dmenu.overrideAttrs (oldAttrs: rec { configFile = writeText "config.def.h" (builtins.readFile ./patches/dmenu/config.h); @@ -50,7 +54,6 @@ clipmenu dunst hsetroot - scrot sxhkd trayer xbanish diff --git a/way-displays b/way-displays new file mode 100644 index 0000000..4705637 --- /dev/null +++ b/way-displays @@ -0,0 +1,24 @@ +https://github.com/alex-courtis/way-displays + +Configure + +Restart the compositor and run way-displays -g or look at /tmp/way-displays.1.me.log. + +Tweak cfg.yaml to your liking and save it. Changes will be immediately applied. + +Alternatively, use the command line to make your changes then persist them with way-displays -w. + +You might want to tail -f /tmp/way-displays.1.me.log whilst you are tweaking. +Usage + +See Configuration for details on cfg.yaml and the command line. + +Start the way-displays server by running once with no arguments after your wayland compositor has been started. + +It will remain in the background, responding to changes, such as plugging in a display, and will terminate when you exit the compositor. + +It will print messages to inform you of everything that is going on. + +You can interact with the server via the command line + +The server responds to IPC requests to fetch and mutate state.