Compare commits
No commits in common. "311c38ed31b7d42b5a0cc72b7d3e3886f2dc0abf" and "1b2f89f0de2caa26937500251f6c48ca06e2f9d6" have entirely different histories.
311c38ed31
...
1b2f89f0de
|
@ -1,7 +0,0 @@
|
||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
# ./hardware-configuration.nix
|
|
||||||
./user
|
|
||||||
./system
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
{...}: {
|
|
||||||
background = "#282828";
|
|
||||||
foreground = "#ebdbb2";
|
|
||||||
|
|
||||||
normal = {
|
|
||||||
black = "#282828";
|
|
||||||
red = "#cc241d";
|
|
||||||
green = "#98971a";
|
|
||||||
yellow = "#d79921";
|
|
||||||
blue = "#458588";
|
|
||||||
magenta = "#b16286";
|
|
||||||
cyan = "#689d6a";
|
|
||||||
white = "#a89984";
|
|
||||||
};
|
|
||||||
|
|
||||||
bright = {
|
|
||||||
black = "#928374";
|
|
||||||
red = "#fb4934";
|
|
||||||
green = "#b8bb26";
|
|
||||||
yellow = "#fabd2f";
|
|
||||||
blue = "#83a598";
|
|
||||||
magenta = "#d3869b";
|
|
||||||
cyan = "#8ec07c";
|
|
||||||
white = "#ebdbb2";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,26 +0,0 @@
|
||||||
{...}: {
|
|
||||||
background = "#fbf1c7";
|
|
||||||
foreground = "#3c3836";
|
|
||||||
|
|
||||||
normal = {
|
|
||||||
black = "#fbf1c7";
|
|
||||||
red = "#cc241d";
|
|
||||||
green = "#98971a";
|
|
||||||
yellow = "#d79921";
|
|
||||||
blue = "#458588";
|
|
||||||
magenta = "#b16286";
|
|
||||||
cyan = "#689d6a";
|
|
||||||
white = "#7c6f64";
|
|
||||||
};
|
|
||||||
|
|
||||||
bright = {
|
|
||||||
black = "#928374";
|
|
||||||
red = "#9d0006";
|
|
||||||
green = "#79740e";
|
|
||||||
yellow = "#b57614";
|
|
||||||
blue = "#076678";
|
|
||||||
magenta = "#8f3f71";
|
|
||||||
cyan = "#427b58";
|
|
||||||
white = "#3c3836";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
{config, ...}:
|
|
||||||
let
|
|
||||||
theme = if config.darkMode then import ./gruvbox-dark.nix {}
|
|
||||||
else import ./gruvbox-light.nix {};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
inherit (theme) background foreground normal bright;
|
|
||||||
|
|
||||||
extra = {
|
|
||||||
red = "#bd574e";
|
|
||||||
orange = "#eb8242";
|
|
||||||
yellow = "#ede06b";
|
|
||||||
green = "#9bb67c";
|
|
||||||
teal = "#87a7b3";
|
|
||||||
purple = "#ad6989";
|
|
||||||
brown = "#ad8b73";
|
|
||||||
darkbrown = "#85603f";
|
|
||||||
darkerbrown = "#5e454b";
|
|
||||||
cream = "#fefcf3";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
{...}: {
|
|
||||||
email = "janis@nirgendwo.xyz";
|
|
||||||
username = "alice";
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
{...}: {
|
|
||||||
ll = "ls -l";
|
|
||||||
la = "ls -la";
|
|
||||||
git-tree = "git log --graph --oneline --all";
|
|
||||||
c = "clear";
|
|
||||||
cl = "clear; ls --color=auto";
|
|
||||||
q = "exit";
|
|
||||||
ssh = "TERM=xterm-256color ssh";
|
|
||||||
emacs = "emacs -nw"; # Use emacs in terminal mode.
|
|
||||||
|
|
||||||
# dotfiles
|
|
||||||
dotfiles = "git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME";
|
|
||||||
}
|
|
|
@ -1,59 +0,0 @@
|
||||||
{
|
|
||||||
inputs = {
|
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
|
||||||
home-manager = {
|
|
||||||
url = "github:nix-community/home-manager";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
disko = {
|
|
||||||
url = "github:nix-community/disko";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
nur.url = "github:nix-community/nur";
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = inputs @ { self, disko, nixpkgs, home-manager, ... }:
|
|
||||||
let
|
|
||||||
system = "x86_64-linux";
|
|
||||||
in rec {
|
|
||||||
mkSystem = {host, ...}: nixpkgs.lib.nixosSystem {
|
|
||||||
inherit system;
|
|
||||||
|
|
||||||
modules = [
|
|
||||||
./configuration.nix
|
|
||||||
host
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
disko.nixosModules.disko
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true; # Use global packages in home-manager
|
|
||||||
home-manager.useUserPackages = true; # Use user packages in home-manager
|
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = {
|
|
||||||
inherit inputs;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
specialArgs = {
|
|
||||||
inherit inputs home-manager;
|
|
||||||
};
|
|
||||||
|
|
||||||
pkgs = import nixpkgs {
|
|
||||||
inherit system;
|
|
||||||
config.allowUnfree = true; # Allow unfree packages globally
|
|
||||||
overlays = [
|
|
||||||
inputs.nur.overlays.default
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
nixosConfigurations = {
|
|
||||||
vm = mkSystem {
|
|
||||||
host = ./hosts/vm.nix;
|
|
||||||
};
|
|
||||||
laptop = mkSystem {
|
|
||||||
host = ./hosts/laptop;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
{config, ...}:
|
|
||||||
let
|
|
||||||
theme = import ../data/theme.nix {inherit config; };
|
|
||||||
|
|
||||||
in {
|
|
||||||
programs.alacritty = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
font.normal.family = "monospace";
|
|
||||||
window = {
|
|
||||||
dynamic_title = true;
|
|
||||||
title = "Alacritty";
|
|
||||||
};
|
|
||||||
|
|
||||||
# gruvbox dark theme
|
|
||||||
colors = {
|
|
||||||
primary = {
|
|
||||||
inherit (theme) background foreground;
|
|
||||||
};
|
|
||||||
|
|
||||||
inherit (theme) normal bright;
|
|
||||||
};
|
|
||||||
|
|
||||||
keyboard = {
|
|
||||||
bindings = [
|
|
||||||
{
|
|
||||||
key = "Return";
|
|
||||||
mods = "Shift|Control";
|
|
||||||
action = "SpawnNewInstance";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,37 +0,0 @@
|
||||||
{pkgs, ...}:
|
|
||||||
let
|
|
||||||
user = import ../data/user.nix {};
|
|
||||||
in {
|
|
||||||
imports = [
|
|
||||||
./alacritty.nix
|
|
||||||
./firefox.nix
|
|
||||||
./sway.nix
|
|
||||||
./waybar.nix
|
|
||||||
./zsh.nix
|
|
||||||
./rofi.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
fonts.fontconfig.enable = true;
|
|
||||||
home = {
|
|
||||||
stateVersion = "25.05";
|
|
||||||
homeDirectory = "/home/${user.username}";
|
|
||||||
username = user.username;
|
|
||||||
|
|
||||||
sessionVariables = {
|
|
||||||
EDITOR = "nvim";
|
|
||||||
VISUAL = "nvim";
|
|
||||||
};
|
|
||||||
|
|
||||||
packages = with pkgs; [
|
|
||||||
# Add your global packages here
|
|
||||||
neovim
|
|
||||||
git
|
|
||||||
wget
|
|
||||||
curl
|
|
||||||
htop
|
|
||||||
tree
|
|
||||||
htop
|
|
||||||
pavucontrol
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,127 +0,0 @@
|
||||||
{pkgs, ...}: let
|
|
||||||
user = import ../data/user.nix {};
|
|
||||||
in{
|
|
||||||
programs.firefox = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
policies = {
|
|
||||||
CaptivePortal = false;
|
|
||||||
DisablePocket = true;
|
|
||||||
DisableTelemetry = true;
|
|
||||||
DisableFirefoxStudies = true;
|
|
||||||
FirefoxHome = {
|
|
||||||
Pocket = false;
|
|
||||||
Snippets = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
profiles = {
|
|
||||||
default = {
|
|
||||||
isDefault = true;
|
|
||||||
|
|
||||||
search = {
|
|
||||||
default = "ddg";
|
|
||||||
force = true;
|
|
||||||
privateDefault = "ddg";
|
|
||||||
};
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
# disable warning when editing about:config
|
|
||||||
"browser.aboutConfig.showWarning" = false;
|
|
||||||
# webgpu
|
|
||||||
"dom.webgpu.enabled" = true;
|
|
||||||
"gfx.webrender.all" = true;
|
|
||||||
"signon.rememberSignons" = false;
|
|
||||||
# mozilla syncserver
|
|
||||||
"identity.sync.tokenserver.uri" = "https://nirgendswo.com:8001/1.0/sync/1.5";
|
|
||||||
"services.sync.username" = user.email;
|
|
||||||
"browser.startup.page" = 3; # resume previous session
|
|
||||||
"browser.startup.homepage" = "about:home";
|
|
||||||
"browser.toolbars.bookmarks.visibility" = "never";
|
|
||||||
|
|
||||||
# hardening
|
|
||||||
"browser.newtabpage.enabled" = false;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.telemetry" = false;
|
|
||||||
"browser.newtabpage.activity-stream.telemetry" = false;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.snippets" = false;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
|
||||||
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
|
||||||
"browser.newtabpage.activity-stream.showSponsored" = false;
|
|
||||||
"browser.newtabpage.activity-stream.feeds.discoverystreamfeed" = false;
|
|
||||||
"browser.newtabpage.activity-stream.default.sites" = "";
|
|
||||||
"browser.newtab.preload" = false;
|
|
||||||
"geo.provider.network.url" = "https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%";
|
|
||||||
"geo.provider.ms-windows-location" = false;
|
|
||||||
"geo.provider.use_corelocation" = false;
|
|
||||||
"geo.provider.use_gpsd" = false;
|
|
||||||
"geo.provider.use_geoclue" = false;
|
|
||||||
"browser.region.network.url" = "";
|
|
||||||
"browser.region.update.enabled" = false;
|
|
||||||
"intl.accept_languages" = "en-US,en-GB,en";
|
|
||||||
"javascript.use_us_language_locale" = true;
|
|
||||||
"app.update.auto" = false;
|
|
||||||
|
|
||||||
"extensions.discover.enabled" = false;
|
|
||||||
"extensions.htmlaboutaddons.recommendations.enabled" = false;
|
|
||||||
"extenisons.getAddons.showPane" = false;
|
|
||||||
|
|
||||||
"datareporting.healthreport.uploadEnabled" = false;
|
|
||||||
"datareporting.policy.dataSubmissionEnabled" = false;
|
|
||||||
"toolkit.telemetry.enabled" = false;
|
|
||||||
"toolkit.telemetry.unified" = false;
|
|
||||||
"toolkit.telemetry.server" = "data:,";
|
|
||||||
"toolkit.telemetry.archive.enabled" = false;
|
|
||||||
"toolkit.telemetry.newProfilePing.enabled" = false;
|
|
||||||
"toolkit.telemetry.shutdownPingSender.enabled" = false;
|
|
||||||
"toolkit.telemetry.updatePing.enabled" = false;
|
|
||||||
"toolkit.telemetry.bhrPing.enabled" = false;
|
|
||||||
"toolkit.telemetry.firstShutdownPing.enabled" = false;
|
|
||||||
"toolkit.telemetry.coverage.opt-out" = true;
|
|
||||||
"toolkit.coverage.opt-out" = true;
|
|
||||||
"beacon.enabled" = false;
|
|
||||||
|
|
||||||
"app.shield.optoutstudies.enabled" = false;
|
|
||||||
|
|
||||||
"captivedetect.canonicalURL" = "";
|
|
||||||
"network.captive-portal-service.enabled" = false;
|
|
||||||
"network.connectivity-service.enabled" = false;
|
|
||||||
|
|
||||||
"browser.safebrowsing.malware.enabled" = false;
|
|
||||||
"browser.safebrowsing.phishing.enabled" = false;
|
|
||||||
"browser.safebrowsing.blockedURIs.enabled" = false;
|
|
||||||
"browser.safebrowsing.provider.google4.gethashURL" = "";
|
|
||||||
"browser.safebrowsing.provider.google4.updateURL" = "";
|
|
||||||
"browser.safebrowsing.provider.google4.dataSharingURL" = "";
|
|
||||||
"browser.safebrowsing.provider.google.gethashURL" = "";
|
|
||||||
"browser.safebrowsing.provider.google.updateURL" = "";
|
|
||||||
|
|
||||||
"browser.safebrowsing.downloads.enabled" = false;
|
|
||||||
"browser.safebrowsing.downloads.remote.enabled" = false;
|
|
||||||
"browser.safebrowsing.downloads.remote.url" = "";
|
|
||||||
"browser.safebrowsing.allowOverride" = false;
|
|
||||||
|
|
||||||
"network.prefetch-next" = false;
|
|
||||||
"network.dns.disablePrefetch" = true;
|
|
||||||
"network.predictor.enabled" = false;
|
|
||||||
|
|
||||||
"browser.fixup.alternate.enabled" = false;
|
|
||||||
"browser.urlbar.trimURLs" = false;
|
|
||||||
|
|
||||||
"browser.contentblocking.category" = "strict";
|
|
||||||
"privacy.partition.serviceWorkers" = true;
|
|
||||||
"privacy.partition.always_partition_third_party_non_cookie_storage" = true;
|
|
||||||
"privacy.partition.always_partition_third_party_non_cookie_storage.exempt_sessionstorage" = true;
|
|
||||||
"privacy.resistFingerprinting" = true;
|
|
||||||
"privacy.resistFingerprinting.block_mozAddonManager" = true;
|
|
||||||
|
|
||||||
"app.normandy.enabled" = false;
|
|
||||||
"app.normandy.api_url" = "";
|
|
||||||
};
|
|
||||||
|
|
||||||
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
|
||||||
ublock-origin bitwarden rust-search-extension betterttv
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
{pkgs, config, ...}: {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
libinput
|
|
||||||
libinput-gestures
|
|
||||||
];
|
|
||||||
|
|
||||||
# Ensure libinput-gestures service is enabled
|
|
||||||
wayland.windowManager.sway.systemd.extraCommands = [
|
|
||||||
"systemctl --user enable libinput-gestures.service"
|
|
||||||
"systemctl --user start libinput-gestures.service"
|
|
||||||
];
|
|
||||||
|
|
||||||
xdg.configFile."libinput-gestures.conf".text = ''
|
|
||||||
gesture swipe left 4 swaymsg workspace next
|
|
||||||
gesture swipe right 4 swaymsg workspace next
|
|
||||||
gesture swipe down 4 swaylock-wrapper
|
|
||||||
gesture pinch in 4 rofi -combi-modi window,drun,run,ssh,combi -show combi -show-icons
|
|
||||||
'';
|
|
||||||
}
|
|
|
@ -1,239 +0,0 @@
|
||||||
{pkgs, config, ...}: let
|
|
||||||
theme = import ../data/theme.nix { inherit config; };
|
|
||||||
in {
|
|
||||||
xdg.dataFile."rofi/themes/launcher.rasi".text = ''
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Author : Aditya Shakya (adi1090x)
|
|
||||||
* Github : @adi1090x
|
|
||||||
*
|
|
||||||
* Rofi Theme File
|
|
||||||
* Rofi Version: 1.7.3
|
|
||||||
**/
|
|
||||||
|
|
||||||
/*****----- Configuration -----*****/
|
|
||||||
configuration {
|
|
||||||
modi: "drun,run,filebrowser,window";
|
|
||||||
show-icons: false;
|
|
||||||
display-drun: "";
|
|
||||||
display-run: "";
|
|
||||||
display-filebrowser: "";
|
|
||||||
display-window: "";
|
|
||||||
drun-display-format: "{name}";
|
|
||||||
window-format: "{w} · {c} · {t}";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****----- Global Properties -----*****/
|
|
||||||
* {
|
|
||||||
font: "JetBrains Mono Nerd Font 10";
|
|
||||||
background: #101010;
|
|
||||||
background-alt: #252525;
|
|
||||||
foreground: #FFFFFF;
|
|
||||||
selected: #505050;
|
|
||||||
active: #909090;
|
|
||||||
urgent: #707070;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****----- Main Window -----*****/
|
|
||||||
window {
|
|
||||||
/* properties for window widget */
|
|
||||||
transparency: "real";
|
|
||||||
location: center;
|
|
||||||
anchor: center;
|
|
||||||
fullscreen: false;
|
|
||||||
width: 400px;
|
|
||||||
x-offset: 0px;
|
|
||||||
y-offset: 0px;
|
|
||||||
|
|
||||||
/* properties for all widgets */
|
|
||||||
enabled: true;
|
|
||||||
border-radius: 20px;
|
|
||||||
cursor: "default";
|
|
||||||
background-color: @background;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****----- Main Box -----*****/
|
|
||||||
mainbox {
|
|
||||||
enabled: true;
|
|
||||||
spacing: 0px;
|
|
||||||
background-color: transparent;
|
|
||||||
orientation: vertical;
|
|
||||||
children: [ "inputbar", "listbox" ];
|
|
||||||
}
|
|
||||||
|
|
||||||
listbox {
|
|
||||||
spacing: 20px;
|
|
||||||
padding: 20px;
|
|
||||||
background-color: transparent;
|
|
||||||
orientation: vertical;
|
|
||||||
children: [ "message", "listview", "mode-switcher" ];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****----- Inputbar -----*****/
|
|
||||||
inputbar {
|
|
||||||
enabled: true;
|
|
||||||
spacing: 10px;
|
|
||||||
padding: 100px 40px;
|
|
||||||
background-color: transparent;
|
|
||||||
background-image: url("~/.config/rofi/images/g.png", width);
|
|
||||||
text-color: @foreground;
|
|
||||||
orientation: horizontal;
|
|
||||||
children: [ "textbox-prompt-colon", "entry" ];
|
|
||||||
}
|
|
||||||
textbox-prompt-colon {
|
|
||||||
enabled: true;
|
|
||||||
expand: false;
|
|
||||||
str: "";
|
|
||||||
padding: 12px 15px;
|
|
||||||
border-radius: 100%;
|
|
||||||
background-color: @background-alt;
|
|
||||||
text-color: inherit;
|
|
||||||
}
|
|
||||||
entry {
|
|
||||||
enabled: true;
|
|
||||||
expand: true;
|
|
||||||
padding: 12px 16px;
|
|
||||||
border-radius: 100%;
|
|
||||||
background-color: @background-alt;
|
|
||||||
text-color: inherit;
|
|
||||||
cursor: text;
|
|
||||||
placeholder: "Search";
|
|
||||||
placeholder-color: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****----- Mode Switcher -----*****/
|
|
||||||
mode-switcher{
|
|
||||||
enabled: true;
|
|
||||||
spacing: 10px;
|
|
||||||
background-color: transparent;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
button {
|
|
||||||
padding: 12px;
|
|
||||||
border-radius: 100%;
|
|
||||||
background-color: @background-alt;
|
|
||||||
text-color: inherit;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
button selected {
|
|
||||||
background-color: @selected;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****----- Listview -----*****/
|
|
||||||
listview {
|
|
||||||
enabled: true;
|
|
||||||
columns: 1;
|
|
||||||
lines: 5;
|
|
||||||
cycle: true;
|
|
||||||
dynamic: true;
|
|
||||||
scrollbar: false;
|
|
||||||
layout: vertical;
|
|
||||||
reverse: false;
|
|
||||||
fixed-height: true;
|
|
||||||
fixed-columns: true;
|
|
||||||
|
|
||||||
spacing: 10px;
|
|
||||||
background-color: transparent;
|
|
||||||
text-color: @foreground;
|
|
||||||
cursor: "default";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****----- Elements -----*****/
|
|
||||||
element {
|
|
||||||
enabled: true;
|
|
||||||
spacing: 10px;
|
|
||||||
padding: 12px;
|
|
||||||
border-radius: 100%;
|
|
||||||
background-color: transparent;
|
|
||||||
text-color: @foreground;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
element normal.normal {
|
|
||||||
background-color: inherit;
|
|
||||||
text-color: inherit;
|
|
||||||
}
|
|
||||||
element normal.urgent {
|
|
||||||
background-color: @urgent;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
element normal.active {
|
|
||||||
background-color: @active;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
element selected.normal {
|
|
||||||
background-color: @selected;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
element selected.urgent {
|
|
||||||
background-color: @urgent;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
element selected.active {
|
|
||||||
background-color: @urgent;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
element-icon {
|
|
||||||
background-color: transparent;
|
|
||||||
text-color: inherit;
|
|
||||||
size: 32px;
|
|
||||||
cursor: inherit;
|
|
||||||
}
|
|
||||||
element-text {
|
|
||||||
background-color: transparent;
|
|
||||||
text-color: inherit;
|
|
||||||
cursor: inherit;
|
|
||||||
vertical-align: 0.5;
|
|
||||||
horizontal-align: 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*****----- Message -----*****/
|
|
||||||
message {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
textbox {
|
|
||||||
padding: 12px;
|
|
||||||
border-radius: 100%;
|
|
||||||
background-color: @background-alt;
|
|
||||||
text-color: @foreground;
|
|
||||||
vertical-align: 0.5;
|
|
||||||
horizontal-align: 0.0;
|
|
||||||
}
|
|
||||||
error-message {
|
|
||||||
padding: 15px;
|
|
||||||
border-radius: 0px;
|
|
||||||
background-color: @background;
|
|
||||||
text-color: @foreground;
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
|
|
||||||
xdg.configFile."rofi/launcher.rasi".text = ''
|
|
||||||
configuration {
|
|
||||||
modi: "drun,run,ssh,filebrowser,window";
|
|
||||||
terminal: "${pkgs.alacritty}/bin/alacritty";
|
|
||||||
show-icons: true;
|
|
||||||
display-drun: "";
|
|
||||||
display-run: "";
|
|
||||||
display-ssh: "";
|
|
||||||
|
|
||||||
drun-display-format: "{name}";
|
|
||||||
run-display-format: "{name}";
|
|
||||||
ssh-display-format: "{name}";
|
|
||||||
combi-display-format: "{mode} {name}";
|
|
||||||
|
|
||||||
combi-modi: "window,drun,run,filebrowser";
|
|
||||||
|
|
||||||
kb-mode-previous: "Control+h";
|
|
||||||
kb-mode-next: "Control+l";
|
|
||||||
kb-mode-complete: "";
|
|
||||||
kb-remove-char-back: "BackSpace,Shift+BackSpace";
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
programs.rofi = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.rofi-wayland;
|
|
||||||
terminal = "{pkgs.alacritty}/bin/alacritty";
|
|
||||||
|
|
||||||
theme = "launcher.rasi";
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,150 +0,0 @@
|
||||||
{pkgs, lib, config, ...}:
|
|
||||||
let
|
|
||||||
mod = "Mod4";
|
|
||||||
left = "h";
|
|
||||||
right = "l";
|
|
||||||
up = "k";
|
|
||||||
down = "j";
|
|
||||||
|
|
||||||
launcher = "${pkgs.rofi}/bin/rofi -config ${config.xdg.configHome}/rofi/launcher.rasi -theme ${config.xdg.dataHome}/rofi/themes/launcher.rasi -show drun -show-icons";
|
|
||||||
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
brightnessctl
|
|
||||||
wmctrl
|
|
||||||
wireplumber
|
|
||||||
alacritty
|
|
||||||
waybar
|
|
||||||
sway
|
|
||||||
rofi-wayland
|
|
||||||
];
|
|
||||||
wayland = {
|
|
||||||
windowManager = {
|
|
||||||
sway = {
|
|
||||||
enable = true;
|
|
||||||
systemd = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
config = {
|
|
||||||
modifier = "${mod}";
|
|
||||||
|
|
||||||
gaps = {
|
|
||||||
inner = 8;
|
|
||||||
};
|
|
||||||
|
|
||||||
bars = [{
|
|
||||||
command = "${pkgs.waybar}/bin/waybar";
|
|
||||||
}];
|
|
||||||
|
|
||||||
window = {
|
|
||||||
border = 3;
|
|
||||||
titlebar = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
input = {
|
|
||||||
"type:pointer" = {
|
|
||||||
pointer_accel = "-1";
|
|
||||||
};
|
|
||||||
|
|
||||||
"type:keyboard" = {
|
|
||||||
xkb_layout = "gb,dk";
|
|
||||||
xkb_options =
|
|
||||||
"caps:escape,grp:menu_toggle,grp:rctrl_toggle";
|
|
||||||
repeat_delay = "250";
|
|
||||||
repeat_rate = "25";
|
|
||||||
};
|
|
||||||
|
|
||||||
"type:touchpad" = {
|
|
||||||
natural_scroll = "enabled";
|
|
||||||
tap = "enabled";
|
|
||||||
tap_button_map = "lrm";
|
|
||||||
pointer_accel = "0";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
keybindings = with pkgs; {
|
|
||||||
"Print" = "exec screenshot";
|
|
||||||
"${mod}+Print" = "exec screenshot --area";
|
|
||||||
"${mod}+Shift+Print" = "exec screenshot --current-window";
|
|
||||||
|
|
||||||
"XF86AudioRaiseVolume" = "exec ${wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+";
|
|
||||||
"XF86AudioLowerVolume" = "exec ${wireplumber}/bin/wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-";
|
|
||||||
"XF86AudioMute" = "exec ${wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
|
|
||||||
"XF86AudioMicMute" = "exec ${wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
|
|
||||||
|
|
||||||
"XF86AudioPlay" = "mpc toggle";
|
|
||||||
"XF86AudioNext" = "mpc next";
|
|
||||||
"XF86AudioPrev" = "mpc prev";
|
|
||||||
|
|
||||||
"XF86MonBrightnessUp" = "exec ${brightnessctl}/bin/brightnessctl set +10%";
|
|
||||||
"XF86MonBrightnessDown" = "exec ${brightnessctl}/bin/brightnessctl set 10%-";
|
|
||||||
|
|
||||||
"${mod}+Shift+Return" = "exec ${alacritty}/bin/alacritty";
|
|
||||||
"${mod}+q" = "kill";
|
|
||||||
"${mod}+p" = "exec ${launcher}";
|
|
||||||
"${mod}+Shift+e" = "exec ${pkgs.emacs}/bin/emacsclient -c -a ''";
|
|
||||||
"${mod}+Shift+b" = "exec ${pkgs.firefox}/bin/firefox";
|
|
||||||
"${mod}+Shift+c" = "reload";
|
|
||||||
"${mod}+Shift+q" = "exec ${pkgs.sway}/bin/swaymsg exit";
|
|
||||||
|
|
||||||
"${mod}+${left}" = "focus left";
|
|
||||||
"${mod}+${right}" = "focus right";
|
|
||||||
"${mod}+${up}" = "focus up";
|
|
||||||
"${mod}+${down}" = "focus down";
|
|
||||||
|
|
||||||
"${mod}+Shift+${left}" = "move left";
|
|
||||||
"${mod}+Shift+${right}" = "move right";
|
|
||||||
"${mod}+Shift+${up}" = "move up";
|
|
||||||
"${mod}+Shift+${down}" = "move down";
|
|
||||||
|
|
||||||
"${mod}+Ctrl+${left}" = "move workspace to output left";
|
|
||||||
"${mod}+Ctrl+${right}" = "move workspace to output right";
|
|
||||||
|
|
||||||
"${mod}+b" = "splith";
|
|
||||||
"${mod}+v" = "splitv";
|
|
||||||
|
|
||||||
"${mod}+s" = "layout stacking";
|
|
||||||
"${mod}+w" = "layout tabbed";
|
|
||||||
"${mod}+e" = "layout toggle split";
|
|
||||||
|
|
||||||
"${mod}+Shift+space" = "layout toggle floating";
|
|
||||||
"${mod}+space" = "focus mode_toggle";
|
|
||||||
"${mod}+Shift+f" = "fullscreen";
|
|
||||||
|
|
||||||
} // lib.attrsets.mergeAttrsList (map
|
|
||||||
(n: let workspace = toString n; in {
|
|
||||||
"${mod}+${workspace}" = "workspace ${workspace}";
|
|
||||||
"${mod}+Shift+${workspace}" = "move container to workspace ${workspace}";
|
|
||||||
})
|
|
||||||
[1 2 3 4 5 6 7 8 9 0]
|
|
||||||
);
|
|
||||||
|
|
||||||
colors = {
|
|
||||||
focused = {
|
|
||||||
background = "#A7C080";
|
|
||||||
text = "#272E33";
|
|
||||||
indicator = "#A7C080";
|
|
||||||
border = "#A7C080";
|
|
||||||
childBorder = "#A7C080";
|
|
||||||
};
|
|
||||||
unfocused = {
|
|
||||||
background = "#9DA9A0";
|
|
||||||
text = "#272E33";
|
|
||||||
indicator = "#9DA9A0";
|
|
||||||
border = "#9DA9A0";
|
|
||||||
childBorder = "#9DA9A0";
|
|
||||||
};
|
|
||||||
urgent = {
|
|
||||||
background = "#E67E80";
|
|
||||||
text = "#272E33";
|
|
||||||
indicator = "#E67E80";
|
|
||||||
border = "#E67E80";
|
|
||||||
childBorder = "#E67E80";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,241 +0,0 @@
|
||||||
{pkgs, lib, config, ...}:
|
|
||||||
let
|
|
||||||
theme = import ../data/theme.nix {inherit config; };
|
|
||||||
utils = import ../utils.nix {inherit lib; };
|
|
||||||
in let
|
|
||||||
self = rec {
|
|
||||||
# ModuleDesc has the shape {name, config?, background?, color?, style?}
|
|
||||||
module-descs = [
|
|
||||||
{
|
|
||||||
name = "custom/left-most";
|
|
||||||
background = theme.background;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "pulseaudio";
|
|
||||||
config = {
|
|
||||||
format = "{volume}% {icon} {format_source}";
|
|
||||||
format-bluetooth = "{volume}% {icon} {format_source}";
|
|
||||||
format-muted = "{format_source}";
|
|
||||||
format-source = "{volume}% ";
|
|
||||||
format-source-muted = "";
|
|
||||||
format-icons = {
|
|
||||||
headphones = "";
|
|
||||||
default = ["" "" ""];
|
|
||||||
};
|
|
||||||
on-click = "pavucontrol";
|
|
||||||
};
|
|
||||||
background = theme.normal.yellow;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "network";
|
|
||||||
config = {
|
|
||||||
format-wifi = "{essid} {signalStrength}% {icon}";
|
|
||||||
format-ethernet = "{ipaddr} ";
|
|
||||||
format-disconnected = "Disconnected ";
|
|
||||||
tooltip-format = ''Interface: {ifname}
|
|
||||||
IP: {ipaddr}
|
|
||||||
Speed: {bandwidthUpBytes} / {bandwidthDownBytes}
|
|
||||||
Signal: {signalStrength}%
|
|
||||||
SSID: {essid} {frequency}'';
|
|
||||||
on-click = "iwgtk";
|
|
||||||
format-icons = ["" "" "" "" ""];
|
|
||||||
};
|
|
||||||
background = theme.normal.green;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "custom/vpn";
|
|
||||||
config = {
|
|
||||||
format = "{}";
|
|
||||||
excape = true;
|
|
||||||
interval = 30;
|
|
||||||
exec = "nordvpn-rofi.sh --status-json";
|
|
||||||
return-type = "json";
|
|
||||||
on-click = "rofi -show vpn -modes 'vpn:nordvpn-rofi.sh'";
|
|
||||||
};
|
|
||||||
style = {
|
|
||||||
connected.color = theme.normal.black;
|
|
||||||
disconnected.color = theme.normal.yellow;
|
|
||||||
};
|
|
||||||
background = theme.extra.teal;}
|
|
||||||
]
|
|
||||||
++ (if (config.has_battery) then [{
|
|
||||||
name = "battery";
|
|
||||||
config = {
|
|
||||||
states = {
|
|
||||||
critical = 15;
|
|
||||||
warning = 25;
|
|
||||||
good = 80;
|
|
||||||
full = 90;
|
|
||||||
};
|
|
||||||
interval = 30;
|
|
||||||
format = "{capacity}% {icon}";
|
|
||||||
format-charging = "{capacity}% ";
|
|
||||||
format-plugged = "{capacity}% ";
|
|
||||||
format-icons = ["" "" "" "" ""];
|
|
||||||
};
|
|
||||||
background = theme.extra.aqua;
|
|
||||||
}] else [])
|
|
||||||
++ [
|
|
||||||
{
|
|
||||||
name = "cpu";
|
|
||||||
config = {
|
|
||||||
format = "{}% ";
|
|
||||||
};
|
|
||||||
background = theme.extra.brown;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "memory";
|
|
||||||
config = {
|
|
||||||
format = "{}% ";
|
|
||||||
};
|
|
||||||
background = theme.extra.darkbrown;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "temperature";
|
|
||||||
config = {
|
|
||||||
critical-threshold = 80;
|
|
||||||
hwmon-path = "/sys/class/hwmon/hwmon5/temp1_input";
|
|
||||||
format = "{temperatureC}°C {icon}";
|
|
||||||
format-icons = ["" "" ""];
|
|
||||||
};
|
|
||||||
background = theme.extra.darkerbrown;
|
|
||||||
}
|
|
||||||
{
|
|
||||||
name = "clock";
|
|
||||||
config = {
|
|
||||||
format = "{:%H:%M} ";
|
|
||||||
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
|
||||||
calendar = {
|
|
||||||
mode = "month";
|
|
||||||
weeks-pos = "left";
|
|
||||||
on-scroll = 1;
|
|
||||||
format = {
|
|
||||||
months = "<span color=\"${theme.normal.yellow}\"><b>{}</b></span>";
|
|
||||||
days = "<span color=\"${theme.normal.white}\"><b>{}</b></span>";
|
|
||||||
weekdays = "<span color=\"${theme.bright.black}\"><b>{}</b></span>";
|
|
||||||
today = "<span color=\"${theme.normal.red}\"><b>{}</b></span>";
|
|
||||||
};
|
|
||||||
on-scroll-up = "shift_up";
|
|
||||||
on-scroll-down = "shift_down";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
background = theme.normal.black;
|
|
||||||
}
|
|
||||||
{name = "tray"; config = { spacing = 10; }; background = theme.background;}
|
|
||||||
];
|
|
||||||
|
|
||||||
# default style for modules
|
|
||||||
default-style = "padding-left: 8pt; padding-right: 8pt;";
|
|
||||||
|
|
||||||
# ModuleDesc -> Module
|
|
||||||
mkModule = desc: let
|
|
||||||
background = desc.background or theme.background;
|
|
||||||
color = desc.color or theme.foreground;
|
|
||||||
config = desc.config or {};
|
|
||||||
# style = module.style or "";
|
|
||||||
style = default-style;
|
|
||||||
style-name = builtins.replaceStrings ["/"] ["-"] desc.name;
|
|
||||||
in {
|
|
||||||
inherit (desc) name;
|
|
||||||
setting = {
|
|
||||||
} // config;
|
|
||||||
|
|
||||||
style = "#${style-name} {" + default-style + ''background: ${background};color: ${color};'' + "}\n";
|
|
||||||
};
|
|
||||||
|
|
||||||
mkSpacer = idx: left: right: {
|
|
||||||
name = "custom/arrow${toString idx}";
|
|
||||||
setting = {
|
|
||||||
format = "";
|
|
||||||
tooltip = false;
|
|
||||||
};
|
|
||||||
style = "#custom-arrow${toString idx} {font-size: 14pt;background: ${left.background};color: ${right.background};}\n";
|
|
||||||
};
|
|
||||||
|
|
||||||
# modules interlaced with spacers
|
|
||||||
# [ModuleDesc] -> [Module]
|
|
||||||
mkSpacedModules = descs: with builtins;
|
|
||||||
let
|
|
||||||
len = length descs;
|
|
||||||
in lib.lists.flatten
|
|
||||||
(lib.lists.imap0
|
|
||||||
(n: descs: let
|
|
||||||
left = elemAt descs 0;
|
|
||||||
right = elemAt descs 1;
|
|
||||||
in if n == len then [
|
|
||||||
(mkModule left)
|
|
||||||
(mkSpacer n left right)
|
|
||||||
(mkModule right)
|
|
||||||
] else [
|
|
||||||
(mkModule left)
|
|
||||||
(mkSpacer n left right)
|
|
||||||
])
|
|
||||||
(utils.windows 2 descs)
|
|
||||||
);
|
|
||||||
|
|
||||||
# Module -> {"name" = setting}
|
|
||||||
mkModuleConfig = {name, setting, ...}: lib.attrsets.optionalAttrs (!utils.isEmptySet setting) {
|
|
||||||
"${name}" = setting;
|
|
||||||
};
|
|
||||||
|
|
||||||
# builds bar configuration with left, center, and right modules
|
|
||||||
# right modules get spacers in between them.
|
|
||||||
# {left: [ModuleDesc], center: [ModuleDesc], right: [ModuleDesc], config: {}} -> {config, style}
|
|
||||||
mkBar = {left, center, right, config, ...}:
|
|
||||||
let
|
|
||||||
# Create modules from the descriptions
|
|
||||||
right' = mkSpacedModules right;
|
|
||||||
left' = map (module: mkModule module) left;
|
|
||||||
center' = map (module: mkModule module) center;
|
|
||||||
in let
|
|
||||||
# Create lists of module names for the config
|
|
||||||
modules-left = map (module: module.name) left';
|
|
||||||
modules-center = map (module: module.name) center';
|
|
||||||
modules-right = map (module: module.name) right';
|
|
||||||
# Combine all modules into a single list
|
|
||||||
modules = lib.lists.flatten [left' center' right'];
|
|
||||||
in {
|
|
||||||
config = lib.attrsets.mergeAttrsList (lib.lists.flatten [
|
|
||||||
{
|
|
||||||
inherit modules-left modules-center modules-right;
|
|
||||||
}
|
|
||||||
config
|
|
||||||
(map mkModuleConfig modules)
|
|
||||||
]);
|
|
||||||
style = lib.strings.concatStringsSep "\n" (map (module: module.style) modules);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
bar = self.mkBar {
|
|
||||||
left = [ {name = "sway/workspaces";} {name = "sway/mode";} ];
|
|
||||||
center = [ {name = "sway/window";} ];
|
|
||||||
right = self.module-descs;
|
|
||||||
config = {
|
|
||||||
height = 25;
|
|
||||||
spacing = 0;
|
|
||||||
position = "top";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in {
|
|
||||||
imports = [ ../options.nix ];
|
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
waybar
|
|
||||||
pavucontrol
|
|
||||||
iwgtk
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.waybar = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
settings = {
|
|
||||||
mainBar = bar.config;
|
|
||||||
};
|
|
||||||
|
|
||||||
style = ''
|
|
||||||
* {border: none; border-radius: 0; min-height: 0; margin: 0; padding: 0; box-shadow: none; text-shadow: none;}
|
|
||||||
#waybar { background: rgba(40, 40, 40, 0.3); color: #ffffff; font-family: "sans-serif"; font-size: 12pt; font-weight: 500; }
|
|
||||||
''
|
|
||||||
+ bar.style;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
{pkgs, ...}:
|
|
||||||
let
|
|
||||||
aliases = import ../data/zsh-aliases.nix {};
|
|
||||||
in {
|
|
||||||
home.packages = with pkgs; [ pure-prompt ];
|
|
||||||
programs.zsh = {
|
|
||||||
enable = true;
|
|
||||||
enableCompletion = true;
|
|
||||||
shellAliases = aliases;
|
|
||||||
|
|
||||||
history = {
|
|
||||||
size = 10000000;
|
|
||||||
save = 10000000;
|
|
||||||
findNoDups = true;
|
|
||||||
saveNoDups = true;
|
|
||||||
ignoreDups = true;
|
|
||||||
share = true;
|
|
||||||
extended = true;
|
|
||||||
append = true;
|
|
||||||
path = "$HOME/.zsh_history";
|
|
||||||
};
|
|
||||||
|
|
||||||
initExtra = ''
|
|
||||||
prompt pure
|
|
||||||
zstyle :prompt:pure:path color cyan
|
|
||||||
zstyle :prompt:pure:prompt:error color red
|
|
||||||
zstyle :prompt:pure:prompt:success color green
|
|
||||||
bindkey -v
|
|
||||||
autoload -Uz edit-command-line
|
|
||||||
zle -N edit-command-line
|
|
||||||
bindkey '^X^E' edit-command-line
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.fzf = {
|
|
||||||
enable = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,6 +0,0 @@
|
||||||
{modulesPath, ...}: {
|
|
||||||
imports = [
|
|
||||||
./disks.nix
|
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -1,78 +0,0 @@
|
||||||
{
|
|
||||||
disko.devices = {
|
|
||||||
disk = {
|
|
||||||
root = {
|
|
||||||
type = "disk";
|
|
||||||
device = "/dev/nvme0n1";
|
|
||||||
content = {
|
|
||||||
type = "gpt";
|
|
||||||
partitions = {
|
|
||||||
ESP = {
|
|
||||||
label = "boot";
|
|
||||||
name = "ESP";
|
|
||||||
type = "EF00";
|
|
||||||
size = "512M";
|
|
||||||
content = {
|
|
||||||
type = "filesystem";
|
|
||||||
format = "vfat";
|
|
||||||
mountpoint = "/boot";
|
|
||||||
mountOptions = [ "umask=0077" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
luks = {
|
|
||||||
size = "100%";
|
|
||||||
label = "luks";
|
|
||||||
content = {
|
|
||||||
type = "luks";
|
|
||||||
name = "cryptroot";
|
|
||||||
extraOpenArgs = [
|
|
||||||
"--allow-discards"
|
|
||||||
"--perf-no_read_workqueue"
|
|
||||||
"--perf-no_write_workqueue"
|
|
||||||
];
|
|
||||||
# https://0pointer.net/blog/unlocking-luks2-volumes-with-tpm2-fido2-pkcs11-security-hardware-on-systemd-248.html
|
|
||||||
settings = {crypttabExtraOpts = ["tpm2-device=auto" "token-timeout=10"];};
|
|
||||||
content = {
|
|
||||||
type = "btrfs";
|
|
||||||
extraArgs = ["-L" "nixos" "-f"];
|
|
||||||
subvolumes = {
|
|
||||||
"@root" = {
|
|
||||||
mountpoint = "/";
|
|
||||||
mountOptions = ["subvol=@root" "compress=zstd" "noatime"];
|
|
||||||
};
|
|
||||||
"@home" = {
|
|
||||||
mountpoint = "/home";
|
|
||||||
mountOptions = ["subvol=@home" "compress=zstd" "noatime"];
|
|
||||||
};
|
|
||||||
"@nix" = {
|
|
||||||
mountpoint = "/nix";
|
|
||||||
mountOptions = ["subvol=@nix" "compress=zstd" "noatime"];
|
|
||||||
};
|
|
||||||
"@persist" = {
|
|
||||||
mountpoint = "/persist";
|
|
||||||
mountOptions = ["subvol=@persist" "compress=zstd" "noatime"];
|
|
||||||
};
|
|
||||||
"@log" = {
|
|
||||||
mountpoint = "/var/log";
|
|
||||||
mountOptions = ["subvol=@log" "compress=zstd" "noatime"];
|
|
||||||
};
|
|
||||||
"@snapshots" = {
|
|
||||||
};
|
|
||||||
"@swap" = {
|
|
||||||
mountpoint = "/swap";
|
|
||||||
swap.swapfile.size = "32G";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/persist".neededForBoot = true;
|
|
||||||
fileSystems."/var/log".neededForBoot = true;
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
{config, lib, modulesPath, ...}: {
|
|
||||||
imports = [
|
|
||||||
../options.nix
|
|
||||||
(modulesPath + "/profiles/qemu-guest.nix")
|
|
||||||
];
|
|
||||||
|
|
||||||
vmGuest = true;
|
|
||||||
|
|
||||||
boot = {
|
|
||||||
kernelModules = [ "kvm-intel" ];
|
|
||||||
initrd.availableKernelModules = [ "virtio_pci" "ahci" "xhci_pci" "sr_mod" "virtio_blk" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
networking.useDHCP = lib.mkDefault true;
|
|
||||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
|
||||||
|
|
||||||
fileSystems."/" =
|
|
||||||
{ device = "/dev/disk/by-uuid/723e4a6a-97b9-49ff-999f-806b12ea26b6";
|
|
||||||
fsType = "ext4";
|
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot" =
|
|
||||||
{ device = "/dev/disk/by-uuid/15E6-98FA";
|
|
||||||
fsType = "vfat";
|
|
||||||
options = [ "fmask=0077" "dmask=0077" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices = [ ];
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
{lib, ...}: {
|
|
||||||
options = {
|
|
||||||
has_battery = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Whether the system has a battery.";
|
|
||||||
};
|
|
||||||
|
|
||||||
vmGuest = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Enable VM guest services.";
|
|
||||||
};
|
|
||||||
|
|
||||||
darkMode = lib.mkOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
description = "Enable dark mode for the system.";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,149 +0,0 @@
|
||||||
{pkgs, config, ...}: {
|
|
||||||
imports = [
|
|
||||||
../options.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
# Basic utilities
|
|
||||||
zsh
|
|
||||||
wget
|
|
||||||
curl
|
|
||||||
git
|
|
||||||
vim
|
|
||||||
|
|
||||||
htop
|
|
||||||
|
|
||||||
linux-firmware
|
|
||||||
linuxHeaders
|
|
||||||
];
|
|
||||||
|
|
||||||
nix.settings.experimental-features = [
|
|
||||||
"nix-command"
|
|
||||||
"flakes"
|
|
||||||
];
|
|
||||||
|
|
||||||
system.stateVersion = "25.05";
|
|
||||||
|
|
||||||
boot = {
|
|
||||||
loader.systemd-boot.enable = true;
|
|
||||||
loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
# kernelModules = [];
|
|
||||||
kernelPackages = pkgs.linuxPackages_zen;
|
|
||||||
};
|
|
||||||
|
|
||||||
hardware = {
|
|
||||||
enableAllFirmware = true;
|
|
||||||
amdgpu.initrd.enable = true;
|
|
||||||
graphics = {
|
|
||||||
enable = true;
|
|
||||||
enable32Bit = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
security = {
|
|
||||||
polkit.enable = true;
|
|
||||||
rtkit.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
fonts = {
|
|
||||||
enableDefaultPackages = true;
|
|
||||||
packages = with pkgs; [
|
|
||||||
noto-fonts
|
|
||||||
noto-fonts-cjk-sans
|
|
||||||
noto-fonts-emoji
|
|
||||||
liberation_ttf
|
|
||||||
roboto
|
|
||||||
roboto-mono
|
|
||||||
twitter-color-emoji
|
|
||||||
nerd-fonts.fira-code
|
|
||||||
nerd-fonts.fira-mono
|
|
||||||
unicode-emoji
|
|
||||||
fira-sans
|
|
||||||
font-awesome
|
|
||||||
fira-mono
|
|
||||||
fira-code
|
|
||||||
material-icons
|
|
||||||
source-sans
|
|
||||||
source-code-pro
|
|
||||||
pkgs.nur.repos.redpz.sf-mono
|
|
||||||
];
|
|
||||||
fontconfig = {
|
|
||||||
defaultFonts = {
|
|
||||||
monospace = ["SF Mono" "Fira Mono" "Noto Mono"];
|
|
||||||
serif = ["Liberation Serif" "Noto Serif"];
|
|
||||||
sansSerif = ["Liberation Sans" "Noto Sans" "Roboto"];
|
|
||||||
emoji = ["Twitter Color Emoji" "Noto Emoji"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
networking = {
|
|
||||||
nameservers = ["1.1.1.1" "9.9.9.9"];
|
|
||||||
|
|
||||||
wireless.iwd = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
Settings ={
|
|
||||||
AutoConnect = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
time.timeZone = "Europe/Amsterdam";
|
|
||||||
i18n.defaultLocale = "en_GB.UTF-8";
|
|
||||||
|
|
||||||
console = {
|
|
||||||
font = "Lat2-Terminus16";
|
|
||||||
keyMap = "uk";
|
|
||||||
};
|
|
||||||
|
|
||||||
services = {
|
|
||||||
qemuGuest.enable = config.vmGuest;
|
|
||||||
spice-vdagentd.enable = config.vmGuest;
|
|
||||||
|
|
||||||
connman = {
|
|
||||||
enable = true;
|
|
||||||
wifi.backend = "iwd"; # Use iwd for Wi-Fi management.
|
|
||||||
};
|
|
||||||
|
|
||||||
thermald.enable = true;
|
|
||||||
auto-cpufreq = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
battery = {
|
|
||||||
governor = "powersave"; # Set the CPU governor to powersave.
|
|
||||||
energy_performance_preference = "powersave";
|
|
||||||
turbo = "never";
|
|
||||||
|
|
||||||
enable_threshholds = true;
|
|
||||||
start_threshhold = 50;
|
|
||||||
stop_threshhold = 90;
|
|
||||||
};
|
|
||||||
|
|
||||||
charger = {
|
|
||||||
governor = "performance"; # Set the CPU governor to performance when charging.
|
|
||||||
turbo = "auto";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
pipewire = {
|
|
||||||
enable = true;
|
|
||||||
pulse.enable = true;
|
|
||||||
alsa.enable = true;
|
|
||||||
alsa.support32Bit = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
openssh = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
PasswordAuthentication = true; # Enable password authentication.
|
|
||||||
PermitRootLogin = "yes"; # Allow root login (not recommended for production).
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
libinput.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,31 +0,0 @@
|
||||||
{pkgs, ...}:
|
|
||||||
let
|
|
||||||
user = import ../data/user.nix {};
|
|
||||||
in {
|
|
||||||
users.users.${user.username} = {
|
|
||||||
shell = pkgs.zsh;
|
|
||||||
group = "users";
|
|
||||||
home = "/home/${user.username}";
|
|
||||||
createHome = true;
|
|
||||||
isNormalUser = true;
|
|
||||||
extraGroups = [ "wheel" "input" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.zsh.enable = true;
|
|
||||||
|
|
||||||
services = {
|
|
||||||
greetd = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
default_session = {
|
|
||||||
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd sway";
|
|
||||||
user = "greeter";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.${user.username} = { ... }: {
|
|
||||||
imports = [ ../home ];
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
{lib, ...}: rec {
|
|
||||||
min = a: b: if a < b then a else b;
|
|
||||||
max = a: b: if a > b then a else b;
|
|
||||||
# build list of `len` lists of `n` elements of `xs`
|
|
||||||
windows = with builtins; n: xs: let
|
|
||||||
len = length xs;
|
|
||||||
n' = min n len;
|
|
||||||
# when len = n, there is still one window
|
|
||||||
num-windows = max 0 (len - n' + 1);
|
|
||||||
in
|
|
||||||
genList
|
|
||||||
# for i in 0..len
|
|
||||||
(i: genList
|
|
||||||
# for j in 0..n -> xs[i + j]
|
|
||||||
(j: elemAt xs (i + j))
|
|
||||||
n')
|
|
||||||
num-windows;
|
|
||||||
|
|
||||||
isEmptySet = set: with builtins; length (attrNames set) == 0;
|
|
||||||
}
|
|
|
@ -30,4 +30,4 @@ echo "IP: $VM_IP"
|
||||||
# done
|
# done
|
||||||
|
|
||||||
# Synchronize the NixOS configuration with rsync
|
# Synchronize the NixOS configuration with rsync
|
||||||
sshpass -p "$PASSWORD" rsync -avz new/ "$USER@$VM_IP:/etc/nixos/new"
|
sshpass -p "$PASSWORD" rsync -avz config/ "$USER@$VM_IP:/etc/nixos/"
|
||||||
|
|
Loading…
Reference in a new issue