mirror of
https://github.com/foo-dogsquared/nixos-config.git
synced 2025-04-24 18:19:11 +00:00
Update the modules
This commit is contained in:
commit
19674fe7d2
9
.editorconfig
Normal file
9
.editorconfig
Normal file
@ -0,0 +1,9 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
|
||||
[*.nix]
|
||||
indent_style = space
|
||||
indent_size = 2
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "config"]
|
||||
path = config
|
||||
url = https://github.com/foo-dogsquared/dotfiles
|
47
README.adoc
Normal file
47
README.adoc
Normal file
@ -0,0 +1,47 @@
|
||||
= foo-dogsquared's NixOS config
|
||||
|
||||
This is the configuration setup for my https://nixos.org[NixOS] instance.
|
||||
A major part of this setup is inspired (or stolen, whichever you prefer) from https://github.com/hlissner/dotfiles[hlissner's NixOS config].
|
||||
The difference is https://github.com/rycee/home-manager[home-manager] is a big requirement and uses it a whole lot.
|
||||
|
||||
|
||||
|
||||
|
||||
== Getting started
|
||||
|
||||
Before installing this setup, be sure to install NixOS and logged in as a user.
|
||||
This project setup also assumes the operating system has the following configurations:
|
||||
|
||||
- Uses the nixpkgs unstable channel as `nixos` (i.e., `nix-channels --update https://nixos.org/channels/nixos-unstable`).
|
||||
- Have the https://github.com/rycee/home-manager[home-manager] installed with the unstable release.
|
||||
- You start with the TTY and nothing else is installed (i.e., bare installation similar in spirit to Arch Linux).
|
||||
|
||||
[source, shell]
|
||||
----
|
||||
git clone <GIT_URL_OF_THIS_REPO>
|
||||
make
|
||||
----
|
||||
|
||||
|
||||
|
||||
|
||||
== Project structure
|
||||
|
||||
The project structure should look like the following:
|
||||
|
||||
[source, tree]
|
||||
----
|
||||
nixos-config
|
||||
├── config/
|
||||
├── home.nix
|
||||
├── modules/
|
||||
└── README.adoc
|
||||
----
|
||||
|
||||
- The directory paid with the most attention would most likely be the `modules/` folder.
|
||||
Each module (and submodule) can contain multiple modules for multiple programs (i.e., `modules/shell/git`, `modules/desktop/bspwm`).
|
||||
It could also contain a `base.nix` file where Nix packages with no configurations are placed similar to Arch package groups (i.e., `base`, `base-devel`, `xfce`).
|
||||
|
||||
- The `config/` directory is simply the ad hoc configuration of several programs.
|
||||
In this case, it is my https://github.com/foo-dogsquared/dotflies[dotfiles] directory.
|
||||
|
1
config
Submodule
1
config
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 00ff59a0ed36438f39b9b0d784708d8aa14761c7
|
72
home.nix
Normal file
72
home.nix
Normal file
@ -0,0 +1,72 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./modules
|
||||
];
|
||||
|
||||
# Setting my personal public information.
|
||||
# accounts.email.accounts."Gabriel Arazas" = {
|
||||
# address = "christiangabrielarazas@gmail.com";
|
||||
# aliases = [ "foo.dogsquared@gmail.com" ];
|
||||
# };
|
||||
|
||||
nixpkgs.config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
# Module configurations.
|
||||
modules = {
|
||||
desktop = {
|
||||
files.enable = true;
|
||||
};
|
||||
|
||||
dev = {
|
||||
base.enable = true;
|
||||
cc.enable = true;
|
||||
documentation.enable = true;
|
||||
rust.enable = true;
|
||||
};
|
||||
|
||||
editors = {
|
||||
default = "nvim";
|
||||
emacs.enable = true;
|
||||
neovim.enable = true;
|
||||
};
|
||||
|
||||
shell = {
|
||||
base.enable = true;
|
||||
lf.enable = true;
|
||||
git.enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs.git = lib.mkIf config.modules.shell.git.enable {
|
||||
userName = "foo-dogsquared";
|
||||
userEmail = "christiangabrielarazas@gmail.com";
|
||||
};
|
||||
|
||||
# Additional programs that doesn't need much configuration (or at least personally configured).
|
||||
# It is pointless to create modules for it, anyways.
|
||||
# home.packages = with pkgs; [
|
||||
# cookiecutter # A generic project scaffolding tool.
|
||||
# ];
|
||||
|
||||
# Home Manager needs a bit of information about you and the
|
||||
# paths it should manage.
|
||||
home.username = "foo-dogsquared";
|
||||
home.homeDirectory = "/home/foo-dogsquared";
|
||||
|
||||
# This value determines the Home Manager release that your
|
||||
# configuration is compatible with. This helps avoid breakage
|
||||
# when a new Home Manager release introduces backwards
|
||||
# incompatible changes.
|
||||
#
|
||||
# You can update Home Manager without changing this value. See
|
||||
# the Home Manager release notes for a list of state version
|
||||
# changes in each release.
|
||||
home.stateVersion = "20.09";
|
||||
}
|
10
modules/default.nix
Normal file
10
modules/default.nix
Normal file
@ -0,0 +1,10 @@
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./desktop
|
||||
./dev
|
||||
./editors
|
||||
./shell
|
||||
];
|
||||
}
|
11
modules/desktop/default.nix
Normal file
11
modules/desktop/default.nix
Normal file
@ -0,0 +1,11 @@
|
||||
# My apps on my natural desktop environment.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./files.nix
|
||||
./fonts.nix
|
||||
./graphics.nix
|
||||
./music.nix
|
||||
];
|
||||
}
|
28
modules/desktop/files.nix
Normal file
28
modules/desktop/files.nix
Normal file
@ -0,0 +1,28 @@
|
||||
# A set of tools related to files: managing metadata, backing them up, filesystems, and whatnot.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.modules.desktop.files;
|
||||
in {
|
||||
options.modules.desktop.files = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
exfat # A filesystem usually found on external hard drives.
|
||||
exiftool # A file metadata reader/writer/manager/helicopter.
|
||||
hfsprogs # Some programs for HFS/NFS-based filesystems.
|
||||
ntfs3g # A filesystem for Windows-based systems.
|
||||
syncthing # A peer-to-peer synchro summoning.
|
||||
xfce.thunar # A graphical file manager.
|
||||
xfce.thunar-volman # A Thunar plugin on volume management for external devices.
|
||||
udiskie # An automounter for external devices with authentication.
|
||||
];
|
||||
};
|
||||
}
|
22
modules/desktop/fonts.nix
Normal file
22
modules/desktop/fonts.nix
Normal file
@ -0,0 +1,22 @@
|
||||
# My selection of fonts for this setup.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.desktop.fonts = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.desktop.fonts.enable {
|
||||
home.packages = with pkgs; [
|
||||
fira-code # The programming font with fancy symbols.
|
||||
ibm-plex # IBM's face.
|
||||
noto-fonts # It's all about family and that's what so powerful about it.
|
||||
noto-fonts-cjk # The universal font, Japanese-Chinese-Korean version.
|
||||
stix-otf # The font you need for them math moonrunes.
|
||||
];
|
||||
};
|
||||
}
|
43
modules/desktop/graphics.nix
Normal file
43
modules/desktop/graphics.nix
Normal file
@ -0,0 +1,43 @@
|
||||
# Being a hack fraud in "jack of all trades, master of none" thing, I also create "graphics".
|
||||
# This includes tools for raster, vector, and 3D modelling.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.modules.desktop.graphics;
|
||||
in {
|
||||
options.modules.desktop.graphics =
|
||||
let mkBoolDefault = bool: mkOption {
|
||||
type = types.bool;
|
||||
default = bool;
|
||||
}; in {
|
||||
enable = mkBoolDefault false;
|
||||
raster.enable = mkBoolDefault false;
|
||||
vector.enable = mkBoolDefault false;
|
||||
_3d.enable = mkBoolDefault false;
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs;
|
||||
[
|
||||
font-manager # Self-explanatory name is self-explanatory.
|
||||
imagemagick # A command-line tool for manipulating images.
|
||||
] ++
|
||||
|
||||
(if cfg.raster.enable then [
|
||||
gimp # Adobe Photoshop replacement.
|
||||
krita # A good painting program useful for "pure" digital arts.
|
||||
aseprite # A pixel art editor.
|
||||
] else []) ++
|
||||
|
||||
(if cfg.vector.enable then [
|
||||
inkscape # Adobe Illustrator (or Affinity Designer) replacement.
|
||||
] else []) ++
|
||||
|
||||
(if cfg._3d.enable then [
|
||||
blender # It's a great 3D model editor.
|
||||
goxel # It's a great voxel editor.
|
||||
] else []);
|
||||
};
|
||||
}
|
36
modules/desktop/music.nix
Normal file
36
modules/desktop/music.nix
Normal file
@ -0,0 +1,36 @@
|
||||
# I create "music" (with no experience whatsoever) so here's my "music" workflow.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.modules.desktop.music;
|
||||
in {
|
||||
options.modules.desktop.music =
|
||||
let mkBoolDefault = bool: mkOption {
|
||||
type = types.bool;
|
||||
default = bool;
|
||||
}; in {
|
||||
enable = mkBoolDefault false;
|
||||
composition = mkBoolDefault false;
|
||||
production = mkBoolDefault false;
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs;
|
||||
(if cfg.composition.enable then [
|
||||
musescore # A music composer for creating musical cheatsheets.
|
||||
soundfont-fluid # A soundfont for it or something.
|
||||
supercollider # Programming platform for synthesizing them 'zics.
|
||||
] else []) ++
|
||||
|
||||
(if cfg.production.enable then [
|
||||
ardour # A DAW focuses on hardware recording but it can be used for something else.
|
||||
carla # A plugin host useful for a consistent hub for them soundfonts and SFZs.
|
||||
helm # A great synthesizer plugin.
|
||||
|
||||
# As of 2020-07-03, lmms has some trouble regarding Qt or something so at least use the "unstable" channel just to be safe.
|
||||
# lmms
|
||||
] else []);
|
||||
};
|
||||
}
|
20
modules/dev/base.nix
Normal file
20
modules/dev/base.nix
Normal file
@ -0,0 +1,20 @@
|
||||
# The utmost requirements for a development workflow.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.dev.base = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.dev.base.enable {
|
||||
home.packages = with pkgs; [
|
||||
cookiecutter # A project scaffolding tool.
|
||||
gnumake # Make your life easier with GNU Make.
|
||||
universal-ctags # Enable fast traveling to your code (assuming written in a supported language).
|
||||
];
|
||||
};
|
||||
}
|
22
modules/dev/cc.nix
Normal file
22
modules/dev/cc.nix
Normal file
@ -0,0 +1,22 @@
|
||||
# My stuff for C and C++.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.dev.cc = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.dev.cc.enable {
|
||||
home.packages = with pkgs; [
|
||||
cmake # Yo dawg, I heard you like Make.
|
||||
# clang # A C compiler frontend for LLVM.
|
||||
gcc # A compiler toolchain.
|
||||
gdb # GNU Debugger.
|
||||
llvmPackages.libcxx # When GCC has become too bloated for someone's taste.
|
||||
];
|
||||
};
|
||||
}
|
13
modules/dev/default.nix
Normal file
13
modules/dev/default.nix
Normal file
@ -0,0 +1,13 @@
|
||||
{ config, lib, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./base.nix
|
||||
./cc.nix
|
||||
./documentation.nix
|
||||
./gamedev.nix
|
||||
./javascript.nix
|
||||
./lisp.nix
|
||||
./rust.nix
|
||||
];
|
||||
}
|
38
modules/dev/documentation.nix
Normal file
38
modules/dev/documentation.nix
Normal file
@ -0,0 +1,38 @@
|
||||
# My stuff for documentation workflows.
|
||||
# I mean, documentation is part of the development life, right?
|
||||
# Mainly includes markup languages and whatnot.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.modules.dev.documentation;
|
||||
in
|
||||
{
|
||||
options.modules.dev.documentation =
|
||||
let mkBoolOption = bool: mkOption {
|
||||
type = types.bool;
|
||||
default = bool;
|
||||
}; in {
|
||||
enable = mkBoolOption false;
|
||||
|
||||
# Since my usual LaTeX needs are somewhat big, I'm keeping it as a separate option.
|
||||
latex.enable = mkBoolOption false;
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
asciidoctor # Keeping Asciidoc alive with the improved version.
|
||||
hugo # An SSG for your DDD (documentation-driven development) workflow.
|
||||
pandoc # The Swiss army knife for document conversion.
|
||||
|
||||
# TODO: Make Neuron its own package.
|
||||
(let neuronSrc = builtins.fetchTarball "https://github.com/srid/neuron/archive/master.tar.gz";
|
||||
in import neuronSrc {}) # Neurons and zettels are good for the brain.
|
||||
] ++
|
||||
|
||||
(if cfg.latex.enable then [
|
||||
texlive.combined.scheme-medium # The all-in-one LaTeX distribution for your offline typesetting needs.
|
||||
] else []);
|
||||
};
|
||||
}
|
31
modules/dev/gamedev.nix
Normal file
31
modules/dev/gamedev.nix
Normal file
@ -0,0 +1,31 @@
|
||||
# I've yet to delve into game development but here we are.
|
||||
# This contains several toolchains such as Unity, Godot Engine, and Love.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.modules.dev.game-dev;
|
||||
in
|
||||
{
|
||||
options.modules.dev.game-dev =
|
||||
let mkBoolOption = bool: mkOption {
|
||||
type = types.bool;
|
||||
default = bool;
|
||||
}; in {
|
||||
godot.enable = mkBoolOption false;
|
||||
unity3d.enable = mkBoolOption false;
|
||||
};
|
||||
|
||||
config = {
|
||||
home.packages = with pkgs;
|
||||
(if cfg.godot.enable then [
|
||||
godot # The Godot, not to be confused with a certain prosecutor.
|
||||
] else []) ++
|
||||
|
||||
(if cfg.unity3d.enable then [
|
||||
unity3d
|
||||
unityhub
|
||||
] else []);
|
||||
};
|
||||
}
|
20
modules/dev/java.nix
Normal file
20
modules/dev/java.nix
Normal file
@ -0,0 +1,20 @@
|
||||
# Java is a rice variant, a coffee blend, an island, and a programming language.
|
||||
# It sure is a flexible thing.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.dev.java = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.dev.java.enable {
|
||||
home.packages = [
|
||||
jdk # The Java Development Kit.
|
||||
jre # The Java Runtime Environment for running Java apps.
|
||||
];
|
||||
};
|
||||
}
|
31
modules/dev/javascript.nix
Normal file
31
modules/dev/javascript.nix
Normal file
@ -0,0 +1,31 @@
|
||||
# JavaScript, the poster boy of hated languages...
|
||||
# I think it's pretty great, when it works.
|
||||
# Otherwise, it is a disaster from its syntax and the massive ecosystem among others.
|
||||
# Since I use/experiment with the ecosystem so stuff like Node and Deno are combined into one module file.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.modules.dev.javascript;
|
||||
in
|
||||
{
|
||||
options.modules.dev.javascript =
|
||||
let mkBoolOption = bool: mkOption {
|
||||
type = types.bool;
|
||||
default = bool;
|
||||
}; in {
|
||||
deno.enable = mkBoolOption false;
|
||||
node.enable = mkBoolOption false;
|
||||
};
|
||||
|
||||
config = {
|
||||
home.packages = with pkgs;
|
||||
(if cfg.deno.enable then [
|
||||
deno # The Deltarune of Node.
|
||||
] else []) ++
|
||||
|
||||
(if cfg.node.enable then [
|
||||
node # The JavaScript framework/runtime where you don't have to kill. :)
|
||||
] else []);
|
||||
};
|
||||
}
|
36
modules/dev/lisp.nix
Normal file
36
modules/dev/lisp.nix
Normal file
@ -0,0 +1,36 @@
|
||||
# Lisp is great, easy to learn, and weird.
|
||||
# I've been using it to study creating languages and the famous SICP book.
|
||||
# FUN FACT: Lisp is a family of languages with those parenthesis representing the mouth lisp, demonstrating how genetics work.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.modules.dev.lisp;
|
||||
in
|
||||
{
|
||||
options.modules.dev.lisp =
|
||||
let mkBoolDefault = bool: mkOption {
|
||||
type = types.bool;
|
||||
default = bool;
|
||||
}; in {
|
||||
clojure.enable = mkBoolDefault false;
|
||||
guile.enable = mkBoolDefault false;
|
||||
racket.enable = mkBoolDefault false;
|
||||
};
|
||||
|
||||
config = {
|
||||
home.packages = with pkgs;
|
||||
(if cfg.clojure.enable then [
|
||||
clojure # Improved Java version.
|
||||
] else []) ++
|
||||
|
||||
(if cfg.guile.enable then [
|
||||
guile # A general-purpose language for stuff, named after a certain American pop culture icon.
|
||||
] else []) ++
|
||||
|
||||
(if cfg.racket.enable then [
|
||||
racket # A DSL for DSLs.
|
||||
] else []);
|
||||
};
|
||||
}
|
25
modules/dev/rust.nix
Normal file
25
modules/dev/rust.nix
Normal file
@ -0,0 +1,25 @@
|
||||
# Ah yes, Rust...
|
||||
# The programming language that made me appreciate/tolerate C++ even more.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.dev.rust = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.dev.rust.enable {
|
||||
home.packages = with pkgs; [
|
||||
rustup
|
||||
];
|
||||
|
||||
programs.zsh.sessionVariables = mkIf config.modules.shell.zsh.enable {
|
||||
CARGO_HOME = "${config.xdg.dataHome}/cargo";
|
||||
RUSTUP_HOME = "${config.xdg.dataHome}/rustup";
|
||||
PATH = [ "$CARGO_HOME/bin" ];
|
||||
};
|
||||
};
|
||||
}
|
20
modules/editors/default.nix
Normal file
20
modules/editors/default.nix
Normal file
@ -0,0 +1,20 @@
|
||||
# All of my text editors (and IDEs) modules are to be put here.
|
||||
# From Visual Studio Code, Emacs, Neovim, and whatnot.
|
||||
# The entryway to all of your text editors and IDEs.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
imports = [
|
||||
./emacs.nix
|
||||
./neovim.nix
|
||||
./vscode.nix
|
||||
];
|
||||
|
||||
options.modules.editors = {
|
||||
default = mkOption {
|
||||
type = types.str;
|
||||
default = "vim";
|
||||
};
|
||||
};
|
||||
}
|
64
modules/editors/emacs.nix
Normal file
64
modules/editors/emacs.nix
Normal file
@ -0,0 +1,64 @@
|
||||
# modules/editors/emacs.nix - https://gnu.org/emacs/
|
||||
# Ah yes, the bane of my endless configuration hell (or heaven, whichever your personal preferences).
|
||||
# Or specifically, Org-mode...
|
||||
# Doom Emacs saved me from being a configuration demon.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.editors.emacs = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.editors.emacs.enable {
|
||||
home.packages = with pkgs; [
|
||||
# Doom dependencies
|
||||
git
|
||||
(ripgrep.override { withPCRE2 = true; })
|
||||
gnutls
|
||||
|
||||
# Optional depedencies
|
||||
fd # faster projectile
|
||||
imagemagick # image-dired
|
||||
# (lib.mkIf (config.programs.gnupg.agent.enable)
|
||||
# pinentry_emacs) # gnupg-emacs
|
||||
zstd # for undo-fu-sessions
|
||||
|
||||
# Module dependencies
|
||||
## :checkers spell
|
||||
aspell
|
||||
aspellDicts.en
|
||||
aspellDicts.en-computers
|
||||
aspellDicts.en-science
|
||||
|
||||
## :checkers grammar
|
||||
languagetool
|
||||
|
||||
## :tools editorconfig
|
||||
editorconfig-core-c
|
||||
|
||||
## :tools lookup & :lang org+roam
|
||||
sqlite
|
||||
] ++
|
||||
|
||||
## :lang javascript
|
||||
(if config.modules.dev.javascript.node.enable then [
|
||||
nodePackages.javascript-typescript-langserver # The LSP for JS/TS.
|
||||
] else []) ++
|
||||
|
||||
## :lang cc
|
||||
(if config.modules.dev.cc.enable then [
|
||||
ccls
|
||||
] else []);
|
||||
|
||||
|
||||
# Placing the Doom Emacs config.
|
||||
xdg.configFile."doom" = {
|
||||
source = ../../config/emacs;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
}
|
32
modules/editors/neovim.nix
Normal file
32
modules/editors/neovim.nix
Normal file
@ -0,0 +1,32 @@
|
||||
# modules/editors/vim.nix - https://neovim.org
|
||||
# (Neo)Vim is love, (Neo)Vim is life.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.editors.neovim = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.editors.neovim.enable {
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
editorconfig-core-c # Editorconfig is a MUST, you feel me?!
|
||||
];
|
||||
};
|
||||
|
||||
programs.neovim = {
|
||||
enable = true;
|
||||
withPython3 = true;
|
||||
withRuby = true;
|
||||
};
|
||||
|
||||
xdg.configFile."nvim" = {
|
||||
source = ../../config/nvim;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
}
|
42
modules/editors/vscode.nix
Normal file
42
modules/editors/vscode.nix
Normal file
@ -0,0 +1,42 @@
|
||||
# Visual Studio Code is the middle ground between a text editor and an IDE.
|
||||
# Perfect for managing medium-sized software projects.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
cfg = config.modules.editors.vscode;
|
||||
in {
|
||||
options.modules.editors.vscode = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
# I'll be using the home-manager module for this one since it already did the work for me.
|
||||
# If I were to create one from scratch, it'll most likely end up similar anyways.
|
||||
config = mkIf cfg.enable {
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
extensions = with pkgs.vscode-extensions; [
|
||||
# Material Icon theme
|
||||
PKief.material-icon-theme
|
||||
|
||||
# Material theme that comes with multiple variants
|
||||
Equinusocio.vsc-material-theme
|
||||
|
||||
# The official implementation for the Nord color scheme
|
||||
arcticicestudio.nord-visual-studio-code
|
||||
|
||||
# ESLint
|
||||
dbaeumer.vscode-eslint
|
||||
|
||||
# Supercharged Git integration into the editor
|
||||
eamodio.gitlens
|
||||
|
||||
# A code formatter
|
||||
esbenp.prettier-vscode
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
32
modules/shell/base.nix
Normal file
32
modules/shell/base.nix
Normal file
@ -0,0 +1,32 @@
|
||||
# Here are the base packages for my shell workflow.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.shell.base = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.shell.base.enable {
|
||||
home.packages = with pkgs; [
|
||||
aspell # Want to check spelling on the command-line?
|
||||
bat # cat(1) with wings.
|
||||
buku # A developer-oriented browser-independent bookmark manager.
|
||||
exa # ls(1) after an exodus.
|
||||
fd # find(1) after a cognitive behavioral therpay.
|
||||
fzf # A fuzzy finder, not furry finder which is a common misconception.
|
||||
hexyl # Binary viewer on the command-line.
|
||||
gopass # The improved version of Password Store which is a password manager for hipsters.
|
||||
maim # A command-line interface for screenshots.
|
||||
jq # A command-line interface for parsing JSON.
|
||||
pup # A command-line interface for parsing HTML.
|
||||
ripgrep # Super-fast full-text searcher.
|
||||
sqlite # Battle-tested cute little database that can grow into an abomination of a data spaghetti.
|
||||
tree # I'm not a scammer, I swear.
|
||||
youtube-dl # A command-line interface for downloading videos.
|
||||
];
|
||||
};
|
||||
}
|
12
modules/shell/default.nix
Normal file
12
modules/shell/default.nix
Normal file
@ -0,0 +1,12 @@
|
||||
# All of the command-line tools will be put here.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
imports = [
|
||||
./base.nix
|
||||
./git.nix
|
||||
./lf.nix
|
||||
./zsh.nix
|
||||
];
|
||||
}
|
21
modules/shell/git.nix
Normal file
21
modules/shell/git.nix
Normal file
@ -0,0 +1,21 @@
|
||||
# modules/shell/git.nix
|
||||
# Git is great, Git is good, and it is not made out of wood.
|
||||
# A version control system with the description of the closet furry behind the Linux kernel as the name.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.shell.git = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.shell.git.enable {
|
||||
home.packages = with pkgs; [
|
||||
gitAndTools.delta
|
||||
gitAndTools.diff-so-fancy
|
||||
];
|
||||
};
|
||||
}
|
24
modules/shell/lf.nix
Normal file
24
modules/shell/lf.nix
Normal file
@ -0,0 +1,24 @@
|
||||
# modules/shell/git.nix
|
||||
# A file manager for hipsters.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.shell.lf = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf config.modules.shell.lf.enable {
|
||||
home.packages = with pkgs; [
|
||||
lf
|
||||
];
|
||||
|
||||
xdg.configFile."lf" = {
|
||||
source = ../../config/lf;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
}
|
23
modules/shell/zsh.nix
Normal file
23
modules/shell/zsh.nix
Normal file
@ -0,0 +1,23 @@
|
||||
# The Zoomer shell is cool for them prompts.
|
||||
{ config, options, lib, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.modules.shell.zsh = {
|
||||
enable = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
# Going to use the home-manager module for zsh since it is cool.
|
||||
config = mkIf config.modules.shell.zsh.enable {
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
enableAutosuggestions = true;
|
||||
dotDir = "${config.xdg.configHome}";
|
||||
history.path = "${config.xdg.dataHome}/zsh/history";
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user