This commit is contained in:
Gregory Burd 2024-05-02 21:36:17 -04:00
parent b50af7a6e0
commit 7993d5619c
109 changed files with 1498 additions and 5445 deletions

View file

@ -2,6 +2,7 @@ keys:
# Users
- &users:
- &gburd D4BB42BE729AEFBD2EFEBF8822931AF7895E82DF
- &greg D4BB42BE729AEFBD2EFEBF8822931AF7895E82DF
# Hosts
- &hosts:
- &floki age1z2x0g05q2erpux006vwhul70d8akj9avrj67s9p27fm4ce32ly8qt8nllz
@ -16,21 +17,25 @@ creation_rules:
- *floki
pgp:
- *gburd
- *greg
- path_regex: nixos/iso-console/secrets.ya?ml$
key_groups:
- age:
- *iso-console
pgp:
- *gburd
- *greg
- path_regex: nixos/iso-desktop/secrets.ya?ml$
key_groups:
- age:
- *iso-desktop
pgp:
- *gburd
- *greg
- path_regex: nixos/_mixins/secrets.ya?ml$
key_groups:
- age:
- *floki
pgp:
- *gburd
- *greg

View file

@ -52,7 +52,13 @@ nix develop
`nix build` (or shell or run) To build and use packages
`sops` To manage secrets
`sops` To manage secrets, example:
```
export GPG_TTY=$(tty)
gpgconf --reload gpg-agent
EDITOR=vi sops --config .sops.yaml nixos/_mixins/secrets.yaml
```
## Secrets

View file

@ -1,4 +0,0 @@
{ pkgs, ... }:
{
home.packages = [ pkgs.alacritty ];
}

View file

@ -1,17 +0,0 @@
{
imports = [
./deluge.nix
./discord.nix
./firefox.nix
./alacritty.nix
./font.nix
./gtk.nix
# ./kdeconnect.nix
./pavucontrol.nix
./playerctl.nix
./qt.nix
./slack.nix
./sublime-music.nix
./protonmail-bridge.nix
];
}

View file

@ -1,3 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [ deluge ];
}

View file

@ -1,221 +0,0 @@
{ config, pkgs, ... }:
let inherit (config.colorscheme) colors;
in {
home.packages = with pkgs; [ discord discocss ];
home.persistence = {
"/persist/home/gburd".directories = [ ".config/discord" ];
};
xdg.configFile."discocss/custom.css".text = ''
.theme-dark {
--header-primary: #${colors.base05};
--header-secondary: #${colors.base04};
--text-normal: #${colors.base05};
--text-muted: #${colors.base04};
--text-link: #${colors.base08};
--channels-default: #${colors.base05};
--interactive-normal: #${colors.base04};
--interactive-hover: #${colors.base05};
--interactive-active: #${colors.base05};
--interactive-muted: #${colors.base03};
--background-primary: #${colors.base00};
--background-secondary: #${colors.base01};
--background-secondary-alt: #${colors.base02};
--background-tertiary: #${colors.base01};
--background-accent: #${colors.base01};
--background-floating: #${colors.base00};
--background-mobile-primary: var(--background-primary);
--background-mobile-secondary: var(--background-secondary);
--background-modifier-selected: var(--background-secondary);
--scrollbar-thin-thumb: #${colors.base02};
--scrollbar-auto-thumb: #${colors.base02};
--scrollbar-auto-track: #${colors.base01};
--scrollbar-auto-scrollbar-color-thumb: #${colors.base02};
--scrollbar-auto-scrollbar-color-track: #${colors.base01};
--focus-primary: #${colors.base08};
--channeltextarea-background: #${colors.base01};
--deprecated-card-bg: #${colors.base01};
--deprecated-quickswitcher-input-background: #${colors.base01};
--deprecated-quickswitcher-input-placeholder: #${colors.base05};
--background-modifier-hover: var(--background-secondary);
--background-modifier-active: var(--background-secondary-alt);
--activity-card-background: var(--background-secondary);
}
body {
font-family: ${config.fontProfiles.regular.family}, sans serif;
}
.scroller-1Bvpku {
background-color: var(--background-primary);
}
.scroller-2FKFPG {
background-color: var(--background-primary);
}
.headerPlaying-j0WQBV, .headerStreaming-2FjmGz {
background: var(--background-secondary-alt);
}
.theme-dark .headerNormal-T_seeN {
background-color: var(--background-primary);
}
.theme-dark .body-3iLsc4, .theme-dark .footer-1fjuF6 {
background-color: var(--background-primary);
color: var(--header-secondary);
}
.theme-dark .quickMessage-1yeL4E {
background-color: var(--background-secondary);
border-color: var(--background-secondary);
}
.theme-dark .inset-3sAvek {
background-color: var(--background-secondary);
}
.theme-dark .userSettingsAccount-2eMFVR .viewBody-2Qz-jg {
color: var(--header-primary);
}
.theme-dark .modal-yWgWj- {
background-color: var(--background-primary);
}
.theme-dark .footer-2gL1pp {
background-color: var(--background-primary);
}
.theme-dark .lookLink-9FtZy-.colorPrimary-3b3xI6 {
color: var(--header-primary);
}
.theme-dark .notDetected-33MY4s, .theme-light .notDetected-33MY4s {
background-color: var(--background-primary);
}
.theme-dark .notDetected-33MY4s .gameName-1RiWHm, .theme-light .notDetected-33MY4s .gameName-1RiWHm {
color: var(--header-primary);
}
.theme-dark .gameName-1RiWHm {
color: var(--header-primary);
}
.theme-dark .notDetected-33MY4s .lastPlayed-3bQ7Bo, .theme-light .notDetected-33MY4s .lastPlayed-3bQ7Bo {
color: var(--header-primary);
}
.theme-dark .nowPlayingAdd-1Kdmh_, .theme-light .nowPlayingAdd-1Kdmh_ {
color: var(--header-primary);
}
.css-1k00wn6-singleValue {
color: var(--header-primary);
}
.theme-dark .codeRedemptionRedirect-1wVR4b {
color: var(--header-primary);
background-color: var(--background-primary);
border-color: var(--background-primary);
}
.theme-dark .emptyStateHeader-248f_b {
color: var(--header-primary);
}
.theme-dark .emptyStateSubtext-2hdA9c {
color: var(--header-primary);
}
.theme-dark .root-1gCeng {
background-color: var(--background-primary);
}
.theme-dark .date-EErlv4 {
color: var(--header-primary);
}
.theme-dark .content-8bidB ol, .theme-dark .content-8biNdB p, .theme-dark .content-8biNdB ul li {
color: var(--header-primary);
}
.headerName-fajvi9, .headerTagUsernameNoNickname-2_H881 {
color: var(--header-primary);
}
.headerTag-2pZJzA {
color: var(--header-secondary);
}
.theme-dark .activityProfile-2bJRaP .headerText-1HLrL7, .theme-dark .activityUserPopout-2yItg2 .headerText-1HLrL7, .theme-light .activityProfile-2bJRaP .headerText-1HLrL7, .theme-light .activityUserPopout-2yItg2 .headerText-1HLrL7 {
color: var(--header-secondary);
}
.activityName-1IaRLn, .nameNormal-2lqVQK, .nameWrap-3Z4G_9 {
color: var(--header-secondary);
}
.theme-dark .activityProfile-2bJRaP .content-3JfFJh, .theme-dark .activityProfile-2bJRaP .details-38sfDr, .theme-dark .activityProfile-2bJRaP .name-29ETJS, .theme-dark .activityUserPopout-2yItg2 .content-3JfFJh, .theme-dark .activityUserPopout-2yItg2 .details-38sfDr, .theme-dark .activityUserPopout-2yItg2 .name-29ETJS, .theme-light .activityProfile-2bJRaP .content-3JfFJh, .theme-light .activityProfile-2bJRaP .details-38sfDr, .theme-light .activityProfile-2bJRaP .name-29ETJS, .theme-light .activityUserPopout-2yItg2 .content-3JfFJh, .theme-light .activityUserPopout-2yItg2 .details-38sfDr, .theme-light .activityUserPopout-2yItg2 .name-29ETJS {
color: var(--header-secondary);
}
.topSectionPlaying-1J5E4n {
background: var(--background-secondary-alt);
}
.username-3gJmXY {
color: var(--header-primary);
}
.discriminator-xUhQkU {
color: var(--header-secondary);
}
.tabBarItem-1b8RUP.item-PXvHYJ {
color: var(--header-secondary) !important;
border-color: transparent !important;
}
.theme-dark .keybind-KpFkfr {
color: var(--header-primary);
}
.theme-dark .closeButton-1tv5uR {
border-color: var(--header-primary);
}
.barFill-23-gu- {
background: var(--text-link);
}
.focused-3afm-j {
background-color: var(--background-secondary) !important;
color: var(--text-link) !important;
}
.colorDefault-2K3EoJ .checkbox-3s5GYZ, .colorDefault-2K3EoJ .radioSelection-1HmrQS {
color: var(--text-link);
}
.colorDefault-2K3EoJ .checkbox-3s5GYZ {
color: var(--text-link);
}
.colorDefault-2K3EoJ .check-1JyqgN {
color: var(--background-primary);
}
.colorDefault-2K3EoJ.focused-3afm-j .checkbox-3s5GYZ {
color: var(--background-primary) !important;
}
.colorDefault-2K3EoJ.focused-3afm-j .check-1JyqgN {
color: var(--text-link);
}
.wrapper-1BJsBx.selected-bZ3Lue .childWrapper-anI2G9, .wrapper-1BJsBx:hover .childWrapper-anI2G9 {
color: var(--background-primary);
background-color: var(--header-secondary);
}
.panels-j1Uci_ {
background-color: var(--background-primary);
}
.navButton-2gQCx- {
color: var(--interactive-normal);
}
.navButtonActive-1MkytQ {
color: var(--header-primary);
}
.input-3Xdcic {
color: var(--header-primary);
}
.clickable-2ap7je .header-2o-2hj {
background-color: var(--background-primary);
}
.peopleColumn-29fq28 {
background-color: var(--background-tertiary);
}
.theme-dark .outer-1AjyKL.active-1xchHY, .theme-dark .outer-1AjyKL.interactive-3B9GmY:hover {
background-color: var(--background-primary);
}
.theme-dark .popout-38lTFE {
background-color: var(--background-primary);
}
.theme-dark .scrollerThemed-2oenus.themedWithTrack-q8E3vB>.scroller-2FKFPG::-webkit-scrollbar-track-piece {
background-color: var(--background-primary);
border: 4px solid var(--background-secondary);
}
.theme-dark .scrollerThemed-2oenus.themedWithTrack-q8E3vB>.scroller-2FKFPG::-webkit-scrollbar-thumb {
background-color: var(--background-secondary);
border-color: var(--background-secondary);
}
.theme-dark .header-sJd8D7 {
color: var(--text-normal)
}
'';
}

View file

@ -1,3 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [ xdragon ];
}

View file

@ -1,127 +0,0 @@
{ pkgs, ... }:
{
programs.browserpass.enable = true;
programs.firefox = {
enable = true;
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
extraPolicies = {
CaptivePortal = false;
DisableFirefoxStudies = true;
DisablePocket = true;
DisableTelemetry = true;
DisableFirefoxAccounts = false;
NoDefaultBookmarks = true;
OfferToSaveLogins = false;
OfferToSaveLoginsDefault = false;
PasswordManagerEnabled = false;
FirefoxHome = {
Search = true;
Pocket = false;
Snippets = false;
TopSites = false;
Highlights = false;
};
UserMessaging = {
ExtensionRecommendations = false;
SkipOnboarding = true;
};
};
};
profiles.gburd = {
id = 0;
bookmarks = { };
extensions = with pkgs.inputs.firefox-addons; [
# autoplay-no-more
bypass-paywalls-clean
i-dont-care-about-cookies
# kagi-search-for-firefox
clearurls
decentraleyes
disconnect
duckduckgo-privacy-essentials
floccus
ghostery
# https-everywhere
# languagetool
# onetab
privacy-badger
privacy-badger
privacy-redirect
proton-pass
react-devtools
ublock-origin
];
search = {
force = true;
default = "Kagi";
engines = {
"Nix Packages" = {
urls = [{
template = "https://search.nixos.org/packages";
params = [
{ name = "type"; value = "packages"; }
{ name = "query"; value = "{searchTerms}"; }
];
}];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
"NixOS Wiki" = {
urls = [{ template = "https://nixos.wiki/index.php?search={searchTerms}"; }];
iconUpdateURL = "https://nixos.wiki/favicon.png";
updateInterval = 24 * 60 * 60 * 1000;
definedAliases = [ "@nw" ];
};
"Wikipedia (en)".metaData.alias = "@wiki";
"Google".metaData.hidden = true;
"Amazon.com".metaData.hidden = true;
"Bing".metaData.hidden = true;
"eBay".metaData.hidden = true;
};
};
extraConfig = ''
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
user_pref("full-screen-api.ignore-widgets", true);
user_pref("media.ffmpeg.vaapi.enabled", true);
user_pref("media.rdd-vpx.enabled", true);
'';
userChrome = ''
# a css
'';
userContent = ''
# Here too
'';
settings = {
"general.smoothScroll" = true;
"browser.disableResetPrompt" = true;
"browser.download.panel.shown" = true;
"browser.download.useDownloadDir" = false;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
"browser.shell.checkDefaultBrowser" = false;
"browser.shell.defaultBrowserCheckCount" = 1;
"browser.startup.homepage" = "about:blank";
"browser.uiCustomization.state" = ''{"placements":{"widget-overflow-fixed-list":[],"nav-bar":["back-button","forward-button","stop-reload-button","home-button","urlbar-container","downloads-button","library-button","ublock0_raymondhill_net-browser-action","_testpilot-containers-browser-action"],"toolbar-menubar":["menubar-items"],"TabsToolbar":["tabbrowser-tabs","new-tab-button","alltabs-button"],"PersonalToolbar":["import-button","personal-bookmarks"]},"seen":["save-to-pocket-button","developer-button","ublock0_raymondhill_net-browser-action","_testpilot-containers-browser-action"],"dirtyAreaCache":["nav-bar","PersonalToolbar","toolbar-menubar","TabsToolbar","widget-overflow-fixed-list"],"currentVersion":18,"newElementCount":4}'';
"dom.security.https_only_mode" = true;
"identity.fxaccounts.enabled" = false;
"privacy.trackingprotection.enabled" = true;
"signon.rememberSignons" = false;
};
};
};
home = {
persistence = {
# Not persisting is safer, but... <shrug>
"/persist/home/gburd".directories = [ ".mozilla/firefox" ];
};
};
xdg.mimeApps.defaultApplications = {
"text/html" = [ "firefox.desktop" ];
"text/xml" = [ "firefox.desktop" ];
"x-scheme-handler/http" = [ "firefox.desktop" ];
"x-scheme-handler/https" = [ "firefox.desktop" ];
};
}

