First working version of NixOS intall

This commit is contained in:
Yorick Barbanneau 2023-07-23 01:18:29 +02:00
commit 5ab67429b2
47 changed files with 1801 additions and 0 deletions

18
README.md Normal file
View file

@ -0,0 +1,18 @@
My NixOS configuration
----------------------
My configurations for NixOS using flakes. For now only my desktop computer is
configured with this system.
## Install
```
doas nixos-rebuild switch --flake ".#mrmeeseeks"
```
## Update the flakes.lock
```
nix flake update
doas nixos-rebuild switch --flake ".#mrmeeseeks"
```

10
common/flakes.nix Normal file
View file

@ -0,0 +1,10 @@
{ pkgs, ... }:
{
nix = {
package = pkgs.nixUnstable;
extraOptions = ''
experimental-features = nix-command flakes
'';
};
}

6
common/locales.nix Normal file
View file

@ -0,0 +1,6 @@
{ config, ... }:
{
time.timeZone = "Europe/Paris";
# English locale with YYY/MM/DD date format
i18n.defaultLocale = "en_DK.UTF-8";
}

24
common/user.nix Normal file
View file

@ -0,0 +1,24 @@
{ config, pkgs, ... }:
{
# Services
services.pcscd.enable = true;
# Programs
programs.ssh.startAgent = true;
programs.zsh.enable = true;
# programs.dconf.enable = true;
# Configs
fonts.fontconfig.enable = true;
users.users.ephase = {
shell = pkgs.zsh;
isNormalUser = true;
extraGroups = [ "video" "wheel" ];
home = "/home/ephase";
packages = with pkgs; [
remmina
gcc
];
};
}

47
flake.lock generated Normal file
View file

@ -0,0 +1,47 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1690027126,
"narHash": "sha256-DeUhQQxbu41Qn0uHyNazPBiTJ0lNsf26ThFopWBRRnM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "76dd6c66190db0d46ac6b3ca816cc17b581df42c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1690031011,
"narHash": "sha256-kzK0P4Smt7CL53YCdZCBbt9uBFFhE0iNvCki20etAf4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "12303c652b881435065a98729eb7278313041e49",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-unstable",
"type": "indirect"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs"
}
}
},
"root": "root",
"version": 7
}

21
flake.nix Normal file
View file

@ -0,0 +1,21 @@
{
description = "My systems installation";
inputs = {
nixpkgs.url = "nixpkgs/nixos-unstable";
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = { self, nixpkgs, home-manager, ... }@inputs: {
nixosConfigurations = {
mrmeeseeks = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
./hosts/mrmeeseeks/configuration.nix
home-manager.nixosModule
];
};
};
};
}

View file

@ -0,0 +1,72 @@
{ config, pkgs, lib, ... }:
{
imports =
[ # Include the results of the hardware scan.
./hardware-configuration.nix
../../common/locales.nix
../../common/flakes.nix
../../common/user.nix
../../modules/nixos/pipewire.nix
../../modules/nixos/steam.nix
../../modules/nixos/xdg-portal.nix
../../modules/nixos/doas.nix
];
nixpkgs.config.allowUnfree = true;
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.kernelPackages = pkgs.linuxPackages_latest;
#CPU
hardware.cpu.amd.updateMicrocode = true;
# GPU
hardware.opengl.driSupport = true;
hardware.opengl.driSupport32Bit = true;
# Bluetooth
hardware.bluetooth.enable = true;
hardware.xpadneo.enable = true;
networking.hostName = "mrmeeseeks";
console = {
earlySetup = true;
font = "${pkgs.terminus_font}/share/consolefonts/ter-132n.psf.gz";
packages = with pkgs; [terminus_font];
# keyMap = "us";
useXkbConfig = true; # use xkbOptions in tty.
};
security.rtkit.enable = true;
security.pam.services.swaylock = {};
environment.systemPackages = with pkgs; [
git
zsh
lvm2_dmeventd
];
services.lvm.enable = true;
services.lvm.dmeventd.enable = true;
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
users.ephase = {
home.stateVersion = "23.05";
programs.home-manager.enable = true;
imports = [
../../modules/home/desktop
../../modules/home/cli
../../modules/home/firefox
../../modules/home/foot.nix
../../modules/home/lutris.nix
../../modules/home/zathura.nix
];
};
};
system.stateVersion = "23.05";
}

View file

@ -0,0 +1,67 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"usbhid"
"usb_storage"
"sd_mod"
"amdgpu"
];
boot.initrd.kernelModules = [
"dm-cache-default"
];
boot.kernelModules = [
"kvm-amd"
"amdgpu"
];
boot.extraModulePackages = [ ];
boot.initrd.luks.devices."nixos".device = "/dev/disk/by-uuid/ea7fa60d-35e5-48b8-95d7-142f37b262cd";
boot.initrd.luks.devices."nixos".preLVM = true;
fileSystems."/" =
{ device = "/dev/disk/by-uuid/9d1e5022-0265-4ce7-824e-282ee550d52d";
fsType = "btrfs";
options = [ "subvol=@root" ];
};
fileSystems."/home" =
{ device = "/dev/disk/by-uuid/9d1e5022-0265-4ce7-824e-282ee550d52d";
fsType = "btrfs";
options = [ "subvol=@home" ];
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/F027-F53F";
fsType = "vfat";
};
fileSystems."/mnt/gamelib" =
{ device = "/dev/mapper/tank-gamelib";
fsType = "ext4";
};
swapDevices = [ ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp34s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp37s0.useDHCP = lib.mkDefault true;
services.lvm.boot.thin.enable = true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,10 @@
{ ... }:
{
imports = [
./zsh.nix
./git.nix
./pass.nix
./gnupg.nix
./neovim.nix
];
}

9
modules/home/cli/git.nix Normal file
View file

@ -0,0 +1,9 @@
{ pkgs, ... }:
{
programs.git = {
enable = true;
package = pkgs.gitFull;
userName = "Yorick Barbanneau";
userEmail = "ephase@xieme-art.org";
};
}

View file

@ -0,0 +1,20 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
pinentry-gnome
pkgs.gcr
];
programs.gpg = {
enable = true;
scdaemonSettings = {
disable-ccid = true;
};
};
services.gpg-agent = {
enable = true;
enableScDaemon = true;
enableZshIntegration = true;
pinentryFlavor = "gnome3";
};
}

382
modules/home/cli/neovim.nix Normal file
View file

