aboutsummaryrefslogtreecommitdiff
path: root/nixos/modules/develop.nix
blob: 3ef6ce68915a00e8297d06a3f364cf3545e7bfd0 (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
{
  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
      ctags

      # Nix
      dev
      cachix
      nurl
      nix-universal-prefetch
      rnix-lsp
      nixd
      alejandra
      statix
      deadnix
      agenix

      # 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

          pygraphviz
          matplotlib

          python-gitlab
          PyGithub
        ]))
      geckodriver
      chromedriver

      # Julia
      julia

      # Qemmu
      qemu
      virt-manager
      cdrtools

      # U-Boot
      ubootTools
      tftp-hpa

      # Network
      iperf3
      inetutils

      # Gtk
      cambalache

      # Barcode generation
      barcode

      # D-Bus
      dfeet

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

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