View file

@ -1,13 +0,0 @@
{ pkgs, ... }: {
fontProfiles = {
enable = true;
monospace = {
family = "FiraCode Nerd Font";
package = pkgs.nerdfonts.override { fonts = [ "FiraCode" ]; };
};
regular = {
family = "Fira Sans";
package = pkgs.fira;
};
};
}

View file

@ -1,41 +0,0 @@
{ pkgs, ... }:
{
imports = [ ];
home.packages = with pkgs; [
# Gnome3 apps
# gnome3.eog # image viewer
# gnome3.evince # pdf reader
# Desktop look & feel
# gnome.gnome-tweak-tool
# Extensions
gnomeExtensions.appindicator
gnomeExtensions.dash-to-dock
];
# environment.gnome.excludePackages = (with pkgs; [
# gnome-photos
# gnome-tour
# ]) ++ (with pkgs.gnome; [
# cheese # webcam tool
# gnome-music
# geary # email reader
# gnome-characters
# yelp # Help view
# gnome-contacts
# gnome-initial-setup
# ]);
# programs.dconf.enable = true;
# environment.systemPackages = with pkgs; [
# gnome.gnome-tweaks
# ]
# };
# dbus.packages = [ pkgs.gnome.dconf ];
# udev.packages = [ pkgs.gnome.gnome-settings-
home.sessionVariables = {
MOZ_ENABLE_WAYLAND = 1;
};
}

View file

@ -1,29 +0,0 @@
{ config, pkgs, inputs, ... }:
let
inherit (inputs.nix-colors.lib-contrib { inherit pkgs; }) gtkThemeFromScheme;
in
rec {
gtk = {
enable = true;
font = {
name = config.fontProfiles.regular.family;
size = 14;
};
theme = {
name = "${config.colorscheme.slug}";
package = gtkThemeFromScheme { scheme = config.colorscheme; };
};
iconTheme = {
name = "Papirus";
package = pkgs.papirus-icon-theme;
};
};
services.xsettingsd = {
enable = true;
settings = {
"Net/ThemeName" = "${gtk.theme.name}";
"Net/IconThemeName" = "${gtk.iconTheme.name}";
};
};
}

View file

@ -1,46 +0,0 @@
{ pkgs, ... }:
let
kdeconnect-cli = "${pkgs.plasma5Packages.kdeconnect-kde}/bin/kdeconnect-cli";
fortune = "${pkgs.fortune}/bin/fortune";
script-fortune = pkgs.writeShellScriptBin "fortune" ''
${kdeconnect-cli} -d $(${kdeconnect-cli} --list-available --id-only) --ping-msg "$(${fortune})"
'';
in
{
# Hide all .desktop, except for org.kde.kdeconnect.settings
xdg.desktopEntries = {
"org.kde.kdeconnect.sms" = {
exec = "";
name = "KDE Connect SMS";
settings.NoDisplay = "true";
};
"org.kde.kdeconnect.nonplasma" = {
exec = "";
name = "KDE Connect Indicator";
settings.NoDisplay = "true";
};
"org.kde.kdeconnect.app" = {
exec = "";
name = "KDE Connect";
settings.NoDisplay = "true";
};
};
services.kdeconnect = {
enable = true;
indicator = true;
};
xdg.configFile = {
"kdeconnect-scripts/fortune.sh".source = "${script-fortune}/bin/fortune";
};
home.persistence = {
"/persist/home/gburd".directories = [ ".config/kdeconnect" ];
};
}

View file

@ -1,3 +0,0 @@
{ pkgs, ... }: {
home.packages = with pkgs; [ pavucontrol ];
}

View file

@ -1,7 +0,0 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [ playerctl ];
services.playerctld = {
enable = true;
};
}

View file

@ -1,11 +0,0 @@
{ pkgs, ... }:
{
qt = {
enable = true;
platformTheme = "gtk";
style = {
name = "gtk2";
package = pkgs.qt6gtk2;
};
};
}

View file

@ -1,4 +0,0 @@
{ pkgs, ... }:
{
home.packages = [ pkgs.slack ];
}

View file

@ -1,6 +0,0 @@
{ pkgs, ... }: {
home.packages = [ pkgs.sublime-music ];
home.persistence = {
"/persist/home/gburd".directories = [ ".config/sublime-music" ];
};
}

View file

@ -1,39 +0,0 @@
{ pkgs, ... }:
{
imports = [
./hyprland-vnc.nix
./gammastep.nix
./kitty.nix
./mako.nix
./qutebrowser.nix
./swayidle.nix
./swaylock.nix
./waybar.nix
./wofi.nix
./zathura.nix
];
xdg.mimeApps.enable = true;
home.packages = with pkgs; [
grim
gtk3 # For gtk-launch
imv
mimeo
primary-xwayland
pulseaudio
slurp
waypipe
wf-recorder
wl-clipboard
wl-mirror
wl-mirror-pick
xdg-utils-spawn-terminal # Patched to open terminal
ydotool
];
home.sessionVariables = {
MOZ_ENABLE_WAYLAND = 1;
QT_QPA_PLATFORM = "wayland";
LIBSEAT_BACKEND = "logind";
};
}

View file

@ -1,13 +0,0 @@
{
services.gammastep = {
enable = true;
provider = "geoclue2";
temperature = {
day = 6000;
night = 4600;
};
settings = {
general.adjustment-method = "wayland";
};
};
}

View file

@ -1,35 +0,0 @@
{ pkgs, lib, config, ... }:
let
enabledMonitors = lib.filter (m: m.enabled) config.monitors;
# A nice VNC script for remotes running hyprland
vncsh = pkgs.writeShellScriptBin "vnc.sh" ''
ssh $1 bash <<'EOF'
pgrep "wayvnc" && exit
export HYPRLAND_INSTANCE_SIGNATURE="$(ls /tmp/hypr/ -lt | head -2 | tail -1 | rev | cut -d ' ' -f1 | rev)"
export WAYLAND_DISPLAY="wayland-1"
ip="$(ip addr show dev tailscale0 | grep 'inet ' | xargs | cut -d ' ' -f2 | cut -d '/' -f1)"
xpos="$(hyprctl monitors -j | jq -r 'sort_by(.x)[-1] | .x + .width')"
${lib.concatLines (lib.forEach enabledMonitors (m: ''
hyprctl output create headless
monitor="$(hyprctl monitors -j | jq -r 'map(.name)[-1]')"
hyprctl keyword monitor $monitor,${toString m.width}x${toString m.height}@${toString m.refreshRate},$(($xpos + ${toString m.x}))x${toString m.y},1
screen -d -m wayvnc -k br -S /tmp/vnc-${m.workspace} -f 60 -o $monitor $ip 590${m.workspace}
sudo iptables -I INPUT -j ACCEPT -p tcp --dport 590${m.workspace}
''))}
EOF
${lib.concatLines (lib.forEach enabledMonitors (m: ''
vncviewer $1::590${m.workspace} &
''))}
wait
'';
in
{
home.packages = with pkgs; [
vncsh
wayvnc
tigervnc
];
}

View file

@ -1,66 +0,0 @@
{ config, pkgs, ... }:
let
inherit (config.colorscheme) colors;
kitty-xterm = pkgs.writeShellScriptBin "xterm" ''
${config.programs.kitty.package}/bin/kitty -1 "$@"
'';
in
{
home = {
packages = [ kitty-xterm ];
sessionVariables = {
TERMINAL = "kitty -1";
};
};
programs.kitty = {
enable = true;
font = {
name = config.fontProfiles.monospace.family;
size = 12;
};
settings = {
shell_integration = "no-rc"; # I prefer to do it manually
scrollback_lines = 4000;
scrollback_pager_history_size = 2048;
window_padding_width = 15;
foreground = "#${colors.base05}";
background = "#${colors.base00}";
selection_background = "#${colors.base05}";
selection_foreground = "#${colors.base00}";
url_color = "#${colors.base04}";
cursor = "#${colors.base05}";
active_border_color = "#${colors.base03}";
inactive_border_color = "#${colors.base01}";
active_tab_background = "#${colors.base00}";
active_tab_foreground = "#${colors.base05}";
inactive_tab_background = "#${colors.base01}";
inactive_tab_foreground = "#${colors.base04}";
tab_bar_background = "#${colors.base01}";
color0 = "#${colors.base00}";
color1 = "#${colors.base08}";
color2 = "#${colors.base0B}";
color3 = "#${colors.base0A}";
color4 = "#${colors.base0D}";
color5 = "#${colors.base0E}";
color6 = "#${colors.base0C}";
color7 = "#${colors.base05}";
color8 = "#${colors.base03}";
color9 = "#${colors.base08}";
color10 = "#${colors.base0B}";
color11 = "#${colors.base0A}";
color12 = "#${colors.base0D}";
color13 = "#${colors.base0E}";
color14 = "#${colors.base0C}";
color15 = "#${colors.base07}";
color16 = "#${colors.base09}";
color17 = "#${colors.base0F}";
color18 = "#${colors.base01}";
color19 = "#${colors.base02}";
color20 = "#${colors.base04}";
color21 = "#${colors.base06}";
};
};
}

View file

@ -1,23 +0,0 @@
{ config, ... }:
let inherit (config.colorscheme) colors kind;
in {
services.mako = {
enable = true;
iconPath =
if kind == "dark" then
"${config.gtk.iconTheme.package}/share/icons/Papirus-Dark"
else
"${config.gtk.iconTheme.package}/share/icons/Papirus-Light";
font = "${config.fontProfiles.regular.family} 12";
padding = "10,20";
anchor = "top-center";
width = 400;
height = 150;
borderSize = 2;
defaultTimeout = 12000;
backgroundColor = "#${colors.base00}dd";
borderColor = "#${colors.base03}dd";
textColor = "#${colors.base05}dd";
layer = "overlay";
};
}

View file

@ -1,177 +0,0 @@
{ config, ... }:
let inherit (config.colorscheme) colors kind;
in
{
home.persistence = {
"/persist/home/misterio".directories = [
".config/qutebrowser/bookmarks"
".config/qutebrowser/greasemonkey"
".local/share/qutebrowser"
];
};
xdg.mimeApps.defaultApplications = {
"text/html" = [ "org.qutebrowser.qutebrowser.desktop" ];
"text/xml" = [ "org.qutebrowser.qutebrowser.desktop" ];
"x-scheme-handler/http" = [ "org.qutebrowser.qutebrowser.desktop" ];
"x-scheme-handler/https" = [ "org.qutebrowser.qutebrowser.desktop" ];
"x-scheme-handler/qute" = [ "org.qutebrowser.qutebrowser.desktop" ];
};
programs.qutebrowser = {
enable = true;
loadAutoconfig = true;
settings = {
editor.command = [ "xdg-open" "{file}" ];
tabs = {
show = "multiple";
position = "left";
tree_tabs = true;
};
fonts = {
default_family = config.fontProfiles.regular.family;
default_size = "12pt";
};
colors = {
webpage = {
preferred_color_scheme = kind;
bg = "#ffffff";
};
completion = {
fg = "#${colors.base05}";
match.fg = "#${colors.base09}";
even.bg = "#${colors.base00}";
odd.bg = "#${colors.base00}";
scrollbar = {
bg = "#${colors.base00}";
fg = "#${colors.base05}";
};
category = {
bg = "#${colors.base00}";
fg = "#${colors.base0D}";
border = {
bottom = "#${colors.base00}";
top = "#${colors.base00}";
};
};
item.selected = {
bg = "#${colors.base02}";
fg = "#${colors.base05}";
match.fg = "#${colors.base05}";
border = {
bottom = "#${colors.base02}";
top = "#${colors.base02}";
};
};
};
contextmenu = {
disabled = {
bg = "#${colors.base01}";
fg = "#${colors.base04}";
};
menu = {
bg = "#${colors.base00}";
fg = "#${colors.base05}";
};
selected = {
bg = "#${colors.base02}";
fg = "#${colors.base05}";
};
};
downloads = {
bar.bg = "#${colors.base00}";
error.fg = "#${colors.base08}";
start = {
bg = "#${colors.base0D}";
fg = "#${colors.base00}";
};
stop = {
bg = "#${colors.base0C}";
fg = "#${colors.base00}";
};
};
hints = {
bg = "#${colors.base0A}";
fg = "#${colors.base00}";
match.fg = "#${colors.base05}";
};
keyhint = {
bg = "#${colors.base00}";
fg = "#${colors.base05}";
suffix.fg = "#${colors.base05}";
};
messages = {
error.bg = "#${colors.base08}";
error.border = "#${colors.base08}";
error.fg = "#${colors.base00}";
info.bg = "#${colors.base00}";
info.border = "#${colors.base00}";
info.fg = "#${colors.base05}";
warning.bg = "#${colors.base0E}";
warning.border = "#${colors.base0E}";
warning.fg = "#${colors.base00}";
};
prompts = {
bg = "#${colors.base00}";
fg = "#${colors.base05}";
border = "#${colors.base00}";
selected.bg = "#${colors.base02}";
};
statusbar = {
caret.bg = "#${colors.base00}";
caret.fg = "#${colors.base0D}";
caret.selection.bg = "#${colors.base00}";
caret.selection.fg = "#${colors.base0D}";
command.bg = "#${colors.base01}";
command.fg = "#${colors.base04}";
command.private.bg = "#${colors.base01}";
command.private.fg = "#${colors.base0E}";
insert.bg = "#${colors.base00}";
insert.fg = "#${colors.base0C}";
normal.bg = "#${colors.base00}";
normal.fg = "#${colors.base05}";
passthrough.bg = "#${colors.base00}";
passthrough.fg = "#${colors.base0A}";
private.bg = "#${colors.base00}";
private.fg = "#${colors.base0E}";
progress.bg = "#${colors.base0D}";
url.error.fg = "#${colors.base08}";
url.fg = "#${colors.base05}";
url.hover.fg = "#${colors.base09}";
url.success.http.fg = "#${colors.base0B}";
url.success.https.fg = "#${colors.base0B}";
url.warn.fg = "#${colors.base0E}";
};
tabs = {
bar.bg = "#${colors.base00}";
even.bg = "#${colors.base00}";
even.fg = "#${colors.base05}";
indicator.error = "#${colors.base08}";
indicator.start = "#${colors.base0D}";
indicator.stop = "#${colors.base0C}";
odd.bg = "#${colors.base00}";
odd.fg = "#${colors.base05}";
pinned.even.bg = "#${colors.base0B}";
pinned.even.fg = "#${colors.base00}";
pinned.odd.bg = "#${colors.base0B}";
pinned.odd.fg = "#${colors.base00}";
pinned.selected.even.bg = "#${colors.base02}";
pinned.selected.even.fg = "#${colors.base05}";
pinned.selected.odd.bg = "#${colors.base02}";
pinned.selected.odd.fg = "#${colors.base05}";
selected.even.bg = "#${colors.base02}";
selected.even.fg = "#${colors.base05}";
selected.odd.bg = "#${colors.base02}";
selected.odd.fg = "#${colors.base05}";
};
};
};
extraConfig = ''
c.tabs.padding = {"bottom": 10, "left": 10, "right": 10, "top": 10}
'';
};
}