@ -0,0 +1,382 @@
{ pkgs, ... }:
{
programs.neovim = {
enable = true;
defaultEditor = true;
vimAlias = true;
withNodeJs = true;
withPython3 = true;
extraLuaConfig = ''
-- General Option
vim.g.mapleader = " "
vim.g.maplocalleader = " "
vim.opt.autoindent = true
vim.opt.background = 'dark'
vim.opt.backupdir = os.getenv("HOME") .. '/.local/tmp/nvim'
vim.opt.clipboard = 'unnamedplus' --Use system clipboard
vim.opt.colorcolumn = '80'
vim.opt.directory = os.getenv("HOME") .. '/.local/tmp/nvim'
vim.opt.expandtab = true
vim.opt.foldmethod = 'syntax'
vim.opt.gdefault = true -- search: all occurrences by default
vim.opt.hlsearch = true -- search: hightlight terms
vim.opt.ignorecase = true
vim.opt.incsearch = true
vim.opt.laststatus = 1
-- show special character
vim.opt.listchars = {tab = ' ', trail = '', eol = '', extends = '' }
vim.opt.signcolumn = "yes" -- alway show sign column
vim.opt.number = true
vim.opt.relativenumber = true
vim.opt.cursorline = true -- highlight current line
vim.opt.shiftwidth = 4
vim.opt.showmatch = true
vim.opt.smartcase = true -- search: try :to be smart about cases
vim.opt.smartindent = true
vim.opt.tabstop = 4
vim.opt.termguicolors = true -- 24 bits color support
vim.opt.wildmenu = true -- activate enhanced user menu
vim.opt.wildmode = 'lastused:full,list' -- enhance menu
vim.opt.pumheight = 10
vim.opt.pumwidth = 50
vim.opt.pumblend = 10
-- Options than need vim.cmd
-- vim.cmd('syntax on')
-- -- Code Fold
-- "Load and save view atomatocally (save and restore fold)
vim.cmd('au BufWinLeave *.* mkview')
vim.cmd('au BufWinEnter *.* silent! loadview')
-- Diagnostic settings
--
-- diagnostic windows must be float
vim.diagnostic.config {
virtual_text = false,
signs = true,
underline = true,
}
local signs = { Error = "", Warn = "", Hint = "󰌶", Info = "" }
for type, icon in pairs(signs) do
local hl = "DiagnosticSign" .. type
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
end
-- You will likely want to reduce updatetime which affects CursorHold
-- note: this setting is global and should be set only once
vim.o.updatetime = 250
vim.cmd [[autocmd! CursorHold,CursorHoldI * lua vim.diagnostic.open_float(nil, {scope='cursor', header = "", prefix = "", focus=false})]]
-- Autotype
vim.cmd('au BufRead,BufNewFile *.md setlocal textwidth=80')
vim.cmd('au BufRead,BufNewFile *.tex setlocal textwidth=80')
vim.cmd('au BufRead,BufNewFile *.nix setlocal tabstop=2 shiftwidth=2 ')
vim.cmd('au BufNewFile,BufRead /tmp/neomutt* set tw=72 fo=awq comments+=nb:> noautoindent filetype=mail')
-- Ignore these filenames during enhanced command line completion.
vim.opt.wildignore = {
'*.bak',
'*.class',
'*.aux',
'*.out',
'*.toc',
'*.jpg',
'*.bmp',
'*.gif',
'*.png',
'*.luac',
'*.o',
'*.obj',
'*.exe',
'*.dll',
'*.manifest',
'*.pyc',
'*.spl',
'*.sw?'
}
-- Key biding
-- " ----------
local opts = { noremap = true, silent = true}
vim.api.nvim_set_keymap('n', '<leader>/', ':nohlsearch<CR>', opts)
-- Move tabs with \[ and \]
vim.api.nvim_set_keymap('n', '<Leader>]', ':tabnext<CR>', opts)
vim.api.nvim_set_keymap('n', '<Leader>[', ':tabprev<CR>', opts)
vim.api.nvim_set_keymap('n', '<leader>l', ':set list!<CR>', {silent = true})
'';
plugins = with pkgs.vimPlugins; [
{
plugin = nvim-autopairs;
type = "lua";
config = ''
local autopair = require("nvim-autopairs").setup {}
'';
}
{
plugin = nvim-base16;
type = "lua";
config = ''
vim.cmd.colorscheme 'base16-default-dark'
'';
}
{
plugin = nvim-cmp;
type = "lua";
config = ''
local has_words_before = function()
unpack = unpack or table.unpack
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(
0,
line - 1,
line,
true
)[1]:sub(col, col):match('%s') == nil
end
-- Add additional capabilities supported by nvim-cmp
local capabilities = require('cmp_nvim_lsp').default_capabilities()
local luasnip = require("luasnip")
local kind_icons = {
Text = "",
Method = "󰆧",
Function = "󰊕",
Constructor = "",
Field = "󰇽",
Variable = "󰂡",
Class = "󰠱",
Interface = "",
Module = "",
Property = "󰜢",
Unit = "",
Value = "󰎠",
Enum = "",
Keyword = "󰌋",
Snippet = "",
Color = "󰏘",
File = "󰈙",
Reference = "",
Folder = "󰉋",
EnumMember = "",
Constant = "󰏿",
Struct = "",
Event = "",
Operator = "󰆕",
TypeParameter = "󰅲",
}
-- nvim-cmp setup
local cmp = require 'cmp'
cmp.setup {
mapping = {
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
-- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable()
-- they way you will only jump inside the snippet region
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif has_words_before() then
cmp.complete()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
},
formatting = {
format = function(_, vim_item)
vim_item.kind = string.format('%s %s', kind_icons[vim_item.kind], vim_item.kind)
return vim_item
end,
},
sources = {
{ name = 'nvim_lsp' },
{ name = 'luasnip' },
{ name = 'path' },
{ name = 'buffer' },
},
}
'';
}
cmp-buffer
cmp-nvim-lsp
cmp-path
cmp-cmdline
cmp_luasnip
{
plugin = gitsigns-nvim;
type = "lua";
config = ''
require('gitsigns').setup {
on_attach = function(bufnr)
local gs = package.loaded.gitsigns
local function map(mode, l, r, opts)
opts = opts or {}
opts.buffer = bufnr
vim.keymap.set(mode, l, r, opts)
end
-- Navigation
map('n', '<leader>gn', function()
if vim.wo.diff then return ']c' end
vim.schedule(function() gs.next_hunk() end)
return '<Ignore>'
end, {expr=true})
map('n', '<leader>gN', function()
if vim.wo.diff then return '[c' end
vim.schedule(function() gs.prev_hunk() end)
return '<Ignore>'
end, {expr=true})
map('n', '<leader>gs', gs.stage_hunk)
map('n', '<leader>gr', gs.reset_hunk)
map('n', '<leader>gd', gs.diffthis)
map('n', '<leader>gd', function() gs.diffthis('~') end)
end
}
'';
}
indent-blankline-nvim
{
plugin = nvim-lspconfig;
type = "lua";
config = ''
local lspconfig = require('lspconfig')
'';
}
{
plugin = lualine-nvim;
type = "lua";
config = ''
require('lualine').setup {
options = {
icons_enabled = true,
theme = 'base16',
component_separators = { left = '|', right = '|'},
section_separators = { left = "", right = ""},
disabled_filetypes = {},
always_divide_middle = true,
globalstatus = true,
},
sections = {
lualine_a = {'mode'},
lualine_b = {'branch', 'diff', 'diagnostics'},
lualine_c = {'filename'},
lualine_x = {'encoding', 'fileformat', 'filetype'},
lualine_y = {'progress'},
lualine_z = {'location'}
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {'filename'},
lualine_x = {'location'},
lualine_y = {},
lualine_z = {}
},
tabline = {},
extensions = {}
}
'';
}
mason-lspconfig-nvim
{
plugin = mason-nvim;
type = "lua";
config = ''
local mason = require("mason").setup{
ensure_installed= {
'shellcheck',
'shfmt'
}
}
local mason_lspconfig = require("mason-lspconfig").setup{
ensure_installed={
'ansiblels',
'bashls'
}
}
require("mason-lspconfig").setup_handlers({
-- The first entry (without a key) will be the default handler
-- and will be called for each installed server that doesn't have
-- a dedicated handler.
function (server_name) -- default handler (optional)
require("lspconfig")[server_name].setup {}
end,
-- Next, you can provide targeted overrides for specific servers.
})
'';
}
{
plugin = neo-tree-nvim;
type = "lua";
config = ''
local neotree = require 'neo-tree'
neotree.setup({
event_handlers = {
{
event = "file_opened",
handler = function(file_path)
-- auto close
require("neo-tree.command").execute({action = "close"})
end
},
}
})
vim.api.nvim_set_keymap('n', '<leader>fm',
':Neotree toggle<CR>',
{ table.unpack(opts), desc = 'Toggle NeoTree' }
)
'';
}
nui-nvim
plenary-nvim
{
plugin = (nvim-treesitter.withPlugins (p: [
p.bash p.c p.cmake p.dockerfile p.latex p.lua p.markdown
p.markdown_inline p.python p.vim p.yaml
])
);
type = "lua";
config = ''
-- Tree sitter
local ts = require 'nvim-treesitter.configs'
ts.setup {
sync_install = false,
highlight = {
enable = true,
additional_vim_regex_highlighting = false,
}
}
'';
}
{
plugin = which-key-nvim;
type = "lua";
config = ''
local wk = require 'which-key'
wk.register()
'';
}
];
};
}

View file

@ -0,0 +1,6 @@
{ pkgs, ... }:
{
programs.password-store = {
enable = true;
};
}

68
modules/home/cli/zsh.nix Normal file
View file

@ -0,0 +1,68 @@
{ pkgs, ... }:
{
programs.zsh = {
enable = true;
dotDir = ".config/zsh";
defaultKeymap = "viins";
enableCompletion = true;
history = {
expireDuplicatesFirst = true;
save = 10000;
share = true;
path = ".local/share/zsh/history";
};
historySubstringSearch = {
enable = true;
searchDownKey = "^[OB";
searchUpKey = "^[OA";
};
completionInit = ''
autoload -Uz compinit
for dump in ''${ZDOTDIR}/.zcompdump(N.mh+24); do
compinit
done
compinit -C
'';
plugins = [
{
name = "pure";
src = pkgs.fetchFromGitHub {
owner = "sindresorhus";
repo = "pure";
rev = "v1.21.0";
hash = "sha256-YfasTKCABvMtncrfoWR1Su9QxzCqPED18/BTXaJHttg=";
};
}
{
name = "base16-shell";
src = pkgs.fetchFromGitHub {
owner = "chriskempson";
repo = "base16-shell";
rev = "588691ba71b47e75793ed9edfcfaa058326a6f41";
hash = "sha256-X89FsG9QICDw3jZvOCB/KsPBVOLUeE7xN3VCtf0DD3E=";
};
}
{
name = "fast-syntax-highlighting";
src = pkgs.fetchFromGitHub {
owner = "zdharma-continuum";
repo = "fast-syntax-highlighting";
rev = "v1.55";
hash = "sha256-DWVFBoICroKaKgByLmDEo4O+xo6eA8YO792g8t8R7kA=";
};
}
{
name = "history-search-multi-word";
src = pkgs.fetchFromGitHub {
owner = "zdharma-continuum";
repo = "history-search-multi-word";
rev = "c4dcddc1cd17e7e0909471703f3526170db0f475";
hash = "sha256-KgKm9qzFnwXDXwmTruPgC0tjmiTY5AiGdrWW4zDWUF4=";
};
}];
localVariables = {
BASE16_THEME = "$HOME/.config/zsh/plugins/base16";
};
};
}

View file

@ -0,0 +1,16 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
emojione
(pkgs.nerdfonts.override { fonts = ["FiraCode"];})
libnotify
wl-clipboard
];
imports = [
./sway
./qt.nix
./gtk.nix
./xdg.nix
];
}

View file

@ -0,0 +1,11 @@
{pkgs, ...}:
{
fonts.fonts = with pkgs; [
font-awesome
(nerdfonts.override {
fonts = [
"FiraCode"
];
})
];
}

View file

@ -0,0 +1,29 @@
{ pkgs, ... }:
{
gtk = {
enable = true;
theme = {
name = "Arc-Darker";
package = pkgs.arc-theme;
};
iconTheme = {
name = "Papirus";
package = pkgs.papirus-icon-theme;
};
font = {
name = "Deja Vu Sans";
package = "${pkgs.dejavu_fonts}";
size = 10;
};
};
home.pointerCursor = {
name = "Adwaita";
package = pkgs.gnome.adwaita-icon-theme;
size = 24;
x11 = {
enable = true;
defaultCursor = "Adwaita";
};
};
}

View file

