nixos下golang+goland开发环境

nixos

nixos 下开发环境可以独立配置,golang的环境相对来说比较简单。 在现有的go项目目录下,或者打算储存go项目的目录里面创建一个flake.nix 文件内容如下。

rust和flutter nodejs等开发环境 本站也有,请自行检索

本文已经更新 详情看文末

#nix develop 环境 (推荐)

nix
{
  description = "golang ";
  inputs = {
    #nixpkgs.url = "github:NixOS/nixpkgs/23.11";
    nixpkgs.url = "https://mirrors.ustc.edu.cn/nix-channels/nixpkgs-unstable/nixexprs.tar.xz";
    flake-utils.url = "github:numtide/flake-utils";
  };
  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachDefaultSystem (system:
      {
        devShell =
          with pkgs; mkShell rec {
            GOPROXY = "https://goproxy.cn,direct";
            buildInputs = [
              go_1_22
              gopls
              gcc
              upx
              jetbrains.goland
              fish
              #ninja cmake glibc # 如果需要用最好自行装到 home.packages 装这里可能有问题
            ];
          };
      });
}

#homemanager 环境(不建议)

plaintext
{ config, lib, pkgs, ... }:
{
  home.packages = with pkgs;[ 
    go_1_22
    gopls
    gcc
    upx
  ];
}

#nix run方式(2024-11-4更新)

sh
 nix run .#dev --show-trace
nix
{
{
  description = "A Nix-flake-based golang development environment";

  inputs = {
    #nixpkgs.url = "github:NixOS/nixpkgs/23.11";
    #nixpkgs.url = "https://mirrors.ustc.edu.cn/nix-channels/nixpkgs-unstable/nixexprs.tar.xz";
    nixpkgs.url = "https://mirrors.ustc.edu.cn/nix-channels/nixos-24.05/nixexprs.tar.xz";
  };

  outputs = { self , nixpkgs ,... }: let
    # system should match the system you are running on
    system = "x86_64-linux";
    # system = "x86_64-darwin";
  in {
    packages."${system}".dev = let
      pkgs = import nixpkgs {
        inherit system;
        config.allowUnfree = true;
      };
      packages = with pkgs; [
          go_1_23
          gopls
          gcc
          upx
          jetbrains.goland # allowUnfree
          nushell
      ];
    in pkgs.runCommand "dev-shell" {
      # Dependencies that should exist in the runtime environment
      buildInputs = packages;
      # Dependencies that should only exist in the build environment
      nativeBuildInputs = [ pkgs.makeWrapper ];
    } ''
      mkdir -p $out/bin/
      ln -s ${pkgs.nushell}/bin/nu $out/bin/dev-shell
      wrapProgram $out/bin/dev-shell --set GOPROXY https://goproxy.cn,direct
      wrapProgram $out/bin/dev-shell --prefix PATH : ${pkgs.lib.makeBinPath packages}
    '';
  };
}

评论