{ config, lib, pkgs, niri, ... }: let laptop = builtins.readFile "/etc/hostname" == "syl\n"; cosmic-extra-niri = pkgs.writeShellScriptBin "cosmic-extra-niri" '' set -e # From: https://people.debian.org/~mpitt/systemd.conf-2016-graphical-session.pdf if command -v systemctl >/dev/null; then # robustness: if the previous graphical session left some failed units, # reset them so that they don't break this startup for unit in $(systemctl --user --no-legend --state=failed --plain list-units | cut -f1 -d' '); do partof="$(systemctl --user show -p PartOf --value "$unit")" for target in cosmic-session.target graphical-session.target; do if [ "$partof" = "$target" ]; then systemctl --user reset-failed "$unit" break fi done done fi # use the user's preferred shell to acquire environment variables # see: https://github.com/pop-os/cosmic-session/issues/23 if [ -n "''${SHELL}" ]; then # --in-login-shell: our flag to indicate that we don't need to recurse any further if [ "''${1}" != "--in-login-shell" ]; then # `exec -l`: like `login`, prefixes $SHELL with a hyphen to start a login shell exec bash -c "''${0} --in-login-shell" fi fi export XDG_CURRENT_DESKTOP="''${XDG_CURRENT_DESKTOP:=niri}" export XDG_SESSION_TYPE="''${XDG_SESSION_TYPE:=wayland}" export XCURSOR_THEME="''${XCURSOR_THEME:=Cosmic}" export _JAVA_AWT_WM_NONREPARENTING=1 export GDK_BACKEND=wayland,x11 export MOZ_ENABLE_WAYLAND=1 export QT_QPA_PLATFORM="wayland;xcb" export QT_AUTO_SCREEN_SCALE_FACTOR=1 export QT_ENABLE_HIGHDPI_SCALING=1 if command -v systemctl >/dev/null; then # set environment variables for new units started by user service manager systemctl --user import-environment XDG_SESSION_TYPE XDG_CURRENT_DESKTOP fi # Run cosmic-session if [[ -z "''${DBUS_SESSION_BUS_ADDRESS}" ]]; then exec dbus-run-session -- ${pkgs.cosmic-session}/bin/cosmic-session niri else exec ${pkgs.cosmic-session}/bin/cosmic-session niri fi ''; in { home.packages = with pkgs; [ cosmic-extra-niri ]; xdg.desktopEntries = { cosmic-settings = { name = "Cosmic Settings"; genericName = "Cosmic Settings App"; exec = "${pkgs.cosmic-settings}/bin/cosmic-settings"; terminal = false; type = "Application"; categories = [ "Application" "Settings" "COSMIC" ]; icon = "com.system76.CosmicSettings"; }; cosmic-settings-power = { name = "Cosmic Power Settings"; genericName = "Cosmic Power Settings App"; exec = "${pkgs.cosmic-settings}/bin/cosmic-settings power"; terminal = false; type = "Application"; categories = [ "Application" "Settings" "COSMIC" ]; icon = "preferences-power-and-battery"; }; cosmic-settings-about = { name = "Cosmic About Settings"; genericName = "Cosmic About Settings App"; exec = "${pkgs.cosmic-settings}/bin/cosmic-settings about"; terminal = false; type = "Application"; categories = [ "Application" "Settings" "COSMIC" ]; icon = "preferences-about"; }; }; programs.niri = { # enable = true; settings = { prefer-no-csd = true; binds = with config.lib.niri.actions; let in { "XF86AudioRaiseVolume".action.spawn = ["pamixer" "--allow-boost" "-i" "5"]; "XF86AudioLowerVolume".action.spawn = ["pamixer" "--allow-boost" "-d" "5"]; "Super+E".action = spawn-sh "${pkgs.nushell}/bin/nu /home/chris/bin/nirilof emacs \"emacslient -c\""; "Super+Return".action.spawn = "alacritty"; "Super+B".action = spawn ["${pkgs.nushell}/bin/nu" "/home/chris/bin/nirilof" "org.qutebrowser.qutebrowser" "qutebrowser"]; "Super+Space".action.spawn = "cosmic-launcher"; "Super+Alt+Space".action.spawn = ["rofi" "-no-lazy-grab" "-modi" "combi" "-show" "combi" "-combi-modi" "'drun,run'"]; # "Super+Space".action.spawn = "rofi -i -show window"; "Super+V".action = spawn ["${pkgs.fish}/bin/fish" "-c" "${pkgs.cliphist}/bin/cliphist list | ${pkgs.rofi-wayland}/bin/rofi -p '󱃔 ' -dmenu | ${pkgs.cliphist}/bin/cliphist decode | ${pkgs.wl-clipboard}/bin/wl-copy"]; "Super+I".action.spawn = ["alacritty" "--class" "btm" "-e" "btm"]; "Super+A".action.spawn = ["alacritty" "--class" "pulsemixer" "-e" "pulsemixer"]; "Super+Shift+Q".action = quit; "Super+O".action = toggle-overview; "Super+F".action = fullscreen-window; "Super+Shift+F".action = toggle-windowed-fullscreen; "Super+C".action = close-window; "Super+Shift+C".action = center-window; "Super+P".action.spawn = "/home/chris/bin/rbw.sh"; "Super+Up".action = focus-window-or-monitor-up; "Super+K".action = focus-window-or-monitor-up; "Super+Down".action = focus-window-or-monitor-down; "Super+J".action = focus-window-or-monitor-down; "Super+Left".action = focus-column-or-monitor-left; "Super+H".action = focus-column-or-monitor-left; "Super+Shift+H".action = move-column-left; "Super+Right".action = focus-column-or-monitor-right; "Super+L".action = focus-column-or-monitor-right; "Super+Shift+L".action = move-column-right; "Super+Ctrl+L".action = set-column-width "+10%"; "Super+Ctrl+H".action = set-column-width "-10%"; "Super+M".action = maximize-column; "Super+W".action = switch-preset-column-width; "Super+Comma".action = consume-or-expel-window-left; "Super+Period".action = consume-or-expel-window-right; "Super+Alt+L".action = focus-monitor-right; "Super+Alt+H".action = focus-monitor-left; }; spawn-at-startup = [ { argv = ["dbus-update-activation-environment --systemd --all"]; } { argv = ["${pkgs.xwayland-satellite}/bin/xwayland-satellite"]; } { argv = ["waybar"]; } { argv = ["cosmic-osd"]; } { argv = ["cosmic-idle"]; } { argv = ["cosmic-settings-daemon"]; } { argv = ["kwalletd6"]; } { argv = ["swww-daemon"]; } { argv = ["systemctl --user start jellyfin-mpv-shim"]; } { argv = ["systemctl --user start nextcloud-client"]; } { argv = ["systemctl --user start syncthingtray"]; } { argv = ["rbw-agent"]; } { argv = ["/usr/lib/kdeconnectd"]; } { argv = ["kdeconnect-indicator"]; } { argv = ["wl-paste --watch cliphist store"]; } { argv = ["swww img /home/chris/pics/wallpapers/tech.jpg --resize crop -t grow --transition-bezier .14,0,.14,.99"]; } ]; workspaces = { "main" = { open-on-output = "eDP-1"; }; }; window-rules = [ { geometry-corner-radius = { top-left = 14.0; top-right = 14.0; bottom-left = 14.0; bottom-right = 14.0; }; clip-to-geometry = true; draw-border-with-background = false; } { matches = [ {app-id = "emacs";} ]; open-on-workspace = "main"; } { matches = [{app-id = "org.qutebrowser.qutebrowser";}]; open-on-workspace = "main"; } { matches = [{app-id = "mpv";}]; open-on-workspace = "main"; open-on-output = "DP-1"; } { matches = [{app-id = "com.system76.CosmicFiles";}]; open-floating = true; } { matches = [{app-id = "btm";}]; open-floating = true; default-column-width.proportion = 0.7; default-window-height.proportion = 0.7; } { matches = [{app-id = "pulsemixer";}]; open-floating = true; } ]; layout = { center-focused-column = "never"; always-center-single-column = true; preset-column-widths = [ { proportion = 1. / 3.; } { proportion = 1. / 2.; } { proportion = 2. / 3.; } { proportion = 1. / 1.; } ]; gaps = 15; struts = { bottom = 5; left = 5; right = 5; top = 5; }; shadow = { enable = true; draw-behind-window = false; inactive-color = "#00000000"; softness = 10; spread = 15; }; border = { enable = false; width = 4; active = { color = "#57c7ff"; }; inactive = { color = "#5af78e"; }; }; focus-ring = { enable = true; width = 4; active = { color = "#5af78e"; }; }; }; screenshot-path = "~/pics/screenshot_%Y-%m-%d_%H-%M-%S.png"; cursor = { hide-after-inactive-ms = 3000; hide-when-typing = true; theme = "phinger-cursors-light"; }; outputs = { "laptop" = { enable = true; name = "eDP-1"; mode = { height = 1504; width = 2256; refresh = 60.0; }; }; "desktop-center" = { enable = true; name = "DP-1"; scale = 1.5; position.x = 1080; position.y = 0; mode = { height = 2160; width = 3640; refresh = 60.0; }; }; "desktop-right" = { enable = true; name = "DP-2"; position.x = 3640; position.y = 0; mode = { height = 900; width = 1600; refresh = 59.94600; }; }; "desktop-left" = { enable = true; name = "HDMI-A-1"; transform.rotation = 90; position.x = 0; position.y = 0; mode = { height = 1080; width = 1920; refresh = 60.0; }; }; }; input = { mod-key = "Super"; touchpad = { accel-profile = "adaptive"; accel-speed = 0.75; click-method = "clickfinger"; drag = true; }; keyboard = { repeat-delay = 180; repeat-rate = 240; }; warp-mouse-to-focus = { enable = true; }; }; environment = { }; }; }; }