2021-11-25 11:55:30 +00:00
|
|
|
# The module for anything dev-related.
|
2023-10-02 06:26:11 +00:00
|
|
|
{ config, lib, pkgs, ... }:
|
2021-11-25 11:55:30 +00:00
|
|
|
|
2022-01-09 05:38:59 +00:00
|
|
|
let cfg = config.profiles.dev;
|
2021-11-25 11:55:30 +00:00
|
|
|
in {
|
2022-01-09 05:38:59 +00:00
|
|
|
options.profiles.dev = {
|
2023-12-17 16:00:55 +00:00
|
|
|
enable = lib.mkEnableOption "basic configuration for software development";
|
|
|
|
extras.enable = lib.mkEnableOption "additional shell utilities";
|
|
|
|
containers.enable = lib.mkEnableOption "containers setup";
|
2023-12-17 16:11:11 +00:00
|
|
|
virtual-machines.enable = lib.mkEnableOption "virtual machines setup";
|
2022-10-13 10:32:47 +00:00
|
|
|
neovim.enable = lib.mkEnableOption "Neovim setup";
|
2021-11-25 11:55:30 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
config = lib.mkIf cfg.enable (lib.mkMerge [
|
2023-12-17 16:00:55 +00:00
|
|
|
{
|
2022-10-13 10:32:47 +00:00
|
|
|
# Hey! Wanna see some of <INSERT APPLICATION'S NAME> big dark dump?
|
2022-07-18 23:07:53 +00:00
|
|
|
systemd.coredump = {
|
|
|
|
enable = true;
|
|
|
|
extraConfig = ''
|
|
|
|
ProcessSizeMax=10G
|
|
|
|
ExternalSizeMax=10G
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
|
2022-09-25 07:24:47 +00:00
|
|
|
# Debugging time!
|
|
|
|
environment.enableDebugInfo = true;
|
|
|
|
|
2021-11-25 13:45:48 +00:00
|
|
|
# I want to include documentations for my own sanity, OK?
|
|
|
|
documentation = {
|
|
|
|
enable = true;
|
|
|
|
dev.enable = true;
|
|
|
|
nixos.enable = true;
|
2021-12-04 15:27:10 +00:00
|
|
|
man.generateCaches = true;
|
2021-11-25 13:45:48 +00:00
|
|
|
};
|
2021-11-25 11:55:30 +00:00
|
|
|
|
2021-12-08 04:18:37 +00:00
|
|
|
# Install Git, our favorite version control system.
|
|
|
|
# In this case, we want ALL OF THE EXTENSIONS!
|
|
|
|
programs.git = {
|
|
|
|
enable = true;
|
|
|
|
lfs.enable = true;
|
|
|
|
package = pkgs.gitFull;
|
|
|
|
};
|
|
|
|
|
2022-10-13 10:32:47 +00:00
|
|
|
# It's a given at life to have a GPG key.
|
|
|
|
programs.gnupg.agent.enable = true;
|
|
|
|
|
|
|
|
# Instrumentate your instrument.
|
2022-09-25 07:24:47 +00:00
|
|
|
programs.systemtap.enable = true;
|
2022-10-13 10:32:47 +00:00
|
|
|
|
2023-02-11 01:01:31 +00:00
|
|
|
# Search around sharks for wires.
|
|
|
|
programs.wireshark.enable = true;
|
|
|
|
|
2022-10-13 10:32:47 +00:00
|
|
|
# Profile your whole system.
|
2022-09-25 07:24:47 +00:00
|
|
|
services.sysprof.enable = true;
|
2021-11-25 11:55:30 +00:00
|
|
|
|
2022-11-19 03:00:15 +00:00
|
|
|
# Additional settings for developing with nix.
|
|
|
|
nix.settings = {
|
|
|
|
keep-outputs = true;
|
|
|
|
keep-derivations = true;
|
|
|
|
};
|
|
|
|
|
2021-11-25 13:45:48 +00:00
|
|
|
# This is set as our system packages for the sake of convenience.
|
|
|
|
environment.systemPackages = with pkgs; [
|
2023-01-17 08:09:14 +00:00
|
|
|
bind.dnsutils # A bunch of things to make sense with DNS.
|
2021-11-25 13:45:48 +00:00
|
|
|
curl # Our favorite network client.
|
2023-01-19 12:32:25 +00:00
|
|
|
ipcalc # Calculate your IP without going to the web.
|
2021-12-04 15:27:10 +00:00
|
|
|
gcc # The usual toolchain.
|
2022-09-25 07:24:47 +00:00
|
|
|
gdb # The usual debugger.
|
2022-10-13 10:32:47 +00:00
|
|
|
gnumake # The other poster boy for the hated build system.
|
2021-11-30 01:03:05 +00:00
|
|
|
moreutils # Less is more but more utilities, the merrier.
|
2023-10-18 01:37:43 +00:00
|
|
|
sshfs # Make others' home your own.
|
2023-01-17 08:09:14 +00:00
|
|
|
whois # Doctor, are you not?
|
2022-10-13 10:32:47 +00:00
|
|
|
valgrind # Making sure your applications don't pee as much.
|
2023-08-19 07:25:15 +00:00
|
|
|
|
|
|
|
# Measuring your bloated tanks power and bandwidth consumption.
|
|
|
|
powertop
|
|
|
|
nethogs
|
2023-09-18 09:57:18 +00:00
|
|
|
|
|
|
|
# Hardware and software diagnostics.
|
|
|
|
lsof # View every single open connections.
|
|
|
|
lshw # View your hardware.
|
|
|
|
pciutils # View your peripherals.
|
2022-11-19 03:05:31 +00:00
|
|
|
|
2023-12-17 16:00:55 +00:00
|
|
|
# All of the documentation.
|
|
|
|
man-pages # Extra manpages.
|
|
|
|
man-pages-posix # More POSIX manpages.
|
|
|
|
];
|
|
|
|
}
|
2021-11-25 11:55:30 +00:00
|
|
|
|
2023-12-17 16:00:55 +00:00
|
|
|
(lib.mkIf cfg.extras.enable {
|
2021-11-25 11:55:30 +00:00
|
|
|
environment.systemPackages = with pkgs; [
|
2022-08-27 05:40:56 +00:00
|
|
|
bandwhich # Sniffing your packets.
|
2023-12-17 16:00:55 +00:00
|
|
|
cachix # Compile no more by using someone's binary cache!
|
|
|
|
direnv # The power of local development environment.
|
2021-11-25 13:45:48 +00:00
|
|
|
lazygit # Git interface for the lazy.
|
2023-01-19 12:32:25 +00:00
|
|
|
lazydocker # Git interface for the lazy.
|
2021-11-25 13:45:48 +00:00
|
|
|
fd # Oh nice, a more reliable `find`.
|
|
|
|
ripgrep # On nice, a more reliable `grep`.
|
2023-09-15 04:54:49 +00:00
|
|
|
eza # Oh nice, a shinier `ls`.
|
2022-12-06 07:54:45 +00:00
|
|
|
bat # dog > sky dog > cat
|
2021-11-25 13:45:48 +00:00
|
|
|
fzf # A fuzzy finder that enables fuzzy finding not furry finding, a common misconception.
|
2023-12-17 16:00:55 +00:00
|
|
|
quilt # Patching right up yer' alley.
|
2021-11-25 13:45:48 +00:00
|
|
|
zoxide # Gain teleportation abilities!
|
2023-12-17 16:00:55 +00:00
|
|
|
]
|
|
|
|
# Finally, a local environment for testing out GitHub workflows without
|
|
|
|
# embarassing yourself pushing a bunch of commits.
|
|
|
|
++ (lib.optional config.virtualisation.docker.enable pkgs.act)
|
|
|
|
|
|
|
|
# Enable all of the gud things.
|
|
|
|
++ (lib.optionals config.programs.git.enable (with pkgs; [
|
|
|
|
tea # Make some Tea...
|
|
|
|
hut # ...in the Hut...
|
|
|
|
github-cli # ...in the GitHub CLI.
|
|
|
|
git-filter-repo # History is written by the victors (and force-pushers which are surely not victors).
|
|
|
|
]));
|
2023-12-18 00:59:25 +00:00
|
|
|
|
|
|
|
# Make per-project devenvs more of a living thing.
|
|
|
|
services.lorri.enable = true;
|
|
|
|
|
|
|
|
# Make shebangs even more magical.
|
|
|
|
services.envfs.enable = true;
|
|
|
|
|
|
|
|
# Convenience!
|
|
|
|
environment.localBinInPath = true;
|
2021-11-25 11:55:30 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
# !!! Please add your user to the "libvirtd" group.
|
2023-12-17 16:11:11 +00:00
|
|
|
(lib.mkIf cfg.containers.enable {
|
2022-06-09 05:00:07 +00:00
|
|
|
environment.systemPackages = with pkgs; [
|
2023-10-09 14:32:13 +00:00
|
|
|
dive # Dive into container images.
|
2022-06-09 05:00:07 +00:00
|
|
|
];
|
2022-01-25 01:32:17 +00:00
|
|
|
|
2023-10-18 01:17:33 +00:00
|
|
|
programs.distrobox = {
|
|
|
|
enable = true;
|
|
|
|
settings = {
|
|
|
|
container_additional_volumes = [
|
|
|
|
"/nix/store:/nix/store:r"
|
|
|
|
"/etc/profiles/per-user:/etc/profiles/per-user:r"
|
|
|
|
];
|
|
|
|
container_image_default = "registry.opensuse.org/opensuse/distrobox-packaging:latest";
|
|
|
|
container_command = "sh -norc";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2023-07-16 07:28:32 +00:00
|
|
|
# Podman with Docker compatibility which is not 100% but still better
|
|
|
|
# than nothing.
|
|
|
|
virtualisation.podman = {
|
2022-11-05 01:36:33 +00:00
|
|
|
enable = true;
|
2023-07-16 07:28:32 +00:00
|
|
|
dockerCompat = true;
|
2022-11-05 01:36:33 +00:00
|
|
|
autoPrune = {
|
|
|
|
enable = true;
|
|
|
|
dates = "weekly";
|
|
|
|
};
|
2023-07-16 07:28:32 +00:00
|
|
|
defaultNetwork.settings = {
|
|
|
|
dns_enabled = true;
|
|
|
|
};
|
2022-11-05 01:36:33 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
# Enable usual containers configuration.
|
|
|
|
virtualisation.containers = {
|
|
|
|
enable = true;
|
|
|
|
registries.search = [
|
|
|
|
"docker.io"
|
2023-11-07 05:31:37 +00:00
|
|
|
"ghcr.io"
|
2022-11-05 01:36:33 +00:00
|
|
|
"quay.io"
|
|
|
|
"registry.opensuse.org"
|
|
|
|
];
|
|
|
|
};
|
2023-12-17 16:11:11 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
(lib.mkIf cfg.virtual-machines.enable {
|
|
|
|
environment.systemPackages = with pkgs; [
|
2023-12-23 12:33:23 +00:00
|
|
|
virt-top # Monitoring your virtual machines on a terminal, yeah.
|
2023-12-17 16:11:11 +00:00
|
|
|
virt-manager # An interface for those who are lazy to read a reference manual and create a 1000-line configuration per machine.
|
|
|
|
];
|
2021-11-25 11:55:30 +00:00
|
|
|
|
2022-10-13 10:32:47 +00:00
|
|
|
# Virtual machines, son. They open in response to physical needs to
|
|
|
|
# foreign environments.
|
2021-11-25 11:55:30 +00:00
|
|
|
virtualisation.libvirtd = {
|
|
|
|
enable = true;
|
2023-11-06 08:10:42 +00:00
|
|
|
qemu.package = pkgs.qemu_full;
|
2021-11-25 13:45:48 +00:00
|
|
|
qemu.ovmf.enable = true;
|
2021-11-25 11:55:30 +00:00
|
|
|
};
|
|
|
|
})
|
2021-12-25 12:35:55 +00:00
|
|
|
|
|
|
|
(lib.mkIf cfg.neovim.enable {
|
2022-10-13 10:32:47 +00:00
|
|
|
# Easier, better, faster, stronger.
|
2021-12-25 12:35:55 +00:00
|
|
|
programs.neovim = {
|
|
|
|
enable = true;
|
|
|
|
defaultEditor = true;
|
|
|
|
withNodeJs = true;
|
|
|
|
withRuby = true;
|
|
|
|
};
|
|
|
|
|
2022-04-30 12:30:22 +00:00
|
|
|
environment.systemPackages = with pkgs; [
|
2022-10-13 10:32:47 +00:00
|
|
|
editorconfig-core-c # Consistent canonical coding conventions.
|
|
|
|
tree-sitter # It surely doesn't have a partner to kiss.
|
2022-04-30 12:30:22 +00:00
|
|
|
];
|
2021-12-25 12:35:55 +00:00
|
|
|
})
|
2021-11-25 11:55:30 +00:00
|
|
|
]);
|
|
|
|
}
|