@ -0,0 +1,8 @@
{ pkgs, ... }:
{
qt = {
enable = true;
platformTheme = "gnome";
style.name = "adwaita-dark";
};
}

View file

@ -0,0 +1,11 @@
{ ... }:
{
imports = [
./sway.nix
./mako.nix
./waybar.nix
./swaylock.nix
./swayidle.nix
./fuzzel.nix
];
}

View file

@ -0,0 +1,27 @@
{ pkgs, ... }:
{
programs.fuzzel = {
enable = true;
settings = {
main = {
font = "Fira Code Nerd Font Mono:size=9";
icon-theme = "Papirus-Dark";
width = 60;
show-actions = "yes";
launch-prefix = "swaymsg exec --";
};
border = {
radius = 0;
width = 1;
};
colors = {
border = "f268b3ff";
background = "121212ff";
text = "ccccccff";
selection = "323232ff";
selection-text = "ccccccff";
match = "f268b3ff";
};
};
};
}

View file

@ -0,0 +1,37 @@
{ pkgs, ... }:
{
systemd.user.services.mako = {
Service = {
ExecStart = "${pkgs.mako}/bin/mako";
};
Install = {
After = [ "sway-session.target" ];
WantedBy = [ "sway-session.target" ];
};
};
services.mako = {
enable = true;
font = "Fira Code 10";
backgroundColor = "#353535FF";
borderColor = "#1CD180";
progressColor = "over #5566AAFF";
textColor = "#FDFDFD";
width = 300;
height = 100;
borderRadius = 0;
borderSize = 2;
icons = true;
maxIconSize = 64;
layer = "overlay";
anchor = "top-right";
extraConfig = ''
[urgency="high"]
border-color=#F268b3
[app-name="cmus"]
border-color=#00000000
default-timeout=10000
'';
};
}

View file

@ -0,0 +1,198 @@
{ pkgs, config, ...}:
{
wayland.windowManager.sway = {
enable = true;
wrapperFeatures.gtk = true;
systemd.enable = true;
config = {
modifier = "Mod4";
terminal = "${pkgs.foot}/bin/foot";
left = "h";
down = "j";
up = "k";
right = "l";
input = {
"*" = {
xkb_layout = "us";
xkb_variant = "altgr-intl";
};
};
output = {
"Iiyama North America PL2792UH 1166310803122" = {
mode = "3840x2160@60Hz";
position = "0,0";
scale = "2";
};
"Iiyama North America PL2792UH 1176923201598" = {
mode = "3840x2160@60Hz";
position = "1920,0";
scale = "2";
transform = "90";
};
};
bars= [];
keybindings = let
mod = config.wayland.windowManager.sway.config.modifier;
inherit (config.wayland.windowManager.sway.config)
left down up right terminal;
in
{
"${mod}+1" = "workspace $ws1";
"${mod}+Shift+1" = "move container to workspace $ws1";
"${mod}+2" = "workspace $ws2";
"${mod}+Shift+2" = "move container to workspace $ws2";
"${mod}+3" = "workspace $ws3";
"${mod}+Shift+3" = "move container to workspace $ws3";
"${mod}+4" = "workspace $ws4";
"${mod}+Shift+4" = "move container to workspace $ws4";
"${mod}+5" = "workspace $ws5";
"${mod}+Shift+5" = "move container to workspace $ws5";
"${mod}+6" = "workspace $ws6";
"${mod}+Shift+6" = "move container to workspace $ws6";
"${mod}+7" = "workspace $ws7";
"${mod}+Shift+7" = "move container to workspace $ws7";
"${mod}+8" = "workspace $ws8";
"${mod}+Shift+8" = "move container to workspace $ws8";
"${mod}+9" = "workspace $ws9";
"${mod}+Shift+9" = "move container to workspace $ws9";
"${mod}+0" = "workspace $ws0";
"${mod}+Shift+0" = "move container to workspace $ws0";
"${mod}+Return" = "exec ${terminal}";
"${mod}+Shift+q" = "kill";
"${mod}+d" = "exec ${pkgs.fuzzel}/bin/fuzzel";
"${mod}+Shift+c" = "reload";
"${mod}+Alt+l" = "exec ${pkgs.swaylock}/bin/swaylock";
"${mod}+${left} focus" = "left";
"${mod}+${down} focus" = "down";
"${mod}+${up} focus" = "up";
"${mod}+${right} focus" = "right";
"${mod}+Left" = "focus left";
"${mod}+Down" = "focus down";
"${mod}+Up" = "focus up";
"${mod}+Right" = "focus right";
"${mod}+Shift+${left} move" = "left";
"${mod}+Shift+${down} move" = "down";
"${mod}+Shift+${up} move" = "up";
"${mod}+Shift+${right} move" = "right";
"${mod}+Shift+Left" = "move left";
"${mod}+Shift+Down" = "move down";
"${mod}+Shift+Up" = "move up";
"${mod}+Shift+Right" = "move right";
"${mod}+b" = "splith";
"${mod}+v" = "splitv";
"${mod}+s" = "layout stacking";
"${mod}+w" = "layout tabbed";
"${mod}+e" = "layout toggle split";
"${mod}+f" = "fullscreen";
"${mod}+Shift+space" = "floating toggle";
"${mod}+space" = "focus mode_toggle";
"${mod}+a" = "focus parent";
"${mod}+Shift+p" = "move scratchpad";
"${mod}+p" = "scratchpad show";
"${mod}+F1" = "exec brightnessctl s 1%-";
"${mod}+F2" = "exec brightnessctl s +1%";
"${mod}+F3" = "exec pactl set-sink-volume @DEFAULT_SINK@ -5%";
"${mod}+F4" = "exec pactl set-sink-volume @DEFAULT_SINK@ +5%";
"${mod}+F5" = "exec pactl set-sink-mute @DEFAULT_SINK@ toggle";
"${mod}+m" = "exec pactl set-source-mute @DEFAULT_SOURCE@ toggle";
"${mod}+r" = "mode resize";
"${mod}+n" = "exec makoctl dismiss";
"${mod}+shift+n" = "exec makoctl dismiss -a";
"${mod}+alt+n" = "mode notification";
};
modes =
let
inherit (config.wayland.windowManager.sway.config)
left down up right;
in {
"resize" = {
"${left}" = "resize shrink width 10 px or 10 ppt";
"${down}" = "resize grow height 10 px or 10 ppt";
"${up}" = "resize shrink height 10 px or 10 ppt";
"${right}" = "resize grow width 10 px or 10 ppt";
"Return" = "mode default";
"Escape" = "mode default";
};
"notification" = {
"r" = "exec ${pkgs.mako}/bin/makoctl restore";
"Escape" = "mode default";
};
};
colors = {
focused = {
border = "#f268b3";
background = "#f268b3";
text = "#000000";
indicator = "#1cd180";
childBorder = "#f268b3";
};
focusedInactive = {
border = "#323232";
background = "#323232";
text = "#f268b3";
indicator = "#1cd180";
childBorder = "#323232";
};
unfocused = {
border = "#323232";
background = "#323232";
text = "#cccccc";
indicator = "#1cd180";
childBorder = "#323232";
};
urgent = {
border = "#2f343a";
background = "#900000";
text = "#cccccc";
indicator = "#900000";
childBorder = "#900000" ;
};
#focused_tab_title = {
# boder = "#2f343a";
# background = "#2f343a";
# text = "#ffffff";
#};
};
window = {
border = 1;
titlebar = false;
commands = [
{
command = "inhibit_idle fullscreen";
criteria = {
title = "^.*";
};
}
{
command = "inhibit_idle fullscreen";
criteria = {
app_id = "^.*";
};
}
];
};
gaps = {
smartGaps = true;
smartBorders = "on";
inner = 2;
};
};
extraConfigEarly = ''
set $ws1 1:
set $ws2 2: 󰇮
set $ws3 3: 󰈹
set $ws4 4: 󰍦
set $ws5 5:
set $ws6 6: 󰈙
set $ws7 7:
set $ws8 8:
set $ws9 9:
set $ws0 10:
default_orientation auto
workspace_layout default
font pango:Fira Code Nerd Font Mono 10
default_border pixel 1
title_align right
'';
};
}

