aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/develop.nix
blob: cd6719f0186769a6401208aa75f0425df6f8637c (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
{
  config,
  lib,
  pkgs,
  ...
}:
with lib; {
  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
      sterm
      parted
      vim-vint
      nodePackages.vim-language-server

      # Nix
      dev
      cachix
      nurl
      nix-universal-prefetch
      rnix-lsp
      statix
      nixfmt
      nixpkgs-fmt

      # Shell
      dash # Posix shell
      bats
      shellcheck
      shfmt
      jq
      yq
      fq

      # 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
      stdmanpages

      # 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"
    ];
  };
}