Diff
diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000..a57726b
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, pkg-config
+, xorg
+, freetype
+, fontconfig
+}:
+
+rustPlatform.buildRustPackage {
+ pname = "oxwm";
+ version = "0.1.0";
+
+ src = ./.;
+
+ cargoLock = {
+ lockFile = ./Cargo.lock;
+ };
+
+ nativeBuildInputs = [
+ pkg-config
+ ];
+
+ buildInputs = [
+ xorg.libX11
+ xorg.libXft
+ xorg.libXrender
+ freetype
+ fontconfig
+ ];
+
+ meta = with lib; {
+ description = "A dynamic window manager written in Rust, inspired by dwm";
+ homepage = "https://github.com/tonybanters/oxwm";
+ license = licenses.gpl3;
+ maintainers = [ ];
+ platforms = platforms.linux;
+ mainProgram = "oxwm";
+ };
+}
diff --git a/flake.lock b/flake.lock
index b426581..31fe637 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,25 +1,59 @@
{
"nodes": {
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
"nixpkgs": {
"locked": {
- "lastModified": 1758070117,
- "narHash": "sha256-uLwwHFCZnT1c3N3biVe/0hCkag2GSrf9+M56+Okf+WY=",
+ "lastModified": 1759831965,
+ "narHash": "sha256-vgPm2xjOmKdZ0xKA6yLXPJpjOtQPHfaZDRtH+47XEBo=",
"owner": "NixOS",
"repo": "nixpkgs",
- "rev": "e9b7f2ff62b35f711568b1f0866243c7c302028d",
+ "rev": "c9b6fb798541223bbb396d287d16f43520250518",
"type": "github"
},
"original": {
"owner": "NixOS",
- "ref": "nixos-25.05",
+ "ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
+ "flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
}
},
"root": "root",
diff --git a/flake.nix b/flake.nix
index 74b5084..26333dc 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,36 +1,73 @@
{
- description = "oxwm devshell";
-
- inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
-
- outputs = {
- self,
- nixpkgs,
- }: let
- system = "x86_64-linux";
- pkgs = import nixpkgs {inherit system;};
- in {
- devShells.${system}.default = pkgs.mkShell {
- buildInputs = [
- pkgs.rustc
- pkgs.cargo
- pkgs.alacritty
- pkgs.just
- pkgs.xorg.libX11
- pkgs.xorg.libXft
- pkgs.xorg.libXrender
- pkgs.freetype
- pkgs.fontconfig
- pkgs.pkg-config
- ];
-
- shellHook = ''
- export PS1="(oxwm-dev) $PS1"
- '';
-
- RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";
- };
+ description = "oxwm - A dynamic window manager written in Rust";
- formatter.${system} = pkgs.alejandra;
+ inputs = {
+ nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+ flake-utils.url = "github:numtide/flake-utils";
};
+
+ outputs = { self, nixpkgs, flake-utils }:
+ flake-utils.lib.eachDefaultSystem (system:
+ let
+ pkgs = import nixpkgs { inherit system; };
+ in
+ {
+ packages = {
+ default = pkgs.callPackage ./default.nix { };
+ oxwm = self.packages.${system}.default;
+ };
+
+ devShells.default = pkgs.mkShell {
+ buildInputs = [
+ pkgs.rustc
+ pkgs.cargo
+ pkgs.alacritty
+ pkgs.just
+ pkgs.xorg.libX11
+ pkgs.xorg.libXft
+ pkgs.xorg.libXrender
+ pkgs.freetype
+ pkgs.fontconfig
+ pkgs.pkg-config
+ ];
+
+ shellHook = ''
+ export PS1="(oxwm-dev) $PS1"
+ '';
+
+ RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";
+ };
+
+ formatter = pkgs.alejandra;
+ }
+ ) // {
+ # NixOS module
+ nixosModules.default = { config, lib, pkgs, ... }:
+ with lib;
+ let
+ cfg = config.services.xserver.windowManager.oxwm;
+ in
+ {
+ options.services.xserver.windowManager.oxwm = {
+ enable = mkEnableOption "oxwm window manager";
+ package = mkOption {
+ type = types.package;
+ default = self.packages.${pkgs.system}.default;
+ description = "The oxwm package to use";
+ };
+ };
+
+ config = mkIf cfg.enable {
+ services.xserver.windowManager.session = [{
+ name = "oxwm";
+ start = ''
+ ${cfg.package}/bin/oxwm &
+ waitPID=$!
+ '';
+ }];
+
+ environment.systemPackages = [ cfg.package ];
+ };
+ };
+ };
}