View file

@ -0,0 +1,27 @@
{ pkgs, ... }:
{
services.swayidle = {
enable = true;
timeouts = [
{
timeout = 300;
command = "${pkgs.swaylock}/bin/swaylock -f";
}
{
timeout = 600;
command = "swaymsg 'output * dpms off'";
resumeCommand = "swaymsg 'output * dpms on";
}
];
events = [
{
event = "before-sleep";
command = "${pkgs.swaylock}/bin/swaylock -f";
}
{
event = "lock";
command = "${pkgs.swaylock}/bin/swaylock -f";
}
];
};
}

View file

@ -0,0 +1,30 @@
{ pkgs, ... }:
{
programs.swaylock = {
enable = true;
settings = {
image = "~/medias/images/wallpapers/lockscreen.png";
scaling = "center";
color = "000000";
indicator-radius = 70;
indicator-y-position = 150;
font = "Fira Code Nerd Font Mono";
font-size = "14";
inside-color = "00000000";
ring-color = "323232";
ring-ver-color = "1cd180";
inside-ver-color = "1cd180cc";
ring-wrong-color = "f268b3";
inside-wrong-color = "f268b3cc";
key-hl-color = "1cd180";
caps-lock-key-hl-color = "1cd180";
caps-lock-bs-hl-color = "f268b3";
bs-hl-color = "f268b3ff";
separator-color = "00000000";
ignore-empty-password = true;
show-failed-attempts = true;
daemonize = true;
line-uses-inside = true;
};
};
}

View file

@ -0,0 +1,10 @@
{ pkgs, config, ...}:
{
programs.waybar = {
enable = true;
systemd = {
enable = true;
target = "sway-session.target";
};
};
}

View file

@ -0,0 +1,14 @@
{ ... }:
{
xdg = {
enable = true;
userDirs = {
enable = true;
documents = "documents";
download = "downloads";
music = "medias/music";
pictures = "medias/images";
videos = "medias/video";
};
};
}

View file

@ -0,0 +1,7 @@
{
# DNS over HTTP (DoH), aka. Trusted Recursive Resolver (TRR)
# (https://wiki.mozilla.org/Trusted_Recursive_Resolver), uses a server run by
# Cloudflare to resolve hostnames, even when the system uses another (normal) DNS
# server. This setting disables it and sets the mode to explicit opt-out (5).
"network.trr.mode" = 5;
}

View file

@ -0,0 +1,12 @@
{
# Disables playback of DRM-controlled HTML5 content
# if enabled, automatically downloads the Widevine Content Decryption Module
# provided by Google Inc. Details
# (https://support.mozilla.org/en-US/kb/enable-drm#w_opt-out-of-cdm-playback-uninstall-cdms-and-stop-all-cdm-downloads)
"media.eme.enabled" = false;
# Disables the Widevine Content Decryption Module provided by Google Inc.
# Used for the playback of DRM-controlled HTML5 content Details
# (https://support.mozilla.org/en-US/kb/enable-drm#w_disable-the-google-widevine-cdm-without-uninstalling)
"media.gmp-widevinecdm.enabled" = false;
}

View file

@ -0,0 +1,21 @@
{
# Disable shield studies
# Mozilla shield studies (https://wiki.mozilla.org/Firefox/Shield) is a feature
# which allows mozilla to remotely install experimental addons.
"app.normandy.enabled" = false;
"app.normandy.api_url" = "";
"app.shield.optoutstudies.enabled" = false;
"extensions.shield-recipe-client.enabled" = false;
"extensions.shield-recipe-client.api_url" = "";
# Disable experiments
# Telemetry Experiments (https://wiki.mozilla.org/Telemetry/Experiments) is a
# feature that allows Firefox to automatically download and run specially-designed
# restartless addons based on certain conditions.
"experiments.enabled" = false;
"experiments.manifest.uri" = "";
"experiments.supported" = false;
"experiments.activeExperiment" = false;
"network.allow-experiments" = false;
}

View file

@ -0,0 +1,11 @@
{
# Firefox sends data about installed addons as metadata updates
# (https://blog.mozilla.org/addons/how-to-opt-out-of-add-on-metadata-updates/), so
# Mozilla is able to recommend you other addons.
"extensions.getAddons.cache.enabled" = false;
# Disable about:addons' Get Add-ons panel
# The start page with recommended addons uses google analytics.
"extensions.getAddons.showPane" = false;
"extensions.webservice.discoverURL" = "";
}

View file

