about summary refs log tree commit diff
path: root/home/dev.nix
blob: e0ca68bd5773129f81a5ef6d9ea6c499fcd261eb (plain) (blame)
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
{ pkgs
, config
, ...
}:
let
  pythonEnv = pkgs.python3.withPackages (p:
    with p; [
      black
      click
      isort
      pylsp-mypy
      requests
      types-requests
      pip
      ipython
      virtualenv
    ]);
in
{
  programs.go = {
    enable = true;
    goPath = ".local/share/pkg.go";
    goBin = ".local/bin.go";
    package = pkgs.go_1_21;
  };

  home.packages = with pkgs; [
    go-tools
    golangci-lint
    gopls

    dive # explore layers in docker images

    pythonEnv

    kubectl

    google-cloud-sdk

    rnix-lsp
    alejandra
    nil
  ];

  home.sessionPath = [
    config.home.sessionVariables.GOBIN
  ];

  programs.zsh.shellAliases = {
    kc = "kubectl";
  };

  programs.vscode = {
    enable = true;

    # Workaround https://github.com/nix-community/home-manager/issues/3507
    mutableExtensionsDir = false;

    extensions = with pkgs.vscode-extensions; [
      #go
      golang.go

      # nix
      arrterian.nix-env-selector
      bbenoist.nix
      jnoortheen.nix-ide

      # python
      ms-python.python
      ms-python.vscode-pylance
      ms-python.black-formatter

      # shell
      mads-hartmann.bash-ide-vscode

      # utils
      ms-vscode.makefile-tools # Makefile support
      mkhl.direnv # direnv
      editorconfig.editorconfig # editor config for vscode
      tamasfe.even-better-toml # better TOML mode
      streetsidesoftware.code-spell-checker # code spell checker
      github.vscode-github-actions # GHA
    ];
    userSettings = {
      # editor
      editor.fontSize = 15;
      "editor.formatOnSave" = true;
      "editor.minimap.enabled" = false;
      "editor.fontFamily" = "Monaspace Neon";
      "editor.fontLigatures" = true;
      "editor.rulers" = [ 80 120 ];
      "editor.folding" = false;
      "editor.foldingHighlight" = false;

      # explorer
      "explorer.sortOrder" = "default";
      "explorer.autoRevealExcludes" = {
        "**/result" = true;
      };

      # extensions
      "extensions.ignoreRecommendations" = true;
      "extensions.autoCheckUpdates" = false;
      "extensions.autoUpdate" = false;

      # files
      "files.trimFinalNewLines" = true;
      "files.insertFinalNewLine" = true;
      "files.autoSave" = "afterDelay";
      "files.autoSaveDelay" = 100; # in milliseconds
      "files.exclude" = {
        "**/.direnv" = true;
        "**/result" = true;
      };

      # formatter
      formatter = {
        "[python]"."editor.defaultFormatter" = "ms-python.black-formatter";
      };

      # workbench
      workbench.colorTheme = "Default Light Modern";
      workbench.sideBar.location = "right";

      # telemetry
      "telemetry.telemetryLevel" = "off";

      # terminal
      "terminal.integrated.fontFamily" = "Monaspace Xenon";
      "terminal.integrated.fontSize" = 13;

      # go
      "go.lintTool" = "golangci-lint";
      "go.toolsManagemenent.checkForUpdates" = "off";
      "go.toolsManagemenent.autoUpdate" = false;
      "gopls" = {
        "format.gofumpt" = true;
        "ui.semanticTokens" = true;
      };

      # shell
      bash = {
        "bashIde.shellcheckPath" = "${pkgs.shellcheck}/bin/shellcheck";
        "shfmt.executablePath" = "${pkgs.shfmt}/bin/shfmt";
      };

      # nix
      "nix.serverPath" = "nil";
      "nix.serverSettings" = {
        "nil" = {
          "formatting" = {
            "command" = [ "nixpkgs-fmt" ];
          };
        };
      };
      "nix.enableLanguageServer" = true;
    };
  };

  home.sessionVariables = with config.xdg; {
    IPYTHONDIR = "${cacheHome}/ipython";
    PIP_LOG = "${cacheHome}/pip/pip.log";
    PYLINTHOME = "${cacheHome}/pylint";
    PYTHON_EGG_CACHE = "${cacheHome}/python-eggs";
    MYPY_CACHE_DIR = "${cacheHome}/mypy";
  };
}