migrated all languages to devshell

This commit is contained in:
Danilo Reyes 2025-04-18 21:29:02 -06:00
parent ecb9f386ce
commit 023744a872
11 changed files with 256 additions and 94 deletions

View File

@ -32,7 +32,7 @@
users.jawz = import ./home-manager.nix; users.jawz = import ./home-manager.nix;
}; };
time = { time = {
timeZone = config.my.timezone; timeZone = config.my.timeZone;
hardwareClockInLocalTime = true; hardwareClockInLocalTime = true;
}; };
i18n = { i18n = {

View File

@ -87,7 +87,17 @@
shell = createConfig "shell" inputs.nixpkgs; shell = createConfig "shell" inputs.nixpkgs;
}; };
devShells.${system} = { devShells.${system} = {
python = self.nixosConfigurations.shell.config.devShells.python; inherit (self.nixosConfigurations.shell.config.devShells)
cc
docker
haskell
javascript
julia
nix
python
rust
sh
;
}; };
}; };
} }

View File

@ -4,19 +4,33 @@
pkgs, pkgs,
... ...
}: }:
let
packages = builtins.attrValues {
inherit (pkgs)
clang # C/C++ compiler frontend (part of LLVM)
clang-tools # Extra LLVM tools (e.g. clang-tidy, clang-apply-replacements)
gcc # GNU Compiler Collection (C, C++, etc.)
gdb # GNU Debugger
valgrind # Memory leak detector and performance profiler
;
};
in
{ {
options.my.dev.cc.enable = lib.mkEnableOption "enable"; options = {
my.dev.cc.enable = lib.mkEnableOption "Install C/C++ tooling globally";
config = lib.mkIf config.my.dev.cc.enable { devShells.cc = lib.mkOption {
users.users.jawz.packages = builtins.attrValues { type = lib.types.package;
inherit (pkgs) default = pkgs.mkShell {
clang # C/C++ compiler frontend (part of LLVM) inherit packages;
clang-tools # Extra LLVM tools (e.g. clang-tidy, clang-apply-replacements) name = "cc-dev-shell";
gcc # GNU Compiler Collection (C, C++, etc.) shellHook = ''
gdb # GNU Debugger echo "🔧 C/C++ dev environment"
valgrind # Memory leak detector and performance profiler '';
; };
description = "C/C++ development shell";
}; };
}; };
config = lib.mkIf config.my.dev.cc.enable {
users.users.jawz.packages = packages;
};
} }

View File

@ -4,13 +4,37 @@
pkgs, pkgs,
... ...
}: }:
let
packages = builtins.attrValues {
inherit (pkgs) dockfmt; # Format Dockerfiles
inherit (pkgs.nodePackages)
dockerfile-language-server-nodejs # LSP for Dockerfiles
;
};
in
{ {
options.my.dev.docker.enable = lib.mkEnableOption "enable"; options = {
config = lib.mkIf config.my.dev.docker.enable { my.dev.docker.enable = lib.mkEnableOption "Install Docker tooling globally";
environment.variables.DOCKER_CONFIG = "\${XDG_CONFIG_HOME}/docker"; devShells.docker = lib.mkOption {
users.users.jawz.packages = builtins.attrValues { type = lib.types.package;
inherit (pkgs) dockfmt; default = pkgs.mkShell {
inherit (pkgs.nodePackages) dockerfile-language-server-nodejs; inherit packages;
name = "docker-dev-shell";
shellHook = ''
echo "🐳 Docker dev environment"
'';
};
description = "Docker and Dockerfile tooling shell";
}; };
}; };
config = lib.mkMerge [
(lib.mkIf config.my.dev.docker.enable {
users.users.jawz = {
inherit packages;
};
})
{
environment.variables.DOCKER_CONFIG = "\${XDG_CONFIG_HOME}/docker";
}
];
} }

View File