@ -0,0 +1,28 @@
{
"browser.sessionstore.enabled" = true;
"browser.sessionstore.restore_hidden_tabs" = true;
"browser.sessionstore.restore_pinned_tabs_on_demand" = true;
"browser.sessionstore.resume_after_os_start" = true;
# use blank page for new tabs
"browser.newtabpage.enabled" = false;
# Disable preloading of the new tab page.
# By default Firefox preloads the new tab page (with website thumbnails) in the
# background before it is even opened.
"browser.newtab.preload" = false;
# Disable check for captive portal.
# By default, Firefox checks for the presence of a captive portal on every
# startup. This involves traffic to Akamai
# (https://support.mozilla.org/questions/1169302).
"network.captive-portal-service.enabled" = false;
# Disable Javascript in PDF viewer
# Disables executing of JavaScript in the PDF form viewer. It is possible that
# some PDFs are not rendered correctly due to missing functions.
"pdfjs.enableScripting" = true;
}

View file

@ -0,0 +1,119 @@
{
# Disable access to device sensor data
# Disallow websites to access sensor data (ambient light, motion, device
# orientation and proximity data).
"device.sensors.ambientLight.enabled" = false;
"device.sensors.enabled" = false;
"device.sensors.motion.enabled" = false;
"device.sensors.orientation.enabled" = false;
"device.sensors.proximity.enabled" = false;
# Using a popular useragent string
# (https://techblog.willshouse.com/2012/01/03/most-common-user-agents/) avoids
# attracting attention i.e. with an Iceweasel UA. (keep blank to use the default)
# Block Cookies
# Block 3rd-Party cookies or even all cookies.
"network.cookie.cookieBehavior" = 1;
# Block Referer
# Firefox tells a website, from which site you're coming (the so called RefControl
# (http://kb.mozillazine.org/Network.http.sendRefererHeader">referer</a>). You can
# find more detailed settings in this <a
# href="http://www.ghacks.net/2015/01/22/improve-online-privacy-by-controlling-referrer-information/">ghacks
# article</a> or install the <a
# href="https://addons.mozilla.org/firefox/addon/refcontrol/) extension for per
# domain settings.
"network.http.referer.spoofSource" = true;
# Disable DOM storage
# Disables DOM storage, which enables so called "supercookies". Some modern sites
# will not work (i.e. missing "save" functions).
"dom.storage.enabled" = true;
# Disable IndexedDB (breaks things)
# abused for tracking (http://www.w3.org/TR/IndexedDB/">IndexedDB</a> is a way,
# websites can store structured data. This can be <a
# href="http://arstechnica.com/apple/2010/09/rldguid-tracking-cookies-in-safari-database-form/),
# too. Disabling causes problems when sites depend on it like Tweetdeck or Reddit
# and extensions that use it to store their data. Some users reported crashing
# tabs when IndexedDB is disabled. Only disable it, when you know what you're
# doing.
"dom.indexedDB.enabled" = true;
# Disable the Offline Cache.
# Websites can store up to 500 MB of data in an offline cache
# (http://kb.mozillazine.org/Browser.cache.offline.enable), to be able to run even
# when there is no working internet connection. This could possibly be used to
# store an user id.
"browser.cache.offline.enable" = false;
# Sessionstore Privacy
# This preference controls when to store extra information about a session:
# contents of forms, scrollbar positions, cookies, and POST data.
"browser.sessionstore.privacy_level" = 2;
# Disable Link Prefetching
# Firefox prefetches the next site on some links, so the site is loaded even when
# you never click.
"network.prefetch-next" = false;
"network.dns.disablePrefetch" = true;
"network.dns.disablePrefetchFromHTTPS" = true;
"network.predictor.enabled" = false;
"network.predictor.enable-prefetch" = false;
# Disable speculative website loading.
# In some situations Firefox already starts loading web pages when the mouse
# pointer is over a link, i. e. before you actually click. This is to speed up the
# loading of web pages by a few milliseconds.
"network.http.speculative-parallel-limit" = 0;
"browser.urlbar.speculativeConnect.enabled" = false;
# Use a private container for new tab page thumbnails
# Load the pages displayed on the new tab page in a private container when
# creating thumbnails.
"privacy.usercontext.about_newtab_segregation.enabled" = true;
# Disable WebGL
# Disables the WebGL function, to prevent (ab)use the full power of the graphics
# card (http://www.uniquemachine.org/">fingerprinting with WebGL</a>. Another
# issue is, that websites can <a
# href="https://isc.sans.edu/forums/diary/Time+to+disable+WebGL/10867). WebGL is
# part of some fingerprinting scripts used in the wild. Some interactive websites
# will not work, which are mostly games.
"webgl.disabled" = true;
# Override graphics card vendor and model strings in the WebGL API
# Websites can read the graphics card vendor and model using a WebGL API. This
# setting overrides both with " " without disabling WebGL.
"webgl.renderer-string-override" = " ";
"webgl.vendor-string-override" = " ";
# Disable WebRTC
# Disables the WebRTC function, which gives away your local ips. Some addons like
# uBlock origin provide settings to prevent WebRTC from exposing local ips without
# disabling WebRTC.
"media.peerconnection.enabled" = false;
# Disable the clipboardevents.
# Disable that websites can get notifications if you copy, paste, or cut something
# from a web page, and it lets them know which part of the page had been selected.
"dom.event.clipboardevents.enabled" = false;
# Disable Search Suggestions
# Firefox suggests search terms in the search field. This will send everything
# typed or pasted in the search field to the chosen search engine, even when you
# did not press enter.
"browser.search.suggest.enabled" = true;
# Disable Search Keyword
# When you mistype some url, Firefox starts a search even from urlbar. This
# feature is useful for quick searching, but may harm your privacy, when it's
# unintended.
"keyword.enabled" = true;
# Disable Fixup URLs
# When you type "something" in the urlbar and press enter, Firefox tries
# "something.com", if Fixup URLs is enabled.
"browser.fixup.alternate.enabled" = true;
}

View file

@ -0,0 +1,14 @@
{
# Disable google safebrowsing
# Google safebrowsing can detect phishing and malware but it also sends
# informations to google together with an unique id called wrkey
# (http://electroholiker.de/?p=1594).
"browser.safebrowsing.enabled" = false;
"browser.safebrowsing.downloads.remote.url" = "";
"browser.safebrowsing.phishing.enabled" = false;
"browser.safebrowsing.blockedURIs.enabled" = false;
"browser.safebrowsing.downloads.enabled" = false;
"browser.safebrowsing.downloads.remote.enabled" = false;
"browser.safebrowsing.appRepURL" = "";
"browser.safebrowsing.malware.enabled" = false;
}

View file

