oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git
2,380 bytes raw
1
{
2
  description = "oxwm - A dynamic window manager.";
3
  inputs = {
4
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
5
  };
6
  outputs = {
7
    self,
8
    nixpkgs,
9
  }: let
10
    systems = ["x86_64-linux" "aarch64-linux"];
11
12
    forAllSystems = fn: nixpkgs.lib.genAttrs systems (system: fn nixpkgs.legacyPackages.${system});
13
  in {
14
    packages = forAllSystems (pkgs: rec {
15
      default = pkgs.callPackage ./default.nix {
16
        # use git rev for non tagged releases
17
        gitRev = self.rev or self.dirtyRev or null;
18
      };
19
      oxwm = default;
20
    });
21
22
    devShells = forAllSystems (pkgs: {
23
      default = pkgs.mkShell {
24
        buildInputs = [
25
          pkgs.rustc
26
          pkgs.cargo
27
          pkgs.alacritty
28
          pkgs.just
29
          pkgs.xorg.xorgserver
30
          pkgs.xorg.libX11
31
          pkgs.xorg.libXft
32
          pkgs.xorg.libXrender
33
          pkgs.freetype
34
          pkgs.fontconfig
35
          pkgs.pkg-config
36
        ];
37
        shellHook = ''
38
          export PS1="(oxwm-dev) $PS1"
39
        '';
40
        RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";
41
      };
42
    });
43
44
    formatter = forAllSystems (pkgs: pkgs.alejandra);
45
46
    nixosModules.default = {
47
      config,
48
      lib,
49
      pkgs,
50
      ...
51
    }: let
52
      inherit (lib) mkEnableOption mkOption mkIf types;
53
      cfg = config.services.xserver.windowManager.oxwm;
54
    in {
55
      options.services.xserver.windowManager.oxwm = {
56
        enable = mkEnableOption "oxwm window manager";
57
        package = mkOption {
58
          type = types.package;
59
          default = self.packages.${pkgs.stdenv.hostPlatform.system}.default;
60
          description = "The oxwm package to use";
61
        };
62
        extraSessionCommands = mkOption {
63
          type = types.lines;
64
          default = "";
65
          description = "Shell commands executed just before oxwm is started";
66
        };
67
      };
68
69
      config = mkIf cfg.enable {
70
        services.xserver.windowManager.session = lib.singleton {
71
          name = "oxwm";
72
          start = ''
73
            ${cfg.extraSessionCommands}
74
            export _JAVA_AWT_WM_NONREPARENTING=1
75
            ${cfg.package}/bin/oxwm &
76
            waitPID=$!
77
          '';
78
        };
79
80
        environment.systemPackages = [
81
          cfg.package
82
        ];
83
84
        environment.pathsToLink = [
85
          "/share/oxwm"
86
          "/share/xsessions"
87
        ];
88
      };
89
    };
90
  };
91
}