View file

@ -1,54 +0,0 @@
{ pkgs, lib, config, ... }:
let
swaylock = "${config.programs.swaylock.package}/bin/swaylock";
pgrep = "${pkgs.procps}/bin/pgrep";
pactl = "${pkgs.pulseaudio}/bin/pactl";
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
swaymsg = "${config.wayland.windowManager.sway.package}/bin/swaymsg";
isLocked = "${pgrep} -x ${swaylock}";
lockTime = 4 * 60; # TODO: configurable desktop (10 min)/laptop (4 min)
# Makes two timeouts: one for when the screen is not locked (lockTime+timeout) and one for when it is.
afterLockTimeout = { timeout, command, resumeCommand ? null }: [
{ timeout = lockTime + timeout; inherit command resumeCommand; }
{ command = "${isLocked} && ${command}"; inherit resumeCommand timeout; }
];
in
{
services.swayidle = {
enable = true;
systemdTarget = "graphical-session.target";
timeouts =
# Lock screen
[{
timeout = lockTime;
command = "${swaylock} -i ${config.wallpaper} --daemonize";
}] ++
# Mute mic
(afterLockTimeout {
timeout = 10;
command = "${pactl} set-source-mute @DEFAULT_SOURCE@ yes";
resumeCommand = "${pactl} set-source-mute @DEFAULT_SOURCE@ no";
}) ++
# Turn off RGB
(lib.optionals config.services.rgbdaemon.enable (afterLockTimeout {
timeout = 20;
command = "systemctl --user stop rgbdaemon";
resumeCommand = "systemctl --user start rgbdaemon";
})) ++
# Turn off displays (hyprland)
(lib.optionals config.wayland.windowManager.hyprland.enable (afterLockTimeout {
timeout = 40;
command = "${hyprctl} dispatch dpms off";
resumeCommand = "${hyprctl} dispatch dpms on";
})) ++
# Turn off displays (sway)
(lib.optionals config.wayland.windowManager.sway.enable (afterLockTimeout {
timeout = 40;
command = "${swaymsg} 'output * dpms off'";
resumeCommand = "${swaymsg} 'output * dpms on'";
}));
};
}

View file

@ -1,43 +0,0 @@
{ config, pkgs, ... }:
let inherit (config.colorscheme) colors;
in
{
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
settings = {
effect-blur = "20x3";
fade-in = 0.1;
font = config.fontProfiles.regular.family;
font-size = 15;
line-uses-inside = true;
disable-caps-lock-text = true;
indicator-caps-lock = true;
indicator-radius = 40;
indicator-idle-visible = true;
indicator-y-position = 1000;
ring-color = "#${colors.base02}";
inside-wrong-color = "#${colors.base08}";
ring-wrong-color = "#${colors.base08}";
key-hl-color = "#${colors.base0B}";
bs-hl-color = "#${colors.base08}";
ring-ver-color = "#${colors.base09}";
inside-ver-color = "#${colors.base09}";
inside-color = "#${colors.base01}";
text-color = "#${colors.base07}";
text-clear-color = "#${colors.base01}";
text-ver-color = "#${colors.base01}";
text-wrong-color = "#${colors.base01}";
text-caps-lock-color = "#${colors.base07}";
inside-clear-color = "#${colors.base0C}";
ring-clear-color = "#${colors.base0C}";
inside-caps-lock-color = "#${colors.base09}";
ring-caps-lock-color = "#${colors.base02}";
separator-color = "#${colors.base02}";
};
};
}

View file

@ -1,392 +0,0 @@
{ outputs, config, lib, pkgs, ... }:
let
# Dependencies
cat = "${pkgs.coreutils}/bin/cat";
cut = "${pkgs.coreutils}/bin/cut";
find = "${pkgs.findutils}/bin/find";
grep = "${pkgs.gnugrep}/bin/grep";
pgrep = "${pkgs.procps}/bin/pgrep";
tail = "${pkgs.coreutils}/bin/tail";
wc = "${pkgs.coreutils}/bin/wc";
xargs = "${pkgs.findutils}/bin/xargs";
timeout = "${pkgs.coreutils}/bin/timeout";
ping = "${pkgs.iputils}/bin/ping";
jq = "${pkgs.jq}/bin/jq";
gamemoded = "${pkgs.gamemode}/bin/gamemoded";
systemctl = "${pkgs.systemd}/bin/systemctl";
journalctl = "${pkgs.systemd}/bin/journalctl";
playerctl = "${pkgs.playerctl}/bin/playerctl";
playerctld = "${pkgs.playerctl}/bin/playerctld";
pavucontrol = "${pkgs.pavucontrol}/bin/pavucontrol";
wofi = "${pkgs.wofi}/bin/wofi";
# Function to simplify making waybar outputs
jsonOutput = name: { pre ? "", text ? "", tooltip ? "", alt ? "", class ? "", percentage ? "" }: "${pkgs.writeShellScriptBin "waybar-${name}" ''
set -euo pipefail
${pre}
${jq} -cn \
--arg text "${text}" \
--arg tooltip "${tooltip}" \
--arg alt "${alt}" \
--arg class "${class}" \
--arg percentage "${percentage}" \
'{text:$text,tooltip:$tooltip,alt:$alt,class:$class,percentage:$percentage}'
''}/bin/waybar-${name}";
in
{
programs.waybar = {
enable = true;
package = pkgs.waybar.overrideAttrs (oa: {
mesonFlags = (oa.mesonFlags or [ ]) ++ [ "-Dexperimental=true" ];
});
systemd.enable = true;
settings = {
primary = {
mode = "dock";
layer = "top";
height = 40;
margin = "6";
position = "top";
modules-left = [
"custom/menu"
] ++ (lib.optionals config.wayland.windowManager.sway.enable [
"sway/workspaces"
"sway/mode"
]) ++ (lib.optionals config.wayland.windowManager.hyprland.enable [
"hyprland/workspaces"
"hyprland/submap"
]) ++ [
"custom/currentplayer"
"custom/player"
];
modules-center = [
"pulseaudio"
"battery"
"clock"
"custom/unread-mail"
"custom/gpg-agent"
];
modules-right = [
"network"
"custom/tailscale-ping"
"custom/gamemode"
# TODO: currently broken for some reason
# "custom/gammastep"
"tray"
"custom/hostname"
];
clock = {
interval = 1;
format = "{:%d/%m %H:%M:%S}";
format-alt = "{:%Y-%m-%d %H:%M:%S %z}";
on-click-left = "mode";
tooltip-format = ''
<big>{:%Y %B}</big>
<tt><small>{calendar}</small></tt>'';
};
pulseaudio = {
format = "{icon} {volume}%";
format-muted = " 0%";
format-icons = {
headphone = "󰋋";
headset = "󰋎";
portable = "";
default = [ "" "" "" ];
};
on-click = pavucontrol;
};
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "󰒳";
deactivated = "󰒲";
};
};
battery = {
bat = "BAT0";
interval = 10;
format-icons = [ "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ];
format = "{icon} {capacity}%";
format-charging = "󰂄 {capacity}%";
onclick = "";
};
"sway/window" = {
max-length = 20;
};
network = {
interval = 3;
format-wifi = " {essid}";
format-ethernet = "󰈁 Connected";
format-disconnected = "";
tooltip-format = ''
{ifname}
{ipaddr}/{cidr}
Up: {bandwidthUpBits}
Down: {bandwidthDownBits}'';
on-click = "";
};
"custom/tailscale-ping" = {
interval = 10;
return-type = "json";
exec =
let
inherit (builtins) concatStringsSep attrNames;
hosts = attrNames outputs.nixosConfigurations;
homeMachine = "merope";
remoteMachine = "alcyone";
in
jsonOutput "tailscale-ping" {
# Build variables for each host
pre = ''
set -o pipefail
${concatStringsSep "\n" (map (host: ''
ping_${host}="$(${timeout} 2 ${ping} -c 1 -q ${host} 2>/dev/null | ${tail} -1 | ${cut} -d '/' -f5 | ${cut} -d '.' -f1)ms" || ping_${host}="Disconnected"
'') hosts)}
'';
# Access a remote machine's and a home machine's ping
text = " $ping_${remoteMachine} / $ping_${homeMachine}";
# Show pings from all machines
tooltip = concatStringsSep "\n" (map (host: "${host}: $ping_${host}") hosts);
};
format = "{}";
on-click = "";
};
"custom/menu" = {
return-type = "json";
exec = jsonOutput "menu" {
text = "";
tooltip = ''$(${cat} /etc/os-release | ${grep} PRETTY_NAME | ${cut} -d '"' -f2)'';
};
on-click = "${wofi} -S drun -x 10 -y 10 -W 25% -H 60%";
};
"custom/hostname" = {
exec = "echo $USER@$HOSTNAME";
};
"custom/unread-mail" = {
interval = 5;
return-type = "json";
exec = jsonOutput "unread-mail" {
pre = ''
count=$(${find} ~/Mail/*/Inbox/new -type f | ${wc} -l)
if ${pgrep} mbsync &>/dev/null; then
status="syncing"
else if [ "$count" == "0" ]; then
status="read"
else
status="unread"
fi
fi
'';
text = "$count";
alt = "$status";
};
format = "{icon} ({})";
format-icons = {
"read" = "󰇯";
"unread" = "󰇮";
"syncing" = "󰁪";
};
};
"custom/gpg-agent" = {
interval = 2;
return-type = "json";
exec =
let gpgCmds = import ../../../cli/gpg-commands.nix { inherit pkgs; };
in
jsonOutput "gpg-agent" {
pre = ''status=$(${gpgCmds.isUnlocked} && echo "unlocked" || echo "locked")'';
alt = "$status";
tooltip = "GPG is $status";
};
format = "{icon}";
format-icons = {
"locked" = "";
"unlocked" = "";
};
on-click = "";
};
"custom/gamemode" = {
exec-if = "${gamemoded} --status | ${grep} 'is active' -q";
interval = 2;
return-type = "json";
exec = jsonOutput "gamemode" {
tooltip = "Gamemode is active";
};
format = " ";
};
"custom/gammastep" = {
interval = 5;
return-type = "json";
exec = jsonOutput "gammastep" {
pre = ''
if unit_status="$(${systemctl} --user is-active gammastep)"; then
status="$unit_status ($(${journalctl} --user -u gammastep.service -g 'Period: ' | ${tail} -1 | ${cut} -d ':' -f6 | ${xargs}))"
else
status="$unit_status"
fi
'';
alt = "\${status:-inactive}";
tooltip = "Gammastep is $status";
};
format = "{icon}";
format-icons = {
"activating" = "󰁪 ";
"deactivating" = "󰁪 ";
"inactive" = "? ";
"active (Night)" = " ";
"active (Nighttime)" = " ";
"active (Transition (Night)" = " ";
"active (Transition (Nighttime)" = " ";
"active (Day)" = " ";
"active (Daytime)" = " ";
"active (Transition (Day)" = " ";
"active (Transition (Daytime)" = " ";
};
on-click = "${systemctl} --user is-active gammastep && ${systemctl} --user stop gammastep || ${systemctl} --user start gammastep";
};
"custom/currentplayer" = {
interval = 2;
return-type = "json";
exec = jsonOutput "currentplayer" {
pre = ''
player="$(${playerctl} status -f "{{playerName}}" 2>/dev/null || echo "No player active" | ${cut} -d '.' -f1)"
count="$(${playerctl} -l | ${wc} -l)"
if ((count > 1)); then
more=" +$((count - 1))"
else
more=""
fi
'';
alt = "$player";
tooltip = "$player ($count available)";
text = "$more";
};
format = "{icon}{}";
format-icons = {
"No player active" = " ";
"Celluloid" = "󰎁 ";
"spotify" = "󰓇 ";
"ncspot" = "󰓇 ";
"qutebrowser" = "󰖟 ";
"firefox" = " ";
"discord" = " 󰙯 ";
"sublimemusic" = " ";
"kdeconnect" = "󰄡 ";
"chromium" = " ";
};
on-click = "${playerctld} shift";
on-click-right = "${playerctld} unshift";
};
"custom/player" = {
exec-if = "${playerctl} status";
exec = ''${playerctl} metadata --format '{"text": "{{title}} - {{artist}}", "alt": "{{status}}", "tooltip": "{{title}} - {{artist}} ({{album}})"}' '';
return-type = "json";
interval = 2;
max-length = 30;
format = "{icon} {}";
format-icons = {
"Playing" = "󰐊";
"Paused" = "󰏤 ";
"Stopped" = "󰓛";
};
on-click = "${playerctl} play-pause";
};
};
};
# Cheatsheet:
# x -> all sides
# x y -> vertical, horizontal
# x y z -> top, horizontal, bottom
# w x y z -> top, right, bottom, left
style = let inherit (config.colorscheme) colors; in /* css */ ''
* {
font-family: ${config.fontProfiles.regular.family}, ${config.fontProfiles.monospace.family};
font-size: 12pt;
padding: 0 8px;
}
.modules-right {
margin-right: -15px;
}
.modules-left {
margin-left: -15px;
}
window#waybar.top {
opacity: 0.95;
padding: 0;
background-color: #${colors.base00};
border: 2px solid #${colors.base0C};
border-radius: 10px;
}
window#waybar.bottom {
opacity: 0.90;
background-color: #${colors.base00};
border: 2px solid #${colors.base0C};
border-radius: 10px;
}
window#waybar {
color: #${colors.base05};
}
#workspaces button {
background-color: #${colors.base01};
color: #${colors.base05};
padding: 5px 1px;
margin: 3px 0;
}
#workspaces button.hidden {
background-color: #${colors.base00};
color: #${colors.base04};
}
#workspaces button.focused,
#workspaces button.active {
background-color: #${colors.base0A};
color: #${colors.base00};
}
#clock {
background-color: #${colors.base0C};
color: #${colors.base00};
padding-left: 15px;
padding-right: 15px;
margin-top: 0;
margin-bottom: 0;
border-radius: 10px;
}
#custom-menu {
background-color: #${colors.base0C};
color: #${colors.base00};
padding-left: 15px;
padding-right: 22px;
margin: 0;
border-radius: 10px;
}
#custom-hostname {
background-color: #${colors.base0C};
color: #${colors.base00};
padding-left: 15px;
padding-right: 18px;
margin-right: 0;
margin-top: 0;
margin-bottom: 0;
border-radius: 10px;
}
#custom-currentplayer {
padding-right: 0;
}
#tray {
color: #${colors.base05};
}
'';
};
}

