diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..f0e0e2b --- /dev/null +++ b/TODO.md @@ -0,0 +1,17 @@ +# TODOs +- [ ] Notifications management via dms +- [ ] Launcher via dms +- [ ] DMS screenshots +- [ ] Hyprland theming using mutagen with dms integration +- [ ] Copy the DMS configs here +- [ ] DMS config sync to here using script +- [ ] Binds for other DMS features (with subcommand) +- [ ] Finish decman config +- [ ] Remove wlogout and replace with dms setup +- [ ] Yazi theming +- [ ] Kitty theming +- [ ] Fish theming +- [ ] Fastfetch theming +- [ ] DMS instead of Hyprlock for locker? +- [ ] Zathura theming possible? +- [ ] Librewolf theme diff --git a/config.py b/config.py index 85ca74d..f5d2a53 100644 --- a/config.py +++ b/config.py @@ -1,5 +1,8 @@ -grub_theme = "/usr/share/grub/themes/monterey-grub-theme/theme.txt" -grub_os_prober = True -kernel_args_all = "" -kernel_args_debug_only = "" -kernel_args_normal_only = "" +grub_theme = { + "desktop": "/usr/share/grub/themes/monterey-grub-theme/theme.txt", + "laptop": "/usr/share/grub/themes/monterey-grub-theme/theme.txt", +} +grub_os_prober = {"desktop": True, "laptop": False} +kernel_args_all = {"desktop": "", "laptop": ""} +kernel_args_debug_only = {"desktop": "", "laptop": ""} +kernel_args_normal_only = {"desktop": "", "laptop": ""} diff --git a/config/hypr/hyprland/execs.lua b/config/hypr/hyprland/execs.lua index e1d6dc6..8fe879c 100644 --- a/config/hypr/hyprland/execs.lua +++ b/config/hypr/hyprland/execs.lua @@ -8,7 +8,6 @@ hl.on("hyprland.start", function() hl.exec_cmd("hyprlauncher -d") hl.exec_cmd("nm-applet") hl.exec_cmd("nextcloud --background") - hl.exec_cmd("quickshell") - hl.exec_cmd("matugen") + hl.exec_cmd("dms run") hl.exec_cmd("wl-paste --type text --watch cliphist store") end) diff --git a/config/hypr/hyprland/layerrules.lua b/config/hypr/hyprland/layerrules.lua new file mode 100644 index 0000000..e69de29 diff --git a/linters/clang-format b/linters/clang-format new file mode 100644 index 0000000..ea63d60 --- /dev/null +++ b/linters/clang-format @@ -0,0 +1,276 @@ +# ───────────────────────────────────────────────────────────────────── +# ╭─────────────────────────────────────────────────╮ +# │ clang-format config │ +# ╰─────────────────────────────────────────────────╯ +# ───────────────────────────────────────────────────────────────────── +BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: BlockIndent +AlignArrayOfStructures: Left +AlignConsecutiveAssignments: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: true +AlignConsecutiveBitFields: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveDeclarations: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveMacros: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveShortCaseStatements: + Enabled: true + AcrossEmptyLines: false + AcrossComments: false + AlignCaseArrows: false + AlignCaseColons: false +AlignConsecutiveTableGenBreakingDAGArgColons: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveTableGenCondOperatorColons: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignConsecutiveTableGenDefinitionColons: + Enabled: false + AcrossEmptyLines: false + AcrossComments: false + AlignCompound: false + AlignFunctionPointers: false + PadOperators: false +AlignEscapedNewlines: Right +AlignOperands: Align +AlignTrailingComments: + Kind: Always + OverEmptyLines: 0 +AllowAllArgumentsOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowBreakBeforeNoexceptSpecifier: Never +AllowShortBlocksOnASingleLine: Never +AllowShortCaseExpressionOnASingleLine: true +AllowShortCaseLabelsOnASingleLine: false +AllowShortCompoundRequirementOnASingleLine: true +AllowShortEnumsOnASingleLine: true +AllowShortFunctionsOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AttributeMacros: + - __capability +BinPackArguments: false +BinPackParameters: false +BitFieldColonSpacing: Both +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: false + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + BeforeWhile: false + IndentBraces: false + SplitEmptyFunction: true + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakAdjacentStringLiterals: true +BreakAfterAttributes: Always +BreakAfterJavaFieldAnnotations: false +BreakAfterReturnType: None +BreakArrays: true +BreakBeforeBinaryOperators: All +BreakBeforeBraces: Attach +BreakBeforeConceptDeclarations: Always +BreakBeforeInlineASMColon: OnlyMultiline +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakFunctionDefinitionParameters: false +BreakInheritanceList: BeforeColon +BreakStringLiterals: true +BreakTemplateDeclarations: MultiLine +ColumnLimit: 100 +CommentPragmas: "^ IWYU pragma:" +CompactNamespaces: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: true +DerivePointerAlignment: true +DisableFormat: false +EmptyLineAfterAccessModifier: Never +EmptyLineBeforeAccessModifier: Always +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IfMacros: + - KJ_IF_MAYBE +IncludeBlocks: Preserve +IncludeCategories: + - Regex: ^"(llvm|llvm-c|clang|clang-c)/ + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: ^(<|"(gtest|gmock|isl|json)/) + Priority: 3 + SortPriority: 0 + CaseSensitive: false + - Regex: .* + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IncludeIsMainRegex: (Test)?$ +IncludeIsMainSourceRegex: "" +IndentAccessModifiers: true +IndentCaseBlocks: true +IndentCaseLabels: true +IndentExternBlock: AfterExternBlock +IndentGotoLabels: true +IndentPPDirectives: BeforeHash +IndentRequiresClause: true +IndentWidth: 4 +IndentWrappedFunctionNames: true +InsertBraces: false +InsertNewlineAtEOF: false +InsertTrailingCommas: None +IntegerLiteralSeparator: + Binary: 0 + BinaryMinDigits: 0 + Decimal: 0 + DecimalMinDigits: 0 + Hex: 0 + HexMinDigits: 0 +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLines: + AtEndOfFile: false + AtStartOfBlock: true + AtStartOfFile: true +LambdaBodyIndentation: Signature +LineEnding: DeriveLF +MacroBlockBegin: "" +MacroBlockEnd: "" +MainIncludeChar: Quote +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 2 +ObjCBreakBeforeNestedBlockParam: true +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PPIndentWidth: -1 +PackConstructorInitializers: BinPack +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakOpenParenthesis: 0 +PenaltyBreakScopeResolution: 500 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyIndentedWhitespace: 0 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +QualifierAlignment: Left +ReferenceAlignment: Pointer +ReflowComments: true +RemoveBracesLLVM: true +RemoveParentheses: MultipleParentheses +RemoveSemicolon: false +RequiresClausePosition: OwnLine +RequiresExpressionIndentation: OuterScope +SeparateDefinitionBlocks: Always +ShortNamespaceLines: 1 +SkipMacroDefinitionBody: false +SortIncludes: CaseSensitive +SortJavaStaticImport: Before +SortUsingDeclarations: LexicographicNumeric +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceAroundPointerQualifiers: Default +SpaceBeforeAssignmentOperators: true +SpaceBeforeCaseColon: false +SpaceBeforeCpp11BracedList: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeJsonColon: false +SpaceBeforeParens: ControlStatements +SpaceBeforeParensOptions: + AfterControlStatements: true + AfterForeachMacros: true + AfterFunctionDeclarationName: true + AfterFunctionDefinitionName: true + AfterIfMacros: true + AfterOverloadedOperator: false + AfterPlacementOperator: true + AfterRequiresInClause: false + AfterRequiresInExpression: false + BeforeNonEmptyParentheses: false +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: Never +SpacesInContainerLiterals: true +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 +SpacesInParens: Custom +SpacesInParensOptions: + ExceptDoubleParentheses: false + InConditionalStatements: true + InCStyleCasts: false + InEmptyParentheses: false + Other: true +SpacesInSquareBrackets: true +Standard: Latest +StatementAttributeLikeMacros: + - Q_EMIT +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 4 +TableGenBreakInsideDAGArg: DontBreak +UseTab: Never +VerilogBreakBetweenInstancePorts: true +WhitespaceSensitiveMacros: + - BOOST_PP_STRINGIZE + - CF_SWIFT_NAME + - NS_SWIFT_NAME + - PP_STRINGIZE + - STRINGIZE diff --git a/linters/eslint.config.mjs b/linters/eslint.config.mjs new file mode 100644 index 0000000..48eb7aa --- /dev/null +++ b/linters/eslint.config.mjs @@ -0,0 +1,744 @@ +import eslint from '@eslint/js'; +import globals from 'globals'; +import stylistic from '@stylistic/eslint-plugin'; +import tseslint from 'typescript-eslint'; +import typescript from '@typescript-eslint/eslint-plugin'; +import vue from 'eslint-plugin-vue'; + +const style = { + 'plugins': { + '@stylistic': stylistic, + '@stylistic/js': stylistic, + '@stylistic/ts': stylistic + }, + 'files': [ + '**/*.ts', + '**/*.js', + '**/*.mjs', + '**/*.cjs', + '**/*.tsx', + '**/*.jsx' + ], + 'rules': { + 'sort-imports': [ + 'warn', + { + 'ignoreCase': false, + 'ignoreDeclarationSort': false, + 'ignoreMemberSort': false, + 'memberSyntaxSortOrder': [ + 'none', + 'all', + 'multiple', + 'single' + ], + 'allowSeparatedGroups': false + } + ], + // Formatting + '@stylistic/array-bracket-newline': [ + 'error', + { + 'multiline': false, + 'minItems': 2 + } + ], + '@stylistic/array-bracket-spacing': [ + 'error', + 'always' + ], + '@stylistic/array-element-newline': [ + 'error', + { + 'consistent': false, + 'multiline': false, + 'minItems': 2 + } + ], + '@stylistic/arrow-parens': [ + 'error', + 'as-needed' + ], + '@stylistic/arrow-spacing': [ + 'error', + { + 'before': true, + 'after': true + } + ], + '@stylistic/block-spacing': [ + 'error', + 'always' + ], + '@stylistic/brace-style': [ + 'error', + '1tbs', + { + 'allowSingleLine': false + } + ], + '@stylistic/comma-dangle': [ + 'error', + 'never' + ], + '@stylistic/comma-spacing': [ + 'error', + { + 'before': false, + 'after': true + } + ], + '@stylistic/comma-style': [ + 'error', + 'last' + ], + '@stylistic/dot-location': [ + 'error', + 'property' + ], + '@stylistic/function-call-argument-newline': [ + 'error', + 'consistent' + ], + '@stylistic/function-call-spacing': [ + 'error', + 'never' + ], + '@stylistic/function-paren-newline': [ + 'error', + 'multiline-arguments' + ], + '@stylistic/implicit-arrow-linebreak': [ + 'error', + 'beside' + ], + '@stylistic/indent': [ + 'error', + 4 + ], + '@stylistic/indent-binary-ops': [ + 'error', + 4 + ], + '@stylistic/key-spacing': [ + 'error', + { + 'beforeColon': false, + 'afterColon': true + } + ], + '@stylistic/keyword-spacing': [ + 'error', + { + 'before': true, + 'after': true + } + ], + '@stylistic/lines-between-class-members': [ + 'error', + 'always' + ], + '@stylistic/max-len': [ + 'warn', + { + 'code': 140, + 'comments': 160, + 'ignoreComments': false, + 'ignoreUrls': true, + 'ignoreStrings': true, + 'ignoreTemplateLiterals': true, + 'ignoreRegExpLiterals': true + } + ], + '@stylistic/max-statements-per-line': [ + 'error', + { + 'max': 1 + } + ], + '@stylistic/multiline-ternary': [ + 'error', + 'always-multiline' + ], + '@stylistic/new-parens': [ + 'error', + 'always' + ], + '@stylistic/newline-per-chained-call': 'error', + '@stylistic/no-confusing-arrow': 'error', + '@stylistic/no-extra-parens': [ + 'error', + 'all', + { + 'nestedBinaryExpressions': false, + 'ternaryOperandBinaryExpressions': false, + 'ignoreJSX': 'multi-line', + 'nestedConditionalExpressions': false + } + ], + '@stylistic/no-extra-semi': 'error', + '@stylistic/no-floating-decimal': 'error', + '@stylistic/no-mixed-operators': 'error', + '@stylistic/no-mixed-spaces-and-tabs': 'error', + '@stylistic/no-multi-spaces': 'error', + '@stylistic/no-multiple-empty-lines': [ + 'error', + { + 'max': 3, + 'maxEOF': 2 + } + ], + '@stylistic/no-tabs': 'error', + '@stylistic/no-trailing-spaces': 'error', + '@stylistic/no-whitespace-before-property': 'error', + '@stylistic/object-curly-newline': [ + 'error', + { + 'multiline': true, + 'minProperties': 1 + } + ], + '@stylistic/object-curly-spacing': [ + 'error', + 'always' + ], + '@stylistic/object-property-newline': 'error', + '@stylistic/one-var-declaration-per-line': 'error', + '@stylistic/operator-linebreak': [ + 'error', + 'before' + ], + '@stylistic/padded-blocks': [ + 'error', + { + 'blocks': 'never', + 'classes': 'always', + 'switches': 'never' + } + ], + + // Padding lines. The most in-depth part of this config + '@stylistic/padding-line-between-statements': [ + 'error', + // Variables, Constants + { + 'blankLine': 'never', + 'prev': 'var', + 'next': 'var' + }, + { + 'blankLine': 'never', + 'prev': 'let', + 'next': 'let' + }, + { + 'blankLine': 'never', + 'prev': 'const', + 'next': 'const' + }, + { + 'blankLine': 'always', + 'prev': 'var', + 'next': [ + 'block', + 'block-like', + 'break', + 'cjs-export', + 'cjs-import', + 'class', + 'const', + 'continue', + 'debugger', + 'directive', + 'do', + 'empty', + 'export', + 'expression', + 'for', + 'function', + 'if', + 'iife', + 'import', + 'let', + 'return', + 'switch', + 'throw', + 'try', + 'var', + 'with' + ] + }, + { + 'blankLine': 'always', + 'prev': 'let', + 'next': [ + 'block', + 'block-like', + 'break', + 'cjs-export', + 'cjs-import', + 'class', + 'const', + 'continue', + 'debugger', + 'directive', + 'do', + 'empty', + 'export', + 'expression', + 'for', + 'function', + 'if', + 'iife', + 'import', + 'return', + 'switch', + 'throw', + 'try', + 'var', + 'while', + 'with' + ] + }, + { + 'blankLine': 'always', + 'prev': 'const', + 'next': [ + 'block', + 'block-like', + 'break', + 'cjs-export', + 'cjs-import', + 'class', + 'continue', + 'debugger', + 'directive', + 'do', + 'empty', + 'export', + 'expression', + 'for', + 'function', + 'if', + 'iife', + 'import', + 'let', + 'return', + 'switch', + 'throw', + 'try', + 'var', + 'while', + 'with' + ] + }, + // Import + { + 'blankLine': 'never', + 'prev': 'import', + 'next': 'import' + }, + { + 'blankLine': 'never', + 'prev': 'cjs-import', + 'next': 'cjs-import' + }, + { + 'blankLine': 'always', + 'prev': [ + 'block', + 'block-like', + 'break', + 'cjs-export', + 'class', + 'const', + 'continue', + 'debugger', + 'directive', + 'do', + 'empty', + 'export', + 'expression', + 'for', + 'function', + 'if', + 'iife', + 'let', + 'return', + 'switch', + 'throw', + 'try', + 'var', + 'while', + 'with' + ], + 'next': 'cjs-import' + }, + { + 'blankLine': 'always', + 'prev': 'cjs-import', + 'next': [ + 'block', + 'block-like', + 'break', + 'cjs-export', + 'class', + 'const', + 'continue', + 'debugger', + 'directive', + 'do', + 'empty', + 'export', + 'expression', + 'for', + 'function', + 'if', + 'iife', + 'let', + 'return', + 'switch', + 'throw', + 'try', + 'var', + 'while', + 'with' + ] + }, + { + 'blankLine': 'always', + 'prev': [ + 'block', + 'block-like', + 'break', + 'cjs-export', + 'class', + 'const', + 'continue', + 'debugger', + 'directive', + 'do', + 'empty', + 'export', + 'expression', + 'for', + 'function', + 'if', + 'iife', + 'let', + 'return', + 'switch', + 'throw', + 'try', + 'var', + 'while', + 'with' + ], + 'next': 'import' + }, + { + 'blankLine': 'always', + 'prev': 'import', + 'next': [ + 'block', + 'block-like', + 'break', + 'cjs-export', + 'class', + 'const', + 'continue', + 'debugger', + 'directive', + 'do', + 'empty', + 'export', + 'expression', + 'for', + 'function', + 'if', + 'iife', + 'let', + 'return', + 'switch', + 'throw', + 'try', + 'var', + 'while', + 'with' + ] + }, + // If + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'if' + }, + { + 'blankLine': 'always', + 'prev': 'if', + 'next': '*' + }, + // For + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'for' + }, + { + 'blankLine': 'always', + 'prev': 'for', + 'next': '*' + }, + // While + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'while' + }, + { + 'blankLine': 'always', + 'prev': 'while', + 'next': '*' + }, + // Functions + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'function' + }, + { + 'blankLine': 'always', + 'prev': 'function', + 'next': '*' + }, + // Block Statements + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'block-like' + }, + { + 'blankLine': 'always', + 'prev': 'block-like', + 'next': '*' + }, + // Switch + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'switch' + }, + { + 'blankLine': 'always', + 'prev': 'switch', + 'next': '*' + }, + // Try-Catch + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'try' + }, + { + 'blankLine': 'always', + 'prev': 'try', + 'next': '*' + }, + // Throw + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'throw' + }, + { + 'blankLine': 'always', + 'prev': 'throw', + 'next': '*' + }, + // Return + { + 'blankLine': 'never', + 'prev': 'return', + 'next': '*' + }, + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'return' + }, + // Export + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'export' + }, + { + 'blankLine': 'always', + 'prev': 'export', + 'next': '*' + }, + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'cjs-export' + }, + { + 'blankLine': 'always', + 'prev': 'cjs-export', + 'next': '*' + }, + // Classes + { + 'blankLine': 'always', + 'prev': '*', + 'next': 'class' + }, + { + 'blankLine': 'always', + 'prev': 'class', + 'next': '*' + } + ], + '@stylistic/quote-props': [ + 'error', + 'always' + ], + '@stylistic/quotes': [ + 'error', + 'single' + ], + '@stylistic/rest-spread-spacing': [ + 'error', + 'never' + ], + '@stylistic/semi': [ + 'error', + 'always' + ], + '@stylistic/semi-spacing': [ + 'error', + { + 'before': false, + 'after': true + } + ], + '@stylistic/semi-style': [ + 'error', + 'last' + ], + '@stylistic/space-before-blocks': [ + 'error', + 'always' + ], + '@stylistic/space-before-function-paren': [ + 'error', + 'always' + ], + '@stylistic/space-in-parens': [ + 'error', + 'always' + ], + '@stylistic/space-infix-ops': [ + 'error', + { + 'int32Hint': false + } + ], + '@stylistic/space-unary-ops': 'error', + '@stylistic/spaced-comment': [ + 'error', + 'always' + ], + '@stylistic/switch-colon-spacing': 'error', + '@stylistic/template-curly-spacing': [ + 'error', + 'always' + ], + '@stylistic/template-tag-spacing': [ + 'error', + 'always' + ], + '@stylistic/type-generic-spacing': 'error', + '@stylistic/type-named-tuple-spacing': 'error', + '@stylistic/wrap-iife': [ + 'error', + 'inside' + ], + '@stylistic/wrap-regex': 'error', + '@stylistic/ts/type-annotation-spacing': 'error' + } +}; + +/** @type {import('eslint').Linter.Config} */ +export default tseslint.config( + // Base JavaScript rules + eslint.configs.recommended, + tseslint.configs.recommended, + style, + + // Vue support (including TS and JSX inside SFCs) + { + 'files': [ '**/*.vue' ], + 'languageOptions': { + 'sourceType': 'module', + 'ecmaVersion': 'latest', + 'globals': globals.browser, + 'parserOptions': { + 'parser': tseslint.parser + } + }, + 'plugins': { + 'vue': vue, + '@stylistic': stylistic, + '@stylistic/js': stylistic, + '@stylistic/ts': stylistic, + '@typescript-eslint': typescript + }, + 'extends': [ + eslint.configs.recommended, + ...vue.configs['flat/recommended'] + ], + 'rules': { + ...typescript.configs.recommended.rules, + ...style.rules, + + // Vue specific rules + '@stylistic/indent': 'off', + 'vue/html-indent': [ + 'error', + 4 + ], + 'vue/html-comment-indent': [ + 'error', + 4 + ], + 'vue/script-indent': [ + 'error', + 4, + { + 'baseIndent': 1, + 'switchCase': 1 + } + ], + 'vue/html-self-closing': [ + 'error', + { + 'html': { + 'void': 'never', + 'normal': 'never', + 'component': 'always' + }, + 'svg': 'always', + 'math': 'never' + } + ], + 'vue/max-attributes-per-line': [ + 'error', + { + 'singleline': 3, + 'multiline': 1 + } + ] + } + } +); diff --git a/linters/indentconfig.yaml b/linters/indentconfig.yaml new file mode 100644 index 0000000..9aac033 --- /dev/null +++ b/linters/indentconfig.yaml @@ -0,0 +1,82 @@ +# Use spaces for indent (because f*k tabs) +defaultIndent: " " + +# Limit Number of backups +maxNumberOfBackups: 3 + +verbatimEnvironments: + verbatim: 1 + lstlisting: 1 + minted: 1 + code: 1 + +indentRules: + recall: " " + remarks: " " + remark: " " + guides: " " + properties: " " + restrictions: " " + limitations: " " + terms: " " + notation: " " + usage: " " + task: " " + proof: " " + general: " " + simplebox: " " + definition: " " + theorem: " " + lemma: " " + corollary: " " + axiom: " " + fact: " " + proposition: " " + example: " " + formula: " " + conjugation: " " + forms: " " + +lookForAlignDelims: + tables: + delims: 1 + alignDoubleBackSlash: 1 + spacesBeforeDoubleBackSlash: 1 + multiColumnGrouping: 0 + alignRowsWithoutMaxDelims: 1 + spacesBeforeAmpersand: 1 + spacesAfterAmpersand: 1 + justification: left + alignFinalDoubleBackSlash: 0 + dontMeasure: 0 + delimiterRegEx: (? Migration to V4 + -> WARNING: This will remove the old configurations from the system +" + + +confirmation="" +read -p "Do you really want to remove the old configuration files and update to the new configs? (y/N) " confirmation +if [[ "$confirmation" == "y" ]]; then + rm -rf ~/.config/hypr + rm ~/.config/platform + rm -rf ~/.config/rofi + rm -rf ~/.config/ags + rm -rf ~/.config/astal +else + echo "Aborting." +fi diff --git a/modules/coding/latex.py b/modules/coding/latex.py index 19e3758..31d8da8 100644 --- a/modules/coding/latex.py +++ b/modules/coding/latex.py @@ -2,22 +2,53 @@ import decman from decman.plugins import pacman -class BaseModule(decman.Module): - def __init__(self): +class Latex(decman.Module): + def __init__(self, user: str): """Base packages that should never be uninstalled""" + self._user = user super().__init__("latex") @pacman.packages def pkgs(self) -> set[str]: return { - "texlive", - "texlive-langgerman", + "biber", "perl-yaml-tiny", "perl-file-homedir", - "biber", + "python-pygments", "texlab", + "texlive-basic", + "texlive-bibtexextra", + "texlive-binextra", + "texlive-context", + "texlive-fontsextra", + "texlive-fontsrecommended", + "texlive-fontutils", + "texlive-formatsextra", + "texlive-games", + "texlive-humanities", + "texlive-latex", + "texlive-latexextra", + "texlive-latexrecommended", + "texlive-lualatex", + "texlive-mathscience", + "texlive-metapost", + "texlive-music", + "texlive-pictures", + "texlive-plaingeneric", + "texlive-pstricks", + "texlive-publishers", + "texlive-xetex", + "texlive-langgerman", } def on_enable(self, store: decman.Store): - # TODO: clone the git repo - return super().on_enable(store) + decman.prg( + [ + "cd", + "~/projects/", + "git", + "clone", + "https://git.janishutz.com/janishutz/latex", + ], + user=self._user, + ) diff --git a/modules/coding/neovim.py b/modules/coding/neovim.py index f2d4823..add53fc 100644 --- a/modules/coding/neovim.py +++ b/modules/coding/neovim.py @@ -2,7 +2,7 @@ import decman from decman.plugins import pacman, aur -class NeovimModule(decman.Module): +class Neovim(decman.Module): def __init__(self): """Neovim Packages""" super().__init__("neovim") @@ -15,6 +15,7 @@ class NeovimModule(decman.Module): "lua-language-server", "tree-sitter", "tree-sitter-cli", + "shell-color-scripts-git", "stylua", } diff --git a/modules/core/applications/dev_tools.py b/modules/core/applications/dev_tools.py index 163d088..dc50f19 100644 --- a/modules/core/applications/dev_tools.py +++ b/modules/core/applications/dev_tools.py @@ -17,12 +17,31 @@ class DevTools(decman.Module): "docker-buildx", "docker-compose", "filezilla", - "kitty", - "lazygit", "git-lfs", "hugo", + "kitty", + "lazygit", "meld", "minisign", + "python-argcomplete", + "python-black", + "python-build", + "python-colorama", + "python-install", + "python-jsonschema", + "python-pip", + "python-numpy", + "python-scipy", + "python-sympy", "serpl", "terminator", } + + def directories(self) -> dict[str, decman.Directory]: + return { + "~/.config/lazygit": decman.Directory("./config/lazygit"), + "~/.config/kitty": decman.Directory("./config/kitty"), + } + + def files(self) -> dict[str, decman.File]: + return {"~/.indentconfig.yaml": decman.File("./linters/indentconfig.yaml")} diff --git a/modules/core/applications/games.py b/modules/core/applications/games.py index 1bdb764..93c2198 100644 --- a/modules/core/applications/games.py +++ b/modules/core/applications/games.py @@ -12,12 +12,16 @@ class Games(decman.Module): return { "android-udev", "android-tools", - "lib32-vulkan-radeon", - "vulkan-radeon", - "steam", - "prismlauncher", - "gamemmode", + "gamemode", "gamescope", + # "lib32-vulkan-radeon", + "lovr", + "obs-studio", + "obs-studio-plugin-browser", + "prismlauncher", + "steam", + "vulkan-radeon", + "v4l2loopback-dkms", } @aur.packages diff --git a/modules/core/applications/steering_wheel.py b/modules/core/applications/steering_wheel.py index 5b21435..ddfa86d 100644 --- a/modules/core/applications/steering_wheel.py +++ b/modules/core/applications/steering_wheel.py @@ -2,7 +2,7 @@ import decman from decman.plugins import aur -class BasePackages(decman.Module): +class SteeringWheel(decman.Module): def __init__(self): """Base packages that should never be uninstalled""" super().__init__("steering-wheel") diff --git a/modules/core/applications/virtual_machines.py b/modules/core/applications/virtual_machines.py new file mode 100644 index 0000000..2090e66 --- /dev/null +++ b/modules/core/applications/virtual_machines.py @@ -0,0 +1,23 @@ +import decman +from decman.plugins import pacman + + +class VirtualMachines(decman.Module): + def __init__(self, user: str): + """Set up virtual machines""" + self._user = user + super().__init__("virtualmachines") + + @pacman.packages + def pkgs(self) -> set[str]: + return { + "dnsmasq", + "ebtables", + "qemu-base", + "vde2" "virt-manager", + "virt-viewer", + } + + def on_enable(self, store: decman.Store): + # TODO: Everywhere, make user configurable + decman.prg(["usermod", "-G", "libvirt", "-a", self._user]) diff --git a/modules/core/system/base.py b/modules/core/system/base.py index 9f91404..3687259 100644 --- a/modules/core/system/base.py +++ b/modules/core/system/base.py @@ -11,33 +11,41 @@ class BasePackages(decman.Module): def pkgs(self) -> set[str]: return { "base", + "base-devel", + "cifs", "cups", "efibootmgr", + "git", "grub", "linux", "linux-firmware", "linux-headers", + "mesa", + "mesa-utils", "networkmanager", - "git", + "paccache", + "plymouth", + "reflector", "sudo", "systemd-resolvconf", "trash-cli", - "base-devel", - "cifs", - "reflector", - "paccache", - "plymouth" } @aur.packages def aurpkgs(self) -> set[str]: return {"decman"} + # TODO: + # def file_variables(self) -> dict[str, str]: + # return super().file_variables() + def files(self) -> dict[str, decman.File]: + # TODO: File substitutions (for PC and laptop) return { "/etc/mkinitcpio.conf": decman.File(source_file="./system/mkinitcpio.conf"), "/etc/pacman.conf": decman.File(source_file="./system/pacman.conf"), "/etc/default/grub": decman.File(source_file="./system/grub"), + "/etc/environment": decman.File(source_file="./system/environment"), } def on_change(self, store): diff --git a/modules/core/system/pipewire.py b/modules/core/system/pipewire.py index 6cc9d33..ddac6c4 100644 --- a/modules/core/system/pipewire.py +++ b/modules/core/system/pipewire.py @@ -1,11 +1,11 @@ import decman -from decman.plugins import pacman, aur +from decman.plugins import pacman -class BaseModule(decman.Module): +class Pipewire(decman.Module): def __init__(self): """Base packages that should never be uninstalled""" - super().__init__("base") + super().__init__("pipewire") @pacman.packages def pkgs(self) -> set[str]: diff --git a/modules/core/ui/file_manager.py b/modules/core/ui/file_manager.py index 595504b..3b23612 100644 --- a/modules/core/ui/file_manager.py +++ b/modules/core/ui/file_manager.py @@ -2,26 +2,31 @@ import decman from decman.plugins import pacman, aur -class BaseModule(decman.Module): +class FileManager(decman.Module): def __init__(self): """Base packages that should never be uninstalled""" - super().__init__("yazi") + super().__init__("filemanager") @pacman.packages def pkgs(self) -> set[str]: return { - "yazi", + "ifuse", + "libimobiledevice", "ouch", - "grub", - "linux", - "networkmanager", - "git", - "base-devel", + "yazi", } @aur.packages def aurpkgs(self) -> set[str]: return {"xdg-desktop-portal-termfilechooser-hunkyburrito-git"} - def files(self) -> dict[str, decman.File]: - return super().files() + def directories(self) -> dict[str, decman.Directory]: + return { + "~/.config/xdg-desktop-portal": decman.Directory( + "./config/xdg-desktop-portal" + ), + "~/.config/xdg-desktop-portal-termfilechooser": decman.Directory( + "./config/xdg-desktop-portal-termfilechooser" + ), + "~/.config/yazi": decman.Directory("./config/yazi"), + } diff --git a/modules/core/ui/fonts.py b/modules/core/ui/fonts.py index 7035225..b76090e 100644 --- a/modules/core/ui/fonts.py +++ b/modules/core/ui/fonts.py @@ -2,7 +2,7 @@ import decman from decman.plugins import pacman, aur -class BaseModule(decman.Module): +class Fonts(decman.Module): def __init__(self): """Base packages that should never be uninstalled""" super().__init__("fonts") @@ -10,7 +10,7 @@ class BaseModule(decman.Module): @pacman.packages def pkgs(self) -> set[str]: return { - "adobe-source-code-pro-fonts" + "adobe-source-code-pro-fonts", "ttf-fantasque-nerd", "ttf-jetbrains-mono-nerd", "ttf-iosevka-nerd", diff --git a/modules/core/ui/hyprland.py b/modules/core/ui/hyprland.py index 6445b2e..fba66b4 100644 --- a/modules/core/ui/hyprland.py +++ b/modules/core/ui/hyprland.py @@ -1,11 +1,11 @@ import decman -from decman.plugins import pacman, aur +from decman.plugins import pacman -class BaseModule(decman.Module): +class Hyprland(decman.Module): def __init__(self): """Base packages that should never be uninstalled""" - super().__init__("base") + super().__init__("hyprland") @pacman.packages def pkgs(self) -> set[str]: @@ -15,19 +15,17 @@ class BaseModule(decman.Module): "hypridle", "hyprshutdown", "grimblast", - "grim", "xdg-desktop-portal-hyprland", "hyprpolkitagent", "hyprpaper", "wl-clipboard", "cliphist", - "hyrplauncher", "hyprpwcenter", "hyprtoolkit", } def directories(self) -> dict[str, decman.Directory]: - return super().directories() + return {"~/.config/hypr": decman.Directory("./config/hypr")} def on_change(self, store: decman.Store): return super().on_change(store) diff --git a/modules/core/ui/login.py b/modules/core/ui/login.py index fd59e01..c377580 100644 --- a/modules/core/ui/login.py +++ b/modules/core/ui/login.py @@ -8,7 +8,7 @@ class LoginManager(decman.Module): def __init__(self, platform: Literal["desktop", "laptop"]): """Base packages that should never be uninstalled""" self._platform: Literal["desktop", "laptop"] = platform - super().__init__("base") + super().__init__("login") @pacman.packages def pkgs(self) -> set[str]: @@ -20,12 +20,19 @@ class LoginManager(decman.Module): else: return {"gdm"} - # TODO: Config files for laptop and desktop - # TODO: Consider dms greetd for desktop - @systemd.units def units(self) -> set[str]: if self._platform == "desktop": return {"greetd.service"} else: return {"gdm.service"} + + def files(self) -> dict[str, decman.File]: + if self._platform == "desktop": + return { + "/etc/greetd/config.toml": decman.File("./system/greetd/config.toml"), + "/etc/pam.d/greetd": decman.File("./system/greetd/pam"), + } + else: + # TODO: GDM config files + return {} diff --git a/modules/core/ui/shell.py b/modules/core/ui/shell.py index 68086d9..01b3623 100644 --- a/modules/core/ui/shell.py +++ b/modules/core/ui/shell.py @@ -6,15 +6,12 @@ from decman.plugins import pacman class DesktopShell(decman.Module): def __init__(self): """DesktopShell""" - super().__init__("base") + super().__init__("desktopshell") @pacman.packages def pkgs(self) -> set[str]: return {"dms-shell", "cava", "matugen"} - # TODO: Copy the config, once done + # TODO: Copy the config of dms, once done def directories(self) -> dict[str, decman.Directory]: return { "~/.config/matugen": decman.Directory("./config/matugen") } - - def files(self) -> dict[str, decman.File]: - return { "~/.config/matugen": decman.File("") } diff --git a/modules/core/utilities.py b/modules/core/utilities.py index 8d16805..1f68c42 100644 --- a/modules/core/utilities.py +++ b/modules/core/utilities.py @@ -12,8 +12,7 @@ class UtilPackages(decman.Module): return { "bashtop", "bluez", - "bluez-utils", - "blueman", + "clamav", "dig", "evince", "fastfetch", @@ -31,9 +30,9 @@ class UtilPackages(decman.Module): "man-db", "mpv", "nextcloud-client", - "obs-studio", "okular", "openconnect", + "os-prober", "qalculate-qt", "ripgrep", "simple-scan", @@ -48,8 +47,24 @@ class UtilPackages(decman.Module): "zathura-pdf-poppler", "zip", "zoxide", + "networkmanager-openconnect", } @aur.packages def aurpkgs(self) -> set[str]: - return {"librewolf-bin", "brave-bin", "vesktop-bin", "uxplay", "git-credential-manager-bin"} + return { + "librewolf-bin", + "brave-bin", + "vesktop-bin", + "uxplay", + "git-credential-manager-bin", + "gradia", + "parabolic" + } + + def directories(self) -> dict[str, decman.Directory]: + return { + "~/.config/fish": decman.Directory("./config/fish"), + "~/.config/fastfetch": decman.Directory("./config/fastfetch"), + "~/.config/mpv": decman.Directory("./config/mpv"), + } diff --git a/modules/theme.py b/modules/theme.py deleted file mode 100644 index 8593107..0000000 --- a/modules/theme.py +++ /dev/null @@ -1,5 +0,0 @@ -import decman - - -class SystemTheme(decman.Module): - pass diff --git a/quickshell-test.sh b/quickshell-test.sh deleted file mode 100755 index aeaa0dd..0000000 --- a/quickshell-test.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -mkdir ~/.config/quickshell | true -cp -r ./config/quickshell/* ~/.config/quickshell/ diff --git a/system/environment b/system/environment new file mode 100644 index 0000000..678a805 --- /dev/null +++ b/system/environment @@ -0,0 +1,18 @@ +# +# This file is parsed by pam_env module +# +# Syntax: simple "KEY=VAL" pairs on separate lines +# + +QT_QPA_PLATFORM=wayland +GCM_CREDENTIAL_STORE=secretservice +RADV_PERFTEST_RT=1 +ANDROID_HOME=/home/janis/Android/Sdk +EDITOR=nvim +PAGER=nvimpager +MANPAGER=nvimpager +# QT_QPA_PLATFORMTHEME=gtk3 +# GTK_THEME=Adaptive-Theme +# GTK_THEME=Material-Black-Blueberry +# QT_STYLE_OVERRIDE=kvantum +# VKD3D_CONFIG=dxr11,dxr diff --git a/system/greetd/config.toml b/system/greetd/config.toml new file mode 100644 index 0000000..fc88c7d --- /dev/null +++ b/system/greetd/config.toml @@ -0,0 +1,13 @@ +[terminal] +# The VT to run the greeter on. Can be "next", "current" or a number +# designating the VT. +vt = 1 + +# The default session, also known as the greeter. +[default_session] +command = "tuigreet --cmd Hyprland --time --remember --remember-user-session --asterisks --user-menu --sessions /usr/share/wayland-sessions" + +# The user to run the command as. The privileges this user must have depends +# on the greeter. A graphical greeter may for example require the user to be +# in the `video` group. +user = "greeter" diff --git a/system/greetd/pam b/system/greetd/pam new file mode 100644 index 0000000..148de0b --- /dev/null +++ b/system/greetd/pam @@ -0,0 +1,9 @@ +#%PAM-1.0 + +auth required pam_securetty.so +auth requisite pam_nologin.so +auth include system-local-login +auth optional pam_gnome_keyring.so +account include system-local-login +session include system-local-login +session optional pam_gnome_keyring.so auto_start diff --git a/system/grub b/system/grub new file mode 100644 index 0000000..169389a --- /dev/null +++ b/system/grub @@ -0,0 +1,63 @@ +# GRUB boot loader configuration + +GRUB_DEFAULT=0 +GRUB_TIMEOUT=5 +GRUB_DISTRIBUTOR="Arch" +GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 module_blacklist=hid-thrustmaster,hid_thrustmaster quiet splash" +GRUB_CMDLINE_LINUX="module_blacklist=hid-thrustmaster,hid_thrustmaster" + +# Preload both GPT and MBR modules so that they are not missed +GRUB_PRELOAD_MODULES="part_gpt part_msdos" + +# Uncomment to enable booting from LUKS encrypted devices +#GRUB_ENABLE_CRYPTODISK=y + +# Set to 'countdown' or 'hidden' to change timeout behavior, +# press ESC key to display menu. +GRUB_TIMEOUT_STYLE=menu + +# Uncomment to use basic console +GRUB_TERMINAL_INPUT=console + +# Uncomment to disable graphical terminal +#GRUB_TERMINAL_OUTPUT=console + +# The resolution used on graphical terminal +# note that you can use only modes which your graphic card supports via VBE +# you can see them in real GRUB with the command `videoinfo' +GRUB_GFXMODE=1920x1080 + +# Uncomment to allow the kernel use the same resolution used by grub +GRUB_GFXPAYLOAD_LINUX=keep + +# Uncomment if you want GRUB to pass to the Linux kernel the old parameter +# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx" +#GRUB_DISABLE_LINUX_UUID=true + +# Uncomment to disable generation of recovery mode menu entries +GRUB_DISABLE_RECOVERY=true + +# Uncomment and set to the desired menu colors. Used by normal and wallpaper +# modes only. Entries specified as foreground/background. +#GRUB_COLOR_NORMAL="light-blue/black" +#GRUB_COLOR_HIGHLIGHT="light-cyan/blue" + +# Uncomment one of them for the gfx desired, a image background or a gfxtheme +#GRUB_BACKGROUND="/path/to/wallpaper" + +# Uncomment to get a beep at GRUB start +#GRUB_INIT_TUNE="480 440 1" + +# Uncomment to make GRUB remember the last selection. This requires +# setting 'GRUB_DEFAULT=saved' above. +#GRUB_SAVEDEFAULT=true + +# Uncomment to disable submenus in boot menu +#GRUB_DISABLE_SUBMENU=y + +# Probing for other operating systems is disabled for security reasons. Read +# documentation on GRUB_DISABLE_OS_PROBER, if still want to enable this +# functionality install os-prober and uncomment to detect and include other +# operating systems. +GRUB_DISABLE_OS_PROBER=false +GRUB_THEME="/usr/share/grub/themes/monterey-grub-theme/theme.txt" diff --git a/system/mkinitcpio.conf b/system/mkinitcpio.conf new file mode 100644 index 0000000..2fd80a4 --- /dev/null +++ b/system/mkinitcpio.conf @@ -0,0 +1,73 @@ +# vim:set ft=sh +# MODULES +# The following modules are loaded before any boot hooks are +# run. Advanced users may wish to specify all system modules +# in this array. For instance: +# MODULES=(usbhid xhci_hcd) +MODULES=() + +# BINARIES +# This setting includes any additional binaries a given user may +# wish into the CPIO image. This is run last, so it may be used to +# override the actual binaries included by a given hook +# BINARIES are dependency parsed, so you may safely ignore libraries +BINARIES=() + +# FILES +# This setting is similar to BINARIES above, however, files are added +# as-is and are not parsed in any way. This is useful for config files. +FILES=() + +# HOOKS +# This is the most important setting in this file. The HOOKS control the +# modules and scripts added to the image, and what happens at boot time. +# Order is important, and it is recommended that you do not change the +# order in which HOOKS are added. Run 'mkinitcpio -H ' for +# help on a given hook. +# 'base' is _required_ unless you know precisely what you are doing. +# 'udev' is _required_ in order to automatically load modules +# 'filesystems' is _required_ unless you specify your fs modules in MODULES +# Examples: +## This setup specifies all modules in the MODULES setting above. +## No RAID, lvm2, or encrypted root is needed. +# HOOKS=(base) +# +## This setup will autodetect all modules for your system and should +## work as a sane default +# HOOKS=(base udev autodetect modconf block filesystems fsck) +# +## This setup will generate a 'full' image which supports most systems. +## No autodetection is done. +# HOOKS=(base udev modconf block filesystems fsck) +# +## This setup assembles a mdadm array with an encrypted root file system. +## Note: See 'mkinitcpio -H mdadm_udev' for more information on RAID devices. +# HOOKS=(base udev modconf keyboard keymap consolefont block mdadm_udev encrypt filesystems fsck) +# +## This setup loads an lvm2 volume group. +# HOOKS=(base udev modconf block lvm2 filesystems fsck) +# +## NOTE: If you have /usr on a separate partition, you MUST include the +# usr and fsck hooks. +HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck plymouth) + +# COMPRESSION +# Use this to compress the initramfs image. By default, zstd compression +# is used. Use 'cat' to create an uncompressed image. +#COMPRESSION="zstd" +#COMPRESSION="gzip" +#COMPRESSION="bzip2" +#COMPRESSION="lzma" +#COMPRESSION="xz" +#COMPRESSION="lzop" +#COMPRESSION="lz4" + +# COMPRESSION_OPTIONS +# Additional options for the compressor +#COMPRESSION_OPTIONS=() + +# MODULES_DECOMPRESS +# Decompress kernel modules during initramfs creation. +# Enable to speedup boot process, disable to save RAM +# during early userspace. Switch (yes/no). +#MODULES_DECOMPRESS="yes" diff --git a/system/pacman.conf b/system/pacman.conf new file mode 100644 index 0000000..7d7c2fd --- /dev/null +++ b/system/pacman.conf @@ -0,0 +1,100 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto +ILoveCandy +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +Color +#NoProgressBar +CheckSpace +#VerbosePkgLists +ParallelDownloads = 5 + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +#[extra-testing] +#Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +[multilib] +Include = /etc/pacman.d/mirrorlist + +[arch4edu] +Server = https://de.arch4edu.mirror.kescher.at/$arch + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs