aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/develop.nix
blob: 2daead8229349a264e2b0b314c2d6713b3edbbd6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
{
  config,
  lib,
  pkgs,
  ...
}: let
  inherit (lib) mkOption mkIf types;
in {
  options = {
    cynerd.develop = mkOption {
      type = types.bool;
      default = false;
      description = "If machine is about to be used for development.";
    };
  };

  config = mkIf config.cynerd.develop {
    cynerd.compile = true;
    environment.enableDebugInfo = true;
    environment.systemPackages = with pkgs; [
      # Tools
      gitlint
      tig
      gource
      hub
      github-cli # Git
      wlc # Weblate
      cloc
      openssl
      tio
      vim-vint
      nodePackages.vim-language-server
      vale

      # Required for neovim plugins
      editorconfig-checker
      go
      gcc

      # Nix
      dev
      cachix
      nurl
      nix-universal-prefetch
      nil
      alejandra
      statix
      deadnix
      agenix

      # Shell
      dash # Posix shell
      bats
      shellcheck
      shfmt
      nodePackages.bash-language-server
      jq
      yq
      fq

      # C
      clang-tools

      # Python
      (python3.withPackages (pypkgs:
        with pypkgs; [
          ipython

          pytest
          pytest-html
          pytest-tap
          coverage
          mypy

          pygraphviz
          matplotlib

          python-gitlab
          PyGithub

          schema
          jinja2
          ruamel-yaml
          msgpack
          urllib3

          influxdb-client
          psycopg
          paho-mqtt

          humanize
          rich

          pygobject3

          pyserial
          pylibftdi
          pylxd
          selenium
        ]))
      ruff
      geckodriver
      chromedriver
      # Libraries to be used by python packages
      gobject-introspection
      gtk3
      gtk4

      # Lua
      selene
      stylua

      # Julia
      julia

      # Qemmu
      qemu
      virt-manager
      cdrtools

      # U-Boot
      ubootTools
      tftp-hpa

      # Network
      iperf3
      inetutils

      # Gtk
      cambalache

      # Barcode generation
      barcode

      # D-Bus
      d-spy

      # Documentation
      man-pages
      man-pages-posix
      linux-manual
      stdmanpages

      # SHV
      shvspy
      shvcli

      # Images
      imagemagick
    ];
    programs.wireshark.package = pkgs.wireshark;

    documentation = {
      dev.enable = true;
      doc.enable = true;
    };

    services.udev.extraRules = ''
      SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", MODE:="0660", GROUP="develop", SYMLINK+="stlinkv2_%n"
      SUBSYSTEMS=="usb", ATTRS{idVendor}=="a600", ATTRS{idProduct}=="a003", MODE:="0660", GROUP="develop", SYMLINK+="aix_forte_%n"
      SUBSYSTEMS=="usb", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="0105", MODE:="0660", GROUP="develop", SYMLINK+="jlink_%n"
      SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2111", MODE:="0660", GROUP="develop", SYMLINK+="cmsip_dap_%n"
    '';

    virtualisation = {
      containers.enable = true;
      docker = {
        enable = true;
        autoPrune.enable = true;
        storageDriver = "btrfs";
      };
      lxd = {
        enable = true;
        recommendedSysctlSettings = true;
      };
      lxc.enable = true;
      libvirtd.enable = true;
      spiceUSBRedirection.enable = true;
    };

    users.groups.develop = {};
    users.users.cynerd.extraGroups = [
      "docker"
      "lxd"
      "develop"
      "libvirtd"
    ];

    # Allow using latest git version from registry
    nixpkgs.flake = {
      setNixPath = false;
      setFlakeRegistry = false;
    };
  };
}