From 46cdbd8a09eb4578288e5a474703dd5129fcbb46 Mon Sep 17 00:00:00 2001 From: Danilo Reyes Date: Fri, 7 Jun 2024 17:07:21 -0600 Subject: [PATCH] probably broken, car ride modularizing --- base.nix | 70 +++++------ gnome.nix | 50 ++++---- home-manager.nix | 83 ++++++++++++ home-manager/default.nix | 125 ------------------ hosts/workstation/configuration.nix | 108 ++++++++-------- hosts/workstation/hardware-configuration.nix | 126 +++++++++++-------- modules/apps/office.nix | 11 +- modules/dev/docker.nix | 15 ++- modules/dev/haskell.nix | 14 ++- modules/dev/javascript.nix | 27 +++- modules/dev/nix.nix | 8 +- modules/dev/python.nix | 50 +++++--- modules/dev/sh.nix | 20 ++- modules/emacs.nix | 63 ++++++---- modules/scripts/download.nix | 42 ++++++- modules/scripts/find-dup-episode.nix | 18 +++ modules/scripts/manage-library.nix | 18 +++ modules/scripts/nextcloud-cronjob.nix | 20 +++ modules/scripts/run.nix | 11 +- modules/scripts/sub-sync.nix | 18 +++ modules/scripts/update-dns.nix | 18 +++ modules/shell/tools.nix | 71 ++++++++++- {hosts/workstation => pkgs}/obs-studio.nix | 13 +- 23 files changed, 639 insertions(+), 360 deletions(-) create mode 100644 home-manager.nix delete mode 100644 home-manager/default.nix create mode 100644 modules/scripts/find-dup-episode.nix create mode 100644 modules/scripts/manage-library.nix create mode 100644 modules/scripts/nextcloud-cronjob.nix create mode 100644 modules/scripts/sub-sync.nix create mode 100644 modules/scripts/update-dns.nix rename {hosts/workstation => pkgs}/obs-studio.nix (92%) diff --git a/base.nix b/base.nix index 8bebbcf..fdfe6bd 100644 --- a/base.nix +++ b/base.nix @@ -1,4 +1,12 @@ -{ config, lib, pkgs, inputs, outputs, ... }: { +{ + config, + lib, + pkgs, + inputs, + outputs, + ... +}: +{ imports = [ inputs.home-manager.nixosModules.home-manager ./modules/apps.nix @@ -11,8 +19,10 @@ home-manager = { useUserPackages = true; useGlobalPkgs = true; - extraSpecialArgs = { inherit inputs outputs; }; - users.jawz = import ./home-manager/default.nix; + extraSpecialArgs = { + inherit inputs outputs; + }; + users.jawz = import ./home-manager.nix; }; system.stateVersion = "24.05"; time = { @@ -21,7 +31,9 @@ }; i18n = { defaultLocale = "en_CA.UTF-8"; - extraLocaleSettings = { LC_MONETARY = "es_MX.UTF-8"; }; + extraLocaleSettings = { + LC_MONETARY = "es_MX.UTF-8"; + }; }; console = { font = "Lat2-Terminus16"; @@ -34,12 +46,14 @@ enable = true; wheelNeedsPassword = false; }; - pam.loginLimits = [{ - domain = "*"; - type = "soft"; - item = "nofile"; - value = "8192"; - }]; + pam.loginLimits = [ + { + domain = "*"; + type = "soft"; + item = "nofile"; + value = "8192"; + } + ]; }; nix = { optimise.automatic = true; @@ -49,7 +63,10 @@ }; settings = { auto-optimise-store = true; - experimental-features = [ "nix-command" "flakes" ]; + experimental-features = [ + "nix-command" + "flakes" + ]; substituters = [ "https://nix-gaming.cachix.org" "https://nixpkgs-python.cachix.org" @@ -68,7 +85,9 @@ ]; }; }; - documentation = { enable = false; }; + documentation = { + enable = false; + }; users.groups.piracy.gid = 985; environment = { systemPackages = with pkgs; [ wget ]; @@ -81,56 +100,31 @@ XDG_STATE_HOME = "\${HOME}/.local/state"; # DEV PATH - CABAL_DIR = "${XDG_CACHE_HOME}/cabal"; - CARGO_HOME = "${XDG_DATA_HOME}/cargo"; GEM_HOME = "${XDG_DATA_HOME}/ruby/gems"; GEM_PATH = "${XDG_DATA_HOME}/ruby/gems"; GEM_SPEC_CACHE = "${XDG_DATA_HOME}/ruby/specs"; GOPATH = "${XDG_DATA_HOME}/go"; - NPM_CONFIG_USERCONFIG = "${XDG_CONFIG_HOME}/npm/npmrc"; - PNPM_HOME = "${XDG_DATA_HOME}/pnpm"; PSQL_HISTORY = "${XDG_DATA_HOME}/psql_history"; REDISCLI_HISTFILE = "${XDG_DATA_HOME}/redis/rediscli_history"; WINEPREFIX = "${XDG_DATA_HOME}/wine"; - PYTHONSTARTUP = "${XDG_CONFIG_HOME}/python/pythonrc"; - STACK_ROOT = "${XDG_DATA_HOME}/stack"; # OPTIONS - HISTFILE = "${XDG_STATE_HOME}/bash/history"; - LESSHISTFILE = "-"; - GHCUP_USE_XDG_DIRS = "true"; - RIPGREP_CONFIG_PATH = "${XDG_CONFIG_HOME}/ripgrep/ripgreprc"; ELECTRUMDIR = "${XDG_DATA_HOME}/electrum"; - VISUAL = "emacsclient -ca emacs"; WGETRC = "${XDG_CONFIG_HOME}/wgetrc"; XCOMPOSECACHE = "${XDG_CACHE_HOME}/X11/xcompose"; "_JAVA_OPTIONS" = "-Djava.util.prefs.userRoot=${XDG_CONFIG_HOME}/java"; - DOCKER_CONFIG = "${XDG_CONFIG_HOME}/docker"; # NVIDIA CUDA_CACHE_PATH = "${XDG_CACHE_HOME}/nv"; # Themes # WEBKIT_DISABLE_COMPOSITING_MODE = "1"; - CALIBRE_USE_SYSTEM_THEME = "1"; - PATH = [ - "\${HOME}/.local/bin" - "${XDG_CONFIG_HOME}/emacs/bin" - "${XDG_DATA_HOME}/npm/bin" - "${XDG_DATA_HOME}/pnpm" - ]; + PATH = [ "\${HOME}/.local/bin" ]; }; }; programs = { nh.enable = true; - starship.enable = true; - tmux.enable = true; - fzf.fuzzyCompletion = true; - neovim = { - enable = true; - vimAlias = true; - }; gnupg.agent = { enable = true; enableSSHSupport = true; diff --git a/gnome.nix b/gnome.nix index 1dad28b..41b0f75 100644 --- a/gnome.nix +++ b/gnome.nix @@ -9,35 +9,38 @@ displayManager.gdm.enable = true; desktopManager.gnome = { enable = true; - # extraGSettingsOverridePackages = [ pkgs.gnome.mutter ]; - # extraGSettingsOverrides = '' - # [org.gnome.mutter] - # experimental-features=['variable-refresh-rate', 'scale-monitor-framebuffer'] - # ''; + extraGSettingsOverridePackages = [ pkgs.gnome.mutter ]; + extraGSettingsOverrides = '' + [org.gnome.mutter] + experimental-features=['variable-refresh-rate', 'scale-monitor-framebuffer'] + ''; }; }; }; - environment.gnome.excludePackages = (with pkgs; [ - gnome-photos - gnome-tour - gnome-text-editor - gnome-connections - # gnome-shell-extensions - baobab - ]) ++ (with pkgs.gnome; [ - # totem - gnome-music - epiphany - gnome-characters - yelp - gnome-font-viewer - cheese - ]); + environment.gnome.excludePackages = + (with pkgs; [ + gnome-photos + gnome-tour + gnome-text-editor + gnome-connections + # gnome-shell-extensions + baobab + ]) + ++ (with pkgs.gnome; [ + # totem + gnome-music + epiphany + gnome-characters + yelp + gnome-font-viewer + cheese + ]); qt = { enable = true; style = "adwaita"; }; - users.users.jawz.packages = with pkgs; + users.users.jawz.packages = + with pkgs; ([ # ffmpegthumbnailer # generate thumbnails adw-gtk3 # theme legacy applications @@ -46,7 +49,8 @@ # gradience # theme customizer, allows you to modify adw-gtk3 themes # lm_sensors # for extension, displays cpu temp libgda # for pano shell extension - ]) ++ (with pkgs.gnomeExtensions; [ + ]) + ++ (with pkgs.gnomeExtensions; [ appindicator # applets for open applications reading-strip # like putting a finger on every line I read tactile # window manager diff --git a/home-manager.nix b/home-manager.nix new file mode 100644 index 0000000..af847e8 --- /dev/null +++ b/home-manager.nix @@ -0,0 +1,83 @@ +{ + config, + lib, + pkgs, + inputs, + outputs, + ... +}: +{ + home.stateVersion = "24.05"; + + programs.bash = { + enable = true; + historyFile = "\${XDG_STATE_HOME}/bash/history"; + historyControl = [ + "erasedups" + "ignorespace" + "ignoredups" + ]; + shellAliases = { + cp = "cp -i"; + mv = "mv -i"; + mkdir = "mkdir -p"; + ".." = "cd .."; + "..." = "cd ../.."; + ".3" = "cd ../../.."; + ".4" = "cd ../../../.."; + ".5" = "cd ../../../../.."; + c = "cat"; + sc = "systemctl --user"; + jc = "journalctl --user -xefu"; + open-gallery = '' + cd /mnt/pool/scrapping/JawZ/gallery-dl && + xdg-open "$(fd . ./ Husbands -tdirectory -d 1 | fzf -i)"''; + }; + enableVteIntegration = true; + initExtra = '' + $HOME/.local/bin/pokemon-colorscripts -r --no-title + + export command_timeout=60 + + nixos-reload () { + NIXOSDIR=/home/jawz/Development/NixOS + # nix-store --add-fixed sha256 \ + # $NIXOSDIR/PureRef-1.11.1_x64.Appimage + fd --full-path $NIXOSDIR -e nix -x nixfmt \; + sudo nixos-rebuild switch \ + --flake "$NIXOSDIR/#$HOSTNAME" \ + | nom + } + ''; + }; + xdg = { + enable = true; + userDirs = { + enable = true; + createDirectories = false; + desktop = "${config.home.homeDirectory}"; + documents = "${config.home.homeDirectory}/Documents"; + download = "${config.home.homeDirectory}/Downloads"; + music = "${config.home.homeDirectory}/Music"; + pictures = "${config.home.homeDirectory}/Pictures"; + templates = "${config.xdg.dataHome}/Templates"; + videos = "${config.home.homeDirectory}/Videos"; + }; + configFile = { + "wgetrc".source = ../dotfiles/wget/wgetrc; + }; + }; + programs = { + helix.enable = true; + direnv = { + enable = true; + enableBashIntegration = true; + nix-direnv.enable = true; + }; + git = { + enable = true; + userName = "Danilo Reyes"; + userEmail = "CaptainJawZ@protonmail.com"; + }; + }; +} diff --git a/home-manager/default.nix b/home-manager/default.nix deleted file mode 100644 index bf02626..0000000 --- a/home-manager/default.nix +++ /dev/null @@ -1,125 +0,0 @@ -{ config, lib, pkgs, inputs, outputs, ... }: { - home.stateVersion = "24.05"; - - programs.bash = { - enable = true; - historyFile = "\${XDG_STATE_HOME}/bash/history"; - historyControl = [ "erasedups" "ignorespace" "ignoredups" ]; - shellAliases = { - hh = "hstr"; - ls = "eza --icons --group-directories-first"; - edit = "emacsclient -t"; - comic = ''download -u jawz -i "$(cat $LC | fzf --multi --exact -i)"''; - gallery = ''download -u jawz -i "$(cat $LW | fzf --multi --exact -i)"''; - cp = "cp -i"; - mv = "mv -i"; - mkdir = "mkdir -p"; - rm = "trash"; - ".." = "cd .."; - "..." = "cd ../.."; - ".3" = "cd ../../.."; - ".4" = "cd ../../../.."; - ".5" = "cd ../../../../.."; - dl = "download -u jawz -i"; - e = "edit"; - c = "cat"; - b = "bat"; - f = "fzf --multi --exact -i"; - sc = "systemctl --user"; - jc = "journalctl --user -xefu"; - open-gallery = '' - cd /mnt/pool/scrapping/JawZ/gallery-dl && - xdg-open "$(fd . ./ Husbands -tdirectory -d 1 | fzf -i)"''; - unique-extensions = '' - fd -tf | rev | cut -d. -f1 | rev | - tr '[:upper:]' '[:lower:]' | sort | - uniq --count | sort -rn''; - }; - enableVteIntegration = true; - initExtra = '' - $HOME/.local/bin/pokemon-colorscripts -r --no-title - - list_root="${config.xdg.configHome}"/jawz/lists/jawz - export LW=$list_root/watch.txt - export LI=$list_root/instant.txt - export LC=$list_root/comic.txt - export command_timeout=60 - - if command -v fzf-share >/dev/null; then - source "$(fzf-share)/key-bindings.bash" - source "$(fzf-share)/completion.bash" - fi - - nixos-reload () { - NIXOSDIR=/home/jawz/Development/NixOS - # nix-store --add-fixed sha256 \ - # $NIXOSDIR/PureRef-1.11.1_x64.Appimage - fd --full-path $NIXOSDIR -e nix -x nixfmt \; - sudo nixos-rebuild switch \ - --flake "$NIXOSDIR/#$HOSTNAME" \ - | nom - } - ''; - }; - xdg = { - enable = true; - userDirs = { - enable = true; - createDirectories = false; - desktop = "${config.home.homeDirectory}"; - documents = "${config.home.homeDirectory}/Documents"; - download = "${config.home.homeDirectory}/Downloads"; - music = "${config.home.homeDirectory}/Music"; - pictures = "${config.home.homeDirectory}/Pictures"; - templates = "${config.xdg.dataHome}/Templates"; - videos = "${config.home.homeDirectory}/Videos"; - }; - configFile = { - "wgetrc".source = ../dotfiles/wget/wgetrc; - "configstore/update-notifier-npm-check.json".source = - ../dotfiles/npm/update-notifier-npm-check.json; - "npm/npmrc".source = ../dotfiles/npm/npmrc; - "gallery-dl/config.json".source = ../dotfiles/gallery-dl/config.json; - "htop/htoprc".source = ../dotfiles/htop/htoprc; - "python/pythonrc".source = ../dotfiles/pythonrc; - }; - }; - programs = { - helix = { enable = true; }; - hstr.enable = true; - zoxide = { - enable = true; - enableBashIntegration = true; - }; - direnv = { - enable = true; - enableBashIntegration = true; - nix-direnv.enable = true; - }; - bat = { - enable = true; - config = { - pager = "less -FR"; - theme = "base16"; - }; - extraPackages = with pkgs.bat-extras; [ - batman # man pages - batpipe # piping - batgrep # ripgrep - batdiff # this is getting crazy! - batwatch # probably my next best friend - prettybat # trans your sourcecode! - ]; - }; - git = { - enable = true; - userName = "Danilo Reyes"; - userEmail = "CaptainJawZ@protonmail.com"; - }; - htop = { - enable = true; - package = pkgs.htop-vim; - }; - }; - services = { lorri.enable = true; }; -} diff --git a/hosts/workstation/configuration.nix b/hosts/workstation/configuration.nix index 0c561b5..09231de 100644 --- a/hosts/workstation/configuration.nix +++ b/hosts/workstation/configuration.nix @@ -1,15 +1,17 @@ -{ config, lib, pkgs, ... }: { +{ + config, + lib, + pkgs, + ... +}: +{ imports = [ # ./hardware-configuration.nix ../../base.nix ../../gnome.nix - ./obs-studio.nix + ../../pkgs/obs-studio.nix ]; - programs.obs-studio = { - enable = true; - enableVirtualCamera = true; - }; my = { emacs.enable = true; apps = { @@ -53,40 +55,46 @@ networking = { hostName = "workstation"; - firewall = let - openPorts = [ - 6674 # ns-usbloader - ]; - openPortRanges = [{ - from = 1714; # kdeconnect - to = 1764; # kdeconnect - }]; - in { - allowedTCPPorts = openPorts; - allowedUDPPorts = openPorts; - allowedTCPPortRanges = openPortRanges; - allowedUDPPortRanges = openPortRanges; - }; + firewall = + let + openPorts = [ + 6674 # ns-usbloader + ]; + openPortRanges = [ + { + from = 1714; # kdeconnect + to = 1764; # kdeconnect + } + ]; + in + { + allowedTCPPorts = openPorts; + allowedUDPPorts = openPorts; + allowedTCPPortRanges = openPortRanges; + allowedUDPPortRanges = openPortRanges; + }; }; - nix = let - featuresList = [ - "nixos-test" - "benchmark" - "big-parallel" - "kvm" - "gccarch-znver3" - "gccarch-skylake" - "gccarch-alderlake" - ]; - in { - distributedBuilds = true; - settings = { - cores = 16; - trusted-users = [ "nixremote" ]; - system-features = featuresList; + nix = + let + featuresList = [ + "nixos-test" + "benchmark" + "big-parallel" + "kvm" + "gccarch-znver3" + "gccarch-skylake" + "gccarch-alderlake" + ]; + in + { + distributedBuilds = true; + settings = { + cores = 16; + trusted-users = [ "nixremote" ]; + system-features = featuresList; + }; }; - }; nixpkgs.config = { allowUnfree = true; @@ -96,11 +104,14 @@ users = { groups.nixremote.gid = 555; users = { - jawz.packages = (with pkgs; [ - gocryptfs # encrypted filesystem! shhh!!! - torrenttools # create torrent files from the terminal! - vcsi # video thumbnails for torrents, can I replace it with ^? - ]); + jawz.packages = ( + with pkgs; + [ + gocryptfs # encrypted filesystem! shhh!!! + torrenttools # create torrent files from the terminal! + vcsi # video thumbnails for torrents, can I replace it with ^? + ] + ); nixremote = { isNormalUser = true; createHome = true; @@ -130,11 +141,10 @@ enable = true; package = pkgs.gnomeExtensions.gsconnect; }; - # nh = { - # enable = true; - # clean.enable = true; - # clean.extraArgs = "--keep-since 4d --keep 3"; - # }; + obs-studio = { + enable = true; + enableVirtualCamera = true; + }; }; services.resilio = { @@ -151,11 +161,7 @@ virtualisation = { podman = { enable = true; - - # Create a `docker` alias for podman, to use it as a drop-in replacement dockerCompat = true; - - # Required for containers under podman-compose to be able to talk to each other. defaultNetwork.settings.dns_enabled = true; }; }; diff --git a/hosts/workstation/hardware-configuration.nix b/hosts/workstation/hardware-configuration.nix index c75e6fb..efaa554 100644 --- a/hosts/workstation/hardware-configuration.nix +++ b/hosts/workstation/hardware-configuration.nix @@ -1,9 +1,15 @@ -{ config, pkgs, modulesPath, lib, ... }: { +{ + config, + pkgs, + modulesPath, + lib, + ... +}: +{ imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; nixpkgs.hostPlatform = "x86_64-linux"; hardware = { - cpu.amd.updateMicrocode = - lib.mkDefault config.hardware.enableRedistributableFirmware; + cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; bluetooth = { enable = true; settings.General = { @@ -48,62 +54,74 @@ device = "/dev/disk/by-uuid/e9618e85-a631-4374-b2a4-22c376d6e41b"; preLVM = true; }; - # extraModulePackages = [ config.boot.kernelPackages.v4l2loopback ]; - # extraModprobeConfig = '' - # options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1 - # ''; initrd = { - availableKernelModules = - [ "xhci_pci" "ahci" "usbhid" "nvme" "usb_storage" "sd_mod" ]; + availableKernelModules = [ + "xhci_pci" + "ahci" + "usbhid" + "nvme" + "usb_storage" + "sd_mod" + ]; kernelModules = [ ]; }; }; - fileSystems = let - nfsMount = (server: nfsDisk: { - device = "${server}:/${nfsDisk}"; - fsType = "nfs"; - options = [ "x-systemd.automount" "noauto" "x-systemd.idle-timeout=600" ]; - }); - btrfsMount = subvol: { - device = "/dev/mapper/nvme"; - fsType = "btrfs"; - options = [ - "subvol=${subvol}" - "ssd" - "compress=lzo" - "x-systemd.device-timeout=0" - "space_cache=v2" - "commit=120" - "datacow" - ] ++ (if subvol == "nixos" then [ "noatime" ] else [ ]); - }; - in { - "/" = btrfsMount "nixos" // { }; - "/home" = btrfsMount "home" // { }; - "/mnt/games" = btrfsMount "games" // { }; - "/mnt/miniserver/pool" = nfsMount "miniserver" "pool" // { }; - "/mnt/miniserver/jawz" = nfsMount "miniserver" "jawz" // { }; - #"/mnt/server/pool" = nfsMount "server" "pool" // { }; - #"/mnt/server/jawz" = nfsMount "server" "jawz" // { }; - # "/mnt/miniserver/btrfs" = nfsMount "btrfs" // { }; - "/boot" = { - device = "/dev/disk/by-uuid/ac6d349a-96b9-499e-9009-229efd7743a5"; - fsType = "ext4"; - }; - "/boot/efi" = { - device = "/dev/disk/by-uuid/B05D-B5FB"; - fsType = "vfat"; - }; + fileSystems = + let + nfsMount = ( + server: nfsDisk: { + device = "${server}:/${nfsDisk}"; + fsType = "nfs"; + options = [ + "x-systemd.automount" + "noauto" + "x-systemd.idle-timeout=600" + ]; + } + ); + btrfsMount = subvol: { + device = "/dev/mapper/nvme"; + fsType = "btrfs"; + options = [ + "subvol=${subvol}" + "ssd" + "compress=lzo" + "x-systemd.device-timeout=0" + "space_cache=v2" + "commit=120" + "datacow" + ] ++ (if subvol == "nixos" then [ "noatime" ] else [ ]); + }; + in + { + "/" = btrfsMount "nixos" // { }; + "/home" = btrfsMount "home" // { }; + "/mnt/games" = btrfsMount "games" // { }; + "/mnt/miniserver/pool" = nfsMount "miniserver" "pool" // { }; + "/mnt/miniserver/jawz" = nfsMount "miniserver" "jawz" // { }; + #"/mnt/server/pool" = nfsMount "server" "pool" // { }; + #"/mnt/server/jawz" = nfsMount "server" "jawz" // { }; + # "/mnt/miniserver/btrfs" = nfsMount "btrfs" // { }; + "/boot" = { + device = "/dev/disk/by-uuid/ac6d349a-96b9-499e-9009-229efd7743a5"; + fsType = "ext4"; + }; + "/boot/efi" = { + device = "/dev/disk/by-uuid/B05D-B5FB"; + fsType = "vfat"; + }; - }; - swapDevices = [{ - device = "/dev/disk/by-partuuid/c1bd22d7-e62c-440a-88d1-6464be1aa1b0"; - randomEncryption = { - enable = true; - cipher = "aes-xts-plain64"; - keySize = 512; - sectorSize = 4096; }; - }]; + swapDevices = [ + { + device = "/dev/disk/by-partuuid/c1bd22d7-e62c-440a-88d1-6464be1aa1b0"; + randomEncryption = { + enable = true; + cipher = "aes-xts-plain64"; + keySize = 512; + sectorSize = 4096; + }; + } + ]; } diff --git a/modules/apps/office.nix b/modules/apps/office.nix index 9fe288b..c9f9b48 100644 --- a/modules/apps/office.nix +++ b/modules/apps/office.nix @@ -1,4 +1,10 @@ -{ config, lib, pkgs, ... }: { +{ + config, + lib, + pkgs, + ... +}: +{ options.my.apps.office.enable = lib.mkEnableOption "enable"; config = lib.mkIf config.my.apps.office.enable { users.users.jawz.packages = with pkgs; [ @@ -11,5 +17,8 @@ # wike # gtk wikipedia wow! # denaro # manage your finances ]; + environment.variables = { + CALIBRE_USE_SYSTEM_THEME = "1"; + }; }; } diff --git a/modules/dev/docker.nix b/modules/dev/docker.nix index e5c9f6e..be1e868 100644 --- a/modules/dev/docker.nix +++ b/modules/dev/docker.nix @@ -1,7 +1,16 @@ -{ config, lib, pkgs, ... }: { +{ + 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 ]); + users.users.jawz.packages = + (with pkgs; [ dockfmt ]) ++ (with pkgs.nodePackages; [ dockerfile-language-server-nodejs ]); + }; + environment.variables = { + DOCKER_CONFIG = "${XDG_CONFIG_HOME}/docker"; }; } diff --git a/modules/dev/haskell.nix b/modules/dev/haskell.nix index 1b366dc..11694c8 100644 --- a/modules/dev/haskell.nix +++ b/modules/dev/haskell.nix @@ -1,9 +1,21 @@ -{ config, lib, pkgs, ... }: { +{ + config, + lib, + pkgs, + ... +}: +{ options.my.dev.haskell.enable = lib.mkEnableOption "enable"; config = lib.mkIf config.my.dev.haskell.enable { users.users.jawz.packages = with pkgs; ([ ghc # compiler haskell-language-server # lsp ]); + environment.variables = { + CABAL_DIR = "${XDG_CACHE_HOME}/cabal"; + CARGO_HOME = "${XDG_DATA_HOME}/cargo"; + STACK_ROOT = "${XDG_DATA_HOME}/stack"; + GHCUP_USE_XDG_DIRS = "true"; + }; }; } diff --git a/modules/dev/javascript.nix b/modules/dev/javascript.nix index c97269f..416dea1 100644 --- a/modules/dev/javascript.nix +++ b/modules/dev/javascript.nix @@ -1,7 +1,28 @@ -{ config, lib, pkgs, ... }: { +{ + 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 ]); + home-manager.users.jawz.programs.xdg.configFile = { + "npm/npmrc".source = ../dotfiles/npm/npmrc; + "configstore/update-notifier-npm-check.json".source = ../dotfiles/npm/update-notifier-npm-check.json; + }; + users.users.jawz.packages = (with pkgs; [ nodejs ]) ++ (with 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" + ]; + }; + environment.variables = { + VISUAL = "emacsclient -ca emacs"; + PATH = [ "${XDG_CONFIG_HOME}/emacs/bin" ]; + }; }; } diff --git a/modules/dev/nix.nix b/modules/dev/nix.nix index b54ef3f..3d297bb 100644 --- a/modules/dev/nix.nix +++ b/modules/dev/nix.nix @@ -1,4 +1,10 @@ -{ config, lib, pkgs, ... }: { +{ + config, + lib, + pkgs, + ... +}: +{ options.my.dev.nix.enable = lib.mkEnableOption "enable"; config = lib.mkIf config.my.dev.nix.enable { users.users.jawz.packages = with pkgs; ([ diff --git a/modules/dev/python.nix b/modules/dev/python.nix index 935f31e..a1a5b75 100644 --- a/modules/dev/python.nix +++ b/modules/dev/python.nix @@ -1,24 +1,38 @@ -{ config, lib, pkgs, ... }: { +{ + 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; ([ - pipenv # python development workflow for humans - (python3.withPackages (ps: - with ps; [ - black # Python code formatter - editorconfig # follow rules of contributin - flake8 # wraper for pyflakes, pycodestyle and mccabe - isort # sort Python imports - pyflakes # checks source code for errors - pylint # bug and style checker for python - speedtest-cli # check internet speed from the comand line - # nose # testing and running python scripts - # poetry # dependency management made easy - # pytest # framework for writing tests - ])) - ])) ++ (with pkgs.nodePackages; - [ + home-manager.users.jawz.programs.xdg.configFile = { + "python/pythonrc".source = ../dotfiles/pythonrc; + }; + users.users.jawz.packages = + (with pkgs; ([ + pipenv # python development workflow for humans + (python3.withPackages ( + ps: with ps; [ + black # Python code formatter + editorconfig # follow rules of contributin + flake8 # wraper for pyflakes, pycodestyle and mccabe + isort # sort Python imports + pyflakes # checks source code for errors + pylint # bug and style checker for python + speedtest-cli # check internet speed from the comand line + # nose # testing and running python scripts + # poetry # dependency management made easy + # pytest # framework for writing tests + ] + )) + ])) + ++ (with pkgs.nodePackages; [ pyright # LSP ]); + environment.variables = { + PYTHONSTARTUP = "${XDG_CONFIG_HOME}/python/pythonrc"; + }; }; } diff --git a/modules/dev/sh.nix b/modules/dev/sh.nix index ea9398b..4329ca1 100644 --- a/modules/dev/sh.nix +++ b/modules/dev/sh.nix @@ -1,10 +1,18 @@ -{ config, lib, pkgs, ... }: { +{ + 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 ]); + 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 b0506ce..c539cbc 100644 --- a/modules/emacs.nix +++ b/modules/emacs.nix @@ -1,33 +1,48 @@ -{ config, lib, pkgs, ... }: { +{ + config, + lib, + pkgs, + ... +}: +{ options.my.emacs.enable = lib.mkEnableOption "enable"; config = lib.mkIf config.my.emacs.enable { - users.users.jawz.packages = (with pkgs; ([ - fd # modern find, faster searches - fzf # fuzzy finder! super cool and useful - ripgrep # modern grep - tree-sitter # code parsing based on symbols and shit, I do not get it - graphviz # graphs - tetex # export pdf - languagetool # proofreader for English + home-manager.users.jawz = { + programs.bash.shellAliases = { + edit = "emacsclient -t"; + e = "edit"; + }; + services.lorri.enable = true; + }; + users.users.jawz.packages = + (with pkgs; ([ + fd # modern find, faster searches + fzf # fuzzy finder! super cool and useful + ripgrep # modern grep + tree-sitter # code parsing based on symbols and shit, I do not get it + graphviz # graphs + tetex # export pdf + languagetool # proofreader for English - # doom everywhere - xorg.xwininfo - xdotool - xclip + # doom everywhere + xorg.xwininfo + xdotool + xclip - # lsps - yaml-language-server - markdownlint-cli - ])) ++ (with pkgs.nodePackages; [ - vscode-json-languageserver - # linters - prettier - ]); + # lsps + yaml-language-server + markdownlint-cli + ])) + ++ (with pkgs.nodePackages; [ + vscode-json-languageserver + # linters + prettier + ]); services.emacs = { enable = true; - package = with pkgs; - ((emacsPackagesFor emacs-gtk).emacsWithPackages - (epkgs: with epkgs; ([ vterm ]))); + package = + with pkgs; + ((emacsPackagesFor emacs-gtk).emacsWithPackages (epkgs: with epkgs; ([ vterm ]))); defaultEditor = true; }; home-manager.users.jawz.programs.bash.initExtra = '' diff --git a/modules/scripts/download.nix b/modules/scripts/download.nix index 7771b74..fd0b589 100644 --- a/modules/scripts/download.nix +++ b/modules/scripts/download.nix @@ -1,20 +1,52 @@ -{ config, lib, pkgs, ... }: { +{ + config, + lib, + pkgs, + ... +}: +{ imports = [ ./base.nix ]; config = { - users.users.jawz.packages = (with pkgs; [ gallery-dl yt-dlp ]); + home-manager.users.jawz = { + programs = { + xdg.configFile = { + "gallery-dl/config.json".source = ../dotfiles/gallery-dl/config.json; + }; + bash = { + shellAliases = { + comic = ''download -u jawz -i "$(cat $LC | fzf --multi --exact -i)"''; + gallery = ''download -u jawz -i "$(cat $LW | fzf --multi --exact -i)"''; + dl = "download -u jawz -i"; + }; + initExtra = '' + list_root="${config.xdg.configHome}"/jawz/lists/jawz + export LW=$list_root/watch.txt + export LI=$list_root/instant.txt + export LC=$list_root/comic.txt + ''; + }; + }; + services.lorri.enable = true; + }; + users.users.jawz.packages = (with pkgs; [ gallery-dl ]); my.scripts.download = { enable = true; install = true; service = false; name = "download"; - package = with pkgs.python3Packages; + package = + with pkgs.python3Packages; (buildPythonApplication rec { pname = "download"; - version = "2.0"; + version = "2.5"; src = ../../scripts/download/.; doCheck = false; buildInputs = [ setuptools ]; - propagatedBuildInputs = [ pyyaml types-pyyaml ]; + propagatedBuildInputs = [ + pyyaml + types-pyyaml + yt-dlp + ]; }); }; }; diff --git a/modules/scripts/find-dup-episode.nix b/modules/scripts/find-dup-episode.nix new file mode 100644 index 0000000..e5b2b05 --- /dev/null +++ b/modules/scripts/find-dup-episode.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + imports = [ ./base.nix ]; + config.my.scripts.find-dup-episodes = { + enable = true; + install = true; + service = false; + name = "find-dup-episodes"; + package = pkgs.writeScriptBin "find-dup-episodes" ( + builtins.readFile ../../scripts/find-dup-episodes.sh + ); + }; +} diff --git a/modules/scripts/manage-library.nix b/modules/scripts/manage-library.nix new file mode 100644 index 0000000..34e4c5a --- /dev/null +++ b/modules/scripts/manage-library.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + imports = [ ./base.nix ]; + config.my.scripts.manage-library = { + enable = true; + install = true; + service = true; + name = "manage-library"; + timer = "00:30"; + description = "scans the library directory and sorts files"; + package = pkgs.writeScriptBin "manage-library" (builtins.readFile ../../scripts/manage-library.sh); + }; +} diff --git a/modules/scripts/nextcloud-cronjob.nix b/modules/scripts/nextcloud-cronjob.nix new file mode 100644 index 0000000..2950d58 --- /dev/null +++ b/modules/scripts/nextcloud-cronjob.nix @@ -0,0 +1,20 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + imports = [ ./base.nix ]; + config.my.scripts.nextcloud-cronjob = { + enable = true; + install = false; + service = true; + timer = "*:0/10"; + name = "nextcloud-cronjob"; + description = "runs tasks for nextcloud"; + package = pkgs.writeScriptBin "nextcloud-cronjob" ( + builtins.readFile ../../scripts/nextcloud-cronjob.sh + ); + }; +} diff --git a/modules/scripts/run.nix b/modules/scripts/run.nix index 6c716ff..f862b4e 100644 --- a/modules/scripts/run.nix +++ b/modules/scripts/run.nix @@ -1,11 +1,16 @@ -{ config, lib, pkgs, ... }: { +{ + config, + lib, + pkgs, + ... +}: +{ imports = [ ./base.nix ]; config.my.scripts.run = { enable = true; install = true; service = false; name = "run"; - package = - pkgs.writeScriptBin "run" (builtins.readFile ../../scripts/run.sh); + package = pkgs.writeScriptBin "run" (builtins.readFile ../../scripts/run.sh); }; } diff --git a/modules/scripts/sub-sync.nix b/modules/scripts/sub-sync.nix new file mode 100644 index 0000000..51194a0 --- /dev/null +++ b/modules/scripts/sub-sync.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + imports = [ ./base.nix ]; + config.my.scripts.sub-sync = { + enable = true; + install = true; + service = true; + name = "sub-sync"; + timer = "22:00"; + description = "Syncronixes subtitles downloaded and modified the last day"; + package = pkgs.writeScriptBin "sub-sync" (builtins.readFile ../../scripts/sub-sync.sh); + }; +} diff --git a/modules/scripts/update-dns.nix b/modules/scripts/update-dns.nix new file mode 100644 index 0000000..f7c34d0 --- /dev/null +++ b/modules/scripts/update-dns.nix @@ -0,0 +1,18 @@ +{ + config, + lib, + pkgs, + ... +}: +{ + imports = [ ./base.nix ]; + config.my.scripts.update-dns = { + enable = true; + install = true; + service = true; + name = "update-dns"; + timer = "*:0/30"; + description = "Updates the IP of all my domains"; + package = pkgs.writeScriptBin "update-dns" (builtins.readFile ../../scripts/update-dns.sh); + }; +} diff --git a/modules/shell/tools.nix b/modules/shell/tools.nix index 0f4ba27..a3d2790 100644 --- a/modules/shell/tools.nix +++ b/modules/shell/tools.nix @@ -1,6 +1,70 @@ -{ config, lib, pkgs, ... }: { +{ + config, + lib, + pkgs, + ... +}: +{ options.my.shell.tools.enable = lib.mkEnableOption "enable"; config = lib.mkIf config.my.shell.tools.enable { + home-manager.users.jawz.programs = { + bash = { + initExtra = '' + if command -v fzf-share >/dev/null; then + source "$(fzf-share)/key-bindings.bash" + source "$(fzf-share)/completion.bash" + fi + ''; + shellAliases = { + cd = "z"; + hh = "hstr"; + ls = "eza --icons --group-directories-first"; + rm = "trash"; + b = "bat"; + f = "fzf --multi --exact -i"; + unique-extensions = '' + fd -tf | rev | cut -d. -f1 | rev | + tr '[:upper:]' '[:lower:]' | sort | + uniq --count | sort -rn''; + }; + }; + xdg.configFile = { + "htop/htoprc".source = ../dotfiles/htop/htoprc; + }; + hstr.enable = true; + htop = { + enable = true; + package = pkgs.htop-vim; + }; + zoxide = { + enable = true; + enableBashIntegration = true; + }; + bat = { + enable = true; + config = { + pager = "less -FR"; + theme = "base16"; + }; + extraPackages = with pkgs.bat-extras; [ + batman # man pages + batpipe # piping + batgrep # ripgrep + batdiff # this is getting crazy! + batwatch # probably my next best friend + prettybat # trans your sourcecode! + ]; + }; + }; + programs = { + starship.enable = true; + tmux.enable = true; + fzf.fuzzyCompletion = true; + neovim = { + enable = true; + vimAlias = true; + }; + }; users.users.jawz.packages = with pkgs; [ ripgrep # modern grep du-dust # rusty du similar to gdu @@ -14,4 +78,9 @@ jq # linting ]; }; + environment.variables = { + HISTFILE = "${XDG_STATE_HOME}/bash/history"; + LESSHISTFILE = "-"; + RIPGREP_CONFIG_PATH = "${XDG_CONFIG_HOME}/ripgrep/ripgreprc"; + }; } diff --git a/hosts/workstation/obs-studio.nix b/pkgs/obs-studio.nix similarity index 92% rename from hosts/workstation/obs-studio.nix rename to pkgs/obs-studio.nix index 3b36ab3..ee11fdc 100644 --- a/hosts/workstation/obs-studio.nix +++ b/pkgs/obs-studio.nix @@ -1,9 +1,16 @@ -{ pkgs, lib, config, ... }: +{ + pkgs, + lib, + config, + ... +}: with lib; -let cfg = config.programs.obs-studio; -in { +let + cfg = config.programs.obs-studio; +in +{ options.programs.obs-studio = { enable = mkEnableOption "OBS Studio program";