View file

@ -1,54 +0,0 @@
{ config, ... }:
let
inherit (config) colorscheme;
inherit (colorscheme) colors;
in
{
programs.wezterm = {
enable = true;
colorSchemes = {
"${colorscheme.slug}" = {
foreground = "#${colors.base05}";
background = "#${colors.base00}";
ansi = [
"#${colors.base08}"
"#${colors.base09}"
"#${colors.base0A}"
"#${colors.base0B}"
"#${colors.base0C}"
"#${colors.base0D}"
"#${colors.base0E}"
"#${colors.base0F}"
];
brights = [
"#${colors.base00}"
"#${colors.base01}"
"#${colors.base02}"
"#${colors.base03}"
"#${colors.base04}"
"#${colors.base05}"
"#${colors.base06}"
"#${colors.base07}"
];
cursor_fg = "#${colors.base00}";
cursor_bg = "#${colors.base05}";
selection_fg = "#${colors.base00}";
selection_bg = "#${colors.base05}";
};
};
extraConfig = /* lua */ ''
return {
font = wezterm.font("${config.fontProfiles.monospace.family}"),
font_size = 12.0,
color_scheme = "${colorscheme.slug}",
hide_tab_bar_if_only_one_tab = true,
window_close_confirmation = "NeverPrompt",
set_environment_variables = {
TERM = 'wezterm',
},
}
'';
};
}

View file

@ -1,20 +0,0 @@
--- a/src/wofi.c Mon Feb 22 23:53:57 2021 -0800
+++ b/src/wofi.c Wed Aug 11 13:49:13 2021 -0300
@@ -881,12 +881,15 @@
}
void wofi_term_run(const char* cmd) {
+ char *shell = getenv("SHELL");
+ if (!shell) shell = "sh";
+
if(terminal != NULL) {
- execlp(terminal, terminal, "-e", cmd, NULL);
+ execlp(terminal, terminal, "-e", shell, "-c", cmd, NULL);
}
size_t term_count = sizeof(terminals) / sizeof(char*);
for(size_t count = 0; count < term_count; ++count) {
- execlp(terminals[count], terminals[count], "-e", cmd, NULL);
+ execlp(terminals[count], terminals[count], "-e", shell, "-c", cmd, NULL);
}
fprintf(stderr, "No terminal emulator found please set term in config or use --term\n");
exit(1);

View file

@ -1,25 +0,0 @@
{ config, lib, pkgs, ... }: {
programs.wofi = {
enable = true;
package = pkgs.wofi.overrideAttrs (oa: {
patches = (oa.patches or [ ]) ++ [
./wofi-run-shell.patch # Fix for https://todo.sr.ht/~scoopta/wofi/174
];
});
settings = {
image_size = 48;
columns = 3;
allow_images = true;
insensitive = true;
run-always_parse_args = true;
run-cache_file = "/dev/null";
run-exec_search = true;
};
};
home.packages =
let
inherit (config.programs.password-store) package enable;
in
lib.optional enable (pkgs.pass-wofi.override { pass = package; });
}

View file

@ -1,32 +0,0 @@
{ config, ... }:
let inherit (config.colorscheme) colors;
in {
programs.zathura = {
enable = true;
options = {
selection-clipboard = "clipboard";
font = "${config.fontProfiles.regular.family} 12";
recolor = true;
default-bg = "#${colors.base00}";
default-fg = "#${colors.base01}";
statusbar-bg = "#${colors.base02}";
statusbar-fg = "#${colors.base04}";
inputbar-bg = "#${colors.base00}";
inputbar-fg = "#${colors.base07}";
notification-bg = "#${colors.base00}";
notification-fg = "#${colors.base07}";
notification-error-bg = "#${colors.base00}";
notification-error-fg = "#${colors.base08}";
notification-warning-bg = "#${colors.base00}";
notification-warning-fg = "#${colors.base08}";
highlight-color = "#${colors.base0A}";
highlight-active-color = "#${colors.base0D}";
completion-bg = "#${colors.base01}";
completion-fg = "#${colors.base05}";
completions-highlight-bg = "#${colors.base0D}";
completions-highlight-fg = "#${colors.base07}";
recolor-lightcolor = "#${colors.base00}";
recolor-darkcolor = "#${colors.base06}";
};
};
}

View file

@ -1,56 +0,0 @@
{ inputs, lib, pkgs, config, outputs, ... }:
{
imports = [
inputs.impermanence.nixosModules.home-manager.impermanence
./cli
./nvim
] ++ (builtins.attrValues outputs.homeManagerModules);
nixpkgs = {
overlays = builtins.attrValues outputs.overlays;
config = {
allowUnfree = true;
allowUnfreePredicate = _: true;
};
};
nix = {
package = lib.mkDefault pkgs.nix;
settings = {
experimental-features = [ "nix-command" "flakes" "repl-flake" ];
warn-dirty = false;
};
};
systemd.user.startServices = "sd-switch";
programs = {
home-manager.enable = true;
git.enable = true;
autorandr.enable = true;
};
home = {
username = lib.mkDefault "gburd";
homeDirectory = lib.mkDefault "/home/${config.home.username}";
stateVersion = lib.mkDefault "23.05";
sessionPath = [ "$HOME/.local/bin" ];
sessionVariables = {
FLAKE = "$HOME/ws/nix-config";
};
persistence = {
"/persist/home/gburd" = {
directories = [
"Documents"
"Downloads"
"Pictures"
"Videos"
".local/bin"
];
allowOther = true;
};
};
};
}

View file

@ -1,19 +0,0 @@
{ pkgs, ... }: {
imports = [
../common
../common/gnome-wm
./tty-init.nix
];
home.packages = with pkgs; [
emacs
ungoogled-chromium
gnupg
pinentry
alacritty
];
# dconf
# settings reset org.gnome.desktop.input-sources xkb-options
# gsettings reset org.gnome.desktop.input-sources sources
}

View file

@ -1,19 +0,0 @@
{
programs = {
fish.loginShellInit = ''
if test (tty) = "/dev/tty1"
exec Hyprland &> /dev/null
end
'';
zsh.loginExtra = ''
if [ "$(tty)" = "/dev/tty1" ]; then
exec Hyprland &> /dev/null
fi
'';
zsh.profileExtra = ''
if [ "$(tty)" = "/dev/tty1" ]; then
exec Hyprland &> /dev/null
fi
'';
};
}

View file

@ -1,6 +0,0 @@
{ lib, ... }:
{
imports = [ ./global ];
# Disable impermanence
home.persistence = lib.mkForce { };
}

View file

@ -1,5 +0,0 @@
{
imports = [
./wpa-gui.nix
];
}

View file

@ -1,3 +0,0 @@
{ pkgs, ... }: {
home.packages = [ pkgs.wpa_supplicant_gui ];
}

View file

@ -1,9 +0,0 @@
{
fonts = import ./fonts.nix;
monitors = import ./monitors.nix;
pass-secret-service = import ./pass-secret-service.nix;
rgbdaemon = import ./rgbdaemon.nix;
shellcolor = import ./shellcolor.nix;
wallpaper = import ./wallpaper.nix;
xpo = import ./xpo.nix;
}

View file

@ -1,32 +0,0 @@
{ lib, config, ... }:
let
mkFontOption = kind: {
family = lib.mkOption {
type = lib.types.str;
default = null;
description = "Family name for ${kind} font profile";
example = "Fira Code";
};
package = lib.mkOption {
type = lib.types.package;
default = null;
description = "Package for ${kind} font profile";
example = "pkgs.fira-code";
};
};
cfg = config.fontProfiles;
in
{
options.fontProfiles = {
enable = lib.mkEnableOption "Whether to enable font profiles";
monospace = mkFontOption "monospace";
regular = mkFontOption "regular";
};
config = lib.mkIf cfg.enable {
fonts.fontconfig.enable = true;
home.packages = [ cfg.monospace.package cfg.regular.package ];
};
}

View file

@ -1,57 +0,0 @@
{ lib, config, ... }:
let
inherit (lib) mkOption types;
in
{
options.monitors = mkOption {
type = types.listOf (types.submodule {
options = {
name = mkOption {
type = types.str;
example = "DP-1";
};
primary = mkOption {
type = types.bool;
default = false;
};
width = mkOption {
type = types.int;
example = 1920;
};
height = mkOption {
type = types.int;
example = 1080;
};
refreshRate = mkOption {
type = types.int;
default = 60;
};
x = mkOption {
type = types.int;
default = 0;
};
y = mkOption {
type = types.int;
default = 0;
};
enabled = mkOption {
type = types.bool;
default = true;
};
workspace = mkOption {
type = types.nullOr types.str;
default = null;
};
};
});
default = [ ];
};
config = {
assertions = [{
assertion = ((lib.length config.monitors) != 0) ->
((lib.length (lib.filter (m: m.primary) config.monitors)) == 1);
message = "Exactly one monitor must be set to primary.";
}];
};
}

View file

@ -1,130 +0,0 @@
{ lib, pkgs, config, ... }:
with lib;
let cfg = config.services.rgbdaemon;
in {
options.services.rgbdaemon = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enable rgbdaemon
'';
};
package = mkOption {
type = types.package;
default = pkgs.rgbdaemon;
};
interval = mkOption {
type = types.float;
default = 0.8;
description = ''
Daemon main loop interval
'';
};
daemons = {
mute = mkOption {
type = types.bool;
default = false;
description = ''
Enable mute button daemon
'';
};
swayLock = mkOption {
type = types.bool;
default = false;
description = ''
Enable swaylock status daemon
'';
};
player = mkOption {
type = types.bool;
default = false;
description = ''
Enable media player status daemon
'';
};
};
colors =
let
mkColorOption = name: {
inherit name;
value = mkOption {
type = types.strMatching "[a-fA-F0-9]{6}";
description = "${name} color.";
default = "ffffff";
};
};
in
listToAttrs (map mkColorOption [
"background"
"foreground"
"secondary"
"tertiary"
"quaternary"
]);
mouse = {
device = mkOption {
type = types.path;
description = "Mouse device cmd path";
default = "/dev/input/ckb2/cmd";
};
dpi = mkOption {
type = types.int;
description = "Mouse DPI";
default = 750;
};
highlighted = mkOption {
type = types.listOf types.str;
description = "Always highlighted mouse keys";
default = [ ];
};
};
keyboard = {
device = mkOption {
type = types.path;
description = "Mouse device cmd path";
default = "/dev/input/ckb1/cmd";
};
highlighted = mkOption {
type = types.listOf types.str;
description = "Always highlighted keyboard keys";
default = [ ];
};
};
};
config = mkIf cfg.enable {
xdg.configFile."rgbdaemon.conf" = {
text = ''
DAEMON_INTERVAL=${lib.strings.floatToString cfg.interval}
KEYBOARD_DEVICE=${cfg.keyboard.device}
MOUSE_DEVICE=${cfg.mouse.device}
KEYBOARD_HIGHLIGHTED=${
lib.concatStringsSep "," cfg.keyboard.highlighted
}
MOUSE_HIGHLIGHTED=${lib.concatStringsSep "," cfg.mouse.highlighted}
COLOR_BACKGROUND=${cfg.colors.background}
COLOR_FOREGROUND=${cfg.colors.foreground}
COLOR_SECONDARY=${cfg.colors.secondary}
COLOR_TERTIARY=${cfg.colors.tertiary}
COLOR_QUATERNARY=${cfg.colors.quaternary}
ENABLE_SWAY_LOCK=${toString cfg.daemons.swayLock}
ENABLE_MUTE=${toString cfg.daemons.mute}
ENABLE_PLAYER=${toString cfg.daemons.player}
'';
onChange = ''
${pkgs.procps}/bin/pkill -u $USER -f -SIGHUP rgbdaemon || true
'';
};
systemd.user.services.rgbdaemon = {
Unit = { Description = "Misterio RGB Daemon"; };
Service = {
ExecStart = "${cfg.package}/bin/rgbdaemon";
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
Restart = "always";
};
Install = { WantedBy = [ "graphical-session.target" ]; };
};
};
}

View file

@ -1,110 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.programs.shellcolor;
package = pkgs.shellcolord;
renderSetting = key: value: ''
${key}=${value}
'';
renderSettings = settings:
lib.concatStrings (lib.mapAttrsToList renderSetting settings);
in
{
options.programs.shellcolor = {
enable = lib.mkEnableOption "shellcolor";
enableBashIntegration = lib.mkOption {
default = true;
type = lib.types.bool;
description = ''
Whether to enable Bash integration.
'';
};
enableZshIntegration = lib.mkOption {
default = true;
type = lib.types.bool;
description = ''
Whether to enable Zsh integration.
'';
};
enableFishIntegration = lib.mkOption {
default = true;
type = lib.types.bool;
description = ''
Whether to enable Fish integration.
'';
};
enableBashSshFunction = lib.mkOption {
default = false;
type = lib.types.bool;
description = ''
Whether to enable SSH integration by replacing ssh with a bash function.
'';
};
enableFishSshFunction = lib.mkOption {
default = false;
type = lib.types.bool;
description = ''
Whether to enable SSH integration by replacing ssh with a fish function.
'';
};
settings = lib.mkOption {
type = lib.types.attrsOf lib.types.str;
default = { };
example = lib.literalExpression ''
{
base00 = "000000";
base05 = "ffffff";
}
'';
description = ''
Options for shellcolord config file. Colors (without leading #)
from base00 until base0F.
'';
};
};
config = lib.mkIf cfg.enable {
home.packages = [ package ];
xdg.configFile."shellcolor.conf" = lib.mkIf (cfg.settings != { }) {
text = renderSettings cfg.settings;
onChange = ''
timeout 1 ${package}/bin/shellcolor apply || true
'';
};
programs.bash.initExtra = lib.mkIf cfg.enableBashIntegration
(lib.mkBefore ''
${package}/bin/shellcolord $$ & disown
${lib.optionalString cfg.enableBashSshFunction ''
ssh() {
${package}/bin/shellcolor disable $$
command ssh "$@"
${package}/bin/shellcolor enable $$
${package}/bin/shellcolor apply $$
}
''}
'');
programs.zsh.initExtra = lib.mkIf cfg.enableZshIntegration (lib.mkBefore ''
${package}/bin/shellcolord $$ & disown
'');
programs.fish.interactiveShellInit = lib.mkIf cfg.enableFishIntegration
(lib.mkBefore ''
${package}/bin/shellcolord $fish_pid & disown
'');
programs.fish.functions.ssh = lib.mkIf cfg.enableFishSshFunction ''
${package}/bin/shellcolor disable $fish_pid
command ssh $argv
${package}/bin/shellcolor enable $fish_pid
${package}/bin/shellcolor apply $fish_pid
'';
};
}

View file

@ -1,12 +0,0 @@
{ lib, ... }:
let inherit (lib) types mkOption;
in
{
options.wallpaper = mkOption {
type = types.path;
default = "";
description = ''
Wallpaper path
'';
};
}

View file

@ -1,25 +0,0 @@
{ config, pkgs, lib, ... }:
let
cfg = config.programs.xpo;
package = pkgs.xpo;
in
{
options.programs.xpo = {
enable = lib.mkEnableOption "xpo";
defaultServer = lib.mkOption {
default = null;
type = with lib.types; nullOr str;
description = ''
Default SSH server/endpoint to use when tunneling.
'';
};
};
config = lib.mkIf cfg.enable {
home = {
packages = [ package ];
sessionVariables.XPO_SERVER = lib.optionalString (cfg.defaultServer != null) cfg.defaultServer;
};
};
}

View file

@ -1,4 +0,0 @@
{
openrgb = import ./openrgb.nix;
satisfactory = import ./satisfactory.nix;
}

View file

@ -1,37 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.hardware.openrgb;
in {
options.hardware.openrgb = {
enable = mkEnableOption "OpenRGB";
package = mkOption {
type = types.package;
default = pkgs.openrgb;
defaultText = "pkgs.openrgb";
description = ''
The package implementing OpenRGB.
'';
};
};
config = mkIf cfg.enable {
boot.kernelModules = [ "v4l2loopback" "i2c-dev" "i2c-piix4" ];
environment.systemPackages = [ cfg.package ];
services.udev.packages = [ cfg.package ];
systemd.services.openrgb = {
description = "OpenRGB Daemon";
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${cfg.package}/bin/openrgb --server";
Restart = "on-failure";
};
};
};
meta = {
maintainers = with lib.maintainers; [ misterio77 ];
};
}

View file

@ -1,78 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
let cfg = config.services.satisfactory-server;
in {
options.services.satisfactory-server = {
enable = mkEnableOption "Satisfactory Dedicated Server";
steamcmdPackage = mkOption {
type = types.package;
default = pkgs.steamcmd;
defaultText = "pkgs.steamcmd";
description = ''
The package implementing SteamCMD
'';
};
dataDir = mkOption {
type = types.path;
description = "Directory to store game server";
default = "/var/lib/satisfactory";
};
launchOptions = mkOption {
type = types.str;
description = "Launch options to use.";
default = "";
};
openFirewall = mkOption {
type = types.bool;
default = false;
description = ''
Whether to open ports in the firewall for the server
'';
};
};
config = mkIf cfg.enable {
systemd.services.satisfactory-server =
let
steamcmd = "${cfg.steamcmdPackage}/bin/steamcmd";
steam-run = "${pkgs.steam-run}/bin/steam-run";
in
{
description = "Satisfactory Dedicated Server";
wantedBy = [ "multi-user.target" ];
after = [ "network.target" ];
serviceConfig = {
TimeoutSec = "15min";
ExecStart =
"${steam-run} ${cfg.dataDir}/FactoryServer.sh ${cfg.launchOptions}";
Restart = "always";
User = "satisfactory";
WorkingDirectory = cfg.dataDir;
};
preStart = ''
${steamcmd} +force_install_dir "${cfg.dataDir}" +login anonymous +app_update 1690800 validate +quit
'';
};
users.users.satisfactory = {
description = "Satisfactory server service user";
home = cfg.dataDir;
createHome = true;
isSystemUser = true;
group = "satisfactory";
};
users.groups.satisfactory = { };
networking.firewall =
mkIf cfg.openFirewall { allowedUDPPorts = [ 15777 7777 15000 ]; };
};
}

View file

@ -1,16 +0,0 @@
_:
{
# Enable acme for usage with nginx vhosts
security.acme = {
defaults.email = "greg+acme@burd.me";
acceptTerms = true;
};
environment.persistence = {
"/persist" = {
directories = [
"/var/lib/acme"
];
};
};
}

View file

@ -1,29 +0,0 @@
{ config, inputs, pkgs, lib, ... }:
let
inherit (config.networking) hostName;
# Only enable auto upgrade if current config came from a clean tree
# This avoids accidental auto-upgrades when working locally.
isClean = inputs.self ? rev;
in
{
system.autoUpgrade = {
enable = isClean;
dates = "hourly";
flags = [
"--refresh"
];
flake = "git://github.com/gburd/nix-config?ref=release-${hostName}";
};
# Only run if current config (self) is older than the new one.
systemd.services.nixos-upgrade = lib.mkIf config.system.autoUpgrade.enable {
serviceConfig.ExecCondition = lib.getExe (
pkgs.writeShellScriptBin "check-date" ''
lastModified() {
nix flake metadata "$1" --refresh --json | ${lib.getExe pkgs.jq} '.lastModified'
}
test "$(lastModified "${config.system.autoUpgrade.flake}")" -gt "$(lastModified "self")"
''
);
};
}

View file

@ -1,67 +0,0 @@
# This file (and the global directory) holds config used on all hosts
{ inputs, outputs, ... }: {
imports = [
inputs.home-manager.nixosModules.home-manager
./acme.nix
./auto-upgrade.nix
./fish.nix
./locale.nix
./nix.nix
./openssh.nix
./optin-persistence.nix
./podman.nix
./sops.nix
# ./ssh-serve-store.nix
./steam-hardware.nix
./systemd-initrd.nix
./tailscale.nix
] ++ (builtins.attrValues outputs.nixosModules);
home-manager.extraSpecialArgs = { inherit inputs outputs; };
nixpkgs = {
overlays = builtins.attrValues outputs.overlays;
config = {
# Disable if you don't want unfree packages
allowUnfree = true;
# Accept the joypixels license
joypixels.acceptLicense = true;
};
};
# Fix for qt6 plugins
# TODO: maybe upstream this?
environment.profileRelativeSessionVariables = {
QT_PLUGIN_PATH = [ "/lib/qt-6/plugins" ];
};
environment.enableAllTerminfo = true;
hardware.enableRedistributableFirmware = true;
networking.domain = "burd.me";
# Increase open file limit for sudoers
security.pam.loginLimits = [
{
domain = "@wheel";
item = "nofile";
type = "soft";
value = "524288";
}
{
domain = "@wheel";
item = "nofile";
type = "hard";
value = "1048576";
}
];
# Only install the docs I use
documentation.enable = true;
documentation.nixos.enable = false;
documentation.man.enable = true;
documentation.info.enable = false;
documentation.doc.enable = false;
}

View file

@ -1,10 +0,0 @@
{
programs.fish = {
enable = true;
vendor = {
completions.enable = true;
config.enable = true;
functions.enable = true;
};
};
}

View file

@ -1,22 +0,0 @@
{ lib, ... }: {
# Select internationalisation properties.
i18n = {
defaultLocale = lib.mkDefault "en_US.UTF-8";
extraLocaleSettings = {
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
supportedLocales = lib.mkDefault [
"en_US.UTF-8/UTF-8"
];
};
time.timeZone = lib.mkDefault "America/New_York";
}

View file

@ -1,33 +0,0 @@
{ inputs, lib, ... }:
{
nix = {
settings = {
# substituters = [
# "https://cache.burd.me"
# ];
# trusted-public-keys = [
# "cache.burd.me:kszZ/NSwE/TjhOcPPQ16IuUiuRSisdiIwhKZCxguaWg="
# ];
trusted-users = [ "root" "@wheel" ];
auto-optimise-store = lib.mkDefault true;
experimental-features = [ "nix-command" "flakes" "repl-flake" ];
warn-dirty = false;
system-features = [ "kvm" "big-parallel" "nixos-test" ];
flake-registry = ""; # Disable global flake registry
};
gc = {
automatic = true;
dates = "weekly";
# Keep the last 3 generations
options = "--delete-older-than +3";
};
# Add each flake input as a registry
# To make nix3 commands consistent with the flake
registry = lib.mapAttrs (_: value: { flake = value; }) inputs;
# Add nixpkgs input to NIX_PATH
# This lets nix2 commands still use <nixpkgs>
nixPath = [ "nixpkgs=${inputs.nixpkgs.outPath}" ];
};
}

View file

@ -1,44 +0,0 @@
{ outputs, lib, config, ... }:
let
hosts = outputs.nixosConfigurations;
pubKey = host: ../../${host}/ssh_host_ed25519_key.pub;
# Sops needs acess to the keys before the persist dirs are even mounted; so
# just persisting the keys won't work, we must point at /persist
hasOptinPersistence = config.environment.persistence ? "/persist";
in
{
services.openssh = {
enable = true;
settings = {
# Harden
PasswordAuthentication = false;
PermitRootLogin = "no";
# Automatically remove stale sockets
StreamLocalBindUnlink = "yes";
# Allow forwarding ports to everywhere
GatewayPorts = "clientspecified";
};
hostKeys = [{
path = "${lib.optionalString hasOptinPersistence "/persist"}/etc/ssh/ssh_host_ed25519_key";
type = "ed25519";
}];
};
programs.ssh = {
# Each hosts public key
knownHosts = builtins.mapAttrs
(name: _: {
publicKeyFile = pubKey name;
# extraHostNames =
# (lib.optional (name == hostName) "localhost") ++ # Alias for localhost if it's the same host
# (lib.optionals (name == gitHost) [ "burd.me" "git.burd.me" ]);
})
hosts;
};
# Passwordless sudo when SSH'ing with keys
security.pam.enableSSHAgentAuth = true;
}

View file

@ -1,18 +0,0 @@
{ config, ... }:
let
dockerEnabled = config.virtualisation.docker.enable;
in
{
virtualisation.podman = {
enable = true;
dockerCompat = !dockerEnabled;
dockerSocket.enable = !dockerEnabled;
defaultNetwork.settings.dns_enabled = true;
};
environment.persistence = {
"/persist".directories = [
"/var/lib/containers"
];
};
}

View file

@ -1,14 +0,0 @@
_:
{
nix = {
sshServe = {
enable = true;
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAz0dIbaTuAihil/si33MQSFH5yBFoupwnV5gcq2CCbO nix-ssh"
];
protocol = "ssh";
write = true;
};
settings.trusted-users = [ "nix-ssh" ];
};
}

View file

@ -1,3 +0,0 @@
{
hardware.steam-hardware.enable = true;
}

View file

@ -1,3 +0,0 @@
{
boot.initrd.systemd.enable = true;
}

View file

@ -1,15 +0,0 @@
{ lib, ... }:
{
services.tailscale = {
enable = true;
useRoutingFeatures = lib.mkDefault "client";
};
networking.firewall = {
checkReversePath = "loose";
allowedUDPPorts = [ 41641 ]; # Facilitate firewall punching
};
environment.persistence = {
"/persist".directories = [ "/var/lib/tailscale" ];
};
}

View file

@ -1,16 +0,0 @@
{ pkgs, ... }:
{
hardware.ckb-next = {
enable = true;
};
systemd.services.ckb-next-resume = {
description = "Restart ckb-next after hibernation";
after = [ "suspend.target" ];
wantedBy = [ "suspend.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.systemd}/bin/systemctl --no-block restart ckb-next.service";
};
};
}

View file

@ -1,5 +0,0 @@
{
virtualisation.docker = {
enable = true;
};
}

View file

@ -1,83 +0,0 @@
# This file contains an ephemeral btrfs root configuration
# TODO: perhaps partition using disko in the future
{ lib, config, ... }:
let
hostname = config.networking.hostName;
wipeScript = ''
mkdir /tmp -p
MNTPOINT=$(mktemp -d)
(
mount -t btrfs -o subvol=/ /dev/disk/by-label/${hostname} "$MNTPOINT"
trap 'umount "$MNTPOINT"' EXIT
echo "Creating needed directories"
mkdir -p "$MNTPOINT"/persist/var/{log,lib/{nixos,systemd}}
echo "Cleaning root subvolume"
btrfs subvolume list -o "$MNTPOINT/root" | cut -f9 -d ' ' |
while read -r subvolume; do
btrfs subvolume delete "$MNTPOINT/$subvolume"
done && btrfs subvolume delete "$MNTPOINT/root"
echo "Restoring blank subvolume"
btrfs subvolume snapshot "$MNTPOINT/root-blank" "$MNTPOINT/root"
)
'';
phase1Systemd = config.boot.initrd.systemd.enable;
in
{
boot.initrd = {
supportedFilesystems = [ "btrfs" ];
postDeviceCommands = lib.mkIf (!phase1Systemd) (lib.mkBefore wipeScript);
systemd.services.restore-root = lib.mkIf phase1Systemd {
description = "Rollback btrfs rootfs";
wantedBy = [ "initrd.target" ];
requires = [
"dev-disk-by\\x2dlabel-${hostname}.device"
];
after = [
"dev-disk-by\\x2dlabel-${hostname}.device"
"systemd-cryptsetup@${hostname}.service"
];
before = [ "sysroot.mount" ];
unitConfig.DefaultDependencies = "no";
serviceConfig.Type = "oneshot";
script = wipeScript;
};
};
fileSystems = {
"/" = {
device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs";
options = [ "subvol=root" "compress=zstd" ];
};
"/nix" = {
device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs";
options = [ "subvol=nix" "noatime" "compress=zstd" ];
};
"/persist" = {
device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs";
options = [ "subvol=persist" "compress=zstd" ];
neededForBoot = true;
};
"/logs" = {
device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs";
options = [ "subvol=logs" "noatime" "compress=zstd" ];
neededForBoot = true;
};
"/swap" = {
device = "/dev/disk/by-label/${hostname}";
fsType = "btrfs";
options = [ "subvol=swap" "noatime" ];
};
};
}

View file

@ -1,5 +0,0 @@
{
services.fail2ban = {
enable = true;
};
}

View file

@ -1,16 +0,0 @@
{
programs.gamemode = {
enable = true;
settings = {
general = {
softrealtime = "on";
inhibit_screensaver = 1;
};
gpu = {
apply_gpu_optimisations = "accept-responsibility";
gpu_device = 0;
amd_performance_level = "high";
};
};
};
}

View file

@ -1,35 +0,0 @@
{ pkgs, ... }:
{
services = {
xserver = {
enable = true;
dpi = 180;
displayManager.gdm = {
enable = true;
wayland = true;
autoSuspend = false;
};
desktopManager.gnome = {
enable = true;
};
excludePackages = [ pkgs.xterm ];
};
geoclue2.enable = true;
gnome.games.enable = true;
};
networking.networkmanager.enable = true;
services.avahi.enable = true;
# console.font = "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz";
# environment.variables = {
# GDK_SCALE = "2";
# GDK_DPI_SCALE = "0.5";
# _JAVA_OPTIONS = "-Dsun.java2d.uiScale=2";
# };
# Enable CUPS to print documents.
services.printing.enable = true;
services.avahi.nssmdns = true;
# for a WiFi printer
services.avahi.openFirewall = true;
}

View file

