Compare commits
6 Commits
master
...
feat_parts
Author | SHA1 | Date | |
---|---|---|---|
054b92e5e3 | |||
05f5ca0f91 | |||
1d42e5fd1e | |||
472817d1da | |||
55e4c663f4 | |||
196683aceb |
1
.gitignore
vendored
1
.gitignore
vendored
@ -1 +0,0 @@
|
||||
result
|
24
Justfile
24
Justfile
@ -1,24 +0,0 @@
|
||||
default: nova
|
||||
|
||||
all: nova (nova "music")
|
||||
|
||||
nova config="nova":
|
||||
#!/usr/bin/env sh
|
||||
cfg={{config}}
|
||||
if [ "$cfg" != "nova" ]; then
|
||||
cfg="nova-{{config}}"
|
||||
fi
|
||||
doas nixos-rebuild switch --flake ./#"$cfg"
|
||||
|
||||
update:
|
||||
nix flake update
|
||||
|
||||
clean:
|
||||
nix-collect-garbage --delete-older-than 90d
|
||||
doas nix-collect-garbage --delete-older-than 90d
|
||||
|
||||
generate format="install-iso" config="install-iso":
|
||||
nix shell nixpkgs#nixos-generators --command nixos-generate -f {{format}} --flake ./#{{config}}
|
||||
|
||||
vps:
|
||||
nixos-rebuild switch --flake ./#vps --target-host root@37.205.13.29
|
53
README.md
53
README.md
@ -1,26 +1,39 @@
|
||||
# NixOS configurations
|
||||
# My personal nixos config.
|
||||
|
||||
This repository aims to configure everything I use for all my machines.
|
||||
### Usage
|
||||
|
||||
### Goals
|
||||
To build the base system for my craptop:
|
||||
|
||||
- Provide me with something that I personally can use.
|
||||
- Make it modular so that it can be reused by other people or me on other people's machines (my company's workstation).
|
||||
|
||||
### How to use
|
||||
|
||||
[Check the home-manager modules](./home/modules/default.nix)
|
||||
|
||||
[Check the NixOS modules](./nixos/modules/default.nix)
|
||||
|
||||
These are exposed in the following way
|
||||
|
||||
`<this-flake>.homeManagerModules.<module>`
|
||||
|
||||
`<this-flake>.nixosModules.<module>`
|
||||
|
||||
Run the following for more info:
|
||||
```bash
|
||||
nix flake show github:ivandimitrov8080/configuration.nix
|
||||
sudo nixos-rebuild switch --flake github:ivandimitrov8080/configuration.nix#laptop
|
||||
```
|
||||
|
||||
To build ivand home:
|
||||
|
||||
```bash
|
||||
home-manager switch --flake github:ivandimitrov8080/configuration.nix#ivand
|
||||
```
|
||||
|
||||
To reuse modules:
|
||||
|
||||
in your flake.nix:
|
||||
```nix
|
||||
inputs.ivan-mods = {
|
||||
url = "github:ivandimitrov8080/configuration.nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
outputs = {self, nixpkgs, ivan-mods, ...}:{
|
||||
...
|
||||
homeConfigurations = {
|
||||
my-user = home-manager.lib.homeManagerConfiguration {
|
||||
inherit pkgs;
|
||||
modules = with ivan-mods.modules.home; [
|
||||
programs.nvim
|
||||
programs.zsh
|
||||
];
|
||||
};
|
||||
};
|
||||
...
|
||||
};
|
||||
```
|
||||
|
||||
|
35
bin/bingwp
Executable file
35
bin/bingwp
Executable file
@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env nu
|
||||
|
||||
let today = (date now | format date '%Y-%m-%d')
|
||||
let pic_dir = (xdg-user-dir PICTURES)
|
||||
let bg_dir = $pic_dir | path join "bg"
|
||||
let today_img_file = $bg_dir | path join ( [ $today, ".png" ] | str join )
|
||||
let is_new = ((date now | format date "%H" | into int) >= 10)
|
||||
mkdir $bg_dir
|
||||
|
||||
def exists [file: path] {
|
||||
return ($file | path exists)
|
||||
}
|
||||
|
||||
def is_empty [file: path] {
|
||||
return ((exists $file) and ((ls $file | get size | first | into int) == 0))
|
||||
}
|
||||
|
||||
def fetch [] {
|
||||
http get ("https://bing.com" + ((http get https://www.bing.com/HPImageArchive.aspx?format=js&n=1).images.0.url)) | save $today_img_file
|
||||
}
|
||||
|
||||
def cleanup [] {
|
||||
if (is_empty $today_img_file) {
|
||||
rm -rf $today_img_file
|
||||
}
|
||||
}
|
||||
|
||||
cleanup
|
||||
|
||||
if $is_new and (not (exists $today_img_file)) {
|
||||
fetch
|
||||
/run/current-system/sw/bin/ln -sf $today_img_file ( $pic_dir | path join "bg.png" )
|
||||
}
|
||||
|
||||
cleanup
|
3
bin/i2p
Executable file
3
bin/i2p
Executable file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
chromium --proxy-server=127.0.0.1:4444
|
22
bin/ks
Executable file
22
bin/ks
Executable file
@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
doc_dir=$(xdg-user-dir DOCUMENTS)
|
||||
ks_dir="$doc_dir/ks"
|
||||
name="$1"
|
||||
full_path="$ks_dir/$name.md.gpg"
|
||||
tmpfile="/tmp/$name.md"
|
||||
|
||||
mkdir -p "$ks_dir"
|
||||
cd "$ks_dir"
|
||||
|
||||
if [ -f "$full_path" ]; then
|
||||
gpg --decrypt -o "$tmpfile" "$full_path"
|
||||
else
|
||||
touch "$tmpfile"
|
||||
fi
|
||||
|
||||
$EDITOR "$tmpfile"
|
||||
|
||||
gpg --encrypt -r ivan@idimitrov.dev -o "$full_path" "$tmpfile"
|
||||
|
||||
git add . && git commit -m "editing $name" && git push --set-upstream origin HEAD
|
5
bin/purge-home
Executable file
5
bin/purge-home
Executable file
@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cd "$HOME"
|
||||
|
||||
rm -rf .visualvm .bin .npm .cache .cargo .librewolf .mupdf.history .ollama .psql_history .python_history .sbt .tldrc .zcompdump .viminfo .wireguard
|
30
bin/screenshot
Executable file
30
bin/screenshot
Executable file
@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env nu
|
||||
|
||||
let tmp_img = "/tmp/screen.png" | path join
|
||||
let ss_dir = ((xdg-user-dir PICTURES | str trim) | path join "ss")
|
||||
let pic_dir = ($ss_dir | path join ((date now | format date) | str join ".png"))
|
||||
|
||||
mkdir $ss_dir
|
||||
|
||||
def copy_image [] {
|
||||
open $pic_dir | wl-copy
|
||||
}
|
||||
|
||||
def prepare_screen [] {
|
||||
let grim_id = pueue add -i -p grim $tmp_img
|
||||
let imv_id = pueue add -a $grim_id -p imv -f $tmp_img
|
||||
grim -g $"(slurp -b '#FFFFFF00' -c '#FF0000FF')" $pic_dir
|
||||
pueue kill $imv_id $grim_id
|
||||
pueue wait
|
||||
pueue remove $imv_id $grim_id
|
||||
}
|
||||
|
||||
def "main area" [] {
|
||||
prepare_screen
|
||||
copy_image
|
||||
}
|
||||
|
||||
def main [] {
|
||||
grim $pic_dir
|
||||
copy_image
|
||||
}
|
3
bin/srvsts
Executable file
3
bin/srvsts
Executable file
@ -0,0 +1,3 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
ssh -n vpsfree-root 'cat /var/log/nginx/access.log' | goaccess --datetime-format='%d/%b/%Y:%H:%M:%S %z' --log-format='COMBINED'
|
16
default.nix
16
default.nix
@ -1,15 +1,23 @@
|
||||
top@{ inputs, ... }: {
|
||||
imports = [ ./nixos ./home ./packages ./overlays ./hardware-configurations ];
|
||||
imports = [ ./nixos ./home ];
|
||||
systems = [ "x86_64-linux" ];
|
||||
flake.stateVersion = "24.05";
|
||||
perSystem = { system, ... }: {
|
||||
perSystem = perSystem@{ system, ... }: {
|
||||
config._module.args = {
|
||||
pkgs = import inputs.nixpkgs {
|
||||
inherit system;
|
||||
overlays = [
|
||||
top.config.flake.overlays.default
|
||||
(final: prev: {
|
||||
nvim = inputs.ide.nvim.${system}.standalone {
|
||||
plugins.lsp.servers = {
|
||||
bashls.enable = true;
|
||||
nushell.enable = true;
|
||||
};
|
||||
};
|
||||
scripts = (prev.buildEnv { name = "scripts"; paths = [ ./. ]; });
|
||||
})
|
||||
];
|
||||
};
|
||||
stateVersion = "24.05";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
919
flake.lock
919
flake.lock
File diff suppressed because it is too large
Load Diff
25
flake.nix
25
flake.nix
@ -1,9 +1,8 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
vpsadminos.url = "github:vpsfreecz/vpsadminos";
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
url = "github:nix-community/home-manager/release-24.05";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
parts = {
|
||||
@ -18,25 +17,11 @@
|
||||
url = "github:ivandimitrov8080/flake-ide";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
sal = {
|
||||
url = "github:ivandimitrov8080/sal";
|
||||
inputs = {
|
||||
nixpkgs.follows = "nixpkgs";
|
||||
ide.follows = "ide";
|
||||
};
|
||||
};
|
||||
musnix = {
|
||||
url = "github:musnix/musnix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
simple-nixos-mailserver = {
|
||||
url = "gitlab:simple-nixos-mailserver/nixos-mailserver";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
webshite = {
|
||||
url = "github:ivandimitrov8080/idimitrov.dev";
|
||||
nid = {
|
||||
url = "github:nix-community/nix-index-database";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
catppuccin.url = "github:catppuccin/nix";
|
||||
};
|
||||
outputs = inputs: inputs.parts.lib.mkFlake { inherit inputs; } { imports = [ ./. ]; };
|
||||
}
|
||||
|
@ -1,30 +0,0 @@
|
||||
_: {
|
||||
flake.hardwareConfigurations = {
|
||||
nova = { lib, modulesPath, ... }: {
|
||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||
boot = {
|
||||
initrd = {
|
||||
availableKernelModules = [ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "sdhci_pci" ];
|
||||
kernelModules = [ ];
|
||||
luks.devices."nixos".device = "/dev/disk/by-uuid/712dd8ba-d5b4-438a-9a77-663b8c935cfe";
|
||||
};
|
||||
kernelModules = [ "kvm-intel" ];
|
||||
extraModulePackages = [ ];
|
||||
};
|
||||
fileSystems = {
|
||||
"/" = {
|
||||
device = "/dev/disk/by-uuid/47536cbe-7265-493b-a2e3-bbd376a6f9af";
|
||||
fsType = "btrfs";
|
||||
};
|
||||
"/boot" = {
|
||||
device = "/dev/disk/by-uuid/4C3C-993A";
|
||||
fsType = "vfat";
|
||||
};
|
||||
};
|
||||
swapDevices = [ ];
|
||||
networking.useDHCP = lib.mkForce true;
|
||||
nixpkgs.hostPlatform = lib.mkForce "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkForce false;
|
||||
};
|
||||
};
|
||||
}
|
3
home/configs/default.nix
Normal file
3
home/configs/default.nix
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
imports = [ ./ivand ];
|
||||
}
|
22
home/configs/ivand/default.nix
Normal file
22
home/configs/ivand/default.nix
Normal file
@ -0,0 +1,22 @@
|
||||
toplevel@{ inputs, withSystem, ... }:
|
||||
{
|
||||
flake.homeConfigurations.ivand = withSystem "x86_64-linux" (ctx@{ pkgs, stateVersion, ... }:
|
||||
inputs.home-manager.lib.homeManagerConfiguration {
|
||||
inherit pkgs;
|
||||
modules =
|
||||
let
|
||||
mods = toplevel.config.flake.homeManagerModules;
|
||||
in
|
||||
[
|
||||
{
|
||||
home.stateVersion = stateVersion;
|
||||
}
|
||||
inputs.nid.hmModules.nix-index
|
||||
mods.all
|
||||
mods.dev
|
||||
mods.essential
|
||||
mods.random
|
||||
inputs.catppuccin.homeManagerModules.catppuccin
|
||||
];
|
||||
});
|
||||
}
|
@ -1,3 +1,3 @@
|
||||
{
|
||||
imports = [./modules];
|
||||
imports = [ ./modules ./configs ];
|
||||
}
|
||||
|
@ -1,722 +1,3 @@
|
||||
toplevel @ { moduleWithSystem, ... }: {
|
||||
flake.homeManagerModules = {
|
||||
base = moduleWithSystem (
|
||||
_: { config, ... }: {
|
||||
programs.home-manager.enable = true;
|
||||
home.stateVersion = toplevel.config.flake.stateVersion;
|
||||
xdg = {
|
||||
enable = true;
|
||||
userDirs = with config; {
|
||||
enable = true;
|
||||
createDirectories = true;
|
||||
desktop = "${home.homeDirectory}/dt";
|
||||
documents = "${home.homeDirectory}/doc";
|
||||
download = "${home.homeDirectory}/dl";
|
||||
pictures = "${home.homeDirectory}/pic";
|
||||
videos = "${home.homeDirectory}/vid";
|
||||
templates = "${home.homeDirectory}/tpl";
|
||||
publicShare = "${home.homeDirectory}/pub";
|
||||
music = "${home.homeDirectory}/mus";
|
||||
};
|
||||
mimeApps.enable = true;
|
||||
};
|
||||
}
|
||||
);
|
||||
ivand = moduleWithSystem (
|
||||
_: { pkgs, ... }: {
|
||||
home = {
|
||||
username = "ivand";
|
||||
homeDirectory = "/home/ivand";
|
||||
sessionVariables = { EDITOR = "nvim"; };
|
||||
packages = with pkgs; [ nvim ];
|
||||
};
|
||||
programs = {
|
||||
git = with pkgs.lib; {
|
||||
userName = mkForce "Ivan Kirilov Dimitrov";
|
||||
userEmail = mkForce "ivan@idimitrov.dev";
|
||||
signing = mkForce {
|
||||
signByDefault = true;
|
||||
key = "ivan@idimitrov.dev";
|
||||
};
|
||||
};
|
||||
ssh = {
|
||||
matchBlocks = {
|
||||
vpsfree-ivand = {
|
||||
hostname = "10.0.0.1";
|
||||
user = "ivand";
|
||||
};
|
||||
vpsfree-root = {
|
||||
hostname = "10.0.0.1";
|
||||
user = "root";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
util = moduleWithSystem (
|
||||
_: { pkgs
|
||||
, config
|
||||
, ...
|
||||
}: {
|
||||
home = {
|
||||
packages = with pkgs; [ openssl mlocate uutils-coreutils-noprefix speedtest-cli ];
|
||||
sessionVariables = {
|
||||
PAGER = "bat";
|
||||
BAT_THEME = "catppuccin-mocha";
|
||||
};
|
||||
};
|
||||
programs = {
|
||||
password-store = {
|
||||
enable = true;
|
||||
package = pkgs.pass.withExtensions (e: with e; [ pass-otp pass-file ]);
|
||||
settings = { PASSWORD_STORE_DIR = "${config.home.homeDirectory}/.password-store"; };
|
||||
};
|
||||
git = {
|
||||
enable = true;
|
||||
delta.enable = true;
|
||||
extraConfig = {
|
||||
color.ui = "auto";
|
||||
pull.rebase = true;
|
||||
push.autoSetupRemote = true;
|
||||
};
|
||||
aliases = {
|
||||
a = "add .";
|
||||
c = "commit";
|
||||
d = "diff --cached";
|
||||
p = "push";
|
||||
pa = "!git remote | xargs -L1 git push --all";
|
||||
};
|
||||
};
|
||||
tealdeer = {
|
||||
enable = true;
|
||||
settings = {
|
||||
display = { compact = true; };
|
||||
updates = { auto_update = true; };
|
||||
};
|
||||
};
|
||||
bottom = {
|
||||
enable = true;
|
||||
settings = {
|
||||
flags = { rate = "250ms"; };
|
||||
row = [
|
||||
{
|
||||
ratio = 40;
|
||||
child = [{ type = "cpu"; } { type = "mem"; } { type = "net"; }];
|
||||
}
|
||||
{
|
||||
ratio = 35;
|
||||
child = [{ type = "temp"; } { type = "disk"; }];
|
||||
}
|
||||
{
|
||||
ratio = 40;
|
||||
child = [
|
||||
{
|
||||
type = "proc";
|
||||
default = true;
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
fzf = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
nix-index = {
|
||||
enable = true;
|
||||
enableZshIntegration = false;
|
||||
enableBashIntegration = false;
|
||||
};
|
||||
bat = {
|
||||
enable = true;
|
||||
themes =
|
||||
let
|
||||
catppuccin = pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "bat";
|
||||
rev = "82e7ca555f805b53d2b377390e4ab38c20282e83";
|
||||
sha256 = "sha256-/Ob9iCVyjJDBCXlss9KwFQTuxybmSSzYRBZxOT10PZg=";
|
||||
};
|
||||
in
|
||||
{
|
||||
catppuccin-mocha = {
|
||||
src = catppuccin;
|
||||
file = "themes/Catppuccin Mocha.tmTheme";
|
||||
};
|
||||
catppuccin-macchiato = {
|
||||
src = catppuccin;
|
||||
file = "themes/Catppuccin Macchiato.tmTheme";
|
||||
};
|
||||
catppuccin-frappe = {
|
||||
src = catppuccin;
|
||||
file = "themes/Catppuccin Frappe.tmTheme";
|
||||
};
|
||||
catppuccin-latte = {
|
||||
src = catppuccin;
|
||||
file = "themes/Catppuccin Latte.tmTheme";
|
||||
};
|
||||
};
|
||||
};
|
||||
ssh.enable = true;
|
||||
gpg.enable = true;
|
||||
};
|
||||
services = {
|
||||
gpg-agent = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
enableNushellIntegration = true;
|
||||
pinentryPackage = pkgs.pinentry-qt;
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
shell = moduleWithSystem (
|
||||
_: { pkgs, ... }: {
|
||||
programs =
|
||||
let
|
||||
shellAliases = {
|
||||
cal = "cal $(date +%Y)";
|
||||
GG = "git add . && git commit -m 'GG' && git push --set-upstream origin HEAD";
|
||||
gad = "git add . && git diff --cached";
|
||||
gac = "ga && gc";
|
||||
ga = "git add .";
|
||||
gc = "git commit";
|
||||
dev = "nix develop --command $SHELL";
|
||||
ls = "eza";
|
||||
la = "eza --all";
|
||||
lt = "eza --git-ignore --all --tree --level=10";
|
||||
sc = "systemctl";
|
||||
neofetch = "${pkgs.fastfetch}/bin/fastfetch -c all.jsonc";
|
||||
};
|
||||
sessionVariables = { };
|
||||
in
|
||||
{
|
||||
bash = {
|
||||
inherit shellAliases sessionVariables;
|
||||
enable = true;
|
||||
enableVteIntegration = true;
|
||||
historyControl = [ "erasedups" ];
|
||||
historyIgnore = [ "ls" "cd" "exit" ];
|
||||
};
|
||||
zsh = {
|
||||
inherit shellAliases sessionVariables;
|
||||
enable = true;
|
||||
dotDir = ".config/zsh";
|
||||
defaultKeymap = "viins";
|
||||
enableVteIntegration = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
autosuggestion.enable = true;
|
||||
history.expireDuplicatesFirst = true;
|
||||
historySubstringSearch.enable = true;
|
||||
};
|
||||
nushell = {
|
||||
enable = true;
|
||||
environmentVariables = { config = ''{ show_banner: false, completions: { quick: false partial: false algorithm: "prefix" } } ''; };
|
||||
shellAliases = {
|
||||
gcal = ''bash -c "cal $(date +%Y)" '';
|
||||
la = "ls -al";
|
||||
dev = "nix develop --command $env.SHELL";
|
||||
};
|
||||
};
|
||||
kitty.shellIntegration = {
|
||||
enableBashIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
tmux = {
|
||||
enable = true;
|
||||
clock24 = true;
|
||||
baseIndex = 1;
|
||||
escapeTime = 0;
|
||||
keyMode = "vi";
|
||||
shell = "\${SHELL}";
|
||||
terminal = "screen-256color";
|
||||
plugins = with pkgs.tmuxPlugins; [ tilish catppuccin ];
|
||||
extraConfig = ''
|
||||
set-option -a terminal-features 'screen-256color:RGB'
|
||||
'';
|
||||
};
|
||||
starship = {
|
||||
enable = true;
|
||||
enableNushellIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
eza = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
extraOptions = [
|
||||
"--long"
|
||||
"--header"
|
||||
"--icons"
|
||||
"--smart-group"
|
||||
"--mounts"
|
||||
"--octal-permissions"
|
||||
"--git"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
swayland = moduleWithSystem (
|
||||
_: { pkgs
|
||||
, config
|
||||
, ...
|
||||
}: {
|
||||
home = {
|
||||
packages = with pkgs; [ audacity gimp grim libnotify libreoffice-qt mupdf slurp transmission_4 wl-clipboard xdg-user-dirs xdg-utils xwayland telegram-desktop ];
|
||||
pointerCursor = with pkgs; {
|
||||
name = "catppuccin-mocha-green-cursors";
|
||||
package = catppuccin-cursors.mochaGreen;
|
||||
size = 24;
|
||||
gtk.enable = true;
|
||||
};
|
||||
};
|
||||
wayland.windowManager.sway = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
config = rec {
|
||||
menu = "rofi -show run";
|
||||
terminal = "kitty";
|
||||
modifier = "Mod4";
|
||||
startup = [
|
||||
{ command = "swaymsg 'workspace 2; exec firefox'"; }
|
||||
{ command = "swaymsg 'workspace 1; exec kitty'"; }
|
||||
];
|
||||
bars = [ ];
|
||||
window.titlebar = false;
|
||||
keybindings = pkgs.lib.mkOptionDefault {
|
||||
"F1" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
||||
"Shift+F1" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle";
|
||||
"F2" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -5%";
|
||||
"Shift+F2" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-volume @DEFAULT_SOURCE@ -5%";
|
||||
"F3" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%";
|
||||
"Shift+F3" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-volume @DEFAULT_SOURCE@ +5%";
|
||||
"F9" = "exec doas ${pkgs.light}/bin/light -A 10";
|
||||
"F8" = "exec doas ${pkgs.light}/bin/light -U 10";
|
||||
"Alt+Shift+l" = "exec ${pkgs.swaylock}/bin/swaylock";
|
||||
"${modifier}+p" = "exec ${menu}";
|
||||
"${modifier}+Shift+s" = "exec ${pkgs.screenshot}/bin/screenshot";
|
||||
"${modifier}+c" = "exec ${pkgs.sal}/bin/sal";
|
||||
"End" = "exec rofi -show calc";
|
||||
"${modifier}+Shift+r" = "reload";
|
||||
"${modifier}+Shift+c" = "kill";
|
||||
"${modifier}+Shift+q" = "exit";
|
||||
};
|
||||
input = {
|
||||
"*" = {
|
||||
xkb_layout = "us,bg";
|
||||
xkb_options = "grp:win_space_toggle";
|
||||
xkb_variant = ",phonetic";
|
||||
};
|
||||
};
|
||||
};
|
||||
swaynag = { inherit (config.wayland.windowManager.sway) enable; };
|
||||
};
|
||||
programs = {
|
||||
waybar = {
|
||||
enable = true;
|
||||
settings = {
|
||||
mainBar =
|
||||
{
|
||||
layer = "top";
|
||||
position = "top";
|
||||
height = 30;
|
||||
output = [ "eDP-1" "HDMI-A-1" "*" ];
|
||||
|
||||
modules-left = [ "sway/workspaces" "sway/mode" ];
|
||||
modules-center = [ "clock#week" "clock#year" "clock#time" ];
|
||||
modules-right = [ "network" "pulseaudio" "memory" "cpu" "battery" ];
|
||||
|
||||
"clock#time" = {
|
||||
format = "{:%H:%M:%S}";
|
||||
interval = 1;
|
||||
tooltip = false;
|
||||
};
|
||||
"clock#week" = {
|
||||
format = "{:%a}";
|
||||
tooltip = false;
|
||||
};
|
||||
"clock#year" = {
|
||||
format = "{:%Y-%m-%d}";
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
battery = {
|
||||
format = "{icon} <span color='#cdd6f4'>{capacity}% {time}</span>";
|
||||
format-time = " {H} h {M} m";
|
||||
format-icons = [ "" "" "" "" "" ];
|
||||
states = {
|
||||
warning = 30;
|
||||
critical = 15;
|
||||
};
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
cpu = { format = "<span color='#74c7ec'></span> {usage}%"; };
|
||||
|
||||
memory = {
|
||||
format = "<span color='#89b4fa'></span> {percentage}%";
|
||||
interval = 5;
|
||||
};
|
||||
|
||||
pulseaudio = {
|
||||
format = "<span color='#a6e3a1'>{icon}</span> {volume}% | {format_source}";
|
||||
format-muted = "<span color='#f38ba8'></span> {volume}% | {format_source}";
|
||||
format-source = "{volume}% <span color='#a6e3a1'></span>";
|
||||
format-source-muted = "{volume}% <span color='#f38ba8'></span>";
|
||||
format-icons = {
|
||||
headphone = "";
|
||||
default = [ "" "" "" ];
|
||||
};
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
network = {
|
||||
format-ethernet = "<span color='#89dceb'></span> | <span color='#fab387'></span> {bandwidthUpBytes} <span color='#fab387'></span> {bandwidthDownBytes}";
|
||||
format-wifi = "<span color='#06b6d4'>{icon}</span> | <span color='#fab387'></span> {bandwidthUpBytes} <span color='#fab387'></span> {bandwidthDownBytes}";
|
||||
format-disconnected = "<span color='#eba0ac'> no connection</span>";
|
||||
format-icons = [ "" "" "" "" ];
|
||||
interval = 5;
|
||||
tooltip = false;
|
||||
};
|
||||
|
||||
"sway/workspaces" = {
|
||||
disable-scroll = true;
|
||||
all-outputs = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
systemd = {
|
||||
enable = true;
|
||||
target = "sway-session.target";
|
||||
};
|
||||
style = ''
|
||||
@define-color rosewater #f5e0dc;
|
||||
@define-color flamingo #f2cdcd;
|
||||
@define-color pink #f5c2e7;
|
||||
@define-color mauve #cba6f7;
|
||||
@define-color red #f38ba8;
|
||||
@define-color maroon #eba0ac;
|
||||
@define-color peach #fab387;
|
||||
@define-color yellow #f9e2af;
|
||||
@define-color green #a6e3a1;
|
||||
@define-color teal #94e2d5;
|
||||
@define-color sky #89dceb;
|
||||
@define-color sapphire #74c7ec;
|
||||
@define-color blue #89b4fa;
|
||||
@define-color lavender #b4befe;
|
||||
@define-color text #cdd6f4;
|
||||
@define-color subtext1 #bac2de;
|
||||
@define-color subtext0 #a6adc8;
|
||||
@define-color overlay2 #9399b2;
|
||||
@define-color overlay1 #7f849c;
|
||||
@define-color overlay0 #6c7086;
|
||||
@define-color surface2 #585b70;
|
||||
@define-color surface1 #45475a;
|
||||
@define-color surface0 #313244;
|
||||
@define-color base #1e1e2e;
|
||||
@define-color mantle #181825;
|
||||
@define-color crust #11111b;
|
||||
* {
|
||||
font-family: FontAwesome, 'Fira Code';
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: rgba(43, 48, 59, 0.1);
|
||||
border-bottom: 2px solid rgba(100, 114, 125, 0.5);
|
||||
color: @rosewater;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 5px;
|
||||
background-color: @base;
|
||||
color: @text;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: @mantle;
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
background-color: @crust;
|
||||
box-shadow: inset 0 -2px @sky;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
background-color: @red;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#disk,
|
||||
#temperature,
|
||||
#backlight,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#wireplumber,
|
||||
#custom-media,
|
||||
#tray,
|
||||
#mode,
|
||||
#idle_inhibitor,
|
||||
#scratchpad,
|
||||
#power-profiles-daemon,
|
||||
#mpd {
|
||||
padding: 0 10px;
|
||||
color: @text;
|
||||
background-color: @base;
|
||||
margin: 0 .5em;
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
||||
#clock.week {
|
||||
margin-right: 0px;
|
||||
color: @peach;
|
||||
border-radius: 9999px 0px 0px 9999px;
|
||||
}
|
||||
|
||||
#clock.year {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
color: @pink;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
#clock.time {
|
||||
margin-left: 0px;
|
||||
color: @sky;
|
||||
border-radius: 0px 9999px 9999px 0px;
|
||||
}
|
||||
|
||||
#battery.charging, #battery.plugged {
|
||||
color: @green;
|
||||
}
|
||||
|
||||
#battery.discharging {
|
||||
color: @yellow;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: #ffffff;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
background-color: @red;
|
||||
}
|
||||
|
||||
/* Using steps() instead of linear as a timing function to limit cpu usage */
|
||||
#battery.critical:not(.charging) {
|
||||
background-color: @red;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: steps(12);
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
'';
|
||||
};
|
||||
swaylock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
show-failed-attempts = true;
|
||||
image = config.home.homeDirectory + "/pic/bg.png";
|
||||
};
|
||||
};
|
||||
rofi = {
|
||||
enable = true;
|
||||
package = pkgs.rofi-wayland.override {
|
||||
plugins = with pkgs; [
|
||||
(
|
||||
rofi-calc.override
|
||||
{
|
||||
rofi-unwrapped = rofi-wayland-unwrapped;
|
||||
}
|
||||
)
|
||||
];
|
||||
};
|
||||
extraConfig = {
|
||||
modi = "window,drun,run,ssh,calc";
|
||||
};
|
||||
};
|
||||
kitty = {
|
||||
enable = true;
|
||||
font = {
|
||||
package = pkgs.fira-code;
|
||||
name = "FiraCodeNFM-Reg";
|
||||
};
|
||||
settings = {
|
||||
background_opacity = "0.90";
|
||||
cursor_shape = "beam";
|
||||
};
|
||||
};
|
||||
imv = {
|
||||
enable = true;
|
||||
settings = { options.fullscreen = true; };
|
||||
};
|
||||
mpv = {
|
||||
enable = true;
|
||||
scripts = with pkgs.mpvScripts; [ uosc thumbfast ];
|
||||
};
|
||||
bash.profileExtra = ''[ "$(tty)" = "/dev/tty1" ] && exec sway '';
|
||||
zsh.loginExtra = ''[ "$(tty)" = "/dev/tty1" ] && exec sway '';
|
||||
nushell.loginFile.text = ''if (tty) == "/dev/tty1" { sway } '';
|
||||
};
|
||||
services = {
|
||||
mako.enable = true;
|
||||
cliphist = {
|
||||
enable = true;
|
||||
systemdTarget = "sway-session.target";
|
||||
};
|
||||
};
|
||||
systemd.user = {
|
||||
timers = {
|
||||
rbingwp = {
|
||||
Timer = {
|
||||
OnCalendar = "*-*-* 10:00:00";
|
||||
Persistent = true;
|
||||
};
|
||||
Install = { WantedBy = [ "timers.target" ]; };
|
||||
};
|
||||
};
|
||||
services = {
|
||||
wpd = {
|
||||
Install = { WantedBy = [ "sway-session.target" ]; };
|
||||
Unit = {
|
||||
Description = "Switch background every x minutes";
|
||||
After = "graphical-session-pre.target";
|
||||
PartOf = "graphical-session.target";
|
||||
};
|
||||
Service = {
|
||||
ExecStart = [ "${pkgs.wpd}/bin/wpd" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
xdg.mimeApps.defaultApplications = {
|
||||
"image/jpg" = "imv.desktop";
|
||||
"image/jpeg" = "imv.desktop";
|
||||
"image/png" = "imv.desktop";
|
||||
"image/webp" = "imv.desktop";
|
||||
"image/gif" = "imv.desktop";
|
||||
"image/svg+xml" = "imv.desktop";
|
||||
"video/mp4" = "mpv.desktop";
|
||||
"video/mpeg" = "mpv.desktop";
|
||||
"video/ogg" = "mpv.desktop";
|
||||
"video/webm" = "mpv.desktop";
|
||||
"video/x-msvideo" = "mpv.desktop";
|
||||
};
|
||||
}
|
||||
);
|
||||
web = moduleWithSystem (
|
||||
_: _: {
|
||||
programs = {
|
||||
browserpass.enable = true;
|
||||
firefox = {
|
||||
enable = true;
|
||||
profiles.ivand = {
|
||||
id = 0;
|
||||
search = {
|
||||
default = "DuckDuckGo";
|
||||
privateDefault = "DuckDuckGo";
|
||||
force = true;
|
||||
};
|
||||
bookmarks = [
|
||||
{
|
||||
name = "home-options";
|
||||
url = "https://nix-community.github.io/home-manager/options.xhtml";
|
||||
}
|
||||
{
|
||||
name = "nixvim-docs";
|
||||
url = "https://nix-community.github.io/nixvim/";
|
||||
}
|
||||
];
|
||||
settings = {
|
||||
"general.smoothScroll" = true;
|
||||
"signon.rememberSignons" = false;
|
||||
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
|
||||
"layout.frame_rate" = 60;
|
||||
};
|
||||
};
|
||||
policies = {
|
||||
CaptivePortal = false;
|
||||
DisableFirefoxStudies = true;
|
||||
DisablePocket = true;
|
||||
DisableTelemetry = true;
|
||||
DisableFirefoxAccounts = true;
|
||||
OfferToSaveLogins = false;
|
||||
OfferToSaveLoginsDefault = false;
|
||||
PasswordManagerEnabled = false;
|
||||
NoDefaultBookmarks = true;
|
||||
PopupBlocking.Default = false;
|
||||
PromptForDownloadLocation = false;
|
||||
TranslateEnabled = false;
|
||||
SearchBar = "unified";
|
||||
SearchSuggestEnabled = false;
|
||||
SanitizeOnShutdown = {
|
||||
Cache = true;
|
||||
FormData = true;
|
||||
Locked = true;
|
||||
Cookies = false;
|
||||
Downloads = false;
|
||||
History = false;
|
||||
Sessions = false;
|
||||
SiteSettings = false;
|
||||
OfflineApps = true;
|
||||
};
|
||||
FirefoxHome = {
|
||||
Search = true;
|
||||
Pocket = false;
|
||||
Snippets = false;
|
||||
TopSites = false;
|
||||
Highlights = false;
|
||||
};
|
||||
UserMessaging = {
|
||||
ExtensionRecommendations = false;
|
||||
FeatureRecommendations = false;
|
||||
UrlbarInterventions = false;
|
||||
MoreFromMozilla = false;
|
||||
SkipOnboarding = true;
|
||||
};
|
||||
|
||||
Handlers = {
|
||||
schemes = {
|
||||
mailto = {
|
||||
action = "useHelperApp";
|
||||
ask = false;
|
||||
handlers = [
|
||||
{
|
||||
name = "RoundCube";
|
||||
uriTemplate = "https://mail.idimitrov.dev/?_task=mail&_action=compose&_to=%s";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
chromium = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
xdg.mimeApps.defaultApplications = {
|
||||
"text/html" = "firefox.desktop";
|
||||
"x-scheme-handler/http" = "firefox.desktop";
|
||||
"x-scheme-handler/https" = "firefox.desktop";
|
||||
"x-scheme-handler/about" = "firefox.desktop";
|
||||
"x-scheme-handler/unknown" = "firefox.desktop";
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
imports = [ ./packages ];
|
||||
}
|
||||
|
146
home/modules/packages/default.nix
Normal file
146
home/modules/packages/default.nix
Normal file
@ -0,0 +1,146 @@
|
||||
{ moduleWithSystem, ... }: {
|
||||
flake.homeManagerModules = {
|
||||
dev = moduleWithSystem (
|
||||
top@{ ... }:
|
||||
perSystem@{ pkgs, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
openssh
|
||||
procs
|
||||
ripgrep
|
||||
fswatch
|
||||
nvim
|
||||
];
|
||||
}
|
||||
);
|
||||
essential = moduleWithSystem (
|
||||
top@{ ... }:
|
||||
perSystem@{ pkgs, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
gopass
|
||||
ffmpeg
|
||||
transmission
|
||||
];
|
||||
}
|
||||
);
|
||||
random = moduleWithSystem (
|
||||
top@{ ... }:
|
||||
perSystem@{ pkgs, ... }: {
|
||||
home.packages = with pkgs; [
|
||||
xonotic
|
||||
];
|
||||
}
|
||||
);
|
||||
all = moduleWithSystem
|
||||
(
|
||||
top@{ ... }:
|
||||
perSystem@{ pkgs, ... }:
|
||||
rec {
|
||||
imports = [ ../programs ];
|
||||
programs.home-manager = { enable = true; };
|
||||
catppuccin = {
|
||||
enable = true;
|
||||
flavor = "mocha";
|
||||
};
|
||||
|
||||
gtk = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
|
||||
home = rec {
|
||||
username = "ivand";
|
||||
homeDirectory = "/home/ivand";
|
||||
sessionPath = [
|
||||
"$HOME/.local/bin"
|
||||
];
|
||||
sessionVariables = {
|
||||
PASSWORD_STORE_DIR = "${homeDirectory}/.password-store";
|
||||
EDITOR = "nvim";
|
||||
PAGER = "bat";
|
||||
TERM = "screen-256color";
|
||||
};
|
||||
pointerCursor = {
|
||||
name = "Catppuccin-Mocha-Green-Cursors";
|
||||
package = pkgs.catppuccin-cursors.mochaGreen;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user = {
|
||||
timers = {
|
||||
rbingwp = {
|
||||
Timer = {
|
||||
OnCalendar = "*-*-* 10:00:00";
|
||||
Persistent = true;
|
||||
};
|
||||
Install = {
|
||||
WantedBy = [ "timers.target" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
services = {
|
||||
wpd = {
|
||||
Service = {
|
||||
Environment = [
|
||||
"PATH=${pkgs.xdg-user-dirs}/bin:${pkgs.swaybg}/bin"
|
||||
];
|
||||
ExecStart = [ "${pkgs.nushell}/bin/nu -c 'swaybg -i ((xdg-user-dir PICTURES) | path split | path join bg.png)'" ];
|
||||
};
|
||||
};
|
||||
bingwp = {
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
Environment = [
|
||||
"PATH=${pkgs.xdg-user-dirs}/bin:${pkgs.nushell}/bin"
|
||||
];
|
||||
ExecStart = [ "${pkgs.scripts}/bin/bingwp" ];
|
||||
};
|
||||
};
|
||||
rbingwp = {
|
||||
Install = {
|
||||
WantedBy = [ "sway-session.target" ];
|
||||
};
|
||||
Unit = {
|
||||
Description = "Restart bingwp and wpd services";
|
||||
After = "graphical-session-pre.target";
|
||||
PartOf = "graphical-session.target";
|
||||
};
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = [ "${pkgs.nushell}/bin/nu -c '${pkgs.systemd}/bin/systemctl --user restart bingwp.service; ${pkgs.systemd}/bin/systemctl --user restart wpd.service'" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
xdg = {
|
||||
enable = true;
|
||||
userDirs = {
|
||||
enable = true;
|
||||
createDirectories = true;
|
||||
desktop = "${home.homeDirectory}/dt";
|
||||
documents = "${home.homeDirectory}/doc";
|
||||
download = "${home.homeDirectory}/dl";
|
||||
pictures = "${home.homeDirectory}/pic";
|
||||
videos = "${home.homeDirectory}/vid";
|
||||
templates = "${home.homeDirectory}/tpl";
|
||||
publicShare = "${home.homeDirectory}/pub";
|
||||
music = "${home.homeDirectory}/mus";
|
||||
};
|
||||
mimeApps = {
|
||||
enable = true;
|
||||
defaultApplications = {
|
||||
"text/html" = "firefox.desktop";
|
||||
"x-scheme-handler/http" = "firefox.desktop";
|
||||
"x-scheme-handler/https" = "firefox.desktop";
|
||||
"x-scheme-handler/about" = "firefox.desktop";
|
||||
"x-scheme-handler/unknown" = "firefox.desktop";
|
||||
"x-scheme-handler/mailto" = "userapp-Thunderbird-LDALA2.desktop";
|
||||
"message/rfc822" = "userapp-Thunderbird-LDALA2.desktop";
|
||||
"x-scheme-handler/mid" = "userapp-Thunderbird-LDALA2.desktop";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
6
home/modules/programs/bat/default.nix
Normal file
6
home/modules/programs/bat/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
}
|
34
home/modules/programs/bottom/default.nix
Normal file
34
home/modules/programs/bottom/default.nix
Normal file
@ -0,0 +1,34 @@
|
||||
{
|
||||
programs.bottom = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
settings = {
|
||||
flags = {
|
||||
rate = "250ms";
|
||||
};
|
||||
row = [
|
||||
{
|
||||
ratio = 40;
|
||||
child = [
|
||||
{ type = "cpu"; }
|
||||
{ type = "mem"; }
|
||||
{ type = "net"; }
|
||||
];
|
||||
}
|
||||
{
|
||||
ratio = 35;
|
||||
child = [
|
||||
{ type = "temp"; }
|
||||
{ type = "disk"; }
|
||||
];
|
||||
}
|
||||
{
|
||||
ratio = 40;
|
||||
child = [
|
||||
{ type = "proc"; default = true; }
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
7
home/modules/programs/carapace/default.nix
Normal file
7
home/modules/programs/carapace/default.nix
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
programs.carapace = {
|
||||
enable = true;
|
||||
enableNushellIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
}
|
6
home/modules/programs/chromium/default.nix
Normal file
6
home/modules/programs/chromium/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.chromium = {
|
||||
enable = true;
|
||||
package = pkgs.ungoogled-chromium;
|
||||
};
|
||||
}
|
6
home/modules/programs/cliphist/default.nix
Normal file
6
home/modules/programs/cliphist/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
services.cliphist = {
|
||||
enable = true;
|
||||
systemdTarget = "sway-session.target";
|
||||
};
|
||||
}
|
6
home/modules/programs/comma/default.nix
Normal file
6
home/modules/programs/comma/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
programs = {
|
||||
nix-index-database.comma.enable = true;
|
||||
nix-index.enable = true;
|
||||
};
|
||||
}
|
30
home/modules/programs/default.nix
Normal file
30
home/modules/programs/default.nix
Normal file
@ -0,0 +1,30 @@
|
||||
{ ... }: {
|
||||
imports = [
|
||||
./bat
|
||||
./bottom
|
||||
./carapace
|
||||
./chromium
|
||||
./cliphist
|
||||
./comma
|
||||
./firefox
|
||||
./git
|
||||
./gpg
|
||||
./imv
|
||||
./mako
|
||||
./kitty
|
||||
./lf
|
||||
./mpv
|
||||
./nushell
|
||||
./obs-studio
|
||||
./pueue
|
||||
./rofi
|
||||
./starship
|
||||
./sway
|
||||
./swaylock
|
||||
./tealdeer
|
||||
./tmux
|
||||
./waybar
|
||||
./zsh
|
||||
];
|
||||
programs.browserpass.enable = true;
|
||||
}
|
74
home/modules/programs/firefox/default.nix
Normal file
74
home/modules/programs/firefox/default.nix
Normal file
@ -0,0 +1,74 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
profiles.ivand = {
|
||||
id = 0;
|
||||
search.default = "DuckDuckGo";
|
||||
bookmarks = [
|
||||
{
|
||||
name = "home-options";
|
||||
url = "https://nix-community.github.io/home-manager/options.xhtml";
|
||||
}
|
||||
{
|
||||
name = "nixvim-docs";
|
||||
url = "https://nix-community.github.io/nixvim/";
|
||||
}
|
||||
];
|
||||
settings = {
|
||||
"general.smoothScroll" = true;
|
||||
"signon.rememberSignons" = false;
|
||||
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
|
||||
"layout.frame_rate" = 120;
|
||||
};
|
||||
};
|
||||
policies = {
|
||||
CaptivePortal = false;
|
||||
DisableFirefoxStudies = true;
|
||||
DisablePocket = true;
|
||||
DisableTelemetry = true;
|
||||
DisableFirefoxAccounts = true;
|
||||
OfferToSaveLogins = false;
|
||||
OfferToSaveLoginsDefault = false;
|
||||
PasswordManagerEnabled = false;
|
||||
|
||||
FirefoxHome = {
|
||||
Search = true;
|
||||
Pocket = false;
|
||||
Snippets = false;
|
||||
TopSites = false;
|
||||
Highlights = false;
|
||||
};
|
||||
|
||||
UserMessaging = {
|
||||
ExtensionRecommendations = false;
|
||||
SkipOnboarding = true;
|
||||
};
|
||||
|
||||
Handlers = {
|
||||
schemes = {
|
||||
mailto = {
|
||||
action = "useHelperApp";
|
||||
ask = false;
|
||||
handlers = [
|
||||
{
|
||||
name = "RoundCube";
|
||||
uriTemplate = "https://mail.idimitrov.dev/?_task=mail&_action=compose&_to=%s";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
home = {
|
||||
file.".mozilla/native-messaging-hosts/gpgmejson.json".text = builtins.toJSON {
|
||||
name = "gpgmejson";
|
||||
description = "Integration with GnuPG";
|
||||
path = "${pkgs.gpgme.dev}/bin/gpgme-json";
|
||||
type = "stdio";
|
||||
allowed_extensions = [
|
||||
"jid1-AQqSMBYb0a8ADg@jetpack"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
23
home/modules/programs/git/default.nix
Normal file
23
home/modules/programs/git/default.nix
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
programs.git = {
|
||||
enable = true;
|
||||
delta.enable = true;
|
||||
userName = "Ivan Kirilov Dimitrov";
|
||||
userEmail = "ivan@idimitrov.dev";
|
||||
signing = {
|
||||
signByDefault = true;
|
||||
key = "ivan@idimitrov.dev";
|
||||
};
|
||||
extraConfig = {
|
||||
color.ui = "auto";
|
||||
pull.rebase = true;
|
||||
push.autoSetupRemote = true;
|
||||
};
|
||||
aliases = {
|
||||
a = "add .";
|
||||
c = "commit";
|
||||
d = "diff --cached";
|
||||
p = "push";
|
||||
};
|
||||
};
|
||||
}
|
11
home/modules/programs/gpg/default.nix
Normal file
11
home/modules/programs/gpg/default.nix
Normal file
@ -0,0 +1,11 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.gpg = {
|
||||
enable = true;
|
||||
};
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableNushellIntegration = true;
|
||||
pinentryPackage = pkgs.pinentry-qt;
|
||||
};
|
||||
}
|
6
home/modules/programs/imv/default.nix
Normal file
6
home/modules/programs/imv/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
programs.imv = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
}
|
15
home/modules/programs/kitty/default.nix
Normal file
15
home/modules/programs/kitty/default.nix
Normal file
@ -0,0 +1,15 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
font = {
|
||||
package = pkgs.fira-code;
|
||||
name = "FiraCodeNFM-Reg";
|
||||
};
|
||||
settings = {
|
||||
enable_tab_bar = false;
|
||||
background_opacity = "0.96";
|
||||
cursor_shape = "beam";
|
||||
};
|
||||
};
|
||||
}
|
12
home/modules/programs/lf/default.nix
Normal file
12
home/modules/programs/lf/default.nix
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
programs.lf = {
|
||||
enable = true;
|
||||
extraConfig = builtins.readFile ./lfrc;
|
||||
keybindings = {
|
||||
D = "trash";
|
||||
T = "touch";
|
||||
M = "mkdir";
|
||||
R = "mv";
|
||||
};
|
||||
};
|
||||
}
|
39
home/modules/programs/lf/lfrc
Normal file
39
home/modules/programs/lf/lfrc
Normal file
@ -0,0 +1,39 @@
|
||||
# Basic Settings
|
||||
set hidden true
|
||||
set ignorecase true
|
||||
set icons true
|
||||
|
||||
# Custom Functions
|
||||
|
||||
cmd trash ${{
|
||||
files=$(printf "$fx" | tr '\n' ';')
|
||||
while [ "$files" ]; do
|
||||
file=${files%%;*}
|
||||
|
||||
rm -rf "$(basename "$file")"
|
||||
if [ "$files" = "$file" ]; then
|
||||
files=''
|
||||
else
|
||||
files="${files#*;}"
|
||||
fi
|
||||
done
|
||||
}}
|
||||
|
||||
cmd mkdir ${{
|
||||
printf "Directory Name: "
|
||||
read ans
|
||||
mkdir "$ans"
|
||||
}}
|
||||
|
||||
cmd touch ${{
|
||||
printf "File Name: "
|
||||
read ans
|
||||
touch "$ans"
|
||||
}}
|
||||
|
||||
cmd mv ${{
|
||||
printf "Move to: "
|
||||
read ans
|
||||
mv "$f" "$ans"
|
||||
}}
|
||||
|
6
home/modules/programs/mako/default.nix
Normal file
6
home/modules/programs/mako/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
services.mako = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
}
|
6
home/modules/programs/mpv/default.nix
Normal file
6
home/modules/programs/mpv/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
}
|
3
home/modules/programs/neovim/default.nix
Normal file
3
home/modules/programs/neovim/default.nix
Normal file
@ -0,0 +1,3 @@
|
||||
{ nvim, ... }:
|
||||
nvim
|
||||
{ }
|
34
home/modules/programs/nushell/default.nix
Normal file
34
home/modules/programs/nushell/default.nix
Normal file
@ -0,0 +1,34 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.nushell = {
|
||||
enable = true;
|
||||
environmentVariables = {
|
||||
config = ''
|
||||
{
|
||||
show_banner: false,
|
||||
completions: {
|
||||
quick: false
|
||||
partial: false
|
||||
algorithm: "prefix"
|
||||
}
|
||||
}
|
||||
'';
|
||||
PATH = "($env.PATH | split row (char esep) | append ($env.HOME | path join .local bin))";
|
||||
};
|
||||
shellAliases = {
|
||||
gcal = ''
|
||||
bash -c "cal $(date +%Y)"
|
||||
'';
|
||||
la = "ls -al";
|
||||
dev = "nix develop --command $env.SHELL";
|
||||
torrent = "transmission-remote";
|
||||
vi = "nvim";
|
||||
sc = "systemctl";
|
||||
neofetch = "${pkgs.fastfetch}/bin/fastfetch -c all.jsonc";
|
||||
};
|
||||
loginFile.text = ''
|
||||
if (tty) == "/dev/tty1" {
|
||||
sway
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
6
home/modules/programs/obs-studio/default.nix
Normal file
6
home/modules/programs/obs-studio/default.nix
Normal file
@ -0,0 +1,6 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.obs-studio = {
|
||||
enable = true;
|
||||
plugins = with pkgs.obs-studio-plugins; [ wlrobs ];
|
||||
};
|
||||
}
|
5
home/modules/programs/pueue/default.nix
Normal file
5
home/modules/programs/pueue/default.nix
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
services.pueue = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
19
home/modules/programs/rofi/default.nix
Normal file
19
home/modules/programs/rofi/default.nix
Normal file
@ -0,0 +1,19 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.rofi = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
package = pkgs.rofi-wayland.override {
|
||||
plugins = with pkgs; [
|
||||
(
|
||||
rofi-calc.override
|
||||
{
|
||||
rofi-unwrapped = rofi-wayland-unwrapped;
|
||||
}
|
||||
)
|
||||
];
|
||||
};
|
||||
extraConfig = {
|
||||
modi = "window,drun,run,ssh,calc";
|
||||
};
|
||||
};
|
||||
}
|
8
home/modules/programs/starship/default.nix
Normal file
8
home/modules/programs/starship/default.nix
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
enableNushellIntegration = true;
|
||||
enableZshIntegration = true;
|
||||
};
|
||||
}
|
68
home/modules/programs/sway/default.nix
Normal file
68
home/modules/programs/sway/default.nix
Normal file
@ -0,0 +1,68 @@
|
||||
{ pkgs, ... }: {
|
||||
wayland.windowManager.sway = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
systemd.enable = true;
|
||||
config = rec {
|
||||
menu = "rofi -show run";
|
||||
terminal = "kitty";
|
||||
modifier = "Mod4";
|
||||
startup = [
|
||||
{ command = "swaymsg 'workspace 1; exec kitty'"; }
|
||||
{ command = "swaymsg 'workspace 2; exec firefox'"; }
|
||||
];
|
||||
bars = [ ];
|
||||
window.titlebar = false;
|
||||
keybindings = pkgs.lib.mkOptionDefault {
|
||||
# System
|
||||
"End" = "exec systemctl poweroff";
|
||||
"Insert" = "exec systemctl reboot";
|
||||
# Audio
|
||||
"XF86AudioMicMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-mute @DEFAULT_SOURCE@ toggle";
|
||||
"XF86AudioRaiseVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ +5%";
|
||||
"XF86AudioLowerVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-volume @DEFAULT_SINK@ -5%";
|
||||
"Alt+XF86AudioRaiseVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-volume @DEFAULT_SOURCE@ +5%";
|
||||
"Alt+XF86AudioLowerVolume" = "exec ${pkgs.pulseaudio}/bin/pactl set-source-volume @DEFAULT_SOURCE@ -5%";
|
||||
"XF86AudioMute" = "exec ${pkgs.pulseaudio}/bin/pactl set-sink-mute @DEFAULT_SINK@ toggle";
|
||||
# Display
|
||||
"Alt+Shift+l" = "exec ${pkgs.swaylock}/bin/swaylock"; # Lock screen
|
||||
"XF86ScreenSaver" = "output 'eDP-1' toggle"; # Turn screen off
|
||||
"XF86MonBrightnessUp" = "exec doas ${pkgs.light}/bin/light -A 10";
|
||||
"XF86MonBrightnessDown" = "exec doas ${pkgs.light}/bin/light -U 10";
|
||||
# Programs
|
||||
"${modifier}+p" = "exec ${menu}";
|
||||
"${modifier}+Shift+a" = "exec screenshot area";
|
||||
"${modifier}+Shift+s" = "exec screenshot";
|
||||
"XF86Calculator" = "exec rofi -show calc";
|
||||
# sway commands
|
||||
"${modifier}+Shift+r" = "reload";
|
||||
"${modifier}+Shift+c" = "kill";
|
||||
"${modifier}+Shift+q" = "exit";
|
||||
};
|
||||
input = {
|
||||
"*" = {
|
||||
xkb_layout = "us,bg";
|
||||
xkb_options = "grp:win_space_toggle";
|
||||
xkb_variant = ",phonetic";
|
||||
};
|
||||
};
|
||||
};
|
||||
swaynag = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
audacity
|
||||
gimp
|
||||
grim
|
||||
libnotify
|
||||
libreoffice-qt
|
||||
mupdf
|
||||
pavucontrol
|
||||
slurp
|
||||
wl-clipboard
|
||||
xdg-user-dirs
|
||||
xdg-utils
|
||||
xwayland
|
||||
];
|
||||
}
|
10
home/modules/programs/swaylock/default.nix
Normal file
10
home/modules/programs/swaylock/default.nix
Normal file
@ -0,0 +1,10 @@
|
||||
{ config, ... }: {
|
||||
programs.swaylock = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
settings = {
|
||||
show-failed-attempts = true;
|
||||
image = config.home.homeDirectory + "/pic/bg.png";
|
||||
};
|
||||
};
|
||||
}
|
13
home/modules/programs/tealdeer/default.nix
Normal file
13
home/modules/programs/tealdeer/default.nix
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
programs.tealdeer = {
|
||||
enable = true;
|
||||
settings = {
|
||||
display = {
|
||||
compact = true;
|
||||
};
|
||||
updates = {
|
||||
auto_update = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
15
home/modules/programs/tmux/default.nix
Normal file
15
home/modules/programs/tmux/default.nix
Normal file
@ -0,0 +1,15 @@
|
||||
{ pkgs, ... }: {
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
clock24 = true;
|
||||
baseIndex = 1;
|
||||
escapeTime = 0;
|
||||
keyMode = "vi";
|
||||
shell = "\${SHELL}";
|
||||
terminal = "screen-256color";
|
||||
plugins = with pkgs.tmuxPlugins; [ tilish catppuccin ];
|
||||
extraConfig = ''
|
||||
set-option -a terminal-features 'screen-256color:RGB'
|
||||
'';
|
||||
};
|
||||
}
|
103
home/modules/programs/waybar/default.nix
Normal file
103
home/modules/programs/waybar/default.nix
Normal file
@ -0,0 +1,103 @@
|
||||
{
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
settings = {
|
||||
mainBar =
|
||||
let
|
||||
calendar = {
|
||||
mode = "year";
|
||||
mode-mon-col = 3;
|
||||
weeks-pos = "right";
|
||||
format = {
|
||||
months = "<span color='#ffead3'><b>{}</b></span>";
|
||||
days = "<span color='#ecc6d9'><b>{}</b></span>";
|
||||
weeks = "<span color='#99ffdd'><b>W{}</b></span>";
|
||||
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
|
||||
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
|
||||
};
|
||||
};
|
||||
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
||||
in
|
||||
{
|
||||
layer = "top";
|
||||
position = "top";
|
||||
height = 30;
|
||||
output = [
|
||||
"eDP-1"
|
||||
"HDMI-A-1"
|
||||
];
|
||||
modules-left = [ "sway/workspaces" ];
|
||||
modules-center = [ "clock#week" "clock#year" "clock#time" ];
|
||||
modules-right = [ "network" "pulseaudio" "memory" "cpu" "battery" ];
|
||||
|
||||
"clock#time" = {
|
||||
format = "{:%H:%M:%S}";
|
||||
interval = 1;
|
||||
tooltip-format = tooltip-format;
|
||||
calendar = calendar;
|
||||
};
|
||||
|
||||
"clock#week" = {
|
||||
format = "{:%a}";
|
||||
tooltip-format = tooltip-format;
|
||||
calendar = calendar;
|
||||
};
|
||||
|
||||
"clock#year" = {
|
||||
format = "{:%Y-%m-%d}";
|
||||
tooltip-format = tooltip-format;
|
||||
calendar = calendar;
|
||||
};
|
||||
|
||||
battery = {
|
||||
format = "{icon} <span color='#cdd6f4'>{capacity}% {time}</span>";
|
||||
format-time = " {H} h {M} m";
|
||||
format-icons = [ "" "" "" "" "" ];
|
||||
states = {
|
||||
warning = 30;
|
||||
critical = 15;
|
||||
};
|
||||
};
|
||||
|
||||
cpu = {
|
||||
format = "<span color='#74c7ec'></span> {usage}%";
|
||||
};
|
||||
|
||||
memory = {
|
||||
format = "<span color='#89b4fa'></span> {percentage}%";
|
||||
interval = 5;
|
||||
};
|
||||
|
||||
pulseaudio = {
|
||||
format = "<span color='#a6e3a1'>{icon}</span> {volume}% | {format_source}";
|
||||
format-muted = "<span color='#f38ba8'></span> {volume}% | {format_source}";
|
||||
format-source = "{volume}% <span color='#a6e3a1'></span>";
|
||||
format-source-muted = "{volume}% <span color='#f38ba8'></span>";
|
||||
format-icons = {
|
||||
headphone = "";
|
||||
default = [ "" "" "" ];
|
||||
};
|
||||
};
|
||||
|
||||
network = {
|
||||
format-ethernet = "<span color='#89dceb'></span> | <span color='#fab387'></span> {bandwidthUpBytes} <span color='#fab387'></span> {bandwidthDownBytes}";
|
||||
format-wifi = "<span color='#06b6d4'>{icon}</span> | <span color='#fab387'></span> {bandwidthUpBytes} <span color='#fab387'></span> {bandwidthDownBytes}";
|
||||
format-disconnected = "<span color='#eba0ac'> no connection</span>";
|
||||
format-icons = [ "" "" "" "" ];
|
||||
interval = 5;
|
||||
};
|
||||
|
||||
"sway/workspaces" = {
|
||||
disable-scroll = true;
|
||||
all-outputs = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
systemd = {
|
||||
enable = true;
|
||||
target = "sway-session.target";
|
||||
};
|
||||
style = builtins.readFile ./style.css;
|
||||
};
|
||||
}
|
102
home/modules/programs/waybar/style.css
Normal file
102
home/modules/programs/waybar/style.css
Normal file
@ -0,0 +1,102 @@
|
||||
* {
|
||||
font-family: FontAwesome, 'Fira Code';
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: rgba(43, 48, 59, 0.1);
|
||||
border-bottom: 2px solid rgba(100, 114, 125, 0.5);
|
||||
color: @rosewater;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 5px;
|
||||
background-color: @base;
|
||||
color: @text;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: @mantle;
|
||||
}
|
||||
|
||||
#workspaces button.focused {
|
||||
background-color: @crust;
|
||||
box-shadow: inset 0 -2px @sky;
|
||||
}
|
||||
|
||||
#workspaces button.urgent {
|
||||
background-color: @red;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#disk,
|
||||
#temperature,
|
||||
#backlight,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#wireplumber,
|
||||
#custom-media,
|
||||
#tray,
|
||||
#mode,
|
||||
#idle_inhibitor,
|
||||
#scratchpad,
|
||||
#power-profiles-daemon,
|
||||
#mpd {
|
||||
padding: 0 10px;
|
||||
color: @text;
|
||||
background-color: @base;
|
||||
margin: 0 .5em;
|
||||
border-radius: 9999px;
|
||||
}
|
||||
|
||||
#clock.week {
|
||||
margin-right: 0px;
|
||||
color: @peach;
|
||||
border-radius: 9999px 0px 0px 9999px;
|
||||
}
|
||||
|
||||
#clock.year {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
color: @pink;
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
#clock.time {
|
||||
margin-left: 0px;
|
||||
color: @sky;
|
||||
border-radius: 0px 9999px 9999px 0px;
|
||||
}
|
||||
|
||||
#battery.charging, #battery.plugged {
|
||||
color: @green;
|
||||
}
|
||||
|
||||
#battery.discharging {
|
||||
color: @yellow;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: #ffffff;
|
||||
color: #000000;
|
||||
}
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
background-color: @red;
|
||||
}
|
||||
|
||||
/* Using steps() instead of linear as a timing function to limit cpu usage */
|
||||
#battery.critical:not(.charging) {
|
||||
background-color: @red;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: steps(12);
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
32
home/modules/programs/zsh/default.nix
Normal file
32
home/modules/programs/zsh/default.nix
Normal file
@ -0,0 +1,32 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
autosuggestion.enable = true;
|
||||
loginExtra = ''
|
||||
[ "$(tty)" = "/dev/tty1" ] && exec sway
|
||||
'';
|
||||
shellAliases = {
|
||||
cal = "cal $(date +%Y)";
|
||||
GG = "git add . && git commit -m 'GG' && git push --set-upstream origin HEAD";
|
||||
gad = "git add . && git diff --cached";
|
||||
gac = "ga && gc";
|
||||
gach = "gac -C HEAD";
|
||||
ga = "git add .";
|
||||
gc = "git commit";
|
||||
dev = "nix develop --command $SHELL";
|
||||
ls = "${pkgs.nushell}/bin/nu -c 'ls'";
|
||||
la = "${pkgs.nushell}/bin/nu -c 'ls -al'";
|
||||
torrent = "transmission-remote";
|
||||
vi = "nvim";
|
||||
sc = "systemctl";
|
||||
};
|
||||
shellGlobalAliases = {
|
||||
comp = "-vcodec libx265 -crf 28";
|
||||
};
|
||||
history = {
|
||||
expireDuplicatesFirst = true;
|
||||
};
|
||||
};
|
||||
}
|
@ -1,41 +1,18 @@
|
||||
toplevel @ { inputs
|
||||
, withSystem
|
||||
, ...
|
||||
}:
|
||||
toplevel@{ inputs, withSystem, ... }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
mods = toplevel.config.flake.nixosModules;
|
||||
inherit (toplevel.config.flake) hardwareConfigurations;
|
||||
essential = with mods; [ grub base shell security wireless intranet ];
|
||||
desktop = with mods; [ sound wayland ];
|
||||
configWithModules =
|
||||
{ hardware ? { nixpkgs.hostPlatform = system; }
|
||||
, modules
|
||||
,
|
||||
}:
|
||||
withSystem system ({ inputs', pkgs, ... }:
|
||||
inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {
|
||||
inherit inputs inputs' pkgs;
|
||||
};
|
||||
modules = [ hardware ] ++ modules;
|
||||
});
|
||||
novaConfig = mods:
|
||||
configWithModules {
|
||||
hardware = hardwareConfigurations.nova;
|
||||
modules = essential ++ desktop ++ mods;
|
||||
};
|
||||
in
|
||||
{
|
||||
flake.nixosConfigurations = {
|
||||
nova = novaConfig [ mods.ivand ];
|
||||
nova-music = novaConfig (with mods; [ ivand music ]);
|
||||
nova-crypto = novaConfig (with mods; [ ivand cryptocurrency ]);
|
||||
nova-nonya = novaConfig (with mods; [ ivand anon cryptocurrency ]);
|
||||
nova-ai = novaConfig (with mods; [ ivand ai ]);
|
||||
nova-containers = novaConfig (with mods; [ ivand containers ]);
|
||||
install-iso = configWithModules { modules = with mods; [ grub base shell wireless ]; };
|
||||
vps = configWithModules { modules = with mods; [ base shell security vps mailserver nginx wireguard-output anonymous-dns firewall rest ]; };
|
||||
stara-miner = configWithModules { modules = essential ++ [ mods.monero-miner ]; };
|
||||
flake.nixosConfigurations.nixos = withSystem system (ctx@{ config, inputs', ... }:
|
||||
inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {
|
||||
inherit inputs inputs';
|
||||
packages = config.packages;
|
||||
};
|
||||
modules = [
|
||||
./laptop-hardware.nix
|
||||
inputs.hosts.nixosModule
|
||||
inputs.catppuccin.nixosModules.catppuccin
|
||||
] ++ (with toplevel.config.flake.nixosModules; [ wireguard catppuccin boot security xdg networking users services programs env rest ]);
|
||||
});
|
||||
}
|
||||
|
38
nixos/configs/laptop-hardware.nix
Normal file
38
nixos/configs/laptop-hardware.nix
Normal file
@ -0,0 +1,38 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/sda1";
|
||||
fsType = "btrfs";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/D76B-0BB3";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp2s0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
@ -1,158 +1,12 @@
|
||||
top @ { inputs, moduleWithSystem, ... }: {
|
||||
{ moduleWithSystem, ... }: {
|
||||
flake.nixosModules = {
|
||||
grub = moduleWithSystem (_: { pkgs, ... }: {
|
||||
boot = {
|
||||
loader = {
|
||||
grub =
|
||||
let
|
||||
theme = pkgs.sleek-grub-theme.override {
|
||||
withBanner = "Hello Ivan";
|
||||
withStyle = "bigSur";
|
||||
};
|
||||
in
|
||||
{
|
||||
inherit theme;
|
||||
enable = pkgs.lib.mkDefault true;
|
||||
useOSProber = true;
|
||||
efiSupport = true;
|
||||
device = "nodev";
|
||||
splashImage = "${theme}/background.png";
|
||||
};
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
};
|
||||
});
|
||||
base = moduleWithSystem (_: { pkgs, ... }: {
|
||||
imports = [ inputs.hosts.nixosModule ];
|
||||
system.stateVersion = top.config.flake.stateVersion;
|
||||
nix = { extraOptions = ''experimental-features = nix-command flakes''; };
|
||||
i18n.supportedLocales = [ "all" ];
|
||||
time.timeZone = "Europe/Prague";
|
||||
environment = {
|
||||
systemPackages = with pkgs; [ cmatrix uutils-coreutils-noprefix cryptsetup fd file git glibc gnumake mlocate openssh openssl procs ripgrep srm unzip vim zip just nixos-install-tools tshark ];
|
||||
sessionVariables = { MAKEFLAGS = "-j 4"; };
|
||||
shells = with pkgs; [ bash zsh nushell ];
|
||||
enableAllTerminfo = true;
|
||||
};
|
||||
users.defaultUserShell = pkgs.zsh;
|
||||
programs = {
|
||||
zsh.enable = true;
|
||||
nix-ld.enable = true;
|
||||
};
|
||||
services = {
|
||||
dbus.enable = true;
|
||||
logind = {
|
||||
killUserProcesses = true;
|
||||
powerKeyLongPress = "reboot";
|
||||
};
|
||||
};
|
||||
networking = {
|
||||
stevenBlackHosts = {
|
||||
enable = true;
|
||||
blockFakenews = true;
|
||||
blockGambling = true;
|
||||
};
|
||||
};
|
||||
});
|
||||
shell = moduleWithSystem (_: { pkgs, ... }: {
|
||||
programs = {
|
||||
starship.enable = true;
|
||||
zsh = {
|
||||
enableBashCompletion = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
autosuggestions = {
|
||||
enable = true;
|
||||
strategy = [ "completion" ];
|
||||
};
|
||||
shellAliases = {
|
||||
cal = "cal $(date +%Y)";
|
||||
GG = "git add . && git commit -m 'GG' && git push --set-upstream origin HEAD";
|
||||
gad = "git add . && git diff --cached";
|
||||
gac = "ga && gc";
|
||||
ga = "git add .";
|
||||
gc = "git commit";
|
||||
dev = "nix develop --command $SHELL";
|
||||
eza = "${pkgs.eza}/bin/eza '--long' '--header' '--icons' '--smart-group' '--mounts' '--octal-permissions' '--git'";
|
||||
ls = "eza";
|
||||
la = "eza --all";
|
||||
lt = "eza --git-ignore --all --tree --level=10";
|
||||
sc = "systemctl";
|
||||
neofetch = "${pkgs.fastfetch}/bin/fastfetch -c all.jsonc";
|
||||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
sound = moduleWithSystem (_: { pkgs, ... }: {
|
||||
services = {
|
||||
pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
};
|
||||
environment.systemPackages = with pkgs; [ pwvucontrol ];
|
||||
});
|
||||
music = moduleWithSystem (_: { pkgs, ... }: {
|
||||
imports = [ inputs.musnix.nixosModules.musnix ];
|
||||
environment.systemPackages = with pkgs; [ guitarix ];
|
||||
services.pipewire = {
|
||||
jack.enable = true;
|
||||
extraConfig = { jack."69-low-latency" = { "jack.properties" = { "node.latency" = "64/48000"; }; }; };
|
||||
};
|
||||
musnix = {
|
||||
enable = true;
|
||||
rtcqs.enable = true;
|
||||
soundcardPciId = "00:1f.3";
|
||||
kernel = {
|
||||
realtime = true;
|
||||
packages = pkgs.linuxPackages-rt;
|
||||
};
|
||||
};
|
||||
});
|
||||
wayland = moduleWithSystem (_: _: {
|
||||
hardware.graphics.enable = true;
|
||||
security.pam.services.swaylock = { };
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
xdgOpenUsePortal = true;
|
||||
wlr = {
|
||||
enable = true;
|
||||
settings = {
|
||||
screencast = {
|
||||
output_name = "HDMI-A-1";
|
||||
max_fps = 60;
|
||||
};
|
||||
};
|
||||
};
|
||||
config.common.default = "*";
|
||||
};
|
||||
});
|
||||
security = moduleWithSystem (_: _: {
|
||||
security = {
|
||||
sudo = {
|
||||
enable = false;
|
||||
execWheelOnly = true;
|
||||
extraRules = [{ groups = [ "wheel" ]; }];
|
||||
};
|
||||
doas = {
|
||||
enable = true;
|
||||
extraRules = [
|
||||
{
|
||||
groups = [ "wheel" ];
|
||||
noPass = true;
|
||||
keepEnv = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
polkit.enable = true;
|
||||
rtkit.enable = true;
|
||||
};
|
||||
});
|
||||
intranet = {
|
||||
wireguard = {
|
||||
networking.wg-quick.interfaces = {
|
||||
wg0 = {
|
||||
address = [ "10.0.0.2/32" ];
|
||||
address = [ "10.0.0.2/24" "fdc9:281f:04d7:9ee9::2/64" ];
|
||||
dns = [ "1.1.1.1" "fdc9:281f:04d7:9ee9::1" ];
|
||||
privateKeyFile = "/etc/wireguard/privatekey";
|
||||
|
||||
peers = [
|
||||
{
|
||||
publicKey = "5FiTLnzbgcbgQLlyVyYeESEd+2DtwM1JHCGz/32UcEU=";
|
||||
@ -163,14 +17,65 @@ top @ { inputs, moduleWithSystem, ... }: {
|
||||
];
|
||||
};
|
||||
};
|
||||
services.openssh = {
|
||||
};
|
||||
catppuccin = {
|
||||
catppuccin = {
|
||||
enable = true;
|
||||
settings = {
|
||||
PermitRootLogin = "prohibit-password";
|
||||
flavor = "mocha";
|
||||
};
|
||||
boot.loader.grub.catppuccin.enable = true;
|
||||
};
|
||||
boot = {
|
||||
boot = {
|
||||
loader = {
|
||||
grub = {
|
||||
enable = true;
|
||||
useOSProber = true;
|
||||
efiSupport = true;
|
||||
device = "nodev";
|
||||
};
|
||||
efi = {
|
||||
canTouchEfiVariables = true;
|
||||
efiSysMountPoint = "/boot/efi";
|
||||
};
|
||||
};
|
||||
kernelModules = [ "v4l2loopback" ];
|
||||
};
|
||||
};
|
||||
security = moduleWithSystem (toplevel@{ ... }: nixos@{ pkgs, ... }: {
|
||||
security = {
|
||||
sudo = {
|
||||
enable = false;
|
||||
execWheelOnly = true;
|
||||
extraRules = [
|
||||
{
|
||||
groups = [ "wheel" ];
|
||||
commands = [{ command = "${pkgs.light}/bin/light"; options = [ "SETENV" "NOPASSWD" ]; }];
|
||||
}
|
||||
];
|
||||
};
|
||||
doas = {
|
||||
enable = true;
|
||||
extraRules = [
|
||||
# Allow wheel to run all commands without password and keep user env.
|
||||
{ groups = [ "wheel" ]; noPass = true; keepEnv = true; }
|
||||
];
|
||||
};
|
||||
polkit.enable = true;
|
||||
rtkit.enable = true;
|
||||
pam = { services = { swaylock = { }; }; };
|
||||
};
|
||||
});
|
||||
xdg = {
|
||||
xdg = {
|
||||
portal = {
|
||||
enable = true;
|
||||
wlr.enable = true;
|
||||
config.common.default = "*";
|
||||
};
|
||||
};
|
||||
};
|
||||
wireless = {
|
||||
networking = {
|
||||
networking = {
|
||||
wireless = {
|
||||
enable = true;
|
||||
@ -205,56 +110,21 @@ top @ { inputs, moduleWithSystem, ... }: {
|
||||
"O2WIFIZ_EXT" = {
|
||||
psk = "iloveprague";
|
||||
};
|
||||
"KOTEKLAN_GUEST" = {
|
||||
psk = "koteklankotek";
|
||||
};
|
||||
"TP-Link_BE7A" = {
|
||||
psk = "84665461";
|
||||
};
|
||||
"Post120" = {
|
||||
psk = "9996663333";
|
||||
};
|
||||
"MOONLIGHT2019" = {
|
||||
psk = "seacrets";
|
||||
};
|
||||
"Kaiser Terrasse" = {
|
||||
psk = "Internet12";
|
||||
};
|
||||
"ATHENS-HAWKS" = { };
|
||||
"3G" = {
|
||||
hidden = true;
|
||||
stevenBlackHosts = {
|
||||
enable = true;
|
||||
blockFakenews = true;
|
||||
blockGambling = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
ivand = moduleWithSystem (_: { pkgs, ... }:
|
||||
let
|
||||
homeMods = top.config.flake.homeManagerModules;
|
||||
in
|
||||
{
|
||||
imports = [ inputs.home-manager.nixosModules.default ];
|
||||
home-manager = {
|
||||
backupFileExtension = "bak";
|
||||
useUserPackages = true;
|
||||
useGlobalPkgs = true;
|
||||
users.ivand = { ... }: {
|
||||
imports = with homeMods; [
|
||||
base
|
||||
ivand
|
||||
shell
|
||||
util
|
||||
swayland
|
||||
web
|
||||
];
|
||||
};
|
||||
};
|
||||
fonts.packages = with pkgs; [ (nerdfonts.override { fonts = [ "FiraCode" ]; }) noto-fonts noto-fonts-emoji noto-fonts-lgc-plus ];
|
||||
users = moduleWithSystem (toplevel@{ ... }: perSystem@{ pkgs, ... }: {
|
||||
users = {
|
||||
defaultUserShell = pkgs.zsh;
|
||||
users = {
|
||||
ivand = {
|
||||
isNormalUser = true;
|
||||
createHome = true;
|
||||
extraGroups = [
|
||||
"adbusers"
|
||||
"adm"
|
||||
@ -264,395 +134,75 @@ top @ { inputs, moduleWithSystem, ... }: {
|
||||
"flatpak"
|
||||
"kvm"
|
||||
"mlocate"
|
||||
"realtime"
|
||||
"render"
|
||||
"video"
|
||||
"wheel"
|
||||
];
|
||||
};
|
||||
};
|
||||
extraGroups = {
|
||||
mlocate = { };
|
||||
realtime = { };
|
||||
};
|
||||
};
|
||||
programs.dconf.enable = true;
|
||||
});
|
||||
flatpak = {
|
||||
xdg = {
|
||||
portal = {
|
||||
enable = true;
|
||||
wlr.enable = true;
|
||||
config.common.default = "*";
|
||||
};
|
||||
};
|
||||
services.flatpak.enable = true;
|
||||
};
|
||||
ai = moduleWithSystem (_: _: {
|
||||
services = { ollama.enable = true; };
|
||||
});
|
||||
containers = moduleWithSystem (_: _: {
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
storageDriver = "btrfs";
|
||||
};
|
||||
users.users.ivand.extraGroups = [ "docker" ];
|
||||
});
|
||||
anon = moduleWithSystem (_: { pkgs, ... }: {
|
||||
environment.systemPackages = with pkgs; [ tor-browser ];
|
||||
});
|
||||
cryptocurrency = moduleWithSystem (_: { pkgs, ... }: {
|
||||
environment.systemPackages = with pkgs; [ monero-cli ];
|
||||
services = { monero.enable = true; };
|
||||
});
|
||||
monero-miner = moduleWithSystem (_: _: {
|
||||
services = {
|
||||
xmrig = {
|
||||
enable = true;
|
||||
settings = {
|
||||
autosave = true;
|
||||
cpu = true;
|
||||
opencl = false;
|
||||
cuda = false;
|
||||
pools = [
|
||||
{
|
||||
url = "pool.supportxmr.com:443";
|
||||
user = "48e9t9xvq4M4HBWomz6whiY624YRCPwgJ7LPXngcc8pUHk6hCuR3k6ENpLGDAhPEHWaju8Z4btxkbENpcwaqWcBvLxyh5cn";
|
||||
keepalive = true;
|
||||
tls = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
vps = moduleWithSystem (_: { ... }: {
|
||||
imports = [
|
||||
inputs.vpsadminos.nixosConfigurations.container
|
||||
];
|
||||
});
|
||||
mailserver = moduleWithSystem (_: { config
|
||||
, pkgs
|
||||
, ...
|
||||
}: {
|
||||
imports = [
|
||||
inputs.simple-nixos-mailserver.nixosModule
|
||||
];
|
||||
mailserver = {
|
||||
enable = true;
|
||||
localDnsResolver = false;
|
||||
fqdn = "mail.idimitrov.dev";
|
||||
domains = [ "idimitrov.dev" "mail.idimitrov.dev" ];
|
||||
loginAccounts = {
|
||||
"ivan@idimitrov.dev" = {
|
||||
hashedPassword = "$2b$05$rTVIQD98ogXeCBKdk/YufulWHqpMCAlb7SHDPlh5y8Xbukoa/uQLm";
|
||||
aliases = [ "admin@idimitrov.dev" ];
|
||||
};
|
||||
"security@idimitrov.dev" = {
|
||||
hashedPassword = "$2b$05$rTVIQD98ogXeCBKdk/YufulWHqpMCAlb7SHDPlh5y8Xbukoa/uQLm";
|
||||
};
|
||||
};
|
||||
certificateScheme = "acme-nginx";
|
||||
hierarchySeparator = "/";
|
||||
};
|
||||
services = {
|
||||
dovecot2.sieve.extensions = [ "fileinto" ];
|
||||
roundcube = {
|
||||
enable = true;
|
||||
package = pkgs.roundcube.withPlugins (plugins: [ plugins.persistent_login ]);
|
||||
plugins = [
|
||||
"persistent_login"
|
||||
];
|
||||
hostName = "${config.mailserver.fqdn}";
|
||||
extraConfig = ''
|
||||
$config['smtp_host'] = "tls://${config.mailserver.fqdn}";
|
||||
$config['smtp_user'] = "%u";
|
||||
$config['smtp_pass'] = "%p";
|
||||
'';
|
||||
};
|
||||
nginx.virtualHosts =
|
||||
let
|
||||
restrictToVpn = ''
|
||||
allow 10.0.0.2/32;
|
||||
allow 10.0.0.3/32;
|
||||
allow 10.0.0.4/32;
|
||||
deny all;
|
||||
'';
|
||||
in
|
||||
{
|
||||
"${config.mailserver.fqdn}" = {
|
||||
extraConfig = restrictToVpn;
|
||||
};
|
||||
};
|
||||
postgresql.enable = true;
|
||||
};
|
||||
security = {
|
||||
acme = {
|
||||
acceptTerms = true;
|
||||
defaults.email = "security@idimitrov.dev";
|
||||
};
|
||||
};
|
||||
});
|
||||
nginx = moduleWithSystem (_: { pkgs, ... }: {
|
||||
services = {
|
||||
nginx =
|
||||
let
|
||||
webshiteConfig = ''
|
||||
add_header 'Referrer-Policy' 'origin-when-cross-origin';
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
'';
|
||||
extensions = [ "html" "txt" "png" "jpg" "jpeg" ];
|
||||
serveStatic = exts: ''
|
||||
try_files $uri $uri/ ${pkgs.lib.strings.concatStringsSep " " (builtins.map (x: "$uri." + "${x}") exts)} =404;
|
||||
'';
|
||||
in
|
||||
{
|
||||
enable = true;
|
||||
recommendedGzipSettings = true;
|
||||
recommendedOptimisation = true;
|
||||
recommendedProxySettings = true;
|
||||
recommendedTlsSettings = true;
|
||||
sslCiphers = "AES256+EECDH:AES256+EDH:!aNULL";
|
||||
virtualHosts = {
|
||||
"idimitrov.dev" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
root = "${pkgs.webshite}";
|
||||
extraConfig = serveStatic extensions;
|
||||
};
|
||||
extraConfig = webshiteConfig;
|
||||
};
|
||||
"www.idimitrov.dev" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
root = "${pkgs.webshite}";
|
||||
extraConfig = serveStatic extensions;
|
||||
};
|
||||
extraConfig = webshiteConfig;
|
||||
};
|
||||
"src.idimitrov.dev" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://127.0.0.1:3001";
|
||||
};
|
||||
};
|
||||
"pic.idimitrov.dev" = {
|
||||
enableACME = true;
|
||||
forceSSL = true;
|
||||
locations."/" = {
|
||||
root = "/var/pic";
|
||||
extraConfig = ''
|
||||
autoindex on;
|
||||
${serveStatic ["png"]}
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
gitea = {
|
||||
enable = true;
|
||||
appName = "src";
|
||||
database = {
|
||||
type = "postgres";
|
||||
};
|
||||
settings = {
|
||||
server = {
|
||||
DOMAIN = "src.idimitrov.dev";
|
||||
ROOT_URL = "https://src.idimitrov.dev/";
|
||||
HTTP_PORT = 3001;
|
||||
};
|
||||
repository = {
|
||||
DEFAULT_BRANCH = "master";
|
||||
};
|
||||
service = {
|
||||
DISABLE_REGISTRATION = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
postgresql = {
|
||||
enable = true;
|
||||
ensureUsers = [
|
||||
{
|
||||
name = "root";
|
||||
ensureClauses = {
|
||||
superuser = true;
|
||||
createrole = true;
|
||||
createdb = true;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
});
|
||||
wireguard-output = moduleWithSystem (_: { pkgs, ... }: {
|
||||
networking = {
|
||||
nat = {
|
||||
enable = true;
|
||||
enableIPv6 = true;
|
||||
externalInterface = "venet0";
|
||||
internalInterfaces = [ "wg0" ];
|
||||
};
|
||||
wg-quick.interfaces = {
|
||||
wg0 =
|
||||
let
|
||||
iptables = "${pkgs.iptables}/bin/iptables";
|
||||
ip6tables = "${pkgs.iptables}/bin/ip6tables";
|
||||
in
|
||||
{
|
||||
address = [ "10.0.0.1/32" ];
|
||||
listenPort = 51820;
|
||||
privateKeyFile = "/etc/wireguard/privatekey";
|
||||
postUp = ''
|
||||
${iptables} -A FORWARD -i wg0 -j ACCEPT
|
||||
${iptables} -t nat -A POSTROUTING -s 10.0.0.1/24 -o venet0 -j MASQUERADE
|
||||
${ip6tables} -A FORWARD -i wg0 -j ACCEPT
|
||||
${ip6tables} -t nat -A POSTROUTING -s fdc9:281f:04d7:9ee9::1/64 -o venet0 -j MASQUERADE
|
||||
'';
|
||||
preDown = ''
|
||||
${iptables} -D FORWARD -i wg0 -j ACCEPT
|
||||
${iptables} -t nat -D POSTROUTING -s 10.0.0.1/24 -o venet0 -j MASQUERADE
|
||||
${ip6tables} -D FORWARD -i wg0 -j ACCEPT
|
||||
${ip6tables} -t nat -D POSTROUTING -s fdc9:281f:04d7:9ee9::1/64 -o venet0 -j MASQUERADE
|
||||
'';
|
||||
peers = [
|
||||
{
|
||||
publicKey = "kI93V0dVKSqX8hxMJHK5C0c1hEDPQTgPQDU8TKocVgo=";
|
||||
allowedIPs = [ "10.0.0.2/32" ];
|
||||
}
|
||||
{
|
||||
publicKey = "RqTsFxFCcgYsytcDr+jfEoOA5UNxa1ZzGlpx6iuTpXY=";
|
||||
allowedIPs = [ "10.0.0.3/32" ];
|
||||
}
|
||||
{
|
||||
publicKey = "1e0mjluqXdLbzv681HlC9B8BfGN8sIXIw3huLyQqwXI=";
|
||||
allowedIPs = [ "10.0.0.4/32" ];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
anonymous-dns = moduleWithSystem (_: _: {
|
||||
networking = {
|
||||
nameservers = [ "127.0.0.1" "::1" ];
|
||||
dhcpcd.extraConfig = "nohook resolv.conf";
|
||||
};
|
||||
services = {
|
||||
dnscrypt-proxy2 = {
|
||||
enable = true;
|
||||
settings = {
|
||||
cache = false;
|
||||
ipv4_servers = true;
|
||||
ipv6_servers = true;
|
||||
dnscrypt_servers = true;
|
||||
doh_servers = false;
|
||||
odoh_servers = false;
|
||||
require_dnssec = true;
|
||||
require_nolog = true;
|
||||
require_nofilter = true;
|
||||
anonymized_dns = {
|
||||
routes = [
|
||||
{
|
||||
server_name = "*";
|
||||
via = [ "sdns://gQ8yMTcuMTM4LjIyMC4yNDM" ];
|
||||
}
|
||||
];
|
||||
};
|
||||
sources.public-resolvers = {
|
||||
urls = [
|
||||
"https://raw.githubusercontent.com/DNSCrypt/dnscrypt-resolvers/master/v3/public-resolvers.md"
|
||||
"https://download.dnscrypt.info/resolvers-list/v3/public-resolvers.md"
|
||||
];
|
||||
cache_file = "/var/lib/dnscrypt-proxy/public-resolvers.md";
|
||||
minisign_key = "RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
firewall = moduleWithSystem (_: { lib, ... }: {
|
||||
networking = {
|
||||
firewall = lib.mkForce {
|
||||
enable = true;
|
||||
allowedTCPPorts = [
|
||||
25 # smtp
|
||||
465 # smtps
|
||||
80 # http
|
||||
443 # https
|
||||
];
|
||||
allowedUDPPorts = [
|
||||
25
|
||||
465
|
||||
80
|
||||
443
|
||||
51820 # wireguard
|
||||
];
|
||||
extraCommands = ''
|
||||
iptables -N vpn # create a new chain named vpn
|
||||
iptables -A vpn --src 10.0.0.2 -j ACCEPT # allow
|
||||
iptables -A vpn --src 10.0.0.3 -j ACCEPT # allow
|
||||
iptables -A vpn --src 10.0.0.4 -j ACCEPT # allow
|
||||
iptables -A vpn -j DROP # drop everyone else
|
||||
iptables -I INPUT -m tcp -p tcp --dport 22 -j vpn
|
||||
'';
|
||||
extraStopCommands = ''
|
||||
iptables -F vpn
|
||||
iptables -D INPUT -m tcp -p tcp --dport 22 -j vpn
|
||||
iptables -X vpn
|
||||
'';
|
||||
};
|
||||
};
|
||||
});
|
||||
rest = moduleWithSystem (_: { pkgs, ... }: {
|
||||
fileSystems."/mnt/export1981" = {
|
||||
device = "172.16.128.47:/nas/5490";
|
||||
fsType = "nfs";
|
||||
options = [ "nofail" ];
|
||||
};
|
||||
users = {
|
||||
users.ivand = {
|
||||
isNormalUser = true;
|
||||
hashedPassword = "$2b$05$hPrPcewxj4qjLCRQpKBAu.FKvKZdIVlnyn4uYsWE8lc21Jhvc9jWG";
|
||||
extraGroups = [ "wheel" "adm" "mlocate" ];
|
||||
openssh.authorizedKeys.keys = [
|
||||
''
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICcLkzuCoBEg+wq/H+hkrv6pLJ8J5BejaNJVNnymlnlo ivan@idimitrov.dev
|
||||
''
|
||||
];
|
||||
};
|
||||
extraGroups = { mlocate = { }; };
|
||||
};
|
||||
});
|
||||
services = {
|
||||
openssh = {
|
||||
services = {
|
||||
xserver.videoDrivers = [ "nouveau" ];
|
||||
dbus.enable = true;
|
||||
flatpak.enable = true;
|
||||
pipewire = {
|
||||
enable = true;
|
||||
settings = {
|
||||
PermitRootLogin = "prohibit-password";
|
||||
alsa.enable = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
systemd = {
|
||||
timers = {
|
||||
bingwp = {
|
||||
wantedBy = [ "timers.target" ];
|
||||
timerConfig = {
|
||||
OnCalendar = "*-*-* 10:00:00";
|
||||
Persistent = true;
|
||||
programs = {
|
||||
programs = {
|
||||
zsh.enable = true;
|
||||
nix-ld.enable = true;
|
||||
adb.enable = true;
|
||||
dconf.enable = true;
|
||||
};
|
||||
};
|
||||
env = moduleWithSystem (toplevel@{ ... }: perSystem@{ pkgs, ... }: {
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
cmatrix
|
||||
coreutils-full
|
||||
cryptsetup
|
||||
dig
|
||||
fd
|
||||
file
|
||||
git
|
||||
glibc
|
||||
gnumake
|
||||
jq
|
||||
mlocate
|
||||
moreutils
|
||||
ntfs3g
|
||||
openssl
|
||||
srm
|
||||
unzip
|
||||
vim
|
||||
zip
|
||||
];
|
||||
shells = with pkgs; [ zsh nushell ];
|
||||
};
|
||||
services = {
|
||||
bingwp = {
|
||||
description = "Download bing image of the day";
|
||||
script = ''
|
||||
${pkgs.nushell}/bin/nu -c "http get ('https://bing.com' + ((http get https://www.bing.com/HPImageArchive.aspx?format=js&n=1).images.0.url)) | save ('/var/pic' | path join ( [ (date now | format date '%Y-%m-%d'), '.png' ] | str join ))"
|
||||
${pkgs.nushell}/bin/nu -c "${pkgs.toybox}/bin/ln -sf (ls /var/pic | where type == file | get name | sort | last) /var/pic/latest.png"
|
||||
});
|
||||
rest = moduleWithSystem (toplevel@{ ... }: perSystem@{ pkgs, ... }: {
|
||||
nix = {
|
||||
extraOptions = ''
|
||||
experimental-features = nix-command flakes
|
||||
'';
|
||||
};
|
||||
hardware = {
|
||||
opengl = {
|
||||
enable = true;
|
||||
driSupport = true;
|
||||
};
|
||||
};
|
||||
i18n.supportedLocales = [ "all" ];
|
||||
time.timeZone = "Europe/Prague";
|
||||
fonts.packages = with pkgs; [ (nerdfonts.override { fonts = [ "FiraCode" ]; }) noto-fonts noto-fonts-emoji noto-fonts-lgc-plus ];
|
||||
});
|
||||
};
|
||||
}
|
||||
|
@ -1,8 +0,0 @@
|
||||
{ withSystem, ... }: {
|
||||
flake.overlays.default = _: _:
|
||||
withSystem "x86_64-linux" (
|
||||
{ config, ... }: with config.packages; {
|
||||
inherit nvim bingwp screenshot cursors wpd webshite sal;
|
||||
}
|
||||
);
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
{ inputs, ... }: {
|
||||
perSystem =
|
||||
{ system, pkgs, ... }: {
|
||||
config.packages = {
|
||||
nvim = inputs.ide.nvim.${system}.standalone.default {
|
||||
plugins.lsp.servers = {
|
||||
bashls.enable = true;
|
||||
pylsp.enable = true;
|
||||
lua-ls.enable = true;
|
||||
};
|
||||
extraPlugins = with pkgs.vimPlugins; [ vim-just ];
|
||||
};
|
||||
wpd = pkgs.writeShellApplication {
|
||||
name = "wpd";
|
||||
runtimeInputs = with pkgs; [ swaybg xdg-user-dirs fd uutils-coreutils-noprefix ];
|
||||
runtimeEnv = { WAYLAND_DISPLAY = "wayland-1"; };
|
||||
text = ''
|
||||
random_pic () {
|
||||
bg_dir="$(xdg-user-dir PICTURES)/bg"
|
||||
fd . --extension png "$bg_dir" | shuf -n1
|
||||
}
|
||||
swaybg -i "$(random_pic)" -m fill &
|
||||
OLD_PID=$!
|
||||
while true; do
|
||||
sleep 60
|
||||
swaybg -i "$(random_pic)" -m fill &
|
||||
NEXT_PID=$!
|
||||
sleep 5
|
||||
kill -9 $OLD_PID
|
||||
OLD_PID=$NEXT_PID
|
||||
done
|
||||
'';
|
||||
};
|
||||
screenshot = pkgs.writeShellApplication {
|
||||
name = "screenshot";
|
||||
runtimeInputs = with pkgs; [ wl-clipboard xdg-utils ];
|
||||
text = ''
|
||||
ss_dir="$(xdg-user-dir PICTURES)/ss"
|
||||
pic_dir="$ss_dir/$(date "+%Y-%m-%d_%H-%M-%S").png"
|
||||
|
||||
mkdir -p "$ss_dir"
|
||||
|
||||
copy_image () {
|
||||
wl-copy < "$pic_dir"
|
||||
}
|
||||
|
||||
main () {
|
||||
grim "$pic_dir"
|
||||
copy_image
|
||||
}
|
||||
|
||||
main
|
||||
'';
|
||||
};
|
||||
cursors = pkgs.catppuccin-cursors.overrideAttrs (prev: rec {
|
||||
version = "0.3.1";
|
||||
nativeBuildInputs = prev.nativeBuildInputs ++ [ pkgs.xcur2png ];
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "cursors";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-CuzD6O/RImFKLWzJoiUv7nlIdoXNvwwl+k5mTeVIY10=";
|
||||
};
|
||||
});
|
||||
webshite = inputs.webshite.packages.${system}.default;
|
||||
sal = inputs.sal.packages."x86_64-linux".default;
|
||||
};
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user