aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/develop.nix
blob: c7ab1d2f30e1dbf2eee8302ed61eab12e6cc7ed5 (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
{
  config,
  lib,
  pkgs,
  ...
}:
with lib; let
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
      tig
      gource
      hub
      github-cli # Git
      wlc # Weblate
      cloc
      openssl
      sterm
      parted

      # Nix
      dev
      nix-prefetch-git
      nix-prefetch-github
      nix-prefetch-scripts
      nix-universal-prefetch
      rnix-lsp
      cachix

      # Shell
      dash # Posix shell
      bats
      shellcheck
      shfmt
      jq
      yq

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

          pytest
          pytest-html
          pytest-tap
          coverage
          python-lsp-black
          pylint
          pydocstyle

          mypy

          pygobject3
          pygraphviz
          matplotlib

          python-gitlab
          PyGithub

          schema
          jinja2
          ruamel-yaml
          msgpack
          urllib3
          influxdb-client

          psycopg

          humanize
          rich
          lorem-text.pythonPackage

          pyserial
          pylibftdi
          pylxd
          selenium

          paho-mqtt
        ]))
      geckodriver
      chromedriver

      # Lua
      (lua5_1.withPackages (luapkgs:
        with luapkgs; [
          luacheck
        ]))

      # Ansible
      ansible

      # Qemmu
      qemu
      virt-manager

      # U-Boot
      #ubootTools
      tftp-hpa

      # Network
      iperf2
      iperf3
      wireshark
      inetutils

      # Gtk
      glade

      # Barcode generation
      barcode

      # D-Bus
      dfeet

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

      # SHV
      shvspy
    ];
    programs.wireshark.enable = true;

    documentation.dev.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"
    '';

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

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