From afa8c3fba5ace65bee7a02024a136986341ad129 Mon Sep 17 00:00:00 2001 From: Jakub Trzeciak Date: Tue, 12 Sep 2023 09:09:24 +0200 Subject: Init --- .gitignore | 1 + README.md | 3 + autologin.nix | 19 +++ configuration.nix | 312 +++++++++++++++++++++++++++++++++++++++++ home-manager/.Xresources | 42 ++++++ home-manager/.flake.lock | 49 +++++++ home-manager/.flake.nix | 29 ++++ home-manager/firefox.nix | 88 ++++++++++++ home-manager/home.nix | 177 +++++++++++++++++++++++ home-manager/sh/colors.nix | 18 +++ home-manager/sh/dmenu.nix | 15 ++ home-manager/sh/dwmblocks.nix | 12 ++ home-manager/sh/mpv.nix | 15 ++ home-manager/sh/screenshot.nix | 11 ++ home-manager/sh/wp.nix | 31 ++++ home-manager/sh/yt.nix | 67 +++++++++ home-manager/sxrc | 22 +++ 17 files changed, 911 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 autologin.nix create mode 100644 configuration.nix create mode 100644 home-manager/.Xresources create mode 100644 home-manager/.flake.lock create mode 100644 home-manager/.flake.nix create mode 100644 home-manager/firefox.nix create mode 100644 home-manager/home.nix create mode 100644 home-manager/sh/colors.nix create mode 100644 home-manager/sh/dmenu.nix create mode 100644 home-manager/sh/dwmblocks.nix create mode 100644 home-manager/sh/mpv.nix create mode 100644 home-manager/sh/screenshot.nix create mode 100644 home-manager/sh/wp.nix create mode 100644 home-manager/sh/yt.nix create mode 100755 home-manager/sxrc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..577b0a0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +hardware-configuration.nix diff --git a/README.md b/README.md new file mode 100644 index 0000000..8d3e25f --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Jptrzy's nixos config +## Installation +[Full Guide](https://qfpl.io/posts/installing-nixos) diff --git a/autologin.nix b/autologin.nix new file mode 100644 index 0000000..42a3316 --- /dev/null +++ b/autologin.nix @@ -0,0 +1,19 @@ +{ config, pkgs, getty, ... }: + +let + script = pkgs.writeText "login-program.sh" '' + if [[ "$(tty)" == '/dev/tty1' ]]; then + ${pkgs.shadow}/bin/login -f jp3; + else + ${pkgs.shadow}/bin/login; + fi + ''; +in + +{ + services.getty = { + loginProgram = "${pkgs.bash}/bin/sh"; + loginOptions = toString script; + extraArgs = [ "--skip-login" ]; + }; +} diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..2312f0a --- /dev/null +++ b/configuration.nix @@ -0,0 +1,312 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running `nixos-help`). + +{ config, pkgs, ... }: + +let + home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/release-23.05.tar.gz"; + + dmenu-src = builtins.fetchTarball "https://git.jptrzy.xyz/dmenu/snapshot/master.tar.gz"; + dwm-src = builtins.fetchTarball "https://git.jptrzy.xyz/dwm/snapshot/master.tar.gz"; + dwmblocks-src = builtins.fetchTarball "https://git.jptrzy.xyz/dwmblocks/snapshot/master.tar.gz"; + neo-comic-mono-font = builtins.fetchTarball "https://git.jptrzy.xyz/neo-comic-mono-font/snapshot/master.tar.gz"; + sent-src = builtins.fetchTarball "https://git.jptrzy.xyz/sent/snapshot/master.tar.gz"; + slock-src = builtins.fetchTarball "https://git.jptrzy.xyz/slock/snapshot/master.tar.gz"; + + user = "jp3"; +in { + +# NixOS Specific + # Copy the NixOS configuration - /run/current-system/configuration.nix + system.copySystemConfiguration = true; + # Check out https://nixos.org/nixos/options.html). + system.stateVersion = "23.05"; # Did you read the comment? + + nixpkgs.config.allowUnfree = true; + + nix.extraOptions = '' + experimental-features = nix-command flakes + ''; + nix.gc.automatic = true; + + imports = [ + (import "${home-manager}/nixos") + + # Include the results of the hardware scan. + ./hardware-configuration.nix + + # Autologin on tty1 + ./autologin.nix + ]; + + nixpkgs.config.packageOverrides = pkgs: { + nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") { + inherit pkgs; + }; + + vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; }; + angband = pkgs.angband.override { + enableSdl2 = true; + }; + }; + + home-manager.users."${user}" = import ./home-manager/home.nix { + inherit user config pkgs; + inherit (pkgs.nixpkgs) lib; + }; + security.pam.services."${user}".enableGnomeKeyring = true; + security.wrappers = { + slock = { + owner = "root"; group = "root"; + setuid = true; + source = "${pkgs.slock}/bin/slock"; + }; + }; + +# BootLoader + + boot = { + initrd.luks.devices = { # Decrypt LUKS Partition before accessing LVM(s) partitions + root = { + device = "/dev/sda2"; + preLVM = true; + }; + }; + + loader = { # Use the systemd-boot EFI boot loader. + systemd-boot = { + enable = true; + configurationLimit = 3; + }; + + efi.canTouchEfiVariables = true; + }; + }; + +# System + + # Set your time zone. + time.timeZone = "Europe/Warsaw"; + + users.groups."${user}" = {}; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users."${user}" = { + createHome = true; + isNormalUser = true; + extraGroups = [ "${user}" "wheel" "video" "audio" "disk" "networkmanager" ]; # Enable ‘sudo’ for the user. + group = "users"; + home = "/home/${user}"; + uid = 1000; + }; + + # Network + networking = { + hostName = "jp3-x270"; # Define your hostname. + networkmanager.enable = true; # Easiest to use and most distros use this by default. + }; + + # Enable sound. + sound.enable = true; + + hardware = { + bluetooth = { + enable = true; + settings = { + General = { + Enable = "Source,Sink,Media,Socket"; + }; + }; + }; + + pulseaudio = { + enable = true; + package = pkgs.pulseaudioFull; + extraConfig = " + load-module module-switch-on-connect + "; + }; + + opengl = { + enable = true; + extraPackages = with pkgs; [ + intel-media-driver # LIBVA_DRIVER_NAME=iHD + vaapiIntel # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium) + vaapiVdpau + libvdpau-va-gl + ]; + }; + }; + + services = { + xserver = { # Enable the X11 windowing system. + enable = true; + + layout = "pl"; + xkbOptions = "caps:escape"; + + displayManager.sx.enable = true; + windowManager.dwm.enable = true; + + libinput = { + enable = true; + touchpad = { + naturalScrolling = true; + clickMethod = "none"; + tapping = false; + }; + }; + }; + + printing = { + enable = true; + + drivers = [ + pkgs.hplip + pkgs.hplipWithPlugin + ]; + }; + + avahi = { + enable = true; + nssmdns = true; + openFirewall = true; + }; + + auto-cpufreq.enable = true; # Helps battery life + + flatpak.enable = true; + + gvfs.enable = true; # Gvfs - Trash and MTP (Smartphones) + + dbus.enable = true; + }; + +# Services + + # PinEntry for GnuPG + programs.gnupg.agent = { + enable = true; + pinentryFlavor = "gnome3"; + enableSSHSupport = true; + }; + + # Portals + xdg.portal.enable = true; + xdg.portal.extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + +# Programs + # Enable Sceen Brightness + programs.light.enable = true; + + programs.system-config-printer.enable = true; + + # Fonts + fonts.fonts = with pkgs; [ + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + + font-awesome + + # Custom + (import "${neo-comic-mono-font}") + ]; + + # Gaming + programs.steam = { + enable = true; + remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play + dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server + }; + + # Suckless Overlays + nixpkgs.overlays = [ + (final: prev: { + dmenu = prev.dmenu.overrideAttrs (old: { src = dmenu-src; }); + dwm = prev.dwm.overrideAttrs (old: { src = dwm-src; }); + dwmblocks = prev.dwmblocks.overrideAttrs (old: { src = dwmblocks-src; }); + sent = prev.dwm.overrideAttrs (old: { src = sent-src; }); + slock = prev.slock.overrideAttrs (old: { + src = slock-src; + buildInputs = with pkgs; [ + xorg.libXinerama + xorg.libXft + imlib2 + ] ++ old.buildInputs; + }); + }) + ]; + +# List packages installed in system profile. To search, run: + environment.binsh = "${pkgs.dash}/bin/dash"; + + # $ nix search wget + environment.systemPackages = with pkgs; [ + #(import /home/.../.local/src/slock/default.nix { + # inherit fetchurl lib stdenv writeText; + # inherit libxcrypt; + # inherit (xorg) xorgproto libX11 libXext libXrandr; + #}) + neovim + git + wget + htop + gnumake + gcc + gnupg + pass + killall + shellcheck + + # Window Manager + cmus + dconf + dmenu dwm dwmblocks slock + xclip + nsxiv + zathura + + pinentry-gnome gcr pinentry-gtk2 + + # Heavy + alacritty + firefox + gnome.nautilus + pika-backup + pavucontrol + logseq + heroic + lxappearance + fontpreview + ffmpeg + mpv + thunderbird + signal-desktop + w3m + texlive.combined.scheme-full + yt-dlp + curl + ueberzug + libnotify + abaddon # Discord + inkscape gimp krita + cups + arandr + monero-gui + sent + + # Gnome Apps without Gnome + gnome.adwaita-icon-theme libsecret gnome.seahorse + + # Lanuguages + nil nix-index + + # Games + angband + nethack + openttd + ]; +} + diff --git a/home-manager/.Xresources b/home-manager/.Xresources new file mode 100644 index 0000000..9bc01b0 --- /dev/null +++ b/home-manager/.Xresources @@ -0,0 +1,42 @@ +*.window.background: #181921 +*.window.foreground: #ba5ac9 +*.bar.background: #ba5ac9 +*.bar.foreground: #eceadd +*.mark.foreground: #eceadd + +! special +*.foreground: #eceadd +*.background: #181921 +*.cursorColor: #eceadd + +! black +*.color0: #090618 +*.color8: #413e53 + +! red +*.color1: #e32929 +*.color9: #d94545 + +! green +*.color2: #bdcc27 +*.color10: #bac455 + +! yellow +*.color3: #ff920d +*.color11: #e59e46 + +! blue +*.color4: #1984db +*.color12: #5a9dd4 + +! magenta +*.color5: #af18db +*.color13: #ba5ac9 + +! cyan +*.color6: #55c8b9 +*.color14: #61b5aa + +! white +*.color7: #9ca7b2 +*.color15: #f1f1f1 diff --git a/home-manager/.flake.lock b/home-manager/.flake.lock new file mode 100644 index 0000000..994aa6a --- /dev/null +++ b/home-manager/.flake.lock @@ -0,0 +1,49 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1687871164, + "narHash": "sha256-bBFlPthuYX322xOlpJvkjUBz0C+MOBjZdDOOJJ+G2jU=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "07c347bb50994691d7b0095f45ebd8838cf6bc38", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-23.05", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1690921052, + "narHash": "sha256-PHCyqQXj9thb3pGHV2O20eVwczkE+krG/XFumN0tJAs=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "dff08e260fdac77326bafe3a324c2ffbff95d49a", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "release-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/home-manager/.flake.nix b/home-manager/.flake.nix new file mode 100644 index 0000000..b3ad2fa --- /dev/null +++ b/home-manager/.flake.nix @@ -0,0 +1,29 @@ +{ + description = "Home Manager configuration of jp3"; + + inputs = { + # Specify the source of Home Manager and Nixpkgs. + nixpkgs.url = "github:nixos/nixpkgs/release-23.05"; + home-manager = { + url = "github:nix-community/home-manager/release-23.05"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { nixpkgs, home-manager, ... }: + let + system = "x86_64-linux"; + pkgs = nixpkgs.legacyPackages.${system}; + in { + homeConfigurations."jp3" = home-manager.lib.homeManagerConfiguration { + inherit pkgs; + + # Specify your home configuration modules here, for example, + # the path to your home.nix. + modules = [ ./home.nix ]; + + # Optionally use extraSpecialArgs + # to pass through arguments to home.nix + }; + }; +} diff --git a/home-manager/firefox.nix b/home-manager/firefox.nix new file mode 100644 index 0000000..820354c --- /dev/null +++ b/home-manager/firefox.nix @@ -0,0 +1,88 @@ +{ config, pkgs, theme, ... }: + +let + firefox-work = pkgs.writeShellScriptBin "firefox-work" ''firefox -p work''; + + # Show all packages - `nix flake show "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"` + default-extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + ublock-origin + decentraleyes + clearurls + darkreader + noscript + + # ImageBlock - Blure Images + # ClearlyRead + + # privacy-badger + ]; + + default-settings = { + "browser.search.region" = "US"; + + "app.normandy.first_run" = false; + "toolkit.telemetry.reportingpolicy.firstRun" = false; + "trailhead.firstrun.didSeeAboutWelcome" = true; + + "browser.startup.homepage" = "https://jptrzy.xyz"; + + "browser.compactmode.show" = true; + "browser.uidensity" = 1; + #"browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"unified-extensions-area":["ublock0_raymondhill_net-browser-action"],"nav-bar":["back-button","forward-button","stop-reload-button","customizableui-special-spring6","urlbar-container","customizableui-special-spring7","downloads-button","jid1-mnnxcxisbpnsxq_jetpack-browser-action","unified-extensions-button"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["personal-bookmarks"]},"seen":["save-to-pocket-button","jid1-mnnxcxisbpnsxq_jetpack-browser-action","ublock0_raymondhill_net-browser-action","developer-button"],"dirtyAreaCache":["unified-extensions-area","nav-bar","TabsToolbar","widget-overflow-fixed-list","PersonalToolbar"],"currentVersion":19,"newElementCount":7}''; + + "media.ffmpeg.vaapi.enabled" = true; + #"xpinstall.signatures.required" = false; # TODO - it is a security issue + }; +in { + programs.firefox = { + enable = true; + + package = pkgs.wrapFirefox pkgs.firefox-unwrapped { + # https://github.com/mozilla/policy-templates#enterprisepoliciesenabled + extraPolicies = { + CaptivePortal = false; + DisableFirefoxStudies = true; + DisablePocket = true; + DisableTelemetry = true; + DisableFirefoxAccounts = true; + NoDefaultBookmarks = true; + OfferToSaveLogins = false; + OfferToSaveLoginsDefault = false; + PasswordManagerEnabled = false; + FirefoxHome = { + Search = true; + Pocket = false; + Snippets = false; + TopSites = false; + Highlights = false; + }; + UserMessaging = { + ExtensionRecommendations = false; + SkipOnboarding = true; + }; + }; + }; + + profiles = { + work = { + isDefault = false; id = 1; + name = "work"; + + extensions = default-extensions; + settings = default-settings; + }; + + default = { + isDefault = true; id = 0; + name = "main"; + + extensions = default-extensions; + settings = default-settings; + }; + }; + }; + + home.packages = [ + firefox-work + ]; +} diff --git a/home-manager/home.nix b/home-manager/home.nix new file mode 100644 index 0000000..35678e2 --- /dev/null +++ b/home-manager/home.nix @@ -0,0 +1,177 @@ +{ user, config, pkgs, lib, ... }: + +let + nvim-spell-pl-utf8-dict = builtins.fetchurl { + url = "http://ftp.vim.org/vim/runtime/spell/pl.utf-8.spl"; + sha256 = "1sg7hnjkvhilvh0sidjw5ciih0vdia9vas8vfrd9vxnk9ij51khl"; + }; +in { + home.username = "${user}"; + home.homeDirectory = "/home/${user}"; + + home.stateVersion = "22.05"; # Please read the comment before changing. + + # Allow Specific Unfree Packages + nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ + # Add additional package names here + "pureref" + "hplip" + ]; + + home.packages = [ + pkgs.picom + pkgs.libnotify + + pkgs.pureref + pkgs.hplipWithPlugin + + (import ./sh/screenshot.nix {inherit pkgs; }) + (import ./sh/wp.nix {inherit pkgs; }) + (import ./sh/colors.nix {inherit pkgs; }) + (import ./sh/yt.nix {inherit pkgs; }) + (import ./sh/mpv.nix {inherit pkgs; }) + ]; + + nixpkgs.config.packageOverrides = pkgs: { + nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") { + inherit pkgs; + }; + }; + + home.file = { + ".config/nvim/spell/pl.utf-8.spl".source = nvim-spell-pl-utf8-dict; + + ".config/sx/sxrc".source = ./sxrc; + ".config/Xresources".source = ./.Xresources; + + ".config/alacritty/alacritty.yml".text = '' + font: + normal: + family: Neo Comic Mono + style: Regular + bold: + family: Neo Comic Mono + style: Bold + size: 12 + + colors: + primary: + background: '0x181921' + foreground: '0xeceadd' + normal: + black: '0x090618' + red: '0xe32929' + green: '0xbdcc27' + yellow: '0xff920d' + blue: '0x1984db' + magenta: '0xaf18db' + cyan: '0x55c8b9' + white: '0x9ca7b2' + bright: + black: '0x413e53' + red: '0xd94545' + green: '0xbac455' + yellow: '0xe59e46' + blue: '0x5a9dd4' + magenta: '0xba5ac9' + cyan: '0x61b5aa' + white: '0xf1f1f1' + ''; + + ".local/share/gnupg/gpg-agent.conf".text = '' + debug-pinentry + debug ipc + verbose + enable-ssh-support + # disable-scdaemon + #pinentry-program /run/current-system/sw/bin/pinentry + pinentry-program /run/current-system/sw/bin/pinentry-gtk-2 + ''; + }; + + dconf = { + enable = true; + settings = { + "org/gnome/desktop/interface" = { + color-scheme = "prefer-dark"; + }; + }; + }; + + gtk = { + enable = true; + + font.name = "Neo Comic Mono 12"; + + theme = { + name = "Flat-Remix-GTK-Violet-Dark"; + package = pkgs.flat-remix-gtk; + }; + + iconTheme = { + name = "Flat-Remix-Violet-Dark"; + package = pkgs.flat-remix-icon-theme; + }; + + cursorTheme = { + name = "Adwaita"; + package = pkgs.gnome.adwaita-icon-theme; + }; + }; + + services = { + dunst.enable = true; + }; + + programs = { + bash = { + enable = true; + + shellAliases = { + nr = "sudo nixos-rebuild switch"; + hr = "home-manager switch"; + se = "sudoedit"; + trans = "${pkgs.sdcv}/bin/sdcv --color"; + yta = "yt-dlp -x --audio-format vorbis"; + }; + + sessionVariables = { + EDITOR = "nvim"; + PATH = "$PATH:$HOME/.local/bin"; + + XDG_DATA_HOME = "$HOME/.local/share"; + XDG_CONFIG_HOME = "$HOME/.config"; + XDG_STATE_HOME = "$HOME/.local/state"; + XDG_CACHE_HOME = "$HOME/.cache"; + + HISTFILE = "$HOME/.local/state/bash/history"; + + GNUPGHOME = "$HOME/.local/share/gnupg"; + PASSWORD_STORE_DIR = "$HOME/.local/share/pass"; + + #QT_STYLE_OVERRIDE=adwaita + #QT_QPA_PLATFORMTHEME=gnome + }; + + profileExtra = '' + if [ -z "$DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then + exec sx + fi + ''; + }; + + git = { + enable = true; + + userEmail = "jptrzy@gmail.com"; + userName = "Jakub Trzeciak"; + + signing = { + key = "FC040CC63D2527E3"; + signByDefault = true; + }; + }; + }; + + imports = [ ./firefox.nix ]; +} diff --git a/home-manager/sh/colors.nix b/home-manager/sh/colors.nix new file mode 100644 index 0000000..f25a02f --- /dev/null +++ b/home-manager/sh/colors.nix @@ -0,0 +1,18 @@ +{ pkgs }: + +pkgs.writeShellScriptBin "colors" '' + space=" " + + output="" + + for l in $(printf "40\n100"); do + + for i in $(seq $l $((l + 9))); do + output="$output\033[0;''${i}m$space" + done + + output="$output\033[0m\n" + done + + printf "$output" +'' diff --git a/home-manager/sh/dmenu.nix b/home-manager/sh/dmenu.nix new file mode 100644 index 0000000..40c6c77 --- /dev/null +++ b/home-manager/sh/dmenu.nix @@ -0,0 +1,15 @@ +{ pkgs }: + +let + mpv-camera = pkgs.writeShellScriptBin "mpv-camera" '' + ${pkgs.mpv}/bin/mpv /dev/video0 \ + osc=no --input-vo-keyboard=no --player-operation-mode=pseudo-gui \ + no-cache --untimed --no-demuxer-thread \ + --video-sync=audio --vd-lavc-threads=1 --vf=hflip + ''; +in pkgs.symlinkJoin { + name = "mpv"; + paths = [ + mpv-camera + ]; +} diff --git a/home-manager/sh/dwmblocks.nix b/home-manager/sh/dwmblocks.nix new file mode 100644 index 0000000..22db512 --- /dev/null +++ b/home-manager/sh/dwmblocks.nix @@ -0,0 +1,12 @@ +{ pkgs }: + +let + clock = pkgs.writeShellScriptBin "wp" '' + + ''; +in pkgs.symlinkJoin { + name = "simplebar"; + paths = [ + pkgs.dwmblocks + ]; +} diff --git a/home-manager/sh/mpv.nix b/home-manager/sh/mpv.nix new file mode 100644 index 0000000..40c6c77 --- /dev/null +++ b/home-manager/sh/mpv.nix @@ -0,0 +1,15 @@ +{ pkgs }: + +let + mpv-camera = pkgs.writeShellScriptBin "mpv-camera" '' + ${pkgs.mpv}/bin/mpv /dev/video0 \ + osc=no --input-vo-keyboard=no --player-operation-mode=pseudo-gui \ + no-cache --untimed --no-demuxer-thread \ + --video-sync=audio --vd-lavc-threads=1 --vf=hflip + ''; +in pkgs.symlinkJoin { + name = "mpv"; + paths = [ + mpv-camera + ]; +} diff --git a/home-manager/sh/screenshot.nix b/home-manager/sh/screenshot.nix new file mode 100644 index 0000000..9ebf716 --- /dev/null +++ b/home-manager/sh/screenshot.nix @@ -0,0 +1,11 @@ +{ pkgs }: + +pkgs.writeShellScriptBin "screenshot" '' + path="$HOME/Pictures/Screenshot" + mkdir -p "$path" + + path="$path/$(date +%s_%N).jpg" + + slop=$(${pkgs.slop}/bin/slop -f "%g") || exit 1 + ${pkgs.imagemagick}/bin/import -window root -crop "$slop" "$path" +'' diff --git a/home-manager/sh/wp.nix b/home-manager/sh/wp.nix new file mode 100644 index 0000000..37fefb2 --- /dev/null +++ b/home-manager/sh/wp.nix @@ -0,0 +1,31 @@ +{ pkgs }: + +let + wp-set = pkgs.writeShellScriptBin "wp-set" '' + if [ -n "$1" ] && [ -e "$1" ]; then + rm "$HOME/.config/wallpaper."* + + cp "$1" "$HOME/.config/wallpaper.''${1##*.}" + fi + + ${pkgs.xwallpaper}/bin/xwallpaper --zoom "$HOME/.config/wallpaper."* + ''; + + wp-rand = pkgs.writeShellScriptBin "wp-rand" '' + ${wp-set}/bin/wp-set $(ls -1Ad "$HOME/Pictures/Wallpapers/"* | shuf | head -n 1) + ''; + + wp = pkgs.writeShellScriptBin "wp" '' + nsxiv="${pkgs.nsxiv}/bin/nsxiv" + wpset="${wp-set}/bin/wp-set" + + $wpset "$($nsxiv -bfort "$HOME/Pictures/Wallpapers" | sed 1q)" + ''; +in pkgs.symlinkJoin { + name = "wp"; + paths = [ + wp + wp-rand + wp-set + ]; +} diff --git a/home-manager/sh/yt.nix b/home-manager/sh/yt.nix new file mode 100644 index 0000000..836798a --- /dev/null +++ b/home-manager/sh/yt.nix @@ -0,0 +1,67 @@ +{ pkgs }: + +let + + yt = pkgs.writeShellScriptBin "yt" '' + jq="${pkgs.jq}/bin/jq" + + VIDEO_PATH="$HOME/Videos/Random" + + mkdir -p "$VIDEO_PATH" + + json="$(${pkgs.ytfzf}/bin/ytfzf -t --type=video --thumbnail-quality=medium -I vj)" + + title="$(echo "$json" | jq .[0].title -r)" + channel="$(echo "$json" | jq .[0].channel -r)" + url="$(echo "$json" | jq .[0].url -r)" + + cd "$VIDEO_PATH" || exit 1 + + ${pkgs.yt-dlp}/bin/yt-dlp --write-subs --sub-langs "en.*" --embed-chapters --embed-subs -f "bv*[height<=480]+ba/b[height<=480] / wv*+ba/w" -o "$channel - $title.%(ext)s" "$url" + + ${pkgs.mpv}/bin/mpv "$channel - $title."* + ''; + + yt-hugger = pkgs.writeShellScriptBin "yt-hugger" '' + # + # This script download all videos from youtube channels specified in .channels + # file into path specified in VIDEOS. + # + # Channel File Format: + # + # + # # Comment + # + # ... + # + + VIDEOS="$HOME/Videos/Channel" + + mkdir -p "$VIDEOS" + touch "$VIDEOS/.channels" + + channels="$(cat "$VIDEOS/.channels" | sed "/^#/d")" + + [ -z "$channels" ] && echo "Channels file is empty" && exit 1 + + for entry in "$channels"; do + name="''${entry% *}" + url="''${entry##* }" + + ${pkgs.yt-dlp}/bin/yt-dlp \ + -f 'bv*[height>=720]+ba' \ + --sub-langs "en.*" --embed-subs \ + --embed-chapters --embed-thumbnail --embed-metadata \ + --download-archive "$name/.archive" \ + -o "$name/%(channel)s - %(title)s.%(ext)s" \ + "$url" + done + ''; + +in pkgs.symlinkJoin { + name = "yt"; + paths = [ + yt + yt-hugger + ]; +} diff --git a/home-manager/sxrc b/home-manager/sxrc new file mode 100755 index 0000000..43e8a82 --- /dev/null +++ b/home-manager/sxrc @@ -0,0 +1,22 @@ +#!/bin/sh + +# Start D-Bus if it isn't already started. +# https://nurdletech.com/linux-notes/agents/keyring.html#dbus. +if [[ -z "$DBUS_SESSION_BUS_ADDRESS" ]]; then + eval "$(/run/current-system/sw/bin/dbus-launch --sh-syntax --exit-with-session)" + export DBUS_SESSION_BUS_ADDRESS +fi + +systemctl --user import-environment DISPLAY XAUTHORITY + +wp-rand + +picom & + +xrdb -merge -I$HOME "$HOME/.config/Xresources" & + +dwmblocks & + +exec dbus-launch dwm 2>> $HOME/.cache/dwm.log + +# ssh-agent / exec dbus-launch -- cgit v1.2.3