This commit is contained in:
Chaos 2022-11-11 16:32:26 +00:00
parent b5587ee60a
commit 81f71c5187
No known key found for this signature in database
25 changed files with 428 additions and 429 deletions

View file

@ -3,7 +3,9 @@
"deploy-rs": {
"inputs": {
"flake-compat": "flake-compat",
"nixpkgs": "nixpkgs",
"nixpkgs": [
"nixpkgs-unstable"
],
"utils": "utils"
},
"locked": {
@ -71,7 +73,9 @@
"gitlab_artifacts_sync": {
"inputs": {
"flake-compat": "flake-compat_2",
"nixpkgs": "nixpkgs_2",
"nixpkgs": [
"nixpkgs-unstable"
],
"utils": "utils_2"
},
"locked": {
@ -131,59 +135,6 @@
"type": "gitlab"
}
},
"nix-darwin-unstable": {
"inputs": {
"nixpkgs": [
"nixpkgs-unstable"
]
},
"locked": {
"lastModified": 1667419884,
"narHash": "sha256-oLNw87ZI5NxTMlNQBv1wG2N27CUzo9admaFlnmavpiY=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "cfc0125eafadc9569d3d6a16ee928375b77e3100",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1648219316,
"narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1659446231,
"narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "eabc38219184cc3e04a974fe31857d8e0eac098d",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-21.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1667901915,
@ -200,19 +151,18 @@
"type": "github"
}
},
"nixpkgs_2": {
"nur": {
"locked": {
"lastModified": 1660410996,
"narHash": "sha256-arkfX1YYFmwMyDTCguzoOI4epABC41FGQU4J1/G3/9M=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "70b6236f3cbc815f2cae8d597418c714cf83d1c8",
"lastModified": 1668174315,
"narHash": "sha256-oss9lJ30HbgXpVFy5Xv9doB+1mNjQehbFlFYau95odM=",
"owner": "nix-community",
"repo": "NUR",
"rev": "5da1d2f59d29cd1bb9c0787db9c1046825ade56a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-22.05",
"repo": "nixpkgs",
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
@ -222,9 +172,8 @@
"gitlab_artifacts_sync": "gitlab_artifacts_sync",
"home-manager-unstable": "home-manager-unstable",
"musicutil": "musicutil",
"nix-darwin-unstable": "nix-darwin-unstable",
"nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable"
"nixpkgs-unstable": "nixpkgs-unstable",
"nur": "nur"
}
},
"utils": {

View file

@ -6,18 +6,19 @@
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager-unstable.url = "github:nix-community/home-manager";
home-manager-unstable.inputs.nixpkgs.follows = "nixpkgs-unstable";
nix-darwin-unstable.url = "github:lnl7/nix-darwin/master";
nix-darwin-unstable.inputs.nixpkgs.follows = "nixpkgs-unstable";
#nix-darwin-unstable.url = "github:lnl7/nix-darwin/master";
#nix-darwin-unstable.inputs.nixpkgs.follows = "nixpkgs-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-21.11";
nur.url = "github:nix-community/NUR";
deploy-rs.url = "github:serokell/deploy-rs";
#deploy-rs.inputs.nixpkgs.follows = "nixpkgs-unstable";
deploy-rs.inputs.nixpkgs.follows = "nixpkgs-unstable";
musicutil.url = "gitlab:ChaotiCryptidz/musicutil";
musicutil.inputs.nixpkgs.follows = "nixpkgs-unstable";
gitlab_artifacts_sync.url = "gitlab:ChaotiCryptidz/gitlab_artifacts_sync";
gitlab_artifacts_sync.inputs.nixpkgs.follows = "nixpkgs-unstable";
};
outputs = { ... }@inputs: import ./outputs.nix inputs;

View file

@ -1,66 +0,0 @@
# Websites
## discord.com
Zoom: 165%
### Appearance
- Chat Font Scaling: 18px
### Accessability
- Saturation: 70%
- Apply to custom colour schemes: ON
- Enable Reduced Motion
- Enable Play Animated Emoji
- Stickers: Animate on interaction
### Notifications
- DISABLE ALL SOUNDS.
## twitter.com
### Accessability
- Reduce Motion
### Display
- Theme: Dim
- Colour: Purple
- Font Size: Large
## VaultUI
Zoom: 165%
- Default View&Editor Syntax: YAML
- View&Editor Indent: 2
## gitlab.com
Zoom: 185%
# Telegram Desktop (kotatogram)
- Lappy: Set interface size to 200%
- MacMini: Set Interface Size to 125%
- Recent stickers: show 40 stickers
- Sticker Height: 165px
- Upload Speed Boost: Slight
- Main Font & Semibold Font: Comic Sans MS
- Monospaced Font: Comic Code
- Confirm before calling: on
## Quassel Client
### Interface
- Set theme to config dir's style.qss
- Widget Style: Fusion
- Fallback Icon Theme: Fusion
- Show System Tray Icon
### Chat View
- Chat Window Font: Comic Code 20pt
### Chat View Colours
- Disable Custom Colours
- Disallow coloured text
### Chat & Nick Lists
- Custom Font: Comic Code 18pt
- Use Custom Colours:
```
Standard: #ffffff
Inactive: #bbbbbb
Unread: #26f502
Highlight: #fff700
Other: #00dda6
```
### Input Widget
- Custom Font: Comic Code 18pt
### Topic Widget
- Custom Font: Comic Code 14pt
### Backlog Fetching
- Amount: 500
- Method: Fixed
- Initial: 2000
## Websites
follow WEB_SETUP_GUIDE.md

View file

@ -1,73 +0,0 @@
# ok so you fucked up, what next,
## Step 1
Either create a new VM or if still have access, go to ISOs and put in nixos 22.05 iso and reboot server.
If create new vm, please change DNS and update IPs in the main nix config and this document (v6) and set rhost
## Step 2
Use console to set ssh password.
SSH in `ssh root@hetzner-vm.servers.genderfucked.monster`
Add ssh key `echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAeN3T1aZkTm5xS0b66cRDyKUbdEQCFyzVWXeW+eIbsa chaos@chaos" >> /root/.ssh/authorized_keys`
## Step 3
Install NixOS.
```
parted -s "/dev/sda" -- mklabel msdos
parted -s "/dev/sda" -- mkpart primary 512MiB 100%
parted -s "/dev/sda" -- print
mkfs.ext4 /dev/sda1
mount /dev/sda1 /mnt
nixos-generate-config --root /mnt
```
Edit configuration.nix and replace with
```nix
{ config, pkgs, ... }:
{
imports = [ ./hardware-configuration.nix ];
users.users.root = {
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAeN3T1aZkTm5xS0b66cRDyKUbdEQCFyzVWXeW+eIbsa chaos@chaos"
];
};
boot.loader.grub.enable = true;
boot.loader.grub.device = "/dev/sda";
boot.initrd.kernelModules = [ "nvme" ];
services.openssh.enable = true;
networking.enableIPv6 = true;
networking.usePredictableInterfaceNames = false;
networking.dhcpcd.enable = true;
systemd.network = {
enable = true;
networks.eth0 = {
name = "eth0";
address = [ "2a01:4f9:c010:8beb::1/64" ];
gateway = [ "fe80::1" ];
};
};
system.stateVersion = "21.11";
}
```
Then run `nixos-install` and reboot if successful.
## Step 4
Redeploy with `deploy -s .#hetzner-vm --magic-rollback=false --auto-rollback=false --ssh-user root`
## Step 5
Restore using restic.
`B2_ACCOUNT_ID=id B2_ACCOUNT_KEY=key RESTIC_REPOSITORY=b2:Chaos-Backups:HetznerVM restic restore latest`
## Step 6
re-connect to tailscale `tailscale up` and redo dns
## Step 7
Restore Postgres `cat /var/backup/postgresql/all.sql.zstd | zstd -d | sudo -u postgres psql`
## Step 8
Restore music, either via `mkdir -p /storage/music && env B2_ACCOUNT_ID=id B2_ACCOUNT_KEY=key RESTIC_REPOSITORY=b2:Chaos-Backups:Music restic restore latest --target /storage/music` or ./sync.sh on laptop.

View file

@ -1,55 +0,0 @@
# Lappy Setup Guide
## Filesystems
```
mkdir /usb
cryptsetup luksOpen /dev/disk/by-partname/usb usb_unencrypted
mount /dev/mapper/usb_unencrypted /usb
nix develop
mk-lappy-ssd /dev/nvme0n1 /usb/encryption-keys/lappy.key
```
## NetworkManager
Grab passwords from Vault
## Browser (vivaldi)
### Settings
#### General
Home Page: Start Page
Startup With: Start Page
#### Appearance
Use Animation: NO!
#### Themes
Theme: Custom
Background: #2e3440
Foreground: #eceff4
Highlight: #88c0d0
Accent: #4c566a
Corner Rounding: 2
#### Tabs
- Display Close Button: Permanantly
- Active Tab Minimum Width: 150px
- Tab Stacking: Disable
#### Search
- Default search engine: Google
- Always search in new tab: ON
#### Privacy
- Phishing and Malware Protection: OFF
- DNS to help resolve navigation errors: OFF
- Form AutoFill Assist: OFF
- Ask websites not to track me: ON
- No Blocking
- Save Webpage Passwords: OFF
#### Downloads
- Save without asking: ON
#### Webpages
- Default Webpage Zoom: 145%
- Disable Use Tab Zoom
- Disable Use Ctrl+Scroll Zoom
- Plugins: Enable All
- Fonts: All to Comic Sans apart from Monospace which is Comic Code
- Reader: Colour Scheme: Dark
### Extensions
Install the following extensions:
- Stylus
- Tampermonkey
- uBlock Origin
Then install all userscripts and userstyles from [Here](https://gitlab.com/ChaotiCryptidz/userstyles-userscripts/-/tree/main)

View file

@ -1,53 +0,0 @@
# Mac Mini Setup Guide
## First Install
### macOS installer
Country/Region: United Kingdom
Cognitive: Dark Theme
Turn On Hover Text
### Install Nix
```
sh <(curl -L https://nixos.org/nix/install) --daemon
```
### Clone Nixfiles
```
mkdir ~/Projects
cd ~/Projects
nix-shell -p git --run "git clone https://gitlab.com/ChaotiCryptidz/nixfiles"
```
### Bootstrap Nix-Darwin
```
nix --experimental-features "nix-command flakes" build .#darwinConfigurations.MacMini.system
echo -e "run\tprivate/var/run" | sudo tee -a /etc/synthetic.conf
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -B
/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs.util -t
./result/sw/bin/darwin-rebuild switch --flake .#darwinConfigurations.MacMini
```
## Terminal
Set default font to Comic Code
## Settings
### General
- Theme: Dark
- Accent Colour: Pink
### Dock & Menu Bar
#### Main
- Position: Left
- Minimize Using: Scale Effect
- Do not animate opening apps
- Automatically hide and show the dock: Yes
- Do not show recent apps
## Safari
- Enable Develop Menu
# Extensions
install from app store:
- Adblock Pro for Safari
- Cascadea (& install userstyles from repo)
## Apps
- Install Kotatogram Desktop from website

View file

@ -1,66 +0,0 @@
# Websites
## discord.com
Zoom: 165%
### Appearance
- Chat Font Scaling: 18px
### Accessability
- Saturation: 70%
- Apply to custom colour schemes: ON
- Enable Reduced Motion
- Enable Play Animated Emoji
- Stickers: Animate on interaction
### Notifications
- DISABLE ALL SOUNDS.
## twitter.com
### Accessability
- Reduce Motion
### Display
- Theme: Lights Out
- Colour: Purple
- Font Size: Large
## VaultUI
Zoom: 165%
- Default View&Editor Syntax: YAML
- View&Editor Indent: 2
## gitlab.com
Zoom: 185%
## tweetdeck.twitter.com
Zoom: 165%
### TweetDeck Settings
- Theme: Dark
- dont show notifs on startup
- display sensitive medias
- column: the Wide
- font size: lorgest
### TweetDeck Columns
- Delete messages & trending
#### Home
- media size: the lorge
- DO NOT NOTIFY
#### Notifications
- media size: the smol
- sound: enable
- notif: the enabled
### Better TweetDeck Settings
#### General
- pause column scrolling on
- custom width for columns: 49.655%
- mute nft accounts thank fuck
- show heart for moots even though they prolly hate us
- add columns for creatures, stuff, empty spaces;
#### Tweet Content
- Show Content Warnings
- Do not show twibber warnings
- extract the pronouns
#### Theme
- theme: super black
- accent colour: the Purple
- scrollbars: hidden
#### Tweets Display
- avatar shape: square
#### Tweet Actions
- tweet actions to add: block author
- position: right
#### Tweet Composor
- no tweet until alt text
- always show how many chars left

146
home/apps/firefox.nix Normal file
View file

@ -0,0 +1,146 @@
{ config, nixosConfig, pkgs, ... }:
let isGnome = nixosConfig.services.xserver.desktopManager.gnome.enable;
in {
programs.firefox = {
enable = true;
package = pkgs.firefox.override {
cfg = {
# for gnome media shenanigans
enableGnomeExtensions = isGnome;
};
};
extensions = with nixosConfig.nur; [
repos.rycee.firefox-addons.ublock-origin
repos.rycee.firefox-addons.stylus
repos.rycee.firefox-addons.tampermonkey
repos.rycee.firefox-addons.search-engines-helper
repos.rycee.firefox-addons.search-by-image
repos.rycee.firefox-addons.offline-qr-code-generator
repos.rycee.firefox-addons.i-dont-care-about-cookies
repos.rycee.firefox-addons.don-t-fuck-with-paste
repos.rycee.firefox-addons.amp2html
repos.rycee.firefox-addons.a11ycss
];
profiles."profile" = {
name = "profile";
id = 0;
isDefault = true;
settings = {
"app.normandy.first_run" = false;
"browser.search.region" = "GB";
"intl.locale.requested" = "en-GB,en-US";
# less junk on homescreen
"extensions.htmlaboutaddons.recommendations.enabled" = false;
"browser.newtabpage.activity-stream.feeds.recommendationprovider" =
false;
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
"browser.newtabpage.activity-stream.feeds.topsites" = false;
"browser.newtabpage.activity-stream.section.highlights.includeBookmarks" =
false;
"browser.newtabpage.activity-stream.section.highlights.includeDownloads" =
false;
"browser.newtabpage.activity-stream.section.highlights.includePocket" =
false;
"browser.newtabpage.activity-stream.section.highlights.includeVisited" =
false;
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons" =
false;
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features" =
false;
# dont use any form autofill
"signon.autofillForms" = false;
"signon.generation.enabled" = false;
"signon.management.page.breach-alerts.enabled" = false;
"signon.rememberSignons" = false;
"dom.forms.autocomplete.formautofill" = false;
"extensions.formautofill.creditCards.enabled" = false;
"browser.formfill.enable" = false;
# disable search suggestions
"browser.search.suggest.enabled" = false;
# no telemetry
"toolkit.telemetry.enabled" = false;
"datareporting.healthreport.uploadEnabled" = false;
"app.shield.optoutstudies.enabled" = false;
# disable pocket
"browser.pocket.enabled" = false;
"extensions.pocket.enabled" = false;
# no safebrowsing
"browser.safebrowsing.enabled " = false;
"browser.safebrowsing.phishing.enabled" = false;
"browser.safebrowsing.malware.enabled" = false;
"browser.safebrowsing.downloads.enabled" = false;
# don't let websites replace right click
"dom.event.contextmenu.enabled" = false;
# disable geoip
"geo.enabled" = false;
"geo.wifi.uri" = "";
"browser.search.geoip.url" = "";
# enable widevine
"media.eme.enabled" = true;
"media.gmp-widevinecdm.enabled" = true;
# browser toolbar and UI
# may need updating when extensions change
"browser.toolbars.bookmarks.visibility" = "always";
"layout.css.devPixelsPerPx" = "1.8";
"browser.uiCustomization.state" = builtins.toJSON {
currentVersion = 18;
dirtyAreaCache = [
"nav-bar"
"PersonalToolbar"
"toolbar-menubar"
"TabsToolbar"
"widget-overflow-fixed-list"
];
newElementCount = 22;
placements = {
PersonalToolbar = [ "import-button" "personal-bookmarks" ];
TabsToolbar =
[ "tabbrowser-tabs" "new-tab-button" "alltabs-button" ];
nav-bar = [
"back-button"
"forward-button"
"stop-reload-button"
"urlbar-container"
"downloads-button"
"ublock0_raymondhill_net-browser-action"
"firefox_tampermonkey_net-browser-action"
"_7a7a4a92-a2a0-41d1-9fd7-1e92480d612d_-browser-action"
"offline-qr-code_rugk_github_io-browser-action"
];
toolbar-menubar = [ "menubar-items" ];
widget-overflow-fixed-list = [
"a11y_css_ffoodd-browser-action"
"dontfuckwithpaste_raim_ist-browser-action"
"jid1-kkzogwgsw3ao4q_jetpack-browser-action"
"_65a2d764-7358-455b-930d-5afa86fb5ed0_-browser-action"
"_2e5ff8c8-32fe-46d0-9fc8-6b8986621f3c_-browser-action"
];
};
seen = [
"save-to-pocket-button"
"developer-button"
"a11y_css_ffoodd-browser-action"
"dontfuckwithpaste_raim_ist-browser-action"
"jid1-kkzogwgsw3ao4q_jetpack-browser-action"
"offline-qr-code_rugk_github_io-browser-action"
"ublock0_raymondhill_net-browser-action"
"firefox_tampermonkey_net-browser-action"
"_65a2d764-7358-455b-930d-5afa86fb5ed0_-browser-action"
"_7a7a4a92-a2a0-41d1-9fd7-1e92480d612d_-browser-action"
"_2e5ff8c8-32fe-46d0-9fc8-6b8986621f3c_-browser-action"
];
};
};
};
};
}

View file

@ -8,7 +8,8 @@
enable = true;
font.name = "Comic Code";
settings = {
font_size = if nixosConfig.networking.hostName == "tablet" then 12 else 20;
font_size =
if nixosConfig.networking.hostName == "tablet" then 12 else 20;
bold_font = "auto";
italic_font = "auto";
bold_italic_font = "auto";

View file

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

View file

@ -1,46 +1,23 @@
{ config, nixosConfig, pkgs, ... }:
let
configDir = "Code";
userDir = if pkgs.stdenv.hostPlatform.isDarwin then
"$HOME/Library/Application Support/${configDir}/User"
else
"${config.xdg.configHome}/${configDir}/User";
font-size = if nixosConfig.networking.hostName == "tablet" then 16 else 24;
font-size = if nixosConfig.networking.hostName == "tablet" then 18 else 24;
zoom-level = if nixosConfig.networking.hostName == "tablet" then -2 else 0;
in {
programs.vscode = {
programs.vscode-mod = {
enable = true;
userSettings = {
"editor.tabSize" = 4;
"terminal.integrated.shellIntegration.enabled" = false;
"github.gitAuthentication" = false;
"editor.fontSize" = 24;
"editor.fontSize" = font-size;
"editor.fontFamily" = "'Comic Code'";
"terminal.integrated.fontSize" = 24;
"terminal.integrated.fontSize" = font-size;
"editor.codeLensFontFamily" = "'Comic Code'";
"editor.inlayHints.fontFamily" = "'Comic Code'";
"markdown.preview.fontFamily" = "'Comic Code'";
"terminal.integrated.fontFamily" = "'Comic Code'";
"files.autoSave" = "afterDelay";
"window.zoomLevel" = zoom-level;
"editor.tabSize" = 2;
};
};
programs.vscode.extensions = with pkgs;
[ vscode-extensions.matklad.rust-analyzer ];
# make config changeable
#home = {
# activation = {
# afterWriteBoundary = {
# after = [ "writeBoundary" ];
# before = [ ];
# data = ''
# vscodeDir="${userDir}"
# $DRY_RUN_CMD cat "$vscodeDir/settings.json" > "$vscodeDir/settings_whatever.json"
# $DRY_RUN_CMD rm -f "$vscodeDir/settings.json"
# $DRY_RUN_CMD cp "$vscodeDir/settings_whatever.json" "$vscodeDir/settings.json"
# '';
# };
# };
#};
}

View file

@ -2,5 +2,5 @@
{
home.packages = with pkgs; [ go gopls go-outline gotools ];
programs.vscode.extensions = with pkgs; [ vscode-extensions.golang.go ];
programs.vscode-mod.extensions = with pkgs; [ vscode-extensions.golang.go ];
}

View file

@ -3,12 +3,12 @@
{
home.packages = with pkgs; [ nixfmt ];
programs.vscode.extensions = with pkgs; [
programs.vscode-mod.extensions = with pkgs; [
vscode-extensions.bbenoist.nix
vscode-extensions.brettm12345.nixfmt-vscode
];
programs.vscode.userSettings."[nix]" = {
programs.vscode-mod.userSettings."[nix]" = {
"editor.defaultFormatter" = "brettm12345.nixfmt-vscode";
};
}

View file

@ -0,0 +1,6 @@
{ pkgs, ... }: {
programs.vscode-mod.extensions = with pkgs;
[ vscode-extensions.matklad.rust-analyzer ];
home.packages = with pkgs; [ rustc cargo clippy rust-analyzer rustfmt ];
home.sessionVariables = { RUST_SRC_PATH = pkgs.rustPlatform.rustLibSrc; };
}

View file

@ -1,4 +1,4 @@
{ ... }@inputs: {
nixosConfigurations = import ./nixos.nix inputs;
darwinConfigurations = import ./darwin.nix inputs;
#darwinConfigurations = import ./darwin.nix inputs;
}

View file

@ -5,7 +5,6 @@
users.root
profiles.base
profiles.tailscale
profiles.sshd
profiles.nginx
profiles.nix-gc

View file

@ -16,6 +16,11 @@ let
tree.impure.profiles.base
inputs.home-manager-unstable.nixosModules.home-manager
inputs.gitlab_artifacts_sync.nixosModule
inputs.nur.nixosModules.nur
tree.impure.modules.nixos.rclone-serve
tree.impure.modules.nixos.rclone-sync
];
nixosUnstableSystem = nixpkgs-unstable.lib.nixosSystem;
@ -53,11 +58,7 @@ in {
storage = nixosUnstableSystem {
specialArgs = defaultSpecialArgs;
system = "x86_64-linux";
modules = defaultModules ++ [
./storage/modules/rclone-serve.nix
./storage/modules/rclone-sync.nix
./storage/storage.nix
];
modules = defaultModules ++ [ ./storage/storage.nix ];
};
vault = nixosUnstableSystem {

View file

@ -23,7 +23,7 @@
home.home-folders
home.programming.editors.vscode
home.programming.languages.go
home.programming.languages.rust
home.programming.languages.nix
];
home.stateVersion = "22.05";

View file

@ -0,0 +1,229 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.programs.vscode-mod;
vscodePname = cfg.package.pname;
jsonFormat = pkgs.formats.json { };
configDir = {
"vscode" = "Code";
"vscode-insiders" = "Code - Insiders";
"vscodium" = "VSCodium";
}.${vscodePname};
extensionDir = {
"vscode" = "vscode";
"vscode-insiders" = "vscode-insiders";
"vscodium" = "vscode-oss";
}.${vscodePname};
userDir = if pkgs.stdenv.hostPlatform.isDarwin then
"Library/Application Support/${configDir}/User"
else
"${config.xdg.configHome}/${configDir}/User";
configFilePath = "${userDir}/settings.json";
tasksFilePath = "${userDir}/tasks.json";
keybindingsFilePath = "${userDir}/keybindings.json";
# TODO: On Darwin where are the extensions?
extensionPath = ".${extensionDir}/extensions";
mergedUserSettings = cfg.userSettings
// optionalAttrs (!cfg.enableUpdateCheck) { "update.mode" = "none"; }
// optionalAttrs (!cfg.enableExtensionUpdateCheck) {
"extensions.autoCheckUpdates" = false;
};
in {
options = {
programs.vscode-mod = {
enable = mkEnableOption "Visual Studio Code";
package = mkOption {
type = types.package;
default = pkgs.vscode;
example = literalExpression "pkgs.vscodium";
description = ''
Version of Visual Studio Code to install.
'';
};
enableUpdateCheck = mkOption {
type = types.bool;
default = true;
description = ''
Whether to enable update checks/notifications.
'';
};
enableExtensionUpdateCheck = mkOption {
type = types.bool;
default = true;
description = ''
Whether to enable update notifications for extensions.
'';
};
userSettings = mkOption {
type = jsonFormat.type;
default = { };
example = literalExpression ''
{
"files.autoSave" = "off";
"[nix]"."editor.tabSize" = 2;
}
'';
description = ''
Configuration written to Visual Studio Code's
<filename>settings.json</filename>.
'';
};
userTasks = mkOption {
type = jsonFormat.type;
default = { };
example = literalExpression ''
{
version = "2.0.0";
tasks = [
{
type = "shell";
label = "Hello task";
command = "hello";
}
];
}
'';
description = ''
Configuration written to Visual Studio Code's
<filename>tasks.json</filename>.
'';
};
keybindings = mkOption {
type = types.listOf (types.submodule {
options = {
key = mkOption {
type = types.str;
example = "ctrl+c";
description = "The key or key-combination to bind.";
};
command = mkOption {
type = types.str;
example = "editor.action.clipboardCopyAction";
description = "The VS Code command to execute.";
};
when = mkOption {
type = types.nullOr (types.str);
default = null;
example = "textInputFocus";
description = "Optional context filter.";
};
# https://code.visualstudio.com/docs/getstarted/keybindings#_command-arguments
args = mkOption {
type = types.nullOr (jsonFormat.type);
default = null;
example = { direction = "up"; };
description = "Optional arguments for a command.";
};
};
});
default = [ ];
example = literalExpression ''
[
{
key = "ctrl+c";
command = "editor.action.clipboardCopyAction";
when = "textInputFocus";
}
]
'';
description = ''
Keybindings written to Visual Studio Code's
<filename>keybindings.json</filename>.
'';
};
extensions = mkOption {
type = types.listOf types.package;
default = [ ];
example = literalExpression "[ pkgs.vscode-extensions.bbenoist.nix ]";
description = ''
The extensions Visual Studio Code should be started with.
'';
};
mutableExtensionsDir = mkOption {
type = types.bool;
default = true;
example = false;
description = ''
Whether extensions can be installed or updated manually
or by Visual Studio Code.
'';
};
};
};
config = mkIf cfg.enable {
home.packages = [ cfg.package ];
# make config changeable
home = {
activation = {
vscode-mod-copy = hm.dag.entryAfter [ "writeBoundary" ] ''
$DRY_RUN_CMD cat "${configFilePath}.source" > "${configFilePath}"
'';
};
};
home.file = mkMerge [
(mkIf (mergedUserSettings != { }) {
# Don't install settings to actual config file path
# instead install to ${configFilePath}.source
"${configFilePath}.source".source =
jsonFormat.generate "vscode-user-settings" mergedUserSettings;
})
(mkIf (cfg.userTasks != { }) {
"${tasksFilePath}".source =
jsonFormat.generate "vscode-user-tasks" cfg.userTasks;
})
(mkIf (cfg.keybindings != [ ])
(let dropNullFields = filterAttrs (_: v: v != null);
in {
"${keybindingsFilePath}".source =
jsonFormat.generate "vscode-keybindings"
(map dropNullFields cfg.keybindings);
}))
(mkIf (cfg.extensions != [ ]) (let
subDir = "share/vscode/extensions";
# Adapted from https://discourse.nixos.org/t/vscode-extensions-setup/1801/2
toPaths = ext:
map (k: { "${extensionPath}/${k}".source = "${ext}/${subDir}/${k}"; })
(if ext ? vscodeExtUniqueId then
[ ext.vscodeExtUniqueId ]
else
builtins.attrNames (builtins.readDir (ext + "/${subDir}")));
in if cfg.mutableExtensionsDir then
mkMerge (concatMap toPaths cfg.extensions)
else {
"${extensionPath}".source = let
combinedExtensionsDrv = pkgs.buildEnv {
name = "vscode-extensions";
paths = cfg.extensions;
};
in "${combinedExtensionsDrv}/${subDir}";
}))
];
};
}

View file

@ -7,7 +7,7 @@ let
hosts = import ./hosts ({ inherit tree; } // inputs);
in {
nixosConfigurations = hosts.nixosConfigurations;
darwinConfigurations = hosts.darwinConfigurations;
#darwinConfigurations = hosts.darwinConfigurations;
deploy.nodes = (import ./deployNodes.nix {
nixosConfigurations = self.nixosConfigurations;

View file

@ -20,6 +20,7 @@
home.apps.mpv
home.apps.vivaldi
home.apps.firefox
home.apps.telegram
home.apps.quassel

View file

@ -1,4 +1,4 @@
{ inputs, tree, config, lib, ... }:
{ inputs, tree, config, pkgs, lib, ... }:
with lib; {
options.home-manager.users = mkOption {
type = types.attrsOf (types.submoduleWith {
@ -13,6 +13,7 @@ with lib; {
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
sharedModules = with tree; [ modules.home.vscode-mod-module ];
};
};
}

View file

@ -26,6 +26,8 @@
gnome.gnome-tweaks
gnomeExtensions.just-perfection
];
services.gnome.gnome-browser-connector.enable = true;
services.udev.packages = with pkgs; [ gnome3.gnome-settings-daemon ];
services.power-profiles-daemon.enable = lib.mkForce false;