@ -0,0 +1,11 @@
{
# Disable Firefox Suggest
# The Firefox Suggest
# (https://support.mozilla.org/en-US/kb/navigate-web-faster-firefox-suggest)
# feature allows Mozilla to provide search suggestions in the US, which uses your
# city location and search keywords to send suggestions. This is also used to
# serve advertisements.
"browser.urlbar.groupLabels.enabled" = false;
"browser.urlbar.quicksuggest.enabled" = false;
}

View file

@ -0,0 +1,38 @@
{
# Disable Telemetry
# The telemetry feature
# (https://support.mozilla.org/kb/share-telemetry-data-mozilla-help-improve-firefox)
# sends data about the performance and responsiveness of Firefox to Mozilla.
"toolkit.telemetry.enabled" = false;
"toolkit.telemetry.archive.enabled" = false;
"toolkit.telemetry.rejected" = true;
"toolkit.telemetry.unified" = false;
"toolkit.telemetry.unifiedIsOptIn" = false;
"toolkit.telemetry.prompted" = 2;
"toolkit.telemetry.server" = "";
"toolkit.telemetry.cachedClientID" = "";
"toolkit.telemetry.newProfilePing.enabled" = false;
"toolkit.telemetry.shutdownPingSender.enabled" = false;
"toolkit.telemetry.updatePing.enabled" = false;
"toolkit.telemetry.bhrPing.enabled" = false;
"toolkit.telemetry.firstShutdownPing.enabled" = false;
"toolkit.telemetry.hybridContent.enabled" = false;
"toolkit.telemetry.reportingpolicy.firstRun" = false;
# Disable health report
# Disable sending Firefox health reports
# (https://www.mozilla.org/privacy/firefox/#health-report) to Mozilla
"datareporting.healthreport.uploadEnabled" = false;
"datareporting.policy.dataSubmissionEnabled" = false;
"datareporting.healthreport.service.enabled" = false;
# Disable Crash Reports
# The crash report (https://www.mozilla.org/privacy/firefox/#crash-reporter) may
# contain data that identifies you or is otherwise sensitive to you.
"breakpad.reportURL" = "";
"browser.tabs.crashReporting.sendReport" = false;
"browser.crashReports.unsubmittedCheck.enabled" = false;
"browser.crashReports.unsubmittedCheck.autoSubmit" = false;
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
}

View file

@ -0,0 +1,4 @@
{
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
"browser.uidensity" = 1;
}

View file

@ -0,0 +1,82 @@
{
# Enable Do-not-Track
# With the do not track feature, you tell websites, that you do not want to be
# tracked. Most websites ignore this, so you need other privacy options as well.
"privacy.donottrackheader.enabled" = true;
"privacy.donottrackheader.value" = 1;
# Enable resistFingerprinting
# The <code>privacy.resistFingerprinting</code> setting coming from the
# tor-browser hides some system properties. See discussion in our bug tracker.
# (https://bugzilla.mozilla.org/show_bug.cgi?id=1308340">Bug #1308340</a> for more
# information. This option may interfere with other privacy related settings, see
# the <a
# href="https://github.com/allo-/firefox-profilemaker/issues/56#issuecomment-333397712)
"privacy.resistFingerprinting" = false;
# Enable Mozilla Trackingprotection
# Firefox has a builtin tracking protection
# (https://wiki.mozilla.org/Security/Tracking_protection), which blocks a list of
# known tracking sites.
"privacy.trackingprotection.pbmode.enabled" = true;
"privacy.trackingprotection.enabled" = true;
"privacy.trackingprotection.fingerprinting.enabled" = true;
"privacy.trackingprotection.cryptomining.enabled" = true;
# Enable firstparty isolation.
# FPI works by separating cookies on a per-domain basis. In this way tracking
# networks won't be able to locate the same cookie on different sites. Note that
# this might break third-party logins.
"privacy.firstparty.isolate" = false;
# Disable Browser Pings
# Firefox sends "ping" requests (http://kb.mozillazine.org/Browser.send_pings),
# when a website requests to be informed when a user clicks on a link.
"browser.send_pings" = false;
# Disable TLS session identifiers
# TLS allows for session identifiers, which speed up the session resumption when a
# connection was lost. These identifiers can be used for tracking
# (https://youbroketheinternet.org/trackedanyway).
"security.ssl.disable_session_identifiers" = true;
# Disable Beacons
# The Beacon (https://w3c.github.io/beacon/) feature allows websites to send
# tracking data after you left the website.
"beacon.enabled" = false;
# Disable the Battery API
# Firefox allows websites to read the charge level of the battery. This may be
# used for fingerprinting.
"dom.battery.enabled" = false;
# Disable media device queries
# Prevent websites from accessing information about webcam and microphone
# (https://developer.mozilla.org/docs/Web/API/MediaDevices/enumerateDevices)
# (possible fingerprinting).
"media.navigator.enabled" = false;
# Disable form autofill
# Automatically filled form fields are used for fingerprinting
# (https://freedom-to-tinker.com/2017/12/27/no-boundaries-for-user-identities-web-trackers-exploit-browser-login-managers/).
# This setting disables automatic form filling until you click on the field.
"signon.autofillForms" = false;
# Disable webaudio API
# Disable webaudio API to prevent browser fingerprinting. See Mozilla Bug #1288359
# (https://bugzilla.mozilla.org/show_bug.cgi?id=1288359). This can break web apps,
# like Discord, which rely on the API.
"dom.webaudio.enabled" = false;
# Disable video statistics
# Prevent websites from measuring video performance (possible fingerprinting). See
# Mozilla Bug 654550 (https://bugzilla.mozilla.org/show_bug.cgi?id=654550).
"media.video_stats.enabled" = false;
# Enable query parameter stripping
# Firefox 102 introduced query parameter stripping like utm_source. Enabled by
# default with Strict Enhanced Tracking Protection.
"privacy.query_stripping" = true;
}

View file

