First commit.
This commit is contained in:
commit
2839045b92
235
flake.lock
Normal file
235
flake.lock
Normal file
@ -0,0 +1,235 @@
|
||||
{
|
||||
"nodes": {
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1696426674,
|
||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706830856,
|
||||
"narHash": "sha256-a0NYyp+h9hlb7ddVz4LUn1vT/PLwqfrWYcHMvFB1xYg=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "b253292d9c0a5ead9bc98c4e9a26c6312e27d69f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1701680307,
|
||||
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"gitignore": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"pre-commit-hooks",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1703887061,
|
||||
"narHash": "sha256-gGPa9qWNc6eCXT/+Z5/zMkyYOuRZqeFZBDbopNZQkuY=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"rev": "43e1aa1308018f37118e34d3a9cb4f5e75dc11d5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "gitignore.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1707467182,
|
||||
"narHash": "sha256-/Bw/xgCXfj4nXDd8Xq+r1kaorfsYkkomMf5w5MpsDyA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "5b9156fa9a8b8beba917b8f9adbfd27bf63e16af",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager_2": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706955260,
|
||||
"narHash": "sha256-W3y0j77IDVbmbajudHoUr46RpswujUCl+D5Vru53UsI=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "880d9bc2110f7cae59698f715b8ca42cdc53670c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706833576,
|
||||
"narHash": "sha256-w7BL0EWRts+nD1lbLECIuz6fRzmmV+z8oWwoY7womR0=",
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "bdbae6ecff8fcc322bf6b9053c0b984912378af7",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lnl7",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1707268954,
|
||||
"narHash": "sha256-2en1kvde3cJVc3ZnTy8QeD2oKcseLFjYPLKhIGDanQ0=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "f8e2ebd66d097614d51a56a755450d4ae1632df1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixvim": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts",
|
||||
"home-manager": "home-manager_2",
|
||||
"nix-darwin": "nix-darwin",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"pre-commit-hooks": "pre-commit-hooks"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1707545157,
|
||||
"narHash": "sha256-w4dubmw//nocfi2/KkvM1SLtDQUhIFfVsXDWf3zZTLk=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixvim",
|
||||
"rev": "66c069c48db4b67fd0d536128b000684a5f72f5b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixvim",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"pre-commit-hooks": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils",
|
||||
"gitignore": "gitignore",
|
||||
"nixpkgs": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": [
|
||||
"nixvim",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1706424699,
|
||||
"narHash": "sha256-Q3RBuOpZNH2eFA1e+IHgZLAOqDD9SKhJ/sszrL8bQD4=",
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"rev": "7c54e08a689b53c8a1e5d70169f2ec9e2a68ffaf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "cachix",
|
||||
"repo": "pre-commit-hooks.nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"nixvim": "nixvim"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
33
flake.nix
Normal file
33
flake.nix
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
description = "Nixos config flake";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nixvim = {
|
||||
url = "github:nix-community/nixvim";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, ... }@inputs:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
|
||||
nixosConfigurations.default = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {inherit inputs;};
|
||||
modules = [
|
||||
./hosts/default/configuration.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
332
hosts/default/configuration.nix
Normal file
332
hosts/default/configuration.nix
Normal file
@ -0,0 +1,332 @@
|
||||
{ config, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
./hardware-configuration.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
# Modules
|
||||
boot.blacklistedKernelModules = [ "rtl8xxxu" "iwlwifi"];
|
||||
boot.extraModulePackages = with config.boot.kernelPackages; [
|
||||
rtl8192eu
|
||||
];
|
||||
|
||||
# Use latest and greates kernel
|
||||
# boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
|
||||
# Set the hostname
|
||||
networking.hostName = "nixos"; # Define your hostname.
|
||||
|
||||
# Enable flakes
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# Disable hibernation, sleep and other friends
|
||||
systemd.targets = {
|
||||
sleep = {
|
||||
enable = false;
|
||||
unitConfig.DefaultDependencies = "no";
|
||||
};
|
||||
suspend = {
|
||||
enable = false;
|
||||
unitConfig.DefaultDependencies = "no";
|
||||
};
|
||||
hibernate = {
|
||||
enable = false;
|
||||
unitConfig.DefaultDependencies = "no";
|
||||
};
|
||||
"hybrid-sleep" = {
|
||||
enable = false;
|
||||
unitConfig.DefaultDependencies = "no";
|
||||
};
|
||||
};
|
||||
|
||||
# Enable networking
|
||||
networking.networkmanager.enable = true;
|
||||
networking.wireless.iwd.enable = true;
|
||||
networking.networkmanager.wifi.backend = "iwd";
|
||||
networking.networkmanager.wifi.powersave = false;
|
||||
networking.networkmanager.dns = "none";
|
||||
|
||||
# local nameservers
|
||||
networking.nameservers = [ "127.0.0.1" "::1" ];
|
||||
|
||||
|
||||
# Dnscrypt for dns over https
|
||||
services.dnscrypt-proxy2 = {
|
||||
enable = true;
|
||||
settings = {
|
||||
ipv6_servers = true;
|
||||
require_dnssec = true;
|
||||
sources.public-resolvers = {
|
||||
urls = [
|
||||
"https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md"
|
||||
"https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md"
|
||||
];
|
||||
cache_file = "/var/lib/dnscrypt-proxy2/public-resolvers.md";
|
||||
minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3";
|
||||
};
|
||||
server_names = [ "mullvad-base-doh" ];
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Zagreb";
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
i18n.extraLocaleSettings = {
|
||||
LC_ADDRESS = "hr_HR.UTF-8";
|
||||
LC_IDENTIFICATION = "hr_HR.UTF-8";
|
||||
LC_MEASUREMENT = "hr_HR.UTF-8";
|
||||
LC_MONETARY = "hr_HR.UTF-8";
|
||||
LC_NAME = "hr_HR.UTF-8";
|
||||
LC_NUMERIC = "hr_HR.UTF-8";
|
||||
LC_PAPER = "hr_HR.UTF-8";
|
||||
LC_TELEPHONE = "hr_HR.UTF-8";
|
||||
LC_TIME = "hr_HR.UTF-8";
|
||||
};
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
services.xserver.enable = true;
|
||||
|
||||
# Enable the KDE Plasma Desktop Environment.
|
||||
services.xserver.displayManager.sddm = {
|
||||
enable = true;
|
||||
theme = "catppuccin-sddm-corners";
|
||||
# Fix keyboard showing up unnecesarilly
|
||||
settings = {
|
||||
General = {
|
||||
InputMethod="";
|
||||
};
|
||||
};
|
||||
};
|
||||
services.xserver.desktopManager.plasma5.enable = true;
|
||||
environment.plasma5.excludePackages = with pkgs.libsForQt5; [
|
||||
plasma-browser-integration
|
||||
konsole
|
||||
oxygen
|
||||
];
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver.xkb = {
|
||||
layout = "us";
|
||||
variant = "";
|
||||
options = "caps:escape";
|
||||
};
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
services.printing.enable = false;
|
||||
|
||||
# Enable gvfs
|
||||
services.gvfs.enable = true;
|
||||
|
||||
# Enable sound with pipewire.
|
||||
sound.enable = true;
|
||||
hardware.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
# If you want to use JACK applications, uncomment this
|
||||
#jack.enable = true;
|
||||
|
||||
# use the example session manager (no others are packaged yet so this is enabled by default,
|
||||
# no need to redefine it in your config for now)
|
||||
#media-session.enable = true;
|
||||
};
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
services.xserver.libinput.enable = true;
|
||||
|
||||
# Enable OpenGL
|
||||
hardware.opengl = {
|
||||
enable = true;
|
||||
driSupport = true;
|
||||
driSupport32Bit = true;
|
||||
};
|
||||
|
||||
hardware.nvidia = {
|
||||
|
||||
# Modesetting is required.
|
||||
modesetting.enable = true;
|
||||
|
||||
# Nvidia power management. Experimental, and can cause sleep/suspend to fail.
|
||||
powerManagement.enable = true;
|
||||
# Fine-grained power management. Turns off GPU when not in use.
|
||||
# Experimental and only works on modern Nvidia GPUs (Turing or newer).
|
||||
powerManagement.finegrained = false;
|
||||
|
||||
# Use the NVidia open source kernel module (not to be confused with the
|
||||
# independent third-party "nouveau" open source driver).
|
||||
# Support is limited to the Turing and later architectures. Full list of
|
||||
# supported GPUs is at:
|
||||
# https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus
|
||||
# Only available from driver 515.43.04+
|
||||
# Currently alpha-quality/buggy, so false is currently the recommended setting.
|
||||
open = false;
|
||||
|
||||
# Enable the Nvidia settings menu,
|
||||
# accessible via `nvidia-settings`.
|
||||
nvidiaSettings = true;
|
||||
|
||||
# Optionally, you may need to select the appropriate driver version for your specific GPU.
|
||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||
};
|
||||
|
||||
hardware.nvidia.prime = {
|
||||
reverseSync.enable = true;
|
||||
# Make sure to use the correct Bus ID values for your system!
|
||||
intelBusId = "PCI:5:0:0";
|
||||
nvidiaBusId = "PCI:1:0:0";
|
||||
};
|
||||
|
||||
# Enable bluetooth
|
||||
hardware.bluetooth.enable = true;
|
||||
|
||||
# Open Tablet Driver setup
|
||||
hardware.opentabletdriver.enable = true;
|
||||
|
||||
# Load nvidia driver for Xorg and Wayland
|
||||
services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
# Steam settings
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
|
||||
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
|
||||
};
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
neovim
|
||||
usbutils
|
||||
pciutils
|
||||
lshw
|
||||
vulkan-tools
|
||||
restic
|
||||
rsync
|
||||
git
|
||||
jq
|
||||
wireguard-tools
|
||||
unzip
|
||||
gamemode
|
||||
ipafont
|
||||
ryzenadj
|
||||
(catppuccin-kde.override { winDecStyles = ["classic" "modern"] ;})
|
||||
catppuccin-gtk
|
||||
catppuccin-cursors.frappeRosewater
|
||||
catppuccin-sddm-corners
|
||||
(catppuccin-papirus-folders.override { flavor = "frappe"; accent = "pink"; })
|
||||
];
|
||||
|
||||
networking.firewall = {
|
||||
# if packets are still dropped, they will show up in dmesg
|
||||
logReversePathDrops = true;
|
||||
# wireguard trips rpfilter up
|
||||
extraCommands = ''
|
||||
ip46tables -t mangle -I nixos-fw-rpfilter -p udp -m udp --sport 51820 -j RETURN
|
||||
ip46tables -t mangle -I nixos-fw-rpfilter -p udp -m udp --dport 51820 -j RETURN
|
||||
'';
|
||||
extraStopCommands = ''
|
||||
ip46tables -t mangle -D nixos-fw-rpfilter -p udp -m udp --sport 51820 -j RETURN || true
|
||||
ip46tables -t mangle -D nixos-fw-rpfilter -p udp -m udp --dport 51820 -j RETURN || true
|
||||
'';
|
||||
};
|
||||
|
||||
# Enable fstrim
|
||||
services.fstrim.enable = true;
|
||||
|
||||
# Enable ratbagd for mice configuration
|
||||
services.ratbagd.enable = true;
|
||||
|
||||
# Setup syncthing
|
||||
services = {
|
||||
syncthing = {
|
||||
enable = true;
|
||||
user = "crony";
|
||||
dataDir = "/home/crony/.local/sync";
|
||||
configDir = "/home/crony/.config/syncthing";
|
||||
};
|
||||
};
|
||||
|
||||
# Setting up zsh
|
||||
programs.zsh.enable = true;
|
||||
# For the completion plugin
|
||||
environment.pathsToLink = [ "/share/zsh" ];
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.crony = {
|
||||
isNormalUser = true;
|
||||
description = "Crony";
|
||||
extraGroups = [ "networkmanager" "wheel" ];
|
||||
packages = with pkgs; [
|
||||
(retroarch.override {
|
||||
cores = with libretro; [
|
||||
snes9x
|
||||
];
|
||||
})
|
||||
];
|
||||
shell = pkgs.zsh;
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
extraSpecialArgs = {inherit inputs;};
|
||||
users = {
|
||||
"crony" = import ./home.nix;
|
||||
};
|
||||
};
|
||||
|
||||
# Allow for appimages
|
||||
boot.binfmt.registrations.appimage = {
|
||||
wrapInterpreterInShell = false;
|
||||
interpreter = "${pkgs.appimage-run}/bin/appimage-run";
|
||||
recognitionType = "magic";
|
||||
offset = 0;
|
||||
mask = ''\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff'';
|
||||
magicOrExtension = ''\x7fELF....AI\x02'';
|
||||
};
|
||||
|
||||
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
# programs.gnupg.agent = {
|
||||
# enable = true;
|
||||
# enableSSHSupport = true;
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
|
||||
# Open ports in the firewall.
|
||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
# Before changing this value read the documentation for this option
|
||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||
system.stateVersion = "23.11"; # Did you read the comment?
|
||||
|
||||
}
|
305
hosts/default/confs/xmonad.hs
Normal file
305
hosts/default/confs/xmonad.hs
Normal file
@ -0,0 +1,305 @@
|
||||
-- Base
|
||||
import XMonad
|
||||
import System.Exit
|
||||
import qualified XMonad.StackSet as W
|
||||
|
||||
-- Actions
|
||||
import XMonad.Actions.CycleWS (toggleWS')
|
||||
import XMonad.Actions.MouseResize
|
||||
import XMonad.Actions.SinkAll (sinkAll)
|
||||
|
||||
-- Data
|
||||
import qualified Data.Map as M
|
||||
import Data.Maybe (isJust)
|
||||
|
||||
-- Hooks
|
||||
import XMonad.Hooks.ManageHelpers
|
||||
import XMonad.Hooks.StatusBar
|
||||
import XMonad.Hooks.StatusBar.PP
|
||||
import XMonad.Hooks.EwmhDesktops
|
||||
import XMonad.Hooks.SetWMName
|
||||
import XMonad.Hooks.InsertPosition
|
||||
|
||||
-- Layout modifiers
|
||||
import XMonad.Layout.Renamed
|
||||
import XMonad.Layout.Spacing
|
||||
import XMonad.Layout.NoBorders
|
||||
import XMonad.Layout.SimplestFloat
|
||||
import XMonad.Layout.LayoutModifier
|
||||
import XMonad.Layout.ResizableTile
|
||||
import XMonad.Layout.PerWorkspace
|
||||
import XMonad.Layout.WindowArranger (windowArrange, WindowArrangerMsg(..))
|
||||
|
||||
-- Utils
|
||||
import XMonad.Util.Loggers
|
||||
import XMonad.Util.NamedScratchpad
|
||||
import XMonad.Util.SpawnOnce
|
||||
import XMonad.Util.EZConfig
|
||||
import XMonad.Util.Hacks
|
||||
|
||||
-- main loop
|
||||
main :: IO ()
|
||||
main = xmonad
|
||||
. ewmhFullscreen
|
||||
. ewmh
|
||||
. withEasySB (statusBarProp "xmobar ~/.config/xmobar/xmobarrc" (pure myXmobarPP)) toggleStrutsKey
|
||||
$ myConfig
|
||||
where
|
||||
toggleStrutsKey :: XConfig Layout -> (KeyMask, KeySym)
|
||||
toggleStrutsKey XConfig{ modMask = m } = (m, xK_F11)
|
||||
|
||||
-- My config
|
||||
myConfig = def
|
||||
{ modMask = myModMask
|
||||
, layoutHook = myLayoutHook
|
||||
, manageHook = insertPosition End Newer <+> myManageHook
|
||||
, handleEventHook = trayerAboveXmobarEventHook
|
||||
, focusFollowsMouse = myFocusFollowsMouse
|
||||
, terminal = myTerminal
|
||||
, borderWidth = myBorderWidth
|
||||
, normalBorderColor = myNormalBorderColor
|
||||
, focusedBorderColor = myFocusedBorderColor
|
||||
, keys = myKeys
|
||||
, workspaces = myWorkspaces
|
||||
, startupHook = myStartupHook
|
||||
}
|
||||
|
||||
-- My variables
|
||||
myModMask = mod4Mask
|
||||
myTerminal = "alacritty"
|
||||
myBorderWidth = 2
|
||||
|
||||
myFocusFollowsMouse :: Bool
|
||||
myFocusFollowsMouse = False
|
||||
|
||||
myNormalBorderColor = "#737994"
|
||||
myFocusedBorderColor = "#c6d0f5"
|
||||
|
||||
myWorkspaces = ["一","二","三","四","五","六","七","八","九"]
|
||||
|
||||
-- My startup hook
|
||||
myStartupHook :: X ()
|
||||
myStartupHook = do
|
||||
spawn "killall trayer-srg" -- kill current trayer on each restart
|
||||
spawnOnce "sxhkd -c $HOME/.config/sxhkd/general"
|
||||
spawnOnce "gentoo-pipewire-launcher"
|
||||
spawnOnce "transmission-daemon"
|
||||
spawnOnce "syncthing"
|
||||
spawnOnce "picom"
|
||||
spawnOnce "clipmenud"
|
||||
spawnOnce "dunst"
|
||||
spawnOnce "keepassxc"
|
||||
spawnOnce "/usr/libexec/polkit-gnome-authentication-agent-1"
|
||||
spawn ("sleep 2 && trayer-srg --edge top --align right --widthtype request --padding 6 --iconspacing 7 --SetDockType true --SetPartialStrut true --expand true --monitor 1 --transparent true --alpha 0 --tint 0x303446 --height 24 -l")
|
||||
setWMName "LG3D" -- Fix java programs
|
||||
|
||||
-- My scratchpads
|
||||
myScratchPads :: [NamedScratchpad]
|
||||
myScratchPads = [ NS "terminal" spawnTerm findTerm manageTerm
|
||||
, NS "wiki" spawnWiki findWiki manageWiki
|
||||
, NS "notes" spawnNotes findNotes manageNotes
|
||||
, NS "profanity" spawnProfanity findProfanity manageProfanity
|
||||
, NS "godot" spawnGodot findGodot manageGodot
|
||||
]
|
||||
where
|
||||
spawnTerm = myTerminal ++ " --class scratchpad,scratchpad"
|
||||
findTerm = className =? "scratchpad"
|
||||
manageTerm = customFloating $ W.RationalRect l t w h
|
||||
where
|
||||
h = 0.8
|
||||
w = 0.8
|
||||
t = 0.9 -h
|
||||
l = 0.9 -w
|
||||
spawnWiki = myTerminal ++ " --class wiki,wiki -e wiki"
|
||||
findWiki = className =? "wiki"
|
||||
manageWiki = customFloating $ W.RationalRect l t w h
|
||||
where
|
||||
h = 0.8
|
||||
w = 0.8
|
||||
t = 0.9 -h
|
||||
l = 0.9 -w
|
||||
spawnNotes = myTerminal ++ " --class wiki,wiki -e notes"
|
||||
findNotes = className =? "notes"
|
||||
manageNotes = customFloating $ W.RationalRect l t w h
|
||||
where
|
||||
h = 0.8
|
||||
w = 0.8
|
||||
t = 0.9 -h
|
||||
l = 0.9 -w
|
||||
spawnProfanity = myTerminal ++ " --class profanity,profanity -e profanity"
|
||||
findProfanity = className =? "profanity"
|
||||
manageProfanity = customFloating $ W.RationalRect l t w h
|
||||
where
|
||||
h = 0.8
|
||||
w = 0.8
|
||||
t = 0.9 -h
|
||||
l = 0.9 -w
|
||||
spawnGodot = myTerminal ++ " --class godot,godot -e nvim --listen /tmp/godot.pipe"
|
||||
findGodot = className =? "godot"
|
||||
manageGodot = customFloating $ W.RationalRect l t w h
|
||||
where
|
||||
h = 0.8
|
||||
w = 0.8
|
||||
t = 0.9 -h
|
||||
l = 0.9 -w
|
||||
|
||||
|
||||
--Makes setting the spacingRaw simpler to write. The spacingRaw module adds a configurable amount of space around windows.
|
||||
mySpacing :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
|
||||
mySpacing i = spacingRaw False (Border i i i i) True (Border i i i i) True
|
||||
|
||||
-- Below is a variation of the above except no borders are applied
|
||||
-- if fewer than two windows. So a single window has no gaps.
|
||||
mySpacing' :: Integer -> l a -> XMonad.Layout.LayoutModifier.ModifiedLayout Spacing l a
|
||||
mySpacing' i = spacingRaw True (Border i i i i) True (Border i i i i) True
|
||||
|
||||
-- My layouts
|
||||
tall = renamed [Replace "tall"]
|
||||
$ withBorder myBorderWidth
|
||||
$ mySpacing 4
|
||||
$ ResizableTall 1 (3/100) (1/2) []
|
||||
monocle = renamed [Replace "monocle"]
|
||||
$ withBorder myBorderWidth
|
||||
$ mySpacing 4
|
||||
$ Full
|
||||
floats = renamed [Replace "floats"]
|
||||
$ withBorder myBorderWidth
|
||||
$ simplestFloat
|
||||
|
||||
myLayoutHook = lessBorders OnlyScreenFloat
|
||||
$ mouseResize
|
||||
$ windowArrange
|
||||
$ myDefaultLayout
|
||||
where
|
||||
myDefaultLayout = onWorkspaces [(myWorkspaces !! 0), (myWorkspaces !! 3), (myWorkspaces !! 4)] (monocle ||| floats ||| tall)
|
||||
$ onWorkspace (myWorkspaces !! 5) (floats ||| tall ||| monocle)
|
||||
$ tall
|
||||
||| monocle
|
||||
||| floats
|
||||
|
||||
-- My manage hook
|
||||
myManageHook :: ManageHook
|
||||
myManageHook = composeAll
|
||||
[ className =? "qutebrowser" --> doShiftAndGo ( myWorkspaces !! 0)
|
||||
, className =? "newsboat" --> doShiftAndGo ( myWorkspaces !! 3)
|
||||
, className =? "videos" --> doShiftAndGo ( myWorkspaces !! 3)
|
||||
, className =? "ytfzf" --> doShiftAndGo ( myWorkspaces !! 3)
|
||||
, className =? "lf" --> doShiftAndGo ( myWorkspaces !! 3)
|
||||
, className =? "thunderbird" --> doShiftAndGo ( myWorkspaces !! 4)
|
||||
, className =? "Ferdium" --> doShiftAndGo ( myWorkspaces !! 4)
|
||||
, className =? "discord" --> doShiftAndGo ( myWorkspaces !! 4)
|
||||
, className =? "tutanota-desktop" --> doShiftAndGo ( myWorkspaces !! 4)
|
||||
, className =? "Lutris" --> doShiftAndGo ( myWorkspaces !! 5)
|
||||
, className =? "steam" --> doShiftAndGo ( myWorkspaces !! 5)
|
||||
, className =? "heroic" --> doShiftAndGo ( myWorkspaces !! 5)
|
||||
, className =? "cartridges" --> doShiftAndGo ( myWorkspaces !! 5)
|
||||
, className =? "Cemu" --> doShiftAndGo ( myWorkspaces !! 5)
|
||||
, className =? "xemu" --> doShiftAndGo ( myWorkspaces !! 5)
|
||||
, className =? "librewolf" --> doShiftAndGo ( myWorkspaces !! 8)
|
||||
, isDialog --> doCenterFloat <+> doF W.swapUp
|
||||
, className =? "Gimp" --> doFloat <+> doF W.swapUp
|
||||
, className =? "confirm" --> doFloat <+> doF W.swapUp
|
||||
, className =? "file_progress" --> doFloat <+> doF W.swapUp
|
||||
, className =? "dialog" --> doFloat <+> doF W.swapUp
|
||||
, className =? "download" --> doFloat <+> doF W.swapUp
|
||||
, className =? "error" --> doFloat <+> doF W.swapUp
|
||||
, className =? "notification" --> doFloat <+> doF W.swapUp
|
||||
, className =? "splash" --> doFloat <+> doF W.swapUp
|
||||
, className =? "toolbar" --> doFloat <+> doF W.swapUp
|
||||
, className =? "pinentry-gtk-2" --> doFloat <+> doF W.swapUp
|
||||
, className =? "Yad" --> doCenterFloat <+> doF W.swapUp
|
||||
, className =? "badd" --> doCenterFloat <+> doF W.swapUp
|
||||
, className =? "filepicker" --> doRectFloat (W.RationalRect (1/12) (1/12) (5/6) (5/6)) <+> doF W.swapUp
|
||||
, isFullscreen --> doFullFloat
|
||||
, namedScratchpadManageHook myScratchPads
|
||||
]
|
||||
where
|
||||
doShiftAndGo ws = doF (W.greedyView ws) <+> doShift ws
|
||||
|
||||
-- My keybindings in a nice readable format
|
||||
myKeys = \c -> mkKeymap c $
|
||||
[ ("M-S-q", kill) -- kill active window
|
||||
, ("M-<Space>", sendMessage NextLayout) -- cycle layout
|
||||
, ("M-S-<Space>", withFocused toggleFloat) -- toggle floating state of a window
|
||||
, ("M-j", windows W.focusDown) -- Move focus down
|
||||
, ("M-k", windows W.focusUp) -- Move focus up
|
||||
, ("M-S-<Return>", windows W.swapMaster) -- Move Focused window to master
|
||||
, ("M-S-j", windows W.swapDown) --Move window down the stack
|
||||
, ("M-S-k", windows W.swapUp) -- Move window up the stack
|
||||
, ("M-h", sendMessage Shrink) -- Shrink master
|
||||
, ("M-l", sendMessage Expand) -- Expand master
|
||||
, ("M-,", sendMessage (IncMasterN 1)) -- Increase master count
|
||||
, ("M-.", sendMessage (IncMasterN (-1))) -- Decrease msaster count
|
||||
, ("M-C-e", io (exitWith ExitSuccess)) -- Quit xmonad
|
||||
, ("M-S-r", spawn "xmonad --recompile && xmonad --restart") -- Restart xmonad
|
||||
, ("M-<Tab>", toggleWS' ["NSP"]) -- Toogle last used workspace, ignoring named scratchpad
|
||||
, ("M-s t", namedScratchpadAction myScratchPads "terminal") -- Toggle scratchpad
|
||||
, ("M-s w", namedScratchpadAction myScratchPads "wiki") -- Toggle scratchpad
|
||||
, ("M-s n", namedScratchpadAction myScratchPads "notes") -- Toggle scratchpad
|
||||
, ("M-s p", namedScratchpadAction myScratchPads "profanity") -- Toggle scratchpad
|
||||
, ("M-s g", namedScratchpadAction myScratchPads "godot") -- Toggle scratchpad
|
||||
, ("M-1", viewDesktop 0) -- Check workspace 1
|
||||
, ("M-2", viewDesktop 1) -- Check workspace 2
|
||||
, ("M-3", viewDesktop 2) -- Check workspace 3
|
||||
, ("M-4", viewDesktop 3) -- Check workspace 4
|
||||
, ("M-5", viewDesktop 4) -- Check workspace 5
|
||||
, ("M-6", viewDesktop 5) -- Check workspace 6
|
||||
, ("M-7", viewDesktop 6) -- Check workspace 7
|
||||
, ("M-8", viewDesktop 7) -- Check workspace 8
|
||||
, ("M-9", viewDesktop 8) -- Check workspace 9
|
||||
, ("M-S-1", shiftWindow 0) -- Send window to workspace 1
|
||||
, ("M-S-2", shiftWindow 1) -- Send window to workspace 2
|
||||
, ("M-S-3", shiftWindow 2) -- Send window to workspace 3
|
||||
, ("M-S-4", shiftWindow 3) -- Send window to workspace 4
|
||||
, ("M-S-5", shiftWindow 4) -- Send window to workspace 5
|
||||
, ("M-S-6", shiftWindow 5) -- Send window to workspace 6
|
||||
, ("M-S-7", shiftWindow 6) -- Send window to workspace 7
|
||||
, ("M-S-8", shiftWindow 7) -- Send window to workspace 8
|
||||
, ("M-S-9", shiftWindow 8) -- Send window to workspace 9
|
||||
, ("M-C-1", shiftAndView 0) -- Send window and check workspace 1
|
||||
, ("M-C-2", shiftAndView 1) -- Send window and check workspace 2
|
||||
, ("M-C-3", shiftAndView 2) -- Send window and check workspace 3
|
||||
, ("M-C-4", shiftAndView 3) -- Send window and check workspace 4
|
||||
, ("M-C-5", shiftAndView 4) -- Send window and check workspace 5
|
||||
, ("M-C-6", shiftAndView 5) -- Send window and check workspace 6
|
||||
, ("M-C-7", shiftAndView 6) -- Send window and check workspace 7
|
||||
, ("M-C-8", shiftAndView 7) -- Send window and check workspace 8
|
||||
, ("M-C-9", shiftAndView 8) -- Send window and check workspace 9
|
||||
, ("M-f", sinkAll) -- Nuke solution for simplestFloat layout
|
||||
]
|
||||
where
|
||||
toggleFloat w = windows (\s -> if M.member w (W.floating s)
|
||||
then W.sink w s
|
||||
else (W.float w (W.RationalRect (1/6) (1/6) (2/3) (2/3)) s))
|
||||
viewDesktop d = windows $ W.greedyView $ myWorkspaces !! d
|
||||
shiftWindow w = windows $ W.shift $ myWorkspaces !! w
|
||||
shiftAndView w = windows $ W.greedyView (myWorkspaces !! w) . W.shift (myWorkspaces !! w)
|
||||
|
||||
-- My xmobar workspace and other things config
|
||||
myXmobarPP :: PP
|
||||
myXmobarPP = filterOutWsPP ["NSP"]
|
||||
$ def
|
||||
{ ppSep = magenta " • "
|
||||
, ppWsSep = " "
|
||||
, ppTitleSanitize = xmobarStrip
|
||||
, ppCurrent = xmobarBorder "Bottom" "#89b4fa" 2
|
||||
, ppHidden = white
|
||||
, ppHiddenNoWindows = lowWhite
|
||||
, ppUrgent = red . wrap (yellow "!") (yellow "!")
|
||||
, ppOrder = \[ws, l, _, wins] -> [ws, l, wins]
|
||||
, ppExtras = [logTitles formatFocused formatUnfocused]
|
||||
}
|
||||
where
|
||||
formatFocused = wrap (white "[") (white "]") . magenta . ppWindow
|
||||
formatUnfocused = wrap (lowWhite "[") (lowWhite "]") . blue . ppWindow
|
||||
|
||||
ppWindow :: String -> String
|
||||
ppWindow = xmobarRaw . (\w -> if null w then "untitled" else w) . shorten 25
|
||||
|
||||
blue, lowWhite, magenta, red, white, yellow :: String -> String
|
||||
magenta = xmobarColor "#eba0ac" ""
|
||||
blue = xmobarColor "#cba6f7" ""
|
||||
white = xmobarColor "#cdd6f4" ""
|
||||
yellow = xmobarColor "#f9e2af" ""
|
||||
red = xmobarColor "#f38ba8" ""
|
||||
lowWhite = xmobarColor "#585b70" ""
|
39
hosts/default/hardware-configuration.nix
Normal file
39
hosts/default/hardware-configuration.nix
Normal file
@ -0,0 +1,39 @@
|
||||
# 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, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/378a2cc3-3885-4d83-98d6-cbbf5dfc73fd";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/62C0-1109";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
swapDevices =
|
||||
[ { device = "/dev/disk/by-uuid/e76bb593-aa6c-4aa6-bf2d-723e3be01edc"; }
|
||||
];
|
||||
|
||||
# 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.enp3s0.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlp4s0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
553
hosts/default/home.nix
Normal file
553
hosts/default/home.nix
Normal file
@ -0,0 +1,553 @@
|
||||
{ config, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
# Home Manager needs a bit of information about you and the paths it should
|
||||
# manage.
|
||||
home.username = "crony";
|
||||
home.homeDirectory = "/home/crony";
|
||||
|
||||
# This value determines the Home Manager release that your configuration is
|
||||
# compatible with. This helps avoid breakage when a new Home Manager release
|
||||
# introduces backwards incompatible changes.
|
||||
#
|
||||
# You should not change this value, even if you update Home Manager. If you do
|
||||
# want to update the value, then make sure to first check the Home Manager
|
||||
# release notes.
|
||||
home.stateVersion = "23.11"; # Please read the comment before changing.
|
||||
imports =
|
||||
[
|
||||
inputs.nixvim.homeManagerModules.nixvim
|
||||
];
|
||||
|
||||
|
||||
# The home.packages option allows you to install Nix packages into your
|
||||
# environment.
|
||||
home.packages = [
|
||||
pkgs.librewolf
|
||||
pkgs.thunderbird
|
||||
pkgs.qutebrowser
|
||||
pkgs.discord
|
||||
pkgs.neofetch
|
||||
pkgs.keepassxc
|
||||
pkgs.buku
|
||||
pkgs.bukubrow
|
||||
pkgs.tmux
|
||||
pkgs.rclone
|
||||
pkgs.age
|
||||
pkgs.alacritty
|
||||
pkgs.nitch
|
||||
pkgs.ripgrep
|
||||
pkgs.libarchive
|
||||
pkgs.nsxiv
|
||||
pkgs.imagemagick
|
||||
pkgs.ffmpeg
|
||||
pkgs.glow
|
||||
pkgs.piper
|
||||
pkgs.krita
|
||||
pkgs.tutanota-desktop
|
||||
pkgs.delfin
|
||||
pkgs.nurl
|
||||
|
||||
(pkgs.nerdfonts.override { fonts = [ "CascadiaCode" ]; })
|
||||
|
||||
# My custom dmenu build
|
||||
(pkgs.dmenu.overrideAttrs (oldAttrs: rec {
|
||||
src = builtins.fetchGit {
|
||||
url = "https://code.cronyakatsuki.xyz/crony/dmenu";
|
||||
rev = "10dcddf14b38cfd965ab27f084139513baed70bf";
|
||||
};
|
||||
}))
|
||||
|
||||
# # You can also create simple shell scripts directly inside your
|
||||
# # configuration. For example, this adds a command 'my-hello' to your
|
||||
# # environment:
|
||||
# (pkgs.writeShellScriptBin "my-hello" ''
|
||||
# echo "Hello, ${config.home.username}!"
|
||||
# '')
|
||||
];
|
||||
|
||||
# Home Manager is pretty good at managing dotfiles. The primary way to manage
|
||||
# plain files is through 'home.file'.
|
||||
home.file = {
|
||||
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
|
||||
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
|
||||
# # symlink to the Nix store copy. ".screenrc".source = dotfiles/screenrc;
|
||||
# # You can also set the file content immediately.
|
||||
# ".gradle/gradle.properties".text = ''
|
||||
# org.gradle.console=verbose
|
||||
# org.gradle.daemon.idletimeout=3600000
|
||||
# '';
|
||||
};
|
||||
|
||||
# Home Manager can also manage your environment variables through
|
||||
# 'home.sessionVariables'. If you don't want to manage your shell through Home
|
||||
# Manager then you have to manually source 'hm-session-vars.sh' located at
|
||||
# either
|
||||
#
|
||||
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
|
||||
# or
|
||||
#
|
||||
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
|
||||
#
|
||||
# or
|
||||
#
|
||||
# /etc/profiles/per-user/crony/etc/profile.d/hm-session-vars.sh
|
||||
#
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
BROWSER = "qutebrowser";
|
||||
TERMINAL = "alacritty";
|
||||
};
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
# gpg settings
|
||||
programs.gpg = {
|
||||
enable = true;
|
||||
homedir = "${config.xdg.dataHome}/gnupg";
|
||||
};
|
||||
|
||||
# Make it use kde for flkdsjlkfdlsjflkdsjflsdjklfjdsklf
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
pinentryFlavor = "qt";
|
||||
};
|
||||
|
||||
# Btop settings
|
||||
programs.btop = {
|
||||
enable = true;
|
||||
settings = {
|
||||
color_theme = "catppuccin_frappe";
|
||||
vim_keys = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Mpv settings
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
config = {
|
||||
ytdl-format="bestvideo[height<=?1080][fps<=?60][vcodec!=?vp9]+bestaudio/best";
|
||||
ytdl-raw-options="extractor-args=youtube:player-client=android";
|
||||
fs=true;
|
||||
force-window="immediate";
|
||||
screenshot-template="%F - [%P]v%#01n";
|
||||
sub-file-paths="Subs;subs";
|
||||
sub-auto="all";
|
||||
slang="english,eng,en";
|
||||
};
|
||||
scripts = with pkgs.mpvScripts; [ mpris sponsorblock uosc thumbfast quality-menu ];
|
||||
};
|
||||
|
||||
# NNN Settings
|
||||
programs.nnn = {
|
||||
enable = true;
|
||||
package = pkgs.nnn.override ({ withNerdIcons = true; });
|
||||
bookmarks = { d = "~/Documents"; D = "~/Downloads"; p = "~/Pictures"; v = "~/Videos";};
|
||||
extraPackages = with pkgs; [ pmount ffmpegthumbnailer mediainfo ueberzugpp poppler_utils gnome-epub-thumbnailer ];
|
||||
plugins.mappings = { u = "nmount"; c = "chksum"; r = "gitroot"; v = "imgview"; m = "mtpmount"; d = "xdgdefault"; x = "togglex"; p = "preview-tui"; };
|
||||
plugins.src = (pkgs.fetchFromGitHub { owner = "jarun"; repo = "nnn"; rev = "v4.9"; sha256 = "sha256-g19uI36HyzTF2YUQKFP4DE2ZBsArGryVHhX79Y0XzhU=";}) + "/plugins";
|
||||
};
|
||||
|
||||
# Mangohud settings
|
||||
programs.mangohud = {
|
||||
enable = true;
|
||||
settings = {
|
||||
# GPU SETTINGS
|
||||
gpu_stats = true;
|
||||
gpu_temp = true;
|
||||
gpu_core_clock = true;
|
||||
gpu_power = true;
|
||||
gpu_text = "GPU";
|
||||
gpu_load_change = true;
|
||||
gpu_load_color = "39F900,FDFD09,B22222";
|
||||
# CPU SETTINGS
|
||||
cpu_stats = true;
|
||||
cpu_temp = true;
|
||||
cpu_text = "CPU";
|
||||
cpu_mhz = true;
|
||||
cpu_load_change = true;
|
||||
cpu_load_value = "60,90";
|
||||
cpu_load_color = "39F900,FDFD09,B22222";
|
||||
# Vram/Ram/Swap
|
||||
vram = true;
|
||||
ram = true;
|
||||
swap = true;
|
||||
# Fps settings
|
||||
fps = true;
|
||||
fps_sampling_period = "1000";
|
||||
fps_color_change = true;
|
||||
fps_value = "30,60";
|
||||
fps_color = "B22222,FDFD09,39F900";
|
||||
frametime = true;
|
||||
# Misc
|
||||
gpu_name = true;
|
||||
vulkan_driver = true;
|
||||
show_fps_limit = true;
|
||||
resolution = true;
|
||||
round_corners = "5";
|
||||
};
|
||||
};
|
||||
|
||||
# But we all know I love zsh
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableAutosuggestions = true;
|
||||
enableCompletion = true;
|
||||
history.path = "${config.xdg.dataHome}/zsh/history";
|
||||
dotDir = ".config/zsh";
|
||||
envExtra = ''
|
||||
# NNN settings
|
||||
export NNN_FIFO="/tmp/nnn.fifo"
|
||||
export NNN_SSHFS="sshfs -o follow_symlinks"
|
||||
export NNN_TERMINAL="alacritty --class preview,preview"
|
||||
|
||||
# Catppuccin colors nnn
|
||||
BLK="03" CHR="03" DIR="04" EXE="02" REG="07" HARDLINK="05" SYMLINK="05" MISSING="08" ORPHAN="01" FIFO="06" SOCK="03" UNKNOWN="01"
|
||||
export NNN_COLORS="#04020301;4231"
|
||||
export NNN_FCOLORS="$BLK$CHR$DIR$EXE$REG$HARDLINK$SYMLINK$MISSING$ORPHAN$FIFO$SOCK$UNKNOWN"
|
||||
'';
|
||||
initExtra = ''
|
||||
# VI Mode escape timeout fix
|
||||
export KEYTIMEOUT=1
|
||||
|
||||
# Substring search settings
|
||||
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="bg=blue,fg=black,bold"
|
||||
export HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=black,bold'
|
||||
bindkey -M vicmd 'k' history-substring-search-up
|
||||
bindkey -M vicmd 'j' history-substring-search-down
|
||||
'';
|
||||
initExtraFirst = ''
|
||||
nitch
|
||||
'';
|
||||
zplug = {
|
||||
enable = true;
|
||||
plugins = [
|
||||
{ name = "zap-zsh/supercharge"; }
|
||||
{ name = "zap-zsh/completions"; }
|
||||
{ name = "zap-zsh/vim"; }
|
||||
{ name = "chivalryq/git-alias"; }
|
||||
{ name = "zdharma-continuum/fast-syntax-highlighting"; }
|
||||
{ name = "MichaelAquilina/zsh-you-should-use"; }
|
||||
{ name = "zsh-users/zsh-history-substring-search"; }
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
# Eza settings
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
enableAliases = true;
|
||||
git = true;
|
||||
icons = true;
|
||||
};
|
||||
|
||||
# Zoxide settings
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
|
||||
# Starhip settings
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
|
||||
# Fzf settings
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
|
||||
# Nixvim
|
||||
programs.nixvim = {
|
||||
enable = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
|
||||
options = {
|
||||
hlsearch = false;
|
||||
incsearch = true;
|
||||
number = true;
|
||||
relativenumber = true;
|
||||
tabstop = 4;
|
||||
softtabstop = 4;
|
||||
shiftwidth = 4;
|
||||
expandtab = true;
|
||||
smartindent = true;
|
||||
mouse = "";
|
||||
breakindent = true;
|
||||
undofile = true;
|
||||
swapfile = true;
|
||||
ignorecase = true;
|
||||
smartcase = true;
|
||||
signcolumn = "yes";
|
||||
completeopt = "menuone,noselect";
|
||||
updatetime = 50;
|
||||
timeoutlen = 300;
|
||||
colorcolumn = "80";
|
||||
showmode = false;
|
||||
laststatus = 3;
|
||||
splitbelow = true;
|
||||
splitright = true;
|
||||
};
|
||||
|
||||
globals = {
|
||||
mapleader = " ";
|
||||
maplocalleader = ";";
|
||||
};
|
||||
|
||||
extraConfigLuaPost = ''
|
||||
vim.notify = require("mini.notify").make_notify()
|
||||
'';
|
||||
plugins = {
|
||||
harpoon = {
|
||||
enable = true;
|
||||
keymaps = {
|
||||
addFile = "<leader>a";
|
||||
toggleQuickMenu = "<C-e>";
|
||||
navFile = { "1" = "<C-j>"; "2" = "<C-k>"; "3" = "<C-l>"; "4" = "<C-;>"; };
|
||||
};
|
||||
};
|
||||
|
||||
oil = {
|
||||
enable = true;
|
||||
defaultFileExplorer = true;
|
||||
extraOptions = { show_hidden = true; };
|
||||
};
|
||||
|
||||
treesitter.enable = true;
|
||||
|
||||
gitsigns = {
|
||||
enable = true;
|
||||
signs = {
|
||||
add.text = "▎";
|
||||
change.text = "▎";
|
||||
changedelete.text = "▎";
|
||||
delete.text = "▎";
|
||||
topdelete.text = "▎";
|
||||
untracked.text = "▎";
|
||||
};
|
||||
onAttach.function = ''
|
||||
function(buffer)
|
||||
local gs = package.loaded.gitsigns
|
||||
|
||||
local function map(mode, l, r, desc)
|
||||
vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc })
|
||||
end
|
||||
|
||||
-- stylua: ignore start
|
||||
map("n", "]g", gs.next_hunk, "Next git hunk")
|
||||
map("n", "[g", gs.prev_hunk, "Previous git hunk")
|
||||
end
|
||||
'';
|
||||
};
|
||||
|
||||
mini = {
|
||||
enable = true;
|
||||
modules = {
|
||||
statusline = {
|
||||
set_vim_settings = false;
|
||||
};
|
||||
comment = {};
|
||||
notify = {};
|
||||
};
|
||||
};
|
||||
|
||||
telescope = {
|
||||
enable = true;
|
||||
extensions = {
|
||||
fzf-native = {
|
||||
enable = true;
|
||||
fuzzy = true;
|
||||
overrideGenericSorter = true;
|
||||
overrideFileSorter = true;
|
||||
caseMode = "smart_case";
|
||||
};
|
||||
ui-select.enable = true;
|
||||
};
|
||||
keymaps = {
|
||||
"<leader>pf" = "find_files";
|
||||
"<C-p>" = "git_files";
|
||||
"<leader>vh" = "help_tags";
|
||||
"<leader>ps" = "grep_string";
|
||||
};
|
||||
};
|
||||
|
||||
lsp = {
|
||||
enable = true;
|
||||
servers = {
|
||||
lua-ls.enable = true;
|
||||
nil_ls.enable = true;
|
||||
};
|
||||
keymaps = {
|
||||
diagnostic = {
|
||||
"<leader>vd" = "open_float";
|
||||
"[d" = "goto_next";
|
||||
"]d" = "goto_prev";
|
||||
};
|
||||
lspBuf = {
|
||||
K = "hover";
|
||||
gd = "definition";
|
||||
gD = "declaration";
|
||||
gi = "implementation";
|
||||
"<leader>lca" = "code_action";
|
||||
"<leader>lrn" = "rename";
|
||||
"<C-h>" = "signature_help";
|
||||
};
|
||||
};
|
||||
|
||||
preConfig = ''
|
||||
local function sign_define(args)
|
||||
vim.fn.sign_define(args.name, {
|
||||
texthl = args.name,
|
||||
text = args.text,
|
||||
numhl = "",
|
||||
})
|
||||
end
|
||||
|
||||
sign_define({ name = "DiagnosticSignError", text = "E" })
|
||||
sign_define({ name = "DiagnosticSignWarn", text = "W" })
|
||||
sign_define({ name = "DiagnosticSignHint", text = "H" })
|
||||
sign_define({ name = "DiagnosticSignInfo", text = "I" })
|
||||
'';
|
||||
};
|
||||
|
||||
nvim-cmp = {
|
||||
enable = true;
|
||||
autoEnableSources = true;
|
||||
sources = [
|
||||
{name = "nvim_lsp";}
|
||||
{name = "path";}
|
||||
{name = "snippy";}
|
||||
];
|
||||
snippet.expand = "snippy";
|
||||
mapping = {
|
||||
"<C-l>" = "cmp.mapping.confirm({ select = false })";
|
||||
"<C-j>" = {
|
||||
action = ''
|
||||
function(fallback)
|
||||
if cmp.visible then
|
||||
cmp.select_next_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end
|
||||
'';
|
||||
modes = [ "i" "s" ];
|
||||
};
|
||||
"<C-k>" = {
|
||||
action = ''
|
||||
function(fallback)
|
||||
if cmp.visible then
|
||||
cmp.select_prev_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end
|
||||
'';
|
||||
modes = [ "i" "s" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
colorschemes.catppuccin = {
|
||||
enable = true;
|
||||
flavour = "frappe";
|
||||
styles = {
|
||||
functions = [ "bold" ];
|
||||
keywords = [ "bold" ];
|
||||
};
|
||||
};
|
||||
extraPlugins = with pkgs.vimPlugins; [
|
||||
vim-snippets
|
||||
];
|
||||
};
|
||||
|
||||
##-- Restic Timers And Services --##
|
||||
|
||||
# Restic backup
|
||||
systemd.user.services = {
|
||||
restic_backup = {
|
||||
Unit.Description = "Restic backup service";
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = toString (
|
||||
pkgs.writeShellScript "restic-backup" ''
|
||||
. /etc/restic/local
|
||||
restic backup --files-from /home/crony/.config/restic/list --verbose && restic forget --keep-last 10 --keep-daily 7 --keep-weekly 5 --keep-monthly 12
|
||||
. /etc/restic/online
|
||||
restic backup --files-from /home/crony/.config/restic/list --verbose && restic forget --keep-last 10 --keep-daily 7 --keep-weekly 5 --keep-monthly 12
|
||||
''
|
||||
);
|
||||
};
|
||||
Install.WantedBy = [ "default.target" ];
|
||||
};
|
||||
};
|
||||
systemd.user.timers = {
|
||||
restic_backup = {
|
||||
Unit.Description = "Restic backup timer";
|
||||
Timer = {
|
||||
OnBootSec = "5m";
|
||||
OnUnitActiveSec = "6h";
|
||||
};
|
||||
Install.WantedBy = [ "timers.target" ];
|
||||
};
|
||||
};
|
||||
# Restic check
|
||||
systemd.user.services = {
|
||||
restic_check = {
|
||||
Unit.Description = "Restic check service";
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = toString (
|
||||
pkgs.writeShellScript "restic-check" ''
|
||||
. /etc/restic/local
|
||||
restic check --read-data-subset=10%
|
||||
. /etc/restic/online
|
||||
restic check --read-data-subset=10%
|
||||
''
|
||||
);
|
||||
};
|
||||
Install.WantedBy = [ "default.target" ];
|
||||
};
|
||||
};
|
||||
systemd.user.timers = {
|
||||
restic_check = {
|
||||
Unit.Description = "Restic check timer";
|
||||
Timer = {
|
||||
OnCalendar="Thu *-*-* 18:00:00";
|
||||
};
|
||||
Install.WantedBy = [ "timers.target" ];
|
||||
};
|
||||
};
|
||||
# Restic prune
|
||||
systemd.user.services = {
|
||||
restic_prune = {
|
||||
Unit.Description = "Restic prune service";
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = toString (
|
||||
pkgs.writeShellScript "restic-prune" ''
|
||||
. /etc/restic/local
|
||||
restic prune
|
||||
. /etc/restic/online
|
||||
restic prune
|
||||
''
|
||||
);
|
||||
};
|
||||
Install.WantedBy = [ "default.target" ];
|
||||
};
|
||||
};
|
||||
systemd.user.timers = {
|
||||
restic_prune = {
|
||||
Unit.Description = "Restic prune timer";
|
||||
Timer = {
|
||||
OnCalendar="Fri *-*-* 18:00:00";
|
||||
};
|
||||
Install.WantedBy = [ "timers.target" ];
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user