From 7bde699fc232ec0c2500a932f9302ede2d28bc59 Mon Sep 17 00:00:00 2001 From: foglar Date: Wed, 4 Jun 2025 07:29:56 +0200 Subject: [PATCH] Sets up Nix flake for reproducible builds Adds Nix flake configuration for the project, enabling reproducible builds and dependency management using gomod2nix. Also removes unused code from main.go. --- .gitignore | 3 ++ cmd/main.go | 8 ---- default.nix | 21 +++++++++++ docs/TECH_STACK.md | 1 + flake.lock | 85 ++++++++++++++++++++++++++++++++++++++++++ flake.nix | 29 ++++++++++++++ go.mod | 4 +- go.sum | 6 +-- gomod2nix.toml | 42 +++++++++++++++++++++ pkg/systray/systray.go | 39 ------------------- shell.nix | 26 ++++++++++--- 11 files changed, 204 insertions(+), 60 deletions(-) create mode 100644 .gitignore create mode 100644 default.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 gomod2nix.toml delete mode 100644 pkg/systray/systray.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae7dd17 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +vendor/ +/gomod2nix-template +result diff --git a/cmd/main.go b/cmd/main.go index 9c97066..ef6f95f 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -6,14 +6,6 @@ import ( ) func main() { - //systray.Systray() - // and here is agrid making a grid of images - //for i := 0; i < 10; i++ { - // for j := 0; j < 10; j++ { - // render_image.RenderImage("kogami-pf-edit.jpg", i*3+2, j*7+23, 64, 64) - // } - //} - //render_image.RenderImage("kogami-pf-edit.jpg", 0, 3, 750, 0) w, h, err := cell_size.GetTerminalCellSizePixels() diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..60d65b4 --- /dev/null +++ b/default.nix @@ -0,0 +1,21 @@ +{ pkgs ? ( + let + inherit (builtins) fetchTree fromJSON readFile; + inherit ((fromJSON (readFile ./flake.lock)).nodes) nixpkgs gomod2nix; + in + import (fetchTree nixpkgs.locked) { + overlays = [ + (import "${fetchTree gomod2nix.locked}/overlay.nix") + ]; + } + ) +, buildGoApplication ? pkgs.buildGoApplication +}: + +buildGoApplication { + pname = "whspbrd"; + version = "0.1"; + pwd = ./.; + src = ./.; + modules = ./gomod2nix.toml; +} diff --git a/docs/TECH_STACK.md b/docs/TECH_STACK.md index b5366ab..71f0cf4 100644 --- a/docs/TECH_STACK.md +++ b/docs/TECH_STACK.md @@ -31,3 +31,4 @@ - načítat a sdílet přehrávanou hudbu (discord spotify integration, but with playerctl or some other music protocol) - v go je možné ukládat do binárky standartní soubory, možná se to třeba bude [hodit](https://www.youtube.com/watch?v=7EK06n485nk&pp=ygUJZ28gZW1iZWQg) +- automaticky detekovat, že zařízení jsou na stejné síti a pak posílat komunikaci p2p \ No newline at end of file diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..0607f23 --- /dev/null +++ b/flake.lock @@ -0,0 +1,85 @@ +{ + "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" + } + }, + "gomod2nix": { + "inputs": { + "flake-utils": [ + "flake-utils" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1745875161, + "narHash": "sha256-0YkWCS13jpoo3+sX/3kcgdxBNt1VZTmvF+FhZb4rFKI=", + "owner": "nix-community", + "repo": "gomod2nix", + "rev": "2cbd7fdd6eeab65c494cc426e18f4e4d2a5e35c0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "gomod2nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1748693115, + "narHash": "sha256-StSrWhklmDuXT93yc3GrTlb0cKSS0agTAxMGjLKAsY8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "910796cabe436259a29a72e8d3f5e180fc6dfacc", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "gomod2nix": "gomod2nix", + "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", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..1d8de62 --- /dev/null +++ b/flake.nix @@ -0,0 +1,29 @@ +{ + description = "A basic gomod2nix flake"; + + inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + inputs.flake-utils.url = "github:numtide/flake-utils"; + inputs.gomod2nix.url = "github:nix-community/gomod2nix"; + inputs.gomod2nix.inputs.nixpkgs.follows = "nixpkgs"; + inputs.gomod2nix.inputs.flake-utils.follows = "flake-utils"; + + outputs = { self, nixpkgs, flake-utils, gomod2nix }: + (flake-utils.lib.eachDefaultSystem + (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + + # The current default sdk for macOS fails to compile go projects, so we use a newer one for now. + # This has no effect on other platforms. + callPackage = pkgs.darwin.apple_sdk_11_0.callPackage or pkgs.callPackage; + in + { + packages.default = callPackage ./. { + inherit (gomod2nix.legacyPackages.${system}) buildGoApplication; + }; + devShells.default = callPackage ./shell.nix { + inherit (gomod2nix.legacyPackages.${system}) mkGoEnv gomod2nix; + }; + }) + ); +} diff --git a/go.mod b/go.mod index 53f187a..62794e0 100644 --- a/go.mod +++ b/go.mod @@ -8,8 +8,6 @@ require ( golang.org/x/sys v0.30.0 ) -require github.com/rivo/uniseg v0.4.7 // indirect - require ( github.com/getlantern/context v0.0.0-20190109183933-c447772a6520 // indirect github.com/getlantern/errors v0.0.0-20190325191628-abdb3e3e36f7 // indirect @@ -18,7 +16,7 @@ require ( github.com/getlantern/hidden v0.0.0-20190325191715-f02dbb02be55 // indirect github.com/getlantern/ops v0.0.0-20190325191751-d70cb0d6f85f // indirect github.com/go-stack/stack v1.8.0 // indirect - github.com/mattn/go-runewidth v0.0.16 // indirect + github.com/mattn/go-runewidth v0.0.9 // indirect github.com/nsf/termbox-go v1.1.1 // indirect github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c // indirect ) diff --git a/go.sum b/go.sum index b70c8e6..a5140ac 100644 --- a/go.sum +++ b/go.sum @@ -20,18 +20,14 @@ github.com/jroimartin/gocui v0.5.0 h1:DCZc97zY9dMnHXJSJLLmx9VqiEnAj0yh0eTNpuEtG/ github.com/jroimartin/gocui v0.5.0/go.mod h1:l7Hz8DoYoL6NoYnlnaX6XCNR62G7J5FfSW5jEogzaxE= github.com/lxn/walk v0.0.0-20210112085537-c389da54e794/go.mod h1:E23UucZGqpuUANJooIbHWCufXvOcT6E7Stq81gU+CSQ= github.com/lxn/win v0.0.0-20210218163916-a377121e959e/go.mod h1:KxxjdtRkfNoYDCUP5ryK7XJJNTnpC8atvtmTheChOtk= +github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= -github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/nsf/termbox-go v1.1.1 h1:nksUPLCb73Q++DwbYUBEglYBRPZyoXJdrj5L+TkjyZY= github.com/nsf/termbox-go v1.1.1/go.mod h1:T0cTdVuOwf7pHQNtfhnEbzHbcNyCEcVU4YPpouCbVxo= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c h1:rp5dCmg/yLR3mgFuSOe4oEnDDmGLROTvMragMUXpTQw= github.com/oxtoacart/bpool v0.0.0-20190530202638-03653db5a59c/go.mod h1:X07ZCGwUbLaax7L0S3Tw4hpejzu63ZrrQiUe6W0hcy0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= -github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= diff --git a/gomod2nix.toml b/gomod2nix.toml new file mode 100644 index 0000000..06a2537 --- /dev/null +++ b/gomod2nix.toml @@ -0,0 +1,42 @@ +schema = 3 + +[mod] + [mod."github.com/getlantern/context"] + version = "v0.0.0-20190109183933-c447772a6520" + hash = "sha256-T4v8t2Hg7lT5d69hD7189WN+dPeMxWXY3vfyiW+oQSM=" + [mod."github.com/getlantern/errors"] + version = "v0.0.0-20190325191628-abdb3e3e36f7" + hash = "sha256-AvZvWYUJtOMo7Lk7sZ0BzIougsGltlZ3fAZ6yNjkZs8=" + [mod."github.com/getlantern/golog"] + version = "v0.0.0-20190830074920-4ef2e798c2d7" + hash = "sha256-X3o4fSfl+Hb2ZIViUpIg9jpfWjMObrJ53m5E4WFwiLg=" + [mod."github.com/getlantern/hex"] + version = "v0.0.0-20190417191902-c6586a6fe0b7" + hash = "sha256-WGOCIMQrXovgp1TGheQv9GOZa/4T5xI2h2gh5Eeqayc=" + [mod."github.com/getlantern/hidden"] + version = "v0.0.0-20190325191715-f02dbb02be55" + hash = "sha256-zTYo91NllpZhrWKerxtOdqNkLm7hxpd91POHSAajKT4=" + [mod."github.com/getlantern/ops"] + version = "v0.0.0-20190325191751-d70cb0d6f85f" + hash = "sha256-2+oDnDZ1YjJc68ERVV902VAbjmGbFi6rvWtWisFjrlQ=" + [mod."github.com/getlantern/systray"] + version = "v1.2.2" + hash = "sha256-GEflgBfashORmopz8kxD7R3GRMKyF7bGE2DXr0w5nX0=" + [mod."github.com/go-stack/stack"] + version = "v1.8.0" + hash = "sha256-26RlTEcAkbewMUtmirKrDGQ1WJlNousp69v7HMopYnI=" + [mod."github.com/jroimartin/gocui"] + version = "v0.5.0" + hash = "sha256-yNVYFx11d9ITkJKPNoFoGM1gIXnuJBjA4VZJXPh/zZM=" + [mod."github.com/mattn/go-runewidth"] + version = "v0.0.9" + hash = "sha256-dK/kIPe1tcxEubwI4CWfov/HWRBgD/fqlPC3d5i30CY=" + [mod."github.com/nsf/termbox-go"] + version = "v1.1.1" + hash = "sha256-Fxk9s3vKmXO3uWmpneN1iZQ+nCbUEZLWShDyeJcwhvM=" + [mod."github.com/oxtoacart/bpool"] + version = "v0.0.0-20190530202638-03653db5a59c" + hash = "sha256-Jaw3QTrj05MwADtv7lSjwMACp8s2Z/ratmxPw0t9LbM=" + [mod."golang.org/x/sys"] + version = "v0.30.0" + hash = "sha256-BuhWtwDkciVioc03rxty6G2vcZVnPX85lI7tgQOFVP8=" diff --git a/pkg/systray/systray.go b/pkg/systray/systray.go deleted file mode 100644 index 315ac54..0000000 --- a/pkg/systray/systray.go +++ /dev/null @@ -1,39 +0,0 @@ -package systray - -import ( - "os" - "os/exec" - "whspbrd/pkg/icons" - - "github.com/getlantern/systray" -) - -func Systray() { - systray.Run(onReady, onExit) -} - -func onReady() { - systray.SetIcon(icon.Data) - systray.SetTitle("whspbrd") - systray.SetTooltip("chat with your friends") - - mOpen := systray.AddMenuItem("Open", "Open the app") - go func() { - <-mOpen.ClickedCh - // Open the app (e.g., open a terminal or a GUI window) - // This is a placeholder; replace with actual code to open your app - // For example, you could use exec.Command to run a terminal command - // exec.Command("gnome-terminal", "--", "your_app_command").Run() - exec.Command("kitty").Run() - }() - - mQuitOrig := systray.AddMenuItem("Quit", "Quit the whole app") - go func() { - <-mQuitOrig.ClickedCh - systray.Quit() - }() -} - -func onExit() { - os.Exit(0) -} diff --git a/shell.nix b/shell.nix index ba0cebc..77bde2e 100644 --- a/shell.nix +++ b/shell.nix @@ -1,18 +1,34 @@ -let - pkgs = import {}; +{ + pkgs ? ( + let + inherit (builtins) fetchTree fromJSON readFile; + inherit ((fromJSON (readFile ./flake.lock)).nodes) nixpkgs gomod2nix; + in + import (fetchTree nixpkgs.locked) { + overlays = [ + (import "${fetchTree gomod2nix.locked}/overlay.nix") + ]; + } + ), + mkGoEnv ? pkgs.mkGoEnv, + gomod2nix ? pkgs.gomod2nix, +}: let + goEnv = mkGoEnv {pwd = ./.;}; in pkgs.mkShell { + packages = [ + goEnv + gomod2nix + ]; buildInputs = with pkgs; [ dbus webkitgtk openssl libayatana-appindicator - #imagemagickBig ]; nativeBuildInputs = with pkgs; [ pkg-config ]; dbus = pkgs.dbus; - - #PKG_CONFIG_PATH = "${pkgs.imagemagickBig.dev}/lib/pkgconfig"; + PKG_CONFIG_PATH = "${pkgs.pkg-config}/lib/pkgconfig:${pkgs.openssl}/lib/pkgconfig:${pkgs.libayatana-appindicator}/lib/pkgconfig"; }