all repos — nixfiles @ 5a432fefbf2129ecead2ac17bdca2a5feb7b9400

System and user configuration, managed by nix and home-manager

user/settings/development/base.nix (view raw)

{
  config,
  pkgs,
  ...
}:
{
  home.packages = with pkgs; [
    shellcheck
    shfmt
    dockerfile-language-server
    yaml-language-server
    lua-language-server
    taplo # toml
    marksman
    tokei

    just
    just-lsp
    remake

    curlHTTP3
    xh
    htmlq
    jq
    watchexec
    entr
    personal.projectdo

    litecli
  ];

  home.sessionVariables = {
    FLY_NO_UPDATE_CHECK = "1";
  };

  programs.emacs.extraPackages =
    epkgs:
    (with epkgs; [
      (treesit-grammars.with-grammars (
        grammars: with grammars; [
          tree-sitter-bash
          tree-sitter-fish
          tree-sitter-just
          tree-sitter-make
          tree-sitter-dockerfile
          tree-sitter-sql
        ]
      ))
    ]);

  programs.nixvim.plugins = {
    lsp.servers = {
      bashls.enable = true;
      fish_lsp.enable = true;
      taplo.enable = true;
      docker_compose_language_service.enable = true;
      dockerls.enable = true;
    };
  };

  programs.zed-editor.extensions = [
    "toml"
    "git-firefly"
    "dockerfile"
    "make"
    "sql"
    "nix"
    "basher"
    "env"
    "ini"
    "fish"
    "just"
    "elisp"
    "ssh-config"
    "caddyfile"
    "awk"
  ];

  editorconfig = {
    enable = true;
    settings = {
      "*" = {
        charset = "utf-8";
        end_of_line = "lf";
        trim_trailing_whitespace = true;
        insert_final_newline = true;
        indent_style = "space";
        indent_size = 2;
        tab_width = 2;
      };
      "*.fish" = {
        indent_size = 4;
      };
      "*.md" = {
        trim_trailing_whitespace = false;
      };
      justfile = {
        indent_style = "tab";
      };
      Makefile = {
        indent_style = "tab";
        tab_width = 4;
      };
    };
  };

  programs.fish.shellAbbrs = {
    b = {
      function = "projectdo_build";
    };
    r = {
      function = "projectdo_run";
    };
    t = {
      function = "projectdo_test";
    };
    p = {
      function = "projectdo_tool";
    };
    ciq = "laminarc queue $(basename $PWD) ref=refs/heads/$(git branch --show-current) rev=$(git rev-parse @)";
  };
  home.shellAliases = {
    j = "just";
    make = "remake";
    er = "direnv reload";
    ea = "direnv allow";
    ex = "direnv exec";
    es = "direnv status";
    laminarc = "ssh linde laminarc";
  };
  programs.direnv = {
    enable = true;
    nix-direnv = {
      enable = true;
    };
    config = {
      global = {
        disable_stdin = true;
        load_dotenv = true;
        strict_env = false;
        hide_env_diff = true;
      };
      whitelist = {
        prefix = with config.home; [
          "${homeDirectory}/projects/alin.ovh"
          "${homeDirectory}/projects/github.com/alanpearce"
          "${homeDirectory}/projects/codeberg.org/alanpearce"
        ];
      };
    };
    stdlib = ''
      declare -A direnv_layout_dirs
      direnv_layout_dir() {
        echo "''${direnv_layout_dirs[$PWD]:=$(
          local hash="$(${pkgs.coreutils}/bin/sha256sum - <<<"''${PWD}" | cut -c-7)"
      		local path="''${PWD//[^a-zA-Z0-9]/-}"
          echo "${config.xdg.cacheHome}/direnv/layouts/''${hash}''${path}"
        )}"
      }
    '';
  };
  services.lorri = {
    enable = pkgs.stdenv.isLinux;
  };
}