Compare commits

..

No commits in common. "0d8a07bd54b417b41f2882148854b4514e37e91a" and "4d7bd7ecfa72601a7367ae3d31fcc1e41cfd5ea0" have entirely different histories.

306 changed files with 2998 additions and 3556 deletions

2
.gitattributes vendored
View file

@ -1 +1 @@
variables/secrets/** filter=git-crypt diff=git-crypt extras/secrets.nix filter=git-crypt diff=git-crypt

View file

@ -1,39 +1,33 @@
## Jimbo's Nix Systems ## My Nix files, now organized in a flake.
Thanks for taking a look at my Nix* flake! Thanks for taking a look at my Nix* configs!
While this is primarily organized for my own use, you may find each individual service or config useful to read, reference, learn from, and adapt for your own systems. While this is primarily organized for my use only, you may find each individual service file or user config to be a good starting point, or something to take and adapt into your own config.
### Installation ### Installation
Installing this flake is best done from an existing system. A minimal install is fastest, but is up to you. After installing NixOS, backup your hardware-config.nix file, and adapt it to fit the format of ``/hosts``, adjusting for your specific system. Installing any of my flakes onto a system should be done after any initial install. I would opt to do a minimal install, but this is up to you.
After installing NixOS, backup your hardware-config.nix file, so you can adapt it to fit the format of ``nixos/hardware/machines``, then adjusting the other referenced files in the flake.nix file to reference your specific computer.
An initial install will can be done with ``nixos-rebuild switch --flake /etc/nixos/.#host``, where ``host`` is a hostname defined in this flake. You may also have to enable "experimental" features with a flag, such as nix-command and flakes. An initial install will have to be ran as ``nixos-rebuild switch --flake /etc/nixos/.#HOSTNAME``, where HOSTNAME is a hostname defined in your flake. You may also have to enable "experimental" features with a flag, such as nix-command and flakes.
Home-Manager is handled separately, despite being in the same folder. A rebuild of a user's home would have to be done with ``home-manager switch --flake /etc/nixos``. This will pull the config as defined in the flake as ``USER@HOSTNAME``, where USER is the user running the ``home-manager`` command.
Home-Manager is handled separately from the system, despite being in the same folder. A rebuild of a user's home is done with ``home-manager switch --flake /etc/nixos/.#user@host``, as defined under ``homeConfigurations`` in the flake.
### Usage ### Usage
My config uses these tools: My config uses these tools:
``Sway`` - Window manager / Desktop Sway - Window manager / Desktop
``ZSH`` - Primary shell Foot - Terminal emulator
``Foot`` - Terminal emulator Rofi - App launcher and menu system
``Rofi`` - App launcher and menu system ZSH - Primary shell
I have defined shell aliases in ZSH for rebuilding different parts of Nix, they are as follows: I have made shell aliases in ZSH for rebuilding the system. They are as follows:
`flakedate` - Update the flake.lock, which renews the sources of nixpkgs. This is needed to update the system. `flakedate` - Update the flake.lock, which renews the sources of nixpkgs. This is needed to update the system.
`sysswitch` - Switch the system profile. `sysswitch` - Switch the system profile.
`homeswitch` = Switch the user's home-manager profile. `homeswitch` = Switch the user's home-manager profile.
`nixswitch` = Switch both user and system profile. `nixswitch` = Switch to new config for both user and system.
`nixdate` = Same as before, but updating flake.nix before doing so. This is essentially a full system update. `nixdate` = Same as before, but updating flake.nix before doing so. This is essentially a full system update.
My server's config heavily references a git-crypt protected secrets file. These will have to be adapted and rewritten if anyone is to use my config directly. My config heavily references a gnupg-protected secrets file. These will have to be adapted and rewritten if anyone is to use my config for themselves.
For my use, unlocking secrets can be done with this command: For my use, unlocking secrets can be done with this command:
``gpg --pinentry-mode loopback --decrypt local.key.asc | git-crypt unlock -`` ``gpg --pinentry-mode loopback --decrypt local.key.asc | git-crypt unlock -``
### Credits
Without the help of heavy inspiration, I would not have been able to learn and get up and running nearly as quickly. My most heavily borrowed configs are as follows:
[CloudyChris' nix-starter-configs fork](https://github.com/CloudyChris/NixOsConfig), the very initial base of my conversion to flakes.
[WillPower3309's personal flake](https://github.com/WillPower3309/nixos-config) for being a pleasure in the SwayFX Discord and having a really nice flake.nix file I borrowed from.
[Jules Sommer's minimal flake](https://github.com/WillPower3309/swayfx) for giving me a good basis for writing individual files and repeatedly helping me throughout the entire process.
Made with love ❤️ Made with love ❤️
![image](./preview.png) ![image](./preview.png)

4
extras/cmd.nix Normal file
View file

@ -0,0 +1,4 @@
{
auth = "doas";
nixcfg = "ranger /etc/nixos";
}

6
extras/displays.nix Normal file
View file

@ -0,0 +1,6 @@
{
d1 = "DP-3";
d2 = "DP-1";
d3 = "DP-2";
dI = "eDP-1";
}

11
extras/ips.nix Normal file
View file

@ -0,0 +1,11 @@
rec {
netInt = "eno1";
localSpan = "10.0.0";
server = "${localSpan}.2";
pc = "${localSpan}.3";
vm = "${localSpan}.4";
hx = "${localSpan}.70";
wgInt = "wg0";
wgSpan = "10.100.0";
}

21
extras/look.nix Normal file
View file

@ -0,0 +1,21 @@
{
colors = {
prime = ''3823C4''; #3823C4
accent = ''1B1F59''; #1B1F59
split = ''555B9E''; #555B9E
actSplit = ''5980B7''; #5980B7
dark = ''101419''; #101419
mid = ''171C23''; #171C23
light = ''272b33''; #272B33
urgent = ''C43823''; #C43823
text = ''C7D3E3''; #C7D3E3
};
fonts = {
main = ''Ubuntu'';
nerd = ''UbuntuMono Nerd Font'';
};
border = rec {
int = 3;
string = toString int;
};
}

17
extras/overlays.nix Normal file
View file

@ -0,0 +1,17 @@
{inputs, ...}: {
# This one brings our custom packages from the 'pkgs' directory
additions = final: _prev: import ./pkgs {pkgs = final;};
selfsuper = (self: super: {
mpv = super.mpv.override {
scripts = with self.mpvScripts; [mpris sponsorblock thumbnail];
};
});
finalprev = (final: prev: {
unstable = import inputs.unstable {
system = final.system;
config.allowUnfree = true;
};
});
}

5
extras/pkgs/default.nix Normal file
View file

@ -0,0 +1,5 @@
# Custom packages, that can be defined similarly to nixpkgs
{pkgs, ...}: {
xash3d = pkgs.callPackage ./xash/xash3d.nix {};
hlsdk = pkgs.callPackage ./xash/hlsdk.nix {};
}

View file

@ -0,0 +1,72 @@
{
# Define domains
jimDomain = "";
# User account passwords, generated with 'mkpasswd -m sha-512'
jimboAccPass = "";
# External emails
jimUsername = "";
jimEmail = "";
# SSH Keys
jimKeys = [
""
""
];
# System timezone in standard timezone identifier format
timeZone = "";
# Cloudflare API key
flareApiKey = "";
# Wireguard keys, generated with the wg command
wgServerPriv = "";
wgServerPub = "";
wgClientPriv = "";
wgClientPub = "";
wgPixel9Pub = "";
wgOraclePub = "";
# Icecast, plaintext
castAdminPass = "";
castSourcePass = "";
# Photoprism, plaintext
prismAdminPass = "";
# Matrix secrets
matrixSecret = "";
discordBotID = "";
discordBotToken = "";
# Pixelfed secret, must be 32 characters long
pixelfedKey = ''
APP_KEY=
'';
# Transmission credentials, plaintext
transmissionCredFile = ''
{
"rpc-username": "",
"rpc-password": ""
}
'';
# Email cleartext passwords
noreplyPassword = "";
# Email account hashes, generated with 'mkpasswd -m bcrypt'
noreplyMailHash = "";
jimboMailHash = "";
lunaMailHash = "";
freecornMailHash = "";
tinyMailHash = "";
# IPs
jimIP1 = "";
jimIP2 = "";
lunaIP = "";
cornIP = "";
}

BIN
extras/secrets.nix Normal file

Binary file not shown.

21
extras/workspaces.nix Normal file
View file

@ -0,0 +1,21 @@
{
w0 = ''0:0'';
w1 = ''1:1'';
w2 = ''2:2'';
w3 = ''3:3'';
w4 = ''4:4'';
w5 = ''5:5'';
w6 = ''6:6'';
w7 = ''7:7'';
w8 = ''8:8'';
w9 = ''9:9'';
w1a = ''11:I'';
w2a = ''22:II'';
w3a = ''33:III'';
w4a = ''44:IV'';
w5a = ''55:V'';
w6a = ''66:VI'';
w7a = ''77:VII'';
w8a = ''88:VIII'';
w9a = ''99:IX'';
}

View file

@ -33,30 +33,6 @@
"type": "gitlab" "type": "gitlab"
} }
}, },
"chaotic": {
"inputs": {
"flake-schemas": "flake-schemas",
"home-manager": "home-manager",
"jovian": "jovian",
"nixpkgs": [
"unstable"
]
},
"locked": {
"lastModified": 1729510449,
"narHash": "sha256-/EwjBMYBZ3/2ROT+4M/6tLomgJEgZBpKosWhqtYZkDI=",
"owner": "chaotic-cx",
"repo": "nyx",
"rev": "4e03e8d762623ca925c604800aa18f109cd3bd97",
"type": "github"
},
"original": {
"owner": "chaotic-cx",
"ref": "nyxpkgs-unstable",
"repo": "nyx",
"type": "github"
}
},
"crane": { "crane": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -147,20 +123,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-schemas": {
"locked": {
"lastModified": 1721999734,
"narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=",
"rev": "0a5c42297d870156d9c57d8f99e476b738dcd982",
"revCount": 75,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz"
}
},
"flake-utils": { "flake-utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems"
@ -236,27 +198,6 @@
} }
}, },
"home-manager": { "home-manager": {
"inputs": {
"nixpkgs": [
"chaotic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1729414726,
"narHash": "sha256-Dtmm1OU8Ymiy9hVWn/a2B8DhRYo9Eoyx9veERdOBR4o=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "fe56302339bb28e3471632379d733547caec8103",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
@ -277,28 +218,6 @@
"type": "github" "type": "github"
} }
}, },
"jovian": {
"inputs": {
"nix-github-actions": "nix-github-actions",
"nixpkgs": [
"chaotic",
"nixpkgs"
]
},
"locked": {
"lastModified": 1729177642,
"narHash": "sha256-DdKal+ZhB9QD/tnEwFg4cZ4j4YnrkvSljBxnyG+3eE0=",
"owner": "Jovian-Experiments",
"repo": "Jovian-NixOS",
"rev": "bb69165ff372ddbd3228a03513922acd783040e8",
"type": "github"
},
"original": {
"owner": "Jovian-Experiments",
"repo": "Jovian-NixOS",
"type": "github"
}
},
"lanzaboote": { "lanzaboote": {
"inputs": { "inputs": {
"crane": "crane", "crane": "crane",
@ -369,29 +288,6 @@
"type": "github" "type": "github"
} }
}, },
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"chaotic",
"jovian",
"nixpkgs"
]
},
"locked": {
"lastModified": 1690328911,
"narHash": "sha256-fxtExYk+aGf2YbjeWQ8JY9/n9dwuEt+ma1eUFzF8Jeo=",
"owner": "zhaofengli",
"repo": "nix-github-actions",
"rev": "96df4a39c52f53cb7098b923224d8ce941b64747",
"type": "github"
},
"original": {
"owner": "zhaofengli",
"ref": "matrix-name",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1722221733, "lastModified": 1722221733,
@ -470,17 +366,18 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1728740863, "lastModified": 1727540905,
"narHash": "sha256-u+rxA79a0lyhG+u+oPBRtTDtzz8kvkc9a6SWSt9ekVc=", "narHash": "sha256-40J9tW7Y794J7Uw4GwcAKlMxlX2xISBl6IBigo83ih8=",
"owner": "NixOS", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a3f9ad65a0bf298ed5847629a57808b97e6e8077", "rev": "fbca5e745367ae7632731639de5c21f29c8744ed",
"type": "github" "type": "github"
}, },
"original": { "original": {
"id": "nixpkgs", "owner": "nixos",
"ref": "nixos-24.05", "ref": "nixos-24.05",
"type": "indirect" "repo": "nixpkgs",
"type": "github"
} }
}, },
"nur": { "nur": {
@ -528,9 +425,8 @@
"root": { "root": {
"inputs": { "inputs": {
"blender-bin": "blender-bin", "blender-bin": "blender-bin",
"chaotic": "chaotic",
"hardware": "hardware", "hardware": "hardware",
"home-manager": "home-manager_2", "home-manager": "home-manager",
"lanzaboote": "lanzaboote", "lanzaboote": "lanzaboote",
"mailserver": "mailserver", "mailserver": "mailserver",
"minecraft": "minecraft", "minecraft": "minecraft",
@ -613,15 +509,16 @@
"locked": { "locked": {
"lastModified": 1728492678, "lastModified": 1728492678,
"narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=", "narHash": "sha256-9UTxR8eukdg+XZeHgxW5hQA9fIKHsKCdOIUycTryeVw=",
"owner": "NixOS", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7", "rev": "5633bcff0c6162b9e4b5f1264264611e950c8ec7",
"type": "github" "type": "github"
}, },
"original": { "original": {
"id": "nixpkgs", "owner": "nixos",
"ref": "nixos-unstable", "ref": "nixos-unstable",
"type": "indirect" "repo": "nixpkgs",
"type": "github"
} }
}, },
"utils": { "utils": {

118
flake.nix
View file

@ -1,91 +1,97 @@
{ {
description = "Jimbo's systems as a flake";
inputs = { inputs = {
nixpkgs.url = "nixpkgs/nixos-24.05"; nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
unstable.url = "nixpkgs/nixos-unstable"; unstable.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager/release-24.05";
inputs.nixpkgs.follows = "nixpkgs";
};
nur.url = "github:nix-community/NUR"; nur.url = "github:nix-community/NUR";
chaotic = { mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-24.05";
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
inputs.nixpkgs.follows = "unstable";
};
blender-bin.url = "https://flakehub.com/f/edolstra/blender-bin/1.0.9.tar.gz"; blender-bin.url = "https://flakehub.com/f/edolstra/blender-bin/1.0.9.tar.gz";
minecraft.url = "github:Infinidoge/nix-minecraft";
hardware.url = "github:nixos/nixos-hardware/master"; hardware.url = "github:nixos/nixos-hardware/master";
# Secure boot
lanzaboote = { lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.1"; url = "github:nix-community/lanzaboote/v0.4.1";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
mailserver.url = "gitlab:simple-nixos-mailserver/nixos-mailserver/nixos-24.05"; # Home manager
minecraft.url = "github:Infinidoge/nix-minecraft"; home-manager = {
url = "github:nix-community/home-manager/release-24.05";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { outputs = {
self,
nixpkgs, nixpkgs,
unstable, unstable,
home-manager,
nur, nur,
chaotic, mailserver,
blender-bin, blender-bin,
hardware, hardware,
lanzaboote, lanzaboote,
mailserver, home-manager,
minecraft,
... ...
}: }@inputs: let
let mkNixos = modules: nixpkgs.lib.nixosSystem {
mkNix = modules: nixpkgs.lib.nixosSystem {
inherit modules; inherit modules;
specialArgs = { specialArgs = { inherit (self) inputs outputs; };
inherit
unstable
chaotic
hardware
lanzaboote
mailserver
minecraft
;
};
}; };
mkHome = modules: pkgs: home-manager.lib.homeManagerConfiguration { mkHome = modules: pkgs: home-manager.lib.homeManagerConfiguration {
inherit modules pkgs; inherit modules pkgs;
extraSpecialArgs = { extraSpecialArgs = { inherit (self) inputs outputs; };
inherit
unstable
nur
blender-bin
;
};
}; };
in { in {
# nixos-rebuild switch --flake .#hostname # Your custom packages and modifications, exported as overlays
nixosConfigurations = { overlays = import ./extras/overlays.nix { inherit inputs; };
# PCs and Laptops
firefly = mkNix [ ./hosts/firefly/system ];
shuttleworth = mkNix [ ./hosts/shuttleworth/system ];
lacros = mkNix [ ./hosts/lacros/system ];
redmond = mkNix [ ./hosts/redmond/system ];
# Servers # Variables defined so they can be accessed globally
cyberspark = mkNix [ ./hosts/cyberspark/system ]; secrets = import ./extras/secrets.nix;
bomberman = mkNix [ ./hosts/bomberman/system ]; cmd = import ./extras/cmd.nix;
displays = import ./extras/displays.nix;
ips = import ./extras/ips.nix;
look = import ./extras/look.nix;
ws = import ./extras/workspaces.nix;
# NixOS configuration: 'nixos-rebuild --flake .#hostname'
nixosConfigurations = {
JimDesktop = mkNixos [
./system/hosts/JimDesktop/configuration.nix
lanzaboote.nixosModules.lanzaboote
];
JimServer = mkNixos [
./system/hosts/JimServer/configuration.nix
mailserver.nixosModule
];
JimPine = mkNixos [
./system/hosts/JimPine/configuration.nix
hardware.nixosModules.pine64-pinebook-pro
];
}; };
# home-manager switch --flake .#username@hostname # Home-manager configuration: 'home-manager --flake .#username@hostname'
homeConfigurations = { homeConfigurations = {
"jimbo@firefly" = mkHome [ ./hosts/firefly/home ] nixpkgs.legacyPackages.x86_64-linux; "jimbo@JimDesktop" = mkHome [
"jimbo@shuttleworth" = mkHome [ ./hosts/shuttleworth/home ] nixpkgs.legacyPackages.aarch64-linux; ./home/hosts/JimDesktop/home.nix
"jimbo@lacros" = mkHome [ ./hosts/lacros/home ] nixpkgs.legacyPackages.x86_64-linux; nur.nixosModules.nur
"jimbo@redmond" = mkHome [ ./hosts/redmond/home ] nixpkgs.legacyPackages.x86_64-linux; ] nixpkgs.legacyPackages.x86_64-linux;
"jimbo@cyberspark" = mkHome [ ./hosts/cyberspark/home ] nixpkgs.legacyPackages.x86_64-linux; "jimbo@JimServer" = mkHome [
"jimbo@bomberman" = mkHome [ ./hosts/bomberman/home ] nixpkgs.legacyPackages.aarch64-linux; ./home/hosts/JimServer/home.nix
] nixpkgs.legacyPackages.x86_64-linux;
"jimbo@JimPine" = mkHome [
./home/hosts/JimPine/home.nix
nur.nixosModules.nur
] nixpkgs.legacyPackages.aarch64-linux;
# Profile for ssh envrionments on different non-root systems
"jimbo@JimTerminal" = mkHome [
./home/hosts/JimTerminal/home.nix
] nixpkgs.legacyPackages.x86_64-linux;
}; };
}; };
} }

View file

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

View file

Before

Width:  |  Height:  |  Size: 2 MiB

After

Width:  |  Height:  |  Size: 2 MiB

View file

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

View file

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

View file

Before

Width:  |  Height:  |  Size: 314 KiB

After

Width:  |  Height:  |  Size: 314 KiB

41
home/base.nix Normal file
View file

@ -0,0 +1,41 @@
# This is your home-manager configuration file
# Use this to configure your home environment (it replaces ~/.config/nixpkgs/home.nix)
{pkgs, inputs, outputs, ...}: {
imports = [
# Terminal apps
./utils/zsh.nix
./utils/fastfetch.nix
./utils/neovim.nix
./utils/ranger.nix
./utils/tmux.nix
# Services
./services/reloadunits.nix
];
nixpkgs = {
config.allowUnfree = true;
overlays = [
outputs.overlays.additions
outputs.overlays.selfsuper
outputs.overlays.finalprev
inputs.blender-bin.overlays.default
];
};
# Common programs I'll need everywhere
home.packages = with pkgs; [
home-manager
gotop
tcptrack
p7zip
vimv
dua
pciutils
usbutils
protonvpn-cli_2
];
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
home.stateVersion = "24.05";
}

View file

@ -0,0 +1,47 @@
{config, ...}: {
imports = [
# Common modules
./../../base.nix
./../../users/jimbo.nix
./../../utils/git.nix
# GUI Apps
./../../misc/guifiles.nix
./../../misc/fonts.nix
./../../sway/sway.nix
./../../sway/swaylock.nix
./../../programs/gtk.nix
./../../programs/foot.nix
./../../programs/librewolf.nix
./../../programs/mangohud.nix
./../../programs/mpv.nix
./../../programs/obs.nix
./../../programs/pcmanfm-qt.nix
./../../programs/rofi.nix
./../../programs/swappy.nix
./../../programs/easyeffects.nix
./../../utils/ncmpcpp.nix
# Misc apps and tools
./../../misc/useful.nix
./../../misc/avtools.nix
./../../misc/filemanager.nix
./../../misc/production.nix
./../../misc/gaming.nix
./../../misc/xash3d.nix
#./../../misc/emulators.nix
#./../../misc/remotedesktop.nix
./../../misc/school.nix
./../../misc/variables.nix
# Services
./../../services/gnome-keyring.nix
./../../services/mako.nix
./../../services/udiskie.nix
];
# Symlinks
home.file = {
"VMs".source = config.lib.file.mkOutOfStoreSymlink "/etc/libvirt/VMs";
};
}

View file

@ -0,0 +1,40 @@
{
imports = [
# Common modules
./../../base.nix
./../../users/jimbo.nix
./../../utils/git.nix
# GUI Apps
./../../misc/guifiles.nix
./../../misc/fonts.nix
./../../sway/sway.nix
./../../sway/swaylock.nix
./../../programs/gtk.nix
./../../programs/foot.nix
./../../programs/librewolf.nix
./../../programs/mangohud.nix
./../../programs/mpv.nix
./../../programs/obs.nix
./../../programs/pcmanfm-qt.nix
./../../programs/rofi.nix
./../../programs/swappy.nix
./../../programs/easyeffects.nix
./../../utils/ncmpcpp.nix
# Misc apps and tools
./../../misc/useful.nix
./../../misc/avtools.nix
./../../misc/filemanager.nix
./../../misc/gaming.nix
./../../misc/xash3d.nix
./../../misc/remotedesktop.nix
./../../misc/school.nix
./../../misc/variables.nix
# Services
./../../services/gnome-keyring.nix
./../../services/mako.nix
./../../services/udiskie.nix
];
}

View file

@ -0,0 +1,43 @@
{pkgs, outputs, ...}: {
imports = [
# Common modules
./../../base.nix
./../../users/jimbo.nix
./../../utils/git.nix
# GUI Apps
./../../misc/guifiles.nix
./../../misc/fonts.nix
./../../sway/sway.nix
./../../sway/swaylock.nix
./../../programs/gtk.nix
./../../programs/foot.nix
./../../programs/librewolf.nix
./../../programs/mangohud.nix
./../../programs/mpv.nix
./../../programs/pcmanfm-qt.nix
./../../programs/rofi.nix
./../../programs/swappy.nix
./../../programs/easyeffects.nix
./../../utils/ncmpcpp.nix
# Misc apps and tools
./../../misc/useful.nix
./../../misc/avtools.nix
./../../misc/filemanager.nix
./../../misc/remotedesktop.nix
./../../misc/variables.nix
# Services
./../../services/gnome-keyring.nix
./../../services/mako.nix
./../../services/udiskie.nix
];
# Needed to make the speaker work
home.packages = with pkgs; [
alsa-utils
];
wayland.windowManager.sway.config.output.${outputs.displays.dI}.scale = "1.3";
}

View file

@ -0,0 +1,8 @@
{
imports = [
# Common modules
./../../base.nix
./../../users/jimbo.nix
./../../utils/git.nix
];
}

View file

@ -0,0 +1,14 @@
{
imports = [
# Common modules
./../../base.nix
./../../users/jimbo.nix
];
# Rebuild this entire system
programs.zsh = {
shellAliases = {
termswitch = "home-manager switch --flake ~/.home-manager/.#jimbo@JimTerminal --extra-experimental-features 'nix-command flakes'";
};
};
}

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
yt-dlp yt-dlp
spotdl spotdl

View file

@ -1,11 +1,10 @@
{ pkgs, lib, config, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
dolphin-emu dolphin-emu
cemu cemu
ryujinx ryujinx
duckstation duckstation
pcsx2 pcsx2
#lime3ds unstable.lime3ds
]; ];
} }

View file

@ -0,0 +1,7 @@
{pkgs, ...}: {
home.packages = with pkgs; [
gnome.file-roller
imagemagick
poppler_utils
];
}

View file

@ -1,5 +1,4 @@
{ pkgs, lib, config, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
steam steam
steam-run steam-run

15
home/misc/guifiles.nix Normal file
View file

@ -0,0 +1,15 @@
{pkgs, ...}: {
# Files that only make sense with a GUI
home.file = {
".face" = {
source = ../assets/user-icon.png;
};
".wallpapers" = {
source = ../assets/wallpapers;
recursive = true;
};
".icons/default" = {
source = "${pkgs.simp1e-cursors}/share/icons/Simp1e-Dark";
};
};
}

9
home/misc/production.nix Normal file
View file

@ -0,0 +1,9 @@
{pkgs, ...}: {
home.packages = with pkgs; [
krita
inkscape
audacity
blender_4_2
sunvox
];
}

View file

@ -1,5 +1,4 @@
{ pkgs, lib, config, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
moonlight-qt moonlight-qt
rustdesk-flutter rustdesk-flutter

View file

@ -1,9 +1,9 @@
{ pkgs, lib, config, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
remmina remmina
freerdp freerdp
zoom-us
globalprotect-openconnect globalprotect-openconnect
python3
zoom-us
]; ];
} }

View file

@ -1,9 +1,10 @@
{ pkgs, lib, config, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
imv imv
qbittorrent qbittorrent
libreoffice-fresh libreoffice-fresh
vesktop
fractal
ffmpegthumbnailer ffmpegthumbnailer
thunderbird thunderbird
protonvpn-cli_2 protonvpn-cli_2

30
home/misc/variables.nix Normal file
View file

@ -0,0 +1,30 @@
{pkgs, inputs, ...}: {
# Select default apps
xdg.mimeApps.defaultApplications = {
"inode/directory" = ["pcmanfm-qt.desktop"];
"text/plain" = ["nvim.desktop"];
"image/png" = ["imv.desktop"];
"image/jpeg" = ["imv.desktop"];
"video/*" = ["mpv.desktop"];
};
# Set dconf settings
dconf.settings = {
"org/gnome/desktop/interface/color-scheme" = {
color-scheme = "prefer-dark";
};
"org/virt-manager/virt-manager/connections" = {
autoconnect = ["qemu:///system"];
uris = ["qemu:///system"];
};
};
home.file = let
alsoftConf = ''
drivers=pulse
'';
in {
# Alsoft config
".alsoftrc".text = alsoftConf;
};
}

View file

@ -1,6 +1,6 @@
{ pkgs, lib, config, ... }: {pkgs, ...}: {
{
home.packages = with pkgs; [ home.packages = with pkgs; [
xash3d xash3d
hlsdk
]; ];
} }

View file

@ -0,0 +1,309 @@
{pkgs, ...}: {
home = {
packages = with pkgs; [
easyeffects
];
file = let
# An Easyeffects equalizer profile that sounds good to me
easyEffectsProfile = ''
{
"output": {
"blocklist": [],
"crystalizer#0": {
"band0": {
"bypass": false,
"intensity": 0.0,
"mute": false
},
"band1": {
"bypass": false,
"intensity": -1.0,
"mute": false
},
"band2": {
"bypass": false,
"intensity": -2.0,
"mute": false
},
"band3": {
"bypass": false,
"intensity": -3.0,
"mute": false
},
"band4": {
"bypass": false,
"intensity": -4.0,
"mute": false
},
"band5": {
"bypass": false,
"intensity": -5.0,
"mute": false
},
"band6": {
"bypass": false,
"intensity": -6.0,
"mute": false
},
"band7": {
"bypass": false,
"intensity": -7.0,
"mute": false
},
"band8": {
"bypass": false,
"intensity": -8.0,
"mute": false
},
"band9": {
"bypass": false,
"intensity": -9.0,
"mute": false
},
"band10": {
"bypass": false,
"intensity": -10.0,
"mute": false
},
"band11": {
"bypass": false,
"intensity": -11.0,
"mute": false
},
"band12": {
"bypass": false,
"intensity": -12.0,
"mute": false
},
"bypass": false,
"input-gain": 0.0,
"output-gain": 0.0
},
"equalizer#0": {
"balance": 0.0,
"bypass": false,
"input-gain": 0.0,
"left": {
"band0": {
"frequency": 32.0,
"gain": 1.1,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band1": {
"frequency": 64.0,
"gain": 1.16,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band2": {
"frequency": 125.0,
"gain": 3.33,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band3": {
"frequency": 250.0,
"gain": 1.53,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band4": {
"frequency": 500.0,
"gain": -1.83,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band5": {
"frequency": 1000.0,
"gain": -0.58,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band6": {
"frequency": 2000.0,
"gain": 1.42,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band7": {
"frequency": 4000.0,
"gain": 4.73,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band8": {
"frequency": 16000.0,
"gain": 7.62,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band9": {
"frequency": 156.38,
"gain": 2.84,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
}
},
"mode": "IIR",
"num-bands": 10,
"output-gain": 0.0,
"pitch-left": 0.0,
"pitch-right": 0.0,
"right": {
"band0": {
"frequency": 32.0,
"gain": 1.1,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band1": {
"frequency": 64.0,
"gain": 1.16,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band2": {
"frequency": 125.0,
"gain": 3.33,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band3": {
"frequency": 250.0,
"gain": 1.53,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band4": {
"frequency": 500.0,
"gain": -1.83,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band5": {
"frequency": 1000.0,
"gain": -0.58,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band6": {
"frequency": 2000.0,
"gain": 1.42,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band7": {
"frequency": 4000.0,
"gain": 4.73,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band8": {
"frequency": 16000.0,
"gain": 7.62,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
},
"band9": {
"frequency": 156.38,
"gain": 2.84,
"mode": "RLC (BT)",
"mute": false,
"q": 4.36,
"slope": "x1",
"solo": false,
"type": "Bell"
}
},
"split-channels": false
},
"plugins_order": [
"equalizer#0",
"crystalizer#0"
]
}
}
'';
in {
# Easyeffects profile
".config/easyeffects/output/JimHeadphones.json".text = easyEffectsProfile;
};
};
}

View file

@ -1,19 +1,19 @@
{ config, ... }: {outputs, ...}: {
{ # Enable a terminal emulator
programs.foot = { programs.foot = {
enable = true; enable = true;
server.enable = false; server.enable = false;
settings = { settings = {
main = { main = {
term = "xterm-256color"; term = "xterm-256color";
font = "${config.look.fonts.nerd}:size=14.7"; font = "${outputs.look.fonts.nerd}:size=14.7";
}; };
cursor = { cursor = {
style = "beam"; style = "beam";
}; };
colors = { colors = {
alpha = "0.85"; alpha = "0.65";
background = "${config.look.colors.dark}"; background = "${outputs.look.colors.dark}";
regular0 = "3f3f3f"; regular0 = "3f3f3f";
regular1 = "cc0000"; regular1 = "cc0000";
regular2 = "4e9a06"; regular2 = "4e9a06";

View file

@ -1,9 +1,9 @@
{ pkgs, config, ... }: {pkgs, outputs, ...}: {
{ # Define GTK theme settings
gtk = { gtk = {
enable = true; enable = true;
font = { font = {
name = "${config.look.fonts.main}"; name = "${outputs.look.fonts.main}";
size = 11; size = 11;
}; };
theme = { theme = {
@ -16,7 +16,7 @@
}; };
}; };
iconTheme = { iconTheme = {
package = pkgs.papirus-icon-theme.override { color = "${config.look.colors.folder}"; }; package = pkgs.papirus-icon-theme.override {color = "indigo";};
name = "Papirus-Dark"; name = "Papirus-Dark";
}; };
cursorTheme = { cursorTheme = {
@ -24,6 +24,7 @@
name = "Simp1e-Dark"; name = "Simp1e-Dark";
}; };
# GTK app bookmarks
gtk3 = { gtk3 = {
bookmarks = [ bookmarks = [
# Local # Local
@ -33,7 +34,16 @@
"file:///home/jimbo/Pictures/Screenshots" "file:///home/jimbo/Pictures/Screenshots"
"file:///home/jimbo/VMs" "file:///home/jimbo/VMs"
# Remote
"file:///home/jimbo/JimboNFS/Downloads"
"file:///home/jimbo/JimboNFS/Documents"
"file:///home/jimbo/JimboNFS/Music"
"file:///home/jimbo/JimboNFS/Photos"
"file:///home/jimbo/JimboNFS/Videos"
"file:///home/jimbo/JimboNFS/Projects"
# More important stuff # More important stuff
"file:///home/jimbo/JimboNFS/School"
"file:///etc/nixos" "file:///etc/nixos"
]; ];

View file

@ -1,31 +1,30 @@
{ pkgs, config, ... }: {pkgs, config, outputs, ...}: let
let # FireFox colors
# FireFox colors, based on https://github.com/Dook97/firefox-qutebrowser-userchrome
themeJim = '' themeJim = ''
:root { :root {
--tab-active-bg-color: #${config.look.colors.prime}; --tab-active-bg-color: #${outputs.look.colors.prime};
--tab-hover-bg-color: #${config.look.colors.accent}; --tab-hover-bg-color: #${outputs.look.colors.accent};
--tab-inactive-bg-color: #${config.look.colors.dark}; --tab-inactive-bg-color: #${outputs.look.colors.dark};
--tab-active-fg-fallback-color: #FFFFFF; --tab-active-fg-fallback-color: #FFFFFF;
--tab-inactive-fg-fallback-color: #${config.look.colors.text}; --tab-inactive-fg-fallback-color: #${outputs.look.colors.text};
--urlbar-focused-bg-color: #${config.look.colors.dark}; --urlbar-focused-bg-color: #${outputs.look.colors.dark};
--urlbar-not-focused-bg-color: #${config.look.colors.dark}; --urlbar-not-focused-bg-color: #${outputs.look.colors.dark};
--toolbar-bgcolor: #${config.look.colors.dark} !important; --toolbar-bgcolor: #${outputs.look.colors.dark} !important;
''; '';
themeAlt = '' themeAlt = ''
:root { :root {
--tab-active-bg-color: #${config.look.colors.dark}; --tab-active-bg-color: #${outputs.look.colors.dark};
--tab-hover-bg-color: #${config.look.colors.accent}; --tab-hover-bg-color: #${outputs.look.colors.accent};
--tab-inactive-bg-color: #${config.look.colors.prime}; --tab-inactive-bg-color: #${outputs.look.colors.prime};
--tab-active-fg-fallback-color: #${config.look.colors.text}; --tab-active-fg-fallback-color: #${outputs.look.colors.text};
--tab-inactive-fg-fallback-color: #FFFFFF; --tab-inactive-fg-fallback-color: #FFFFFF;
--urlbar-focused-bg-color: #${config.look.colors.prime}; --urlbar-focused-bg-color: #${outputs.look.colors.prime};
--urlbar-not-focused-bg-color: #${config.look.colors.prime}; --urlbar-not-focused-bg-color: #${outputs.look.colors.prime};
--toolbar-bgcolor: #${config.look.colors.prime} !important; --toolbar-bgcolor: #${outputs.look.colors.prime} !important;
''; '';
quteFoxCSS = '' quteFoxCSS = ''
--tab-font: '${config.look.fonts.main}'; --tab-font: '${outputs.look.fonts.main}';
--urlbar-font: '${config.look.fonts.main}'; --urlbar-font: '${outputs.look.fonts.main}';
/* try increasing if you encounter problems */ /* try increasing if you encounter problems */
--urlbar-height-setting: 24px; --urlbar-height-setting: 24px;
@ -336,9 +335,9 @@ in {
}; };
}; };
commonSettings = { commonSettings = {
"font.name.serif.x-western" = "${config.look.fonts.main}"; "font.name.serif.x-western" = "${outputs.look.fonts.main}";
"font.name.sans-serif.x-western" = "${config.look.fonts.main}"; "font.name.sans-serif.x-western" = "${outputs.look.fonts.main}";
"font.name.monospace.x-western" = "${config.look.fonts.nerd}"; "font.name.monospace.x-western" = "${outputs.look.fonts.nerd}";
"general.autoScroll" = true; "general.autoScroll" = true;
"browser.compactmode.show" = true; "browser.compactmode.show" = true;
"browser.uidensity" = 1; "browser.uidensity" = 1;

View file

@ -1,11 +1,11 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
mangohud mangohud
]; ];
file = { file = let
".config/MangoHud/MangoHud.conf".text = '' # Mangohud config file
mangoConf = ''
table_columns=2 table_columns=2
frametime=0 frametime=0
legacy_layout=0 legacy_layout=0
@ -24,6 +24,9 @@
gpu_load_change gpu_load_change
frame_timing frame_timing
''; '';
in {
# Mangohud config
".config/MangoHud/MangoHud.conf".text = mangoConf;
}; };
}; };
} }

View file

@ -1,5 +1,5 @@
{ ... }:
{ {
# MPV settings
programs.mpv = { programs.mpv = {
enable = true; enable = true;
config = { config = {

View file

@ -1,5 +1,5 @@
{ pkgs, lib, config, ... }: {pkgs, ...}: {
{ # OBS with plugins
programs.obs-studio = { programs.obs-studio = {
enable = true; enable = true;
plugins = with pkgs.obs-studio-plugins; [ plugins = with pkgs.obs-studio-plugins; [

View file

@ -1,12 +1,12 @@
{ pkgs, ... }: {pkgs, ...}: {
{ # Swappy config file
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
pcmanfm-qt pcmanfm-qt
gnome.file-roller
]; ];
file = { file = let
".config/pcmanfm-qt/default/settings.conf".text = '' # File manager config
pcmanConf = ''
[Behavior] [Behavior]
BookmarkOpenMethod=current_tab BookmarkOpenMethod=current_tab
ConfirmDelete=true ConfirmDelete=true
@ -53,6 +53,9 @@
SwitchToNewTab=true SwitchToNewTab=true
TabPaths=@Invalid() TabPaths=@Invalid()
''; '';
in {
# PCManFM config
".config/pcmanfm-qt/default/settings.conf".text = pcmanConf;
}; };
}; };
} }

View file

@ -1,10 +1,10 @@
{ pkgs, config, ... }: {pkgs, config, outputs, ...}: {
{ # Enable Rofi
programs.rofi = { programs.rofi = {
enable = true; enable = true;
package = pkgs.rofi-wayland; package = pkgs.rofi-wayland;
terminal = "foot"; terminal = "foot";
font = "${config.look.fonts.main} 14"; font = "${outputs.look.fonts.main} 14";
theme = let theme = let
inherit (config.lib.formats.rasi) mkLiteral; inherit (config.lib.formats.rasi) mkLiteral;
in { in {
@ -15,24 +15,24 @@
red = mkLiteral "#DC322F"; red = mkLiteral "#DC322F";
background-color = mkLiteral "#00000000"; background-color = mkLiteral "#00000000";
separatorcolor = mkLiteral "#00000000"; separatorcolor = mkLiteral "#00000000";
normal-foreground = mkLiteral "#${config.look.colors.text}"; normal-foreground = mkLiteral "#${outputs.look.colors.text}";
normal-background = mkLiteral "#${config.look.colors.dark}1A"; normal-background = mkLiteral "#${outputs.look.colors.dark}1A";
urgent-foreground = mkLiteral "#${config.look.colors.urgent}"; urgent-foreground = mkLiteral "#${outputs.look.colors.urgent}";
active-foreground = mkLiteral "#${config.look.colors.split}"; active-foreground = mkLiteral "#${outputs.look.colors.split}";
selected-active-foreground = mkLiteral "#${config.look.colors.prime}"; selected-active-foreground = mkLiteral "#${outputs.look.colors.prime}";
background = mkLiteral "#${config.look.colors.dark}D9"; background = mkLiteral "#${outputs.look.colors.dark}B3";
bordercolor = mkLiteral "#${config.look.colors.prime}"; bordercolor = mkLiteral "#${outputs.look.colors.prime}";
selected-normal-foreground = mkLiteral "#FFFFFF"; selected-normal-foreground = mkLiteral "#FFFFFF";
selected-normal-background = mkLiteral "#${config.look.colors.prime}80"; selected-normal-background = mkLiteral "#${outputs.look.colors.prime}80";
border-color = mkLiteral "#${config.look.colors.prime}"; border-color = mkLiteral "#${outputs.look.colors.prime}";
urgent-background = mkLiteral "#${config.look.colors.accent}26"; urgent-background = mkLiteral "#${outputs.look.colors.accent}26";
active-background = mkLiteral "#${config.look.colors.accent}26"; active-background = mkLiteral "#${outputs.look.colors.accent}26";
selected-active-background = mkLiteral "#${config.look.colors.split}54"; selected-active-background = mkLiteral "#${outputs.look.colors.split}54";
}; };
"#window" = { "#window" = {
background-color = mkLiteral "@background"; background-color = mkLiteral "@background";
width = 500; width = 500;
border = mkLiteral "${config.look.border.string}"; border = mkLiteral "${outputs.look.border.string}";
padding = 5; padding = 5;
}; };
"#message" = { "#message" = {
@ -124,7 +124,7 @@
}; };
}; };
home.packages = let home.packages = let
# A script to execute commands with Rofi # All my rofi scripts in one file
rofiScripts = pkgs.writeScriptBin "rofiscripts" '' rofiScripts = pkgs.writeScriptBin "rofiscripts" ''
# Scratchpad function # Scratchpad function
handle_scratchpads() { handle_scratchpads() {
@ -155,13 +155,13 @@
case $RET in case $RET in
Default) swaymsg reload ;; Default) swaymsg reload ;;
Wide) swaymsg " Wide) swaymsg "
output ${config.displays.d1} enable pos 1680 0 mode 1680x1050@59.954Hz output ${outputs.displays.d1} enable pos 1680 0 mode 1680x1050@59.954Hz
output ${config.displays.d2} enable pos 0 0 mode 1680x1050@59.954Hz output ${outputs.displays.d2} enable pos 0 0 mode 1680x1050@59.954Hz
output ${config.displays.d3} enable pos 3360 0 transform 0 output ${outputs.displays.d3} enable pos 3360 0 transform 0
";; ";;
GPU2) swaymsg " GPU2) swaymsg "
output ${config.displays.d2} enable pos 1680 0 mode 1920x1080@60Hz output ${outputs.displays.d2} enable pos 1680 0 mode 1920x1080@60Hz
output ${config.displays.d3} enable pos 0 0 transform 0 output ${outputs.displays.d3} enable pos 0 0 transform 0
";; ";;
esac esac
} }

19
home/programs/swappy.nix Normal file
View file

@ -0,0 +1,19 @@
{pkgs, ...}: {
# Swappy config file
home = {
packages = with pkgs; [
swappy
];
file = let
# Swappy config, for screenshot editing
swappyConfig = ''
[Default]
early_exit=true
save_dir=$HOME/Pictures/Screenshots
'';
in {
# Swappy's config
".config/swappy/config".text = swappyConfig;
};
};
}

View file

@ -0,0 +1,13 @@
{pkgs, ...}: {
services.gnome-keyring = {
enable = true;
components = [
"ssh"
];
};
home.packages = with pkgs; [
gnome.gnome-keyring
gnome.libgnome-keyring
];
}

View file

@ -1,22 +1,23 @@
{ pkgs, config, ... }: {pkgs, outputs, ...}: {
{ # Notification daemon
services.mako = { services.mako = {
enable = true; enable = true;
borderColor = "#${config.look.colors.accent}"; borderColor = "#${outputs.look.colors.accent}";
backgroundColor = "#${config.look.colors.dark}D9"; backgroundColor = "#${outputs.look.colors.dark}CC";
output = "${config.displays.d1}"; output = "${outputs.displays.d1}";
sort = "+time"; sort = "+time";
layer = "overlay"; layer = "overlay";
padding = "8"; padding = "8";
margin = "0"; margin = "0";
borderSize = config.look.border.int; borderSize = outputs.look.border.int;
maxIconSize = 40; maxIconSize = 40;
defaultTimeout = 6000; defaultTimeout = 6000;
font = "${config.look.fonts.main} 12"; font = "${outputs.look.fonts.main} 12";
anchor = "bottom-right"; anchor = "bottom-right";
extraConfig = "on-button-right=dismiss-all\nouter-margin=10\n[mode=do-not-disturb]\ninvisible=1"; extraConfig = "on-button-right=dismiss-all\nouter-margin=10\n[mode=do-not-disturb]\ninvisible=1";
}; };
# Script to toggle notifications using mako
home.packages = let home.packages = let
makoToggle = pkgs.writeScriptBin "makotoggle" '' makoToggle = pkgs.writeScriptBin "makotoggle" ''
# Run makoctl mode and store the output in a variable # Run makoctl mode and store the output in a variable

View file

@ -0,0 +1,7 @@
{
# Nicely reload system units when changing configs
systemd.user = {
enable = true;
startServices = "sd-switch";
};
}

View file

@ -1,5 +1,5 @@
{ ... }:
{ {
# Mount as user with udisk2
services.udiskie = { services.udiskie = {
enable = true; enable = true;
automount = false; automount = false;

View file

@ -1,7 +1,8 @@
{ pkgs, ... }: {config, pkgs, ...}: {
{ # Enable Sway and write some scripts
wayland.windowManager.sway = { wayland.windowManager.sway = {
config = { config = {
# Use Waybar rather than Sway's
bars = [{command = "waybar";}]; bars = [{command = "waybar";}];
startup = [ startup = [

View file

@ -1,31 +1,31 @@
{ config, ... }: {config, pkgs, outputs, ...}: {
{
wayland.windowManager.sway = { wayland.windowManager.sway = {
config = { config = {
# Define monitors # Define monitors
output = { output = {
${config.displays.d1} = { ${outputs.displays.d1} = {
pos = "1920 405"; pos = "1920 405";
mode = "1920x1080@143.980Hz"; mode = "1920x1080@143.980Hz";
max_render_time = "3"; max_render_time = "3";
bg = "~/.assets/wallpapers/1.png fill"; bg = "~/.wallpapers/1.png fill";
adaptive_sync = "on"; adaptive_sync = "on";
#tearing_allowed = "1";
}; };
${config.displays.d2} = { ${outputs.displays.d2} = {
pos = "0 405"; pos = "0 405";
mode = "1920x1080@60Hz"; mode = "1920x1080@60Hz";
max_render_time = "3"; max_render_time = "3";
bg = "~/.assets/wallpapers/2.png fill"; bg = "~/.wallpapers/2.png fill";
}; };
${config.displays.d3} = { ${outputs.displays.d3} = {
pos = "3840 0"; pos = "3840 0";
mode = "1680x1050@59.883Hz"; mode = "1680x1050@59.883Hz";
transform = "270"; transform = "270";
max_render_time = "3"; max_render_time = "3";
bg = "~/.assets/wallpapers/3.png fill"; bg = "~/.wallpapers/3.png fill";
}; };
"*" = { "*" = {
bg = "~/.assets/wallpapers/1.png fill"; bg = "~/.wallpapers/1.png fill";
}; };
}; };

269
home/sway/hotkeys.nix Normal file
View file

@ -0,0 +1,269 @@
{config, pkgs, outputs, ...}: {
wayland.windowManager.sway = {
config = let
# Set default modifier and variables
primeMod = "Mod4";
secMod = "Mod1";
resizeAmount = ''55'';
sendNotif = ''notify-send --expire-time=1500'';
in {
# Hotkeys
modifier = "${primeMod}";
keybindings = let
# Define scripts specific to Sway
pinWindow = pkgs.writeScript "pin-window" ''
# Get the current border style of the focused window
current_style=$(swaymsg -t get_tree | jq -r '.. | select(.focused?).border')
# Toggle between "normal" (default) and "pixel ${outputs.look.border.string}" border styles
if [ "$current_style" == "none" ]; then
swaymsg "sticky disable, border pixel ${outputs.look.border.string}"
else
swaymsg "sticky enable, border none"
fi
'';
# Kill a window or probe it for info
swayTools = pkgs.writeScript "swaytools" ''
# List the app name and whether or not it uses wayland
swayprop() {
selected_window=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | "\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)"' | slurp -r -c ${outputs.look.colors.prime} -B 00000066 -b 00000000)
if [ -n "$selected_window" ]; then
app_id=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | select("\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)" == "'"$selected_window"'") | .app_id')
system=$(sed 's/xdg_shell/Wayland/g; s/xwayland/Xorg/g' < <(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | select("\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)" == "'"$selected_window"'") | .shell'))
notify-send "$(echo -e "Window's app_id: $app_id\nWindow System: $system")"
fi
}
# Kill a selected window
swaykill() {
selected_window=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | "\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)"' | slurp -r -c ${outputs.look.colors.prime} -B 00000066 -b 00000000)
if [ -n "$selected_window" ]; then
pid=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | select("\(.rect.x),\(.rect.y) \(.rect.width)x\(.rect.height)" == "'"$selected_window"'") | .pid')
kill -9 "$pid"
fi
}
# Handle which tool we use
if [ "$1" == "--prop" ]; then
swayprop
elif [ "$1" == "--kill" ]; then
swaykill
fi
'';
in {
## Launcher keys
# LibreWolf profiles
"${primeMod}+F1" = ''exec librewolf -P Jimbo --name=JimBrowser | ${sendNotif} "Main Browser"'';
"${primeMod}+F2" = ''exec librewolf -P Alt --name=AltBrowser | ${sendNotif} "Alternate Browser"'';
"${primeMod}+F3" = ''exec librewolf -P Misc --name=MiscBrowser | ${sendNotif} "Miscellaneous Browser"'';
# Discord
"${primeMod}+F4" = ''exec vesktop --ozone-platform-hint=auto | ${sendNotif} "Discord"'';
# Games
"${primeMod}+F5" = ''exec steam | ${sendNotif} "Steam"'';
"${primeMod}+F6" = ''exec heroic | ${sendNotif} "Heroic Games"'';
# Looking glass for VMs
"${primeMod}+F7" = ''exec looking-glass-client input:rawMouse=yes | ${sendNotif} "Looking Glass"'';
# Virtual Machines
"${primeMod}+F10" = ''exec virt-manager | ${sendNotif} "Virtual Machines"'';
# BeMenu scripts
"${primeMod}+F11" = ''exec rofiscripts --scratchpads | ${sendNotif} "Scratchpads"'';
"${primeMod}+${secMod}+Ctrl+r" = ''exec rofiscripts --resolutions'';
# Open NixOS configuration files
"${primeMod}+F12" = ''exec foot ${outputs.cmd.nixcfg} | ${sendNotif} "Nix Config"'';
# Terminal, rofi, clipmenu, media script, power menu, show/hide waybar
"${primeMod}+Return" = ''exec foot'';
"${primeMod}+s" = ''exec rofi -show run -p Command'';
"${primeMod}+c" = ''exec clipman pick -t rofi'';
"${primeMod}+x" = ''exec rofiscripts --power'';
"${primeMod}+b" = ''exec pkill -USR1 waybar'';
"${primeMod}+Escape" = ''exec ${swayTools} --kill'';
# PCManFM, Emoji Picker, Rofi Launcher, Bluetooth, Ranger
"${primeMod}+Shift+t" = ''exec pcmanfm-qt'';
"${primeMod}+Shift+e" = ''exec BEMOJI_PICKER_CMD="rofi -dmenu -i -p Emoji" bemoji -n -P 0'';
"${primeMod}+Shift+s" = ''exec rofi -show drun -modi drun -drun-display-format {name} -show-icons -disable-history'';
"${primeMod}+Shift+b" = ''exec rofi-bluetooth'';
"${primeMod}+Shift+Return" = ''exec foot ranger'';
# Swaytools prop, colorpicker, obs-cmd
"${primeMod}+Ctrl+x" = ''exec ${swayTools} --prop'';
"${primeMod}+Ctrl+c" = ''exec ${pkgs.hyprpicker}/bin/hyprpicker -an && ${sendNotif} "Color copied to clipboard"'';
"${primeMod}+Ctrl+Prior" = ''exec ${pkgs.obs-cmd}/bin/obs-cmd scene switch "Main"'';
"${primeMod}+Ctrl+Next" = ''exec ${pkgs.obs-cmd}/bin/obs-cmd scene switch "Guest"'';
## Media keys
# Volume control
"XF86AudioRaiseVolume" = ''exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+'';
"XF86AudioLowerVolume" = ''exec wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-'';
# MPV volume control
"${secMod}+XF86AudioRaiseVolume" = ''exec mpc volume +3'';
"${secMod}+XF86AudioLowerVolume" = ''exec mpc volume -3'';
# Mute, Stop
"XF86AudioMute" = ''exec wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle'';
"XF86AudioStop" = ''exec mpc stop'';
# Play MPD, Firefox, or MPV
"XF86AudioPlay" = ''exec mpc toggle'';
"${secMod}+XF86AudioPlay" = ''exec playerctl --player=librewolf play-pause'';
"Ctrl+XF86AudioPlay" = ''exec playerctl --player=mpv play-pause'';
# Next/Previous
"XF86AudioNext" = ''exec mpc next'';
"XF86AudioPrev" = ''exec mpc prev'';
# Seek
"${secMod}+Shift+XF86AudioNext" = ''exec mpc seek +5'';
"${secMod}+Shift+XF86AudioPrev" = ''exec mpc seek -5'';
## Notification keys
# Toggle mako
"${primeMod}+n" = ''exec makotoggle'';
"${primeMod}+Shift+n" = ''exec makoctl restore'';
"${primeMod}+Ctrl+n" = ''exec makoctl dismiss -a'';
## Miscellaneous keys
# Screenshots
"Print" = ''exec swayshot --swappy'';
"${primeMod}+Shift+f" = ''exec swayshot --swappy'';
"Shift+Print" = ''exec swayshot --screen'';
# Server SSH
"${primeMod}+Ctrl+Return" = ''exec foot ssh ${outputs.ips.server} -p 2222'';
# Display Brightness and Keyboard Brightness
"XF86MonBrightnessUp" = ''exec light -A 5'';
"XF86MonBrightnessDown" = ''exec light -U 5'';
"Shift+XF86MonBrightnessUp" = ''exec light -A 1'';
"Shift+XF86MonBrightnessDown" = ''exec light -U 1'';
"XF86KbdBrightnessUp" = ''exec light -s sysfs/leds/smc::kbd_backlight -A 5'';
"XF86KbdBrightnessDown" = ''exec light -s sysfs/leds/smc::kbd_backlight -U 5'';
## Window manager keys
"${primeMod}+q" = ''kill'';
"${primeMod}+Shift+r" = ''reload'';
# Switch to workspaces
"${primeMod}+grave" = ''workspace ${outputs.ws.w0}'';
"${primeMod}+1" = ''workspace ${outputs.ws.w1}'';
"${primeMod}+2" = ''workspace ${outputs.ws.w2}'';
"${primeMod}+3" = ''workspace ${outputs.ws.w3}'';
"${primeMod}+4" = ''workspace ${outputs.ws.w4}'';
"${primeMod}+5" = ''workspace ${outputs.ws.w5}'';
"${primeMod}+6" = ''workspace ${outputs.ws.w6}'';
"${primeMod}+7" = ''workspace ${outputs.ws.w7}'';
"${primeMod}+8" = ''workspace ${outputs.ws.w8}'';
"${primeMod}+9" = ''workspace ${outputs.ws.w9}'';
# Switch to alternate workspaces
"${secMod}+F1" = ''workspace ${outputs.ws.w1a}'';
"${secMod}+F2" = ''workspace ${outputs.ws.w2a}'';
"${secMod}+F3" = ''workspace ${outputs.ws.w3a}'';
"${secMod}+F4" = ''workspace ${outputs.ws.w4a}'';
"${secMod}+F5" = ''workspace ${outputs.ws.w5a}'';
"${secMod}+F6" = ''workspace ${outputs.ws.w6a}'';
"${secMod}+F7" = ''workspace ${outputs.ws.w7a}'';
"${secMod}+F8" = ''workspace ${outputs.ws.w8a}'';
"${secMod}+F9" = ''workspace ${outputs.ws.w9a}'';
# Move window to and focus new workspace
"${primeMod}+Shift+grave" = ''move container to workspace ${outputs.ws.w0}; workspace ${outputs.ws.w0}'';
"${primeMod}+Shift+1" = ''move container to workspace ${outputs.ws.w1}; workspace ${outputs.ws.w1}'';
"${primeMod}+Shift+2" = ''move container to workspace ${outputs.ws.w2}; workspace ${outputs.ws.w2}'';
"${primeMod}+Shift+3" = ''move container to workspace ${outputs.ws.w3}; workspace ${outputs.ws.w3}'';
"${primeMod}+Shift+4" = ''move container to workspace ${outputs.ws.w4}; workspace ${outputs.ws.w4}'';
"${primeMod}+Shift+5" = ''move container to workspace ${outputs.ws.w5}; workspace ${outputs.ws.w5}'';
"${primeMod}+Shift+6" = ''move container to workspace ${outputs.ws.w6}; workspace ${outputs.ws.w6}'';
"${primeMod}+Shift+7" = ''move container to workspace ${outputs.ws.w7}; workspace ${outputs.ws.w7}'';
"${primeMod}+Shift+8" = ''move container to workspace ${outputs.ws.w8}; workspace ${outputs.ws.w8}'';
"${primeMod}+Shift+9" = ''move container to workspace ${outputs.ws.w9}; workspace ${outputs.ws.w9}'';
# Move window to and focus new alternate workspace
"${secMod}+Shift+F1" = ''move container to workspace ${outputs.ws.w1a}; workspace ${outputs.ws.w1a}'';
"${secMod}+Shift+F2" = ''move container to workspace ${outputs.ws.w2a}; workspace ${outputs.ws.w2a}'';
"${secMod}+Shift+F3" = ''move container to workspace ${outputs.ws.w3a}; workspace ${outputs.ws.w3a}'';
"${secMod}+Shift+F4" = ''move container to workspace ${outputs.ws.w4a}; workspace ${outputs.ws.w4a}'';
"${secMod}+Shift+F5" = ''move container to workspace ${outputs.ws.w5a}; workspace ${outputs.ws.w5a}'';
"${secMod}+Shift+F6" = ''move container to workspace ${outputs.ws.w6a}; workspace ${outputs.ws.w6a}'';
"${secMod}+Shift+F7" = ''move container to workspace ${outputs.ws.w7a}; workspace ${outputs.ws.w7a}'';
"${secMod}+Shift+F8" = ''move container to workspace ${outputs.ws.w8a}; workspace ${outputs.ws.w8a}'';
"${secMod}+Shift+F9" = ''move container to workspace ${outputs.ws.w9a}; workspace ${outputs.ws.w9a}'';
# Change focus across windows
"${primeMod}+Up" = ''focus up'';
"${primeMod}+Down" = ''focus down'';
"${primeMod}+Left" = ''focus left'';
"${primeMod}+Right" = ''focus right'';
# Switch focus across outputs
"${primeMod}+j" = ''focus output ${outputs.displays.d2}'';
"${primeMod}+k" = ''focus output ${outputs.displays.d1}'';
"${primeMod}+l" = ''focus output ${outputs.displays.d3}'';
# Move focused window
"${primeMod}+Shift+Up" = ''move up ${resizeAmount} px'';
"${primeMod}+Shift+Down" = ''move down ${resizeAmount} px'';
"${primeMod}+Shift+Left" = ''move left ${resizeAmount} px'';
"${primeMod}+Shift+Right" = ''move right ${resizeAmount} px'';
# Move window across outputs
"${primeMod}+Shift+j" = ''move output ${outputs.displays.d2}; focus output ${outputs.displays.d2}'';
"${primeMod}+Shift+k" = ''move output ${outputs.displays.d1}; focus output ${outputs.displays.d1}'';
"${primeMod}+Shift+l" = ''move output ${outputs.displays.d3}; focus output ${outputs.displays.d3}'';
# Change focus between floating/tiled, toggle floating
"${primeMod}+space" = ''focus mode_toggle'';
"${primeMod}+Shift+space" = ''floating toggle'';
# Allow a window to be visible on all workspaces, toggle border
"${primeMod}+0" = ''exec ${pinWindow}'';
# Toggle fullscreen
"${primeMod}+f" = ''fullscreen toggle'';
"${primeMod}+${secMod}+Ctrl+f" = ''fullscreen toggle global'';
# Change container layout
"${primeMod}+w" = ''layout toggle split'';
"${primeMod}+e" = ''layout toggle tabbed stacking'';
# Change split direction
"${primeMod}+h" = ''split h'';
"${primeMod}+v" = ''split v'';
# Focus parent / child
"${primeMod}+a" = ''focus parent'';
"${primeMod}+d" = ''focus child'';
# Resize windows
"${primeMod}+${secMod}+Up" = ''resize grow height ${resizeAmount} px or 5 ppt'';
"${primeMod}+${secMod}+Down" = ''resize shrink height ${resizeAmount} px or 5 ppt'';
"${primeMod}+${secMod}+Left" = ''resize shrink width ${resizeAmount} px or 5 ppt'';
"${primeMod}+${secMod}+Right" = ''resize grow width ${resizeAmount} px or 5 ppt'';
# Adjust gap size
"${primeMod}+Shift+equal" = ''gaps inner current set 5'';
"${primeMod}+equal" = ''gaps inner current plus 5'';
"${primeMod}+minus" = ''gaps inner current minus 5'';
# Scratchpads
"Ctrl+Shift+Escape" = ''[app_id="gotop"] scratchpad show, move position center, resize set 1216 888'';
"${primeMod}+Shift+m" = ''[app_id="music"] scratchpad show, move position center, resize set 1006 657'';
"${primeMod}+Shift+v" = ''[app_id="sound"] scratchpad show, move position center, resize set 1000 800'';
"${primeMod}+Shift+Backslash" = ''[app_id="com.github.wwmm.easyeffects"] scratchpad show, move position center, resize set 1000 800'';
};
};
};
}

View file

@ -1,33 +1,33 @@
{ config, ... }: {config, pkgs, outputs, ...}: {
{ # Enable Sway and write some scripts
wayland.windowManager.sway = { wayland.windowManager.sway = {
config = { config = {
# Assign workspaces to config # Assign workspaces to outputs
workspaceOutputAssign = let workspaceOutputAssign = let
workspaces1 = [ workspaces1 = [
"${config.ws.w0}" "${outputs.ws.w0}"
"${config.ws.w1}" "${outputs.ws.w1}"
"${config.ws.w2}" "${outputs.ws.w2}"
"${config.ws.w3}" "${outputs.ws.w3}"
"${config.ws.w1a}" "${outputs.ws.w1a}"
"${config.ws.w2a}" "${outputs.ws.w2a}"
"${config.ws.w3a}" "${outputs.ws.w3a}"
]; ];
workspaces2 = [ workspaces2 = [
"${config.ws.w4}" "${outputs.ws.w4}"
"${config.ws.w5}" "${outputs.ws.w5}"
"${config.ws.w6}" "${outputs.ws.w6}"
"${config.ws.w4a}" "${outputs.ws.w4a}"
"${config.ws.w5a}" "${outputs.ws.w5a}"
"${config.ws.w6a}" "${outputs.ws.w6a}"
]; ];
workspaces3 = [ workspaces3 = [
"${config.ws.w7}" "${outputs.ws.w7}"
"${config.ws.w8}" "${outputs.ws.w8}"
"${config.ws.w9}" "${outputs.ws.w9}"
"${config.ws.w7a}" "${outputs.ws.w7a}"
"${config.ws.w8a}" "${outputs.ws.w8a}"
"${config.ws.w9a}" "${outputs.ws.w9a}"
]; ];
assign = output: workspaces: assign = output: workspaces:
map (workspace: { map (workspace: {
@ -36,13 +36,13 @@
}) })
workspaces; workspaces;
in in
(assign "${config.displays.d1}" workspaces1) ++ (assign "${outputs.displays.d1}" workspaces1) ++
(assign "${config.displays.d2}" workspaces2) ++ (assign "${outputs.displays.d2}" workspaces2) ++
(assign "${config.displays.d3}" workspaces3); (assign "${outputs.displays.d3}" workspaces3);
# Rules # Rules
window = { window = {
border = config.look.border.int; border = outputs.look.border.int;
titlebar = false; titlebar = false;
commands = [ commands = [
# Scratchpads # Scratchpads
@ -76,7 +76,7 @@
# Give apps that don't have them borders # Give apps that don't have them borders
{ {
criteria = {con_mark = "borderless";}; criteria = {con_mark = "borderless";};
command = ''border pixel ${config.look.border.string}''; command = ''border pixel ${outputs.look.border.string}'';
} }
{ {
criteria = {app_id = "com.github.wwmm.easyeffects";}; criteria = {app_id = "com.github.wwmm.easyeffects";};
@ -111,20 +111,20 @@
]; ];
}; };
assigns = { assigns = {
# Broconfig.wsers # Brooutputs.wsers
"${config.ws.w1}" = [{app_id = "JimBrowser";}]; "${outputs.ws.w1}" = [{app_id = "JimBrooutputs.wser";}];
"${config.ws.w1a}" = [{app_id = "AltBrowser";}]; "${outputs.ws.w1a}" = [{app_id = "AltBrooutputs.wser";}];
# Communication # Communication
"${config.ws.w3a}" = [{class = "zoom";}]; "${outputs.ws.w3a}" = [{class = "zoom";}];
"${config.ws.w7}" = [{app_id = "MiscBrowser";} {app_id = "vesktop";} {class = "vesktop";}]; "${outputs.ws.w7}" = [{app_id = "MiscBrowser";} {app_id = "vesktop";} {class = "vesktop";}];
"${config.ws.w8}" = [{app_id = "org.gnome.Fractal";}]; "${outputs.ws.w8}" = [{app_id = "org.gnome.Fractal";}];
"${config.ws.w9}" = [{app_id = "thunderbird";}]; "${outputs.ws.w9}" = [{app_id = "thunderbird";}];
# Else # Else
"${config.ws.w2}" = [{class = "steam";} {app_id = "heroic";}]; "${outputs.ws.w2}" = [{class = "steam";} {app_id = "heroic";}];
"${config.ws.w2a}" = [{app_id = "looking-glass-client";}]; "${outputs.ws.w2a}" = [{app_id = "looking-glass-client";}];
"${config.ws.w4a}" = [{app_id = "com.obsproject.Studio";}]; "${outputs.ws.w4a}" = [{app_id = "com.obsproject.Studio";}];
}; };
focus.newWindow = "focus"; focus.newWindow = "focus";
}; };

View file

@ -1,24 +1,25 @@
{ config, pkgs, ... }: {config, pkgs, outputs, ...}: {
{ # Import modules
imports = [ imports = [
./hardware #"./swayfx.nix"
./theme ./hardware.nix
./hotkeys ./theme.nix
./programs ./hotkeys.nix
./rules ./rules.nix
./autostart ./autostart.nix
./waybar ./waybar.nix
./swayshot ./swayshot.nix
./swaylock
]; ];
# Enable Sway and write some scripts
wayland.windowManager.sway = { wayland.windowManager.sway = {
enable = true; enable = true;
package = null; package = null;
wrapperFeatures.gtk = true; wrapperFeatures.gtk = true;
checkConfig = false; checkConfig = false;
extraConfig = '' extraConfig = ''
default_floating_border pixel ${config.look.border.string} # Options I can't find in Nix yet
default_floating_border pixel ${outputs.look.border.string}
hide_edge_borders --i3 smart hide_edge_borders --i3 smart
titlebar_padding 10 1 titlebar_padding 10 1
primary_selection disabled primary_selection disabled
@ -30,8 +31,8 @@
}} }}
# Switch to workspace 1 # Switch to workspace 1
workspace ${config.ws.w7} workspace ${outputs.ws.w7}
workspace ${config.ws.w1} workspace ${outputs.ws.w1}
''; '';
}; };
} }

14
home/sway/swayfx.nix Normal file
View file

@ -0,0 +1,14 @@
{config, pkgs, ...}: {
# Enable Sway and write some scripts
wayland.windowManager.sway = {
package = pkgs.unstable.sway;
extraConfig = ''
# SwayFX specific options
blur enable
blur_passes 3
blur_radius 5
layer_effects 'rofi' blur enable
layer_effects 'notifications' blur enable; blur_ignore_transparent enable
'';
};
}

View file

@ -1,14 +1,13 @@
{ pkgs, config, ... }: {config, pkgs, outputs, ...}: let
let
swayLock = pkgs.writeScriptBin "swaylock" '' swayLock = pkgs.writeScriptBin "swaylock" ''
# Set the lock script # Set the lock script
lockscript() { lockscript() {
BLANK='#00000000' BLANK='#00000000'
CLEAR='#FFFFFF22' CLEAR='#FFFFFF22'
DEFAULT='#${config.look.colors.prime}FF' DEFAULT='#${outputs.look.colors.prime}FF'
TEXT='#FFFFFFFF' TEXT='#FFFFFFFF'
WRONG='#${config.look.colors.split}FF' WRONG='#${outputs.look.colors.split}FF'
VERIFYING='#${config.look.colors.accent}FF' VERIFYING='#${outputs.look.colors.accent}FF'
${pkgs.swaylock-effects}/bin/swaylock -f -e \ ${pkgs.swaylock-effects}/bin/swaylock -f -e \
--key-hl-color=$VERIFYING \ --key-hl-color=$VERIFYING \
@ -33,9 +32,9 @@ let
\ \
--indicator \ --indicator \
--indicator-radius=80 \ --indicator-radius=80 \
--image=~/.assets/lockscreen/lock.png \ --image=~/.wallpapers/lock.png \
--clock \ --clock \
--font=${config.look.fonts.main} \ --font=${outputs.look.fonts.main} \
--font-size=30 \ --font-size=30 \
--timestr="%I:%M%p" \ --timestr="%I:%M%p" \
--datestr="%a %b %d %Y" --datestr="%a %b %d %Y"

View file

@ -1,10 +1,6 @@
{ pkgs, config, ... }: {pkgs, outputs, ...}: {
{
imports = [
./swappy
];
home.packages = let home.packages = let
# Use grim and slurp to take screenshots in multiple ways
swayShot = pkgs.writeScriptBin "swayshot" '' swayShot = pkgs.writeScriptBin "swayshot" ''
# Swappy # Swappy
handle_swappy() { handle_swappy() {
@ -13,7 +9,7 @@
# Capture the screenshot of the selected area and save to a temporary file # Capture the screenshot of the selected area and save to a temporary file
selected_area=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"'\ selected_area=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"'\
| XCURSOR_SIZE=40 slurp -w ${config.look.border.string} -c ${config.look.colors.prime} -B 00000066 -b 00000099) | XCURSOR_SIZE=40 slurp -w ${outputs.look.border.string} -c ${outputs.look.colors.prime} -B 00000066 -b 00000099)
temp_file=$(mktemp -u).png temp_file=$(mktemp -u).png
grim -g "$selected_area" "$temp_file" grim -g "$selected_area" "$temp_file"

50
home/sway/theme.nix Normal file
View file

@ -0,0 +1,50 @@
{config, pkgs, outputs, ...}: {
# Enable Sway and write some scripts
wayland.windowManager.sway = {
enable = true;
#package = pkgs.unstable.sway;
wrapperFeatures.gtk = true;
checkConfig = false;
config = {
# Theming settings
colors = {
focused = {
border = "#${outputs.look.colors.prime}";
background = "#${outputs.look.colors.prime}";
text = "#FFFFFF";
indicator = "#${outputs.look.colors.actSplit}";
childBorder = "#${outputs.look.colors.prime}";
};
focusedInactive = {
border = "#${outputs.look.colors.accent}";
background = "#${outputs.look.colors.accent}";
text = "#${outputs.look.colors.text}";
indicator = "#${outputs.look.colors.split}";
childBorder = "#${outputs.look.colors.accent}";
};
unfocused = {
border = "#${outputs.look.colors.dark}";
background = "#${outputs.look.colors.dark}";
text = "#${outputs.look.colors.text}";
indicator = "#${outputs.look.colors.split}";
childBorder = "#${outputs.look.colors.split}";
};
urgent = {
border = "#${outputs.look.colors.urgent}";
background = "#${outputs.look.colors.urgent}";
text = "#${outputs.look.colors.text}";
indicator = "#${outputs.look.colors.urgent}";
childBorder = "#${outputs.look.colors.urgent}";
};
};
fonts = {
names = ["${outputs.look.fonts.main}"];
size = 10.5;
};
gaps = {
inner = 5;
smartGaps = true;
};
};
};
}

View file

@ -1,5 +1,4 @@
{ pkgs, config, ... }: {pkgs, outputs, ...}: {
{
programs.waybar = let programs.waybar = let
swayWorkspacesModule = { swayWorkspacesModule = {
format = "{name}"; format = "{name}";
@ -27,7 +26,7 @@
format-icons = { format-icons = {
headphone = "󰋋 "; headphone = "󰋋 ";
headset = "󰋋 "; headset = "󰋋 ";
default = [ " " " " ]; default = [" " " "];
}; };
on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
on-click-middle = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 100%"; on-click-middle = "wpctl set-volume @DEFAULT_AUDIO_SINK@ 100%";
@ -262,7 +261,7 @@
name = "bar1"; name = "bar1";
position = "top"; position = "top";
layer = "bottom"; layer = "bottom";
output = [ config.displays.d1 "VGA-1" ]; output = [outputs.displays.d1 "VGA-1"];
modules-left = ["sway/workspaces" "sway/window"]; modules-left = ["sway/workspaces" "sway/window"];
modules-right = [ modules-right = [
"pulseaudio" "pulseaudio"
@ -287,13 +286,13 @@
"sway/scratchpad" = scratchpadModule; "sway/scratchpad" = scratchpadModule;
"tray" = trayModule; "tray" = trayModule;
"bluetooth" = bluetoothModule; "bluetooth" = bluetoothModule;
"network" = networkModule // { interface = "enp*"; }; "network" = networkModule // {interface = "enp*";};
}; };
display2 = { display2 = {
name = "bar2"; name = "bar2";
position = "top"; position = "top";
layer = "bottom"; layer = "bottom";
output = [ config.displays.d2 ]; output = [outputs.displays.d2];
modules-left = ["sway/workspaces" "sway/window"]; modules-left = ["sway/workspaces" "sway/window"];
modules-right = [ modules-right = [
"pulseaudio" "pulseaudio"
@ -318,7 +317,7 @@
name = "bar3"; name = "bar3";
position = "top"; position = "top";
layer = "bottom"; layer = "bottom";
output = [ config.displays.d3 ]; output = [outputs.displays.d3];
modules-left = ["sway/workspaces" "sway/window"]; modules-left = ["sway/workspaces" "sway/window"];
modules-right = [ modules-right = [
"pulseaudio" "pulseaudio"
@ -341,8 +340,8 @@
name = "laptop"; name = "laptop";
position = "top"; position = "top";
layer = "bottom"; layer = "bottom";
output = [ "eDP-1" "LVDS-1" "DSI-1" "HDMI-A-1" ]; output = ["eDP-1" "LVDS-1" "DSI-1" "HDMI-A-1"];
modules-left = [ "sway/workspaces" "sway/window" ]; modules-left = ["sway/workspaces" "sway/window"];
modules-right = [ modules-right = [
"pulseaudio" "pulseaudio"
"custom/media" "custom/media"
@ -383,12 +382,12 @@
border: 0; border: 0;
border-radius: 0; border-radius: 0;
min-height: 0; min-height: 0;
font-family: ${config.look.fonts.main}, ${config.look.fonts.nerd}; font-family: ${outputs.look.fonts.main}, ${outputs.look.fonts.nerd};
font-size: 15.5px; font-size: 15.5px;
color: #${config.look.colors.text}; color: #${outputs.look.colors.text};
} }
#waybar { #waybar {
background: #${config.look.colors.dark}; background: #${outputs.look.colors.dark};
} }
#workspaces { #workspaces {
padding: 0 6px 0 0; padding: 0 6px 0 0;
@ -413,15 +412,15 @@
min-width: 20px; min-width: 20px;
} }
#workspaces button.visible { #workspaces button.visible {
border-bottom: 3px solid #${config.look.colors.prime}; border-bottom: 3px solid #${outputs.look.colors.prime};
background: #${config.look.colors.mid}; background: #${outputs.look.colors.mid};
} }
#workspaces button.urgent { #workspaces button.urgent {
border-bottom: 3px solid #${config.look.colors.urgent}; border-bottom: 3px solid #${outputs.look.colors.urgent};
} }
#workspaces button:hover { #workspaces button:hover {
box-shadow: none; box-shadow: none;
background: #${config.look.colors.light}; background: #${outputs.look.colors.light};
} }
#scratchpad { #scratchpad {
margin-left: 2px; margin-left: 2px;
@ -457,13 +456,13 @@
color: #888; color: #888;
} }
#custom-weather { #custom-weather {
border-bottom: 3px solid #3823C4; border-bottom: 3px solid #${outputs.look.colors.prime};
} }
#custom-weather2 { #custom-weather2 {
border-bottom: 3px solid #c75bd3; border-bottom: 3px solid #c75bd3;
} }
#custom-notifs { #custom-notifs {
border-bottom: 3px solid #3823C4; border-bottom: 3px solid #${outputs.look.colors.prime};
} }
#custom-notifs.disabled { #custom-notifs.disabled {
color: #888; color: #888;

View file

@ -1,4 +1,3 @@
{ ... }:
{ {
home = { home = {
username = "jimbo"; username = "jimbo";

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: {pkgs, ...}: {
{
home = { home = {
file = let file = let
fastConf = '' fastConf = ''

8
home/utils/git.nix Normal file
View file

@ -0,0 +1,8 @@
{pkgs, outputs, ...}: {
programs.git = {
enable = true;
lfs.enable = true;
userName = outputs.secrets.jimUsername;
userEmail = outputs.secrets.jimEmail;
};
}

View file

@ -1,21 +1,17 @@
{ pkgs, ... }: {pkgs, ...}: {
{ # Enable NCMPCPP
programs.ncmpcpp = { programs.ncmpcpp = {
enable = true; enable = true;
settings = { settings = {
browser_sort_mode = "name"; browser_sort_mode = "name";
user_interface = "alternative"; user_interface = "alternative";
}; };
bindings = [
{ key = "h"; command = "volume_down"; }
{ key = "j"; command = "scroll_down"; }
{ key = "k"; command = "scroll_up"; }
{ key = "l"; command = "volume_up"; }
];
}; };
# Enable Discord Music RPC
services.mpd-discord-rpc.enable = true; services.mpd-discord-rpc.enable = true;
# Allow terminal control of mpd
home.packages = with pkgs; [ home.packages = with pkgs; [
mpc-cli mpc-cli
]; ];

View file

@ -1,5 +1,5 @@
{ config, pkgs, ... }: {pkgs, outputs, ...}: {
{ # Install Neovim and plugins
programs.neovim = { programs.neovim = {
enable = true; enable = true;
defaultEditor = true; defaultEditor = true;
@ -85,8 +85,8 @@
let g:airline_theme='onedark' let g:airline_theme='onedark'
let g:airline#extensions#tabline#enabled = 1 let g:airline#extensions#tabline#enabled = 1
hi Normal guibg=none ctermbg=235 hi Normal guibg=none ctermbg=235
hi Visual guibg=#${config.look.colors.mid} ctermbg=238 hi Visual guibg=#${outputs.look.colors.mid} ctermbg=238
hi Pmenu guibg=#${config.look.colors.mid} ctermbg=238 hi Pmenu guibg=#${outputs.look.colors.mid} ctermbg=238
hi EndOfBuffer guibg=none ctermbg=235 hi EndOfBuffer guibg=none ctermbg=235
hi LineNr guibg=none ctermbg=none hi LineNr guibg=none ctermbg=none
lua require'colorizer'.setup() lua require'colorizer'.setup()

View file

@ -1,5 +1,5 @@
{ pkgs, ... }: {pkgs, ...}: {
{ # Enable Ranger
programs.ranger = { programs.ranger = {
enable = true; enable = true;
settings = { settings = {
@ -100,9 +100,8 @@
''; '';
}; };
# Ranger's bookmarks and necessary tools # Ranger's bookmarks
home = { home.file = let
file = let
rangerBookmarks = '' rangerBookmarks = ''
# Local files # Local files
h:/home/jimbo/ h:/home/jimbo/
@ -114,20 +113,15 @@
n:/etc/nixos n:/etc/nixos
# Remote files # Remote files
j:/home/jimbo/JimboNFS a:/home/jimbo/JimboNFS
K:/home/jimbo/JimboNFS/Downloads K:/home/jimbo/JimboNFS/Downloads
p:/home/jimbo/JimboNFS/Photos p:/home/jimbo/JimboNFS/Photos
P:/home/jimbo/JimboNFS/Projects P:/home/jimbo/JimboNFS/Projects
V:/home/jimbo/JimboNFS/Videos/Random V:/home/jimbo/JimboNFS/Videos/Random
m:/home/jimbo/JimboNFS/Music/Synced m:/home/jimbo/JimboNFS/Music
s:/home/jimbo/JimboNFS/School s:/home/jimbo/JimboNFS/School
''; '';
in { in {
".local/share/ranger/bookmarks".text = rangerBookmarks; ".local/share/ranger/bookmarks".text = rangerBookmarks;
}; };
packages = with pkgs; [
imagemagick
poppler_utils
];
};
} }

View file

@ -1,5 +1,5 @@
{ ... }:
{ {
# Enable tmux
programs.tmux = { programs.tmux = {
enable = true; enable = true;
extraConfig = '' extraConfig = ''

View file

@ -1,5 +1,4 @@
{ pkgs, ... }: { pkgs, config, ... }: {
{
programs.zsh = { programs.zsh = {
enable = true; enable = true;
autosuggestion.enable = true; autosuggestion.enable = true;
@ -10,12 +9,6 @@
plugins = ["git"]; plugins = ["git"];
}; };
shellAliases = { shellAliases = {
# NixOS aliases
nixclean = "doas nix-store --gc; nix-collect-garbage -d";
nixpurge = "doas nix-collect-garbage --delete-old";
nixoptimize = "doas nix store optimise";
nixscrub = "nixclean; nixpurge; nixoptimize";
# Flake commands # Flake commands
flakedate = "doas nix flake update /etc/nixos"; flakedate = "doas nix flake update /etc/nixos";
sysswitch = "doas nixos-rebuild switch --flake /etc/nixos"; sysswitch = "doas nixos-rebuild switch --flake /etc/nixos";
@ -23,6 +16,11 @@
nixswitch = "sysswitch; homeswitch"; nixswitch = "sysswitch; homeswitch";
nixdate = "flakedate && sysswitch; homeswitch"; nixdate = "flakedate && sysswitch; homeswitch";
# NixOS aliases
nixclean = "doas nix-store --gc; nix-collect-garbage -d";
nixpurge = "doas nix-collect-garbage --delete-old";
nixoptimize = "doas nix store optimise";
# Shortcut aliases # Shortcut aliases
neo = "clear && fastfetch"; neo = "clear && fastfetch";
ip = "ip -c"; ip = "ip -c";

View file

@ -1,19 +0,0 @@
{ ... }:
{
imports = [
# Programs and apps
../../../modules/home
../../../modules/home/users
../../../modules/home/programs/misc/headless
../../../modules/home/programs/terminal/fastfetch
../../../modules/home/programs/terminal/git
../../../modules/home/programs/terminal/neovim
../../../modules/home/programs/terminal/ranger
../../../modules/home/programs/terminal/tmux
../../../modules/home/utils/zsh
# Misc
../../../variables/domains
../../../variables/look/colors/purple
];
}

View file

@ -1 +0,0 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICtxnPjkLdUIi5mVqBHXM9rW+Mmsqx1C1XnpRusVTWhm jimbo@bomberman

View file

@ -1,28 +0,0 @@
{ config, ... }:
{
imports = [
./hardware
# Apps and programs
../../../modules/system
../../../modules/system/accounts
../../../modules/system/devices/filesystems
../../../modules/system/devices/boot/systemd
../../../modules/system/devices/networking
../../../modules/system/devices/networking/firewall/pc
../../../modules/system/devices/networking/wireguard/pc
../../../modules/system/programs/git
../../../modules/system/programs/security
../../../modules/system/services/common
../../../modules/system/services/server/acme
../../../modules/system/services/server/webhost/nginx
../../../modules/system/services/server/mailserver
# Misc
../../../overlays
../../../variables
];
networking.hostName = "bomberman";
networking.wireguard.interfaces."${config.ips.wgInt}".ips = [ "${config.ips.wgSpan}.19/24" ];
}

View file

@ -1,61 +0,0 @@
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];
boot.initrd = {
availableKernelModules = [
"xhci_pci"
"virtio_scsi"
];
kernelModules = [
"dm-snapshot"
];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/e50e186d-e5bc-40b0-9cd7-43b609cde3ea";
fsType = "btrfs";
options = [ "subvol=@" ];
};
"/home" = {
device = "/dev/disk/by-uuid/e50e186d-e5bc-40b0-9cd7-43b609cde3ea";
fsType = "btrfs";
options = [ "subvol=@home" ];
};
"/nix" = {
device = "/dev/disk/by-uuid/e50e186d-e5bc-40b0-9cd7-43b609cde3ea";
fsType = "btrfs";
options = [ "subvol=@nix" ];
};
"/var" = {
device = "/dev/disk/by-uuid/e50e186d-e5bc-40b0-9cd7-43b609cde3ea";
fsType = "btrfs";
options = [ "subvol=@var" ];
};
"/.snapshots" = {
device = "/dev/disk/by-uuid/e50e186d-e5bc-40b0-9cd7-43b609cde3ea";
fsType = "btrfs";
options = [ "subvol=@snapshots" ];
};
"/boot" = {
device = "/dev/disk/by-uuid/7C94-8C9A";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
"/export/Bulk" = {
device = "/dev/disk/by-uuid/ef465845-cc56-4db5-9260-8ae515eb025e";
fsType = "btrfs";
noCheck = true;
};
};
swapDevices = [
{ device = "/dev/disk/by-uuid/7e8c773d-c8f4-4dd8-a835-bde78e5b6760"; }
];
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
}

View file

@ -1,19 +0,0 @@
{ ... }:
{
imports = [
# Programs and apps
../../../modules/home
../../../modules/home/users
../../../modules/home/programs/misc/headless
../../../modules/home/programs/terminal/fastfetch
../../../modules/home/programs/terminal/git
../../../modules/home/programs/terminal/neovim
../../../modules/home/programs/terminal/ranger
../../../modules/home/programs/terminal/tmux
../../../modules/home/utils/zsh
# Misc
../../../variables/domains
../../../variables/look/colors/purple
];
}

View file

@ -1 +0,0 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIKC8Uqxb09V3msBgDv6lD/nETMYr/X0OgtpDo8ldcMK

View file

@ -1,25 +0,0 @@
{ ... }:
{
imports = [
./hardware
# Apps and programs
../../../modules/system
../../../modules/system/accounts
../../../modules/system/devices/filesystems
../../../modules/system/devices/boot/systemd
../../../modules/system/devices/networking
../../../modules/system/devices/networking/firewall/server
../../../modules/system/devices/networking/wireguard/server
../../../modules/system/programs/git
../../../modules/system/programs/security
../../../modules/system/services/common
../../../modules/system/services/server
# Misc
../../../overlays
../../../variables
];
networking.hostName = "cyberspark";
}

View file

@ -1,130 +0,0 @@
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
blacklistedKernelModules = [
"pcspkr"
];
initrd = {
availableKernelModules = [
"xhci_pci"
"ehci_pci"
"ahci"
"nvme"
"usbhid"
"sd_mod"
"sr_mod"
];
kernelModules = [
"kvm-intel"
];
};
swraid = {
enable = true;
mdadmConf = "MAILADDR jimbo@jimbosfiles.com";
};
};
# Main root
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/b8b7ed47-c98c-4a49-af01-b2832dde1287";
fsType = "btrfs";
options = [ "subvol=@" ];
};
"/home" = {
device = "/dev/disk/by-uuid/b8b7ed47-c98c-4a49-af01-b2832dde1287";
fsType = "btrfs";
options = [ "subvol=@home" ];
};
"/nix" = {
device = "/dev/disk/by-uuid/b8b7ed47-c98c-4a49-af01-b2832dde1287";
fsType = "btrfs";
options = [ "subvol=@nix" ];
};
"/var" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@var" ];
};
"/srv/minecraft" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@minecraft" "compress=zstd" ];
};
"/.snapshots" = {
device = "/dev/disk/by-uuid/b8b7ed47-c98c-4a49-af01-b2832dde1287";
fsType = "btrfs";
options = [ "subvol=@snapshots" ];
};
"/boot" = {
device = "/dev/disk/by-uuid/CD94-1D3F";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
# Atrocity of subvols
"/export/JimboNFS/Downloads" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@downloads" "compress=zstd" ];
};
"/export/JimboNFS/Documents" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@docs" "compress=zstd" ];
};
"/export/JimboNFS/Photos" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@photos" "compress=zstd" ];
};
"/export/JimboNFS/Videos/Random" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@videos-random" "compress=zstd" ];
};
"/export/JimboNFS/Videos/Media" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@videos-media" "compress=zstd" ];
};
"/export/JimboNFS/Music/Synced" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@music-synced" "compress=zstd" ];
};
"/export/JimboNFS/Music/Unsynced" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@music-unsynced" "compress=zstd" ];
};
"/export/JimboNFS/Projects" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@projects" "compress=zstd" ];
};
"/export/JimboNFS/School" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@school" "compress=zstd" ];
};
"/export/JimboNFS/.snapshots" = {
device = "/dev/disk/by-uuid/acf95700-8669-45c7-9a72-bf3215b3c325";
fsType = "btrfs";
options = [ "subvol=@snapshots" "compress=zstd" ];
};
};
swapDevices = [
{ device = "/dev/disk/by-uuid/57178cfc-3e71-4d35-8c7f-e355f9dc84df"; }
];
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,27 +0,0 @@
{ nur, config, ... }:
{
imports = [
# Apps and programs
../../../modules/home
../../../modules/home/users
../../../modules/home/files
../../../modules/home/settings
../../../modules/home/programs
../../../modules/home/programs/misc/production
../../../modules/home/programs/misc/gaming/launchers
../../../modules/home/programs/misc/gaming/xash3d
../../../modules/home/programs/misc/school
../../../modules/home/sway
../../../modules/home/utils
# Misc
../../../overlays
../../../variables
../../../variables/look/colors/red
# Imports
nur.nixosModules.nur
];
wayland.windowManager.sway.config.output.${config.displays.d1}.allow_tearing = "yes";
}

View file

@ -1 +0,0 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC2lMkUd+BbXITE5LTg94hEzmA6UKsIIbaf5YOjGoLzl

View file

@ -1,50 +0,0 @@
{ pkgs, ... }:
let
commonKernelParams = [
# Nvidia settings
"nvidia_drm.fbdev=1"
"nouveau.config=NvGspRm=1"
# VM/GPU passthrough
"amd_iommu=on"
"iommu=pt"
"nested=1"
# Virtualization nonsense
"transparent_hugepage=never"
# Isolate devices into IOMMU groups
"pcie_acs_override=downstream,multifunction"
"pci=routeirq"
];
in {
boot = {
kernelPackages = pkgs.linuxPackages_cachyos;
blacklistedKernelModules = [
"pcspkr"
];
kernel.sysctl."vm.max_map_count" = 2147483642;
kernelParams = commonKernelParams ++ [
"vfio-pci.ids=10de:1f82,10de:10fa"
];
# Encryption and TPM
initrd = {
systemd.enable = true;
luks.devices = {
"crypt-ssd" = {
device = "/dev/disk/by-uuid/52110c74-19b6-40ef-9710-e6c9b157005f";
preLVM = true;
allowDiscards = true;
};
};
};
};
# Additional entry to boot from the second GPU
specialisation = {
gputwo.configuration = {
boot.kernelParams = commonKernelParams ++ [ "vfio-pci.ids=10de:2504,10de:228e" ];
};
};
}

View file

@ -1,37 +0,0 @@
{ chaotic, pkgs, ... }:
{
imports = [
./hardware
./boot
# Apps and programs
../../../modules/system
../../../modules/system/accounts
../../../modules/system/desktop
../../../modules/system/programs
../../../modules/system/services
../../../modules/system/services/pc/sunshine
../../../modules/system/services/pc/school
../../../modules/system/services/pc/virtualization/qemu
# Devices and hardware
../../../modules/system/devices
../../../modules/system/devices/boot/lanzaboote
../../../modules/system/devices/video/nvidia
../../../modules/system/devices/networking/firewall/pc
# Misc
../../../overlays
../../../variables
# Imports
chaotic.homeManagerModules.default
];
programs.sway.package = pkgs.sway_git;
networking.hostName = "firefly";
# Force Electron to use Wayland
environment.sessionVariables.NIXOS_OZONE_WL = "1";
}

View file

@ -1,22 +0,0 @@
{ config, nur, ... }:
{
imports = [
# Apps and programs
../../../modules/home
../../../modules/home/users
../../../modules/home/files
../../../modules/home/settings
../../../modules/home/programs
../../../modules/home/programs/misc/remote-desktop
../../../modules/home/sway
../../../modules/home/utils
# Misc
../../../overlays
../../../variables
../../../variables/look/colors/orange
# Imports
nur.nixosModules.nur
];
}

View file

@ -1 +0,0 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBk6ALxn+zKrRys6/c1oYSoWJaUUEo3nAM224ElhjJQR jimbo@lacros

View file

@ -1,17 +0,0 @@
{ ... }:
{
boot = {
kernelPackages = pkgs.linuxPackages_latest;
kernel.sysctl."vm.max_map_count" = 2147483642;
initrd = {
systemd.enable = true;
luks.devices = {
crypt-mmc = {
device = "/dev/disk/by-uuid/5906e176-7ad3-41e5-bc45-ae65664eb10c";
preLVM = true;
allowDiscards = true;
};
};
};
};
}

View file

@ -1,34 +0,0 @@
{ config, lib, ... }:
{
imports = [
./hardware
./boot
# Apps and programs
../../../modules/system
../../../modules/system/accounts
../../../modules/system/desktop
../../../modules/system/programs
../../../modules/system/services
# Devices and hardware
../../../modules/system/devices
../../../modules/system/devices/boot/lanzaboote
../../../modules/system/devices/networking/wireless
../../../modules/system/devices/networking/firewall/pc
../../../modules/system/devices/networking/wireguard/pc
# Extras
../../../overlays
../../../variables
];
services.keyd.keyboards.default.settings.main = {
leftmeta = lib.mkForce "overload(control, esc)";
leftcontrol = lib.mkForce "leftmeta";
f13 = lib.mkForce "delete";
};
networking.hostName = "lacros";
networking.wireguard.interfaces."${config.ips.wgInt}".ips = [ "${config.ips.wgSpan}.18/24" ];
}

View file

@ -1,63 +0,0 @@
{ config, lib, modulesPath, ... }:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot = {
initrd = {
availableKernelModules = [ "xhci_pci" "sdhci_pci" ];
kernelModules = [ "dm-snapshot" ];
};
kernelModules = [ "kvm-intel" ];
};
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/e8c9c5a8-4df0-4100-8de6-f08a1a774fad";
fsType = "btrfs";
options = [ "subvol=@" "noatime" "nodiratime" "discard" ];
};
"/nix" = {
device = "/dev/disk/by-uuid/e8c9c5a8-4df0-4100-8de6-f08a1a774fad";
fsType = "btrfs";
options = [ "subvol=@nix" "noatime" "nodiratime" "discard" ];
};
"/var" = {
device = "/dev/disk/by-uuid/e8c9c5a8-4df0-4100-8de6-f08a1a774fad";
fsType = "btrfs";
options = [ "subvol=@var" "noatime" "nodiratime" "discard" ];
};
"/.snapshots" = {
device = "/dev/disk/by-uuid/e8c9c5a8-4df0-4100-8de6-f08a1a774fad";
fsType = "btrfs";
options = [ "subvol=@snapshots" "noatime" "nodiratime" "discard" ];
};
"/home" = {
device = "/dev/disk/by-uuid/e8c9c5a8-4df0-4100-8de6-f08a1a774fad";
fsType = "btrfs";
options = [ "subvol=@home" "noatime" "nodiratime" "discard" ];
};
"/boot" = {
device = "/dev/disk/by-uuid/1C76-1006";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
# Remote
"/home/jimbo/JimboNFS" = {
device = "${config.ips.wgSpan}.1:/export/JimboNFS";
fsType = "nfs4";
options = ["x-systemd.automount" "_netdev" "nofail" "noauto"];
};
};
swapDevices = [
{ device = "/dev/disk/by-uuid/54a9cc22-4a2c-4e04-a968-313c34481489"; }
];
networking.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,24 +0,0 @@
{ config, nur, ... }:
{
imports = [
# Apps and programs
../../../modules/home
../../../modules/home/users
../../../modules/home/files
../../../modules/home/settings
../../../modules/home/programs
../../../modules/home/programs/misc/production
../../../modules/home/programs/misc/gaming/launchers
../../../modules/home/programs/misc/remote-desktop
../../../modules/home/sway
../../../modules/home/utils
# Misc
../../../overlays
../../../variables
../../../variables/look/colors/green
# Imports
nur.nixosModules.nur
];
}

View file

@ -1 +0,0 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG9uITpyw5WgxT7UnswueFtyWxAqQCZv4h9DfcDkr+kn jimbo@nixos

View file

@ -1,7 +0,0 @@
{ pkgs, ... }:
{
boot = {
kernelPackages = pkgs.linuxPackages_latest;
kernel.sysctl."vm.max_map_count" = 2147483642;
};
}

View file

@ -1,28 +0,0 @@
{ config, ... }:
{
imports = [
./hardware
./boot
# Apps and programs
../../../modules/system
../../../modules/system/accounts
../../../modules/system/desktop
../../../modules/system/programs
../../../modules/system/services
# Devices and hardware
../../../modules/system/devices
../../../modules/system/devices/boot/systemd
../../../modules/system/devices/networking/wireless
../../../modules/system/devices/networking/firewall/pc
../../../modules/system/devices/networking/wireguard/pc
# Extras
../../../overlays
../../../variables
];
networking.hostName = "redmond";
networking.wireguard.interfaces."${config.ips.wgInt}".ips = [ "${config.ips.wgSpan}.20/24" ];
}

View file

@ -1,28 +0,0 @@
{ config, pkgs, nur, ... }:
{
imports = [
# Apps and programs
../../../modules/home
../../../modules/home/users
../../../modules/home/files
../../../modules/home/settings
../../../modules/home/programs
../../../modules/home/programs/misc/remote-desktop
../../../modules/home/sway
../../../modules/home/utils
# Misc
../../../overlays
../../../variables
../../../variables/look/colors/purple
# Imports
nur.nixosModules.nur
];
home.packages = with pkgs; [
alsa-utils
];
wayland.windowManager.sway.config.output.${config.displays.dI}.scale = "1.3";
}

View file

@ -1 +0,0 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK+L723mCLy9/9UAXwkY3+06Oq22dOj+lDnA0lMLbrsR

View file

@ -1,7 +0,0 @@
{ pkgs, ... }:
{
boot = {
kernelPackages = pkgs.linuxPackages_latest;
kernel.sysctl."vm.max_map_count" = 2147483642;
};
}

View file

@ -1,32 +0,0 @@
{ config, lib, hardware, ... }:
{
imports = [
./hardware
./boot
# Apps and programs
../../../modules/system
../../../modules/system/accounts
../../../modules/system/desktop
../../../modules/system/programs
../../../modules/system/services
# Devices and hardware
../../../modules/system/devices
../../../modules/system/devices/boot/extlinux
../../../modules/system/devices/networking/wireless
../../../modules/system/devices/networking/firewall/pc
../../../modules/system/devices/networking/wireguard/pc
# Extras
../../../overlays
../../../variables
# Imports
hardware.nixosModules.pine64-pinebook-pro
];
networking.hostName = "shuttleworth";
hardware.opengl.driSupport32Bit = lib.mkForce false;
networking.wireguard.interfaces."${config.ips.wgInt}".ips = [ "${config.ips.wgSpan}.17/24" ];
}

View file

@ -1,6 +0,0 @@
{ ... }:
{
programs.home-manager.enable = true;
nixpkgs.config.allowUnfree = true;
home.stateVersion = "24.05";
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 KiB

Some files were not shown because too many files have changed in this diff Show more