@ -1,6 +0,0 @@
{
boot.kernel.sysctl = {
# Disable VDSO on 32-bits to avoid league of legends kick
"abi.vsyscall32" = 0;
};
}

View file

@ -1,13 +0,0 @@
{ pkgs, ... }:
{
services.mysql = {
enable = true;
package = pkgs.mariadb;
};
environment.persistence = {
"/persist".directories = [
"/var/lib/mysql"
];
};
}

View file

@ -1,47 +0,0 @@
{ lib, config, ... }:
let
inherit (config.networking) hostName;
in
{
services = {
nginx = {
enable = true;
recommendedTlsSettings = true;
recommendedProxySettings = true;
recommendedGzipSettings = true;
recommendedOptimisation = true;
clientMaxBodySize = "300m";
virtualHosts."${hostName}.burd.me" = {
default = true;
forceSSL = true;
enableACME = true;
locations."/metrics" = {
proxyPass = "http://localhost:${toString config.services.prometheus.exporters.nginxlog.port}";
};
};
};
prometheus.exporters.nginxlog = {
enable = true;
group = "nginx";
settings.namespaces = [{
name = "filelogger";
source.files = [ "/var/log/nginx/access.log" ];
format = "$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\"";
}];
};
uwsgi = {
enable = true;
user = "nginx";
group = "nginx";
plugins = [ "cgi" ];
instance = {
type = "emperor";
vassals = lib.mkBefore { };
};
};
};
networking.firewall.allowedTCPPorts = [ 80 443 ];
}

View file

@ -1,30 +0,0 @@
{
services = {
xserver = {
enable = true;
desktopManager.pantheon = {
enable = true;
};
displayManager.lightdm = {
enable = true;
greeters.pantheon.enable = true;
};
};
pantheon = {
apps.enable = true;
};
geoclue2.enable = true;
};
programs = {
pantheon-tweaks.enable = true;
};
# Fix shutdown taking a long time
# https://gist.github.com/worldofpeace/27fcdcb111ddf58ba1227bf63501a5fe
systemd.extraConfig = ''
DefaultTimeoutStopSec=10s
DefaultTimeoutStartSec=10s
'';
services.avahi.enable = false;
networking.networkmanager.enable = false;
}

View file

@ -1,9 +0,0 @@
_: {
services.postgresql.enable = true;
environment.persistence = {
"/persist".directories = [
"/var/lib/postgresql"
];
};
}

View file

@ -1,8 +0,0 @@
{
# https://github.com/starcitizen-lug/information-howtos/wiki
# Avoids crashes
boot.kernel.sysctl = {
"vm.max_map_count" = 16777216;
};
}

View file

@ -1,9 +0,0 @@
{
boot.loader = {
systemd-boot = {
enable = true;
consoleMode = "max";
};
efi.canTouchEfiVariables = true;
};
}

View file

@ -1,6 +0,0 @@
{
imports = [ ../global/tailscale.nix ];
services.tailscale = {
useRoutingFeatures = "both";
};
}

View file

@ -1,66 +0,0 @@
{ config, ... }: {
# Wireless secrets stored through sops
sops.secrets.wireless = {
sopsFile = ../secrets.yaml;
neededForUsers = true;
};
networking.wireless = {
enable = true;
fallbackToWPA2 = false;
# Declarative
environmentFile = config.sops.secrets.wireless.path;
networks = {
"JVGCLARO" = {
psk = "@JVGCLARO@";
};
"Kartodrorealm" = {
psk = "@KARTODROREALM@";
};
"Kartodrorealm-5G" = {
psk = "@KARTODROREALM@";
};
"Marcos_2.4Ghz" = {
pskRaw = "@MARCOS_24@";
};
"Marcos_5Ghz" = {
pskRaw = "@MARCOS_50@";
};
"Misterio" = {
pskRaw = "@MISTERIO@";
};
"VIVOFIBRA-FC41-5G" = {
pskRaw = "@MARCOS_SANTOS_5G@";
};
"zoocha" = {
pskRaw = "@ZOOCHA@";
};
"eduroam" = {
auth = ''
key_mgmt=WPA-EAP
pairwise=CCMP
auth_alg=OPEN
eap=PEAP
identity="10856803@usp.br"
password="@EDUROAM@"
phase2="auth=MSCHAPV2"
'';
};
};
# Imperative
allowAuxiliaryImperativeNetworks = true;
userControlled = {
enable = true;
group = "network";
};
extraConfig = ''
update_config=1
'';
};
# Ensure group exists
users.groups.network = { };
systemd.services.wpa_supplicant.preStart = "touch /etc/wpa_supplicant.conf";
}

View file

@ -1,5 +0,0 @@
{
programs.wireshark = {
enable = true;
};
}

View file

@ -1,7 +0,0 @@
{
services.xserver.serverFlagsSection = ''
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
'';
}

View file

@ -1,4 +0,0 @@
{ lib, ... }:
{
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View file

@ -1,9 +0,0 @@
{ lib, ... }:
{
imports = [
../_mixins/services/bluetooth.nix
../_mixins/services/pipewire.nix
];
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
}

View file

@ -1,76 +0,0 @@
{ inputs, ... }:
let
addPatches = pkg: patches: pkg.overrideAttrs (oldAttrs: {
patches = (oldAttrs.patches or [ ]) ++ patches;
});
in
{
# For every flake input, aliases 'pkgs.inputs.${flake}' to
# 'inputs.${flake}.packages.${pkgs.system}' or
# 'inputs.${flake}.legacyPackages.${pkgs.system}'
flake-inputs = final: _: {
inputs = builtins.mapAttrs
(_: flake:
let
legacyPackages = (flake.legacyPackages or { }).${final.system} or { };
packages = (flake.packages or { }).${final.system} or { };
in
if legacyPackages != { } then legacyPackages else packages
)
inputs;
};
# Adds my custom packages
additions = final: prev: import ../pkgs { pkgs = final; } // {
formats = prev.formats // import ../pkgs/formats { pkgs = final; };
vimPlugins = prev.vimPlugins // final.callPackage ../pkgs/vim-plugins { };
};
# Modifies existing packages
modifications = final: prev: {
vimPlugins = prev.vimPlugins // {
vim-numbertoggle = addPatches prev.vimPlugins.vim-numbertoggle [ ./vim-numbertoggle-command-mode.patch ];
};
passExtensions = prev.passExtensions // {
# https://github.com/tadfisher/pass-otp/pull/173
pass-otp = addPatches prev.passExtensions.pass-otp [ ./pass-otp-fix-completion.patch ];
};
# https://github.com/mdellweg/pass_secret_service/pull/37
pass-secret-service = addPatches prev.pass-secret-service [ ./pass-secret-service-native.diff ];
# https://github.com/NixOS/nix/issues/5567#issuecomment-1193259926
# nix = addPatches prev.nix [ ./nix-make-installables-expr-context.patch ];
# xdg-utils-spawn-terminal = addPatches prev.xdg-utils [ ./xdg-open-spawn-terminal.diff ];
xdg-utils-spawn-terminal = prev.xdg-utils;
pfetch = prev.pfetch.overrideAttrs (oldAttrs: {
version = "unstable-2021-12-10";
src = final.fetchFromGitHub {
owner = "dylanaraps";
repo = "pfetch";
rev = "a906ff89680c78cec9785f3ff49ca8b272a0f96b";
sha256 = "sha256-9n5w93PnSxF53V12iRqLyj0hCrJ3jRibkw8VK3tFDvo=";
};
# Add term option, rename de to desktop, add scheme option
patches = (oldAttrs.patches or [ ]) ++ [ ./pfetch.patch ];
});
qutebrowser = prev.qutebrowser.overrideAttrs (oldAttrs: {
patches = (oldAttrs.patches or [ ]) ++ [ ./qutebrowser-tree-tabs.diff ];
});
# scgit = prev.cgit-pink.overrideAttrs (_: {
# pname = "scgit";
# version = "0.1";
# src = final.fetchFromSourcehut {
# owner = "~misterio";
# repo = "scgit";
# rev = "2cd05c95827fb94740e876733dc6f7fe88340de2";
# sha256 = "sha256-95mRJ3ZCSkLHqehFQdwM2BY0h+YDhohwpnRiF6/lZtA=";
# };
# });
};
}

View file

@ -1,19 +0,0 @@
diff --git a/launcher/minecraft/auth/AccountList.cpp b/launcher/minecraft/auth/AccountList.cpp
index 9e2fd11..3965913 100644
--- a/launcher/minecraft/auth/AccountList.cpp
+++ b/launcher/minecraft/auth/AccountList.cpp
@@ -657,13 +657,7 @@ void AccountList::setListFilePath(QString path, bool autosave)
bool AccountList::anyAccountIsValid()
{
- for(auto account: m_accounts)
- {
- if(account->ownsMinecraft()) {
- return true;
- }
- }
- return false;
+ return true;
}
void AccountList::fillQueue() {

View file

@ -1,41 +0,0 @@
diff --git a/pfetch b/pfetch
index d47b878..79380da 100755
--- a/pfetch
+++ b/pfetch
@@ -1055,14 +1055,14 @@ get_wm() {
}
-get_de() {
+get_desktop() {
# This only supports Xorg related desktop environments though
# this is fine as knowing the desktop environment on Windows,
# macOS etc is useless (they'll always report the same value).
#
# Display the value of '$XDG_CURRENT_DESKTOP', if it's empty,
# display the value of '$DESKTOP_SESSION'.
- log de "${XDG_CURRENT_DESKTOP:-$DESKTOP_SESSION}" >&6
+ log desktop "${XDG_CURRENT_DESKTOP:-$DESKTOP_SESSION}" >&6
}
get_shell() {
@@ -1078,6 +1078,19 @@ get_editor() {
log editor "${editor##*/}" >&6
}
+get_term() {
+ # Display the value of '$TERMINAL', if it's empty, display the
+ # value of '$TERM'.
+ term=${TERMINAL:-"$TERM"}
+
+ log term "${term##*/}" >&6
+}
+
+get_scheme() {
+ # Display the '$SCHEME' environment variable.
+ log scheme "$(cat $HOME/.colorscheme)" >&6
+}
+
get_palette() {
# Print the first 8 terminal colors. This uses the existing
# sequences to change text color with a sequence prepended

File diff suppressed because it is too large Load diff

View file

@ -1,13 +0,0 @@
diff --git a/plugin/number_toggle.vim b/plugin/number_toggle.vim
index d5dad54..80aa97e 100644
--- a/plugin/number_toggle.vim
+++ b/plugin/number_toggle.vim
@@ -4,6 +4,6 @@
augroup numbertoggle
autocmd!
- autocmd BufEnter,FocusGained,InsertLeave,WinEnter * if &nu && mode() != "i" | set rnu | endif
- autocmd BufLeave,FocusLost,InsertEnter,WinLeave * if &nu | set nornu | endif
+ autocmd BufEnter,FocusGained,InsertLeave,WinEnter,CmdlineLeave * if &nu && mode() != "i" | set rnu | endif
+ autocmd BufLeave,FocusLost,InsertEnter,WinLeave,CmdlineEnter * if &nu | set nornu | redraw | endif
augroup END

View file

@ -1,20 +0,0 @@
diff --git a/scripts/xdg-open.in b/scripts/xdg-open.in
index 50e31e6..6f698dc 100644
--- a/scripts/xdg-open.in
+++ b/scripts/xdg-open.in
@@ -320,7 +320,14 @@ search_desktop_file()
args=$(( $args - 1 ))
done
[ $replaced -eq 1 ] || set -- "$@" "$target"
- env "$command" "$@"
+ if [ x"$(get_key "${file}" "Terminal")" = x"true" ] && ( [ ! -t 0 ] || [ ! -t 1 ] ); then
+ if [ -z "$TERMINAL" ]; then
+ TERMINAL="xterm -e"
+ fi
+ $TERMINAL env "$command" "$@" &
+ else
+ env "$command" "$@"
+ fi
if [ $? -eq 0 ]; then
exit_success

View file

@ -10,11 +10,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1712079060,
"narHash": "sha256-/JdiT9t+zzjChc5qQiF+jhrVhRt8figYH29rZO7pFe4=",
"lastModified": 1714136352,
"narHash": "sha256-BtWQ2Th/jamO1SlD+2ASSW5Jaf7JhA/JLpQHk0Goqpg=",
"owner": "ryantm",
"repo": "agenix",
"rev": "1381a759b205dff7a6818733118d02253340fd5e",
"rev": "24a7ea390564ccd5b39b7884f597cfc8d7f6f44e",
"type": "github"
},
"original": {
@ -52,11 +52,11 @@
]
},
"locked": {
"lastModified": 1712947906,
"narHash": "sha256-T0eT2lMbcK7RLelkx0qx4SiFpOS/0dt0aSfLB+WsGV8=",
"lastModified": 1714405407,
"narHash": "sha256-h3pOvHCXkSdp1KOZqtkQmHgkR7VaOJXDhqhumk7sZLY=",
"owner": "nix-community",
"repo": "disko",
"rev": "8d4ae698eaac8bd717e23507da2ca8b345bec4b5",
"rev": "5eaf747af38dd272e1ab28a8ec4bd972424b07cf",
"type": "github"
},
"original": {
@ -74,11 +74,11 @@
},
"locked": {
"dir": "pkgs/firefox-addons",
"lastModified": 1713078488,
"narHash": "sha256-EdCxHld1zzLdT7WteA7CULHslftZOePB9d8uDMT0tzA=",
"lastModified": 1714536206,
"narHash": "sha256-pnE2Px1VlcnWDc92TUmaILRgrWBbetKhpnMu5DfntbM=",
"owner": "rycee",
"repo": "nur-expressions",
"rev": "350bef505d552eb95271b216f1852bfe83f4a4ea",
"rev": "7772d48f5a728af51cd8ac85be5b124e2da0feac",
"type": "gitlab"
},
"original": {
@ -149,11 +149,11 @@
]
},
"locked": {
"lastModified": 1712386041,
"narHash": "sha256-dA82pOMQNnCJMAsPG7AXG35VmCSMZsJHTFlTHizpKWQ=",
"lastModified": 1714043624,
"narHash": "sha256-Xn2r0Jv95TswvPlvamCC46wwNo8ALjRCMBJbGykdhcM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d6bb9f934f2870e5cbc5b94c79e9db22246141ff",
"rev": "86853e31dc1b62c6eeed11c667e8cdd0285d4411",
"type": "github"
},
"original": {
@ -185,11 +185,11 @@
]
},
"locked": {
"lastModified": 1712645404,
"narHash": "sha256-uEVd15WsX+Wti9PXW724puFcsFO72VTiJyBwW2WXT9M=",
"lastModified": 1714557650,
"narHash": "sha256-N1qTL5wIlbbX7DorBaKOMYfz+gYoyf8LREMWVlOXNYc=",
"owner": "viperml",
"repo": "nh",
"rev": "fe4a96a0b0b0662dba7c186b4a1746c70bbcad03",
"rev": "e4eb011975bee4c3f47199cc01d2d986e24851bd",
"type": "github"
},
"original": {
@ -207,11 +207,11 @@
"nmt": "nmt"
},
"locked": {
"lastModified": 1709879831,
"narHash": "sha256-PZFXvKm929A3waipt2prRKYlNJvGQiBxWPDn/MIOKWo=",
"lastModified": 1713988078,
"narHash": "sha256-scRrzQQyJAT0iPAd8AZvolgiq7npatsfytwnduESndI=",
"owner": "Gerschtli",
"repo": "nix-formatter-pack",
"rev": "2499f41a01f1154c5a3b967aabe37d94e6b6d18b",
"rev": "08d0135dbe95992b5f8d54c351ce62be2177f0b4",
"type": "github"
},
"original": {
@ -222,11 +222,11 @@
},
"nixos-hardware": {
"locked": {
"lastModified": 1712909959,
"narHash": "sha256-7/5ubuwdEbQ7Z+Vqd4u0mM5L2VMNDsBh54visp27CtQ=",
"lastModified": 1714465198,
"narHash": "sha256-ySkEJvS0gPz2UhXm0H3P181T8fUxvDVcoUyGn0Kc5AI=",
"owner": "nixos",
"repo": "nixos-hardware",
"rev": "f58b25254be441cd2a9b4b444ed83f1e51244f1f",
"rev": "68d680c1b7c0e67a9b2144d6776583ee83664ef4",
"type": "github"
},
"original": {
@ -238,11 +238,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1712867921,
"narHash": "sha256-edTFV4KldkCMdViC/rmpJa7oLIU8SE/S35lh/ukC7bg=",
"lastModified": 1714531828,
"narHash": "sha256-ILsf3bdY/hNNI/Hu5bSt2/KbmHaAVhBbNUOdGztTHEg=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "51651a540816273b67bc4dedea2d37d116c5f7fe",
"rev": "0638fe2715d998fa81d173aad264eb671ce2ebc1",
"type": "github"
},
"original": {
@ -254,11 +254,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1712791164,
"narHash": "sha256-3sbWO1mbpWsLepZGbWaMovSO7ndZeFqDSdX0hZ9nVyw=",
"lastModified": 1714253743,
"narHash": "sha256-mdTQw2XlariysyScCv2tTE45QSU9v/ezLcHJ22f0Nxc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "1042fd8b148a9105f3c0aca3a6177fd1d9360ba5",
"rev": "58a1abdbae3217ca6b702f03d3b35125d88a2994",
"type": "github"
},
"original": {
@ -326,11 +326,11 @@
]
},
"locked": {
"lastModified": 1713066950,
"narHash": "sha256-ZaefFyvt5369XdjzSw43NhfbPM9MN5b9YXhzx4lFIRc=",
"lastModified": 1713892811,
"narHash": "sha256-uIGmA2xq41vVFETCF1WW4fFWFT2tqBln+aXnWrvjGRE=",
"owner": "mic92",
"repo": "sops-nix",
"rev": "226062b47fe0e2130ba3ee9f4f1c880dc815cf87",
"rev": "f1b0adc27265274e3b0c9b872a8f476a098679bd",
"type": "github"
},
"original": {
@ -377,11 +377,11 @@
]
},
"locked": {
"lastModified": 1709622318,
"narHash": "sha256-bTscF0366xtoIXgH7Zq+Mn0mpX3w4h/2xKpHiYMyLNc=",
"lastModified": 1713958148,
"narHash": "sha256-8PDNi/dgoI2kyM7uSiU4eoLBqUKoA+3TXuz+VWmuCOc=",
"owner": "nix-community",
"repo": "nixos-vscode-server",
"rev": "d0ed9b8cf1f0a71f110df9119489ab047e0726bd",
"rev": "fc900c16efc6a5ed972fb6be87df018bcf3035bc",
"type": "github"
},
"original": {

View file

@ -57,9 +57,13 @@
homeConfigurations = {
# .iso images
# "gburd@iso-console" = libx.mkHome { hostname = "iso-console"; username = "nixos"; };
# "gburd@iso-desktop" = libx.mkHome { hostname = "iso-desktop"; username = "nixos"; desktop = "pantheon"; };
# "gburd@iso-desktop" = libx.mkHome { hostname = "iso-desktop"; username
# = "nixos"; desktop = "pantheon"; };
# Workstations
"gburd@floki" = libx.mkHome { hostname = "floki"; username = "gburd"; desktop = "pantheon"; };
#"gburd@floki" = libx.mkHome { hostname = "floki"; username = "gburd"; desktop = "mate"; };
# Servers
};
@ -68,6 +72,7 @@
# - nix build .#nixosConfigurations.{iso-console|iso-desktop}.config.system.build.isoImage
# iso-console = libx.mkHost { hostname = "iso-console"; username = "nixos"; installer = nixpkgs + "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix"; };
# iso-desktop = libx.mkHost { hostname = "iso-desktop"; username = "nixos"; installer = nixpkgs + "/nixos/modules/installer/cd-dvd/installation-cd-graphical-calamares.nix"; desktop = "pantheon"; };
# Workstations
# Lenovo Carbon X1 Extreme Gen 5 - x86_64
floki = libx.mkHost { hostname = "floki"; username = "gburd"; desktop = "pantheon"; };

View file

@ -1,4 +1,4 @@
{ pkgs, ... }:
{ pkgs, username, ... }:
{
programs.gh = {
enable = true;
@ -9,6 +9,6 @@
};
};
home.persistence = {
"/persist/home/gburd".directories = [ ".config/gh" ];
"/persist/home/${username}".directories = [ ".config/gh" ];
};
}

