From 0686b2ae84afcb23ca64ea7b6737b3c797ea5a7d Mon Sep 17 00:00:00 2001 From: Aly Raffauf Date: Sat, 13 Apr 2024 20:51:44 -0400 Subject: [PATCH] home: added kanshi module --- .../desktopEnv/river/default.nix | 189 ++++++++---------- .../desktopEnv/river/randomWallpaper.nix | 5 +- homeManagerModules/guiApps/default.nix | 1 + homeManagerModules/guiApps/kanshi/default.nix | 48 +++++ 4 files changed, 138 insertions(+), 105 deletions(-) create mode 100644 homeManagerModules/guiApps/kanshi/default.nix diff --git a/homeManagerModules/desktopEnv/river/default.nix b/homeManagerModules/desktopEnv/river/default.nix index ee5cf93e..e8007b4d 100644 --- a/homeManagerModules/desktopEnv/river/default.nix +++ b/homeManagerModules/desktopEnv/river/default.nix @@ -18,6 +18,7 @@ guiApps.wlogout.enable = lib.mkDefault true; guiApps.alacritty.enable = lib.mkDefault true; guiApps.firefox.enable = lib.mkDefault true; + guiApps.kanshi.enable = lib.mkDefault true; # Packages that should be installed to the user profile. home.packages = with pkgs; [ @@ -27,7 +28,6 @@ evince gnome.eog gnome.file-roller - kanshi kdePackages.polkit-kde-agent-1 networkmanagerapplet playerctl @@ -50,25 +50,6 @@ programs.swaylock.enable = lib.mkDefault true; services.cliphist.enable = lib.mkDefault true; - services.kanshi.enable = true; - services.kanshi.profiles.lavaridge = { - outputs = [ - { - status = "enable"; - criteria = "BOE 0x095F Unknown"; - scale = 1.5; - } - ]; - }; - services.kanshi.profiles.petalburg = { - outputs = [ - { - status = "enable"; - criteria = "Samsung Display Corp. 0x4152 Unknown"; - scale = 2.0; - } - ]; - }; xdg.configFile."xfce4/helpers.rc".text = '' TerminalEmulator=alacritty @@ -136,14 +117,15 @@ editor = pkgs.vscodium + "/bin/codium"; terminal = pkgs.alacritty + "/bin/alacritty"; - # Hyprland desktop utilities + # River desktop utilities bar = pkgs.waybar + "/bin/waybar"; launcher = pkgs.fuzzel + "/bin/fuzzel"; notifyd = pkgs.mako + "/bin/mako"; - # wallpaperd = pkgs.hyprpaper + "/bin/hyprpaper"; - # idle = pkgs.hypridle + "/bin/hypridle"; + wallpaperd = pkgs.swaybg + "/bin/swaybg"; + idle = pkgs.swayidle + "/bin/swayidle"; logout = pkgs.wlogout + "/bin/wlogout"; - # lock = pkgs.hyprlock + "/bin/hyprlock --immediate"; + lock = pkgs.swaylock + "/bin/swaylock -f -c 000000"; + riverctl = pkgs.river + "/bin/riverctl"; brightness = "${pkgs.swayosd}/bin/swayosd-client"; brightness_up = "${brightness} --brightness=raise"; @@ -178,171 +160,170 @@ pkill -f swayosd-server pkill -f waybar pkill -f swayidle - - touchpad=`riverctl list-inputs|grep -i touchpad` + 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 + ${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 - riverctl focus-follows-cursor always + ${riverctl} focus-follows-cursor always - riverctl map normal ${modifier} T spawn ${terminal} - riverctl map normal ${modifier} R spawn ${launcher} - riverctl map normal ${modifier} B spawn ${browser} - riverctl map normal ${modifier} E spawn ${editor} - riverctl map normal ${modifier} F spawn ${fileManager} + ${riverctl} map normal ${modifier} T spawn ${terminal} + ${riverctl} map normal ${modifier} R spawn ${launcher} + ${riverctl} map normal ${modifier} B spawn ${browser} + ${riverctl} map normal ${modifier} E spawn ${editor} + ${riverctl} map normal ${modifier} F spawn ${fileManager} - riverctl map normal ${modifier} M spawn ${logout} + ${riverctl} map normal ${modifier} M spawn ${logout} # ${modifier}+C to close the focused view - riverctl map normal ${modifier} C close + ${riverctl} map normal ${modifier} C close # ${modifier}+Shift+E to exit river - riverctl map normal ${modifier}+Shift E exit + ${riverctl} map normal ${modifier}+Shift E exit # ${modifier}+J and ${modifier}+K to focus the next/previous view in the layout stack - riverctl map normal ${modifier} J focus-view next - riverctl map normal ${modifier} K focus-view previous + ${riverctl} map normal ${modifier} J focus-view next + ${riverctl} map normal ${modifier} K focus-view previous # ${modifier}+Shift+J and ${modifier}+Shift+K to swap the focused view with the next/previous # view in the layout stack - riverctl map normal ${modifier}+Shift J swap next - riverctl map normal ${modifier}+Shift K swap previous + ${riverctl} map normal ${modifier}+Shift J swap next + ${riverctl} map normal ${modifier}+Shift K swap previous # ${modifier}+Period and ${modifier}+Comma to focus the next/previous output - riverctl map normal ${modifier} Period focus-output next - riverctl map normal ${modifier} Comma focus-output previous + ${riverctl} map normal ${modifier} Period focus-output next + ${riverctl} map normal ${modifier} Comma focus-output previous # ${modifier}+Shift+{Period,Comma} to send the focused view to the next/previous output - riverctl map normal ${modifier}+Shift Period send-to-output next - riverctl map normal ${modifier}+Shift Comma send-to-output previous + ${riverctl} map normal ${modifier}+Shift Period send-to-output next + ${riverctl} map normal ${modifier}+Shift Comma send-to-output previous # ${modifier}+Return to bump the focused view to the top of the layout stack - riverctl map normal ${modifier} Return zoom + ${riverctl} map normal ${modifier} Return zoom # ${modifier}+H and ${modifier}+L to decrease/increase the main ratio of rivertile(1) - riverctl map normal ${modifier} H send-layout-cmd rivertile "main-ratio -0.05" - riverctl map normal ${modifier} L send-layout-cmd rivertile "main-ratio +0.05" + ${riverctl} map normal ${modifier} H send-layout-cmd rivertile "main-ratio -0.05" + ${riverctl} map normal ${modifier} L send-layout-cmd rivertile "main-ratio +0.05" # ${modifier}+Shift+H and ${modifier}+Shift+L to increment/decrement the main count of rivertile(1) - riverctl map normal ${modifier}+Shift H send-layout-cmd rivertile "main-count +1" - riverctl map normal ${modifier}+Shift L send-layout-cmd rivertile "main-count -1" + ${riverctl} map normal ${modifier}+Shift H send-layout-cmd rivertile "main-count +1" + ${riverctl} map normal ${modifier}+Shift L send-layout-cmd rivertile "main-count -1" # ${modifier}+Alt+{H,J,K,L} to move views - riverctl map normal ${modifier}+Alt H move left 100 - riverctl map normal ${modifier}+Alt J move down 100 - riverctl map normal ${modifier}+Alt K move up 100 - riverctl map normal ${modifier}+Alt L move right 100 + ${riverctl} map normal ${modifier}+Alt H move left 100 + ${riverctl} map normal ${modifier}+Alt J move down 100 + ${riverctl} map normal ${modifier}+Alt K move up 100 + ${riverctl} map normal ${modifier}+Alt L move right 100 # ${modifier}+Alt+Control+{H,J,K,L} to snap views to screen edges - riverctl map normal ${modifier}+Alt+Control H snap left - riverctl map normal ${modifier}+Alt+Control J snap down - riverctl map normal ${modifier}+Alt+Control K snap up - riverctl map normal ${modifier}+Alt+Control L snap right + ${riverctl} map normal ${modifier}+Alt+Control H snap left + ${riverctl} map normal ${modifier}+Alt+Control J snap down + ${riverctl} map normal ${modifier}+Alt+Control K snap up + ${riverctl} map normal ${modifier}+Alt+Control L snap right # ${modifier}+Alt+Shift+{H,J,K,L} to resize views - riverctl map normal ${modifier}+Alt+Shift H resize horizontal -100 - riverctl map normal ${modifier}+Alt+Shift J resize vertical 100 - riverctl map normal ${modifier}+Alt+Shift K resize vertical -100 - riverctl map normal ${modifier}+Alt+Shift L resize horizontal 100 + ${riverctl} map normal ${modifier}+Alt+Shift H resize horizontal -100 + ${riverctl} map normal ${modifier}+Alt+Shift J resize vertical 100 + ${riverctl} map normal ${modifier}+Alt+Shift K resize vertical -100 + ${riverctl} map normal ${modifier}+Alt+Shift L resize horizontal 100 # ${modifier} + Left Mouse Button to move views - riverctl map-pointer normal ${modifier} BTN_LEFT move-view + ${riverctl} map-pointer normal ${modifier} BTN_LEFT move-view # ${modifier} + Right Mouse Button to resize views - riverctl map-pointer normal ${modifier} BTN_RIGHT resize-view + ${riverctl} map-pointer normal ${modifier} BTN_RIGHT resize-view # ${modifier} + Middle Mouse Button to toggle float - riverctl map-pointer normal ${modifier} BTN_MIDDLE toggle-float + ${riverctl} map-pointer normal ${modifier} BTN_MIDDLE toggle-float 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 + ${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 + ${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 + ${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 + ${riverctl} map normal ${modifier}+Shift+Control $i toggle-view-tags $tags done # ${modifier}+0 to focus all tags # ${modifier}+Shift+0 to tag focused view with all tags all_tags=$(((1 << 32) - 1)) - riverctl map normal ${modifier} 0 set-focused-tags $all_tags - riverctl map normal ${modifier}+Shift 0 set-view-tags $all_tags + ${riverctl} map normal ${modifier} 0 set-focused-tags $all_tags + ${riverctl} map normal ${modifier}+Shift 0 set-view-tags $all_tags # ${modifier}+Space to toggle float - riverctl map normal ${modifier} V toggle-float + ${riverctl} map normal ${modifier} V toggle-float # ${modifier}+F to toggle fullscreen - riverctl map normal ${modifier} W toggle-fullscreen + ${riverctl} map normal ${modifier} W toggle-fullscreen # ${modifier}+{Up,Right,Down,Left} to change layout orientation - riverctl map normal ${modifier} Up send-layout-cmd rivertile "main-location top" - riverctl map normal ${modifier} Right send-layout-cmd rivertile "main-location right" - riverctl map normal ${modifier} Down send-layout-cmd rivertile "main-location bottom" - riverctl map normal ${modifier} Left send-layout-cmd rivertile "main-location left" + ${riverctl} map normal ${modifier} Up send-layout-cmd rivertile "main-location top" + ${riverctl} map normal ${modifier} Right send-layout-cmd rivertile "main-location right" + ${riverctl} map normal ${modifier} Down send-layout-cmd rivertile "main-location bottom" + ${riverctl} map normal ${modifier} 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 + ${riverctl} declare-mode passthrough # ${modifier}+F11 to enter passthrough mode - riverctl map normal ${modifier} F11 enter-mode passthrough + ${riverctl} map normal ${modifier} F11 enter-mode passthrough # ${modifier}+F11 to return to normal mode - riverctl map passthrough ${modifier} F11 enter-mode normal + ${riverctl} map passthrough ${modifier} 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 - riverctl map $mode None XF86Eject spawn 'eject -T' + ${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 '${volume_up}' - riverctl map $mode None XF86AudioLowerVolume spawn '${volume_down}' - riverctl map $mode None XF86AudioMute spawn '${volume_mute}' + ${riverctl} map $mode None XF86AudioRaiseVolume spawn '${volume_up}' + ${riverctl} map $mode None XF86AudioLowerVolume spawn '${volume_down}' + ${riverctl} map $mode None XF86AudioMute spawn '${volume_mute}' - riverctl map $mode None XF86AudioMedia spawn '${media_play}' - riverctl map $mode None XF86AudioPlay spawn '${media_play}' - riverctl map $mode None XF86AudioPrev spawn '${media_previous}' - riverctl map $mode None XF86AudioNext spawn '${media_next}' + ${riverctl} map $mode None XF86AudioMedia spawn '${media_play}' + ${riverctl} map $mode None XF86AudioPlay spawn '${media_play}' + ${riverctl} map $mode None XF86AudioPrev spawn '${media_previous}' + ${riverctl} map $mode None XF86AudioNext spawn '${media_next}' - riverctl map $mode None XF86MonBrightnessUp spawn '${brightness_up}' - riverctl map $mode None XF86MonBrightnessDown spawn '${brightness_down}' + ${riverctl} map $mode None XF86MonBrightnessUp spawn '${brightness_up}' + ${riverctl} map $mode None XF86MonBrightnessDown spawn '${brightness_down}' done # Set background and border color - riverctl background-color 0x00000000 - riverctl border-color-focused 0x${border_primary} - riverctl border-color-unfocused 0x${border_secondary} + ${riverctl} background-color 0x00000000 + ${riverctl} border-color-focused 0x${border_primary} + ${riverctl} border-color-unfocused 0x${border_secondary} # Set keyboard repeat rate - riverctl set-repeat 50 300 + ${riverctl} set-repeat 50 300 # 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 + ${riverctl} default-layout rivertile rivertile -view-padding 6 -outer-padding 6 & - kanshi & - mako & - nm-applet & - swayosd-server & - thunar --daemon & - waybar & - swayidle -w timeout 300 'swaylock -f -c 000000' before-sleep 'swaylock -f -c 000000' & + ${pkgs.kanshi}/bin/kanshi & + ${notifyd} & + ${pkgs.networkmanagerapplet}/bin/nm-applet & + ${pkgs.swayosd}/bin/swayosd-server & + ${fileManager} --daemon & + ${bar} & + ${idle} -w timeout 300 '${lock}' before-sleep '${lock}' & ''; }; } diff --git a/homeManagerModules/desktopEnv/river/randomWallpaper.nix b/homeManagerModules/desktopEnv/river/randomWallpaper.nix index 4e75bedf..27a1b83e 100644 --- a/homeManagerModules/desktopEnv/river/randomWallpaper.nix +++ b/homeManagerModules/desktopEnv/river/randomWallpaper.nix @@ -26,6 +26,9 @@ in { # Packages that should be installed to the user profile. home.packages = with pkgs; [swaybg swaybg-random]; - wayland.windowManager.river.extraConfig = "swaybg-random &"; + wayland.windowManager.river.extraConfig = '' + kill `ps aux | grep swaybg-random | grep -v grep | awk '{print $2}'` + swaybg-random & + ''; }; } diff --git a/homeManagerModules/guiApps/default.nix b/homeManagerModules/guiApps/default.nix index 571e7516..b0ed11bb 100644 --- a/homeManagerModules/guiApps/default.nix +++ b/homeManagerModules/guiApps/default.nix @@ -11,6 +11,7 @@ ./fractal ./fuzzel ./google-chrome + ./kanshi ./librewolf ./mako ./obsidian diff --git a/homeManagerModules/guiApps/kanshi/default.nix b/homeManagerModules/guiApps/kanshi/default.nix new file mode 100644 index 00000000..8545da5d --- /dev/null +++ b/homeManagerModules/guiApps/kanshi/default.nix @@ -0,0 +1,48 @@ +{ + pkgs, + lib, + config, + ... +}: { + options = { + guiApps.kanshi.enable = + lib.mkEnableOption "Enable kanshi monitor profiles"; + }; + + config = lib.mkIf config.guiApps.kanshi.enable { + # Packages that should be installed to the user profile. + home.packages = with pkgs; [ + kanshi + ]; + + services.kanshi.enable = true; + services.kanshi.profiles.lavaridge = { + outputs = [ + { + status = "enable"; + criteria = "BOE 0x095F Unknown"; + scale = 1.5; + } + ]; + }; + services.kanshi.profiles.petalburg = { + outputs = [ + { + status = "enable"; + criteria = "Samsung Display Corp. 0x4152 Unknown"; + scale = 2.0; + } + ]; + }; + services.kanshi.profiles.mauville = { + outputs = [ + { + status = "enable"; + criteria = "LG Electronics LG ULTRAWIDE 311NTAB5M720 Unknown"; + scale = 1.25; + adaptiveSync = true; + } + ]; + }; + }; +}