From 1e316ebbb5ca188ba6186adfef18982b5689eeb6 Mon Sep 17 00:00:00 2001 From: emanueljg Date: Sat, 24 May 2025 23:25:23 +0200 Subject: [PATCH] add nix --- .gitignore | 8 +++++++- README.md | 6 ++++-- flake.lock | 27 ++++++++++++++++++++++++++ flake.nix | 37 ++++++++++++++++++++++++++++++++++++ nix/module-hm.nix | 28 +++++++++++++++++++++++++++ nix/package.nix | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 151 insertions(+), 3 deletions(-) create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 nix/module-hm.nix create mode 100644 nix/package.nix diff --git a/.gitignore b/.gitignore index ca87ce3..ca0d9ba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,10 @@ discordo* # Visual Studio Code -.vscode/ \ No newline at end of file +.vscode/ + +# Nix stuff +result + +# direnv (devs should have this file locally) +.envrc diff --git a/README.md b/README.md index d4ddc46..33fa228 100644 --- a/README.md +++ b/README.md @@ -23,8 +23,10 @@ You can download and install a [prebuilt binary here](https://nightly.link/ayn2o - Arch Linux: `yay -S discordo-git` - FreeBSD: `pkg install discordo` or via the ports system `make -C /usr/ports/net-im/discordo install clean`. -- NixOS: `nix-shell -p discordo` - +- Nix (NixOS, home-manager) + - Downstream nixpkgs installation: Add `pkgs.discordo` to `environment.systemPackages` or `home.packages`. + + - Upstream flake installation: Add `inputs.discordo.url = "github:ayn2op/discordo"`. Install using `inputs.discordo.homeModules.default` (`.enable, .package, .settings TOML`). - Windows (Scoop): ```sh diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..361099a --- /dev/null +++ b/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1748026106, + "narHash": "sha256-6m1Y3/4pVw1RWTsrkAK2VMYSzG4MMIj7sqUy7o8th1o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "063f43f2dbdef86376cc29ad646c45c46e93234c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..87ebf4b --- /dev/null +++ b/flake.nix @@ -0,0 +1,37 @@ +{ + description = "A lightweight, secure, and feature-rich Discord terminal client."; + + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + outputs = { self, nixpkgs, ... }: + let + systems = [ + "x86_64-linux" + "aarch64-linux" + "x86_64-darwin" + "aarch64-darwin" + ]; + forAllSystems = f: + nixpkgs.lib.genAttrs systems + (system: f { + inherit system; + pkgs = nixpkgs.legacyPackages.${system}; + packages' = self.packages.${system}; + }); + in + { + packages = forAllSystems ({ pkgs, packages', ... }: { + default = packages'.discordo; + discordo = pkgs.callPackage ./nix/package.nix { }; + }); + homeModules = { + default = self.homeModules.discordo; + discordo = import ./nix/module-hm.nix self; + }; + devShells.default = forAllSystems ({ pkgs, packages', ... }: pkgs.mkShell { + inputsFrom = [ packages'.discordo ]; + }); + }; +} + + diff --git a/nix/module-hm.nix b/nix/module-hm.nix new file mode 100644 index 0000000..2c7740c --- /dev/null +++ b/nix/module-hm.nix @@ -0,0 +1,28 @@ +self: { options, config, lib, pkgs, ... }: +let + cfg = config.programs.discordo; + settingsFormat = pkgs.formats.toml { }; +in +{ + options.programs.discordo = { + enable = lib.mkEnableOption "discordo"; + package = lib.mkPackageOption self.packages.${pkgs.system} "discordo" { }; + settings = lib.mkOption { + type = settingsFormat.type; + description = '' + Configuration for discordo. + See https://github.com/ayn2op/discordo?tab=readme-ov-file#configuration + for available options and default values. + ''; + default = { }; + }; + }; + config = lib.mkIf cfg.enable { + home.packages = [ cfg.package ]; + xdg.configFile."discordo/config.toml".source = settingsFormat.generate + "discordo-config.toml" + cfg.settings; + }; +} + + diff --git a/nix/package.nix b/nix/package.nix new file mode 100644 index 0000000..d96b6b9 --- /dev/null +++ b/nix/package.nix @@ -0,0 +1,48 @@ +{ buildGoModule +, lib +, makeWrapper +, xsel +, wl-clipboard + +, xorgClipboardSupport ? true +, waylandClipboardSupport ? true +}: +let + anyClipboardSupport = xorgClipboardSupport || waylandClipboardSupport; +in +buildGoModule { + pname = "discordo"; + version = "git"; + + src = let fs = lib.fileset; in fs.toSource { + root = ../.; + fileset = fs.unions [ + ../go.mod + ../go.sum + ../main.go + ../cmd + ../internal + ]; + }; + + vendorHash = "sha256-gEwTpt/NPN1+YpTBmW8F34UotowrOcA0mfFgBdVFiTA="; + + nativeBuildInputs = lib.optional anyClipboardSupport makeWrapper; + + postInstall = lib.optionalString xorgClipboardSupport '' + wrapProgram $out/bin/discordo \ + --prefix PATH : ${lib.makeBinPath [ xsel ]} + '' + lib.optionalString waylandClipboardSupport '' + wrapProgram $out/bin/discordo \ + --prefix PATH : ${lib.makeBinPath [ wl-clipboard ]} + ''; + + meta = { + description = "A lightweight, secure, and feature-rich Discord terminal client"; + homepage = "https://github.com/ayn2op/discordo"; + license = lib.licenses.gpl3; + maintainers = [ lib.maintainers.arian-d ]; + mainProgram = "discordo"; + }; +} +