further modularization + systemd template
This commit is contained in:
parent
0380c32b9a
commit
02d600cc73
1
base.nix
1
base.nix
@ -5,6 +5,7 @@
|
||||
./modules/dev.nix
|
||||
./modules/shell.nix
|
||||
./modules/services.nix
|
||||
./modules/scripts.nix
|
||||
./jawz.nix
|
||||
];
|
||||
home-manager = {
|
||||
|
||||
@ -10,7 +10,6 @@ in {
|
||||
./hardware-configuration.nix
|
||||
../../base.nix
|
||||
../../gnome.nix
|
||||
# ../../services/systemd-user/tasks.nix
|
||||
];
|
||||
my = {
|
||||
emacs.enable = true;
|
||||
@ -22,18 +21,21 @@ in {
|
||||
internet.enable = true;
|
||||
multimedia.enable = true;
|
||||
office.enable = true;
|
||||
# misc.enable = true;
|
||||
misc.enable = true;
|
||||
};
|
||||
dev = {
|
||||
haskell.enable = true;
|
||||
nix.enable = true;
|
||||
python.enable = true;
|
||||
gameDev.enable = true;
|
||||
sh.enable = true;
|
||||
javascript.enable = false;
|
||||
docker.enable = false;
|
||||
};
|
||||
shell = {
|
||||
exercism.enable = true;
|
||||
# multimedia.enable = true;
|
||||
# tools.enable = true;
|
||||
multimedia.enable = true;
|
||||
tools.enable = true;
|
||||
};
|
||||
services = {
|
||||
network.enable = true;
|
||||
@ -41,6 +43,7 @@ in {
|
||||
printing.enable = true;
|
||||
sound.enable = true;
|
||||
};
|
||||
scripts = { tasks.enable = true; };
|
||||
};
|
||||
|
||||
networking = {
|
||||
@ -104,7 +107,6 @@ in {
|
||||
torrenttools # create torrent files from the terminal!
|
||||
vcsi # video thumbnails for torrents, can I replace it with ^?
|
||||
|
||||
(writeScriptBin "tasks" (builtins.readFile ../../scripts/tasks.sh))
|
||||
(writeScriptBin "ffmpeg4discord"
|
||||
(builtins.readFile ../../scripts/ffmpeg4discord.py))
|
||||
(writeScriptBin "ffmpreg"
|
||||
@ -115,18 +117,6 @@ in {
|
||||
(writeScriptBin "pika-list"
|
||||
(builtins.readFile ../../scripts/pika-list.sh))
|
||||
|
||||
# SH
|
||||
bashdb # autocomplete
|
||||
shellcheck # linting
|
||||
shfmt # a shell parser and formatter
|
||||
|
||||
# DOCKER
|
||||
dockfmt
|
||||
|
||||
# JS
|
||||
nodejs # not as bad as I thought
|
||||
jq # linting
|
||||
|
||||
]) ++ (with pkgs.python3Packages;
|
||||
[
|
||||
(buildPythonApplication rec {
|
||||
@ -137,20 +127,8 @@ in {
|
||||
buildInputs = [ setuptools ];
|
||||
propagatedBuildInputs = [ pyyaml types-pyyaml ];
|
||||
})
|
||||
|
||||
]) ++ (with pkgs.nodePackages; [
|
||||
# Language servers
|
||||
dockerfile-language-server-nodejs
|
||||
yaml-language-server
|
||||
bash-language-server
|
||||
vscode-json-languageserver
|
||||
pyright
|
||||
|
||||
markdownlint-cli # Linter
|
||||
prettier # Linter
|
||||
pnpm # Package manager
|
||||
]);
|
||||
}; # <--- end of package list
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
internet.enable = lib.mkDefault false;
|
||||
multimedia.enable = lib.mkDefault false;
|
||||
office.enable = lib.mkDefault false;
|
||||
misx.enable = lib.mkDefault false;
|
||||
misc.enable = lib.mkDefault false;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@ -1,9 +1,20 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
imports = [ ./dev/haskell.nix ./dev/nix.nix ./dev/python.nix ./emacs.nix ];
|
||||
imports = [
|
||||
./dev/sh.nix
|
||||
./dev/nix.nix
|
||||
./dev/docker.nix
|
||||
./dev/python.nix
|
||||
./dev/haskell.nix
|
||||
./dev/javascript.nix
|
||||
./emacs.nix
|
||||
];
|
||||
my.emacs.enable = lib.mkDefault false;
|
||||
my.dev = {
|
||||
haskell.enable = lib.mkDefault false;
|
||||
sh.enable = lib.mkDefault false;
|
||||
nix.enable = lib.mkDefault false;
|
||||
docker.enable = lib.mkDefault false;
|
||||
python.enable = lib.mkDefault false;
|
||||
haskell.enable = lib.mkDefault false;
|
||||
javascript.enable = lib.mkDefault false;
|
||||
};
|
||||
}
|
||||
|
||||
7
modules/dev/docker.nix
Normal file
7
modules/dev/docker.nix
Normal file
@ -0,0 +1,7 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
options.my.dev.docker.enable = lib.mkEnableOption "enable";
|
||||
config = lib.mkIf config.my.dev.docker.enable {
|
||||
users.users.jawz.packages = (with pkgs; [ dockfmt ])
|
||||
++ (with pkgs.nodePackages; [ dockerfile-language-server-nodejs ]);
|
||||
};
|
||||
}
|
||||
7
modules/dev/javascript.nix
Normal file
7
modules/dev/javascript.nix
Normal file
@ -0,0 +1,7 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
options.my.dev.javascript.enable = lib.mkEnableOption "enable";
|
||||
config = lib.mkIf config.my.dev.javascript.enable {
|
||||
users.users.jawz.packages = (with pkgs; [ nodejs ])
|
||||
++ (with pkgs.nodePackages; [ pnpm ]);
|
||||
};
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
options.my.dev.python.enable = lib.mkEnableOption "enable";
|
||||
config = lib.mkIf config.my.dev.python.enable {
|
||||
users.users.jawz.packages = with pkgs; ([
|
||||
users.users.jawz.packages = (with pkgs; ([
|
||||
pipenv # python development workflow for humans
|
||||
(python3.withPackages (ps:
|
||||
with ps; [
|
||||
@ -16,6 +16,9 @@
|
||||
# poetry # dependency management made easy
|
||||
# pytest # framework for writing tests
|
||||
]))
|
||||
]);
|
||||
])) ++ (with pkgs.nodePackages;
|
||||
[
|
||||
pyright # LSP
|
||||
]);
|
||||
};
|
||||
}
|
||||
|
||||
10
modules/dev/sh.nix
Normal file
10
modules/dev/sh.nix
Normal file
@ -0,0 +1,10 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
options.my.dev.sh.enable = lib.mkEnableOption "enable";
|
||||
config = lib.mkIf config.my.dev.sh.enable {
|
||||
users.users.jawz.packages = (with pkgs; [
|
||||
bashdb # autocomplete
|
||||
shellcheck # linting
|
||||
shfmt # a shell parser and formatter
|
||||
]) ++ (with pkgs.nodePackages; [ bash-language-server ]);
|
||||
};
|
||||
}
|
||||
@ -1,7 +1,7 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
options.my.emacs.enable = lib.mkEnableOption "enable";
|
||||
config = lib.mkIf config.my.emacs.enable {
|
||||
users.users.jawz.packages = with pkgs; ([
|
||||
users.users.jawz.packages = (with pkgs; ([
|
||||
fd # modern find, faster searches
|
||||
fzf # fuzzy finder! super cool and useful
|
||||
ripgrep # modern grep
|
||||
@ -14,6 +14,14 @@
|
||||
xorg.xwininfo
|
||||
xdotool
|
||||
xclip
|
||||
|
||||
# lsps
|
||||
yaml-language-server
|
||||
markdownlint-cli
|
||||
])) ++ (with pkgs.nodePackages; [
|
||||
vscode-json-languageserver
|
||||
# linters
|
||||
prettier
|
||||
]);
|
||||
services.emacs = {
|
||||
enable = true;
|
||||
|
||||
4
modules/scripts.nix
Normal file
4
modules/scripts.nix
Normal file
@ -0,0 +1,4 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
imports = [ ./scripts/tasks.nix ];
|
||||
my.scripts.tasks.enable = lib.mkDefault false;
|
||||
}
|
||||
46
modules/scripts/base.nix
Normal file
46
modules/scripts/base.nix
Normal file
@ -0,0 +1,46 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
options.my.script = {
|
||||
name = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "my-script";
|
||||
description = "Name of the script.";
|
||||
};
|
||||
timer = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "*:0/10";
|
||||
description = "Systemd timer schedule.";
|
||||
};
|
||||
description = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "A service that runs a script.";
|
||||
description = "Description of the service.";
|
||||
};
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.writeScriptBin "my-script" "echo Hello World";
|
||||
description = "Package containing the executable script.";
|
||||
};
|
||||
};
|
||||
config = {
|
||||
users.users.jawz.packages = [ config.my.script.package ];
|
||||
systemd.user = with config.my.script; {
|
||||
services."${name}" = {
|
||||
restartIfChanged = true;
|
||||
description = description;
|
||||
wantedBy = [ "default.target" ];
|
||||
path = [ pkgs.nix package ];
|
||||
serviceConfig = {
|
||||
Restart = "on-failure";
|
||||
RestartSec = 30;
|
||||
ExecStart = "${package}/bin/${name}";
|
||||
};
|
||||
};
|
||||
timers."${name}" = {
|
||||
enable = true;
|
||||
description = description;
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig = { OnCalendar = timer; };
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
13
modules/scripts/tasks.nix
Normal file
13
modules/scripts/tasks.nix
Normal file
@ -0,0 +1,13 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
imports = [ ./base.nix ];
|
||||
options.my.scripts.tasks.enable = lib.mkEnableOption "enable";
|
||||
config = lib.mkIf config.my.scripts.tasks.enable {
|
||||
my.script = {
|
||||
name = "tasks";
|
||||
timer = "*:0/10";
|
||||
description = "runs a bunch of organizing tasks on selected directories";
|
||||
package = (pkgs.writeScriptBin "tasks"
|
||||
(builtins.readFile ../../scripts/tasks.sh));
|
||||
};
|
||||
};
|
||||
}
|
||||
@ -1,10 +1,8 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
imports = [ ./shell/exercism.nix ./shell/multimedia.nix ./shell/tools.nix ];
|
||||
my = {
|
||||
shell = {
|
||||
exercism.enable = lib.mkDefault false;
|
||||
multimedia.enable = lib.mkDefault false;
|
||||
tools.enable = lib.mkDefault false;
|
||||
};
|
||||
my.shell = {
|
||||
exercism.enable = lib.mkDefault false;
|
||||
multimedia.enable = lib.mkDefault false;
|
||||
tools.enable = lib.mkDefault false;
|
||||
};
|
||||
}
|
||||
|
||||
@ -1,22 +1,25 @@
|
||||
{ config, lib, pkgs, ... }: {
|
||||
options.my.shell.multimedia.enable = lib.mkEnableOption "enable";
|
||||
config = lib.mkIf config.my.shell.multimedia.enable {
|
||||
users.users.jawz.packages = with pkgs; [
|
||||
gallery-dl # similar to yt-dlp but for most image gallery websites
|
||||
yt-dlp # downloads videos from most video websites
|
||||
ffmpeg # not ffmpreg, the coolest video conversion tool!
|
||||
imagemagick # photoshop what??
|
||||
(buildPythonApplication rec {
|
||||
pname = "ffpb";
|
||||
version = "0.4.1";
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-7eVqbLpMHS1sBw2vYS4cTtyVdnnknGtEI8190VlXflk=";
|
||||
};
|
||||
doCheck = false;
|
||||
buildInputs = [ setuptools ];
|
||||
propagatedBuildInputs = [ tqdm ];
|
||||
})
|
||||
];
|
||||
users.users.jawz.packages = with pkgs;
|
||||
[
|
||||
gallery-dl # similar to yt-dlp but for most image gallery websites
|
||||
yt-dlp # downloads videos from most video websites
|
||||
ffmpeg # not ffmpreg, the coolest video conversion tool!
|
||||
imagemagick # photoshop what??
|
||||
] ++ (with pkgs.python3Packages;
|
||||
[
|
||||
(buildPythonApplication rec {
|
||||
pname = "ffpb";
|
||||
version = "0.4.1";
|
||||
src = fetchPypi {
|
||||
inherit pname version;
|
||||
sha256 = "sha256-7eVqbLpMHS1sBw2vYS4cTtyVdnnknGtEI8190VlXflk=";
|
||||
};
|
||||
doCheck = false;
|
||||
buildInputs = [ setuptools ];
|
||||
propagatedBuildInputs = [ tqdm ];
|
||||
})
|
||||
]);
|
||||
};
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
rmlint # amazing dupe finder that integrates well with BTRFS
|
||||
tldr # man for retards
|
||||
trash-cli # oop! did not meant to delete that
|
||||
jq # linting
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
jawzTasks =
|
||||
pkgs.writeScriptBin "tasks" (builtins.readFile ../../scripts/tasks.sh);
|
||||
description = "Run a tasks script which keeps a lot of things organized";
|
||||
in {
|
||||
systemd.user = {
|
||||
services.tasks = {
|
||||
restartIfChanged = true;
|
||||
description = description;
|
||||
wantedBy = [ "default.target" ];
|
||||
path = [ pkgs.bash pkgs.nix jawzTasks ];
|
||||
serviceConfig = {
|
||||
Restart = "on-failure";
|
||||
RestartSec = 30;
|
||||
ExecStart = "${jawzTasks}/bin/tasks";
|
||||
};
|
||||
};
|
||||
timers.tasks = {
|
||||
enable = true;
|
||||
description = description;
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig = { OnCalendar = "*:0/10"; };
|
||||
};
|
||||
};
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user