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/dev.nix
|
||||||
./modules/shell.nix
|
./modules/shell.nix
|
||||||
./modules/services.nix
|
./modules/services.nix
|
||||||
|
./modules/scripts.nix
|
||||||
./jawz.nix
|
./jawz.nix
|
||||||
];
|
];
|
||||||
home-manager = {
|
home-manager = {
|
||||||
|
|||||||
@ -10,7 +10,6 @@ in {
|
|||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../base.nix
|
../../base.nix
|
||||||
../../gnome.nix
|
../../gnome.nix
|
||||||
# ../../services/systemd-user/tasks.nix
|
|
||||||
];
|
];
|
||||||
my = {
|
my = {
|
||||||
emacs.enable = true;
|
emacs.enable = true;
|
||||||
@ -22,18 +21,21 @@ in {
|
|||||||
internet.enable = true;
|
internet.enable = true;
|
||||||
multimedia.enable = true;
|
multimedia.enable = true;
|
||||||
office.enable = true;
|
office.enable = true;
|
||||||
# misc.enable = true;
|
misc.enable = true;
|
||||||
};
|
};
|
||||||
dev = {
|
dev = {
|
||||||
haskell.enable = true;
|
haskell.enable = true;
|
||||||
nix.enable = true;
|
nix.enable = true;
|
||||||
python.enable = true;
|
python.enable = true;
|
||||||
gameDev.enable = true;
|
gameDev.enable = true;
|
||||||
|
sh.enable = true;
|
||||||
|
javascript.enable = false;
|
||||||
|
docker.enable = false;
|
||||||
};
|
};
|
||||||
shell = {
|
shell = {
|
||||||
exercism.enable = true;
|
exercism.enable = true;
|
||||||
# multimedia.enable = true;
|
multimedia.enable = true;
|
||||||
# tools.enable = true;
|
tools.enable = true;
|
||||||
};
|
};
|
||||||
services = {
|
services = {
|
||||||
network.enable = true;
|
network.enable = true;
|
||||||
@ -41,6 +43,7 @@ in {
|
|||||||
printing.enable = true;
|
printing.enable = true;
|
||||||
sound.enable = true;
|
sound.enable = true;
|
||||||
};
|
};
|
||||||
|
scripts = { tasks.enable = true; };
|
||||||
};
|
};
|
||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
@ -104,7 +107,6 @@ in {
|
|||||||
torrenttools # create torrent files from the terminal!
|
torrenttools # create torrent files from the terminal!
|
||||||
vcsi # video thumbnails for torrents, can I replace it with ^?
|
vcsi # video thumbnails for torrents, can I replace it with ^?
|
||||||
|
|
||||||
(writeScriptBin "tasks" (builtins.readFile ../../scripts/tasks.sh))
|
|
||||||
(writeScriptBin "ffmpeg4discord"
|
(writeScriptBin "ffmpeg4discord"
|
||||||
(builtins.readFile ../../scripts/ffmpeg4discord.py))
|
(builtins.readFile ../../scripts/ffmpeg4discord.py))
|
||||||
(writeScriptBin "ffmpreg"
|
(writeScriptBin "ffmpreg"
|
||||||
@ -115,18 +117,6 @@ in {
|
|||||||
(writeScriptBin "pika-list"
|
(writeScriptBin "pika-list"
|
||||||
(builtins.readFile ../../scripts/pika-list.sh))
|
(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;
|
]) ++ (with pkgs.python3Packages;
|
||||||
[
|
[
|
||||||
(buildPythonApplication rec {
|
(buildPythonApplication rec {
|
||||||
@ -137,20 +127,8 @@ in {
|
|||||||
buildInputs = [ setuptools ];
|
buildInputs = [ setuptools ];
|
||||||
propagatedBuildInputs = [ pyyaml types-pyyaml ];
|
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;
|
internet.enable = lib.mkDefault false;
|
||||||
multimedia.enable = lib.mkDefault false;
|
multimedia.enable = lib.mkDefault false;
|
||||||
office.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, ... }: {
|
{ 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.emacs.enable = lib.mkDefault false;
|
||||||
my.dev = {
|
my.dev = {
|
||||||
haskell.enable = lib.mkDefault false;
|
sh.enable = lib.mkDefault false;
|
||||||
nix.enable = lib.mkDefault false;
|
nix.enable = lib.mkDefault false;
|
||||||
|
docker.enable = lib.mkDefault false;
|
||||||
python.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, ... }: {
|
{ config, lib, pkgs, ... }: {
|
||||||
options.my.dev.python.enable = lib.mkEnableOption "enable";
|
options.my.dev.python.enable = lib.mkEnableOption "enable";
|
||||||
config = lib.mkIf config.my.dev.python.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
|
pipenv # python development workflow for humans
|
||||||
(python3.withPackages (ps:
|
(python3.withPackages (ps:
|
||||||
with ps; [
|
with ps; [
|
||||||
@ -16,6 +16,9 @@
|
|||||||
# poetry # dependency management made easy
|
# poetry # dependency management made easy
|
||||||
# pytest # framework for writing tests
|
# 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, ... }: {
|
{ config, lib, pkgs, ... }: {
|
||||||
options.my.emacs.enable = lib.mkEnableOption "enable";
|
options.my.emacs.enable = lib.mkEnableOption "enable";
|
||||||
config = lib.mkIf config.my.emacs.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
|
fd # modern find, faster searches
|
||||||
fzf # fuzzy finder! super cool and useful
|
fzf # fuzzy finder! super cool and useful
|
||||||
ripgrep # modern grep
|
ripgrep # modern grep
|
||||||
@ -14,6 +14,14 @@
|
|||||||
xorg.xwininfo
|
xorg.xwininfo
|
||||||
xdotool
|
xdotool
|
||||||
xclip
|
xclip
|
||||||
|
|
||||||
|
# lsps
|
||||||
|
yaml-language-server
|
||||||
|
markdownlint-cli
|
||||||
|
])) ++ (with pkgs.nodePackages; [
|
||||||
|
vscode-json-languageserver
|
||||||
|
# linters
|
||||||
|
prettier
|
||||||
]);
|
]);
|
||||||
services.emacs = {
|
services.emacs = {
|
||||||
enable = true;
|
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, ... }: {
|
{ config, lib, pkgs, ... }: {
|
||||||
imports = [ ./shell/exercism.nix ./shell/multimedia.nix ./shell/tools.nix ];
|
imports = [ ./shell/exercism.nix ./shell/multimedia.nix ./shell/tools.nix ];
|
||||||
my = {
|
my.shell = {
|
||||||
shell = {
|
|
||||||
exercism.enable = lib.mkDefault false;
|
exercism.enable = lib.mkDefault false;
|
||||||
multimedia.enable = lib.mkDefault false;
|
multimedia.enable = lib.mkDefault false;
|
||||||
tools.enable = lib.mkDefault false;
|
tools.enable = lib.mkDefault false;
|
||||||
};
|
};
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,14 @@
|
|||||||
{ config, lib, pkgs, ... }: {
|
{ config, lib, pkgs, ... }: {
|
||||||
options.my.shell.multimedia.enable = lib.mkEnableOption "enable";
|
options.my.shell.multimedia.enable = lib.mkEnableOption "enable";
|
||||||
config = lib.mkIf config.my.shell.multimedia.enable {
|
config = lib.mkIf config.my.shell.multimedia.enable {
|
||||||
users.users.jawz.packages = with pkgs; [
|
users.users.jawz.packages = with pkgs;
|
||||||
|
[
|
||||||
gallery-dl # similar to yt-dlp but for most image gallery websites
|
gallery-dl # similar to yt-dlp but for most image gallery websites
|
||||||
yt-dlp # downloads videos from most video websites
|
yt-dlp # downloads videos from most video websites
|
||||||
ffmpeg # not ffmpreg, the coolest video conversion tool!
|
ffmpeg # not ffmpreg, the coolest video conversion tool!
|
||||||
imagemagick # photoshop what??
|
imagemagick # photoshop what??
|
||||||
|
] ++ (with pkgs.python3Packages;
|
||||||
|
[
|
||||||
(buildPythonApplication rec {
|
(buildPythonApplication rec {
|
||||||
pname = "ffpb";
|
pname = "ffpb";
|
||||||
version = "0.4.1";
|
version = "0.4.1";
|
||||||
@ -17,6 +20,6 @@
|
|||||||
buildInputs = [ setuptools ];
|
buildInputs = [ setuptools ];
|
||||||
propagatedBuildInputs = [ tqdm ];
|
propagatedBuildInputs = [ tqdm ];
|
||||||
})
|
})
|
||||||
];
|
]);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
rmlint # amazing dupe finder that integrates well with BTRFS
|
rmlint # amazing dupe finder that integrates well with BTRFS
|
||||||
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
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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