first commit
387
flake.lock
Normal file
|
@ -0,0 +1,387 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"alejandra": {
|
||||||
|
"inputs": {
|
||||||
|
"fenix": "fenix",
|
||||||
|
"flakeCompat": "flakeCompat",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1660510326,
|
||||||
|
"narHash": "sha256-xFumnivtVwu5fFBOrTxrv6fv3geHKF04RGP23EsDVaI=",
|
||||||
|
"owner": "kamadorueda",
|
||||||
|
"repo": "alejandra",
|
||||||
|
"rev": "ef03f7ef74ec97fd91a016a51c9c9667fb315652",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "kamadorueda",
|
||||||
|
"ref": "3.0.0",
|
||||||
|
"repo": "alejandra",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"fenix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"alejandra",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"rust-analyzer-src": "rust-analyzer-src"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1657607339,
|
||||||
|
"narHash": "sha256-HaqoAwlbVVZH2n4P3jN2FFPMpVuhxDy1poNOR7kzODc=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "fenix",
|
||||||
|
"rev": "b814c83d9e6aa5a28d0cf356ecfdafb2505ad37d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "fenix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1685662779,
|
||||||
|
"narHash": "sha256-cKDDciXGpMEjP1n6HlzKinN0H+oLmNpgeCTzYnsA2po=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "71fb97f0d875fd4de4994dfb849f2c75e17eb6c3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flakeCompat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1650374568,
|
||||||
|
"narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "b4a34015c698c7793d592d66adbab377907a2be8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1687421788,
|
||||||
|
"narHash": "sha256-CgoHjiUBnru0bV4PE8z1R6ZD9KeWtuAaUkyYWYJmQUE=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "a4817894576f9cd01d784e60a0bfb143c81fc2be",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hypr-contrib": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1687033460,
|
||||||
|
"narHash": "sha256-X93JvDR+SeXYylPq0pn+yM/GpTz31rN/ioY7Lsrv1OE=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "contrib",
|
||||||
|
"rev": "93b6aba94c29388e1fe28908bc9b50e2ee841835",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "contrib",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprland-protocols": "hyprland-protocols",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"wlroots": "wlroots",
|
||||||
|
"xdph": "xdph"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1687375226,
|
||||||
|
"narHash": "sha256-y4l7tZELvVNmMZNdLmLdEZkApBWn1p7+MuGAxY0s47s=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "Hyprland",
|
||||||
|
"rev": "fc59cef1ee573a950c5d5f3bacf1b51142fd56db",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "Hyprland",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland-protocols": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684265364,
|
||||||
|
"narHash": "sha256-AxNnWbthsuNx73HDQr0eBxrcE3+yfl/WsaXZqUFmkpQ=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-protocols",
|
||||||
|
"rev": "8c279b9fb0f2b031427dc5ef4eab53f2ed835530",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-protocols",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprpicker": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs_3"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1687346387,
|
||||||
|
"narHash": "sha256-1dQkKFdk4HYd8GzD1i2RlFWZHt/5IOf+qFLT//1mwkc=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprpicker",
|
||||||
|
"rev": "1d05cc3423cd8ecd0489a7229396c5011d158b2c",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprpicker",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-gaming": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts",
|
||||||
|
"nixpkgs": "nixpkgs_4"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1687396360,
|
||||||
|
"narHash": "sha256-KScLvg0PbrvlAZ6K4A8QUR6dh+VAuWHV2gA5zV682gQ=",
|
||||||
|
"owner": "fufexan",
|
||||||
|
"repo": "nix-gaming",
|
||||||
|
"rev": "abd9bc538faee423b66d929e5fbb39f76c37579d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "fufexan",
|
||||||
|
"repo": "nix-gaming",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1657425264,
|
||||||
|
"narHash": "sha256-3aHvoI2e8vJKw3hvnHECaBpSsL5mxVsVtaLCnTdNcH8=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "de5b3dd17034e6106e75746e81618e5bd408de8a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable-small",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-lib": {
|
||||||
|
"locked": {
|
||||||
|
"dir": "lib",
|
||||||
|
"lastModified": 1685564631,
|
||||||
|
"narHash": "sha256-8ywr3AkblY4++3lIVxmrWZFzac7+f32ZEhH/A8pNscI=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "4f53efe34b3a8877ac923b9350c874e3dcd5dc0a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"dir": "lib",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1658161305,
|
||||||
|
"narHash": "sha256-X/nhnMCa1Wx4YapsspyAs6QYz6T/85FofrI6NpdPDHg=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "e4d49de45a3b5dbcb881656b4e3986e666141ea9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1683014792,
|
||||||
|
"narHash": "sha256-6Va9iVtmmsw4raBc3QKvQT2KT/NGRWlvUlJj46zN8B8=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "1a411f23ba299db155a5b45d5e145b85a7aafc42",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1686582075,
|
||||||
|
"narHash": "sha256-vtflsfKkHtF8IduxDNtbme4cojiqvlvjp5QNYhvoHXc=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "7e63eed145566cca98158613f3700515b4009ce3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1686960236,
|
||||||
|
"narHash": "sha256-AYCC9rXNLpUWzD9hm+askOfpliLEC9kwAo7ITJc4HIw=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "04af42f3b31dba0ef742d254456dc4c14eedac86",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nur": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1687422705,
|
||||||
|
"narHash": "sha256-qO5Uesc0wNg60Zp3P1QXgLVFiC3cHCqd34dQSmU9OMw=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "NUR",
|
||||||
|
"rev": "2deeab84b27858c0c5537c41c243144829b55928",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "NUR",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"alejandra": "alejandra",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"hypr-contrib": "hypr-contrib",
|
||||||
|
"hyprland": "hyprland",
|
||||||
|
"hyprpicker": "hyprpicker",
|
||||||
|
"nix-gaming": "nix-gaming",
|
||||||
|
"nixpkgs": "nixpkgs_5",
|
||||||
|
"nur": "nur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rust-analyzer-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1657557289,
|
||||||
|
"narHash": "sha256-PRW+nUwuqNTRAEa83SfX+7g+g8nQ+2MMbasQ9nt6+UM=",
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"rev": "caf23f29144b371035b864a1017dbc32573ad56d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "rust-lang",
|
||||||
|
"ref": "nightly",
|
||||||
|
"repo": "rust-analyzer",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wlroots": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"host": "gitlab.freedesktop.org",
|
||||||
|
"lastModified": 1686753331,
|
||||||
|
"narHash": "sha256-KovjVFwcuoUO0eu/UiWrnD3+m/K+SHSAVIz4xF9K1XA=",
|
||||||
|
"owner": "wlroots",
|
||||||
|
"repo": "wlroots",
|
||||||
|
"rev": "7e7633abf09b362d0bad9e3fc650fd692369291d",
|
||||||
|
"type": "gitlab"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"host": "gitlab.freedesktop.org",
|
||||||
|
"owner": "wlroots",
|
||||||
|
"repo": "wlroots",
|
||||||
|
"type": "gitlab"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xdph": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprland-protocols": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-protocols"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1685385764,
|
||||||
|
"narHash": "sha256-r+XMyOoRXq+hlfjayb+fyi9kq2JK48TrwuNIAXqlj7U=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
|
"rev": "4d9ff0c17716936e0b5ca577a39e263633901ed1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
34
flake.nix
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
description = "Fahim's nixos configuration";
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
nur.url = "github:nix-community/NUR";
|
||||||
|
hypr-contrib.url = "github:hyprwm/contrib";
|
||||||
|
hyprpicker.url = "github:hyprwm/hyprpicker";
|
||||||
|
alejandra.url = "github:kamadorueda/alejandra/3.0.0";
|
||||||
|
nix-gaming.url = "github:fufexan/nix-gaming";
|
||||||
|
hyprland = {
|
||||||
|
url = "github:hyprwm/Hyprland";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{ nixpkgs
|
||||||
|
, self
|
||||||
|
, ...
|
||||||
|
} @ inputs:
|
||||||
|
let
|
||||||
|
selfPkgs = import ./pkgs;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
overlays.default = selfPkgs.overlay;
|
||||||
|
nixosConfigurations = import ./modules/core/default.nix {
|
||||||
|
inherit self nixpkgs inputs;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
42
hosts/nixos/hardware-configuration.nix
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" =
|
||||||
|
{ device = "/dev/disk/by-uuid/fbfe1772-e806-4c26-8b5d-586b711bbd39";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/6B0A-E6F3";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices =
|
||||||
|
[ { device = "/dev/disk/by-uuid/3acb02a9-cb86-484f-bf54-730d743c8ecc"; }
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp0s20f0u3.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.enp1s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
7
install.sh
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
cp /etc/nixos/hardware-configuration.nix hosts/nixos/hardware-configuration.nix
|
||||||
|
sleep 1
|
||||||
|
mkdir -p ~/Pictures/wallpapers
|
||||||
|
sleep 1
|
||||||
|
cp ./wallpaper/wallpaper.png ~/Pictures/wallpapers/
|
||||||
|
sleep 1
|
||||||
|
sudo nixos-rebuild switch --flake .#nixos
|
8
modules/core/bootloader.nix
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_lqx;
|
||||||
|
boot.initrd.kernelModules = [ "amdgpu" ];
|
||||||
|
}
|
24
modules/core/cloudflare-warp.nix
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
systemd.packages = with pkgs; [
|
||||||
|
(cloudflare-warp.overrideAttrs (old: {
|
||||||
|
src = pkgs.fetchurl {
|
||||||
|
url = "https://pkg.cloudflareclient.com/pool/jammy/main/c/cloudflare-warp/cloudflare-warp_2023.3.470-1_amd64.deb";
|
||||||
|
sha256 = "sha256-AYnmisEQKFiEB2iRJifEqRbdzAyBcfrU0ITeUokKLag=";
|
||||||
|
};
|
||||||
|
unpackPhase = null;
|
||||||
|
}))
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.services."warp-svc".wantedBy = [ "multi-user.target" ];
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs;[
|
||||||
|
(cloudflare-warp.overrideAttrs (old: {
|
||||||
|
src = pkgs.fetchurl {
|
||||||
|
url = "https://pkg.cloudflareclient.com/pool/jammy/main/c/cloudflare-warp/cloudflare-warp_2023.3.470-1_amd64.deb";
|
||||||
|
sha256 = "sha256-AYnmisEQKFiEB2iRJifEqRbdzAyBcfrU0ITeUokKLag=";
|
||||||
|
};
|
||||||
|
unpackPhase = null;
|
||||||
|
}))
|
||||||
|
|
||||||
|
];
|
||||||
|
}
|
36
modules/core/default.nix
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{ inputs
|
||||||
|
, nixpkgs
|
||||||
|
, self
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
lib = nixpkgs.lib;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixos = nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = { inherit self inputs; };
|
||||||
|
modules =
|
||||||
|
[ (import ./bootloader.nix) ]
|
||||||
|
++ [ (import ./hardware.nix) ]
|
||||||
|
++ [ (import ./xserver.nix) ]
|
||||||
|
++ [ (import ./steam.nix) ]
|
||||||
|
++ [ (import ./network.nix) ]
|
||||||
|
++ [ (import ./pipewire.nix) ]
|
||||||
|
++ [ (import ./program.nix) ]
|
||||||
|
++ [ (import ./../home/package/python.nix) ]
|
||||||
|
++ [ (import ./security.nix) ]
|
||||||
|
++ [ (import ./services.nix) ]
|
||||||
|
++ [ (import ./system.nix) ]
|
||||||
|
++ [ (import ./user.nix) ]
|
||||||
|
++ [ (import ./wayland.nix) ]
|
||||||
|
++ [ (import ./cloudflare-warp.nix) ]
|
||||||
|
++ [ (import ./virtualization.nix) ]
|
||||||
|
++ [ (import ./../../hosts/nixos/hardware-configuration.nix) ]
|
||||||
|
;
|
||||||
|
};
|
||||||
|
}
|
10
modules/core/hardware.nix
Executable file
|
@ -0,0 +1,10 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
# hardware.video.hidpi.enable = true;
|
||||||
|
hardware.opengl.enable = true;
|
||||||
|
hardware.opengl.driSupport = true;
|
||||||
|
hardware.opengl.driSupport32Bit = true;
|
||||||
|
hardware.opengl.extraPackages = with pkgs; [
|
||||||
|
amdvlk
|
||||||
|
];
|
||||||
|
powerManagement.cpuFreqGovernor = "performance";
|
||||||
|
}
|
7
modules/core/network.nix
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
{ ... }: {
|
||||||
|
networking = {
|
||||||
|
hostName = "nixos";
|
||||||
|
networkmanager.enable = true;
|
||||||
|
nameservers = [ "1.1.1.1" ];
|
||||||
|
};
|
||||||
|
}
|
11
modules/core/pipewire.nix
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
{ ... }: {
|
||||||
|
sound.enable = true;
|
||||||
|
hardware.pulseaudio.enable = false;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
lowLatency.enable = true;
|
||||||
|
};
|
||||||
|
}
|
9
modules/core/program.nix
Executable file
|
@ -0,0 +1,9 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
programs.dconf.enable = true;
|
||||||
|
programs.zsh.enable = true;
|
||||||
|
programs.gnupg.agent = {
|
||||||
|
enable = true;
|
||||||
|
enableSSHSupport = true;
|
||||||
|
pinentryFlavor = "gtk2";
|
||||||
|
};
|
||||||
|
}
|
5
modules/core/security.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ ... }: {
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
security.sudo.enable = true;
|
||||||
|
security.pam.services.swaylock = { };
|
||||||
|
}
|
7
modules/core/services.nix
Executable file
|
@ -0,0 +1,7 @@
|
||||||
|
{...}: {
|
||||||
|
services = {
|
||||||
|
gvfs.enable = true;
|
||||||
|
gnome.gnome-keyring.enable = true;
|
||||||
|
dbus.enable = true;
|
||||||
|
};
|
||||||
|
}
|
13
modules/core/steam.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{ pkgs, lib, ... }: {
|
||||||
|
programs.steam = {
|
||||||
|
enable = true;
|
||||||
|
remotePlay.openFirewall = true;
|
||||||
|
dedicatedServer.openFirewall = false;
|
||||||
|
};
|
||||||
|
programs.gamemode.enable = true;
|
||||||
|
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
||||||
|
"steam"
|
||||||
|
"steam-original"
|
||||||
|
"steam-runtime"
|
||||||
|
];
|
||||||
|
}
|
37
modules/core/system.nix
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
{ self
|
||||||
|
, pkgs
|
||||||
|
, lib
|
||||||
|
, inputs
|
||||||
|
, ...
|
||||||
|
}: {
|
||||||
|
imports = [ inputs.nix-gaming.nixosModules.default ];
|
||||||
|
nix = {
|
||||||
|
settings = {
|
||||||
|
auto-optimise-store = true;
|
||||||
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
substituters = [ "https://nix-gaming.cachix.org" ];
|
||||||
|
trusted-public-keys = [ "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4=" ];
|
||||||
|
};
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 7d";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
nixpkgs = {
|
||||||
|
overlays = [
|
||||||
|
self.overlays.default
|
||||||
|
inputs.nur.overlay
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
wget
|
||||||
|
git
|
||||||
|
];
|
||||||
|
|
||||||
|
time.timeZone = "Europe/Paris";
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
system.stateVersion = "23.05";
|
||||||
|
}
|
38
modules/core/user.nix
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
{ pkgs
|
||||||
|
, inputs
|
||||||
|
, ...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
name = "FrostPhoenix";
|
||||||
|
username = "frostphoenix";
|
||||||
|
#email = "t@gmail.com";
|
||||||
|
initialPassword = "dreamX";
|
||||||
|
packages = with pkgs; [
|
||||||
|
fish
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [ inputs.home-manager.nixosModules.home-manager ];
|
||||||
|
home-manager = {
|
||||||
|
useUserPackages = true;
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
extraSpecialArgs = { inherit inputs; };
|
||||||
|
users.${username} = {
|
||||||
|
imports = [ (import ./../home) ];
|
||||||
|
home.username = username;
|
||||||
|
home.homeDirectory = "/home/${username}";
|
||||||
|
home.stateVersion = "22.11";
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users.${username} = {
|
||||||
|
isNormalUser = true;
|
||||||
|
initialPassword = initialPassword;
|
||||||
|
description = name;
|
||||||
|
extraGroups = [ "networkmanager" "wheel" ];
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
};
|
||||||
|
users.users.root.initialPassword = initialPassword;
|
||||||
|
nix.settings.allowed-users = [ "frostphoenix" ];
|
||||||
|
}
|
33
modules/core/virtualization.nix
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Add user to libvirtd group
|
||||||
|
users.users.frostphoenix.extraGroups = [ "libvirtd" ];
|
||||||
|
|
||||||
|
# Install necessary packages
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
virt-manager
|
||||||
|
virt-viewer
|
||||||
|
spice
|
||||||
|
spice-gtk
|
||||||
|
spice-protocol
|
||||||
|
win-virtio
|
||||||
|
win-spice
|
||||||
|
gnome.adwaita-icon-theme
|
||||||
|
virtiofsd
|
||||||
|
];
|
||||||
|
|
||||||
|
# Manage the virtualisation services
|
||||||
|
virtualisation = {
|
||||||
|
libvirtd = {
|
||||||
|
enable = true;
|
||||||
|
qemu = {
|
||||||
|
swtpm.enable = true;
|
||||||
|
ovmf.enable = true;
|
||||||
|
ovmf.packages = [ pkgs.OVMFFull.fd ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
spiceUSBRedirection.enable = true;
|
||||||
|
};
|
||||||
|
services.spice-vdagentd.enable = true;
|
||||||
|
}
|
12
modules/core/wayland.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{ inputs, pkgs, ... }:
|
||||||
|
{
|
||||||
|
programs.hyprland.enable = true;
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
wlr.enable = true;
|
||||||
|
extraPortals = [
|
||||||
|
pkgs.xdg-desktop-portal-hyprland
|
||||||
|
# pkgs.xdg-desktop-portal-gtk
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
17
modules/core/xserver.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
layout = "us";
|
||||||
|
videoDrivers = [ "amdgpu" ];
|
||||||
|
displayManager.autoLogin = {
|
||||||
|
enable = true;
|
||||||
|
user = "frostphoenix";
|
||||||
|
};
|
||||||
|
libinput = {
|
||||||
|
enable = true;
|
||||||
|
mouse = {
|
||||||
|
accelProfile = "flat";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
5
modules/home/chromium/default.nix
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
programs.chromium = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
23
modules/home/default.nix
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{ inputs, ... }: {
|
||||||
|
imports =
|
||||||
|
[ (import ./waybar) ]
|
||||||
|
++ [ (import ./firefox) ]
|
||||||
|
# ++ [ (import ./vscode) ]
|
||||||
|
++ [ (import ./chromium) ]
|
||||||
|
++ [ (import ./hyprland) ]
|
||||||
|
++ [ (import ./gaming) ]
|
||||||
|
++ [ (import ./git) ]
|
||||||
|
++ [ (import ./foot) ]
|
||||||
|
++ [ (import ./swaylock) ]
|
||||||
|
++ [ (import ./wofi) ]
|
||||||
|
++ [ (import ./zsh) ]
|
||||||
|
++ [ (import ./gtk) ]
|
||||||
|
++ [ (import ./mako) ]
|
||||||
|
++ [ (import ./scripts) ]
|
||||||
|
++ [ (import ./neofetch) ]
|
||||||
|
++ [ (import ./starship) ]
|
||||||
|
++ [ (import ./wlogout) ]
|
||||||
|
++ [ (import ./nvim) ]
|
||||||
|
++ [ (import ./package) ];
|
||||||
|
|
||||||
|
}
|
75
modules/home/firefox/default.nix
Executable file
|
@ -0,0 +1,75 @@
|
||||||
|
{ config, pkgs, theme, inputs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.firefox =
|
||||||
|
let
|
||||||
|
userChrome = pkgs.substituteAll {
|
||||||
|
src = ./userChrome.css;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
|
||||||
|
extraPolicies = {
|
||||||
|
CaptivePortal = false;
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
DisablePocket = true;
|
||||||
|
DisableTelemetry = true;
|
||||||
|
DisableFirefoxAccounts = true;
|
||||||
|
NoDefaultBookmarks = true;
|
||||||
|
OfferToSaveLogins = false;
|
||||||
|
OfferToSaveLoginsDefault = false;
|
||||||
|
PasswordManagerEnabled = false;
|
||||||
|
FirefoxHome = {
|
||||||
|
Search = false;
|
||||||
|
Pocket = false;
|
||||||
|
Snippets = false;
|
||||||
|
TopSites = false;
|
||||||
|
Highlights = false;
|
||||||
|
};
|
||||||
|
UserMessaging = {
|
||||||
|
ExtensionRecommendations = false;
|
||||||
|
SkipOnboarding = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
profiles = {
|
||||||
|
default = {
|
||||||
|
id = 0;
|
||||||
|
name = "fahim";
|
||||||
|
search = {
|
||||||
|
force = true;
|
||||||
|
default = "Google";
|
||||||
|
engines = {
|
||||||
|
"NixOS Search" = {
|
||||||
|
urls = [{ template = "https://search.nixos.org/packages?channel=23.05&from=0&size=50&sort=relevance&type=packages&query={searchTerms}"; }];
|
||||||
|
iconUpdateURL = "https://nixos.wiki/favicon.png";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000;
|
||||||
|
definedAliases = [ "@ns" ];
|
||||||
|
};
|
||||||
|
"Wikipedia (en)".metaData.alias = "@wiki";
|
||||||
|
"Amazon.com".metaData.hidden = true;
|
||||||
|
"Bing".metaData.hidden = true;
|
||||||
|
"eBay".metaData.hidden = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
"general.smoothScroll" = true;
|
||||||
|
"browser.toolbars.bookmarks.visibility" = "never";
|
||||||
|
"privacy.webrtc.legacyGlobalIndicator" = false;
|
||||||
|
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||||
|
"browser.compactmode.show" = true;
|
||||||
|
};
|
||||||
|
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||||
|
ublock-origin
|
||||||
|
# duckduckgo-privacy-essentials
|
||||||
|
languagetool
|
||||||
|
news-feed-eradicator
|
||||||
|
tabliss
|
||||||
|
videospeed
|
||||||
|
];
|
||||||
|
userChrome = builtins.readFile userChrome;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
478
modules/home/firefox/userChrome.css
Executable file
|
@ -0,0 +1,478 @@
|
||||||
|
#identity-box.extensionPage #identity-icon-label {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
border-radius: 2px !important;
|
||||||
|
}
|
||||||
|
#webrtcIndicator {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
#identity-box.extensionPage
|
||||||
|
#identity-icon[tooltiptext="Loaded by extension: Tabliss"]
|
||||||
|
~ #identity-icon-label {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#identity-icon-box {
|
||||||
|
background: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#identity-box.extensionPage
|
||||||
|
#identity-icon[tooltiptext="Loaded by extension: Tabliss"],
|
||||||
|
#urlbar[pageproxystate="invalid"] #identity-box #identity-icon,
|
||||||
|
#tracking-protection-icon-container[hidden]
|
||||||
|
~ #identity-box[pageproxystate="valid"].notSecure:not(.chromeUI, .localResource)
|
||||||
|
#identity-icon {
|
||||||
|
fill-opacity: var(--urlbar-icon-fill-opacity) !important;
|
||||||
|
list-style-image: url(chrome://userchrome/content/engines/google.svg) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#identity-box.extensionPage
|
||||||
|
#identity-icon[tooltiptext="Loaded by extension: Tabliss"],
|
||||||
|
#urlbar[pageproxystate="invalid"] #identity-box #identity-icon,
|
||||||
|
#tracking-protection-icon-container[hidden]
|
||||||
|
~ #identity-box[pageproxystate="valid"].notSecure:not(.chromeUI, .localResource)
|
||||||
|
#identity-icon {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*==============================================================================================*
|
||||||
|
+-----+-----+-----+-----+-----+-----+-----+
|
||||||
|
| █▀▀ | ▄▀█ | █▀▀ | █▀▀ | ▄▀█ | █▀▄ | █▀▀ |
|
||||||
|
| █▄▄ | █▀█ | ▄▄█ | █▄▄ | █▀█ | █▄▀ | ██▄ |
|
||||||
|
+-----+-----+-----+-----+-----+-----+-----+
|
||||||
|
Description: Minimalist, Simple, Keyboard Centered and based on SimpleFox. 🦊
|
||||||
|
What you get is a really simple responsive one-line layout using the new Proton UI.
|
||||||
|
> SimpleFox: https://github.com/migueravila/SimpleFox
|
||||||
|
|
||||||
|
Author: Andreas Grafen
|
||||||
|
(https://andreas.grafen.info)
|
||||||
|
|
||||||
|
Repository: https://github.com/andreasgrafen/ag.proton
|
||||||
|
Thank you Nick, Abdallah and Benyamin for all the great suggestions for improvements! ♡
|
||||||
|
Nick: https://github.com/nicksundermeyer)
|
||||||
|
Abdallah: https://github.com/HeiWiper)
|
||||||
|
Benyamin: https://github.com/benyaminl)
|
||||||
|
If you're looking for a **mouse-friendly** clone please check out Waterfall.
|
||||||
|
https://github.com/crambaud/waterfall
|
||||||
|
*==============================================================================================*/
|
||||||
|
|
||||||
|
/*---+---+---+---+---+---+
|
||||||
|
| C | O | N | F | I | G |
|
||||||
|
+---+---+---+---+---+---*/
|
||||||
|
|
||||||
|
/* Feel free to tweak the following
|
||||||
|
* config settingsto your own liking. */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
/*---+---+---+---+---+---+---+
|
||||||
|
| C | O | L | O | U | R | S |
|
||||||
|
+---+---+---+---+---+---+---*/
|
||||||
|
|
||||||
|
/* Comment this block out if you want to keep the default theme colour. */
|
||||||
|
/* This will also work with custom colours from color.firefox.com. */
|
||||||
|
|
||||||
|
/* Theme Colour Suggestions
|
||||||
|
* Dark Light */
|
||||||
|
--window-colour: #1F1F1F; /* #FAFAFC; */
|
||||||
|
|
||||||
|
--secondary-colour: #595959; /* #EAEAEC; */
|
||||||
|
--inverted-colour: #cdd6f4; /* #1E2021; */
|
||||||
|
--blue: #89dceb;
|
||||||
|
|
||||||
|
/* Containter Tab Colours */
|
||||||
|
--uc-identity-color-blue: #89b4fa;
|
||||||
|
--uc-identity-color-teal: #94e2d5;
|
||||||
|
--uc-identity-color-green: #a6e3a1;
|
||||||
|
--uc-identity-color-yellow: #f9e2af;
|
||||||
|
--uc-identity-color-orange: #fab387;
|
||||||
|
--uc-identity-color-red: #f38ba8;
|
||||||
|
--uc-identity-color-pink: #f5c2e7;
|
||||||
|
--uc-identity-color-purple: #b4befe;
|
||||||
|
|
||||||
|
/* URL colour in URL bar suggestions */
|
||||||
|
--urlbar-popup-url-color: var(--uc-identity-color-purple) !important;
|
||||||
|
|
||||||
|
/*---+---+---+---+---+---+---+
|
||||||
|
| V | I | S | U | A | L | S |
|
||||||
|
+---+---+---+---+---+---+---*/
|
||||||
|
|
||||||
|
/* global border radius */
|
||||||
|
--uc-border-radius: 4px;
|
||||||
|
|
||||||
|
/* dynamic url bar width settings */
|
||||||
|
--uc-urlbar-width: clamp(200px, 40vw, 500px);
|
||||||
|
|
||||||
|
/* dynamic tab width settings */
|
||||||
|
--uc-active-tab-width: clamp(100px, 20vw, 300px);
|
||||||
|
--uc-inactive-tab-width: clamp(50px, 15vw, 200px);
|
||||||
|
|
||||||
|
/* if active always shows the tab close button */
|
||||||
|
--show-tab-close-button: none; /* DEFAULT: -moz-inline-box; */
|
||||||
|
|
||||||
|
/* if active only shows the tab close button on hover*/
|
||||||
|
--show-tab-close-button-hover: none; /* DEFAULT: -moz-inline-box; */
|
||||||
|
|
||||||
|
/* adds left and right margin to the container-tabs indicator */
|
||||||
|
--container-tabs-indicator-margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*---+---+---+---+---+---+---+
|
||||||
|
| B | U | T | T | O | N | S |
|
||||||
|
+---+---+---+---+---+---+---*/
|
||||||
|
|
||||||
|
#back-button,
|
||||||
|
#forward-button {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* bookmark icon */
|
||||||
|
#star-button {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* zoom indicator */
|
||||||
|
#urlbar-zoom-button {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make button small as Possible, hidden out of sight */
|
||||||
|
#PanelUI-button {
|
||||||
|
margin-top: -5px;
|
||||||
|
margin-bottom: 44px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#PanelUI-menu-button {
|
||||||
|
padding: 0px !important;
|
||||||
|
max-height: 1px;
|
||||||
|
|
||||||
|
list-style-image: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#PanelUI-menu-button .toolbarbutton-icon {
|
||||||
|
width: 1px !important;
|
||||||
|
|
||||||
|
}
|
||||||
|
#PanelUI-menu-button .toolbarbutton-badge-stack {
|
||||||
|
padding: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#reader-mode-button {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tracking protection shield icon */
|
||||||
|
#tracking-protection-icon-container {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* #identity-box { display: none !important } /* hides encryption AND permission items */
|
||||||
|
#identity-permission-box {
|
||||||
|
display: none !important;
|
||||||
|
} /* only hodes permission items */
|
||||||
|
|
||||||
|
/* e.g. playing indicator (secondary - not icon) */
|
||||||
|
.tab-secondary-label {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pageActionButton {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
#page-action-buttons {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#urlbar-go-button {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*=============================================================================================*/
|
||||||
|
|
||||||
|
/*---+---+---+---+---+---+
|
||||||
|
| L | A | Y | O | U | T |
|
||||||
|
+---+---+---+---+---+---*/
|
||||||
|
|
||||||
|
/* No need to change anything below this comment.
|
||||||
|
* Just tweak it if you want to tweak the overall layout. c: */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--uc-theme-colour: var(--window-colour, var(--toolbar-bgcolor));
|
||||||
|
--uc-hover-colour: var(--secondary-colour, rgba(0, 0, 0, 0.2));
|
||||||
|
--uc-inverted-colour: var(--inverted-colour, var(--toolbar-color));
|
||||||
|
--cg-blue-colour: var(--uc-identity-color-blue);
|
||||||
|
--button-bgcolor: var(--uc-theme-colour) !important;
|
||||||
|
--button-hover-bgcolor: var(--uc-hover-colour) !important;
|
||||||
|
--button-active-bgcolor: var(--uc-hover-colour) !important;
|
||||||
|
|
||||||
|
--toolbarbutton-border-radius: var(--uc-border-radius) !important;
|
||||||
|
|
||||||
|
--tab-border-radius: var(--uc-border-radius) !important;
|
||||||
|
--lwt-text-color: var(--uc-inverted-colour) !important;
|
||||||
|
--lwt-tab-text: var(--uc-inverted-colour) !important;
|
||||||
|
--arrowpanel-border-radius: var(--uc-border-radius) !important;
|
||||||
|
|
||||||
|
--tab-block-margin: 2px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
window,
|
||||||
|
#main-window,
|
||||||
|
#toolbar-menubar,
|
||||||
|
#TabsToolbar,
|
||||||
|
#PersonalToolbar,
|
||||||
|
#navigator-toolbox,
|
||||||
|
#sidebar-box,
|
||||||
|
#nav-bar {
|
||||||
|
-moz-appearance: none !important;
|
||||||
|
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
background: var(--uc-theme-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* grey out ccons inside the toolbar to make it
|
||||||
|
* more aligned with the Black & White colour look */
|
||||||
|
#PersonalToolbar toolbarbutton:not(:hover),
|
||||||
|
#bookmarks-toolbar-button:not(:hover) {
|
||||||
|
filter: grayscale(1) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove window control buttons */
|
||||||
|
.titlebar-buttonbox-container {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove "padding" left and right from tabs */
|
||||||
|
.titlebar-spacer {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove gap after pinned tabs */
|
||||||
|
#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs])
|
||||||
|
> #tabbrowser-arrowscrollbox
|
||||||
|
> .tabbrowser-tab[first-visible-unpinned-tab] {
|
||||||
|
margin-inline-start: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove tab shadow */
|
||||||
|
.tabbrowser-tab > .tab-stack > .tab-background {
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tab background */
|
||||||
|
.tabbrowser-tab > .tab-stack > .tab-background {
|
||||||
|
background: var(--uc-theme-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* active tab background */
|
||||||
|
.tabbrowser-tab[selected] > .tab-stack > .tab-background {
|
||||||
|
background: var(--uc-hover-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* multi tab selection */
|
||||||
|
#tabbrowser-tabs:not([noshadowfortests])
|
||||||
|
.tabbrowser-tab:is([visuallyselected="true"], [multiselected])
|
||||||
|
> .tab-stack
|
||||||
|
> .tab-background:-moz-lwtheme {
|
||||||
|
background: var(--uc-hover-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tab close button options */
|
||||||
|
.tabbrowser-tab:not([pinned]) .tab-close-button {
|
||||||
|
display: var(--show-tab-close-button) !important;
|
||||||
|
}
|
||||||
|
.tabbrowser-tab:not([pinned]):hover .tab-close-button {
|
||||||
|
display: var(--show-tab-close-button-hover) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* adaptive tab width */
|
||||||
|
.tabbrowser-tab[selected][fadein]:not([pinned]) {
|
||||||
|
max-width: var(--uc-active-tab-width) !important;
|
||||||
|
}
|
||||||
|
.tabbrowser-tab[fadein]:not([selected]):not([pinned]) {
|
||||||
|
max-width: var(--uc-inactive-tab-width) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* container tabs indicator */
|
||||||
|
.tabbrowser-tab[usercontextid]
|
||||||
|
> .tab-stack
|
||||||
|
> .tab-background
|
||||||
|
> .tab-context-line {
|
||||||
|
margin: -1px var(--container-tabs-indicator-margin) 0
|
||||||
|
var(--container-tabs-indicator-margin) !important;
|
||||||
|
|
||||||
|
border-radius: var(--tab-border-radius) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* show favicon when media is playing but tab is hovered */
|
||||||
|
.tab-icon-image:not([pinned]) {
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Makes the speaker icon to always appear if the tab is playing (not only on hover) */
|
||||||
|
.tab-icon-overlay:not([crashed]),
|
||||||
|
.tab-icon-overlay[pinned][crashed][selected] {
|
||||||
|
top: 5px !important;
|
||||||
|
z-index: 1 !important;
|
||||||
|
|
||||||
|
padding: 1.5px !important;
|
||||||
|
inset-inline-end: -8px !important;
|
||||||
|
width: 16px !important;
|
||||||
|
height: 16px !important;
|
||||||
|
|
||||||
|
border-radius: 10px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* style and position speaker icon */
|
||||||
|
.tab-icon-overlay:not([sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) {
|
||||||
|
stroke: transparent !important;
|
||||||
|
background: transparent !important;
|
||||||
|
opacity: 1 !important;
|
||||||
|
fill-opacity: 0.8 !important;
|
||||||
|
|
||||||
|
color: currentColor !important;
|
||||||
|
|
||||||
|
stroke: var(--uc-theme-colour) !important;
|
||||||
|
background-color: var(--uc-theme-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* change the colours of the speaker icon on active tab to match tab colours */
|
||||||
|
.tabbrowser-tab[selected]
|
||||||
|
.tab-icon-overlay:not([sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) {
|
||||||
|
stroke: var(--uc-hover-colour) !important;
|
||||||
|
background-color: var(--uc-hover-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-icon-overlay:not([pinned], [sharing], [crashed]):is([soundplaying], [muted], [activemedia-blocked]) {
|
||||||
|
margin-inline-end: 9.5px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabbrowser-tab:not([image])
|
||||||
|
.tab-icon-overlay:not([pinned], [sharing], [crashed]) {
|
||||||
|
top: 0 !important;
|
||||||
|
|
||||||
|
padding: 0 !important;
|
||||||
|
margin-inline-end: 5.5px !important;
|
||||||
|
inset-inline-end: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-icon-overlay:not([crashed])[soundplaying]:hover,
|
||||||
|
.tab-icon-overlay:not([crashed])[muted]:hover,
|
||||||
|
.tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
|
||||||
|
color: currentColor !important;
|
||||||
|
stroke: var(--uc-inverted-colour) !important;
|
||||||
|
background-color: var(--uc-inverted-colour) !important;
|
||||||
|
fill-opacity: 0.95 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[soundplaying]:hover,
|
||||||
|
.tabbrowser-tab[selected] .tab-icon-overlay:not([crashed])[muted]:hover,
|
||||||
|
.tabbrowser-tab[selected]
|
||||||
|
.tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
|
||||||
|
color: currentColor !important;
|
||||||
|
stroke: var(--uc-inverted-colour) !important;
|
||||||
|
background-color: var(--uc-inverted-colour) !important;
|
||||||
|
fill-opacity: 0.95 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* speaker icon colour fix */
|
||||||
|
#TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying],
|
||||||
|
#TabsToolbar .tab-icon-overlay:not([crashed])[muted],
|
||||||
|
#TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked] {
|
||||||
|
color: var(--uc-inverted-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* speaker icon colour fix on hover */
|
||||||
|
#TabsToolbar .tab-icon-overlay:not([crashed])[soundplaying]:hover,
|
||||||
|
#TabsToolbar .tab-icon-overlay:not([crashed])[muted]:hover,
|
||||||
|
#TabsToolbar .tab-icon-overlay:not([crashed])[activemedia-blocked]:hover {
|
||||||
|
color: var(--uc-theme-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#nav-bar {
|
||||||
|
border: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove border below whole nav */
|
||||||
|
#navigator-toolbox {
|
||||||
|
border-bottom: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#urlbar,
|
||||||
|
#urlbar * {
|
||||||
|
outline: none !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#urlbar-background {
|
||||||
|
border: var(--uc-hover-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#urlbar[focused="true"] > #urlbar-background,
|
||||||
|
#urlbar:not([open]) > #urlbar-background {
|
||||||
|
margin-top: 0;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#urlbar[open] > #urlbar-background {
|
||||||
|
background: var(--uc-theme-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.urlbarView-row:hover > .urlbarView-row-inner,
|
||||||
|
.urlbarView-row[selected] > .urlbarView-row-inner {
|
||||||
|
background: var(--urlbar-popup-url-color) !important;
|
||||||
|
color: var(--window-colour) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* transition to oneline */
|
||||||
|
@media (min-width: 1000px) {
|
||||||
|
/* move tabs bar over */
|
||||||
|
#TabsToolbar {
|
||||||
|
margin-left: var(--uc-urlbar-width) !important;
|
||||||
|
/* margin-top: 0px !important; */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* move entire nav bar */
|
||||||
|
#nav-bar {
|
||||||
|
margin: calc((var(--urlbar-min-height) * -1) - 8px)
|
||||||
|
calc(100vw - var(--uc-urlbar-width)) 0 0 !important;
|
||||||
|
margin-top: -40px !important;
|
||||||
|
}
|
||||||
|
} /* end media query */
|
||||||
|
|
||||||
|
/* Container Tabs */
|
||||||
|
.identity-color-blue {
|
||||||
|
--identity-tab-color: var(--uc-identity-color-blue) !important;
|
||||||
|
--identity-icon-color: var(--uc-identity-color-blue) !important;
|
||||||
|
}
|
||||||
|
.identity-color-teal {
|
||||||
|
--identity-tab-color: var(--uc-identity-color-teal) !important;
|
||||||
|
--identity-icon-color: var(--uc-identity-color-teal) !important;
|
||||||
|
}
|
||||||
|
.identity-color-green {
|
||||||
|
--identity-tab-color: var(--uc-identity-color-green) !important;
|
||||||
|
--identity-icon-color: var(--uc-identity-color-green) !important;
|
||||||
|
}
|
||||||
|
.identity-color-yellow {
|
||||||
|
--identity-tab-color: var(--uc-identity-color-yellow) !important;
|
||||||
|
--identity-icon-color: var(--uc-identity-color-yellow) !important;
|
||||||
|
}
|
||||||
|
.identity-color-orange {
|
||||||
|
--identity-tab-color: var(--uc-identity-color-orange) !important;
|
||||||
|
--identity-icon-color: var(--uc-identity-color-orange) !important;
|
||||||
|
}
|
||||||
|
.identity-color-red {
|
||||||
|
--identity-tab-color: var(--uc-identity-color-red) !important;
|
||||||
|
--identity-icon-color: var(--uc-identity-color-red) !important;
|
||||||
|
}
|
||||||
|
.identity-color-pink {
|
||||||
|
--identity-tab-color: var(--uc-identity-color-pink) !important;
|
||||||
|
--identity-icon-color: var(--uc-identity-color-pink) !important;
|
||||||
|
}
|
||||||
|
.identity-color-purple {
|
||||||
|
--identity-tab-color: var(--uc-identity-color-purple) !important;
|
||||||
|
--identity-icon-color: var(--uc-identity-color-purple) !important;
|
||||||
|
}
|
6
modules/home/foot/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{...}: {
|
||||||
|
programs.foot = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
xdg.configFile."foot/foot.ini".source = ./foot.ini;
|
||||||
|
}
|
41
modules/home/foot/foot.ini
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
|
||||||
|
[main]
|
||||||
|
# Police
|
||||||
|
font=JetBrainsMono nerd font:size=11
|
||||||
|
|
||||||
|
[url]
|
||||||
|
osc8-underline=always
|
||||||
|
|
||||||
|
[cursor]
|
||||||
|
style=block
|
||||||
|
blink=yes
|
||||||
|
|
||||||
|
[mouse]
|
||||||
|
hide-when-typing=yes
|
||||||
|
|
||||||
|
[key-bindings]
|
||||||
|
scrollback-up-page=Control+Shift+Page_Up
|
||||||
|
scrollback-down-page=Control+Shift+Page_Down
|
||||||
|
scrollback-up-line=Control+Shift+Up
|
||||||
|
scrollback-down-line=Control+Shift+Down
|
||||||
|
|
||||||
|
|
||||||
|
[colors]
|
||||||
|
foreground=B9B9B9 # Text
|
||||||
|
background=1F1F1F # Base
|
||||||
|
regular0=45475a # Surface 1
|
||||||
|
regular1=f38ba8 # red
|
||||||
|
regular2=a6e3a1 # green
|
||||||
|
regular3=f9e2af # yellow
|
||||||
|
regular4=89b4fa # blue
|
||||||
|
regular5=f5c2e7 # pink
|
||||||
|
regular6=94e2d5 # teal
|
||||||
|
regular7=bac2de # Subtext 1
|
||||||
|
bright0=585b70 # Surface 2
|
||||||
|
bright1=f38ba8 # red
|
||||||
|
bright2=a6e3a1 # green
|
||||||
|
bright3=f9e2af # yellow
|
||||||
|
bright4=89b4fa # blue
|
||||||
|
bright5=f5c2e7 # pink
|
||||||
|
bright6=94e2d5 # teal
|
||||||
|
bright7=a6adc8 # Subtext 0
|
36
modules/home/gaming/default.nix
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
{ pkgs, config, inputs, ... }: {
|
||||||
|
home.packages = with pkgs;[
|
||||||
|
gamemode
|
||||||
|
gamescope
|
||||||
|
winetricks
|
||||||
|
inputs.nix-gaming.packages.${pkgs.system}.proton-ge
|
||||||
|
inputs.nix-gaming.packages.${pkgs.system}.wine-ge
|
||||||
|
];
|
||||||
|
# inputs.nix-gaming.packages.${pkgs.system}.faf-client
|
||||||
|
# inputs.nix-gaming.packages.${pkgs.system}.osu-lazer-bin
|
||||||
|
# ] ++ (inputs.nix-gaming.lib.legendaryBuilder pkgs
|
||||||
|
# {
|
||||||
|
# games = {
|
||||||
|
# rocket-league = {
|
||||||
|
# desktopName = "Rocket League";
|
||||||
|
# tricks = [ "dxvk" "win10" ];
|
||||||
|
# icon = builtins.fetchurl {
|
||||||
|
# url = "https://user-images.githubusercontent.com/36706276/203341314-eaaa0659-9b79-4f40-8b4a-9bc1f2b17e45.png";
|
||||||
|
# name = "rocket-league.png";
|
||||||
|
# sha256 = "0a9ayr3vwsmljy7dpf8wgichsbj4i4wrmd8awv2hffab82fz4ykb";
|
||||||
|
# };
|
||||||
|
# discordIntegration = false;
|
||||||
|
# gamemodeIntegration = true;
|
||||||
|
# preCommands = ''
|
||||||
|
# echo "the game will start!"
|
||||||
|
# '';
|
||||||
|
# postCommands = ''
|
||||||
|
# echo "the game has stopped!"
|
||||||
|
# '';
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# opts = {
|
||||||
|
# wine = inputs.nix-gaming.packages.${pkgs.system}.wine-ge;
|
||||||
|
# };
|
||||||
|
# });
|
||||||
|
}
|
6
modules/home/git/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
programs.git.enable = true;
|
||||||
|
programs.git.userName = "Frost-Phoenix";
|
||||||
|
programs.git.userEmail = "67cyril6767@gmail.com";
|
||||||
|
home.packages = [ pkgs.gh ];
|
||||||
|
}
|
42
modules/home/gtk/default.nix
Executable file
|
@ -0,0 +1,42 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
matrix-gtk = pkgs.fetchFromGitHub {
|
||||||
|
owner = "samiulbasirfahim";
|
||||||
|
repo = "Matrix-gtk";
|
||||||
|
rev = "9ff060e016e5cd4830aafb6299142c3d8922944e";
|
||||||
|
sha256 = "K7tEtB0WGKyjND+pZKUd4pktBlCV3v27pvqaxMILpFU=";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
fonts.fontconfig.enable = true;
|
||||||
|
home.packages = [
|
||||||
|
pkgs.twemoji-color-font
|
||||||
|
pkgs.noto-fonts
|
||||||
|
pkgs.noto-fonts-cjk
|
||||||
|
pkgs.noto-fonts-emoji
|
||||||
|
(pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; })
|
||||||
|
];
|
||||||
|
xdg.dataFile."themes/matrix-gtk".source = matrix-gtk;
|
||||||
|
gtk = {
|
||||||
|
enable = true;
|
||||||
|
font = {
|
||||||
|
name = "JetBrainsMono Nerd Font";
|
||||||
|
size = 10;
|
||||||
|
};
|
||||||
|
iconTheme = {
|
||||||
|
package = pkgs.papirus-icon-theme;
|
||||||
|
name = "Papirus-Dark";
|
||||||
|
};
|
||||||
|
theme = {
|
||||||
|
name = "matrix-gtk";
|
||||||
|
};
|
||||||
|
cursorTheme = {
|
||||||
|
name = "Catppuccin-Frappe-Dark";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
home.pointerCursor = {
|
||||||
|
package = pkgs.catppuccin-cursors;
|
||||||
|
name = "Catppuccin-Frappe-Red";
|
||||||
|
size = 15;
|
||||||
|
};
|
||||||
|
}
|
205
modules/home/hyprland/config.nix
Normal file
|
@ -0,0 +1,205 @@
|
||||||
|
{ ... }:
|
||||||
|
let
|
||||||
|
color = (import ../../variables/colors.nix);
|
||||||
|
window_manager = (import ../../variables/window_manager.nix);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
extraConfig = "
|
||||||
|
$mainMod = SUPER
|
||||||
|
monitor = ,highrr,auto,1
|
||||||
|
monitor = ,highres,auto,1
|
||||||
|
|
||||||
|
|
||||||
|
input {
|
||||||
|
kb_layout = us
|
||||||
|
numlock_by_default = true
|
||||||
|
follow_mouse = 1
|
||||||
|
sensitivity = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
misc {
|
||||||
|
disable_autoreload = true
|
||||||
|
disable_hyprland_logo = true
|
||||||
|
always_follow_on_dnd = true
|
||||||
|
layers_hog_keyboard_focus = true
|
||||||
|
animate_manual_resizes = false
|
||||||
|
enable_swallow = true
|
||||||
|
swallow_regex =
|
||||||
|
focus_on_activate = true
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
general {
|
||||||
|
gaps_in = 6
|
||||||
|
gaps_out = 10
|
||||||
|
border_size = 2
|
||||||
|
col.active_border = rgba(595959ff)
|
||||||
|
col.inactive_border = rgba(00140e10)
|
||||||
|
apply_sens_to_raw = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dwindle {
|
||||||
|
no_gaps_when_only = false
|
||||||
|
force_split = 0
|
||||||
|
special_scale_factor = 0.8
|
||||||
|
split_width_multiplier = 1.0
|
||||||
|
use_active_for_splits = true
|
||||||
|
pseudotile = yes
|
||||||
|
preserve_split = yes
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
master {
|
||||||
|
new_is_master = true
|
||||||
|
special_scale_factor = 1
|
||||||
|
no_gaps_when_only = false
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
decoration {
|
||||||
|
rounding = 0
|
||||||
|
multisample_edges = true
|
||||||
|
blur_new_optimizations = 1
|
||||||
|
active_opacity = 0.8500;
|
||||||
|
inactive_opacity = 0.76;
|
||||||
|
blur = 1
|
||||||
|
blur_size = 2
|
||||||
|
blur_passes = 2
|
||||||
|
drop_shadow = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled=1
|
||||||
|
bezier = overshot, 0.13, 0.99, 0.29, 1.1
|
||||||
|
animation = windows, 1, 4, overshot, slide
|
||||||
|
animation = windowsOut, 1, 5, default, popin 80%
|
||||||
|
animation = border, 1, 5, default
|
||||||
|
animation = fade, 1, 8, default
|
||||||
|
animation = workspaces, 1, 6, overshot, slidevert
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------
|
||||||
|
# keybindings
|
||||||
|
bind = $mainMod, Return, exec, foot
|
||||||
|
bind = $mainMod SHIFT, Return, exec, foot --fullscreen
|
||||||
|
bind = $mainMod, Q, killactive,
|
||||||
|
bind = $mainMod, T, killactive,
|
||||||
|
bind = $mainMod, F, fullscreen,
|
||||||
|
bind = $mainMod, Space, togglefloating,
|
||||||
|
bind = $mainMod, Z, exec, pkill wofi || wofi --show drun
|
||||||
|
bind = $mainMod, X, exec, pkill wlogout || wlogout -b 4
|
||||||
|
bind = $mainMod, C, exec, hyprctl dispatch centerwindow none
|
||||||
|
bind = SUPER, V, exec, cliphist list | wofi -dmenu | cliphist decode | wl-copy
|
||||||
|
bind = $mainMod, P, pseudo,
|
||||||
|
bind = $mainMod, Y, pin,
|
||||||
|
bind = $mainMod, J, togglesplit,
|
||||||
|
bind = $mainMod, E, exec, thunar
|
||||||
|
bind = $mainMod, B, exec, pkill -SIGUSR1 .waybar-wrapped
|
||||||
|
bind = $mainMod SHIFT, c ,exec, hyprpicker -a
|
||||||
|
bind = $mainMod, G,exec, $HOME/.local/bin/toggle_layout
|
||||||
|
bind = $mainMod, W,exec, pkill wofi || wallpaper-picker
|
||||||
|
bind = $mainMod, O,exec, toggle-opacity
|
||||||
|
bind = $mainMod, A,exec, toggle-animation
|
||||||
|
bind = $mainMod, D,exec, toggle-blur
|
||||||
|
# screenshot
|
||||||
|
bind = ,Print, exec, grimblast --notify --cursor save area ~/Pictures/$(date ' + %Y-%m-%d ' T '%H:%M:%S ').png
|
||||||
|
bind = $mainMod, Print, exec, grimblast --notify --cursor copy area
|
||||||
|
# switch focus
|
||||||
|
bind = $mainMod, left, movefocus, l
|
||||||
|
bind = $mainMod, right, movefocus, r
|
||||||
|
bind = $mainMod, up, movefocus, u
|
||||||
|
bind = $mainMod, down, movefocus, d
|
||||||
|
# switch workspace
|
||||||
|
bind = $mainMod, 1, workspace, 1
|
||||||
|
bind = $mainMod, 2, workspace, 2
|
||||||
|
bind = $mainMod, 3, workspace, 3
|
||||||
|
bind = $mainMod, 4, workspace, 4
|
||||||
|
bind = $mainMod, 5, workspace, 5
|
||||||
|
bind = $mainMod, 6, workspace, 6
|
||||||
|
bind = $mainMod, 7, workspace, 7
|
||||||
|
bind = $mainMod, 8, workspace, 8
|
||||||
|
bind = $mainMod, 9, workspace, 9
|
||||||
|
bind = $mainMod, 0, workspace, 10
|
||||||
|
# same as above, but switch to the workspace
|
||||||
|
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||||
|
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||||
|
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||||
|
bind = $mainMod CTRL, c, movetoworkspace, empty
|
||||||
|
# window control
|
||||||
|
bind = SUPER SHIFT, left, movewindow, l
|
||||||
|
bind = SUPER SHIFT, right, movewindow, r
|
||||||
|
bind = SUPER SHIFT, up, movewindow, u
|
||||||
|
bind = SUPER SHIFT, down, movewindow, d
|
||||||
|
bind = SUPER CTRL, left, resizeactive, -80 0
|
||||||
|
bind = SUPER CTRL, right, resizeactive, 80 0
|
||||||
|
bind = SUPER CTRL, up, resizeactive, 0 -80
|
||||||
|
bind = SUPER CTRL, down, resizeactive, 0 80
|
||||||
|
bind = SUPER ALT, left, moveactive, -80 0
|
||||||
|
bind = SUPER ALT, right, moveactive, 80 0
|
||||||
|
bind = SUPER ALT, up, moveactive, 0 -80
|
||||||
|
bind = SUPER ALT, down, moveactive, 0 80
|
||||||
|
# media and volume controls
|
||||||
|
bind = ,XF86AudioRaiseVolume,exec, pamixer -i 5
|
||||||
|
bind = ,XF86AudioLowerVolume,exec, pamixer -d 5
|
||||||
|
bind = ,XF86AudioMute,exec, pamixer -t
|
||||||
|
bind = ,XF86AudioPlay,exec, playerctl play-pause
|
||||||
|
bind = ,XF86AudioNext,exec, playerctl next
|
||||||
|
bind = ,XF86AudioPrev,exec, playerctl previous
|
||||||
|
bind = , XF86AudioStop, exec, playerctl stop
|
||||||
|
bind = $mainMod, mouse_down, workspace, e-1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e+1
|
||||||
|
# mouse binding
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
# windowrule
|
||||||
|
windowrule = float,wlogout
|
||||||
|
windowrule = float,wofi
|
||||||
|
windowrule = noanim,wlogout
|
||||||
|
windowrule = noanim,wofi
|
||||||
|
windowrule = pin,wofi
|
||||||
|
windowrule = noborder,wofi
|
||||||
|
windowrule = tile, neovide
|
||||||
|
windowrule = idleinhibit focus,mpv
|
||||||
|
windowrule = float,udiskie
|
||||||
|
windowrule = float,title:^(Transmission)$
|
||||||
|
windowrule = float,title:^(Volume Control)$
|
||||||
|
windowrule = float,title:^(Firefox — Sharing Indicator)$
|
||||||
|
windowrule = move 0 0,title:^(Firefox — Sharing Indicator)$
|
||||||
|
windowrule = size 700 450,title:^(Volume Control)$
|
||||||
|
windowrule = move 40 55%,title:^(Volume Control)$
|
||||||
|
windowrulev2 = float, title:^(Picture-in-Picture)$
|
||||||
|
windowrulev2 = opacity 1.0 override 1.0 override, title:^(Picture-in-Picture)$
|
||||||
|
windowrulev2 = pin, title:^(Picture-in-Picture)$
|
||||||
|
windowrule = float,imv
|
||||||
|
windowrule = move 510 290,imv
|
||||||
|
windowrule = size 900 500,imv
|
||||||
|
windowrule = float,mpv
|
||||||
|
windowrule = move 510 290,mpv
|
||||||
|
windowrule = size 900 500,mpv
|
||||||
|
windowrulev2 = idleinhibit focus, class:^(mpv)$
|
||||||
|
windowrulev2 = idleinhibit fullscreen, class:^(firefox)$
|
||||||
|
|
||||||
|
|
||||||
|
# autostart
|
||||||
|
exec-once = hyprctl setcursor Catppuccin-Frappe-Dark 16
|
||||||
|
exec-once = systemctl --user import-environment &
|
||||||
|
exec-once = hash dbus-update-activation-environment 2>/dev/null &
|
||||||
|
exec-once = dbus-update-activation-environment --systemd &
|
||||||
|
exec-once = swww init && swaylock && notify-send 'Hey $USER, Welcome back' && load-env
|
||||||
|
exec-once = wl-paste --type text --watch cliphist store && wl-paste --type image --watch cliphist store && mako &
|
||||||
|
exec-once = waybar &
|
||||||
|
";
|
||||||
|
};
|
||||||
|
}
|
6
modules/home/hyprland/default.nix
Executable file
|
@ -0,0 +1,6 @@
|
||||||
|
{ inputs, ... }: {
|
||||||
|
imports = [ (import ./hyprland.nix) ]
|
||||||
|
++ [ (import ./config.nix) ]
|
||||||
|
++ [ (import ./variables.nix) ]
|
||||||
|
++ [ inputs.hyprland.homeManagerModules.default ];
|
||||||
|
}
|
31
modules/home/hyprland/hyprland.nix
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{ inputs
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
swww
|
||||||
|
inputs.hypr-contrib.packages.${pkgs.system}.grimblast
|
||||||
|
hyprpicker
|
||||||
|
wofi
|
||||||
|
rofi-wayland
|
||||||
|
wlogout
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
wl-clipboard
|
||||||
|
cliphist
|
||||||
|
wf-recorder
|
||||||
|
glib
|
||||||
|
wayland
|
||||||
|
direnv
|
||||||
|
];
|
||||||
|
systemd.user.targets.hyprland-session.Unit.Wants = [ "xdg-desktop-autostart.target" ];
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland = {
|
||||||
|
enable = true;
|
||||||
|
hidpi = true;
|
||||||
|
};
|
||||||
|
nvidiaPatches = false;
|
||||||
|
systemdIntegration = true;
|
||||||
|
};
|
||||||
|
}
|
29
modules/home/hyprland/variables.nix
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.sessionVariables = {
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
__GL_GSYNC_ALLOWED = "0";
|
||||||
|
__GL_VRR_ALLOWED = "0";
|
||||||
|
_JAVA_AWT_WM_NONEREPARENTING = "1";
|
||||||
|
SSH_AUTH_SOCK = "/run/user/1000/keyring/ssh";
|
||||||
|
DISABLE_QT5_COMPAT = "0";
|
||||||
|
GDK_BACKEND = "wayland";
|
||||||
|
ANKI_WAYLAND = "1";
|
||||||
|
DIRENV_LOG_FORMAT = "";
|
||||||
|
WLR_DRM_NO_ATOMIC = "1";
|
||||||
|
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
|
||||||
|
QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
|
||||||
|
QT_QPA_PLATFORM = "xcb";
|
||||||
|
QT_QPA_PLATFORMTHEME = "qt5ct";
|
||||||
|
QT_STYLE_OVERRIDE = "kvantum";
|
||||||
|
MOZ_ENABLE_WAYLAND = "1";
|
||||||
|
WLR_BACKEND = "vulkan";
|
||||||
|
WLR_RENDERER = "vulkan";
|
||||||
|
WLR_NO_HARDWARE_CURSORS = "1";
|
||||||
|
XDG_SESSION_TYPE = "wayland";
|
||||||
|
SDL_VIDEODRIVER = "wayland";
|
||||||
|
CLUTTER_BACKEND = "wayland";
|
||||||
|
GTK_THEME = "matrix-gtk";
|
||||||
|
};
|
||||||
|
}
|
25
modules/home/mako/default.nix
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
services = {
|
||||||
|
mako = {
|
||||||
|
enable = true;
|
||||||
|
font = "JetBrainsMono Nerd Font 11";
|
||||||
|
padding = "20";
|
||||||
|
defaultTimeout = 5000;
|
||||||
|
borderSize = 2;
|
||||||
|
borderRadius = 0;
|
||||||
|
backgroundColor = "#1F1F1F";
|
||||||
|
borderColor = "#595959";
|
||||||
|
progressColor = "over #313244";
|
||||||
|
textColor = "#cdd6f4";
|
||||||
|
extraConfig = ''
|
||||||
|
text-alignment=center
|
||||||
|
[urgency=high]
|
||||||
|
border-color=#B45C65
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
79
modules/home/neofetch/config/config.conf
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
print_info()
|
||||||
|
{
|
||||||
|
info title
|
||||||
|
info underline
|
||||||
|
info " " distro
|
||||||
|
info " " kernel
|
||||||
|
info " " packages
|
||||||
|
info " " de
|
||||||
|
info " " memory
|
||||||
|
info " " uptime
|
||||||
|
info cols
|
||||||
|
}
|
||||||
|
title_fqdn="off"
|
||||||
|
kernel_shorthand="on"
|
||||||
|
distro_shorthand="on"
|
||||||
|
os_arch="off"
|
||||||
|
uptime_shorthand="tiny"
|
||||||
|
memory_percent="on"
|
||||||
|
memory_unit="mib"
|
||||||
|
package_managers="off"
|
||||||
|
shell_path="off"
|
||||||
|
shell_version="on"
|
||||||
|
speed_type="bios_limit"
|
||||||
|
speed_shorthand="on"
|
||||||
|
cpu_brand="on"
|
||||||
|
cpu_speed="on"
|
||||||
|
cpu_cores="logical"
|
||||||
|
cpu_temp="C"
|
||||||
|
gpu_brand="on"
|
||||||
|
gpu_type="all"
|
||||||
|
refresh_rate="on"
|
||||||
|
gtk_shorthand="on"
|
||||||
|
gtk2="on"
|
||||||
|
gtk3="on"
|
||||||
|
public_ip_host=""
|
||||||
|
public_ip_timeout=2
|
||||||
|
de_version="on"
|
||||||
|
disk_show=('/')
|
||||||
|
disk_subtitle="mount"
|
||||||
|
disk_percent="on"
|
||||||
|
music_player="auto"
|
||||||
|
song_format="%artist% - %album% - %title%"
|
||||||
|
song_shorthand="on"
|
||||||
|
mpc_args=(-p 7777)
|
||||||
|
colors=(1 1 1 1 1 1)
|
||||||
|
# colors=(231)
|
||||||
|
bold="on"
|
||||||
|
underline_enabled="on"
|
||||||
|
underline_char="━"
|
||||||
|
separator="⋮"
|
||||||
|
block_range=(0 7)
|
||||||
|
color_blocks="off"
|
||||||
|
block_width=3
|
||||||
|
block_height=1
|
||||||
|
col_offset="auto"
|
||||||
|
bar_char_elapsed="-"
|
||||||
|
bar_char_total="="
|
||||||
|
bar_border="on"
|
||||||
|
bar_length=15
|
||||||
|
bar_color_elapsed="distro"
|
||||||
|
bar_color_total="distro"
|
||||||
|
cpu_display="off"
|
||||||
|
memory_display="off"
|
||||||
|
battery_display="off"
|
||||||
|
disk_display="off"
|
||||||
|
image_backend="ueberzug"
|
||||||
|
image_source="$HOME/.config/neofetch/logo.png"
|
||||||
|
ascii_distro="auto"
|
||||||
|
ascii_colors=(distro)
|
||||||
|
ascii_bold="on"
|
||||||
|
image_loop="off"
|
||||||
|
crop_mode="normal"
|
||||||
|
crop_offset="center"
|
||||||
|
image_size="208px"
|
||||||
|
gap=2
|
||||||
|
yoffset=0
|
||||||
|
xoffset=0
|
||||||
|
background_color=
|
||||||
|
stdout="off"
|
BIN
modules/home/neofetch/config/logo.png
Normal file
After Width: | Height: | Size: 219 KiB |
9
modules/home/neofetch/default.nix
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
home.packages = [pkgs.neofetch];
|
||||||
|
# xdg.configFile."neofetch".source = ./config;
|
||||||
|
}
|
13
modules/home/nvim/default.nix
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
let
|
||||||
|
neovim-config = pkgs.fetchFromGitHub {
|
||||||
|
owner = "samiulbasirfahim";
|
||||||
|
repo = "neovim";
|
||||||
|
rev = "a3344302921b59ecb24c167c9dc64bc8df4803da";
|
||||||
|
sha256 = "9RVtU+bx8pBSYd66PU0F+e1FlRWbju035RQ2p7DZLGk=";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
xdg.configFile."nvim".source = neovim-config;
|
||||||
|
programs.neovim.enable = true;
|
||||||
|
}
|
50
modules/home/package/default.nix
Executable file
|
@ -0,0 +1,50 @@
|
||||||
|
{ inputs
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}: {
|
||||||
|
home.packages =
|
||||||
|
let
|
||||||
|
php = pkgs.php.buildEnv { extraConfig = "memory_limit = 2G"; };
|
||||||
|
in
|
||||||
|
(with pkgs;
|
||||||
|
[
|
||||||
|
# programming
|
||||||
|
python39
|
||||||
|
nodejs
|
||||||
|
nodePackages.nodemon
|
||||||
|
yarn
|
||||||
|
nix-prefetch-github
|
||||||
|
typescript
|
||||||
|
rnix-lsp
|
||||||
|
ripgrep
|
||||||
|
rustup
|
||||||
|
php
|
||||||
|
vscode
|
||||||
|
|
||||||
|
# others
|
||||||
|
openssl
|
||||||
|
libnotify
|
||||||
|
pamixer
|
||||||
|
xfce.thunar
|
||||||
|
pavucontrol
|
||||||
|
wget
|
||||||
|
unzip
|
||||||
|
gparted
|
||||||
|
mpv
|
||||||
|
playerctl
|
||||||
|
qalculate-gtk
|
||||||
|
bleachbit
|
||||||
|
imv
|
||||||
|
htop
|
||||||
|
xdg-utils
|
||||||
|
fzf
|
||||||
|
ffmpeg
|
||||||
|
bore-cli
|
||||||
|
discord
|
||||||
|
exa
|
||||||
|
inputs.alejandra.defaultPackage.${system}
|
||||||
|
]
|
||||||
|
++ [
|
||||||
|
|
||||||
|
]);
|
||||||
|
}
|
12
modules/home/package/python.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{pkgs, ...}: let
|
||||||
|
my-python-packages = ps:
|
||||||
|
with ps; [
|
||||||
|
pandas
|
||||||
|
|
||||||
|
requests
|
||||||
|
];
|
||||||
|
in {
|
||||||
|
environment.systemPackages = [
|
||||||
|
(pkgs.python3.withPackages my-python-packages)
|
||||||
|
];
|
||||||
|
}
|
413
modules/home/scripts/ani-cli
Normal file
|
@ -0,0 +1,413 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
version_number="4.2.1"
|
||||||
|
|
||||||
|
# UI
|
||||||
|
|
||||||
|
external_menu() {
|
||||||
|
rofi "$1" -sort -dmenu -i -width 1500 -p "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
launcher() {
|
||||||
|
[ "$use_external_menu" = "0" ] && [ -z "$1" ] && set -- "+m" "$2"
|
||||||
|
[ "$use_external_menu" = "0" ] && fzf "$1" --reverse --prompt "$2"
|
||||||
|
[ "$use_external_menu" = "1" ] && external_menu "$1" "$2"
|
||||||
|
}
|
||||||
|
|
||||||
|
nth() {
|
||||||
|
stdin=$(cat -)
|
||||||
|
[ -z "$stdin" ] && return 1
|
||||||
|
line_count="$(printf "%s\n" "$stdin" | wc -l | tr -d "[:space:]")"
|
||||||
|
[ "$line_count" -eq 1 ] && printf "%s" "$stdin" | cut -f2,3 && return 0
|
||||||
|
prompt="$1"
|
||||||
|
multi_flag=""
|
||||||
|
[ $# -ne 1 ] && shift && multi_flag="$1"
|
||||||
|
line=$(printf "%s" "$stdin" | cut -f1,3 | tr '\t' ' ' | launcher "$multi_flag" "$prompt" | cut -d " " -f 1)
|
||||||
|
[ -n "$line" ] && printf "%s" "$stdin" | grep -E '^'"${line}"'($|\s)' | cut -f2,3 || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
printf "\33[2K\r\033[1;31m%s\033[0m\n" "$*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
help_info() {
|
||||||
|
printf "
|
||||||
|
Usage:
|
||||||
|
%s [options] [query]
|
||||||
|
%s [query] [options]
|
||||||
|
%s [options] [query] [options]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
-c, --continue
|
||||||
|
Continue watching from history
|
||||||
|
-d, --download
|
||||||
|
Download the video instead of playing it
|
||||||
|
-D, --delete
|
||||||
|
Delete history
|
||||||
|
-s, --syncplay
|
||||||
|
Use Syncplay to watch with friends
|
||||||
|
-S, --select-nth
|
||||||
|
Select nth entry
|
||||||
|
-q, --quality
|
||||||
|
Specify the video quality
|
||||||
|
-v, --vlc
|
||||||
|
Use VLC to play the video
|
||||||
|
-V, --version
|
||||||
|
Show the version of the script
|
||||||
|
-h, --help
|
||||||
|
Show this help message and exit
|
||||||
|
-e, --episode, -r, --range
|
||||||
|
Specify the number of episodes to watch
|
||||||
|
--dub
|
||||||
|
play dubbed version
|
||||||
|
-U, --update
|
||||||
|
Update the script
|
||||||
|
Some example usages:
|
||||||
|
%s -q 720p banana fish
|
||||||
|
%s -d -e 2 cyberpunk edgerunners
|
||||||
|
%s --vlc cyberpunk edgerunners -q 1080p -e 4
|
||||||
|
%s blue lock -e 5-6
|
||||||
|
%s -e \"5 6\" blue lock
|
||||||
|
\n" "${0##*/}" "${0##*/}" "${0##*/}" "${0##*/}" "${0##*/}" "${0##*/}" "${0##*/}" "${0##*/}"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
version_info() {
|
||||||
|
printf "%s\n" "$version_number"
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
update_script() {
|
||||||
|
update="$(curl -s -A "$agent" "https://raw.githubusercontent.com/pystardust/ani-cli/master/ani-cli")" || die "Connection error"
|
||||||
|
update="$(printf '%s\n' "$update" | diff -u "$0" -)"
|
||||||
|
if [ -z "$update" ]; then
|
||||||
|
printf "Script is up to date :)\n"
|
||||||
|
else
|
||||||
|
if printf '%s\n' "$update" | patch "$0" -; then
|
||||||
|
printf "Script has been updated\n"
|
||||||
|
else
|
||||||
|
die "Can't update for some reason!"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# checks if dependencies are present
|
||||||
|
dep_ch() {
|
||||||
|
for dep; do
|
||||||
|
command -v "$dep" >/dev/null || die "Program \"$dep\" not found. Please install it."
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# SCRAPING
|
||||||
|
|
||||||
|
# extract the video links from reponse of embed urls, extract mp4 links form m3u8 lists
|
||||||
|
get_links() {
|
||||||
|
episode_link="$(curl -e "https://${allanime_base}" -s --cipher "AES256-SHA256" "https://allanimenews.com/apivtwo/clock.json?id=$*" -A "$agent" | sed 's|},{|\n|g' | sed -nE 's|.*link":"([^"]*)".*"resolutionStr":"([^"]*)".*|\2 >\1|p;s|.*hls","url":"([^"]*)".*"hardsub_lang":"en-US".*|\1|p')"
|
||||||
|
case "$episode_link" in
|
||||||
|
*crunchyroll*)
|
||||||
|
curl -e "https://${allanime_base}" -s --cipher "AES256-SHA256" "$episode_link" -A "$agent" | sed 's|^#.*x||g; s|,.*|p|g; /^#/d; $!N; s|\n| >|' | sort -nr
|
||||||
|
;;
|
||||||
|
*repackager.wixmp.com*)
|
||||||
|
extract_link=$(printf "%s" "$episode_link" | cut -d'>' -f2 | sed 's|repackager.wixmp.com/||g;s|\.urlset.*||g')
|
||||||
|
for j in $(printf "%s" "$episode_link" | sed -nE 's|.*/,([^/]*),/mp4.*|\1|p' | sed 's|,|\n|g'); do
|
||||||
|
printf "%s >%s\n" "$j" "$extract_link" | sed "s|,[^/]*|${j}|g"
|
||||||
|
done | sort -nr
|
||||||
|
;;
|
||||||
|
*//cache.* | *gofcdn.com*)
|
||||||
|
if printf "%s" "$episode_link" | head -1 | grep -q "original.m3u"; then
|
||||||
|
printf "%s" "$episode_link"
|
||||||
|
else
|
||||||
|
extract_link=$(printf "%s" "$episode_link" | head -1 | cut -d'>' -f2)
|
||||||
|
relative_link=$(printf "%s" "$extract_link" | sed 's|[^/]*$||')
|
||||||
|
curl -e "https://${allanime_base}/" -s --cipher "AES256-SHA256" "$extract_link" -A "$agent" | sed 's|^#.*x||g; s|,.*|p|g; /^#/d; $!N; s|\n| >|' | sed "s|>|>${relative_link}|g" | sort -nr
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*) [ -n "$episode_link" ] && printf "%s\n" "$episode_link" ;;
|
||||||
|
esac
|
||||||
|
printf "Fetching %s Links\n" "$provider_name" 1>&2
|
||||||
|
}
|
||||||
|
|
||||||
|
# innitialises provider_name and provider_id. First argument is the provider name, 2nd is the regex that matches that provider's link
|
||||||
|
provider_init() {
|
||||||
|
provider_name=$1
|
||||||
|
provider_id=$(printf "%s" "$resp" | sed -n "$2" | head -1 | cut -d':' -f2)
|
||||||
|
}
|
||||||
|
|
||||||
|
# generates links based on given provider
|
||||||
|
generate_link() {
|
||||||
|
case $1 in
|
||||||
|
1) provider_init 'wixmp' '/Default :/p' ;; # wixmp(default)(m3u8)(multi) -> (mp4)(multi)
|
||||||
|
2) provider_init 'pstatic' '/Default B :/p' ;; # pstatic(default backup)(mp4)(multi)
|
||||||
|
3) provider_init 'vrv' '/Ac :/p' ;; # vrv(crunchyroll)(m3u8)(multi)
|
||||||
|
4) provider_init 'sharepoint' '/S-mp4 :/p' ;; # sharepoint(mp4)(single)
|
||||||
|
5) provider_init 'usercloud' '/Uv-mp4 :/p' ;; # usercloud(mp4)(single)
|
||||||
|
*) provider_init 'gogoanime' '/Luf-mp4 :/p' ;; # gogoanime(m3u8)(multi)
|
||||||
|
esac
|
||||||
|
[ -n "$provider_id" ] && get_links "$provider_id"
|
||||||
|
}
|
||||||
|
|
||||||
|
select_quality() {
|
||||||
|
case "$1" in
|
||||||
|
best) result=$(printf "%s" "$links" | head -n1) ;;
|
||||||
|
worst) result=$(printf "%s" "$links" | grep -E '^[0-9]{3,4}' | tail -n1) ;;
|
||||||
|
*) result=$(printf "%s" "$links" | grep -m 1 "$1") ;;
|
||||||
|
esac
|
||||||
|
[ -z "$result" ] && printf "Specified quality not found, defaulting to best\n" 1>&2 && result=$(printf "%s" "$links" | head -n1)
|
||||||
|
printf "%s" "$result" | cut -d'>' -f2
|
||||||
|
}
|
||||||
|
|
||||||
|
# gets embed urls, collects direct links into provider files, selects one with desired quality into $episode
|
||||||
|
get_episode_url() {
|
||||||
|
# get the embed urls of the selected episode
|
||||||
|
episode_embed_gql="query (\$showId: String!, \$translationType: VaildTranslationTypeEnumType!, \$episodeString: String!) { episode( showId: \$showId translationType: \$translationType episodeString: \$episodeString ) { episodeString sourceUrls }}"
|
||||||
|
|
||||||
|
resp=$(curl -e "https://${allanime_base}" -s --cipher "AES256-SHA256" -G "https://api.${allanime_base}/allanimeapi" --data-urlencode "variables={\"showId\":\"$id\",\"translationType\":\"$mode\",\"episodeString\":\"$ep_no\"}" --data-urlencode "query=$episode_embed_gql" -A "$agent" | tr '{}' '\n' | sed 's|\\u002F|\/|g;s|\\||g' | sed -nE 's|.*sourceUrl":".*clock\?id=([^"]*)".*sourceName":"([^"]*)".*|\2 :\1|p')
|
||||||
|
# generate links into sequential files
|
||||||
|
provider=1
|
||||||
|
i=0
|
||||||
|
while [ "$i" -lt 6 ]; do
|
||||||
|
generate_link "$provider" >"$cache_dir"/"$i" &
|
||||||
|
provider=$((provider % 6 + 1))
|
||||||
|
: $((i += 1))
|
||||||
|
done
|
||||||
|
wait
|
||||||
|
# select the link with matching quality
|
||||||
|
links=$(cat "$cache_dir"/* | sed 's|^Mp4-||g' | sort -g -r -s)
|
||||||
|
episode=$(select_quality "$quality")
|
||||||
|
[ -z "$episode" ] && die "Episode not released!"
|
||||||
|
}
|
||||||
|
|
||||||
|
# search the query and give results
|
||||||
|
search_anime() {
|
||||||
|
search_gql="query( \$search: SearchInput \$limit: Int \$page: Int \$translationType: VaildTranslationTypeEnumType \$countryOrigin: VaildCountryOriginEnumType ) { shows( search: \$search limit: \$limit page: \$page translationType: \$translationType countryOrigin: \$countryOrigin ) { edges { _id name availableEpisodes __typename } }}"
|
||||||
|
|
||||||
|
curl -e "https://${allanime_base}" -s --cipher "AES256-SHA256" -G "https://api.${allanime_base}/allanimeapi" --data-urlencode "variables={\"search\":{\"allowAdult\":false,\"allowUnknown\":false,\"query\":\"$1\"},\"limit\":40,\"page\":1,\"translationType\":\"$mode\",\"countryOrigin\":\"ALL\"}" --data-urlencode "query=$search_gql" -A "$agent" | sed 's|Show|\n|g' | sed -nE "s|.*_id\":\"([^\"]*)\",\"name\":\"([^\"]*)\".*${mode}\":([1-9][^,]*).*|\1\t\2 (\3 episodes)|p"
|
||||||
|
}
|
||||||
|
|
||||||
|
# get the episodes list of the selected anime
|
||||||
|
episodes_list() {
|
||||||
|
episodes_list_gql="query (\$showId: String!) { show( _id: \$showId ) { _id availableEpisodesDetail }}"
|
||||||
|
|
||||||
|
curl -e "https://${allanime_base}" -s --cipher AES256-SHA256 -G "https://api.${allanime_base}/allanimeapi" --data-urlencode "variables={\"showId\":\"$*\"}" --data-urlencode "query=$episodes_list_gql" -A "$agent" | sed -nE "s|.*$mode\":\[([0-9.\",]*)\].*|\1|p" | sed 's|,|\n|g; s|"||g' | sort -n -k 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# PLAYING
|
||||||
|
|
||||||
|
process_hist_entry() {
|
||||||
|
ep_list=$(episodes_list "$id")
|
||||||
|
ep_no=$(printf "%s" "$ep_list" | sed -n "/^${ep_no}$/{n;p;}") 2>/dev/null
|
||||||
|
[ -n "$ep_no" ] && printf "%s\t%s - episode %s\n" "$id" "$title" "$ep_no"
|
||||||
|
}
|
||||||
|
|
||||||
|
update_history() {
|
||||||
|
if grep -q -- "$id" "$histfile"; then
|
||||||
|
sed -E "s/^[^\t]+\t${id}\t/${ep_no}\t${id}\t/" "$histfile" >"${histfile}.new"
|
||||||
|
else
|
||||||
|
cp "$histfile" "${histfile}.new"
|
||||||
|
printf "%s\t%s\t%s\n" "$ep_no" "$id" "$title" >>"${histfile}.new"
|
||||||
|
fi
|
||||||
|
mv "${histfile}.new" "$histfile"
|
||||||
|
}
|
||||||
|
|
||||||
|
download() {
|
||||||
|
case $1 in
|
||||||
|
*m3u8*) ffmpeg -loglevel error -stats -i "$1" -c copy "$download_dir/$2.mp4" ;;
|
||||||
|
*) aria2c --check-certificate=false --continue --summary-interval=0 -x 16 -s 16 "$1" --dir="$download_dir" -o "$2.mp4" --download-result=hide ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
play_episode() {
|
||||||
|
[ -z "$episode" ] && get_episode_url
|
||||||
|
case "$player_function" in
|
||||||
|
debug) printf "All links:\n%s\nSelected link:\n%s\n" "$links" "$episode" ;;
|
||||||
|
mpv*) nohup "$player_function" --force-media-title="${allanime_title}episode-${ep_no}-${mode}" "$episode" >/dev/null 2>&1 & ;;
|
||||||
|
android_mpv) nohup am start --user 0 -a android.intent.action.VIEW -d "$episode" -n is.xyz.mpv/.MPVActivity >/dev/null 2>&1 & ;;
|
||||||
|
android_vlc) nohup am start --user 0 -a android.intent.action.VIEW -d "$episode" -n org.videolan.vlc/org.videolan.vlc.gui.video.VideoPlayerActivity -e "title" "${allanime_title}episode-${ep_no}-${mode}" >/dev/null 2>&1 & ;;
|
||||||
|
iina) nohup "$player_function" --no-stdin --keep-running --mpv-force-media-title="${allanime_title}episode-${ep_no}-${mode}" "$episode" >/dev/null 2>&1 & ;;
|
||||||
|
flatpak_mpv) flatpak run io.mpv.Mpv --force-media-title="${allanime_title}episode-${ep_no}-${mode}" "$episode" >/dev/null 2>&1 & ;;
|
||||||
|
vlc*) nohup "$player_function" --play-and-exit --meta-title="${allanime_title}episode-${ep_no}-${mode}" "$episode" >/dev/null 2>&1 & ;;
|
||||||
|
*yncpla*) nohup "$player_function" "$episode" -- --force-media-title="${allanime_title}episode-${ep_no}-${mode}" >/dev/null 2>&1 & ;;
|
||||||
|
download) "$player_function" "$episode" "${allanime_title}episode-${ep_no}-${mode}" ;;
|
||||||
|
catt) nohup catt cast "$episode" >/dev/null 2>&1 & ;;
|
||||||
|
*) nohup "$player_function" "$episode" >/dev/null 2>&1 & ;;
|
||||||
|
esac
|
||||||
|
replay="$episode"
|
||||||
|
unset episode
|
||||||
|
update_history
|
||||||
|
wait
|
||||||
|
}
|
||||||
|
|
||||||
|
play() {
|
||||||
|
start=$(printf "%s" "$ep_no" | grep -Eo '^(-1|[0-9]+(\.[0-9]+)?)')
|
||||||
|
end=$(printf "%s" "$ep_no" | grep -Eo '(-1|[0-9]+(\.[0-9]+)?)$')
|
||||||
|
[ "$start" = "-1" ] && ep_no=$(printf "%s" "$ep_list" | tail -n1) && unset start
|
||||||
|
[ -z "$end" ] || [ "$end" = "$start" ] && unset start end
|
||||||
|
[ "$end" = "-1" ] && end=$(printf "%s" "$ep_list" | tail -n1)
|
||||||
|
line_count=$(printf "%s\n" "$ep_no" | wc -l | tr -d "[:space:]")
|
||||||
|
if [ "$line_count" != 1 ] || [ -n "$start" ]; then
|
||||||
|
[ -z "$start" ] && start=$(printf "%s\n" "$ep_no" | head -n1)
|
||||||
|
[ -z "$end" ] && end=$(printf "%s\n" "$ep_no" | tail -n1)
|
||||||
|
range=$(printf "%s\n" "$ep_list" | sed -nE "/^${start}\$/,/^${end}\$/p")
|
||||||
|
[ -z "$range" ] && die "Invalid range!"
|
||||||
|
for i in $range; do
|
||||||
|
tput clear
|
||||||
|
ep_no=$i
|
||||||
|
printf "\33[2K\r\033[1;34mPlaying episode %s...\033[0m\n" "$ep_no"
|
||||||
|
play_episode
|
||||||
|
done
|
||||||
|
else
|
||||||
|
play_episode
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# MAIN
|
||||||
|
|
||||||
|
# setup
|
||||||
|
agent="Mozilla/5.0 (Windows NT 6.1; Win64; rv:109.0) Gecko/20100101 Firefox/109.0"
|
||||||
|
allanime_base="allanime.to"
|
||||||
|
mode="${ANI_CLI_MODE:-sub}"
|
||||||
|
download_dir="${ANI_CLI_DOWNLOAD_DIR:-.}"
|
||||||
|
quality="${ANI_CLI_QUALITY:-best}"
|
||||||
|
case "$(uname -a)" in
|
||||||
|
*Darwin*) player_function="${ANI_CLI_PLAYER:-iina}" ;; # mac OS
|
||||||
|
*ndroid*) player_function="${ANI_CLI_PLAYER:-android_mpv}" ;; # Android OS (termux)
|
||||||
|
*steamdeck*) player_function="${ANI_CLI_PLAYER:-flatpak_mpv}" ;; # steamdeck OS
|
||||||
|
*MINGW*) player_function="${ANI_CLI_PLAYER:-mpv.exe}" ;; # Windows OS
|
||||||
|
*) player_function="${ANI_CLI_PLAYER:-mpv}" ;; # Linux OS
|
||||||
|
esac
|
||||||
|
|
||||||
|
use_external_menu="${ANI_CLI_EXTERNAL_MENU:-0}"
|
||||||
|
[ -t 0 ] || use_external_menu=1
|
||||||
|
[ "$use_external_menu" = "0" ] && multi_selection_flag="${ANI_CLI_MULTI_SELECTION:-"-m"}"
|
||||||
|
[ "$use_external_menu" = "1" ] && multi_selection_flag="${ANI_CLI_MULTI_SELECTION:-"-multi-select"}"
|
||||||
|
cache_dir="${ANI_CLI_CACHE_DIR:-${XDG_CACHE_HOME:-$HOME/.cache}/ani-cli}"
|
||||||
|
[ ! -d "$cache_dir" ] && mkdir -p "$cache_dir"
|
||||||
|
hist_dir="${ANI_CLI_HIST_DIR:-${XDG_STATE_HOME:-$HOME/.local/state}/ani-cli}"
|
||||||
|
[ ! -d "$hist_dir" ] && mkdir -p "$hist_dir"
|
||||||
|
histfile="$hist_dir/ani-hsts"
|
||||||
|
[ ! -f "$histfile" ] && : >"$histfile"
|
||||||
|
search="${ANI_CLI_DEFAULT_SOURCE:-scrape}"
|
||||||
|
|
||||||
|
while [ $# -gt 0 ]; do
|
||||||
|
case "$1" in
|
||||||
|
-v | --vlc)
|
||||||
|
case "$(uname -a)" in
|
||||||
|
*ndroid*) player_function="android_vlc" ;;
|
||||||
|
MINGW*) player_function="vlc.exe" ;;
|
||||||
|
*) player_function="vlc" ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
-s | --syncplay)
|
||||||
|
case "$(uname -s)" in
|
||||||
|
Darwin*) player_function="/Applications/Syncplay.app/Contents/MacOS/syncplay" ;;
|
||||||
|
MINGW* | *Msys) player_function="/c/Program Files (x86)/Syncplay/Syncplay.exe" ;;
|
||||||
|
*) player_function="syncplay" ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
-q | --quality)
|
||||||
|
[ $# -lt 2 ] && die "missing argument!"
|
||||||
|
quality="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-S | --select-nth)
|
||||||
|
[ $# -lt 2 ] && die "missing argument!"
|
||||||
|
index="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-c | --continue) search=history ;;
|
||||||
|
-d | --download) player_function=download ;;
|
||||||
|
-D | --delete)
|
||||||
|
: >"$histfile"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-V | --version) version_info ;;
|
||||||
|
-h | --help) help_info ;;
|
||||||
|
-e | --episode | -r | --range)
|
||||||
|
[ $# -lt 2 ] && die "missing argument!"
|
||||||
|
ep_no="$2"
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--dub) mode="dub" ;;
|
||||||
|
-U | --update) update_script ;;
|
||||||
|
*) query="$(printf "%s" "$query $1" | sed "s|^ ||;s| |+|g")" ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
printf "\33[2K\r\033[1;34mChecking dependencies...\033[0m\n"
|
||||||
|
dep_ch "curl" "sed" "grep" "fzf" || true
|
||||||
|
case "$player_function" in
|
||||||
|
debug) ;;
|
||||||
|
download) dep_ch "ffmpeg" "aria2c" ;;
|
||||||
|
flatpak*)
|
||||||
|
dep_ch "flatpak"
|
||||||
|
flatpak info io.mpv.Mpv >/dev/null 2>&1 || die "Program \"mpv (flatpak)\" not found. Please install it."
|
||||||
|
;;
|
||||||
|
android*) printf "Checking of players on Android is disabled\n" ;;
|
||||||
|
*) dep_ch "$player_function" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# searching
|
||||||
|
case "$search" in
|
||||||
|
history)
|
||||||
|
anime_list=$(while read -r ep_no id title; do process_hist_entry & done <"$histfile")
|
||||||
|
wait
|
||||||
|
[ -z "$anime_list" ] && die "No unwatched series in history!"
|
||||||
|
result=$(printf "%s" "$anime_list" | nl -w 1 | nth "Select anime: " | cut -f1)
|
||||||
|
[ -z "$result" ] && exit 1
|
||||||
|
result=$(grep "$result" "$histfile")
|
||||||
|
read -r ep_no id title <<-EOF
|
||||||
|
$result
|
||||||
|
EOF
|
||||||
|
ep_list=$(episodes_list "$id")
|
||||||
|
ep_no=$(printf "%s" "$ep_list" | sed -n "/^${ep_no}$/{n;p;}") 2>/dev/null
|
||||||
|
allanime_title="$(printf "%s" "$title" | cut -d'(' -f1 | tr -d '[:punct:]' | tr 'A-Z ' 'a-z-')"
|
||||||
|
tput cuu1 && tput el
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
while [ -z "$query" ]; do
|
||||||
|
if [ "$use_external_menu" = "0" ]; then
|
||||||
|
printf "Search anime: " && read -r query
|
||||||
|
else
|
||||||
|
query=$(: | external_menu "" "Search anime: ")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
query=$(printf "%s" "$query" | sed "s| |+|g")
|
||||||
|
anime_list=$(search_anime "$query")
|
||||||
|
[ -z "$anime_list" ] && die "No results found!"
|
||||||
|
[ "$index" -eq "$index" ] 2>/dev/null && result=$(printf "%s" "$anime_list" | sed -n "${index}p")
|
||||||
|
[ -z "$index" ] && result=$(printf "%s" "$anime_list" | nl -w 1 | nth "Select anime: ")
|
||||||
|
[ -z "$result" ] && exit 1
|
||||||
|
title=$(printf "%s" "$result" | cut -f2)
|
||||||
|
allanime_title="$(printf "%s" "$title" | cut -d'(' -f1 | tr -d '[:punct:]' | tr 'A-Z ' 'a-z-')"
|
||||||
|
id=$(printf "%s" "$result" | cut -f1)
|
||||||
|
ep_list=$(episodes_list "$id")
|
||||||
|
[ -z "$ep_no" ] && ep_no=$(printf "%s" "$ep_list" | nth "Select episode: " "$multi_selection_flag")
|
||||||
|
[ -z "$ep_no" ] && exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# moves the cursor up one line and clears that line
|
||||||
|
tput cuu1 && tput el
|
||||||
|
|
||||||
|
# playback & loop
|
||||||
|
play
|
||||||
|
[ "$player_function" = "download" ] || [ "$player_function" = "debug" ] && exit 0
|
||||||
|
|
||||||
|
while cmd=$(printf "next\nreplay\nprevious\nselect\nchange_quality\nquit" | nth "Playing episode $ep_no of $title... "); do
|
||||||
|
case "$cmd" in
|
||||||
|
next) ep_no=$(printf "%s" "$ep_list" | sed -n "/^${ep_no}$/{n;p;}") 2>/dev/null ;;
|
||||||
|
replay) episode="$replay" ;;
|
||||||
|
previous) ep_no=$(printf "%s" "$ep_list" | sed -n "/^${ep_no}$/{g;1!p;};h") 2>/dev/null ;;
|
||||||
|
select) ep_no=$(printf "%s" "$ep_list" | nth "Select episode: " "$multi_selection_flag") ;;
|
||||||
|
change_quality)
|
||||||
|
episode=$(printf "%s" "$links" | sed -n '/^\([0-9]*p\)/p' | launcher)
|
||||||
|
quality=$(printf "%s" "$episode" | grep -oE "^[0-9]+")
|
||||||
|
episode=$(printf "%s" "$episode" | cut -d'>' -f2)
|
||||||
|
;;
|
||||||
|
*) exit 0 ;;
|
||||||
|
esac
|
||||||
|
[ -z "$ep_no" ] && die "Out of range"
|
||||||
|
play
|
||||||
|
done
|
85
modules/home/scripts/default.nix
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
{pkgs, ...}: let
|
||||||
|
wall-change = pkgs.writeShellScriptBin "wall-change" ''
|
||||||
|
swww img $1 --transition-type random --transition-pos "$(hyprctl cursorpos)" --transition-duration 3
|
||||||
|
'';
|
||||||
|
load-env = pkgs.writeShellScriptBin "load-env" ''
|
||||||
|
bash ~/.local/bin/env/animation
|
||||||
|
bash ~/.local/bin/env/layout
|
||||||
|
bash ~/.local/bin/env/opacity
|
||||||
|
bash ~/.local/bin/env/blur
|
||||||
|
bash ~/.local/bin/env/wallpaper
|
||||||
|
'';
|
||||||
|
toggle-animation = pkgs.writeShellScriptBin "toggle-animation" ''
|
||||||
|
blur_val=$(hyprctl getoption animations:enabled | grep int)
|
||||||
|
echo "$blur_val"
|
||||||
|
if [[ "$blur_val" == " int: 1" ]]; then
|
||||||
|
rm -rf ~/.local/bin/env/animation
|
||||||
|
echo "hyprctl --batch 'keyword animations:enabled 0'" > ~/.local/bin/env/animation
|
||||||
|
hyprctl --batch "keyword animations:enabled 0"
|
||||||
|
else
|
||||||
|
rm -rf ~/.local/bin/env/animation
|
||||||
|
echo "hyprctl --batch 'keyword animations:enabled 1'" > ~/.local/bin/env/animation
|
||||||
|
hyprctl --batch "keyword animations:enabled 1"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
push = pkgs.writeShellScriptBin "push" ''
|
||||||
|
git_directory=$PWD/.git
|
||||||
|
if [[ -d $git_directory ]];then
|
||||||
|
git add .
|
||||||
|
read -p "Enter commit name: " commit_name
|
||||||
|
git commit -m "$commit_name"
|
||||||
|
git push
|
||||||
|
else
|
||||||
|
echo "Git wasn't initialized here."
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
toggle-blur = pkgs.writeShellScriptBin "toggle-blur" ''
|
||||||
|
blur_val=$(hyprctl getoption decoration:blur | grep int)
|
||||||
|
echo "$blur_val"
|
||||||
|
if [[ "$blur_val" == " int: 1" ]]; then
|
||||||
|
rm -rf ~/.local/bin/env/blur
|
||||||
|
echo "hyprctl --batch 'keyword decoration:blur 0'" > ~/.local/bin/env/blur
|
||||||
|
hyprctl --batch "keyword decoration:blur 0"
|
||||||
|
else
|
||||||
|
rm -rf ~/.local/bin/env/blur
|
||||||
|
echo "hyprctl --batch 'keyword decoration:blur 1'" > ~/.local/bin/env/blur
|
||||||
|
hyprctl --batch "keyword decoration:blur 1"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
toggle-opacity = pkgs.writeShellScriptBin "toggle-opacity" ''
|
||||||
|
opacity_val=$(hyprctl getoption decoration:active_opacity | grep float)
|
||||||
|
echo "$opacity_val"
|
||||||
|
if [[ "$opacity_val" == " float: 0.850000" ]]; then
|
||||||
|
rm -rf ~/.local/bin/env/opacity
|
||||||
|
echo "hyprctl --batch 'keyword decoration:active_opacity 1.0 ; keyword decoration:inactive_opacity 1.0 ; keyword decoration:fullscreen_opacity 1.0'" > ~/.local/bin/env/opacity
|
||||||
|
hyprctl --batch "keyword decoration:active_opacity 1.0 ; keyword decoration:inactive_opacity 1.0 ; keyword decoration:fullscreen_opacity 1.0"
|
||||||
|
else
|
||||||
|
rm -rf ~/.local/bin/env/opacity
|
||||||
|
echo "hyprctl --batch 'keyword decoration:active_opacity 0.8500 ; keyword decoration:inactive_opacity 0.76 ; keyword decoration:fullscreen_opacity 1.0'" > ~/.local/bin/env/opacity
|
||||||
|
hyprctl --batch "keyword decoration:active_opacity 0.8500 ; keyword decoration:inactive_opacity 0.76 ; keyword decoration:fullscreen_opacity 1.0"
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
wallpaper-picker = pkgs.writeShellScriptBin "wallpaper-picker" ''
|
||||||
|
wallpaper_folder=$HOME/Pictures/wallpapers
|
||||||
|
wallpaper_location="$(ls $wallpaper_folder | wofi -n --show dmenu)"
|
||||||
|
if [[ -d $wallpaper_folder/$wallpaper_location ]]; then
|
||||||
|
wallpaper_temp="$wallpaper_location"
|
||||||
|
elif [[ -f $wallpaper_folder/$wallpaper_location ]]; then
|
||||||
|
wall-change $wallpaper_folder/$wallpaper_temp/$wallpaper_location
|
||||||
|
else
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
home.file.".local/bin/toggle_layout".source = ./toggle_layout;
|
||||||
|
home.file.".local/bin/anime".source = ./ani-cli;
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
wall-change
|
||||||
|
wallpaper-picker
|
||||||
|
load-env
|
||||||
|
toggle-animation
|
||||||
|
toggle-blur
|
||||||
|
toggle-opacity
|
||||||
|
push
|
||||||
|
];
|
||||||
|
}
|
19
modules/home/scripts/toggle_layout
Executable file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
current_layout=$(hyprctl getoption general:layout)
|
||||||
|
|
||||||
|
for word in $current_layout
|
||||||
|
do
|
||||||
|
temp="${word%\"}"
|
||||||
|
temp="${temp#\"}"
|
||||||
|
if [ $temp == "dwindle" ]; then
|
||||||
|
rm -rf ~/.local/bin/env/layout
|
||||||
|
echo "hyprctl --batch 'keyword general:layout master;'" > ~/.local/bin/env/layout
|
||||||
|
hyprctl --batch "keyword general:layout master;"
|
||||||
|
fi
|
||||||
|
if [ $temp == "master" ]; then
|
||||||
|
rm -rf ~/.local/bin/env/layout
|
||||||
|
echo "hyprctl --batch 'keyword general:layout dwindle;'" > ~/.local/bin/env/layout
|
||||||
|
hyprctl --batch "keyword general:layout dwindle;"
|
||||||
|
fi
|
||||||
|
done
|
41
modules/home/starship/default.nix
Executable file
|
@ -0,0 +1,41 @@
|
||||||
|
{lib, ...}: {
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
add_newline = false;
|
||||||
|
character = {
|
||||||
|
success_symbol = "[ ](bold #cba6f7)[ ](bold #f2cdcd)[ ](bold #b4befe)[ ](bold #a6e3a1)";
|
||||||
|
error_symbol = "[ ](bold #cba6f7)[ ](bold #f2cdcd)[ ](bold #b4befe)[ ](bold #f38ba8)";
|
||||||
|
vimcmd_symbol = "[ NORMAL](bold #fab387)";
|
||||||
|
vimcmd_visual_symbol = "[ VISUAL](bold #89dceb)";
|
||||||
|
};
|
||||||
|
format = lib.strings.concatStrings [
|
||||||
|
"$nix_shell"
|
||||||
|
"$os"
|
||||||
|
"$directory"
|
||||||
|
"$container"
|
||||||
|
"$git_branch $git_status"
|
||||||
|
"$python"
|
||||||
|
"$nodejs"
|
||||||
|
"$lua"
|
||||||
|
"$rust"
|
||||||
|
"$java"
|
||||||
|
"$c"
|
||||||
|
"$golang"
|
||||||
|
"$cmd_duration"
|
||||||
|
"$status"
|
||||||
|
"\n$character"
|
||||||
|
];
|
||||||
|
git_branch.symbol = " ";
|
||||||
|
git_commit.tag_disabled = false;
|
||||||
|
git_status = {
|
||||||
|
ahead = ''⇡''${count}'';
|
||||||
|
behind = ''⇣''${count}'';
|
||||||
|
diverged = ''⇕⇡''${ahead_count}⇣''${behind_count}'';
|
||||||
|
staged = "+$count";
|
||||||
|
};
|
||||||
|
kubernetes.disabled = false;
|
||||||
|
time.disabled = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
60
modules/home/swaylock/default.nix
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# home.packages = with pkgs; [swaylock-effects];
|
||||||
|
|
||||||
|
programs.swaylock = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.swaylock-effects;
|
||||||
|
settings = {
|
||||||
|
clock = true;
|
||||||
|
screenshots = true;
|
||||||
|
indicator = true;
|
||||||
|
indicator-radius = 100;
|
||||||
|
indicator-thickness = 7;
|
||||||
|
effect-blur = "7x5";
|
||||||
|
effect-vignette = "0.5:0.5";
|
||||||
|
ring-color = "3b4252";
|
||||||
|
key-hl-color = "880033";
|
||||||
|
line-color = "00000000";
|
||||||
|
inside-color = "00000088";
|
||||||
|
separator-color = "00000000";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.swayidle = {
|
||||||
|
enable = true;
|
||||||
|
events = [
|
||||||
|
{
|
||||||
|
event = "before-sleep";
|
||||||
|
command = "${pkgs.swaylock-effects}/bin/swaylock -fF";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
event = "lock";
|
||||||
|
command = "${pkgs.swaylock-effects}/bin/swaylock -fF";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
timeouts = [
|
||||||
|
{
|
||||||
|
timeout = 90;
|
||||||
|
command = "swaylock";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
timeout = 300;
|
||||||
|
command = "systemctl suspend";
|
||||||
|
}
|
||||||
|
# {
|
||||||
|
# timeout = 180;
|
||||||
|
# command = "systemctl suspend";
|
||||||
|
# # command = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms off";
|
||||||
|
# # resumeCommand = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl dispatch dpms on";
|
||||||
|
# }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services.swayidle.Install.WantedBy = lib.mkForce ["hyprland-session.target"];
|
||||||
|
}
|
18
modules/home/vscode/default.nix
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
programs.vscode = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.vscodium;
|
||||||
|
extensions = with pkgs.vscode-extensions;[
|
||||||
|
esbenp.prettier-vscode
|
||||||
|
bradlc.vscode-tailwindcss
|
||||||
|
jnoortheen.nix-ide
|
||||||
|
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
|
||||||
|
{
|
||||||
|
name = "min-theme";
|
||||||
|
publisher = "miguelsolorio";
|
||||||
|
version = "1.5.0";
|
||||||
|
sha256 = "DF/9OlWmjmnZNRBs2hk0qEWN38RcgacdVl9e75N8ZMY=";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
5
modules/home/waybar/default.nix
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
{ ... }: {
|
||||||
|
imports = [ (import ./waybar.nix) ]
|
||||||
|
++ [ (import ./settings.nix) ]
|
||||||
|
++ [ (import ./style.nix) ];
|
||||||
|
}
|
132
modules/home/waybar/settings.nix
Normal file
|
@ -0,0 +1,132 @@
|
||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
|
||||||
|
programs.waybar.settings = [
|
||||||
|
{
|
||||||
|
"layer" = "top";
|
||||||
|
"position" = "top";
|
||||||
|
modules-left = [
|
||||||
|
"custom/launcher"
|
||||||
|
"wlr/workspaces"
|
||||||
|
"temperature"
|
||||||
|
"idle_inhibitor"
|
||||||
|
];
|
||||||
|
modules-center = [
|
||||||
|
"clock"
|
||||||
|
];
|
||||||
|
modules-right = [
|
||||||
|
"pulseaudio"
|
||||||
|
"pulseaudio#microphone"
|
||||||
|
"memory"
|
||||||
|
"cpu"
|
||||||
|
"disk"
|
||||||
|
# "keyboard-state"
|
||||||
|
"network"
|
||||||
|
"cava"
|
||||||
|
"tray"
|
||||||
|
];
|
||||||
|
"custom/launcher" = {
|
||||||
|
"format" = " ";
|
||||||
|
"on-click" = "pkill wofi || wofi";
|
||||||
|
"tooltip" = false;
|
||||||
|
};
|
||||||
|
"idle_inhibitor" = {
|
||||||
|
"format" = "{icon}";
|
||||||
|
"format-icons" = {
|
||||||
|
"activated" = "";
|
||||||
|
"deactivated" = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"disk" = {
|
||||||
|
"path" = "/home";
|
||||||
|
"format" = " {percentage_used}%";
|
||||||
|
};
|
||||||
|
"custom/wall" = {
|
||||||
|
"on-click" = "wallpaper_random";
|
||||||
|
"on-click-middle" = "default_wall";
|
||||||
|
"on-click-right" = "killall dynamic_wallpaper || dynamic_wallpaper &";
|
||||||
|
"format" = " ﴔ ";
|
||||||
|
"tooltip" = false;
|
||||||
|
};
|
||||||
|
"wlr/workspaces" = {
|
||||||
|
"format" = "{icon}";
|
||||||
|
"on-click" = "activate";
|
||||||
|
};
|
||||||
|
"pulseaudio" = {
|
||||||
|
"scroll-step" = 5;
|
||||||
|
"format" = "{icon} {volume}%";
|
||||||
|
"format-muted" = " Muted";
|
||||||
|
"format-icons" = {
|
||||||
|
"default" = [ "" "" "" ];
|
||||||
|
};
|
||||||
|
"on-click" = "pamixer -t";
|
||||||
|
"on-click-right" = "pavucontrol";
|
||||||
|
"on-click-middle" = "$HOME/.local/bin/toggle_sound_output";
|
||||||
|
"tooltip" = false;
|
||||||
|
};
|
||||||
|
"pulseaudio#microphone" = {
|
||||||
|
"format" = "{format_source}";
|
||||||
|
"format-source" = " {volume}%";
|
||||||
|
"format-source-muted" = " Muted";
|
||||||
|
"on-click" = "pamixer --default-source -t";
|
||||||
|
"on-scroll-up" = "pamixer --default-source -i 5";
|
||||||
|
"on-scroll-down" = "pamixer --default-source -d 5";
|
||||||
|
"scroll-step" = 5;
|
||||||
|
"on-click-right" = "pavucontrol";
|
||||||
|
};
|
||||||
|
"clock" = {
|
||||||
|
"interval" = 1;
|
||||||
|
"format" = "{:%I:%M %p %A %b %d}";
|
||||||
|
"tooltip" = true;
|
||||||
|
"tooltip-format" = "<tt>{calendar}</tt>";
|
||||||
|
};
|
||||||
|
"memory" = {
|
||||||
|
"interval" = 1;
|
||||||
|
"format" = " {percentage}%";
|
||||||
|
"states" = {
|
||||||
|
"warning" = 85;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"cpu" = {
|
||||||
|
"interval" = 1;
|
||||||
|
"format" = " {usage}%";
|
||||||
|
};
|
||||||
|
"network" = {
|
||||||
|
"interval" = 1;
|
||||||
|
"format" = " Connected";
|
||||||
|
"format-alt" = " {bandwidthUpBytes} {bandwidthDownBytes}";
|
||||||
|
"format-disconnected" = " Disconnected";
|
||||||
|
"tooltip" = false;
|
||||||
|
};
|
||||||
|
"temperature" = {
|
||||||
|
"tooltip" = false;
|
||||||
|
"thermal-zone" = 2;
|
||||||
|
"hwmon-path" = "/sys/class/hwmon/hwmon2/temp1_input";
|
||||||
|
"format" = " {temperatureC}°C";
|
||||||
|
};
|
||||||
|
"cava" = {
|
||||||
|
"framerate" = 60;
|
||||||
|
"autosens" = 1;
|
||||||
|
"sensitivity" = 10;
|
||||||
|
"bars" = 6;
|
||||||
|
"lower_cutoff_freq" = 50;
|
||||||
|
"higher_cutoff_freq" = 10000;
|
||||||
|
"method" = "pulse";
|
||||||
|
"source" = "auto";
|
||||||
|
"stereo" = true;
|
||||||
|
"reverse" = false;
|
||||||
|
"bar_delimiter" = 0;
|
||||||
|
"monstercat" = false;
|
||||||
|
"waves" = false;
|
||||||
|
"noise_reduction" = 0.77;
|
||||||
|
"input_delay" = 2;
|
||||||
|
"format-icons" = [ "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█" ];
|
||||||
|
"on-click-right" = "playerctl play-pause";
|
||||||
|
};
|
||||||
|
"tray" = {
|
||||||
|
"icon-size" = 12;
|
||||||
|
"spacing" = 5;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
91
modules/home/waybar/style.nix
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
{ ... }: {
|
||||||
|
programs.waybar.style = ''
|
||||||
|
* {
|
||||||
|
font-family: JetBrainsMono Nerd Font;
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 14px;
|
||||||
|
min-height: 0;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
window>box {
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
|
margin-top: 8px;
|
||||||
|
border: 2px solid #595959;
|
||||||
|
border-radius: 0px;
|
||||||
|
background-color: rgba(31, 31, 31, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-right: 4px;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
padding-top: 5px;
|
||||||
|
border-radius: 0px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
padding-left: 8px;
|
||||||
|
padding-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
background-color: #595959;
|
||||||
|
color: rgb(23, 23, 23);
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
color: #fff000;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
background: rgb(48, 45, 65);
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip label {
|
||||||
|
color: rgb(217, 224, 238);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-launcher {
|
||||||
|
font-size: 16px;
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 6px;
|
||||||
|
color: #6896BA;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock,
|
||||||
|
#memory,
|
||||||
|
#temperature,
|
||||||
|
#cpu,
|
||||||
|
#mpd,
|
||||||
|
#custom-wall,
|
||||||
|
#temperature,
|
||||||
|
#backlight,
|
||||||
|
#pulseaudio,
|
||||||
|
#network,
|
||||||
|
#battery,
|
||||||
|
#disk,
|
||||||
|
#idle_inhibitor {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
padding-top: 0px;
|
||||||
|
padding-bottom: 0px;
|
||||||
|
color: #B9B9B9;
|
||||||
|
}
|
||||||
|
#cava {
|
||||||
|
padding-left: 10px;
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
#tray {
|
||||||
|
padding-right: 8px;
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
}
|
12
modules/home/waybar/waybar.nix
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{ pkgs, ... }: {
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
systemd = {
|
||||||
|
enable = false;
|
||||||
|
target = "graphical-session.target";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
programs.waybar.package = pkgs.waybar.overrideAttrs (oa: {
|
||||||
|
mesonFlags = (oa.mesonFlags or [ ]) ++ [ "-Dexperimental=true" ];
|
||||||
|
});
|
||||||
|
}
|
24
modules/home/wlogout/config/layout
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"label" : "lock",
|
||||||
|
"action" : "swaylock",
|
||||||
|
"text" : "Lock",
|
||||||
|
"keybind" : "l"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label": "reboot",
|
||||||
|
"action": "systemctl reboot",
|
||||||
|
"text": "Reboot",
|
||||||
|
"keybind": "r"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "shutdown",
|
||||||
|
"action" : "poweroff",
|
||||||
|
"text" : "Shut Down",
|
||||||
|
"keybind" : "s"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label": "logout",
|
||||||
|
"action": "loginctl terminate-user $USER",
|
||||||
|
"text": "Logout",
|
||||||
|
"keybind": "e"
|
||||||
|
}
|
BIN
modules/home/wlogout/config/lock-hover.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
modules/home/wlogout/config/lock.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
modules/home/wlogout/config/logout-hover.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
modules/home/wlogout/config/logout.png
Normal file
After Width: | Height: | Size: 3.7 KiB |
BIN
modules/home/wlogout/config/power-hover.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
modules/home/wlogout/config/power.png
Normal file
After Width: | Height: | Size: 10 KiB |
BIN
modules/home/wlogout/config/restart-hover.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
modules/home/wlogout/config/restart.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
modules/home/wlogout/config/sleep-hover.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
modules/home/wlogout/config/sleep.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
53
modules/home/wlogout/config/style.css
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
window {
|
||||||
|
font-family: JetBrainsMono Nerd Font;
|
||||||
|
font-size: 14pt;
|
||||||
|
color: #CED7F4; /* text */
|
||||||
|
background-color: rgba(31, 31, 31, 0.7);
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: 50%;
|
||||||
|
border: none;
|
||||||
|
background-color: rgba(30, 30, 46, 0);
|
||||||
|
margin: 5px;
|
||||||
|
transition: box-shadow 0.2s ease-in-out, background-color 0.2s ease-in-out;
|
||||||
|
}
|
||||||
|
button:hover {
|
||||||
|
background-color: rgba(49, 50, 68, 0.5);
|
||||||
|
}
|
||||||
|
button:focus {
|
||||||
|
background-color: #595959;
|
||||||
|
color:#1F1F1F;
|
||||||
|
}
|
||||||
|
#lock {
|
||||||
|
background-image: image(url("./lock.png"));
|
||||||
|
}
|
||||||
|
#lock:focus {
|
||||||
|
background-image: image(url("./lock-hover.png"));
|
||||||
|
}
|
||||||
|
#logout {
|
||||||
|
background-image: image(url("./logout.png"));
|
||||||
|
}
|
||||||
|
#logout:focus {
|
||||||
|
background-image: image(url("./logout-hover.png"));
|
||||||
|
}
|
||||||
|
#suspend {
|
||||||
|
background-image: image(url("./sleep.png"));
|
||||||
|
}
|
||||||
|
#suspend:focus {
|
||||||
|
background-image: image(url("./sleep-hover.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#shutdown {
|
||||||
|
background-image: image(url("./power.png"));
|
||||||
|
}
|
||||||
|
#shutdown:focus {
|
||||||
|
background-image: image(url("./power-hover.png"));
|
||||||
|
}
|
||||||
|
#reboot {
|
||||||
|
background-image: image(url("./restart.png"));
|
||||||
|
}
|
||||||
|
#reboot:focus {
|
||||||
|
background-image: image(url("./restart-hover.png"));
|
||||||
|
}
|
3
modules/home/wlogout/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{...}: {
|
||||||
|
xdg.configFile."wlogout".source = ./config;
|
||||||
|
}
|
15
modules/home/wofi/config/config
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
width=600
|
||||||
|
height=400
|
||||||
|
location=center
|
||||||
|
show=drun
|
||||||
|
prompt=Search...
|
||||||
|
filter_rate=100
|
||||||
|
allow_markup=true
|
||||||
|
no_actions=true
|
||||||
|
halign=fill
|
||||||
|
orientation=vertical
|
||||||
|
content_halign=fill
|
||||||
|
insensitive=true
|
||||||
|
allow_images=true
|
||||||
|
image_size=40
|
||||||
|
gtk_dark=true
|
67
modules/home/wofi/config/style.css
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
* {
|
||||||
|
font-family: JetBrainsMono Nerd Font;
|
||||||
|
}
|
||||||
|
window {
|
||||||
|
margin: 0px;
|
||||||
|
border: 2px solid #595959;
|
||||||
|
background-color: rgba(31, 31, 31, 0.95);
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
#input {
|
||||||
|
all: unset;
|
||||||
|
min-height: 36px;
|
||||||
|
padding: 4px 10px;
|
||||||
|
margin: 4px;
|
||||||
|
border: none;
|
||||||
|
color: #e2e0ec;
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #595959;
|
||||||
|
outline: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
margin: 10px;
|
||||||
|
margin-bottom: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#inner-box {
|
||||||
|
margin: 4px;
|
||||||
|
padding: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#outer-box {
|
||||||
|
margin: 0px;
|
||||||
|
padding: 3px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
border: 2px solid #595959;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroll {
|
||||||
|
margin-top: 5px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text:selected {
|
||||||
|
color: #f1f0f5;
|
||||||
|
margin: 0px 0px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
margin: 0px 0px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
margin: 0px 0px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 0px;
|
||||||
|
background: #595959;
|
||||||
|
/* background: linear-gradient(90deg, #E97193 0%, #82A497 100%); */
|
||||||
|
}
|
3
modules/home/wofi/default.nix
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
{...} :{
|
||||||
|
xdg.configFile."wofi".source = ./config;
|
||||||
|
}
|
33
modules/home/zsh/default.nix
Executable file
|
@ -0,0 +1,33 @@
|
||||||
|
{ hostname
|
||||||
|
, config
|
||||||
|
, pkgs
|
||||||
|
, ...
|
||||||
|
}: {
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
enableAutosuggestions = true;
|
||||||
|
enableSyntaxHighlighting = true;
|
||||||
|
oh-my-zsh = {
|
||||||
|
enable = true;
|
||||||
|
plugins = [ "git" ];
|
||||||
|
|
||||||
|
};
|
||||||
|
shellAliases = {
|
||||||
|
n = "clear && neofetch";
|
||||||
|
v = "nvim";
|
||||||
|
record = "wf-recorder --audio=alsa_output.pci-0000_08_00.6.analog-stereo.monitor -f $HOME/Videos/$(date +'%Y%m%d%H%M%S_1.mp4')";
|
||||||
|
ani = "bash $HOME/.local/bin/anime --dub";
|
||||||
|
ls = "exa --icons --long";
|
||||||
|
|
||||||
|
# nixos
|
||||||
|
ncg = "nix-collect-garbage && nix-collect-garbage -d && sudo nix-collect-garbage && sudo nix-collect-garbage -d && sudo rm /nix/var/nix/gcroots/auto/*";
|
||||||
|
nix-switch = "sudo nixos-rebuild switch --flake ~/Flakes/.#nixos";
|
||||||
|
fl = "cd ~/Flakes/ && v";
|
||||||
|
|
||||||
|
# python
|
||||||
|
piv = "python -m venv .venv";
|
||||||
|
psv = "source .venv/bin/activate";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
34
pkgs/aichat/default.nix
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
rustPlatform,
|
||||||
|
fetchFromGitHub,
|
||||||
|
pkg-config,
|
||||||
|
openssl,
|
||||||
|
stdenv,
|
||||||
|
}:
|
||||||
|
rustPlatform.buildRustPackage rec {
|
||||||
|
pname = "aichat";
|
||||||
|
version = "0.8.0";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "sigoden";
|
||||||
|
repo = pname;
|
||||||
|
rev = "v${version}";
|
||||||
|
hash = "sha256-E/QslRDeifFHlHUELv9rYHjfCAB1yXXiXlWOyPNkfps=";
|
||||||
|
};
|
||||||
|
|
||||||
|
cargoHash = "sha256-7TTHBeZ68G6k5eHBL1zDGsYiTyx27fBbN7Rl9AiZTng=";
|
||||||
|
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkg-config
|
||||||
|
];
|
||||||
|
|
||||||
|
buildInputs = [
|
||||||
|
openssl
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Using ChatGPT/GPT-3.5/GPT-4 in the terminal";
|
||||||
|
homepage = "https://github.com/sigoden/aichat";
|
||||||
|
};
|
||||||
|
}
|
28
pkgs/bore-cli/default.nix
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
rustPlatform,
|
||||||
|
fetchFromGitHub,
|
||||||
|
}:
|
||||||
|
rustPlatform.buildRustPackage rec {
|
||||||
|
pname = "bore-cli";
|
||||||
|
version = "0.4.1";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "ekzhang";
|
||||||
|
repo = "bore";
|
||||||
|
rev = "v${version}";
|
||||||
|
hash = "sha256-h5Xwsr61h52zb5HNPySKVjfYW96Fff7nwZUAL6vK9ko=";
|
||||||
|
};
|
||||||
|
|
||||||
|
cargoSha256 = "sha256-QyaQM8z5v0LgskkmZ/8ekZwxNrt8sq91BbnjvIqa2nI=";
|
||||||
|
|
||||||
|
# tests do not find grcov path correctly
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Rust tool to create TCP tunnels";
|
||||||
|
homepage = "https://github.com/ekzhang/bore";
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = with maintainers; [DieracDelta];
|
||||||
|
mainProgram = "bore";
|
||||||
|
};
|
||||||
|
}
|
25
pkgs/catppuccin-cursors/default.nix
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
stdenv,
|
||||||
|
fetchzip,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
stdenv.mkDerivation rec {
|
||||||
|
pname = "cattpuccin-cursors";
|
||||||
|
version = "9999";
|
||||||
|
src = fetchzip {
|
||||||
|
url = "https://github.com/Ruixi-rebirth/Catppuccin-cursor/archive/refs/tags/1.0.zip";
|
||||||
|
sha256 = "sha256-RCEVxeo3oBNqHogxWM/YqfPoQotirSQTMw15zCahWto=";
|
||||||
|
};
|
||||||
|
installPhase = ''
|
||||||
|
mkdir -p $out/share/icons/Catppuccin-Frappe-Dark
|
||||||
|
cp -va index.theme cursors $out/share/icons/Catppuccin-Frappe-Dark
|
||||||
|
'';
|
||||||
|
meta = {
|
||||||
|
description = "Soothing pastel mouse cursors";
|
||||||
|
homepage = "https://github.com/Ruixi-rebirth/Catppuccin-cursor";
|
||||||
|
license = lib.licenses.gpl3;
|
||||||
|
platforms = lib.platforms.unix;
|
||||||
|
maintainers = [lib.maintainers.Ruixi-rebirth];
|
||||||
|
};
|
||||||
|
}
|
12
pkgs/default.nix
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
rec{
|
||||||
|
overlay = final: prev:
|
||||||
|
let
|
||||||
|
dirContents = builtins.readDir ../pkgs;
|
||||||
|
genPackage = name: {
|
||||||
|
inherit name;
|
||||||
|
value = final.callPackage (../pkgs + "/${name}") { };
|
||||||
|
};
|
||||||
|
names = builtins.attrNames dirContents;
|
||||||
|
in
|
||||||
|
builtins.listToAttrs (map genPackage names);
|
||||||
|
}
|
BIN
wallpaper/wallpaper.png
Normal file
After Width: | Height: | Size: 1.3 MiB |