@ -4,23 +4,45 @@
pkgs, pkgs,
... ...
}: }:
let
packages = builtins.attrValues {
inherit (pkgs)
haskell-language-server # LSP server for Haskell
cabal-install # Standard Haskell build tool
hlint # Linter for Haskell source code
;
inherit (pkgs.haskellPackages)
hoogle # Haskell API search engine
;
};
in
{ {
options.my.dev.haskell.enable = lib.mkEnableOption "enable"; options = {
config = lib.mkIf config.my.dev.haskell.enable { my.dev.haskell.enable = lib.mkEnableOption "Install Haskell tooling globally";
users.users.jawz.packages = builtins.attrValues { devShells.haskell = lib.mkOption {
inherit (pkgs) type = lib.types.package;
haskell-language-server # LSP server for Haskell default = pkgs.mkShell {
cabal-install # Standard Haskell build tool inherit packages;
hlint # Linter for Haskell source code name = "haskell-dev-shell";
; shellHook = ''
inherit (pkgs.haskellPackages) echo "λ Haskell dev environment"
hoogle # Haskell API search engine '';
; };
}; description = "Haskell development shell";
environment.variables = {
CABAL_DIR = "\${XDG_CACHE_HOME}/cabal";
STACK_ROOT = "\${XDG_DATA_HOME}/stack";
GHCUP_USE_XDG_DIRS = "true";
}; };
}; };
config = lib.mkMerge [
(lib.mkIf config.my.dev.haskell.enable {
users.users.jawz = {
inherit packages;
};
})
{
environment.variables = {
CABAL_DIR = "\${XDG_CACHE_HOME}/cabal";
STACK_ROOT = "\${XDG_DATA_HOME}/stack";
GHCUP_USE_XDG_DIRS = "true";
};
}
];
} }

View File

@ -4,35 +4,55 @@
pkgs, pkgs,
... ...
}: }:
let
packages = builtins.attrValues {
inherit (pkgs) nodejs; # Node.js runtime
inherit (pkgs.nodePackages) pnpm; # Fast package manager alternative to npm
};
in
{ {
options.my.dev.javascript.enable = lib.mkEnableOption "enable"; options = {
config = lib.mkIf config.my.dev.javascript.enable { my.dev.javascript.enable = lib.mkEnableOption "Install JavaScript tooling globally";
home-manager.users.jawz.xdg.configFile = { devShells.javascript = lib.mkOption {
"npm/npmrc".text = '' type = lib.types.package;
user=0 default = pkgs.mkShell {
unsafe-perm=true inherit packages;
prefix=$XDG_DATA_HOME/npm name = "javascript-dev-shell";
cache=$XDG_CACHE_HOME/npm shellHook = ''
tmp=$XDG_RUNTIME_DIR/npm echo "📦 JavaScript dev environment"
init-module=$XDG_CONFIG_HOME/npm/config/npm-init.js '';
store-dir=$XDG_DATA_HOME/pnpm-store
'';
"configstore/update-notifier-npm-check.json".text = builtins.toJSON {
optOut = false;
lastUpdateCheck = 1646662583446;
}; };
}; description = "JavaScript/Node development shell with npm/pnpm support";
users.users.jawz.packages = builtins.attrValues {
inherit (pkgs) nodejs;
inherit (pkgs.nodePackages) pnpm;
};
environment.variables = {
NPM_CONFIG_USERCONFIG = "\${XDG_CONFIG_HOME}/npm/npmrc";
PNPM_HOME = "\${XDG_DATA_HOME}/pnpm";
PATH = [
"\${XDG_DATA_HOME}/npm/bin"
"\${XDG_DATA_HOME}/pnpm"
];
}; };
}; };
config = lib.mkMerge [
(lib.mkIf config.my.dev.javascript.enable {
users.users.jawz = { inherit packages; };
})
{
home-manager.users.jawz.xdg.configFile = {
"npm/npmrc".text = ''
user=0
unsafe-perm=true
prefix=$XDG_DATA_HOME/npm
cache=$XDG_CACHE_HOME/npm
tmp=$XDG_RUNTIME_DIR/npm
init-module=$XDG_CONFIG_HOME/npm/config/npm-init.js
store-dir=$XDG_DATA_HOME/pnpm-store
'';
"configstore/update-notifier-npm-check.json".text = builtins.toJSON {
optOut = false;
lastUpdateCheck = 1646662583446;
};
};
environment.variables = {
NPM_CONFIG_USERCONFIG = "\${XDG_CONFIG_HOME}/npm/npmrc";
PNPM_HOME = "\${XDG_DATA_HOME}/pnpm";
PATH = [
"\${XDG_DATA_HOME}/npm/bin"
"\${XDG_DATA_HOME}/pnpm"
];
};
}
];
} }

View File

