From 0482394fe0eb4d3eba91bded8e1d9dbef1bb7c64 Mon Sep 17 00:00:00 2001 From: Sigmanificient Date: Tue, 8 Aug 2023 11:53:51 +0200 Subject: [PATCH] ragnarwm: init at 1.3.1 --- .../services/x11/window-managers/default.nix | 1 + .../services/x11/window-managers/ragnarwm.nix | 33 +++++++++ nixos/tests/all-tests.nix | 1 + nixos/tests/ragnarwm.nix | 32 ++++++++ .../window-managers/ragnarwm/default.nix | 73 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 6 files changed, 142 insertions(+) create mode 100644 nixos/modules/services/x11/window-managers/ragnarwm.nix create mode 100644 nixos/tests/ragnarwm.nix create mode 100644 pkgs/applications/window-managers/ragnarwm/default.nix diff --git a/nixos/modules/services/x11/window-managers/default.nix b/nixos/modules/services/x11/window-managers/default.nix index ce1d4115f225..e180f2693e0c 100644 --- a/nixos/modules/services/x11/window-managers/default.nix +++ b/nixos/modules/services/x11/window-managers/default.nix @@ -35,6 +35,7 @@ in ./openbox.nix ./pekwm.nix ./notion.nix + ./ragnarwm.nix ./ratpoison.nix ./sawfish.nix ./smallwm.nix diff --git a/nixos/modules/services/x11/window-managers/ragnarwm.nix b/nixos/modules/services/x11/window-managers/ragnarwm.nix new file mode 100644 index 000000000000..0843b872dba5 --- /dev/null +++ b/nixos/modules/services/x11/window-managers/ragnarwm.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfg = config.services.xserver.windowManager.ragnarwm; +in +{ + ###### interface + + options = { + services.xserver.windowManager.ragnarwm = { + enable = mkEnableOption (lib.mdDoc "ragnarwm"); + package = mkOption { + type = types.package; + default = pkgs.ragnarwm; + defaultText = literalExpression "pkgs.ragnarwm"; + description = lib.mdDoc '' + The ragnar package to use. + ''; + }; + }; + }; + + ###### implementation + + config = mkIf cfg.enable { + services.xserver.displayManager.sessionPackages = [ cfg.package ]; + environment.systemPackages = [ cfg.package ]; + }; + + meta.maintainers = with lib.maintainers; [ sigmanificient ]; +} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 06d63b4f2d07..0e06e3997c41 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -667,6 +667,7 @@ in { rabbitmq = handleTest ./rabbitmq.nix {}; radarr = handleTest ./radarr.nix {}; radicale = handleTest ./radicale.nix {}; + ragnarwm = handleTest ./ragnarwm.nix {}; rasdaemon = handleTest ./rasdaemon.nix {}; readarr = handleTest ./readarr.nix {}; redis = handleTest ./redis.nix {}; diff --git a/nixos/tests/ragnarwm.nix b/nixos/tests/ragnarwm.nix new file mode 100644 index 000000000000..f7c588b92008 --- /dev/null +++ b/nixos/tests/ragnarwm.nix @@ -0,0 +1,32 @@ +import ./make-test-python.nix ({ lib, ...} : { + name = "ragnarwm"; + + meta = { + maintainers = with lib.maintainers; [ sigmanificient ]; + }; + + nodes.machine = { pkgs, lib, ... }: { + imports = [ ./common/x11.nix ./common/user-account.nix ]; + test-support.displayManager.auto.user = "alice"; + services.xserver.displayManager.defaultSession = lib.mkForce "ragnar"; + services.xserver.windowManager.ragnarwm.enable = true; + + # Setup the default terminal of Ragnar + environment.systemPackages = [ pkgs.alacritty ]; + }; + + testScript = '' + with subtest("ensure x starts"): + machine.wait_for_x() + machine.wait_for_file("/home/alice/.Xauthority") + machine.succeed("xauth merge ~alice/.Xauthority") + + with subtest("ensure we can open a new terminal"): + # Sleeping a bit before the test, as it may help for sending keys + machine.sleep(2) + machine.send_key("meta_l-ret") + machine.wait_for_window(r"alice.*?machine") + machine.sleep(2) + machine.screenshot("terminal") + ''; +}) diff --git a/pkgs/applications/window-managers/ragnarwm/default.nix b/pkgs/applications/window-managers/ragnarwm/default.nix new file mode 100644 index 000000000000..528ae2bf7b80 --- /dev/null +++ b/pkgs/applications/window-managers/ragnarwm/default.nix @@ -0,0 +1,73 @@ +{ lib +, stdenv +, fetchFromGitHub +, writeText +, fontconfig +, libX11 +, libXft +, libXcursor +, libXcomposite +, conf ? null +, nixosTests +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "ragnarwm"; + version = "1.3.1"; + + src = fetchFromGitHub { + owner = "cococry"; + repo = "Ragnar"; + rev = finalAttrs.version; + hash = "sha256-SZWhmFNmS2oLdO9BnPzimoind1452v/EEQzadc5A+bI"; + }; + + prePatch = '' + substituteInPlace Makefile \ + --replace '/usr/bin' "$out/bin" \ + --replace '/usr/share' "$out/share" + ''; + + postPatch = + let + configFile = + if lib.isDerivation conf || builtins.isPath conf + then conf else writeText "config.h" conf; + in + lib.optionalString (conf != null) "cp ${configFile} config.h"; + + buildInputs = [ + fontconfig + libX11 + libXft + libXcursor + libXcomposite + ]; + + makeFlags = [ "CC=${stdenv.cc.targetPrefix}cc" ]; + enableParallelBuilding = true; + + preInstall = '' + mkdir -p $out/bin + mkdir -p $out/share/applications + ''; + + postInstall = '' + install -Dm644 $out/share/applications/ragnar.desktop $out/share/xsessions/ragnar.desktop + ''; + + passthru = { + tests.ragnarwm = nixosTests.ragnarwm; + providedSessions = [ "ragnar" ]; + }; + + meta = with lib; { + description = "Minimal, flexible & user-friendly X tiling window manager"; + homepage = "https://ragnar-website.vercel.app"; + changelog = "https://github.com/cococry/Ragnar/releases/tag/${finalAttrs.version}"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ sigmanificient ]; + mainProgram = "ragnar"; + platforms = platforms.linux; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 2639afba28ae..a0c90ddf29fc 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -33926,6 +33926,8 @@ with pkgs; qemacs = callPackage ../applications/editors/qemacs { }; + ragnarwm = callPackage ../applications/window-managers/ragnarwm {}; + rime-cli = callPackage ../applications/office/rime-cli { }; roxctl = callPackage ../applications/networking/cluster/roxctl {