View file

@ -1,4 +1,4 @@
{ outputs, lib, ... }:
{ outputs, lib, username, ... }:
let
hostnames = builtins.attrNames outputs.nixosConfigurations;
in
@ -22,6 +22,6 @@ in
};
home.persistence = {
"/persist/home/gburd".directories = [ ".ssh" ];
"/persist/home/${username}".directories = [ ".ssh" ];
};
}

View file

@ -85,11 +85,11 @@
fish = {
enable = true;
shellAliases = {
cat = "bat --paging=never --style=plain";
#cat = "bat --paging=never --style=plain";
htop = "btm --basic --tree --hide_table_gap --dot_marker --mem_as_value";
ip = "ip --color --brief";
less = "bat --paging=always";
more = "bat --paging=always";
#less = "bat --paging=always";
#more = "bat --paging=always";
top = "btm --basic --tree --hide_table_gap --dot_marker --mem_as_value";
tree = "exa --tree";
};

View file

@ -1,4 +1,4 @@
{ pkgs, ... }:
{
home.packages = [ pkgs.jetbrains.clion ];
home.packages = [ pkgs.unstable.jetbrains.clion ];
}

View file

@ -10,8 +10,8 @@ with lib.hm.gvariant;
cursor-theme = "Yaru";
document-font-name = "Work Sans 12";
font-name = "Work Sans 12";
gtk-theme = "Yaru-magenta-dark";
icon-theme = "Yaru-magenta-dark";
gtk-theme = lib.mkForce "Yaru-magenta-dark";
icon-theme = lib.mkForce "Yaru-magenta-dark";
monospace-font-name = "FiraCode Nerd Font Medium 13";
};

View file

@ -34,7 +34,7 @@ in
protontricks
];
home.persistence = {
"/persist/home/gburd" = {
"/persist/home/${username}" = {
allowOther = true;
directories = [
".factorio"

View file

@ -1,4 +1,4 @@
{ pkgs, config, ... }: {
{ pkgs, config, username, ... }: {
programs.password-store = {
enable = true;
settings = { PASSWORD_STORE_DIR = "$HOME/.password-store"; };
@ -12,6 +12,6 @@
};
home.persistence = {
"/persist/home/gburd".directories = [ ".password-store" ];
"/persist/home/${username}".directories = [ ".password-store" ];
};
}

View file

@ -23,7 +23,7 @@ let
in
{
home.persistence = {
"/persist/home/gburd".directories = [ "Mail" ];
"/persist/home/${username}".directories = [ "Mail" ];
};
accounts.email = {

View file

@ -6,7 +6,7 @@ in
home.packages = with pkgs; [ vdirsyncer ];
home.persistence = {
"/persist/home/gburd".directories =
"/persist/home/${username}".directories =
[ "Calendars" "Contacts" ".local/share/vdirsyncer" ];
};
@ -29,7 +29,7 @@ in
type = "carddav"
url = "https://dav.burd.me"
username = "greg@burd.me"
password.fetch = ["command", "${pass}", "mail.burd.m/greg@burd.me"]
password.fetch = ["command", "${pass}", "mail.burd.me/greg@burd.me"]
[pair calendars]
a = "calendars_local"

View file

@ -0,0 +1,55 @@
[format]
pretty=format:%C(yellow)%h%Creset | %C(green)%ad (%ar)%Creset | %C(blue)%an%Creset | %s
[push]
default = simple
[branch]
autosetuprebase = always
[receive]
denyCurrentBranch = warn
[filter "media"]
clean = git media clean %f
smudge = git media smudge %f
required = true
# http://nicercode.github.io/blog/2013-04-30-excel-and-line-endings/
[filter "cr"]
clean = LC_CTYPE=C awk '{printf(\"%s\\n\", $0)}' | LC_CTYPE=C tr '\\r' '\\n'
smudge = tr '\\n' '\\r'
[diff]
tool = meld
[difftool]
prompt = false
[difftool "meld"]
cmd = meld "$LOCAL" "$REMOTE"
[merge]
tool = meld
[mergetool "meld"]
# Choose one of these 2 lines (not both!) explained below.
cmd = meld "$LOCAL" "$MERGED" "$REMOTE" --output "$MERGED"
cmd = meld "$LOCAL" "$BASE" "$REMOTE" --output "$MERGED"
[core]
editor = vim
# editor = emacs -nw -q
excludesfile = ~/.gitignore_global
pager = less -FMRiX
quotepath = false
[filter "lfs"]
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
[init]
templateDir = "$HOME/.git-template"
defaultBranch = main
[commit]
gpgsign = true

View file

@ -0,0 +1,492 @@
# Configuration for Alacritty, the GPU enhanced terminal emulator
# Any items in the `env` entry below will be added as
# environment variables. Some entries may override variables
# set by alacritty it self.
# env:
# TERM env customization.
#
# If this property is not set, alacritty will set it to xterm-256color.
#
# Note that some xterm terminfo databases don't declare support for italics.
# You can verify this by checking for the presence of `smso` and `sitm` in
# `infocmp xterm-256color`.
# TERM: xterm-256color-italic
window:
# Window dimensions (changes require restart)
#
# Specified in number of columns/lines, not pixels. If both are zero this
# setting is ignored.
dimensions:
columns: 100
lines: 85
# Window padding (changes require restart)
#
# Blank space added around the window in pixels. This padding is not scaled by
# DPI and the specified value is always added at both opposing sides.
padding:
x: 0
y: 0
# Spread additional padding evenly around the terminal content.
dynamic_padding: false
# Window decorations
#
# Available values:
# - full: borders and title bar
# - none: neither borders nor title bar
# - transparent: title bar, transparent background and title bar buttons
# - buttonless: title bar, transparent background, but no title bar buttons
decorations: buttonless
# Startup Mode (changes require restart)
#
# Values for `startup_mode`:
# - Windowed
# - Maximized
# - Fullscreen
#
# Values for `startup_mode` (macOS only):
# - SimpleFullscreen
startup_mode: Windowed
# Background opacity
opacity: 1.0
scrolling:
# maximum number of lines in the scrollback buffer. Specifying '0' will
# disable scrolling.
history: 0
# Number of lines the viewport will move for every line scrolled when
# scrollback is enabled (history > 0).
multiplier: 3
# Font configuration (changes require restart)
font:
# The normal (roman) font face to use.
# Style can be specified to pick a specific face.
normal:
family: "FiraCode Nerd Font Mono"
style: Retina
# The bold font face
bold:
family: "FiraCode Nerd Font Mono"
style: Bold
# The italic font face
italic:
family: "FiraCode Nerd Font Mono"
style: Italic
# Point size of the font
size: 14.0
# Offset is the extra space around each character. offset.y can be thought of
# as modifying the linespacing, and offset.x as modifying the letter spacing.
offset:
x: 0
y: 0
# Glyph offset determines the locations of the glyphs within their cells with
# the default being at the bottom. Increase the x offset to move the glyph to
# the right, increase the y offset to move the glyph upward.
glyph_offset:
x: 0
y: 0
# Thin stroke font rendering (macOS only)
#
# Thin strokes are suitable for retina displays, but for non-retina you
# probably want this set to false.
#
# macOS >= 10.14.x:
#
# If the font quality on non-retina display looks bad then set
# `use_thin_strokes` to `true` and enable font smoothing by running the
# following command:
# `defaults write -g CGFontRenderingFontSmoothingDisabled -bool NO`
#
# This is a global setting and will require a log out or restart to take
# effect.
use_thin_strokes: true
# When true, bold text is drawn using the bright variant of colors.
draw_bold_text_with_bright_colors: false
# Use custom cursor colors. If true, display the cursor in the cursor.foreground
# and cursor.background colors, otherwise invert the colors of the cursor.
custom_cursor_colors: true
# Colors
colors:
# Tomorrow (https://github.com/aarowill/base16-alacritty/blob/master/colors/base16-tomorrow.yml)
# Default colors
primary:
background: '0xffffff'
foreground: '0x4d4d4c'
# Colors the cursor will use if `custom_cursor_colors` is true
cursor:
text: '0xffffff'
cursor: '0x4d4d4c'
# Normal colors
normal:
black: '0xffffff'
red: '0xc82829'
green: '0x718c00'
yellow: '0xeab700'
blue: '0x4271ae'
magenta: '0x8959a8'
cyan: '0x3e999f'
white: '0x4d4d4c'
# Bright colors
bright:
black: '0x8e908c'
red: '0xf5871f'
green: '0xe0e0e0'
yellow: '0xd6d6d6'
blue: '0x969896'
magenta: '0x282a2e'
cyan: '0xa3685a'
white: '0x1d1f21'
# # Tomorrow Night (https://github.com/aarowill/base16-alacritty/blob/master/colors/base16-tomorrow-night.yml)
# # Default colors
# primary:
# background: '0x1d1f21'
# foreground: '0xc5c8c6'
# # Colors the cursor will use if `custom_cursor_colors` is true
# cursor:
# text: '0x1d1f21'
# cursor: '0xc5c8c6'
# # Normal colors
# normal:
# black: '0x1d1f21'
# red: '0xcc6666'
# green: '0xb5bd68'
# yellow: '0xf0c674'
# blue: '0x81a2be'
# magenta: '0xb294bb'
# cyan: '0x8abeb7'
# white: '0xc5c8c6'
# # Bright colors
# bright:
# black: '0x969896'
# red: '0xde935f'
# green: '0x282a2e'
# yellow: '0x373b41'
# blue: '0xb4b7b4'
# magenta: '0xe0e0e0'
# cyan: '0xa3685a'
# white: '0xffffff'
# Indexed Colors
#
# The indexed colors include all colors from 16 to 256.
# When these are not set, they're filled with sensible defaults.
#
# Example:
# `- { index: 16, color: '0xff00ff' }`
#
# indexed_colors: []
# Visual Bell
#
# Any time the BEL code is received, Alacritty "rings" the visual bell. Once
# rung, the terminal background will be set to white and transition back to the
# default background color. You can control the rate of this transition by
# setting the `duration` property (represented in milliseconds). You can also
# configure the transition function by setting the `animation` property.
#
# Possible values for `animation`
# `Ease`
# `EaseOut`
# `EaseOutSine`
# `EaseOutQuad`
# `EaseOutCubic`
# `EaseOutQuart`
# `EaseOutQuint`
# `EaseOutExpo`
# `EaseOutCirc`
# `Linear`
#
# To completely disable the visual bell, set its duration to 0.
#
bell:
animation: EaseOutExpo
color: '0xffffff'
duration: 0
# Key bindings
#
# Key bindings are specified as a list of objects. Each binding will specify a
# key and modifiers required to trigger it, terminal modes where the binding is
# applicable, and what should be done when the key binding fires. It can either
# send a byte sequence to the running application (`chars`), execute a
# predefined action (`action`) or fork and execute a specified command plus
# arguments (`command`).
#
# Bindings are always filled by default, but will be replaced when a new binding
# with the same triggers is defined. To unset a default binding, it can be
# mapped to the `None` action.
#
# Example:
# `- { key: V, mods: Control|Shift, action: Paste }`
#
# Available fields:
# - key
# - mods (optional)
# - chars | action | command (exactly one required)
# - mode (optional)
#
# Values for `key`:
# - `A` -> `Z`
# - `F1` -> `F12`
# - `Key1` -> `Key0`
#
# A full list with available key codes can be found here:
# https://docs.rs/glutin/*/glutin/enum.VirtualKeyCode.html#variants
#
# Instead of using the name of the keys, the `key` field also supports using
# the scancode of the desired key. Scancodes have to be specified as a
# decimal number.
# This command will allow you to display the hex scancodes for certain keys:
# `showkey --scancodes`
#
# Values for `mods`:
# - Command
# - Control
# - Option
# - Super
# - Shift
# - Alt
#
# Multiple `mods` can be combined using `|` like this: `mods: Control|Shift`.
# Whitespace and capitalization is relevant and must match the example.
#
# Values for `chars`:
# The `chars` field writes the specified string to the terminal. This makes
# it possible to pass escape sequences.
# To find escape codes for bindings like `PageUp` ("\x1b[5~"), you can run
# the command `showkey -a` outside of tmux.
# Note that applications use terminfo to map escape sequences back to
# keys. It is therefore required to update the terminfo when
# changing an escape sequence.
#
# Values for `action`:
# - Paste
# - PasteSelection
# - Copy
# - IncreaseFontSize
# - DecreaseFontSize
# - ResetFontSize
# - ScrollPageUp
# - ScrollPageDown
# - ScrollLineUp
# - ScrollLineDown
# - ScrollToTop
# - ScrollToBottom
# - ClearHistory
# - Hide
# - Quit
# - ClearLogNotice
# - SpawnNewInstance
# - ToggleFullscreen
# - None
#
# Values for `action` (macOS only):
# - ToggleSimpleFullscreen: Enters fullscreen without occupying another space
#
# Values for `command`:
# The `command` field must be a map containing a `program` string and
# an `args` array of command line parameter strings.
#
# Example:
# `command: { program: "alacritty", args: ["-e", "vttest"] }`
#
# Values for `mode`:
# - ~AppCursor
# - AppCursor
# - ~AppKeypad
# - AppKeypad
#
key_bindings:
- { key: V, mods: Command, action: Paste}
- { key: C, mods: Command, action: Copy }
- { key: Q, mods: Command, action: Quit }
- { key: N, mods: Command, action: SpawnNewInstance }
- { key: Return, mods: Command, action: ToggleFullscreen }
- { key: Home, chars: "\x1bOH", mode: AppCursor }
- { key: Home, chars: "\x1b[H", mode: ~AppCursor }
- { key: End, chars: "\x1bOF", mode: AppCursor }
- { key: End, chars: "\x1b[F", mode: ~AppCursor }
- { key: Equals, mods: Command, action: IncreaseFontSize }
- { key: Minus, mods: Command, action: DecreaseFontSize }
- { key: Minus, mods: Command|Shift, action: ResetFontSize }
- { key: PageUp, mods: Shift, chars: "\x1b[5;2~" }
- { key: PageUp, mods: Control, chars: "\x1b[5;5~" }
- { key: PageUp,chars: "\x1b[5~" }
- { key: PageDown, mods: Shift, chars: "\x1b[6;2~" }
- { key: PageDown, mods: Control, chars: "\x1b[6;5~" }
- { key: PageDown, chars: "\x1b[6~" }
- { key: Left, mods: Shift, chars: "\x1b[1;2D" }
- { key: Left, mods: Control, chars: "\x1b[1;5D" }
- { key: Left, mods: Alt, chars: "\x1b[1;3D" }
- { key: Left, chars: "\x1b[D", mode: ~AppCursor }
- { key: Left, chars: "\x1bOD", mode: AppCursor }
- { key: Right, mods: Shift, chars: "\x1b[1;2C" }
- { key: Right, mods: Control, chars: "\x1b[1;5C" }
- { key: Right, mods: Alt, chars: "\x1b[1;3C" }
- { key: Right, chars: "\x1b[C", mode: ~AppCursor }
- { key: Right, chars: "\x1bOC", mode: AppCursor }
- { key: Up, mods: Shift, chars: "\x1b[1;2A" }
- { key: Up, mods: Control, chars: "\x1b[1;5A" }
- { key: Up, mods: Alt, chars: "\x1b[1;3A" }
- { key: Up, chars: "\x1b[A", mode: ~AppCursor }
- { key: Up, chars: "\x1bOA", mode: AppCursor }
- { key: Down, mods: Shift, chars: "\x1b[1;2B" }
- { key: Down, mods: Control, chars: "\x1b[1;5B" }
- { key: Down, mods: Alt, chars: "\x1b[1;3B" }
- { key: Down, chars: "\x1b[B", mode: ~AppCursor }
- { key: Down, chars: "\x1bOB", mode: AppCursor }
- { key: Tab,mods: Shift, chars: "\x1b[Z" }
- { key: F1, chars: "\x1bOP" }
- { key: F2, chars: "\x1bOQ" }
- { key: F3, chars: "\x1bOR" }
- { key: F4, chars: "\x1bOS" }
- { key: F5, chars: "\x1b[15~" }
- { key: F6, chars: "\x1b[17~" }
- { key: F7, chars: "\x1b[18~" }
- { key: F8, chars: "\x1b[19~" }
- { key: F9, chars: "\x1b[20~" }
- { key: F10, chars: "\x1b[21~" }
- { key: F11, chars: "\x1b[23~" }
- { key: F12, chars: "\x1b[24~" }
- { key: Back, chars: "\x7f"}
- { key: Back, mods: Alt, chars: "\x1b\x7f" }
- { key: Insert,chars: "\x1b[2~" }
- { key: Delete,chars: "\x1b[3~" }
# shortcuts for tmux. the leader key is control-b (0x02)
- { key: W, mods: Command, chars: "\x02&" } # close tab (kill)
- { key: T, mods: Command, chars: "\x02c" } # new tab
- { key: RBracket, mods: Command|Shift, chars: "\x02n" } # select next tab
- { key: LBracket, mods: Command|Shift, chars: "\x02p" } # select previous tab
- { key: RBracket, mods: Command, chars: "\x02o" } # select next pane
- { key: LBracket, mods: Command, chars: "\x02;" } # select last (previously used) pane
- { key: F, mods: Command, chars: "\x02/" } # search (upwards) (see tmux.conf)
mouse:
# Click settings
#
# The `double_click` and `triple_click` settings control the time
# alacritty should wait for accepting multiple clicks as one double
# or triple click.
double_click: { threshold: 300 }
triple_click: { threshold: 300 }
# If this is `true`, the cursor is temporarily hidden when typing.
hide_when_typing: true
# URL launcher
# url:
# This program is executed when clicking on a text which is recognized as a URL.
# The URL is always added to the command as the last parameter.
#
# When set to `None`, URL launching will be disabled completely.
#
# Default:
# - (macOS) open
# - (Linux) xdg-open
# - (Windows) explorer
# launcher:
# program: xdg-open
# args: []
# These are the modifiers that need to be held down for opening URLs when clicking
# on them. The available modifiers are documented in the key binding section.
# modifiers: Control|Shift
selection:
semantic_escape_chars: ",│`|:\"' ()[]{}<>"
# When set to `true`, selected text will be copied to the primary clipboard.
save_to_clipboard: false
# Mouse bindings
#
# Available fields:
# - mouse
# - action
# - mods (optional)
#
# Values for `mouse`:
# - Middle
# - Left
# - Right
# - Numeric identifier such as `5`
#
# All available `mods` and `action` values are documented in the key binding
# section.
mouse_bindings:
- { mouse: Middle, action: PasteSelection }
cursor:
# Cursor style
#
# Values for 'style':
# - ▇ Block
# - _ Underline
# - | Beam
style: Block
# If this is `true`, the cursor will be rendered as a hollow box when the
# window is not focused.
unfocused_hollow: true
# dynamic_title: false
# Live config reload (changes require restart)
live_config_reload: true
debug:
# Should display the render timer
render_timer: false
# Keep the log file after quitting Alacritty.
persistent_logging: false
# Log level
#
# Values for `log_level`:
# - OFF
# - ERROR
# - WARN
# - INFO
# - DEBUG
# - TRACE
log_level: OFF
# Print all received window events.
print_events: false
# Record all characters and escape sequences as test data.
ref_test: false
# Shell
#
# You can set shell.program to the path of your favorite shell, e.g. /bin/bash.
# Entries in shell.args are passed unmodified as arguments to the shell.
shell:
program: bash
args:
- --command=tmux
# vim: nospell

View file

@ -0,0 +1,144 @@
{ inputs, config, pkgs, username, ... }: {
imports = [
inputs.impermanence.nixosModules.home-manager.impermanence
../../pass
../../cli
../../nvim
];
home = {
persistence = {
"/persist/home/gburd" = {
directories = [
"Documents"
"Downloads"
"Pictures"
"Videos"
".local/bin"
".config"
];
allowOther = true;
};
};
file.".face".source = ./face.png;
file.".ssh/config".text = ''
Host burd.me *.burd.me *.ts.burd.me
ForwardAgent yes
Host floki
ForwardAgent yes
RemoteForward /%d/.gnupg-sockets/S.gpg-agent /%d/.gnupg-sockets/S.gpg-agent.extra
Host *
ForwardAgent no
Compression no
ServerAliveInterval 0
ServerAliveCountMax 3
HashKnownHosts no
UserKnownHostsFile ~/.ssh/known_hosts
ControlMaster no
ControlPath ~/.ssh/master-%r@%n:%p
ControlPersist no
Host github.com
HostName github.com
User git
'';
file.".inputrc".text = ''
"\C-v": ""
set enable-bracketed-paste off
'';
file.".config/direnv/direnv.toml".text = ''
[global]
load_dotenv = true
'';
file.".config/Code/User/settings.json".text = ''
{
"editor.inlineSuggest.enabled": true,
"editor.fontFamily": "'FiraCode Nerd Font Mono', 'Droid Sans Mono', 'monospace', monospace",
"editor.fontLigatures": true,
"cSpell.userWords": [
"Burd",
"Wpedantic",
"Wvariadic"
],
"files.watcherExclude": {
"**/.bloop": true,
"**/.metals": true,
"**/.ammonite": true
},
"extensions.experimental.affinity": {
"asvetliakov.vscode-neovim": 1
},
"vscode-neovim.neovimExecutablePaths.linux": "/home/gburd/.nix-profile/bin/nvim",
}
'';
file.".config/alacritty/alacritty.yml".source = ./alacritty.yml;
file.".config/Code/User/keybindings.json".text = ''
'';
file.".config/nvim/init.nvim".source = ./init.nvim
# file.".config/sublime-text-2/Local/License.sublime_license".text =
# config.sops.secrets.sublime-licenses.text.path;
# file.".config/sublime-merge/Local/License.sublime_license".text =
# config.sops.secrets.sublime-licenses.merge.path;
# A Modern Unix experience, for the "kids"
# https://jvns.ca/blog/2022/04/12/a-list-of-new-ish--command-line-tools/
packages = with pkgs; [
asciinema # Terminal recorder
chafa # Terminal image viewer
chroma # Code syntax highlighter
clinfo # Terminal OpenCL info
dconf2nix # Nix code from Dconf files
httpie # Terminal HTTP client
iw # Terminal WiFi info
nixpkgs-review # Nix code review
ripgrep # Modern Unix `grep`
shellcheck # Code lint Shell
_1password
_1password-gui
cfssl
dig
emacs
file
git-credential-1password
htop
openssl
plocate
ripgrep
tig
tree
lsof
unstable.flyctl
unstable.minio-client
unstable.element-desktop
];
sessionVariables = {
PAGER = "less";
};
# http://rski.github.io/2021/09/05/nix-debugging.html
# https://github.com/nix-community/home-manager/commit/0056a5aea1a7b68bdacb7b829c325a1d4a3c4259
enableDebugInfo = true;
};
programs = {
};
systemd.user.tmpfiles.rules = [
"d ${config.home.homeDirectory}/ws 0755 ${username} users - -"
"d ${config.home.homeDirectory}/bin 0755 ${username} users - -"
];
}

View file

@ -0,0 +1,20 @@
{ config, lib, ... }:
with lib.hm.gvariant;
{
imports = [
../../cli/signal.nix
../../desktop/alacritty.nix
../../desktop/dconf-editor.nix
../../desktop/jetbrains-toolbox.nix
../../desktop/meld.nix
../../desktop/protonmail-bridge.nix
../../desktop/sublime-merge.nix
../../desktop/sublime.nix
../../services/keybase.nix
];
# Authrorize X11 access in Distrobox
home.file.".distroboxrc".text = ''
xhost +si:localuser:$USER
'';
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -0,0 +1,8 @@
{ lib, ... }:
with lib.hm.gvariant;
{
imports = [
../../../desktop/vorta.nix
];
dconf.settings = { };
}

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