summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Trzeciak <jptrzy@gmail.com>2023-09-12 09:09:24 +0200
committerJakub Trzeciak <jptrzy@gmail.com>2023-09-12 09:09:24 +0200
commitafa8c3fba5ace65bee7a02024a136986341ad129 (patch)
tree3d6f711124789082300cb7f61227e0f44a3e9f2b
downloadnixos-afa8c3fba5ace65bee7a02024a136986341ad129.tar.gz
nixos-afa8c3fba5ace65bee7a02024a136986341ad129.tar.bz2
nixos-afa8c3fba5ace65bee7a02024a136986341ad129.zip
Init
-rw-r--r--.gitignore1
-rw-r--r--README.md3
-rw-r--r--autologin.nix19
-rw-r--r--configuration.nix312
-rw-r--r--home-manager/.Xresources42
-rw-r--r--home-manager/.flake.lock49
-rw-r--r--home-manager/.flake.nix29
-rw-r--r--home-manager/firefox.nix88
-rw-r--r--home-manager/home.nix177
-rw-r--r--home-manager/sh/colors.nix18
-rw-r--r--home-manager/sh/dmenu.nix15
-rw-r--r--home-manager/sh/dwmblocks.nix12
-rw-r--r--home-manager/sh/mpv.nix15
-rw-r--r--home-manager/sh/screenshot.nix11
-rw-r--r--home-manager/sh/wp.nix31
-rw-r--r--home-manager/sh/yt.nix67
-rwxr-xr-xhome-manager/sxrc22
17 files changed, 911 insertions, 0 deletions
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:
+ # <name> <url>
+ # <name> <url>
+ # # Comment
+ # <name> <url>
+ # ...
+ #
+
+ 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
Software created with 💖