mirror of
https://github.com/gburd/nix-config.git
synced 2024-07-01 23:57:20 +00:00
updates
This commit is contained in:
parent
b50af7a6e0
commit
7993d5619c
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = [ pkgs.alacritty ];
|
||||
}
|
|
@ -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
|
||||
];
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{ pkgs, ... }: {
|
||||
home.packages = with pkgs; [ deluge ];
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
'';
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{ pkgs, ... }: {
|
||||
home.packages = with pkgs; [ xdragon ];
|
||||
}
|
|
@ -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" ];
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
}
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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" ];
|
||||
};
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{ pkgs, ... }: {
|
||||
home.packages = with pkgs; [ pavucontrol ];
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [ playerctl ];
|
||||
services.playerctld = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
qt = {
|
||||
enable = true;
|
||||
platformTheme = "gtk";
|
||||
style = {
|
||||
name = "gtk2";
|
||||
package = pkgs.qt6gtk2;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = [ pkgs.slack ];
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{ pkgs, ... }: {
|
||||
home.packages = [ pkgs.sublime-music ];
|
||||
home.persistence = {
|
||||
"/persist/home/gburd".directories = [ ".config/sublime-music" ];
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
};
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
services.gammastep = {
|
||||
enable = true;
|
||||
provider = "geoclue2";
|
||||
temperature = {
|
||||
day = 6000;
|
||||
night = 4600;
|
||||
};
|
||||
settings = {
|
||||
general.adjustment-method = "wayland";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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
|
||||
];
|
||||
}
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
};
|
||||
}
|
|
@ -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}
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -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'";
|
||||
}));
|
||||
};
|
||||
}
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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};
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -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',
|
||||
},
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -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);
|
|
@ -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; });
|
||||
}
|
|
@ -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}";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
}
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
imports = [ ./global ];
|
||||
# Disable impermanence
|
||||
home.persistence = lib.mkForce { };
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
imports = [
|
||||
./wpa-gui.nix
|
||||
];
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{ pkgs, ... }: {
|
||||
home.packages = [ pkgs.wpa_supplicant_gui ];
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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 ];
|
||||
};
|
||||
}
|
|
@ -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.";
|
||||
}];
|
||||
};
|
||||
}
|
|
@ -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" ]; };
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
{ lib, ... }:
|
||||
let inherit (lib) types mkOption;
|
||||
in
|
||||
{
|
||||
options.wallpaper = mkOption {
|
||||
type = types.path;
|
||||
default = "";
|
||||
description = ''
|
||||
Wallpaper path
|
||||
'';
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
{
|
||||
openrgb = import ./openrgb.nix;
|
||||
satisfactory = import ./satisfactory.nix;
|
||||
}
|
|
@ -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 ];
|
||||
};
|
||||
}
|
|
@ -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 ]; };
|
||||
};
|
||||
}
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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")"
|
||||
''
|
||||
);
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
{
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
vendor = {
|
||||
completions.enable = true;
|
||||
config.enable = true;
|
||||
functions.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
}
|
|
@ -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}" ];
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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"
|
||||
];
|
||||
};
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
_:
|
||||
{
|
||||
nix = {
|
||||
sshServe = {
|
||||
enable = true;
|
||||
keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAz0dIbaTuAihil/si33MQSFH5yBFoupwnV5gcq2CCbO nix-ssh"
|
||||
];
|
||||
protocol = "ssh";
|
||||
write = true;
|
||||
};
|
||||
settings.trusted-users = [ "nix-ssh" ];
|
||||
};
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
hardware.steam-hardware.enable = true;
|
||||
}
|
|
@ -1,3 +0,0 @@
|
|||
{
|
||||
boot.initrd.systemd.enable = true;
|
||||
}
|
|
@ -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" ];
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
|
@ -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" ];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
services.fail2ban = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
boot.kernel.sysctl = {
|
||||
# Disable VDSO on 32-bits to avoid league of legends kick
|
||||
"abi.vsyscall32" = 0;
|
||||
};
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
services.mysql = {
|
||||
enable = true;
|
||||
package = pkgs.mariadb;
|
||||
};
|
||||
|
||||
environment.persistence = {
|
||||
"/persist".directories = [
|
||||
"/var/lib/mysql"
|
||||
];
|
||||
};
|
||||
}
|
|
@ -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 ];
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
_: {
|
||||
services.postgresql.enable = true;
|
||||
|
||||
environment.persistence = {
|
||||
"/persist".directories = [
|
||||
"/var/lib/postgresql"
|
||||
];
|
||||
};
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
# https://github.com/starcitizen-lug/information-howtos/wiki
|
||||
|
||||
# Avoids crashes
|
||||
boot.kernel.sysctl = {
|
||||
"vm.max_map_count" = 16777216;
|
||||
};
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{
|
||||
boot.loader = {
|
||||
systemd-boot = {
|
||||
enable = true;
|
||||
consoleMode = "max";
|
||||
};
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
}
|
|
@ -1,6 +0,0 @@
|
|||
{
|
||||
imports = [ ../global/tailscale.nix ];
|
||||
services.tailscale = {
|
||||
useRoutingFeatures = "both";
|
||||
};
|
||||
}
|
|
@ -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";
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
{
|
||||
programs.wireshark = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
|
@ -1,7 +0,0 @@
|
|||
{
|
||||
services.xserver.serverFlagsSection = ''
|
||||
Option "StandbyTime" "0"
|
||||
Option "SuspendTime" "0"
|
||||
Option "OffTime" "0"
|
||||
'';
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
{ lib, ... }:
|
||||
{
|
||||
imports = [
|
||||
../_mixins/services/bluetooth.nix
|
||||
../_mixins/services/pipewire.nix
|
||||
];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
}
|
|
@ -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=";
|
||||
# };
|
||||
# });
|
||||
};
|
||||
}
|
|
@ -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() {
|
|
@ -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
|
@ -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
|
|
@ -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
|
66
flake.lock
66
flake.lock
|
@ -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": {
|
||||
|
|
|
@ -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"; };
|
||||
|
|
|
@ -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" ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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" ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = [ pkgs.jetbrains.clion ];
|
||||
home.packages = [ pkgs.unstable.jetbrains.clion ];
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
};
|
||||
|
||||
|
|
|
@ -34,7 +34,7 @@ in
|
|||
protontricks
|
||||
];
|
||||
home.persistence = {
|
||||
"/persist/home/gburd" = {
|
||||
"/persist/home/${username}" = {
|
||||
allowOther = true;
|
||||
directories = [
|
||||
".factorio"
|
||||
|
|
|
@ -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" ];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ let
|
|||
in
|
||||
{
|
||||
home.persistence = {
|
||||
"/persist/home/gburd".directories = [ "Mail" ];
|
||||
"/persist/home/${username}".directories = [ "Mail" ];
|
||||
};
|
||||
|
||||
accounts.email = {
|
||||
|
|
|
@ -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"
|
||||
|
|
55
home-manager/_mixins/users/_gburd/.gitconfig
Normal file
55
home-manager/_mixins/users/_gburd/.gitconfig
Normal 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
|
492
home-manager/_mixins/users/_gburd/alacritty.yml
Normal file
492
home-manager/_mixins/users/_gburd/alacritty.yml
Normal 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
|
144
home-manager/_mixins/users/_gburd/default.nix
Normal file
144
home-manager/_mixins/users/_gburd/default.nix
Normal 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 - -"
|
||||
];
|
||||
|
||||
}
|
20
home-manager/_mixins/users/_gburd/desktop.nix
Normal file
20
home-manager/_mixins/users/_gburd/desktop.nix
Normal 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
|
||||
'';
|
||||
}
|
BIN
home-manager/_mixins/users/_gburd/face.png
Normal file
BIN
home-manager/_mixins/users/_gburd/face.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
8
home-manager/_mixins/users/_gburd/hosts/floki.nix
Normal file
8
home-manager/_mixins/users/_gburd/hosts/floki.nix
Normal 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
Loading…
Reference in a new issue