diff --git a/flake.nix b/flake.nix index 84a8020..13aa510 100644 --- a/flake.nix +++ b/flake.nix @@ -56,7 +56,7 @@ ]; }; in { - inherit (pkgs) wayqt dfl-ipc dfl-applications dfl-utils qtgreet; + inherit (pkgs) wayqt dfl-ipc dfl-applications dfl-utils qtgreet xwaylandvideobridge obs-websocket obs-cli; }; }); } diff --git a/hosts/miku.nix b/hosts/miku.nix index f7a46a7..9c731c9 100644 --- a/hosts/miku.nix +++ b/hosts/miku.nix @@ -58,7 +58,7 @@ programs = { #bluray.enable = true; mpv = { - primaryScreen = "DP-2"; + primaryScreen = "DP-1"; enable = true; }; sway.enable = false; @@ -116,14 +116,14 @@ }; virtualisation = { - #podman = { - # enable = true; - # dockerCompat = true; - #}; - docker = { + podman = { enable = true; - storageDriver = "btrfs"; + dockerCompat = true; }; + # docker = { + # enable = true; + # storageDriver = "btrfs"; + # }; }; boot = let @@ -192,6 +192,13 @@ udev.extraRules = '' ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", ATTR{power/wakeup}="disabled", ATTR{driver/1-7/power/wakeup}="disabled" ''; + + hardware = { + openrgb = { + enable = true; + motherboard = "amd"; + }; + }; }; hardware = { diff --git a/modules/desktop/plasma.nix b/modules/desktop/plasma.nix index bd92859..e499e07 100644 --- a/modules/desktop/plasma.nix +++ b/modules/desktop/plasma.nix @@ -101,42 +101,17 @@ in { # See https://github.com/NixOS/nixpkgs/commit/a506f9c79700255c215dddb53455d5e2bed6c1af displayManager = { + sddm = { + enable = true; + }; defaultSession = lib.mkIf cfg.wayland.enable "plasmawayland"; #sessionPackages = lib.mkIf cfg.mobile.enable [ pkgs.libsForQt5.plasma5.plasma-mobile ]; }; }; - users.users.greeter = { - home = "/var/lib/greeter"; - createHome = true; - isSystemUser = true; - }; - - services.greetd = { - enable = true; - settings = let - swayGreeterConfig = pkgs.writeText "sway-config" '' -exec "${pkgs.qtgreet}/bin/qtgreet -d ${config.users.users.greeter.home}/data; ${pkgs.sway}/bin/swaymsg exit" - -bindsym Mod4+shift+e exec ${pkgs.sway}/bin/swaynag \ --t warning \ --m 'What do you want to do?' \ --b 'Poweroff' 'systemctl poweroff' \ --b 'Reboot' 'systemctl reboot' - -input * { - xkb_layout de -} - ''; - in { - default_session = { - command = "${pkgs.sway}/bin/sway --config ${swayGreeterConfig}"; - }; - }; - }; xdg.portal = { enable = true; - extraPortals = [ pkgs.xdg-desktop-portal-kde ]; + extraPortals = with pkgs; [ xdg-desktop-portal-kde xdg-desktop-portal-gtk ]; }; environment = { diff --git a/modules/programs/gaming/default.nix b/modules/programs/gaming/default.nix index 19aa2c2..969fdc5 100644 --- a/modules/programs/gaming/default.nix +++ b/modules/programs/gaming/default.nix @@ -13,6 +13,8 @@ in { lutris-free-wrapped + # prismlauncher-wrapped + (pkgs.callPackage ./wrapper.nix { inherit (pkgs) retroarch; cores = with pkgs.libretro; [ @@ -22,6 +24,13 @@ in { #steam-wrapped # Custom package + (pkgs.wrapOBS { + plugins = with pkgs.obs-studio-plugins; [ + obs-vaapi obs-vkcapture obs-pipewire-audio-capture + ]; + }) + obs-cli + gamescope corectrl diff --git a/modules/services/logiops/default.nix b/modules/services/logiops/default.nix index e6c878a..d85127d 100644 --- a/modules/services/logiops/default.nix +++ b/modules/services/logiops/default.nix @@ -16,26 +16,32 @@ in { }; config = lib.mkIf true { - environment.etc."logid.cfg".text = '' + systemd.services.logiops = { + description = "An unofficial userspace driver for HID++ Logitech devices"; + wantedBy = [ "default.target" ]; + serviceConfig = let + logiopsConfig = pkgs.writeText "logiops.cfg" '' devices: ( { name: "Wireless Mouse MX Master 3"; hiresscroll: { hires: true; + target: false; + }; + smartshift: { + on: true; + threshold: 30; + default_threshold: 30; }; dpi: 800; } -); - ''; - - systemd.services.logiops = { - description = "An unofficial userspace driver for HID++ Logitech devices"; - wantedBy = [ "default.target" ]; - serviceConfig = { +); + ''; + in { Type = "simple"; ExecStart = let renice = lib.optionalString cfg.renice "${pkgs.coreutils-full}/bin/nice -n ${builtins.toString cfg.reniceValue}"; - in "${renice} ${pkgs.logiops}/bin/logid"; + in "${renice} ${pkgs.logiops}/bin/logid -c ${logiopsConfig}"; }; }; }; diff --git a/overlays/sandbox.nix b/overlays/sandbox.nix index 726f0ca..12726a0 100644 --- a/overlays/sandbox.nix +++ b/overlays/sandbox.nix @@ -26,14 +26,17 @@ in { enableDesktopFile = true; }; - /*minecraft-wrapped = wrapInSandbox { - name = "minecraft-launcher"; - package = prev.minecraft; - binaryName = "minecraft-launcher"; - mountInHome = [ ".local/share/minecraft" ".minecraft" ]; - additionalBlacklist = [ "/mnt" ]; - chdirTo = "/home/$USER"; - };*/ + # prismlauncher-wrapped = wrapInSandbox { + # name = "prismlauncher"; + # binary = "${prev.prismlauncher}/bin/prismlauncher"; + # launchScriptName = "prismlauncher-wrapped"; + # mountInHome = [".local/share/PrismLauncher"]; + # additionalMounts = [ + # "/etc/profile" + # ]; + # additionalBlacklist = [ "/mnt" ]; + # chdirTo = "/home/$USER"; + # }; steam-wrapped = wrapInSandbox { name = "steam-wrapped"; diff --git a/overlays/simple.nix b/overlays/simple.nix index ba35329..b036de6 100644 --- a/overlays/simple.nix +++ b/overlays/simple.nix @@ -1,7 +1,14 @@ -final: prev: - -{ +final: prev: { gajim = prev.gajim.overrideAttrs (old: { + # version = "1.7"; + + # format = "pyproject"; + + # src = builtins.fetchurl { + # url = "https://gajim.org/downloads/1.7/gajim-1.7.1.tar.gz"; + # sha256 = "sha256:1ij3fnfpyjnb84haqwjy23bjpi6bk37k1h8bbvk9y6296lsnm8mr"; + # }; + # Enable notification sounds propagatedBuildInputs = old.propagatedBuildInputs ++ [ prev.gsound ]; }); diff --git a/packages/applications/desktop/xwaylandvideobridge/default.nix b/packages/applications/desktop/xwaylandvideobridge/default.nix new file mode 100644 index 0000000..41d5c28 --- /dev/null +++ b/packages/applications/desktop/xwaylandvideobridge/default.nix @@ -0,0 +1,24 @@ +{ + stdenv +, lib, fetchFromGitLab +, cmake, extra-cmake-modules, pkg-config +, qtbase, qtx11extras, wrapQtAppsHook +, kpipewire, plasma-framework +, xorg +}: + +stdenv.mkDerivation rec { + pname = "xwaylandvideobridge"; + version = "5.27.3"; + + src = fetchFromGitLab { + owner = "davidedmundson"; + repo = "xwaylandvideobridge"; + rev = "b876b5f3ee5cc810c99b08e8f0ebb29553e45e47"; + domain = "invent.kde.org"; + sha256 = "sha256-gfQkOIZegxdFQ9IV2Qp/lLRtfI5/g6bDD3XRBdLh4q0="; + }; + + buildInputs = [ qtbase qtx11extras plasma-framework xorg.xcbproto kpipewire cmake pkg-config ]; + nativeBuildInputs = [ wrapQtAppsHook extra-cmake-modules ]; +} diff --git a/packages/default.nix b/packages/default.nix index 83b4634..8bce95f 100644 --- a/packages/default.nix +++ b/packages/default.nix @@ -44,6 +44,16 @@ let dfl-applications = prev.libsForQt5.callPackage development/cpp/dfl-app { inherit dfl-ipc; }; + + kpipewire = prev.libsForQt5.kpipewire.overrideAttrs (old: { + src = prev.fetchFromGitLab { + owner = "plasma"; + repo = "kpipewire"; + rev = "ed99b94be40bd8c5b7b2a2f17d0622f11b2ab7fb"; + domain = "invent.kde.org"; + sha256 = "sha256-KhmhlH7gaFGrvPaB3voQ57CKutnw5DlLOz7gy/3Mzms="; + }; + }); in { inherit discord-system-electron dfl-ipc dfl-applications dfl-utils wayqt; @@ -101,4 +111,12 @@ in { qtgreet = prev.libsForQt5.callPackage applications/desktop/qtgreet { inherit dfl-applications dfl-utils dfl-ipc wayqt; }; + + kpipewire = prev.libsForQt5.callPackage development/cpp/libkpipewire {}; + xwaylandvideobridge = prev.libsForQt5.callPackage applications/desktop/xwaylandvideobridge { + inherit kpipewire; + }; + + #obs-websocket = prev.libsForQt5.callPackage obs/obs-websocket {}; + obs-cli = prev.callPackage obs/obs-cli {}; } diff --git a/packages/development/cpp/libkpipewire/default.nix b/packages/development/cpp/libkpipewire/default.nix new file mode 100644 index 0000000..379aa12 --- /dev/null +++ b/packages/development/cpp/libkpipewire/default.nix @@ -0,0 +1,21 @@ +{ + stdenv +, lib, fetchFromGitLab +, cmake, pkg-config +, qtbase, wrapQtAppsHook +, kwayland, ki18n, kcoreaddons +, pipewire, libepoxy, ffmpeg +}: + +stdenv.mkDerivation rec { + pname = "xwaylandvideobridge"; + version = "5.27.3"; + + src = builtins.fetchurl { + url = "https://download.kde.org/stable/plasma/${version}/${pname}-${version}.tar.xz"; + sha256 = "sha256:0b95jjkfpkvc2ld3x6p7nw6kn6fkqba9q7x95ywvgag2b00jdb56"; + }; + + buildInputs = [ qtbase kwayland ki18n kcoreaddons pipewire libepoxy ffmpeg cmake pkg-config ]; + nativeBuildInputs = [ wrapQtAppsHook ]; +} diff --git a/packages/obs/obs-cli/default.nix b/packages/obs/obs-cli/default.nix new file mode 100644 index 0000000..57c2ad6 --- /dev/null +++ b/packages/obs/obs-cli/default.nix @@ -0,0 +1,27 @@ +{ lib +, buildGoModule +, fetchFromGitHub +}: + +buildGoModule rec { + pname = "obs-cli"; + version = "0.5.0"; + + src = fetchFromGitHub { + owner = "muesli"; + repo = "obs-cli"; + rev = "v${version}"; + hash = "sha256-4tjS+PWyP/T0zs4IGE6VQ5c+3tuqxlBwfpPBVEcim6c="; + }; + + vendorHash = "sha256-RGpkqX97zalZv4aDfihJBKO1l2O8tcxn0I1SPL1WIg8="; + + ldflags = [ "-s" "-w" ]; + + meta = with lib; { + description = "OBS-cli is a command-line remote control for OBS"; + homepage = "https://github.com/muesli/obs-cli"; + license = licenses.mit; + maintainers = with maintainers; [ ]; + }; +} diff --git a/packages/obs/obs-websocket/default.nix b/packages/obs/obs-websocket/default.nix new file mode 100644 index 0000000..550fe08 --- /dev/null +++ b/packages/obs/obs-websocket/default.nix @@ -0,0 +1,39 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake, ninja, pkg-config +, qtbase, wrapQtAppsHook +, nlohmann_json, asio, websocketpp +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-websocket"; + version = "4.9.1-compat"; + + src = fetchFromGitHub { + owner = "obsproject"; + repo = pname; + rev = "${version}"; + sha256 = "14xhk6d7j2q5swfj0b7jdgmswjdkqjnj3q11qs5vbh93hk30jyvh"; + }; + + nativeBuildInputs = [ cmake ninja pkg-config wrapQtAppsHook ]; + buildInputs = [ obs-studio qtbase nlohmann_json asio websocketpp ]; + + cmakeFlags = [ + "-DLIBOBS_INCLUDE_DIR=${obs-studio.src}/libobs" + "-Wno-dev" + ]; + + preConfigure = '' + cp ${obs-studio.src}/cmake/external/ObsPluginHelpers.cmake cmake/FindLibObs.cmake + ''; + + meta = with lib; { + description = "Remote-control of OBS Studio through WebSocket"; + homepage = "https://github.com/obsproject/obs-websocket"; + license = licenses.gpl2; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +}