Modularize teams sops yazi

This commit is contained in:
DashieTM 2024-08-24 13:25:08 +02:00
parent 7730cbef59
commit c73cb37278
75 changed files with 3023 additions and 3573 deletions

View file

@ -42,3 +42,6 @@ For package lists, please check the individual modules, as the lists can be long
- nextcloud : Handles synchronization via nextcloud cmd. (requires config.sops.secrets.nextcloud) - nextcloud : Handles synchronization via nextcloud cmd. (requires config.sops.secrets.nextcloud)
- firefox: Enables and configures firefox (extensions and settings) - firefox: Enables and configures firefox (extensions and settings)
- Hyprland: Installs and configures Hyprland with various additional packages - Hyprland: Installs and configures Hyprland with various additional packages
- yazi: Installs yazi and sets custom keybinds
- teams: For the poor souls that have to use this....
- sops: Enables sops-nix

View file

@ -1,20 +1,20 @@
{ pkgs, config, lib, modulesPath, ... }: { pkgs, config, lib, modulesPath, ... }:
let let username = config.conf.username;
username = config.conf.username; in {
in imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
{ boot = {
imports = [ extraModulePackages =
(modulesPath + "/installer/scan/not-detected.nix") [ pkgs.linuxKernel.packages.linux_xanmod_latest.v4l2loopback ];
]; kernelModules = [ "v4l2loopback" ];
};
# Bootloader. # Bootloader.
boot.loader.systemd-boot = { boot.loader.systemd-boot = {
enable = true; enable = true;
configurationLimit = 5; configurationLimit = 5;
}; };
boot.loader.efi.canTouchEfiVariables = true; boot.loader.efi.canTouchEfiVariables = true;
boot.plymouth = { boot.plymouth = { enable = true; };
enable = true;
};
# Enable networking # Enable networking
networking.useDHCP = lib.mkDefault true; networking.useDHCP = lib.mkDefault true;
@ -40,9 +40,7 @@ in
options = "--delete-older-than 7d --delete-generations +5"; options = "--delete-older-than 7d --delete-generations +5";
}; };
settings = { settings = {
trusted-users = [ trusted-users = [ username ];
username
];
auto-optimise-store = true; auto-optimise-store = true;
experimental-features = "nix-command flakes"; experimental-features = "nix-command flakes";
@ -51,7 +49,8 @@ in
# Enable sound with pipewire. # Enable sound with pipewire.
hardware.pulseaudio.enable = false; hardware.pulseaudio.enable = false;
hardware.cpu.${config.conf.cpu}.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.${config.conf.cpu}.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
services.fstrim.enable = lib.mkDefault true; services.fstrim.enable = lib.mkDefault true;
security.rtkit.enable = true; security.rtkit.enable = true;
@ -68,55 +67,48 @@ in
}; };
boot.kernelPackages = config.conf.kernel; boot.kernelPackages = config.conf.kernel;
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.availableKernelModules =
boot.kernelParams = [ [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
"resume=\"PARTLABEL=SWAP\"" boot.kernelParams = [ ''resume="PARTLABEL=SWAP"'' ]
] ++ config.conf.boot_params; ++ config.conf.boot_params;
# allows user change later on # allows user change later on
users.mutableUsers = true; users.mutableUsers = true;
users.users.${username} = { users.users.${username} = {
isNormalUser = true; isNormalUser = true;
description = username; description = username;
extraGroups = [ "networkmanager" "wheel" "gamemode" "docker" "vboxusers" ]; extraGroups = [
packages = with pkgs; [ "networkmanager"
home-manager "wheel"
xdg-desktop-portal-gtk "gamemode"
"docker"
"vboxusers"
"video"
"audio"
]; ];
packages = with pkgs; [ home-manager xdg-desktop-portal-gtk ];
# this password will only last for the first login # this password will only last for the first login
# e.g. login, then change to whatever else, this also ensures no public hash is available # e.g. login, then change to whatever else, this also ensures no public hash is available
password = "firstlogin"; password = "firstlogin";
}; };
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-label/ROOT";
device = "/dev/disk/by-label/ROOT"; fsType = "btrfs";
fsType = "btrfs"; options = [ "noatime" "nodiratime" "discard" ];
options = [ };
"noatime"
"nodiratime"
"discard"
];
};
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-label/BOOT";
device = "/dev/disk/by-label/BOOT"; fsType = "vfat";
fsType = "vfat"; options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ];
options = [ "rw" "fmask=0022" "dmask=0022" "noatime" ]; };
};
fileSystems."/home" = fileSystems."/home" = {
{ device = "/dev/disk/by-label/HOME";
device = "/dev/disk/by-label/HOME"; fsType = "btrfs";
fsType = "btrfs"; options = [ "noatime" "nodiratime" "discard" ];
options = [ };
"noatime"
"nodiratime"
"discard"
];
};
swapDevices = swapDevices = [{ device = "/dev/disk/by-label/SWAP"; }];
[{ device = "/dev/disk/by-label/SWAP"; }];
} }

View file

@ -1,7 +1 @@
{ { imports = [ ./env.nix ./xkb_layout.nix ./common_hardware.nix ]; }
imports = [
./env.nix
./xkb_layout.nix
./common_hardware.nix
];
}

View file

@ -1,6 +1,7 @@
{ pkgs, config, ... }: { { pkgs, config, ... }: {
environment.variables = { environment.variables = {
GSETTINGS_SCHEMA_DIR = "${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}"; GSETTINGS_SCHEMA_DIR =
"${pkgs.glib.getSchemaPath pkgs.gsettings-desktop-schemas}";
NEOVIDE_MAXIMIZED = "0"; NEOVIDE_MAXIMIZED = "0";
GPG_TTY = "$(tty)"; GPG_TTY = "$(tty)";
EDITOR = "neovide --no-fork"; EDITOR = "neovide --no-fork";

View file

@ -10,8 +10,7 @@ let
key <AD07> { [ u, U, udiaeresis, Udiaeresis ] }; key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
}; };
''; '';
in in {
{
environment.systemPackages = [ pkgs.xorg.xkbcomp ]; environment.systemPackages = [ pkgs.xorg.xkbcomp ];
services.xserver.xkb.extraLayouts.dashie = { services.xserver.xkb.extraLayouts.dashie = {
description = "US layout with 'umlaut'"; description = "US layout with 'umlaut'";

108
flake.lock generated
View file

@ -40,11 +40,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1723920171, "lastModified": 1724273991,
"narHash": "sha256-dVCMrAe+D/5S91erhwQj2DSzHOVzAanWqoy+vPWB9DY=", "narHash": "sha256-+aUSOXKGpS5CRm1oTitgNAr05ThQNbKIXalZHl3nC6Y=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "71d49670fe246cdaff4860b0effba0ab9f163b72", "rev": "9a3161ad4c78dc420d1cbb3aae638222608c7de4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -218,11 +218,11 @@
"nixvim": "nixvim" "nixvim": "nixvim"
}, },
"locked": { "locked": {
"lastModified": 1724091718, "lastModified": 1724498597,
"narHash": "sha256-v5gx+y+cVEk1e0QsVVVhoINd3L+y2UW9XRr7/6jjORo=", "narHash": "sha256-rq3CS7CpkC5lLn/eDqmftyA2C7McUm+sYGUMpH2oJU4=",
"owner": "DashieTM", "owner": "DashieTM",
"repo": "DashVim", "repo": "DashVim",
"rev": "b319fb44c1095a42c50ec1297f051ce6311c21fa", "rev": "02e646467e4454633a7d248dfda7a7a7ecb4bf6b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -656,6 +656,27 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_9": {
"inputs": {
"systems": [
"stylix",
"systems"
]
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fromYaml": { "fromYaml": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -790,11 +811,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1723986931, "lastModified": 1724435763,
"narHash": "sha256-Fy+KEvDQ+Hc8lJAV3t6leXhZJ2ncU5/esxkgt3b8DEY=", "narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "2598861031b78aadb4da7269df7ca9ddfc3e1671", "rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -884,11 +905,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1723969407, "lastModified": 1724442134,
"narHash": "sha256-COChiv/1EsfN0aVQcDBPXqNR/T5sUXtalsuO1RGvwcY=", "narHash": "sha256-RpA3GmcBvd6DLssIWfYKdDfiumLv8w4KIhDaI+//6ls=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "1006663b6eaa55149e9a21aa8a34e41c85eb08ca", "rev": "688fe5c14781c63a1db23d4d02bf239283068ff6",
"revCount": 5103, "revCount": 5131,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@ -942,11 +963,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1721324361, "lastModified": 1724174162,
"narHash": "sha256-BiJKO0IIdnSwHQBSrEJlKlFr753urkLE48wtt0UhNG4=", "narHash": "sha256-fOOBLwil6M9QWMCiSULwjMQzrXhHXUnEqmjHX5ZHeVI=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "adbefbf49664a6c2c8bf36b6487fd31e3eb68086", "rev": "16e5c9465f04477d8a3dd48a0a26bf437986336c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1368,11 +1389,11 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1723637854, "lastModified": 1724224976,
"narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=", "narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9", "rev": "c374d94f1536013ca8e92341b540eba4c22f9c62",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1414,11 +1435,11 @@
}, },
"nixpkgs_7": { "nixpkgs_7": {
"locked": { "locked": {
"lastModified": 1723637854, "lastModified": 1724224976,
"narHash": "sha256-med8+5DSWa2UnOqtdICndjDAEjxr5D7zaIiK4pn0Q7c=", "narHash": "sha256-Z/ELQhrSd7bMzTO8r7NZgi9g5emh+aRKoCdaAv5fiO0=",
"owner": "NixOs", "owner": "NixOs",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c3aa7b8938b17aebd2deecf7be0636000d62a2b9", "rev": "c374d94f1536013ca8e92341b540eba4c22f9c62",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1488,11 +1509,11 @@
}, },
"nur": { "nur": {
"locked": { "locked": {
"lastModified": 1723992327, "lastModified": 1724486206,
"narHash": "sha256-w0DhauBqGC7zBlsm0i0IXVvhBGqBvsJPGnc5b9jffvA=", "narHash": "sha256-AktI2GKW4DnVwj3WS+mTmYjtL2qug8H46IN0Rtf4O+Q=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nur", "repo": "nur",
"rev": "adee26fc0c486560152c814b963ae27851eef658", "rev": "8feee883ff50c836e711bb7e08f91b34f31feb84",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1844,11 +1865,11 @@
}, },
"stable": { "stable": {
"locked": { "locked": {
"lastModified": 1723688146, "lastModified": 1724316499,
"narHash": "sha256-sqLwJcHYeWLOeP/XoLwAtYjr01TISlkOfz+NG82pbdg=", "narHash": "sha256-Qb9MhKBUTCfWg/wqqaxt89Xfi6qTD3XpTzQ9eXi3JmE=",
"owner": "NixOs", "owner": "NixOs",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c3d4ac725177c030b1e289015989da2ad9d56af0", "rev": "797f7dc49e0bc7fab4b57c021cdf68f595e47841",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1868,16 +1889,18 @@
"base16-tmux": "base16-tmux", "base16-tmux": "base16-tmux",
"base16-vim": "base16-vim", "base16-vim": "base16-vim",
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_9",
"gnome-shell": "gnome-shell", "gnome-shell": "gnome-shell",
"home-manager": "home-manager_3", "home-manager": "home-manager_3",
"nixpkgs": "nixpkgs_22" "nixpkgs": "nixpkgs_22",
"systems": "systems_11"
}, },
"locked": { "locked": {
"lastModified": 1723834469, "lastModified": 1724444244,
"narHash": "sha256-PkJTr9DWBQcR5Ru1fJpG80dtw0MLSxAZlKnhHHFAGIA=", "narHash": "sha256-fH1lyJvJjUhZ8xMlmiI18EZNzodDSe74rFuwlZDL0aQ=",
"owner": "danth", "owner": "danth",
"repo": "stylix", "repo": "stylix",
"rev": "6858d08ed012bc6491cc92c13142104e56badf31", "rev": "d042af478ce87e188139480922a3085218194106",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1916,6 +1939,21 @@
"type": "github" "type": "github"
} }
}, },
"systems_11": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": { "systems_2": {
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1681028828,
@ -2075,11 +2113,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1722365976, "lastModified": 1724073926,
"narHash": "sha256-Khdm+mDzYA//XaU0M+hftod+rKr5q9SSHSEuiQ0/9ow=", "narHash": "sha256-nWlUL43jOFHf+KW6Hqrx+W/r1XdXuDyb0wC/SrHsOu4=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "7f2a77ddf60390248e2a3de2261d7102a13e5341", "rev": "a08ecbbf33598924e93542f737fc6169a26b481e",
"type": "github" "type": "github"
}, },
"original": { "original": {

120
flake.nix
View file

@ -1,86 +1,82 @@
{ {
description = "Dashie dots"; description = "Dashie dots";
inputs = inputs = {
{ nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable"; stable.url = "github:NixOs/nixpkgs/nixos-24.05";
stable.url = "github:NixOs/nixpkgs/nixos-24.05";
nix-flatpak = { nix-flatpak = { url = "github:gmodena/nix-flatpak"; };
url = "github:gmodena/nix-flatpak";
};
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
};
sops-nix.url = "github:Mic92/sops-nix";
# Hyprspace = {
# url = "github:KZDKM/Hyprspace";
# inputs.hyprland.follows = "nixpkgs";
# };
nur.url = "github:nix-community/nur";
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
ironbar = {
url = "github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
};
stylix.url = "github:danth/stylix";
base16.url = "github:SenchoPens/base16.nix";
anyrun.url = "github:Kirottu/anyrun";
oxicalc.url = "github:DashieTM/OxiCalc";
oxishut.url = "github:DashieTM/OxiShut";
oxinoti.url = "github:DashieTM/OxiNoti";
oxidash.url = "github:DashieTM/OxiDash";
oxipaste.url = "github:DashieTM/OxiPaste";
hyprdock.url = "github:DashieTM/hyprdock";
reset.url = "github:Xetibo/ReSet";
reset-plugins.url = "github:Xetibo/ReSet-Plugins";
dashvim = {
url = "github:DashieTM/DashVim";
inputs.nixpkgs.follows = "nixpkgs";
inputs.base16.follows = "base16";
};
}; };
sops-nix.url = "github:Mic92/sops-nix";
# Hyprspace = {
# url = "github:KZDKM/Hyprspace";
# inputs.hyprland.follows = "nixpkgs";
# };
nur.url = "github:nix-community/nur";
hyprland.url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
ironbar = {
url =
"github:JakeStanger/ironbar?ref=3a1c60442382f970cdb7669814b6ef3594d9f048";
};
stylix.url = "github:danth/stylix";
base16.url = "github:SenchoPens/base16.nix";
anyrun.url = "github:Kirottu/anyrun";
oxicalc.url = "github:DashieTM/OxiCalc";
oxishut.url = "github:DashieTM/OxiShut";
oxinoti.url = "github:DashieTM/OxiNoti";
oxidash.url = "github:DashieTM/OxiDash";
oxipaste.url = "github:DashieTM/OxiPaste";
hyprdock.url = "github:DashieTM/hyprdock";
reset.url = "github:Xetibo/ReSet";
reset-plugins.url = "github:Xetibo/ReSet-Plugins";
dashvim = {
url = "github:DashieTM/DashVim";
inputs.nixpkgs.follows = "nixpkgs";
inputs.base16.follows = "base16";
};
};
outputs = { ... }@inputs: outputs = { ... }@inputs:
let let
stable = import inputs.stable { stable = import inputs.stable {
system = "x86_64-linux"; system = "x86_64-linux";
config = { config = { allowUnfree = true; };
allowUnfree = true;
};
}; };
pkgs = import inputs.nixpkgs { pkgs = import inputs.nixpkgs {
system = "x86_64-linux"; system = "x86_64-linux";
overlays = [ overlays = [ inputs.nur.overlay ];
inputs.nur.overlay
];
config = { config = {
permittedInsecurePackages = [ "olm-3.2.16" ];
allowUnfree = true; allowUnfree = true;
}; };
}; };
dashielib = import ./lib { inherit inputs pkgs; }; dashielib = import ./lib { inherit inputs pkgs; };
in in {
{ nixosConfigurations =
nixosConfigurations = (dashielib.build_systems [ "marmo" "overheating" "spaceship" ]) // { (dashielib.build_systems [ "marmo" "overheating" "spaceship" ]) // {
server = inputs.stable.lib.nixosSystem { server = inputs.stable.lib.nixosSystem {
specialArgs = { specialArgs = {
inherit inputs; pkgs = stable; inherit inputs;
pkgs = stable;
};
modules = [
inputs.sops-nix.nixosModules.sops
inputs.dashvim.nixosModules.dashvim
./hardware/server/configuration.nix
];
}; };
modules = [
inputs.sops-nix.nixosModules.sops
inputs.dashvim.nixosModules.dashvim
./hardware/server/configuration.nix
];
}; };
};
}; };
nixConfig = { nixConfig = {

View file

@ -1,7 +1,5 @@
{ config, ... }: { { config, ... }: {
imports = [ imports = [ ../../modules ];
../../modules
];
# variables for system # variables for system
conf = { conf = {
monitor = "DP-1"; monitor = "DP-1";
@ -22,17 +20,13 @@
amdgpu.enable = true; amdgpu.enable = true;
kde_connect.enable = true; kde_connect.enable = true;
xone.enable = true; xone.enable = true;
greetd = { greetd = { resolution = "3440x1440@180"; };
resolution = "3440x1440@180";
};
nextcloud = { nextcloud = {
synclist = [ synclist = [{
{ name = "pw_sync";
name = "pw_sync"; remote = "/PWs";
remote = "/PWs"; local = "/home/${config.conf.username}/Music";
local = "/home/${config.conf.username}/Music"; }];
}
];
}; };
}; };
} }

View file

@ -1,15 +1,14 @@
{ config, ... }: { { config, ... }: {
imports = [ imports = [ ../../modules ];
../../modules
];
conf = { conf = {
monitor = "eDP-1"; monitor = "eDP-1";
scale = "2.0"; scale = "2.0";
hostname = "overheating"; hostname = "overheating";
boot_params = [ "rtc_cmos.use_acpi_alarm=1" ]; boot_params = [ "rtc_cmos.use_acpi_alarm=1" ];
ironbar.modules = [ ironbar.modules = [{
{ type = "upower"; class = "memory-usage"; } type = "upower";
]; class = "memory-usage";
}];
}; };
mods = { mods = {
stylix.colorscheme = "catppuccin-mocha"; stylix.colorscheme = "catppuccin-mocha";
@ -27,9 +26,7 @@
kde_connect.enable = true; kde_connect.enable = true;
bluetooth.enable = true; bluetooth.enable = true;
acpid.enable = true; acpid.enable = true;
greetd = { greetd = { resolution = "3440x1440@180"; };
resolution = "3440x1440@180";
};
nextcloud = { nextcloud = {
synclist = [ synclist = [
{ {

View file

@ -12,9 +12,8 @@ let
echo kernel/firmware/acpi/ssdt6.aml | bsdcpio -v -o -H newc -R 0:0 > $out/lenotrolli-ssdt.img echo kernel/firmware/acpi/ssdt6.aml | bsdcpio -v -o -H newc -R 0:0 > $out/lenotrolli-ssdt.img
''; '';
}; };
in
{ in {
boot.kernelParams = [ "mem_sleep_default=deep" ]; boot.kernelParams = [ "mem_sleep_default=deep" ];
boot.initrd.prepend = [ "${patched_ssdt}/lenotrolli-ssdt.img" ]; boot.initrd.prepend = [ "${patched_ssdt}/lenotrolli-ssdt.img" ];
} }

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, ... }: {
{
hardware.firmware = [ hardware.firmware = [
( (
# lenovo is such a good manufacturer!!1!11! # lenovo is such a good manufacturer!!1!11!
@ -12,7 +11,6 @@
cp ${./firmware/TAS2XXX38BB.bin} $out/lib/firmware/TAS2XXX38BB.bin cp ${./firmware/TAS2XXX38BB.bin} $out/lib/firmware/TAS2XXX38BB.bin
cp ${./firmware/TIAS2781RCA4.bin} $out/lib/firmware/TIAS2781RCA4.bin cp ${./firmware/TIAS2781RCA4.bin} $out/lib/firmware/TIAS2781RCA4.bin
''; '';
} })
)
]; ];
} }

View file

@ -1,9 +1,5 @@
{ {
# special hardware modules # special hardware modules
# mostly to fix firmare and dsts # mostly to fix firmare and dsts
imports = imports = [ ./dsdt.nix ./firmware.nix ];
[
./dsdt.nix
./firmware.nix
];
} }

View file

@ -16,8 +16,7 @@ let
add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Origin *;
return 200 '${builtins.toJSON data}'; return 200 '${builtins.toJSON data}';
''; '';
in in {
{
networking.hostName = "server"; networking.hostName = "server";
networking.domain = "dashie.org"; networking.domain = "dashie.org";
imports = [ imports = [
@ -45,9 +44,7 @@ in
pkgs.ntfs3g pkgs.ntfs3g
pkgs.rsync pkgs.rsync
]; ];
openssh.authorizedKeys.keyFiles = [ openssh.authorizedKeys.keyFiles = [ /home/dashie/server.pub ];
/home/dashie/server.pub
];
}; };
services.openssh = { services.openssh = {
@ -68,28 +65,25 @@ in
enable_registration_without_verification = true; enable_registration_without_verification = true;
suppress_key_server_warning = true; suppress_key_server_warning = true;
max_upload_size = "1G"; max_upload_size = "1G";
listeners = [ listeners = [{
{ port = 8008;
port = 8008; bind_addresses = [ "::1" ];
bind_addresses = [ "::1" ]; type = "http";
type = "http"; tls = false;
tls = false; x_forwarded = true;
x_forwarded = true; resources = [{
resources = [ names = [ "client" "federation" ];
{ compress = true;
names = [ "client" "federation" ]; }];
compress = true; }];
}
];
}
];
}; };
services.mautrix-whatsapp-dashie.settings = { services.mautrix-whatsapp-dashie.settings = {
appservice = { appservice = {
id = "whatsapp"; id = "whatsapp";
database = { database = {
type = "postgres"; type = "postgres";
uri = "postgresql:///mautrix_whatsapp?host=/run/postgresql&sslmode=disable&user=mautrix_whatsapp&password=${mautrix_whatsapp_pw}"; uri =
"postgresql:///mautrix_whatsapp?host=/run/postgresql&sslmode=disable&user=mautrix_whatsapp&password=${mautrix_whatsapp_pw}";
}; };
}; };
bridge = { bridge = {
@ -98,7 +92,8 @@ in
default = true; default = true;
required = true; required = true;
}; };
displayname_template = "{{if .BusinessName}}{{.BusinessName}}{{else if .PushName}}{{.PushName}}{{else}}{{.JID}}{{end}}"; displayname_template =
"{{if .BusinessName}}{{.BusinessName}}{{else if .PushName}}{{.PushName}}{{else}}{{.JID}}{{end}}";
permissions = { permissions = {
"@fabio.lenherr:matrix.org" = "admin"; "@fabio.lenherr:matrix.org" = "admin";
"@dashie:matrix.dashie.org" = "admin"; "@dashie:matrix.dashie.org" = "admin";
@ -110,7 +105,8 @@ in
id = "signal"; id = "signal";
database = { database = {
type = "postgres"; type = "postgres";
uri = "postgresql:///mautrix_signal?host=/run/postgresql&sslmode=disable&user=mautrix_signal&password=${mautrix_signal_pw}"; uri =
"postgresql:///mautrix_signal?host=/run/postgresql&sslmode=disable&user=mautrix_signal&password=${mautrix_signal_pw}";
}; };
}; };
bridge = { bridge = {
@ -119,7 +115,8 @@ in
default = true; default = true;
required = true; required = true;
}; };
displayname_template = "{{or .ProfileName .PhoneNumber \"Unknown user\"}}"; displayname_template =
''{{or .ProfileName .PhoneNumber "Unknown user"}}'';
permissions = { permissions = {
"@fabio.lenherr:matrix.org" = "admin"; "@fabio.lenherr:matrix.org" = "admin";
"@dashie:matrix.dashie.org" = "admin"; "@dashie:matrix.dashie.org" = "admin";
@ -131,11 +128,13 @@ in
id = "discord"; id = "discord";
database = { database = {
type = "postgres"; type = "postgres";
uri = "postgresql:///mautrix_discord?host=/run/postgresql&sslmode=disable&user=mautrix_discord&password=${mautrix_discord_pw}"; uri =
"postgresql:///mautrix_discord?host=/run/postgresql&sslmode=disable&user=mautrix_discord&password=${mautrix_discord_pw}";
}; };
}; };
bridge = { bridge = {
displayname_template = "{{or .GlobalName .Username}}{{if .Bot}} (bot){{end}}"; displayname_template =
"{{or .GlobalName .Username}}{{if .Bot}} (bot){{end}}";
permissions = { permissions = {
"@fabio.lenherr:matrix.org" = "admin"; "@fabio.lenherr:matrix.org" = "admin";
"@dashie:matrix.dashie.org" = "admin"; "@dashie:matrix.dashie.org" = "admin";
@ -154,7 +153,12 @@ in
enableACME = true; enableACME = true;
root = "/var/www/dashie.org/"; root = "/var/www/dashie.org/";
}; };
security.acme.certs."dashie.org".extraDomainNames = [ "cloud.dashie.org" "matrix.dashie.org" "git.dashie.org" "navi.dashie.org" ]; security.acme.certs."dashie.org".extraDomainNames = [
"cloud.dashie.org"
"matrix.dashie.org"
"git.dashie.org"
"navi.dashie.org"
];
services.nginx.virtualHosts."cloud.dashie.org" = { services.nginx.virtualHosts."cloud.dashie.org" = {
addSSL = true; addSSL = true;
enableACME = true; enableACME = true;
@ -172,12 +176,10 @@ in
}; };
services.nginx.virtualHosts."localhost" = { services.nginx.virtualHosts."localhost" = {
listen = [ listen = [{
{ addr = "0.0.0.0";
addr = "0.0.0.0"; port = 8448;
port = 8448; }];
}
];
locations."/".proxyPass = "http://[::1]:8008"; locations."/".proxyPass = "http://[::1]:8008";
}; };
@ -185,21 +187,19 @@ in
forceSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
locations."/".extraConfig = '' locations."/".extraConfig = ''
return 404; return 404;
''; '';
locations."/_matrix" = { locations."/_matrix" = { proxyPass = "http://[::1]:8008"; };
proxyPass = "http://[::1]:8008";
};
locations."/_synapse/client".proxyPass = "http://[::1]:8008"; locations."/_synapse/client".proxyPass = "http://[::1]:8008";
locations."= /.well-known/matrix/server".extraConfig = mkWellKnown serverConfig; locations."= /.well-known/matrix/server".extraConfig =
mkWellKnown serverConfig;
# This is usually needed for homeserver discovery (from e.g. other Matrix clients). # This is usually needed for homeserver discovery (from e.g. other Matrix clients).
# Further reference can be found in the upstream docs at # Further reference can be found in the upstream docs at
# https://spec.matrix.org/latest/client-server-api/#getwell-knownmatrixclient # https://spec.matrix.org/latest/client-server-api/#getwell-knownmatrixclient
locations."= /.well-known/matrix/client".extraConfig = mkWellKnown clientConfig; locations."= /.well-known/matrix/client".extraConfig =
extraConfig = mkWellKnown clientConfig;
"client_max_body_size 2G;" extraConfig = "client_max_body_size 2G;";
;
}; };
services.nextcloud.enable = true; services.nextcloud.enable = true;
@ -325,9 +325,7 @@ in
system.stateVersion = "24.05"; system.stateVersion = "24.05";
nix = { nix = {
settings = { settings = { experimental-features = "nix-command flakes"; };
experimental-features = "nix-command flakes";
};
extraOptions = '' extraOptions = ''
!include ${config.sops.secrets.access.path} !include ${config.sops.secrets.access.path}
''; '';

View file

@ -1,51 +1,44 @@
{ config, lib, modulesPath, ... }: { { config, lib, modulesPath, ... }: {
imports = [ imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.availableKernelModules =
[ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ]; boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ]; boot.kernelModules = [ ];
boot.extraModulePackages = [ ]; boot.extraModulePackages = [ ];
fileSystems."/" = fileSystems."/" = {
{ device = "/dev/disk/by-uuid/678ecbd1-a5ce-4530-a959-ffb48f76aa43";
device = "/dev/disk/by-uuid/678ecbd1-a5ce-4530-a959-ffb48f76aa43"; fsType = "btrfs";
fsType = "btrfs"; };
};
fileSystems."/var/lib/nextcloud" = fileSystems."/var/lib/nextcloud" = {
{ device = "/dev/disk/by-label/nextcloud";
device = "/dev/disk/by-label/nextcloud"; fsType = "ext4";
fsType = "ext4"; };
};
fileSystems."/mnt/dump3" = fileSystems."/mnt/dump3" = {
{ device = "/dev/disk/by-label/backup";
device = "/dev/disk/by-label/backup"; fsType = "ext4";
fsType = "ext4"; };
};
fileSystems."/mnt/dump1" = fileSystems."/mnt/dump1" = {
{ device = "/dev/disk/by-uuid/CC60532860531912";
device = "/dev/disk/by-uuid/CC60532860531912"; fsType = "ntfs-3g";
fsType = "ntfs-3g"; options = [ "rw" "uid=1000" ];
options = [ "rw" "uid=1000" ]; };
};
fileSystems."/mnt/dump2" = fileSystems."/mnt/dump2" = {
{ device = "/dev/disk/by-uuid/F46896AE68966EDC";
device = "/dev/disk/by-uuid/F46896AE68966EDC"; fsType = "ntfs-3g";
fsType = "ntfs-3g"; options = [ "rw" "uid=1000" ];
options = [ "rw" "uid=1000" ]; };
};
fileSystems."/boot" = fileSystems."/boot" = {
{ device = "/dev/disk/by-uuid/B7BE-AB1C";
device = "/dev/disk/by-uuid/B7BE-AB1C"; fsType = "vfat";
fsType = "vfat"; options = [ "fmask=0022" "dmask=0022" ];
options = [ "fmask=0022" "dmask=0022" ]; };
};
swapDevices = swapDevices =
[{ device = "/dev/disk/by-uuid/832dce11-b4c4-476c-ab28-bd98275a542c"; }]; [{ device = "/dev/disk/by-uuid/832dce11-b4c4-476c-ab28-bd98275a542c"; }];
@ -58,5 +51,6 @@
# networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true; # networking.interfaces.enp0s31f6.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View file

@ -1,15 +1,13 @@
# derived from mautrix signal on nixpkgs -> https://github.com/NixOS/nixpkgs/blob/nixos-24.05/pkgs/servers/mautrix-signal/default.nix#L27 # derived from mautrix signal on nixpkgs -> https://github.com/NixOS/nixpkgs/blob/nixos-24.05/pkgs/servers/mautrix-signal/default.nix#L27
{ lib { lib, config, pkgs, ... }:
, config
, pkgs
, ...
}:
let let
cfg = config.services.mautrix-discord-dashie; cfg = config.services.mautrix-discord-dashie;
dataDir = "/var/lib/mautrix-discord"; dataDir = "/var/lib/mautrix-discord";
registrationFile = "${dataDir}/discord-registration.yaml"; registrationFile = "${dataDir}/discord-registration.yaml";
settingsFile = "${dataDir}/config.yaml"; settingsFile = "${dataDir}/config.yaml";
settingsFileUnsubstituted = settingsFormat.generate "mautrix-discord-config-unsubstituted.json" cfg.settings; settingsFileUnsubstituted =
settingsFormat.generate "mautrix-discord-config-unsubstituted.json"
cfg.settings;
settingsFormat = pkgs.formats.json { }; settingsFormat = pkgs.formats.json { };
appservicePort = 29334; appservicePort = 29334;
@ -33,7 +31,8 @@ let
}; };
bridge = { bridge = {
username_template = "discord_{{.}}"; username_template = "discord_{{.}}";
displayname_template = "{{or .ProfileName .PhoneNumber \"Unknown user\"}}"; displayname_template =
''{{or .ProfileName .PhoneNumber "Unknown user"}}'';
double_puppet_server_map = { }; double_puppet_server_map = { };
login_shared_secret_map = { }; login_shared_secret_map = { };
command_prefix = "!discord"; command_prefix = "!discord";
@ -50,10 +49,10 @@ let
}; };
}; };
in in {
{
options.services.mautrix-discord-dashie = { options.services.mautrix-discord-dashie = {
enable = lib.mkEnableOption "mautrix-discord, a Matrix-Discord puppeting bridge."; enable =
lib.mkEnableOption "mautrix-discord, a Matrix-Discord puppeting bridge.";
settings = lib.mkOption { settings = lib.mkOption {
apply = lib.recursiveUpdate defaultConfig; apply = lib.recursiveUpdate defaultConfig;
@ -76,9 +75,7 @@ in
ephemeral_events = false; ephemeral_events = false;
}; };
bridge = { bridge = {
history_sync = { history_sync = { request_full_sync = true; };
request_full_sync = true;
};
private_chat_portal_meta = true; private_chat_portal_meta = true;
mute_bridging = true; mute_bridging = true;
encryption = { encryption = {
@ -86,12 +83,8 @@ in
default = true; default = true;
require = true; require = true;
}; };
provisioning = { provisioning = { shared_secret = "disable"; };
shared_secret = "disable"; permissions = { "example.com" = "user"; };
};
permissions = {
"example.com" = "user";
};
}; };
}; };
}; };
@ -112,8 +105,10 @@ in
serviceDependencies = lib.mkOption { serviceDependencies = lib.mkOption {
type = with lib.types; listOf str; type = with lib.types; listOf str;
default = (lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit) default = (lib.optional config.services.matrix-synapse.enable
++ (lib.optional config.services.matrix-conduit.enable "conduit.service"); config.services.matrix-synapse.serviceUnit)
++ (lib.optional config.services.matrix-conduit.enable
"conduit.service");
defaultText = lib.literalExpression '' defaultText = lib.literalExpression ''
(optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit) (optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit)
++ (optional config.services.matrix-conduit.enable "conduit.service") ++ (optional config.services.matrix-conduit.enable "conduit.service")
@ -155,15 +150,16 @@ in
}; };
# Note: this is defined here to avoid the docs depending on `config` # Note: this is defined here to avoid the docs depending on `config`
services.mautrix-discord-dashie.settings.homeserver = optOneOf (with config.services; [ services.mautrix-discord-dashie.settings.homeserver = optOneOf
(lib.mkIf matrix-synapse.enable (mkDefaults { (with config.services; [
domain = matrix-synapse.settings.server_name; (lib.mkIf matrix-synapse.enable
})) (mkDefaults { domain = matrix-synapse.settings.server_name; }))
(lib.mkIf matrix-conduit.enable (mkDefaults { (lib.mkIf matrix-conduit.enable (mkDefaults {
domain = matrix-conduit.settings.global.server_name; domain = matrix-conduit.settings.global.server_name;
address = "http://localhost:${toString matrix-conduit.settings.global.port}"; address =
})) "http://localhost:${toString matrix-conduit.settings.global.port}";
]); }))
]);
systemd.services.mautrix-discord-dashie = { systemd.services.mautrix-discord-dashie = {
description = "mautrix-discord, a Matrix-Discord puppeting bridge."; description = "mautrix-discord, a Matrix-Discord puppeting bridge.";
@ -241,7 +237,7 @@ in
SystemCallErrorNumber = "EPERM"; SystemCallErrorNumber = "EPERM";
SystemCallFilter = [ "@system-service" ]; SystemCallFilter = [ "@system-service" ];
Type = "simple"; Type = "simple";
UMask = 0027; UMask = 27;
}; };
restartTriggers = [ settingsFileUnsubstituted ]; restartTriggers = [ settingsFileUnsubstituted ];
}; };

View file

@ -1,15 +1,13 @@
# derived from mautrix signal on nixpkgs -> https://github.com/NixOS/nixpkgs/blob/nixos-24.05/pkgs/servers/mautrix-signal/default.nix#L27 # derived from mautrix signal on nixpkgs -> https://github.com/NixOS/nixpkgs/blob/nixos-24.05/pkgs/servers/mautrix-signal/default.nix#L27
{ lib { lib, config, pkgs, ... }:
, config
, pkgs
, ...
}:
let let
cfg = config.services.mautrix-whatsapp-dashie; cfg = config.services.mautrix-whatsapp-dashie;
dataDir = "/var/lib/mautrix-whatsapp"; dataDir = "/var/lib/mautrix-whatsapp";
registrationFile = "${dataDir}/whatsapp-registration.yaml"; registrationFile = "${dataDir}/whatsapp-registration.yaml";
settingsFile = "${dataDir}/config.yaml"; settingsFile = "${dataDir}/config.yaml";
settingsFileUnsubstituted = settingsFormat.generate "mautrix-whatsapp-config-unsubstituted.json" cfg.settings; settingsFileUnsubstituted =
settingsFormat.generate "mautrix-whatsapp-config-unsubstituted.json"
cfg.settings;
settingsFormat = pkgs.formats.json { }; settingsFormat = pkgs.formats.json { };
appservicePort = 29318; appservicePort = 29318;
@ -33,7 +31,8 @@ let
}; };
bridge = { bridge = {
username_template = "whatsapp_{{.}}"; username_template = "whatsapp_{{.}}";
displayname_template = "{{or .ProfileName .PhoneNumber \"Unknown user\"}}"; displayname_template =
''{{or .ProfileName .PhoneNumber "Unknown user"}}'';
double_puppet_server_map = { }; double_puppet_server_map = { };
login_shared_secret_map = { }; login_shared_secret_map = { };
command_prefix = "!whatsapp"; command_prefix = "!whatsapp";
@ -50,10 +49,10 @@ let
}; };
}; };
in in {
{
options.services.mautrix-whatsapp-dashie = { options.services.mautrix-whatsapp-dashie = {
enable = lib.mkEnableOption "mautrix-whatsapp, a Matrix-Whatsapp puppeting bridge."; enable = lib.mkEnableOption
"mautrix-whatsapp, a Matrix-Whatsapp puppeting bridge.";
settings = lib.mkOption { settings = lib.mkOption {
apply = lib.recursiveUpdate defaultConfig; apply = lib.recursiveUpdate defaultConfig;
@ -76,9 +75,7 @@ in
ephemeral_events = false; ephemeral_events = false;
}; };
bridge = { bridge = {
history_sync = { history_sync = { request_full_sync = true; };
request_full_sync = true;
};
private_chat_portal_meta = true; private_chat_portal_meta = true;
mute_bridging = true; mute_bridging = true;
encryption = { encryption = {
@ -86,12 +83,8 @@ in
default = true; default = true;
require = true; require = true;
}; };
provisioning = { provisioning = { shared_secret = "disable"; };
shared_secret = "disable"; permissions = { "example.com" = "user"; };
};
permissions = {
"example.com" = "user";
};
}; };
}; };
}; };
@ -112,8 +105,10 @@ in
serviceDependencies = lib.mkOption { serviceDependencies = lib.mkOption {
type = with lib.types; listOf str; type = with lib.types; listOf str;
default = (lib.optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit) default = (lib.optional config.services.matrix-synapse.enable
++ (lib.optional config.services.matrix-conduit.enable "conduit.service"); config.services.matrix-synapse.serviceUnit)
++ (lib.optional config.services.matrix-conduit.enable
"conduit.service");
defaultText = lib.literalExpression '' defaultText = lib.literalExpression ''
(optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit) (optional config.services.matrix-synapse.enable config.services.matrix-synapse.serviceUnit)
++ (optional config.services.matrix-conduit.enable "conduit.service") ++ (optional config.services.matrix-conduit.enable "conduit.service")
@ -155,15 +150,16 @@ in
}; };
# Note: this is defined here to avoid the docs depending on `config` # Note: this is defined here to avoid the docs depending on `config`
services.mautrix-whatsapp-dashie.settings.homeserver = optOneOf (with config.services; [ services.mautrix-whatsapp-dashie.settings.homeserver = optOneOf
(lib.mkIf matrix-synapse.enable (mkDefaults { (with config.services; [
domain = matrix-synapse.settings.server_name; (lib.mkIf matrix-synapse.enable
})) (mkDefaults { domain = matrix-synapse.settings.server_name; }))
(lib.mkIf matrix-conduit.enable (mkDefaults { (lib.mkIf matrix-conduit.enable (mkDefaults {
domain = matrix-conduit.settings.global.server_name; domain = matrix-conduit.settings.global.server_name;
address = "http://localhost:${toString matrix-conduit.settings.global.port}"; address =
})) "http://localhost:${toString matrix-conduit.settings.global.port}";
]); }))
]);
systemd.services.mautrix-whatsapp-dashie = { systemd.services.mautrix-whatsapp-dashie = {
description = "mautrix-whatsapp, a Matrix-Whatsapp puppeting bridge."; description = "mautrix-whatsapp, a Matrix-Whatsapp puppeting bridge.";
@ -241,7 +237,7 @@ in
SystemCallErrorNumber = "EPERM"; SystemCallErrorNumber = "EPERM";
SystemCallFilter = [ "@system-service" ]; SystemCallFilter = [ "@system-service" ];
Type = "simple"; Type = "simple";
UMask = 0027; UMask = 27;
}; };
restartTriggers = [ settingsFileUnsubstituted ]; restartTriggers = [ settingsFileUnsubstituted ];
}; };

View file

@ -1,11 +1,7 @@
{ config, ... }: { config, ... }:
let let username = config.conf.username;
username = config.conf.username; in {
in imports = [ ../../modules ];
{
imports = [
../../modules
];
# config variables # config variables
conf = { conf = {
@ -14,10 +10,10 @@ in
hostname = "spaceship"; hostname = "spaceship";
}; };
mods = { mods = {
# f to pay respect
teams.enable = true;
coding = { jetbrains = true; }; coding = { jetbrains = true; };
gaming = { gaming = { enable = true; };
enable = true;
};
stylix.colorscheme = "catppuccin-mocha"; stylix.colorscheme = "catppuccin-mocha";
hyprland = { hyprland = {
monitor = [ monitor = [
@ -63,21 +59,14 @@ in
''; '';
extra_autostart = [ "flatpak run com.core447.StreamController -b" ]; extra_autostart = [ "flatpak run com.core447.StreamController -b" ];
}; };
extraDrives = [ extraDrives = [{
{ name = "drive2";
name = "drive2"; drive = {
drive = device = "/dev/disk/by-label/DRIVE2";
{ fsType = "ext4";
device = "/dev/disk/by-label/DRIVE2"; options = [ "noatime" "nodiratime" "discard" ];
fsType = "ext4"; };
options = [ }];
"noatime"
"nodiratime"
"discard"
];
};
}
];
virtualbox.enable = true; virtualbox.enable = true;
kde_connect.enable = true; kde_connect.enable = true;
xone.enable = true; xone.enable = true;
@ -88,9 +77,7 @@ in
enable = true; enable = true;
rocm.enable = true; rocm.enable = true;
}; };
greetd = { greetd = { resolution = "3440x1440@180"; };
resolution = "3440x1440@180";
};
nextcloud = { nextcloud = {
synclist = [ synclist = [
{ {

View file

@ -1,37 +0,0 @@
self: { lib
, config
, pkgs
, options
, ...
}:
let
cfg = config.programs.dashvim;
system = pkgs.stdenv.hostPlatform.system;
# dashvim = (import ../lib { inherit system pkgs; inputs = self.inputs; config' = cfg; });
in
{
imports = [ ../modules ];
meta.maintainers = with lib.maintainers; [ DashieTM ];
options.programs.dashnix = with lib; {
enable = mkEnableOption "dashvim";
package = mkOption {
type = with types; nullOr package;
default = dashvim.build_dashvim;
defaultText = literalExpression ''
ReSet.packages.''${pkgs.stdenv.hostPlatform.system}.default
'';
description = mdDoc ''
Package to run
'';
};
};
config = lib.mkIf cfg.enable
(lib.optionalAttrs (options?home.packages)
{
home.packages = lib.optional (cfg.package != null) cfg.package;
} //
lib.optionalAttrs (options?environment.systemPackages) {
environment.systemPackages = lib.optional (cfg.package != null) cfg.package;
});
}

View file

@ -1,24 +1,20 @@
{ inputs, pkgs, ... }: { { inputs, pkgs, ... }: {
build_systems = systems: builtins.listToAttrs (map build_systems = systems:
(name: { builtins.listToAttrs (map (name: {
name = name; name = name;
value = value = let mod = ../hardware/${name}/configuration.nix;
let in inputs.nixpkgs.lib.nixosSystem {
mod = ../hardware/${name}/configuration.nix; specialArgs = { inherit inputs pkgs mod; };
in modules = [
inputs.nixpkgs.lib.nixosSystem { inputs.home-manager.nixosModules.home-manager
specialArgs = { inputs.stylix.nixosModules.stylix
inherit inputs pkgs mod; ../base
}; ../programs
modules = [ mod
inputs.home-manager.nixosModules.home-manager ] ++ inputs.nixpkgs.lib.optional
inputs.stylix.nixosModules.stylix (builtins.pathExists ../hardware/${name}/${name}.nix)
../base ../hardware/${name}/${name}.nix
../programs
mod
] ++ inputs.nixpkgs.lib.optional (builtins.pathExists ../hardware/${name}/${name}.nix) ../hardware/${name}/${name}.nix
++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod; ++ inputs.nixpkgs.lib.optional (builtins.pathExists mod) mod;
}; };
}) }) systems);
systems);
} }

View file

@ -4,7 +4,8 @@
system = lib.mkOption { system = lib.mkOption {
default = "x86_64-linux"; default = "x86_64-linux";
# no fisherprice unix support # no fisherprice unix support
type = with lib.types; (enum [ "x86_64-linux" "aarch64-linux" "aarch64-linux-android" ]); type = with lib.types;
(enum [ "x86_64-linux" "aarch64-linux" "aarch64-linux-android" ]);
example = "aarch64-linux"; example = "aarch64-linux";
description = '' description = ''
System architecture. System architecture.
@ -42,9 +43,10 @@
ironbar = { ironbar = {
modules = lib.mkOption { modules = lib.mkOption {
default = [ ]; default = [ ];
example = [ example = [{
{ type = "upower"; class = "memory-usage"; } type = "upower";
]; class = "memory-usage";
}];
type = with lib.types; listOf attrs; type = with lib.types; listOf attrs;
description = '' description = ''
Adds modules to ironbar. Adds modules to ironbar.
@ -138,10 +140,10 @@
}; };
config = { config = {
conf.kernel = lib.mkIf (config.mods.gaming.enable && config.mods.gaming.kernel) pkgs.linuxPackages_xanmod_latest; conf.kernel =
} // (lib.optionalAttrs (options?system.stateVersion) lib.mkIf (config.mods.gaming.enable && config.mods.gaming.kernel)
{ pkgs.linuxPackages_xanmod_latest;
system.stateVersion = "unstable"; } // (lib.optionalAttrs (options ? system.stateVersion) {
} system.stateVersion = "unstable";
); });
} }

View file

@ -1,6 +1 @@
{ { imports = [ ./programs ./conf.nix ]; }
imports = [
./programs
./conf.nix
];
}

View file

@ -11,8 +11,9 @@
}; };
}; };
config = lib.mkIf config.mods.acpid.enable (lib.optionalAttrs (options?virtualisation.virtualbox.host) { config = lib.mkIf config.mods.acpid.enable
services.acpid.enable = true; (lib.optionalAttrs (options ? virtualisation.virtualbox.host) {
}); services.acpid.enable = true;
});
} }

View file

@ -21,91 +21,79 @@
}; };
}; };
config = (lib.optionalAttrs (options ? environment.systemPackages) {
environment.systemPackages =
config.mods.default_base_packages.additional_packages;
} // (lib.mkIf config.mods.default_base_packages.enable
(lib.optionalAttrs (options ? environment.systemPackages) {
environment.systemPackages = with pkgs; [
openssl
dbus
glib
gtk4
gtk3
libadwaita
gtk-layer-shell
gtk4-layer-shell
direnv
dconf
gsettings-desktop-schemas
gnome.nixos-gsettings-overrides
bibata-cursors
xorg.xkbutils
libxkbcommon
icon-library
adwaita-icon-theme
hicolor-icon-theme
morewaita-icon-theme
kdePackages.breeze-icons
seahorse
upower
thunderbird
podman-tui
podman-compose
dive
];
config = gtk.iconCache.enable = false;
(lib.optionalAttrs (options?environment.systemPackages)
{
environment.systemPackages = config.mods.default_base_packages.additional_packages;
} // (lib.mkIf config.mods.default_base_packages.enable
(
lib.optionalAttrs
(options?environment.systemPackages)
{
environment.systemPackages = with pkgs; [
openssl
dbus
glib
gtk4
gtk3
libadwaita
gtk-layer-shell
gtk4-layer-shell
direnv
dconf
gsettings-desktop-schemas
gnome.nixos-gsettings-overrides
bibata-cursors
xorg.xkbutils
libxkbcommon
icon-library
adwaita-icon-theme
hicolor-icon-theme
morewaita-icon-theme
kdePackages.breeze-icons
seahorse
upower
thunderbird
podman-tui
podman-compose
dive
];
gtk.iconCache.enable = false; fonts.packages = with pkgs; [ cantarell-fonts ];
fonts.packages = with pkgs; [ virtualisation = {
cantarell-fonts containers.enable = true;
]; podman = {
enable = true;
dockerCompat = true;
defaultNetwork.settings.dns_enabled = true;
};
};
virtualisation = { services.upower.enable = true;
containers.enable = true; services.dbus.enable = true;
podman = { services.dbus.packages = with pkgs; [ gnome2.GConf ];
enable = true; services.avahi = {
dockerCompat = true; enable = true;
defaultNetwork.settings.dns_enabled = true; nssmdns4 = true;
}; openFirewall = true;
}; };
services.upower.enable = true; programs.fish.enable = true;
services.dbus.enable = true; programs.fish.promptInit = ''
services.dbus.packages = with pkgs; [ ${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source
gnome2.GConf '';
]; programs.nix-ld.enable = true;
services.avahi = { programs.nix-ld.libraries = with pkgs; [ jdk zlib ];
enable = true; programs.direnv = {
nssmdns4 = true; package = pkgs.direnv;
openFirewall = true; silent = false;
}; loadInNixShell = true;
direnvrcExtra = "";
programs.fish.enable = true; nix-direnv = {
programs.fish.promptInit = '' enable = true;
${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source package = pkgs.nix-direnv;
''; };
programs.nix-ld.enable = true; };
programs.nix-ld.libraries = with pkgs; [ programs.ssh.startAgent = true;
jdk programs.gnupg.agent.enable = true;
zlib })));
];
programs.direnv = {
package = pkgs.direnv;
silent = false;
loadInNixShell = true;
direnvrcExtra = "";
nix-direnv = {
enable = true;
package = pkgs.nix-direnv;
};
};
programs.ssh.startAgent = true;
programs.gnupg.agent.enable = true;
})));
} }

View file

@ -10,11 +10,12 @@
}; };
}; };
config = lib.mkIf config.mods.bluetooth.enable (lib.optionalAttrs (options?hardware.bluetooth) { config = lib.mkIf config.mods.bluetooth.enable
hardware.bluetooth = { (lib.optionalAttrs (options ? hardware.bluetooth) {
enable = true; hardware.bluetooth = {
powerOnBoot = true; enable = true;
}; powerOnBoot = true;
}); };
});
} }

View file

@ -28,116 +28,118 @@
}; };
}; };
config = lib.mkIf config.mods.coding.enable (lib.optionalAttrs (options?home.packages) { config = lib.mkIf config.mods.coding.enable
programs.dashvim = lib.mkIf config.mods.coding.dashvim { (lib.optionalAttrs (options ? home.packages) {
enable = true; programs.dashvim = lib.mkIf config.mods.coding.dashvim {
colorscheme = config.mods.stylix.colorscheme; enable = true;
}; colorscheme = config.mods.stylix.colorscheme;
home.packages = with pkgs; [ };
(lib.mkIf config.mods.coding.jetbrains jetbrains-toolbox) home.packages = with pkgs; [
#basics (lib.mkIf config.mods.coding.jetbrains jetbrains-toolbox)
gitui #basics
gcc gitui
meson gcc
ninja meson
tree-sitter ninja
unzip tree-sitter
pkg-config unzip
sqlite pkg-config
plantuml sqlite
d-spy plantuml
d-spy
# cpp # cpp
bear bear
clang-tools clang-tools
#sql #sql
nodePackages.sql-formatter nodePackages.sql-formatter
sqls sqls
#assembly #assembly
asm-lsp asm-lsp
#yaml #yaml
yamlfmt yamlfmt
yamllint yamllint
yaml-language-server yaml-language-server
#markdown #markdown
marksman marksman
mdformat mdformat
#bash #bash
bash-language-server bash-language-server
shfmt shfmt
#fsharp #fsharp
fsharp fsharp
fsautocomplete fsautocomplete
#haskell #haskell
haskellPackages.cabal-install haskellPackages.cabal-install
ghc ghc
haskellPackages.haskell-language-server haskellPackages.haskell-language-server
#html #html
html-tidy # html-tidy
#json #json
jq jq
nodePackages.vscode-json-languageserver
#css #css
tailwindcss tailwindcss
tailwindcss-language-server tailwindcss-language-server
vscode-langservers-extracted
#editors #editors
neovide neovide
##fallback ##fallback
vscodium vscodium
#rust #rust
rustup rustup
#python #python
python3 python3
python312Packages.python-lsp-server python312Packages.python-lsp-server
python312Packages.python-lsp-ruff python312Packages.python-lsp-ruff
python312Packages.python-lsp-black python312Packages.python-lsp-black
#ts/js #ts/js
nodejs_20 nodejs_20
deno deno
typescript typescript
nodePackages.typescript-language-server nodePackages.typescript-language-server
nodePackages.prettier nodePackages.prettier
#go #go
go go
gopls gopls
#typst #typst
typst typst
tinymist tinymist
ltex-ls ltex-ls
#java #java
gradle gradle
maven maven
jdt-language-server jdt-language-server
temurin-jre-bin temurin-jre-bin
#.! #.!
dotnet-sdk_8 dotnet-sdk_8
omnisharp-roslyn omnisharp-roslyn
csharpier csharpier
netcoredbg netcoredbg
#zig #zig
zig zig
zls zls
];
}); tmux
tmate
];
});
} }

View file

@ -1,29 +1,32 @@
{ {
imports = [ imports = [
./virtualbox.nix
./kde_connect.nix
./gpu.nix
./xone.nix
./drives.nix
./bluetooth.nix
./acpid.nix ./acpid.nix
./piper.nix
./greetd.nix
./gnome_services.nix
./printing.nix
./layout.nix
./base_packages.nix ./base_packages.nix
./home_packages.nix ./bluetooth.nix
./media.nix
./coding.nix ./coding.nix
./flatpak.nix ./drives.nix
./nextcloud.nix
./starship.nix
./git.nix
./keepassxc.nix
./gaming.nix
./stylix.nix
./firefox.nix ./firefox.nix
./flatpak.nix
./gaming.nix
./git.nix
./gnome_services.nix
./gpu.nix
./greetd.nix
./home_packages.nix
./hyprland ./hyprland
./kde_connect.nix
./keepassxc.nix
./layout.nix
./media.nix
./nextcloud.nix
./piper.nix
./printing.nix
./sops.nix
./starship.nix
./stylix.nix
./teams.nix
./virtualbox.nix
./yazi
./xone.nix
]; ];
} }

View file

@ -19,51 +19,36 @@ let
example = { example = {
device = "/dev/disk/by-label/DRIVE2"; device = "/dev/disk/by-label/DRIVE2";
fsType = "ext4"; fsType = "ext4";
options = [ options = [ "noatime" "nodiratime" "discard" ];
"noatime"
"nodiratime"
"discard"
];
}; };
}; };
}; };
}; };
in in {
{
options.mods = { options.mods = {
extraDrives = extraDrives = lib.mkOption {
lib.mkOption { default = [ ];
default = [ ]; example = [{
example = [ name = "drive2";
{ drive = {
name = "drive2"; device = "/dev/disk/by-label/DRIVE2";
drive = { fsType = "ext4";
device = "/dev/disk/by-label/DRIVE2"; options = [ "noatime" "nodiratime" "discard" ];
fsType = "ext4"; };
options = [ }];
"noatime" # TODO: how to make this work
"nodiratime" # type = with lib.types; listOf (attrsOf driveModule);
"discard" type = with lib.types; listOf (attrsOf anything);
]; description = ''
}; Extra drives to add.
} '';
]; };
# TODO: how to make this work
# type = with lib.types; listOf (attrsOf driveModule);
type = with lib.types; listOf (attrsOf anything);
description = ''
Extra drives to add.
'';
};
}; };
config = (lib.optionalAttrs (options?fileSystems) { config = (lib.optionalAttrs (options ? fileSystems) {
fileSystems = builtins.listToAttrs fileSystems = builtins.listToAttrs (map ({ name, drive }: {
(map name = "/" + name;
({ name, drive }: { value = drive;
name = "/" + name; }) config.mods.extraDrives);
value = drive;
})
config.mods.extraDrives);
}); });
} }

View file

@ -42,7 +42,7 @@
description = "Firefox policy configuration"; description = "Firefox policy configuration";
}; };
extensions = lib.mkOption { extensions = lib.mkOption {
default = with pkgs.nur.repos.rycee.firefox-addons;[ default = with pkgs.nur.repos.rycee.firefox-addons; [
ublock-origin ublock-origin
darkreader darkreader
privacy-badger privacy-badger
@ -57,11 +57,18 @@
}; };
}; };
config = lib.mkIf config.mods.firefox.enable config = lib.mkIf config.mods.firefox.enable
(lib.optionalAttrs (options?programs.firefox.profiles) { (lib.optionalAttrs (options ? programs.firefox.profiles) {
programs.firefox = { programs.firefox = {
enable = true; enable = true;
policies = config.mods.firefox.configuration; policies = config.mods.firefox.configuration;
profiles.${config.conf.username} = { profiles.${config.conf.username} = {
isDefault = true;
id = 0;
extensions = config.mods.firefox.extensions;
};
profiles."special" = {
isDefault = false;
id = 1;
extensions = config.mods.firefox.extensions; extensions = config.mods.firefox.extensions;
}; };
}; };

View file

@ -14,14 +14,13 @@
}; };
}; };
config = lib.mkIf config.mods.flatpak.enable config = lib.mkIf config.mods.flatpak.enable
(lib.optionalAttrs (options?services.flatpak.remote) (lib.optionalAttrs (options ? services.flatpak.remote) {
{ services.flatpak.remotes = lib.mkOptionDefault [{
services.flatpak.remotes = lib.mkOptionDefault [{ name = "flathub-stable";
name = "flathub-stable"; location = "https://dl.flathub.org/repo/flathub.flatpakrepo";
location = "https://dl.flathub.org/repo/flathub.flatpakrepo"; }];
}]; services.flatpak.uninstallUnmanaged = true;
services.flatpak.uninstallUnmanaged = true; } // lib.optionalAttrs (options ? services.flatpak.packages) {
} // lib.optionalAttrs (options?services.flatpak.packages) {
services.flatpak.packages = [ services.flatpak.packages = [
# fallback if necessary, but generally avoided as nix is superior :) # fallback if necessary, but generally avoided as nix is superior :)
# default flatseal installation since flatpak permissions are totally not a broken idea # default flatseal installation since flatpak permissions are totally not a broken idea

View file

@ -7,14 +7,7 @@
description = "Enabled gaming related features."; description = "Enabled gaming related features.";
}; };
tools = lib.mkOption { tools = lib.mkOption {
default = with pkgs; [ default = with pkgs; [ gamemode steam lutris wine adwsteamgtk heroic ];
gamemode
steam
lutris
wine
adwsteamgtk
heroic
];
example = [ ]; example = [ ];
type = with lib.types; listOf package; type = with lib.types; listOf package;
description = "Install gaming related packages"; description = "Install gaming related packages";
@ -41,7 +34,8 @@
default = true; default = true;
example = false; example = false;
type = lib.types.bool; type = lib.types.bool;
description = "Whether to use GPU performance setting. NOTE: this is at your own risk!"; description =
"Whether to use GPU performance setting. NOTE: this is at your own risk!";
}; };
gpu_device = lib.mkOption { gpu_device = lib.mkOption {
default = 0; default = 0;
@ -51,7 +45,7 @@
}; };
}; };
config = lib.mkIf config.mods.gaming.enable config = lib.mkIf config.mods.gaming.enable
(lib.optionalAttrs (options?environment.systemPackages) { (lib.optionalAttrs (options ? environment.systemPackages) {
environment.systemPackages = config.mods.gaming.tools; environment.systemPackages = config.mods.gaming.tools;
programs.steam.enable = config.mods.gaming.steam; programs.steam.enable = config.mods.gaming.steam;
@ -59,9 +53,7 @@
programs.gamemode = { programs.gamemode = {
enableRenice = true; enableRenice = true;
settings = { settings = {
general = { general = { governor = "performance"; };
governor = "performance";
};
gpu = lib.mkIf config.mods.gaming.gpu_optimization { gpu = lib.mkIf config.mods.gaming.gpu_optimization {
apply_gpu_optimisations = "accept-responsibility"; apply_gpu_optimisations = "accept-responsibility";
gpu_device = config.mods.gaming.gpu_device; gpu_device = config.mods.gaming.gpu_device;

View file

@ -1,5 +1,4 @@
{ lib, config, options, pkgs, ... }: { lib, config, options, pkgs, ... }: {
{
options.mods.git = { options.mods.git = {
username = lib.mkOption { username = lib.mkOption {
default = "DashieTM"; default = "DashieTM";
@ -16,29 +15,40 @@
ssh_config = lib.mkOption { ssh_config = lib.mkOption {
default = '' default = ''
Host github.com Host github.com
${if (config.sops.secrets?hub.path) then "IdentityFile ${config.sops.secrets.hub.path}" else ""} ${
if (config.sops.secrets ? hub.path) then
"IdentityFile ${config.sops.secrets.hub.path}"
else
""
}
Host gitlab.com Host gitlab.com
${if (config.sops.secrets?lab.path) then "IdentityFile ${config.sops.secrets.lab.path}" else ""} ${
if (config.sops.secrets ? lab.path) then
"IdentityFile ${config.sops.secrets.lab.path}"
else
""
}
Host dashie.org Host dashie.org
${if (config.sops.secrets?dashie.path) then "IdentityFile ${config.sops.secrets.dashie.path}" else ""} ${
if (config.sops.secrets ? dashie.path) then
"IdentityFile ${config.sops.secrets.dashie.path}"
else
""
}
''; '';
example = ''''; example = "";
type = lib.types.lines; type = lib.types.lines;
description = "ssh configuration (keys for git)"; description = "ssh configuration (keys for git)";
}; };
}; };
config = (lib.optionalAttrs (options?programs.git && options?home.file) { config = (lib.optionalAttrs (options ? programs.git && options ? home.file) {
programs.git = { programs.git = {
enable = true; enable = true;
userName = config.mods.git.username; userName = config.mods.git.username;
userEmail = config.mods.git.email; userEmail = config.mods.git.email;
extraConfig = { extraConfig = {
merge = { merge = { tool = "nvimdiff"; };
tool = "nvimdiff"; diff = { tool = "nvimdiff"; };
};
diff = {
tool = "nvimdiff";
};
}; };
}; };
home.file.".ssh/config".text = config.mods.git.ssh_config; home.file.".ssh/config".text = config.mods.git.ssh_config;

View file

@ -11,24 +11,17 @@
}; };
}; };
config = lib.mkIf config.mods.gnome_services.enable (lib.optionalAttrs (options?services.gnome.gnome-keyring) config = lib.mkIf config.mods.gnome_services.enable
{ (lib.optionalAttrs (options ? services.gnome.gnome-keyring) {
programs.dconf.enable = true; programs.dconf.enable = true;
services = { services = {
# needed for GNOME services outside of GNOME Desktop # needed for GNOME services outside of GNOME Desktop
dbus.packages = with pkgs; [ dbus.packages = with pkgs; [ gcr gnome.gnome-settings-daemon ];
gcr
gnome.gnome-settings-daemon
];
gnome.gnome-keyring.enable = true; gnome.gnome-keyring.enable = true;
gvfs.enable = true; gvfs.enable = true;
}; };
} // lib.optionalAttrs (options?home.packages) { } // lib.optionalAttrs (options ? home.packages) {
home.packages = with pkgs; [ home.packages = with pkgs; [ nautilus sushi nautilus-python ];
nautilus });
sushi
nautilus-python
];
});
} }

View file

@ -38,46 +38,36 @@
}; };
config = lib.mkIf config.mods.vapi.enable config = lib.mkIf config.mods.vapi.enable
(lib.optionalAttrs (lib.optionalAttrs (options ? hardware.graphics) {
(options?hardware.graphics) boot = lib.mkIf config.mods.amdgpu.enable {
{ kernelModules = [ "kvm-amd" ];
boot = lib.mkIf config.mods.amdgpu.enable { initrd.kernelModules = [ "amdgpu" ];
kernelModules = [ "kvm-amd" ]; kernelParams = [ "amdgpu.ppfeaturemask=0xffffffff" ];
initrd.kernelModules = [ "amdgpu" ];
kernelParams = [
"amdgpu.ppfeaturemask=0xffffffff"
];
};
hardware = {
graphics =
let
base_packages = [
pkgs.libvdpau-va-gl
pkgs.vaapiVdpau
pkgs.mesa.drivers
];
rocm_packages = [
pkgs.rocmPackages.clr.icd
pkgs.rocm-opencl-runtime
];
in
{
enable = true;
enable32Bit = lib.mkDefault true;
extraPackages = base_packages ++
(lib.lists.optionals config.mods.vapi.rocm.enable rocm_packages);
};
};
} // lib.optionalAttrs (options?hardware.graphics) (lib.mkIf config.mods.nvidia.enable {
hardware.nvidia = {
modesetting.enable = true;
# powerManagement.enable = false;
# powerManagement.finegrained = true;
open = true;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
}; };
services.xserver.videoDrivers = [ "nvidia" ];
})); hardware = {
graphics = let
base_packages =
[ pkgs.libvdpau-va-gl pkgs.vaapiVdpau pkgs.mesa.drivers ];
rocm_packages =
[ pkgs.rocmPackages.clr.icd pkgs.rocm-opencl-runtime ];
in {
enable = true;
enable32Bit = lib.mkDefault true;
extraPackages = base_packages
++ (lib.lists.optionals config.mods.vapi.rocm.enable rocm_packages);
};
};
} // lib.optionalAttrs (options ? hardware.graphics)
(lib.mkIf config.mods.nvidia.enable {
hardware.nvidia = {
modesetting.enable = true;
# powerManagement.enable = false;
# powerManagement.finegrained = true;
open = true;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.stable;
};
services.xserver.videoDrivers = [ "nvidia" ];
}));
} }

View file

@ -38,62 +38,60 @@
}; };
}; };
config = config = let
let username = config.conf.username;
username = config.conf.username; session = {
session = { command = "${
command = "${lib.getExe inputs.hyprland.packages.${config.conf.system}.hyprland} --config /etc/greetd/hyprgreet.conf"; lib.getExe inputs.hyprland.packages.${config.conf.system}.hyprland
user = username; } --config /etc/greetd/hyprgreet.conf";
user = username;
};
in lib.mkIf config.mods.greetd.enable
(lib.optionalAttrs (options ? environment) {
services.xserver.displayManager.session = [{
manage = "desktop";
name = "Hyprland";
start = ''
${lib.getExe pkgs.hyprland} & waitPID=$!
'';
}];
# greetd display manager
programs.hyprland.enable = true;
services.greetd = {
enable = true;
settings = {
terminal.vt = 1;
default_session = session;
}; };
in };
lib.mkIf config.mods.greetd.enable
(lib.optionalAttrs (options?environment) {
services.xserver.displayManager.session = [
{
manage = "desktop";
name = "Hyprland";
start = ''
${lib.getExe pkgs.hyprland} & waitPID=$!
'';
}
];
# greetd display manager environment.etc."greetd/environments".text = ''
programs.hyprland.enable = true; Hyprland
services.greetd = { '';
enable = true;
settings = {
terminal.vt = 1;
default_session = session;
};
};
environment.etc."greetd/environments".text = '' # should technically be the same, but this is configured instead in order to provide a decent out of the box login experience.
Hyprland environment.etc."greetd/hyprgreet.conf".text = ''
''; exec-once=gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
# should technically be the same, but this is configured instead in order to provide a decent out of the box login experience. monitor=${config.mods.greetd.monitor},${config.mods.greetd.resolution},0x0,${config.mods.greetd.scale}
environment.etc."greetd/hyprgreet.conf".text = '' monitor=,disable
exec-once=gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
monitor=${config.mods.greetd.monitor},${config.mods.greetd.resolution},0x0,${config.mods.greetd.scale} input {
monitor=,disable kb_layout = ${config.mods.xkb.layout}
kb_variant = ${config.mods.xkb.variant}
force_no_accel = true
}
input { misc {
kb_layout = ${config.mods.xkb.layout} disable_splash_rendering = false
kb_variant = ${config.mods.xkb.variant} disable_hyprland_logo = false
force_no_accel = true }
}
misc { exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css; hyprctl dispatch exit
disable_splash_rendering = false '';
disable_hyprland_logo = false
}
exec-once=regreet --style /home/${username}/.config/gtk-3.0/gtk.css; hyprctl dispatch exit # unlock GPG keyring on login
''; security.pam.services.greetd.enableGnomeKeyring = true;
});
# unlock GPG keyring on login
security.pam.services.greetd.enableGnomeKeyring = true;
});
} }

View file

@ -16,14 +16,10 @@
''; '';
}; };
}; };
config = config = (lib.optionalAttrs (options ? home.packages) {
let home.packages = config.mods.home_packages.additional_packages;
callPackage = lib.callPackageWith pkgs; } // (lib.mkIf config.mods.home_packages.enable
in (lib.optionalAttrs (options ? home.packages) {
(lib.optionalAttrs (options?home.packages)
{
home.packages = config.mods.home_packages.additional_packages;
} // (lib.mkIf config.mods.home_packages.enable (lib.optionalAttrs (options?home.packages) {
home.packages = with pkgs; [ home.packages = with pkgs; [
nheko nheko
nextcloud-client nextcloud-client
@ -60,14 +56,10 @@
poppler_utils poppler_utils
brave brave
greetd.regreet greetd.regreet
sops
flake-checker flake-checker
ffmpeg ffmpeg
system-config-printer system-config-printer
brightnessctl brightnessctl
(callPackage
../../override/cambalache.nix
{ })
]; ];
#my own programs #my own programs

View file

@ -11,7 +11,7 @@
}; };
config = lib.mkIf config.mods.hyprland.anyrun.enable config = lib.mkIf config.mods.hyprland.anyrun.enable
(lib.optionalAttrs (options?programs.anyrun) { (lib.optionalAttrs (options ? programs.anyrun) {
programs.anyrun = { programs.anyrun = {
enable = true; enable = true;
config = { config = {

View file

@ -15,9 +15,7 @@
}; };
monitor = lib.mkOption { monitor = lib.mkOption {
default = [ ]; default = [ ];
example = [ example = [ "DP-1,3440x1440@180,2560x0,1,vrr,0" ];
"DP-1,3440x1440@180,2560x0,1,vrr,0"
];
type = with lib.types; listOf str; type = with lib.types; listOf str;
description = '' description = ''
The monitor configuration for hyprland. The monitor configuration for hyprland.
@ -25,9 +23,7 @@
}; };
workspace = lib.mkOption { workspace = lib.mkOption {
default = [ ]; default = [ ];
example = [ example = [ "2,monitor:DP-1, default:true" ];
"2,monitor:DP-1, default:true"
];
type = with lib.types; listOf str; type = with lib.types; listOf str;
description = '' description = ''
The workspace configuration for hyprland. The workspace configuration for hyprland.
@ -62,281 +58,278 @@
}; };
config = lib.mkIf config.mods.hyprland.enable config = lib.mkIf config.mods.hyprland.enable
(lib.optionalAttrs (options?wayland.windowManager.hyprland) (lib.optionalAttrs (options ? wayland.windowManager.hyprland) {
{ # install Hyprland related packages
# install Hyprland related packages home.packages = with pkgs; [
home.packages = with pkgs; [ xorg.xprop
xorg.xprop grim
grim slurp
slurp satty
satty xdg-desktop-portal-gtk
xdg-desktop-portal-gtk # xdg-desktop-portal-hyprland
# xdg-desktop-portal-hyprland copyq
copyq wl-clipboard
wl-clipboard hyprcursor
hyprcursor hyprpicker
hyprpicker ];
];
wayland.windowManager.hyprland.enable = true; wayland.windowManager.hyprland.enable = true;
wayland.windowManager.hyprland.settings = lib.mkIf config.mods.hyprland.use_default_config wayland.windowManager.hyprland.settings =
{ lib.mkIf config.mods.hyprland.use_default_config {
"$mod" = "SUPER"; "$mod" = "SUPER";
"source" = "/home/${config.conf.username}/.config/reset/keyboard.conf"; "source" =
"/home/${config.conf.username}/.config/reset/keyboard.conf";
bindm = [ bindm =
"$mod, mouse:272, movewindow" [ "$mod, mouse:272, movewindow" "$mod, mouse:273, resizewindow" ];
"$mod, mouse:273, resizewindow"
bind = [
# screenshots
''$mod SUPER,S,exec,grim -g "$(slurp)" - | wl-copy''
''
$mod SUPERSHIFTALT,S,exec, grim -g "$(slurp)" $HOME/gits/ost-5semester/Screenshots/$(date +'%Y_%m_%d_%I_%M_%S.png') && (date +'%Y_%m_%d_%I_%M_%S.png') | wl-copy''
''$mod SUPERSHIFT,S,exec,grim -g "$(slurp)" - | satty -f -''
''
$mod SUPERCONTROLSHIFT,S,exec,grim -c -g "2560,0 3440x1440" - | wl-copy''
# regular programs
"$mod SUPER,F,exec,firefox"
"$mod SUPERSHIFT,F,exec,firefox -p special"
"$mod SUPER,T,exec,kitty -1"
"$mod SUPER,E,exec,nautilus -w"
"$mod SUPER,N,exec,neovide"
"$mod SUPER,M,exec,oxidash"
"$mod SUPER,R,exec,anyrun"
"$mod SUPER,G,exec,oxicalc"
"$mod SUPER,D,exec,oxishut"
"$mod SUPER,A,exec,oxipaste"
"$mod SUPERSHIFT,P,exec,hyprdock --gui"
"$mod SUPERSHIFT,L,exec, playerctl -a pause & hyprlock & systemctl suspend"
"$mod SUPERSHIFT,K,exec, playerctl -a pause & hyprlock & systemctl hibernate"
# media keys
",XF86AudioMute,exec, $HOME/.config/scripts/audio_control.sh mute"
",XF86AudioLowerVolume,exec, $HOME/.config/scripts/audio_control.sh sink -5%"
",XF86AudioRaiseVolume,exec, $HOME/.config/scripts/audio_control.sh sink +5%"
",XF86AudioPlay,exec, playerctl play-pause"
",XF86AudioNext,exec, playerctl next"
",XF86AudioPrev,exec, playerctl previous"
",XF86MonBrightnessDown,exec, $HOME/.config/scripts/change-brightness brightness 10%-"
",XF86MonBrightnessUp,exec, $HOME/.config/scripts/change-brightness brightness +10%"
# hyprland keybinds
# misc
"$mod SUPER,V,togglefloating,"
"$mod SUPER,B,fullscreen,"
"$mod SUPER,C,togglesplit"
"$mod SUPER,Q,killactive,"
"$mod SUPERSHIFTALT,M,exit,"
"$mod SUPERSHIFT,W,togglespecialworkspace"
# move
"$mod SUPER,left,movewindow,l"
"$mod SUPER,right,movewindow,r"
"$mod SUPER,up,movewindow,u"
"$mod SUPER,down,movewindow,d"
# workspaces
"$mod SUPER,1,workspace,1"
"$mod SUPER,2,workspace,2"
"$mod SUPER,3,workspace,3"
"$mod SUPER,4,workspace,4"
"$mod SUPER,5,workspace,5"
"$mod SUPER,6,workspace,6"
"$mod SUPER,7,workspace,7"
"$mod SUPER,8,workspace,8"
"$mod SUPER,9,workspace,9"
"$mod SUPER,0,workspace,10"
# move to workspace
"$mod SUPERSHIFT,1,movetoworkspace,1"
"$mod SUPERSHIFT,2,movetoworkspace,2"
"$mod SUPERSHIFT,3,movetoworkspace,3"
"$mod SUPERSHIFT,4,movetoworkspace,4"
"$mod SUPERSHIFT,5,movetoworkspace,5"
"$mod SUPERSHIFT,6,movetoworkspace,6"
"$mod SUPERSHIFT,7,movetoworkspace,7"
"$mod SUPERSHIFT,8,movetoworkspace,8"
"$mod SUPERSHIFT,9,movetoworkspace,9"
"$mod SUPERSHIFT,0,movetoworkspace,10"
# move to workspace silent
"$mod SUPERSHIFTALT,1,movetoworkspacesilent,1"
"$mod SUPERSHIFTALT,2,movetoworkspacesilent,2"
"$mod SUPERSHIFTALT,3,movetoworkspacesilent,3"
"$mod SUPERSHIFTALT,4,movetoworkspacesilent,4"
"$mod SUPERSHIFTALT,5,movetoworkspacesilent,5"
"$mod SUPERSHIFTALT,6,movetoworkspacesilent,6"
"$mod SUPERSHIFTALT,7,movetoworkspacesilent,7"
"$mod SUPERSHIFTALT,8,movetoworkspacesilent,8"
"$mod SUPERSHIFTALT,9,movetoworkspacesilent,9"
"$mod SUPERSHIFTALT,0,movetoworkspacesilent,10"
# preselection
"$mod SUPERALT,j,layoutmsg,preselect l"
"$mod SUPERALT,k,layoutmsg,preselect d"
"$mod SUPERALT,l,layoutmsg,preselect u"
"$mod SUPERALT,semicolon,layoutmsg,preselect r"
"$mod SUPERALT,h,layoutmsg,preselect n"
];
binde = [
# hyprland keybinds
# focus
"$mod SUPER,J,movefocus,l"
"$mod SUPER,semicolon,movefocus,r"
"$mod SUPER,L,movefocus,u"
"$mod SUPER,K,movefocus,d"
# resize
"$mod SUPER,U,resizeactive,-20 0"
"$mod SUPER,P,resizeactive,20 0"
"$mod SUPER,O,resizeactive,0 -20"
"$mod SUPER,I,resizeactive,0 20"
];
general = {
gaps_out = "3,5,5,5";
border_size = 3;
"col.active_border" =
lib.mkForce "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
# "col.inactive_border" = "0x66333333";
allow_tearing = true;
};
decoration = { rounding = 4; };
animations = {
bezier = "penguin,0.05,0.9,0.1,1.0";
animation = [
"windowsMove,1,4,default"
"windows,1,7,default,popin 70%"
"windowsOut,1,7,default,popin 70%"
"border,1,10,default"
"fade,1,7,default"
"workspaces,1,6,default"
"layers,1,3,default,popin"
]; ];
};
bind = [ dwindle = {
# screenshots preserve_split = true;
"$mod SUPER,S,exec,grim -g \"$(slurp)\" - | wl-copy" pseudotile = 0;
"$mod SUPERSHIFTALT,S,exec, grim -g \"$(slurp)\" $HOME/gits/ost-5semester/Screenshots/$(date +'%Y_%m_%d_%I_%M_%S.png') && (date +'%Y_%m_%d_%I_%M_%S.png') | wl-copy" permanent_direction_override = false;
"$mod SUPERSHIFT,S,exec,grim -g \"$(slurp)\" - | satty -f -" };
"$mod SUPERCONTROLSHIFT,S,exec,grim -c -g \"2560,0 3440x1440\" - | wl-copy"
# regular programs input = {
"$mod SUPER,F,exec,firefox" kb_layout = "${config.mods.xkb.layout}";
"$mod SUPER,T,exec,kitty -1" kb_variant = "${config.mods.xkb.variant}";
"$mod SUPER,E,exec,nautilus -w" repeat_delay = 200;
"$mod SUPER,N,exec,neovide" force_no_accel = true;
"$mod SUPER,M,exec,oxidash" touchpad = {
"$mod SUPER,R,exec,anyrun" natural_scroll = true;
"$mod SUPER,G,exec,oxicalc" tap-to-click = true;
"$mod SUPER,D,exec,oxishut" tap-and-drag = true;
"$mod SUPER,A,exec,oxipaste"
"$mod SUPERSHIFT,P,exec,hyprdock --gui"
"$mod SUPERSHIFT,L,exec, playerctl -a pause & hyprlock & systemctl suspend"
"$mod SUPERSHIFT,K,exec, playerctl -a pause & hyprlock & systemctl hibernate"
# media keys
",XF86AudioMute,exec, $HOME/.config/scripts/audio_control.sh mute"
",XF86AudioLowerVolume,exec, $HOME/.config/scripts/audio_control.sh sink -5%"
",XF86AudioRaiseVolume,exec, $HOME/.config/scripts/audio_control.sh sink +5%"
",XF86AudioPlay,exec, playerctl play-pause"
",XF86AudioNext,exec, playerctl next"
",XF86AudioPrev,exec, playerctl previous"
",XF86MonBrightnessDown,exec, $HOME/.config/scripts/change-brightness brightness 10%-"
",XF86MonBrightnessUp,exec, $HOME/.config/scripts/change-brightness brightness +10%"
# hyprland keybinds
# misc
"$mod SUPER,V,togglefloating,"
"$mod SUPER,B,fullscreen,"
"$mod SUPER,C,togglesplit"
"$mod SUPER,Q,killactive,"
"$mod SUPERSHIFTALT,M,exit,"
"$mod SUPERSHIFT,W,togglespecialworkspace"
# move
"$mod SUPER,left,movewindow,l"
"$mod SUPER,right,movewindow,r"
"$mod SUPER,up,movewindow,u"
"$mod SUPER,down,movewindow,d"
# workspaces
"$mod SUPER,1,workspace,1"
"$mod SUPER,2,workspace,2"
"$mod SUPER,3,workspace,3"
"$mod SUPER,4,workspace,4"
"$mod SUPER,5,workspace,5"
"$mod SUPER,6,workspace,6"
"$mod SUPER,7,workspace,7"
"$mod SUPER,8,workspace,8"
"$mod SUPER,9,workspace,9"
"$mod SUPER,0,workspace,10"
# move to workspace
"$mod SUPERSHIFT,1,movetoworkspace,1"
"$mod SUPERSHIFT,2,movetoworkspace,2"
"$mod SUPERSHIFT,3,movetoworkspace,3"
"$mod SUPERSHIFT,4,movetoworkspace,4"
"$mod SUPERSHIFT,5,movetoworkspace,5"
"$mod SUPERSHIFT,6,movetoworkspace,6"
"$mod SUPERSHIFT,7,movetoworkspace,7"
"$mod SUPERSHIFT,8,movetoworkspace,8"
"$mod SUPERSHIFT,9,movetoworkspace,9"
"$mod SUPERSHIFT,0,movetoworkspace,10"
# move to workspace silent
"$mod SUPERSHIFTALT,1,movetoworkspacesilent,1"
"$mod SUPERSHIFTALT,2,movetoworkspacesilent,2"
"$mod SUPERSHIFTALT,3,movetoworkspacesilent,3"
"$mod SUPERSHIFTALT,4,movetoworkspacesilent,4"
"$mod SUPERSHIFTALT,5,movetoworkspacesilent,5"
"$mod SUPERSHIFTALT,6,movetoworkspacesilent,6"
"$mod SUPERSHIFTALT,7,movetoworkspacesilent,7"
"$mod SUPERSHIFTALT,8,movetoworkspacesilent,8"
"$mod SUPERSHIFTALT,9,movetoworkspacesilent,9"
"$mod SUPERSHIFTALT,0,movetoworkspacesilent,10"
# preselection
"$mod SUPERALT,j,layoutmsg,preselect l"
"$mod SUPERALT,k,layoutmsg,preselect d"
"$mod SUPERALT,l,layoutmsg,preselect u"
"$mod SUPERALT,semicolon,layoutmsg,preselect r"
"$mod SUPERALT,h,layoutmsg,preselect n"
];
binde = [
# hyprland keybinds
# focus
"$mod SUPER,J,movefocus,l"
"$mod SUPER,semicolon,movefocus,r"
"$mod SUPER,L,movefocus,u"
"$mod SUPER,K,movefocus,d"
# resize
"$mod SUPER,U,resizeactive,-20 0"
"$mod SUPER,P,resizeactive,20 0"
"$mod SUPER,O,resizeactive,0 -20"
"$mod SUPER,I,resizeactive,0 20"
];
general = {
gaps_out = "3,5,5,5";
border_size = 3;
"col.active_border" = lib.mkForce "0xFFFF0000 0xFF00FF00 0xFF0000FF 45deg";
# "col.inactive_border" = "0x66333333";
allow_tearing = true;
}; };
};
decoration = { misc = {
rounding = 4; animate_manual_resizes = 1;
}; enable_swallow = true;
disable_splash_rendering = true;
disable_hyprland_logo = true;
swallow_regex = "^(.*)(kitty)(.*)$";
initial_workspace_tracking = 1;
};
animations = { cursor = {
bezier = "penguin,0.05,0.9,0.1,1.0"; # conversion seems to be borked right now, i want a smooth bibata :(
animation = [ enable_hyprcursor = false;
"windowsMove,1,4,default" # no_hardware_cursors = true;
"windows,1,7,default,popin 70%" # no_break_fs_vrr = true;
"windowsOut,1,7,default,popin 70%" };
"border,1,10,default"
"fade,1,7,default"
"workspaces,1,6,default"
"layers,1,3,default,popin"
];
};
dwindle = { gestures = { workspace_swipe = true; };
preserve_split = true;
pseudotile = 0;
permanent_direction_override = false;
};
input = { monitor = config.mods.hyprland.monitor;
kb_layout = "${config.mods.xkb.layout}"; workspace = config.mods.hyprland.workspace;
kb_variant = "${config.mods.xkb.variant}";
repeat_delay = 200;
force_no_accel = true;
touchpad = {
natural_scroll = true;
tap-to-click = true;
tap-and-drag = true;
};
};
misc = { env = [
animate_manual_resizes = 1; "GTK_CSD,0"
enable_swallow = true; ''TERM,"kitty /bin/fish"''
disable_splash_rendering = true; "XDG_CURRENT_DESKTOP=Hyprland"
disable_hyprland_logo = true; "XDG_SESSION_TYPE=wayland"
swallow_regex = "^(.*)(kitty)(.*)$"; "XDG_SESSION_DESKTOP=Hyprland"
initial_workspace_tracking = 1; "HYPRCURSOR_THEME,Bibata-Modern-Classic"
}; "HYPRCURSOR_SIZE,24"
"XCURSOR_THEME,Bibata-Modern-Classic"
"XCURSOR_SIZE,24"
"QT_QPA_PLATFORM,wayland"
"QT_QPA_PLATFORMTHEME,qt5ct"
"QT_WAYLAND_FORCE_DPI,96"
"QT_AUTO_SCREEN_SCALE_FACTOR,0"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"QT_SCALE_FACTOR,1"
''EDITOR,"neovide --novsync --nofork"''
"WLR_DRM_NO_ATOMIC,1"
"GTK_USE_PORTAL, 1"
];
cursor = { layerrule = [
# conversion seems to be borked right now, i want a smooth bibata :( # layer rules
enable_hyprcursor = false; # mainly to disable animations within slurp and grim
# no_hardware_cursors = true; "noanim, selection"
# no_break_fs_vrr = true; ];
};
gestures = { windowrule = [
workspace_swipe = true; # window rules
}; "tile,^(.*)(Spotify)(.*)$"
"float,^(.*)(OxiCalc)(.*)$"
"float,^(.*)(winecfg.exe)(.*)$"
"float,^(.*)(speed.exe)(.*)$"
"float,^(.*)(copyq)(.*)$"
"center,^(.*)(swappy)(.*)$"
"float,title:^(.*)(Spirit)(.*)$"
"float,title:^(.*)(reset)(.*)$"
"workspace 10 silent,^(.*)(steam)(.*)$"
"workspace 9 silent,^(.*)(dota)(.*)$"
"workspace 9 silent,^(.*)(battlebits)(.*)$"
"workspace 9 silent,^(.*)(aoe)(.*)$"
"suppressevent fullscreen maximize,^(.*)(neovide)(.*)$"
];
monitor = config.mods.hyprland.monitor; windowrulev2 = [
workspace = config.mods.hyprland.workspace; "immediate,class:^(.*)(Pal)$"
"immediate,class:^(.*)(dota2)$"
"immediate,class:^(.*)(needforspeedheat.exe)$"
];
env = [ exec-once = [
"GTK_CSD,0" # environment
"TERM,\"kitty /bin/fish\"" "systemctl --user import-environment"
"XDG_CURRENT_DESKTOP=Hyprland" "dbus-update-activation-environment --systemd --all"
"XDG_SESSION_TYPE=wayland" "hyprctl setcursor Bibata-Modern-Classic 24"
"XDG_SESSION_DESKTOP=Hyprland"
"HYPRCURSOR_THEME,Bibata-Modern-Classic"
"HYPRCURSOR_SIZE,24"
"XCURSOR_THEME,Bibata-Modern-Classic"
"XCURSOR_SIZE,24"
"QT_QPA_PLATFORM,wayland"
"QT_QPA_PLATFORMTHEME,qt5ct"
"QT_WAYLAND_FORCE_DPI,96"
"QT_AUTO_SCREEN_SCALE_FACTOR,0"
"QT_WAYLAND_DISABLE_WINDOWDECORATION,1"
"QT_SCALE_FACTOR,1"
"EDITOR,\"neovide --novsync --nofork\""
"WLR_DRM_NO_ATOMIC,1"
"GTK_USE_PORTAL, 1"
];
layerrule = [ # other programs
# layer rules "hyprpaper"
# mainly to disable animations within slurp and grim "ironbar"
"noanim, selection" "firefox"
]; "oxipaste_daemon"
# should be taken care of with the new systemd services
# "nextcloud --background"
"oxinoti"
] ++ config.mods.hyprland.extra_autostart;
windowrule = [ # plugin = {
# window rules # hyprspace = {
"tile,^(.*)(Spotify)(.*)$" # bind = [
"float,^(.*)(OxiCalc)(.*)$" # "SUPER, W, overview:toggle, toggle"
"float,^(.*)(winecfg.exe)(.*)$" # ];
"float,^(.*)(speed.exe)(.*)$" # };
"float,^(.*)(copyq)(.*)$" # };
"center,^(.*)(swappy)(.*)$" } // config.mods.hyprland.custom_config;
"float,title:^(.*)(Spirit)(.*)$" # wayland.windowManager.hyprland.plugins = [
"float,title:^(.*)(reset)(.*)$" # inputs.Hyprspace.packages.${pkgs.system}.Hyprspace
"workspace 10 silent,^(.*)(steam)(.*)$" # ];
"workspace 9 silent,^(.*)(dota)(.*)$" });
"workspace 9 silent,^(.*)(battlebits)(.*)$"
"workspace 9 silent,^(.*)(aoe)(.*)$"
"suppressevent fullscreen maximize,^(.*)(neovide)(.*)$"
];
windowrulev2 = [
"immediate,class:^(.*)(Pal)$"
"immediate,class:^(.*)(dota2)$"
"immediate,class:^(.*)(needforspeedheat.exe)$"
];
exec-once = [
# environment
"systemctl --user import-environment"
"dbus-update-activation-environment --systemd --all"
"hyprctl setcursor Bibata-Modern-Classic 24"
# other programs
"hyprpaper"
"ironbar"
"firefox"
"oxipaste_daemon"
# should be taken care of with the new systemd services
# "nextcloud --background"
"oxinoti"
] ++ config.mods.hyprland.extra_autostart;
# plugin = {
# hyprspace = {
# bind = [
# "SUPER, W, overview:toggle, toggle"
# ];
# };
# };
} // config.mods.hyprland.custom_config;
# wayland.windowManager.hyprland.plugins = [
# inputs.Hyprspace.packages.${pkgs.system}.Hyprspace
# ];
});
} }

View file

@ -11,37 +11,31 @@
}; };
config = lib.mkIf config.mods.hyprland.hyprlock.enable config = lib.mkIf config.mods.hyprland.hyprlock.enable
(lib.optionalAttrs (options?xdg.configFile) { (lib.optionalAttrs (options ? xdg.configFile) {
home.packages = with pkgs; [ hyprlock ]; home.packages = with pkgs; [ hyprlock ];
programs.hyprlock = lib.mkIf config.mods.hyprland.hyprlock.enable { programs.hyprlock = lib.mkIf config.mods.hyprland.hyprlock.enable {
enable = true; enable = true;
settings = { settings = {
background = [ background = [{
{ monitor = "";
monitor = ""; path = "";
path = ""; color = "rgba(26, 27, 38, 1.0)";
color = "rgba(26, 27, 38, 1.0)"; }];
}
];
input-field = [ input-field = [{
{ monitor = "${config.conf.monitor}";
monitor = "${config.conf.monitor}";
placeholder_text = "password or something"; placeholder_text = "password or something";
} }];
];
label = [ label = [{
{ monitor = "${config.conf.monitor}";
monitor = "${config.conf.monitor}"; text = "$TIME";
text = "$TIME"; font_size = 50;
font_size = 50; position = "0, 200";
position = "0, 200"; valign = "center";
valign = "center"; halign = "center";
halign = "center"; }];
}
];
}; };
}; };
}); });

View file

@ -8,7 +8,7 @@
description = "Enables Hyprpaper"; description = "Enables Hyprpaper";
}; };
config = lib.mkOption { config = lib.mkOption {
default = ''''; default = "";
example = '' example = ''
Hyprpaper config Hyprpaper config
''; '';
@ -21,11 +21,11 @@
}; };
config = lib.mkIf config.mods.hyprland.hyprpaper.enable config = lib.mkIf config.mods.hyprland.hyprpaper.enable
(lib.optionalAttrs (options?xdg.configFile) (lib.optionalAttrs (options ? xdg.configFile) {
{ home.packages = with pkgs; [ hyprpaper ];
home.packages = with pkgs; [ hyprpaper ]; xdg.configFile."hypr/hyprpaper.conf" =
xdg.configFile."hypr/hyprpaper.conf" = lib.mkIf config.mods.hyprland.hyprpaper.enable { lib.mkIf config.mods.hyprland.hyprpaper.enable {
text = config.mods.hyprland.hyprpaper.config; text = config.mods.hyprland.hyprpaper.config;
}; };
}); });
} }

View file

@ -1,8 +1,6 @@
{ lib, config, pkgs, options, ... }: { lib, config, pkgs, options, ... }:
let let username = config.conf.username;
username = config.conf.username; in {
in
{
options.mods = { options.mods = {
hyprland.ironbar = { hyprland.ironbar = {
enable = lib.mkOption { enable = lib.mkOption {
@ -14,172 +12,166 @@
}; };
}; };
config = lib.mkIf config.mods.hyprland.ironbar.enable config = lib.mkIf config.mods.hyprland.ironbar.enable
(lib.optionalAttrs (options?programs.ironbar) (lib.optionalAttrs (options ? programs.ironbar) {
{
programs.ironbar = { programs.ironbar = {
enable = true; enable = true;
style = '' style = ''
@import url("/home/${username}/.config/gtk-3.0/gtk.css"); @import url("/home/${username}/.config/gtk-3.0/gtk.css");
* { * {
color: #71bbe6; color: #71bbe6;
padding: 0px; padding: 0px;
margin: 0px; margin: 0px;
} }
.background { .background {
background-color: rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 0);
} }
.workspaces { .workspaces {
margin: 2px 0px 0px 5px; margin: 2px 0px 0px 5px;
border-radius: 10px; border-radius: 10px;
/* background-color: #2b2c3b; */ /* background-color: #2b2c3b; */
background-color: #1E1E2E; background-color: #1E1E2E;
padding: 2px 5px 2px 5px; padding: 2px 5px 2px 5px;
} }
.workspaces .item { .workspaces .item {
margin: 0px 3px 0px 3px; margin: 0px 3px 0px 3px;
font-size: 13px; font-size: 13px;
border-radius: 100%; border-radius: 100%;
padding: 0px 2px 0px 3px; padding: 0px 2px 0px 3px;
background-color: rgba(0, 0, 0, 0); background-color: rgba(0, 0, 0, 0);
} }
.workspaces .item:hover { .workspaces .item:hover {
background-color: #3e4152; background-color: #3e4152;
} }
.workspaces .item.focused { .workspaces .item.focused {
background-color: #3e4152; background-color: #3e4152;
} }
.audio-box { .audio-box {
padding: 2em; padding: 2em;
background-color: #1E1E2E; background-color: #1E1E2E;
border-radius: 5px; border-radius: 5px;
} }
.audio-slider { .audio-slider {
padding: 5px; padding: 5px;
margin: 5px; margin: 5px;
} }
.audio-button { .audio-button {
padding: 5px 10px 5px 10px; padding: 5px 10px 5px 10px;
margin: 0px 1em 20px 1em; margin: 0px 1em 20px 1em;
border-radius: 100%; border-radius: 100%;
font-size: 17px; font-size: 17px;
} }
.audio-button-box { .audio-button-box {
padding: 0px 2.5em 0px 2.5em; padding: 0px 2.5em 0px 2.5em;
} }
.focused { .focused {
/* margin: 2px 0px 0px 0px; */ /* margin: 2px 0px 0px 0px; */
padding: 0px 5px 0px 5px; padding: 0px 5px 0px 5px;
/* background-color: 1a1b26; */ /* background-color: 1a1b26; */
background-color: #1E1E2E; background-color: #1E1E2E;
font-size: 17px; font-size: 17px;
border-radius: 10px; border-radius: 10px;
} }
#bar #end { #bar #end {
margin: 0px 5px 0px 0px; margin: 0px 5px 0px 0px;
padding: 0px 5px 0px 5px; padding: 0px 5px 0px 5px;
background-color: #1E1E2E; background-color: #1E1E2E;
border-radius: 10px; border-radius: 10px;
} }
.popup-button { .popup-button {
padding: 0px 5px 0px 3px; padding: 0px 5px 0px 3px;
margin: 0em 3px; margin: 0em 3px;
border-radius: 100%; border-radius: 100%;
font-size: 13px; font-size: 13px;
background-color: #1E1E2E; background-color: #1E1E2E;
} }
.popup-button-box { .popup-button-box {
padding: 2px 0px 2px 0px; padding: 2px 0px 2px 0px;
} }
.clock { .clock {
padding: 0px 5px 0px 5px; padding: 0px 5px 0px 5px;
font-size: 17px; font-size: 17px;
background-color: #1E1E2E; background-color: #1E1E2E;
} }
.clock:hover { .clock:hover {
background-color: #3e4152; background-color: #3e4152;
} }
.custom button { .custom button {
background-color: #1E1E2E; background-color: #1E1E2E;
} }
.custom button:hover { .custom button:hover {
background-color: #3e4152; background-color: #3e4152;
} }
.memory-usage { .memory-usage {
font-size: 15px; font-size: 15px;
margin: 0px 5px 0px 0px; margin: 0px 5px 0px 0px;
} }
.memory-usage:hover { .memory-usage:hover {
background-color: #3e4152; background-color: #3e4152;
} }
.popup-clock { .popup-clock {
background-color: #1E1E2E; background-color: #1E1E2E;
border-radius: 5px; border-radius: 5px;
padding: 2px 8px 10px 8px; padding: 2px 8px 10px 8px;
} }
.popup-clock .calendar-clock { .popup-clock .calendar-clock {
font-size: 2.5em; font-size: 2.5em;
padding-bottom: 0.1em; padding-bottom: 0.1em;
} }
.popup-clock .calendar { .popup-clock .calendar {
border-radius: 5px; border-radius: 5px;
font-size: 1.05em; font-size: 1.05em;
} }
.popup-clock .calendar:selected { .popup-clock .calendar:selected {
background-color: #3e4152; background-color: #3e4152;
} }
''; '';
features = [ features = [
#"another_feature" #"another_feature"
]; ];
config = { config = {
monitors."${config.conf.monitor}" = { monitors."${config.conf.monitor}" = {
end = config.conf.ironbar.modules ++ [ end = config.conf.ironbar.modules ++ [
{ {
type = "sys_info"; type = "sys_info";
format = [ format = [ " {memory_percent}" ];
" {memory_percent}" interval.memory = 30;
]; class = "memory-usage";
interval.memory = 30; }
class = "memory-usage"; {
} type = "custom";
{ bar = [{
type = "custom";
bar = [
{
type = "button"; type = "button";
class = "popup-button"; class = "popup-button";
label = ""; label = "";
on_click = "popup:toggle"; on_click = "popup:toggle";
} }];
]; class = "popup-button-box";
class = "popup-button-box"; popup = [{
popup = [
{
type = "box"; type = "box";
orientation = "vertical"; orientation = "vertical";
class = "audio-box"; class = "audio-box";
@ -192,13 +184,15 @@
type = "button"; type = "button";
class = "audio-button"; class = "audio-button";
label = ""; label = "";
on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh bluetooth"; on_click =
"!/home/${username}/.config/eww/scripts/audio_control.sh bluetooth";
} }
{ {
type = "button"; type = "button";
class = "audio-button"; class = "audio-button";
label = "󰋋"; label = "󰋋";
on_click = "!/home/${username}/.config/eww/scripts/audio_control.sh internal"; on_click =
"!/home/${username}/.config/eww/scripts/audio_control.sh internal";
} }
]; ];
class = "audio-button-box"; class = "audio-button-box";
@ -212,7 +206,8 @@
class = "audio-slider"; class = "audio-slider";
step = 1.0; step = 1.0;
length = 200; length = 200;
value = "pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'"; value =
"pactl get-sink-volume @DEFAULT_SINK@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%"; on_change = "!pactl set-sink-volume @DEFAULT_SINK@ $0%";
} }
{ {
@ -224,51 +219,49 @@
class = "audio-slider"; class = "audio-slider";
step = 1.0; step = 1.0;
length = 200; length = 200;
value = "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'"; value =
on_change = "!pactl set-source-volume @DEFAULT_SOURCE@ $0%"; "pactl get-source-volume @DEFAULT_SOURCE@ | awk -F'/' '{ print $2 }' | tr -d ' %'";
on_change =
"!pactl set-source-volume @DEFAULT_SOURCE@ $0%";
} }
]; ];
} }];
]; }
} {
{ type = "custom";
type = "custom"; bar = [{
bar = [
{
type = "button"; type = "button";
class = "popup-button"; class = "popup-button";
label = ""; label = "";
on_click = "!oxidash --css /home/${username}/gits/oxidash/style.css"; on_click =
} "!oxidash --css /home/${username}/gits/oxidash/style.css";
]; }];
class = "popup-button-box"; class = "popup-button-box";
} }
{ {
type = "clock"; type = "clock";
format = "%I:%M"; format = "%I:%M";
format_popup = "%I:%M:%S"; format_popup = "%I:%M:%S";
locale = "en_US"; locale = "en_US";
} }
{ type = "tray"; } { type = "tray"; }
]; ];
position = "top"; position = "top";
height = 10; height = 10;
anchor_to_edges = true; anchor_to_edges = true;
start = [{ start = [{
type = "workspaces"; type = "workspaces";
all_monitors = true; all_monitors = true;
}]; }];
center = [ center = [{
{
type = "focused"; type = "focused";
show_icon = true; show_icon = true;
show_title = true; show_title = true;
icon_size = 20; icon_size = 20;
truncate = "end"; truncate = "end";
} }];
]; };
}; };
}; };
}; });
});
} }

View file

@ -12,19 +12,20 @@
}; };
config = lib.mkIf config.mods.kde_connect.enable config = lib.mkIf config.mods.kde_connect.enable
(lib.optionalAttrs (options?networking.firewall) (lib.optionalAttrs (options ? networking.firewall) {
{ networking.firewall = {
networking.firewall = { allowedTCPPortRanges = [{
allowedTCPPortRanges = [ from = 1714;
{ from = 1714; to = 1764; } # KDE Connect to = 1764;
} # KDE Connect
]; ];
allowedUDPPortRanges = [ allowedUDPPortRanges = [{
{ from = 1714; to = 1764; } # KDE Connect from = 1714;
to = 1764;
} # KDE Connect
]; ];
}; };
} // lib.optionalAttrs (options?home.packages) { } // lib.optionalAttrs (options ? home.packages) {
home.packages = with pkgs; [ home.packages = with pkgs; [ kdeconnect ];
kdeconnect
];
}); });
} }

