First commit
This commit is contained in:
14
TODO.md
Normal file
14
TODO.md
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# TODO
|
||||||
|
|
||||||
|
## Neovim in a module
|
||||||
|
|
||||||
|
## Gaming
|
||||||
|
ICD fails when vulkaninfo --summary
|
||||||
|
refactor
|
||||||
|
lutris GTK error
|
||||||
|
gamescope doesn't work
|
||||||
|
|
||||||
|
## Move old scripts
|
||||||
|
|
||||||
|
## Ansible
|
||||||
|
install ansible with vsphere sdk
|
||||||
65
customiso.nix
Normal file
65
customiso.nix
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
"${modulesPath}/installer/cd-dvd/installation-cd-minimal.nix"
|
||||||
|
./modules/system/common
|
||||||
|
];
|
||||||
|
|
||||||
|
# use the latest Linux kernel
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
|
users.users = {
|
||||||
|
beastie = {
|
||||||
|
isNormalUser = true;
|
||||||
|
hashedPassword = "";
|
||||||
|
description = "Admin account";
|
||||||
|
extraGroups = [
|
||||||
|
"wheel"
|
||||||
|
];
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKMJ3TkEmRQcX7RQijNa2km6a2xXJk6M6FERh7C9nTJ"
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
security.sudo = {
|
||||||
|
enable = true;
|
||||||
|
extraRules = [
|
||||||
|
{
|
||||||
|
users = [ "beastie" ];
|
||||||
|
host = "ALL";
|
||||||
|
runAs = "ALL:ALL";
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
command = "ALL";
|
||||||
|
options = [ "NOPASSWD" ];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.openfortivpn
|
||||||
|
];
|
||||||
|
|
||||||
|
# Needed for https://github.com/NixOS/nixpkgs/issues/58959
|
||||||
|
boot.supportedFilesystems = lib.mkForce [
|
||||||
|
"btrfs"
|
||||||
|
"reiserfs"
|
||||||
|
"vfat"
|
||||||
|
"f2fs"
|
||||||
|
"xfs"
|
||||||
|
"ntfs"
|
||||||
|
"cifs"
|
||||||
|
"nfs"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
#nixos-generate --format iso --configuration ./customiso.nix -o ~/Downloads/nixos.iso
|
||||||
88
flake.lock
generated
Normal file
88
flake.lock
generated
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"disko": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752718651,
|
||||||
|
"narHash": "sha256-PkaR0qmyP9q/MDN3uYa+RLeBA0PjvEQiM0rTDDBXkL8=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"rev": "d5ad4485e6f2edcc06751df65c5e16572877db88",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mysecrets": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1753141577,
|
||||||
|
"narHash": "sha256-MNbm7KCEqML5l72GppVoxXX03UtVGIzUsgaW+A+FBDQ=",
|
||||||
|
"ref": "main",
|
||||||
|
"rev": "c1edf4983cba959f93daa9c7ef0c1acbd958c755",
|
||||||
|
"shallow": true,
|
||||||
|
"type": "git",
|
||||||
|
"url": "ssh://gitea@git.unixyourbrain.org/beastie/nixos-secrets.git"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"ref": "main",
|
||||||
|
"shallow": true,
|
||||||
|
"type": "git",
|
||||||
|
"url": "ssh://gitea@git.unixyourbrain.org/beastie/nixos-secrets.git"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752364307,
|
||||||
|
"narHash": "sha256-o0Cm4fhz/ukV/excbnwkRB2sqknenkb/0T4pcgXjrp0=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "b6071be3c0d9404113988e5e253eb6d71d1ddbef",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"disko": "disko",
|
||||||
|
"mysecrets": "mysecrets",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"sops-nix": "sops-nix"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sops-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752544651,
|
||||||
|
"narHash": "sha256-GllP7cmQu7zLZTs9z0J2gIL42IZHa9CBEXwBY9szT0U=",
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "sops-nix",
|
||||||
|
"rev": "2c8def626f54708a9c38a5861866660395bb3461",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "Mic92",
|
||||||
|
"repo": "sops-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
59
flake.nix
Normal file
59
flake.nix
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
{
|
||||||
|
description = "A very basic flake";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
disko = {
|
||||||
|
url = "github:nix-community/disko";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
sops-nix = {
|
||||||
|
url = "github:Mic92/sops-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
mysecrets = {
|
||||||
|
url = "git+ssh://gitea@git.unixyourbrain.org/beastie/nixos-secrets.git?ref=main&shallow=1";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{ ... }@inputs:
|
||||||
|
let
|
||||||
|
mkSystem =
|
||||||
|
pkgs: system: hostname: username:
|
||||||
|
pkgs.lib.nixosSystem {
|
||||||
|
inherit system;
|
||||||
|
pkgs = import pkgs {
|
||||||
|
inherit system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
specialArgs = {
|
||||||
|
inherit hostname username inputs;
|
||||||
|
#hostname = hostname;
|
||||||
|
#username = username;
|
||||||
|
}; # For system modules
|
||||||
|
modules = [
|
||||||
|
# General configuration, for all machines
|
||||||
|
inputs.sops-nix.nixosModules.sops
|
||||||
|
inputs.disko.nixosModules.disko
|
||||||
|
./hosts/${hostname}/disk-config.nix
|
||||||
|
./hosts/${hostname}/hardware-configuration.nix
|
||||||
|
./modules
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixosConfigurations = {
|
||||||
|
#nixos-anywhere -- --flake './#test-kvm' --generate-hardware-config nixos-generate-config ./hosts/test-kvm/hardware-configuration.nix --target-host root@192.168.122.204
|
||||||
|
test-kvm = mkSystem inputs.nixpkgs "x86_64-linux" "test-kvm" "beastie";
|
||||||
|
#live-usb = mkSystem inputs.nixpkgs "x86_64-linux" "live-usb" "beastie";
|
||||||
|
#nixos-rebuild switch --flake ./#home-nix --sudo
|
||||||
|
home-nix = mkSystem inputs.nixpkgs "x86_64-linux" "home-nix" "beastie";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
68
hosts/home-nix/disk-config.nix
Normal file
68
hosts/home-nix/disk-config.nix
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
# disko.devices = {
|
||||||
|
# disk = {
|
||||||
|
# main = {
|
||||||
|
# type = "disk";
|
||||||
|
# device = "/dev/sdb";
|
||||||
|
# content = {
|
||||||
|
# type = "gpt";
|
||||||
|
# partitions = {
|
||||||
|
# ESP = {
|
||||||
|
# size = "512M";
|
||||||
|
# type = "EF00";
|
||||||
|
# content = {
|
||||||
|
# type = "filesystem";
|
||||||
|
# format = "vfat";
|
||||||
|
# mountpoint = "/boot";
|
||||||
|
# mountOptions = [ "umask=0077" ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# SYS = {
|
||||||
|
# size = "100%";
|
||||||
|
# type = "8309";
|
||||||
|
# content = {
|
||||||
|
# type = "luks";
|
||||||
|
# name = "rootfs";
|
||||||
|
# settings = {
|
||||||
|
# allowDiscards = true;
|
||||||
|
#
|
||||||
|
# };
|
||||||
|
# content = {
|
||||||
|
# type = "btrfs";
|
||||||
|
# extraArgs = [ "-f --nodiscard --label root" ];
|
||||||
|
# subvolumes = {
|
||||||
|
# "@" = {
|
||||||
|
# mountpoint = "/";
|
||||||
|
# mountOptions = [ "defaults" "ssd" "compress=zstd" "autodefrag" "noatime" "nodiscard" ];
|
||||||
|
# };
|
||||||
|
# "@root" = {
|
||||||
|
# mountpoint = "/root";
|
||||||
|
# mountOptions = [ "defaults" "ssd" "compress=zstd" "autodefrag" "noatime" "nodiscard" ];
|
||||||
|
# };
|
||||||
|
# "@home" = {
|
||||||
|
# mountpoint = "/home";
|
||||||
|
# mountOptions = [ "defaults" "ssd" "compress=zstd" "autodefrag" "noatime" "nodiscard" ];
|
||||||
|
# };
|
||||||
|
# "@nix" = {
|
||||||
|
# mountpoint = "/nix";
|
||||||
|
# mountOptions = [ "defaults" "ssd" "compress=zstd" "autodefrag" "noatime" "nodiscard" ];
|
||||||
|
# };
|
||||||
|
# "@var" = {
|
||||||
|
# mountpoint = "/var";
|
||||||
|
# mountOptions = [ "defaults" "ssd" "compress=zstd" "autodefrag" "noatime" "nodiscard" ];
|
||||||
|
# };
|
||||||
|
# "@games" = {
|
||||||
|
# mountpoint = "/games";
|
||||||
|
# mountOptions = [ "defaults" "ssd" "compress=zstd" "autodefrag" "noatime" "nodiscard" ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
}
|
||||||
|
# sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --yes-wipe-all-disks --mode destroy,format,mount ./disko.nix
|
||||||
149
hosts/home-nix/hardware-configuration.nix
Normal file
149
hosts/home-nix/hardware-configuration.nix
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# 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 = [
|
||||||
|
"xhci_pci"
|
||||||
|
"ehci_pci"
|
||||||
|
"ahci"
|
||||||
|
"nvme"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/2271e57f-0b57-4ab7-8238-b84b01974cc8";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"subvol=@"
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
"nodiscard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.luks.devices."rootfs".device = "/dev/disk/by-uuid/77601e4d-358d-49ba-b6e5-f3a68f05060a";
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/9EF7-6EB2";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [
|
||||||
|
"fmask=0077"
|
||||||
|
"dmask=0077"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/games" = {
|
||||||
|
device = "/dev/disk/by-uuid/2271e57f-0b57-4ab7-8238-b84b01974cc8";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"subvol=@games"
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
"nodiscard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/home" = {
|
||||||
|
device = "/dev/disk/by-uuid/2271e57f-0b57-4ab7-8238-b84b01974cc8";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"subvol=@home"
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
"nodiscard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/nix" = {
|
||||||
|
device = "/dev/disk/by-uuid/2271e57f-0b57-4ab7-8238-b84b01974cc8";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"subvol=@nix"
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
"nodiscard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/root" = {
|
||||||
|
device = "/dev/disk/by-uuid/2271e57f-0b57-4ab7-8238-b84b01974cc8";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"subvol=@root"
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
"nodiscard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/var" = {
|
||||||
|
device = "/dev/disk/by-uuid/2271e57f-0b57-4ab7-8238-b84b01974cc8";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"subvol=@var"
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
"nodiscard"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.etc."crypttab".text = ''
|
||||||
|
datafs UUID=5ca962a7-537f-46ce-ba50-9cc9cefd012b /etc/lukskey
|
||||||
|
'';
|
||||||
|
|
||||||
|
fileSystems."/data" = {
|
||||||
|
device = "/dev/disk/by-uuid/a8ea6a7b-3733-40d8-bee8-45806aaacfe1";
|
||||||
|
fsType = "btrfs";
|
||||||
|
options = [
|
||||||
|
"defaults"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
# 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.enp5s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
105
hosts/test-kvm/disk-config.nix
Normal file
105
hosts/test-kvm/disk-config.nix
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
main = {
|
||||||
|
type = "disk";
|
||||||
|
device = "/dev/vda";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
ESP = {
|
||||||
|
size = "512M";
|
||||||
|
type = "EF00";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
SYS = {
|
||||||
|
size = "100%";
|
||||||
|
type = "8309";
|
||||||
|
content = {
|
||||||
|
type = "luks";
|
||||||
|
name = "rootfs";
|
||||||
|
settings = {
|
||||||
|
allowDiscards = true;
|
||||||
|
|
||||||
|
};
|
||||||
|
content = {
|
||||||
|
type = "btrfs";
|
||||||
|
extraArgs = [ "-f --nodiscard --label root" ];
|
||||||
|
subvolumes = {
|
||||||
|
"@" = {
|
||||||
|
mountpoint = "/";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
"@root" = {
|
||||||
|
mountpoint = "/root";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
"@home" = {
|
||||||
|
mountpoint = "/home";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
"@nix" = {
|
||||||
|
mountpoint = "/nix";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
"@var" = {
|
||||||
|
mountpoint = "/var";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
"@games" = {
|
||||||
|
mountpoint = "/games";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"ssd"
|
||||||
|
"compress=zstd"
|
||||||
|
"autodefrag"
|
||||||
|
"noatime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# sudo nix --experimental-features "nix-command flakes" run github:nix-community/disko/latest -- --yes-wipe-all-disks --mode destroy,format,mount ./disko.nix
|
||||||
29
hosts/test-kvm/hardware-configuration.nix
Normal file
29
hosts/test-kvm/hardware-configuration.nix
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# 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.
|
||||||
|
{ lib, modulesPath, ... }:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/qemu-guest.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"ahci"
|
||||||
|
"xhci_pci"
|
||||||
|
"virtio_pci"
|
||||||
|
"sr_mod"
|
||||||
|
"virtio_blk"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
# 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.enp1s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
}
|
||||||
81
modules/common/default.nix
Normal file
81
modules/common/default.nix
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
{
|
||||||
|
## Do not touch, read the fucking manual !!!
|
||||||
|
system.stateVersion = "25.05";
|
||||||
|
|
||||||
|
## Keep kernel packages up to latest
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
|
# Time Zone
|
||||||
|
time.timeZone = "Europe/Paris";
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
settings = {
|
||||||
|
## Enable flakes
|
||||||
|
experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
## Users trusted to use flake command
|
||||||
|
trusted-users = [
|
||||||
|
"root"
|
||||||
|
"${attrs.username}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
## Grabage collection
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 30d";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services = {
|
||||||
|
locate = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.plocate;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.curl
|
||||||
|
pkgs.pciutils
|
||||||
|
pkgs.clinfo
|
||||||
|
pkgs.cargo
|
||||||
|
pkgs.git
|
||||||
|
pkgs.htop
|
||||||
|
pkgs.killall
|
||||||
|
pkgs.bind
|
||||||
|
pkgs.git
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.openldap
|
||||||
|
pkgs.usbutils
|
||||||
|
pkgs.gnumake
|
||||||
|
pkgs.nixos-anywhere
|
||||||
|
pkgs.nixos-generators
|
||||||
|
pkgs.disko
|
||||||
|
pkgs.sops
|
||||||
|
pkgs.age
|
||||||
|
pkgs.ssh-to-age
|
||||||
|
pkgs.samba
|
||||||
|
pkgs.krb5
|
||||||
|
pkgs.pam_krb5
|
||||||
|
pkgs.gnumake
|
||||||
|
pkgs.keyutils
|
||||||
|
pkgs.cifs-utils
|
||||||
|
pkgs.neovim
|
||||||
|
pkgs.unzip
|
||||||
|
# Nvim with dependencies
|
||||||
|
pkgs.nodejs
|
||||||
|
pkgs.gcc
|
||||||
|
pkgs.shellcheck
|
||||||
|
pkgs.nixd
|
||||||
|
pkgs.nixfmt-rfc-style
|
||||||
|
pkgs.ansible-language-server
|
||||||
|
pkgs.ansible-lint
|
||||||
|
pkgs.lua-language-server
|
||||||
|
];
|
||||||
|
}
|
||||||
34
modules/default.nix
Normal file
34
modules/default.nix
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
modulesPath,
|
||||||
|
inputs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
let
|
||||||
|
hostname = "${attrs.hostname}";
|
||||||
|
secrets = inputs.mysecrets;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
|
||||||
|
./common
|
||||||
|
./grub
|
||||||
|
./networking
|
||||||
|
./sops
|
||||||
|
./sshd
|
||||||
|
./tty
|
||||||
|
./user
|
||||||
|
]
|
||||||
|
++ lib.optionals
|
||||||
|
(builtins.elem hostname [
|
||||||
|
"test-kvm"
|
||||||
|
"home-nix"
|
||||||
|
])
|
||||||
|
[
|
||||||
|
./desktop
|
||||||
|
./libvirt
|
||||||
|
./ssh
|
||||||
|
];
|
||||||
|
}
|
||||||
62
modules/desktop/X11/config/qwerty-fr
Normal file
62
modules/desktop/X11/config/qwerty-fr
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
partial alphanumeric_keys
|
||||||
|
xkb_symbols "qwerty-fr"
|
||||||
|
{
|
||||||
|
include "us(basic)"
|
||||||
|
include "level3(ralt_switch)"
|
||||||
|
|
||||||
|
name[Group1]= "US keyboard with french symbols - AltGr combination";
|
||||||
|
|
||||||
|
key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
|
||||||
|
key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
|
||||||
|
key <AE02> { [ 2, at, twosuperior, dead_doubleacute ] };
|
||||||
|
key <AE03> { [ 3, numbersign, ecircumflex, Ecircumflex ] };
|
||||||
|
key <AE04> { [ 4, dollar, EuroSign, dead_currency ] }; // FIXME: dead_currency has a different mapping than the one we want for qwerty-fr. Need to define a custom dead key instead. See Windows layout for dead key definition.
|
||||||
|
key <AE05> { [ 5, percent, dead_macron, dead_abovedot ] };
|
||||||
|
key <AE06> { [ 6, asciicircum, dead_circumflex, dead_caron ] };
|
||||||
|
key <AE07> { [ 7, ampersand, ucircumflex, Ucircumflex ] };
|
||||||
|
key <AE08> { [ 8, asterisk, icircumflex, Icircumflex ] };
|
||||||
|
key <AE09> { [ 9, parenleft, ocircumflex, Ocircumflex ] };
|
||||||
|
key <AE10> { [ 0, parenright, oslash, Oslash ] };
|
||||||
|
key <AE11> { [ minus, underscore, endash, emdash ] };
|
||||||
|
key <AE12> { [ equal, plus, notequal, approxeq ] };
|
||||||
|
|
||||||
|
key <AD01> { [ q, Q, acircumflex, Acircumflex ] };
|
||||||
|
key <AD02> { [ w, W, eacute, Eacute ] };
|
||||||
|
key <AD03> { [ e, E, egrave, Egrave ] };
|
||||||
|
key <AD04> { [ r, R, registered, copyright ] };
|
||||||
|
key <AD05> { [ t, T, thorn, THORN ] };
|
||||||
|
key <AD06> { [ y, Y, dead_invertedbreve, dead_breve ] };
|
||||||
|
key <AD07> { [ u, U, ugrave, Ugrave ] };
|
||||||
|
key <AD08> { [ i, I, igrave, Igrave ] };
|
||||||
|
key <AD09> { [ o, O, ograve, Ograve ] };
|
||||||
|
key <AD10> { [ p, P, oe, OE ] };
|
||||||
|
key <AD11> { [ bracketleft, braceleft, guillemotleft, leftdoublequotemark ] };
|
||||||
|
key <AD12> { [ bracketright, braceright, guillemotright, rightdoublequotemark ] };
|
||||||
|
|
||||||
|
key <AC01> { [ a, A, agrave, Agrave ] };
|
||||||
|
key <AC02> { [ s, S, ae, AE ] };
|
||||||
|
key <AC03> { [ d, D, ediaeresis, Ediaeresis ] };
|
||||||
|
key <AC04> { [ f, F, VoidSymbol, VoidSymbol ] };
|
||||||
|
key <AC05> { [ g, G, dead_greek, VoidSymbol ] }; // FIXME: dead_greek has a different mapping than the one we want for qwerty-fr. Need to define a custom dead key instead. See Windows layout for dead key definition.
|
||||||
|
key <AC06> { [ h, H, ydiaeresis, Ydiaeresis ] };
|
||||||
|
key <AC07> { [ j, J, udiaeresis, Udiaeresis ] };
|
||||||
|
key <AC08> { [ k, K, idiaeresis, Idiaeresis ] };
|
||||||
|
key <AC09> { [ l, L, odiaeresis, Odiaeresis ] };
|
||||||
|
key <AC10> { [ semicolon, colon, dead_acute, dead_abovering ] };
|
||||||
|
key <AC11> { [ apostrophe, quotedbl, dead_grave, dead_diaeresis ] };
|
||||||
|
key <BKSL> { [ backslash, bar, VoidSymbol, doublelowquotemark ] }; // „
|
||||||
|
|
||||||
|
key <LSGT> { [ less, greater, lessthanequal, greaterthanequal ] };
|
||||||
|
key <AB01> { [ z, Z, adiaeresis, Adiaeresis ] };
|
||||||
|
key <AB02> { [ x, X, multiply, division ] };
|
||||||
|
key <AB03> { [ c, C, ccedilla, Ccedilla ] };
|
||||||
|
key <AB04> { [ v, V, VoidSymbol, VoidSymbol ] };
|
||||||
|
key <AB05> { [ b, B, ssharp, U1E9E ] }; // ß, ẞ (capital)
|
||||||
|
key <AB06> { [ n, N, ntilde, Ntilde ] };
|
||||||
|
key <AB07> { [ m, M, VoidSymbol, VoidSymbol ] };
|
||||||
|
key <AB08> { [ comma, less, dead_cedilla, dead_ogonek ] };
|
||||||
|
key <AB09> { [ period, greater, periodcentered, ellipsis ] }; // ., >, ·, …
|
||||||
|
key <AB10> { [ slash, question, rightsinglequotemark, questiondown ] }; // /, ?, ’, ¿
|
||||||
|
key <SPCE> { [ space, space, nobreakspace, 0x100202F ] }; // espace insécable fine
|
||||||
|
|
||||||
|
};
|
||||||
35
modules/desktop/X11/config/xinitrc
Normal file
35
modules/desktop/X11/config/xinitrc
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
userresources=$HOME/.Xresources
|
||||||
|
usermodmap=$HOME/.Xmodmap
|
||||||
|
sysresources=/etc/X11/xinit/.Xresources
|
||||||
|
sysmodmap=/etc/X11/xinit/.Xmodmap
|
||||||
|
|
||||||
|
# merge in defaults and keymaps
|
||||||
|
|
||||||
|
if [ -f $sysresources ]; then
|
||||||
|
xrdb -merge $sysresources
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f $sysmodmap ]; then
|
||||||
|
xmodmap $sysmodmap
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$userresources" ]; then
|
||||||
|
xrdb -merge "$userresources"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$usermodmap" ]; then
|
||||||
|
xmodmap "$usermodmap"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# start some nice programs
|
||||||
|
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
|
||||||
|
for f in /etc/X11/xinit/xinitrc.d/?*.sh ; do
|
||||||
|
[ -x "$f" ] && . "$f"
|
||||||
|
done
|
||||||
|
unset f
|
||||||
|
fi
|
||||||
|
|
||||||
|
numlockx &
|
||||||
|
exec i3
|
||||||
36
modules/desktop/X11/default.nix
Normal file
36
modules/desktop/X11/default.nix
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}@args:
|
||||||
|
{
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
displayManager.startx.enable = true;
|
||||||
|
xkb = {
|
||||||
|
layout = "qwerty-fr";
|
||||||
|
extraLayouts.qwerty-fr = {
|
||||||
|
description = "QWERTY avec symboles et diacritiques français ";
|
||||||
|
languages = [ "eng" ];
|
||||||
|
symbolsFile = ./config/qwerty-fr;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
numlockx
|
||||||
|
adwaita-icon-theme
|
||||||
|
xclip
|
||||||
|
flameshot
|
||||||
|
];
|
||||||
|
environment.etc = {
|
||||||
|
"X11/xinit/xinitrc".source = ./config/xinitrc;
|
||||||
|
};
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
./i3
|
||||||
|
./polybar
|
||||||
|
]
|
||||||
|
++ lib.optionals args.isGpu [
|
||||||
|
./picom
|
||||||
|
];
|
||||||
|
}
|
||||||
15
modules/desktop/X11/i3/config/colors
Normal file
15
modules/desktop/X11/i3/config/colors
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
set $fg #c6d0f5
|
||||||
|
set $fgli #d4d8df
|
||||||
|
set $fglier #f6f7f9
|
||||||
|
set $bg #303446
|
||||||
|
set $bgli #323842
|
||||||
|
set $bgda #21252b
|
||||||
|
set $bgdaer #1e2227
|
||||||
|
set $black #51576d
|
||||||
|
set $red #e78284
|
||||||
|
set $green #e5c890
|
||||||
|
set $yellow #e5c890
|
||||||
|
set $blue #8caaee
|
||||||
|
set $purple #f4b8e4
|
||||||
|
set $cyan #81c8be
|
||||||
|
set $white #b5bfe2
|
||||||
136
modules/desktop/X11/i3/config/config
Normal file
136
modules/desktop/X11/i3/config/config
Normal file
@@ -0,0 +1,136 @@
|
|||||||
|
set $mod Mod4
|
||||||
|
|
||||||
|
# Reload Restart config | moved to rofi
|
||||||
|
#bindsym $mod+c reload
|
||||||
|
bindsym $mod+r restart
|
||||||
|
bindsym $mod+e exit
|
||||||
|
|
||||||
|
# Floating Modifier
|
||||||
|
floating_modifier $mod
|
||||||
|
|
||||||
|
# Kill focused window
|
||||||
|
bindsym $mod+q kill
|
||||||
|
|
||||||
|
# change focus
|
||||||
|
bindsym $mod+Up focus up
|
||||||
|
bindsym $mod+Down focus down
|
||||||
|
bindsym $mod+Left focus left
|
||||||
|
bindsym $mod+Right focus right
|
||||||
|
|
||||||
|
# Move Focused
|
||||||
|
bindsym $mod+Control+Up move up
|
||||||
|
bindsym $mod+Control+Down move down
|
||||||
|
bindsym $mod+Control+Left move left
|
||||||
|
bindsym $mod+Control+Right move right
|
||||||
|
|
||||||
|
bindsym $mod+o move container to output next
|
||||||
|
|
||||||
|
# Resizing window
|
||||||
|
bindsym $mod+Shift+Up resize grow height 10 px or 10 ppt
|
||||||
|
bindsym $mod+Shift+Down resize shrink height 10 px or 10 ppt
|
||||||
|
bindsym $mod+Shift+Left resize shrink width 10 px or 10 ppt
|
||||||
|
bindsym $mod+Shift+Right resize grow width 10 px or 10 ppt
|
||||||
|
|
||||||
|
# Workspace layout
|
||||||
|
bindsym $mod+space layout toggle splitv splith tabbed
|
||||||
|
|
||||||
|
# Fullscreen
|
||||||
|
bindsym $mod+f fullscreen toggle
|
||||||
|
|
||||||
|
# Flaoting
|
||||||
|
bindsym $mod+Shift+space floating toggle
|
||||||
|
|
||||||
|
# Splitting
|
||||||
|
bindsym $mod+v split vertical
|
||||||
|
bindsym $mod+h split horizontal
|
||||||
|
bindsym $mod+Control+space split toggle
|
||||||
|
|
||||||
|
# Volume control
|
||||||
|
bindsym F5 exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%
|
||||||
|
bindsym F6 exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%
|
||||||
|
|
||||||
|
##############
|
||||||
|
# Workspaces #
|
||||||
|
##############
|
||||||
|
|
||||||
|
include /etc/xdg/i3/screen
|
||||||
|
|
||||||
|
###########################
|
||||||
|
#Design
|
||||||
|
###########################
|
||||||
|
|
||||||
|
title_align center
|
||||||
|
default_border pixel 1
|
||||||
|
|
||||||
|
# Gaps
|
||||||
|
gaps inner 10px
|
||||||
|
smart_gaps off
|
||||||
|
gaps inner 5
|
||||||
|
|
||||||
|
#smart|ignore|leave_fullscreen
|
||||||
|
popup_during_fullscreen ignore
|
||||||
|
|
||||||
|
# Font
|
||||||
|
set $font ComicShannsMono Nerd Font Bold
|
||||||
|
font pango:$font 11
|
||||||
|
|
||||||
|
#colors
|
||||||
|
#include /etc/xdg/i3/colors
|
||||||
|
set $fg #c6d0f5
|
||||||
|
set $fgli #d4d8df
|
||||||
|
set $fglier #f6f7f9
|
||||||
|
set $bg #303446
|
||||||
|
set $bgli #323842
|
||||||
|
set $bgda #21252b
|
||||||
|
set $bgdaer #1e2227
|
||||||
|
set $black #51576d
|
||||||
|
set $red #e78284
|
||||||
|
set $green #e5c890
|
||||||
|
set $yellow #e5c890
|
||||||
|
set $blue #8caaee
|
||||||
|
set $purple #f4b8e4
|
||||||
|
set $cyan #81c8be
|
||||||
|
set $white #b5bfe2
|
||||||
|
|
||||||
|
# class border backgr. text indicator child_border
|
||||||
|
client.focused $blue $bg $blue $purple $blue
|
||||||
|
client.focused_inactive $bgda $bgli $fglier $bgda $bgda
|
||||||
|
client.unfocused $bgdaer $bg $fg $bgdaer $bgdaer
|
||||||
|
client.urgent $red $bg $fg $red $red
|
||||||
|
client.placeholder $bgdaer $bg $fg $bgdaer $bgdaer
|
||||||
|
client.background $bg
|
||||||
|
|
||||||
|
###########
|
||||||
|
# Startup #
|
||||||
|
###########
|
||||||
|
#exec_always --no-startup-id /usr/local/share/dotfiles/scripts/wallpapers.sh
|
||||||
|
exec_always --no-startup-id "killall picom ; picom"
|
||||||
|
exec_always --no-startup-id "killall dunst ; dunst"
|
||||||
|
exec_always --no-startup-id "flameshot"
|
||||||
|
#exec_always --no-startup-id "killall nextcloud ; nextcloud"
|
||||||
|
|
||||||
|
#################
|
||||||
|
# Apps shortcut #
|
||||||
|
#################
|
||||||
|
bindsym Print exec --no-startup-id flameshot gui
|
||||||
|
|
||||||
|
include /etc/xdg/i3/rofi
|
||||||
|
bindsym $mod+l exec --no-startup-id /usr/local/share/dotfiles/scripts/disconnect.sh
|
||||||
|
bindsym $mod+b exec --no-startup-id /usr/local/share/dotfiles/scripts/bookmarks.sh
|
||||||
|
bindsym $mod+m exec --no-startup-id /usr/local/share/dotfiles/scripts/mpv.sh
|
||||||
|
bindsym $mod+g exec --no-startup-id /usr/local/share/dotfiles/scripts/search.sh
|
||||||
|
bindsym $mod+c exec --no-startup-id rofi -show calc -theme disconnect.rasi
|
||||||
|
|
||||||
|
bindsym $mod+Shift+p exec --no-startup-id pavucontrol
|
||||||
|
bindsym $mod+Shift+d exec --no-startup-id discord --no-sandbox
|
||||||
|
bindsym $mod+Shift+f exec --no-startup-id firefox
|
||||||
|
bindsym $mod+Shift+s exec --no-startup-id steam
|
||||||
|
|
||||||
|
|
||||||
|
# Start a terminal
|
||||||
|
bindsym $mod+Return exec --no-startup-id kitty
|
||||||
|
|
||||||
|
# Display help
|
||||||
|
for_window [instance="cheatsheet"] floating enable
|
||||||
|
for_window [instance="vncviewer"] floating enable
|
||||||
|
bindsym $mod+s exec --no-startup-id kitty --class cheatsheet /usr/local/share/dotfiles/scripts/i3wm_key_help.sh
|
||||||
41
modules/desktop/X11/i3/config/screen-home-nix
Normal file
41
modules/desktop/X11/i3/config/screen-home-nix
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
set $monitor0 HDMI-0
|
||||||
|
set $monitor1 HDMI-1
|
||||||
|
|
||||||
|
set $ws1 "1"
|
||||||
|
set $ws2 "2"
|
||||||
|
set $ws3 "3"
|
||||||
|
set $ws4 "4"
|
||||||
|
set $ws5 "5"
|
||||||
|
set $ws6 "6"
|
||||||
|
set $ws7 "7"
|
||||||
|
set $ws8 "8"
|
||||||
|
|
||||||
|
workspace $ws1 output $monitor0
|
||||||
|
workspace $ws2 output $monitor0
|
||||||
|
workspace $ws3 output $monitor0
|
||||||
|
workspace $ws4 output $monitor0
|
||||||
|
workspace $ws5 output $monitor1
|
||||||
|
workspace $ws6 output $monitor1
|
||||||
|
workspace $ws7 output $monitor1
|
||||||
|
workspace $ws8 output $monitor1
|
||||||
|
|
||||||
|
bindsym $mod+mod2+KP_1 workspace $ws1
|
||||||
|
bindsym $mod+mod2+KP_2 workspace $ws2
|
||||||
|
bindsym $mod+mod2+KP_3 workspace $ws3
|
||||||
|
bindsym $mod+mod2+KP_4 workspace $ws4
|
||||||
|
bindsym $mod+mod2+KP_5 workspace $ws5
|
||||||
|
bindsym $mod+mod2+KP_6 workspace $ws6
|
||||||
|
bindsym $mod+mod2+KP_7 workspace $ws7
|
||||||
|
bindsym $mod+mod2+KP_8 workspace $ws8
|
||||||
|
|
||||||
|
bindsym $mod+Control+mod2+KP_1 move container to workspace $ws1
|
||||||
|
bindsym $mod+Control+mod2+KP_2 move container to workspace $ws2
|
||||||
|
bindsym $mod+Control+mod2+KP_3 move container to workspace $ws3
|
||||||
|
bindsym $mod+Control+mod2+KP_4 move container to workspace $ws4
|
||||||
|
bindsym $mod+Control+mod2+KP_5 move container to workspace $ws5
|
||||||
|
bindsym $mod+Control+mod2+KP_6 move container to workspace $ws6
|
||||||
|
bindsym $mod+Control+mod2+KP_7 move container to workspace $ws7
|
||||||
|
bindsym $mod+Control+mod2+KP_8 move container to workspace $ws8
|
||||||
|
|
||||||
|
exec --no-startup-id xrandr --output HDMI-1 --primary --right-of HDMI-0
|
||||||
|
exec_always --no-startup-id "kill $(pgrep polybar) ; polybar main & polybar alt"
|
||||||
40
modules/desktop/X11/i3/config/screen-test-kvm
Normal file
40
modules/desktop/X11/i3/config/screen-test-kvm
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
set $monitor0 Virtual-1
|
||||||
|
|
||||||
|
set $ws1 "1"
|
||||||
|
set $ws2 "2"
|
||||||
|
set $ws3 "3"
|
||||||
|
set $ws4 "4"
|
||||||
|
set $ws5 "5"
|
||||||
|
set $ws6 "6"
|
||||||
|
set $ws7 "7"
|
||||||
|
set $ws8 "8"
|
||||||
|
|
||||||
|
workspace $ws1 output $monitor0
|
||||||
|
workspace $ws2 output $monitor0
|
||||||
|
workspace $ws3 output $monitor0
|
||||||
|
workspace $ws4 output $monitor0
|
||||||
|
workspace $ws5 output $monitor0
|
||||||
|
workspace $ws6 output $monitor0
|
||||||
|
workspace $ws7 output $monitor0
|
||||||
|
workspace $ws8 output $monitor0
|
||||||
|
|
||||||
|
bindsym $mod+mod2+KP_1 workspace $ws1
|
||||||
|
bindsym $mod+mod2+KP_2 workspace $ws2
|
||||||
|
bindsym $mod+mod2+KP_3 workspace $ws3
|
||||||
|
bindsym $mod+mod2+KP_4 workspace $ws4
|
||||||
|
bindsym $mod+mod2+KP_5 workspace $ws5
|
||||||
|
bindsym $mod+mod2+KP_6 workspace $ws6
|
||||||
|
bindsym $mod+mod2+KP_7 workspace $ws7
|
||||||
|
bindsym $mod+mod2+KP_8 workspace $ws8
|
||||||
|
|
||||||
|
bindsym $mod+Control+mod2+KP_1 move container to workspace $ws1
|
||||||
|
bindsym $mod+Control+mod2+KP_2 move container to workspace $ws2
|
||||||
|
bindsym $mod+Control+mod2+KP_3 move container to workspace $ws3
|
||||||
|
bindsym $mod+Control+mod2+KP_4 move container to workspace $ws4
|
||||||
|
bindsym $mod+Control+mod2+KP_5 move container to workspace $ws5
|
||||||
|
bindsym $mod+Control+mod2+KP_6 move container to workspace $ws6
|
||||||
|
bindsym $mod+Control+mod2+KP_7 move container to workspace $ws7
|
||||||
|
bindsym $mod+Control+mod2+KP_8 move container to workspace $ws8
|
||||||
|
|
||||||
|
exec --no-startup-id xrandr --output Virtual-1 --primary --mode 1920x1080
|
||||||
|
exec_always --no-startup-id "killall polybar ; polybar main"
|
||||||
23
modules/desktop/X11/i3/default.nix
Normal file
23
modules/desktop/X11/i3/default.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
{
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.i3
|
||||||
|
pkgs.i3lock
|
||||||
|
pkgs.i3-volume
|
||||||
|
pkgs.i3-gaps
|
||||||
|
pkgs.rofi
|
||||||
|
];
|
||||||
|
environment.etc = {
|
||||||
|
"xdg/i3/config".source = ./config/config;
|
||||||
|
"xdg/i3/colors".source = ./config/colors;
|
||||||
|
"xdg/i3/screen".source = ./config/screen-${attrs.hostname};
|
||||||
|
"xdg/i3/rofi" = {
|
||||||
|
text = ''
|
||||||
|
bindsym $mod+d exec --no-startup-id ${pkgs.rofi}/bin/rofi -show drun -show-icons -config /etc/xdg/rofi/config.rasi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
436
modules/desktop/X11/picom/config/picom.conf
Normal file
436
modules/desktop/X11/picom/config/picom.conf
Normal file
@@ -0,0 +1,436 @@
|
|||||||
|
#################################
|
||||||
|
# Shadows #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
|
||||||
|
# Enabled client-side shadows on windows. Note desktop windows
|
||||||
|
# (windows with '_NET_WM_WINDOW_TYPE_DESKTOP') never get shadow,
|
||||||
|
# unless explicitly requested using the wintypes option.
|
||||||
|
#
|
||||||
|
# shadow = false
|
||||||
|
#shadow = false;
|
||||||
|
|
||||||
|
# The blur radius for shadows, in pixels. (defaults to 12)
|
||||||
|
# shadow-radius = 12
|
||||||
|
#shadow-radius = 8;
|
||||||
|
|
||||||
|
# The opacity of shadows. (0.0 - 1.0, defaults to 0.75)
|
||||||
|
# shadow-opacity = .75
|
||||||
|
|
||||||
|
# The left offset for shadows, in pixels. (defaults to -15)
|
||||||
|
# shadow-offset-x = -15
|
||||||
|
#shadow-offset-x = -17;
|
||||||
|
|
||||||
|
# The top offset for shadows, in pixels. (defaults to -15)
|
||||||
|
# shadow-offset-y = -15
|
||||||
|
#shadow-offset-y = -17;
|
||||||
|
|
||||||
|
# Red color value of shadow (0.0 - 1.0, defaults to 0).
|
||||||
|
# shadow-red = 0
|
||||||
|
|
||||||
|
# Green color value of shadow (0.0 - 1.0, defaults to 0).
|
||||||
|
# shadow-green = 0
|
||||||
|
|
||||||
|
# Blue color value of shadow (0.0 - 1.0, defaults to 0).
|
||||||
|
# shadow-blue = 0
|
||||||
|
|
||||||
|
# Hex string color value of shadow (#000000 - #FFFFFF, defaults to #000000). This option will override options set shadow-(red/green/blue)
|
||||||
|
# shadow-color = "#000000"
|
||||||
|
|
||||||
|
# Specify a list of conditions of windows that should have no shadow.
|
||||||
|
#
|
||||||
|
# examples:
|
||||||
|
# shadow-exclude = "n:e:Notification";
|
||||||
|
#
|
||||||
|
# shadow-exclude = []
|
||||||
|
#shadow-exclude = [
|
||||||
|
# "name = 'Notification'",
|
||||||
|
# "class_g = 'Conky'",
|
||||||
|
# "class_g ?= 'Notify-osd'",
|
||||||
|
# "class_g = 'Cairo-clock'",
|
||||||
|
# "_GTK_FRAME_EXTENTS@:c"
|
||||||
|
#];
|
||||||
|
|
||||||
|
# Specify a list of conditions of windows that should have no shadow painted over, such as a dock window.
|
||||||
|
# clip-shadow-above = []
|
||||||
|
|
||||||
|
# Specify a X geometry that describes the region in which shadow should not
|
||||||
|
# be painted in, such as a dock window region. Use
|
||||||
|
# shadow-exclude-reg = "x10+0+0"
|
||||||
|
# for example, if the 10 pixels on the bottom of the screen should not have shadows painted on.
|
||||||
|
#
|
||||||
|
# shadow-exclude-reg = ""
|
||||||
|
|
||||||
|
# Crop shadow of a window fully on a particular Xinerama screen to the screen.
|
||||||
|
# xinerama-shadow-crop = false
|
||||||
|
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Fading #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
|
||||||
|
# Fade windows in/out when opening/closing and when opacity changes,
|
||||||
|
# unless no-fading-openclose is used.
|
||||||
|
# fading = false
|
||||||
|
fading = true;
|
||||||
|
|
||||||
|
# Opacity change between steps while fading in. (0.01 - 1.0, defaults to 0.028)
|
||||||
|
# fade-in-step = 0.028
|
||||||
|
fade-in-step = 0.03;
|
||||||
|
|
||||||
|
# Opacity change between steps while fading out. (0.01 - 1.0, defaults to 0.03)
|
||||||
|
# fade-out-step = 0.03
|
||||||
|
fade-out-step = 0.03;
|
||||||
|
|
||||||
|
# The time between steps in fade step, in milliseconds. (> 0, defaults to 10)
|
||||||
|
# fade-delta = 10
|
||||||
|
|
||||||
|
# Specify a list of conditions of windows that should not be faded.
|
||||||
|
fade-exclude = [
|
||||||
|
]
|
||||||
|
|
||||||
|
# Do not fade on window open/close.
|
||||||
|
# no-fading-openclose = false
|
||||||
|
|
||||||
|
# Do not fade destroyed ARGB windows with WM frame. Workaround of bugs in Openbox, Fluxbox, etc.
|
||||||
|
# no-fading-destroyed-argb = false
|
||||||
|
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Transparency / Opacity #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
|
||||||
|
# Opacity of inactive windows. (0.1 - 1.0, defaults to 1.0)
|
||||||
|
# inactive-opacity = 1
|
||||||
|
inactive-opacity = 0.75;
|
||||||
|
|
||||||
|
# Opacity of window titlebars and borders. (0.1 - 1.0, disabled by default)
|
||||||
|
# frame-opacity = 1.0
|
||||||
|
#frame-opacity = 0.75;
|
||||||
|
|
||||||
|
# Let inactive opacity set by -i override the '_NET_WM_WINDOW_OPACITY' values of windows.
|
||||||
|
# inactive-opacity-override = true
|
||||||
|
inactive-opacity-override = false;
|
||||||
|
|
||||||
|
# Default opacity for active windows. (0.0 - 1.0, defaults to 1.0)
|
||||||
|
active-opacity = 0.95;
|
||||||
|
|
||||||
|
# Dim inactive windows. (0.0 - 1.0, defaults to 0.0)
|
||||||
|
# inactive-dim = 0.0
|
||||||
|
|
||||||
|
# Specify a list of conditions of windows that should never be considered focused.
|
||||||
|
# focus-exclude = []
|
||||||
|
#focus-exclude = [
|
||||||
|
#];
|
||||||
|
|
||||||
|
# Use fixed inactive dim value, instead of adjusting according to window opacity.
|
||||||
|
# inactive-dim-fixed = 1.0
|
||||||
|
|
||||||
|
# Specify a list of opacity rules, in the format `PERCENT:PATTERN`,
|
||||||
|
# like `50:name *= "Firefox"`. picom-trans is recommended over this.
|
||||||
|
# Note we don't make any guarantee about possible conflicts with other
|
||||||
|
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
|
||||||
|
# example:
|
||||||
|
#opacity-rule = [ "75:class_g = 'Polybar'" ];
|
||||||
|
#
|
||||||
|
opacity-rule = [
|
||||||
|
"100:class_g = 'firefox'",
|
||||||
|
"100:class_g = 'Chromium'",
|
||||||
|
"100:class_g = 'mpv'",
|
||||||
|
"100:class_g = 'dontstarve_steam_x64'",
|
||||||
|
"100:class_g = 'virt-manager'"
|
||||||
|
];
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Corners #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Sets the radius of rounded window corners. When > 0, the compositor will
|
||||||
|
# round the corners of windows. Does not interact well with
|
||||||
|
# `transparent-clipping`.
|
||||||
|
corner-radius = 0
|
||||||
|
|
||||||
|
# Exclude conditions for rounded corners.
|
||||||
|
rounded-corners-exclude = [
|
||||||
|
"window_type = 'dock'",
|
||||||
|
"window_type = 'desktop'"
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# Background-Blurring #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
|
||||||
|
# Parameters for background blurring, see the *BLUR* section for more information.
|
||||||
|
blur-method = "dual_kawase"
|
||||||
|
blur-size = 3
|
||||||
|
#
|
||||||
|
blur-deviation = true
|
||||||
|
#
|
||||||
|
blur-strength = 3
|
||||||
|
|
||||||
|
# Blur background of semi-transparent / ARGB windows.
|
||||||
|
# Bad in performance, with driver-dependent behavior.
|
||||||
|
# The name of the switch may change without prior notifications.
|
||||||
|
#
|
||||||
|
# blur-background = true
|
||||||
|
|
||||||
|
# Blur background of windows when the window frame is not opaque.
|
||||||
|
# Implies:
|
||||||
|
# blur-background
|
||||||
|
# Bad in performance, with driver-dependent behavior. The name may change.
|
||||||
|
#
|
||||||
|
# blur-background-frame = false
|
||||||
|
|
||||||
|
|
||||||
|
# Use fixed blur strength rather than adjusting according to window opacity.
|
||||||
|
# blur-background-fixed = false
|
||||||
|
|
||||||
|
|
||||||
|
# Specify the blur convolution kernel, with the following format:
|
||||||
|
# example:
|
||||||
|
# blur-kern = "5,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1";
|
||||||
|
#
|
||||||
|
# blur-kern = ""
|
||||||
|
blur-kern = "3x3box";
|
||||||
|
|
||||||
|
|
||||||
|
# Exclude conditions for background blur.
|
||||||
|
# blur-background-exclude = []
|
||||||
|
blur-background-exclude = [
|
||||||
|
# "window_type = 'dock'",
|
||||||
|
"class_g = 'mpv'",
|
||||||
|
"window_type = 'desktop'",
|
||||||
|
"_GTK_FRAME_EXTENTS@:c"
|
||||||
|
];
|
||||||
|
|
||||||
|
#################################
|
||||||
|
# General Settings #
|
||||||
|
#################################
|
||||||
|
|
||||||
|
# Enable remote control via D-Bus. See the man page for more details.
|
||||||
|
# dbus = true
|
||||||
|
|
||||||
|
# Daemonize process. Fork to background after initialization. Causes issues with certain (badly-written) drivers.
|
||||||
|
# daemon = false
|
||||||
|
|
||||||
|
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
|
||||||
|
# `xrender` is the default one.
|
||||||
|
#
|
||||||
|
backend = "glx"
|
||||||
|
# backend = "xrender";
|
||||||
|
|
||||||
|
# Enable/disable VSync.
|
||||||
|
# vsync = false
|
||||||
|
vsync = true;
|
||||||
|
|
||||||
|
# Enable remote control via D-Bus. See the *D-BUS API* section below for more details.
|
||||||
|
# dbus = false
|
||||||
|
|
||||||
|
# Try to detect WM windows (a non-override-redirect window with no
|
||||||
|
# child that has 'WM_STATE') and mark them as active.
|
||||||
|
#
|
||||||
|
# mark-wmwin-focused = false
|
||||||
|
mark-wmwin-focused = true;
|
||||||
|
|
||||||
|
# Mark override-redirect windows that doesn't have a child window with 'WM_STATE' focused.
|
||||||
|
# mark-ovredir-focused = false
|
||||||
|
mark-ovredir-focused = true;
|
||||||
|
|
||||||
|
# Try to detect windows with rounded corners and don't consider them
|
||||||
|
# shaped windows. The accuracy is not very high, unfortunately.
|
||||||
|
#
|
||||||
|
# detect-rounded-corners = false
|
||||||
|
detect-rounded-corners = true;
|
||||||
|
|
||||||
|
# Detect '_NET_WM_WINDOW_OPACITY' on client windows, useful for window managers
|
||||||
|
# not passing '_NET_WM_WINDOW_OPACITY' of client windows to frame windows.
|
||||||
|
#
|
||||||
|
# detect-client-opacity = false
|
||||||
|
detect-client-opacity = true;
|
||||||
|
|
||||||
|
# Use EWMH '_NET_ACTIVE_WINDOW' to determine currently focused window,
|
||||||
|
# rather than listening to 'FocusIn'/'FocusOut' event. Might have more accuracy,
|
||||||
|
# provided that the WM supports it.
|
||||||
|
#
|
||||||
|
# use-ewmh-active-win = false
|
||||||
|
|
||||||
|
# Unredirect all windows if a full-screen opaque window is detected,
|
||||||
|
# to maximize performance for full-screen windows. Known to cause flickering
|
||||||
|
# when redirecting/unredirecting windows.
|
||||||
|
#
|
||||||
|
# unredir-if-possible = false
|
||||||
|
|
||||||
|
# Delay before unredirecting the window, in milliseconds. Defaults to 0.
|
||||||
|
# unredir-if-possible-delay = 0
|
||||||
|
|
||||||
|
# Conditions of windows that shouldn't be considered full-screen for unredirecting screen.
|
||||||
|
# unredir-if-possible-exclude = []
|
||||||
|
|
||||||
|
# Use 'WM_TRANSIENT_FOR' to group windows, and consider windows
|
||||||
|
# in the same group focused at the same time.
|
||||||
|
#
|
||||||
|
# detect-transient = false
|
||||||
|
detect-transient = true;
|
||||||
|
|
||||||
|
# Use 'WM_CLIENT_LEADER' to group windows, and consider windows in the same
|
||||||
|
# group focused at the same time. This usually means windows from the same application
|
||||||
|
# will be considered focused or unfocused at the same time.
|
||||||
|
# 'WM_TRANSIENT_FOR' has higher priority if detect-transient is enabled, too.
|
||||||
|
#
|
||||||
|
# detect-client-leader = false
|
||||||
|
|
||||||
|
# Resize damaged region by a specific number of pixels.
|
||||||
|
# A positive value enlarges it while a negative one shrinks it.
|
||||||
|
# If the value is positive, those additional pixels will not be actually painted
|
||||||
|
# to screen, only used in blur calculation, and such. (Due to technical limitations,
|
||||||
|
# with use-damage, those pixels will still be incorrectly painted to screen.)
|
||||||
|
# Primarily used to fix the line corruption issues of blur,
|
||||||
|
# in which case you should use the blur radius value here
|
||||||
|
# (e.g. with a 3x3 kernel, you should use `--resize-damage 1`,
|
||||||
|
# with a 5x5 one you use `--resize-damage 2`, and so on).
|
||||||
|
# May or may not work with *--glx-no-stencil*. Shrinking doesn't function correctly.
|
||||||
|
#
|
||||||
|
# resize-damage = 1
|
||||||
|
|
||||||
|
# Specify a list of conditions of windows that should be painted with inverted color.
|
||||||
|
# Resource-hogging, and is not well tested.
|
||||||
|
#
|
||||||
|
# invert-color-include = []
|
||||||
|
|
||||||
|
# GLX backend: Avoid using stencil buffer, useful if you don't have a stencil buffer.
|
||||||
|
# Might cause incorrect opacity when rendering transparent content (but never
|
||||||
|
# practically happened) and may not work with blur-background.
|
||||||
|
# My tests show a 15% performance boost. Recommended.
|
||||||
|
#
|
||||||
|
glx-no-stencil = true;
|
||||||
|
|
||||||
|
# GLX backend: Avoid rebinding pixmap on window damage.
|
||||||
|
# Probably could improve performance on rapid window content changes,
|
||||||
|
# but is known to break things on some drivers (LLVMpipe, xf86-video-intel, etc.).
|
||||||
|
# Recommended if it works.
|
||||||
|
#
|
||||||
|
# glx-no-rebind-pixmap = false
|
||||||
|
|
||||||
|
# Disable the use of damage information.
|
||||||
|
# This cause the whole screen to be redrawn every time, instead of the part of the screen
|
||||||
|
# has actually changed. Potentially degrades the performance, but might fix some artifacts.
|
||||||
|
# The opposing option is use-damage
|
||||||
|
#
|
||||||
|
# no-use-damage = false
|
||||||
|
use-damage = true;
|
||||||
|
|
||||||
|
# Use X Sync fence to sync clients' draw calls, to make sure all draw
|
||||||
|
# calls are finished before picom starts drawing. Needed on nvidia-drivers
|
||||||
|
# with GLX backend for some users.
|
||||||
|
#
|
||||||
|
# xrender-sync-fence = false
|
||||||
|
|
||||||
|
# GLX backend: Use specified GLSL fragment shader for rendering window
|
||||||
|
# contents. Read the man page for a detailed explanation of the interface.
|
||||||
|
#
|
||||||
|
# window-shader-fg = "default"
|
||||||
|
|
||||||
|
# Use rules to set per-window shaders. Syntax is SHADER_PATH:PATTERN, similar
|
||||||
|
# to opacity-rule. SHADER_PATH can be "default". This overrides window-shader-fg.
|
||||||
|
#
|
||||||
|
# window-shader-fg-rule = [
|
||||||
|
# "my_shader.frag:window_type != 'dock'"
|
||||||
|
# ]
|
||||||
|
|
||||||
|
# Force all windows to be painted with blending. Useful if you
|
||||||
|
# have a glx-fshader-win that could turn opaque pixels transparent.
|
||||||
|
#
|
||||||
|
# force-win-blend = false
|
||||||
|
|
||||||
|
# Do not use EWMH to detect fullscreen windows.
|
||||||
|
# Reverts to checking if a window is fullscreen based only on its size and coordinates.
|
||||||
|
#
|
||||||
|
# no-ewmh-fullscreen = false
|
||||||
|
|
||||||
|
# Dimming bright windows so their brightness doesn't exceed this set value.
|
||||||
|
# Brightness of a window is estimated by averaging all pixels in the window,
|
||||||
|
# so this could comes with a performance hit.
|
||||||
|
# Setting this to 1.0 disables this behaviour. Requires --use-damage to be disabled. (default: 1.0)
|
||||||
|
#
|
||||||
|
# max-brightness = 1.0
|
||||||
|
|
||||||
|
# Make transparent windows clip other windows like non-transparent windows do,
|
||||||
|
# instead of blending on top of them.
|
||||||
|
#
|
||||||
|
# transparent-clipping = false
|
||||||
|
|
||||||
|
# Specify a list of conditions of windows that should never have transparent
|
||||||
|
# clipping applied. Useful for screenshot tools, where you need to be able to
|
||||||
|
# see through transparent parts of the window.
|
||||||
|
#
|
||||||
|
# transparent-clipping-exclude = []
|
||||||
|
|
||||||
|
# Set the log level. Possible values are:
|
||||||
|
# "trace", "debug", "info", "warn", "error"
|
||||||
|
# in increasing level of importance. Case doesn't matter.
|
||||||
|
# If using the "TRACE" log level, it's better to log into a file
|
||||||
|
# using *--log-file*, since it can generate a huge stream of logs.
|
||||||
|
#
|
||||||
|
# log-level = "debug"
|
||||||
|
log-level = "warn";
|
||||||
|
|
||||||
|
# Set the log file.
|
||||||
|
# If *--log-file* is never specified, logs will be written to stderr.
|
||||||
|
# Otherwise, logs will to written to the given file, though some of the early
|
||||||
|
# logs might still be written to the stderr.
|
||||||
|
# When setting this option from the config file, it is recommended to use an absolute path.
|
||||||
|
#
|
||||||
|
# log-file = "/path/to/your/log/file"
|
||||||
|
|
||||||
|
# Show all X errors (for debugging)
|
||||||
|
# show-all-xerrors = false
|
||||||
|
|
||||||
|
# Write process ID to a file.
|
||||||
|
# write-pid-path = "/path/to/your/log/file"
|
||||||
|
|
||||||
|
# Window type settings
|
||||||
|
#
|
||||||
|
# 'WINDOW_TYPE' is one of the 15 window types defined in EWMH standard:
|
||||||
|
# "unknown", "desktop", "dock", "toolbar", "menu", "utility",
|
||||||
|
# "splash", "dialog", "normal", "dropdown_menu", "popup_menu",
|
||||||
|
# "tooltip", "notification", "combo", and "dnd".
|
||||||
|
#
|
||||||
|
# Following per window-type options are available: ::
|
||||||
|
#
|
||||||
|
# fade, shadow:::
|
||||||
|
# Controls window-type-specific shadow and fade settings.
|
||||||
|
#
|
||||||
|
# opacity:::
|
||||||
|
# Controls default opacity of the window type.
|
||||||
|
#
|
||||||
|
# focus:::
|
||||||
|
# Controls whether the window of this type is to be always considered focused.
|
||||||
|
# (By default, all window types except "normal" and "dialog" has this on.)
|
||||||
|
#
|
||||||
|
# full-shadow:::
|
||||||
|
# Controls whether shadow is drawn under the parts of the window that you
|
||||||
|
# normally won't be able to see. Useful when the window has parts of it
|
||||||
|
# transparent, and you want shadows in those areas.
|
||||||
|
#
|
||||||
|
# clip-shadow-above:::
|
||||||
|
# Controls whether shadows that would have been drawn above the window should
|
||||||
|
# be clipped. Useful for dock windows that should have no shadow painted on top.
|
||||||
|
#
|
||||||
|
# redir-ignore:::
|
||||||
|
# Controls whether this type of windows should cause screen to become
|
||||||
|
# redirected again after been unredirected. If you have unredir-if-possible
|
||||||
|
# set, and doesn't want certain window to cause unnecessary screen redirection,
|
||||||
|
# you can set this to `true`.
|
||||||
|
#
|
||||||
|
wintypes:
|
||||||
|
{
|
||||||
|
tooltip = { fade = true; shadow = true; opacity = 0.75; focus = true; full-shadow = false; };
|
||||||
|
dock = { shadow = false; clip-shadow-above = true; }
|
||||||
|
dnd = { shadow = false; }
|
||||||
|
# popup_menu = { opacity = 0.8; }
|
||||||
|
# dropdown_menu = { opacity = 0.8; }
|
||||||
|
};
|
||||||
12
modules/desktop/X11/picom/default.nix
Normal file
12
modules/desktop/X11/picom/default.nix
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
picom
|
||||||
|
];
|
||||||
|
environment.etc = {
|
||||||
|
"xdg/picom/picom.conf".source = ./config/picom.conf;
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules/desktop/X11/polybar/config/colors.ini
Normal file
7
modules/desktop/X11/polybar/config/colors.ini
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
[colors]
|
||||||
|
background = #cc303446
|
||||||
|
background-alt = #21252b
|
||||||
|
foreground = #c6d0f5
|
||||||
|
primary = #8caaee
|
||||||
|
alert = #e78284
|
||||||
|
disabled = #b5bfe2
|
||||||
218
modules/desktop/X11/polybar/config/config.ini
Normal file
218
modules/desktop/X11/polybar/config/config.ini
Normal file
@@ -0,0 +1,218 @@
|
|||||||
|
;==========================================================
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
|
||||||
|
; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
|
||||||
|
; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
|
||||||
|
; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
|
||||||
|
; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
|
||||||
|
; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
|
||||||
|
;
|
||||||
|
;
|
||||||
|
; To learn more about how to configure Polybar
|
||||||
|
; go to https://github.com/polybar/polybar
|
||||||
|
;
|
||||||
|
; The README contains a lot of information
|
||||||
|
;
|
||||||
|
;==========================================================
|
||||||
|
|
||||||
|
include-file = colors.ini
|
||||||
|
include-file = screen.ini
|
||||||
|
|
||||||
|
[module/separator]
|
||||||
|
type = custom/text
|
||||||
|
|
||||||
|
format = <label>
|
||||||
|
format-padding = 6px
|
||||||
|
|
||||||
|
label = |
|
||||||
|
|
||||||
|
[module/arch]
|
||||||
|
type = custom/text
|
||||||
|
|
||||||
|
format = <label>
|
||||||
|
|
||||||
|
label = ""
|
||||||
|
label-font = 2
|
||||||
|
label-padding-right = 5px
|
||||||
|
label-foreground = ${colors.primary}
|
||||||
|
|
||||||
|
click-left = ~/.config/polybar/disconnect.sh
|
||||||
|
|
||||||
|
[module/systray]
|
||||||
|
type = internal/tray
|
||||||
|
|
||||||
|
format-margin = 0px
|
||||||
|
tray-spacing = 5px
|
||||||
|
tray-padding = 0px
|
||||||
|
tray-size = 90%
|
||||||
|
|
||||||
|
[module/i3]
|
||||||
|
type = internal/i3
|
||||||
|
|
||||||
|
pin-workspaces = true
|
||||||
|
show-urgent = true
|
||||||
|
enable-scroll = false
|
||||||
|
|
||||||
|
format = <label-state>
|
||||||
|
|
||||||
|
label-focused = %name%
|
||||||
|
label-focused-background = ${colors.background-alt}
|
||||||
|
label-focused-underline= ${colors.primary}
|
||||||
|
label-focused-padding = 15px
|
||||||
|
|
||||||
|
label-unfocused = %name%
|
||||||
|
label-unfocused-background = ${colors.background-alt}
|
||||||
|
label-unfocused-padding = 15px
|
||||||
|
|
||||||
|
label-urgent = %name%
|
||||||
|
label-urgent-background = ${colors.alert}
|
||||||
|
label-urgent-padding = 15px
|
||||||
|
|
||||||
|
label-separator = " "
|
||||||
|
label-separator-padding = 0px
|
||||||
|
label-separator-foreground = #ffb52a
|
||||||
|
|
||||||
|
[module/filesystemprefix]
|
||||||
|
type = custom/text
|
||||||
|
|
||||||
|
format = <label>
|
||||||
|
fotmat-font = 1
|
||||||
|
format-foreground=${colors.primary}
|
||||||
|
|
||||||
|
label = " "
|
||||||
|
label-font = 2
|
||||||
|
label-padding-right = 10px
|
||||||
|
|
||||||
|
[module/filesystem]
|
||||||
|
type = internal/fs
|
||||||
|
interval = 25
|
||||||
|
|
||||||
|
mount-0 = /
|
||||||
|
label-mounted = %{F8caaee}%{F-}%percentage_used%%
|
||||||
|
label-mounted-font = 1
|
||||||
|
|
||||||
|
label-unmounted = %mountpoint% not mounted
|
||||||
|
label-unmounted-foreground = ${colors.disabled}
|
||||||
|
|
||||||
|
[module/pulseaudio]
|
||||||
|
type = internal/pulseaudio
|
||||||
|
|
||||||
|
format-volume = <label-volume>
|
||||||
|
format-volume-prefix = " "
|
||||||
|
format-volume-prefix-font = 3
|
||||||
|
format-volume-prefix-padding-right = 5px
|
||||||
|
format-volume-prefix-foreground = ${colors.primary}
|
||||||
|
|
||||||
|
label-volume = "%percentage%%"
|
||||||
|
label-volume-font = 1
|
||||||
|
|
||||||
|
label-muted = %{F#8caaee}%{F-} mute
|
||||||
|
|
||||||
|
[module/xkeyboard]
|
||||||
|
type = internal/xkeyboard
|
||||||
|
blacklist-0 = num lock
|
||||||
|
|
||||||
|
label-layout = %layout%
|
||||||
|
label-layout-foreground = ${colors.primary}
|
||||||
|
|
||||||
|
label-indicator-foreground = ${colors.background}
|
||||||
|
label-indicator-background = ${colors.primary}
|
||||||
|
|
||||||
|
[module/memory]
|
||||||
|
type = internal/memory
|
||||||
|
interval = 2
|
||||||
|
format-prefix = " "
|
||||||
|
format-prefix-font = 3
|
||||||
|
format-prefix-foreground = ${colors.primary}
|
||||||
|
label = %percentage_used:2%%
|
||||||
|
|
||||||
|
[module/cpu]
|
||||||
|
type = internal/cpu
|
||||||
|
interval = 2
|
||||||
|
format-prefix = " "
|
||||||
|
format-prefix-font = 2
|
||||||
|
format-prefix-padding-right = 8px
|
||||||
|
format-prefix-foreground = ${colors.primary}
|
||||||
|
label = %percentage%%
|
||||||
|
|
||||||
|
[module/eth]
|
||||||
|
type = internal/network
|
||||||
|
interface-type = wired
|
||||||
|
interval = 5
|
||||||
|
format-connected = <label-connected>
|
||||||
|
format-connected-prefix = " "
|
||||||
|
format-connected-prefix-font = 2
|
||||||
|
format-connected-prefix-padding-right = 8px
|
||||||
|
format-connected-prefix-foreground = ${colors.primary}
|
||||||
|
|
||||||
|
label-connected = %ifname% %local_ip%
|
||||||
|
|
||||||
|
[module/ethspeed]
|
||||||
|
type = internal/network
|
||||||
|
interface-type = wired
|
||||||
|
interval = 5
|
||||||
|
format-connected = <label-connected>
|
||||||
|
format-connected-prefix = " "
|
||||||
|
format-connected-prefix-font = 3
|
||||||
|
format-connected-prefix-padding-right = 5px
|
||||||
|
format-connected-prefix-foreground = ${colors.primary}
|
||||||
|
label-connected = %downspeed% %upspeed%
|
||||||
|
|
||||||
|
[module/pacman]
|
||||||
|
type = custom/script
|
||||||
|
exec = pacman -Syup | head -n -4 | wc -l
|
||||||
|
interval = 600
|
||||||
|
|
||||||
|
format = <label>
|
||||||
|
format-prefix = " "
|
||||||
|
format-prefix-font = 2
|
||||||
|
format-prefix-padding-right = 5px
|
||||||
|
format-prefix-foreground=${colors.primary}
|
||||||
|
|
||||||
|
[module/watchdog]
|
||||||
|
type = custom/script
|
||||||
|
exec = /etc/xdg/polybar/mailbox.sh count
|
||||||
|
interval = 30
|
||||||
|
|
||||||
|
format = <label>
|
||||||
|
#format-prefix = "✗ "
|
||||||
|
format-prefix = " "
|
||||||
|
format-prefix-font = 2
|
||||||
|
format-prefix-padding-right = 5px
|
||||||
|
format-prefix-foreground=${colors.primary}
|
||||||
|
|
||||||
|
format-fail = <label-fail>
|
||||||
|
format-fail-prefix = "✗ "
|
||||||
|
format-fail-prefix-font = 0
|
||||||
|
format-fail-prefix-foreground=${colors.alert}
|
||||||
|
|
||||||
|
click-left = /etc/xdg/polybar/mailbox.sh fetch
|
||||||
|
|
||||||
|
[module/dateprefix]
|
||||||
|
type = custom/text
|
||||||
|
|
||||||
|
format = <label>
|
||||||
|
format-foreground=${colors.primary}
|
||||||
|
|
||||||
|
label = " "
|
||||||
|
label-font = 3
|
||||||
|
label-padding-right = 5px
|
||||||
|
|
||||||
|
click-left = ~/.config/polybar/calendar.sh
|
||||||
|
|
||||||
|
[module/date]
|
||||||
|
type = internal/date
|
||||||
|
interval = 1.0
|
||||||
|
|
||||||
|
date = %a %Y-%m-%d %H:%M
|
||||||
|
date-alt = %H:%M:%S
|
||||||
|
|
||||||
|
format = <label>
|
||||||
|
|
||||||
|
label = %date%
|
||||||
|
label-padding-right = 10px
|
||||||
|
|
||||||
|
[settings]
|
||||||
|
screenchange-reload = true
|
||||||
|
pseudo-transparency = false
|
||||||
4
modules/desktop/X11/polybar/config/imap_creds.example
Normal file
4
modules/desktop/X11/polybar/config/imap_creds.example
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
_USER="jeremie.salvi@gmail.com"
|
||||||
|
_PASSWD="mystrongpasswd"
|
||||||
|
_SERVER="gmail.com"
|
||||||
|
_FOLDER="Admin"
|
||||||
35
modules/desktop/X11/polybar/config/mailbox.sh
Executable file
35
modules/desktop/X11/polybar/config/mailbox.sh
Executable file
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
cd -- "$(dirname -- "$0")"
|
||||||
|
_DIRNAME="$(pwd)"
|
||||||
|
|
||||||
|
source ~/.config/polybar/imap_creds
|
||||||
|
|
||||||
|
if [[ -n $1 ]] && [[ $1 == "count" ]]
|
||||||
|
then
|
||||||
|
_COUNT=$(curl -u "$_USER:$_PASSWD" "imaps://$_SERVER" -X "STATUS $_FOLDER (UNSEEN)" 2>/dev/null | \
|
||||||
|
sed -e 's/)\r//' -e 's/.*UNSEEN //')
|
||||||
|
printf "%s" "$_COUNT"
|
||||||
|
(( _COUNT == 0 )) && exit 0
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -n $1 ]] && [[ $1 == "fetch" ]]
|
||||||
|
then
|
||||||
|
_UNSEEN="$(curl -u \""$_USER":"$_PASSWD"\" "imaps://$_SERVER/$_FOLDER" -X "SEARCH UNSEEN" 2>/dev/null | \
|
||||||
|
sed -e "s/\\r//" -e "s/* SEARCH //" -e "s/ /,/g")"
|
||||||
|
_MAILS=$(curl -v -u "$_USER:$_PASSWD" "imaps://$_SERVER/$_FOLDER" -X "FETCH $_UNSEEN BODY.PEEK[HEADER.FIELDS (From Subject)]" 2>&1 | \
|
||||||
|
grep -E "From:|Subject:" | sed -e 's/< //' -e 's/Subject/\nSubject/')
|
||||||
|
dunstify -I ../icons/gmail.svg \
|
||||||
|
"" "$_MAILS"
|
||||||
|
printf "%s" "$_MAILS"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
Usage:
|
||||||
|
mailbox.sh count => Count unseen mails in $_FOLDER
|
||||||
|
mailbox.sh fetch => Fetch "From:" and "Subject:" from unseen mails in $_FOLDER
|
||||||
|
EOF
|
||||||
63
modules/desktop/X11/polybar/config/screen-home-nix.ini
Normal file
63
modules/desktop/X11/polybar/config/screen-home-nix.ini
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
[bar/main]
|
||||||
|
monitor = HDMI-1
|
||||||
|
|
||||||
|
width = 100%
|
||||||
|
height = 30px
|
||||||
|
radius = 0
|
||||||
|
|
||||||
|
background = ${colors.background}
|
||||||
|
foreground = ${colors.foreground}
|
||||||
|
|
||||||
|
line-size = 3px
|
||||||
|
|
||||||
|
border-size = 0pt
|
||||||
|
|
||||||
|
padding-left = 10px
|
||||||
|
padding-right = 0px
|
||||||
|
|
||||||
|
font-0 = ComicShannsMono Nerd Font:size=14;2
|
||||||
|
font-1 = ComicShannsMono Nerd Font:size=14;1
|
||||||
|
font-2 = ComicShannsMono Nerd Font:size=14;0
|
||||||
|
font-3 = DejaVuSansM Nerd Font:size=14;0
|
||||||
|
|
||||||
|
fixed-center = true
|
||||||
|
modules-left = arch separator cpu separator memory separator filesystemprefix filesystem separator eth separator ethspeed separator pulseaudio
|
||||||
|
modules-center = i3
|
||||||
|
modules-right = watchdog separator pacman separator xkeyboard separator dateprefix date systray
|
||||||
|
|
||||||
|
cursor-click = pointer
|
||||||
|
cursor-scroll = ns-resize
|
||||||
|
|
||||||
|
enable-ipc = true
|
||||||
|
|
||||||
|
[bar/alt]
|
||||||
|
monitor = HDMI-0
|
||||||
|
|
||||||
|
width = 100%
|
||||||
|
height = 30px
|
||||||
|
radius = 0
|
||||||
|
|
||||||
|
background = ${colors.background}
|
||||||
|
foreground = ${colors.foreground}
|
||||||
|
|
||||||
|
line-size = 3px
|
||||||
|
|
||||||
|
border-size = 0pt
|
||||||
|
|
||||||
|
padding-left = 10px
|
||||||
|
padding-right = 0px
|
||||||
|
|
||||||
|
font-0 = ComicShannsMono Nerd Font:size=14;2
|
||||||
|
font-1 = ComicShannsMono Nerd Font:size=14;1
|
||||||
|
font-2 = ComicShannsMono Nerd Font:size=14;0
|
||||||
|
font-3 = DejaVuSansM Nerd Font:size=14;0
|
||||||
|
|
||||||
|
fixed-center = true
|
||||||
|
modules-left = arch separator cpu separator memory separator filesystemprefix filesystem separator eth separator ethspeed separator pulseaudio
|
||||||
|
modules-center = i3
|
||||||
|
modules-right = xkeyboard separator dateprefix date
|
||||||
|
|
||||||
|
cursor-click = pointer
|
||||||
|
cursor-scroll = ns-resize
|
||||||
|
|
||||||
|
enable-ipc = true
|
||||||
31
modules/desktop/X11/polybar/config/screen-test-kvm.ini
Normal file
31
modules/desktop/X11/polybar/config/screen-test-kvm.ini
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
[bar/main]
|
||||||
|
monitor =
|
||||||
|
|
||||||
|
width = 100%
|
||||||
|
height = 30px
|
||||||
|
radius = 0
|
||||||
|
|
||||||
|
background = ${colors.background}
|
||||||
|
foreground = ${colors.foreground}
|
||||||
|
|
||||||
|
line-size = 3px
|
||||||
|
|
||||||
|
border-size = 0pt
|
||||||
|
|
||||||
|
padding-left = 10px
|
||||||
|
padding-right = 0px
|
||||||
|
|
||||||
|
font-0 = ComicShannsMono Nerd Font:size=14;2
|
||||||
|
font-1 = ComicShannsMono Nerd Font:size=14;1
|
||||||
|
font-2 = ComicShannsMono Nerd Font:size=14;0
|
||||||
|
font-3 = DejaVuSansM Nerd Font:size=14;0
|
||||||
|
|
||||||
|
fixed-center = true
|
||||||
|
modules-left = arch separator cpu separator memory separator filesystemprefix filesystem separator eth separator ethspeed separator pulseaudio
|
||||||
|
modules-center = i3
|
||||||
|
modules-right = watchdog separator pacman separator xkeyboard separator dateprefix date systray
|
||||||
|
|
||||||
|
cursor-click = pointer
|
||||||
|
cursor-scroll = ns-resize
|
||||||
|
|
||||||
|
enable-ipc = true
|
||||||
18
modules/desktop/X11/polybar/default.nix
Normal file
18
modules/desktop/X11/polybar/default.nix
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
polybarFull
|
||||||
|
];
|
||||||
|
environment.etc = {
|
||||||
|
"xdg/polybar/config.ini".source = ./config/config.ini;
|
||||||
|
"xdg/polybar/colors.ini".source = ./config/colors.ini;
|
||||||
|
"xdg/polybar/screen.ini".source = ./config/screen-${attrs.hostname}.ini;
|
||||||
|
"xdg/polybar/mailbox.sh".source = ./config/mailbox.sh;
|
||||||
|
"xdg/polybar/imap_creds.example".source = ./config/imap_creds.example;
|
||||||
|
};
|
||||||
|
}
|
||||||
32
modules/desktop/common/default.nix
Normal file
32
modules/desktop/common/default.nix
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.remmina
|
||||||
|
pkgs.mpv
|
||||||
|
pkgs.chromium
|
||||||
|
pkgs.firefox
|
||||||
|
pkgs.keepassxc
|
||||||
|
pkgs.nwg-look
|
||||||
|
pkgs.gimp
|
||||||
|
pkgs.teams-for-linux
|
||||||
|
pkgs.discord
|
||||||
|
pkgs.lxappearance
|
||||||
|
pkgs.libreoffice
|
||||||
|
pkgs.xfe
|
||||||
|
pkgs.catppuccin-gtk
|
||||||
|
pkgs.imagemagick
|
||||||
|
pkgs.gthumb
|
||||||
|
pkgs.papirus-icon-theme
|
||||||
|
pkgs.catppuccin-cursors
|
||||||
|
pkgs.catppuccin-gtk
|
||||||
|
];
|
||||||
|
fonts.packages = [
|
||||||
|
pkgs.nerd-fonts.dejavu-sans-mono
|
||||||
|
pkgs.nerd-fonts.comic-shanns-mono
|
||||||
|
pkgs.nerd-fonts.roboto-mono
|
||||||
|
pkgs.nerd-fonts.caskaydia-cove
|
||||||
|
];
|
||||||
|
}
|
||||||
54
modules/desktop/default.nix
Normal file
54
modules/desktop/default.nix
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
let
|
||||||
|
hostname = "${attrs.hostname}";
|
||||||
|
gpu = [
|
||||||
|
"home.nix"
|
||||||
|
];
|
||||||
|
## mettre le module picom hors de X11 et l'installer seulement sur les ordinateurs gpu
|
||||||
|
# l'importer dans X11 seulement si gpu
|
||||||
|
isGpu = lib.any (name: hostname == name) gpu;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[
|
||||||
|
./common
|
||||||
|
./dunst
|
||||||
|
./kitty
|
||||||
|
./rofi
|
||||||
|
./sound
|
||||||
|
./gaming
|
||||||
|
]
|
||||||
|
++
|
||||||
|
lib.optionals
|
||||||
|
(builtins.elem hostname [
|
||||||
|
"home-nix"
|
||||||
|
])
|
||||||
|
[
|
||||||
|
(import ./X11 { inherit lib pkgs isGpu; })
|
||||||
|
./printers
|
||||||
|
./gaming
|
||||||
|
./nvidia
|
||||||
|
./virt-manager
|
||||||
|
]
|
||||||
|
++
|
||||||
|
lib.optionals
|
||||||
|
(builtins.elem hostname [
|
||||||
|
"test-nix"
|
||||||
|
])
|
||||||
|
[
|
||||||
|
./X11
|
||||||
|
]
|
||||||
|
++
|
||||||
|
lib.optionals
|
||||||
|
(builtins.elem hostname [
|
||||||
|
"home-nix"
|
||||||
|
"test-nix"
|
||||||
|
])
|
||||||
|
[
|
||||||
|
./wayland
|
||||||
|
];
|
||||||
|
}
|
||||||
457
modules/desktop/dunst/config/dunstrc
Normal file
457
modules/desktop/dunst/config/dunstrc
Normal file
@@ -0,0 +1,457 @@
|
|||||||
|
[global]
|
||||||
|
### Display ###
|
||||||
|
|
||||||
|
# Which monitor should the notifications be displayed on.
|
||||||
|
monitor = 0
|
||||||
|
|
||||||
|
# Display notification on focused monitor. Possible modes are:
|
||||||
|
# mouse: follow mouse pointer
|
||||||
|
# keyboard: follow window with keyboard focus
|
||||||
|
# none: don't follow anything
|
||||||
|
#
|
||||||
|
# "keyboard" needs a window manager that exports the
|
||||||
|
# _NET_ACTIVE_WINDOW property.
|
||||||
|
# This should be the case for almost all modern window managers.
|
||||||
|
#
|
||||||
|
# If this option is set to mouse or keyboard, the monitor option
|
||||||
|
# will be ignored.
|
||||||
|
follow = none
|
||||||
|
|
||||||
|
### Geometry ###
|
||||||
|
|
||||||
|
# dynamic width from 0 to 300
|
||||||
|
# width = (0, 300)
|
||||||
|
# constant width of 300
|
||||||
|
width = (0,300)
|
||||||
|
|
||||||
|
# The maximum height of a single notification, excluding the frame.
|
||||||
|
height = 300
|
||||||
|
|
||||||
|
# Position the notification in the top right corner
|
||||||
|
origin = top-right
|
||||||
|
|
||||||
|
# Offset from the origin
|
||||||
|
offset = 10x10
|
||||||
|
|
||||||
|
# Scale factor. It is auto-detected if value is 0.
|
||||||
|
scale = 0
|
||||||
|
|
||||||
|
# Maximum number of notification (0 means no limit)
|
||||||
|
notification_limit = 20
|
||||||
|
|
||||||
|
### Progress bar ###
|
||||||
|
|
||||||
|
# Turn on the progess bar. It appears when a progress hint is passed with
|
||||||
|
# for example dunstify -h int:value:12
|
||||||
|
progress_bar = true
|
||||||
|
|
||||||
|
# Set the progress bar height. This includes the frame, so make sure
|
||||||
|
# it's at least twice as big as the frame width.
|
||||||
|
progress_bar_height = 10
|
||||||
|
|
||||||
|
# Set the frame width of the progress bar
|
||||||
|
progress_bar_frame_width = 1
|
||||||
|
|
||||||
|
# Set the minimum width for the progress bar
|
||||||
|
progress_bar_min_width = 150
|
||||||
|
|
||||||
|
# Set the maximum width for the progress bar
|
||||||
|
progress_bar_max_width = 300
|
||||||
|
|
||||||
|
# Corner radius for the progress bar. 0 disables rounded corners.
|
||||||
|
progress_bar_corner_radius = 0
|
||||||
|
|
||||||
|
# Corner radius for the icon image.
|
||||||
|
icon_corner_radius = 0
|
||||||
|
|
||||||
|
# Show how many messages are currently hidden (because of
|
||||||
|
# notification_limit).
|
||||||
|
indicate_hidden = yes
|
||||||
|
|
||||||
|
# The transparency of the window. Range: [0; 100].
|
||||||
|
# This option will only work if a compositing window manager is
|
||||||
|
# present (e.g. xcompmgr, compiz, etc.). (X11 only)
|
||||||
|
transparency = 20
|
||||||
|
|
||||||
|
# Draw a line of "separator_height" pixel height between two
|
||||||
|
# notifications.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
# If gap_size is greater than 0, this setting will be ignored.
|
||||||
|
separator_height = 2
|
||||||
|
|
||||||
|
# Padding between text and separator.
|
||||||
|
padding = 8
|
||||||
|
|
||||||
|
# Horizontal padding.
|
||||||
|
horizontal_padding = 8
|
||||||
|
|
||||||
|
# Padding between text and icon.
|
||||||
|
text_icon_padding = 0
|
||||||
|
|
||||||
|
# Defines width in pixels of frame around the notification window.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
frame_width = 2
|
||||||
|
|
||||||
|
# Defines color of the frame around the notification window.
|
||||||
|
frame_color = "#737994"
|
||||||
|
|
||||||
|
# Size of gap to display between notifications - requires a compositor.
|
||||||
|
# If value is greater than 0, separator_height will be ignored and a border
|
||||||
|
# of size frame_width will be drawn around each notification instead.
|
||||||
|
# Click events on gaps do not currently propagate to applications below.
|
||||||
|
gap_size = 5
|
||||||
|
|
||||||
|
# Define a color for the separator.
|
||||||
|
# possible values are:
|
||||||
|
# * auto: dunst tries to find a color fitting to the background;
|
||||||
|
# * foreground: use the same color as the foreground;
|
||||||
|
# * frame: use the same color as the frame;
|
||||||
|
# * anything else will be interpreted as a X color.
|
||||||
|
separator_color = frame
|
||||||
|
|
||||||
|
# Sort messages by urgency.
|
||||||
|
sort = yes
|
||||||
|
|
||||||
|
# Don't remove messages, if the user is idle (no mouse or keyboard input)
|
||||||
|
# for longer than idle_threshold seconds.
|
||||||
|
# Set to 0 to disable.
|
||||||
|
# A client can set the 'transient' hint to bypass this. See the rules
|
||||||
|
# section for how to disable this if necessary
|
||||||
|
# idle_threshold = 120
|
||||||
|
|
||||||
|
### Text ###
|
||||||
|
|
||||||
|
font = CaskaydiaCove Nerd Font 12
|
||||||
|
|
||||||
|
# The spacing between lines. If the height is smaller than the
|
||||||
|
# font height, it will get raised to the font height.
|
||||||
|
line_height = 0
|
||||||
|
|
||||||
|
# Possible values are:
|
||||||
|
# full: Allow a small subset of html markup in notifications:
|
||||||
|
# <b>bold</b>
|
||||||
|
# <i>italic</i>
|
||||||
|
# <s>strikethrough</s>
|
||||||
|
# <u>underline</u>
|
||||||
|
#
|
||||||
|
# For a complete reference see
|
||||||
|
# <https://docs.gtk.org/Pango/pango_markup.html>.
|
||||||
|
#
|
||||||
|
# strip: This setting is provided for compatibility with some broken
|
||||||
|
# clients that send markup even though it's not enabled on the
|
||||||
|
# server. Dunst will try to strip the markup but the parsing is
|
||||||
|
# simplistic so using this option outside of matching rules for
|
||||||
|
# specific applications *IS GREATLY DISCOURAGED*.
|
||||||
|
#
|
||||||
|
# no: Disable markup parsing, incoming notifications will be treated as
|
||||||
|
# plain text. Dunst will not advertise that it has the body-markup
|
||||||
|
# capability if this is set as a global setting.
|
||||||
|
#
|
||||||
|
# It's important to note that markup inside the format option will be parsed
|
||||||
|
# regardless of what this is set to.
|
||||||
|
markup = full
|
||||||
|
|
||||||
|
# The format of the message. Possible variables are:
|
||||||
|
# %a appname
|
||||||
|
# %s summary
|
||||||
|
# %b body
|
||||||
|
# %i iconname (including its path)
|
||||||
|
# %I iconname (without its path)
|
||||||
|
# %p progress value if set ([ 0%] to [100%]) or nothing
|
||||||
|
# %n progress value if set without any extra characters
|
||||||
|
# %% Literal %
|
||||||
|
# Markup is allowed
|
||||||
|
format = "<b>%s</b>\n%b"
|
||||||
|
|
||||||
|
# Alignment of message text.
|
||||||
|
# Possible values are "left", "center" and "right".
|
||||||
|
alignment = left
|
||||||
|
|
||||||
|
# Vertical alignment of message text and icon.
|
||||||
|
# Possible values are "top", "center" and "bottom".
|
||||||
|
vertical_alignment = center
|
||||||
|
|
||||||
|
# Show age of message if message is older than show_age_threshold
|
||||||
|
# seconds.
|
||||||
|
# Set to -1 to disable.
|
||||||
|
show_age_threshold = 60
|
||||||
|
|
||||||
|
# Specify where to make an ellipsis in long lines.
|
||||||
|
# Possible values are "start", "middle" and "end".
|
||||||
|
ellipsize = middle
|
||||||
|
|
||||||
|
# Ignore newlines '\n' in notifications.
|
||||||
|
ignore_newline = no
|
||||||
|
|
||||||
|
# Stack together notifications with the same content
|
||||||
|
stack_duplicates = true
|
||||||
|
|
||||||
|
# Hide the count of stacked notifications with the same content
|
||||||
|
hide_duplicate_count = false
|
||||||
|
|
||||||
|
# Display indicators for URLs (U) and actions (A).
|
||||||
|
show_indicators = yes
|
||||||
|
|
||||||
|
### Icons ###
|
||||||
|
|
||||||
|
# Recursive icon lookup. You can set a single theme, instead of having to
|
||||||
|
# define all lookup paths.
|
||||||
|
enable_recursive_icon_lookup = true
|
||||||
|
|
||||||
|
# Set icon theme (only used for recursive icon lookup)
|
||||||
|
icon_theme = oxygen
|
||||||
|
# You can also set multiple icon themes, with the leftmost one being used first.
|
||||||
|
# icon_theme = "Adwaita, breeze"
|
||||||
|
|
||||||
|
# Align icons left/right/top/off
|
||||||
|
icon_position = left
|
||||||
|
|
||||||
|
# Scale small icons up to this size, set to 0 to disable. Helpful
|
||||||
|
# for e.g. small files or high-dpi screens. In case of conflict,
|
||||||
|
# max_icon_size takes precedence over this.
|
||||||
|
min_icon_size = 32
|
||||||
|
|
||||||
|
# Scale larger icons down to this size, set to 0 to disable
|
||||||
|
max_icon_size = 64
|
||||||
|
|
||||||
|
# Paths to default icons (only neccesary when not using recursive icon lookup)
|
||||||
|
icon_path = /usr/share/icons/Papirus/16x16/status/:/usr/share/icons/gnome/Papirus/devices/
|
||||||
|
|
||||||
|
### History ###
|
||||||
|
|
||||||
|
# Should a notification popped up from history be sticky or timeout
|
||||||
|
# as if it would normally do.
|
||||||
|
sticky_history = yes
|
||||||
|
|
||||||
|
# Maximum amount of notifications kept in history
|
||||||
|
history_length = 20
|
||||||
|
|
||||||
|
### Misc/Advanced ###
|
||||||
|
|
||||||
|
# dmenu path.
|
||||||
|
dmenu = /usr/bin/dmenu -p dunst:
|
||||||
|
|
||||||
|
# Browser for opening urls in context menu.
|
||||||
|
browser = /usr/bin/xdg-open
|
||||||
|
|
||||||
|
# Always run rule-defined scripts, even if the notification is suppressed
|
||||||
|
always_run_script = true
|
||||||
|
|
||||||
|
# Define the title of the windows spawned by dunst
|
||||||
|
title = Dunst
|
||||||
|
|
||||||
|
# Define the class of the windows spawned by dunst
|
||||||
|
class = Dunst
|
||||||
|
|
||||||
|
# Define the corner radius of the notification window
|
||||||
|
# in pixel size. If the radius is 0, you have no rounded
|
||||||
|
# corners.
|
||||||
|
# The radius will be automatically lowered if it exceeds half of the
|
||||||
|
# notification height to avoid clipping text and/or icons.
|
||||||
|
corner_radius = 10
|
||||||
|
|
||||||
|
# Ignore the dbus closeNotification message.
|
||||||
|
# Useful to enforce the timeout set by dunst configuration. Without this
|
||||||
|
# parameter, an application may close the notification sent before the
|
||||||
|
# user defined timeout.
|
||||||
|
ignore_dbusclose = false
|
||||||
|
|
||||||
|
### Wayland ###
|
||||||
|
# These settings are Wayland-specific. They have no effect when using X11
|
||||||
|
|
||||||
|
# Uncomment this if you want to let notications appear under fullscreen
|
||||||
|
# applications (default: overlay)
|
||||||
|
# layer = top
|
||||||
|
|
||||||
|
# Set this to true to use X11 output on Wayland.
|
||||||
|
force_xwayland = false
|
||||||
|
|
||||||
|
### Legacy
|
||||||
|
|
||||||
|
# Use the Xinerama extension instead of RandR for multi-monitor support.
|
||||||
|
# This setting is provided for compatibility with older nVidia drivers that
|
||||||
|
# do not support RandR and using it on systems that support RandR is highly
|
||||||
|
# discouraged.
|
||||||
|
#
|
||||||
|
# By enabling this setting dunst will not be able to detect when a monitor
|
||||||
|
# is connected or disconnected which might break follow mode if the screen
|
||||||
|
# layout changes.
|
||||||
|
force_xinerama = false
|
||||||
|
|
||||||
|
### mouse
|
||||||
|
|
||||||
|
# Defines list of actions for each mouse event
|
||||||
|
# Possible values are:
|
||||||
|
# * none: Don't do anything.
|
||||||
|
# * do_action: Invoke the action determined by the action_name rule. If there is no
|
||||||
|
# such action, open the context menu.
|
||||||
|
# * open_url: If the notification has exactly one url, open it. If there are multiple
|
||||||
|
# ones, open the context menu.
|
||||||
|
# * close_current: Close current notification.
|
||||||
|
# * close_all: Close all notifications.
|
||||||
|
# * context: Open context menu for the notification.
|
||||||
|
# * context_all: Open context menu for all notifications.
|
||||||
|
# These values can be strung together for each mouse event, and
|
||||||
|
# will be executed in sequence.
|
||||||
|
mouse_left_click = close_current
|
||||||
|
mouse_middle_click = do_action, close_current
|
||||||
|
mouse_right_click = close_all
|
||||||
|
|
||||||
|
# Experimental features that may or may not work correctly. Do not expect them
|
||||||
|
# to have a consistent behaviour across releases.
|
||||||
|
[experimental]
|
||||||
|
# Calculate the dpi to use on a per-monitor basis.
|
||||||
|
# If this setting is enabled the Xft.dpi value will be ignored and instead
|
||||||
|
# dunst will attempt to calculate an appropriate dpi value for each monitor
|
||||||
|
# using the resolution and physical size. This might be useful in setups
|
||||||
|
# where there are multiple screens with very different dpi values.
|
||||||
|
per_monitor_dpi = false
|
||||||
|
|
||||||
|
|
||||||
|
[urgency_low]
|
||||||
|
# IMPORTANT: colors have to be defined in quotation marks.
|
||||||
|
# Otherwise the "#" and following would be interpreted as a comment.
|
||||||
|
background = "#303446"
|
||||||
|
foreground = "#c6d0f5"
|
||||||
|
timeout = 5
|
||||||
|
# Icon for notifications with low urgency, uncomment to enable
|
||||||
|
#default_icon = /path/to/icon
|
||||||
|
|
||||||
|
[urgency_normal]
|
||||||
|
background = "#303446"
|
||||||
|
foreground = "#c6d0f5"
|
||||||
|
timeout = 5
|
||||||
|
# Icon for notifications with normal urgency, uncomment to enable
|
||||||
|
#default_icon = /path/to/icon
|
||||||
|
|
||||||
|
[urgency_critical]
|
||||||
|
background = "#303446"
|
||||||
|
foreground = "#c6d0f5"
|
||||||
|
frame_color = "#e78284"
|
||||||
|
timeout = 20
|
||||||
|
# Icon for notifications with critical urgency, uncomment to enable
|
||||||
|
#default_icon = /path/to/icon
|
||||||
|
|
||||||
|
# Every section that isn't one of the above is interpreted as a rules to
|
||||||
|
# override settings for certain messages.
|
||||||
|
#
|
||||||
|
# Messages can be matched by
|
||||||
|
# appname (discouraged, see desktop_entry)
|
||||||
|
# body
|
||||||
|
# category
|
||||||
|
# desktop_entry
|
||||||
|
# icon
|
||||||
|
# match_transient
|
||||||
|
# msg_urgency
|
||||||
|
# stack_tag
|
||||||
|
# summary
|
||||||
|
#
|
||||||
|
# and you can override the
|
||||||
|
# background
|
||||||
|
# foreground
|
||||||
|
# format
|
||||||
|
# frame_color
|
||||||
|
# fullscreen
|
||||||
|
# new_icon
|
||||||
|
# set_stack_tag
|
||||||
|
# set_transient
|
||||||
|
# set_category
|
||||||
|
# timeout
|
||||||
|
# urgency
|
||||||
|
# icon_position
|
||||||
|
# skip_display
|
||||||
|
# history_ignore
|
||||||
|
# action_name
|
||||||
|
# word_wrap
|
||||||
|
# ellipsize
|
||||||
|
# alignment
|
||||||
|
# hide_text
|
||||||
|
#
|
||||||
|
# Shell-like globbing will get expanded.
|
||||||
|
#
|
||||||
|
# Instead of the appname filter, it's recommended to use the desktop_entry filter.
|
||||||
|
# GLib based applications export their desktop-entry name. In comparison to the appname,
|
||||||
|
# the desktop-entry won't get localized.
|
||||||
|
#
|
||||||
|
# SCRIPTING
|
||||||
|
# You can specify a script that gets run when the rule matches by
|
||||||
|
# setting the "script" option.
|
||||||
|
# The script will be called as follows:
|
||||||
|
# script appname summary body icon urgency
|
||||||
|
# where urgency can be "LOW", "NORMAL" or "CRITICAL".
|
||||||
|
#
|
||||||
|
# NOTE: It might be helpful to run dunst -print in a terminal in order
|
||||||
|
# to find fitting options for rules.
|
||||||
|
|
||||||
|
# Disable the transient hint so that idle_threshold cannot be bypassed from the
|
||||||
|
# client
|
||||||
|
#[transient_disable]
|
||||||
|
# match_transient = yes
|
||||||
|
# set_transient = no
|
||||||
|
#
|
||||||
|
# Make the handling of transient notifications more strict by making them not
|
||||||
|
# be placed in history.
|
||||||
|
#[transient_history_ignore]
|
||||||
|
# match_transient = yes
|
||||||
|
# history_ignore = yes
|
||||||
|
|
||||||
|
# fullscreen values
|
||||||
|
# show: show the notifications, regardless if there is a fullscreen window opened
|
||||||
|
# delay: displays the new notification, if there is no fullscreen window active
|
||||||
|
# If the notification is already drawn, it won't get undrawn.
|
||||||
|
# pushback: same as delay, but when switching into fullscreen, the notification will get
|
||||||
|
# withdrawn from screen again and will get delayed like a new notification
|
||||||
|
#[fullscreen_delay_everything]
|
||||||
|
# fullscreen = delay
|
||||||
|
#[fullscreen_show_critical]
|
||||||
|
# msg_urgency = critical
|
||||||
|
# fullscreen = show
|
||||||
|
|
||||||
|
#[espeak]
|
||||||
|
# summary = "*"
|
||||||
|
# script = dunst_espeak.sh
|
||||||
|
|
||||||
|
#[script-test]
|
||||||
|
# summary = "*script*"
|
||||||
|
# script = dunst_test.sh
|
||||||
|
|
||||||
|
#[ignore]
|
||||||
|
# # This notification will not be displayed
|
||||||
|
# summary = "foobar"
|
||||||
|
# skip_display = true
|
||||||
|
|
||||||
|
#[history-ignore]
|
||||||
|
# # This notification will not be saved in history
|
||||||
|
# summary = "foobar"
|
||||||
|
# history_ignore = yes
|
||||||
|
|
||||||
|
#[skip-display]
|
||||||
|
# # This notification will not be displayed, but will be included in the history
|
||||||
|
# summary = "foobar"
|
||||||
|
# skip_display = yes
|
||||||
|
|
||||||
|
#[signed_on]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = "*signed on*"
|
||||||
|
# urgency = low
|
||||||
|
#
|
||||||
|
#[signed_off]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *signed off*
|
||||||
|
# urgency = low
|
||||||
|
#
|
||||||
|
#[says]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *says*
|
||||||
|
# urgency = critical
|
||||||
|
#
|
||||||
|
#[twitter]
|
||||||
|
# appname = Pidgin
|
||||||
|
# summary = *twitter.com*
|
||||||
|
# urgency = normal
|
||||||
|
#
|
||||||
|
#[stack-volumes]
|
||||||
|
# appname = "some_volume_notifiers"
|
||||||
|
# set_stack_tag = "volume"
|
||||||
|
#
|
||||||
|
# vim: ft=cfg
|
||||||
13
modules/desktop/dunst/default.nix
Normal file
13
modules/desktop/dunst/default.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
dunst
|
||||||
|
libnotify
|
||||||
|
];
|
||||||
|
environment.etc = {
|
||||||
|
"xdg/dunst/dunstrc".source = ./config/dunstrc;
|
||||||
|
};
|
||||||
|
}
|
||||||
18
modules/desktop/gaming/default.nix
Normal file
18
modules/desktop/gaming/default.nix
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
hardware.graphics.enable32Bit = true;
|
||||||
|
programs.steam.enable = true;
|
||||||
|
programs.steam.gamescopeSession.enable = true;
|
||||||
|
programs.gamemode.enable = true;
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
vulkan-tools
|
||||||
|
lutris
|
||||||
|
wine-staging
|
||||||
|
winetricks
|
||||||
|
mangohud
|
||||||
|
protonup
|
||||||
|
];
|
||||||
|
}
|
||||||
80
modules/desktop/kitty/config/current-theme.conf
Normal file
80
modules/desktop/kitty/config/current-theme.conf
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# vim:ft=kitty
|
||||||
|
|
||||||
|
## name: Catppuccin-Frappe
|
||||||
|
## author: Pocco81 (https://github.com/Pocco81)
|
||||||
|
## license: MIT
|
||||||
|
## upstream: https://github.com/catppuccin/kitty/blob/main/frappe.conf
|
||||||
|
## blurb: Soothing pastel theme for the high-spirited!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# The basic colors
|
||||||
|
foreground #C6D0F5
|
||||||
|
background #303446
|
||||||
|
selection_foreground #303446
|
||||||
|
selection_background #F2D5CF
|
||||||
|
|
||||||
|
# Cursor colors
|
||||||
|
cursor #F2D5CF
|
||||||
|
cursor_text_color #303446
|
||||||
|
|
||||||
|
# URL underline color when hovering with mouse
|
||||||
|
url_color #F2D5CF
|
||||||
|
|
||||||
|
# Kitty window border colors
|
||||||
|
active_border_color #BABBF1
|
||||||
|
inactive_border_color #737994
|
||||||
|
bell_border_color #E5C890
|
||||||
|
|
||||||
|
# OS Window titlebar colors
|
||||||
|
wayland_titlebar_color system
|
||||||
|
macos_titlebar_color system
|
||||||
|
|
||||||
|
# Tab bar colors
|
||||||
|
active_tab_foreground #232634
|
||||||
|
active_tab_background #CA9EE6
|
||||||
|
inactive_tab_foreground #C6D0F5
|
||||||
|
inactive_tab_background #292C3C
|
||||||
|
tab_bar_background #232634
|
||||||
|
|
||||||
|
# Colors for marks (marked text in the terminal)
|
||||||
|
mark1_foreground #303446
|
||||||
|
mark1_background #BABBF1
|
||||||
|
mark2_foreground #303446
|
||||||
|
mark2_background #CA9EE6
|
||||||
|
mark3_foreground #303446
|
||||||
|
mark3_background #85C1DC
|
||||||
|
|
||||||
|
# The 16 terminal colors
|
||||||
|
|
||||||
|
# black
|
||||||
|
color0 #51576D
|
||||||
|
color8 #626880
|
||||||
|
|
||||||
|
# red
|
||||||
|
color1 #E78284
|
||||||
|
color9 #E78284
|
||||||
|
|
||||||
|
# green
|
||||||
|
color2 #A6D189
|
||||||
|
color10 #A6D189
|
||||||
|
|
||||||
|
# yellow
|
||||||
|
color3 #E5C890
|
||||||
|
color11 #E5C890
|
||||||
|
|
||||||
|
# blue
|
||||||
|
color4 #8CAAEE
|
||||||
|
color12 #8CAAEE
|
||||||
|
|
||||||
|
# magenta
|
||||||
|
color5 #F4B8E4
|
||||||
|
color13 #F4B8E4
|
||||||
|
|
||||||
|
# cyan
|
||||||
|
color6 #81C8BE
|
||||||
|
color14 #81C8BE
|
||||||
|
|
||||||
|
# white
|
||||||
|
color7 #B5BFE2
|
||||||
|
color15 #A5ADCE
|
||||||
51
modules/desktop/kitty/config/kitty.conf
Normal file
51
modules/desktop/kitty/config/kitty.conf
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# BEGIN_KITTY_THEME
|
||||||
|
# Catppuccin-Frappe
|
||||||
|
include current-theme.conf
|
||||||
|
# END_KITTY_THEME
|
||||||
|
|
||||||
|
#Fonts
|
||||||
|
font_family DejaVuSansM Nerd Font Mono
|
||||||
|
bold_font auto
|
||||||
|
italic_font auto
|
||||||
|
bold_italic_font auto
|
||||||
|
font_size 14.0
|
||||||
|
|
||||||
|
# Scroll
|
||||||
|
scrollback_lines 65635
|
||||||
|
scrollback_indicator_opacity 0.5
|
||||||
|
|
||||||
|
#Url
|
||||||
|
open_url_with firefox
|
||||||
|
underline_hyperlinks always
|
||||||
|
|
||||||
|
copy_on_select clipboard
|
||||||
|
select_by_word_characters @-./_~?&%+#!
|
||||||
|
sync_to_monitor yes
|
||||||
|
|
||||||
|
# Layout
|
||||||
|
enabled_layouts vertical
|
||||||
|
|
||||||
|
### Shortcut
|
||||||
|
# Global
|
||||||
|
map alt+up change_font_size all +2.0
|
||||||
|
map alt+down change_font_size all -2.0
|
||||||
|
map alt+= change_font_size all 0
|
||||||
|
map alt+u open_url_with_hints
|
||||||
|
map shift+up scroll_line_up
|
||||||
|
map shift+down scroll_line_down
|
||||||
|
map shift+page_up scroll_page_up
|
||||||
|
map shift+page_down scroll_page_down
|
||||||
|
mouse_map alt+middle press ungrabbed paste_from_clipboard
|
||||||
|
# Layout
|
||||||
|
map alt+s new_window
|
||||||
|
map alt+p previous_window
|
||||||
|
map alt+n next_window
|
||||||
|
# Tab
|
||||||
|
map alt+enter new_tab
|
||||||
|
map alt+left previous_tab
|
||||||
|
map alt+right next_tab
|
||||||
|
map alt+tab next_tab
|
||||||
|
map alt+t set_tab_title
|
||||||
|
# Copy paste
|
||||||
|
map ctrl+alt+c copy_to_clipboard
|
||||||
|
map ctrl+alt+v paste_from_clipboard
|
||||||
13
modules/desktop/kitty/default.nix
Normal file
13
modules/desktop/kitty/default.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
kitty
|
||||||
|
];
|
||||||
|
environment.etc = {
|
||||||
|
"xdg/kitty".source = ./config;
|
||||||
|
};
|
||||||
|
programs.starship.enable = true;
|
||||||
|
}
|
||||||
28
modules/desktop/nvidia/default.nix
Normal file
28
modules/desktop/nvidia/default.nix
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
hostname = config.networking.hostName;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = lib.mkIf (hostname == "home-nix") {
|
||||||
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
hardware = {
|
||||||
|
graphics = {
|
||||||
|
# enable opengl
|
||||||
|
enable = true;
|
||||||
|
enable32Bit = true;
|
||||||
|
};
|
||||||
|
nvidia = {
|
||||||
|
modesetting.enable = true;
|
||||||
|
powerManagement.enable = false;
|
||||||
|
powerManagement.finegrained = false;
|
||||||
|
open = true;
|
||||||
|
nvidiaSettings = true;
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.latest;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
27
modules/desktop/printers/default.nix
Normal file
27
modules/desktop/printers/default.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
let
|
||||||
|
hostname = "${attrs.hostname}";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = lib.mkIf (hostname == "home-nix") {
|
||||||
|
hardware.sane.enable = true;
|
||||||
|
services.ipp-usb.enable = true;
|
||||||
|
hardware.sane.extraBackends = [
|
||||||
|
pkgs.hplipWithPlugin
|
||||||
|
];
|
||||||
|
users.users.${attrs.username}.extraGroups = [
|
||||||
|
"scanner"
|
||||||
|
"lp"
|
||||||
|
];
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.xsane
|
||||||
|
pkgs.simple-scan
|
||||||
|
pkgs.cups
|
||||||
|
pkgs.hplip
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
28
modules/desktop/rofi/config/colors.rasi
Normal file
28
modules/desktop/rofi/config/colors.rasi
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
* {
|
||||||
|
rosewater: #f2d5cf;
|
||||||
|
flamingo: #eebebe;
|
||||||
|
pink: #f4b8e4;
|
||||||
|
mauve: #ca9ee6;
|
||||||
|
red: #e78284;
|
||||||
|
maroon: #ea999c;
|
||||||
|
peach: #ef9f76;
|
||||||
|
yellow: #e5c890;
|
||||||
|
green: #a6d189;
|
||||||
|
teal: #81c8be;
|
||||||
|
sky: #99d1db;
|
||||||
|
sapphire: #85c1dc;
|
||||||
|
blue: #8caaee;
|
||||||
|
lavender: #babbf1;
|
||||||
|
text: #c6d0f5;
|
||||||
|
subtext1: #b5bfe2;
|
||||||
|
subtext0: #a5adce;
|
||||||
|
overlay2: #949cbb;
|
||||||
|
overlay1: #838ba7;
|
||||||
|
overlay0: #737994;
|
||||||
|
surface2: #626880;
|
||||||
|
surface1: #51576d;
|
||||||
|
surface0: #414559;
|
||||||
|
base: #303446;
|
||||||
|
mantle: #292c3c;
|
||||||
|
crust: #232634;
|
||||||
|
}
|
||||||
152
modules/desktop/rofi/config/config.rasi
Normal file
152
modules/desktop/rofi/config/config.rasi
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
configuration {
|
||||||
|
modes: "window,drun,run,ssh,combi";
|
||||||
|
/* font: "CaskaydiaCove Nerd Font 12"; */
|
||||||
|
/* location: 0;*/
|
||||||
|
/* yoffset: 0;*/
|
||||||
|
/* xoffset: 0;*/
|
||||||
|
/* fixed-num-lines: true;*/
|
||||||
|
show-icons: false;
|
||||||
|
terminal: "kitty";
|
||||||
|
/* ssh-client: "ssh";*/
|
||||||
|
/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/
|
||||||
|
/* run-command: "{cmd}";*/
|
||||||
|
/* run-list-command: "";*/
|
||||||
|
/* run-shell-command: "{terminal} -e {cmd}";*/
|
||||||
|
/* window-command: "wmctrl -i -R {window}";*/
|
||||||
|
/* window-match-fields: "all";*/
|
||||||
|
/* icon-theme: "Papirus"; */
|
||||||
|
/* drun-match-fields: "name,generic,exec,categories,keywords";*/
|
||||||
|
/* drun-categories: ;*/
|
||||||
|
/* drun-show-actions: false;*/
|
||||||
|
/* drun-display-format: "{name} [<span weight='light' size='small'><i>({generic})</i></span>]";*/
|
||||||
|
/* drun-url-launcher: "xdg-open";*/
|
||||||
|
/* disable-history: false;*/
|
||||||
|
/* ignored-prefixes: "";*/
|
||||||
|
/* sort: false;*/
|
||||||
|
/* sorting-method: "normal";*/
|
||||||
|
case-sensitive: false;
|
||||||
|
/* cycle: true;*/
|
||||||
|
/* sidebar-mode: false;*/
|
||||||
|
/* hover-select: false;*/
|
||||||
|
/* eh: 1;*/
|
||||||
|
/* auto-select: false;*/
|
||||||
|
/* parse-hosts: false;*/
|
||||||
|
/* parse-known-hosts: true;*/
|
||||||
|
/* combi-modes: "window,run";*/
|
||||||
|
/* matching: "normal";*/
|
||||||
|
/* tokenize: true;*/
|
||||||
|
/* m: "-5";*/
|
||||||
|
/* filter: ;*/
|
||||||
|
/* dpi: -1;*/
|
||||||
|
/* threads: 0;*/
|
||||||
|
/* scroll-method: 0;*/
|
||||||
|
/* window-format: "{w} {c} {t}";*/
|
||||||
|
/* click-to-exit: true;*/
|
||||||
|
/* max-history-size: 25;*/
|
||||||
|
/* combi-hide-mode-prefix: false;*/
|
||||||
|
/* combi-display-format: "{mode} {text}";*/
|
||||||
|
/* matching-negate-char: '-' /* unsupported */;*/
|
||||||
|
/* cache-dir: ;*/
|
||||||
|
/* window-thumbnail: false;*/
|
||||||
|
/* drun-use-desktop-cache: false;*/
|
||||||
|
/* drun-reload-desktop-cache: false;*/
|
||||||
|
/* normalize-match: false;*/
|
||||||
|
/* steal-focus: false;*/
|
||||||
|
/* application-fallback-icon: ;*/
|
||||||
|
/* refilter-timeout-limit: 8192;*/
|
||||||
|
/* xserver-i300-workaround: false;*/
|
||||||
|
/* pid: "/run/user/0/rofi.pid";*/
|
||||||
|
/* display-window: ;*/
|
||||||
|
/* display-windowcd: ;*/
|
||||||
|
/* display-run: ;*/
|
||||||
|
/* display-ssh: ;*/
|
||||||
|
/* display-drun: ;*/
|
||||||
|
/* display-combi: ;*/
|
||||||
|
/* display-keys: ;*/
|
||||||
|
/* display-filebrowser: ;*/
|
||||||
|
/* kb-primary-paste: "Control+V,Shift+Insert";*/
|
||||||
|
/* kb-secondary-paste: "Control+v,Insert";*/
|
||||||
|
/* kb-clear-line: "Control+w";*/
|
||||||
|
/* kb-move-front: "Control+a";*/
|
||||||
|
/* kb-move-end: "Control+e";*/
|
||||||
|
/* kb-move-word-back: "Alt+b,Control+Left";*/
|
||||||
|
/* kb-move-word-forward: "Alt+f,Control+Right";*/
|
||||||
|
/* kb-move-char-back: "Left,Control+b";*/
|
||||||
|
/* kb-move-char-forward: "Right,Control+f";*/
|
||||||
|
/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/
|
||||||
|
/* kb-remove-word-forward: "Control+Alt+d";*/
|
||||||
|
/* kb-remove-char-forward: "Delete,Control+d";*/
|
||||||
|
/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/
|
||||||
|
/* kb-remove-to-eol: "Control+k";*/
|
||||||
|
/* kb-remove-to-sol: "Control+u";*/
|
||||||
|
/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/
|
||||||
|
/* kb-accept-custom: "Control+Return";*/
|
||||||
|
/* kb-accept-custom-alt: "Control+Shift+Return";*/
|
||||||
|
/* kb-accept-alt: "Shift+Return";*/
|
||||||
|
/* kb-delete-entry: "Shift+Delete";*/
|
||||||
|
/* kb-mode-next: "Shift+Right,Control+Tab";*/
|
||||||
|
/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/
|
||||||
|
/* kb-mode-complete: "Control+l";*/
|
||||||
|
/* kb-row-left: "Control+Page_Up";*/
|
||||||
|
/* kb-row-right: "Control+Page_Down";*/
|
||||||
|
/* kb-row-up: "Up,Control+p";*/
|
||||||
|
/* kb-row-down: "Down,Control+n";*/
|
||||||
|
kb-row-tab: "Control+space";
|
||||||
|
kb-element-next: "";
|
||||||
|
/* kb-element-prev: "ISO_Left_Tab";*/
|
||||||
|
/* kb-page-prev: "Page_Up";*/
|
||||||
|
/* kb-page-next: "Page_Down";*/
|
||||||
|
/* kb-row-first: "Home,KP_Home";*/
|
||||||
|
/* kb-row-last: "End,KP_End";*/
|
||||||
|
kb-row-select: "Tab";
|
||||||
|
/* kb-screenshot: "Alt+S";*/
|
||||||
|
/* kb-ellipsize: "Alt+period";*/
|
||||||
|
/* kb-toggle-case-sensitivity: "grave,dead_grave";*/
|
||||||
|
/* kb-toggle-sort: "Alt+grave";*/
|
||||||
|
/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/
|
||||||
|
/* kb-custom-1: "Alt+1";*/
|
||||||
|
/* kb-custom-2: "Alt+2";*/
|
||||||
|
/* kb-custom-3: "Alt+3";*/
|
||||||
|
/* kb-custom-4: "Alt+4";*/
|
||||||
|
/* kb-custom-5: "Alt+5";*/
|
||||||
|
/* kb-custom-6: "Alt+6";*/
|
||||||
|
/* kb-custom-7: "Alt+7";*/
|
||||||
|
/* kb-custom-8: "Alt+8";*/
|
||||||
|
/* kb-custom-9: "Alt+9";*/
|
||||||
|
/* kb-custom-10: "Alt+0";*/
|
||||||
|
/* kb-custom-11: "Alt+exclam";*/
|
||||||
|
/* kb-custom-12: "Alt+at";*/
|
||||||
|
/* kb-custom-13: "Alt+numbersign";*/
|
||||||
|
/* kb-custom-14: "Alt+dollar";*/
|
||||||
|
/* kb-custom-15: "Alt+percent";*/
|
||||||
|
/* kb-custom-16: "Alt+dead_circumflex";*/
|
||||||
|
/* kb-custom-17: "Alt+ampersand";*/
|
||||||
|
/* kb-custom-18: "Alt+asterisk";*/
|
||||||
|
/* kb-custom-19: "Alt+parenleft";*/
|
||||||
|
/* kb-select-1: "Super+1";*/
|
||||||
|
/* kb-select-2: "Super+2";*/
|
||||||
|
/* kb-select-3: "Super+3";*/
|
||||||
|
/* kb-select-4: "Super+4";*/
|
||||||
|
/* kb-select-5: "Super+5";*/
|
||||||
|
/* kb-select-6: "Super+6";*/
|
||||||
|
/* kb-select-7: "Super+7";*/
|
||||||
|
/* kb-select-8: "Super+8";*/
|
||||||
|
/* kb-select-9: "Super+9";*/
|
||||||
|
/* kb-select-10: "Super+0";*/
|
||||||
|
/* ml-row-left: "ScrollLeft";*/
|
||||||
|
/* ml-row-right: "ScrollRight";*/
|
||||||
|
/* ml-row-up: "ScrollUp";*/
|
||||||
|
/* ml-row-down: "ScrollDown";*/
|
||||||
|
/* me-select-entry: "MousePrimary";*/
|
||||||
|
/* me-accept-entry: "MouseDPrimary";*/
|
||||||
|
/* me-accept-custom: "Control+MouseDPrimary";*/
|
||||||
|
timeout {
|
||||||
|
action: "kb-cancel";
|
||||||
|
delay: 0;
|
||||||
|
}
|
||||||
|
filebrowser {
|
||||||
|
directories-first: true;
|
||||||
|
sorting-method: "name";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@theme "/etc/xdg/rofi/launcher.rasi"
|
||||||
12
modules/desktop/rofi/config/disconnect.rasi
Normal file
12
modules/desktop/rofi/config/disconnect.rasi
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
@import "launcher.rasi"
|
||||||
|
window {
|
||||||
|
width: 30%;
|
||||||
|
height: 280px;
|
||||||
|
margin: 0px;
|
||||||
|
location: center;
|
||||||
|
anchor: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
mainbox {
|
||||||
|
children: [inputbar,listview];
|
||||||
|
}
|
||||||
123
modules/desktop/rofi/config/launcher.rasi
Normal file
123
modules/desktop/rofi/config/launcher.rasi
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
/**
|
||||||
|
* ROFI Color theme
|
||||||
|
* User: Beastie
|
||||||
|
* Copyright: GPLv3
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import "/etc/xdg/rofi/colors.rasi"
|
||||||
|
|
||||||
|
* {
|
||||||
|
background-color: @transparent;
|
||||||
|
text-color: @blue;
|
||||||
|
margin: 5px;
|
||||||
|
padding: 0px;
|
||||||
|
border: 0px;
|
||||||
|
font: "CaskaydiaCove Nerd Font Propo 12";
|
||||||
|
}
|
||||||
|
|
||||||
|
window {
|
||||||
|
width: 50%;
|
||||||
|
height: 50%;
|
||||||
|
margin: 0px;
|
||||||
|
location: center;
|
||||||
|
anchor: center;
|
||||||
|
border: 2px;
|
||||||
|
border-color: @overlay0;
|
||||||
|
background-color: rgba(48, 52, 70, 0.8);
|
||||||
|
border-radius: 10px;
|
||||||
|
//background-color: green;
|
||||||
|
}
|
||||||
|
|
||||||
|
mainbox {
|
||||||
|
spacing: 0px;
|
||||||
|
border-radius: 10px;
|
||||||
|
children: [inputbar,mode-switcher,listview];
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configure inputbar */
|
||||||
|
inputbar {
|
||||||
|
background-color: transparent;
|
||||||
|
border: 1px;
|
||||||
|
border-color: @surface1;
|
||||||
|
border-radius: 10px;
|
||||||
|
children: [icon-current-entry,prompt,textbox-prompt-colon,entry,num-filtered-rows,textbox-num-sep,num-rows];
|
||||||
|
}
|
||||||
|
|
||||||
|
prompt, textbox-prompt-colon, entry, num-filtered-rows, textbox-num-sep, num-rows, icon-current-entry {
|
||||||
|
text-color: @blue;
|
||||||
|
vertical-align: 0.5;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
icon-current-entry {
|
||||||
|
size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
textbox-prompt-colon, textbox-num-sep {
|
||||||
|
expand: false;
|
||||||
|
str: " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
textbox-num-sep {
|
||||||
|
str: "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
entry {
|
||||||
|
placeholder: "Search";
|
||||||
|
placeholder-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configure mode switcher */
|
||||||
|
mode-switcher {
|
||||||
|
background-color: transparent;
|
||||||
|
border: 1px;
|
||||||
|
border-color: @surface1;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
background-color: transparent;
|
||||||
|
margin: 2px;
|
||||||
|
text-color: @blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
button selected {
|
||||||
|
background-color: @blue;
|
||||||
|
text-color: @base;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configure listview */
|
||||||
|
listview {
|
||||||
|
padding: 10px;
|
||||||
|
background-color: transparent;
|
||||||
|
border: 1px;
|
||||||
|
border-color: @surface1;
|
||||||
|
border-radius: 10px;
|
||||||
|
columns: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
element {
|
||||||
|
background-color: transparent;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
element selected {
|
||||||
|
background-color: @blue;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
element-icon {
|
||||||
|
background-color: transparent;
|
||||||
|
size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
element-text {
|
||||||
|
vertical-align: 0.5;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
element-text selected {
|
||||||
|
text-color: @base;
|
||||||
|
}
|
||||||
83
modules/desktop/rofi/default.nix
Normal file
83
modules/desktop/rofi/default.nix
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
environment = {
|
||||||
|
etc = {
|
||||||
|
"xdg/rofi".source = ./config;
|
||||||
|
"xdg/scripts/wayland-disconnect.sh" = {
|
||||||
|
text = ''
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
selected=$(printf "Lock\0icon\x1fsystem-lock-screen
|
||||||
|
Update\0icon\x1fsystem-software-update
|
||||||
|
Shutdown\0icon\x1fsystem-shutdown
|
||||||
|
Reboot\0icon\x1fsystem-reboot
|
||||||
|
Exit hyprland\0icon\x1fsystem-log-out
|
||||||
|
Reload hyprland\0icon\x1fsystem-log-out" | ${pkgs.rofi-wayland}/bin/rofi -dmenu -show-icons -i -theme /etc/xdg/rofi/disconnect.rasi -p System)
|
||||||
|
|
||||||
|
echo "$selected"
|
||||||
|
|
||||||
|
case $selected in
|
||||||
|
"Lock")
|
||||||
|
${pkgs.hyprlock}/bin/hyprlock
|
||||||
|
;;
|
||||||
|
"Update")
|
||||||
|
kitty /usr/local/share/dotfiles/scripts/update.sh
|
||||||
|
;;
|
||||||
|
"Shutdown")
|
||||||
|
systemctl poweroff
|
||||||
|
;;
|
||||||
|
"Reboot")
|
||||||
|
reboot
|
||||||
|
;;
|
||||||
|
"Exit hyprland")
|
||||||
|
hyprctl dispatch exit
|
||||||
|
;;
|
||||||
|
"Reload hyprland")
|
||||||
|
hyprctl reload
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
'';
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
"xdg/scripts/wayland-mpv.sh" = {
|
||||||
|
text = ''
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cd -- "$(dirname -- "$0")" || exit
|
||||||
|
|
||||||
|
## if not $1
|
||||||
|
if [[ -z $1 ]]
|
||||||
|
then
|
||||||
|
_LINES=$(curl "http://10.0.0.1:2013" 2>/dev/null | sed -e "s|.*<a href=\"\([^\"]*\).*|$1\1|" -e "s/.*<.*\|.*C=D.*\|.*\/\/$\|.*.nfo//" -e "/^$/d")
|
||||||
|
else
|
||||||
|
_LINES="$(curl "http://10.0.0.1:2013/$1" 2>/dev/null | sed -e "s|.*<a href=\"\([^\"]*\).*|$1\1|" -e "s/.*<.*\|.*C=D.*\|.*\/\/$\|.*.nfo//" -e "/^$/d")"
|
||||||
|
fi
|
||||||
|
|
||||||
|
_RESULT=$(${pkgs.rofi-wayland}/bin/rofi -dmenu -config /etc/xdg/rofi/config.rasi -i <<< "$_LINES")
|
||||||
|
|
||||||
|
# If no output
|
||||||
|
echo "$_RESULT"
|
||||||
|
if [[ -z $_RESULT ]]
|
||||||
|
then
|
||||||
|
echo "no output, exiting"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
#if line end vith /
|
||||||
|
if [[ "$_RESULT" =~ .*/$ ]]
|
||||||
|
then
|
||||||
|
echo "output is a directory"
|
||||||
|
./wayland-mpv.sh "$_RESULT"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
mpv "http://10.0.0.1:2013/$_RESULT"
|
||||||
|
'';
|
||||||
|
mode = "0755";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
20
modules/desktop/sound/default.nix
Normal file
20
modules/desktop/sound/default.nix
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
};
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
pavucontrol
|
||||||
|
pulseaudio # for pactl
|
||||||
|
easyeffects
|
||||||
|
];
|
||||||
|
}
|
||||||
22
modules/desktop/virt-manager/default.nix
Normal file
22
modules/desktop/virt-manager/default.nix
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
{
|
||||||
|
programs.virt-manager.enable = true;
|
||||||
|
users.groups = {
|
||||||
|
libvirtd.members = [ "${attrs.username}" ];
|
||||||
|
kvm.members = [ "${attrs.username}" ];
|
||||||
|
qemu-kvm.members = [ "${attrs.username}" ];
|
||||||
|
};
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
virt-manager
|
||||||
|
virt-viewer
|
||||||
|
spice
|
||||||
|
spice-gtk
|
||||||
|
spice-protocol
|
||||||
|
win-virtio
|
||||||
|
win-spice
|
||||||
|
];
|
||||||
|
services.spice-vdagentd.enable = true;
|
||||||
|
}
|
||||||
77
modules/desktop/wayland/config/hypr/frappe.conf
Normal file
77
modules/desktop/wayland/config/hypr/frappe.conf
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
$rosewater = rgb(f2d5cf)
|
||||||
|
$rosewaterAlpha = f2d5cf
|
||||||
|
|
||||||
|
$flamingo = rgb(eebebe)
|
||||||
|
$flamingoAlpha = eebebe
|
||||||
|
|
||||||
|
$pink = rgb(f4b8e4)
|
||||||
|
$pinkAlpha = f4b8e4
|
||||||
|
|
||||||
|
$mauve = rgb(ca9ee6)
|
||||||
|
$mauveAlpha = ca9ee6
|
||||||
|
|
||||||
|
$red = rgb(e78284)
|
||||||
|
$redAlpha = e78284
|
||||||
|
|
||||||
|
$maroon = rgb(ea999c)
|
||||||
|
$maroonAlpha = ea999c
|
||||||
|
|
||||||
|
$peach = rgb(ef9f76)
|
||||||
|
$peachAlpha = ef9f76
|
||||||
|
|
||||||
|
$yellow = rgb(e5c890)
|
||||||
|
$yellowAlpha = e5c890
|
||||||
|
|
||||||
|
$green = rgb(a6d189)
|
||||||
|
$greenAlpha = a6d189
|
||||||
|
|
||||||
|
$teal = rgb(81c8be)
|
||||||
|
$tealAlpha = 81c8be
|
||||||
|
|
||||||
|
$sky = rgb(99d1db)
|
||||||
|
$skyAlpha = 99d1db
|
||||||
|
|
||||||
|
$sapphire = rgb(85c1dc)
|
||||||
|
$sapphireAlpha = 85c1dc
|
||||||
|
|
||||||
|
$blue = rgb(8caaee)
|
||||||
|
$blueAlpha = 8caaee
|
||||||
|
|
||||||
|
$lavender = rgb(babbf1)
|
||||||
|
$lavenderAlpha = babbf1
|
||||||
|
|
||||||
|
$text = rgb(c6d0f5)
|
||||||
|
$textAlpha = c6d0f5
|
||||||
|
|
||||||
|
$subtext1 = rgb(b5bfe2)
|
||||||
|
$subtext1Alpha = b5bfe2
|
||||||
|
|
||||||
|
$subtext0 = rgb(a5adce)
|
||||||
|
$subtext0Alpha = a5adce
|
||||||
|
|
||||||
|
$overlay2 = rgb(949cbb)
|
||||||
|
$overlay2Alpha = 949cbb
|
||||||
|
|
||||||
|
$overlay1 = rgb(838ba7)
|
||||||
|
$overlay1Alpha = 838ba7
|
||||||
|
|
||||||
|
$overlay0 = rgb(737994)
|
||||||
|
$overlay0Alpha = 737994
|
||||||
|
|
||||||
|
$surface2 = rgb(626880)
|
||||||
|
$surface2Alpha = 626880
|
||||||
|
|
||||||
|
$surface1 = rgb(51576d)
|
||||||
|
$surface1Alpha = 51576d
|
||||||
|
|
||||||
|
$surface0 = rgb(414559)
|
||||||
|
$surface0Alpha = 414559
|
||||||
|
|
||||||
|
$base = rgb(303446)
|
||||||
|
$baseAlpha = 303446
|
||||||
|
|
||||||
|
$mantle = rgb(292c3c)
|
||||||
|
$mantleAlpha = 292c3c
|
||||||
|
|
||||||
|
$crust = rgb(232634)
|
||||||
|
$crustAlpha = 232634
|
||||||
327
modules/desktop/wayland/config/hypr/hyprland.conf
Normal file
327
modules/desktop/wayland/config/hypr/hyprland.conf
Normal file
@@ -0,0 +1,327 @@
|
|||||||
|
################
|
||||||
|
### MONITORS ###
|
||||||
|
################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
|
monitor=,preferred,auto,auto
|
||||||
|
|
||||||
|
workspace = 1, monitor:HDMI-A-1
|
||||||
|
workspace = 2, monitor:HDMI-A-1
|
||||||
|
workspace = 3, monitor:HDMI-A-1
|
||||||
|
workspace = 4, monitor:HDMI-A-1
|
||||||
|
workspace = 5, monitor:HDMI-A-2
|
||||||
|
workspace = 6, monitor:HDMI-A-2
|
||||||
|
workspace = 7, monitor:HDMI-A-2
|
||||||
|
workspace = 8, monitor:HDMI-A-2
|
||||||
|
|
||||||
|
###################
|
||||||
|
### MY PROGRAMS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
$terminal = kitty
|
||||||
|
source = /etc/xdg/hypr/rofi.conf
|
||||||
|
|
||||||
|
#################
|
||||||
|
### AUTOSTART ###
|
||||||
|
#################
|
||||||
|
|
||||||
|
exec-once = waybar &
|
||||||
|
exec-once = hyprpaper
|
||||||
|
|
||||||
|
#############################
|
||||||
|
### ENVIRONMENT VARIABLES ###
|
||||||
|
#############################
|
||||||
|
|
||||||
|
env = LIBVA_DRIVER_NAME,nvidia
|
||||||
|
env = __GLX_VENDOR_LIBRARY_NAME,nvidia
|
||||||
|
env = XCURSOR_SIZE,24
|
||||||
|
env = HYPRCURSOR_SIZE,24
|
||||||
|
|
||||||
|
###################
|
||||||
|
### PERMISSIONS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
# permission = /usr/(bin|local/bin)/grim, screencopy, allow
|
||||||
|
# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
|
||||||
|
# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
|
||||||
|
|
||||||
|
|
||||||
|
#####################
|
||||||
|
### LOOK AND FEEL ###
|
||||||
|
#####################
|
||||||
|
|
||||||
|
general {
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 10
|
||||||
|
|
||||||
|
border_size = 2
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
|
||||||
|
# col.active_border = rgb(81c8be) rgb(8caaee) 45deg
|
||||||
|
col.active_border = rgb(81c8be)
|
||||||
|
col.inactive_border = rgb(737994)
|
||||||
|
|
||||||
|
# Set to true enable resizing windows by clicking and dragging on borders and gaps
|
||||||
|
resize_on_border = false
|
||||||
|
|
||||||
|
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||||
|
allow_tearing = false
|
||||||
|
|
||||||
|
layout = dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#decoration
|
||||||
|
decoration {
|
||||||
|
rounding = 10
|
||||||
|
rounding_power = 2
|
||||||
|
|
||||||
|
# Change transparency of focused and unfocused windows
|
||||||
|
active_opacity = 0.95
|
||||||
|
inactive_opacity = 0.80
|
||||||
|
|
||||||
|
shadow {
|
||||||
|
enabled = false
|
||||||
|
range = 4
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#blur
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 3
|
||||||
|
passes = 1
|
||||||
|
|
||||||
|
vibrancy = 0.1696
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hypr.land/Configuring/Variables/#group
|
||||||
|
group {
|
||||||
|
col.border_active = rgb(81c8be) # Violet par exemple
|
||||||
|
col.border_inactive = rgb(737994) # Gris par exemple
|
||||||
|
col.border_locked_active = rgb(81c8be) # Rose
|
||||||
|
col.border_locked_inactive = rgb(737994) # Gris foncé
|
||||||
|
groupbar {
|
||||||
|
font_family = CaskaydiaCove Nerd Font
|
||||||
|
font_size = 16
|
||||||
|
font_weight_active = bold
|
||||||
|
font_weight_inactive = normal
|
||||||
|
indicator_gap = 5
|
||||||
|
indicator_height = 2
|
||||||
|
text_color = rgb(81c8be)
|
||||||
|
col.active = rgb(81c8be)
|
||||||
|
col.inactive = rgb(737994)
|
||||||
|
col.locked_inactive = rgb(737994)
|
||||||
|
gaps_in = 10
|
||||||
|
gaps_out = 5
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#animations
|
||||||
|
animations {
|
||||||
|
enabled = true, please :)
|
||||||
|
|
||||||
|
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||||
|
|
||||||
|
bezier = easeOutQuint,0.23,1,0.32,1
|
||||||
|
bezier = easeInOutCubic,0.65,0.05,0.36,1
|
||||||
|
bezier = linear,0,0,1,1
|
||||||
|
bezier = almostLinear,0.5,0.5,0.75,1.0
|
||||||
|
bezier = quick,0.15,0,0.1,1
|
||||||
|
|
||||||
|
animation = global, 1, 10, default
|
||||||
|
animation = border, 1, 5.39, easeOutQuint
|
||||||
|
animation = windows, 1, 4.79, easeOutQuint
|
||||||
|
animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
|
||||||
|
animation = windowsOut, 1, 1.49, linear, popin 87%
|
||||||
|
animation = fadeIn, 1, 1.73, almostLinear
|
||||||
|
animation = fadeOut, 1, 1.46, almostLinear
|
||||||
|
animation = fade, 1, 3.03, quick
|
||||||
|
animation = layers, 1, 3.81, easeOutQuint
|
||||||
|
animation = layersIn, 1, 4, easeOutQuint, fade
|
||||||
|
animation = layersOut, 1, 1.5, linear, fade
|
||||||
|
animation = fadeLayersIn, 1, 1.79, almostLinear
|
||||||
|
animation = fadeLayersOut, 1, 1.39, almostLinear
|
||||||
|
animation = workspaces, 1, 1.94, almostLinear, slidefade
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
|
||||||
|
# "Smart gaps" / "No gaps when only"
|
||||||
|
# uncomment all if you wish to use that.
|
||||||
|
# workspace = w[tv1], gapsout:0, gapsin:0
|
||||||
|
# workspace = f[1], gapsout:0, gapsin:0
|
||||||
|
# windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrule = rounding 0, floating:0, onworkspace:w[tv1]
|
||||||
|
# windowrule = bordersize 0, floating:0, onworkspace:f[1]
|
||||||
|
# windowrule = rounding 0, floating:0, onworkspace:f[1]
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||||
|
dwindle {
|
||||||
|
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||||
|
preserve_split = true # You probably want this
|
||||||
|
force_split = 2
|
||||||
|
}
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||||
|
master {
|
||||||
|
new_status = master
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#misc
|
||||||
|
misc {
|
||||||
|
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
|
||||||
|
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#############
|
||||||
|
### INPUT ###
|
||||||
|
#############
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#input
|
||||||
|
input {
|
||||||
|
kb_layout = qwerty-fr
|
||||||
|
kb_variant =
|
||||||
|
kb_model =
|
||||||
|
kb_options =
|
||||||
|
kb_rules =
|
||||||
|
|
||||||
|
follow_mouse = 1
|
||||||
|
|
||||||
|
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
|
||||||
|
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = false
|
||||||
|
}
|
||||||
|
|
||||||
|
numlock_by_default = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# https://wiki.hyprland.org/Configuring/Variables/#gestures
|
||||||
|
gestures {
|
||||||
|
workspace_swipe = false
|
||||||
|
}
|
||||||
|
|
||||||
|
# Example per-device config
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
|
||||||
|
device {
|
||||||
|
name = epic-mouse-v1
|
||||||
|
sensitivity = -0.5
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
###################
|
||||||
|
### KEYBINDINGS ###
|
||||||
|
###################
|
||||||
|
|
||||||
|
$mainMod = SUPER # Sets "Windows" key as main modifier
|
||||||
|
# Apps shortcut
|
||||||
|
bind = $mainMod, D, exec, $rofi
|
||||||
|
bind = $mainMod, L, exec, /etc/xdg/scripts/wayland-disconnect.sh
|
||||||
|
bind = $mainMod, M, exec, /etc/xdg/scripts/wayland-mpv.sh
|
||||||
|
bind = $mainMod SHIFT, P, exec, pavucontrol
|
||||||
|
bind = $mainMod SHIFT, T, exec, teams-for-linux
|
||||||
|
bind = $mainMod SHIFT, D, exec, discord
|
||||||
|
bind = $mainMod SHIFT, F, exec, firefox
|
||||||
|
bind = $mainMod SHIFT, S, exec, steam
|
||||||
|
bind = $mainMod SHIFT, L, exec, lutris
|
||||||
|
bind = ,Print, exec, grim -g "$(slurp)" - | swappy -f -
|
||||||
|
|
||||||
|
# Reload Restart config | moved to rofi
|
||||||
|
bind = $mainMod, E, exit,
|
||||||
|
|
||||||
|
# Kill focused window
|
||||||
|
bind = $mainMod, Return, exec, $terminal
|
||||||
|
|
||||||
|
# Créer un groupe
|
||||||
|
bind = SUPER, G, togglegroup
|
||||||
|
# Naviguer dans le groupe
|
||||||
|
bind = SUPER, TAB, changegroupactive
|
||||||
|
|
||||||
|
bind = $mainMod, Q, killactive,
|
||||||
|
bind = $mainMod, F, fullscreenstate, 3
|
||||||
|
bind = $mainMod, V, togglefloating,
|
||||||
|
bind = $mainMod, SPACE, togglesplit, # dwindle
|
||||||
|
|
||||||
|
# Move focus with mainMod + arrow keys
|
||||||
|
bind = $mainMod, left, movefocus, l
|
||||||
|
bind = $mainMod, right, movefocus, r
|
||||||
|
bind = $mainMod, up, movefocus, u
|
||||||
|
bind = $mainMod, down, movefocus, d
|
||||||
|
|
||||||
|
# Déplacement de fenêtres avec CONTROL + flèches
|
||||||
|
bind = $mainMod CONTROL, left, movewindow, l
|
||||||
|
bind = $mainMod CONTROL, right, movewindow, r
|
||||||
|
bind = $mainMod CONTROL, up, movewindow, u
|
||||||
|
bind = $mainMod CONTROL, down, movewindow, d
|
||||||
|
|
||||||
|
# Navigation workspace avec keypad (NumLock OFF)
|
||||||
|
bind = $mainMod, KP_End, workspace, 1
|
||||||
|
bind = $mainMod, KP_Down, workspace, 2
|
||||||
|
bind = $mainMod, KP_Next, workspace, 3
|
||||||
|
bind = $mainMod, KP_Left, workspace, 4
|
||||||
|
bind = $mainMod, KP_Begin, workspace, 5
|
||||||
|
bind = $mainMod, KP_Right, workspace, 6
|
||||||
|
bind = $mainMod, KP_Home, workspace, 7
|
||||||
|
bind = $mainMod, KP_Up, workspace, 8
|
||||||
|
|
||||||
|
# Déplacement de fenêtre avec keypad
|
||||||
|
bind = $mainMod CONTROL, KP_End, movetoworkspacesilent, 1
|
||||||
|
bind = $mainMod CONTROL, KP_Down, movetoworkspacesilent, 2
|
||||||
|
bind = $mainMod CONTROL, KP_Next, movetoworkspacesilent, 3
|
||||||
|
bind = $mainMod CONTROL, KP_Left, movetoworkspacesilent, 4
|
||||||
|
bind = $mainMod CONTROL, KP_Begin, movetoworkspacesilent, 5
|
||||||
|
bind = $mainMod CONTROL, KP_Right, movetoworkspacesilent, 6
|
||||||
|
bind = $mainMod CONTROL, KP_Home, movetoworkspacesilent, 7
|
||||||
|
bind = $mainMod CONTROL, KP_Up, movetoworkspacesilent, 8
|
||||||
|
|
||||||
|
# Example special workspace (scratchpad)
|
||||||
|
bind = $mainMod, S, togglespecialworkspace, magic
|
||||||
|
bind = $mainMod CONTROL, S, movetoworkspacesilent, special:magic
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# Laptop multimedia keys for volume and LCD brightness
|
||||||
|
bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
|
||||||
|
bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
|
||||||
|
|
||||||
|
# Requires playerctl
|
||||||
|
bindl = , XF86AudioNext, exec, playerctl next
|
||||||
|
bindl = , XF86AudioPause, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bindl = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
|
##############################
|
||||||
|
### WINDOWS AND WORKSPACES ###
|
||||||
|
##############################
|
||||||
|
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
|
||||||
|
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
|
||||||
|
|
||||||
|
# Example windowrule
|
||||||
|
# windowrule = float,class:^(kitty)$,title:^(kitty)$
|
||||||
|
|
||||||
|
# Ignore maximize requests from apps. You'll probably like this.
|
||||||
|
windowrule = suppressevent maximize, class:.*
|
||||||
|
|
||||||
|
# Fix some dragging issues with XWayland
|
||||||
|
windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0
|
||||||
|
|
||||||
|
# Supprimer la transparence pour des applications spécifiques
|
||||||
|
windowrulev2 = opacity 1.0 override,class:firefox
|
||||||
|
windowrulev2 = opacity 1.0 override,class:^(chromium)$
|
||||||
|
windowrulev2 = opacity 1.0 override,class:^(mpv)$
|
||||||
|
windowrulev2 = opacity 1.0 override,class:^(mpv)$
|
||||||
|
|
||||||
|
windowrulev2 = fullscreen,class:^(mpv)$
|
||||||
100
modules/desktop/wayland/config/hypr/hyprlock.conf
Normal file
100
modules/desktop/wayland/config/hypr/hyprlock.conf
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
source = /etc/xdg/hypr/frappe.conf
|
||||||
|
|
||||||
|
$accent = $mauve
|
||||||
|
$accentAlpha = $mauveAlpha
|
||||||
|
$font = JetBrainsMono Nerd Font
|
||||||
|
|
||||||
|
# GENERAL
|
||||||
|
general {
|
||||||
|
hide_cursor = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# BACKGROUND
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
path = screenshot
|
||||||
|
blur_passes = 2
|
||||||
|
color = $base
|
||||||
|
}
|
||||||
|
|
||||||
|
# LAYOUT
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = Layout: $LAYOUT
|
||||||
|
color = $blue
|
||||||
|
font_size = 15
|
||||||
|
font_family = $font
|
||||||
|
position = 30, -30
|
||||||
|
halign = left
|
||||||
|
valign = top
|
||||||
|
}
|
||||||
|
|
||||||
|
# TIME
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = $TIME
|
||||||
|
color = $blue
|
||||||
|
font_size = 90
|
||||||
|
font_family = $font
|
||||||
|
position = -30, 0
|
||||||
|
halign = right
|
||||||
|
valign = top
|
||||||
|
}
|
||||||
|
|
||||||
|
# DATE
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:43200000] date +"%A, %d %B %Y"
|
||||||
|
color = $sapphire
|
||||||
|
font_size = 25
|
||||||
|
font_family = $font
|
||||||
|
position = -30, -150
|
||||||
|
halign = right
|
||||||
|
valign = top
|
||||||
|
}
|
||||||
|
|
||||||
|
# FINGERPRINT
|
||||||
|
{
|
||||||
|
monitor = "";
|
||||||
|
text = "$FPRINTPROMPT";
|
||||||
|
color = "$text";
|
||||||
|
font_size = 14;
|
||||||
|
font_family = $font;
|
||||||
|
position = "0, -107";
|
||||||
|
halign = "center";
|
||||||
|
valign = "center";
|
||||||
|
}
|
||||||
|
|
||||||
|
# USER AVATAR
|
||||||
|
image {
|
||||||
|
monitor =
|
||||||
|
path = $HOME/.face
|
||||||
|
size = 100
|
||||||
|
border_color = $accent
|
||||||
|
position = 0, 75
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
# INPUT FIELD
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 300, 60
|
||||||
|
outline_thickness = 4
|
||||||
|
dots_size = 0.2
|
||||||
|
dots_spacing = 0.2
|
||||||
|
dots_center = true
|
||||||
|
outer_color = $sky
|
||||||
|
inner_color = $surface0
|
||||||
|
font_color = $teal
|
||||||
|
fade_on_empty = false
|
||||||
|
placeholder_text = <span foreground="##$textAlpha"><i> Logged in as </i><span foreground="##$tealAlpha">$USER</span></span>
|
||||||
|
hide_input = false
|
||||||
|
check_color = $accent
|
||||||
|
fail_color = $red
|
||||||
|
fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i>
|
||||||
|
capslock_color = $yellow
|
||||||
|
position = 0, -47
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
2
modules/desktop/wayland/config/hypr/hyprpaper.conf
Normal file
2
modules/desktop/wayland/config/hypr/hyprpaper.conf
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
preload = ~/Downloads/wallpaper1.jpg
|
||||||
|
wallpaper = , ~/Downloads/wallpaper1.jpg
|
||||||
26
modules/desktop/wayland/config/scripts/update.sh
Executable file
26
modules/desktop/wayland/config/scripts/update.sh
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cd ~/nixos-dotfiles || exit
|
||||||
|
|
||||||
|
# Obtenir le hash actuel
|
||||||
|
current_hash=$(nix flake metadata --json 2>/dev/null | jq -r '.locks.nodes.nixpkgs.locked.rev')
|
||||||
|
|
||||||
|
# Obtenir le hash le plus récent
|
||||||
|
latest_hash=$(nix flake metadata github:NixOS/nixpkgs/nixos-unstable --json | jq -r '.locked.rev')
|
||||||
|
|
||||||
|
# Date du commit local
|
||||||
|
local_commit_date=$(nix flake metadata --json 2>/dev/null | jq -r '.locks.nodes.nixpkgs.locked.lastModified')
|
||||||
|
local_commit_date=$(date -d "@${local_commit_date}" "+%d/%m/%Y à %H:%M")
|
||||||
|
|
||||||
|
if [ "$current_hash" != "$latest_hash" ]; then
|
||||||
|
# Nombre de commits de retard
|
||||||
|
maj_count=$(curl -s "https://api.github.com/repos/NixOS/nixpkgs/compare/${current_hash}...${latest_hash}" | jq -r '.ahead_by // 0' 2>/dev/null || echo "?")
|
||||||
|
|
||||||
|
# Date du commit distant
|
||||||
|
remote_commit_date=$(curl -s https://api.github.com/repos/NixOS/nixpkgs/commits/c87b95e25065c028d31a94f06a62927d18763fdf | jq -r '.commit.author.date')
|
||||||
|
remote_commit_date=$(date -d "${remote_commit_date}" "+%d/%m/%Y à %H:%M")
|
||||||
|
printf '{"text": "%s ", "tooltip": "Commit distant : %s\\nCommit local : %s"}' "${maj_count}" "${remote_commit_date}" "${local_commit_date}"
|
||||||
|
# Compter les commits entre les deux
|
||||||
|
else
|
||||||
|
printf '{"text": "0 ", "tooltip": "Date du dernier commit :\\n%s"}' "${local_commit_date}"
|
||||||
|
fi
|
||||||
26
modules/desktop/wayland/config/waybar/colors.css
Normal file
26
modules/desktop/wayland/config/waybar/colors.css
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
@define-color rosewater #f2d5cf;
|
||||||
|
@define-color flamingo #eebebe;
|
||||||
|
@define-color pink #f4b8e4;
|
||||||
|
@define-color mauve #ca9ee6;
|
||||||
|
@define-color red #e78284;
|
||||||
|
@define-color maroon #ea999c;
|
||||||
|
@define-color peach #ef9f76;
|
||||||
|
@define-color yellow #e5c890;
|
||||||
|
@define-color green #a6d189;
|
||||||
|
@define-color teal #81c8be;
|
||||||
|
@define-color sky #99d1db;
|
||||||
|
@define-color sapphire #85c1dc;
|
||||||
|
@define-color blue #8caaee;
|
||||||
|
@define-color lavender #babbf1;
|
||||||
|
@define-color text #c6d0f5;
|
||||||
|
@define-color subtext1 #b5bfe2;
|
||||||
|
@define-color subtext0 #a5adce;
|
||||||
|
@define-color overlay2 #949cbb;
|
||||||
|
@define-color overlay1 #838ba7;
|
||||||
|
@define-color overlay0 #737994;
|
||||||
|
@define-color surface2 #626880;
|
||||||
|
@define-color surface1 #51576d;
|
||||||
|
@define-color surface0 #414559;
|
||||||
|
@define-color base #303446;
|
||||||
|
@define-color mantle #292c3c;
|
||||||
|
@define-color crust #232634;
|
||||||
101
modules/desktop/wayland/config/waybar/config.jsonc
Normal file
101
modules/desktop/wayland/config/waybar/config.jsonc
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
"position": "top",
|
||||||
|
"reload_style_on_change": true,
|
||||||
|
"modules-left": [
|
||||||
|
"custom/logo",
|
||||||
|
"cpu",
|
||||||
|
"memory",
|
||||||
|
"disk",
|
||||||
|
"network",
|
||||||
|
"pulseaudio",
|
||||||
|
],
|
||||||
|
"modules-center": [
|
||||||
|
"hyprland/workspaces"
|
||||||
|
],
|
||||||
|
"modules-right": [
|
||||||
|
"custom/maj",
|
||||||
|
"clock",
|
||||||
|
"tray"
|
||||||
|
],
|
||||||
|
"custom/logo": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"format-icons": {
|
||||||
|
"default": " "
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cpu": {
|
||||||
|
"format": " {usage}% ",
|
||||||
|
"tooltip": true
|
||||||
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": " {percentage}% ",
|
||||||
|
"tooltip": true,
|
||||||
|
"tooltip-format": "asd: {used:0.2f} G / {total:0.2f} G"
|
||||||
|
},
|
||||||
|
"disk": {
|
||||||
|
"interval": 300,
|
||||||
|
"format": " {percentage_free}% ",
|
||||||
|
"path": "/"
|
||||||
|
},
|
||||||
|
"network": {
|
||||||
|
"format-wifi": "<span size='12000'> </span>{essid} ",
|
||||||
|
"format-ethernet": " {ipaddr} ",
|
||||||
|
"tooltip-format": " {bandwidthUpBytes} {bandwidthDownBytes}",
|
||||||
|
"format-linked": " {ifname} (No IP) ",
|
||||||
|
"format-disconnected": " Disconnected ",
|
||||||
|
"format-alt": " {signalStrength}% ",
|
||||||
|
"interval": 1
|
||||||
|
},
|
||||||
|
"pulseaudio": {
|
||||||
|
"format": "{icon}{volume}% ",
|
||||||
|
"format-muted": " 0% ",
|
||||||
|
"format-icons": {
|
||||||
|
"headphone": " ",
|
||||||
|
"hands-free": " ",
|
||||||
|
"headset": " ",
|
||||||
|
"phone": " ",
|
||||||
|
"portable": " ",
|
||||||
|
"car": " ",
|
||||||
|
"default": [
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"on-click-right": "pavucontrol -t 3",
|
||||||
|
"on-click": "pactl -- set-sink-mute 0 toggle",
|
||||||
|
"tooltip": false,
|
||||||
|
"tooltip-format": "{volume}%",
|
||||||
|
"scroll-step": 5.0,
|
||||||
|
},
|
||||||
|
"hyprland/workspaces": {
|
||||||
|
"disable-scroll": false,
|
||||||
|
"all-outputs": false,
|
||||||
|
"on-click": "activate",
|
||||||
|
"persistent-workspaces": {
|
||||||
|
"HDMI-A-1": [1, 2, 3, 4],
|
||||||
|
"HDMI-A-2": [5, 6, 7, 8],
|
||||||
|
},
|
||||||
|
"format": "{name}",
|
||||||
|
"format-icons": {
|
||||||
|
"default": "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"custom/maj": {
|
||||||
|
"exec": "/etc/xdg/scripts/update.sh",
|
||||||
|
"interval": 300,
|
||||||
|
"return-type": "json",
|
||||||
|
"format": "{icon}{text}",
|
||||||
|
"format-icons": {
|
||||||
|
"default": " "
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"clock": {
|
||||||
|
"format": " {:%a %d %H:%M} ",
|
||||||
|
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
|
||||||
|
},
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 18,
|
||||||
|
"spacing": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
116
modules/desktop/wayland/config/waybar/style.css
Normal file
116
modules/desktop/wayland/config/waybar/style.css
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
@import "colors.css";
|
||||||
|
|
||||||
|
* {
|
||||||
|
/*font-family: "Font Awesome 6 Free Solid", "Font Awesome 6 Free Regular", "Font Awesome 6 Brands Regular", "CaskaydiaCove Nerd Font Propo";*/
|
||||||
|
font-family: "CaskaydiaCove Nerd Font Propo";
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: bold;
|
||||||
|
min-height: 0px;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#waybar {
|
||||||
|
color: @text;
|
||||||
|
border: none;
|
||||||
|
box-shadow: none;
|
||||||
|
background-color: rgba(48, 52, 70, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-logo,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#disk,
|
||||||
|
#network,
|
||||||
|
#workspaces,
|
||||||
|
#custom-maj,
|
||||||
|
#pulseaudio,
|
||||||
|
#memory,
|
||||||
|
#clock,
|
||||||
|
#tray {
|
||||||
|
border-radius: 10px;
|
||||||
|
background-color: rgba(48, 52, 70, 0.8);
|
||||||
|
margin: 10px 10px 0px 10px;
|
||||||
|
border: @overlay0 2px solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-settings {
|
||||||
|
color: @pink;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-lockscreen {
|
||||||
|
color: @green;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces {
|
||||||
|
padding: 0 5px;
|
||||||
|
min-width: 152px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
background-color: @overlay0;
|
||||||
|
margin: 5px 5px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover,
|
||||||
|
#workspaces button.empty:hover,
|
||||||
|
#workspaces button.active:hover,
|
||||||
|
#workspaces button.visible:hover,
|
||||||
|
#workspaces button.urgent:hover {
|
||||||
|
background: @overlay2;
|
||||||
|
border: 0px solid @red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button label {
|
||||||
|
color: @teal;
|
||||||
|
opacity: 0;
|
||||||
|
padding: 1px 6px 0px 6px;
|
||||||
|
transition: padding 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.visible label {
|
||||||
|
opacity: 1;
|
||||||
|
padding: 1px 20px;
|
||||||
|
transition: padding 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.empty {
|
||||||
|
background: @surface0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
background: @overlay1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.visible {
|
||||||
|
background: @overlay0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.urgent {
|
||||||
|
background: @red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
color: @pink;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio {
|
||||||
|
color: @yellow;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu {
|
||||||
|
color: @blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
#memory {
|
||||||
|
color: @green;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
color: @red;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
padding: 0 8px 0 10px;
|
||||||
|
}
|
||||||
40
modules/desktop/wayland/default.nix
Normal file
40
modules/desktop/wayland/default.nix
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
programs.hyprland.enable = true;
|
||||||
|
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.wl-clipboard
|
||||||
|
pkgs.rofi-wayland
|
||||||
|
pkgs.waybar
|
||||||
|
pkgs.font-awesome
|
||||||
|
pkgs.hyprlock
|
||||||
|
pkgs.hyprpaper
|
||||||
|
pkgs.hyprpicker
|
||||||
|
# Screenshot testing
|
||||||
|
pkgs.grim
|
||||||
|
pkgs.slurp
|
||||||
|
pkgs.swappy
|
||||||
|
];
|
||||||
|
environment = {
|
||||||
|
etc = {
|
||||||
|
"xdg/hypr/frappe.conf".source = ./config/hypr/frappe.conf;
|
||||||
|
"xdg/hypr/hyprland.conf".source = ./config/hypr/hyprland.conf;
|
||||||
|
"xdg/hypr/hyprlock.conf".source = ./config/hypr/hyprlock.conf;
|
||||||
|
"xdg/hypr/hyprpaper.conf".source = ./config/hypr/hyprpaper.conf;
|
||||||
|
"xdg/hypr/rofi.conf" = {
|
||||||
|
text = ''
|
||||||
|
$rofi = ${pkgs.rofi-wayland}/bin/rofi -show drun -show-icons -config /etc/xdg/rofi/config.rasi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
"xdg/waybar".source = ./config/waybar;
|
||||||
|
"xdg/scripts/update.sh".source = ./config/scripts/update.sh;
|
||||||
|
};
|
||||||
|
# shellAliases = {
|
||||||
|
# hyprland = "hyprland --config /etc/xdg/hypr/hyprland.conf";
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
||||||
16
modules/grub/default.nix
Normal file
16
modules/grub/default.nix
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{ ... }:
|
||||||
|
{
|
||||||
|
## Configure boot loader
|
||||||
|
boot.loader = {
|
||||||
|
# Use grub without NVRAM
|
||||||
|
grub = {
|
||||||
|
enable = true;
|
||||||
|
efiSupport = true;
|
||||||
|
device = "nodev";
|
||||||
|
efiInstallAsRemovable = true;
|
||||||
|
useOSProber = true;
|
||||||
|
};
|
||||||
|
# Do not edit NVRAM
|
||||||
|
efi.canTouchEfiVariables = false;
|
||||||
|
};
|
||||||
|
}
|
||||||
26
modules/libvirt/default.nix
Normal file
26
modules/libvirt/default.nix
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
virtualisation = {
|
||||||
|
libvirtd = {
|
||||||
|
enable = true;
|
||||||
|
qemu = {
|
||||||
|
package = pkgs.qemu_full;
|
||||||
|
runAsRoot = true;
|
||||||
|
swtpm.enable = true;
|
||||||
|
ovmf = {
|
||||||
|
enable = true;
|
||||||
|
packages = [
|
||||||
|
(pkgs.OVMFFull.override {
|
||||||
|
secureBoot = true;
|
||||||
|
tpmSupport = true;
|
||||||
|
}).fd
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
spiceUSBRedirection.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
8
modules/networking/default.nix
Normal file
8
modules/networking/default.nix
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./${attrs.hostname}.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
57
modules/networking/home-nix.nix
Normal file
57
modules/networking/home-nix.nix
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
{
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
{
|
||||||
|
networking = {
|
||||||
|
hostName = "${attrs.hostname}";
|
||||||
|
interfaces.enp5s0 = {
|
||||||
|
ipv4.addresses = [
|
||||||
|
{
|
||||||
|
address = "192.168.0.2";
|
||||||
|
prefixLength = 24;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
defaultGateway = {
|
||||||
|
address = "192.168.0.254";
|
||||||
|
interface = "enp5s0";
|
||||||
|
};
|
||||||
|
nameservers = [
|
||||||
|
"10.0.0.1"
|
||||||
|
"2001:41d0:303:20da::1"
|
||||||
|
"217.182.138.218"
|
||||||
|
];
|
||||||
|
networkmanager.enable = true;
|
||||||
|
extraHosts = ''
|
||||||
|
172.18.23.4 dozzle.grandbesancon.fr
|
||||||
|
172.18.21.67 toto.grandbesancon.fr
|
||||||
|
'';
|
||||||
|
wireguard = {
|
||||||
|
interfaces = {
|
||||||
|
wg0 = {
|
||||||
|
ips = [
|
||||||
|
"fc00::2/128"
|
||||||
|
"10.0.0.2/32"
|
||||||
|
];
|
||||||
|
listenPort = 51820;
|
||||||
|
privateKeyFile = "/etc/wireguard/privatekey";
|
||||||
|
peers = [
|
||||||
|
{
|
||||||
|
publicKey = "X8D/RhwjpFYXm2DbtC0wY39TrFkdaw7RA7kHhbmOXnw=";
|
||||||
|
presharedKeyFile = "/etc/wireguard/presharedkey";
|
||||||
|
allowedIPs = [
|
||||||
|
"fc00::0/56"
|
||||||
|
"10.0.0.0/16"
|
||||||
|
];
|
||||||
|
endpoint = "[2001:41d0:303:20da::1]:51820";
|
||||||
|
persistentKeepalive = 15;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
imports = [
|
||||||
|
./openfortivpn.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
81
modules/networking/openfortivpn.nix
Normal file
81
modules/networking/openfortivpn.nix
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
openfortivpn-addroute = pkgs.writeShellScript "openfortivpn-addroute.sh" ''
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
${pkgs.iproute2}/bin/ip route add 172.16.0.0/12 dev ppp0
|
||||||
|
${pkgs.iproute2}/bin/ip route del default
|
||||||
|
${pkgs.iproute2}/bin/ip route add default via 192.168.0.254
|
||||||
|
${pkgs.coreutils-full}/bin/cat << EOF > /etc/resolv.conf
|
||||||
|
search ville.besancon
|
||||||
|
nameserver 172.18.96.1
|
||||||
|
nameserver 172.18.96.2
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
openfortivpn-delroute = pkgs.writeShellScript "openfortivpn-delroute.sh" ''
|
||||||
|
|
||||||
|
sleep 2
|
||||||
|
${pkgs.coreutils-full}/bin/cat << EOF > /etc/resolv.conf
|
||||||
|
nameserver 10.0.0.1
|
||||||
|
nameserver 2001:41d0:303:20da::1
|
||||||
|
nameserver 217.182.138.218
|
||||||
|
nameserver 9.9.9.9
|
||||||
|
EOF
|
||||||
|
'';
|
||||||
|
|
||||||
|
myMount = description: what: where: {
|
||||||
|
inherit description what where;
|
||||||
|
type = "cifs";
|
||||||
|
options = "credentials=/etc/nixos/smb-secrets,uid=beastie,gid=users";
|
||||||
|
};
|
||||||
|
myAutoMount = description: where: {
|
||||||
|
inherit description where;
|
||||||
|
requires = [ "network-online.target" ];
|
||||||
|
after = [ "network-online.service" ];
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
automountConfig = {
|
||||||
|
TimeoutIdleSec = 30;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.openfortivpn
|
||||||
|
pkgs.cifs-utils
|
||||||
|
];
|
||||||
|
systemd.services."openfortivpn" = {
|
||||||
|
enable = true;
|
||||||
|
#wantedBy = lib.mkForce [ ];
|
||||||
|
unitConfig = {
|
||||||
|
Description = "OpenFortiVPN";
|
||||||
|
After = "network-online.target";
|
||||||
|
Wants = "network-online.target systemd-networkd-wait-online.service";
|
||||||
|
Documentation = [
|
||||||
|
"man:openfortivpn(1) https://github.com/adrienverge/openfortivpn#readme https://github.com/adrienverge/openfortivpn/wiki"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "notify";
|
||||||
|
PrivateTmp = "true";
|
||||||
|
ExecStart = "${pkgs.openfortivpn}/bin/openfortivpn --no-dns";
|
||||||
|
ExecStartPost = "${openfortivpn-addroute}";
|
||||||
|
ExecStopPost = "${openfortivpn-delroute}";
|
||||||
|
#Restart = "on-failure";
|
||||||
|
#OOMScoreAdjust = "-100";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.mounts = [
|
||||||
|
(myMount "GBM Perso" "//vf-mc2-sfic06.ville.besancon/usr_s$/SALVIJER/Mes Documents"
|
||||||
|
"/gbmshares/perso"
|
||||||
|
)
|
||||||
|
(myMount "GBM Services" "//vf-mc2-sfic06.ville.besancon/08TIC" "/gbmshares/services")
|
||||||
|
];
|
||||||
|
systemd.automounts = [
|
||||||
|
(myAutoMount "GBM Perso automount" "/gbmshares/perso")
|
||||||
|
(myAutoMount "GBM Services automount" "/gbmshares/services")
|
||||||
|
];
|
||||||
|
}
|
||||||
8
modules/networking/test-kvm.nix
Normal file
8
modules/networking/test-kvm.nix
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
{
|
||||||
|
networking = {
|
||||||
|
hostName = "${attrs.hostname}";
|
||||||
|
};
|
||||||
|
}
|
||||||
70
modules/sops/default.nix
Normal file
70
modules/sops/default.nix
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
{ inputs, ... }@attrs:
|
||||||
|
let
|
||||||
|
secretsPath = builtins.toString inputs.mysecrets;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
sops = {
|
||||||
|
defaultSopsFile = "${secretsPath}/secrets.yaml";
|
||||||
|
age = {
|
||||||
|
sshKeyPaths = [
|
||||||
|
"/etc/ssh/ssh_host_ed25519_key"
|
||||||
|
];
|
||||||
|
keyFile = "/var/lib/sops-nix/key.txt";
|
||||||
|
generateKey = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
secrets = {
|
||||||
|
"ldap_password/beastie" = {
|
||||||
|
};
|
||||||
|
"users_password/beastie" = {
|
||||||
|
neededForUsers = true;
|
||||||
|
};
|
||||||
|
"ssh_keys/default_pub" = {
|
||||||
|
owner = "${attrs.username}";
|
||||||
|
mode = "0644";
|
||||||
|
path = "/home/${attrs.username}/.ssh/id_ed25519.pub";
|
||||||
|
};
|
||||||
|
"ssh_keys/default_priv" = {
|
||||||
|
owner = "${attrs.username}";
|
||||||
|
mode = "0600";
|
||||||
|
path = "/home/${attrs.username}/.ssh/id_ed25519";
|
||||||
|
};
|
||||||
|
"ssh_keys/ansible_pub" = {
|
||||||
|
owner = "${attrs.username}";
|
||||||
|
mode = "0644";
|
||||||
|
path = "/home/${attrs.username}/.ssh/id_ed25519_ansible.pub";
|
||||||
|
};
|
||||||
|
"ssh_keys/ansible_priv" = {
|
||||||
|
owner = "${attrs.username}";
|
||||||
|
mode = "0600";
|
||||||
|
path = "/home/${attrs.username}/.ssh/id_ed25519_ansible";
|
||||||
|
};
|
||||||
|
"ssh_keys/beastie_pub" = {
|
||||||
|
owner = "${attrs.username}";
|
||||||
|
mode = "0644";
|
||||||
|
path = "/home/${attrs.username}/.ssh/id_ed25519_beastie.pub";
|
||||||
|
};
|
||||||
|
"ssh_keys/beastie_priv" = {
|
||||||
|
owner = "${attrs.username}";
|
||||||
|
mode = "0600";
|
||||||
|
path = "/home/${attrs.username}/.ssh/id_ed25519_beastie";
|
||||||
|
};
|
||||||
|
"ssh_keys/gitea_semaphore_pub" = {
|
||||||
|
owner = "${attrs.username}";
|
||||||
|
mode = "0644";
|
||||||
|
path = "/home/${attrs.username}/.ssh/id_ed25519_gitea_semaphore.pub";
|
||||||
|
};
|
||||||
|
"ssh_keys/gitea_semaphore_priv" = {
|
||||||
|
owner = "${attrs.username}";
|
||||||
|
mode = "0600";
|
||||||
|
path = "/home/${attrs.username}/.ssh/id_ed25519_gitea_semaphore";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
system.activationScripts.setup-ssh-keys = {
|
||||||
|
text = ''
|
||||||
|
chown ${attrs.username}:users /home/${attrs.username}/.ssh
|
||||||
|
chmod 700 /home/${attrs.username}/.ssh
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
29
modules/ssh/default.nix
Normal file
29
modules/ssh/default.nix
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
programs.ssh.extraConfig = ''
|
||||||
|
StrictHostKeyChecking no
|
||||||
|
UserKnownHostsFile=/dev/null
|
||||||
|
|
||||||
|
Match User beastie
|
||||||
|
PreferredAuthentications publickey
|
||||||
|
IdentityFile ~/.ssh/id_ed25519_beastie
|
||||||
|
|
||||||
|
Match User nixos
|
||||||
|
PreferredAuthentications publickey,password
|
||||||
|
IdentityFile ~/.ssh/id_ed25519_beastie
|
||||||
|
|
||||||
|
Match User ansible
|
||||||
|
PreferredAuthentications publickey
|
||||||
|
IdentityFile ~/.ssh/id_ecdsa_ansible
|
||||||
|
|
||||||
|
Match User gitea Host git.unixyourbrain.org
|
||||||
|
PreferredAuthentications publickey,password
|
||||||
|
IdentityFile ~/.ssh/id_ed25519_beastie
|
||||||
|
|
||||||
|
Host S-TIC-01
|
||||||
|
KexAlgorithms=+diffie-hellman-group1-sha1
|
||||||
|
HostKeyAlgorithms=+ssh-rsa
|
||||||
|
'';
|
||||||
|
}
|
||||||
15
modules/sshd/default.nix
Normal file
15
modules/sshd/default.nix
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
PasswordAuthentication = true;
|
||||||
|
AllowUsers = null;
|
||||||
|
UseDns = true;
|
||||||
|
X11Forwarding = false;
|
||||||
|
PermitRootLogin = "no";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
31
modules/tty/config/gitprompt.sh
Normal file
31
modules/tty/config/gitprompt.sh
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
_git () {
|
||||||
|
if git branch --show-current > /dev/null 2>&1
|
||||||
|
then
|
||||||
|
_BRANCH="$(git branch --show-current)"
|
||||||
|
_MODIFIED="$(grep -o "M" <<< "$(git status --short)" | grep -c .)"
|
||||||
|
_UNTRACKED="$(grep -o "??" <<< "$(git status --short)" | grep -c .)"
|
||||||
|
_ORIGIN="$(git remote show)"
|
||||||
|
_AHEAD=$(git rev-list --left-right --count "$_BRANCH"..."$_ORIGIN"/"$_BRANCH" 2> /dev/null | cut -f 1)
|
||||||
|
_BEHIND=$(git rev-list --left-right --count "$_BRANCH"..."$_ORIGIN"/"$_BRANCH" 2> /dev/null | cut -f 2)
|
||||||
|
printf " %s " "$_BRANCH"
|
||||||
|
if (( _MODIFIED == 0 )) && (( _UNTRACKED == 0 )) && (( _AHEAD == 0 )) && (( _BEHIND == 0 ))
|
||||||
|
then
|
||||||
|
printf " "
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if (( _MODIFIED > 0 ))
|
||||||
|
then
|
||||||
|
printf "✗%s " "$_MODIFIED"
|
||||||
|
fi
|
||||||
|
if (( _UNTRACKED > 0 ))
|
||||||
|
then
|
||||||
|
printf "★%s " "$_UNTRACKED"
|
||||||
|
fi
|
||||||
|
if (( _AHEAD > 0 )); then
|
||||||
|
printf "%s " "$_AHEAD"
|
||||||
|
fi
|
||||||
|
if (( _BEHIND > 0 )); then
|
||||||
|
printf "%s " "$_BEHIND"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
26
modules/tty/config/inputrc
Normal file
26
modules/tty/config/inputrc
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
set bell-style none
|
||||||
|
set meta-flag on
|
||||||
|
set input-meta on
|
||||||
|
set convert-meta off
|
||||||
|
set output-meta on
|
||||||
|
set colored-stats on
|
||||||
|
set completion-ignore-case on
|
||||||
|
set editing-mode emacs
|
||||||
|
|
||||||
|
"\e[A":history-search-backward
|
||||||
|
"\e[B":history-search-forward
|
||||||
|
|
||||||
|
$if term=linux
|
||||||
|
"\e[1~": beginning-of-line
|
||||||
|
"\e[4~": end-of-line
|
||||||
|
$endif
|
||||||
|
|
||||||
|
$if term=xterm
|
||||||
|
"\e[1~": beginning-of-line
|
||||||
|
"\e[4~": end-of-line
|
||||||
|
$endif
|
||||||
|
|
||||||
|
$if term=rxvt-unicode
|
||||||
|
"\e[7~": beginning-of-line
|
||||||
|
"\e[8~": end-of-line
|
||||||
|
$endif
|
||||||
56
modules/tty/default.nix
Normal file
56
modules/tty/default.nix
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
let
|
||||||
|
cfg = config.services.getty;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.bash = {
|
||||||
|
promptInit = ''
|
||||||
|
[[ "$TERM" == "xterm-kitty" ]] && export TERM="xterm"
|
||||||
|
|
||||||
|
[[ -f ${pkgs.nitch}/bin/nitch ]] && nitch
|
||||||
|
|
||||||
|
if [[ -z $DISPLAY ]] && [[ $(tty) = /dev/tty1 ]]; then
|
||||||
|
hyprland --config /etc/xdg/hypr/hyprland.conf
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
## all tty autologin
|
||||||
|
#services.getty.autologinUser = "beastie";
|
||||||
|
## if all tty autologin login once
|
||||||
|
#services.getty.autologinOnce
|
||||||
|
## only tty1 autologin
|
||||||
|
systemd.services."getty@tty1" = {
|
||||||
|
overrideStrategy = "asDropin";
|
||||||
|
serviceConfig.ExecStart = [
|
||||||
|
""
|
||||||
|
"${pkgs.util-linux}/bin/agetty --login-program ${cfg.loginProgram} --autologin ${attrs.username} --noclear --keep-baud %I 115200,38400,9600 $TERM"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
systemPackages = with pkgs; [
|
||||||
|
nitch
|
||||||
|
];
|
||||||
|
etc = {
|
||||||
|
"inputrc".source = ./config/inputrc;
|
||||||
|
};
|
||||||
|
shellAliases = {
|
||||||
|
ls = "ls --color=auto";
|
||||||
|
ll = "ls --color=auto -lha";
|
||||||
|
grep = "grep --color=auto";
|
||||||
|
ip = "ip -color=auto";
|
||||||
|
vi = "nvim";
|
||||||
|
};
|
||||||
|
variables = {
|
||||||
|
EDITOR = "nvim";
|
||||||
|
BROWSER = "firefox";
|
||||||
|
HISTSIZE = 10000;
|
||||||
|
HISTTIMEFORMAT = "%F %T ";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
46
modules/user/default.nix
Normal file
46
modules/user/default.nix
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}@attrs:
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
users.users = {
|
||||||
|
${attrs.username} = {
|
||||||
|
isNormalUser = true;
|
||||||
|
createHome = true;
|
||||||
|
hashedPasswordFile = config.sops.secrets."users_password/beastie".path;
|
||||||
|
description = "Admin account";
|
||||||
|
extraGroups = [
|
||||||
|
"wheel"
|
||||||
|
"networkmanager"
|
||||||
|
"audio"
|
||||||
|
"video"
|
||||||
|
];
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAKMJ3TkEmRQcX7RQijNa2km6a2xXJk6M6FERh7C9nTJ"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
root = {
|
||||||
|
password = null;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
# https://dev.to/patimapoochai/how-to-edit-the-sudoers-file-in-nixos-with-examples-4k34
|
||||||
|
security.sudo = {
|
||||||
|
enable = true;
|
||||||
|
extraRules = [
|
||||||
|
{
|
||||||
|
users = [ "${attrs.username}" ];
|
||||||
|
host = "ALL";
|
||||||
|
runAs = "ALL:ALL";
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
command = "ALL";
|
||||||
|
options = [ "NOPASSWD" ];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
#extraConfig = "#includedir /etc/sudoers.d";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user