@ -1,15 +1,32 @@
{ {
config,
lib, lib,
pkgs, pkgs,
config,
... ...
}: }:
let
packages = builtins.attrValues {
inherit (pkgs) julia; # High-performance dynamic language for technical computing
};
in
{ {
options.my.dev.julia.enable = lib.mkEnableOption "enable"; options = {
my.dev.julia.enable = lib.mkEnableOption "Install Julia globally";
devShells.julia = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "julia-dev-shell";
shellHook = ''
echo "🔬 Julia dev environment"
'';
};
description = "Julia development shell";
};
};
config = lib.mkIf config.my.dev.julia.enable { config = lib.mkIf config.my.dev.julia.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz = {
inherit (pkgs) julia; inherit packages;
}; };
}; };
} }

View File

@ -4,16 +4,34 @@
pkgs, pkgs,
... ...
}: }:
let
packages = builtins.attrValues {
inherit (pkgs)
nixfmt-rfc-style # formatting
cachix # binary cache management
nixd # language server for Nix
statix # linter for Nix expressions
;
};
in
{ {
options.my.dev.nix.enable = lib.mkEnableOption "enable"; options = {
my.dev.nix.enable = lib.mkEnableOption "Install Nix tooling globally";
devShells.nix = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "nix-dev-shell";
shellHook = ''
echo " Nix dev environment"
'';
};
description = "Nix/NixOS development shell with formatter, linter, LSP, and Cachix";
};
};
config = lib.mkIf config.my.dev.nix.enable { config = lib.mkIf config.my.dev.nix.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz = {
inherit (pkgs) inherit packages;
nixfmt-rfc-style # formating
cachix # why spend time compiling?
nixd # language server
statix # linter
;
}; };
}; };
} }

View File

@ -4,16 +4,34 @@
pkgs, pkgs,
... ...
}: }:
let
packages = builtins.attrValues {
inherit (pkgs)
cargo # Rust package manager
rust-analyzer # Language server for Rust
clippy # Linter for Rust
rustfmt # Formatter for Rust code
;
};
in
{ {
options.my.dev.rust.enable = lib.mkEnableOption "enable"; options = {
my.dev.rust.enable = lib.mkEnableOption "Install Rust tooling globally";
devShells.rust = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "rust-dev-shell";
shellHook = ''
echo "🦀 Rust dev environment"
'';
};
description = "Rust development shell with cargo and rust-analyzer";
};
};
config = lib.mkIf config.my.dev.rust.enable { config = lib.mkIf config.my.dev.rust.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz = {
inherit (pkgs) inherit packages;
cargo # Rust package manager
rust-analyzer # Language server for Rust
clippy # Linter for Rust
rustfmt # Formatter for Rust code
;
}; };
}; };
} }

View File

@ -4,17 +4,35 @@
pkgs, pkgs,
... ...
}: }:
let
packages = builtins.attrValues {
inherit (pkgs)
bashdb # Debugger and completion support
shellcheck # Shell script linter
shfmt # Shell parser and formatter
;
# LSP for Bash and sh
inherit (pkgs.nodePackages) bash-language-server;
};
in
{ {
options.my.dev.sh.enable = lib.mkEnableOption "enable"; options = {
my.dev.sh.enable = lib.mkEnableOption "Install shell scripting tools globally";
devShells.sh = lib.mkOption {
type = lib.types.package;
default = pkgs.mkShell {
inherit packages;
name = "sh-dev-shell";
shellHook = ''
echo "💻 Shell scripting dev environment"
'';
};
description = "Shell scripting dev shell";
};
};
config = lib.mkIf config.my.dev.sh.enable { config = lib.mkIf config.my.dev.sh.enable {
users.users.jawz.packages = builtins.attrValues { users.users.jawz = {
inherit (pkgs) inherit packages;
bashdb # autocomplete
shellcheck # linting
shfmt # a shell parser and formatter
;
#LSP
inherit (pkgs.nodePackages) bash-language-server;
}; };
}; };
} }

View File

@ -74,7 +74,8 @@
gdu # disk-space utility checker, somewhat useful gdu # disk-space utility checker, somewhat useful
tldr # man for retards tldr # man for retards
trash-cli # oop! did not meant to delete that trash-cli # oop! did not meant to delete that
jq # linting jq # json parser
yq # yaml parser
smartmontools # check hard drie health smartmontools # check hard drie health
; ;
inherit (inputs.jawz-scripts.packages.x86_64-linux) inherit (inputs.jawz-scripts.packages.x86_64-linux)