diff --git a/base.nix b/base.nix index 007e10e..1e4436d 100644 --- a/base.nix +++ b/base.nix @@ -5,6 +5,7 @@ ./modules/dev.nix ./modules/shell.nix ./modules/services.nix + ./modules/scripts.nix ./jawz.nix ]; home-manager = { diff --git a/hosts/workstation/configuration.nix b/hosts/workstation/configuration.nix index 71bcfa9..178808c 100644 --- a/hosts/workstation/configuration.nix +++ b/hosts/workstation/configuration.nix @@ -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 + }; }; }; diff --git a/modules/apps.nix b/modules/apps.nix index b8c8ebc..5850b30 100644 --- a/modules/apps.nix +++ b/modules/apps.nix @@ -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; }; }; } diff --git a/modules/dev.nix b/modules/dev.nix index e8a7365..9b9813d 100644 --- a/modules/dev.nix +++ b/modules/dev.nix @@ -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; }; } diff --git a/modules/dev/docker.nix b/modules/dev/docker.nix new file mode 100644 index 0000000..e5c9f6e --- /dev/null +++ b/modules/dev/docker.nix @@ -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 ]); + }; +} diff --git a/modules/dev/javascript.nix b/modules/dev/javascript.nix new file mode 100644 index 0000000..c97269f --- /dev/null +++ b/modules/dev/javascript.nix @@ -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 ]); + }; +} diff --git a/modules/dev/python.nix b/modules/dev/python.nix index 30ed7fd..935f31e 100644 --- a/modules/dev/python.nix +++ b/modules/dev/python.nix @@ -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 + ]); }; } diff --git a/modules/dev/sh.nix b/modules/dev/sh.nix new file mode 100644 index 0000000..ea9398b --- /dev/null +++ b/modules/dev/sh.nix @@ -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 ]); + }; +} diff --git a/modules/emacs.nix b/modules/emacs.nix index fc6128f..b0506ce 100644 --- a/modules/emacs.nix +++ b/modules/emacs.nix @@ -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; diff --git a/modules/scripts.nix b/modules/scripts.nix new file mode 100644 index 0000000..f2028ff --- /dev/null +++ b/modules/scripts.nix @@ -0,0 +1,4 @@ +{ config, lib, pkgs, ... }: { + imports = [ ./scripts/tasks.nix ]; + my.scripts.tasks.enable = lib.mkDefault false; +} diff --git a/modules/scripts/base.nix b/modules/scripts/base.nix new file mode 100644 index 0000000..ddd0bc1 --- /dev/null +++ b/modules/scripts/base.nix @@ -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; }; + }; + }; + }; +} diff --git a/modules/scripts/tasks.nix b/modules/scripts/tasks.nix new file mode 100644 index 0000000..fe67830 --- /dev/null +++ b/modules/scripts/tasks.nix @@ -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)); + }; + }; +} diff --git a/modules/shell.nix b/modules/shell.nix index 0000d1c..746ebb5 100644 --- a/modules/shell.nix +++ b/modules/shell.nix @@ -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; }; } diff --git a/modules/shell/multimedia.nix b/modules/shell/multimedia.nix index d1ea4fa..306dfa9 100644 --- a/modules/shell/multimedia.nix +++ b/modules/shell/multimedia.nix @@ -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 ]; + }) + ]); }; } diff --git a/modules/shell/tools.nix b/modules/shell/tools.nix index 8bbb56b..0f4ba27 100644 --- a/modules/shell/tools.nix +++ b/modules/shell/tools.nix @@ -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 ]; }; } diff --git a/modules/systemd-user/tasks.nix b/modules/systemd-user/tasks.nix deleted file mode 100644 index c891655..0000000 --- a/modules/systemd-user/tasks.nix +++ /dev/null @@ -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"; }; - }; - }; -}