View file

@ -10,7 +10,8 @@
default = true; default = true;
example = false; example = false;
type = lib.types.bool; type = lib.types.bool;
description = "Whether to overwrite the cache config of keepassxc. Note, this means that changes can't be applied via the program anymore!"; description =
"Whether to overwrite the cache config of keepassxc. Note, this means that changes can't be applied via the program anymore!";
}; };
cache_config = lib.mkOption { cache_config = lib.mkOption {
default = '' default = ''
@ -20,41 +21,41 @@
LastOpenedDatabases=/home/dashie/Music/Passwords.kdbx LastOpenedDatabases=/home/dashie/Music/Passwords.kdbx
LastKeyFiles=@Variant(\0\0\0\x1c\0\0\0\x1\0\0\0\x42\0/\0h\0o\0m\0\x65\0/\0\x64\0\x61\0s\0h\0i\0\x65\0/\0M\0u\0s\0i\0\x63\0/\0P\0\x61\0s\0s\0w\0o\0r\0\x64\0s\0.\0k\0\x64\0\x62\0x\0\0\0\n\0\0\0\x42\0/\0h\0o\0m\0\x65\0/\0\x64\0\x61\0s\0h\0i\0\x65\0/\0M\0u\0s\0i\0\x63\0/\0l\0o\0g\0i\0n\0_\0k\0\x65\0y\0.\0k\0\x65\0y\0x) LastKeyFiles=@Variant(\0\0\0\x1c\0\0\0\x1\0\0\0\x42\0/\0h\0o\0m\0\x65\0/\0\x64\0\x61\0s\0h\0i\0\x65\0/\0M\0u\0s\0i\0\x63\0/\0P\0\x61\0s\0s\0w\0o\0r\0\x64\0s\0.\0k\0\x64\0\x62\0x\0\0\0\n\0\0\0\x42\0/\0h\0o\0m\0\x65\0/\0\x64\0\x61\0s\0h\0i\0\x65\0/\0M\0u\0s\0i\0\x63\0/\0l\0o\0g\0i\0n\0_\0k\0\x65\0y\0.\0k\0\x65\0y\0x)
''; '';
example = ''''; example = "";
type = lib.types.lines; type = lib.types.lines;
description = "Cache config to be used."; description = "Cache config to be used.";
}; };
}; };
config = lib.mkIf config.mods.keepassxc.enable config = lib.mkIf config.mods.keepassxc.enable
(lib.optionalAttrs (options?home.file) { (lib.optionalAttrs (options ? home.file) {
home.packages = [ pkgs.keepassxc ]; home.packages = [ pkgs.keepassxc ];
xdg.configFile."keepassxc/keepassxc.ini" = { xdg.configFile."keepassxc/keepassxc.ini" = {
text = text = ''
'' [General]
[General] ConfigVersion=2
ConfigVersion=2
[Browser] [Browser]
Enabled=true Enabled=true
[GUI] [GUI]
ApplicationTheme=classic ApplicationTheme=classic
HidePasswords=true HidePasswords=true
MinimizeOnClose=true MinimizeOnClose=true
MinimizeToTray=true MinimizeToTray=true
ShowTrayIcon=true ShowTrayIcon=true
TrayIconAppearance=monochrome-light TrayIconAppearance=monochrome-light
[PasswordGenerator] [PasswordGenerator]
Length=30 Length=30
[Security] [Security]
EnableCopyOnDoubleClick=true EnableCopyOnDoubleClick=true
''; '';
}; };
home.file.".cache/keepassxc/keepassxc.ini" = lib.mkIf config.mods.keepassxc.use_cache_config { home.file.".cache/keepassxc/keepassxc.ini" =
text = config.mods.keepassxc.cache_config; lib.mkIf config.mods.keepassxc.use_cache_config {
}; text = config.mods.keepassxc.cache_config;
};
}); });
} }

View file

@ -13,7 +13,7 @@
description = "Your variant"; description = "Your variant";
}; };
}; };
config = (lib.optionalAttrs (options?services.xserver) { config = (lib.optionalAttrs (options ? services.xserver) {
# Configure keymap in X11 # Configure keymap in X11
services.xserver = { services.xserver = {
xkb.layout = "${config.mods.xkb.layout}"; xkb.layout = "${config.mods.xkb.layout}";

View file

@ -16,11 +16,10 @@
''; '';
}; };
}; };
config = config = (lib.optionalAttrs (options ? home.packages) {
(lib.optionalAttrs (options?home.packages) home.packages = config.mods.media_packages.additional_packages;
{ } // (lib.mkIf config.mods.media_packages.enable
home.packages = config.mods.media_packages.additional_packages; (lib.optionalAttrs (options ? home.packages) {
} // (lib.mkIf config.mods.media_packages.enable (lib.optionalAttrs (options?home.packages) {
home.packages = with pkgs; [ home.packages = with pkgs; [
# base audio # base audio
pipewire pipewire
@ -49,8 +48,6 @@
yt-dlp yt-dlp
]; ];
programs.obs-studio.enable = true; programs.obs-studio.enable = true;
programs.obs-studio.plugins = with pkgs; [ programs.obs-studio.plugins = with pkgs; [ obs-studio-plugins.obs-vaapi ];
obs-studio-plugins.obs-vaapi
];
}))); })));
} }

View file

@ -21,13 +21,11 @@
}; };
synclist = lib.mkOption { synclist = lib.mkOption {
default = [ ]; default = [ ];
example = [ example = [{
{ name = "sync globi folder";
name = "sync globi folder"; remote = "globi";
remote = "globi"; local = "/home/globi";
local = "/home/globi"; }];
}
];
description = '' description = ''
A list of folders to synchronize. A list of folders to synchronize.
This has to be an attribute list with the name, remote and local field (all strings). This has to be an attribute list with the name, remote and local field (all strings).

View file

@ -8,12 +8,9 @@
}; };
}; };
config = lib.mkIf config.mods.piper.enable config = lib.mkIf config.mods.piper.enable
(lib.optionalAttrs (options?services.ratbagd) (lib.optionalAttrs (options ? services.ratbagd) {
{ services.ratbagd.enable = true;
services.ratbagd.enable = true; } // lib.optionalAttrs (options ? home.packages) {
} // lib.optionalAttrs (options?home.packages) { home.packages = with pkgs; [ piper ];
home.packages = with pkgs; [
piper
];
}); });
} }

View file

@ -8,17 +8,16 @@
}; };
}; };
config = lib.mkIf config.mods.printing.enable config = lib.mkIf config.mods.printing.enable
(lib.optionalAttrs (options?services.printing) (lib.optionalAttrs (options ? services.printing) {
{ # Enable CUPS to print documents.
# Enable CUPS to print documents. services.printing.enable = true;
services.printing.enable = true; services.printing.browsing = true;
services.printing.browsing = true; services.printing.drivers = [ pkgs.hplip ];
services.printing.drivers = [ pkgs.hplip ]; services.printing.startWhenNeeded = true; # optional
services.printing.startWhenNeeded = true; # optional services.avahi = {
services.avahi = { enable = true;
enable = true; nssmdns4 = true;
nssmdns4 = true; openFirewall = true;
openFirewall = true; };
}; });
});
} }

30
modules/programs/sops.nix Normal file
View file

@ -0,0 +1,30 @@
{ lib, pkgs, config, options, ... }: {
options.mods.sops = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enable sops secrets";
};
};
config = lib.mkIf config.mods.sops.enable
(lib.optionalAttrs (options ? home.packages) {
home.packages = with pkgs; [ sops ];
sops = {
gnupg = {
home = "~/.gnupg";
sshKeyPaths = [ ];
};
defaultSopsFile = ../../secrets/secrets.yaml;
secrets = {
hub = { };
lab = { };
${config.conf.username} = { };
nextcloud = { };
access = { };
};
};
systemd.user.services.mbsync.Unit.After = [ "sops-nix.service" ];
});
}

View file

@ -30,92 +30,99 @@
}; };
# environment.systemPackages needed in order to configure systemwide # environment.systemPackages needed in order to configure systemwide
config = lib.mkIf config.mods.starship.enable (lib.optionalAttrs (options?environment.systemPackages) { config = lib.mkIf config.mods.starship.enable
programs.starship = (lib.optionalAttrs (options ? environment.systemPackages) {
let programs.starship = let
base16 = pkgs.callPackage inputs.base16.lib { }; base16 = pkgs.callPackage inputs.base16.lib { };
scheme = (base16.mkSchemeAttrs config.stylix.base16Scheme); scheme = (base16.mkSchemeAttrs config.stylix.base16Scheme);
code_format = "[](bg:prev_bg fg:#5256c3)[ $symbol ($version)](bg:#5256c3)"; code_format =
in "[](bg:prev_bg fg:#5256c3)[ $symbol ($version)](bg:#5256c3)";
{ in {
enable = true; enable = true;
interactiveOnly = true; interactiveOnly = true;
presets = lib.mkIf config.mods.starship.use_default_prompt [ "pastel-powerline" ]; presets = lib.mkIf config.mods.starship.use_default_prompt
settings = lib.mkIf config.mods.starship.use_default_prompt [ "pastel-powerline" ];
{ settings = lib.mkIf config.mods.starship.use_default_prompt {
# derived from https://starship.rs/presets/pastel-powerline # derived from https://starship.rs/presets/pastel-powerline
format = ''$username$directory$git_branch$git_status$git_metrics[ ](bg:none fg:prev_bg)''; format =
right_format = ''$c$elixir$elm$golang$gradle$haskell$java$julia$nodejs$nim$rust$scala$python$ocaml$opa$perl$zig$dart$dotnet$nix_shell$shell$solidity[](bg:prev_bg fg:#3465A4)$time$os''; "$username$directory$git_branch$git_status$git_metrics[ ](bg:none fg:prev_bg)";
username = { right_format =
show_always = false; "$c$elixir$elm$golang$gradle$haskell$java$julia$nodejs$nim$rust$scala$python$ocaml$opa$perl$zig$dart$dotnet$nix_shell$shell$solidity[](bg:prev_bg fg:#3465A4)$time$os";
style_user = "bg:#5277C3 fg:#${scheme.base05}"; username = {
style_root = "bg:#5277C3 fg:#${scheme.base05}"; show_always = false;
format = "[ $user ]($style)[](bg:#3465A4 fg:#5277C3)"; style_user = "bg:#5277C3 fg:#${scheme.base05}";
disabled = false; style_root = "bg:#5277C3 fg:#${scheme.base05}";
}; format = "[ $user ]($style)[](bg:#3465A4 fg:#5277C3)";
os = { disabled = false;
symbols = { NixOS = " "; }; };
style = "bg:#3465A4 fg:#${scheme.base05}"; os = {
disabled = false; symbols = { NixOS = " "; };
}; style = "bg:#3465A4 fg:#${scheme.base05}";
directory = { disabled = false;
style = "bg:#3465A4 fg:#${scheme.base05}"; };
format = "[ $path ]($style)"; directory = {
truncation_length = 3; style = "bg:#3465A4 fg:#${scheme.base05}";
truncation_symbol = "/"; format = "[ $path ]($style)";
}; truncation_length = 3;
git_branch = { truncation_symbol = "/";
always_show_remote = true; };
symbol = ""; git_branch = {
style = "bg:#5256c3 fg:#${scheme.base05}"; always_show_remote = true;
format = "[ ](bg:#5256c3 fg:prev_bg)[$symbol ($remote_name )$branch ]($style)"; symbol = "";
}; style = "bg:#5256c3 fg:#${scheme.base05}";
git_status = { format =
staged = "+\${count} (fg:#C4A000)"; "[ ](bg:#5256c3 fg:prev_bg)[$symbol ($remote_name )$branch ]($style)";
ahead = "\${count} (fg:#C4A000)"; };
diverged = "\${count} (fg:#C4A000)"; git_status = {
behind = "\${count} (fg:#C4A000)"; staged = "+\${count} (fg:#C4A000)";
stashed = " "; ahead = "\${count} (fg:#C4A000)";
untracked = "?\${count} (fg:#C4A000)"; diverged = "\${count} (fg:#C4A000)";
modified = "!\${count} (fg:#C4A000)"; behind = "\${count} (fg:#C4A000)";
deleted = "\${count} (fg:#C4A000)"; stashed = " ";
conflicted = "=\${count} (fg:#C4A000)"; untracked = "?\${count} (fg:#C4A000)";
renamed = "»\${count} (fg:#C4A000)"; modified = "!\${count} (fg:#C4A000)";
style = "bg:#5256c3 fg:fg:#C4A000"; deleted = "\${count} (fg:#C4A000)";
format = "[$all_status$ahead_behind]($style)"; conflicted = "=\${count} (fg:#C4A000)";
}; renamed = "»\${count} (fg:#C4A000)";
git_metrics = { style = "bg:#5256c3 fg:fg:#C4A000";
disabled = false; format = "[$all_status$ahead_behind]($style)";
format = "([| ](bg:#5256c3)[+$added]($added_style bg:#5256c3)[ -$deleted]($deleted_style bg:#5256c3))"; };
}; git_metrics = {
c = { format = code_format; }; disabled = false;
elixir = { format = code_format; }; format =
elm = { format = code_format; }; "([| ](bg:#5256c3)[+$added]($added_style bg:#5256c3)[ -$deleted]($deleted_style bg:#5256c3))";
golang = { format = code_format; }; };
gradle = { format = code_format; }; c = { format = code_format; };
haskell = { format = code_format; }; elixir = { format = code_format; };
java = { format = code_format; }; elm = { format = code_format; };
julia = { format = code_format; }; golang = { format = code_format; };
nodejs = { format = code_format; }; gradle = { format = code_format; };
nim = { format = code_format; }; haskell = { format = code_format; };
nix_shell = { symbol = ""; format = code_format; }; java = { format = code_format; };
rust = { format = code_format; }; julia = { format = code_format; };
scala = { format = code_format; }; nodejs = { format = code_format; };
typst = { format = code_format; }; nim = { format = code_format; };
python = { format = code_format; }; nix_shell = {
ocaml = { format = code_format; }; symbol = "";
opa = { format = code_format; }; format = code_format;
perl = { format = code_format; }; };
zig = { format = code_format; }; rust = { format = code_format; };
dart = { format = code_format; }; scala = { format = code_format; };
dotnet = { format = code_format; }; typst = { format = code_format; };
time = { python = { format = code_format; };
disabled = false; ocaml = { format = code_format; };
time_format = "%R"; # Hour:Minute Format opa = { format = code_format; };
style = "bg:#3465A4 fg:#${scheme.base05}"; perl = { format = code_format; };
format = "[ $time ]($style)"; zig = { format = code_format; };
}; dart = { format = code_format; };
} // config.mods.starship.custom_prompt; dotnet = { format = code_format; };
time = {
disabled = false;
time_format = "%R"; # Hour:Minute Format
style = "bg:#3465A4 fg:#${scheme.base05}";
format = "[ $time ]($style)";
};
} // config.mods.starship.custom_prompt;
}; };
}); });
} }

View file

@ -36,7 +36,7 @@
''; '';
}; };
}; };
config = (lib.optionalAttrs (options?stylix) { config = (lib.optionalAttrs (options ? stylix) {
stylix = { stylix = {
enable = true; enable = true;
image = ../../base/black.jpg; image = ../../base/black.jpg;
@ -75,8 +75,10 @@
size = 24; size = 24;
}; };
base16Scheme = base16Scheme = (if builtins.isAttrs config.mods.stylix.colorscheme then
(if builtins.isAttrs config.mods.stylix.colorscheme then config.mods.stylix.colorscheme else "${pkgs.base16-schemes}/share/themes/${config.mods.stylix.colorscheme}.yaml"); config.mods.stylix.colorscheme
else
"${pkgs.base16-schemes}/share/themes/${config.mods.stylix.colorscheme}.yaml");
}; };
}); });
} }

View file

@ -0,0 +1,17 @@
{ lib, config, options, pkgs, ... }:
let callPackage = lib.callPackageWith pkgs;
in {
options.mods.teams = {
enable = lib.mkOption {
default = false;
example = true;
type = lib.types.bool;
description =
"Enables teams via a chromium pwa (for the poor souls that have to use this for work)";
};
};
config = lib.mkIf config.mods.teams.enable
(lib.optionalAttrs (options ? home.packages) {
home.packages = [ (callPackage ../../override/teams.nix { }) ];
});
}

View file

@ -11,7 +11,8 @@
}; };
}; };
config = lib.optionalAttrs (options?virtualisation.virtualbox.host) { config = lib.optionalAttrs (options ? virtualisation.virtualbox.host) {
virtualisation.virtualbox.host.enable = lib.mkIf config.mods.virtualbox.enable true; virtualisation.virtualbox.host.enable =
lib.mkIf config.mods.virtualbox.enable true;
}; };
} }

View file

@ -11,7 +11,6 @@
}; };
}; };
config = lib.optionalAttrs (options?hardware) { config =
hardware.xone.enable = true; lib.optionalAttrs (options ? hardware) { hardware.xone.enable = true; };
};
} }

View file

@ -0,0 +1,14 @@
{ lib, config, options, ... }: {
options.mods.yazi = {
enable = lib.mkOption {
default = true;
example = false;
type = lib.types.bool;
description = "Enables yazi";
};
};
config = lib.mkIf config.mods.yazi.enable
(lib.optionalAttrs (options ? home.packages) {
programs.yazi = import ./yazi.nix;
});
}

File diff suppressed because it is too large Load diff

View file

@ -1,92 +0,0 @@
{ stdenv
, lib
, pkgs
, fetchFromGitLab
, nix-update-script
}:
pkgs.python3.pkgs.buildPythonApplication rec {
pname = "cambalache";
version = "0.90.1";
format = "other";
# Did not fetch submodule since it is only for tests we don't run.
src = fetchFromGitLab {
domain = "gitlab.gnome.org";
owner = "jpu";
repo = pname;
rev = version;
sha256 = "sha256-YuRxqrGJvhMMZApD/tQSWkUg/nZnp/xryBJSjXCXO4w=";
};
nativeBuildInputs = with pkgs; [
meson
ninja
pkg-config
gobject-introspection # for setup hook
desktop-file-utils # for update-desktop-database
shared-mime-info # for update-mime-database
wrapGAppsHook
];
pythonPath = with pkgs.python3.pkgs; [
pygobject3
lxml
];
buildInputs = with pkgs; [
glib
gtk3
gtk4
gtksourceview4
gtksourceview5
webkitgtk_4_1
webkitgtk_6_0
# For extra widgets support.
libadwaita
libhandy
];
# Prevent double wrapping.
dontWrapGApps = true;
postPatch = ''
patchShebangs postinstall.py
# those programs are used at runtime not build time
# https://gitlab.gnome.org/jpu/cambalache/-/blob/0.12.1/meson.build#L79-80
substituteInPlace ./meson.build \
--replace "find_program('broadwayd', required: true)" "" \
--replace "find_program('gtk4-broadwayd', required: true)" ""
'';
preFixup = ''
# Let python wrapper use GNOME flags.
makeWrapperArgs+=(
# For broadway daemons
--prefix PATH : "${lib.makeBinPath [ pkgs.gtk3 pkgs.gtk4 ]}"
"''${gappsWrapperArgs[@]}"
)
'';
postFixup = ''
# Wrap a helper script in an unusual location.
wrapPythonProgramsIn "$out/${pkgs.python3.sitePackages}/cambalache/priv/merengue" "$out $pythonPath"
'';
passthru = {
updateScript = nix-update-script { };
};
meta = with lib; {
homepage = "https://gitlab.gnome.org/jpu/cambalache";
description = "RAD tool for GTK 4 and 3 with data model first philosophy";
mainProgram = "cambalache";
maintainers = teams.gnome.members;
license = with licenses; [
lgpl21Only # Cambalache
gpl2Only # tools
];
platforms = platforms.unix;
};
}

28
override/teams.nix Normal file
View file

@ -0,0 +1,28 @@
{ stdenv, lib, copyDesktopItems, makeDesktopItem, chromium, ... }:
stdenv.mkDerivation (final: {
pname = "teams-pwa";
name = final.pname;
nativeBuildInputs = [ copyDesktopItems ];
dontUnpack = true;
desktopItems = [
(makeDesktopItem {
name = final.pname;
icon = final.pname;
exec = "${chromium}/bin/${
chromium.meta.mainProgram or chromium.pname
} --app=https://teams.microsoft.com";
desktopName = "Microsoft Teams PWA";
genericName = "Progressive Web App for Microsoft Teams";
categories = [ "Network" ];
mimeTypes = [ "x-scheme-handler/msteams" ];
})
];
meta = with lib; {
description = "Microsoft Teams PWA";
homepage = "https://teams.microsoft.com";
maintainers = with maintainers; [ ners ];
platforms = chromium.meta.platforms;
};
})

View file

@ -1,8 +1,6 @@
{ config, ... }: { config, lib, options, ... }:
let let username = config.conf.username;
username = config.conf.username; in {
in
{
manual = { manual = {
html.enable = false; html.enable = false;
json.enable = false; json.enable = false;
@ -12,48 +10,31 @@ in
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
home.username = username; home = {
home.homeDirectory = "/home/${username}"; username = username;
home.stateVersion = "24.05"; homeDirectory = "/home/${username}";
stateVersion = "24.05";
home.sessionPath = [ sessionPath = [ "$HOME/.cargo/bin" ];
"$HOME/.cargo/bin"
];
home.sessionVariables = { sessionVariables = { GOROOT = "$HOME/.go"; };
GOROOT = "$HOME/.go";
keyboard = null;
file.".local/share/flatpak/overrides/global".text = ''
[Context]
filesystems=xdg-config/gtk-3.0;xdg-config/gtk-4.0
'';
}; };
home.keyboard = null;
home.file.".local/share/flatpak/overrides/global".text = ''
[Context]
filesystems=xdg-config/gtk-3.0;xdg-config/gtk-4.0
'';
programs.nix-index = { programs.nix-index = {
enable = true; enable = true;
enableFishIntegration = true; enableFishIntegration = true;
}; };
nix = { nix = {
extraOptions = '' extraOptions = lib.mkIf (options ? config.sops.secrets.access.path) ''
!include ${config.sops.secrets.access.path} !include ${config.sops.secrets.access.path}
''; '';
}; };
sops = {
gnupg = {
home = "~/.gnupg";
sshKeyPaths = [ ];
};
defaultSopsFile = ../secrets/secrets.yaml;
secrets.hub = { };
secrets.lab = { };
secrets.${username} = { };
secrets.nextcloud = { };
secrets.access = { };
};
systemd.user.services.mbsync.Unit.After = [ "sops-nix.service" ];
} }

View file

@ -15,31 +15,28 @@ let
inputs.sops-nix.homeManagerModules.sops inputs.sops-nix.homeManagerModules.sops
inputs.dashvim.homeManagerModules.dashvim inputs.dashvim.homeManagerModules.dashvim
]; ];
in in {
{ xdg = {
xdg.portal.config.common.default = "*"; portal.config.common.default = "*";
xdg.portal = { portal = {
enable = true; enable = true;
extraPortals = [ extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
pkgs.xdg-desktop-portal-gtk };
];
};
home-manager.useGlobalPkgs = true;
# home-manager.backupFileExtension = "backup";
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit inputs;
}; };
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = { inherit inputs; };
home-manager.users.${config.conf.username} = { users.${config.conf.username} = {
imports = [ imports = [
./common.nix ./common.nix
./xdg.nix ./xdg.nix
./oxi/default.nix ./oxi/default.nix
./themes/default.nix ./themes/default.nix
./individual_configs/default.nix ./individual_configs/default.nix
./sync.nix ./sync.nix
] ++ base_imports ] ++ base_imports ++ lib.optional (builtins.pathExists mod) mod;
++ lib.optional (builtins.pathExists mod) mod; };
}; };
} }

View file

@ -1,9 +1 @@
{ { imports = [ ./kitty.nix ./fish.nix ./direnv.nix ./neovide.nix ]; }
imports = [
./kitty.nix
./yazi.nix
./fish.nix
./direnv.nix
./neovide.nix
];
}

View file

@ -1,7 +1,6 @@
{ pkgs, ... }: { { pkgs, ... }: {
xdg.configFile."direnv/direnv.toml".source = (pkgs.formats.toml { }).generate "direnv" { xdg.configFile."direnv/direnv.toml".source =
global = { (pkgs.formats.toml { }).generate "direnv" {
warn_timeout = "-1s"; global = { warn_timeout = "-1s"; };
}; };
};
} }

View file

@ -1,140 +1,139 @@
{ config, ... }: { { config, ... }: {
xdg.configFile."fish/config.fish" = { xdg.configFile."fish/config.fish" = {
text = text = ''
'' if status is-interactive
if status is-interactive # Commands to run in interactive sessions can go here
# Commands to run in interactive sessions can go here end
end
# ============================================================================= # =============================================================================
# #
# Utility functions for zoxide. # Utility functions for zoxide.
# #
export NIX_PATH="$NIX_PATH:$HOME/gits/dotFiles/." export NIX_PATH="$NIX_PATH:$HOME/gits/dotFiles/."
set EDITOR "neovide --no-fork" set EDITOR "neovide --no-fork"
alias rebuild='sudo nixos-rebuild switch --flake /home/${config.conf.username}/gits/dotFiles/.' alias rebuild='sudo nixos-rebuild switch --flake /home/${config.conf.username}/gits/dotFiles/.'
abbr --add ls 'lsd' abbr --add ls 'lsd'
abbr --add :q 'exit' abbr --add :q 'exit'
abbr --add gh 'git push origin' abbr --add gh 'git push origin'
abbr --add gl 'git pull origin' abbr --add gl 'git pull origin'
abbr --add gm 'git commit -m' abbr --add gm 'git commit -m'
abbr --add ga "git add -A" abbr --add ga "git add -A"
abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20' abbr --add g+ 'bear -- g++ -Wextra -Werror -std=c++20'
abbr --add s "kitty +kitten ssh" abbr --add s "kitty +kitten ssh"
abbr --add zl 'z "" ' abbr --add zl 'z "" '
abbr --add nv 'neovide' abbr --add nv 'neovide'
abbr --add cr 'cargo run' abbr --add cr 'cargo run'
abbr --add grep 'rg' abbr --add grep 'rg'
abbr --add cat 'bat' abbr --add cat 'bat'
abbr --add find 'fd' abbr --add find 'fd'
abbr --add rm 'rip' abbr --add rm 'rip'
set fish_greeting set fish_greeting
# pwd based on the value of _ZO_RESOLVE_SYMLINKS. # pwd based on the value of _ZO_RESOLVE_SYMLINKS.
function __zoxide_pwd function __zoxide_pwd
builtin pwd -L builtin pwd -L
end end
# A copy of fish's internal cd function. This makes it possible to use # A copy of fish's internal cd function. This makes it possible to use
# `alias cd=z` without causing an infinite loop. # `alias cd=z` without causing an infinite loop.
if ! builtin functions --query __zoxide_cd_internal if ! builtin functions --query __zoxide_cd_internal
if builtin functions --query cd if builtin functions --query cd
builtin functions --copy cd __zoxide_cd_internal builtin functions --copy cd __zoxide_cd_internal
else else
alias __zoxide_cd_internal='builtin cd' alias __zoxide_cd_internal='builtin cd'
end end
end end
# cd + custom logic based on the value of _ZO_ECHO. # cd + custom logic based on the value of _ZO_ECHO.
function __zoxide_cd function __zoxide_cd
__zoxide_cd_internal $argv __zoxide_cd_internal $argv
end end
# ============================================================================= # =============================================================================
# #
# Hook configuration for zoxide. # Hook configuration for zoxide.
# #
# Initialize hook to add new entries to the database. # Initialize hook to add new entries to the database.
function __zoxide_hook --on-variable PWD function __zoxide_hook --on-variable PWD
test -z "$fish_private_mode" test -z "$fish_private_mode"
and command zoxide add -- (__zoxide_pwd) and command zoxide add -- (__zoxide_pwd)
end end
# ============================================================================= # =============================================================================
# #
# When using zoxide with --no-cmd, alias these internal functions as desired. # When using zoxide with --no-cmd, alias these internal functions as desired.
# #
if test -z $__zoxide_z_prefix if test -z $__zoxide_z_prefix
set __zoxide_z_prefix 'z!' set __zoxide_z_prefix 'z!'
end end
set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix) set __zoxide_z_prefix_regex ^(string escape --style=regex $__zoxide_z_prefix)
# Jump to a directory using only keywords. # Jump to a directory using only keywords.
function __zoxide_z function __zoxide_z
set -l argc (count $argv) set -l argc (count $argv)
if test $argc -eq 0 if test $argc -eq 0
__zoxide_cd $HOME __zoxide_cd $HOME
else if test "$argv" = - else if test "$argv" = -
__zoxide_cd - __zoxide_cd -
else if test $argc -eq 1 -a -d $argv[1] else if test $argc -eq 1 -a -d $argv[1]
__zoxide_cd $argv[1] __zoxide_cd $argv[1]
else if set -l result (string replace --regex $__zoxide_z_prefix_regex \'\' $argv[-1]); and test -n $result else if set -l result (string replace --regex $__zoxide_z_prefix_regex \'\' $argv[-1]); and test -n $result
__zoxide_cd $result __zoxide_cd $result
else else
set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv) set -l result (command zoxide query --exclude (__zoxide_pwd) -- $argv)
and __zoxide_cd $result and __zoxide_cd $result
end end
end end
# Completions. # Completions.
function __zoxide_z_complete function __zoxide_z_complete
set -l tokens (commandline --current-process --tokenize) set -l tokens (commandline --current-process --tokenize)
set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize) set -l curr_tokens (commandline --cut-at-cursor --current-process --tokenize)
if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1 if test (count $tokens) -le 2 -a (count $curr_tokens) -eq 1
# If there are < 2 arguments, use `cd` completions. # If there are < 2 arguments, use `cd` completions.
complete --do-complete "\'\' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$' complete --do-complete "\'\' "(commandline --cut-at-cursor --current-token) | string match --regex '.*/$'
else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1] else if test (count $tokens) -eq (count $curr_tokens); and ! string match --quiet --regex $__zoxide_z_prefix_regex. $tokens[-1]
# If the last argument is empty and the one before doesn't start with # If the last argument is empty and the one before doesn't start with
# $__zoxide_z_prefix, use interactive selection. # $__zoxide_z_prefix, use interactive selection.
set -l query $tokens[2..-1] set -l query $tokens[2..-1]
set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query) set -l result (zoxide query --exclude (__zoxide_pwd) --interactive -- $query)
and echo $__zoxide_z_prefix$result and echo $__zoxide_z_prefix$result
commandline --function repaint commandline --function repaint
end end
end end
complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)' complete --command __zoxide_z --no-files --arguments '(__zoxide_z_complete)'
# Jump to a directory using interactive search. # Jump to a directory using interactive search.
function __zoxide_zi function __zoxide_zi
set -l result (command zoxide query --interactive -- $argv) set -l result (command zoxide query --interactive -- $argv)
and __zoxide_cd $result and __zoxide_cd $result
end end
# ============================================================================= # =============================================================================
# #
# Commands for zoxide. Disable these using --no-cmd. # Commands for zoxide. Disable these using --no-cmd.
# #
abbr --erase z &>/dev/null abbr --erase z &>/dev/null
alias z=__zoxide_z alias z=__zoxide_z
abbr --erase zi &>/dev/null abbr --erase zi &>/dev/null
alias zi=__zoxide_zi alias zi=__zoxide_zi
# ============================================================================= # =============================================================================
# #
# To initialize zoxide, add this to your configuration (usually # To initialize zoxide, add this to your configuration (usually
# ~/.config/fish/config.fish): # ~/.config/fish/config.fish):
# #
# zoxide init fish | source # zoxide init fish | source
direnv hook fish | source direnv hook fish | source
''; '';
}; };
} }

View file

@ -20,13 +20,14 @@ let
"e" = "d"; "e" = "d";
"f" = "e"; "f" = "e";
}; };
base = "#" + lib.strings.concatStrings ((lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00)) ++ [ hexTable."${(lib.lists.last (lib.strings.stringToCharacters scheme.base00))}" ]); base = "#" + lib.strings.concatStrings
in ((lib.lists.take 5 (lib.strings.stringToCharacters scheme.base00)) ++ [
{ hexTable."${(lib.lists.last
(lib.strings.stringToCharacters scheme.base00))}"
]);
in {
stylix.targets.kitty = { stylix.targets.kitty = { enable = false; };
enable = false;
};
programs.kitty = { programs.kitty = {
enable = true; enable = true;

View file

@ -1,38 +1,39 @@
{ pkgs, ... }: { { pkgs, ... }: {
xdg.configFile."ncspot/config.toml".source = (pkgs.formats.toml { }).generate "ncspot" { xdg.configFile."ncspot/config.toml".source =
notify = true; (pkgs.formats.toml { }).generate "ncspot" {
shuffle = true; notify = true;
cover_max_scale = 2; shuffle = true;
initial_screen = "library"; cover_max_scale = 2;
library_tabs = [ "playlists" ]; initial_screen = "library";
theme = { library_tabs = [ "playlists" ];
background = "#1a1b26"; theme = {
primary = "#9aa5ce"; background = "#1a1b26";
secondary = "#414868"; primary = "#9aa5ce";
title = "#9ece6a"; secondary = "#414868";
playing = "#7aa2f7"; title = "#9ece6a";
playing_selected = "#bb9af7"; playing = "#7aa2f7";
playing_bg = "#24283b"; playing_selected = "#bb9af7";
highlight = "#c0caf5"; playing_bg = "#24283b";
highlight_bg = "#24283b"; highlight = "#c0caf5";
error = "#414868"; highlight_bg = "#24283b";
error_bg = "#f7768e"; error = "#414868";
statusbar = "#ff9e64"; error_bg = "#f7768e";
statusbar_progress = "#7aa2f7"; statusbar = "#ff9e64";
statusbar_bg = "#1a1b26"; statusbar_progress = "#7aa2f7";
cmdline = "#c0caf5"; statusbar_bg = "#1a1b26";
cmdline_bg = "#24283b"; cmdline = "#c0caf5";
search_match = "#f7768e"; cmdline_bg = "#24283b";
search_match = "#f7768e";
};
keybindings = {
"j" = "move left 1";
"k" = "move down 1";
"l" = "move up 1";
";" = "move right 1";
};
notification_format = {
title = "%artists";
body = "%title";
};
}; };
keybindings = {
"j" = "move left 1";
"k" = "move down 1";
"l" = "move up 1";
";" = "move right 1";
};
notification_format = {
title = "%artists";
body = "%title";
};
};
} }

View file

@ -1,3 +1,4 @@
{ pkgs, ... }: { { pkgs, ... }: {
xdg.configFile."neovide/config.toml".source = (pkgs.formats.toml { }).generate "neovide" { }; xdg.configFile."neovide/config.toml".source =
(pkgs.formats.toml { }).generate "neovide" { };
} }

File diff suppressed because it is too large Load diff

View file

@ -1,9 +1,2 @@
{ { imports = [ ./oxipaste.nix ./oxinoti.nix ./oxishut.nix ./oxidash.nix ]; }
imports = [
./oxipaste.nix
./oxinoti.nix
./oxishut.nix
./oxidash.nix
];
}

View file

@ -1,53 +1,52 @@
{ {
xdg.configFile."oxidash/style.css" = { xdg.configFile."oxidash/style.css" = {
text = text = ''
'' #MainWindow {
#MainWindow { border-radius: 10px;
border-radius: 10px; }
}
#MainBox { #MainBox {
border-radius: 10px; border-radius: 10px;
} }
#MainButtonBox { #MainButtonBox {
padding: 10px; padding: 10px;
margin: 5px 0px 5px 0px; margin: 5px 0px 5px 0px;
border-radius: 5px; border-radius: 5px;
border: solid 2px #327cd5; border: solid 2px #327cd5;
} }
#DoNotDisturbButton { #DoNotDisturbButton {
} }
#ExitButton { #ExitButton {
} }
#ClearNotificationsButton { #ClearNotificationsButton {
} }
#NotificationsWindow { #NotificationsWindow {
} }
.debugimage { .debugimage {
border: solid 3px blue; border: solid 3px blue;
} }
.Notification { .Notification {
padding: 10px; padding: 10px;
margin: 5px 0px 5px 0px; margin: 5px 0px 5px 0px;
border: solid 2px #327cd5; border: solid 2px #327cd5;
border-radius: 5px; border-radius: 5px;
} }
.CloseNotificationButton { .CloseNotificationButton {
margin: 0px 5px 0px 10px; margin: 0px 5px 0px 10px;
}
.PictureButtonBox {
}
.BaseBox {
}
} }
.PictureButtonBox { '';
}
.BaseBox {
}
}
'';
}; };
} }

View file

@ -1,6 +1,6 @@
{ config, ... }: { { config, ... }: {
xdg.configFile."oxinoti/style.css" = { xdg.configFile."oxinoti/style.css" = {
text = /*css*/ text = # css
'' ''
@import url("/home/${config.conf.username}/.config/gtk-3.0/gtk.css"); @import url("/home/${config.conf.username}/.config/gtk-3.0/gtk.css");

View file

@ -1,31 +1,30 @@
{ {
xdg.configFile."oxipaste/style.css" = { xdg.configFile."oxipaste/style.css" = {
text = text = ''
'' .main-window {
.main-window { padding: 10px;
padding: 10px; border-radius: 10px;
border-radius: 10px; border: 2px solid #2AC3DE;
border: 2px solid #2AC3DE; }
}
.item-window { .item-window {
padding: 10px; padding: 10px;
border-radius: 10px; border-radius: 10px;
border: 2px solid #C0CAF5; border: 2px solid #C0CAF5;
} }
.item-button { .item-button {
background-color: #1A1B26; background-color: #1A1B26;
border-radius: 5px; border-radius: 5px;
border: 1px solid #6D728D; border: 1px solid #6D728D;
} }
.delete-button { .delete-button {
margin: 5px 25px 5px 5px; margin: 5px 25px 5px 5px;
} }
.item-box { .item-box {
} }
''; '';
}; };
} }

View file

@ -1,25 +1,24 @@
{ {
xdg.configFile."oxishut/style.css" = { xdg.configFile."oxishut/style.css" = {
text = text = ''
'' #mainwindow {
#mainwindow { border-radius: 10px;
border-radius: 10px; }
}
.mainbox { .mainbox {
border-radius: 5px; border-radius: 5px;
padding: 20px; padding: 20px;
} }
.button { .button {
margin: 5px; margin: 5px;
background-color: #2b2c3b; background-color: #2b2c3b;
-gtk-icon-size: 5rem; -gtk-icon-size: 5rem;
} }
.button:hover { .button:hover {
background-color: #3e4152; background-color: #3e4152;
} }
''; '';
}; };
} }

View file

@ -2,48 +2,42 @@
{ config, pkgs, lib, ... }: { config, pkgs, lib, ... }:
let let
username = config.mods.nextcloud.username; username = config.mods.nextcloud.username;
password = if (config.sops.secrets?nextcloud.path) then config.sops.secrets.nextcloud.path else ""; password = if (config.sops.secrets ? nextcloud.path) then
config.sops.secrets.nextcloud.path
else
"";
url = config.mods.nextcloud.url; url = config.mods.nextcloud.url;
synclist = config.mods.nextcloud.synclist; synclist = config.mods.nextcloud.synclist;
in in lib.mkIf config.mods.nextcloud.enable {
lib.mkIf config.mods.nextcloud.enable {
systemd.user = { systemd.user = {
services = services = (builtins.listToAttrs (map (opts: {
(builtins.listToAttrs name = "${opts.name}";
(map value = {
(opts: { Unit = {
name = "${opts.name}"; Description = "Auto sync Nextcloud";
value = { After = "network-online.target";
Unit = { };
Description = "Auto sync Nextcloud"; Service = {
After = "network-online.target"; Type = "simple";
}; ExecStart =
Service = { "${pkgs.bash}/bin/bash -c '${pkgs.nextcloud-client}/bin/nextcloudcmd -h --path ${opts.remote} ${opts.local} https://${username}:$(bat ${password})@${url}'";
Type = "simple"; TimeoutStopSec = "180";
ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.nextcloud-client}/bin/nextcloudcmd -h --path ${opts.remote} ${opts.local} https://${username}:$(bat ${password})@${url}'"; KillMode = "process";
TimeoutStopSec = "180"; KillSignal = "SIGINT";
KillMode = "process"; };
KillSignal = "SIGINT"; Install.WantedBy = [ "multi-user.target" ];
}; };
Install.WantedBy = [ "multi-user.target" ]; }) synclist));
}; timers = (builtins.listToAttrs (map (opts: {
}) name = "${opts.name}";
synclist value = {
)); Unit.Description =
timers = "Automatic sync files with Nextcloud when booted up after 1 minute then rerun every 60 minutes";
(builtins.listToAttrs Timer.OnBootSec = "1min";
(map Timer.OnUnitActiveSec = "60min";
(opts: { Install.WantedBy = [ "multi-user.target" "timers.target" ];
name = "${opts.name}"; };
value = { }) synclist));
Unit.Description = "Automatic sync files with Nextcloud when booted up after 1 minute then rerun every 60 minutes";
Timer.OnBootSec = "1min";
Timer.OnUnitActiveSec = "60min";
Install.WantedBy = [ "multi-user.target" "timers.target" ];
};
})
synclist
));
startServices = true; startServices = true;
}; };
} }

View file

@ -1,6 +1,2 @@
{ { imports = [ ./qt.nix ]; }
imports = [
./qt.nix
];
}

View file

@ -22,91 +22,82 @@ let
border: none; border: none;
} }
''; '';
in in {
{ xdg.configFile."qt5ct/colors/tokyonight.conf" = { text = "${color}"; };
xdg.configFile."qt5ct/colors/tokyonight.conf" = { xdg.configFile."qt6ct/colors/tokyonight.conf" = { text = "${color}"; };
text = "${color}"; xdg.configFile."qt5ct/qss/tab.qss" = { text = "${qss}"; };
};
xdg.configFile."qt6ct/colors/tokyonight.conf" = {
text = "${color}";
};
xdg.configFile."qt5ct/qss/tab.qss" = {
text = "${qss}";
};
xdg.configFile."qt5ct/qt5ct.conf" = { xdg.configFile."qt5ct/qt5ct.conf" = {
text = text = ''
'' [Appearance]
[Appearance] color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf
color_scheme_path=/home/${username}/.config/qt5ct/colors/tokyonight.conf custom_palette=true
custom_palette=true icon_theme=MoreWaita
icon_theme=MoreWaita standard_dialogs=gtk3
standard_dialogs=gtk3 style=Breeze
style=Breeze
[Fonts] [Fonts]
fixed="Noto Sans,12,-1,5,50,0,0,0,0,0" fixed="Noto Sans,12,-1,5,50,0,0,0,0,0"
general="Noto Sans,12,-1,5,50,0,0,0,0,0" general="Noto Sans,12,-1,5,50,0,0,0,0,0"
[Interface] [Interface]
activate_item_on_single_click=2 activate_item_on_single_click=2
buttonbox_layout=3 buttonbox_layout=3
cursor_flash_time=1000 cursor_flash_time=1000
dialog_buttons_have_icons=0 dialog_buttons_have_icons=0
double_click_interval=400 double_click_interval=400
gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox
keyboard_scheme=4 keyboard_scheme=4
menus_have_icons=true menus_have_icons=true
show_shortcuts_in_context_menus=true show_shortcuts_in_context_menus=true
stylesheets=/home/${username}/.config/qt5ct/qss/tab.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/fusion-fixes.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/scrollbar-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/sliders-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/tooltip-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/traynotification-simple.qss stylesheets=/home/${username}/.config/qt5ct/qss/tab.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/fusion-fixes.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/scrollbar-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/sliders-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/tooltip-simple.qss, /nix/store/5713p1pv913a6fsn8j7z6ndikcwikbcd-qt5ct-1.8/share/qt5ct/qss/traynotification-simple.qss
toolbutton_style=4 toolbutton_style=4
underline_shortcut=0 underline_shortcut=0
wheel_scroll_lines=3 wheel_scroll_lines=3
[SettingsWindow] [SettingsWindow]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q\0\0\n\0\0\0\0\0\0\0\r[\0\0\x5\x7f\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q) geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q\0\0\n\0\0\0\0\0\0\0\r[\0\0\x5\x7f\0\0\0\0\x2\0\0\0\rp\0\0\n\0\0\0\0\0\0\0\rK\0\0\x5q)
[Troubleshooting] [Troubleshooting]
force_raster_widgets=1 force_raster_widgets=1
ignored_applications=@Invalid() ignored_applications=@Invalid()
''; '';
}; };
xdg.configFile."qt6ct/qt6ct.conf" = { xdg.configFile."qt6ct/qt6ct.conf" = {
text = text = ''
'' [Appearance]
[Appearance] color_scheme_path=/home/${username}/.config/qt6ct/colors/toykonight.conf
color_scheme_path=/home/${username}/.config/qt6ct/colors/toykonight.conf custom_palette=true
custom_palette=true standard_dialogs=default
standard_dialogs=default style=Adwaita-Dark
style=Adwaita-Dark
[Fonts] [Fonts]
fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" fixed="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
general="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1" general="DejaVu LGC Sans,12,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
[Interface] [Interface]
activate_item_on_single_click=2 activate_item_on_single_click=2
buttonbox_layout=3 buttonbox_layout=3
cursor_flash_time=1000 cursor_flash_time=1000
dialog_buttons_have_icons=0 dialog_buttons_have_icons=0
double_click_interval=400 double_click_interval=400
gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox gui_effects=General, AnimateMenu, AnimateCombo, AnimateTooltip, AnimateToolBox
keyboard_scheme=4 keyboard_scheme=4
menus_have_icons=true menus_have_icons=true
show_shortcuts_in_context_menus=true show_shortcuts_in_context_menus=true
stylesheets=@Invalid() stylesheets=@Invalid()
toolbutton_style=4 toolbutton_style=4
underline_shortcut=1 underline_shortcut=1
wheel_scroll_lines=3 wheel_scroll_lines=3
[PaletteEditor] [PaletteEditor]
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4) geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4\0\0\0\0\0\0\0\0\a\x80\0\0\0\0\0\0\0\0\0\0\x2\x30\0\0\x1\xf4)
[SettingsWindow] [SettingsWindow]
geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\rp\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,)" geometry="@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,\0\0\0\0\0\0\0\0\rp\0\0\0\0\0\0\0\0\0\0\x3\xec\0\0\x3,)"
[Troubleshooting] [Troubleshooting]
force_raster_widgets=1 force_raster_widgets=1
ignored_applications=@Invalid() ignored_applications=@Invalid()
''; '';
}; };
} }

View file

@ -1,8 +1,6 @@
# Copyright (c) 2020-2021 Mihai Fufezan # Copyright (c) 2020-2021 Mihai Fufezan
# credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix # credits to fufexan https://github.com/fufexan/dotfiles/blob/main/home/terminal/programs/xdg.nix
{ config { config, ... }:
, ...
}:
let let
browser = [ "firefox" ]; browser = [ "firefox" ];
imageViewer = [ "imv" ]; imageViewer = [ "imv" ];
@ -10,32 +8,28 @@ let
audioPlayer = [ "io.bassi.Amberol" ]; audioPlayer = [ "io.bassi.Amberol" ];
xdgAssociations = type: program: list: xdgAssociations = type: program: list:
builtins.listToAttrs (map builtins.listToAttrs (map (e: {
(e: { name = "${type}/${e}";
name = "${type}/${e}"; value = program;
value = program; }) list);
})
list);
image = xdgAssociations "image" imageViewer [ "png" "svg" "jpeg" "gif" ]; image = xdgAssociations "image" imageViewer [ "png" "svg" "jpeg" "gif" ];
video = xdgAssociations "video" videoPlayer [ "mp4" "avi" "mkv" ]; video = xdgAssociations "video" videoPlayer [ "mp4" "avi" "mkv" ];
audio = xdgAssociations "audio" audioPlayer [ "mp3" "flac" "wav" "aac" ]; audio = xdgAssociations "audio" audioPlayer [ "mp3" "flac" "wav" "aac" ];
browserTypes = browserTypes = (xdgAssociations "application" browser [
(xdgAssociations "application" browser [ "json"
"json" "x-extension-htm"
"x-extension-htm" "x-extension-html"
"x-extension-html" "x-extension-shtml"
"x-extension-shtml" "x-extension-xht"
"x-extension-xht" "x-extension-xhtml"
"x-extension-xhtml" ]) // (xdgAssociations "x-scheme-handler" browser [
]) "about"
// (xdgAssociations "x-scheme-handler" browser [ "ftp"
"about" "http"
"ftp" "https"
"http" "unknown"
"https" ]);
"unknown"
]);
# XDG MIME types # XDG MIME types
associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) ({ associations = builtins.mapAttrs (_: v: (map (e: "${e}.desktop") v)) ({
@ -44,13 +38,8 @@ let
"text/plain" = [ "neovide" ]; "text/plain" = [ "neovide" ];
"x-scheme-handler/chrome" = [ "com.brave.browser" ]; "x-scheme-handler/chrome" = [ "com.brave.browser" ];
"inode/directory" = [ "yazi" ]; "inode/directory" = [ "yazi" ];
} } // image // video // audio // browserTypes);
// image in {
// video
// audio
// browserTypes);
in
{
xdg = { xdg = {
enable = true; enable = true;
cacheHome = config.home.homeDirectory + "/.local/cache"; cacheHome = config.home.homeDirectory + "/.local/cache";