@ -0,0 +1,154 @@
{ pkgs, lib, ... }:
let
merge = lib.foldr (a: b: a // b) { };
in
{
programs.browserpass = {
enable = true;
browsers = ["firefox"];
};
programs.firefox = {
enable = true;
package = pkgs.wrapFirefox pkgs.firefox-unwrapped {
cfg = {
# Tridactyl native connector
enableTridactylNative = true;
enableBrowserpass = true;
};
extraPolicies = {
DontCheckDefaultBrowser = true;
DisablePocket = true;
DisableTelemetry = true;
DisplayBookmarksToolbar = "always";
EnableTrackingProtection = {
Value = true;
Locked = true;
Cryptomining = true;
};
FirefoxHome = {
Search = true;
TopSites = false;
SponsoredTopSites = false;
Highlights = false;
Pocket = false;
SponsoredPocket = false;
Snippets = false;
Locked = true;
};
UserMessaging = {
WhatsNew = false;
ExtensionRecommendations = false;
FeatureRecommendations = false;
UrlbarInterventions = false;
SkipOnboarding = true;
MoreFromMozilla = false;
};
NoDefaultBookmarks = true;
OfferToSaveLogins = false;
SearchSuggestEnabled = false;
OverrideFirstRunPage = "";
OverridePostUpdatePage = "";
ExtensionSettings = {
"uBlock0@raymondhill.net" = {
"allowed_types" = "extention";
"installation_mode" = "force_installed";
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
};
"addon@darkreader.org" = {
"allowed_types" = "extension";
"installation_mode" = "force_installed";
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/darkreader/latest.xpi";
};
"browserpass@maximbaz.com" = {
"allowed_types" = "extension";
"installation_mode" = "force_installed";
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/browserpass-ce/latest.xpi";
};
"gdpr@cavi.au.dk" = {
"allowed_types" = "extension";
"installation_mode" = "force_installed";
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/consent-o-matic/latest.xpi";
};
"jid1-BoFifL9Vbdl2zQ@jetpack" = {
"allowed_types" = "extension";
"installation_mode" = "force_installed";
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/decentraleyes/latest.xpi";
};
"CookieAutoDelete@kennydo.com" = {
"allowed_types" = "extension";
"installation_mode" = "force_installed";
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/cookie-autodelete/latest.xpi";
};
};
Preferences = {
"browser.crashReports.unsubmittedCheck.autoSubmit2" = {
Value = false;
Status = "locked";
};
"browser.selfsupport.url" = {
Value = "";
Status = "locked";
};
"browser.aboutConfig.showWarning" = {
Value = false;
Status = "locked";
};
"browser.aboutHomeSnippets.updateUrl" = {
Value = "";
Status = "locked";
};
"browser.startup.homepage_override.mstone" = {
Value = "ignore";
Status = "locked";
};
"browser.startup.homepage_override.buildID" = {
Value = "";
Status = "locked";
};
"browser.tabs.firefox-view" = {
Value = false;
Status = "locked";
};
"dom.security.https_only_mode" = {
Value = true;
Status = "locked";
};
"extensions.htmlaboutaddons.recommendations.enabled" = {
Value = false;
Status = "locked";
};
"extensions.recommendations.themeRecommendationUrl" = {
Value = "";
Status = "locked";
};
"network.IDN_show_punycode" = {
Value = true;
# Status = "locked";
};
};
};
};
profiles.ephase = {
id = 0;
name = "ephase";
isDefault = true;
search = {
force = true;
default = "DuckDuckGo";
};
settings = merge [
(import ./conf/doh.nix)
(import ./conf/drm.nix)
(import ./conf/experiments.nix)
(import ./conf/extensions.nix)
(import ./conf/preferences.nix)
(import ./conf/privacy.nix)
(import ./conf/safebrowsing.nix)
(import ./conf/suggest.nix)
(import ./conf/telemetry.nix)
(import ./conf/theme.nix)
(import ./conf/tracking.nix)
];
};
};
}

47
modules/home/foot.nix Normal file
View file

@ -0,0 +1,47 @@
{ pkgs, ...}:
{
programs.foot = {
enable = true;
settings = {
main = {
dpi-aware = "yes";
font = "Fira Code Nerd Font Mono:size=10";
};
mouse = {
hide-when-typing = "yes";
};
colors = {
background = "181818";
foreground = "d8d8d8";
regular0 = "181818";
regular1 = "ab4642";
regular2 = "a1b56c";
regular3 = "f7ca88";
regular4 = "7cafc2";
regular5 = "ba8baf";
regular6 = "86c1b9";
regular7 = "d8d8d8";
bright0 = "585858";
bright1 = "dc9656";
bright2 = "282828";
bright3 = "383838";
bright4 = "b8b8b8";
bright5 = "e8e8e8";
bright6 = "a16946";
bright7 = "f8f8f8";
"16" = "dc9656";
"17" = "a16946";
"18" = "282828";
"19" = "383838";
"20" = "b8b8b8";
"21" = "e8e8e8";
selection-background = "d8d8d8";
selection-foreground = "181818";
urls = "b8b8b8";
jump-labels = "181818 f7ca88";
scrollback-indicator= "181818 b8b8b8";
};
};
};
}

20
modules/home/lutris.nix Normal file
View file

@ -0,0 +1,20 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
( lutris.override {
extraLibraries = pkgs: [
wine
xorg.libXcursor
xorg.libXi
xorg.libXinerama
xorg.libXScrnSaver
libpng
libpulseaudio
libvorbis
stdenv.cc.cc.lib
libkrb5
keyutils
];
})
];
}

11
modules/home/zathura.nix Normal file
View file

@ -0,0 +1,11 @@
{ pkgs, ... }:
{
programs.zathura = {
enable = true;
options = {
selection-clipboard = "clipboard";
font = "Fira Sans 12";
recolor = true;
};
};
}

5
modules/nixos/doas.nix Normal file
View file

@ -0,0 +1,5 @@
{ config, ...}:
{
security.doas.enable = true;
security.sudo.enable = false;
}

13
modules/nixos/neovim.nix Normal file
View file

@ -0,0 +1,13 @@
{ config, pkgs, ...}:
{
environment.systemPackages = with pkgs; [
neovim
];
programs.neovim = {
enable = true;
defaultEditor = true;
viAlias = true;
vimAlias = true;
};
}

View file

@ -0,0 +1,9 @@
{ config, pkgs, ...}:
{
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
}

7
modules/nixos/steam.nix Normal file
View file

@ -0,0 +1,7 @@
{ pkgs, ... }:
{
programs.steam = {
enable = true;
gamescopeSession.enable = true;
};
}

View file

@ -0,0 +1,9 @@
{ config, pkgs, ...}:
{
xdg.portal = {
enable = true;
wlr.enable = true;
# gtk portal needed to make gtk apps happy
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
};
}

1
result Symbolic link
View file

@ -0,0 +1 @@
/nix/store/ji0qfqr4rl5dx5dl55jqafkvknyhpznd-nixos-system-mrmeeseeks-23.11.20230722.12303c6